PATH: /home/hwyuvbry/www/kerbau/assets/vendor/libs/pdfmake
FILE_BARU
CREATE
FOLDER_BARU
MKDIR
UPLOAD_FILE
GO
[ .. KEMBALI ]
📄 pdfmake.js
↓
X
📄 pdfmake.js.LICENSE.txt
↓
X
SAVING...
BERHASIL DIUBAH!
EDITING: pdfmake.js
/* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ /******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./libs/pdfmake/pdfmake.js": /*!*********************************!*\ !*** ./libs/pdfmake/pdfmake.js ***! \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var pdfmake_build_pdfmake__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! pdfmake/build/pdfmake */ \"./node_modules/pdfmake/build/pdfmake.js\");\n/* harmony import */ var pdfmake_build_pdfmake__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(pdfmake_build_pdfmake__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var pdfmake_build_vfs_fonts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! pdfmake/build/vfs_fonts */ \"./node_modules/pdfmake/build/vfs_fonts.js\");\n// include font file with pdf to make it work\n// var pdfMake = require('pdfmake/build/pdfmake.js')\n// var pdfFonts = require('pdfmake/build/vfs_fonts.js')\n// pdfMake.vfs = pdfFonts.pdfMake.vfs\n\n\npdfmake_build_pdfmake__WEBPACK_IMPORTED_MODULE_0__.vfs = pdfmake_build_vfs_fonts__WEBPACK_IMPORTED_MODULE_1__.pdfMake.vfs;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWJzL3BkZm1ha2UvcGRmbWFrZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDaUQ7QUFDRztBQUVwREEsc0RBQVcsR0FBR0MsZ0VBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVnVleHkvLi9saWJzL3BkZm1ha2UvcGRmbWFrZS5qcz8wZmZhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGluY2x1ZGUgZm9udCBmaWxlIHdpdGggcGRmIHRvIG1ha2UgaXQgd29ya1xyXG4vLyB2YXIgcGRmTWFrZSA9IHJlcXVpcmUoJ3BkZm1ha2UvYnVpbGQvcGRmbWFrZS5qcycpXHJcbi8vIHZhciBwZGZGb250cyA9IHJlcXVpcmUoJ3BkZm1ha2UvYnVpbGQvdmZzX2ZvbnRzLmpzJylcclxuLy8gcGRmTWFrZS52ZnMgPSBwZGZGb250cy5wZGZNYWtlLnZmc1xyXG5pbXBvcnQgKiBhcyBwZGZNYWtlIGZyb20gJ3BkZm1ha2UvYnVpbGQvcGRmbWFrZSc7XHJcbmltcG9ydCAqIGFzIHBkZkZvbnRzIGZyb20gJ3BkZm1ha2UvYnVpbGQvdmZzX2ZvbnRzJztcclxuXHJcbnBkZk1ha2UudmZzID0gcGRmRm9udHMucGRmTWFrZS52ZnM7XHJcbiJdLCJuYW1lcyI6WyJwZGZNYWtlIiwicGRmRm9udHMiLCJ2ZnMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./libs/pdfmake/pdfmake.js\n"); /***/ }), /***/ "./node_modules/pdfmake/build/pdfmake.js": /*!***********************************************!*\ !*** ./node_modules/pdfmake/build/pdfmake.js ***! \***********************************************/ /***/ (function(module) { eval("/*! pdfmake v0.2.6, @license MIT, @link http://pdfmake.org */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse { var i, a; }\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 9282:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_610__) {\n\n\"use strict\";\n/* provided dependency */ var process = __nested_webpack_require_610__(4155);\n// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = __nested_webpack_require_610__(2136),\n _require$codes = _require.codes,\n ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n\nvar AssertionError = __nested_webpack_require_610__(5961);\n\nvar _require2 = __nested_webpack_require_610__(9539),\n inspect = _require2.inspect;\n\nvar _require$types = (__nested_webpack_require_610__(9539).types),\n isPromise = _require$types.isPromise,\n isRegExp = _require$types.isRegExp;\n\nvar objectAssign = Object.assign ? Object.assign : (__nested_webpack_require_610__(8091).assign);\nvar objectIs = Object.is ? Object.is : __nested_webpack_require_610__(609);\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\n\nfunction lazyLoadComparison() {\n var comparison = __nested_webpack_require_610__(9158);\n\n isDeepEqual = comparison.isDeepEqual;\n isDeepStrictEqual = comparison.isDeepStrictEqual;\n} // Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\n\n\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = (/* unused pure expression or super */ null && (0));\n\nvar escapeFn = function escapeFn(str) {\n return meta[str.charCodeAt(0)];\n};\n\nvar warned = false; // The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {}; // All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n if (obj.message instanceof Error) throw obj.message;\n throw new AssertionError(obj);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFn) {\n var argsLen = arguments.length;\n var internalMessage;\n\n if (argsLen === 0) {\n internalMessage = 'Failed';\n } else if (argsLen === 1) {\n message = actual;\n actual = undefined;\n } else {\n if (warned === false) {\n warned = true;\n var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n }\n\n if (argsLen === 2) operator = '!=';\n }\n\n if (message instanceof Error) throw message;\n var errArgs = {\n actual: actual,\n expected: expected,\n operator: operator === undefined ? 'fail' : operator,\n stackStartFn: stackStartFn || fail\n };\n\n if (message !== undefined) {\n errArgs.message = message;\n }\n\n var err = new AssertionError(errArgs);\n\n if (internalMessage) {\n err.message = internalMessage;\n err.generatedMessage = true;\n }\n\n throw err;\n}\n\nassert.fail = fail; // The AssertionError is defined in internal/error.\n\nassert.AssertionError = AssertionError;\n\nfunction innerOk(fn, argLen, value, message) {\n if (!value) {\n var generatedMessage = false;\n\n if (argLen === 0) {\n generatedMessage = true;\n message = 'No value argument passed to `assert.ok()`';\n } else if (message instanceof Error) {\n throw message;\n }\n\n var err = new AssertionError({\n actual: value,\n expected: true,\n message: message,\n operator: '==',\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n} // Pure assertion tests whether a value is truthy, as determined\n// by !!value.\n\n\nfunction ok() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n innerOk.apply(void 0, [ok, args.length].concat(args));\n}\n\nassert.ok = ok; // The equality assertion tests shallow, coercive equality with ==.\n\n/* eslint-disable no-restricted-properties */\n\nassert.equal = function equal(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual != expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '==',\n stackStartFn: equal\n });\n }\n}; // The non-equality assertion tests for whether two objects are not\n// equal with !=.\n\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual == expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '!=',\n stackStartFn: notEqual\n });\n }\n}; // The equivalence assertion tests a deep equality relation.\n\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepEqual',\n stackStartFn: deepEqual\n });\n }\n}; // The non-equivalence assertion tests for any deep inequality.\n\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepEqual',\n stackStartFn: notDeepEqual\n });\n }\n};\n/* eslint-enable */\n\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepStrictEqual',\n stackStartFn: deepStrictEqual\n });\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\n\nfunction notDeepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepStrictEqual',\n stackStartFn: notDeepStrictEqual\n });\n }\n}\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (!objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'strictEqual',\n stackStartFn: strictEqual\n });\n }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notStrictEqual',\n stackStartFn: notStrictEqual\n });\n }\n};\n\nvar Comparison = function Comparison(obj, keys, actual) {\n var _this = this;\n\n _classCallCheck(this, Comparison);\n\n keys.forEach(function (key) {\n if (key in obj) {\n if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n _this[key] = actual[key];\n } else {\n _this[key] = obj[key];\n }\n }\n });\n};\n\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n if (!message) {\n // Create placeholder objects to create a nice output.\n var a = new Comparison(actual, keys);\n var b = new Comparison(expected, keys, actual);\n var err = new AssertionError({\n actual: a,\n expected: b,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.actual = actual;\n err.expected = expected;\n err.operator = fn.name;\n throw err;\n }\n\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: fn.name,\n stackStartFn: fn\n });\n }\n}\n\nfunction expectedException(actual, expected, msg, fn) {\n if (typeof expected !== 'function') {\n if (isRegExp(expected)) return expected.test(actual); // assert.doesNotThrow does not accept objects.\n\n if (arguments.length === 2) {\n throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n } // Handle primitives properly.\n\n\n if (_typeof(actual) !== 'object' || actual === null) {\n var err = new AssertionError({\n actual: actual,\n expected: expected,\n message: msg,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.operator = fn.name;\n throw err;\n }\n\n var keys = Object.keys(expected); // Special handle errors to make sure the name and the message are compared\n // as well.\n\n if (expected instanceof Error) {\n keys.push('name', 'message');\n } else if (keys.length === 0) {\n throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n keys.forEach(function (key) {\n if (typeof actual[key] === 'string' && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n return;\n }\n\n compareExceptionKey(actual, expected, key, msg, keys, fn);\n });\n return true;\n } // Guard instanceof against arrow functions as they don't have a prototype.\n\n\n if (expected.prototype !== undefined && actual instanceof expected) {\n return true;\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction getActual(fn) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n }\n\n try {\n fn();\n } catch (e) {\n return e;\n }\n\n return NO_EXCEPTION_SENTINEL;\n}\n\nfunction checkIsPromise(obj) {\n // Accept native ES6 promises and promises that are implemented in a similar\n // way. Do not accept thenables that use a function as `obj` and that have no\n // `catch` handler.\n // TODO: thenables are checked up until they have the correct methods,\n // but according to documentation, the `then` method should receive\n // the `fulfill` and `reject` arguments as well or it may be never resolved.\n return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\n\nfunction waitForActual(promiseFn) {\n return Promise.resolve().then(function () {\n var resultPromise;\n\n if (typeof promiseFn === 'function') {\n // Return a rejected promise if `promiseFn` throws synchronously.\n resultPromise = promiseFn(); // Fail in case no promise is returned.\n\n if (!checkIsPromise(resultPromise)) {\n throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n }\n } else if (checkIsPromise(promiseFn)) {\n resultPromise = promiseFn;\n } else {\n throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n }\n\n return Promise.resolve().then(function () {\n return resultPromise;\n }).then(function () {\n return NO_EXCEPTION_SENTINEL;\n }).catch(function (e) {\n return e;\n });\n });\n}\n\nfunction expectsError(stackStartFn, actual, error, message) {\n if (typeof error === 'string') {\n if (arguments.length === 4) {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (_typeof(actual) === 'object' && actual !== null) {\n if (actual.message === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n }\n } else if (actual === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n }\n\n message = error;\n error = undefined;\n } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (actual === NO_EXCEPTION_SENTINEL) {\n var details = '';\n\n if (error && error.name) {\n details += \" (\".concat(error.name, \")\");\n }\n\n details += message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n innerFail({\n actual: undefined,\n expected: error,\n operator: stackStartFn.name,\n message: \"Missing expected \".concat(fnType).concat(details),\n stackStartFn: stackStartFn\n });\n }\n\n if (error && !expectedException(actual, error, message, stackStartFn)) {\n throw actual;\n }\n}\n\nfunction expectsNoError(stackStartFn, actual, error, message) {\n if (actual === NO_EXCEPTION_SENTINEL) return;\n\n if (typeof error === 'string') {\n message = error;\n error = undefined;\n }\n\n if (!error || expectedException(actual, error)) {\n var details = message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n innerFail({\n actual: actual,\n expected: error,\n operator: stackStartFn.name,\n message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n stackStartFn: stackStartFn\n });\n }\n\n throw actual;\n}\n\nassert.throws = function throws(promiseFn) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\n\nassert.rejects = function rejects(promiseFn) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return waitForActual(promiseFn).then(function (result) {\n return expectsError.apply(void 0, [rejects, result].concat(args));\n });\n};\n\nassert.doesNotThrow = function doesNotThrow(fn) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\n\nassert.doesNotReject = function doesNotReject(fn) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return waitForActual(fn).then(function (result) {\n return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n });\n};\n\nassert.ifError = function ifError(err) {\n if (err !== null && err !== undefined) {\n var message = 'ifError got unwanted exception: ';\n\n if (_typeof(err) === 'object' && typeof err.message === 'string') {\n if (err.message.length === 0 && err.constructor) {\n message += err.constructor.name;\n } else {\n message += err.message;\n }\n } else {\n message += inspect(err);\n }\n\n var newErr = new AssertionError({\n actual: err,\n expected: null,\n operator: 'ifError',\n message: message,\n stackStartFn: ifError\n }); // Make sure we actually have a stack trace!\n\n var origStack = err.stack;\n\n if (typeof origStack === 'string') {\n // This will remove any duplicated frames from the error frames taken\n // from within `ifError` and add the original error frames to the newly\n // created ones.\n var tmp2 = origStack.split('\\n');\n tmp2.shift(); // Filter all frames existing in err.stack.\n\n var tmp1 = newErr.stack.split('\\n');\n\n for (var i = 0; i < tmp2.length; i++) {\n // Find the first occurrence of the frame.\n var pos = tmp1.indexOf(tmp2[i]);\n\n if (pos !== -1) {\n // Only keep new frames.\n tmp1 = tmp1.slice(0, pos);\n break;\n }\n }\n\n newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n }\n\n throw newErr;\n }\n}; // Expose a strict only variant of assert\n\n\nfunction strict() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n innerOk.apply(void 0, [strict, args.length].concat(args));\n}\n\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\n/***/ }),\n\n/***/ 5961:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_20315__) {\n\n\"use strict\";\n/* provided dependency */ var process = __nested_webpack_require_20315__(4155);\n// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n\n\nfunction _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; }\n\nfunction _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar _require = __nested_webpack_require_20315__(9539),\n inspect = _require.inspect;\n\nvar _require2 = __nested_webpack_require_20315__(2136),\n ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n\n\nfunction repeat(str, count) {\n count = Math.floor(count);\n if (str.length == 0 || count == 0) return '';\n var maxCount = str.length * count;\n count = Math.floor(Math.log(count) / Math.log(2));\n\n while (count) {\n str += str;\n count--;\n }\n\n str += str.substring(0, maxCount - str.length);\n return str;\n}\n\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n deepStrictEqual: 'Expected values to be strictly deep-equal:',\n strictEqual: 'Expected values to be strictly equal:',\n strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n deepEqual: 'Expected values to be loosely deep-equal:',\n equal: 'Expected values to be loosely equal:',\n notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n notEqual: 'Expected \"actual\" to be loosely unequal to:',\n notIdentical: 'Values identical but not reference-equal:'\n}; // Comparing short primitives should just show === / !== instead of using the\n// diff.\n\nvar kMaxShortLength = 10;\n\nfunction copyError(source) {\n var keys = Object.keys(source);\n var target = Object.create(Object.getPrototypeOf(source));\n keys.forEach(function (key) {\n target[key] = source[key];\n });\n Object.defineProperty(target, 'message', {\n value: source.message\n });\n return target;\n}\n\nfunction inspectValue(val) {\n // The util.inspect default values could be changed. This makes sure the\n // error messages contain the necessary information nevertheless.\n return inspect(val, {\n compact: false,\n customInspect: false,\n depth: 1000,\n maxArrayLength: Infinity,\n // Assert compares only enumerable properties (with a few exceptions).\n showHidden: false,\n // Having a long line as error is better than wrapping the line for\n // comparison for now.\n // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n // have meta information about the inspected properties (i.e., know where\n // in what line the property starts and ends).\n breakLength: Infinity,\n // Assert does not detect proxies currently.\n showProxy: false,\n sorted: true,\n // Inspect getters as we also check them when comparing entries.\n getters: true\n });\n}\n\nfunction createErrDiff(actual, expected, operator) {\n var other = '';\n var res = '';\n var lastPos = 0;\n var end = '';\n var skipped = false;\n var actualInspected = inspectValue(actual);\n var actualLines = actualInspected.split('\\n');\n var expectedLines = inspectValue(expected).split('\\n');\n var i = 0;\n var indicator = ''; // In case both values are objects explicitly mark them as not reference equal\n // for the `strictEqual` operator.\n\n if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n operator = 'strictEqualObject';\n } // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n // equal, check further special handling.\n\n\n if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n var inputLength = actualLines[0].length + expectedLines[0].length; // If the character length of \"actual\" and \"expected\" together is less than\n // kMaxShortLength and if neither is an object and at least one of them is\n // not `zero`, use the strict equal comparison to visualize the output.\n\n if (inputLength <= kMaxShortLength) {\n if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n // -0 === +0\n return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n }\n } else if (operator !== 'strictEqualObject') {\n // If the stderr is a tty and the input length is lower than the current\n // columns per line, add a mismatch indicator below the output. If it is\n // not a tty, use a default value of 80 characters.\n var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n\n if (inputLength < maxLength) {\n while (actualLines[0][i] === expectedLines[0][i]) {\n i++;\n } // Ignore the first characters.\n\n\n if (i > 2) {\n // Add position indicator for the first mismatch in case it is a\n // single line and the input length is less than the column length.\n indicator = \"\\n \".concat(repeat(' ', i), \"^\");\n i = 0;\n }\n }\n }\n } // Remove all ending lines that match (this optimizes the output for\n // readability by reducing the number of total changed lines).\n\n\n var a = actualLines[actualLines.length - 1];\n var b = expectedLines[expectedLines.length - 1];\n\n while (a === b) {\n if (i++ < 2) {\n end = \"\\n \".concat(a).concat(end);\n } else {\n other = a;\n }\n\n actualLines.pop();\n expectedLines.pop();\n if (actualLines.length === 0 || expectedLines.length === 0) break;\n a = actualLines[actualLines.length - 1];\n b = expectedLines[expectedLines.length - 1];\n }\n\n var maxLines = Math.max(actualLines.length, expectedLines.length); // Strict equal with identical objects that are not identical by reference.\n // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n\n if (maxLines === 0) {\n // We have to get the result again. The lines were all removed before.\n var _actualLines = actualInspected.split('\\n'); // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (_actualLines.length > 30) {\n _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (_actualLines.length > 27) {\n _actualLines.pop();\n }\n }\n\n return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n }\n\n if (i > 3) {\n end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n skipped = true;\n }\n\n if (other !== '') {\n end = \"\\n \".concat(other).concat(end);\n other = '';\n }\n\n var printedLines = 0;\n var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n\n for (i = 0; i < maxLines; i++) {\n // Only extra expected lines exist\n var cur = i - lastPos;\n\n if (actualLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(expectedLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(expectedLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the expected line to the cache.\n\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n printedLines++; // Only extra actual lines exist\n } else if (expectedLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n printedLines++; // Lines diverge\n } else {\n var expectedLine = expectedLines[i];\n var actualLine = actualLines[i]; // If the lines diverge, specifically check for lines that only diverge by\n // a trailing comma. In that case it is actually identical and we should\n // mark it as such.\n\n var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine); // If the expected line has a trailing comma but is otherwise identical,\n // add a comma at the end of the actual line. Otherwise the output could\n // look weird as in:\n //\n // [\n // 1 // No comma at the end!\n // + 2\n // ]\n //\n\n if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n divergingLines = false;\n actualLine += ',';\n }\n\n if (divergingLines) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result and cache the expected diverging\n // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n printedLines += 2; // Lines are identical\n } else {\n // Add all cached information to the result before adding other things\n // and reset the cache.\n res += other;\n other = ''; // If the last diverging line is exactly one line above or if it is the\n // very first line, add the line to the result.\n\n if (cur === 1 || i === 0) {\n res += \"\\n \".concat(actualLine);\n printedLines++;\n }\n }\n } // Inspected object to big (Show ~20 rows max)\n\n\n if (printedLines > 20 && i < maxLines - 2) {\n return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n }\n }\n\n return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\n\nvar AssertionError =\n/*#__PURE__*/\nfunction (_Error) {\n _inherits(AssertionError, _Error);\n\n function AssertionError(options) {\n var _this;\n\n _classCallCheck(this, AssertionError);\n\n if (_typeof(options) !== 'object' || options === null) {\n throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n }\n\n var message = options.message,\n operator = options.operator,\n stackStartFn = options.stackStartFn;\n var actual = options.actual,\n expected = options.expected;\n var limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 0;\n\n if (message != null) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, String(message)));\n } else {\n if (process.stderr && process.stderr.isTTY) {\n // Reset on each call to make sure we handle dynamically set environment\n // variables correct.\n if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n blue = \"\\x1B[34m\";\n green = \"\\x1B[32m\";\n white = \"\\x1B[39m\";\n red = \"\\x1B[31m\";\n } else {\n blue = '';\n green = '';\n white = '';\n red = '';\n }\n } // Prevent the error stack from being visible by duplicating the error\n // in a very close way to the original in case both sides are actually\n // instances of Error.\n\n\n if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n actual = copyError(actual);\n expected = copyError(expected);\n }\n\n if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, createErrDiff(actual, expected, operator)));\n } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n // In case the objects are equal but the operator requires unequal, show\n // the first object and say A equals B\n var base = kReadableOperator[operator];\n var res = inspectValue(actual).split('\\n'); // In case \"actual\" is an object, it should not be reference equal.\n\n if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n base = kReadableOperator.notStrictEqualObject;\n } // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (res.length > 30) {\n res[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (res.length > 27) {\n res.pop();\n }\n } // Only print a single input.\n\n\n if (res.length === 1) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \" \").concat(res[0])));\n } else {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\")));\n }\n } else {\n var _res = inspectValue(actual);\n\n var other = '';\n var knownOperators = kReadableOperator[operator];\n\n if (operator === 'notDeepEqual' || operator === 'notEqual') {\n _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n\n if (_res.length > 1024) {\n _res = \"\".concat(_res.slice(0, 1021), \"...\");\n }\n } else {\n other = \"\".concat(inspectValue(expected));\n\n if (_res.length > 512) {\n _res = \"\".concat(_res.slice(0, 509), \"...\");\n }\n\n if (other.length > 512) {\n other = \"\".concat(other.slice(0, 509), \"...\");\n }\n\n if (operator === 'deepEqual' || operator === 'equal') {\n _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n } else {\n other = \" \".concat(operator, \" \").concat(other);\n }\n }\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(_res).concat(other)));\n }\n }\n\n Error.stackTraceLimit = limit;\n _this.generatedMessage = !message;\n Object.defineProperty(_assertThisInitialized(_this), 'name', {\n value: 'AssertionError [ERR_ASSERTION]',\n enumerable: false,\n writable: true,\n configurable: true\n });\n _this.code = 'ERR_ASSERTION';\n _this.actual = actual;\n _this.expected = expected;\n _this.operator = operator;\n\n if (Error.captureStackTrace) {\n // eslint-disable-next-line no-restricted-syntax\n Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n } // Create error message including the error code in the name.\n\n\n _this.stack; // Reset the name.\n\n _this.name = 'AssertionError';\n return _possibleConstructorReturn(_this);\n }\n\n _createClass(AssertionError, [{\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n }\n }, {\n key: inspect.custom,\n value: function value(recurseTimes, ctx) {\n // This limits the `actual` and `expected` property default inspection to\n // the minimum depth. Otherwise those values would be too verbose compared\n // to the actual error message which contains a combined view of these two\n // input values.\n return inspect(this, _objectSpread({}, ctx, {\n customInspect: false,\n depth: 0\n }));\n }\n }]);\n\n return AssertionError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = AssertionError;\n\n/***/ }),\n\n/***/ 2136:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_42402__) {\n\n\"use strict\";\n// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n\n/* eslint node-core/alphabetize-errors: \"error\" */\n\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n // The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar codes = {}; // Lazy loaded\n\nvar assert;\nvar util;\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inherits(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n var _this;\n\n _classCallCheck(this, NodeError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError).call(this, getMessage(arg1, arg2, arg3)));\n _this.code = code;\n return _this;\n }\n\n return NodeError;\n }(Base);\n\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n if (assert === undefined) assert = __nested_webpack_require_42402__(9282);\n assert(typeof name === 'string', \"'name' must be a string\"); // determiner: 'must be' or 'must not be'\n\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } // TODO(BridgeAR): Improve the output by showing `null` and similar.\n\n\n msg += \". Received type \".concat(_typeof(actual));\n return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n if (util === undefined) util = __nested_webpack_require_42402__(9539);\n var inspected = util.inspect(value);\n\n if (inspected.length > 128) {\n inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n }\n\n return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n var type;\n\n if (value && value.constructor && value.constructor.name) {\n type = \"instance of \".concat(value.constructor.name);\n } else {\n type = \"type \".concat(_typeof(value));\n }\n\n return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (assert === undefined) assert = __nested_webpack_require_42402__(9282);\n assert(args.length > 0, 'At least one arg needs to be specified');\n var msg = 'The ';\n var len = args.length;\n args = args.map(function (a) {\n return \"\\\"\".concat(a, \"\\\"\");\n });\n\n switch (len) {\n case 1:\n msg += \"\".concat(args[0], \" argument\");\n break;\n\n case 2:\n msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n break;\n\n default:\n msg += args.slice(0, len - 1).join(', ');\n msg += \", and \".concat(args[len - 1], \" arguments\");\n break;\n }\n\n return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;\n\n/***/ }),\n\n/***/ 9158:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_49830__) {\n\n\"use strict\";\n// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _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; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar regexFlagsSupported = /a/g.flags !== undefined;\n\nvar arrayFromSet = function arrayFromSet(set) {\n var array = [];\n set.forEach(function (value) {\n return array.push(value);\n });\n return array;\n};\n\nvar arrayFromMap = function arrayFromMap(map) {\n var array = [];\n map.forEach(function (value, key) {\n return array.push([key, value]);\n });\n return array;\n};\n\nvar objectIs = Object.is ? Object.is : __nested_webpack_require_49830__(609);\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : __nested_webpack_require_49830__(360);\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\n\nvar _require$types = (__nested_webpack_require_49830__(9539).types),\n isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n isArrayBufferView = _require$types.isArrayBufferView,\n isDate = _require$types.isDate,\n isMap = _require$types.isMap,\n isRegExp = _require$types.isRegExp,\n isSet = _require$types.isSet,\n isNativeError = _require$types.isNativeError,\n isBoxedPrimitive = _require$types.isBoxedPrimitive,\n isNumberObject = _require$types.isNumberObject,\n isStringObject = _require$types.isStringObject,\n isBooleanObject = _require$types.isBooleanObject,\n isBigIntObject = _require$types.isBigIntObject,\n isSymbolObject = _require$types.isSymbolObject,\n isFloat32Array = _require$types.isFloat32Array,\n isFloat64Array = _require$types.isFloat64Array;\n\nfunction isNonIndex(key) {\n if (key.length === 0 || key.length > 10) return true;\n\n for (var i = 0; i < key.length; i++) {\n var code = key.charCodeAt(i);\n if (code < 48 || code > 57) return true;\n } // The maximum size for an array is 2 ** 32 -1.\n\n\n return key.length === 10 && key >= Math.pow(2, 32);\n}\n\nfunction getOwnNonIndexProperties(value) {\n return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n} // Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n\n\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n\n if (y < x) {\n return 1;\n }\n\n return 0;\n}\n\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3; // Check if they have the same source and flags\n\nfunction areSimilarRegExps(a, b) {\n return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\n\nfunction areSimilarFloatArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n for (var offset = 0; offset < a.byteLength; offset++) {\n if (a[offset] !== b[offset]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction areSimilarTypedArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\n\nfunction areEqualArrayBuffers(buf1, buf2) {\n return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\n\nfunction isEqualBoxedPrimitive(val1, val2) {\n if (isNumberObject(val1)) {\n return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n }\n\n if (isStringObject(val1)) {\n return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n }\n\n if (isBooleanObject(val1)) {\n return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n }\n\n if (isBigIntObject(val1)) {\n return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n }\n\n return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n} // Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n // All identical values are equivalent, as determined by ===.\n if (val1 === val2) {\n if (val1 !== 0) return true;\n return strict ? objectIs(val1, val2) : true;\n } // Check more closely if val1 and val2 are equal.\n\n\n if (strict) {\n if (_typeof(val1) !== 'object') {\n return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n }\n\n if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n return false;\n }\n\n if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n return false;\n }\n } else {\n if (val1 === null || _typeof(val1) !== 'object') {\n if (val2 === null || _typeof(val2) !== 'object') {\n // eslint-disable-next-line eqeqeq\n return val1 == val2;\n }\n\n return false;\n }\n\n if (val2 === null || _typeof(val2) !== 'object') {\n return false;\n }\n }\n\n var val1Tag = objectToString(val1);\n var val2Tag = objectToString(val2);\n\n if (val1Tag !== val2Tag) {\n return false;\n }\n\n if (Array.isArray(val1)) {\n // Check for sparse arrays and general fast path\n if (val1.length !== val2.length) {\n return false;\n }\n\n var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n } // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n // wan't to early return out of the rest of the checks. However we can check\n // if the second value is one of these values and the first isn't.\n\n\n if (val1Tag === '[object Object]') {\n // return keyCheck(val1, val2, strict, memos, kNoIterator);\n if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n return false;\n }\n }\n\n if (isDate(val1)) {\n if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n return false;\n }\n } else if (isRegExp(val1)) {\n if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n return false;\n }\n } else if (isNativeError(val1) || val1 instanceof Error) {\n // Do not compare the stack as it might differ even though the error itself\n // is otherwise identical.\n if (val1.message !== val2.message || val1.name !== val2.name) {\n return false;\n }\n } else if (isArrayBufferView(val1)) {\n if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n if (!areSimilarFloatArrays(val1, val2)) {\n return false;\n }\n } else if (!areSimilarTypedArrays(val1, val2)) {\n return false;\n } // Buffer.compare returns true, so val1.length === val2.length. If they both\n // only contain numeric keys, we don't need to exam further than checking\n // the symbols.\n\n\n var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n\n var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (_keys.length !== _keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n } else if (isSet(val1)) {\n if (!isSet(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsSet);\n } else if (isMap(val1)) {\n if (!isMap(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsMap);\n } else if (isAnyArrayBuffer(val1)) {\n if (!areEqualArrayBuffers(val1, val2)) {\n return false;\n }\n } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\n\nfunction getEnumerables(val, keys) {\n return keys.filter(function (k) {\n return propertyIsEnumerable(val, k);\n });\n}\n\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n // For all remaining Object pairs, including Array, objects and Maps,\n // equivalence is determined by having:\n // a) The same number of owned enumerable properties\n // b) The same set of keys/indexes (although not necessarily the same order)\n // c) Equivalent values for every corresponding key/index\n // d) For Sets and Maps, equal contents\n // Note: this accounts for both named and indexed properties on Arrays.\n if (arguments.length === 5) {\n aKeys = Object.keys(val1);\n var bKeys = Object.keys(val2); // The pair must have the same number of owned properties.\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n } // Cheap key test\n\n\n var i = 0;\n\n for (; i < aKeys.length; i++) {\n if (!hasOwnProperty(val2, aKeys[i])) {\n return false;\n }\n }\n\n if (strict && arguments.length === 5) {\n var symbolKeysA = objectGetOwnPropertySymbols(val1);\n\n if (symbolKeysA.length !== 0) {\n var count = 0;\n\n for (i = 0; i < symbolKeysA.length; i++) {\n var key = symbolKeysA[i];\n\n if (propertyIsEnumerable(val1, key)) {\n if (!propertyIsEnumerable(val2, key)) {\n return false;\n }\n\n aKeys.push(key);\n count++;\n } else if (propertyIsEnumerable(val2, key)) {\n return false;\n }\n }\n\n var symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n return false;\n }\n } else {\n var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n return false;\n }\n }\n }\n\n if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n return true;\n } // Use memos to handle cycles.\n\n\n if (memos === undefined) {\n memos = {\n val1: new Map(),\n val2: new Map(),\n position: 0\n };\n } else {\n // We prevent up to two map.has(x) calls by directly retrieving the value\n // and checking for undefined. The map can only contain numbers, so it is\n // safe to check for undefined only.\n var val2MemoA = memos.val1.get(val1);\n\n if (val2MemoA !== undefined) {\n var val2MemoB = memos.val2.get(val2);\n\n if (val2MemoB !== undefined) {\n return val2MemoA === val2MemoB;\n }\n }\n\n memos.position++;\n }\n\n memos.val1.set(val1, memos.position);\n memos.val2.set(val2, memos.position);\n var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n memos.val1.delete(val1);\n memos.val2.delete(val2);\n return areEq;\n}\n\nfunction setHasEqualElement(set, val1, strict, memo) {\n // Go looking.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var val2 = setValues[i];\n\n if (innerDeepEqual(val1, val2, strict, memo)) {\n // Remove the matching element to make sure we do not check that again.\n set.delete(val2);\n return true;\n }\n }\n\n return false;\n} // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\n\n\nfunction findLooseMatchingPrimitives(prim) {\n switch (_typeof(prim)) {\n case 'undefined':\n return null;\n\n case 'object':\n // Only pass in null as object!\n return undefined;\n\n case 'symbol':\n return false;\n\n case 'string':\n prim = +prim;\n // Loose equal entries exist only if the string is possible to convert to\n // a regular number and not NaN.\n // Fall through\n\n case 'number':\n if (numberIsNaN(prim)) {\n return false;\n }\n\n }\n\n return true;\n}\n\nfunction setMightHaveLoosePrim(a, b, prim) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) return altValue;\n return b.has(altValue) && !a.has(altValue);\n}\n\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n var altValue = findLooseMatchingPrimitives(prim);\n\n if (altValue != null) {\n return altValue;\n }\n\n var curB = b.get(altValue);\n\n if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n return false;\n }\n\n return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\n\nfunction setEquiv(a, b, strict, memo) {\n // This is a lazily initiated Set of entries which have to be compared\n // pairwise.\n var set = null;\n var aValues = arrayFromSet(a);\n\n for (var i = 0; i < aValues.length; i++) {\n var val = aValues[i]; // Note: Checking for the objects first improves the performance for object\n // heavy sets but it is a minor slow down for primitives. As they are fast\n // to check this improves the worst case scenario instead.\n\n if (_typeof(val) === 'object' && val !== null) {\n if (set === null) {\n set = new Set();\n } // If the specified value doesn't exist in the second set its an not null\n // object (or non strict only: a not matching primitive) we'll need to go\n // hunting for something thats deep-(strict-)equal to it. To make this\n // O(n log n) complexity we have to copy these values in a new set first.\n\n\n set.add(val);\n } else if (!b.has(val)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null values.\n\n if (!setMightHaveLoosePrim(a, b, val)) {\n return false;\n }\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(val);\n }\n }\n\n if (set !== null) {\n var bValues = arrayFromSet(b);\n\n for (var _i = 0; _i < bValues.length; _i++) {\n var _val = bValues[_i]; // We have to check if a primitive value is already\n // matching and only if it's not, go hunting for it.\n\n if (_typeof(_val) === 'object' && _val !== null) {\n if (!setHasEqualElement(set, _val, strict, memo)) return false;\n } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n // To be able to handle cases like:\n // Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n // ... we need to consider *all* matching keys, not just the first we find.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var key2 = setValues[i];\n\n if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n set.delete(key2);\n return true;\n }\n }\n\n return false;\n}\n\nfunction mapEquiv(a, b, strict, memo) {\n var set = null;\n var aEntries = arrayFromMap(a);\n\n for (var i = 0; i < aEntries.length; i++) {\n var _aEntries$i = _slicedToArray(aEntries[i], 2),\n key = _aEntries$i[0],\n item1 = _aEntries$i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n } else {\n // By directly retrieving the value we prevent another b.has(key) check in\n // almost all possible cases.\n var item2 = b.get(key);\n\n if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null\n // keys.\n\n if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n }\n }\n }\n\n if (set !== null) {\n var bEntries = arrayFromMap(b);\n\n for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n key = _bEntries$_i[0],\n item = _bEntries$_i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (!mapHasEqualEntry(set, a, key, item, strict, memo)) return false;\n } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n // Sets and maps don't have their entries accessible via normal object\n // properties.\n var i = 0;\n\n if (iterationType === kIsSet) {\n if (!setEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsMap) {\n if (!mapEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsArray) {\n for (; i < a.length; i++) {\n if (hasOwnProperty(a, i)) {\n if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n return false;\n }\n } else if (hasOwnProperty(b, i)) {\n return false;\n } else {\n // Array is sparse.\n var keysA = Object.keys(a);\n\n for (; i < keysA.length; i++) {\n var key = keysA[i];\n\n if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n return false;\n }\n }\n\n if (keysA.length !== Object.keys(b).length) {\n return false;\n }\n\n return true;\n }\n }\n } // The pair must have equivalent values for every corresponding key.\n // Possibly expensive deep test:\n\n\n for (i = 0; i < keys.length; i++) {\n var _key = keys[i];\n\n if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isDeepEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kLoose);\n}\n\nfunction isDeepStrictEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kStrict);\n}\n\nmodule.exports = {\n isDeepEqual: isDeepEqual,\n isDeepStrictEqual: isDeepStrictEqual\n};\n\n/***/ }),\n\n/***/ 2055:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\n// The following break classes are handled by the pair table\nexports.OP = 0; // Opening punctuation\n\nexports.CL = 1; // Closing punctuation\n\nexports.CP = 2; // Closing parenthesis\n\nexports.QU = 3; // Ambiguous quotation\n\nexports.GL = 4; // Glue\n\nexports.NS = 5; // Non-starters\n\nexports.EX = 6; // Exclamation/Interrogation\n\nexports.SY = 7; // Symbols allowing break after\n\nexports.IS = 8; // Infix separator\n\nexports.PR = 9; // Prefix\n\nexports.PO = 10; // Postfix\n\nexports.NU = 11; // Numeric\n\nexports.AL = 12; // Alphabetic\n\nexports.HL = 13; // Hebrew Letter\n\nexports.ID = 14; // Ideographic\n\nexports.IN = 15; // Inseparable characters\n\nexports.HY = 16; // Hyphen\n\nexports.BA = 17; // Break after\n\nexports.BB = 18; // Break before\n\nexports.B2 = 19; // Break on either side (but not pair)\n\nexports.ZW = 20; // Zero-width space\n\nexports.CM = 21; // Combining marks\n\nexports.WJ = 22; // Word joiner\n\nexports.H2 = 23; // Hangul LV\n\nexports.H3 = 24; // Hangul LVT\n\nexports.JL = 25; // Hangul L Jamo\n\nexports.JV = 26; // Hangul V Jamo\n\nexports.JT = 27; // Hangul T Jamo\n\nexports.RI = 28; // Regional Indicator\n\nexports.EB = 29; // Emoji Base\n\nexports.EM = 30; // Emoji Modifier\n\nexports.ZWJ = 31; // Zero Width Joiner\n\nexports.CB = 32; // Contingent break\n// The following break classes are not handled by the pair table\n\nexports.AI = 33; // Ambiguous (Alphabetic or Ideograph)\n\nexports.BK = 34; // Break (mandatory)\n\nexports.CJ = 35; // Conditional Japanese Starter\n\nexports.CR = 36; // Carriage return\n\nexports.LF = 37; // Line feed\n\nexports.NL = 38; // Next line\n\nexports.SA = 39; // South-East Asian\n\nexports.SG = 40; // Surrogates\n\nexports.SP = 41; // Space\n\nexports.XX = 42; // Unknown\n\n/***/ }),\n\n/***/ 8383:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\nvar CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK;\nexports.DI_BRK = DI_BRK = 0; // Direct break opportunity\n\nexports.IN_BRK = IN_BRK = 1; // Indirect break opportunity\n\nexports.CI_BRK = CI_BRK = 2; // Indirect break opportunity for combining marks\n\nexports.CP_BRK = CP_BRK = 3; // Prohibited break for combining marks\n\nexports.PR_BRK = PR_BRK = 4; // Prohibited break\n// Based on example pair table from https://www.unicode.org/reports/tr14/tr14-37.html#Table2\n// - ZWJ special processing for LB8a of Revision 41\n// - CB manually added as per Rule LB20\n// - CL, CP, NS, SY, IS, PR, PO, HY, BA, B2 and RI manually adjusted as per LB22 of Revision 45\n\nexports.pairTable = [//OP , CL , CP , QU , GL , NS , EX , SY , IS , PR , PO , NU , AL , HL , ID , IN , HY , BA , BB , B2 , ZW , CM , WJ , H2 , H3 , JL , JV , JT , RI , EB , EM , ZWJ , CB\n[PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], // OP\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CP\n[PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // QU\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // GL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // NS\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // EX\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // SY\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // IS\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], // PR\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // PO\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // NU\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // AL\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // HL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // ID\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // IN\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // HY\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // BA\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], // BB\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // B2\n[DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], // ZW\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CM\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // WJ\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // H2\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // H3\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JV\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JT\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // RI\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], // EB\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // EM\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // ZWJ\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK] // CB\n];\n\n/***/ }),\n\n/***/ 5106:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_82441__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_82441__(9601);\n\nexports.EncodeStream = __nested_webpack_require_82441__(9126);\nexports.DecodeStream = __nested_webpack_require_82441__(3030);\nexports.Array = __nested_webpack_require_82441__(1988);\nexports.LazyArray = __nested_webpack_require_82441__(6768);\nexports.Bitfield = __nested_webpack_require_82441__(3425);\nexports.Boolean = __nested_webpack_require_82441__(9024);\nexports.Buffer = __nested_webpack_require_82441__(5250);\nexports.Enum = __nested_webpack_require_82441__(3100);\nexports.Optional = __nested_webpack_require_82441__(9541);\nexports.Reserved = __nested_webpack_require_82441__(7468);\nexports.String = __nested_webpack_require_82441__(1466);\nexports.Struct = __nested_webpack_require_82441__(1219);\nexports.VersionedStruct = __nested_webpack_require_82441__(3585);\n\nvar utils = __nested_webpack_require_82441__(6610);\n\nvar NumberT = __nested_webpack_require_82441__(6462);\n\nvar Pointer = __nested_webpack_require_82441__(8011);\n\nObject.assign(exports, utils, NumberT, Pointer);\n\n/***/ }),\n\n/***/ 1988:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_83357__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_83357__(7042);\n\n__nested_webpack_require_83357__(1539);\n\n__nested_webpack_require_83357__(8309);\n\n__nested_webpack_require_83357__(1038);\n\n__nested_webpack_require_83357__(8783);\n\n__nested_webpack_require_83357__(4916);\n\n__nested_webpack_require_83357__(2526);\n\n__nested_webpack_require_83357__(1817);\n\n__nested_webpack_require_83357__(2165);\n\n__nested_webpack_require_83357__(6992);\n\n__nested_webpack_require_83357__(3948);\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar _require = __nested_webpack_require_83357__(6462),\n NumberT = _require.Number;\n\nvar utils = __nested_webpack_require_83357__(6610);\n\nvar ArrayT = /*#__PURE__*/function () {\n function ArrayT(type, length, lengthType) {\n if (lengthType === void 0) {\n lengthType = 'count';\n }\n\n this.type = type;\n this.length = length;\n this.lengthType = lengthType;\n }\n\n var _proto = ArrayT.prototype;\n\n _proto.decode = function decode(stream, parent) {\n var length;\n var pos = stream.pos;\n var res = [];\n var ctx = parent;\n\n if (this.length != null) {\n length = utils.resolveLength(this.length, stream, parent);\n }\n\n if (this.length instanceof NumberT) {\n // define hidden properties\n Object.defineProperties(res, {\n parent: {\n value: parent\n },\n _startOffset: {\n value: pos\n },\n _currentOffset: {\n value: 0,\n writable: true\n },\n _length: {\n value: length\n }\n });\n ctx = res;\n }\n\n if (length == null || this.lengthType === 'bytes') {\n var target = length != null ? stream.pos + length : (parent != null ? parent._length : undefined) ? parent._startOffset + parent._length : stream.length;\n\n while (stream.pos < target) {\n res.push(this.type.decode(stream, ctx));\n }\n } else {\n for (var i = 0, end = length; i < end; i++) {\n res.push(this.type.decode(stream, ctx));\n }\n }\n\n return res;\n };\n\n _proto.size = function size(array, ctx) {\n if (!array) {\n return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx);\n }\n\n var size = 0;\n\n if (this.length instanceof NumberT) {\n size += this.length.size();\n ctx = {\n parent: ctx\n };\n }\n\n for (var _iterator = _createForOfIteratorHelperLoose(array), _step; !(_step = _iterator()).done;) {\n var item = _step.value;\n size += this.type.size(item, ctx);\n }\n\n return size;\n };\n\n _proto.encode = function encode(stream, array, parent) {\n var ctx = parent;\n\n if (this.length instanceof NumberT) {\n ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent: parent\n };\n ctx.pointerOffset = stream.pos + this.size(array, ctx);\n this.length.encode(stream, array.length);\n }\n\n for (var _iterator2 = _createForOfIteratorHelperLoose(array), _step2; !(_step2 = _iterator2()).done;) {\n var item = _step2.value;\n this.type.encode(stream, item, ctx);\n }\n\n if (this.length instanceof NumberT) {\n var i = 0;\n\n while (i < ctx.pointers.length) {\n var ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val);\n }\n }\n };\n\n return ArrayT;\n}();\n\nmodule.exports = ArrayT;\n\n/***/ }),\n\n/***/ 3425:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_87751__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_87751__(2087);\n\nvar Bitfield = /*#__PURE__*/function () {\n function Bitfield(type, flags) {\n if (flags === void 0) {\n flags = [];\n }\n\n this.type = type;\n this.flags = flags;\n }\n\n var _proto = Bitfield.prototype;\n\n _proto.decode = function decode(stream) {\n var val = this.type.decode(stream);\n var res = {};\n\n for (var i = 0; i < this.flags.length; i++) {\n var flag = this.flags[i];\n\n if (flag != null) {\n res[flag] = !!(val & 1 << i);\n }\n }\n\n return res;\n };\n\n _proto.size = function size() {\n return this.type.size();\n };\n\n _proto.encode = function encode(stream, keys) {\n var val = 0;\n\n for (var i = 0; i < this.flags.length; i++) {\n var flag = this.flags[i];\n\n if (flag != null) {\n if (keys[flag]) {\n val |= 1 << i;\n }\n }\n }\n\n return this.type.encode(stream, val);\n };\n\n return Bitfield;\n}();\n\nmodule.exports = Bitfield;\n\n/***/ }),\n\n/***/ 9024:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar BooleanT = /*#__PURE__*/function () {\n function BooleanT(type) {\n this.type = type;\n }\n\n var _proto = BooleanT.prototype;\n\n _proto.decode = function decode(stream, parent) {\n return !!this.type.decode(stream, parent);\n };\n\n _proto.size = function size(val, parent) {\n return this.type.size(val, parent);\n };\n\n _proto.encode = function encode(stream, val, parent) {\n return this.type.encode(stream, +val, parent);\n };\n\n return BooleanT;\n}();\n\nmodule.exports = BooleanT;\n\n/***/ }),\n\n/***/ 5250:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_89381__) {\n\n\"use strict\";\n\n\nvar utils = __nested_webpack_require_89381__(6610);\n\nvar _require = __nested_webpack_require_89381__(6462),\n NumberT = _require.Number;\n\nvar BufferT = /*#__PURE__*/function () {\n function BufferT(length) {\n this.length = length;\n }\n\n var _proto = BufferT.prototype;\n\n _proto.decode = function decode(stream, parent) {\n var length = utils.resolveLength(this.length, stream, parent);\n return stream.readBuffer(length);\n };\n\n _proto.size = function size(val, parent) {\n if (!val) {\n return utils.resolveLength(this.length, null, parent);\n }\n\n return val.length;\n };\n\n _proto.encode = function encode(stream, buf, parent) {\n if (this.length instanceof NumberT) {\n this.length.encode(stream, buf.length);\n }\n\n return stream.writeBuffer(buf);\n };\n\n return BufferT;\n}();\n\nmodule.exports = BufferT;\n\n/***/ }),\n\n/***/ 3030:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_90310__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __nested_webpack_require_90310__(8823)[\"Buffer\"];\n\n\n__nested_webpack_require_90310__(1539);\n\n__nested_webpack_require_90310__(9714);\n\n__nested_webpack_require_90310__(7042);\n\n__nested_webpack_require_90310__(4916);\n\n__nested_webpack_require_90310__(5306);\n\nvar iconv;\n\ntry {\n iconv = __nested_webpack_require_90310__(4914);\n} catch (error) {}\n\nvar DecodeStream = /*#__PURE__*/function () {\n function DecodeStream(buffer) {\n this.buffer = buffer;\n this.pos = 0;\n this.length = this.buffer.length;\n }\n\n var _proto = DecodeStream.prototype;\n\n _proto.readString = function readString(length, encoding) {\n if (encoding === void 0) {\n encoding = 'ascii';\n }\n\n switch (encoding) {\n case 'utf16le':\n case 'ucs2':\n case 'utf8':\n case 'ascii':\n return this.buffer.toString(encoding, this.pos, this.pos += length);\n\n case 'utf16be':\n var buf = Buffer.from(this.readBuffer(length)); // swap the bytes\n\n for (var i = 0, end = buf.length - 1; i < end; i += 2) {\n var byte = buf[i];\n buf[i] = buf[i + 1];\n buf[i + 1] = byte;\n }\n\n return buf.toString('utf16le');\n\n default:\n buf = this.readBuffer(length);\n\n if (iconv) {\n try {\n return iconv.decode(buf, encoding);\n } catch (error1) {}\n }\n\n return buf;\n }\n };\n\n _proto.readBuffer = function readBuffer(length) {\n return this.buffer.slice(this.pos, this.pos += length);\n };\n\n _proto.readUInt24BE = function readUInt24BE() {\n return (this.readUInt16BE() << 8) + this.readUInt8();\n };\n\n _proto.readUInt24LE = function readUInt24LE() {\n return this.readUInt16LE() + (this.readUInt8() << 16);\n };\n\n _proto.readInt24BE = function readInt24BE() {\n return (this.readInt16BE() << 8) + this.readUInt8();\n };\n\n _proto.readInt24LE = function readInt24LE() {\n return this.readUInt16LE() + (this.readInt8() << 16);\n };\n\n return DecodeStream;\n}();\n\nDecodeStream.TYPES = {\n UInt8: 1,\n UInt16: 2,\n UInt24: 3,\n UInt32: 4,\n Int8: 1,\n Int16: 2,\n Int24: 3,\n Int32: 4,\n Float: 4,\n Double: 8\n};\n\nvar _loop = function _loop(key) {\n if (key.slice(0, 4) === 'read') {\n var bytes = DecodeStream.TYPES[key.replace(/read|[BL]E/g, '')];\n\n DecodeStream.prototype[key] = function () {\n var ret = this.buffer[key](this.pos);\n this.pos += bytes;\n return ret;\n };\n }\n};\n\nfor (var key in Buffer.prototype) {\n _loop(key);\n}\n\nmodule.exports = DecodeStream;\n\n/***/ }),\n\n/***/ 9126:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_92867__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __nested_webpack_require_92867__(8823)[\"Buffer\"];\n\n\n__nested_webpack_require_92867__(7042);\n\n__nested_webpack_require_92867__(3290);\n\n__nested_webpack_require_92867__(4916);\n\n__nested_webpack_require_92867__(5306);\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar iconv;\n\nvar stream = __nested_webpack_require_92867__(2830);\n\nvar DecodeStream = __nested_webpack_require_92867__(3030);\n\ntry {\n iconv = __nested_webpack_require_92867__(4914);\n} catch (error) {}\n\nvar EncodeStream = /*#__PURE__*/function (_stream$Readable) {\n _inheritsLoose(EncodeStream, _stream$Readable);\n\n function EncodeStream(bufferSize) {\n var _this;\n\n if (bufferSize === void 0) {\n bufferSize = 65536;\n }\n\n _this = _stream$Readable.apply(this, arguments) || this;\n _this.buffer = Buffer.alloc(bufferSize);\n _this.bufferOffset = 0;\n _this.pos = 0;\n return _this;\n } // do nothing, required by node\n\n\n var _proto = EncodeStream.prototype;\n\n _proto._read = function _read() {};\n\n _proto.ensure = function ensure(bytes) {\n if (this.bufferOffset + bytes > this.buffer.length) {\n return this.flush();\n }\n };\n\n _proto.flush = function flush() {\n if (this.bufferOffset > 0) {\n this.push(Buffer.from(this.buffer.slice(0, this.bufferOffset)));\n return this.bufferOffset = 0;\n }\n };\n\n _proto.writeBuffer = function writeBuffer(buffer) {\n this.flush();\n this.push(buffer);\n return this.pos += buffer.length;\n };\n\n _proto.writeString = function writeString(string, encoding) {\n if (encoding === void 0) {\n encoding = 'ascii';\n }\n\n switch (encoding) {\n case 'utf16le':\n case 'ucs2':\n case 'utf8':\n case 'ascii':\n return this.writeBuffer(Buffer.from(string, encoding));\n\n case 'utf16be':\n var buf = Buffer.from(string, 'utf16le'); // swap the bytes\n\n for (var i = 0, end = buf.length - 1; i < end; i += 2) {\n var byte = buf[i];\n buf[i] = buf[i + 1];\n buf[i + 1] = byte;\n }\n\n return this.writeBuffer(buf);\n\n default:\n if (iconv) {\n return this.writeBuffer(iconv.encode(string, encoding));\n } else {\n throw new Error('Install iconv-lite to enable additional string encodings.');\n }\n\n }\n };\n\n _proto.writeUInt24BE = function writeUInt24BE(val) {\n this.ensure(3);\n this.buffer[this.bufferOffset++] = val >>> 16 & 0xff;\n this.buffer[this.bufferOffset++] = val >>> 8 & 0xff;\n this.buffer[this.bufferOffset++] = val & 0xff;\n return this.pos += 3;\n };\n\n _proto.writeUInt24LE = function writeUInt24LE(val) {\n this.ensure(3);\n this.buffer[this.bufferOffset++] = val & 0xff;\n this.buffer[this.bufferOffset++] = val >>> 8 & 0xff;\n this.buffer[this.bufferOffset++] = val >>> 16 & 0xff;\n return this.pos += 3;\n };\n\n _proto.writeInt24BE = function writeInt24BE(val) {\n if (val >= 0) {\n return this.writeUInt24BE(val);\n } else {\n return this.writeUInt24BE(val + 0xffffff + 1);\n }\n };\n\n _proto.writeInt24LE = function writeInt24LE(val) {\n if (val >= 0) {\n return this.writeUInt24LE(val);\n } else {\n return this.writeUInt24LE(val + 0xffffff + 1);\n }\n };\n\n _proto.fill = function fill(val, length) {\n if (length < this.buffer.length) {\n this.ensure(length);\n this.buffer.fill(val, this.bufferOffset, this.bufferOffset + length);\n this.bufferOffset += length;\n return this.pos += length;\n } else {\n var buf = Buffer.alloc(length);\n buf.fill(val);\n return this.writeBuffer(buf);\n }\n };\n\n _proto.end = function end() {\n this.flush();\n return this.push(null);\n };\n\n return EncodeStream;\n}(stream.Readable);\n\nvar _loop = function _loop(key) {\n if (key.slice(0, 5) === 'write') {\n var bytes = +DecodeStream.TYPES[key.replace(/write|[BL]E/g, '')];\n\n EncodeStream.prototype[key] = function (value) {\n this.ensure(bytes);\n this.buffer[key](value, this.bufferOffset);\n this.bufferOffset += bytes;\n return this.pos += bytes;\n };\n }\n};\n\nfor (var key in Buffer.prototype) {\n _loop(key);\n}\n\nmodule.exports = EncodeStream;\n\n/***/ }),\n\n/***/ 3100:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar Enum = /*#__PURE__*/function () {\n function Enum(type, options) {\n if (options === void 0) {\n options = [];\n }\n\n this.type = type;\n this.options = options;\n }\n\n var _proto = Enum.prototype;\n\n _proto.decode = function decode(stream) {\n var index = this.type.decode(stream);\n return this.options[index] || index;\n };\n\n _proto.size = function size() {\n return this.type.size();\n };\n\n _proto.encode = function encode(stream, val) {\n var index = this.options.indexOf(val);\n\n if (index === -1) {\n throw new Error(\"Unknown option in enum: \" + val);\n }\n\n return this.type.encode(stream, index);\n };\n\n return Enum;\n}();\n\nmodule.exports = Enum;\n\n/***/ }),\n\n/***/ 6768:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_98158__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_98158__(1539);\n\n__nested_webpack_require_98158__(8674);\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar ArrayT = __nested_webpack_require_98158__(1988);\n\nvar _require = __nested_webpack_require_98158__(6462),\n NumberT = _require.Number;\n\nvar utils = __nested_webpack_require_98158__(6610);\n\nvar _require2 = __nested_webpack_require_98158__(9539),\n _inspect = _require2.inspect;\n\nvar LazyArrayT = /*#__PURE__*/function (_ArrayT) {\n _inheritsLoose(LazyArrayT, _ArrayT);\n\n function LazyArrayT() {\n return _ArrayT.apply(this, arguments) || this;\n }\n\n var _proto = LazyArrayT.prototype;\n\n _proto.decode = function decode(stream, parent) {\n var pos = stream.pos;\n var length = utils.resolveLength(this.length, stream, parent);\n\n if (this.length instanceof NumberT) {\n parent = {\n parent: parent,\n _startOffset: pos,\n _currentOffset: 0,\n _length: length\n };\n }\n\n var res = new LazyArray(this.type, length, stream, parent);\n stream.pos += length * this.type.size(null, parent);\n return res;\n };\n\n _proto.size = function size(val, ctx) {\n if (val instanceof LazyArray) {\n val = val.toArray();\n }\n\n return _ArrayT.prototype.size.call(this, val, ctx);\n };\n\n _proto.encode = function encode(stream, val, ctx) {\n if (val instanceof LazyArray) {\n val = val.toArray();\n }\n\n return _ArrayT.prototype.encode.call(this, stream, val, ctx);\n };\n\n return LazyArrayT;\n}(ArrayT);\n\nvar LazyArray = /*#__PURE__*/function () {\n function LazyArray(type, length, stream, ctx) {\n this.type = type;\n this.length = length;\n this.stream = stream;\n this.ctx = ctx;\n this.base = this.stream.pos;\n this.items = [];\n }\n\n var _proto2 = LazyArray.prototype;\n\n _proto2.get = function get(index) {\n if (index < 0 || index >= this.length) {\n return undefined;\n }\n\n if (this.items[index] == null) {\n var pos = this.stream.pos;\n this.stream.pos = this.base + this.type.size(null, this.ctx) * index;\n this.items[index] = this.type.decode(this.stream, this.ctx);\n this.stream.pos = pos;\n }\n\n return this.items[index];\n };\n\n _proto2.toArray = function toArray() {\n var result = [];\n\n for (var i = 0, end = this.length; i < end; i++) {\n result.push(this.get(i));\n }\n\n return result;\n };\n\n _proto2.inspect = function inspect() {\n return _inspect(this.toArray());\n };\n\n return LazyArray;\n}();\n\nmodule.exports = LazyArrayT;\n\n/***/ }),\n\n/***/ 6462:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_101038__) {\n\n\"use strict\";\n\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar DecodeStream = __nested_webpack_require_101038__(3030);\n\nvar NumberT = /*#__PURE__*/function () {\n function NumberT(type, endian) {\n if (endian === void 0) {\n endian = 'BE';\n }\n\n this.type = type;\n this.endian = endian;\n this.fn = this.type;\n\n if (this.type[this.type.length - 1] !== '8') {\n this.fn += this.endian;\n }\n }\n\n var _proto = NumberT.prototype;\n\n _proto.size = function size() {\n return DecodeStream.TYPES[this.type];\n };\n\n _proto.decode = function decode(stream) {\n return stream[\"read\" + this.fn]();\n };\n\n _proto.encode = function encode(stream, val) {\n return stream[\"write\" + this.fn](val);\n };\n\n return NumberT;\n}();\n\nexports.Number = NumberT;\nexports.uint8 = new NumberT('UInt8');\nexports.uint16be = exports.uint16 = new NumberT('UInt16', 'BE');\nexports.uint16le = new NumberT('UInt16', 'LE');\nexports.uint24be = exports.uint24 = new NumberT('UInt24', 'BE');\nexports.uint24le = new NumberT('UInt24', 'LE');\nexports.uint32be = exports.uint32 = new NumberT('UInt32', 'BE');\nexports.uint32le = new NumberT('UInt32', 'LE');\nexports.int8 = new NumberT('Int8');\nexports.int16be = exports.int16 = new NumberT('Int16', 'BE');\nexports.int16le = new NumberT('Int16', 'LE');\nexports.int24be = exports.int24 = new NumberT('Int24', 'BE');\nexports.int24le = new NumberT('Int24', 'LE');\nexports.int32be = exports.int32 = new NumberT('Int32', 'BE');\nexports.int32le = new NumberT('Int32', 'LE');\nexports.floatbe = exports.float = new NumberT('Float', 'BE');\nexports.floatle = new NumberT('Float', 'LE');\nexports.doublebe = exports.double = new NumberT('Double', 'BE');\nexports.doublele = new NumberT('Double', 'LE');\n\nvar Fixed = /*#__PURE__*/function (_NumberT) {\n _inheritsLoose(Fixed, _NumberT);\n\n function Fixed(size, endian, fracBits) {\n var _this;\n\n if (fracBits === void 0) {\n fracBits = size >> 1;\n }\n\n _this = _NumberT.call(this, \"Int\" + size, endian) || this;\n _this._point = 1 << fracBits;\n return _this;\n }\n\n var _proto2 = Fixed.prototype;\n\n _proto2.decode = function decode(stream) {\n return _NumberT.prototype.decode.call(this, stream) / this._point;\n };\n\n _proto2.encode = function encode(stream, val) {\n return _NumberT.prototype.encode.call(this, stream, val * this._point | 0);\n };\n\n return Fixed;\n}(NumberT);\n\nexports.Fixed = Fixed;\nexports.fixed16be = exports.fixed16 = new Fixed(16, 'BE');\nexports.fixed16le = new Fixed(16, 'LE');\nexports.fixed32be = exports.fixed32 = new Fixed(32, 'BE');\nexports.fixed32le = new Fixed(32, 'LE');\n\n/***/ }),\n\n/***/ 9541:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar Optional = /*#__PURE__*/function () {\n function Optional(type, condition) {\n if (condition === void 0) {\n condition = true;\n }\n\n this.type = type;\n this.condition = condition;\n }\n\n var _proto = Optional.prototype;\n\n _proto.decode = function decode(stream, parent) {\n var condition = this.condition;\n\n if (typeof condition === 'function') {\n condition = condition.call(parent, parent);\n }\n\n if (condition) {\n return this.type.decode(stream, parent);\n }\n };\n\n _proto.size = function size(val, parent) {\n var condition = this.condition;\n\n if (typeof condition === 'function') {\n condition = condition.call(parent, parent);\n }\n\n if (condition) {\n return this.type.size(val, parent);\n } else {\n return 0;\n }\n };\n\n _proto.encode = function encode(stream, val, parent) {\n var condition = this.condition;\n\n if (typeof condition === 'function') {\n condition = condition.call(parent, parent);\n }\n\n if (condition) {\n return this.type.encode(stream, val, parent);\n }\n };\n\n return Optional;\n}();\n\nmodule.exports = Optional;\n\n/***/ }),\n\n/***/ 8011:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_105268__) {\n\n\"use strict\";\n\n\nvar utils = __nested_webpack_require_105268__(6610);\n\nvar Pointer = /*#__PURE__*/function () {\n function Pointer(offsetType, type, options) {\n if (options === void 0) {\n options = {};\n }\n\n this.offsetType = offsetType;\n this.type = type;\n this.options = options;\n\n if (this.type === 'void') {\n this.type = null;\n }\n\n if (this.options.type == null) {\n this.options.type = 'local';\n }\n\n if (this.options.allowNull == null) {\n this.options.allowNull = true;\n }\n\n if (this.options.nullValue == null) {\n this.options.nullValue = 0;\n }\n\n if (this.options.lazy == null) {\n this.options.lazy = false;\n }\n\n if (this.options.relativeTo) {\n if (typeof this.options.relativeTo !== 'function') {\n throw new Error('relativeTo option must be a function');\n }\n\n this.relativeToGetter = options.relativeTo;\n }\n }\n\n var _proto = Pointer.prototype;\n\n _proto.decode = function decode(stream, ctx) {\n var _this = this;\n\n var offset = this.offsetType.decode(stream, ctx); // handle NULL pointers\n\n if (offset === this.options.nullValue && this.options.allowNull) {\n return null;\n }\n\n var relative;\n\n switch (this.options.type) {\n case 'local':\n relative = ctx._startOffset;\n break;\n\n case 'immediate':\n relative = stream.pos - this.offsetType.size();\n break;\n\n case 'parent':\n relative = ctx.parent._startOffset;\n break;\n\n default:\n var c = ctx;\n\n while (c.parent) {\n c = c.parent;\n }\n\n relative = c._startOffset || 0;\n }\n\n if (this.options.relativeTo) {\n relative += this.relativeToGetter(ctx);\n }\n\n var ptr = offset + relative;\n\n if (this.type != null) {\n var val = null;\n\n var decodeValue = function decodeValue() {\n if (val != null) {\n return val;\n }\n\n var pos = stream.pos;\n stream.pos = ptr;\n val = _this.type.decode(stream, ctx);\n stream.pos = pos;\n return val;\n }; // If this is a lazy pointer, define a getter to decode only when needed.\n // This obviously only works when the pointer is contained by a Struct.\n\n\n if (this.options.lazy) {\n return new utils.PropertyDescriptor({\n get: decodeValue\n });\n }\n\n return decodeValue();\n } else {\n return ptr;\n }\n };\n\n _proto.size = function size(val, ctx) {\n var parent = ctx;\n\n switch (this.options.type) {\n case 'local':\n case 'immediate':\n break;\n\n case 'parent':\n ctx = ctx.parent;\n break;\n\n default:\n // global\n while (ctx.parent) {\n ctx = ctx.parent;\n }\n\n }\n\n var type = this.type;\n\n if (type == null) {\n if (!(val instanceof VoidPointer)) {\n throw new Error(\"Must be a VoidPointer\");\n }\n\n var _val = val;\n type = _val.type;\n val = val.value;\n }\n\n if (val && ctx) {\n ctx.pointerSize += type.size(val, parent);\n }\n\n return this.offsetType.size();\n };\n\n _proto.encode = function encode(stream, val, ctx) {\n var relative;\n var parent = ctx;\n\n if (val == null) {\n this.offsetType.encode(stream, this.options.nullValue);\n return;\n }\n\n switch (this.options.type) {\n case 'local':\n relative = ctx.startOffset;\n break;\n\n case 'immediate':\n relative = stream.pos + this.offsetType.size(val, parent);\n break;\n\n case 'parent':\n ctx = ctx.parent;\n relative = ctx.startOffset;\n break;\n\n default:\n // global\n relative = 0;\n\n while (ctx.parent) {\n ctx = ctx.parent;\n }\n\n }\n\n if (this.options.relativeTo) {\n relative += this.relativeToGetter(parent.val);\n }\n\n this.offsetType.encode(stream, ctx.pointerOffset - relative);\n var type = this.type;\n\n if (type == null) {\n if (!(val instanceof VoidPointer)) {\n throw new Error(\"Must be a VoidPointer\");\n }\n\n var _val2 = val;\n type = _val2.type;\n val = val.value;\n }\n\n ctx.pointers.push({\n type: type,\n val: val,\n parent: parent\n });\n return ctx.pointerOffset += type.size(val, parent);\n };\n\n return Pointer;\n}(); // A pointer whose type is determined at decode time\n\n\nvar VoidPointer = function VoidPointer(type, value) {\n this.type = type;\n this.value = value;\n};\n\nexports.Pointer = Pointer;\nexports.VoidPointer = VoidPointer;\n\n/***/ }),\n\n/***/ 7468:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_109892__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_109892__(3290);\n\nvar utils = __nested_webpack_require_109892__(6610);\n\nvar Reserved = /*#__PURE__*/function () {\n function Reserved(type, count) {\n if (count === void 0) {\n count = 1;\n }\n\n this.type = type;\n this.count = count;\n }\n\n var _proto = Reserved.prototype;\n\n _proto.decode = function decode(stream, parent) {\n stream.pos += this.size(null, parent);\n return undefined;\n };\n\n _proto.size = function size(data, parent) {\n var count = utils.resolveLength(this.count, null, parent);\n return this.type.size() * count;\n };\n\n _proto.encode = function encode(stream, val, parent) {\n return stream.fill(0, this.size(val, parent));\n };\n\n return Reserved;\n}();\n\nmodule.exports = Reserved;\n\n/***/ }),\n\n/***/ 1466:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_110731__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __nested_webpack_require_110731__(8823)[\"Buffer\"];\n\n\nvar _require = __nested_webpack_require_110731__(6462),\n NumberT = _require.Number;\n\nvar utils = __nested_webpack_require_110731__(6610);\n\nvar StringT = /*#__PURE__*/function () {\n function StringT(length, encoding) {\n if (encoding === void 0) {\n encoding = 'ascii';\n }\n\n this.length = length;\n this.encoding = encoding;\n }\n\n var _proto = StringT.prototype;\n\n _proto.decode = function decode(stream, parent) {\n var length, pos;\n\n if (this.length != null) {\n length = utils.resolveLength(this.length, stream, parent);\n } else {\n var buffer;\n buffer = stream.buffer;\n length = stream.length;\n pos = stream.pos;\n\n while (pos < length && buffer[pos] !== 0x00) {\n ++pos;\n }\n\n length = pos - stream.pos;\n }\n\n var encoding = this.encoding;\n\n if (typeof encoding === 'function') {\n encoding = encoding.call(parent, parent) || 'ascii';\n }\n\n var string = stream.readString(length, encoding);\n\n if (this.length == null && stream.pos < stream.length) {\n stream.pos++;\n }\n\n return string;\n };\n\n _proto.size = function size(val, parent) {\n // Use the defined value if no value was given\n if (!val) {\n return utils.resolveLength(this.length, null, parent);\n }\n\n var encoding = this.encoding;\n\n if (typeof encoding === 'function') {\n encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\n }\n\n if (encoding === 'utf16be') {\n encoding = 'utf16le';\n }\n\n var size = Buffer.byteLength(val, encoding);\n\n if (this.length instanceof NumberT) {\n size += this.length.size();\n }\n\n if (this.length == null) {\n size++;\n }\n\n return size;\n };\n\n _proto.encode = function encode(stream, val, parent) {\n var encoding = this.encoding;\n\n if (typeof encoding === 'function') {\n encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\n }\n\n if (this.length instanceof NumberT) {\n this.length.encode(stream, Buffer.byteLength(val, encoding));\n }\n\n stream.writeString(val, encoding);\n\n if (this.length == null) {\n return stream.writeUInt8(0x00);\n }\n };\n\n return StringT;\n}();\n\nmodule.exports = StringT;\n\n/***/ }),\n\n/***/ 1219:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_113209__) {\n\n\"use strict\";\n\n\nvar utils = __nested_webpack_require_113209__(6610);\n\nvar Struct = /*#__PURE__*/function () {\n function Struct(fields) {\n if (fields === void 0) {\n fields = {};\n }\n\n this.fields = fields;\n }\n\n var _proto = Struct.prototype;\n\n _proto.decode = function decode(stream, parent, length) {\n if (length === void 0) {\n length = 0;\n }\n\n var res = this._setup(stream, parent, length);\n\n this._parseFields(stream, res, this.fields);\n\n if (this.process != null) {\n this.process.call(res, stream);\n }\n\n return res;\n };\n\n _proto._setup = function _setup(stream, parent, length) {\n var res = {}; // define hidden properties\n\n Object.defineProperties(res, {\n parent: {\n value: parent\n },\n _startOffset: {\n value: stream.pos\n },\n _currentOffset: {\n value: 0,\n writable: true\n },\n _length: {\n value: length\n }\n });\n return res;\n };\n\n _proto._parseFields = function _parseFields(stream, res, fields) {\n for (var key in fields) {\n var val;\n var type = fields[key];\n\n if (typeof type === 'function') {\n val = type.call(res, res);\n } else {\n val = type.decode(stream, res);\n }\n\n if (val !== undefined) {\n if (val instanceof utils.PropertyDescriptor) {\n Object.defineProperty(res, key, val);\n } else {\n res[key] = val;\n }\n }\n\n res._currentOffset = stream.pos - res._startOffset;\n }\n };\n\n _proto.size = function size(val, parent, includePointers) {\n if (val == null) {\n val = {};\n }\n\n if (includePointers == null) {\n includePointers = true;\n }\n\n var ctx = {\n parent: parent,\n val: val,\n pointerSize: 0\n };\n var size = 0;\n\n for (var key in this.fields) {\n var type = this.fields[key];\n\n if (type.size != null) {\n size += type.size(val[key], ctx);\n }\n }\n\n if (includePointers) {\n size += ctx.pointerSize;\n }\n\n return size;\n };\n\n _proto.encode = function encode(stream, val, parent) {\n var type;\n\n if (this.preEncode != null) {\n this.preEncode.call(val, stream);\n }\n\n var ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent: parent,\n val: val,\n pointerSize: 0\n };\n ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\n\n for (var key in this.fields) {\n type = this.fields[key];\n\n if (type.encode != null) {\n type.encode(stream, val[key], ctx);\n }\n }\n\n var i = 0;\n\n while (i < ctx.pointers.length) {\n var ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n };\n\n return Struct;\n}();\n\nmodule.exports = Struct;\n\n/***/ }),\n\n/***/ 3585:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_116053__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_116053__(1539);\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Struct = __nested_webpack_require_116053__(1219);\n\nvar getPath = function getPath(object, pathArray) {\n return pathArray.reduce(function (prevObj, key) {\n return prevObj && prevObj[key];\n }, object);\n};\n\nvar VersionedStruct = /*#__PURE__*/function (_Struct) {\n _inheritsLoose(VersionedStruct, _Struct);\n\n function VersionedStruct(type, versions) {\n var _this;\n\n if (versions === void 0) {\n versions = {};\n }\n\n _this = _Struct.call(this) || this;\n _this.type = type;\n _this.versions = versions;\n\n if (typeof type === 'string') {\n _this.versionPath = type.split('.');\n }\n\n return _this;\n }\n\n var _proto = VersionedStruct.prototype;\n\n _proto.decode = function decode(stream, parent, length) {\n if (length === void 0) {\n length = 0;\n }\n\n var res = this._setup(stream, parent, length);\n\n if (typeof this.type === 'string') {\n res.version = getPath(parent, this.versionPath);\n } else {\n res.version = this.type.decode(stream);\n }\n\n if (this.versions.header) {\n this._parseFields(stream, res, this.versions.header);\n }\n\n var fields = this.versions[res.version];\n\n if (fields == null) {\n throw new Error(\"Unknown version \" + res.version);\n }\n\n if (fields instanceof VersionedStruct) {\n return fields.decode(stream, parent);\n }\n\n this._parseFields(stream, res, fields);\n\n if (this.process != null) {\n this.process.call(res, stream);\n }\n\n return res;\n };\n\n _proto.size = function size(val, parent, includePointers) {\n if (includePointers === void 0) {\n includePointers = true;\n }\n\n var key, type;\n\n if (!val) {\n throw new Error('Not a fixed size');\n }\n\n var ctx = {\n parent: parent,\n val: val,\n pointerSize: 0\n };\n var size = 0;\n\n if (typeof this.type !== 'string') {\n size += this.type.size(val.version, ctx);\n }\n\n if (this.versions.header) {\n for (key in this.versions.header) {\n type = this.versions.header[key];\n\n if (type.size != null) {\n size += type.size(val[key], ctx);\n }\n }\n }\n\n var fields = this.versions[val.version];\n\n if (fields == null) {\n throw new Error(\"Unknown version \" + val.version);\n }\n\n for (key in fields) {\n type = fields[key];\n\n if (type.size != null) {\n size += type.size(val[key], ctx);\n }\n }\n\n if (includePointers) {\n size += ctx.pointerSize;\n }\n\n return size;\n };\n\n _proto.encode = function encode(stream, val, parent) {\n var key, type;\n\n if (this.preEncode != null) {\n this.preEncode.call(val, stream);\n }\n\n var ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent: parent,\n val: val,\n pointerSize: 0\n };\n ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\n\n if (typeof this.type !== 'string') {\n this.type.encode(stream, val.version);\n }\n\n if (this.versions.header) {\n for (key in this.versions.header) {\n type = this.versions.header[key];\n\n if (type.encode != null) {\n type.encode(stream, val[key], ctx);\n }\n }\n }\n\n var fields = this.versions[val.version];\n\n for (key in fields) {\n type = fields[key];\n\n if (type.encode != null) {\n type.encode(stream, val[key], ctx);\n }\n }\n\n var i = 0;\n\n while (i < ctx.pointers.length) {\n var ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n };\n\n return VersionedStruct;\n}(Struct);\n\nmodule.exports = VersionedStruct;\n\n/***/ }),\n\n/***/ 6610:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_120151__) {\n\n\"use strict\";\n\n\nvar _require = __nested_webpack_require_120151__(6462),\n NumberT = _require.Number;\n\nexports.resolveLength = function (length, stream, parent) {\n var res;\n\n if (typeof length === 'number') {\n res = length;\n } else if (typeof length === 'function') {\n res = length.call(parent, parent);\n } else if (parent && typeof length === 'string') {\n res = parent[length];\n } else if (stream && length instanceof NumberT) {\n res = length.decode(stream);\n }\n\n if (isNaN(res)) {\n throw new Error('Not a fixed size');\n }\n\n return res;\n};\n\nvar PropertyDescriptor = function PropertyDescriptor(opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n this.enumerable = true;\n this.configurable = true;\n\n for (var key in opts) {\n var val = opts[key];\n this[key] = val;\n }\n};\n\nexports.PropertyDescriptor = PropertyDescriptor;\n\n/***/ }),\n\n/***/ 8823:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_121092__) {\n\n\"use strict\";\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\n/* eslint-disable no-proto */\n\n\n__nested_webpack_require_121092__(2526);\n\n__nested_webpack_require_121092__(1817);\n\n__nested_webpack_require_121092__(1539);\n\n__nested_webpack_require_121092__(6992);\n\n__nested_webpack_require_121092__(2472);\n\n__nested_webpack_require_121092__(2990);\n\n__nested_webpack_require_121092__(8927);\n\n__nested_webpack_require_121092__(3105);\n\n__nested_webpack_require_121092__(5035);\n\n__nested_webpack_require_121092__(4345);\n\n__nested_webpack_require_121092__(7174);\n\n__nested_webpack_require_121092__(2846);\n\n__nested_webpack_require_121092__(4731);\n\n__nested_webpack_require_121092__(7209);\n\n__nested_webpack_require_121092__(6319);\n\n__nested_webpack_require_121092__(8867);\n\n__nested_webpack_require_121092__(7789);\n\n__nested_webpack_require_121092__(3739);\n\n__nested_webpack_require_121092__(9368);\n\n__nested_webpack_require_121092__(4483);\n\n__nested_webpack_require_121092__(2056);\n\n__nested_webpack_require_121092__(3462);\n\n__nested_webpack_require_121092__(678);\n\n__nested_webpack_require_121092__(7462);\n\n__nested_webpack_require_121092__(3824);\n\n__nested_webpack_require_121092__(5021);\n\n__nested_webpack_require_121092__(2974);\n\n__nested_webpack_require_121092__(5016);\n\n__nested_webpack_require_121092__(7803);\n\n__nested_webpack_require_121092__(6649);\n\n__nested_webpack_require_121092__(6078);\n\n__nested_webpack_require_121092__(3290);\n\n__nested_webpack_require_121092__(7042);\n\n__nested_webpack_require_121092__(2222);\n\n__nested_webpack_require_121092__(9714);\n\n__nested_webpack_require_121092__(3210);\n\n__nested_webpack_require_121092__(4916);\n\n__nested_webpack_require_121092__(5306);\n\n__nested_webpack_require_121092__(6699);\n\n__nested_webpack_require_121092__(2023);\n\n__nested_webpack_require_121092__(9653);\n\n__nested_webpack_require_121092__(3753);\n\n__nested_webpack_require_121092__(545);\n\n__nested_webpack_require_121092__(8309);\n\n__nested_webpack_require_121092__(3161);\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar base64 = __nested_webpack_require_121092__(9742);\n\nvar ieee754 = __nested_webpack_require_121092__(645);\n\nvar customInspectSymbol = typeof Symbol === 'function' && typeof Symbol['for'] === 'function' // eslint-disable-line dot-notation\n? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n: null;\nexports.Buffer = Buffer;\nexports.SlowBuffer = SlowBuffer;\nexports.INSPECT_MAX_BYTES = 50;\nvar K_MAX_LENGTH = 0x7fffffff;\nexports.kMaxLength = K_MAX_LENGTH;\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\n\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error('This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.');\n}\n\nfunction typedArraySupport() {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1);\n var proto = {\n foo: function foo() {\n return 42;\n }\n };\n Object.setPrototypeOf(proto, Uint8Array.prototype);\n Object.setPrototypeOf(arr, proto);\n return arr.foo() === 42;\n } catch (e) {\n return false;\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function get() {\n if (!Buffer.isBuffer(this)) return undefined;\n return this.buffer;\n }\n});\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function get() {\n if (!Buffer.isBuffer(this)) return undefined;\n return this.byteOffset;\n }\n});\n\nfunction createBuffer(length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"');\n } // Return an augmented `Uint8Array` instance\n\n\n var buf = new Uint8Array(length);\n Object.setPrototypeOf(buf, Buffer.prototype);\n return buf;\n}\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\n\nfunction Buffer(arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError('The \"string\" argument must be of type string. Received type number');\n }\n\n return allocUnsafe(arg);\n }\n\n return from(arg, encodingOrOffset, length);\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n\nfunction from(value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset);\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value);\n }\n\n if (value == null) {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value);\n }\n\n if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type number');\n }\n\n var valueOf = value.valueOf && value.valueOf();\n\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length);\n }\n\n var b = fromObject(value);\n if (b) return b;\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length);\n }\n\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value);\n}\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\n\n\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length);\n}; // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\n\n\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype);\nObject.setPrototypeOf(Buffer, Uint8Array);\n\nfunction assertSize(size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number');\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"');\n }\n}\n\nfunction alloc(size, fill, encoding) {\n assertSize(size);\n\n if (size <= 0) {\n return createBuffer(size);\n }\n\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);\n }\n\n return createBuffer(size);\n}\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\n\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding);\n};\n\nfunction allocUnsafe(size) {\n assertSize(size);\n return createBuffer(size < 0 ? 0 : checked(size) | 0);\n}\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\n\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size);\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\n\n\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size);\n};\n\nfunction fromString(string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8';\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding);\n }\n\n var length = byteLength(string, encoding) | 0;\n var buf = createBuffer(length);\n var actual = buf.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual);\n }\n\n return buf;\n}\n\nfunction fromArrayLike(array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n var buf = createBuffer(length);\n\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255;\n }\n\n return buf;\n}\n\nfunction fromArrayView(arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n var copy = new Uint8Array(arrayView);\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);\n }\n\n return fromArrayLike(arrayView);\n}\n\nfunction fromArrayBuffer(array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds');\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds');\n }\n\n var buf;\n\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array);\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset);\n } else {\n buf = new Uint8Array(array, byteOffset, length);\n } // Return an augmented `Uint8Array` instance\n\n\n Object.setPrototypeOf(buf, Buffer.prototype);\n return buf;\n}\n\nfunction fromObject(obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0;\n var buf = createBuffer(len);\n\n if (buf.length === 0) {\n return buf;\n }\n\n obj.copy(buf, 0, 0, len);\n return buf;\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0);\n }\n\n return fromArrayLike(obj);\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data);\n }\n}\n\nfunction checked(length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes');\n }\n\n return length | 0;\n}\n\nfunction SlowBuffer(length) {\n if (+length != length) {\n // eslint-disable-line eqeqeq\n length = 0;\n }\n\n return Buffer.alloc(+length);\n}\n\nBuffer.isBuffer = function isBuffer(b) {\n return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false\n};\n\nBuffer.compare = function compare(a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);\n\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');\n }\n\n if (a === b) return 0;\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n};\n\nBuffer.isEncoding = function isEncoding(encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true;\n\n default:\n return false;\n }\n};\n\nBuffer.concat = function concat(list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers');\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0);\n }\n\n var i;\n\n if (length === undefined) {\n length = 0;\n\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = Buffer.allocUnsafe(length);\n var pos = 0;\n\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n buf.copy(buffer, pos);\n } else {\n Uint8Array.prototype.set.call(buffer, buf, pos);\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers');\n } else {\n buf.copy(buffer, pos);\n }\n\n pos += buf.length;\n }\n\n return buffer;\n};\n\nfunction byteLength(string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length;\n }\n\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength;\n }\n\n if (typeof string !== 'string') {\n throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' + 'Received type ' + typeof string);\n }\n\n var len = string.length;\n var mustMatch = arguments.length > 2 && arguments[2] === true;\n if (!mustMatch && len === 0) return 0; // Use a for loop to avoid recursion\n\n var loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len;\n\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length;\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2;\n\n case 'hex':\n return len >>> 1;\n\n case 'base64':\n return base64ToBytes(string).length;\n\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8\n }\n\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n}\n\nBuffer.byteLength = byteLength;\n\nfunction slowToString(encoding, start, end) {\n var loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n\n if (start === undefined || start < 0) {\n start = 0;\n } // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n\n\n if (start > this.length) {\n return '';\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return '';\n } // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n\n\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return '';\n }\n\n if (!encoding) encoding = 'utf8';\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end);\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end);\n\n case 'ascii':\n return asciiSlice(this, start, end);\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end);\n\n case 'base64':\n return base64Slice(this, start, end);\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end);\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n encoding = (encoding + '').toLowerCase();\n loweredCase = true;\n }\n }\n} // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\n\n\nBuffer.prototype._isBuffer = true;\n\nfunction swap(b, n, m) {\n var i = b[n];\n b[n] = b[m];\n b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16() {\n var len = this.length;\n\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits');\n }\n\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n\n return this;\n};\n\nBuffer.prototype.swap32 = function swap32() {\n var len = this.length;\n\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits');\n }\n\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n\n return this;\n};\n\nBuffer.prototype.swap64 = function swap64() {\n var len = this.length;\n\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits');\n }\n\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n\n return this;\n};\n\nBuffer.prototype.toString = function toString() {\n var length = this.length;\n if (length === 0) return '';\n if (arguments.length === 0) return utf8Slice(this, 0, length);\n return slowToString.apply(this, arguments);\n};\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString;\n\nBuffer.prototype.equals = function equals(b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');\n if (this === b) return true;\n return Buffer.compare(this, b) === 0;\n};\n\nBuffer.prototype.inspect = function inspect() {\n var str = '';\n var max = exports.INSPECT_MAX_BYTES;\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim();\n if (this.length > max) str += ' ... ';\n return '<Buffer ' + str + '>';\n};\n\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;\n}\n\nBuffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength);\n }\n\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. ' + 'Received type ' + typeof target);\n }\n\n if (start === undefined) {\n start = 0;\n }\n\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n\n if (thisStart === undefined) {\n thisStart = 0;\n }\n\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index');\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0;\n }\n\n if (thisStart >= thisEnd) {\n return -1;\n }\n\n if (start >= end) {\n return 1;\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n if (this === target) return 0;\n var x = thisEnd - thisStart;\n var y = end - start;\n var len = Math.min(x, y);\n var thisCopy = this.slice(thisStart, thisEnd);\n var targetCopy = target.slice(start, end);\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break;\n }\n }\n\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\n\n\nfunction bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1; // Normalize byteOffset\n\n if (typeof byteOffset === 'string') {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff;\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000;\n }\n\n byteOffset = +byteOffset; // Coerce to Number.\n\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : buffer.length - 1;\n } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n if (byteOffset >= buffer.length) {\n if (dir) return -1;else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;else return -1;\n } // Normalize val\n\n\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding);\n } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1;\n }\n\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n } else if (typeof val === 'number') {\n val = val & 0xFF; // Search for a byte value [0-255]\n\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n }\n }\n\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n }\n\n throw new TypeError('val must be string, number or Buffer');\n}\n\nfunction arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n var indexSize = 1;\n var arrLength = arr.length;\n var valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n\n if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1;\n }\n\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read(buf, i) {\n if (indexSize === 1) {\n return buf[i];\n } else {\n return buf.readUInt16BE(i * indexSize);\n }\n }\n\n var i;\n\n if (dir) {\n var foundIndex = -1;\n\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n\n for (i = byteOffset; i >= 0; i--) {\n var found = true;\n\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break;\n }\n }\n\n if (found) return i;\n }\n }\n\n return -1;\n}\n\nBuffer.prototype.includes = function includes(val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1;\n};\n\nBuffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n};\n\nfunction hexWrite(buf, string, offset, length) {\n offset = Number(offset) || 0;\n var remaining = buf.length - offset;\n\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n\n if (length > remaining) {\n length = remaining;\n }\n }\n\n var strLen = string.length;\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n\n var i;\n\n for (i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16);\n if (numberIsNaN(parsed)) return i;\n buf[offset + i] = parsed;\n }\n\n return i;\n}\n\nfunction utf8Write(buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nfunction asciiWrite(buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length);\n}\n\nfunction base64Write(buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length);\n}\n\nfunction ucs2Write(buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nBuffer.prototype.write = function write(string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8';\n length = this.length;\n offset = 0; // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset;\n length = this.length;\n offset = 0; // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0;\n\n if (isFinite(length)) {\n length = length >>> 0;\n if (encoding === undefined) encoding = 'utf8';\n } else {\n encoding = length;\n length = undefined;\n }\n } else {\n throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds');\n }\n\n if (!encoding) encoding = 'utf8';\n var loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length);\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length);\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length);\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length);\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length);\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n};\n\nBuffer.prototype.toJSON = function toJSON() {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n };\n};\n\nfunction base64Slice(buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf);\n } else {\n return base64.fromByteArray(buf.slice(start, end));\n }\n}\n\nfunction utf8Slice(buf, start, end) {\n end = Math.min(buf.length, end);\n var res = [];\n var i = start;\n\n while (i < end) {\n var firstByte = buf[i];\n var codePoint = null;\n var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;\n\n if (i + bytesPerSequence <= end) {\n var secondByte = void 0,\n thirdByte = void 0,\n fourthByte = void 0,\n tempCodePoint = void 0;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte;\n }\n\n break;\n\n case 2:\n secondByte = buf[i + 1];\n\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;\n\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;\n\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;\n\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint;\n }\n }\n\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD;\n bytesPerSequence = 1;\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000;\n res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n codePoint = 0xDC00 | codePoint & 0x3FF;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res);\n} // Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\n\n\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray(codePoints) {\n var len = codePoints.length;\n\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n var res = '';\n var i = 0;\n\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n\n return res;\n}\n\nfunction asciiSlice(buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F);\n }\n\n return ret;\n}\n\nfunction latin1Slice(buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n\n return ret;\n}\n\nfunction hexSlice(buf, start, end) {\n var len = buf.length;\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n var out = '';\n\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]];\n }\n\n return out;\n}\n\nfunction utf16leSlice(buf, start, end) {\n var bytes = buf.slice(start, end);\n var res = ''; // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n\n for (var i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n\n return res;\n}\n\nBuffer.prototype.slice = function slice(start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n var newBuf = this.subarray(start, end); // Return an augmented `Uint8Array` instance\n\n Object.setPrototypeOf(newBuf, Buffer.prototype);\n return newBuf;\n};\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\n\nfunction checkOffset(offset, ext, length) {\n if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');\n}\n\nBuffer.prototype.readUintLE = Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n var val = this[offset];\n var mul = 1;\n var i = 0;\n\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n return val;\n};\n\nBuffer.prototype.readUintBE = Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n var val = this[offset + --byteLength];\n var mul = 1;\n\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val;\n};\n\nBuffer.prototype.readUint8 = Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset];\n};\n\nBuffer.prototype.readUint16LE = Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | this[offset + 1] << 8;\n};\n\nBuffer.prototype.readUint16BE = Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] << 8 | this[offset + 1];\n};\n\nBuffer.prototype.readUint32LE = Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;\n};\n\nBuffer.prototype.readUint32BE = Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n};\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, 'offset');\n var first = this[offset];\n var last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n var lo = first + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 24);\n var hi = this[++offset] + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + last * Math.pow(2, 24);\n return BigInt(lo) + (BigInt(hi) << BigInt(32));\n});\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, 'offset');\n var first = this[offset];\n var last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n var hi = first * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + this[++offset];\n var lo = this[++offset] * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + last;\n return (BigInt(hi) << BigInt(32)) + BigInt(lo);\n});\n\nBuffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n var val = this[offset];\n var mul = 1;\n var i = 0;\n\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n mul *= 0x80;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n};\n\nBuffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n var i = byteLength;\n var mul = 1;\n var val = this[offset + --i];\n\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul;\n }\n\n mul *= 0x80;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n};\n\nBuffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 0x80)) return this[offset];\n return (0xff - this[offset] + 1) * -1;\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset] | this[offset + 1] << 8;\n return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset + 1] | this[offset] << 8;\n return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n};\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, 'offset');\n var first = this[offset];\n var last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n var val = this[offset + 4] + this[offset + 5] * Math.pow(2, 8) + this[offset + 6] * Math.pow(2, 16) + (last << 24); // Overflow\n\n return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 24));\n});\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, 'offset');\n var first = this[offset];\n var last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n var val = (first << 24) + // Overflow\n this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + this[++offset];\n return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + last);\n});\n\nBuffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, true, 23, 4);\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, false, 23, 4);\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, true, 52, 8);\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, false, 52, 8);\n};\n\nfunction checkInt(buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance');\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds');\n if (offset + ext > buf.length) throw new RangeError('Index out of range');\n}\n\nBuffer.prototype.writeUintLE = Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var mul = 1;\n var i = 0;\n this[offset] = value & 0xFF;\n\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = value / mul & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeUintBE = Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n this[offset + i] = value & 0xFF;\n\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = value / mul & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeUint8 = Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n this[offset] = value & 0xff;\n return offset + 1;\n};\n\nBuffer.prototype.writeUint16LE = Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n this[offset] = value & 0xff;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n};\n\nBuffer.prototype.writeUint16BE = Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 0xff;\n return offset + 2;\n};\n\nBuffer.prototype.writeUint32LE = Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n this[offset + 3] = value >>> 24;\n this[offset + 2] = value >>> 16;\n this[offset + 1] = value >>> 8;\n this[offset] = value & 0xff;\n return offset + 4;\n};\n\nBuffer.prototype.writeUint32BE = Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 0xff;\n return offset + 4;\n};\n\nfunction wrtBigUInt64LE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n var lo = Number(value & BigInt(0xffffffff));\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n var hi = Number(value >> BigInt(32) & BigInt(0xffffffff));\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n return offset;\n}\n\nfunction wrtBigUInt64BE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n var lo = Number(value & BigInt(0xffffffff));\n buf[offset + 7] = lo;\n lo = lo >> 8;\n buf[offset + 6] = lo;\n lo = lo >> 8;\n buf[offset + 5] = lo;\n lo = lo >> 8;\n buf[offset + 4] = lo;\n var hi = Number(value >> BigInt(32) & BigInt(0xffffffff));\n buf[offset + 3] = hi;\n hi = hi >> 8;\n buf[offset + 2] = hi;\n hi = hi >> 8;\n buf[offset + 1] = hi;\n hi = hi >> 8;\n buf[offset] = hi;\n return offset + 8;\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'));\n});\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'));\n});\n\nBuffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = 0;\n var mul = 1;\n var sub = 0;\n this[offset] = value & 0xFF;\n\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n var sub = 0;\n this[offset + i] = value & 0xFF;\n\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n if (value < 0) value = 0xff + value + 1;\n this[offset] = value & 0xff;\n return offset + 1;\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n this[offset] = value & 0xff;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 0xff;\n return offset + 2;\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n this[offset] = value & 0xff;\n this[offset + 1] = value >>> 8;\n this[offset + 2] = value >>> 16;\n this[offset + 3] = value >>> 24;\n return offset + 4;\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n if (value < 0) value = 0xffffffff + value + 1;\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 0xff;\n return offset + 4;\n};\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'));\n});\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'));\n});\n\nfunction checkIEEE754(buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range');\n if (offset < 0) throw new RangeError('Index out of range');\n}\n\nfunction writeFloat(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4;\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert);\n};\n\nfunction writeDouble(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8;\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert);\n}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\nBuffer.prototype.copy = function copy(target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer');\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done\n\n if (end === start) return 0;\n if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds');\n }\n\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range');\n if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?\n\n if (end > this.length) end = this.length;\n\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end);\n } else {\n Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);\n }\n\n return len;\n}; // Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\n\n\nBuffer.prototype.fill = function fill(val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n encoding = end;\n end = this.length;\n }\n\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string');\n }\n\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding);\n }\n\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n\n if (encoding === 'utf8' && code < 128 || encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code;\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n } else if (typeof val === 'boolean') {\n val = Number(val);\n } // Invalid ranges are not set to a default, so can range check early.\n\n\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index');\n }\n\n if (end <= start) {\n return this;\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n if (!val) val = 0;\n var i;\n\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);\n var len = bytes.length;\n\n if (len === 0) {\n throw new TypeError('The value \"' + val + '\" is invalid for argument \"value\"');\n }\n\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this;\n}; // CUSTOM ERRORS\n// =============\n// Simplified versions from Node, changed for Buffer-only usage\n\n\nvar errors = {};\n\nfunction E(sym, getMessage, Base) {\n errors[sym] = /*#__PURE__*/function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError() {\n var _this;\n\n _this = _Base.call(this) || this;\n Object.defineProperty(_assertThisInitialized(_this), 'message', {\n value: getMessage.apply(_assertThisInitialized(_this), arguments),\n writable: true,\n configurable: true\n }); // Add the error code to the name to include it in the stack trace.\n\n _this.name = _this.name + \" [\" + sym + \"]\"; // Access the stack to generate the error message including the error code\n // from the name.\n\n _this.stack; // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n\n delete _this.name;\n return _this;\n }\n\n var _proto = NodeError.prototype;\n\n _proto.toString = function toString() {\n return this.name + \" [\" + sym + \"]: \" + this.message;\n };\n\n _createClass(NodeError, [{\n key: \"code\",\n get: function get() {\n return sym;\n },\n set: function set(value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value: value,\n writable: true\n });\n }\n }]);\n\n return NodeError;\n }(Base);\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS', function (name) {\n if (name) {\n return name + \" is outside of buffer bounds\";\n }\n\n return 'Attempt to access memory outside buffer bounds';\n}, RangeError);\nE('ERR_INVALID_ARG_TYPE', function (name, actual) {\n return \"The \\\"\" + name + \"\\\" argument must be of type number. Received type \" + typeof actual;\n}, TypeError);\nE('ERR_OUT_OF_RANGE', function (str, range, input) {\n var msg = \"The value of \\\"\" + str + \"\\\" is out of range.\";\n var received = input;\n\n if (Number.isInteger(input) && Math.abs(input) > Math.pow(2, 32)) {\n received = addNumericalSeparator(String(input));\n } else if (typeof input === 'bigint') {\n received = String(input);\n\n if (input > Math.pow(BigInt(2), BigInt(32)) || input < -Math.pow(BigInt(2), BigInt(32))) {\n received = addNumericalSeparator(received);\n }\n\n received += 'n';\n }\n\n msg += \" It must be \" + range + \". Received \" + received;\n return msg;\n}, RangeError);\n\nfunction addNumericalSeparator(val) {\n var res = '';\n var i = val.length;\n var start = val[0] === '-' ? 1 : 0;\n\n for (; i >= start + 4; i -= 3) {\n res = \"_\" + val.slice(i - 3, i) + res;\n }\n\n return \"\" + val.slice(0, i) + res;\n} // CHECK FUNCTIONS\n// ===============\n\n\nfunction checkBounds(buf, offset, byteLength) {\n validateNumber(offset, 'offset');\n\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1));\n }\n}\n\nfunction checkIntBI(value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n var n = typeof min === 'bigint' ? 'n' : '';\n var range;\n\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = \">= 0\" + n + \" and < 2\" + n + \" ** \" + (byteLength + 1) * 8 + n;\n } else {\n range = \">= -(2\" + n + \" ** \" + ((byteLength + 1) * 8 - 1) + n + \") and < 2 ** \" + (\"\" + ((byteLength + 1) * 8 - 1) + n);\n }\n } else {\n range = \">= \" + min + n + \" and <= \" + max + n;\n }\n\n throw new errors.ERR_OUT_OF_RANGE('value', range, value);\n }\n\n checkBounds(buf, offset, byteLength);\n}\n\nfunction validateNumber(value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value);\n }\n}\n\nfunction boundsError(value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type);\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value);\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', \">= \" + (type ? 1 : 0) + \" and <= \" + length, value);\n} // HELPER FUNCTIONS\n// ================\n\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;\n\nfunction base64clean(str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]; // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n\n str = str.trim().replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''\n\n if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n while (str.length % 4 !== 0) {\n str = str + '=';\n }\n\n return str;\n}\n\nfunction utf8ToBytes(string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i); // is surrogate component\n\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue;\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue;\n } // valid lead\n\n\n leadSurrogate = codePoint;\n continue;\n } // 2 leads in a row\n\n\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue;\n } // valid surrogate pair\n\n\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null; // encode utf8\n\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break;\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break;\n bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break;\n bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break;\n bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n } else {\n throw new Error('Invalid code point');\n }\n }\n\n return bytes;\n}\n\nfunction asciiToBytes(str) {\n var byteArray = [];\n\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF);\n }\n\n return byteArray;\n}\n\nfunction utf16leToBytes(str, units) {\n var c, hi, lo;\n var byteArray = [];\n\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break;\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray;\n}\n\nfunction base64ToBytes(str) {\n return base64.toByteArray(base64clean(str));\n}\n\nfunction blitBuffer(src, dst, offset, length) {\n var i;\n\n for (i = 0; i < length; ++i) {\n if (i + offset >= dst.length || i >= src.length) break;\n dst[i + offset] = src[i];\n }\n\n return i;\n} // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\n\n\nfunction isInstance(obj, type) {\n return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;\n}\n\nfunction numberIsNaN(obj) {\n // For IE11 support\n return obj !== obj; // eslint-disable-line no-self-compare\n} // Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\n\n\nvar hexSliceLookupTable = function () {\n var alphabet = '0123456789abcdef';\n var table = new Array(256);\n\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16;\n\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j];\n }\n }\n\n return table;\n}(); // Return not function with Error if BigInt not supported\n\n\nfunction defineBigIntMethod(fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn;\n}\n\nfunction BufferBigIntNotDefined() {\n throw new Error('BigInt not supported');\n}\n\n/***/ }),\n\n/***/ 477:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_182584__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_182584__(7803);\n\n__nested_webpack_require_182584__(1539);\n\n// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n\n/***/ }),\n\n/***/ 2094:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_182895__) {\n\n\"use strict\";\n\n\nvar NATIVE_ARRAY_BUFFER = __nested_webpack_require_182895__(477);\n\nvar DESCRIPTORS = __nested_webpack_require_182895__(9781);\n\nvar global = __nested_webpack_require_182895__(7854);\n\nvar isCallable = __nested_webpack_require_182895__(614);\n\nvar isObject = __nested_webpack_require_182895__(111);\n\nvar hasOwn = __nested_webpack_require_182895__(2597);\n\nvar classof = __nested_webpack_require_182895__(648);\n\nvar tryToString = __nested_webpack_require_182895__(6330);\n\nvar createNonEnumerableProperty = __nested_webpack_require_182895__(8880);\n\nvar redefine = __nested_webpack_require_182895__(1320);\n\nvar defineProperty = (__nested_webpack_require_182895__(3070).f);\n\nvar isPrototypeOf = __nested_webpack_require_182895__(7976);\n\nvar getPrototypeOf = __nested_webpack_require_182895__(9518);\n\nvar setPrototypeOf = __nested_webpack_require_182895__(7674);\n\nvar wellKnownSymbol = __nested_webpack_require_182895__(5112);\n\nvar uid = __nested_webpack_require_182895__(9711);\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = global.TypeError;\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = uid('TYPED_ARRAY_CONSTRUCTOR'); // Fixing native typed arrays in Opera Presto crashes the browser, see #595\n\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME, Constructor, Prototype;\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView' || hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function isTypedArray(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function aTypedArray(it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function aTypedArrayConstructor(C) {\n if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function exportTypedArrayMethod(KEY, property, forced) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n delete TypedArrayConstructor.prototype[KEY];\n } catch (error) {\n /* empty */\n }\n }\n\n if (!TypedArrayPrototype[KEY] || forced) {\n redefine(TypedArrayPrototype, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n }\n};\n\nvar exportTypedArrayStaticMethod = function exportTypedArrayStaticMethod(KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n delete TypedArrayConstructor[KEY];\n } catch (error) {\n /* empty */\n }\n }\n\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n } catch (error) {\n /* empty */\n }\n } else return;\n }\n\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n redefine(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);\n} // WebKit bug - typed arrays constructors prototype is Object.prototype\n\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n} // WebKit bug - one more object in Uint8ClampedArray prototype chain\n\n\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQIRED = true;\n defineProperty(TypedArrayPrototype, TO_STRING_TAG, {\n get: function get() {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n }\n });\n\n for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_CONSTRUCTOR: TYPED_ARRAY_CONSTRUCTOR,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n\n/***/ }),\n\n/***/ 2091:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_189726__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_189726__(8309);\n\nvar global = __nested_webpack_require_189726__(7854);\n\nvar uncurryThis = __nested_webpack_require_189726__(1702);\n\nvar DESCRIPTORS = __nested_webpack_require_189726__(9781);\n\nvar NATIVE_ARRAY_BUFFER = __nested_webpack_require_189726__(477);\n\nvar FunctionName = __nested_webpack_require_189726__(6530);\n\nvar createNonEnumerableProperty = __nested_webpack_require_189726__(8880);\n\nvar redefineAll = __nested_webpack_require_189726__(2248);\n\nvar fails = __nested_webpack_require_189726__(7293);\n\nvar anInstance = __nested_webpack_require_189726__(5787);\n\nvar toIntegerOrInfinity = __nested_webpack_require_189726__(9303);\n\nvar toLength = __nested_webpack_require_189726__(7466);\n\nvar toIndex = __nested_webpack_require_189726__(7067);\n\nvar IEEE754 = __nested_webpack_require_189726__(1179);\n\nvar getPrototypeOf = __nested_webpack_require_189726__(9518);\n\nvar setPrototypeOf = __nested_webpack_require_189726__(7674);\n\nvar getOwnPropertyNames = (__nested_webpack_require_189726__(8006).f);\n\nvar defineProperty = (__nested_webpack_require_189726__(3070).f);\n\nvar arrayFill = __nested_webpack_require_189726__(1285);\n\nvar arraySlice = __nested_webpack_require_189726__(206);\n\nvar setToStringTag = __nested_webpack_require_189726__(8003);\n\nvar InternalStateModule = __nested_webpack_require_189726__(9909);\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];\nvar $DataView = global[DATA_VIEW];\nvar DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar Array = global.Array;\nvar RangeError = global.RangeError;\nvar fill = uncurryThis(arrayFill);\nvar reverse = uncurryThis([].reverse);\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function packInt8(number) {\n return [number & 0xFF];\n};\n\nvar packInt16 = function packInt16(number) {\n return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function packInt32(number) {\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function unpackInt32(buffer) {\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function packFloat32(number) {\n return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function packFloat64(number) {\n return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function addGetter(Constructor, key) {\n defineProperty(Constructor[PROTOTYPE], key, {\n get: function get() {\n return getInternalState(this)[key];\n }\n });\n};\n\nvar get = function get(view, count, index, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = arraySlice(bytes, start, start + count);\n return isLittleEndian ? pack : reverse(pack);\n};\n\nvar set = function set(view, count, index, conversion, value, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = conversion(+value);\n\n for (var i = 0; i < count; i++) {\n bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n }\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n var byteLength = toIndex(length);\n setInternalState(this, {\n bytes: fill(Array(byteLength), 0),\n byteLength: byteLength\n });\n if (!DESCRIPTORS) this.byteLength = byteLength;\n };\n\n ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, DataViewPrototype);\n anInstance(buffer, ArrayBufferPrototype);\n var bufferLength = getInternalState(buffer).byteLength;\n var offset = toIntegerOrInfinity(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n setInternalState(this, {\n buffer: buffer,\n byteLength: byteLength,\n byteOffset: offset\n });\n\n if (!DESCRIPTORS) {\n this.buffer = buffer;\n this.byteLength = byteLength;\n this.byteOffset = offset;\n }\n };\n\n DataViewPrototype = $DataView[PROTOTYPE];\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, 'byteLength');\n addGetter($DataView, 'buffer');\n addGetter($DataView, 'byteLength');\n addGetter($DataView, 'byteOffset');\n }\n\n redefineAll(DataViewPrototype, {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset\n /* , littleEndian */\n ) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset\n /* , littleEndian */\n ) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset\n /* , littleEndian */\n ) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n },\n getUint32: function getUint32(byteOffset\n /* , littleEndian */\n ) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset\n /* , littleEndian */\n ) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n },\n getFloat64: function getFloat64(byteOffset\n /* , littleEndian */\n ) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setInt16: function setInt16(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint16: function setUint16(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setInt32: function setInt32(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint32: function setUint32(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat32: function setFloat32(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat64: function setFloat64(byteOffset, value\n /* , littleEndian */\n ) {\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n }\n });\n} else {\n var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;\n /* eslint-disable no-new -- required for testing */\n\n if (!fails(function () {\n NativeArrayBuffer(1);\n }) || !fails(function () {\n new NativeArrayBuffer(-1);\n }) || fails(function () {\n new NativeArrayBuffer();\n new NativeArrayBuffer(1.5);\n new NativeArrayBuffer(NaN);\n return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;\n })) {\n /* eslint-enable no-new -- required for testing */\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n return new NativeArrayBuffer(toIndex(length));\n };\n\n $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;\n\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) {\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n }\n }\n\n ArrayBufferPrototype.constructor = $ArrayBuffer;\n } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);\n } // WebKit bug - the same parent prototype for typed arrays and data view\n\n\n if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {\n setPrototypeOf(DataViewPrototype, ObjectPrototype);\n } // iOS Safari 7.x bug\n\n\n var testView = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = uncurryThis(DataViewPrototype.setInt8);\n testView.setInt8(0, 2147483648);\n testView.setInt8(1, 2147483649);\n if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll(DataViewPrototype, {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n }\n }, {\n unsafe: true\n });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nmodule.exports = {\n ArrayBuffer: $ArrayBuffer,\n DataView: $DataView\n};\n\n/***/ }),\n\n/***/ 7803:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_199689__) {\n\n\"use strict\";\n\n\nvar $ = __nested_webpack_require_199689__(2109);\n\nvar global = __nested_webpack_require_199689__(7854);\n\nvar arrayBufferModule = __nested_webpack_require_199689__(2091);\n\nvar setSpecies = __nested_webpack_require_199689__(6340);\n\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER]; // `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n\n$({\n global: true,\n forced: NativeArrayBuffer !== ArrayBuffer\n}, {\n ArrayBuffer: ArrayBuffer\n});\nsetSpecies(ARRAY_BUFFER);\n\n/***/ }),\n\n/***/ 194:\n/***/ (function(module, exports, __nested_webpack_require_200302__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_200302__(757), __nested_webpack_require_200302__(7508), __nested_webpack_require_200302__(3440), __nested_webpack_require_200302__(3839), __nested_webpack_require_200302__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var BlockCipher = C_lib.BlockCipher;\n var C_algo = C.algo; // Lookup tables\n\n var SBOX = [];\n var INV_SBOX = [];\n var SUB_MIX_0 = [];\n var SUB_MIX_1 = [];\n var SUB_MIX_2 = [];\n var SUB_MIX_3 = [];\n var INV_SUB_MIX_0 = [];\n var INV_SUB_MIX_1 = [];\n var INV_SUB_MIX_2 = [];\n var INV_SUB_MIX_3 = []; // Compute lookup tables\n\n (function () {\n // Compute double table\n var d = [];\n\n for (var i = 0; i < 256; i++) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = i << 1 ^ 0x11b;\n }\n } // Walk GF(2^8)\n\n\n var x = 0;\n var xi = 0;\n\n for (var i = 0; i < 256; i++) {\n // Compute sbox\n var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n SBOX[x] = sx;\n INV_SBOX[sx] = x; // Compute multiplication\n\n var x2 = d[x];\n var x4 = d[x2];\n var x8 = d[x4]; // Compute sub bytes, mix columns tables\n\n var t = d[sx] * 0x101 ^ sx * 0x1010100;\n SUB_MIX_0[x] = t << 24 | t >>> 8;\n SUB_MIX_1[x] = t << 16 | t >>> 16;\n SUB_MIX_2[x] = t << 8 | t >>> 24;\n SUB_MIX_3[x] = t; // Compute inv sub bytes, inv mix columns tables\n\n var t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n INV_SUB_MIX_0[sx] = t << 24 | t >>> 8;\n INV_SUB_MIX_1[sx] = t << 16 | t >>> 16;\n INV_SUB_MIX_2[sx] = t << 8 | t >>> 24;\n INV_SUB_MIX_3[sx] = t; // Compute next counter\n\n if (!x) {\n x = xi = 1;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n }\n })(); // Precomputed Rcon lookup\n\n\n var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n /**\n * AES block cipher algorithm.\n */\n\n var AES = C_algo.AES = BlockCipher.extend({\n _doReset: function _doReset() {\n var t; // Skip reset of nRounds has been set before and key did not change\n\n if (this._nRounds && this._keyPriorReset === this._key) {\n return;\n } // Shortcuts\n\n\n var key = this._keyPriorReset = this._key;\n var keyWords = key.words;\n var keySize = key.sigBytes / 4; // Compute number of rounds\n\n var nRounds = this._nRounds = keySize + 6; // Compute number of key schedule rows\n\n var ksRows = (nRounds + 1) * 4; // Compute key schedule\n\n var keySchedule = this._keySchedule = [];\n\n for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n if (ksRow < keySize) {\n keySchedule[ksRow] = keyWords[ksRow];\n } else {\n t = keySchedule[ksRow - 1];\n\n if (!(ksRow % keySize)) {\n // Rot word\n t = t << 8 | t >>> 24; // Sub word\n\n t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff]; // Mix Rcon\n\n t ^= RCON[ksRow / keySize | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize == 4) {\n // Sub word\n t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n }\n\n keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n }\n } // Compute inv key schedule\n\n\n var invKeySchedule = this._invKeySchedule = [];\n\n for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n var ksRow = ksRows - invKsRow;\n\n if (invKsRow % 4) {\n var t = keySchedule[ksRow];\n } else {\n var t = keySchedule[ksRow - 4];\n }\n\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 0xff]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n }\n }\n },\n encryptBlock: function encryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n },\n decryptBlock: function decryptBlock(M, offset) {\n // Swap 2nd and 4th rows\n var t = M[offset + 1];\n M[offset + 1] = M[offset + 3];\n M[offset + 3] = t;\n\n this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); // Inv swap 2nd and 4th rows\n\n\n var t = M[offset + 1];\n M[offset + 1] = M[offset + 3];\n M[offset + 3] = t;\n },\n _doCryptBlock: function _doCryptBlock(M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n // Shortcut\n var nRounds = this._nRounds; // Get input, add round key\n\n var s0 = M[offset] ^ keySchedule[0];\n var s1 = M[offset + 1] ^ keySchedule[1];\n var s2 = M[offset + 2] ^ keySchedule[2];\n var s3 = M[offset + 3] ^ keySchedule[3]; // Key schedule row counter\n\n var ksRow = 4; // Rounds\n\n for (var round = 1; round < nRounds; round++) {\n // Shift rows, sub bytes, mix columns, add round key\n var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[s1 >>> 16 & 0xff] ^ SUB_MIX_2[s2 >>> 8 & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[s2 >>> 16 & 0xff] ^ SUB_MIX_2[s3 >>> 8 & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[s3 >>> 16 & 0xff] ^ SUB_MIX_2[s0 >>> 8 & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[s0 >>> 16 & 0xff] ^ SUB_MIX_2[s1 >>> 8 & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; // Update state\n\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n } // Shift rows, sub bytes, add round key\n\n\n var t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n var t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n var t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n var t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; // Set output\n\n M[offset] = t0;\n M[offset + 1] = t1;\n M[offset + 2] = t2;\n M[offset + 3] = t3;\n },\n keySize: 256 / 32\n });\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n */\n\n C.AES = BlockCipher._createHelper(AES);\n })();\n\n return CryptoJS.AES;\n});\n\n/***/ }),\n\n/***/ 1582:\n/***/ (function(module, exports, __nested_webpack_require_207683__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_207683__(7042);\n\n__nested_webpack_require_207683__(2222);\n\n__nested_webpack_require_207683__(1539);\n\n__nested_webpack_require_207683__(9714);\n\n__nested_webpack_require_207683__(561);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_207683__(757), __nested_webpack_require_207683__(3839));\n } else {}\n})(void 0, function (CryptoJS) {\n /**\n * Cipher core components.\n */\n CryptoJS.lib.Cipher || function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n var C_enc = C.enc;\n var Utf8 = C_enc.Utf8;\n var Base64 = C_enc.Base64;\n var C_algo = C.algo;\n var EvpKDF = C_algo.EvpKDF;\n /**\n * Abstract base cipher template.\n *\n * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n */\n\n var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n *\n * @property {WordArray} iv The IV to use for this operation.\n */\n cfg: Base.extend(),\n\n /**\n * Creates this cipher in encryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n */\n createEncryptor: function createEncryptor(key, cfg) {\n return this.create(this._ENC_XFORM_MODE, key, cfg);\n },\n\n /**\n * Creates this cipher in decryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n */\n createDecryptor: function createDecryptor(key, cfg) {\n return this.create(this._DEC_XFORM_MODE, key, cfg);\n },\n\n /**\n * Initializes a newly created cipher.\n *\n * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n */\n init: function init(xformMode, key, cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg); // Store transform mode and key\n\n this._xformMode = xformMode;\n this._key = key; // Set initial values\n\n this.reset();\n },\n\n /**\n * Resets this cipher to its initial state.\n *\n * @example\n *\n * cipher.reset();\n */\n reset: function reset() {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this); // Perform concrete-cipher logic\n\n this._doReset();\n },\n\n /**\n * Adds data to be encrypted or decrypted.\n *\n * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n *\n * @return {WordArray} The data after processing.\n *\n * @example\n *\n * var encrypted = cipher.process('data');\n * var encrypted = cipher.process(wordArray);\n */\n process: function process(dataUpdate) {\n // Append\n this._append(dataUpdate); // Process available blocks\n\n\n return this._process();\n },\n\n /**\n * Finalizes the encryption or decryption process.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n *\n * @return {WordArray} The data after final processing.\n *\n * @example\n *\n * var encrypted = cipher.finalize();\n * var encrypted = cipher.finalize('data');\n * var encrypted = cipher.finalize(wordArray);\n */\n finalize: function finalize(dataUpdate) {\n // Final data update\n if (dataUpdate) {\n this._append(dataUpdate);\n } // Perform concrete-cipher logic\n\n\n var finalProcessedData = this._doFinalize();\n\n return finalProcessedData;\n },\n keySize: 128 / 32,\n ivSize: 128 / 32,\n _ENC_XFORM_MODE: 1,\n _DEC_XFORM_MODE: 2,\n\n /**\n * Creates shortcut functions to a cipher's object interface.\n *\n * @param {Cipher} cipher The cipher to create a helper for.\n *\n * @return {Object} An object with encrypt and decrypt shortcut functions.\n *\n * @static\n *\n * @example\n *\n * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n */\n _createHelper: function () {\n function selectCipherStrategy(key) {\n if (typeof key == 'string') {\n return PasswordBasedCipher;\n } else {\n return SerializableCipher;\n }\n }\n\n return function (cipher) {\n return {\n encrypt: function encrypt(message, key, cfg) {\n return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n },\n decrypt: function decrypt(ciphertext, key, cfg) {\n return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n }\n };\n };\n }()\n });\n /**\n * Abstract base stream cipher template.\n *\n * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n */\n\n var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n _doFinalize: function _doFinalize() {\n // Process partial blocks\n var finalProcessedBlocks = this._process(!!'flush');\n\n return finalProcessedBlocks;\n },\n blockSize: 1\n });\n /**\n * Mode namespace.\n */\n\n var C_mode = C.mode = {};\n /**\n * Abstract base block cipher mode template.\n */\n\n var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n /**\n * Creates this mode for encryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n */\n createEncryptor: function createEncryptor(cipher, iv) {\n return this.Encryptor.create(cipher, iv);\n },\n\n /**\n * Creates this mode for decryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n */\n createDecryptor: function createDecryptor(cipher, iv) {\n return this.Decryptor.create(cipher, iv);\n },\n\n /**\n * Initializes a newly created mode.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n */\n init: function init(cipher, iv) {\n this._cipher = cipher;\n this._iv = iv;\n }\n });\n /**\n * Cipher Block Chaining mode.\n */\n\n var CBC = C_mode.CBC = function () {\n /**\n * Abstract base CBC mode.\n */\n var CBC = BlockCipherMode.extend();\n /**\n * CBC encryptor.\n */\n\n CBC.Encryptor = CBC.extend({\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize; // XOR and encrypt\n\n xorBlock.call(this, words, offset, blockSize);\n cipher.encryptBlock(words, offset); // Remember this block to use with next block\n\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n });\n /**\n * CBC decryptor.\n */\n\n CBC.Decryptor = CBC.extend({\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize; // Remember this block to use with next block\n\n var thisBlock = words.slice(offset, offset + blockSize); // Decrypt and XOR\n\n cipher.decryptBlock(words, offset);\n xorBlock.call(this, words, offset, blockSize); // This block becomes the previous block\n\n this._prevBlock = thisBlock;\n }\n });\n\n function xorBlock(words, offset, blockSize) {\n var block; // Shortcut\n\n var iv = this._iv; // Choose mixing block\n\n if (iv) {\n block = iv; // Remove IV for subsequent blocks\n\n this._iv = undefined;\n } else {\n block = this._prevBlock;\n } // XOR blocks\n\n\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= block[i];\n }\n }\n\n return CBC;\n }();\n /**\n * Padding namespace.\n */\n\n\n var C_pad = C.pad = {};\n /**\n * PKCS #5/7 padding strategy.\n */\n\n var Pkcs7 = C_pad.Pkcs7 = {\n /**\n * Pads data using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to pad.\n * @param {number} blockSize The multiple that the data should be padded to.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n */\n pad: function pad(data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4; // Count padding bytes\n\n var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; // Create padding word\n\n var paddingWord = nPaddingBytes << 24 | nPaddingBytes << 16 | nPaddingBytes << 8 | nPaddingBytes; // Create padding\n\n var paddingWords = [];\n\n for (var i = 0; i < nPaddingBytes; i += 4) {\n paddingWords.push(paddingWord);\n }\n\n var padding = WordArray.create(paddingWords, nPaddingBytes); // Add padding\n\n data.concat(padding);\n },\n\n /**\n * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to unpad.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.unpad(wordArray);\n */\n unpad: function unpad(data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff; // Remove padding\n\n data.sigBytes -= nPaddingBytes;\n }\n };\n /**\n * Abstract base block cipher template.\n *\n * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n */\n\n var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n /**\n * Configuration options.\n *\n * @property {Mode} mode The block mode to use. Default: CBC\n * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n */\n cfg: Cipher.cfg.extend({\n mode: CBC,\n padding: Pkcs7\n }),\n reset: function reset() {\n var modeCreator; // Reset cipher\n\n Cipher.reset.call(this); // Shortcuts\n\n var cfg = this.cfg;\n var iv = cfg.iv;\n var mode = cfg.mode; // Reset block mode\n\n if (this._xformMode == this._ENC_XFORM_MODE) {\n modeCreator = mode.createEncryptor;\n } else\n /* if (this._xformMode == this._DEC_XFORM_MODE) */\n {\n modeCreator = mode.createDecryptor; // Keep at least one block in the buffer for unpadding\n\n this._minBufferSize = 1;\n }\n\n if (this._mode && this._mode.__creator == modeCreator) {\n this._mode.init(this, iv && iv.words);\n } else {\n this._mode = modeCreator.call(mode, this, iv && iv.words);\n this._mode.__creator = modeCreator;\n }\n },\n _doProcessBlock: function _doProcessBlock(words, offset) {\n this._mode.processBlock(words, offset);\n },\n _doFinalize: function _doFinalize() {\n var finalProcessedBlocks; // Shortcut\n\n var padding = this.cfg.padding; // Finalize\n\n if (this._xformMode == this._ENC_XFORM_MODE) {\n // Pad data\n padding.pad(this._data, this.blockSize); // Process final blocks\n\n finalProcessedBlocks = this._process(!!'flush');\n } else\n /* if (this._xformMode == this._DEC_XFORM_MODE) */\n {\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush'); // Unpad data\n\n padding.unpad(finalProcessedBlocks);\n }\n\n return finalProcessedBlocks;\n },\n blockSize: 128 / 32\n });\n /**\n * A collection of cipher parameters.\n *\n * @property {WordArray} ciphertext The raw ciphertext.\n * @property {WordArray} key The key to this ciphertext.\n * @property {WordArray} iv The IV used in the ciphering operation.\n * @property {WordArray} salt The salt used with a key derivation function.\n * @property {Cipher} algorithm The cipher algorithm.\n * @property {Mode} mode The block mode used in the ciphering operation.\n * @property {Padding} padding The padding scheme used in the ciphering operation.\n * @property {number} blockSize The block size of the cipher.\n * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n */\n\n var CipherParams = C_lib.CipherParams = Base.extend({\n /**\n * Initializes a newly created cipher params object.\n *\n * @param {Object} cipherParams An object with any of the possible cipher parameters.\n *\n * @example\n *\n * var cipherParams = CryptoJS.lib.CipherParams.create({\n * ciphertext: ciphertextWordArray,\n * key: keyWordArray,\n * iv: ivWordArray,\n * salt: saltWordArray,\n * algorithm: CryptoJS.algo.AES,\n * mode: CryptoJS.mode.CBC,\n * padding: CryptoJS.pad.PKCS7,\n * blockSize: 4,\n * formatter: CryptoJS.format.OpenSSL\n * });\n */\n init: function init(cipherParams) {\n this.mixIn(cipherParams);\n },\n\n /**\n * Converts this cipher params object to a string.\n *\n * @param {Format} formatter (Optional) The formatting strategy to use.\n *\n * @return {string} The stringified cipher params.\n *\n * @throws Error If neither the formatter nor the default formatter is set.\n *\n * @example\n *\n * var string = cipherParams + '';\n * var string = cipherParams.toString();\n * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n */\n toString: function toString(formatter) {\n return (formatter || this.formatter).stringify(this);\n }\n });\n /**\n * Format namespace.\n */\n\n var C_format = C.format = {};\n /**\n * OpenSSL formatting strategy.\n */\n\n var OpenSSLFormatter = C_format.OpenSSL = {\n /**\n * Converts a cipher params object to an OpenSSL-compatible string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The OpenSSL-compatible string.\n *\n * @static\n *\n * @example\n *\n * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n */\n stringify: function stringify(cipherParams) {\n var wordArray; // Shortcuts\n\n var ciphertext = cipherParams.ciphertext;\n var salt = cipherParams.salt; // Format\n\n if (salt) {\n wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n } else {\n wordArray = ciphertext;\n }\n\n return wordArray.toString(Base64);\n },\n\n /**\n * Converts an OpenSSL-compatible string to a cipher params object.\n *\n * @param {string} openSSLStr The OpenSSL-compatible string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n */\n parse: function parse(openSSLStr) {\n var salt; // Parse base64\n\n var ciphertext = Base64.parse(openSSLStr); // Shortcut\n\n var ciphertextWords = ciphertext.words; // Test for salt\n\n if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n // Extract salt\n salt = WordArray.create(ciphertextWords.slice(2, 4)); // Remove salt from ciphertext\n\n ciphertextWords.splice(0, 4);\n ciphertext.sigBytes -= 16;\n }\n\n return CipherParams.create({\n ciphertext: ciphertext,\n salt: salt\n });\n }\n };\n /**\n * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n */\n\n var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n /**\n * Configuration options.\n *\n * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n */\n cfg: Base.extend({\n format: OpenSSLFormatter\n }),\n\n /**\n * Encrypts a message.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n encrypt: function encrypt(cipher, message, key, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg); // Encrypt\n\n var encryptor = cipher.createEncryptor(key, cfg);\n var ciphertext = encryptor.finalize(message); // Shortcut\n\n var cipherCfg = encryptor.cfg; // Create and return serializable cipher params\n\n return CipherParams.create({\n ciphertext: ciphertext,\n key: key,\n iv: cipherCfg.iv,\n algorithm: cipher,\n mode: cipherCfg.mode,\n padding: cipherCfg.padding,\n blockSize: cipher.blockSize,\n formatter: cfg.format\n });\n },\n\n /**\n * Decrypts serialized ciphertext.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n decrypt: function decrypt(cipher, ciphertext, key, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg); // Convert string to CipherParams\n\n ciphertext = this._parse(ciphertext, cfg.format); // Decrypt\n\n var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n return plaintext;\n },\n\n /**\n * Converts serialized ciphertext to CipherParams,\n * else assumed CipherParams already and returns ciphertext unchanged.\n *\n * @param {CipherParams|string} ciphertext The ciphertext.\n * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n *\n * @return {CipherParams} The unserialized ciphertext.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n */\n _parse: function _parse(ciphertext, format) {\n if (typeof ciphertext == 'string') {\n return format.parse(ciphertext, this);\n } else {\n return ciphertext;\n }\n }\n });\n /**\n * Key derivation function namespace.\n */\n\n var C_kdf = C.kdf = {};\n /**\n * OpenSSL key derivation function.\n */\n\n var OpenSSLKdf = C_kdf.OpenSSL = {\n /**\n * Derives a key and IV from a password.\n *\n * @param {string} password The password to derive from.\n * @param {number} keySize The size in words of the key to generate.\n * @param {number} ivSize The size in words of the IV to generate.\n * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n *\n * @return {CipherParams} A cipher params object with the key, IV, and salt.\n *\n * @static\n *\n * @example\n *\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n */\n execute: function execute(password, keySize, ivSize, salt) {\n // Generate random salt\n if (!salt) {\n salt = WordArray.random(64 / 8);\n } // Derive key and IV\n\n\n var key = EvpKDF.create({\n keySize: keySize + ivSize\n }).compute(password, salt); // Separate key and IV\n\n var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n key.sigBytes = keySize * 4; // Return params\n\n return CipherParams.create({\n key: key,\n iv: iv,\n salt: salt\n });\n }\n };\n /**\n * A serializable cipher wrapper that derives the key from a password,\n * and returns ciphertext as a serializable cipher params object.\n */\n\n var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n /**\n * Configuration options.\n *\n * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n */\n cfg: SerializableCipher.cfg.extend({\n kdf: OpenSSLKdf\n }),\n\n /**\n * Encrypts a message using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n */\n encrypt: function encrypt(cipher, message, password, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg); // Derive key and other params\n\n var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); // Add IV to config\n\n cfg.iv = derivedParams.iv; // Encrypt\n\n var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); // Mix in derived params\n\n ciphertext.mixIn(derivedParams);\n return ciphertext;\n },\n\n /**\n * Decrypts serialized ciphertext using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n */\n decrypt: function decrypt(cipher, ciphertext, password, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg); // Convert string to CipherParams\n\n ciphertext = this._parse(ciphertext, cfg.format); // Derive key and other params\n\n var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); // Add IV to config\n\n cfg.iv = derivedParams.iv; // Decrypt\n\n var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n return plaintext;\n }\n });\n }();\n});\n\n/***/ }),\n\n/***/ 757:\n/***/ (function(module, exports, __nested_webpack_require_234610__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_234610__(5743);\n\n__nested_webpack_require_234610__(6992);\n\n__nested_webpack_require_234610__(1539);\n\n__nested_webpack_require_234610__(9135);\n\n__nested_webpack_require_234610__(2990);\n\n__nested_webpack_require_234610__(8927);\n\n__nested_webpack_require_234610__(3105);\n\n__nested_webpack_require_234610__(5035);\n\n__nested_webpack_require_234610__(4345);\n\n__nested_webpack_require_234610__(7174);\n\n__nested_webpack_require_234610__(2846);\n\n__nested_webpack_require_234610__(4731);\n\n__nested_webpack_require_234610__(7209);\n\n__nested_webpack_require_234610__(6319);\n\n__nested_webpack_require_234610__(8867);\n\n__nested_webpack_require_234610__(7789);\n\n__nested_webpack_require_234610__(3739);\n\n__nested_webpack_require_234610__(9368);\n\n__nested_webpack_require_234610__(4483);\n\n__nested_webpack_require_234610__(2056);\n\n__nested_webpack_require_234610__(3462);\n\n__nested_webpack_require_234610__(678);\n\n__nested_webpack_require_234610__(7462);\n\n__nested_webpack_require_234610__(3824);\n\n__nested_webpack_require_234610__(5021);\n\n__nested_webpack_require_234610__(2974);\n\n__nested_webpack_require_234610__(5016);\n\n__nested_webpack_require_234610__(9714);\n\n__nested_webpack_require_234610__(7042);\n\n__nested_webpack_require_234610__(9600);\n\n__nested_webpack_require_234610__(2222);\n\n__nested_webpack_require_234610__(561);\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory();\n } else {}\n})(void 0, function () {\n /*globals window, global, require*/\n\n /**\n * CryptoJS core components.\n */\n var CryptoJS = CryptoJS || function (Math, undefined) {\n var crypto; // Native crypto from window (Browser)\n\n if (typeof window !== 'undefined' && window.crypto) {\n crypto = window.crypto;\n } // Native crypto in web worker (Browser)\n\n\n if (typeof self !== 'undefined' && self.crypto) {\n crypto = self.crypto;\n } // Native crypto from worker\n\n\n if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n crypto = globalThis.crypto;\n } // Native (experimental IE 11) crypto from window (Browser)\n\n\n if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n crypto = window.msCrypto;\n } // Native crypto from global (NodeJS)\n\n\n if (!crypto && typeof __nested_webpack_require_234610__.g !== 'undefined' && __nested_webpack_require_234610__.g.crypto) {\n crypto = __nested_webpack_require_234610__.g.crypto;\n } // Native crypto import via require (NodeJS)\n\n\n if (!crypto && \"function\" === 'function') {\n try {\n crypto = __nested_webpack_require_234610__(2480);\n } catch (err) {}\n }\n /*\n * Cryptographically secure pseudorandom number generator\n *\n * As Math.random() is cryptographically not safe to use\n */\n\n\n var cryptoSecureRandomInt = function cryptoSecureRandomInt() {\n if (crypto) {\n // Use getRandomValues method (Browser)\n if (typeof crypto.getRandomValues === 'function') {\n try {\n return crypto.getRandomValues(new Uint32Array(1))[0];\n } catch (err) {}\n } // Use randomBytes method (NodeJS)\n\n\n if (typeof crypto.randomBytes === 'function') {\n try {\n return crypto.randomBytes(4).readInt32LE();\n } catch (err) {}\n }\n }\n\n throw new Error('Native crypto module could not be used to get secure random number.');\n };\n /*\n * Local polyfill of Object.create\n */\n\n\n var create = Object.create || function () {\n function F() {}\n\n return function (obj) {\n var subtype;\n F.prototype = obj;\n subtype = new F();\n F.prototype = null;\n return subtype;\n };\n }();\n /**\n * CryptoJS namespace.\n */\n\n\n var C = {};\n /**\n * Library namespace.\n */\n\n var C_lib = C.lib = {};\n /**\n * Base object for prototypal inheritance.\n */\n\n var Base = C_lib.Base = function () {\n return {\n /**\n * Creates a new object that inherits from this object.\n *\n * @param {Object} overrides Properties to copy into the new object.\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * field: 'value',\n *\n * method: function () {\n * }\n * });\n */\n extend: function extend(overrides) {\n // Spawn\n var subtype = create(this); // Augment\n\n if (overrides) {\n subtype.mixIn(overrides);\n } // Create default initializer\n\n\n if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n subtype.init = function () {\n subtype.$super.init.apply(this, arguments);\n };\n } // Initializer's prototype is the subtype object\n\n\n subtype.init.prototype = subtype; // Reference supertype\n\n subtype.$super = this;\n return subtype;\n },\n\n /**\n * Extends this object and runs the init method.\n * Arguments to create() will be passed to init().\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var instance = MyType.create();\n */\n create: function create() {\n var instance = this.extend();\n instance.init.apply(instance, arguments);\n return instance;\n },\n\n /**\n * Initializes a newly created object.\n * Override this method to add some logic when your objects are created.\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * init: function () {\n * // ...\n * }\n * });\n */\n init: function init() {},\n\n /**\n * Copies properties into this object.\n *\n * @param {Object} properties The properties to mix in.\n *\n * @example\n *\n * MyType.mixIn({\n * field: 'value'\n * });\n */\n mixIn: function mixIn(properties) {\n for (var propertyName in properties) {\n if (properties.hasOwnProperty(propertyName)) {\n this[propertyName] = properties[propertyName];\n }\n } // IE won't copy toString using the loop above\n\n\n if (properties.hasOwnProperty('toString')) {\n this.toString = properties.toString;\n }\n },\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = instance.clone();\n */\n clone: function clone() {\n return this.init.prototype.extend(this);\n }\n };\n }();\n /**\n * An array of 32-bit words.\n *\n * @property {Array} words The array of 32-bit words.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\n\n\n var WordArray = C_lib.WordArray = Base.extend({\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of 32-bit words.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.create();\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n */\n init: function init(words, sigBytes) {\n words = this.words = words || [];\n\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 4;\n }\n },\n\n /**\n * Converts this word array to a string.\n *\n * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n *\n * @return {string} The stringified word array.\n *\n * @example\n *\n * var string = wordArray + '';\n * var string = wordArray.toString();\n * var string = wordArray.toString(CryptoJS.enc.Utf8);\n */\n toString: function toString(encoder) {\n return (encoder || Hex).stringify(this);\n },\n\n /**\n * Concatenates a word array to this word array.\n *\n * @param {WordArray} wordArray The word array to append.\n *\n * @return {WordArray} This word array.\n *\n * @example\n *\n * wordArray1.concat(wordArray2);\n */\n concat: function concat(wordArray) {\n // Shortcuts\n var thisWords = this.words;\n var thatWords = wordArray.words;\n var thisSigBytes = this.sigBytes;\n var thatSigBytes = wordArray.sigBytes; // Clamp excess bits\n\n this.clamp(); // Concat\n\n if (thisSigBytes % 4) {\n // Copy one byte at a time\n for (var i = 0; i < thatSigBytes; i++) {\n var thatByte = thatWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n thisWords[thisSigBytes + i >>> 2] |= thatByte << 24 - (thisSigBytes + i) % 4 * 8;\n }\n } else {\n // Copy one word at a time\n for (var j = 0; j < thatSigBytes; j += 4) {\n thisWords[thisSigBytes + j >>> 2] = thatWords[j >>> 2];\n }\n }\n\n this.sigBytes += thatSigBytes; // Chainable\n\n return this;\n },\n\n /**\n * Removes insignificant bits.\n *\n * @example\n *\n * wordArray.clamp();\n */\n clamp: function clamp() {\n // Shortcuts\n var words = this.words;\n var sigBytes = this.sigBytes; // Clamp\n\n words[sigBytes >>> 2] &= 0xffffffff << 32 - sigBytes % 4 * 8;\n words.length = Math.ceil(sigBytes / 4);\n },\n\n /**\n * Creates a copy of this word array.\n *\n * @return {WordArray} The clone.\n *\n * @example\n *\n * var clone = wordArray.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this);\n clone.words = this.words.slice(0);\n return clone;\n },\n\n /**\n * Creates a word array filled with random bytes.\n *\n * @param {number} nBytes The number of random bytes to generate.\n *\n * @return {WordArray} The random word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.random(16);\n */\n random: function random(nBytes) {\n var words = [];\n\n for (var i = 0; i < nBytes; i += 4) {\n words.push(cryptoSecureRandomInt());\n }\n\n return new WordArray.init(words, nBytes);\n }\n });\n /**\n * Encoder namespace.\n */\n\n var C_enc = C.enc = {};\n /**\n * Hex encoding strategy.\n */\n\n var Hex = C_enc.Hex = {\n /**\n * Converts a word array to a hex string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The hex string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes; // Convert\n\n var hexChars = [];\n\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n\n return hexChars.join('');\n },\n\n /**\n * Converts a hex string to a word array.\n *\n * @param {string} hexStr The hex string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n */\n parse: function parse(hexStr) {\n // Shortcut\n var hexStrLength = hexStr.length; // Convert\n\n var words = [];\n\n for (var i = 0; i < hexStrLength; i += 2) {\n words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << 24 - i % 8 * 4;\n }\n\n return new WordArray.init(words, hexStrLength / 2);\n }\n };\n /**\n * Latin1 encoding strategy.\n */\n\n var Latin1 = C_enc.Latin1 = {\n /**\n * Converts a word array to a Latin1 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Latin1 string.\n *\n * @static\n *\n * @example\n *\n * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes; // Convert\n\n var latin1Chars = [];\n\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n\n return latin1Chars.join('');\n },\n\n /**\n * Converts a Latin1 string to a word array.\n *\n * @param {string} latin1Str The Latin1 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n */\n parse: function parse(latin1Str) {\n // Shortcut\n var latin1StrLength = latin1Str.length; // Convert\n\n var words = [];\n\n for (var i = 0; i < latin1StrLength; i++) {\n words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << 24 - i % 4 * 8;\n }\n\n return new WordArray.init(words, latin1StrLength);\n }\n };\n /**\n * UTF-8 encoding strategy.\n */\n\n var Utf8 = C_enc.Utf8 = {\n /**\n * Converts a word array to a UTF-8 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-8 string.\n *\n * @static\n *\n * @example\n *\n * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n try {\n return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n },\n\n /**\n * Converts a UTF-8 string to a word array.\n *\n * @param {string} utf8Str The UTF-8 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n */\n parse: function parse(utf8Str) {\n return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n }\n };\n /**\n * Abstract buffered block algorithm template.\n *\n * The property blockSize must be implemented in a concrete subtype.\n *\n * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n */\n\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n /**\n * Resets this block algorithm's data buffer to its initial state.\n *\n * @example\n *\n * bufferedBlockAlgorithm.reset();\n */\n reset: function reset() {\n // Initial values\n this._data = new WordArray.init();\n this._nDataBytes = 0;\n },\n\n /**\n * Adds new data to this block algorithm's buffer.\n *\n * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n *\n * @example\n *\n * bufferedBlockAlgorithm._append('data');\n * bufferedBlockAlgorithm._append(wordArray);\n */\n _append: function _append(data) {\n // Convert string to WordArray, else assume WordArray already\n if (typeof data == 'string') {\n data = Utf8.parse(data);\n } // Append\n\n\n this._data.concat(data);\n\n this._nDataBytes += data.sigBytes;\n },\n\n /**\n * Processes available data blocks.\n *\n * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n *\n * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n *\n * @return {WordArray} The processed data.\n *\n * @example\n *\n * var processedData = bufferedBlockAlgorithm._process();\n * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n */\n _process: function _process(doFlush) {\n var processedWords; // Shortcuts\n\n var data = this._data;\n var dataWords = data.words;\n var dataSigBytes = data.sigBytes;\n var blockSize = this.blockSize;\n var blockSizeBytes = blockSize * 4; // Count blocks ready\n\n var nBlocksReady = dataSigBytes / blockSizeBytes;\n\n if (doFlush) {\n // Round up to include partial blocks\n nBlocksReady = Math.ceil(nBlocksReady);\n } else {\n // Round down to include only full blocks,\n // less the number of blocks that must remain in the buffer\n nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n } // Count words ready\n\n\n var nWordsReady = nBlocksReady * blockSize; // Count bytes ready\n\n var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); // Process blocks\n\n if (nWordsReady) {\n for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n // Perform concrete-algorithm logic\n this._doProcessBlock(dataWords, offset);\n } // Remove processed words\n\n\n processedWords = dataWords.splice(0, nWordsReady);\n data.sigBytes -= nBytesReady;\n } // Return processed words\n\n\n return new WordArray.init(processedWords, nBytesReady);\n },\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = bufferedBlockAlgorithm.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this);\n clone._data = this._data.clone();\n return clone;\n },\n _minBufferSize: 0\n });\n /**\n * Abstract hasher template.\n *\n * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n */\n\n var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n */\n cfg: Base.extend(),\n\n /**\n * Initializes a newly created hasher.\n *\n * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n *\n * @example\n *\n * var hasher = CryptoJS.algo.SHA256.create();\n */\n init: function init(cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg); // Set initial values\n\n this.reset();\n },\n\n /**\n * Resets this hasher to its initial state.\n *\n * @example\n *\n * hasher.reset();\n */\n reset: function reset() {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this); // Perform concrete-hasher logic\n\n this._doReset();\n },\n\n /**\n * Updates this hasher with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {Hasher} This hasher.\n *\n * @example\n *\n * hasher.update('message');\n * hasher.update(wordArray);\n */\n update: function update(messageUpdate) {\n // Append\n this._append(messageUpdate); // Update the hash\n\n\n this._process(); // Chainable\n\n\n return this;\n },\n\n /**\n * Finalizes the hash computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The hash.\n *\n * @example\n *\n * var hash = hasher.finalize();\n * var hash = hasher.finalize('message');\n * var hash = hasher.finalize(wordArray);\n */\n finalize: function finalize(messageUpdate) {\n // Final message update\n if (messageUpdate) {\n this._append(messageUpdate);\n } // Perform concrete-hasher logic\n\n\n var hash = this._doFinalize();\n\n return hash;\n },\n blockSize: 512 / 32,\n\n /**\n * Creates a shortcut function to a hasher's object interface.\n *\n * @param {Hasher} hasher The hasher to create a helper for.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n */\n _createHelper: function _createHelper(hasher) {\n return function (message, cfg) {\n return new hasher.init(cfg).finalize(message);\n };\n },\n\n /**\n * Creates a shortcut function to the HMAC's object interface.\n *\n * @param {Hasher} hasher The hasher to use in this HMAC helper.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n */\n _createHmacHelper: function _createHmacHelper(hasher) {\n return function (message, key) {\n return new C_algo.HMAC.init(hasher, key).finalize(message);\n };\n }\n });\n /**\n * Algorithm namespace.\n */\n\n var C_algo = C.algo = {};\n return C;\n }(Math);\n\n return CryptoJS;\n});\n\n/***/ }),\n\n/***/ 7508:\n/***/ (function(module, exports, __nested_webpack_require_256417__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_256417__(9600);\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_256417__(757));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n /**\n * Base64 encoding strategy.\n */\n\n var Base64 = C_enc.Base64 = {\n /**\n * Converts a word array to a Base64 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Base64 string.\n *\n * @static\n *\n * @example\n *\n * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n var map = this._map; // Clamp excess bits\n\n wordArray.clamp(); // Convert\n\n var base64Chars = [];\n\n for (var i = 0; i < sigBytes; i += 3) {\n var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n var triplet = byte1 << 16 | byte2 << 8 | byte3;\n\n for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n }\n } // Add padding\n\n\n var paddingChar = map.charAt(64);\n\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n\n return base64Chars.join('');\n },\n\n /**\n * Converts a Base64 string to a word array.\n *\n * @param {string} base64Str The Base64 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n */\n parse: function parse(base64Str) {\n // Shortcuts\n var base64StrLength = base64Str.length;\n var map = this._map;\n var reverseMap = this._reverseMap;\n\n if (!reverseMap) {\n reverseMap = this._reverseMap = [];\n\n for (var j = 0; j < map.length; j++) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n } // Ignore padding\n\n\n var paddingChar = map.charAt(64);\n\n if (paddingChar) {\n var paddingIndex = base64Str.indexOf(paddingChar);\n\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n } // Convert\n\n\n return parseLoop(base64Str, base64StrLength, reverseMap);\n },\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n };\n\n function parseLoop(base64Str, base64StrLength, reverseMap) {\n var words = [];\n var nBytes = 0;\n\n for (var i = 0; i < base64StrLength; i++) {\n if (i % 4) {\n var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n var bitsCombined = bits1 | bits2;\n words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;\n nBytes++;\n }\n }\n\n return WordArray.create(words, nBytes);\n }\n })();\n\n return CryptoJS.enc.Base64;\n});\n\n/***/ }),\n\n/***/ 7590:\n/***/ (function(module, exports, __nested_webpack_require_259965__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_259965__(9600);\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_259965__(757));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n /**\n * Base64url encoding strategy.\n */\n\n var Base64url = C_enc.Base64url = {\n /**\n * Converts a word array to a Base64url string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @param {boolean} urlSafe Whether to use url safe\n *\n * @return {string} The Base64url string.\n *\n * @static\n *\n * @example\n *\n * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n */\n stringify: function stringify(wordArray, urlSafe) {\n if (urlSafe === void 0) {\n urlSafe = true;\n }\n\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n var map = urlSafe ? this._safe_map : this._map; // Clamp excess bits\n\n wordArray.clamp(); // Convert\n\n var base64Chars = [];\n\n for (var i = 0; i < sigBytes; i += 3) {\n var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n var triplet = byte1 << 16 | byte2 << 8 | byte3;\n\n for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n }\n } // Add padding\n\n\n var paddingChar = map.charAt(64);\n\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n\n return base64Chars.join('');\n },\n\n /**\n * Converts a Base64url string to a word array.\n *\n * @param {string} base64Str The Base64url string.\n *\n * @param {boolean} urlSafe Whether to use url safe\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n */\n parse: function parse(base64Str, urlSafe) {\n if (urlSafe === void 0) {\n urlSafe = true;\n }\n\n // Shortcuts\n var base64StrLength = base64Str.length;\n var map = urlSafe ? this._safe_map : this._map;\n var reverseMap = this._reverseMap;\n\n if (!reverseMap) {\n reverseMap = this._reverseMap = [];\n\n for (var j = 0; j < map.length; j++) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n } // Ignore padding\n\n\n var paddingChar = map.charAt(64);\n\n if (paddingChar) {\n var paddingIndex = base64Str.indexOf(paddingChar);\n\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n } // Convert\n\n\n return parseLoop(base64Str, base64StrLength, reverseMap);\n },\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'\n };\n\n function parseLoop(base64Str, base64StrLength, reverseMap) {\n var words = [];\n var nBytes = 0;\n\n for (var i = 0; i < base64StrLength; i++) {\n if (i % 4) {\n var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n var bitsCombined = bits1 | bits2;\n words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;\n nBytes++;\n }\n }\n\n return WordArray.create(words, nBytes);\n }\n })();\n\n return CryptoJS.enc.Base64url;\n});\n\n/***/ }),\n\n/***/ 4978:\n/***/ (function(module, exports, __nested_webpack_require_263976__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_263976__(9600);\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_263976__(757));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n /**\n * UTF-16 BE encoding strategy.\n */\n\n var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n /**\n * Converts a word array to a UTF-16 BE string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-16 BE string.\n *\n * @static\n *\n * @example\n *\n * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes; // Convert\n\n var utf16Chars = [];\n\n for (var i = 0; i < sigBytes; i += 2) {\n var codePoint = words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff;\n utf16Chars.push(String.fromCharCode(codePoint));\n }\n\n return utf16Chars.join('');\n },\n\n /**\n * Converts a UTF-16 BE string to a word array.\n *\n * @param {string} utf16Str The UTF-16 BE string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n */\n parse: function parse(utf16Str) {\n // Shortcut\n var utf16StrLength = utf16Str.length; // Convert\n\n var words = [];\n\n for (var i = 0; i < utf16StrLength; i++) {\n words[i >>> 1] |= utf16Str.charCodeAt(i) << 16 - i % 2 * 16;\n }\n\n return WordArray.create(words, utf16StrLength * 2);\n }\n };\n /**\n * UTF-16 LE encoding strategy.\n */\n\n C_enc.Utf16LE = {\n /**\n * Converts a word array to a UTF-16 LE string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-16 LE string.\n *\n * @static\n *\n * @example\n *\n * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes; // Convert\n\n var utf16Chars = [];\n\n for (var i = 0; i < sigBytes; i += 2) {\n var codePoint = swapEndian(words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff);\n utf16Chars.push(String.fromCharCode(codePoint));\n }\n\n return utf16Chars.join('');\n },\n\n /**\n * Converts a UTF-16 LE string to a word array.\n *\n * @param {string} utf16Str The UTF-16 LE string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n */\n parse: function parse(utf16Str) {\n // Shortcut\n var utf16StrLength = utf16Str.length; // Convert\n\n var words = [];\n\n for (var i = 0; i < utf16StrLength; i++) {\n words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << 16 - i % 2 * 16);\n }\n\n return WordArray.create(words, utf16StrLength * 2);\n }\n };\n\n function swapEndian(word) {\n return word << 8 & 0xff00ff00 | word >>> 8 & 0x00ff00ff;\n }\n })();\n\n return CryptoJS.enc.Utf16;\n});\n\n/***/ }),\n\n/***/ 3839:\n/***/ (function(module, exports, __nested_webpack_require_267612__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_267612__(2222);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_267612__(757), __nested_webpack_require_267612__(9865), __nested_webpack_require_267612__(6727));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var MD5 = C_algo.MD5;\n /**\n * This key derivation function is meant to conform with EVP_BytesToKey.\n * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n */\n\n var EvpKDF = C_algo.EvpKDF = Base.extend({\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n cfg: Base.extend({\n keySize: 128 / 32,\n hasher: MD5,\n iterations: 1\n }),\n\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * var kdf = CryptoJS.algo.EvpKDF.create();\n * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n */\n init: function init(cfg) {\n this.cfg = this.cfg.extend(cfg);\n },\n\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * var key = kdf.compute(password, salt);\n */\n compute: function compute(password, salt) {\n var block; // Shortcut\n\n var cfg = this.cfg; // Init hasher\n\n var hasher = cfg.hasher.create(); // Initial values\n\n var derivedKey = WordArray.create(); // Shortcuts\n\n var derivedKeyWords = derivedKey.words;\n var keySize = cfg.keySize;\n var iterations = cfg.iterations; // Generate key\n\n while (derivedKeyWords.length < keySize) {\n if (block) {\n hasher.update(block);\n }\n\n block = hasher.update(password).finalize(salt);\n hasher.reset(); // Iterations\n\n for (var i = 1; i < iterations; i++) {\n block = hasher.finalize(block);\n hasher.reset();\n }\n\n derivedKey.concat(block);\n }\n\n derivedKey.sigBytes = keySize * 4;\n return derivedKey;\n }\n });\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.EvpKDF(password, salt);\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n */\n\n C.EvpKDF = function (password, salt, cfg) {\n return EvpKDF.create(cfg).compute(password, salt);\n };\n })();\n\n return CryptoJS.EvpKDF;\n});\n\n/***/ }),\n\n/***/ 8942:\n/***/ (function(module, exports, __nested_webpack_require_271209__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_271209__(1539);\n\n__nested_webpack_require_271209__(9714);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_271209__(757), __nested_webpack_require_271209__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n (function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var CipherParams = C_lib.CipherParams;\n var C_enc = C.enc;\n var Hex = C_enc.Hex;\n var C_format = C.format;\n var HexFormatter = C_format.Hex = {\n /**\n * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The hexadecimally encoded string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n */\n stringify: function stringify(cipherParams) {\n return cipherParams.ciphertext.toString(Hex);\n },\n\n /**\n * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n *\n * @param {string} input The hexadecimally encoded string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n */\n parse: function parse(input) {\n var ciphertext = Hex.parse(input);\n return CipherParams.create({\n ciphertext: ciphertext\n });\n }\n };\n })();\n\n return CryptoJS.format.Hex;\n});\n\n/***/ }),\n\n/***/ 6727:\n/***/ (function(module, exports, __nested_webpack_require_272930__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_272930__(2222);\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_272930__(757));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var C_enc = C.enc;\n var Utf8 = C_enc.Utf8;\n var C_algo = C.algo;\n /**\n * HMAC algorithm.\n */\n\n var HMAC = C_algo.HMAC = Base.extend({\n /**\n * Initializes a newly created HMAC.\n *\n * @param {Hasher} hasher The hash algorithm to use.\n * @param {WordArray|string} key The secret key.\n *\n * @example\n *\n * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n */\n init: function init(hasher, key) {\n // Init hasher\n hasher = this._hasher = new hasher.init(); // Convert string to WordArray, else assume WordArray already\n\n if (typeof key == 'string') {\n key = Utf8.parse(key);\n } // Shortcuts\n\n\n var hasherBlockSize = hasher.blockSize;\n var hasherBlockSizeBytes = hasherBlockSize * 4; // Allow arbitrary length keys\n\n if (key.sigBytes > hasherBlockSizeBytes) {\n key = hasher.finalize(key);\n } // Clamp excess bits\n\n\n key.clamp(); // Clone key for inner and outer pads\n\n var oKey = this._oKey = key.clone();\n var iKey = this._iKey = key.clone(); // Shortcuts\n\n var oKeyWords = oKey.words;\n var iKeyWords = iKey.words; // XOR keys with pad constants\n\n for (var i = 0; i < hasherBlockSize; i++) {\n oKeyWords[i] ^= 0x5c5c5c5c;\n iKeyWords[i] ^= 0x36363636;\n }\n\n oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; // Set initial values\n\n this.reset();\n },\n\n /**\n * Resets this HMAC to its initial state.\n *\n * @example\n *\n * hmacHasher.reset();\n */\n reset: function reset() {\n // Shortcut\n var hasher = this._hasher; // Reset\n\n hasher.reset();\n hasher.update(this._iKey);\n },\n\n /**\n * Updates this HMAC with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {HMAC} This HMAC instance.\n *\n * @example\n *\n * hmacHasher.update('message');\n * hmacHasher.update(wordArray);\n */\n update: function update(messageUpdate) {\n this._hasher.update(messageUpdate); // Chainable\n\n\n return this;\n },\n\n /**\n * Finalizes the HMAC computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The HMAC.\n *\n * @example\n *\n * var hmac = hmacHasher.finalize();\n * var hmac = hmacHasher.finalize('message');\n * var hmac = hmacHasher.finalize(wordArray);\n */\n finalize: function finalize(messageUpdate) {\n // Shortcut\n var hasher = this._hasher; // Compute HMAC\n\n var innerHash = hasher.finalize(messageUpdate);\n hasher.reset();\n var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n return hmac;\n }\n });\n })();\n});\n\n/***/ }),\n\n/***/ 5153:\n/***/ (function(module, exports, __nested_webpack_require_276428__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_276428__(757), __nested_webpack_require_276428__(2601), __nested_webpack_require_276428__(1947), __nested_webpack_require_276428__(4978), __nested_webpack_require_276428__(7508), __nested_webpack_require_276428__(7590), __nested_webpack_require_276428__(3440), __nested_webpack_require_276428__(9865), __nested_webpack_require_276428__(8921), __nested_webpack_require_276428__(6876), __nested_webpack_require_276428__(7991), __nested_webpack_require_276428__(8122), __nested_webpack_require_276428__(8342), __nested_webpack_require_276428__(8714), __nested_webpack_require_276428__(6727), __nested_webpack_require_276428__(3486), __nested_webpack_require_276428__(3839), __nested_webpack_require_276428__(1582), __nested_webpack_require_276428__(702), __nested_webpack_require_276428__(2362), __nested_webpack_require_276428__(4412), __nested_webpack_require_276428__(5720), __nested_webpack_require_276428__(3518), __nested_webpack_require_276428__(6362), __nested_webpack_require_276428__(4431), __nested_webpack_require_276428__(8800), __nested_webpack_require_276428__(3992), __nested_webpack_require_276428__(649), __nested_webpack_require_276428__(8942), __nested_webpack_require_276428__(194), __nested_webpack_require_276428__(8437), __nested_webpack_require_276428__(4640), __nested_webpack_require_276428__(5323), __nested_webpack_require_276428__(4363));\n } else {}\n})(void 0, function (CryptoJS) {\n return CryptoJS;\n});\n\n/***/ }),\n\n/***/ 1947:\n/***/ (function(module, exports, __nested_webpack_require_277615__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_277615__(7803);\n\n__nested_webpack_require_277615__(1539);\n\n__nested_webpack_require_277615__(6992);\n\n__nested_webpack_require_277615__(2472);\n\n__nested_webpack_require_277615__(2990);\n\n__nested_webpack_require_277615__(8927);\n\n__nested_webpack_require_277615__(3105);\n\n__nested_webpack_require_277615__(5035);\n\n__nested_webpack_require_277615__(4345);\n\n__nested_webpack_require_277615__(7174);\n\n__nested_webpack_require_277615__(2846);\n\n__nested_webpack_require_277615__(4731);\n\n__nested_webpack_require_277615__(7209);\n\n__nested_webpack_require_277615__(6319);\n\n__nested_webpack_require_277615__(8867);\n\n__nested_webpack_require_277615__(7789);\n\n__nested_webpack_require_277615__(3739);\n\n__nested_webpack_require_277615__(9368);\n\n__nested_webpack_require_277615__(4483);\n\n__nested_webpack_require_277615__(2056);\n\n__nested_webpack_require_277615__(3462);\n\n__nested_webpack_require_277615__(678);\n\n__nested_webpack_require_277615__(7462);\n\n__nested_webpack_require_277615__(3824);\n\n__nested_webpack_require_277615__(5021);\n\n__nested_webpack_require_277615__(2974);\n\n__nested_webpack_require_277615__(5016);\n\n__nested_webpack_require_277615__(7145);\n\n__nested_webpack_require_277615__(9743);\n\n__nested_webpack_require_277615__(5109);\n\n__nested_webpack_require_277615__(8255);\n\n__nested_webpack_require_277615__(5125);\n\n__nested_webpack_require_277615__(9135);\n\n__nested_webpack_require_277615__(4197);\n\n__nested_webpack_require_277615__(6495);\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_277615__(757));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Check if typed arrays are supported\n if (typeof ArrayBuffer != 'function') {\n return;\n } // Shortcuts\n\n\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray; // Reference original init\n\n var superInit = WordArray.init; // Augment WordArray.init to handle typed arrays\n\n var subInit = WordArray.init = function (typedArray) {\n // Convert buffers to uint8\n if (typedArray instanceof ArrayBuffer) {\n typedArray = new Uint8Array(typedArray);\n } // Convert other array views to uint8\n\n\n if (typedArray instanceof Int8Array || typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray || typedArray instanceof Int16Array || typedArray instanceof Uint16Array || typedArray instanceof Int32Array || typedArray instanceof Uint32Array || typedArray instanceof Float32Array || typedArray instanceof Float64Array) {\n typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n } // Handle Uint8Array\n\n\n if (typedArray instanceof Uint8Array) {\n // Shortcut\n var typedArrayByteLength = typedArray.byteLength; // Extract bytes\n\n var words = [];\n\n for (var i = 0; i < typedArrayByteLength; i++) {\n words[i >>> 2] |= typedArray[i] << 24 - i % 4 * 8;\n } // Initialize this word array\n\n\n superInit.call(this, words, typedArrayByteLength);\n } else {\n // Else call normal init\n superInit.apply(this, arguments);\n }\n };\n\n subInit.prototype = WordArray;\n })();\n\n return CryptoJS.lib.WordArray;\n});\n\n/***/ }),\n\n/***/ 3440:\n/***/ (function(module, exports, __nested_webpack_require_280495__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_280495__(757));\n } else {}\n})(void 0, function (CryptoJS) {\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo; // Constants table\n\n var T = []; // Compute constants\n\n (function () {\n for (var i = 0; i < 64; i++) {\n T[i] = Math.abs(Math.sin(i + 1)) * 0x100000000 | 0;\n }\n })();\n /**\n * MD5 hash algorithm.\n */\n\n\n var MD5 = C_algo.MD5 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Swap endian\n for (var i = 0; i < 16; i++) {\n // Shortcuts\n var offset_i = offset + i;\n var M_offset_i = M[offset_i];\n M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n } // Shortcuts\n\n\n var H = this._hash.words;\n var M_offset_0 = M[offset + 0];\n var M_offset_1 = M[offset + 1];\n var M_offset_2 = M[offset + 2];\n var M_offset_3 = M[offset + 3];\n var M_offset_4 = M[offset + 4];\n var M_offset_5 = M[offset + 5];\n var M_offset_6 = M[offset + 6];\n var M_offset_7 = M[offset + 7];\n var M_offset_8 = M[offset + 8];\n var M_offset_9 = M[offset + 9];\n var M_offset_10 = M[offset + 10];\n var M_offset_11 = M[offset + 11];\n var M_offset_12 = M[offset + 12];\n var M_offset_13 = M[offset + 13];\n var M_offset_14 = M[offset + 14];\n var M_offset_15 = M[offset + 15]; // Working varialbes\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3]; // Computation\n\n a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n a = II(a, b, c, d, M_offset_0, 6, T[48]);\n d = II(d, a, b, c, M_offset_7, 10, T[49]);\n c = II(c, d, a, b, M_offset_14, 15, T[50]);\n b = II(b, c, d, a, M_offset_5, 21, T[51]);\n a = II(a, b, c, d, M_offset_12, 6, T[52]);\n d = II(d, a, b, c, M_offset_3, 10, T[53]);\n c = II(c, d, a, b, M_offset_10, 15, T[54]);\n b = II(b, c, d, a, M_offset_1, 21, T[55]);\n a = II(a, b, c, d, M_offset_8, 6, T[56]);\n d = II(d, a, b, c, M_offset_15, 10, T[57]);\n c = II(c, d, a, b, M_offset_6, 15, T[58]);\n b = II(b, c, d, a, M_offset_13, 21, T[59]);\n a = II(a, b, c, d, M_offset_4, 6, T[60]);\n d = II(d, a, b, c, M_offset_11, 10, T[61]);\n c = II(c, d, a, b, M_offset_2, 15, T[62]);\n b = II(b, c, d, a, M_offset_9, 21, T[63]); // Intermediate hash value\n\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8; // Add padding\n\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n var nBitsTotalL = nBitsTotal;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = (nBitsTotalH << 8 | nBitsTotalH >>> 24) & 0x00ff00ff | (nBitsTotalH << 24 | nBitsTotalH >>> 8) & 0xff00ff00;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotalL << 8 | nBitsTotalL >>> 24) & 0x00ff00ff | (nBitsTotalL << 24 | nBitsTotalL >>> 8) & 0xff00ff00;\n data.sigBytes = (dataWords.length + 1) * 4; // Hash final blocks\n\n this._process(); // Shortcuts\n\n\n var hash = this._hash;\n var H = hash.words; // Swap endian\n\n for (var i = 0; i < 4; i++) {\n // Shortcut\n var H_i = H[i];\n H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n } // Return final computed hash\n\n\n return hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n\n function FF(a, b, c, d, x, s, t) {\n var n = a + (b & c | ~b & d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n\n function GG(a, b, c, d, x, s, t) {\n var n = a + (b & d | c & ~d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n\n function HH(a, b, c, d, x, s, t) {\n var n = a + (b ^ c ^ d) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n\n function II(a, b, c, d, x, s, t) {\n var n = a + (c ^ (b | ~d)) + x + t;\n return (n << s | n >>> 32 - s) + b;\n }\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.MD5('message');\n * var hash = CryptoJS.MD5(wordArray);\n */\n\n\n C.MD5 = Hasher._createHelper(MD5);\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacMD5(message, key);\n */\n\n C.HmacMD5 = Hasher._createHmacHelper(MD5);\n })(Math);\n\n return CryptoJS.MD5;\n});\n\n/***/ }),\n\n/***/ 702:\n/***/ (function(module, exports, __nested_webpack_require_288617__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_288617__(7042);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_288617__(757), __nested_webpack_require_288617__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n /**\n * Cipher Feedback block mode.\n */\n CryptoJS.mode.CFB = function () {\n var CFB = CryptoJS.lib.BlockCipherMode.extend();\n CFB.Encryptor = CFB.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); // Remember this block to use with next block\n\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n });\n CFB.Decryptor = CFB.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize; // Remember this block to use with next block\n\n var thisBlock = words.slice(offset, offset + blockSize);\n generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); // This block becomes the previous block\n\n this._prevBlock = thisBlock;\n }\n });\n\n function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n var keystream; // Shortcut\n\n var iv = this._iv; // Generate keystream\n\n if (iv) {\n keystream = iv.slice(0); // Remove IV for subsequent blocks\n\n this._iv = undefined;\n } else {\n keystream = this._prevBlock;\n }\n\n cipher.encryptBlock(keystream, 0); // Encrypt\n\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n\n return CFB;\n }();\n\n return CryptoJS.mode.CFB;\n});\n\n/***/ }),\n\n/***/ 4412:\n/***/ (function(module, exports, __nested_webpack_require_290510__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_290510__(7042);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_290510__(757), __nested_webpack_require_290510__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n /** @preserve\n * Counter block mode compatible with Dr Brian Gladman fileenc.c\n * derived from CryptoJS.mode.CTR\n * Jan Hruby jhruby.web@gmail.com\n */\n CryptoJS.mode.CTRGladman = function () {\n var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n function incWord(word) {\n if ((word >> 24 & 0xff) === 0xff) {\n //overflow\n var b1 = word >> 16 & 0xff;\n var b2 = word >> 8 & 0xff;\n var b3 = word & 0xff;\n\n if (b1 === 0xff) // overflow b1\n {\n b1 = 0;\n\n if (b2 === 0xff) {\n b2 = 0;\n\n if (b3 === 0xff) {\n b3 = 0;\n } else {\n ++b3;\n }\n } else {\n ++b2;\n }\n } else {\n ++b1;\n }\n\n word = 0;\n word += b1 << 16;\n word += b2 << 8;\n word += b3;\n } else {\n word += 0x01 << 24;\n }\n\n return word;\n }\n\n function incCounter(counter) {\n if ((counter[0] = incWord(counter[0])) === 0) {\n // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n counter[1] = incWord(counter[1]);\n }\n\n return counter;\n }\n\n var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var counter = this._counter; // Generate keystream\n\n if (iv) {\n counter = this._counter = iv.slice(0); // Remove IV for subsequent blocks\n\n this._iv = undefined;\n }\n\n incCounter(counter);\n var keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0); // Encrypt\n\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n CTRGladman.Decryptor = Encryptor;\n return CTRGladman;\n }();\n\n return CryptoJS.mode.CTRGladman;\n});\n\n/***/ }),\n\n/***/ 2362:\n/***/ (function(module, exports, __nested_webpack_require_292873__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_292873__(7042);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_292873__(757), __nested_webpack_require_292873__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n /**\n * Counter block mode.\n */\n CryptoJS.mode.CTR = function () {\n var CTR = CryptoJS.lib.BlockCipherMode.extend();\n var Encryptor = CTR.Encryptor = CTR.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var counter = this._counter; // Generate keystream\n\n if (iv) {\n counter = this._counter = iv.slice(0); // Remove IV for subsequent blocks\n\n this._iv = undefined;\n }\n\n var keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0); // Increment counter\n\n counter[blockSize - 1] = counter[blockSize - 1] + 1 | 0; // Encrypt\n\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n CTR.Decryptor = Encryptor;\n return CTR;\n }();\n\n return CryptoJS.mode.CTR;\n});\n\n/***/ }),\n\n/***/ 3518:\n/***/ (function(module, exports, __nested_webpack_require_294157__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_294157__(757), __nested_webpack_require_294157__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n /**\n * Electronic Codebook block mode.\n */\n CryptoJS.mode.ECB = function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n ECB.Encryptor = ECB.extend({\n processBlock: function processBlock(words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n ECB.Decryptor = ECB.extend({\n processBlock: function processBlock(words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n return ECB;\n }();\n\n return CryptoJS.mode.ECB;\n});\n\n/***/ }),\n\n/***/ 5720:\n/***/ (function(module, exports, __nested_webpack_require_294970__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_294970__(7042);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_294970__(757), __nested_webpack_require_294970__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n /**\n * Output Feedback block mode.\n */\n CryptoJS.mode.OFB = function () {\n var OFB = CryptoJS.lib.BlockCipherMode.extend();\n var Encryptor = OFB.Encryptor = OFB.extend({\n processBlock: function processBlock(words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n var iv = this._iv;\n var keystream = this._keystream; // Generate keystream\n\n if (iv) {\n keystream = this._keystream = iv.slice(0); // Remove IV for subsequent blocks\n\n this._iv = undefined;\n }\n\n cipher.encryptBlock(keystream, 0); // Encrypt\n\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= keystream[i];\n }\n }\n });\n OFB.Decryptor = Encryptor;\n return OFB;\n }();\n\n return CryptoJS.mode.OFB;\n});\n\n/***/ }),\n\n/***/ 6362:\n/***/ (function(module, exports, __nested_webpack_require_296141__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_296141__(757), __nested_webpack_require_296141__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n /**\n * ANSI X.923 padding strategy.\n */\n CryptoJS.pad.AnsiX923 = {\n pad: function pad(data, blockSize) {\n // Shortcuts\n var dataSigBytes = data.sigBytes;\n var blockSizeBytes = blockSize * 4; // Count padding bytes\n\n var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; // Compute last byte position\n\n var lastBytePos = dataSigBytes + nPaddingBytes - 1; // Pad\n\n data.clamp();\n data.words[lastBytePos >>> 2] |= nPaddingBytes << 24 - lastBytePos % 4 * 8;\n data.sigBytes += nPaddingBytes;\n },\n unpad: function unpad(data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff; // Remove padding\n\n data.sigBytes -= nPaddingBytes;\n }\n };\n return CryptoJS.pad.Ansix923;\n});\n\n/***/ }),\n\n/***/ 4431:\n/***/ (function(module, exports, __nested_webpack_require_297262__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_297262__(2222);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_297262__(757), __nested_webpack_require_297262__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n /**\n * ISO 10126 padding strategy.\n */\n CryptoJS.pad.Iso10126 = {\n pad: function pad(data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4; // Count padding bytes\n\n var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; // Pad\n\n data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n },\n unpad: function unpad(data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff; // Remove padding\n\n data.sigBytes -= nPaddingBytes;\n }\n };\n return CryptoJS.pad.Iso10126;\n});\n\n/***/ }),\n\n/***/ 8800:\n/***/ (function(module, exports, __nested_webpack_require_298274__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_298274__(2222);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_298274__(757), __nested_webpack_require_298274__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n /**\n * ISO/IEC 9797-1 Padding Method 2.\n */\n CryptoJS.pad.Iso97971 = {\n pad: function pad(data, blockSize) {\n // Add 0x80 byte\n data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); // Zero pad the rest\n\n CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n },\n unpad: function unpad(data) {\n // Remove zero padding\n CryptoJS.pad.ZeroPadding.unpad(data); // Remove one more byte -- the 0x80 byte\n\n data.sigBytes--;\n }\n };\n return CryptoJS.pad.Iso97971;\n});\n\n/***/ }),\n\n/***/ 649:\n/***/ (function(module, exports, __nested_webpack_require_299114__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_299114__(757), __nested_webpack_require_299114__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n /**\n * A noop padding strategy.\n */\n CryptoJS.pad.NoPadding = {\n pad: function pad() {},\n unpad: function unpad() {}\n };\n return CryptoJS.pad.NoPadding;\n});\n\n/***/ }),\n\n/***/ 3992:\n/***/ (function(module, exports, __nested_webpack_require_299589__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_299589__(757), __nested_webpack_require_299589__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n /**\n * Zero padding strategy.\n */\n CryptoJS.pad.ZeroPadding = {\n pad: function pad(data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4; // Pad\n\n data.clamp();\n data.sigBytes += blockSizeBytes - (data.sigBytes % blockSizeBytes || blockSizeBytes);\n },\n unpad: function unpad(data) {\n // Shortcut\n var dataWords = data.words; // Unpad\n\n var i = data.sigBytes - 1;\n\n for (var i = data.sigBytes - 1; i >= 0; i--) {\n if (dataWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff) {\n data.sigBytes = i + 1;\n break;\n }\n }\n }\n };\n return CryptoJS.pad.ZeroPadding;\n});\n\n/***/ }),\n\n/***/ 3486:\n/***/ (function(module, exports, __nested_webpack_require_300552__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_300552__(2222);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_300552__(757), __nested_webpack_require_300552__(9865), __nested_webpack_require_300552__(6727));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var SHA1 = C_algo.SHA1;\n var HMAC = C_algo.HMAC;\n /**\n * Password-Based Key Derivation Function 2 algorithm.\n */\n\n var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hasher to use. Default: SHA1\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n cfg: Base.extend({\n keySize: 128 / 32,\n hasher: SHA1,\n iterations: 1\n }),\n\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * var kdf = CryptoJS.algo.PBKDF2.create();\n * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n */\n init: function init(cfg) {\n this.cfg = this.cfg.extend(cfg);\n },\n\n /**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * var key = kdf.compute(password, salt);\n */\n compute: function compute(password, salt) {\n // Shortcut\n var cfg = this.cfg; // Init HMAC\n\n var hmac = HMAC.create(cfg.hasher, password); // Initial values\n\n var derivedKey = WordArray.create();\n var blockIndex = WordArray.create([0x00000001]); // Shortcuts\n\n var derivedKeyWords = derivedKey.words;\n var blockIndexWords = blockIndex.words;\n var keySize = cfg.keySize;\n var iterations = cfg.iterations; // Generate key\n\n while (derivedKeyWords.length < keySize) {\n var block = hmac.update(salt).finalize(blockIndex);\n hmac.reset(); // Shortcuts\n\n var blockWords = block.words;\n var blockWordsLength = blockWords.length; // Iterations\n\n var intermediate = block;\n\n for (var i = 1; i < iterations; i++) {\n intermediate = hmac.finalize(intermediate);\n hmac.reset(); // Shortcut\n\n var intermediateWords = intermediate.words; // XOR intermediate with block\n\n for (var j = 0; j < blockWordsLength; j++) {\n blockWords[j] ^= intermediateWords[j];\n }\n }\n\n derivedKey.concat(block);\n blockIndexWords[0]++;\n }\n\n derivedKey.sigBytes = keySize * 4;\n return derivedKey;\n }\n });\n /**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.PBKDF2(password, salt);\n * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n */\n\n C.PBKDF2 = function (password, salt, cfg) {\n return PBKDF2.create(cfg).compute(password, salt);\n };\n })();\n\n return CryptoJS.PBKDF2;\n});\n\n/***/ }),\n\n/***/ 4363:\n/***/ (function(module, exports, __nested_webpack_require_304593__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_304593__(757), __nested_webpack_require_304593__(7508), __nested_webpack_require_304593__(3440), __nested_webpack_require_304593__(3839), __nested_webpack_require_304593__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo; // Reusable objects\n\n var S = [];\n var C_ = [];\n var G = [];\n /**\n * Rabbit stream cipher algorithm.\n *\n * This is a legacy version that neglected to convert the key to little-endian.\n * This error doesn't affect the cipher's security,\n * but it does affect its compatibility with other implementations.\n */\n\n var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var K = this._key.words;\n var iv = this.cfg.iv; // Generate initial state values\n\n var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16]; // Generate initial counter values\n\n var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff]; // Carry bit\n\n this._b = 0; // Iterate the system four times\n\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n } // Modify the counters\n\n\n for (var i = 0; i < 8; i++) {\n C[i] ^= X[i + 4 & 7];\n } // IV setup\n\n\n if (iv) {\n // Shortcuts\n var IV = iv.words;\n var IV_0 = IV[0];\n var IV_1 = IV[1]; // Generate four subvectors\n\n var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n var i1 = i0 >>> 16 | i2 & 0xffff0000;\n var i3 = i2 << 16 | i0 & 0x0000ffff; // Modify counter values\n\n C[0] ^= i0;\n C[1] ^= i1;\n C[2] ^= i2;\n C[3] ^= i3;\n C[4] ^= i0;\n C[5] ^= i1;\n C[6] ^= i2;\n C[7] ^= i3; // Iterate the system four times\n\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n }\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var X = this._X; // Iterate the system\n\n nextState.call(this); // Generate four keystream words\n\n S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n\n for (var i = 0; i < 4; i++) {\n // Swap endian\n S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00; // Encrypt\n\n M[offset + i] ^= S[i];\n }\n },\n blockSize: 128 / 32,\n ivSize: 64 / 32\n });\n\n function nextState() {\n // Shortcuts\n var X = this._X;\n var C = this._C; // Save old counter values\n\n for (var i = 0; i < 8; i++) {\n C_[i] = C[i];\n } // Calculate new counter values\n\n\n C[0] = C[0] + 0x4d34d34d + this._b | 0;\n C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0; // Calculate the g-values\n\n for (var i = 0; i < 8; i++) {\n var gx = X[i] + C[i]; // Construct high and low argument for squaring\n\n var ga = gx & 0xffff;\n var gb = gx >>> 16; // Calculate high and low result of squaring\n\n var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0); // High XOR low\n\n G[i] = gh ^ gl;\n } // Calculate new state values\n\n\n X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n }\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n */\n\n\n C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n })();\n\n return CryptoJS.RabbitLegacy;\n});\n\n/***/ }),\n\n/***/ 5323:\n/***/ (function(module, exports, __nested_webpack_require_310133__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_310133__(757), __nested_webpack_require_310133__(7508), __nested_webpack_require_310133__(3440), __nested_webpack_require_310133__(3839), __nested_webpack_require_310133__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo; // Reusable objects\n\n var S = [];\n var C_ = [];\n var G = [];\n /**\n * Rabbit stream cipher algorithm\n */\n\n var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var K = this._key.words;\n var iv = this.cfg.iv; // Swap endian\n\n for (var i = 0; i < 4; i++) {\n K[i] = (K[i] << 8 | K[i] >>> 24) & 0x00ff00ff | (K[i] << 24 | K[i] >>> 8) & 0xff00ff00;\n } // Generate initial state values\n\n\n var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16]; // Generate initial counter values\n\n var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff]; // Carry bit\n\n this._b = 0; // Iterate the system four times\n\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n } // Modify the counters\n\n\n for (var i = 0; i < 8; i++) {\n C[i] ^= X[i + 4 & 7];\n } // IV setup\n\n\n if (iv) {\n // Shortcuts\n var IV = iv.words;\n var IV_0 = IV[0];\n var IV_1 = IV[1]; // Generate four subvectors\n\n var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n var i1 = i0 >>> 16 | i2 & 0xffff0000;\n var i3 = i2 << 16 | i0 & 0x0000ffff; // Modify counter values\n\n C[0] ^= i0;\n C[1] ^= i1;\n C[2] ^= i2;\n C[3] ^= i3;\n C[4] ^= i0;\n C[5] ^= i1;\n C[6] ^= i2;\n C[7] ^= i3; // Iterate the system four times\n\n for (var i = 0; i < 4; i++) {\n nextState.call(this);\n }\n }\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var X = this._X; // Iterate the system\n\n nextState.call(this); // Generate four keystream words\n\n S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n\n for (var i = 0; i < 4; i++) {\n // Swap endian\n S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00; // Encrypt\n\n M[offset + i] ^= S[i];\n }\n },\n blockSize: 128 / 32,\n ivSize: 64 / 32\n });\n\n function nextState() {\n // Shortcuts\n var X = this._X;\n var C = this._C; // Save old counter values\n\n for (var i = 0; i < 8; i++) {\n C_[i] = C[i];\n } // Calculate new counter values\n\n\n C[0] = C[0] + 0x4d34d34d + this._b | 0;\n C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0; // Calculate the g-values\n\n for (var i = 0; i < 8; i++) {\n var gx = X[i] + C[i]; // Construct high and low argument for squaring\n\n var ga = gx & 0xffff;\n var gb = gx >>> 16; // Calculate high and low result of squaring\n\n var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0); // High XOR low\n\n G[i] = gh ^ gl;\n } // Calculate new state values\n\n\n X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n }\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n */\n\n\n C.Rabbit = StreamCipher._createHelper(Rabbit);\n })();\n\n return CryptoJS.Rabbit;\n});\n\n/***/ }),\n\n/***/ 4640:\n/***/ (function(module, exports, __nested_webpack_require_315574__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_315574__(1539);\n\n__nested_webpack_require_315574__(8674);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_315574__(757), __nested_webpack_require_315574__(7508), __nested_webpack_require_315574__(3440), __nested_webpack_require_315574__(3839), __nested_webpack_require_315574__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var StreamCipher = C_lib.StreamCipher;\n var C_algo = C.algo;\n /**\n * RC4 stream cipher algorithm.\n */\n\n var RC4 = C_algo.RC4 = StreamCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n var keySigBytes = key.sigBytes; // Init sbox\n\n var S = this._S = [];\n\n for (var i = 0; i < 256; i++) {\n S[i] = i;\n } // Key setup\n\n\n for (var i = 0, j = 0; i < 256; i++) {\n var keyByteIndex = i % keySigBytes;\n var keyByte = keyWords[keyByteIndex >>> 2] >>> 24 - keyByteIndex % 4 * 8 & 0xff;\n j = (j + S[i] + keyByte) % 256; // Swap\n\n var t = S[i];\n S[i] = S[j];\n S[j] = t;\n } // Counters\n\n\n this._i = this._j = 0;\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n M[offset] ^= generateKeystreamWord.call(this);\n },\n keySize: 256 / 32,\n ivSize: 0\n });\n\n function generateKeystreamWord() {\n // Shortcuts\n var S = this._S;\n var i = this._i;\n var j = this._j; // Generate keystream word\n\n var keystreamWord = 0;\n\n for (var n = 0; n < 4; n++) {\n i = (i + 1) % 256;\n j = (j + S[i]) % 256; // Swap\n\n var t = S[i];\n S[i] = S[j];\n S[j] = t;\n keystreamWord |= S[(S[i] + S[j]) % 256] << 24 - n * 8;\n } // Update counters\n\n\n this._i = i;\n this._j = j;\n return keystreamWord;\n }\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n */\n\n\n C.RC4 = StreamCipher._createHelper(RC4);\n /**\n * Modified RC4 stream cipher algorithm.\n */\n\n var RC4Drop = C_algo.RC4Drop = RC4.extend({\n /**\n * Configuration options.\n *\n * @property {number} drop The number of keystream words to drop. Default 192\n */\n cfg: RC4.cfg.extend({\n drop: 192\n }),\n _doReset: function _doReset() {\n RC4._doReset.call(this); // Drop\n\n\n for (var i = this.cfg.drop; i > 0; i--) {\n generateKeystreamWord.call(this);\n }\n }\n });\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n */\n\n C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n })();\n\n return CryptoJS.RC4;\n});\n\n/***/ }),\n\n/***/ 8714:\n/***/ (function(module, exports, __nested_webpack_require_318759__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_318759__(757));\n } else {}\n})(void 0, function (CryptoJS) {\n /** @preserve\n (c) 2012 by Cédric Mesnil. All rights reserved.\n \tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n \t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n \tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo; // Constants table\n\n var _zl = WordArray.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\n var _zr = WordArray.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\n var _sl = WordArray.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]);\n\n var _sr = WordArray.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]);\n\n var _hl = WordArray.create([0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\n var _hr = WordArray.create([0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n /**\n * RIPEMD160 hash algorithm.\n */\n\n\n var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Swap endian\n for (var i = 0; i < 16; i++) {\n // Shortcuts\n var offset_i = offset + i;\n var M_offset_i = M[offset_i]; // Swap\n\n M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n } // Shortcut\n\n\n var H = this._hash.words;\n var hl = _hl.words;\n var hr = _hr.words;\n var zl = _zl.words;\n var zr = _zr.words;\n var sl = _sl.words;\n var sr = _sr.words; // Working variables\n\n var al, bl, cl, dl, el;\n var ar, br, cr, dr, er;\n ar = al = H[0];\n br = bl = H[1];\n cr = cl = H[2];\n dr = dl = H[3];\n er = el = H[4]; // Computation\n\n var t;\n\n for (var i = 0; i < 80; i += 1) {\n t = al + M[offset + zl[i]] | 0;\n\n if (i < 16) {\n t += f1(bl, cl, dl) + hl[0];\n } else if (i < 32) {\n t += f2(bl, cl, dl) + hl[1];\n } else if (i < 48) {\n t += f3(bl, cl, dl) + hl[2];\n } else if (i < 64) {\n t += f4(bl, cl, dl) + hl[3];\n } else {\n // if (i<80) {\n t += f5(bl, cl, dl) + hl[4];\n }\n\n t = t | 0;\n t = rotl(t, sl[i]);\n t = t + el | 0;\n al = el;\n el = dl;\n dl = rotl(cl, 10);\n cl = bl;\n bl = t;\n t = ar + M[offset + zr[i]] | 0;\n\n if (i < 16) {\n t += f5(br, cr, dr) + hr[0];\n } else if (i < 32) {\n t += f4(br, cr, dr) + hr[1];\n } else if (i < 48) {\n t += f3(br, cr, dr) + hr[2];\n } else if (i < 64) {\n t += f2(br, cr, dr) + hr[3];\n } else {\n // if (i<80) {\n t += f1(br, cr, dr) + hr[4];\n }\n\n t = t | 0;\n t = rotl(t, sr[i]);\n t = t + er | 0;\n ar = er;\n er = dr;\n dr = rotl(cr, 10);\n cr = br;\n br = t;\n } // Intermediate hash value\n\n\n t = H[1] + cl + dr | 0;\n H[1] = H[2] + dl + er | 0;\n H[2] = H[3] + el + ar | 0;\n H[3] = H[4] + al + br | 0;\n H[4] = H[0] + bl + cr | 0;\n H[0] = t;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8; // Add padding\n\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotal << 8 | nBitsTotal >>> 24) & 0x00ff00ff | (nBitsTotal << 24 | nBitsTotal >>> 8) & 0xff00ff00;\n data.sigBytes = (dataWords.length + 1) * 4; // Hash final blocks\n\n this._process(); // Shortcuts\n\n\n var hash = this._hash;\n var H = hash.words; // Swap endian\n\n for (var i = 0; i < 5; i++) {\n // Shortcut\n var H_i = H[i]; // Swap\n\n H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n } // Return final computed hash\n\n\n return hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n\n function f1(x, y, z) {\n return x ^ y ^ z;\n }\n\n function f2(x, y, z) {\n return x & y | ~x & z;\n }\n\n function f3(x, y, z) {\n return (x | ~y) ^ z;\n }\n\n function f4(x, y, z) {\n return x & z | y & ~z;\n }\n\n function f5(x, y, z) {\n return x ^ (y | ~z);\n }\n\n function rotl(x, n) {\n return x << n | x >>> 32 - n;\n }\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.RIPEMD160('message');\n * var hash = CryptoJS.RIPEMD160(wordArray);\n */\n\n\n C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n */\n\n C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n })(Math);\n\n return CryptoJS.RIPEMD160;\n});\n\n/***/ }),\n\n/***/ 9865:\n/***/ (function(module, exports, __nested_webpack_require_326845__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_326845__(757));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo; // Reusable object\n\n var W = [];\n /**\n * SHA-1 hash algorithm.\n */\n\n var SHA1 = C_algo.SHA1 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var H = this._hash.words; // Working variables\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4]; // Computation\n\n for (var i = 0; i < 80; i++) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n W[i] = n << 1 | n >>> 31;\n }\n\n var t = (a << 5 | a >>> 27) + e + W[i];\n\n if (i < 20) {\n t += (b & c | ~b & d) + 0x5a827999;\n } else if (i < 40) {\n t += (b ^ c ^ d) + 0x6ed9eba1;\n } else if (i < 60) {\n t += (b & c | b & d | c & d) - 0x70e44324;\n } else\n /* if (i < 80) */\n {\n t += (b ^ c ^ d) - 0x359d3e2a;\n }\n\n e = d;\n d = c;\n c = b << 30 | b >>> 2;\n b = a;\n a = t;\n } // Intermediate hash value\n\n\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n H[4] = H[4] + e | 0;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8; // Add padding\n\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4; // Hash final blocks\n\n this._process(); // Return final computed hash\n\n\n return this._hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA1('message');\n * var hash = CryptoJS.SHA1(wordArray);\n */\n\n C.SHA1 = Hasher._createHelper(SHA1);\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA1(message, key);\n */\n\n C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n })();\n\n return CryptoJS.SHA1;\n});\n\n/***/ }),\n\n/***/ 6876:\n/***/ (function(module, exports, __nested_webpack_require_330352__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_330352__(757), __nested_webpack_require_330352__(8921));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var SHA256 = C_algo.SHA256;\n /**\n * SHA-224 hash algorithm.\n */\n\n var SHA224 = C_algo.SHA224 = SHA256.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init([0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4]);\n },\n _doFinalize: function _doFinalize() {\n var hash = SHA256._doFinalize.call(this);\n\n hash.sigBytes -= 4;\n return hash;\n }\n });\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA224('message');\n * var hash = CryptoJS.SHA224(wordArray);\n */\n\n C.SHA224 = SHA256._createHelper(SHA224);\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA224(message, key);\n */\n\n C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n })();\n\n return CryptoJS.SHA224;\n});\n\n/***/ }),\n\n/***/ 8921:\n/***/ (function(module, exports, __nested_webpack_require_332098__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_332098__(7042);\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_332098__(757));\n } else {}\n})(void 0, function (CryptoJS) {\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo; // Initialization and round constants tables\n\n var H = [];\n var K = []; // Compute constants\n\n (function () {\n function isPrime(n) {\n var sqrtN = Math.sqrt(n);\n\n for (var factor = 2; factor <= sqrtN; factor++) {\n if (!(n % factor)) {\n return false;\n }\n }\n\n return true;\n }\n\n function getFractionalBits(n) {\n return (n - (n | 0)) * 0x100000000 | 0;\n }\n\n var n = 2;\n var nPrime = 0;\n\n while (nPrime < 64) {\n if (isPrime(n)) {\n if (nPrime < 8) {\n H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n }\n\n K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n nPrime++;\n }\n\n n++;\n }\n })(); // Reusable object\n\n\n var W = [];\n /**\n * SHA-256 hash algorithm.\n */\n\n var SHA256 = C_algo.SHA256 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init(H.slice(0));\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var H = this._hash.words; // Working variables\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n var f = H[5];\n var g = H[6];\n var h = H[7]; // Computation\n\n for (var i = 0; i < 64; i++) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n var gamma0x = W[i - 15];\n var gamma0 = (gamma0x << 25 | gamma0x >>> 7) ^ (gamma0x << 14 | gamma0x >>> 18) ^ gamma0x >>> 3;\n var gamma1x = W[i - 2];\n var gamma1 = (gamma1x << 15 | gamma1x >>> 17) ^ (gamma1x << 13 | gamma1x >>> 19) ^ gamma1x >>> 10;\n W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n }\n\n var ch = e & f ^ ~e & g;\n var maj = a & b ^ a & c ^ b & c;\n var sigma0 = (a << 30 | a >>> 2) ^ (a << 19 | a >>> 13) ^ (a << 10 | a >>> 22);\n var sigma1 = (e << 26 | e >>> 6) ^ (e << 21 | e >>> 11) ^ (e << 7 | e >>> 25);\n var t1 = h + sigma1 + ch + K[i] + W[i];\n var t2 = sigma0 + maj;\n h = g;\n g = f;\n f = e;\n e = d + t1 | 0;\n d = c;\n c = b;\n b = a;\n a = t1 + t2 | 0;\n } // Intermediate hash value\n\n\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n H[4] = H[4] + e | 0;\n H[5] = H[5] + f | 0;\n H[6] = H[6] + g | 0;\n H[7] = H[7] + h | 0;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8; // Add padding\n\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4; // Hash final blocks\n\n this._process(); // Return final computed hash\n\n\n return this._hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA256('message');\n * var hash = CryptoJS.SHA256(wordArray);\n */\n\n C.SHA256 = Hasher._createHelper(SHA256);\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA256(message, key);\n */\n\n C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n })(Math);\n\n return CryptoJS.SHA256;\n});\n\n/***/ }),\n\n/***/ 8342:\n/***/ (function(module, exports, __nested_webpack_require_336772__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_336772__(7042);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_336772__(757), __nested_webpack_require_336772__(2601));\n } else {}\n})(void 0, function (CryptoJS) {\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var C_algo = C.algo; // Constants tables\n\n var RHO_OFFSETS = [];\n var PI_INDEXES = [];\n var ROUND_CONSTANTS = []; // Compute Constants\n\n (function () {\n // Compute rho offset constants\n var x = 1,\n y = 0;\n\n for (var t = 0; t < 24; t++) {\n RHO_OFFSETS[x + 5 * y] = (t + 1) * (t + 2) / 2 % 64;\n var newX = y % 5;\n var newY = (2 * x + 3 * y) % 5;\n x = newX;\n y = newY;\n } // Compute pi index constants\n\n\n for (var x = 0; x < 5; x++) {\n for (var y = 0; y < 5; y++) {\n PI_INDEXES[x + 5 * y] = y + (2 * x + 3 * y) % 5 * 5;\n }\n } // Compute round constants\n\n\n var LFSR = 0x01;\n\n for (var i = 0; i < 24; i++) {\n var roundConstantMsw = 0;\n var roundConstantLsw = 0;\n\n for (var j = 0; j < 7; j++) {\n if (LFSR & 0x01) {\n var bitPosition = (1 << j) - 1;\n\n if (bitPosition < 32) {\n roundConstantLsw ^= 1 << bitPosition;\n } else\n /* if (bitPosition >= 32) */\n {\n roundConstantMsw ^= 1 << bitPosition - 32;\n }\n } // Compute next LFSR\n\n\n if (LFSR & 0x80) {\n // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n LFSR = LFSR << 1 ^ 0x71;\n } else {\n LFSR <<= 1;\n }\n }\n\n ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n }\n })(); // Reusable objects for temporary values\n\n\n var T = [];\n\n (function () {\n for (var i = 0; i < 25; i++) {\n T[i] = X64Word.create();\n }\n })();\n /**\n * SHA-3 hash algorithm.\n */\n\n\n var SHA3 = C_algo.SHA3 = Hasher.extend({\n /**\n * Configuration options.\n *\n * @property {number} outputLength\n * The desired number of bits in the output hash.\n * Only values permitted are: 224, 256, 384, 512.\n * Default: 512\n */\n cfg: Hasher.cfg.extend({\n outputLength: 512\n }),\n _doReset: function _doReset() {\n var state = this._state = [];\n\n for (var i = 0; i < 25; i++) {\n state[i] = new X64Word.init();\n }\n\n this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcuts\n var state = this._state;\n var nBlockSizeLanes = this.blockSize / 2; // Absorb\n\n for (var i = 0; i < nBlockSizeLanes; i++) {\n // Shortcuts\n var M2i = M[offset + 2 * i];\n var M2i1 = M[offset + 2 * i + 1]; // Swap endian\n\n M2i = (M2i << 8 | M2i >>> 24) & 0x00ff00ff | (M2i << 24 | M2i >>> 8) & 0xff00ff00;\n M2i1 = (M2i1 << 8 | M2i1 >>> 24) & 0x00ff00ff | (M2i1 << 24 | M2i1 >>> 8) & 0xff00ff00; // Absorb message into state\n\n var lane = state[i];\n lane.high ^= M2i1;\n lane.low ^= M2i;\n } // Rounds\n\n\n for (var round = 0; round < 24; round++) {\n // Theta\n for (var x = 0; x < 5; x++) {\n // Mix column lanes\n var tMsw = 0,\n tLsw = 0;\n\n for (var y = 0; y < 5; y++) {\n var lane = state[x + 5 * y];\n tMsw ^= lane.high;\n tLsw ^= lane.low;\n } // Temporary values\n\n\n var Tx = T[x];\n Tx.high = tMsw;\n Tx.low = tLsw;\n }\n\n for (var x = 0; x < 5; x++) {\n // Shortcuts\n var Tx4 = T[(x + 4) % 5];\n var Tx1 = T[(x + 1) % 5];\n var Tx1Msw = Tx1.high;\n var Tx1Lsw = Tx1.low; // Mix surrounding columns\n\n var tMsw = Tx4.high ^ (Tx1Msw << 1 | Tx1Lsw >>> 31);\n var tLsw = Tx4.low ^ (Tx1Lsw << 1 | Tx1Msw >>> 31);\n\n for (var y = 0; y < 5; y++) {\n var lane = state[x + 5 * y];\n lane.high ^= tMsw;\n lane.low ^= tLsw;\n }\n } // Rho Pi\n\n\n for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n var tMsw;\n var tLsw; // Shortcuts\n\n var lane = state[laneIndex];\n var laneMsw = lane.high;\n var laneLsw = lane.low;\n var rhoOffset = RHO_OFFSETS[laneIndex]; // Rotate lanes\n\n if (rhoOffset < 32) {\n tMsw = laneMsw << rhoOffset | laneLsw >>> 32 - rhoOffset;\n tLsw = laneLsw << rhoOffset | laneMsw >>> 32 - rhoOffset;\n } else\n /* if (rhoOffset >= 32) */\n {\n tMsw = laneLsw << rhoOffset - 32 | laneMsw >>> 64 - rhoOffset;\n tLsw = laneMsw << rhoOffset - 32 | laneLsw >>> 64 - rhoOffset;\n } // Transpose lanes\n\n\n var TPiLane = T[PI_INDEXES[laneIndex]];\n TPiLane.high = tMsw;\n TPiLane.low = tLsw;\n } // Rho pi at x = y = 0\n\n\n var T0 = T[0];\n var state0 = state[0];\n T0.high = state0.high;\n T0.low = state0.low; // Chi\n\n for (var x = 0; x < 5; x++) {\n for (var y = 0; y < 5; y++) {\n // Shortcuts\n var laneIndex = x + 5 * y;\n var lane = state[laneIndex];\n var TLane = T[laneIndex];\n var Tx1Lane = T[(x + 1) % 5 + 5 * y];\n var Tx2Lane = T[(x + 2) % 5 + 5 * y]; // Mix rows\n\n lane.high = TLane.high ^ ~Tx1Lane.high & Tx2Lane.high;\n lane.low = TLane.low ^ ~Tx1Lane.low & Tx2Lane.low;\n }\n } // Iota\n\n\n var lane = state[0];\n var roundConstant = ROUND_CONSTANTS[round];\n lane.high ^= roundConstant.high;\n lane.low ^= roundConstant.low;\n }\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n var blockSizeBits = this.blockSize * 32; // Add padding\n\n dataWords[nBitsLeft >>> 5] |= 0x1 << 24 - nBitsLeft % 32;\n dataWords[(Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits >>> 5) - 1] |= 0x80;\n data.sigBytes = dataWords.length * 4; // Hash final blocks\n\n this._process(); // Shortcuts\n\n\n var state = this._state;\n var outputLengthBytes = this.cfg.outputLength / 8;\n var outputLengthLanes = outputLengthBytes / 8; // Squeeze\n\n var hashWords = [];\n\n for (var i = 0; i < outputLengthLanes; i++) {\n // Shortcuts\n var lane = state[i];\n var laneMsw = lane.high;\n var laneLsw = lane.low; // Swap endian\n\n laneMsw = (laneMsw << 8 | laneMsw >>> 24) & 0x00ff00ff | (laneMsw << 24 | laneMsw >>> 8) & 0xff00ff00;\n laneLsw = (laneLsw << 8 | laneLsw >>> 24) & 0x00ff00ff | (laneLsw << 24 | laneLsw >>> 8) & 0xff00ff00; // Squeeze state to retrieve hash\n\n hashWords.push(laneLsw);\n hashWords.push(laneMsw);\n } // Return final computed hash\n\n\n return new WordArray.init(hashWords, outputLengthBytes);\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n\n var state = clone._state = this._state.slice(0);\n\n for (var i = 0; i < 25; i++) {\n state[i] = state[i].clone();\n }\n\n return clone;\n }\n });\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA3('message');\n * var hash = CryptoJS.SHA3(wordArray);\n */\n\n C.SHA3 = Hasher._createHelper(SHA3);\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA3(message, key);\n */\n\n C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n })(Math);\n\n return CryptoJS.SHA3;\n});\n\n/***/ }),\n\n/***/ 8122:\n/***/ (function(module, exports, __nested_webpack_require_345531__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_345531__(757), __nested_webpack_require_345531__(2601), __nested_webpack_require_345531__(7991));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var X64WordArray = C_x64.WordArray;\n var C_algo = C.algo;\n var SHA512 = C_algo.SHA512;\n /**\n * SHA-384 hash algorithm.\n */\n\n var SHA384 = C_algo.SHA384 = SHA512.extend({\n _doReset: function _doReset() {\n this._hash = new X64WordArray.init([new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)]);\n },\n _doFinalize: function _doFinalize() {\n var hash = SHA512._doFinalize.call(this);\n\n hash.sigBytes -= 16;\n return hash;\n }\n });\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA384('message');\n * var hash = CryptoJS.SHA384(wordArray);\n */\n\n C.SHA384 = SHA512._createHelper(SHA384);\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA384(message, key);\n */\n\n C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n })();\n\n return CryptoJS.SHA384;\n});\n\n/***/ }),\n\n/***/ 7991:\n/***/ (function(module, exports, __nested_webpack_require_347581__) {\n\n\"use strict\";\n\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_347581__(757), __nested_webpack_require_347581__(2601));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Hasher = C_lib.Hasher;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var X64WordArray = C_x64.WordArray;\n var C_algo = C.algo;\n\n function X64Word_create() {\n return X64Word.create.apply(X64Word, arguments);\n } // Constants\n\n\n var K = [X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)]; // Reusable objects\n\n var W = [];\n\n (function () {\n for (var i = 0; i < 80; i++) {\n W[i] = X64Word_create();\n }\n })();\n /**\n * SHA-512 hash algorithm.\n */\n\n\n var SHA512 = C_algo.SHA512 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new X64WordArray.init([new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)]);\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcuts\n var H = this._hash.words;\n var H0 = H[0];\n var H1 = H[1];\n var H2 = H[2];\n var H3 = H[3];\n var H4 = H[4];\n var H5 = H[5];\n var H6 = H[6];\n var H7 = H[7];\n var H0h = H0.high;\n var H0l = H0.low;\n var H1h = H1.high;\n var H1l = H1.low;\n var H2h = H2.high;\n var H2l = H2.low;\n var H3h = H3.high;\n var H3l = H3.low;\n var H4h = H4.high;\n var H4l = H4.low;\n var H5h = H5.high;\n var H5l = H5.low;\n var H6h = H6.high;\n var H6l = H6.low;\n var H7h = H7.high;\n var H7l = H7.low; // Working variables\n\n var ah = H0h;\n var al = H0l;\n var bh = H1h;\n var bl = H1l;\n var ch = H2h;\n var cl = H2l;\n var dh = H3h;\n var dl = H3l;\n var eh = H4h;\n var el = H4l;\n var fh = H5h;\n var fl = H5l;\n var gh = H6h;\n var gl = H6l;\n var hh = H7h;\n var hl = H7l; // Rounds\n\n for (var i = 0; i < 80; i++) {\n var Wil;\n var Wih; // Shortcut\n\n var Wi = W[i]; // Extend message\n\n if (i < 16) {\n Wih = Wi.high = M[offset + i * 2] | 0;\n Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n } else {\n // Gamma0\n var gamma0x = W[i - 15];\n var gamma0xh = gamma0x.high;\n var gamma0xl = gamma0x.low;\n var gamma0h = (gamma0xh >>> 1 | gamma0xl << 31) ^ (gamma0xh >>> 8 | gamma0xl << 24) ^ gamma0xh >>> 7;\n var gamma0l = (gamma0xl >>> 1 | gamma0xh << 31) ^ (gamma0xl >>> 8 | gamma0xh << 24) ^ (gamma0xl >>> 7 | gamma0xh << 25); // Gamma1\n\n var gamma1x = W[i - 2];\n var gamma1xh = gamma1x.high;\n var gamma1xl = gamma1x.low;\n var gamma1h = (gamma1xh >>> 19 | gamma1xl << 13) ^ (gamma1xh << 3 | gamma1xl >>> 29) ^ gamma1xh >>> 6;\n var gamma1l = (gamma1xl >>> 19 | gamma1xh << 13) ^ (gamma1xl << 3 | gamma1xh >>> 29) ^ (gamma1xl >>> 6 | gamma1xh << 26); // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\n var Wi7 = W[i - 7];\n var Wi7h = Wi7.high;\n var Wi7l = Wi7.low;\n var Wi16 = W[i - 16];\n var Wi16h = Wi16.high;\n var Wi16l = Wi16.low;\n Wil = gamma0l + Wi7l;\n Wih = gamma0h + Wi7h + (Wil >>> 0 < gamma0l >>> 0 ? 1 : 0);\n Wil = Wil + gamma1l;\n Wih = Wih + gamma1h + (Wil >>> 0 < gamma1l >>> 0 ? 1 : 0);\n Wil = Wil + Wi16l;\n Wih = Wih + Wi16h + (Wil >>> 0 < Wi16l >>> 0 ? 1 : 0);\n Wi.high = Wih;\n Wi.low = Wil;\n }\n\n var chh = eh & fh ^ ~eh & gh;\n var chl = el & fl ^ ~el & gl;\n var majh = ah & bh ^ ah & ch ^ bh & ch;\n var majl = al & bl ^ al & cl ^ bl & cl;\n var sigma0h = (ah >>> 28 | al << 4) ^ (ah << 30 | al >>> 2) ^ (ah << 25 | al >>> 7);\n var sigma0l = (al >>> 28 | ah << 4) ^ (al << 30 | ah >>> 2) ^ (al << 25 | ah >>> 7);\n var sigma1h = (eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9);\n var sigma1l = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9); // t1 = h + sigma1 + ch + K[i] + W[i]\n\n var Ki = K[i];\n var Kih = Ki.high;\n var Kil = Ki.low;\n var t1l = hl + sigma1l;\n var t1h = hh + sigma1h + (t1l >>> 0 < hl >>> 0 ? 1 : 0);\n var t1l = t1l + chl;\n var t1h = t1h + chh + (t1l >>> 0 < chl >>> 0 ? 1 : 0);\n var t1l = t1l + Kil;\n var t1h = t1h + Kih + (t1l >>> 0 < Kil >>> 0 ? 1 : 0);\n var t1l = t1l + Wil;\n var t1h = t1h + Wih + (t1l >>> 0 < Wil >>> 0 ? 1 : 0); // t2 = sigma0 + maj\n\n var t2l = sigma0l + majl;\n var t2h = sigma0h + majh + (t2l >>> 0 < sigma0l >>> 0 ? 1 : 0); // Update working variables\n\n hh = gh;\n hl = gl;\n gh = fh;\n gl = fl;\n fh = eh;\n fl = el;\n el = dl + t1l | 0;\n eh = dh + t1h + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;\n dh = ch;\n dl = cl;\n ch = bh;\n cl = bl;\n bh = ah;\n bl = al;\n al = t1l + t2l | 0;\n ah = t1h + t2h + (al >>> 0 < t1l >>> 0 ? 1 : 0) | 0;\n } // Intermediate hash value\n\n\n H0l = H0.low = H0l + al;\n H0.high = H0h + ah + (H0l >>> 0 < al >>> 0 ? 1 : 0);\n H1l = H1.low = H1l + bl;\n H1.high = H1h + bh + (H1l >>> 0 < bl >>> 0 ? 1 : 0);\n H2l = H2.low = H2l + cl;\n H2.high = H2h + ch + (H2l >>> 0 < cl >>> 0 ? 1 : 0);\n H3l = H3.low = H3l + dl;\n H3.high = H3h + dh + (H3l >>> 0 < dl >>> 0 ? 1 : 0);\n H4l = H4.low = H4l + el;\n H4.high = H4h + eh + (H4l >>> 0 < el >>> 0 ? 1 : 0);\n H5l = H5.low = H5l + fl;\n H5.high = H5h + fh + (H5l >>> 0 < fl >>> 0 ? 1 : 0);\n H6l = H6.low = H6l + gl;\n H6.high = H6h + gh + (H6l >>> 0 < gl >>> 0 ? 1 : 0);\n H7l = H7.low = H7l + hl;\n H7.high = H7h + hh + (H7l >>> 0 < hl >>> 0 ? 1 : 0);\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8; // Add padding\n\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 128 >>> 10 << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 128 >>> 10 << 5) + 31] = nBitsTotal;\n data.sigBytes = dataWords.length * 4; // Hash final blocks\n\n this._process(); // Convert hash to 32-bit word array before returning\n\n\n var hash = this._hash.toX32(); // Return final computed hash\n\n\n return hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n },\n blockSize: 1024 / 32\n });\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA512('message');\n * var hash = CryptoJS.SHA512(wordArray);\n */\n\n C.SHA512 = Hasher._createHelper(SHA512);\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA512(message, key);\n */\n\n C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n })();\n\n return CryptoJS.SHA512;\n});\n\n/***/ }),\n\n/***/ 8437:\n/***/ (function(module, exports, __nested_webpack_require_359061__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_359061__(7042);\n\n;\n\n(function (root, factory, undef) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_359061__(757), __nested_webpack_require_359061__(7508), __nested_webpack_require_359061__(3440), __nested_webpack_require_359061__(3839), __nested_webpack_require_359061__(1582));\n } else {}\n})(void 0, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var BlockCipher = C_lib.BlockCipher;\n var C_algo = C.algo; // Permuted Choice 1 constants\n\n var PC1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4]; // Permuted Choice 2 constants\n\n var PC2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32]; // Cumulative bit shift constants\n\n var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; // SBOXes and round permutation constants\n\n var SBOX_P = [{\n 0x0: 0x808200,\n 0x10000000: 0x8000,\n 0x20000000: 0x808002,\n 0x30000000: 0x2,\n 0x40000000: 0x200,\n 0x50000000: 0x808202,\n 0x60000000: 0x800202,\n 0x70000000: 0x800000,\n 0x80000000: 0x202,\n 0x90000000: 0x800200,\n 0xa0000000: 0x8200,\n 0xb0000000: 0x808000,\n 0xc0000000: 0x8002,\n 0xd0000000: 0x800002,\n 0xe0000000: 0x0,\n 0xf0000000: 0x8202,\n 0x8000000: 0x0,\n 0x18000000: 0x808202,\n 0x28000000: 0x8202,\n 0x38000000: 0x8000,\n 0x48000000: 0x808200,\n 0x58000000: 0x200,\n 0x68000000: 0x808002,\n 0x78000000: 0x2,\n 0x88000000: 0x800200,\n 0x98000000: 0x8200,\n 0xa8000000: 0x808000,\n 0xb8000000: 0x800202,\n 0xc8000000: 0x800002,\n 0xd8000000: 0x8002,\n 0xe8000000: 0x202,\n 0xf8000000: 0x800000,\n 0x1: 0x8000,\n 0x10000001: 0x2,\n 0x20000001: 0x808200,\n 0x30000001: 0x800000,\n 0x40000001: 0x808002,\n 0x50000001: 0x8200,\n 0x60000001: 0x200,\n 0x70000001: 0x800202,\n 0x80000001: 0x808202,\n 0x90000001: 0x808000,\n 0xa0000001: 0x800002,\n 0xb0000001: 0x8202,\n 0xc0000001: 0x202,\n 0xd0000001: 0x800200,\n 0xe0000001: 0x8002,\n 0xf0000001: 0x0,\n 0x8000001: 0x808202,\n 0x18000001: 0x808000,\n 0x28000001: 0x800000,\n 0x38000001: 0x200,\n 0x48000001: 0x8000,\n 0x58000001: 0x800002,\n 0x68000001: 0x2,\n 0x78000001: 0x8202,\n 0x88000001: 0x8002,\n 0x98000001: 0x800202,\n 0xa8000001: 0x202,\n 0xb8000001: 0x808200,\n 0xc8000001: 0x800200,\n 0xd8000001: 0x0,\n 0xe8000001: 0x8200,\n 0xf8000001: 0x808002\n }, {\n 0x0: 0x40084010,\n 0x1000000: 0x4000,\n 0x2000000: 0x80000,\n 0x3000000: 0x40080010,\n 0x4000000: 0x40000010,\n 0x5000000: 0x40084000,\n 0x6000000: 0x40004000,\n 0x7000000: 0x10,\n 0x8000000: 0x84000,\n 0x9000000: 0x40004010,\n 0xa000000: 0x40000000,\n 0xb000000: 0x84010,\n 0xc000000: 0x80010,\n 0xd000000: 0x0,\n 0xe000000: 0x4010,\n 0xf000000: 0x40080000,\n 0x800000: 0x40004000,\n 0x1800000: 0x84010,\n 0x2800000: 0x10,\n 0x3800000: 0x40004010,\n 0x4800000: 0x40084010,\n 0x5800000: 0x40000000,\n 0x6800000: 0x80000,\n 0x7800000: 0x40080010,\n 0x8800000: 0x80010,\n 0x9800000: 0x0,\n 0xa800000: 0x4000,\n 0xb800000: 0x40080000,\n 0xc800000: 0x40000010,\n 0xd800000: 0x84000,\n 0xe800000: 0x40084000,\n 0xf800000: 0x4010,\n 0x10000000: 0x0,\n 0x11000000: 0x40080010,\n 0x12000000: 0x40004010,\n 0x13000000: 0x40084000,\n 0x14000000: 0x40080000,\n 0x15000000: 0x10,\n 0x16000000: 0x84010,\n 0x17000000: 0x4000,\n 0x18000000: 0x4010,\n 0x19000000: 0x80000,\n 0x1a000000: 0x80010,\n 0x1b000000: 0x40000010,\n 0x1c000000: 0x84000,\n 0x1d000000: 0x40004000,\n 0x1e000000: 0x40000000,\n 0x1f000000: 0x40084010,\n 0x10800000: 0x84010,\n 0x11800000: 0x80000,\n 0x12800000: 0x40080000,\n 0x13800000: 0x4000,\n 0x14800000: 0x40004000,\n 0x15800000: 0x40084010,\n 0x16800000: 0x10,\n 0x17800000: 0x40000000,\n 0x18800000: 0x40084000,\n 0x19800000: 0x40000010,\n 0x1a800000: 0x40004010,\n 0x1b800000: 0x80010,\n 0x1c800000: 0x0,\n 0x1d800000: 0x4010,\n 0x1e800000: 0x40080010,\n 0x1f800000: 0x84000\n }, {\n 0x0: 0x104,\n 0x100000: 0x0,\n 0x200000: 0x4000100,\n 0x300000: 0x10104,\n 0x400000: 0x10004,\n 0x500000: 0x4000004,\n 0x600000: 0x4010104,\n 0x700000: 0x4010000,\n 0x800000: 0x4000000,\n 0x900000: 0x4010100,\n 0xa00000: 0x10100,\n 0xb00000: 0x4010004,\n 0xc00000: 0x4000104,\n 0xd00000: 0x10000,\n 0xe00000: 0x4,\n 0xf00000: 0x100,\n 0x80000: 0x4010100,\n 0x180000: 0x4010004,\n 0x280000: 0x0,\n 0x380000: 0x4000100,\n 0x480000: 0x4000004,\n 0x580000: 0x10000,\n 0x680000: 0x10004,\n 0x780000: 0x104,\n 0x880000: 0x4,\n 0x980000: 0x100,\n 0xa80000: 0x4010000,\n 0xb80000: 0x10104,\n 0xc80000: 0x10100,\n 0xd80000: 0x4000104,\n 0xe80000: 0x4010104,\n 0xf80000: 0x4000000,\n 0x1000000: 0x4010100,\n 0x1100000: 0x10004,\n 0x1200000: 0x10000,\n 0x1300000: 0x4000100,\n 0x1400000: 0x100,\n 0x1500000: 0x4010104,\n 0x1600000: 0x4000004,\n 0x1700000: 0x0,\n 0x1800000: 0x4000104,\n 0x1900000: 0x4000000,\n 0x1a00000: 0x4,\n 0x1b00000: 0x10100,\n 0x1c00000: 0x4010000,\n 0x1d00000: 0x104,\n 0x1e00000: 0x10104,\n 0x1f00000: 0x4010004,\n 0x1080000: 0x4000000,\n 0x1180000: 0x104,\n 0x1280000: 0x4010100,\n 0x1380000: 0x0,\n 0x1480000: 0x10004,\n 0x1580000: 0x4000100,\n 0x1680000: 0x100,\n 0x1780000: 0x4010004,\n 0x1880000: 0x10000,\n 0x1980000: 0x4010104,\n 0x1a80000: 0x10104,\n 0x1b80000: 0x4000004,\n 0x1c80000: 0x4000104,\n 0x1d80000: 0x4010000,\n 0x1e80000: 0x4,\n 0x1f80000: 0x10100\n }, {\n 0x0: 0x80401000,\n 0x10000: 0x80001040,\n 0x20000: 0x401040,\n 0x30000: 0x80400000,\n 0x40000: 0x0,\n 0x50000: 0x401000,\n 0x60000: 0x80000040,\n 0x70000: 0x400040,\n 0x80000: 0x80000000,\n 0x90000: 0x400000,\n 0xa0000: 0x40,\n 0xb0000: 0x80001000,\n 0xc0000: 0x80400040,\n 0xd0000: 0x1040,\n 0xe0000: 0x1000,\n 0xf0000: 0x80401040,\n 0x8000: 0x80001040,\n 0x18000: 0x40,\n 0x28000: 0x80400040,\n 0x38000: 0x80001000,\n 0x48000: 0x401000,\n 0x58000: 0x80401040,\n 0x68000: 0x0,\n 0x78000: 0x80400000,\n 0x88000: 0x1000,\n 0x98000: 0x80401000,\n 0xa8000: 0x400000,\n 0xb8000: 0x1040,\n 0xc8000: 0x80000000,\n 0xd8000: 0x400040,\n 0xe8000: 0x401040,\n 0xf8000: 0x80000040,\n 0x100000: 0x400040,\n 0x110000: 0x401000,\n 0x120000: 0x80000040,\n 0x130000: 0x0,\n 0x140000: 0x1040,\n 0x150000: 0x80400040,\n 0x160000: 0x80401000,\n 0x170000: 0x80001040,\n 0x180000: 0x80401040,\n 0x190000: 0x80000000,\n 0x1a0000: 0x80400000,\n 0x1b0000: 0x401040,\n 0x1c0000: 0x80001000,\n 0x1d0000: 0x400000,\n 0x1e0000: 0x40,\n 0x1f0000: 0x1000,\n 0x108000: 0x80400000,\n 0x118000: 0x80401040,\n 0x128000: 0x0,\n 0x138000: 0x401000,\n 0x148000: 0x400040,\n 0x158000: 0x80000000,\n 0x168000: 0x80001040,\n 0x178000: 0x40,\n 0x188000: 0x80000040,\n 0x198000: 0x1000,\n 0x1a8000: 0x80001000,\n 0x1b8000: 0x80400040,\n 0x1c8000: 0x1040,\n 0x1d8000: 0x80401000,\n 0x1e8000: 0x400000,\n 0x1f8000: 0x401040\n }, {\n 0x0: 0x80,\n 0x1000: 0x1040000,\n 0x2000: 0x40000,\n 0x3000: 0x20000000,\n 0x4000: 0x20040080,\n 0x5000: 0x1000080,\n 0x6000: 0x21000080,\n 0x7000: 0x40080,\n 0x8000: 0x1000000,\n 0x9000: 0x20040000,\n 0xa000: 0x20000080,\n 0xb000: 0x21040080,\n 0xc000: 0x21040000,\n 0xd000: 0x0,\n 0xe000: 0x1040080,\n 0xf000: 0x21000000,\n 0x800: 0x1040080,\n 0x1800: 0x21000080,\n 0x2800: 0x80,\n 0x3800: 0x1040000,\n 0x4800: 0x40000,\n 0x5800: 0x20040080,\n 0x6800: 0x21040000,\n 0x7800: 0x20000000,\n 0x8800: 0x20040000,\n 0x9800: 0x0,\n 0xa800: 0x21040080,\n 0xb800: 0x1000080,\n 0xc800: 0x20000080,\n 0xd800: 0x21000000,\n 0xe800: 0x1000000,\n 0xf800: 0x40080,\n 0x10000: 0x40000,\n 0x11000: 0x80,\n 0x12000: 0x20000000,\n 0x13000: 0x21000080,\n 0x14000: 0x1000080,\n 0x15000: 0x21040000,\n 0x16000: 0x20040080,\n 0x17000: 0x1000000,\n 0x18000: 0x21040080,\n 0x19000: 0x21000000,\n 0x1a000: 0x1040000,\n 0x1b000: 0x20040000,\n 0x1c000: 0x40080,\n 0x1d000: 0x20000080,\n 0x1e000: 0x0,\n 0x1f000: 0x1040080,\n 0x10800: 0x21000080,\n 0x11800: 0x1000000,\n 0x12800: 0x1040000,\n 0x13800: 0x20040080,\n 0x14800: 0x20000000,\n 0x15800: 0x1040080,\n 0x16800: 0x80,\n 0x17800: 0x21040000,\n 0x18800: 0x40080,\n 0x19800: 0x21040080,\n 0x1a800: 0x0,\n 0x1b800: 0x21000000,\n 0x1c800: 0x1000080,\n 0x1d800: 0x40000,\n 0x1e800: 0x20040000,\n 0x1f800: 0x20000080\n }, {\n 0x0: 0x10000008,\n 0x100: 0x2000,\n 0x200: 0x10200000,\n 0x300: 0x10202008,\n 0x400: 0x10002000,\n 0x500: 0x200000,\n 0x600: 0x200008,\n 0x700: 0x10000000,\n 0x800: 0x0,\n 0x900: 0x10002008,\n 0xa00: 0x202000,\n 0xb00: 0x8,\n 0xc00: 0x10200008,\n 0xd00: 0x202008,\n 0xe00: 0x2008,\n 0xf00: 0x10202000,\n 0x80: 0x10200000,\n 0x180: 0x10202008,\n 0x280: 0x8,\n 0x380: 0x200000,\n 0x480: 0x202008,\n 0x580: 0x10000008,\n 0x680: 0x10002000,\n 0x780: 0x2008,\n 0x880: 0x200008,\n 0x980: 0x2000,\n 0xa80: 0x10002008,\n 0xb80: 0x10200008,\n 0xc80: 0x0,\n 0xd80: 0x10202000,\n 0xe80: 0x202000,\n 0xf80: 0x10000000,\n 0x1000: 0x10002000,\n 0x1100: 0x10200008,\n 0x1200: 0x10202008,\n 0x1300: 0x2008,\n 0x1400: 0x200000,\n 0x1500: 0x10000000,\n 0x1600: 0x10000008,\n 0x1700: 0x202000,\n 0x1800: 0x202008,\n 0x1900: 0x0,\n 0x1a00: 0x8,\n 0x1b00: 0x10200000,\n 0x1c00: 0x2000,\n 0x1d00: 0x10002008,\n 0x1e00: 0x10202000,\n 0x1f00: 0x200008,\n 0x1080: 0x8,\n 0x1180: 0x202000,\n 0x1280: 0x200000,\n 0x1380: 0x10000008,\n 0x1480: 0x10002000,\n 0x1580: 0x2008,\n 0x1680: 0x10202008,\n 0x1780: 0x10200000,\n 0x1880: 0x10202000,\n 0x1980: 0x10200008,\n 0x1a80: 0x2000,\n 0x1b80: 0x202008,\n 0x1c80: 0x200008,\n 0x1d80: 0x0,\n 0x1e80: 0x10000000,\n 0x1f80: 0x10002008\n }, {\n 0x0: 0x100000,\n 0x10: 0x2000401,\n 0x20: 0x400,\n 0x30: 0x100401,\n 0x40: 0x2100401,\n 0x50: 0x0,\n 0x60: 0x1,\n 0x70: 0x2100001,\n 0x80: 0x2000400,\n 0x90: 0x100001,\n 0xa0: 0x2000001,\n 0xb0: 0x2100400,\n 0xc0: 0x2100000,\n 0xd0: 0x401,\n 0xe0: 0x100400,\n 0xf0: 0x2000000,\n 0x8: 0x2100001,\n 0x18: 0x0,\n 0x28: 0x2000401,\n 0x38: 0x2100400,\n 0x48: 0x100000,\n 0x58: 0x2000001,\n 0x68: 0x2000000,\n 0x78: 0x401,\n 0x88: 0x100401,\n 0x98: 0x2000400,\n 0xa8: 0x2100000,\n 0xb8: 0x100001,\n 0xc8: 0x400,\n 0xd8: 0x2100401,\n 0xe8: 0x1,\n 0xf8: 0x100400,\n 0x100: 0x2000000,\n 0x110: 0x100000,\n 0x120: 0x2000401,\n 0x130: 0x2100001,\n 0x140: 0x100001,\n 0x150: 0x2000400,\n 0x160: 0x2100400,\n 0x170: 0x100401,\n 0x180: 0x401,\n 0x190: 0x2100401,\n 0x1a0: 0x100400,\n 0x1b0: 0x1,\n 0x1c0: 0x0,\n 0x1d0: 0x2100000,\n 0x1e0: 0x2000001,\n 0x1f0: 0x400,\n 0x108: 0x100400,\n 0x118: 0x2000401,\n 0x128: 0x2100001,\n 0x138: 0x1,\n 0x148: 0x2000000,\n 0x158: 0x100000,\n 0x168: 0x401,\n 0x178: 0x2100400,\n 0x188: 0x2000001,\n 0x198: 0x2100000,\n 0x1a8: 0x0,\n 0x1b8: 0x2100401,\n 0x1c8: 0x100401,\n 0x1d8: 0x400,\n 0x1e8: 0x2000400,\n 0x1f8: 0x100001\n }, {\n 0x0: 0x8000820,\n 0x1: 0x20000,\n 0x2: 0x8000000,\n 0x3: 0x20,\n 0x4: 0x20020,\n 0x5: 0x8020820,\n 0x6: 0x8020800,\n 0x7: 0x800,\n 0x8: 0x8020000,\n 0x9: 0x8000800,\n 0xa: 0x20800,\n 0xb: 0x8020020,\n 0xc: 0x820,\n 0xd: 0x0,\n 0xe: 0x8000020,\n 0xf: 0x20820,\n 0x80000000: 0x800,\n 0x80000001: 0x8020820,\n 0x80000002: 0x8000820,\n 0x80000003: 0x8000000,\n 0x80000004: 0x8020000,\n 0x80000005: 0x20800,\n 0x80000006: 0x20820,\n 0x80000007: 0x20,\n 0x80000008: 0x8000020,\n 0x80000009: 0x820,\n 0x8000000a: 0x20020,\n 0x8000000b: 0x8020800,\n 0x8000000c: 0x0,\n 0x8000000d: 0x8020020,\n 0x8000000e: 0x8000800,\n 0x8000000f: 0x20000,\n 0x10: 0x20820,\n 0x11: 0x8020800,\n 0x12: 0x20,\n 0x13: 0x800,\n 0x14: 0x8000800,\n 0x15: 0x8000020,\n 0x16: 0x8020020,\n 0x17: 0x20000,\n 0x18: 0x0,\n 0x19: 0x20020,\n 0x1a: 0x8020000,\n 0x1b: 0x8000820,\n 0x1c: 0x8020820,\n 0x1d: 0x20800,\n 0x1e: 0x820,\n 0x1f: 0x8000000,\n 0x80000010: 0x20000,\n 0x80000011: 0x800,\n 0x80000012: 0x8020020,\n 0x80000013: 0x20820,\n 0x80000014: 0x20,\n 0x80000015: 0x8020000,\n 0x80000016: 0x8000000,\n 0x80000017: 0x8000820,\n 0x80000018: 0x8020820,\n 0x80000019: 0x8000020,\n 0x8000001a: 0x8000800,\n 0x8000001b: 0x0,\n 0x8000001c: 0x20800,\n 0x8000001d: 0x820,\n 0x8000001e: 0x20020,\n 0x8000001f: 0x8020800\n }]; // Masks that select the SBOX input\n\n var SBOX_MASK = [0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f];\n /**\n * DES block cipher algorithm.\n */\n\n var DES = C_algo.DES = BlockCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words; // Select 56 bits according to PC1\n\n var keyBits = [];\n\n for (var i = 0; i < 56; i++) {\n var keyBitPos = PC1[i] - 1;\n keyBits[i] = keyWords[keyBitPos >>> 5] >>> 31 - keyBitPos % 32 & 1;\n } // Assemble 16 subkeys\n\n\n var subKeys = this._subKeys = [];\n\n for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n // Create subkey\n var subKey = subKeys[nSubKey] = []; // Shortcut\n\n var bitShift = BIT_SHIFTS[nSubKey]; // Select 48 bits according to PC2\n\n for (var i = 0; i < 24; i++) {\n // Select from the left 28 key bits\n subKey[i / 6 | 0] |= keyBits[(PC2[i] - 1 + bitShift) % 28] << 31 - i % 6; // Select from the right 28 key bits\n\n subKey[4 + (i / 6 | 0)] |= keyBits[28 + (PC2[i + 24] - 1 + bitShift) % 28] << 31 - i % 6;\n } // Since each subkey is applied to an expanded 32-bit input,\n // the subkey can be broken into 8 values scaled to 32-bits,\n // which allows the key to be used without expansion\n\n\n subKey[0] = subKey[0] << 1 | subKey[0] >>> 31;\n\n for (var i = 1; i < 7; i++) {\n subKey[i] = subKey[i] >>> (i - 1) * 4 + 3;\n }\n\n subKey[7] = subKey[7] << 5 | subKey[7] >>> 27;\n } // Compute inverse subkeys\n\n\n var invSubKeys = this._invSubKeys = [];\n\n for (var i = 0; i < 16; i++) {\n invSubKeys[i] = subKeys[15 - i];\n }\n },\n encryptBlock: function encryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._subKeys);\n },\n decryptBlock: function decryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._invSubKeys);\n },\n _doCryptBlock: function _doCryptBlock(M, offset, subKeys) {\n // Get input\n this._lBlock = M[offset];\n this._rBlock = M[offset + 1]; // Initial permutation\n\n exchangeLR.call(this, 4, 0x0f0f0f0f);\n exchangeLR.call(this, 16, 0x0000ffff);\n exchangeRL.call(this, 2, 0x33333333);\n exchangeRL.call(this, 8, 0x00ff00ff);\n exchangeLR.call(this, 1, 0x55555555); // Rounds\n\n for (var round = 0; round < 16; round++) {\n // Shortcuts\n var subKey = subKeys[round];\n var lBlock = this._lBlock;\n var rBlock = this._rBlock; // Feistel function\n\n var f = 0;\n\n for (var i = 0; i < 8; i++) {\n f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n }\n\n this._lBlock = rBlock;\n this._rBlock = lBlock ^ f;\n } // Undo swap from last round\n\n\n var t = this._lBlock;\n this._lBlock = this._rBlock;\n this._rBlock = t; // Final permutation\n\n exchangeLR.call(this, 1, 0x55555555);\n exchangeRL.call(this, 8, 0x00ff00ff);\n exchangeRL.call(this, 2, 0x33333333);\n exchangeLR.call(this, 16, 0x0000ffff);\n exchangeLR.call(this, 4, 0x0f0f0f0f); // Set output\n\n M[offset] = this._lBlock;\n M[offset + 1] = this._rBlock;\n },\n keySize: 64 / 32,\n ivSize: 64 / 32,\n blockSize: 64 / 32\n }); // Swap bits across the left and right words\n\n function exchangeLR(offset, mask) {\n var t = (this._lBlock >>> offset ^ this._rBlock) & mask;\n this._rBlock ^= t;\n this._lBlock ^= t << offset;\n }\n\n function exchangeRL(offset, mask) {\n var t = (this._rBlock >>> offset ^ this._lBlock) & mask;\n this._lBlock ^= t;\n this._rBlock ^= t << offset;\n }\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n */\n\n\n C.DES = BlockCipher._createHelper(DES);\n /**\n * Triple-DES block cipher algorithm.\n */\n\n var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n _doReset: function _doReset() {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words; // Make sure the key length is valid (64, 128 or >= 192 bit)\n\n if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n } // Extend the key according to the keying options defined in 3DES standard\n\n\n var key1 = keyWords.slice(0, 2);\n var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6); // Create DES instances\n\n this._des1 = DES.createEncryptor(WordArray.create(key1));\n this._des2 = DES.createEncryptor(WordArray.create(key2));\n this._des3 = DES.createEncryptor(WordArray.create(key3));\n },\n encryptBlock: function encryptBlock(M, offset) {\n this._des1.encryptBlock(M, offset);\n\n this._des2.decryptBlock(M, offset);\n\n this._des3.encryptBlock(M, offset);\n },\n decryptBlock: function decryptBlock(M, offset) {\n this._des3.decryptBlock(M, offset);\n\n this._des2.encryptBlock(M, offset);\n\n this._des1.decryptBlock(M, offset);\n },\n keySize: 192 / 32,\n ivSize: 64 / 32,\n blockSize: 64 / 32\n });\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n */\n\n C.TripleDES = BlockCipher._createHelper(TripleDES);\n })();\n\n return CryptoJS.TripleDES;\n});\n\n/***/ }),\n\n/***/ 2601:\n/***/ (function(module, exports, __nested_webpack_require_379187__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_379187__(7042);\n\n;\n\n(function (root, factory) {\n if (true) {\n // CommonJS\n module.exports = exports = factory(__nested_webpack_require_379187__(757));\n } else {}\n})(void 0, function (CryptoJS) {\n (function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var X32WordArray = C_lib.WordArray;\n /**\n * x64 namespace.\n */\n\n var C_x64 = C.x64 = {};\n /**\n * A 64-bit word.\n */\n\n var X64Word = C_x64.Word = Base.extend({\n /**\n * Initializes a newly created 64-bit word.\n *\n * @param {number} high The high 32 bits.\n * @param {number} low The low 32 bits.\n *\n * @example\n *\n * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n */\n init: function init(high, low) {\n this.high = high;\n this.low = low;\n }\n /**\n * Bitwise NOTs this word.\n *\n * @return {X64Word} A new x64-Word object after negating.\n *\n * @example\n *\n * var negated = x64Word.not();\n */\n // not: function () {\n // var high = ~this.high;\n // var low = ~this.low;\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise ANDs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to AND with this word.\n *\n * @return {X64Word} A new x64-Word object after ANDing.\n *\n * @example\n *\n * var anded = x64Word.and(anotherX64Word);\n */\n // and: function (word) {\n // var high = this.high & word.high;\n // var low = this.low & word.low;\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise ORs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to OR with this word.\n *\n * @return {X64Word} A new x64-Word object after ORing.\n *\n * @example\n *\n * var ored = x64Word.or(anotherX64Word);\n */\n // or: function (word) {\n // var high = this.high | word.high;\n // var low = this.low | word.low;\n // return X64Word.create(high, low);\n // },\n\n /**\n * Bitwise XORs this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to XOR with this word.\n *\n * @return {X64Word} A new x64-Word object after XORing.\n *\n * @example\n *\n * var xored = x64Word.xor(anotherX64Word);\n */\n // xor: function (word) {\n // var high = this.high ^ word.high;\n // var low = this.low ^ word.low;\n // return X64Word.create(high, low);\n // },\n\n /**\n * Shifts this word n bits to the left.\n *\n * @param {number} n The number of bits to shift.\n *\n * @return {X64Word} A new x64-Word object after shifting.\n *\n * @example\n *\n * var shifted = x64Word.shiftL(25);\n */\n // shiftL: function (n) {\n // if (n < 32) {\n // var high = (this.high << n) | (this.low >>> (32 - n));\n // var low = this.low << n;\n // } else {\n // var high = this.low << (n - 32);\n // var low = 0;\n // }\n // return X64Word.create(high, low);\n // },\n\n /**\n * Shifts this word n bits to the right.\n *\n * @param {number} n The number of bits to shift.\n *\n * @return {X64Word} A new x64-Word object after shifting.\n *\n * @example\n *\n * var shifted = x64Word.shiftR(7);\n */\n // shiftR: function (n) {\n // if (n < 32) {\n // var low = (this.low >>> n) | (this.high << (32 - n));\n // var high = this.high >>> n;\n // } else {\n // var low = this.high >>> (n - 32);\n // var high = 0;\n // }\n // return X64Word.create(high, low);\n // },\n\n /**\n * Rotates this word n bits to the left.\n *\n * @param {number} n The number of bits to rotate.\n *\n * @return {X64Word} A new x64-Word object after rotating.\n *\n * @example\n *\n * var rotated = x64Word.rotL(25);\n */\n // rotL: function (n) {\n // return this.shiftL(n).or(this.shiftR(64 - n));\n // },\n\n /**\n * Rotates this word n bits to the right.\n *\n * @param {number} n The number of bits to rotate.\n *\n * @return {X64Word} A new x64-Word object after rotating.\n *\n * @example\n *\n * var rotated = x64Word.rotR(7);\n */\n // rotR: function (n) {\n // return this.shiftR(n).or(this.shiftL(64 - n));\n // },\n\n /**\n * Adds this word with the passed word.\n *\n * @param {X64Word} word The x64-Word to add with this word.\n *\n * @return {X64Word} A new x64-Word object after adding.\n *\n * @example\n *\n * var added = x64Word.add(anotherX64Word);\n */\n // add: function (word) {\n // var low = (this.low + word.low) | 0;\n // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n // var high = (this.high + word.high + carry) | 0;\n // return X64Word.create(high, low);\n // }\n\n });\n /**\n * An array of 64-bit words.\n *\n * @property {Array} words The array of CryptoJS.x64.Word objects.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\n\n var X64WordArray = C_x64.WordArray = Base.extend({\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.x64.WordArray.create();\n *\n * var wordArray = CryptoJS.x64.WordArray.create([\n * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n * ]);\n *\n * var wordArray = CryptoJS.x64.WordArray.create([\n * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n * ], 10);\n */\n init: function init(words, sigBytes) {\n words = this.words = words || [];\n\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 8;\n }\n },\n\n /**\n * Converts this 64-bit word array to a 32-bit word array.\n *\n * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n *\n * @example\n *\n * var x32WordArray = x64WordArray.toX32();\n */\n toX32: function toX32() {\n // Shortcuts\n var x64Words = this.words;\n var x64WordsLength = x64Words.length; // Convert\n\n var x32Words = [];\n\n for (var i = 0; i < x64WordsLength; i++) {\n var x64Word = x64Words[i];\n x32Words.push(x64Word.high);\n x32Words.push(x64Word.low);\n }\n\n return X32WordArray.create(x32Words, this.sigBytes);\n },\n\n /**\n * Creates a copy of this word array.\n *\n * @return {X64WordArray} The clone.\n *\n * @example\n *\n * var clone = x64WordArray.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this); // Clone \"words\" array\n\n var words = clone.words = this.words.slice(0); // Clone each X64Word object\n\n var wordsLength = words.length;\n\n for (var i = 0; i < wordsLength; i++) {\n words[i] = words[i].clone();\n }\n\n return clone;\n }\n });\n })();\n\n return CryptoJS;\n});\n\n/***/ }),\n\n/***/ 9811:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_387094__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_387094__(2443);\n\n__nested_webpack_require_387094__(3680);\n\n__nested_webpack_require_387094__(3706);\n\n__nested_webpack_require_387094__(2703);\n\n__nested_webpack_require_387094__(489);\n\n__nested_webpack_require_387094__(4747);\n\n__nested_webpack_require_387094__(8309);\n\n__nested_webpack_require_387094__(8674);\n\n__nested_webpack_require_387094__(1038);\n\n__nested_webpack_require_387094__(4916);\n\n__nested_webpack_require_387094__(4723);\n\n__nested_webpack_require_387094__(2165);\n\n__nested_webpack_require_387094__(6992);\n\n__nested_webpack_require_387094__(1539);\n\n__nested_webpack_require_387094__(8783);\n\n__nested_webpack_require_387094__(3948);\n\n__nested_webpack_require_387094__(2526);\n\n__nested_webpack_require_387094__(1817);\n\n__nested_webpack_require_387094__(7042);\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = \"function\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \"@@iterator\", asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\", toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \"\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = \"suspendedStart\"; return function (method, arg) { if (\"executing\" === state) throw new Error(\"Generator is already running\"); if (\"completed\" === state) { if (\"throw\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) { if (\"suspendedStart\" === state) throw state = \"completed\", context.arg; context.dispatchException(context.arg); } else \"return\" === context.method && context.abrupt(\"return\", context.arg); state = \"executing\"; var record = tryCatch(innerFn, self, context); if (\"normal\" === record.type) { if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: \"normal\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \"throw\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\"next\", \"throw\", \"return\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\"throw\" !== record.type) { var result = record.arg, value = result.value; return value && \"object\" == typeof value && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\"next\", value, resolve, reject); }, function (err) { invoke(\"throw\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\"throw\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, \"throw\" === context.method) { if (delegate.iterator.return && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel; context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \"normal\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \"root\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\"function\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) { var ctor = \"function\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \"toString\", function () { return \"[object Generator]\"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\"throw\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\"root\" === entry.tryLoc) return handle(\"end\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \"catchLoc\"), hasFinally = hasOwn.call(entry, \"finallyLoc\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\"try statement without catch or finally\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\"throw\" === record.type) throw record.arg; return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\"throw\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\n\nvar INITIAL_STATE = 1;\nvar FAIL_STATE = 0;\n/**\n * A StateMachine represents a deterministic finite automaton.\n * It can perform matches over a sequence of values, similar to a regular expression.\n */\n\nvar StateMachine = /*#__PURE__*/function () {\n function StateMachine(dfa) {\n this.stateTable = dfa.stateTable;\n this.accepting = dfa.accepting;\n this.tags = dfa.tags;\n }\n /**\n * Returns an iterable object that yields pattern matches over the input sequence.\n * Matches are of the form [startIndex, endIndex, tags].\n */\n\n\n var _proto = StateMachine.prototype;\n\n _proto.match = function match(str) {\n var _ref;\n\n var self = this;\n return _ref = {}, _ref[Symbol.iterator] = /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var state, startRun, lastAccepting, lastState, p, c;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n state = INITIAL_STATE;\n startRun = null;\n lastAccepting = null;\n lastState = null;\n p = 0;\n\n case 5:\n if (!(p < str.length)) {\n _context.next = 21;\n break;\n }\n\n c = str[p];\n lastState = state;\n state = self.stateTable[state][c];\n\n if (!(state === FAIL_STATE)) {\n _context.next = 15;\n break;\n }\n\n if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) {\n _context.next = 13;\n break;\n }\n\n _context.next = 13;\n return [startRun, lastAccepting, self.tags[lastState]];\n\n case 13:\n // reset the state as if we started over from the initial state\n state = self.stateTable[INITIAL_STATE][c];\n startRun = null;\n\n case 15:\n // start a run if not in the failure state\n if (state !== FAIL_STATE && startRun == null) {\n startRun = p;\n } // if accepting, mark the potential match end\n\n\n if (self.accepting[state]) {\n lastAccepting = p;\n } // reset the state to the initial state if we get into the failure state\n\n\n if (state === FAIL_STATE) {\n state = INITIAL_STATE;\n }\n\n case 18:\n p++;\n _context.next = 5;\n break;\n\n case 21:\n if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) {\n _context.next = 24;\n break;\n }\n\n _context.next = 24;\n return [startRun, lastAccepting, self.tags[state]];\n\n case 24:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }), _ref;\n }\n /**\n * For each match over the input sequence, action functions matching\n * the tag definitions in the input pattern are called with the startIndex,\n * endIndex, and sub-match sequence.\n */\n ;\n\n _proto.apply = function apply(str, actions) {\n for (var _iterator = _createForOfIteratorHelperLoose(this.match(str)), _step; !(_step = _iterator()).done;) {\n var _step$value = _step.value,\n start = _step$value[0],\n end = _step$value[1],\n tags = _step$value[2];\n\n for (var _iterator2 = _createForOfIteratorHelperLoose(tags), _step2; !(_step2 = _iterator2()).done;) {\n var tag = _step2.value;\n\n if (typeof actions[tag] === 'function') {\n actions[tag](start, end, str.slice(start, end + 1));\n }\n }\n }\n };\n\n return StateMachine;\n}();\n\nmodule.exports = StateMachine;\n\n/***/ }),\n\n/***/ 8478:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_404589__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __nested_webpack_require_404589__(8823)[\"Buffer\"];\n\n\n__nested_webpack_require_404589__(1539);\n\n__nested_webpack_require_404589__(8674);\n\n__nested_webpack_require_404589__(7042);\n\n__nested_webpack_require_404589__(6699);\n\n/*\n * MIT LICENSE\n * Copyright (c) 2011 Devon Govett\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\nvar fs = __nested_webpack_require_404589__(3857);\n\nvar zlib = __nested_webpack_require_404589__(2635);\n\nmodule.exports = /*#__PURE__*/function () {\n PNG.decode = function decode(path, fn) {\n return fs.readFile(path, function (err, file) {\n var png = new PNG(file);\n return png.decode(function (pixels) {\n return fn(pixels);\n });\n });\n };\n\n PNG.load = function load(path) {\n var file = fs.readFileSync(path);\n return new PNG(file);\n };\n\n function PNG(data) {\n var i;\n this.data = data;\n this.pos = 8; // Skip the default header\n\n this.palette = [];\n this.imgData = [];\n this.transparency = {};\n this.text = {};\n\n while (true) {\n var chunkSize = this.readUInt32();\n var section = '';\n\n for (i = 0; i < 4; i++) {\n section += String.fromCharCode(this.data[this.pos++]);\n }\n\n switch (section) {\n case 'IHDR':\n // we can grab interesting values from here (like width, height, etc)\n this.width = this.readUInt32();\n this.height = this.readUInt32();\n this.bits = this.data[this.pos++];\n this.colorType = this.data[this.pos++];\n this.compressionMethod = this.data[this.pos++];\n this.filterMethod = this.data[this.pos++];\n this.interlaceMethod = this.data[this.pos++];\n break;\n\n case 'PLTE':\n this.palette = this.read(chunkSize);\n break;\n\n case 'IDAT':\n for (i = 0; i < chunkSize; i++) {\n this.imgData.push(this.data[this.pos++]);\n }\n\n break;\n\n case 'tRNS':\n // This chunk can only occur once and it must occur after the\n // PLTE chunk and before the IDAT chunk.\n this.transparency = {};\n\n switch (this.colorType) {\n case 3:\n // Indexed color, RGB. Each byte in this chunk is an alpha for\n // the palette index in the PLTE (\"palette\") chunk up until the\n // last non-opaque entry. Set up an array, stretching over all\n // palette entries which will be 0 (opaque) or 1 (transparent).\n this.transparency.indexed = this.read(chunkSize);\n var short = 255 - this.transparency.indexed.length;\n\n if (short > 0) {\n for (i = 0; i < short; i++) {\n this.transparency.indexed.push(255);\n }\n }\n\n break;\n\n case 0:\n // Greyscale. Corresponding to entries in the PLTE chunk.\n // Grey is two bytes, range 0 .. (2 ^ bit-depth) - 1\n this.transparency.grayscale = this.read(chunkSize)[0];\n break;\n\n case 2:\n // True color with proper alpha channel.\n this.transparency.rgb = this.read(chunkSize);\n break;\n }\n\n break;\n\n case 'tEXt':\n var text = this.read(chunkSize);\n var index = text.indexOf(0);\n var key = String.fromCharCode.apply(String, text.slice(0, index));\n this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1));\n break;\n\n case 'IEND':\n // we've got everything we need!\n switch (this.colorType) {\n case 0:\n case 3:\n case 4:\n this.colors = 1;\n break;\n\n case 2:\n case 6:\n this.colors = 3;\n break;\n }\n\n this.hasAlphaChannel = [4, 6].includes(this.colorType);\n var colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n this.pixelBitlength = this.bits * colors;\n\n switch (this.colors) {\n case 1:\n this.colorSpace = 'DeviceGray';\n break;\n\n case 3:\n this.colorSpace = 'DeviceRGB';\n break;\n }\n\n this.imgData = new Buffer(this.imgData);\n return;\n break;\n\n default:\n // unknown (or unimportant) section, skip it\n this.pos += chunkSize;\n }\n\n this.pos += 4; // Skip the CRC\n\n if (this.pos > this.data.length) {\n throw new Error('Incomplete or corrupt PNG file');\n }\n }\n }\n\n var _proto = PNG.prototype;\n\n _proto.read = function read(bytes) {\n var result = new Array(bytes);\n\n for (var i = 0; i < bytes; i++) {\n result[i] = this.data[this.pos++];\n }\n\n return result;\n };\n\n _proto.readUInt32 = function readUInt32() {\n var b1 = this.data[this.pos++] << 24;\n var b2 = this.data[this.pos++] << 16;\n var b3 = this.data[this.pos++] << 8;\n var b4 = this.data[this.pos++];\n return b1 | b2 | b3 | b4;\n };\n\n _proto.readUInt16 = function readUInt16() {\n var b1 = this.data[this.pos++] << 8;\n var b2 = this.data[this.pos++];\n return b1 | b2;\n };\n\n _proto.decodePixels = function decodePixels(fn) {\n var _this = this;\n\n return zlib.inflate(this.imgData, function (err, data) {\n if (err) {\n throw err;\n }\n\n var width = _this.width,\n height = _this.height;\n var pixelBytes = _this.pixelBitlength / 8;\n var pixels = new Buffer(width * height * pixelBytes);\n var length = data.length;\n var pos = 0;\n\n function pass(x0, y0, dx, dy, singlePass) {\n if (singlePass === void 0) {\n singlePass = false;\n }\n\n var w = Math.ceil((width - x0) / dx);\n var h = Math.ceil((height - y0) / dy);\n var scanlineLength = pixelBytes * w;\n var buffer = singlePass ? pixels : new Buffer(scanlineLength * h);\n var row = 0;\n var c = 0;\n\n while (row < h && pos < length) {\n var byte, col, i, left, upper;\n\n switch (data[pos++]) {\n case 0:\n // None\n for (i = 0; i < scanlineLength; i++) {\n buffer[c++] = data[pos++];\n }\n\n break;\n\n case 1:\n // Sub\n for (i = 0; i < scanlineLength; i++) {\n byte = data[pos++];\n left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n buffer[c++] = (byte + left) % 256;\n }\n\n break;\n\n case 2:\n // Up\n for (i = 0; i < scanlineLength; i++) {\n byte = data[pos++];\n col = (i - i % pixelBytes) / pixelBytes;\n upper = row && buffer[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes];\n buffer[c++] = (upper + byte) % 256;\n }\n\n break;\n\n case 3:\n // Average\n for (i = 0; i < scanlineLength; i++) {\n byte = data[pos++];\n col = (i - i % pixelBytes) / pixelBytes;\n left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n upper = row && buffer[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes];\n buffer[c++] = (byte + Math.floor((left + upper) / 2)) % 256;\n }\n\n break;\n\n case 4:\n // Paeth\n for (i = 0; i < scanlineLength; i++) {\n var paeth, upperLeft;\n byte = data[pos++];\n col = (i - i % pixelBytes) / pixelBytes;\n left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n\n if (row === 0) {\n upper = upperLeft = 0;\n } else {\n upper = buffer[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes];\n upperLeft = col && buffer[(row - 1) * scanlineLength + (col - 1) * pixelBytes + i % pixelBytes];\n }\n\n var p = left + upper - upperLeft;\n var pa = Math.abs(p - left);\n var pb = Math.abs(p - upper);\n var pc = Math.abs(p - upperLeft);\n\n if (pa <= pb && pa <= pc) {\n paeth = left;\n } else if (pb <= pc) {\n paeth = upper;\n } else {\n paeth = upperLeft;\n }\n\n buffer[c++] = (byte + paeth) % 256;\n }\n\n break;\n\n default:\n throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n }\n\n if (!singlePass) {\n var pixelsPos = ((y0 + row * dy) * width + x0) * pixelBytes;\n var bufferPos = row * scanlineLength;\n\n for (i = 0; i < w; i++) {\n for (var j = 0; j < pixelBytes; j++) {\n pixels[pixelsPos++] = buffer[bufferPos++];\n }\n\n pixelsPos += (dx - 1) * pixelBytes;\n }\n }\n\n row++;\n }\n }\n\n if (_this.interlaceMethod === 1) {\n /*\n 1 6 4 6 2 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n 3 6 4 6 3 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n */\n pass(0, 0, 8, 8); // 1\n\n pass(4, 0, 8, 8); // 2\n\n pass(0, 4, 4, 8); // 3\n\n pass(2, 0, 4, 4); // 4\n\n pass(0, 2, 2, 4); // 5\n\n pass(1, 0, 2, 2); // 6\n\n pass(0, 1, 1, 2); // 7\n } else {\n pass(0, 0, 1, 1, true);\n }\n\n return fn(pixels);\n });\n };\n\n _proto.decodePalette = function decodePalette() {\n var palette = this.palette;\n var length = palette.length;\n var transparency = this.transparency.indexed || [];\n var ret = new Buffer(transparency.length + length);\n var pos = 0;\n var c = 0;\n\n for (var i = 0; i < length; i += 3) {\n var left;\n ret[pos++] = palette[i];\n ret[pos++] = palette[i + 1];\n ret[pos++] = palette[i + 2];\n ret[pos++] = (left = transparency[c++]) != null ? left : 255;\n }\n\n return ret;\n };\n\n _proto.copyToImageData = function copyToImageData(imageData, pixels) {\n var j, k;\n var colors = this.colors;\n var palette = null;\n var alpha = this.hasAlphaChannel;\n\n if (this.palette.length) {\n palette = this._decodedPalette || (this._decodedPalette = this.decodePalette());\n colors = 4;\n alpha = true;\n }\n\n var data = imageData.data || imageData;\n var length = data.length;\n var input = palette || pixels;\n var i = j = 0;\n\n if (colors === 1) {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n var v = input[k++];\n data[i++] = v;\n data[i++] = v;\n data[i++] = v;\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n } else {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n }\n };\n\n _proto.decode = function decode(fn) {\n var _this2 = this;\n\n var ret = new Buffer(this.width * this.height * 4);\n return this.decodePixels(function (pixels) {\n _this2.copyToImageData(ret, pixels);\n\n return fn(ret);\n });\n };\n\n return PNG;\n}();\n\n/***/ }),\n\n/***/ 1750:\n/***/ (function(module, exports, __nested_webpack_require_417117__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_417117__(3290);\n\n/* eslint-disable node/no-deprecated-api */\nvar buffer = __nested_webpack_require_417117__(8823);\n\nvar Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers\n\nfunction copyProps(src, dst) {\n for (var key in src) {\n dst[key] = src[key];\n }\n}\n\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer;\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports);\n exports.Buffer = SafeBuffer;\n}\n\nfunction SafeBuffer(arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length);\n} // Copy static methods from Buffer\n\n\ncopyProps(Buffer, SafeBuffer);\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number');\n }\n\n return Buffer(arg, encodingOrOffset, length);\n};\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number');\n }\n\n var buf = Buffer(size);\n\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding);\n } else {\n buf.fill(fill);\n }\n } else {\n buf.fill(0);\n }\n\n return buf;\n};\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number');\n }\n\n return Buffer(size);\n};\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number');\n }\n\n return buffer.SlowBuffer(size);\n};\n\n/***/ }),\n\n/***/ 7103:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_418827__) {\n\n\"use strict\";\n/* provided dependency */ var process = __nested_webpack_require_418827__(4155);\n/* eslint-disable node/no-deprecated-api */\n\n\n__nested_webpack_require_418827__(8145);\n\n__nested_webpack_require_418827__(6992);\n\n__nested_webpack_require_418827__(1539);\n\n__nested_webpack_require_418827__(2472);\n\n__nested_webpack_require_418827__(2990);\n\n__nested_webpack_require_418827__(8927);\n\n__nested_webpack_require_418827__(3105);\n\n__nested_webpack_require_418827__(5035);\n\n__nested_webpack_require_418827__(4345);\n\n__nested_webpack_require_418827__(7174);\n\n__nested_webpack_require_418827__(2846);\n\n__nested_webpack_require_418827__(4731);\n\n__nested_webpack_require_418827__(7209);\n\n__nested_webpack_require_418827__(6319);\n\n__nested_webpack_require_418827__(8867);\n\n__nested_webpack_require_418827__(7789);\n\n__nested_webpack_require_418827__(3739);\n\n__nested_webpack_require_418827__(9368);\n\n__nested_webpack_require_418827__(4483);\n\n__nested_webpack_require_418827__(2056);\n\n__nested_webpack_require_418827__(3462);\n\n__nested_webpack_require_418827__(678);\n\n__nested_webpack_require_418827__(7462);\n\n__nested_webpack_require_418827__(3824);\n\n__nested_webpack_require_418827__(5021);\n\n__nested_webpack_require_418827__(2974);\n\n__nested_webpack_require_418827__(5016);\n\n__nested_webpack_require_418827__(3290);\n\nvar buffer = __nested_webpack_require_418827__(8823);\n\nvar Buffer = buffer.Buffer;\nvar safer = {};\nvar key;\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue;\n if (key === 'SlowBuffer' || key === 'Buffer') continue;\n safer[key] = buffer[key];\n}\n\nvar Safer = safer.Buffer = {};\n\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue;\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue;\n Safer[key] = Buffer[key];\n}\n\nsafer.Buffer.prototype = Buffer.prototype;\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value);\n }\n\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value);\n }\n\n return Buffer(value, encodingOrOffset, length);\n };\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size);\n }\n\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"');\n }\n\n var buf = Buffer(size);\n\n if (!fill || fill.length === 0) {\n buf.fill(0);\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding);\n } else {\n buf.fill(fill);\n }\n\n return buf;\n };\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength;\n } catch (e) {// we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n };\n\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength;\n }\n}\n\nmodule.exports = safer;\n\n/***/ }),\n\n/***/ 3361:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_421924__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_421924__(7941);\n\n__nested_webpack_require_421924__(2526);\n\n__nested_webpack_require_421924__(7327);\n\n__nested_webpack_require_421924__(1539);\n\n__nested_webpack_require_421924__(5003);\n\n__nested_webpack_require_421924__(4747);\n\n__nested_webpack_require_421924__(9337);\n\n__nested_webpack_require_421924__(7042);\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nvar _require = __nested_webpack_require_421924__(8823),\n Buffer = _require.Buffer;\n\nvar _require2 = __nested_webpack_require_421924__(9862),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();\n\n/***/ }),\n\n/***/ 215:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_428788__) {\n\n\"use strict\";\nvar __dirname = \"/\";\n/* provided dependency */ var Buffer = __nested_webpack_require_428788__(8823)[\"Buffer\"];\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports[\"default\"] = void 0;\n\n__nested_webpack_require_428788__(7941);\n\n__nested_webpack_require_428788__(2526);\n\n__nested_webpack_require_428788__(7327);\n\n__nested_webpack_require_428788__(1539);\n\n__nested_webpack_require_428788__(5003);\n\n__nested_webpack_require_428788__(4747);\n\n__nested_webpack_require_428788__(9337);\n\n__nested_webpack_require_428788__(489);\n\n__nested_webpack_require_428788__(2419);\n\n__nested_webpack_require_428788__(1817);\n\n__nested_webpack_require_428788__(2165);\n\n__nested_webpack_require_428788__(6992);\n\n__nested_webpack_require_428788__(8783);\n\n__nested_webpack_require_428788__(3948);\n\n__nested_webpack_require_428788__(1038);\n\n__nested_webpack_require_428788__(7042);\n\n__nested_webpack_require_428788__(8309);\n\n__nested_webpack_require_428788__(4916);\n\n__nested_webpack_require_428788__(2707);\n\n__nested_webpack_require_428788__(2222);\n\n__nested_webpack_require_428788__(9600);\n\n__nested_webpack_require_428788__(9714);\n\n__nested_webpack_require_428788__(5306);\n\n__nested_webpack_require_428788__(1249);\n\n__nested_webpack_require_428788__(9841);\n\n__nested_webpack_require_428788__(4953);\n\n__nested_webpack_require_428788__(6977);\n\n__nested_webpack_require_428788__(6699);\n\n__nested_webpack_require_428788__(5192);\n\n__nested_webpack_require_428788__(9653);\n\n__nested_webpack_require_428788__(3123);\n\n__nested_webpack_require_428788__(4723);\n\n__nested_webpack_require_428788__(8734);\n\n__nested_webpack_require_428788__(2472);\n\n__nested_webpack_require_428788__(2990);\n\n__nested_webpack_require_428788__(8927);\n\n__nested_webpack_require_428788__(3105);\n\n__nested_webpack_require_428788__(5035);\n\n__nested_webpack_require_428788__(4345);\n\n__nested_webpack_require_428788__(7174);\n\n__nested_webpack_require_428788__(2846);\n\n__nested_webpack_require_428788__(4731);\n\n__nested_webpack_require_428788__(7209);\n\n__nested_webpack_require_428788__(6319);\n\n__nested_webpack_require_428788__(8867);\n\n__nested_webpack_require_428788__(7789);\n\n__nested_webpack_require_428788__(3739);\n\n__nested_webpack_require_428788__(9368);\n\n__nested_webpack_require_428788__(4483);\n\n__nested_webpack_require_428788__(2056);\n\n__nested_webpack_require_428788__(3462);\n\n__nested_webpack_require_428788__(678);\n\n__nested_webpack_require_428788__(7462);\n\n__nested_webpack_require_428788__(3824);\n\n__nested_webpack_require_428788__(5021);\n\n__nested_webpack_require_428788__(2974);\n\n__nested_webpack_require_428788__(5016);\n\n__nested_webpack_require_428788__(7803);\n\n__nested_webpack_require_428788__(3290);\n\n__nested_webpack_require_428788__(9601);\n\n__nested_webpack_require_428788__(3210);\n\n__nested_webpack_require_428788__(9254);\n\n__nested_webpack_require_428788__(7397);\n\n__nested_webpack_require_428788__(8674);\n\nvar _stream = _interopRequireDefault(__nested_webpack_require_428788__(2830));\n\nvar _zlib = _interopRequireDefault(__nested_webpack_require_428788__(2635));\n\nvar _cryptoJs = _interopRequireDefault(__nested_webpack_require_428788__(5153));\n\nvar _fontkit = _interopRequireDefault(__nested_webpack_require_428788__(1917));\n\nvar _events = __nested_webpack_require_428788__(7187);\n\nvar _linebreak = _interopRequireDefault(__nested_webpack_require_428788__(7337));\n\nvar _pngJs = _interopRequireDefault(__nested_webpack_require_428788__(8478));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar fs = __nested_webpack_require_428788__(3857);\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e2) {\n throw _e2;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e3) {\n didErr = true;\n err = _e3;\n },\n f: function f() {\n try {\n if (!normalCompletion && it.return != null) it.return();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n/*\r\nPDFAbstractReference - abstract class for PDF reference\r\n*/\n\n\nvar PDFAbstractReference = /*#__PURE__*/function () {\n function PDFAbstractReference() {\n _classCallCheck(this, PDFAbstractReference);\n }\n\n _createClass(PDFAbstractReference, [{\n key: \"toString\",\n value: function toString() {\n throw new Error('Must be implemented by subclasses');\n }\n }]);\n\n return PDFAbstractReference;\n}();\n\nvar PDFTree = /*#__PURE__*/function () {\n function PDFTree() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, PDFTree);\n\n this._items = {}; // disable /Limits output for this tree\n\n this.limits = typeof options.limits === 'boolean' ? options.limits : true;\n }\n\n _createClass(PDFTree, [{\n key: \"add\",\n value: function add(key, val) {\n return this._items[key] = val;\n }\n }, {\n key: \"get\",\n value: function get(key) {\n return this._items[key];\n }\n }, {\n key: \"toString\",\n value: function toString() {\n var _this = this; // Needs to be sorted by key\n\n\n var sortedKeys = Object.keys(this._items).sort(function (a, b) {\n return _this._compareKeys(a, b);\n });\n var out = ['<<'];\n\n if (this.limits && sortedKeys.length > 1) {\n var first = sortedKeys[0],\n last = sortedKeys[sortedKeys.length - 1];\n out.push(\" /Limits \".concat(PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])));\n }\n\n out.push(\" /\".concat(this._keysName(), \" [\"));\n\n var _iterator = _createForOfIteratorHelper(sortedKeys),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n out.push(\" \".concat(PDFObject.convert(this._dataForKey(key)), \" \").concat(PDFObject.convert(this._items[key])));\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n out.push(']');\n out.push('>>');\n return out.join('\\n');\n }\n }, {\n key: \"_compareKeys\",\n value: function _compareKeys()\n /*a, b*/\n {\n throw new Error('Must be implemented by subclasses');\n }\n }, {\n key: \"_keysName\",\n value: function _keysName() {\n throw new Error('Must be implemented by subclasses');\n }\n }, {\n key: \"_dataForKey\",\n value: function _dataForKey()\n /*k*/\n {\n throw new Error('Must be implemented by subclasses');\n }\n }]);\n\n return PDFTree;\n}();\n\nvar pad = function pad(str, length) {\n return (Array(length + 1).join('0') + str).slice(-length);\n};\n\nvar escapableRe = /[\\n\\r\\t\\b\\f()\\\\]/g;\nvar escapable = {\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\\\': '\\\\\\\\',\n '(': '\\\\(',\n ')': '\\\\)'\n}; // Convert little endian UTF-16 to big endian\n\nvar swapBytes = function swapBytes(buff) {\n var l = buff.length;\n\n if (l & 0x01) {\n throw new Error('Buffer length must be even');\n } else {\n for (var i = 0, end = l - 1; i < end; i += 2) {\n var a = buff[i];\n buff[i] = buff[i + 1];\n buff[i + 1] = a;\n }\n }\n\n return buff;\n};\n\nvar PDFObject = /*#__PURE__*/function () {\n function PDFObject() {\n _classCallCheck(this, PDFObject);\n }\n\n _createClass(PDFObject, null, [{\n key: \"convert\",\n value: function convert(object) {\n var encryptFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; // String literals are converted to the PDF name type\n\n if (typeof object === 'string') {\n return \"/\".concat(object); // String objects are converted to PDF strings (UTF-16)\n } else if (object instanceof String) {\n var string = object; // Detect if this is a unicode string\n\n var isUnicode = false;\n\n for (var i = 0, end = string.length; i < end; i++) {\n if (string.charCodeAt(i) > 0x7f) {\n isUnicode = true;\n break;\n }\n } // If so, encode it as big endian UTF-16\n\n\n var stringBuffer;\n\n if (isUnicode) {\n stringBuffer = swapBytes(Buffer.from(\"\\uFEFF\".concat(string), 'utf16le'));\n } else {\n stringBuffer = Buffer.from(string.valueOf(), 'ascii');\n } // Encrypt the string when necessary\n\n\n if (encryptFn) {\n string = encryptFn(stringBuffer).toString('binary');\n } else {\n string = stringBuffer.toString('binary');\n } // Escape characters as required by the spec\n\n\n string = string.replace(escapableRe, function (c) {\n return escapable[c];\n });\n return \"(\".concat(string, \")\"); // Buffers are converted to PDF hex strings\n } else if (Buffer.isBuffer(object)) {\n return \"<\".concat(object.toString('hex'), \">\");\n } else if (object instanceof PDFAbstractReference || object instanceof PDFTree) {\n return object.toString();\n } else if (object instanceof Date) {\n var _string = \"D:\".concat(pad(object.getUTCFullYear(), 4)) + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z'; // Encrypt the string when necessary\n\n\n if (encryptFn) {\n _string = encryptFn(Buffer.from(_string, 'ascii')).toString('binary'); // Escape characters as required by the spec\n\n _string = _string.replace(escapableRe, function (c) {\n return escapable[c];\n });\n }\n\n return \"(\".concat(_string, \")\");\n } else if (Array.isArray(object)) {\n var items = object.map(function (e) {\n return PDFObject.convert(e, encryptFn);\n }).join(' ');\n return \"[\".concat(items, \"]\");\n } else if ({}.toString.call(object) === '[object Object]') {\n var out = ['<<'];\n\n for (var key in object) {\n var val = object[key];\n out.push(\"/\".concat(key, \" \").concat(PDFObject.convert(val, encryptFn)));\n }\n\n out.push('>>');\n return out.join('\\n');\n } else if (typeof object === 'number') {\n return PDFObject.number(object);\n } else {\n return \"\".concat(object);\n }\n }\n }, {\n key: \"number\",\n value: function number(n) {\n if (n > -1e21 && n < 1e21) {\n return Math.round(n * 1e6) / 1e6;\n }\n\n throw new Error(\"unsupported number: \".concat(n));\n }\n }]);\n\n return PDFObject;\n}();\n\nvar PDFReference = /*#__PURE__*/function (_PDFAbstractReference) {\n _inherits(PDFReference, _PDFAbstractReference);\n\n var _super = _createSuper(PDFReference);\n\n function PDFReference(document, id) {\n var _this;\n\n var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, PDFReference);\n\n _this = _super.call(this);\n _this.document = document;\n _this.id = id;\n _this.data = data;\n _this.gen = 0;\n _this.compress = _this.document.compress && !_this.data.Filter;\n _this.uncompressedLength = 0;\n _this.buffer = [];\n return _this;\n }\n\n _createClass(PDFReference, [{\n key: \"write\",\n value: function write(chunk) {\n if (!Buffer.isBuffer(chunk)) {\n chunk = Buffer.from(chunk + '\\n', 'binary');\n }\n\n this.uncompressedLength += chunk.length;\n\n if (this.data.Length == null) {\n this.data.Length = 0;\n }\n\n this.buffer.push(chunk);\n this.data.Length += chunk.length;\n\n if (this.compress) {\n return this.data.Filter = 'FlateDecode';\n }\n }\n }, {\n key: \"end\",\n value: function end(chunk) {\n if (chunk) {\n this.write(chunk);\n }\n\n return this.finalize();\n }\n }, {\n key: \"finalize\",\n value: function finalize() {\n this.offset = this.document._offset;\n var encryptFn = this.document._security ? this.document._security.getEncryptFn(this.id, this.gen) : null;\n\n if (this.buffer.length) {\n this.buffer = Buffer.concat(this.buffer);\n\n if (this.compress) {\n this.buffer = _zlib.default.deflateSync(this.buffer);\n }\n\n if (encryptFn) {\n this.buffer = encryptFn(this.buffer);\n }\n\n this.data.Length = this.buffer.length;\n }\n\n this.document._write(\"\".concat(this.id, \" \").concat(this.gen, \" obj\"));\n\n this.document._write(PDFObject.convert(this.data, encryptFn));\n\n if (this.buffer.length) {\n this.document._write('stream');\n\n this.document._write(this.buffer);\n\n this.buffer = []; // free up memory\n\n this.document._write('\\nendstream');\n }\n\n this.document._write('endobj');\n\n this.document._refEnd(this);\n }\n }, {\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.id, \" \").concat(this.gen, \" R\");\n }\n }]);\n\n return PDFReference;\n}(PDFAbstractReference);\n/*\r\nPDFPage - represents a single page in the PDF document\r\nBy Devon Govett\r\n*/\n\n\nvar DEFAULT_MARGINS = {\n top: 72,\n left: 72,\n bottom: 72,\n right: 72\n};\nvar SIZES = {\n '4A0': [4767.87, 6740.79],\n '2A0': [3370.39, 4767.87],\n A0: [2383.94, 3370.39],\n A1: [1683.78, 2383.94],\n A2: [1190.55, 1683.78],\n A3: [841.89, 1190.55],\n A4: [595.28, 841.89],\n A5: [419.53, 595.28],\n A6: [297.64, 419.53],\n A7: [209.76, 297.64],\n A8: [147.4, 209.76],\n A9: [104.88, 147.4],\n A10: [73.7, 104.88],\n B0: [2834.65, 4008.19],\n B1: [2004.09, 2834.65],\n B2: [1417.32, 2004.09],\n B3: [1000.63, 1417.32],\n B4: [708.66, 1000.63],\n B5: [498.9, 708.66],\n B6: [354.33, 498.9],\n B7: [249.45, 354.33],\n B8: [175.75, 249.45],\n B9: [124.72, 175.75],\n B10: [87.87, 124.72],\n C0: [2599.37, 3676.54],\n C1: [1836.85, 2599.37],\n C2: [1298.27, 1836.85],\n C3: [918.43, 1298.27],\n C4: [649.13, 918.43],\n C5: [459.21, 649.13],\n C6: [323.15, 459.21],\n C7: [229.61, 323.15],\n C8: [161.57, 229.61],\n C9: [113.39, 161.57],\n C10: [79.37, 113.39],\n RA0: [2437.8, 3458.27],\n RA1: [1729.13, 2437.8],\n RA2: [1218.9, 1729.13],\n RA3: [864.57, 1218.9],\n RA4: [609.45, 864.57],\n SRA0: [2551.18, 3628.35],\n SRA1: [1814.17, 2551.18],\n SRA2: [1275.59, 1814.17],\n SRA3: [907.09, 1275.59],\n SRA4: [637.8, 907.09],\n EXECUTIVE: [521.86, 756.0],\n FOLIO: [612.0, 936.0],\n LEGAL: [612.0, 1008.0],\n LETTER: [612.0, 792.0],\n TABLOID: [792.0, 1224.0]\n};\n\nvar PDFPage = /*#__PURE__*/function () {\n function PDFPage(document) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, PDFPage);\n\n this.document = document;\n this.size = options.size || 'letter';\n this.layout = options.layout || 'portrait'; // process margins\n\n if (typeof options.margin === 'number') {\n this.margins = {\n top: options.margin,\n left: options.margin,\n bottom: options.margin,\n right: options.margin\n }; // default to 1 inch margins\n } else {\n this.margins = options.margins || DEFAULT_MARGINS;\n } // calculate page dimensions\n\n\n var dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()];\n this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\n this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\n this.content = this.document.ref(); // Initialize the Font, XObject, and ExtGState dictionaries\n\n this.resources = this.document.ref({\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']\n }); // The page dictionary\n\n this.dictionary = this.document.ref({\n Type: 'Page',\n Parent: this.document._root.data.Pages,\n MediaBox: [0, 0, this.width, this.height],\n Contents: this.content,\n Resources: this.resources\n });\n this.markings = [];\n } // Lazily create these objects\n\n\n _createClass(PDFPage, [{\n key: \"maxY\",\n value: function maxY() {\n return this.height - this.margins.bottom;\n }\n }, {\n key: \"write\",\n value: function write(chunk) {\n return this.content.write(chunk);\n }\n }, {\n key: \"end\",\n value: function end() {\n this.dictionary.end();\n this.resources.end();\n return this.content.end();\n }\n }, {\n key: \"fonts\",\n get: function get() {\n var data = this.resources.data;\n return data.Font != null ? data.Font : data.Font = {};\n }\n }, {\n key: \"xobjects\",\n get: function get() {\n var data = this.resources.data;\n return data.XObject != null ? data.XObject : data.XObject = {};\n }\n }, {\n key: \"ext_gstates\",\n get: function get() {\n var data = this.resources.data;\n return data.ExtGState != null ? data.ExtGState : data.ExtGState = {};\n }\n }, {\n key: \"patterns\",\n get: function get() {\n var data = this.resources.data;\n return data.Pattern != null ? data.Pattern : data.Pattern = {};\n }\n }, {\n key: \"colorSpaces\",\n get: function get() {\n var data = this.resources.data;\n return data.ColorSpace || (data.ColorSpace = {});\n }\n }, {\n key: \"annotations\",\n get: function get() {\n var data = this.dictionary.data;\n return data.Annots != null ? data.Annots : data.Annots = [];\n }\n }, {\n key: \"structParentTreeKey\",\n get: function get() {\n var data = this.dictionary.data;\n return data.StructParents != null ? data.StructParents : data.StructParents = this.document.createStructParentTreeNextKey();\n }\n }]);\n\n return PDFPage;\n}();\n\nvar PDFNameTree = /*#__PURE__*/function (_PDFTree) {\n _inherits(PDFNameTree, _PDFTree);\n\n var _super = _createSuper(PDFNameTree);\n\n function PDFNameTree() {\n _classCallCheck(this, PDFNameTree);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(PDFNameTree, [{\n key: \"_compareKeys\",\n value: function _compareKeys(a, b) {\n return a.localeCompare(b);\n }\n }, {\n key: \"_keysName\",\n value: function _keysName() {\n return \"Names\";\n }\n }, {\n key: \"_dataForKey\",\n value: function _dataForKey(k) {\n return new String(k);\n }\n }]);\n\n return PDFNameTree;\n}(PDFTree);\n/**\r\n * Check if value is in a range group.\r\n * @param {number} value\r\n * @param {number[]} rangeGroup\r\n * @returns {boolean}\r\n */\n\n\nfunction inRange(value, rangeGroup) {\n if (value < rangeGroup[0]) return false;\n var startRange = 0;\n var endRange = rangeGroup.length / 2;\n\n while (startRange <= endRange) {\n var middleRange = Math.floor((startRange + endRange) / 2); // actual array index\n\n var arrayIndex = middleRange * 2; // Check if value is in range pointed by actual index\n\n if (value >= rangeGroup[arrayIndex] && value <= rangeGroup[arrayIndex + 1]) {\n return true;\n }\n\n if (value > rangeGroup[arrayIndex + 1]) {\n // Search Right Side Of Array\n startRange = middleRange + 1;\n } else {\n // Search Left Side Of Array\n endRange = middleRange - 1;\n }\n }\n\n return false;\n}\n/**\r\n * A.1 Unassigned code points in Unicode 3.2\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-A.1\r\n */\n\n\nvar unassigned_code_points = [0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350, 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383, 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7, 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff, 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b, 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef, 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b, 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e, 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a, 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3, 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca, 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb, 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29, 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d, 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e, 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4, 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1, 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e, 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a, 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b, 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d, 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba, 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6, 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29, 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49, 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84, 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4, 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7, 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44, 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65, 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc, 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5, 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c, 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6, 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf, 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede, 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98, 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028, 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f, 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3, 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249, 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287, 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1, 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf, 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311, 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d, 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff, 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d, 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff, 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c, 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47, 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e, 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5, 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053, 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f, 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184, 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff, 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705, 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e, 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0, 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef, 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff, 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff, 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e, 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37, 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2, 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff, 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67, 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00, 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd, 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f, 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff, 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455, 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8, 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1, 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515, 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545, 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd, 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd, 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd, 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd, 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xefffd]; // prettier-ignore-end\n\nvar isUnassignedCodePoint = function isUnassignedCodePoint(character) {\n return inRange(character, unassigned_code_points);\n}; // prettier-ignore-start\n\n/**\r\n * B.1 Commonly mapped to nothing\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-B.1\r\n */\n\n\nvar commonly_mapped_to_nothing = [0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c, 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d, 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03, 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07, 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c, 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff]; // prettier-ignore-end\n\nvar isCommonlyMappedToNothing = function isCommonlyMappedToNothing(character) {\n return inRange(character, commonly_mapped_to_nothing);\n}; // prettier-ignore-start\n\n/**\r\n * C.1.2 Non-ASCII space characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2\r\n */\n\n\nvar non_ASCII_space_characters = [0x00a0, 0x00a0\n/* NO-BREAK SPACE */\n, 0x1680, 0x1680\n/* OGHAM SPACE MARK */\n, 0x2000, 0x2000\n/* EN QUAD */\n, 0x2001, 0x2001\n/* EM QUAD */\n, 0x2002, 0x2002\n/* EN SPACE */\n, 0x2003, 0x2003\n/* EM SPACE */\n, 0x2004, 0x2004\n/* THREE-PER-EM SPACE */\n, 0x2005, 0x2005\n/* FOUR-PER-EM SPACE */\n, 0x2006, 0x2006\n/* SIX-PER-EM SPACE */\n, 0x2007, 0x2007\n/* FIGURE SPACE */\n, 0x2008, 0x2008\n/* PUNCTUATION SPACE */\n, 0x2009, 0x2009\n/* THIN SPACE */\n, 0x200a, 0x200a\n/* HAIR SPACE */\n, 0x200b, 0x200b\n/* ZERO WIDTH SPACE */\n, 0x202f, 0x202f\n/* NARROW NO-BREAK SPACE */\n, 0x205f, 0x205f\n/* MEDIUM MATHEMATICAL SPACE */\n, 0x3000, 0x3000\n/* IDEOGRAPHIC SPACE */\n]; // prettier-ignore-end\n\nvar isNonASCIISpaceCharacter = function isNonASCIISpaceCharacter(character) {\n return inRange(character, non_ASCII_space_characters);\n}; // prettier-ignore-start\n\n\nvar non_ASCII_controls_characters = [\n/**\r\n * C.2.2 Non-ASCII control characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2\r\n */\n0x0080, 0x009f\n/* [CONTROL CHARACTERS] */\n, 0x06dd, 0x06dd\n/* ARABIC END OF AYAH */\n, 0x070f, 0x070f\n/* SYRIAC ABBREVIATION MARK */\n, 0x180e, 0x180e\n/* MONGOLIAN VOWEL SEPARATOR */\n, 0x200c, 0x200c\n/* ZERO WIDTH NON-JOINER */\n, 0x200d, 0x200d\n/* ZERO WIDTH JOINER */\n, 0x2028, 0x2028\n/* LINE SEPARATOR */\n, 0x2029, 0x2029\n/* PARAGRAPH SEPARATOR */\n, 0x2060, 0x2060\n/* WORD JOINER */\n, 0x2061, 0x2061\n/* FUNCTION APPLICATION */\n, 0x2062, 0x2062\n/* INVISIBLE TIMES */\n, 0x2063, 0x2063\n/* INVISIBLE SEPARATOR */\n, 0x206a, 0x206f\n/* [CONTROL CHARACTERS] */\n, 0xfeff, 0xfeff\n/* ZERO WIDTH NO-BREAK SPACE */\n, 0xfff9, 0xfffc\n/* [CONTROL CHARACTERS] */\n, 0x1d173, 0x1d17a\n/* [MUSICAL CONTROL CHARACTERS] */\n];\nvar non_character_codepoints = [\n/**\r\n * C.4 Non-character code points\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.4\r\n */\n0xfdd0, 0xfdef\n/* [NONCHARACTER CODE POINTS] */\n, 0xfffe, 0xffff\n/* [NONCHARACTER CODE POINTS] */\n, 0x1fffe, 0x1ffff\n/* [NONCHARACTER CODE POINTS] */\n, 0x2fffe, 0x2ffff\n/* [NONCHARACTER CODE POINTS] */\n, 0x3fffe, 0x3ffff\n/* [NONCHARACTER CODE POINTS] */\n, 0x4fffe, 0x4ffff\n/* [NONCHARACTER CODE POINTS] */\n, 0x5fffe, 0x5ffff\n/* [NONCHARACTER CODE POINTS] */\n, 0x6fffe, 0x6ffff\n/* [NONCHARACTER CODE POINTS] */\n, 0x7fffe, 0x7ffff\n/* [NONCHARACTER CODE POINTS] */\n, 0x8fffe, 0x8ffff\n/* [NONCHARACTER CODE POINTS] */\n, 0x9fffe, 0x9ffff\n/* [NONCHARACTER CODE POINTS] */\n, 0xafffe, 0xaffff\n/* [NONCHARACTER CODE POINTS] */\n, 0xbfffe, 0xbffff\n/* [NONCHARACTER CODE POINTS] */\n, 0xcfffe, 0xcffff\n/* [NONCHARACTER CODE POINTS] */\n, 0xdfffe, 0xdffff\n/* [NONCHARACTER CODE POINTS] */\n, 0xefffe, 0xeffff\n/* [NONCHARACTER CODE POINTS] */\n, 0x10fffe, 0x10ffff\n/* [NONCHARACTER CODE POINTS] */\n];\n/**\r\n * 2.3. Prohibited Output\r\n */\n\nvar prohibited_characters = [\n/**\r\n * C.2.1 ASCII control characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1\r\n */\n0, 0x001f\n/* [CONTROL CHARACTERS] */\n, 0x007f, 0x007f\n/* DELETE */\n,\n/**\r\n * C.8 Change display properties or are deprecated\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.8\r\n */\n0x0340, 0x0340\n/* COMBINING GRAVE TONE MARK */\n, 0x0341, 0x0341\n/* COMBINING ACUTE TONE MARK */\n, 0x200e, 0x200e\n/* LEFT-TO-RIGHT MARK */\n, 0x200f, 0x200f\n/* RIGHT-TO-LEFT MARK */\n, 0x202a, 0x202a\n/* LEFT-TO-RIGHT EMBEDDING */\n, 0x202b, 0x202b\n/* RIGHT-TO-LEFT EMBEDDING */\n, 0x202c, 0x202c\n/* POP DIRECTIONAL FORMATTING */\n, 0x202d, 0x202d\n/* LEFT-TO-RIGHT OVERRIDE */\n, 0x202e, 0x202e\n/* RIGHT-TO-LEFT OVERRIDE */\n, 0x206a, 0x206a\n/* INHIBIT SYMMETRIC SWAPPING */\n, 0x206b, 0x206b\n/* ACTIVATE SYMMETRIC SWAPPING */\n, 0x206c, 0x206c\n/* INHIBIT ARABIC FORM SHAPING */\n, 0x206d, 0x206d\n/* ACTIVATE ARABIC FORM SHAPING */\n, 0x206e, 0x206e\n/* NATIONAL DIGIT SHAPES */\n, 0x206f, 0x206f\n/* NOMINAL DIGIT SHAPES */\n,\n/**\r\n * C.7 Inappropriate for canonical representation\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.7\r\n */\n0x2ff0, 0x2ffb\n/* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */\n,\n/**\r\n * C.5 Surrogate codes\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.5\r\n */\n0xd800, 0xdfff,\n/**\r\n * C.3 Private use\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n */\n0xe000, 0xf8ff\n/* [PRIVATE USE, PLANE 0] */\n,\n/**\r\n * C.6 Inappropriate for plain text\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.6\r\n */\n0xfff9, 0xfff9\n/* INTERLINEAR ANNOTATION ANCHOR */\n, 0xfffa, 0xfffa\n/* INTERLINEAR ANNOTATION SEPARATOR */\n, 0xfffb, 0xfffb\n/* INTERLINEAR ANNOTATION TERMINATOR */\n, 0xfffc, 0xfffc\n/* OBJECT REPLACEMENT CHARACTER */\n, 0xfffd, 0xfffd\n/* REPLACEMENT CHARACTER */\n,\n/**\r\n * C.9 Tagging characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.9\r\n */\n0xe0001, 0xe0001\n/* LANGUAGE TAG */\n, 0xe0020, 0xe007f\n/* [TAGGING CHARACTERS] */\n,\n/**\r\n * C.3 Private use\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n */\n0xf0000, 0xffffd\n/* [PRIVATE USE, PLANE 15] */\n, 0x100000, 0x10fffd\n/* [PRIVATE USE, PLANE 16] */\n]; // prettier-ignore-end\n\nvar isProhibitedCharacter = function isProhibitedCharacter(character) {\n return inRange(character, non_ASCII_space_characters) || inRange(character, prohibited_characters) || inRange(character, non_ASCII_controls_characters) || inRange(character, non_character_codepoints);\n}; // prettier-ignore-start\n\n/**\r\n * D.1 Characters with bidirectional property \"R\" or \"AL\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.1\r\n */\n\n\nvar bidirectional_r_al = [0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0, 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a, 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa, 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5, 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a, 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0, 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc]; // prettier-ignore-end\n\nvar isBidirectionalRAL = function isBidirectionalRAL(character) {\n return inRange(character, bidirectional_r_al);\n}; // prettier-ignore-start\n\n/**\r\n * D.2 Characters with bidirectional property \"L\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.2\r\n */\n\n\nvar bidirectional_l = [0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba, 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233, 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0, 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a, 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400, 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f, 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903, 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950, 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9, 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc, 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a, 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35, 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e, 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d, 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3, 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0, 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c, 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36, 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c, 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83, 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a, 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae, 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8, 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05, 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39, 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85, 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9, 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5, 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03, 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e, 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61, 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf, 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f, 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a, 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5, 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3, 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc, 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38, 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88, 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021, 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038, 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb, 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208, 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258, 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290, 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0, 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0, 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346, 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681, 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731, 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780, 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc, 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00, 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45, 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d, 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe, 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0, 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071, 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115, 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145, 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9, 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041, 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c, 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260, 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376, 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000, 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06, 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2, 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e, 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d, 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172, 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454, 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0, 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514, 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544, 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9, 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; // prettier-ignore-end\n\nvar isBidirectionalL = function isBidirectionalL(character) {\n return inRange(character, bidirectional_l);\n};\n/**\r\n * non-ASCII space characters [StringPrep, C.1.2] that can be\r\n * mapped to SPACE (U+0020)\r\n */\n\n\nvar mapping2space = isNonASCIISpaceCharacter;\n/**\r\n * the \"commonly mapped to nothing\" characters [StringPrep, B.1]\r\n * that can be mapped to nothing.\r\n */\n\nvar mapping2nothing = isCommonlyMappedToNothing; // utils\n\nvar getCodePoint = function getCodePoint(character) {\n return character.codePointAt(0);\n};\n\nvar first = function first(x) {\n return x[0];\n};\n\nvar last = function last(x) {\n return x[x.length - 1];\n};\n/**\r\n * Convert provided string into an array of Unicode Code Points.\r\n * Based on https://stackoverflow.com/a/21409165/1556249\r\n * and https://www.npmjs.com/package/code-point-at.\r\n * @param {string} input\r\n * @returns {number[]}\r\n */\n\n\nfunction toCodePoints(input) {\n var codepoints = [];\n var size = input.length;\n\n for (var i = 0; i < size; i += 1) {\n var before = input.charCodeAt(i);\n\n if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {\n var next = input.charCodeAt(i + 1);\n\n if (next >= 0xdc00 && next <= 0xdfff) {\n codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);\n i += 1;\n continue;\n }\n }\n\n codepoints.push(before);\n }\n\n return codepoints;\n}\n/**\r\n * SASLprep.\r\n * @param {string} input\r\n * @param {Object} opts\r\n * @param {boolean} opts.allowUnassigned\r\n * @returns {string}\r\n */\n\n\nfunction saslprep(input) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (typeof input !== 'string') {\n throw new TypeError('Expected string.');\n }\n\n if (input.length === 0) {\n return '';\n } // 1. Map\n\n\n var mapped_input = toCodePoints(input) // 1.1 mapping to space\n .map(function (character) {\n return mapping2space(character) ? 0x20 : character;\n }) // 1.2 mapping to nothing\n .filter(function (character) {\n return !mapping2nothing(character);\n }); // 2. Normalize\n\n var normalized_input = String.fromCodePoint.apply(null, mapped_input).normalize('NFKC');\n var normalized_map = toCodePoints(normalized_input); // 3. Prohibit\n\n var hasProhibited = normalized_map.some(isProhibitedCharacter);\n\n if (hasProhibited) {\n throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3');\n } // Unassigned Code Points\n\n\n if (opts.allowUnassigned !== true) {\n var hasUnassigned = normalized_map.some(isUnassignedCodePoint);\n\n if (hasUnassigned) {\n throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5');\n }\n } // 4. check bidi\n\n\n var hasBidiRAL = normalized_map.some(isBidirectionalRAL);\n var hasBidiL = normalized_map.some(isBidirectionalL); // 4.1 If a string contains any RandALCat character, the string MUST NOT\n // contain any LCat character.\n\n if (hasBidiRAL && hasBidiL) {\n throw new Error('String must not contain RandALCat and LCat at the same time,' + ' see https://tools.ietf.org/html/rfc3454#section-6');\n }\n /**\r\n * 4.2 If a string contains any RandALCat character, a RandALCat\r\n * character MUST be the first character of the string, and a\r\n * RandALCat character MUST be the last character of the string.\r\n */\n\n\n var isFirstBidiRAL = isBidirectionalRAL(getCodePoint(first(normalized_input)));\n var isLastBidiRAL = isBidirectionalRAL(getCodePoint(last(normalized_input)));\n\n if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {\n throw new Error('Bidirectional RandALCat character must be the first and the last' + ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6');\n }\n\n return normalized_input;\n}\n\nvar PDFSecurity = /*#__PURE__*/function () {\n _createClass(PDFSecurity, null, [{\n key: \"generateFileID\",\n value: function generateFileID() {\n var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var infoStr = \"\".concat(info.CreationDate.getTime(), \"\\n\");\n\n for (var key in info) {\n // eslint-disable-next-line no-prototype-builtins\n if (!info.hasOwnProperty(key)) {\n continue;\n }\n\n infoStr += \"\".concat(key, \": \").concat(info[key].valueOf(), \"\\n\");\n }\n\n return wordArrayToBuffer(_cryptoJs.default.MD5(infoStr));\n }\n }, {\n key: \"generateRandomWordArray\",\n value: function generateRandomWordArray(bytes) {\n return _cryptoJs.default.lib.WordArray.random(bytes);\n }\n }, {\n key: \"create\",\n value: function create(document) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!options.ownerPassword && !options.userPassword) {\n return null;\n }\n\n return new PDFSecurity(document, options);\n }\n }]);\n\n function PDFSecurity(document) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, PDFSecurity);\n\n if (!options.ownerPassword && !options.userPassword) {\n throw new Error('None of owner password and user password is defined.');\n }\n\n this.document = document;\n\n this._setupEncryption(options);\n }\n\n _createClass(PDFSecurity, [{\n key: \"_setupEncryption\",\n value: function _setupEncryption(options) {\n switch (options.pdfVersion) {\n case '1.4':\n case '1.5':\n this.version = 2;\n break;\n\n case '1.6':\n case '1.7':\n this.version = 4;\n break;\n\n case '1.7ext3':\n this.version = 5;\n break;\n\n default:\n this.version = 1;\n break;\n }\n\n var encDict = {\n Filter: 'Standard'\n };\n\n switch (this.version) {\n case 1:\n case 2:\n case 4:\n this._setupEncryptionV1V2V4(this.version, encDict, options);\n\n break;\n\n case 5:\n this._setupEncryptionV5(encDict, options);\n\n break;\n }\n\n this.dictionary = this.document.ref(encDict);\n }\n }, {\n key: \"_setupEncryptionV1V2V4\",\n value: function _setupEncryptionV1V2V4(v, encDict, options) {\n var r, permissions;\n\n switch (v) {\n case 1:\n r = 2;\n this.keyBits = 40;\n permissions = getPermissionsR2(options.permissions);\n break;\n\n case 2:\n r = 3;\n this.keyBits = 128;\n permissions = getPermissionsR3(options.permissions);\n break;\n\n case 4:\n r = 4;\n this.keyBits = 128;\n permissions = getPermissionsR3(options.permissions);\n break;\n }\n\n var paddedUserPassword = processPasswordR2R3R4(options.userPassword);\n var paddedOwnerPassword = options.ownerPassword ? processPasswordR2R3R4(options.ownerPassword) : paddedUserPassword;\n var ownerPasswordEntry = getOwnerPasswordR2R3R4(r, this.keyBits, paddedUserPassword, paddedOwnerPassword);\n this.encryptionKey = getEncryptionKeyR2R3R4(r, this.keyBits, this.document._id, paddedUserPassword, ownerPasswordEntry, permissions);\n var userPasswordEntry;\n\n if (r === 2) {\n userPasswordEntry = getUserPasswordR2(this.encryptionKey);\n } else {\n userPasswordEntry = getUserPasswordR3R4(this.document._id, this.encryptionKey);\n }\n\n encDict.V = v;\n\n if (v >= 2) {\n encDict.Length = this.keyBits;\n }\n\n if (v === 4) {\n encDict.CF = {\n StdCF: {\n AuthEvent: 'DocOpen',\n CFM: 'AESV2',\n Length: this.keyBits / 8\n }\n };\n encDict.StmF = 'StdCF';\n encDict.StrF = 'StdCF';\n }\n\n encDict.R = r;\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\n encDict.U = wordArrayToBuffer(userPasswordEntry);\n encDict.P = permissions;\n }\n }, {\n key: \"_setupEncryptionV5\",\n value: function _setupEncryptionV5(encDict, options) {\n this.keyBits = 256;\n var permissions = getPermissionsR3(options.permissions);\n var processedUserPassword = processPasswordR5(options.userPassword);\n var processedOwnerPassword = options.ownerPassword ? processPasswordR5(options.ownerPassword) : processedUserPassword;\n this.encryptionKey = getEncryptionKeyR5(PDFSecurity.generateRandomWordArray);\n var userPasswordEntry = getUserPasswordR5(processedUserPassword, PDFSecurity.generateRandomWordArray);\n\n var userKeySalt = _cryptoJs.default.lib.WordArray.create(userPasswordEntry.words.slice(10, 12), 8);\n\n var userEncryptionKeyEntry = getUserEncryptionKeyR5(processedUserPassword, userKeySalt, this.encryptionKey);\n var ownerPasswordEntry = getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, PDFSecurity.generateRandomWordArray);\n\n var ownerKeySalt = _cryptoJs.default.lib.WordArray.create(ownerPasswordEntry.words.slice(10, 12), 8);\n\n var ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, this.encryptionKey);\n var permsEntry = getEncryptedPermissionsR5(permissions, this.encryptionKey, PDFSecurity.generateRandomWordArray);\n encDict.V = 5;\n encDict.Length = this.keyBits;\n encDict.CF = {\n StdCF: {\n AuthEvent: 'DocOpen',\n CFM: 'AESV3',\n Length: this.keyBits / 8\n }\n };\n encDict.StmF = 'StdCF';\n encDict.StrF = 'StdCF';\n encDict.R = 5;\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\n encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\n encDict.U = wordArrayToBuffer(userPasswordEntry);\n encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\n encDict.P = permissions;\n encDict.Perms = wordArrayToBuffer(permsEntry);\n }\n }, {\n key: \"getEncryptFn\",\n value: function getEncryptFn(obj, gen) {\n var digest;\n\n if (this.version < 5) {\n digest = this.encryptionKey.clone().concat(_cryptoJs.default.lib.WordArray.create([(obj & 0xff) << 24 | (obj & 0xff00) << 8 | obj >> 8 & 0xff00 | gen & 0xff, (gen & 0xff00) << 16], 5));\n }\n\n if (this.version === 1 || this.version === 2) {\n var _key = _cryptoJs.default.MD5(digest);\n\n _key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\n return function (buffer) {\n return wordArrayToBuffer(_cryptoJs.default.RC4.encrypt(_cryptoJs.default.lib.WordArray.create(buffer), _key).ciphertext);\n };\n }\n\n var key;\n\n if (this.version === 4) {\n key = _cryptoJs.default.MD5(digest.concat(_cryptoJs.default.lib.WordArray.create([0x73416c54], 4)));\n } else {\n key = this.encryptionKey;\n }\n\n var iv = PDFSecurity.generateRandomWordArray(16);\n var options = {\n mode: _cryptoJs.default.mode.CBC,\n padding: _cryptoJs.default.pad.Pkcs7,\n iv: iv\n };\n return function (buffer) {\n return wordArrayToBuffer(iv.clone().concat(_cryptoJs.default.AES.encrypt(_cryptoJs.default.lib.WordArray.create(buffer), key, options).ciphertext));\n };\n }\n }, {\n key: \"end\",\n value: function end() {\n this.dictionary.end();\n }\n }]);\n\n return PDFSecurity;\n}();\n\nfunction getPermissionsR2() {\n var permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var permissions = 0xffffffc0 >> 0;\n\n if (permissionObject.printing) {\n permissions |= 4;\n }\n\n if (permissionObject.modifying) {\n permissions |= 8;\n }\n\n if (permissionObject.copying) {\n permissions |= 16;\n }\n\n if (permissionObject.annotating) {\n permissions |= 32;\n }\n\n return permissions;\n}\n\nfunction getPermissionsR3() {\n var permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var permissions = 0xfffff0c0 >> 0;\n\n if (permissionObject.printing === 'lowResolution') {\n permissions |= 4;\n }\n\n if (permissionObject.printing === 'highResolution') {\n permissions |= 2052;\n }\n\n if (permissionObject.modifying) {\n permissions |= 8;\n }\n\n if (permissionObject.copying) {\n permissions |= 16;\n }\n\n if (permissionObject.annotating) {\n permissions |= 32;\n }\n\n if (permissionObject.fillingForms) {\n permissions |= 256;\n }\n\n if (permissionObject.contentAccessibility) {\n permissions |= 512;\n }\n\n if (permissionObject.documentAssembly) {\n permissions |= 1024;\n }\n\n return permissions;\n}\n\nfunction getUserPasswordR2(encryptionKey) {\n return _cryptoJs.default.RC4.encrypt(processPasswordR2R3R4(), encryptionKey).ciphertext;\n}\n\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\n var key = encryptionKey.clone();\n\n var cipher = _cryptoJs.default.MD5(processPasswordR2R3R4().concat(_cryptoJs.default.lib.WordArray.create(documentId)));\n\n for (var i = 0; i < 20; i++) {\n var xorRound = Math.ceil(key.sigBytes / 4);\n\n for (var j = 0; j < xorRound; j++) {\n key.words[j] = encryptionKey.words[j] ^ (i | i << 8 | i << 16 | i << 24);\n }\n\n cipher = _cryptoJs.default.RC4.encrypt(cipher, key).ciphertext;\n }\n\n return cipher.concat(_cryptoJs.default.lib.WordArray.create(null, 16));\n}\n\nfunction getOwnerPasswordR2R3R4(r, keyBits, paddedUserPassword, paddedOwnerPassword) {\n var digest = paddedOwnerPassword;\n var round = r >= 3 ? 51 : 1;\n\n for (var i = 0; i < round; i++) {\n digest = _cryptoJs.default.MD5(digest);\n }\n\n var key = digest.clone();\n key.sigBytes = keyBits / 8;\n var cipher = paddedUserPassword;\n round = r >= 3 ? 20 : 1;\n\n for (var _i = 0; _i < round; _i++) {\n var xorRound = Math.ceil(key.sigBytes / 4);\n\n for (var j = 0; j < xorRound; j++) {\n key.words[j] = digest.words[j] ^ (_i | _i << 8 | _i << 16 | _i << 24);\n }\n\n cipher = _cryptoJs.default.RC4.encrypt(cipher, key).ciphertext;\n }\n\n return cipher;\n}\n\nfunction getEncryptionKeyR2R3R4(r, keyBits, documentId, paddedUserPassword, ownerPasswordEntry, permissions) {\n var key = paddedUserPassword.clone().concat(ownerPasswordEntry).concat(_cryptoJs.default.lib.WordArray.create([lsbFirstWord(permissions)], 4)).concat(_cryptoJs.default.lib.WordArray.create(documentId));\n var round = r >= 3 ? 51 : 1;\n\n for (var i = 0; i < round; i++) {\n key = _cryptoJs.default.MD5(key);\n key.sigBytes = keyBits / 8;\n }\n\n return key;\n}\n\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\n var validationSalt = generateRandomWordArray(8);\n var keySalt = generateRandomWordArray(8);\n return _cryptoJs.default.SHA256(processedUserPassword.clone().concat(validationSalt)).concat(validationSalt).concat(keySalt);\n}\n\nfunction getUserEncryptionKeyR5(processedUserPassword, userKeySalt, encryptionKey) {\n var key = _cryptoJs.default.SHA256(processedUserPassword.clone().concat(userKeySalt));\n\n var options = {\n mode: _cryptoJs.default.mode.CBC,\n padding: _cryptoJs.default.pad.NoPadding,\n iv: _cryptoJs.default.lib.WordArray.create(null, 16)\n };\n return _cryptoJs.default.AES.encrypt(encryptionKey, key, options).ciphertext;\n}\n\nfunction getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, generateRandomWordArray) {\n var validationSalt = generateRandomWordArray(8);\n var keySalt = generateRandomWordArray(8);\n return _cryptoJs.default.SHA256(processedOwnerPassword.clone().concat(validationSalt).concat(userPasswordEntry)).concat(validationSalt).concat(keySalt);\n}\n\nfunction getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, encryptionKey) {\n var key = _cryptoJs.default.SHA256(processedOwnerPassword.clone().concat(ownerKeySalt).concat(userPasswordEntry));\n\n var options = {\n mode: _cryptoJs.default.mode.CBC,\n padding: _cryptoJs.default.pad.NoPadding,\n iv: _cryptoJs.default.lib.WordArray.create(null, 16)\n };\n return _cryptoJs.default.AES.encrypt(encryptionKey, key, options).ciphertext;\n}\n\nfunction getEncryptionKeyR5(generateRandomWordArray) {\n return generateRandomWordArray(32);\n}\n\nfunction getEncryptedPermissionsR5(permissions, encryptionKey, generateRandomWordArray) {\n var cipher = _cryptoJs.default.lib.WordArray.create([lsbFirstWord(permissions), 0xffffffff, 0x54616462], 12).concat(generateRandomWordArray(4));\n\n var options = {\n mode: _cryptoJs.default.mode.ECB,\n padding: _cryptoJs.default.pad.NoPadding\n };\n return _cryptoJs.default.AES.encrypt(cipher, encryptionKey, options).ciphertext;\n}\n\nfunction processPasswordR2R3R4() {\n var password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var out = Buffer.alloc(32);\n var length = password.length;\n var index = 0;\n\n while (index < length && index < 32) {\n var code = password.charCodeAt(index);\n\n if (code > 0xff) {\n throw new Error('Password contains one or more invalid characters.');\n }\n\n out[index] = code;\n index++;\n }\n\n while (index < 32) {\n out[index] = PASSWORD_PADDING[index - length];\n index++;\n }\n\n return _cryptoJs.default.lib.WordArray.create(out);\n}\n\nfunction processPasswordR5() {\n var password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n password = unescape(encodeURIComponent(saslprep(password)));\n var length = Math.min(127, password.length);\n var out = Buffer.alloc(length);\n\n for (var i = 0; i < length; i++) {\n out[i] = password.charCodeAt(i);\n }\n\n return _cryptoJs.default.lib.WordArray.create(out);\n}\n\nfunction lsbFirstWord(data) {\n return (data & 0xff) << 24 | (data & 0xff00) << 8 | data >> 8 & 0xff00 | data >> 24 & 0xff;\n}\n\nfunction wordArrayToBuffer(wordArray) {\n var byteArray = [];\n\n for (var i = 0; i < wordArray.sigBytes; i++) {\n byteArray.push(wordArray.words[Math.floor(i / 4)] >> 8 * (3 - i % 4) & 0xff);\n }\n\n return Buffer.from(byteArray);\n}\n\nvar PASSWORD_PADDING = [0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a];\nvar number = PDFObject.number;\n\nvar PDFGradient = /*#__PURE__*/function () {\n function PDFGradient(doc) {\n _classCallCheck(this, PDFGradient);\n\n this.doc = doc;\n this.stops = [];\n this.embedded = false;\n this.transform = [1, 0, 0, 1, 0, 0];\n }\n\n _createClass(PDFGradient, [{\n key: \"stop\",\n value: function stop(pos, color, opacity) {\n if (opacity == null) {\n opacity = 1;\n }\n\n color = this.doc._normalizeColor(color);\n\n if (this.stops.length === 0) {\n if (color.length === 3) {\n this._colorSpace = 'DeviceRGB';\n } else if (color.length === 4) {\n this._colorSpace = 'DeviceCMYK';\n } else if (color.length === 1) {\n this._colorSpace = 'DeviceGray';\n } else {\n throw new Error('Unknown color space');\n }\n } else if (this._colorSpace === 'DeviceRGB' && color.length !== 3 || this._colorSpace === 'DeviceCMYK' && color.length !== 4 || this._colorSpace === 'DeviceGray' && color.length !== 1) {\n throw new Error('All gradient stops must use the same color space');\n }\n\n opacity = Math.max(0, Math.min(1, opacity));\n this.stops.push([pos, color, opacity]);\n return this;\n }\n }, {\n key: \"setTransform\",\n value: function setTransform(m11, m12, m21, m22, dx, dy) {\n this.transform = [m11, m12, m21, m22, dx, dy];\n return this;\n }\n }, {\n key: \"embed\",\n value: function embed(m) {\n var fn;\n var stopsLength = this.stops.length;\n\n if (stopsLength === 0) {\n return;\n }\n\n this.embedded = true;\n this.matrix = m; // if the last stop comes before 100%, add a copy at 100%\n\n var last = this.stops[stopsLength - 1];\n\n if (last[0] < 1) {\n this.stops.push([1, last[1], last[2]]);\n }\n\n var bounds = [];\n var encode = [];\n var stops = [];\n\n for (var i = 0; i < stopsLength - 1; i++) {\n encode.push(0, 1);\n\n if (i + 2 !== stopsLength) {\n bounds.push(this.stops[i + 1][0]);\n }\n\n fn = this.doc.ref({\n FunctionType: 2,\n Domain: [0, 1],\n C0: this.stops[i + 0][1],\n C1: this.stops[i + 1][1],\n N: 1\n });\n stops.push(fn);\n fn.end();\n } // if there are only two stops, we don't need a stitching function\n\n\n if (stopsLength === 1) {\n fn = stops[0];\n } else {\n fn = this.doc.ref({\n FunctionType: 3,\n // stitching function\n Domain: [0, 1],\n Functions: stops,\n Bounds: bounds,\n Encode: encode\n });\n fn.end();\n }\n\n this.id = \"Sh\".concat(++this.doc._gradCount);\n var shader = this.shader(fn);\n shader.end();\n var pattern = this.doc.ref({\n Type: 'Pattern',\n PatternType: 2,\n Shading: shader,\n Matrix: this.matrix.map(number)\n });\n pattern.end();\n\n if (this.stops.some(function (stop) {\n return stop[2] < 1;\n })) {\n var grad = this.opacityGradient();\n grad._colorSpace = 'DeviceGray';\n\n var _iterator = _createForOfIteratorHelper(this.stops),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var stop = _step.value;\n grad.stop(stop[0], [stop[2]]);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n grad = grad.embed(this.matrix);\n var pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\n var form = this.doc.ref({\n Type: 'XObject',\n Subtype: 'Form',\n FormType: 1,\n BBox: pageBBox,\n Group: {\n Type: 'Group',\n S: 'Transparency',\n CS: 'DeviceGray'\n },\n Resources: {\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n Pattern: {\n Sh1: grad\n }\n }\n });\n form.write('/Pattern cs /Sh1 scn');\n form.end(\"\".concat(pageBBox.join(' '), \" re f\"));\n var gstate = this.doc.ref({\n Type: 'ExtGState',\n SMask: {\n Type: 'Mask',\n S: 'Luminosity',\n G: form\n }\n });\n gstate.end();\n var opacityPattern = this.doc.ref({\n Type: 'Pattern',\n PatternType: 1,\n PaintType: 1,\n TilingType: 2,\n BBox: pageBBox,\n XStep: pageBBox[2],\n YStep: pageBBox[3],\n Resources: {\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n Pattern: {\n Sh1: pattern\n },\n ExtGState: {\n Gs1: gstate\n }\n }\n });\n opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\n opacityPattern.end(\"\".concat(pageBBox.join(' '), \" re f\"));\n this.doc.page.patterns[this.id] = opacityPattern;\n } else {\n this.doc.page.patterns[this.id] = pattern;\n }\n\n return pattern;\n }\n }, {\n key: \"apply\",\n value: function apply(stroke) {\n // apply gradient transform to existing document ctm\n var _this$doc$_ctm = _slicedToArray(this.doc._ctm, 6),\n m0 = _this$doc$_ctm[0],\n m1 = _this$doc$_ctm[1],\n m2 = _this$doc$_ctm[2],\n m3 = _this$doc$_ctm[3],\n m4 = _this$doc$_ctm[4],\n m5 = _this$doc$_ctm[5];\n\n var _this$transform = _slicedToArray(this.transform, 6),\n m11 = _this$transform[0],\n m12 = _this$transform[1],\n m21 = _this$transform[2],\n m22 = _this$transform[3],\n dx = _this$transform[4],\n dy = _this$transform[5];\n\n var m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5];\n\n if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\n this.embed(m);\n }\n\n this.doc._setColorSpace('Pattern', stroke);\n\n var op = stroke ? 'SCN' : 'scn';\n return this.doc.addContent(\"/\".concat(this.id, \" \").concat(op));\n }\n }]);\n\n return PDFGradient;\n}();\n\nvar PDFLinearGradient = /*#__PURE__*/function (_PDFGradient) {\n _inherits(PDFLinearGradient, _PDFGradient);\n\n var _super = _createSuper(PDFLinearGradient);\n\n function PDFLinearGradient(doc, x1, y1, x2, y2) {\n var _this;\n\n _classCallCheck(this, PDFLinearGradient);\n\n _this = _super.call(this, doc);\n _this.x1 = x1;\n _this.y1 = y1;\n _this.x2 = x2;\n _this.y2 = y2;\n return _this;\n }\n\n _createClass(PDFLinearGradient, [{\n key: \"shader\",\n value: function shader(fn) {\n return this.doc.ref({\n ShadingType: 2,\n ColorSpace: this._colorSpace,\n Coords: [this.x1, this.y1, this.x2, this.y2],\n Function: fn,\n Extend: [true, true]\n });\n }\n }, {\n key: \"opacityGradient\",\n value: function opacityGradient() {\n return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\n }\n }]);\n\n return PDFLinearGradient;\n}(PDFGradient);\n\nvar PDFRadialGradient = /*#__PURE__*/function (_PDFGradient2) {\n _inherits(PDFRadialGradient, _PDFGradient2);\n\n var _super2 = _createSuper(PDFRadialGradient);\n\n function PDFRadialGradient(doc, x1, y1, r1, x2, y2, r2) {\n var _this2;\n\n _classCallCheck(this, PDFRadialGradient);\n\n _this2 = _super2.call(this, doc);\n _this2.doc = doc;\n _this2.x1 = x1;\n _this2.y1 = y1;\n _this2.r1 = r1;\n _this2.x2 = x2;\n _this2.y2 = y2;\n _this2.r2 = r2;\n return _this2;\n }\n\n _createClass(PDFRadialGradient, [{\n key: \"shader\",\n value: function shader(fn) {\n return this.doc.ref({\n ShadingType: 3,\n ColorSpace: this._colorSpace,\n Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\n Function: fn,\n Extend: [true, true]\n });\n }\n }, {\n key: \"opacityGradient\",\n value: function opacityGradient() {\n return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2);\n }\n }]);\n\n return PDFRadialGradient;\n}(PDFGradient);\n\nvar Gradient = {\n PDFGradient: PDFGradient,\n PDFLinearGradient: PDFLinearGradient,\n PDFRadialGradient: PDFRadialGradient\n};\n/*\r\nPDF tiling pattern support. Uncolored only.\r\n */\n\nvar underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB'];\n\nvar PDFTilingPattern = /*#__PURE__*/function () {\n function PDFTilingPattern(doc, bBox, xStep, yStep, stream) {\n _classCallCheck(this, PDFTilingPattern);\n\n this.doc = doc;\n this.bBox = bBox;\n this.xStep = xStep;\n this.yStep = yStep;\n this.stream = stream;\n }\n\n _createClass(PDFTilingPattern, [{\n key: \"createPattern\",\n value: function createPattern() {\n // no resources needed for our current usage\n // required entry\n var resources = this.doc.ref();\n resources.end(); // apply default transform matrix (flipped in the default doc._ctm)\n // see document.js & gradient.js\n\n var _this$doc$_ctm = _slicedToArray(this.doc._ctm, 6),\n m0 = _this$doc$_ctm[0],\n m1 = _this$doc$_ctm[1],\n m2 = _this$doc$_ctm[2],\n m3 = _this$doc$_ctm[3],\n m4 = _this$doc$_ctm[4],\n m5 = _this$doc$_ctm[5];\n\n var m11 = 1,\n m12 = 0,\n m21 = 0,\n m22 = 1,\n dx = 0,\n dy = 0;\n var m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5];\n var pattern = this.doc.ref({\n Type: 'Pattern',\n PatternType: 1,\n // tiling\n PaintType: 2,\n // 1-colored, 2-uncolored\n TilingType: 2,\n // 2-no distortion\n BBox: this.bBox,\n XStep: this.xStep,\n YStep: this.yStep,\n Matrix: m.map(function (v) {\n return +v.toFixed(5);\n }),\n Resources: resources\n });\n pattern.end(this.stream);\n return pattern;\n }\n }, {\n key: \"embedPatternColorSpaces\",\n value: function embedPatternColorSpaces() {\n var _this = this; // map each pattern to an underlying color space\n // and embed on each page\n\n\n underlyingColorSpaces.forEach(function (csName) {\n var csId = _this.getPatternColorSpaceId(csName);\n\n if (_this.doc.page.colorSpaces[csId]) return;\n\n var cs = _this.doc.ref(['Pattern', csName]);\n\n cs.end();\n _this.doc.page.colorSpaces[csId] = cs;\n });\n }\n }, {\n key: \"getPatternColorSpaceId\",\n value: function getPatternColorSpaceId(underlyingColorspace) {\n return \"CsP\".concat(underlyingColorspace);\n }\n }, {\n key: \"embed\",\n value: function embed() {\n if (!this.id) {\n this.doc._patternCount = this.doc._patternCount + 1;\n this.id = 'P' + this.doc._patternCount;\n this.pattern = this.createPattern();\n } // patterns are embedded in each page\n\n\n if (!this.doc.page.patterns[this.id]) {\n this.doc.page.patterns[this.id] = this.pattern;\n }\n }\n }, {\n key: \"apply\",\n value: function apply(stroke, patternColor) {\n // do any embedding/creating that might be needed\n this.embedPatternColorSpaces();\n this.embed();\n\n var normalizedColor = this.doc._normalizeColor(patternColor);\n\n if (!normalizedColor) throw Error(\"invalid pattern color. (value: \".concat(patternColor, \")\")); // select one of the pattern color spaces\n\n var csId = this.getPatternColorSpaceId(this.doc._getColorSpace(normalizedColor));\n\n this.doc._setColorSpace(csId, stroke); // stroke/fill using the pattern and color (in the above underlying color space)\n\n\n var op = stroke ? 'SCN' : 'scn';\n return this.doc.addContent(\"\".concat(normalizedColor.join(' '), \" /\").concat(this.id, \" \").concat(op));\n }\n }]);\n\n return PDFTilingPattern;\n}();\n\nvar pattern = {\n PDFTilingPattern: PDFTilingPattern\n};\nvar PDFGradient$1 = Gradient.PDFGradient,\n PDFLinearGradient$1 = Gradient.PDFLinearGradient,\n PDFRadialGradient$1 = Gradient.PDFRadialGradient;\nvar PDFTilingPattern$1 = pattern.PDFTilingPattern;\nvar ColorMixin = {\n initColor: function initColor() {\n // The opacity dictionaries\n this._opacityRegistry = {};\n this._opacityCount = 0;\n this._patternCount = 0;\n return this._gradCount = 0;\n },\n _normalizeColor: function _normalizeColor(color) {\n if (typeof color === 'string') {\n if (color.charAt(0) === '#') {\n if (color.length === 4) {\n color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, '#$1$1$2$2$3$3');\n }\n\n var hex = parseInt(color.slice(1), 16);\n color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff];\n } else if (namedColors[color]) {\n color = namedColors[color];\n }\n }\n\n if (Array.isArray(color)) {\n // RGB\n if (color.length === 3) {\n color = color.map(function (part) {\n return part / 255;\n }); // CMYK\n } else if (color.length === 4) {\n color = color.map(function (part) {\n return part / 100;\n });\n }\n\n return color;\n }\n\n return null;\n },\n _setColor: function _setColor(color, stroke) {\n if (color instanceof PDFGradient$1) {\n color.apply(stroke);\n return true; // see if tiling pattern, decode & apply it it\n } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern$1) {\n color[0].apply(stroke, color[1]);\n return true;\n } // any other case should be a normal color and not a pattern\n\n\n return this._setColorCore(color, stroke);\n },\n _setColorCore: function _setColorCore(color, stroke) {\n color = this._normalizeColor(color);\n\n if (!color) {\n return false;\n }\n\n var op = stroke ? 'SCN' : 'scn';\n\n var space = this._getColorSpace(color);\n\n this._setColorSpace(space, stroke);\n\n color = color.join(' ');\n this.addContent(\"\".concat(color, \" \").concat(op));\n return true;\n },\n _setColorSpace: function _setColorSpace(space, stroke) {\n var op = stroke ? 'CS' : 'cs';\n return this.addContent(\"/\".concat(space, \" \").concat(op));\n },\n _getColorSpace: function _getColorSpace(color) {\n return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\n },\n fillColor: function fillColor(color, opacity) {\n var set = this._setColor(color, false);\n\n if (set) {\n this.fillOpacity(opacity);\n } // save this for text wrapper, which needs to reset\n // the fill color on new pages\n\n\n this._fillColor = [color, opacity];\n return this;\n },\n strokeColor: function strokeColor(color, opacity) {\n var set = this._setColor(color, true);\n\n if (set) {\n this.strokeOpacity(opacity);\n }\n\n return this;\n },\n opacity: function opacity(_opacity) {\n this._doOpacity(_opacity, _opacity);\n\n return this;\n },\n fillOpacity: function fillOpacity(opacity) {\n this._doOpacity(opacity, null);\n\n return this;\n },\n strokeOpacity: function strokeOpacity(opacity) {\n this._doOpacity(null, opacity);\n\n return this;\n },\n _doOpacity: function _doOpacity(fillOpacity, strokeOpacity) {\n var dictionary, name;\n\n if (fillOpacity == null && strokeOpacity == null) {\n return;\n }\n\n if (fillOpacity != null) {\n fillOpacity = Math.max(0, Math.min(1, fillOpacity));\n }\n\n if (strokeOpacity != null) {\n strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\n }\n\n var key = \"\".concat(fillOpacity, \"_\").concat(strokeOpacity);\n\n if (this._opacityRegistry[key]) {\n var _this$_opacityRegistr = _slicedToArray(this._opacityRegistry[key], 2);\n\n dictionary = _this$_opacityRegistr[0];\n name = _this$_opacityRegistr[1];\n } else {\n dictionary = {\n Type: 'ExtGState'\n };\n\n if (fillOpacity != null) {\n dictionary.ca = fillOpacity;\n }\n\n if (strokeOpacity != null) {\n dictionary.CA = strokeOpacity;\n }\n\n dictionary = this.ref(dictionary);\n dictionary.end();\n var id = ++this._opacityCount;\n name = \"Gs\".concat(id);\n this._opacityRegistry[key] = [dictionary, name];\n }\n\n this.page.ext_gstates[name] = dictionary;\n return this.addContent(\"/\".concat(name, \" gs\"));\n },\n linearGradient: function linearGradient(x1, y1, x2, y2) {\n return new PDFLinearGradient$1(this, x1, y1, x2, y2);\n },\n radialGradient: function radialGradient(x1, y1, r1, x2, y2, r2) {\n return new PDFRadialGradient$1(this, x1, y1, r1, x2, y2, r2);\n },\n pattern: function pattern(bbox, xStep, yStep, stream) {\n return new PDFTilingPattern$1(this, bbox, xStep, yStep, stream);\n }\n};\nvar namedColors = {\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 134, 11],\n darkgray: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkgrey: [169, 169, 169],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 250, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n grey: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightgrey: [211, 211, 211],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 221],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [112, 128, 144],\n slategrey: [112, 128, 144],\n snow: [255, 250, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0],\n yellowgreen: [154, 205, 50]\n};\nvar cx, cy, px, py, sx, sy;\ncx = cy = px = py = sx = sy = 0;\nvar parameters = {\n A: 7,\n a: 7,\n C: 6,\n c: 6,\n H: 1,\n h: 1,\n L: 2,\n l: 2,\n M: 2,\n m: 2,\n Q: 4,\n q: 4,\n S: 4,\n s: 4,\n T: 2,\n t: 2,\n V: 1,\n v: 1,\n Z: 0,\n z: 0\n};\n\nvar parse = function parse(path) {\n var cmd;\n var ret = [];\n var args = [];\n var curArg = '';\n var foundDecimal = false;\n var params = 0;\n\n var _iterator = _createForOfIteratorHelper(path),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var c = _step.value;\n\n if (parameters[c] != null) {\n params = parameters[c];\n\n if (cmd) {\n // save existing command\n if (curArg.length > 0) {\n args[args.length] = +curArg;\n }\n\n ret[ret.length] = {\n cmd: cmd,\n args: args\n };\n args = [];\n curArg = '';\n foundDecimal = false;\n }\n\n cmd = c;\n } else if ([' ', ','].includes(c) || c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e' || c === '.' && foundDecimal) {\n if (curArg.length === 0) {\n continue;\n }\n\n if (args.length === params) {\n // handle reused commands\n ret[ret.length] = {\n cmd: cmd,\n args: args\n };\n args = [+curArg]; // handle assumed commands\n\n if (cmd === 'M') {\n cmd = 'L';\n }\n\n if (cmd === 'm') {\n cmd = 'l';\n }\n } else {\n args[args.length] = +curArg;\n }\n\n foundDecimal = c === '.'; // fix for negative numbers or repeated decimals with no delimeter between commands\n\n curArg = ['-', '.'].includes(c) ? c : '';\n } else {\n curArg += c;\n\n if (c === '.') {\n foundDecimal = true;\n }\n }\n } // add the last command\n\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (curArg.length > 0) {\n if (args.length === params) {\n // handle reused commands\n ret[ret.length] = {\n cmd: cmd,\n args: args\n };\n args = [+curArg]; // handle assumed commands\n\n if (cmd === 'M') {\n cmd = 'L';\n }\n\n if (cmd === 'm') {\n cmd = 'l';\n }\n } else {\n args[args.length] = +curArg;\n }\n }\n\n ret[ret.length] = {\n cmd: cmd,\n args: args\n };\n return ret;\n};\n\nvar _apply = function apply(commands, doc) {\n // current point, control point, and subpath starting point\n cx = cy = px = py = sx = sy = 0; // run the commands\n\n for (var i = 0; i < commands.length; i++) {\n var c = commands[i];\n\n if (typeof runners[c.cmd] === 'function') {\n runners[c.cmd](doc, c.args);\n }\n }\n};\n\nvar runners = {\n M: function M(doc, a) {\n cx = a[0];\n cy = a[1];\n px = py = null;\n sx = cx;\n sy = cy;\n return doc.moveTo(cx, cy);\n },\n m: function m(doc, a) {\n cx += a[0];\n cy += a[1];\n px = py = null;\n sx = cx;\n sy = cy;\n return doc.moveTo(cx, cy);\n },\n C: function C(doc, a) {\n cx = a[4];\n cy = a[5];\n px = a[2];\n py = a[3];\n return doc.bezierCurveTo.apply(doc, _toConsumableArray(a));\n },\n c: function c(doc, a) {\n doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy);\n px = cx + a[2];\n py = cy + a[3];\n cx += a[4];\n return cy += a[5];\n },\n S: function S(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n }\n\n doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\n px = a[0];\n py = a[1];\n cx = a[2];\n return cy = a[3];\n },\n s: function s(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n }\n\n doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]);\n px = cx + a[0];\n py = cy + a[1];\n cx += a[2];\n return cy += a[3];\n },\n Q: function Q(doc, a) {\n px = a[0];\n py = a[1];\n cx = a[2];\n cy = a[3];\n return doc.quadraticCurveTo(a[0], a[1], cx, cy);\n },\n q: function q(doc, a) {\n doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\n px = cx + a[0];\n py = cy + a[1];\n cx += a[2];\n return cy += a[3];\n },\n T: function T(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n } else {\n px = cx - (px - cx);\n py = cy - (py - cy);\n }\n\n doc.quadraticCurveTo(px, py, a[0], a[1]);\n px = cx - (px - cx);\n py = cy - (py - cy);\n cx = a[0];\n return cy = a[1];\n },\n t: function t(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n } else {\n px = cx - (px - cx);\n py = cy - (py - cy);\n }\n\n doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\n cx += a[0];\n return cy += a[1];\n },\n A: function A(doc, a) {\n solveArc(doc, cx, cy, a);\n cx = a[5];\n return cy = a[6];\n },\n a: function a(doc, _a) {\n _a[5] += cx;\n _a[6] += cy;\n solveArc(doc, cx, cy, _a);\n cx = _a[5];\n return cy = _a[6];\n },\n L: function L(doc, a) {\n cx = a[0];\n cy = a[1];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n l: function l(doc, a) {\n cx += a[0];\n cy += a[1];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n H: function H(doc, a) {\n cx = a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n h: function h(doc, a) {\n cx += a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n V: function V(doc, a) {\n cy = a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n v: function v(doc, a) {\n cy += a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n Z: function Z(doc) {\n doc.closePath();\n cx = sx;\n return cy = sy;\n },\n z: function z(doc) {\n doc.closePath();\n cx = sx;\n return cy = sy;\n }\n};\n\nvar solveArc = function solveArc(doc, x, y, coords) {\n var _coords = _slicedToArray(coords, 7),\n rx = _coords[0],\n ry = _coords[1],\n rot = _coords[2],\n large = _coords[3],\n sweep = _coords[4],\n ex = _coords[5],\n ey = _coords[6];\n\n var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\n\n var _iterator2 = _createForOfIteratorHelper(segs),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var seg = _step2.value;\n var bez = segmentToBezier.apply(void 0, _toConsumableArray(seg));\n doc.bezierCurveTo.apply(doc, _toConsumableArray(bez));\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n}; // from Inkscape svgtopdf, thanks!\n\n\nvar arcToSegments = function arcToSegments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n var th = rotateX * (Math.PI / 180);\n var sin_th = Math.sin(th);\n var cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n var pl = px * px / (rx * rx) + py * py / (ry * ry);\n\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n var a00 = cos_th / rx;\n var a01 = sin_th / rx;\n var a10 = -sin_th / ry;\n var a11 = cos_th / ry;\n var x0 = a00 * ox + a01 * oy;\n var y0 = a10 * ox + a11 * oy;\n var x1 = a00 * x + a01 * y;\n var y1 = a10 * x + a11 * y;\n var d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n var sfactor_sq = 1 / d - 0.25;\n\n if (sfactor_sq < 0) {\n sfactor_sq = 0;\n }\n\n var sfactor = Math.sqrt(sfactor_sq);\n\n if (sweep === large) {\n sfactor = -sfactor;\n }\n\n var xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n var yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n var th0 = Math.atan2(y0 - yc, x0 - xc);\n var th1 = Math.atan2(y1 - yc, x1 - xc);\n var th_arc = th1 - th0;\n\n if (th_arc < 0 && sweep === 1) {\n th_arc += 2 * Math.PI;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= 2 * Math.PI;\n }\n\n var segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\n var result = [];\n\n for (var i = 0; i < segments; i++) {\n var th2 = th0 + i * th_arc / segments;\n var th3 = th0 + (i + 1) * th_arc / segments;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n\n return result;\n};\n\nvar segmentToBezier = function segmentToBezier(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\n var a00 = cos_th * rx;\n var a01 = -sin_th * ry;\n var a10 = sin_th * rx;\n var a11 = cos_th * ry;\n var th_half = 0.5 * (th1 - th0);\n var t = 8 / 3 * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half);\n var x1 = cx + Math.cos(th0) - t * Math.sin(th0);\n var y1 = cy + Math.sin(th0) + t * Math.cos(th0);\n var x3 = cx + Math.cos(th1);\n var y3 = cy + Math.sin(th1);\n var x2 = x3 + t * Math.sin(th1);\n var y2 = y3 - t * Math.cos(th1);\n return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n};\n\nvar SVGPath = /*#__PURE__*/function () {\n function SVGPath() {\n _classCallCheck(this, SVGPath);\n }\n\n _createClass(SVGPath, null, [{\n key: \"apply\",\n value: function apply(doc, path) {\n var commands = parse(path);\n\n _apply(commands, doc);\n }\n }]);\n\n return SVGPath;\n}();\n\nvar number$1 = PDFObject.number; // This constant is used to approximate a symmetrical arc using a cubic\n// Bezier curve.\n\nvar KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\nvar VectorMixin = {\n initVector: function initVector() {\n this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\n\n return this._ctmStack = [];\n },\n save: function save() {\n this._ctmStack.push(this._ctm.slice()); // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\n\n\n return this.addContent('q');\n },\n restore: function restore() {\n this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\n return this.addContent('Q');\n },\n closePath: function closePath() {\n return this.addContent('h');\n },\n lineWidth: function lineWidth(w) {\n return this.addContent(\"\".concat(number$1(w), \" w\"));\n },\n _CAP_STYLES: {\n BUTT: 0,\n ROUND: 1,\n SQUARE: 2\n },\n lineCap: function lineCap(c) {\n if (typeof c === 'string') {\n c = this._CAP_STYLES[c.toUpperCase()];\n }\n\n return this.addContent(\"\".concat(c, \" J\"));\n },\n _JOIN_STYLES: {\n MITER: 0,\n ROUND: 1,\n BEVEL: 2\n },\n lineJoin: function lineJoin(j) {\n if (typeof j === 'string') {\n j = this._JOIN_STYLES[j.toUpperCase()];\n }\n\n return this.addContent(\"\".concat(j, \" j\"));\n },\n miterLimit: function miterLimit(m) {\n return this.addContent(\"\".concat(number$1(m), \" M\"));\n },\n dash: function dash(length) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var originalLength = length;\n\n if (!Array.isArray(length)) {\n length = [length, options.space || length];\n }\n\n var valid = length.every(function (x) {\n return Number.isFinite(x) && x > 0;\n });\n\n if (!valid) {\n throw new Error(\"dash(\".concat(JSON.stringify(originalLength), \", \").concat(JSON.stringify(options), \") invalid, lengths must be numeric and greater than zero\"));\n }\n\n length = length.map(number$1).join(' ');\n return this.addContent(\"[\".concat(length, \"] \").concat(number$1(options.phase || 0), \" d\"));\n },\n undash: function undash() {\n return this.addContent('[] 0 d');\n },\n moveTo: function moveTo(x, y) {\n return this.addContent(\"\".concat(number$1(x), \" \").concat(number$1(y), \" m\"));\n },\n lineTo: function lineTo(x, y) {\n return this.addContent(\"\".concat(number$1(x), \" \").concat(number$1(y), \" l\"));\n },\n bezierCurveTo: function bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n return this.addContent(\"\".concat(number$1(cp1x), \" \").concat(number$1(cp1y), \" \").concat(number$1(cp2x), \" \").concat(number$1(cp2y), \" \").concat(number$1(x), \" \").concat(number$1(y), \" c\"));\n },\n quadraticCurveTo: function quadraticCurveTo(cpx, cpy, x, y) {\n return this.addContent(\"\".concat(number$1(cpx), \" \").concat(number$1(cpy), \" \").concat(number$1(x), \" \").concat(number$1(y), \" v\"));\n },\n rect: function rect(x, y, w, h) {\n return this.addContent(\"\".concat(number$1(x), \" \").concat(number$1(y), \" \").concat(number$1(w), \" \").concat(number$1(h), \" re\"));\n },\n roundedRect: function roundedRect(x, y, w, h, r) {\n if (r == null) {\n r = 0;\n }\n\n r = Math.min(r, 0.5 * w, 0.5 * h); // amount to inset control points from corners (see `ellipse`)\n\n var c = r * (1.0 - KAPPA);\n this.moveTo(x + r, y);\n this.lineTo(x + w - r, y);\n this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\n this.lineTo(x + w, y + h - r);\n this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\n this.lineTo(x + r, y + h);\n this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\n this.lineTo(x, y + r);\n this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\n return this.closePath();\n },\n ellipse: function ellipse(x, y, r1, r2) {\n // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\n if (r2 == null) {\n r2 = r1;\n }\n\n x -= r1;\n y -= r2;\n var ox = r1 * KAPPA;\n var oy = r2 * KAPPA;\n var xe = x + r1 * 2;\n var ye = y + r2 * 2;\n var xm = x + r1;\n var ym = y + r2;\n this.moveTo(x, ym);\n this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n return this.closePath();\n },\n circle: function circle(x, y, radius) {\n return this.ellipse(x, y, radius);\n },\n arc: function arc(x, y, radius, startAngle, endAngle, anticlockwise) {\n if (anticlockwise == null) {\n anticlockwise = false;\n }\n\n var TWO_PI = 2.0 * Math.PI;\n var HALF_PI = 0.5 * Math.PI;\n var deltaAng = endAngle - startAngle;\n\n if (Math.abs(deltaAng) > TWO_PI) {\n // draw only full circle if more than that is specified\n deltaAng = TWO_PI;\n } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\n // necessary to flip direction of rendering\n var dir = anticlockwise ? -1 : 1;\n deltaAng = dir * TWO_PI + deltaAng;\n }\n\n var numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\n var segAng = deltaAng / numSegs;\n var handleLen = segAng / HALF_PI * KAPPA * radius;\n var curAng = startAngle; // component distances between anchor point and control point\n\n var deltaCx = -Math.sin(curAng) * handleLen;\n var deltaCy = Math.cos(curAng) * handleLen; // anchor point\n\n var ax = x + Math.cos(curAng) * radius;\n var ay = y + Math.sin(curAng) * radius; // calculate and render segments\n\n this.moveTo(ax, ay);\n\n for (var segIdx = 0; segIdx < numSegs; segIdx++) {\n // starting control point\n var cp1x = ax + deltaCx;\n var cp1y = ay + deltaCy; // step angle\n\n curAng += segAng; // next anchor point\n\n ax = x + Math.cos(curAng) * radius;\n ay = y + Math.sin(curAng) * radius; // next control point delta\n\n deltaCx = -Math.sin(curAng) * handleLen;\n deltaCy = Math.cos(curAng) * handleLen; // ending control point\n\n var cp2x = ax - deltaCx;\n var cp2y = ay - deltaCy; // render segment\n\n this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\n }\n\n return this;\n },\n polygon: function polygon() {\n for (var _len = arguments.length, points = new Array(_len), _key = 0; _key < _len; _key++) {\n points[_key] = arguments[_key];\n }\n\n this.moveTo.apply(this, _toConsumableArray(points.shift() || []));\n\n for (var _i = 0, _points = points; _i < _points.length; _i++) {\n var point = _points[_i];\n this.lineTo.apply(this, _toConsumableArray(point || []));\n }\n\n return this.closePath();\n },\n path: function path(_path) {\n SVGPath.apply(this, _path);\n return this;\n },\n _windingRule: function _windingRule(rule) {\n if (/even-?odd/.test(rule)) {\n return '*';\n }\n\n return '';\n },\n fill: function fill(color, rule) {\n if (/(even-?odd)|(non-?zero)/.test(color)) {\n rule = color;\n color = null;\n }\n\n if (color) {\n this.fillColor(color);\n }\n\n return this.addContent(\"f\".concat(this._windingRule(rule)));\n },\n stroke: function stroke(color) {\n if (color) {\n this.strokeColor(color);\n }\n\n return this.addContent('S');\n },\n fillAndStroke: function fillAndStroke(fillColor, strokeColor, rule) {\n if (strokeColor == null) {\n strokeColor = fillColor;\n }\n\n var isFillRule = /(even-?odd)|(non-?zero)/;\n\n if (isFillRule.test(fillColor)) {\n rule = fillColor;\n fillColor = null;\n }\n\n if (isFillRule.test(strokeColor)) {\n rule = strokeColor;\n strokeColor = fillColor;\n }\n\n if (fillColor) {\n this.fillColor(fillColor);\n this.strokeColor(strokeColor);\n }\n\n return this.addContent(\"B\".concat(this._windingRule(rule)));\n },\n clip: function clip(rule) {\n return this.addContent(\"W\".concat(this._windingRule(rule), \" n\"));\n },\n transform: function transform(m11, m12, m21, m22, dx, dy) {\n // keep track of the current transformation matrix\n var m = this._ctm;\n\n var _m = _slicedToArray(m, 6),\n m0 = _m[0],\n m1 = _m[1],\n m2 = _m[2],\n m3 = _m[3],\n m4 = _m[4],\n m5 = _m[5];\n\n m[0] = m0 * m11 + m2 * m12;\n m[1] = m1 * m11 + m3 * m12;\n m[2] = m0 * m21 + m2 * m22;\n m[3] = m1 * m21 + m3 * m22;\n m[4] = m0 * dx + m2 * dy + m4;\n m[5] = m1 * dx + m3 * dy + m5;\n var values = [m11, m12, m21, m22, dx, dy].map(function (v) {\n return number$1(v);\n }).join(' ');\n return this.addContent(\"\".concat(values, \" cm\"));\n },\n translate: function translate(x, y) {\n return this.transform(1, 0, 0, 1, x, y);\n },\n rotate: function rotate(angle) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var y;\n var rad = angle * Math.PI / 180;\n var cos = Math.cos(rad);\n var sin = Math.sin(rad);\n var x = y = 0;\n\n if (options.origin != null) {\n var _options$origin = _slicedToArray(options.origin, 2);\n\n x = _options$origin[0];\n y = _options$origin[1];\n var x1 = x * cos - y * sin;\n var y1 = x * sin + y * cos;\n x -= x1;\n y -= y1;\n }\n\n return this.transform(cos, sin, -sin, cos, x, y);\n },\n scale: function scale(xFactor, yFactor) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var y;\n\n if (yFactor == null) {\n yFactor = xFactor;\n }\n\n if (typeof yFactor === 'object') {\n options = yFactor;\n yFactor = xFactor;\n }\n\n var x = y = 0;\n\n if (options.origin != null) {\n var _options$origin2 = _slicedToArray(options.origin, 2);\n\n x = _options$origin2[0];\n y = _options$origin2[1];\n x -= xFactor * x;\n y -= yFactor * y;\n }\n\n return this.transform(xFactor, 0, 0, yFactor, x, y);\n }\n};\nvar WIN_ANSI_MAP = {\n 402: 131,\n 8211: 150,\n 8212: 151,\n 8216: 145,\n 8217: 146,\n 8218: 130,\n 8220: 147,\n 8221: 148,\n 8222: 132,\n 8224: 134,\n 8225: 135,\n 8226: 149,\n 8230: 133,\n 8364: 128,\n 8240: 137,\n 8249: 139,\n 8250: 155,\n 710: 136,\n 8482: 153,\n 338: 140,\n 339: 156,\n 732: 152,\n 352: 138,\n 353: 154,\n 376: 159,\n 381: 142,\n 382: 158\n};\nvar characters = \".notdef .notdef .notdef .notdef\\n.notdef .notdef .notdef .notdef\\n.notdef .notdef .notdef .notdef\\n.notdef .notdef .notdef .notdef\\n.notdef .notdef .notdef .notdef\\n.notdef .notdef .notdef .notdef\\n.notdef .notdef .notdef .notdef\\n.notdef .notdef .notdef .notdef\\n \\nspace exclam quotedbl numbersign\\ndollar percent ampersand quotesingle\\nparenleft parenright asterisk plus\\ncomma hyphen period slash\\nzero one two three\\nfour five six seven\\neight nine colon semicolon\\nless equal greater question\\n \\nat A B C\\nD E F G\\nH I J K\\nL M N O\\nP Q R S\\nT U V W\\nX Y Z bracketleft\\nbackslash bracketright asciicircum underscore\\n \\ngrave a b c\\nd e f g\\nh i j k\\nl m n o\\np q r s\\nt u v w\\nx y z braceleft\\nbar braceright asciitilde .notdef\\n \\nEuro .notdef quotesinglbase florin\\nquotedblbase ellipsis dagger daggerdbl\\ncircumflex perthousand Scaron guilsinglleft\\nOE .notdef Zcaron .notdef\\n.notdef quoteleft quoteright quotedblleft\\nquotedblright bullet endash emdash\\ntilde trademark scaron guilsinglright\\noe .notdef zcaron ydieresis\\n \\nspace exclamdown cent sterling\\ncurrency yen brokenbar section\\ndieresis copyright ordfeminine guillemotleft\\nlogicalnot hyphen registered macron\\ndegree plusminus twosuperior threesuperior\\nacute mu paragraph periodcentered\\ncedilla onesuperior ordmasculine guillemotright\\nonequarter onehalf threequarters questiondown\\n \\nAgrave Aacute Acircumflex Atilde\\nAdieresis Aring AE Ccedilla\\nEgrave Eacute Ecircumflex Edieresis\\nIgrave Iacute Icircumflex Idieresis\\nEth Ntilde Ograve Oacute\\nOcircumflex Otilde Odieresis multiply\\nOslash Ugrave Uacute Ucircumflex\\nUdieresis Yacute Thorn germandbls\\n \\nagrave aacute acircumflex atilde\\nadieresis aring ae ccedilla\\negrave eacute ecircumflex edieresis\\nigrave iacute icircumflex idieresis\\neth ntilde ograve oacute\\nocircumflex otilde odieresis divide\\noslash ugrave uacute ucircumflex\\nudieresis yacute thorn ydieresis\".split(/\\s+/);\n\nvar AFMFont = /*#__PURE__*/function () {\n _createClass(AFMFont, null, [{\n key: \"open\",\n value: function open(filename) {\n return new AFMFont(fs.readFileSync(filename, 'utf8'));\n }\n }]);\n\n function AFMFont(contents) {\n _classCallCheck(this, AFMFont);\n\n this.contents = contents;\n this.attributes = {};\n this.glyphWidths = {};\n this.boundingBoxes = {};\n this.kernPairs = {};\n this.parse(); // todo: remove charWidths since appears to not be used\n\n this.charWidths = new Array(256);\n\n for (var char = 0; char <= 255; char++) {\n this.charWidths[char] = this.glyphWidths[characters[char]];\n }\n\n this.bbox = this.attributes['FontBBox'].split(/\\s+/).map(function (e) {\n return +e;\n });\n this.ascender = +(this.attributes['Ascender'] || 0);\n this.descender = +(this.attributes['Descender'] || 0);\n this.xHeight = +(this.attributes['XHeight'] || 0);\n this.capHeight = +(this.attributes['CapHeight'] || 0);\n this.lineGap = this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\n }\n\n _createClass(AFMFont, [{\n key: \"parse\",\n value: function parse() {\n var section = '';\n\n var _iterator = _createForOfIteratorHelper(this.contents.split('\\n')),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var line = _step.value;\n var match;\n var a;\n\n if (match = line.match(/^Start(\\w+)/)) {\n section = match[1];\n continue;\n } else if (match = line.match(/^End(\\w+)/)) {\n section = '';\n continue;\n }\n\n switch (section) {\n case 'FontMetrics':\n match = line.match(/(^\\w+)\\s+(.*)/);\n var key = match[1];\n var value = match[2];\n\n if (a = this.attributes[key]) {\n if (!Array.isArray(a)) {\n a = this.attributes[key] = [a];\n }\n\n a.push(value);\n } else {\n this.attributes[key] = value;\n }\n\n break;\n\n case 'CharMetrics':\n if (!/^CH?\\s/.test(line)) {\n continue;\n }\n\n var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\n this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\n break;\n\n case 'KernPairs':\n match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\n\n if (match) {\n this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\n }\n\n break;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n }, {\n key: \"encodeText\",\n value: function encodeText(text) {\n var res = [];\n\n for (var i = 0, len = text.length; i < len; i++) {\n var char = text.charCodeAt(i);\n char = WIN_ANSI_MAP[char] || char;\n res.push(char.toString(16));\n }\n\n return res;\n }\n }, {\n key: \"glyphsForString\",\n value: function glyphsForString(string) {\n var glyphs = [];\n\n for (var i = 0, len = string.length; i < len; i++) {\n var charCode = string.charCodeAt(i);\n glyphs.push(this.characterToGlyph(charCode));\n }\n\n return glyphs;\n }\n }, {\n key: \"characterToGlyph\",\n value: function characterToGlyph(character) {\n return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\n }\n }, {\n key: \"widthOfGlyph\",\n value: function widthOfGlyph(glyph) {\n return this.glyphWidths[glyph] || 0;\n }\n }, {\n key: \"getKernPair\",\n value: function getKernPair(left, right) {\n return this.kernPairs[left + '\\0' + right] || 0;\n }\n }, {\n key: \"advancesForGlyphs\",\n value: function advancesForGlyphs(glyphs) {\n var advances = [];\n\n for (var index = 0; index < glyphs.length; index++) {\n var left = glyphs[index];\n var right = glyphs[index + 1];\n advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\n }\n\n return advances;\n }\n }]);\n\n return AFMFont;\n}();\n\nvar PDFFont = /*#__PURE__*/function () {\n function PDFFont() {\n _classCallCheck(this, PDFFont);\n }\n\n _createClass(PDFFont, [{\n key: \"encode\",\n value: function encode() {\n throw new Error('Must be implemented by subclasses');\n }\n }, {\n key: \"widthOfString\",\n value: function widthOfString() {\n throw new Error('Must be implemented by subclasses');\n }\n }, {\n key: \"ref\",\n value: function ref() {\n return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref();\n }\n }, {\n key: \"finalize\",\n value: function finalize() {\n if (this.embedded || this.dictionary == null) {\n return;\n }\n\n this.embed();\n return this.embedded = true;\n }\n }, {\n key: \"embed\",\n value: function embed() {\n throw new Error('Must be implemented by subclasses');\n }\n }, {\n key: \"lineHeight\",\n value: function lineHeight(size, includeGap) {\n if (includeGap == null) {\n includeGap = false;\n }\n\n var gap = includeGap ? this.lineGap : 0;\n return (this.ascender + gap - this.descender) / 1000 * size;\n }\n }]);\n\n return PDFFont;\n}();\n\nvar STANDARD_FONTS = {\n Courier: function Courier() {\n return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\n },\n 'Courier-Bold': function CourierBold() {\n return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\n },\n 'Courier-Oblique': function CourierOblique() {\n return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\n },\n 'Courier-BoldOblique': function CourierBoldOblique() {\n return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\n },\n Helvetica: function Helvetica() {\n return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\n },\n 'Helvetica-Bold': function HelveticaBold() {\n return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\n },\n 'Helvetica-Oblique': function HelveticaOblique() {\n return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\n },\n 'Helvetica-BoldOblique': function HelveticaBoldOblique() {\n return fs.readFileSync(__dirname + '/data/Helvetica-BoldOblique.afm', 'utf8');\n },\n 'Times-Roman': function TimesRoman() {\n return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\n },\n 'Times-Bold': function TimesBold() {\n return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\n },\n 'Times-Italic': function TimesItalic() {\n return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\n },\n 'Times-BoldItalic': function TimesBoldItalic() {\n return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\n },\n Symbol: function Symbol() {\n return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\n },\n ZapfDingbats: function ZapfDingbats() {\n return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\n }\n};\n\nvar StandardFont = /*#__PURE__*/function (_PDFFont) {\n _inherits(StandardFont, _PDFFont);\n\n var _super = _createSuper(StandardFont);\n\n function StandardFont(document, name, id) {\n var _this;\n\n _classCallCheck(this, StandardFont);\n\n _this = _super.call(this);\n _this.document = document;\n _this.name = name;\n _this.id = id;\n _this.font = new AFMFont(STANDARD_FONTS[_this.name]());\n var _this$font = _this.font;\n _this.ascender = _this$font.ascender;\n _this.descender = _this$font.descender;\n _this.bbox = _this$font.bbox;\n _this.lineGap = _this$font.lineGap;\n _this.xHeight = _this$font.xHeight;\n _this.capHeight = _this$font.capHeight;\n return _this;\n }\n\n _createClass(StandardFont, [{\n key: \"embed\",\n value: function embed() {\n this.dictionary.data = {\n Type: 'Font',\n BaseFont: this.name,\n Subtype: 'Type1',\n Encoding: 'WinAnsiEncoding'\n };\n return this.dictionary.end();\n }\n }, {\n key: \"encode\",\n value: function encode(text) {\n var encoded = this.font.encodeText(text);\n var glyphs = this.font.glyphsForString(\"\".concat(text));\n var advances = this.font.advancesForGlyphs(glyphs);\n var positions = [];\n\n for (var i = 0; i < glyphs.length; i++) {\n var glyph = glyphs[i];\n positions.push({\n xAdvance: advances[i],\n yAdvance: 0,\n xOffset: 0,\n yOffset: 0,\n advanceWidth: this.font.widthOfGlyph(glyph)\n });\n }\n\n return [encoded, positions];\n }\n }, {\n key: \"widthOfString\",\n value: function widthOfString(string, size) {\n var glyphs = this.font.glyphsForString(\"\".concat(string));\n var advances = this.font.advancesForGlyphs(glyphs);\n var width = 0;\n\n var _iterator = _createForOfIteratorHelper(advances),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var advance = _step.value;\n width += advance;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var scale = size / 1000;\n return width * scale;\n }\n }], [{\n key: \"isStandardFont\",\n value: function isStandardFont(name) {\n return name in STANDARD_FONTS;\n }\n }]);\n\n return StandardFont;\n}(PDFFont);\n\nvar toHex = function toHex(num) {\n return \"0000\".concat(num.toString(16)).slice(-4);\n};\n\nvar EmbeddedFont = /*#__PURE__*/function (_PDFFont) {\n _inherits(EmbeddedFont, _PDFFont);\n\n var _super = _createSuper(EmbeddedFont);\n\n function EmbeddedFont(document, font, id) {\n var _this;\n\n _classCallCheck(this, EmbeddedFont);\n\n _this = _super.call(this);\n _this.document = document;\n _this.font = font;\n _this.id = id;\n _this.subset = _this.font.createSubset();\n _this.unicode = [[0]];\n _this.widths = [_this.font.getGlyph(0).advanceWidth];\n _this.name = _this.font.postscriptName;\n _this.scale = 1000 / _this.font.unitsPerEm;\n _this.ascender = _this.font.ascent * _this.scale;\n _this.descender = _this.font.descent * _this.scale;\n _this.xHeight = _this.font.xHeight * _this.scale;\n _this.capHeight = _this.font.capHeight * _this.scale;\n _this.lineGap = _this.font.lineGap * _this.scale;\n _this.bbox = _this.font.bbox;\n\n if (document.options.fontLayoutCache !== false) {\n _this.layoutCache = Object.create(null);\n }\n\n return _this;\n }\n\n _createClass(EmbeddedFont, [{\n key: \"layoutRun\",\n value: function layoutRun(text, features) {\n var run = this.font.layout(text, features); // Normalize position values\n\n for (var i = 0; i < run.positions.length; i++) {\n var position = run.positions[i];\n\n for (var key in position) {\n position[key] *= this.scale;\n }\n\n position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\n }\n\n return run;\n }\n }, {\n key: \"layoutCached\",\n value: function layoutCached(text) {\n if (!this.layoutCache) {\n return this.layoutRun(text);\n }\n\n var cached;\n\n if (cached = this.layoutCache[text]) {\n return cached;\n }\n\n var run = this.layoutRun(text);\n this.layoutCache[text] = run;\n return run;\n }\n }, {\n key: \"layout\",\n value: function layout(text, features, onlyWidth) {\n // Skip the cache if any user defined features are applied\n if (features) {\n return this.layoutRun(text, features);\n }\n\n var glyphs = onlyWidth ? null : [];\n var positions = onlyWidth ? null : [];\n var advanceWidth = 0; // Split the string by words to increase cache efficiency.\n // For this purpose, spaces and tabs are a good enough delimeter.\n\n var last = 0;\n var index = 0;\n\n while (index <= text.length) {\n var needle;\n\n if (index === text.length && last < index || (needle = text.charAt(index), [' ', '\\t'].includes(needle))) {\n var run = this.layoutCached(text.slice(last, ++index));\n\n if (!onlyWidth) {\n glyphs = glyphs.concat(run.glyphs);\n positions = positions.concat(run.positions);\n }\n\n advanceWidth += run.advanceWidth;\n last = index;\n } else {\n index++;\n }\n }\n\n return {\n glyphs: glyphs,\n positions: positions,\n advanceWidth: advanceWidth\n };\n }\n }, {\n key: \"encode\",\n value: function encode(text, features) {\n var _this$layout = this.layout(text, features),\n glyphs = _this$layout.glyphs,\n positions = _this$layout.positions;\n\n var res = [];\n\n for (var i = 0; i < glyphs.length; i++) {\n var glyph = glyphs[i];\n var gid = this.subset.includeGlyph(glyph.id);\n res.push(\"0000\".concat(gid.toString(16)).slice(-4));\n\n if (this.widths[gid] == null) {\n this.widths[gid] = glyph.advanceWidth * this.scale;\n }\n\n if (this.unicode[gid] == null) {\n this.unicode[gid] = glyph.codePoints;\n }\n }\n\n return [res, positions];\n }\n }, {\n key: \"widthOfString\",\n value: function widthOfString(string, size, features) {\n var width = this.layout(string, features, true).advanceWidth;\n var scale = size / 1000;\n return width * scale;\n }\n }, {\n key: \"embed\",\n value: function embed() {\n var _this2 = this;\n\n var isCFF = this.subset.cff != null;\n var fontFile = this.document.ref();\n\n if (isCFF) {\n fontFile.data.Subtype = 'CIDFontType0C';\n }\n\n this.subset.encodeStream().on('data', function (data) {\n return fontFile.write(data);\n }).on('end', function () {\n return fontFile.end();\n });\n var familyClass = ((this.font['OS/2'] != null ? this.font['OS/2'].sFamilyClass : undefined) || 0) >> 8;\n var flags = 0;\n\n if (this.font.post.isFixedPitch) {\n flags |= 1 << 0;\n }\n\n if (1 <= familyClass && familyClass <= 7) {\n flags |= 1 << 1;\n }\n\n flags |= 1 << 2; // assume the font uses non-latin characters\n\n if (familyClass === 10) {\n flags |= 1 << 3;\n }\n\n if (this.font.head.macStyle.italic) {\n flags |= 1 << 6;\n } // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z')\n\n\n var tag = [1, 2, 3, 4, 5, 6].map(function (i) {\n return String.fromCharCode((_this2.id.charCodeAt(i) || 73) + 17);\n }).join('');\n var name = tag + '+' + this.font.postscriptName;\n var bbox = this.font.bbox;\n var descriptor = this.document.ref({\n Type: 'FontDescriptor',\n FontName: name,\n Flags: flags,\n FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale],\n ItalicAngle: this.font.italicAngle,\n Ascent: this.ascender,\n Descent: this.descender,\n CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\n XHeight: (this.font.xHeight || 0) * this.scale,\n StemV: 0\n }); // not sure how to calculate this\n\n if (isCFF) {\n descriptor.data.FontFile3 = fontFile;\n } else {\n descriptor.data.FontFile2 = fontFile;\n }\n\n descriptor.end();\n var descendantFontData = {\n Type: 'Font',\n Subtype: 'CIDFontType0',\n BaseFont: name,\n CIDSystemInfo: {\n Registry: new String('Adobe'),\n Ordering: new String('Identity'),\n Supplement: 0\n },\n FontDescriptor: descriptor,\n W: [0, this.widths]\n };\n\n if (!isCFF) {\n descendantFontData.Subtype = 'CIDFontType2';\n descendantFontData.CIDToGIDMap = 'Identity';\n }\n\n var descendantFont = this.document.ref(descendantFontData);\n descendantFont.end();\n this.dictionary.data = {\n Type: 'Font',\n Subtype: 'Type0',\n BaseFont: name,\n Encoding: 'Identity-H',\n DescendantFonts: [descendantFont],\n ToUnicode: this.toUnicodeCmap()\n };\n return this.dictionary.end();\n } // Maps the glyph ids encoded in the PDF back to unicode strings\n // Because of ligature substitutions and the like, there may be one or more\n // unicode characters represented by each glyph.\n\n }, {\n key: \"toUnicodeCmap\",\n value: function toUnicodeCmap() {\n var cmap = this.document.ref();\n var entries = [];\n\n var _iterator = _createForOfIteratorHelper(this.unicode),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var codePoints = _step.value;\n var encoded = []; // encode codePoints to utf16\n\n var _iterator2 = _createForOfIteratorHelper(codePoints),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var value = _step2.value;\n\n if (value > 0xffff) {\n value -= 0x10000;\n encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800));\n value = 0xdc00 | value & 0x3ff;\n }\n\n encoded.push(toHex(value));\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n entries.push(\"<\".concat(encoded.join(' '), \">\"));\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n cmap.end(\"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n /Registry (Adobe)\\n /Ordering (UCS)\\n /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000><ffff>\\nendcodespacerange\\n1 beginbfrange\\n<0000> <\".concat(toHex(entries.length - 1), \"> [\").concat(entries.join(' '), \"]\\nendbfrange\\nendcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\"));\n return cmap;\n }\n }]);\n\n return EmbeddedFont;\n}(PDFFont);\n\nvar PDFFontFactory = /*#__PURE__*/function () {\n function PDFFontFactory() {\n _classCallCheck(this, PDFFontFactory);\n }\n\n _createClass(PDFFontFactory, null, [{\n key: \"open\",\n value: function open(document, src, family, id) {\n var font;\n\n if (typeof src === 'string') {\n if (StandardFont.isStandardFont(src)) {\n return new StandardFont(document, src, id);\n }\n\n src = fs.readFileSync(src);\n }\n\n if (Buffer.isBuffer(src)) {\n font = _fontkit.default.create(src, family);\n } else if (src instanceof Uint8Array) {\n font = _fontkit.default.create(Buffer.from(src), family);\n } else if (src instanceof ArrayBuffer) {\n font = _fontkit.default.create(Buffer.from(new Uint8Array(src)), family);\n }\n\n if (font == null) {\n throw new Error('Not a supported font format or standard PDF font.');\n }\n\n return new EmbeddedFont(document, font, id);\n }\n }]);\n\n return PDFFontFactory;\n}();\n\nvar FontsMixin = {\n initFonts: function initFonts() {\n var defaultFont = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Helvetica'; // Lookup table for embedded fonts\n\n this._fontFamilies = {};\n this._fontCount = 0; // Font state\n\n this._fontSize = 12;\n this._font = null;\n this._registeredFonts = {}; // Set the default font\n\n if (defaultFont) {\n this.font(defaultFont);\n }\n },\n font: function font(src, family, size) {\n var cacheKey, font;\n\n if (typeof family === 'number') {\n size = family;\n family = null;\n } // check registered fonts if src is a string\n\n\n if (typeof src === 'string' && this._registeredFonts[src]) {\n cacheKey = src;\n var _this$_registeredFont = this._registeredFonts[src];\n src = _this$_registeredFont.src;\n family = _this$_registeredFont.family;\n } else {\n cacheKey = family || src;\n\n if (typeof cacheKey !== 'string') {\n cacheKey = null;\n }\n }\n\n if (size != null) {\n this.fontSize(size);\n } // fast path: check if the font is already in the PDF\n\n\n if (font = this._fontFamilies[cacheKey]) {\n this._font = font;\n return this;\n } // load the font\n\n\n var id = \"F\".concat(++this._fontCount);\n this._font = PDFFontFactory.open(this, src, family, id); // check for existing font familes with the same name already in the PDF\n // useful if the font was passed as a buffer\n\n if (font = this._fontFamilies[this._font.name]) {\n this._font = font;\n return this;\n } // save the font for reuse later\n\n\n if (cacheKey) {\n this._fontFamilies[cacheKey] = this._font;\n }\n\n if (this._font.name) {\n this._fontFamilies[this._font.name] = this._font;\n }\n\n return this;\n },\n fontSize: function fontSize(_fontSize) {\n this._fontSize = _fontSize;\n return this;\n },\n currentLineHeight: function currentLineHeight(includeGap) {\n if (includeGap == null) {\n includeGap = false;\n }\n\n return this._font.lineHeight(this._fontSize, includeGap);\n },\n registerFont: function registerFont(name, src, family) {\n this._registeredFonts[name] = {\n src: src,\n family: family\n };\n return this;\n }\n};\n\nvar LineWrapper = /*#__PURE__*/function (_EventEmitter) {\n _inherits(LineWrapper, _EventEmitter);\n\n var _super = _createSuper(LineWrapper);\n\n function LineWrapper(document, options) {\n var _this;\n\n _classCallCheck(this, LineWrapper);\n\n _this = _super.call(this);\n _this.document = document;\n _this.indent = options.indent || 0;\n _this.characterSpacing = options.characterSpacing || 0;\n _this.wordSpacing = options.wordSpacing === 0;\n _this.columns = options.columns || 1;\n _this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch\n\n _this.lineWidth = (options.width - _this.columnGap * (_this.columns - 1)) / _this.columns;\n _this.spaceLeft = _this.lineWidth;\n _this.startX = _this.document.x;\n _this.startY = _this.document.y;\n _this.column = 1;\n _this.ellipsis = options.ellipsis;\n _this.continuedX = 0;\n _this.features = options.features; // calculate the maximum Y position the text can appear at\n\n if (options.height != null) {\n _this.height = options.height;\n _this.maxY = _this.startY + options.height;\n } else {\n _this.maxY = _this.document.page.maxY();\n } // handle paragraph indents\n\n\n _this.on('firstLine', function (options) {\n // if this is the first line of the text segment, and\n // we're continuing where we left off, indent that much\n // otherwise use the user specified indent option\n var indent = _this.continuedX || _this.indent;\n _this.document.x += indent;\n _this.lineWidth -= indent;\n return _this.once('line', function () {\n _this.document.x -= indent;\n _this.lineWidth += indent;\n\n if (options.continued && !_this.continuedX) {\n _this.continuedX = _this.indent;\n }\n\n if (!options.continued) {\n return _this.continuedX = 0;\n }\n });\n }); // handle left aligning last lines of paragraphs\n\n\n _this.on('lastLine', function (options) {\n var align = options.align;\n\n if (align === 'justify') {\n options.align = 'left';\n }\n\n _this.lastLine = true;\n return _this.once('line', function () {\n _this.document.y += options.paragraphGap || 0;\n options.align = align;\n return _this.lastLine = false;\n });\n });\n\n return _this;\n }\n\n _createClass(LineWrapper, [{\n key: \"wordWidth\",\n value: function wordWidth(word) {\n return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing;\n }\n }, {\n key: \"eachWord\",\n value: function eachWord(text, fn) {\n // setup a unicode line breaker\n var bk;\n var breaker = new _linebreak.default(text);\n var last = null;\n var wordWidths = Object.create(null);\n\n while (bk = breaker.nextBreak()) {\n var shouldContinue;\n var word = text.slice((last != null ? last.position : undefined) || 0, bk.position);\n var w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word); // if the word is longer than the whole line, chop it up\n // TODO: break by grapheme clusters, not JS string characters\n\n if (w > this.lineWidth + this.continuedX) {\n // make some fake break objects\n var lbk = last;\n var fbk = {};\n\n while (word.length) {\n // fit as much of the word as possible into the space we have\n var l, mightGrow;\n\n if (w > this.spaceLeft) {\n // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\n // an issue with long loops when processing massive words, such as a huge number of spaces\n l = Math.ceil(this.spaceLeft / (w / word.length));\n w = this.wordWidth(word.slice(0, l));\n mightGrow = w <= this.spaceLeft && l < word.length;\n } else {\n l = word.length;\n }\n\n var mustShrink = w > this.spaceLeft && l > 0; // shrink or grow word as necessary after our near-guess above\n\n while (mustShrink || mightGrow) {\n if (mustShrink) {\n w = this.wordWidth(word.slice(0, --l));\n mustShrink = w > this.spaceLeft && l > 0;\n } else {\n w = this.wordWidth(word.slice(0, ++l));\n mustShrink = w > this.spaceLeft && l > 0;\n mightGrow = w <= this.spaceLeft && l < word.length;\n }\n } // check for the edge case where a single character cannot fit into a line.\n\n\n if (l === 0 && this.spaceLeft === this.lineWidth) {\n l = 1;\n } // send a required break unless this is the last piece and a linebreak is not specified\n\n\n fbk.required = bk.required || l < word.length;\n shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\n lbk = {\n required: false\n }; // get the remaining piece of the word\n\n word = word.slice(l);\n w = this.wordWidth(word);\n\n if (shouldContinue === false) {\n break;\n }\n }\n } else {\n // otherwise just emit the break as it was given to us\n shouldContinue = fn(word, w, bk, last);\n }\n\n if (shouldContinue === false) {\n break;\n }\n\n last = bk;\n }\n }\n }, {\n key: \"wrap\",\n value: function wrap(text, options) {\n var _this2 = this; // override options from previous continued fragments\n\n\n if (options.indent != null) {\n this.indent = options.indent;\n }\n\n if (options.characterSpacing != null) {\n this.characterSpacing = options.characterSpacing;\n }\n\n if (options.wordSpacing != null) {\n this.wordSpacing = options.wordSpacing;\n }\n\n if (options.ellipsis != null) {\n this.ellipsis = options.ellipsis;\n } // make sure we're actually on the page\n // and that the first line of is never by\n // itself at the bottom of a page (orphans)\n\n\n var nextY = this.document.y + this.document.currentLineHeight(true);\n\n if (this.document.y > this.maxY || nextY > this.maxY) {\n this.nextSection();\n }\n\n var buffer = '';\n var textWidth = 0;\n var wc = 0;\n var lc = 0;\n var y = this.document.y; // used to reset Y pos if options.continued (below)\n\n var emitLine = function emitLine() {\n options.textWidth = textWidth + _this2.wordSpacing * (wc - 1);\n options.wordCount = wc;\n options.lineWidth = _this2.lineWidth;\n y = _this2.document.y;\n\n _this2.emit('line', buffer, options, _this2);\n\n return lc++;\n };\n\n this.emit('sectionStart', options, this);\n this.eachWord(text, function (word, w, bk, last) {\n if (last == null || last.required) {\n _this2.emit('firstLine', options, _this2);\n\n _this2.spaceLeft = _this2.lineWidth;\n }\n\n if (w <= _this2.spaceLeft) {\n buffer += word;\n textWidth += w;\n wc++;\n }\n\n if (bk.required || w > _this2.spaceLeft) {\n // if the user specified a max height and an ellipsis, and is about to pass the\n // max height and max columns after the next line, append the ellipsis\n var lh = _this2.document.currentLineHeight(true);\n\n if (_this2.height != null && _this2.ellipsis && _this2.document.y + lh * 2 > _this2.maxY && _this2.column >= _this2.columns) {\n if (_this2.ellipsis === true) {\n _this2.ellipsis = '…';\n } // map default ellipsis character\n\n\n buffer = buffer.replace(/\\s+$/, '');\n textWidth = _this2.wordWidth(buffer + _this2.ellipsis); // remove characters from the buffer until the ellipsis fits\n // to avoid infinite loop need to stop while-loop if buffer is empty string\n\n while (buffer && textWidth > _this2.lineWidth) {\n buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\n textWidth = _this2.wordWidth(buffer + _this2.ellipsis);\n } // need to add ellipsis only if there is enough space for it\n\n\n if (textWidth <= _this2.lineWidth) {\n buffer = buffer + _this2.ellipsis;\n }\n\n textWidth = _this2.wordWidth(buffer);\n }\n\n if (bk.required) {\n if (w > _this2.spaceLeft) {\n emitLine();\n buffer = word;\n textWidth = w;\n wc = 1;\n }\n\n _this2.emit('lastLine', options, _this2);\n }\n\n emitLine(); // if we've reached the edge of the page,\n // continue on a new page or column\n\n if (_this2.document.y + lh > _this2.maxY) {\n var shouldContinue = _this2.nextSection(); // stop if we reached the maximum height\n\n\n if (!shouldContinue) {\n wc = 0;\n buffer = '';\n return false;\n }\n } // reset the space left and buffer\n\n\n if (bk.required) {\n _this2.spaceLeft = _this2.lineWidth;\n buffer = '';\n textWidth = 0;\n return wc = 0;\n } else {\n // reset the space left and buffer\n _this2.spaceLeft = _this2.lineWidth - w;\n buffer = word;\n textWidth = w;\n return wc = 1;\n }\n } else {\n return _this2.spaceLeft -= w;\n }\n });\n\n if (wc > 0) {\n this.emit('lastLine', options, this);\n emitLine();\n }\n\n this.emit('sectionEnd', options, this); // if the wrap is set to be continued, save the X position\n // to start the first line of the next segment at, and reset\n // the y position\n\n if (options.continued === true) {\n if (lc > 1) {\n this.continuedX = 0;\n }\n\n this.continuedX += options.textWidth || 0;\n return this.document.y = y;\n } else {\n return this.document.x = this.startX;\n }\n }\n }, {\n key: \"nextSection\",\n value: function nextSection(options) {\n this.emit('sectionEnd', options, this);\n\n if (++this.column > this.columns) {\n // if a max height was specified by the user, we're done.\n // otherwise, the default is to make a new page at the bottom.\n if (this.height != null) {\n return false;\n }\n\n this.document.continueOnNewPage();\n this.column = 1;\n this.startY = this.document.page.margins.top;\n this.maxY = this.document.page.maxY();\n this.document.x = this.startX;\n\n if (this.document._fillColor) {\n var _this$document;\n\n (_this$document = this.document).fillColor.apply(_this$document, _toConsumableArray(this.document._fillColor));\n }\n\n this.emit('pageBreak', options, this);\n } else {\n this.document.x += this.lineWidth + this.columnGap;\n this.document.y = this.startY;\n this.emit('columnBreak', options, this);\n }\n\n this.emit('sectionStart', options, this);\n return true;\n }\n }]);\n\n return LineWrapper;\n}(_events.EventEmitter);\n\nvar number$2 = PDFObject.number;\nvar TextMixin = {\n initText: function initText() {\n this._line = this._line.bind(this); // Current coordinates\n\n this.x = 0;\n this.y = 0;\n return this._lineGap = 0;\n },\n lineGap: function lineGap(_lineGap) {\n this._lineGap = _lineGap;\n return this;\n },\n moveDown: function moveDown(lines) {\n if (lines == null) {\n lines = 1;\n }\n\n this.y += this.currentLineHeight(true) * lines + this._lineGap;\n return this;\n },\n moveUp: function moveUp(lines) {\n if (lines == null) {\n lines = 1;\n }\n\n this.y -= this.currentLineHeight(true) * lines + this._lineGap;\n return this;\n },\n _text: function _text(text, x, y, options, lineCallback) {\n var _this = this;\n\n options = this._initOptions(x, y, options); // Convert text to a string\n\n text = text == null ? '' : \"\".concat(text); // if the wordSpacing option is specified, remove multiple consecutive spaces\n\n if (options.wordSpacing) {\n text = text.replace(/\\s{2,}/g, ' ');\n }\n\n var addStructure = function addStructure() {\n if (options.structParent) {\n options.structParent.add(_this.struct(options.structType || 'P', [_this.markStructureContent(options.structType || 'P')]));\n }\n }; // word wrapping\n\n\n if (options.width) {\n var wrapper = this._wrapper;\n\n if (!wrapper) {\n wrapper = new LineWrapper(this, options);\n wrapper.on('line', lineCallback);\n wrapper.on('firstLine', addStructure);\n }\n\n this._wrapper = options.continued ? wrapper : null;\n this._textOptions = options.continued ? options : null;\n wrapper.wrap(text, options); // render paragraphs as single lines\n } else {\n var _iterator = _createForOfIteratorHelper(text.split('\\n')),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var line = _step.value;\n addStructure();\n lineCallback(line, options);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n return this;\n },\n text: function text(_text2, x, y, options) {\n return this._text(_text2, x, y, options, this._line);\n },\n widthOfString: function widthOfString(string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1);\n },\n heightOfString: function heightOfString(text, options) {\n var _this2 = this;\n\n var x = this.x,\n y = this.y;\n options = this._initOptions(options);\n options.height = Infinity; // don't break pages\n\n var lineGap = options.lineGap || this._lineGap || 0;\n\n this._text(text, this.x, this.y, options, function () {\n return _this2.y += _this2.currentLineHeight(true) + lineGap;\n });\n\n var height = this.y - y;\n this.x = x;\n this.y = y;\n return height;\n },\n list: function list(_list, x, y, options, wrapper) {\n var _this3 = this;\n\n options = this._initOptions(x, y, options);\n var listType = options.listType || 'bullet';\n var unit = Math.round(this._font.ascender / 1000 * this._fontSize);\n var midLine = unit / 2;\n var r = options.bulletRadius || unit / 3;\n var indent = options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\n var itemIndent = options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\n var level = 1;\n var items = [];\n var levels = [];\n var numbers = [];\n\n var flatten = function flatten(list) {\n var n = 1;\n\n for (var _i = 0; _i < list.length; _i++) {\n var item = list[_i];\n\n if (Array.isArray(item)) {\n level++;\n flatten(item);\n level--;\n } else {\n items.push(item);\n levels.push(level);\n\n if (listType !== 'bullet') {\n numbers.push(n++);\n }\n }\n }\n };\n\n flatten(_list);\n\n var label = function label(n) {\n switch (listType) {\n case 'numbered':\n return \"\".concat(n, \".\");\n\n case 'lettered':\n var letter = String.fromCharCode((n - 1) % 26 + 65);\n var times = Math.floor((n - 1) / 26 + 1);\n var text = Array(times + 1).join(letter);\n return \"\".concat(text, \".\");\n }\n };\n\n wrapper = new LineWrapper(this, options);\n wrapper.on('line', this._line);\n level = 1;\n var i = 0;\n wrapper.on('firstLine', function () {\n var item, itemType, labelType, bodyType;\n\n if (options.structParent) {\n if (options.structTypes) {\n var _options$structTypes = _slicedToArray(options.structTypes, 3);\n\n itemType = _options$structTypes[0];\n labelType = _options$structTypes[1];\n bodyType = _options$structTypes[2];\n } else {\n itemType = 'LI';\n labelType = 'Lbl';\n bodyType = 'LBody';\n }\n }\n\n if (itemType) {\n item = _this3.struct(itemType);\n options.structParent.add(item);\n } else if (options.structParent) {\n item = options.structParent;\n }\n\n var l;\n\n if ((l = levels[i++]) !== level) {\n var diff = itemIndent * (l - level);\n _this3.x += diff;\n wrapper.lineWidth -= diff;\n level = l;\n }\n\n if (item && (labelType || bodyType)) {\n item.add(_this3.struct(labelType || bodyType, [_this3.markStructureContent(labelType || bodyType)]));\n }\n\n switch (listType) {\n case 'bullet':\n _this3.circle(_this3.x - indent + r, _this3.y + midLine, r);\n\n _this3.fill();\n\n break;\n\n case 'numbered':\n case 'lettered':\n var text = label(numbers[i - 1]);\n\n _this3._fragment(text, _this3.x - indent, _this3.y, options);\n\n break;\n }\n\n if (item && labelType && bodyType) {\n item.add(_this3.struct(bodyType, [_this3.markStructureContent(bodyType)]));\n }\n\n if (item && item !== options.structParent) {\n item.end();\n }\n });\n wrapper.on('sectionStart', function () {\n var pos = indent + itemIndent * (level - 1);\n _this3.x += pos;\n return wrapper.lineWidth -= pos;\n });\n wrapper.on('sectionEnd', function () {\n var pos = indent + itemIndent * (level - 1);\n _this3.x -= pos;\n return wrapper.lineWidth += pos;\n });\n wrapper.wrap(items.join('\\n'), options);\n return this;\n },\n _initOptions: function _initOptions() {\n var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var y = arguments.length > 1 ? arguments[1] : undefined;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (typeof x === 'object') {\n options = x;\n x = null;\n } // clone options object\n\n\n var result = Object.assign({}, options); // extend options with previous values for continued text\n\n if (this._textOptions) {\n for (var key in this._textOptions) {\n var val = this._textOptions[key];\n\n if (key !== 'continued') {\n if (result[key] === undefined) {\n result[key] = val;\n }\n }\n }\n } // Update the current position\n\n\n if (x != null) {\n this.x = x;\n }\n\n if (y != null) {\n this.y = y;\n } // wrap to margins if no x or y position passed\n\n\n if (result.lineBreak !== false) {\n if (result.width == null) {\n result.width = this.page.width - this.x - this.page.margins.right;\n }\n\n result.width = Math.max(result.width, 0);\n }\n\n if (!result.columns) {\n result.columns = 0;\n }\n\n if (result.columnGap == null) {\n result.columnGap = 18;\n } // 1/4 inch\n\n\n return result;\n },\n _line: function _line(text) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var wrapper = arguments.length > 2 ? arguments[2] : undefined;\n\n this._fragment(text, this.x, this.y, options);\n\n var lineGap = options.lineGap || this._lineGap || 0;\n\n if (!wrapper) {\n return this.x += this.widthOfString(text);\n } else {\n return this.y += this.currentLineHeight(true) + lineGap;\n }\n },\n _fragment: function _fragment(text, x, y, options) {\n var _this4 = this;\n\n var dy, encoded, i, positions, textWidth, words;\n text = \"\".concat(text).replace(/\\n/g, '');\n\n if (text.length === 0) {\n return;\n } // handle options\n\n\n var align = options.align || 'left';\n var wordSpacing = options.wordSpacing || 0;\n var characterSpacing = options.characterSpacing || 0; // text alignments\n\n if (options.width) {\n switch (align) {\n case 'right':\n textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\n x += options.lineWidth - textWidth;\n break;\n\n case 'center':\n x += options.lineWidth / 2 - options.textWidth / 2;\n break;\n\n case 'justify':\n // calculate the word spacing value\n words = text.trim().split(/\\s+/);\n textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\n var spaceWidth = this.widthOfString(' ') + characterSpacing;\n wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth);\n break;\n }\n } // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\n\n\n if (typeof options.baseline === 'number') {\n dy = -options.baseline;\n } else {\n switch (options.baseline) {\n case 'svg-middle':\n dy = 0.5 * this._font.xHeight;\n break;\n\n case 'middle':\n case 'svg-central':\n dy = 0.5 * (this._font.descender + this._font.ascender);\n break;\n\n case 'bottom':\n case 'ideographic':\n dy = this._font.descender;\n break;\n\n case 'alphabetic':\n dy = 0;\n break;\n\n case 'mathematical':\n dy = 0.5 * this._font.ascender;\n break;\n\n case 'hanging':\n dy = 0.8 * this._font.ascender;\n break;\n\n case 'top':\n dy = this._font.ascender;\n break;\n\n default:\n dy = this._font.ascender;\n }\n\n dy = dy / 1000 * this._fontSize;\n } // calculate the actual rendered width of the string after word and character spacing\n\n\n var renderedWidth = options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1); // create link annotations if the link option is given\n\n if (options.link != null) {\n this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\n }\n\n if (options.goTo != null) {\n this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);\n }\n\n if (options.destination != null) {\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\n } // create underline\n\n\n if (options.underline) {\n this.save();\n\n if (!options.stroke) {\n this.strokeColor.apply(this, _toConsumableArray(this._fillColor || []));\n }\n\n var lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\n this.lineWidth(lineWidth);\n var lineY = y + this.currentLineHeight() - lineWidth;\n this.moveTo(x, lineY);\n this.lineTo(x + renderedWidth, lineY);\n this.stroke();\n this.restore();\n } // create strikethrough line\n\n\n if (options.strike) {\n this.save();\n\n if (!options.stroke) {\n this.strokeColor.apply(this, _toConsumableArray(this._fillColor || []));\n }\n\n var _lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\n\n this.lineWidth(_lineWidth);\n\n var _lineY = y + this.currentLineHeight() / 2;\n\n this.moveTo(x, _lineY);\n this.lineTo(x + renderedWidth, _lineY);\n this.stroke();\n this.restore();\n }\n\n this.save(); // oblique (angle in degrees or boolean)\n\n if (options.oblique) {\n var skew;\n\n if (typeof options.oblique === 'number') {\n skew = -Math.tan(options.oblique * Math.PI / 180);\n } else {\n skew = -0.25;\n }\n\n this.transform(1, 0, 0, 1, x, y);\n this.transform(1, 0, skew, 1, -skew * dy, 0);\n this.transform(1, 0, 0, 1, -x, -y);\n } // flip coordinate system\n\n\n this.transform(1, 0, 0, -1, 0, this.page.height);\n y = this.page.height - y - dy; // add current font to page if necessary\n\n if (this.page.fonts[this._font.id] == null) {\n this.page.fonts[this._font.id] = this._font.ref();\n } // begin the text object\n\n\n this.addContent('BT'); // text position\n\n this.addContent(\"1 0 0 1 \".concat(number$2(x), \" \").concat(number$2(y), \" Tm\")); // font and font size\n\n this.addContent(\"/\".concat(this._font.id, \" \").concat(number$2(this._fontSize), \" Tf\")); // rendering mode\n\n var mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\n\n if (mode) {\n this.addContent(\"\".concat(mode, \" Tr\"));\n } // Character spacing\n\n\n if (characterSpacing) {\n this.addContent(\"\".concat(number$2(characterSpacing), \" Tc\"));\n } // Add the actual text\n // If we have a word spacing value, we need to encode each word separately\n // since the normal Tw operator only works on character code 32, which isn't\n // used for embedded fonts.\n\n\n if (wordSpacing) {\n words = text.trim().split(/\\s+/);\n wordSpacing += this.widthOfString(' ') + characterSpacing;\n wordSpacing *= 1000 / this._fontSize;\n encoded = [];\n positions = [];\n\n var _iterator2 = _createForOfIteratorHelper(words),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var word = _step2.value;\n\n var _this$_font$encode = this._font.encode(word, options.features),\n _this$_font$encode2 = _slicedToArray(_this$_font$encode, 2),\n encodedWord = _this$_font$encode2[0],\n positionsWord = _this$_font$encode2[1];\n\n encoded = encoded.concat(encodedWord);\n positions = positions.concat(positionsWord); // add the word spacing to the end of the word\n // clone object because of cache\n\n var space = {};\n var object = positions[positions.length - 1];\n\n for (var key in object) {\n var val = object[key];\n space[key] = val;\n }\n\n space.xAdvance += wordSpacing;\n positions[positions.length - 1] = space;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n } else {\n var _this$_font$encode3 = this._font.encode(text, options.features);\n\n var _this$_font$encode4 = _slicedToArray(_this$_font$encode3, 2);\n\n encoded = _this$_font$encode4[0];\n positions = _this$_font$encode4[1];\n }\n\n var scale = this._fontSize / 1000;\n var commands = [];\n var last = 0;\n var hadOffset = false; // Adds a segment of text to the TJ command buffer\n\n var addSegment = function addSegment(cur) {\n if (last < cur) {\n var hex = encoded.slice(last, cur).join('');\n var advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\n commands.push(\"<\".concat(hex, \"> \").concat(number$2(-advance)));\n }\n\n return last = cur;\n }; // Flushes the current TJ commands to the output stream\n\n\n var flush = function flush(i) {\n addSegment(i);\n\n if (commands.length > 0) {\n _this4.addContent(\"[\".concat(commands.join(' '), \"] TJ\"));\n\n return commands.length = 0;\n }\n };\n\n for (i = 0; i < positions.length; i++) {\n // If we have an x or y offset, we have to break out of the current TJ command\n // so we can move the text position.\n var pos = positions[i];\n\n if (pos.xOffset || pos.yOffset) {\n // Flush the current buffer\n flush(i); // Move the text position and flush just the current character\n\n this.addContent(\"1 0 0 1 \".concat(number$2(x + pos.xOffset * scale), \" \").concat(number$2(y + pos.yOffset * scale), \" Tm\"));\n flush(i + 1);\n hadOffset = true;\n } else {\n // If the last character had an offset, reset the text position\n if (hadOffset) {\n this.addContent(\"1 0 0 1 \".concat(number$2(x), \" \").concat(number$2(y), \" Tm\"));\n hadOffset = false;\n } // Group segments that don't have any advance adjustments\n\n\n if (pos.xAdvance - pos.advanceWidth !== 0) {\n addSegment(i + 1);\n }\n }\n\n x += pos.xAdvance * scale;\n } // Flush any remaining commands\n\n\n flush(i); // end the text object\n\n this.addContent('ET'); // restore flipped coordinate system\n\n return this.restore();\n }\n};\nvar MARKERS = [0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf];\nvar COLOR_SPACE_MAP = {\n 1: 'DeviceGray',\n 3: 'DeviceRGB',\n 4: 'DeviceCMYK'\n};\n\nvar JPEG = /*#__PURE__*/function () {\n function JPEG(data, label) {\n _classCallCheck(this, JPEG);\n\n var marker;\n this.data = data;\n this.label = label;\n\n if (this.data.readUInt16BE(0) !== 0xffd8) {\n throw 'SOI not found in JPEG';\n }\n\n var pos = 2;\n\n while (pos < this.data.length) {\n marker = this.data.readUInt16BE(pos);\n pos += 2;\n\n if (MARKERS.includes(marker)) {\n break;\n }\n\n pos += this.data.readUInt16BE(pos);\n }\n\n if (!MARKERS.includes(marker)) {\n throw 'Invalid JPEG.';\n }\n\n pos += 2;\n this.bits = this.data[pos++];\n this.height = this.data.readUInt16BE(pos);\n pos += 2;\n this.width = this.data.readUInt16BE(pos);\n pos += 2;\n var channels = this.data[pos++];\n this.colorSpace = COLOR_SPACE_MAP[channels];\n this.obj = null;\n }\n\n _createClass(JPEG, [{\n key: \"embed\",\n value: function embed(document) {\n if (this.obj) {\n return;\n }\n\n this.obj = document.ref({\n Type: 'XObject',\n Subtype: 'Image',\n BitsPerComponent: this.bits,\n Width: this.width,\n Height: this.height,\n ColorSpace: this.colorSpace,\n Filter: 'DCTDecode'\n }); // add extra decode params for CMYK images. By swapping the\n // min and max values from the default, we invert the colors. See\n // section 4.8.4 of the spec.\n\n if (this.colorSpace === 'DeviceCMYK') {\n this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\n }\n\n this.obj.end(this.data); // free memory\n\n return this.data = null;\n }\n }]);\n\n return JPEG;\n}();\n\nvar PNGImage = /*#__PURE__*/function () {\n function PNGImage(data, label) {\n _classCallCheck(this, PNGImage);\n\n this.label = label;\n this.image = new _pngJs.default(data);\n this.width = this.image.width;\n this.height = this.image.height;\n this.imgData = this.image.imgData;\n this.obj = null;\n }\n\n _createClass(PNGImage, [{\n key: \"embed\",\n value: function embed(document) {\n var dataDecoded = false;\n this.document = document;\n\n if (this.obj) {\n return;\n }\n\n var hasAlphaChannel = this.image.hasAlphaChannel;\n var isInterlaced = this.image.interlaceMethod === 1;\n this.obj = this.document.ref({\n Type: 'XObject',\n Subtype: 'Image',\n BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\n Width: this.width,\n Height: this.height,\n Filter: 'FlateDecode'\n });\n\n if (!hasAlphaChannel) {\n var params = this.document.ref({\n Predictor: isInterlaced ? 1 : 15,\n Colors: this.image.colors,\n BitsPerComponent: this.image.bits,\n Columns: this.width\n });\n this.obj.data['DecodeParms'] = params;\n params.end();\n }\n\n if (this.image.palette.length === 0) {\n this.obj.data['ColorSpace'] = this.image.colorSpace;\n } else {\n // embed the color palette in the PDF as an object stream\n var palette = this.document.ref();\n palette.end(Buffer.from(this.image.palette)); // build the color space array for the image\n\n this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', this.image.palette.length / 3 - 1, palette];\n } // For PNG color types 0, 2 and 3, the transparency data is stored in\n // a dedicated PNG chunk.\n\n\n if (this.image.transparency.grayscale != null) {\n // Use Color Key Masking (spec section 4.8.5)\n // An array with N elements, where N is two times the number of color components.\n var val = this.image.transparency.grayscale;\n this.obj.data['Mask'] = [val, val];\n } else if (this.image.transparency.rgb) {\n // Use Color Key Masking (spec section 4.8.5)\n // An array with N elements, where N is two times the number of color components.\n var rgb = this.image.transparency.rgb;\n var mask = [];\n\n var _iterator = _createForOfIteratorHelper(rgb),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var x = _step.value;\n mask.push(x, x);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n this.obj.data['Mask'] = mask;\n } else if (this.image.transparency.indexed) {\n // Create a transparency SMask for the image based on the data\n // in the PLTE and tRNS sections. See below for details on SMasks.\n dataDecoded = true;\n return this.loadIndexedAlphaChannel();\n } else if (hasAlphaChannel) {\n // For PNG color types 4 and 6, the transparency data is stored as a alpha\n // channel mixed in with the main image data. Separate this data out into an\n // SMask object and store it separately in the PDF.\n dataDecoded = true;\n return this.splitAlphaChannel();\n }\n\n if (isInterlaced && !dataDecoded) {\n return this.decodeData();\n }\n\n this.finalize();\n }\n }, {\n key: \"finalize\",\n value: function finalize() {\n if (this.alphaChannel) {\n var sMask = this.document.ref({\n Type: 'XObject',\n Subtype: 'Image',\n Height: this.height,\n Width: this.width,\n BitsPerComponent: 8,\n Filter: 'FlateDecode',\n ColorSpace: 'DeviceGray',\n Decode: [0, 1]\n });\n sMask.end(this.alphaChannel);\n this.obj.data['SMask'] = sMask;\n } // add the actual image data\n\n\n this.obj.end(this.imgData); // free memory\n\n this.image = null;\n return this.imgData = null;\n }\n }, {\n key: \"splitAlphaChannel\",\n value: function splitAlphaChannel() {\n var _this = this;\n\n return this.image.decodePixels(function (pixels) {\n var a, p;\n var colorCount = _this.image.colors;\n var pixelCount = _this.width * _this.height;\n var imgData = Buffer.alloc(pixelCount * colorCount);\n var alphaChannel = Buffer.alloc(pixelCount);\n var i = p = a = 0;\n var len = pixels.length; // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\n\n var skipByteCount = _this.image.bits === 16 ? 1 : 0;\n\n while (i < len) {\n for (var colorIndex = 0; colorIndex < colorCount; colorIndex++) {\n imgData[p++] = pixels[i++];\n i += skipByteCount;\n }\n\n alphaChannel[a++] = pixels[i++];\n i += skipByteCount;\n }\n\n _this.imgData = _zlib.default.deflateSync(imgData);\n _this.alphaChannel = _zlib.default.deflateSync(alphaChannel);\n return _this.finalize();\n });\n }\n }, {\n key: \"loadIndexedAlphaChannel\",\n value: function loadIndexedAlphaChannel() {\n var _this2 = this;\n\n var transparency = this.image.transparency.indexed;\n return this.image.decodePixels(function (pixels) {\n var alphaChannel = Buffer.alloc(_this2.width * _this2.height);\n var i = 0;\n\n for (var j = 0, end = pixels.length; j < end; j++) {\n alphaChannel[i++] = transparency[pixels[j]];\n }\n\n _this2.alphaChannel = _zlib.default.deflateSync(alphaChannel);\n return _this2.finalize();\n });\n }\n }, {\n key: \"decodeData\",\n value: function decodeData() {\n var _this3 = this;\n\n this.image.decodePixels(function (pixels) {\n _this3.imgData = _zlib.default.deflateSync(pixels);\n\n _this3.finalize();\n });\n }\n }]);\n\n return PNGImage;\n}();\n\nvar PDFImage = /*#__PURE__*/function () {\n function PDFImage() {\n _classCallCheck(this, PDFImage);\n }\n\n _createClass(PDFImage, null, [{\n key: \"open\",\n value: function open(src, label) {\n var data;\n\n if (Buffer.isBuffer(src)) {\n data = src;\n } else if (src instanceof ArrayBuffer) {\n data = Buffer.from(new Uint8Array(src));\n } else {\n var match;\n\n if (match = /^data:.+;base64,(.*)$/.exec(src)) {\n data = Buffer.from(match[1], 'base64');\n } else {\n data = fs.readFileSync(src);\n\n if (!data) {\n return;\n }\n }\n }\n\n if (data[0] === 0xff && data[1] === 0xd8) {\n return new JPEG(data, label);\n } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\n return new PNGImage(data, label);\n } else {\n throw new Error('Unknown image format.');\n }\n }\n }]);\n\n return PDFImage;\n}();\n\nvar ImagesMixin = {\n initImages: function initImages() {\n this._imageRegistry = {};\n return this._imageCount = 0;\n },\n image: function image(src, x, y) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var bh, bp, bw, image, ip, left, left1;\n\n if (typeof x === 'object') {\n options = x;\n x = null;\n }\n\n x = (left = x != null ? x : options.x) != null ? left : this.x;\n y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\n\n if (typeof src === 'string') {\n image = this._imageRegistry[src];\n }\n\n if (!image) {\n if (src.width && src.height) {\n image = src;\n } else {\n image = this.openImage(src);\n }\n }\n\n if (!image.obj) {\n image.embed(this);\n }\n\n if (this.page.xobjects[image.label] == null) {\n this.page.xobjects[image.label] = image.obj;\n }\n\n var w = options.width || image.width;\n var h = options.height || image.height;\n\n if (options.width && !options.height) {\n var wp = w / image.width;\n w = image.width * wp;\n h = image.height * wp;\n } else if (options.height && !options.width) {\n var hp = h / image.height;\n w = image.width * hp;\n h = image.height * hp;\n } else if (options.scale) {\n w = image.width * options.scale;\n h = image.height * options.scale;\n } else if (options.fit) {\n var _options$fit = _slicedToArray(options.fit, 2);\n\n bw = _options$fit[0];\n bh = _options$fit[1];\n bp = bw / bh;\n ip = image.width / image.height;\n\n if (ip > bp) {\n w = bw;\n h = bw / ip;\n } else {\n h = bh;\n w = bh * ip;\n }\n } else if (options.cover) {\n var _options$cover = _slicedToArray(options.cover, 2);\n\n bw = _options$cover[0];\n bh = _options$cover[1];\n bp = bw / bh;\n ip = image.width / image.height;\n\n if (ip > bp) {\n h = bh;\n w = bh * ip;\n } else {\n w = bw;\n h = bw / ip;\n }\n }\n\n if (options.fit || options.cover) {\n if (options.align === 'center') {\n x = x + bw / 2 - w / 2;\n } else if (options.align === 'right') {\n x = x + bw - w;\n }\n\n if (options.valign === 'center') {\n y = y + bh / 2 - h / 2;\n } else if (options.valign === 'bottom') {\n y = y + bh - h;\n }\n } // create link annotations if the link option is given\n\n\n if (options.link != null) {\n this.link(x, y, w, h, options.link);\n }\n\n if (options.goTo != null) {\n this.goTo(x, y, w, h, options.goTo);\n }\n\n if (options.destination != null) {\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\n } // Set the current y position to below the image if it is in the document flow\n\n\n if (this.y === y) {\n this.y += h;\n }\n\n this.save();\n this.transform(w, 0, 0, -h, x, y + h);\n this.addContent(\"/\".concat(image.label, \" Do\"));\n this.restore();\n return this;\n },\n openImage: function openImage(src) {\n var image;\n\n if (typeof src === 'string') {\n image = this._imageRegistry[src];\n }\n\n if (!image) {\n image = PDFImage.open(src, \"I\".concat(++this._imageCount));\n\n if (typeof src === 'string') {\n this._imageRegistry[src] = image;\n }\n }\n\n return image;\n }\n};\nvar AnnotationsMixin = {\n annotate: function annotate(x, y, w, h, options) {\n options.Type = 'Annot';\n options.Rect = this._convertRect(x, y, w, h);\n options.Border = [0, 0, 0];\n\n if (options.Subtype === 'Link' && typeof options.F === 'undefined') {\n options.F = 1 << 2; // Print Annotation Flag\n }\n\n if (options.Subtype !== 'Link') {\n if (options.C == null) {\n options.C = this._normalizeColor(options.color || [0, 0, 0]);\n }\n } // convert colors\n\n\n delete options.color;\n\n if (typeof options.Dest === 'string') {\n options.Dest = new String(options.Dest);\n } // Capitalize keys\n\n\n for (var key in options) {\n var val = options[key];\n options[key[0].toUpperCase() + key.slice(1)] = val;\n }\n\n var ref = this.ref(options);\n this.page.annotations.push(ref);\n ref.end();\n return this;\n },\n note: function note(x, y, w, h, contents) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n options.Subtype = 'Text';\n options.Contents = new String(contents);\n options.Name = 'Comment';\n\n if (options.color == null) {\n options.color = [243, 223, 92];\n }\n\n return this.annotate(x, y, w, h, options);\n },\n goTo: function goTo(x, y, w, h, name) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n options.Subtype = 'Link';\n options.A = this.ref({\n S: 'GoTo',\n D: new String(name)\n });\n options.A.end();\n return this.annotate(x, y, w, h, options);\n },\n link: function link(x, y, w, h, url) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n options.Subtype = 'Link';\n\n if (typeof url === 'number') {\n // Link to a page in the document (the page must already exist)\n var pages = this._root.data.Pages.data;\n\n if (url >= 0 && url < pages.Kids.length) {\n options.A = this.ref({\n S: 'GoTo',\n D: [pages.Kids[url], 'XYZ', null, null, null]\n });\n options.A.end();\n } else {\n throw new Error(\"The document has no page \".concat(url));\n }\n } else {\n // Link to an external url\n options.A = this.ref({\n S: 'URI',\n URI: new String(url)\n });\n options.A.end();\n }\n\n return this.annotate(x, y, w, h, options);\n },\n _markup: function _markup(x, y, w, h) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n var _this$_convertRect = this._convertRect(x, y, w, h),\n _this$_convertRect2 = _slicedToArray(_this$_convertRect, 4),\n x1 = _this$_convertRect2[0],\n y1 = _this$_convertRect2[1],\n x2 = _this$_convertRect2[2],\n y2 = _this$_convertRect2[3];\n\n options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\n options.Contents = new String();\n return this.annotate(x, y, w, h, options);\n },\n highlight: function highlight(x, y, w, h) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n options.Subtype = 'Highlight';\n\n if (options.color == null) {\n options.color = [241, 238, 148];\n }\n\n return this._markup(x, y, w, h, options);\n },\n underline: function underline(x, y, w, h) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n options.Subtype = 'Underline';\n return this._markup(x, y, w, h, options);\n },\n strike: function strike(x, y, w, h) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n options.Subtype = 'StrikeOut';\n return this._markup(x, y, w, h, options);\n },\n lineAnnotation: function lineAnnotation(x1, y1, x2, y2) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n options.Subtype = 'Line';\n options.Contents = new String();\n options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\n return this.annotate(x1, y1, x2, y2, options);\n },\n rectAnnotation: function rectAnnotation(x, y, w, h) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n options.Subtype = 'Square';\n options.Contents = new String();\n return this.annotate(x, y, w, h, options);\n },\n ellipseAnnotation: function ellipseAnnotation(x, y, w, h) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n options.Subtype = 'Circle';\n options.Contents = new String();\n return this.annotate(x, y, w, h, options);\n },\n textAnnotation: function textAnnotation(x, y, w, h, text) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n options.Subtype = 'FreeText';\n options.Contents = new String(text);\n options.DA = new String();\n return this.annotate(x, y, w, h, options);\n },\n fileAnnotation: function fileAnnotation(x, y, w, h) {\n var file = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; // create hidden file\n\n var filespec = this.file(file.src, Object.assign({\n hidden: true\n }, file));\n options.Subtype = 'FileAttachment';\n options.FS = filespec; // add description from filespec unless description (Contents) has already been set\n\n if (options.Contents) {\n options.Contents = new String(options.Contents);\n } else if (filespec.data.Desc) {\n options.Contents = filespec.data.Desc;\n }\n\n return this.annotate(x, y, w, h, options);\n },\n _convertRect: function _convertRect(x1, y1, w, h) {\n // flip y1 and y2\n var y2 = y1;\n y1 += h; // make x2\n\n var x2 = x1 + w; // apply current transformation matrix to points\n\n var _this$_ctm = _slicedToArray(this._ctm, 6),\n m0 = _this$_ctm[0],\n m1 = _this$_ctm[1],\n m2 = _this$_ctm[2],\n m3 = _this$_ctm[3],\n m4 = _this$_ctm[4],\n m5 = _this$_ctm[5];\n\n x1 = m0 * x1 + m2 * y1 + m4;\n y1 = m1 * x1 + m3 * y1 + m5;\n x2 = m0 * x2 + m2 * y2 + m4;\n y2 = m1 * x2 + m3 * y2 + m5;\n return [x1, y1, x2, y2];\n }\n};\n\nvar PDFOutline = /*#__PURE__*/function () {\n function PDFOutline(document, parent, title, dest) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n expanded: false\n };\n\n _classCallCheck(this, PDFOutline);\n\n this.document = document;\n this.options = options;\n this.outlineData = {};\n\n if (dest !== null) {\n this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\n }\n\n if (parent !== null) {\n this.outlineData['Parent'] = parent;\n }\n\n if (title !== null) {\n this.outlineData['Title'] = new String(title);\n }\n\n this.dictionary = this.document.ref(this.outlineData);\n this.children = [];\n }\n\n _createClass(PDFOutline, [{\n key: \"addItem\",\n value: function addItem(title) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n expanded: false\n };\n var result = new PDFOutline(this.document, this.dictionary, title, this.document.page, options);\n this.children.push(result);\n return result;\n }\n }, {\n key: \"endOutline\",\n value: function endOutline() {\n if (this.children.length > 0) {\n if (this.options.expanded) {\n this.outlineData.Count = this.children.length;\n }\n\n var first = this.children[0],\n last = this.children[this.children.length - 1];\n this.outlineData.First = first.dictionary;\n this.outlineData.Last = last.dictionary;\n\n for (var i = 0, len = this.children.length; i < len; i++) {\n var child = this.children[i];\n\n if (i > 0) {\n child.outlineData.Prev = this.children[i - 1].dictionary;\n }\n\n if (i < this.children.length - 1) {\n child.outlineData.Next = this.children[i + 1].dictionary;\n }\n\n child.endOutline();\n }\n }\n\n return this.dictionary.end();\n }\n }]);\n\n return PDFOutline;\n}();\n\nvar OutlineMixin = {\n initOutline: function initOutline() {\n return this.outline = new PDFOutline(this, null, null, null);\n },\n endOutline: function endOutline() {\n this.outline.endOutline();\n\n if (this.outline.children.length > 0) {\n this._root.data.Outlines = this.outline.dictionary;\n return this._root.data.PageMode = 'UseOutlines';\n }\n }\n};\n/*\r\nPDFStructureContent - a reference to a marked structure content\r\nBy Ben Schmidt\r\n*/\n\nvar PDFStructureContent = /*#__PURE__*/function () {\n function PDFStructureContent(pageRef, mcid) {\n _classCallCheck(this, PDFStructureContent);\n\n this.refs = [{\n pageRef: pageRef,\n mcid: mcid\n }];\n }\n\n _createClass(PDFStructureContent, [{\n key: \"push\",\n value: function push(structContent) {\n var _this = this;\n\n structContent.refs.forEach(function (ref) {\n return _this.refs.push(ref);\n });\n }\n }]);\n\n return PDFStructureContent;\n}();\n\nvar PDFStructureElement = /*#__PURE__*/function () {\n function PDFStructureElement(document, type) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var children = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n _classCallCheck(this, PDFStructureElement);\n\n this.document = document;\n this._attached = false;\n this._ended = false;\n this._flushed = false;\n this.dictionary = document.ref({\n // Type: \"StructElem\",\n S: type\n });\n var data = this.dictionary.data;\n\n if (Array.isArray(options) || this._isValidChild(options)) {\n children = options;\n options = {};\n }\n\n if (typeof options.title !== 'undefined') {\n data.T = new String(options.title);\n }\n\n if (typeof options.lang !== 'undefined') {\n data.Lang = new String(options.lang);\n }\n\n if (typeof options.alt !== 'undefined') {\n data.Alt = new String(options.alt);\n }\n\n if (typeof options.expanded !== 'undefined') {\n data.E = new String(options.expanded);\n }\n\n if (typeof options.actual !== 'undefined') {\n data.ActualText = new String(options.actual);\n }\n\n this._children = [];\n\n if (children) {\n if (!Array.isArray(children)) {\n children = [children];\n }\n\n children.forEach(function (child) {\n return _this.add(child);\n });\n this.end();\n }\n }\n\n _createClass(PDFStructureElement, [{\n key: \"add\",\n value: function add(child) {\n if (this._ended) {\n throw new Error(\"Cannot add child to already-ended structure element\");\n }\n\n if (!this._isValidChild(child)) {\n throw new Error(\"Invalid structure element child\");\n }\n\n if (child instanceof PDFStructureElement) {\n child.setParent(this.dictionary);\n\n if (this._attached) {\n child.setAttached();\n }\n }\n\n if (child instanceof PDFStructureContent) {\n this._addContentToParentTree(child);\n }\n\n if (typeof child === 'function' && this._attached) {\n // _contentForClosure() adds the content to the parent tree\n child = this._contentForClosure(child);\n }\n\n this._children.push(child);\n\n return this;\n }\n }, {\n key: \"_addContentToParentTree\",\n value: function _addContentToParentTree(content) {\n var _this2 = this;\n\n content.refs.forEach(function (_ref) {\n var pageRef = _ref.pageRef,\n mcid = _ref.mcid;\n\n var pageStructParents = _this2.document.getStructParentTree().get(pageRef.data.StructParents);\n\n pageStructParents[mcid] = _this2.dictionary;\n });\n }\n }, {\n key: \"setParent\",\n value: function setParent(parentRef) {\n if (this.dictionary.data.P) {\n throw new Error(\"Structure element added to more than one parent\");\n }\n\n this.dictionary.data.P = parentRef;\n\n this._flush();\n }\n }, {\n key: \"setAttached\",\n value: function setAttached() {\n var _this3 = this;\n\n if (this._attached) {\n return;\n }\n\n this._children.forEach(function (child, index) {\n if (child instanceof PDFStructureElement) {\n child.setAttached();\n }\n\n if (typeof child === 'function') {\n _this3._children[index] = _this3._contentForClosure(child);\n }\n });\n\n this._attached = true;\n\n this._flush();\n }\n }, {\n key: \"end\",\n value: function end() {\n if (this._ended) {\n return;\n }\n\n this._children.filter(function (child) {\n return child instanceof PDFStructureElement;\n }).forEach(function (child) {\n return child.end();\n });\n\n this._ended = true;\n\n this._flush();\n }\n }, {\n key: \"_isValidChild\",\n value: function _isValidChild(child) {\n return child instanceof PDFStructureElement || child instanceof PDFStructureContent || typeof child === 'function';\n }\n }, {\n key: \"_contentForClosure\",\n value: function _contentForClosure(closure) {\n var content = this.document.markStructureContent(this.dictionary.data.S);\n closure();\n this.document.endMarkedContent();\n\n this._addContentToParentTree(content);\n\n return content;\n }\n }, {\n key: \"_isFlushable\",\n value: function _isFlushable() {\n if (!this.dictionary.data.P || !this._ended) {\n return false;\n }\n\n return this._children.every(function (child) {\n if (typeof child === 'function') {\n return false;\n }\n\n if (child instanceof PDFStructureElement) {\n return child._isFlushable();\n }\n\n return true;\n });\n }\n }, {\n key: \"_flush\",\n value: function _flush() {\n var _this4 = this;\n\n if (this._flushed || !this._isFlushable()) {\n return;\n }\n\n this.dictionary.data.K = [];\n\n this._children.forEach(function (child) {\n return _this4._flushChild(child);\n });\n\n this.dictionary.end(); // free memory used by children; the dictionary itself may still be\n // referenced by a parent structure element or root, but we can\n // at least trim the tree here\n\n this._children = [];\n this.dictionary.data.K = null;\n this._flushed = true;\n }\n }, {\n key: \"_flushChild\",\n value: function _flushChild(child) {\n var _this5 = this;\n\n if (child instanceof PDFStructureElement) {\n this.dictionary.data.K.push(child.dictionary);\n }\n\n if (child instanceof PDFStructureContent) {\n child.refs.forEach(function (_ref2) {\n var pageRef = _ref2.pageRef,\n mcid = _ref2.mcid;\n\n if (!_this5.dictionary.data.Pg) {\n _this5.dictionary.data.Pg = pageRef;\n }\n\n if (_this5.dictionary.data.Pg === pageRef) {\n _this5.dictionary.data.K.push(mcid);\n } else {\n _this5.dictionary.data.K.push({\n Type: \"MCR\",\n Pg: pageRef,\n MCID: mcid\n });\n }\n });\n }\n }\n }]);\n\n return PDFStructureElement;\n}();\n\nvar PDFNumberTree = /*#__PURE__*/function (_PDFTree) {\n _inherits(PDFNumberTree, _PDFTree);\n\n var _super = _createSuper(PDFNumberTree);\n\n function PDFNumberTree() {\n _classCallCheck(this, PDFNumberTree);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(PDFNumberTree, [{\n key: \"_compareKeys\",\n value: function _compareKeys(a, b) {\n return parseInt(a) - parseInt(b);\n }\n }, {\n key: \"_keysName\",\n value: function _keysName() {\n return \"Nums\";\n }\n }, {\n key: \"_dataForKey\",\n value: function _dataForKey(k) {\n return parseInt(k);\n }\n }]);\n\n return PDFNumberTree;\n}(PDFTree);\n\nvar MarkingsMixin = {\n initMarkings: function initMarkings(options) {\n this.structChildren = [];\n\n if (options.tagged) {\n this.getMarkInfoDictionary().data.Marked = true;\n this.getStructTreeRoot();\n }\n },\n markContent: function markContent(tag) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n if (tag === 'Artifact' || options && options.mcid) {\n var toClose = 0;\n this.page.markings.forEach(function (marking) {\n if (toClose || marking.structContent || marking.tag === 'Artifact') {\n toClose++;\n }\n });\n\n while (toClose--) {\n this.endMarkedContent();\n }\n }\n\n if (!options) {\n this.page.markings.push({\n tag: tag\n });\n this.addContent(\"/\".concat(tag, \" BMC\"));\n return this;\n }\n\n this.page.markings.push({\n tag: tag,\n options: options\n });\n var dictionary = {};\n\n if (typeof options.mcid !== 'undefined') {\n dictionary.MCID = options.mcid;\n }\n\n if (tag === 'Artifact') {\n if (typeof options.type === 'string') {\n dictionary.Type = options.type;\n }\n\n if (Array.isArray(options.bbox)) {\n dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3], options.bbox[2], this.page.height - options.bbox[1]];\n }\n\n if (Array.isArray(options.attached) && options.attached.every(function (val) {\n return typeof val === 'string';\n })) {\n dictionary.Attached = options.attached;\n }\n }\n\n if (tag === 'Span') {\n if (options.lang) {\n dictionary.Lang = new String(options.lang);\n }\n\n if (options.alt) {\n dictionary.Alt = new String(options.alt);\n }\n\n if (options.expanded) {\n dictionary.E = new String(options.expanded);\n }\n\n if (options.actual) {\n dictionary.ActualText = new String(options.actual);\n }\n }\n\n this.addContent(\"/\".concat(tag, \" \").concat(PDFObject.convert(dictionary), \" BDC\"));\n return this;\n },\n markStructureContent: function markStructureContent(tag) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey);\n var mcid = pageStructParents.length;\n pageStructParents.push(null);\n this.markContent(tag, _objectSpread2(_objectSpread2({}, options), {}, {\n mcid: mcid\n }));\n var structContent = new PDFStructureContent(this.page.dictionary, mcid);\n this.page.markings.slice(-1)[0].structContent = structContent;\n return structContent;\n },\n endMarkedContent: function endMarkedContent() {\n this.page.markings.pop();\n this.addContent('EMC');\n return this;\n },\n struct: function struct(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var children = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n return new PDFStructureElement(this, type, options, children);\n },\n addStructure: function addStructure(structElem) {\n var structTreeRoot = this.getStructTreeRoot();\n structElem.setParent(structTreeRoot);\n structElem.setAttached();\n this.structChildren.push(structElem);\n\n if (!structTreeRoot.data.K) {\n structTreeRoot.data.K = [];\n }\n\n structTreeRoot.data.K.push(structElem.dictionary);\n return this;\n },\n initPageMarkings: function initPageMarkings(pageMarkings) {\n var _this = this;\n\n pageMarkings.forEach(function (marking) {\n if (marking.structContent) {\n var structContent = marking.structContent;\n\n var newStructContent = _this.markStructureContent(marking.tag, marking.options);\n\n structContent.push(newStructContent);\n _this.page.markings.slice(-1)[0].structContent = structContent;\n } else {\n _this.markContent(marking.tag, marking.options);\n }\n });\n },\n endPageMarkings: function endPageMarkings(page) {\n var pageMarkings = page.markings;\n pageMarkings.forEach(function () {\n return page.write('EMC');\n });\n page.markings = [];\n return pageMarkings;\n },\n getMarkInfoDictionary: function getMarkInfoDictionary() {\n if (!this._root.data.MarkInfo) {\n this._root.data.MarkInfo = this.ref({});\n }\n\n return this._root.data.MarkInfo;\n },\n getStructTreeRoot: function getStructTreeRoot() {\n if (!this._root.data.StructTreeRoot) {\n this._root.data.StructTreeRoot = this.ref({\n Type: 'StructTreeRoot',\n ParentTree: new PDFNumberTree(),\n ParentTreeNextKey: 0\n });\n }\n\n return this._root.data.StructTreeRoot;\n },\n getStructParentTree: function getStructParentTree() {\n return this.getStructTreeRoot().data.ParentTree;\n },\n createStructParentTreeNextKey: function createStructParentTreeNextKey() {\n // initialise the MarkInfo dictionary\n this.getMarkInfoDictionary();\n var structTreeRoot = this.getStructTreeRoot();\n var key = structTreeRoot.data.ParentTreeNextKey++;\n structTreeRoot.data.ParentTree.add(key, []);\n return key;\n },\n endMarkings: function endMarkings() {\n var structTreeRoot = this._root.data.StructTreeRoot;\n\n if (structTreeRoot) {\n structTreeRoot.end();\n this.structChildren.forEach(function (structElem) {\n return structElem.end();\n });\n }\n\n if (this._root.data.MarkInfo) {\n this._root.data.MarkInfo.end();\n }\n }\n};\nvar FIELD_FLAGS = {\n readOnly: 1,\n required: 2,\n noExport: 4,\n multiline: 0x1000,\n password: 0x2000,\n toggleToOffButton: 0x4000,\n radioButton: 0x8000,\n pushButton: 0x10000,\n combo: 0x20000,\n edit: 0x40000,\n sort: 0x80000,\n multiSelect: 0x200000,\n noSpell: 0x400000\n};\nvar FIELD_JUSTIFY = {\n left: 0,\n center: 1,\n right: 2\n};\nvar VALUE_MAP = {\n value: 'V',\n defaultValue: 'DV'\n};\nvar FORMAT_SPECIAL = {\n zip: '0',\n zipPlus4: '1',\n zip4: '1',\n phone: '2',\n ssn: '3'\n};\nvar FORMAT_DEFAULT = {\n number: {\n nDec: 0,\n sepComma: false,\n negStyle: 'MinusBlack',\n currency: '',\n currencyPrepend: true\n },\n percent: {\n nDec: 0,\n sepComma: false\n }\n};\nvar AcroFormMixin = {\n /**\r\n * Must call if adding AcroForms to a document. Must also call font() before\r\n * this method to set the default font.\r\n */\n initForm: function initForm() {\n if (!this._font) {\n throw new Error('Must set a font before calling initForm method');\n }\n\n this._acroform = {\n fonts: {},\n defaultFont: this._font.name\n };\n this._acroform.fonts[this._font.id] = this._font.ref();\n var data = {\n Fields: [],\n NeedAppearances: true,\n DA: new String(\"/\".concat(this._font.id, \" 0 Tf 0 g\")),\n DR: {\n Font: {}\n }\n };\n data.DR.Font[this._font.id] = this._font.ref();\n var AcroForm = this.ref(data);\n this._root.data.AcroForm = AcroForm;\n return this;\n },\n\n /**\r\n * Called automatically by document.js\r\n */\n endAcroForm: function endAcroForm() {\n var _this = this;\n\n if (this._root.data.AcroForm) {\n if (!Object.keys(this._acroform.fonts).length && !this._acroform.defaultFont) {\n throw new Error('No fonts specified for PDF form');\n }\n\n var fontDict = this._root.data.AcroForm.data.DR.Font;\n Object.keys(this._acroform.fonts).forEach(function (name) {\n fontDict[name] = _this._acroform.fonts[name];\n });\n\n this._root.data.AcroForm.data.Fields.forEach(function (fieldRef) {\n _this._endChild(fieldRef);\n });\n\n this._root.data.AcroForm.end();\n }\n\n return this;\n },\n _endChild: function _endChild(ref) {\n var _this2 = this;\n\n if (Array.isArray(ref.data.Kids)) {\n ref.data.Kids.forEach(function (childRef) {\n _this2._endChild(childRef);\n });\n ref.end();\n }\n\n return this;\n },\n\n /**\r\n * Creates and adds a form field to the document. Form fields are intermediate\r\n * nodes in a PDF form that are used to specify form name heirarchy and form\r\n * value defaults.\r\n * @param {string} name - field name (T attribute in field dictionary)\r\n * @param {object} options - other attributes to include in field dictionary\r\n */\n formField: function formField(name) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var fieldDict = this._fieldDict(name, null, options);\n\n var fieldRef = this.ref(fieldDict);\n\n this._addToParent(fieldRef);\n\n return fieldRef;\n },\n\n /**\r\n * Creates and adds a Form Annotation to the document. Form annotations are\r\n * called Widget annotations internally within a PDF file.\r\n * @param {string} name - form field name (T attribute of widget annotation\r\n * dictionary)\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} w\r\n * @param {number} h\r\n * @param {object} options\r\n */\n formAnnotation: function formAnnotation(name, type, x, y, w, h) {\n var options = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};\n\n var fieldDict = this._fieldDict(name, type, options);\n\n fieldDict.Subtype = 'Widget';\n\n if (fieldDict.F === undefined) {\n fieldDict.F = 4; // print the annotation\n } // Add Field annot to page, and get it's ref\n\n\n this.annotate(x, y, w, h, fieldDict);\n var annotRef = this.page.annotations[this.page.annotations.length - 1];\n return this._addToParent(annotRef);\n },\n formText: function formText(name, x, y, w, h) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n return this.formAnnotation(name, 'text', x, y, w, h, options);\n },\n formPushButton: function formPushButton(name, x, y, w, h) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n return this.formAnnotation(name, 'pushButton', x, y, w, h, options);\n },\n formCombo: function formCombo(name, x, y, w, h) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n return this.formAnnotation(name, 'combo', x, y, w, h, options);\n },\n formList: function formList(name, x, y, w, h) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n return this.formAnnotation(name, 'list', x, y, w, h, options);\n },\n formRadioButton: function formRadioButton(name, x, y, w, h) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n return this.formAnnotation(name, 'radioButton', x, y, w, h, options);\n },\n formCheckbox: function formCheckbox(name, x, y, w, h) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n return this.formAnnotation(name, 'checkbox', x, y, w, h, options);\n },\n _addToParent: function _addToParent(fieldRef) {\n var parent = fieldRef.data.Parent;\n\n if (parent) {\n if (!parent.data.Kids) {\n parent.data.Kids = [];\n }\n\n parent.data.Kids.push(fieldRef);\n } else {\n this._root.data.AcroForm.data.Fields.push(fieldRef);\n }\n\n return this;\n },\n _fieldDict: function _fieldDict(name, type) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!this._acroform) {\n throw new Error('Call document.initForms() method before adding form elements to document');\n }\n\n var opts = Object.assign({}, options);\n\n if (type !== null) {\n opts = this._resolveType(type, options);\n }\n\n opts = this._resolveFlags(opts);\n opts = this._resolveJustify(opts);\n opts = this._resolveFont(opts);\n opts = this._resolveStrings(opts);\n opts = this._resolveColors(opts);\n opts = this._resolveFormat(opts);\n opts.T = new String(name);\n\n if (opts.parent) {\n opts.Parent = opts.parent;\n delete opts.parent;\n }\n\n return opts;\n },\n _resolveType: function _resolveType(type, opts) {\n if (type === 'text') {\n opts.FT = 'Tx';\n } else if (type === 'pushButton') {\n opts.FT = 'Btn';\n opts.pushButton = true;\n } else if (type === 'radioButton') {\n opts.FT = 'Btn';\n opts.radioButton = true;\n } else if (type === 'checkbox') {\n opts.FT = 'Btn';\n } else if (type === 'combo') {\n opts.FT = 'Ch';\n opts.combo = true;\n } else if (type === 'list') {\n opts.FT = 'Ch';\n } else {\n throw new Error(\"Invalid form annotation type '\".concat(type, \"'\"));\n }\n\n return opts;\n },\n _resolveFormat: function _resolveFormat(opts) {\n var f = opts.format;\n\n if (f && f.type) {\n var fnKeystroke;\n var fnFormat;\n var params = '';\n\n if (FORMAT_SPECIAL[f.type] !== undefined) {\n fnKeystroke = \"AFSpecial_Keystroke\";\n fnFormat = \"AFSpecial_Format\";\n params = FORMAT_SPECIAL[f.type];\n } else {\n var format = f.type.charAt(0).toUpperCase() + f.type.slice(1);\n fnKeystroke = \"AF\".concat(format, \"_Keystroke\");\n fnFormat = \"AF\".concat(format, \"_Format\");\n\n if (f.type === 'date') {\n fnKeystroke += 'Ex';\n params = String(f.param);\n } else if (f.type === 'time') {\n params = String(f.param);\n } else if (f.type === 'number') {\n var p = Object.assign({}, FORMAT_DEFAULT.number, f);\n params = String([String(p.nDec), p.sepComma ? '0' : '1', '\"' + p.negStyle + '\"', 'null', '\"' + p.currency + '\"', String(p.currencyPrepend)].join(','));\n } else if (f.type === 'percent') {\n var _p = Object.assign({}, FORMAT_DEFAULT.percent, f);\n\n params = String([String(_p.nDec), _p.sepComma ? '0' : '1'].join(','));\n }\n }\n\n opts.AA = opts.AA ? opts.AA : {};\n opts.AA.K = {\n S: 'JavaScript',\n JS: new String(\"\".concat(fnKeystroke, \"(\").concat(params, \");\"))\n };\n opts.AA.F = {\n S: 'JavaScript',\n JS: new String(\"\".concat(fnFormat, \"(\").concat(params, \");\"))\n };\n }\n\n delete opts.format;\n return opts;\n },\n _resolveColors: function _resolveColors(opts) {\n var color = this._normalizeColor(opts.backgroundColor);\n\n if (color) {\n if (!opts.MK) {\n opts.MK = {};\n }\n\n opts.MK.BG = color;\n }\n\n color = this._normalizeColor(opts.borderColor);\n\n if (color) {\n if (!opts.MK) {\n opts.MK = {};\n }\n\n opts.MK.BC = color;\n }\n\n delete opts.backgroundColor;\n delete opts.borderColor;\n return opts;\n },\n _resolveFlags: function _resolveFlags(options) {\n var result = 0;\n Object.keys(options).forEach(function (key) {\n if (FIELD_FLAGS[key]) {\n result |= FIELD_FLAGS[key];\n delete options[key];\n }\n });\n\n if (result !== 0) {\n options.Ff = options.Ff ? options.Ff : 0;\n options.Ff |= result;\n }\n\n return options;\n },\n _resolveJustify: function _resolveJustify(options) {\n var result = 0;\n\n if (options.align !== undefined) {\n if (typeof FIELD_JUSTIFY[options.align] === 'number') {\n result = FIELD_JUSTIFY[options.align];\n }\n\n delete options.align;\n }\n\n if (result !== 0) {\n options.Q = result; // default\n }\n\n return options;\n },\n _resolveFont: function _resolveFont(options) {\n // add current font to document-level AcroForm dict if necessary\n if (this._acroform.fonts[this._font.id] === null) {\n this._acroform.fonts[this._font.id] = this._font.ref();\n } // add current font to field's resource dict (RD) if not the default acroform font\n\n\n if (this._acroform.defaultFont !== this._font.name) {\n options.DR = {\n Font: {}\n }; // Get the fontSize option. If not set use auto sizing\n\n var fontSize = options.fontSize || 0;\n options.DR.Font[this._font.id] = this._font.ref();\n options.DA = new String(\"/\".concat(this._font.id, \" \").concat(fontSize, \" Tf 0 g\"));\n }\n\n return options;\n },\n _resolveStrings: function _resolveStrings(options) {\n var select = [];\n\n function appendChoices(a) {\n if (Array.isArray(a)) {\n for (var idx = 0; idx < a.length; idx++) {\n if (typeof a[idx] === 'string') {\n select.push(new String(a[idx]));\n } else {\n select.push(a[idx]);\n }\n }\n }\n }\n\n appendChoices(options.Opt);\n\n if (options.select) {\n appendChoices(options.select);\n delete options.select;\n }\n\n if (select.length) {\n options.Opt = select;\n }\n\n Object.keys(VALUE_MAP).forEach(function (key) {\n if (options[key] !== undefined) {\n options[VALUE_MAP[key]] = options[key];\n delete options[key];\n }\n });\n ['V', 'DV'].forEach(function (key) {\n if (typeof options[key] === 'string') {\n options[key] = new String(options[key]);\n }\n });\n\n if (options.MK && options.MK.CA) {\n options.MK.CA = new String(options.MK.CA);\n }\n\n if (options.label) {\n options.MK = options.MK ? options.MK : {};\n options.MK.CA = new String(options.label);\n delete options.label;\n }\n\n return options;\n }\n};\nvar AttachmentsMixin = {\n /**\r\n * Embed contents of `src` in PDF\r\n * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file\r\n * @param {object} options\r\n * * options.name: filename to be shown in PDF, will use `src` if none set\r\n * * options.type: filetype to be shown in PDF\r\n * * options.description: description to be shown in PDF\r\n * * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations\r\n * * options.creationDate: override creation date\r\n * * options.modifiedDate: override modified date\r\n * @returns filespec reference\r\n */\n file: function file(src) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n options.name = options.name || src;\n var refBody = {\n Type: 'EmbeddedFile',\n Params: {}\n };\n var data;\n\n if (!src) {\n throw new Error('No src specified');\n }\n\n if (Buffer.isBuffer(src)) {\n data = src;\n } else if (src instanceof ArrayBuffer) {\n data = Buffer.from(new Uint8Array(src));\n } else {\n var match;\n\n if (match = /^data:(.*);base64,(.*)$/.exec(src)) {\n if (match[1]) {\n refBody.Subtype = match[1].replace('/', '#2F');\n }\n\n data = Buffer.from(match[2], 'base64');\n } else {\n data = fs.readFileSync(src);\n\n if (!data) {\n throw new Error(\"Could not read contents of file at filepath \".concat(src));\n } // update CreationDate and ModDate\n\n\n var _fs$statSync = fs.statSync(src),\n birthtime = _fs$statSync.birthtime,\n ctime = _fs$statSync.ctime;\n\n refBody.Params.CreationDate = birthtime;\n refBody.Params.ModDate = ctime;\n }\n } // override creation date and modified date\n\n\n if (options.creationDate instanceof Date) {\n refBody.Params.CreationDate = options.creationDate;\n }\n\n if (options.modifiedDate instanceof Date) {\n refBody.Params.ModDate = options.modifiedDate;\n } // add optional subtype\n\n\n if (options.type) {\n refBody.Subtype = options.type.replace('/', '#2F');\n } // add checksum and size information\n\n\n var checksum = _cryptoJs.default.MD5(_cryptoJs.default.lib.WordArray.create(new Uint8Array(data)));\n\n refBody.Params.CheckSum = new String(checksum);\n refBody.Params.Size = data.byteLength; // save some space when embedding the same file again\n // if a file with the same name and metadata exists, reuse its reference\n\n var ref;\n if (!this._fileRegistry) this._fileRegistry = {};\n var file = this._fileRegistry[options.name];\n\n if (file && isEqual(refBody, file)) {\n ref = file.ref;\n } else {\n ref = this.ref(refBody);\n ref.end(data);\n this._fileRegistry[options.name] = _objectSpread2(_objectSpread2({}, refBody), {}, {\n ref: ref\n });\n } // add filespec for embedded file\n\n\n var fileSpecBody = {\n Type: 'Filespec',\n F: new String(options.name),\n EF: {\n F: ref\n },\n UF: new String(options.name)\n };\n\n if (options.description) {\n fileSpecBody.Desc = new String(options.description);\n }\n\n var filespec = this.ref(fileSpecBody);\n filespec.end();\n\n if (!options.hidden) {\n this.addNamedEmbeddedFile(options.name, filespec);\n }\n\n return filespec;\n }\n};\n/** check two embedded file metadata objects for equality */\n\nfunction isEqual(a, b) {\n return a.Subtype === b.Subtype && a.Params.CheckSum.toString() === b.Params.CheckSum.toString() && a.Params.Size === b.Params.Size && a.Params.CreationDate === b.Params.CreationDate && a.Params.ModDate === b.Params.ModDate;\n}\n\nvar PDFDocument = /*#__PURE__*/function (_stream$Readable) {\n _inherits(PDFDocument, _stream$Readable);\n\n var _super = _createSuper(PDFDocument);\n\n function PDFDocument() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, PDFDocument);\n\n _this = _super.call(this, options);\n _this.options = options; // PDF version\n\n switch (options.pdfVersion) {\n case '1.4':\n _this.version = 1.4;\n break;\n\n case '1.5':\n _this.version = 1.5;\n break;\n\n case '1.6':\n _this.version = 1.6;\n break;\n\n case '1.7':\n case '1.7ext3':\n _this.version = 1.7;\n break;\n\n default:\n _this.version = 1.3;\n break;\n } // Whether streams should be compressed\n\n\n _this.compress = _this.options.compress != null ? _this.options.compress : true;\n _this._pageBuffer = [];\n _this._pageBufferStart = 0; // The PDF object store\n\n _this._offsets = [];\n _this._waiting = 0;\n _this._ended = false;\n _this._offset = 0;\n\n var Pages = _this.ref({\n Type: 'Pages',\n Count: 0,\n Kids: []\n });\n\n var Names = _this.ref({\n Dests: new PDFNameTree()\n });\n\n _this._root = _this.ref({\n Type: 'Catalog',\n Pages: Pages,\n Names: Names\n });\n\n if (_this.options.lang) {\n _this._root.data.Lang = new String(_this.options.lang);\n } // The current page\n\n\n _this.page = null; // Initialize mixins\n\n _this.initColor();\n\n _this.initVector();\n\n _this.initFonts(options.font);\n\n _this.initText();\n\n _this.initImages();\n\n _this.initOutline();\n\n _this.initMarkings(options); // Initialize the metadata\n\n\n _this.info = {\n Producer: 'PDFKit',\n Creator: 'PDFKit',\n CreationDate: new Date()\n };\n\n if (_this.options.info) {\n for (var key in _this.options.info) {\n var val = _this.options.info[key];\n _this.info[key] = val;\n }\n }\n\n if (_this.options.displayTitle) {\n _this._root.data.ViewerPreferences = _this.ref({\n DisplayDocTitle: true\n });\n } // Generate file ID\n\n\n _this._id = PDFSecurity.generateFileID(_this.info); // Initialize security settings\n\n _this._security = PDFSecurity.create(_assertThisInitialized(_this), options); // Write the header\n // PDF version\n\n _this._write(\"%PDF-\".concat(_this.version)); // 4 binary chars, as recommended by the spec\n\n\n _this._write('%\\xFF\\xFF\\xFF\\xFF'); // Add the first page\n\n\n if (_this.options.autoFirstPage !== false) {\n _this.addPage();\n }\n\n return _this;\n }\n\n _createClass(PDFDocument, [{\n key: \"addPage\",\n value: function addPage(options) {\n if (options == null) {\n options = this.options;\n } // end the current page if needed\n\n\n if (!this.options.bufferPages) {\n this.flushPages();\n } // create a page object\n\n\n this.page = new PDFPage(this, options);\n\n this._pageBuffer.push(this.page); // add the page to the object store\n\n\n var pages = this._root.data.Pages.data;\n pages.Kids.push(this.page.dictionary);\n pages.Count++; // reset x and y coordinates\n\n this.x = this.page.margins.left;\n this.y = this.page.margins.top; // flip PDF coordinate system so that the origin is in\n // the top left rather than the bottom left\n\n this._ctm = [1, 0, 0, 1, 0, 0];\n this.transform(1, 0, 0, -1, 0, this.page.height);\n this.emit('pageAdded');\n return this;\n }\n }, {\n key: \"continueOnNewPage\",\n value: function continueOnNewPage(options) {\n var pageMarkings = this.endPageMarkings(this.page);\n this.addPage(options);\n this.initPageMarkings(pageMarkings);\n return this;\n }\n }, {\n key: \"bufferedPageRange\",\n value: function bufferedPageRange() {\n return {\n start: this._pageBufferStart,\n count: this._pageBuffer.length\n };\n }\n }, {\n key: \"switchToPage\",\n value: function switchToPage(n) {\n var page;\n\n if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\n throw new Error(\"switchToPage(\".concat(n, \") out of bounds, current buffer covers pages \").concat(this._pageBufferStart, \" to \").concat(this._pageBufferStart + this._pageBuffer.length - 1));\n }\n\n return this.page = page;\n }\n }, {\n key: \"flushPages\",\n value: function flushPages() {\n // this local variable exists so we're future-proof against\n // reentrant calls to flushPages.\n var pages = this._pageBuffer;\n this._pageBuffer = [];\n this._pageBufferStart += pages.length;\n\n var _iterator = _createForOfIteratorHelper(pages),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var page = _step.value;\n this.endPageMarkings(page);\n page.end();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n }, {\n key: \"addNamedDestination\",\n value: function addNamedDestination(name) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (args.length === 0) {\n args = ['XYZ', null, null, null];\n }\n\n if (args[0] === 'XYZ' && args[2] !== null) {\n args[2] = this.page.height - args[2];\n }\n\n args.unshift(this.page.dictionary);\n\n this._root.data.Names.data.Dests.add(name, args);\n }\n }, {\n key: \"addNamedEmbeddedFile\",\n value: function addNamedEmbeddedFile(name, ref) {\n if (!this._root.data.Names.data.EmbeddedFiles) {\n // disabling /Limits for this tree fixes attachments not showing in Adobe Reader\n this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({\n limits: false\n });\n } // add filespec to EmbeddedFiles\n\n\n this._root.data.Names.data.EmbeddedFiles.add(name, ref);\n }\n }, {\n key: \"addNamedJavaScript\",\n value: function addNamedJavaScript(name, js) {\n if (!this._root.data.Names.data.JavaScript) {\n this._root.data.Names.data.JavaScript = new PDFNameTree();\n }\n\n var data = {\n JS: new String(js),\n S: 'JavaScript'\n };\n\n this._root.data.Names.data.JavaScript.add(name, data);\n }\n }, {\n key: \"ref\",\n value: function ref(data) {\n var ref = new PDFReference(this, this._offsets.length + 1, data);\n\n this._offsets.push(null); // placeholder for this object's offset once it is finalized\n\n\n this._waiting++;\n return ref;\n }\n }, {\n key: \"_read\",\n value: function _read() {} // do nothing, but this method is required by node\n\n }, {\n key: \"_write\",\n value: function _write(data) {\n if (!Buffer.isBuffer(data)) {\n data = Buffer.from(data + '\\n', 'binary');\n }\n\n this.push(data);\n return this._offset += data.length;\n }\n }, {\n key: \"addContent\",\n value: function addContent(data) {\n this.page.write(data);\n return this;\n }\n }, {\n key: \"_refEnd\",\n value: function _refEnd(ref) {\n this._offsets[ref.id - 1] = ref.offset;\n\n if (--this._waiting === 0 && this._ended) {\n this._finalize();\n\n return this._ended = false;\n }\n }\n }, {\n key: \"write\",\n value: function write(filename, fn) {\n // print a deprecation warning with a stacktrace\n var err = new Error(\"PDFDocument#write is deprecated, and will be removed in a future version of PDFKit. Please pipe the document into a Node stream.\");\n console.warn(err.stack);\n this.pipe(fs.createWriteStream(filename));\n this.end();\n return this.once('end', fn);\n }\n }, {\n key: \"end\",\n value: function end() {\n this.flushPages();\n this._info = this.ref();\n\n for (var key in this.info) {\n var val = this.info[key];\n\n if (typeof val === 'string') {\n val = new String(val);\n }\n\n var entry = this.ref(val);\n entry.end();\n this._info.data[key] = entry;\n }\n\n this._info.end();\n\n for (var name in this._fontFamilies) {\n var font = this._fontFamilies[name];\n font.finalize();\n }\n\n this.endOutline();\n this.endMarkings();\n\n this._root.end();\n\n this._root.data.Pages.end();\n\n this._root.data.Names.end();\n\n this.endAcroForm();\n\n if (this._root.data.ViewerPreferences) {\n this._root.data.ViewerPreferences.end();\n }\n\n if (this._security) {\n this._security.end();\n }\n\n if (this._waiting === 0) {\n return this._finalize();\n } else {\n return this._ended = true;\n }\n }\n }, {\n key: \"_finalize\",\n value: function _finalize() {\n // generate xref\n var xRefOffset = this._offset;\n\n this._write('xref');\n\n this._write(\"0 \".concat(this._offsets.length + 1));\n\n this._write('0000000000 65535 f ');\n\n var _iterator2 = _createForOfIteratorHelper(this._offsets),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var offset = _step2.value;\n offset = \"0000000000\".concat(offset).slice(-10);\n\n this._write(offset + ' 00000 n ');\n } // trailer\n\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n var trailer = {\n Size: this._offsets.length + 1,\n Root: this._root,\n Info: this._info,\n ID: [this._id, this._id]\n };\n\n if (this._security) {\n trailer.Encrypt = this._security.dictionary;\n }\n\n this._write('trailer');\n\n this._write(PDFObject.convert(trailer));\n\n this._write('startxref');\n\n this._write(\"\".concat(xRefOffset));\n\n this._write('%%EOF'); // end the stream\n\n\n return this.push(null);\n }\n }, {\n key: \"toString\",\n value: function toString() {\n return '[object PDFDocument]';\n }\n }]);\n\n return PDFDocument;\n}(_stream.default.Readable);\n\nvar mixin = function mixin(methods) {\n Object.assign(PDFDocument.prototype, methods);\n};\n\nmixin(ColorMixin);\nmixin(VectorMixin);\nmixin(FontsMixin);\nmixin(TextMixin);\nmixin(ImagesMixin);\nmixin(AnnotationsMixin);\nmixin(OutlineMixin);\nmixin(MarkingsMixin);\nmixin(AcroFormMixin);\nmixin(AttachmentsMixin);\nPDFDocument.LineWrapper = LineWrapper;\nvar _default = PDFDocument;\nexports[\"default\"] = _default;\n\n/***/ }),\n\n/***/ 4781:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_643598__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_643598__(7042);\n\n__nested_webpack_require_643598__(6992);\n\n__nested_webpack_require_643598__(1539);\n\n__nested_webpack_require_643598__(2472);\n\n__nested_webpack_require_643598__(2990);\n\n__nested_webpack_require_643598__(8927);\n\n__nested_webpack_require_643598__(3105);\n\n__nested_webpack_require_643598__(5035);\n\n__nested_webpack_require_643598__(4345);\n\n__nested_webpack_require_643598__(7174);\n\n__nested_webpack_require_643598__(2846);\n\n__nested_webpack_require_643598__(4731);\n\n__nested_webpack_require_643598__(7209);\n\n__nested_webpack_require_643598__(6319);\n\n__nested_webpack_require_643598__(8867);\n\n__nested_webpack_require_643598__(7789);\n\n__nested_webpack_require_643598__(3739);\n\n__nested_webpack_require_643598__(9368);\n\n__nested_webpack_require_643598__(4483);\n\n__nested_webpack_require_643598__(2056);\n\n__nested_webpack_require_643598__(3462);\n\n__nested_webpack_require_643598__(678);\n\n__nested_webpack_require_643598__(7462);\n\n__nested_webpack_require_643598__(3824);\n\n__nested_webpack_require_643598__(5021);\n\n__nested_webpack_require_643598__(2974);\n\n__nested_webpack_require_643598__(5016);\n\n__nested_webpack_require_643598__(9135);\n\nvar inflate = __nested_webpack_require_643598__(311);\n\nvar _require = __nested_webpack_require_643598__(1753),\n swap32LE = _require.swap32LE; // Shift size for getting the index-1 table offset.\n\n\nvar SHIFT_1 = 6 + 5; // Shift size for getting the index-2 table offset.\n\nvar SHIFT_2 = 5; // Difference between the two shift sizes,\n// for getting an index-1 offset from an index-2 offset. 6=11-5\n\nvar SHIFT_1_2 = SHIFT_1 - SHIFT_2; // Number of index-1 entries for the BMP. 32=0x20\n// This part of the index-1 table is omitted from the serialized form.\n\nvar OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1; // Number of entries in an index-2 block. 64=0x40\n\nvar INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2; // Mask for getting the lower bits for the in-index-2-block offset. */\n\nvar INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1; // Shift size for shifting left the index array values.\n// Increases possible data size with 16-bit index values at the cost\n// of compactability.\n// This requires data blocks to be aligned by DATA_GRANULARITY.\n\nvar INDEX_SHIFT = 2; // Number of entries in a data block. 32=0x20\n\nvar DATA_BLOCK_LENGTH = 1 << SHIFT_2; // Mask for getting the lower bits for the in-data-block offset.\n\nvar DATA_MASK = DATA_BLOCK_LENGTH - 1; // The part of the index-2 table for U+D800..U+DBFF stores values for\n// lead surrogate code _units_ not code _points_.\n// Values for lead surrogate code _points_ are indexed with this portion of the table.\n// Length=32=0x20=0x400>>SHIFT_2. (There are 1024=0x400 lead surrogates.)\n\nvar LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;\nvar LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2; // Count the lengths of both BMP pieces. 2080=0x820\n\nvar INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH; // The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n// Length 32=0x20 for lead bytes C0..DF, regardless of SHIFT_2.\n\nvar UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;\nvar UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; // U+0800 is the first code point after 2-byte UTF-8\n// The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n// Variable length, for code points up to highStart, where the last single-value range starts.\n// Maximum length 512=0x200=0x100000>>SHIFT_1.\n// (For 0x100000 supplementary code points U+10000..U+10ffff.)\n//\n// The part of the index-2 table for supplementary code points starts\n// after this index-1 table.\n//\n// Both the index-1 table and the following part of the index-2 table\n// are omitted completely if there is only BMP data.\n\nvar INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH; // The alignment size of a data block. Also the granularity for compaction.\n\nvar DATA_GRANULARITY = 1 << INDEX_SHIFT;\n\nvar UnicodeTrie = /*#__PURE__*/function () {\n function UnicodeTrie(data) {\n var isBuffer = typeof data.readUInt32BE === 'function' && typeof data.slice === 'function';\n\n if (isBuffer || data instanceof Uint8Array) {\n // read binary format\n var uncompressedLength;\n\n if (isBuffer) {\n this.highStart = data.readUInt32LE(0);\n this.errorValue = data.readUInt32LE(4);\n uncompressedLength = data.readUInt32LE(8);\n data = data.slice(12);\n } else {\n var view = new DataView(data.buffer);\n this.highStart = view.getUint32(0, true);\n this.errorValue = view.getUint32(4, true);\n uncompressedLength = view.getUint32(8, true);\n data = data.subarray(12);\n } // double inflate the actual trie data\n\n\n data = inflate(data, new Uint8Array(uncompressedLength));\n data = inflate(data, new Uint8Array(uncompressedLength)); // swap bytes from little-endian\n\n swap32LE(data);\n this.data = new Uint32Array(data.buffer);\n } else {\n // pre-parsed data\n var _data = data;\n this.data = _data.data;\n this.highStart = _data.highStart;\n this.errorValue = _data.errorValue;\n }\n }\n\n var _proto = UnicodeTrie.prototype;\n\n _proto.get = function get(codePoint) {\n var index;\n\n if (codePoint < 0 || codePoint > 0x10ffff) {\n return this.errorValue;\n }\n\n if (codePoint < 0xd800 || codePoint > 0xdbff && codePoint <= 0xffff) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the index.\n // data is stored in the index array itself.\n index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n return this.data[index];\n }\n\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n index = (this.data[LSCP_INDEX_2_OFFSET + (codePoint - 0xd800 >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n return this.data[index];\n }\n\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n index = this.data[INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> SHIFT_1)];\n index = this.data[index + (codePoint >> SHIFT_2 & INDEX_2_MASK)];\n index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);\n return this.data[index];\n }\n\n return this.data[this.data.length - DATA_GRANULARITY];\n };\n\n return UnicodeTrie;\n}();\n\nmodule.exports = UnicodeTrie;\n\n/***/ }),\n\n/***/ 1753:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_649894__) {\n\n\"use strict\";\n\n\n__nested_webpack_require_649894__(6992);\n\n__nested_webpack_require_649894__(1539);\n\n__nested_webpack_require_649894__(2472);\n\n__nested_webpack_require_649894__(2990);\n\n__nested_webpack_require_649894__(8927);\n\n__nested_webpack_require_649894__(3105);\n\n__nested_webpack_require_649894__(5035);\n\n__nested_webpack_require_649894__(4345);\n\n__nested_webpack_require_649894__(7174);\n\n__nested_webpack_require_649894__(2846);\n\n__nested_webpack_require_649894__(4731);\n\n__nested_webpack_require_649894__(7209);\n\n__nested_webpack_require_649894__(6319);\n\n__nested_webpack_require_649894__(8867);\n\n__nested_webpack_require_649894__(7789);\n\n__nested_webpack_require_649894__(3739);\n\n__nested_webpack_require_649894__(9368);\n\n__nested_webpack_require_649894__(4483);\n\n__nested_webpack_require_649894__(2056);\n\n__nested_webpack_require_649894__(3462);\n\n__nested_webpack_require_649894__(678);\n\n__nested_webpack_require_649894__(7462);\n\n__nested_webpack_require_649894__(3824);\n\n__nested_webpack_require_649894__(5021);\n\n__nested_webpack_require_649894__(2974);\n\n__nested_webpack_require_649894__(5016);\n\n__nested_webpack_require_649894__(9135);\n\nvar isBigEndian = new Uint8Array(new Uint32Array([0x12345678]).buffer)[0] === 0x12;\n\nvar swap = function swap(b, n, m) {\n var i = b[n];\n b[n] = b[m];\n b[m] = i;\n};\n\nvar swap32 = function swap32(array) {\n var len = array.length;\n\n for (var i = 0; i < len; i += 4) {\n swap(array, i, i + 3);\n swap(array, i + 1, i + 2);\n }\n};\n\nvar swap32LE = function swap32LE(array) {\n if (isBigEndian) {\n swap32(array);\n }\n};\n\nmodule.exports = {\n swap32LE: swap32LE\n};\n\n/***/ }),\n\n/***/ 8071:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_651232__) {\n\n\"use strict\";\n\n\nvar SVGtoPDF = __nested_webpack_require_651232__(8519);\n\nmodule.exports = SVGtoPDF;\n\n/***/ }),\n\n/***/ 8519:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_651416__) {\n\n\"use strict\";\n/* module decorator */ module = __nested_webpack_require_651416__.nmd(module);\n\n\n__nested_webpack_require_651416__(8309);\n\n__nested_webpack_require_651416__(7941);\n\n__nested_webpack_require_651416__(3210);\n\n__nested_webpack_require_651416__(4916);\n\n__nested_webpack_require_651416__(4723);\n\n__nested_webpack_require_651416__(3728);\n\n__nested_webpack_require_651416__(5306);\n\n__nested_webpack_require_651416__(7042);\n\n__nested_webpack_require_651416__(9653);\n\n__nested_webpack_require_651416__(3123);\n\n__nested_webpack_require_651416__(2222);\n\n__nested_webpack_require_651416__(6992);\n\n__nested_webpack_require_651416__(1539);\n\n__nested_webpack_require_651416__(3948);\n\n__nested_webpack_require_651416__(9254);\n\n__nested_webpack_require_651416__(3290);\n\nvar SVGtoPDF = function SVGtoPDF(doc, svg, x, y, options) {\n \"use strict\";\n\n var NamedColors = {\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 134, 11],\n darkgray: [169, 169, 169],\n darkgrey: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 250, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n grey: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgrey: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 221],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n rebeccapurple: [102, 51, 153],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [112, 128, 144],\n slategrey: [112, 128, 144],\n snow: [255, 250, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0]\n };\n var DefaultColors = {\n black: [NamedColors.black, 1],\n white: [NamedColors.white, 1],\n transparent: [NamedColors.black, 0]\n };\n var Entities = {\n quot: 34,\n amp: 38,\n lt: 60,\n gt: 62,\n apos: 39,\n OElig: 338,\n oelig: 339,\n Scaron: 352,\n scaron: 353,\n Yuml: 376,\n circ: 710,\n tilde: 732,\n ensp: 8194,\n emsp: 8195,\n thinsp: 8201,\n zwnj: 8204,\n zwj: 8205,\n lrm: 8206,\n rlm: 8207,\n ndash: 8211,\n mdash: 8212,\n lsquo: 8216,\n rsquo: 8217,\n sbquo: 8218,\n ldquo: 8220,\n rdquo: 8221,\n bdquo: 8222,\n dagger: 8224,\n Dagger: 8225,\n permil: 8240,\n lsaquo: 8249,\n rsaquo: 8250,\n euro: 8364,\n nbsp: 160,\n iexcl: 161,\n cent: 162,\n pound: 163,\n curren: 164,\n yen: 165,\n brvbar: 166,\n sect: 167,\n uml: 168,\n copy: 169,\n ordf: 170,\n laquo: 171,\n not: 172,\n shy: 173,\n reg: 174,\n macr: 175,\n deg: 176,\n plusmn: 177,\n sup2: 178,\n sup3: 179,\n acute: 180,\n micro: 181,\n para: 182,\n middot: 183,\n cedil: 184,\n sup1: 185,\n ordm: 186,\n raquo: 187,\n frac14: 188,\n frac12: 189,\n frac34: 190,\n iquest: 191,\n Agrave: 192,\n Aacute: 193,\n Acirc: 194,\n Atilde: 195,\n Auml: 196,\n Aring: 197,\n AElig: 198,\n Ccedil: 199,\n Egrave: 200,\n Eacute: 201,\n Ecirc: 202,\n Euml: 203,\n Igrave: 204,\n Iacute: 205,\n Icirc: 206,\n Iuml: 207,\n ETH: 208,\n Ntilde: 209,\n Ograve: 210,\n Oacute: 211,\n Ocirc: 212,\n Otilde: 213,\n Ouml: 214,\n times: 215,\n Oslash: 216,\n Ugrave: 217,\n Uacute: 218,\n Ucirc: 219,\n Uuml: 220,\n Yacute: 221,\n THORN: 222,\n szlig: 223,\n agrave: 224,\n aacute: 225,\n acirc: 226,\n atilde: 227,\n auml: 228,\n aring: 229,\n aelig: 230,\n ccedil: 231,\n egrave: 232,\n eacute: 233,\n ecirc: 234,\n euml: 235,\n igrave: 236,\n iacute: 237,\n icirc: 238,\n iuml: 239,\n eth: 240,\n ntilde: 241,\n ograve: 242,\n oacute: 243,\n ocirc: 244,\n otilde: 245,\n ouml: 246,\n divide: 247,\n oslash: 248,\n ugrave: 249,\n uacute: 250,\n ucirc: 251,\n uuml: 252,\n yacute: 253,\n thorn: 254,\n yuml: 255,\n fnof: 402,\n Alpha: 913,\n Beta: 914,\n Gamma: 915,\n Delta: 916,\n Epsilon: 917,\n Zeta: 918,\n Eta: 919,\n Theta: 920,\n Iota: 921,\n Kappa: 922,\n Lambda: 923,\n Mu: 924,\n Nu: 925,\n Xi: 926,\n Omicron: 927,\n Pi: 928,\n Rho: 929,\n Sigma: 931,\n Tau: 932,\n Upsilon: 933,\n Phi: 934,\n Chi: 935,\n Psi: 936,\n Omega: 937,\n alpha: 945,\n beta: 946,\n gamma: 947,\n delta: 948,\n epsilon: 949,\n zeta: 950,\n eta: 951,\n theta: 952,\n iota: 953,\n kappa: 954,\n lambda: 955,\n mu: 956,\n nu: 957,\n xi: 958,\n omicron: 959,\n pi: 960,\n rho: 961,\n sigmaf: 962,\n sigma: 963,\n tau: 964,\n upsilon: 965,\n phi: 966,\n chi: 967,\n psi: 968,\n omega: 969,\n thetasym: 977,\n upsih: 978,\n piv: 982,\n bull: 8226,\n hellip: 8230,\n prime: 8242,\n Prime: 8243,\n oline: 8254,\n frasl: 8260,\n weierp: 8472,\n image: 8465,\n real: 8476,\n trade: 8482,\n alefsym: 8501,\n larr: 8592,\n uarr: 8593,\n rarr: 8594,\n darr: 8595,\n harr: 8596,\n crarr: 8629,\n lArr: 8656,\n uArr: 8657,\n rArr: 8658,\n dArr: 8659,\n hArr: 8660,\n forall: 8704,\n part: 8706,\n exist: 8707,\n empty: 8709,\n nabla: 8711,\n isin: 8712,\n notin: 8713,\n ni: 8715,\n prod: 8719,\n sum: 8721,\n minus: 8722,\n lowast: 8727,\n radic: 8730,\n prop: 8733,\n infin: 8734,\n ang: 8736,\n and: 8743,\n or: 8744,\n cap: 8745,\n cup: 8746,\n int: 8747,\n there4: 8756,\n sim: 8764,\n cong: 8773,\n asymp: 8776,\n ne: 8800,\n equiv: 8801,\n le: 8804,\n ge: 8805,\n sub: 8834,\n sup: 8835,\n nsub: 8836,\n sube: 8838,\n supe: 8839,\n oplus: 8853,\n otimes: 8855,\n perp: 8869,\n sdot: 8901,\n lceil: 8968,\n rceil: 8969,\n lfloor: 8970,\n rfloor: 8971,\n lang: 9001,\n rang: 9002,\n loz: 9674,\n spades: 9824,\n clubs: 9827,\n hearts: 9829,\n diams: 9830\n };\n var PathArguments = {\n A: 7,\n a: 7,\n C: 6,\n c: 6,\n H: 1,\n h: 1,\n L: 2,\n l: 2,\n M: 2,\n m: 2,\n Q: 4,\n q: 4,\n S: 4,\n s: 4,\n T: 2,\n t: 2,\n V: 1,\n v: 1,\n Z: 0,\n z: 0\n };\n var PathFlags = {\n A3: true,\n A4: true,\n a3: true,\n a4: true\n };\n var Properties = {\n 'color': {\n inherit: true,\n initial: undefined\n },\n 'visibility': {\n inherit: true,\n initial: 'visible',\n values: {\n 'hidden': 'hidden',\n 'collapse': 'hidden',\n 'visible': 'visible'\n }\n },\n 'fill': {\n inherit: true,\n initial: DefaultColors.black\n },\n 'stroke': {\n inherit: true,\n initial: 'none'\n },\n 'stop-color': {\n inherit: false,\n initial: DefaultColors.black\n },\n 'fill-opacity': {\n inherit: true,\n initial: 1\n },\n 'stroke-opacity': {\n inherit: true,\n initial: 1\n },\n 'stop-opacity': {\n inherit: false,\n initial: 1\n },\n 'fill-rule': {\n inherit: true,\n initial: 'nonzero',\n values: {\n 'nonzero': 'nonzero',\n 'evenodd': 'evenodd'\n }\n },\n 'clip-rule': {\n inherit: true,\n initial: 'nonzero',\n values: {\n 'nonzero': 'nonzero',\n 'evenodd': 'evenodd'\n }\n },\n 'stroke-width': {\n inherit: true,\n initial: 1\n },\n 'stroke-dasharray': {\n inherit: true,\n initial: []\n },\n 'stroke-dashoffset': {\n inherit: true,\n initial: 0\n },\n 'stroke-miterlimit': {\n inherit: true,\n initial: 4\n },\n 'stroke-linejoin': {\n inherit: true,\n initial: 'miter',\n values: {\n 'miter': 'miter',\n 'round': 'round',\n 'bevel': 'bevel'\n }\n },\n 'stroke-linecap': {\n inherit: true,\n initial: 'butt',\n values: {\n 'butt': 'butt',\n 'round': 'round',\n 'square': 'square'\n }\n },\n 'font-size': {\n inherit: true,\n initial: 16,\n values: {\n 'xx-small': 9,\n 'x-small': 10,\n 'small': 13,\n 'medium': 16,\n 'large': 18,\n 'x-large': 24,\n 'xx-large': 32\n }\n },\n 'font-family': {\n inherit: true,\n initial: 'sans-serif'\n },\n 'font-weight': {\n inherit: true,\n initial: 'normal',\n values: {\n '600': 'bold',\n '700': 'bold',\n '800': 'bold',\n '900': 'bold',\n 'bold': 'bold',\n 'bolder': 'bold',\n '500': 'normal',\n '400': 'normal',\n '300': 'normal',\n '200': 'normal',\n '100': 'normal',\n 'normal': 'normal',\n 'lighter': 'normal'\n }\n },\n 'font-style': {\n inherit: true,\n initial: 'normal',\n values: {\n 'italic': 'italic',\n 'oblique': 'italic',\n 'normal': 'normal'\n }\n },\n 'text-anchor': {\n inherit: true,\n initial: 'start',\n values: {\n 'start': 'start',\n 'middle': 'middle',\n 'end': 'end'\n }\n },\n 'direction': {\n inherit: true,\n initial: 'ltr',\n values: {\n 'ltr': 'ltr',\n 'rtl': 'rtl'\n }\n },\n 'dominant-baseline': {\n inherit: true,\n initial: 'baseline',\n values: {\n 'auto': 'baseline',\n 'baseline': 'baseline',\n 'before-edge': 'before-edge',\n 'text-before-edge': 'before-edge',\n 'middle': 'middle',\n 'central': 'central',\n 'after-edge': 'after-edge',\n 'text-after-edge': 'after-edge',\n 'ideographic': 'ideographic',\n 'alphabetic': 'alphabetic',\n 'hanging': 'hanging',\n 'mathematical': 'mathematical'\n }\n },\n 'alignment-baseline': {\n inherit: false,\n initial: undefined,\n values: {\n 'auto': 'baseline',\n 'baseline': 'baseline',\n 'before-edge': 'before-edge',\n 'text-before-edge': 'before-edge',\n 'middle': 'middle',\n 'central': 'central',\n 'after-edge': 'after-edge',\n 'text-after-edge': 'after-edge',\n 'ideographic': 'ideographic',\n 'alphabetic': 'alphabetic',\n 'hanging': 'hanging',\n 'mathematical': 'mathematical'\n }\n },\n 'baseline-shift': {\n inherit: true,\n initial: 'baseline',\n values: {\n 'baseline': 'baseline',\n 'sub': 'sub',\n 'super': 'super'\n }\n },\n 'word-spacing': {\n inherit: true,\n initial: 0,\n values: {\n normal: 0\n }\n },\n 'letter-spacing': {\n inherit: true,\n initial: 0,\n values: {\n normal: 0\n }\n },\n 'text-decoration': {\n inherit: false,\n initial: 'none',\n values: {\n 'none': 'none',\n 'underline': 'underline',\n 'overline': 'overline',\n 'line-through': 'line-through'\n }\n },\n 'xml:space': {\n inherit: true,\n initial: 'default',\n css: 'white-space',\n values: {\n 'preserve': 'preserve',\n 'default': 'default',\n 'pre': 'preserve',\n 'pre-line': 'preserve',\n 'pre-wrap': 'preserve',\n 'nowrap': 'default'\n }\n },\n 'marker-start': {\n inherit: true,\n initial: 'none'\n },\n 'marker-mid': {\n inherit: true,\n initial: 'none'\n },\n 'marker-end': {\n inherit: true,\n initial: 'none'\n },\n 'opacity': {\n inherit: false,\n initial: 1\n },\n 'transform': {\n inherit: false,\n initial: [1, 0, 0, 1, 0, 0]\n },\n 'display': {\n inherit: false,\n initial: 'inline',\n values: {\n 'none': 'none',\n 'inline': 'inline',\n 'block': 'inline'\n }\n },\n 'clip-path': {\n inherit: false,\n initial: 'none'\n },\n 'mask': {\n inherit: false,\n initial: 'none'\n },\n 'overflow': {\n inherit: false,\n initial: 'hidden',\n values: {\n 'hidden': 'hidden',\n 'scroll': 'hidden',\n 'visible': 'visible'\n }\n }\n };\n\n function docBeginGroup(bbox) {\n var group = new function PDFGroup() {}();\n group.name = 'G' + (doc._groupCount = (doc._groupCount || 0) + 1);\n group.resources = doc.ref();\n group.xobj = doc.ref({\n Type: 'XObject',\n Subtype: 'Form',\n FormType: 1,\n BBox: bbox,\n Group: {\n S: 'Transparency',\n CS: 'DeviceRGB',\n I: true,\n K: false\n },\n Resources: group.resources\n });\n group.xobj.write('');\n group.savedMatrix = doc._ctm;\n group.savedPage = doc.page;\n groupStack.push(group);\n doc._ctm = [1, 0, 0, 1, 0, 0];\n doc.page = {\n width: doc.page.width,\n height: doc.page.height,\n write: function write(data) {\n group.xobj.write(data);\n },\n fonts: {},\n xobjects: {},\n ext_gstates: {},\n patterns: {}\n };\n return group;\n }\n\n function docEndGroup(group) {\n if (group !== groupStack.pop()) {\n throw 'Group not matching';\n }\n\n if (Object.keys(doc.page.fonts).length) {\n group.resources.data.Font = doc.page.fonts;\n }\n\n if (Object.keys(doc.page.xobjects).length) {\n group.resources.data.XObject = doc.page.xobjects;\n }\n\n if (Object.keys(doc.page.ext_gstates).length) {\n group.resources.data.ExtGState = doc.page.ext_gstates;\n }\n\n if (Object.keys(doc.page.patterns).length) {\n group.resources.data.Pattern = doc.page.patterns;\n }\n\n group.resources.end();\n group.xobj.end();\n doc._ctm = group.savedMatrix;\n doc.page = group.savedPage;\n }\n\n function docInsertGroup(group) {\n doc.page.xobjects[group.name] = group.xobj;\n doc.addContent('/' + group.name + ' Do');\n }\n\n function docApplyMask(group, clip) {\n var name = 'M' + (doc._maskCount = (doc._maskCount || 0) + 1);\n var gstate = doc.ref({\n Type: 'ExtGState',\n CA: 1,\n ca: 1,\n BM: 'Normal',\n SMask: {\n S: 'Luminosity',\n G: group.xobj,\n BC: clip ? [0, 0, 0] : [1, 1, 1]\n }\n });\n gstate.end();\n doc.page.ext_gstates[name] = gstate;\n doc.addContent('/' + name + ' gs');\n }\n\n function docCreatePattern(group, dx, dy, matrix) {\n var pattern = new function PDFPattern() {}();\n pattern.group = group;\n pattern.dx = dx;\n pattern.dy = dy;\n pattern.matrix = matrix || [1, 0, 0, 1, 0, 0];\n return pattern;\n }\n\n function docUsePattern(pattern, stroke) {\n var name = 'P' + (doc._patternCount = (doc._patternCount || 0) + 1);\n var ref = doc.ref({\n Type: 'Pattern',\n PatternType: 1,\n PaintType: 1,\n TilingType: 2,\n BBox: [0, 0, pattern.dx, pattern.dy],\n XStep: pattern.dx,\n YStep: pattern.dy,\n Matrix: multiplyMatrix(doc._ctm, pattern.matrix),\n Resources: {\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n XObject: function () {\n var temp = {};\n temp[pattern.group.name] = pattern.group.xobj;\n return temp;\n }()\n }\n });\n ref.write('/' + pattern.group.name + ' Do');\n ref.end();\n doc.page.patterns[name] = ref;\n\n if (stroke) {\n doc.addContent('/Pattern CS');\n doc.addContent('/' + name + ' SCN');\n } else {\n doc.addContent('/Pattern cs');\n doc.addContent('/' + name + ' scn');\n }\n }\n\n function docBeginText(font, size) {\n if (!doc.page.fonts[font.id]) {\n doc.page.fonts[font.id] = font.ref();\n }\n\n doc.addContent('BT').addContent('/' + font.id + ' ' + size + ' Tf');\n }\n\n function docSetTextMatrix(a, b, c, d, e, f) {\n doc.addContent(validateNumber(a) + ' ' + validateNumber(b) + ' ' + validateNumber(-c) + ' ' + validateNumber(-d) + ' ' + validateNumber(e) + ' ' + validateNumber(f) + ' Tm');\n }\n\n function docSetTextMode(fill, stroke) {\n var mode = fill && stroke ? 2 : stroke ? 1 : fill ? 0 : 3;\n doc.addContent(mode + ' Tr');\n }\n\n function docWriteGlyph(glyph) {\n doc.addContent('<' + glyph + '> Tj');\n }\n\n function docEndText() {\n doc.addContent('ET');\n }\n\n function docFillColor(color) {\n if (color[0].constructor.name === 'PDFPattern') {\n doc.fillOpacity(color[1]);\n docUsePattern(color[0], false);\n } else {\n doc.fillColor(color[0], color[1]);\n }\n }\n\n function docStrokeColor(color) {\n if (color[0].constructor.name === 'PDFPattern') {\n doc.strokeOpacity(color[1]);\n docUsePattern(color[0], true);\n } else {\n doc.strokeColor(color[0], color[1]);\n }\n }\n\n function docInsertLink(x, y, w, h, url) {\n var ref = doc.ref({\n Type: 'Annot',\n Subtype: 'Link',\n Rect: [x, y, w, h],\n Border: [0, 0, 0],\n A: {\n S: 'URI',\n URI: new String(url)\n }\n });\n ref.end();\n links.push(ref);\n }\n\n function parseXml(xml) {\n var SvgNode = function SvgNode(tag, type, value, error) {\n this.error = error;\n this.nodeName = tag;\n this.nodeValue = value;\n this.nodeType = type;\n this.attributes = Object.create(null);\n this.childNodes = [];\n this.parentNode = null;\n this.id = '';\n this.textContent = '';\n this.classList = [];\n };\n\n SvgNode.prototype.getAttribute = function (attr) {\n return this.attributes[attr] != null ? this.attributes[attr] : null;\n };\n\n SvgNode.prototype.getElementById = function (id) {\n var result = null;\n\n (function recursive(node) {\n if (result) {\n return;\n }\n\n if (node.nodeType === 1) {\n if (node.id === id) {\n result = node;\n }\n\n for (var i = 0; i < node.childNodes.length; i++) {\n recursive(node.childNodes[i]);\n }\n }\n })(this);\n\n return result;\n };\n\n SvgNode.prototype.getElementsByTagName = function (tag) {\n var result = [];\n\n (function recursive(node) {\n if (node.nodeType === 1) {\n if (node.nodeName === tag) {\n result.push(node);\n }\n\n for (var i = 0; i < node.childNodes.length; i++) {\n recursive(node.childNodes[i]);\n }\n }\n })(this);\n\n return result;\n };\n\n var parser = new StringParser(xml.trim()),\n result,\n child,\n error = false;\n\n var recursive = function recursive() {\n var temp, child;\n\n if (temp = parser.match(/^<([\\w:.-]+)\\s*/, true)) {\n // Opening tag\n var node = new SvgNode(temp[1], 1, null, error);\n\n while (temp = parser.match(/^([\\w:.-]+)(?:\\s*=\\s*\"([^\"]*)\"|\\s*=\\s*'([^']*)')?\\s*/, true)) {\n // Attribute\n var attr = temp[1],\n value = decodeEntities(temp[2] || temp[3] || '');\n\n if (!node.attributes[attr]) {\n node.attributes[attr] = value;\n\n if (attr === 'id') {\n node.id = value;\n }\n\n if (attr === 'class') {\n node.classList = value.split(' ');\n }\n } else {\n warningCallback('parseXml: duplicate attribute \"' + attr + '\"');\n error = true;\n }\n }\n\n if (parser.match(/^>/)) {\n // End of opening tag\n while (child = recursive()) {\n node.childNodes.push(child);\n child.parentNode = node;\n node.textContent += child.nodeType === 3 || child.nodeType === 4 ? child.nodeValue : child.textContent;\n }\n\n if (temp = parser.match(/^<\\/([\\w:.-]+)\\s*>/, true)) {\n // Closing tag\n if (temp[1] === node.nodeName) {\n return node;\n } else {\n warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & closing \"' + temp[1] + '\"');\n error = true;\n return node;\n }\n } else {\n warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & not closing');\n error = true;\n return node;\n }\n } else if (parser.match(/^\\/>/)) {\n // Self-closing tag\n return node;\n } else {\n warningCallback('parseXml: tag could not be parsed \"' + node.nodeName + '\"');\n error = true;\n }\n } else if (temp = parser.match(/^<!--[\\s\\S]*?-->/)) {\n // Comment\n return new SvgNode(null, 8, temp, error);\n } else if (temp = parser.match(/^<\\?[\\s\\S]*?\\?>/)) {\n // Processing instructions\n return new SvgNode(null, 7, temp, error);\n } else if (temp = parser.match(/^<!DOCTYPE\\s*([\\s\\S]*?)>/)) {\n // Doctype\n return new SvgNode(null, 10, temp, error);\n } else if (temp = parser.match(/^<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/, true)) {\n // Cdata node\n return new SvgNode('#cdata-section', 4, temp[1], error);\n } else if (temp = parser.match(/^([^<]+)/, true)) {\n // Text node\n return new SvgNode('#text', 3, decodeEntities(temp[1]), error);\n }\n };\n\n while (child = recursive()) {\n if (child.nodeType === 1 && !result) {\n result = child;\n } else if (child.nodeType === 1 || child.nodeType === 3 && child.nodeValue.trim() !== '') {\n warningCallback('parseXml: data after document end has been discarded');\n }\n }\n\n if (parser.matchAll()) {\n warningCallback('parseXml: parsing error');\n }\n\n return result;\n }\n\n ;\n\n function decodeEntities(str) {\n return str.replace(/&(?:#([0-9]+)|#[xX]([0-9A-Fa-f]+)|([0-9A-Za-z]+));/g, function (mt, m0, m1, m2) {\n if (m0) {\n return String.fromCharCode(parseInt(m0, 10));\n } else if (m1) {\n return String.fromCharCode(parseInt(m1, 16));\n } else if (m2 && Entities[m2]) {\n return String.fromCharCode(Entities[m2]);\n } else {\n return mt;\n }\n });\n }\n\n function parseColor(raw) {\n var temp, result;\n raw = (raw || '').trim();\n\n if (temp = NamedColors[raw]) {\n result = [temp.slice(), 1];\n } else if (temp = raw.match(/^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)$/i)) {\n temp[1] = parseInt(temp[1]);\n temp[2] = parseInt(temp[2]);\n temp[3] = parseInt(temp[3]);\n temp[4] = parseFloat(temp[4]);\n\n if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256 && temp[4] <= 1) {\n result = [temp.slice(1, 4), temp[4]];\n }\n } else if (temp = raw.match(/^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)$/i)) {\n temp[1] = parseInt(temp[1]);\n temp[2] = parseInt(temp[2]);\n temp[3] = parseInt(temp[3]);\n\n if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\n result = [temp.slice(1, 4), 1];\n }\n } else if (temp = raw.match(/^rgb\\(\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*\\)$/i)) {\n temp[1] = 2.55 * parseFloat(temp[1]);\n temp[2] = 2.55 * parseFloat(temp[2]);\n temp[3] = 2.55 * parseFloat(temp[3]);\n\n if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\n result = [temp.slice(1, 4), 1];\n }\n } else if (temp = raw.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)) {\n result = [[parseInt(temp[1], 16), parseInt(temp[2], 16), parseInt(temp[3], 16)], 1];\n } else if (temp = raw.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)) {\n result = [[0x11 * parseInt(temp[1], 16), 0x11 * parseInt(temp[2], 16), 0x11 * parseInt(temp[3], 16)], 1];\n }\n\n return colorCallback ? colorCallback(result, raw) : result;\n }\n\n function opacityToColor(color, opacity, isMask) {\n var newColor = color[0].slice(),\n newOpacity = color[1] * opacity;\n\n if (isMask) {\n for (var i = 0; i < color.length; i++) {\n newColor[i] *= newOpacity;\n }\n\n return [newColor, 1];\n } else {\n return [newColor, newOpacity];\n }\n }\n\n function multiplyMatrix() {\n function multiply(a, b) {\n return [a[0] * b[0] + a[2] * b[1], a[1] * b[0] + a[3] * b[1], a[0] * b[2] + a[2] * b[3], a[1] * b[2] + a[3] * b[3], a[0] * b[4] + a[2] * b[5] + a[4], a[1] * b[4] + a[3] * b[5] + a[5]];\n }\n\n var result = arguments[0];\n\n for (var i = 1; i < arguments.length; i++) {\n result = multiply(result, arguments[i]);\n }\n\n return result;\n }\n\n function transformPoint(p, m) {\n return [m[0] * p[0] + m[2] * p[1] + m[4], m[1] * p[0] + m[3] * p[1] + m[5]];\n }\n\n function getGlobalMatrix() {\n var ctm = doc._ctm;\n\n for (var i = groupStack.length - 1; i >= 0; i--) {\n ctm = multiplyMatrix(groupStack[i].savedMatrix, ctm);\n }\n\n return ctm;\n }\n\n function getPageBBox() {\n return new SvgShape().M(0, 0).L(doc.page.width, 0).L(doc.page.width, doc.page.height).L(0, doc.page.height).transform(inverseMatrix(getGlobalMatrix())).getBoundingBox();\n }\n\n function inverseMatrix(m) {\n var dt = m[0] * m[3] - m[1] * m[2];\n return [m[3] / dt, -m[1] / dt, -m[2] / dt, m[0] / dt, (m[2] * m[5] - m[3] * m[4]) / dt, (m[1] * m[4] - m[0] * m[5]) / dt];\n }\n\n function validateMatrix(m) {\n var m0 = validateNumber(m[0]),\n m1 = validateNumber(m[1]),\n m2 = validateNumber(m[2]),\n m3 = validateNumber(m[3]),\n m4 = validateNumber(m[4]),\n m5 = validateNumber(m[5]);\n\n if (isNotEqual(m0 * m3 - m1 * m2, 0)) {\n return [m0, m1, m2, m3, m4, m5];\n }\n }\n\n function solveEquation(curve) {\n var a = curve[2] || 0,\n b = curve[1] || 0,\n c = curve[0] || 0;\n\n if (isEqual(a, 0) && isEqual(b, 0)) {\n return [];\n } else if (isEqual(a, 0)) {\n return [-c / b];\n } else {\n var d = b * b - 4 * a * c;\n\n if (isNotEqual(d, 0) && d > 0) {\n return [(-b + Math.sqrt(d)) / (2 * a), (-b - Math.sqrt(d)) / (2 * a)];\n } else if (isEqual(d, 0)) {\n return [-b / (2 * a)];\n } else {\n return [];\n }\n }\n }\n\n function getCurveValue(t, curve) {\n return (curve[0] || 0) + (curve[1] || 0) * t + (curve[2] || 0) * t * t + (curve[3] || 0) * t * t * t;\n }\n\n function isEqual(number, ref) {\n return Math.abs(number - ref) < 1e-10;\n }\n\n function isNotEqual(number, ref) {\n return Math.abs(number - ref) >= 1e-10;\n }\n\n function validateNumber(n) {\n return n > -1e21 && n < 1e21 ? Math.round(n * 1e6) / 1e6 : 0;\n }\n\n function isArrayLike(v) {\n return typeof v === 'object' && v !== null && typeof v.length === 'number';\n }\n\n function parseTranform(v) {\n var parser = new StringParser((v || '').trim()),\n result = [1, 0, 0, 1, 0, 0],\n temp;\n\n while (temp = parser.match(/^([A-Za-z]+)\\s*[(]([^(]+)[)]/, true)) {\n var func = temp[1],\n nums = [],\n parser2 = new StringParser(temp[2].trim()),\n temp2 = void 0;\n\n while (temp2 = parser2.matchNumber()) {\n nums.push(Number(temp2));\n parser2.matchSeparator();\n }\n\n if (func === 'matrix' && nums.length === 6) {\n result = multiplyMatrix(result, [nums[0], nums[1], nums[2], nums[3], nums[4], nums[5]]);\n } else if (func === 'translate' && nums.length === 2) {\n result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], nums[1]]);\n } else if (func === 'translate' && nums.length === 1) {\n result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], 0]);\n } else if (func === 'scale' && nums.length === 2) {\n result = multiplyMatrix(result, [nums[0], 0, 0, nums[1], 0, 0]);\n } else if (func === 'scale' && nums.length === 1) {\n result = multiplyMatrix(result, [nums[0], 0, 0, nums[0], 0, 0]);\n } else if (func === 'rotate' && nums.length === 3) {\n var a = nums[0] * Math.PI / 180;\n result = multiplyMatrix(result, [1, 0, 0, 1, nums[1], nums[2]], [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0], [1, 0, 0, 1, -nums[1], -nums[2]]);\n } else if (func === 'rotate' && nums.length === 1) {\n var _a = nums[0] * Math.PI / 180;\n\n result = multiplyMatrix(result, [Math.cos(_a), Math.sin(_a), -Math.sin(_a), Math.cos(_a), 0, 0]);\n } else if (func === 'skewX' && nums.length === 1) {\n var _a2 = nums[0] * Math.PI / 180;\n\n result = multiplyMatrix(result, [1, 0, Math.tan(_a2), 1, 0, 0]);\n } else if (func === 'skewY' && nums.length === 1) {\n var _a3 = nums[0] * Math.PI / 180;\n\n result = multiplyMatrix(result, [1, Math.tan(_a3), 0, 1, 0, 0]);\n } else {\n return;\n }\n\n parser.matchSeparator();\n }\n\n if (parser.matchAll()) {\n return;\n }\n\n return result;\n }\n\n function parseAspectRatio(aspectRatio, availWidth, availHeight, elemWidth, elemHeight, initAlign) {\n var temp = (aspectRatio || '').trim().match(/^(none)$|^x(Min|Mid|Max)Y(Min|Mid|Max)(?:\\s+(meet|slice))?$/) || [],\n ratioType = temp[1] || temp[4] || 'meet',\n xAlign = temp[2] || 'Mid',\n yAlign = temp[3] || 'Mid',\n scaleX = availWidth / elemWidth,\n scaleY = availHeight / elemHeight,\n dx = {\n 'Min': 0,\n 'Mid': 0.5,\n 'Max': 1\n }[xAlign] - (initAlign || 0),\n dy = {\n 'Min': 0,\n 'Mid': 0.5,\n 'Max': 1\n }[yAlign] - (initAlign || 0);\n\n if (ratioType === 'slice') {\n scaleY = scaleX = Math.max(scaleX, scaleY);\n } else if (ratioType === 'meet') {\n scaleY = scaleX = Math.min(scaleX, scaleY);\n }\n\n return [scaleX, 0, 0, scaleY, dx * (availWidth - elemWidth * scaleX), dy * (availHeight - elemHeight * scaleY)];\n }\n\n function parseStyleAttr(v) {\n var result = Object.create(null);\n v = (v || '').trim().split(/;/);\n\n for (var i = 0; i < v.length; i++) {\n var key = (v[i].split(':')[0] || '').trim(),\n value = (v[i].split(':')[1] || '').trim();\n\n if (key) {\n result[key] = value;\n }\n }\n\n if (result['marker']) {\n if (!result['marker-start']) {\n result['marker-start'] = result['marker'];\n }\n\n if (!result['marker-mid']) {\n result['marker-mid'] = result['marker'];\n }\n\n if (!result['marker-end']) {\n result['marker-end'] = result['marker'];\n }\n }\n\n if (result['font']) {\n var fontFamily = null,\n fontSize = null,\n fontStyle = \"normal\",\n fontWeight = \"normal\",\n fontVariant = \"normal\";\n var parts = result['font'].split(/\\s+/);\n\n for (var _i = 0; _i < parts.length; _i++) {\n switch (parts[_i]) {\n case \"normal\":\n break;\n\n case \"italic\":\n case \"oblique\":\n fontStyle = parts[_i];\n break;\n\n case \"small-caps\":\n fontVariant = parts[_i];\n break;\n\n case \"bold\":\n case \"bolder\":\n case \"lighter\":\n case \"100\":\n case \"200\":\n case \"300\":\n case \"400\":\n case \"500\":\n case \"600\":\n case \"700\":\n case \"800\":\n case \"900\":\n fontWeight = parts[_i];\n break;\n\n default:\n if (!fontSize) {\n fontSize = parts[_i].split('/')[0];\n } else {\n if (!fontFamily) {\n fontFamily = parts[_i];\n } else {\n fontFamily += ' ' + parts[_i];\n }\n }\n\n break;\n }\n }\n\n if (!result['font-style']) {\n result['font-style'] = fontStyle;\n }\n\n if (!result['font-variant']) {\n result['font-variant'] = fontVariant;\n }\n\n if (!result['font-weight']) {\n result['font-weight'] = fontWeight;\n }\n\n if (!result['font-size']) {\n result['font-size'] = fontSize;\n }\n\n if (!result['font-family']) {\n result['font-family'] = fontFamily;\n }\n }\n\n return result;\n }\n\n function parseSelector(v) {\n var parts = v.split(/(?=[.#])/g),\n ids = [],\n classes = [],\n tags = [],\n temp;\n\n for (var i = 0; i < parts.length; i++) {\n if (temp = parts[i].match(/^[#]([_A-Za-z0-9-]+)$/)) {\n ids.push(temp[1]);\n } else if (temp = parts[i].match(/^[.]([_A-Za-z0-9-]+)$/)) {\n classes.push(temp[1]);\n } else if (temp = parts[i].match(/^([_A-Za-z0-9-]+)$/)) {\n tags.push(temp[1]);\n } else if (parts[i] !== '*') {\n return;\n }\n }\n\n return {\n tags: tags,\n ids: ids,\n classes: classes,\n specificity: ids.length * 10000 + classes.length * 100 + tags.length\n };\n }\n\n function parseStyleSheet(v) {\n var parser = new StringParser(v.trim()),\n rules = [],\n rule;\n\n while (rule = parser.match(/^\\s*([^\\{\\}]*?)\\s*\\{([^\\{\\}]*?)\\}/, true)) {\n var selectors = rule[1].split(/\\s*,\\s*/g),\n css = parseStyleAttr(rule[2]);\n\n for (var i = 0; i < selectors.length; i++) {\n var selector = parseSelector(selectors[i]);\n\n if (selector) {\n rules.push({\n selector: selector,\n css: css\n });\n }\n }\n }\n\n return rules;\n }\n\n function matchesSelector(elem, selector) {\n if (elem.nodeType !== 1) {\n return false;\n }\n\n for (var i = 0; i < selector.tags.length; i++) {\n if (selector.tags[i] !== elem.nodeName) {\n return false;\n }\n }\n\n for (var _i2 = 0; _i2 < selector.ids.length; _i2++) {\n if (selector.ids[_i2] !== elem.id) {\n return false;\n }\n }\n\n for (var _i3 = 0; _i3 < selector.classes.length; _i3++) {\n if (elem.classList.indexOf(selector.classes[_i3]) === -1) {\n return false;\n }\n }\n\n return true;\n }\n\n function getStyle(elem) {\n var result = Object.create(null);\n var specificities = Object.create(null);\n\n for (var i = 0; i < styleRules.length; i++) {\n var rule = styleRules[i];\n\n if (matchesSelector(elem, rule.selector)) {\n for (var key in rule.css) {\n if (!(specificities[key] > rule.selector.specificity)) {\n result[key] = rule.css[key];\n specificities[key] = rule.selector.specificity;\n }\n }\n }\n }\n\n return result;\n }\n\n function combineArrays(array1, array2) {\n return array1.concat(array2.slice(array1.length));\n }\n\n function getAscent(font, size) {\n return Math.max(font.ascender, (font.bbox[3] || font.bbox.maxY) * (font.scale || 1)) * size / 1000;\n }\n\n function getDescent(font, size) {\n return Math.min(font.descender, (font.bbox[1] || font.bbox.minY) * (font.scale || 1)) * size / 1000;\n }\n\n function getXHeight(font, size) {\n return (font.xHeight || 0.5 * (font.ascender - font.descender)) * size / 1000;\n }\n\n function getBaseline(font, size, baseline, shift) {\n var dy1, dy2;\n\n switch (baseline) {\n case 'middle':\n dy1 = 0.5 * getXHeight(font, size);\n break;\n\n case 'central':\n dy1 = 0.5 * (getDescent(font, size) + getAscent(font, size));\n break;\n\n case 'after-edge':\n case 'text-after-edge':\n dy1 = getDescent(font, size);\n break;\n\n case 'alphabetic':\n case 'auto':\n case 'baseline':\n dy1 = 0;\n break;\n\n case 'mathematical':\n dy1 = 0.5 * getAscent(font, size);\n break;\n\n case 'hanging':\n dy1 = 0.8 * getAscent(font, size);\n break;\n\n case 'before-edge':\n case 'text-before-edge':\n dy1 = getAscent(font, size);\n break;\n\n default:\n dy1 = 0;\n break;\n }\n\n switch (shift) {\n case 'baseline':\n dy2 = 0;\n break;\n\n case 'super':\n dy2 = 0.6 * size;\n break;\n\n case 'sub':\n dy2 = -0.6 * size;\n break;\n\n default:\n dy2 = shift;\n break;\n }\n\n return dy1 - dy2;\n }\n\n function getTextPos(font, size, text) {\n var encoded = font.encode('' + text),\n hex = encoded[0],\n pos = encoded[1],\n data = [];\n\n for (var i = 0; i < hex.length; i++) {\n var unicode = font.unicode ? font.unicode[parseInt(hex[i], 16)] : [text.charCodeAt(i)];\n data.push({\n glyph: hex[i],\n unicode: unicode,\n width: pos[i].advanceWidth * size / 1000,\n xOffset: pos[i].xOffset * size / 1000,\n yOffset: pos[i].yOffset * size / 1000,\n xAdvance: pos[i].xAdvance * size / 1000,\n yAdvance: pos[i].yAdvance * size / 1000\n });\n }\n\n return data;\n }\n\n function createSVGElement(obj, inherits) {\n switch (obj.nodeName) {\n case 'use':\n return new SvgElemUse(obj, inherits);\n\n case 'symbol':\n return new SvgElemSymbol(obj, inherits);\n\n case 'g':\n return new SvgElemGroup(obj, inherits);\n\n case 'a':\n return new SvgElemLink(obj, inherits);\n\n case 'svg':\n return new SvgElemSvg(obj, inherits);\n\n case 'image':\n return new SVGElemImage(obj, inherits);\n\n case 'rect':\n return new SvgElemRect(obj, inherits);\n\n case 'circle':\n return new SvgElemCircle(obj, inherits);\n\n case 'ellipse':\n return new SvgElemEllipse(obj, inherits);\n\n case 'line':\n return new SvgElemLine(obj, inherits);\n\n case 'polyline':\n return new SvgElemPolyline(obj, inherits);\n\n case 'polygon':\n return new SvgElemPolygon(obj, inherits);\n\n case 'path':\n return new SvgElemPath(obj, inherits);\n\n case 'text':\n return new SvgElemText(obj, inherits);\n\n case 'tspan':\n return new SvgElemTspan(obj, inherits);\n\n case 'textPath':\n return new SvgElemTextPath(obj, inherits);\n\n case '#text':\n case '#cdata-section':\n return new SvgElemTextNode(obj, inherits);\n\n default:\n return new SvgElem(obj, inherits);\n }\n }\n\n var StringParser = function StringParser(str) {\n this.match = function (exp, all) {\n var temp = str.match(exp);\n\n if (!temp || temp.index !== 0) {\n return;\n }\n\n str = str.substring(temp[0].length);\n return all ? temp : temp[0];\n };\n\n this.matchSeparator = function () {\n return this.match(/^(?:\\s*,\\s*|\\s*|)/);\n };\n\n this.matchSpace = function () {\n return this.match(/^(?:\\s*)/);\n };\n\n this.matchLengthUnit = function () {\n return this.match(/^(?:px|pt|cm|mm|in|pc|em|ex|%|)/);\n };\n\n this.matchNumber = function () {\n return this.match(/^(?:[-+]?(?:[0-9]+[.][0-9]+|[0-9]+[.]|[.][0-9]+|[0-9]+)(?:[eE][-+]?[0-9]+)?)/);\n };\n\n this.matchAll = function () {\n return this.match(/^[\\s\\S]+/);\n };\n };\n\n var BezierSegment = function BezierSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n var divisions = 6 * precision;\n var equationX = [p1x, -3 * p1x + 3 * c1x, 3 * p1x - 6 * c1x + 3 * c2x, -p1x + 3 * c1x - 3 * c2x + p2x];\n var equationY = [p1y, -3 * p1y + 3 * c1y, 3 * p1y - 6 * c1y + 3 * c2y, -p1y + 3 * c1y - 3 * c2y + p2y];\n var derivativeX = [-3 * p1x + 3 * c1x, 6 * p1x - 12 * c1x + 6 * c2x, -3 * p1x + 9 * c1x - 9 * c2x + 3 * p2x];\n var derivativeY = [-3 * p1y + 3 * c1y, 6 * p1y - 12 * c1y + 6 * c2y, -3 * p1y + 9 * c1y - 9 * c2y + 3 * p2y];\n var lengthMap = [0];\n\n for (var i = 1; i <= divisions; i++) {\n var t = (i - 0.5) / divisions;\n var dx = getCurveValue(t, derivativeX) / divisions,\n dy = getCurveValue(t, derivativeY) / divisions,\n l = Math.sqrt(dx * dx + dy * dy);\n lengthMap[i] = lengthMap[i - 1] + l;\n }\n\n this.totalLength = lengthMap[divisions];\n this.startPoint = [p1x, p1y, isEqual(p1x, c1x) && isEqual(p1y, c1y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(c1y - p1y, c1x - p1x)];\n this.endPoint = [p2x, p2y, isEqual(c2x, p2x) && isEqual(c2y, p2y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(p2y - c2y, p2x - c2x)];\n\n this.getBoundingBox = function () {\n var temp;\n var minX = getCurveValue(0, equationX),\n minY = getCurveValue(0, equationY),\n maxX = getCurveValue(1, equationX),\n maxY = getCurveValue(1, equationY);\n\n if (minX > maxX) {\n temp = maxX;\n maxX = minX;\n minX = temp;\n }\n\n if (minY > maxY) {\n temp = maxY;\n maxY = minY;\n minY = temp;\n }\n\n var rootsX = solveEquation(derivativeX);\n\n for (var _i4 = 0; _i4 < rootsX.length; _i4++) {\n if (rootsX[_i4] >= 0 && rootsX[_i4] <= 1) {\n var _x = getCurveValue(rootsX[_i4], equationX);\n\n if (_x < minX) {\n minX = _x;\n }\n\n if (_x > maxX) {\n maxX = _x;\n }\n }\n }\n\n var rootsY = solveEquation(derivativeY);\n\n for (var _i5 = 0; _i5 < rootsY.length; _i5++) {\n if (rootsY[_i5] >= 0 && rootsY[_i5] <= 1) {\n var _y = getCurveValue(rootsY[_i5], equationY);\n\n if (_y < minY) {\n minY = _y;\n }\n\n if (_y > maxY) {\n maxY = _y;\n }\n }\n }\n\n return [minX, minY, maxX, maxY];\n };\n\n this.getPointAtLength = function (l) {\n if (isEqual(l, 0)) {\n return this.startPoint;\n }\n\n if (isEqual(l, this.totalLength)) {\n return this.endPoint;\n }\n\n if (l < 0 || l > this.totalLength) {\n return;\n }\n\n for (var _i6 = 1; _i6 <= divisions; _i6++) {\n var l1 = lengthMap[_i6 - 1],\n l2 = lengthMap[_i6];\n\n if (l1 <= l && l <= l2) {\n var _t = (_i6 - (l2 - l) / (l2 - l1)) / divisions,\n _x2 = getCurveValue(_t, equationX),\n _y2 = getCurveValue(_t, equationY),\n _dx = getCurveValue(_t, derivativeX),\n _dy = getCurveValue(_t, derivativeY);\n\n return [_x2, _y2, Math.atan2(_dy, _dx)];\n }\n }\n };\n };\n\n var LineSegment = function LineSegment(p1x, p1y, p2x, p2y) {\n this.totalLength = Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y));\n this.startPoint = [p1x, p1y, Math.atan2(p2y - p1y, p2x - p1x)];\n this.endPoint = [p2x, p2y, Math.atan2(p2y - p1y, p2x - p1x)];\n\n this.getBoundingBox = function () {\n return [Math.min(this.startPoint[0], this.endPoint[0]), Math.min(this.startPoint[1], this.endPoint[1]), Math.max(this.startPoint[0], this.endPoint[0]), Math.max(this.startPoint[1], this.endPoint[1])];\n };\n\n this.getPointAtLength = function (l) {\n if (l >= 0 && l <= this.totalLength) {\n var r = l / this.totalLength || 0,\n _x3 = this.startPoint[0] + r * (this.endPoint[0] - this.startPoint[0]),\n _y3 = this.startPoint[1] + r * (this.endPoint[1] - this.startPoint[1]);\n\n return [_x3, _y3, this.startPoint[2]];\n }\n };\n };\n\n var SvgShape = function SvgShape() {\n this.pathCommands = [];\n this.pathSegments = [];\n this.startPoint = null;\n this.endPoint = null;\n this.totalLength = 0;\n var startX = 0,\n startY = 0,\n currX = 0,\n currY = 0,\n lastCom,\n lastCtrlX,\n lastCtrlY;\n\n this.move = function (x, y) {\n startX = currX = x;\n startY = currY = y;\n return null;\n };\n\n this.line = function (x, y) {\n var segment = new LineSegment(currX, currY, x, y);\n currX = x;\n currY = y;\n return segment;\n };\n\n this.curve = function (c1x, c1y, c2x, c2y, x, y) {\n var segment = new BezierSegment(currX, currY, c1x, c1y, c2x, c2y, x, y);\n currX = x;\n currY = y;\n return segment;\n };\n\n this.close = function () {\n var segment = new LineSegment(currX, currY, startX, startY);\n currX = startX;\n currY = startY;\n return segment;\n };\n\n this.addCommand = function (data) {\n this.pathCommands.push(data);\n var segment = this[data[0]].apply(this, data.slice(3));\n\n if (segment) {\n segment.hasStart = data[1];\n segment.hasEnd = data[2];\n this.startPoint = this.startPoint || segment.startPoint;\n this.endPoint = segment.endPoint;\n this.pathSegments.push(segment);\n this.totalLength += segment.totalLength;\n }\n };\n\n this.M = function (x, y) {\n this.addCommand(['move', true, true, x, y]);\n lastCom = 'M';\n return this;\n };\n\n this.m = function (x, y) {\n return this.M(currX + x, currY + y);\n };\n\n this.Z = this.z = function () {\n this.addCommand(['close', true, true]);\n lastCom = 'Z';\n return this;\n };\n\n this.L = function (x, y) {\n this.addCommand(['line', true, true, x, y]);\n lastCom = 'L';\n return this;\n };\n\n this.l = function (x, y) {\n return this.L(currX + x, currY + y);\n };\n\n this.H = function (x) {\n return this.L(x, currY);\n };\n\n this.h = function (x) {\n return this.L(currX + x, currY);\n };\n\n this.V = function (y) {\n return this.L(currX, y);\n };\n\n this.v = function (y) {\n return this.L(currX, currY + y);\n };\n\n this.C = function (c1x, c1y, c2x, c2y, x, y) {\n this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\n lastCom = 'C';\n lastCtrlX = c2x;\n lastCtrlY = c2y;\n return this;\n };\n\n this.c = function (c1x, c1y, c2x, c2y, x, y) {\n return this.C(currX + c1x, currY + c1y, currX + c2x, currY + c2y, currX + x, currY + y);\n };\n\n this.S = function (c1x, c1y, x, y) {\n return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), c1x, c1y, x, y);\n };\n\n this.s = function (c1x, c1y, x, y) {\n return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), currX + c1x, currY + c1y, currX + x, currY + y);\n };\n\n this.Q = function (cx, cy, x, y) {\n var c1x = currX + 2 / 3 * (cx - currX),\n c1y = currY + 2 / 3 * (cy - currY),\n c2x = x + 2 / 3 * (cx - x),\n c2y = y + 2 / 3 * (cy - y);\n this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\n lastCom = 'Q';\n lastCtrlX = cx;\n lastCtrlY = cy;\n return this;\n };\n\n this.q = function (c1x, c1y, x, y) {\n return this.Q(currX + c1x, currY + c1y, currX + x, currY + y);\n };\n\n this.T = function (x, y) {\n return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), x, y);\n };\n\n this.t = function (x, y) {\n return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), currX + x, currY + y);\n };\n\n this.A = function (rx, ry, fi, fa, fs, x, y) {\n if (isEqual(rx, 0) || isEqual(ry, 0)) {\n this.addCommand(['line', true, true, x, y]);\n } else {\n fi = fi * (Math.PI / 180);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n fa = 1 * !!fa;\n fs = 1 * !!fs;\n var x1 = Math.cos(fi) * (currX - x) / 2 + Math.sin(fi) * (currY - y) / 2,\n y1 = Math.cos(fi) * (currY - y) / 2 - Math.sin(fi) * (currX - x) / 2,\n lambda = x1 * x1 / (rx * rx) + y1 * y1 / (ry * ry);\n\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n var r = Math.sqrt(Math.max(0, rx * rx * ry * ry - rx * rx * y1 * y1 - ry * ry * x1 * x1) / (rx * rx * y1 * y1 + ry * ry * x1 * x1)),\n x2 = (fa === fs ? -1 : 1) * r * rx * y1 / ry,\n y2 = (fa === fs ? 1 : -1) * r * ry * x1 / rx;\n var cx = Math.cos(fi) * x2 - Math.sin(fi) * y2 + (currX + x) / 2,\n cy = Math.sin(fi) * x2 + Math.cos(fi) * y2 + (currY + y) / 2,\n th1 = Math.atan2((y1 - y2) / ry, (x1 - x2) / rx),\n th2 = Math.atan2((-y1 - y2) / ry, (-x1 - x2) / rx);\n\n if (fs === 0 && th2 - th1 > 0) {\n th2 -= 2 * Math.PI;\n } else if (fs === 1 && th2 - th1 < 0) {\n th2 += 2 * Math.PI;\n }\n\n var segms = Math.ceil(Math.abs(th2 - th1) / (Math.PI / precision));\n\n for (var i = 0; i < segms; i++) {\n var th3 = th1 + i * (th2 - th1) / segms,\n th4 = th1 + (i + 1) * (th2 - th1) / segms,\n t = 4 / 3 * Math.tan((th4 - th3) / 4);\n var c1x = cx + Math.cos(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) - Math.sin(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\n c1y = cy + Math.sin(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) + Math.cos(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\n c2x = cx + Math.cos(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) - Math.sin(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\n c2y = cy + Math.sin(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) + Math.cos(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\n endX = cx + Math.cos(fi) * rx * Math.cos(th4) - Math.sin(fi) * ry * Math.sin(th4),\n endY = cy + Math.sin(fi) * rx * Math.cos(th4) + Math.cos(fi) * ry * Math.sin(th4);\n this.addCommand(['curve', i === 0, i === segms - 1, c1x, c1y, c2x, c2y, endX, endY]);\n }\n }\n\n lastCom = 'A';\n return this;\n };\n\n this.a = function (rx, ry, fi, fa, fs, x, y) {\n return this.A(rx, ry, fi, fa, fs, currX + x, currY + y);\n };\n\n this.path = function (d) {\n var command,\n value,\n temp,\n parser = new StringParser((d || '').trim());\n\n while (command = parser.match(/^[astvzqmhlcASTVZQMHLC]/)) {\n parser.matchSeparator();\n var values = [];\n\n while (value = PathFlags[command + values.length] ? parser.match(/^[01]/) : parser.matchNumber()) {\n parser.matchSeparator();\n\n if (values.length === PathArguments[command]) {\n this[command].apply(this, values);\n values = [];\n\n if (command === 'M') {\n command = 'L';\n } else if (command === 'm') {\n command = 'l';\n }\n }\n\n values.push(Number(value));\n }\n\n if (values.length === PathArguments[command]) {\n this[command].apply(this, values);\n } else {\n warningCallback('SvgPath: command ' + command + ' with ' + values.length + ' numbers');\n return;\n }\n }\n\n if (temp = parser.matchAll()) {\n warningCallback('SvgPath: unexpected string ' + temp);\n }\n\n return this;\n };\n\n this.getBoundingBox = function () {\n var bbox = [Infinity, Infinity, -Infinity, -Infinity];\n\n function addBounds(bbox1) {\n if (bbox1[0] < bbox[0]) {\n bbox[0] = bbox1[0];\n }\n\n if (bbox1[2] > bbox[2]) {\n bbox[2] = bbox1[2];\n }\n\n if (bbox1[1] < bbox[1]) {\n bbox[1] = bbox1[1];\n }\n\n if (bbox1[3] > bbox[3]) {\n bbox[3] = bbox1[3];\n }\n }\n\n for (var i = 0; i < this.pathSegments.length; i++) {\n addBounds(this.pathSegments[i].getBoundingBox());\n }\n\n if (bbox[0] === Infinity) {\n bbox[0] = 0;\n }\n\n if (bbox[1] === Infinity) {\n bbox[1] = 0;\n }\n\n if (bbox[2] === -Infinity) {\n bbox[2] = 0;\n }\n\n if (bbox[3] === -Infinity) {\n bbox[3] = 0;\n }\n\n return bbox;\n };\n\n this.getPointAtLength = function (l) {\n if (l >= 0 && l <= this.totalLength) {\n var temp;\n\n for (var i = 0; i < this.pathSegments.length; i++) {\n if (temp = this.pathSegments[i].getPointAtLength(l)) {\n return temp;\n }\n\n l -= this.pathSegments[i].totalLength;\n }\n\n return this.endPoint;\n }\n };\n\n this.transform = function (m) {\n this.pathSegments = [];\n this.startPoint = null;\n this.endPoint = null;\n this.totalLength = 0;\n\n for (var i = 0; i < this.pathCommands.length; i++) {\n var data = this.pathCommands.shift();\n\n for (var j = 3; j < data.length; j += 2) {\n var p = transformPoint([data[j], data[j + 1]], m);\n data[j] = p[0];\n data[j + 1] = p[1];\n }\n\n this.addCommand(data);\n }\n\n return this;\n };\n\n this.mergeShape = function (shape) {\n for (var i = 0; i < shape.pathCommands.length; i++) {\n this.addCommand(shape.pathCommands[i].slice());\n }\n\n return this;\n };\n\n this.clone = function () {\n return new SvgShape().mergeShape(this);\n };\n\n this.insertInDocument = function () {\n for (var i = 0; i < this.pathCommands.length; i++) {\n var command = this.pathCommands[i][0],\n values = this.pathCommands[i].slice(3);\n\n switch (command) {\n case 'move':\n doc.moveTo(values[0], values[1]);\n break;\n\n case 'line':\n doc.lineTo(values[0], values[1]);\n break;\n\n case 'curve':\n doc.bezierCurveTo(values[0], values[1], values[2], values[3], values[4], values[5]);\n break;\n\n case 'close':\n doc.closePath();\n break;\n }\n }\n };\n\n this.getSubPaths = function () {\n var subPaths = [],\n shape = new SvgShape();\n\n for (var i = 0; i < this.pathCommands.length; i++) {\n var data = this.pathCommands[i],\n command = this.pathCommands[i][0];\n\n if (command === 'move' && i !== 0) {\n subPaths.push(shape);\n shape = new SvgShape();\n }\n\n shape.addCommand(data);\n }\n\n subPaths.push(shape);\n return subPaths;\n };\n\n this.getMarkers = function () {\n var markers = [],\n subPaths = this.getSubPaths();\n\n for (var i = 0; i < subPaths.length; i++) {\n var subPath = subPaths[i],\n subPathMarkers = [];\n\n for (var j = 0; j < subPath.pathSegments.length; j++) {\n var segment = subPath.pathSegments[j];\n\n if (isNotEqual(segment.totalLength, 0) || j === 0 || j === subPath.pathSegments.length - 1) {\n if (segment.hasStart) {\n var startMarker = segment.getPointAtLength(0),\n prevEndMarker = subPathMarkers.pop();\n\n if (prevEndMarker) {\n startMarker[2] = 0.5 * (prevEndMarker[2] + startMarker[2]);\n }\n\n subPathMarkers.push(startMarker);\n }\n\n if (segment.hasEnd) {\n var endMarker = segment.getPointAtLength(segment.totalLength);\n subPathMarkers.push(endMarker);\n }\n }\n }\n\n markers = markers.concat(subPathMarkers);\n }\n\n return markers;\n };\n };\n\n var SvgElem = function SvgElem(obj, inherits) {\n var styleCache = Object.create(null);\n var childrenCache = null;\n this.name = obj.nodeName;\n this.isOuterElement = obj === svg || !obj.parentNode;\n this.inherits = inherits || (!this.isOuterElement ? createSVGElement(obj.parentNode, null) : null);\n this.stack = this.inherits ? this.inherits.stack.concat(obj) : [obj];\n this.style = parseStyleAttr(typeof obj.getAttribute === 'function' && obj.getAttribute('style'));\n this.css = useCSS ? getComputedStyle(obj) : getStyle(obj);\n this.allowedChildren = [];\n\n this.attr = function (key) {\n if (typeof obj.getAttribute === 'function') {\n return obj.getAttribute(key);\n }\n };\n\n this.resolveUrl = function (value) {\n var temp = (value || '').match(/^\\s*(?:url\\(\"(.*)#(.*)\"\\)|url\\('(.*)#(.*)'\\)|url\\((.*)#(.*)\\)|(.*)#(.*))\\s*$/) || [];\n var file = temp[1] || temp[3] || temp[5] || temp[7],\n id = temp[2] || temp[4] || temp[6] || temp[8];\n\n if (id) {\n if (!file) {\n var svgObj = svg.getElementById(id);\n\n if (svgObj) {\n if (this.stack.indexOf(svgObj) === -1) {\n return svgObj;\n } else {\n warningCallback('SVGtoPDF: loop of circular references for id \"' + id + '\"');\n return;\n }\n }\n }\n\n if (documentCallback) {\n var svgs = documentCache[file];\n\n if (!svgs) {\n svgs = documentCallback(file);\n\n if (!isArrayLike(svgs)) {\n svgs = [svgs];\n }\n\n for (var i = 0; i < svgs.length; i++) {\n if (typeof svgs[i] === 'string') {\n svgs[i] = parseXml(svgs[i]);\n }\n }\n\n documentCache[file] = svgs;\n }\n\n for (var _i7 = 0; _i7 < svgs.length; _i7++) {\n var _svgObj = svgs[_i7].getElementById(id);\n\n if (_svgObj) {\n if (this.stack.indexOf(_svgObj) === -1) {\n return _svgObj;\n } else {\n warningCallback('SVGtoPDF: loop of circular references for id \"' + file + '#' + id + '\"');\n return;\n }\n }\n }\n }\n }\n };\n\n this.computeUnits = function (value, unit, percent, isFontSize) {\n if (unit === '%') {\n return parseFloat(value) / 100 * (isFontSize || percent != null ? percent : this.getViewport());\n } else if (unit === 'ex' || unit === 'em') {\n return value * {\n 'em': 1,\n 'ex': 0.5\n }[unit] * (isFontSize ? percent : this.get('font-size'));\n } else {\n return value * {\n '': 1,\n 'px': 1,\n 'pt': 96 / 72,\n 'cm': 96 / 2.54,\n 'mm': 96 / 25.4,\n 'in': 96,\n 'pc': 96 / 6\n }[unit];\n }\n };\n\n this.computeLength = function (value, percent, initial, isFontSize) {\n var parser = new StringParser((value || '').trim()),\n temp1,\n temp2;\n\n if (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string' && !parser.matchAll()) {\n return this.computeUnits(temp1, temp2, percent, isFontSize);\n }\n\n return initial;\n };\n\n this.computeLengthList = function (value, percent, strict) {\n var parser = new StringParser((value || '').trim()),\n result = [],\n temp1,\n temp2;\n\n while (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string') {\n result.push(this.computeUnits(temp1, temp2, percent));\n parser.matchSeparator();\n }\n\n if (strict && parser.matchAll()) {\n return;\n }\n\n return result;\n };\n\n this.getLength = function (key, percent, initial) {\n return this.computeLength(this.attr(key), percent, initial);\n };\n\n this.getLengthList = function (key, percent) {\n return this.computeLengthList(this.attr(key), percent);\n };\n\n this.getUrl = function (key) {\n return this.resolveUrl(this.attr(key));\n };\n\n this.getNumberList = function (key) {\n var parser = new StringParser((this.attr(key) || '').trim()),\n result = [],\n temp;\n\n while (temp = parser.matchNumber()) {\n result.push(Number(temp));\n parser.matchSeparator();\n }\n\n result.error = parser.matchAll();\n return result;\n };\n\n this.getViewbox = function (key, initial) {\n var viewBox = this.getNumberList(key);\n\n if (viewBox.length === 4 && viewBox[2] >= 0 && viewBox[3] >= 0) {\n return viewBox;\n }\n\n return initial;\n };\n\n this.getPercent = function (key, initial) {\n var value = this.attr(key);\n var parser = new StringParser((value || '').trim()),\n temp1,\n temp2;\n var number = parser.matchNumber();\n\n if (!number) {\n return initial;\n }\n\n if (parser.match('%')) {\n number *= 0.01;\n }\n\n if (parser.matchAll()) {\n return initial;\n }\n\n return Math.max(0, Math.min(1, number));\n };\n\n this.chooseValue = function (args) {\n for (var i = 0; i < arguments.length; i++) {\n if (arguments[i] != null && arguments[i] === arguments[i]) {\n return arguments[i];\n }\n }\n\n return arguments[arguments.length - 1];\n };\n\n this.get = function (key) {\n if (styleCache[key] !== undefined) {\n return styleCache[key];\n }\n\n var keyInfo = Properties[key] || {},\n value,\n result;\n\n for (var i = 0; i < 3; i++) {\n switch (i) {\n case 0:\n if (key !== 'transform') {\n // the CSS transform behaves strangely\n value = this.css[keyInfo.css || key];\n }\n\n break;\n\n case 1:\n value = this.style[key];\n break;\n\n case 2:\n value = this.attr(key);\n break;\n }\n\n if (value === 'inherit') {\n result = this.inherits ? this.inherits.get(key) : keyInfo.initial;\n\n if (result != null) {\n return styleCache[key] = result;\n }\n }\n\n if (keyInfo.values != null) {\n result = keyInfo.values[value];\n\n if (result != null) {\n return styleCache[key] = result;\n }\n }\n\n if (value != null) {\n var parsed = void 0;\n\n switch (key) {\n case 'font-size':\n result = this.computeLength(value, this.inherits ? this.inherits.get(key) : keyInfo.initial, undefined, true);\n break;\n\n case 'baseline-shift':\n result = this.computeLength(value, this.get('font-size'));\n break;\n\n case 'font-family':\n result = value || undefined;\n break;\n\n case 'opacity':\n case 'stroke-opacity':\n case 'fill-opacity':\n case 'stop-opacity':\n parsed = parseFloat(value);\n\n if (!isNaN(parsed)) {\n result = Math.max(0, Math.min(1, parsed));\n }\n\n break;\n\n case 'transform':\n result = parseTranform(value);\n break;\n\n case 'stroke-dasharray':\n if (value === 'none') {\n result = [];\n } else if (parsed = this.computeLengthList(value, this.getViewport(), true)) {\n var sum = 0,\n error = false;\n\n for (var j = 0; j < parsed.length; j++) {\n if (parsed[j] < 0) {\n error = true;\n }\n\n sum += parsed[j];\n }\n\n if (!error) {\n if (parsed.length % 2 === 1) {\n parsed = parsed.concat(parsed);\n }\n\n result = sum === 0 ? [] : parsed;\n }\n }\n\n break;\n\n case 'color':\n if (value === 'none' || value === 'transparent') {\n result = 'none';\n } else {\n result = parseColor(value);\n }\n\n break;\n\n case 'fill':\n case 'stroke':\n if (value === 'none' || value === 'transparent') {\n result = 'none';\n } else if (value === 'currentColor') {\n result = this.get('color');\n } else if (parsed = parseColor(value)) {\n return parsed;\n } else if (parsed = (value || '').split(' ')) {\n var object = this.resolveUrl(parsed[0]),\n fallbackColor = parseColor(parsed[1]);\n\n if (object == null) {\n result = fallbackColor;\n } else if (object.nodeName === 'linearGradient' || object.nodeName === 'radialGradient') {\n result = new SvgElemGradient(object, null, fallbackColor);\n } else if (object.nodeName === 'pattern') {\n result = new SvgElemPattern(object, null, fallbackColor);\n } else {\n result = fallbackColor;\n }\n }\n\n break;\n\n case 'stop-color':\n if (value === 'none' || value === 'transparent') {\n result = 'none';\n } else if (value === 'currentColor') {\n result = this.get('color');\n } else {\n result = parseColor(value);\n }\n\n break;\n\n case 'marker-start':\n case 'marker-mid':\n case 'marker-end':\n case 'clip-path':\n case 'mask':\n if (value === 'none') {\n result = 'none';\n } else {\n result = this.resolveUrl(value);\n }\n\n break;\n\n case 'stroke-width':\n parsed = this.computeLength(value, this.getViewport());\n\n if (parsed != null && parsed >= 0) {\n result = parsed;\n }\n\n break;\n\n case 'stroke-miterlimit':\n parsed = parseFloat(value);\n\n if (parsed != null && parsed >= 1) {\n result = parsed;\n }\n\n break;\n\n case 'word-spacing':\n case 'letter-spacing':\n result = this.computeLength(value, this.getViewport());\n break;\n\n case 'stroke-dashoffset':\n result = this.computeLength(value, this.getViewport());\n\n if (result != null) {\n if (result < 0) {\n // fix for crbug.com/660850\n var dasharray = this.get('stroke-dasharray');\n\n for (var _j = 0; _j < dasharray.length; _j++) {\n result += dasharray[_j];\n }\n }\n }\n\n break;\n }\n\n if (result != null) {\n return styleCache[key] = result;\n }\n }\n }\n\n return styleCache[key] = keyInfo.inherit && this.inherits ? this.inherits.get(key) : keyInfo.initial;\n };\n\n this.getChildren = function () {\n if (childrenCache != null) {\n return childrenCache;\n }\n\n var children = [];\n\n for (var i = 0; i < obj.childNodes.length; i++) {\n var child = obj.childNodes[i];\n\n if (!child.error && this.allowedChildren.indexOf(child.nodeName) !== -1) {\n children.push(createSVGElement(child, this));\n }\n }\n\n return childrenCache = children;\n };\n\n this.getParentVWidth = function () {\n return this.inherits ? this.inherits.getVWidth() : viewportWidth;\n };\n\n this.getParentVHeight = function () {\n return this.inherits ? this.inherits.getVHeight() : viewportHeight;\n };\n\n this.getParentViewport = function () {\n return Math.sqrt(0.5 * this.getParentVWidth() * this.getParentVWidth() + 0.5 * this.getParentVHeight() * this.getParentVHeight());\n };\n\n this.getVWidth = function () {\n return this.getParentVWidth();\n };\n\n this.getVHeight = function () {\n return this.getParentVHeight();\n };\n\n this.getViewport = function () {\n return Math.sqrt(0.5 * this.getVWidth() * this.getVWidth() + 0.5 * this.getVHeight() * this.getVHeight());\n };\n\n this.getBoundingBox = function () {\n var shape = this.getBoundingShape();\n return shape.getBoundingBox();\n };\n };\n\n var SvgElemStylable = function SvgElemStylable(obj, inherits) {\n SvgElem.call(this, obj, inherits);\n\n this.transform = function () {\n doc.transform.apply(doc, this.getTransformation());\n };\n\n this.clip = function () {\n if (this.get('clip-path') !== 'none') {\n var clipPath = new SvgElemClipPath(this.get('clip-path'), null);\n clipPath.useMask(this.getBoundingBox());\n return true;\n }\n };\n\n this.mask = function () {\n if (this.get('mask') !== 'none') {\n var mask = new SvgElemMask(this.get('mask'), null);\n mask.useMask(this.getBoundingBox());\n return true;\n }\n };\n\n this.getFill = function (isClip, isMask) {\n var opacity = this.get('opacity'),\n fill = this.get('fill'),\n fillOpacity = this.get('fill-opacity');\n\n if (isClip) {\n return DefaultColors.white;\n }\n\n if (fill !== 'none' && opacity && fillOpacity) {\n if (fill instanceof SvgElemGradient || fill instanceof SvgElemPattern) {\n return fill.getPaint(this.getBoundingBox(), fillOpacity * opacity, isClip, isMask);\n }\n\n return opacityToColor(fill, fillOpacity * opacity, isMask);\n }\n };\n\n this.getStroke = function (isClip, isMask) {\n var opacity = this.get('opacity'),\n stroke = this.get('stroke'),\n strokeOpacity = this.get('stroke-opacity');\n\n if (isClip || isEqual(this.get('stroke-width'), 0)) {\n return;\n }\n\n if (stroke !== 'none' && opacity && strokeOpacity) {\n if (stroke instanceof SvgElemGradient || stroke instanceof SvgElemPattern) {\n return stroke.getPaint(this.getBoundingBox(), strokeOpacity * opacity, isClip, isMask);\n }\n\n return opacityToColor(stroke, strokeOpacity * opacity, isMask);\n }\n };\n };\n\n var SvgElemHasChildren = function SvgElemHasChildren(obj, inherits) {\n SvgElemStylable.call(this, obj, inherits);\n this.allowedChildren = ['use', 'g', 'a', 'svg', 'image', 'rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'path', 'text'];\n\n this.getBoundingShape = function () {\n var shape = new SvgShape(),\n children = this.getChildren();\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].get('display') !== 'none') {\n if (typeof children[i].getBoundingShape === 'function') {\n var childShape = children[i].getBoundingShape().clone();\n\n if (typeof children[i].getTransformation === 'function') {\n childShape.transform(children[i].getTransformation());\n }\n\n shape.mergeShape(childShape);\n }\n }\n }\n\n return shape;\n };\n\n this.drawChildren = function (isClip, isMask) {\n var children = this.getChildren();\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].get('display') !== 'none') {\n if (typeof children[i].drawInDocument === 'function') {\n children[i].drawInDocument(isClip, isMask);\n }\n }\n }\n };\n };\n\n var SvgElemContainer = function SvgElemContainer(obj, inherits) {\n SvgElemHasChildren.call(this, obj, inherits);\n\n this.drawContent = function (isClip, isMask) {\n this.transform();\n var clipped = this.clip(),\n masked = this.mask(),\n group;\n\n if ((this.get('opacity') < 1 || clipped || masked) && !isClip) {\n group = docBeginGroup(getPageBBox());\n }\n\n this.drawChildren(isClip, isMask);\n\n if (group) {\n docEndGroup(group);\n doc.fillOpacity(this.get('opacity'));\n docInsertGroup(group);\n }\n };\n };\n\n var SvgElemUse = function SvgElemUse(obj, inherits) {\n SvgElemContainer.call(this, obj, inherits);\n var x = this.getLength('x', this.getVWidth(), 0),\n y = this.getLength('y', this.getVHeight(), 0),\n child = this.getUrl('href') || this.getUrl('xlink:href');\n\n if (child) {\n child = createSVGElement(child, this);\n }\n\n this.getChildren = function () {\n return child ? [child] : [];\n };\n\n this.drawInDocument = function (isClip, isMask) {\n doc.save();\n this.drawContent(isClip, isMask);\n doc.restore();\n };\n\n this.getTransformation = function () {\n return multiplyMatrix(this.get('transform'), [1, 0, 0, 1, x, y]);\n };\n };\n\n var SvgElemSymbol = function SvgElemSymbol(obj, inherits) {\n SvgElemContainer.call(this, obj, inherits);\n var width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\n height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight());\n\n if (inherits instanceof SvgElemUse) {\n width = inherits.getLength('width', inherits.getParentVWidth(), width);\n height = inherits.getLength('height', inherits.getParentVHeight(), height);\n }\n\n var aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\n viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n\n this.getVWidth = function () {\n return viewBox[2];\n };\n\n this.getVHeight = function () {\n return viewBox[3];\n };\n\n this.drawInDocument = function (isClip, isMask) {\n doc.save();\n this.drawContent(isClip, isMask);\n doc.restore();\n };\n\n this.getTransformation = function () {\n return multiplyMatrix(parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]);\n };\n };\n\n var SvgElemGroup = function SvgElemGroup(obj, inherits) {\n SvgElemContainer.call(this, obj, inherits);\n\n this.drawInDocument = function (isClip, isMask) {\n doc.save();\n\n if (this.link && !isClip && !isMask) {\n this.addLink();\n }\n\n this.drawContent(isClip, isMask);\n doc.restore();\n };\n\n this.getTransformation = function () {\n return this.get('transform');\n };\n };\n\n var SvgElemLink = function SvgElemLink(obj, inherits) {\n if (inherits && inherits.isText) {\n SvgElemTspan.call(this, obj, inherits);\n this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\n } else {\n SvgElemGroup.call(this, obj, inherits);\n }\n\n this.link = this.attr('href') || this.attr('xlink:href');\n\n this.addLink = function () {\n if (this.link.match(/^(?:[a-z][a-z0-9+.-]*:|\\/\\/)?/i) && this.getChildren().length) {\n var bbox = this.getBoundingShape().transform(getGlobalMatrix()).getBoundingBox();\n docInsertLink(bbox[0], bbox[1], bbox[2], bbox[3], this.link);\n }\n };\n };\n\n var SvgElemSvg = function SvgElemSvg(obj, inherits) {\n SvgElemContainer.call(this, obj, inherits);\n var width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\n height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight()),\n x = this.getLength('x', this.getParentVWidth(), 0),\n y = this.getLength('y', this.getParentVHeight(), 0);\n\n if (inherits instanceof SvgElemUse) {\n width = inherits.getLength('width', inherits.getParentVWidth(), width);\n height = inherits.getLength('height', inherits.getParentVHeight(), height);\n }\n\n var aspectRatio = this.attr('preserveAspectRatio'),\n viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n\n if (this.isOuterElement && preserveAspectRatio) {\n x = y = 0;\n width = viewportWidth;\n height = viewportHeight;\n aspectRatio = preserveAspectRatio;\n }\n\n this.getVWidth = function () {\n return viewBox[2];\n };\n\n this.getVHeight = function () {\n return viewBox[3];\n };\n\n this.drawInDocument = function (isClip, isMask) {\n doc.save();\n\n if (this.get('overflow') === 'hidden') {\n new SvgShape().M(x, y).L(x + width, y).L(x + width, y + height).L(x, y + height).Z().transform(this.get('transform')).insertInDocument();\n doc.clip();\n }\n\n this.drawContent(isClip, isMask);\n doc.restore();\n };\n\n this.getTransformation = function () {\n return multiplyMatrix(this.get('transform'), [1, 0, 0, 1, x, y], parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]);\n };\n };\n\n var SVGElemImage = function SVGElemImage(obj, inherits) {\n SvgElemStylable.call(this, obj, inherits);\n var link = imageCallback(this.attr('href') || this.attr('xlink:href') || ''),\n x = this.getLength('x', this.getVWidth(), 0),\n y = this.getLength('y', this.getVHeight(), 0),\n width = this.getLength('width', this.getVWidth(), 'auto'),\n height = this.getLength('height', this.getVHeight(), 'auto'),\n image;\n\n try {\n image = doc.openImage(link);\n } catch (e) {\n warningCallback('SVGElemImage: failed to open image \"' + link + '\" in PDFKit');\n }\n\n if (image) {\n if (width === 'auto' && height !== 'auto') {\n width = height * image.width / image.height;\n } else if (height === 'auto' && width !== 'auto') {\n height = width * image.height / image.width;\n } else if (width === 'auto' && height === 'auto') {\n width = image.width;\n height = image.height;\n }\n }\n\n if (width === 'auto' || width < 0) {\n width = 0;\n }\n\n if (height === 'auto' || height < 0) {\n height = 0;\n }\n\n this.getTransformation = function () {\n return this.get('transform');\n };\n\n this.getBoundingShape = function () {\n return new SvgShape().M(x, y).L(x + width, y).M(x + width, y + height).L(x, y + height);\n };\n\n this.drawInDocument = function (isClip, isMask) {\n if (this.get('visibility') === 'hidden' || !image) {\n return;\n }\n\n doc.save();\n this.transform();\n\n if (this.get('overflow') === 'hidden') {\n doc.rect(x, y, width, height).clip();\n }\n\n this.clip();\n this.mask();\n doc.translate(x, y);\n doc.transform.apply(doc, parseAspectRatio(this.attr('preserveAspectRatio'), width, height, image ? image.width : width, image ? image.height : height));\n\n if (!isClip) {\n doc.fillOpacity(this.get('opacity'));\n doc.image(image, 0, 0);\n } else {\n doc.rect(0, 0, image.width, image.height);\n docFillColor(DefaultColors.white).fill();\n }\n\n doc.restore();\n };\n };\n\n var SvgElemPattern = function SvgElemPattern(obj, inherits, fallback) {\n SvgElemHasChildren.call(this, obj, inherits);\n\n this.ref = function () {\n var ref = this.getUrl('href') || this.getUrl('xlink:href');\n\n if (ref && ref.nodeName === obj.nodeName) {\n return new SvgElemPattern(ref, inherits, fallback);\n }\n }.call(this);\n\n var _attr = this.attr;\n\n this.attr = function (key) {\n var attr = _attr.call(this, key);\n\n if (attr != null || key === 'href' || key === 'xlink:href') {\n return attr;\n }\n\n return this.ref ? this.ref.attr(key) : null;\n };\n\n var _getChildren = this.getChildren;\n\n this.getChildren = function () {\n var children = _getChildren.call(this);\n\n if (children.length > 0) {\n return children;\n }\n\n return this.ref ? this.ref.getChildren() : [];\n };\n\n this.getPaint = function (bBox, gOpacity, isClip, isMask) {\n var bBoxUnitsPattern = this.attr('patternUnits') !== 'userSpaceOnUse',\n bBoxUnitsContent = this.attr('patternContentUnits') === 'objectBoundingBox',\n x = this.getLength('x', bBoxUnitsPattern ? 1 : this.getParentVWidth(), 0),\n y = this.getLength('y', bBoxUnitsPattern ? 1 : this.getParentVHeight(), 0),\n width = this.getLength('width', bBoxUnitsPattern ? 1 : this.getParentVWidth(), 0),\n height = this.getLength('height', bBoxUnitsPattern ? 1 : this.getParentVHeight(), 0);\n\n if (bBoxUnitsContent && !bBoxUnitsPattern) {\n // Use the same units for pattern & pattern content\n x = (x - bBox[0]) / (bBox[2] - bBox[0]) || 0;\n y = (y - bBox[1]) / (bBox[3] - bBox[1]) || 0;\n width = width / (bBox[2] - bBox[0]) || 0;\n height = height / (bBox[3] - bBox[1]) || 0;\n } else if (!bBoxUnitsContent && bBoxUnitsPattern) {\n x = bBox[0] + x * (bBox[2] - bBox[0]);\n y = bBox[1] + y * (bBox[3] - bBox[1]);\n width = width * (bBox[2] - bBox[0]);\n height = height * (bBox[3] - bBox[1]);\n }\n\n var viewBox = this.getViewbox('viewBox', [0, 0, width, height]),\n aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\n aspectRatioMatrix = multiplyMatrix(parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3], 0), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]),\n matrix = parseTranform(this.attr('patternTransform'));\n\n if (bBoxUnitsContent) {\n matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\n }\n\n matrix = multiplyMatrix(matrix, [1, 0, 0, 1, x, y]);\n\n if ((matrix = validateMatrix(matrix)) && (aspectRatioMatrix = validateMatrix(aspectRatioMatrix)) && (width = validateNumber(width)) && (height = validateNumber(height))) {\n var group = docBeginGroup([0, 0, width, height]);\n doc.transform.apply(doc, aspectRatioMatrix);\n this.drawChildren(isClip, isMask);\n docEndGroup(group);\n return [docCreatePattern(group, width, height, matrix), gOpacity];\n } else {\n return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\n }\n };\n\n this.getVWidth = function () {\n var bBoxUnitsPattern = this.attr('patternUnits') !== 'userSpaceOnUse',\n width = this.getLength('width', bBoxUnitsPattern ? 1 : this.getParentVWidth(), 0);\n return this.getViewbox('viewBox', [0, 0, width, 0])[2];\n };\n\n this.getVHeight = function () {\n var bBoxUnitsPattern = this.attr('patternUnits') !== 'userSpaceOnUse',\n height = this.getLength('height', bBoxUnitsPattern ? 1 : this.getParentVHeight(), 0);\n return this.getViewbox('viewBox', [0, 0, 0, height])[3];\n };\n };\n\n var SvgElemGradient = function SvgElemGradient(obj, inherits, fallback) {\n SvgElem.call(this, obj, inherits);\n this.allowedChildren = ['stop'];\n\n this.ref = function () {\n var ref = this.getUrl('href') || this.getUrl('xlink:href');\n\n if (ref && ref.nodeName === obj.nodeName) {\n return new SvgElemGradient(ref, inherits, fallback);\n }\n }.call(this);\n\n var _attr = this.attr;\n\n this.attr = function (key) {\n var attr = _attr.call(this, key);\n\n if (attr != null || key === 'href' || key === 'xlink:href') {\n return attr;\n }\n\n return this.ref ? this.ref.attr(key) : null;\n };\n\n var _getChildren = this.getChildren;\n\n this.getChildren = function () {\n var children = _getChildren.call(this);\n\n if (children.length > 0) {\n return children;\n }\n\n return this.ref ? this.ref.getChildren() : [];\n };\n\n this.getPaint = function (bBox, gOpacity, isClip, isMask) {\n var children = this.getChildren();\n\n if (children.length === 0) {\n return;\n }\n\n if (children.length === 1) {\n var child = children[0],\n stopColor = child.get('stop-color');\n\n if (stopColor === 'none') {\n return;\n }\n\n return opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\n }\n\n var bBoxUnits = this.attr('gradientUnits') !== 'userSpaceOnUse',\n matrix = parseTranform(this.attr('gradientTransform')),\n spread = this.attr('spreadMethod'),\n grad,\n x1,\n x2,\n y1,\n y2,\n r2,\n nAfter = 0,\n nBefore = 0,\n nTotal = 1;\n\n if (bBoxUnits) {\n matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\n }\n\n if (matrix = validateMatrix(matrix)) {\n if (this.name === 'linearGradient') {\n x1 = this.getLength('x1', bBoxUnits ? 1 : this.getVWidth(), 0);\n x2 = this.getLength('x2', bBoxUnits ? 1 : this.getVWidth(), bBoxUnits ? 1 : this.getVWidth());\n y1 = this.getLength('y1', bBoxUnits ? 1 : this.getVHeight(), 0);\n y2 = this.getLength('y2', bBoxUnits ? 1 : this.getVHeight(), 0);\n } else {\n x2 = this.getLength('cx', bBoxUnits ? 1 : this.getVWidth(), bBoxUnits ? 0.5 : 0.5 * this.getVWidth());\n y2 = this.getLength('cy', bBoxUnits ? 1 : this.getVHeight(), bBoxUnits ? 0.5 : 0.5 * this.getVHeight());\n r2 = this.getLength('r', bBoxUnits ? 1 : this.getViewport(), bBoxUnits ? 0.5 : 0.5 * this.getViewport());\n x1 = this.getLength('fx', bBoxUnits ? 1 : this.getVWidth(), x2);\n y1 = this.getLength('fy', bBoxUnits ? 1 : this.getVHeight(), y2);\n\n if (r2 < 0) {\n warningCallback('SvgElemGradient: negative r value');\n }\n\n var d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)),\n multiplier = 1;\n\n if (d > r2) {\n // according to specification\n multiplier = r2 / d;\n x1 = x2 + (x1 - x2) * multiplier;\n y1 = y2 + (y1 - y2) * multiplier;\n }\n\n r2 = Math.max(r2, d * multiplier * (1 + 1e-6)); // fix for edge-case gradients see issue #84\n }\n\n if (spread === 'reflect' || spread === 'repeat') {\n var inv = inverseMatrix(matrix),\n corner1 = transformPoint([bBox[0], bBox[1]], inv),\n corner2 = transformPoint([bBox[2], bBox[1]], inv),\n corner3 = transformPoint([bBox[2], bBox[3]], inv),\n corner4 = transformPoint([bBox[0], bBox[3]], inv);\n\n if (this.name === 'linearGradient') {\n // See file 'gradient-repeat-maths.png'\n nAfter = Math.max((corner1[0] - x2) * (x2 - x1) + (corner1[1] - y2) * (y2 - y1), (corner2[0] - x2) * (x2 - x1) + (corner2[1] - y2) * (y2 - y1), (corner3[0] - x2) * (x2 - x1) + (corner3[1] - y2) * (y2 - y1), (corner4[0] - x2) * (x2 - x1) + (corner4[1] - y2) * (y2 - y1)) / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n nBefore = Math.max((corner1[0] - x1) * (x1 - x2) + (corner1[1] - y1) * (y1 - y2), (corner2[0] - x1) * (x1 - x2) + (corner2[1] - y1) * (y1 - y2), (corner3[0] - x1) * (x1 - x2) + (corner3[1] - y1) * (y1 - y2), (corner4[0] - x1) * (x1 - x2) + (corner4[1] - y1) * (y1 - y2)) / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n } else {\n nAfter = Math.sqrt(Math.max(Math.pow(corner1[0] - x2, 2) + Math.pow(corner1[1] - y2, 2), Math.pow(corner2[0] - x2, 2) + Math.pow(corner2[1] - y2, 2), Math.pow(corner3[0] - x2, 2) + Math.pow(corner3[1] - y2, 2), Math.pow(corner4[0] - x2, 2) + Math.pow(corner4[1] - y2, 2))) / r2 - 1;\n }\n\n nAfter = Math.ceil(nAfter + 0.5); // Add a little more because the stroke can extend outside of the bounding box\n\n nBefore = Math.ceil(nBefore + 0.5);\n nTotal = nBefore + 1 + nAfter; // How many times the gradient needs to be repeated to fill the object bounding box\n }\n\n if (this.name === 'linearGradient') {\n grad = doc.linearGradient(x1 - nBefore * (x2 - x1), y1 - nBefore * (y2 - y1), x2 + nAfter * (x2 - x1), y2 + nAfter * (y2 - y1));\n } else {\n grad = doc.radialGradient(x1, y1, 0, x2, y2, r2 + nAfter * r2);\n }\n\n for (var n = 0; n < nTotal; n++) {\n var offset = 0,\n inOrder = spread !== 'reflect' || (n - nBefore) % 2 === 0;\n\n for (var i = 0; i < children.length; i++) {\n var _child = children[inOrder ? i : children.length - 1 - i],\n _stopColor = _child.get('stop-color');\n\n if (_stopColor === 'none') {\n _stopColor = DefaultColors.transparent;\n }\n\n _stopColor = opacityToColor(_stopColor, _child.get('stop-opacity') * gOpacity, isMask);\n offset = Math.max(offset, inOrder ? _child.getPercent('offset', 0) : 1 - _child.getPercent('offset', 0));\n\n if (i === 0 && _stopColor[0].length === 4) {\n grad._colorSpace = 'DeviceCMYK';\n } // Fix until PR #763 is merged into PDFKit\n\n\n if (i === 0 && offset > 0) {\n grad.stop((n + 0) / nTotal, _stopColor[0], _stopColor[1]);\n }\n\n grad.stop((n + offset) / (nAfter + nBefore + 1), _stopColor[0], _stopColor[1]);\n\n if (i === children.length - 1 && offset < 1) {\n grad.stop((n + 1) / nTotal, _stopColor[0], _stopColor[1]);\n }\n }\n }\n\n grad.setTransform.apply(grad, matrix);\n return [grad, 1];\n } else {\n return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\n }\n };\n };\n\n var SvgElemBasicShape = function SvgElemBasicShape(obj, inherits) {\n SvgElemStylable.call(this, obj, inherits);\n this.dashScale = 1;\n\n this.getBoundingShape = function () {\n return this.shape;\n };\n\n this.getTransformation = function () {\n return this.get('transform');\n };\n\n this.drawInDocument = function (isClip, isMask) {\n if (this.get('visibility') === 'hidden' || !this.shape) {\n return;\n }\n\n doc.save();\n this.transform();\n this.clip();\n\n if (!isClip) {\n var masked = this.mask(),\n group;\n\n if (masked) {\n group = docBeginGroup(getPageBBox());\n }\n\n var subPaths = this.shape.getSubPaths(),\n fill = this.getFill(isClip, isMask),\n stroke = this.getStroke(isClip, isMask),\n lineWidth = this.get('stroke-width'),\n lineCap = this.get('stroke-linecap');\n\n if (fill || stroke) {\n if (fill) {\n docFillColor(fill);\n }\n\n if (stroke) {\n for (var j = 0; j < subPaths.length; j++) {\n if (isEqual(subPaths[j].totalLength, 0)) {\n if ((lineCap === 'square' || lineCap === 'round') && lineWidth > 0) {\n if (subPaths[j].startPoint && subPaths[j].startPoint.length > 1) {\n var _x4 = subPaths[j].startPoint[0],\n _y4 = subPaths[j].startPoint[1];\n docFillColor(stroke);\n\n if (lineCap === 'square') {\n doc.rect(_x4 - 0.5 * lineWidth, _y4 - 0.5 * lineWidth, lineWidth, lineWidth);\n } else if (lineCap === 'round') {\n doc.circle(_x4, _y4, 0.5 * lineWidth);\n }\n\n doc.fill();\n }\n }\n }\n }\n\n var dashArray = this.get('stroke-dasharray'),\n dashOffset = this.get('stroke-dashoffset');\n\n if (isNotEqual(this.dashScale, 1)) {\n for (var _j2 = 0; _j2 < dashArray.length; _j2++) {\n dashArray[_j2] *= this.dashScale;\n }\n\n dashOffset *= this.dashScale;\n }\n\n docStrokeColor(stroke);\n doc.lineWidth(lineWidth).miterLimit(this.get('stroke-miterlimit')).lineJoin(this.get('stroke-linejoin')).lineCap(lineCap).dash(dashArray, {\n phase: dashOffset\n });\n }\n\n for (var _j3 = 0; _j3 < subPaths.length; _j3++) {\n if (subPaths[_j3].totalLength > 0) {\n subPaths[_j3].insertInDocument();\n }\n }\n\n if (fill && stroke) {\n doc.fillAndStroke(this.get('fill-rule'));\n } else if (fill) {\n doc.fill(this.get('fill-rule'));\n } else if (stroke) {\n doc.stroke();\n }\n }\n\n var markerStart = this.get('marker-start'),\n markerMid = this.get('marker-mid'),\n markerEnd = this.get('marker-end');\n\n if (markerStart !== 'none' || markerMid !== 'none' || markerEnd !== 'none') {\n var markersPos = this.shape.getMarkers();\n\n if (markerStart !== 'none') {\n var marker = new SvgElemMarker(markerStart, null);\n marker.drawMarker(false, isMask, markersPos[0], lineWidth);\n }\n\n if (markerMid !== 'none') {\n for (var i = 1; i < markersPos.length - 1; i++) {\n var _marker = new SvgElemMarker(markerMid, null);\n\n _marker.drawMarker(false, isMask, markersPos[i], lineWidth);\n }\n }\n\n if (markerEnd !== 'none') {\n var _marker2 = new SvgElemMarker(markerEnd, null);\n\n _marker2.drawMarker(false, isMask, markersPos[markersPos.length - 1], lineWidth);\n }\n }\n\n if (group) {\n docEndGroup(group);\n docInsertGroup(group);\n }\n } else {\n this.shape.insertInDocument();\n docFillColor(DefaultColors.white);\n doc.fill(this.get('clip-rule'));\n }\n\n doc.restore();\n };\n };\n\n var SvgElemRect = function SvgElemRect(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n var x = this.getLength('x', this.getVWidth(), 0),\n y = this.getLength('y', this.getVHeight(), 0),\n w = this.getLength('width', this.getVWidth(), 0),\n h = this.getLength('height', this.getVHeight(), 0),\n rx = this.getLength('rx', this.getVWidth()),\n ry = this.getLength('ry', this.getVHeight());\n\n if (rx === undefined && ry === undefined) {\n rx = ry = 0;\n } else if (rx === undefined && ry !== undefined) {\n rx = ry;\n } else if (rx !== undefined && ry === undefined) {\n ry = rx;\n }\n\n if (w > 0 && h > 0) {\n if (rx && ry) {\n rx = Math.min(rx, 0.5 * w);\n ry = Math.min(ry, 0.5 * h);\n this.shape = new SvgShape().M(x + rx, y).L(x + w - rx, y).A(rx, ry, 0, 0, 1, x + w, y + ry).L(x + w, y + h - ry).A(rx, ry, 0, 0, 1, x + w - rx, y + h).L(x + rx, y + h).A(rx, ry, 0, 0, 1, x, y + h - ry).L(x, y + ry).A(rx, ry, 0, 0, 1, x + rx, y).Z();\n } else {\n this.shape = new SvgShape().M(x, y).L(x + w, y).L(x + w, y + h).L(x, y + h).Z();\n }\n } else {\n this.shape = new SvgShape();\n }\n };\n\n var SvgElemCircle = function SvgElemCircle(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n var cx = this.getLength('cx', this.getVWidth(), 0),\n cy = this.getLength('cy', this.getVHeight(), 0),\n r = this.getLength('r', this.getViewport(), 0);\n\n if (r > 0) {\n this.shape = new SvgShape().M(cx + r, cy).A(r, r, 0, 0, 1, cx - r, cy).A(r, r, 0, 0, 1, cx + r, cy).Z();\n } else {\n this.shape = new SvgShape();\n }\n };\n\n var SvgElemEllipse = function SvgElemEllipse(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n var cx = this.getLength('cx', this.getVWidth(), 0),\n cy = this.getLength('cy', this.getVHeight(), 0),\n rx = this.getLength('rx', this.getVWidth(), 0),\n ry = this.getLength('ry', this.getVHeight(), 0);\n\n if (rx > 0 && ry > 0) {\n this.shape = new SvgShape().M(cx + rx, cy).A(rx, ry, 0, 0, 1, cx - rx, cy).A(rx, ry, 0, 0, 1, cx + rx, cy).Z();\n } else {\n this.shape = new SvgShape();\n }\n };\n\n var SvgElemLine = function SvgElemLine(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n var x1 = this.getLength('x1', this.getVWidth(), 0),\n y1 = this.getLength('y1', this.getVHeight(), 0),\n x2 = this.getLength('x2', this.getVWidth(), 0),\n y2 = this.getLength('y2', this.getVHeight(), 0);\n this.shape = new SvgShape().M(x1, y1).L(x2, y2);\n };\n\n var SvgElemPolyline = function SvgElemPolyline(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n var points = this.getNumberList('points');\n this.shape = new SvgShape();\n\n for (var i = 0; i < points.length - 1; i += 2) {\n if (i === 0) {\n this.shape.M(points[i], points[i + 1]);\n } else {\n this.shape.L(points[i], points[i + 1]);\n }\n }\n\n if (points.error) {\n warningCallback('SvgElemPolygon: unexpected string ' + points.error);\n }\n\n if (points.length % 2 === 1) {\n warningCallback('SvgElemPolyline: uneven number of coordinates');\n }\n };\n\n var SvgElemPolygon = function SvgElemPolygon(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n var points = this.getNumberList('points');\n this.shape = new SvgShape();\n\n for (var i = 0; i < points.length - 1; i += 2) {\n if (i === 0) {\n this.shape.M(points[i], points[i + 1]);\n } else {\n this.shape.L(points[i], points[i + 1]);\n }\n }\n\n this.shape.Z();\n\n if (points.error) {\n warningCallback('SvgElemPolygon: unexpected string ' + points.error);\n }\n\n if (points.length % 2 === 1) {\n warningCallback('SvgElemPolygon: uneven number of coordinates');\n }\n };\n\n var SvgElemPath = function SvgElemPath(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n this.shape = new SvgShape().path(this.attr('d'));\n var pathLength = this.getLength('pathLength', this.getViewport());\n this.pathLength = pathLength > 0 ? pathLength : undefined;\n this.dashScale = this.pathLength !== undefined ? this.shape.totalLength / this.pathLength : 1;\n };\n\n var SvgElemMarker = function SvgElemMarker(obj, inherits) {\n SvgElemHasChildren.call(this, obj, inherits);\n var width = this.getLength('markerWidth', this.getParentVWidth(), 3),\n height = this.getLength('markerHeight', this.getParentVHeight(), 3),\n viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n\n this.getVWidth = function () {\n return viewBox[2];\n };\n\n this.getVHeight = function () {\n return viewBox[3];\n };\n\n this.drawMarker = function (isClip, isMask, posArray, strokeWidth) {\n doc.save();\n var orient = this.attr('orient'),\n units = this.attr('markerUnits'),\n rotate = orient === 'auto' ? posArray[2] : (parseFloat(orient) || 0) * Math.PI / 180,\n scale = units === 'userSpaceOnUse' ? 1 : strokeWidth;\n doc.transform(Math.cos(rotate) * scale, Math.sin(rotate) * scale, -Math.sin(rotate) * scale, Math.cos(rotate) * scale, posArray[0], posArray[1]);\n var refX = this.getLength('refX', this.getVWidth(), 0),\n refY = this.getLength('refY', this.getVHeight(), 0),\n aspectRatioMatrix = parseAspectRatio(this.attr('preserveAspectRatio'), width, height, viewBox[2], viewBox[3], 0.5);\n\n if (this.get('overflow') === 'hidden') {\n doc.rect(aspectRatioMatrix[0] * (viewBox[0] + viewBox[2] / 2 - refX) - width / 2, aspectRatioMatrix[3] * (viewBox[1] + viewBox[3] / 2 - refY) - height / 2, width, height).clip();\n }\n\n doc.transform.apply(doc, aspectRatioMatrix);\n doc.translate(-refX, -refY);\n var group;\n\n if (this.get('opacity') < 1 && !isClip) {\n group = docBeginGroup(getPageBBox());\n }\n\n this.drawChildren(isClip, isMask);\n\n if (group) {\n docEndGroup(group);\n doc.fillOpacity(this.get('opacity'));\n docInsertGroup(group);\n }\n\n doc.restore();\n };\n };\n\n var SvgElemClipPath = function SvgElemClipPath(obj, inherits) {\n SvgElemHasChildren.call(this, obj, inherits);\n\n this.useMask = function (bBox) {\n var group = docBeginGroup(getPageBBox());\n doc.save();\n\n if (this.attr('clipPathUnits') === 'objectBoundingBox') {\n doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\n }\n\n this.clip();\n this.drawChildren(true, false);\n doc.restore();\n docEndGroup(group);\n docApplyMask(group, true);\n };\n };\n\n var SvgElemMask = function SvgElemMask(obj, inherits) {\n SvgElemHasChildren.call(this, obj, inherits);\n\n this.useMask = function (bBox) {\n var group = docBeginGroup(getPageBBox());\n doc.save();\n var x, y, w, h;\n\n if (this.attr('maskUnits') === 'userSpaceOnUse') {\n x = this.getLength('x', this.getVWidth(), -0.1 * (bBox[2] - bBox[0]) + bBox[0]);\n y = this.getLength('y', this.getVHeight(), -0.1 * (bBox[3] - bBox[1]) + bBox[1]);\n w = this.getLength('width', this.getVWidth(), 1.2 * (bBox[2] - bBox[0]));\n h = this.getLength('height', this.getVHeight(), 1.2 * (bBox[3] - bBox[1]));\n } else {\n x = this.getLength('x', this.getVWidth(), -0.1) * (bBox[2] - bBox[0]) + bBox[0];\n y = this.getLength('y', this.getVHeight(), -0.1) * (bBox[3] - bBox[1]) + bBox[1];\n w = this.getLength('width', this.getVWidth(), 1.2) * (bBox[2] - bBox[0]);\n h = this.getLength('height', this.getVHeight(), 1.2) * (bBox[3] - bBox[1]);\n }\n\n doc.rect(x, y, w, h).clip();\n\n if (this.attr('maskContentUnits') === 'objectBoundingBox') {\n doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\n }\n\n this.clip();\n this.drawChildren(false, true);\n doc.restore();\n docEndGroup(group);\n docApplyMask(group, true);\n };\n };\n\n var SvgElemTextContainer = function SvgElemTextContainer(obj, inherits) {\n SvgElemStylable.call(this, obj, inherits);\n this.allowedChildren = ['tspan', '#text', '#cdata-section', 'a'];\n this.isText = true;\n\n this.getBoundingShape = function () {\n var shape = new SvgShape();\n\n for (var i = 0; i < this._pos.length; i++) {\n var pos = this._pos[i];\n\n if (!pos.hidden) {\n var dx0 = pos.ascent * Math.sin(pos.rotate),\n dy0 = -pos.ascent * Math.cos(pos.rotate),\n dx1 = pos.descent * Math.sin(pos.rotate),\n dy1 = -pos.descent * Math.cos(pos.rotate),\n dx2 = pos.width * Math.cos(pos.rotate),\n dy2 = pos.width * Math.sin(pos.rotate);\n shape.M(pos.x + dx0, pos.y + dy0).L(pos.x + dx0 + dx2, pos.y + dy0 + dy2).M(pos.x + dx1 + dx2, pos.y + dy1 + dy2).L(pos.x + dx1, pos.y + dy1);\n }\n }\n\n return shape;\n };\n\n this.drawTextInDocument = function (isClip, isMask) {\n if (this.link && !isClip && !isMask) {\n this.addLink();\n }\n\n if (this.get('text-decoration') === 'underline') {\n this.decorate(0.05 * this._font.size, -0.075 * this._font.size, isClip, isMask);\n }\n\n if (this.get('text-decoration') === 'overline') {\n this.decorate(0.05 * this._font.size, getAscent(this._font.font, this._font.size) + 0.075 * this._font.size, isClip, isMask);\n }\n\n var fill = this.getFill(isClip, isMask),\n stroke = this.getStroke(isClip, isMask),\n strokeWidth = this.get('stroke-width');\n\n if (this._font.fauxBold) {\n if (!stroke) {\n stroke = fill;\n strokeWidth = this._font.size * 0.03;\n } else {\n strokeWidth += this._font.size * 0.03;\n }\n }\n\n var children = this.getChildren();\n\n for (var i = 0; i < children.length; i++) {\n var childElem = children[i];\n\n switch (childElem.name) {\n case 'tspan':\n case 'textPath':\n case 'a':\n if (childElem.get('display') !== 'none') {\n childElem.drawTextInDocument(isClip, isMask);\n }\n\n break;\n\n case '#text':\n case '#cdata-section':\n if (this.get('visibility') === 'hidden') {\n continue;\n }\n\n if (fill || stroke || isClip) {\n if (fill) {\n docFillColor(fill);\n }\n\n if (stroke && strokeWidth) {\n docStrokeColor(stroke);\n doc.lineWidth(strokeWidth).miterLimit(this.get('stroke-miterlimit')).lineJoin(this.get('stroke-linejoin')).lineCap(this.get('stroke-linecap')).dash(this.get('stroke-dasharray'), {\n phase: this.get('stroke-dashoffset')\n });\n }\n\n docBeginText(this._font.font, this._font.size);\n docSetTextMode(!!fill, !!stroke);\n\n for (var j = 0, pos = childElem._pos; j < pos.length; j++) {\n if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\n var cos = Math.cos(pos[j].rotate),\n sin = Math.sin(pos[j].rotate),\n skew = this._font.fauxItalic ? -0.25 : 0;\n docSetTextMatrix(cos * pos[j].scale, sin * pos[j].scale, cos * skew - sin, sin * skew + cos, pos[j].x, pos[j].y);\n docWriteGlyph(pos[j].glyph);\n }\n }\n\n docEndText();\n }\n\n break;\n }\n }\n\n if (this.get('text-decoration') === 'line-through') {\n this.decorate(0.05 * this._font.size, 0.5 * (getAscent(this._font.font, this._font.size) + getDescent(this._font.font, this._font.size)), isClip, isMask);\n }\n };\n\n this.decorate = function (lineWidth, linePosition, isClip, isMask) {\n var fill = this.getFill(isClip, isMask),\n stroke = this.getStroke(isClip, isMask);\n\n if (fill) {\n docFillColor(fill);\n }\n\n if (stroke) {\n docStrokeColor(stroke);\n doc.lineWidth(this.get('stroke-width')).miterLimit(this.get('stroke-miterlimit')).lineJoin(this.get('stroke-linejoin')).lineCap(this.get('stroke-linecap')).dash(this.get('stroke-dasharray'), {\n phase: this.get('stroke-dashoffset')\n });\n }\n\n for (var j = 0, pos = this._pos; j < pos.length; j++) {\n if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\n var dx0 = (linePosition + lineWidth / 2) * Math.sin(pos[j].rotate),\n dy0 = -(linePosition + lineWidth / 2) * Math.cos(pos[j].rotate),\n dx1 = (linePosition - lineWidth / 2) * Math.sin(pos[j].rotate),\n dy1 = -(linePosition - lineWidth / 2) * Math.cos(pos[j].rotate),\n dx2 = pos[j].width * Math.cos(pos[j].rotate),\n dy2 = pos[j].width * Math.sin(pos[j].rotate);\n new SvgShape().M(pos[j].x + dx0, pos[j].y + dy0).L(pos[j].x + dx0 + dx2, pos[j].y + dy0 + dy2).L(pos[j].x + dx1 + dx2, pos[j].y + dy1 + dy2).L(pos[j].x + dx1, pos[j].y + dy1).Z().insertInDocument();\n\n if (fill && stroke) {\n doc.fillAndStroke();\n } else if (fill) {\n doc.fill();\n } else if (stroke) {\n doc.stroke();\n }\n }\n }\n };\n };\n\n var SvgElemTextNode = function SvgElemTextNode(obj, inherits) {\n this.name = obj.nodeName;\n this.textContent = obj.nodeValue;\n };\n\n var SvgElemTspan = function SvgElemTspan(obj, inherits) {\n SvgElemTextContainer.call(this, obj, inherits);\n };\n\n var SvgElemTextPath = function SvgElemTextPath(obj, inherits) {\n SvgElemTextContainer.call(this, obj, inherits);\n var pathObject, pathLength, temp;\n\n if ((temp = this.attr('path')) && temp.trim() !== '') {\n var _pathLength = this.getLength('pathLength', this.getViewport());\n\n this.pathObject = new SvgShape().path(temp);\n this.pathLength = _pathLength > 0 ? _pathLength : this.pathObject.totalLength;\n this.pathScale = this.pathObject.totalLength / this.pathLength;\n } else if ((temp = this.getUrl('href') || this.getUrl('xlink:href')) && temp.nodeName === 'path') {\n var pathElem = new SvgElemPath(temp, this);\n this.pathObject = pathElem.shape.clone().transform(pathElem.get('transform'));\n this.pathLength = this.chooseValue(pathElem.pathLength, this.pathObject.totalLength);\n this.pathScale = this.pathObject.totalLength / this.pathLength;\n }\n };\n\n var SvgElemText = function SvgElemText(obj, inherits) {\n SvgElemTextContainer.call(this, obj, inherits);\n this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\n\n (function (textParentElem) {\n var processedText = '',\n remainingText = obj.textContent,\n textPaths = [],\n currentChunk = [],\n currentAnchor,\n currentDirection,\n currentX = 0,\n currentY = 0;\n\n function doAnchoring() {\n if (currentChunk.length) {\n var last = currentChunk[currentChunk.length - 1];\n var first = currentChunk[0];\n var width = last.x + last.width - first.x;\n var anchordx = {\n 'startltr': 0,\n 'middleltr': 0.5,\n 'endltr': 1,\n 'startrtl': 1,\n 'middlertl': 0.5,\n 'endrtl': 0\n }[currentAnchor + currentDirection] * width || 0;\n\n for (var i = 0; i < currentChunk.length; i++) {\n currentChunk[i].x -= anchordx;\n }\n }\n\n currentChunk = [];\n }\n\n function adjustLength(pos, length, spacingAndGlyphs) {\n var firstChar = pos[0],\n lastChar = pos[pos.length - 1],\n startX = firstChar.x,\n endX = lastChar.x + lastChar.width;\n\n if (spacingAndGlyphs) {\n var textScale = length / (endX - startX);\n\n if (textScale > 0 && textScale < Infinity) {\n for (var j = 0; j < pos.length; j++) {\n pos[j].x = startX + textScale * (pos[j].x - startX);\n pos[j].scale *= textScale;\n pos[j].width *= textScale;\n }\n }\n } else {\n if (pos.length >= 2) {\n var spaceDiff = (length - (endX - startX)) / (pos.length - 1);\n\n for (var _j4 = 0; _j4 < pos.length; _j4++) {\n pos[_j4].x += _j4 * spaceDiff;\n }\n }\n }\n\n currentX += length - (endX - startX);\n }\n\n function recursive(currentElem, parentElem) {\n currentElem._x = combineArrays(currentElem.getLengthList('x', currentElem.getVWidth()), parentElem ? parentElem._x.slice(parentElem._pos.length) : []);\n currentElem._y = combineArrays(currentElem.getLengthList('y', currentElem.getVHeight()), parentElem ? parentElem._y.slice(parentElem._pos.length) : []);\n currentElem._dx = combineArrays(currentElem.getLengthList('dx', currentElem.getVWidth()), parentElem ? parentElem._dx.slice(parentElem._pos.length) : []);\n currentElem._dy = combineArrays(currentElem.getLengthList('dy', currentElem.getVHeight()), parentElem ? parentElem._dy.slice(parentElem._pos.length) : []);\n currentElem._rot = combineArrays(currentElem.getNumberList('rotate'), parentElem ? parentElem._rot.slice(parentElem._pos.length) : []);\n currentElem._defRot = currentElem.chooseValue(currentElem._rot[currentElem._rot.length - 1], parentElem && parentElem._defRot, 0);\n\n if (currentElem.name === 'textPath') {\n currentElem._y = [];\n }\n\n var fontOptions = {\n fauxItalic: false,\n fauxBold: false\n },\n fontNameorLink = fontCallback(currentElem.get('font-family'), currentElem.get('font-weight') === 'bold', currentElem.get('font-style') === 'italic', fontOptions);\n\n try {\n doc.font(fontNameorLink);\n } catch (e) {\n warningCallback('SVGElemText: failed to open font \"' + fontNameorLink + '\" in PDFKit');\n }\n\n currentElem._pos = [];\n currentElem._index = 0;\n currentElem._font = {\n font: doc._font,\n size: currentElem.get('font-size'),\n fauxItalic: fontOptions.fauxItalic,\n fauxBold: fontOptions.fauxBold\n };\n var textLength = currentElem.getLength('textLength', currentElem.getVWidth(), undefined),\n spacingAndGlyphs = currentElem.attr('lengthAdjust') === 'spacingAndGlyphs',\n wordSpacing = currentElem.get('word-spacing'),\n letterSpacing = currentElem.get('letter-spacing'),\n textAnchor = currentElem.get('text-anchor'),\n textDirection = currentElem.get('direction'),\n baseline = getBaseline(currentElem._font.font, currentElem._font.size, currentElem.get('alignment-baseline') || currentElem.get('dominant-baseline'), currentElem.get('baseline-shift'));\n\n if (currentElem.name === 'textPath') {\n doAnchoring();\n currentX = currentY = 0;\n }\n\n var children = currentElem.getChildren();\n\n for (var i = 0; i < children.length; i++) {\n var childElem = children[i];\n\n switch (childElem.name) {\n case 'tspan':\n case 'textPath':\n case 'a':\n recursive(childElem, currentElem);\n break;\n\n case '#text':\n case '#cdata-section':\n var rawText = childElem.textContent,\n renderedText = rawText,\n words = void 0;\n childElem._font = currentElem._font;\n childElem._pos = [];\n remainingText = remainingText.substring(rawText.length);\n\n if (currentElem.get('xml:space') === 'preserve') {\n renderedText = renderedText.replace(/[\\s]/g, ' ');\n } else {\n renderedText = renderedText.replace(/[\\s]+/g, ' ');\n\n if (processedText.match(/[\\s]$|^$/)) {\n renderedText = renderedText.replace(/^[\\s]/, '');\n }\n\n if (remainingText.match(/^[\\s]*$/)) {\n renderedText = renderedText.replace(/[\\s]$/, '');\n }\n }\n\n processedText += rawText;\n\n if (wordSpacing === 0) {\n words = [renderedText];\n } else {\n words = renderedText.split(/(\\s)/);\n }\n\n for (var w = 0; w < words.length; w++) {\n var pos = getTextPos(currentElem._font.font, currentElem._font.size, words[w]);\n\n for (var j = 0; j < pos.length; j++) {\n var index = currentElem._index,\n xAttr = currentElem._x[index],\n yAttr = currentElem._y[index],\n dxAttr = currentElem._dx[index],\n dyAttr = currentElem._dy[index],\n rotAttr = currentElem._rot[index],\n continuous = !(w === 0 && j === 0);\n\n if (xAttr !== undefined) {\n continuous = false;\n doAnchoring();\n currentX = xAttr;\n }\n\n if (yAttr !== undefined) {\n continuous = false;\n doAnchoring();\n currentY = yAttr;\n }\n\n if (dxAttr !== undefined) {\n continuous = false;\n currentX += dxAttr;\n }\n\n if (dyAttr !== undefined) {\n continuous = false;\n currentY += dyAttr;\n }\n\n if (rotAttr !== undefined || currentElem._defRot !== 0) {\n continuous = false;\n }\n\n var position = {\n glyph: pos[j].glyph,\n rotate: Math.PI / 180 * currentElem.chooseValue(rotAttr, currentElem._defRot),\n x: currentX + pos[j].xOffset,\n y: currentY + baseline + pos[j].yOffset,\n width: pos[j].width,\n ascent: getAscent(currentElem._font.font, currentElem._font.size),\n descent: getDescent(currentElem._font.font, currentElem._font.size),\n scale: 1,\n hidden: false,\n continuous: continuous\n };\n currentChunk.push(position);\n\n childElem._pos.push(position);\n\n currentElem._pos.push(position);\n\n currentElem._index += pos[j].unicode.length;\n\n if (currentChunk.length === 1) {\n currentAnchor = textAnchor;\n currentDirection = textDirection;\n }\n\n currentX += pos[j].xAdvance + letterSpacing;\n currentY += pos[j].yAdvance;\n }\n\n if (words[w] === ' ') {\n currentX += wordSpacing;\n }\n }\n\n break;\n\n default:\n remainingText = remainingText.substring(childElem.textContent.length);\n }\n }\n\n if (textLength && currentElem._pos.length) {\n adjustLength(currentElem._pos, textLength, spacingAndGlyphs);\n }\n\n if (currentElem.name === 'textPath' || currentElem.name === 'text') {\n doAnchoring();\n }\n\n if (currentElem.name === 'textPath') {\n textPaths.push(currentElem);\n var pathObject = currentElem.pathObject;\n\n if (pathObject) {\n currentX = pathObject.endPoint[0];\n currentY = pathObject.endPoint[1];\n }\n }\n\n if (parentElem) {\n parentElem._pos = parentElem._pos.concat(currentElem._pos);\n parentElem._index += currentElem._index;\n }\n }\n\n function textOnPath(currentElem) {\n var pathObject = currentElem.pathObject,\n pathLength = currentElem.pathLength,\n pathScale = currentElem.pathScale;\n\n if (pathObject) {\n var textOffset = currentElem.getLength('startOffset', pathLength, 0);\n\n for (var j = 0; j < currentElem._pos.length; j++) {\n var charMidX = textOffset + currentElem._pos[j].x + 0.5 * currentElem._pos[j].width;\n\n if (charMidX > pathLength || charMidX < 0) {\n currentElem._pos[j].hidden = true;\n } else {\n var pointOnPath = pathObject.getPointAtLength(charMidX * pathScale);\n\n if (isNotEqual(pathScale, 1)) {\n currentElem._pos[j].scale *= pathScale;\n currentElem._pos[j].width *= pathScale;\n }\n\n currentElem._pos[j].x = pointOnPath[0] - 0.5 * currentElem._pos[j].width * Math.cos(pointOnPath[2]) - currentElem._pos[j].y * Math.sin(pointOnPath[2]);\n currentElem._pos[j].y = pointOnPath[1] - 0.5 * currentElem._pos[j].width * Math.sin(pointOnPath[2]) + currentElem._pos[j].y * Math.cos(pointOnPath[2]);\n currentElem._pos[j].rotate = pointOnPath[2] + currentElem._pos[j].rotate;\n currentElem._pos[j].continuous = false;\n }\n }\n } else {\n for (var _j5 = 0; _j5 < currentElem._pos.length; _j5++) {\n currentElem._pos[_j5].hidden = true;\n }\n }\n }\n\n recursive(textParentElem, null);\n\n for (var i = 0; i < textPaths.length; i++) {\n textOnPath(textPaths[i]);\n }\n })(this);\n\n this.getTransformation = function () {\n return this.get('transform');\n };\n\n this.drawInDocument = function (isClip, isMask) {\n doc.save();\n this.transform();\n this.clip();\n var masked = this.mask(),\n group;\n\n if (masked) {\n group = docBeginGroup(getPageBBox());\n }\n\n this.drawTextInDocument(isClip, isMask);\n\n if (group) {\n docEndGroup(group);\n docInsertGroup(group);\n }\n\n doc.restore();\n };\n };\n\n options = options || {};\n var pxToPt = options.assumePt ? 1 : 72 / 96,\n // 1px = 72/96pt, but only if assumePt is false\n viewportWidth = (options.width || doc.page.width) / pxToPt,\n viewportHeight = (options.height || doc.page.height) / pxToPt,\n preserveAspectRatio = options.preserveAspectRatio || null,\n // default to null so that the attr can override if not passed\n useCSS = options.useCSS && typeof SVGElement !== 'undefined' && svg instanceof SVGElement && typeof getComputedStyle === 'function',\n warningCallback = options.warningCallback,\n fontCallback = options.fontCallback,\n imageCallback = options.imageCallback,\n colorCallback = options.colorCallback,\n documentCallback = options.documentCallback,\n precision = Math.ceil(Math.max(1, options.precision)) || 3,\n groupStack = [],\n documentCache = {},\n links = [],\n styleRules = [];\n\n if (typeof warningCallback !== 'function') {\n warningCallback = function warningCallback(str) {\n if (typeof console !== undefined && typeof console.warn === 'function') {\n console.warn(str);\n }\n };\n }\n\n if (typeof fontCallback !== 'function') {\n fontCallback = function fontCallback(family, bold, italic, fontOptions) {\n // Check if the font is already registered in the document\n if (bold && italic) {\n if (doc._registeredFonts.hasOwnProperty(family + '-BoldItalic')) {\n return family + '-BoldItalic';\n } else if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\n fontOptions.fauxBold = true;\n return family + '-Italic';\n } else if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\n fontOptions.fauxItalic = true;\n return family + '-Bold';\n } else if (doc._registeredFonts.hasOwnProperty(family)) {\n fontOptions.fauxBold = true;\n fontOptions.fauxItalic = true;\n return family;\n }\n }\n\n if (bold && !italic) {\n if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\n return family + '-Bold';\n } else if (doc._registeredFonts.hasOwnProperty(family)) {\n fontOptions.fauxBold = true;\n return family;\n }\n }\n\n if (!bold && italic) {\n if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\n return family + '-Italic';\n } else if (doc._registeredFonts.hasOwnProperty(family)) {\n fontOptions.fauxItalic = true;\n return family;\n }\n }\n\n if (!bold && !italic) {\n if (doc._registeredFonts.hasOwnProperty(family)) {\n return family;\n }\n } // Use standard fonts as fallback\n\n\n if (family.match(/(?:^|,)\\s*serif\\s*$/)) {\n if (bold && italic) {\n return 'Times-BoldItalic';\n }\n\n if (bold && !italic) {\n return 'Times-Bold';\n }\n\n if (!bold && italic) {\n return 'Times-Italic';\n }\n\n if (!bold && !italic) {\n return 'Times-Roman';\n }\n } else if (family.match(/(?:^|,)\\s*monospace\\s*$/)) {\n if (bold && italic) {\n return 'Courier-BoldOblique';\n }\n\n if (bold && !italic) {\n return 'Courier-Bold';\n }\n\n if (!bold && italic) {\n return 'Courier-Oblique';\n }\n\n if (!bold && !italic) {\n return 'Courier';\n }\n } else if (family.match(/(?:^|,)\\s*sans-serif\\s*$/) || true) {\n if (bold && italic) {\n return 'Helvetica-BoldOblique';\n }\n\n if (bold && !italic) {\n return 'Helvetica-Bold';\n }\n\n if (!bold && italic) {\n return 'Helvetica-Oblique';\n }\n\n if (!bold && !italic) {\n return 'Helvetica';\n }\n }\n };\n }\n\n if (typeof imageCallback !== 'function') {\n imageCallback = function imageCallback(link) {\n return link.replace(/\\s+/g, '');\n };\n }\n\n if (typeof colorCallback !== 'function') {\n colorCallback = null;\n } else {\n for (var color in DefaultColors) {\n var newColor = colorCallback(DefaultColors[color]);\n DefaultColors[color][0] = newColor[0];\n DefaultColors[color][1] = newColor[1];\n }\n }\n\n if (typeof documentCallback !== 'function') {\n documentCallback = null;\n }\n\n if (typeof svg === 'string') {\n svg = parseXml(svg);\n }\n\n if (svg) {\n var styles = svg.getElementsByTagName('style');\n\n for (var i = 0; i < styles.length; i++) {\n styleRules = styleRules.concat(parseStyleSheet(styles[i].textContent));\n }\n\n var elem = createSVGElement(svg, null);\n\n if (typeof elem.drawInDocument === 'function') {\n if (options.useCSS && !useCSS) {\n warningCallback('SVGtoPDF: useCSS option can only be used for SVG *elements* in compatible browsers');\n }\n\n var savedFillColor = doc._fillColor;\n doc.save().translate(x || 0, y || 0).scale(pxToPt);\n elem.drawInDocument();\n\n for (var _i8 = 0; _i8 < links.length; _i8++) {\n doc.page.annotations.push(links[_i8]);\n }\n\n doc.restore();\n doc._fillColor = savedFillColor;\n } else {\n warningCallback('SVGtoPDF: this element can\\'t be rendered directly: ' + svg.nodeName);\n }\n } else {\n warningCallback('SVGtoPDF: the input does not look like a valid SVG');\n }\n};\n\nif ( true && module && typeof module.exports !== 'undefined') {\n module.exports = SVGtoPDF;\n}\n\n/***/ }),\n\n/***/ 9742:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n\n\n/***/ }),\n\n/***/ 4181:\n/***/ (function(module) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Bit reading helpers\n*/\n\nvar BROTLI_READ_SIZE = 4096;\nvar BROTLI_IBUF_SIZE = (2 * BROTLI_READ_SIZE + 32);\nvar BROTLI_IBUF_MASK = (2 * BROTLI_READ_SIZE - 1);\n\nvar kBitMask = new Uint32Array([\n 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767,\n 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215\n]);\n\n/* Input byte buffer, consist of a ringbuffer and a \"slack\" region where */\n/* bytes from the start of the ringbuffer are copied. */\nfunction BrotliBitReader(input) {\n this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE);\n this.input_ = input; /* input callback */\n \n this.reset();\n}\n\nBrotliBitReader.READ_SIZE = BROTLI_READ_SIZE;\nBrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK;\n\nBrotliBitReader.prototype.reset = function() {\n this.buf_ptr_ = 0; /* next input will write here */\n this.val_ = 0; /* pre-fetched bits */\n this.pos_ = 0; /* byte position in stream */\n this.bit_pos_ = 0; /* current bit-reading position in val_ */\n this.bit_end_pos_ = 0; /* bit-reading end position from LSB of val_ */\n this.eos_ = 0; /* input stream is finished */\n \n this.readMoreInput();\n for (var i = 0; i < 4; i++) {\n this.val_ |= this.buf_[this.pos_] << (8 * i);\n ++this.pos_;\n }\n \n return this.bit_end_pos_ > 0;\n};\n\n/* Fills up the input ringbuffer by calling the input callback.\n\n Does nothing if there are at least 32 bytes present after current position.\n\n Returns 0 if either:\n - the input callback returned an error, or\n - there is no more input and the position is past the end of the stream.\n\n After encountering the end of the input stream, 32 additional zero bytes are\n copied to the ringbuffer, therefore it is safe to call this function after\n every 32 bytes of input is read.\n*/\nBrotliBitReader.prototype.readMoreInput = function() {\n if (this.bit_end_pos_ > 256) {\n return;\n } else if (this.eos_) {\n if (this.bit_pos_ > this.bit_end_pos_)\n throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_);\n } else {\n var dst = this.buf_ptr_;\n var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE);\n if (bytes_read < 0) {\n throw new Error('Unexpected end of input');\n }\n \n if (bytes_read < BROTLI_READ_SIZE) {\n this.eos_ = 1;\n /* Store 32 bytes of zero after the stream end. */\n for (var p = 0; p < 32; p++)\n this.buf_[dst + bytes_read + p] = 0;\n }\n \n if (dst === 0) {\n /* Copy the head of the ringbuffer to the slack region. */\n for (var p = 0; p < 32; p++)\n this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p];\n\n this.buf_ptr_ = BROTLI_READ_SIZE;\n } else {\n this.buf_ptr_ = 0;\n }\n \n this.bit_end_pos_ += bytes_read << 3;\n }\n};\n\n/* Guarantees that there are at least 24 bits in the buffer. */\nBrotliBitReader.prototype.fillBitWindow = function() { \n while (this.bit_pos_ >= 8) {\n this.val_ >>>= 8;\n this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24;\n ++this.pos_;\n this.bit_pos_ = this.bit_pos_ - 8 >>> 0;\n this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0;\n }\n};\n\n/* Reads the specified number of bits from Read Buffer. */\nBrotliBitReader.prototype.readBits = function(n_bits) {\n if (32 - this.bit_pos_ < n_bits) {\n this.fillBitWindow();\n }\n \n var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]);\n this.bit_pos_ += n_bits;\n return val;\n};\n\nmodule.exports = BrotliBitReader;\n\n\n/***/ }),\n\n/***/ 7080:\n/***/ (function(__unused_webpack_module, exports) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Lookup table to map the previous two bytes to a context id.\n\n There are four different context modeling modes defined here:\n CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,\n CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,\n CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,\n CONTEXT_SIGNED: second-order context model tuned for signed integers.\n\n The context id for the UTF8 context model is calculated as follows. If p1\n and p2 are the previous two bytes, we calcualte the context as\n\n context = kContextLookup[p1] | kContextLookup[p2 + 256].\n\n If the previous two bytes are ASCII characters (i.e. < 128), this will be\n equivalent to\n\n context = 4 * context1(p1) + context2(p2),\n\n where context1 is based on the previous byte in the following way:\n\n 0 : non-ASCII control\n 1 : \\t, \\n, \\r\n 2 : space\n 3 : other punctuation\n 4 : \" '\n 5 : %\n 6 : ( < [ {\n 7 : ) > ] }\n 8 : , ; :\n 9 : .\n 10 : =\n 11 : number\n 12 : upper-case vowel\n 13 : upper-case consonant\n 14 : lower-case vowel\n 15 : lower-case consonant\n\n and context2 is based on the second last byte:\n\n 0 : control, space\n 1 : punctuation\n 2 : upper-case letter, number\n 3 : lower-case letter\n\n If the last byte is ASCII, and the second last byte is not (in a valid UTF8\n stream it will be a continuation byte, value between 128 and 191), the\n context is the same as if the second last byte was an ASCII control or space.\n\n If the last byte is a UTF8 lead byte (value >= 192), then the next byte will\n be a continuation byte and the context id is 2 or 3 depending on the LSB of\n the last byte and to a lesser extent on the second last byte if it is ASCII.\n\n If the last byte is a UTF8 continuation byte, the second last byte can be:\n - continuation byte: the next byte is probably ASCII or lead byte (assuming\n 4-byte UTF8 characters are rare) and the context id is 0 or 1.\n - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1\n - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3\n\n The possible value combinations of the previous two bytes, the range of\n context ids and the type of the next byte is summarized in the table below:\n\n |--------\\-----------------------------------------------------------------|\n | \\ Last byte |\n | Second \\---------------------------------------------------------------|\n | last byte \\ ASCII | cont. byte | lead byte |\n | \\ (0-127) | (128-191) | (192-) |\n |=============|===================|=====================|==================|\n | ASCII | next: ASCII/lead | not valid | next: cont. |\n | (0-127) | context: 4 - 63 | | context: 2 - 3 |\n |-------------|-------------------|---------------------|------------------|\n | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |\n | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |\n |-------------|-------------------|---------------------|------------------|\n | lead byte | not valid | next: ASCII/lead | not valid |\n | (192-207) | | context: 0 - 1 | |\n |-------------|-------------------|---------------------|------------------|\n | lead byte | not valid | next: cont. | not valid |\n | (208-) | | context: 2 - 3 | |\n |-------------|-------------------|---------------------|------------------|\n\n The context id for the signed context mode is calculated as:\n\n context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2].\n\n For any context modeling modes, the context ids can be calculated by |-ing\n together two lookups from one table using context model dependent offsets:\n\n context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2].\n\n where offset1 and offset2 are dependent on the context mode.\n*/\n\nvar CONTEXT_LSB6 = 0;\nvar CONTEXT_MSB6 = 1;\nvar CONTEXT_UTF8 = 2;\nvar CONTEXT_SIGNED = 3;\n\n/* Common context lookup table for all context modes. */\nexports.lookup = new Uint8Array([\n /* CONTEXT_UTF8, last byte. */\n /* ASCII range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,\n 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,\n 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,\n 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,\n 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,\n 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,\n /* UTF8 continuation byte range. */\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n /* UTF8 lead byte range. */\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n /* CONTEXT_UTF8 second last byte. */\n /* ASCII range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,\n 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,\n /* UTF8 continuation byte range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n /* UTF8 lead byte range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n /* CONTEXT_SIGNED, second last byte. */\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,\n /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */\n 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,\n /* CONTEXT_LSB6, last byte. */\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n /* CONTEXT_MSB6, last byte. */\n 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,\n 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,\n 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,\n 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,\n 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,\n 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,\n 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,\n 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,\n 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,\n 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,\n 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,\n 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,\n 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,\n 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,\n 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,\n 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,\n /* CONTEXT_{M,L}SB6, second last byte, */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n]);\n\nexports.lookupOffsets = new Uint16Array([\n /* CONTEXT_LSB6 */\n 1024, 1536,\n /* CONTEXT_MSB6 */\n 1280, 1536,\n /* CONTEXT_UTF8 */\n 0, 256,\n /* CONTEXT_SIGNED */\n 768, 512,\n]);\n\n\n/***/ }),\n\n/***/ 6450:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_798604__) {\n\nvar __webpack_unused_export__;\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n\nvar BrotliInput = (__nested_webpack_require_798604__(6154)/* .BrotliInput */ .g);\nvar BrotliOutput = (__nested_webpack_require_798604__(6154)/* .BrotliOutput */ .j);\nvar BrotliBitReader = __nested_webpack_require_798604__(4181);\nvar BrotliDictionary = __nested_webpack_require_798604__(5139);\nvar HuffmanCode = (__nested_webpack_require_798604__(966)/* .HuffmanCode */ .h);\nvar BrotliBuildHuffmanTable = (__nested_webpack_require_798604__(966)/* .BrotliBuildHuffmanTable */ .g);\nvar Context = __nested_webpack_require_798604__(7080);\nvar Prefix = __nested_webpack_require_798604__(8435);\nvar Transform = __nested_webpack_require_798604__(2973);\n\nvar kDefaultCodeLength = 8;\nvar kCodeLengthRepeatCode = 16;\nvar kNumLiteralCodes = 256;\nvar kNumInsertAndCopyCodes = 704;\nvar kNumBlockLengthCodes = 26;\nvar kLiteralContextBits = 6;\nvar kDistanceContextBits = 2;\n\nvar HUFFMAN_TABLE_BITS = 8;\nvar HUFFMAN_TABLE_MASK = 0xff;\n/* Maximum possible Huffman table size for an alphabet size of 704, max code\n * length 15 and root table bits 8. */\nvar HUFFMAN_MAX_TABLE_SIZE = 1080;\n\nvar CODE_LENGTH_CODES = 18;\nvar kCodeLengthCodeOrder = new Uint8Array([\n 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n]);\n\nvar NUM_DISTANCE_SHORT_CODES = 16;\nvar kDistanceShortCodeIndexOffset = new Uint8Array([\n 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2\n]);\n\nvar kDistanceShortCodeValueOffset = new Int8Array([\n 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3\n]);\n\nvar kMaxHuffmanTableSize = new Uint16Array([\n 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,\n 854, 886, 920, 952, 984, 1016, 1048, 1080\n]);\n\nfunction DecodeWindowBits(br) {\n var n;\n if (br.readBits(1) === 0) {\n return 16;\n }\n \n n = br.readBits(3);\n if (n > 0) {\n return 17 + n;\n }\n \n n = br.readBits(3);\n if (n > 0) {\n return 8 + n;\n }\n \n return 17;\n}\n\n/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */\nfunction DecodeVarLenUint8(br) {\n if (br.readBits(1)) {\n var nbits = br.readBits(3);\n if (nbits === 0) {\n return 1;\n } else {\n return br.readBits(nbits) + (1 << nbits);\n }\n }\n return 0;\n}\n\nfunction MetaBlockLength() {\n this.meta_block_length = 0;\n this.input_end = 0;\n this.is_uncompressed = 0;\n this.is_metadata = false;\n}\n\nfunction DecodeMetaBlockLength(br) {\n var out = new MetaBlockLength; \n var size_nibbles;\n var size_bytes;\n var i;\n \n out.input_end = br.readBits(1);\n if (out.input_end && br.readBits(1)) {\n return out;\n }\n \n size_nibbles = br.readBits(2) + 4;\n if (size_nibbles === 7) {\n out.is_metadata = true;\n \n if (br.readBits(1) !== 0)\n throw new Error('Invalid reserved bit');\n \n size_bytes = br.readBits(2);\n if (size_bytes === 0)\n return out;\n \n for (i = 0; i < size_bytes; i++) {\n var next_byte = br.readBits(8);\n if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)\n throw new Error('Invalid size byte');\n \n out.meta_block_length |= next_byte << (i * 8);\n }\n } else {\n for (i = 0; i < size_nibbles; ++i) {\n var next_nibble = br.readBits(4);\n if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)\n throw new Error('Invalid size nibble');\n \n out.meta_block_length |= next_nibble << (i * 4);\n }\n }\n \n ++out.meta_block_length;\n \n if (!out.input_end && !out.is_metadata) {\n out.is_uncompressed = br.readBits(1);\n }\n \n return out;\n}\n\n/* Decodes the next Huffman code from bit-stream. */\nfunction ReadSymbol(table, index, br) {\n var start_index = index;\n \n var nbits;\n br.fillBitWindow();\n index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK;\n nbits = table[index].bits - HUFFMAN_TABLE_BITS;\n if (nbits > 0) {\n br.bit_pos_ += HUFFMAN_TABLE_BITS;\n index += table[index].value;\n index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1);\n }\n br.bit_pos_ += table[index].bits;\n return table[index].value;\n}\n\nfunction ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) {\n var symbol = 0;\n var prev_code_len = kDefaultCodeLength;\n var repeat = 0;\n var repeat_code_len = 0;\n var space = 32768;\n \n var table = [];\n for (var i = 0; i < 32; i++)\n table.push(new HuffmanCode(0, 0));\n \n BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES);\n\n while (symbol < num_symbols && space > 0) {\n var p = 0;\n var code_len;\n \n br.readMoreInput();\n br.fillBitWindow();\n p += (br.val_ >>> br.bit_pos_) & 31;\n br.bit_pos_ += table[p].bits;\n code_len = table[p].value & 0xff;\n if (code_len < kCodeLengthRepeatCode) {\n repeat = 0;\n code_lengths[symbol++] = code_len;\n if (code_len !== 0) {\n prev_code_len = code_len;\n space -= 32768 >> code_len;\n }\n } else {\n var extra_bits = code_len - 14;\n var old_repeat;\n var repeat_delta;\n var new_len = 0;\n if (code_len === kCodeLengthRepeatCode) {\n new_len = prev_code_len;\n }\n if (repeat_code_len !== new_len) {\n repeat = 0;\n repeat_code_len = new_len;\n }\n old_repeat = repeat;\n if (repeat > 0) {\n repeat -= 2;\n repeat <<= extra_bits;\n }\n repeat += br.readBits(extra_bits) + 3;\n repeat_delta = repeat - old_repeat;\n if (symbol + repeat_delta > num_symbols) {\n throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols');\n }\n \n for (var x = 0; x < repeat_delta; x++)\n code_lengths[symbol + x] = repeat_code_len;\n \n symbol += repeat_delta;\n \n if (repeat_code_len !== 0) {\n space -= repeat_delta << (15 - repeat_code_len);\n }\n }\n }\n if (space !== 0) {\n throw new Error(\"[ReadHuffmanCodeLengths] space = \" + space);\n }\n \n for (; symbol < num_symbols; symbol++)\n code_lengths[symbol] = 0;\n}\n\nfunction ReadHuffmanCode(alphabet_size, tables, table, br) {\n var table_size = 0;\n var simple_code_or_skip;\n var code_lengths = new Uint8Array(alphabet_size);\n \n br.readMoreInput();\n \n /* simple_code_or_skip is used as follows:\n 1 for simple code;\n 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */\n simple_code_or_skip = br.readBits(2);\n if (simple_code_or_skip === 1) {\n /* Read symbols, codes & code lengths directly. */\n var i;\n var max_bits_counter = alphabet_size - 1;\n var max_bits = 0;\n var symbols = new Int32Array(4);\n var num_symbols = br.readBits(2) + 1;\n while (max_bits_counter) {\n max_bits_counter >>= 1;\n ++max_bits;\n }\n\n for (i = 0; i < num_symbols; ++i) {\n symbols[i] = br.readBits(max_bits) % alphabet_size;\n code_lengths[symbols[i]] = 2;\n }\n code_lengths[symbols[0]] = 1;\n switch (num_symbols) {\n case 1:\n break;\n case 3:\n if ((symbols[0] === symbols[1]) ||\n (symbols[0] === symbols[2]) ||\n (symbols[1] === symbols[2])) {\n throw new Error('[ReadHuffmanCode] invalid symbols');\n }\n break;\n case 2:\n if (symbols[0] === symbols[1]) {\n throw new Error('[ReadHuffmanCode] invalid symbols');\n }\n \n code_lengths[symbols[1]] = 1;\n break;\n case 4:\n if ((symbols[0] === symbols[1]) ||\n (symbols[0] === symbols[2]) ||\n (symbols[0] === symbols[3]) ||\n (symbols[1] === symbols[2]) ||\n (symbols[1] === symbols[3]) ||\n (symbols[2] === symbols[3])) {\n throw new Error('[ReadHuffmanCode] invalid symbols');\n }\n \n if (br.readBits(1)) {\n code_lengths[symbols[2]] = 3;\n code_lengths[symbols[3]] = 3;\n } else {\n code_lengths[symbols[0]] = 2;\n }\n break;\n }\n } else { /* Decode Huffman-coded code lengths. */\n var i;\n var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES);\n var space = 32;\n var num_codes = 0;\n /* Static Huffman code for the code length code lengths */\n var huff = [\n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), \n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),\n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), \n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5)\n ];\n for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) {\n var code_len_idx = kCodeLengthCodeOrder[i];\n var p = 0;\n var v;\n br.fillBitWindow();\n p += (br.val_ >>> br.bit_pos_) & 15;\n br.bit_pos_ += huff[p].bits;\n v = huff[p].value;\n code_length_code_lengths[code_len_idx] = v;\n if (v !== 0) {\n space -= (32 >> v);\n ++num_codes;\n }\n }\n \n if (!(num_codes === 1 || space === 0))\n throw new Error('[ReadHuffmanCode] invalid num_codes or space');\n \n ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br);\n }\n \n table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size);\n \n if (table_size === 0) {\n throw new Error(\"[ReadHuffmanCode] BuildHuffmanTable failed: \");\n }\n \n return table_size;\n}\n\nfunction ReadBlockLength(table, index, br) {\n var code;\n var nbits;\n code = ReadSymbol(table, index, br);\n nbits = Prefix.kBlockLengthPrefixCode[code].nbits;\n return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits);\n}\n\nfunction TranslateShortCodes(code, ringbuffer, index) {\n var val;\n if (code < NUM_DISTANCE_SHORT_CODES) {\n index += kDistanceShortCodeIndexOffset[code];\n index &= 3;\n val = ringbuffer[index] + kDistanceShortCodeValueOffset[code];\n } else {\n val = code - NUM_DISTANCE_SHORT_CODES + 1;\n }\n return val;\n}\n\nfunction MoveToFront(v, index) {\n var value = v[index];\n var i = index;\n for (; i; --i) v[i] = v[i - 1];\n v[0] = value;\n}\n\nfunction InverseMoveToFrontTransform(v, v_len) {\n var mtf = new Uint8Array(256);\n var i;\n for (i = 0; i < 256; ++i) {\n mtf[i] = i;\n }\n for (i = 0; i < v_len; ++i) {\n var index = v[i];\n v[i] = mtf[index];\n if (index) MoveToFront(mtf, index);\n }\n}\n\n/* Contains a collection of huffman trees with the same alphabet size. */\nfunction HuffmanTreeGroup(alphabet_size, num_htrees) {\n this.alphabet_size = alphabet_size;\n this.num_htrees = num_htrees;\n this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]); \n this.htrees = new Uint32Array(num_htrees);\n}\n\nHuffmanTreeGroup.prototype.decode = function(br) {\n var i;\n var table_size;\n var next = 0;\n for (i = 0; i < this.num_htrees; ++i) {\n this.htrees[i] = next;\n table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br);\n next += table_size;\n }\n};\n\nfunction DecodeContextMap(context_map_size, br) {\n var out = { num_htrees: null, context_map: null };\n var use_rle_for_zeros;\n var max_run_length_prefix = 0;\n var table;\n var i;\n \n br.readMoreInput();\n var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1;\n\n var context_map = out.context_map = new Uint8Array(context_map_size);\n if (num_htrees <= 1) {\n return out;\n }\n\n use_rle_for_zeros = br.readBits(1);\n if (use_rle_for_zeros) {\n max_run_length_prefix = br.readBits(4) + 1;\n }\n \n table = [];\n for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {\n table[i] = new HuffmanCode(0, 0);\n }\n \n ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br);\n \n for (i = 0; i < context_map_size;) {\n var code;\n\n br.readMoreInput();\n code = ReadSymbol(table, 0, br);\n if (code === 0) {\n context_map[i] = 0;\n ++i;\n } else if (code <= max_run_length_prefix) {\n var reps = 1 + (1 << code) + br.readBits(code);\n while (--reps) {\n if (i >= context_map_size) {\n throw new Error(\"[DecodeContextMap] i >= context_map_size\");\n }\n context_map[i] = 0;\n ++i;\n }\n } else {\n context_map[i] = code - max_run_length_prefix;\n ++i;\n }\n }\n if (br.readBits(1)) {\n InverseMoveToFrontTransform(context_map, context_map_size);\n }\n \n return out;\n}\n\nfunction DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) {\n var ringbuffer = tree_type * 2;\n var index = tree_type;\n var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br);\n var block_type;\n if (type_code === 0) {\n block_type = ringbuffers[ringbuffer + (indexes[index] & 1)];\n } else if (type_code === 1) {\n block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1;\n } else {\n block_type = type_code - 2;\n }\n if (block_type >= max_block_type) {\n block_type -= max_block_type;\n }\n block_types[tree_type] = block_type;\n ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type;\n ++indexes[index];\n}\n\nfunction CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) {\n var rb_size = ringbuffer_mask + 1;\n var rb_pos = pos & ringbuffer_mask;\n var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK;\n var nbytes;\n\n /* For short lengths copy byte-by-byte */\n if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) {\n while (len-- > 0) {\n br.readMoreInput();\n ringbuffer[rb_pos++] = br.readBits(8);\n if (rb_pos === rb_size) {\n output.write(ringbuffer, rb_size);\n rb_pos = 0;\n }\n }\n return;\n }\n\n if (br.bit_end_pos_ < 32) {\n throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32');\n }\n\n /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */\n while (br.bit_pos_ < 32) {\n ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_);\n br.bit_pos_ += 8;\n ++rb_pos;\n --len;\n }\n\n /* Copy remaining bytes from br.buf_ to ringbuffer. */\n nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3;\n if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) {\n var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos;\n for (var x = 0; x < tail; x++)\n ringbuffer[rb_pos + x] = br.buf_[br_pos + x];\n \n nbytes -= tail;\n rb_pos += tail;\n len -= tail;\n br_pos = 0;\n }\n\n for (var x = 0; x < nbytes; x++)\n ringbuffer[rb_pos + x] = br.buf_[br_pos + x];\n \n rb_pos += nbytes;\n len -= nbytes;\n\n /* If we wrote past the logical end of the ringbuffer, copy the tail of the\n ringbuffer to its beginning and flush the ringbuffer to the output. */\n if (rb_pos >= rb_size) {\n output.write(ringbuffer, rb_size);\n rb_pos -= rb_size; \n for (var x = 0; x < rb_pos; x++)\n ringbuffer[x] = ringbuffer[rb_size + x];\n }\n\n /* If we have more to copy than the remaining size of the ringbuffer, then we\n first fill the ringbuffer from the input and then flush the ringbuffer to\n the output */\n while (rb_pos + len >= rb_size) {\n nbytes = rb_size - rb_pos;\n if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) {\n throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');\n }\n output.write(ringbuffer, rb_size);\n len -= nbytes;\n rb_pos = 0;\n }\n\n /* Copy straight from the input onto the ringbuffer. The ringbuffer will be\n flushed to the output at a later time. */\n if (br.input_.read(ringbuffer, rb_pos, len) < len) {\n throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');\n }\n\n /* Restore the state of the bit reader. */\n br.reset();\n}\n\n/* Advances the bit reader position to the next byte boundary and verifies\n that any skipped bits are set to zero. */\nfunction JumpToByteBoundary(br) {\n var new_bit_pos = (br.bit_pos_ + 7) & ~7;\n var pad_bits = br.readBits(new_bit_pos - br.bit_pos_);\n return pad_bits == 0;\n}\n\nfunction BrotliDecompressedSize(buffer) {\n var input = new BrotliInput(buffer);\n var br = new BrotliBitReader(input);\n DecodeWindowBits(br);\n var out = DecodeMetaBlockLength(br);\n return out.meta_block_length;\n}\n\n__webpack_unused_export__ = BrotliDecompressedSize;\n\nfunction BrotliDecompressBuffer(buffer, output_size) {\n var input = new BrotliInput(buffer);\n \n if (output_size == null) {\n output_size = BrotliDecompressedSize(buffer);\n }\n \n var output_buffer = new Uint8Array(output_size);\n var output = new BrotliOutput(output_buffer);\n \n BrotliDecompress(input, output);\n \n if (output.pos < output.buffer.length) {\n output.buffer = output.buffer.subarray(0, output.pos);\n }\n \n return output.buffer;\n}\n\nexports.BrotliDecompressBuffer = BrotliDecompressBuffer;\n\nfunction BrotliDecompress(input, output) {\n var i;\n var pos = 0;\n var input_end = 0;\n var window_bits = 0;\n var max_backward_distance;\n var max_distance = 0;\n var ringbuffer_size;\n var ringbuffer_mask;\n var ringbuffer;\n var ringbuffer_end;\n /* This ring buffer holds a few past copy distances that will be used by */\n /* some special distance codes. */\n var dist_rb = [ 16, 15, 11, 4 ];\n var dist_rb_idx = 0;\n /* The previous 2 bytes used for context. */\n var prev_byte1 = 0;\n var prev_byte2 = 0;\n var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)];\n var block_type_trees;\n var block_len_trees;\n var br;\n\n /* We need the slack region for the following reasons:\n - always doing two 8-byte copies for fast backward copying\n - transforms\n - flushing the input ringbuffer when decoding uncompressed blocks */\n var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE;\n\n br = new BrotliBitReader(input);\n\n /* Decode window size. */\n window_bits = DecodeWindowBits(br);\n max_backward_distance = (1 << window_bits) - 16;\n\n ringbuffer_size = 1 << window_bits;\n ringbuffer_mask = ringbuffer_size - 1;\n ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength);\n ringbuffer_end = ringbuffer_size;\n\n block_type_trees = [];\n block_len_trees = [];\n for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) {\n block_type_trees[x] = new HuffmanCode(0, 0);\n block_len_trees[x] = new HuffmanCode(0, 0);\n }\n\n while (!input_end) {\n var meta_block_remaining_len = 0;\n var is_uncompressed;\n var block_length = [ 1 << 28, 1 << 28, 1 << 28 ];\n var block_type = [ 0 ];\n var num_block_types = [ 1, 1, 1 ];\n var block_type_rb = [ 0, 1, 0, 1, 0, 1 ];\n var block_type_rb_index = [ 0 ];\n var distance_postfix_bits;\n var num_direct_distance_codes;\n var distance_postfix_mask;\n var num_distance_codes;\n var context_map = null;\n var context_modes = null;\n var num_literal_htrees;\n var dist_context_map = null;\n var num_dist_htrees;\n var context_offset = 0;\n var context_map_slice = null;\n var literal_htree_index = 0;\n var dist_context_offset = 0;\n var dist_context_map_slice = null;\n var dist_htree_index = 0;\n var context_lookup_offset1 = 0;\n var context_lookup_offset2 = 0;\n var context_mode;\n var htree_command;\n\n for (i = 0; i < 3; ++i) {\n hgroup[i].codes = null;\n hgroup[i].htrees = null;\n }\n\n br.readMoreInput();\n \n var _out = DecodeMetaBlockLength(br);\n meta_block_remaining_len = _out.meta_block_length;\n if (pos + meta_block_remaining_len > output.buffer.length) {\n /* We need to grow the output buffer to fit the additional data. */\n var tmp = new Uint8Array( pos + meta_block_remaining_len );\n tmp.set( output.buffer );\n output.buffer = tmp;\n } \n input_end = _out.input_end;\n is_uncompressed = _out.is_uncompressed;\n \n if (_out.is_metadata) {\n JumpToByteBoundary(br);\n \n for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {\n br.readMoreInput();\n /* Read one byte and ignore it. */\n br.readBits(8);\n }\n \n continue;\n }\n \n if (meta_block_remaining_len === 0) {\n continue;\n }\n \n if (is_uncompressed) {\n br.bit_pos_ = (br.bit_pos_ + 7) & ~7;\n CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos,\n ringbuffer, ringbuffer_mask, br);\n pos += meta_block_remaining_len;\n continue;\n }\n \n for (i = 0; i < 3; ++i) {\n num_block_types[i] = DecodeVarLenUint8(br) + 1;\n if (num_block_types[i] >= 2) {\n ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n block_type_rb_index[i] = 1;\n }\n }\n \n br.readMoreInput();\n \n distance_postfix_bits = br.readBits(2);\n num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits);\n distance_postfix_mask = (1 << distance_postfix_bits) - 1;\n num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits));\n context_modes = new Uint8Array(num_block_types[0]);\n\n for (i = 0; i < num_block_types[0]; ++i) {\n br.readMoreInput();\n context_modes[i] = (br.readBits(2) << 1);\n }\n \n var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br);\n num_literal_htrees = _o1.num_htrees;\n context_map = _o1.context_map;\n \n var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br);\n num_dist_htrees = _o2.num_htrees;\n dist_context_map = _o2.context_map;\n \n hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees);\n hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]);\n hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees);\n\n for (i = 0; i < 3; ++i) {\n hgroup[i].decode(br);\n }\n\n context_map_slice = 0;\n dist_context_map_slice = 0;\n context_mode = context_modes[block_type[0]];\n context_lookup_offset1 = Context.lookupOffsets[context_mode];\n context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];\n htree_command = hgroup[1].htrees[0];\n\n while (meta_block_remaining_len > 0) {\n var cmd_code;\n var range_idx;\n var insert_code;\n var copy_code;\n var insert_length;\n var copy_length;\n var distance_code;\n var distance;\n var context;\n var j;\n var copy_dst;\n\n br.readMoreInput();\n \n if (block_length[1] === 0) {\n DecodeBlockType(num_block_types[1],\n block_type_trees, 1, block_type, block_type_rb,\n block_type_rb_index, br);\n block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br);\n htree_command = hgroup[1].htrees[block_type[1]];\n }\n --block_length[1];\n cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br);\n range_idx = cmd_code >> 6;\n if (range_idx >= 2) {\n range_idx -= 2;\n distance_code = -1;\n } else {\n distance_code = 0;\n }\n insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7);\n copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7);\n insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset +\n br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits);\n copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset +\n br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits);\n prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask];\n prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask];\n for (j = 0; j < insert_length; ++j) {\n br.readMoreInput();\n\n if (block_length[0] === 0) {\n DecodeBlockType(num_block_types[0],\n block_type_trees, 0, block_type, block_type_rb,\n block_type_rb_index, br);\n block_length[0] = ReadBlockLength(block_len_trees, 0, br);\n context_offset = block_type[0] << kLiteralContextBits;\n context_map_slice = context_offset;\n context_mode = context_modes[block_type[0]];\n context_lookup_offset1 = Context.lookupOffsets[context_mode];\n context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];\n }\n context = (Context.lookup[context_lookup_offset1 + prev_byte1] |\n Context.lookup[context_lookup_offset2 + prev_byte2]);\n literal_htree_index = context_map[context_map_slice + context];\n --block_length[0];\n prev_byte2 = prev_byte1;\n prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br);\n ringbuffer[pos & ringbuffer_mask] = prev_byte1;\n if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n output.write(ringbuffer, ringbuffer_size);\n }\n ++pos;\n }\n meta_block_remaining_len -= insert_length;\n if (meta_block_remaining_len <= 0) break;\n\n if (distance_code < 0) {\n var context;\n \n br.readMoreInput();\n if (block_length[2] === 0) {\n DecodeBlockType(num_block_types[2],\n block_type_trees, 2, block_type, block_type_rb,\n block_type_rb_index, br);\n block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br);\n dist_context_offset = block_type[2] << kDistanceContextBits;\n dist_context_map_slice = dist_context_offset;\n }\n --block_length[2];\n context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff;\n dist_htree_index = dist_context_map[dist_context_map_slice + context];\n distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br);\n if (distance_code >= num_direct_distance_codes) {\n var nbits;\n var postfix;\n var offset;\n distance_code -= num_direct_distance_codes;\n postfix = distance_code & distance_postfix_mask;\n distance_code >>= distance_postfix_bits;\n nbits = (distance_code >> 1) + 1;\n offset = ((2 + (distance_code & 1)) << nbits) - 4;\n distance_code = num_direct_distance_codes +\n ((offset + br.readBits(nbits)) <<\n distance_postfix_bits) + postfix;\n }\n }\n\n /* Convert the distance code to the actual distance by possibly looking */\n /* up past distnaces from the ringbuffer. */\n distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx);\n if (distance < 0) {\n throw new Error('[BrotliDecompress] invalid distance');\n }\n\n if (pos < max_backward_distance &&\n max_distance !== max_backward_distance) {\n max_distance = pos;\n } else {\n max_distance = max_backward_distance;\n }\n\n copy_dst = pos & ringbuffer_mask;\n\n if (distance > max_distance) {\n if (copy_length >= BrotliDictionary.minDictionaryWordLength &&\n copy_length <= BrotliDictionary.maxDictionaryWordLength) {\n var offset = BrotliDictionary.offsetsByLength[copy_length];\n var word_id = distance - max_distance - 1;\n var shift = BrotliDictionary.sizeBitsByLength[copy_length];\n var mask = (1 << shift) - 1;\n var word_idx = word_id & mask;\n var transform_idx = word_id >> shift;\n offset += word_idx * copy_length;\n if (transform_idx < Transform.kNumTransforms) {\n var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx);\n copy_dst += len;\n pos += len;\n meta_block_remaining_len -= len;\n if (copy_dst >= ringbuffer_end) {\n output.write(ringbuffer, ringbuffer_size);\n \n for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++)\n ringbuffer[_x] = ringbuffer[ringbuffer_end + _x];\n }\n } else {\n throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n }\n } else {\n throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n }\n } else {\n if (distance_code > 0) {\n dist_rb[dist_rb_idx & 3] = distance;\n ++dist_rb_idx;\n }\n\n if (copy_length > meta_block_remaining_len) {\n throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n }\n\n for (j = 0; j < copy_length; ++j) {\n ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask];\n if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n output.write(ringbuffer, ringbuffer_size);\n }\n ++pos;\n --meta_block_remaining_len;\n }\n }\n\n /* When we get here, we must have inserted at least one literal and */\n /* made a copy of at least length two, therefore accessing the last 2 */\n /* bytes is valid. */\n prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask];\n prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask];\n }\n\n /* Protect pos from overflow, wrap it around at every GB of input data */\n pos &= 0x3fffffff;\n }\n\n output.write(ringbuffer, pos & ringbuffer_mask);\n}\n\n__webpack_unused_export__ = BrotliDecompress;\n\nBrotliDictionary.init();\n\n\n/***/ }),\n\n/***/ 5340:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_828726__) {\n\nvar base64 = __nested_webpack_require_828726__(9742);\n\n/**\n * The normal dictionary-data.js is quite large, which makes it \n * unsuitable for browser usage. In order to make it smaller, \n * we read dictionary.bin, which is a compressed version of\n * the dictionary, and on initial load, Brotli decompresses \n * it's own dictionary. 😜\n */\nexports.init = function() {\n var BrotliDecompressBuffer = (__nested_webpack_require_828726__(6450).BrotliDecompressBuffer);\n var compressed = base64.toByteArray(__nested_webpack_require_828726__(2722));\n return BrotliDecompressBuffer(compressed);\n};\n\n\n/***/ }),\n\n/***/ 2722:\n/***/ (function(module) {\n\nmodule.exports=\"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\";\n\n\n/***/ }),\n\n/***/ 5139:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_898446__) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Collection of static dictionary words.\n*/\n\nvar data = __nested_webpack_require_898446__(5340);\nexports.init = function() {\n exports.dictionary = data.init();\n};\n\nexports.offsetsByLength = new Uint32Array([\n 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032,\n 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536,\n 115968, 118528, 119872, 121280, 122016,\n]);\n\nexports.sizeBitsByLength = new Uint8Array([\n 0, 0, 0, 0, 10, 10, 11, 11, 10, 10,\n 10, 10, 10, 9, 9, 8, 7, 7, 8, 7,\n 7, 6, 6, 5, 5,\n]);\n\nexports.minDictionaryWordLength = 4;\nexports.maxDictionaryWordLength = 24;\n\n\n/***/ }),\n\n/***/ 966:\n/***/ (function(__unused_webpack_module, exports) {\n\nfunction HuffmanCode(bits, value) {\n this.bits = bits; /* number of bits used for this symbol */\n this.value = value; /* symbol value or table offset */\n}\n\nexports.h = HuffmanCode;\n\nvar MAX_LENGTH = 15;\n\n/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the\n bit-wise reversal of the len least significant bits of key. */\nfunction GetNextKey(key, len) {\n var step = 1 << (len - 1);\n while (key & step) {\n step >>= 1;\n }\n return (key & (step - 1)) + step;\n}\n\n/* Stores code in table[0], table[step], table[2*step], ..., table[end] */\n/* Assumes that end is an integer multiple of step */\nfunction ReplicateValue(table, i, step, end, code) {\n do {\n end -= step;\n table[i + end] = new HuffmanCode(code.bits, code.value);\n } while (end > 0);\n}\n\n/* Returns the table width of the next 2nd level table. count is the histogram\n of bit lengths for the remaining symbols, len is the code length of the next\n processed symbol */\nfunction NextTableBitSize(count, len, root_bits) {\n var left = 1 << (len - root_bits);\n while (len < MAX_LENGTH) {\n left -= count[len];\n if (left <= 0) break;\n ++len;\n left <<= 1;\n }\n return len - root_bits;\n}\n\nexports.g = function(root_table, table, root_bits, code_lengths, code_lengths_size) {\n var start_table = table;\n var code; /* current table entry */\n var len; /* current code length */\n var symbol; /* symbol index in original or sorted table */\n var key; /* reversed prefix code */\n var step; /* step size to replicate values in current table */\n var low; /* low bits for current root entry */\n var mask; /* mask for low bits */\n var table_bits; /* key length of current table */\n var table_size; /* size of current table */\n var total_size; /* sum of root table size and 2nd level table sizes */\n var sorted; /* symbols sorted by code length */\n var count = new Int32Array(MAX_LENGTH + 1); /* number of codes of each length */\n var offset = new Int32Array(MAX_LENGTH + 1); /* offsets in sorted table for each length */\n\n sorted = new Int32Array(code_lengths_size);\n\n /* build histogram of code lengths */\n for (symbol = 0; symbol < code_lengths_size; symbol++) {\n count[code_lengths[symbol]]++;\n }\n\n /* generate offsets into sorted symbol table by code length */\n offset[1] = 0;\n for (len = 1; len < MAX_LENGTH; len++) {\n offset[len + 1] = offset[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (symbol = 0; symbol < code_lengths_size; symbol++) {\n if (code_lengths[symbol] !== 0) {\n sorted[offset[code_lengths[symbol]]++] = symbol;\n }\n }\n \n table_bits = root_bits;\n table_size = 1 << table_bits;\n total_size = table_size;\n\n /* special case code with only one value */\n if (offset[MAX_LENGTH] === 1) {\n for (key = 0; key < total_size; ++key) {\n root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff);\n }\n \n return total_size;\n }\n\n /* fill in root table */\n key = 0;\n symbol = 0;\n for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) {\n for (; count[len] > 0; --count[len]) {\n code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff);\n ReplicateValue(root_table, table + key, step, table_size, code);\n key = GetNextKey(key, len);\n }\n }\n\n /* fill in 2nd level tables and add pointers to root table */\n mask = total_size - 1;\n low = -1;\n for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) {\n for (; count[len] > 0; --count[len]) {\n if ((key & mask) !== low) {\n table += table_size;\n table_bits = NextTableBitSize(count, len, root_bits);\n table_size = 1 << table_bits;\n total_size += table_size;\n low = key & mask;\n root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff);\n }\n code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff);\n ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code);\n key = GetNextKey(key, len);\n }\n }\n \n return total_size;\n}\n\n\n/***/ }),\n\n/***/ 8435:\n/***/ (function(__unused_webpack_module, exports) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Lookup tables to map prefix codes to value ranges. This is used during\n decoding of the block lengths, literal insertion lengths and copy lengths.\n*/\n\n/* Represents the range of values belonging to a prefix code: */\n/* [offset, offset + 2^nbits) */\nfunction PrefixCodeRange(offset, nbits) {\n this.offset = offset;\n this.nbits = nbits;\n}\n\nexports.kBlockLengthPrefixCode = [\n new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2),\n new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3),\n new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4),\n new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5),\n new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8),\n new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12),\n new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24)\n];\n\nexports.kInsertLengthPrefixCode = [\n new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0),\n new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1),\n new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3),\n new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5),\n new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9),\n new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24),\n];\n\nexports.kCopyLengthPrefixCode = [\n new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0),\n new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0),\n new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2),\n new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4),\n new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7),\n new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2118, 24),\n];\n\nexports.kInsertRangeLut = [\n 0, 0, 8, 8, 0, 16, 8, 16, 16,\n];\n\nexports.kCopyRangeLut = [\n 0, 8, 0, 8, 16, 0, 16, 8, 16,\n];\n\n\n/***/ }),\n\n/***/ 6154:\n/***/ (function(__unused_webpack_module, exports) {\n\nfunction BrotliInput(buffer) {\n this.buffer = buffer;\n this.pos = 0;\n}\n\nBrotliInput.prototype.read = function(buf, i, count) {\n if (this.pos + count > this.buffer.length) {\n count = this.buffer.length - this.pos;\n }\n \n for (var p = 0; p < count; p++)\n buf[i + p] = this.buffer[this.pos + p];\n \n this.pos += count;\n return count;\n}\n\nexports.g = BrotliInput;\n\nfunction BrotliOutput(buf) {\n this.buffer = buf;\n this.pos = 0;\n}\n\nBrotliOutput.prototype.write = function(buf, count) {\n if (this.pos + count > this.buffer.length)\n throw new Error('Output buffer is not large enough');\n \n this.buffer.set(buf.subarray(0, count), this.pos);\n this.pos += count;\n return count;\n};\n\nexports.j = BrotliOutput;\n\n\n/***/ }),\n\n/***/ 2973:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_908266__) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Transformations on dictionary words.\n*/\n\nvar BrotliDictionary = __nested_webpack_require_908266__(5139);\n\nvar kIdentity = 0;\nvar kOmitLast1 = 1;\nvar kOmitLast2 = 2;\nvar kOmitLast3 = 3;\nvar kOmitLast4 = 4;\nvar kOmitLast5 = 5;\nvar kOmitLast6 = 6;\nvar kOmitLast7 = 7;\nvar kOmitLast8 = 8;\nvar kOmitLast9 = 9;\nvar kUppercaseFirst = 10;\nvar kUppercaseAll = 11;\nvar kOmitFirst1 = 12;\nvar kOmitFirst2 = 13;\nvar kOmitFirst3 = 14;\nvar kOmitFirst4 = 15;\nvar kOmitFirst5 = 16;\nvar kOmitFirst6 = 17;\nvar kOmitFirst7 = 18;\nvar kOmitFirst8 = 19;\nvar kOmitFirst9 = 20;\n\nfunction Transform(prefix, transform, suffix) {\n this.prefix = new Uint8Array(prefix.length);\n this.transform = transform;\n this.suffix = new Uint8Array(suffix.length);\n \n for (var i = 0; i < prefix.length; i++)\n this.prefix[i] = prefix.charCodeAt(i);\n \n for (var i = 0; i < suffix.length; i++)\n this.suffix[i] = suffix.charCodeAt(i);\n}\n\nvar kTransforms = [\n new Transform( \"\", kIdentity, \"\" ),\n new Transform( \"\", kIdentity, \" \" ),\n new Transform( \" \", kIdentity, \" \" ),\n new Transform( \"\", kOmitFirst1, \"\" ),\n new Transform( \"\", kUppercaseFirst, \" \" ),\n new Transform( \"\", kIdentity, \" the \" ),\n new Transform( \" \", kIdentity, \"\" ),\n new Transform( \"s \", kIdentity, \" \" ),\n new Transform( \"\", kIdentity, \" of \" ),\n new Transform( \"\", kUppercaseFirst, \"\" ),\n new Transform( \"\", kIdentity, \" and \" ),\n new Transform( \"\", kOmitFirst2, \"\" ),\n new Transform( \"\", kOmitLast1, \"\" ),\n new Transform( \", \", kIdentity, \" \" ),\n new Transform( \"\", kIdentity, \", \" ),\n new Transform( \" \", kUppercaseFirst, \" \" ),\n new Transform( \"\", kIdentity, \" in \" ),\n new Transform( \"\", kIdentity, \" to \" ),\n new Transform( \"e \", kIdentity, \" \" ),\n new Transform( \"\", kIdentity, \"\\\"\" ),\n new Transform( \"\", kIdentity, \".\" ),\n new Transform( \"\", kIdentity, \"\\\">\" ),\n new Transform( \"\", kIdentity, \"\\n\" ),\n new Transform( \"\", kOmitLast3, \"\" ),\n new Transform( \"\", kIdentity, \"]\" ),\n new Transform( \"\", kIdentity, \" for \" ),\n new Transform( \"\", kOmitFirst3, \"\" ),\n new Transform( \"\", kOmitLast2, \"\" ),\n new Transform( \"\", kIdentity, \" a \" ),\n new Transform( \"\", kIdentity, \" that \" ),\n new Transform( \" \", kUppercaseFirst, \"\" ),\n new Transform( \"\", kIdentity, \". \" ),\n new Transform( \".\", kIdentity, \"\" ),\n new Transform( \" \", kIdentity, \", \" ),\n new Transform( \"\", kOmitFirst4, \"\" ),\n new Transform( \"\", kIdentity, \" with \" ),\n new Transform( \"\", kIdentity, \"'\" ),\n new Transform( \"\", kIdentity, \" from \" ),\n new Transform( \"\", kIdentity, \" by \" ),\n new Transform( \"\", kOmitFirst5, \"\" ),\n new Transform( \"\", kOmitFirst6, \"\" ),\n new Transform( \" the \", kIdentity, \"\" ),\n new Transform( \"\", kOmitLast4, \"\" ),\n new Transform( \"\", kIdentity, \". The \" ),\n new Transform( \"\", kUppercaseAll, \"\" ),\n new Transform( \"\", kIdentity, \" on \" ),\n new Transform( \"\", kIdentity, \" as \" ),\n new Transform( \"\", kIdentity, \" is \" ),\n new Transform( \"\", kOmitLast7, \"\" ),\n new Transform( \"\", kOmitLast1, \"ing \" ),\n new Transform( \"\", kIdentity, \"\\n\\t\" ),\n new Transform( \"\", kIdentity, \":\" ),\n new Transform( \" \", kIdentity, \". \" ),\n new Transform( \"\", kIdentity, \"ed \" ),\n new Transform( \"\", kOmitFirst9, \"\" ),\n new Transform( \"\", kOmitFirst7, \"\" ),\n new Transform( \"\", kOmitLast6, \"\" ),\n new Transform( \"\", kIdentity, \"(\" ),\n new Transform( \"\", kUppercaseFirst, \", \" ),\n new Transform( \"\", kOmitLast8, \"\" ),\n new Transform( \"\", kIdentity, \" at \" ),\n new Transform( \"\", kIdentity, \"ly \" ),\n new Transform( \" the \", kIdentity, \" of \" ),\n new Transform( \"\", kOmitLast5, \"\" ),\n new Transform( \"\", kOmitLast9, \"\" ),\n new Transform( \" \", kUppercaseFirst, \", \" ),\n new Transform( \"\", kUppercaseFirst, \"\\\"\" ),\n new Transform( \".\", kIdentity, \"(\" ),\n new Transform( \"\", kUppercaseAll, \" \" ),\n new Transform( \"\", kUppercaseFirst, \"\\\">\" ),\n new Transform( \"\", kIdentity, \"=\\\"\" ),\n new Transform( \" \", kIdentity, \".\" ),\n new Transform( \".com/\", kIdentity, \"\" ),\n new Transform( \" the \", kIdentity, \" of the \" ),\n new Transform( \"\", kUppercaseFirst, \"'\" ),\n new Transform( \"\", kIdentity, \". This \" ),\n new Transform( \"\", kIdentity, \",\" ),\n new Transform( \".\", kIdentity, \" \" ),\n new Transform( \"\", kUppercaseFirst, \"(\" ),\n new Transform( \"\", kUppercaseFirst, \".\" ),\n new Transform( \"\", kIdentity, \" not \" ),\n new Transform( \" \", kIdentity, \"=\\\"\" ),\n new Transform( \"\", kIdentity, \"er \" ),\n new Transform( \" \", kUppercaseAll, \" \" ),\n new Transform( \"\", kIdentity, \"al \" ),\n new Transform( \" \", kUppercaseAll, \"\" ),\n new Transform( \"\", kIdentity, \"='\" ),\n new Transform( \"\", kUppercaseAll, \"\\\"\" ),\n new Transform( \"\", kUppercaseFirst, \". \" ),\n new Transform( \" \", kIdentity, \"(\" ),\n new Transform( \"\", kIdentity, \"ful \" ),\n new Transform( \" \", kUppercaseFirst, \". \" ),\n new Transform( \"\", kIdentity, \"ive \" ),\n new Transform( \"\", kIdentity, \"less \" ),\n new Transform( \"\", kUppercaseAll, \"'\" ),\n new Transform( \"\", kIdentity, \"est \" ),\n new Transform( \" \", kUppercaseFirst, \".\" ),\n new Transform( \"\", kUppercaseAll, \"\\\">\" ),\n new Transform( \" \", kIdentity, \"='\" ),\n new Transform( \"\", kUppercaseFirst, \",\" ),\n new Transform( \"\", kIdentity, \"ize \" ),\n new Transform( \"\", kUppercaseAll, \".\" ),\n new Transform( \"\\xc2\\xa0\", kIdentity, \"\" ),\n new Transform( \" \", kIdentity, \",\" ),\n new Transform( \"\", kUppercaseFirst, \"=\\\"\" ),\n new Transform( \"\", kUppercaseAll, \"=\\\"\" ),\n new Transform( \"\", kIdentity, \"ous \" ),\n new Transform( \"\", kUppercaseAll, \", \" ),\n new Transform( \"\", kUppercaseFirst, \"='\" ),\n new Transform( \" \", kUppercaseFirst, \",\" ),\n new Transform( \" \", kUppercaseAll, \"=\\\"\" ),\n new Transform( \" \", kUppercaseAll, \", \" ),\n new Transform( \"\", kUppercaseAll, \",\" ),\n new Transform( \"\", kUppercaseAll, \"(\" ),\n new Transform( \"\", kUppercaseAll, \". \" ),\n new Transform( \" \", kUppercaseAll, \".\" ),\n new Transform( \"\", kUppercaseAll, \"='\" ),\n new Transform( \" \", kUppercaseAll, \". \" ),\n new Transform( \" \", kUppercaseFirst, \"=\\\"\" ),\n new Transform( \" \", kUppercaseAll, \"='\" ),\n new Transform( \" \", kUppercaseFirst, \"='\" )\n];\n\nexports.kTransforms = kTransforms;\nexports.kNumTransforms = kTransforms.length;\n\nfunction ToUpperCase(p, i) {\n if (p[i] < 0xc0) {\n if (p[i] >= 97 && p[i] <= 122) {\n p[i] ^= 32;\n }\n return 1;\n }\n \n /* An overly simplified uppercasing model for utf-8. */\n if (p[i] < 0xe0) {\n p[i + 1] ^= 32;\n return 2;\n }\n \n /* An arbitrary transform for three byte characters. */\n p[i + 2] ^= 5;\n return 3;\n}\n\nexports.transformDictionaryWord = function(dst, idx, word, len, transform) {\n var prefix = kTransforms[transform].prefix;\n var suffix = kTransforms[transform].suffix;\n var t = kTransforms[transform].transform;\n var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1);\n var i = 0;\n var start_idx = idx;\n var uppercase;\n \n if (skip > len) {\n skip = len;\n }\n \n var prefix_pos = 0;\n while (prefix_pos < prefix.length) {\n dst[idx++] = prefix[prefix_pos++];\n }\n \n word += skip;\n len -= skip;\n \n if (t <= kOmitLast9) {\n len -= t;\n }\n \n for (i = 0; i < len; i++) {\n dst[idx++] = BrotliDictionary.dictionary[word + i];\n }\n \n uppercase = idx - len;\n \n if (t === kUppercaseFirst) {\n ToUpperCase(dst, uppercase);\n } else if (t === kUppercaseAll) {\n while (len > 0) {\n var step = ToUpperCase(dst, uppercase);\n uppercase += step;\n len -= step;\n }\n }\n \n var suffix_pos = 0;\n while (suffix_pos < suffix.length) {\n dst[idx++] = suffix[suffix_pos++];\n }\n \n return idx - start_idx;\n}\n\n\n/***/ }),\n\n/***/ 7709:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_919297__) {\n\nmodule.exports = __nested_webpack_require_919297__(6450).BrotliDecompressBuffer;\n\n\n/***/ }),\n\n/***/ 4505:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_919463__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __nested_webpack_require_919463__(8823)[\"Buffer\"];\n/* provided dependency */ var process = __nested_webpack_require_919463__(4155);\n\n/* eslint camelcase: \"off\" */\n\nvar assert = __nested_webpack_require_919463__(9282);\n\nvar Zstream = __nested_webpack_require_919463__(2292);\nvar zlib_deflate = __nested_webpack_require_919463__(405);\nvar zlib_inflate = __nested_webpack_require_919463__(7948);\nvar constants = __nested_webpack_require_919463__(1619);\n\nfor (var key in constants) {\n exports[key] = constants[key];\n}\n\n// zlib modes\nexports.NONE = 0;\nexports.DEFLATE = 1;\nexports.INFLATE = 2;\nexports.GZIP = 3;\nexports.GUNZIP = 4;\nexports.DEFLATERAW = 5;\nexports.INFLATERAW = 6;\nexports.UNZIP = 7;\n\nvar GZIP_HEADER_ID1 = 0x1f;\nvar GZIP_HEADER_ID2 = 0x8b;\n\n/**\n * Emulate Node's zlib C++ layer for use by the JS layer in index.js\n */\nfunction Zlib(mode) {\n if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {\n throw new TypeError('Bad argument');\n }\n\n this.dictionary = null;\n this.err = 0;\n this.flush = 0;\n this.init_done = false;\n this.level = 0;\n this.memLevel = 0;\n this.mode = mode;\n this.strategy = 0;\n this.windowBits = 0;\n this.write_in_progress = false;\n this.pending_close = false;\n this.gzip_id_bytes_read = 0;\n}\n\nZlib.prototype.close = function () {\n if (this.write_in_progress) {\n this.pending_close = true;\n return;\n }\n\n this.pending_close = false;\n\n assert(this.init_done, 'close before init');\n assert(this.mode <= exports.UNZIP);\n\n if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {\n zlib_deflate.deflateEnd(this.strm);\n } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {\n zlib_inflate.inflateEnd(this.strm);\n }\n\n this.mode = exports.NONE;\n\n this.dictionary = null;\n};\n\nZlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {\n return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {\n return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {\n assert.equal(arguments.length, 8);\n\n assert(this.init_done, 'write before init');\n assert(this.mode !== exports.NONE, 'already finalized');\n assert.equal(false, this.write_in_progress, 'write already in progress');\n assert.equal(false, this.pending_close, 'close is pending');\n\n this.write_in_progress = true;\n\n assert.equal(false, flush === undefined, 'must provide flush value');\n\n this.write_in_progress = true;\n\n if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {\n throw new Error('Invalid flush value');\n }\n\n if (input == null) {\n input = Buffer.alloc(0);\n in_len = 0;\n in_off = 0;\n }\n\n this.strm.avail_in = in_len;\n this.strm.input = input;\n this.strm.next_in = in_off;\n this.strm.avail_out = out_len;\n this.strm.output = out;\n this.strm.next_out = out_off;\n this.flush = flush;\n\n if (!async) {\n // sync version\n this._process();\n\n if (this._checkError()) {\n return this._afterSync();\n }\n return;\n }\n\n // async version\n var self = this;\n process.nextTick(function () {\n self._process();\n self._after();\n });\n\n return this;\n};\n\nZlib.prototype._afterSync = function () {\n var avail_out = this.strm.avail_out;\n var avail_in = this.strm.avail_in;\n\n this.write_in_progress = false;\n\n return [avail_in, avail_out];\n};\n\nZlib.prototype._process = function () {\n var next_expected_header_byte = null;\n\n // If the avail_out is left at 0, then it means that it ran out\n // of room. If there was avail_out left over, then it means\n // that all of the input was consumed.\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.GZIP:\n case exports.DEFLATERAW:\n this.err = zlib_deflate.deflate(this.strm, this.flush);\n break;\n case exports.UNZIP:\n if (this.strm.avail_in > 0) {\n next_expected_header_byte = this.strm.next_in;\n }\n\n switch (this.gzip_id_bytes_read) {\n case 0:\n if (next_expected_header_byte === null) {\n break;\n }\n\n if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {\n this.gzip_id_bytes_read = 1;\n next_expected_header_byte++;\n\n if (this.strm.avail_in === 1) {\n // The only available byte was already read.\n break;\n }\n } else {\n this.mode = exports.INFLATE;\n break;\n }\n\n // fallthrough\n case 1:\n if (next_expected_header_byte === null) {\n break;\n }\n\n if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {\n this.gzip_id_bytes_read = 2;\n this.mode = exports.GUNZIP;\n } else {\n // There is no actual difference between INFLATE and INFLATERAW\n // (after initialization).\n this.mode = exports.INFLATE;\n }\n\n break;\n default:\n throw new Error('invalid number of gzip magic number bytes read');\n }\n\n // fallthrough\n case exports.INFLATE:\n case exports.GUNZIP:\n case exports.INFLATERAW:\n this.err = zlib_inflate.inflate(this.strm, this.flush\n\n // If data was encoded with dictionary\n );if (this.err === exports.Z_NEED_DICT && this.dictionary) {\n // Load it\n this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);\n if (this.err === exports.Z_OK) {\n // And try to decode again\n this.err = zlib_inflate.inflate(this.strm, this.flush);\n } else if (this.err === exports.Z_DATA_ERROR) {\n // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.\n // Make it possible for After() to tell a bad dictionary from bad\n // input.\n this.err = exports.Z_NEED_DICT;\n }\n }\n while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {\n // Bytes remain in input buffer. Perhaps this is another compressed\n // member in the same archive, or just trailing garbage.\n // Trailing zero bytes are okay, though, since they are frequently\n // used for padding.\n\n this.reset();\n this.err = zlib_inflate.inflate(this.strm, this.flush);\n }\n break;\n default:\n throw new Error('Unknown mode ' + this.mode);\n }\n};\n\nZlib.prototype._checkError = function () {\n // Acceptable error states depend on the type of zlib stream.\n switch (this.err) {\n case exports.Z_OK:\n case exports.Z_BUF_ERROR:\n if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {\n this._error('unexpected end of file');\n return false;\n }\n break;\n case exports.Z_STREAM_END:\n // normal statuses, not fatal\n break;\n case exports.Z_NEED_DICT:\n if (this.dictionary == null) {\n this._error('Missing dictionary');\n } else {\n this._error('Bad dictionary');\n }\n return false;\n default:\n // something else.\n this._error('Zlib error');\n return false;\n }\n\n return true;\n};\n\nZlib.prototype._after = function () {\n if (!this._checkError()) {\n return;\n }\n\n var avail_out = this.strm.avail_out;\n var avail_in = this.strm.avail_in;\n\n this.write_in_progress = false;\n\n // call the write() cb\n this.callback(avail_in, avail_out);\n\n if (this.pending_close) {\n this.close();\n }\n};\n\nZlib.prototype._error = function (message) {\n if (this.strm.msg) {\n message = this.strm.msg;\n }\n this.onerror(message, this.err\n\n // no hope of rescue.\n );this.write_in_progress = false;\n if (this.pending_close) {\n this.close();\n }\n};\n\nZlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {\n assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');\n\n assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');\n assert(level >= -1 && level <= 9, 'invalid compression level');\n\n assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');\n\n assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');\n\n this._init(level, windowBits, memLevel, strategy, dictionary);\n this._setDictionary();\n};\n\nZlib.prototype.params = function () {\n throw new Error('deflateParams Not supported');\n};\n\nZlib.prototype.reset = function () {\n this._reset();\n this._setDictionary();\n};\n\nZlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {\n this.level = level;\n this.windowBits = windowBits;\n this.memLevel = memLevel;\n this.strategy = strategy;\n\n this.flush = exports.Z_NO_FLUSH;\n\n this.err = exports.Z_OK;\n\n if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {\n this.windowBits += 16;\n }\n\n if (this.mode === exports.UNZIP) {\n this.windowBits += 32;\n }\n\n if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {\n this.windowBits = -1 * this.windowBits;\n }\n\n this.strm = new Zstream();\n\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.GZIP:\n case exports.DEFLATERAW:\n this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);\n break;\n case exports.INFLATE:\n case exports.GUNZIP:\n case exports.INFLATERAW:\n case exports.UNZIP:\n this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);\n break;\n default:\n throw new Error('Unknown mode ' + this.mode);\n }\n\n if (this.err !== exports.Z_OK) {\n this._error('Init error');\n }\n\n this.dictionary = dictionary;\n\n this.write_in_progress = false;\n this.init_done = true;\n};\n\nZlib.prototype._setDictionary = function () {\n if (this.dictionary == null) {\n return;\n }\n\n this.err = exports.Z_OK;\n\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.DEFLATERAW:\n this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);\n break;\n default:\n break;\n }\n\n if (this.err !== exports.Z_OK) {\n this._error('Failed to set dictionary');\n }\n};\n\nZlib.prototype._reset = function () {\n this.err = exports.Z_OK;\n\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.DEFLATERAW:\n case exports.GZIP:\n this.err = zlib_deflate.deflateReset(this.strm);\n break;\n case exports.INFLATE:\n case exports.INFLATERAW:\n case exports.GUNZIP:\n this.err = zlib_inflate.inflateReset(this.strm);\n break;\n default:\n break;\n }\n\n if (this.err !== exports.Z_OK) {\n this._error('Failed to reset stream');\n }\n};\n\nexports.Zlib = Zlib;\n\n/***/ }),\n\n/***/ 2635:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_930721__) {\n\n\"use strict\";\n/* provided dependency */ var process = __nested_webpack_require_930721__(4155);\n\n\nvar Buffer = (__nested_webpack_require_930721__(8823).Buffer);\nvar Transform = (__nested_webpack_require_930721__(2830).Transform);\nvar binding = __nested_webpack_require_930721__(4505);\nvar util = __nested_webpack_require_930721__(9539);\nvar assert = (__nested_webpack_require_930721__(9282).ok);\nvar kMaxLength = (__nested_webpack_require_930721__(8823).kMaxLength);\nvar kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';\n\n// zlib doesn't provide these, so kludge them in following the same\n// const naming scheme zlib uses.\nbinding.Z_MIN_WINDOWBITS = 8;\nbinding.Z_MAX_WINDOWBITS = 15;\nbinding.Z_DEFAULT_WINDOWBITS = 15;\n\n// fewer than 64 bytes per chunk is stupid.\n// technically it could work with as few as 8, but even 64 bytes\n// is absurdly low. Usually a MB or more is best.\nbinding.Z_MIN_CHUNK = 64;\nbinding.Z_MAX_CHUNK = Infinity;\nbinding.Z_DEFAULT_CHUNK = 16 * 1024;\n\nbinding.Z_MIN_MEMLEVEL = 1;\nbinding.Z_MAX_MEMLEVEL = 9;\nbinding.Z_DEFAULT_MEMLEVEL = 8;\n\nbinding.Z_MIN_LEVEL = -1;\nbinding.Z_MAX_LEVEL = 9;\nbinding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;\n\n// expose all the zlib constants\nvar bkeys = Object.keys(binding);\nfor (var bk = 0; bk < bkeys.length; bk++) {\n var bkey = bkeys[bk];\n if (bkey.match(/^Z/)) {\n Object.defineProperty(exports, bkey, {\n enumerable: true, value: binding[bkey], writable: false\n });\n }\n}\n\n// translation table for return codes.\nvar codes = {\n Z_OK: binding.Z_OK,\n Z_STREAM_END: binding.Z_STREAM_END,\n Z_NEED_DICT: binding.Z_NEED_DICT,\n Z_ERRNO: binding.Z_ERRNO,\n Z_STREAM_ERROR: binding.Z_STREAM_ERROR,\n Z_DATA_ERROR: binding.Z_DATA_ERROR,\n Z_MEM_ERROR: binding.Z_MEM_ERROR,\n Z_BUF_ERROR: binding.Z_BUF_ERROR,\n Z_VERSION_ERROR: binding.Z_VERSION_ERROR\n};\n\nvar ckeys = Object.keys(codes);\nfor (var ck = 0; ck < ckeys.length; ck++) {\n var ckey = ckeys[ck];\n codes[codes[ckey]] = ckey;\n}\n\nObject.defineProperty(exports, \"codes\", ({\n enumerable: true, value: Object.freeze(codes), writable: false\n}));\n\nexports.Deflate = Deflate;\nexports.Inflate = Inflate;\nexports.Gzip = Gzip;\nexports.Gunzip = Gunzip;\nexports.DeflateRaw = DeflateRaw;\nexports.InflateRaw = InflateRaw;\nexports.Unzip = Unzip;\n\nexports.createDeflate = function (o) {\n return new Deflate(o);\n};\n\nexports.createInflate = function (o) {\n return new Inflate(o);\n};\n\nexports.createDeflateRaw = function (o) {\n return new DeflateRaw(o);\n};\n\nexports.createInflateRaw = function (o) {\n return new InflateRaw(o);\n};\n\nexports.createGzip = function (o) {\n return new Gzip(o);\n};\n\nexports.createGunzip = function (o) {\n return new Gunzip(o);\n};\n\nexports.createUnzip = function (o) {\n return new Unzip(o);\n};\n\n// Convenience methods.\n// compress/decompress a string or buffer in one step.\nexports.deflate = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Deflate(opts), buffer, callback);\n};\n\nexports.deflateSync = function (buffer, opts) {\n return zlibBufferSync(new Deflate(opts), buffer);\n};\n\nexports.gzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Gzip(opts), buffer, callback);\n};\n\nexports.gzipSync = function (buffer, opts) {\n return zlibBufferSync(new Gzip(opts), buffer);\n};\n\nexports.deflateRaw = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new DeflateRaw(opts), buffer, callback);\n};\n\nexports.deflateRawSync = function (buffer, opts) {\n return zlibBufferSync(new DeflateRaw(opts), buffer);\n};\n\nexports.unzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Unzip(opts), buffer, callback);\n};\n\nexports.unzipSync = function (buffer, opts) {\n return zlibBufferSync(new Unzip(opts), buffer);\n};\n\nexports.inflate = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Inflate(opts), buffer, callback);\n};\n\nexports.inflateSync = function (buffer, opts) {\n return zlibBufferSync(new Inflate(opts), buffer);\n};\n\nexports.gunzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Gunzip(opts), buffer, callback);\n};\n\nexports.gunzipSync = function (buffer, opts) {\n return zlibBufferSync(new Gunzip(opts), buffer);\n};\n\nexports.inflateRaw = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new InflateRaw(opts), buffer, callback);\n};\n\nexports.inflateRawSync = function (buffer, opts) {\n return zlibBufferSync(new InflateRaw(opts), buffer);\n};\n\nfunction zlibBuffer(engine, buffer, callback) {\n var buffers = [];\n var nread = 0;\n\n engine.on('error', onError);\n engine.on('end', onEnd);\n\n engine.end(buffer);\n flow();\n\n function flow() {\n var chunk;\n while (null !== (chunk = engine.read())) {\n buffers.push(chunk);\n nread += chunk.length;\n }\n engine.once('readable', flow);\n }\n\n function onError(err) {\n engine.removeListener('end', onEnd);\n engine.removeListener('readable', flow);\n callback(err);\n }\n\n function onEnd() {\n var buf;\n var err = null;\n\n if (nread >= kMaxLength) {\n err = new RangeError(kRangeErrorMessage);\n } else {\n buf = Buffer.concat(buffers, nread);\n }\n\n buffers = [];\n engine.close();\n callback(err, buf);\n }\n}\n\nfunction zlibBufferSync(engine, buffer) {\n if (typeof buffer === 'string') buffer = Buffer.from(buffer);\n\n if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');\n\n var flushFlag = engine._finishFlushFlag;\n\n return engine._processChunk(buffer, flushFlag);\n}\n\n// generic zlib\n// minimal 2-byte header\nfunction Deflate(opts) {\n if (!(this instanceof Deflate)) return new Deflate(opts);\n Zlib.call(this, opts, binding.DEFLATE);\n}\n\nfunction Inflate(opts) {\n if (!(this instanceof Inflate)) return new Inflate(opts);\n Zlib.call(this, opts, binding.INFLATE);\n}\n\n// gzip - bigger header, same deflate compression\nfunction Gzip(opts) {\n if (!(this instanceof Gzip)) return new Gzip(opts);\n Zlib.call(this, opts, binding.GZIP);\n}\n\nfunction Gunzip(opts) {\n if (!(this instanceof Gunzip)) return new Gunzip(opts);\n Zlib.call(this, opts, binding.GUNZIP);\n}\n\n// raw - no header\nfunction DeflateRaw(opts) {\n if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);\n Zlib.call(this, opts, binding.DEFLATERAW);\n}\n\nfunction InflateRaw(opts) {\n if (!(this instanceof InflateRaw)) return new InflateRaw(opts);\n Zlib.call(this, opts, binding.INFLATERAW);\n}\n\n// auto-detect header.\nfunction Unzip(opts) {\n if (!(this instanceof Unzip)) return new Unzip(opts);\n Zlib.call(this, opts, binding.UNZIP);\n}\n\nfunction isValidFlushFlag(flag) {\n return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\n\nfunction Zlib(opts, mode) {\n var _this = this;\n\n this._opts = opts = opts || {};\n this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;\n\n Transform.call(this, opts);\n\n if (opts.flush && !isValidFlushFlag(opts.flush)) {\n throw new Error('Invalid flush flag: ' + opts.flush);\n }\n if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {\n throw new Error('Invalid flush flag: ' + opts.finishFlush);\n }\n\n this._flushFlag = opts.flush || binding.Z_NO_FLUSH;\n this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;\n\n if (opts.chunkSize) {\n if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {\n throw new Error('Invalid chunk size: ' + opts.chunkSize);\n }\n }\n\n if (opts.windowBits) {\n if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {\n throw new Error('Invalid windowBits: ' + opts.windowBits);\n }\n }\n\n if (opts.level) {\n if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {\n throw new Error('Invalid compression level: ' + opts.level);\n }\n }\n\n if (opts.memLevel) {\n if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {\n throw new Error('Invalid memLevel: ' + opts.memLevel);\n }\n }\n\n if (opts.strategy) {\n if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {\n throw new Error('Invalid strategy: ' + opts.strategy);\n }\n }\n\n if (opts.dictionary) {\n if (!Buffer.isBuffer(opts.dictionary)) {\n throw new Error('Invalid dictionary: it should be a Buffer instance');\n }\n }\n\n this._handle = new binding.Zlib(mode);\n\n var self = this;\n this._hadError = false;\n this._handle.onerror = function (message, errno) {\n // there is no way to cleanly recover.\n // continuing only obscures problems.\n _close(self);\n self._hadError = true;\n\n var error = new Error(message);\n error.errno = errno;\n error.code = exports.codes[errno];\n self.emit('error', error);\n };\n\n var level = exports.Z_DEFAULT_COMPRESSION;\n if (typeof opts.level === 'number') level = opts.level;\n\n var strategy = exports.Z_DEFAULT_STRATEGY;\n if (typeof opts.strategy === 'number') strategy = opts.strategy;\n\n this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);\n\n this._buffer = Buffer.allocUnsafe(this._chunkSize);\n this._offset = 0;\n this._level = level;\n this._strategy = strategy;\n\n this.once('end', this.close);\n\n Object.defineProperty(this, '_closed', {\n get: function () {\n return !_this._handle;\n },\n configurable: true,\n enumerable: true\n });\n}\n\nutil.inherits(Zlib, Transform);\n\nZlib.prototype.params = function (level, strategy, callback) {\n if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {\n throw new RangeError('Invalid compression level: ' + level);\n }\n if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {\n throw new TypeError('Invalid strategy: ' + strategy);\n }\n\n if (this._level !== level || this._strategy !== strategy) {\n var self = this;\n this.flush(binding.Z_SYNC_FLUSH, function () {\n assert(self._handle, 'zlib binding closed');\n self._handle.params(level, strategy);\n if (!self._hadError) {\n self._level = level;\n self._strategy = strategy;\n if (callback) callback();\n }\n });\n } else {\n process.nextTick(callback);\n }\n};\n\nZlib.prototype.reset = function () {\n assert(this._handle, 'zlib binding closed');\n return this._handle.reset();\n};\n\n// This is the _flush function called by the transform class,\n// internally, when the last chunk has been written.\nZlib.prototype._flush = function (callback) {\n this._transform(Buffer.alloc(0), '', callback);\n};\n\nZlib.prototype.flush = function (kind, callback) {\n var _this2 = this;\n\n var ws = this._writableState;\n\n if (typeof kind === 'function' || kind === undefined && !callback) {\n callback = kind;\n kind = binding.Z_FULL_FLUSH;\n }\n\n if (ws.ended) {\n if (callback) process.nextTick(callback);\n } else if (ws.ending) {\n if (callback) this.once('end', callback);\n } else if (ws.needDrain) {\n if (callback) {\n this.once('drain', function () {\n return _this2.flush(kind, callback);\n });\n }\n } else {\n this._flushFlag = kind;\n this.write(Buffer.alloc(0), '', callback);\n }\n};\n\nZlib.prototype.close = function (callback) {\n _close(this, callback);\n process.nextTick(emitCloseNT, this);\n};\n\nfunction _close(engine, callback) {\n if (callback) process.nextTick(callback);\n\n // Caller may invoke .close after a zlib error (which will null _handle).\n if (!engine._handle) return;\n\n engine._handle.close();\n engine._handle = null;\n}\n\nfunction emitCloseNT(self) {\n self.emit('close');\n}\n\nZlib.prototype._transform = function (chunk, encoding, cb) {\n var flushFlag;\n var ws = this._writableState;\n var ending = ws.ending || ws.ended;\n var last = ending && (!chunk || ws.length === chunk.length);\n\n if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));\n\n if (!this._handle) return cb(new Error('zlib binding closed'));\n\n // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag\n // (or whatever flag was provided using opts.finishFlush).\n // If it's explicitly flushing at some other time, then we use\n // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression\n // goodness.\n if (last) flushFlag = this._finishFlushFlag;else {\n flushFlag = this._flushFlag;\n // once we've flushed the last of the queue, stop flushing and\n // go back to the normal behavior.\n if (chunk.length >= ws.length) {\n this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;\n }\n }\n\n this._processChunk(chunk, flushFlag, cb);\n};\n\nZlib.prototype._processChunk = function (chunk, flushFlag, cb) {\n var availInBefore = chunk && chunk.length;\n var availOutBefore = this._chunkSize - this._offset;\n var inOff = 0;\n\n var self = this;\n\n var async = typeof cb === 'function';\n\n if (!async) {\n var buffers = [];\n var nread = 0;\n\n var error;\n this.on('error', function (er) {\n error = er;\n });\n\n assert(this._handle, 'zlib binding closed');\n do {\n var res = this._handle.writeSync(flushFlag, chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore); // out_len\n } while (!this._hadError && callback(res[0], res[1]));\n\n if (this._hadError) {\n throw error;\n }\n\n if (nread >= kMaxLength) {\n _close(this);\n throw new RangeError(kRangeErrorMessage);\n }\n\n var buf = Buffer.concat(buffers, nread);\n _close(this);\n\n return buf;\n }\n\n assert(this._handle, 'zlib binding closed');\n var req = this._handle.write(flushFlag, chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore); // out_len\n\n req.buffer = chunk;\n req.callback = callback;\n\n function callback(availInAfter, availOutAfter) {\n // When the callback is used in an async write, the callback's\n // context is the `req` object that was created. The req object\n // is === this._handle, and that's why it's important to null\n // out the values after they are done being used. `this._handle`\n // can stay in memory longer than the callback and buffer are needed.\n if (this) {\n this.buffer = null;\n this.callback = null;\n }\n\n if (self._hadError) return;\n\n var have = availOutBefore - availOutAfter;\n assert(have >= 0, 'have should not go down');\n\n if (have > 0) {\n var out = self._buffer.slice(self._offset, self._offset + have);\n self._offset += have;\n // serve some output to the consumer.\n if (async) {\n self.push(out);\n } else {\n buffers.push(out);\n nread += out.length;\n }\n }\n\n // exhausted the output buffer, or used all the input create a new one.\n if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n availOutBefore = self._chunkSize;\n self._offset = 0;\n self._buffer = Buffer.allocUnsafe(self._chunkSize);\n }\n\n if (availOutAfter === 0) {\n // Not actually done. Need to reprocess.\n // Also, update the availInBefore to the availInAfter value,\n // so that if we have to hit it a third (fourth, etc.) time,\n // it'll have the correct byte counts.\n inOff += availInBefore - availInAfter;\n availInBefore = availInAfter;\n\n if (!async) return true;\n\n var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);\n newReq.callback = callback; // this same function\n newReq.buffer = chunk;\n return;\n }\n\n if (!async) return false;\n\n // finished with the chunk.\n cb();\n }\n};\n\nutil.inherits(Deflate, Zlib);\nutil.inherits(Inflate, Zlib);\nutil.inherits(Gzip, Zlib);\nutil.inherits(Gunzip, Zlib);\nutil.inherits(DeflateRaw, Zlib);\nutil.inherits(InflateRaw, Zlib);\nutil.inherits(Unzip, Zlib);\n\n/***/ }),\n\n/***/ 1924:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_947643__) {\n\n\"use strict\";\n\n\nvar GetIntrinsic = __nested_webpack_require_947643__(210);\n\nvar callBind = __nested_webpack_require_947643__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n\n\n/***/ }),\n\n/***/ 5559:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_948168__) {\n\n\"use strict\";\n\n\nvar bind = __nested_webpack_require_948168__(8612);\nvar GetIntrinsic = __nested_webpack_require_948168__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n\n\n/***/ }),\n\n/***/ 6313:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_949575__) {\n\n/* provided dependency */ var Buffer = __nested_webpack_require_949575__(8823)[\"Buffer\"];\nvar clone = (function() {\n'use strict';\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n*/\nfunction clone(parent, circular, depth, prototype) {\n var filter;\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n filter = circular.filter;\n circular = circular.circular\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth == 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n};\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n};\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n};\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n};\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n};\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif ( true && module.exports) {\n module.exports = clone;\n}\n\n\n/***/ }),\n\n/***/ 4667:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_954118__) {\n\n__nested_webpack_require_954118__(2479);\nvar path = __nested_webpack_require_954118__(857);\n\nmodule.exports = path.Object.values;\n\n\n/***/ }),\n\n/***/ 7633:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_954319__) {\n\n__nested_webpack_require_954319__(9170);\n__nested_webpack_require_954319__(6992);\n__nested_webpack_require_954319__(1539);\n__nested_webpack_require_954319__(8674);\n__nested_webpack_require_954319__(7922);\n__nested_webpack_require_954319__(4668);\n__nested_webpack_require_954319__(7727);\n__nested_webpack_require_954319__(8783);\nvar path = __nested_webpack_require_954319__(857);\n\nmodule.exports = path.Promise;\n\n\n/***/ }),\n\n/***/ 3867:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_954703__) {\n\nvar parent = __nested_webpack_require_954703__(1150);\n__nested_webpack_require_954703__(8628);\n// TODO: Remove from `core-js@4`\n__nested_webpack_require_954703__(7314);\n__nested_webpack_require_954703__(7479);\n__nested_webpack_require_954703__(6290);\n\nmodule.exports = parent;\n\n\n/***/ }),\n\n/***/ 9662:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_955009__) {\n\nvar global = __nested_webpack_require_955009__(7854);\nvar isCallable = __nested_webpack_require_955009__(614);\nvar tryToString = __nested_webpack_require_955009__(6330);\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n\n\n/***/ }),\n\n/***/ 9483:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_955466__) {\n\nvar global = __nested_webpack_require_955466__(7854);\nvar isConstructor = __nested_webpack_require_955466__(4411);\nvar tryToString = __nested_webpack_require_955466__(6330);\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n\n\n/***/ }),\n\n/***/ 6077:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_955936__) {\n\nvar global = __nested_webpack_require_955936__(7854);\nvar isCallable = __nested_webpack_require_955936__(614);\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n\n\n/***/ }),\n\n/***/ 1223:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_956372__) {\n\nvar wellKnownSymbol = __nested_webpack_require_956372__(5112);\nvar create = __nested_webpack_require_956372__(30);\nvar definePropertyModule = __nested_webpack_require_956372__(3070);\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n\n/***/ 1530:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_957086__) {\n\n\"use strict\";\n\nvar charAt = (__nested_webpack_require_957086__(8710).charAt);\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n\n\n/***/ }),\n\n/***/ 5787:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_957453__) {\n\nvar global = __nested_webpack_require_957453__(7854);\nvar isPrototypeOf = __nested_webpack_require_957453__(7976);\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n\n\n/***/ }),\n\n/***/ 9670:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_957812__) {\n\nvar global = __nested_webpack_require_957812__(7854);\nvar isObject = __nested_webpack_require_957812__(111);\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n\n\n/***/ }),\n\n/***/ 1048:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_958238__) {\n\n\"use strict\";\n\nvar toObject = __nested_webpack_require_958238__(7908);\nvar toAbsoluteIndex = __nested_webpack_require_958238__(1400);\nvar lengthOfArrayLike = __nested_webpack_require_958238__(6244);\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n// eslint-disable-next-line es/no-array-prototype-copywithin -- safe\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n\n\n/***/ }),\n\n/***/ 1285:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_959348__) {\n\n\"use strict\";\n\nvar toObject = __nested_webpack_require_959348__(7908);\nvar toAbsoluteIndex = __nested_webpack_require_959348__(1400);\nvar lengthOfArrayLike = __nested_webpack_require_959348__(6244);\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = lengthOfArrayLike(O);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n\n\n/***/ }),\n\n/***/ 8533:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_960165__) {\n\n\"use strict\";\n\nvar $forEach = (__nested_webpack_require_960165__(2092).forEach);\nvar arrayMethodIsStrict = __nested_webpack_require_960165__(9341);\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n\n\n/***/ }),\n\n/***/ 7745:\n/***/ (function(module) {\n\nmodule.exports = function (Constructor, list) {\n var index = 0;\n var length = list.length;\n var result = new Constructor(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\n\n/***/ }),\n\n/***/ 8457:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_961055__) {\n\n\"use strict\";\n\nvar global = __nested_webpack_require_961055__(7854);\nvar bind = __nested_webpack_require_961055__(9974);\nvar call = __nested_webpack_require_961055__(6916);\nvar toObject = __nested_webpack_require_961055__(7908);\nvar callWithSafeIterationClosing = __nested_webpack_require_961055__(3411);\nvar isArrayIteratorMethod = __nested_webpack_require_961055__(7659);\nvar isConstructor = __nested_webpack_require_961055__(4411);\nvar lengthOfArrayLike = __nested_webpack_require_961055__(6244);\nvar createProperty = __nested_webpack_require_961055__(6135);\nvar getIterator = __nested_webpack_require_961055__(8554);\nvar getIteratorMethod = __nested_webpack_require_961055__(1246);\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n\n\n/***/ }),\n\n/***/ 1318:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_963126__) {\n\nvar toIndexedObject = __nested_webpack_require_963126__(5656);\nvar toAbsoluteIndex = __nested_webpack_require_963126__(1400);\nvar lengthOfArrayLike = __nested_webpack_require_963126__(6244);\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 2092:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_964491__) {\n\nvar bind = __nested_webpack_require_964491__(9974);\nvar uncurryThis = __nested_webpack_require_964491__(1702);\nvar IndexedObject = __nested_webpack_require_964491__(8361);\nvar toObject = __nested_webpack_require_964491__(7908);\nvar lengthOfArrayLike = __nested_webpack_require_964491__(6244);\nvar arraySpeciesCreate = __nested_webpack_require_964491__(5417);\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n\n\n/***/ }),\n\n/***/ 6583:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_967400__) {\n\n\"use strict\";\n\n/* eslint-disable es/no-array-prototype-lastindexof -- safe */\nvar apply = __nested_webpack_require_967400__(2104);\nvar toIndexedObject = __nested_webpack_require_967400__(5656);\nvar toIntegerOrInfinity = __nested_webpack_require_967400__(9303);\nvar lengthOfArrayLike = __nested_webpack_require_967400__(6244);\nvar arrayMethodIsStrict = __nested_webpack_require_967400__(9341);\n\nvar min = Math.min;\nvar $lastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var index = length - 1;\n if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n return -1;\n} : $lastIndexOf;\n\n\n/***/ }),\n\n/***/ 1194:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_968695__) {\n\nvar fails = __nested_webpack_require_968695__(7293);\nvar wellKnownSymbol = __nested_webpack_require_968695__(5112);\nvar V8_VERSION = __nested_webpack_require_968695__(7392);\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n\n\n/***/ }),\n\n/***/ 9341:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_969431__) {\n\n\"use strict\";\n\nvar fails = __nested_webpack_require_969431__(7293);\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n\n\n/***/ }),\n\n/***/ 3671:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_969872__) {\n\nvar global = __nested_webpack_require_969872__(7854);\nvar aCallable = __nested_webpack_require_969872__(9662);\nvar toObject = __nested_webpack_require_969872__(7908);\nvar IndexedObject = __nested_webpack_require_969872__(8361);\nvar lengthOfArrayLike = __nested_webpack_require_969872__(6244);\n\nvar TypeError = global.TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aCallable(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = lengthOfArrayLike(O);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 206:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_971345__) {\n\nvar uncurryThis = __nested_webpack_require_971345__(1702);\n\nmodule.exports = uncurryThis([].slice);\n\n\n/***/ }),\n\n/***/ 4362:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_971530__) {\n\nvar arraySlice = __nested_webpack_require_971530__(206);\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n\n\n/***/ }),\n\n/***/ 7475:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_972800__) {\n\nvar global = __nested_webpack_require_972800__(7854);\nvar isArray = __nested_webpack_require_972800__(3157);\nvar isConstructor = __nested_webpack_require_972800__(4411);\nvar isObject = __nested_webpack_require_972800__(111);\nvar wellKnownSymbol = __nested_webpack_require_972800__(5112);\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n\n/***/ }),\n\n/***/ 5417:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_973657__) {\n\nvar arraySpeciesConstructor = __nested_webpack_require_973657__(7475);\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n\n\n/***/ }),\n\n/***/ 3411:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_974045__) {\n\nvar anObject = __nested_webpack_require_974045__(9670);\nvar iteratorClose = __nested_webpack_require_974045__(9212);\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n\n\n/***/ }),\n\n/***/ 7072:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_974502__) {\n\nvar wellKnownSymbol = __nested_webpack_require_974502__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n\n\n/***/ }),\n\n/***/ 4326:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_975563__) {\n\nvar uncurryThis = __nested_webpack_require_975563__(1702);\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n\n\n/***/ }),\n\n/***/ 648:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_975869__) {\n\nvar global = __nested_webpack_require_975869__(7854);\nvar TO_STRING_TAG_SUPPORT = __nested_webpack_require_975869__(1694);\nvar isCallable = __nested_webpack_require_975869__(614);\nvar classofRaw = __nested_webpack_require_975869__(4326);\nvar wellKnownSymbol = __nested_webpack_require_975869__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n\n\n/***/ }),\n\n/***/ 7741:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_977034__) {\n\nvar uncurryThis = __nested_webpack_require_977034__(1702);\nvar arraySlice = __nested_webpack_require_977034__(206);\n\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar join = uncurryThis([].join);\n\nvar TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\nvar IS_FIREFOX_OR_SAFARI_STACK = /@[^\\n]*\\n/.test(TEST) && !/zxcasd/.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n if (typeof stack != 'string') return stack;\n if (IS_V8_OR_CHAKRA_STACK) {\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } else if (IS_FIREFOX_OR_SAFARI_STACK) {\n return join(arraySlice(split(stack, '\\n'), dropEntries), '\\n');\n } return stack;\n};\n\n\n/***/ }),\n\n/***/ 5631:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_977946__) {\n\n\"use strict\";\n\nvar defineProperty = (__nested_webpack_require_977946__(3070).f);\nvar create = __nested_webpack_require_977946__(30);\nvar redefineAll = __nested_webpack_require_977946__(2248);\nvar bind = __nested_webpack_require_977946__(9974);\nvar anInstance = __nested_webpack_require_977946__(5787);\nvar iterate = __nested_webpack_require_977946__(408);\nvar defineIterator = __nested_webpack_require_977946__(654);\nvar setSpecies = __nested_webpack_require_977946__(6340);\nvar DESCRIPTORS = __nested_webpack_require_977946__(9781);\nvar fastKey = (__nested_webpack_require_977946__(2423).fastKey);\nvar InternalStateModule = __nested_webpack_require_977946__(9909);\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n\n\n/***/ }),\n\n/***/ 7710:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_985709__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_985709__(2109);\nvar global = __nested_webpack_require_985709__(7854);\nvar uncurryThis = __nested_webpack_require_985709__(1702);\nvar isForced = __nested_webpack_require_985709__(4705);\nvar redefine = __nested_webpack_require_985709__(1320);\nvar InternalMetadataModule = __nested_webpack_require_985709__(2423);\nvar iterate = __nested_webpack_require_985709__(408);\nvar anInstance = __nested_webpack_require_985709__(5787);\nvar isCallable = __nested_webpack_require_985709__(614);\nvar isObject = __nested_webpack_require_985709__(111);\nvar fails = __nested_webpack_require_985709__(7293);\nvar checkCorrectnessOfIteration = __nested_webpack_require_985709__(7072);\nvar setToStringTag = __nested_webpack_require_985709__(8003);\nvar inheritIfRequired = __nested_webpack_require_985709__(9587);\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n\n\n/***/ }),\n\n/***/ 9920:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_990111__) {\n\nvar hasOwn = __nested_webpack_require_990111__(2597);\nvar ownKeys = __nested_webpack_require_990111__(3887);\nvar getOwnPropertyDescriptorModule = __nested_webpack_require_990111__(1236);\nvar definePropertyModule = __nested_webpack_require_990111__(3070);\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n\n\n/***/ }),\n\n/***/ 4964:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_990769__) {\n\nvar wellKnownSymbol = __nested_webpack_require_990769__(5112);\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n\n\n/***/ }),\n\n/***/ 8544:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_991218__) {\n\nvar fails = __nested_webpack_require_991218__(7293);\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\n\n/***/ }),\n\n/***/ 4230:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_991603__) {\n\nvar uncurryThis = __nested_webpack_require_991603__(1702);\nvar requireObjectCoercible = __nested_webpack_require_991603__(4488);\nvar toString = __nested_webpack_require_991603__(1340);\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n var S = toString(requireObjectCoercible(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '"') + '\"';\n return p1 + '>' + S + '</' + tag + '>';\n};\n\n\n/***/ }),\n\n/***/ 4994:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_992263__) {\n\n\"use strict\";\n\nvar IteratorPrototype = (__nested_webpack_require_992263__(3383).IteratorPrototype);\nvar create = __nested_webpack_require_992263__(30);\nvar createPropertyDescriptor = __nested_webpack_require_992263__(9114);\nvar setToStringTag = __nested_webpack_require_992263__(8003);\nvar Iterators = __nested_webpack_require_992263__(7497);\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n\n\n/***/ }),\n\n/***/ 8880:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_993035__) {\n\nvar DESCRIPTORS = __nested_webpack_require_993035__(9781);\nvar definePropertyModule = __nested_webpack_require_993035__(3070);\nvar createPropertyDescriptor = __nested_webpack_require_993035__(9114);\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n/***/ }),\n\n/***/ 9114:\n/***/ (function(module) {\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n/***/ }),\n\n/***/ 6135:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_993741__) {\n\n\"use strict\";\n\nvar toPropertyKey = __nested_webpack_require_993741__(4948);\nvar definePropertyModule = __nested_webpack_require_993741__(3070);\nvar createPropertyDescriptor = __nested_webpack_require_993741__(9114);\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n\n\n/***/ }),\n\n/***/ 8709:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_994253__) {\n\n\"use strict\";\n\nvar global = __nested_webpack_require_994253__(7854);\nvar anObject = __nested_webpack_require_994253__(9670);\nvar ordinaryToPrimitive = __nested_webpack_require_994253__(2140);\n\nvar TypeError = global.TypeError;\n\n// `Date.prototype[@@toPrimitive](hint)` method implementation\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nmodule.exports = function (hint) {\n anObject(this);\n if (hint === 'string' || hint === 'default') hint = 'string';\n else if (hint !== 'number') throw TypeError('Incorrect hint');\n return ordinaryToPrimitive(this, hint);\n};\n\n\n/***/ }),\n\n/***/ 654:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_994888__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_994888__(2109);\nvar call = __nested_webpack_require_994888__(6916);\nvar IS_PURE = __nested_webpack_require_994888__(1913);\nvar FunctionName = __nested_webpack_require_994888__(6530);\nvar isCallable = __nested_webpack_require_994888__(614);\nvar createIteratorConstructor = __nested_webpack_require_994888__(4994);\nvar getPrototypeOf = __nested_webpack_require_994888__(9518);\nvar setPrototypeOf = __nested_webpack_require_994888__(7674);\nvar setToStringTag = __nested_webpack_require_994888__(8003);\nvar createNonEnumerableProperty = __nested_webpack_require_994888__(8880);\nvar redefine = __nested_webpack_require_994888__(1320);\nvar wellKnownSymbol = __nested_webpack_require_994888__(5112);\nvar Iterators = __nested_webpack_require_994888__(7497);\nvar IteratorsCore = __nested_webpack_require_994888__(3383);\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n\n\n/***/ }),\n\n/***/ 7235:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_999255__) {\n\nvar path = __nested_webpack_require_999255__(857);\nvar hasOwn = __nested_webpack_require_999255__(2597);\nvar wrappedWellKnownSymbolModule = __nested_webpack_require_999255__(6061);\nvar defineProperty = (__nested_webpack_require_999255__(3070).f);\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n\n\n/***/ }),\n\n/***/ 9781:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_999748__) {\n\nvar fails = __nested_webpack_require_999748__(7293);\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ 317:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1000150__) {\n\nvar global = __nested_webpack_require_1000150__(7854);\nvar isObject = __nested_webpack_require_1000150__(111);\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ 8324:\n/***/ (function(module) {\n\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n\n\n/***/ }),\n\n/***/ 8509:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1001380__) {\n\n// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = __nested_webpack_require_1001380__(317);\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n\n\n/***/ }),\n\n/***/ 8886:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1001879__) {\n\nvar userAgent = __nested_webpack_require_1001879__(8113);\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n\n\n/***/ }),\n\n/***/ 7871:\n/***/ (function(module) {\n\nmodule.exports = typeof window == 'object';\n\n\n/***/ }),\n\n/***/ 256:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1002211__) {\n\nvar UA = __nested_webpack_require_1002211__(8113);\n\nmodule.exports = /MSIE|Trident/.test(UA);\n\n\n/***/ }),\n\n/***/ 1528:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1002389__) {\n\nvar userAgent = __nested_webpack_require_1002389__(8113);\nvar global = __nested_webpack_require_1002389__(7854);\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n\n\n/***/ }),\n\n/***/ 6833:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1002657__) {\n\nvar userAgent = __nested_webpack_require_1002657__(8113);\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n\n\n/***/ }),\n\n/***/ 5268:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1002871__) {\n\nvar classof = __nested_webpack_require_1002871__(4326);\nvar global = __nested_webpack_require_1002871__(7854);\n\nmodule.exports = classof(global.process) == 'process';\n\n\n/***/ }),\n\n/***/ 1036:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1003107__) {\n\nvar userAgent = __nested_webpack_require_1003107__(8113);\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n\n\n/***/ }),\n\n/***/ 8113:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1003305__) {\n\nvar getBuiltIn = __nested_webpack_require_1003305__(5005);\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n\n/***/ }),\n\n/***/ 7392:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1003510__) {\n\nvar global = __nested_webpack_require_1003510__(7854);\nvar userAgent = __nested_webpack_require_1003510__(8113);\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n\n\n/***/ }),\n\n/***/ 8008:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1004438__) {\n\nvar userAgent = __nested_webpack_require_1004438__(8113);\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n\n\n/***/ }),\n\n/***/ 748:\n/***/ (function(module) {\n\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n\n\n/***/ }),\n\n/***/ 2914:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1004906__) {\n\nvar fails = __nested_webpack_require_1004906__(7293);\nvar createPropertyDescriptor = __nested_webpack_require_1004906__(9114);\n\nmodule.exports = !fails(function () {\n var error = Error('a');\n if (!('stack' in error)) return true;\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n\n\n/***/ }),\n\n/***/ 2109:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1005378__) {\n\nvar global = __nested_webpack_require_1005378__(7854);\nvar getOwnPropertyDescriptor = (__nested_webpack_require_1005378__(1236).f);\nvar createNonEnumerableProperty = __nested_webpack_require_1005378__(8880);\nvar redefine = __nested_webpack_require_1005378__(1320);\nvar setGlobal = __nested_webpack_require_1005378__(3505);\nvar copyConstructorProperties = __nested_webpack_require_1005378__(9920);\nvar isForced = __nested_webpack_require_1005378__(4705);\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n\n\n/***/ }),\n\n/***/ 7293:\n/***/ (function(module) {\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n\n\n/***/ }),\n\n/***/ 7007:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1008119__) {\n\n\"use strict\";\n\n// TODO: Remove from `core-js@4` since it's moved to entry points\n__nested_webpack_require_1008119__(4916);\nvar uncurryThis = __nested_webpack_require_1008119__(1702);\nvar redefine = __nested_webpack_require_1008119__(1320);\nvar regexpExec = __nested_webpack_require_1008119__(2261);\nvar fails = __nested_webpack_require_1008119__(7293);\nvar wellKnownSymbol = __nested_webpack_require_1008119__(5112);\nvar createNonEnumerableProperty = __nested_webpack_require_1008119__(8880);\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var uncurriedNativeMethod = uncurryThis(nativeMethod);\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n }\n return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n }\n return { done: false };\n });\n\n redefine(String.prototype, KEY, methods[0]);\n redefine(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n\n\n/***/ }),\n\n/***/ 6677:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1010875__) {\n\nvar fails = __nested_webpack_require_1010875__(7293);\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n\n\n/***/ }),\n\n/***/ 2104:\n/***/ (function(module) {\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n\n\n/***/ }),\n\n/***/ 9974:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1011630__) {\n\nvar uncurryThis = __nested_webpack_require_1011630__(1702);\nvar aCallable = __nested_webpack_require_1011630__(9662);\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n/***/ }),\n\n/***/ 7065:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1012086__) {\n\n\"use strict\";\n\nvar global = __nested_webpack_require_1012086__(7854);\nvar uncurryThis = __nested_webpack_require_1012086__(1702);\nvar aCallable = __nested_webpack_require_1012086__(9662);\nvar isObject = __nested_webpack_require_1012086__(111);\nvar hasOwn = __nested_webpack_require_1012086__(2597);\nvar arraySlice = __nested_webpack_require_1012086__(206);\n\nvar Function = global.Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!hasOwn(factories, argsLength)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n factories[argsLength] = Function('C,a', 'return new C(' + join(list, ',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var F = aCallable(this);\n var Prototype = F.prototype;\n var partArgs = arraySlice(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = concat(partArgs, arraySlice(arguments));\n return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n };\n if (isObject(Prototype)) boundFunction.prototype = Prototype;\n return boundFunction;\n};\n\n\n/***/ }),\n\n/***/ 6916:\n/***/ (function(module) {\n\nvar call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n\n\n/***/ }),\n\n/***/ 6530:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1013651__) {\n\nvar DESCRIPTORS = __nested_webpack_require_1013651__(9781);\nvar hasOwn = __nested_webpack_require_1013651__(2597);\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n\n\n/***/ }),\n\n/***/ 1702:\n/***/ (function(module) {\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n\n\n/***/ }),\n\n/***/ 5005:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1014813__) {\n\nvar global = __nested_webpack_require_1014813__(7854);\nvar isCallable = __nested_webpack_require_1014813__(614);\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n\n\n/***/ }),\n\n/***/ 1246:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1015254__) {\n\nvar classof = __nested_webpack_require_1015254__(648);\nvar getMethod = __nested_webpack_require_1015254__(8173);\nvar Iterators = __nested_webpack_require_1015254__(7497);\nvar wellKnownSymbol = __nested_webpack_require_1015254__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n\n\n/***/ }),\n\n/***/ 8554:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1015730__) {\n\nvar global = __nested_webpack_require_1015730__(7854);\nvar call = __nested_webpack_require_1015730__(6916);\nvar aCallable = __nested_webpack_require_1015730__(9662);\nvar anObject = __nested_webpack_require_1015730__(9670);\nvar tryToString = __nested_webpack_require_1015730__(6330);\nvar getIteratorMethod = __nested_webpack_require_1015730__(1246);\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n\n\n/***/ }),\n\n/***/ 8173:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1016417__) {\n\nvar aCallable = __nested_webpack_require_1016417__(9662);\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n\n\n/***/ }),\n\n/***/ 647:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1016745__) {\n\nvar uncurryThis = __nested_webpack_require_1016745__(1702);\nvar toObject = __nested_webpack_require_1016745__(7908);\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n\n\n/***/ }),\n\n/***/ 7854:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1018383__) {\n\nvar check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof __nested_webpack_require_1018383__.g == 'object' && __nested_webpack_require_1018383__.g) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n\n\n/***/ }),\n\n/***/ 2597:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1019102__) {\n\nvar uncurryThis = __nested_webpack_require_1019102__(1702);\nvar toObject = __nested_webpack_require_1019102__(7908);\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n\n\n/***/ }),\n\n/***/ 3501:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 842:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1019609__) {\n\nvar global = __nested_webpack_require_1019609__(7854);\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length == 1 ? console.error(a) : console.error(a, b);\n }\n};\n\n\n/***/ }),\n\n/***/ 490:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1019924__) {\n\nvar getBuiltIn = __nested_webpack_require_1019924__(5005);\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n\n\n/***/ }),\n\n/***/ 4664:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1020128__) {\n\nvar DESCRIPTORS = __nested_webpack_require_1020128__(9781);\nvar fails = __nested_webpack_require_1020128__(7293);\nvar createElement = __nested_webpack_require_1020128__(317);\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ 1179:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1020649__) {\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar global = __nested_webpack_require_1020649__(7854);\n\nvar Array = global.Array;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n var buffer = Array(bytes);\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n var index = 0;\n var exponent, mantissa, c;\n number = abs(number);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number || number === Infinity) {\n // eslint-disable-next-line no-self-compare -- NaN check\n mantissa = number != number ? 1 : 0;\n exponent = eMax;\n } else {\n exponent = floor(log(number) / LN2);\n if (number * (c = pow(2, -exponent)) < 1) {\n exponent--;\n c *= 2;\n }\n if (exponent + eBias >= 1) {\n number += rt / c;\n } else {\n number += rt * pow(2, 1 - eBias);\n }\n if (number * c >= 2) {\n exponent++;\n c /= 2;\n }\n if (exponent + eBias >= eMax) {\n mantissa = 0;\n exponent = eMax;\n } else if (exponent + eBias >= 1) {\n mantissa = (number * c - 1) * pow(2, mantissaLength);\n exponent = exponent + eBias;\n } else {\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n exponent = 0;\n }\n }\n for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n exponent = exponent << mantissaLength | mantissa;\n exponentLength += mantissaLength;\n for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n buffer[--index] |= sign * 128;\n return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n var bytes = buffer.length;\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var nBits = exponentLength - 7;\n var index = bytes - 1;\n var sign = buffer[index--];\n var exponent = sign & 127;\n var mantissa;\n sign >>= 7;\n for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n mantissa = exponent & (1 << -nBits) - 1;\n exponent >>= -nBits;\n nBits += mantissaLength;\n for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n if (exponent === 0) {\n exponent = 1 - eBias;\n } else if (exponent === eMax) {\n return mantissa ? NaN : sign ? -Infinity : Infinity;\n } else {\n mantissa = mantissa + pow(2, mantissaLength);\n exponent = exponent - eBias;\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n pack: pack,\n unpack: unpack\n};\n\n\n/***/ }),\n\n/***/ 8361:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1023592__) {\n\nvar global = __nested_webpack_require_1023592__(7854);\nvar uncurryThis = __nested_webpack_require_1023592__(1702);\nvar fails = __nested_webpack_require_1023592__(7293);\nvar classof = __nested_webpack_require_1023592__(4326);\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n\n\n/***/ }),\n\n/***/ 9587:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1024309__) {\n\nvar isCallable = __nested_webpack_require_1024309__(614);\nvar isObject = __nested_webpack_require_1024309__(111);\nvar setPrototypeOf = __nested_webpack_require_1024309__(7674);\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n\n\n/***/ }),\n\n/***/ 2788:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1025102__) {\n\nvar uncurryThis = __nested_webpack_require_1025102__(1702);\nvar isCallable = __nested_webpack_require_1025102__(614);\nvar store = __nested_webpack_require_1025102__(5465);\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n\n\n/***/ }),\n\n/***/ 8340:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1025624__) {\n\nvar isObject = __nested_webpack_require_1025624__(111);\nvar createNonEnumerableProperty = __nested_webpack_require_1025624__(8880);\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n if (isObject(options) && 'cause' in options) {\n createNonEnumerableProperty(O, 'cause', options.cause);\n }\n};\n\n\n/***/ }),\n\n/***/ 2423:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1026103__) {\n\nvar $ = __nested_webpack_require_1026103__(2109);\nvar uncurryThis = __nested_webpack_require_1026103__(1702);\nvar hiddenKeys = __nested_webpack_require_1026103__(3501);\nvar isObject = __nested_webpack_require_1026103__(111);\nvar hasOwn = __nested_webpack_require_1026103__(2597);\nvar defineProperty = (__nested_webpack_require_1026103__(3070).f);\nvar getOwnPropertyNamesModule = __nested_webpack_require_1026103__(8006);\nvar getOwnPropertyNamesExternalModule = __nested_webpack_require_1026103__(1156);\nvar uid = __nested_webpack_require_1026103__(9711);\nvar FREEZING = __nested_webpack_require_1026103__(6677);\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n\n\n/***/ }),\n\n/***/ 9909:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1028944__) {\n\nvar NATIVE_WEAK_MAP = __nested_webpack_require_1028944__(8536);\nvar global = __nested_webpack_require_1028944__(7854);\nvar uncurryThis = __nested_webpack_require_1028944__(1702);\nvar isObject = __nested_webpack_require_1028944__(111);\nvar createNonEnumerableProperty = __nested_webpack_require_1028944__(8880);\nvar hasOwn = __nested_webpack_require_1028944__(2597);\nvar shared = __nested_webpack_require_1028944__(5465);\nvar sharedKey = __nested_webpack_require_1028944__(6200);\nvar hiddenKeys = __nested_webpack_require_1028944__(3501);\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ 7659:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1030960__) {\n\nvar wellKnownSymbol = __nested_webpack_require_1030960__(5112);\nvar Iterators = __nested_webpack_require_1030960__(7497);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n\n\n/***/ }),\n\n/***/ 3157:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1031396__) {\n\nvar classof = __nested_webpack_require_1031396__(4326);\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n\n\n/***/ }),\n\n/***/ 614:\n/***/ (function(module) {\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n\n\n/***/ }),\n\n/***/ 4411:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1031981__) {\n\nvar uncurryThis = __nested_webpack_require_1031981__(1702);\nvar fails = __nested_webpack_require_1031981__(7293);\nvar isCallable = __nested_webpack_require_1031981__(614);\nvar classof = __nested_webpack_require_1031981__(648);\nvar getBuiltIn = __nested_webpack_require_1031981__(5005);\nvar inspectSource = __nested_webpack_require_1031981__(2788);\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n // we can't check .prototype since constructors produced by .bind haven't it\n } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n\n\n/***/ }),\n\n/***/ 4705:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1033566__) {\n\nvar fails = __nested_webpack_require_1033566__(7293);\nvar isCallable = __nested_webpack_require_1033566__(614);\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ }),\n\n/***/ 5988:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1034268__) {\n\nvar isObject = __nested_webpack_require_1034268__(111);\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n/***/ }),\n\n/***/ 111:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1034707__) {\n\nvar isCallable = __nested_webpack_require_1034707__(614);\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n\n\n/***/ }),\n\n/***/ 1913:\n/***/ (function(module) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ 7850:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1035025__) {\n\nvar isObject = __nested_webpack_require_1035025__(111);\nvar classof = __nested_webpack_require_1035025__(4326);\nvar wellKnownSymbol = __nested_webpack_require_1035025__(5112);\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n\n\n/***/ }),\n\n/***/ 2190:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1035525__) {\n\nvar global = __nested_webpack_require_1035525__(7854);\nvar getBuiltIn = __nested_webpack_require_1035525__(5005);\nvar isCallable = __nested_webpack_require_1035525__(614);\nvar isPrototypeOf = __nested_webpack_require_1035525__(7976);\nvar USE_SYMBOL_AS_UID = __nested_webpack_require_1035525__(3307);\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n\n\n/***/ }),\n\n/***/ 408:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1036102__) {\n\nvar global = __nested_webpack_require_1036102__(7854);\nvar bind = __nested_webpack_require_1036102__(9974);\nvar call = __nested_webpack_require_1036102__(6916);\nvar anObject = __nested_webpack_require_1036102__(9670);\nvar tryToString = __nested_webpack_require_1036102__(6330);\nvar isArrayIteratorMethod = __nested_webpack_require_1036102__(7659);\nvar lengthOfArrayLike = __nested_webpack_require_1036102__(6244);\nvar isPrototypeOf = __nested_webpack_require_1036102__(7976);\nvar getIterator = __nested_webpack_require_1036102__(8554);\nvar getIteratorMethod = __nested_webpack_require_1036102__(1246);\nvar iteratorClose = __nested_webpack_require_1036102__(9212);\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n\n\n/***/ }),\n\n/***/ 9212:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1038493__) {\n\nvar call = __nested_webpack_require_1038493__(6916);\nvar anObject = __nested_webpack_require_1038493__(9670);\nvar getMethod = __nested_webpack_require_1038493__(8173);\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n\n\n/***/ }),\n\n/***/ 3383:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1039206__) {\n\n\"use strict\";\n\nvar fails = __nested_webpack_require_1039206__(7293);\nvar isCallable = __nested_webpack_require_1039206__(614);\nvar create = __nested_webpack_require_1039206__(30);\nvar getPrototypeOf = __nested_webpack_require_1039206__(9518);\nvar redefine = __nested_webpack_require_1039206__(1320);\nvar wellKnownSymbol = __nested_webpack_require_1039206__(5112);\nvar IS_PURE = __nested_webpack_require_1039206__(1913);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n\n\n/***/ }),\n\n/***/ 7497:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 6244:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1041034__) {\n\nvar toLength = __nested_webpack_require_1041034__(7466);\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n\n\n/***/ }),\n\n/***/ 5948:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1041336__) {\n\nvar global = __nested_webpack_require_1041336__(7854);\nvar bind = __nested_webpack_require_1041336__(9974);\nvar getOwnPropertyDescriptor = (__nested_webpack_require_1041336__(1236).f);\nvar macrotask = (__nested_webpack_require_1041336__(261).set);\nvar IS_IOS = __nested_webpack_require_1041336__(6833);\nvar IS_IOS_PEBBLE = __nested_webpack_require_1041336__(1528);\nvar IS_WEBOS_WEBKIT = __nested_webpack_require_1041336__(1036);\nvar IS_NODE = __nested_webpack_require_1041336__(5268);\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n // strange IE + webpack dev server bug - use .bind(global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n\n\n/***/ }),\n\n/***/ 3366:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1044237__) {\n\nvar global = __nested_webpack_require_1044237__(7854);\n\nmodule.exports = global.Promise;\n\n\n/***/ }),\n\n/***/ 133:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1044409__) {\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = __nested_webpack_require_1044409__(7392);\nvar fails = __nested_webpack_require_1044409__(7293);\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n\n\n/***/ }),\n\n/***/ 8536:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1045197__) {\n\nvar global = __nested_webpack_require_1045197__(7854);\nvar isCallable = __nested_webpack_require_1045197__(614);\nvar inspectSource = __nested_webpack_require_1045197__(2788);\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n\n\n/***/ }),\n\n/***/ 8523:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1045542__) {\n\n\"use strict\";\n\nvar aCallable = __nested_webpack_require_1045542__(9662);\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n\n\n/***/ }),\n\n/***/ 6277:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1046217__) {\n\nvar toString = __nested_webpack_require_1046217__(1340);\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n\n\n/***/ }),\n\n/***/ 3929:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1046504__) {\n\nvar global = __nested_webpack_require_1046504__(7854);\nvar isRegExp = __nested_webpack_require_1046504__(7850);\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n\n\n/***/ }),\n\n/***/ 7023:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1046864__) {\n\nvar global = __nested_webpack_require_1046864__(7854);\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n return typeof it == 'number' && globalIsFinite(it);\n};\n\n\n/***/ }),\n\n/***/ 1574:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1047294__) {\n\n\"use strict\";\n\nvar DESCRIPTORS = __nested_webpack_require_1047294__(9781);\nvar uncurryThis = __nested_webpack_require_1047294__(1702);\nvar call = __nested_webpack_require_1047294__(6916);\nvar fails = __nested_webpack_require_1047294__(7293);\nvar objectKeys = __nested_webpack_require_1047294__(1956);\nvar getOwnPropertySymbolsModule = __nested_webpack_require_1047294__(5181);\nvar propertyIsEnumerableModule = __nested_webpack_require_1047294__(5296);\nvar toObject = __nested_webpack_require_1047294__(7908);\nvar IndexedObject = __nested_webpack_require_1047294__(8361);\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1049617__) {\n\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = __nested_webpack_require_1049617__(9670);\nvar defineProperties = __nested_webpack_require_1049617__(6048);\nvar enumBugKeys = __nested_webpack_require_1049617__(748);\nvar hiddenKeys = __nested_webpack_require_1049617__(3501);\nvar html = __nested_webpack_require_1049617__(490);\nvar documentCreateElement = __nested_webpack_require_1049617__(317);\nvar sharedKey = __nested_webpack_require_1049617__(6200);\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n\n\n/***/ }),\n\n/***/ 6048:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1052627__) {\n\nvar DESCRIPTORS = __nested_webpack_require_1052627__(9781);\nvar definePropertyModule = __nested_webpack_require_1052627__(3070);\nvar anObject = __nested_webpack_require_1052627__(9670);\nvar toIndexedObject = __nested_webpack_require_1052627__(5656);\nvar objectKeys = __nested_webpack_require_1052627__(1956);\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n\n\n/***/ }),\n\n/***/ 3070:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1053470__) {\n\nvar global = __nested_webpack_require_1053470__(7854);\nvar DESCRIPTORS = __nested_webpack_require_1053470__(9781);\nvar IE8_DOM_DEFINE = __nested_webpack_require_1053470__(4664);\nvar anObject = __nested_webpack_require_1053470__(9670);\nvar toPropertyKey = __nested_webpack_require_1053470__(4948);\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n/***/ }),\n\n/***/ 1236:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1054446__) {\n\nvar DESCRIPTORS = __nested_webpack_require_1054446__(9781);\nvar call = __nested_webpack_require_1054446__(6916);\nvar propertyIsEnumerableModule = __nested_webpack_require_1054446__(5296);\nvar createPropertyDescriptor = __nested_webpack_require_1054446__(9114);\nvar toIndexedObject = __nested_webpack_require_1054446__(5656);\nvar toPropertyKey = __nested_webpack_require_1054446__(4948);\nvar hasOwn = __nested_webpack_require_1054446__(2597);\nvar IE8_DOM_DEFINE = __nested_webpack_require_1054446__(4664);\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ 1156:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1055536__) {\n\n/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = __nested_webpack_require_1055536__(4326);\nvar toIndexedObject = __nested_webpack_require_1055536__(5656);\nvar $getOwnPropertyNames = (__nested_webpack_require_1055536__(8006).f);\nvar arraySlice = __nested_webpack_require_1055536__(206);\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n\n\n/***/ }),\n\n/***/ 8006:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1056421__) {\n\nvar internalObjectKeys = __nested_webpack_require_1056421__(6324);\nvar enumBugKeys = __nested_webpack_require_1056421__(748);\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ 5181:\n/***/ (function(__unused_webpack_module, exports) {\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ 9518:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1057159__) {\n\nvar global = __nested_webpack_require_1057159__(7854);\nvar hasOwn = __nested_webpack_require_1057159__(2597);\nvar isCallable = __nested_webpack_require_1057159__(614);\nvar toObject = __nested_webpack_require_1057159__(7908);\nvar sharedKey = __nested_webpack_require_1057159__(6200);\nvar CORRECT_PROTOTYPE_GETTER = __nested_webpack_require_1057159__(8544);\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n\n\n/***/ }),\n\n/***/ 7976:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1058093__) {\n\nvar uncurryThis = __nested_webpack_require_1058093__(1702);\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n\n\n/***/ }),\n\n/***/ 6324:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1058286__) {\n\nvar uncurryThis = __nested_webpack_require_1058286__(1702);\nvar hasOwn = __nested_webpack_require_1058286__(2597);\nvar toIndexedObject = __nested_webpack_require_1058286__(5656);\nvar indexOf = (__nested_webpack_require_1058286__(1318).indexOf);\nvar hiddenKeys = __nested_webpack_require_1058286__(3501);\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n\n\n/***/ }),\n\n/***/ 1956:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1059021__) {\n\nvar internalObjectKeys = __nested_webpack_require_1059021__(6324);\nvar enumBugKeys = __nested_webpack_require_1059021__(748);\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ 5296:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ 7674:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1060159__) {\n\n/* eslint-disable no-proto -- safe */\nvar uncurryThis = __nested_webpack_require_1060159__(1702);\nvar anObject = __nested_webpack_require_1060159__(9670);\nvar aPossiblePrototype = __nested_webpack_require_1060159__(6077);\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n\n\n/***/ }),\n\n/***/ 4699:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1061281__) {\n\nvar DESCRIPTORS = __nested_webpack_require_1061281__(9781);\nvar uncurryThis = __nested_webpack_require_1061281__(1702);\nvar objectKeys = __nested_webpack_require_1061281__(1956);\nvar toIndexedObject = __nested_webpack_require_1061281__(5656);\nvar $propertyIsEnumerable = (__nested_webpack_require_1061281__(5296).f);\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 288:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1062428__) {\n\n\"use strict\";\n\nvar TO_STRING_TAG_SUPPORT = __nested_webpack_require_1062428__(1694);\nvar classof = __nested_webpack_require_1062428__(648);\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n\n\n/***/ }),\n\n/***/ 2140:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1062872__) {\n\nvar global = __nested_webpack_require_1062872__(7854);\nvar call = __nested_webpack_require_1062872__(6916);\nvar isCallable = __nested_webpack_require_1062872__(614);\nvar isObject = __nested_webpack_require_1062872__(111);\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ 3887:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1063689__) {\n\nvar getBuiltIn = __nested_webpack_require_1063689__(5005);\nvar uncurryThis = __nested_webpack_require_1063689__(1702);\nvar getOwnPropertyNamesModule = __nested_webpack_require_1063689__(8006);\nvar getOwnPropertySymbolsModule = __nested_webpack_require_1063689__(5181);\nvar anObject = __nested_webpack_require_1063689__(9670);\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ 857:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1064410__) {\n\nvar global = __nested_webpack_require_1064410__(7854);\n\nmodule.exports = global;\n\n\n/***/ }),\n\n/***/ 2534:\n/***/ (function(module) {\n\nmodule.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n\n\n/***/ }),\n\n/***/ 9478:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1064783__) {\n\nvar anObject = __nested_webpack_require_1064783__(9670);\nvar isObject = __nested_webpack_require_1064783__(111);\nvar newPromiseCapability = __nested_webpack_require_1064783__(8523);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\n\n/***/ }),\n\n/***/ 2248:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1065271__) {\n\nvar redefine = __nested_webpack_require_1065271__(1320);\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n\n\n/***/ }),\n\n/***/ 1320:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1065549__) {\n\nvar global = __nested_webpack_require_1065549__(7854);\nvar isCallable = __nested_webpack_require_1065549__(614);\nvar hasOwn = __nested_webpack_require_1065549__(2597);\nvar createNonEnumerableProperty = __nested_webpack_require_1065549__(8880);\nvar setGlobal = __nested_webpack_require_1065549__(3505);\nvar inspectSource = __nested_webpack_require_1065549__(2788);\nvar InternalStateModule = __nested_webpack_require_1065549__(9909);\nvar CONFIGURABLE_FUNCTION_NAME = (__nested_webpack_require_1065549__(6530).CONFIGURABLE);\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n\n\n/***/ }),\n\n/***/ 7651:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1067508__) {\n\nvar global = __nested_webpack_require_1067508__(7854);\nvar call = __nested_webpack_require_1067508__(6916);\nvar anObject = __nested_webpack_require_1067508__(9670);\nvar isCallable = __nested_webpack_require_1067508__(614);\nvar classof = __nested_webpack_require_1067508__(4326);\nvar regexpExec = __nested_webpack_require_1067508__(2261);\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw TypeError('RegExp#exec called on incompatible receiver');\n};\n\n\n/***/ }),\n\n/***/ 2261:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1068283__) {\n\n\"use strict\";\n\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = __nested_webpack_require_1068283__(6916);\nvar uncurryThis = __nested_webpack_require_1068283__(1702);\nvar toString = __nested_webpack_require_1068283__(1340);\nvar regexpFlags = __nested_webpack_require_1068283__(7066);\nvar stickyHelpers = __nested_webpack_require_1068283__(2999);\nvar shared = __nested_webpack_require_1068283__(2309);\nvar create = __nested_webpack_require_1068283__(30);\nvar getInternalState = (__nested_webpack_require_1068283__(9909).get);\nvar UNSUPPORTED_DOT_ALL = __nested_webpack_require_1068283__(9441);\nvar UNSUPPORTED_NCG = __nested_webpack_require_1068283__(7168);\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n // eslint-disable-next-line max-statements -- TODO\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n\n\n/***/ }),\n\n/***/ 7066:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1072354__) {\n\n\"use strict\";\n\nvar anObject = __nested_webpack_require_1072354__(9670);\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n\n\n/***/ }),\n\n/***/ 2999:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1072931__) {\n\nvar fails = __nested_webpack_require_1072931__(7293);\nvar global = __nested_webpack_require_1072931__(7854);\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nexports.UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n\n\n/***/ }),\n\n/***/ 9441:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1073561__) {\n\nvar fails = __nested_webpack_require_1073561__(7293);\nvar global = __nested_webpack_require_1073561__(7854);\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n\n\n/***/ }),\n\n/***/ 7168:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1074000__) {\n\nvar fails = __nested_webpack_require_1074000__(7293);\nvar global = __nested_webpack_require_1074000__(7854);\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n\n\n/***/ }),\n\n/***/ 4488:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1074478__) {\n\nvar global = __nested_webpack_require_1074478__(7854);\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n/***/ }),\n\n/***/ 3505:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1074874__) {\n\nvar global = __nested_webpack_require_1074874__(7854);\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n\n\n/***/ }),\n\n/***/ 6340:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1075325__) {\n\n\"use strict\";\n\nvar getBuiltIn = __nested_webpack_require_1075325__(5005);\nvar definePropertyModule = __nested_webpack_require_1075325__(3070);\nvar wellKnownSymbol = __nested_webpack_require_1075325__(5112);\nvar DESCRIPTORS = __nested_webpack_require_1075325__(9781);\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n\n\n/***/ }),\n\n/***/ 8003:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1076005__) {\n\nvar defineProperty = (__nested_webpack_require_1076005__(3070).f);\nvar hasOwn = __nested_webpack_require_1076005__(2597);\nvar wellKnownSymbol = __nested_webpack_require_1076005__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n\n\n/***/ }),\n\n/***/ 6200:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1076498__) {\n\nvar shared = __nested_webpack_require_1076498__(2309);\nvar uid = __nested_webpack_require_1076498__(9711);\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ 5465:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1076786__) {\n\nvar global = __nested_webpack_require_1076786__(7854);\nvar setGlobal = __nested_webpack_require_1076786__(3505);\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n\n\n/***/ }),\n\n/***/ 2309:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1077082__) {\n\nvar IS_PURE = __nested_webpack_require_1077082__(1913);\nvar store = __nested_webpack_require_1077082__(5465);\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ 6707:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1077516__) {\n\nvar anObject = __nested_webpack_require_1077516__(9670);\nvar aConstructor = __nested_webpack_require_1077516__(9483);\nvar wellKnownSymbol = __nested_webpack_require_1077516__(5112);\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n\n\n/***/ }),\n\n/***/ 3429:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1078097__) {\n\nvar fails = __nested_webpack_require_1078097__(7293);\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n var test = ''[METHOD_NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n });\n};\n\n\n/***/ }),\n\n/***/ 8710:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1078514__) {\n\nvar uncurryThis = __nested_webpack_require_1078514__(1702);\nvar toIntegerOrInfinity = __nested_webpack_require_1078514__(9303);\nvar toString = __nested_webpack_require_1078514__(1340);\nvar requireObjectCoercible = __nested_webpack_require_1078514__(4488);\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 8415:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1079942__) {\n\n\"use strict\";\n\nvar global = __nested_webpack_require_1079942__(7854);\nvar toIntegerOrInfinity = __nested_webpack_require_1079942__(9303);\nvar toString = __nested_webpack_require_1079942__(1340);\nvar requireObjectCoercible = __nested_webpack_require_1079942__(4488);\n\nvar RangeError = global.RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toIntegerOrInfinity(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n\n\n/***/ }),\n\n/***/ 6091:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1080711__) {\n\nvar PROPER_FUNCTION_NAME = (__nested_webpack_require_1080711__(6530).PROPER);\nvar fails = __nested_webpack_require_1080711__(7293);\nvar whitespaces = __nested_webpack_require_1080711__(1361);\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n\n\n/***/ }),\n\n/***/ 3111:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1081321__) {\n\nvar uncurryThis = __nested_webpack_require_1081321__(1702);\nvar requireObjectCoercible = __nested_webpack_require_1081321__(4488);\nvar toString = __nested_webpack_require_1081321__(1340);\nvar whitespaces = __nested_webpack_require_1081321__(1361);\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n\n\n/***/ }),\n\n/***/ 261:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1082574__) {\n\nvar global = __nested_webpack_require_1082574__(7854);\nvar apply = __nested_webpack_require_1082574__(2104);\nvar bind = __nested_webpack_require_1082574__(9974);\nvar isCallable = __nested_webpack_require_1082574__(614);\nvar hasOwn = __nested_webpack_require_1082574__(2597);\nvar fails = __nested_webpack_require_1082574__(7293);\nvar html = __nested_webpack_require_1082574__(490);\nvar arraySlice = __nested_webpack_require_1082574__(206);\nvar createElement = __nested_webpack_require_1082574__(317);\nvar IS_IOS = __nested_webpack_require_1082574__(6833);\nvar IS_NODE = __nested_webpack_require_1082574__(5268);\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(isCallable(fn) ? fn : Function(fn), undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n\n\n/***/ }),\n\n/***/ 863:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1085742__) {\n\nvar uncurryThis = __nested_webpack_require_1085742__(1702);\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n\n\n/***/ }),\n\n/***/ 1400:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1086018__) {\n\nvar toIntegerOrInfinity = __nested_webpack_require_1086018__(9303);\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ 7067:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1086567__) {\n\nvar global = __nested_webpack_require_1086567__(7854);\nvar toIntegerOrInfinity = __nested_webpack_require_1086567__(9303);\nvar toLength = __nested_webpack_require_1086567__(7466);\n\nvar RangeError = global.RangeError;\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toIntegerOrInfinity(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length or index');\n return length;\n};\n\n\n/***/ }),\n\n/***/ 5656:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1087139__) {\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __nested_webpack_require_1087139__(8361);\nvar requireObjectCoercible = __nested_webpack_require_1087139__(4488);\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ 9303:\n/***/ (function(module) {\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n\n\n/***/ }),\n\n/***/ 7466:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1087890__) {\n\nvar toIntegerOrInfinity = __nested_webpack_require_1087890__(9303);\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ 7908:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1088297__) {\n\nvar global = __nested_webpack_require_1088297__(7854);\nvar requireObjectCoercible = __nested_webpack_require_1088297__(4488);\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ 4590:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1088689__) {\n\nvar global = __nested_webpack_require_1088689__(7854);\nvar toPositiveInteger = __nested_webpack_require_1088689__(3002);\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw RangeError('Wrong offset');\n return offset;\n};\n\n\n/***/ }),\n\n/***/ 3002:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1089071__) {\n\nvar global = __nested_webpack_require_1089071__(7854);\nvar toIntegerOrInfinity = __nested_webpack_require_1089071__(9303);\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it) {\n var result = toIntegerOrInfinity(it);\n if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n return result;\n};\n\n\n/***/ }),\n\n/***/ 7593:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1089467__) {\n\nvar global = __nested_webpack_require_1089467__(7854);\nvar call = __nested_webpack_require_1089467__(6916);\nvar isObject = __nested_webpack_require_1089467__(111);\nvar isSymbol = __nested_webpack_require_1089467__(2190);\nvar getMethod = __nested_webpack_require_1089467__(8173);\nvar ordinaryToPrimitive = __nested_webpack_require_1089467__(2140);\nvar wellKnownSymbol = __nested_webpack_require_1089467__(5112);\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n\n\n/***/ }),\n\n/***/ 4948:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1090538__) {\n\nvar toPrimitive = __nested_webpack_require_1090538__(7593);\nvar isSymbol = __nested_webpack_require_1090538__(2190);\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n\n\n/***/ }),\n\n/***/ 1694:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1090937__) {\n\nvar wellKnownSymbol = __nested_webpack_require_1090937__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ 1340:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1091230__) {\n\nvar global = __nested_webpack_require_1091230__(7854);\nvar classof = __nested_webpack_require_1091230__(648);\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n\n\n/***/ }),\n\n/***/ 6330:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1091608__) {\n\nvar global = __nested_webpack_require_1091608__(7854);\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n\n\n/***/ }),\n\n/***/ 9843:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1091901__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1091901__(2109);\nvar global = __nested_webpack_require_1091901__(7854);\nvar call = __nested_webpack_require_1091901__(6916);\nvar DESCRIPTORS = __nested_webpack_require_1091901__(9781);\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __nested_webpack_require_1091901__(3832);\nvar ArrayBufferViewCore = __nested_webpack_require_1091901__(2094);\nvar ArrayBufferModule = __nested_webpack_require_1091901__(2091);\nvar anInstance = __nested_webpack_require_1091901__(5787);\nvar createPropertyDescriptor = __nested_webpack_require_1091901__(9114);\nvar createNonEnumerableProperty = __nested_webpack_require_1091901__(8880);\nvar isIntegralNumber = __nested_webpack_require_1091901__(5988);\nvar toLength = __nested_webpack_require_1091901__(7466);\nvar toIndex = __nested_webpack_require_1091901__(7067);\nvar toOffset = __nested_webpack_require_1091901__(4590);\nvar toPropertyKey = __nested_webpack_require_1091901__(4948);\nvar hasOwn = __nested_webpack_require_1091901__(2597);\nvar classof = __nested_webpack_require_1091901__(648);\nvar isObject = __nested_webpack_require_1091901__(111);\nvar isSymbol = __nested_webpack_require_1091901__(2190);\nvar create = __nested_webpack_require_1091901__(30);\nvar isPrototypeOf = __nested_webpack_require_1091901__(7976);\nvar setPrototypeOf = __nested_webpack_require_1091901__(7674);\nvar getOwnPropertyNames = (__nested_webpack_require_1091901__(8006).f);\nvar typedArrayFrom = __nested_webpack_require_1091901__(7321);\nvar forEach = (__nested_webpack_require_1091901__(2092).forEach);\nvar setSpecies = __nested_webpack_require_1091901__(6340);\nvar definePropertyModule = __nested_webpack_require_1091901__(3070);\nvar getOwnPropertyDescriptorModule = __nested_webpack_require_1091901__(1236);\nvar InternalStateModule = __nested_webpack_require_1091901__(9909);\nvar inheritIfRequired = __nested_webpack_require_1091901__(9587);\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n aTypedArrayConstructor(C);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\nvar addGetter = function (it, key) {\n nativeDefineProperty(it, key, { get: function () {\n return getInternalState(this)[key];\n } });\n};\n\nvar isArrayBuffer = function (it) {\n var klass;\n return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n return isTypedArray(target)\n && !isSymbol(key)\n && key in target\n && isIntegralNumber(+key)\n && key >= 0;\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n key = toPropertyKey(key);\n return isTypedArrayIndex(target, key)\n ? createPropertyDescriptor(2, target[key])\n : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n key = toPropertyKey(key);\n if (isTypedArrayIndex(target, key)\n && isObject(descriptor)\n && hasOwn(descriptor, 'value')\n && !hasOwn(descriptor, 'get')\n && !hasOwn(descriptor, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !descriptor.configurable\n && (!hasOwn(descriptor, 'writable') || descriptor.writable)\n && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)\n ) {\n target[key] = descriptor.value;\n return target;\n } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n definePropertyModule.f = wrappedDefineProperty;\n addGetter(TypedArrayPrototype, 'buffer');\n addGetter(TypedArrayPrototype, 'byteOffset');\n addGetter(TypedArrayPrototype, 'byteLength');\n addGetter(TypedArrayPrototype, 'length');\n }\n\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n defineProperty: wrappedDefineProperty\n });\n\n module.exports = function (TYPE, wrapper, CLAMPED) {\n var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + TYPE;\n var SETTER = 'set' + TYPE;\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n var TypedArrayConstructor = NativeTypedArrayConstructor;\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n var exported = {};\n\n var getter = function (that, index) {\n var data = getInternalState(that);\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\n };\n\n var setter = function (that, index, value) {\n var data = getInternalState(that);\n if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n };\n\n var addElement = function (that, index) {\n nativeDefineProperty(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n anInstance(that, TypedArrayConstructorPrototype);\n var index = 0;\n var byteOffset = 0;\n var buffer, byteLength, length;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new ArrayBuffer(byteLength);\n } else if (isArrayBuffer(data)) {\n buffer = data;\n byteOffset = toOffset(offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - byteOffset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (isTypedArray(data)) {\n return fromList(TypedArrayConstructor, data);\n } else {\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }\n setInternalState(that, {\n buffer: buffer,\n byteOffset: byteOffset,\n byteLength: byteLength,\n length: length,\n view: new DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n anInstance(dummy, TypedArrayConstructorPrototype);\n return inheritIfRequired(function () {\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n if (isArrayBuffer(data)) return $length !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n : typedArrayOffset !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n : new NativeTypedArrayConstructor(data);\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }(), dummy, TypedArrayConstructor);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n if (!(key in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n }\n });\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n }\n\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n }\n\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_CONSTRUCTOR, TypedArrayConstructor);\n\n if (TYPED_ARRAY_TAG) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n }\n\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n $({\n global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n }, exported);\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n }\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n }\n\n setSpecies(CONSTRUCTOR_NAME);\n };\n} else module.exports = function () { /* empty */ };\n\n\n/***/ }),\n\n/***/ 3832:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1101741__) {\n\n/* eslint-disable no-new -- required for testing */\nvar global = __nested_webpack_require_1101741__(7854);\nvar fails = __nested_webpack_require_1101741__(7293);\nvar checkCorrectnessOfIteration = __nested_webpack_require_1101741__(7072);\nvar NATIVE_ARRAY_BUFFER_VIEWS = (__nested_webpack_require_1101741__(2094).NATIVE_ARRAY_BUFFER_VIEWS);\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n Int8Array(1);\n}) || !fails(function () {\n new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n new Int8Array();\n new Int8Array(null);\n new Int8Array(1.5);\n new Int8Array(iterable);\n}, true) || fails(function () {\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n\n\n/***/ }),\n\n/***/ 3074:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1102667__) {\n\nvar arrayFromConstructorAndList = __nested_webpack_require_1102667__(7745);\nvar typedArraySpeciesConstructor = __nested_webpack_require_1102667__(6304);\n\nmodule.exports = function (instance, list) {\n return arrayFromConstructorAndList(typedArraySpeciesConstructor(instance), list);\n};\n\n\n/***/ }),\n\n/***/ 7321:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1103022__) {\n\nvar bind = __nested_webpack_require_1103022__(9974);\nvar call = __nested_webpack_require_1103022__(6916);\nvar aConstructor = __nested_webpack_require_1103022__(9483);\nvar toObject = __nested_webpack_require_1103022__(7908);\nvar lengthOfArrayLike = __nested_webpack_require_1103022__(6244);\nvar getIterator = __nested_webpack_require_1103022__(8554);\nvar getIteratorMethod = __nested_webpack_require_1103022__(1246);\nvar isArrayIteratorMethod = __nested_webpack_require_1103022__(7659);\nvar aTypedArrayConstructor = (__nested_webpack_require_1103022__(2094).aTypedArrayConstructor);\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n var C = aConstructor(this);\n var O = toObject(source);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var i, length, result, step, iterator, next;\n if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n O = [];\n while (!(step = call(next, iterator)).done) {\n O.push(step.value);\n }\n }\n if (mapping && argumentsLength > 2) {\n mapfn = bind(mapfn, arguments[2]);\n }\n length = lengthOfArrayLike(O);\n result = new (aTypedArrayConstructor(C))(length);\n for (i = 0; length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n};\n\n\n/***/ }),\n\n/***/ 6304:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1104435__) {\n\nvar ArrayBufferViewCore = __nested_webpack_require_1104435__(2094);\nvar speciesConstructor = __nested_webpack_require_1104435__(6707);\n\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\n\n// a part of `TypedArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#typedarray-species-create\nmodule.exports = function (originalArray) {\n return aTypedArrayConstructor(speciesConstructor(originalArray, originalArray[TYPED_ARRAY_CONSTRUCTOR]));\n};\n\n\n/***/ }),\n\n/***/ 9711:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1105056__) {\n\nvar uncurryThis = __nested_webpack_require_1105056__(1702);\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n\n\n/***/ }),\n\n/***/ 3307:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1105413__) {\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = __nested_webpack_require_1105413__(133);\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n\n\n/***/ }),\n\n/***/ 6061:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1105707__) {\n\nvar wellKnownSymbol = __nested_webpack_require_1105707__(5112);\n\nexports.f = wellKnownSymbol;\n\n\n/***/ }),\n\n/***/ 5112:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1105885__) {\n\nvar global = __nested_webpack_require_1105885__(7854);\nvar shared = __nested_webpack_require_1105885__(2309);\nvar hasOwn = __nested_webpack_require_1105885__(2597);\nvar uid = __nested_webpack_require_1105885__(9711);\nvar NATIVE_SYMBOL = __nested_webpack_require_1105885__(133);\nvar USE_SYMBOL_AS_UID = __nested_webpack_require_1105885__(3307);\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ }),\n\n/***/ 1361:\n/***/ (function(module) {\n\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n\n/***/ }),\n\n/***/ 9170:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1107273__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1107273__(2109);\nvar global = __nested_webpack_require_1107273__(7854);\nvar isPrototypeOf = __nested_webpack_require_1107273__(7976);\nvar getPrototypeOf = __nested_webpack_require_1107273__(9518);\nvar setPrototypeOf = __nested_webpack_require_1107273__(7674);\nvar copyConstructorProperties = __nested_webpack_require_1107273__(9920);\nvar create = __nested_webpack_require_1107273__(30);\nvar createNonEnumerableProperty = __nested_webpack_require_1107273__(8880);\nvar createPropertyDescriptor = __nested_webpack_require_1107273__(9114);\nvar clearErrorStack = __nested_webpack_require_1107273__(7741);\nvar installErrorCause = __nested_webpack_require_1107273__(8340);\nvar iterate = __nested_webpack_require_1107273__(408);\nvar normalizeStringArgument = __nested_webpack_require_1107273__(6277);\nvar ERROR_STACK_INSTALLABLE = __nested_webpack_require_1107273__(2914);\n\nvar Error = global.Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n var that = isPrototypeOf(AggregateErrorPrototype, this) ? this : create(AggregateErrorPrototype);\n var options = arguments.length > 2 ? arguments[2] : undefined;\n if (setPrototypeOf) {\n that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\n }\n createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, ''));\n if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n installErrorCause(that, options);\n var errorsArray = [];\n iterate(errors, push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, Error);\nelse copyConstructorProperties($AggregateError, Error);\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {\n constructor: createPropertyDescriptor(1, $AggregateError),\n message: createPropertyDescriptor(1, ''),\n name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true }, {\n AggregateError: $AggregateError\n});\n\n\n/***/ }),\n\n/***/ 2222:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1109382__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1109382__(2109);\nvar global = __nested_webpack_require_1109382__(7854);\nvar fails = __nested_webpack_require_1109382__(7293);\nvar isArray = __nested_webpack_require_1109382__(3157);\nvar isObject = __nested_webpack_require_1109382__(111);\nvar toObject = __nested_webpack_require_1109382__(7908);\nvar lengthOfArrayLike = __nested_webpack_require_1109382__(6244);\nvar createProperty = __nested_webpack_require_1109382__(6135);\nvar arraySpeciesCreate = __nested_webpack_require_1109382__(5417);\nvar arrayMethodHasSpeciesSupport = __nested_webpack_require_1109382__(1194);\nvar wellKnownSymbol = __nested_webpack_require_1109382__(5112);\nvar V8_VERSION = __nested_webpack_require_1109382__(7392);\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\nvar TypeError = global.TypeError;\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = lengthOfArrayLike(E);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n\n\n/***/ }),\n\n/***/ 545:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1111873__) {\n\nvar $ = __nested_webpack_require_1111873__(2109);\nvar copyWithin = __nested_webpack_require_1111873__(1048);\nvar addToUnscopables = __nested_webpack_require_1111873__(1223);\n\n// `Array.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n$({ target: 'Array', proto: true }, {\n copyWithin: copyWithin\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('copyWithin');\n\n\n/***/ }),\n\n/***/ 3290:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1112379__) {\n\nvar $ = __nested_webpack_require_1112379__(2109);\nvar fill = __nested_webpack_require_1112379__(1285);\nvar addToUnscopables = __nested_webpack_require_1112379__(1223);\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n\n\n/***/ }),\n\n/***/ 7327:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1112849__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1112849__(2109);\nvar $filter = (__nested_webpack_require_1112849__(2092).filter);\nvar arrayMethodHasSpeciesSupport = __nested_webpack_require_1112849__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ 1038:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1113540__) {\n\nvar $ = __nested_webpack_require_1113540__(2109);\nvar from = __nested_webpack_require_1113540__(8457);\nvar checkCorrectnessOfIteration = __nested_webpack_require_1113540__(7072);\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n\n\n/***/ }),\n\n/***/ 6699:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1114117__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1114117__(2109);\nvar $includes = (__nested_webpack_require_1114117__(1318).includes);\nvar addToUnscopables = __nested_webpack_require_1114117__(1223);\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n\n\n/***/ }),\n\n/***/ 6992:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1114743__) {\n\n\"use strict\";\n\nvar toIndexedObject = __nested_webpack_require_1114743__(5656);\nvar addToUnscopables = __nested_webpack_require_1114743__(1223);\nvar Iterators = __nested_webpack_require_1114743__(7497);\nvar InternalStateModule = __nested_webpack_require_1114743__(9909);\nvar defineIterator = __nested_webpack_require_1114743__(654);\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n\n/***/ 9600:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1116944__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1116944__(2109);\nvar uncurryThis = __nested_webpack_require_1116944__(1702);\nvar IndexedObject = __nested_webpack_require_1116944__(8361);\nvar toIndexedObject = __nested_webpack_require_1116944__(5656);\nvar arrayMethodIsStrict = __nested_webpack_require_1116944__(9341);\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n\n\n/***/ }),\n\n/***/ 1249:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1117732__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1117732__(2109);\nvar $map = (__nested_webpack_require_1117732__(2092).map);\nvar arrayMethodHasSpeciesSupport = __nested_webpack_require_1117732__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ 7042:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1118399__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1118399__(2109);\nvar global = __nested_webpack_require_1118399__(7854);\nvar isArray = __nested_webpack_require_1118399__(3157);\nvar isConstructor = __nested_webpack_require_1118399__(4411);\nvar isObject = __nested_webpack_require_1118399__(111);\nvar toAbsoluteIndex = __nested_webpack_require_1118399__(1400);\nvar lengthOfArrayLike = __nested_webpack_require_1118399__(6244);\nvar toIndexedObject = __nested_webpack_require_1118399__(5656);\nvar createProperty = __nested_webpack_require_1118399__(6135);\nvar wellKnownSymbol = __nested_webpack_require_1118399__(5112);\nvar arrayMethodHasSpeciesSupport = __nested_webpack_require_1118399__(1194);\nvar un$Slice = __nested_webpack_require_1118399__(206);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (isConstructor(Constructor) && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return un$Slice(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n\n\n/***/ }),\n\n/***/ 2707:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1120504__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1120504__(2109);\nvar uncurryThis = __nested_webpack_require_1120504__(1702);\nvar aCallable = __nested_webpack_require_1120504__(9662);\nvar toObject = __nested_webpack_require_1120504__(7908);\nvar lengthOfArrayLike = __nested_webpack_require_1120504__(6244);\nvar toString = __nested_webpack_require_1120504__(1340);\nvar fails = __nested_webpack_require_1120504__(7293);\nvar internalSort = __nested_webpack_require_1120504__(4362);\nvar arrayMethodIsStrict = __nested_webpack_require_1120504__(9341);\nvar FF = __nested_webpack_require_1120504__(8886);\nvar IE_OR_EDGE = __nested_webpack_require_1120504__(256);\nvar V8 = __nested_webpack_require_1120504__(7392);\nvar WEBKIT = __nested_webpack_require_1120504__(8008);\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n\n\n/***/ }),\n\n/***/ 561:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1123606__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1123606__(2109);\nvar global = __nested_webpack_require_1123606__(7854);\nvar toAbsoluteIndex = __nested_webpack_require_1123606__(1400);\nvar toIntegerOrInfinity = __nested_webpack_require_1123606__(9303);\nvar lengthOfArrayLike = __nested_webpack_require_1123606__(6244);\nvar toObject = __nested_webpack_require_1123606__(7908);\nvar arraySpeciesCreate = __nested_webpack_require_1123606__(5417);\nvar createProperty = __nested_webpack_require_1123606__(6135);\nvar arrayMethodHasSpeciesSupport = __nested_webpack_require_1123606__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar TypeError = global.TypeError;\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n\n\n/***/ }),\n\n/***/ 6078:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1126357__) {\n\nvar hasOwn = __nested_webpack_require_1126357__(2597);\nvar redefine = __nested_webpack_require_1126357__(1320);\nvar dateToPrimitive = __nested_webpack_require_1126357__(8709);\nvar wellKnownSymbol = __nested_webpack_require_1126357__(5112);\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar DatePrototype = Date.prototype;\n\n// `Date.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nif (!hasOwn(DatePrototype, TO_PRIMITIVE)) {\n redefine(DatePrototype, TO_PRIMITIVE, dateToPrimitive);\n}\n\n\n/***/ }),\n\n/***/ 8309:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1126949__) {\n\nvar DESCRIPTORS = __nested_webpack_require_1126949__(9781);\nvar FUNCTION_NAME_EXISTS = (__nested_webpack_require_1126949__(6530).EXISTS);\nvar uncurryThis = __nested_webpack_require_1126949__(1702);\nvar defineProperty = (__nested_webpack_require_1126949__(3070).f);\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return regExpExec(nameRE, functionToString(this))[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n\n\n/***/ }),\n\n/***/ 5837:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1127849__) {\n\nvar $ = __nested_webpack_require_1127849__(2109);\nvar global = __nested_webpack_require_1127849__(7854);\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n globalThis: global\n});\n\n\n/***/ }),\n\n/***/ 3706:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1128154__) {\n\nvar global = __nested_webpack_require_1128154__(7854);\nvar setToStringTag = __nested_webpack_require_1128154__(8003);\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/***/ }),\n\n/***/ 1532:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1128485__) {\n\n\"use strict\";\n\nvar collection = __nested_webpack_require_1128485__(7710);\nvar collectionStrong = __nested_webpack_require_1128485__(5631);\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n\n\n/***/ }),\n\n/***/ 2703:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1128927__) {\n\nvar setToStringTag = __nested_webpack_require_1128927__(8003);\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n\n\n/***/ }),\n\n/***/ 9653:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1129211__) {\n\n\"use strict\";\n\nvar DESCRIPTORS = __nested_webpack_require_1129211__(9781);\nvar global = __nested_webpack_require_1129211__(7854);\nvar uncurryThis = __nested_webpack_require_1129211__(1702);\nvar isForced = __nested_webpack_require_1129211__(4705);\nvar redefine = __nested_webpack_require_1129211__(1320);\nvar hasOwn = __nested_webpack_require_1129211__(2597);\nvar inheritIfRequired = __nested_webpack_require_1129211__(9587);\nvar isPrototypeOf = __nested_webpack_require_1129211__(7976);\nvar isSymbol = __nested_webpack_require_1129211__(2190);\nvar toPrimitive = __nested_webpack_require_1129211__(7593);\nvar fails = __nested_webpack_require_1129211__(7293);\nvar getOwnPropertyNames = (__nested_webpack_require_1129211__(8006).f);\nvar getOwnPropertyDescriptor = (__nested_webpack_require_1129211__(1236).f);\nvar defineProperty = (__nested_webpack_require_1129211__(3070).f);\nvar thisNumberValue = __nested_webpack_require_1129211__(863);\nvar trim = (__nested_webpack_require_1129211__(3111).trim);\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\nvar TypeError = global.TypeError;\nvar arraySlice = uncurryThis(''.slice);\nvar charCodeAt = uncurryThis(''.charCodeAt);\n\n// `ToNumeric` abstract operation\n// https://tc39.es/ecma262/#sec-tonumeric\nvar toNumeric = function (value) {\n var primValue = toPrimitive(value, 'number');\n return typeof primValue == 'bigint' ? primValue : toNumber(primValue);\n};\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, 'number');\n var first, third, radix, maxCode, digits, length, index, code;\n if (isSymbol(it)) throw TypeError('Cannot convert a Symbol value to a number');\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = charCodeAt(it, 0);\n if (first === 43 || first === 45) {\n third = charCodeAt(it, 2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (charCodeAt(it, 1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = arraySlice(it, 2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = charCodeAt(digits, index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));\n var dummy = this;\n // check on 1..constructor(foo) case\n return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); })\n ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n;\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (hasOwn(NativeNumber, key = keys[j]) && !hasOwn(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n\n\n/***/ }),\n\n/***/ 3299:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1133080__) {\n\nvar $ = __nested_webpack_require_1133080__(2109);\n\n// `Number.EPSILON` constant\n// https://tc39.es/ecma262/#sec-number.epsilon\n$({ target: 'Number', stat: true }, {\n EPSILON: Math.pow(2, -52)\n});\n\n\n/***/ }),\n\n/***/ 5192:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1133378__) {\n\nvar $ = __nested_webpack_require_1133378__(2109);\nvar numberIsFinite = __nested_webpack_require_1133378__(7023);\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });\n\n\n/***/ }),\n\n/***/ 3161:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1133721__) {\n\nvar $ = __nested_webpack_require_1133721__(2109);\nvar isIntegralNumber = __nested_webpack_require_1133721__(5988);\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n isInteger: isIntegralNumber\n});\n\n\n/***/ }),\n\n/***/ 6977:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1134073__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1134073__(2109);\nvar global = __nested_webpack_require_1134073__(7854);\nvar uncurryThis = __nested_webpack_require_1134073__(1702);\nvar toIntegerOrInfinity = __nested_webpack_require_1134073__(9303);\nvar thisNumberValue = __nested_webpack_require_1134073__(863);\nvar $repeat = __nested_webpack_require_1134073__(8415);\nvar fails = __nested_webpack_require_1134073__(7293);\n\nvar RangeError = global.RangeError;\nvar String = global.String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar un$ToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = fails(function () {\n return un$ToFixed(0.00008, 3) !== '0.000' ||\n un$ToFixed(0.9, 0) !== '1' ||\n un$ToFixed(1.255, 2) !== '1.25' ||\n un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n // V8 ~ Android 4.3-\n un$ToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toIntegerOrInfinity(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat('0', fractDigits - k) + result\n : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n\n\n/***/ }),\n\n/***/ 9601:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1137740__) {\n\nvar $ = __nested_webpack_require_1137740__(2109);\nvar assign = __nested_webpack_require_1137740__(1574);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n\n\n/***/ }),\n\n/***/ 3371:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1138169__) {\n\nvar $ = __nested_webpack_require_1138169__(2109);\nvar FREEZING = __nested_webpack_require_1138169__(6677);\nvar fails = __nested_webpack_require_1138169__(7293);\nvar isObject = __nested_webpack_require_1138169__(111);\nvar onFreeze = (__nested_webpack_require_1138169__(2423).onFreeze);\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n freeze: function freeze(it) {\n return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n }\n});\n\n\n/***/ }),\n\n/***/ 5003:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1138905__) {\n\nvar $ = __nested_webpack_require_1138905__(2109);\nvar fails = __nested_webpack_require_1138905__(7293);\nvar toIndexedObject = __nested_webpack_require_1138905__(5656);\nvar nativeGetOwnPropertyDescriptor = (__nested_webpack_require_1138905__(1236).f);\nvar DESCRIPTORS = __nested_webpack_require_1138905__(9781);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n\n\n/***/ }),\n\n/***/ 9337:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1139726__) {\n\nvar $ = __nested_webpack_require_1139726__(2109);\nvar DESCRIPTORS = __nested_webpack_require_1139726__(9781);\nvar ownKeys = __nested_webpack_require_1139726__(3887);\nvar toIndexedObject = __nested_webpack_require_1139726__(5656);\nvar getOwnPropertyDescriptorModule = __nested_webpack_require_1139726__(1236);\nvar createProperty = __nested_webpack_require_1139726__(6135);\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n\n\n/***/ }),\n\n/***/ 489:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1140777__) {\n\nvar $ = __nested_webpack_require_1140777__(2109);\nvar fails = __nested_webpack_require_1140777__(7293);\nvar toObject = __nested_webpack_require_1140777__(7908);\nvar nativeGetPrototypeOf = __nested_webpack_require_1140777__(9518);\nvar CORRECT_PROTOTYPE_GETTER = __nested_webpack_require_1140777__(8544);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n\n\n/***/ }),\n\n/***/ 7941:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1141490__) {\n\nvar $ = __nested_webpack_require_1141490__(2109);\nvar toObject = __nested_webpack_require_1141490__(7908);\nvar nativeKeys = __nested_webpack_require_1141490__(1956);\nvar fails = __nested_webpack_require_1141490__(7293);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n\n\n/***/ }),\n\n/***/ 1539:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1142041__) {\n\nvar TO_STRING_TAG_SUPPORT = __nested_webpack_require_1142041__(1694);\nvar redefine = __nested_webpack_require_1142041__(1320);\nvar toString = __nested_webpack_require_1142041__(288);\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 2479:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1142494__) {\n\nvar $ = __nested_webpack_require_1142494__(2109);\nvar $values = (__nested_webpack_require_1142494__(4699).values);\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n\n\n/***/ }),\n\n/***/ 7922:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1142868__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1142868__(2109);\nvar call = __nested_webpack_require_1142868__(6916);\nvar aCallable = __nested_webpack_require_1142868__(9662);\nvar newPromiseCapabilityModule = __nested_webpack_require_1142868__(8523);\nvar perform = __nested_webpack_require_1142868__(2534);\nvar iterate = __nested_webpack_require_1142868__(408);\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n\n\n/***/ }),\n\n/***/ 4668:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1144459__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1144459__(2109);\nvar aCallable = __nested_webpack_require_1144459__(9662);\nvar getBuiltIn = __nested_webpack_require_1144459__(5005);\nvar call = __nested_webpack_require_1144459__(6916);\nvar newPromiseCapabilityModule = __nested_webpack_require_1144459__(8523);\nvar perform = __nested_webpack_require_1144459__(2534);\nvar iterate = __nested_webpack_require_1144459__(408);\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n any: function any(iterable) {\n var C = this;\n var AggregateError = getBuiltIn('AggregateError');\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var errors = [];\n var counter = 0;\n var remaining = 1;\n var alreadyResolved = false;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyRejected = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyResolved = true;\n resolve(value);\n }, function (error) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyRejected = true;\n errors[index] = error;\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n\n\n/***/ }),\n\n/***/ 7727:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1146219__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1146219__(2109);\nvar IS_PURE = __nested_webpack_require_1146219__(1913);\nvar NativePromise = __nested_webpack_require_1146219__(3366);\nvar fails = __nested_webpack_require_1146219__(7293);\nvar getBuiltIn = __nested_webpack_require_1146219__(5005);\nvar isCallable = __nested_webpack_require_1146219__(614);\nvar speciesConstructor = __nested_webpack_require_1146219__(6707);\nvar promiseResolve = __nested_webpack_require_1146219__(9478);\nvar redefine = __nested_webpack_require_1146219__(1320);\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = isCallable(onFinally);\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromise)) {\n var method = getBuiltIn('Promise').prototype['finally'];\n if (NativePromise.prototype['finally'] !== method) {\n redefine(NativePromise.prototype, 'finally', method, { unsafe: true });\n }\n}\n\n\n/***/ }),\n\n/***/ 8674:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1147937__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1147937__(2109);\nvar IS_PURE = __nested_webpack_require_1147937__(1913);\nvar global = __nested_webpack_require_1147937__(7854);\nvar getBuiltIn = __nested_webpack_require_1147937__(5005);\nvar call = __nested_webpack_require_1147937__(6916);\nvar NativePromise = __nested_webpack_require_1147937__(3366);\nvar redefine = __nested_webpack_require_1147937__(1320);\nvar redefineAll = __nested_webpack_require_1147937__(2248);\nvar setPrototypeOf = __nested_webpack_require_1147937__(7674);\nvar setToStringTag = __nested_webpack_require_1147937__(8003);\nvar setSpecies = __nested_webpack_require_1147937__(6340);\nvar aCallable = __nested_webpack_require_1147937__(9662);\nvar isCallable = __nested_webpack_require_1147937__(614);\nvar isObject = __nested_webpack_require_1147937__(111);\nvar anInstance = __nested_webpack_require_1147937__(5787);\nvar inspectSource = __nested_webpack_require_1147937__(2788);\nvar iterate = __nested_webpack_require_1147937__(408);\nvar checkCorrectnessOfIteration = __nested_webpack_require_1147937__(7072);\nvar speciesConstructor = __nested_webpack_require_1147937__(6707);\nvar task = (__nested_webpack_require_1147937__(261).set);\nvar microtask = __nested_webpack_require_1147937__(5948);\nvar promiseResolve = __nested_webpack_require_1147937__(9478);\nvar hostReportErrors = __nested_webpack_require_1147937__(842);\nvar newPromiseCapabilityModule = __nested_webpack_require_1147937__(8523);\nvar perform = __nested_webpack_require_1147937__(2534);\nvar InternalStateModule = __nested_webpack_require_1147937__(9909);\nvar isForced = __nested_webpack_require_1147937__(4705);\nvar wellKnownSymbol = __nested_webpack_require_1147937__(5112);\nvar IS_BROWSER = __nested_webpack_require_1147937__(7871);\nvar IS_NODE = __nested_webpack_require_1147937__(5268);\nvar V8_VERSION = __nested_webpack_require_1147937__(7392);\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromisePrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromisePrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromisePrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reactions = state.reactions;\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n reactions[reactions.length] = reaction;\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n\n\n/***/ }),\n\n/***/ 2419:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1162004__) {\n\nvar $ = __nested_webpack_require_1162004__(2109);\nvar getBuiltIn = __nested_webpack_require_1162004__(5005);\nvar apply = __nested_webpack_require_1162004__(2104);\nvar bind = __nested_webpack_require_1162004__(7065);\nvar aConstructor = __nested_webpack_require_1162004__(9483);\nvar anObject = __nested_webpack_require_1162004__(9670);\nvar isObject = __nested_webpack_require_1162004__(111);\nvar create = __nested_webpack_require_1162004__(30);\nvar fails = __nested_webpack_require_1162004__(7293);\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\nvar ObjectPrototype = Object.prototype;\nvar push = [].push;\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\n\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\n\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aConstructor(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n apply(push, $args, args);\n return new (apply(bind, Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : ObjectPrototype);\n var result = apply(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n\n\n/***/ }),\n\n/***/ 4916:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1164319__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1164319__(2109);\nvar exec = __nested_webpack_require_1164319__(2261);\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n\n\n/***/ }),\n\n/***/ 2087:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1164695__) {\n\nvar DESCRIPTORS = __nested_webpack_require_1164695__(9781);\nvar objectDefinePropertyModule = __nested_webpack_require_1164695__(3070);\nvar regExpFlags = __nested_webpack_require_1164695__(7066);\nvar fails = __nested_webpack_require_1164695__(7293);\n\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call({ dotAll: true, sticky: true }) !== 'sy';\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) objectDefinePropertyModule.f(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n\n\n/***/ }),\n\n/***/ 9714:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1165497__) {\n\n\"use strict\";\n\nvar uncurryThis = __nested_webpack_require_1165497__(1702);\nvar PROPER_FUNCTION_NAME = (__nested_webpack_require_1165497__(6530).PROPER);\nvar redefine = __nested_webpack_require_1165497__(1320);\nvar anObject = __nested_webpack_require_1165497__(9670);\nvar isPrototypeOf = __nested_webpack_require_1165497__(7976);\nvar $toString = __nested_webpack_require_1165497__(1340);\nvar fails = __nested_webpack_require_1165497__(7293);\nvar regExpFlags = __nested_webpack_require_1165497__(7066);\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar n$ToString = RegExpPrototype[TO_STRING];\nvar getFlags = uncurryThis(regExpFlags);\n\nvar NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && n$ToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = $toString(R.source);\n var rf = R.flags;\n var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 189:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1166836__) {\n\n\"use strict\";\n\nvar collection = __nested_webpack_require_1166836__(7710);\nvar collectionStrong = __nested_webpack_require_1166836__(5631);\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n\n\n/***/ }),\n\n/***/ 9841:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1167278__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1167278__(2109);\nvar codeAt = (__nested_webpack_require_1167278__(8710).codeAt);\n\n// `String.prototype.codePointAt` method\n// https://tc39.es/ecma262/#sec-string.prototype.codepointat\n$({ target: 'String', proto: true }, {\n codePointAt: function codePointAt(pos) {\n return codeAt(this, pos);\n }\n});\n\n\n/***/ }),\n\n/***/ 4953:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1167716__) {\n\nvar $ = __nested_webpack_require_1167716__(2109);\nvar global = __nested_webpack_require_1167716__(7854);\nvar uncurryThis = __nested_webpack_require_1167716__(1702);\nvar toAbsoluteIndex = __nested_webpack_require_1167716__(1400);\n\nvar RangeError = global.RangeError;\nvar fromCharCode = String.fromCharCode;\n// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing\nvar $fromCodePoint = String.fromCodePoint;\nvar join = uncurryThis([].join);\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length != 1;\n\n// `String.fromCodePoint` method\n// https://tc39.es/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n fromCodePoint: function fromCodePoint(x) {\n var elements = [];\n var length = arguments.length;\n var i = 0;\n var code;\n while (length > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');\n elements[i] = code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00);\n } return join(elements, '');\n }\n});\n\n\n/***/ }),\n\n/***/ 2023:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1169047__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1169047__(2109);\nvar uncurryThis = __nested_webpack_require_1169047__(1702);\nvar notARegExp = __nested_webpack_require_1169047__(3929);\nvar requireObjectCoercible = __nested_webpack_require_1169047__(4488);\nvar toString = __nested_webpack_require_1169047__(1340);\nvar correctIsRegExpLogic = __nested_webpack_require_1169047__(4964);\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n\n\n/***/ }),\n\n/***/ 8734:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1169932__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1169932__(2109);\nvar createHTML = __nested_webpack_require_1169932__(4230);\nvar forcedStringHTMLMethod = __nested_webpack_require_1169932__(3429);\n\n// `String.prototype.italics` method\n// https://tc39.es/ecma262/#sec-string.prototype.italics\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, {\n italics: function italics() {\n return createHTML(this, 'i', '', '');\n }\n});\n\n\n/***/ }),\n\n/***/ 8783:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1170457__) {\n\n\"use strict\";\n\nvar charAt = (__nested_webpack_require_1170457__(8710).charAt);\nvar toString = __nested_webpack_require_1170457__(1340);\nvar InternalStateModule = __nested_webpack_require_1170457__(9909);\nvar defineIterator = __nested_webpack_require_1170457__(654);\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n\n\n/***/ }),\n\n/***/ 9254:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1171615__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1171615__(2109);\nvar createHTML = __nested_webpack_require_1171615__(4230);\nvar forcedStringHTMLMethod = __nested_webpack_require_1171615__(3429);\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n link: function link(url) {\n return createHTML(this, 'a', 'href', url);\n }\n});\n\n\n/***/ }),\n\n/***/ 6373:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1172133__) {\n\n\"use strict\";\n\n/* eslint-disable es/no-string-prototype-matchall -- safe */\nvar $ = __nested_webpack_require_1172133__(2109);\nvar global = __nested_webpack_require_1172133__(7854);\nvar call = __nested_webpack_require_1172133__(6916);\nvar uncurryThis = __nested_webpack_require_1172133__(1702);\nvar createIteratorConstructor = __nested_webpack_require_1172133__(4994);\nvar requireObjectCoercible = __nested_webpack_require_1172133__(4488);\nvar toLength = __nested_webpack_require_1172133__(7466);\nvar toString = __nested_webpack_require_1172133__(1340);\nvar anObject = __nested_webpack_require_1172133__(9670);\nvar classof = __nested_webpack_require_1172133__(4326);\nvar isPrototypeOf = __nested_webpack_require_1172133__(7976);\nvar isRegExp = __nested_webpack_require_1172133__(7850);\nvar regExpFlags = __nested_webpack_require_1172133__(7066);\nvar getMethod = __nested_webpack_require_1172133__(8173);\nvar redefine = __nested_webpack_require_1172133__(1320);\nvar fails = __nested_webpack_require_1172133__(7293);\nvar wellKnownSymbol = __nested_webpack_require_1172133__(5112);\nvar speciesConstructor = __nested_webpack_require_1172133__(6707);\nvar advanceStringIndex = __nested_webpack_require_1172133__(1530);\nvar regExpExec = __nested_webpack_require_1172133__(7651);\nvar InternalStateModule = __nested_webpack_require_1172133__(9909);\nvar IS_PURE = __nested_webpack_require_1172133__(1913);\n\nvar MATCH_ALL = wellKnownSymbol('matchAll');\nvar REGEXP_STRING = 'RegExp String';\nvar REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);\nvar RegExpPrototype = RegExp.prototype;\nvar TypeError = global.TypeError;\nvar getFlags = uncurryThis(regExpFlags);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar un$MatchAll = uncurryThis(''.matchAll);\n\nvar WORKS_WITH_NON_GLOBAL_REGEX = !!un$MatchAll && !fails(function () {\n un$MatchAll('a', /./);\n});\n\nvar $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {\n setInternalState(this, {\n type: REGEXP_STRING_ITERATOR,\n regexp: regexp,\n string: string,\n global: $global,\n unicode: fullUnicode,\n done: false\n });\n}, REGEXP_STRING, function next() {\n var state = getInternalState(this);\n if (state.done) return { value: undefined, done: true };\n var R = state.regexp;\n var S = state.string;\n var match = regExpExec(R, S);\n if (match === null) return { value: undefined, done: state.done = true };\n if (state.global) {\n if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode);\n return { value: match, done: false };\n }\n state.done = true;\n return { value: match, done: false };\n});\n\nvar $matchAll = function (string) {\n var R = anObject(this);\n var S = toString(string);\n var C, flagsValue, flags, matcher, $global, fullUnicode;\n C = speciesConstructor(R, RegExp);\n flagsValue = R.flags;\n if (flagsValue === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype)) {\n flagsValue = getFlags(R);\n }\n flags = flagsValue === undefined ? '' : toString(flagsValue);\n matcher = new C(C === RegExp ? R.source : R, flags);\n $global = !!~stringIndexOf(flags, 'g');\n fullUnicode = !!~stringIndexOf(flags, 'u');\n matcher.lastIndex = toLength(R.lastIndex);\n return new $RegExpStringIterator(matcher, S, $global, fullUnicode);\n};\n\n// `String.prototype.matchAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.matchall\n$({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {\n matchAll: function matchAll(regexp) {\n var O = requireObjectCoercible(this);\n var flags, S, matcher, rx;\n if (regexp != null) {\n if (isRegExp(regexp)) {\n flags = toString(requireObjectCoercible('flags' in RegExpPrototype\n ? regexp.flags\n : getFlags(regexp)\n ));\n if (!~stringIndexOf(flags, 'g')) throw TypeError('`.matchAll` does not allow non-global regexes');\n }\n if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);\n matcher = getMethod(regexp, MATCH_ALL);\n if (matcher === undefined && IS_PURE && classof(regexp) == 'RegExp') matcher = $matchAll;\n if (matcher) return call(matcher, regexp, O);\n } else if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);\n S = toString(O);\n rx = new RegExp(regexp, 'g');\n return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);\n }\n});\n\nIS_PURE || MATCH_ALL in RegExpPrototype || redefine(RegExpPrototype, MATCH_ALL, $matchAll);\n\n\n/***/ }),\n\n/***/ 4723:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1176545__) {\n\n\"use strict\";\n\nvar call = __nested_webpack_require_1176545__(6916);\nvar fixRegExpWellKnownSymbolLogic = __nested_webpack_require_1176545__(7007);\nvar anObject = __nested_webpack_require_1176545__(9670);\nvar toLength = __nested_webpack_require_1176545__(7466);\nvar toString = __nested_webpack_require_1176545__(1340);\nvar requireObjectCoercible = __nested_webpack_require_1176545__(4488);\nvar getMethod = __nested_webpack_require_1176545__(8173);\nvar advanceStringIndex = __nested_webpack_require_1176545__(1530);\nvar regExpExec = __nested_webpack_require_1176545__(7651);\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n\n\n/***/ }),\n\n/***/ 2481:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1178304__) {\n\nvar $ = __nested_webpack_require_1178304__(2109);\nvar repeat = __nested_webpack_require_1178304__(8415);\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n repeat: repeat\n});\n\n\n/***/ }),\n\n/***/ 5306:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1178648__) {\n\n\"use strict\";\n\nvar apply = __nested_webpack_require_1178648__(2104);\nvar call = __nested_webpack_require_1178648__(6916);\nvar uncurryThis = __nested_webpack_require_1178648__(1702);\nvar fixRegExpWellKnownSymbolLogic = __nested_webpack_require_1178648__(7007);\nvar fails = __nested_webpack_require_1178648__(7293);\nvar anObject = __nested_webpack_require_1178648__(9670);\nvar isCallable = __nested_webpack_require_1178648__(614);\nvar toIntegerOrInfinity = __nested_webpack_require_1178648__(9303);\nvar toLength = __nested_webpack_require_1178648__(7466);\nvar toString = __nested_webpack_require_1178648__(1340);\nvar requireObjectCoercible = __nested_webpack_require_1178648__(4488);\nvar advanceStringIndex = __nested_webpack_require_1178648__(1530);\nvar getMethod = __nested_webpack_require_1178648__(8173);\nvar getSubstitution = __nested_webpack_require_1178648__(647);\nvar regExpExec = __nested_webpack_require_1178648__(7651);\nvar wellKnownSymbol = __nested_webpack_require_1178648__(5112);\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n\n\n/***/ }),\n\n/***/ 3123:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1184060__) {\n\n\"use strict\";\n\nvar apply = __nested_webpack_require_1184060__(2104);\nvar call = __nested_webpack_require_1184060__(6916);\nvar uncurryThis = __nested_webpack_require_1184060__(1702);\nvar fixRegExpWellKnownSymbolLogic = __nested_webpack_require_1184060__(7007);\nvar isRegExp = __nested_webpack_require_1184060__(7850);\nvar anObject = __nested_webpack_require_1184060__(9670);\nvar requireObjectCoercible = __nested_webpack_require_1184060__(4488);\nvar speciesConstructor = __nested_webpack_require_1184060__(6707);\nvar advanceStringIndex = __nested_webpack_require_1184060__(1530);\nvar toLength = __nested_webpack_require_1184060__(7466);\nvar toString = __nested_webpack_require_1184060__(1340);\nvar getMethod = __nested_webpack_require_1184060__(8173);\nvar arraySlice = __nested_webpack_require_1184060__(206);\nvar callRegExpExec = __nested_webpack_require_1184060__(7651);\nvar regexpExec = __nested_webpack_require_1184060__(2261);\nvar stickyHelpers = __nested_webpack_require_1184060__(2999);\nvar fails = __nested_webpack_require_1184060__(7293);\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return call(nativeSplit, string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = call(regexpExec, separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n push(output, stringSlice(string, lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !exec(separatorCopy, '')) push(output, '');\n } else push(output, stringSlice(string, lastLastIndex));\n return output.length > lim ? arraySlice(output, 0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);\n return splitter\n ? call(splitter, separator, O, limit)\n : call(internalSplit, toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n push(A, stringSlice(S, p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n push(A, z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n push(A, stringSlice(S, p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n\n\n/***/ }),\n\n/***/ 7397:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1190579__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1190579__(2109);\nvar createHTML = __nested_webpack_require_1190579__(4230);\nvar forcedStringHTMLMethod = __nested_webpack_require_1190579__(3429);\n\n// `String.prototype.strike` method\n// https://tc39.es/ecma262/#sec-string.prototype.strike\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('strike') }, {\n strike: function strike() {\n return createHTML(this, 'strike', '', '');\n }\n});\n\n\n/***/ }),\n\n/***/ 3210:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1191104__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1191104__(2109);\nvar $trim = (__nested_webpack_require_1191104__(3111).trim);\nvar forcedStringTrimMethod = __nested_webpack_require_1191104__(6091);\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n\n\n/***/ }),\n\n/***/ 2443:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1191598__) {\n\nvar defineWellKnownSymbol = __nested_webpack_require_1191598__(7235);\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n\n\n/***/ }),\n\n/***/ 1817:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1191907__) {\n\n\"use strict\";\n// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n\nvar $ = __nested_webpack_require_1191907__(2109);\nvar DESCRIPTORS = __nested_webpack_require_1191907__(9781);\nvar global = __nested_webpack_require_1191907__(7854);\nvar uncurryThis = __nested_webpack_require_1191907__(1702);\nvar hasOwn = __nested_webpack_require_1191907__(2597);\nvar isCallable = __nested_webpack_require_1191907__(614);\nvar isPrototypeOf = __nested_webpack_require_1191907__(7976);\nvar toString = __nested_webpack_require_1191907__(1340);\nvar defineProperty = (__nested_webpack_require_1191907__(3070).f);\nvar copyConstructorProperties = __nested_webpack_require_1191907__(9920);\n\nvar NativeSymbol = global.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n var result = isPrototypeOf(SymbolPrototype, this)\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n SymbolWrapper.prototype = SymbolPrototype;\n SymbolPrototype.constructor = SymbolWrapper;\n\n var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\n var symbolToString = uncurryThis(SymbolPrototype.toString);\n var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n var replace = uncurryThis(''.replace);\n var stringSlice = uncurryThis(''.slice);\n\n defineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = symbolValueOf(this);\n var string = symbolToString(symbol);\n if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n\n\n/***/ }),\n\n/***/ 2165:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1194395__) {\n\nvar defineWellKnownSymbol = __nested_webpack_require_1194395__(7235);\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n\n\n/***/ }),\n\n/***/ 2526:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1194689__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1194689__(2109);\nvar global = __nested_webpack_require_1194689__(7854);\nvar getBuiltIn = __nested_webpack_require_1194689__(5005);\nvar apply = __nested_webpack_require_1194689__(2104);\nvar call = __nested_webpack_require_1194689__(6916);\nvar uncurryThis = __nested_webpack_require_1194689__(1702);\nvar IS_PURE = __nested_webpack_require_1194689__(1913);\nvar DESCRIPTORS = __nested_webpack_require_1194689__(9781);\nvar NATIVE_SYMBOL = __nested_webpack_require_1194689__(133);\nvar fails = __nested_webpack_require_1194689__(7293);\nvar hasOwn = __nested_webpack_require_1194689__(2597);\nvar isArray = __nested_webpack_require_1194689__(3157);\nvar isCallable = __nested_webpack_require_1194689__(614);\nvar isObject = __nested_webpack_require_1194689__(111);\nvar isPrototypeOf = __nested_webpack_require_1194689__(7976);\nvar isSymbol = __nested_webpack_require_1194689__(2190);\nvar anObject = __nested_webpack_require_1194689__(9670);\nvar toObject = __nested_webpack_require_1194689__(7908);\nvar toIndexedObject = __nested_webpack_require_1194689__(5656);\nvar toPropertyKey = __nested_webpack_require_1194689__(4948);\nvar $toString = __nested_webpack_require_1194689__(1340);\nvar createPropertyDescriptor = __nested_webpack_require_1194689__(9114);\nvar nativeObjectCreate = __nested_webpack_require_1194689__(30);\nvar objectKeys = __nested_webpack_require_1194689__(1956);\nvar getOwnPropertyNamesModule = __nested_webpack_require_1194689__(8006);\nvar getOwnPropertyNamesExternal = __nested_webpack_require_1194689__(1156);\nvar getOwnPropertySymbolsModule = __nested_webpack_require_1194689__(5181);\nvar getOwnPropertyDescriptorModule = __nested_webpack_require_1194689__(1236);\nvar definePropertyModule = __nested_webpack_require_1194689__(3070);\nvar propertyIsEnumerableModule = __nested_webpack_require_1194689__(5296);\nvar arraySlice = __nested_webpack_require_1194689__(206);\nvar redefine = __nested_webpack_require_1194689__(1320);\nvar shared = __nested_webpack_require_1194689__(2309);\nvar sharedKey = __nested_webpack_require_1194689__(6200);\nvar hiddenKeys = __nested_webpack_require_1194689__(3501);\nvar uid = __nested_webpack_require_1194689__(9711);\nvar wellKnownSymbol = __nested_webpack_require_1194689__(5112);\nvar wrappedWellKnownSymbolModule = __nested_webpack_require_1194689__(6061);\nvar defineWellKnownSymbol = __nested_webpack_require_1194689__(7235);\nvar setToStringTag = __nested_webpack_require_1194689__(8003);\nvar InternalStateModule = __nested_webpack_require_1194689__(9909);\nvar $forEach = (__nested_webpack_require_1194689__(2092).forEach);\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n redefine(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (isCallable($replacer)) value = call($replacer, this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return apply($stringify, null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n var valueOf = SymbolPrototype.valueOf;\n // eslint-disable-next-line no-unused-vars -- required for .length\n redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n // TODO: improve hint logic\n return call(valueOf, this);\n });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n\n\n/***/ }),\n\n/***/ 6649:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1207705__) {\n\nvar defineWellKnownSymbol = __nested_webpack_require_1207705__(7235);\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n\n\n/***/ }),\n\n/***/ 3680:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1208008__) {\n\nvar defineWellKnownSymbol = __nested_webpack_require_1208008__(7235);\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n\n\n/***/ }),\n\n/***/ 2990:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1208311__) {\n\n\"use strict\";\n\nvar uncurryThis = __nested_webpack_require_1208311__(1702);\nvar ArrayBufferViewCore = __nested_webpack_require_1208311__(2094);\nvar $ArrayCopyWithin = __nested_webpack_require_1208311__(1048);\n\nvar u$ArrayCopyWithin = uncurryThis($ArrayCopyWithin);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n return u$ArrayCopyWithin(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 8927:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1209084__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1209084__(2094);\nvar $every = (__nested_webpack_require_1209084__(2092).every);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3105:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1209722__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1209722__(2094);\nvar call = __nested_webpack_require_1209722__(6916);\nvar $fill = __nested_webpack_require_1209722__(1285);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n var length = arguments.length;\n return call(\n $fill,\n aTypedArray(this),\n value,\n length > 1 ? arguments[1] : undefined,\n length > 2 ? arguments[2] : undefined\n );\n});\n\n\n/***/ }),\n\n/***/ 5035:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1210469__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1210469__(2094);\nvar $filter = (__nested_webpack_require_1210469__(2092).filter);\nvar fromSpeciesAndList = __nested_webpack_require_1210469__(3074);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return fromSpeciesAndList(this, list);\n});\n\n\n/***/ }),\n\n/***/ 7174:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1211211__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1211211__(2094);\nvar $findIndex = (__nested_webpack_require_1211211__(2092).findIndex);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4345:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1211875__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1211875__(2094);\nvar $find = (__nested_webpack_require_1211875__(2092).find);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4197:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1212504__) {\n\nvar createTypedArrayConstructor = __nested_webpack_require_1212504__(9843);\n\n// `Float32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float32', function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n\n/***/ 6495:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1212937__) {\n\nvar createTypedArrayConstructor = __nested_webpack_require_1212937__(9843);\n\n// `Float64Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float64', function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n\n/***/ 2846:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1213370__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1213370__(2094);\nvar $forEach = (__nested_webpack_require_1213370__(2092).forEach);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 8145:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1214015__) {\n\n\"use strict\";\n\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __nested_webpack_require_1214015__(3832);\nvar exportTypedArrayStaticMethod = (__nested_webpack_require_1214015__(2094).exportTypedArrayStaticMethod);\nvar typedArrayFrom = __nested_webpack_require_1214015__(7321);\n\n// `%TypedArray%.from` method\n// https://tc39.es/ecma262/#sec-%typedarray%.from\nexportTypedArrayStaticMethod('from', typedArrayFrom, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS);\n\n\n/***/ }),\n\n/***/ 4731:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1214544__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1214544__(2094);\nvar $includes = (__nested_webpack_require_1214544__(1318).includes);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 7209:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1215211__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1215211__(2094);\nvar $indexOf = (__nested_webpack_require_1215211__(1318).indexOf);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 5109:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1215871__) {\n\nvar createTypedArrayConstructor = __nested_webpack_require_1215871__(9843);\n\n// `Int16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int16', function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n\n/***/ 5125:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1216298__) {\n\nvar createTypedArrayConstructor = __nested_webpack_require_1216298__(9843);\n\n// `Int32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int32', function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n\n/***/ 7145:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1216725__) {\n\nvar createTypedArrayConstructor = __nested_webpack_require_1216725__(9843);\n\n// `Int8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int8', function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n\n/***/ 6319:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1217149__) {\n\n\"use strict\";\n\nvar global = __nested_webpack_require_1217149__(7854);\nvar uncurryThis = __nested_webpack_require_1217149__(1702);\nvar PROPER_FUNCTION_NAME = (__nested_webpack_require_1217149__(6530).PROPER);\nvar ArrayBufferViewCore = __nested_webpack_require_1217149__(2094);\nvar ArrayIterators = __nested_webpack_require_1217149__(6992);\nvar wellKnownSymbol = __nested_webpack_require_1217149__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = uncurryThis(ArrayIterators.values);\nvar arrayKeys = uncurryThis(ArrayIterators.keys);\nvar arrayEntries = uncurryThis(ArrayIterators.entries);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];\n\nvar PROPER_ARRAY_VALUES_NAME = !!nativeTypedArrayIterator && nativeTypedArrayIterator.name === 'values';\n\nvar typedArrayValues = function values() {\n return arrayValues(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n return arrayEntries(aTypedArray(this));\n});\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n return arrayKeys(aTypedArray(this));\n});\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME);\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME);\n\n\n/***/ }),\n\n/***/ 8867:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1219037__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1219037__(2094);\nvar uncurryThis = __nested_webpack_require_1219037__(1702);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = uncurryThis([].join);\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\nexportTypedArrayMethod('join', function join(separator) {\n return $join(aTypedArray(this), separator);\n});\n\n\n/***/ }),\n\n/***/ 7789:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1219634__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1219634__(2094);\nvar apply = __nested_webpack_require_1219634__(2104);\nvar $lastIndexOf = __nested_webpack_require_1219634__(6583);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n var length = arguments.length;\n return apply($lastIndexOf, aTypedArray(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);\n});\n\n\n/***/ }),\n\n/***/ 3739:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1220385__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1220385__(2094);\nvar $map = (__nested_webpack_require_1220385__(2092).map);\nvar typedArraySpeciesConstructor = __nested_webpack_require_1220385__(6304);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n return new (typedArraySpeciesConstructor(O))(length);\n });\n});\n\n\n/***/ }),\n\n/***/ 4483:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1221147__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1221147__(2094);\nvar $reduceRight = (__nested_webpack_require_1221147__(3671).right);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduceRight(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 9368:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1221857__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1221857__(2094);\nvar $reduce = (__nested_webpack_require_1221857__(3671).left);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduce(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 2056:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1222536__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1222536__(2094);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n var that = this;\n var length = aTypedArray(that).length;\n var middle = floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n});\n\n\n/***/ }),\n\n/***/ 3462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1223290__) {\n\n\"use strict\";\n\nvar global = __nested_webpack_require_1223290__(7854);\nvar ArrayBufferViewCore = __nested_webpack_require_1223290__(2094);\nvar lengthOfArrayLike = __nested_webpack_require_1223290__(6244);\nvar toOffset = __nested_webpack_require_1223290__(4590);\nvar toObject = __nested_webpack_require_1223290__(7908);\nvar fails = __nested_webpack_require_1223290__(7293);\n\nvar RangeError = global.RangeError;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n new Int8Array(1).set({});\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = lengthOfArrayLike(src);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 678:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1224503__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1224503__(2094);\nvar typedArraySpeciesConstructor = __nested_webpack_require_1224503__(6304);\nvar fails = __nested_webpack_require_1224503__(7293);\nvar arraySlice = __nested_webpack_require_1224503__(206);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n var list = arraySlice(aTypedArray(this), start, end);\n var C = typedArraySpeciesConstructor(this);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 7462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1225521__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1225521__(2094);\nvar $some = (__nested_webpack_require_1225521__(2092).some);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3824:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1226152__) {\n\n\"use strict\";\n\nvar global = __nested_webpack_require_1226152__(7854);\nvar uncurryThis = __nested_webpack_require_1226152__(1702);\nvar fails = __nested_webpack_require_1226152__(7293);\nvar aCallable = __nested_webpack_require_1226152__(9662);\nvar internalSort = __nested_webpack_require_1226152__(4362);\nvar ArrayBufferViewCore = __nested_webpack_require_1226152__(2094);\nvar FF = __nested_webpack_require_1226152__(8886);\nvar IE_OR_EDGE = __nested_webpack_require_1226152__(256);\nvar V8 = __nested_webpack_require_1226152__(7392);\nvar WEBKIT = __nested_webpack_require_1226152__(8008);\n\nvar Array = global.Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar Uint16Array = global.Uint16Array;\nvar un$Sort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);\n\n// WebKit\nvar ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort && !(fails(function () {\n un$Sort(new Uint16Array(2), null);\n}) && fails(function () {\n un$Sort(new Uint16Array(2), {});\n}));\n\nvar STABLE_SORT = !!un$Sort && !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 74;\n if (FF) return FF < 67;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 602;\n\n var array = new Uint16Array(516);\n var expected = Array(516);\n var index, mod;\n\n for (index = 0; index < 516; index++) {\n mod = index % 4;\n array[index] = 515 - index;\n expected[index] = index - 2 * mod + 3;\n }\n\n un$Sort(array, function (a, b) {\n return (a / 4 | 0) - (b / 4 | 0);\n });\n\n for (index = 0; index < 516; index++) {\n if (array[index] !== expected[index]) return true;\n }\n});\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (y !== y) return -1;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (x !== x) return 1;\n if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;\n return x > y;\n };\n};\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n if (STABLE_SORT) return un$Sort(this, comparefn);\n\n return internalSort(aTypedArray(this), getSortCompare(comparefn));\n}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);\n\n\n/***/ }),\n\n/***/ 5021:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1228583__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __nested_webpack_require_1228583__(2094);\nvar toLength = __nested_webpack_require_1228583__(7466);\nvar toAbsoluteIndex = __nested_webpack_require_1228583__(1400);\nvar typedArraySpeciesConstructor = __nested_webpack_require_1228583__(6304);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n var O = aTypedArray(this);\n var length = O.length;\n var beginIndex = toAbsoluteIndex(begin, length);\n var C = typedArraySpeciesConstructor(O);\n return new C(\n O.buffer,\n O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n );\n});\n\n\n/***/ }),\n\n/***/ 2974:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1229548__) {\n\n\"use strict\";\n\nvar global = __nested_webpack_require_1229548__(7854);\nvar apply = __nested_webpack_require_1229548__(2104);\nvar ArrayBufferViewCore = __nested_webpack_require_1229548__(2094);\nvar fails = __nested_webpack_require_1229548__(7293);\nvar arraySlice = __nested_webpack_require_1229548__(206);\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n return apply(\n $toLocaleString,\n TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this),\n arraySlice(arguments)\n );\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 5016:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1230771__) {\n\n\"use strict\";\n\nvar exportTypedArrayMethod = (__nested_webpack_require_1230771__(2094).exportTypedArrayMethod);\nvar fails = __nested_webpack_require_1230771__(7293);\nvar global = __nested_webpack_require_1230771__(7854);\nvar uncurryThis = __nested_webpack_require_1230771__(1702);\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar join = uncurryThis([].join);\n\nif (fails(function () { arrayToString.call({}); })) {\n arrayToString = function toString() {\n return join(this);\n };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n\n\n/***/ }),\n\n/***/ 8255:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1231658__) {\n\nvar createTypedArrayConstructor = __nested_webpack_require_1231658__(9843);\n\n// `Uint16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint16', function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n\n/***/ 9135:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1232088__) {\n\nvar createTypedArrayConstructor = __nested_webpack_require_1232088__(9843);\n\n// `Uint32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint32', function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n\n/***/ 2472:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1232518__) {\n\nvar createTypedArrayConstructor = __nested_webpack_require_1232518__(9843);\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n\n/***/ 9743:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1232945__) {\n\nvar createTypedArrayConstructor = __nested_webpack_require_1232945__(9843);\n\n// `Uint8ClampedArray` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n\n\n/***/ }),\n\n/***/ 8628:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1233392__) {\n\n// TODO: Remove from `core-js@4`\n__nested_webpack_require_1233392__(9170);\n\n\n/***/ }),\n\n/***/ 5743:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1233568__) {\n\n// TODO: Remove from `core-js@4`\n__nested_webpack_require_1233568__(5837);\n\n\n/***/ }),\n\n/***/ 7314:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1233744__) {\n\n// TODO: Remove from `core-js@4`\n__nested_webpack_require_1233744__(7922);\n\n\n/***/ }),\n\n/***/ 6290:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1233920__) {\n\n// TODO: Remove from `core-js@4`\n__nested_webpack_require_1233920__(4668);\n\n\n/***/ }),\n\n/***/ 7479:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1234096__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1234096__(2109);\nvar newPromiseCapabilityModule = __nested_webpack_require_1234096__(8523);\nvar perform = __nested_webpack_require_1234096__(2534);\n\n// `Promise.try` method\n// https://github.com/tc39/proposal-promise-try\n$({ target: 'Promise', stat: true }, {\n 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapabilityModule.f(this);\n var result = perform(callbackfn);\n (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n return promiseCapability.promise;\n }\n});\n\n\n/***/ }),\n\n/***/ 3728:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1234745__) {\n\n// TODO: Remove from `core-js@4`\n__nested_webpack_require_1234745__(6373);\n\n\n/***/ }),\n\n/***/ 4747:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1234921__) {\n\nvar global = __nested_webpack_require_1234921__(7854);\nvar DOMIterables = __nested_webpack_require_1234921__(8324);\nvar DOMTokenListPrototype = __nested_webpack_require_1234921__(8509);\nvar forEach = __nested_webpack_require_1234921__(8533);\nvar createNonEnumerableProperty = __nested_webpack_require_1234921__(8880);\n\nvar handlePrototype = function (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n if (DOMIterables[COLLECTION_NAME]) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n\n\n/***/ }),\n\n/***/ 3948:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1235842__) {\n\nvar global = __nested_webpack_require_1235842__(7854);\nvar DOMIterables = __nested_webpack_require_1235842__(8324);\nvar DOMTokenListPrototype = __nested_webpack_require_1235842__(8509);\nvar ArrayIteratorMethods = __nested_webpack_require_1235842__(6992);\nvar createNonEnumerableProperty = __nested_webpack_require_1235842__(8880);\nvar wellKnownSymbol = __nested_webpack_require_1235842__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n\n\n/***/ }),\n\n/***/ 3753:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __nested_webpack_require_1237625__) {\n\n\"use strict\";\n\nvar $ = __nested_webpack_require_1237625__(2109);\nvar call = __nested_webpack_require_1237625__(6916);\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n toJSON: function toJSON() {\n return call(URL.prototype.toString, this);\n }\n});\n\n\n/***/ }),\n\n/***/ 1150:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1238032__) {\n\nvar parent = __nested_webpack_require_1238032__(7633);\n__nested_webpack_require_1238032__(3948);\n\nmodule.exports = parent;\n\n\n/***/ }),\n\n/***/ 251:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1238223__) {\n\nvar objectKeys = __nested_webpack_require_1238223__(2215);\nvar isArguments = __nested_webpack_require_1238223__(2584);\nvar is = __nested_webpack_require_1238223__(609);\nvar isRegex = __nested_webpack_require_1238223__(8420);\nvar flags = __nested_webpack_require_1238223__(2847);\nvar isDate = __nested_webpack_require_1238223__(8923);\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n var opts = options || {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (opts.strict ? is(actual, expected) : actual === expected) {\n return true;\n }\n\n // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n return opts.strict ? is(actual, expected) : actual == expected;\n }\n\n /*\n * 7.4. For all other Object pairs, including Array objects, equivalence is\n * determined by having the same number of owned properties (as verified\n * with Object.prototype.hasOwnProperty.call), the same set of keys\n * (although not necessarily the same order), equivalent values for every\n * corresponding key, and an identical 'prototype' property. Note: this\n * accounts for both named and indexed properties on Arrays.\n */\n // eslint-disable-next-line no-use-before-define\n return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n return false;\n }\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') {\n return false;\n }\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n /* eslint max-statements: [2, 50] */\n var i, key;\n if (typeof a !== typeof b) { return false; }\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) { return false; }\n\n if (isArguments(a) !== isArguments(b)) { return false; }\n\n var aIsRegex = isRegex(a);\n var bIsRegex = isRegex(b);\n if (aIsRegex !== bIsRegex) { return false; }\n if (aIsRegex || bIsRegex) {\n return a.source === b.source && flags(a) === flags(b);\n }\n\n if (isDate(a) && isDate(b)) {\n return getTime.call(a) === getTime.call(b);\n }\n\n var aIsBuffer = isBuffer(a);\n var bIsBuffer = isBuffer(b);\n if (aIsBuffer !== bIsBuffer) { return false; }\n if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n if (a.length !== b.length) { return false; }\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) { return false; }\n }\n return true;\n }\n\n if (typeof a !== typeof b) { return false; }\n\n try {\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n } catch (e) { // happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) { return false; }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) { return false; }\n }\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) { return false; }\n }\n\n return true;\n}\n\nmodule.exports = deepEqual;\n\n\n/***/ }),\n\n/***/ 4289:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1241847__) {\n\n\"use strict\";\n\n\nvar keys = __nested_webpack_require_1241847__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar hasPropertyDescriptors = __nested_webpack_require_1241847__(1044)();\n\nvar supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value; // eslint-disable-line no-param-reassign\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n\n\n/***/ }),\n\n/***/ 8091:\n/***/ (function(module) {\n\n\"use strict\";\n/**\n * Code refactored from Mozilla Developer Network:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n\n\nfunction assign(target, firstSource) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n}\n\nfunction polyfill() {\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: assign\n });\n }\n}\n\nmodule.exports = {\n assign: assign,\n polyfill: polyfill\n};\n\n\n/***/ }),\n\n/***/ 7187:\n/***/ (function(module) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\n\n/***/ }),\n\n/***/ 2536:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1259435__) {\n\nvar ___EXPOSE_LOADER_IMPORT___ = __nested_webpack_require_1259435__(4275);\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = __nested_webpack_require_1259435__(7672);\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"pdfMake\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"pdfMake\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n\n\n/***/ }),\n\n/***/ 7672:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1259927__) {\n\n\"use strict\";\n\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n if (typeof globalThis === \"object\") {\n return globalThis;\n }\n\n var g;\n\n try {\n // This works if eval is allowed (see CSP)\n // eslint-disable-next-line no-new-func\n g = this || new Function(\"return this\")();\n } catch (e) {\n // This works if the window reference is available\n if (typeof window === \"object\") {\n return window;\n } // This works if the self reference is available\n\n\n if (typeof self === \"object\") {\n return self;\n } // This works if the global reference is available\n\n\n if (typeof __nested_webpack_require_1259927__.g !== \"undefined\") {\n return __nested_webpack_require_1259927__.g;\n }\n }\n\n return g;\n}();\n\n/***/ }),\n\n/***/ 4029:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1260756__) {\n\n\"use strict\";\n\n\nvar isCallable = __nested_webpack_require_1260756__(5320);\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (toStr.call(list) === '[object Array]') {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n\nmodule.exports = forEach;\n\n\n/***/ }),\n\n/***/ 7648:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n\n\n/***/ }),\n\n/***/ 8612:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1264136__) {\n\n\"use strict\";\n\n\nvar implementation = __nested_webpack_require_1264136__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n\n\n/***/ }),\n\n/***/ 5972:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar functionsHaveNames = function functionsHaveNames() {\n\treturn typeof function f() {}.name === 'string';\n};\n\nvar gOPD = Object.getOwnPropertyDescriptor;\nif (gOPD) {\n\ttry {\n\t\tgOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\tgOPD = null;\n\t}\n}\n\nfunctionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() {\n\tif (!functionsHaveNames() || !gOPD) {\n\t\treturn false;\n\t}\n\tvar desc = gOPD(function () {}, 'name');\n\treturn !!desc && !!desc.configurable;\n};\n\nvar $bind = Function.prototype.bind;\n\nfunctionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() {\n\treturn functionsHaveNames() && typeof $bind === 'function' && function f() {}.bind().name !== '';\n};\n\nmodule.exports = functionsHaveNames;\n\n\n/***/ }),\n\n/***/ 210:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1265186__) {\n\n\"use strict\";\n\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __nested_webpack_require_1265186__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __nested_webpack_require_1265186__(8612);\nvar hasOwn = __nested_webpack_require_1265186__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\n\n/***/ }),\n\n/***/ 1044:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1278020__) {\n\n\"use strict\";\n\n\nvar GetIntrinsic = __nested_webpack_require_1278020__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n\n\n/***/ }),\n\n/***/ 1405:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1278937__) {\n\n\"use strict\";\n\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __nested_webpack_require_1278937__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n\n\n/***/ }),\n\n/***/ 5419:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n\n\n/***/ }),\n\n/***/ 6410:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1281278__) {\n\n\"use strict\";\n\n\nvar hasSymbols = __nested_webpack_require_1281278__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n\n\n/***/ }),\n\n/***/ 7642:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1281537__) {\n\n\"use strict\";\n\n\nvar bind = __nested_webpack_require_1281537__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n\n\n/***/ }),\n\n/***/ 688:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1281766__) {\n\n\"use strict\";\n\nvar Buffer = (__nested_webpack_require_1281766__(7103).Buffer);\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n GB18030_CODE = -2,\n SEQ_START = -10,\n NODE_START = -1000,\n UNASSIGNED_NODE = new Array(0x100),\n DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName;\n if (!codecOptions)\n throw new Error(\"DBCS codec is called without the data.\")\n if (!codecOptions.table)\n throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n // Load tables.\n var mappingTable = codecOptions.table();\n\n\n // Decode tables: MBCS -> Unicode.\n\n // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n // Trie root is decodeTables[0].\n // Values: >= 0 -> unicode character code. can be > 0xFFFF\n // == UNASSIGNED -> unknown/unassigned sequence.\n // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n // <= NODE_START -> index of the next node in our trie to process next byte.\n // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq.\n this.decodeTables = [];\n this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n this.decodeTableSeq = [];\n\n // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n for (var i = 0; i < mappingTable.length; i++)\n this._addDecodeChunk(mappingTable[i]);\n\n // Load & create GB18030 tables when needed.\n if (typeof codecOptions.gb18030 === 'function') {\n this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n // Add GB18030 common decode nodes.\n var commonThirdByteNodeIdx = this.decodeTables.length;\n this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n var commonFourthByteNodeIdx = this.decodeTables.length;\n this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n // Fill out the tree\n var firstByteNode = this.decodeTables[0];\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];\n for (var j = 0x30; j <= 0x39; j++) {\n if (secondByteNode[j] === UNASSIGNED) {\n secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;\n } else if (secondByteNode[j] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 2\");\n }\n\n var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];\n for (var k = 0x81; k <= 0xFE; k++) {\n if (thirdByteNode[k] === UNASSIGNED) {\n thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;\n } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n continue;\n } else if (thirdByteNode[k] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 3\");\n }\n\n var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];\n for (var l = 0x30; l <= 0x39; l++) {\n if (fourthByteNode[l] === UNASSIGNED)\n fourthByteNode[l] = GB18030_CODE;\n }\n }\n }\n }\n }\n\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n \n // Encode tables: Unicode -> DBCS.\n\n // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n // == UNASSIGNED -> no conversion found. Output a default char.\n // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n this.encodeTable = [];\n \n // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n // means end of sequence (needed when one sequence is a strict subsequence of another).\n // Objects are kept separately from encodeTable to increase performance.\n this.encodeTableSeq = [];\n\n // Some chars can be decoded, but need not be encoded.\n var skipEncodeChars = {};\n if (codecOptions.encodeSkipVals)\n for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n var val = codecOptions.encodeSkipVals[i];\n if (typeof val === 'number')\n skipEncodeChars[val] = true;\n else\n for (var j = val.from; j <= val.to; j++)\n skipEncodeChars[j] = true;\n }\n \n // Use decode trie to recursively fill out encode tables.\n this._fillEncodeTable(0, 0, skipEncodeChars);\n\n // Add more encoding pairs when needed.\n if (codecOptions.encodeAdd) {\n for (var uChar in codecOptions.encodeAdd)\n if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n }\n\n this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n var bytes = [];\n for (; addr > 0; addr >>>= 8)\n bytes.push(addr & 0xFF);\n if (bytes.length == 0)\n bytes.push(0);\n\n var node = this.decodeTables[0];\n for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n var val = node[bytes[i]];\n\n if (val == UNASSIGNED) { // Create new node.\n node[bytes[i]] = NODE_START - this.decodeTables.length;\n this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n }\n else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val];\n }\n else\n throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n }\n return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n // First element of chunk is the hex mbcs code where we start.\n var curAddr = parseInt(chunk[0], 16);\n\n // Choose the decoding node where we'll write our chars.\n var writeTable = this._getDecodeTrieNode(curAddr);\n curAddr = curAddr & 0xFF;\n\n // Write all other elements of the chunk to the table.\n for (var k = 1; k < chunk.length; k++) {\n var part = chunk[k];\n if (typeof part === \"string\") { // String, write as-is.\n for (var l = 0; l < part.length;) {\n var code = part.charCodeAt(l++);\n if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++);\n if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n else\n throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n var len = 0xFFF - code + 2;\n var seq = [];\n for (var m = 0; m < len; m++)\n seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n this.decodeTableSeq.push(seq);\n }\n else\n writeTable[curAddr++] = code; // Basic char\n }\n } \n else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n var charCode = writeTable[curAddr - 1] + 1;\n for (var l = 0; l < part; l++)\n writeTable[curAddr++] = charCode++;\n }\n else\n throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n if (curAddr > 0xFF)\n throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n if (this.encodeTable[high] === undefined)\n this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n if (bucket[low] <= SEQ_START)\n this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n else if (bucket[low] == UNASSIGNED)\n bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n \n // Get the root of character tree according to first character of the sequence.\n var uCode = seq[0];\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n\n var node;\n if (bucket[low] <= SEQ_START) {\n // There's already a sequence with - use it.\n node = this.encodeTableSeq[SEQ_START-bucket[low]];\n }\n else {\n // There was no sequence object - allocate a new one.\n node = {};\n if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n bucket[low] = SEQ_START - this.encodeTableSeq.length;\n this.encodeTableSeq.push(node);\n }\n\n // Traverse the character tree, allocating new nodes as needed.\n for (var j = 1; j < seq.length-1; j++) {\n var oldVal = node[uCode];\n if (typeof oldVal === 'object')\n node = oldVal;\n else {\n node = node[uCode] = {}\n if (oldVal !== undefined)\n node[DEF_CHAR] = oldVal\n }\n }\n\n // Set the leaf to given dbcsCode.\n uCode = seq[seq.length-1];\n node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n var node = this.decodeTables[nodeIdx];\n var hasValues = false;\n var subNodeEmpty = {};\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i];\n var mbCode = prefix + i;\n if (skipEncodeChars[mbCode])\n continue;\n\n if (uCode >= 0) {\n this._setEncodeChar(uCode, mbCode);\n hasValues = true;\n } else if (uCode <= NODE_START) {\n var subNodeIdx = NODE_START - uCode;\n if (!subNodeEmpty[subNodeIdx]) { // Skip empty subtrees (they are too large in gb18030).\n var newPrefix = (mbCode << 8) >>> 0; // NOTE: '>>> 0' keeps 32-bit num positive.\n if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))\n hasValues = true;\n else\n subNodeEmpty[subNodeIdx] = true;\n }\n } else if (uCode <= SEQ_START) {\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n hasValues = true;\n }\n }\n return hasValues;\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n // Encoder state\n this.leadSurrogate = -1;\n this.seqObj = undefined;\n \n // Static data\n this.encodeTable = codec.encodeTable;\n this.encodeTableSeq = codec.encodeTableSeq;\n this.defaultCharSingleByte = codec.defCharSB;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n leadSurrogate = this.leadSurrogate,\n seqObj = this.seqObj, nextChar = -1,\n i = 0, j = 0;\n\n while (true) {\n // 0. Get next character.\n if (nextChar === -1) {\n if (i == str.length) break;\n var uCode = str.charCodeAt(i++);\n }\n else {\n var uCode = nextChar;\n nextChar = -1; \n }\n\n // 1. Handle surrogates.\n if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n if (uCode < 0xDC00) { // We've got lead surrogate.\n if (leadSurrogate === -1) {\n leadSurrogate = uCode;\n continue;\n } else {\n leadSurrogate = uCode;\n // Double lead surrogate found.\n uCode = UNASSIGNED;\n }\n } else { // We've got trail surrogate.\n if (leadSurrogate !== -1) {\n uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n leadSurrogate = -1;\n } else {\n // Incomplete surrogate pair - only trail surrogate found.\n uCode = UNASSIGNED;\n }\n \n }\n }\n else if (leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n leadSurrogate = -1;\n }\n\n // 2. Convert uCode character.\n var dbcsCode = UNASSIGNED;\n if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n var resCode = seqObj[uCode];\n if (typeof resCode === 'object') { // Sequence continues.\n seqObj = resCode;\n continue;\n\n } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n dbcsCode = resCode;\n\n } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n // Try default character for this sequence\n resCode = seqObj[DEF_CHAR];\n if (resCode !== undefined) {\n dbcsCode = resCode; // Found. Write it.\n nextChar = uCode; // Current character will be written too in the next iteration.\n\n } else {\n // TODO: What if we have no default? (resCode == undefined)\n // Then, we should write first char of the sequence as-is and try the rest recursively.\n // Didn't do it for now because no encoding has this situation yet.\n // Currently, just skip the sequence and write current char.\n }\n }\n seqObj = undefined;\n }\n else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8];\n if (subtable !== undefined)\n dbcsCode = subtable[uCode & 0xFF];\n \n if (dbcsCode <= SEQ_START) { // Sequence start\n seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n continue;\n }\n\n if (dbcsCode == UNASSIGNED && this.gb18030) {\n // Use GB18030 algorithm to find character(s) to write.\n var idx = findIdx(this.gb18030.uChars, uCode);\n if (idx != -1) {\n var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n newBuf[j++] = 0x30 + dbcsCode;\n continue;\n }\n }\n }\n\n // 3. Write dbcsCode character.\n if (dbcsCode === UNASSIGNED)\n dbcsCode = this.defaultCharSingleByte;\n \n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n else if (dbcsCode < 0x1000000) {\n newBuf[j++] = dbcsCode >> 16;\n newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n } else {\n newBuf[j++] = dbcsCode >>> 24;\n newBuf[j++] = (dbcsCode >>> 16) & 0xFF;\n newBuf[j++] = (dbcsCode >>> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n }\n }\n\n this.seqObj = seqObj;\n this.leadSurrogate = leadSurrogate;\n return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n if (this.leadSurrogate === -1 && this.seqObj === undefined)\n return; // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10), j = 0;\n\n if (this.seqObj) { // We're in the sequence.\n var dbcsCode = this.seqObj[DEF_CHAR];\n if (dbcsCode !== undefined) { // Write beginning of the sequence.\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n } else {\n // See todo above.\n }\n this.seqObj = undefined;\n }\n\n if (this.leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n newBuf[j++] = this.defaultCharSingleByte;\n this.leadSurrogate = -1;\n }\n \n return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n // Decoder state\n this.nodeIdx = 0;\n this.prevBytes = [];\n\n // Static data\n this.decodeTables = codec.decodeTables;\n this.decodeTableSeq = codec.decodeTableSeq;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n var newBuf = Buffer.alloc(buf.length*2),\n nodeIdx = this.nodeIdx, \n prevBytes = this.prevBytes, prevOffset = this.prevBytes.length,\n seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence.\n uCode;\n\n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset];\n\n // Lookup in current trie node.\n var uCode = this.decodeTables[nodeIdx][curByte];\n\n if (uCode >= 0) { \n // Normal character, just use it.\n }\n else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n uCode = this.defaultCharUnicode.charCodeAt(0);\n i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n }\n else if (uCode === GB18030_CODE) {\n if (i >= 3) {\n var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30);\n } else {\n var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + \n (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + \n (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + \n (curByte-0x30);\n }\n var idx = findIdx(this.gb18030.gbChars, ptr);\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n }\n else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode;\n continue;\n }\n else if (uCode <= SEQ_START) { // Output a sequence of chars.\n var seq = this.decodeTableSeq[SEQ_START - uCode];\n for (var k = 0; k < seq.length - 1; k++) {\n uCode = seq[k];\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n }\n uCode = seq[seq.length-1];\n }\n else\n throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n // Write the character to buffer, handling higher planes using surrogate pair.\n if (uCode >= 0x10000) { \n uCode -= 0x10000;\n var uCodeLead = 0xD800 | (uCode >> 10);\n newBuf[j++] = uCodeLead & 0xFF;\n newBuf[j++] = uCodeLead >> 8;\n\n uCode = 0xDC00 | (uCode & 0x3FF);\n }\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n\n // Reset trie node.\n nodeIdx = 0; seqStart = i+1;\n }\n\n this.nodeIdx = nodeIdx;\n this.prevBytes = (seqStart >= 0)\n ? Array.prototype.slice.call(buf, seqStart)\n : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));\n\n return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n var ret = '';\n\n // Try to parse all remaining chars.\n while (this.prevBytes.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode;\n var bytesArr = this.prevBytes.slice(1);\n\n // Parse remaining as usual.\n this.prevBytes = [];\n this.nodeIdx = 0;\n if (bytesArr.length > 0)\n ret += this.write(bytesArr);\n }\n\n this.prevBytes = [];\n this.nodeIdx = 0;\n return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n if (table[0] > val)\n return -1;\n\n var l = 0, r = table.length;\n while (l < r-1) { // always table[l] <= val < table[r]\n var mid = l + ((r-l+1) >> 1);\n if (table[mid] <= val)\n l = mid;\n else\n r = mid;\n }\n return l;\n}\n\n\n\n/***/ }),\n\n/***/ 5990:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1304935__) {\n\n\"use strict\";\n\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n \n // == Japanese/ShiftJIS ====================================================\n // All japanese encodings are based on JIS X set of standards:\n // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.\n // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n // Has several variations in 1978, 1983, 1990 and 1997.\n // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n // 2 planes, first is superset of 0208, second - revised 0212.\n // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n // Byte encodings are:\n // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.\n // 0x00-0x7F - lower part of 0201\n // 0x8E, 0xA1-0xDF - upper part of 0201\n // (0xA1-0xFE)x2 - 0208 plane (94x94).\n // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n // Used as-is in ISO2022 family.\n // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n // 0201-1976 Roman, 0208-1978, 0208-1983.\n // * ISO2022-JP-1: Adds esc seq for 0212-1990.\n // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n // * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n //\n // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n //\n // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n 'shiftjis': {\n type: '_dbcs',\n table: function() { return __nested_webpack_require_1304935__(7014) },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n },\n 'csshiftjis': 'shiftjis',\n 'mskanji': 'shiftjis',\n 'sjis': 'shiftjis',\n 'windows31j': 'shiftjis',\n 'ms31j': 'shiftjis',\n 'xsjis': 'shiftjis',\n 'windows932': 'shiftjis',\n 'ms932': 'shiftjis',\n '932': 'shiftjis',\n 'cp932': 'shiftjis',\n\n 'eucjp': {\n type: '_dbcs',\n table: function() { return __nested_webpack_require_1304935__(5633) },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n },\n\n // TODO: KDDI extension to Shift_JIS\n // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n // == Chinese/GBK ==========================================================\n // http://en.wikipedia.org/wiki/GBK\n // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n 'gb2312': 'cp936',\n 'gb231280': 'cp936',\n 'gb23121980': 'cp936',\n 'csgb2312': 'cp936',\n 'csiso58gb231280': 'cp936',\n 'euccn': 'cp936',\n\n // Microsoft's CP936 is a subset and approximation of GBK.\n 'windows936': 'cp936',\n 'ms936': 'cp936',\n '936': 'cp936',\n 'cp936': {\n type: '_dbcs',\n table: function() { return __nested_webpack_require_1304935__(3336) },\n },\n\n // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n 'gbk': {\n type: '_dbcs',\n table: function() { return (__nested_webpack_require_1304935__(3336).concat)(__nested_webpack_require_1304935__(4346)) },\n },\n 'xgbk': 'gbk',\n 'isoir58': 'gbk',\n\n // GB18030 is an algorithmic extension of GBK.\n // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n // http://icu-project.org/docs/papers/gb18030.html\n // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n 'gb18030': {\n type: '_dbcs',\n table: function() { return (__nested_webpack_require_1304935__(3336).concat)(__nested_webpack_require_1304935__(4346)) },\n gb18030: function() { return __nested_webpack_require_1304935__(6258) },\n encodeSkipVals: [0x80],\n encodeAdd: {'€': 0xA2E3},\n },\n\n 'chinese': 'gb18030',\n\n\n // == Korean ===============================================================\n // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n 'windows949': 'cp949',\n 'ms949': 'cp949',\n '949': 'cp949',\n 'cp949': {\n type: '_dbcs',\n table: function() { return __nested_webpack_require_1304935__(7348) },\n },\n\n 'cseuckr': 'cp949',\n 'csksc56011987': 'cp949',\n 'euckr': 'cp949',\n 'isoir149': 'cp949',\n 'korean': 'cp949',\n 'ksc56011987': 'cp949',\n 'ksc56011989': 'cp949',\n 'ksc5601': 'cp949',\n\n\n // == Big5/Taiwan/Hong Kong ================================================\n // There are lots of tables for Big5 and cp950. Please see the following links for history:\n // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n // Variations, in roughly number of defined chars:\n // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n // * Big5-2003 (Taiwan standard) almost superset of cp950.\n // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n // Plus, it has 4 combining sequences.\n // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n // Implementations are not consistent within browsers; sometimes labeled as just big5.\n // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n // \n // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n 'windows950': 'cp950',\n 'ms950': 'cp950',\n '950': 'cp950',\n 'cp950': {\n type: '_dbcs',\n table: function() { return __nested_webpack_require_1304935__(4284) },\n },\n\n // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n 'big5': 'big5hkscs',\n 'big5hkscs': {\n type: '_dbcs',\n table: function() { return (__nested_webpack_require_1304935__(4284).concat)(__nested_webpack_require_1304935__(3480)) },\n encodeSkipVals: [\n // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n 0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n 0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n 0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n 0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n 0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce,\n ],\n },\n\n 'cnbig5': 'big5hkscs',\n 'csbig5': 'big5hkscs',\n 'xxbig5': 'big5hkscs',\n};\n\n\n/***/ }),\n\n/***/ 6934:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1314342__) {\n\n\"use strict\";\n\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n __nested_webpack_require_1314342__(1025),\n __nested_webpack_require_1314342__(7688),\n __nested_webpack_require_1314342__(1279),\n __nested_webpack_require_1314342__(758),\n __nested_webpack_require_1314342__(9068),\n __nested_webpack_require_1314342__(3769),\n __nested_webpack_require_1314342__(7018),\n __nested_webpack_require_1314342__(688),\n __nested_webpack_require_1314342__(5990),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n var module = modules[i];\n for (var enc in module)\n if (Object.prototype.hasOwnProperty.call(module, enc))\n exports[enc] = module[enc];\n}\n\n\n/***/ }),\n\n/***/ 1025:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1315202__) {\n\n\"use strict\";\n\nvar Buffer = (__nested_webpack_require_1315202__(7103).Buffer);\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n // Encodings\n utf8: { type: \"_internal\", bomAware: true},\n cesu8: { type: \"_internal\", bomAware: true},\n unicode11utf8: \"utf8\",\n\n ucs2: { type: \"_internal\", bomAware: true},\n utf16le: \"ucs2\",\n\n binary: { type: \"_internal\" },\n base64: { type: \"_internal\" },\n hex: { type: \"_internal\" },\n\n // Codec.\n _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n this.enc = codecOptions.encodingName;\n this.bomAware = codecOptions.bomAware;\n\n if (this.enc === \"base64\")\n this.encoder = InternalEncoderBase64;\n else if (this.enc === \"cesu8\") {\n this.enc = \"utf8\"; // Use utf8 for decoding.\n this.encoder = InternalEncoderCesu8;\n\n // Add decoder for versions of Node not supporting CESU-8\n if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') {\n this.decoder = InternalDecoderCesu8;\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n }\n }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = (__nested_webpack_require_1315202__(2553)/* .StringDecoder */ .s);\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n this.decoder = new StringDecoder(codec.enc);\n}\n\nInternalDecoder.prototype.write = function(buf) {\n if (!Buffer.isBuffer(buf)) {\n buf = Buffer.from(buf);\n }\n\n return this.decoder.write(buf);\n}\n\nInternalDecoder.prototype.end = function() {\n return this.decoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n str = this.prevStr + str;\n var completeQuads = str.length - (str.length % 4);\n this.prevStr = str.slice(completeQuads);\n str = str.slice(0, completeQuads);\n\n return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n for (var i = 0; i < str.length; i++) {\n var charCode = str.charCodeAt(i);\n // Naive implementation, but it works because CESU-8 is especially easy\n // to convert from UTF-16 (which all JS strings are encoded in).\n if (charCode < 0x80)\n buf[bufIdx++] = charCode;\n else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n else { // charCode will always be < 0x10000 in javascript.\n buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n }\n return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n this.acc = 0;\n this.contBytes = 0;\n this.accBytes = 0;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n res = '';\n for (var i = 0; i < buf.length; i++) {\n var curByte = buf[i];\n if ((curByte & 0xC0) !== 0x80) { // Leading byte\n if (contBytes > 0) { // Previous code is invalid\n res += this.defaultCharUnicode;\n contBytes = 0;\n }\n\n if (curByte < 0x80) { // Single-byte code\n res += String.fromCharCode(curByte);\n } else if (curByte < 0xE0) { // Two-byte code\n acc = curByte & 0x1F;\n contBytes = 1; accBytes = 1;\n } else if (curByte < 0xF0) { // Three-byte code\n acc = curByte & 0x0F;\n contBytes = 2; accBytes = 1;\n } else { // Four or more are not supported for CESU-8.\n res += this.defaultCharUnicode;\n }\n } else { // Continuation byte\n if (contBytes > 0) { // We're waiting for it.\n acc = (acc << 6) | (curByte & 0x3f);\n contBytes--; accBytes++;\n if (contBytes === 0) {\n // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n if (accBytes === 2 && acc < 0x80 && acc > 0)\n res += this.defaultCharUnicode;\n else if (accBytes === 3 && acc < 0x800)\n res += this.defaultCharUnicode;\n else\n // Actually add character.\n res += String.fromCharCode(acc);\n }\n } else { // Unexpected continuation byte\n res += this.defaultCharUnicode;\n }\n }\n }\n this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n var res = 0;\n if (this.contBytes > 0)\n res += this.defaultCharUnicode;\n return res;\n}\n\n\n/***/ }),\n\n/***/ 9068:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1321624__) {\n\n\"use strict\";\n\nvar Buffer = (__nested_webpack_require_1321624__(7103).Buffer);\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n if (!codecOptions)\n throw new Error(\"SBCS codec is called without the data.\")\n \n // Prepare char buffer for decoding.\n if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n \n if (codecOptions.chars.length === 128) {\n var asciiString = \"\";\n for (var i = 0; i < 128; i++)\n asciiString += String.fromCharCode(i);\n codecOptions.chars = asciiString + codecOptions.chars;\n }\n\n this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n \n // Encoding buffer.\n var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n for (var i = 0; i < codecOptions.chars.length; i++)\n encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length);\n for (var i = 0; i < str.length; i++)\n buf[i] = this.encodeBuf[str.charCodeAt(i)];\n \n return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n var decodeBuf = this.decodeBuf;\n var newBuf = Buffer.alloc(buf.length*2);\n var idx1 = 0, idx2 = 0;\n for (var i = 0; i < buf.length; i++) {\n idx1 = buf[i]*2; idx2 = i*2;\n newBuf[idx2] = decodeBuf[idx1];\n newBuf[idx2+1] = decodeBuf[idx1+1];\n }\n return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n\n\n/***/ }),\n\n/***/ 7018:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n \"437\": \"cp437\",\n \"737\": \"cp737\",\n \"775\": \"cp775\",\n \"850\": \"cp850\",\n \"852\": \"cp852\",\n \"855\": \"cp855\",\n \"856\": \"cp856\",\n \"857\": \"cp857\",\n \"858\": \"cp858\",\n \"860\": \"cp860\",\n \"861\": \"cp861\",\n \"862\": \"cp862\",\n \"863\": \"cp863\",\n \"864\": \"cp864\",\n \"865\": \"cp865\",\n \"866\": \"cp866\",\n \"869\": \"cp869\",\n \"874\": \"windows874\",\n \"922\": \"cp922\",\n \"1046\": \"cp1046\",\n \"1124\": \"cp1124\",\n \"1125\": \"cp1125\",\n \"1129\": \"cp1129\",\n \"1133\": \"cp1133\",\n \"1161\": \"cp1161\",\n \"1162\": \"cp1162\",\n \"1163\": \"cp1163\",\n \"1250\": \"windows1250\",\n \"1251\": \"windows1251\",\n \"1252\": \"windows1252\",\n \"1253\": \"windows1253\",\n \"1254\": \"windows1254\",\n \"1255\": \"windows1255\",\n \"1256\": \"windows1256\",\n \"1257\": \"windows1257\",\n \"1258\": \"windows1258\",\n \"28591\": \"iso88591\",\n \"28592\": \"iso88592\",\n \"28593\": \"iso88593\",\n \"28594\": \"iso88594\",\n \"28595\": \"iso88595\",\n \"28596\": \"iso88596\",\n \"28597\": \"iso88597\",\n \"28598\": \"iso88598\",\n \"28599\": \"iso88599\",\n \"28600\": \"iso885910\",\n \"28601\": \"iso885911\",\n \"28603\": \"iso885913\",\n \"28604\": \"iso885914\",\n \"28605\": \"iso885915\",\n \"28606\": \"iso885916\",\n \"windows874\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת���\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œں ،¢£¤¥¦§¨©ھ«¬®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \" Ą˘Ł¤ĽŚ§¨ŠŞŤŹŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \" Ħ˘£¤�Ĥ§¨İŞĞĴ�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ĄĸŖ¤Ĩϧ¨ŠĒĢŦޝ°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ЁЂЃЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ���¤�������،�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ‘’£€₯¦§¨©ͺ«¬�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \" �¢£¤¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת���\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ĄĒĢĪĨͧĻĐŠŦŽŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \" กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ”¢£¤„¦§Ø©Ŗ«¬®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \" Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ¡¢£€¥Š§š©ª«¬®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ĄąŁ€„Чš©Ș«ŹźŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’±“¾¶§÷„°∙·¹³²■ \"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№ыЫзЗшШэЭщЩчЧ§■ \"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´±�¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm863\": \"cp863\",\n \"csibm863\": \"cp863\",\n \"cp864\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�\"\n },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄±υφχ§ψ΅°¨ωϋΰώ■ \"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ¡¢£¤¥¦§¨©ª«¬®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ЁЂҐЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ¡¢£¤¥¦§œ©ª«¬®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ¡¢£€¥¦§œ©ª«¬®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \" �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\n },\n \"iso646cn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"iso646jp\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \" ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n }\n}\n\n/***/ }),\n\n/***/ 3769:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n // Not supported by iconv, not sure why.\n \"10029\": \"maccenteuro\",\n \"maccenteuro\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n },\n\n \"808\": \"cp808\",\n \"ibm808\": \"cp808\",\n \"cp808\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n },\n\n \"mik\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n\n \"cp720\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\x80\\x81éâ\\x84à\\x86çêëèïî\\x8d\\x8e\\x8f\\x90\\u0651\\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650≈°∙·√ⁿ²■\\u00a0\"\n },\n\n // Aliases of generated encodings.\n \"ascii8bit\": \"ascii\",\n \"usascii\": \"ascii\",\n \"ansix34\": \"ascii\",\n \"ansix341968\": \"ascii\",\n \"ansix341986\": \"ascii\",\n \"csascii\": \"ascii\",\n \"cp367\": \"ascii\",\n \"ibm367\": \"ascii\",\n \"isoir6\": \"ascii\",\n \"iso646us\": \"ascii\",\n \"iso646irv\": \"ascii\",\n \"us\": \"ascii\",\n\n \"latin1\": \"iso88591\",\n \"latin2\": \"iso88592\",\n \"latin3\": \"iso88593\",\n \"latin4\": \"iso88594\",\n \"latin5\": \"iso88599\",\n \"latin6\": \"iso885910\",\n \"latin7\": \"iso885913\",\n \"latin8\": \"iso885914\",\n \"latin9\": \"iso885915\",\n \"latin10\": \"iso885916\",\n\n \"csisolatin1\": \"iso88591\",\n \"csisolatin2\": \"iso88592\",\n \"csisolatin3\": \"iso88593\",\n \"csisolatin4\": \"iso88594\",\n \"csisolatincyrillic\": \"iso88595\",\n \"csisolatinarabic\": \"iso88596\",\n \"csisolatingreek\" : \"iso88597\",\n \"csisolatinhebrew\": \"iso88598\",\n \"csisolatin5\": \"iso88599\",\n \"csisolatin6\": \"iso885910\",\n\n \"l1\": \"iso88591\",\n \"l2\": \"iso88592\",\n \"l3\": \"iso88593\",\n \"l4\": \"iso88594\",\n \"l5\": \"iso88599\",\n \"l6\": \"iso885910\",\n \"l7\": \"iso885913\",\n \"l8\": \"iso885914\",\n \"l9\": \"iso885915\",\n \"l10\": \"iso885916\",\n\n \"isoir14\": \"iso646jp\",\n \"isoir57\": \"iso646cn\",\n \"isoir100\": \"iso88591\",\n \"isoir101\": \"iso88592\",\n \"isoir109\": \"iso88593\",\n \"isoir110\": \"iso88594\",\n \"isoir144\": \"iso88595\",\n \"isoir127\": \"iso88596\",\n \"isoir126\": \"iso88597\",\n \"isoir138\": \"iso88598\",\n \"isoir148\": \"iso88599\",\n \"isoir157\": \"iso885910\",\n \"isoir166\": \"tis620\",\n \"isoir179\": \"iso885913\",\n \"isoir199\": \"iso885914\",\n \"isoir203\": \"iso885915\",\n \"isoir226\": \"iso885916\",\n\n \"cp819\": \"iso88591\",\n \"ibm819\": \"iso88591\",\n\n \"cyrillic\": \"iso88595\",\n\n \"arabic\": \"iso88596\",\n \"arabic8\": \"iso88596\",\n \"ecma114\": \"iso88596\",\n \"asmo708\": \"iso88596\",\n\n \"greek\" : \"iso88597\",\n \"greek8\" : \"iso88597\",\n \"ecma118\" : \"iso88597\",\n \"elot928\" : \"iso88597\",\n\n \"hebrew\": \"iso88598\",\n \"hebrew8\": \"iso88598\",\n\n \"turkish\": \"iso88599\",\n \"turkish8\": \"iso88599\",\n\n \"thai\": \"iso885911\",\n \"thai8\": \"iso885911\",\n\n \"celtic\": \"iso885914\",\n \"celtic8\": \"iso885914\",\n \"isoceltic\": \"iso885914\",\n\n \"tis6200\": \"tis620\",\n \"tis62025291\": \"tis620\",\n \"tis62025330\": \"tis620\",\n\n \"10000\": \"macroman\",\n \"10006\": \"macgreek\",\n \"10007\": \"maccyrillic\",\n \"10079\": \"maciceland\",\n \"10081\": \"macturkish\",\n\n \"cspc8codepage437\": \"cp437\",\n \"cspc775baltic\": \"cp775\",\n \"cspc850multilingual\": \"cp850\",\n \"cspcp852\": \"cp852\",\n \"cspc862latinhebrew\": \"cp862\",\n \"cpgr\": \"cp869\",\n\n \"msee\": \"cp1250\",\n \"mscyrl\": \"cp1251\",\n \"msansi\": \"cp1252\",\n \"msgreek\": \"cp1253\",\n \"msturk\": \"cp1254\",\n \"mshebr\": \"cp1255\",\n \"msarab\": \"cp1256\",\n \"winbaltrim\": \"cp1257\",\n\n \"cp20866\": \"koi8r\",\n \"20866\": \"koi8r\",\n \"ibm878\": \"koi8r\",\n \"cskoi8r\": \"koi8r\",\n\n \"cp21866\": \"koi8u\",\n \"21866\": \"koi8u\",\n \"ibm1168\": \"koi8u\",\n\n \"strk10482002\": \"rk1048\",\n\n \"tcvn5712\": \"tcvn\",\n \"tcvn57121\": \"tcvn\",\n\n \"gb198880\": \"iso646cn\",\n \"cn\": \"iso646cn\",\n\n \"csiso14jisc6220ro\": \"iso646jp\",\n \"jisc62201969ro\": \"iso646jp\",\n \"jp\": \"iso646jp\",\n\n \"cshproman8\": \"hproman8\",\n \"r8\": \"hproman8\",\n \"roman8\": \"hproman8\",\n \"xroman8\": \"hproman8\",\n \"ibm1051\": \"hproman8\",\n\n \"mac\": \"macintosh\",\n \"csmacintosh\": \"macintosh\",\n};\n\n\n\n/***/ }),\n\n/***/ 1279:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1347339__) {\n\n\"use strict\";\n\nvar Buffer = (__nested_webpack_require_1347339__(7103).Buffer);\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n var buf = Buffer.from(str, 'ucs2');\n for (var i = 0; i < buf.length; i += 2) {\n var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n }\n return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n if (buf.length == 0)\n return '';\n\n var buf2 = Buffer.alloc(buf.length + 1),\n i = 0, j = 0;\n\n if (this.overflowByte !== -1) {\n buf2[0] = buf[0];\n buf2[1] = this.overflowByte;\n i = 1; j = 2;\n }\n\n for (; i < buf.length-1; i += 2, j+= 2) {\n buf2[j] = buf[i+1];\n buf2[j+1] = buf[i];\n }\n\n this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n this.overflowByte = -1;\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n options = options || {};\n if (options.addBOM === undefined)\n options.addBOM = true;\n this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n this.decoder = null;\n this.initialBufs = [];\n this.initialBufsLen = 0;\n\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf);\n this.initialBufsLen += buf.length;\n \n if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n var trail = this.decoder.end();\n if (trail)\n resStr += trail;\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n return this.decoder.end();\n}\n\nfunction detectEncoding(bufs, defaultEncoding) {\n var b = [];\n var charsProcessed = 0;\n var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE.\n\n outer_loop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i];\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j]);\n if (b.length === 2) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le';\n if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be';\n }\n\n if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;\n if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;\n\n b.length = 0;\n charsProcessed++;\n\n if (charsProcessed >= 100) {\n break outer_loop;\n }\n }\n }\n }\n\n // Make decisions.\n // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n // So, we count ASCII as if it was LE or BE, and decide from that.\n if (asciiCharsBE > asciiCharsLE) return 'utf-16be';\n if (asciiCharsBE < asciiCharsLE) return 'utf-16le';\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || 'utf-16le';\n}\n\n\n\n\n/***/ }),\n\n/***/ 7688:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1352945__) {\n\n\"use strict\";\n\n\nvar Buffer = (__nested_webpack_require_1352945__(7103).Buffer);\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec;\n\nfunction Utf32Codec(codecOptions, iconv) {\n this.iconv = iconv;\n this.bomAware = true;\n this.isLE = codecOptions.isLE;\n}\n\nexports.utf32le = { type: '_utf32', isLE: true };\nexports.utf32be = { type: '_utf32', isLE: false };\n\n// Aliases\nexports.ucs4le = 'utf32le';\nexports.ucs4be = 'utf32be';\n\nUtf32Codec.prototype.encoder = Utf32Encoder;\nUtf32Codec.prototype.decoder = Utf32Decoder;\n\n// -- Encoding\n\nfunction Utf32Encoder(options, codec) {\n this.isLE = codec.isLE;\n this.highSurrogate = 0;\n}\n\nUtf32Encoder.prototype.write = function(str) {\n var src = Buffer.from(str, 'ucs2');\n var dst = Buffer.alloc(src.length * 2);\n var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;\n var offset = 0;\n\n for (var i = 0; i < src.length; i += 2) {\n var code = src.readUInt16LE(i);\n var isHighSurrogate = (0xD800 <= code && code < 0xDC00);\n var isLowSurrogate = (0xDC00 <= code && code < 0xE000);\n\n if (this.highSurrogate) {\n if (isHighSurrogate || !isLowSurrogate) {\n // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n // (technically wrong, but expected by some applications, like Windows file names).\n write32.call(dst, this.highSurrogate, offset);\n offset += 4;\n }\n else {\n // Create 32-bit value from high and low surrogates;\n var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000;\n\n write32.call(dst, codepoint, offset);\n offset += 4;\n this.highSurrogate = 0;\n\n continue;\n }\n }\n\n if (isHighSurrogate)\n this.highSurrogate = code;\n else {\n // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n // unpaired high surrogates.\n write32.call(dst, code, offset);\n offset += 4;\n this.highSurrogate = 0;\n }\n }\n\n if (offset < dst.length)\n dst = dst.slice(0, offset);\n\n return dst;\n};\n\nUtf32Encoder.prototype.end = function() {\n // Treat any leftover high surrogate as a semi-valid independent character.\n if (!this.highSurrogate)\n return;\n\n var buf = Buffer.alloc(4);\n\n if (this.isLE)\n buf.writeUInt32LE(this.highSurrogate, 0);\n else\n buf.writeUInt32BE(this.highSurrogate, 0);\n\n this.highSurrogate = 0;\n\n return buf;\n};\n\n// -- Decoding\n\nfunction Utf32Decoder(options, codec) {\n this.isLE = codec.isLE;\n this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);\n this.overflow = [];\n}\n\nUtf32Decoder.prototype.write = function(src) {\n if (src.length === 0)\n return '';\n\n var i = 0;\n var codepoint = 0;\n var dst = Buffer.alloc(src.length + 4);\n var offset = 0;\n var isLE = this.isLE;\n var overflow = this.overflow;\n var badChar = this.badChar;\n\n if (overflow.length > 0) {\n for (; i < src.length && overflow.length < 4; i++)\n overflow.push(src[i]);\n \n if (overflow.length === 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n if (isLE) {\n codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24);\n } else {\n codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24);\n }\n overflow.length = 0;\n\n offset = _writeCodepoint(dst, offset, codepoint, badChar);\n }\n }\n\n // Main loop. Should be as optimized as possible.\n for (; i < src.length - 3; i += 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n if (isLE) {\n codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24);\n } else {\n codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24);\n }\n offset = _writeCodepoint(dst, offset, codepoint, badChar);\n }\n\n // Keep overflowing bytes.\n for (; i < src.length; i++) {\n overflow.push(src[i]);\n }\n\n return dst.slice(0, offset).toString('ucs2');\n};\n\nfunction _writeCodepoint(dst, offset, codepoint, badChar) {\n // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n if (codepoint < 0 || codepoint > 0x10FFFF) {\n // Not a valid Unicode codepoint\n codepoint = badChar;\n } \n\n // Ephemeral Planes: Write high surrogate.\n if (codepoint >= 0x10000) {\n codepoint -= 0x10000;\n\n var high = 0xD800 | (codepoint >> 10);\n dst[offset++] = high & 0xff;\n dst[offset++] = high >> 8;\n\n // Low surrogate is written below.\n var codepoint = 0xDC00 | (codepoint & 0x3FF);\n }\n\n // Write BMP char or low surrogate.\n dst[offset++] = codepoint & 0xff;\n dst[offset++] = codepoint >> 8;\n\n return offset;\n};\n\nUtf32Decoder.prototype.end = function() {\n this.overflow.length = 0;\n};\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec;\nexports.ucs4 = 'utf32';\n\nfunction Utf32AutoCodec(options, iconv) {\n this.iconv = iconv;\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder;\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder;\n\n// -- Encoding\n\nfunction Utf32AutoEncoder(options, codec) {\n options = options || {};\n\n if (options.addBOM === undefined)\n options.addBOM = true;\n\n this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options);\n}\n\nUtf32AutoEncoder.prototype.write = function(str) {\n return this.encoder.write(str);\n};\n\nUtf32AutoEncoder.prototype.end = function() {\n return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf32AutoDecoder(options, codec) {\n this.decoder = null;\n this.initialBufs = [];\n this.initialBufsLen = 0;\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf32AutoDecoder.prototype.write = function(buf) {\n if (!this.decoder) { \n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf);\n this.initialBufsLen += buf.length;\n\n if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.write(buf);\n};\n\nUtf32AutoDecoder.prototype.end = function() {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n var trail = this.decoder.end();\n if (trail)\n resStr += trail;\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.end();\n};\n\nfunction detectEncoding(bufs, defaultEncoding) {\n var b = [];\n var charsProcessed = 0;\n var invalidLE = 0, invalidBE = 0; // Number of invalid chars when decoded as LE or BE.\n var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE.\n\n outer_loop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i];\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j]);\n if (b.length === 4) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n return 'utf-32le';\n }\n if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n return 'utf-32be';\n }\n }\n\n if (b[0] !== 0 || b[1] > 0x10) invalidBE++;\n if (b[3] !== 0 || b[2] > 0x10) invalidLE++;\n\n if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;\n if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;\n\n b.length = 0;\n charsProcessed++;\n\n if (charsProcessed >= 100) {\n break outer_loop;\n }\n }\n }\n }\n\n // Make decisions.\n if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return 'utf-32be';\n if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return 'utf-32le';\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || 'utf-32le';\n}\n\n\n/***/ }),\n\n/***/ 758:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1363030__) {\n\n\"use strict\";\n\nvar Buffer = (__nested_webpack_require_1363030__(7103).Buffer);\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n // Naive implementation.\n // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n return \"+\" + (chunk === '+' ? '' : \n this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n + \"-\";\n }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n minusChar = '-'.charCodeAt(0),\n andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '+'\n if (buf[i] == plusChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64Chars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n res += \"+\";\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\");\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus is absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\");\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n// * Base64 part is started by \"&\" instead of \"+\"\n// * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n// * In Base64, \",\" is used instead of \"/\"\n// * Base64 must not be used to represent direct characters.\n// * No implicit shift back from Base64 (should always end with '-')\n// * String must end in non-shifted position.\n// * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = Buffer.alloc(6);\n this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n var inBase64 = this.inBase64,\n base64Accum = this.base64Accum,\n base64AccumIdx = this.base64AccumIdx,\n buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i);\n if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n if (inBase64) {\n if (base64AccumIdx > 0) {\n bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n inBase64 = false;\n }\n\n if (!inBase64) {\n buf[bufIdx++] = uChar; // Write direct character\n\n if (uChar === andChar) // Ampersand -> '&-'\n buf[bufIdx++] = minusChar;\n }\n\n } else { // Non-direct character\n if (!inBase64) {\n buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n inBase64 = true;\n }\n if (inBase64) {\n base64Accum[base64AccumIdx++] = uChar >> 8;\n base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n if (base64AccumIdx == base64Accum.length) {\n bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n base64AccumIdx = 0;\n }\n }\n }\n }\n\n this.inBase64 = inBase64;\n this.base64AccumIdx = base64AccumIdx;\n\n return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n var buf = Buffer.alloc(10), bufIdx = 0;\n if (this.inBase64) {\n if (this.base64AccumIdx > 0) {\n bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n this.base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n this.inBase64 = false;\n }\n\n return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '&'\n if (buf[i] == andChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n res += \"&\";\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, '/');\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus may be absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, '/');\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n\n\n/***/ }),\n\n/***/ 5395:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n this.encoder = encoder;\n this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n if (this.addBOM) {\n str = BOMChar + str;\n this.addBOM = false;\n }\n\n return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n this.decoder = decoder;\n this.pass = false;\n this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n var res = this.decoder.write(buf);\n if (this.pass || !res)\n return res;\n\n if (res[0] === BOMChar) {\n res = res.slice(1);\n if (typeof this.options.stripBOM === 'function')\n this.options.stripBOM();\n }\n\n this.pass = true;\n return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n return this.decoder.end();\n}\n\n\n\n/***/ }),\n\n/***/ 4914:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1373605__) {\n\n\"use strict\";\n\n\nvar Buffer = (__nested_webpack_require_1373605__(7103).Buffer);\n\nvar bomHandling = __nested_webpack_require_1373605__(5395),\n iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '�';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n str = \"\" + (str || \"\"); // Ensure string.\n\n var encoder = iconv.getEncoder(encoding, options);\n\n var res = encoder.write(str);\n var trail = encoder.end();\n \n return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n if (typeof buf === 'string') {\n if (!iconv.skipDecodeWarning) {\n console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n iconv.skipDecodeWarning = true;\n }\n\n buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n }\n\n var decoder = iconv.getDecoder(encoding, options);\n\n var res = decoder.write(buf);\n var trail = decoder.end();\n\n return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n try {\n iconv.getCodec(enc);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n if (!iconv.encodings)\n iconv.encodings = __nested_webpack_require_1373605__(6934); // Lazy load all encoding definitions.\n \n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n var enc = iconv._canonicalizeEncoding(encoding);\n\n // Traverse iconv.encodings to find actual codec.\n var codecOptions = {};\n while (true) {\n var codec = iconv._codecDataCache[enc];\n if (codec)\n return codec;\n\n var codecDef = iconv.encodings[enc];\n\n switch (typeof codecDef) {\n case \"string\": // Direct alias to other encoding.\n enc = codecDef;\n break;\n\n case \"object\": // Alias with options. Can be layered.\n for (var key in codecDef)\n codecOptions[key] = codecDef[key];\n\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n \n enc = codecDef.type;\n break;\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n\n // The codec function must load all tables and return object with .encoder and .decoder methods.\n // It'll be called only once (for each different options object).\n codec = new codecDef(codecOptions, iconv);\n\n iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n return codec;\n\n default:\n throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n }\n }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n encoder = new codec.encoder(options, codec);\n\n if (codec.bomAware && options && options.addBOM)\n encoder = new bomHandling.PrependBOM(encoder, options);\n\n return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n decoder = new codec.decoder(options, codec);\n\n if (codec.bomAware && !(options && options.stripBOM === false))\n decoder = new bomHandling.StripBOM(decoder, options);\n\n return decoder;\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {\n if (iconv.supportsStreams)\n return;\n\n // Dependency-inject stream module to create IconvLite stream classes.\n var streams = __nested_webpack_require_1373605__(8044)(stream_module);\n\n // Not public API yet, but expose the stream classes.\n iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;\n iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;\n\n // Streaming API.\n iconv.encodeStream = function encodeStream(encoding, options) {\n return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n }\n\n iconv.decodeStream = function decodeStream(encoding, options) {\n return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n }\n\n iconv.supportsStreams = true;\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar stream_module;\ntry {\n stream_module = __nested_webpack_require_1373605__(5832);\n} catch (e) {}\n\nif (stream_module && stream_module.Transform) {\n iconv.enableStreamingAPI(stream_module);\n\n} else {\n // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n iconv.encodeStream = iconv.decodeStream = function() {\n throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\");\n };\n}\n\nif (false) {}\n\n\n/***/ }),\n\n/***/ 8044:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1379859__) {\n\n\"use strict\";\n\n\nvar Buffer = (__nested_webpack_require_1379859__(7103).Buffer);\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), \n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function(stream_module) {\n var Transform = stream_module.Transform;\n\n // == Encoder stream =======================================================\n\n function IconvLiteEncoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n Transform.call(this, options);\n }\n\n IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n });\n\n IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n if (typeof chunk != 'string')\n return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteEncoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteEncoderStream.prototype.collect = function(cb) {\n var chunks = [];\n this.on('error', cb);\n this.on('data', function(chunk) { chunks.push(chunk); });\n this.on('end', function() {\n cb(null, Buffer.concat(chunks));\n });\n return this;\n }\n\n\n // == Decoder stream =======================================================\n\n function IconvLiteDecoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.encoding = this.encoding = 'utf8'; // We output strings.\n Transform.call(this, options);\n }\n\n IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n });\n\n IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))\n return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res, this.encoding);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteDecoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res, this.encoding); \n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteDecoderStream.prototype.collect = function(cb) {\n var res = '';\n this.on('error', cb);\n this.on('data', function(chunk) { res += chunk; });\n this.on('end', function() {\n cb(null, res);\n });\n return this;\n }\n\n return {\n IconvLiteEncoderStream: IconvLiteEncoderStream,\n IconvLiteDecoderStream: IconvLiteDecoderStream,\n };\n};\n\n\n/***/ }),\n\n/***/ 645:\n/***/ (function(__unused_webpack_module, exports) {\n\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n\n\n/***/ }),\n\n/***/ 5717:\n/***/ (function(module) {\n\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n\n\n/***/ }),\n\n/***/ 2584:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1386379__) {\n\n\"use strict\";\n\n\nvar hasToStringTag = __nested_webpack_require_1386379__(6410)();\nvar callBound = __nested_webpack_require_1386379__(1924);\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n\n\n/***/ }),\n\n/***/ 5320:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n\n\n/***/ }),\n\n/***/ 8923:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1390720__) {\n\n\"use strict\";\n\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __nested_webpack_require_1390720__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n\n\n/***/ }),\n\n/***/ 8662:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1391335__) {\n\n\"use strict\";\n\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = __nested_webpack_require_1391335__(6410)();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n\n\n/***/ }),\n\n/***/ 8611:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n\n\n/***/ }),\n\n/***/ 360:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1392600__) {\n\n\"use strict\";\n\n\nvar callBind = __nested_webpack_require_1392600__(5559);\nvar define = __nested_webpack_require_1392600__(4289);\n\nvar implementation = __nested_webpack_require_1392600__(8611);\nvar getPolyfill = __nested_webpack_require_1392600__(9415);\nvar shim = __nested_webpack_require_1392600__(6743);\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n\n\n/***/ }),\n\n/***/ 9415:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1393174__) {\n\n\"use strict\";\n\n\nvar implementation = __nested_webpack_require_1393174__(8611);\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n\n\n/***/ }),\n\n/***/ 6743:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1393497__) {\n\n\"use strict\";\n\n\nvar define = __nested_webpack_require_1393497__(4289);\nvar getPolyfill = __nested_webpack_require_1393497__(9415);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n\n\n/***/ }),\n\n/***/ 8420:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1393985__) {\n\n\"use strict\";\n\n\nvar callBound = __nested_webpack_require_1393985__(1924);\nvar hasToStringTag = __nested_webpack_require_1393985__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n\n\n/***/ }),\n\n/***/ 5692:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1395478__) {\n\n\"use strict\";\n\n\nvar forEach = __nested_webpack_require_1395478__(4029);\nvar availableTypedArrays = __nested_webpack_require_1395478__(3083);\nvar callBound = __nested_webpack_require_1395478__(1924);\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = __nested_webpack_require_1395478__(6410)();\n\nvar g = typeof globalThis === 'undefined' ? __nested_webpack_require_1395478__.g : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = __nested_webpack_require_1395478__(882);\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n\n\n/***/ }),\n\n/***/ 4244:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n\n\n/***/ }),\n\n/***/ 609:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1397696__) {\n\n\"use strict\";\n\n\nvar define = __nested_webpack_require_1397696__(4289);\nvar callBind = __nested_webpack_require_1397696__(5559);\n\nvar implementation = __nested_webpack_require_1397696__(4244);\nvar getPolyfill = __nested_webpack_require_1397696__(5624);\nvar shim = __nested_webpack_require_1397696__(2281);\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n\n\n/***/ }),\n\n/***/ 5624:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1398198__) {\n\n\"use strict\";\n\n\nvar implementation = __nested_webpack_require_1398198__(4244);\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n\n\n/***/ }),\n\n/***/ 2281:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1398477__) {\n\n\"use strict\";\n\n\nvar getPolyfill = __nested_webpack_require_1398477__(5624);\nvar define = __nested_webpack_require_1398477__(4289);\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n\n\n/***/ }),\n\n/***/ 8987:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1398884__) {\n\n\"use strict\";\n\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __nested_webpack_require_1398884__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n\n\n/***/ }),\n\n/***/ 2215:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1402203__) {\n\n\"use strict\";\n\n\nvar slice = Array.prototype.slice;\nvar isArgs = __nested_webpack_require_1402203__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __nested_webpack_require_1402203__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n\n\n/***/ }),\n\n/***/ 1414:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n\n\n/***/ }),\n\n/***/ 4236:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n\n\n/***/ }),\n\n/***/ 6069:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n\n\n/***/ }),\n\n/***/ 1619:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n\n/***/ }),\n\n/***/ 2869:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n\n\n/***/ }),\n\n/***/ 405:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1411999__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = __nested_webpack_require_1411999__(4236);\nvar trees = __nested_webpack_require_1411999__(342);\nvar adler32 = __nested_webpack_require_1411999__(6069);\nvar crc32 = __nested_webpack_require_1411999__(2869);\nvar msg = __nested_webpack_require_1411999__(8898);\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n\n\n/***/ }),\n\n/***/ 4264:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n\n/***/ }),\n\n/***/ 7948:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1486025__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = __nested_webpack_require_1486025__(4236);\nvar adler32 = __nested_webpack_require_1486025__(6069);\nvar crc32 = __nested_webpack_require_1486025__(2869);\nvar inflate_fast = __nested_webpack_require_1486025__(4264);\nvar inflate_table = __nested_webpack_require_1486025__(9241);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n\n\n/***/ }),\n\n/***/ 9241:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1536429__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = __nested_webpack_require_1536429__(4236);\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\n/***/ }),\n\n/***/ 8898:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n\n/***/ }),\n\n/***/ 342:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1550618__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = __nested_webpack_require_1550618__(4236);\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n var len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n var n; /* iterates over tree elements */\n var bits; /* bit counter */\n var length; /* length value */\n var code; /* code value */\n var dist; /* distance index */\n var bl_count = new Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n\n\n/***/ }),\n\n/***/ 2292:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n\n\n/***/ }),\n\n/***/ 4155:\n/***/ (function(module) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n\n/***/ 3697:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1597930__) {\n\n\"use strict\";\n\n\nvar functionsHaveConfigurableNames = (__nested_webpack_require_1597930__(5972).functionsHaveConfigurableNames)();\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.hasIndices) {\n\t\tresult += 'd';\n\t}\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n\nif (functionsHaveConfigurableNames && Object.defineProperty) {\n\tObject.defineProperty(module.exports, \"name\", ({ value: 'get flags' }));\n}\n\n\n/***/ }),\n\n/***/ 2847:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1598829__) {\n\n\"use strict\";\n\n\nvar define = __nested_webpack_require_1598829__(4289);\nvar callBind = __nested_webpack_require_1598829__(5559);\n\nvar implementation = __nested_webpack_require_1598829__(3697);\nvar getPolyfill = __nested_webpack_require_1598829__(1721);\nvar shim = __nested_webpack_require_1598829__(2753);\n\nvar flagsBound = callBind(getPolyfill());\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n\n\n/***/ }),\n\n/***/ 1721:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1599329__) {\n\n\"use strict\";\n\n\nvar implementation = __nested_webpack_require_1599329__(3697);\n\nvar supportsDescriptors = (__nested_webpack_require_1599329__(4289).supportsDescriptors);\nvar $gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function getPolyfill() {\n\tif (supportsDescriptors && (/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (\n\t\t\tdescriptor\n\t\t\t&& typeof descriptor.get === 'function'\n\t\t\t&& typeof RegExp.prototype.dotAll === 'boolean'\n\t\t\t&& typeof RegExp.prototype.hasIndices === 'boolean'\n\t\t) {\n\t\t\t/* eslint getter-return: 0 */\n\t\t\tvar calls = '';\n\t\t\tvar o = {};\n\t\t\tObject.defineProperty(o, 'hasIndices', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'd';\n\t\t\t\t}\n\t\t\t});\n\t\t\tObject.defineProperty(o, 'sticky', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'y';\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (calls === 'dy') {\n\t\t\t\treturn descriptor.get;\n\t\t\t}\n\t\t}\n\t}\n\treturn implementation;\n};\n\n\n/***/ }),\n\n/***/ 2753:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1600293__) {\n\n\"use strict\";\n\n\nvar supportsDescriptors = (__nested_webpack_require_1600293__(4289).supportsDescriptors);\nvar getPolyfill = __nested_webpack_require_1600293__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n\n\n/***/ }),\n\n/***/ 6099:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1601175__) {\n\n/* provided dependency */ var Buffer = __nested_webpack_require_1601175__(8823)[\"Buffer\"];\n;(function (sax) { // wrapper for non-node envs\n sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n 'procInstName', 'procInstBody', 'entity', 'attribName',\n 'attribValue', 'cdata', 'script'\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace'\n ]\n\n function SAXParser (strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F () {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength (parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers (parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers (parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () { end(this) },\n write: write,\n resume: function () { this.error = null; return this },\n close: function () { return this.write(null) },\n flush: function () { flushBuffers(this) }\n }\n\n var Stream\n try {\n Stream = (__nested_webpack_require_1601175__(2830).Stream)\n } catch (ex) {\n Stream = function () {}\n }\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream (strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function SAXStream (strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream\n }\n })\n\n SAXStream.prototype.write = function (data) {\n if (typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)) {\n if (!this._decoder) {\n var SD = (__nested_webpack_require_1601175__(2553)/* .StringDecoder */ .s)\n this._decoder = new SD('utf8')\n }\n data = this._decoder.write(data)\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace (c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote (c) {\n return c === '\"' || c === '\\''\n }\n\n function isAttribEnd (c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch (regex, c) {\n return regex.test(c)\n }\n\n function notMatch (regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // & and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // <!BLARG\n SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n DOCTYPE: S++, // <!DOCTYPE\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n COMMENT_STARTING: S++, // <!-\n COMMENT: S++, // <!--\n COMMENT_ENDING: S++, // <!-- blah -\n COMMENT_ENDED: S++, // <!-- blah --\n CDATA: S++, // <![CDATA[ something\n CDATA_ENDING: S++, // ]\n CDATA_ENDING_2: S++, // ]]\n PROC_INST: S++, // <?hi\n PROC_INST_BODY: S++, // <?hi there\n PROC_INST_ENDING: S++, // <?hi \"there\" ?\n OPEN_TAG: S++, // <strong\n OPEN_TAG_SLASH: S++, // <strong /\n ATTRIB: S++, // <a\n ATTRIB_NAME: S++, // <a foo\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n ATTRIB_VALUE: S++, // <a foo=\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\""\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar="\n CLOSE_TAG: S++, // </a\n CLOSE_TAG_SAW_WHITE: S++, // </a >\n SCRIPT: S++, // <script> ...\n SCRIPT_ENDING: S++ // <script> ... <\n }\n\n sax.XML_ENTITIES = {\n 'amp': '&',\n 'gt': '>',\n 'lt': '<',\n 'quot': '\"',\n 'apos': \"'\"\n }\n\n sax.ENTITIES = {\n 'amp': '&',\n 'gt': '>',\n 'lt': '<',\n 'quot': '\"',\n 'apos': \"'\",\n 'AElig': 198,\n 'Aacute': 193,\n 'Acirc': 194,\n 'Agrave': 192,\n 'Aring': 197,\n 'Atilde': 195,\n 'Auml': 196,\n 'Ccedil': 199,\n 'ETH': 208,\n 'Eacute': 201,\n 'Ecirc': 202,\n 'Egrave': 200,\n 'Euml': 203,\n 'Iacute': 205,\n 'Icirc': 206,\n 'Igrave': 204,\n 'Iuml': 207,\n 'Ntilde': 209,\n 'Oacute': 211,\n 'Ocirc': 212,\n 'Ograve': 210,\n 'Oslash': 216,\n 'Otilde': 213,\n 'Ouml': 214,\n 'THORN': 222,\n 'Uacute': 218,\n 'Ucirc': 219,\n 'Ugrave': 217,\n 'Uuml': 220,\n 'Yacute': 221,\n 'aacute': 225,\n 'acirc': 226,\n 'aelig': 230,\n 'agrave': 224,\n 'aring': 229,\n 'atilde': 227,\n 'auml': 228,\n 'ccedil': 231,\n 'eacute': 233,\n 'ecirc': 234,\n 'egrave': 232,\n 'eth': 240,\n 'euml': 235,\n 'iacute': 237,\n 'icirc': 238,\n 'igrave': 236,\n 'iuml': 239,\n 'ntilde': 241,\n 'oacute': 243,\n 'ocirc': 244,\n 'ograve': 242,\n 'oslash': 248,\n 'otilde': 245,\n 'ouml': 246,\n 'szlig': 223,\n 'thorn': 254,\n 'uacute': 250,\n 'ucirc': 251,\n 'ugrave': 249,\n 'uuml': 252,\n 'yacute': 253,\n 'yuml': 255,\n 'copy': 169,\n 'reg': 174,\n 'nbsp': 160,\n 'iexcl': 161,\n 'cent': 162,\n 'pound': 163,\n 'curren': 164,\n 'yen': 165,\n 'brvbar': 166,\n 'sect': 167,\n 'uml': 168,\n 'ordf': 170,\n 'laquo': 171,\n 'not': 172,\n 'shy': 173,\n 'macr': 175,\n 'deg': 176,\n 'plusmn': 177,\n 'sup1': 185,\n 'sup2': 178,\n 'sup3': 179,\n 'acute': 180,\n 'micro': 181,\n 'para': 182,\n 'middot': 183,\n 'cedil': 184,\n 'ordm': 186,\n 'raquo': 187,\n 'frac14': 188,\n 'frac12': 189,\n 'frac34': 190,\n 'iquest': 191,\n 'times': 215,\n 'divide': 247,\n 'OElig': 338,\n 'oelig': 339,\n 'Scaron': 352,\n 'scaron': 353,\n 'Yuml': 376,\n 'fnof': 402,\n 'circ': 710,\n 'tilde': 732,\n 'Alpha': 913,\n 'Beta': 914,\n 'Gamma': 915,\n 'Delta': 916,\n 'Epsilon': 917,\n 'Zeta': 918,\n 'Eta': 919,\n 'Theta': 920,\n 'Iota': 921,\n 'Kappa': 922,\n 'Lambda': 923,\n 'Mu': 924,\n 'Nu': 925,\n 'Xi': 926,\n 'Omicron': 927,\n 'Pi': 928,\n 'Rho': 929,\n 'Sigma': 931,\n 'Tau': 932,\n 'Upsilon': 933,\n 'Phi': 934,\n 'Chi': 935,\n 'Psi': 936,\n 'Omega': 937,\n 'alpha': 945,\n 'beta': 946,\n 'gamma': 947,\n 'delta': 948,\n 'epsilon': 949,\n 'zeta': 950,\n 'eta': 951,\n 'theta': 952,\n 'iota': 953,\n 'kappa': 954,\n 'lambda': 955,\n 'mu': 956,\n 'nu': 957,\n 'xi': 958,\n 'omicron': 959,\n 'pi': 960,\n 'rho': 961,\n 'sigmaf': 962,\n 'sigma': 963,\n 'tau': 964,\n 'upsilon': 965,\n 'phi': 966,\n 'chi': 967,\n 'psi': 968,\n 'omega': 969,\n 'thetasym': 977,\n 'upsih': 978,\n 'piv': 982,\n 'ensp': 8194,\n 'emsp': 8195,\n 'thinsp': 8201,\n 'zwnj': 8204,\n 'zwj': 8205,\n 'lrm': 8206,\n 'rlm': 8207,\n 'ndash': 8211,\n 'mdash': 8212,\n 'lsquo': 8216,\n 'rsquo': 8217,\n 'sbquo': 8218,\n 'ldquo': 8220,\n 'rdquo': 8221,\n 'bdquo': 8222,\n 'dagger': 8224,\n 'Dagger': 8225,\n 'bull': 8226,\n 'hellip': 8230,\n 'permil': 8240,\n 'prime': 8242,\n 'Prime': 8243,\n 'lsaquo': 8249,\n 'rsaquo': 8250,\n 'oline': 8254,\n 'frasl': 8260,\n 'euro': 8364,\n 'image': 8465,\n 'weierp': 8472,\n 'real': 8476,\n 'trade': 8482,\n 'alefsym': 8501,\n 'larr': 8592,\n 'uarr': 8593,\n 'rarr': 8594,\n 'darr': 8595,\n 'harr': 8596,\n 'crarr': 8629,\n 'lArr': 8656,\n 'uArr': 8657,\n 'rArr': 8658,\n 'dArr': 8659,\n 'hArr': 8660,\n 'forall': 8704,\n 'part': 8706,\n 'exist': 8707,\n 'empty': 8709,\n 'nabla': 8711,\n 'isin': 8712,\n 'notin': 8713,\n 'ni': 8715,\n 'prod': 8719,\n 'sum': 8721,\n 'minus': 8722,\n 'lowast': 8727,\n 'radic': 8730,\n 'prop': 8733,\n 'infin': 8734,\n 'ang': 8736,\n 'and': 8743,\n 'or': 8744,\n 'cap': 8745,\n 'cup': 8746,\n 'int': 8747,\n 'there4': 8756,\n 'sim': 8764,\n 'cong': 8773,\n 'asymp': 8776,\n 'ne': 8800,\n 'equiv': 8801,\n 'le': 8804,\n 'ge': 8805,\n 'sub': 8834,\n 'sup': 8835,\n 'nsub': 8836,\n 'sube': 8838,\n 'supe': 8839,\n 'oplus': 8853,\n 'otimes': 8855,\n 'perp': 8869,\n 'sdot': 8901,\n 'lceil': 8968,\n 'rceil': 8969,\n 'lfloor': 8970,\n 'rfloor': 8971,\n 'lang': 9001,\n 'rang': 9002,\n 'loz': 9674,\n 'spades': 9824,\n 'clubs': 9827,\n 'hearts': 9829,\n 'diams': 9830\n }\n\n Object.keys(sax.ENTITIES).forEach(function (key) {\n var e = sax.ENTITIES[key]\n var s = typeof e === 'number' ? String.fromCharCode(e) : e\n sax.ENTITIES[key] = s\n })\n\n for (var s in sax.STATE) {\n sax.STATE[sax.STATE[s]] = s\n }\n\n // shorthand\n S = sax.STATE\n\n function emit (parser, event, data) {\n parser[event] && parser[event](data)\n }\n\n function emitNode (parser, nodeType, data) {\n if (parser.textNode) closeText(parser)\n emit(parser, nodeType, data)\n }\n\n function closeText (parser) {\n parser.textNode = textopts(parser.opt, parser.textNode)\n if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n parser.textNode = ''\n }\n\n function textopts (opt, text) {\n if (opt.trim) text = text.trim()\n if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n return text\n }\n\n function error (parser, er) {\n closeText(parser)\n if (parser.trackPosition) {\n er += '\\nLine: ' + parser.line +\n '\\nColumn: ' + parser.column +\n '\\nChar: ' + parser.c\n }\n er = new Error(er)\n parser.error = er\n emit(parser, 'onerror', er)\n return parser\n }\n\n function end (parser) {\n if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')\n if ((parser.state !== S.BEGIN) &&\n (parser.state !== S.BEGIN_WHITESPACE) &&\n (parser.state !== S.TEXT)) {\n error(parser, 'Unexpected end')\n }\n closeText(parser)\n parser.c = ''\n parser.closed = true\n emit(parser, 'onend')\n SAXParser.call(parser, parser.strict, parser.opt)\n return parser\n }\n\n function strictFail (parser, message) {\n if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n throw new Error('bad call to strictFail')\n }\n if (parser.strict) {\n error(parser, message)\n }\n }\n\n function newTag (parser) {\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n var parent = parser.tags[parser.tags.length - 1] || parser\n var tag = parser.tag = { name: parser.tagName, attributes: {} }\n\n // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n if (parser.opt.xmlns) {\n tag.ns = parent.ns\n }\n parser.attribList.length = 0\n emitNode(parser, 'onopentagstart', tag)\n }\n\n function qname (name, attribute) {\n var i = name.indexOf(':')\n var qualName = i < 0 ? [ '', name ] : name.split(':')\n var prefix = qualName[0]\n var local = qualName[1]\n\n // <x \"xmlns\"=\"http://foo\">\n if (attribute && name === 'xmlns') {\n prefix = 'xmlns'\n local = ''\n }\n\n return { prefix: prefix, local: local }\n }\n\n function attrib (parser) {\n if (!parser.strict) {\n parser.attribName = parser.attribName[parser.looseCase]()\n }\n\n if (parser.attribList.indexOf(parser.attribName) !== -1 ||\n parser.tag.attributes.hasOwnProperty(parser.attribName)) {\n parser.attribName = parser.attribValue = ''\n return\n }\n\n if (parser.opt.xmlns) {\n var qn = qname(parser.attribName, true)\n var prefix = qn.prefix\n var local = qn.local\n\n if (prefix === 'xmlns') {\n // namespace binding attribute. push the binding into scope\n if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n strictFail(parser,\n 'xml: prefix must be bound to ' + XML_NAMESPACE + '\\n' +\n 'Actual: ' + parser.attribValue)\n } else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {\n strictFail(parser,\n 'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\\n' +\n 'Actual: ' + parser.attribValue)\n } else {\n var tag = parser.tag\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns === parent.ns) {\n tag.ns = Object.create(parent.ns)\n }\n tag.ns[local] = parser.attribValue\n }\n }\n\n // defer onattribute events until all attributes have been seen\n // so any new bindings can take effect. preserve attribute order\n // so deferred events can be emitted in document order\n parser.attribList.push([parser.attribName, parser.attribValue])\n } else {\n // in non-xmlns mode, we can emit the event right away\n parser.tag.attributes[parser.attribName] = parser.attribValue\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: parser.attribValue\n })\n }\n\n parser.attribName = parser.attribValue = ''\n }\n\n function openTag (parser, selfClosing) {\n if (parser.opt.xmlns) {\n // emit namespace binding events\n var tag = parser.tag\n\n // add namespace info to tag\n var qn = qname(parser.tagName)\n tag.prefix = qn.prefix\n tag.local = qn.local\n tag.uri = tag.ns[qn.prefix] || ''\n\n if (tag.prefix && !tag.uri) {\n strictFail(parser, 'Unbound namespace prefix: ' +\n JSON.stringify(parser.tagName))\n tag.uri = qn.prefix\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns && parent.ns !== tag.ns) {\n Object.keys(tag.ns).forEach(function (p) {\n emitNode(parser, 'onopennamespace', {\n prefix: p,\n uri: tag.ns[p]\n })\n })\n }\n\n // handle deferred onattribute events\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\n var nv = parser.attribList[i]\n var name = nv[0]\n var value = nv[1]\n var qualName = qname(name, true)\n var prefix = qualName.prefix\n var local = qualName.local\n var uri = prefix === '' ? '' : (tag.ns[prefix] || '')\n var a = {\n name: name,\n value: value,\n prefix: prefix,\n local: local,\n uri: uri\n }\n\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (prefix && prefix !== 'xmlns' && !uri) {\n strictFail(parser, 'Unbound namespace prefix: ' +\n JSON.stringify(prefix))\n a.uri = prefix\n }\n parser.tag.attributes[name] = a\n emitNode(parser, 'onattribute', a)\n }\n parser.attribList.length = 0\n }\n\n parser.tag.isSelfClosing = !!selfClosing\n\n // process the tag\n parser.sawRoot = true\n parser.tags.push(parser.tag)\n emitNode(parser, 'onopentag', parser.tag)\n if (!selfClosing) {\n // special case for <script> in non-strict mode.\n if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n parser.state = S.SCRIPT\n } else {\n parser.state = S.TEXT\n }\n parser.tag = null\n parser.tagName = ''\n }\n parser.attribName = parser.attribValue = ''\n parser.attribList.length = 0\n }\n\n function closeTag (parser) {\n if (!parser.tagName) {\n strictFail(parser, 'Weird empty close tag.')\n parser.textNode += '</>'\n parser.state = S.TEXT\n return\n }\n\n if (parser.script) {\n if (parser.tagName !== 'script') {\n parser.script += '</' + parser.tagName + '>'\n parser.tagName = ''\n parser.state = S.SCRIPT\n return\n }\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n\n // first make sure that the closing tag actually exists.\n // <a><b></c></b></a> will close everything, otherwise.\n var t = parser.tags.length\n var tagName = parser.tagName\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]()\n }\n var closeTo = tagName\n while (t--) {\n var close = parser.tags[t]\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, 'Unexpected close tag')\n } else {\n break\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n parser.textNode += '</' + parser.tagName + '>'\n parser.state = S.TEXT\n return\n }\n parser.tagName = tagName\n var s = parser.tags.length\n while (s-- > t) {\n var tag = parser.tag = parser.tags.pop()\n parser.tagName = parser.tag.name\n emitNode(parser, 'onclosetag', parser.tagName)\n\n var x = {}\n for (var i in tag.ns) {\n x[i] = tag.ns[i]\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p]\n emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n })\n }\n }\n if (t === 0) parser.closedRoot = true\n parser.tagName = parser.attribValue = parser.attribName = ''\n parser.attribList.length = 0\n parser.state = S.TEXT\n }\n\n function parseEntity (parser) {\n var entity = parser.entity\n var entityLC = entity.toLowerCase()\n var num\n var numStr = ''\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity]\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC]\n }\n entity = entityLC\n if (entity.charAt(0) === '#') {\n if (entity.charAt(1) === 'x') {\n entity = entity.slice(2)\n num = parseInt(entity, 16)\n numStr = num.toString(16)\n } else {\n entity = entity.slice(1)\n num = parseInt(entity, 10)\n numStr = num.toString(10)\n }\n }\n entity = entity.replace(/^0+/, '')\n if (isNaN(num) || numStr.toLowerCase() !== entity) {\n strictFail(parser, 'Invalid character entity')\n return '&' + parser.entity + ';'\n }\n\n return String.fromCodePoint(num)\n }\n\n function beginWhiteSpace (parser, c) {\n if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (!isWhitespace(c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, 'Non-whitespace before first tag.')\n parser.textNode = c\n parser.state = S.TEXT\n }\n }\n\n function charAt (chunk, i) {\n var result = ''\n if (i < chunk.length) {\n result = chunk.charAt(i)\n }\n return result\n }\n\n function write (chunk) {\n var parser = this\n if (this.error) {\n throw this.error\n }\n if (parser.closed) {\n return error(parser,\n 'Cannot write after close. Assign an onready handler.')\n }\n if (chunk === null) {\n return end(parser)\n }\n if (typeof chunk === 'object') {\n chunk = chunk.toString()\n }\n var i = 0\n var c = ''\n while (true) {\n c = charAt(chunk, i++)\n parser.c = c\n\n if (!c) {\n break\n }\n\n if (parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE\n if (c === '\\uFEFF') {\n continue\n }\n beginWhiteSpace(parser, c)\n continue\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c)\n continue\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1\n while (c && c !== '<' && c !== '&') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1)\n }\n if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else {\n if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {\n strictFail(parser, 'Text data outside of root node.')\n }\n if (c === '&') {\n parser.state = S.TEXT_ENTITY\n } else {\n parser.textNode += c\n }\n }\n continue\n\n case S.SCRIPT:\n // only non-strict\n if (c === '<') {\n parser.state = S.SCRIPT_ENDING\n } else {\n parser.script += c\n }\n continue\n\n case S.SCRIPT_ENDING:\n if (c === '/') {\n parser.state = S.CLOSE_TAG\n } else {\n parser.script += '<' + c\n parser.state = S.SCRIPT\n }\n continue\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === '!') {\n parser.state = S.SGML_DECL\n parser.sgmlDecl = ''\n } else if (isWhitespace(c)) {\n // wait for it...\n } else if (isMatch(nameStart, c)) {\n parser.state = S.OPEN_TAG\n parser.tagName = c\n } else if (c === '/') {\n parser.state = S.CLOSE_TAG\n parser.tagName = ''\n } else if (c === '?') {\n parser.state = S.PROC_INST\n parser.procInstName = parser.procInstBody = ''\n } else {\n strictFail(parser, 'Unencoded <')\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition\n c = new Array(pad).join(' ') + c\n }\n parser.textNode += '<' + c\n parser.state = S.TEXT\n }\n continue\n\n case S.SGML_DECL:\n if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, 'onopencdata')\n parser.state = S.CDATA\n parser.sgmlDecl = ''\n parser.cdata = ''\n } else if (parser.sgmlDecl + c === '--') {\n parser.state = S.COMMENT\n parser.comment = ''\n parser.sgmlDecl = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE\n if (parser.doctype || parser.sawRoot) {\n strictFail(parser,\n 'Inappropriately located doctype declaration')\n }\n parser.doctype = ''\n parser.sgmlDecl = ''\n } else if (c === '>') {\n emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n parser.sgmlDecl = ''\n parser.state = S.TEXT\n } else if (isQuote(c)) {\n parser.state = S.SGML_DECL_QUOTED\n parser.sgmlDecl += c\n } else {\n parser.sgmlDecl += c\n }\n continue\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL\n parser.q = ''\n }\n parser.sgmlDecl += c\n continue\n\n case S.DOCTYPE:\n if (c === '>') {\n parser.state = S.TEXT\n emitNode(parser, 'ondoctype', parser.doctype)\n parser.doctype = true // just remember that we saw it.\n } else {\n parser.doctype += c\n if (c === '[') {\n parser.state = S.DOCTYPE_DTD\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_QUOTED\n parser.q = c\n }\n }\n continue\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.q = ''\n parser.state = S.DOCTYPE\n }\n continue\n\n case S.DOCTYPE_DTD:\n parser.doctype += c\n if (c === ']') {\n parser.state = S.DOCTYPE\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_DTD_QUOTED\n parser.q = c\n }\n continue\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD\n parser.q = ''\n }\n continue\n\n case S.COMMENT:\n if (c === '-') {\n parser.state = S.COMMENT_ENDING\n } else {\n parser.comment += c\n }\n continue\n\n case S.COMMENT_ENDING:\n if (c === '-') {\n parser.state = S.COMMENT_ENDED\n parser.comment = textopts(parser.opt, parser.comment)\n if (parser.comment) {\n emitNode(parser, 'oncomment', parser.comment)\n }\n parser.comment = ''\n } else {\n parser.comment += '-' + c\n parser.state = S.COMMENT\n }\n continue\n\n case S.COMMENT_ENDED:\n if (c !== '>') {\n strictFail(parser, 'Malformed comment')\n // allow <!-- blah -- bloo --> in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += '--' + c\n parser.state = S.COMMENT\n } else {\n parser.state = S.TEXT\n }\n continue\n\n case S.CDATA:\n if (c === ']') {\n parser.state = S.CDATA_ENDING\n } else {\n parser.cdata += c\n }\n continue\n\n case S.CDATA_ENDING:\n if (c === ']') {\n parser.state = S.CDATA_ENDING_2\n } else {\n parser.cdata += ']' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.CDATA_ENDING_2:\n if (c === '>') {\n if (parser.cdata) {\n emitNode(parser, 'oncdata', parser.cdata)\n }\n emitNode(parser, 'onclosecdata')\n parser.cdata = ''\n parser.state = S.TEXT\n } else if (c === ']') {\n parser.cdata += ']'\n } else {\n parser.cdata += ']]' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.PROC_INST:\n if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else if (isWhitespace(c)) {\n parser.state = S.PROC_INST_BODY\n } else {\n parser.procInstName += c\n }\n continue\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && isWhitespace(c)) {\n continue\n } else if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else {\n parser.procInstBody += c\n }\n continue\n\n case S.PROC_INST_ENDING:\n if (c === '>') {\n emitNode(parser, 'onprocessinginstruction', {\n name: parser.procInstName,\n body: parser.procInstBody\n })\n parser.procInstName = parser.procInstBody = ''\n parser.state = S.TEXT\n } else {\n parser.procInstBody += '?' + c\n parser.state = S.PROC_INST_BODY\n }\n continue\n\n case S.OPEN_TAG:\n if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else {\n newTag(parser)\n if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid character in tag name')\n }\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.OPEN_TAG_SLASH:\n if (c === '>') {\n openTag(parser, true)\n closeTag(parser)\n } else {\n strictFail(parser, 'Forward-slash in opening tag not followed by >')\n parser.state = S.ATTRIB\n }\n continue\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (isWhitespace(c)) {\n continue\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (c === '>') {\n strictFail(parser, 'Attribute without value')\n parser.attribValue = parser.attribName\n attrib(parser)\n openTag(parser)\n } else if (isWhitespace(c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE\n } else if (isMatch(nameBody, c)) {\n parser.attribName += c\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (isWhitespace(c)) {\n continue\n } else {\n strictFail(parser, 'Attribute without value')\n parser.tag.attributes[parser.attribName] = ''\n parser.attribValue = ''\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: ''\n })\n parser.attribName = ''\n if (c === '>') {\n openTag(parser)\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.ATTRIB_VALUE:\n if (isWhitespace(c)) {\n continue\n } else if (isQuote(c)) {\n parser.q = c\n parser.state = S.ATTRIB_VALUE_QUOTED\n } else {\n strictFail(parser, 'Unquoted attribute value')\n parser.state = S.ATTRIB_VALUE_UNQUOTED\n parser.attribValue = c\n }\n continue\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n parser.q = ''\n parser.state = S.ATTRIB_VALUE_CLOSED\n continue\n\n case S.ATTRIB_VALUE_CLOSED:\n if (isWhitespace(c)) {\n parser.state = S.ATTRIB\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n strictFail(parser, 'No whitespace between attributes')\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (!isAttribEnd(c)) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_U\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n if (c === '>') {\n openTag(parser)\n } else {\n parser.state = S.ATTRIB\n }\n continue\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (isWhitespace(c)) {\n continue\n } else if (notMatch(nameStart, c)) {\n if (parser.script) {\n parser.script += '</' + c\n parser.state = S.SCRIPT\n } else {\n strictFail(parser, 'Invalid tagname in closing tag.')\n }\n } else {\n parser.tagName = c\n }\n } else if (c === '>') {\n closeTag(parser)\n } else if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else if (parser.script) {\n parser.script += '</' + parser.tagName\n parser.tagName = ''\n parser.state = S.SCRIPT\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid tagname in closing tag')\n }\n parser.state = S.CLOSE_TAG_SAW_WHITE\n }\n continue\n\n case S.CLOSE_TAG_SAW_WHITE:\n if (isWhitespace(c)) {\n continue\n }\n if (c === '>') {\n closeTag(parser)\n } else {\n strictFail(parser, 'Invalid characters in closing tag')\n }\n continue\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState\n var buffer\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT\n buffer = 'textNode'\n break\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED\n buffer = 'attribValue'\n break\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED\n buffer = 'attribValue'\n break\n }\n\n if (c === ';') {\n parser[buffer] += parseEntity(parser)\n parser.entity = ''\n parser.state = returnState\n } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {\n parser.entity += c\n } else {\n strictFail(parser, 'Invalid character in entity name')\n parser[buffer] += '&' + parser.entity + c\n parser.entity = ''\n parser.state = returnState\n }\n\n continue\n\n default:\n throw new Error(parser, 'Unknown state: ' + parser.state)\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser)\n }\n return parser\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n /* istanbul ignore next */\n if (!String.fromCodePoint) {\n (function () {\n var stringFromCharCode = String.fromCharCode\n var floor = Math.floor\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000\n var codeUnits = []\n var highSurrogate\n var lowSurrogate\n var index = -1\n var length = arguments.length\n if (!length) {\n return ''\n }\n var result = ''\n while (++index < length) {\n var codePoint = Number(arguments[index])\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10FFFF || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError('Invalid code point: ' + codePoint)\n }\n if (codePoint <= 0xFFFF) { // BMP code point\n codeUnits.push(codePoint)\n } else { // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000\n highSurrogate = (codePoint >> 10) + 0xD800\n lowSurrogate = (codePoint % 0x400) + 0xDC00\n codeUnits.push(highSurrogate, lowSurrogate)\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits)\n codeUnits.length = 0\n }\n }\n return result\n }\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(String, 'fromCodePoint', {\n value: fromCodePoint,\n configurable: true,\n writable: true\n })\n } else {\n String.fromCodePoint = fromCodePoint\n }\n }())\n }\n})( false ? 0 : exports)\n\n\n/***/ }),\n\n/***/ 2830:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1644876__) {\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = (__nested_webpack_require_1644876__(7187).EventEmitter);\nvar inherits = __nested_webpack_require_1644876__(5717);\n\ninherits(Stream, EE);\nStream.Readable = __nested_webpack_require_1644876__(6577);\nStream.Writable = __nested_webpack_require_1644876__(323);\nStream.Duplex = __nested_webpack_require_1644876__(8656);\nStream.Transform = __nested_webpack_require_1644876__(4473);\nStream.PassThrough = __nested_webpack_require_1644876__(2366);\nStream.finished = __nested_webpack_require_1644876__(1086)\nStream.pipeline = __nested_webpack_require_1644876__(6472)\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n\n\n/***/ }),\n\n/***/ 8106:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.q = codes;\n\n\n/***/ }),\n\n/***/ 8656:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1652884__) {\n\n\"use strict\";\n/* provided dependency */ var process = __nested_webpack_require_1652884__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = __nested_webpack_require_1652884__(6577);\n\nvar Writable = __nested_webpack_require_1652884__(323);\n\n__nested_webpack_require_1652884__(5717)(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\n/***/ }),\n\n/***/ 2366:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1657447__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n\nmodule.exports = PassThrough;\n\nvar Transform = __nested_webpack_require_1657447__(4473);\n\n__nested_webpack_require_1657447__(5717)(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};\n\n/***/ }),\n\n/***/ 6577:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1659178__) {\n\n\"use strict\";\n/* provided dependency */ var process = __nested_webpack_require_1659178__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = (__nested_webpack_require_1659178__(7187).EventEmitter);\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = __nested_webpack_require_1659178__(3194);\n/*</replacement>*/\n\n\nvar Buffer = (__nested_webpack_require_1659178__(8823).Buffer);\n\nvar OurUint8Array = __nested_webpack_require_1659178__.g.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = __nested_webpack_require_1659178__(964);\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = __nested_webpack_require_1659178__(3361);\n\nvar destroyImpl = __nested_webpack_require_1659178__(1029);\n\nvar _require = __nested_webpack_require_1659178__(94),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = (__nested_webpack_require_1659178__(8106)/* .codes */ .q),\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\n__nested_webpack_require_1659178__(5717)(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || __nested_webpack_require_1659178__(8656);\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = (__nested_webpack_require_1659178__(2553)/* .StringDecoder */ .s);\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || __nested_webpack_require_1659178__(8656);\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = (__nested_webpack_require_1659178__(2553)/* .StringDecoder */ .s);\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = __nested_webpack_require_1659178__(828);\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = __nested_webpack_require_1659178__(1265);\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}\n\n/***/ }),\n\n/***/ 4473:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1695319__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n\nmodule.exports = Transform;\n\nvar _require$codes = (__nested_webpack_require_1695319__(8106)/* .codes */ .q),\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = __nested_webpack_require_1695319__(8656);\n\n__nested_webpack_require_1695319__(5717)(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}\n\n/***/ }),\n\n/***/ 323:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1703385__) {\n\n\"use strict\";\n/* provided dependency */ var process = __nested_webpack_require_1703385__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: __nested_webpack_require_1703385__(4927)\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = __nested_webpack_require_1703385__(3194);\n/*</replacement>*/\n\n\nvar Buffer = (__nested_webpack_require_1703385__(8823).Buffer);\n\nvar OurUint8Array = __nested_webpack_require_1703385__.g.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = __nested_webpack_require_1703385__(1029);\n\nvar _require = __nested_webpack_require_1703385__(94),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = (__nested_webpack_require_1703385__(8106)/* .codes */ .q),\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\n__nested_webpack_require_1703385__(5717)(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || __nested_webpack_require_1703385__(8656);\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || __nested_webpack_require_1703385__(8656); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1725380__) {\n\n\"use strict\";\n/* provided dependency */ var process = __nested_webpack_require_1725380__(4155);\n\n\nvar _Object$setPrototypeO;\n\nfunction _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\nvar finished = __nested_webpack_require_1725380__(1086);\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;\n\n/***/ }),\n\n/***/ 1029:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1731503__) {\n\n\"use strict\";\n/* provided dependency */ var process = __nested_webpack_require_1731503__(4155);\n // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};\n\n/***/ }),\n\n/***/ 1086:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1734787__) {\n\n\"use strict\";\n// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n\nvar ERR_STREAM_PREMATURE_CLOSE = (__nested_webpack_require_1734787__(8106)/* .codes.ERR_STREAM_PREMATURE_CLOSE */ .q.ERR_STREAM_PREMATURE_CLOSE);\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;\n\n/***/ }),\n\n/***/ 1265:\n/***/ (function(module) {\n\nmodule.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n\n\n/***/ }),\n\n/***/ 6472:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1738179__) {\n\n\"use strict\";\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = (__nested_webpack_require_1738179__(8106)/* .codes */ .q),\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = __nested_webpack_require_1738179__(1086);\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;\n\n/***/ }),\n\n/***/ 94:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1740714__) {\n\n\"use strict\";\n\n\nvar ERR_INVALID_OPT_VALUE = (__nested_webpack_require_1740714__(8106)/* .codes.ERR_INVALID_OPT_VALUE */ .q.ERR_INVALID_OPT_VALUE);\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};\n\n/***/ }),\n\n/***/ 3194:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1741595__) {\n\nmodule.exports = __nested_webpack_require_1741595__(7187).EventEmitter;\n\n\n/***/ }),\n\n/***/ 8487:\n/***/ (function(module, exports, __nested_webpack_require_1741734__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(a,b){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (b),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof __nested_webpack_require_1741734__.g&&__nested_webpack_require_1741734__.g.global===__nested_webpack_require_1741734__.g?__nested_webpack_require_1741734__.g:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:(typeof HTMLAnchorElement !== \"undefined\" && \"download\" in HTMLAnchorElement.prototype)&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g, true&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map\n\n/***/ }),\n\n/***/ 2553:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_1745022__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n/*<replacement>*/\n\nvar Buffer = (__nested_webpack_require_1745022__(1750).Buffer);\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.s = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}\n\n/***/ }),\n\n/***/ 311:\n/***/ (function(module) {\n\nvar TINF_OK = 0;\nvar TINF_DATA_ERROR = -3;\n\nfunction Tree() {\n this.table = new Uint16Array(16); /* table of code length counts */\n this.trans = new Uint16Array(288); /* code -> symbol translation table */\n}\n\nfunction Data(source, dest) {\n this.source = source;\n this.sourceIndex = 0;\n this.tag = 0;\n this.bitcount = 0;\n \n this.dest = dest;\n this.destLen = 0;\n \n this.ltree = new Tree(); /* dynamic length/symbol tree */\n this.dtree = new Tree(); /* dynamic distance tree */\n}\n\n/* --------------------------------------------------- *\n * -- uninitialized global data (static structures) -- *\n * --------------------------------------------------- */\n\nvar sltree = new Tree();\nvar sdtree = new Tree();\n\n/* extra bits and base tables for length codes */\nvar length_bits = new Uint8Array(30);\nvar length_base = new Uint16Array(30);\n\n/* extra bits and base tables for distance codes */\nvar dist_bits = new Uint8Array(30);\nvar dist_base = new Uint16Array(30);\n\n/* special ordering of code length codes */\nvar clcidx = new Uint8Array([\n 16, 17, 18, 0, 8, 7, 9, 6,\n 10, 5, 11, 4, 12, 3, 13, 2,\n 14, 1, 15\n]);\n\n/* used by tinf_decode_trees, avoids allocations every call */\nvar code_tree = new Tree();\nvar lengths = new Uint8Array(288 + 32);\n\n/* ----------------------- *\n * -- utility functions -- *\n * ----------------------- */\n\n/* build extra bits and base tables */\nfunction tinf_build_bits_base(bits, base, delta, first) {\n var i, sum;\n\n /* build bits table */\n for (i = 0; i < delta; ++i) bits[i] = 0;\n for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0;\n\n /* build base table */\n for (sum = first, i = 0; i < 30; ++i) {\n base[i] = sum;\n sum += 1 << bits[i];\n }\n}\n\n/* build the fixed huffman trees */\nfunction tinf_build_fixed_trees(lt, dt) {\n var i;\n\n /* build fixed length tree */\n for (i = 0; i < 7; ++i) lt.table[i] = 0;\n\n lt.table[7] = 24;\n lt.table[8] = 152;\n lt.table[9] = 112;\n\n for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i;\n for (i = 0; i < 144; ++i) lt.trans[24 + i] = i;\n for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i;\n for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i;\n\n /* build fixed distance tree */\n for (i = 0; i < 5; ++i) dt.table[i] = 0;\n\n dt.table[5] = 32;\n\n for (i = 0; i < 32; ++i) dt.trans[i] = i;\n}\n\n/* given an array of code lengths, build a tree */\nvar offs = new Uint16Array(16);\n\nfunction tinf_build_tree(t, lengths, off, num) {\n var i, sum;\n\n /* clear code length count table */\n for (i = 0; i < 16; ++i) t.table[i] = 0;\n\n /* scan symbol lengths, and sum code length counts */\n for (i = 0; i < num; ++i) t.table[lengths[off + i]]++;\n\n t.table[0] = 0;\n\n /* compute offset table for distribution sort */\n for (sum = 0, i = 0; i < 16; ++i) {\n offs[i] = sum;\n sum += t.table[i];\n }\n\n /* create code->symbol translation table (symbols sorted by code) */\n for (i = 0; i < num; ++i) {\n if (lengths[off + i]) t.trans[offs[lengths[off + i]]++] = i;\n }\n}\n\n/* ---------------------- *\n * -- decode functions -- *\n * ---------------------- */\n\n/* get one bit from source stream */\nfunction tinf_getbit(d) {\n /* check if tag is empty */\n if (!d.bitcount--) {\n /* load next tag */\n d.tag = d.source[d.sourceIndex++];\n d.bitcount = 7;\n }\n\n /* shift bit out of tag */\n var bit = d.tag & 1;\n d.tag >>>= 1;\n\n return bit;\n}\n\n/* read a num bit value from a stream and add base */\nfunction tinf_read_bits(d, num, base) {\n if (!num)\n return base;\n\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n\n var val = d.tag & (0xffff >>> (16 - num));\n d.tag >>>= num;\n d.bitcount -= num;\n return val + base;\n}\n\n/* given a data stream and a tree, decode a symbol */\nfunction tinf_decode_symbol(d, t) {\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n \n var sum = 0, cur = 0, len = 0;\n var tag = d.tag;\n\n /* get more bits while code value is above sum */\n do {\n cur = 2 * cur + (tag & 1);\n tag >>>= 1;\n ++len;\n\n sum += t.table[len];\n cur -= t.table[len];\n } while (cur >= 0);\n \n d.tag = tag;\n d.bitcount -= len;\n\n return t.trans[sum + cur];\n}\n\n/* given a data stream, decode dynamic trees from it */\nfunction tinf_decode_trees(d, lt, dt) {\n var hlit, hdist, hclen;\n var i, num, length;\n\n /* get 5 bits HLIT (257-286) */\n hlit = tinf_read_bits(d, 5, 257);\n\n /* get 5 bits HDIST (1-32) */\n hdist = tinf_read_bits(d, 5, 1);\n\n /* get 4 bits HCLEN (4-19) */\n hclen = tinf_read_bits(d, 4, 4);\n\n for (i = 0; i < 19; ++i) lengths[i] = 0;\n\n /* read code lengths for code length alphabet */\n for (i = 0; i < hclen; ++i) {\n /* get 3 bits code length (0-7) */\n var clen = tinf_read_bits(d, 3, 0);\n lengths[clcidx[i]] = clen;\n }\n\n /* build code length tree */\n tinf_build_tree(code_tree, lengths, 0, 19);\n\n /* decode code lengths for the dynamic trees */\n for (num = 0; num < hlit + hdist;) {\n var sym = tinf_decode_symbol(d, code_tree);\n\n switch (sym) {\n case 16:\n /* copy previous code length 3-6 times (read 2 bits) */\n var prev = lengths[num - 1];\n for (length = tinf_read_bits(d, 2, 3); length; --length) {\n lengths[num++] = prev;\n }\n break;\n case 17:\n /* repeat code length 0 for 3-10 times (read 3 bits) */\n for (length = tinf_read_bits(d, 3, 3); length; --length) {\n lengths[num++] = 0;\n }\n break;\n case 18:\n /* repeat code length 0 for 11-138 times (read 7 bits) */\n for (length = tinf_read_bits(d, 7, 11); length; --length) {\n lengths[num++] = 0;\n }\n break;\n default:\n /* values 0-15 represent the actual code lengths */\n lengths[num++] = sym;\n break;\n }\n }\n\n /* build dynamic trees */\n tinf_build_tree(lt, lengths, 0, hlit);\n tinf_build_tree(dt, lengths, hlit, hdist);\n}\n\n/* ----------------------------- *\n * -- block inflate functions -- *\n * ----------------------------- */\n\n/* given a stream and two trees, inflate a block of data */\nfunction tinf_inflate_block_data(d, lt, dt) {\n while (1) {\n var sym = tinf_decode_symbol(d, lt);\n\n /* check for end of block */\n if (sym === 256) {\n return TINF_OK;\n }\n\n if (sym < 256) {\n d.dest[d.destLen++] = sym;\n } else {\n var length, dist, offs;\n var i;\n\n sym -= 257;\n\n /* possibly get more bits from length code */\n length = tinf_read_bits(d, length_bits[sym], length_base[sym]);\n\n dist = tinf_decode_symbol(d, dt);\n\n /* possibly get more bits from distance code */\n offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);\n\n /* copy match */\n for (i = offs; i < offs + length; ++i) {\n d.dest[d.destLen++] = d.dest[i];\n }\n }\n }\n}\n\n/* inflate an uncompressed block of data */\nfunction tinf_inflate_uncompressed_block(d) {\n var length, invlength;\n var i;\n \n /* unread from bitbuffer */\n while (d.bitcount > 8) {\n d.sourceIndex--;\n d.bitcount -= 8;\n }\n\n /* get length */\n length = d.source[d.sourceIndex + 1];\n length = 256 * length + d.source[d.sourceIndex];\n\n /* get one's complement of length */\n invlength = d.source[d.sourceIndex + 3];\n invlength = 256 * invlength + d.source[d.sourceIndex + 2];\n\n /* check length */\n if (length !== (~invlength & 0x0000ffff))\n return TINF_DATA_ERROR;\n\n d.sourceIndex += 4;\n\n /* copy block */\n for (i = length; i; --i)\n d.dest[d.destLen++] = d.source[d.sourceIndex++];\n\n /* make sure we start next block on a byte boundary */\n d.bitcount = 0;\n\n return TINF_OK;\n}\n\n/* inflate stream from source to dest */\nfunction tinf_uncompress(source, dest) {\n var d = new Data(source, dest);\n var bfinal, btype, res;\n\n do {\n /* read final block flag */\n bfinal = tinf_getbit(d);\n\n /* read block type (2 bits) */\n btype = tinf_read_bits(d, 2, 0);\n\n /* decompress block */\n switch (btype) {\n case 0:\n /* decompress uncompressed block */\n res = tinf_inflate_uncompressed_block(d);\n break;\n case 1:\n /* decompress block with fixed huffman trees */\n res = tinf_inflate_block_data(d, sltree, sdtree);\n break;\n case 2:\n /* decompress block with dynamic huffman trees */\n tinf_decode_trees(d, d.ltree, d.dtree);\n res = tinf_inflate_block_data(d, d.ltree, d.dtree);\n break;\n default:\n res = TINF_DATA_ERROR;\n }\n\n if (res !== TINF_OK)\n throw new Error('Data error');\n\n } while (!bfinal);\n\n if (d.destLen < d.dest.length) {\n if (typeof d.dest.slice === 'function')\n return d.dest.slice(0, d.destLen);\n else\n return d.dest.subarray(0, d.destLen);\n }\n \n return d.dest;\n}\n\n/* -------------------- *\n * -- initialization -- *\n * -------------------- */\n\n/* build fixed huffman trees */\ntinf_build_fixed_trees(sltree, sdtree);\n\n/* build extra bits and base tables */\ntinf_build_bits_base(length_bits, length_base, 4, 3);\ntinf_build_bits_base(dist_bits, dist_base, 2, 1);\n\n/* fix a special case */\nlength_bits[28] = 0;\nlength_base[28] = 258;\n\nmodule.exports = tinf_uncompress;\n\n\n/***/ }),\n\n/***/ 1917:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_1763814__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __nested_webpack_require_1763814__(8823)[\"Buffer\"];\n\n\n__nested_webpack_require_1763814__(2526);\n\n__nested_webpack_require_1763814__(1817);\n\n__nested_webpack_require_1763814__(2165);\n\n__nested_webpack_require_1763814__(1539);\n\n__nested_webpack_require_1763814__(4747);\n\n__nested_webpack_require_1763814__(7941);\n\n__nested_webpack_require_1763814__(7042);\n\n__nested_webpack_require_1763814__(6992);\n\n__nested_webpack_require_1763814__(1532);\n\n__nested_webpack_require_1763814__(8783);\n\n__nested_webpack_require_1763814__(3948);\n\n__nested_webpack_require_1763814__(2222);\n\n__nested_webpack_require_1763814__(9653);\n\n__nested_webpack_require_1763814__(1249);\n\n__nested_webpack_require_1763814__(2087);\n\n__nested_webpack_require_1763814__(8309);\n\n__nested_webpack_require_1763814__(9601);\n\n__nested_webpack_require_1763814__(4953);\n\n__nested_webpack_require_1763814__(8674);\n\n__nested_webpack_require_1763814__(5003);\n\n__nested_webpack_require_1763814__(189);\n\n__nested_webpack_require_1763814__(561);\n\n__nested_webpack_require_1763814__(2481);\n\n__nested_webpack_require_1763814__(2707);\n\n__nested_webpack_require_1763814__(4916);\n\n__nested_webpack_require_1763814__(4723);\n\n__nested_webpack_require_1763814__(1038);\n\n__nested_webpack_require_1763814__(9600);\n\n__nested_webpack_require_1763814__(3371);\n\n__nested_webpack_require_1763814__(3290);\n\n__nested_webpack_require_1763814__(3299);\n\n__nested_webpack_require_1763814__(8255);\n\n__nested_webpack_require_1763814__(2990);\n\n__nested_webpack_require_1763814__(8927);\n\n__nested_webpack_require_1763814__(3105);\n\n__nested_webpack_require_1763814__(5035);\n\n__nested_webpack_require_1763814__(4345);\n\n__nested_webpack_require_1763814__(7174);\n\n__nested_webpack_require_1763814__(2846);\n\n__nested_webpack_require_1763814__(4731);\n\n__nested_webpack_require_1763814__(7209);\n\n__nested_webpack_require_1763814__(6319);\n\n__nested_webpack_require_1763814__(8867);\n\n__nested_webpack_require_1763814__(7789);\n\n__nested_webpack_require_1763814__(3739);\n\n__nested_webpack_require_1763814__(9368);\n\n__nested_webpack_require_1763814__(4483);\n\n__nested_webpack_require_1763814__(2056);\n\n__nested_webpack_require_1763814__(3462);\n\n__nested_webpack_require_1763814__(678);\n\n__nested_webpack_require_1763814__(7462);\n\n__nested_webpack_require_1763814__(3824);\n\n__nested_webpack_require_1763814__(5021);\n\n__nested_webpack_require_1763814__(2974);\n\n__nested_webpack_require_1763814__(5016);\n\n__nested_webpack_require_1763814__(5109);\n\n__nested_webpack_require_1763814__(9714);\n\n__nested_webpack_require_1763814__(3210);\n\nvar _;\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nvar r = _interopDefault(__nested_webpack_require_1763814__(5106));\n\nvar utils = __nested_webpack_require_1763814__(6610);\n\nvar isEqual = _interopDefault(__nested_webpack_require_1763814__(251));\n\nvar unicode = _interopDefault(__nested_webpack_require_1763814__(3631));\n\nvar UnicodeTrie = _interopDefault(__nested_webpack_require_1763814__(4781));\n\nvar StateMachine = _interopDefault(__nested_webpack_require_1763814__(9811));\n\nvar cloneDeep = _interopDefault(__nested_webpack_require_1763814__(6313));\n\nvar inflate = _interopDefault(__nested_webpack_require_1763814__(311));\n\nvar brotli = _interopDefault(__nested_webpack_require_1763814__(7709));\n\nvar fs = __nested_webpack_require_1763814__(3857);\n\nvar fontkit = {};\nfontkit.logErrors = false;\nvar formats = [];\n\nfontkit.registerFormat = function (format) {\n formats.push(format);\n};\n\nfontkit.openSync = function (filename, postscriptName) {\n var buffer = fs.readFileSync(filename);\n return fontkit.create(buffer, postscriptName);\n};\n\nfontkit.open = function (filename, postscriptName, callback) {\n if (typeof postscriptName === 'function') {\n callback = postscriptName;\n postscriptName = null;\n }\n\n fs.readFile(filename, function (err, buffer) {\n if (err) {\n return callback(err);\n }\n\n try {\n var font = fontkit.create(buffer, postscriptName);\n } catch (e) {\n return callback(e);\n }\n\n return callback(null, font);\n });\n return;\n};\n\nfontkit.create = function (buffer, postscriptName) {\n for (var i = 0; i < formats.length; i++) {\n var format = formats[i];\n\n if (format.probe(buffer)) {\n var font = new format(new r.DecodeStream(buffer));\n\n if (postscriptName) {\n return font.getFont(postscriptName);\n }\n\n return font;\n }\n }\n\n throw new Error('Unknown font format');\n};\n\nfontkit.defaultLanguage = 'en';\n\nfontkit.setDefaultLanguage = function (lang) {\n if (lang === void 0) {\n lang = 'en';\n }\n\n fontkit.defaultLanguage = lang;\n};\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n/**\r\n * This decorator caches the results of a getter or method such that\r\n * the results are lazily computed once, and then cached.\r\n * @private\r\n */\n\n\nfunction cache(target, key, descriptor) {\n if (descriptor.get) {\n var get = descriptor.get;\n\n descriptor.get = function () {\n var value = get.call(this);\n Object.defineProperty(this, key, {\n value: value\n });\n return value;\n };\n } else if (typeof descriptor.value === 'function') {\n var fn = descriptor.value;\n return {\n get: function get() {\n var cache = new Map();\n\n function memoized() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var key = args.length > 0 ? args[0] : 'value';\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n var result = fn.apply(this, args);\n cache.set(key, result);\n return result;\n }\n\n Object.defineProperty(this, key, {\n value: memoized\n });\n return memoized;\n }\n };\n }\n}\n\nvar SubHeader = new r.Struct({\n firstCode: r.uint16,\n entryCount: r.uint16,\n idDelta: r.int16,\n idRangeOffset: r.uint16\n});\nvar CmapGroup = new r.Struct({\n startCharCode: r.uint32,\n endCharCode: r.uint32,\n glyphID: r.uint32\n});\nvar UnicodeValueRange = new r.Struct({\n startUnicodeValue: r.uint24,\n additionalCount: r.uint8\n});\nvar UVSMapping = new r.Struct({\n unicodeValue: r.uint24,\n glyphID: r.uint16\n});\nvar DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\nvar NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\nvar VarSelectorRecord = new r.Struct({\n varSelector: r.uint24,\n defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {\n type: 'parent'\n }),\n nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {\n type: 'parent'\n })\n});\nvar CmapSubtable = new r.VersionedStruct(r.uint16, {\n 0: {\n // Byte encoding\n length: r.uint16,\n // Total table length in bytes (set to 262 for format 0)\n language: r.uint16,\n // Language code for this encoding subtable, or zero if language-independent\n codeMap: new r.LazyArray(r.uint8, 256)\n },\n 2: {\n // High-byte mapping (CJK)\n length: r.uint16,\n language: r.uint16,\n subHeaderKeys: new r.Array(r.uint16, 256),\n subHeaderCount: function subHeaderCount(t) {\n return Math.max.apply(Math, t.subHeaderKeys);\n },\n subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')\n },\n 4: {\n // Segment mapping to delta values\n length: r.uint16,\n // Total table length in bytes\n language: r.uint16,\n // Language code\n segCountX2: r.uint16,\n segCount: function segCount(t) {\n return t.segCountX2 >> 1;\n },\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n endCode: new r.LazyArray(r.uint16, 'segCount'),\n reservedPad: new r.Reserved(r.uint16),\n // This value should be zero\n startCode: new r.LazyArray(r.uint16, 'segCount'),\n idDelta: new r.LazyArray(r.int16, 'segCount'),\n idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, function (t) {\n return (t.length - t._currentOffset) / 2;\n })\n },\n 6: {\n // Trimmed table\n length: r.uint16,\n language: r.uint16,\n firstCode: r.uint16,\n entryCount: r.uint16,\n glyphIndices: new r.LazyArray(r.uint16, 'entryCount')\n },\n 8: {\n // mixed 16-bit and 32-bit coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint16,\n is32: new r.LazyArray(r.uint8, 8192),\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n 10: {\n // Trimmed Array\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n firstCode: r.uint32,\n entryCount: r.uint32,\n glyphIndices: new r.LazyArray(r.uint16, 'numChars')\n },\n 12: {\n // Segmented coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n 13: {\n // Many-to-one range mappings (same as 12 except for group.startGlyphID)\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n 14: {\n // Unicode Variation Sequences\n length: r.uint32,\n numRecords: r.uint32,\n varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\n }\n});\nvar CmapEntry = new r.Struct({\n platformID: r.uint16,\n // Platform identifier\n encodingID: r.uint16,\n // Platform-specific encoding identifier\n table: new r.Pointer(r.uint32, CmapSubtable, {\n type: 'parent',\n lazy: true\n })\n}); // character to glyph mapping\n\nvar cmap = new r.Struct({\n version: r.uint16,\n numSubtables: r.uint16,\n tables: new r.Array(CmapEntry, 'numSubtables')\n});\nvar head = new r.Struct({\n version: r.int32,\n // 0x00010000 (version 1.0)\n revision: r.int32,\n // set by font manufacturer\n checkSumAdjustment: r.uint32,\n magicNumber: r.uint32,\n // set to 0x5F0F3CF5\n flags: r.uint16,\n unitsPerEm: r.uint16,\n // range from 64 to 16384\n created: new r.Array(r.int32, 2),\n modified: new r.Array(r.int32, 2),\n xMin: r.int16,\n // for all glyph bounding boxes\n yMin: r.int16,\n // for all glyph bounding boxes\n xMax: r.int16,\n // for all glyph bounding boxes\n yMax: r.int16,\n // for all glyph bounding boxes\n macStyle: new r.Bitfield(r.uint16, ['bold', 'italic', 'underline', 'outline', 'shadow', 'condensed', 'extended']),\n lowestRecPPEM: r.uint16,\n // smallest readable size in pixels\n fontDirectionHint: r.int16,\n indexToLocFormat: r.int16,\n // 0 for short offsets, 1 for long\n glyphDataFormat: r.int16 // 0 for current format\n\n});\nvar hhea = new r.Struct({\n version: r.int32,\n ascent: r.int16,\n // Distance from baseline of highest ascender\n descent: r.int16,\n // Distance from baseline of lowest descender\n lineGap: r.int16,\n // Typographic line gap\n advanceWidthMax: r.uint16,\n // Maximum advance width value in 'hmtx' table\n minLeftSideBearing: r.int16,\n // Maximum advance width value in 'hmtx' table\n minRightSideBearing: r.int16,\n // Minimum right sidebearing value\n xMaxExtent: r.int16,\n caretSlopeRise: r.int16,\n // Used to calculate the slope of the cursor (rise/run); 1 for vertical\n caretSlopeRun: r.int16,\n // 0 for vertical\n caretOffset: r.int16,\n // Set to 0 for non-slanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16,\n // 0 for current format\n numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table\n\n});\nvar HmtxEntry = new r.Struct({\n advance: r.uint16,\n bearing: r.int16\n});\nvar hmtx = new r.Struct({\n metrics: new r.LazyArray(HmtxEntry, function (t) {\n return t.parent.hhea.numberOfMetrics;\n }),\n bearings: new r.LazyArray(r.int16, function (t) {\n return t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics;\n })\n});\nvar maxp = new r.Struct({\n version: r.int32,\n numGlyphs: r.uint16,\n // The number of glyphs in the font\n maxPoints: r.uint16,\n // Maximum points in a non-composite glyph\n maxContours: r.uint16,\n // Maximum contours in a non-composite glyph\n maxComponentPoints: r.uint16,\n // Maximum points in a composite glyph\n maxComponentContours: r.uint16,\n // Maximum contours in a composite glyph\n maxZones: r.uint16,\n // 1 if instructions do not use the twilight zone, 2 otherwise\n maxTwilightPoints: r.uint16,\n // Maximum points used in Z0\n maxStorage: r.uint16,\n // Number of Storage Area locations\n maxFunctionDefs: r.uint16,\n // Number of FDEFs\n maxInstructionDefs: r.uint16,\n // Number of IDEFs\n maxStackElements: r.uint16,\n // Maximum stack depth\n maxSizeOfInstructions: r.uint16,\n // Maximum byte count for glyph instructions\n maxComponentElements: r.uint16,\n // Maximum number of components referenced at “top level” for any composite glyph\n maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components\n\n});\n/**\r\n * Gets an encoding name from platform, encoding, and language ids.\r\n * Returned encoding names can be used in iconv-lite to decode text.\r\n */\n\nfunction getEncoding(platformID, encodingID, languageID) {\n if (languageID === void 0) {\n languageID = 0;\n }\n\n if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\n return MAC_LANGUAGE_ENCODINGS[languageID];\n }\n\n return ENCODINGS[platformID][encodingID];\n} // Map of platform ids to encoding ids.\n\n\nvar ENCODINGS = [// unicode\n['utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be'], // macintosh\n// Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\n// 0\tRoman 17\tMalayalam\n// 1\tJapanese\t 18\tSinhalese\n// 2\tTraditional Chinese\t 19\tBurmese\n// 3\tKorean\t 20\tKhmer\n// 4\tArabic\t 21\tThai\n// 5\tHebrew\t 22\tLaotian\n// 6\tGreek\t 23\tGeorgian\n// 7\tRussian\t 24\tArmenian\n// 8\tRSymbol\t 25\tSimplified Chinese\n// 9\tDevanagari\t 26\tTibetan\n// 10\tGurmukhi\t 27\tMongolian\n// 11\tGujarati\t 28\tGeez\n// 12\tOriya\t 29\tSlavic\n// 13\tBengali\t 30\tVietnamese\n// 14\tTamil\t 31\tSindhi\n// 15\tTelugu\t 32\t(Uninterpreted)\n// 16\tKannada\n['macroman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8', 'macgreek', 'maccyrillic', 'symbol', 'Devanagari', 'Gurmukhi', 'Gujarati', 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese', 'Burmese', 'Khmer', 'macthai', 'Laotian', 'Georgian', 'Armenian', 'gb-2312-80', 'Tibetan', 'Mongolian', 'Geez', 'maccenteuro', 'Vietnamese', 'Sindhi'], // ISO (deprecated)\n['ascii'], // windows\n// Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\n['symbol', 'utf16be', 'shift-jis', 'gb18030', 'big5', 'wansung', 'johab', null, null, null, 'utf16be']]; // Overrides for Mac scripts by language id.\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\n\nvar MAC_LANGUAGE_ENCODINGS = {\n 15: 'maciceland',\n 17: 'macturkish',\n 18: 'maccroatian',\n 24: 'maccenteuro',\n 25: 'maccenteuro',\n 26: 'maccenteuro',\n 27: 'maccenteuro',\n 28: 'maccenteuro',\n 30: 'maciceland',\n 37: 'macromania',\n 38: 'maccenteuro',\n 39: 'maccenteuro',\n 40: 'maccenteuro',\n 143: 'macinuit',\n // Unsupported by iconv-lite\n 146: 'macgaelic' // Unsupported by iconv-lite\n\n}; // Map of platform ids to BCP-47 language codes.\n\nvar LANGUAGES = [// unicode\n[], {\n // macintosh\n 0: 'en',\n 30: 'fo',\n 60: 'ks',\n 90: 'rw',\n 1: 'fr',\n 31: 'fa',\n 61: 'ku',\n 91: 'rn',\n 2: 'de',\n 32: 'ru',\n 62: 'sd',\n 92: 'ny',\n 3: 'it',\n 33: 'zh',\n 63: 'bo',\n 93: 'mg',\n 4: 'nl',\n 34: 'nl-BE',\n 64: 'ne',\n 94: 'eo',\n 5: 'sv',\n 35: 'ga',\n 65: 'sa',\n 128: 'cy',\n 6: 'es',\n 36: 'sq',\n 66: 'mr',\n 129: 'eu',\n 7: 'da',\n 37: 'ro',\n 67: 'bn',\n 130: 'ca',\n 8: 'pt',\n 38: 'cz',\n 68: 'as',\n 131: 'la',\n 9: 'no',\n 39: 'sk',\n 69: 'gu',\n 132: 'qu',\n 10: 'he',\n 40: 'si',\n 70: 'pa',\n 133: 'gn',\n 11: 'ja',\n 41: 'yi',\n 71: 'or',\n 134: 'ay',\n 12: 'ar',\n 42: 'sr',\n 72: 'ml',\n 135: 'tt',\n 13: 'fi',\n 43: 'mk',\n 73: 'kn',\n 136: 'ug',\n 14: 'el',\n 44: 'bg',\n 74: 'ta',\n 137: 'dz',\n 15: 'is',\n 45: 'uk',\n 75: 'te',\n 138: 'jv',\n 16: 'mt',\n 46: 'be',\n 76: 'si',\n 139: 'su',\n 17: 'tr',\n 47: 'uz',\n 77: 'my',\n 140: 'gl',\n 18: 'hr',\n 48: 'kk',\n 78: 'km',\n 141: 'af',\n 19: 'zh-Hant',\n 49: 'az-Cyrl',\n 79: 'lo',\n 142: 'br',\n 20: 'ur',\n 50: 'az-Arab',\n 80: 'vi',\n 143: 'iu',\n 21: 'hi',\n 51: 'hy',\n 81: 'id',\n 144: 'gd',\n 22: 'th',\n 52: 'ka',\n 82: 'tl',\n 145: 'gv',\n 23: 'ko',\n 53: 'mo',\n 83: 'ms',\n 146: 'ga',\n 24: 'lt',\n 54: 'ky',\n 84: 'ms-Arab',\n 147: 'to',\n 25: 'pl',\n 55: 'tg',\n 85: 'am',\n 148: 'el-polyton',\n 26: 'hu',\n 56: 'tk',\n 86: 'ti',\n 149: 'kl',\n 27: 'es',\n 57: 'mn-CN',\n 87: 'om',\n 150: 'az',\n 28: 'lv',\n 58: 'mn',\n 88: 'so',\n 151: 'nn',\n 29: 'se',\n 59: 'ps',\n 89: 'sw'\n}, // ISO (deprecated)\n[], {\n // windows \n 0x0436: 'af',\n 0x4009: 'en-IN',\n 0x0487: 'rw',\n 0x0432: 'tn',\n 0x041C: 'sq',\n 0x1809: 'en-IE',\n 0x0441: 'sw',\n 0x045B: 'si',\n 0x0484: 'gsw',\n 0x2009: 'en-JM',\n 0x0457: 'kok',\n 0x041B: 'sk',\n 0x045E: 'am',\n 0x4409: 'en-MY',\n 0x0412: 'ko',\n 0x0424: 'sl',\n 0x1401: 'ar-DZ',\n 0x1409: 'en-NZ',\n 0x0440: 'ky',\n 0x2C0A: 'es-AR',\n 0x3C01: 'ar-BH',\n 0x3409: 'en-PH',\n 0x0454: 'lo',\n 0x400A: 'es-BO',\n 0x0C01: 'ar',\n 0x4809: 'en-SG',\n 0x0426: 'lv',\n 0x340A: 'es-CL',\n 0x0801: 'ar-IQ',\n 0x1C09: 'en-ZA',\n 0x0427: 'lt',\n 0x240A: 'es-CO',\n 0x2C01: 'ar-JO',\n 0x2C09: 'en-TT',\n 0x082E: 'dsb',\n 0x140A: 'es-CR',\n 0x3401: 'ar-KW',\n 0x0809: 'en-GB',\n 0x046E: 'lb',\n 0x1C0A: 'es-DO',\n 0x3001: 'ar-LB',\n 0x0409: 'en',\n 0x042F: 'mk',\n 0x300A: 'es-EC',\n 0x1001: 'ar-LY',\n 0x3009: 'en-ZW',\n 0x083E: 'ms-BN',\n 0x440A: 'es-SV',\n 0x1801: 'ary',\n 0x0425: 'et',\n 0x043E: 'ms',\n 0x100A: 'es-GT',\n 0x2001: 'ar-OM',\n 0x0438: 'fo',\n 0x044C: 'ml',\n 0x480A: 'es-HN',\n 0x4001: 'ar-QA',\n 0x0464: 'fil',\n 0x043A: 'mt',\n 0x080A: 'es-MX',\n 0x0401: 'ar-SA',\n 0x040B: 'fi',\n 0x0481: 'mi',\n 0x4C0A: 'es-NI',\n 0x2801: 'ar-SY',\n 0x080C: 'fr-BE',\n 0x047A: 'arn',\n 0x180A: 'es-PA',\n 0x1C01: 'aeb',\n 0x0C0C: 'fr-CA',\n 0x044E: 'mr',\n 0x3C0A: 'es-PY',\n 0x3801: 'ar-AE',\n 0x040C: 'fr',\n 0x047C: 'moh',\n 0x280A: 'es-PE',\n 0x2401: 'ar-YE',\n 0x140C: 'fr-LU',\n 0x0450: 'mn',\n 0x500A: 'es-PR',\n 0x042B: 'hy',\n 0x180C: 'fr-MC',\n 0x0850: 'mn-CN',\n 0x0C0A: 'es',\n 0x044D: 'as',\n 0x100C: 'fr-CH',\n 0x0461: 'ne',\n 0x040A: 'es',\n 0x082C: 'az-Cyrl',\n 0x0462: 'fy',\n 0x0414: 'nb',\n 0x540A: 'es-US',\n 0x042C: 'az',\n 0x0456: 'gl',\n 0x0814: 'nn',\n 0x380A: 'es-UY',\n 0x046D: 'ba',\n 0x0437: 'ka',\n 0x0482: 'oc',\n 0x200A: 'es-VE',\n 0x042D: 'eu',\n 0x0C07: 'de-AT',\n 0x0448: 'or',\n 0x081D: 'sv-FI',\n 0x0423: 'be',\n 0x0407: 'de',\n 0x0463: 'ps',\n 0x041D: 'sv',\n 0x0845: 'bn',\n 0x1407: 'de-LI',\n 0x0415: 'pl',\n 0x045A: 'syr',\n 0x0445: 'bn-IN',\n 0x1007: 'de-LU',\n 0x0416: 'pt',\n 0x0428: 'tg',\n 0x201A: 'bs-Cyrl',\n 0x0807: 'de-CH',\n 0x0816: 'pt-PT',\n 0x085F: 'tzm',\n 0x141A: 'bs',\n 0x0408: 'el',\n 0x0446: 'pa',\n 0x0449: 'ta',\n 0x047E: 'br',\n 0x046F: 'kl',\n 0x046B: 'qu-BO',\n 0x0444: 'tt',\n 0x0402: 'bg',\n 0x0447: 'gu',\n 0x086B: 'qu-EC',\n 0x044A: 'te',\n 0x0403: 'ca',\n 0x0468: 'ha',\n 0x0C6B: 'qu',\n 0x041E: 'th',\n 0x0C04: 'zh-HK',\n 0x040D: 'he',\n 0x0418: 'ro',\n 0x0451: 'bo',\n 0x1404: 'zh-MO',\n 0x0439: 'hi',\n 0x0417: 'rm',\n 0x041F: 'tr',\n 0x0804: 'zh',\n 0x040E: 'hu',\n 0x0419: 'ru',\n 0x0442: 'tk',\n 0x1004: 'zh-SG',\n 0x040F: 'is',\n 0x243B: 'smn',\n 0x0480: 'ug',\n 0x0404: 'zh-TW',\n 0x0470: 'ig',\n 0x103B: 'smj-NO',\n 0x0422: 'uk',\n 0x0483: 'co',\n 0x0421: 'id',\n 0x143B: 'smj',\n 0x042E: 'hsb',\n 0x041A: 'hr',\n 0x045D: 'iu',\n 0x0C3B: 'se-FI',\n 0x0420: 'ur',\n 0x101A: 'hr-BA',\n 0x085D: 'iu-Latn',\n 0x043B: 'se',\n 0x0843: 'uz-Cyrl',\n 0x0405: 'cs',\n 0x083C: 'ga',\n 0x083B: 'se-SE',\n 0x0443: 'uz',\n 0x0406: 'da',\n 0x0434: 'xh',\n 0x203B: 'sms',\n 0x042A: 'vi',\n 0x048C: 'prs',\n 0x0435: 'zu',\n 0x183B: 'sma-NO',\n 0x0452: 'cy',\n 0x0465: 'dv',\n 0x0410: 'it',\n 0x1C3B: 'sms',\n 0x0488: 'wo',\n 0x0813: 'nl-BE',\n 0x0810: 'it-CH',\n 0x044F: 'sa',\n 0x0485: 'sah',\n 0x0413: 'nl',\n 0x0411: 'ja',\n 0x1C1A: 'sr-Cyrl-BA',\n 0x0478: 'ii',\n 0x0C09: 'en-AU',\n 0x044B: 'kn',\n 0x0C1A: 'sr',\n 0x046A: 'yo',\n 0x2809: 'en-BZ',\n 0x043F: 'kk',\n 0x181A: 'sr-Latn-BA',\n 0x1009: 'en-CA',\n 0x0453: 'km',\n 0x081A: 'sr-Latn',\n 0x2409: 'en-029',\n 0x0486: 'quc',\n 0x046C: 'nso'\n}];\nvar NameRecord = new r.Struct({\n platformID: r.uint16,\n encodingID: r.uint16,\n languageID: r.uint16,\n nameID: r.uint16,\n length: r.uint16,\n string: new r.Pointer(r.uint16, new r.String('length', function (t) {\n return getEncoding(t.platformID, t.encodingID, t.languageID);\n }), {\n type: 'parent',\n relativeTo: function relativeTo(ctx) {\n return ctx.parent.stringOffset;\n },\n allowNull: false\n })\n});\nvar LangTagRecord = new r.Struct({\n length: r.uint16,\n tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {\n type: 'parent',\n relativeTo: function relativeTo(ctx) {\n return ctx.stringOffset;\n }\n })\n});\nvar NameTable = new r.VersionedStruct(r.uint16, {\n 0: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count')\n },\n 1: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count'),\n langTagCount: r.uint16,\n langTags: new r.Array(LangTagRecord, 'langTagCount')\n }\n});\nvar NAMES = ['copyright', 'fontFamily', 'fontSubfamily', 'uniqueSubfamily', 'fullName', 'version', 'postscriptName', // Note: A font may have only one PostScript name and that name must be ASCII.\n'trademark', 'manufacturer', 'designer', 'description', 'vendorURL', 'designerURL', 'license', 'licenseURL', null, // reserved\n'preferredFamily', 'preferredSubfamily', 'compatibleFull', 'sampleText', 'postscriptCIDFontName', 'wwsFamilyName', 'wwsSubfamilyName'];\n\nNameTable.process = function (stream) {\n var records = {};\n\n for (var _iterator = _createForOfIteratorHelperLoose(this.records), _step; !(_step = _iterator()).done;) {\n var record = _step.value;\n // find out what language this is for\n var language = LANGUAGES[record.platformID][record.languageID];\n\n if (language == null && this.langTags != null && record.languageID >= 0x8000) {\n language = this.langTags[record.languageID - 0x8000].tag;\n }\n\n if (language == null) {\n language = record.platformID + '-' + record.languageID;\n } // if the nameID is >= 256, it is a font feature record (AAT)\n\n\n var key = record.nameID >= 256 ? 'fontFeatures' : NAMES[record.nameID] || record.nameID;\n\n if (records[key] == null) {\n records[key] = {};\n }\n\n var obj = records[key];\n\n if (record.nameID >= 256) {\n obj = obj[record.nameID] || (obj[record.nameID] = {});\n }\n\n if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\n obj[language] = record.string;\n }\n }\n\n this.records = records;\n};\n\nNameTable.preEncode = function () {\n if (Array.isArray(this.records)) return;\n this.version = 0;\n var records = [];\n\n for (var key in this.records) {\n var val = this.records[key];\n if (key === 'fontFeatures') continue;\n records.push({\n platformID: 3,\n encodingID: 1,\n languageID: 0x409,\n nameID: NAMES.indexOf(key),\n length: Buffer.byteLength(val.en, 'utf16le'),\n string: val.en\n });\n\n if (key === 'postscriptName') {\n records.push({\n platformID: 1,\n encodingID: 0,\n languageID: 0,\n nameID: NAMES.indexOf(key),\n length: val.en.length,\n string: val.en\n });\n }\n }\n\n this.records = records;\n this.count = records.length;\n this.stringOffset = NameTable.size(this, null, false);\n};\n\nvar OS2 = new r.VersionedStruct(r.uint16, {\n header: {\n xAvgCharWidth: r.int16,\n // average weighted advance width of lower case letters and space\n usWeightClass: r.uint16,\n // visual weight of stroke in glyphs\n usWidthClass: r.uint16,\n // relative change from the normal aspect ratio (width to height ratio)\n fsType: new r.Bitfield(r.uint16, [// Indicates font embedding licensing rights\n null, 'noEmbedding', 'viewOnly', 'editable', null, null, null, null, 'noSubsetting', 'bitmapOnly']),\n ySubscriptXSize: r.int16,\n // recommended horizontal size in pixels for subscripts\n ySubscriptYSize: r.int16,\n // recommended vertical size in pixels for subscripts\n ySubscriptXOffset: r.int16,\n // recommended horizontal offset for subscripts\n ySubscriptYOffset: r.int16,\n // recommended vertical offset form the baseline for subscripts\n ySuperscriptXSize: r.int16,\n // recommended horizontal size in pixels for superscripts\n ySuperscriptYSize: r.int16,\n // recommended vertical size in pixels for superscripts\n ySuperscriptXOffset: r.int16,\n // recommended horizontal offset for superscripts\n ySuperscriptYOffset: r.int16,\n // recommended vertical offset from the baseline for superscripts\n yStrikeoutSize: r.int16,\n // width of the strikeout stroke\n yStrikeoutPosition: r.int16,\n // position of the strikeout stroke relative to the baseline\n sFamilyClass: r.int16,\n // classification of font-family design\n panose: new r.Array(r.uint8, 10),\n // describe the visual characteristics of a given typeface\n ulCharRange: new r.Array(r.uint32, 4),\n vendorID: new r.String(4),\n // four character identifier for the font vendor\n fsSelection: new r.Bitfield(r.uint16, [// bit field containing information about the font\n 'italic', 'underscore', 'negative', 'outlined', 'strikeout', 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique']),\n usFirstCharIndex: r.uint16,\n // The minimum Unicode index in this font\n usLastCharIndex: r.uint16 // The maximum Unicode index in this font\n\n },\n // The Apple version of this table ends here, but the Microsoft one continues on...\n 0: {},\n 1: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2)\n },\n 2: {\n // these should be common with version 1 somehow\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16\n },\n 5: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16,\n usLowerOpticalPointSize: r.uint16,\n usUpperOpticalPointSize: r.uint16\n }\n});\nvar versions = OS2.versions;\nversions[3] = versions[4] = versions[2];\nvar post = new r.VersionedStruct(r.fixed32, {\n header: {\n // these fields exist at the top of all versions\n italicAngle: r.fixed32,\n // Italic angle in counter-clockwise degrees from the vertical.\n underlinePosition: r.int16,\n // Suggested distance of the top of the underline from the baseline\n underlineThickness: r.int16,\n // Suggested values for the underline thickness\n isFixedPitch: r.uint32,\n // Whether the font is monospaced\n minMemType42: r.uint32,\n // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\n maxMemType42: r.uint32,\n // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\n minMemType1: r.uint32,\n // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\n maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\n\n },\n 1: {},\n // version 1 has no additional fields\n 2: {\n numberOfGlyphs: r.uint16,\n glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\n names: new r.Array(new r.String(r.uint8))\n },\n 2.5: {\n numberOfGlyphs: r.uint16,\n offsets: new r.Array(r.uint8, 'numberOfGlyphs')\n },\n 3: {},\n // version 3 has no additional fields\n 4: {\n map: new r.Array(r.uint32, function (t) {\n return t.parent.maxp.numGlyphs;\n })\n }\n});\nvar cvt = new r.Struct({\n controlValues: new r.Array(r.int16)\n}); // These instructions are known as the font program. The main use of this table\n// is for the definition of functions that are used in many different glyph programs.\n\nvar fpgm = new r.Struct({\n instructions: new r.Array(r.uint8)\n});\nvar loca = new r.VersionedStruct('head.indexToLocFormat', {\n 0: {\n offsets: new r.Array(r.uint16)\n },\n 1: {\n offsets: new r.Array(r.uint32)\n }\n});\n\nloca.process = function () {\n if (this.version === 0) {\n for (var i = 0; i < this.offsets.length; i++) {\n this.offsets[i] <<= 1;\n }\n }\n};\n\nloca.preEncode = function () {\n if (this.version === 0) {\n for (var i = 0; i < this.offsets.length; i++) {\n this.offsets[i] >>>= 1;\n }\n }\n};\n\nvar prep = new r.Struct({\n controlValueProgram: new r.Array(r.uint8)\n});\nvar glyf = new r.Array(new r.Buffer());\n\nvar CFFIndex = /*#__PURE__*/function () {\n function CFFIndex(type) {\n this.type = type;\n }\n\n var _proto = CFFIndex.prototype;\n\n _proto.getCFFVersion = function getCFFVersion(ctx) {\n while (ctx && !ctx.hdrSize) {\n ctx = ctx.parent;\n }\n\n return ctx ? ctx.version : -1;\n };\n\n _proto.decode = function decode(stream, parent) {\n var version = this.getCFFVersion(parent);\n var count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE();\n\n if (count === 0) {\n return [];\n }\n\n var offSize = stream.readUInt8();\n var offsetType;\n\n if (offSize === 1) {\n offsetType = r.uint8;\n } else if (offSize === 2) {\n offsetType = r.uint16;\n } else if (offSize === 3) {\n offsetType = r.uint24;\n } else if (offSize === 4) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset size in CFFIndex: \".concat(offSize, \" \").concat(stream.pos));\n }\n\n var ret = [];\n var startPos = stream.pos + (count + 1) * offSize - 1;\n var start = offsetType.decode(stream);\n\n for (var i = 0; i < count; i++) {\n var end = offsetType.decode(stream);\n\n if (this.type != null) {\n var pos = stream.pos;\n stream.pos = startPos + start;\n parent.length = end - start;\n ret.push(this.type.decode(stream, parent));\n stream.pos = pos;\n } else {\n ret.push({\n offset: startPos + start,\n length: end - start\n });\n }\n\n start = end;\n }\n\n stream.pos = startPos + start;\n return ret;\n };\n\n _proto.size = function size(arr, parent) {\n var size = 2;\n\n if (arr.length === 0) {\n return size;\n }\n\n var type = this.type || new r.Buffer(); // find maximum offset to detminine offset type\n\n var offset = 1;\n\n for (var i = 0; i < arr.length; i++) {\n var item = arr[i];\n offset += type.size(item, parent);\n }\n\n var offsetType;\n\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n }\n\n size += 1 + offsetType.size() * (arr.length + 1);\n size += offset - 1;\n return size;\n };\n\n _proto.encode = function encode(stream, arr, parent) {\n stream.writeUInt16BE(arr.length);\n\n if (arr.length === 0) {\n return;\n }\n\n var type = this.type || new r.Buffer(); // find maximum offset to detminine offset type\n\n var sizes = [];\n var offset = 1;\n\n for (var _iterator2 = _createForOfIteratorHelperLoose(arr), _step2; !(_step2 = _iterator2()).done;) {\n var item = _step2.value;\n var s = type.size(item, parent);\n sizes.push(s);\n offset += s;\n }\n\n var offsetType;\n\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n } // write offset size\n\n\n stream.writeUInt8(offsetType.size()); // write elements\n\n offset = 1;\n offsetType.encode(stream, offset);\n\n for (var _i22 = 0, _sizes = sizes; _i22 < _sizes.length; _i22++) {\n var size = _sizes[_i22];\n offset += size;\n offsetType.encode(stream, offset);\n }\n\n for (var _iterator3 = _createForOfIteratorHelperLoose(arr), _step3; !(_step3 = _iterator3()).done;) {\n var _item = _step3.value;\n type.encode(stream, _item, parent);\n }\n\n return;\n };\n\n return CFFIndex;\n}();\n\nvar FLOAT_EOF = 0xf;\nvar FLOAT_LOOKUP = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-'];\nvar FLOAT_ENCODE_LOOKUP = {\n '.': 10,\n 'E': 11,\n 'E-': 12,\n '-': 14\n};\n\nvar CFFOperand = /*#__PURE__*/function () {\n function CFFOperand() {}\n\n CFFOperand.decode = function decode(stream, value) {\n if (32 <= value && value <= 246) {\n return value - 139;\n }\n\n if (247 <= value && value <= 250) {\n return (value - 247) * 256 + stream.readUInt8() + 108;\n }\n\n if (251 <= value && value <= 254) {\n return -(value - 251) * 256 - stream.readUInt8() - 108;\n }\n\n if (value === 28) {\n return stream.readInt16BE();\n }\n\n if (value === 29) {\n return stream.readInt32BE();\n }\n\n if (value === 30) {\n var str = '';\n\n while (true) {\n var b = stream.readUInt8();\n var n1 = b >> 4;\n\n if (n1 === FLOAT_EOF) {\n break;\n }\n\n str += FLOAT_LOOKUP[n1];\n var n2 = b & 15;\n\n if (n2 === FLOAT_EOF) {\n break;\n }\n\n str += FLOAT_LOOKUP[n2];\n }\n\n return parseFloat(str);\n }\n\n return null;\n };\n\n CFFOperand.size = function size(value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, set to 32768\n if (value.forceLarge) {\n value = 32768;\n }\n\n if ((value | 0) !== value) {\n // floating point\n var str = '' + value;\n return 1 + Math.ceil((str.length + 1) / 2);\n } else if (-107 <= value && value <= 107) {\n return 1;\n } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\n return 2;\n } else if (-32768 <= value && value <= 32767) {\n return 3;\n } else {\n return 5;\n }\n };\n\n CFFOperand.encode = function encode(stream, value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, save the old value and set to 32768\n var val = Number(value);\n\n if (value.forceLarge) {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n } else if ((val | 0) !== val) {\n // floating point\n stream.writeUInt8(30);\n var str = '' + val;\n\n for (var i = 0; i < str.length; i += 2) {\n var c1 = str[i];\n var n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\n\n if (i === str.length - 1) {\n var n2 = FLOAT_EOF;\n } else {\n var c2 = str[i + 1];\n var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\n }\n\n stream.writeUInt8(n1 << 4 | n2 & 15);\n }\n\n if (n2 !== FLOAT_EOF) {\n return stream.writeUInt8(FLOAT_EOF << 4);\n }\n } else if (-107 <= val && val <= 107) {\n return stream.writeUInt8(val + 139);\n } else if (108 <= val && val <= 1131) {\n val -= 108;\n stream.writeUInt8((val >> 8) + 247);\n return stream.writeUInt8(val & 0xff);\n } else if (-1131 <= val && val <= -108) {\n val = -val - 108;\n stream.writeUInt8((val >> 8) + 251);\n return stream.writeUInt8(val & 0xff);\n } else if (-32768 <= val && val <= 32767) {\n stream.writeUInt8(28);\n return stream.writeInt16BE(val);\n } else {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n }\n };\n\n return CFFOperand;\n}();\n\nvar CFFDict = /*#__PURE__*/function () {\n function CFFDict(ops) {\n if (ops === void 0) {\n ops = [];\n }\n\n this.ops = ops;\n this.fields = {};\n\n for (var _iterator4 = _createForOfIteratorHelperLoose(ops), _step4; !(_step4 = _iterator4()).done;) {\n var field = _step4.value;\n var key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\n this.fields[key] = field;\n }\n }\n\n var _proto2 = CFFDict.prototype;\n\n _proto2.decodeOperands = function decodeOperands(type, stream, ret, operands) {\n var _this = this;\n\n if (Array.isArray(type)) {\n return operands.map(function (op, i) {\n return _this.decodeOperands(type[i], stream, ret, [op]);\n });\n } else if (type.decode != null) {\n return type.decode(stream, ret, operands);\n } else {\n switch (type) {\n case 'number':\n case 'offset':\n case 'sid':\n return operands[0];\n\n case 'boolean':\n return !!operands[0];\n\n default:\n return operands;\n }\n }\n };\n\n _proto2.encodeOperands = function encodeOperands(type, stream, ctx, operands) {\n var _this2 = this;\n\n if (Array.isArray(type)) {\n return operands.map(function (op, i) {\n return _this2.encodeOperands(type[i], stream, ctx, op)[0];\n });\n } else if (type.encode != null) {\n return type.encode(stream, operands, ctx);\n } else if (typeof operands === 'number') {\n return [operands];\n } else if (typeof operands === 'boolean') {\n return [+operands];\n } else if (Array.isArray(operands)) {\n return operands;\n } else {\n return [operands];\n }\n };\n\n _proto2.decode = function decode(stream, parent) {\n var end = stream.pos + parent.length;\n var ret = {};\n var operands = []; // define hidden properties\n\n Object.defineProperties(ret, {\n parent: {\n value: parent\n },\n _startOffset: {\n value: stream.pos\n }\n }); // fill in defaults\n\n for (var key in this.fields) {\n var field = this.fields[key];\n ret[field[1]] = field[3];\n }\n\n while (stream.pos < end) {\n var b = stream.readUInt8();\n\n if (b < 28) {\n if (b === 12) {\n b = b << 8 | stream.readUInt8();\n }\n\n var _field = this.fields[b];\n\n if (!_field) {\n throw new Error(\"Unknown operator \".concat(b));\n }\n\n var val = this.decodeOperands(_field[2], stream, ret, operands);\n\n if (val != null) {\n if (val instanceof utils.PropertyDescriptor) {\n Object.defineProperty(ret, _field[1], val);\n } else {\n ret[_field[1]] = val;\n }\n }\n\n operands = [];\n } else {\n operands.push(CFFOperand.decode(stream, b));\n }\n }\n\n return ret;\n };\n\n _proto2.size = function size(dict, parent, includePointers) {\n if (includePointers === void 0) {\n includePointers = true;\n }\n\n var ctx = {\n parent: parent,\n val: dict,\n pointerSize: 0,\n startOffset: parent.startOffset || 0\n };\n var len = 0;\n\n for (var k in this.fields) {\n var field = this.fields[k];\n var val = dict[field[1]];\n\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n\n var operands = this.encodeOperands(field[2], null, ctx, val);\n\n for (var _iterator5 = _createForOfIteratorHelperLoose(operands), _step5; !(_step5 = _iterator5()).done;) {\n var op = _step5.value;\n len += CFFOperand.size(op);\n }\n\n var key = Array.isArray(field[0]) ? field[0] : [field[0]];\n len += key.length;\n }\n\n if (includePointers) {\n len += ctx.pointerSize;\n }\n\n return len;\n };\n\n _proto2.encode = function encode(stream, dict, parent) {\n var ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent: parent,\n val: dict,\n pointerSize: 0\n };\n ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\n\n for (var _iterator6 = _createForOfIteratorHelperLoose(this.ops), _step6; !(_step6 = _iterator6()).done;) {\n var field = _step6.value;\n var val = dict[field[1]];\n\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n\n var operands = this.encodeOperands(field[2], stream, ctx, val);\n\n for (var _iterator7 = _createForOfIteratorHelperLoose(operands), _step7; !(_step7 = _iterator7()).done;) {\n var op = _step7.value;\n CFFOperand.encode(stream, op);\n }\n\n var key = Array.isArray(field[0]) ? field[0] : [field[0]];\n\n for (var _iterator8 = _createForOfIteratorHelperLoose(key), _step8; !(_step8 = _iterator8()).done;) {\n var _op = _step8.value;\n stream.writeUInt8(_op);\n }\n }\n\n var i = 0;\n\n while (i < ctx.pointers.length) {\n var ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n\n return;\n };\n\n return CFFDict;\n}();\n\nvar CFFPointer = /*#__PURE__*/function (_r$Pointer) {\n _inheritsLoose(CFFPointer, _r$Pointer);\n\n function CFFPointer(type, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (options.type == null) {\n options.type = 'global';\n }\n\n return _r$Pointer.call(this, null, type, options) || this;\n }\n\n var _proto3 = CFFPointer.prototype;\n\n _proto3.decode = function decode(stream, parent, operands) {\n this.offsetType = {\n decode: function decode() {\n return operands[0];\n }\n };\n return _r$Pointer.prototype.decode.call(this, stream, parent, operands);\n };\n\n _proto3.encode = function encode(stream, value, ctx) {\n if (!stream) {\n // compute the size (so ctx.pointerSize is correct)\n this.offsetType = {\n size: function size() {\n return 0;\n }\n };\n this.size(value, ctx);\n return [new Ptr(0)];\n }\n\n var ptr = null;\n this.offsetType = {\n encode: function encode(stream, val) {\n return ptr = val;\n }\n };\n\n _r$Pointer.prototype.encode.call(this, stream, value, ctx);\n\n return [new Ptr(ptr)];\n };\n\n return CFFPointer;\n}(r.Pointer);\n\nvar Ptr = /*#__PURE__*/function () {\n function Ptr(val) {\n this.val = val;\n this.forceLarge = true;\n }\n\n var _proto4 = Ptr.prototype;\n\n _proto4.valueOf = function valueOf() {\n return this.val;\n };\n\n return Ptr;\n}();\n\nvar CFFBlendOp = /*#__PURE__*/function () {\n function CFFBlendOp() {}\n\n CFFBlendOp.decode = function decode(stream, parent, operands) {\n var numBlends = operands.pop(); // TODO: actually blend. For now just consume the deltas\n // since we don't use any of the values anyway.\n\n while (operands.length > numBlends) {\n operands.pop();\n }\n };\n\n return CFFBlendOp;\n}();\n\nvar CFFPrivateDict = new CFFDict([// key name type default\n[6, 'BlueValues', 'delta', null], [7, 'OtherBlues', 'delta', null], [8, 'FamilyBlues', 'delta', null], [9, 'FamilyOtherBlues', 'delta', null], [[12, 9], 'BlueScale', 'number', 0.039625], [[12, 10], 'BlueShift', 'number', 7], [[12, 11], 'BlueFuzz', 'number', 1], [10, 'StdHW', 'number', null], [11, 'StdVW', 'number', null], [[12, 12], 'StemSnapH', 'delta', null], [[12, 13], 'StemSnapV', 'delta', null], [[12, 14], 'ForceBold', 'boolean', false], [[12, 17], 'LanguageGroup', 'number', 0], [[12, 18], 'ExpansionFactor', 'number', 0.06], [[12, 19], 'initialRandomSeed', 'number', 0], [20, 'defaultWidthX', 'number', 0], [21, 'nominalWidthX', 'number', 0], [22, 'vsindex', 'number', 0], [23, 'blend', CFFBlendOp, null], [19, 'Subrs', new CFFPointer(new CFFIndex(), {\n type: 'local'\n}), null]]); // Automatically generated from Appendix A of the CFF specification; do\n// not edit. Length should be 391.\n\nvar standardStrings = [\".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\", \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\", \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"];\nvar StandardEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'];\nvar ExpertEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\nvar ISOAdobeCharset = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron'];\nvar ExpertCharset = ['.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\nvar ExpertSubsetCharset = ['.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior']; // Scripts and Languages #\n//########################\n\nvar LangSysTable = new r.Struct({\n reserved: new r.Reserved(r.uint16),\n reqFeatureIndex: r.uint16,\n featureCount: r.uint16,\n featureIndexes: new r.Array(r.uint16, 'featureCount')\n});\nvar LangSysRecord = new r.Struct({\n tag: new r.String(4),\n langSys: new r.Pointer(r.uint16, LangSysTable, {\n type: 'parent'\n })\n});\nvar Script = new r.Struct({\n defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\n count: r.uint16,\n langSysRecords: new r.Array(LangSysRecord, 'count')\n});\nvar ScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, Script, {\n type: 'parent'\n })\n});\nvar ScriptList = new r.Array(ScriptRecord, r.uint16); //#######################\n// Features and Lookups #\n//#######################\n\nvar Feature = new r.Struct({\n featureParams: r.uint16,\n // pointer\n lookupCount: r.uint16,\n lookupListIndexes: new r.Array(r.uint16, 'lookupCount')\n});\nvar FeatureRecord = new r.Struct({\n tag: new r.String(4),\n feature: new r.Pointer(r.uint16, Feature, {\n type: 'parent'\n })\n});\nvar FeatureList = new r.Array(FeatureRecord, r.uint16);\nvar LookupFlags = new r.Struct({\n markAttachmentType: r.uint8,\n flags: new r.Bitfield(r.uint8, ['rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures', 'ignoreMarks', 'useMarkFilteringSet'])\n});\n\nfunction LookupList(SubTable) {\n var Lookup = new r.Struct({\n lookupType: r.uint16,\n flags: LookupFlags,\n subTableCount: r.uint16,\n subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\n markFilteringSet: new r.Optional(r.uint16, function (t) {\n return t.flags.flags.useMarkFilteringSet;\n })\n });\n return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\n} //#################\n// Coverage Table #\n//#################\n\n\nvar RangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n startCoverageIndex: r.uint16\n});\nvar Coverage = new r.VersionedStruct(r.uint16, {\n 1: {\n glyphCount: r.uint16,\n glyphs: new r.Array(r.uint16, 'glyphCount')\n },\n 2: {\n rangeCount: r.uint16,\n rangeRecords: new r.Array(RangeRecord, 'rangeCount')\n }\n}); //#########################\n// Class Definition Table #\n//#########################\n\nvar ClassRangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n class: r.uint16\n});\nvar ClassDef = new r.VersionedStruct(r.uint16, {\n 1: {\n // Class array\n startGlyph: r.uint16,\n glyphCount: r.uint16,\n classValueArray: new r.Array(r.uint16, 'glyphCount')\n },\n 2: {\n // Class ranges\n classRangeCount: r.uint16,\n classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\n }\n}); //###############\n// Device Table #\n//###############\n\nvar Device = new r.Struct({\n a: r.uint16,\n // startSize for hinting Device, outerIndex for VariationIndex\n b: r.uint16,\n // endSize for Device, innerIndex for VariationIndex\n deltaFormat: r.uint16\n}); //#############################################\n// Contextual Substitution/Positioning Tables #\n//#############################################\n\nvar LookupRecord = new r.Struct({\n sequenceIndex: r.uint16,\n lookupListIndex: r.uint16\n});\nvar Rule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n input: new r.Array(r.uint16, function (t) {\n return t.glyphCount - 1;\n }),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\nvar ClassRule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n classes: new r.Array(r.uint16, function (t) {\n return t.glyphCount - 1;\n }),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\nvar Context = new r.VersionedStruct(r.uint16, {\n 1: {\n // Simple context\n coverage: new r.Pointer(r.uint16, Coverage),\n ruleSetCount: r.uint16,\n ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\n },\n 2: {\n // Class-based context\n coverage: new r.Pointer(r.uint16, Coverage),\n classDef: new r.Pointer(r.uint16, ClassDef),\n classSetCnt: r.uint16,\n classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\n },\n 3: {\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n}); //######################################################\n// Chaining Contextual Substitution/Positioning Tables #\n//######################################################\n\nvar ChainRule = new r.Struct({\n backtrackGlyphCount: r.uint16,\n backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n input: new r.Array(r.uint16, function (t) {\n return t.inputGlyphCount - 1;\n }),\n lookaheadGlyphCount: r.uint16,\n lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\nvar ChainingContext = new r.VersionedStruct(r.uint16, {\n 1: {\n // Simple context glyph substitution\n coverage: new r.Pointer(r.uint16, Coverage),\n chainCount: r.uint16,\n chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n 2: {\n // Class-based chaining context\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackClassDef: new r.Pointer(r.uint16, ClassDef),\n inputClassDef: new r.Pointer(r.uint16, ClassDef),\n lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),\n chainCount: r.uint16,\n chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n 3: {\n // Coverage-based chaining context\n backtrackGlyphCount: r.uint16,\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n});\n/*******************\r\n * Variation Store *\r\n *******************/\n\nvar F2DOT14 = new r.Fixed(16, 'BE', 14);\nvar RegionAxisCoordinates = new r.Struct({\n startCoord: F2DOT14,\n peakCoord: F2DOT14,\n endCoord: F2DOT14\n});\nvar VariationRegionList = new r.Struct({\n axisCount: r.uint16,\n regionCount: r.uint16,\n variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\n});\nvar DeltaSet = new r.Struct({\n shortDeltas: new r.Array(r.int16, function (t) {\n return t.parent.shortDeltaCount;\n }),\n regionDeltas: new r.Array(r.int8, function (t) {\n return t.parent.regionIndexCount - t.parent.shortDeltaCount;\n }),\n deltas: function deltas(t) {\n return t.shortDeltas.concat(t.regionDeltas);\n }\n});\nvar ItemVariationData = new r.Struct({\n itemCount: r.uint16,\n shortDeltaCount: r.uint16,\n regionIndexCount: r.uint16,\n regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\n deltaSets: new r.Array(DeltaSet, 'itemCount')\n});\nvar ItemVariationStore = new r.Struct({\n format: r.uint16,\n variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\n variationDataCount: r.uint16,\n itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\n});\n/**********************\r\n * Feature Variations *\r\n **********************/\n\nvar ConditionTable = new r.VersionedStruct(r.uint16, {\n 1: (_ = {\n axisIndex: r.uint16\n }, _[\"axisIndex\"] = r.uint16, _.filterRangeMinValue = F2DOT14, _.filterRangeMaxValue = F2DOT14, _)\n});\nvar ConditionSet = new r.Struct({\n conditionCount: r.uint16,\n conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\n});\nvar FeatureTableSubstitutionRecord = new r.Struct({\n featureIndex: r.uint16,\n alternateFeatureTable: new r.Pointer(r.uint32, Feature, {\n type: 'parent'\n })\n});\nvar FeatureTableSubstitution = new r.Struct({\n version: r.fixed32,\n substitutionCount: r.uint16,\n substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\n});\nvar FeatureVariationRecord = new r.Struct({\n conditionSet: new r.Pointer(r.uint32, ConditionSet, {\n type: 'parent'\n }),\n featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {\n type: 'parent'\n })\n});\nvar FeatureVariations = new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n featureVariationRecordCount: r.uint32,\n featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\n}); // otherwise delegates to the provided type.\n\nvar PredefinedOp = /*#__PURE__*/function () {\n function PredefinedOp(predefinedOps, type) {\n this.predefinedOps = predefinedOps;\n this.type = type;\n }\n\n var _proto5 = PredefinedOp.prototype;\n\n _proto5.decode = function decode(stream, parent, operands) {\n if (this.predefinedOps[operands[0]]) {\n return this.predefinedOps[operands[0]];\n }\n\n return this.type.decode(stream, parent, operands);\n };\n\n _proto5.size = function size(value, ctx) {\n return this.type.size(value, ctx);\n };\n\n _proto5.encode = function encode(stream, value, ctx) {\n var index = this.predefinedOps.indexOf(value);\n\n if (index !== -1) {\n return index;\n }\n\n return this.type.encode(stream, value, ctx);\n };\n\n return PredefinedOp;\n}();\n\nvar CFFEncodingVersion = /*#__PURE__*/function (_r$Number) {\n _inheritsLoose(CFFEncodingVersion, _r$Number);\n\n function CFFEncodingVersion() {\n return _r$Number.call(this, 'UInt8') || this;\n }\n\n var _proto6 = CFFEncodingVersion.prototype;\n\n _proto6.decode = function decode(stream) {\n return r.uint8.decode(stream) & 0x7f;\n };\n\n return CFFEncodingVersion;\n}(r.Number);\n\nvar Range1 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint8\n});\nvar Range2 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint16\n});\nvar CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\n 0: {\n nCodes: r.uint8,\n codes: new r.Array(r.uint8, 'nCodes')\n },\n 1: {\n nRanges: r.uint8,\n ranges: new r.Array(Range1, 'nRanges')\n } // TODO: supplement?\n\n});\nvar CFFEncoding = new PredefinedOp([StandardEncoding, ExpertEncoding], new CFFPointer(CFFCustomEncoding, {\n lazy: true\n})); // Decodes an array of ranges until the total\n// length is equal to the provided length.\n\nvar RangeArray = /*#__PURE__*/function (_r$Array) {\n _inheritsLoose(RangeArray, _r$Array);\n\n function RangeArray() {\n return _r$Array.apply(this, arguments) || this;\n }\n\n var _proto7 = RangeArray.prototype;\n\n _proto7.decode = function decode(stream, parent) {\n var length = utils.resolveLength(this.length, stream, parent);\n var count = 0;\n var res = [];\n\n while (count < length) {\n var range = this.type.decode(stream, parent);\n range.offset = count;\n count += range.nLeft + 1;\n res.push(range);\n }\n\n return res;\n };\n\n return RangeArray;\n}(r.Array);\n\nvar CFFCustomCharset = new r.VersionedStruct(r.uint8, {\n 0: {\n glyphs: new r.Array(r.uint16, function (t) {\n return t.parent.CharStrings.length - 1;\n })\n },\n 1: {\n ranges: new RangeArray(Range1, function (t) {\n return t.parent.CharStrings.length - 1;\n })\n },\n 2: {\n ranges: new RangeArray(Range2, function (t) {\n return t.parent.CharStrings.length - 1;\n })\n }\n});\nvar CFFCharset = new PredefinedOp([ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset], new CFFPointer(CFFCustomCharset, {\n lazy: true\n}));\nvar FDRange3 = new r.Struct({\n first: r.uint16,\n fd: r.uint8\n});\nvar FDRange4 = new r.Struct({\n first: r.uint32,\n fd: r.uint16\n});\nvar FDSelect = new r.VersionedStruct(r.uint8, {\n 0: {\n fds: new r.Array(r.uint8, function (t) {\n return t.parent.CharStrings.length;\n })\n },\n 3: {\n nRanges: r.uint16,\n ranges: new r.Array(FDRange3, 'nRanges'),\n sentinel: r.uint16\n },\n 4: {\n nRanges: r.uint32,\n ranges: new r.Array(FDRange4, 'nRanges'),\n sentinel: r.uint32\n }\n});\nvar ptr = new CFFPointer(CFFPrivateDict);\n\nvar CFFPrivateOp = /*#__PURE__*/function () {\n function CFFPrivateOp() {}\n\n var _proto8 = CFFPrivateOp.prototype;\n\n _proto8.decode = function decode(stream, parent, operands) {\n parent.length = operands[0];\n return ptr.decode(stream, parent, [operands[1]]);\n };\n\n _proto8.size = function size(dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\n };\n\n _proto8.encode = function encode(stream, dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\n };\n\n return CFFPrivateOp;\n}();\n\nvar FontDict = new CFFDict([// key name type(s) default\n[18, 'Private', new CFFPrivateOp(), null], [[12, 38], 'FontName', 'sid', null], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [[12, 5], 'PaintType', 'number', 0]]);\nvar CFFTopDict = new CFFDict([// key name type(s) default\n[[12, 30], 'ROS', ['sid', 'sid', 'number'], null], [0, 'version', 'sid', null], [1, 'Notice', 'sid', null], [[12, 0], 'Copyright', 'sid', null], [2, 'FullName', 'sid', null], [3, 'FamilyName', 'sid', null], [4, 'Weight', 'sid', null], [[12, 1], 'isFixedPitch', 'boolean', false], [[12, 2], 'ItalicAngle', 'number', 0], [[12, 3], 'UnderlinePosition', 'number', -100], [[12, 4], 'UnderlineThickness', 'number', 50], [[12, 5], 'PaintType', 'number', 0], [[12, 6], 'CharstringType', 'number', 2], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [13, 'UniqueID', 'number', null], [5, 'FontBBox', 'array', [0, 0, 0, 0]], [[12, 8], 'StrokeWidth', 'number', 0], [14, 'XUID', 'array', null], [15, 'charset', CFFCharset, ISOAdobeCharset], [16, 'Encoding', CFFEncoding, StandardEncoding], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [18, 'Private', new CFFPrivateOp(), null], [[12, 20], 'SyntheticBase', 'number', null], [[12, 21], 'PostScript', 'sid', null], [[12, 22], 'BaseFontName', 'sid', null], [[12, 23], 'BaseFontBlend', 'delta', null], // CID font specific\n[[12, 31], 'CIDFontVersion', 'number', 0], [[12, 32], 'CIDFontRevision', 'number', 0], [[12, 33], 'CIDFontType', 'number', 0], [[12, 34], 'CIDCount', 'number', 8720], [[12, 35], 'UIDBase', 'number', null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [[12, 38], 'FontName', 'sid', null]]);\nvar VariationStore = new r.Struct({\n length: r.uint16,\n itemVariationStore: ItemVariationStore\n});\nvar CFF2TopDict = new CFFDict([[[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [24, 'vstore', new CFFPointer(VariationStore), null], [25, 'maxstack', 'number', 193]]);\nvar CFFTop = new r.VersionedStruct(r.fixed16, {\n 1: {\n hdrSize: r.uint8,\n offSize: r.uint8,\n nameIndex: new CFFIndex(new r.String('length')),\n topDictIndex: new CFFIndex(CFFTopDict),\n stringIndex: new CFFIndex(new r.String('length')),\n globalSubrIndex: new CFFIndex()\n },\n 2: {\n hdrSize: r.uint8,\n length: r.uint16,\n topDict: CFF2TopDict,\n globalSubrIndex: new CFFIndex()\n }\n});\n\nvar CFFFont = /*#__PURE__*/function () {\n function CFFFont(stream) {\n this.stream = stream;\n this.decode();\n }\n\n CFFFont.decode = function decode(stream) {\n return new CFFFont(stream);\n };\n\n var _proto9 = CFFFont.prototype;\n\n _proto9.decode = function decode() {\n var start = this.stream.pos;\n var top = CFFTop.decode(this.stream);\n\n for (var key in top) {\n var val = top[key];\n this[key] = val;\n }\n\n if (this.version < 2) {\n if (this.topDictIndex.length !== 1) {\n throw new Error(\"Only a single font is allowed in CFF\");\n }\n\n this.topDict = this.topDictIndex[0];\n }\n\n this.isCIDFont = this.topDict.ROS != null;\n return this;\n };\n\n _proto9.string = function string(sid) {\n if (this.version >= 2) {\n return null;\n }\n\n if (sid < standardStrings.length) {\n return standardStrings[sid];\n }\n\n return this.stringIndex[sid - standardStrings.length];\n };\n\n _proto9.getCharString = function getCharString(glyph) {\n this.stream.pos = this.topDict.CharStrings[glyph].offset;\n return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\n };\n\n _proto9.getGlyphName = function getGlyphName(gid) {\n // CFF2 glyph names are in the post table.\n if (this.version >= 2) {\n return null;\n } // CID-keyed fonts don't have glyph names\n\n\n if (this.isCIDFont) {\n return null;\n }\n\n var charset = this.topDict.charset;\n\n if (Array.isArray(charset)) {\n return charset[gid];\n }\n\n if (gid === 0) {\n return '.notdef';\n }\n\n gid -= 1;\n\n switch (charset.version) {\n case 0:\n return this.string(charset.glyphs[gid]);\n\n case 1:\n case 2:\n for (var i = 0; i < charset.ranges.length; i++) {\n var range = charset.ranges[i];\n\n if (range.offset <= gid && gid <= range.offset + range.nLeft) {\n return this.string(range.first + (gid - range.offset));\n }\n }\n\n break;\n }\n\n return null;\n };\n\n _proto9.fdForGlyph = function fdForGlyph(gid) {\n if (!this.topDict.FDSelect) {\n return null;\n }\n\n switch (this.topDict.FDSelect.version) {\n case 0:\n return this.topDict.FDSelect.fds[gid];\n\n case 3:\n case 4:\n var ranges = this.topDict.FDSelect.ranges;\n var low = 0;\n var high = ranges.length - 1;\n\n while (low <= high) {\n var mid = low + high >> 1;\n\n if (gid < ranges[mid].first) {\n high = mid - 1;\n } else if (mid < high && gid >= ranges[mid + 1].first) {\n low = mid + 1;\n } else {\n return ranges[mid].fd;\n }\n }\n\n default:\n throw new Error(\"Unknown FDSelect version: \".concat(this.topDict.FDSelect.version));\n }\n };\n\n _proto9.privateDictForGlyph = function privateDictForGlyph(gid) {\n if (this.topDict.FDSelect) {\n var fd = this.fdForGlyph(gid);\n\n if (this.topDict.FDArray[fd]) {\n return this.topDict.FDArray[fd].Private;\n }\n\n return null;\n }\n\n if (this.version < 2) {\n return this.topDict.Private;\n }\n\n return this.topDict.FDArray[0].Private;\n };\n\n _createClass(CFFFont, [{\n key: \"postscriptName\",\n get: function get() {\n if (this.version < 2) {\n return this.nameIndex[0];\n }\n\n return null;\n }\n }, {\n key: \"fullName\",\n get: function get() {\n return this.string(this.topDict.FullName);\n }\n }, {\n key: \"familyName\",\n get: function get() {\n return this.string(this.topDict.FamilyName);\n }\n }]);\n\n return CFFFont;\n}();\n\nvar VerticalOrigin = new r.Struct({\n glyphIndex: r.uint16,\n vertOriginY: r.int16\n});\nvar VORG = new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n defaultVertOriginY: r.int16,\n numVertOriginYMetrics: r.uint16,\n metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\n});\nvar BigMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n horiBearingX: r.int8,\n horiBearingY: r.int8,\n horiAdvance: r.uint8,\n vertBearingX: r.int8,\n vertBearingY: r.int8,\n vertAdvance: r.uint8\n});\nvar SmallMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n bearingX: r.int8,\n bearingY: r.int8,\n advance: r.uint8\n});\nvar EBDTComponent = new r.Struct({\n glyph: r.uint16,\n xOffset: r.int8,\n yOffset: r.int8\n});\n\nvar ByteAligned = function ByteAligned() {};\n\nvar BitAligned = function BitAligned() {};\n\nvar glyph = new r.VersionedStruct('version', {\n 1: {\n metrics: SmallMetrics,\n data: ByteAligned\n },\n 2: {\n metrics: SmallMetrics,\n data: BitAligned\n },\n // format 3 is deprecated\n // format 4 is not supported by Microsoft\n 5: {\n data: BitAligned\n },\n 6: {\n metrics: BigMetrics,\n data: ByteAligned\n },\n 7: {\n metrics: BigMetrics,\n data: BitAligned\n },\n 8: {\n metrics: SmallMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n 9: {\n metrics: BigMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n 17: {\n metrics: SmallMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n 18: {\n metrics: BigMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n 19: {\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n }\n});\nvar SBitLineMetrics = new r.Struct({\n ascender: r.int8,\n descender: r.int8,\n widthMax: r.uint8,\n caretSlopeNumerator: r.int8,\n caretSlopeDenominator: r.int8,\n caretOffset: r.int8,\n minOriginSB: r.int8,\n minAdvanceSB: r.int8,\n maxBeforeBL: r.int8,\n minAfterBL: r.int8,\n pad: new r.Reserved(r.int8, 2)\n});\nvar CodeOffsetPair = new r.Struct({\n glyphCode: r.uint16,\n offset: r.uint16\n});\nvar IndexSubtable = new r.VersionedStruct(r.uint16, {\n header: {\n imageFormat: r.uint16,\n imageDataOffset: r.uint32\n },\n 1: {\n offsetArray: new r.Array(r.uint32, function (t) {\n return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;\n })\n },\n 2: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics\n },\n 3: {\n offsetArray: new r.Array(r.uint16, function (t) {\n return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;\n })\n },\n 4: {\n numGlyphs: r.uint32,\n glyphArray: new r.Array(CodeOffsetPair, function (t) {\n return t.numGlyphs + 1;\n })\n },\n 5: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics,\n numGlyphs: r.uint32,\n glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\n }\n});\nvar IndexSubtableArray = new r.Struct({\n firstGlyphIndex: r.uint16,\n lastGlyphIndex: r.uint16,\n subtable: new r.Pointer(r.uint32, IndexSubtable)\n});\nvar BitmapSizeTable = new r.Struct({\n indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), {\n type: 'parent'\n }),\n indexTablesSize: r.uint32,\n numberOfIndexSubTables: r.uint32,\n colorRef: r.uint32,\n hori: SBitLineMetrics,\n vert: SBitLineMetrics,\n startGlyphIndex: r.uint16,\n endGlyphIndex: r.uint16,\n ppemX: r.uint8,\n ppemY: r.uint8,\n bitDepth: r.uint8,\n flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\n});\nvar EBLC = new r.Struct({\n version: r.uint32,\n // 0x00020000\n numSizes: r.uint32,\n sizes: new r.Array(BitmapSizeTable, 'numSizes')\n});\nvar ImageTable = new r.Struct({\n ppem: r.uint16,\n resolution: r.uint16,\n imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), function (t) {\n return t.parent.parent.maxp.numGlyphs + 1;\n })\n}); // This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\n// It includes several image tables with images for each bitmap glyph\n// of several different sizes.\n\nvar sbix = new r.Struct({\n version: r.uint16,\n flags: new r.Bitfield(r.uint16, ['renderOutlines']),\n numImgTables: r.uint32,\n imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\n});\nvar LayerRecord = new r.Struct({\n gid: r.uint16,\n // Glyph ID of layer glyph (must be in z-order from bottom to top).\n paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must\n\n}); // be less than numPaletteEntries in the CPAL table, except for\n// the special case noted below. Each palette entry is 16 bits.\n// A palette index of 0xFFFF is a special case indicating that\n// the text foreground color should be used.\n\nvar BaseGlyphRecord = new r.Struct({\n gid: r.uint16,\n // Glyph ID of reference glyph. This glyph is for reference only\n // and is not rendered for color.\n firstLayerIndex: r.uint16,\n // Index (from beginning of the Layer Records) to the layer record.\n // There will be numLayers consecutive entries for this base glyph.\n numLayers: r.uint16\n});\nvar COLR = new r.Struct({\n version: r.uint16,\n numBaseGlyphRecords: r.uint16,\n baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\n layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), {\n lazy: true\n }),\n numLayerRecords: r.uint16\n});\nvar ColorRecord = new r.Struct({\n blue: r.uint8,\n green: r.uint8,\n red: r.uint8,\n alpha: r.uint8\n});\nvar CPAL = new r.VersionedStruct(r.uint16, {\n header: {\n numPaletteEntries: r.uint16,\n numPalettes: r.uint16,\n numColorRecords: r.uint16,\n colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\n colorRecordIndices: new r.Array(r.uint16, 'numPalettes')\n },\n 0: {},\n 1: {\n offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\n offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\n offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\n }\n});\nvar BaseCoord = new r.VersionedStruct(r.uint16, {\n 1: {\n // Design units only\n coordinate: r.int16 // X or Y value, in design units\n\n },\n 2: {\n // Design units plus contour point\n coordinate: r.int16,\n // X or Y value, in design units\n referenceGlyph: r.uint16,\n // GlyphID of control glyph\n baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph\n\n },\n 3: {\n // Design units plus Device table\n coordinate: r.int16,\n // X or Y value, in design units\n deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value\n\n }\n});\nvar BaseValues = new r.Struct({\n defaultIndex: r.uint16,\n // Index of default baseline for this script-same index in the BaseTagList\n baseCoordCount: r.uint16,\n baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\n});\nvar FeatMinMaxRecord = new r.Struct({\n tag: new r.String(4),\n // 4-byte feature identification tag-must match FeatureTag in FeatureList\n minCoord: new r.Pointer(r.uint16, BaseCoord, {\n type: 'parent'\n }),\n // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord, {\n type: 'parent'\n }) // May be NULL\n\n});\nvar MinMax = new r.Struct({\n minCoord: new r.Pointer(r.uint16, BaseCoord),\n // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord),\n // May be NULL\n featMinMaxCount: r.uint16,\n // May be 0\n featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\n\n});\nvar BaseLangSysRecord = new r.Struct({\n tag: new r.String(4),\n // 4-byte language system identification tag\n minMax: new r.Pointer(r.uint16, MinMax, {\n type: 'parent'\n })\n});\nvar BaseScript = new r.Struct({\n baseValues: new r.Pointer(r.uint16, BaseValues),\n // May be NULL\n defaultMinMax: new r.Pointer(r.uint16, MinMax),\n // May be NULL\n baseLangSysCount: r.uint16,\n // May be 0\n baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\n\n});\nvar BaseScriptRecord = new r.Struct({\n tag: new r.String(4),\n // 4-byte script identification tag\n script: new r.Pointer(r.uint16, BaseScript, {\n type: 'parent'\n })\n});\nvar BaseScriptList = new r.Array(BaseScriptRecord, r.uint16); // Array of 4-byte baseline identification tags-must be in alphabetical order\n\nvar BaseTagList = new r.Array(new r.String(4), r.uint16);\nvar Axis = new r.Struct({\n baseTagList: new r.Pointer(r.uint16, BaseTagList),\n // May be NULL\n baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\n});\nvar BASE = new r.VersionedStruct(r.uint32, {\n header: {\n horizAxis: new r.Pointer(r.uint16, Axis),\n // May be NULL\n vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL\n\n },\n 0x00010000: {},\n 0x00010001: {\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\nvar AttachPoint = new r.Array(r.uint16, r.uint16);\nvar AttachList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\n});\nvar CaretValue = new r.VersionedStruct(r.uint16, {\n 1: {\n // Design units only\n coordinate: r.int16\n },\n 2: {\n // Contour point\n caretValuePoint: r.uint16\n },\n 3: {\n // Design units plus Device table\n coordinate: r.int16,\n deviceTable: new r.Pointer(r.uint16, Device)\n }\n});\nvar LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\nvar LigCaretList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n ligGlyphCount: r.uint16,\n ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\n});\nvar MarkGlyphSetsDef = new r.Struct({\n markSetTableFormat: r.uint16,\n markSetCount: r.uint16,\n coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\n});\nvar GDEF = new r.VersionedStruct(r.uint32, {\n header: {\n glyphClassDef: new r.Pointer(r.uint16, ClassDef),\n attachList: new r.Pointer(r.uint16, AttachList),\n ligCaretList: new r.Pointer(r.uint16, LigCaretList),\n markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\n },\n 0x00010000: {},\n 0x00010002: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)\n },\n 0x00010003: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\nvar ValueFormat = new r.Bitfield(r.uint16, ['xPlacement', 'yPlacement', 'xAdvance', 'yAdvance', 'xPlaDevice', 'yPlaDevice', 'xAdvDevice', 'yAdvDevice']);\nvar types = {\n xPlacement: r.int16,\n yPlacement: r.int16,\n xAdvance: r.int16,\n yAdvance: r.int16,\n xPlaDevice: new r.Pointer(r.uint16, Device, {\n type: 'global',\n relativeTo: function relativeTo(ctx) {\n return ctx.rel;\n }\n }),\n yPlaDevice: new r.Pointer(r.uint16, Device, {\n type: 'global',\n relativeTo: function relativeTo(ctx) {\n return ctx.rel;\n }\n }),\n xAdvDevice: new r.Pointer(r.uint16, Device, {\n type: 'global',\n relativeTo: function relativeTo(ctx) {\n return ctx.rel;\n }\n }),\n yAdvDevice: new r.Pointer(r.uint16, Device, {\n type: 'global',\n relativeTo: function relativeTo(ctx) {\n return ctx.rel;\n }\n })\n};\n\nvar ValueRecord = /*#__PURE__*/function () {\n function ValueRecord(key) {\n if (key === void 0) {\n key = 'valueFormat';\n }\n\n this.key = key;\n }\n\n var _proto10 = ValueRecord.prototype;\n\n _proto10.buildStruct = function buildStruct(parent) {\n var struct = parent;\n\n while (!struct[this.key] && struct.parent) {\n struct = struct.parent;\n }\n\n if (!struct[this.key]) return;\n var fields = {};\n\n fields.rel = function () {\n return struct._startOffset;\n };\n\n var format = struct[this.key];\n\n for (var key in format) {\n if (format[key]) {\n fields[key] = types[key];\n }\n }\n\n return new r.Struct(fields);\n };\n\n _proto10.size = function size(val, ctx) {\n return this.buildStruct(ctx).size(val, ctx);\n };\n\n _proto10.decode = function decode(stream, parent) {\n var res = this.buildStruct(parent).decode(stream, parent);\n delete res.rel;\n return res;\n };\n\n return ValueRecord;\n}();\n\nvar PairValueRecord = new r.Struct({\n secondGlyph: r.uint16,\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\nvar PairSet = new r.Array(PairValueRecord, r.uint16);\nvar Class2Record = new r.Struct({\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\nvar Anchor = new r.VersionedStruct(r.uint16, {\n 1: {\n // Design units only\n xCoordinate: r.int16,\n yCoordinate: r.int16\n },\n 2: {\n // Design units plus contour point\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n anchorPoint: r.uint16\n },\n 3: {\n // Design units plus Device tables\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n xDeviceTable: new r.Pointer(r.uint16, Device),\n yDeviceTable: new r.Pointer(r.uint16, Device)\n }\n});\nvar EntryExitRecord = new r.Struct({\n entryAnchor: new r.Pointer(r.uint16, Anchor, {\n type: 'parent'\n }),\n exitAnchor: new r.Pointer(r.uint16, Anchor, {\n type: 'parent'\n })\n});\nvar MarkRecord = new r.Struct({\n class: r.uint16,\n markAnchor: new r.Pointer(r.uint16, Anchor, {\n type: 'parent'\n })\n});\nvar MarkArray = new r.Array(MarkRecord, r.uint16);\nvar BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {\n return t.parent.classCount;\n});\nvar BaseArray = new r.Array(BaseRecord, r.uint16);\nvar ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {\n return t.parent.parent.classCount;\n});\nvar LigatureAttach = new r.Array(ComponentRecord, r.uint16);\nvar LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\nvar GPOSLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, {\n // Single Adjustment\n 1: {\n // Single positioning value\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n value: new ValueRecord()\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n valueCount: r.uint16,\n values: new r.LazyArray(new ValueRecord(), 'valueCount')\n }\n }),\n 2: new r.VersionedStruct(r.uint16, {\n // Pair Adjustment Positioning\n 1: {\n // Adjustments for glyph pairs\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n pairSetCount: r.uint16,\n pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\n },\n 2: {\n // Class pair adjustment\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n classDef1: new r.Pointer(r.uint16, ClassDef),\n classDef2: new r.Pointer(r.uint16, ClassDef),\n class1Count: r.uint16,\n class2Count: r.uint16,\n classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\n }\n }),\n 3: {\n // Cursive Attachment Positioning\n format: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n entryExitCount: r.uint16,\n entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')\n },\n 4: {\n // MarkToBase Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n baseCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n baseArray: new r.Pointer(r.uint16, BaseArray)\n },\n 5: {\n // MarkToLigature Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n ligatureCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n ligatureArray: new r.Pointer(r.uint16, LigatureArray)\n },\n 6: {\n // MarkToMark Attachment Positioning\n format: r.uint16,\n mark1Coverage: new r.Pointer(r.uint16, Coverage),\n mark2Coverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n mark1Array: new r.Pointer(r.uint16, MarkArray),\n mark2Array: new r.Pointer(r.uint16, BaseArray)\n },\n 7: Context,\n // Contextual positioning\n 8: ChainingContext,\n // Chaining contextual positioning\n 9: {\n // Extension Positioning\n posFormat: r.uint16,\n lookupType: r.uint16,\n // cannot also be 9\n extension: new r.Pointer(r.uint32, GPOSLookup)\n }\n}); // Fix circular reference\n\nGPOSLookup.versions[9].extension.type = GPOSLookup;\nvar GPOS = new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n },\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n}); // export GPOSLookup for JSTF table\n\nvar Sequence = new r.Array(r.uint16, r.uint16);\nvar AlternateSet = Sequence;\nvar Ligature = new r.Struct({\n glyph: r.uint16,\n compCount: r.uint16,\n components: new r.Array(r.uint16, function (t) {\n return t.compCount - 1;\n })\n});\nvar LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\nvar GSUBLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, {\n // Single Substitution\n 1: {\n coverage: new r.Pointer(r.uint16, Coverage),\n deltaGlyphID: r.int16\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n substitute: new r.LazyArray(r.uint16, 'glyphCount')\n }\n }),\n 2: {\n // Multiple Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\n },\n 3: {\n // Alternate Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\n },\n 4: {\n // Ligature Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\n },\n 5: Context,\n // Contextual Substitution\n 6: ChainingContext,\n // Chaining Contextual Substitution\n 7: {\n // Extension Substitution\n substFormat: r.uint16,\n lookupType: r.uint16,\n // cannot also be 7\n extension: new r.Pointer(r.uint32, GSUBLookup)\n },\n 8: {\n // Reverse Chaining Contextual Single Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n glyphCount: r.uint16,\n substitutes: new r.Array(r.uint16, 'glyphCount')\n }\n}); // Fix circular reference\n\nGSUBLookup.versions[7].extension.type = GSUBLookup;\nvar GSUB = new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))\n },\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n});\nvar JstfGSUBModList = new r.Array(r.uint16, r.uint16);\nvar JstfPriority = new r.Struct({\n shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\n extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n});\nvar JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\nvar JstfLangSysRecord = new r.Struct({\n tag: new r.String(4),\n jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\n});\nvar JstfScript = new r.Struct({\n extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)),\n // array of glyphs to extend line length\n defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\n langSysCount: r.uint16,\n langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\n});\nvar JstfScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, JstfScript, {\n type: 'parent'\n })\n});\nvar JSTF = new r.Struct({\n version: r.uint32,\n // should be 0x00010000\n scriptCount: r.uint16,\n scriptList: new r.Array(JstfScriptRecord, 'scriptCount')\n});\n\nvar VariableSizeNumber = /*#__PURE__*/function () {\n function VariableSizeNumber(size) {\n this._size = size;\n }\n\n var _proto11 = VariableSizeNumber.prototype;\n\n _proto11.decode = function decode(stream, parent) {\n switch (this.size(0, parent)) {\n case 1:\n return stream.readUInt8();\n\n case 2:\n return stream.readUInt16BE();\n\n case 3:\n return stream.readUInt24BE();\n\n case 4:\n return stream.readUInt32BE();\n }\n };\n\n _proto11.size = function size(val, parent) {\n return utils.resolveLength(this._size, null, parent);\n };\n\n return VariableSizeNumber;\n}();\n\nvar MapDataEntry = new r.Struct({\n entry: new VariableSizeNumber(function (t) {\n return ((t.parent.entryFormat & 0x0030) >> 4) + 1;\n }),\n outerIndex: function outerIndex(t) {\n return t.entry >> (t.parent.entryFormat & 0x000F) + 1;\n },\n innerIndex: function innerIndex(t) {\n return t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1;\n }\n});\nvar DeltaSetIndexMap = new r.Struct({\n entryFormat: r.uint16,\n mapCount: r.uint16,\n mapData: new r.Array(MapDataEntry, 'mapCount')\n});\nvar HVAR = new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\n advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\n});\nvar Signature = new r.Struct({\n format: r.uint32,\n length: r.uint32,\n offset: r.uint32\n});\nvar SignatureBlock = new r.Struct({\n reserved: new r.Reserved(r.uint16, 2),\n cbSignature: r.uint32,\n // Length (in bytes) of the PKCS#7 packet in pbSignature\n signature: new r.Buffer('cbSignature')\n});\nvar DSIG = new r.Struct({\n ulVersion: r.uint32,\n // Version number of the DSIG table (0x00000001)\n usNumSigs: r.uint16,\n // Number of signatures in the table\n usFlag: r.uint16,\n // Permission flags\n signatures: new r.Array(Signature, 'usNumSigs'),\n signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\n});\nvar GaspRange = new r.Struct({\n rangeMaxPPEM: r.uint16,\n // Upper limit of range, in ppem\n rangeGaspBehavior: new r.Bitfield(r.uint16, [// Flags describing desired rasterizer behavior\n 'grayscale', 'gridfit', 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType\n ])\n});\nvar gasp = new r.Struct({\n version: r.uint16,\n // set to 0\n numRanges: r.uint16,\n gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\n\n});\nvar DeviceRecord = new r.Struct({\n pixelSize: r.uint8,\n maximumWidth: r.uint8,\n widths: new r.Array(r.uint8, function (t) {\n return t.parent.parent.maxp.numGlyphs;\n })\n}); // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\n\nvar hdmx = new r.Struct({\n version: r.uint16,\n numRecords: r.int16,\n sizeDeviceRecord: r.int32,\n records: new r.Array(DeviceRecord, 'numRecords')\n});\nvar KernPair = new r.Struct({\n left: r.uint16,\n right: r.uint16,\n value: r.int16\n});\nvar ClassTable = new r.Struct({\n firstGlyph: r.uint16,\n nGlyphs: r.uint16,\n offsets: new r.Array(r.uint16, 'nGlyphs'),\n max: function max(t) {\n return t.offsets.length && Math.max.apply(Math, t.offsets);\n }\n});\nvar Kern2Array = new r.Struct({\n off: function off(t) {\n return t._startOffset - t.parent.parent._startOffset;\n },\n len: function len(t) {\n return ((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2);\n },\n values: new r.LazyArray(r.int16, 'len')\n});\nvar KernSubtable = new r.VersionedStruct('format', {\n 0: {\n nPairs: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n pairs: new r.Array(KernPair, 'nPairs')\n },\n 2: {\n rowWidth: r.uint16,\n leftTable: new r.Pointer(r.uint16, ClassTable, {\n type: 'parent'\n }),\n rightTable: new r.Pointer(r.uint16, ClassTable, {\n type: 'parent'\n }),\n array: new r.Pointer(r.uint16, Kern2Array, {\n type: 'parent'\n })\n },\n 3: {\n glyphCount: r.uint16,\n kernValueCount: r.uint8,\n leftClassCount: r.uint8,\n rightClassCount: r.uint8,\n flags: r.uint8,\n kernValue: new r.Array(r.int16, 'kernValueCount'),\n leftClass: new r.Array(r.uint8, 'glyphCount'),\n rightClass: new r.Array(r.uint8, 'glyphCount'),\n kernIndex: new r.Array(r.uint8, function (t) {\n return t.leftClassCount * t.rightClassCount;\n })\n }\n});\nvar KernTable = new r.VersionedStruct('version', {\n 0: {\n // Microsoft uses this format\n subVersion: r.uint16,\n // Microsoft has an extra sub-table version number\n length: r.uint16,\n // Length of the subtable, in bytes\n format: r.uint8,\n // Format of subtable\n coverage: new r.Bitfield(r.uint8, ['horizontal', // 1 if table has horizontal data, 0 if vertical\n 'minimum', // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\n 'crossStream', // If set to 1, kerning is perpendicular to the flow of the text\n 'override' // If set to 1 the value in this table replaces the accumulated value\n ]),\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, function (t) {\n return t.length - t._currentOffset;\n })\n },\n 1: {\n // Apple uses this format\n length: r.uint32,\n coverage: new r.Bitfield(r.uint8, [null, null, null, null, null, 'variation', // Set if table has variation kerning values\n 'crossStream', // Set if table has cross-stream kerning values\n 'vertical' // Set if table has vertical kerning values\n ]),\n format: r.uint8,\n tupleIndex: r.uint16,\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, function (t) {\n return t.length - t._currentOffset;\n })\n }\n});\nvar kern = new r.VersionedStruct(r.uint16, {\n 0: {\n // Microsoft Version\n nTables: r.uint16,\n tables: new r.Array(KernTable, 'nTables')\n },\n 1: {\n // Apple Version\n reserved: new r.Reserved(r.uint16),\n // the other half of the version number\n nTables: r.uint32,\n tables: new r.Array(KernTable, 'nTables')\n }\n}); // Records the ppem for each glyph at which the scaling becomes linear again,\n// despite instructions effecting the advance width\n\nvar LTSH = new r.Struct({\n version: r.uint16,\n numGlyphs: r.uint16,\n yPels: new r.Array(r.uint8, 'numGlyphs')\n}); // NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\n\nvar PCLT = new r.Struct({\n version: r.uint16,\n fontNumber: r.uint32,\n pitch: r.uint16,\n xHeight: r.uint16,\n style: r.uint16,\n typeFamily: r.uint16,\n capHeight: r.uint16,\n symbolSet: r.uint16,\n typeface: new r.String(16),\n characterComplement: new r.String(8),\n fileName: new r.String(6),\n strokeWeight: new r.String(1),\n widthType: new r.String(1),\n serifStyle: r.uint8,\n reserved: new r.Reserved(r.uint8)\n}); // sizes. This is needed in order to match font metrics on Windows.\n\nvar Ratio = new r.Struct({\n bCharSet: r.uint8,\n // Character set\n xRatio: r.uint8,\n // Value to use for x-Ratio\n yStartRatio: r.uint8,\n // Starting y-Ratio value\n yEndRatio: r.uint8 // Ending y-Ratio value\n\n});\nvar vTable = new r.Struct({\n yPelHeight: r.uint16,\n // yPelHeight to which values apply\n yMax: r.int16,\n // Maximum value (in pels) for this yPelHeight\n yMin: r.int16 // Minimum value (in pels) for this yPelHeight\n\n});\nvar VdmxGroup = new r.Struct({\n recs: r.uint16,\n // Number of height records in this group\n startsz: r.uint8,\n // Starting yPelHeight\n endsz: r.uint8,\n // Ending yPelHeight\n entries: new r.Array(vTable, 'recs') // The VDMX records\n\n});\nvar VDMX = new r.Struct({\n version: r.uint16,\n // Version number (0 or 1)\n numRecs: r.uint16,\n // Number of VDMX groups present\n numRatios: r.uint16,\n // Number of aspect ratio groupings\n ratioRanges: new r.Array(Ratio, 'numRatios'),\n // Ratio ranges\n offsets: new r.Array(r.uint16, 'numRatios'),\n // Offset to the VDMX group for this ratio range\n groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings\n\n});\nvar vhea = new r.Struct({\n version: r.uint16,\n // Version number of the Vertical Header Table\n ascent: r.int16,\n // The vertical typographic ascender for this font\n descent: r.int16,\n // The vertical typographic descender for this font\n lineGap: r.int16,\n // The vertical typographic line gap for this font\n advanceHeightMax: r.int16,\n // The maximum advance height measurement found in the font\n minTopSideBearing: r.int16,\n // The minimum top side bearing measurement found in the font\n minBottomSideBearing: r.int16,\n // The minimum bottom side bearing measurement found in the font\n yMaxExtent: r.int16,\n caretSlopeRise: r.int16,\n // Caret slope (rise/run)\n caretSlopeRun: r.int16,\n caretOffset: r.int16,\n // Set value equal to 0 for nonslanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16,\n // Set to 0\n numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table\n\n});\nvar VmtxEntry = new r.Struct({\n advance: r.uint16,\n // The advance height of the glyph\n bearing: r.int16 // The top sidebearing of the glyph\n\n}); // Vertical Metrics Table\n\nvar vmtx = new r.Struct({\n metrics: new r.LazyArray(VmtxEntry, function (t) {\n return t.parent.vhea.numberOfMetrics;\n }),\n bearings: new r.LazyArray(r.int16, function (t) {\n return t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics;\n })\n});\nvar shortFrac = new r.Fixed(16, 'BE', 14);\nvar Correspondence = new r.Struct({\n fromCoord: shortFrac,\n toCoord: shortFrac\n});\nvar Segment = new r.Struct({\n pairCount: r.uint16,\n correspondence: new r.Array(Correspondence, 'pairCount')\n});\nvar avar = new r.Struct({\n version: r.fixed32,\n axisCount: r.uint32,\n segment: new r.Array(Segment, 'axisCount')\n});\n\nvar UnboundedArrayAccessor = /*#__PURE__*/function () {\n function UnboundedArrayAccessor(type, stream, parent) {\n this.type = type;\n this.stream = stream;\n this.parent = parent;\n this.base = this.stream.pos;\n this._items = [];\n }\n\n var _proto12 = UnboundedArrayAccessor.prototype;\n\n _proto12.getItem = function getItem(index) {\n if (this._items[index] == null) {\n var pos = this.stream.pos;\n this.stream.pos = this.base + this.type.size(null, this.parent) * index;\n this._items[index] = this.type.decode(this.stream, this.parent);\n this.stream.pos = pos;\n }\n\n return this._items[index];\n };\n\n _proto12.inspect = function inspect() {\n return \"[UnboundedArray \".concat(this.type.constructor.name, \"]\");\n };\n\n return UnboundedArrayAccessor;\n}();\n\nvar UnboundedArray = /*#__PURE__*/function (_r$Array2) {\n _inheritsLoose(UnboundedArray, _r$Array2);\n\n function UnboundedArray(type) {\n return _r$Array2.call(this, type, 0) || this;\n }\n\n var _proto13 = UnboundedArray.prototype;\n\n _proto13.decode = function decode(stream, parent) {\n return new UnboundedArrayAccessor(this.type, stream, parent);\n };\n\n return UnboundedArray;\n}(r.Array);\n\nvar LookupTable = function LookupTable(ValueType) {\n if (ValueType === void 0) {\n ValueType = r.uint16;\n }\n\n // Helper class that makes internal structures invisible to pointers\n var Shadow = /*#__PURE__*/function () {\n function Shadow(type) {\n this.type = type;\n }\n\n var _proto14 = Shadow.prototype;\n\n _proto14.decode = function decode(stream, ctx) {\n ctx = ctx.parent.parent;\n return this.type.decode(stream, ctx);\n };\n\n _proto14.size = function size(val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.size(val, ctx);\n };\n\n _proto14.encode = function encode(stream, val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.encode(stream, val, ctx);\n };\n\n return Shadow;\n }();\n\n ValueType = new Shadow(ValueType);\n var BinarySearchHeader = new r.Struct({\n unitSize: r.uint16,\n nUnits: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16\n });\n var LookupSegmentSingle = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n value: ValueType\n });\n var LookupSegmentArray = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n values: new r.Pointer(r.uint16, new r.Array(ValueType, function (t) {\n return t.lastGlyph - t.firstGlyph + 1;\n }), {\n type: 'parent'\n })\n });\n var LookupSingle = new r.Struct({\n glyph: r.uint16,\n value: ValueType\n });\n return new r.VersionedStruct(r.uint16, {\n 0: {\n values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\n\n },\n 2: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentSingle, function (t) {\n return t.binarySearchHeader.nUnits;\n })\n },\n 4: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentArray, function (t) {\n return t.binarySearchHeader.nUnits;\n })\n },\n 6: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSingle, function (t) {\n return t.binarySearchHeader.nUnits;\n })\n },\n 8: {\n firstGlyph: r.uint16,\n count: r.uint16,\n values: new r.Array(ValueType, 'count')\n }\n });\n};\n\nfunction StateTable(entryData, lookupType) {\n if (entryData === void 0) {\n entryData = {};\n }\n\n if (lookupType === void 0) {\n lookupType = r.uint16;\n }\n\n var entry = Object.assign({\n newState: r.uint16,\n flags: r.uint16\n }, entryData);\n var Entry = new r.Struct(entry);\n var StateArray = new UnboundedArray(new r.Array(r.uint16, function (t) {\n return t.nClasses;\n }));\n var StateHeader = new r.Struct({\n nClasses: r.uint32,\n classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\n stateArray: new r.Pointer(r.uint32, StateArray),\n entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\n });\n return StateHeader;\n} // This is the old version of the StateTable structure\n\n\nfunction StateTable1(entryData, lookupType) {\n if (entryData === void 0) {\n entryData = {};\n }\n\n if (lookupType === void 0) {\n lookupType = r.uint16;\n }\n\n var ClassLookupTable = new r.Struct({\n version: function version() {\n return 8;\n },\n // simulate LookupTable\n firstGlyph: r.uint16,\n values: new r.Array(r.uint8, r.uint16)\n });\n var entry = Object.assign({\n newStateOffset: r.uint16,\n // convert offset to stateArray index\n newState: function newState(t) {\n return (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses;\n },\n flags: r.uint16\n }, entryData);\n var Entry = new r.Struct(entry);\n var StateArray = new UnboundedArray(new r.Array(r.uint8, function (t) {\n return t.nClasses;\n }));\n var StateHeader1 = new r.Struct({\n nClasses: r.uint16,\n classTable: new r.Pointer(r.uint16, ClassLookupTable),\n stateArray: new r.Pointer(r.uint16, StateArray),\n entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\n });\n return StateHeader1;\n}\n\nvar BslnSubtable = new r.VersionedStruct('format', {\n 0: {\n // Distance-based, no mapping\n deltas: new r.Array(r.int16, 32)\n },\n 1: {\n // Distance-based, with mapping\n deltas: new r.Array(r.int16, 32),\n mappingData: new LookupTable(r.uint16)\n },\n 2: {\n // Control point-based, no mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32)\n },\n 3: {\n // Control point-based, with mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32),\n mappingData: new LookupTable(r.uint16)\n }\n});\nvar bsln = new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n defaultBaseline: r.uint16,\n subtable: BslnSubtable\n});\nvar Setting = new r.Struct({\n setting: r.uint16,\n nameIndex: r.int16,\n name: function name(t) {\n return t.parent.parent.parent.name.records.fontFeatures[t.nameIndex];\n }\n});\nvar FeatureName = new r.Struct({\n feature: r.uint16,\n nSettings: r.uint16,\n settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), {\n type: 'parent'\n }),\n featureFlags: new r.Bitfield(r.uint8, [null, null, null, null, null, null, 'hasDefault', 'exclusive']),\n defaultSetting: r.uint8,\n nameIndex: r.int16,\n name: function name(t) {\n return t.parent.parent.name.records.fontFeatures[t.nameIndex];\n }\n});\nvar feat = new r.Struct({\n version: r.fixed32,\n featureNameCount: r.uint16,\n reserved1: new r.Reserved(r.uint16),\n reserved2: new r.Reserved(r.uint32),\n featureNames: new r.Array(FeatureName, 'featureNameCount')\n});\nvar Axis$1 = new r.Struct({\n axisTag: new r.String(4),\n minValue: r.fixed32,\n defaultValue: r.fixed32,\n maxValue: r.fixed32,\n flags: r.uint16,\n nameID: r.uint16,\n name: function name(t) {\n return t.parent.parent.name.records.fontFeatures[t.nameID];\n }\n});\nvar Instance = new r.Struct({\n nameID: r.uint16,\n name: function name(t) {\n return t.parent.parent.name.records.fontFeatures[t.nameID];\n },\n flags: r.uint16,\n coord: new r.Array(r.fixed32, function (t) {\n return t.parent.axisCount;\n }),\n postscriptNameID: new r.Optional(r.uint16, function (t) {\n return t.parent.instanceSize - t._currentOffset > 0;\n })\n});\nvar fvar = new r.Struct({\n version: r.fixed32,\n offsetToData: r.uint16,\n countSizePairs: r.uint16,\n axisCount: r.uint16,\n axisSize: r.uint16,\n instanceCount: r.uint16,\n instanceSize: r.uint16,\n axis: new r.Array(Axis$1, 'axisCount'),\n instance: new r.Array(Instance, 'instanceCount')\n});\nvar shortFrac$1 = new r.Fixed(16, 'BE', 14);\n\nvar Offset = /*#__PURE__*/function () {\n function Offset() {}\n\n Offset.decode = function decode(stream, parent) {\n // In short format, offsets are multiplied by 2.\n // This doesn't seem to be documented by Apple, but it\n // is implemented this way in Freetype.\n return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2;\n };\n\n return Offset;\n}();\n\nvar gvar = new r.Struct({\n version: r.uint16,\n reserved: new r.Reserved(r.uint16),\n axisCount: r.uint16,\n globalCoordCount: r.uint16,\n globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac$1, 'axisCount'), 'globalCoordCount')),\n glyphCount: r.uint16,\n flags: r.uint16,\n offsetToData: r.uint32,\n offsets: new r.Array(new r.Pointer(Offset, 'void', {\n relativeTo: function relativeTo(ctx) {\n return ctx.offsetToData;\n },\n allowNull: false\n }), function (t) {\n return t.glyphCount + 1;\n })\n});\nvar ClassTable$1 = new r.Struct({\n length: r.uint16,\n coverage: r.uint16,\n subFeatureFlags: r.uint32,\n stateTable: new StateTable1()\n});\nvar WidthDeltaRecord = new r.Struct({\n justClass: r.uint32,\n beforeGrowLimit: r.fixed32,\n beforeShrinkLimit: r.fixed32,\n afterGrowLimit: r.fixed32,\n afterShrinkLimit: r.fixed32,\n growFlags: r.uint16,\n shrinkFlags: r.uint16\n});\nvar WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\nvar ActionData = new r.VersionedStruct('actionType', {\n 0: {\n // Decomposition action\n lowerLimit: r.fixed32,\n upperLimit: r.fixed32,\n order: r.uint16,\n glyphs: new r.Array(r.uint16, r.uint16)\n },\n 1: {\n // Unconditional add glyph action\n addGlyph: r.uint16\n },\n 2: {\n // Conditional add glyph action\n substThreshold: r.fixed32,\n addGlyph: r.uint16,\n substGlyph: r.uint16\n },\n 3: {},\n // Stretch glyph action (no data, not supported by CoreText)\n 4: {\n // Ductile glyph action (not supported by CoreText)\n variationAxis: r.uint32,\n minimumLimit: r.fixed32,\n noStretchValue: r.fixed32,\n maximumLimit: r.fixed32\n },\n 5: {\n // Repeated add glyph action\n flags: r.uint16,\n glyph: r.uint16\n }\n});\nvar Action = new r.Struct({\n actionClass: r.uint16,\n actionType: r.uint16,\n actionLength: r.uint32,\n actionData: ActionData,\n padding: new r.Reserved(r.uint8, function (t) {\n return t.actionLength - t._currentOffset;\n })\n});\nvar PostcompensationAction = new r.Array(Action, r.uint32);\nvar PostCompensationTable = new r.Struct({\n lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\n});\nvar JustificationTable = new r.Struct({\n classTable: new r.Pointer(r.uint16, ClassTable$1, {\n type: 'parent'\n }),\n wdcOffset: r.uint16,\n postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, {\n type: 'parent'\n }),\n widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, {\n type: 'parent',\n relativeTo: function relativeTo(ctx) {\n return ctx.wdcOffset;\n }\n }))\n});\nvar just = new r.Struct({\n version: r.uint32,\n format: r.uint16,\n horizontal: new r.Pointer(r.uint16, JustificationTable),\n vertical: new r.Pointer(r.uint16, JustificationTable)\n});\nvar LigatureData = {\n action: r.uint16\n};\nvar ContextualData = {\n markIndex: r.uint16,\n currentIndex: r.uint16\n};\nvar InsertionData = {\n currentInsertIndex: r.uint16,\n markedInsertIndex: r.uint16\n};\nvar SubstitutionTable = new r.Struct({\n items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable()))\n});\nvar SubtableData = new r.VersionedStruct('type', {\n 0: {\n // Indic Rearrangement Subtable\n stateTable: new StateTable()\n },\n 1: {\n // Contextual Glyph Substitution Subtable\n stateTable: new StateTable(ContextualData),\n substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\n },\n 2: {\n // Ligature subtable\n stateTable: new StateTable(LigatureData),\n ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\n components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\n ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n },\n 4: {\n // Non-contextual Glyph Substitution Subtable\n lookupTable: new LookupTable()\n },\n 5: {\n // Glyph Insertion Subtable\n stateTable: new StateTable(InsertionData),\n insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n }\n});\nvar Subtable = new r.Struct({\n length: r.uint32,\n coverage: r.uint24,\n type: r.uint8,\n subFeatureFlags: r.uint32,\n table: SubtableData,\n padding: new r.Reserved(r.uint8, function (t) {\n return t.length - t._currentOffset;\n })\n});\nvar FeatureEntry = new r.Struct({\n featureType: r.uint16,\n featureSetting: r.uint16,\n enableFlags: r.uint32,\n disableFlags: r.uint32\n});\nvar MorxChain = new r.Struct({\n defaultFlags: r.uint32,\n chainLength: r.uint32,\n nFeatureEntries: r.uint32,\n nSubtables: r.uint32,\n features: new r.Array(FeatureEntry, 'nFeatureEntries'),\n subtables: new r.Array(Subtable, 'nSubtables')\n});\nvar morx = new r.Struct({\n version: r.uint16,\n unused: new r.Reserved(r.uint16),\n nChains: r.uint32,\n chains: new r.Array(MorxChain, 'nChains')\n});\nvar OpticalBounds = new r.Struct({\n left: r.int16,\n top: r.int16,\n right: r.int16,\n bottom: r.int16\n});\nvar opbd = new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n lookupTable: new LookupTable(OpticalBounds)\n});\nvar tables = {};\ntables.cmap = cmap;\ntables.head = head;\ntables.hhea = hhea;\ntables.hmtx = hmtx;\ntables.maxp = maxp;\ntables.name = NameTable;\ntables['OS/2'] = OS2;\ntables.post = post; // TrueType Outlines\n\ntables.fpgm = fpgm;\ntables.loca = loca;\ntables.prep = prep;\ntables['cvt '] = cvt;\ntables.glyf = glyf; // PostScript Outlines\n\ntables['CFF '] = CFFFont;\ntables['CFF2'] = CFFFont;\ntables.VORG = VORG; // Bitmap Glyphs\n\ntables.EBLC = EBLC;\ntables.CBLC = tables.EBLC;\ntables.sbix = sbix;\ntables.COLR = COLR;\ntables.CPAL = CPAL; // Advanced OpenType Tables\n\ntables.BASE = BASE;\ntables.GDEF = GDEF;\ntables.GPOS = GPOS;\ntables.GSUB = GSUB;\ntables.JSTF = JSTF; // OpenType variations tables\n\ntables.HVAR = HVAR; // Other OpenType Tables\n\ntables.DSIG = DSIG;\ntables.gasp = gasp;\ntables.hdmx = hdmx;\ntables.kern = kern;\ntables.LTSH = LTSH;\ntables.PCLT = PCLT;\ntables.VDMX = VDMX;\ntables.vhea = vhea;\ntables.vmtx = vmtx; // Apple Advanced Typography Tables\n\ntables.avar = avar;\ntables.bsln = bsln;\ntables.feat = feat;\ntables.fvar = fvar;\ntables.gvar = gvar;\ntables.just = just;\ntables.morx = morx;\ntables.opbd = opbd;\nvar TableEntry = new r.Struct({\n tag: new r.String(4),\n checkSum: r.uint32,\n offset: new r.Pointer(r.uint32, 'void', {\n type: 'global'\n }),\n length: r.uint32\n});\nvar Directory = new r.Struct({\n tag: new r.String(4),\n numTables: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n tables: new r.Array(TableEntry, 'numTables')\n});\n\nDirectory.process = function () {\n var tables = {};\n\n for (var _iterator9 = _createForOfIteratorHelperLoose(this.tables), _step9; !(_step9 = _iterator9()).done;) {\n var table = _step9.value;\n tables[table.tag] = table;\n }\n\n this.tables = tables;\n};\n\nDirectory.preEncode = function (stream) {\n var tables$1 = [];\n\n for (var tag in this.tables) {\n var table = this.tables[tag];\n\n if (table) {\n tables$1.push({\n tag: tag,\n checkSum: 0,\n offset: new r.VoidPointer(tables[tag], table),\n length: tables[tag].size(table)\n });\n }\n }\n\n this.tag = 'true';\n this.numTables = tables$1.length;\n this.tables = tables$1;\n var maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2);\n var maxPowerOf2 = Math.pow(2, maxExponentFor2);\n this.searchRange = maxPowerOf2 * 16;\n this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\n this.rangeShift = this.numTables * 16 - this.searchRange;\n};\n\nfunction binarySearch(arr, cmp) {\n var min = 0;\n var max = arr.length - 1;\n\n while (min <= max) {\n var mid = min + max >> 1;\n var res = cmp(arr[mid]);\n\n if (res < 0) {\n max = mid - 1;\n } else if (res > 0) {\n min = mid + 1;\n } else {\n return mid;\n }\n }\n\n return -1;\n}\n\nfunction range(index, end) {\n var range = [];\n\n while (index < end) {\n range.push(index++);\n }\n\n return range;\n}\n\nvar _class;\n\ntry {\n var iconv = __nested_webpack_require_1763814__(4914);\n} catch (err) {}\n\nvar CmapProcessor = (_class = /*#__PURE__*/function () {\n function CmapProcessor(cmapTable) {\n // Attempt to find a Unicode cmap first\n this.encoding = null;\n this.cmap = this.findSubtable(cmapTable, [// 32-bit subtables\n [3, 10], [0, 6], [0, 4], // 16-bit subtables\n [3, 1], [0, 3], [0, 2], [0, 1], [0, 0]]); // If not unicode cmap was found, and iconv-lite is installed,\n // take the first table with a supported encoding.\n\n if (!this.cmap && iconv) {\n for (var _iterator10 = _createForOfIteratorHelperLoose(cmapTable.tables), _step10; !(_step10 = _iterator10()).done;) {\n var cmap = _step10.value;\n var encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\n\n if (iconv.encodingExists(encoding)) {\n this.cmap = cmap.table;\n this.encoding = encoding;\n }\n }\n }\n\n if (!this.cmap) {\n throw new Error(\"Could not find a supported cmap table\");\n }\n\n this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\n\n if (this.uvs && this.uvs.version !== 14) {\n this.uvs = null;\n }\n }\n\n var _proto15 = CmapProcessor.prototype;\n\n _proto15.findSubtable = function findSubtable(cmapTable, pairs) {\n for (var _iterator11 = _createForOfIteratorHelperLoose(pairs), _step11; !(_step11 = _iterator11()).done;) {\n var _step11$value = _step11.value,\n platformID = _step11$value[0],\n encodingID = _step11$value[1];\n\n for (var _iterator12 = _createForOfIteratorHelperLoose(cmapTable.tables), _step12; !(_step12 = _iterator12()).done;) {\n var cmap = _step12.value;\n\n if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\n return cmap.table;\n }\n }\n }\n\n return null;\n };\n\n _proto15.lookup = function lookup(codepoint, variationSelector) {\n // If there is no Unicode cmap in this font, we need to re-encode\n // the codepoint in the encoding that the cmap supports.\n if (this.encoding) {\n var buf = iconv.encode(String.fromCodePoint(codepoint), this.encoding);\n codepoint = 0;\n\n for (var i = 0; i < buf.length; i++) {\n codepoint = codepoint << 8 | buf[i];\n } // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\n\n } else if (variationSelector) {\n var gid = this.getVariationSelector(codepoint, variationSelector);\n\n if (gid) {\n return gid;\n }\n }\n\n var cmap = this.cmap;\n\n switch (cmap.version) {\n case 0:\n return cmap.codeMap.get(codepoint) || 0;\n\n case 4:\n {\n var min = 0;\n var max = cmap.segCount - 1;\n\n while (min <= max) {\n var mid = min + max >> 1;\n\n if (codepoint < cmap.startCode.get(mid)) {\n max = mid - 1;\n } else if (codepoint > cmap.endCode.get(mid)) {\n min = mid + 1;\n } else {\n var rangeOffset = cmap.idRangeOffset.get(mid);\n\n var _gid = void 0;\n\n if (rangeOffset === 0) {\n _gid = codepoint + cmap.idDelta.get(mid);\n } else {\n var index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\n _gid = cmap.glyphIndexArray.get(index) || 0;\n\n if (_gid !== 0) {\n _gid += cmap.idDelta.get(mid);\n }\n }\n\n return _gid & 0xffff;\n }\n }\n\n return 0;\n }\n\n case 8:\n throw new Error('TODO: cmap format 8');\n\n case 6:\n case 10:\n return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\n\n case 12:\n case 13:\n {\n var _min = 0;\n\n var _max = cmap.nGroups - 1;\n\n while (_min <= _max) {\n var _mid = _min + _max >> 1;\n\n var group = cmap.groups.get(_mid);\n\n if (codepoint < group.startCharCode) {\n _max = _mid - 1;\n } else if (codepoint > group.endCharCode) {\n _min = _mid + 1;\n } else {\n if (cmap.version === 12) {\n return group.glyphID + (codepoint - group.startCharCode);\n } else {\n return group.glyphID;\n }\n }\n }\n\n return 0;\n }\n\n case 14:\n throw new Error('TODO: cmap format 14');\n\n default:\n throw new Error(\"Unknown cmap format \".concat(cmap.version));\n }\n };\n\n _proto15.getVariationSelector = function getVariationSelector(codepoint, variationSelector) {\n if (!this.uvs) {\n return 0;\n }\n\n var selectors = this.uvs.varSelectors.toArray();\n var i = binarySearch(selectors, function (x) {\n return variationSelector - x.varSelector;\n });\n var sel = selectors[i];\n\n if (i !== -1 && sel.defaultUVS) {\n i = binarySearch(sel.defaultUVS, function (x) {\n return codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0;\n });\n }\n\n if (i !== -1 && sel.nonDefaultUVS) {\n i = binarySearch(sel.nonDefaultUVS, function (x) {\n return codepoint - x.unicodeValue;\n });\n\n if (i !== -1) {\n return sel.nonDefaultUVS[i].glyphID;\n }\n }\n\n return 0;\n };\n\n _proto15.getCharacterSet = function getCharacterSet() {\n var cmap = this.cmap;\n\n switch (cmap.version) {\n case 0:\n return range(0, cmap.codeMap.length);\n\n case 4:\n {\n var res = [];\n var endCodes = cmap.endCode.toArray();\n\n for (var i = 0; i < endCodes.length; i++) {\n var tail = endCodes[i] + 1;\n var start = cmap.startCode.get(i);\n res.push.apply(res, range(start, tail));\n }\n\n return res;\n }\n\n case 8:\n throw new Error('TODO: cmap format 8');\n\n case 6:\n case 10:\n return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\n\n case 12:\n case 13:\n {\n var _res = [];\n\n for (var _iterator13 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step13; !(_step13 = _iterator13()).done;) {\n var group = _step13.value;\n\n _res.push.apply(_res, range(group.startCharCode, group.endCharCode + 1));\n }\n\n return _res;\n }\n\n case 14:\n throw new Error('TODO: cmap format 14');\n\n default:\n throw new Error(\"Unknown cmap format \".concat(cmap.version));\n }\n };\n\n _proto15.codePointsForGlyph = function codePointsForGlyph(gid) {\n var cmap = this.cmap;\n\n switch (cmap.version) {\n case 0:\n {\n var res = [];\n\n for (var i = 0; i < 256; i++) {\n if (cmap.codeMap.get(i) === gid) {\n res.push(i);\n }\n }\n\n return res;\n }\n\n case 4:\n {\n var _res2 = [];\n\n for (var _i = 0; _i < cmap.segCount; _i++) {\n var end = cmap.endCode.get(_i);\n var start = cmap.startCode.get(_i);\n var rangeOffset = cmap.idRangeOffset.get(_i);\n var delta = cmap.idDelta.get(_i);\n\n for (var c = start; c <= end; c++) {\n var g = 0;\n\n if (rangeOffset === 0) {\n g = c + delta;\n } else {\n var index = rangeOffset / 2 + (c - start) - (cmap.segCount - _i);\n g = cmap.glyphIndexArray.get(index) || 0;\n\n if (g !== 0) {\n g += delta;\n }\n }\n\n if (g === gid) {\n _res2.push(c);\n }\n }\n }\n\n return _res2;\n }\n\n case 12:\n {\n var _res3 = [];\n\n for (var _iterator14 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step14; !(_step14 = _iterator14()).done;) {\n var group = _step14.value;\n\n if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\n _res3.push(group.startCharCode + (gid - group.glyphID));\n }\n }\n\n return _res3;\n }\n\n case 13:\n {\n var _res4 = [];\n\n for (var _iterator15 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step15; !(_step15 = _iterator15()).done;) {\n var _group = _step15.value;\n\n if (gid === _group.glyphID) {\n _res4.push.apply(_res4, range(_group.startCharCode, _group.endCharCode + 1));\n }\n }\n\n return _res4;\n }\n\n default:\n throw new Error(\"Unknown cmap format \".concat(cmap.version));\n }\n };\n\n return CmapProcessor;\n}(), (_applyDecoratedDescriptor(_class.prototype, \"getCharacterSet\", [cache], Object.getOwnPropertyDescriptor(_class.prototype, \"getCharacterSet\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"codePointsForGlyph\", [cache], Object.getOwnPropertyDescriptor(_class.prototype, \"codePointsForGlyph\"), _class.prototype)), _class);\n\nvar KernProcessor = /*#__PURE__*/function () {\n function KernProcessor(font) {\n this.kern = font.kern;\n }\n\n var _proto16 = KernProcessor.prototype;\n\n _proto16.process = function process(glyphs, positions) {\n for (var glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\n var left = glyphs[glyphIndex].id;\n var right = glyphs[glyphIndex + 1].id;\n positions[glyphIndex].xAdvance += this.getKerning(left, right);\n }\n };\n\n _proto16.getKerning = function getKerning(left, right) {\n var res = 0;\n\n for (var _iterator16 = _createForOfIteratorHelperLoose(this.kern.tables), _step16; !(_step16 = _iterator16()).done;) {\n var table = _step16.value;\n\n if (table.coverage.crossStream) {\n continue;\n }\n\n switch (table.version) {\n case 0:\n if (!table.coverage.horizontal) {\n continue;\n }\n\n break;\n\n case 1:\n if (table.coverage.vertical || table.coverage.variation) {\n continue;\n }\n\n break;\n\n default:\n throw new Error(\"Unsupported kerning table version \".concat(table.version));\n }\n\n var val = 0;\n var s = table.subtable;\n\n switch (table.format) {\n case 0:\n var pairIdx = binarySearch(s.pairs, function (pair) {\n return left - pair.left || right - pair.right;\n });\n\n if (pairIdx >= 0) {\n val = s.pairs[pairIdx].value;\n }\n\n break;\n\n case 2:\n var leftOffset = 0,\n rightOffset = 0;\n\n if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\n leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\n } else {\n leftOffset = s.array.off;\n }\n\n if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\n rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\n }\n\n var index = (leftOffset + rightOffset - s.array.off) / 2;\n val = s.array.values.get(index);\n break;\n\n case 3:\n if (left >= s.glyphCount || right >= s.glyphCount) {\n return 0;\n }\n\n val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\n break;\n\n default:\n throw new Error(\"Unsupported kerning sub-table format \".concat(table.format));\n } // Microsoft supports the override flag, which resets the result\n // Otherwise, the sum of the results from all subtables is returned\n\n\n if (table.coverage.override) {\n res = val;\n } else {\n res += val;\n }\n }\n\n return res;\n };\n\n return KernProcessor;\n}();\n/**\r\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\r\n * for positioning marks relative to base glyphs. It uses the unicode\r\n * combining class property to position marks.\r\n *\r\n * Based on code from Harfbuzz, thanks!\r\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\r\n */\n\n\nvar UnicodeLayoutEngine = /*#__PURE__*/function () {\n function UnicodeLayoutEngine(font) {\n this.font = font;\n }\n\n var _proto17 = UnicodeLayoutEngine.prototype;\n\n _proto17.positionGlyphs = function positionGlyphs(glyphs, positions) {\n // find each base + mark cluster, and position the marks relative to the base\n var clusterStart = 0;\n var clusterEnd = 0;\n\n for (var index = 0; index < glyphs.length; index++) {\n var glyph = glyphs[index];\n\n if (glyph.isMark) {\n // TODO: handle ligatures\n clusterEnd = index;\n } else {\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n\n clusterStart = clusterEnd = index;\n }\n }\n\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n\n return positions;\n };\n\n _proto17.positionCluster = function positionCluster(glyphs, positions, clusterStart, clusterEnd) {\n var base = glyphs[clusterStart];\n var baseBox = base.cbox.copy(); // adjust bounding box for ligature glyphs\n\n if (base.codePoints.length > 1) {\n // LTR. TODO: RTL support.\n baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length;\n }\n\n var xOffset = -positions[clusterStart].xAdvance;\n var yOffset = 0;\n var yGap = this.font.unitsPerEm / 16; // position each of the mark glyphs relative to the base glyph\n\n for (var index = clusterStart + 1; index <= clusterEnd; index++) {\n var mark = glyphs[index];\n var markBox = mark.cbox;\n var position = positions[index];\n var combiningClass = this.getCombiningClass(mark.codePoints[0]);\n\n if (combiningClass !== 'Not_Reordered') {\n position.xOffset = position.yOffset = 0; // x positioning\n\n switch (combiningClass) {\n case 'Double_Above':\n case 'Double_Below':\n // LTR. TODO: RTL support.\n position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\n break;\n\n case 'Attached_Below_Left':\n case 'Below_Left':\n case 'Above_Left':\n // left align\n position.xOffset += baseBox.minX - markBox.minX;\n break;\n\n case 'Attached_Above_Right':\n case 'Below_Right':\n case 'Above_Right':\n // right align\n position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\n break;\n\n default:\n // Attached_Below, Attached_Above, Below, Above, other\n // center align\n position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\n } // y positioning\n\n\n switch (combiningClass) {\n case 'Double_Below':\n case 'Below_Left':\n case 'Below':\n case 'Below_Right':\n case 'Attached_Below_Left':\n case 'Attached_Below':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\n baseBox.minY += yGap;\n }\n\n position.yOffset = -baseBox.minY - markBox.maxY;\n baseBox.minY += markBox.height;\n break;\n\n case 'Double_Above':\n case 'Above_Left':\n case 'Above':\n case 'Above_Right':\n case 'Attached_Above':\n case 'Attached_Above_Right':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\n baseBox.maxY += yGap;\n }\n\n position.yOffset = baseBox.maxY - markBox.minY;\n baseBox.maxY += markBox.height;\n break;\n }\n\n position.xAdvance = position.yAdvance = 0;\n position.xOffset += xOffset;\n position.yOffset += yOffset;\n } else {\n xOffset -= position.xAdvance;\n yOffset -= position.yAdvance;\n }\n }\n\n return;\n };\n\n _proto17.getCombiningClass = function getCombiningClass(codePoint) {\n var combiningClass = unicode.getCombiningClass(codePoint); // Thai / Lao need some per-character work\n\n if ((codePoint & ~0xff) === 0x0e00) {\n if (combiningClass === 'Not_Reordered') {\n switch (codePoint) {\n case 0x0e31:\n case 0x0e34:\n case 0x0e35:\n case 0x0e36:\n case 0x0e37:\n case 0x0e47:\n case 0x0e4c:\n case 0x0e3d:\n case 0x0e4e:\n return 'Above_Right';\n\n case 0x0eb1:\n case 0x0eb4:\n case 0x0eb5:\n case 0x0eb6:\n case 0x0eb7:\n case 0x0ebb:\n case 0x0ecc:\n case 0x0ecd:\n return 'Above';\n\n case 0x0ebc:\n return 'Below';\n }\n } else if (codePoint === 0x0e3a) {\n // virama\n return 'Below_Right';\n }\n }\n\n switch (combiningClass) {\n // Hebrew\n case 'CCC10': // sheva\n\n case 'CCC11': // hataf segol\n\n case 'CCC12': // hataf patah\n\n case 'CCC13': // hataf qamats\n\n case 'CCC14': // hiriq\n\n case 'CCC15': // tsere\n\n case 'CCC16': // segol\n\n case 'CCC17': // patah\n\n case 'CCC18': // qamats\n\n case 'CCC20': // qubuts\n\n case 'CCC22':\n // meteg\n return 'Below';\n\n case 'CCC23':\n // rafe\n return 'Attached_Above';\n\n case 'CCC24':\n // shin dot\n return 'Above_Right';\n\n case 'CCC25': // sin dot\n\n case 'CCC19':\n // holam\n return 'Above_Left';\n\n case 'CCC26':\n // point varika\n return 'Above';\n\n case 'CCC21':\n // dagesh\n break;\n // Arabic and Syriac\n\n case 'CCC27': // fathatan\n\n case 'CCC28': // dammatan\n\n case 'CCC30': // fatha\n\n case 'CCC31': // damma\n\n case 'CCC33': // shadda\n\n case 'CCC34': // sukun\n\n case 'CCC35': // superscript alef\n\n case 'CCC36':\n // superscript alaph\n return 'Above';\n\n case 'CCC29': // kasratan\n\n case 'CCC32':\n // kasra\n return 'Below';\n // Thai\n\n case 'CCC103':\n // sara u / sara uu\n return 'Below_Right';\n\n case 'CCC107':\n // mai\n return 'Above_Right';\n // Lao\n\n case 'CCC118':\n // sign u / sign uu\n return 'Below';\n\n case 'CCC122':\n // mai\n return 'Above';\n // Tibetan\n\n case 'CCC129': // sign aa\n\n case 'CCC132':\n // sign u\n return 'Below';\n\n case 'CCC130':\n // sign i\n return 'Above';\n }\n\n return combiningClass;\n };\n\n return UnicodeLayoutEngine;\n}();\n/**\r\n * Represents a glyph bounding box\r\n */\n\n\nvar BBox = /*#__PURE__*/function () {\n function BBox(minX, minY, maxX, maxY) {\n if (minX === void 0) {\n minX = Infinity;\n }\n\n if (minY === void 0) {\n minY = Infinity;\n }\n\n if (maxX === void 0) {\n maxX = -Infinity;\n }\n\n if (maxY === void 0) {\n maxY = -Infinity;\n }\n\n /**\r\n * The minimum X position in the bounding box\r\n * @type {number}\r\n */\n this.minX = minX;\n /**\r\n * The minimum Y position in the bounding box\r\n * @type {number}\r\n */\n\n this.minY = minY;\n /**\r\n * The maxmimum X position in the bounding box\r\n * @type {number}\r\n */\n\n this.maxX = maxX;\n /**\r\n * The maxmimum Y position in the bounding box\r\n * @type {number}\r\n */\n\n this.maxY = maxY;\n }\n /**\r\n * The width of the bounding box\r\n * @type {number}\r\n */\n\n\n var _proto18 = BBox.prototype;\n\n _proto18.addPoint = function addPoint(x, y) {\n if (Math.abs(x) !== Infinity) {\n if (x < this.minX) {\n this.minX = x;\n }\n\n if (x > this.maxX) {\n this.maxX = x;\n }\n }\n\n if (Math.abs(y) !== Infinity) {\n if (y < this.minY) {\n this.minY = y;\n }\n\n if (y > this.maxY) {\n this.maxY = y;\n }\n }\n };\n\n _proto18.copy = function copy() {\n return new BBox(this.minX, this.minY, this.maxX, this.maxY);\n };\n\n _createClass(BBox, [{\n key: \"width\",\n get: function get() {\n return this.maxX - this.minX;\n }\n /**\r\n * The height of the bounding box\r\n * @type {number}\r\n */\n\n }, {\n key: \"height\",\n get: function get() {\n return this.maxY - this.minY;\n }\n }]);\n\n return BBox;\n}(); // Data from http://www.microsoft.com/typography/otspec/scripttags.htm\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\n\n\nvar UNICODE_SCRIPTS = {\n Caucasian_Albanian: 'aghb',\n Arabic: 'arab',\n Imperial_Aramaic: 'armi',\n Armenian: 'armn',\n Avestan: 'avst',\n Balinese: 'bali',\n Bamum: 'bamu',\n Bassa_Vah: 'bass',\n Batak: 'batk',\n Bengali: ['bng2', 'beng'],\n Bopomofo: 'bopo',\n Brahmi: 'brah',\n Braille: 'brai',\n Buginese: 'bugi',\n Buhid: 'buhd',\n Chakma: 'cakm',\n Canadian_Aboriginal: 'cans',\n Carian: 'cari',\n Cham: 'cham',\n Cherokee: 'cher',\n Coptic: 'copt',\n Cypriot: 'cprt',\n Cyrillic: 'cyrl',\n Devanagari: ['dev2', 'deva'],\n Deseret: 'dsrt',\n Duployan: 'dupl',\n Egyptian_Hieroglyphs: 'egyp',\n Elbasan: 'elba',\n Ethiopic: 'ethi',\n Georgian: 'geor',\n Glagolitic: 'glag',\n Gothic: 'goth',\n Grantha: 'gran',\n Greek: 'grek',\n Gujarati: ['gjr2', 'gujr'],\n Gurmukhi: ['gur2', 'guru'],\n Hangul: 'hang',\n Han: 'hani',\n Hanunoo: 'hano',\n Hebrew: 'hebr',\n Hiragana: 'hira',\n Pahawh_Hmong: 'hmng',\n Katakana_Or_Hiragana: 'hrkt',\n Old_Italic: 'ital',\n Javanese: 'java',\n Kayah_Li: 'kali',\n Katakana: 'kana',\n Kharoshthi: 'khar',\n Khmer: 'khmr',\n Khojki: 'khoj',\n Kannada: ['knd2', 'knda'],\n Kaithi: 'kthi',\n Tai_Tham: 'lana',\n Lao: 'lao ',\n Latin: 'latn',\n Lepcha: 'lepc',\n Limbu: 'limb',\n Linear_A: 'lina',\n Linear_B: 'linb',\n Lisu: 'lisu',\n Lycian: 'lyci',\n Lydian: 'lydi',\n Mahajani: 'mahj',\n Mandaic: 'mand',\n Manichaean: 'mani',\n Mende_Kikakui: 'mend',\n Meroitic_Cursive: 'merc',\n Meroitic_Hieroglyphs: 'mero',\n Malayalam: ['mlm2', 'mlym'],\n Modi: 'modi',\n Mongolian: 'mong',\n Mro: 'mroo',\n Meetei_Mayek: 'mtei',\n Myanmar: ['mym2', 'mymr'],\n Old_North_Arabian: 'narb',\n Nabataean: 'nbat',\n Nko: 'nko ',\n Ogham: 'ogam',\n Ol_Chiki: 'olck',\n Old_Turkic: 'orkh',\n Oriya: ['ory2', 'orya'],\n Osmanya: 'osma',\n Palmyrene: 'palm',\n Pau_Cin_Hau: 'pauc',\n Old_Permic: 'perm',\n Phags_Pa: 'phag',\n Inscriptional_Pahlavi: 'phli',\n Psalter_Pahlavi: 'phlp',\n Phoenician: 'phnx',\n Miao: 'plrd',\n Inscriptional_Parthian: 'prti',\n Rejang: 'rjng',\n Runic: 'runr',\n Samaritan: 'samr',\n Old_South_Arabian: 'sarb',\n Saurashtra: 'saur',\n Shavian: 'shaw',\n Sharada: 'shrd',\n Siddham: 'sidd',\n Khudawadi: 'sind',\n Sinhala: 'sinh',\n Sora_Sompeng: 'sora',\n Sundanese: 'sund',\n Syloti_Nagri: 'sylo',\n Syriac: 'syrc',\n Tagbanwa: 'tagb',\n Takri: 'takr',\n Tai_Le: 'tale',\n New_Tai_Lue: 'talu',\n Tamil: ['tml2', 'taml'],\n Tai_Viet: 'tavt',\n Telugu: ['tel2', 'telu'],\n Tifinagh: 'tfng',\n Tagalog: 'tglg',\n Thaana: 'thaa',\n Thai: 'thai',\n Tibetan: 'tibt',\n Tirhuta: 'tirh',\n Ugaritic: 'ugar',\n Vai: 'vai ',\n Warang_Citi: 'wara',\n Old_Persian: 'xpeo',\n Cuneiform: 'xsux',\n Yi: 'yi ',\n Inherited: 'zinh',\n Common: 'zyyy',\n Unknown: 'zzzz'\n};\nvar OPENTYPE_SCRIPTS = {};\n\nfor (var script in UNICODE_SCRIPTS) {\n var tag = UNICODE_SCRIPTS[script];\n\n if (Array.isArray(tag)) {\n for (var _iterator17 = _createForOfIteratorHelperLoose(tag), _step17; !(_step17 = _iterator17()).done;) {\n var t = _step17.value;\n OPENTYPE_SCRIPTS[t] = script;\n }\n } else {\n OPENTYPE_SCRIPTS[tag] = script;\n }\n}\n\nfunction fromOpenType(tag) {\n return OPENTYPE_SCRIPTS[tag];\n}\n\nfunction forString(string) {\n var len = string.length;\n var idx = 0;\n\n while (idx < len) {\n var code = string.charCodeAt(idx++); // Check if this is a high surrogate\n\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n var next = string.charCodeAt(idx); // Check if this is a low surrogate\n\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\n }\n }\n\n var _script = unicode.getScript(code);\n\n if (_script !== 'Common' && _script !== 'Inherited' && _script !== 'Unknown') {\n return UNICODE_SCRIPTS[_script];\n }\n }\n\n return UNICODE_SCRIPTS.Unknown;\n}\n\nfunction forCodePoints(codePoints) {\n for (var i = 0; i < codePoints.length; i++) {\n var codePoint = codePoints[i];\n\n var _script2 = unicode.getScript(codePoint);\n\n if (_script2 !== 'Common' && _script2 !== 'Inherited' && _script2 !== 'Unknown') {\n return UNICODE_SCRIPTS[_script2];\n }\n }\n\n return UNICODE_SCRIPTS.Unknown;\n} // The scripts in this map are written from right to left\n\n\nvar RTL = {\n arab: true,\n // Arabic\n hebr: true,\n // Hebrew\n syrc: true,\n // Syriac\n thaa: true,\n // Thaana\n cprt: true,\n // Cypriot Syllabary\n khar: true,\n // Kharosthi\n phnx: true,\n // Phoenician\n 'nko ': true,\n // N'Ko\n lydi: true,\n // Lydian\n avst: true,\n // Avestan\n armi: true,\n // Imperial Aramaic\n phli: true,\n // Inscriptional Pahlavi\n prti: true,\n // Inscriptional Parthian\n sarb: true,\n // Old South Arabian\n orkh: true,\n // Old Turkic, Orkhon Runic\n samr: true,\n // Samaritan\n mand: true,\n // Mandaic, Mandaean\n merc: true,\n // Meroitic Cursive\n mero: true,\n // Meroitic Hieroglyphs\n // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\n mani: true,\n // Manichaean\n mend: true,\n // Mende Kikakui\n nbat: true,\n // Nabataean\n narb: true,\n // Old North Arabian\n palm: true,\n // Palmyrene\n phlp: true // Psalter Pahlavi\n\n};\n\nfunction direction(script) {\n if (RTL[script]) {\n return 'rtl';\n }\n\n return 'ltr';\n}\n/**\r\n * Represents a run of Glyph and GlyphPosition objects.\r\n * Returned by the font layout method.\r\n */\n\n\nvar GlyphRun = /*#__PURE__*/function () {\n function GlyphRun(glyphs, features, script, language, direction$1) {\n /**\r\n * An array of Glyph objects in the run\r\n * @type {Glyph[]}\r\n */\n this.glyphs = glyphs;\n /**\r\n * An array of GlyphPosition objects for each glyph in the run\r\n * @type {GlyphPosition[]}\r\n */\n\n this.positions = null;\n /**\r\n * The script that was requested for shaping. This was either passed in or detected automatically.\r\n * @type {string}\r\n */\n\n this.script = script;\n /**\r\n * The language requested for shaping, as passed in. If `null`, the default language for the\r\n * script was used.\r\n * @type {string}\r\n */\n\n this.language = language || null;\n /**\r\n * The direction requested for shaping, as passed in (either ltr or rtl).\r\n * If `null`, the default direction of the script is used.\r\n * @type {string}\r\n */\n\n this.direction = direction$1 || direction(script);\n /**\r\n * The features requested during shaping. This is a combination of user\r\n * specified features and features chosen by the shaper.\r\n * @type {object}\r\n */\n\n this.features = {}; // Convert features to an object\n\n if (Array.isArray(features)) {\n for (var _iterator18 = _createForOfIteratorHelperLoose(features), _step18; !(_step18 = _iterator18()).done;) {\n var tag = _step18.value;\n this.features[tag] = true;\n }\n } else if (typeof features === 'object') {\n this.features = features;\n }\n }\n /**\r\n * The total advance width of the run.\r\n * @type {number}\r\n */\n\n\n _createClass(GlyphRun, [{\n key: \"advanceWidth\",\n get: function get() {\n var width = 0;\n\n for (var _iterator19 = _createForOfIteratorHelperLoose(this.positions), _step19; !(_step19 = _iterator19()).done;) {\n var position = _step19.value;\n width += position.xAdvance;\n }\n\n return width;\n }\n /**\r\n * The total advance height of the run.\r\n * @type {number}\r\n */\n\n }, {\n key: \"advanceHeight\",\n get: function get() {\n var height = 0;\n\n for (var _iterator20 = _createForOfIteratorHelperLoose(this.positions), _step20; !(_step20 = _iterator20()).done;) {\n var position = _step20.value;\n height += position.yAdvance;\n }\n\n return height;\n }\n /**\r\n * The bounding box containing all glyphs in the run.\r\n * @type {BBox}\r\n */\n\n }, {\n key: \"bbox\",\n get: function get() {\n var bbox = new BBox();\n var x = 0;\n var y = 0;\n\n for (var index = 0; index < this.glyphs.length; index++) {\n var glyph = this.glyphs[index];\n var p = this.positions[index];\n var b = glyph.bbox;\n bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\n bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\n x += p.xAdvance;\n y += p.yAdvance;\n }\n\n return bbox;\n }\n }]);\n\n return GlyphRun;\n}();\n/**\r\n * Represents positioning information for a glyph in a GlyphRun.\r\n */\n\n\nvar GlyphPosition = function GlyphPosition(xAdvance, yAdvance, xOffset, yOffset) {\n if (xAdvance === void 0) {\n xAdvance = 0;\n }\n\n if (yAdvance === void 0) {\n yAdvance = 0;\n }\n\n if (xOffset === void 0) {\n xOffset = 0;\n }\n\n if (yOffset === void 0) {\n yOffset = 0;\n }\n\n /**\r\n * The amount to move the virtual pen in the X direction after rendering this glyph.\r\n * @type {number}\r\n */\n this.xAdvance = xAdvance;\n /**\r\n * The amount to move the virtual pen in the Y direction after rendering this glyph.\r\n * @type {number}\r\n */\n\n this.yAdvance = yAdvance;\n /**\r\n * The offset from the pen position in the X direction at which to render this glyph.\r\n * @type {number}\r\n */\n\n this.xOffset = xOffset;\n /**\r\n * The offset from the pen position in the Y direction at which to render this glyph.\r\n * @type {number}\r\n */\n\n this.yOffset = yOffset;\n}; // see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\n\n\nvar features = {\n allTypographicFeatures: {\n code: 0,\n exclusive: false,\n allTypeFeatures: 0\n },\n ligatures: {\n code: 1,\n exclusive: false,\n requiredLigatures: 0,\n commonLigatures: 2,\n rareLigatures: 4,\n // logos: 6\n rebusPictures: 8,\n diphthongLigatures: 10,\n squaredLigatures: 12,\n abbrevSquaredLigatures: 14,\n symbolLigatures: 16,\n contextualLigatures: 18,\n historicalLigatures: 20\n },\n cursiveConnection: {\n code: 2,\n exclusive: true,\n unconnected: 0,\n partiallyConnected: 1,\n cursive: 2\n },\n letterCase: {\n code: 3,\n exclusive: true\n },\n // upperAndLowerCase: 0 # deprecated\n // allCaps: 1 # deprecated\n // allLowerCase: 2 # deprecated\n // smallCaps: 3 # deprecated\n // initialCaps: 4 # deprecated\n // initialCapsAndSmallCaps: 5 # deprecated\n verticalSubstitution: {\n code: 4,\n exclusive: false,\n substituteVerticalForms: 0\n },\n linguisticRearrangement: {\n code: 5,\n exclusive: false,\n linguisticRearrangement: 0\n },\n numberSpacing: {\n code: 6,\n exclusive: true,\n monospacedNumbers: 0,\n proportionalNumbers: 1,\n thirdWidthNumbers: 2,\n quarterWidthNumbers: 3\n },\n smartSwash: {\n code: 8,\n exclusive: false,\n wordInitialSwashes: 0,\n wordFinalSwashes: 2,\n // lineInitialSwashes: 4\n // lineFinalSwashes: 6\n nonFinalSwashes: 8\n },\n diacritics: {\n code: 9,\n exclusive: true,\n showDiacritics: 0,\n hideDiacritics: 1,\n decomposeDiacritics: 2\n },\n verticalPosition: {\n code: 10,\n exclusive: true,\n normalPosition: 0,\n superiors: 1,\n inferiors: 2,\n ordinals: 3,\n scientificInferiors: 4\n },\n fractions: {\n code: 11,\n exclusive: true,\n noFractions: 0,\n verticalFractions: 1,\n diagonalFractions: 2\n },\n overlappingCharacters: {\n code: 13,\n exclusive: false,\n preventOverlap: 0\n },\n typographicExtras: {\n code: 14,\n exclusive: false,\n // hyphensToEmDash: 0\n // hyphenToEnDash: 2\n slashedZero: 4\n },\n // formInterrobang: 6\n // smartQuotes: 8\n // periodsToEllipsis: 10\n mathematicalExtras: {\n code: 15,\n exclusive: false,\n // hyphenToMinus: 0\n // asteristoMultiply: 2\n // slashToDivide: 4\n // inequalityLigatures: 6\n // exponents: 8\n mathematicalGreek: 10\n },\n ornamentSets: {\n code: 16,\n exclusive: true,\n noOrnaments: 0,\n dingbats: 1,\n piCharacters: 2,\n fleurons: 3,\n decorativeBorders: 4,\n internationalSymbols: 5,\n mathSymbols: 6\n },\n characterAlternatives: {\n code: 17,\n exclusive: true,\n noAlternates: 0\n },\n // user defined options\n designComplexity: {\n code: 18,\n exclusive: true,\n designLevel1: 0,\n designLevel2: 1,\n designLevel3: 2,\n designLevel4: 3,\n designLevel5: 4\n },\n styleOptions: {\n code: 19,\n exclusive: true,\n noStyleOptions: 0,\n displayText: 1,\n engravedText: 2,\n illuminatedCaps: 3,\n titlingCaps: 4,\n tallCaps: 5\n },\n characterShape: {\n code: 20,\n exclusive: true,\n traditionalCharacters: 0,\n simplifiedCharacters: 1,\n JIS1978Characters: 2,\n JIS1983Characters: 3,\n JIS1990Characters: 4,\n traditionalAltOne: 5,\n traditionalAltTwo: 6,\n traditionalAltThree: 7,\n traditionalAltFour: 8,\n traditionalAltFive: 9,\n expertCharacters: 10,\n JIS2004Characters: 11,\n hojoCharacters: 12,\n NLCCharacters: 13,\n traditionalNamesCharacters: 14\n },\n numberCase: {\n code: 21,\n exclusive: true,\n lowerCaseNumbers: 0,\n upperCaseNumbers: 1\n },\n textSpacing: {\n code: 22,\n exclusive: true,\n proportionalText: 0,\n monospacedText: 1,\n halfWidthText: 2,\n thirdWidthText: 3,\n quarterWidthText: 4,\n altProportionalText: 5,\n altHalfWidthText: 6\n },\n transliteration: {\n code: 23,\n exclusive: true,\n noTransliteration: 0\n },\n // hanjaToHangul: 1\n // hiraganaToKatakana: 2\n // katakanaToHiragana: 3\n // kanaToRomanization: 4\n // romanizationToHiragana: 5\n // romanizationToKatakana: 6\n // hanjaToHangulAltOne: 7\n // hanjaToHangulAltTwo: 8\n // hanjaToHangulAltThree: 9\n annotation: {\n code: 24,\n exclusive: true,\n noAnnotation: 0,\n boxAnnotation: 1,\n roundedBoxAnnotation: 2,\n circleAnnotation: 3,\n invertedCircleAnnotation: 4,\n parenthesisAnnotation: 5,\n periodAnnotation: 6,\n romanNumeralAnnotation: 7,\n diamondAnnotation: 8,\n invertedBoxAnnotation: 9,\n invertedRoundedBoxAnnotation: 10\n },\n kanaSpacing: {\n code: 25,\n exclusive: true,\n fullWidthKana: 0,\n proportionalKana: 1\n },\n ideographicSpacing: {\n code: 26,\n exclusive: true,\n fullWidthIdeographs: 0,\n proportionalIdeographs: 1,\n halfWidthIdeographs: 2\n },\n unicodeDecomposition: {\n code: 27,\n exclusive: false,\n canonicalComposition: 0,\n compatibilityComposition: 2,\n transcodingComposition: 4\n },\n rubyKana: {\n code: 28,\n exclusive: false,\n // noRubyKana: 0 # deprecated - use rubyKanaOff instead\n // rubyKana: 1 # deprecated - use rubyKanaOn instead\n rubyKana: 2\n },\n CJKSymbolAlternatives: {\n code: 29,\n exclusive: true,\n noCJKSymbolAlternatives: 0,\n CJKSymbolAltOne: 1,\n CJKSymbolAltTwo: 2,\n CJKSymbolAltThree: 3,\n CJKSymbolAltFour: 4,\n CJKSymbolAltFive: 5\n },\n ideographicAlternatives: {\n code: 30,\n exclusive: true,\n noIdeographicAlternatives: 0,\n ideographicAltOne: 1,\n ideographicAltTwo: 2,\n ideographicAltThree: 3,\n ideographicAltFour: 4,\n ideographicAltFive: 5\n },\n CJKVerticalRomanPlacement: {\n code: 31,\n exclusive: true,\n CJKVerticalRomanCentered: 0,\n CJKVerticalRomanHBaseline: 1\n },\n italicCJKRoman: {\n code: 32,\n exclusive: false,\n // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead\n // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead\n CJKItalicRoman: 2\n },\n caseSensitiveLayout: {\n code: 33,\n exclusive: false,\n caseSensitiveLayout: 0,\n caseSensitiveSpacing: 2\n },\n alternateKana: {\n code: 34,\n exclusive: false,\n alternateHorizKana: 0,\n alternateVertKana: 2\n },\n stylisticAlternatives: {\n code: 35,\n exclusive: false,\n noStylisticAlternates: 0,\n stylisticAltOne: 2,\n stylisticAltTwo: 4,\n stylisticAltThree: 6,\n stylisticAltFour: 8,\n stylisticAltFive: 10,\n stylisticAltSix: 12,\n stylisticAltSeven: 14,\n stylisticAltEight: 16,\n stylisticAltNine: 18,\n stylisticAltTen: 20,\n stylisticAltEleven: 22,\n stylisticAltTwelve: 24,\n stylisticAltThirteen: 26,\n stylisticAltFourteen: 28,\n stylisticAltFifteen: 30,\n stylisticAltSixteen: 32,\n stylisticAltSeventeen: 34,\n stylisticAltEighteen: 36,\n stylisticAltNineteen: 38,\n stylisticAltTwenty: 40\n },\n contextualAlternates: {\n code: 36,\n exclusive: false,\n contextualAlternates: 0,\n swashAlternates: 2,\n contextualSwashAlternates: 4\n },\n lowerCase: {\n code: 37,\n exclusive: true,\n defaultLowerCase: 0,\n lowerCaseSmallCaps: 1,\n lowerCasePetiteCaps: 2\n },\n upperCase: {\n code: 38,\n exclusive: true,\n defaultUpperCase: 0,\n upperCaseSmallCaps: 1,\n upperCasePetiteCaps: 2\n },\n languageTag: {\n // indices into ltag table\n code: 39,\n exclusive: true\n },\n CJKRomanSpacing: {\n code: 103,\n exclusive: true,\n halfWidthCJKRoman: 0,\n proportionalCJKRoman: 1,\n defaultCJKRoman: 2,\n fullWidthCJKRoman: 3\n }\n};\n\nvar feature = function feature(name, selector) {\n return [features[name].code, features[name][selector]];\n};\n\nvar OTMapping = {\n rlig: feature('ligatures', 'requiredLigatures'),\n clig: feature('ligatures', 'contextualLigatures'),\n dlig: feature('ligatures', 'rareLigatures'),\n hlig: feature('ligatures', 'historicalLigatures'),\n liga: feature('ligatures', 'commonLigatures'),\n hist: feature('ligatures', 'historicalLigatures'),\n // ??\n smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\n pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\n frac: feature('fractions', 'diagonalFractions'),\n dnom: feature('fractions', 'diagonalFractions'),\n // ??\n numr: feature('fractions', 'diagonalFractions'),\n // ??\n afrc: feature('fractions', 'verticalFractions'),\n // aalt\n // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\n // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\n // unic, vatu, vhal, vjmo, vpal, vrt2\n // dist -> trak table?\n // kern, vkrn -> kern table\n // lfbd + opbd + rtbd -> opbd table?\n // mark, mkmk -> acnt table?\n // locl -> languageTag + ltag table\n case: feature('caseSensitiveLayout', 'caseSensitiveLayout'),\n // also caseSensitiveSpacing\n ccmp: feature('unicodeDecomposition', 'canonicalComposition'),\n // compatibilityComposition?\n cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n // guess..., probably not given below\n valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n swsh: feature('contextualAlternates', 'swashAlternates'),\n cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\n curs: feature('cursiveConnection', 'cursive'),\n // ??\n c2pc: feature('upperCase', 'upperCasePetiteCaps'),\n c2sc: feature('upperCase', 'upperCaseSmallCaps'),\n init: feature('smartSwash', 'wordInitialSwashes'),\n // ??\n fin2: feature('smartSwash', 'wordFinalSwashes'),\n // ??\n medi: feature('smartSwash', 'nonFinalSwashes'),\n // ??\n med2: feature('smartSwash', 'nonFinalSwashes'),\n // ??\n fin3: feature('smartSwash', 'wordFinalSwashes'),\n // ??\n fina: feature('smartSwash', 'wordFinalSwashes'),\n // ??\n pkna: feature('kanaSpacing', 'proportionalKana'),\n half: feature('textSpacing', 'halfWidthText'),\n // also HalfWidthCJKRoman, HalfWidthIdeographs?\n halt: feature('textSpacing', 'altHalfWidthText'),\n hkna: feature('alternateKana', 'alternateHorizKana'),\n vkna: feature('alternateKana', 'alternateVertKana'),\n // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\n ital: feature('italicCJKRoman', 'CJKItalicRoman'),\n lnum: feature('numberCase', 'upperCaseNumbers'),\n onum: feature('numberCase', 'lowerCaseNumbers'),\n mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\n // nalt: not enough info. what type of annotation?\n // ornm: ditto, which ornament style?\n calt: feature('contextualAlternates', 'contextualAlternates'),\n // or more?\n vrt2: feature('verticalSubstitution', 'substituteVerticalForms'),\n // oh... below?\n vert: feature('verticalSubstitution', 'substituteVerticalForms'),\n tnum: feature('numberSpacing', 'monospacedNumbers'),\n pnum: feature('numberSpacing', 'proportionalNumbers'),\n sups: feature('verticalPosition', 'superiors'),\n subs: feature('verticalPosition', 'inferiors'),\n ordn: feature('verticalPosition', 'ordinals'),\n pwid: feature('textSpacing', 'proportionalText'),\n hwid: feature('textSpacing', 'halfWidthText'),\n qwid: feature('textSpacing', 'quarterWidthText'),\n // also QuarterWidthNumbers?\n twid: feature('textSpacing', 'thirdWidthText'),\n // also ThirdWidthNumbers?\n fwid: feature('textSpacing', 'proportionalText'),\n //??\n palt: feature('textSpacing', 'altProportionalText'),\n trad: feature('characterShape', 'traditionalCharacters'),\n smpl: feature('characterShape', 'simplifiedCharacters'),\n jp78: feature('characterShape', 'JIS1978Characters'),\n jp83: feature('characterShape', 'JIS1983Characters'),\n jp90: feature('characterShape', 'JIS1990Characters'),\n jp04: feature('characterShape', 'JIS2004Characters'),\n expt: feature('characterShape', 'expertCharacters'),\n hojo: feature('characterShape', 'hojoCharacters'),\n nlck: feature('characterShape', 'NLCCharacters'),\n tnam: feature('characterShape', 'traditionalNamesCharacters'),\n ruby: feature('rubyKana', 'rubyKana'),\n titl: feature('styleOptions', 'titlingCaps'),\n zero: feature('typographicExtras', 'slashedZero'),\n ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\n ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\n ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\n ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\n ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\n ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\n ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\n ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\n ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\n ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\n ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\n ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\n ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\n ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\n ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\n ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\n ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\n ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\n ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\n ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\n}; // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\n// Add cv01-cv99 features\n\nfor (var i = 1; i <= 99; i++) {\n OTMapping[\"cv\".concat(\"00\".concat(i).slice(-2))] = [features.characterAlternatives.code, i];\n} // create inverse mapping\n\n\nvar AATMapping = {};\n\nfor (var ot in OTMapping) {\n var aat = OTMapping[ot];\n\n if (AATMapping[aat[0]] == null) {\n AATMapping[aat[0]] = {};\n }\n\n AATMapping[aat[0]][aat[1]] = ot;\n} // Maps an array of OpenType features to AAT features\n// in the form of {featureType:{featureSetting:true}}\n\n\nfunction mapOTToAAT(features) {\n var res = {};\n\n for (var k in features) {\n var r = void 0;\n\n if (r = OTMapping[k]) {\n if (res[r[0]] == null) {\n res[r[0]] = {};\n }\n\n res[r[0]][r[1]] = features[k];\n }\n }\n\n return res;\n} // Maps strings in a [featureType, featureSetting]\n// to their equivalent number codes\n\n\nfunction mapFeatureStrings(f) {\n var type = f[0],\n setting = f[1];\n\n if (isNaN(type)) {\n var typeCode = features[type] && features[type].code;\n } else {\n var typeCode = type;\n }\n\n if (isNaN(setting)) {\n var settingCode = features[type] && features[type][setting];\n } else {\n var settingCode = setting;\n }\n\n return [typeCode, settingCode];\n} // Maps AAT features to an array of OpenType features\n// Supports both arrays in the form of [[featureType, featureSetting]]\n// and objects in the form of {featureType:{featureSetting:true}}\n// featureTypes and featureSettings can be either strings or number codes\n\n\nfunction mapAATToOT(features) {\n var res = {};\n\n if (Array.isArray(features)) {\n for (var k = 0; k < features.length; k++) {\n var r = void 0;\n var f = mapFeatureStrings(features[k]);\n\n if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\n res[r] = true;\n }\n }\n } else if (typeof features === 'object') {\n for (var type in features) {\n var _feature = features[type];\n\n for (var setting in _feature) {\n var _r = void 0;\n\n var _f = mapFeatureStrings([type, setting]);\n\n if (_feature[setting] && (_r = AATMapping[_f[0]] && AATMapping[_f[0]][_f[1]])) {\n res[_r] = true;\n }\n }\n }\n }\n\n return Object.keys(res);\n}\n\nvar _class$1;\n\nvar AATLookupTable = (_class$1 = /*#__PURE__*/function () {\n function AATLookupTable(table) {\n this.table = table;\n }\n\n var _proto19 = AATLookupTable.prototype;\n\n _proto19.lookup = function lookup(glyph) {\n switch (this.table.version) {\n case 0:\n // simple array format\n return this.table.values.getItem(glyph);\n\n case 2: // segment format\n\n case 4:\n {\n var min = 0;\n var max = this.table.binarySearchHeader.nUnits - 1;\n\n while (min <= max) {\n var mid = min + max >> 1;\n var seg = this.table.segments[mid]; // special end of search value\n\n if (seg.firstGlyph === 0xffff) {\n return null;\n }\n\n if (glyph < seg.firstGlyph) {\n max = mid - 1;\n } else if (glyph > seg.lastGlyph) {\n min = mid + 1;\n } else {\n if (this.table.version === 2) {\n return seg.value;\n } else {\n return seg.values[glyph - seg.firstGlyph];\n }\n }\n }\n\n return null;\n }\n\n case 6:\n {\n // lookup single\n var _min = 0;\n\n var _max = this.table.binarySearchHeader.nUnits - 1;\n\n while (_min <= _max) {\n var mid = _min + _max >> 1;\n var seg = this.table.segments[mid]; // special end of search value\n\n if (seg.glyph === 0xffff) {\n return null;\n }\n\n if (glyph < seg.glyph) {\n _max = mid - 1;\n } else if (glyph > seg.glyph) {\n _min = mid + 1;\n } else {\n return seg.value;\n }\n }\n\n return null;\n }\n\n case 8:\n // lookup trimmed\n return this.table.values[glyph - this.table.firstGlyph];\n\n default:\n throw new Error(\"Unknown lookup table format: \".concat(this.table.version));\n }\n };\n\n _proto19.glyphsForValue = function glyphsForValue(classValue) {\n var res = [];\n\n switch (this.table.version) {\n case 2: // segment format\n\n case 4:\n {\n for (var _iterator21 = _createForOfIteratorHelperLoose(this.table.segments), _step21; !(_step21 = _iterator21()).done;) {\n var segment = _step21.value;\n\n if (this.table.version === 2 && segment.value === classValue) {\n res.push.apply(res, range(segment.firstGlyph, segment.lastGlyph + 1));\n } else {\n for (var index = 0; index < segment.values.length; index++) {\n if (segment.values[index] === classValue) {\n res.push(segment.firstGlyph + index);\n }\n }\n }\n }\n\n break;\n }\n\n case 6:\n {\n // lookup single\n for (var _iterator22 = _createForOfIteratorHelperLoose(this.table.segments), _step22; !(_step22 = _iterator22()).done;) {\n var _segment = _step22.value;\n\n if (_segment.value === classValue) {\n res.push(_segment.glyph);\n }\n }\n\n break;\n }\n\n case 8:\n {\n // lookup trimmed\n for (var i = 0; i < this.table.values.length; i++) {\n if (this.table.values[i] === classValue) {\n res.push(this.table.firstGlyph + i);\n }\n }\n\n break;\n }\n\n default:\n throw new Error(\"Unknown lookup table format: \".concat(this.table.version));\n }\n\n return res;\n };\n\n return AATLookupTable;\n}(), _applyDecoratedDescriptor(_class$1.prototype, \"glyphsForValue\", [cache], Object.getOwnPropertyDescriptor(_class$1.prototype, \"glyphsForValue\"), _class$1.prototype), _class$1);\nvar START_OF_TEXT_STATE = 0;\nvar END_OF_TEXT_CLASS = 0;\nvar OUT_OF_BOUNDS_CLASS = 1;\nvar DELETED_GLYPH_CLASS = 2;\nvar DONT_ADVANCE = 0x4000;\n\nvar AATStateMachine = /*#__PURE__*/function () {\n function AATStateMachine(stateTable) {\n this.stateTable = stateTable;\n this.lookupTable = new AATLookupTable(stateTable.classTable);\n }\n\n var _proto20 = AATStateMachine.prototype;\n\n _proto20.process = function process(glyphs, reverse, processEntry) {\n var currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\n\n var index = reverse ? glyphs.length - 1 : 0;\n var dir = reverse ? -1 : 1;\n\n while (dir === 1 && index <= glyphs.length || dir === -1 && index >= -1) {\n var glyph = null;\n var classCode = OUT_OF_BOUNDS_CLASS;\n var shouldAdvance = true;\n\n if (index === glyphs.length || index === -1) {\n classCode = END_OF_TEXT_CLASS;\n } else {\n glyph = glyphs[index];\n\n if (glyph.id === 0xffff) {\n // deleted glyph\n classCode = DELETED_GLYPH_CLASS;\n } else {\n classCode = this.lookupTable.lookup(glyph.id);\n\n if (classCode == null) {\n classCode = OUT_OF_BOUNDS_CLASS;\n }\n }\n }\n\n var row = this.stateTable.stateArray.getItem(currentState);\n var entryIndex = row[classCode];\n var entry = this.stateTable.entryTable.getItem(entryIndex);\n\n if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {\n processEntry(glyph, entry, index);\n shouldAdvance = !(entry.flags & DONT_ADVANCE);\n }\n\n currentState = entry.newState;\n\n if (shouldAdvance) {\n index += dir;\n }\n }\n\n return glyphs;\n }\n /**\r\n * Performs a depth-first traversal of the glyph strings\r\n * represented by the state machine.\r\n */\n ;\n\n _proto20.traverse = function traverse(opts, state, visited) {\n if (state === void 0) {\n state = 0;\n }\n\n if (visited === void 0) {\n visited = new Set();\n }\n\n if (visited.has(state)) {\n return;\n }\n\n visited.add(state);\n var _this$stateTable = this.stateTable,\n nClasses = _this$stateTable.nClasses,\n stateArray = _this$stateTable.stateArray,\n entryTable = _this$stateTable.entryTable;\n var row = stateArray.getItem(state); // Skip predefined classes\n\n for (var classCode = 4; classCode < nClasses; classCode++) {\n var entryIndex = row[classCode];\n var entry = entryTable.getItem(entryIndex); // Try all glyphs in the class\n\n for (var _iterator23 = _createForOfIteratorHelperLoose(this.lookupTable.glyphsForValue(classCode)), _step23; !(_step23 = _iterator23()).done;) {\n var glyph = _step23.value;\n\n if (opts.enter) {\n opts.enter(glyph, entry);\n }\n\n if (entry.newState !== 0) {\n this.traverse(opts, entry.newState, visited);\n }\n\n if (opts.exit) {\n opts.exit(glyph, entry);\n }\n }\n }\n };\n\n return AATStateMachine;\n}();\n\nvar _class$2;\n\nvar MARK_FIRST = 0x8000;\nvar MARK_LAST = 0x2000;\nvar VERB = 0x000F; // contextual substitution and glyph insertion flag\n\nvar SET_MARK = 0x8000; // ligature entry flags\n\nvar SET_COMPONENT = 0x8000;\nvar PERFORM_ACTION = 0x2000; // ligature action masks\n\nvar LAST_MASK = 0x80000000;\nvar STORE_MASK = 0x40000000;\nvar OFFSET_MASK = 0x3FFFFFFF;\nvar REVERSE_DIRECTION = 0x400000;\nvar CURRENT_INSERT_BEFORE = 0x0800;\nvar MARKED_INSERT_BEFORE = 0x0400;\nvar CURRENT_INSERT_COUNT = 0x03E0;\nvar MARKED_INSERT_COUNT = 0x001F;\nvar AATMorxProcessor = (_class$2 = /*#__PURE__*/function () {\n function AATMorxProcessor(font) {\n this.processIndicRearragement = this.processIndicRearragement.bind(this);\n this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\n this.processLigature = this.processLigature.bind(this);\n this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\n this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\n this.font = font;\n this.morx = font.morx;\n this.inputCache = null;\n } // Processes an array of glyphs and applies the specified features\n // Features should be in the form of {featureType:{featureSetting:boolean}}\n\n\n var _proto21 = AATMorxProcessor.prototype;\n\n _proto21.process = function process(glyphs, features) {\n if (features === void 0) {\n features = {};\n }\n\n for (var _iterator24 = _createForOfIteratorHelperLoose(this.morx.chains), _step24; !(_step24 = _iterator24()).done;) {\n var chain = _step24.value;\n var flags = chain.defaultFlags; // enable/disable the requested features\n\n for (var _iterator25 = _createForOfIteratorHelperLoose(chain.features), _step25; !(_step25 = _iterator25()).done;) {\n var feature = _step25.value;\n var f = void 0;\n\n if (f = features[feature.featureType]) {\n if (f[feature.featureSetting]) {\n flags &= feature.disableFlags;\n flags |= feature.enableFlags;\n } else if (f[feature.featureSetting] === false) {\n flags |= ~feature.disableFlags;\n flags &= ~feature.enableFlags;\n }\n }\n }\n\n for (var _iterator26 = _createForOfIteratorHelperLoose(chain.subtables), _step26; !(_step26 = _iterator26()).done;) {\n var subtable = _step26.value;\n\n if (subtable.subFeatureFlags & flags) {\n this.processSubtable(subtable, glyphs);\n }\n }\n } // remove deleted glyphs\n\n\n var index = glyphs.length - 1;\n\n while (index >= 0) {\n if (glyphs[index].id === 0xffff) {\n glyphs.splice(index, 1);\n }\n\n index--;\n }\n\n return glyphs;\n };\n\n _proto21.processSubtable = function processSubtable(subtable, glyphs) {\n this.subtable = subtable;\n this.glyphs = glyphs;\n\n if (this.subtable.type === 4) {\n this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\n return;\n }\n\n this.ligatureStack = [];\n this.markedGlyph = null;\n this.firstGlyph = null;\n this.lastGlyph = null;\n this.markedIndex = null;\n var stateMachine = this.getStateMachine(subtable);\n var process = this.getProcessor();\n var reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\n return stateMachine.process(this.glyphs, reverse, process);\n };\n\n _proto21.getStateMachine = function getStateMachine(subtable) {\n return new AATStateMachine(subtable.table.stateTable);\n };\n\n _proto21.getProcessor = function getProcessor() {\n switch (this.subtable.type) {\n case 0:\n return this.processIndicRearragement;\n\n case 1:\n return this.processContextualSubstitution;\n\n case 2:\n return this.processLigature;\n\n case 4:\n return this.processNoncontextualSubstitutions;\n\n case 5:\n return this.processGlyphInsertion;\n\n default:\n throw new Error(\"Invalid morx subtable type: \".concat(this.subtable.type));\n }\n };\n\n _proto21.processIndicRearragement = function processIndicRearragement(glyph, entry, index) {\n if (entry.flags & MARK_FIRST) {\n this.firstGlyph = index;\n }\n\n if (entry.flags & MARK_LAST) {\n this.lastGlyph = index;\n }\n\n reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\n };\n\n _proto21.processContextualSubstitution = function processContextualSubstitution(glyph, entry, index) {\n var subsitutions = this.subtable.table.substitutionTable.items;\n\n if (entry.markIndex !== 0xffff) {\n var lookup = subsitutions.getItem(entry.markIndex);\n var lookupTable = new AATLookupTable(lookup);\n glyph = this.glyphs[this.markedGlyph];\n var gid = lookupTable.lookup(glyph.id);\n\n if (gid) {\n this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n\n if (entry.currentIndex !== 0xffff) {\n var _lookup = subsitutions.getItem(entry.currentIndex);\n\n var _lookupTable = new AATLookupTable(_lookup);\n\n glyph = this.glyphs[index];\n\n var gid = _lookupTable.lookup(glyph.id);\n\n if (gid) {\n this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n\n if (entry.flags & SET_MARK) {\n this.markedGlyph = index;\n }\n };\n\n _proto21.processLigature = function processLigature(glyph, entry, index) {\n if (entry.flags & SET_COMPONENT) {\n this.ligatureStack.push(index);\n }\n\n if (entry.flags & PERFORM_ACTION) {\n var _this$ligatureStack;\n\n var actions = this.subtable.table.ligatureActions;\n var components = this.subtable.table.components;\n var ligatureList = this.subtable.table.ligatureList;\n var actionIndex = entry.action;\n var last = false;\n var ligatureIndex = 0;\n var codePoints = [];\n var ligatureGlyphs = [];\n\n while (!last) {\n var _codePoints;\n\n var componentGlyph = this.ligatureStack.pop();\n\n (_codePoints = codePoints).unshift.apply(_codePoints, this.glyphs[componentGlyph].codePoints);\n\n var action = actions.getItem(actionIndex++);\n last = !!(action & LAST_MASK);\n var store = !!(action & STORE_MASK);\n var offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\n\n offset += this.glyphs[componentGlyph].id;\n var component = components.getItem(offset);\n ligatureIndex += component;\n\n if (last || store) {\n var ligatureEntry = ligatureList.getItem(ligatureIndex);\n this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\n ligatureGlyphs.push(componentGlyph);\n ligatureIndex = 0;\n codePoints = [];\n } else {\n this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\n }\n } // Put ligature glyph indexes back on the stack\n\n\n (_this$ligatureStack = this.ligatureStack).push.apply(_this$ligatureStack, ligatureGlyphs);\n }\n };\n\n _proto21.processNoncontextualSubstitutions = function processNoncontextualSubstitutions(subtable, glyphs, index) {\n var lookupTable = new AATLookupTable(subtable.table.lookupTable);\n\n for (index = 0; index < glyphs.length; index++) {\n var glyph = glyphs[index];\n\n if (glyph.id !== 0xffff) {\n var gid = lookupTable.lookup(glyph.id);\n\n if (gid) {\n // 0 means do nothing\n glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n }\n };\n\n _proto21._insertGlyphs = function _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\n var _this$glyphs;\n\n var insertions = [];\n\n while (count--) {\n var gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\n insertions.push(this.font.getGlyph(gid));\n }\n\n if (!isBefore) {\n glyphIndex++;\n }\n\n (_this$glyphs = this.glyphs).splice.apply(_this$glyphs, [glyphIndex, 0].concat(insertions));\n };\n\n _proto21.processGlyphInsertion = function processGlyphInsertion(glyph, entry, index) {\n if (entry.flags & SET_MARK) {\n this.markedIndex = index;\n }\n\n if (entry.markedInsertIndex !== 0xffff) {\n var count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\n var isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\n\n this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\n }\n\n if (entry.currentInsertIndex !== 0xffff) {\n var _count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\n\n var _isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\n\n this._insertGlyphs(index, entry.currentInsertIndex, _count, _isBefore);\n }\n };\n\n _proto21.getSupportedFeatures = function getSupportedFeatures() {\n var features = [];\n\n for (var _iterator27 = _createForOfIteratorHelperLoose(this.morx.chains), _step27; !(_step27 = _iterator27()).done;) {\n var chain = _step27.value;\n\n for (var _iterator28 = _createForOfIteratorHelperLoose(chain.features), _step28; !(_step28 = _iterator28()).done;) {\n var feature = _step28.value;\n features.push([feature.featureType, feature.featureSetting]);\n }\n }\n\n return features;\n };\n\n _proto21.generateInputs = function generateInputs(gid) {\n if (!this.inputCache) {\n this.generateInputCache();\n }\n\n return this.inputCache[gid] || [];\n };\n\n _proto21.generateInputCache = function generateInputCache() {\n this.inputCache = {};\n\n for (var _iterator29 = _createForOfIteratorHelperLoose(this.morx.chains), _step29; !(_step29 = _iterator29()).done;) {\n var chain = _step29.value;\n var flags = chain.defaultFlags;\n\n for (var _iterator30 = _createForOfIteratorHelperLoose(chain.subtables), _step30; !(_step30 = _iterator30()).done;) {\n var subtable = _step30.value;\n\n if (subtable.subFeatureFlags & flags) {\n this.generateInputsForSubtable(subtable);\n }\n }\n }\n };\n\n _proto21.generateInputsForSubtable = function generateInputsForSubtable(subtable) {\n var _this3 = this;\n\n // Currently, only supporting ligature subtables.\n if (subtable.type !== 2) {\n return;\n }\n\n var reverse = !!(subtable.coverage & REVERSE_DIRECTION);\n\n if (reverse) {\n throw new Error('Reverse subtable, not supported.');\n }\n\n this.subtable = subtable;\n this.ligatureStack = [];\n var stateMachine = this.getStateMachine(subtable);\n var process = this.getProcessor();\n var input = [];\n var stack = [];\n this.glyphs = [];\n stateMachine.traverse({\n enter: function enter(glyph, entry) {\n var glyphs = _this3.glyphs;\n stack.push({\n glyphs: glyphs.slice(),\n ligatureStack: _this3.ligatureStack.slice()\n }); // Add glyph to input and glyphs to process.\n\n var g = _this3.font.getGlyph(glyph);\n\n input.push(g);\n glyphs.push(input[input.length - 1]); // Process ligature substitution\n\n process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); // Add input to result if only one matching (non-deleted) glyph remains.\n\n var count = 0;\n var found = 0;\n\n for (var i = 0; i < glyphs.length && count <= 1; i++) {\n if (glyphs[i].id !== 0xffff) {\n count++;\n found = glyphs[i].id;\n }\n }\n\n if (count === 1) {\n var result = input.map(function (g) {\n return g.id;\n });\n var _cache = _this3.inputCache[found];\n\n if (_cache) {\n _cache.push(result);\n } else {\n _this3.inputCache[found] = [result];\n }\n }\n },\n exit: function exit() {\n var _stack$pop = stack.pop();\n\n _this3.glyphs = _stack$pop.glyphs;\n _this3.ligatureStack = _stack$pop.ligatureStack;\n input.pop();\n }\n });\n };\n\n return AATMorxProcessor;\n}(), _applyDecoratedDescriptor(_class$2.prototype, \"getStateMachine\", [cache], Object.getOwnPropertyDescriptor(_class$2.prototype, \"getStateMachine\"), _class$2.prototype), _class$2); // reverse the glyphs inside those ranges if specified\n// ranges are in [offset, length] format\n\nfunction swap(glyphs, rangeA, rangeB, reverseA, reverseB) {\n if (reverseA === void 0) {\n reverseA = false;\n }\n\n if (reverseB === void 0) {\n reverseB = false;\n }\n\n var end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\n\n if (reverseB) {\n end.reverse();\n }\n\n var start = glyphs.splice.apply(glyphs, [rangeA[0], rangeA[1]].concat(end));\n\n if (reverseA) {\n start.reverse();\n }\n\n glyphs.splice.apply(glyphs, [rangeB[0] - (rangeA[1] - 1), 0].concat(start));\n return glyphs;\n}\n\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\n switch (verb) {\n case 0:\n // no change\n return glyphs;\n\n case 1:\n // Ax => xA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\n\n case 2:\n // xD => Dx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\n\n case 3:\n // AxD => DxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\n\n case 4:\n // ABx => xAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\n\n case 5:\n // ABx => xBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\n\n case 6:\n // xCD => CDx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\n\n case 7:\n // xCD => DCx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\n\n case 8:\n // AxCD => CDxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\n\n case 9:\n // AxCD => DCxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\n\n case 10:\n // ABxD => DxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\n\n case 11:\n // ABxD => DxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\n\n case 12:\n // ABxCD => CDxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\n\n case 13:\n // ABxCD => CDxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\n\n case 14:\n // ABxCD => DCxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\n\n case 15:\n // ABxCD => DCxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\n\n default:\n throw new Error(\"Unknown verb: \".concat(verb));\n }\n}\n\nvar AATLayoutEngine = /*#__PURE__*/function () {\n function AATLayoutEngine(font) {\n this.font = font;\n this.morxProcessor = new AATMorxProcessor(font);\n this.fallbackPosition = false;\n }\n\n var _proto22 = AATLayoutEngine.prototype;\n\n _proto22.substitute = function substitute(glyphRun) {\n // AAT expects the glyphs to be in visual order prior to morx processing,\n // so reverse the glyphs if the script is right-to-left.\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n }\n\n this.morxProcessor.process(glyphRun.glyphs, mapOTToAAT(glyphRun.features));\n };\n\n _proto22.getAvailableFeatures = function getAvailableFeatures(script, language) {\n return mapAATToOT(this.morxProcessor.getSupportedFeatures());\n };\n\n _proto22.stringsForGlyph = function stringsForGlyph(gid) {\n var glyphStrings = this.morxProcessor.generateInputs(gid);\n var result = new Set();\n\n for (var _iterator31 = _createForOfIteratorHelperLoose(glyphStrings), _step31; !(_step31 = _iterator31()).done;) {\n var glyphs = _step31.value;\n\n this._addStrings(glyphs, 0, result, '');\n }\n\n return result;\n };\n\n _proto22._addStrings = function _addStrings(glyphs, index, strings, string) {\n var codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\n\n for (var _iterator32 = _createForOfIteratorHelperLoose(codePoints), _step32; !(_step32 = _iterator32()).done;) {\n var codePoint = _step32.value;\n var s = string + String.fromCodePoint(codePoint);\n\n if (index < glyphs.length - 1) {\n this._addStrings(glyphs, index + 1, strings, s);\n } else {\n strings.add(s);\n }\n }\n };\n\n return AATLayoutEngine;\n}();\n/**\r\n * ShapingPlans are used by the OpenType shapers to store which\r\n * features should by applied, and in what order to apply them.\r\n * The features are applied in groups called stages. A feature\r\n * can be applied globally to all glyphs, or locally to only\r\n * specific glyphs.\r\n *\r\n * @private\r\n */\n\n\nvar ShapingPlan = /*#__PURE__*/function () {\n function ShapingPlan(font, script, direction) {\n this.font = font;\n this.script = script;\n this.direction = direction;\n this.stages = [];\n this.globalFeatures = {};\n this.allFeatures = {};\n }\n /**\r\n * Adds the given features to the last stage.\r\n * Ignores features that have already been applied.\r\n */\n\n\n var _proto23 = ShapingPlan.prototype;\n\n _proto23._addFeatures = function _addFeatures(features, global) {\n var stageIndex = this.stages.length - 1;\n var stage = this.stages[stageIndex];\n\n for (var _iterator33 = _createForOfIteratorHelperLoose(features), _step33; !(_step33 = _iterator33()).done;) {\n var feature = _step33.value;\n\n if (this.allFeatures[feature] == null) {\n stage.push(feature);\n this.allFeatures[feature] = stageIndex;\n\n if (global) {\n this.globalFeatures[feature] = true;\n }\n }\n }\n }\n /**\r\n * Add features to the last stage\r\n */\n ;\n\n _proto23.add = function add(arg, global) {\n if (global === void 0) {\n global = true;\n }\n\n if (this.stages.length === 0) {\n this.stages.push([]);\n }\n\n if (typeof arg === 'string') {\n arg = [arg];\n }\n\n if (Array.isArray(arg)) {\n this._addFeatures(arg, global);\n } else if (typeof arg === 'object') {\n this._addFeatures(arg.global || [], true);\n\n this._addFeatures(arg.local || [], false);\n } else {\n throw new Error(\"Unsupported argument to ShapingPlan#add\");\n }\n }\n /**\r\n * Add a new stage\r\n */\n ;\n\n _proto23.addStage = function addStage(arg, global) {\n if (typeof arg === 'function') {\n this.stages.push(arg, []);\n } else {\n this.stages.push([]);\n this.add(arg, global);\n }\n };\n\n _proto23.setFeatureOverrides = function setFeatureOverrides(features) {\n if (Array.isArray(features)) {\n this.add(features);\n } else if (typeof features === 'object') {\n for (var tag in features) {\n if (features[tag]) {\n this.add(tag);\n } else if (this.allFeatures[tag] != null) {\n var stage = this.stages[this.allFeatures[tag]];\n stage.splice(stage.indexOf(tag), 1);\n delete this.allFeatures[tag];\n delete this.globalFeatures[tag];\n }\n }\n }\n }\n /**\r\n * Assigns the global features to the given glyphs\r\n */\n ;\n\n _proto23.assignGlobalFeatures = function assignGlobalFeatures(glyphs) {\n for (var _iterator34 = _createForOfIteratorHelperLoose(glyphs), _step34; !(_step34 = _iterator34()).done;) {\n var glyph = _step34.value;\n\n for (var feature in this.globalFeatures) {\n glyph.features[feature] = true;\n }\n }\n }\n /**\r\n * Executes the planned stages using the given OTProcessor\r\n */\n ;\n\n _proto23.process = function process(processor, glyphs, positions) {\n for (var _iterator35 = _createForOfIteratorHelperLoose(this.stages), _step35; !(_step35 = _iterator35()).done;) {\n var stage = _step35.value;\n\n if (typeof stage === 'function') {\n if (!positions) {\n stage(this.font, glyphs, this);\n }\n } else if (stage.length > 0) {\n processor.applyFeatures(stage, glyphs, positions);\n }\n }\n };\n\n return ShapingPlan;\n}();\n\nvar VARIATION_FEATURES = ['rvrn'];\nvar COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\nvar FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\nvar HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\nvar DIRECTIONAL_FEATURES = {\n ltr: ['ltra', 'ltrm'],\n rtl: ['rtla', 'rtlm']\n};\n\nvar DefaultShaper = /*#__PURE__*/function () {\n function DefaultShaper() {}\n\n DefaultShaper.plan = function plan(_plan, glyphs, features) {\n // Plan the features we want to apply\n this.planPreprocessing(_plan);\n this.planFeatures(_plan);\n this.planPostprocessing(_plan, features); // Assign the global features to all the glyphs\n\n _plan.assignGlobalFeatures(glyphs); // Assign local features to glyphs\n\n\n this.assignFeatures(_plan, glyphs);\n };\n\n DefaultShaper.planPreprocessing = function planPreprocessing(plan) {\n plan.add({\n global: [].concat(VARIATION_FEATURES, DIRECTIONAL_FEATURES[plan.direction]),\n local: FRACTIONAL_FEATURES\n });\n };\n\n DefaultShaper.planFeatures = function planFeatures(plan) {// Do nothing by default. Let subclasses override this.\n };\n\n DefaultShaper.planPostprocessing = function planPostprocessing(plan, userFeatures) {\n plan.add([].concat(COMMON_FEATURES, HORIZONTAL_FEATURES));\n plan.setFeatureOverrides(userFeatures);\n };\n\n DefaultShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n // Enable contextual fractions\n for (var i = 0; i < glyphs.length; i++) {\n var glyph = glyphs[i];\n\n if (glyph.codePoints[0] === 0x2044) {\n // fraction slash\n var start = i;\n var end = i + 1; // Apply numerator\n\n while (start > 0 && unicode.isDigit(glyphs[start - 1].codePoints[0])) {\n glyphs[start - 1].features.numr = true;\n glyphs[start - 1].features.frac = true;\n start--;\n } // Apply denominator\n\n\n while (end < glyphs.length && unicode.isDigit(glyphs[end].codePoints[0])) {\n glyphs[end].features.dnom = true;\n glyphs[end].features.frac = true;\n end++;\n } // Apply fraction slash\n\n\n glyph.features.frac = true;\n i = end - 1;\n }\n }\n };\n\n return DefaultShaper;\n}();\n\n_defineProperty(DefaultShaper, \"zeroMarkWidths\", 'AFTER_GPOS');\n\nvar trie = new UnicodeTrie(Buffer(\"APABAAAAAAAAOAAAAf0BAv7tmi1MxDAUx7vtvjhAgcDgkEgEAnmXEBIMCYaEcygEiqBQ4FAkCE4ikUgMiiBJSAgSiUQSDMn9L9eSl6bddddug9t7yS/trevre+3r27pcNxZiG+yCfdCVv/9LeQxOwRm4AJegD27ALbgD9+ABPJF+z+BN/h7yDj5k/VOWX6SdmU5+wLWknggxDxaS8u0qiiX4uiz9XamQ3wzDMAzDMAzDMAzDVI/h959V/v7BMAzDMAzDMLlyNTNiMSdewVxbiA44B4/guz1qW58VYlMI0WsJ0W+N6kXw0spvPtdwhtkwnGM6uLaV4Xyzg3v3PM9DPfQ/sOg4xPWjipy31P8LTqbU304c/cLCUmWJLNB2Uz2U1KTeRKNmKHVMfbJC+/0loTZRH/W5cvEvBJPMbREkWt3FD1NcqXZBSpuE2Ad0PBehPtNrPtIEdYP+hiRt/V1jIiE69X4NT/uVZI3PUHE9bm5M7ePGdZWy951v7Nn6j8v1WWKP3mt6ttnsigx6VN7Vc0VomSSGqW2mGNP1muZPl7LfjNUaKNFtDGVf2fvE9O7VlBS5j333c5p/eeoOqcs1R/hIqDWLJ7TTlksirVT1SI7l8k4Yp+g3jafGcrU1RM6l9th80XOpnlN97bDNY4i4s61B0Si/ipa0uHMl6zqEjlFfCZm/TM8KmzQDjmuTAQ==\",\"base64\"));\nvar FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\nvar ShapingClasses = {\n Non_Joining: 0,\n Left_Joining: 1,\n Right_Joining: 2,\n Dual_Joining: 3,\n Join_Causing: 3,\n ALAPH: 4,\n 'DALATH RISH': 5,\n Transparent: 6\n};\nvar ISOL = 'isol';\nvar FINA = 'fina';\nvar FIN2 = 'fin2';\nvar FIN3 = 'fin3';\nvar MEDI = 'medi';\nvar MED2 = 'med2';\nvar INIT = 'init';\nvar NONE = null; // Each entry is [prevAction, curAction, nextState]\n\nvar STATE_TABLE = [// Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH\n// State 0: prev was U, not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 6]], // State 1: prev was R or ISOL/ALAPH, not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN2, 5], [NONE, ISOL, 6]], // State 2: prev was D/L in ISOL form, willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [INIT, FINA, 1], [INIT, FINA, 3], [INIT, FINA, 4], [INIT, FINA, 6]], // State 3: prev was D in FINA form, willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [MEDI, FINA, 1], [MEDI, FINA, 3], [MEDI, FINA, 4], [MEDI, FINA, 6]], // State 4: prev was FINA ALAPH, not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [MED2, ISOL, 1], [MED2, ISOL, 2], [MED2, FIN2, 5], [MED2, ISOL, 6]], // State 5: prev was FIN2/FIN3 ALAPH, not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [ISOL, ISOL, 1], [ISOL, ISOL, 2], [ISOL, FIN2, 5], [ISOL, ISOL, 6]], // State 6: prev was DALATH/RISH, not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN3, 5], [NONE, ISOL, 6]]];\n/**\r\n * This is a shaper for Arabic, and other cursive scripts.\r\n * It uses data from ArabicShaping.txt in the Unicode database,\r\n * compiled to a UnicodeTrie by generate-data.coffee.\r\n *\r\n * The shaping state machine was ported from Harfbuzz.\r\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\r\n */\n\nvar ArabicShaper = /*#__PURE__*/function (_DefaultShaper) {\n _inheritsLoose(ArabicShaper, _DefaultShaper);\n\n function ArabicShaper() {\n return _DefaultShaper.apply(this, arguments) || this;\n }\n\n ArabicShaper.planFeatures = function planFeatures(plan) {\n plan.add(['ccmp', 'locl']);\n\n for (var i = 0; i < FEATURES.length; i++) {\n var feature = FEATURES[i];\n plan.addStage(feature, false);\n }\n\n plan.addStage('mset');\n };\n\n ArabicShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n _DefaultShaper.assignFeatures.call(this, plan, glyphs);\n\n var prev = -1;\n var state = 0;\n var actions = []; // Apply the state machine to map glyphs to features\n\n for (var i = 0; i < glyphs.length; i++) {\n var curAction = void 0,\n prevAction = void 0;\n var glyph = glyphs[i];\n var type = getShapingClass(glyph.codePoints[0]);\n\n if (type === ShapingClasses.Transparent) {\n actions[i] = NONE;\n continue;\n }\n\n var _STATE_TABLE$state$ty = STATE_TABLE[state][type];\n prevAction = _STATE_TABLE$state$ty[0];\n curAction = _STATE_TABLE$state$ty[1];\n state = _STATE_TABLE$state$ty[2];\n\n if (prevAction !== NONE && prev !== -1) {\n actions[prev] = prevAction;\n }\n\n actions[i] = curAction;\n prev = i;\n } // Apply the chosen features to their respective glyphs\n\n\n for (var index = 0; index < glyphs.length; index++) {\n var feature = void 0;\n var glyph = glyphs[index];\n\n if (feature = actions[index]) {\n glyph.features[feature] = true;\n }\n }\n };\n\n return ArabicShaper;\n}(DefaultShaper);\n\nfunction getShapingClass(codePoint) {\n var res = trie.get(codePoint);\n\n if (res) {\n return res - 1;\n }\n\n var category = unicode.getCategory(codePoint);\n\n if (category === 'Mn' || category === 'Me' || category === 'Cf') {\n return ShapingClasses.Transparent;\n }\n\n return ShapingClasses.Non_Joining;\n}\n\nvar GlyphIterator = /*#__PURE__*/function () {\n function GlyphIterator(glyphs, options) {\n this.glyphs = glyphs;\n this.reset(options);\n }\n\n var _proto24 = GlyphIterator.prototype;\n\n _proto24.reset = function reset(options, index) {\n if (options === void 0) {\n options = {};\n }\n\n if (index === void 0) {\n index = 0;\n }\n\n this.options = options;\n this.flags = options.flags || {};\n this.markAttachmentType = options.markAttachmentType || 0;\n this.index = index;\n };\n\n _proto24.shouldIgnore = function shouldIgnore(glyph) {\n return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType;\n };\n\n _proto24.move = function move(dir) {\n this.index += dir;\n\n while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\n this.index += dir;\n }\n\n if (0 > this.index || this.index >= this.glyphs.length) {\n return null;\n }\n\n return this.glyphs[this.index];\n };\n\n _proto24.next = function next() {\n return this.move(+1);\n };\n\n _proto24.prev = function prev() {\n return this.move(-1);\n };\n\n _proto24.peek = function peek(count) {\n if (count === void 0) {\n count = 1;\n }\n\n var idx = this.index;\n var res = this.increment(count);\n this.index = idx;\n return res;\n };\n\n _proto24.peekIndex = function peekIndex(count) {\n if (count === void 0) {\n count = 1;\n }\n\n var idx = this.index;\n this.increment(count);\n var res = this.index;\n this.index = idx;\n return res;\n };\n\n _proto24.increment = function increment(count) {\n if (count === void 0) {\n count = 1;\n }\n\n var dir = count < 0 ? -1 : 1;\n count = Math.abs(count);\n\n while (count--) {\n this.move(dir);\n }\n\n return this.glyphs[this.index];\n };\n\n _createClass(GlyphIterator, [{\n key: \"cur\",\n get: function get() {\n return this.glyphs[this.index] || null;\n }\n }]);\n\n return GlyphIterator;\n}();\n\nvar DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\n\nvar OTProcessor = /*#__PURE__*/function () {\n function OTProcessor(font, table) {\n this.font = font;\n this.table = table;\n this.script = null;\n this.scriptTag = null;\n this.language = null;\n this.languageTag = null;\n this.features = {};\n this.lookups = {}; // Setup variation substitutions\n\n this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; // initialize to default script + language\n\n this.selectScript(); // current context (set by applyFeatures)\n\n this.glyphs = [];\n this.positions = []; // only used by GPOS\n\n this.ligatureID = 1;\n this.currentFeature = null;\n }\n\n var _proto25 = OTProcessor.prototype;\n\n _proto25.findScript = function findScript(script) {\n if (this.table.scriptList == null) {\n return null;\n }\n\n if (!Array.isArray(script)) {\n script = [script];\n }\n\n for (var _iterator36 = _createForOfIteratorHelperLoose(script), _step36; !(_step36 = _iterator36()).done;) {\n var s = _step36.value;\n\n for (var _iterator37 = _createForOfIteratorHelperLoose(this.table.scriptList), _step37; !(_step37 = _iterator37()).done;) {\n var entry = _step37.value;\n\n if (entry.tag === s) {\n return entry;\n }\n }\n }\n\n return null;\n };\n\n _proto25.selectScript = function selectScript(script, language, direction$1) {\n var changed = false;\n var entry;\n\n if (!this.script || script !== this.scriptTag) {\n entry = this.findScript(script);\n\n if (!entry) {\n entry = this.findScript(DEFAULT_SCRIPTS);\n }\n\n if (!entry) {\n return this.scriptTag;\n }\n\n this.scriptTag = entry.tag;\n this.script = entry.script;\n this.language = null;\n this.languageTag = null;\n changed = true;\n }\n\n if (!direction$1 || direction$1 !== this.direction) {\n this.direction = direction$1 || direction(script);\n }\n\n if (language && language.length < 4) {\n language += ' '.repeat(4 - language.length);\n }\n\n if (!language || language !== this.languageTag) {\n this.language = null;\n\n for (var _iterator38 = _createForOfIteratorHelperLoose(this.script.langSysRecords), _step38; !(_step38 = _iterator38()).done;) {\n var lang = _step38.value;\n\n if (lang.tag === language) {\n this.language = lang.langSys;\n this.languageTag = lang.tag;\n break;\n }\n }\n\n if (!this.language) {\n this.language = this.script.defaultLangSys;\n this.languageTag = null;\n }\n\n changed = true;\n } // Build a feature lookup table\n\n\n if (changed) {\n this.features = {};\n\n if (this.language) {\n for (var _iterator39 = _createForOfIteratorHelperLoose(this.language.featureIndexes), _step39; !(_step39 = _iterator39()).done;) {\n var featureIndex = _step39.value;\n var record = this.table.featureList[featureIndex];\n var substituteFeature = this.substituteFeatureForVariations(featureIndex);\n this.features[record.tag] = substituteFeature || record.feature;\n }\n }\n }\n\n return this.scriptTag;\n };\n\n _proto25.lookupsForFeatures = function lookupsForFeatures(userFeatures, exclude) {\n if (userFeatures === void 0) {\n userFeatures = [];\n }\n\n var lookups = [];\n\n for (var _iterator40 = _createForOfIteratorHelperLoose(userFeatures), _step40; !(_step40 = _iterator40()).done;) {\n var tag = _step40.value;\n var feature = this.features[tag];\n\n if (!feature) {\n continue;\n }\n\n for (var _iterator41 = _createForOfIteratorHelperLoose(feature.lookupListIndexes), _step41; !(_step41 = _iterator41()).done;) {\n var lookupIndex = _step41.value;\n\n if (exclude && exclude.indexOf(lookupIndex) !== -1) {\n continue;\n }\n\n lookups.push({\n feature: tag,\n index: lookupIndex,\n lookup: this.table.lookupList.get(lookupIndex)\n });\n }\n }\n\n lookups.sort(function (a, b) {\n return a.index - b.index;\n });\n return lookups;\n };\n\n _proto25.substituteFeatureForVariations = function substituteFeatureForVariations(featureIndex) {\n if (this.variationsIndex === -1) {\n return null;\n }\n\n var record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\n var substitutions = record.featureTableSubstitution.substitutions;\n\n for (var _iterator42 = _createForOfIteratorHelperLoose(substitutions), _step42; !(_step42 = _iterator42()).done;) {\n var substitution = _step42.value;\n\n if (substitution.featureIndex === featureIndex) {\n return substitution.alternateFeatureTable;\n }\n }\n\n return null;\n };\n\n _proto25.findVariationsIndex = function findVariationsIndex(coords) {\n var variations = this.table.featureVariations;\n\n if (!variations) {\n return -1;\n }\n\n var records = variations.featureVariationRecords;\n\n for (var i = 0; i < records.length; i++) {\n var conditions = records[i].conditionSet.conditionTable;\n\n if (this.variationConditionsMatch(conditions, coords)) {\n return i;\n }\n }\n\n return -1;\n };\n\n _proto25.variationConditionsMatch = function variationConditionsMatch(conditions, coords) {\n return conditions.every(function (condition) {\n var coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\n return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\n });\n };\n\n _proto25.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {\n var lookups = this.lookupsForFeatures(userFeatures);\n this.applyLookups(lookups, glyphs, advances);\n };\n\n _proto25.applyLookups = function applyLookups(lookups, glyphs, positions) {\n this.glyphs = glyphs;\n this.positions = positions;\n this.glyphIterator = new GlyphIterator(glyphs);\n\n for (var _iterator43 = _createForOfIteratorHelperLoose(lookups), _step43; !(_step43 = _iterator43()).done;) {\n var _step43$value = _step43.value,\n feature = _step43$value.feature,\n lookup = _step43$value.lookup;\n this.currentFeature = feature;\n this.glyphIterator.reset(lookup.flags);\n\n while (this.glyphIterator.index < glyphs.length) {\n if (!(feature in this.glyphIterator.cur.features)) {\n this.glyphIterator.next();\n continue;\n }\n\n for (var _iterator44 = _createForOfIteratorHelperLoose(lookup.subTables), _step44; !(_step44 = _iterator44()).done;) {\n var table = _step44.value;\n var res = this.applyLookup(lookup.lookupType, table);\n\n if (res) {\n break;\n }\n }\n\n this.glyphIterator.next();\n }\n }\n };\n\n _proto25.applyLookup = function applyLookup(lookup, table) {\n throw new Error(\"applyLookup must be implemented by subclasses\");\n };\n\n _proto25.applyLookupList = function applyLookupList(lookupRecords) {\n var options = this.glyphIterator.options;\n var glyphIndex = this.glyphIterator.index;\n\n for (var _iterator45 = _createForOfIteratorHelperLoose(lookupRecords), _step45; !(_step45 = _iterator45()).done;) {\n var lookupRecord = _step45.value;\n // Reset flags and find glyph index for this lookup record\n this.glyphIterator.reset(options, glyphIndex);\n this.glyphIterator.increment(lookupRecord.sequenceIndex); // Get the lookup and setup flags for subtables\n\n var lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\n this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); // Apply lookup subtables until one matches\n\n for (var _iterator46 = _createForOfIteratorHelperLoose(lookup.subTables), _step46; !(_step46 = _iterator46()).done;) {\n var table = _step46.value;\n\n if (this.applyLookup(lookup.lookupType, table)) {\n break;\n }\n }\n }\n\n this.glyphIterator.reset(options, glyphIndex);\n return true;\n };\n\n _proto25.coverageIndex = function coverageIndex(coverage, glyph) {\n if (glyph == null) {\n glyph = this.glyphIterator.cur.id;\n }\n\n switch (coverage.version) {\n case 1:\n return coverage.glyphs.indexOf(glyph);\n\n case 2:\n for (var _iterator47 = _createForOfIteratorHelperLoose(coverage.rangeRecords), _step47; !(_step47 = _iterator47()).done;) {\n var range = _step47.value;\n\n if (range.start <= glyph && glyph <= range.end) {\n return range.startCoverageIndex + glyph - range.start;\n }\n }\n\n break;\n }\n\n return -1;\n };\n\n _proto25.match = function match(sequenceIndex, sequence, fn, matched) {\n var pos = this.glyphIterator.index;\n var glyph = this.glyphIterator.increment(sequenceIndex);\n var idx = 0;\n\n while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\n if (matched) {\n matched.push(this.glyphIterator.index);\n }\n\n idx++;\n glyph = this.glyphIterator.next();\n }\n\n this.glyphIterator.index = pos;\n\n if (idx < sequence.length) {\n return false;\n }\n\n return matched || true;\n };\n\n _proto25.sequenceMatches = function sequenceMatches(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, function (component, glyph) {\n return component === glyph.id;\n });\n };\n\n _proto25.sequenceMatchIndices = function sequenceMatchIndices(sequenceIndex, sequence) {\n var _this4 = this;\n\n return this.match(sequenceIndex, sequence, function (component, glyph) {\n // If the current feature doesn't apply to this glyph,\n if (!(_this4.currentFeature in glyph.features)) {\n return false;\n }\n\n return component === glyph.id;\n }, []);\n };\n\n _proto25.coverageSequenceMatches = function coverageSequenceMatches(sequenceIndex, sequence) {\n var _this5 = this;\n\n return this.match(sequenceIndex, sequence, function (coverage, glyph) {\n return _this5.coverageIndex(coverage, glyph.id) >= 0;\n });\n };\n\n _proto25.getClassID = function getClassID(glyph, classDef) {\n switch (classDef.version) {\n case 1:\n // Class array\n var i = glyph - classDef.startGlyph;\n\n if (i >= 0 && i < classDef.classValueArray.length) {\n return classDef.classValueArray[i];\n }\n\n break;\n\n case 2:\n for (var _iterator48 = _createForOfIteratorHelperLoose(classDef.classRangeRecord), _step48; !(_step48 = _iterator48()).done;) {\n var range = _step48.value;\n\n if (range.start <= glyph && glyph <= range.end) {\n return range.class;\n }\n }\n\n break;\n }\n\n return 0;\n };\n\n _proto25.classSequenceMatches = function classSequenceMatches(sequenceIndex, sequence, classDef) {\n var _this6 = this;\n\n return this.match(sequenceIndex, sequence, function (classID, glyph) {\n return classID === _this6.getClassID(glyph.id, classDef);\n });\n };\n\n _proto25.applyContext = function applyContext(table) {\n switch (table.version) {\n case 1:\n var index = this.coverageIndex(table.coverage);\n\n if (index === -1) {\n return false;\n }\n\n var set = table.ruleSets[index];\n\n for (var _iterator49 = _createForOfIteratorHelperLoose(set), _step49; !(_step49 = _iterator49()).done;) {\n var rule = _step49.value;\n\n if (this.sequenceMatches(1, rule.input)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n\n index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\n\n if (index === -1) {\n return false;\n }\n\n set = table.classSet[index];\n\n for (var _iterator50 = _createForOfIteratorHelperLoose(set), _step50; !(_step50 = _iterator50()).done;) {\n var _rule = _step50.value;\n\n if (this.classSequenceMatches(1, _rule.classes, table.classDef)) {\n return this.applyLookupList(_rule.lookupRecords);\n }\n }\n\n break;\n\n case 3:\n if (this.coverageSequenceMatches(0, table.coverages)) {\n return this.applyLookupList(table.lookupRecords);\n }\n\n break;\n }\n\n return false;\n };\n\n _proto25.applyChainingContext = function applyChainingContext(table) {\n switch (table.version) {\n case 1:\n var index = this.coverageIndex(table.coverage);\n\n if (index === -1) {\n return false;\n }\n\n var set = table.chainRuleSets[index];\n\n for (var _iterator51 = _createForOfIteratorHelperLoose(set), _step51; !(_step51 = _iterator51()).done;) {\n var rule = _step51.value;\n\n if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n\n index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\n var rules = table.chainClassSet[index];\n\n if (!rules) {\n return false;\n }\n\n for (var _iterator52 = _createForOfIteratorHelperLoose(rules), _step52; !(_step52 = _iterator52()).done;) {\n var _rule2 = _step52.value;\n\n if (this.classSequenceMatches(-_rule2.backtrack.length, _rule2.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, _rule2.input, table.inputClassDef) && this.classSequenceMatches(1 + _rule2.input.length, _rule2.lookahead, table.lookaheadClassDef)) {\n return this.applyLookupList(_rule2.lookupRecords);\n }\n }\n\n break;\n\n case 3:\n if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\n return this.applyLookupList(table.lookupRecords);\n }\n\n break;\n }\n\n return false;\n };\n\n return OTProcessor;\n}();\n\nvar GlyphInfo = /*#__PURE__*/function () {\n function GlyphInfo(font, id, codePoints, features) {\n if (codePoints === void 0) {\n codePoints = [];\n }\n\n this._font = font;\n this.codePoints = codePoints;\n this.id = id;\n this.features = {};\n\n if (Array.isArray(features)) {\n for (var i = 0; i < features.length; i++) {\n var feature = features[i];\n this.features[feature] = true;\n }\n } else if (typeof features === 'object') {\n Object.assign(this.features, features);\n }\n\n this.ligatureID = null;\n this.ligatureComponent = null;\n this.isLigated = false;\n this.cursiveAttachment = null;\n this.markAttachment = null;\n this.shaperInfo = null;\n this.substituted = false;\n this.isMultiplied = false;\n }\n\n var _proto26 = GlyphInfo.prototype;\n\n _proto26.copy = function copy() {\n return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\n };\n\n _createClass(GlyphInfo, [{\n key: \"id\",\n get: function get() {\n return this._id;\n },\n set: function set(id) {\n this._id = id;\n this.substituted = true;\n var GDEF = this._font.GDEF;\n\n if (GDEF && GDEF.glyphClassDef) {\n // TODO: clean this up\n var classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\n this.isBase = classID === 1;\n this.isLigature = classID === 2;\n this.isMark = classID === 3;\n this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\n } else {\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n this.isBase = !this.isMark;\n this.isLigature = this.codePoints.length > 1;\n this.markAttachmentType = 0;\n }\n }\n }]);\n\n return GlyphInfo;\n}();\n/**\r\n * This is a shaper for the Hangul script, used by the Korean language.\r\n * It does the following:\r\n * - decompose if unsupported by the font:\r\n * <LV> -> <L,V>\r\n * <LVT> -> <L,V,T>\r\n * <LV,T> -> <L,V,T>\r\n *\r\n * - compose if supported by the font:\r\n * <L,V> -> <LV>\r\n * <L,V,T> -> <LVT>\r\n * <LV,T> -> <LVT>\r\n *\r\n * - reorder tone marks (S is any valid syllable):\r\n * <S, M> -> <M, S>\r\n *\r\n * - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\r\n *\r\n * This logic is based on the following documents:\r\n * - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\r\n * - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\r\n */\n\n\nvar HangulShaper = /*#__PURE__*/function (_DefaultShaper2) {\n _inheritsLoose(HangulShaper, _DefaultShaper2);\n\n function HangulShaper() {\n return _DefaultShaper2.apply(this, arguments) || this;\n }\n\n HangulShaper.planFeatures = function planFeatures(plan) {\n plan.add(['ljmo', 'vjmo', 'tjmo'], false);\n };\n\n HangulShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n var state = 0;\n var i = 0;\n\n while (i < glyphs.length) {\n var action = void 0;\n var glyph = glyphs[i];\n var code = glyph.codePoints[0];\n var type = getType(code);\n var _STATE_TABLE$1$state$ = STATE_TABLE$1[state][type];\n action = _STATE_TABLE$1$state$[0];\n state = _STATE_TABLE$1$state$[1];\n\n switch (action) {\n case DECOMPOSE:\n // Decompose the composed syllable if it is not supported by the font.\n if (!plan.font.hasGlyphForCodePoint(code)) {\n i = decompose(glyphs, i, plan.font);\n }\n\n break;\n\n case COMPOSE:\n // Found a decomposed syllable. Try to compose if supported by the font.\n i = compose(glyphs, i, plan.font);\n break;\n\n case TONE_MARK:\n // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\n reorderToneMark(glyphs, i, plan.font);\n break;\n\n case INVALID:\n // Tone mark has no valid syllable to attach to, so insert a dotted circle\n i = insertDottedCircle(glyphs, i, plan.font);\n break;\n }\n\n i++;\n }\n };\n\n return HangulShaper;\n}(DefaultShaper);\n\n_defineProperty(HangulShaper, \"zeroMarkWidths\", 'NONE');\n\nvar HANGUL_BASE = 0xac00;\nvar HANGUL_END = 0xd7a4;\nvar HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\nvar L_BASE = 0x1100; // lead\n\nvar V_BASE = 0x1161; // vowel\n\nvar T_BASE = 0x11a7; // trail\n\nvar L_COUNT = 19;\nvar V_COUNT = 21;\nvar T_COUNT = 28;\nvar L_END = L_BASE + L_COUNT - 1;\nvar V_END = V_BASE + V_COUNT - 1;\nvar T_END = T_BASE + T_COUNT - 1;\nvar DOTTED_CIRCLE = 0x25cc;\n\nvar isL = function isL(code) {\n return 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\n};\n\nvar isV = function isV(code) {\n return 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\n};\n\nvar isT = function isT(code) {\n return 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\n};\n\nvar isTone = function isTone(code) {\n return 0x302e <= code && code <= 0x302f;\n};\n\nvar isLVT = function isLVT(code) {\n return HANGUL_BASE <= code && code <= HANGUL_END;\n};\n\nvar isLV = function isLV(code) {\n return code - HANGUL_BASE < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\n};\n\nvar isCombiningL = function isCombiningL(code) {\n return L_BASE <= code && code <= L_END;\n};\n\nvar isCombiningV = function isCombiningV(code) {\n return V_BASE <= code && code <= V_END;\n};\n\nvar isCombiningT = function isCombiningT(code) {\n return 1 <= code && code <= T_END;\n}; // Character categories\n\n\nvar X = 0; // Other character\n\nvar L = 1; // Leading consonant\n\nvar V = 2; // Medial vowel\n\nvar T = 3; // Trailing consonant\n\nvar LV = 4; // Composed <LV> syllable\n\nvar LVT = 5; // Composed <LVT> syllable\n\nvar M = 6; // Tone mark\n// This function classifies a character using the above categories.\n\nfunction getType(code) {\n if (isL(code)) {\n return L;\n }\n\n if (isV(code)) {\n return V;\n }\n\n if (isT(code)) {\n return T;\n }\n\n if (isLV(code)) {\n return LV;\n }\n\n if (isLVT(code)) {\n return LVT;\n }\n\n if (isTone(code)) {\n return M;\n }\n\n return X;\n} // State machine actions\n\n\nvar NO_ACTION = 0;\nvar DECOMPOSE = 1;\nvar COMPOSE = 2;\nvar TONE_MARK = 4;\nvar INVALID = 5; // Build a state machine that accepts valid syllables, and applies actions along the way.\n// The logic this is implementing is documented at the top of the file.\n\nvar STATE_TABLE$1 = [// X L V T LV LVT M\n// State 0: start state\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]], // State 1: <L>\n[[NO_ACTION, 0], [NO_ACTION, 1], [COMPOSE, 2], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]], // State 2: <L,V> or <LV>\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [COMPOSE, 3], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]], // State 3: <L,V,T> or <LVT>\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]]];\n\nfunction getGlyph(font, code, features) {\n return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\n}\n\nfunction decompose(glyphs, i, font) {\n var glyph = glyphs[i];\n var code = glyph.codePoints[0];\n var s = code - HANGUL_BASE;\n var t = T_BASE + s % T_COUNT;\n s = s / T_COUNT | 0;\n var l = L_BASE + s / V_COUNT | 0;\n var v = V_BASE + s % V_COUNT; // Don't decompose if all of the components are not available\n\n if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== T_BASE && !font.hasGlyphForCodePoint(t)) {\n return i;\n } // Replace the current glyph with decomposed L, V, and T glyphs,\n // and apply the proper OpenType features to each component.\n\n\n var ljmo = getGlyph(font, l, glyph.features);\n ljmo.features.ljmo = true;\n var vjmo = getGlyph(font, v, glyph.features);\n vjmo.features.vjmo = true;\n var insert = [ljmo, vjmo];\n\n if (t > T_BASE) {\n var tjmo = getGlyph(font, t, glyph.features);\n tjmo.features.tjmo = true;\n insert.push(tjmo);\n }\n\n glyphs.splice.apply(glyphs, [i, 1].concat(insert));\n return i + insert.length - 1;\n}\n\nfunction compose(glyphs, i, font) {\n var glyph = glyphs[i];\n var code = glyphs[i].codePoints[0];\n var type = getType(code);\n var prev = glyphs[i - 1].codePoints[0];\n var prevType = getType(prev); // Figure out what type of syllable we're dealing with\n\n var lv, ljmo, vjmo, tjmo;\n\n if (prevType === LV && type === T) {\n // <LV,T>\n lv = prev;\n tjmo = glyph;\n } else {\n if (type === V) {\n // <L,V>\n ljmo = glyphs[i - 1];\n vjmo = glyph;\n } else {\n // <L,V,T>\n ljmo = glyphs[i - 2];\n vjmo = glyphs[i - 1];\n tjmo = glyph;\n }\n\n var l = ljmo.codePoints[0];\n var v = vjmo.codePoints[0]; // Make sure L and V are combining characters\n\n if (isCombiningL(l) && isCombiningV(v)) {\n lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\n }\n }\n\n var t = tjmo && tjmo.codePoints[0] || T_BASE;\n\n if (lv != null && (t === T_BASE || isCombiningT(t))) {\n var s = lv + (t - T_BASE); // Replace with a composed glyph if supported by the font,\n // otherwise apply the proper OpenType features to each component.\n\n if (font.hasGlyphForCodePoint(s)) {\n var del = prevType === V ? 3 : 2;\n glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\n return i - del + 1;\n }\n } // Didn't compose (either a non-combining component or unsupported by font).\n\n\n if (ljmo) {\n ljmo.features.ljmo = true;\n }\n\n if (vjmo) {\n vjmo.features.vjmo = true;\n }\n\n if (tjmo) {\n tjmo.features.tjmo = true;\n }\n\n if (prevType === LV) {\n // Sequence was originally <L,V>, which got combined earlier.\n // Either the T was non-combining, or the LVT glyph wasn't supported.\n // Decompose the glyph again and apply OT features.\n decompose(glyphs, i - 1, font);\n return i + 1;\n }\n\n return i;\n}\n\nfunction getLength(code) {\n switch (getType(code)) {\n case LV:\n case LVT:\n return 1;\n\n case V:\n return 2;\n\n case T:\n return 3;\n }\n}\n\nfunction reorderToneMark(glyphs, i, font) {\n var glyph = glyphs[i];\n var code = glyphs[i].codePoints[0]; // Move tone mark to the beginning of the previous syllable, unless it is zero width\n\n if (font.glyphForCodePoint(code).advanceWidth === 0) {\n return;\n }\n\n var prev = glyphs[i - 1].codePoints[0];\n var len = getLength(prev);\n glyphs.splice(i, 1);\n return glyphs.splice(i - len, 0, glyph);\n}\n\nfunction insertDottedCircle(glyphs, i, font) {\n var glyph = glyphs[i];\n var code = glyphs[i].codePoints[0];\n\n if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\n var dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features); // If the tone mark is zero width, insert the dotted circle before, otherwise after\n\n var idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\n glyphs.splice(idx, 0, dottedCircle);\n i++;\n }\n\n return i;\n}\n\nvar stateTable = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 14, 15, 16, 17], [0, 0, 0, 18, 19, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 28, 29, 30, 31, 32, 33, 0, 34, 0, 0, 35, 36, 0, 0, 37, 0], [0, 0, 0, 38, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 39, 0, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 12, 43, 0, 0, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0], [0, 0, 0, 45, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 55, 56, 57, 58, 0, 59, 0, 0, 60, 61, 0, 0, 62, 0], [0, 0, 0, 4, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 63, 64, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 63, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 0, 2, 16, 0], [0, 0, 0, 18, 65, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 0, 0], [0, 0, 0, 69, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 73, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 75, 0, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 25, 79, 0, 0, 0, 0], [0, 0, 0, 18, 19, 20, 74, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 81, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 18, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 89, 90, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 89, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 0, 0], [0, 0, 0, 94, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 96, 0, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 35, 100, 0, 0, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 102, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 28, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 110, 111, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 110, 0, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 0, 0], [0, 0, 0, 0, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 0, 0, 115, 116, 117, 118, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 39, 0, 122, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 124, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0], [0, 39, 0, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 47, 47, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 128, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 129, 130, 131, 132, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 135, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 136, 0, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 60, 140, 0, 0, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0], [0, 0, 0, 142, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 150, 151, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 150, 0, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 157, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 3, 4, 5, 159, 160, 8, 161, 0, 162, 0, 11, 12, 163, 0, 75, 16, 0], [0, 0, 0, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0], [0, 124, 64, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 124, 0, 0], [0, 0, 0, 0, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 172, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 75, 0, 176, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 178, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0], [0, 75, 0, 0, 0, 175, 179, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 180, 180, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 83, 83, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 182, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 183, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 191, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0], [0, 178, 90, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 178, 0, 0], [0, 0, 0, 0, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 198, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 96, 0, 202, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 204, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0], [0, 96, 0, 0, 0, 201, 205, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 206, 206, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 104, 104, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 208, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 209, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 217, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0], [0, 204, 111, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 204, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 223, 0, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 119, 225, 0, 0, 0, 0], [0, 0, 0, 115, 116, 117, 222, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 115, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 226, 64, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 226, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 39, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 44, 44, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 229, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 39, 0, 122, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 231, 231, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 130, 131, 132, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 131, 131, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 234, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 235, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 0, 0, 240, 241, 242, 243, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 136, 0, 247, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 249, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0], [0, 136, 0, 0, 0, 246, 250, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 251, 251, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 144, 144, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 253, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 254, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 262, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0], [0, 249, 151, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 249, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 158, 225, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 222, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 155, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 43, 266, 266, 8, 161, 0, 24, 0, 0, 12, 267, 0, 0, 0, 0], [0, 75, 0, 176, 43, 268, 268, 269, 161, 0, 24, 0, 0, 0, 267, 0, 75, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0], [0, 273, 274, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 273, 0, 0], [0, 0, 0, 40, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 121, 275, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 279, 0, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 173, 281, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 278, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 169, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 282, 90, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 282, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 80, 80, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 285, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 75, 0, 176, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 287, 287, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 185, 185, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 290, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 291, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 192, 281, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 278, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 189, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 76, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 175, 296, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 299, 0, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 199, 301, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 298, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 195, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 302, 111, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 302, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 96, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 101, 101, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 305, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 96, 0, 202, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 307, 307, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 211, 211, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 310, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 311, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 218, 301, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 298, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 215, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 97, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 201, 316, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 320, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 223, 0, 323, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 0, 0, 121, 324, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 325, 318, 326, 327, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 64, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 121, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0], [0, 0, 0, 0, 0, 329, 329, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 237, 237, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 332, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 333, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 337, 0, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 244, 339, 0, 0, 0, 0], [0, 0, 0, 240, 241, 242, 336, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 240, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 340, 151, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 340, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 136, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 141, 141, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 343, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 136, 0, 247, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 345, 345, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 256, 256, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 348, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 349, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 263, 339, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 336, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 260, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 137, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 246, 354, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 355, 90, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 355, 0, 0], [0, 0, 0, 0, 0, 356, 356, 269, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 357, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 366, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 40, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 372, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 279, 0, 375, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 0, 0, 175, 376, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 377, 370, 378, 379, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 90, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 175, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0], [0, 0, 0, 0, 0, 381, 381, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 293, 293, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 384, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 385, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 76, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 390, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 299, 0, 393, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 0, 0, 201, 394, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 395, 388, 396, 397, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 111, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 201, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0], [0, 0, 0, 0, 0, 399, 399, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 313, 313, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 402, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 403, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 97, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 407, 0, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 321, 409, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 406, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 0, 0, 317, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 410, 64, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 410, 0, 0], [0, 223, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 323, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 328, 409, 0, 0, 0, 0], [0, 0, 0, 325, 318, 326, 406, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 325, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0], [0, 0, 0, 0, 0, 411, 411, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 413, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 417, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 337, 0, 420, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 0, 0, 246, 421, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 422, 415, 423, 424, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 151, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 246, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0], [0, 0, 0, 0, 0, 426, 426, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 351, 351, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 429, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 430, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 137, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 434, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 180, 180, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 359, 359, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 437, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 438, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 443, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 367, 225, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 445, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 364, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 448, 0, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 373, 450, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 447, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 0, 0, 369, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 451, 90, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 451, 0, 0], [0, 279, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 375, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 380, 450, 0, 0, 0, 0], [0, 0, 0, 377, 370, 378, 447, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 377, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0], [0, 0, 0, 0, 0, 452, 452, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 454, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 457, 0, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 391, 459, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 456, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 0, 0, 387, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 460, 111, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 460, 0, 0], [0, 299, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 393, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 398, 459, 0, 0, 0, 0], [0, 0, 0, 395, 388, 396, 456, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 395, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0], [0, 0, 0, 0, 0, 461, 461, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 463, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 467, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 407, 0, 470, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 0, 0, 121, 471, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 472, 465, 473, 474, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0], [0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 479, 0, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 418, 481, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 478, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 0, 0, 414, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 482, 151, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 482, 0, 0], [0, 337, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 420, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 425, 481, 0, 0, 0, 0], [0, 0, 0, 422, 415, 423, 478, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 422, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0], [0, 0, 0, 0, 0, 483, 483, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 485, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 435, 225, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 445, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 432, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 486, 486, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 440, 440, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 489, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 490, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 497, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 0, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 0, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 502, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 448, 0, 505, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 0, 0, 175, 506, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 507, 500, 508, 509, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0], [0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 515, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 457, 0, 518, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 0, 0, 201, 519, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 520, 513, 521, 522, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0], [0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 527, 0, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 468, 529, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 526, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 0, 0, 464, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 530, 64, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 530, 0, 0], [0, 407, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 470, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 475, 529, 0, 0, 0, 0], [0, 0, 0, 472, 465, 473, 526, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 472, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0], [0, 0, 0, 0, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 534, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 479, 0, 537, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 0, 0, 246, 538, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 539, 532, 540, 541, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0], [0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0], [0, 0, 0, 0, 0, 544, 544, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 492, 492, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 547, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 548, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 274, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 368, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 553, 0, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 503, 555, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 552, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 0, 0, 499, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 556, 90, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 556, 0, 0], [0, 448, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 505, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 510, 555, 0, 0, 0, 0], [0, 0, 0, 507, 500, 508, 552, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 507, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 559, 0, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 516, 561, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 558, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 0, 0, 512, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 562, 111, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 562, 0, 0], [0, 457, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 518, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 523, 561, 0, 0, 0, 0], [0, 0, 0, 520, 513, 521, 558, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 520, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0], [0, 0, 0, 0, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 565, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 527, 0, 567, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 0, 0, 121, 568, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 569, 66, 570, 571, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 575, 0, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 535, 577, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 574, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 0, 0, 531, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 578, 151, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 578, 0, 0], [0, 479, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 537, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 542, 577, 0, 0, 0, 0], [0, 0, 0, 539, 532, 540, 574, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 539, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0], [0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0], [0, 0, 0, 0, 0, 579, 579, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 581, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 584, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 553, 0, 586, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 0, 0, 175, 587, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 588, 91, 589, 590, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 0, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 594, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 559, 0, 596, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 0, 0, 201, 597, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 598, 112, 599, 600, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 566, 165, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 67, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 0, 0, 563, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 527, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 567, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 572, 165, 0, 0, 0, 0], [0, 0, 0, 569, 66, 570, 67, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 569, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 605, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 575, 0, 607, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 0, 0, 246, 608, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 609, 152, 610, 611, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0], [0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 585, 194, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 92, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 0, 0, 582, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 553, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 586, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 591, 194, 0, 0, 0, 0], [0, 0, 0, 588, 91, 589, 92, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 588, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 595, 220, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 113, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 0, 0, 592, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 559, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 596, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 601, 220, 0, 0, 0, 0], [0, 0, 0, 598, 112, 599, 113, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 598, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 606, 265, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 153, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 0, 0, 603, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 575, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 607, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 612, 265, 0, 0, 0, 0], [0, 0, 0, 609, 152, 610, 153, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 609, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0]];\nvar accepting = [false, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, false, false, true, false, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, false, false, false, false, false, false, false, true, true, false, false, true, true, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, false, true, true, false, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, false, true, true, true, true, true, false, true, true, false, true, true, true];\nvar tags = [[], [\"broken_cluster\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"symbol_cluster\"], [], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [], [\"broken_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [], [\"consonant_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [], [\"vowel_syllable\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [\"standalone_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"standalone_cluster\"]];\nvar indicMachine = {\n stateTable: stateTable,\n accepting: accepting,\n tags: tags\n};\nvar categories = [\"O\", \"IND\", \"S\", \"GB\", \"B\", \"FM\", \"CGJ\", \"VMAbv\", \"VMPst\", \"VAbv\", \"VPst\", \"CMBlw\", \"VPre\", \"VBlw\", \"H\", \"VMBlw\", \"CMAbv\", \"MBlw\", \"CS\", \"R\", \"SUB\", \"MPst\", \"MPre\", \"FAbv\", \"FPst\", \"FBlw\", \"null\", \"SMAbv\", \"SMBlw\", \"VMPre\", \"ZWNJ\", \"ZWJ\", \"WJ\", \"M\", \"VS\", \"N\", \"HN\", \"MAbv\"];\nvar decompositions = {\n \"2507\": [2503, 2494],\n \"2508\": [2503, 2519],\n \"2888\": [2887, 2902],\n \"2891\": [2887, 2878],\n \"2892\": [2887, 2903],\n \"3018\": [3014, 3006],\n \"3019\": [3015, 3006],\n \"3020\": [3014, 3031],\n \"3144\": [3142, 3158],\n \"3264\": [3263, 3285],\n \"3271\": [3270, 3285],\n \"3272\": [3270, 3286],\n \"3274\": [3270, 3266],\n \"3275\": [3270, 3266, 3285],\n \"3402\": [3398, 3390],\n \"3403\": [3399, 3390],\n \"3404\": [3398, 3415],\n \"3546\": [3545, 3530],\n \"3548\": [3545, 3535],\n \"3549\": [3545, 3535, 3530],\n \"3550\": [3545, 3551],\n \"3635\": [3661, 3634],\n \"3763\": [3789, 3762],\n \"3955\": [3953, 3954],\n \"3957\": [3953, 3956],\n \"3958\": [4018, 3968],\n \"3959\": [4018, 3953, 3968],\n \"3960\": [4019, 3968],\n \"3961\": [4019, 3953, 3968],\n \"3969\": [3953, 3968],\n \"6971\": [6970, 6965],\n \"6973\": [6972, 6965],\n \"6976\": [6974, 6965],\n \"6977\": [6975, 6965],\n \"6979\": [6978, 6965],\n \"69934\": [69937, 69927],\n \"69935\": [69938, 69927],\n \"70475\": [70471, 70462],\n \"70476\": [70471, 70487],\n \"70843\": [70841, 70842],\n \"70844\": [70841, 70832],\n \"70846\": [70841, 70845],\n \"71098\": [71096, 71087],\n \"71099\": [71097, 71087]\n};\nvar stateTable$1 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 2, 3, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 2, 0, 0, 24, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 27, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 39, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 49, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 53, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0]];\nvar accepting$1 = [false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];\nvar tags$1 = [[], [\"broken_cluster\"], [\"independent_cluster\"], [\"symbol_cluster\"], [\"standard_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"numeral_cluster\"], [\"broken_cluster\"], [\"independent_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"virama_terminated_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"numeral_cluster\"], [\"number_joiner_terminated_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"numeral_cluster\"]];\nvar useData = {\n categories: categories,\n decompositions: decompositions,\n stateTable: stateTable$1,\n accepting: accepting$1,\n tags: tags$1\n}; // Cateories used in the OpenType spec:\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\n\nvar CATEGORIES = {\n X: 1 << 0,\n C: 1 << 1,\n V: 1 << 2,\n N: 1 << 3,\n H: 1 << 4,\n ZWNJ: 1 << 5,\n ZWJ: 1 << 6,\n M: 1 << 7,\n SM: 1 << 8,\n VD: 1 << 9,\n A: 1 << 10,\n Placeholder: 1 << 11,\n Dotted_Circle: 1 << 12,\n RS: 1 << 13,\n // Register Shifter, used in Khmer OT spec.\n Coeng: 1 << 14,\n // Khmer-style Virama.\n Repha: 1 << 15,\n // Atomically-encoded logical or visual repha.\n Ra: 1 << 16,\n CM: 1 << 17,\n // Consonant-Medial.\n Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\n\n}; // Visual positions in a syllable from left to right.\n\nvar POSITIONS = {\n Start: 1 << 0,\n Ra_To_Become_Reph: 1 << 1,\n Pre_M: 1 << 2,\n Pre_C: 1 << 3,\n Base_C: 1 << 4,\n After_Main: 1 << 5,\n Above_C: 1 << 6,\n Before_Sub: 1 << 7,\n Below_C: 1 << 8,\n After_Sub: 1 << 9,\n Before_Post: 1 << 10,\n Post_C: 1 << 11,\n After_Post: 1 << 12,\n Final_C: 1 << 13,\n SMVD: 1 << 14,\n End: 1 << 15\n};\nvar CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\nvar JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\nvar HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\nvar INDIC_CONFIGS = {\n Default: {\n hasOldSpec: false,\n virama: 0,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Devanagari: {\n hasOldSpec: true,\n virama: 0x094D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Bengali: {\n hasOldSpec: true,\n virama: 0x09CD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Gurmukhi: {\n hasOldSpec: true,\n virama: 0x0A4D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Gujarati: {\n hasOldSpec: true,\n virama: 0x0ACD,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Oriya: {\n hasOldSpec: true,\n virama: 0x0B4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Tamil: {\n hasOldSpec: true,\n virama: 0x0BCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Telugu: {\n hasOldSpec: true,\n virama: 0x0C4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Explicit',\n blwfMode: 'Post_Only'\n },\n Kannada: {\n hasOldSpec: true,\n virama: 0x0CCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Post_Only'\n },\n Malayalam: {\n hasOldSpec: true,\n virama: 0x0D4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Log_Repha',\n blwfMode: 'Pre_And_Post'\n },\n // Handled by UniversalShaper\n // Sinhala: {\n // hasOldSpec: false,\n // virama: 0x0DCA,\n // basePos: 'Last_Sinhala',\n // rephPos: POSITIONS.After_Main,\n // rephMode: 'Explicit',\n // blwfMode: 'Pre_And_Post'\n // },\n Khmer: {\n hasOldSpec: false,\n virama: 0x17D2,\n basePos: 'First',\n rephPos: POSITIONS.Ra_To_Become_Reph,\n rephMode: 'Vis_Repha',\n blwfMode: 'Pre_And_Post'\n }\n}; // Additional decompositions that aren't in Unicode\n\nvar INDIC_DECOMPOSITIONS = {\n // Khmer\n 0x17BE: [0x17C1, 0x17BE],\n 0x17BF: [0x17C1, 0x17BF],\n 0x17C0: [0x17C1, 0x17C0],\n 0x17C4: [0x17C1, 0x17C4],\n 0x17C5: [0x17C1, 0x17C5]\n};\nvar decompositions$1 = useData.decompositions;\nvar trie$1 = new UnicodeTrie(Buffer(\"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\",\"base64\"));\nvar stateMachine = new StateMachine(indicMachine);\n/**\r\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\r\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\r\n */\n\nvar IndicShaper = /*#__PURE__*/function (_DefaultShaper3) {\n _inheritsLoose(IndicShaper, _DefaultShaper3);\n\n function IndicShaper() {\n return _DefaultShaper3.apply(this, arguments) || this;\n }\n\n IndicShaper.planFeatures = function planFeatures(plan) {\n plan.addStage(setupSyllables);\n plan.addStage(['locl', 'ccmp']);\n plan.addStage(initialReordering);\n plan.addStage('nukt');\n plan.addStage('akhn');\n plan.addStage('rphf', false);\n plan.addStage('rkrf');\n plan.addStage('pref', false);\n plan.addStage('blwf', false);\n plan.addStage('abvf', false);\n plan.addStage('half', false);\n plan.addStage('pstf', false);\n plan.addStage('vatu');\n plan.addStage('cjct');\n plan.addStage('cfar', false);\n plan.addStage(finalReordering);\n plan.addStage({\n local: ['init'],\n global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\n }); // Setup the indic config for the selected script\n\n plan.unicodeScript = fromOpenType(plan.script);\n plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\n plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; // TODO: turn off kern (Khmer) and liga features.\n };\n\n IndicShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n var _loop = function _loop(i) {\n var codepoint = glyphs[i].codePoints[0];\n var d = INDIC_DECOMPOSITIONS[codepoint] || decompositions$1[codepoint];\n\n if (d) {\n var decomposed = d.map(function (c) {\n var g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));\n }\n }; // Decompose split matras\n // TODO: do this in a more general unicode normalizer\n\n\n for (var i = glyphs.length - 1; i >= 0; i--) {\n _loop(i);\n }\n };\n\n return IndicShaper;\n}(DefaultShaper);\n\n_defineProperty(IndicShaper, \"zeroMarkWidths\", 'NONE');\n\nfunction indicCategory(glyph) {\n return trie$1.get(glyph.codePoints[0]) >> 8;\n}\n\nfunction indicPosition(glyph) {\n return 1 << (trie$1.get(glyph.codePoints[0]) & 0xff);\n}\n\nvar IndicInfo = function IndicInfo(category, position, syllableType, syllable) {\n this.category = category;\n this.position = position;\n this.syllableType = syllableType;\n this.syllable = syllable;\n};\n\nfunction setupSyllables(font, glyphs) {\n var syllable = 0;\n var last = 0;\n\n for (var _iterator53 = _createForOfIteratorHelperLoose(stateMachine.match(glyphs.map(indicCategory))), _step53; !(_step53 = _iterator53()).done;) {\n var _step53$value = _step53.value,\n start = _step53$value[0],\n end = _step53$value[1],\n tags = _step53$value[2];\n\n if (start > last) {\n ++syllable;\n\n for (var i = last; i < start; i++) {\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n\n ++syllable; // Create shaper info\n\n for (var _i = start; _i <= end; _i++) {\n glyphs[_i].shaperInfo = new IndicInfo(1 << indicCategory(glyphs[_i]), indicPosition(glyphs[_i]), tags[0], syllable);\n }\n\n last = end + 1;\n }\n\n if (last < glyphs.length) {\n ++syllable;\n\n for (var _i2 = last; _i2 < glyphs.length; _i2++) {\n glyphs[_i2].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n}\n\nfunction isConsonant(glyph) {\n return glyph.shaperInfo.category & CONSONANT_FLAGS;\n}\n\nfunction isJoiner(glyph) {\n return glyph.shaperInfo.category & JOINER_FLAGS;\n}\n\nfunction isHalantOrCoeng(glyph) {\n return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\n}\n\nfunction wouldSubstitute(glyphs, feature) {\n for (var _iterator54 = _createForOfIteratorHelperLoose(glyphs), _step54; !(_step54 = _iterator54()).done;) {\n var _glyph$features;\n\n var glyph = _step54.value;\n glyph.features = (_glyph$features = {}, _glyph$features[feature] = true, _glyph$features);\n }\n\n var GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\n GSUB.applyFeatures([feature], glyphs);\n return glyphs.length === 1;\n}\n\nfunction consonantPosition(font, consonant, virama) {\n var glyphs = [virama, consonant, virama];\n\n if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\n return POSITIONS.Below_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\n return POSITIONS.Post_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\n return POSITIONS.Post_C;\n }\n\n return POSITIONS.Base_C;\n}\n\nfunction initialReordering(font, glyphs, plan) {\n var indicConfig = plan.indicConfig;\n var features = font._layoutEngine.engine.GSUBProcessor.features;\n var dottedCircle = font.glyphForCodePoint(0x25cc).id;\n var virama = font.glyphForCodePoint(indicConfig.virama).id;\n\n if (virama) {\n var info = new GlyphInfo(font, virama, [indicConfig.virama]);\n\n for (var i = 0; i < glyphs.length; i++) {\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\n }\n }\n }\n\n for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n var _glyphs$start$shaperI = glyphs[start].shaperInfo,\n category = _glyphs$start$shaperI.category,\n syllableType = _glyphs$start$shaperI.syllableType;\n\n if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\n continue;\n }\n\n if (syllableType === 'broken_cluster' && dottedCircle) {\n var g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = new IndicInfo(1 << indicCategory(g), indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); // Insert after possible Repha.\n\n var _i3 = start;\n\n while (_i3 < end && glyphs[_i3].shaperInfo.category === CATEGORIES.Repha) {\n _i3++;\n }\n\n glyphs.splice(_i3++, 0, g);\n end++;\n } // 1. Find base consonant:\n //\n // The shaping engine finds the base consonant of the syllable, using the\n // following algorithm: starting from the end of the syllable, move backwards\n // until a consonant is found that does not have a below-base or post-base\n // form (post-base forms have to follow below-base forms), or that is not a\n // pre-base reordering Ra, or arrive at the first consonant. The consonant\n // stopped at will be the base.\n\n\n var base = end;\n var limit = start;\n var hasReph = false; // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n\n if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)) {\n // See if it matches the 'rphf' feature.\n var _g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\n\n if (wouldSubstitute(_g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && wouldSubstitute(_g, 'rphf')) {\n limit += 2;\n\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n\n base = start;\n hasReph = true;\n }\n } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\n limit++;\n\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n\n base = start;\n hasReph = true;\n }\n\n switch (indicConfig.basePos) {\n case 'Last':\n {\n // starting from the end of the syllable, move backwards\n var _i4 = end;\n var seenBelow = false;\n\n do {\n var _info = glyphs[--_i4].shaperInfo; // until a consonant is found\n\n if (isConsonant(glyphs[_i4])) {\n // that does not have a below-base or post-base form\n // (post-base forms have to follow below-base forms),\n if (_info.position !== POSITIONS.Below_C && (_info.position !== POSITIONS.Post_C || seenBelow)) {\n base = _i4;\n break;\n } // or that is not a pre-base reordering Ra,\n //\n // IMPLEMENTATION NOTES:\n //\n // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\n // by the logic above already.\n //\n // or arrive at the first consonant. The consonant stopped at will\n // be the base.\n\n\n if (_info.position === POSITIONS.Below_C) {\n seenBelow = true;\n }\n\n base = _i4;\n } else if (start < _i4 && _info.category === CATEGORIES.ZWJ && glyphs[_i4 - 1].shaperInfo.category === CATEGORIES.H) {\n // A ZWJ after a Halant stops the base search, and requests an explicit\n // half form.\n // A ZWJ before a Halant, requests a subjoined form instead, and hence\n // search continues. This is particularly important for Bengali\n // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\n break;\n }\n } while (_i4 > limit);\n\n break;\n }\n\n case 'First':\n {\n // The first consonant is always the base.\n base = start; // Mark all subsequent consonants as below.\n\n for (var _i5 = base + 1; _i5 < end; _i5++) {\n if (isConsonant(glyphs[_i5])) {\n glyphs[_i5].shaperInfo.position = POSITIONS.Below_C;\n }\n }\n }\n } // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n //\n // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\n\n\n if (hasReph && base === start && limit - base <= 2) {\n hasReph = false;\n } // 2. Decompose and reorder Matras:\n //\n // Each matra and any syllable modifier sign in the cluster are moved to the\n // appropriate position relative to the consonant(s) in the cluster. The\n // shaping engine decomposes two- or three-part matras into their constituent\n // parts before any repositioning. Matra characters are classified by which\n // consonant in a conjunct they have affinity for and are reordered to the\n // following positions:\n //\n // o Before first half form in the syllable\n // o After subjoined consonants\n // o After post-form consonant\n // o After main consonant (for above marks)\n //\n // IMPLEMENTATION NOTES:\n //\n // The normalize() routine has already decomposed matras for us, so we don't\n // need to worry about that.\n // 3. Reorder marks to canonical order:\n //\n // Adjacent nukta and halant or nukta and vedic sign are always repositioned\n // if necessary, so that the nukta is first.\n //\n // IMPLEMENTATION NOTES:\n //\n // We don't need to do this: the normalize() routine already did this for us.\n // Reorder characters\n\n\n for (var _i6 = start; _i6 < base; _i6++) {\n var _info2 = glyphs[_i6].shaperInfo;\n _info2.position = Math.min(POSITIONS.Pre_C, _info2.position);\n }\n\n if (base < end) {\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n } // Mark final consonants. A final consonant is one appearing after a matra,\n // like in Khmer.\n\n\n for (var _i7 = base + 1; _i7 < end; _i7++) {\n if (glyphs[_i7].shaperInfo.category === CATEGORIES.M) {\n for (var j = _i7 + 1; j < end; j++) {\n if (isConsonant(glyphs[j])) {\n glyphs[j].shaperInfo.position = POSITIONS.Final_C;\n break;\n }\n }\n\n break;\n }\n } // Handle beginning Ra\n\n\n if (hasReph) {\n glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\n } // For old-style Indic script tags, move the first post-base Halant after\n // last consonant.\n //\n // Reports suggest that in some scripts Uniscribe does this only if there\n // is *not* a Halant after last consonant already (eg. Kannada), while it\n // does it unconditionally in other scripts (eg. Malayalam). We don't\n // currently know about other scripts, so we single out Malayalam for now.\n //\n // Kannada test case:\n // U+0C9A,U+0CCD,U+0C9A,U+0CCD\n // With some versions of Lohit Kannada.\n // https://bugs.freedesktop.org/show_bug.cgi?id=59118\n //\n // Malayalam test case:\n // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\n // With lohit-ttf-20121122/Lohit-Malayalam.ttf\n\n\n if (plan.isOldSpec) {\n var disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\n\n for (var _i8 = base + 1; _i8 < end; _i8++) {\n if (glyphs[_i8].shaperInfo.category === CATEGORIES.H) {\n var _j = void 0;\n\n for (_j = end - 1; _j > _i8; _j--) {\n if (isConsonant(glyphs[_j]) || disallowDoubleHalants && glyphs[_j].shaperInfo.category === CATEGORIES.H) {\n break;\n }\n }\n\n if (glyphs[_j].shaperInfo.category !== CATEGORIES.H && _j > _i8) {\n // Move Halant to after last consonant.\n var t = glyphs[_i8];\n glyphs.splice.apply(glyphs, [_i8, 0].concat(glyphs.splice(_i8 + 1, _j - _i8)));\n glyphs[_j] = t;\n }\n\n break;\n }\n }\n } // Attach misc marks to previous char to move with them.\n\n\n var lastPos = POSITIONS.Start;\n\n for (var _i9 = start; _i9 < end; _i9++) {\n var _info3 = glyphs[_i9].shaperInfo;\n\n if (_info3.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & _info3.category)) {\n _info3.position = lastPos;\n\n if (_info3.category === CATEGORIES.H && _info3.position === POSITIONS.Pre_M) {\n // Uniscribe doesn't move the Halant with Left Matra.\n // TEST: U+092B,U+093F,U+094DE\n // We follow. This is important for the Sinhala\n // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\n // where U+0DD9 is a left matra and U+0DCA is the virama.\n // We don't want to move the virama with the left matra.\n // TEST: U+0D9A,U+0DDA\n for (var _j2 = _i9; _j2 > start; _j2--) {\n if (glyphs[_j2 - 1].shaperInfo.position !== POSITIONS.Pre_M) {\n _info3.position = glyphs[_j2 - 1].shaperInfo.position;\n break;\n }\n }\n }\n } else if (_info3.position !== POSITIONS.SMVD) {\n lastPos = _info3.position;\n }\n } // For post-base consonants let them own anything before them\n // since the last consonant or matra.\n\n\n var last = base;\n\n for (var _i10 = base + 1; _i10 < end; _i10++) {\n if (isConsonant(glyphs[_i10])) {\n for (var _j3 = last + 1; _j3 < _i10; _j3++) {\n if (glyphs[_j3].shaperInfo.position < POSITIONS.SMVD) {\n glyphs[_j3].shaperInfo.position = glyphs[_i10].shaperInfo.position;\n }\n }\n\n last = _i10;\n } else if (glyphs[_i10].shaperInfo.category === CATEGORIES.M) {\n last = _i10;\n }\n }\n\n var arr = glyphs.slice(start, end);\n arr.sort(function (a, b) {\n return a.shaperInfo.position - b.shaperInfo.position;\n });\n glyphs.splice.apply(glyphs, [start, arr.length].concat(arr)); // Find base again\n\n for (var _i11 = start; _i11 < end; _i11++) {\n if (glyphs[_i11].shaperInfo.position === POSITIONS.Base_C) {\n base = _i11;\n break;\n }\n } // Setup features now\n // Reph\n\n\n for (var _i12 = start; _i12 < end && glyphs[_i12].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; _i12++) {\n glyphs[_i12].features.rphf = true;\n } // Pre-base\n\n\n var blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\n\n for (var _i13 = start; _i13 < base; _i13++) {\n glyphs[_i13].features.half = true;\n\n if (blwf) {\n glyphs[_i13].features.blwf = true;\n }\n } // Post-base\n\n\n for (var _i14 = base + 1; _i14 < end; _i14++) {\n glyphs[_i14].features.abvf = true;\n glyphs[_i14].features.pstf = true;\n glyphs[_i14].features.blwf = true;\n }\n\n if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\n // Old-spec eye-lash Ra needs special handling. From the\n // spec:\n //\n // \"The feature 'below-base form' is applied to consonants\n // having below-base forms and following the base consonant.\n // The exception is vattu, which may appear below half forms\n // as well as below the base glyph. The feature 'below-base\n // form' will be applied to all such occurrences of Ra as well.\"\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\n // with Sanskrit 2003 font.\n //\n // However, note that Ra,Halant,ZWJ is the correct way to\n // request eyelash form of Ra, so we wouldbn't inhibit it\n // in that sequence.\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\n for (var _i15 = start; _i15 + 1 < base; _i15++) {\n if (glyphs[_i15].shaperInfo.category === CATEGORIES.Ra && glyphs[_i15 + 1].shaperInfo.category === CATEGORIES.H && (_i15 + 1 === base || glyphs[_i15 + 2].shaperInfo.category === CATEGORIES.ZWJ)) {\n glyphs[_i15].features.blwf = true;\n glyphs[_i15 + 1].features.blwf = true;\n }\n }\n }\n\n var prefLen = 2;\n\n if (features.pref && base + prefLen < end) {\n // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\n for (var _i16 = base + 1; _i16 + prefLen - 1 < end; _i16++) {\n var _g2 = [glyphs[_i16].copy(), glyphs[_i16 + 1].copy()];\n\n if (wouldSubstitute(_g2, 'pref')) {\n for (var _j4 = 0; _j4 < prefLen; _j4++) {\n glyphs[_i16++].features.pref = true;\n } // Mark the subsequent stuff with 'cfar'. Used in Khmer.\n // Read the feature spec.\n // This allows distinguishing the following cases with MS Khmer fonts:\n // U+1784,U+17D2,U+179A,U+17D2,U+1782\n // U+1784,U+17D2,U+1782,U+17D2,U+179A\n\n\n if (features.cfar) {\n for (; _i16 < end; _i16++) {\n glyphs[_i16].features.cfar = true;\n }\n }\n\n break;\n }\n }\n } // Apply ZWJ/ZWNJ effects\n\n\n for (var _i17 = start + 1; _i17 < end; _i17++) {\n if (isJoiner(glyphs[_i17])) {\n var nonJoiner = glyphs[_i17].shaperInfo.category === CATEGORIES.ZWNJ;\n var _j5 = _i17;\n\n do {\n _j5--; // ZWJ/ZWNJ should disable CJCT. They do that by simply\n // being there, since we don't skip them for the CJCT\n // feature (ie. F_MANUAL_ZWJ)\n // A ZWNJ disables HALF.\n\n if (nonJoiner) {\n delete glyphs[_j5].features.half;\n }\n } while (_j5 > start && !isConsonant(glyphs[_j5]));\n }\n }\n }\n}\n\nfunction finalReordering(font, glyphs, plan) {\n var indicConfig = plan.indicConfig;\n var features = font._layoutEngine.engine.GSUBProcessor.features;\n\n for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n // 4. Final reordering:\n //\n // After the localized forms and basic shaping forms GSUB features have been\n // applied (see below), the shaping engine performs some final glyph\n // reordering before applying all the remaining font features to the entire\n // cluster.\n var tryPref = !!features.pref; // Find base again\n\n var base = start;\n\n for (; base < end; base++) {\n if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\n if (tryPref && base + 1 < end) {\n for (var i = base + 1; i < end; i++) {\n if (glyphs[i].features.pref) {\n if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\n // Ok, this was a 'pref' candidate but didn't form any.\n // Base is around here...\n base = i;\n\n while (base < end && isHalantOrCoeng(glyphs[base])) {\n base++;\n }\n\n glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\n tryPref = false;\n }\n\n break;\n }\n }\n } // For Malayalam, skip over unformed below- (but NOT post-) forms.\n\n\n if (plan.unicodeScript === 'Malayalam') {\n for (var _i18 = base + 1; _i18 < end; _i18++) {\n while (_i18 < end && isJoiner(glyphs[_i18])) {\n _i18++;\n }\n\n if (_i18 === end || !isHalantOrCoeng(glyphs[_i18])) {\n break;\n }\n\n _i18++; // Skip halant.\n\n while (_i18 < end && isJoiner(glyphs[_i18])) {\n _i18++;\n }\n\n if (_i18 < end && isConsonant(glyphs[_i18]) && glyphs[_i18].shaperInfo.position === POSITIONS.Below_C) {\n base = _i18;\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n }\n }\n }\n\n if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\n base--;\n }\n\n break;\n }\n }\n\n if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\n base--;\n }\n\n if (base < end) {\n while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\n base--;\n }\n } // o Reorder matras:\n //\n // If a pre-base matra character had been reordered before applying basic\n // features, the glyph can be moved closer to the main consonant based on\n // whether half-forms had been formed. Actual position for the matra is\n // defined as “after last standalone halant glyph, after initial matra\n // position and before the main consonant”. If ZWJ or ZWNJ follow this\n // halant, position is moved after it.\n //\n\n\n if (start + 1 < end && start < base) {\n // Otherwise there can't be any pre-base matra characters.\n // If we lost track of base, alas, position before last thingy.\n var newPos = base === end ? base - 2 : base - 1; // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n newPos--;\n } // If we found no Halant we are done.\n // Otherwise only proceed if the Halant does\n // not belong to the Matra itself!\n\n\n if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\n newPos++;\n }\n } else {\n newPos = start; // No move.\n }\n }\n\n if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // Now go see if there's actually any matras...\n for (var _i19 = newPos; _i19 > start; _i19--) {\n if (glyphs[_i19 - 1].shaperInfo.position === POSITIONS.Pre_M) {\n var oldPos = _i19 - 1;\n\n if (oldPos < base && base <= newPos) {\n // Shouldn't actually happen.\n base--;\n }\n\n var tmp = glyphs[oldPos];\n glyphs.splice.apply(glyphs, [oldPos, 0].concat(glyphs.splice(oldPos + 1, newPos - oldPos)));\n glyphs[newPos] = tmp;\n newPos--;\n }\n }\n }\n } // o Reorder reph:\n //\n // Reph’s original position is always at the beginning of the syllable,\n // (i.e. it is not reordered at the character reordering stage). However,\n // it will be reordered according to the basic-forms shaping results.\n // Possible positions for reph, depending on the script, are; after main,\n // before post-base consonant forms, and after post-base consonant forms.\n // Two cases:\n //\n // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\n // we should only move it if the sequence ligated to the repha form.\n //\n // - If repha is encoded separately and in the logical position, we should only\n // move it if it did NOT ligate. If it ligated, it's probably the font trying\n // to make it work without the reordering.\n\n\n if (start + 1 < end && glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph && glyphs[start].shaperInfo.category === CATEGORIES.Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) {\n var newRephPos = void 0;\n var rephPos = indicConfig.rephPos;\n var found = false; // 1. If reph should be positioned after post-base consonant forms,\n // proceed to step 5.\n\n if (rephPos !== POSITIONS.After_Post) {\n // 2. If the reph repositioning class is not after post-base: target\n // position is after the first explicit halant glyph between the\n // first post-reph consonant and last main consonant. If ZWJ or ZWNJ\n // are following this halant, position is moved after it. If such\n // position is found, this is the target position. Otherwise,\n // proceed to the next step.\n //\n // Note: in old-implementation fonts, where classifications were\n // fixed in shaping engine, there was no case where reph position\n // will be found on this step.\n newRephPos = start + 1;\n\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n\n found = true;\n } // 3. If reph should be repositioned after the main consonant: find the\n // first consonant not ligated with main, or find the first\n // consonant that is not a potential pre-base reordering Ra.\n\n\n if (!found && rephPos === POSITIONS.After_Main) {\n newRephPos = base;\n\n while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\n newRephPos++;\n }\n\n found = newRephPos < end;\n } // 4. If reph should be positioned before post-base consonant, find\n // first post-base classified consonant not ligated with main. If no\n // consonant is found, the target position should be before the\n // first matra, syllable modifier sign or vedic sign.\n //\n // This is our take on what step 4 is trying to say (and failing, BADLY).\n\n\n if (!found && rephPos === POSITIONS.After_Sub) {\n newRephPos = base;\n\n while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\n newRephPos++;\n }\n\n found = newRephPos < end;\n }\n } // 5. If no consonant is found in steps 3 or 4, move reph to a position\n // immediately before the first post-base matra, syllable modifier\n // sign or vedic sign that has a reordering class after the intended\n // reph position. For example, if the reordering position for reph\n // is post-main, it will skip above-base matras that also have a\n // post-main position.\n\n\n if (!found) {\n // Copied from step 2.\n newRephPos = start + 1;\n\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n\n found = true;\n }\n } // 6. Otherwise, reorder reph to the end of the syllable.\n\n\n if (!found) {\n newRephPos = end - 1;\n\n while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\n newRephPos--;\n } // If the Reph is to be ending up after a Matra,Halant sequence,\n // position it before that Halant so it can interact with the Matra.\n // However, if it's a plain Consonant,Halant we shouldn't do that.\n // Uniscribe doesn't do this.\n // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\n\n\n if (isHalantOrCoeng(glyphs[newRephPos])) {\n for (var _i20 = base + 1; _i20 < newRephPos; _i20++) {\n if (glyphs[_i20].shaperInfo.category === CATEGORIES.M) {\n newRephPos--;\n }\n }\n }\n }\n\n var reph = glyphs[start];\n glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, newRephPos - start)));\n glyphs[newRephPos] = reph;\n\n if (start < base && base <= newRephPos) {\n base--;\n }\n } // o Reorder pre-base reordering consonants:\n //\n // If a pre-base reordering consonant is found, reorder it according to\n // the following rules:\n\n\n if (tryPref && base + 1 < end) {\n for (var _i21 = base + 1; _i21 < end; _i21++) {\n if (glyphs[_i21].features.pref) {\n // 1. Only reorder a glyph produced by substitution during application\n // of the <pref> feature. (Note that a font may shape a Ra consonant with\n // the feature generally but block it in certain contexts.)\n // Note: We just check that something got substituted. We don't check that\n // the <pref> feature actually did it...\n //\n // Reorder pref only if it ligated.\n if (glyphs[_i21].isLigated && !glyphs[_i21].isMultiplied) {\n // 2. Try to find a target position the same way as for pre-base matra.\n // If it is found, reorder pre-base consonant glyph.\n //\n // 3. If position is not found, reorder immediately before main\n // consonant.\n var _newPos = base; // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (_newPos > start && !(glyphs[_newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n _newPos--;\n } // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a\n // split matra, it should be reordered to *before* the left part of such matra.\n\n\n if (_newPos > start && glyphs[_newPos - 1].shaperInfo.category === CATEGORIES.M) {\n var _oldPos2 = _i21;\n\n for (var j = base + 1; j < _oldPos2; j++) {\n if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\n _newPos--;\n break;\n }\n }\n }\n }\n\n if (_newPos > start && isHalantOrCoeng(glyphs[_newPos - 1])) {\n // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (_newPos < end && isJoiner(glyphs[_newPos])) {\n _newPos++;\n }\n }\n\n var _oldPos = _i21;\n var _tmp = glyphs[_oldPos];\n glyphs.splice.apply(glyphs, [_newPos + 1, 0].concat(glyphs.splice(_newPos, _oldPos - _newPos)));\n glyphs[_newPos] = _tmp;\n\n if (_newPos <= base && base < _oldPos) {\n base++;\n }\n }\n\n break;\n }\n }\n } // Apply 'init' to the Left Matra if it's a word start.\n\n\n if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(unicode.getCategory(glyphs[start - 1].codePoints[0])))) {\n glyphs[start].features.init = true;\n }\n }\n}\n\nfunction nextSyllable(glyphs, start) {\n if (start >= glyphs.length) return start;\n var syllable = glyphs[start].shaperInfo.syllable;\n\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}\n\n return start;\n}\n\nvar categories$1 = useData.categories,\n decompositions$2 = useData.decompositions;\nvar trie$2 = new UnicodeTrie(Buffer(\"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\",\"base64\"));\nvar stateMachine$1 = new StateMachine(useData);\n/**\r\n * This shaper is an implementation of the Universal Shaping Engine, which\r\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\r\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\r\n */\n\nvar UniversalShaper = /*#__PURE__*/function (_DefaultShaper4) {\n _inheritsLoose(UniversalShaper, _DefaultShaper4);\n\n function UniversalShaper() {\n return _DefaultShaper4.apply(this, arguments) || this;\n }\n\n UniversalShaper.planFeatures = function planFeatures(plan) {\n plan.addStage(setupSyllables$1); // Default glyph pre-processing group\n\n plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']); // Reordering group\n\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['rphf'], false);\n plan.addStage(recordRphf);\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['pref']);\n plan.addStage(recordPref); // Orthographic unit shaping group\n\n plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\n plan.addStage(reorder); // Topographical features\n // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\n // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\n // Standard topographic presentation and positional feature application\n\n plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\n };\n\n UniversalShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n var _loop = function _loop(i) {\n var codepoint = glyphs[i].codePoints[0];\n\n if (decompositions$2[codepoint]) {\n var decomposed = decompositions$2[codepoint].map(function (c) {\n var g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));\n }\n }; // Decompose split vowels\n // TODO: do this in a more general unicode normalizer\n\n\n for (var i = glyphs.length - 1; i >= 0; i--) {\n _loop(i);\n }\n };\n\n return UniversalShaper;\n}(DefaultShaper);\n\n_defineProperty(UniversalShaper, \"zeroMarkWidths\", 'BEFORE_GPOS');\n\nfunction useCategory(glyph) {\n return trie$2.get(glyph.codePoints[0]);\n}\n\nvar USEInfo = function USEInfo(category, syllableType, syllable) {\n this.category = category;\n this.syllableType = syllableType;\n this.syllable = syllable;\n};\n\nfunction setupSyllables$1(font, glyphs) {\n var syllable = 0;\n\n for (var _iterator55 = _createForOfIteratorHelperLoose(stateMachine$1.match(glyphs.map(useCategory))), _step55; !(_step55 = _iterator55()).done;) {\n var _step55$value = _step55.value,\n start = _step55$value[0],\n end = _step55$value[1],\n tags = _step55$value[2];\n ++syllable; // Create shaper info\n\n for (var i = start; i <= end; i++) {\n glyphs[i].shaperInfo = new USEInfo(categories$1[useCategory(glyphs[i])], tags[0], syllable);\n } // Assign rphf feature\n\n\n var limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\n\n for (var _i = start; _i < start + limit; _i++) {\n glyphs[_i].features.rphf = true;\n }\n }\n}\n\nfunction clearSubstitutionFlags(font, glyphs) {\n for (var _iterator56 = _createForOfIteratorHelperLoose(glyphs), _step56; !(_step56 = _iterator56()).done;) {\n var glyph = _step56.value;\n glyph.substituted = false;\n }\n}\n\nfunction recordRphf(font, glyphs) {\n for (var _iterator57 = _createForOfIteratorHelperLoose(glyphs), _step57; !(_step57 = _iterator57()).done;) {\n var glyph = _step57.value;\n\n if (glyph.substituted && glyph.features.rphf) {\n // Mark a substituted repha.\n glyph.shaperInfo.category = 'R';\n }\n }\n}\n\nfunction recordPref(font, glyphs) {\n for (var _iterator58 = _createForOfIteratorHelperLoose(glyphs), _step58; !(_step58 = _iterator58()).done;) {\n var glyph = _step58.value;\n\n if (glyph.substituted) {\n // Mark a substituted pref as VPre, as they behave the same way.\n glyph.shaperInfo.category = 'VPre';\n }\n }\n}\n\nfunction reorder(font, glyphs) {\n var dottedCircle = font.glyphForCodePoint(0x25cc).id;\n\n for (var start = 0, end = nextSyllable$1(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable$1(glyphs, start)) {\n var i = void 0,\n j = void 0;\n var info = glyphs[start].shaperInfo;\n var type = info.syllableType; // Only a few syllable types need reordering.\n\n if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\n continue;\n } // Insert a dotted circle glyph in broken clusters.\n\n\n if (type === 'broken_cluster' && dottedCircle) {\n var g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = info; // Insert after possible Repha.\n\n for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++) {}\n\n glyphs.splice(++i, 0, g);\n end++;\n } // Move things forward.\n\n\n if (info.category === 'R' && end - start > 1) {\n // Got a repha. Reorder it to after first base, before first halant.\n for (i = start + 1; i < end; i++) {\n info = glyphs[i].shaperInfo;\n\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move before it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n if (isHalant(glyphs[i])) {\n i--;\n }\n\n glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, i - start), [glyphs[i]]));\n break;\n }\n }\n } // Move things back.\n\n\n for (i = start, j = end; i < end; i++) {\n info = glyphs[i].shaperInfo;\n\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move after it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n j = isHalant(glyphs[i]) ? i + 1 : i;\n } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\n glyphs.splice.apply(glyphs, [j, 1, glyphs[i]].concat(glyphs.splice(j, i - j)));\n }\n }\n }\n}\n\nfunction nextSyllable$1(glyphs, start) {\n if (start >= glyphs.length) return start;\n var syllable = glyphs[start].shaperInfo.syllable;\n\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}\n\n return start;\n}\n\nfunction isHalant(glyph) {\n return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\n}\n\nfunction isBase(info) {\n return info.category === 'B' || info.category === 'GB';\n}\n\nvar SHAPERS = {\n arab: ArabicShaper,\n // Arabic\n mong: ArabicShaper,\n // Mongolian\n syrc: ArabicShaper,\n // Syriac\n 'nko ': ArabicShaper,\n // N'Ko\n phag: ArabicShaper,\n // Phags Pa\n mand: ArabicShaper,\n // Mandaic\n mani: ArabicShaper,\n // Manichaean\n phlp: ArabicShaper,\n // Psalter Pahlavi\n hang: HangulShaper,\n // Hangul\n bng2: IndicShaper,\n // Bengali\n beng: IndicShaper,\n // Bengali\n dev2: IndicShaper,\n // Devanagari\n deva: IndicShaper,\n // Devanagari\n gjr2: IndicShaper,\n // Gujarati\n gujr: IndicShaper,\n // Gujarati\n guru: IndicShaper,\n // Gurmukhi\n gur2: IndicShaper,\n // Gurmukhi\n knda: IndicShaper,\n // Kannada\n knd2: IndicShaper,\n // Kannada\n mlm2: IndicShaper,\n // Malayalam\n mlym: IndicShaper,\n // Malayalam\n ory2: IndicShaper,\n // Oriya\n orya: IndicShaper,\n // Oriya\n taml: IndicShaper,\n // Tamil\n tml2: IndicShaper,\n // Tamil\n telu: IndicShaper,\n // Telugu\n tel2: IndicShaper,\n // Telugu\n khmr: IndicShaper,\n // Khmer\n bali: UniversalShaper,\n // Balinese\n batk: UniversalShaper,\n // Batak\n brah: UniversalShaper,\n // Brahmi\n bugi: UniversalShaper,\n // Buginese\n buhd: UniversalShaper,\n // Buhid\n cakm: UniversalShaper,\n // Chakma\n cham: UniversalShaper,\n // Cham\n dupl: UniversalShaper,\n // Duployan\n egyp: UniversalShaper,\n // Egyptian Hieroglyphs\n gran: UniversalShaper,\n // Grantha\n hano: UniversalShaper,\n // Hanunoo\n java: UniversalShaper,\n // Javanese\n kthi: UniversalShaper,\n // Kaithi\n kali: UniversalShaper,\n // Kayah Li\n khar: UniversalShaper,\n // Kharoshthi\n khoj: UniversalShaper,\n // Khojki\n sind: UniversalShaper,\n // Khudawadi\n lepc: UniversalShaper,\n // Lepcha\n limb: UniversalShaper,\n // Limbu\n mahj: UniversalShaper,\n // Mahajani\n // mand: UniversalShaper, // Mandaic\n // mani: UniversalShaper, // Manichaean\n mtei: UniversalShaper,\n // Meitei Mayek\n modi: UniversalShaper,\n // Modi\n // mong: UniversalShaper, // Mongolian\n // 'nko ': UniversalShaper, // N’Ko\n hmng: UniversalShaper,\n // Pahawh Hmong\n // phag: UniversalShaper, // Phags-pa\n // phlp: UniversalShaper, // Psalter Pahlavi\n rjng: UniversalShaper,\n // Rejang\n saur: UniversalShaper,\n // Saurashtra\n shrd: UniversalShaper,\n // Sharada\n sidd: UniversalShaper,\n // Siddham\n sinh: UniversalShaper,\n // Sinhala\n sund: UniversalShaper,\n // Sundanese\n sylo: UniversalShaper,\n // Syloti Nagri\n tglg: UniversalShaper,\n // Tagalog\n tagb: UniversalShaper,\n // Tagbanwa\n tale: UniversalShaper,\n // Tai Le\n lana: UniversalShaper,\n // Tai Tham\n tavt: UniversalShaper,\n // Tai Viet\n takr: UniversalShaper,\n // Takri\n tibt: UniversalShaper,\n // Tibetan\n tfng: UniversalShaper,\n // Tifinagh\n tirh: UniversalShaper,\n // Tirhuta\n latn: DefaultShaper,\n // Latin\n DFLT: DefaultShaper // Default\n\n};\n\nfunction choose(script) {\n if (!Array.isArray(script)) {\n script = [script];\n }\n\n for (var _iterator59 = _createForOfIteratorHelperLoose(script), _step59; !(_step59 = _iterator59()).done;) {\n var s = _step59.value;\n var shaper = SHAPERS[s];\n\n if (shaper) {\n return shaper;\n }\n }\n\n return DefaultShaper;\n}\n\nvar GSUBProcessor = /*#__PURE__*/function (_OTProcessor) {\n _inheritsLoose(GSUBProcessor, _OTProcessor);\n\n function GSUBProcessor() {\n return _OTProcessor.apply(this, arguments) || this;\n }\n\n var _proto27 = GSUBProcessor.prototype;\n\n _proto27.applyLookup = function applyLookup(lookupType, table) {\n var _this7 = this;\n\n switch (lookupType) {\n case 1:\n {\n // Single Substitution\n var index = this.coverageIndex(table.coverage);\n\n if (index === -1) {\n return false;\n }\n\n var glyph = this.glyphIterator.cur;\n\n switch (table.version) {\n case 1:\n glyph.id = glyph.id + table.deltaGlyphID & 0xffff;\n break;\n\n case 2:\n glyph.id = table.substitute.get(index);\n break;\n }\n\n return true;\n }\n\n case 2:\n {\n // Multiple Substitution\n var _index = this.coverageIndex(table.coverage);\n\n if (_index !== -1) {\n var _this$glyphs2;\n\n var sequence = table.sequences.get(_index);\n\n if (sequence.length === 0) {\n // If the sequence length is zero, delete the glyph.\n // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\n this.glyphs.splice(this.glyphIterator.index, 1);\n return true;\n }\n\n this.glyphIterator.cur.id = sequence[0];\n this.glyphIterator.cur.ligatureComponent = 0;\n var features = this.glyphIterator.cur.features;\n var curGlyph = this.glyphIterator.cur;\n var replacement = sequence.slice(1).map(function (gid, i) {\n var glyph = new GlyphInfo(_this7.font, gid, undefined, features);\n glyph.shaperInfo = curGlyph.shaperInfo;\n glyph.isLigated = curGlyph.isLigated;\n glyph.ligatureComponent = i + 1;\n glyph.substituted = true;\n glyph.isMultiplied = true;\n return glyph;\n });\n\n (_this$glyphs2 = this.glyphs).splice.apply(_this$glyphs2, [this.glyphIterator.index + 1, 0].concat(replacement));\n\n return true;\n }\n\n return false;\n }\n\n case 3:\n {\n // Alternate Substitution\n var _index2 = this.coverageIndex(table.coverage);\n\n if (_index2 !== -1) {\n var USER_INDEX = 0; // TODO\n\n this.glyphIterator.cur.id = table.alternateSet.get(_index2)[USER_INDEX];\n return true;\n }\n\n return false;\n }\n\n case 4:\n {\n // Ligature Substitution\n var _index3 = this.coverageIndex(table.coverage);\n\n if (_index3 === -1) {\n return false;\n }\n\n for (var _iterator60 = _createForOfIteratorHelperLoose(table.ligatureSets.get(_index3)), _step60; !(_step60 = _iterator60()).done;) {\n var ligature = _step60.value;\n var matched = this.sequenceMatchIndices(1, ligature.components);\n\n if (!matched) {\n continue;\n }\n\n var _curGlyph = this.glyphIterator.cur; // Concatenate all of the characters the new ligature will represent\n\n var characters = _curGlyph.codePoints.slice();\n\n for (var _iterator61 = _createForOfIteratorHelperLoose(matched), _step61; !(_step61 = _iterator61()).done;) {\n var _index4 = _step61.value;\n characters.push.apply(characters, this.glyphs[_index4].codePoints);\n } // Create the replacement ligature glyph\n\n\n var ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, _curGlyph.features);\n ligatureGlyph.shaperInfo = _curGlyph.shaperInfo;\n ligatureGlyph.isLigated = true;\n ligatureGlyph.substituted = true; // From Harfbuzz:\n // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\n // the ligature to keep its old ligature id. This will allow it to attach to\n // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\n // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\n // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature\n // later, we don't want them to lose their ligature id/component, otherwise\n // GPOS will fail to correctly position the mark ligature on top of the\n // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\n //\n // - If a ligature is formed of components that some of which are also ligatures\n // themselves, and those ligature components had marks attached to *their*\n // components, we have to attach the marks to the new ligature component\n // positions! Now *that*'s tricky! And these marks may be following the\n // last component of the whole sequence, so we should loop forward looking\n // for them and update them.\n //\n // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\n // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\n // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature\n // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to\n // the new ligature with a component value of 2.\n //\n // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633\n\n var isMarkLigature = _curGlyph.isMark;\n\n for (var i = 0; i < matched.length && isMarkLigature; i++) {\n isMarkLigature = this.glyphs[matched[i]].isMark;\n }\n\n ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\n var lastLigID = _curGlyph.ligatureID;\n var lastNumComps = _curGlyph.codePoints.length;\n var curComps = lastNumComps;\n var idx = this.glyphIterator.index + 1; // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\n // This allows GPOS to attach marks to the correct ligature components.\n\n for (var _iterator62 = _createForOfIteratorHelperLoose(matched), _step62; !(_step62 = _iterator62()).done;) {\n var matchIndex = _step62.value;\n\n // Don't assign new ligature components for mark ligatures (see above)\n if (isMarkLigature) {\n idx = matchIndex;\n } else {\n while (idx < matchIndex) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\n this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\n this.glyphs[idx].ligatureComponent = ligatureComponent;\n idx++;\n }\n }\n\n lastLigID = this.glyphs[idx].ligatureID;\n lastNumComps = this.glyphs[idx].codePoints.length;\n curComps += lastNumComps;\n idx++; // skip base glyph\n } // Adjust ligature components for any marks following\n\n\n if (lastLigID && !isMarkLigature) {\n for (var _i = idx; _i < this.glyphs.length; _i++) {\n if (this.glyphs[_i].ligatureID === lastLigID) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[_i].ligatureComponent || 1, lastNumComps);\n this.glyphs[_i].ligatureComponent = ligatureComponent;\n } else {\n break;\n }\n }\n } // Delete the matched glyphs, and replace the current glyph with the ligature glyph\n\n\n for (var _i2 = matched.length - 1; _i2 >= 0; _i2--) {\n this.glyphs.splice(matched[_i2], 1);\n }\n\n this.glyphs[this.glyphIterator.index] = ligatureGlyph;\n return true;\n }\n\n return false;\n }\n\n case 5:\n // Contextual Substitution\n return this.applyContext(table);\n\n case 6:\n // Chaining Contextual Substitution\n return this.applyChainingContext(table);\n\n case 7:\n // Extension Substitution\n return this.applyLookup(table.lookupType, table.extension);\n\n default:\n throw new Error(\"GSUB lookupType \".concat(lookupType, \" is not supported\"));\n }\n };\n\n return GSUBProcessor;\n}(OTProcessor);\n\nvar GPOSProcessor = /*#__PURE__*/function (_OTProcessor2) {\n _inheritsLoose(GPOSProcessor, _OTProcessor2);\n\n function GPOSProcessor() {\n return _OTProcessor2.apply(this, arguments) || this;\n }\n\n var _proto28 = GPOSProcessor.prototype;\n\n _proto28.applyPositionValue = function applyPositionValue(sequenceIndex, value) {\n var position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\n\n if (value.xAdvance != null) {\n position.xAdvance += value.xAdvance;\n }\n\n if (value.yAdvance != null) {\n position.yAdvance += value.yAdvance;\n }\n\n if (value.xPlacement != null) {\n position.xOffset += value.xPlacement;\n }\n\n if (value.yPlacement != null) {\n position.yOffset += value.yPlacement;\n } // Adjustments for font variations\n\n\n var variationProcessor = this.font._variationProcessor;\n var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n\n if (variationProcessor && variationStore) {\n if (value.xPlaDevice) {\n position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\n }\n\n if (value.yPlaDevice) {\n position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\n }\n\n if (value.xAdvDevice) {\n position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\n }\n\n if (value.yAdvDevice) {\n position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\n }\n } // TODO: device tables\n\n };\n\n _proto28.applyLookup = function applyLookup(lookupType, table) {\n switch (lookupType) {\n case 1:\n {\n // Single positioning value\n var index = this.coverageIndex(table.coverage);\n\n if (index === -1) {\n return false;\n }\n\n switch (table.version) {\n case 1:\n this.applyPositionValue(0, table.value);\n break;\n\n case 2:\n this.applyPositionValue(0, table.values.get(index));\n break;\n }\n\n return true;\n }\n\n case 2:\n {\n // Pair Adjustment Positioning\n var nextGlyph = this.glyphIterator.peek();\n\n if (!nextGlyph) {\n return false;\n }\n\n var _index = this.coverageIndex(table.coverage);\n\n if (_index === -1) {\n return false;\n }\n\n switch (table.version) {\n case 1:\n // Adjustments for glyph pairs\n var set = table.pairSets.get(_index);\n\n for (var _iterator63 = _createForOfIteratorHelperLoose(set), _step63; !(_step63 = _iterator63()).done;) {\n var _pair = _step63.value;\n\n if (_pair.secondGlyph === nextGlyph.id) {\n this.applyPositionValue(0, _pair.value1);\n this.applyPositionValue(1, _pair.value2);\n return true;\n }\n }\n\n return false;\n\n case 2:\n // Class pair adjustment\n var class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\n var class2 = this.getClassID(nextGlyph.id, table.classDef2);\n\n if (class1 === -1 || class2 === -1) {\n return false;\n }\n\n var pair = table.classRecords.get(class1).get(class2);\n this.applyPositionValue(0, pair.value1);\n this.applyPositionValue(1, pair.value2);\n return true;\n }\n }\n\n case 3:\n {\n // Cursive Attachment Positioning\n var nextIndex = this.glyphIterator.peekIndex();\n var _nextGlyph = this.glyphs[nextIndex];\n\n if (!_nextGlyph) {\n return false;\n }\n\n var curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\n\n if (!curRecord || !curRecord.exitAnchor) {\n return false;\n }\n\n var nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, _nextGlyph.id)];\n\n if (!nextRecord || !nextRecord.entryAnchor) {\n return false;\n }\n\n var entry = this.getAnchor(nextRecord.entryAnchor);\n var exit = this.getAnchor(curRecord.exitAnchor);\n var cur = this.positions[this.glyphIterator.index];\n var next = this.positions[nextIndex];\n\n switch (this.direction) {\n case 'ltr':\n cur.xAdvance = exit.x + cur.xOffset;\n var d = entry.x + next.xOffset;\n next.xAdvance -= d;\n next.xOffset -= d;\n break;\n\n case 'rtl':\n d = exit.x + cur.xOffset;\n cur.xAdvance -= d;\n cur.xOffset -= d;\n next.xAdvance = entry.x + next.xOffset;\n break;\n }\n\n if (this.glyphIterator.flags.rightToLeft) {\n this.glyphIterator.cur.cursiveAttachment = nextIndex;\n cur.yOffset = entry.y - exit.y;\n } else {\n _nextGlyph.cursiveAttachment = this.glyphIterator.index;\n cur.yOffset = exit.y - entry.y;\n }\n\n return true;\n }\n\n case 4:\n {\n // Mark to base positioning\n var markIndex = this.coverageIndex(table.markCoverage);\n\n if (markIndex === -1) {\n return false;\n } // search backward for a base glyph\n\n\n var baseGlyphIndex = this.glyphIterator.index;\n\n while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)) {}\n\n if (baseGlyphIndex < 0) {\n return false;\n }\n\n var baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\n\n if (baseIndex === -1) {\n return false;\n }\n\n var markRecord = table.markArray[markIndex];\n var baseAnchor = table.baseArray[baseIndex][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n return true;\n }\n\n case 5:\n {\n // Mark to ligature positioning\n var _markIndex = this.coverageIndex(table.markCoverage);\n\n if (_markIndex === -1) {\n return false;\n } // search backward for a base glyph\n\n\n var _baseGlyphIndex = this.glyphIterator.index;\n\n while (--_baseGlyphIndex >= 0 && this.glyphs[_baseGlyphIndex].isMark) {}\n\n if (_baseGlyphIndex < 0) {\n return false;\n }\n\n var ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[_baseGlyphIndex].id);\n\n if (ligIndex === -1) {\n return false;\n }\n\n var ligAttach = table.ligatureArray[ligIndex];\n var markGlyph = this.glyphIterator.cur;\n var ligGlyph = this.glyphs[_baseGlyphIndex];\n var compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1;\n var _markRecord = table.markArray[_markIndex];\n var _baseAnchor = ligAttach[compIndex][_markRecord.class];\n this.applyAnchor(_markRecord, _baseAnchor, _baseGlyphIndex);\n return true;\n }\n\n case 6:\n {\n // Mark to mark positioning\n var mark1Index = this.coverageIndex(table.mark1Coverage);\n\n if (mark1Index === -1) {\n return false;\n } // get the previous mark to attach to\n\n\n var prevIndex = this.glyphIterator.peekIndex(-1);\n var prev = this.glyphs[prevIndex];\n\n if (!prev || !prev.isMark) {\n return false;\n }\n\n var _cur = this.glyphIterator.cur; // The following logic was borrowed from Harfbuzz\n\n var good = false;\n\n if (_cur.ligatureID === prev.ligatureID) {\n if (!_cur.ligatureID) {\n // Marks belonging to the same base\n good = true;\n } else if (_cur.ligatureComponent === prev.ligatureComponent) {\n // Marks belonging to the same ligature component\n good = true;\n }\n } else {\n // If ligature ids don't match, it may be the case that one of the marks\n // itself is a ligature, in which case match.\n if (_cur.ligatureID && !_cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) {\n good = true;\n }\n }\n\n if (!good) {\n return false;\n }\n\n var mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\n\n if (mark2Index === -1) {\n return false;\n }\n\n var _markRecord2 = table.mark1Array[mark1Index];\n var _baseAnchor2 = table.mark2Array[mark2Index][_markRecord2.class];\n this.applyAnchor(_markRecord2, _baseAnchor2, prevIndex);\n return true;\n }\n\n case 7:\n // Contextual positioning\n return this.applyContext(table);\n\n case 8:\n // Chaining contextual positioning\n return this.applyChainingContext(table);\n\n case 9:\n // Extension positioning\n return this.applyLookup(table.lookupType, table.extension);\n\n default:\n throw new Error(\"Unsupported GPOS table: \".concat(lookupType));\n }\n };\n\n _proto28.applyAnchor = function applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\n var baseCoords = this.getAnchor(baseAnchor);\n var markCoords = this.getAnchor(markRecord.markAnchor);\n var basePos = this.positions[baseGlyphIndex];\n var markPos = this.positions[this.glyphIterator.index];\n markPos.xOffset = baseCoords.x - markCoords.x;\n markPos.yOffset = baseCoords.y - markCoords.y;\n this.glyphIterator.cur.markAttachment = baseGlyphIndex;\n };\n\n _proto28.getAnchor = function getAnchor(anchor) {\n // TODO: contour point, device tables\n var x = anchor.xCoordinate;\n var y = anchor.yCoordinate; // Adjustments for font variations\n\n var variationProcessor = this.font._variationProcessor;\n var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n\n if (variationProcessor && variationStore) {\n if (anchor.xDeviceTable) {\n x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\n }\n\n if (anchor.yDeviceTable) {\n y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\n }\n }\n\n return {\n x: x,\n y: y\n };\n };\n\n _proto28.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {\n _OTProcessor2.prototype.applyFeatures.call(this, userFeatures, glyphs, advances);\n\n for (var i = 0; i < this.glyphs.length; i++) {\n this.fixCursiveAttachment(i);\n }\n\n this.fixMarkAttachment();\n };\n\n _proto28.fixCursiveAttachment = function fixCursiveAttachment(i) {\n var glyph = this.glyphs[i];\n\n if (glyph.cursiveAttachment != null) {\n var j = glyph.cursiveAttachment;\n glyph.cursiveAttachment = null;\n this.fixCursiveAttachment(j);\n this.positions[i].yOffset += this.positions[j].yOffset;\n }\n };\n\n _proto28.fixMarkAttachment = function fixMarkAttachment() {\n for (var i = 0; i < this.glyphs.length; i++) {\n var glyph = this.glyphs[i];\n\n if (glyph.markAttachment != null) {\n var j = glyph.markAttachment;\n this.positions[i].xOffset += this.positions[j].xOffset;\n this.positions[i].yOffset += this.positions[j].yOffset;\n\n if (this.direction === 'ltr') {\n for (var k = j; k < i; k++) {\n this.positions[i].xOffset -= this.positions[k].xAdvance;\n this.positions[i].yOffset -= this.positions[k].yAdvance;\n }\n } else {\n for (var _k = j + 1; _k < i + 1; _k++) {\n this.positions[i].xOffset += this.positions[_k].xAdvance;\n this.positions[i].yOffset += this.positions[_k].yAdvance;\n }\n }\n }\n }\n };\n\n return GPOSProcessor;\n}(OTProcessor);\n\nvar OTLayoutEngine = /*#__PURE__*/function () {\n function OTLayoutEngine(font) {\n this.font = font;\n this.glyphInfos = null;\n this.plan = null;\n this.GSUBProcessor = null;\n this.GPOSProcessor = null;\n this.fallbackPosition = true;\n\n if (font.GSUB) {\n this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\n }\n\n if (font.GPOS) {\n this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\n }\n }\n\n var _proto29 = OTLayoutEngine.prototype;\n\n _proto29.setup = function setup(glyphRun) {\n var _this8 = this;\n\n // Map glyphs to GlyphInfo objects so data can be passed between\n // GSUB and GPOS without mutating the real (shared) Glyph objects.\n this.glyphInfos = glyphRun.glyphs.map(function (glyph) {\n return new GlyphInfo(_this8.font, glyph.id, [].concat(glyph.codePoints));\n }); // Select a script based on what is available in GSUB/GPOS.\n\n var script = null;\n\n if (this.GPOSProcessor) {\n script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n }\n\n if (this.GSUBProcessor) {\n script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n } // Choose a shaper based on the script, and setup a shaping plan.\n // This determines which features to apply to which glyphs.\n\n\n this.shaper = choose(script);\n this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\n this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); // Assign chosen features to output glyph run\n\n for (var key in this.plan.allFeatures) {\n glyphRun.features[key] = true;\n }\n };\n\n _proto29.substitute = function substitute(glyphRun) {\n var _this9 = this;\n\n if (this.GSUBProcessor) {\n this.plan.process(this.GSUBProcessor, this.glyphInfos); // Map glyph infos back to normal Glyph objects\n\n glyphRun.glyphs = this.glyphInfos.map(function (glyphInfo) {\n return _this9.font.getGlyph(glyphInfo.id, glyphInfo.codePoints);\n });\n }\n };\n\n _proto29.position = function position(glyphRun) {\n if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n }\n\n if (this.GPOSProcessor) {\n this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\n }\n\n if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n } // Reverse the glyphs and positions if the script is right-to-left\n\n\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n glyphRun.positions.reverse();\n }\n\n return this.GPOSProcessor && this.GPOSProcessor.features;\n };\n\n _proto29.zeroMarkAdvances = function zeroMarkAdvances(positions) {\n for (var i = 0; i < this.glyphInfos.length; i++) {\n if (this.glyphInfos[i].isMark) {\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n };\n\n _proto29.cleanup = function cleanup() {\n this.glyphInfos = null;\n this.plan = null;\n this.shaper = null;\n };\n\n _proto29.getAvailableFeatures = function getAvailableFeatures(script, language) {\n var features = [];\n\n if (this.GSUBProcessor) {\n this.GSUBProcessor.selectScript(script, language);\n features.push.apply(features, Object.keys(this.GSUBProcessor.features));\n }\n\n if (this.GPOSProcessor) {\n this.GPOSProcessor.selectScript(script, language);\n features.push.apply(features, Object.keys(this.GPOSProcessor.features));\n }\n\n return features;\n };\n\n return OTLayoutEngine;\n}();\n\nvar LayoutEngine = /*#__PURE__*/function () {\n function LayoutEngine(font) {\n this.font = font;\n this.unicodeLayoutEngine = null;\n this.kernProcessor = null; // Choose an advanced layout engine. We try the AAT morx table first since more\n // scripts are currently supported because the shaping logic is built into the font.\n\n if (this.font.morx) {\n this.engine = new AATLayoutEngine(this.font);\n } else if (this.font.GSUB || this.font.GPOS) {\n this.engine = new OTLayoutEngine(this.font);\n }\n }\n\n var _proto30 = LayoutEngine.prototype;\n\n _proto30.layout = function layout(string, features, script, language, direction) {\n // Make the features parameter optional\n if (typeof features === 'string') {\n direction = language;\n language = script;\n script = features;\n features = [];\n } // Map string to glyphs if needed\n\n\n if (typeof string === 'string') {\n // Attempt to detect the script from the string if not provided.\n if (script == null) {\n script = forString(string);\n }\n\n var glyphs = this.font.glyphsForString(string);\n } else {\n // Attempt to detect the script from the glyph code points if not provided.\n if (script == null) {\n var codePoints = [];\n\n for (var _iterator64 = _createForOfIteratorHelperLoose(string), _step64; !(_step64 = _iterator64()).done;) {\n var glyph = _step64.value;\n codePoints.push.apply(codePoints, glyph.codePoints);\n }\n\n script = forCodePoints(codePoints);\n }\n\n var glyphs = string;\n }\n\n var glyphRun = new GlyphRun(glyphs, features, script, language, direction); // Return early if there are no glyphs\n\n if (glyphs.length === 0) {\n glyphRun.positions = [];\n return glyphRun;\n } // Setup the advanced layout engine\n\n\n if (this.engine && this.engine.setup) {\n this.engine.setup(glyphRun);\n } // Substitute and position the glyphs\n\n\n this.substitute(glyphRun);\n this.position(glyphRun);\n this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); // Let the layout engine clean up any state it might have\n\n if (this.engine && this.engine.cleanup) {\n this.engine.cleanup();\n }\n\n return glyphRun;\n };\n\n _proto30.substitute = function substitute(glyphRun) {\n // Call the advanced layout engine to make substitutions\n if (this.engine && this.engine.substitute) {\n this.engine.substitute(glyphRun);\n }\n };\n\n _proto30.position = function position(glyphRun) {\n // Get initial glyph positions\n glyphRun.positions = glyphRun.glyphs.map(function (glyph) {\n return new GlyphPosition(glyph.advanceWidth);\n });\n var positioned = null; // Call the advanced layout engine. Returns the features applied.\n\n if (this.engine && this.engine.position) {\n positioned = this.engine.position(glyphRun);\n } // if there is no GPOS table, use unicode properties to position marks.\n\n\n if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\n if (!this.unicodeLayoutEngine) {\n this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\n }\n\n this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\n } // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\n\n\n if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\n if (!this.kernProcessor) {\n this.kernProcessor = new KernProcessor(this.font);\n }\n\n this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\n glyphRun.features.kern = true;\n }\n };\n\n _proto30.hideDefaultIgnorables = function hideDefaultIgnorables(glyphs, positions) {\n var space = this.font.glyphForCodePoint(0x20);\n\n for (var i = 0; i < glyphs.length; i++) {\n if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\n glyphs[i] = space;\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n };\n\n _proto30.isDefaultIgnorable = function isDefaultIgnorable(ch) {\n // From DerivedCoreProperties.txt in the Unicode database,\n // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\n // Harfbuzz and Uniscribe do.\n var plane = ch >> 16;\n\n if (plane === 0) {\n // BMP\n switch (ch >> 8) {\n case 0x00:\n return ch === 0x00AD;\n\n case 0x03:\n return ch === 0x034F;\n\n case 0x06:\n return ch === 0x061C;\n\n case 0x17:\n return 0x17B4 <= ch && ch <= 0x17B5;\n\n case 0x18:\n return 0x180B <= ch && ch <= 0x180E;\n\n case 0x20:\n return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F;\n\n case 0xFE:\n return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF;\n\n case 0xFF:\n return 0xFFF0 <= ch && ch <= 0xFFF8;\n\n default:\n return false;\n }\n } else {\n // Other planes\n switch (plane) {\n case 0x01:\n return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A;\n\n case 0x0E:\n return 0xE0000 <= ch && ch <= 0xE0FFF;\n\n default:\n return false;\n }\n }\n };\n\n _proto30.getAvailableFeatures = function getAvailableFeatures(script, language) {\n var features = [];\n\n if (this.engine) {\n features.push.apply(features, this.engine.getAvailableFeatures(script, language));\n }\n\n if (this.font.kern && features.indexOf('kern') === -1) {\n features.push('kern');\n }\n\n return features;\n };\n\n _proto30.stringsForGlyph = function stringsForGlyph(gid) {\n var result = new Set();\n\n var codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\n\n for (var _iterator65 = _createForOfIteratorHelperLoose(codePoints), _step65; !(_step65 = _iterator65()).done;) {\n var codePoint = _step65.value;\n result.add(String.fromCodePoint(codePoint));\n }\n\n if (this.engine && this.engine.stringsForGlyph) {\n for (var _iterator66 = _createForOfIteratorHelperLoose(this.engine.stringsForGlyph(gid)), _step66; !(_step66 = _iterator66()).done;) {\n var string = _step66.value;\n result.add(string);\n }\n }\n\n return Array.from(result);\n };\n\n return LayoutEngine;\n}();\n\nvar SVG_COMMANDS = {\n moveTo: 'M',\n lineTo: 'L',\n quadraticCurveTo: 'Q',\n bezierCurveTo: 'C',\n closePath: 'Z'\n};\n/**\r\n * Path objects are returned by glyphs and represent the actual\r\n * vector outlines for each glyph in the font. Paths can be converted\r\n * to SVG path data strings, or to functions that can be applied to\r\n * render the path to a graphics context.\r\n */\n\nvar Path = /*#__PURE__*/function () {\n function Path() {\n this.commands = [];\n this._bbox = null;\n this._cbox = null;\n }\n /**\r\n * Compiles the path to a JavaScript function that can be applied with\r\n * a graphics context in order to render the path.\r\n * @return {string}\r\n */\n\n\n var _proto31 = Path.prototype;\n\n _proto31.toFunction = function toFunction() {\n var _this10 = this;\n\n return function (ctx) {\n _this10.commands.forEach(function (c) {\n return ctx[c.command].apply(ctx, c.args);\n });\n };\n }\n /**\r\n * Converts the path to an SVG path data string\r\n * @return {string}\r\n */\n ;\n\n _proto31.toSVG = function toSVG() {\n var cmds = this.commands.map(function (c) {\n var args = c.args.map(function (arg) {\n return Math.round(arg * 100) / 100;\n });\n return \"\".concat(SVG_COMMANDS[c.command]).concat(args.join(' '));\n });\n return cmds.join('');\n }\n /**\r\n * Gets the \"control box\" of a path.\r\n * This is like the bounding box, but it includes all points including\r\n * control points of bezier segments and is much faster to compute than\r\n * the real bounding box.\r\n * @type {BBox}\r\n */\n ;\n\n /**\r\n * Applies a mapping function to each point in the path.\r\n * @param {function} fn\r\n * @return {Path}\r\n */\n _proto31.mapPoints = function mapPoints(fn) {\n var path = new Path();\n\n for (var _iterator67 = _createForOfIteratorHelperLoose(this.commands), _step67; !(_step67 = _iterator67()).done;) {\n var c = _step67.value;\n var args = [];\n\n for (var i = 0; i < c.args.length; i += 2) {\n var _fn = fn(c.args[i], c.args[i + 1]),\n x = _fn[0],\n y = _fn[1];\n\n args.push(x, y);\n }\n\n path[c.command].apply(path, args);\n }\n\n return path;\n }\n /**\r\n * Transforms the path by the given matrix.\r\n */\n ;\n\n _proto31.transform = function transform(m0, m1, m2, m3, m4, m5) {\n return this.mapPoints(function (x, y) {\n x = m0 * x + m2 * y + m4;\n y = m1 * x + m3 * y + m5;\n return [x, y];\n });\n }\n /**\r\n * Translates the path by the given offset.\r\n */\n ;\n\n _proto31.translate = function translate(x, y) {\n return this.transform(1, 0, 0, 1, x, y);\n }\n /**\r\n * Rotates the path by the given angle (in radians).\r\n */\n ;\n\n _proto31.rotate = function rotate(angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n return this.transform(cos, sin, -sin, cos, 0, 0);\n }\n /**\r\n * Scales the path.\r\n */\n ;\n\n _proto31.scale = function scale(scaleX, scaleY) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n\n return this.transform(scaleX, 0, 0, scaleY, 0, 0);\n };\n\n _createClass(Path, [{\n key: \"cbox\",\n get: function get() {\n if (!this._cbox) {\n var cbox = new BBox();\n\n for (var _iterator68 = _createForOfIteratorHelperLoose(this.commands), _step68; !(_step68 = _iterator68()).done;) {\n var command = _step68.value;\n\n for (var i = 0; i < command.args.length; i += 2) {\n cbox.addPoint(command.args[i], command.args[i + 1]);\n }\n }\n\n this._cbox = Object.freeze(cbox);\n }\n\n return this._cbox;\n }\n /**\r\n * Gets the exact bounding box of the path by evaluating curve segments.\r\n * Slower to compute than the control box, but more accurate.\r\n * @type {BBox}\r\n */\n\n }, {\n key: \"bbox\",\n get: function get() {\n if (this._bbox) {\n return this._bbox;\n }\n\n var bbox = new BBox();\n var cx = 0,\n cy = 0;\n\n var f = function f(t) {\n return Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i];\n };\n\n for (var _iterator69 = _createForOfIteratorHelperLoose(this.commands), _step69; !(_step69 = _iterator69()).done;) {\n var c = _step69.value;\n\n switch (c.command) {\n case 'moveTo':\n case 'lineTo':\n var _c$args = c.args,\n x = _c$args[0],\n y = _c$args[1];\n bbox.addPoint(x, y);\n cx = x;\n cy = y;\n break;\n\n case 'quadraticCurveTo':\n case 'bezierCurveTo':\n if (c.command === 'quadraticCurveTo') {\n // http://fontforge.org/bezier.html\n var _c$args2 = c.args,\n qp1x = _c$args2[0],\n qp1y = _c$args2[1],\n p3x = _c$args2[2],\n p3y = _c$args2[3];\n var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)\n\n var cp1y = cy + 2 / 3 * (qp1y - cy);\n var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)\n\n var cp2y = p3y + 2 / 3 * (qp1y - p3y);\n } else {\n var _c$args3 = c.args,\n cp1x = _c$args3[0],\n cp1y = _c$args3[1],\n cp2x = _c$args3[2],\n cp2y = _c$args3[3],\n p3x = _c$args3[4],\n p3y = _c$args3[5];\n } // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n\n\n bbox.addPoint(p3x, p3y);\n var p0 = [cx, cy];\n var p1 = [cp1x, cp1y];\n var p2 = [cp2x, cp2y];\n var p3 = [p3x, p3y];\n\n for (var i = 0; i <= 1; i++) {\n var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n\n var t = -c / b;\n\n if (0 < t && t < 1) {\n if (i === 0) {\n bbox.addPoint(f(t), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t));\n }\n }\n\n continue;\n }\n\n var b2ac = Math.pow(b, 2) - 4 * c * a;\n\n if (b2ac < 0) {\n continue;\n }\n\n var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n\n if (0 < t1 && t1 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t1), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t1));\n }\n }\n\n var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n\n if (0 < t2 && t2 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t2), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t2));\n }\n }\n }\n\n cx = p3x;\n cy = p3y;\n break;\n }\n }\n\n return this._bbox = Object.freeze(bbox);\n }\n }]);\n\n return Path;\n}();\n\nvar _loop = function _loop(command) {\n Path.prototype[command] = function () {\n this._bbox = this._cbox = null;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this.commands.push({\n command: command,\n args: args\n });\n return this;\n };\n};\n\nfor (var _i23 = 0, _arr = ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']; _i23 < _arr.length; _i23++) {\n var command = _arr[_i23];\n\n _loop(command);\n}\n\nvar StandardNames = ['.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];\n\nvar _class$3;\n/**\r\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\r\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\r\n *\r\n * You do not create glyph objects directly. They are created by various methods on the font object.\r\n * There are several subclasses of the base Glyph class internally that may be returned depending\r\n * on the font format, but they all inherit from this class.\r\n */\n\n\nvar Glyph = (_class$3 = /*#__PURE__*/function () {\n function Glyph(id, codePoints, font) {\n /**\r\n * The glyph id in the font\r\n * @type {number}\r\n */\n this.id = id;\n /**\r\n * An array of unicode code points that are represented by this glyph.\r\n * There can be multiple code points in the case of ligatures and other glyphs\r\n * that represent multiple visual characters.\r\n * @type {number[]}\r\n */\n\n this.codePoints = codePoints;\n this._font = font; // TODO: get this info from GDEF if available\n\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n this.isLigature = this.codePoints.length > 1;\n }\n\n var _proto32 = Glyph.prototype;\n\n _proto32._getPath = function _getPath() {\n return new Path();\n };\n\n _proto32._getCBox = function _getCBox() {\n return this.path.cbox;\n };\n\n _proto32._getBBox = function _getBBox() {\n return this.path.bbox;\n };\n\n _proto32._getTableMetrics = function _getTableMetrics(table) {\n if (this.id < table.metrics.length) {\n return table.metrics.get(this.id);\n }\n\n var metric = table.metrics.get(table.metrics.length - 1);\n var res = {\n advance: metric ? metric.advance : 0,\n bearing: table.bearings.get(this.id - table.metrics.length) || 0\n };\n return res;\n };\n\n _proto32._getMetrics = function _getMetrics(cbox) {\n if (this._metrics) {\n return this._metrics;\n }\n\n var _this$_getTableMetric = this._getTableMetrics(this._font.hmtx),\n advanceWidth = _this$_getTableMetric.advance,\n leftBearing = _this$_getTableMetric.bearing; // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\n\n\n if (this._font.vmtx) {\n var _this$_getTableMetric2 = this._getTableMetrics(this._font.vmtx),\n advanceHeight = _this$_getTableMetric2.advance,\n topBearing = _this$_getTableMetric2.bearing;\n } else {\n var os2;\n\n if (typeof cbox === 'undefined' || cbox === null) {\n cbox = this.cbox;\n }\n\n if ((os2 = this._font['OS/2']) && os2.version > 0) {\n var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\n var topBearing = os2.typoAscender - cbox.maxY;\n } else {\n var hhea = this._font.hhea;\n var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\n var topBearing = hhea.ascent - cbox.maxY;\n }\n }\n\n if (this._font._variationProcessor && this._font.HVAR) {\n advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\n }\n\n return this._metrics = {\n advanceWidth: advanceWidth,\n advanceHeight: advanceHeight,\n leftBearing: leftBearing,\n topBearing: topBearing\n };\n }\n /**\r\n * The glyph’s control box.\r\n * This is often the same as the bounding box, but is faster to compute.\r\n * Because of the way bezier curves are defined, some of the control points\r\n * can be outside of the bounding box. Where `bbox` takes this into account,\r\n * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\r\n * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\r\n * for a more detailed description.\r\n *\r\n * @type {BBox}\r\n */\n ;\n\n /**\r\n * Returns a path scaled to the given font size.\r\n * @param {number} size\r\n * @return {Path}\r\n */\n _proto32.getScaledPath = function getScaledPath(size) {\n var scale = 1 / this._font.unitsPerEm * size;\n return this.path.scale(scale);\n }\n /**\r\n * The glyph's advance width.\r\n * @type {number}\r\n */\n ;\n\n _proto32._getName = function _getName() {\n var post = this._font.post;\n\n if (!post) {\n return null;\n }\n\n switch (post.version) {\n case 1:\n return StandardNames[this.id];\n\n case 2:\n var id = post.glyphNameIndex[this.id];\n\n if (id < StandardNames.length) {\n return StandardNames[id];\n }\n\n return post.names[id - StandardNames.length];\n\n case 2.5:\n return StandardNames[this.id + post.offsets[this.id]];\n\n case 4:\n return String.fromCharCode(post.map[this.id]);\n }\n }\n /**\r\n * The glyph's name\r\n * @type {string}\r\n */\n ;\n\n /**\r\n * Renders the glyph to the given graphics context, at the specified font size.\r\n * @param {CanvasRenderingContext2d} ctx\r\n * @param {number} size\r\n */\n _proto32.render = function render(ctx, size) {\n ctx.save();\n var scale = 1 / this._font.head.unitsPerEm * size;\n ctx.scale(scale, scale);\n var fn = this.path.toFunction();\n fn(ctx);\n ctx.fill();\n ctx.restore();\n };\n\n _createClass(Glyph, [{\n key: \"cbox\",\n get: function get() {\n return this._getCBox();\n }\n /**\r\n * The glyph’s bounding box, i.e. the rectangle that encloses the\r\n * glyph outline as tightly as possible.\r\n * @type {BBox}\r\n */\n\n }, {\n key: \"bbox\",\n get: function get() {\n return this._getBBox();\n }\n /**\r\n * A vector Path object representing the glyph outline.\r\n * @type {Path}\r\n */\n\n }, {\n key: \"path\",\n get: function get() {\n // Cache the path so we only decode it once\n // Decoding is actually performed by subclasses\n return this._getPath();\n }\n }, {\n key: \"advanceWidth\",\n get: function get() {\n return this._getMetrics().advanceWidth;\n }\n /**\r\n * The glyph's advance height.\r\n * @type {number}\r\n */\n\n }, {\n key: \"advanceHeight\",\n get: function get() {\n return this._getMetrics().advanceHeight;\n }\n }, {\n key: \"ligatureCaretPositions\",\n get: function get() {}\n }, {\n key: \"name\",\n get: function get() {\n return this._getName();\n }\n }]);\n\n return Glyph;\n}(), (_applyDecoratedDescriptor(_class$3.prototype, \"cbox\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"cbox\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"bbox\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"bbox\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"path\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"path\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"advanceWidth\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"advanceWidth\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"advanceHeight\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"advanceHeight\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"name\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"name\"), _class$3.prototype)), _class$3);\nvar GlyfHeader = new r.Struct({\n numberOfContours: r.int16,\n // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16\n}); // Flags for simple glyphs\n\nvar ON_CURVE = 1 << 0;\nvar X_SHORT_VECTOR = 1 << 1;\nvar Y_SHORT_VECTOR = 1 << 2;\nvar REPEAT = 1 << 3;\nvar SAME_X = 1 << 4;\nvar SAME_Y = 1 << 5; // Flags for composite glyphs\n\nvar ARG_1_AND_2_ARE_WORDS = 1 << 0;\nvar WE_HAVE_A_SCALE = 1 << 3;\nvar MORE_COMPONENTS = 1 << 5;\nvar WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nvar WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nvar WE_HAVE_INSTRUCTIONS = 1 << 8;\n\nvar Point = /*#__PURE__*/function () {\n function Point(onCurve, endContour, x, y) {\n if (x === void 0) {\n x = 0;\n }\n\n if (y === void 0) {\n y = 0;\n }\n\n this.onCurve = onCurve;\n this.endContour = endContour;\n this.x = x;\n this.y = y;\n }\n\n var _proto33 = Point.prototype;\n\n _proto33.copy = function copy() {\n return new Point(this.onCurve, this.endContour, this.x, this.y);\n };\n\n return Point;\n}(); // Represents a component in a composite glyph\n\n\nvar Component = function Component(glyphID, dx, dy) {\n this.glyphID = glyphID;\n this.dx = dx;\n this.dy = dy;\n this.pos = 0;\n this.scaleX = this.scaleY = 1;\n this.scale01 = this.scale10 = 0;\n};\n/**\r\n * Represents a TrueType glyph.\r\n */\n\n\nvar TTFGlyph = /*#__PURE__*/function (_Glyph) {\n _inheritsLoose(TTFGlyph, _Glyph);\n\n function TTFGlyph() {\n return _Glyph.apply(this, arguments) || this;\n }\n\n var _proto34 = TTFGlyph.prototype;\n\n // Parses just the glyph header and returns the bounding box\n _proto34._getCBox = function _getCBox(internal) {\n // We need to decode the glyph if variation processing is requested,\n // so it's easier just to recompute the path's cbox after decoding.\n if (this._font._variationProcessor && !internal) {\n return this.path.cbox;\n }\n\n var stream = this._font._getTableStream('glyf');\n\n stream.pos += this._font.loca.offsets[this.id];\n var glyph = GlyfHeader.decode(stream);\n var cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\n return Object.freeze(cbox);\n } // Parses a single glyph coordinate\n ;\n\n _proto34._parseGlyphCoord = function _parseGlyphCoord(stream, prev, short, same) {\n if (short) {\n var val = stream.readUInt8();\n\n if (!same) {\n val = -val;\n }\n\n val += prev;\n } else {\n if (same) {\n var val = prev;\n } else {\n var val = prev + stream.readInt16BE();\n }\n }\n\n return val;\n } // Decodes the glyph data into points for simple glyphs,\n // or components for composite glyphs\n ;\n\n _proto34._decode = function _decode() {\n var glyfPos = this._font.loca.offsets[this.id];\n var nextPos = this._font.loca.offsets[this.id + 1]; // Nothing to do if there is no data for this glyph\n\n if (glyfPos === nextPos) {\n return null;\n }\n\n var stream = this._font._getTableStream('glyf');\n\n stream.pos += glyfPos;\n var startPos = stream.pos;\n var glyph = GlyfHeader.decode(stream);\n\n if (glyph.numberOfContours > 0) {\n this._decodeSimple(glyph, stream);\n } else if (glyph.numberOfContours < 0) {\n this._decodeComposite(glyph, stream, startPos);\n }\n\n return glyph;\n };\n\n _proto34._decodeSimple = function _decodeSimple(glyph, stream) {\n // this is a simple glyph\n glyph.points = [];\n var endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\n glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\n var flags = [];\n var numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n\n while (flags.length < numCoords) {\n var flag = stream.readUInt8();\n flags.push(flag); // check for repeat flag\n\n if (flag & REPEAT) {\n var count = stream.readUInt8();\n\n for (var j = 0; j < count; j++) {\n flags.push(flag);\n }\n }\n }\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n var point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\n glyph.points.push(point);\n }\n\n var px = 0;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\n }\n\n var py = 0;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\n }\n\n if (this._font._variationProcessor) {\n var points = glyph.points.slice();\n points.push.apply(points, this._getPhantomPoints(glyph));\n\n this._font._variationProcessor.transformPoints(this.id, points);\n\n glyph.phantomPoints = points.slice(-4);\n }\n\n return;\n };\n\n _proto34._decodeComposite = function _decodeComposite(glyph, stream, offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n // this is a composite glyph\n glyph.components = [];\n var haveInstructions = false;\n var flags = MORE_COMPONENTS;\n\n while (flags & MORE_COMPONENTS) {\n flags = stream.readUInt16BE();\n var gPos = stream.pos - offset;\n var glyphID = stream.readUInt16BE();\n\n if (!haveInstructions) {\n haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\n }\n\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n var dx = stream.readInt16BE();\n var dy = stream.readInt16BE();\n } else {\n var dx = stream.readInt8();\n var dy = stream.readInt8();\n }\n\n var component = new Component(glyphID, dx, dy);\n component.pos = gPos;\n\n if (flags & WE_HAVE_A_SCALE) {\n // fixed number with 14 bits of fraction\n component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n }\n\n glyph.components.push(component);\n }\n\n if (this._font._variationProcessor) {\n var points = [];\n\n for (var j = 0; j < glyph.components.length; j++) {\n var component = glyph.components[j];\n points.push(new Point(true, true, component.dx, component.dy));\n }\n\n points.push.apply(points, this._getPhantomPoints(glyph));\n\n this._font._variationProcessor.transformPoints(this.id, points);\n\n glyph.phantomPoints = points.splice(-4, 4);\n\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n glyph.components[i].dx = point.x;\n glyph.components[i].dy = point.y;\n }\n }\n\n return haveInstructions;\n };\n\n _proto34._getPhantomPoints = function _getPhantomPoints(glyph) {\n var cbox = this._getCBox(true);\n\n if (this._metrics == null) {\n this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\n }\n\n var _this$_metrics = this._metrics,\n advanceWidth = _this$_metrics.advanceWidth,\n advanceHeight = _this$_metrics.advanceHeight,\n leftBearing = _this$_metrics.leftBearing,\n topBearing = _this$_metrics.topBearing;\n return [new Point(false, true, glyph.xMin - leftBearing, 0), new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0), new Point(false, true, 0, glyph.yMax + topBearing), new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)];\n } // Decodes font data, resolves composite glyphs, and returns an array of contours\n ;\n\n _proto34._getContours = function _getContours() {\n var glyph = this._decode();\n\n if (!glyph) {\n return [];\n }\n\n var points = [];\n\n if (glyph.numberOfContours < 0) {\n // resolve composite glyphs\n for (var _iterator70 = _createForOfIteratorHelperLoose(glyph.components), _step70; !(_step70 = _iterator70()).done;) {\n var component = _step70.value;\n\n var _contours = this._font.getGlyph(component.glyphID)._getContours();\n\n for (var i = 0; i < _contours.length; i++) {\n var contour = _contours[i];\n\n for (var j = 0; j < contour.length; j++) {\n var _point = contour[j];\n var x = _point.x * component.scaleX + _point.y * component.scale01 + component.dx;\n var y = _point.y * component.scaleY + _point.x * component.scale10 + component.dy;\n points.push(new Point(_point.onCurve, _point.endContour, x, y));\n }\n }\n }\n } else {\n points = glyph.points || [];\n } // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\n\n\n if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\n this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\n this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\n this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;\n this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;\n }\n\n var contours = [];\n var cur = [];\n\n for (var k = 0; k < points.length; k++) {\n var point = points[k];\n cur.push(point);\n\n if (point.endContour) {\n contours.push(cur);\n cur = [];\n }\n }\n\n return contours;\n };\n\n _proto34._getMetrics = function _getMetrics() {\n if (this._metrics) {\n return this._metrics;\n }\n\n var cbox = this._getCBox(true);\n\n _Glyph.prototype._getMetrics.call(this, cbox);\n\n if (this._font._variationProcessor && !this._font.HVAR) {\n // No HVAR table, decode the glyph. This triggers recomputation of metrics.\n this.path;\n }\n\n return this._metrics;\n } // Converts contours to a Path object that can be rendered\n ;\n\n _proto34._getPath = function _getPath() {\n var contours = this._getContours();\n\n var path = new Path();\n\n for (var i = 0; i < contours.length; i++) {\n var contour = contours[i];\n var firstPt = contour[0];\n var lastPt = contour[contour.length - 1];\n var start = 0;\n\n if (firstPt.onCurve) {\n // The first point will be consumed by the moveTo command, so skip in the loop\n var curvePt = null;\n start = 1;\n } else {\n if (lastPt.onCurve) {\n // Start at the last point if the first point is off curve and the last point is on curve\n firstPt = lastPt;\n } else {\n // Start at the middle if both the first and last points are off curve\n firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\n }\n\n var curvePt = firstPt;\n }\n\n path.moveTo(firstPt.x, firstPt.y);\n\n for (var j = start; j < contour.length; j++) {\n var pt = contour[j];\n var prevPt = j === 0 ? firstPt : contour[j - 1];\n\n if (prevPt.onCurve && pt.onCurve) {\n path.lineTo(pt.x, pt.y);\n } else if (prevPt.onCurve && !pt.onCurve) {\n var curvePt = pt;\n } else if (!prevPt.onCurve && !pt.onCurve) {\n var midX = (prevPt.x + pt.x) / 2;\n var midY = (prevPt.y + pt.y) / 2;\n path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\n var curvePt = pt;\n } else if (!prevPt.onCurve && pt.onCurve) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\n var curvePt = null;\n } else {\n throw new Error(\"Unknown TTF path state\");\n }\n } // Connect the first and last points\n\n\n if (curvePt) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\n }\n\n path.closePath();\n }\n\n return path;\n };\n\n return TTFGlyph;\n}(Glyph);\n/**\r\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\r\n */\n\n\nvar CFFGlyph = /*#__PURE__*/function (_Glyph2) {\n _inheritsLoose(CFFGlyph, _Glyph2);\n\n function CFFGlyph() {\n return _Glyph2.apply(this, arguments) || this;\n }\n\n var _proto35 = CFFGlyph.prototype;\n\n _proto35._getName = function _getName() {\n if (this._font.CFF2) {\n return _Glyph2.prototype._getName.call(this);\n }\n\n return this._font['CFF '].getGlyphName(this.id);\n };\n\n _proto35.bias = function bias(s) {\n if (s.length < 1240) {\n return 107;\n } else if (s.length < 33900) {\n return 1131;\n } else {\n return 32768;\n }\n };\n\n _proto35._getPath = function _getPath() {\n var cff = this._font.CFF2 || this._font['CFF '];\n var stream = cff.stream;\n var str = cff.topDict.CharStrings[this.id];\n var end = str.offset + str.length;\n stream.pos = str.offset;\n var path = new Path();\n var stack = [];\n var trans = [];\n var width = null;\n var nStems = 0;\n var x = 0,\n y = 0;\n var usedGsubrs;\n var usedSubrs;\n var open = false;\n this._usedGsubrs = usedGsubrs = {};\n this._usedSubrs = usedSubrs = {};\n var gsubrs = cff.globalSubrIndex || [];\n var gsubrsBias = this.bias(gsubrs);\n var privateDict = cff.privateDictForGlyph(this.id) || {};\n var subrs = privateDict.Subrs || [];\n var subrsBias = this.bias(subrs);\n var vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\n var vsindex = privateDict.vsindex;\n var variationProcessor = this._font._variationProcessor;\n\n function checkWidth() {\n if (width == null) {\n width = stack.shift() + privateDict.nominalWidthX;\n }\n }\n\n function parseStems() {\n if (stack.length % 2 !== 0) {\n checkWidth();\n }\n\n nStems += stack.length >> 1;\n return stack.length = 0;\n }\n\n function moveTo(x, y) {\n if (open) {\n path.closePath();\n }\n\n path.moveTo(x, y);\n open = true;\n }\n\n var parse = function parse() {\n while (stream.pos < end) {\n var op = stream.readUInt8();\n\n if (op < 32) {\n switch (op) {\n case 1: // hstem\n\n case 3: // vstem\n\n case 18: // hstemhm\n\n case 23:\n // vstemhm\n parseStems();\n break;\n\n case 4:\n // vmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n\n y += stack.shift();\n moveTo(x, y);\n break;\n\n case 5:\n // rlineto\n while (stack.length >= 2) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n\n break;\n\n case 6: // hlineto\n\n case 7:\n // vlineto\n var phase = op === 6;\n\n while (stack.length >= 1) {\n if (phase) {\n x += stack.shift();\n } else {\n y += stack.shift();\n }\n\n path.lineTo(x, y);\n phase = !phase;\n }\n\n break;\n\n case 8:\n // rrcurveto\n while (stack.length > 0) {\n var c1x = x + stack.shift();\n var c1y = y + stack.shift();\n var c2x = c1x + stack.shift();\n var c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n\n break;\n\n case 10:\n // callsubr\n var index = stack.pop() + subrsBias;\n var subr = subrs[index];\n\n if (subr) {\n usedSubrs[index] = true;\n var p = stream.pos;\n var e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n\n break;\n\n case 11:\n // return\n if (cff.version >= 2) {\n break;\n }\n\n return;\n\n case 14:\n // endchar\n if (cff.version >= 2) {\n break;\n }\n\n if (stack.length > 0) {\n checkWidth();\n }\n\n if (open) {\n path.closePath();\n open = false;\n }\n\n break;\n\n case 15:\n {\n // vsindex\n if (cff.version < 2) {\n throw new Error('vsindex operator not supported in CFF v1');\n }\n\n vsindex = stack.pop();\n break;\n }\n\n case 16:\n {\n // blend\n if (cff.version < 2) {\n throw new Error('blend operator not supported in CFF v1');\n }\n\n if (!variationProcessor) {\n throw new Error('blend operator in non-variation font');\n }\n\n var blendVector = variationProcessor.getBlendVector(vstore, vsindex);\n var numBlends = stack.pop();\n var numOperands = numBlends * blendVector.length;\n var delta = stack.length - numOperands;\n var base = delta - numBlends;\n\n for (var i = 0; i < numBlends; i++) {\n var sum = stack[base + i];\n\n for (var j = 0; j < blendVector.length; j++) {\n sum += blendVector[j] * stack[delta++];\n }\n\n stack[base + i] = sum;\n }\n\n while (numOperands--) {\n stack.pop();\n }\n\n break;\n }\n\n case 19: // hintmask\n\n case 20:\n // cntrmask\n parseStems();\n stream.pos += nStems + 7 >> 3;\n break;\n\n case 21:\n // rmoveto\n if (stack.length > 2) {\n checkWidth();\n }\n\n x += stack.shift();\n y += stack.shift();\n moveTo(x, y);\n break;\n\n case 22:\n // hmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n\n x += stack.shift();\n moveTo(x, y);\n break;\n\n case 24:\n // rcurveline\n while (stack.length >= 8) {\n var c1x = x + stack.shift();\n var c1y = y + stack.shift();\n var c2x = c1x + stack.shift();\n var c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n break;\n\n case 25:\n // rlinecurve\n while (stack.length >= 8) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n\n var c1x = x + stack.shift();\n var c1y = y + stack.shift();\n var c2x = c1x + stack.shift();\n var c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n break;\n\n case 26:\n // vvcurveto\n if (stack.length % 2) {\n x += stack.shift();\n }\n\n while (stack.length >= 4) {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x;\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n\n break;\n\n case 27:\n // hhcurveto\n if (stack.length % 2) {\n y += stack.shift();\n }\n\n while (stack.length >= 4) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y;\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n\n break;\n\n case 28:\n // shortint\n stack.push(stream.readInt16BE());\n break;\n\n case 29:\n // callgsubr\n index = stack.pop() + gsubrsBias;\n subr = gsubrs[index];\n\n if (subr) {\n usedGsubrs[index] = true;\n var p = stream.pos;\n var e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n\n break;\n\n case 30: // vhcurveto\n\n case 31:\n // hvcurveto\n phase = op === 31;\n\n while (stack.length >= 4) {\n if (phase) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n y = c2y + stack.shift();\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\n } else {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\n }\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n phase = !phase;\n }\n\n break;\n\n case 12:\n op = stream.readUInt8();\n\n switch (op) {\n case 3:\n // and\n var a = stack.pop();\n var b = stack.pop();\n stack.push(a && b ? 1 : 0);\n break;\n\n case 4:\n // or\n a = stack.pop();\n b = stack.pop();\n stack.push(a || b ? 1 : 0);\n break;\n\n case 5:\n // not\n a = stack.pop();\n stack.push(a ? 0 : 1);\n break;\n\n case 9:\n // abs\n a = stack.pop();\n stack.push(Math.abs(a));\n break;\n\n case 10:\n // add\n a = stack.pop();\n b = stack.pop();\n stack.push(a + b);\n break;\n\n case 11:\n // sub\n a = stack.pop();\n b = stack.pop();\n stack.push(a - b);\n break;\n\n case 12:\n // div\n a = stack.pop();\n b = stack.pop();\n stack.push(a / b);\n break;\n\n case 14:\n // neg\n a = stack.pop();\n stack.push(-a);\n break;\n\n case 15:\n // eq\n a = stack.pop();\n b = stack.pop();\n stack.push(a === b ? 1 : 0);\n break;\n\n case 18:\n // drop\n stack.pop();\n break;\n\n case 20:\n // put\n var val = stack.pop();\n var idx = stack.pop();\n trans[idx] = val;\n break;\n\n case 21:\n // get\n idx = stack.pop();\n stack.push(trans[idx] || 0);\n break;\n\n case 22:\n // ifelse\n var s1 = stack.pop();\n var s2 = stack.pop();\n var v1 = stack.pop();\n var v2 = stack.pop();\n stack.push(v1 <= v2 ? s1 : s2);\n break;\n\n case 23:\n // random\n stack.push(Math.random());\n break;\n\n case 24:\n // mul\n a = stack.pop();\n b = stack.pop();\n stack.push(a * b);\n break;\n\n case 26:\n // sqrt\n a = stack.pop();\n stack.push(Math.sqrt(a));\n break;\n\n case 27:\n // dup\n a = stack.pop();\n stack.push(a, a);\n break;\n\n case 28:\n // exch\n a = stack.pop();\n b = stack.pop();\n stack.push(b, a);\n break;\n\n case 29:\n // index\n idx = stack.pop();\n\n if (idx < 0) {\n idx = 0;\n } else if (idx > stack.length - 1) {\n idx = stack.length - 1;\n }\n\n stack.push(stack[idx]);\n break;\n\n case 30:\n // roll\n var n = stack.pop();\n\n var _j = stack.pop();\n\n if (_j >= 0) {\n while (_j > 0) {\n var t = stack[n - 1];\n\n for (var _i = n - 2; _i >= 0; _i--) {\n stack[_i + 1] = stack[_i];\n }\n\n stack[0] = t;\n _j--;\n }\n } else {\n while (_j < 0) {\n var t = stack[0];\n\n for (var _i2 = 0; _i2 <= n; _i2++) {\n stack[_i2] = stack[_i2 + 1];\n }\n\n stack[n - 1] = t;\n _j++;\n }\n }\n\n break;\n\n case 34:\n // hflex\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n var c3x = c2x + stack.shift();\n var c3y = c2y;\n var c4x = c3x + stack.shift();\n var c4y = c3y;\n var c5x = c4x + stack.shift();\n var c5y = c4y;\n var c6x = c5x + stack.shift();\n var c6y = c5y;\n x = c6x;\n y = c6y;\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n\n case 35:\n // flex\n var pts = [];\n\n for (var _i3 = 0; _i3 <= 5; _i3++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n\n path.bezierCurveTo.apply(path, pts.slice(0, 6));\n path.bezierCurveTo.apply(path, pts.slice(6));\n stack.shift(); // fd\n\n break;\n\n case 36:\n // hflex1\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n c3x = c2x + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y;\n c5x = c4x + stack.shift();\n c5y = c4y + stack.shift();\n c6x = c5x + stack.shift();\n c6y = c5y;\n x = c6x;\n y = c6y;\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n\n case 37:\n // flex1\n var startx = x;\n var starty = y;\n pts = [];\n\n for (var _i4 = 0; _i4 <= 4; _i4++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n\n if (Math.abs(x - startx) > Math.abs(y - starty)) {\n // horizontal\n x += stack.shift();\n y = starty;\n } else {\n x = startx;\n y += stack.shift();\n }\n\n pts.push(x, y);\n path.bezierCurveTo.apply(path, pts.slice(0, 6));\n path.bezierCurveTo.apply(path, pts.slice(6));\n break;\n\n default:\n throw new Error(\"Unknown op: 12 \".concat(op));\n }\n\n break;\n\n default:\n throw new Error(\"Unknown op: \".concat(op));\n }\n } else if (op < 247) {\n stack.push(op - 139);\n } else if (op < 251) {\n var b1 = stream.readUInt8();\n stack.push((op - 247) * 256 + b1 + 108);\n } else if (op < 255) {\n var b1 = stream.readUInt8();\n stack.push(-(op - 251) * 256 - b1 - 108);\n } else {\n stack.push(stream.readInt32BE() / 65536);\n }\n }\n };\n\n parse();\n\n if (open) {\n path.closePath();\n }\n\n return path;\n };\n\n return CFFGlyph;\n}(Glyph);\n\nvar SBIXImage = new r.Struct({\n originX: r.uint16,\n originY: r.uint16,\n type: new r.String(4),\n data: new r.Buffer(function (t) {\n return t.parent.buflen - t._currentOffset;\n })\n});\n/**\r\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\r\n */\n\nvar SBIXGlyph = /*#__PURE__*/function (_TTFGlyph) {\n _inheritsLoose(SBIXGlyph, _TTFGlyph);\n\n function SBIXGlyph() {\n return _TTFGlyph.apply(this, arguments) || this;\n }\n\n var _proto36 = SBIXGlyph.prototype;\n\n /**\r\n * Returns an object representing a glyph image at the given point size.\r\n * The object has a data property with a Buffer containing the actual image data,\r\n * along with the image type, and origin.\r\n *\r\n * @param {number} size\r\n * @return {object}\r\n */\n _proto36.getImageForSize = function getImageForSize(size) {\n for (var i = 0; i < this._font.sbix.imageTables.length; i++) {\n var table = this._font.sbix.imageTables[i];\n\n if (table.ppem >= size) {\n break;\n }\n }\n\n var offsets = table.imageOffsets;\n var start = offsets[this.id];\n var end = offsets[this.id + 1];\n\n if (start === end) {\n return null;\n }\n\n this._font.stream.pos = start;\n return SBIXImage.decode(this._font.stream, {\n buflen: end - start\n });\n };\n\n _proto36.render = function render(ctx, size) {\n var img = this.getImageForSize(size);\n\n if (img != null) {\n var scale = size / this._font.unitsPerEm;\n ctx.image(img.data, {\n height: size,\n x: img.originX,\n y: (this.bbox.minY - img.originY) * scale\n });\n }\n\n if (this._font.sbix.flags.renderOutlines) {\n _TTFGlyph.prototype.render.call(this, ctx, size);\n }\n };\n\n return SBIXGlyph;\n}(TTFGlyph);\n\nvar COLRLayer = function COLRLayer(glyph, color) {\n this.glyph = glyph;\n this.color = color;\n};\n/**\r\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\r\n * Each glyph in this format contain a list of colored layers, each\r\n * of which is another vector glyph.\r\n */\n\n\nvar COLRGlyph = /*#__PURE__*/function (_Glyph3) {\n _inheritsLoose(COLRGlyph, _Glyph3);\n\n function COLRGlyph() {\n return _Glyph3.apply(this, arguments) || this;\n }\n\n var _proto37 = COLRGlyph.prototype;\n\n _proto37._getBBox = function _getBBox() {\n var bbox = new BBox();\n\n for (var i = 0; i < this.layers.length; i++) {\n var layer = this.layers[i];\n var b = layer.glyph.bbox;\n bbox.addPoint(b.minX, b.minY);\n bbox.addPoint(b.maxX, b.maxY);\n }\n\n return bbox;\n }\n /**\r\n * Returns an array of objects containing the glyph and color for\r\n * each layer in the composite color glyph.\r\n * @type {object[]}\r\n */\n ;\n\n _proto37.render = function render(ctx, size) {\n for (var _iterator71 = _createForOfIteratorHelperLoose(this.layers), _step71; !(_step71 = _iterator71()).done;) {\n var _step71$value = _step71.value,\n glyph = _step71$value.glyph,\n color = _step71$value.color;\n ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\n glyph.render(ctx, size);\n }\n\n return;\n };\n\n _createClass(COLRGlyph, [{\n key: \"layers\",\n get: function get() {\n var cpal = this._font.CPAL;\n var colr = this._font.COLR;\n var low = 0;\n var high = colr.baseGlyphRecord.length - 1;\n\n while (low <= high) {\n var mid = low + high >> 1;\n var rec = colr.baseGlyphRecord[mid];\n\n if (this.id < rec.gid) {\n high = mid - 1;\n } else if (this.id > rec.gid) {\n low = mid + 1;\n } else {\n var baseLayer = rec;\n break;\n }\n } // if base glyph not found in COLR table,\n // default to normal glyph from glyf or CFF\n\n\n if (baseLayer == null) {\n var g = this._font._getBaseGlyph(this.id);\n\n var color = {\n red: 0,\n green: 0,\n blue: 0,\n alpha: 255\n };\n return [new COLRLayer(g, color)];\n } // otherwise, return an array of all the layers\n\n\n var layers = [];\n\n for (var i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\n var rec = colr.layerRecords[i];\n var color = cpal.colorRecords[rec.paletteIndex];\n\n var g = this._font._getBaseGlyph(rec.gid);\n\n layers.push(new COLRLayer(g, color));\n }\n\n return layers;\n }\n }]);\n\n return COLRGlyph;\n}(Glyph);\n\nvar TUPLES_SHARE_POINT_NUMBERS = 0x8000;\nvar TUPLE_COUNT_MASK = 0x0fff;\nvar EMBEDDED_TUPLE_COORD = 0x8000;\nvar INTERMEDIATE_TUPLE = 0x4000;\nvar PRIVATE_POINT_NUMBERS = 0x2000;\nvar TUPLE_INDEX_MASK = 0x0fff;\nvar POINTS_ARE_WORDS = 0x80;\nvar POINT_RUN_COUNT_MASK = 0x7f;\nvar DELTAS_ARE_ZERO = 0x80;\nvar DELTAS_ARE_WORDS = 0x40;\nvar DELTA_RUN_COUNT_MASK = 0x3f;\n/**\r\n * This class is transforms TrueType glyphs according to the data from\r\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\r\n * These tables allow infinite adjustments to glyph weight, width, slant,\r\n * and optical size without the designer needing to specify every exact style.\r\n *\r\n * Apple's documentation for these tables is not great, so thanks to the\r\n * Freetype project for figuring much of this out.\r\n *\r\n * @private\r\n */\n\nvar GlyphVariationProcessor = /*#__PURE__*/function () {\n function GlyphVariationProcessor(font, coords) {\n this.font = font;\n this.normalizedCoords = this.normalizeCoords(coords);\n this.blendVectors = new Map();\n }\n\n var _proto38 = GlyphVariationProcessor.prototype;\n\n _proto38.normalizeCoords = function normalizeCoords(coords) {\n // the default mapping is linear along each axis, in two segments:\n // from the minValue to defaultValue, and from defaultValue to maxValue.\n var normalized = [];\n\n for (var i = 0; i < this.font.fvar.axis.length; i++) {\n var axis = this.font.fvar.axis[i];\n\n if (coords[i] < axis.defaultValue) {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n } else {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n }\n } // if there is an avar table, the normalized value is calculated\n // by interpolating between the two nearest mapped values.\n\n\n if (this.font.avar) {\n for (var i = 0; i < this.font.avar.segment.length; i++) {\n var segment = this.font.avar.segment[i];\n\n for (var j = 0; j < segment.correspondence.length; j++) {\n var pair = segment.correspondence[j];\n\n if (j >= 1 && normalized[i] < pair.fromCoord) {\n var prev = segment.correspondence[j - 1];\n normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord;\n break;\n }\n }\n }\n }\n\n return normalized;\n };\n\n _proto38.transformPoints = function transformPoints(gid, glyphPoints) {\n if (!this.font.fvar || !this.font.gvar) {\n return;\n }\n\n var gvar = this.font.gvar;\n\n if (gid >= gvar.glyphCount) {\n return;\n }\n\n var offset = gvar.offsets[gid];\n\n if (offset === gvar.offsets[gid + 1]) {\n return;\n } // Read the gvar data for this glyph\n\n\n var stream = this.font.stream;\n stream.pos = offset;\n\n if (stream.pos >= stream.length) {\n return;\n }\n\n var tupleCount = stream.readUInt16BE();\n var offsetToData = offset + stream.readUInt16BE();\n\n if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\n var here = stream.pos;\n stream.pos = offsetToData;\n var sharedPoints = this.decodePoints();\n offsetToData = stream.pos;\n stream.pos = here;\n }\n\n var origPoints = glyphPoints.map(function (pt) {\n return pt.copy();\n });\n tupleCount &= TUPLE_COUNT_MASK;\n\n for (var i = 0; i < tupleCount; i++) {\n var tupleDataSize = stream.readUInt16BE();\n var tupleIndex = stream.readUInt16BE();\n\n if (tupleIndex & EMBEDDED_TUPLE_COORD) {\n var tupleCoords = [];\n\n for (var a = 0; a < gvar.axisCount; a++) {\n tupleCoords.push(stream.readInt16BE() / 16384);\n }\n } else {\n if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\n throw new Error('Invalid gvar table');\n }\n\n var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\n }\n\n if (tupleIndex & INTERMEDIATE_TUPLE) {\n var startCoords = [];\n\n for (var _a = 0; _a < gvar.axisCount; _a++) {\n startCoords.push(stream.readInt16BE() / 16384);\n }\n\n var endCoords = [];\n\n for (var _a2 = 0; _a2 < gvar.axisCount; _a2++) {\n endCoords.push(stream.readInt16BE() / 16384);\n }\n } // Get the factor at which to apply this tuple\n\n\n var factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\n\n if (factor === 0) {\n offsetToData += tupleDataSize;\n continue;\n }\n\n var here = stream.pos;\n stream.pos = offsetToData;\n\n if (tupleIndex & PRIVATE_POINT_NUMBERS) {\n var points = this.decodePoints();\n } else {\n var points = sharedPoints;\n } // points.length = 0 means there are deltas for all points\n\n\n var nPoints = points.length === 0 ? glyphPoints.length : points.length;\n var xDeltas = this.decodeDeltas(nPoints);\n var yDeltas = this.decodeDeltas(nPoints);\n\n if (points.length === 0) {\n // all points\n for (var _i = 0; _i < glyphPoints.length; _i++) {\n var point = glyphPoints[_i];\n point.x += Math.round(xDeltas[_i] * factor);\n point.y += Math.round(yDeltas[_i] * factor);\n }\n } else {\n var outPoints = origPoints.map(function (pt) {\n return pt.copy();\n });\n var hasDelta = glyphPoints.map(function () {\n return false;\n });\n\n for (var _i2 = 0; _i2 < points.length; _i2++) {\n var idx = points[_i2];\n\n if (idx < glyphPoints.length) {\n var _point = outPoints[idx];\n hasDelta[idx] = true;\n _point.x += Math.round(xDeltas[_i2] * factor);\n _point.y += Math.round(yDeltas[_i2] * factor);\n }\n }\n\n this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\n\n for (var _i3 = 0; _i3 < glyphPoints.length; _i3++) {\n var deltaX = outPoints[_i3].x - origPoints[_i3].x;\n var deltaY = outPoints[_i3].y - origPoints[_i3].y;\n glyphPoints[_i3].x += deltaX;\n glyphPoints[_i3].y += deltaY;\n }\n }\n\n offsetToData += tupleDataSize;\n stream.pos = here;\n }\n };\n\n _proto38.decodePoints = function decodePoints() {\n var stream = this.font.stream;\n var count = stream.readUInt8();\n\n if (count & POINTS_ARE_WORDS) {\n count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\n }\n\n var points = new Uint16Array(count);\n var i = 0;\n var point = 0;\n\n while (i < count) {\n var run = stream.readUInt8();\n var runCount = (run & POINT_RUN_COUNT_MASK) + 1;\n var fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\n\n for (var j = 0; j < runCount && i < count; j++) {\n point += fn.call(stream);\n points[i++] = point;\n }\n }\n\n return points;\n };\n\n _proto38.decodeDeltas = function decodeDeltas(count) {\n var stream = this.font.stream;\n var i = 0;\n var deltas = new Int16Array(count);\n\n while (i < count) {\n var run = stream.readUInt8();\n var runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\n\n if (run & DELTAS_ARE_ZERO) {\n i += runCount;\n } else {\n var fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\n\n for (var j = 0; j < runCount && i < count; j++) {\n deltas[i++] = fn.call(stream);\n }\n }\n }\n\n return deltas;\n };\n\n _proto38.tupleFactor = function tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\n var normalized = this.normalizedCoords;\n var gvar = this.font.gvar;\n var factor = 1;\n\n for (var i = 0; i < gvar.axisCount; i++) {\n if (tupleCoords[i] === 0) {\n continue;\n }\n\n if (normalized[i] === 0) {\n return 0;\n }\n\n if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\n if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) {\n return 0;\n }\n\n factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\n } else {\n if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) {\n return 0;\n } else if (normalized[i] < tupleCoords[i]) {\n factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\n } else {\n factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\n }\n }\n }\n\n return factor;\n } // Interpolates points without delta values.\n // Needed for the Ø and Q glyphs in Skia.\n // Algorithm from Freetype.\n ;\n\n _proto38.interpolateMissingDeltas = function interpolateMissingDeltas(points, inPoints, hasDelta) {\n if (points.length === 0) {\n return;\n }\n\n var point = 0;\n\n while (point < points.length) {\n var firstPoint = point; // find the end point of the contour\n\n var endPoint = point;\n var pt = points[endPoint];\n\n while (!pt.endContour) {\n pt = points[++endPoint];\n } // find the first point that has a delta\n\n\n while (point <= endPoint && !hasDelta[point]) {\n point++;\n }\n\n if (point > endPoint) {\n continue;\n }\n\n var firstDelta = point;\n var curDelta = point;\n point++;\n\n while (point <= endPoint) {\n // find the next point with a delta, and interpolate intermediate points\n if (hasDelta[point]) {\n this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\n curDelta = point;\n }\n\n point++;\n } // shift contour if we only have a single delta\n\n\n if (curDelta === firstDelta) {\n this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\n } else {\n // otherwise, handle the remaining points at the end and beginning of the contour\n this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\n\n if (firstDelta > 0) {\n this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\n }\n }\n\n point = endPoint + 1;\n }\n };\n\n _proto38.deltaInterpolate = function deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\n if (p1 > p2) {\n return;\n }\n\n var iterable = ['x', 'y'];\n\n for (var i = 0; i < iterable.length; i++) {\n var k = iterable[i];\n\n if (inPoints[ref1][k] > inPoints[ref2][k]) {\n var p = ref1;\n ref1 = ref2;\n ref2 = p;\n }\n\n var in1 = inPoints[ref1][k];\n var in2 = inPoints[ref2][k];\n var out1 = outPoints[ref1][k];\n var out2 = outPoints[ref2][k]; // If the reference points have the same coordinate but different\n // delta, inferred delta is zero. Otherwise interpolate.\n\n if (in1 !== in2 || out1 === out2) {\n var scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n\n for (var _p = p1; _p <= p2; _p++) {\n var out = inPoints[_p][k];\n\n if (out <= in1) {\n out += out1 - in1;\n } else if (out >= in2) {\n out += out2 - in2;\n } else {\n out = out1 + (out - in1) * scale;\n }\n\n outPoints[_p][k] = out;\n }\n }\n }\n };\n\n _proto38.deltaShift = function deltaShift(p1, p2, ref, inPoints, outPoints) {\n var deltaX = outPoints[ref].x - inPoints[ref].x;\n var deltaY = outPoints[ref].y - inPoints[ref].y;\n\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n\n for (var p = p1; p <= p2; p++) {\n if (p !== ref) {\n outPoints[p].x += deltaX;\n outPoints[p].y += deltaY;\n }\n }\n };\n\n _proto38.getAdvanceAdjustment = function getAdvanceAdjustment(gid, table) {\n var outerIndex, innerIndex;\n\n if (table.advanceWidthMapping) {\n var idx = gid;\n\n if (idx >= table.advanceWidthMapping.mapCount) {\n idx = table.advanceWidthMapping.mapCount - 1;\n }\n\n var entryFormat = table.advanceWidthMapping.entryFormat;\n var _table$advanceWidthMa = table.advanceWidthMapping.mapData[idx];\n outerIndex = _table$advanceWidthMa.outerIndex;\n innerIndex = _table$advanceWidthMa.innerIndex;\n } else {\n outerIndex = 0;\n innerIndex = gid;\n }\n\n return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\n } // See pseudo code from `Font Variations Overview'\n // in the OpenType specification.\n ;\n\n _proto38.getDelta = function getDelta(itemStore, outerIndex, innerIndex) {\n if (outerIndex >= itemStore.itemVariationData.length) {\n return 0;\n }\n\n var varData = itemStore.itemVariationData[outerIndex];\n\n if (innerIndex >= varData.deltaSets.length) {\n return 0;\n }\n\n var deltaSet = varData.deltaSets[innerIndex];\n var blendVector = this.getBlendVector(itemStore, outerIndex);\n var netAdjustment = 0;\n\n for (var master = 0; master < varData.regionIndexCount; master++) {\n netAdjustment += deltaSet.deltas[master] * blendVector[master];\n }\n\n return netAdjustment;\n };\n\n _proto38.getBlendVector = function getBlendVector(itemStore, outerIndex) {\n var varData = itemStore.itemVariationData[outerIndex];\n\n if (this.blendVectors.has(varData)) {\n return this.blendVectors.get(varData);\n }\n\n var normalizedCoords = this.normalizedCoords;\n var blendVector = []; // outer loop steps through master designs to be blended\n\n for (var master = 0; master < varData.regionIndexCount; master++) {\n var scalar = 1;\n var regionIndex = varData.regionIndexes[master];\n var axes = itemStore.variationRegionList.variationRegions[regionIndex]; // inner loop steps through axes in this region\n\n for (var j = 0; j < axes.length; j++) {\n var axis = axes[j];\n var axisScalar = void 0; // compute the scalar contribution of this axis\n // ignore invalid ranges\n\n if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n axisScalar = 1;\n } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n axisScalar = 1; // peak of 0 means ignore this axis\n } else if (axis.peakCoord === 0) {\n axisScalar = 1; // ignore this region if coords are out of range\n } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n axisScalar = 0; // calculate a proportional factor\n } else {\n if (normalizedCoords[j] === axis.peakCoord) {\n axisScalar = 1;\n } else if (normalizedCoords[j] < axis.peakCoord) {\n axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON);\n } else {\n axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON);\n }\n } // take product of all the axis scalars\n\n\n scalar *= axisScalar;\n }\n\n blendVector[master] = scalar;\n }\n\n this.blendVectors.set(varData, blendVector);\n return blendVector;\n };\n\n return GlyphVariationProcessor;\n}();\n\nvar resolved = Promise.resolve();\n\nvar Subset = /*#__PURE__*/function () {\n function Subset(font) {\n this.font = font;\n this.glyphs = [];\n this.mapping = {}; // always include the missing glyph\n\n this.includeGlyph(0);\n }\n\n var _proto39 = Subset.prototype;\n\n _proto39.includeGlyph = function includeGlyph(glyph) {\n if (typeof glyph === 'object') {\n glyph = glyph.id;\n }\n\n if (this.mapping[glyph] == null) {\n this.glyphs.push(glyph);\n this.mapping[glyph] = this.glyphs.length - 1;\n }\n\n return this.mapping[glyph];\n };\n\n _proto39.encodeStream = function encodeStream() {\n var _this11 = this;\n\n var s = new r.EncodeStream();\n resolved.then(function () {\n _this11.encode(s);\n\n return s.end();\n });\n return s;\n };\n\n return Subset;\n}();\n\nvar ON_CURVE$1 = 1 << 0;\nvar X_SHORT_VECTOR$1 = 1 << 1;\nvar Y_SHORT_VECTOR$1 = 1 << 2;\nvar REPEAT$1 = 1 << 3;\nvar SAME_X$1 = 1 << 4;\nvar SAME_Y$1 = 1 << 5;\n\nvar Point$1 = /*#__PURE__*/function () {\n function Point$1() {}\n\n Point$1.size = function size(val) {\n return val >= 0 && val <= 255 ? 1 : 2;\n };\n\n Point$1.encode = function encode(stream, value) {\n if (value >= 0 && value <= 255) {\n stream.writeUInt8(value);\n } else {\n stream.writeInt16BE(value);\n }\n };\n\n return Point$1;\n}();\n\nvar Glyf = new r.Struct({\n numberOfContours: r.int16,\n // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16,\n endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\n instructions: new r.Array(r.uint8, r.uint16),\n flags: new r.Array(r.uint8, 0),\n xPoints: new r.Array(Point$1, 0),\n yPoints: new r.Array(Point$1, 0)\n});\n/**\r\n * Encodes TrueType glyph outlines\r\n */\n\nvar TTFGlyphEncoder = /*#__PURE__*/function () {\n function TTFGlyphEncoder() {}\n\n var _proto40 = TTFGlyphEncoder.prototype;\n\n _proto40.encodeSimple = function encodeSimple(path, instructions) {\n if (instructions === void 0) {\n instructions = [];\n }\n\n var endPtsOfContours = [];\n var xPoints = [];\n var yPoints = [];\n var flags = [];\n var same = 0;\n var lastX = 0,\n lastY = 0,\n lastFlag = 0;\n var pointCount = 0;\n\n for (var i = 0; i < path.commands.length; i++) {\n var c = path.commands[i];\n\n for (var j = 0; j < c.args.length; j += 2) {\n var x = c.args[j];\n var y = c.args[j + 1];\n var flag = 0; // If the ending point of a quadratic curve is the midpoint\n // between the control point and the control point of the next\n // quadratic curve, we can omit the ending point.\n\n if (c.command === 'quadraticCurveTo' && j === 2) {\n var next = path.commands[i + 1];\n\n if (next && next.command === 'quadraticCurveTo') {\n var midX = (lastX + next.args[0]) / 2;\n var midY = (lastY + next.args[1]) / 2;\n\n if (x === midX && y === midY) {\n continue;\n }\n }\n } // All points except control points are on curve.\n\n\n if (!(c.command === 'quadraticCurveTo' && j === 0)) {\n flag |= ON_CURVE$1;\n }\n\n flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR$1, SAME_X$1);\n flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR$1, SAME_Y$1);\n\n if (flag === lastFlag && same < 255) {\n flags[flags.length - 1] |= REPEAT$1;\n same++;\n } else {\n if (same > 0) {\n flags.push(same);\n same = 0;\n }\n\n flags.push(flag);\n lastFlag = flag;\n }\n\n lastX = x;\n lastY = y;\n pointCount++;\n }\n\n if (c.command === 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n } // Close the path if the last command didn't already\n\n\n if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n\n var bbox = path.bbox;\n var glyf = {\n numberOfContours: endPtsOfContours.length,\n xMin: bbox.minX,\n yMin: bbox.minY,\n xMax: bbox.maxX,\n yMax: bbox.maxY,\n endPtsOfContours: endPtsOfContours,\n instructions: instructions,\n flags: flags,\n xPoints: xPoints,\n yPoints: yPoints\n };\n var size = Glyf.size(glyf);\n var tail = 4 - size % 4;\n var stream = new r.EncodeStream(size + tail);\n Glyf.encode(stream, glyf); // Align to 4-byte length\n\n if (tail !== 0) {\n stream.fill(0, tail);\n }\n\n return stream.buffer;\n };\n\n _proto40._encodePoint = function _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\n var diff = value - last;\n\n if (value === last) {\n flag |= sameFlag;\n } else {\n if (-255 <= diff && diff <= 255) {\n flag |= shortFlag;\n\n if (diff < 0) {\n diff = -diff;\n } else {\n flag |= sameFlag;\n }\n }\n\n points.push(diff);\n }\n\n return flag;\n };\n\n return TTFGlyphEncoder;\n}();\n\nvar TTFSubset = /*#__PURE__*/function (_Subset) {\n _inheritsLoose(TTFSubset, _Subset);\n\n function TTFSubset(font) {\n var _this12;\n\n _this12 = _Subset.call(this, font) || this;\n _this12.glyphEncoder = new TTFGlyphEncoder();\n return _this12;\n }\n\n var _proto41 = TTFSubset.prototype;\n\n _proto41._addGlyph = function _addGlyph(gid) {\n var glyph = this.font.getGlyph(gid);\n\n var glyf = glyph._decode(); // get the offset to the glyph from the loca table\n\n\n var curOffset = this.font.loca.offsets[gid];\n var nextOffset = this.font.loca.offsets[gid + 1];\n\n var stream = this.font._getTableStream('glyf');\n\n stream.pos += curOffset;\n var buffer = stream.readBuffer(nextOffset - curOffset); // if it is a compound glyph, include its components\n\n if (glyf && glyf.numberOfContours < 0) {\n buffer = Buffer.from(buffer);\n\n for (var _iterator72 = _createForOfIteratorHelperLoose(glyf.components), _step72; !(_step72 = _iterator72()).done;) {\n var component = _step72.value;\n gid = this.includeGlyph(component.glyphID);\n buffer.writeUInt16BE(gid, component.pos);\n }\n } else if (glyf && this.font._variationProcessor) {\n // If this is a TrueType variation glyph, re-encode the path\n buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\n }\n\n this.glyf.push(buffer);\n this.loca.offsets.push(this.offset);\n this.hmtx.metrics.push({\n advance: glyph.advanceWidth,\n bearing: glyph._getMetrics().leftBearing\n });\n this.offset += buffer.length;\n return this.glyf.length - 1;\n };\n\n _proto41.encode = function encode(stream) {\n // tables required by PDF spec:\n // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\n //\n // additional tables required for standalone fonts:\n // name, cmap, OS/2, post\n this.glyf = [];\n this.offset = 0;\n this.loca = {\n offsets: [],\n version: this.font.loca.version\n };\n this.hmtx = {\n metrics: [],\n bearings: []\n }; // include all the glyphs\n // not using a for loop because we need to support adding more\n // glyphs to the array as we go, and CoffeeScript caches the length.\n\n var i = 0;\n\n while (i < this.glyphs.length) {\n this._addGlyph(this.glyphs[i++]);\n }\n\n var maxp = cloneDeep(this.font.maxp);\n maxp.numGlyphs = this.glyf.length;\n this.loca.offsets.push(this.offset);\n var head = cloneDeep(this.font.head);\n head.indexToLocFormat = this.loca.version;\n var hhea = cloneDeep(this.font.hhea);\n hhea.numberOfMetrics = this.hmtx.metrics.length; // map = []\n // for index in [0...256]\n // if index < @numGlyphs\n // map[index] = index\n // else\n // map[index] = 0\n //\n // cmapTable =\n // version: 0\n // length: 262\n // language: 0\n // codeMap: map\n //\n // cmap =\n // version: 0\n // numSubtables: 1\n // tables: [\n // platformID: 1\n // encodingID: 0\n // table: cmapTable\n // ]\n // TODO: subset prep, cvt, fpgm?\n\n Directory.encode(stream, {\n tables: {\n head: head,\n hhea: hhea,\n loca: this.loca,\n maxp: maxp,\n 'cvt ': this.font['cvt '],\n prep: this.font.prep,\n glyf: this.glyf,\n hmtx: this.hmtx,\n fpgm: this.font.fpgm // name: clone @font.name\n // 'OS/2': clone @font['OS/2']\n // post: clone @font.post\n // cmap: cmap\n\n }\n });\n };\n\n return TTFSubset;\n}(Subset);\n\nvar CFFSubset = /*#__PURE__*/function (_Subset2) {\n _inheritsLoose(CFFSubset, _Subset2);\n\n function CFFSubset(font) {\n var _this13;\n\n _this13 = _Subset2.call(this, font) || this;\n _this13.cff = _this13.font['CFF '];\n\n if (!_this13.cff) {\n throw new Error('Not a CFF Font');\n }\n\n return _this13;\n }\n\n var _proto42 = CFFSubset.prototype;\n\n _proto42.subsetCharstrings = function subsetCharstrings() {\n this.charstrings = [];\n var gsubrs = {};\n\n for (var _iterator73 = _createForOfIteratorHelperLoose(this.glyphs), _step73; !(_step73 = _iterator73()).done;) {\n var gid = _step73.value;\n this.charstrings.push(this.cff.getCharString(gid));\n var glyph = this.font.getGlyph(gid);\n var path = glyph.path; // this causes the glyph to be parsed\n\n for (var subr in glyph._usedGsubrs) {\n gsubrs[subr] = true;\n }\n }\n\n this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\n };\n\n _proto42.subsetSubrs = function subsetSubrs(subrs, used) {\n var res = [];\n\n for (var i = 0; i < subrs.length; i++) {\n var subr = subrs[i];\n\n if (used[i]) {\n this.cff.stream.pos = subr.offset;\n res.push(this.cff.stream.readBuffer(subr.length));\n } else {\n res.push(Buffer.from([11])); // return\n }\n }\n\n return res;\n };\n\n _proto42.subsetFontdict = function subsetFontdict(topDict) {\n topDict.FDArray = [];\n topDict.FDSelect = {\n version: 0,\n fds: []\n };\n var used_fds = {};\n var used_subrs = [];\n var fd_select = {};\n\n for (var _iterator74 = _createForOfIteratorHelperLoose(this.glyphs), _step74; !(_step74 = _iterator74()).done;) {\n var gid = _step74.value;\n var fd = this.cff.fdForGlyph(gid);\n\n if (fd == null) {\n continue;\n }\n\n if (!used_fds[fd]) {\n topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\n used_subrs.push({});\n fd_select[fd] = topDict.FDArray.length - 1;\n }\n\n used_fds[fd] = true;\n topDict.FDSelect.fds.push(fd_select[fd]);\n var glyph = this.font.getGlyph(gid);\n var path = glyph.path; // this causes the glyph to be parsed\n\n for (var subr in glyph._usedSubrs) {\n used_subrs[fd_select[fd]][subr] = true;\n }\n }\n\n for (var i = 0; i < topDict.FDArray.length; i++) {\n var dict = topDict.FDArray[i];\n delete dict.FontName;\n\n if (dict.Private && dict.Private.Subrs) {\n dict.Private = Object.assign({}, dict.Private);\n dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\n }\n }\n\n return;\n };\n\n _proto42.createCIDFontdict = function createCIDFontdict(topDict) {\n var used_subrs = {};\n\n for (var _iterator75 = _createForOfIteratorHelperLoose(this.glyphs), _step75; !(_step75 = _iterator75()).done;) {\n var gid = _step75.value;\n var glyph = this.font.getGlyph(gid);\n var path = glyph.path; // this causes the glyph to be parsed\n\n for (var subr in glyph._usedSubrs) {\n used_subrs[subr] = true;\n }\n }\n\n var privateDict = Object.assign({}, this.cff.topDict.Private);\n\n if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\n privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\n }\n\n topDict.FDArray = [{\n Private: privateDict\n }];\n return topDict.FDSelect = {\n version: 3,\n nRanges: 1,\n ranges: [{\n first: 0,\n fd: 0\n }],\n sentinel: this.charstrings.length\n };\n };\n\n _proto42.addString = function addString(string) {\n if (!string) {\n return null;\n }\n\n if (!this.strings) {\n this.strings = [];\n }\n\n this.strings.push(string);\n return standardStrings.length + this.strings.length - 1;\n };\n\n _proto42.encode = function encode(stream) {\n this.subsetCharstrings();\n var charset = {\n version: this.charstrings.length > 255 ? 2 : 1,\n ranges: [{\n first: 1,\n nLeft: this.charstrings.length - 2\n }]\n };\n var topDict = Object.assign({}, this.cff.topDict);\n topDict.Private = null;\n topDict.charset = charset;\n topDict.Encoding = null;\n topDict.CharStrings = this.charstrings;\n\n for (var _i24 = 0, _arr2 = ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']; _i24 < _arr2.length; _i24++) {\n var key = _arr2[_i24];\n topDict[key] = this.addString(this.cff.string(topDict[key]));\n }\n\n topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\n topDict.CIDCount = this.charstrings.length;\n\n if (this.cff.isCIDFont) {\n this.subsetFontdict(topDict);\n } else {\n this.createCIDFontdict(topDict);\n }\n\n var top = {\n version: 1,\n hdrSize: this.cff.hdrSize,\n offSize: 4,\n header: this.cff.header,\n nameIndex: [this.cff.postscriptName],\n topDictIndex: [topDict],\n stringIndex: this.strings,\n globalSubrIndex: this.gsubrs\n };\n CFFTop.encode(stream, top);\n };\n\n return CFFSubset;\n}(Subset);\n\nvar _class$4;\n/**\r\n * This is the base class for all SFNT-based font formats in fontkit.\r\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\r\n */\n\n\nvar TTFFont = (_class$4 = /*#__PURE__*/function () {\n TTFFont.probe = function probe(buffer) {\n var format = buffer.toString('ascii', 0, 4);\n return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\n };\n\n function TTFFont(stream, variationCoords) {\n if (variationCoords === void 0) {\n variationCoords = null;\n }\n\n this.defaultLanguage = null;\n this.stream = stream;\n this.variationCoords = variationCoords;\n this._directoryPos = this.stream.pos;\n this._tables = {};\n this._glyphs = {};\n\n this._decodeDirectory(); // define properties for each table to lazily parse\n\n\n for (var tag in this.directory.tables) {\n var table = this.directory.tables[tag];\n\n if (tables[tag] && table.length > 0) {\n Object.defineProperty(this, tag, {\n get: this._getTable.bind(this, table)\n });\n }\n }\n }\n\n var _proto43 = TTFFont.prototype;\n\n _proto43.setDefaultLanguage = function setDefaultLanguage(lang) {\n if (lang === void 0) {\n lang = null;\n }\n\n this.defaultLanguage = lang;\n };\n\n _proto43._getTable = function _getTable(table) {\n if (!(table.tag in this._tables)) {\n try {\n this._tables[table.tag] = this._decodeTable(table);\n } catch (e) {\n if (fontkit.logErrors) {\n console.error(\"Error decoding table \".concat(table.tag));\n console.error(e.stack);\n }\n }\n }\n\n return this._tables[table.tag];\n };\n\n _proto43._getTableStream = function _getTableStream(tag) {\n var table = this.directory.tables[tag];\n\n if (table) {\n this.stream.pos = table.offset;\n return this.stream;\n }\n\n return null;\n };\n\n _proto43._decodeDirectory = function _decodeDirectory() {\n return this.directory = Directory.decode(this.stream, {\n _startOffset: 0\n });\n };\n\n _proto43._decodeTable = function _decodeTable(table) {\n var pos = this.stream.pos;\n\n var stream = this._getTableStream(table.tag);\n\n var result = tables[table.tag].decode(stream, this, table.length);\n this.stream.pos = pos;\n return result;\n }\n /**\r\n * Gets a string from the font's `name` table\r\n * `lang` is a BCP-47 language code.\r\n * @return {string}\r\n */\n ;\n\n _proto43.getName = function getName(key, lang) {\n if (lang === void 0) {\n lang = this.defaultLanguage || fontkit.defaultLanguage;\n }\n\n var record = this.name && this.name.records[key];\n\n if (record) {\n // Attempt to retrieve the entry, depending on which translation is available:\n return record[lang] || record[this.defaultLanguage] || record[fontkit.defaultLanguage] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\n || null;\n }\n\n return null;\n }\n /**\r\n * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\r\n * @type {string}\r\n */\n ;\n\n /**\r\n * Returns whether there is glyph in the font for the given unicode code point.\r\n *\r\n * @param {number} codePoint\r\n * @return {boolean}\r\n */\n _proto43.hasGlyphForCodePoint = function hasGlyphForCodePoint(codePoint) {\n return !!this._cmapProcessor.lookup(codePoint);\n }\n /**\r\n * Maps a single unicode code point to a Glyph object.\r\n * Does not perform any advanced substitutions (there is no context to do so).\r\n *\r\n * @param {number} codePoint\r\n * @return {Glyph}\r\n */\n ;\n\n _proto43.glyphForCodePoint = function glyphForCodePoint(codePoint) {\n return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\n }\n /**\r\n * Returns an array of Glyph objects for the given string.\r\n * This is only a one-to-one mapping from characters to glyphs.\r\n * For most uses, you should use font.layout (described below), which\r\n * provides a much more advanced mapping supporting AAT and OpenType shaping.\r\n *\r\n * @param {string} string\r\n * @return {Glyph[]}\r\n */\n ;\n\n _proto43.glyphsForString = function glyphsForString(string) {\n var glyphs = [];\n var len = string.length;\n var idx = 0;\n var last = -1;\n var state = -1;\n\n while (idx <= len) {\n var code = 0;\n var nextState = 0;\n\n if (idx < len) {\n // Decode the next codepoint from UTF 16\n code = string.charCodeAt(idx++);\n\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n var next = string.charCodeAt(idx);\n\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\n }\n } // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\n\n\n nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0;\n } else {\n idx++;\n }\n\n if (state === 0 && nextState === 1) {\n // Variation selector following normal codepoint.\n glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\n } else if (state === 0 && nextState === 0) {\n // Normal codepoint following normal codepoint.\n glyphs.push(this.glyphForCodePoint(last));\n }\n\n last = code;\n state = nextState;\n }\n\n return glyphs;\n };\n\n /**\r\n * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\r\n *\r\n * @param {string} string\r\n * @param {string[]} [userFeatures]\r\n * @param {string} [script]\r\n * @param {string} [language]\r\n * @param {string} [direction]\r\n * @return {GlyphRun}\r\n */\n _proto43.layout = function layout(string, userFeatures, script, language, direction) {\n return this._layoutEngine.layout(string, userFeatures, script, language, direction);\n }\n /**\r\n * Returns an array of strings that map to the given glyph id.\r\n * @param {number} gid - glyph id\r\n */\n ;\n\n _proto43.stringsForGlyph = function stringsForGlyph(gid) {\n return this._layoutEngine.stringsForGlyph(gid);\n }\n /**\r\n * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\r\n * (or mapped AAT tags) supported by the font.\r\n * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\r\n * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\r\n *\r\n * @type {string[]}\r\n */\n ;\n\n _proto43.getAvailableFeatures = function getAvailableFeatures(script, language) {\n return this._layoutEngine.getAvailableFeatures(script, language);\n };\n\n _proto43._getBaseGlyph = function _getBaseGlyph(glyph, characters) {\n if (characters === void 0) {\n characters = [];\n }\n\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf) {\n this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\n } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\n this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\n }\n }\n\n return this._glyphs[glyph] || null;\n }\n /**\r\n * Returns a glyph object for the given glyph id.\r\n * You can pass the array of code points this glyph represents for\r\n * your use later, and it will be stored in the glyph object.\r\n *\r\n * @param {number} glyph\r\n * @param {number[]} characters\r\n * @return {Glyph}\r\n */\n ;\n\n _proto43.getGlyph = function getGlyph(glyph, characters) {\n if (characters === void 0) {\n characters = [];\n }\n\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.sbix) {\n this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\n } else if (this.directory.tables.COLR && this.directory.tables.CPAL) {\n this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\n } else {\n this._getBaseGlyph(glyph, characters);\n }\n }\n\n return this._glyphs[glyph] || null;\n }\n /**\r\n * Returns a Subset for this font.\r\n * @return {Subset}\r\n */\n ;\n\n _proto43.createSubset = function createSubset() {\n if (this.directory.tables['CFF ']) {\n return new CFFSubset(this);\n }\n\n return new TTFSubset(this);\n }\n /**\r\n * Returns an object describing the available variation axes\r\n * that this font supports. Keys are setting tags, and values\r\n * contain the axis name, range, and default value.\r\n *\r\n * @type {object}\r\n */\n ;\n\n /**\r\n * Returns a new font with the given variation settings applied.\r\n * Settings can either be an instance name, or an object containing\r\n * variation tags as specified by the `variationAxes` property.\r\n *\r\n * @param {object} settings\r\n * @return {TTFFont}\r\n */\n _proto43.getVariation = function getVariation(settings) {\n if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) {\n throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\n }\n\n if (typeof settings === 'string') {\n settings = this.namedVariations[settings];\n }\n\n if (typeof settings !== 'object') {\n throw new Error('Variation settings must be either a variation name or settings object.');\n } // normalize the coordinates\n\n\n var coords = this.fvar.axis.map(function (axis, i) {\n var axisTag = axis.axisTag.trim();\n\n if (axisTag in settings) {\n return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\n } else {\n return axis.defaultValue;\n }\n });\n var stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = this._directoryPos;\n var font = new TTFFont(stream, coords);\n font._tables = this._tables;\n return font;\n };\n\n // Standardized format plugin API\n _proto43.getFont = function getFont(name) {\n return this.getVariation(name);\n };\n\n _createClass(TTFFont, [{\n key: \"postscriptName\",\n get: function get() {\n return this.getName('postscriptName');\n }\n /**\r\n * The font's full name, e.g. \"Helvetica Bold\"\r\n * @type {string}\r\n */\n\n }, {\n key: \"fullName\",\n get: function get() {\n return this.getName('fullName');\n }\n /**\r\n * The font's family name, e.g. \"Helvetica\"\r\n * @type {string}\r\n */\n\n }, {\n key: \"familyName\",\n get: function get() {\n return this.getName('fontFamily');\n }\n /**\r\n * The font's sub-family, e.g. \"Bold\".\r\n * @type {string}\r\n */\n\n }, {\n key: \"subfamilyName\",\n get: function get() {\n return this.getName('fontSubfamily');\n }\n /**\r\n * The font's copyright information\r\n * @type {string}\r\n */\n\n }, {\n key: \"copyright\",\n get: function get() {\n return this.getName('copyright');\n }\n /**\r\n * The font's version number\r\n * @type {string}\r\n */\n\n }, {\n key: \"version\",\n get: function get() {\n return this.getName('version');\n }\n /**\r\n * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\r\n * @type {number}\r\n */\n\n }, {\n key: \"ascent\",\n get: function get() {\n return this.hhea.ascent;\n }\n /**\r\n * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\r\n * @type {number}\r\n */\n\n }, {\n key: \"descent\",\n get: function get() {\n return this.hhea.descent;\n }\n /**\r\n * The amount of space that should be included between lines\r\n * @type {number}\r\n */\n\n }, {\n key: \"lineGap\",\n get: function get() {\n return this.hhea.lineGap;\n }\n /**\r\n * The offset from the normal underline position that should be used\r\n * @type {number}\r\n */\n\n }, {\n key: \"underlinePosition\",\n get: function get() {\n return this.post.underlinePosition;\n }\n /**\r\n * The weight of the underline that should be used\r\n * @type {number}\r\n */\n\n }, {\n key: \"underlineThickness\",\n get: function get() {\n return this.post.underlineThickness;\n }\n /**\r\n * If this is an italic font, the angle the cursor should be drawn at to match the font design\r\n * @type {number}\r\n */\n\n }, {\n key: \"italicAngle\",\n get: function get() {\n return this.post.italicAngle;\n }\n /**\r\n * The height of capital letters above the baseline.\r\n * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\r\n * @type {number}\r\n */\n\n }, {\n key: \"capHeight\",\n get: function get() {\n var os2 = this['OS/2'];\n return os2 ? os2.capHeight : this.ascent;\n }\n /**\r\n * The height of lower case letters in the font.\r\n * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\r\n * @type {number}\r\n */\n\n }, {\n key: \"xHeight\",\n get: function get() {\n var os2 = this['OS/2'];\n return os2 ? os2.xHeight : 0;\n }\n /**\r\n * The number of glyphs in the font.\r\n * @type {number}\r\n */\n\n }, {\n key: \"numGlyphs\",\n get: function get() {\n return this.maxp.numGlyphs;\n }\n /**\r\n * The size of the font’s internal coordinate grid\r\n * @type {number}\r\n */\n\n }, {\n key: \"unitsPerEm\",\n get: function get() {\n return this.head.unitsPerEm;\n }\n /**\r\n * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\r\n * @type {BBox}\r\n */\n\n }, {\n key: \"bbox\",\n get: function get() {\n return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\n }\n }, {\n key: \"_cmapProcessor\",\n get: function get() {\n return new CmapProcessor(this.cmap);\n }\n /**\r\n * An array of all of the unicode code points supported by the font.\r\n * @type {number[]}\r\n */\n\n }, {\n key: \"characterSet\",\n get: function get() {\n return this._cmapProcessor.getCharacterSet();\n }\n }, {\n key: \"_layoutEngine\",\n get: function get() {\n return new LayoutEngine(this);\n }\n }, {\n key: \"availableFeatures\",\n get: function get() {\n return this._layoutEngine.getAvailableFeatures();\n }\n }, {\n key: \"variationAxes\",\n get: function get() {\n var res = {};\n\n if (!this.fvar) {\n return res;\n }\n\n for (var _iterator76 = _createForOfIteratorHelperLoose(this.fvar.axis), _step76; !(_step76 = _iterator76()).done;) {\n var axis = _step76.value;\n res[axis.axisTag.trim()] = {\n name: axis.name.en,\n min: axis.minValue,\n default: axis.defaultValue,\n max: axis.maxValue\n };\n }\n\n return res;\n }\n /**\r\n * Returns an object describing the named variation instances\r\n * that the font designer has specified. Keys are variation names\r\n * and values are the variation settings for this instance.\r\n *\r\n * @type {object}\r\n */\n\n }, {\n key: \"namedVariations\",\n get: function get() {\n var res = {};\n\n if (!this.fvar) {\n return res;\n }\n\n for (var _iterator77 = _createForOfIteratorHelperLoose(this.fvar.instance), _step77; !(_step77 = _iterator77()).done;) {\n var instance = _step77.value;\n var settings = {};\n\n for (var i = 0; i < this.fvar.axis.length; i++) {\n var axis = this.fvar.axis[i];\n settings[axis.axisTag.trim()] = instance.coord[i];\n }\n\n res[instance.name.en] = settings;\n }\n\n return res;\n }\n }, {\n key: \"_variationProcessor\",\n get: function get() {\n if (!this.fvar) {\n return null;\n }\n\n var variationCoords = this.variationCoords; // Ignore if no variation coords and not CFF2\n\n if (!variationCoords && !this.CFF2) {\n return null;\n }\n\n if (!variationCoords) {\n variationCoords = this.fvar.axis.map(function (axis) {\n return axis.defaultValue;\n });\n }\n\n return new GlyphVariationProcessor(this, variationCoords);\n }\n }]);\n\n return TTFFont;\n}(), (_applyDecoratedDescriptor(_class$4.prototype, \"bbox\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"bbox\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_cmapProcessor\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_cmapProcessor\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"characterSet\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"characterSet\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_layoutEngine\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_layoutEngine\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"variationAxes\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"variationAxes\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"namedVariations\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"namedVariations\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_variationProcessor\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_variationProcessor\"), _class$4.prototype)), _class$4);\nvar WOFFDirectoryEntry = new r.Struct({\n tag: new r.String(4),\n offset: new r.Pointer(r.uint32, 'void', {\n type: 'global'\n }),\n compLength: r.uint32,\n length: r.uint32,\n origChecksum: r.uint32\n});\nvar WOFFDirectory = new r.Struct({\n tag: new r.String(4),\n // should be 'wOFF'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFFDirectoryEntry, 'numTables')\n});\n\nWOFFDirectory.process = function () {\n var tables = {};\n\n for (var _iterator78 = _createForOfIteratorHelperLoose(this.tables), _step78; !(_step78 = _iterator78()).done;) {\n var table = _step78.value;\n tables[table.tag] = table;\n }\n\n this.tables = tables;\n};\n\nvar WOFFFont = /*#__PURE__*/function (_TTFFont) {\n _inheritsLoose(WOFFFont, _TTFFont);\n\n function WOFFFont() {\n return _TTFFont.apply(this, arguments) || this;\n }\n\n WOFFFont.probe = function probe(buffer) {\n return buffer.toString('ascii', 0, 4) === 'wOFF';\n };\n\n var _proto44 = WOFFFont.prototype;\n\n _proto44._decodeDirectory = function _decodeDirectory() {\n this.directory = WOFFDirectory.decode(this.stream, {\n _startOffset: 0\n });\n };\n\n _proto44._getTableStream = function _getTableStream(tag) {\n var table = this.directory.tables[tag];\n\n if (table) {\n this.stream.pos = table.offset;\n\n if (table.compLength < table.length) {\n this.stream.pos += 2; // skip deflate header\n\n var outBuffer = Buffer.alloc(table.length);\n var buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\n return new r.DecodeStream(buf);\n } else {\n return this.stream;\n }\n }\n\n return null;\n };\n\n return WOFFFont;\n}(TTFFont);\n/**\r\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\r\n */\n\n\nvar WOFF2Glyph = /*#__PURE__*/function (_TTFGlyph2) {\n _inheritsLoose(WOFF2Glyph, _TTFGlyph2);\n\n function WOFF2Glyph() {\n return _TTFGlyph2.apply(this, arguments) || this;\n }\n\n var _proto45 = WOFF2Glyph.prototype;\n\n _proto45._decode = function _decode() {\n // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\n return this._font._transformedGlyphs[this.id];\n };\n\n _proto45._getCBox = function _getCBox() {\n return this.path.bbox;\n };\n\n return WOFF2Glyph;\n}(TTFGlyph);\n\nvar Base128 = {\n decode: function decode(stream) {\n var result = 0;\n var iterable = [0, 1, 2, 3, 4];\n\n for (var j = 0; j < iterable.length; j++) {\n var code = stream.readUInt8(); // If any of the top seven bits are set then we're about to overflow.\n\n if (result & 0xe0000000) {\n throw new Error('Overflow');\n }\n\n result = result << 7 | code & 0x7f;\n\n if ((code & 0x80) === 0) {\n return result;\n }\n }\n\n throw new Error('Bad base 128 number');\n }\n};\nvar knownTags = ['cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ', 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp', 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF', 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL', 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc', 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx', 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'];\nvar WOFF2DirectoryEntry = new r.Struct({\n flags: r.uint8,\n customTag: new r.Optional(new r.String(4), function (t) {\n return (t.flags & 0x3f) === 0x3f;\n }),\n tag: function tag(t) {\n return t.customTag || knownTags[t.flags & 0x3f];\n },\n // || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\n length: Base128,\n transformVersion: function transformVersion(t) {\n return t.flags >>> 6 & 0x03;\n },\n transformed: function transformed(t) {\n return t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0;\n },\n transformLength: new r.Optional(Base128, function (t) {\n return t.transformed;\n })\n});\nvar WOFF2Directory = new r.Struct({\n tag: new r.String(4),\n // should be 'wOF2'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n totalCompressedSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\n});\n\nWOFF2Directory.process = function () {\n var tables = {};\n\n for (var i = 0; i < this.tables.length; i++) {\n var table = this.tables[i];\n tables[table.tag] = table;\n }\n\n return this.tables = tables;\n};\n/**\r\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\r\n * See spec here: http://www.w3.org/TR/WOFF2/\r\n */\n\n\nvar WOFF2Font = /*#__PURE__*/function (_TTFFont2) {\n _inheritsLoose(WOFF2Font, _TTFFont2);\n\n function WOFF2Font() {\n return _TTFFont2.apply(this, arguments) || this;\n }\n\n WOFF2Font.probe = function probe(buffer) {\n return buffer.toString('ascii', 0, 4) === 'wOF2';\n };\n\n var _proto46 = WOFF2Font.prototype;\n\n _proto46._decodeDirectory = function _decodeDirectory() {\n this.directory = WOFF2Directory.decode(this.stream);\n this._dataPos = this.stream.pos;\n };\n\n _proto46._decompress = function _decompress() {\n // decompress data and setup table offsets if we haven't already\n if (!this._decompressed) {\n this.stream.pos = this._dataPos;\n var buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\n var decompressedSize = 0;\n\n for (var tag in this.directory.tables) {\n var entry = this.directory.tables[tag];\n entry.offset = decompressedSize;\n decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length;\n }\n\n var decompressed = brotli(buffer, decompressedSize);\n\n if (!decompressed) {\n throw new Error('Error decoding compressed data in WOFF2');\n }\n\n this.stream = new r.DecodeStream(Buffer.from(decompressed));\n this._decompressed = true;\n }\n };\n\n _proto46._decodeTable = function _decodeTable(table) {\n this._decompress();\n\n return _TTFFont2.prototype._decodeTable.call(this, table);\n } // Override this method to get a glyph and return our\n // custom subclass if there is a glyf table.\n ;\n\n _proto46._getBaseGlyph = function _getBaseGlyph(glyph, characters) {\n if (characters === void 0) {\n characters = [];\n }\n\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\n if (!this._transformedGlyphs) {\n this._transformGlyfTable();\n }\n\n return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\n } else {\n return _TTFFont2.prototype._getBaseGlyph.call(this, glyph, characters);\n }\n }\n };\n\n _proto46._transformGlyfTable = function _transformGlyfTable() {\n this._decompress();\n\n this.stream.pos = this.directory.tables.glyf.offset;\n var table = GlyfTable.decode(this.stream);\n var glyphs = [];\n\n for (var index = 0; index < table.numGlyphs; index++) {\n var glyph = {};\n var nContours = table.nContours.readInt16BE();\n glyph.numberOfContours = nContours;\n\n if (nContours > 0) {\n // simple glyph\n var nPoints = [];\n var totalPoints = 0;\n\n for (var i = 0; i < nContours; i++) {\n var _r = read255UInt16(table.nPoints);\n\n totalPoints += _r;\n nPoints.push(totalPoints);\n }\n\n glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\n\n for (var _i = 0; _i < nContours; _i++) {\n glyph.points[nPoints[_i] - 1].endContour = true;\n }\n\n var instructionSize = read255UInt16(table.glyphs);\n } else if (nContours < 0) {\n // composite glyph\n var haveInstructions = TTFGlyph.prototype._decodeComposite.call({\n _font: this\n }, glyph, table.composites);\n\n if (haveInstructions) {\n var instructionSize = read255UInt16(table.glyphs);\n }\n }\n\n glyphs.push(glyph);\n }\n\n this._transformedGlyphs = glyphs;\n };\n\n return WOFF2Font;\n}(TTFFont); // Special class that accepts a length and returns a sub-stream for that data\n\n\nvar Substream = /*#__PURE__*/function () {\n function Substream(length) {\n this.length = length;\n this._buf = new r.Buffer(length);\n }\n\n var _proto47 = Substream.prototype;\n\n _proto47.decode = function decode(stream, parent) {\n return new r.DecodeStream(this._buf.decode(stream, parent));\n };\n\n return Substream;\n}(); // This struct represents the entire glyf table\n\n\nvar GlyfTable = new r.Struct({\n version: r.uint32,\n numGlyphs: r.uint16,\n indexFormat: r.uint16,\n nContourStreamSize: r.uint32,\n nPointsStreamSize: r.uint32,\n flagStreamSize: r.uint32,\n glyphStreamSize: r.uint32,\n compositeStreamSize: r.uint32,\n bboxStreamSize: r.uint32,\n instructionStreamSize: r.uint32,\n nContours: new Substream('nContourStreamSize'),\n nPoints: new Substream('nPointsStreamSize'),\n flags: new Substream('flagStreamSize'),\n glyphs: new Substream('glyphStreamSize'),\n composites: new Substream('compositeStreamSize'),\n bboxes: new Substream('bboxStreamSize'),\n instructions: new Substream('instructionStreamSize')\n});\nvar WORD_CODE = 253;\nvar ONE_MORE_BYTE_CODE2 = 254;\nvar ONE_MORE_BYTE_CODE1 = 255;\nvar LOWEST_U_CODE = 253;\n\nfunction read255UInt16(stream) {\n var code = stream.readUInt8();\n\n if (code === WORD_CODE) {\n return stream.readUInt16BE();\n }\n\n if (code === ONE_MORE_BYTE_CODE1) {\n return stream.readUInt8() + LOWEST_U_CODE;\n }\n\n if (code === ONE_MORE_BYTE_CODE2) {\n return stream.readUInt8() + LOWEST_U_CODE * 2;\n }\n\n return code;\n}\n\nfunction withSign(flag, baseval) {\n return flag & 1 ? baseval : -baseval;\n}\n\nfunction decodeTriplet(flags, glyphs, nPoints) {\n var y;\n var x = y = 0;\n var res = [];\n\n for (var i = 0; i < nPoints; i++) {\n var dx = 0,\n dy = 0;\n var flag = flags.readUInt8();\n var onCurve = !(flag >> 7);\n flag &= 0x7f;\n\n if (flag < 10) {\n dx = 0;\n dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\n } else if (flag < 20) {\n dx = withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8());\n dy = 0;\n } else if (flag < 84) {\n var b0 = flag - 20;\n var b1 = glyphs.readUInt8();\n dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\n dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\n } else if (flag < 120) {\n var b0 = flag - 84;\n dx = withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8());\n dy = withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8());\n } else if (flag < 124) {\n var b1 = glyphs.readUInt8();\n var b2 = glyphs.readUInt8();\n dx = withSign(flag, (b1 << 4) + (b2 >> 4));\n dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\n } else {\n dx = withSign(flag, glyphs.readUInt16BE());\n dy = withSign(flag >> 1, glyphs.readUInt16BE());\n }\n\n x += dx;\n y += dy;\n res.push(new Point(onCurve, false, x, y));\n }\n\n return res;\n}\n\nvar TTCHeader = new r.VersionedStruct(r.uint32, {\n 0x00010000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts')\n },\n 0x00020000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts'),\n dsigTag: r.uint32,\n dsigLength: r.uint32,\n dsigOffset: r.uint32\n }\n});\n\nvar TrueTypeCollection = /*#__PURE__*/function () {\n TrueTypeCollection.probe = function probe(buffer) {\n return buffer.toString('ascii', 0, 4) === 'ttcf';\n };\n\n function TrueTypeCollection(stream) {\n this.stream = stream;\n\n if (stream.readString(4) !== 'ttcf') {\n throw new Error('Not a TrueType collection');\n }\n\n this.header = TTCHeader.decode(stream);\n }\n\n var _proto48 = TrueTypeCollection.prototype;\n\n _proto48.getFont = function getFont(name) {\n for (var _iterator79 = _createForOfIteratorHelperLoose(this.header.offsets), _step79; !(_step79 = _iterator79()).done;) {\n var offset = _step79.value;\n var stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n var font = new TTFFont(stream);\n\n if (font.postscriptName === name) {\n return font;\n }\n }\n\n return null;\n };\n\n _createClass(TrueTypeCollection, [{\n key: \"fonts\",\n get: function get() {\n var fonts = [];\n\n for (var _iterator80 = _createForOfIteratorHelperLoose(this.header.offsets), _step80; !(_step80 = _iterator80()).done;) {\n var offset = _step80.value;\n var stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n fonts.push(new TTFFont(stream));\n }\n\n return fonts;\n }\n }]);\n\n return TrueTypeCollection;\n}();\n\nvar DFontName = new r.String(r.uint8);\nvar DFontData = new r.Struct({\n len: r.uint32,\n buf: new r.Buffer('len')\n});\nvar Ref = new r.Struct({\n id: r.uint16,\n nameOffset: r.int16,\n attr: r.uint8,\n dataOffset: r.uint24,\n handle: r.uint32\n});\nvar Type = new r.Struct({\n name: new r.String(4),\n maxTypeIndex: r.uint16,\n refList: new r.Pointer(r.uint16, new r.Array(Ref, function (t) {\n return t.maxTypeIndex + 1;\n }), {\n type: 'parent'\n })\n});\nvar TypeList = new r.Struct({\n length: r.uint16,\n types: new r.Array(Type, function (t) {\n return t.length + 1;\n })\n});\nvar DFontMap = new r.Struct({\n reserved: new r.Reserved(r.uint8, 24),\n typeList: new r.Pointer(r.uint16, TypeList),\n nameListOffset: new r.Pointer(r.uint16, 'void')\n});\nvar DFontHeader = new r.Struct({\n dataOffset: r.uint32,\n map: new r.Pointer(r.uint32, DFontMap),\n dataLength: r.uint32,\n mapLength: r.uint32\n});\n\nvar DFont = /*#__PURE__*/function () {\n DFont.probe = function probe(buffer) {\n var stream = new r.DecodeStream(buffer);\n\n try {\n var header = DFontHeader.decode(stream);\n } catch (e) {\n return false;\n }\n\n for (var _iterator81 = _createForOfIteratorHelperLoose(header.map.typeList.types), _step81; !(_step81 = _iterator81()).done;) {\n var type = _step81.value;\n\n if (type.name === 'sfnt') {\n return true;\n }\n }\n\n return false;\n };\n\n function DFont(stream) {\n this.stream = stream;\n this.header = DFontHeader.decode(this.stream);\n\n for (var _iterator82 = _createForOfIteratorHelperLoose(this.header.map.typeList.types), _step82; !(_step82 = _iterator82()).done;) {\n var type = _step82.value;\n\n for (var _iterator83 = _createForOfIteratorHelperLoose(type.refList), _step83; !(_step83 = _iterator83()).done;) {\n var ref = _step83.value;\n\n if (ref.nameOffset >= 0) {\n this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\n ref.name = DFontName.decode(this.stream);\n } else {\n ref.name = null;\n }\n }\n\n if (type.name === 'sfnt') {\n this.sfnt = type;\n }\n }\n }\n\n var _proto49 = DFont.prototype;\n\n _proto49.getFont = function getFont(name) {\n if (!this.sfnt) {\n return null;\n }\n\n for (var _iterator84 = _createForOfIteratorHelperLoose(this.sfnt.refList), _step84; !(_step84 = _iterator84()).done;) {\n var ref = _step84.value;\n var pos = this.header.dataOffset + ref.dataOffset + 4;\n var stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n var font = new TTFFont(stream);\n\n if (font.postscriptName === name) {\n return font;\n }\n }\n\n return null;\n };\n\n _createClass(DFont, [{\n key: \"fonts\",\n get: function get() {\n var fonts = [];\n\n for (var _iterator85 = _createForOfIteratorHelperLoose(this.sfnt.refList), _step85; !(_step85 = _iterator85()).done;) {\n var ref = _step85.value;\n var pos = this.header.dataOffset + ref.dataOffset + 4;\n var stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n fonts.push(new TTFFont(stream));\n }\n\n return fonts;\n }\n }]);\n\n return DFont;\n}();\n\nfontkit.registerFormat(TTFFont);\nfontkit.registerFormat(WOFFFont);\nfontkit.registerFormat(WOFF2Font);\nfontkit.registerFormat(TrueTypeCollection);\nfontkit.registerFormat(DFont);\nmodule.exports = fontkit;\n\n/***/ }),\n\n/***/ 7337:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2267769__) {\n\n\"use strict\";\n\n\nvar UnicodeTrie = __nested_webpack_require_2267769__(4781);\n\n\n\nvar base64 = __nested_webpack_require_2267769__(9742);\n\nvar _require = __nested_webpack_require_2267769__(2055),\n BK = _require.BK,\n CR = _require.CR,\n LF = _require.LF,\n NL = _require.NL,\n SG = _require.SG,\n WJ = _require.WJ,\n SP = _require.SP,\n ZWJ = _require.ZWJ,\n BA = _require.BA,\n HY = _require.HY,\n NS = _require.NS,\n AI = _require.AI,\n AL = _require.AL,\n CJ = _require.CJ,\n HL = _require.HL,\n RI = _require.RI,\n SA = _require.SA,\n XX = _require.XX;\n\nvar _require2 = __nested_webpack_require_2267769__(8383),\n DI_BRK = _require2.DI_BRK,\n IN_BRK = _require2.IN_BRK,\n CI_BRK = _require2.CI_BRK,\n CP_BRK = _require2.CP_BRK,\n PR_BRK = _require2.PR_BRK,\n pairTable = _require2.pairTable;\n\nvar data = base64.toByteArray(\"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\");\nvar classTrie = new UnicodeTrie(data);\n\nvar mapClass = function mapClass(c) {\n switch (c) {\n case AI:\n return AL;\n\n case SA:\n case SG:\n case XX:\n return AL;\n\n case CJ:\n return NS;\n\n default:\n return c;\n }\n};\n\nvar mapFirst = function mapFirst(c) {\n switch (c) {\n case LF:\n case NL:\n return BK;\n\n case SP:\n return WJ;\n\n default:\n return c;\n }\n};\n\nvar Break = function Break(position, required) {\n if (required === void 0) {\n required = false;\n }\n\n this.position = position;\n this.required = required;\n};\n\nvar LineBreaker = /*#__PURE__*/function () {\n function LineBreaker(string) {\n this.string = string;\n this.pos = 0;\n this.lastPos = 0;\n this.curClass = null;\n this.nextClass = null;\n this.LB8a = false;\n this.LB21a = false;\n this.LB30a = 0;\n }\n\n var _proto = LineBreaker.prototype;\n\n _proto.nextCodePoint = function nextCodePoint() {\n var code = this.string.charCodeAt(this.pos++);\n var next = this.string.charCodeAt(this.pos); // If a surrogate pair\n\n if (0xd800 <= code && code <= 0xdbff && 0xdc00 <= next && next <= 0xdfff) {\n this.pos++;\n return (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000;\n }\n\n return code;\n };\n\n _proto.nextCharClass = function nextCharClass() {\n return mapClass(classTrie.get(this.nextCodePoint()));\n };\n\n _proto.getSimpleBreak = function getSimpleBreak() {\n // handle classes not handled by the pair table\n switch (this.nextClass) {\n case SP:\n return false;\n\n case BK:\n case LF:\n case NL:\n this.curClass = BK;\n return false;\n\n case CR:\n this.curClass = CR;\n return false;\n }\n\n return null;\n };\n\n _proto.getPairTableBreak = function getPairTableBreak(lastClass) {\n // if not handled already, use the pair table\n var shouldBreak = false;\n\n switch (pairTable[this.curClass][this.nextClass]) {\n case DI_BRK:\n // Direct break\n shouldBreak = true;\n break;\n\n case IN_BRK:\n // possible indirect break\n shouldBreak = lastClass === SP;\n break;\n\n case CI_BRK:\n shouldBreak = lastClass === SP;\n\n if (!shouldBreak) {\n shouldBreak = false;\n return shouldBreak;\n }\n\n break;\n\n case CP_BRK:\n // prohibited for combining marks\n if (lastClass !== SP) {\n return shouldBreak;\n }\n\n break;\n\n case PR_BRK:\n break;\n }\n\n if (this.LB8a) {\n shouldBreak = false;\n } // Rule LB21a\n\n\n if (this.LB21a && (this.curClass === HY || this.curClass === BA)) {\n shouldBreak = false;\n this.LB21a = false;\n } else {\n this.LB21a = this.curClass === HL;\n } // Rule LB30a\n\n\n if (this.curClass === RI) {\n this.LB30a++;\n\n if (this.LB30a == 2 && this.nextClass === RI) {\n shouldBreak = true;\n this.LB30a = 0;\n }\n } else {\n this.LB30a = 0;\n }\n\n this.curClass = this.nextClass;\n return shouldBreak;\n };\n\n _proto.nextBreak = function nextBreak() {\n // get the first char if we're at the beginning of the string\n if (this.curClass == null) {\n var firstClass = this.nextCharClass();\n this.curClass = mapFirst(firstClass);\n this.nextClass = firstClass;\n this.LB8a = firstClass === ZWJ;\n this.LB30a = 0;\n }\n\n while (this.pos < this.string.length) {\n this.lastPos = this.pos;\n var lastClass = this.nextClass;\n this.nextClass = this.nextCharClass(); // explicit newline\n\n if (this.curClass === BK || this.curClass === CR && this.nextClass !== LF) {\n this.curClass = mapFirst(mapClass(this.nextClass));\n return new Break(this.lastPos, true);\n }\n\n var shouldBreak = this.getSimpleBreak();\n\n if (shouldBreak === null) {\n shouldBreak = this.getPairTableBreak(lastClass);\n } // Rule LB8a\n\n\n this.LB8a = this.nextClass === ZWJ;\n\n if (shouldBreak) {\n return new Break(this.lastPos);\n }\n }\n\n if (this.lastPos < this.string.length) {\n this.lastPos = this.string.length;\n return new Break(this.string.length);\n }\n\n return null;\n };\n\n return LineBreaker;\n}();\n\nmodule.exports = LineBreaker;\n\n/***/ }),\n\n/***/ 4927:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2278071__) {\n\n\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!__nested_webpack_require_2278071__.g.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = __nested_webpack_require_2278071__.g.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n\n\n/***/ }),\n\n/***/ 384:\n/***/ (function(module) {\n\nmodule.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}\n\n/***/ }),\n\n/***/ 5955:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_2280068__) {\n\n\"use strict\";\n// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n\n\nvar isArgumentsObject = __nested_webpack_require_2280068__(2584);\nvar isGeneratorFunction = __nested_webpack_require_2280068__(8662);\nvar whichTypedArray = __nested_webpack_require_2280068__(6430);\nvar isTypedArray = __nested_webpack_require_2280068__(5692);\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n\n\n/***/ }),\n\n/***/ 9539:\n/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_2288832__) {\n\n/* provided dependency */ var process = __nested_webpack_require_2288832__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = __nested_webpack_require_2288832__(5955);\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = __nested_webpack_require_2288832__(384);\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = __nested_webpack_require_2288832__(5717);\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n\n\n/***/ }),\n\n/***/ 6430:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2308710__) {\n\n\"use strict\";\n\n\nvar forEach = __nested_webpack_require_2308710__(4029);\nvar availableTypedArrays = __nested_webpack_require_2308710__(3083);\nvar callBound = __nested_webpack_require_2308710__(1924);\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = __nested_webpack_require_2308710__(6410)();\n\nvar g = typeof globalThis === 'undefined' ? __nested_webpack_require_2308710__.g : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = __nested_webpack_require_2308710__(882);\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = __nested_webpack_require_2308710__(5692);\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n\n\n/***/ }),\n\n/***/ 6513:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2310450__) {\n\n// This file is just added for convenience so this repository can be\n// directly checked out into a project's deps folder\nmodule.exports = __nested_webpack_require_2310450__(5011);\n\n\n/***/ }),\n\n/***/ 5011:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2310715__) {\n\n(function () {\n var sax;\n\n if (\n true &&\n module.exports &&\n !__nested_webpack_require_2310715__.g.xmldocAssumeBrowser\n ) {\n // We're being used in a Node-like environment\n sax = __nested_webpack_require_2310715__(6099);\n } else {\n // assume it's attached to the Window object in a browser\n sax = this.sax;\n\n if (!sax) {\n // no sax for you!\n throw new Error(\n \"Expected sax to be defined. Make sure you're including sax.js before this file.\",\n );\n }\n }\n\n /*\n * XmlElement is our basic building block. Everything is an XmlElement; even XmlDocument\n * behaves like an XmlElement by inheriting its attributes and functions.\n */\n\n function XmlElement(tag) {\n // Capture the parser object off of the XmlDocument delegate\n var parser = delegates[delegates.length - 1].parser;\n\n this.name = tag.name;\n this.attr = tag.attributes;\n this.val = \"\";\n this.children = [];\n this.firstChild = null;\n this.lastChild = null;\n\n // Assign parse information\n this.line = parser.line;\n this.column = parser.column;\n this.position = parser.position;\n this.startTagPosition = parser.startTagPosition;\n }\n\n // Private methods\n\n XmlElement.prototype._addChild = function (child) {\n // add to our children array\n this.children.push(child);\n\n // update first/last pointers\n if (!this.firstChild) this.firstChild = child;\n this.lastChild = child;\n };\n\n // SaxParser handlers\n\n XmlElement.prototype._opentag = function (tag) {\n var child = new XmlElement(tag);\n\n this._addChild(child);\n\n delegates.unshift(child);\n };\n\n XmlElement.prototype._closetag = function () {\n delegates.shift();\n };\n\n XmlElement.prototype._text = function (text) {\n if (typeof this.children === \"undefined\") return;\n\n this.val += text;\n\n this._addChild(new XmlTextNode(text));\n };\n\n XmlElement.prototype._cdata = function (cdata) {\n this.val += cdata;\n\n this._addChild(new XmlCDataNode(cdata));\n };\n\n XmlElement.prototype._comment = function (comment) {\n if (typeof this.children === \"undefined\") return;\n\n this._addChild(new XmlCommentNode(comment));\n };\n\n XmlElement.prototype._error = function (err) {\n throw err;\n };\n\n // Useful functions\n\n XmlElement.prototype.eachChild = function (iterator, context) {\n for (var i = 0, l = this.children.length; i < l; i++)\n if (this.children[i].type === \"element\")\n if (\n iterator.call(context, this.children[i], i, this.children) === false\n )\n return;\n };\n\n XmlElement.prototype.childNamed = function (name) {\n for (var i = 0, l = this.children.length; i < l; i++) {\n var child = this.children[i];\n if (child.name === name) return child;\n }\n return undefined;\n };\n\n XmlElement.prototype.childrenNamed = function (name) {\n var matches = [];\n\n for (var i = 0, l = this.children.length; i < l; i++)\n if (this.children[i].name === name) matches.push(this.children[i]);\n\n return matches;\n };\n\n XmlElement.prototype.childWithAttribute = function (name, value) {\n for (var i = 0, l = this.children.length; i < l; i++) {\n var child = this.children[i];\n if (\n child.type === \"element\" &&\n ((value && child.attr[name] === value) || (!value && child.attr[name]))\n )\n return child;\n }\n return undefined;\n };\n \n XmlElement.prototype.descendantsNamed = function (name) {\n var matches = [];\n\n for (var i = 0, l = this.children.length; i < l; i++) {\n var child = this.children[i];\n if (child.type === \"element\") {\n if (child.name === name) matches.push(child);\n matches = matches.concat(child.descendantsNamed(name));\n }\n }\n\n return matches;\n };\n\n XmlElement.prototype.descendantWithPath = function (path) {\n var descendant = this;\n var components = path.split(\".\");\n\n for (var i = 0, l = components.length; i < l; i++)\n if (descendant && descendant.type === \"element\")\n descendant = descendant.childNamed(components[i]);\n else return undefined;\n\n return descendant;\n };\n\n XmlElement.prototype.valueWithPath = function (path) {\n var components = path.split(\"@\");\n var descendant = this.descendantWithPath(components[0]);\n if (descendant)\n return components.length > 1\n ? descendant.attr[components[1]]\n : descendant.val;\n else return undefined;\n };\n\n // String formatting (for debugging)\n\n XmlElement.prototype.toString = function (options) {\n return this.toStringWithIndent(\"\", options);\n };\n\n XmlElement.prototype.toStringWithIndent = function (indent, options) {\n var s = indent + \"<\" + this.name;\n var linebreak = options && options.compressed ? \"\" : \"\\n\";\n var preserveWhitespace = options && options.preserveWhitespace;\n\n for (var name in this.attr)\n if (Object.prototype.hasOwnProperty.call(this.attr, name))\n s += \" \" + name + '=\"' + escapeXML(this.attr[name]) + '\"';\n\n if (this.children.length === 1 && this.children[0].type !== \"element\") {\n s += \">\" + this.children[0].toString(options) + \"</\" + this.name + \">\";\n } else if (this.children.length) {\n s += \">\" + linebreak;\n\n var childIndent = indent + (options && options.compressed ? \"\" : \" \");\n\n for (var i = 0, l = this.children.length; i < l; i++) {\n s +=\n this.children[i].toStringWithIndent(childIndent, options) + linebreak;\n }\n\n s += indent + \"</\" + this.name + \">\";\n } else if (options && options.html) {\n var whiteList = [\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"keygen\",\n \"link\",\n \"menuitem\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n ];\n if (whiteList.indexOf(this.name) !== -1) s += \"/>\";\n else s += \"></\" + this.name + \">\";\n } else {\n s += \"/>\";\n }\n\n return s;\n };\n\n // Alternative XML nodes\n\n function XmlTextNode(text) {\n this.text = text;\n }\n\n XmlTextNode.prototype.toString = function (options) {\n return formatText(escapeXML(this.text), options);\n };\n\n XmlTextNode.prototype.toStringWithIndent = function (indent, options) {\n return indent + this.toString(options);\n };\n\n function XmlCDataNode(cdata) {\n this.cdata = cdata;\n }\n\n XmlCDataNode.prototype.toString = function (options) {\n return \"<![CDATA[\" + formatText(this.cdata, options) + \"]]>\";\n };\n\n XmlCDataNode.prototype.toStringWithIndent = function (indent, options) {\n return indent + this.toString(options);\n };\n\n function XmlCommentNode(comment) {\n this.comment = comment;\n }\n\n XmlCommentNode.prototype.toString = function (options) {\n return \"<!--\" + formatText(escapeXML(this.comment), options) + \"-->\";\n };\n\n XmlCommentNode.prototype.toStringWithIndent = function (indent, options) {\n return indent + this.toString(options);\n };\n\n // Node type tag\n\n XmlElement.prototype.type = \"element\";\n XmlTextNode.prototype.type = \"text\";\n XmlCDataNode.prototype.type = \"cdata\";\n XmlCommentNode.prototype.type = \"comment\";\n\n /*\n * XmlDocument is the class we expose to the user; it uses the sax parser to create a hierarchy\n * of XmlElements.\n */\n\n function XmlDocument(xml) {\n xml && (xml = xml.toString().trim());\n\n if (!xml) throw new Error(\"No XML to parse!\");\n\n // Stores doctype (if defined)\n this.doctype = \"\";\n\n // Expose the parser to the other delegates while the parser is running\n this.parser = sax.parser(true); // strict\n addParserEvents(this.parser);\n\n // We'll use the file-scoped \"delegates\" var to remember what elements we're currently\n // parsing; they will push and pop off the stack as we get deeper into the XML hierarchy.\n // It's safe to use a global because JS is single-threaded.\n delegates = [this];\n\n this.parser.write(xml);\n\n // Remove the parser as it is no longer needed and should not be exposed to clients\n delete this.parser;\n }\n\n // make XmlDocument inherit XmlElement's methods\n extend(XmlDocument.prototype, XmlElement.prototype);\n\n XmlDocument.prototype._opentag = function (tag) {\n if (typeof this.children === \"undefined\")\n // the first tag we encounter should be the root - we'll \"become\" the root XmlElement\n XmlElement.call(this, tag);\n // all other tags will be the root element's children\n else XmlElement.prototype._opentag.apply(this, arguments);\n };\n\n XmlDocument.prototype._doctype = function (doctype) {\n this.doctype += doctype;\n };\n\n // file-scoped global stack of delegates\n var delegates = null;\n\n /*\n * Helper functions\n */\n\n function addParserEvents(parser) {\n parser.onopentag = parser_opentag;\n parser.onclosetag = parser_closetag;\n parser.ontext = parser_text;\n parser.oncdata = parser_cdata;\n parser.oncomment = parser_comment;\n parser.ondoctype = parser_doctype;\n parser.onerror = parser_error;\n }\n\n // create these closures and cache them by keeping them file-scoped\n function parser_opentag() {\n delegates[0] && delegates[0]._opentag.apply(delegates[0], arguments);\n }\n function parser_closetag() {\n delegates[0] && delegates[0]._closetag.apply(delegates[0], arguments);\n }\n function parser_text() {\n delegates[0] && delegates[0]._text.apply(delegates[0], arguments);\n }\n function parser_cdata() {\n delegates[0] && delegates[0]._cdata.apply(delegates[0], arguments);\n }\n function parser_comment() {\n delegates[0] && delegates[0]._comment.apply(delegates[0], arguments);\n }\n function parser_doctype() {\n delegates[0] && delegates[0]._doctype.apply(delegates[0], arguments);\n }\n function parser_error() {\n delegates[0] && delegates[0]._error.apply(delegates[0], arguments);\n }\n\n // a relatively standard extend method\n function extend(destination, source) {\n for (var prop in source)\n if (source.hasOwnProperty(prop)) destination[prop] = source[prop];\n }\n\n // escapes XML entities like \"<\", \"&\", etc.\n function escapeXML(value) {\n return value\n .toString()\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/'/g, \"'\")\n .replace(/\"/g, \""\");\n }\n\n // formats some text for debugging given a few options\n function formatText(text, options) {\n var finalText = text;\n\n if (options && options.trimmed && text.length > 25) {\n finalText = finalText.substring(0, 25).trim() + \"…\";\n }\n\n if (!(options && options.preserveWhitespace)) {\n finalText = finalText.trim();\n }\n\n return finalText;\n }\n\n // Are we being used in a Node-like environment?\n if (\n true &&\n module.exports &&\n !__nested_webpack_require_2310715__.g.xmldocAssumeBrowser\n ) {\n module.exports.XmlDocument = XmlDocument;\n module.exports.XmlElement = XmlElement;\n module.exports.XmlTextNode = XmlTextNode;\n module.exports.XmlCDataNode = XmlCDataNode;\n module.exports.XmlCommentNode = XmlCommentNode;\n } else {\n this.XmlDocument = XmlDocument;\n this.XmlElement = XmlElement;\n this.XmlTextNode = XmlTextNode;\n this.XmlCDataNode = XmlCDataNode;\n this.XmlCommentNode = XmlCommentNode;\n }\n})();\n\n\n/***/ }),\n\n/***/ 6255:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2322040__) {\n\n\"use strict\";\n\r\n\r\n// Internet Explorer polyfills\r\nif (typeof window !== 'undefined' && !window.Promise) {\r\n\t__nested_webpack_require_2322040__(3867);\r\n}\r\n__nested_webpack_require_2322040__(4667);\r\n\r\nvar fetchUrl = function (url, headers) {\r\n\treturn new Promise(function (resolve, reject) {\r\n\t\tvar xhr = new XMLHttpRequest();\r\n\t\txhr.open('GET', url, true);\r\n\t\tfor (var headerName in headers) {\r\n\t\t\txhr.setRequestHeader(headerName, headers[headerName]);\r\n\t\t}\r\n\t\txhr.responseType = 'arraybuffer';\r\n\r\n\t\txhr.onreadystatechange = function () {\r\n\t\t\tif (xhr.readyState !== 4) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar ok = xhr.status >= 200 && xhr.status < 300;\r\n\t\t\tif (!ok) {\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\treject(new TypeError('Failed to fetch (url: \"' + url + '\")'));\r\n\t\t\t\t}, 0);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\txhr.onload = function () {\r\n\t\t\tvar ok = xhr.status >= 200 && xhr.status < 300;\r\n\t\t\tif (ok) {\r\n\t\t\t\tresolve(xhr.response);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\txhr.onerror = function () {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\treject(new TypeError('Network request failed (url: \"' + url + '\")'));\r\n\t\t\t}, 0);\r\n\t\t};\r\n\r\n\t\txhr.ontimeout = function () {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\treject(new TypeError('Network request failed (url: \"' + url + '\")'));\r\n\t\t\t}, 0);\r\n\t\t};\r\n\r\n\t\txhr.send();\r\n\t});\r\n};\r\n\r\nfunction URLBrowserResolver(fs) {\r\n\tthis.fs = fs;\r\n\tthis.resolving = {};\r\n}\r\n\r\nURLBrowserResolver.prototype.resolve = function (url, headers) {\r\n\tif (!this.resolving[url]) {\r\n\t\tvar _this = this;\r\n\t\tthis.resolving[url] = new Promise(function (resolve, reject) {\r\n\t\t\tif (url.toLowerCase().indexOf('https://') === 0 || url.toLowerCase().indexOf('http://') === 0) {\r\n\t\t\t\tif (_this.fs.existsSync(url)) {\r\n\t\t\t\t\t// url was downloaded earlier\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfetchUrl(url, headers).then(function (buffer) {\r\n\t\t\t\t\t\t_this.fs.writeFileSync(url, buffer);\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}, function (result) {\r\n\t\t\t\t\t\treject(result);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// cannot be resolved\r\n\t\t\t\tresolve();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\treturn this.resolving[url];\r\n}\r\n\r\nURLBrowserResolver.prototype.resolved = function () {\r\n\tvar _this = this;\r\n\treturn new Promise(function (resolve, reject) {\r\n\t\tPromise.all(Object.values(_this.resolving)).then(function () {\r\n\t\t\tresolve();\r\n\t\t}, function (result) {\r\n\t\t\treject(result);\r\n\t\t});\r\n\t});\r\n}\r\n\r\nmodule.exports = URLBrowserResolver;\r\n\n\n/***/ }),\n\n/***/ 4275:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2324438__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __nested_webpack_require_2324438__(8823)[\"Buffer\"];\n\r\n\r\nvar isFunction = (__nested_webpack_require_2324438__(6225).isFunction);\r\nvar isUndefined = (__nested_webpack_require_2324438__(6225).isUndefined);\r\nvar isNull = (__nested_webpack_require_2324438__(6225).isNull);\r\nvar FileSaver = __nested_webpack_require_2324438__(8487);\r\nvar saveAs = FileSaver.saveAs;\r\n\r\nvar defaultClientFonts = {\r\n\tRoboto: {\r\n\t\tnormal: 'Roboto-Regular.ttf',\r\n\t\tbold: 'Roboto-Medium.ttf',\r\n\t\titalics: 'Roboto-Italic.ttf',\r\n\t\tbolditalics: 'Roboto-MediumItalic.ttf'\r\n\t}\r\n};\r\n\r\nfunction Document(docDefinition, tableLayouts, fonts, vfs) {\r\n\tthis.docDefinition = docDefinition;\r\n\tthis.tableLayouts = tableLayouts || null;\r\n\tthis.fonts = fonts || defaultClientFonts;\r\n\tthis.vfs = vfs;\r\n}\r\n\r\nfunction canCreatePdf() {\r\n\t// Ensure the browser provides the level of support needed\r\n\ttry {\r\n\t\tvar arr = new Uint8Array(1)\r\n\t\tvar proto = { foo: function () { return 42 } }\r\n\t\tObject.setPrototypeOf(proto, Uint8Array.prototype)\r\n\t\tObject.setPrototypeOf(arr, proto)\r\n\t\treturn arr.foo() === 42\r\n\t} catch (e) {\r\n\t\treturn false\r\n\t}\r\n}\r\n\r\nDocument.prototype._createDoc = function (options, cb) {\r\n\tvar getExtendedUrl = function (url) {\r\n\t\tif (typeof url === 'object') {\r\n\t\t\treturn { url: url.url, headers: url.headers };\r\n\t\t}\r\n\r\n\t\treturn { url: url, headers: {} };\r\n\t};\r\n\r\n\toptions = options || {};\r\n\tif (this.tableLayouts) {\r\n\t\toptions.tableLayouts = this.tableLayouts;\r\n\t}\r\n\r\n\tvar PdfPrinter = __nested_webpack_require_2324438__(8617);\r\n\r\n\tvar printer = new PdfPrinter(this.fonts);\r\n\t(__nested_webpack_require_2324438__(3857).bindFS)(this.vfs); // bind virtual file system to file system\r\n\r\n\tif (!isFunction(cb)) {\r\n\t\tvar doc = printer.createPdfKitDocument(this.docDefinition, options);\r\n\r\n\t\treturn doc;\r\n\t}\r\n\r\n\tvar URLBrowserResolver = __nested_webpack_require_2324438__(6255);\r\n\tvar urlResolver = new URLBrowserResolver(__nested_webpack_require_2324438__(3857));\r\n\r\n\tfor (var font in this.fonts) {\r\n\t\tif (this.fonts.hasOwnProperty(font)) {\r\n\t\t\tif (this.fonts[font].normal) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].normal)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].normal[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].normal[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].normal);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].normal = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.fonts[font].bold) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].bold)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bold[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bold[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bold);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bold = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.fonts[font].italics) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].italics)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].italics[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].italics[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].italics);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].italics = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.fonts[font].bolditalics) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].bolditalics)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bolditalics[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bolditalics[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bolditalics);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bolditalics = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (this.docDefinition.images) {\r\n\t\tfor (var image in this.docDefinition.images) {\r\n\t\t\tif (this.docDefinition.images.hasOwnProperty(image)) {\r\n\t\t\t\tvar url = getExtendedUrl(this.docDefinition.images[image]);\r\n\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\tthis.docDefinition.images[image] = url.url;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar _this = this;\r\n\r\n\turlResolver.resolved().then(function () {\r\n\t\tvar doc = printer.createPdfKitDocument(_this.docDefinition, options);\r\n\r\n\t\tcb(doc);\r\n\t}, function (result) {\r\n\t\tthrow result;\r\n\t});\r\n};\r\n\r\nDocument.prototype._flushDoc = function (doc, callback) {\r\n\tvar chunks = [];\r\n\tvar result;\r\n\r\n\tdoc.on('readable', function () {\r\n\t\tvar chunk;\r\n\t\twhile ((chunk = doc.read(9007199254740991)) !== null) {\r\n\t\t\tchunks.push(chunk);\r\n\t\t}\r\n\t});\r\n\tdoc.on('end', function () {\r\n\t\tresult = Buffer.concat(chunks);\r\n\t\tcallback(result, doc._pdfMakePages);\r\n\t});\r\n\tdoc.end();\r\n};\r\n\r\nDocument.prototype._getPages = function (options, cb) {\r\n\tif (!cb) {\r\n\t\tthrow '_getPages is an async method and needs a callback argument';\r\n\t}\r\n\tvar _this = this;\r\n\r\n\tthis._createDoc(options, function (doc) {\r\n\t\t_this._flushDoc(doc, function (ignoreBuffer, pages) {\r\n\t\t\tcb(pages);\r\n\t\t});\r\n\t});\r\n};\r\n\r\nDocument.prototype._bufferToBlob = function (buffer) {\r\n\tvar blob;\r\n\ttry {\r\n\t\tblob = new Blob([buffer], { type: 'application/pdf' });\r\n\t} catch (e) {\r\n\t\t// Old browser which can't handle it without making it an byte array (ie10)\r\n\t\tif (e.name === 'InvalidStateError') {\r\n\t\t\tvar byteArray = new Uint8Array(buffer);\r\n\t\t\tblob = new Blob([byteArray.buffer], { type: 'application/pdf' });\r\n\t\t}\r\n\t}\r\n\r\n\tif (!blob) {\r\n\t\tthrow 'Could not generate blob';\r\n\t}\r\n\r\n\treturn blob;\r\n};\r\n\r\nDocument.prototype._openWindow = function () {\r\n\t// we have to open the window immediately and store the reference\r\n\t// otherwise popup blockers will stop us\r\n\tvar win = window.open('', '_blank');\r\n\tif (win === null) {\r\n\t\tthrow 'Open PDF in new window blocked by browser';\r\n\t}\r\n\r\n\treturn win;\r\n};\r\n\r\nDocument.prototype._openPdf = function (options, win) {\r\n\tif (!win) {\r\n\t\twin = this._openWindow();\r\n\t}\r\n\ttry {\r\n\t\tthis.getBlob(function (result) {\r\n\t\t\tvar urlCreator = window.URL || window.webkitURL;\r\n\t\t\tvar pdfUrl = urlCreator.createObjectURL(result);\r\n\t\t\twin.location.href = pdfUrl;\r\n\r\n\t\t\t/* temporarily disabled\r\n\t\t\tif (win !== window) {\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\tif (isNull(win.window)) { // is closed by AdBlock\r\n\t\t\t\t\t\twindow.location.href = pdfUrl; // open in actual window\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 500);\r\n\t\t\t}\r\n\t\t\t*/\r\n\t\t}, options);\r\n\t} catch (e) {\r\n\t\twin.close();\r\n\t\tthrow e;\r\n\t}\r\n};\r\n\r\nDocument.prototype.open = function (options, win) {\r\n\toptions = options || {};\r\n\toptions.autoPrint = false;\r\n\twin = win || null;\r\n\r\n\tthis._openPdf(options, win);\r\n};\r\n\r\n\r\nDocument.prototype.print = function (options, win) {\r\n\toptions = options || {};\r\n\toptions.autoPrint = true;\r\n\twin = win || null;\r\n\r\n\tthis._openPdf(options, win);\r\n};\r\n\r\n/**\r\n * download(defaultFileName = 'file.pdf', cb = null, options = {})\r\n * or\r\n * download(cb, options = {})\r\n */\r\nDocument.prototype.download = function (defaultFileName, cb, options) {\r\n\tif (isFunction(defaultFileName)) {\r\n\t\tif (!isUndefined(cb)) {\r\n\t\t\toptions = cb;\r\n\t\t}\r\n\t\tcb = defaultFileName;\r\n\t\tdefaultFileName = null;\r\n\t}\r\n\r\n\tdefaultFileName = defaultFileName || 'file.pdf';\r\n\tthis.getBlob(function (result) {\r\n\t\tsaveAs(result, defaultFileName);\r\n\r\n\t\tif (isFunction(cb)) {\r\n\t\t\tcb();\r\n\t\t}\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getBase64 = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getBase64 is an async method and needs a callback argument';\r\n\t}\r\n\tthis.getBuffer(function (buffer) {\r\n\t\tcb(buffer.toString('base64'));\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getDataUrl = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getDataUrl is an async method and needs a callback argument';\r\n\t}\r\n\tthis.getBuffer(function (buffer) {\r\n\t\tcb('data:application/pdf;base64,' + buffer.toString('base64'));\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getBlob = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getBlob is an async method and needs a callback argument';\r\n\t}\r\n\tvar that = this;\r\n\tthis.getBuffer(function (result) {\r\n\t\tvar blob = that._bufferToBlob(result);\r\n\t\tcb(blob);\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getBuffer = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getBuffer is an async method and needs a callback argument';\r\n\t}\r\n\r\n\tvar _this = this;\r\n\r\n\tthis._createDoc(options, function (doc) {\r\n\t\t_this._flushDoc(doc, function (buffer) {\r\n\t\t\tcb(buffer);\r\n\t\t});\r\n\t});\r\n};\r\n\r\nDocument.prototype.getStream = function (options, cb) {\r\n\tif (!isFunction(cb)) {\r\n\t\tvar doc = this._createDoc(options);\r\n\t\treturn doc;\r\n\t}\r\n\r\n\tthis._createDoc(options, function (doc) {\r\n\t\tcb(doc);\r\n\t});\r\n};\r\n\r\nmodule.exports = {\r\n\tcreatePdf: function (docDefinition, tableLayouts, fonts, vfs) {\r\n\t\tif (!canCreatePdf()) {\r\n\t\t\tthrow 'Your browser does not provide the level of support needed';\r\n\t\t}\r\n\t\treturn new Document(\r\n\t\t\tdocDefinition,\r\n\t\t\ttableLayouts || __nested_webpack_require_2324438__.g.pdfMake.tableLayouts,\r\n\t\t\tfonts || __nested_webpack_require_2324438__.g.pdfMake.fonts,\r\n\t\t\tvfs || __nested_webpack_require_2324438__.g.pdfMake.vfs\r\n\t\t);\r\n\t}\r\n};\r\n\n\n/***/ }),\n\n/***/ 3857:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2333353__) {\n\n\"use strict\";\nvar __dirname = \"/\";\n/* provided dependency */ var Buffer = __nested_webpack_require_2333353__(8823)[\"Buffer\"];\n\r\n\r\nfunction VirtualFileSystem() {\r\n\tthis.fileSystem = {};\r\n\tthis.dataSystem = {};\r\n}\r\n\r\nVirtualFileSystem.prototype.existsSync = function (filename) {\r\n\tfilename = fixFilename(filename);\r\n\treturn typeof this.fileSystem[filename] !== 'undefined'\r\n\t\t|| typeof this.dataSystem[filename] !== 'undefined';\r\n}\r\n\r\nVirtualFileSystem.prototype.readFileSync = function (filename, options) {\r\n\tfilename = fixFilename(filename);\r\n\r\n\tvar dataContent = this.dataSystem[filename];\r\n\tif (typeof dataContent === 'string' && options === 'utf8') {\r\n\t\treturn dataContent;\r\n\t}\r\n\r\n\tif (dataContent) {\r\n\t\treturn new Buffer(dataContent, typeof dataContent === 'string' ? 'base64' : undefined);\r\n\t}\r\n\r\n\tvar content = this.fileSystem[filename];\r\n\tif (content) {\r\n\t\treturn content;\r\n\t}\r\n\r\n\tthrow 'File \\'' + filename + '\\' not found in virtual file system';\r\n};\r\n\r\nVirtualFileSystem.prototype.writeFileSync = function (filename, content) {\r\n\tthis.fileSystem[fixFilename(filename)] = content;\r\n};\r\n\r\nVirtualFileSystem.prototype.bindFS = function (data) {\r\n\tthis.dataSystem = data || {};\r\n};\r\n\r\n\r\nfunction fixFilename(filename) {\r\n\tif (filename.indexOf(__dirname) === 0) {\r\n\t\tfilename = filename.substring(__dirname.length);\r\n\t}\r\n\r\n\tif (filename.indexOf('/') === 0) {\r\n\t\tfilename = filename.substring(1);\r\n\t}\r\n\r\n\treturn filename;\r\n}\r\n\r\nmodule.exports = new VirtualFileSystem();\r\n\n\n/***/ }),\n\n/***/ 4498:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2334914__) {\n\n\"use strict\";\n\r\n\r\nvar isString = (__nested_webpack_require_2334914__(6225).isString);\r\n\r\nfunction buildColumnWidths(columns, availableWidth) {\r\n\tvar autoColumns = [],\r\n\t\tautoMin = 0, autoMax = 0,\r\n\t\tstarColumns = [],\r\n\t\tstarMaxMin = 0,\r\n\t\tstarMaxMax = 0,\r\n\t\tfixedColumns = [],\r\n\t\tinitial_availableWidth = availableWidth;\r\n\r\n\tcolumns.forEach(function (column) {\r\n\t\tif (isAutoColumn(column)) {\r\n\t\t\tautoColumns.push(column);\r\n\t\t\tautoMin += column._minWidth;\r\n\t\t\tautoMax += column._maxWidth;\r\n\t\t} else if (isStarColumn(column)) {\r\n\t\t\tstarColumns.push(column);\r\n\t\t\tstarMaxMin = Math.max(starMaxMin, column._minWidth);\r\n\t\t\tstarMaxMax = Math.max(starMaxMax, column._maxWidth);\r\n\t\t} else {\r\n\t\t\tfixedColumns.push(column);\r\n\t\t}\r\n\t});\r\n\r\n\tfixedColumns.forEach(function (col) {\r\n\t\t// width specified as %\r\n\t\tif (isString(col.width) && /\\d+%/.test(col.width)) {\r\n\t\t\tcol.width = parseFloat(col.width) * initial_availableWidth / 100;\r\n\t\t}\r\n\t\tif (col.width < (col._minWidth) && col.elasticWidth) {\r\n\t\t\tcol._calcWidth = col._minWidth;\r\n\t\t} else {\r\n\t\t\tcol._calcWidth = col.width;\r\n\t\t}\r\n\r\n\t\tavailableWidth -= col._calcWidth;\r\n\t});\r\n\r\n\t// http://www.freesoft.org/CIE/RFC/1942/18.htm\r\n\t// http://www.w3.org/TR/CSS2/tables.html#width-layout\r\n\t// http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm\r\n\tvar minW = autoMin + starMaxMin * starColumns.length;\r\n\tvar maxW = autoMax + starMaxMax * starColumns.length;\r\n\tif (minW >= availableWidth) {\r\n\t\t// case 1 - there's no way to fit all columns within available width\r\n\t\t// that's actually pretty bad situation with PDF as we have no horizontal scroll\r\n\t\t// no easy workaround (unless we decide, in the future, to split single words)\r\n\t\t// currently we simply use minWidths for all columns\r\n\t\tautoColumns.forEach(function (col) {\r\n\t\t\tcol._calcWidth = col._minWidth;\r\n\t\t});\r\n\r\n\t\tstarColumns.forEach(function (col) {\r\n\t\t\tcol._calcWidth = starMaxMin; // starMaxMin already contains padding\r\n\t\t});\r\n\t} else {\r\n\t\tif (maxW < availableWidth) {\r\n\t\t\t// case 2 - we can fit rest of the table within available space\r\n\t\t\tautoColumns.forEach(function (col) {\r\n\t\t\t\tcol._calcWidth = col._maxWidth;\r\n\t\t\t\tavailableWidth -= col._calcWidth;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t// maxW is too large, but minW fits within available width\r\n\t\t\tvar W = availableWidth - minW;\r\n\t\t\tvar D = maxW - minW;\r\n\r\n\t\t\tautoColumns.forEach(function (col) {\r\n\t\t\t\tvar d = col._maxWidth - col._minWidth;\r\n\t\t\t\tcol._calcWidth = col._minWidth + d * W / D;\r\n\t\t\t\tavailableWidth -= col._calcWidth;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (starColumns.length > 0) {\r\n\t\t\tvar starSize = availableWidth / starColumns.length;\r\n\r\n\t\t\tstarColumns.forEach(function (col) {\r\n\t\t\t\tcol._calcWidth = starSize;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction isAutoColumn(column) {\r\n\treturn column.width === 'auto';\r\n}\r\n\r\nfunction isStarColumn(column) {\r\n\treturn column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';\r\n}\r\n\r\n//TODO: refactor and reuse in measureTable\r\nfunction measureMinMax(columns) {\r\n\tvar result = { min: 0, max: 0 };\r\n\r\n\tvar maxStar = { min: 0, max: 0 };\r\n\tvar starCount = 0;\r\n\r\n\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\tvar c = columns[i];\r\n\r\n\t\tif (isStarColumn(c)) {\r\n\t\t\tmaxStar.min = Math.max(maxStar.min, c._minWidth);\r\n\t\t\tmaxStar.max = Math.max(maxStar.max, c._maxWidth);\r\n\t\t\tstarCount++;\r\n\t\t} else if (isAutoColumn(c)) {\r\n\t\t\tresult.min += c._minWidth;\r\n\t\t\tresult.max += c._maxWidth;\r\n\t\t} else {\r\n\t\t\tresult.min += ((c.width !== undefined && c.width) || c._minWidth);\r\n\t\t\tresult.max += ((c.width !== undefined && c.width) || c._maxWidth);\r\n\t\t}\r\n\t}\r\n\r\n\tif (starCount) {\r\n\t\tresult.min += starCount * maxStar.min;\r\n\t\tresult.max += starCount * maxStar.max;\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\n/**\r\n * Calculates column widths\r\n * @private\r\n */\r\nmodule.exports = {\r\n\tbuildColumnWidths: buildColumnWidths,\r\n\tmeasureMinMax: measureMinMax,\r\n\tisAutoColumn: isAutoColumn,\r\n\tisStarColumn: isStarColumn\r\n};\r\n\n\n/***/ }),\n\n/***/ 1728:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2338900__) {\n\n\"use strict\";\n/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\r\n\r\n\r\n\r\nvar TextTools = __nested_webpack_require_2338900__(1350);\r\nvar StyleContextStack = __nested_webpack_require_2338900__(7597);\r\nvar ColumnCalculator = __nested_webpack_require_2338900__(4498);\r\nvar isString = (__nested_webpack_require_2338900__(6225).isString);\r\nvar isNumber = (__nested_webpack_require_2338900__(6225).isNumber);\r\nvar isObject = (__nested_webpack_require_2338900__(6225).isObject);\r\nvar isArray = (__nested_webpack_require_2338900__(6225).isArray);\r\nvar fontStringify = (__nested_webpack_require_2338900__(6225).fontStringify);\r\nvar getNodeId = (__nested_webpack_require_2338900__(6225).getNodeId);\r\nvar pack = (__nested_webpack_require_2338900__(6225).pack);\r\nvar qrEncoder = __nested_webpack_require_2338900__(145);\r\n\r\n/**\r\n * @private\r\n */\r\nfunction DocMeasure(fontProvider, styleDictionary, defaultStyle, imageMeasure, svgMeasure, tableLayouts, images) {\r\n\tthis.textTools = new TextTools(fontProvider);\r\n\tthis.styleStack = new StyleContextStack(styleDictionary, defaultStyle);\r\n\tthis.imageMeasure = imageMeasure;\r\n\tthis.svgMeasure = svgMeasure;\r\n\tthis.tableLayouts = tableLayouts;\r\n\tthis.images = images;\r\n\tthis.autoImageIndex = 1;\r\n}\r\n\r\n/**\r\n * Measures all nodes and sets min/max-width properties required for the second\r\n * layout-pass.\r\n * @param {Object} docStructure document-definition-object\r\n * @return {Object} document-measurement-object\r\n */\r\nDocMeasure.prototype.measureDocument = function (docStructure) {\r\n\treturn this.measureNode(docStructure);\r\n};\r\n\r\nDocMeasure.prototype.measureNode = function (node) {\r\n\r\n\tvar self = this;\r\n\r\n\treturn this.styleStack.auto(node, function () {\r\n\t\t// TODO: refactor + rethink whether this is the proper way to handle margins\r\n\t\tnode._margin = getNodeMargin(node);\r\n\r\n\t\tif (node.columns) {\r\n\t\t\treturn extendMargins(self.measureColumns(node));\r\n\t\t} else if (node.stack) {\r\n\t\t\treturn extendMargins(self.measureVerticalContainer(node));\r\n\t\t} else if (node.ul) {\r\n\t\t\treturn extendMargins(self.measureUnorderedList(node));\r\n\t\t} else if (node.ol) {\r\n\t\t\treturn extendMargins(self.measureOrderedList(node));\r\n\t\t} else if (node.table) {\r\n\t\t\treturn extendMargins(self.measureTable(node));\r\n\t\t} else if (node.text !== undefined) {\r\n\t\t\treturn extendMargins(self.measureLeaf(node));\r\n\t\t} else if (node.toc) {\r\n\t\t\treturn extendMargins(self.measureToc(node));\r\n\t\t} else if (node.image) {\r\n\t\t\treturn extendMargins(self.measureImage(node));\r\n\t\t} else if (node.svg) {\r\n\t\t\treturn extendMargins(self.measureSVG(node));\r\n\t\t} else if (node.canvas) {\r\n\t\t\treturn extendMargins(self.measureCanvas(node));\r\n\t\t} else if (node.qr) {\r\n\t\t\treturn extendMargins(self.measureQr(node));\r\n\t\t} else {\r\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\r\n\t\t}\r\n\t});\r\n\r\n\tfunction extendMargins(node) {\r\n\t\tvar margin = node._margin;\r\n\r\n\t\tif (margin) {\r\n\t\t\tnode._minWidth += margin[0] + margin[2];\r\n\t\t\tnode._maxWidth += margin[0] + margin[2];\r\n\t\t}\r\n\r\n\t\treturn node;\r\n\t}\r\n\r\n\tfunction getNodeMargin() {\r\n\r\n\t\tfunction processSingleMargins(node, currentMargin) {\r\n\t\t\tif (node.marginLeft || node.marginTop || node.marginRight || node.marginBottom) {\r\n\t\t\t\treturn [\r\n\t\t\t\t\tnode.marginLeft || currentMargin[0] || 0,\r\n\t\t\t\t\tnode.marginTop || currentMargin[1] || 0,\r\n\t\t\t\t\tnode.marginRight || currentMargin[2] || 0,\r\n\t\t\t\t\tnode.marginBottom || currentMargin[3] || 0\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t\treturn currentMargin;\r\n\t\t}\r\n\r\n\t\tfunction flattenStyleArray(styleArray) {\r\n\t\t\tvar flattenedStyles = {};\r\n\t\t\tfor (var i = styleArray.length - 1; i >= 0; i--) {\r\n\t\t\t\tvar styleName = styleArray[i];\r\n\t\t\t\tvar style = self.styleStack.styleDictionary[styleName];\r\n\t\t\t\tfor (var key in style) {\r\n\t\t\t\t\tif (style.hasOwnProperty(key)) {\r\n\t\t\t\t\t\tflattenedStyles[key] = style[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn flattenedStyles;\r\n\t\t}\r\n\r\n\t\tfunction convertMargin(margin) {\r\n\t\t\tif (isNumber(margin)) {\r\n\t\t\t\tmargin = [margin, margin, margin, margin];\r\n\t\t\t} else if (isArray(margin)) {\r\n\t\t\t\tif (margin.length === 2) {\r\n\t\t\t\t\tmargin = [margin[0], margin[1], margin[0], margin[1]];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn margin;\r\n\t\t}\r\n\r\n\t\tvar margin = [undefined, undefined, undefined, undefined];\r\n\r\n\t\tif (node.style) {\r\n\t\t\tvar styleArray = isArray(node.style) ? node.style : [node.style];\r\n\t\t\tvar flattenedStyleArray = flattenStyleArray(styleArray);\r\n\r\n\t\t\tif (flattenedStyleArray) {\r\n\t\t\t\tmargin = processSingleMargins(flattenedStyleArray, margin);\r\n\t\t\t}\r\n\r\n\t\t\tif (flattenedStyleArray.margin) {\r\n\t\t\t\tmargin = convertMargin(flattenedStyleArray.margin);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tmargin = processSingleMargins(node, margin);\r\n\r\n\t\tif (node.margin) {\r\n\t\t\tmargin = convertMargin(node.margin);\r\n\t\t}\r\n\r\n\t\tif (margin[0] === undefined && margin[1] === undefined && margin[2] === undefined && margin[3] === undefined) {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\treturn margin;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nDocMeasure.prototype.convertIfBase64Image = function (node) {\r\n\tif (/^data:image\\/(jpeg|jpg|png);base64,/.test(node.image)) {\r\n\t\tvar label = '$$pdfmake$$' + this.autoImageIndex++;\r\n\t\tthis.images[label] = node.image;\r\n\t\tnode.image = label;\r\n\t}\r\n};\r\n\r\nDocMeasure.prototype.measureImageWithDimensions = function (node, dimensions) {\r\n\tif (node.fit) {\r\n\t\tvar factor = (dimensions.width / dimensions.height > node.fit[0] / node.fit[1]) ? node.fit[0] / dimensions.width : node.fit[1] / dimensions.height;\r\n\t\tnode._width = node._minWidth = node._maxWidth = dimensions.width * factor;\r\n\t\tnode._height = dimensions.height * factor;\r\n\t} else {\r\n\t\tnode._width = node._minWidth = node._maxWidth = node.width || dimensions.width;\r\n\t\tnode._height = node.height || (dimensions.height * node._width / dimensions.width);\r\n\r\n\t\tif (isNumber(node.maxWidth) && node.maxWidth < node._width) {\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node.maxWidth;\r\n\t\t\tnode._height = node._width * dimensions.height / dimensions.width;\r\n\t\t}\r\n\r\n\t\tif (isNumber(node.maxHeight) && node.maxHeight < node._height) {\r\n\t\t\tnode._height = node.maxHeight;\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;\r\n\t\t}\r\n\r\n\t\tif (isNumber(node.minWidth) && node.minWidth > node._width) {\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node.minWidth;\r\n\t\t\tnode._height = node._width * dimensions.height / dimensions.width;\r\n\t\t}\r\n\r\n\t\tif (isNumber(node.minHeight) && node.minHeight > node._height) {\r\n\t\t\tnode._height = node.minHeight;\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;\r\n\t\t}\r\n\t}\r\n\r\n\tnode._alignment = this.styleStack.getProperty('alignment');\r\n};\r\n\r\nDocMeasure.prototype.measureImage = function (node) {\r\n\tif (this.images) {\r\n\t\tthis.convertIfBase64Image(node);\r\n\t}\r\n\r\n\tvar dimensions = this.imageMeasure.measureImage(node.image);\r\n\r\n\tthis.measureImageWithDimensions(node, dimensions);\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureSVG = function (node) {\r\n\r\n\tvar dimensions = this.svgMeasure.measureSVG(node.svg);\r\n\r\n\tthis.measureImageWithDimensions(node, dimensions);\r\n\r\n\tnode.font = this.styleStack.getProperty('font');\r\n\r\n\t// scale SVG based on final dimension\r\n\tnode.svg = this.svgMeasure.writeDimensions(node.svg, {\r\n\t\twidth: node._width,\r\n\t\theight: node._height\r\n\t});\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureLeaf = function (node) {\r\n\r\n\tif (node._textRef && node._textRef._textNodeRef.text) {\r\n\t\tnode.text = node._textRef._textNodeRef.text;\r\n\t}\r\n\r\n\t// Make sure style properties of the node itself are considered when building inlines.\r\n\t// We could also just pass [node] to buildInlines, but that fails for bullet points.\r\n\tvar styleStack = this.styleStack.clone();\r\n\tstyleStack.push(node);\r\n\r\n\tvar data = this.textTools.buildInlines(node.text, styleStack);\r\n\r\n\tnode._inlines = data.items;\r\n\tnode._minWidth = data.minWidth;\r\n\tnode._maxWidth = data.maxWidth;\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureToc = function (node) {\r\n\tif (node.toc.title) {\r\n\t\tnode.toc.title = this.measureNode(node.toc.title);\r\n\t}\r\n\r\n\tif (node.toc._items.length > 0) {\r\n\t\tvar body = [];\r\n\t\tvar textStyle = node.toc.textStyle || {};\r\n\t\tvar numberStyle = node.toc.numberStyle || textStyle;\r\n\t\tvar textMargin = node.toc.textMargin || [0, 0, 0, 0];\r\n\t\tfor (var i = 0, l = node.toc._items.length; i < l; i++) {\r\n\t\t\tvar item = node.toc._items[i];\r\n\t\t\tvar lineStyle = item._textNodeRef.tocStyle || textStyle;\r\n\t\t\tvar lineMargin = item._textNodeRef.tocMargin || textMargin;\r\n\t\t\tvar lineNumberStyle = item._textNodeRef.tocNumberStyle || numberStyle;\r\n\t\t\tvar destination = getNodeId(item._nodeRef);\r\n\t\t\tbody.push([\r\n\t\t\t\t{ text: item._textNodeRef.text, linkToDestination: destination, alignment: 'left', style: lineStyle, margin: lineMargin },\r\n\t\t\t\t{ text: '00000', linkToDestination: destination, alignment: 'right', _tocItemRef: item._nodeRef, style: lineNumberStyle, margin: [0, lineMargin[1], 0, lineMargin[3]] }\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\r\n\t\tnode.toc._table = {\r\n\t\t\ttable: {\r\n\t\t\t\tdontBreakRows: true,\r\n\t\t\t\twidths: ['*', 'auto'],\r\n\t\t\t\tbody: body\r\n\t\t\t},\r\n\t\t\tlayout: 'noBorders'\r\n\t\t};\r\n\r\n\t\tnode.toc._table = this.measureNode(node.toc._table);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureVerticalContainer = function (node) {\r\n\tvar items = node.stack;\r\n\r\n\tnode._minWidth = 0;\r\n\tnode._maxWidth = 0;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\titems[i] = this.measureNode(items[i]);\r\n\r\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth);\r\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.gapSizeForList = function () {\r\n\treturn this.textTools.sizeOfString('9. ', this.styleStack);\r\n};\r\n\r\nDocMeasure.prototype.buildUnorderedMarker = function (styleStack, gapSize, type) {\r\n\tfunction buildDisc(gapSize, color) {\r\n\t\t// TODO: ascender-based calculations\r\n\t\tvar radius = gapSize.fontSize / 6;\r\n\t\treturn {\r\n\t\t\tcanvas: [{\r\n\t\t\t\tx: radius,\r\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,\r\n\t\t\t\tr1: radius,\r\n\t\t\t\tr2: radius,\r\n\t\t\t\ttype: 'ellipse',\r\n\t\t\t\tcolor: color\r\n\t\t\t}]\r\n\t\t};\r\n\t}\r\n\r\n\tfunction buildSquare(gapSize, color) {\r\n\t\t// TODO: ascender-based calculations\r\n\t\tvar size = gapSize.fontSize / 3;\r\n\t\treturn {\r\n\t\t\tcanvas: [{\r\n\t\t\t\tx: 0,\r\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - (gapSize.fontSize / 3) - (size / 2),\r\n\t\t\t\th: size,\r\n\t\t\t\tw: size,\r\n\t\t\t\ttype: 'rect',\r\n\t\t\t\tcolor: color\r\n\t\t\t}]\r\n\t\t};\r\n\t}\r\n\r\n\tfunction buildCircle(gapSize, color) {\r\n\t\t// TODO: ascender-based calculations\r\n\t\tvar radius = gapSize.fontSize / 6;\r\n\t\treturn {\r\n\t\t\tcanvas: [{\r\n\t\t\t\tx: radius,\r\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,\r\n\t\t\t\tr1: radius,\r\n\t\t\t\tr2: radius,\r\n\t\t\t\ttype: 'ellipse',\r\n\t\t\t\tlineColor: color\r\n\t\t\t}]\r\n\t\t};\r\n\t}\r\n\r\n\tvar marker;\r\n\tvar color = styleStack.getProperty('markerColor') || styleStack.getProperty('color') || 'black';\r\n\r\n\tswitch (type) {\r\n\t\tcase 'circle':\r\n\t\t\tmarker = buildCircle(gapSize, color);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'square':\r\n\t\t\tmarker = buildSquare(gapSize, color);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'none':\r\n\t\t\tmarker = {};\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'disc':\r\n\t\tdefault:\r\n\t\t\tmarker = buildDisc(gapSize, color);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tmarker._minWidth = marker._maxWidth = gapSize.width;\r\n\tmarker._minHeight = marker._maxHeight = gapSize.height;\r\n\r\n\treturn marker;\r\n};\r\n\r\nDocMeasure.prototype.buildOrderedMarker = function (counter, styleStack, type, separator) {\r\n\tfunction prepareAlpha(counter) {\r\n\t\tfunction toAlpha(num) {\r\n\t\t\treturn (num >= 26 ? toAlpha((num / 26 >> 0) - 1) : '') + 'abcdefghijklmnopqrstuvwxyz'[num % 26 >> 0];\r\n\t\t}\r\n\r\n\t\tif (counter < 1) {\r\n\t\t\treturn counter.toString();\r\n\t\t}\r\n\r\n\t\treturn toAlpha(counter - 1);\r\n\t}\r\n\r\n\tfunction prepareRoman(counter) {\r\n\t\tif (counter < 1 || counter > 4999) {\r\n\t\t\treturn counter.toString();\r\n\t\t}\r\n\t\tvar num = counter;\r\n\t\tvar lookup = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 }, roman = '', i;\r\n\t\tfor (i in lookup) {\r\n\t\t\twhile (num >= lookup[i]) {\r\n\t\t\t\troman += i;\r\n\t\t\t\tnum -= lookup[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn roman;\r\n\t}\r\n\r\n\tfunction prepareDecimal(counter) {\r\n\t\treturn counter.toString();\r\n\t}\r\n\r\n\tvar counterText;\r\n\tswitch (type) {\r\n\t\tcase 'none':\r\n\t\t\tcounterText = null;\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'upper-alpha':\r\n\t\t\tcounterText = prepareAlpha(counter).toUpperCase();\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'lower-alpha':\r\n\t\t\tcounterText = prepareAlpha(counter);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'upper-roman':\r\n\t\t\tcounterText = prepareRoman(counter);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'lower-roman':\r\n\t\t\tcounterText = prepareRoman(counter).toLowerCase();\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'decimal':\r\n\t\tdefault:\r\n\t\t\tcounterText = prepareDecimal(counter);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (counterText === null) {\r\n\t\treturn {};\r\n\t}\r\n\r\n\tif (separator) {\r\n\t\tif (isArray(separator)) {\r\n\t\t\tif (separator[0]) {\r\n\t\t\t\tcounterText = separator[0] + counterText;\r\n\t\t\t}\r\n\r\n\t\t\tif (separator[1]) {\r\n\t\t\t\tcounterText += separator[1];\r\n\t\t\t}\r\n\t\t\tcounterText += ' ';\r\n\t\t} else {\r\n\t\t\tcounterText += separator + ' ';\r\n\t\t}\r\n\t}\r\n\r\n\tvar textArray = { text: counterText };\r\n\tvar markerColor = styleStack.getProperty('markerColor');\r\n\tif (markerColor) {\r\n\t\ttextArray.color = markerColor;\r\n\t}\r\n\r\n\treturn { _inlines: this.textTools.buildInlines(textArray, styleStack).items };\r\n};\r\n\r\nDocMeasure.prototype.measureUnorderedList = function (node) {\r\n\tvar style = this.styleStack.clone();\r\n\tvar items = node.ul;\r\n\tnode.type = node.type || 'disc';\r\n\tnode._gapSize = this.gapSizeForList();\r\n\tnode._minWidth = 0;\r\n\tnode._maxWidth = 0;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\tvar item = items[i] = this.measureNode(items[i]);\r\n\r\n\t\tif (!item.ol && !item.ul) {\r\n\t\t\titem.listMarker = this.buildUnorderedMarker(style, node._gapSize, item.listType || node.type);\r\n\t\t}\r\n\r\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width);\r\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureOrderedList = function (node) {\r\n\tvar style = this.styleStack.clone();\r\n\tvar items = node.ol;\r\n\tnode.type = node.type || 'decimal';\r\n\tnode.separator = node.separator || '.';\r\n\tnode.reversed = node.reversed || false;\r\n\tif (!isNumber(node.start)) {\r\n\t\tnode.start = node.reversed ? items.length : 1;\r\n\t}\r\n\tnode._gapSize = this.gapSizeForList();\r\n\tnode._minWidth = 0;\r\n\tnode._maxWidth = 0;\r\n\r\n\tvar counter = node.start;\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\tvar item = items[i] = this.measureNode(items[i]);\r\n\r\n\t\tif (!item.ol && !item.ul) {\r\n\t\t\tvar counterValue = isNumber(item.counter) ? item.counter : counter;\r\n\t\t\titem.listMarker = this.buildOrderedMarker(counterValue, style, item.listType || node.type, node.separator);\r\n\t\t\tif (item.listMarker._inlines) {\r\n\t\t\t\tnode._gapSize.width = Math.max(node._gapSize.width, item.listMarker._inlines[0].width);\r\n\t\t\t}\r\n\t\t} // TODO: else - nested lists numbering\r\n\r\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth);\r\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);\r\n\r\n\t\tif (node.reversed) {\r\n\t\t\tcounter--;\r\n\t\t} else {\r\n\t\t\tcounter++;\r\n\t\t}\r\n\t}\r\n\r\n\tnode._minWidth += node._gapSize.width;\r\n\tnode._maxWidth += node._gapSize.width;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\tvar item = items[i];\r\n\t\tif (!item.ol && !item.ul) {\r\n\t\t\titem.listMarker._minWidth = item.listMarker._maxWidth = node._gapSize.width;\r\n\t\t}\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureColumns = function (node) {\r\n\tvar columns = node.columns;\r\n\tnode._gap = this.styleStack.getProperty('columnGap') || 0;\r\n\r\n\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\tcolumns[i] = this.measureNode(columns[i]);\r\n\t}\r\n\r\n\tvar measures = ColumnCalculator.measureMinMax(columns);\r\n\r\n\tvar numGaps = (columns.length > 0) ? (columns.length - 1) : 0;\r\n\tnode._minWidth = measures.min + node._gap * numGaps;\r\n\tnode._maxWidth = measures.max + node._gap * numGaps;\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureTable = function (node) {\r\n\textendTableWidths(node);\r\n\tnode._layout = getLayout(this.tableLayouts);\r\n\tnode._offsets = getOffsets(node._layout);\r\n\r\n\tvar colSpans = [];\r\n\tvar col, row, cols, rows;\r\n\r\n\tfor (col = 0, cols = node.table.body[0].length; col < cols; col++) {\r\n\t\tvar c = node.table.widths[col];\r\n\t\tc._minWidth = 0;\r\n\t\tc._maxWidth = 0;\r\n\r\n\t\tfor (row = 0, rows = node.table.body.length; row < rows; row++) {\r\n\t\t\tvar rowData = node.table.body[row];\r\n\t\t\tvar data = rowData[col];\r\n\t\t\tif (data === undefined) {\r\n\t\t\t\tconsole.error('Malformed table row ', rowData, 'in node ', node);\r\n\t\t\t\tthrow 'Malformed table row, a cell is undefined.';\r\n\t\t\t}\r\n\t\t\tif (data === null) { // transform to object\r\n\t\t\t\tdata = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (!data._span) {\r\n\t\t\t\tdata = rowData[col] = this.styleStack.auto(data, measureCb(this, data));\r\n\r\n\t\t\t\tif (data.colSpan && data.colSpan > 1) {\r\n\t\t\t\t\tmarkSpans(rowData, col, data.colSpan);\r\n\t\t\t\t\tcolSpans.push({ col: col, span: data.colSpan, minWidth: data._minWidth, maxWidth: data._maxWidth });\r\n\t\t\t\t} else {\r\n\t\t\t\t\tc._minWidth = Math.max(c._minWidth, data._minWidth);\r\n\t\t\t\t\tc._maxWidth = Math.max(c._maxWidth, data._maxWidth);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (data.rowSpan && data.rowSpan > 1) {\r\n\t\t\t\tmarkVSpans(node.table, row, col, data.rowSpan);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\textendWidthsForColSpans();\r\n\r\n\tvar measures = ColumnCalculator.measureMinMax(node.table.widths);\r\n\r\n\tnode._minWidth = measures.min + node._offsets.total;\r\n\tnode._maxWidth = measures.max + node._offsets.total;\r\n\r\n\treturn node;\r\n\r\n\tfunction measureCb(_this, data) {\r\n\t\treturn function () {\r\n\t\t\tif (isObject(data)) {\r\n\t\t\t\tdata.fillColor = _this.styleStack.getProperty('fillColor');\r\n\t\t\t\tdata.fillOpacity = _this.styleStack.getProperty('fillOpacity');\r\n\t\t\t}\r\n\t\t\treturn _this.measureNode(data);\r\n\t\t};\r\n\t}\r\n\r\n\tfunction getLayout(tableLayouts) {\r\n\t\tvar layout = node.layout;\r\n\r\n\t\tif (isString(layout)) {\r\n\t\t\tlayout = tableLayouts[layout];\r\n\t\t}\r\n\r\n\t\tvar defaultLayout = {\r\n\t\t\thLineWidth: function (i, node) {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i, node) {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\thLineColor: function (i, node) {\r\n\t\t\t\treturn 'black';\r\n\t\t\t},\r\n\t\t\tvLineColor: function (i, node) {\r\n\t\t\t\treturn 'black';\r\n\t\t\t},\r\n\t\t\thLineStyle: function (i, node) {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\t\t\tvLineStyle: function (i, node) {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i, node) {\r\n\t\t\t\treturn 4;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn 4;\r\n\t\t\t},\r\n\t\t\tpaddingTop: function (i, node) {\r\n\t\t\t\treturn 2;\r\n\t\t\t},\r\n\t\t\tpaddingBottom: function (i, node) {\r\n\t\t\t\treturn 2;\r\n\t\t\t},\r\n\t\t\tfillColor: function (i, node) {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\t\t\tfillOpacity: function (i, node) {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\tdefaultBorder: true\r\n\t\t};\r\n\r\n\t\treturn pack(defaultLayout, layout);\r\n\t}\r\n\r\n\tfunction getOffsets(layout) {\r\n\t\tvar offsets = [];\r\n\t\tvar totalOffset = 0;\r\n\t\tvar prevRightPadding = 0;\r\n\r\n\t\tfor (var i = 0, l = node.table.widths.length; i < l; i++) {\r\n\t\t\tvar lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node);\r\n\t\t\toffsets.push(lOffset);\r\n\t\t\ttotalOffset += lOffset;\r\n\t\t\tprevRightPadding = layout.paddingRight(i, node);\r\n\t\t}\r\n\r\n\t\ttotalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node);\r\n\r\n\t\treturn {\r\n\t\t\ttotal: totalOffset,\r\n\t\t\toffsets: offsets\r\n\t\t};\r\n\t}\r\n\r\n\tfunction extendWidthsForColSpans() {\r\n\t\tvar q, j;\r\n\r\n\t\tfor (var i = 0, l = colSpans.length; i < l; i++) {\r\n\t\t\tvar span = colSpans[i];\r\n\r\n\t\t\tvar currentMinMax = getMinMax(span.col, span.span, node._offsets);\r\n\t\t\tvar minDifference = span.minWidth - currentMinMax.minWidth;\r\n\t\t\tvar maxDifference = span.maxWidth - currentMinMax.maxWidth;\r\n\r\n\t\t\tif (minDifference > 0) {\r\n\t\t\t\tq = minDifference / span.span;\r\n\r\n\t\t\t\tfor (j = 0; j < span.span; j++) {\r\n\t\t\t\t\tnode.table.widths[span.col + j]._minWidth += q;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (maxDifference > 0) {\r\n\t\t\t\tq = maxDifference / span.span;\r\n\r\n\t\t\t\tfor (j = 0; j < span.span; j++) {\r\n\t\t\t\t\tnode.table.widths[span.col + j]._maxWidth += q;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getMinMax(col, span, offsets) {\r\n\t\tvar result = { minWidth: 0, maxWidth: 0 };\r\n\r\n\t\tfor (var i = 0; i < span; i++) {\r\n\t\t\tresult.minWidth += node.table.widths[col + i]._minWidth + (i ? offsets.offsets[col + i] : 0);\r\n\t\t\tresult.maxWidth += node.table.widths[col + i]._maxWidth + (i ? offsets.offsets[col + i] : 0);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction markSpans(rowData, col, span) {\r\n\t\tfor (var i = 1; i < span; i++) {\r\n\t\t\trowData[col + i] = {\r\n\t\t\t\t_span: true,\r\n\t\t\t\t_minWidth: 0,\r\n\t\t\t\t_maxWidth: 0,\r\n\t\t\t\trowSpan: rowData[col].rowSpan\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction markVSpans(table, row, col, span) {\r\n\t\tfor (var i = 1; i < span; i++) {\r\n\t\t\ttable.body[row + i][col] = {\r\n\t\t\t\t_span: true,\r\n\t\t\t\t_minWidth: 0,\r\n\t\t\t\t_maxWidth: 0,\r\n\t\t\t\tfillColor: table.body[row][col].fillColor,\r\n\t\t\t\tfillOpacity: table.body[row][col].fillOpacity\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction extendTableWidths(node) {\r\n\t\tif (!node.table.widths) {\r\n\t\t\tnode.table.widths = 'auto';\r\n\t\t}\r\n\r\n\t\tif (isString(node.table.widths)) {\r\n\t\t\tnode.table.widths = [node.table.widths];\r\n\r\n\t\t\twhile (node.table.widths.length < node.table.body[0].length) {\r\n\t\t\t\tnode.table.widths.push(node.table.widths[node.table.widths.length - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, l = node.table.widths.length; i < l; i++) {\r\n\t\t\tvar w = node.table.widths[i];\r\n\t\t\tif (isNumber(w) || isString(w)) {\r\n\t\t\t\tnode.table.widths[i] = { width: w };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nDocMeasure.prototype.measureCanvas = function (node) {\r\n\tvar w = 0, h = 0;\r\n\r\n\tfor (var i = 0, l = node.canvas.length; i < l; i++) {\r\n\t\tvar vector = node.canvas[i];\r\n\r\n\t\tswitch (vector.type) {\r\n\t\t\tcase 'ellipse':\r\n\t\t\t\tw = Math.max(w, vector.x + vector.r1);\r\n\t\t\t\th = Math.max(h, vector.y + vector.r2);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'rect':\r\n\t\t\t\tw = Math.max(w, vector.x + vector.w);\r\n\t\t\t\th = Math.max(h, vector.y + vector.h);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'line':\r\n\t\t\t\tw = Math.max(w, vector.x1, vector.x2);\r\n\t\t\t\th = Math.max(h, vector.y1, vector.y2);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'polyline':\r\n\t\t\t\tfor (var i2 = 0, l2 = vector.points.length; i2 < l2; i2++) {\r\n\t\t\t\t\tw = Math.max(w, vector.points[i2].x);\r\n\t\t\t\t\th = Math.max(h, vector.points[i2].y);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tnode._minWidth = node._maxWidth = w;\r\n\tnode._minHeight = node._maxHeight = h;\r\n\tnode._alignment = this.styleStack.getProperty('alignment');\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureQr = function (node) {\r\n\tnode = qrEncoder.measure(node);\r\n\tnode._alignment = this.styleStack.getProperty('alignment');\r\n\treturn node;\r\n};\r\n\r\nmodule.exports = DocMeasure;\r\n\n\n/***/ }),\n\n/***/ 4889:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2361235__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __nested_webpack_require_2361235__(8823)[\"Buffer\"];\n\r\n\r\nvar isString = (__nested_webpack_require_2361235__(6225).isString);\r\nvar isNumber = (__nested_webpack_require_2361235__(6225).isNumber);\r\nvar isBoolean = (__nested_webpack_require_2361235__(6225).isBoolean);\r\nvar isArray = (__nested_webpack_require_2361235__(6225).isArray);\r\nvar isUndefined = (__nested_webpack_require_2361235__(6225).isUndefined);\r\nvar fontStringify = (__nested_webpack_require_2361235__(6225).fontStringify);\r\n\r\nfunction DocPreprocessor() {\r\n\r\n}\r\n\r\nDocPreprocessor.prototype.preprocessDocument = function (docStructure) {\r\n\tthis.parentNode = null;\r\n\tthis.tocs = [];\r\n\tthis.nodeReferences = [];\r\n\treturn this.preprocessNode(docStructure);\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessNode = function (node) {\r\n\t// expand shortcuts and casting values\r\n\tif (isArray(node)) {\r\n\t\tnode = { stack: node };\r\n\t} else if (isString(node)) {\r\n\t\tnode = { text: node };\r\n\t} else if (isNumber(node) || isBoolean(node)) {\r\n\t\tnode = { text: node.toString() };\r\n\t} else if (node === undefined || node === null) {\r\n\t\tnode = { text: '' };\r\n\t} else if (Object.keys(node).length === 0) { // empty object\r\n\t\tnode = { text: '' };\r\n\t} else if ('text' in node && (node.text === undefined || node.text === null)) {\r\n\t\tnode.text = '';\r\n\t}\r\n\r\n\tif (node.columns) {\r\n\t\treturn this.preprocessColumns(node);\r\n\t} else if (node.stack) {\r\n\t\treturn this.preprocessVerticalContainer(node);\r\n\t} else if (node.ul) {\r\n\t\treturn this.preprocessList(node);\r\n\t} else if (node.ol) {\r\n\t\treturn this.preprocessList(node);\r\n\t} else if (node.table) {\r\n\t\treturn this.preprocessTable(node);\r\n\t} else if (node.text !== undefined) {\r\n\t\treturn this.preprocessText(node);\r\n\t} else if (node.toc) {\r\n\t\treturn this.preprocessToc(node);\r\n\t} else if (node.image) {\r\n\t\treturn this.preprocessImage(node);\r\n\t} else if (node.svg) {\r\n\t\treturn this.preprocessSVG(node);\r\n\t} else if (node.canvas) {\r\n\t\treturn this.preprocessCanvas(node);\r\n\t} else if (node.qr) {\r\n\t\treturn this.preprocessQr(node);\r\n\t} else if (node.pageReference || node.textReference) {\r\n\t\treturn this.preprocessText(node);\r\n\t} else {\r\n\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\r\n\t}\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessColumns = function (node) {\r\n\tvar columns = node.columns;\r\n\r\n\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\tcolumns[i] = this.preprocessNode(columns[i]);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessVerticalContainer = function (node) {\r\n\tvar items = node.stack;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\titems[i] = this.preprocessNode(items[i]);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessList = function (node) {\r\n\tvar items = node.ul || node.ol;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\titems[i] = this.preprocessNode(items[i]);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessTable = function (node) {\r\n\tvar col, row, cols, rows;\r\n\r\n\tfor (col = 0, cols = node.table.body[0].length; col < cols; col++) {\r\n\t\tfor (row = 0, rows = node.table.body.length; row < rows; row++) {\r\n\t\t\tvar rowData = node.table.body[row];\r\n\t\t\tvar data = rowData[col];\r\n\t\t\tif (data !== undefined) {\r\n\t\t\t\tif (data === null) { // transform to object\r\n\t\t\t\t\tdata = '';\r\n\t\t\t\t}\r\n\t\t\t\tif (!data._span) {\r\n\t\t\t\t\trowData[col] = this.preprocessNode(data);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessText = function (node) {\r\n\tif (node.tocItem) {\r\n\t\tif (!isArray(node.tocItem)) {\r\n\t\t\tnode.tocItem = [node.tocItem];\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, l = node.tocItem.length; i < l; i++) {\r\n\t\t\tif (!isString(node.tocItem[i])) {\r\n\t\t\t\tnode.tocItem[i] = '_default_';\r\n\t\t\t}\r\n\r\n\t\t\tvar tocItemId = node.tocItem[i];\r\n\r\n\t\t\tif (!this.tocs[tocItemId]) {\r\n\t\t\t\tthis.tocs[tocItemId] = { toc: { _items: [], _pseudo: true } };\r\n\t\t\t}\r\n\r\n\t\t\tif (!node.id) {\r\n\t\t\t\tnode.id = 'toc-' + tocItemId + '-' + this.tocs[tocItemId].toc._items.length;\r\n\t\t\t}\r\n\r\n\t\t\tvar tocItemRef = {\r\n\t\t\t\t_nodeRef: this._getNodeForNodeRef(node),\r\n\t\t\t\t_textNodeRef: node\r\n\t\t\t};\r\n\t\t\tthis.tocs[tocItemId].toc._items.push(tocItemRef);\r\n\t\t}\r\n\t}\r\n\r\n\tif (node.id) {\r\n\t\tif (this.nodeReferences[node.id]) {\r\n\t\t\tif (!this.nodeReferences[node.id]._pseudo) {\r\n\t\t\t\tthrow \"Node id '\" + node.id + \"' already exists\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.nodeReferences[node.id]._nodeRef = this._getNodeForNodeRef(node);\r\n\t\t\tthis.nodeReferences[node.id]._textNodeRef = node;\r\n\t\t\tthis.nodeReferences[node.id]._pseudo = false;\r\n\t\t} else {\r\n\t\t\tthis.nodeReferences[node.id] = {\r\n\t\t\t\t_nodeRef: this._getNodeForNodeRef(node),\r\n\t\t\t\t_textNodeRef: node\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tif (node.pageReference) {\r\n\t\tif (!this.nodeReferences[node.pageReference]) {\r\n\t\t\tthis.nodeReferences[node.pageReference] = {\r\n\t\t\t\t_nodeRef: {},\r\n\t\t\t\t_textNodeRef: {},\r\n\t\t\t\t_pseudo: true\r\n\t\t\t};\r\n\t\t}\r\n\t\tnode.text = '00000';\r\n\t\tnode.linkToDestination = node.pageReference;\r\n\t\tnode._pageRef = this.nodeReferences[node.pageReference];\r\n\t}\r\n\r\n\tif (node.textReference) {\r\n\t\tif (!this.nodeReferences[node.textReference]) {\r\n\t\t\tthis.nodeReferences[node.textReference] = { _nodeRef: {}, _pseudo: true };\r\n\t\t}\r\n\r\n\t\tnode.text = '';\r\n\t\tnode.linkToDestination = node.textReference;\r\n\t\tnode._textRef = this.nodeReferences[node.textReference];\r\n\t}\r\n\r\n\tif (node.text && node.text.text) {\r\n\t\tnode.text = [this.preprocessNode(node.text)];\r\n\t} else if (isArray(node.text)) {\r\n\t\tvar isSetParentNode = false;\r\n\t\tif (this.parentNode === null) {\r\n\t\t\tthis.parentNode = node;\r\n\t\t\tisSetParentNode = true;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, l = node.text.length; i < l; i++) {\r\n\t\t\tnode.text[i] = this.preprocessNode(node.text[i]);\r\n\t\t}\r\n\r\n\t\tif (isSetParentNode) {\r\n\t\t\tthis.parentNode = null;\r\n\t\t}\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessToc = function (node) {\r\n\tif (!node.toc.id) {\r\n\t\tnode.toc.id = '_default_';\r\n\t}\r\n\r\n\tnode.toc.title = node.toc.title ? this.preprocessNode(node.toc.title) : null;\r\n\tnode.toc._items = [];\r\n\r\n\tif (this.tocs[node.toc.id]) {\r\n\t\tif (!this.tocs[node.toc.id].toc._pseudo) {\r\n\t\t\tthrow \"TOC '\" + node.toc.id + \"' already exists\";\r\n\t\t}\r\n\r\n\t\tnode.toc._items = this.tocs[node.toc.id].toc._items;\r\n\t}\r\n\r\n\tthis.tocs[node.toc.id] = node;\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessImage = function (node) {\r\n\tif (!isUndefined(node.image.type) && !isUndefined(node.image.data) && (node.image.type === 'Buffer') && isArray(node.image.data)) {\r\n\t\tnode.image = Buffer.from(node.image.data);\r\n\t}\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessSVG = function (node) {\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessCanvas = function (node) {\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessQr = function (node) {\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype._getNodeForNodeRef = function (node) {\r\n\tif (this.parentNode) {\r\n\t\treturn this.parentNode;\r\n\t}\r\n\r\n\treturn node;\r\n}\r\n\r\nmodule.exports = DocPreprocessor;\r\n\n\n/***/ }),\n\n/***/ 3858:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2368149__) {\n\n\"use strict\";\n\r\n\r\nvar TraversalTracker = __nested_webpack_require_2368149__(8537);\r\nvar isString = (__nested_webpack_require_2368149__(6225).isString);\r\n\r\n/**\r\n * Creates an instance of DocumentContext - a store for current x, y positions and available width/height.\r\n * It facilitates column divisions and vertical sync\r\n */\r\nfunction DocumentContext(pageSize, pageMargins) {\r\n\tthis.pages = [];\r\n\r\n\tthis.pageMargins = pageMargins;\r\n\r\n\tthis.x = pageMargins.left;\r\n\tthis.availableWidth = pageSize.width - pageMargins.left - pageMargins.right;\r\n\tthis.availableHeight = 0;\r\n\tthis.page = -1;\r\n\r\n\tthis.snapshots = [];\r\n\r\n\tthis.endingCell = null;\r\n\r\n\tthis.tracker = new TraversalTracker();\r\n\r\n\tthis.backgroundLength = [];\r\n\r\n\tthis.addPage(pageSize);\r\n}\r\n\r\nDocumentContext.prototype.beginColumnGroup = function () {\r\n\tthis.snapshots.push({\r\n\t\tx: this.x,\r\n\t\ty: this.y,\r\n\t\tavailableHeight: this.availableHeight,\r\n\t\tavailableWidth: this.availableWidth,\r\n\t\tpage: this.page,\r\n\t\tbottomMost: {\r\n\t\t\tx: this.x,\r\n\t\t\ty: this.y,\r\n\t\t\tavailableHeight: this.availableHeight,\r\n\t\t\tavailableWidth: this.availableWidth,\r\n\t\t\tpage: this.page\r\n\t\t},\r\n\t\tendingCell: this.endingCell,\r\n\t\tlastColumnWidth: this.lastColumnWidth\r\n\t});\r\n\r\n\tthis.lastColumnWidth = 0;\r\n};\r\n\r\nDocumentContext.prototype.beginColumn = function (width, offset, endingCell) {\r\n\tvar saved = this.snapshots[this.snapshots.length - 1];\r\n\r\n\tthis.calculateBottomMost(saved);\r\n\r\n\tthis.endingCell = endingCell;\r\n\tthis.page = saved.page;\r\n\tthis.x = this.x + this.lastColumnWidth + (offset || 0);\r\n\tthis.y = saved.y;\r\n\tthis.availableWidth = width;\t//saved.availableWidth - offset;\r\n\tthis.availableHeight = saved.availableHeight;\r\n\r\n\tthis.lastColumnWidth = width;\r\n};\r\n\r\nDocumentContext.prototype.calculateBottomMost = function (destContext) {\r\n\tif (this.endingCell) {\r\n\t\tthis.saveContextInEndingCell(this.endingCell);\r\n\t\tthis.endingCell = null;\r\n\t} else {\r\n\t\tdestContext.bottomMost = bottomMostContext(this, destContext.bottomMost);\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.markEnding = function (endingCell) {\r\n\tthis.page = endingCell._columnEndingContext.page;\r\n\tthis.x = endingCell._columnEndingContext.x;\r\n\tthis.y = endingCell._columnEndingContext.y;\r\n\tthis.availableWidth = endingCell._columnEndingContext.availableWidth;\r\n\tthis.availableHeight = endingCell._columnEndingContext.availableHeight;\r\n\tthis.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth;\r\n};\r\n\r\nDocumentContext.prototype.saveContextInEndingCell = function (endingCell) {\r\n\tendingCell._columnEndingContext = {\r\n\t\tpage: this.page,\r\n\t\tx: this.x,\r\n\t\ty: this.y,\r\n\t\tavailableHeight: this.availableHeight,\r\n\t\tavailableWidth: this.availableWidth,\r\n\t\tlastColumnWidth: this.lastColumnWidth\r\n\t};\r\n};\r\n\r\nDocumentContext.prototype.completeColumnGroup = function (height) {\r\n\tvar saved = this.snapshots.pop();\r\n\r\n\tthis.calculateBottomMost(saved);\r\n\r\n\tthis.endingCell = null;\r\n\tthis.x = saved.x;\r\n\r\n\tvar y = saved.bottomMost.y;\r\n\tif (height) {\r\n\t\tif (saved.page === saved.bottomMost.page) {\r\n\t\t\tif ((saved.y + height) > y) {\r\n\t\t\t\ty = saved.y + height;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\ty += height;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.y = y;\r\n\tthis.page = saved.bottomMost.page;\r\n\tthis.availableWidth = saved.availableWidth;\r\n\tthis.availableHeight = saved.bottomMost.availableHeight;\r\n\tif (height) {\r\n\t\tthis.availableHeight -= (y - saved.bottomMost.y);\r\n\t}\r\n\tthis.lastColumnWidth = saved.lastColumnWidth;\r\n};\r\n\r\nDocumentContext.prototype.addMargin = function (left, right) {\r\n\tthis.x += left;\r\n\tthis.availableWidth -= left + (right || 0);\r\n};\r\n\r\nDocumentContext.prototype.moveDown = function (offset) {\r\n\tthis.y += offset;\r\n\tthis.availableHeight -= offset;\r\n\r\n\treturn this.availableHeight > 0;\r\n};\r\n\r\nDocumentContext.prototype.initializePage = function () {\r\n\tthis.y = this.pageMargins.top;\r\n\tthis.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom;\r\n\tthis.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;\r\n};\r\n\r\nDocumentContext.prototype.pageSnapshot = function () {\r\n\tif (this.snapshots[0]) {\r\n\t\treturn this.snapshots[0];\r\n\t} else {\r\n\t\treturn this;\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.moveTo = function (x, y) {\r\n\tif (x !== undefined && x !== null) {\r\n\t\tthis.x = x;\r\n\t\tthis.availableWidth = this.getCurrentPage().pageSize.width - this.x - this.pageMargins.right;\r\n\t}\r\n\tif (y !== undefined && y !== null) {\r\n\t\tthis.y = y;\r\n\t\tthis.availableHeight = this.getCurrentPage().pageSize.height - this.y - this.pageMargins.bottom;\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.moveToRelative = function (x, y) {\r\n\tif (x !== undefined && x !== null) {\r\n\t\tthis.x = this.x + x;\r\n\t}\r\n\tif (y !== undefined && y !== null) {\r\n\t\tthis.y = this.y + y;\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.beginDetachedBlock = function () {\r\n\tthis.snapshots.push({\r\n\t\tx: this.x,\r\n\t\ty: this.y,\r\n\t\tavailableHeight: this.availableHeight,\r\n\t\tavailableWidth: this.availableWidth,\r\n\t\tpage: this.page,\r\n\t\tendingCell: this.endingCell,\r\n\t\tlastColumnWidth: this.lastColumnWidth\r\n\t});\r\n};\r\n\r\nDocumentContext.prototype.endDetachedBlock = function () {\r\n\tvar saved = this.snapshots.pop();\r\n\r\n\tthis.x = saved.x;\r\n\tthis.y = saved.y;\r\n\tthis.availableWidth = saved.availableWidth;\r\n\tthis.availableHeight = saved.availableHeight;\r\n\tthis.page = saved.page;\r\n\tthis.endingCell = saved.endingCell;\r\n\tthis.lastColumnWidth = saved.lastColumnWidth;\r\n};\r\n\r\nfunction pageOrientation(pageOrientationString, currentPageOrientation) {\r\n\tif (pageOrientationString === undefined) {\r\n\t\treturn currentPageOrientation;\r\n\t} else if (isString(pageOrientationString) && (pageOrientationString.toLowerCase() === 'landscape')) {\r\n\t\treturn 'landscape';\r\n\t} else {\r\n\t\treturn 'portrait';\r\n\t}\r\n}\r\n\r\nvar getPageSize = function (currentPage, newPageOrientation) {\r\n\r\n\tnewPageOrientation = pageOrientation(newPageOrientation, currentPage.pageSize.orientation);\r\n\r\n\tif (newPageOrientation !== currentPage.pageSize.orientation) {\r\n\t\treturn {\r\n\t\t\torientation: newPageOrientation,\r\n\t\t\twidth: currentPage.pageSize.height,\r\n\t\t\theight: currentPage.pageSize.width\r\n\t\t};\r\n\t} else {\r\n\t\treturn {\r\n\t\t\torientation: currentPage.pageSize.orientation,\r\n\t\t\twidth: currentPage.pageSize.width,\r\n\t\t\theight: currentPage.pageSize.height\r\n\t\t};\r\n\t}\r\n\r\n};\r\n\r\n\r\nDocumentContext.prototype.moveToNextPage = function (pageOrientation) {\r\n\tvar nextPageIndex = this.page + 1;\r\n\r\n\tvar prevPage = this.page;\r\n\tvar prevY = this.y;\r\n\r\n\tvar createNewPage = nextPageIndex >= this.pages.length;\r\n\tif (createNewPage) {\r\n\t\tvar currentAvailableWidth = this.availableWidth;\r\n\t\tvar currentPageOrientation = this.getCurrentPage().pageSize.orientation;\r\n\r\n\t\tvar pageSize = getPageSize(this.getCurrentPage(), pageOrientation);\r\n\t\tthis.addPage(pageSize);\r\n\r\n\t\tif (currentPageOrientation === pageSize.orientation) {\r\n\t\t\tthis.availableWidth = currentAvailableWidth;\r\n\t\t}\r\n\t} else {\r\n\t\tthis.page = nextPageIndex;\r\n\t\tthis.initializePage();\r\n\t}\r\n\r\n\treturn {\r\n\t\tnewPageCreated: createNewPage,\r\n\t\tprevPage: prevPage,\r\n\t\tprevY: prevY,\r\n\t\ty: this.y\r\n\t};\r\n};\r\n\r\n\r\nDocumentContext.prototype.addPage = function (pageSize) {\r\n\tvar page = { items: [], pageSize: pageSize };\r\n\tthis.pages.push(page);\r\n\tthis.backgroundLength.push(0);\r\n\tthis.page = this.pages.length - 1;\r\n\tthis.initializePage();\r\n\r\n\tthis.tracker.emit('pageAdded');\r\n\r\n\treturn page;\r\n};\r\n\r\nDocumentContext.prototype.getCurrentPage = function () {\r\n\tif (this.page < 0 || this.page >= this.pages.length) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn this.pages[this.page];\r\n};\r\n\r\nDocumentContext.prototype.getCurrentPosition = function () {\r\n\tvar pageSize = this.getCurrentPage().pageSize;\r\n\tvar innerHeight = pageSize.height - this.pageMargins.top - this.pageMargins.bottom;\r\n\tvar innerWidth = pageSize.width - this.pageMargins.left - this.pageMargins.right;\r\n\r\n\treturn {\r\n\t\tpageNumber: this.page + 1,\r\n\t\tpageOrientation: pageSize.orientation,\r\n\t\tpageInnerHeight: innerHeight,\r\n\t\tpageInnerWidth: innerWidth,\r\n\t\tleft: this.x,\r\n\t\ttop: this.y,\r\n\t\tverticalRatio: ((this.y - this.pageMargins.top) / innerHeight),\r\n\t\thorizontalRatio: ((this.x - this.pageMargins.left) / innerWidth)\r\n\t};\r\n};\r\n\r\nfunction bottomMostContext(c1, c2) {\r\n\tvar r;\r\n\r\n\tif (c1.page > c2.page) {\r\n\t\tr = c1;\r\n\t} else if (c2.page > c1.page) {\r\n\t\tr = c2;\r\n\t} else {\r\n\t\tr = (c1.y > c2.y) ? c1 : c2;\r\n\t}\r\n\r\n\treturn {\r\n\t\tpage: r.page,\r\n\t\tx: r.x,\r\n\t\ty: r.y,\r\n\t\tavailableHeight: r.availableHeight,\r\n\t\tavailableWidth: r.availableWidth\r\n\t};\r\n}\r\n\r\nmodule.exports = DocumentContext;\r\n\n\n/***/ }),\n\n/***/ 1196:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2376648__) {\n\n\"use strict\";\n\r\n\r\nvar Line = __nested_webpack_require_2376648__(4775);\r\nvar isNumber = (__nested_webpack_require_2376648__(6225).isNumber);\r\nvar pack = (__nested_webpack_require_2376648__(6225).pack);\r\nvar offsetVector = (__nested_webpack_require_2376648__(6225).offsetVector);\r\nvar DocumentContext = __nested_webpack_require_2376648__(3858);\r\n\r\n/**\r\n * Creates an instance of ElementWriter - a line/vector writer, which adds\r\n * elements to current page and sets their positions based on the context\r\n */\r\nfunction ElementWriter(context, tracker) {\r\n\tthis.context = context;\r\n\tthis.contextStack = [];\r\n\tthis.tracker = tracker;\r\n}\r\n\r\nfunction addPageItem(page, item, index) {\r\n\tif (index === null || index === undefined || index < 0 || index > page.items.length) {\r\n\t\tpage.items.push(item);\r\n\t} else {\r\n\t\tpage.items.splice(index, 0, item);\r\n\t}\r\n}\r\n\r\nElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {\r\n\tvar height = line.getHeight();\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (context.availableHeight < height || !page) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tline.x = context.x + (line.x || 0);\r\n\tline.y = context.y + (line.y || 0);\r\n\r\n\tthis.alignLine(line);\r\n\r\n\taddPageItem(page, {\r\n\t\ttype: 'line',\r\n\t\titem: line\r\n\t}, index);\r\n\tthis.tracker.emit('lineAdded', line);\r\n\r\n\tif (!dontUpdateContextPosition) {\r\n\t\tcontext.moveDown(height);\r\n\t}\r\n\r\n\treturn position;\r\n};\r\n\r\nElementWriter.prototype.alignLine = function (line) {\r\n\tvar width = this.context.availableWidth;\r\n\tvar lineWidth = line.getWidth();\r\n\r\n\tvar alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment;\r\n\r\n\tvar offset = 0;\r\n\tswitch (alignment) {\r\n\t\tcase 'right':\r\n\t\t\toffset = width - lineWidth;\r\n\t\t\tbreak;\r\n\t\tcase 'center':\r\n\t\t\toffset = (width - lineWidth) / 2;\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (offset) {\r\n\t\tline.x = (line.x || 0) + offset;\r\n\t}\r\n\r\n\tif (alignment === 'justify' &&\r\n\t\t!line.newLineForced &&\r\n\t\t!line.lastLineInParagraph &&\r\n\t\tline.inlines.length > 1) {\r\n\t\tvar additionalSpacing = (width - lineWidth) / (line.inlines.length - 1);\r\n\r\n\t\tfor (var i = 1, l = line.inlines.length; i < l; i++) {\r\n\t\t\toffset = i * additionalSpacing;\r\n\r\n\t\t\tline.inlines[i].x += offset;\r\n\t\t\tline.inlines[i].justifyShift = additionalSpacing;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.addImage = function (image, index, type) {\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (!page || (image.absolutePosition === undefined && context.availableHeight < image._height && page.items.length > 0)) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (image._x === undefined) {\r\n\t\timage._x = image.x || 0;\r\n\t}\r\n\r\n\timage.x = context.x + image._x;\r\n\timage.y = context.y;\r\n\r\n\tthis.alignImage(image);\r\n\r\n\taddPageItem(page, {\r\n\t\ttype: type || 'image',\r\n\t\titem: image\r\n\t}, index);\r\n\r\n\tcontext.moveDown(image._height);\r\n\r\n\treturn position;\r\n};\r\n\r\nElementWriter.prototype.addSVG = function (image, index) {\r\n\treturn this.addImage(image, index, 'svg')\r\n};\r\n\r\nElementWriter.prototype.addQr = function (qr, index) {\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (!page || (qr.absolutePosition === undefined && context.availableHeight < qr._height)) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (qr._x === undefined) {\r\n\t\tqr._x = qr.x || 0;\r\n\t}\r\n\r\n\tqr.x = context.x + qr._x;\r\n\tqr.y = context.y;\r\n\r\n\tthis.alignImage(qr);\r\n\r\n\tfor (var i = 0, l = qr._canvas.length; i < l; i++) {\r\n\t\tvar vector = qr._canvas[i];\r\n\t\tvector.x += qr.x;\r\n\t\tvector.y += qr.y;\r\n\t\tthis.addVector(vector, true, true, index);\r\n\t}\r\n\r\n\tcontext.moveDown(qr._height);\r\n\r\n\treturn position;\r\n};\r\n\r\nElementWriter.prototype.alignImage = function (image) {\r\n\tvar width = this.context.availableWidth;\r\n\tvar imageWidth = image._minWidth;\r\n\tvar offset = 0;\r\n\tswitch (image._alignment) {\r\n\t\tcase 'right':\r\n\t\t\toffset = width - imageWidth;\r\n\t\t\tbreak;\r\n\t\tcase 'center':\r\n\t\t\toffset = (width - imageWidth) / 2;\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (offset) {\r\n\t\timage.x = (image.x || 0) + offset;\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.alignCanvas = function (node) {\r\n\tvar width = this.context.availableWidth;\r\n\tvar canvasWidth = node._minWidth;\r\n\tvar offset = 0;\r\n\tswitch (node._alignment) {\r\n\t\tcase 'right':\r\n\t\t\toffset = width - canvasWidth;\r\n\t\t\tbreak;\r\n\t\tcase 'center':\r\n\t\t\toffset = (width - canvasWidth) / 2;\r\n\t\t\tbreak;\r\n\t}\r\n\tif (offset) {\r\n\t\tnode.canvas.forEach(function (vector) {\r\n\t\t\toffsetVector(vector, offset, 0);\r\n\t\t});\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (page) {\r\n\t\toffsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);\r\n\t\taddPageItem(page, {\r\n\t\t\ttype: 'vector',\r\n\t\t\titem: vector\r\n\t\t}, index);\r\n\t\treturn position;\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.beginClip = function (width, height) {\r\n\tvar ctx = this.context;\r\n\tvar page = ctx.getCurrentPage();\r\n\tpage.items.push({\r\n\t\ttype: 'beginClip',\r\n\t\titem: { x: ctx.x, y: ctx.y, width: width, height: height }\r\n\t});\r\n\treturn true;\r\n};\r\n\r\nElementWriter.prototype.endClip = function () {\r\n\tvar ctx = this.context;\r\n\tvar page = ctx.getCurrentPage();\r\n\tpage.items.push({\r\n\t\ttype: 'endClip'\r\n\t});\r\n\treturn true;\r\n};\r\n\r\nfunction cloneLine(line) {\r\n\tvar result = new Line(line.maxWidth);\r\n\r\n\tfor (var key in line) {\r\n\t\tif (line.hasOwnProperty(key)) {\r\n\t\t\tresult[key] = line[key];\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nElementWriter.prototype.addFragment = function (block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {\r\n\tvar ctx = this.context;\r\n\tvar page = ctx.getCurrentPage();\r\n\r\n\tif (!useBlockXOffset && block.height > ctx.availableHeight) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tblock.items.forEach(function (item) {\r\n\t\tswitch (item.type) {\r\n\t\t\tcase 'line':\r\n\t\t\t\tvar l = cloneLine(item.item);\r\n\r\n\t\t\t\tif (l._node) {\r\n\t\t\t\t\tl._node.positions[0].pageNumber = ctx.page + 1;\r\n\t\t\t\t}\r\n\t\t\t\tl.x = (l.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);\r\n\t\t\t\tl.y = (l.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);\r\n\r\n\t\t\t\tpage.items.push({\r\n\t\t\t\t\ttype: 'line',\r\n\t\t\t\t\titem: l\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'vector':\r\n\t\t\t\tvar v = pack(item.item);\r\n\r\n\t\t\t\toffsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);\r\n\t\t\t\tpage.items.push({\r\n\t\t\t\t\ttype: 'vector',\r\n\t\t\t\t\titem: v\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'image':\r\n\t\t\tcase 'svg':\r\n\t\t\t\tvar img = pack(item.item);\r\n\r\n\t\t\t\timg.x = (img.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);\r\n\t\t\t\timg.y = (img.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);\r\n\r\n\t\t\t\tpage.items.push({\r\n\t\t\t\t\ttype: item.type,\r\n\t\t\t\t\titem: img\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif (!dontUpdateContextPosition) {\r\n\t\tctx.moveDown(block.height);\r\n\t}\r\n\r\n\treturn true;\r\n};\r\n\r\n/**\r\n * Pushes the provided context onto the stack or creates a new one\r\n *\r\n * pushContext(context) - pushes the provided context and makes it current\r\n * pushContext(width, height) - creates and pushes a new context with the specified width and height\r\n * pushContext() - creates a new context for unbreakable blocks (with current availableWidth and full-page-height)\r\n */\r\nElementWriter.prototype.pushContext = function (contextOrWidth, height) {\r\n\tif (contextOrWidth === undefined) {\r\n\t\theight = this.context.getCurrentPage().height - this.context.pageMargins.top - this.context.pageMargins.bottom;\r\n\t\tcontextOrWidth = this.context.availableWidth;\r\n\t}\r\n\r\n\tif (isNumber(contextOrWidth)) {\r\n\t\tcontextOrWidth = new DocumentContext({ width: contextOrWidth, height: height }, { left: 0, right: 0, top: 0, bottom: 0 });\r\n\t}\r\n\r\n\tthis.contextStack.push(this.context);\r\n\tthis.context = contextOrWidth;\r\n};\r\n\r\nElementWriter.prototype.popContext = function () {\r\n\tthis.context = this.contextStack.pop();\r\n};\r\n\r\nElementWriter.prototype.getCurrentPositionOnPage = function () {\r\n\treturn (this.contextStack[0] || this.context).getCurrentPosition();\r\n};\r\n\r\n\r\nmodule.exports = ElementWriter;\r\n\n\n/***/ }),\n\n/***/ 2249:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2384801__) {\n\n\"use strict\";\n\r\n\r\nvar isArray = (__nested_webpack_require_2384801__(6225).isArray);\r\n\r\nfunction typeName(bold, italics) {\r\n\tvar type = 'normal';\r\n\tif (bold && italics) {\r\n\t\ttype = 'bolditalics';\r\n\t} else if (bold) {\r\n\t\ttype = 'bold';\r\n\t} else if (italics) {\r\n\t\ttype = 'italics';\r\n\t}\r\n\treturn type;\r\n}\r\n\r\nfunction FontProvider(fontDescriptors, pdfKitDoc) {\r\n\tthis.fonts = {};\r\n\tthis.pdfKitDoc = pdfKitDoc;\r\n\tthis.fontCache = {};\r\n\r\n\tfor (var font in fontDescriptors) {\r\n\t\tif (fontDescriptors.hasOwnProperty(font)) {\r\n\t\t\tvar fontDef = fontDescriptors[font];\r\n\r\n\t\t\tthis.fonts[font] = {\r\n\t\t\t\tnormal: fontDef.normal,\r\n\t\t\t\tbold: fontDef.bold,\r\n\t\t\t\titalics: fontDef.italics,\r\n\t\t\t\tbolditalics: fontDef.bolditalics\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n}\r\n\r\nFontProvider.prototype.getFontType = function (bold, italics) {\r\n\treturn typeName(bold, italics);\r\n}\r\n\r\nFontProvider.prototype.getFontFile = function (familyName, bold, italics) {\r\n\tvar type = this.getFontType(bold, italics);\r\n\tif (!this.fonts[familyName] || !this.fonts[familyName][type]) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn this.fonts[familyName][type];\r\n}\r\n\r\nFontProvider.prototype.provideFont = function (familyName, bold, italics) {\r\n\tvar type = this.getFontType(bold, italics);\r\n\tif (this.getFontFile(familyName, bold, italics) === null) {\r\n\t\tthrow new Error('Font \\'' + familyName + '\\' in style \\'' + type + '\\' is not defined in the font section of the document definition.');\r\n\t}\r\n\r\n\tthis.fontCache[familyName] = this.fontCache[familyName] || {};\r\n\r\n\tif (!this.fontCache[familyName][type]) {\r\n\t\tvar def = this.fonts[familyName][type];\r\n\t\tif (!isArray(def)) {\r\n\t\t\tdef = [def];\r\n\t\t}\r\n\t\tthis.fontCache[familyName][type] = this.pdfKitDoc.font.apply(this.pdfKitDoc, def)._font;\r\n\t}\r\n\r\n\treturn this.fontCache[familyName][type];\r\n};\r\n\r\nmodule.exports = FontProvider;\r\n\n\n/***/ }),\n\n/***/ 6225:\n/***/ (function(module) {\n\n\"use strict\";\n\r\n\r\nfunction isString(variable) {\r\n\treturn typeof variable === 'string' || variable instanceof String;\r\n}\r\n\r\nfunction isNumber(variable) {\r\n\treturn typeof variable === 'number' || variable instanceof Number;\r\n}\r\n\r\nfunction isBoolean(variable) {\r\n\treturn typeof variable === 'boolean';\r\n}\r\n\r\nfunction isArray(variable) {\r\n\treturn Array.isArray(variable);\r\n}\r\n\r\nfunction isFunction(variable) {\r\n\treturn typeof variable === 'function';\r\n}\r\n\r\nfunction isObject(variable) {\r\n\treturn variable !== null && typeof variable === 'object';\r\n}\r\n\r\nfunction isNull(variable) {\r\n\treturn variable === null;\r\n}\r\n\r\nfunction isUndefined(variable) {\r\n\treturn variable === undefined;\r\n}\r\n\r\nfunction pack() {\r\n\tvar result = {};\r\n\r\n\tfor (var i = 0, l = arguments.length; i < l; i++) {\r\n\t\tvar obj = arguments[i];\r\n\r\n\t\tif (obj) {\r\n\t\t\tfor (var key in obj) {\r\n\t\t\t\tif (obj.hasOwnProperty(key)) {\r\n\t\t\t\t\tresult[key] = obj[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction offsetVector(vector, x, y) {\r\n\tswitch (vector.type) {\r\n\t\tcase 'ellipse':\r\n\t\tcase 'rect':\r\n\t\t\tvector.x += x;\r\n\t\t\tvector.y += y;\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\tvector.x1 += x;\r\n\t\t\tvector.x2 += x;\r\n\t\t\tvector.y1 += y;\r\n\t\t\tvector.y2 += y;\r\n\t\t\tbreak;\r\n\t\tcase 'polyline':\r\n\t\t\tfor (var i = 0, l = vector.points.length; i < l; i++) {\r\n\t\t\t\tvector.points[i].x += x;\r\n\t\t\t\tvector.points[i].y += y;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n}\r\n\r\nfunction fontStringify(key, val) {\r\n\tif (key === 'font') {\r\n\t\treturn 'font';\r\n\t}\r\n\treturn val;\r\n}\r\n\r\nfunction getNodeId(node) {\r\n\tif (node.id) {\r\n\t\treturn node.id;\r\n\t}\r\n\r\n\tif (isArray(node.text)) {\r\n\t\tfor (var i = 0, l = node.text.length; i < l; i++) {\r\n\t\t\tvar n = node.text[i];\r\n\t\t\tvar nodeId = getNodeId(n);\r\n\t\t\tif (nodeId) {\r\n\t\t\t\treturn nodeId;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nfunction isPattern(color) {\r\n\treturn isArray(color) && color.length === 2;\r\n}\r\n\r\n// converts from a [<pattern name>, <color>] as used by pdfmake\r\n// into [<pattern object>, <color>] as used by pdfkit\r\n// (the pattern has to be registered in the doc definition of course)\r\nfunction getPattern(color, patterns) {\r\n\treturn [patterns[color[0]], color[1]];\r\n}\r\n\r\nmodule.exports = {\r\n\tisString: isString,\r\n\tisNumber: isNumber,\r\n\tisBoolean: isBoolean,\r\n\tisArray: isArray,\r\n\tisFunction: isFunction,\r\n\tisObject: isObject,\r\n\tisNull: isNull,\r\n\tisUndefined: isUndefined,\r\n\tpack: pack,\r\n\tfontStringify: fontStringify,\r\n\toffsetVector: offsetVector,\r\n\tgetNodeId: getNodeId,\r\n\tisPattern: isPattern,\r\n\tgetPattern: getPattern\r\n};\r\n\n\n/***/ }),\n\n/***/ 3090:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2389212__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __nested_webpack_require_2389212__(8823)[\"Buffer\"];\n\r\n\r\nvar fs = __nested_webpack_require_2389212__(3857);\r\n\r\nfunction ImageMeasure(pdfKitDoc, imageDictionary) {\r\n\tthis.pdfKitDoc = pdfKitDoc;\r\n\tthis.imageDictionary = imageDictionary || {};\r\n}\r\n\r\nImageMeasure.prototype.measureImage = function (src) {\r\n\tvar image;\r\n\tvar that = this;\r\n\r\n\tif (!this.pdfKitDoc._imageRegistry[src]) {\r\n\t\ttry {\r\n\t\t\timage = this.pdfKitDoc.openImage(realImageSrc(src));\r\n\t\t\tif (!image) {\r\n\t\t\t\tthrow 'No image';\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tthrow 'Invalid image: ' + error.toString() + '\\nImages dictionary should contain dataURL entries (or local file paths in node.js)';\r\n\t\t}\r\n\t\timage.embed(this.pdfKitDoc);\r\n\t\tthis.pdfKitDoc._imageRegistry[src] = image;\r\n\t} else {\r\n\t\timage = this.pdfKitDoc._imageRegistry[src];\r\n\t}\r\n\r\n\treturn { width: image.width, height: image.height };\r\n\r\n\tfunction realImageSrc(src) {\r\n\t\tvar img = that.imageDictionary[src];\r\n\r\n\t\tif (!img) {\r\n\t\t\treturn src;\r\n\t\t}\r\n\r\n\t\tif (fs.existsSync(img)) {\r\n\t\t\treturn fs.readFileSync(img);\r\n\t\t}\r\n\r\n\t\tvar index = img.indexOf('base64,');\r\n\t\tif (index < 0) {\r\n\t\t\treturn that.imageDictionary[src];\r\n\t\t}\r\n\r\n\t\treturn Buffer.from(img.substring(index + 7), 'base64');\r\n\t}\r\n};\r\n\r\nmodule.exports = ImageMeasure;\r\n\n\n/***/ }),\n\n/***/ 2678:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2390575__) {\n\n\"use strict\";\n\r\n\r\nvar TraversalTracker = __nested_webpack_require_2390575__(8537);\r\nvar DocPreprocessor = __nested_webpack_require_2390575__(4889);\r\nvar DocMeasure = __nested_webpack_require_2390575__(1728);\r\nvar DocumentContext = __nested_webpack_require_2390575__(3858);\r\nvar PageElementWriter = __nested_webpack_require_2390575__(2912);\r\nvar ColumnCalculator = __nested_webpack_require_2390575__(4498);\r\nvar TableProcessor = __nested_webpack_require_2390575__(9342);\r\nvar Line = __nested_webpack_require_2390575__(4775);\r\nvar isString = (__nested_webpack_require_2390575__(6225).isString);\r\nvar isArray = (__nested_webpack_require_2390575__(6225).isArray);\r\nvar isUndefined = (__nested_webpack_require_2390575__(6225).isUndefined);\r\nvar isNull = (__nested_webpack_require_2390575__(6225).isNull);\r\nvar pack = (__nested_webpack_require_2390575__(6225).pack);\r\nvar offsetVector = (__nested_webpack_require_2390575__(6225).offsetVector);\r\nvar fontStringify = (__nested_webpack_require_2390575__(6225).fontStringify);\r\nvar getNodeId = (__nested_webpack_require_2390575__(6225).getNodeId);\r\nvar isFunction = (__nested_webpack_require_2390575__(6225).isFunction);\r\nvar TextTools = __nested_webpack_require_2390575__(1350);\r\nvar StyleContextStack = __nested_webpack_require_2390575__(7597);\r\nvar isNumber = (__nested_webpack_require_2390575__(6225).isNumber);\r\n\r\nfunction addAll(target, otherArray) {\r\n\totherArray.forEach(function (item) {\r\n\t\ttarget.push(item);\r\n\t});\r\n}\r\n\r\n/**\r\n * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object\r\n * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF\r\n *\r\n * @param {Object} pageSize - an object defining page width and height\r\n * @param {Object} pageMargins - an object defining top, left, right and bottom margins\r\n */\r\nfunction LayoutBuilder(pageSize, pageMargins, imageMeasure, svgMeasure) {\r\n\tthis.pageSize = pageSize;\r\n\tthis.pageMargins = pageMargins;\r\n\tthis.tracker = new TraversalTracker();\r\n\tthis.imageMeasure = imageMeasure;\r\n\tthis.svgMeasure = svgMeasure;\r\n\tthis.tableLayouts = {};\r\n}\r\n\r\nLayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {\r\n\tthis.tableLayouts = pack(this.tableLayouts, tableLayouts);\r\n};\r\n\r\n/**\r\n * Executes layout engine on document-definition-object and creates an array of pages\r\n * containing positioned Blocks, Lines and inlines\r\n *\r\n * @param {Object} docStructure document-definition-object\r\n * @param {Object} fontProvider font provider\r\n * @param {Object} styleDictionary dictionary with style definitions\r\n * @param {Object} defaultStyle default style definition\r\n * @return {Array} an array of pages\r\n */\r\nLayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\r\n\r\n\tfunction addPageBreaksIfNecessary(linearNodeList, pages) {\r\n\r\n\t\tif (!isFunction(pageBreakBeforeFct)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tlinearNodeList = linearNodeList.filter(function (node) {\r\n\t\t\treturn node.positions.length > 0;\r\n\t\t});\r\n\r\n\t\tlinearNodeList.forEach(function (node) {\r\n\t\t\tvar nodeInfo = {};\r\n\t\t\t[\r\n\t\t\t\t'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'svg', 'columns',\r\n\t\t\t\t'headlineLevel', 'style', 'pageBreak', 'pageOrientation',\r\n\t\t\t\t'width', 'height'\r\n\t\t\t].forEach(function (key) {\r\n\t\t\t\tif (node[key] !== undefined) {\r\n\t\t\t\t\tnodeInfo[key] = node[key];\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tnodeInfo.startPosition = node.positions[0];\r\n\t\t\tnodeInfo.pageNumbers = Array.from(new Set(node.positions.map(function (node) { return node.pageNumber; })));\r\n\t\t\tnodeInfo.pages = pages.length;\r\n\t\t\tnodeInfo.stack = isArray(node.stack);\r\n\r\n\t\t\tnode.nodeInfo = nodeInfo;\r\n\t\t});\r\n\r\n\t\tfor (var index = 0; index < linearNodeList.length; index++) {\r\n\t\t\tvar node = linearNodeList[index];\r\n\t\t\tif (node.pageBreak !== 'before' && !node.pageBreakCalculated) {\r\n\t\t\t\tnode.pageBreakCalculated = true;\r\n\t\t\t\tvar pageNumber = node.nodeInfo.pageNumbers[0];\r\n\t\t\t\tvar followingNodesOnPage = [];\r\n\t\t\t\tvar nodesOnNextPage = [];\r\n\t\t\t\tvar previousNodesOnPage = [];\r\n\t\t\t\tif (pageBreakBeforeFct.length > 1) {\r\n\t\t\t\t\tfor (var ii = index + 1, l = linearNodeList.length; ii < l; ii++) {\r\n\t\t\t\t\t\tif (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {\r\n\t\t\t\t\t\t\tfollowingNodesOnPage.push(linearNodeList[ii].nodeInfo);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (pageBreakBeforeFct.length > 2 && linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1) {\r\n\t\t\t\t\t\t\tnodesOnNextPage.push(linearNodeList[ii].nodeInfo);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (pageBreakBeforeFct.length > 3) {\r\n\t\t\t\t\tfor (var ii = 0; ii < index; ii++) {\r\n\t\t\t\t\t\tif (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {\r\n\t\t\t\t\t\t\tpreviousNodesOnPage.push(linearNodeList[ii].nodeInfo);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (pageBreakBeforeFct(node.nodeInfo, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage)) {\r\n\t\t\t\t\tnode.pageBreak = 'before';\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tthis.docPreprocessor = new DocPreprocessor();\r\n\tthis.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.svgMeasure, this.tableLayouts, images);\r\n\r\n\r\n\tfunction resetXYs(result) {\r\n\t\tresult.linearNodeList.forEach(function (node) {\r\n\t\t\tnode.resetXY();\r\n\t\t});\r\n\t}\r\n\r\n\tvar result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\r\n\twhile (addPageBreaksIfNecessary(result.linearNodeList, result.pages)) {\r\n\t\tresetXYs(result);\r\n\t\tresult = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\r\n\t}\r\n\r\n\treturn result.pages;\r\n};\r\n\r\nLayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\r\n\r\n\tthis.linearNodeList = [];\r\n\tdocStructure = this.docPreprocessor.preprocessDocument(docStructure);\r\n\tdocStructure = this.docMeasure.measureDocument(docStructure);\r\n\r\n\tthis.writer = new PageElementWriter(\r\n\t\tnew DocumentContext(this.pageSize, this.pageMargins), this.tracker);\r\n\r\n\tvar _this = this;\r\n\tthis.writer.context().tracker.startTracking('pageAdded', function () {\r\n\t\t_this.addBackground(background);\r\n\t});\r\n\r\n\tthis.addBackground(background);\r\n\tthis.processNode(docStructure);\r\n\tthis.addHeadersAndFooters(header, footer);\r\n\tif (watermark != null) {\r\n\t\tthis.addWatermark(watermark, fontProvider, defaultStyle);\r\n\t}\r\n\r\n\treturn { pages: this.writer.context().pages, linearNodeList: this.linearNodeList };\r\n};\r\n\r\n\r\nLayoutBuilder.prototype.addBackground = function (background) {\r\n\tvar backgroundGetter = isFunction(background) ? background : function () {\r\n\t\treturn background;\r\n\t};\r\n\r\n\tvar context = this.writer.context();\r\n\tvar pageSize = context.getCurrentPage().pageSize;\r\n\r\n\tvar pageBackground = backgroundGetter(context.page + 1, pageSize);\r\n\r\n\tif (pageBackground) {\r\n\t\tthis.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);\r\n\t\tpageBackground = this.docPreprocessor.preprocessDocument(pageBackground);\r\n\t\tthis.processNode(this.docMeasure.measureDocument(pageBackground));\r\n\t\tthis.writer.commitUnbreakableBlock(0, 0);\r\n\t\tcontext.backgroundLength[context.page] += pageBackground.positions.length;\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.addStaticRepeatable = function (headerOrFooter, sizeFunction) {\r\n\tthis.addDynamicRepeatable(function () {\r\n\t\treturn JSON.parse(JSON.stringify(headerOrFooter)); // copy to new object\r\n\t}, sizeFunction);\r\n};\r\n\r\nLayoutBuilder.prototype.addDynamicRepeatable = function (nodeGetter, sizeFunction) {\r\n\tvar pages = this.writer.context().pages;\r\n\r\n\tfor (var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {\r\n\t\tthis.writer.context().page = pageIndex;\r\n\r\n\t\tvar node = nodeGetter(pageIndex + 1, l, this.writer.context().pages[pageIndex].pageSize);\r\n\r\n\t\tif (node) {\r\n\t\t\tvar sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);\r\n\t\t\tthis.writer.beginUnbreakableBlock(sizes.width, sizes.height);\r\n\t\t\tnode = this.docPreprocessor.preprocessDocument(node);\r\n\t\t\tthis.processNode(this.docMeasure.measureDocument(node));\r\n\t\t\tthis.writer.commitUnbreakableBlock(sizes.x, sizes.y);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.addHeadersAndFooters = function (header, footer) {\r\n\tvar headerSizeFct = function (pageSize, pageMargins) {\r\n\t\treturn {\r\n\t\t\tx: 0,\r\n\t\t\ty: 0,\r\n\t\t\twidth: pageSize.width,\r\n\t\t\theight: pageMargins.top\r\n\t\t};\r\n\t};\r\n\r\n\tvar footerSizeFct = function (pageSize, pageMargins) {\r\n\t\treturn {\r\n\t\t\tx: 0,\r\n\t\t\ty: pageSize.height - pageMargins.bottom,\r\n\t\t\twidth: pageSize.width,\r\n\t\t\theight: pageMargins.bottom\r\n\t\t};\r\n\t};\r\n\r\n\tif (isFunction(header)) {\r\n\t\tthis.addDynamicRepeatable(header, headerSizeFct);\r\n\t} else if (header) {\r\n\t\tthis.addStaticRepeatable(header, headerSizeFct);\r\n\t}\r\n\r\n\tif (isFunction(footer)) {\r\n\t\tthis.addDynamicRepeatable(footer, footerSizeFct);\r\n\t} else if (footer) {\r\n\t\tthis.addStaticRepeatable(footer, footerSizeFct);\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.addWatermark = function (watermark, fontProvider, defaultStyle) {\r\n\tif (isString(watermark)) {\r\n\t\twatermark = { 'text': watermark };\r\n\t}\r\n\r\n\tif (!watermark.text) { // empty watermark text\r\n\t\treturn;\r\n\t}\r\n\r\n\twatermark.font = watermark.font || defaultStyle.font || 'Roboto';\r\n\twatermark.fontSize = watermark.fontSize || 'auto';\r\n\twatermark.color = watermark.color || 'black';\r\n\twatermark.opacity = isNumber(watermark.opacity) ? watermark.opacity : 0.6;\r\n\twatermark.bold = watermark.bold || false;\r\n\twatermark.italics = watermark.italics || false;\r\n\twatermark.angle = !isUndefined(watermark.angle) && !isNull(watermark.angle) ? watermark.angle : null;\r\n\r\n\tif (watermark.angle === null) {\r\n\t\twatermark.angle = Math.atan2(this.pageSize.height, this.pageSize.width) * -180 / Math.PI;\r\n\t}\r\n\r\n\tif (watermark.fontSize === 'auto') {\r\n\t\twatermark.fontSize = getWatermarkFontSize(this.pageSize, watermark, fontProvider);\r\n\t}\r\n\r\n\tvar watermarkObject = {\r\n\t\ttext: watermark.text,\r\n\t\tfont: fontProvider.provideFont(watermark.font, watermark.bold, watermark.italics),\r\n\t\tfontSize: watermark.fontSize,\r\n\t\tcolor: watermark.color,\r\n\t\topacity: watermark.opacity,\r\n\t\tangle: watermark.angle\r\n\t};\r\n\r\n\twatermarkObject._size = getWatermarkSize(watermark, fontProvider);\r\n\r\n\tvar pages = this.writer.context().pages;\r\n\tfor (var i = 0, l = pages.length; i < l; i++) {\r\n\t\tpages[i].watermark = watermarkObject;\r\n\t}\r\n\r\n\tfunction getWatermarkSize(watermark, fontProvider) {\r\n\t\tvar textTools = new TextTools(fontProvider);\r\n\t\tvar styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });\r\n\r\n\t\tstyleContextStack.push({\r\n\t\t\tfontSize: watermark.fontSize\r\n\t\t});\r\n\r\n\t\tvar size = textTools.sizeOfString(watermark.text, styleContextStack);\r\n\t\tvar rotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);\r\n\r\n\t\treturn { size: size, rotatedSize: rotatedSize };\r\n\t}\r\n\r\n\tfunction getWatermarkFontSize(pageSize, watermark, fontProvider) {\r\n\t\tvar textTools = new TextTools(fontProvider);\r\n\t\tvar styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });\r\n\t\tvar rotatedSize;\r\n\r\n\t\t/**\r\n\t\t * Binary search the best font size.\r\n\t\t * Initial bounds [0, 1000]\r\n\t\t * Break when range < 1\r\n\t\t */\r\n\t\tvar a = 0;\r\n\t\tvar b = 1000;\r\n\t\tvar c = (a + b) / 2;\r\n\t\twhile (Math.abs(a - b) > 1) {\r\n\t\t\tstyleContextStack.push({\r\n\t\t\t\tfontSize: c\r\n\t\t\t});\r\n\t\t\trotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);\r\n\t\t\tif (rotatedSize.width > pageSize.width) {\r\n\t\t\t\tb = c;\r\n\t\t\t\tc = (a + b) / 2;\r\n\t\t\t} else if (rotatedSize.width < pageSize.width) {\r\n\t\t\t\tif (rotatedSize.height > pageSize.height) {\r\n\t\t\t\t\tb = c;\r\n\t\t\t\t\tc = (a + b) / 2;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ta = c;\r\n\t\t\t\t\tc = (a + b) / 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstyleContextStack.pop();\r\n\t\t}\r\n\t\t/*\r\n\t\t End binary search\r\n\t\t */\r\n\t\treturn c;\r\n\t}\r\n};\r\n\r\nfunction decorateNode(node) {\r\n\tvar x = node.x, y = node.y;\r\n\tnode.positions = [];\r\n\r\n\tif (isArray(node.canvas)) {\r\n\t\tnode.canvas.forEach(function (vector) {\r\n\t\t\tvar x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2;\r\n\t\t\tvector.resetXY = function () {\r\n\t\t\t\tvector.x = x;\r\n\t\t\t\tvector.y = y;\r\n\t\t\t\tvector.x1 = x1;\r\n\t\t\t\tvector.y1 = y1;\r\n\t\t\t\tvector.x2 = x2;\r\n\t\t\t\tvector.y2 = y2;\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\r\n\tnode.resetXY = function () {\r\n\t\tnode.x = x;\r\n\t\tnode.y = y;\r\n\t\tif (isArray(node.canvas)) {\r\n\t\t\tnode.canvas.forEach(function (vector) {\r\n\t\t\t\tvector.resetXY();\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}\r\n\r\nLayoutBuilder.prototype.processNode = function (node) {\r\n\tvar self = this;\r\n\r\n\tthis.linearNodeList.push(node);\r\n\tdecorateNode(node);\r\n\r\n\tapplyMargins(function () {\r\n\t\tvar unbreakable = node.unbreakable;\r\n\t\tif (unbreakable) {\r\n\t\t\tself.writer.beginUnbreakableBlock();\r\n\t\t}\r\n\r\n\t\tvar absPosition = node.absolutePosition;\r\n\t\tif (absPosition) {\r\n\t\t\tself.writer.context().beginDetachedBlock();\r\n\t\t\tself.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);\r\n\t\t}\r\n\r\n\t\tvar relPosition = node.relativePosition;\r\n\t\tif (relPosition) {\r\n\t\t\tself.writer.context().beginDetachedBlock();\r\n\t\t\tself.writer.context().moveToRelative(relPosition.x || 0, relPosition.y || 0);\r\n\t\t}\r\n\r\n\t\tif (node.stack) {\r\n\t\t\tself.processVerticalContainer(node);\r\n\t\t} else if (node.columns) {\r\n\t\t\tself.processColumns(node);\r\n\t\t} else if (node.ul) {\r\n\t\t\tself.processList(false, node);\r\n\t\t} else if (node.ol) {\r\n\t\t\tself.processList(true, node);\r\n\t\t} else if (node.table) {\r\n\t\t\tself.processTable(node);\r\n\t\t} else if (node.text !== undefined) {\r\n\t\t\tself.processLeaf(node);\r\n\t\t} else if (node.toc) {\r\n\t\t\tself.processToc(node);\r\n\t\t} else if (node.image) {\r\n\t\t\tself.processImage(node);\r\n\t\t} else if (node.svg) {\r\n\t\t\tself.processSVG(node);\r\n\t\t} else if (node.canvas) {\r\n\t\t\tself.processCanvas(node);\r\n\t\t} else if (node.qr) {\r\n\t\t\tself.processQr(node);\r\n\t\t} else if (!node._span) {\r\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\r\n\t\t}\r\n\r\n\t\tif (absPosition || relPosition) {\r\n\t\t\tself.writer.context().endDetachedBlock();\r\n\t\t}\r\n\r\n\t\tif (unbreakable) {\r\n\t\t\tself.writer.commitUnbreakableBlock();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction applyMargins(callback) {\r\n\t\tvar margin = node._margin;\r\n\r\n\t\tif (node.pageBreak === 'before') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t} else if (node.pageBreak === 'beforeOdd') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 1) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t} else if (node.pageBreak === 'beforeEven') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 0) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (margin) {\r\n\t\t\tself.writer.context().moveDown(margin[1]);\r\n\t\t\tself.writer.context().addMargin(margin[0], margin[2]);\r\n\t\t}\r\n\r\n\t\tcallback();\r\n\r\n\t\tif (margin) {\r\n\t\t\tself.writer.context().addMargin(-margin[0], -margin[2]);\r\n\t\t\tself.writer.context().moveDown(margin[3]);\r\n\t\t}\r\n\r\n\t\tif (node.pageBreak === 'after') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t} else if (node.pageBreak === 'afterOdd') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 1) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t} else if (node.pageBreak === 'afterEven') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 0) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// vertical container\r\nLayoutBuilder.prototype.processVerticalContainer = function (node) {\r\n\tvar self = this;\r\n\tnode.stack.forEach(function (item) {\r\n\t\tself.processNode(item);\r\n\t\taddAll(node.positions, item.positions);\r\n\r\n\t\t//TODO: paragraph gap\r\n\t});\r\n};\r\n\r\n// columns\r\nLayoutBuilder.prototype.processColumns = function (columnNode) {\r\n\tvar columns = columnNode.columns;\r\n\tvar availableWidth = this.writer.context().availableWidth;\r\n\tvar gaps = gapArray(columnNode._gap);\r\n\r\n\tif (gaps) {\r\n\t\tavailableWidth -= (gaps.length - 1) * columnNode._gap;\r\n\t}\r\n\r\n\tColumnCalculator.buildColumnWidths(columns, availableWidth);\r\n\tvar result = this.processRow(columns, columns, gaps);\r\n\taddAll(columnNode.positions, result.positions);\r\n\r\n\r\n\tfunction gapArray(gap) {\r\n\t\tif (!gap) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar gaps = [];\r\n\t\tgaps.push(0);\r\n\r\n\t\tfor (var i = columns.length - 1; i > 0; i--) {\r\n\t\t\tgaps.push(gap);\r\n\t\t}\r\n\r\n\t\treturn gaps;\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.processRow = function (columns, widths, gaps, tableBody, tableRow, height) {\r\n\tvar self = this;\r\n\tvar pageBreaks = [], positions = [];\r\n\r\n\tthis.tracker.auto('pageChanged', storePageBreakData, function () {\r\n\t\twidths = widths || columns;\r\n\r\n\t\tself.writer.context().beginColumnGroup();\r\n\r\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\tvar column = columns[i];\r\n\t\t\tvar width = widths[i]._calcWidth;\r\n\t\t\tvar leftOffset = colLeftOffset(i);\r\n\r\n\t\t\tif (column.colSpan && column.colSpan > 1) {\r\n\t\t\t\tfor (var j = 1; j < column.colSpan; j++) {\r\n\t\t\t\t\twidth += widths[++i]._calcWidth + gaps[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tself.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i));\r\n\t\t\tif (!column._span) {\r\n\t\t\t\tself.processNode(column);\r\n\t\t\t\taddAll(positions, column.positions);\r\n\t\t\t} else if (column._columnEndingContext) {\r\n\t\t\t\t// row-span ending\r\n\t\t\t\tself.writer.context().markEnding(column);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.writer.context().completeColumnGroup(height);\r\n\t});\r\n\r\n\treturn { pageBreaks: pageBreaks, positions: positions };\r\n\r\n\tfunction storePageBreakData(data) {\r\n\t\tvar pageDesc;\r\n\r\n\t\tfor (var i = 0, l = pageBreaks.length; i < l; i++) {\r\n\t\t\tvar desc = pageBreaks[i];\r\n\t\t\tif (desc.prevPage === data.prevPage) {\r\n\t\t\t\tpageDesc = desc;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!pageDesc) {\r\n\t\t\tpageDesc = data;\r\n\t\t\tpageBreaks.push(pageDesc);\r\n\t\t}\r\n\t\tpageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);\r\n\t\tpageDesc.y = Math.min(pageDesc.y, data.y);\r\n\t}\r\n\r\n\tfunction colLeftOffset(i) {\r\n\t\tif (gaps && gaps.length > i) {\r\n\t\t\treturn gaps[i];\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tfunction getEndingCell(column, columnIndex) {\r\n\t\tif (column.rowSpan && column.rowSpan > 1) {\r\n\t\t\tvar endingRow = tableRow + column.rowSpan - 1;\r\n\t\t\tif (endingRow >= tableBody.length) {\r\n\t\t\t\tthrow 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';\r\n\t\t\t}\r\n\t\t\treturn tableBody[endingRow][columnIndex];\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n};\r\n\r\n// lists\r\nLayoutBuilder.prototype.processList = function (orderedList, node) {\r\n\tvar self = this,\r\n\t\titems = orderedList ? node.ol : node.ul,\r\n\t\tgapSize = node._gapSize;\r\n\r\n\tthis.writer.context().addMargin(gapSize.width);\r\n\r\n\tvar nextMarker;\r\n\tthis.tracker.auto('lineAdded', addMarkerToFirstLeaf, function () {\r\n\t\titems.forEach(function (item) {\r\n\t\t\tnextMarker = item.listMarker;\r\n\t\t\tself.processNode(item);\r\n\t\t\taddAll(node.positions, item.positions);\r\n\t\t});\r\n\t});\r\n\r\n\tthis.writer.context().addMargin(-gapSize.width);\r\n\r\n\tfunction addMarkerToFirstLeaf(line) {\r\n\t\t// I'm not very happy with the way list processing is implemented\r\n\t\t// (both code and algorithm should be rethinked)\r\n\t\tif (nextMarker) {\r\n\t\t\tvar marker = nextMarker;\r\n\t\t\tnextMarker = null;\r\n\r\n\t\t\tif (marker.canvas) {\r\n\t\t\t\tvar vector = marker.canvas[0];\r\n\r\n\t\t\t\toffsetVector(vector, -marker._minWidth, 0);\r\n\t\t\t\tself.writer.addVector(vector);\r\n\t\t\t} else if (marker._inlines) {\r\n\t\t\t\tvar markerLine = new Line(self.pageSize.width);\r\n\t\t\t\tmarkerLine.addInline(marker._inlines[0]);\r\n\t\t\t\tmarkerLine.x = -marker._minWidth;\r\n\t\t\t\tmarkerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();\r\n\t\t\t\tself.writer.addLine(markerLine, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// tables\r\nLayoutBuilder.prototype.processTable = function (tableNode) {\r\n\tvar processor = new TableProcessor(tableNode);\r\n\r\n\tprocessor.beginTable(this.writer);\r\n\r\n\tvar rowHeights = tableNode.table.heights;\r\n\tfor (var i = 0, l = tableNode.table.body.length; i < l; i++) {\r\n\t\tprocessor.beginRow(i, this.writer);\r\n\r\n\t\tvar height;\r\n\t\tif (isFunction(rowHeights)) {\r\n\t\t\theight = rowHeights(i);\r\n\t\t} else if (isArray(rowHeights)) {\r\n\t\t\theight = rowHeights[i];\r\n\t\t} else {\r\n\t\t\theight = rowHeights;\r\n\t\t}\r\n\r\n\t\tif (height === 'auto') {\r\n\t\t\theight = undefined;\r\n\t\t}\r\n\r\n\t\tvar result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i, height);\r\n\t\taddAll(tableNode.positions, result.positions);\r\n\r\n\t\tprocessor.endRow(i, this.writer, result.pageBreaks);\r\n\t}\r\n\r\n\tprocessor.endTable(this.writer);\r\n};\r\n\r\n// leafs (texts)\r\nLayoutBuilder.prototype.processLeaf = function (node) {\r\n\tvar line = this.buildNextLine(node);\r\n\tif (line && (node.tocItem || node.id)) {\r\n\t\tline._node = node;\r\n\t}\r\n\tvar currentHeight = (line) ? line.getHeight() : 0;\r\n\tvar maxHeight = node.maxHeight || -1;\r\n\r\n\tif (line) {\r\n\t\tvar nodeId = getNodeId(node);\r\n\t\tif (nodeId) {\r\n\t\t\tline.id = nodeId;\r\n\t\t}\r\n\t}\r\n\r\n\tif (node._tocItemRef) {\r\n\t\tline._pageNodeRef = node._tocItemRef;\r\n\t}\r\n\r\n\tif (node._pageRef) {\r\n\t\tline._pageNodeRef = node._pageRef._nodeRef;\r\n\t}\r\n\r\n\tif (line && line.inlines && isArray(line.inlines)) {\r\n\t\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\t\tif (line.inlines[i]._tocItemRef) {\r\n\t\t\t\tline.inlines[i]._pageNodeRef = line.inlines[i]._tocItemRef;\r\n\t\t\t}\r\n\r\n\t\t\tif (line.inlines[i]._pageRef) {\r\n\t\t\t\tline.inlines[i]._pageNodeRef = line.inlines[i]._pageRef._nodeRef;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twhile (line && (maxHeight === -1 || currentHeight < maxHeight)) {\r\n\t\tvar positions = this.writer.addLine(line);\r\n\t\tnode.positions.push(positions);\r\n\t\tline = this.buildNextLine(node);\r\n\t\tif (line) {\r\n\t\t\tcurrentHeight += line.getHeight();\r\n\t\t}\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.processToc = function (node) {\r\n\tif (node.toc.title) {\r\n\t\tthis.processNode(node.toc.title);\r\n\t}\r\n\tif (node.toc._table) {\r\n\t\tthis.processNode(node.toc._table);\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.buildNextLine = function (textNode) {\r\n\r\n\tfunction cloneInline(inline) {\r\n\t\tvar newInline = inline.constructor();\r\n\t\tfor (var key in inline) {\r\n\t\t\tnewInline[key] = inline[key];\r\n\t\t}\r\n\t\treturn newInline;\r\n\t}\r\n\r\n\tif (!textNode._inlines || textNode._inlines.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar line = new Line(this.writer.context().availableWidth);\r\n\tvar textTools = new TextTools(null);\r\n\r\n\tvar isForceContinue = false;\r\n\twhile (textNode._inlines && textNode._inlines.length > 0 &&\r\n\t\t(line.hasEnoughSpaceForInline(textNode._inlines[0], textNode._inlines.slice(1)) || isForceContinue)) {\r\n\t\tvar isHardWrap = false;\r\n\t\tvar inline = textNode._inlines.shift();\r\n\t\tisForceContinue = false;\r\n\r\n\t\tif (!inline.noWrap && inline.text.length > 1 && inline.width > line.getAvailableWidth()) {\r\n\t\t\tvar widthPerChar = inline.width / inline.text.length;\r\n\t\t\tvar maxChars = Math.floor(line.getAvailableWidth() / widthPerChar);\r\n\t\t\tif (maxChars < 1) {\r\n\t\t\t\tmaxChars = 1;\r\n\t\t\t}\r\n\t\t\tif (maxChars < inline.text.length) {\r\n\t\t\t\tvar newInline = cloneInline(inline);\r\n\r\n\t\t\t\tnewInline.text = inline.text.substr(maxChars);\r\n\t\t\t\tinline.text = inline.text.substr(0, maxChars);\r\n\r\n\t\t\t\tnewInline.width = textTools.widthOfString(newInline.text, newInline.font, newInline.fontSize, newInline.characterSpacing, newInline.fontFeatures);\r\n\t\t\t\tinline.width = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);\r\n\r\n\t\t\t\ttextNode._inlines.unshift(newInline);\r\n\t\t\t\tisHardWrap = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tline.addInline(inline);\r\n\r\n\t\tisForceContinue = inline.noNewLine && !isHardWrap;\r\n\t}\r\n\r\n\tline.lastLineInParagraph = textNode._inlines.length === 0;\r\n\r\n\treturn line;\r\n};\r\n\r\n// images\r\nLayoutBuilder.prototype.processImage = function (node) {\r\n\tvar position = this.writer.addImage(node);\r\n\tnode.positions.push(position);\r\n};\r\n\r\nLayoutBuilder.prototype.processSVG = function (node) {\r\n\tvar position = this.writer.addSVG(node);\r\n\tnode.positions.push(position);\r\n};\r\n\r\nLayoutBuilder.prototype.processCanvas = function (node) {\r\n\tvar height = node._minHeight;\r\n\r\n\tif (node.absolutePosition === undefined && this.writer.context().availableHeight < height) {\r\n\t\t// TODO: support for canvas larger than a page\r\n\t\t// TODO: support for other overflow methods\r\n\r\n\t\tthis.writer.moveToNextPage();\r\n\t}\r\n\r\n\tthis.writer.alignCanvas(node);\r\n\r\n\tnode.canvas.forEach(function (vector) {\r\n\t\tvar position = this.writer.addVector(vector);\r\n\t\tnode.positions.push(position);\r\n\t}, this);\r\n\r\n\tthis.writer.context().moveDown(height);\r\n};\r\n\r\nLayoutBuilder.prototype.processQr = function (node) {\r\n\tvar position = this.writer.addQr(node);\r\n\tnode.positions.push(position);\r\n};\r\n\r\nmodule.exports = LayoutBuilder;\r\n\n\n/***/ }),\n\n/***/ 4775:\n/***/ (function(module) {\n\n\"use strict\";\n\r\n\r\n/**\r\n * Creates an instance of Line\r\n *\r\n * @constructor\r\n * @this {Line}\r\n * @param {Number} Maximum width this line can have\r\n */\r\nfunction Line(maxWidth) {\r\n\tthis.maxWidth = maxWidth;\r\n\tthis.leadingCut = 0;\r\n\tthis.trailingCut = 0;\r\n\tthis.inlineWidths = 0;\r\n\tthis.inlines = [];\r\n}\r\n\r\nLine.prototype.getAscenderHeight = function () {\r\n\tvar y = 0;\r\n\r\n\tthis.inlines.forEach(function (inline) {\r\n\t\ty = Math.max(y, inline.font.ascender / 1000 * inline.fontSize);\r\n\t});\r\n\treturn y;\r\n};\r\n\r\nLine.prototype.hasEnoughSpaceForInline = function (inline, nextInlines) {\r\n\tnextInlines = nextInlines || [];\r\n\r\n\tif (this.inlines.length === 0) {\r\n\t\treturn true;\r\n\t}\r\n\tif (this.newLineForced) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar inlineWidth = inline.width;\r\n\tvar inlineTrailingCut = inline.trailingCut || 0;\r\n\tif (inline.noNewLine) {\r\n\t\tfor (var i = 0, l = nextInlines.length; i < l; i++) {\r\n\t\t\tvar nextInline = nextInlines[i];\r\n\t\t\tinlineWidth += nextInline.width;\r\n\t\t\tinlineTrailingCut += nextInline.trailingCut || 0;\r\n\t\t\tif (!nextInline.noNewLine) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn (this.inlineWidths + inlineWidth - this.leadingCut - inlineTrailingCut) <= this.maxWidth;\r\n};\r\n\r\nLine.prototype.addInline = function (inline) {\r\n\tif (this.inlines.length === 0) {\r\n\t\tthis.leadingCut = inline.leadingCut || 0;\r\n\t}\r\n\tthis.trailingCut = inline.trailingCut || 0;\r\n\r\n\tinline.x = this.inlineWidths - this.leadingCut;\r\n\r\n\tthis.inlines.push(inline);\r\n\tthis.inlineWidths += inline.width;\r\n\r\n\tif (inline.lineEnd) {\r\n\t\tthis.newLineForced = true;\r\n\t}\r\n};\r\n\r\nLine.prototype.getWidth = function () {\r\n\treturn this.inlineWidths - this.leadingCut - this.trailingCut;\r\n};\r\n\r\nLine.prototype.getAvailableWidth = function () {\r\n\treturn this.maxWidth - this.getWidth();\r\n};\r\n\r\n/**\r\n * Returns line height\r\n * @return {Number}\r\n */\r\nLine.prototype.getHeight = function () {\r\n\tvar max = 0;\r\n\r\n\tthis.inlines.forEach(function (item) {\r\n\t\tmax = Math.max(max, item.height || 0);\r\n\t});\r\n\r\n\treturn max;\r\n};\r\n\r\nmodule.exports = Line;\r\n\n\n/***/ }),\n\n/***/ 2912:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2417108__) {\n\n\"use strict\";\n\r\n\r\nvar isUndefined = (__nested_webpack_require_2417108__(6225).isUndefined);\r\nvar ElementWriter = __nested_webpack_require_2417108__(1196);\r\n\r\n/**\r\n * Creates an instance of PageElementWriter - an extended ElementWriter\r\n * which can handle:\r\n * - page-breaks (it adds new pages when there's not enough space left),\r\n * - repeatable fragments (like table-headers, which are repeated everytime\r\n * a page-break occurs)\r\n * - transactions (used for unbreakable-blocks when we want to make sure\r\n * whole block will be rendered on the same page)\r\n */\r\nfunction PageElementWriter(context, tracker) {\r\n\tthis.transactionLevel = 0;\r\n\tthis.repeatables = [];\r\n\tthis.tracker = tracker;\r\n\tthis.writer = new ElementWriter(context, tracker);\r\n}\r\n\r\nfunction fitOnPage(self, addFct) {\r\n\tvar position = addFct(self);\r\n\tif (!position) {\r\n\t\tself.moveToNextPage();\r\n\t\tposition = addFct(self);\r\n\t}\r\n\treturn position;\r\n}\r\n\r\nPageElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addLine(line, dontUpdateContextPosition, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addImage = function (image, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addImage(image, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addSVG = function (image, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addSVG(image, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addQr = function (qr, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addQr(qr, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {\r\n\treturn this.writer.addVector(vector, ignoreContextX, ignoreContextY, index);\r\n};\r\n\r\nPageElementWriter.prototype.beginClip = function (width, height) {\r\n\treturn this.writer.beginClip(width, height);\r\n};\r\n\r\nPageElementWriter.prototype.endClip = function () {\r\n\treturn this.writer.endClip();\r\n};\r\n\r\nPageElementWriter.prototype.alignCanvas = function (node) {\r\n\tthis.writer.alignCanvas(node);\r\n};\r\n\r\nPageElementWriter.prototype.addFragment = function (fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {\r\n\tif (!this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition)) {\r\n\t\tthis.moveToNextPage();\r\n\t\tthis.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition);\r\n\t}\r\n};\r\n\r\nPageElementWriter.prototype.moveToNextPage = function (pageOrientation) {\r\n\r\n\tvar nextPage = this.writer.context.moveToNextPage(pageOrientation);\r\n\r\n\t// moveToNextPage is called multiple times for table, because is called for each column\r\n\t// and repeatables are inserted only in the first time. If columns are used, is needed\r\n\t// call for table in first column and then for table in the second column (is other repeatables).\r\n\tthis.repeatables.forEach(function (rep) {\r\n\t\tif (isUndefined(rep.insertedOnPages[this.writer.context.page])) {\r\n\t\t\trep.insertedOnPages[this.writer.context.page] = true;\r\n\t\t\tthis.writer.addFragment(rep, true);\r\n\t\t} else {\r\n\t\t\tthis.writer.context.moveDown(rep.height);\r\n\t\t}\r\n\t}, this);\r\n\r\n\tthis.writer.tracker.emit('pageChanged', {\r\n\t\tprevPage: nextPage.prevPage,\r\n\t\tprevY: nextPage.prevY,\r\n\t\ty: this.writer.context.y\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.beginUnbreakableBlock = function (width, height) {\r\n\tif (this.transactionLevel++ === 0) {\r\n\t\tthis.originalX = this.writer.context.x;\r\n\t\tthis.writer.pushContext(width, height);\r\n\t}\r\n};\r\n\r\nPageElementWriter.prototype.commitUnbreakableBlock = function (forcedX, forcedY) {\r\n\tif (--this.transactionLevel === 0) {\r\n\t\tvar unbreakableContext = this.writer.context;\r\n\t\tthis.writer.popContext();\r\n\r\n\t\tvar nbPages = unbreakableContext.pages.length;\r\n\t\tif (nbPages > 0) {\r\n\t\t\t// no support for multi-page unbreakableBlocks\r\n\t\t\tvar fragment = unbreakableContext.pages[0];\r\n\t\t\tfragment.xOffset = forcedX;\r\n\t\t\tfragment.yOffset = forcedY;\r\n\r\n\t\t\t//TODO: vectors can influence height in some situations\r\n\t\t\tif (nbPages > 1) {\r\n\t\t\t\t// on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height\r\n\t\t\t\tif (forcedX !== undefined || forcedY !== undefined) {\r\n\t\t\t\t\tfragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfragment.height = this.writer.context.getCurrentPage().pageSize.height - this.writer.context.pageMargins.top - this.writer.context.pageMargins.bottom;\r\n\t\t\t\t\tfor (var i = 0, l = this.repeatables.length; i < l; i++) {\r\n\t\t\t\t\t\tfragment.height -= this.repeatables[i].height;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfragment.height = unbreakableContext.y;\r\n\t\t\t}\r\n\r\n\t\t\tif (forcedX !== undefined || forcedY !== undefined) {\r\n\t\t\t\tthis.writer.addFragment(fragment, true, true, true);\r\n\t\t\t} else {\r\n\t\t\t\tthis.addFragment(fragment);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nPageElementWriter.prototype.currentBlockToRepeatable = function () {\r\n\tvar unbreakableContext = this.writer.context;\r\n\tvar rep = { items: [] };\r\n\r\n\tunbreakableContext.pages[0].items.forEach(function (item) {\r\n\t\trep.items.push(item);\r\n\t});\r\n\r\n\trep.xOffset = this.originalX;\r\n\r\n\t//TODO: vectors can influence height in some situations\r\n\trep.height = unbreakableContext.y;\r\n\r\n\trep.insertedOnPages = [];\r\n\r\n\treturn rep;\r\n};\r\n\r\nPageElementWriter.prototype.pushToRepeatables = function (rep) {\r\n\tthis.repeatables.push(rep);\r\n};\r\n\r\nPageElementWriter.prototype.popFromRepeatables = function () {\r\n\tthis.repeatables.pop();\r\n};\r\n\r\nPageElementWriter.prototype.context = function () {\r\n\treturn this.writer.context;\r\n};\r\n\r\nmodule.exports = PageElementWriter;\r\n\n\n/***/ }),\n\n/***/ 6079:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2422923__) {\n\n\"use strict\";\n\r\n\r\nfunction _interopDefault(ex) {\r\n\treturn (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex;\r\n}\r\n\r\nvar PdfKit = _interopDefault(__nested_webpack_require_2422923__(215));\r\n\r\nfunction getEngineInstance() {\r\n\treturn PdfKit;\r\n}\r\n\r\nfunction createPdfDocument(options) {\r\n\toptions = options || {};\r\n\treturn new PdfKit(options);\r\n}\r\n\r\nmodule.exports = {\r\n\tgetEngineInstance: getEngineInstance,\r\n\tcreatePdfDocument: createPdfDocument\r\n};\r\n\n\n/***/ }),\n\n/***/ 8617:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2423477__) {\n\n\"use strict\";\n/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\r\n\r\n\r\nvar PdfKitEngine = __nested_webpack_require_2423477__(6079);\r\nvar FontProvider = __nested_webpack_require_2423477__(2249);\r\nvar LayoutBuilder = __nested_webpack_require_2423477__(2678);\r\nvar sizes = __nested_webpack_require_2423477__(4762);\r\nvar ImageMeasure = __nested_webpack_require_2423477__(3090);\r\nvar SVGMeasure = __nested_webpack_require_2423477__(7601);\r\nvar textDecorator = __nested_webpack_require_2423477__(3497);\r\nvar TextTools = __nested_webpack_require_2423477__(1350);\r\nvar isFunction = (__nested_webpack_require_2423477__(6225).isFunction);\r\nvar isString = (__nested_webpack_require_2423477__(6225).isString);\r\nvar isNumber = (__nested_webpack_require_2423477__(6225).isNumber);\r\nvar isBoolean = (__nested_webpack_require_2423477__(6225).isBoolean);\r\nvar isArray = (__nested_webpack_require_2423477__(6225).isArray);\r\nvar isUndefined = (__nested_webpack_require_2423477__(6225).isUndefined);\r\nvar isPattern = (__nested_webpack_require_2423477__(6225).isPattern);\r\nvar getPattern = (__nested_webpack_require_2423477__(6225).getPattern);\r\nvar SVGtoPDF = __nested_webpack_require_2423477__(8071);\r\n\r\nvar findFont = function (fonts, requiredFonts, defaultFont) {\r\n\tfor (var i = 0; i < requiredFonts.length; i++) {\r\n\t\tvar requiredFont = requiredFonts[i].toLowerCase();\r\n\r\n\t\tfor (var font in fonts) {\r\n\t\t\tif (font.toLowerCase() === requiredFont) {\r\n\t\t\t\treturn font;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn defaultFont;\r\n};\r\n\r\n////////////////////////////////////////\r\n// PdfPrinter\r\n\r\n/**\r\n * @class Creates an instance of a PdfPrinter which turns document definition into a pdf\r\n *\r\n * @param {Object} fontDescriptors font definition dictionary\r\n *\r\n * @example\r\n * var fontDescriptors = {\r\n *\tRoboto: {\r\n *\t\tnormal: 'fonts/Roboto-Regular.ttf',\r\n *\t\tbold: 'fonts/Roboto-Medium.ttf',\r\n *\t\titalics: 'fonts/Roboto-Italic.ttf',\r\n *\t\tbolditalics: 'fonts/Roboto-MediumItalic.ttf'\r\n *\t}\r\n * };\r\n *\r\n * var printer = new PdfPrinter(fontDescriptors);\r\n */\r\nfunction PdfPrinter(fontDescriptors) {\r\n\tthis.fontDescriptors = fontDescriptors;\r\n}\r\n\r\n/**\r\n * Executes layout engine for the specified document and renders it into a pdfkit document\r\n * ready to be saved.\r\n *\r\n * @param {Object} docDefinition document definition\r\n * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder)\r\n * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition\r\n * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document\r\n * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default)\r\n * @param {Number} docDefinition.pageSize.width width\r\n * @param {Number} docDefinition.pageSize.height height\r\n * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units)\r\n * @param {Number} docDefinition.maxPagesNumber maximum number of pages to render\r\n *\r\n * @example\r\n *\r\n * var docDefinition = {\r\n * \tinfo: {\r\n *\t\ttitle: 'awesome Document',\r\n *\t\tauthor: 'john doe',\r\n *\t\tsubject: 'subject of document',\r\n *\t\tkeywords: 'keywords for document',\r\n * \t},\r\n *\tcontent: [\r\n *\t\t'First paragraph',\r\n *\t\t'Second paragraph, this time a little bit longer',\r\n *\t\t{ text: 'Third paragraph, slightly bigger font size', fontSize: 20 },\r\n *\t\t{ text: 'Another paragraph using a named style', style: 'header' },\r\n *\t\t{ text: ['playing with ', 'inlines' ] },\r\n *\t\t{ text: ['and ', { text: 'restyling ', bold: true }, 'them'] },\r\n *\t],\r\n *\tstyles: {\r\n *\t\theader: { fontSize: 30, bold: true }\r\n *\t},\r\n *\tpatterns: {\r\n *\t\tstripe45d: {\r\n *\t\t\tboundingBox: [1, 1, 4, 4],\r\n *\t\t\txStep: 3,\r\n *\t\t\tyStep: 3,\r\n *\t\t\tpattern: '1 w 0 1 m 4 5 l s 2 0 m 5 3 l s'\r\n *\t\t}\r\n *\t}\r\n * };\r\n *\r\n * var pdfKitDoc = printer.createPdfKitDocument(docDefinition);\r\n *\r\n * pdfKitDoc.pipe(fs.createWriteStream('sample.pdf'));\r\n * pdfKitDoc.end();\r\n *\r\n * @return {Object} a pdfKit document object which can be saved or encode to data-url\r\n */\r\nPdfPrinter.prototype.createPdfKitDocument = function (docDefinition, options) {\r\n\toptions = options || {};\r\n\r\n\tdocDefinition.version = docDefinition.version || '1.3';\r\n\tdocDefinition.compress = isBoolean(docDefinition.compress) ? docDefinition.compress : true;\r\n\tdocDefinition.images = docDefinition.images || {};\r\n\tdocDefinition.pageMargins = ((docDefinition.pageMargins !== undefined) && (docDefinition.pageMargins !== null)) ? docDefinition.pageMargins : 40;\r\n\r\n\tvar pageSize = fixPageSize(docDefinition.pageSize, docDefinition.pageOrientation);\r\n\r\n\tvar pdfOptions = {\r\n\t\tsize: [pageSize.width, pageSize.height],\r\n\t\tpdfVersion: docDefinition.version,\r\n\t\tcompress: docDefinition.compress,\r\n\t\tuserPassword: docDefinition.userPassword,\r\n\t\townerPassword: docDefinition.ownerPassword,\r\n\t\tpermissions: docDefinition.permissions,\r\n\t\tfontLayoutCache: isBoolean(options.fontLayoutCache) ? options.fontLayoutCache : true,\r\n\t\tbufferPages: options.bufferPages || false,\r\n\t\tautoFirstPage: false,\r\n\t\tinfo: createMetadata(docDefinition),\r\n\t\tfont: null\r\n\t};\r\n\r\n\tthis.pdfKitDoc = PdfKitEngine.createPdfDocument(pdfOptions);\r\n\r\n\tthis.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc);\r\n\r\n\tvar builder = new LayoutBuilder(pageSize, fixPageMargins(docDefinition.pageMargins), new ImageMeasure(this.pdfKitDoc, docDefinition.images), new SVGMeasure());\r\n\r\n\tregisterDefaultTableLayouts(builder);\r\n\tif (options.tableLayouts) {\r\n\t\tbuilder.registerTableLayouts(options.tableLayouts);\r\n\t}\r\n\r\n\tvar pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || {\r\n\t\tfontSize: 12,\r\n\t\tfont: 'Roboto'\r\n\t}, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore);\r\n\tvar maxNumberPages = docDefinition.maxPagesNumber || -1;\r\n\tif (isNumber(maxNumberPages) && maxNumberPages > -1) {\r\n\t\tpages = pages.slice(0, maxNumberPages);\r\n\t}\r\n\r\n\t// if pageSize.height is set to Infinity, calculate the actual height of the page that\r\n\t// was laid out using the height of each of the items in the page.\r\n\tif (pageSize.height === Infinity) {\r\n\t\tvar pageHeight = calculatePageHeight(pages, docDefinition.pageMargins);\r\n\t\tthis.pdfKitDoc.options.size = [pageSize.width, pageHeight];\r\n\t}\r\n\r\n\tvar patterns = createPatterns(docDefinition.patterns || {}, this.pdfKitDoc);\r\n\r\n\trenderPages(pages, this.fontProvider, this.pdfKitDoc, patterns, options.progressCallback);\r\n\r\n\tif (options.autoPrint) {\r\n\t\tvar printActionRef = this.pdfKitDoc.ref({\r\n\t\t\tType: 'Action',\r\n\t\t\tS: 'Named',\r\n\t\t\tN: 'Print'\r\n\t\t});\r\n\t\tthis.pdfKitDoc._root.data.OpenAction = printActionRef;\r\n\t\tprintActionRef.end();\r\n\t}\r\n\treturn this.pdfKitDoc;\r\n};\r\n\r\nfunction createMetadata(docDefinition) {\r\n\t// PDF standard has these properties reserved: Title, Author, Subject, Keywords,\r\n\t// Creator, Producer, CreationDate, ModDate, Trapped.\r\n\t// To keep the pdfmake api consistent, the info field are defined lowercase.\r\n\t// Custom properties don't contain a space.\r\n\tfunction standardizePropertyKey(key) {\r\n\t\tvar standardProperties = ['Title', 'Author', 'Subject', 'Keywords',\r\n\t\t\t'Creator', 'Producer', 'CreationDate', 'ModDate', 'Trapped'];\r\n\t\tvar standardizedKey = key.charAt(0).toUpperCase() + key.slice(1);\r\n\t\tif (standardProperties.indexOf(standardizedKey) !== -1) {\r\n\t\t\treturn standardizedKey;\r\n\t\t}\r\n\r\n\t\treturn key.replace(/\\s+/g, '');\r\n\t}\r\n\r\n\tvar info = {\r\n\t\tProducer: 'pdfmake',\r\n\t\tCreator: 'pdfmake'\r\n\t};\r\n\r\n\tif (docDefinition.info) {\r\n\t\tfor (var key in docDefinition.info) {\r\n\t\t\tvar value = docDefinition.info[key];\r\n\t\t\tif (value) {\r\n\t\t\t\tkey = standardizePropertyKey(key);\r\n\t\t\t\tinfo[key] = value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn info;\r\n}\r\n\r\nfunction calculatePageHeight(pages, margins) {\r\n\tfunction getItemHeight(item) {\r\n\t\tif (isFunction(item.item.getHeight)) {\r\n\t\t\treturn item.item.getHeight();\r\n\t\t} else if (item.item._height) {\r\n\t\t\treturn item.item._height;\r\n\t\t} else if (item.type === 'vector') {\r\n\t\t\tif (typeof item.item.y1 !== 'undefined') {\r\n\t\t\t\treturn item.item.y1 > item.item.y2 ? item.item.y1 : item.item.y2;\r\n\t\t\t} else {\r\n\t\t\t\treturn item.item.h;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// TODO: add support for next item types\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getBottomPosition(item) {\r\n\t\tvar top = item.item.y || 0;\r\n\t\tvar height = getItemHeight(item);\r\n\t\treturn top + height;\r\n\t}\r\n\r\n\tvar fixedMargins = fixPageMargins(margins || 40);\r\n\tvar height = fixedMargins.top;\r\n\r\n\tpages.forEach(function (page) {\r\n\t\tpage.items.forEach(function (item) {\r\n\t\t\tvar bottomPosition = getBottomPosition(item);\r\n\t\t\tif (bottomPosition > height) {\r\n\t\t\t\theight = bottomPosition;\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n\r\n\theight += fixedMargins.bottom;\r\n\r\n\treturn height;\r\n}\r\n\r\nfunction fixPageSize(pageSize, pageOrientation) {\r\n\tfunction isNeedSwapPageSizes(pageOrientation) {\r\n\t\tif (isString(pageOrientation)) {\r\n\t\t\tpageOrientation = pageOrientation.toLowerCase();\r\n\t\t\treturn ((pageOrientation === 'portrait') && (size.width > size.height)) ||\r\n\t\t\t\t((pageOrientation === 'landscape') && (size.width < size.height));\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// if pageSize.height is set to auto, set the height to infinity so there are no page breaks.\r\n\tif (pageSize && pageSize.height === 'auto') {\r\n\t\tpageSize.height = Infinity;\r\n\t}\r\n\r\n\tvar size = pageSize2widthAndHeight(pageSize || 'A4');\r\n\tif (isNeedSwapPageSizes(pageOrientation)) { // swap page sizes\r\n\t\tsize = { width: size.height, height: size.width };\r\n\t}\r\n\tsize.orientation = size.width > size.height ? 'landscape' : 'portrait';\r\n\treturn size;\r\n}\r\n\r\nfunction fixPageMargins(margin) {\r\n\tif (isNumber(margin)) {\r\n\t\tmargin = { left: margin, right: margin, top: margin, bottom: margin };\r\n\t} else if (isArray(margin)) {\r\n\t\tif (margin.length === 2) {\r\n\t\t\tmargin = { left: margin[0], top: margin[1], right: margin[0], bottom: margin[1] };\r\n\t\t} else if (margin.length === 4) {\r\n\t\t\tmargin = { left: margin[0], top: margin[1], right: margin[2], bottom: margin[3] };\r\n\t\t} else {\r\n\t\t\tthrow 'Invalid pageMargins definition';\r\n\t\t}\r\n\t}\r\n\r\n\treturn margin;\r\n}\r\n\r\nfunction registerDefaultTableLayouts(layoutBuilder) {\r\n\tlayoutBuilder.registerTableLayouts({\r\n\t\tnoBorders: {\r\n\t\t\thLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i) {\r\n\t\t\t\treturn i && 4 || 0;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn (i < node.table.widths.length - 1) ? 4 : 0;\r\n\t\t\t}\r\n\t\t},\r\n\t\theaderLineOnly: {\r\n\t\t\thLineWidth: function (i, node) {\r\n\t\t\t\tif (i === 0 || i === node.table.body.length) {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\treturn (i === node.table.headerRows) ? 2 : 0;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i) {\r\n\t\t\t\treturn i === 0 ? 0 : 8;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn (i === node.table.widths.length - 1) ? 0 : 8;\r\n\t\t\t}\r\n\t\t},\r\n\t\tlightHorizontalLines: {\r\n\t\t\thLineWidth: function (i, node) {\r\n\t\t\t\tif (i === 0 || i === node.table.body.length) {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\treturn (i === node.table.headerRows) ? 2 : 1;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\thLineColor: function (i) {\r\n\t\t\t\treturn i === 1 ? 'black' : '#aaa';\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i) {\r\n\t\t\t\treturn i === 0 ? 0 : 8;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn (i === node.table.widths.length - 1) ? 0 : 8;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction pageSize2widthAndHeight(pageSize) {\r\n\tif (isString(pageSize)) {\r\n\t\tvar size = sizes[pageSize.toUpperCase()];\r\n\t\tif (!size) {\r\n\t\t\tthrow 'Page size ' + pageSize + ' not recognized';\r\n\t\t}\r\n\t\treturn { width: size[0], height: size[1] };\r\n\t}\r\n\r\n\treturn pageSize;\r\n}\r\n\r\nfunction updatePageOrientationInOptions(currentPage, pdfKitDoc) {\r\n\tvar previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait';\r\n\r\n\tif (currentPage.pageSize.orientation !== previousPageOrientation) {\r\n\t\tvar width = pdfKitDoc.options.size[0];\r\n\t\tvar height = pdfKitDoc.options.size[1];\r\n\t\tpdfKitDoc.options.size = [height, width];\r\n\t}\r\n}\r\n\r\nfunction renderPages(pages, fontProvider, pdfKitDoc, patterns, progressCallback) {\r\n\tpdfKitDoc._pdfMakePages = pages;\r\n\tpdfKitDoc.addPage();\r\n\r\n\tvar totalItems = 0;\r\n\tif (progressCallback) {\r\n\t\tpages.forEach(function (page) {\r\n\t\t\ttotalItems += page.items.length;\r\n\t\t});\r\n\t}\r\n\r\n\tvar renderedItems = 0;\r\n\tprogressCallback = progressCallback || function () {\r\n\t};\r\n\r\n\tfor (var i = 0; i < pages.length; i++) {\r\n\t\tif (i > 0) {\r\n\t\t\tupdatePageOrientationInOptions(pages[i], pdfKitDoc);\r\n\t\t\tpdfKitDoc.addPage(pdfKitDoc.options);\r\n\t\t}\r\n\r\n\t\tvar page = pages[i];\r\n\t\tfor (var ii = 0, il = page.items.length; ii < il; ii++) {\r\n\t\t\tvar item = page.items[ii];\r\n\t\t\tswitch (item.type) {\r\n\t\t\t\tcase 'vector':\r\n\t\t\t\t\trenderVector(item.item, patterns, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'line':\r\n\t\t\t\t\trenderLine(item.item, item.item.x, item.item.y, patterns, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'image':\r\n\t\t\t\t\trenderImage(item.item, item.item.x, item.item.y, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'svg':\r\n\t\t\t\t\trenderSVG(item.item, item.item.x, item.item.y, pdfKitDoc, fontProvider);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'beginClip':\r\n\t\t\t\t\tbeginClip(item.item, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'endClip':\r\n\t\t\t\t\tendClip(pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\trenderedItems++;\r\n\t\t\tprogressCallback(renderedItems / totalItems);\r\n\t\t}\r\n\t\tif (page.watermark) {\r\n\t\t\trenderWatermark(page, pdfKitDoc);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Shift the \"y\" height of the text baseline up or down (superscript or subscript,\r\n * respectively). The exact shift can / should be changed according to standard\r\n * conventions.\r\n *\r\n * @param {number} y\r\n * @param {any} inline\r\n */\r\nfunction offsetText(y, inline) {\r\n\tvar newY = y;\r\n\tif (inline.sup) {\r\n\t\tnewY -= inline.fontSize * 0.75;\r\n\t}\r\n\tif (inline.sub) {\r\n\t\tnewY += inline.fontSize * 0.35;\r\n\t}\r\n\treturn newY;\r\n}\r\n\r\nfunction renderLine(line, x, y, patterns, pdfKitDoc) {\r\n\tfunction preparePageNodeRefLine(_pageNodeRef, inline) {\r\n\t\tvar newWidth;\r\n\t\tvar diffWidth;\r\n\t\tvar textTools = new TextTools(null);\r\n\r\n\t\tif (isUndefined(_pageNodeRef.positions)) {\r\n\t\t\tthrow 'Page reference id not found';\r\n\t\t}\r\n\r\n\t\tvar pageNumber = _pageNodeRef.positions[0].pageNumber.toString();\r\n\r\n\t\tinline.text = pageNumber;\r\n\t\tnewWidth = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);\r\n\t\tdiffWidth = inline.width - newWidth;\r\n\t\tinline.width = newWidth;\r\n\r\n\t\tswitch (inline.alignment) {\r\n\t\t\tcase 'right':\r\n\t\t\t\tinline.x += diffWidth;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'center':\r\n\t\t\t\tinline.x += diffWidth / 2;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (line._pageNodeRef) {\r\n\t\tpreparePageNodeRefLine(line._pageNodeRef, line.inlines[0]);\r\n\t}\r\n\r\n\tx = x || 0;\r\n\ty = y || 0;\r\n\r\n\tvar lineHeight = line.getHeight();\r\n\tvar ascenderHeight = line.getAscenderHeight();\r\n\tvar descent = lineHeight - ascenderHeight;\r\n\r\n\ttextDecorator.drawBackground(line, x, y, patterns, pdfKitDoc);\r\n\r\n\t//TODO: line.optimizeInlines();\r\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\tvar inline = line.inlines[i];\r\n\t\tvar shiftToBaseline = lineHeight - ((inline.font.ascender / 1000) * inline.fontSize) - descent;\r\n\r\n\t\tif (inline._pageNodeRef) {\r\n\t\t\tpreparePageNodeRefLine(inline._pageNodeRef, inline);\r\n\t\t}\r\n\r\n\t\tvar options = {\r\n\t\t\tlineBreak: false,\r\n\t\t\ttextWidth: inline.width,\r\n\t\t\tcharacterSpacing: inline.characterSpacing,\r\n\t\t\twordCount: 1,\r\n\t\t\tlink: inline.link\r\n\t\t};\r\n\r\n\t\tif (inline.linkToDestination) {\r\n\t\t\toptions.goTo = inline.linkToDestination;\r\n\t\t}\r\n\r\n\t\tif (line.id && i === 0) {\r\n\t\t\toptions.destination = line.id;\r\n\t\t}\r\n\r\n\t\tif (inline.fontFeatures) {\r\n\t\t\toptions.features = inline.fontFeatures;\r\n\t\t}\r\n\r\n\t\tvar opacity = isNumber(inline.opacity) ? inline.opacity : 1;\r\n\t\tpdfKitDoc.opacity(opacity);\r\n\t\tpdfKitDoc.fill(inline.color || 'black');\r\n\r\n\t\tpdfKitDoc._font = inline.font;\r\n\t\tpdfKitDoc.fontSize(inline.fontSize);\r\n\r\n\t\tvar shiftedY = offsetText(y + shiftToBaseline, inline);\r\n\t\tpdfKitDoc.text(inline.text, x + inline.x, shiftedY, options);\r\n\r\n\t\tif (inline.linkToPage) {\r\n\t\t\tvar _ref = pdfKitDoc.ref({ Type: 'Action', S: 'GoTo', D: [inline.linkToPage, 0, 0] }).end();\r\n\t\t\tpdfKitDoc.annotate(x + inline.x, shiftedY, inline.width, inline.height, {\r\n\t\t\t\tSubtype: 'Link',\r\n\t\t\t\tDest: [inline.linkToPage - 1, 'XYZ', null, null, null]\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t}\r\n\t// Decorations won't draw correctly for superscript\r\n\ttextDecorator.drawDecorations(line, x, y, pdfKitDoc);\r\n}\r\n\r\nfunction renderWatermark(page, pdfKitDoc) {\r\n\tvar watermark = page.watermark;\r\n\r\n\tpdfKitDoc.fill(watermark.color);\r\n\tpdfKitDoc.opacity(watermark.opacity);\r\n\r\n\tpdfKitDoc.save();\r\n\r\n\tpdfKitDoc.rotate(watermark.angle, { origin: [pdfKitDoc.page.width / 2, pdfKitDoc.page.height / 2] });\r\n\r\n\tvar x = pdfKitDoc.page.width / 2 - watermark._size.size.width / 2;\r\n\tvar y = pdfKitDoc.page.height / 2 - watermark._size.size.height / 2;\r\n\r\n\tpdfKitDoc._font = watermark.font;\r\n\tpdfKitDoc.fontSize(watermark.fontSize);\r\n\tpdfKitDoc.text(watermark.text, x, y, { lineBreak: false });\r\n\r\n\tpdfKitDoc.restore();\r\n}\r\n\r\nfunction renderVector(vector, patterns, pdfKitDoc) {\r\n\t//TODO: pdf optimization (there's no need to write all properties everytime)\r\n\tpdfKitDoc.lineWidth(vector.lineWidth || 1);\r\n\tif (vector.dash) {\r\n\t\tpdfKitDoc.dash(vector.dash.length, { space: vector.dash.space || vector.dash.length, phase: vector.dash.phase || 0 });\r\n\t} else {\r\n\t\tpdfKitDoc.undash();\r\n\t}\r\n\tpdfKitDoc.lineJoin(vector.lineJoin || 'miter');\r\n\tpdfKitDoc.lineCap(vector.lineCap || 'butt');\r\n\r\n\t//TODO: clipping\r\n\r\n\tvar gradient = null;\r\n\r\n\tswitch (vector.type) {\r\n\t\tcase 'ellipse':\r\n\t\t\tpdfKitDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2);\r\n\r\n\t\t\tif (vector.linearGradient) {\r\n\t\t\t\tgradient = pdfKitDoc.linearGradient(vector.x - vector.r1, vector.y, vector.x + vector.r1, vector.y);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'rect':\r\n\t\t\tif (vector.r) {\r\n\t\t\t\tpdfKitDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r);\r\n\t\t\t} else {\r\n\t\t\t\tpdfKitDoc.rect(vector.x, vector.y, vector.w, vector.h);\r\n\t\t\t}\r\n\r\n\t\t\tif (vector.linearGradient) {\r\n\t\t\t\tgradient = pdfKitDoc.linearGradient(vector.x, vector.y, vector.x + vector.w, vector.y);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\tpdfKitDoc.moveTo(vector.x1, vector.y1);\r\n\t\t\tpdfKitDoc.lineTo(vector.x2, vector.y2);\r\n\t\t\tbreak;\r\n\t\tcase 'polyline':\r\n\t\t\tif (vector.points.length === 0) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tpdfKitDoc.moveTo(vector.points[0].x, vector.points[0].y);\r\n\t\t\tfor (var i = 1, l = vector.points.length; i < l; i++) {\r\n\t\t\t\tpdfKitDoc.lineTo(vector.points[i].x, vector.points[i].y);\r\n\t\t\t}\r\n\r\n\t\t\tif (vector.points.length > 1) {\r\n\t\t\t\tvar p1 = vector.points[0];\r\n\t\t\t\tvar pn = vector.points[vector.points.length - 1];\r\n\r\n\t\t\t\tif (vector.closePath || p1.x === pn.x && p1.y === pn.y) {\r\n\t\t\t\t\tpdfKitDoc.closePath();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'path':\r\n\t\t\tpdfKitDoc.path(vector.d);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (vector.linearGradient && gradient) {\r\n\t\tvar step = 1 / (vector.linearGradient.length - 1);\r\n\r\n\t\tfor (var i = 0; i < vector.linearGradient.length; i++) {\r\n\t\t\tgradient.stop(i * step, vector.linearGradient[i]);\r\n\t\t}\r\n\r\n\t\tvector.color = gradient;\r\n\t}\r\n\r\n\tif (isPattern(vector.color)) {\r\n\t\tvector.color = getPattern(vector.color, patterns);\r\n\t}\r\n\r\n\tvar fillOpacity = isNumber(vector.fillOpacity) ? vector.fillOpacity : 1;\r\n\tvar strokeOpacity = isNumber(vector.strokeOpacity) ? vector.strokeOpacity : 1;\r\n\r\n\tif (vector.color && vector.lineColor) {\r\n\t\tpdfKitDoc.fillColor(vector.color, fillOpacity);\r\n\t\tpdfKitDoc.strokeColor(vector.lineColor, strokeOpacity);\r\n\t\tpdfKitDoc.fillAndStroke();\r\n\t} else if (vector.color) {\r\n\t\tpdfKitDoc.fillColor(vector.color, fillOpacity);\r\n\t\tpdfKitDoc.fill();\r\n\t} else {\r\n\t\tpdfKitDoc.strokeColor(vector.lineColor || 'black', strokeOpacity);\r\n\t\tpdfKitDoc.stroke();\r\n\t}\r\n}\r\n\r\nfunction renderImage(image, x, y, pdfKitDoc) {\r\n\tvar opacity = isNumber(image.opacity) ? image.opacity : 1;\r\n\tpdfKitDoc.opacity(opacity);\r\n\tif (image.cover) {\r\n\t\tvar align = image.cover.align || 'center';\r\n\t\tvar valign = image.cover.valign || 'center';\r\n\t\tvar width = image.cover.width ? image.cover.width : image.width;\r\n\t\tvar height = image.cover.height ? image.cover.height : image.height;\r\n\t\tpdfKitDoc.save();\r\n\t\tpdfKitDoc.rect(image.x, image.y, width, height).clip();\r\n\t\tpdfKitDoc.image(image.image, image.x, image.y, { cover: [width, height], align: align, valign: valign });\r\n\t\tpdfKitDoc.restore();\r\n\t} else {\r\n\t\tpdfKitDoc.image(image.image, image.x, image.y, { width: image._width, height: image._height });\r\n\t}\r\n\tif (image.link) {\r\n\t\tpdfKitDoc.link(image.x, image.y, image._width, image._height, image.link);\r\n\t}\r\n\tif (image.linkToPage) {\r\n\t\tpdfKitDoc.ref({ Type: 'Action', S: 'GoTo', D: [image.linkToPage, 0, 0] }).end();\r\n\t\tpdfKitDoc.annotate(image.x, image.y, image._width, image._height, { Subtype: 'Link', Dest: [image.linkToPage - 1, 'XYZ', null, null, null] });\r\n\t}\r\n\tif (image.linkToDestination) {\r\n\t\tpdfKitDoc.goTo(image.x, image.y, image._width, image._height, image.linkToDestination);\r\n\t}\r\n}\r\n\r\nfunction renderSVG(svg, x, y, pdfKitDoc, fontProvider) {\r\n\tvar options = Object.assign({ width: svg._width, height: svg._height, assumePt: true }, svg.options);\r\n\toptions.fontCallback = function (family, bold, italic) {\r\n\t\tvar fontsFamily = family.split(',').map(function (f) { return f.trim().replace(/('|\")/g, ''); });\r\n\t\tvar font = findFont(fontProvider.fonts, fontsFamily, svg.font || 'Roboto');\r\n\r\n\t\tvar fontFile = fontProvider.getFontFile(font, bold, italic);\r\n\t\tif (fontFile === null) {\r\n\t\t\tvar type = fontProvider.getFontType(bold, italic);\r\n\t\t\tthrow new Error('Font \\'' + font + '\\' in style \\'' + type + '\\' is not defined in the font section of the document definition.');\r\n\t\t}\r\n\r\n\t\treturn fontFile;\r\n\t};\r\n\r\n\tSVGtoPDF(pdfKitDoc, svg.svg, svg.x, svg.y, options);\r\n}\r\n\r\nfunction beginClip(rect, pdfKitDoc) {\r\n\tpdfKitDoc.save();\r\n\tpdfKitDoc.addContent('' + rect.x + ' ' + rect.y + ' ' + rect.width + ' ' + rect.height + ' re');\r\n\tpdfKitDoc.clip();\r\n}\r\n\r\nfunction endClip(pdfKitDoc) {\r\n\tpdfKitDoc.restore();\r\n}\r\n\r\nfunction createPatterns(patternDefinitions, pdfKitDoc) {\r\n\tvar patterns = {};\r\n\tObject.keys(patternDefinitions).forEach(function (p) {\r\n\t\tvar pattern = patternDefinitions[p];\r\n\t\tpatterns[p] = pdfKitDoc.pattern(pattern.boundingBox, pattern.xStep, pattern.yStep, pattern.pattern, pattern.colored);\r\n\t});\r\n\treturn patterns;\r\n}\r\n\r\nmodule.exports = PdfPrinter;\r\n\n\n/***/ }),\n\n/***/ 145:\n/***/ (function(module) {\n\n\"use strict\";\n/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\r\n/*eslint no-redeclare: \"off\"*/\r\n\r\n\r\n/* qr.js -- QR code generator in Javascript (revision 2011-01-19)\r\n * Written by Kang Seonghoon <public+qrjs@mearie.org>.\r\n *\r\n * This source code is in the public domain; if your jurisdiction does not\r\n * recognize the public domain the terms of Creative Commons CC0 license\r\n * apply. In the other words, you can always do what you want.\r\n */\r\n\r\n\r\n// per-version information (cf. JIS X 0510:2004 pp. 30--36, 71)\r\n//\r\n// [0]: the degree of generator polynomial by ECC levels\r\n// [1]: # of code blocks by ECC levels\r\n// [2]: left-top positions of alignment patterns\r\n//\r\n// the number in this table (in particular, [0]) does not exactly match with\r\n// the numbers in the specficiation. see augumenteccs below for the reason.\r\nvar VERSIONS = [\r\n\tnull,\r\n\t[[10, 7, 17, 13], [1, 1, 1, 1], []],\r\n\t[[16, 10, 28, 22], [1, 1, 1, 1], [4, 16]],\r\n\t[[26, 15, 22, 18], [1, 1, 2, 2], [4, 20]],\r\n\t[[18, 20, 16, 26], [2, 1, 4, 2], [4, 24]],\r\n\t[[24, 26, 22, 18], [2, 1, 4, 4], [4, 28]],\r\n\t[[16, 18, 28, 24], [4, 2, 4, 4], [4, 32]],\r\n\t[[18, 20, 26, 18], [4, 2, 5, 6], [4, 20, 36]],\r\n\t[[22, 24, 26, 22], [4, 2, 6, 6], [4, 22, 40]],\r\n\t[[22, 30, 24, 20], [5, 2, 8, 8], [4, 24, 44]],\r\n\t[[26, 18, 28, 24], [5, 4, 8, 8], [4, 26, 48]],\r\n\t[[30, 20, 24, 28], [5, 4, 11, 8], [4, 28, 52]],\r\n\t[[22, 24, 28, 26], [8, 4, 11, 10], [4, 30, 56]],\r\n\t[[22, 26, 22, 24], [9, 4, 16, 12], [4, 32, 60]],\r\n\t[[24, 30, 24, 20], [9, 4, 16, 16], [4, 24, 44, 64]],\r\n\t[[24, 22, 24, 30], [10, 6, 18, 12], [4, 24, 46, 68]],\r\n\t[[28, 24, 30, 24], [10, 6, 16, 17], [4, 24, 48, 72]],\r\n\t[[28, 28, 28, 28], [11, 6, 19, 16], [4, 28, 52, 76]],\r\n\t[[26, 30, 28, 28], [13, 6, 21, 18], [4, 28, 54, 80]],\r\n\t[[26, 28, 26, 26], [14, 7, 25, 21], [4, 28, 56, 84]],\r\n\t[[26, 28, 28, 30], [16, 8, 25, 20], [4, 32, 60, 88]],\r\n\t[[26, 28, 30, 28], [17, 8, 25, 23], [4, 26, 48, 70, 92]],\r\n\t[[28, 28, 24, 30], [17, 9, 34, 23], [4, 24, 48, 72, 96]],\r\n\t[[28, 30, 30, 30], [18, 9, 30, 25], [4, 28, 52, 76, 100]],\r\n\t[[28, 30, 30, 30], [20, 10, 32, 27], [4, 26, 52, 78, 104]],\r\n\t[[28, 26, 30, 30], [21, 12, 35, 29], [4, 30, 56, 82, 108]],\r\n\t[[28, 28, 30, 28], [23, 12, 37, 34], [4, 28, 56, 84, 112]],\r\n\t[[28, 30, 30, 30], [25, 12, 40, 34], [4, 32, 60, 88, 116]],\r\n\t[[28, 30, 30, 30], [26, 13, 42, 35], [4, 24, 48, 72, 96, 120]],\r\n\t[[28, 30, 30, 30], [28, 14, 45, 38], [4, 28, 52, 76, 100, 124]],\r\n\t[[28, 30, 30, 30], [29, 15, 48, 40], [4, 24, 50, 76, 102, 128]],\r\n\t[[28, 30, 30, 30], [31, 16, 51, 43], [4, 28, 54, 80, 106, 132]],\r\n\t[[28, 30, 30, 30], [33, 17, 54, 45], [4, 32, 58, 84, 110, 136]],\r\n\t[[28, 30, 30, 30], [35, 18, 57, 48], [4, 28, 56, 84, 112, 140]],\r\n\t[[28, 30, 30, 30], [37, 19, 60, 51], [4, 32, 60, 88, 116, 144]],\r\n\t[[28, 30, 30, 30], [38, 19, 63, 53], [4, 28, 52, 76, 100, 124, 148]],\r\n\t[[28, 30, 30, 30], [40, 20, 66, 56], [4, 22, 48, 74, 100, 126, 152]],\r\n\t[[28, 30, 30, 30], [43, 21, 70, 59], [4, 26, 52, 78, 104, 130, 156]],\r\n\t[[28, 30, 30, 30], [45, 22, 74, 62], [4, 30, 56, 82, 108, 134, 160]],\r\n\t[[28, 30, 30, 30], [47, 24, 77, 65], [4, 24, 52, 80, 108, 136, 164]],\r\n\t[[28, 30, 30, 30], [49, 25, 81, 68], [4, 28, 56, 84, 112, 140, 168]]];\r\n\r\n// mode constants (cf. Table 2 in JIS X 0510:2004 p. 16)\r\nvar MODE_TERMINATOR = 0;\r\nvar MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8;\r\n\r\n// validation regexps\r\nvar NUMERIC_REGEXP = /^\\d*$/;\r\nvar ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\\-./:]*$/;\r\nvar ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\\-./:]*$/;\r\n\r\n// ECC levels (cf. Table 22 in JIS X 0510:2004 p. 45)\r\nvar ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2;\r\n\r\n// GF(2^8)-to-integer mapping with a reducing polynomial x^8+x^4+x^3+x^2+1\r\n// invariant: GF256_MAP[GF256_INVMAP[i]] == i for all i in [1,256)\r\nvar GF256_MAP = [], GF256_INVMAP = [-1];\r\nfor (var i = 0, v = 1; i < 255; ++i) {\r\n\tGF256_MAP.push(v);\r\n\tGF256_INVMAP[v] = i;\r\n\tv = (v * 2) ^ (v >= 128 ? 0x11d : 0);\r\n}\r\n\r\n// generator polynomials up to degree 30\r\n// (should match with polynomials in JIS X 0510:2004 Appendix A)\r\n//\r\n// generator polynomial of degree K is product of (x-\\alpha^0), (x-\\alpha^1),\r\n// ..., (x-\\alpha^(K-1)). by convention, we omit the K-th coefficient (always 1)\r\n// from the result; also other coefficients are written in terms of the exponent\r\n// to \\alpha to avoid the redundant calculation. (see also calculateecc below.)\r\nvar GF256_GENPOLY = [[]];\r\nfor (var i = 0; i < 30; ++i) {\r\n\tvar prevpoly = GF256_GENPOLY[i], poly = [];\r\n\tfor (var j = 0; j <= i; ++j) {\r\n\t\tvar a = (j < i ? GF256_MAP[prevpoly[j]] : 0);\r\n\t\tvar b = GF256_MAP[(i + (prevpoly[j - 1] || 0)) % 255];\r\n\t\tpoly.push(GF256_INVMAP[a ^ b]);\r\n\t}\r\n\tGF256_GENPOLY.push(poly);\r\n}\r\n\r\n// alphanumeric character mapping (cf. Table 5 in JIS X 0510:2004 p. 19)\r\nvar ALPHANUMERIC_MAP = {};\r\nfor (var i = 0; i < 45; ++i) {\r\n\tALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i;\r\n}\r\n\r\n// mask functions in terms of row # and column #\r\n// (cf. Table 20 in JIS X 0510:2004 p. 42)\r\n/*jshint unused: false */\r\nvar MASKFUNCS = [\r\n\tfunction (i, j) {\r\n\t\treturn (i + j) % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn i % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn j % 3 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn (i + j) % 3 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn (((i / 2) | 0) + ((j / 3) | 0)) % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn (i * j) % 2 + (i * j) % 3 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn ((i * j) % 2 + (i * j) % 3) % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn ((i + j) % 2 + (i * j) % 3) % 2 === 0;\r\n\t}];\r\n\r\n// returns true when the version information has to be embeded.\r\nvar needsverinfo = function (ver) {\r\n\treturn ver > 6;\r\n};\r\n\r\n// returns the size of entire QR code for given version.\r\nvar getsizebyver = function (ver) {\r\n\treturn 4 * ver + 17;\r\n};\r\n\r\n// returns the number of bits available for code words in this version.\r\nvar nfullbits = function (ver) {\r\n\t/*\r\n\t * |<--------------- n --------------->|\r\n\t * | |<----- n-17 ---->| |\r\n\t * +-------+ ///+-------+ ----\r\n\t * | | ///| | ^\r\n\t * | 9x9 | @@@@@ ///| 9x8 | |\r\n\t * | | # # # @5x5@ # # # | | |\r\n\t * +-------+ @@@@@ +-------+ |\r\n\t * # ---|\r\n\t * ^ |\r\n\t * # |\r\n\t * @@@@@ @@@@@ @@@@@ | n\r\n\t * @5x5@ @5x5@ @5x5@ n-17\r\n\t * @@@@@ @@@@@ @@@@@ | |\r\n\t * # | |\r\n\t * ////// v |\r\n\t * //////# ---|\r\n\t * +-------+ @@@@@ @@@@@ |\r\n\t * | | @5x5@ @5x5@ |\r\n\t * | 8x9 | @@@@@ @@@@@ |\r\n\t * | | v\r\n\t * +-------+ ----\r\n\t *\r\n\t * when the entire code has n^2 modules and there are m^2-3 alignment\r\n\t * patterns, we have:\r\n\t * - 225 (= 9x9 + 9x8 + 8x9) modules for finder patterns and\r\n\t * format information;\r\n\t * - 2n-34 (= 2(n-17)) modules for timing patterns;\r\n\t * - 36 (= 3x6 + 6x3) modules for version information, if any;\r\n\t * - 25m^2-75 (= (m^2-3)(5x5)) modules for alignment patterns\r\n\t * if any, but 10m-20 (= 2(m-2)x5) of them overlaps with\r\n\t * timing patterns.\r\n\t */\r\n\tvar v = VERSIONS[ver];\r\n\tvar nbits = 16 * ver * ver + 128 * ver + 64; // finder, timing and format info.\r\n\tif (needsverinfo(ver))\r\n\t\tnbits -= 36; // version information\r\n\tif (v[2].length) { // alignment patterns\r\n\t\tnbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55;\r\n\t}\r\n\treturn nbits;\r\n};\r\n\r\n// returns the number of bits available for data portions (i.e. excludes ECC\r\n// bits but includes mode and length bits) in this version and ECC level.\r\nvar ndatabits = function (ver, ecclevel) {\r\n\tvar nbits = nfullbits(ver) & ~7; // no sub-octet code words\r\n\tvar v = VERSIONS[ver];\r\n\tnbits -= 8 * v[0][ecclevel] * v[1][ecclevel]; // ecc bits\r\n\treturn nbits;\r\n};\r\n\r\n// returns the number of bits required for the length of data.\r\n// (cf. Table 3 in JIS X 0510:2004 p. 16)\r\nvar ndatalenbits = function (ver, mode) {\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\treturn (ver < 10 ? 10 : ver < 27 ? 12 : 14);\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\treturn (ver < 10 ? 9 : ver < 27 ? 11 : 13);\r\n\t\tcase MODE_OCTET:\r\n\t\t\treturn (ver < 10 ? 8 : 16);\r\n\t\tcase MODE_KANJI:\r\n\t\t\treturn (ver < 10 ? 8 : ver < 27 ? 10 : 12);\r\n\t}\r\n};\r\n\r\n// returns the maximum length of data possible in given configuration.\r\nvar getmaxdatalen = function (ver, mode, ecclevel) {\r\n\tvar nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode); // 4 for mode bits\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\treturn ((nbits / 10) | 0) * 3 + (nbits % 10 < 4 ? 0 : nbits % 10 < 7 ? 1 : 2);\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\treturn ((nbits / 11) | 0) * 2 + (nbits % 11 < 6 ? 0 : 1);\r\n\t\tcase MODE_OCTET:\r\n\t\t\treturn (nbits / 8) | 0;\r\n\t\tcase MODE_KANJI:\r\n\t\t\treturn (nbits / 13) | 0;\r\n\t}\r\n};\r\n\r\n// checks if the given data can be encoded in given mode, and returns\r\n// the converted data for the further processing if possible. otherwise\r\n// returns null.\r\n//\r\n// this function does not check the length of data; it is a duty of\r\n// encode function below (as it depends on the version and ECC level too).\r\nvar validatedata = function (mode, data) {\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\tif (!data.match(NUMERIC_REGEXP))\r\n\t\t\t\treturn null;\r\n\t\t\treturn data;\r\n\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\tif (!data.match(ALPHANUMERIC_REGEXP))\r\n\t\t\t\treturn null;\r\n\t\t\treturn data.toUpperCase();\r\n\r\n\t\tcase MODE_OCTET:\r\n\t\t\tif (typeof data === 'string') { // encode as utf-8 string\r\n\t\t\t\tvar newdata = [];\r\n\t\t\t\tfor (var i = 0; i < data.length; ++i) {\r\n\t\t\t\t\tvar ch = data.charCodeAt(i);\r\n\t\t\t\t\tif (ch < 0x80) {\r\n\t\t\t\t\t\tnewdata.push(ch);\r\n\t\t\t\t\t} else if (ch < 0x800) {\r\n\t\t\t\t\t\tnewdata.push(0xc0 | (ch >> 6),\r\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\r\n\t\t\t\t\t} else if (ch < 0x10000) {\r\n\t\t\t\t\t\tnewdata.push(0xe0 | (ch >> 12),\r\n\t\t\t\t\t\t\t0x80 | ((ch >> 6) & 0x3f),\r\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnewdata.push(0xf0 | (ch >> 18),\r\n\t\t\t\t\t\t\t0x80 | ((ch >> 12) & 0x3f),\r\n\t\t\t\t\t\t\t0x80 | ((ch >> 6) & 0x3f),\r\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn newdata;\r\n\t\t\t} else {\r\n\t\t\t\treturn data;\r\n\t\t\t}\r\n\t}\r\n};\r\n\r\n// returns the code words (sans ECC bits) for given data and configurations.\r\n// requires data to be preprocessed by validatedata. no length check is\r\n// performed, and everything has to be checked before calling this function.\r\nvar encode = function (ver, mode, data, maxbuflen) {\r\n\tvar buf = [];\r\n\tvar bits = 0, remaining = 8;\r\n\tvar datalen = data.length;\r\n\r\n\t// this function is intentionally no-op when n=0.\r\n\tvar pack = function (x, n) {\r\n\t\tif (n >= remaining) {\r\n\t\t\tbuf.push(bits | (x >> (n -= remaining)));\r\n\t\t\twhile (n >= 8)\r\n\t\t\t\tbuf.push((x >> (n -= 8)) & 255);\r\n\t\t\tbits = 0;\r\n\t\t\tremaining = 8;\r\n\t\t}\r\n\t\tif (n > 0)\r\n\t\t\tbits |= (x & ((1 << n) - 1)) << (remaining -= n);\r\n\t};\r\n\r\n\tvar nlenbits = ndatalenbits(ver, mode);\r\n\tpack(mode, 4);\r\n\tpack(datalen, nlenbits);\r\n\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\tfor (var i = 2; i < datalen; i += 3) {\r\n\t\t\t\tpack(parseInt(data.substring(i - 2, i + 1), 10), 10);\r\n\t\t\t}\r\n\t\t\tpack(parseInt(data.substring(i - 2), 10), [0, 4, 7][datalen % 3]);\r\n\t\t\tbreak;\r\n\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\tfor (var i = 1; i < datalen; i += 2) {\r\n\t\t\t\tpack(ALPHANUMERIC_MAP[data.charAt(i - 1)] * 45 +\r\n\t\t\t\t\tALPHANUMERIC_MAP[data.charAt(i)], 11);\r\n\t\t\t}\r\n\t\t\tif (datalen % 2 == 1) {\r\n\t\t\t\tpack(ALPHANUMERIC_MAP[data.charAt(i - 1)], 6);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase MODE_OCTET:\r\n\t\t\tfor (var i = 0; i < datalen; ++i) {\r\n\t\t\t\tpack(data[i], 8);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\t// final bits. it is possible that adding terminator causes the buffer\r\n\t// to overflow, but then the buffer truncated to the maximum size will\r\n\t// be valid as the truncated terminator mode bits and padding is\r\n\t// identical in appearance (cf. JIS X 0510:2004 sec 8.4.8).\r\n\tpack(MODE_TERMINATOR, 4);\r\n\tif (remaining < 8)\r\n\t\tbuf.push(bits);\r\n\r\n\t// the padding to fill up the remaining space. we should not add any\r\n\t// words when the overflow already occurred.\r\n\twhile (buf.length + 1 < maxbuflen)\r\n\t\tbuf.push(0xec, 0x11);\r\n\tif (buf.length < maxbuflen)\r\n\t\tbuf.push(0xec);\r\n\treturn buf;\r\n};\r\n\r\n// calculates ECC code words for given code words and generator polynomial.\r\n//\r\n// this is quite similar to CRC calculation as both Reed-Solomon and CRC use\r\n// the certain kind of cyclic codes, which is effectively the division of\r\n// zero-augumented polynomial by the generator polynomial. the only difference\r\n// is that Reed-Solomon uses GF(2^8), instead of CRC's GF(2), and Reed-Solomon\r\n// uses the different generator polynomial than CRC's.\r\nvar calculateecc = function (poly, genpoly) {\r\n\tvar modulus = poly.slice(0);\r\n\tvar polylen = poly.length, genpolylen = genpoly.length;\r\n\tfor (var i = 0; i < genpolylen; ++i)\r\n\t\tmodulus.push(0);\r\n\tfor (var i = 0; i < polylen; ) {\r\n\t\tvar quotient = GF256_INVMAP[modulus[i++]];\r\n\t\tif (quotient >= 0) {\r\n\t\t\tfor (var j = 0; j < genpolylen; ++j) {\r\n\t\t\t\tmodulus[i + j] ^= GF256_MAP[(quotient + genpoly[j]) % 255];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn modulus.slice(polylen);\r\n};\r\n\r\n// auguments ECC code words to given code words. the resulting words are\r\n// ready to be encoded in the matrix.\r\n//\r\n// the much of actual augumenting procedure follows JIS X 0510:2004 sec 8.7.\r\n// the code is simplified using the fact that the size of each code & ECC\r\n// blocks is almost same; for example, when we have 4 blocks and 46 data words\r\n// the number of code words in those blocks are 11, 11, 12, 12 respectively.\r\nvar augumenteccs = function (poly, nblocks, genpoly) {\r\n\tvar subsizes = [];\r\n\tvar subsize = (poly.length / nblocks) | 0, subsize0 = 0;\r\n\tvar pivot = nblocks - poly.length % nblocks;\r\n\tfor (var i = 0; i < pivot; ++i) {\r\n\t\tsubsizes.push(subsize0);\r\n\t\tsubsize0 += subsize;\r\n\t}\r\n\tfor (var i = pivot; i < nblocks; ++i) {\r\n\t\tsubsizes.push(subsize0);\r\n\t\tsubsize0 += subsize + 1;\r\n\t}\r\n\tsubsizes.push(subsize0);\r\n\r\n\tvar eccs = [];\r\n\tfor (var i = 0; i < nblocks; ++i) {\r\n\t\teccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i + 1]), genpoly));\r\n\t}\r\n\r\n\tvar result = [];\r\n\tvar nitemsperblock = (poly.length / nblocks) | 0;\r\n\tfor (var i = 0; i < nitemsperblock; ++i) {\r\n\t\tfor (var j = 0; j < nblocks; ++j) {\r\n\t\t\tresult.push(poly[subsizes[j] + i]);\r\n\t\t}\r\n\t}\r\n\tfor (var j = pivot; j < nblocks; ++j) {\r\n\t\tresult.push(poly[subsizes[j + 1] - 1]);\r\n\t}\r\n\tfor (var i = 0; i < genpoly.length; ++i) {\r\n\t\tfor (var j = 0; j < nblocks; ++j) {\r\n\t\t\tresult.push(eccs[j][i]);\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n};\r\n\r\n// auguments BCH(p+q,q) code to the polynomial over GF(2), given the proper\r\n// genpoly. the both input and output are in binary numbers, and unlike\r\n// calculateecc genpoly should include the 1 bit for the highest degree.\r\n//\r\n// actual polynomials used for this procedure are as follows:\r\n// - p=10, q=5, genpoly=x^10+x^8+x^5+x^4+x^2+x+1 (JIS X 0510:2004 Appendix C)\r\n// - p=18, q=6, genpoly=x^12+x^11+x^10+x^9+x^8+x^5+x^2+1 (ibid. Appendix D)\r\nvar augumentbch = function (poly, p, genpoly, q) {\r\n\tvar modulus = poly << q;\r\n\tfor (var i = p - 1; i >= 0; --i) {\r\n\t\tif ((modulus >> (q + i)) & 1)\r\n\t\t\tmodulus ^= genpoly << i;\r\n\t}\r\n\treturn (poly << q) | modulus;\r\n};\r\n\r\n// creates the base matrix for given version. it returns two matrices, one of\r\n// them is the actual one and the another represents the \"reserved\" portion\r\n// (e.g. finder and timing patterns) of the matrix.\r\n//\r\n// some entries in the matrix may be undefined, rather than 0 or 1. this is\r\n// intentional (no initialization needed!), and putdata below will fill\r\n// the remaining ones.\r\nvar makebasematrix = function (ver) {\r\n\tvar v = VERSIONS[ver], n = getsizebyver(ver);\r\n\tvar matrix = [], reserved = [];\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tmatrix.push([]);\r\n\t\treserved.push([]);\r\n\t}\r\n\r\n\tvar blit = function (y, x, h, w, bits) {\r\n\t\tfor (var i = 0; i < h; ++i) {\r\n\t\t\tfor (var j = 0; j < w; ++j) {\r\n\t\t\t\tmatrix[y + i][x + j] = (bits[i] >> j) & 1;\r\n\t\t\t\treserved[y + i][x + j] = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// finder patterns and a part of timing patterns\r\n\t// will also mark the format information area (not yet written) as reserved.\r\n\tblit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]);\r\n\tblit(n - 8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]);\r\n\tblit(0, n - 8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]);\r\n\r\n\t// the rest of timing patterns\r\n\tfor (var i = 9; i < n - 8; ++i) {\r\n\t\tmatrix[6][i] = matrix[i][6] = ~i & 1;\r\n\t\treserved[6][i] = reserved[i][6] = 1;\r\n\t}\r\n\r\n\t// alignment patterns\r\n\tvar aligns = v[2], m = aligns.length;\r\n\tfor (var i = 0; i < m; ++i) {\r\n\t\tvar minj = (i === 0 || i === m - 1 ? 1 : 0), maxj = (i === 0 ? m - 1 : m);\r\n\t\tfor (var j = minj; j < maxj; ++j) {\r\n\t\t\tblit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]);\r\n\t\t}\r\n\t}\r\n\r\n\t// version information\r\n\tif (needsverinfo(ver)) {\r\n\t\tvar code = augumentbch(ver, 6, 0x1f25, 12);\r\n\t\tvar k = 0;\r\n\t\tfor (var i = 0; i < 6; ++i) {\r\n\t\t\tfor (var j = 0; j < 3; ++j) {\r\n\t\t\t\tmatrix[i][(n - 11) + j] = matrix[(n - 11) + j][i] = (code >> k++) & 1;\r\n\t\t\t\treserved[i][(n - 11) + j] = reserved[(n - 11) + j][i] = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {matrix: matrix, reserved: reserved};\r\n};\r\n\r\n// fills the data portion (i.e. unmarked in reserved) of the matrix with given\r\n// code words. the size of code words should be no more than available bits,\r\n// and remaining bits are padded to 0 (cf. JIS X 0510:2004 sec 8.7.3).\r\nvar putdata = function (matrix, reserved, buf) {\r\n\tvar n = matrix.length;\r\n\tvar k = 0, dir = -1;\r\n\tfor (var i = n - 1; i >= 0; i -= 2) {\r\n\t\tif (i == 6)\r\n\t\t\t--i; // skip the entire timing pattern column\r\n\t\tvar jj = (dir < 0 ? n - 1 : 0);\r\n\t\tfor (var j = 0; j < n; ++j) {\r\n\t\t\tfor (var ii = i; ii > i - 2; --ii) {\r\n\t\t\t\tif (!reserved[jj][ii]) {\r\n\t\t\t\t\t// may overflow, but (undefined >> x)\r\n\t\t\t\t\t// is 0 so it will auto-pad to zero.\r\n\t\t\t\t\tmatrix[jj][ii] = (buf[k >> 3] >> (~k & 7)) & 1;\r\n\t\t\t\t\t++k;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tjj += dir;\r\n\t\t}\r\n\t\tdir = -dir;\r\n\t}\r\n\treturn matrix;\r\n};\r\n\r\n// XOR-masks the data portion of the matrix. repeating the call with the same\r\n// arguments will revert the prior call (convenient in the matrix evaluation).\r\nvar maskdata = function (matrix, reserved, mask) {\r\n\tvar maskf = MASKFUNCS[mask];\r\n\tvar n = matrix.length;\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tfor (var j = 0; j < n; ++j) {\r\n\t\t\tif (!reserved[i][j])\r\n\t\t\t\tmatrix[i][j] ^= maskf(i, j);\r\n\t\t}\r\n\t}\r\n\treturn matrix;\r\n};\r\n\r\n// puts the format information.\r\nvar putformatinfo = function (matrix, reserved, ecclevel, mask) {\r\n\tvar n = matrix.length;\r\n\tvar code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412;\r\n\tfor (var i = 0; i < 15; ++i) {\r\n\t\tvar r = [0, 1, 2, 3, 4, 5, 7, 8, n - 7, n - 6, n - 5, n - 4, n - 3, n - 2, n - 1][i];\r\n\t\tvar c = [n - 1, n - 2, n - 3, n - 4, n - 5, n - 6, n - 7, n - 8, 7, 5, 4, 3, 2, 1, 0][i];\r\n\t\tmatrix[r][8] = matrix[8][c] = (code >> i) & 1;\r\n\t\t// we don't have to mark those bits reserved; always done\r\n\t\t// in makebasematrix above.\r\n\t}\r\n\treturn matrix;\r\n};\r\n\r\n// evaluates the resulting matrix and returns the score (lower is better).\r\n// (cf. JIS X 0510:2004 sec 8.8.2)\r\n//\r\n// the evaluation procedure tries to avoid the problematic patterns naturally\r\n// occuring from the original matrix. for example, it penaltizes the patterns\r\n// which just look like the finder pattern which will confuse the decoder.\r\n// we choose the mask which results in the lowest score among 8 possible ones.\r\n//\r\n// note: zxing seems to use the same procedure and in many cases its choice\r\n// agrees to ours, but sometimes it does not. practically it doesn't matter.\r\nvar evaluatematrix = function (matrix) {\r\n\t// N1+(k-5) points for each consecutive row of k same-colored modules,\r\n\t// where k >= 5. no overlapping row counts.\r\n\tvar PENALTY_CONSECUTIVE = 3;\r\n\t// N2 points for each 2x2 block of same-colored modules.\r\n\t// overlapping block does count.\r\n\tvar PENALTY_TWOBYTWO = 3;\r\n\t// N3 points for each pattern with >4W:1B:1W:3B:1W:1B or\r\n\t// 1B:1W:3B:1W:1B:>4W, or their multiples (e.g. highly unlikely,\r\n\t// but 13W:3B:3W:9B:3W:3B counts).\r\n\tvar PENALTY_FINDERLIKE = 40;\r\n\t// N4*k points for every (5*k)% deviation from 50% black density.\r\n\t// i.e. k=1 for 55~60% and 40~45%, k=2 for 60~65% and 35~40%, etc.\r\n\tvar PENALTY_DENSITY = 10;\r\n\r\n\tvar evaluategroup = function (groups) { // assumes [W,B,W,B,W,...,B,W]\r\n\t\tvar score = 0;\r\n\t\tfor (var i = 0; i < groups.length; ++i) {\r\n\t\t\tif (groups[i] >= 5)\r\n\t\t\t\tscore += PENALTY_CONSECUTIVE + (groups[i] - 5);\r\n\t\t}\r\n\t\tfor (var i = 5; i < groups.length; i += 2) {\r\n\t\t\tvar p = groups[i];\r\n\t\t\tif (groups[i - 1] == p && groups[i - 2] == 3 * p && groups[i - 3] == p &&\r\n\t\t\t\tgroups[i - 4] == p && (groups[i - 5] >= 4 * p || groups[i + 1] >= 4 * p)) {\r\n\t\t\t\t// this part differs from zxing...\r\n\t\t\t\tscore += PENALTY_FINDERLIKE;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn score;\r\n\t};\r\n\r\n\tvar n = matrix.length;\r\n\tvar score = 0, nblacks = 0;\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tvar row = matrix[i];\r\n\t\tvar groups;\r\n\r\n\t\t// evaluate the current row\r\n\t\tgroups = [0]; // the first empty group of white\r\n\t\tfor (var j = 0; j < n; ) {\r\n\t\t\tvar k;\r\n\t\t\tfor (k = 0; j < n && row[j]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t\tfor (k = 0; j < n && !row[j]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t}\r\n\t\tscore += evaluategroup(groups);\r\n\r\n\t\t// evaluate the current column\r\n\t\tgroups = [0];\r\n\t\tfor (var j = 0; j < n; ) {\r\n\t\t\tvar k;\r\n\t\t\tfor (k = 0; j < n && matrix[j][i]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t\tfor (k = 0; j < n && !matrix[j][i]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t}\r\n\t\tscore += evaluategroup(groups);\r\n\r\n\t\t// check the 2x2 box and calculate the density\r\n\t\tvar nextrow = matrix[i + 1] || [];\r\n\t\tnblacks += row[0];\r\n\t\tfor (var j = 1; j < n; ++j) {\r\n\t\t\tvar p = row[j];\r\n\t\t\tnblacks += p;\r\n\t\t\t// at least comparison with next row should be strict...\r\n\t\t\tif (row[j - 1] == p && nextrow[j] === p && nextrow[j - 1] === p) {\r\n\t\t\t\tscore += PENALTY_TWOBYTWO;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscore += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0);\r\n\treturn score;\r\n};\r\n\r\n// returns the fully encoded QR code matrix which contains given data.\r\n// it also chooses the best mask automatically when mask is -1.\r\nvar generate = function (data, ver, mode, ecclevel, mask) {\r\n\tvar v = VERSIONS[ver];\r\n\tvar buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3);\r\n\tbuf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]);\r\n\r\n\tvar result = makebasematrix(ver);\r\n\tvar matrix = result.matrix, reserved = result.reserved;\r\n\tputdata(matrix, reserved, buf);\r\n\r\n\tif (mask < 0) {\r\n\t\t// find the best mask\r\n\t\tmaskdata(matrix, reserved, 0);\r\n\t\tputformatinfo(matrix, reserved, ecclevel, 0);\r\n\t\tvar bestmask = 0, bestscore = evaluatematrix(matrix);\r\n\t\tmaskdata(matrix, reserved, 0);\r\n\t\tfor (mask = 1; mask < 8; ++mask) {\r\n\t\t\tmaskdata(matrix, reserved, mask);\r\n\t\t\tputformatinfo(matrix, reserved, ecclevel, mask);\r\n\t\t\tvar score = evaluatematrix(matrix);\r\n\t\t\tif (bestscore > score) {\r\n\t\t\t\tbestscore = score;\r\n\t\t\t\tbestmask = mask;\r\n\t\t\t}\r\n\t\t\tmaskdata(matrix, reserved, mask);\r\n\t\t}\r\n\t\tmask = bestmask;\r\n\t}\r\n\r\n\tmaskdata(matrix, reserved, mask);\r\n\tputformatinfo(matrix, reserved, ecclevel, mask);\r\n\treturn matrix;\r\n};\r\n\r\n// the public interface is trivial; the options available are as follows:\r\n//\r\n// - version: an integer in [1,40]. when omitted (or -1) the smallest possible\r\n// version is chosen.\r\n// - mode: one of 'numeric', 'alphanumeric', 'octet'. when omitted the smallest\r\n// possible mode is chosen.\r\n// - eccLevel: one of 'L', 'M', 'Q', 'H'. defaults to 'L'.\r\n// - mask: an integer in [0,7]. when omitted (or -1) the best mask is chosen.\r\n//\r\n\r\nfunction generateFrame(data, options) {\r\n\tvar MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC,\r\n\t\t'octet': MODE_OCTET};\r\n\tvar ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q,\r\n\t\t'H': ECCLEVEL_H};\r\n\r\n\toptions = options || {};\r\n\tvar ver = options.version || -1;\r\n\tvar ecclevel = ECCLEVELS[(options.eccLevel || 'L').toUpperCase()];\r\n\tvar mode = options.mode ? MODES[options.mode.toLowerCase()] : -1;\r\n\tvar mask = 'mask' in options ? options.mask : -1;\r\n\r\n\tif (mode < 0) {\r\n\t\tif (typeof data === 'string') {\r\n\t\t\tif (data.match(NUMERIC_REGEXP)) {\r\n\t\t\t\tmode = MODE_NUMERIC;\r\n\t\t\t} else if (data.match(ALPHANUMERIC_OUT_REGEXP)) {\r\n\t\t\t\t// while encode supports case-insensitive encoding, we restrict the data to be uppercased when auto-selecting the mode.\r\n\t\t\t\tmode = MODE_ALPHANUMERIC;\r\n\t\t\t} else {\r\n\t\t\t\tmode = MODE_OCTET;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tmode = MODE_OCTET;\r\n\t\t}\r\n\t} else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC ||\r\n\t\tmode == MODE_OCTET)) {\r\n\t\tthrow 'invalid or unsupported mode';\r\n\t}\r\n\r\n\tdata = validatedata(mode, data);\r\n\tif (data === null)\r\n\t\tthrow 'invalid data format';\r\n\r\n\tif (ecclevel < 0 || ecclevel > 3)\r\n\t\tthrow 'invalid ECC level';\r\n\r\n\tif (ver < 0) {\r\n\t\tfor (ver = 1; ver <= 40; ++ver) {\r\n\t\t\tif (data.length <= getmaxdatalen(ver, mode, ecclevel))\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (ver > 40)\r\n\t\t\tthrow 'too large data for the Qr format';\r\n\t} else if (ver < 1 || ver > 40) {\r\n\t\tthrow 'invalid Qr version! should be between 1 and 40';\r\n\t}\r\n\r\n\tif (mask != -1 && (mask < 0 || mask > 8))\r\n\t\tthrow 'invalid mask';\r\n\t//console.log('version:', ver, 'mode:', mode, 'ECC:', ecclevel, 'mask:', mask )\r\n\treturn generate(data, ver, mode, ecclevel, mask);\r\n}\r\n\r\n\r\n// options\r\n// - modulesize: a number. this is a size of each modules in pixels, and\r\n// defaults to 5px.\r\n// - margin: a number. this is a size of margin in *modules*, and defaults to\r\n// 4 (white modules). the specficiation mandates the margin no less than 4\r\n// modules, so it is better not to alter this value unless you know what\r\n// you're doing.\r\nfunction buildCanvas(data, options) {\r\n\r\n\tvar canvas = [];\r\n\tvar background = options.background || '#fff';\r\n\tvar foreground = options.foreground || '#000';\r\n\t//var margin = options.margin || 4;\r\n\tvar matrix = generateFrame(data, options);\r\n\tvar n = matrix.length;\r\n\tvar modSize = Math.floor(options.fit ? options.fit / n : 5);\r\n\tvar size = n * modSize;\r\n\r\n\tcanvas.push({\r\n\t\ttype: 'rect',\r\n\t\tx: 0, y: 0, w: size, h: size, lineWidth: 0, color: background\r\n\t});\r\n\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tfor (var j = 0; j < n; ++j) {\r\n\t\t\tif (matrix[i][j]) {\r\n\t\t\t\tcanvas.push({\r\n\t\t\t\t\ttype: 'rect',\r\n\t\t\t\t\tx: modSize * j,\r\n\t\t\t\t\ty: modSize * i,\r\n\t\t\t\t\tw: modSize,\r\n\t\t\t\t\th: modSize,\r\n\t\t\t\t\tlineWidth: 0,\r\n\t\t\t\t\tcolor: foreground\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tcanvas: canvas,\r\n\t\tsize: size\r\n\t};\r\n\r\n}\r\n\r\nfunction measure(node) {\r\n\tvar cd = buildCanvas(node.qr, node);\r\n\tnode._canvas = cd.canvas;\r\n\tnode._width = node._height = node._minWidth = node._maxWidth = node._minHeight = node._maxHeight = cd.size;\r\n\treturn node;\r\n}\r\n\r\nmodule.exports = {\r\n\tmeasure: measure\r\n};\n\n/***/ }),\n\n/***/ 4762:\n/***/ (function(module) {\n\n\"use strict\";\n\r\n\r\nmodule.exports = {\r\n\t'4A0': [4767.87, 6740.79],\r\n\t'2A0': [3370.39, 4767.87],\r\n\tA0: [2383.94, 3370.39],\r\n\tA1: [1683.78, 2383.94],\r\n\tA2: [1190.55, 1683.78],\r\n\tA3: [841.89, 1190.55],\r\n\tA4: [595.28, 841.89],\r\n\tA5: [419.53, 595.28],\r\n\tA6: [297.64, 419.53],\r\n\tA7: [209.76, 297.64],\r\n\tA8: [147.40, 209.76],\r\n\tA9: [104.88, 147.40],\r\n\tA10: [73.70, 104.88],\r\n\tB0: [2834.65, 4008.19],\r\n\tB1: [2004.09, 2834.65],\r\n\tB2: [1417.32, 2004.09],\r\n\tB3: [1000.63, 1417.32],\r\n\tB4: [708.66, 1000.63],\r\n\tB5: [498.90, 708.66],\r\n\tB6: [354.33, 498.90],\r\n\tB7: [249.45, 354.33],\r\n\tB8: [175.75, 249.45],\r\n\tB9: [124.72, 175.75],\r\n\tB10: [87.87, 124.72],\r\n\tC0: [2599.37, 3676.54],\r\n\tC1: [1836.85, 2599.37],\r\n\tC2: [1298.27, 1836.85],\r\n\tC3: [918.43, 1298.27],\r\n\tC4: [649.13, 918.43],\r\n\tC5: [459.21, 649.13],\r\n\tC6: [323.15, 459.21],\r\n\tC7: [229.61, 323.15],\r\n\tC8: [161.57, 229.61],\r\n\tC9: [113.39, 161.57],\r\n\tC10: [79.37, 113.39],\r\n\tRA0: [2437.80, 3458.27],\r\n\tRA1: [1729.13, 2437.80],\r\n\tRA2: [1218.90, 1729.13],\r\n\tRA3: [864.57, 1218.90],\r\n\tRA4: [609.45, 864.57],\r\n\tSRA0: [2551.18, 3628.35],\r\n\tSRA1: [1814.17, 2551.18],\r\n\tSRA2: [1275.59, 1814.17],\r\n\tSRA3: [907.09, 1275.59],\r\n\tSRA4: [637.80, 907.09],\r\n\tEXECUTIVE: [521.86, 756.00],\r\n\tFOLIO: [612.00, 936.00],\r\n\tLEGAL: [612.00, 1008.00],\r\n\tLETTER: [612.00, 792.00],\r\n\tTABLOID: [792.00, 1224.00]\r\n};\r\n\n\n/***/ }),\n\n/***/ 7597:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2473895__) {\n\n\"use strict\";\n\r\n\r\nvar isString = (__nested_webpack_require_2473895__(6225).isString);\r\nvar isArray = (__nested_webpack_require_2473895__(6225).isArray);\r\nvar isUndefined = (__nested_webpack_require_2473895__(6225).isUndefined);\r\nvar isNull = (__nested_webpack_require_2473895__(6225).isNull);\r\n\r\n/**\r\n * Creates an instance of StyleContextStack used for style inheritance and style overrides\r\n *\r\n * @constructor\r\n * @this {StyleContextStack}\r\n * @param {Object} named styles dictionary\r\n * @param {Object} optional default style definition\r\n */\r\nfunction StyleContextStack(styleDictionary, defaultStyle) {\r\n\tthis.defaultStyle = defaultStyle || {};\r\n\tthis.styleDictionary = styleDictionary;\r\n\tthis.styleOverrides = [];\r\n}\r\n\r\n/**\r\n * Creates cloned version of current stack\r\n * @return {StyleContextStack} current stack snapshot\r\n */\r\nStyleContextStack.prototype.clone = function () {\r\n\tvar stack = new StyleContextStack(this.styleDictionary, this.defaultStyle);\r\n\r\n\tthis.styleOverrides.forEach(function (item) {\r\n\t\tstack.styleOverrides.push(item);\r\n\t});\r\n\r\n\treturn stack;\r\n};\r\n\r\n/**\r\n * Pushes style-name or style-overrides-object onto the stack for future evaluation\r\n *\r\n * @param {String|Object} styleNameOrOverride style-name (referring to styleDictionary) or\r\n * a new dictionary defining overriding properties\r\n */\r\nStyleContextStack.prototype.push = function (styleNameOrOverride) {\r\n\tthis.styleOverrides.push(styleNameOrOverride);\r\n};\r\n\r\n/**\r\n * Removes last style-name or style-overrides-object from the stack\r\n *\r\n * @param {Number} howMany - optional number of elements to be popped (if not specified,\r\n * one element will be removed from the stack)\r\n */\r\nStyleContextStack.prototype.pop = function (howMany) {\r\n\thowMany = howMany || 1;\r\n\r\n\twhile (howMany-- > 0) {\r\n\t\tthis.styleOverrides.pop();\r\n\t}\r\n};\r\n\r\n/**\r\n * Creates a set of named styles or/and a style-overrides-object based on the item,\r\n * pushes those elements onto the stack for future evaluation and returns the number\r\n * of elements pushed, so they can be easily poped then.\r\n *\r\n * @param {Object} item - an object with optional style property and/or style overrides\r\n * @return the number of items pushed onto the stack\r\n */\r\nStyleContextStack.prototype.autopush = function (item) {\r\n\tif (isString(item)) {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tvar styleNames = [];\r\n\r\n\tif (item.style) {\r\n\t\tif (isArray(item.style)) {\r\n\t\t\tstyleNames = item.style;\r\n\t\t} else {\r\n\t\t\tstyleNames = [item.style];\r\n\t\t}\r\n\t}\r\n\r\n\tfor (var i = 0, l = styleNames.length; i < l; i++) {\r\n\t\tthis.push(styleNames[i]);\r\n\t}\r\n\r\n\tvar styleProperties = [\r\n\t\t'font',\r\n\t\t'fontSize',\r\n\t\t'fontFeatures',\r\n\t\t'bold',\r\n\t\t'italics',\r\n\t\t'alignment',\r\n\t\t'color',\r\n\t\t'columnGap',\r\n\t\t'fillColor',\r\n\t\t'fillOpacity',\r\n\t\t'decoration',\r\n\t\t'decorationStyle',\r\n\t\t'decorationColor',\r\n\t\t'background',\r\n\t\t'lineHeight',\r\n\t\t'characterSpacing',\r\n\t\t'noWrap',\r\n\t\t'markerColor',\r\n\t\t'leadingIndent',\r\n\t\t'sup',\r\n\t\t'sub'\r\n\t\t//'tableCellPadding'\r\n\t\t// 'cellBorder',\r\n\t\t// 'headerCellBorder',\r\n\t\t// 'oddRowCellBorder',\r\n\t\t// 'evenRowCellBorder',\r\n\t\t// 'tableBorder'\r\n\t];\r\n\tvar styleOverrideObject = {};\r\n\tvar pushStyleOverrideObject = false;\r\n\r\n\tstyleProperties.forEach(function (key) {\r\n\t\tif (!isUndefined(item[key]) && !isNull(item[key])) {\r\n\t\t\tstyleOverrideObject[key] = item[key];\r\n\t\t\tpushStyleOverrideObject = true;\r\n\t\t}\r\n\t});\r\n\r\n\tif (pushStyleOverrideObject) {\r\n\t\tthis.push(styleOverrideObject);\r\n\t}\r\n\r\n\treturn styleNames.length + (pushStyleOverrideObject ? 1 : 0);\r\n};\r\n\r\n/**\r\n * Automatically pushes elements onto the stack, using autopush based on item,\r\n * executes callback and then pops elements back. Returns value returned by callback\r\n *\r\n * @param {Object} item - an object with optional style property and/or style overrides\r\n * @param {Function} function to be called between autopush and pop\r\n * @return {Object} value returned by callback\r\n */\r\nStyleContextStack.prototype.auto = function (item, callback) {\r\n\tvar pushedItems = this.autopush(item);\r\n\tvar result = callback();\r\n\r\n\tif (pushedItems > 0) {\r\n\t\tthis.pop(pushedItems);\r\n\t}\r\n\r\n\treturn result;\r\n};\r\n\r\n/**\r\n * Evaluates stack and returns value of a named property\r\n *\r\n * @param {String} property - property name\r\n * @return property value or null if not found\r\n */\r\nStyleContextStack.prototype.getProperty = function (property) {\r\n\tif (this.styleOverrides) {\r\n\t\tfor (var i = this.styleOverrides.length - 1; i >= 0; i--) {\r\n\t\t\tvar item = this.styleOverrides[i];\r\n\r\n\t\t\tif (isString(item)) {\r\n\t\t\t\t// named-style-override\r\n\t\t\t\tvar style = this.styleDictionary[item];\r\n\t\t\t\tif (style && !isUndefined(style[property]) && !isNull(style[property])) {\r\n\t\t\t\t\treturn style[property];\r\n\t\t\t\t}\r\n\t\t\t} else if (!isUndefined(item[property]) && !isNull(item[property])) {\r\n\t\t\t\t// style-overrides-object\r\n\t\t\t\treturn item[property];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn this.defaultStyle && this.defaultStyle[property];\r\n};\r\n\r\nmodule.exports = StyleContextStack;\r\n\n\n/***/ }),\n\n/***/ 7601:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2478907__) {\n\n\"use strict\";\n\r\n\r\nvar xmldoc = __nested_webpack_require_2478907__(6513);\r\n\r\n/** Strip unit postfix, parse number, but return undefined instead of NaN for bad input */\r\nfunction stripUnits(textVal) {\r\n\tvar n = parseFloat(textVal);\r\n\tif (typeof n !== 'number' || isNaN(n)) {\r\n\t\treturn undefined;\r\n\t}\r\n\treturn n;\r\n}\r\n\r\n/** Make sure it's valid XML and the root tage is <svg/>, returns xmldoc DOM */\r\nfunction parseSVG(svgString) {\r\n\tvar doc;\r\n\r\n\ttry {\r\n\t\tdoc = new xmldoc.XmlDocument(svgString);\r\n\t} catch (err) {\r\n\t\tthrow new Error('SVGMeasure: ' + err);\r\n\t}\r\n\r\n\tif (doc.name !== \"svg\") {\r\n\t\tthrow new Error('SVGMeasure: expected <svg> document');\r\n\t}\r\n\r\n\treturn doc;\r\n}\r\n\r\nfunction SVGMeasure() {\r\n}\r\n\r\nSVGMeasure.prototype.measureSVG = function (svgString) {\r\n\r\n\tvar doc = parseSVG(svgString);\r\n\r\n\tvar docWidth = stripUnits(doc.attr.width);\r\n\tvar docHeight = stripUnits(doc.attr.height);\r\n\r\n\tif ((docWidth == undefined || docHeight == undefined) && typeof doc.attr.viewBox == 'string') {\r\n\t\tvar viewBoxParts = doc.attr.viewBox.split(/[,\\s]+/);\r\n\t\tif (viewBoxParts.length !== 4) {\r\n\t\t\tthrow new Error(\"Unexpected svg viewbox format, should have 4 entries but found: '\" + doc.attr.viewBox + \"'\");\r\n\t\t}\r\n\t\tif (docWidth == undefined) {\r\n\t\t\tdocWidth = stripUnits(viewBoxParts[2]);\r\n\t\t}\r\n\t\tif (docHeight == undefined) {\r\n\t\t\tdocHeight = stripUnits(viewBoxParts[3]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\twidth: docWidth,\r\n\t\theight: docHeight\r\n\t};\r\n};\r\n\r\nSVGMeasure.prototype.writeDimensions = function (svgString, dimensions) {\r\n\r\n\tvar doc = parseSVG(svgString);\r\n\r\n\tdoc.attr.width = \"\" + dimensions.width;\r\n\tdoc.attr.height = \"\" + dimensions.height;\r\n\r\n\treturn doc.toString();\r\n};\r\n\r\nmodule.exports = SVGMeasure;\r\n\n\n/***/ }),\n\n/***/ 9342:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2480686__) {\n\n\"use strict\";\n\r\n\r\nvar ColumnCalculator = __nested_webpack_require_2480686__(4498);\r\nvar isFunction = (__nested_webpack_require_2480686__(6225).isFunction);\r\nvar isNumber = (__nested_webpack_require_2480686__(6225).isNumber);\r\n\r\nfunction TableProcessor(tableNode) {\r\n\tthis.tableNode = tableNode;\r\n}\r\n\r\nTableProcessor.prototype.beginTable = function (writer) {\r\n\tvar tableNode;\r\n\tvar availableWidth;\r\n\tvar self = this;\r\n\r\n\ttableNode = this.tableNode;\r\n\tthis.offsets = tableNode._offsets;\r\n\tthis.layout = tableNode._layout;\r\n\r\n\tavailableWidth = writer.context().availableWidth - this.offsets.total;\r\n\tColumnCalculator.buildColumnWidths(tableNode.table.widths, availableWidth);\r\n\r\n\tthis.tableWidth = tableNode._offsets.total + getTableInnerContentWidth();\r\n\tthis.rowSpanData = prepareRowSpanData();\r\n\tthis.cleanUpRepeatables = false;\r\n\r\n\tthis.headerRows = tableNode.table.headerRows || 0;\r\n\tthis.rowsWithoutPageBreak = this.headerRows + (tableNode.table.keepWithHeaderRows || 0);\r\n\tthis.dontBreakRows = tableNode.table.dontBreakRows || false;\r\n\r\n\tif (this.rowsWithoutPageBreak) {\r\n\t\twriter.beginUnbreakableBlock();\r\n\t}\r\n\r\n\t// update the border properties of all cells before drawing any lines\r\n\tprepareCellBorders(this.tableNode.table.body);\r\n\r\n\tthis.drawHorizontalLine(0, writer);\r\n\r\n\tfunction getTableInnerContentWidth() {\r\n\t\tvar width = 0;\r\n\r\n\t\ttableNode.table.widths.forEach(function (w) {\r\n\t\t\twidth += w._calcWidth;\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tfunction prepareRowSpanData() {\r\n\t\tvar rsd = [];\r\n\t\tvar x = 0;\r\n\t\tvar lastWidth = 0;\r\n\r\n\t\trsd.push({ left: 0, rowSpan: 0 });\r\n\r\n\t\tfor (var i = 0, l = self.tableNode.table.body[0].length; i < l; i++) {\r\n\t\t\tvar paddings = self.layout.paddingLeft(i, self.tableNode) + self.layout.paddingRight(i, self.tableNode);\r\n\t\t\tvar lBorder = self.layout.vLineWidth(i, self.tableNode);\r\n\t\t\tlastWidth = paddings + lBorder + self.tableNode.table.widths[i]._calcWidth;\r\n\t\t\trsd[rsd.length - 1].width = lastWidth;\r\n\t\t\tx += lastWidth;\r\n\t\t\trsd.push({ left: x, rowSpan: 0, width: 0 });\r\n\t\t}\r\n\r\n\t\treturn rsd;\r\n\t}\r\n\r\n\t// Iterate through all cells. If the current cell is the start of a\r\n\t// rowSpan/colSpan, update the border property of the cells on its\r\n\t// bottom/right accordingly. This is needed since each iteration of the\r\n\t// line-drawing loops draws lines for a single cell, not for an entire\r\n\t// rowSpan/colSpan.\r\n\tfunction prepareCellBorders(body) {\r\n\t\tfor (var rowIndex = 0; rowIndex < body.length; rowIndex++) {\r\n\t\t\tvar row = body[rowIndex];\r\n\r\n\t\t\tfor (var colIndex = 0; colIndex < row.length; colIndex++) {\r\n\t\t\t\tvar cell = row[colIndex];\r\n\r\n\t\t\t\tif (cell.border) {\r\n\t\t\t\t\tvar rowSpan = cell.rowSpan || 1;\r\n\t\t\t\t\tvar colSpan = cell.colSpan || 1;\r\n\r\n\t\t\t\t\tfor (var rowOffset = 0; rowOffset < rowSpan; rowOffset++) {\r\n\t\t\t\t\t\t// set left border\r\n\t\t\t\t\t\tif (cell.border[0] !== undefined && rowOffset > 0) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowOffset, colIndex, 0, cell.border[0]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// set right border\r\n\t\t\t\t\t\tif (cell.border[2] !== undefined) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowOffset, colIndex + colSpan - 1, 2, cell.border[2]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (var colOffset = 0; colOffset < colSpan; colOffset++) {\r\n\t\t\t\t\t\t// set top border\r\n\t\t\t\t\t\tif (cell.border[1] !== undefined && colOffset > 0) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex, colIndex + colOffset, 1, cell.border[1]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// set bottom border\r\n\t\t\t\t\t\tif (cell.border[3] !== undefined) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowSpan - 1, colIndex + colOffset, 3, cell.border[3]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// helper function to set the border for a given cell\r\n\t\tfunction setBorder(rowIndex, colIndex, borderIndex, borderValue) {\r\n\t\t\tvar cell = body[rowIndex][colIndex];\r\n\t\t\tcell.border = cell.border || {};\r\n\t\t\tcell.border[borderIndex] = borderValue;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nTableProcessor.prototype.onRowBreak = function (rowIndex, writer) {\r\n\tvar self = this;\r\n\treturn function () {\r\n\t\tvar offset = self.rowPaddingTop + (!self.headerRows ? self.topLineWidth : 0);\r\n\t\twriter.context().availableHeight -= self.reservedAtBottom;\r\n\t\twriter.context().moveDown(offset);\r\n\t};\r\n};\r\n\r\nTableProcessor.prototype.beginRow = function (rowIndex, writer) {\r\n\tthis.topLineWidth = this.layout.hLineWidth(rowIndex, this.tableNode);\r\n\tthis.rowPaddingTop = this.layout.paddingTop(rowIndex, this.tableNode);\r\n\tthis.bottomLineWidth = this.layout.hLineWidth(rowIndex + 1, this.tableNode);\r\n\tthis.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode);\r\n\r\n\tthis.rowCallback = this.onRowBreak(rowIndex, writer);\r\n\twriter.tracker.startTracking('pageChanged', this.rowCallback);\r\n\tif (this.dontBreakRows) {\r\n\t\twriter.beginUnbreakableBlock();\r\n\t}\r\n\tthis.rowTopY = writer.context().y;\r\n\tthis.reservedAtBottom = this.bottomLineWidth + this.rowPaddingBottom;\r\n\r\n\twriter.context().availableHeight -= this.reservedAtBottom;\r\n\r\n\twriter.context().moveDown(this.rowPaddingTop);\r\n};\r\n\r\nTableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overrideY) {\r\n\tvar lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);\r\n\tif (lineWidth) {\r\n\t\tvar style = this.layout.hLineStyle(lineIndex, this.tableNode);\r\n\t\tvar dash;\r\n\t\tif (style && style.dash) {\r\n\t\t\tdash = style.dash;\r\n\t\t}\r\n\r\n\t\tvar offset = lineWidth / 2;\r\n\t\tvar currentLine = null;\r\n\t\tvar body = this.tableNode.table.body;\r\n\t\tvar cellAbove;\r\n\t\tvar currentCell;\r\n\t\tvar rowCellAbove;\r\n\r\n\t\tfor (var i = 0, l = this.rowSpanData.length; i < l; i++) {\r\n\t\t\tvar data = this.rowSpanData[i];\r\n\t\t\tvar shouldDrawLine = !data.rowSpan;\r\n\t\t\tvar borderColor = null;\r\n\r\n\t\t\t// draw only if the current cell requires a top border or the cell in the\r\n\t\t\t// row above requires a bottom border\r\n\t\t\tif (shouldDrawLine && i < l - 1) {\r\n\t\t\t\tvar topBorder = false, bottomBorder = false, rowBottomBorder = false;\r\n\r\n\t\t\t\t// the cell in the row above\r\n\t\t\t\tif (lineIndex > 0) {\r\n\t\t\t\t\tcellAbove = body[lineIndex - 1][i];\r\n\t\t\t\t\tbottomBorder = cellAbove.border ? cellAbove.border[3] : this.layout.defaultBorder;\r\n\t\t\t\t\tif (bottomBorder && cellAbove.borderColor) {\r\n\t\t\t\t\t\tborderColor = cellAbove.borderColor[3];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// the current cell\r\n\t\t\t\tif (lineIndex < body.length) {\r\n\t\t\t\t\tcurrentCell = body[lineIndex][i];\r\n\t\t\t\t\ttopBorder = currentCell.border ? currentCell.border[1] : this.layout.defaultBorder;\r\n\t\t\t\t\tif (topBorder && borderColor == null && currentCell.borderColor) {\r\n\t\t\t\t\t\tborderColor = currentCell.borderColor[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tshouldDrawLine = topBorder || bottomBorder;\r\n\t\t\t}\r\n\r\n\t\t\tif (cellAbove && cellAbove._rowSpanCurrentOffset) {\r\n\t\t\t\trowCellAbove = body[lineIndex - 1 - cellAbove._rowSpanCurrentOffset][i];\r\n\t\t\t\trowBottomBorder = rowCellAbove && rowCellAbove.border ? rowCellAbove.border[3] : this.layout.defaultBorder;\r\n\t\t\t\tif (rowBottomBorder && rowCellAbove && rowCellAbove.borderColor) {\r\n\t\t\t\t\tborderColor = rowCellAbove.borderColor[3];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (borderColor == null) {\r\n\t\t\t\tborderColor = isFunction(this.layout.hLineColor) ? this.layout.hLineColor(lineIndex, this.tableNode, i) : this.layout.hLineColor;\r\n\t\t\t}\r\n\r\n\t\t\tif (!currentLine && shouldDrawLine) {\r\n\t\t\t\tcurrentLine = { left: data.left, width: 0 };\r\n\t\t\t}\r\n\r\n\t\t\tif (shouldDrawLine) {\r\n\t\t\t\tvar colSpanIndex = 0;\r\n\t\t\t\tif (rowCellAbove && rowCellAbove.colSpan && rowBottomBorder) {\r\n\t\t\t\t\twhile (rowCellAbove.colSpan > colSpanIndex) {\r\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti += colSpanIndex - 1;\r\n\t\t\t\t} else if (cellAbove && cellAbove.colSpan && bottomBorder) {\r\n\t\t\t\t\twhile (cellAbove.colSpan > colSpanIndex) {\r\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti += colSpanIndex - 1;\r\n\t\t\t\t} else if (currentCell && currentCell.colSpan && topBorder) {\r\n\t\t\t\t\twhile (currentCell.colSpan > colSpanIndex) {\r\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti += colSpanIndex - 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i].width || 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar y = (overrideY || 0) + offset;\r\n\r\n\r\n\t\t\tif (shouldDrawLine) {\r\n\t\t\t\tif (currentLine && currentLine.width) {\r\n\t\t\t\t\twriter.addVector({\r\n\t\t\t\t\t\ttype: 'line',\r\n\t\t\t\t\t\tx1: currentLine.left,\r\n\t\t\t\t\t\tx2: currentLine.left + currentLine.width,\r\n\t\t\t\t\t\ty1: y,\r\n\t\t\t\t\t\ty2: y,\r\n\t\t\t\t\t\tlineWidth: lineWidth,\r\n\t\t\t\t\t\tdash: dash,\r\n\t\t\t\t\t\tlineColor: borderColor\r\n\t\t\t\t\t}, false, overrideY);\r\n\t\t\t\t\tcurrentLine = null;\r\n\t\t\t\t\tborderColor = null;\r\n\t\t\t\t\tcellAbove = null;\r\n\t\t\t\t\tcurrentCell = null;\r\n\t\t\t\t\trowCellAbove = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\twriter.context().moveDown(lineWidth);\r\n\t}\r\n};\r\n\r\nTableProcessor.prototype.drawVerticalLine = function (x, y0, y1, vLineColIndex, writer, vLineRowIndex, beforeVLineColIndex) {\r\n\tvar width = this.layout.vLineWidth(vLineColIndex, this.tableNode);\r\n\tif (width === 0) {\r\n\t\treturn;\r\n\t}\r\n\tvar style = this.layout.vLineStyle(vLineColIndex, this.tableNode);\r\n\tvar dash;\r\n\tif (style && style.dash) {\r\n\t\tdash = style.dash;\r\n\t}\r\n\r\n\tvar body = this.tableNode.table.body;\r\n\tvar cellBefore;\r\n\tvar currentCell;\r\n\tvar borderColor;\r\n\r\n\t// the cell in the col before\r\n\tif (vLineColIndex > 0) {\r\n\t\tcellBefore = body[vLineRowIndex][beforeVLineColIndex];\r\n\t\tif (cellBefore && cellBefore.borderColor) {\r\n\t\t\tif (cellBefore.border ? cellBefore.border[2] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = cellBefore.borderColor[2];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// the current cell\r\n\tif (borderColor == null && vLineColIndex < body.length) {\r\n\t\tcurrentCell = body[vLineRowIndex][vLineColIndex];\r\n\t\tif (currentCell && currentCell.borderColor) {\r\n\t\t\tif (currentCell.border ? currentCell.border[0] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = currentCell.borderColor[0];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (borderColor == null && cellBefore && cellBefore._rowSpanCurrentOffset) {\r\n\t\tvar rowCellBeforeAbove = body[vLineRowIndex - cellBefore._rowSpanCurrentOffset][beforeVLineColIndex];\r\n\t\tif (rowCellBeforeAbove.borderColor) {\r\n\t\t\tif (rowCellBeforeAbove.border ? rowCellBeforeAbove.border[2] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = rowCellBeforeAbove.borderColor[2];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (borderColor == null && currentCell && currentCell._rowSpanCurrentOffset) {\r\n\t\tvar rowCurrentCellAbove = body[vLineRowIndex - currentCell._rowSpanCurrentOffset][vLineColIndex];\r\n\t\tif (rowCurrentCellAbove.borderColor) {\r\n\t\t\tif (rowCurrentCellAbove.border ? rowCurrentCellAbove.border[2] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = rowCurrentCellAbove.borderColor[2];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (borderColor == null) {\r\n\t\tborderColor = isFunction(this.layout.vLineColor) ? this.layout.vLineColor(vLineColIndex, this.tableNode, vLineRowIndex) : this.layout.vLineColor;\r\n\t}\r\n\twriter.addVector({\r\n\t\ttype: 'line',\r\n\t\tx1: x + width / 2,\r\n\t\tx2: x + width / 2,\r\n\t\ty1: y0,\r\n\t\ty2: y1,\r\n\t\tlineWidth: width,\r\n\t\tdash: dash,\r\n\t\tlineColor: borderColor\r\n\t}, false, true);\r\n\tcellBefore = null;\r\n\tcurrentCell = null;\r\n\tborderColor = null;\r\n};\r\n\r\nTableProcessor.prototype.endTable = function (writer) {\r\n\tif (this.cleanUpRepeatables) {\r\n\t\twriter.popFromRepeatables();\r\n\t}\r\n};\r\n\r\nTableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {\r\n\tvar l, i;\r\n\tvar self = this;\r\n\twriter.tracker.stopTracking('pageChanged', this.rowCallback);\r\n\twriter.context().moveDown(this.layout.paddingBottom(rowIndex, this.tableNode));\r\n\twriter.context().availableHeight += this.reservedAtBottom;\r\n\r\n\tvar endingPage = writer.context().page;\r\n\tvar endingY = writer.context().y;\r\n\r\n\tvar xs = getLineXs();\r\n\r\n\tvar ys = [];\r\n\r\n\tvar hasBreaks = pageBreaks && pageBreaks.length > 0;\r\n\tvar body = this.tableNode.table.body;\r\n\r\n\tys.push({\r\n\t\ty0: this.rowTopY,\r\n\t\tpage: hasBreaks ? pageBreaks[0].prevPage : endingPage\r\n\t});\r\n\r\n\tif (hasBreaks) {\r\n\t\tfor (i = 0, l = pageBreaks.length; i < l; i++) {\r\n\t\t\tvar pageBreak = pageBreaks[i];\r\n\t\t\tys[ys.length - 1].y1 = pageBreak.prevY;\r\n\r\n\t\t\tys.push({ y0: pageBreak.y, page: pageBreak.prevPage + 1 });\r\n\t\t}\r\n\t}\r\n\r\n\tys[ys.length - 1].y1 = endingY;\r\n\r\n\tvar skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop);\r\n\tfor (var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) {\r\n\t\tvar willBreak = yi < ys.length - 1;\r\n\t\tvar rowBreakWithoutHeader = (yi > 0 && !this.headerRows);\r\n\t\tvar hzLineOffset = rowBreakWithoutHeader ? 0 : this.topLineWidth;\r\n\t\tvar y1 = ys[yi].y0;\r\n\t\tvar y2 = ys[yi].y1;\r\n\r\n\t\tif (willBreak) {\r\n\t\t\ty2 = y2 + this.rowPaddingBottom;\r\n\t\t}\r\n\r\n\t\tif (writer.context().page != ys[yi].page) {\r\n\t\t\twriter.context().page = ys[yi].page;\r\n\r\n\t\t\t//TODO: buggy, availableHeight should be updated on every pageChanged event\r\n\t\t\t// TableProcessor should be pageChanged listener, instead of processRow\r\n\t\t\tthis.reservedAtBottom = 0;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, l = xs.length; i < l; i++) {\r\n\t\t\tvar leftCellBorder = false;\r\n\t\t\tvar rightCellBorder = false;\r\n\t\t\tvar colIndex = xs[i].index;\r\n\r\n\t\t\t// current cell\r\n\t\t\tif (colIndex < body[rowIndex].length) {\r\n\t\t\t\tvar cell = body[rowIndex][colIndex];\r\n\t\t\t\tleftCellBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;\r\n\t\t\t\trightCellBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;\r\n\t\t\t}\r\n\r\n\t\t\t// before cell\r\n\t\t\tif (colIndex > 0 && !leftCellBorder) {\r\n\t\t\t\tvar cell = body[rowIndex][colIndex - 1];\r\n\t\t\t\tleftCellBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;\r\n\t\t\t}\r\n\r\n\t\t\t// after cell\r\n\t\t\tif (colIndex + 1 < body[rowIndex].length && !rightCellBorder) {\r\n\t\t\t\tvar cell = body[rowIndex][colIndex + 1];\r\n\t\t\t\trightCellBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;\r\n\t\t\t}\r\n\r\n\t\t\tif (leftCellBorder) {\r\n\t\t\t\tthis.drawVerticalLine(xs[i].x, y1 - hzLineOffset, y2 + this.bottomLineWidth, xs[i].index, writer, rowIndex, xs[i - 1] ? xs[i - 1].index : null);\r\n\t\t\t}\r\n\r\n\t\t\tif (i < l - 1) {\r\n\t\t\t\tvar fillColor = body[rowIndex][colIndex].fillColor;\r\n\t\t\t\tvar fillOpacity = body[rowIndex][colIndex].fillOpacity;\r\n\t\t\t\tif (!fillColor) {\r\n\t\t\t\t\tfillColor = isFunction(this.layout.fillColor) ? this.layout.fillColor(rowIndex, this.tableNode, colIndex) : this.layout.fillColor;\r\n\t\t\t\t}\r\n\t\t\t\tif (!isNumber(fillOpacity)) {\r\n\t\t\t\t\tfillOpacity = isFunction(this.layout.fillOpacity) ? this.layout.fillOpacity(rowIndex, this.tableNode, colIndex) : this.layout.fillOpacity;\r\n\t\t\t\t}\r\n\t\t\t\tvar overlayPattern = body[rowIndex][colIndex].overlayPattern;\r\n\t\t\t\tvar overlayOpacity = body[rowIndex][colIndex].overlayOpacity;\r\n\t\t\t\tif (fillColor || overlayPattern) {\r\n\t\t\t\t\tvar widthLeftBorder = leftCellBorder ? this.layout.vLineWidth(colIndex, this.tableNode) : 0;\r\n\t\t\t\t\tvar widthRightBorder;\r\n\t\t\t\t\tif ((colIndex === 0 || colIndex + 1 == body[rowIndex].length) && !rightCellBorder) {\r\n\t\t\t\t\t\twidthRightBorder = this.layout.vLineWidth(colIndex + 1, this.tableNode);\r\n\t\t\t\t\t} else if (rightCellBorder) {\r\n\t\t\t\t\t\twidthRightBorder = this.layout.vLineWidth(colIndex + 1, this.tableNode) / 2;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twidthRightBorder = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar x1f = this.dontBreakRows ? xs[i].x + widthLeftBorder : xs[i].x + (widthLeftBorder / 2);\r\n\t\t\t\t\tvar y1f = this.dontBreakRows ? y1 : y1 - (hzLineOffset / 2);\r\n\t\t\t\t\tvar x2f = xs[i + 1].x + widthRightBorder;\r\n\t\t\t\t\tvar y2f = this.dontBreakRows ? y2 + this.bottomLineWidth : y2 + (this.bottomLineWidth / 2);\r\n\t\t\t\t\tvar bgWidth = x2f - x1f;\r\n\t\t\t\t\tvar bgHeight = y2f - y1f;\r\n\t\t\t\t\tif (fillColor) {\r\n\t\t\t\t\t\twriter.addVector({\r\n\t\t\t\t\t\t\ttype: 'rect',\r\n\t\t\t\t\t\t\tx: x1f,\r\n\t\t\t\t\t\t\ty: y1f,\r\n\t\t\t\t\t\t\tw: bgWidth,\r\n\t\t\t\t\t\t\th: bgHeight,\r\n\t\t\t\t\t\t\tlineWidth: 0,\r\n\t\t\t\t\t\t\tcolor: fillColor,\r\n\t\t\t\t\t\t\tfillOpacity: fillOpacity\r\n\t\t\t\t\t\t}, false, true, writer.context().backgroundLength[writer.context().page]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (overlayPattern) {\r\n\t\t\t\t\t\twriter.addVector({\r\n\t\t\t\t\t\t\ttype: 'rect',\r\n\t\t\t\t\t\t\tx: x1f,\r\n\t\t\t\t\t\t\ty: y1f,\r\n\t\t\t\t\t\t\tw: bgWidth,\r\n\t\t\t\t\t\t\th: bgHeight,\r\n\t\t\t\t\t\t\tlineWidth: 0,\r\n\t\t\t\t\t\t\tcolor: overlayPattern,\r\n\t\t\t\t\t\t\tfillOpacity: overlayOpacity\r\n\t\t\t\t\t\t}, false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (willBreak && this.layout.hLineWhenBroken !== false) {\r\n\t\t\tthis.drawHorizontalLine(rowIndex + 1, writer, y2);\r\n\t\t}\r\n\t\tif (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {\r\n\t\t\tthis.drawHorizontalLine(rowIndex, writer, y1);\r\n\t\t}\r\n\t}\r\n\r\n\twriter.context().page = endingPage;\r\n\twriter.context().y = endingY;\r\n\r\n\tvar row = this.tableNode.table.body[rowIndex];\r\n\tfor (i = 0, l = row.length; i < l; i++) {\r\n\t\tif (row[i].rowSpan) {\r\n\t\t\tthis.rowSpanData[i].rowSpan = row[i].rowSpan;\r\n\r\n\t\t\t// fix colSpans\r\n\t\t\tif (row[i].colSpan && row[i].colSpan > 1) {\r\n\t\t\t\tfor (var j = 1; j < row[i].rowSpan; j++) {\r\n\t\t\t\t\tthis.tableNode.table.body[rowIndex + j][i]._colSpan = row[i].colSpan;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// fix rowSpans\r\n\t\t\tif (row[i].rowSpan && row[i].rowSpan > 1) {\r\n\t\t\t\tfor (var j = 1; j < row[i].rowSpan; j++) {\r\n\t\t\t\t\tthis.tableNode.table.body[rowIndex + j][i]._rowSpanCurrentOffset = j;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.rowSpanData[i].rowSpan > 0) {\r\n\t\t\tthis.rowSpanData[i].rowSpan--;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.drawHorizontalLine(rowIndex + 1, writer);\r\n\r\n\tif (this.headerRows && rowIndex === this.headerRows - 1) {\r\n\t\tthis.headerRepeatable = writer.currentBlockToRepeatable();\r\n\t}\r\n\r\n\tif (this.dontBreakRows) {\r\n\t\twriter.tracker.auto('pageChanged',\r\n\t\t\tfunction () {\r\n\t\t\t\tif (!self.headerRows && self.layout.hLineWhenBroken !== false) {\r\n\t\t\t\t\tself.drawHorizontalLine(rowIndex, writer);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction () {\r\n\t\t\t\twriter.commitUnbreakableBlock();\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tif (this.headerRepeatable && (rowIndex === (this.rowsWithoutPageBreak - 1) || rowIndex === this.tableNode.table.body.length - 1)) {\r\n\t\twriter.commitUnbreakableBlock();\r\n\t\twriter.pushToRepeatables(this.headerRepeatable);\r\n\t\tthis.cleanUpRepeatables = true;\r\n\t\tthis.headerRepeatable = null;\r\n\t}\r\n\r\n\tfunction getLineXs() {\r\n\t\tvar result = [];\r\n\t\tvar cols = 0;\r\n\r\n\t\tfor (var i = 0, l = self.tableNode.table.body[rowIndex].length; i < l; i++) {\r\n\t\t\tif (!cols) {\r\n\t\t\t\tresult.push({ x: self.rowSpanData[i].left, index: i });\r\n\r\n\t\t\t\tvar item = self.tableNode.table.body[rowIndex][i];\r\n\t\t\t\tcols = (item._colSpan || item.colSpan || 0);\r\n\t\t\t}\r\n\t\t\tif (cols > 0) {\r\n\t\t\t\tcols--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult.push({ x: self.rowSpanData[self.rowSpanData.length - 1].left, index: self.rowSpanData.length - 1 });\r\n\r\n\t\treturn result;\r\n\t}\r\n};\r\n\r\nmodule.exports = TableProcessor;\r\n\n\n/***/ }),\n\n/***/ 3497:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2498801__) {\n\n\"use strict\";\n\r\n\r\nvar isArray = (__nested_webpack_require_2498801__(6225).isArray);\r\nvar isPattern = (__nested_webpack_require_2498801__(6225).isPattern);\r\nvar getPattern = (__nested_webpack_require_2498801__(6225).getPattern);\r\n\r\nfunction groupDecorations(line) {\r\n\tvar groups = [], currentGroup = null;\r\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\tvar inline = line.inlines[i];\r\n\t\tvar decoration = inline.decoration;\r\n\t\tif (!decoration) {\r\n\t\t\tcurrentGroup = null;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (!isArray(decoration)) {\r\n\t\t\tdecoration = [decoration];\r\n\t\t}\r\n\t\tvar color = inline.decorationColor || inline.color || 'black';\r\n\t\tvar style = inline.decorationStyle || 'solid';\r\n\t\tfor (var ii = 0, ll = decoration.length; ii < ll; ii++) {\r\n\t\t\tvar decorationItem = decoration[ii];\r\n\t\t\tif (!currentGroup || decorationItem !== currentGroup.decoration ||\r\n\t\t\t\tstyle !== currentGroup.decorationStyle || color !== currentGroup.decorationColor) {\r\n\r\n\t\t\t\tcurrentGroup = {\r\n\t\t\t\t\tline: line,\r\n\t\t\t\t\tdecoration: decorationItem,\r\n\t\t\t\t\tdecorationColor: color,\r\n\t\t\t\t\tdecorationStyle: style,\r\n\t\t\t\t\tinlines: [inline]\r\n\t\t\t\t};\r\n\t\t\t\tgroups.push(currentGroup);\r\n\t\t\t} else {\r\n\t\t\t\tcurrentGroup.inlines.push(inline);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn groups;\r\n}\r\n\r\nfunction drawDecoration(group, x, y, pdfKitDoc) {\r\n\tfunction maxInline() {\r\n\t\tvar max = 0;\r\n\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\r\n\t\t\tvar inline = group.inlines[i];\r\n\t\t\tmax = inline.fontSize > max ? i : max;\r\n\t\t}\r\n\t\treturn group.inlines[max];\r\n\t}\r\n\tfunction width() {\r\n\t\tvar sum = 0;\r\n\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\r\n\t\t\tvar justifyShift = (group.inlines[i].justifyShift || 0);\r\n\t\t\tsum += group.inlines[i].width + justifyShift;\r\n\t\t}\r\n\t\treturn sum;\r\n\t}\r\n\tvar firstInline = group.inlines[0],\r\n\t\tbiggerInline = maxInline(),\r\n\t\ttotalWidth = width(),\r\n\t\tlineAscent = group.line.getAscenderHeight(),\r\n\t\tascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize,\r\n\t\theight = biggerInline.height,\r\n\t\tdescent = height - ascent;\r\n\r\n\tvar lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12;\r\n\r\n\tswitch (group.decoration) {\r\n\t\tcase 'underline':\r\n\t\t\ty += lineAscent + descent * 0.45;\r\n\t\t\tbreak;\r\n\t\tcase 'overline':\r\n\t\t\ty += lineAscent - (ascent * 0.85);\r\n\t\t\tbreak;\r\n\t\tcase 'lineThrough':\r\n\t\t\ty += lineAscent - (ascent * 0.25);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow 'Unkown decoration : ' + group.decoration;\r\n\t}\r\n\tpdfKitDoc.save();\r\n\r\n\tif (group.decorationStyle === 'double') {\r\n\t\tvar gap = Math.max(0.5, lw * 2);\r\n\t\tpdfKitDoc.fillColor(group.decorationColor)\r\n\t\t\t.rect(x + firstInline.x, y - lw / 2, totalWidth, lw / 2).fill()\r\n\t\t\t.rect(x + firstInline.x, y + gap - lw / 2, totalWidth, lw / 2).fill();\r\n\t} else if (group.decorationStyle === 'dashed') {\r\n\t\tvar nbDashes = Math.ceil(totalWidth / (3.96 + 2.84));\r\n\t\tvar rdx = x + firstInline.x;\r\n\t\tpdfKitDoc.rect(rdx, y, totalWidth, lw).clip();\r\n\t\tpdfKitDoc.fillColor(group.decorationColor);\r\n\t\tfor (var i = 0; i < nbDashes; i++) {\r\n\t\t\tpdfKitDoc.rect(rdx, y - lw / 2, 3.96, lw).fill();\r\n\t\t\trdx += 3.96 + 2.84;\r\n\t\t}\r\n\t} else if (group.decorationStyle === 'dotted') {\r\n\t\tvar nbDots = Math.ceil(totalWidth / (lw * 3));\r\n\t\tvar rx = x + firstInline.x;\r\n\t\tpdfKitDoc.rect(rx, y, totalWidth, lw).clip();\r\n\t\tpdfKitDoc.fillColor(group.decorationColor);\r\n\t\tfor (var ii = 0; ii < nbDots; ii++) {\r\n\t\t\tpdfKitDoc.rect(rx, y - lw / 2, lw, lw).fill();\r\n\t\t\trx += (lw * 3);\r\n\t\t}\r\n\t} else if (group.decorationStyle === 'wavy') {\r\n\t\tvar sh = 0.7, sv = 1;\r\n\t\tvar nbWaves = Math.ceil(totalWidth / (sh * 2)) + 1;\r\n\t\tvar rwx = x + firstInline.x - 1;\r\n\t\tpdfKitDoc.rect(x + firstInline.x, y - sv, totalWidth, y + sv).clip();\r\n\t\tpdfKitDoc.lineWidth(0.24);\r\n\t\tpdfKitDoc.moveTo(rwx, y);\r\n\t\tfor (var iii = 0; iii < nbWaves; iii++) {\r\n\t\t\tpdfKitDoc.bezierCurveTo(rwx + sh, y - sv, rwx + sh * 2, y - sv, rwx + sh * 3, y)\r\n\t\t\t\t.bezierCurveTo(rwx + sh * 4, y + sv, rwx + sh * 5, y + sv, rwx + sh * 6, y);\r\n\t\t\trwx += sh * 6;\r\n\t\t}\r\n\t\tpdfKitDoc.stroke(group.decorationColor);\r\n\t} else {\r\n\t\tpdfKitDoc.fillColor(group.decorationColor)\r\n\t\t\t.rect(x + firstInline.x, y - lw / 2, totalWidth, lw)\r\n\t\t\t.fill();\r\n\t}\r\n\tpdfKitDoc.restore();\r\n}\r\n\r\nfunction drawDecorations(line, x, y, pdfKitDoc) {\r\n\tvar groups = groupDecorations(line);\r\n\tfor (var i = 0, l = groups.length; i < l; i++) {\r\n\t\tdrawDecoration(groups[i], x, y, pdfKitDoc);\r\n\t}\r\n}\r\n\r\nfunction drawBackground(line, x, y, patterns, pdfKitDoc) {\r\n\tvar height = line.getHeight();\r\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\tvar inline = line.inlines[i];\r\n\t\tif (!inline.background) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tvar color = inline.background;\r\n\t\tif (isPattern(inline.background)) {\r\n\t\t\tcolor = getPattern(inline.background, patterns);\r\n\t\t}\r\n\t\tvar justifyShift = (inline.justifyShift || 0);\r\n\t\tpdfKitDoc.fillColor(color)\r\n\t\t\t.rect(x + inline.x - justifyShift, y, inline.width + justifyShift, height)\r\n\t\t\t.fill();\r\n\t}\r\n}\r\n\r\nmodule.exports = {\r\n\tdrawBackground: drawBackground,\r\n\tdrawDecorations: drawDecorations\r\n};\r\n\n\n/***/ }),\n\n/***/ 1350:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2503829__) {\n\n\"use strict\";\n\r\n\r\nvar isString = (__nested_webpack_require_2503829__(6225).isString);\r\nvar isNumber = (__nested_webpack_require_2503829__(6225).isNumber);\r\nvar isObject = (__nested_webpack_require_2503829__(6225).isObject);\r\nvar isArray = (__nested_webpack_require_2503829__(6225).isArray);\r\nvar isUndefined = (__nested_webpack_require_2503829__(6225).isUndefined);\r\nvar LineBreaker = __nested_webpack_require_2503829__(7337);\r\n\r\nvar LEADING = /^(\\s)+/g;\r\nvar TRAILING = /(\\s)+$/g;\r\n\r\n/**\r\n * Creates an instance of TextTools - text measurement utility\r\n *\r\n * @constructor\r\n * @param {FontProvider} fontProvider\r\n */\r\nfunction TextTools(fontProvider) {\r\n\tthis.fontProvider = fontProvider;\r\n}\r\n\r\n/**\r\n * Converts an array of strings (or inline-definition-objects) into a collection\r\n * of inlines and calculated minWidth/maxWidth.\r\n * and their min/max widths\r\n * @param {Object} textArray - an array of inline-definition-objects (or strings)\r\n * @param {Object} styleContextStack current style stack\r\n * @return {Object} collection of inlines, minWidth, maxWidth\r\n */\r\nTextTools.prototype.buildInlines = function (textArray, styleContextStack) {\r\n\tvar measured = measure(this.fontProvider, textArray, styleContextStack);\r\n\r\n\tvar minWidth = 0,\r\n\t\tmaxWidth = 0,\r\n\t\tcurrentLineWidth;\r\n\r\n\tmeasured.forEach(function (inline) {\r\n\t\tminWidth = Math.max(minWidth, inline.width - inline.leadingCut - inline.trailingCut);\r\n\r\n\t\tif (!currentLineWidth) {\r\n\t\t\tcurrentLineWidth = { width: 0, leadingCut: inline.leadingCut, trailingCut: 0 };\r\n\t\t}\r\n\r\n\t\tcurrentLineWidth.width += inline.width;\r\n\t\tcurrentLineWidth.trailingCut = inline.trailingCut;\r\n\r\n\t\tmaxWidth = Math.max(maxWidth, getTrimmedWidth(currentLineWidth));\r\n\r\n\t\tif (inline.lineEnd) {\r\n\t\t\tcurrentLineWidth = null;\r\n\t\t}\r\n\t});\r\n\r\n\tif (getStyleProperty({}, styleContextStack, 'noWrap', false)) {\r\n\t\tminWidth = maxWidth;\r\n\t}\r\n\r\n\treturn {\r\n\t\titems: measured,\r\n\t\tminWidth: minWidth,\r\n\t\tmaxWidth: maxWidth\r\n\t};\r\n\r\n\tfunction getTrimmedWidth(item) {\r\n\t\treturn Math.max(0, item.width - item.leadingCut - item.trailingCut);\r\n\t}\r\n};\r\n\r\n/**\r\n * Returns size of the specified string (without breaking it) using the current style\r\n * @param {String} text text to be measured\r\n * @param {Object} styleContextStack current style stack\r\n * @return {Object} size of the specified string\r\n */\r\nTextTools.prototype.sizeOfString = function (text, styleContextStack) {\r\n\ttext = text ? text.toString().replace(/\\t/g, ' ') : '';\r\n\r\n\t//TODO: refactor - extract from measure\r\n\tvar fontName = getStyleProperty({}, styleContextStack, 'font', 'Roboto');\r\n\tvar fontSize = getStyleProperty({}, styleContextStack, 'fontSize', 12);\r\n\tvar fontFeatures = getStyleProperty({}, styleContextStack, 'fontFeatures', null);\r\n\tvar bold = getStyleProperty({}, styleContextStack, 'bold', false);\r\n\tvar italics = getStyleProperty({}, styleContextStack, 'italics', false);\r\n\tvar lineHeight = getStyleProperty({}, styleContextStack, 'lineHeight', 1);\r\n\tvar characterSpacing = getStyleProperty({}, styleContextStack, 'characterSpacing', 0);\r\n\r\n\tvar font = this.fontProvider.provideFont(fontName, bold, italics);\r\n\r\n\treturn {\r\n\t\twidth: widthOfString(text, font, fontSize, characterSpacing, fontFeatures),\r\n\t\theight: font.lineHeight(fontSize) * lineHeight,\r\n\t\tfontSize: fontSize,\r\n\t\tlineHeight: lineHeight,\r\n\t\tascender: font.ascender / 1000 * fontSize,\r\n\t\tdescender: font.descender / 1000 * fontSize\r\n\t};\r\n};\r\n\r\n/**\r\n * Returns size of the specified rotated string (without breaking it) using the current style\r\n *\r\n * @param {string} text text to be measured\r\n * @param {number} angle\r\n * @param {object} styleContextStack current style stack\r\n * @returns {object} size of the specified string\r\n */\r\nTextTools.prototype.sizeOfRotatedText = function (text, angle, styleContextStack) {\r\n\tvar angleRad = angle * Math.PI / -180;\r\n\tvar size = this.sizeOfString(text, styleContextStack);\r\n\treturn {\r\n\t\twidth: Math.abs(size.height * Math.sin(angleRad)) + Math.abs(size.width * Math.cos(angleRad)),\r\n\t\theight: Math.abs(size.width * Math.sin(angleRad)) + Math.abs(size.height * Math.cos(angleRad))\r\n\t};\r\n}\r\n\r\nTextTools.prototype.widthOfString = function (text, font, fontSize, characterSpacing, fontFeatures) {\r\n\treturn widthOfString(text, font, fontSize, characterSpacing, fontFeatures);\r\n};\r\n\r\nfunction splitWords(text, noWrap) {\r\n\tvar results = [];\r\n\ttext = text.replace(/\\t/g, ' ');\r\n\r\n\tif (noWrap) {\r\n\t\tresults.push({ text: text });\r\n\t\treturn results;\r\n\t}\r\n\r\n\tvar breaker = new LineBreaker(text);\r\n\tvar last = 0;\r\n\tvar bk;\r\n\r\n\twhile (bk = breaker.nextBreak()) {\r\n\t\tvar word = text.slice(last, bk.position);\r\n\r\n\t\tif (bk.required || word.match(/\\r?\\n$|\\r$/)) { // new line\r\n\t\t\tword = word.replace(/\\r?\\n$|\\r$/, '');\r\n\t\t\tresults.push({ text: word, lineEnd: true });\r\n\t\t} else {\r\n\t\t\tresults.push({ text: word });\r\n\t\t}\r\n\r\n\t\tlast = bk.position;\r\n\t}\r\n\r\n\treturn results;\r\n}\r\n\r\nfunction copyStyle(source, destination) {\r\n\tdestination = destination || {};\r\n\tsource = source || {}; //TODO: default style\r\n\r\n\tfor (var key in source) {\r\n\t\tif (key != 'text' && source.hasOwnProperty(key)) {\r\n\t\t\tdestination[key] = source[key];\r\n\t\t}\r\n\t}\r\n\r\n\treturn destination;\r\n}\r\n\r\nfunction normalizeTextArray(array, styleContextStack) {\r\n\tfunction flatten(array) {\r\n\t\treturn array.reduce(function (prev, cur) {\r\n\t\t\tvar current = isArray(cur.text) ? flatten(cur.text) : cur;\r\n\t\t\tvar more = [].concat(current).some(Array.isArray);\r\n\t\t\treturn prev.concat(more ? flatten(current) : current);\r\n\t\t}, []);\r\n\t}\r\n\r\n\tfunction getOneWord(index, words, noWrap) {\r\n\t\tif (isUndefined(words[index])) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (words[index].lineEnd) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar word = words[index].text;\r\n\r\n\t\tif (noWrap) {\r\n\t\t\tvar tmpWords = splitWords(normalizeString(word), false);\r\n\t\t\tif (isUndefined(tmpWords[tmpWords.length - 1])) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tword = tmpWords[tmpWords.length - 1].text;\r\n\t\t}\r\n\r\n\t\treturn word;\r\n\t}\r\n\r\n\tvar results = [];\r\n\r\n\tif (!isArray(array)) {\r\n\t\tarray = [array];\r\n\t}\r\n\r\n\tarray = flatten(array);\r\n\r\n\tvar lastWord = null;\r\n\tfor (var i = 0, l = array.length; i < l; i++) {\r\n\t\tvar item = array[i];\r\n\t\tvar style = null;\r\n\t\tvar words;\r\n\r\n\t\tvar noWrap = getStyleProperty(item || {}, styleContextStack, 'noWrap', false);\r\n\t\tif (isObject(item)) {\r\n\t\t\tif (item._textRef && item._textRef._textNodeRef.text) {\r\n\t\t\t\titem.text = item._textRef._textNodeRef.text;\r\n\t\t\t}\r\n\t\t\twords = splitWords(normalizeString(item.text), noWrap);\r\n\t\t\tstyle = copyStyle(item);\r\n\t\t} else {\r\n\t\t\twords = splitWords(normalizeString(item), noWrap);\r\n\t\t}\r\n\r\n\t\tif (lastWord && words.length) {\r\n\t\t\tvar firstWord = getOneWord(0, words, noWrap);\r\n\r\n\t\t\tvar wrapWords = splitWords(normalizeString(lastWord + firstWord), false);\r\n\t\t\tif (wrapWords.length === 1) {\r\n\t\t\t\tresults[results.length - 1].noNewLine = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var i2 = 0, l2 = words.length; i2 < l2; i2++) {\r\n\t\t\tvar result = {\r\n\t\t\t\ttext: words[i2].text\r\n\t\t\t};\r\n\r\n\t\t\tif (words[i2].lineEnd) {\r\n\t\t\t\tresult.lineEnd = true;\r\n\t\t\t}\r\n\r\n\t\t\tcopyStyle(style, result);\r\n\r\n\t\t\tresults.push(result);\r\n\t\t}\r\n\r\n\t\tlastWord = null;\r\n\t\tif (i + 1 < l) {\r\n\t\t\tlastWord = getOneWord(words.length - 1, words, noWrap);\r\n\t\t}\r\n\t}\r\n\r\n\treturn results;\r\n}\r\n\r\nfunction normalizeString(value) {\r\n\tif (value === undefined || value === null) {\r\n\t\treturn '';\r\n\t} else if (isNumber(value)) {\r\n\t\treturn value.toString();\r\n\t} else if (isString(value)) {\r\n\t\treturn value;\r\n\t} else {\r\n\t\treturn value.toString();\r\n\t}\r\n}\r\n\r\nfunction getStyleProperty(item, styleContextStack, property, defaultValue) {\r\n\tvar value;\r\n\r\n\tif (item[property] !== undefined && item[property] !== null) {\r\n\t\t// item defines this property\r\n\t\treturn item[property];\r\n\t}\r\n\r\n\tif (!styleContextStack) {\r\n\t\treturn defaultValue;\r\n\t}\r\n\r\n\tstyleContextStack.auto(item, function () {\r\n\t\tvalue = styleContextStack.getProperty(property);\r\n\t});\r\n\r\n\tif (value !== null && value !== undefined) {\r\n\t\treturn value;\r\n\t} else {\r\n\t\treturn defaultValue;\r\n\t}\r\n}\r\n\r\nfunction measure(fontProvider, textArray, styleContextStack) {\r\n\tvar normalized = normalizeTextArray(textArray, styleContextStack);\r\n\r\n\tif (normalized.length) {\r\n\t\tvar leadingIndent = getStyleProperty(normalized[0], styleContextStack, 'leadingIndent', 0);\r\n\r\n\t\tif (leadingIndent) {\r\n\t\t\tnormalized[0].leadingCut = -leadingIndent;\r\n\t\t\tnormalized[0].leadingIndent = leadingIndent;\r\n\t\t}\r\n\t}\r\n\r\n\tnormalized.forEach(function (item) {\r\n\t\tvar fontName = getStyleProperty(item, styleContextStack, 'font', 'Roboto');\r\n\t\tvar fontSize = getStyleProperty(item, styleContextStack, 'fontSize', 12);\r\n\t\tvar fontFeatures = getStyleProperty(item, styleContextStack, 'fontFeatures', null);\r\n\t\tvar bold = getStyleProperty(item, styleContextStack, 'bold', false);\r\n\t\tvar italics = getStyleProperty(item, styleContextStack, 'italics', false);\r\n\t\tvar color = getStyleProperty(item, styleContextStack, 'color', 'black');\r\n\t\tvar decoration = getStyleProperty(item, styleContextStack, 'decoration', null);\r\n\t\tvar decorationColor = getStyleProperty(item, styleContextStack, 'decorationColor', null);\r\n\t\tvar decorationStyle = getStyleProperty(item, styleContextStack, 'decorationStyle', null);\r\n\t\tvar background = getStyleProperty(item, styleContextStack, 'background', null);\r\n\t\tvar lineHeight = getStyleProperty(item, styleContextStack, 'lineHeight', 1);\r\n\t\tvar characterSpacing = getStyleProperty(item, styleContextStack, 'characterSpacing', 0);\r\n\t\tvar link = getStyleProperty(item, styleContextStack, 'link', null);\r\n\t\tvar linkToPage = getStyleProperty(item, styleContextStack, 'linkToPage', null);\r\n\t\tvar linkToDestination = getStyleProperty(item, styleContextStack, 'linkToDestination', null);\r\n\t\tvar noWrap = getStyleProperty(item, styleContextStack, 'noWrap', null);\r\n\t\tvar preserveLeadingSpaces = getStyleProperty(item, styleContextStack, 'preserveLeadingSpaces', false);\r\n\t\tvar preserveTrailingSpaces = getStyleProperty(item, styleContextStack, 'preserveTrailingSpaces', false);\r\n\t\tvar opacity = getStyleProperty(item, styleContextStack, 'opacity', 1);\r\n\t\tvar sup = getStyleProperty(item, styleContextStack, 'sup', false);\r\n\t\tvar sub = getStyleProperty(item, styleContextStack, 'sub', false);\r\n\r\n\t\tif ((sup || sub) && item.fontSize === undefined) {\r\n\t\t\t// font size reduction taken from here: https://en.wikipedia.org/wiki/Subscript_and_superscript#Desktop_publishing\r\n\t\t\tfontSize *= 0.58\r\n\t\t}\r\n\r\n\t\tvar font = fontProvider.provideFont(fontName, bold, italics);\r\n\r\n\t\titem.width = widthOfString(item.text, font, fontSize, characterSpacing, fontFeatures);\r\n\t\titem.height = font.lineHeight(fontSize) * lineHeight;\r\n\r\n\t\tif (!item.leadingCut) {\r\n\t\t\titem.leadingCut = 0;\r\n\t\t}\r\n\r\n\t\tvar leadingSpaces;\r\n\t\tif (!preserveLeadingSpaces && (leadingSpaces = item.text.match(LEADING))) {\r\n\t\t\titem.leadingCut += widthOfString(leadingSpaces[0], font, fontSize, characterSpacing, fontFeatures);\r\n\t\t}\r\n\r\n\t\tvar trailingSpaces;\r\n\t\tif (!preserveTrailingSpaces && (trailingSpaces = item.text.match(TRAILING))) {\r\n\t\t\titem.trailingCut = widthOfString(trailingSpaces[0], font, fontSize, characterSpacing, fontFeatures);\r\n\t\t} else {\r\n\t\t\titem.trailingCut = 0;\r\n\t\t}\r\n\r\n\t\titem.alignment = getStyleProperty(item, styleContextStack, 'alignment', 'left');\r\n\t\titem.font = font;\r\n\t\titem.fontSize = fontSize;\r\n\t\titem.fontFeatures = fontFeatures;\r\n\t\titem.characterSpacing = characterSpacing;\r\n\t\titem.color = color;\r\n\t\titem.decoration = decoration;\r\n\t\titem.decorationColor = decorationColor;\r\n\t\titem.decorationStyle = decorationStyle;\r\n\t\titem.background = background;\r\n\t\titem.link = link;\r\n\t\titem.linkToPage = linkToPage;\r\n\t\titem.linkToDestination = linkToDestination;\r\n\t\titem.noWrap = noWrap;\r\n\t\titem.opacity = opacity;\r\n\t\titem.sup = sup;\r\n\t\titem.sub = sub;\r\n\t});\r\n\r\n\treturn normalized;\r\n}\r\n\r\nfunction widthOfString(text, font, fontSize, characterSpacing, fontFeatures) {\r\n\treturn font.widthOfString(text, fontSize, fontFeatures) + ((characterSpacing || 0) * (text.length - 1));\r\n}\r\n\r\nmodule.exports = TextTools;\r\n\n\n/***/ }),\n\n/***/ 8537:\n/***/ (function(module) {\n\n\"use strict\";\n\r\n\r\nfunction TraversalTracker() {\r\n\tthis.events = {};\r\n}\r\n\r\nTraversalTracker.prototype.startTracking = function (event, callback) {\r\n\tvar callbacks = this.events[event] || (this.events[event] = []);\r\n\r\n\tif (callbacks.indexOf(callback) < 0) {\r\n\t\tcallbacks.push(callback);\r\n\t}\r\n};\r\n\r\nTraversalTracker.prototype.stopTracking = function (event, callback) {\r\n\tvar callbacks = this.events[event];\r\n\r\n\tif (!callbacks) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar index = callbacks.indexOf(callback);\r\n\tif (index >= 0) {\r\n\t\tcallbacks.splice(index, 1);\r\n\t}\r\n};\r\n\r\nTraversalTracker.prototype.emit = function (event) {\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\tvar callbacks = this.events[event];\r\n\r\n\tif (!callbacks) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tcallbacks.forEach(function (callback) {\r\n\t\tcallback.apply(this, args);\r\n\t});\r\n};\r\n\r\nTraversalTracker.prototype.auto = function (event, callback, innerFunction) {\r\n\tthis.startTracking(event, callback);\r\n\tinnerFunction();\r\n\tthis.stopTracking(event, callback);\r\n};\r\n\r\nmodule.exports = TraversalTracker;\r\n\n\n/***/ }),\n\n/***/ 2480:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 5832:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 9862:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 964:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 3083:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2517089__) {\n\n\"use strict\";\n\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? __nested_webpack_require_2517089__.g : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n\n\n/***/ }),\n\n/***/ 882:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2517722__) {\n\n\"use strict\";\n\n\nvar GetIntrinsic = __nested_webpack_require_2517722__(210);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n\n\n/***/ }),\n\n/***/ 3631:\n/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_2518084__) {\n\nvar $c5L0i$base64js = __nested_webpack_require_2518084__(9742);\nvar $c5L0i$unicodetrie = __nested_webpack_require_2518084__(4781);\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"getCategory\", () => $43d7963e56408b24$export$410364bbb673ddbc);\n$parcel$export(module.exports, \"getCombiningClass\", () => $43d7963e56408b24$export$c03b919c6651ed55);\n$parcel$export(module.exports, \"getScript\", () => $43d7963e56408b24$export$941569448d136665);\n$parcel$export(module.exports, \"getEastAsianWidth\", () => $43d7963e56408b24$export$92f6187db8ca6d26);\n$parcel$export(module.exports, \"getNumericValue\", () => $43d7963e56408b24$export$7d1258ebb7625a0d);\n$parcel$export(module.exports, \"isAlphabetic\", () => $43d7963e56408b24$export$52c8ea63abd07594);\n$parcel$export(module.exports, \"isDigit\", () => $43d7963e56408b24$export$727d9dbc4fbb948f);\n$parcel$export(module.exports, \"isPunctuation\", () => $43d7963e56408b24$export$a5b49f4dc6a07d2c);\n$parcel$export(module.exports, \"isLowerCase\", () => $43d7963e56408b24$export$7b6804e8df61fcf5);\n$parcel$export(module.exports, \"isUpperCase\", () => $43d7963e56408b24$export$aebd617640818cda);\n$parcel$export(module.exports, \"isTitleCase\", () => $43d7963e56408b24$export$de8b4ee23b2cf823);\n$parcel$export(module.exports, \"isWhiteSpace\", () => $43d7963e56408b24$export$3c52dd84024ae72c);\n$parcel$export(module.exports, \"isBaseForm\", () => $43d7963e56408b24$export$a11bdcffe109e74b);\n$parcel$export(module.exports, \"isMark\", () => $43d7963e56408b24$export$e33ad6871e762338);\n$parcel$export(module.exports, \"default\", () => $43d7963e56408b24$export$2e2bcd8739ae039);\n\n\nvar $29668e65f2091c2c$exports = {};\n$29668e65f2091c2c$exports = JSON.parse('{\"categories\":[\"Cc\",\"Zs\",\"Po\",\"Sc\",\"Ps\",\"Pe\",\"Sm\",\"Pd\",\"Nd\",\"Lu\",\"Sk\",\"Pc\",\"Ll\",\"So\",\"Lo\",\"Pi\",\"Cf\",\"No\",\"Pf\",\"Lt\",\"Lm\",\"Mn\",\"Me\",\"Mc\",\"Nl\",\"Zl\",\"Zp\",\"Cs\",\"Co\"],\"combiningClasses\":[\"Not_Reordered\",\"Above\",\"Above_Right\",\"Below\",\"Attached_Above_Right\",\"Attached_Below\",\"Overlay\",\"Iota_Subscript\",\"Double_Below\",\"Double_Above\",\"Below_Right\",\"Above_Left\",\"CCC10\",\"CCC11\",\"CCC12\",\"CCC13\",\"CCC14\",\"CCC15\",\"CCC16\",\"CCC17\",\"CCC18\",\"CCC19\",\"CCC20\",\"CCC21\",\"CCC22\",\"CCC23\",\"CCC24\",\"CCC25\",\"CCC30\",\"CCC31\",\"CCC32\",\"CCC27\",\"CCC28\",\"CCC29\",\"CCC33\",\"CCC34\",\"CCC35\",\"CCC36\",\"Nukta\",\"Virama\",\"CCC84\",\"CCC91\",\"CCC103\",\"CCC107\",\"CCC118\",\"CCC122\",\"CCC129\",\"CCC130\",\"CCC132\",\"Attached_Above\",\"Below_Left\",\"Left\",\"Kana_Voicing\",\"CCC26\",\"Right\"],\"scripts\":[\"Common\",\"Latin\",\"Bopomofo\",\"Inherited\",\"Greek\",\"Coptic\",\"Cyrillic\",\"Armenian\",\"Hebrew\",\"Arabic\",\"Syriac\",\"Thaana\",\"Nko\",\"Samaritan\",\"Mandaic\",\"Devanagari\",\"Bengali\",\"Gurmukhi\",\"Gujarati\",\"Oriya\",\"Tamil\",\"Telugu\",\"Kannada\",\"Malayalam\",\"Sinhala\",\"Thai\",\"Lao\",\"Tibetan\",\"Myanmar\",\"Georgian\",\"Hangul\",\"Ethiopic\",\"Cherokee\",\"Canadian_Aboriginal\",\"Ogham\",\"Runic\",\"Tagalog\",\"Hanunoo\",\"Buhid\",\"Tagbanwa\",\"Khmer\",\"Mongolian\",\"Limbu\",\"Tai_Le\",\"New_Tai_Lue\",\"Buginese\",\"Tai_Tham\",\"Balinese\",\"Sundanese\",\"Batak\",\"Lepcha\",\"Ol_Chiki\",\"Braille\",\"Glagolitic\",\"Tifinagh\",\"Han\",\"Hiragana\",\"Katakana\",\"Yi\",\"Lisu\",\"Vai\",\"Bamum\",\"Syloti_Nagri\",\"Phags_Pa\",\"Saurashtra\",\"Kayah_Li\",\"Rejang\",\"Javanese\",\"Cham\",\"Tai_Viet\",\"Meetei_Mayek\",\"null\",\"Linear_B\",\"Lycian\",\"Carian\",\"Old_Italic\",\"Gothic\",\"Old_Permic\",\"Ugaritic\",\"Old_Persian\",\"Deseret\",\"Shavian\",\"Osmanya\",\"Osage\",\"Elbasan\",\"Caucasian_Albanian\",\"Linear_A\",\"Cypriot\",\"Imperial_Aramaic\",\"Palmyrene\",\"Nabataean\",\"Hatran\",\"Phoenician\",\"Lydian\",\"Meroitic_Hieroglyphs\",\"Meroitic_Cursive\",\"Kharoshthi\",\"Old_South_Arabian\",\"Old_North_Arabian\",\"Manichaean\",\"Avestan\",\"Inscriptional_Parthian\",\"Inscriptional_Pahlavi\",\"Psalter_Pahlavi\",\"Old_Turkic\",\"Old_Hungarian\",\"Hanifi_Rohingya\",\"Old_Sogdian\",\"Sogdian\",\"Elymaic\",\"Brahmi\",\"Kaithi\",\"Sora_Sompeng\",\"Chakma\",\"Mahajani\",\"Sharada\",\"Khojki\",\"Multani\",\"Khudawadi\",\"Grantha\",\"Newa\",\"Tirhuta\",\"Siddham\",\"Modi\",\"Takri\",\"Ahom\",\"Dogra\",\"Warang_Citi\",\"Nandinagari\",\"Zanabazar_Square\",\"Soyombo\",\"Pau_Cin_Hau\",\"Bhaiksuki\",\"Marchen\",\"Masaram_Gondi\",\"Gunjala_Gondi\",\"Makasar\",\"Cuneiform\",\"Egyptian_Hieroglyphs\",\"Anatolian_Hieroglyphs\",\"Mro\",\"Bassa_Vah\",\"Pahawh_Hmong\",\"Medefaidrin\",\"Miao\",\"Tangut\",\"Nushu\",\"Duployan\",\"SignWriting\",\"Nyiakeng_Puachue_Hmong\",\"Wancho\",\"Mende_Kikakui\",\"Adlam\"],\"eaw\":[\"N\",\"Na\",\"A\",\"W\",\"H\",\"F\"]}');\n\n\nconst $43d7963e56408b24$var$trie = new (0, ($parcel$interopDefault($c5L0i$unicodetrie)))((0, ($parcel$interopDefault($c5L0i$base64js))).toByteArray(\"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\"));\nconst $43d7963e56408b24$var$log2 = Math.log2 || ((n)=>Math.log(n) / Math.LN2);\nconst $43d7963e56408b24$var$bits = (n)=>$43d7963e56408b24$var$log2(n) + 1 | 0;\n// compute the number of bits stored for each field\nconst $43d7963e56408b24$var$CATEGORY_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).categories.length - 1);\nconst $43d7963e56408b24$var$COMBINING_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).combiningClasses.length - 1);\nconst $43d7963e56408b24$var$SCRIPT_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).scripts.length - 1);\nconst $43d7963e56408b24$var$EAW_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).eaw.length - 1);\nconst $43d7963e56408b24$var$NUMBER_BITS = 10;\n// compute shift and mask values for each field\nconst $43d7963e56408b24$var$CATEGORY_SHIFT = $43d7963e56408b24$var$COMBINING_BITS + $43d7963e56408b24$var$SCRIPT_BITS + $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$COMBINING_SHIFT = $43d7963e56408b24$var$SCRIPT_BITS + $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$SCRIPT_SHIFT = $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$EAW_SHIFT = $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$CATEGORY_MASK = (1 << $43d7963e56408b24$var$CATEGORY_BITS) - 1;\nconst $43d7963e56408b24$var$COMBINING_MASK = (1 << $43d7963e56408b24$var$COMBINING_BITS) - 1;\nconst $43d7963e56408b24$var$SCRIPT_MASK = (1 << $43d7963e56408b24$var$SCRIPT_BITS) - 1;\nconst $43d7963e56408b24$var$EAW_MASK = (1 << $43d7963e56408b24$var$EAW_BITS) - 1;\nconst $43d7963e56408b24$var$NUMBER_MASK = (1 << $43d7963e56408b24$var$NUMBER_BITS) - 1;\nfunction $43d7963e56408b24$export$410364bbb673ddbc(codePoint) {\n const val = $43d7963e56408b24$var$trie.get(codePoint);\n return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).categories[val >> $43d7963e56408b24$var$CATEGORY_SHIFT & $43d7963e56408b24$var$CATEGORY_MASK];\n}\nfunction $43d7963e56408b24$export$c03b919c6651ed55(codePoint) {\n const val = $43d7963e56408b24$var$trie.get(codePoint);\n return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).combiningClasses[val >> $43d7963e56408b24$var$COMBINING_SHIFT & $43d7963e56408b24$var$COMBINING_MASK];\n}\nfunction $43d7963e56408b24$export$941569448d136665(codePoint) {\n const val = $43d7963e56408b24$var$trie.get(codePoint);\n return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).scripts[val >> $43d7963e56408b24$var$SCRIPT_SHIFT & $43d7963e56408b24$var$SCRIPT_MASK];\n}\nfunction $43d7963e56408b24$export$92f6187db8ca6d26(codePoint) {\n const val = $43d7963e56408b24$var$trie.get(codePoint);\n return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).eaw[val >> $43d7963e56408b24$var$EAW_SHIFT & $43d7963e56408b24$var$EAW_MASK];\n}\nfunction $43d7963e56408b24$export$7d1258ebb7625a0d(codePoint) {\n let val = $43d7963e56408b24$var$trie.get(codePoint);\n let num = val & $43d7963e56408b24$var$NUMBER_MASK;\n if (num === 0) return null;\n else if (num <= 50) return num - 1;\n else if (num < 0x1e0) {\n const numerator = (num >> 4) - 12;\n const denominator = (num & 0xf) + 1;\n return numerator / denominator;\n } else if (num < 0x300) {\n val = (num >> 5) - 14;\n let exp = (num & 0x1f) + 2;\n while(exp > 0){\n val *= 10;\n exp--;\n }\n return val;\n } else {\n val = (num >> 2) - 0xbf;\n let exp = (num & 3) + 1;\n while(exp > 0){\n val *= 60;\n exp--;\n }\n return val;\n }\n}\nfunction $43d7963e56408b24$export$52c8ea63abd07594(codePoint) {\n const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n return category === \"Lu\" || category === \"Ll\" || category === \"Lt\" || category === \"Lm\" || category === \"Lo\" || category === \"Nl\";\n}\nfunction $43d7963e56408b24$export$727d9dbc4fbb948f(codePoint) {\n return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Nd\";\n}\nfunction $43d7963e56408b24$export$a5b49f4dc6a07d2c(codePoint) {\n const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n return category === \"Pc\" || category === \"Pd\" || category === \"Pe\" || category === \"Pf\" || category === \"Pi\" || category === \"Po\" || category === \"Ps\";\n}\nfunction $43d7963e56408b24$export$7b6804e8df61fcf5(codePoint) {\n return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Ll\";\n}\nfunction $43d7963e56408b24$export$aebd617640818cda(codePoint) {\n return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Lu\";\n}\nfunction $43d7963e56408b24$export$de8b4ee23b2cf823(codePoint) {\n return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Lt\";\n}\nfunction $43d7963e56408b24$export$3c52dd84024ae72c(codePoint) {\n const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n return category === \"Zs\" || category === \"Zl\" || category === \"Zp\";\n}\nfunction $43d7963e56408b24$export$a11bdcffe109e74b(codePoint) {\n const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n return category === \"Nd\" || category === \"No\" || category === \"Nl\" || category === \"Lu\" || category === \"Ll\" || category === \"Lt\" || category === \"Lm\" || category === \"Lo\" || category === \"Me\" || category === \"Mc\";\n}\nfunction $43d7963e56408b24$export$e33ad6871e762338(codePoint) {\n const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n return category === \"Mn\" || category === \"Me\" || category === \"Mc\";\n}\nvar // Backwards compatibility.\n$43d7963e56408b24$export$2e2bcd8739ae039 = {\n getCategory: $43d7963e56408b24$export$410364bbb673ddbc,\n getCombiningClass: $43d7963e56408b24$export$c03b919c6651ed55,\n getScript: $43d7963e56408b24$export$941569448d136665,\n getEastAsianWidth: $43d7963e56408b24$export$92f6187db8ca6d26,\n getNumericValue: $43d7963e56408b24$export$7d1258ebb7625a0d,\n isAlphabetic: $43d7963e56408b24$export$52c8ea63abd07594,\n isDigit: $43d7963e56408b24$export$727d9dbc4fbb948f,\n isPunctuation: $43d7963e56408b24$export$a5b49f4dc6a07d2c,\n isLowerCase: $43d7963e56408b24$export$7b6804e8df61fcf5,\n isUpperCase: $43d7963e56408b24$export$aebd617640818cda,\n isTitleCase: $43d7963e56408b24$export$de8b4ee23b2cf823,\n isWhiteSpace: $43d7963e56408b24$export$3c52dd84024ae72c,\n isBaseForm: $43d7963e56408b24$export$a11bdcffe109e74b,\n isMark: $43d7963e56408b24$export$e33ad6871e762338\n};\n\n\n//# sourceMappingURL=main.cjs.map\n\n\n/***/ }),\n\n/***/ 3480:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"8740\",\"䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻\"],[\"8767\",\"綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬\"],[\"87a1\",\"𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋\"],[\"8840\",\"㇀\",4,\"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒÊ̄ẾÊ̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ\"],[\"88a1\",\"ǜüê̄ếê̌ềêɡ⏚⏛\"],[\"8940\",\"𪎩𡅅\"],[\"8943\",\"攊\"],[\"8946\",\"丽滝鵎釟\"],[\"894c\",\"𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮\"],[\"89a1\",\"琑糼緍楆竉刧\"],[\"89ab\",\"醌碸酞肼\"],[\"89b0\",\"贋胶𠧧\"],[\"89b5\",\"肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁\"],[\"89c1\",\"溚舾甙\"],[\"89c5\",\"䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅\"],[\"8a40\",\"𧶄唥\"],[\"8a43\",\"𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓\"],[\"8a64\",\"𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕\"],[\"8a76\",\"䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯\"],[\"8aa1\",\"𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱\"],[\"8aac\",\"䠋𠆩㿺塳𢶍\"],[\"8ab2\",\"𤗈𠓼𦂗𠽌𠶖啹䂻䎺\"],[\"8abb\",\"䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃\"],[\"8ac9\",\"𪘁𠸉𢫏𢳉\"],[\"8ace\",\"𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻\"],[\"8adf\",\"𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌\"],[\"8af6\",\"𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭\"],[\"8b40\",\"𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹\"],[\"8b55\",\"𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑\"],[\"8ba1\",\"𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁\"],[\"8bde\",\"𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢\"],[\"8c40\",\"倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋\"],[\"8ca1\",\"𣏹椙橃𣱣泿\"],[\"8ca7\",\"爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚\"],[\"8cc9\",\"顨杫䉶圽\"],[\"8cce\",\"藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶\"],[\"8ce6\",\"峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻\"],[\"8d40\",\"𠮟\"],[\"8d42\",\"𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱\"],[\"8da1\",\"㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘\"],[\"8e40\",\"𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎\"],[\"8ea1\",\"繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛\"],[\"8f40\",\"蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖\"],[\"8fa1\",\"𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起\"],[\"9040\",\"趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛\"],[\"90a1\",\"𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜\"],[\"9140\",\"𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈\"],[\"91a1\",\"鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨\"],[\"9240\",\"𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘\"],[\"92a1\",\"働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃\"],[\"9340\",\"媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍\"],[\"93a1\",\"摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋\"],[\"9440\",\"銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻\"],[\"94a1\",\"㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡\"],[\"9540\",\"𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂\"],[\"95a1\",\"衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰\"],[\"9640\",\"桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸\"],[\"96a1\",\"𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉\"],[\"9740\",\"愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫\"],[\"97a1\",\"𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎\"],[\"9840\",\"𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦\"],[\"98a1\",\"咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃\"],[\"9940\",\"䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚\"],[\"99a1\",\"䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿\"],[\"9a40\",\"鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺\"],[\"9aa1\",\"黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪\"],[\"9b40\",\"𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌\"],[\"9b62\",\"𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎\"],[\"9ba1\",\"椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊\"],[\"9c40\",\"嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶\"],[\"9ca1\",\"㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏\"],[\"9d40\",\"𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁\"],[\"9da1\",\"辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢\"],[\"9e40\",\"𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺\"],[\"9ea1\",\"鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭\"],[\"9ead\",\"𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹\"],[\"9ec5\",\"㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲\"],[\"9ef5\",\"噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼\"],[\"9f40\",\"籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱\"],[\"9f4f\",\"凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰\"],[\"9fa1\",\"椬叚鰊鴂䰻陁榀傦畆𡝭駚剳\"],[\"9fae\",\"酙隁酜\"],[\"9fb2\",\"酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽\"],[\"9fc1\",\"𤤙盖鮝个𠳔莾衂\"],[\"9fc9\",\"届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳\"],[\"9fdb\",\"歒酼龥鮗頮颴骺麨麄煺笔\"],[\"9fe7\",\"毺蠘罸\"],[\"9feb\",\"嘠𪙊蹷齓\"],[\"9ff0\",\"跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇\"],[\"a040\",\"𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷\"],[\"a055\",\"𡠻𦸅\"],[\"a058\",\"詾𢔛\"],[\"a05b\",\"惽癧髗鵄鍮鮏蟵\"],[\"a063\",\"蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽\"],[\"a073\",\"坟慯抦戹拎㩜懢厪𣏵捤栂㗒\"],[\"a0a1\",\"嵗𨯂迚𨸹\"],[\"a0a6\",\"僙𡵆礆匲阸𠼻䁥\"],[\"a0ae\",\"矾\"],[\"a0b0\",\"糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦\"],[\"a0d4\",\"覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷\"],[\"a0e2\",\"罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫\"],[\"a3c0\",\"␀\",31,\"␡\"],[\"c6a1\",\"①\",9,\"⑴\",9,\"ⅰ\",9,\"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁ\",23],[\"c740\",\"す\",58,\"ァアィイ\"],[\"c7a1\",\"ゥ\",81,\"А\",5,\"ЁЖ\",4],[\"c840\",\"Л\",26,\"ёж\",25,\"⇧↸↹㇏𠃌乚𠂊刂䒑\"],[\"c8a1\",\"龰冈龱𧘇\"],[\"c8cd\",\"¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣\"],[\"c8f5\",\"ʃɐɛɔɵœøŋʊɪ\"],[\"f9fe\",\"■\"],[\"fa40\",\"𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸\"],[\"faa1\",\"鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍\"],[\"fb40\",\"𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙\"],[\"fba1\",\"𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂\"],[\"fc40\",\"廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷\"],[\"fca1\",\"𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝\"],[\"fd40\",\"𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀\"],[\"fda1\",\"𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎\"],[\"fe40\",\"鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌\"],[\"fea1\",\"𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔\"]]');\n\n/***/ }),\n\n/***/ 3336:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127,\"€\"],[\"8140\",\"丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪\",5,\"乲乴\",9,\"乿\",6,\"亇亊\"],[\"8180\",\"亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂\",6,\"伋伌伒\",4,\"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾\",4,\"佄佅佇\",5,\"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢\"],[\"8240\",\"侤侫侭侰\",4,\"侶\",8,\"俀俁係俆俇俈俉俋俌俍俒\",4,\"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿\",11],[\"8280\",\"個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯\",10,\"倻倽倿偀偁偂偄偅偆偉偊偋偍偐\",4,\"偖偗偘偙偛偝\",7,\"偦\",5,\"偭\",8,\"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎\",20,\"傤傦傪傫傭\",4,\"傳\",6,\"傼\"],[\"8340\",\"傽\",17,\"僐\",5,\"僗僘僙僛\",10,\"僨僩僪僫僯僰僱僲僴僶\",4,\"僼\",9,\"儈\"],[\"8380\",\"儉儊儌\",5,\"儓\",13,\"儢\",28,\"兂兇兊兌兎兏児兒兓兗兘兙兛兝\",4,\"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦\",4,\"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒\",5],[\"8440\",\"凘凙凚凜凞凟凢凣凥\",5,\"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄\",5,\"剋剎剏剒剓剕剗剘\"],[\"8480\",\"剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳\",9,\"剾劀劃\",4,\"劉\",6,\"劑劒劔\",6,\"劜劤劥劦劧劮劯劰労\",9,\"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務\",5,\"勠勡勢勣勥\",10,\"勱\",7,\"勻勼勽匁匂匃匄匇匉匊匋匌匎\"],[\"8540\",\"匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯\",9,\"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏\"],[\"8580\",\"厐\",4,\"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯\",6,\"厷厸厹厺厼厽厾叀參\",4,\"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝\",4,\"呣呥呧呩\",7,\"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡\"],[\"8640\",\"咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠\",4,\"哫哬哯哰哱哴\",5,\"哻哾唀唂唃唄唅唈唊\",4,\"唒唓唕\",5,\"唜唝唞唟唡唥唦\"],[\"8680\",\"唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋\",4,\"啑啒啓啔啗\",4,\"啝啞啟啠啢啣啨啩啫啯\",5,\"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠\",6,\"喨\",8,\"喲喴営喸喺喼喿\",4,\"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗\",4,\"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸\",4,\"嗿嘂嘃嘄嘅\"],[\"8740\",\"嘆嘇嘊嘋嘍嘐\",7,\"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀\",11,\"噏\",4,\"噕噖噚噛噝\",4],[\"8780\",\"噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽\",7,\"嚇\",6,\"嚐嚑嚒嚔\",14,\"嚤\",10,\"嚰\",6,\"嚸嚹嚺嚻嚽\",12,\"囋\",8,\"囕囖囘囙囜団囥\",5,\"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國\",6],[\"8840\",\"園\",9,\"圝圞圠圡圢圤圥圦圧圫圱圲圴\",4,\"圼圽圿坁坃坄坅坆坈坉坋坒\",4,\"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀\"],[\"8880\",\"垁垇垈垉垊垍\",4,\"垔\",6,\"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹\",8,\"埄\",6,\"埌埍埐埑埓埖埗埛埜埞埡埢埣埥\",7,\"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥\",4,\"堫\",4,\"報堲堳場堶\",7],[\"8940\",\"堾\",5,\"塅\",6,\"塎塏塐塒塓塕塖塗塙\",4,\"塟\",5,\"塦\",4,\"塭\",16,\"塿墂墄墆墇墈墊墋墌\"],[\"8980\",\"墍\",4,\"墔\",4,\"墛墜墝墠\",7,\"墪\",17,\"墽墾墿壀壂壃壄壆\",10,\"壒壓壔壖\",13,\"壥\",5,\"壭壯壱売壴壵壷壸壺\",7,\"夃夅夆夈\",4,\"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻\"],[\"8a40\",\"夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛\",4,\"奡奣奤奦\",12,\"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦\"],[\"8a80\",\"妧妬妭妰妱妳\",5,\"妺妼妽妿\",6,\"姇姈姉姌姍姎姏姕姖姙姛姞\",4,\"姤姦姧姩姪姫姭\",11,\"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪\",6,\"娳娵娷\",4,\"娽娾娿婁\",4,\"婇婈婋\",9,\"婖婗婘婙婛\",5],[\"8b40\",\"婡婣婤婥婦婨婩婫\",8,\"婸婹婻婼婽婾媀\",17,\"媓\",6,\"媜\",13,\"媫媬\"],[\"8b80\",\"媭\",4,\"媴媶媷媹\",4,\"媿嫀嫃\",5,\"嫊嫋嫍\",4,\"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬\",4,\"嫲\",22,\"嬊\",11,\"嬘\",25,\"嬳嬵嬶嬸\",7,\"孁\",6],[\"8c40\",\"孈\",7,\"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏\"],[\"8c80\",\"寑寔\",8,\"寠寢寣實寧審\",4,\"寯寱\",6,\"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧\",6,\"屰屲\",6,\"屻屼屽屾岀岃\",4,\"岉岊岋岎岏岒岓岕岝\",4,\"岤\",4],[\"8d40\",\"岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅\",5,\"峌\",5,\"峓\",5,\"峚\",6,\"峢峣峧峩峫峬峮峯峱\",9,\"峼\",4],[\"8d80\",\"崁崄崅崈\",5,\"崏\",4,\"崕崗崘崙崚崜崝崟\",4,\"崥崨崪崫崬崯\",4,\"崵\",7,\"崿\",7,\"嵈嵉嵍\",10,\"嵙嵚嵜嵞\",10,\"嵪嵭嵮嵰嵱嵲嵳嵵\",12,\"嶃\",21,\"嶚嶛嶜嶞嶟嶠\"],[\"8e40\",\"嶡\",21,\"嶸\",12,\"巆\",6,\"巎\",12,\"巜巟巠巣巤巪巬巭\"],[\"8e80\",\"巰巵巶巸\",4,\"巿帀帄帇帉帊帋帍帎帒帓帗帞\",7,\"帨\",4,\"帯帰帲\",4,\"帹帺帾帿幀幁幃幆\",5,\"幍\",6,\"幖\",4,\"幜幝幟幠幣\",14,\"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨\",4,\"庮\",4,\"庴庺庻庼庽庿\",6],[\"8f40\",\"廆廇廈廋\",5,\"廔廕廗廘廙廚廜\",11,\"廩廫\",8,\"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤\"],[\"8f80\",\"弨弫弬弮弰弲\",6,\"弻弽弾弿彁\",14,\"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢\",5,\"復徫徬徯\",5,\"徶徸徹徺徻徾\",4,\"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇\"],[\"9040\",\"怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰\",4,\"怶\",4,\"怽怾恀恄\",6,\"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀\"],[\"9080\",\"悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽\",7,\"惇惈惉惌\",4,\"惒惓惔惖惗惙惛惞惡\",4,\"惪惱惲惵惷惸惻\",4,\"愂愃愄愅愇愊愋愌愐\",4,\"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬\",18,\"慀\",6],[\"9140\",\"慇慉態慍慏慐慒慓慔慖\",6,\"慞慟慠慡慣慤慥慦慩\",6,\"慱慲慳慴慶慸\",18,\"憌憍憏\",4,\"憕\"],[\"9180\",\"憖\",6,\"憞\",8,\"憪憫憭\",9,\"憸\",5,\"憿懀懁懃\",4,\"應懌\",4,\"懓懕\",16,\"懧\",13,\"懶\",8,\"戀\",5,\"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸\",4,\"扂扄扅扆扊\"],[\"9240\",\"扏扐払扖扗扙扚扜\",6,\"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋\",5,\"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁\"],[\"9280\",\"拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳\",5,\"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖\",7,\"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙\",6,\"採掤掦掫掯掱掲掵掶掹掻掽掿揀\"],[\"9340\",\"揁揂揃揅揇揈揊揋揌揑揓揔揕揗\",6,\"揟揢揤\",4,\"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆\",4,\"損搎搑搒搕\",5,\"搝搟搢搣搤\"],[\"9380\",\"搥搧搨搩搫搮\",5,\"搵\",4,\"搻搼搾摀摂摃摉摋\",6,\"摓摕摖摗摙\",4,\"摟\",7,\"摨摪摫摬摮\",9,\"摻\",6,\"撃撆撈\",8,\"撓撔撗撘撚撛撜撝撟\",4,\"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆\",6,\"擏擑擓擔擕擖擙據\"],[\"9440\",\"擛擜擝擟擠擡擣擥擧\",24,\"攁\",7,\"攊\",7,\"攓\",4,\"攙\",8],[\"9480\",\"攢攣攤攦\",4,\"攬攭攰攱攲攳攷攺攼攽敀\",4,\"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數\",14,\"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱\",7,\"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘\",7,\"旡旣旤旪旫\"],[\"9540\",\"旲旳旴旵旸旹旻\",4,\"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷\",4,\"昽昿晀時晄\",6,\"晍晎晐晑晘\"],[\"9580\",\"晙晛晜晝晞晠晢晣晥晧晩\",4,\"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘\",4,\"暞\",8,\"暩\",4,\"暯\",4,\"暵暶暷暸暺暻暼暽暿\",25,\"曚曞\",7,\"曧曨曪\",5,\"曱曵曶書曺曻曽朁朂會\"],[\"9640\",\"朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠\",5,\"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗\",4,\"杝杢杣杤杦杧杫杬杮東杴杶\"],[\"9680\",\"杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹\",7,\"柂柅\",9,\"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵\",7,\"柾栁栂栃栄栆栍栐栒栔栕栘\",4,\"栞栟栠栢\",6,\"栫\",6,\"栴栵栶栺栻栿桇桋桍桏桒桖\",5],[\"9740\",\"桜桝桞桟桪桬\",7,\"桵桸\",8,\"梂梄梇\",7,\"梐梑梒梔梕梖梘\",9,\"梣梤梥梩梪梫梬梮梱梲梴梶梷梸\"],[\"9780\",\"梹\",6,\"棁棃\",5,\"棊棌棎棏棐棑棓棔棖棗棙棛\",4,\"棡棢棤\",9,\"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆\",4,\"椌椏椑椓\",11,\"椡椢椣椥\",7,\"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃\",16,\"楕楖楘楙楛楜楟\"],[\"9840\",\"楡楢楤楥楧楨楩楪楬業楯楰楲\",4,\"楺楻楽楾楿榁榃榅榊榋榌榎\",5,\"榖榗榙榚榝\",9,\"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽\"],[\"9880\",\"榾榿槀槂\",7,\"構槍槏槑槒槓槕\",5,\"槜槝槞槡\",11,\"槮槯槰槱槳\",9,\"槾樀\",9,\"樋\",11,\"標\",5,\"樠樢\",5,\"権樫樬樭樮樰樲樳樴樶\",6,\"樿\",4,\"橅橆橈\",7,\"橑\",6,\"橚\"],[\"9940\",\"橜\",4,\"橢橣橤橦\",10,\"橲\",6,\"橺橻橽橾橿檁檂檃檅\",8,\"檏檒\",4,\"檘\",7,\"檡\",5],[\"9980\",\"檧檨檪檭\",114,\"欥欦欨\",6],[\"9a40\",\"欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍\",11,\"歚\",7,\"歨歩歫\",13,\"歺歽歾歿殀殅殈\"],[\"9a80\",\"殌殎殏殐殑殔殕殗殘殙殜\",4,\"殢\",7,\"殫\",7,\"殶殸\",6,\"毀毃毄毆\",4,\"毌毎毐毑毘毚毜\",4,\"毢\",7,\"毬毭毮毰毱毲毴毶毷毸毺毻毼毾\",6,\"氈\",4,\"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋\",4,\"汑汒汓汖汘\"],[\"9b40\",\"汙汚汢汣汥汦汧汫\",4,\"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘\"],[\"9b80\",\"泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟\",5,\"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽\",4,\"涃涄涆涇涊涋涍涏涐涒涖\",4,\"涜涢涥涬涭涰涱涳涴涶涷涹\",5,\"淁淂淃淈淉淊\"],[\"9c40\",\"淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽\",7,\"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵\"],[\"9c80\",\"渶渷渹渻\",7,\"湅\",7,\"湏湐湑湒湕湗湙湚湜湝湞湠\",10,\"湬湭湯\",14,\"満溁溂溄溇溈溊\",4,\"溑\",6,\"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪\",5],[\"9d40\",\"滰滱滲滳滵滶滷滸滺\",7,\"漃漄漅漇漈漊\",4,\"漐漑漒漖\",9,\"漡漢漣漥漦漧漨漬漮漰漲漴漵漷\",6,\"漿潀潁潂\"],[\"9d80\",\"潃潄潅潈潉潊潌潎\",9,\"潙潚潛潝潟潠潡潣潤潥潧\",5,\"潯潰潱潳潵潶潷潹潻潽\",6,\"澅澆澇澊澋澏\",12,\"澝澞澟澠澢\",4,\"澨\",10,\"澴澵澷澸澺\",5,\"濁濃\",5,\"濊\",6,\"濓\",10,\"濟濢濣濤濥\"],[\"9e40\",\"濦\",7,\"濰\",32,\"瀒\",7,\"瀜\",6,\"瀤\",6],[\"9e80\",\"瀫\",9,\"瀶瀷瀸瀺\",17,\"灍灎灐\",13,\"灟\",11,\"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞\",12,\"炰炲炴炵炶為炾炿烄烅烆烇烉烋\",12,\"烚\"],[\"9f40\",\"烜烝烞烠烡烢烣烥烪烮烰\",6,\"烸烺烻烼烾\",10,\"焋\",4,\"焑焒焔焗焛\",10,\"焧\",7,\"焲焳焴\"],[\"9f80\",\"焵焷\",13,\"煆煇煈煉煋煍煏\",12,\"煝煟\",4,\"煥煩\",4,\"煯煰煱煴煵煶煷煹煻煼煾\",5,\"熅\",4,\"熋熌熍熎熐熑熒熓熕熖熗熚\",4,\"熡\",6,\"熩熪熫熭\",5,\"熴熶熷熸熺\",8,\"燄\",9,\"燏\",4],[\"a040\",\"燖\",9,\"燡燢燣燤燦燨\",5,\"燯\",9,\"燺\",11,\"爇\",19],[\"a080\",\"爛爜爞\",9,\"爩爫爭爮爯爲爳爴爺爼爾牀\",6,\"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅\",4,\"犌犎犐犑犓\",11,\"犠\",11,\"犮犱犲犳犵犺\",6,\"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛\"],[\"a1a1\",\" 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈\",7,\"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓\"],[\"a2a1\",\"ⅰ\",9],[\"a2b1\",\"⒈\",19,\"⑴\",19,\"①\",9],[\"a2e5\",\"㈠\",9],[\"a2f1\",\"Ⅰ\",11],[\"a3a1\",\"!"#¥%\",88,\" ̄\"],[\"a4a1\",\"ぁ\",82],[\"a5a1\",\"ァ\",85],[\"a6a1\",\"Α\",16,\"Σ\",6],[\"a6c1\",\"α\",16,\"σ\",6],[\"a6e0\",\"︵︶︹︺︿﹀︽︾﹁﹂﹃﹄\"],[\"a6ee\",\"︻︼︷︸︱\"],[\"a6f4\",\"︳︴\"],[\"a7a1\",\"А\",5,\"ЁЖ\",25],[\"a7d1\",\"а\",5,\"ёж\",25],[\"a840\",\"ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═\",35,\"▁\",6],[\"a880\",\"█\",7,\"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞\"],[\"a8a1\",\"āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ\"],[\"a8bd\",\"ńň\"],[\"a8c0\",\"ɡ\"],[\"a8c5\",\"ㄅ\",36],[\"a940\",\"〡\",8,\"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦\"],[\"a959\",\"℡㈱\"],[\"a95c\",\"‐\"],[\"a960\",\"ー゛゜ヽヾ〆ゝゞ﹉\",9,\"﹔﹕﹖﹗﹙\",8],[\"a980\",\"﹢\",4,\"﹨﹩﹪﹫\"],[\"a996\",\"〇\"],[\"a9a4\",\"─\",75],[\"aa40\",\"狜狝狟狢\",5,\"狪狫狵狶狹狽狾狿猀猂猄\",5,\"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀\",8],[\"aa80\",\"獉獊獋獌獎獏獑獓獔獕獖獘\",7,\"獡\",10,\"獮獰獱\"],[\"ab40\",\"獲\",11,\"獿\",4,\"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣\",5,\"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃\",4],[\"ab80\",\"珋珌珎珒\",6,\"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳\",4],[\"ac40\",\"珸\",10,\"琄琇琈琋琌琍琎琑\",8,\"琜\",5,\"琣琤琧琩琫琭琯琱琲琷\",4,\"琽琾琿瑀瑂\",11],[\"ac80\",\"瑎\",6,\"瑖瑘瑝瑠\",12,\"瑮瑯瑱\",4,\"瑸瑹瑺\"],[\"ad40\",\"瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑\",10,\"璝璟\",7,\"璪\",15,\"璻\",12],[\"ad80\",\"瓈\",9,\"瓓\",8,\"瓝瓟瓡瓥瓧\",6,\"瓰瓱瓲\"],[\"ae40\",\"瓳瓵瓸\",6,\"甀甁甂甃甅\",7,\"甎甐甒甔甕甖甗甛甝甞甠\",4,\"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘\"],[\"ae80\",\"畝\",7,\"畧畨畩畫\",6,\"畳畵當畷畺\",4,\"疀疁疂疄疅疇\"],[\"af40\",\"疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦\",4,\"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇\"],[\"af80\",\"瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄\"],[\"b040\",\"癅\",6,\"癎\",5,\"癕癗\",4,\"癝癟癠癡癢癤\",6,\"癬癭癮癰\",7,\"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛\"],[\"b080\",\"皜\",7,\"皥\",8,\"皯皰皳皵\",9,\"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥\"],[\"b140\",\"盄盇盉盋盌盓盕盙盚盜盝盞盠\",4,\"盦\",7,\"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎\",10,\"眛眜眝眞眡眣眤眥眧眪眫\"],[\"b180\",\"眬眮眰\",4,\"眹眻眽眾眿睂睄睅睆睈\",7,\"睒\",7,\"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳\"],[\"b240\",\"睝睞睟睠睤睧睩睪睭\",11,\"睺睻睼瞁瞂瞃瞆\",5,\"瞏瞐瞓\",11,\"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶\",4],[\"b280\",\"瞼瞾矀\",12,\"矎\",8,\"矘矙矚矝\",4,\"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖\"],[\"b340\",\"矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃\",5,\"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚\"],[\"b380\",\"硛硜硞\",11,\"硯\",7,\"硸硹硺硻硽\",6,\"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚\"],[\"b440\",\"碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨\",7,\"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚\",9],[\"b480\",\"磤磥磦磧磩磪磫磭\",4,\"磳磵磶磸磹磻\",5,\"礂礃礄礆\",6,\"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮\"],[\"b540\",\"礍\",5,\"礔\",9,\"礟\",4,\"礥\",14,\"礵\",4,\"礽礿祂祃祄祅祇祊\",8,\"祔祕祘祙祡祣\"],[\"b580\",\"祤祦祩祪祫祬祮祰\",6,\"祹祻\",4,\"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠\"],[\"b640\",\"禓\",6,\"禛\",11,\"禨\",10,\"禴\",4,\"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙\",5,\"秠秡秢秥秨秪\"],[\"b680\",\"秬秮秱\",6,\"秹秺秼秾秿稁稄稅稇稈稉稊稌稏\",4,\"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二\"],[\"b740\",\"稝稟稡稢稤\",14,\"稴稵稶稸稺稾穀\",5,\"穇\",9,\"穒\",4,\"穘\",16],[\"b780\",\"穩\",6,\"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服\"],[\"b840\",\"窣窤窧窩窪窫窮\",4,\"窴\",10,\"竀\",10,\"竌\",9,\"竗竘竚竛竜竝竡竢竤竧\",5,\"竮竰竱竲竳\"],[\"b880\",\"竴\",4,\"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹\"],[\"b940\",\"笯笰笲笴笵笶笷笹笻笽笿\",5,\"筆筈筊筍筎筓筕筗筙筜筞筟筡筣\",10,\"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆\",6,\"箎箏\"],[\"b980\",\"箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹\",7,\"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈\"],[\"ba40\",\"篅篈築篊篋篍篎篏篐篒篔\",4,\"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲\",4,\"篸篹篺篻篽篿\",7,\"簈簉簊簍簎簐\",5,\"簗簘簙\"],[\"ba80\",\"簚\",4,\"簠\",5,\"簨簩簫\",12,\"簹\",5,\"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖\"],[\"bb40\",\"籃\",9,\"籎\",36,\"籵\",5,\"籾\",9],[\"bb80\",\"粈粊\",6,\"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴\",4,\"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕\"],[\"bc40\",\"粿糀糂糃糄糆糉糋糎\",6,\"糘糚糛糝糞糡\",6,\"糩\",5,\"糰\",7,\"糹糺糼\",13,\"紋\",5],[\"bc80\",\"紑\",14,\"紡紣紤紥紦紨紩紪紬紭紮細\",6,\"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件\"],[\"bd40\",\"紷\",54,\"絯\",7],[\"bd80\",\"絸\",32,\"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸\"],[\"be40\",\"継\",12,\"綧\",6,\"綯\",42],[\"be80\",\"線\",32,\"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻\"],[\"bf40\",\"緻\",62],[\"bf80\",\"縺縼\",4,\"繂\",4,\"繈\",21,\"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀\"],[\"c040\",\"繞\",35,\"纃\",23,\"纜纝纞\"],[\"c080\",\"纮纴纻纼绖绤绬绹缊缐缞缷缹缻\",6,\"罃罆\",9,\"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐\"],[\"c140\",\"罖罙罛罜罝罞罠罣\",4,\"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂\",7,\"羋羍羏\",4,\"羕\",4,\"羛羜羠羢羣羥羦羨\",6,\"羱\"],[\"c180\",\"羳\",4,\"羺羻羾翀翂翃翄翆翇翈翉翋翍翏\",4,\"翖翗翙\",5,\"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿\"],[\"c240\",\"翤翧翨翪翫翬翭翯翲翴\",6,\"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫\",5,\"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗\"],[\"c280\",\"聙聛\",13,\"聫\",5,\"聲\",11,\"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫\"],[\"c340\",\"聾肁肂肅肈肊肍\",5,\"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇\",4,\"胏\",6,\"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋\"],[\"c380\",\"脌脕脗脙脛脜脝脟\",12,\"脭脮脰脳脴脵脷脹\",4,\"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸\"],[\"c440\",\"腀\",5,\"腇腉腍腎腏腒腖腗腘腛\",4,\"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃\",4,\"膉膋膌膍膎膐膒\",5,\"膙膚膞\",4,\"膤膥\"],[\"c480\",\"膧膩膫\",7,\"膴\",5,\"膼膽膾膿臄臅臇臈臉臋臍\",6,\"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁\"],[\"c540\",\"臔\",14,\"臤臥臦臨臩臫臮\",4,\"臵\",5,\"臽臿舃與\",4,\"舎舏舑舓舕\",5,\"舝舠舤舥舦舧舩舮舲舺舼舽舿\"],[\"c580\",\"艀艁艂艃艅艆艈艊艌艍艎艐\",7,\"艙艛艜艝艞艠\",7,\"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗\"],[\"c640\",\"艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸\"],[\"c680\",\"苺苼\",4,\"茊茋茍茐茒茓茖茘茙茝\",9,\"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐\"],[\"c740\",\"茾茿荁荂荄荅荈荊\",4,\"荓荕\",4,\"荝荢荰\",6,\"荹荺荾\",6,\"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡\",6,\"莬莭莮\"],[\"c780\",\"莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠\"],[\"c840\",\"菮華菳\",4,\"菺菻菼菾菿萀萂萅萇萈萉萊萐萒\",5,\"萙萚萛萞\",5,\"萩\",7,\"萲\",5,\"萹萺萻萾\",7,\"葇葈葉\"],[\"c880\",\"葊\",6,\"葒\",4,\"葘葝葞葟葠葢葤\",4,\"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁\"],[\"c940\",\"葽\",4,\"蒃蒄蒅蒆蒊蒍蒏\",7,\"蒘蒚蒛蒝蒞蒟蒠蒢\",12,\"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗\"],[\"c980\",\"蓘\",4,\"蓞蓡蓢蓤蓧\",4,\"蓭蓮蓯蓱\",10,\"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳\"],[\"ca40\",\"蔃\",8,\"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢\",8,\"蔭\",9,\"蔾\",4,\"蕄蕅蕆蕇蕋\",10],[\"ca80\",\"蕗蕘蕚蕛蕜蕝蕟\",4,\"蕥蕦蕧蕩\",8,\"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱\"],[\"cb40\",\"薂薃薆薈\",6,\"薐\",10,\"薝\",6,\"薥薦薧薩薫薬薭薱\",5,\"薸薺\",6,\"藂\",6,\"藊\",4,\"藑藒\"],[\"cb80\",\"藔藖\",5,\"藝\",6,\"藥藦藧藨藪\",14,\"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔\"],[\"cc40\",\"藹藺藼藽藾蘀\",4,\"蘆\",10,\"蘒蘓蘔蘕蘗\",15,\"蘨蘪\",13,\"蘹蘺蘻蘽蘾蘿虀\"],[\"cc80\",\"虁\",11,\"虒虓處\",4,\"虛虜虝號虠虡虣\",7,\"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃\"],[\"cd40\",\"虭虯虰虲\",6,\"蚃\",6,\"蚎\",4,\"蚔蚖\",5,\"蚞\",4,\"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻\",4,\"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜\"],[\"cd80\",\"蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威\"],[\"ce40\",\"蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀\",6,\"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚\",5,\"蝡蝢蝦\",7,\"蝯蝱蝲蝳蝵\"],[\"ce80\",\"蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎\",4,\"螔螕螖螘\",6,\"螠\",4,\"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺\"],[\"cf40\",\"螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁\",4,\"蟇蟈蟉蟌\",4,\"蟔\",6,\"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯\",9],[\"cf80\",\"蟺蟻蟼蟽蟿蠀蠁蠂蠄\",5,\"蠋\",7,\"蠔蠗蠘蠙蠚蠜\",4,\"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓\"],[\"d040\",\"蠤\",13,\"蠳\",5,\"蠺蠻蠽蠾蠿衁衂衃衆\",5,\"衎\",5,\"衕衖衘衚\",6,\"衦衧衪衭衯衱衳衴衵衶衸衹衺\"],[\"d080\",\"衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗\",4,\"袝\",4,\"袣袥\",5,\"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄\"],[\"d140\",\"袬袮袯袰袲\",4,\"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚\",4,\"裠裡裦裧裩\",6,\"裲裵裶裷裺裻製裿褀褁褃\",5],[\"d180\",\"褉褋\",4,\"褑褔\",4,\"褜\",4,\"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶\"],[\"d240\",\"褸\",8,\"襂襃襅\",24,\"襠\",5,\"襧\",19,\"襼\"],[\"d280\",\"襽襾覀覂覄覅覇\",26,\"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐\"],[\"d340\",\"覢\",30,\"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴\",6],[\"d380\",\"觻\",4,\"訁\",5,\"計\",21,\"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉\"],[\"d440\",\"訞\",31,\"訿\",8,\"詉\",21],[\"d480\",\"詟\",25,\"詺\",6,\"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧\"],[\"d540\",\"誁\",7,\"誋\",7,\"誔\",46],[\"d580\",\"諃\",32,\"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政\"],[\"d640\",\"諤\",34,\"謈\",27],[\"d680\",\"謤謥謧\",30,\"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑\"],[\"d740\",\"譆\",31,\"譧\",4,\"譭\",25],[\"d780\",\"讇\",24,\"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座\"],[\"d840\",\"谸\",8,\"豂豃豄豅豈豊豋豍\",7,\"豖豗豘豙豛\",5,\"豣\",6,\"豬\",6,\"豴豵豶豷豻\",6,\"貃貄貆貇\"],[\"d880\",\"貈貋貍\",6,\"貕貖貗貙\",20,\"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝\"],[\"d940\",\"貮\",62],[\"d980\",\"賭\",32,\"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼\"],[\"da40\",\"贎\",14,\"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸\",8,\"趂趃趆趇趈趉趌\",4,\"趒趓趕\",9,\"趠趡\"],[\"da80\",\"趢趤\",12,\"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺\"],[\"db40\",\"跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾\",6,\"踆踇踈踋踍踎踐踑踒踓踕\",7,\"踠踡踤\",4,\"踫踭踰踲踳踴踶踷踸踻踼踾\"],[\"db80\",\"踿蹃蹅蹆蹌\",4,\"蹓\",5,\"蹚\",11,\"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝\"],[\"dc40\",\"蹳蹵蹷\",4,\"蹽蹾躀躂躃躄躆躈\",6,\"躑躒躓躕\",6,\"躝躟\",11,\"躭躮躰躱躳\",6,\"躻\",7],[\"dc80\",\"軃\",10,\"軏\",21,\"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥\"],[\"dd40\",\"軥\",62],[\"dd80\",\"輤\",32,\"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺\"],[\"de40\",\"轅\",32,\"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆\"],[\"de80\",\"迉\",4,\"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖\"],[\"df40\",\"這逜連逤逥逧\",5,\"逰\",4,\"逷逹逺逽逿遀遃遅遆遈\",4,\"過達違遖遙遚遜\",5,\"遤遦遧適遪遫遬遯\",4,\"遶\",6,\"遾邁\"],[\"df80\",\"還邅邆邇邉邊邌\",4,\"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼\"],[\"e040\",\"郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅\",19,\"鄚鄛鄜\"],[\"e080\",\"鄝鄟鄠鄡鄤\",10,\"鄰鄲\",6,\"鄺\",8,\"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼\"],[\"e140\",\"酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀\",4,\"醆醈醊醎醏醓\",6,\"醜\",5,\"醤\",5,\"醫醬醰醱醲醳醶醷醸醹醻\"],[\"e180\",\"醼\",10,\"釈釋釐釒\",9,\"針\",8,\"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺\"],[\"e240\",\"釦\",62],[\"e280\",\"鈥\",32,\"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧\",5,\"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂\"],[\"e340\",\"鉆\",45,\"鉵\",16],[\"e380\",\"銆\",7,\"銏\",24,\"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾\"],[\"e440\",\"銨\",5,\"銯\",24,\"鋉\",31],[\"e480\",\"鋩\",32,\"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑\"],[\"e540\",\"錊\",51,\"錿\",10],[\"e580\",\"鍊\",31,\"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣\"],[\"e640\",\"鍬\",34,\"鎐\",27],[\"e680\",\"鎬\",29,\"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩\"],[\"e740\",\"鏎\",7,\"鏗\",54],[\"e780\",\"鐎\",32,\"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡\",6,\"缪缫缬缭缯\",4,\"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬\"],[\"e840\",\"鐯\",14,\"鐿\",43,\"鑬鑭鑮鑯\"],[\"e880\",\"鑰\",20,\"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹\"],[\"e940\",\"锧锳锽镃镈镋镕镚镠镮镴镵長\",7,\"門\",42],[\"e980\",\"閫\",32,\"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋\"],[\"ea40\",\"闌\",27,\"闬闿阇阓阘阛阞阠阣\",6,\"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗\"],[\"ea80\",\"陘陙陚陜陝陞陠陣陥陦陫陭\",4,\"陳陸\",12,\"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰\"],[\"eb40\",\"隌階隑隒隓隕隖隚際隝\",9,\"隨\",7,\"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖\",9,\"雡\",6,\"雫\"],[\"eb80\",\"雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗\",4,\"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻\"],[\"ec40\",\"霡\",8,\"霫霬霮霯霱霳\",4,\"霺霻霼霽霿\",18,\"靔靕靗靘靚靜靝靟靣靤靦靧靨靪\",7],[\"ec80\",\"靲靵靷\",4,\"靽\",7,\"鞆\",4,\"鞌鞎鞏鞐鞓鞕鞖鞗鞙\",4,\"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐\"],[\"ed40\",\"鞞鞟鞡鞢鞤\",6,\"鞬鞮鞰鞱鞳鞵\",46],[\"ed80\",\"韤韥韨韮\",4,\"韴韷\",23,\"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨\"],[\"ee40\",\"頏\",62],[\"ee80\",\"顎\",32,\"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶\",4,\"钼钽钿铄铈\",6,\"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪\"],[\"ef40\",\"顯\",5,\"颋颎颒颕颙颣風\",37,\"飏飐飔飖飗飛飜飝飠\",4],[\"ef80\",\"飥飦飩\",30,\"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒\",4,\"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤\",8,\"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔\"],[\"f040\",\"餈\",4,\"餎餏餑\",28,\"餯\",26],[\"f080\",\"饊\",9,\"饖\",12,\"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨\",4,\"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦\",6,\"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙\"],[\"f140\",\"馌馎馚\",10,\"馦馧馩\",47],[\"f180\",\"駙\",32,\"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃\"],[\"f240\",\"駺\",62],[\"f280\",\"騹\",32,\"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒\"],[\"f340\",\"驚\",17,\"驲骃骉骍骎骔骕骙骦骩\",6,\"骲骳骴骵骹骻骽骾骿髃髄髆\",4,\"髍髎髏髐髒體髕髖髗髙髚髛髜\"],[\"f380\",\"髝髞髠髢髣髤髥髧髨髩髪髬髮髰\",8,\"髺髼\",6,\"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋\"],[\"f440\",\"鬇鬉\",5,\"鬐鬑鬒鬔\",10,\"鬠鬡鬢鬤\",10,\"鬰鬱鬳\",7,\"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕\",5],[\"f480\",\"魛\",32,\"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤\"],[\"f540\",\"魼\",62],[\"f580\",\"鮻\",32,\"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜\"],[\"f640\",\"鯜\",62],[\"f680\",\"鰛\",32,\"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅\",5,\"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞\",5,\"鲥\",4,\"鲫鲭鲮鲰\",7,\"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋\"],[\"f740\",\"鰼\",62],[\"f780\",\"鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾\",4,\"鳈鳉鳑鳒鳚鳛鳠鳡鳌\",4,\"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄\"],[\"f840\",\"鳣\",62],[\"f880\",\"鴢\",32],[\"f940\",\"鵃\",62],[\"f980\",\"鶂\",32],[\"fa40\",\"鶣\",62],[\"fa80\",\"鷢\",32],[\"fb40\",\"鸃\",27,\"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴\",9,\"麀\"],[\"fb80\",\"麁麃麄麅麆麉麊麌\",5,\"麔\",8,\"麞麠\",5,\"麧麨麩麪\"],[\"fc40\",\"麫\",8,\"麵麶麷麹麺麼麿\",4,\"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰\",8,\"黺黽黿\",6],[\"fc80\",\"鼆\",4,\"鼌鼏鼑鼒鼔鼕鼖鼘鼚\",5,\"鼡鼣\",8,\"鼭鼮鼰鼱\"],[\"fd40\",\"鼲\",4,\"鼸鼺鼼鼿\",4,\"齅\",10,\"齒\",38],[\"fd80\",\"齹\",5,\"龁龂龍\",11,\"龜龝龞龡\",4,\"郎凉秊裏隣\"],[\"fe40\",\"兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩\"]]');\n\n/***/ }),\n\n/***/ 7348:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127],[\"8141\",\"갂갃갅갆갋\",4,\"갘갞갟갡갢갣갥\",6,\"갮갲갳갴\"],[\"8161\",\"갵갶갷갺갻갽갾갿걁\",9,\"걌걎\",5,\"걕\"],[\"8181\",\"걖걗걙걚걛걝\",18,\"걲걳걵걶걹걻\",4,\"겂겇겈겍겎겏겑겒겓겕\",6,\"겞겢\",5,\"겫겭겮겱\",6,\"겺겾겿곀곂곃곅곆곇곉곊곋곍\",7,\"곖곘\",7,\"곢곣곥곦곩곫곭곮곲곴곷\",4,\"곾곿괁괂괃괅괇\",4,\"괎괐괒괓\"],[\"8241\",\"괔괕괖괗괙괚괛괝괞괟괡\",7,\"괪괫괮\",5],[\"8261\",\"괶괷괹괺괻괽\",6,\"굆굈굊\",5,\"굑굒굓굕굖굗\"],[\"8281\",\"굙\",7,\"굢굤\",7,\"굮굯굱굲굷굸굹굺굾궀궃\",4,\"궊궋궍궎궏궑\",10,\"궞\",5,\"궥\",17,\"궸\",7,\"귂귃귅귆귇귉\",6,\"귒귔\",7,\"귝귞귟귡귢귣귥\",18],[\"8341\",\"귺귻귽귾긂\",5,\"긊긌긎\",5,\"긕\",7],[\"8361\",\"긝\",18,\"긲긳긵긶긹긻긼\"],[\"8381\",\"긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗\",4,\"깞깢깣깤깦깧깪깫깭깮깯깱\",6,\"깺깾\",5,\"꺆\",5,\"꺍\",46,\"꺿껁껂껃껅\",6,\"껎껒\",5,\"껚껛껝\",8],[\"8441\",\"껦껧껩껪껬껮\",5,\"껵껶껷껹껺껻껽\",8],[\"8461\",\"꼆꼉꼊꼋꼌꼎꼏꼑\",18],[\"8481\",\"꼤\",7,\"꼮꼯꼱꼳꼵\",6,\"꼾꽀꽄꽅꽆꽇꽊\",5,\"꽑\",10,\"꽞\",5,\"꽦\",18,\"꽺\",5,\"꾁꾂꾃꾅꾆꾇꾉\",6,\"꾒꾓꾔꾖\",5,\"꾝\",26,\"꾺꾻꾽꾾\"],[\"8541\",\"꾿꿁\",5,\"꿊꿌꿏\",4,\"꿕\",6,\"꿝\",4],[\"8561\",\"꿢\",5,\"꿪\",5,\"꿲꿳꿵꿶꿷꿹\",6,\"뀂뀃\"],[\"8581\",\"뀅\",6,\"뀍뀎뀏뀑뀒뀓뀕\",6,\"뀞\",9,\"뀩\",26,\"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞\",29,\"끾끿낁낂낃낅\",6,\"낎낐낒\",5,\"낛낝낞낣낤\"],[\"8641\",\"낥낦낧낪낰낲낶낷낹낺낻낽\",6,\"냆냊\",5,\"냒\"],[\"8661\",\"냓냕냖냗냙\",6,\"냡냢냣냤냦\",10],[\"8681\",\"냱\",22,\"넊넍넎넏넑넔넕넖넗넚넞\",4,\"넦넧넩넪넫넭\",6,\"넶넺\",5,\"녂녃녅녆녇녉\",6,\"녒녓녖녗녙녚녛녝녞녟녡\",22,\"녺녻녽녾녿놁놃\",4,\"놊놌놎놏놐놑놕놖놗놙놚놛놝\"],[\"8741\",\"놞\",9,\"놩\",15],[\"8761\",\"놹\",18,\"뇍뇎뇏뇑뇒뇓뇕\"],[\"8781\",\"뇖\",5,\"뇞뇠\",7,\"뇪뇫뇭뇮뇯뇱\",7,\"뇺뇼뇾\",5,\"눆눇눉눊눍\",6,\"눖눘눚\",5,\"눡\",18,\"눵\",6,\"눽\",26,\"뉙뉚뉛뉝뉞뉟뉡\",6,\"뉪\",4],[\"8841\",\"뉯\",4,\"뉶\",5,\"뉽\",6,\"늆늇늈늊\",4],[\"8861\",\"늏늒늓늕늖늗늛\",4,\"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷\"],[\"8881\",\"늸\",15,\"닊닋닍닎닏닑닓\",4,\"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉\",6,\"댒댖\",5,\"댝\",54,\"덗덙덚덝덠덡덢덣\"],[\"8941\",\"덦덨덪덬덭덯덲덳덵덶덷덹\",6,\"뎂뎆\",5,\"뎍\"],[\"8961\",\"뎎뎏뎑뎒뎓뎕\",10,\"뎢\",5,\"뎩뎪뎫뎭\"],[\"8981\",\"뎮\",21,\"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩\",18,\"돽\",18,\"됑\",6,\"됙됚됛됝됞됟됡\",6,\"됪됬\",7,\"됵\",15],[\"8a41\",\"둅\",10,\"둒둓둕둖둗둙\",6,\"둢둤둦\"],[\"8a61\",\"둧\",4,\"둭\",18,\"뒁뒂\"],[\"8a81\",\"뒃\",4,\"뒉\",19,\"뒞\",5,\"뒥뒦뒧뒩뒪뒫뒭\",7,\"뒶뒸뒺\",5,\"듁듂듃듅듆듇듉\",6,\"듑듒듓듔듖\",5,\"듞듟듡듢듥듧\",4,\"듮듰듲\",5,\"듹\",26,\"딖딗딙딚딝\"],[\"8b41\",\"딞\",5,\"딦딫\",4,\"딲딳딵딶딷딹\",6,\"땂땆\"],[\"8b61\",\"땇땈땉땊땎땏땑땒땓땕\",6,\"땞땢\",8],[\"8b81\",\"땫\",52,\"떢떣떥떦떧떩떬떭떮떯떲떶\",4,\"떾떿뗁뗂뗃뗅\",6,\"뗎뗒\",5,\"뗙\",18,\"뗭\",18],[\"8c41\",\"똀\",15,\"똒똓똕똖똗똙\",4],[\"8c61\",\"똞\",6,\"똦\",5,\"똭\",6,\"똵\",5],[\"8c81\",\"똻\",12,\"뙉\",26,\"뙥뙦뙧뙩\",50,\"뚞뚟뚡뚢뚣뚥\",5,\"뚭뚮뚯뚰뚲\",16],[\"8d41\",\"뛃\",16,\"뛕\",8],[\"8d61\",\"뛞\",17,\"뛱뛲뛳뛵뛶뛷뛹뛺\"],[\"8d81\",\"뛻\",4,\"뜂뜃뜄뜆\",33,\"뜪뜫뜭뜮뜱\",6,\"뜺뜼\",7,\"띅띆띇띉띊띋띍\",6,\"띖\",9,\"띡띢띣띥띦띧띩\",6,\"띲띴띶\",5,\"띾띿랁랂랃랅\",6,\"랎랓랔랕랚랛랝랞\"],[\"8e41\",\"랟랡\",6,\"랪랮\",5,\"랶랷랹\",8],[\"8e61\",\"럂\",4,\"럈럊\",19],[\"8e81\",\"럞\",13,\"럮럯럱럲럳럵\",6,\"럾렂\",4,\"렊렋렍렎렏렑\",6,\"렚렜렞\",5,\"렦렧렩렪렫렭\",6,\"렶렺\",5,\"롁롂롃롅\",11,\"롒롔\",7,\"롞롟롡롢롣롥\",6,\"롮롰롲\",5,\"롹롺롻롽\",7],[\"8f41\",\"뢅\",7,\"뢎\",17],[\"8f61\",\"뢠\",7,\"뢩\",6,\"뢱뢲뢳뢵뢶뢷뢹\",4],[\"8f81\",\"뢾뢿룂룄룆\",5,\"룍룎룏룑룒룓룕\",7,\"룞룠룢\",5,\"룪룫룭룮룯룱\",6,\"룺룼룾\",5,\"뤅\",18,\"뤙\",6,\"뤡\",26,\"뤾뤿륁륂륃륅\",6,\"륍륎륐륒\",5],[\"9041\",\"륚륛륝륞륟륡\",6,\"륪륬륮\",5,\"륶륷륹륺륻륽\"],[\"9061\",\"륾\",5,\"릆릈릋릌릏\",15],[\"9081\",\"릟\",12,\"릮릯릱릲릳릵\",6,\"릾맀맂\",5,\"맊맋맍맓\",4,\"맚맜맟맠맢맦맧맩맪맫맭\",6,\"맶맻\",4,\"먂\",5,\"먉\",11,\"먖\",33,\"먺먻먽먾먿멁멃멄멅멆\"],[\"9141\",\"멇멊멌멏멐멑멒멖멗멙멚멛멝\",6,\"멦멪\",5],[\"9161\",\"멲멳멵멶멷멹\",9,\"몆몈몉몊몋몍\",5],[\"9181\",\"몓\",20,\"몪몭몮몯몱몳\",4,\"몺몼몾\",5,\"뫅뫆뫇뫉\",14,\"뫚\",33,\"뫽뫾뫿묁묂묃묅\",7,\"묎묐묒\",5,\"묙묚묛묝묞묟묡\",6],[\"9241\",\"묨묪묬\",7,\"묷묹묺묿\",4,\"뭆뭈뭊뭋뭌뭎뭑뭒\"],[\"9261\",\"뭓뭕뭖뭗뭙\",7,\"뭢뭤\",7,\"뭭\",4],[\"9281\",\"뭲\",21,\"뮉뮊뮋뮍뮎뮏뮑\",18,\"뮥뮦뮧뮩뮪뮫뮭\",6,\"뮵뮶뮸\",7,\"믁믂믃믅믆믇믉\",6,\"믑믒믔\",35,\"믺믻믽믾밁\"],[\"9341\",\"밃\",4,\"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵\"],[\"9361\",\"밶밷밹\",6,\"뱂뱆뱇뱈뱊뱋뱎뱏뱑\",8],[\"9381\",\"뱚뱛뱜뱞\",37,\"벆벇벉벊벍벏\",4,\"벖벘벛\",4,\"벢벣벥벦벩\",6,\"벲벶\",5,\"벾벿볁볂볃볅\",7,\"볎볒볓볔볖볗볙볚볛볝\",22,\"볷볹볺볻볽\"],[\"9441\",\"볾\",5,\"봆봈봊\",5,\"봑봒봓봕\",8],[\"9461\",\"봞\",5,\"봥\",6,\"봭\",12],[\"9481\",\"봺\",5,\"뵁\",6,\"뵊뵋뵍뵎뵏뵑\",6,\"뵚\",9,\"뵥뵦뵧뵩\",22,\"붂붃붅붆붋\",4,\"붒붔붖붗붘붛붝\",6,\"붥\",10,\"붱\",6,\"붹\",24],[\"9541\",\"뷒뷓뷖뷗뷙뷚뷛뷝\",11,\"뷪\",5,\"뷱\"],[\"9561\",\"뷲뷳뷵뷶뷷뷹\",6,\"븁븂븄븆\",5,\"븎븏븑븒븓\"],[\"9581\",\"븕\",6,\"븞븠\",35,\"빆빇빉빊빋빍빏\",4,\"빖빘빜빝빞빟빢빣빥빦빧빩빫\",4,\"빲빶\",4,\"빾빿뺁뺂뺃뺅\",6,\"뺎뺒\",5,\"뺚\",13,\"뺩\",14],[\"9641\",\"뺸\",23,\"뻒뻓\"],[\"9661\",\"뻕뻖뻙\",6,\"뻡뻢뻦\",5,\"뻭\",8],[\"9681\",\"뻶\",10,\"뼂\",5,\"뼊\",13,\"뼚뼞\",33,\"뽂뽃뽅뽆뽇뽉\",6,\"뽒뽓뽔뽖\",44],[\"9741\",\"뾃\",16,\"뾕\",8],[\"9761\",\"뾞\",17,\"뾱\",7],[\"9781\",\"뾹\",11,\"뿆\",5,\"뿎뿏뿑뿒뿓뿕\",6,\"뿝뿞뿠뿢\",89,\"쀽쀾쀿\"],[\"9841\",\"쁀\",16,\"쁒\",5,\"쁙쁚쁛\"],[\"9861\",\"쁝쁞쁟쁡\",6,\"쁪\",15],[\"9881\",\"쁺\",21,\"삒삓삕삖삗삙\",6,\"삢삤삦\",5,\"삮삱삲삷\",4,\"삾샂샃샄샆샇샊샋샍샎샏샑\",6,\"샚샞\",5,\"샦샧샩샪샫샭\",6,\"샶샸샺\",5,\"섁섂섃섅섆섇섉\",6,\"섑섒섓섔섖\",5,\"섡섢섥섨섩섪섫섮\"],[\"9941\",\"섲섳섴섵섷섺섻섽섾섿셁\",6,\"셊셎\",5,\"셖셗\"],[\"9961\",\"셙셚셛셝\",6,\"셦셪\",5,\"셱셲셳셵셶셷셹셺셻\"],[\"9981\",\"셼\",8,\"솆\",5,\"솏솑솒솓솕솗\",4,\"솞솠솢솣솤솦솧솪솫솭솮솯솱\",11,\"솾\",5,\"쇅쇆쇇쇉쇊쇋쇍\",6,\"쇕쇖쇙\",6,\"쇡쇢쇣쇥쇦쇧쇩\",6,\"쇲쇴\",7,\"쇾쇿숁숂숃숅\",6,\"숎숐숒\",5,\"숚숛숝숞숡숢숣\"],[\"9a41\",\"숤숥숦숧숪숬숮숰숳숵\",16],[\"9a61\",\"쉆쉇쉉\",6,\"쉒쉓쉕쉖쉗쉙\",6,\"쉡쉢쉣쉤쉦\"],[\"9a81\",\"쉧\",4,\"쉮쉯쉱쉲쉳쉵\",6,\"쉾슀슂\",5,\"슊\",5,\"슑\",6,\"슙슚슜슞\",5,\"슦슧슩슪슫슮\",5,\"슶슸슺\",33,\"싞싟싡싢싥\",5,\"싮싰싲싳싴싵싷싺싽싾싿쌁\",6,\"쌊쌋쌎쌏\"],[\"9b41\",\"쌐쌑쌒쌖쌗쌙쌚쌛쌝\",6,\"쌦쌧쌪\",8],[\"9b61\",\"쌳\",17,\"썆\",7],[\"9b81\",\"썎\",25,\"썪썫썭썮썯썱썳\",4,\"썺썻썾\",5,\"쎅쎆쎇쎉쎊쎋쎍\",50,\"쏁\",22,\"쏚\"],[\"9c41\",\"쏛쏝쏞쏡쏣\",4,\"쏪쏫쏬쏮\",5,\"쏶쏷쏹\",5],[\"9c61\",\"쏿\",8,\"쐉\",6,\"쐑\",9],[\"9c81\",\"쐛\",8,\"쐥\",6,\"쐭쐮쐯쐱쐲쐳쐵\",6,\"쐾\",9,\"쑉\",26,\"쑦쑧쑩쑪쑫쑭\",6,\"쑶쑷쑸쑺\",5,\"쒁\",18,\"쒕\",6,\"쒝\",12],[\"9d41\",\"쒪\",13,\"쒹쒺쒻쒽\",8],[\"9d61\",\"쓆\",25],[\"9d81\",\"쓠\",8,\"쓪\",5,\"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂\",9,\"씍씎씏씑씒씓씕\",6,\"씝\",10,\"씪씫씭씮씯씱\",6,\"씺씼씾\",5,\"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩\",6,\"앲앶\",5,\"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔\"],[\"9e41\",\"얖얙얚얛얝얞얟얡\",7,\"얪\",9,\"얶\"],[\"9e61\",\"얷얺얿\",4,\"엋엍엏엒엓엕엖엗엙\",6,\"엢엤엦엧\"],[\"9e81\",\"엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑\",6,\"옚옝\",6,\"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉\",6,\"왒왖\",5,\"왞왟왡\",10,\"왭왮왰왲\",5,\"왺왻왽왾왿욁\",6,\"욊욌욎\",5,\"욖욗욙욚욛욝\",6,\"욦\"],[\"9f41\",\"욨욪\",5,\"욲욳욵욶욷욻\",4,\"웂웄웆\",5,\"웎\"],[\"9f61\",\"웏웑웒웓웕\",6,\"웞웟웢\",5,\"웪웫웭웮웯웱웲\"],[\"9f81\",\"웳\",4,\"웺웻웼웾\",5,\"윆윇윉윊윋윍\",6,\"윖윘윚\",5,\"윢윣윥윦윧윩\",6,\"윲윴윶윸윹윺윻윾윿읁읂읃읅\",4,\"읋읎읐읙읚읛읝읞읟읡\",6,\"읩읪읬\",7,\"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛\",4,\"잢잧\",4,\"잮잯잱잲잳잵잶잷\"],[\"a041\",\"잸잹잺잻잾쟂\",5,\"쟊쟋쟍쟏쟑\",6,\"쟙쟚쟛쟜\"],[\"a061\",\"쟞\",5,\"쟥쟦쟧쟩쟪쟫쟭\",13],[\"a081\",\"쟻\",4,\"젂젃젅젆젇젉젋\",4,\"젒젔젗\",4,\"젞젟젡젢젣젥\",6,\"젮젰젲\",5,\"젹젺젻젽젾젿졁\",6,\"졊졋졎\",5,\"졕\",26,\"졲졳졵졶졷졹졻\",4,\"좂좄좈좉좊좎\",5,\"좕\",7,\"좞좠좢좣좤\"],[\"a141\",\"좥좦좧좩\",18,\"좾좿죀죁\"],[\"a161\",\"죂죃죅죆죇죉죊죋죍\",6,\"죖죘죚\",5,\"죢죣죥\"],[\"a181\",\"죦\",14,\"죶\",5,\"죾죿줁줂줃줇\",4,\"줎 、。·‥…¨〃―∥\∼‘’“”〔〕〈\",9,\"±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬\"],[\"a241\",\"줐줒\",5,\"줙\",18],[\"a261\",\"줭\",6,\"줵\",18],[\"a281\",\"쥈\",7,\"쥒쥓쥕쥖쥗쥙\",6,\"쥢쥤\",7,\"쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®\"],[\"a341\",\"쥱쥲쥳쥵\",6,\"쥽\",10,\"즊즋즍즎즏\"],[\"a361\",\"즑\",6,\"즚즜즞\",16],[\"a381\",\"즯\",16,\"짂짃짅짆짉짋\",4,\"짒짔짗짘짛!\",58,\"₩]\",32,\" ̄\"],[\"a441\",\"짞짟짡짣짥짦짨짩짪짫짮짲\",5,\"짺짻짽짾짿쨁쨂쨃쨄\"],[\"a461\",\"쨅쨆쨇쨊쨎\",5,\"쨕쨖쨗쨙\",12],[\"a481\",\"쨦쨧쨨쨪\",28,\"ㄱ\",93],[\"a541\",\"쩇\",4,\"쩎쩏쩑쩒쩓쩕\",6,\"쩞쩢\",5,\"쩩쩪\"],[\"a561\",\"쩫\",17,\"쩾\",5,\"쪅쪆\"],[\"a581\",\"쪇\",16,\"쪙\",14,\"ⅰ\",9],[\"a5b0\",\"Ⅰ\",9],[\"a5c1\",\"Α\",16,\"Σ\",6],[\"a5e1\",\"α\",16,\"σ\",6],[\"a641\",\"쪨\",19,\"쪾쪿쫁쫂쫃쫅\"],[\"a661\",\"쫆\",5,\"쫎쫐쫒쫔쫕쫖쫗쫚\",5,\"쫡\",6],[\"a681\",\"쫨쫩쫪쫫쫭\",6,\"쫵\",18,\"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃\",7],[\"a741\",\"쬋\",4,\"쬑쬒쬓쬕쬖쬗쬙\",6,\"쬢\",7],[\"a761\",\"쬪\",22,\"쭂쭃쭄\"],[\"a781\",\"쭅쭆쭇쭊쭋쭍쭎쭏쭑\",6,\"쭚쭛쭜쭞\",5,\"쭥\",7,\"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙\",9,\"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰\",9,\"㎀\",4,\"㎺\",5,\"㎐\",4,\"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆\"],[\"a841\",\"쭭\",10,\"쭺\",14],[\"a861\",\"쮉\",18,\"쮝\",6],[\"a881\",\"쮤\",19,\"쮹\",11,\"ÆÐªĦ\"],[\"a8a6\",\"IJ\"],[\"a8a8\",\"ĿŁØŒºÞŦŊ\"],[\"a8b1\",\"㉠\",27,\"ⓐ\",25,\"①\",14,\"½⅓⅔¼¾⅛⅜⅝⅞\"],[\"a941\",\"쯅\",14,\"쯕\",10],[\"a961\",\"쯠쯡쯢쯣쯥쯦쯨쯪\",18],[\"a981\",\"쯽\",14,\"찎찏찑찒찓찕\",6,\"찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀\",27,\"⒜\",25,\"⑴\",14,\"¹²³⁴ⁿ₁₂₃₄\"],[\"aa41\",\"찥찦찪찫찭찯찱\",6,\"찺찿\",4,\"챆챇챉챊챋챍챎\"],[\"aa61\",\"챏\",4,\"챖챚\",5,\"챡챢챣챥챧챩\",6,\"챱챲\"],[\"aa81\",\"챳챴챶\",29,\"ぁ\",82],[\"ab41\",\"첔첕첖첗첚첛첝첞첟첡\",6,\"첪첮\",5,\"첶첷첹\"],[\"ab61\",\"첺첻첽\",6,\"쳆쳈쳊\",5,\"쳑쳒쳓쳕\",5],[\"ab81\",\"쳛\",8,\"쳥\",6,\"쳭쳮쳯쳱\",12,\"ァ\",85],[\"ac41\",\"쳾쳿촀촂\",5,\"촊촋촍촎촏촑\",6,\"촚촜촞촟촠\"],[\"ac61\",\"촡촢촣촥촦촧촩촪촫촭\",11,\"촺\",4],[\"ac81\",\"촿\",28,\"쵝쵞쵟А\",5,\"ЁЖ\",25],[\"acd1\",\"а\",5,\"ёж\",25],[\"ad41\",\"쵡쵢쵣쵥\",6,\"쵮쵰쵲\",5,\"쵹\",7],[\"ad61\",\"춁\",6,\"춉\",10,\"춖춗춙춚춛춝춞춟\"],[\"ad81\",\"춠춡춢춣춦춨춪\",5,\"춱\",18,\"췅\"],[\"ae41\",\"췆\",5,\"췍췎췏췑\",16],[\"ae61\",\"췢\",5,\"췩췪췫췭췮췯췱\",6,\"췺췼췾\",4],[\"ae81\",\"츃츅츆츇츉츊츋츍\",6,\"츕츖츗츘츚\",5,\"츢츣츥츦츧츩츪츫\"],[\"af41\",\"츬츭츮츯츲츴츶\",19],[\"af61\",\"칊\",13,\"칚칛칝칞칢\",5,\"칪칬\"],[\"af81\",\"칮\",5,\"칶칷칹칺칻칽\",6,\"캆캈캊\",5,\"캒캓캕캖캗캙\"],[\"b041\",\"캚\",5,\"캢캦\",5,\"캮\",12],[\"b061\",\"캻\",5,\"컂\",19],[\"b081\",\"컖\",13,\"컦컧컩컪컭\",6,\"컶컺\",5,\"가각간갇갈갉갊감\",7,\"같\",4,\"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆\"],[\"b141\",\"켂켃켅켆켇켉\",6,\"켒켔켖\",5,\"켝켞켟켡켢켣\"],[\"b161\",\"켥\",6,\"켮켲\",5,\"켹\",11],[\"b181\",\"콅\",14,\"콖콗콙콚콛콝\",6,\"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸\"],[\"b241\",\"콭콮콯콲콳콵콶콷콹\",6,\"쾁쾂쾃쾄쾆\",5,\"쾍\"],[\"b261\",\"쾎\",18,\"쾢\",5,\"쾩\"],[\"b281\",\"쾪\",5,\"쾱\",18,\"쿅\",6,\"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙\"],[\"b341\",\"쿌\",19,\"쿢쿣쿥쿦쿧쿩\"],[\"b361\",\"쿪\",5,\"쿲쿴쿶\",5,\"쿽쿾쿿퀁퀂퀃퀅\",5],[\"b381\",\"퀋\",5,\"퀒\",5,\"퀙\",19,\"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫\",4,\"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝\"],[\"b441\",\"퀮\",5,\"퀶퀷퀹퀺퀻퀽\",6,\"큆큈큊\",5],[\"b461\",\"큑큒큓큕큖큗큙\",6,\"큡\",10,\"큮큯\"],[\"b481\",\"큱큲큳큵\",6,\"큾큿킀킂\",18,\"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫\",4,\"닳담답닷\",4,\"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥\"],[\"b541\",\"킕\",14,\"킦킧킩킪킫킭\",5],[\"b561\",\"킳킶킸킺\",5,\"탂탃탅탆탇탊\",5,\"탒탖\",4],[\"b581\",\"탛탞탟탡탢탣탥\",6,\"탮탲\",5,\"탹\",11,\"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸\"],[\"b641\",\"턅\",7,\"턎\",17],[\"b661\",\"턠\",15,\"턲턳턵턶턷턹턻턼턽턾\"],[\"b681\",\"턿텂텆\",5,\"텎텏텑텒텓텕\",6,\"텞텠텢\",5,\"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗\"],[\"b741\",\"텮\",13,\"텽\",6,\"톅톆톇톉톊\"],[\"b761\",\"톋\",20,\"톢톣톥톦톧\"],[\"b781\",\"톩\",6,\"톲톴톶톷톸톹톻톽톾톿퇁\",14,\"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩\"],[\"b841\",\"퇐\",7,\"퇙\",17],[\"b861\",\"퇫\",8,\"퇵퇶퇷퇹\",13],[\"b881\",\"툈툊\",5,\"툑\",24,\"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많\",4,\"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼\"],[\"b941\",\"툪툫툮툯툱툲툳툵\",6,\"툾퉀퉂\",5,\"퉉퉊퉋퉌\"],[\"b961\",\"퉍\",14,\"퉝\",6,\"퉥퉦퉧퉨\"],[\"b981\",\"퉩\",22,\"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바\",4,\"받\",4,\"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗\"],[\"ba41\",\"튍튎튏튒튓튔튖\",5,\"튝튞튟튡튢튣튥\",6,\"튭\"],[\"ba61\",\"튮튯튰튲\",5,\"튺튻튽튾틁틃\",4,\"틊틌\",5],[\"ba81\",\"틒틓틕틖틗틙틚틛틝\",6,\"틦\",9,\"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤\"],[\"bb41\",\"틻\",4,\"팂팄팆\",5,\"팏팑팒팓팕팗\",4,\"팞팢팣\"],[\"bb61\",\"팤팦팧팪팫팭팮팯팱\",6,\"팺팾\",5,\"퍆퍇퍈퍉\"],[\"bb81\",\"퍊\",31,\"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤\"],[\"bc41\",\"퍪\",17,\"퍾퍿펁펂펃펅펆펇\"],[\"bc61\",\"펈펉펊펋펎펒\",5,\"펚펛펝펞펟펡\",6,\"펪펬펮\"],[\"bc81\",\"펯\",4,\"펵펶펷펹펺펻펽\",6,\"폆폇폊\",5,\"폑\",5,\"샥샨샬샴샵샷샹섀섄섈섐섕서\",4,\"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭\"],[\"bd41\",\"폗폙\",7,\"폢폤\",7,\"폮폯폱폲폳폵폶폷\"],[\"bd61\",\"폸폹폺폻폾퐀퐂\",5,\"퐉\",13],[\"bd81\",\"퐗\",5,\"퐞\",25,\"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰\"],[\"be41\",\"퐸\",7,\"푁푂푃푅\",14],[\"be61\",\"푔\",7,\"푝푞푟푡푢푣푥\",7,\"푮푰푱푲\"],[\"be81\",\"푳\",4,\"푺푻푽푾풁풃\",4,\"풊풌풎\",5,\"풕\",8,\"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄\",6,\"엌엎\"],[\"bf41\",\"풞\",10,\"풪\",14],[\"bf61\",\"풹\",18,\"퓍퓎퓏퓑퓒퓓퓕\"],[\"bf81\",\"퓖\",5,\"퓝퓞퓠\",7,\"퓩퓪퓫퓭퓮퓯퓱\",6,\"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염\",5,\"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨\"],[\"c041\",\"퓾\",5,\"픅픆픇픉픊픋픍\",6,\"픖픘\",5],[\"c061\",\"픞\",25],[\"c081\",\"픸픹픺픻픾픿핁핂핃핅\",6,\"핎핐핒\",5,\"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응\",7,\"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊\"],[\"c141\",\"핤핦핧핪핬핮\",5,\"핶핷핹핺핻핽\",6,\"햆햊햋\"],[\"c161\",\"햌햍햎햏햑\",19,\"햦햧\"],[\"c181\",\"햨\",31,\"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓\"],[\"c241\",\"헊헋헍헎헏헑헓\",4,\"헚헜헞\",5,\"헦헧헩헪헫헭헮\"],[\"c261\",\"헯\",4,\"헶헸헺\",5,\"혂혃혅혆혇혉\",6,\"혒\"],[\"c281\",\"혖\",5,\"혝혞혟혡혢혣혥\",7,\"혮\",9,\"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻\"],[\"c341\",\"혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝\",4],[\"c361\",\"홢\",4,\"홨홪\",5,\"홲홳홵\",11],[\"c381\",\"횁횂횄횆\",5,\"횎횏횑횒횓횕\",7,\"횞횠횢\",5,\"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층\"],[\"c441\",\"횫횭횮횯횱\",7,\"횺횼\",7,\"훆훇훉훊훋\"],[\"c461\",\"훍훎훏훐훒훓훕훖훘훚\",5,\"훡훢훣훥훦훧훩\",4],[\"c481\",\"훮훯훱훲훳훴훶\",5,\"훾훿휁휂휃휅\",11,\"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼\"],[\"c541\",\"휕휖휗휚휛휝휞휟휡\",6,\"휪휬휮\",5,\"휶휷휹\"],[\"c561\",\"휺휻휽\",6,\"흅흆흈흊\",5,\"흒흓흕흚\",4],[\"c581\",\"흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵\",6,\"흾흿힀힂\",5,\"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜\"],[\"c641\",\"힍힎힏힑\",6,\"힚힜힞\",5],[\"c6a1\",\"퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁\"],[\"c7a1\",\"퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠\"],[\"c8a1\",\"혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝\"],[\"caa1\",\"伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕\"],[\"cba1\",\"匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢\"],[\"cca1\",\"瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械\"],[\"cda1\",\"棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜\"],[\"cea1\",\"科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾\"],[\"cfa1\",\"區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴\"],[\"d0a1\",\"鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣\"],[\"d1a1\",\"朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩\",5,\"那樂\",4,\"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉\"],[\"d2a1\",\"納臘蠟衲囊娘廊\",4,\"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧\",5,\"駑魯\",10,\"濃籠聾膿農惱牢磊腦賂雷尿壘\",7,\"嫩訥杻紐勒\",5,\"能菱陵尼泥匿溺多茶\"],[\"d3a1\",\"丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃\"],[\"d4a1\",\"棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅\"],[\"d5a1\",\"蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣\"],[\"d6a1\",\"煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼\"],[\"d7a1\",\"遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬\"],[\"d8a1\",\"立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅\"],[\"d9a1\",\"蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文\"],[\"daa1\",\"汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑\"],[\"dba1\",\"發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖\"],[\"dca1\",\"碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦\"],[\"dda1\",\"孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥\"],[\"dea1\",\"脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索\"],[\"dfa1\",\"傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署\"],[\"e0a1\",\"胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬\"],[\"e1a1\",\"聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁\"],[\"e2a1\",\"戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧\"],[\"e3a1\",\"嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁\"],[\"e4a1\",\"沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額\"],[\"e5a1\",\"櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬\"],[\"e6a1\",\"旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒\"],[\"e7a1\",\"簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳\"],[\"e8a1\",\"烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療\"],[\"e9a1\",\"窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓\"],[\"eaa1\",\"運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜\"],[\"eba1\",\"濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼\"],[\"eca1\",\"議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄\"],[\"eda1\",\"立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長\"],[\"eea1\",\"障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱\"],[\"efa1\",\"煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖\"],[\"f0a1\",\"靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫\"],[\"f1a1\",\"踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只\"],[\"f2a1\",\"咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯\"],[\"f3a1\",\"鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策\"],[\"f4a1\",\"責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢\"],[\"f5a1\",\"椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃\"],[\"f6a1\",\"贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託\"],[\"f7a1\",\"鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑\"],[\"f8a1\",\"阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃\"],[\"f9a1\",\"品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航\"],[\"faa1\",\"行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型\"],[\"fba1\",\"形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵\"],[\"fca1\",\"禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆\"],[\"fda1\",\"爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰\"]]');\n\n/***/ }),\n\n/***/ 4284:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127],[\"a140\",\" ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚\"],[\"a1a1\",\"﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢\",4,\"~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/\"],[\"a240\",\"\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁\",7,\"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭\"],[\"a2a1\",\"╮╰╯═╞╪╡◢◣◥◤╱╲╳0\",9,\"Ⅰ\",9,\"〡\",8,\"十卄卅A\",25,\"a\",21],[\"a340\",\"wxyzΑ\",16,\"Σ\",6,\"α\",16,\"σ\",6,\"ㄅ\",10],[\"a3a1\",\"ㄐ\",25,\"˙ˉˊˇˋ\"],[\"a3e1\",\"€\"],[\"a440\",\"一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才\"],[\"a4a1\",\"丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙\"],[\"a540\",\"世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外\"],[\"a5a1\",\"央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全\"],[\"a640\",\"共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年\"],[\"a6a1\",\"式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣\"],[\"a740\",\"作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍\"],[\"a7a1\",\"均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠\"],[\"a840\",\"杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒\"],[\"a8a1\",\"芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵\"],[\"a940\",\"咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居\"],[\"a9a1\",\"屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊\"],[\"aa40\",\"昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠\"],[\"aaa1\",\"炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附\"],[\"ab40\",\"陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品\"],[\"aba1\",\"哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷\"],[\"ac40\",\"拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗\"],[\"aca1\",\"活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄\"],[\"ad40\",\"耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥\"],[\"ada1\",\"迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪\"],[\"ae40\",\"哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙\"],[\"aea1\",\"恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓\"],[\"af40\",\"浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷\"],[\"afa1\",\"砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃\"],[\"b040\",\"虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡\"],[\"b0a1\",\"陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀\"],[\"b140\",\"娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽\"],[\"b1a1\",\"情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺\"],[\"b240\",\"毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶\"],[\"b2a1\",\"瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼\"],[\"b340\",\"莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途\"],[\"b3a1\",\"部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠\"],[\"b440\",\"婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍\"],[\"b4a1\",\"插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋\"],[\"b540\",\"溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘\"],[\"b5a1\",\"窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁\"],[\"b640\",\"詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑\"],[\"b6a1\",\"間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼\"],[\"b740\",\"媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業\"],[\"b7a1\",\"楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督\"],[\"b840\",\"睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫\"],[\"b8a1\",\"腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊\"],[\"b940\",\"辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴\"],[\"b9a1\",\"飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇\"],[\"ba40\",\"愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢\"],[\"baa1\",\"滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬\"],[\"bb40\",\"罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤\"],[\"bba1\",\"說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜\"],[\"bc40\",\"劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂\"],[\"bca1\",\"慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃\"],[\"bd40\",\"瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯\"],[\"bda1\",\"翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞\"],[\"be40\",\"輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉\"],[\"bea1\",\"鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡\"],[\"bf40\",\"濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊\"],[\"bfa1\",\"縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚\"],[\"c040\",\"錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇\"],[\"c0a1\",\"嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬\"],[\"c140\",\"瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪\"],[\"c1a1\",\"薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁\"],[\"c240\",\"駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘\"],[\"c2a1\",\"癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦\"],[\"c340\",\"鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸\"],[\"c3a1\",\"獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類\"],[\"c440\",\"願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼\"],[\"c4a1\",\"纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴\"],[\"c540\",\"護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬\"],[\"c5a1\",\"禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒\"],[\"c640\",\"讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲\"],[\"c940\",\"乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕\"],[\"c9a1\",\"氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋\"],[\"ca40\",\"汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘\"],[\"caa1\",\"吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇\"],[\"cb40\",\"杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓\"],[\"cba1\",\"芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢\"],[\"cc40\",\"坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋\"],[\"cca1\",\"怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲\"],[\"cd40\",\"泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺\"],[\"cda1\",\"矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏\"],[\"ce40\",\"哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛\"],[\"cea1\",\"峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺\"],[\"cf40\",\"柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂\"],[\"cfa1\",\"洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀\"],[\"d040\",\"穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪\"],[\"d0a1\",\"苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱\"],[\"d140\",\"唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧\"],[\"d1a1\",\"恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤\"],[\"d240\",\"毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸\"],[\"d2a1\",\"牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐\"],[\"d340\",\"笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢\"],[\"d3a1\",\"荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐\"],[\"d440\",\"酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅\"],[\"d4a1\",\"唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏\"],[\"d540\",\"崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟\"],[\"d5a1\",\"捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉\"],[\"d640\",\"淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏\"],[\"d6a1\",\"痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟\"],[\"d740\",\"耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷\"],[\"d7a1\",\"蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪\"],[\"d840\",\"釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷\"],[\"d8a1\",\"堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔\"],[\"d940\",\"惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒\"],[\"d9a1\",\"晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞\"],[\"da40\",\"湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖\"],[\"daa1\",\"琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥\"],[\"db40\",\"罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳\"],[\"dba1\",\"菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺\"],[\"dc40\",\"軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈\"],[\"dca1\",\"隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆\"],[\"dd40\",\"媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤\"],[\"dda1\",\"搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼\"],[\"de40\",\"毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓\"],[\"dea1\",\"煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓\"],[\"df40\",\"稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯\"],[\"dfa1\",\"腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤\"],[\"e040\",\"觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿\"],[\"e0a1\",\"遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠\"],[\"e140\",\"凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠\"],[\"e1a1\",\"寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉\"],[\"e240\",\"榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊\"],[\"e2a1\",\"漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓\"],[\"e340\",\"禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞\"],[\"e3a1\",\"耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻\"],[\"e440\",\"裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍\"],[\"e4a1\",\"銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘\"],[\"e540\",\"噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉\"],[\"e5a1\",\"憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒\"],[\"e640\",\"澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙\"],[\"e6a1\",\"獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟\"],[\"e740\",\"膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢\"],[\"e7a1\",\"蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧\"],[\"e840\",\"踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓\"],[\"e8a1\",\"銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮\"],[\"e940\",\"噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺\"],[\"e9a1\",\"憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸\"],[\"ea40\",\"澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙\"],[\"eaa1\",\"瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘\"],[\"eb40\",\"蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠\"],[\"eba1\",\"諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌\"],[\"ec40\",\"錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕\"],[\"eca1\",\"魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎\"],[\"ed40\",\"檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶\"],[\"eda1\",\"瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞\"],[\"ee40\",\"蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞\"],[\"eea1\",\"謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜\"],[\"ef40\",\"鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰\"],[\"efa1\",\"鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶\"],[\"f040\",\"璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒\"],[\"f0a1\",\"臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧\"],[\"f140\",\"蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪\"],[\"f1a1\",\"鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰\"],[\"f240\",\"徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛\"],[\"f2a1\",\"礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕\"],[\"f340\",\"譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦\"],[\"f3a1\",\"鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲\"],[\"f440\",\"嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩\"],[\"f4a1\",\"禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿\"],[\"f540\",\"鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛\"],[\"f5a1\",\"鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥\"],[\"f640\",\"蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺\"],[\"f6a1\",\"騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚\"],[\"f740\",\"糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊\"],[\"f7a1\",\"驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾\"],[\"f840\",\"讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏\"],[\"f8a1\",\"齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚\"],[\"f940\",\"纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊\"],[\"f9a1\",\"龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓\"]]');\n\n/***/ }),\n\n/***/ 5633:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127],[\"8ea1\",\"。\",62],[\"a1a1\",\" 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈\",9,\"+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇\"],[\"a2a1\",\"◆□■△▲▽▼※〒→←↑↓〓\"],[\"a2ba\",\"∈∋⊆⊇⊂⊃∪∩\"],[\"a2ca\",\"∧∨¬⇒⇔∀∃\"],[\"a2dc\",\"∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬\"],[\"a2f2\",\"ʼn♯♭♪†‡¶\"],[\"a2fe\",\"◯\"],[\"a3b0\",\"0\",9],[\"a3c1\",\"A\",25],[\"a3e1\",\"a\",25],[\"a4a1\",\"ぁ\",82],[\"a5a1\",\"ァ\",85],[\"a6a1\",\"Α\",16,\"Σ\",6],[\"a6c1\",\"α\",16,\"σ\",6],[\"a7a1\",\"А\",5,\"ЁЖ\",25],[\"a7d1\",\"а\",5,\"ёж\",25],[\"a8a1\",\"─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂\"],[\"ada1\",\"①\",19,\"Ⅰ\",9],[\"adc0\",\"㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡\"],[\"addf\",\"㍻〝〟№㏍℡㊤\",4,\"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪\"],[\"b0a1\",\"亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭\"],[\"b1a1\",\"院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応\"],[\"b2a1\",\"押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改\"],[\"b3a1\",\"魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱\"],[\"b4a1\",\"粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄\"],[\"b5a1\",\"機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京\"],[\"b6a1\",\"供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈\"],[\"b7a1\",\"掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲\"],[\"b8a1\",\"検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向\"],[\"b9a1\",\"后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込\"],[\"baa1\",\"此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷\"],[\"bba1\",\"察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時\"],[\"bca1\",\"次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周\"],[\"bda1\",\"宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償\"],[\"bea1\",\"勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾\"],[\"bfa1\",\"拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾\"],[\"c0a1\",\"澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線\"],[\"c1a1\",\"繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎\"],[\"c2a1\",\"臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只\"],[\"c3a1\",\"叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵\"],[\"c4a1\",\"帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓\"],[\"c5a1\",\"邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到\"],[\"c6a1\",\"董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入\"],[\"c7a1\",\"如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦\"],[\"c8a1\",\"函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美\"],[\"c9a1\",\"鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服\"],[\"caa1\",\"福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋\"],[\"cba1\",\"法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満\"],[\"cca1\",\"漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒\"],[\"cda1\",\"諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃\"],[\"cea1\",\"痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯\"],[\"cfa1\",\"蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕\"],[\"d0a1\",\"弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲\"],[\"d1a1\",\"僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨\"],[\"d2a1\",\"辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨\"],[\"d3a1\",\"咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉\"],[\"d4a1\",\"圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩\"],[\"d5a1\",\"奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓\"],[\"d6a1\",\"屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏\"],[\"d7a1\",\"廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚\"],[\"d8a1\",\"悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛\"],[\"d9a1\",\"戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼\"],[\"daa1\",\"據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼\"],[\"dba1\",\"曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍\"],[\"dca1\",\"棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣\"],[\"dda1\",\"檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾\"],[\"dea1\",\"沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌\"],[\"dfa1\",\"漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼\"],[\"e0a1\",\"燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱\"],[\"e1a1\",\"瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰\"],[\"e2a1\",\"癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬\"],[\"e3a1\",\"磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐\"],[\"e4a1\",\"筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆\"],[\"e5a1\",\"紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺\"],[\"e6a1\",\"罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋\"],[\"e7a1\",\"隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙\"],[\"e8a1\",\"茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈\"],[\"e9a1\",\"蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙\"],[\"eaa1\",\"蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞\"],[\"eba1\",\"襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫\"],[\"eca1\",\"譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊\"],[\"eda1\",\"蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸\"],[\"eea1\",\"遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮\"],[\"efa1\",\"錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞\"],[\"f0a1\",\"陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰\"],[\"f1a1\",\"顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷\"],[\"f2a1\",\"髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈\"],[\"f3a1\",\"鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠\"],[\"f4a1\",\"堯槇遙瑤凜熙\"],[\"f9a1\",\"纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德\"],[\"faa1\",\"忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱\"],[\"fba1\",\"犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚\"],[\"fca1\",\"釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"],[\"fcf1\",\"ⅰ\",9,\"¬¦'"\"],[\"8fa2af\",\"˘ˇ¸˙˝¯˛˚~΄΅\"],[\"8fa2c2\",\"¡¦¿\"],[\"8fa2eb\",\"ºª©®™¤№\"],[\"8fa6e1\",\"ΆΈΉΊΪ\"],[\"8fa6e7\",\"Ό\"],[\"8fa6e9\",\"ΎΫ\"],[\"8fa6ec\",\"Ώ\"],[\"8fa6f1\",\"άέήίϊΐόςύϋΰώ\"],[\"8fa7c2\",\"Ђ\",10,\"ЎЏ\"],[\"8fa7f2\",\"ђ\",10,\"ўџ\"],[\"8fa9a1\",\"ÆĐ\"],[\"8fa9a4\",\"Ħ\"],[\"8fa9a6\",\"IJ\"],[\"8fa9a8\",\"ŁĿ\"],[\"8fa9ab\",\"ŊØŒ\"],[\"8fa9af\",\"ŦÞ\"],[\"8fa9c1\",\"æđðħıijĸłŀʼnŋøœßŧþ\"],[\"8faaa1\",\"ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ\"],[\"8faaba\",\"ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ\"],[\"8faba1\",\"áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ\"],[\"8fabbd\",\"ġĥíìïîǐ\"],[\"8fabc5\",\"īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż\"],[\"8fb0a1\",\"丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄\"],[\"8fb1a1\",\"侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐\"],[\"8fb2a1\",\"傒傓傔傖傛傜傞\",4,\"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂\"],[\"8fb3a1\",\"凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋\"],[\"8fb4a1\",\"匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿\"],[\"8fb5a1\",\"咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒\"],[\"8fb6a1\",\"嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍\",5,\"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤\",4,\"囱囫园\"],[\"8fb7a1\",\"囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭\",4,\"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡\"],[\"8fb8a1\",\"堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭\"],[\"8fb9a1\",\"奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿\"],[\"8fbaa1\",\"嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖\",4,\"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩\"],[\"8fbba1\",\"屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤\"],[\"8fbca1\",\"巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪\",4,\"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧\"],[\"8fbda1\",\"彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐\",4,\"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷\"],[\"8fbea1\",\"悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐\",4,\"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥\"],[\"8fbfa1\",\"懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵\"],[\"8fc0a1\",\"捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿\"],[\"8fc1a1\",\"擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝\"],[\"8fc2a1\",\"昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝\"],[\"8fc3a1\",\"杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮\",4,\"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏\"],[\"8fc4a1\",\"棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲\"],[\"8fc5a1\",\"樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽\"],[\"8fc6a1\",\"歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖\"],[\"8fc7a1\",\"泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞\"],[\"8fc8a1\",\"湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊\"],[\"8fc9a1\",\"濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔\",4,\"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃\",4,\"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠\"],[\"8fcaa1\",\"煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻\"],[\"8fcba1\",\"狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽\"],[\"8fcca1\",\"珿琀琁琄琇琊琑琚琛琤琦琨\",9,\"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆\"],[\"8fcda1\",\"甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹\",5,\"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹\"],[\"8fcea1\",\"瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢\",6,\"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢\"],[\"8fcfa1\",\"睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳\"],[\"8fd0a1\",\"碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞\"],[\"8fd1a1\",\"秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰\"],[\"8fd2a1\",\"笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙\",5],[\"8fd3a1\",\"籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝\"],[\"8fd4a1\",\"綞綦綧綪綳綶綷綹緂\",4,\"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭\"],[\"8fd5a1\",\"罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮\"],[\"8fd6a1\",\"胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆\"],[\"8fd7a1\",\"艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸\"],[\"8fd8a1\",\"荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓\"],[\"8fd9a1\",\"蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏\",4,\"蕖蕙蕜\",6,\"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼\"],[\"8fdaa1\",\"藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠\",4,\"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣\"],[\"8fdba1\",\"蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃\",6,\"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵\"],[\"8fdca1\",\"蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊\",4,\"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺\"],[\"8fdda1\",\"襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔\",4,\"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳\"],[\"8fdea1\",\"誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂\",4,\"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆\"],[\"8fdfa1\",\"貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢\"],[\"8fe0a1\",\"踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁\"],[\"8fe1a1\",\"轃轇轏轑\",4,\"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃\"],[\"8fe2a1\",\"郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿\"],[\"8fe3a1\",\"釂釃釅釓釔釗釙釚釞釤釥釩釪釬\",5,\"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵\",4,\"鉻鉼鉽鉿銈銉銊銍銎銒銗\"],[\"8fe4a1\",\"銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿\",4,\"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶\"],[\"8fe5a1\",\"鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉\",4,\"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹\"],[\"8fe6a1\",\"镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂\"],[\"8fe7a1\",\"霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦\"],[\"8fe8a1\",\"頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱\",4,\"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵\"],[\"8fe9a1\",\"馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿\",4],[\"8feaa1\",\"鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪\",4,\"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸\"],[\"8feba1\",\"鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦\",4,\"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻\"],[\"8feca1\",\"鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵\"],[\"8feda1\",\"黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃\",4,\"齓齕齖齗齘齚齝齞齨齩齭\",4,\"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥\"]]');\n\n/***/ }),\n\n/***/ 6258:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('{\"uChars\":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],\"gbChars\":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}');\n\n/***/ }),\n\n/***/ 4346:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"a140\",\"\",62],[\"a180\",\"\",32],[\"a240\",\"\",62],[\"a280\",\"\",32],[\"a2ab\",\"\",5],[\"a2e3\",\"€\"],[\"a2ef\",\"\"],[\"a2fd\",\"\"],[\"a340\",\"\",62],[\"a380\",\"\",31,\" \"],[\"a440\",\"\",62],[\"a480\",\"\",32],[\"a4f4\",\"\",10],[\"a540\",\"\",62],[\"a580\",\"\",32],[\"a5f7\",\"\",7],[\"a640\",\"\",62],[\"a680\",\"\",32],[\"a6b9\",\"\",7],[\"a6d9\",\"\",6],[\"a6ec\",\"\"],[\"a6f3\",\"\"],[\"a6f6\",\"\",8],[\"a740\",\"\",62],[\"a780\",\"\",32],[\"a7c2\",\"\",14],[\"a7f2\",\"\",12],[\"a896\",\"\",10],[\"a8bc\",\"ḿ\"],[\"a8bf\",\"ǹ\"],[\"a8c1\",\"\"],[\"a8ea\",\"\",20],[\"a958\",\"\"],[\"a95b\",\"\"],[\"a95d\",\"\"],[\"a989\",\"〾⿰\",11],[\"a997\",\"\",12],[\"a9f0\",\"\",14],[\"aaa1\",\"\",93],[\"aba1\",\"\",93],[\"aca1\",\"\",93],[\"ada1\",\"\",93],[\"aea1\",\"\",93],[\"afa1\",\"\",93],[\"d7fa\",\"\",4],[\"f8a1\",\"\",93],[\"f9a1\",\"\",93],[\"faa1\",\"\",93],[\"fba1\",\"\",93],[\"fca1\",\"\",93],[\"fda1\",\"\",93],[\"fe50\",\"⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌\"],[\"fe80\",\"䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓\",6,\"䶮\",93],[\"8135f437\",\"\"]]');\n\n/***/ }),\n\n/***/ 7014:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",128],[\"a1\",\"。\",62],[\"8140\",\" 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈\",9,\"+-±×\"],[\"8180\",\"÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓\"],[\"81b8\",\"∈∋⊆⊇⊂⊃∪∩\"],[\"81c8\",\"∧∨¬⇒⇔∀∃\"],[\"81da\",\"∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬\"],[\"81f0\",\"ʼn♯♭♪†‡¶\"],[\"81fc\",\"◯\"],[\"824f\",\"0\",9],[\"8260\",\"A\",25],[\"8281\",\"a\",25],[\"829f\",\"ぁ\",82],[\"8340\",\"ァ\",62],[\"8380\",\"ム\",22],[\"839f\",\"Α\",16,\"Σ\",6],[\"83bf\",\"α\",16,\"σ\",6],[\"8440\",\"А\",5,\"ЁЖ\",25],[\"8470\",\"а\",5,\"ёж\",7],[\"8480\",\"о\",17],[\"849f\",\"─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂\"],[\"8740\",\"①\",19,\"Ⅰ\",9],[\"875f\",\"㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡\"],[\"877e\",\"㍻\"],[\"8780\",\"〝〟№㏍℡㊤\",4,\"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪\"],[\"889f\",\"亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭\"],[\"8940\",\"院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円\"],[\"8980\",\"園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改\"],[\"8a40\",\"魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫\"],[\"8a80\",\"橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄\"],[\"8b40\",\"機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救\"],[\"8b80\",\"朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈\"],[\"8c40\",\"掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨\"],[\"8c80\",\"劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向\"],[\"8d40\",\"后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降\"],[\"8d80\",\"項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷\"],[\"8e40\",\"察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止\"],[\"8e80\",\"死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周\"],[\"8f40\",\"宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳\"],[\"8f80\",\"準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾\"],[\"9040\",\"拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨\"],[\"9080\",\"逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線\"],[\"9140\",\"繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻\"],[\"9180\",\"操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只\"],[\"9240\",\"叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄\"],[\"9280\",\"逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓\"],[\"9340\",\"邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬\"],[\"9380\",\"凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入\"],[\"9440\",\"如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅\"],[\"9480\",\"楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美\"],[\"9540\",\"鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷\"],[\"9580\",\"斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋\"],[\"9640\",\"法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆\"],[\"9680\",\"摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒\"],[\"9740\",\"諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲\"],[\"9780\",\"沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯\"],[\"9840\",\"蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕\"],[\"989f\",\"弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲\"],[\"9940\",\"僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭\"],[\"9980\",\"凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨\"],[\"9a40\",\"咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸\"],[\"9a80\",\"噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩\"],[\"9b40\",\"奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀\"],[\"9b80\",\"它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏\"],[\"9c40\",\"廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠\"],[\"9c80\",\"怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛\"],[\"9d40\",\"戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫\"],[\"9d80\",\"捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼\"],[\"9e40\",\"曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎\"],[\"9e80\",\"梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣\"],[\"9f40\",\"檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯\"],[\"9f80\",\"麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌\"],[\"e040\",\"漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝\"],[\"e080\",\"烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱\"],[\"e140\",\"瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿\"],[\"e180\",\"痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬\"],[\"e240\",\"磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰\"],[\"e280\",\"窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆\"],[\"e340\",\"紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷\"],[\"e380\",\"縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋\"],[\"e440\",\"隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤\"],[\"e480\",\"艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈\"],[\"e540\",\"蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬\"],[\"e580\",\"蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞\"],[\"e640\",\"襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧\"],[\"e680\",\"諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊\"],[\"e740\",\"蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜\"],[\"e780\",\"轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮\"],[\"e840\",\"錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙\"],[\"e880\",\"閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰\"],[\"e940\",\"顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃\"],[\"e980\",\"騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈\"],[\"ea40\",\"鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯\"],[\"ea80\",\"黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙\"],[\"ed40\",\"纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏\"],[\"ed80\",\"塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱\"],[\"ee40\",\"犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙\"],[\"ee80\",\"蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"],[\"eeef\",\"ⅰ\",9,\"¬¦'"\"],[\"f040\",\"\",62],[\"f080\",\"\",124],[\"f140\",\"\",62],[\"f180\",\"\",124],[\"f240\",\"\",62],[\"f280\",\"\",124],[\"f340\",\"\",62],[\"f380\",\"\",124],[\"f440\",\"\",62],[\"f480\",\"\",124],[\"f540\",\"\",62],[\"f580\",\"\",124],[\"f640\",\"\",62],[\"f680\",\"\",124],[\"f740\",\"\",62],[\"f780\",\"\",124],[\"f840\",\"\",62],[\"f880\",\"\",124],[\"f940\",\"\"],[\"fa40\",\"ⅰ\",9,\"Ⅰ\",9,\"¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊\"],[\"fa80\",\"兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯\"],[\"fb40\",\"涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神\"],[\"fb80\",\"祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙\"],[\"fc40\",\"髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"]]');\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_2632181__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_2632181__);\n/******/ \t\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/global */\n/******/ \t!function() {\n/******/ \t\t__nested_webpack_require_2632181__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/node module decorator */\n/******/ \t!function() {\n/******/ \t\t__nested_webpack_require_2632181__.nmd = function(module) {\n/******/ \t\t\tmodule.paths = [];\n/******/ \t\t\tif (!module.children) module.children = [];\n/******/ \t\t\treturn module;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __nested_webpack_require_2632181__(2536);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=pdfmake.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGRmbWFrZS9idWlsZC9wZGZtYWtlLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxJQUFJLElBQXlEO0FBQzdEO0FBQ0EsTUFBTSxhQUtKO0FBQ0YsQ0FBQztBQUNELDhCQUE4QjtBQUM5Qjs7QUFFQTtBQUNBLGtEQUFrRCw4QkFBbUI7O0FBRXJFO0FBQ0Esd0NBQXdDLDhCQUFtQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLHdCQUF3QiwyRUFBMkUsa0NBQWtDLHdCQUF3QixPQUFPLGtDQUFrQyxtSUFBbUk7O0FBRXpVLGtEQUFrRCwwQ0FBMEM7O0FBRTVGLGVBQWUsOEJBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsOEJBQW1COztBQUV4QyxnQkFBZ0IsOEJBQW1CO0FBQ25DOztBQUVBLHNCQUFzQiw4QkFBbUI7QUFDekM7QUFDQTs7QUFFQSxvREFBb0QsOEJBQW1CO0FBQ3ZFLHVDQUF1Qyw4QkFBbUI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLDhCQUFtQjs7QUFFdEM7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOzs7QUFHQTtBQUNBLDJEQUEyRCxDQUFtVTs7QUFFOVg7QUFDQTtBQUNBOztBQUVBLG9CQUFvQjtBQUNwQjtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQjs7QUFFcEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0Esc0VBQXNFLGFBQWE7QUFDbkY7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGdCQUFnQjs7QUFFaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwREFBMEQ7O0FBRTFEO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDZGQUE2RixlQUFlO0FBQzVHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDZGQUE2RixlQUFlO0FBQzVHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLDZGQUE2RixlQUFlO0FBQzVHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDZGQUE2RixlQUFlO0FBQzVHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjs7QUFFcEI7O0FBRUEsc0JBQXNCLGlCQUFpQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBLHlFQUF5RSxlQUFlO0FBQ3hGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLE9BQU87O0FBRVA7QUFDQSxrREFBa0QsZ0NBQW1COztBQUVyRTtBQUNBLHdDQUF3QyxnQ0FBbUI7QUFDM0Q7QUFDQTs7O0FBR0EsaUNBQWlDLGdCQUFnQixzQkFBc0IsT0FBTyx1REFBdUQsbUNBQW1DLDBEQUEwRCxzRkFBc0YsaUVBQWlFLE1BQU0saUNBQWlDLDRDQUE0QyxLQUFLOztBQUVqZCw0Q0FBNEMsa0JBQWtCLGtDQUFrQyxvRUFBb0UsS0FBSyxPQUFPLG9CQUFvQjs7QUFFcE0sa0RBQWtELDBDQUEwQzs7QUFFNUYsNENBQTRDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQ7O0FBRS9QLDhEQUE4RCxzRUFBc0UsOERBQThEOztBQUVsTSxrREFBa0QsMEVBQTBFLGVBQWU7O0FBRTNJLHdDQUF3Qyx1QkFBdUIseUZBQXlGOztBQUV4SiwyQ0FBMkMsK0RBQStELDZFQUE2RSx5RUFBeUUsZUFBZSx1REFBdUQsR0FBRzs7QUFFelUsbUNBQW1DLGdFQUFnRSxzREFBc0QsK0RBQStELG1DQUFtQyw2RUFBNkUscUNBQXFDLGlEQUFpRCw4QkFBOEIscUJBQXFCLDBFQUEwRSxxREFBcUQsZUFBZSx5RUFBeUUsR0FBRywyQ0FBMkM7O0FBRXR0QixzQ0FBc0Msd0VBQXdFLDBDQUEwQyw4Q0FBOEMsTUFBTSx1RUFBdUUsSUFBSSxlQUFlLFlBQVk7O0FBRWxULDJDQUEyQyxrQ0FBa0Msa0NBQWtDLE9BQU8sd0RBQXdELGdCQUFnQix1QkFBdUIsa0RBQWtELGtDQUFrQyx1REFBdUQsc0JBQXNCOztBQUV0WCxpQ0FBaUM7O0FBRWpDLGlDQUFpQyw0RUFBNEUsaUJBQWlCLGFBQWE7O0FBRTNJLDhCQUE4QixnR0FBZ0csbURBQW1EOztBQUVqTCx3QkFBd0IsMkVBQTJFLGtDQUFrQyx3QkFBd0IsT0FBTyxrQ0FBa0MsbUlBQW1JOztBQUV6VSxlQUFlLGdDQUFtQjtBQUNsQzs7QUFFQSxnQkFBZ0IsZ0NBQW1CO0FBQ25DLGlFQUFpRTs7O0FBR2pFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxRUFBcUU7QUFDckUsb0NBQW9DLGFBQWEsSUFBSSxhQUFhOztBQUVsRTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUixtQkFBbUI7O0FBRW5CO0FBQ0Esc0JBQXNCO0FBQ3RCLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7OztBQUdSLG1CQUFtQjs7QUFFbkI7QUFDQSxzQkFBc0I7QUFDdEIsTUFBTTtBQUNOO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7O0FBRUEsb0lBQW9JO0FBQ3BJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7OztBQUdWLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7O0FBRXBEO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR04saUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEOztBQUVBLE9BQU87O0FBRVA7QUFDQSxrREFBa0QsZ0NBQW1COztBQUVyRTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3QiwyRUFBMkUsa0NBQWtDLHdCQUF3QixPQUFPLGtDQUFrQyxtSUFBbUk7O0FBRXpVLGtEQUFrRCwwQ0FBMEM7O0FBRTVGLGtEQUFrRCwwRUFBMEUsZUFBZTs7QUFFM0ksd0NBQXdDLHVCQUF1Qix5RkFBeUY7O0FBRXhKLDhCQUE4QixnR0FBZ0csbURBQW1EOztBQUVqTCwyQ0FBMkMsK0RBQStELDZFQUE2RSx5RUFBeUUsZUFBZSx1REFBdUQsR0FBRzs7QUFFelUsaUNBQWlDLDRFQUE0RSxpQkFBaUIsYUFBYTs7QUFFM0ksZ0JBQWdCOztBQUVoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUMsZ0NBQW1CO0FBQ3hELCtEQUErRDs7QUFFL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxpQ0FBaUMsZ0NBQW1CO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBLHNFQUFzRSxhQUFhO0FBQ25GO0FBQ0E7O0FBRUEscUNBQXFDLGdDQUFtQjtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGdDQUFtQjs7QUFFckU7QUFDQTtBQUNBOzs7QUFHQSxrQ0FBa0M7O0FBRWxDLDhCQUE4Qjs7QUFFOUIseUNBQXlDLGVBQWUsZUFBZSxnQkFBZ0Isb0JBQW9CLE1BQU0sMENBQTBDLCtCQUErQixhQUFhLHFCQUFxQix1Q0FBdUMsY0FBYyxXQUFXLFlBQVksVUFBVSxNQUFNLG1EQUFtRCxVQUFVLHNCQUFzQjs7QUFFM1ksZ0NBQWdDOztBQUVoQyx3QkFBd0IsMkVBQTJFLGtDQUFrQyx3QkFBd0IsT0FBTyxrQ0FBa0MsbUlBQW1JOztBQUV6VTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsdUNBQXVDLGdDQUFtQjtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsZ0NBQW1COztBQUVuRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixnQ0FBbUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qix1QkFBdUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKOztBQUVBLFNBQVMsa0JBQWtCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0Isd0JBQXdCO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isc0JBQXNCO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLG9CQUFvQjtBQUN0QywwQkFBMEI7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLE1BQU07QUFDTixnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEscUJBQXFCLHFCQUFxQjtBQUMxQyw4QkFBOEI7QUFDOUI7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlLFdBQVcsb0JBQW9CLFdBQVc7QUFDekQ7QUFDQTs7QUFFQSxrQkFBa0Isc0JBQXNCO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLHFCQUFxQjtBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDO0FBQ2xDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHNCQUFzQix1QkFBdUI7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUEsZUFBZSxrQkFBa0I7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0EsY0FBYyxpQkFBaUI7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQSxnQkFBZ0I7O0FBRWhCLGdCQUFnQjs7QUFFaEIsZ0JBQWdCOztBQUVoQixnQkFBZ0I7O0FBRWhCLGdCQUFnQjs7QUFFaEIsZ0JBQWdCOztBQUVoQixnQkFBZ0I7O0FBRWhCLGdCQUFnQjs7QUFFaEIsZ0JBQWdCOztBQUVoQixnQkFBZ0I7O0FBRWhCLGlCQUFpQjs7QUFFakIsaUJBQWlCOztBQUVqQixpQkFBaUI7O0FBRWpCLGlCQUFpQjs7QUFFakIsaUJBQWlCOztBQUVqQixpQkFBaUI7O0FBRWpCLGlCQUFpQjs7QUFFakIsaUJBQWlCOztBQUVqQixpQkFBaUI7O0FBRWpCLGlCQUFpQjs7QUFFakIsaUJBQWlCOztBQUVqQixpQkFBaUI7O0FBRWpCLGlCQUFpQjs7QUFFakIsaUJBQWlCOztBQUVqQixpQkFBaUI7O0FBRWpCLGlCQUFpQjs7QUFFakIsaUJBQWlCOztBQUVqQixpQkFBaUI7O0FBRWpCLGlCQUFpQjs7QUFFakIsaUJBQWlCOztBQUVqQixpQkFBaUI7O0FBRWpCLGtCQUFrQjs7QUFFbEIsaUJBQWlCO0FBQ2pCOztBQUVBLGlCQUFpQjs7QUFFakIsaUJBQWlCOztBQUVqQixpQkFBaUI7O0FBRWpCLGlCQUFpQjs7QUFFakIsaUJBQWlCOztBQUVqQixpQkFBaUI7O0FBRWpCLGlCQUFpQjs7QUFFakIsaUJBQWlCOztBQUVqQixpQkFBaUI7O0FBRWpCLGlCQUFpQjs7QUFFakIsT0FBTzs7QUFFUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBLDZCQUE2Qjs7QUFFN0IsNkJBQTZCOztBQUU3Qiw2QkFBNkI7O0FBRTdCLDZCQUE2Qjs7QUFFN0IsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxnQ0FBbUI7O0FBRXJFOzs7QUFHQSxnQ0FBbUI7O0FBRW5CLHVCQUF1QixnQ0FBbUI7QUFDMUMsdUJBQXVCLGdDQUFtQjtBQUMxQyxnQkFBZ0IsZ0NBQW1CO0FBQ25DLG9CQUFvQixnQ0FBbUI7QUFDdkMsbUJBQW1CLGdDQUFtQjtBQUN0QyxrQkFBa0IsZ0NBQW1CO0FBQ3JDLGlCQUFpQixnQ0FBbUI7QUFDcEMsZUFBZSxnQ0FBbUI7QUFDbEMsbUJBQW1CLGdDQUFtQjtBQUN0QyxtQkFBbUIsZ0NBQW1CO0FBQ3RDLGlCQUFpQixnQ0FBbUI7QUFDcEMsaUJBQWlCLGdDQUFtQjtBQUNwQywwQkFBMEIsZ0NBQW1COztBQUU3QyxZQUFZLGdDQUFtQjs7QUFFL0IsY0FBYyxnQ0FBbUI7O0FBRWpDLGNBQWMsZ0NBQW1COztBQUVqQzs7QUFFQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGdDQUFtQjs7QUFFckU7OztBQUdBLGdDQUFtQjs7QUFFbkIsZ0NBQW1COztBQUVuQixnQ0FBbUI7O0FBRW5CLGdDQUFtQjs7QUFFbkIsZ0NBQW1COztBQUVuQixnQ0FBbUI7O0FBRW5CLGdDQUFtQjs7QUFFbkIsZ0NBQW1COztBQUVuQixnQ0FBbUI7O0FBRW5CLGdDQUFtQjs7QUFFbkIsZ0NBQW1COztBQUVuQiw4REFBOEQsaUZBQWlGLGdEQUFnRCx3SEFBd0gsZ0JBQWdCLFdBQVcscUJBQXFCLDRCQUE0QixjQUFjLFNBQVMsbUNBQW1DOztBQUU3YixrREFBa0QsZ0JBQWdCLGdFQUFnRSx3REFBd0QsNkRBQTZELHNEQUFzRDs7QUFFN1MsdUNBQXVDLHVEQUF1RCx1Q0FBdUMsU0FBUyxPQUFPLG9CQUFvQjs7QUFFekssZUFBZSxnQ0FBbUI7QUFDbEM7O0FBRUEsWUFBWSxnQ0FBbUI7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixvQ0FBb0MsU0FBUztBQUM3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0VBQXdFLDRCQUE0QjtBQUNwRztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwRUFBMEUsOEJBQThCO0FBQ3hHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUEsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxnQ0FBbUI7O0FBRXJFOzs7QUFHQSxnQ0FBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsdUJBQXVCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9CLHVCQUF1QjtBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUEsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxnQ0FBbUI7O0FBRXJFOzs7QUFHQSxZQUFZLGdDQUFtQjs7QUFFL0IsZUFBZSxnQ0FBbUI7QUFDbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGdDQUFtQjs7QUFFckU7QUFDQSx1Q0FBdUMsZ0NBQW1COzs7QUFHMUQsZ0NBQW1COztBQUVuQixnQ0FBbUI7O0FBRW5CLGdDQUFtQjs7QUFFbkIsZ0NBQW1COztBQUVuQixnQ0FBbUI7O0FBRW5COztBQUVBO0FBQ0EsVUFBVSxnQ0FBbUI7QUFDN0IsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0RBQXdEOztBQUV4RCw4Q0FBOEMsU0FBUztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxnQ0FBbUI7O0FBRXJFO0FBQ0EsdUNBQXVDLGdDQUFtQjs7O0FBRzFELGdDQUFtQjs7QUFFbkIsZ0NBQW1COztBQUVuQixnQ0FBbUI7O0FBRW5CLGdDQUFtQjs7QUFFbkIsZ0RBQWdELDBEQUEwRCwyQ0FBMkM7O0FBRXJKLGlDQUFpQywwR0FBMEcsaUJBQWlCLGFBQWE7O0FBRXpLOztBQUVBLGFBQWEsZ0NBQW1COztBQUVoQyxtQkFBbUIsZ0NBQW1COztBQUV0QztBQUNBLFVBQVUsZ0NBQW1CO0FBQzdCLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0Q7O0FBRWxELDhDQUE4QyxTQUFTO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUEsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxnQ0FBbUI7O0FBRXJFOzs7QUFHQSxnQ0FBbUI7O0FBRW5CLGdDQUFtQjs7QUFFbkIsZ0RBQWdELDBEQUEwRCwyQ0FBMkM7O0FBRXJKLGlDQUFpQywwR0FBMEcsaUJBQWlCLGFBQWE7O0FBRXpLLGFBQWEsZ0NBQW1COztBQUVoQyxlQUFlLGdDQUFtQjtBQUNsQzs7QUFFQSxZQUFZLGdDQUFtQjs7QUFFL0IsZ0JBQWdCLGdDQUFtQjtBQUNuQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBLE9BQU87O0FBRVA7QUFDQSxrREFBa0QsaUNBQW1COztBQUVyRTs7O0FBR0EsZ0RBQWdELDBEQUEwRCwyQ0FBMkM7O0FBRXJKLGlDQUFpQywwR0FBMEcsaUJBQWlCLGFBQWE7O0FBRXpLLG1CQUFtQixpQ0FBbUI7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUEsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxpQ0FBbUI7O0FBRXJFOzs7QUFHQSxZQUFZLGlDQUFtQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxJQUFJOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLE9BQU87O0FBRVA7QUFDQSxrREFBa0QsaUNBQW1COztBQUVyRTs7O0FBR0EsaUNBQW1COztBQUVuQixZQUFZLGlDQUFtQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGlDQUFtQjs7QUFFckU7QUFDQSx1Q0FBdUMsaUNBQW1COzs7QUFHMUQsZUFBZSxpQ0FBbUI7QUFDbEM7O0FBRUEsWUFBWSxpQ0FBbUI7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBLE9BQU87O0FBRVA7QUFDQSxrREFBa0QsaUNBQW1COztBQUVyRTs7O0FBR0EsWUFBWSxpQ0FBbUI7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBLE9BQU87O0FBRVA7QUFDQSxrREFBa0QsaUNBQW1COztBQUVyRTs7O0FBR0EsaUNBQW1COztBQUVuQixnREFBZ0QsMERBQTBELDJDQUEyQzs7QUFFckosaUNBQWlDLDBHQUEwRyxpQkFBaUIsYUFBYTs7QUFFekssYUFBYSxpQ0FBbUI7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGlDQUFtQjs7QUFFckU7OztBQUdBLGVBQWUsaUNBQW1CO0FBQ2xDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGlDQUFtQjs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLDRDQUE0QyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVEOztBQUUvUCw4REFBOEQsc0VBQXNFLDhEQUE4RCxrREFBa0QsaUJBQWlCLEdBQUc7O0FBRXhRLHdDQUF3Qyx1QkFBdUIseUZBQXlGOztBQUV4SixnREFBZ0QsMERBQTBELDJDQUEyQzs7QUFFckosaUNBQWlDLDBHQUEwRyxpQkFBaUIsYUFBYTs7QUFFekssYUFBYSxpQ0FBbUI7O0FBRWhDLGNBQWMsaUNBQW1COztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsWUFBWTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzRUFBc0U7QUFDdEU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwwREFBMEQ7QUFDMUQsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLFNBQVM7QUFDL0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsU0FBUztBQUMvQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsU0FBUztBQUMvQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEIsa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxzSEFBc0g7O0FBRXRIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsaUJBQWlCOztBQUU1RDtBQUNBLDBEQUEwRDs7QUFFMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0VBQWdFOztBQUVoRTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLFNBQVM7QUFDN0I7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxHQUFHOztBQUVWLGtEQUFrRDtBQUNsRDs7QUFFQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxnQkFBZ0I7QUFDekI7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQixtREFBbUQ7O0FBRW5ELGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixZQUFZO0FBQzlCLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCOztBQUUxQjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsY0FBYyxZQUFZO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjs7QUFFQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLElBQUk7OztBQUdMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxpQ0FBbUI7O0FBRXJFOzs7QUFHQSxpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkI7QUFDQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGlDQUFtQjs7QUFFckU7OztBQUdBLDBCQUEwQixpQ0FBbUI7O0FBRTdDLGtCQUFrQixpQ0FBbUI7O0FBRXJDLGFBQWEsaUNBQW1COztBQUVoQyxpQkFBaUIsaUNBQW1COztBQUVwQyxlQUFlLGlDQUFtQjs7QUFFbEMsYUFBYSxpQ0FBbUI7O0FBRWhDLGNBQWMsaUNBQW1COztBQUVqQyxrQkFBa0IsaUNBQW1COztBQUVyQyxrQ0FBa0MsaUNBQW1COztBQUVyRCxlQUFlLGlDQUFtQjs7QUFFbEMsc0JBQXNCLGlDQUFtQjs7QUFFekMsb0JBQW9CLGlDQUFtQjs7QUFFdkMscUJBQXFCLGlDQUFtQjs7QUFFeEMscUJBQXFCLGlDQUFtQjs7QUFFeEMsc0JBQXNCLGlDQUFtQjs7QUFFekMsVUFBVSxpQ0FBbUI7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhGQUE4RjtBQUM5Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGlDQUFtQjs7QUFFckU7OztBQUdBLGlDQUFtQjs7QUFFbkIsYUFBYSxpQ0FBbUI7O0FBRWhDLGtCQUFrQixpQ0FBbUI7O0FBRXJDLGtCQUFrQixpQ0FBbUI7O0FBRXJDLDBCQUEwQixpQ0FBbUI7O0FBRTdDLG1CQUFtQixpQ0FBbUI7O0FBRXRDLGtDQUFrQyxpQ0FBbUI7O0FBRXJELGtCQUFrQixpQ0FBbUI7O0FBRXJDLFlBQVksaUNBQW1COztBQUUvQixpQkFBaUIsaUNBQW1COztBQUVwQywwQkFBMEIsaUNBQW1COztBQUU3QyxlQUFlLGlDQUFtQjs7QUFFbEMsY0FBYyxpQ0FBbUI7O0FBRWpDLGNBQWMsaUNBQW1COztBQUVqQyxxQkFBcUIsaUNBQW1COztBQUV4QyxxQkFBcUIsaUNBQW1COztBQUV4QywyQkFBMkIsaUNBQW1COztBQUU5QyxzQkFBc0IsaUNBQW1COztBQUV6QyxnQkFBZ0IsaUNBQW1COztBQUVuQyxpQkFBaUIsaUNBQW1COztBQUVwQyxxQkFBcUIsaUNBQW1COztBQUV4QywwQkFBMEIsaUNBQW1COztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFdBQVc7QUFDN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxL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LGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixPQUFPLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixPQUFPLGlDQUFtQixRQUFRLGlDQUFtQixPQUFPLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQixRQUFRLGlDQUFtQjtBQUNqN0IsSUFBSSxLQUFLLEVBQUU7QUFDWCxDQUFDO0FBQ0Q7QUFDQSxDQUFDOztBQUVELE9BQU87O0FBRVA7QUFDQSxpQ0FBaUMsaUNBQW1COztBQUVwRDs7O0FBR0EsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFt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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDOztBQUVsQzs7QUFFQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7O0FBRUEsOEJBQThCLGNBQWM7QUFDNUM7QUFDQSw4Q0FBOEM7O0FBRTlDLDhDQUE4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QW1CO0FBQzNEOzs7QUFHQSxpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGFBQWEsaUNBQW1COztBQUVoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUksV0FBVztBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGlDQUFtQjs7QUFFckU7OztBQUdBLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlDQUFtQjs7QUFFbkIsaUNBQW1COztBQUVuQixpQ0FBbUI7O0FBRW5CLGlD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O0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEseUNBQXlDLFNBQVM7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsc0JBQXNCOztBQUV0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHdCQUF3Qjs7O0FBR3hCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLDhCQUE4QjtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDLFNBQVM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdHQUFnRzs7QUFFaEc7QUFDQSxtQ0FBbUM7QUFDbkMsUUFBUTtBQUNSLDZCQUE2Qjs7QUFFN0I7O0FBRUEsNkNBQTZDLFNBQVM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsd0NBQXdDO0FBQ3hDLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUiw0T0FBNE87OztBQUc1TztBQUNBLGlGQUFpRjs7QUFFakY7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUSxXQUFXO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsMEJBQTBCOztBQUUxQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE1BQU07QUFDTjtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixhQUFhO0FBQ2I7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0RBQStEOztBQUUvRCxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSw2ek1BQTZ6TTs7QUFFN3pNO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxtZEFBbWQ7O0FBRW5kO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSwyakJBQTJqQjs7QUFFM2pCO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxvdUxBQW91TDs7QUFFcHVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlEQUFpRDs7QUFFakQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsVUFBVTtBQUM1Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHLEdBQUc7O0FBRU47QUFDQSx1REFBdUQ7O0FBRXZEOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0Esd0RBQXdEO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjs7QUFFQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFdBQVc7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsWUFBWTtBQUMvQjs7QUFFQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFdBQVc7QUFDN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixZQUFZO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0Isd0JBQXdCO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCOztBQUV2Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixxQkFBcUI7QUFDM0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEIsOEJBQThCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHdCQUF3QjtBQUN4Qjs7O0FBR0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsc0dBQXNHOztBQUV0Rzs7QUFFQSw2Q0FBNkM7OztBQUc3QztBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxHQUFHO0FBQ1osUUFBUTtBQUNSO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdCQUF3Qiw4QkFBOEI7QUFDdEQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBLGtDQUFrQzs7QUFFbEM7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkMsa0JBQWtCLHFCQUFxQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FB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QUFDQSxHQUFHO0FBQ0g7QUFDQSwwRUFBMEUsYUFBYTtBQUN2RjtBQUNBOztBQUVBOztBQUVBLHVDQUF1QyxxQkFBcUI7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCOztBQUVBLHVCQUF1QixhQUFhO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDRCQUE0Qiw4QkFBOEI7QUFDMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVEQUF1RDtBQUN2RCxvRUFBb0U7QUFDcEU7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDLFNBQVM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLFNBQVM7QUFDcEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLDBCQUEwQix1QkFBdUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLG1CQUFtQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDRCQUE0Qiw4QkFBOEI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEOztBQUVsRCxzQkFBc0IsMEJBQTBCO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsc0JBQXNCLG1CQUFtQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUI7O0FBRXZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sR0FBRzs7QUFFVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIsOEJBQThCO0FBQzFEO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLGdDQUFnQztBQUNqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsdUdBQXVHOztBQUV2RztBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQSw2REFBNkQ7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFOztBQUUxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLLEdBQUc7OztBQUdSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUdBQXVHO0FBQ3ZHOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQSwwREFBMEQ7O0FBRTFEO0FBQ0E7QUFDQTtB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QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR04saUNBQWlDLFlBQVk7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBLDBEQUEwRDs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztB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QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLDBGQUEwRjs7QUFFMUY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWIscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9EQUFvRCxTQUFTO0FBQzdEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVAsNkJBQTZCLGlDQUFpQztBQUM5RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsY0FBYztBQUN4RTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLDRDQUE0QztBQUM1Qzs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLDhCQUE4QjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLDZGQUE2RixhQUFhO0FBQzFHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFROzs7QUFHUjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDOzs7QUFHaEM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsK0JBQStCOztBQUUvQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsZUFBZTtBQUNmLGtCQUFrQjtBQUNsQixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIsNEJBQTRCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLDRCQUE0QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDBFQUEwRTtBQUMxRTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sdUNBQXVDLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRTtBQUN6RTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0MsUUFBUTtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNB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O0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTs7QUFFQSx3QkFBd0IsV0FBVztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQiw4QkFBOEI7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLDhCQUE4QjtBQUN0RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsOEJBQThCO0FBQ3BEOztBQUVBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLCtCQUErQjtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLDhCQUE4QjtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsOEJBQThCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixxQkFBcUI7QUFDM0M7QUFDQTs7QUFFQSx3QkFBd0IsaUNBQWlDO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDRCQUE0QixpQkFBaUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw0QkFBNEIsbUJBQW1CO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLHNCQUFzQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlDQUF5QztBQUN6QztBQUNBOztBQUVBLHNCQUFzQixPQUFPO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUEsZ0NBQWdDLG1CQUFtQjtBQUNuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLHVCQUF1QjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxzQkFBc0IsMkJBQTJCO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixxQkFBcUI7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsc0JBQXNCLHFCQUFxQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMERBQTBEO0FBQzFEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBLDRDQUE0Qzs7QUFFNUM7QUFDQSx5Q0FBeUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBLHdCQUF3QixZQUFZO0FBQ3BDO0FBQ0E7O0FBRUEsMEJBQTBCLHFCQUFxQjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjOzs7QUFHZDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDLHdCQUF3QjtBQUN4RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBLDRCQUE0Qix1QkFBdUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIsMkJBQTJCO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsc0JBQXNCLHNCQUFzQjtBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxzQkFBc0IscUJBQXFCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUE7QUFDQTs7QUFFQSxvREFBb0QsZ0JBQWdCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQSx1Q0FBdUMsZ0JBQWdCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixvQkFBb0I7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBLEtBQUssS0FBSTtBQUNUO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DLFNBQVM7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsU0FBUztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQyxVQUFVO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLDBCQUEw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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLGdDQUFnQztBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixXQUFXO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxpQ0FBbUI7O0FBRXJFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLGlDQUFtQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQW1CO0FBQ3JDO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQW1CO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87O0FBRVA7QUFDQSxrREFBa0QsaUNBQW1COztBQUVyRSxpQkFBaUIsaUNBQW1COzs7QUFHcEMsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxpQ0FBbUI7O0FBRXJFO0FBQ0EsdUNBQXVDLGlDQUFtQjtBQUMxRCx3Q0FBd0MsaUNBQW1COztBQUUzRDs7QUFFQSxhQUFhLGlDQUFtQjs7QUFFaEMsY0FBYyxpQ0FBbUI7QUFDakMsbUJBQW1CLGlDQUFtQjtBQUN0QyxtQkFBbUIsaUNBQW1CO0FBQ3RDLGdCQUFnQixpQ0FBbUI7O0FBRW5DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLE1BQU07O0FBRU47QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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O0FBQ0o7QUFDQTtBQUNBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUEsa0NBQWtDLFFBQVE7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1TkFBdU4saUVBQWlFLEVBQUU7QUFDMVIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsMkpBQTJKLGlFQUFpRSxFQUFFO0FBQzlOLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EseUxBQXlMLGlFQUFpRSxFQUFFO0FBQzVQLEdBQUc7QUFDSDtBQUNBO0FBQ0EsdU5BQXVOLGlFQUFpRSxFQUFFO0FBQzFSLEdBQUc7QUFDSDtBQUNBO0FBQ0EsdU5BQXVOLGdFQUFnRSxFQUFFO0FBQ3pSLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7OztBQUlBLE9BQU87O0FBRVA7QUFDQSxrREFBa0Qsa0NBQW1COztBQUVyRTs7QUFFQSxjQUFjLGtDQUFtQjs7QUFFakM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQywwQkFBMEIsbUJBQW1CO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmOztBQUVBLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsNEJBQTRCOztBQUUzRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDZCQUE2QjtBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3Qiw2QkFBNkI7QUFDckQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQSx3QkFBd0IsZ0JBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBS0EsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxrQ0FBbUI7O0FBRXJFOzs7QUFHQSxjQUFjLGtDQUFtQjs7QUFFakM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEIsb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSx1Q0FBdUM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSw0QkFBNEI7O0FBRW5HLHFFQUFxRTs7QUFFckU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsNkJBQTZCO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDZCQUE2QjtBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FB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Q0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIsd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjs7QUFFL0Is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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtB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O0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGtDQUFtQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxPQUFPO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxtQkFBbUI7QUFDcEUsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtB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Q0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0osMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTs7QUFFQSxjQUFjLGtDQUFtQjtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHNDQUFzQyxzQ0FBc0M7QUFDekc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDO0FBQ3RDLHNDQUFzQztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsNEJBQTRCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxXQUFXO0FBQ3pCLGNBQWMsZ0JBQWdCOztBQUU5QjtBQUNBLDJCQUEyQixRQUFRO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWMsT0FBTzs7QUFFckI7QUFDQTtBQUNBOztBQUVBLGNBQWMsUUFBUTtBQUN0QixjQUFjLFNBQVM7QUFDdkIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsU0FBUzs7QUFFdkI7QUFDQSxjQUFjLE9BQU87O0FBRXJCOztBQUVBLGNBQWMsUUFBUTtBQUN0Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLFFBQVE7O0FBRXRCO0FBQ0EsY0FBYyxTQUFTOztBQUV2Qjs7QUFFQTtBQUNBLHVCQUF1QixRQUFRO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWMsU0FBUztBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGNBQWMsUUFBUTs7QUFFdEI7QUFDQSxjQUFjLFdBQVc7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxRQUFRO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixtQkFBbUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGtDQUFtQjs7QUFFckU7QUFDQSx1Q0FBdUMsa0NBQW1COzs7QUFHMUQsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQixrQ0FBbUI7O0FBRW5CLGtDQUFtQjs7QUFFbkIsa0NBQW1COztBQUVuQjs7QUFFQSw0Q0FBNEMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RDs7QUFFL1AsOERBQThELHNFQUFzRSw4REFBOEQsa0RBQWtELGlCQUFpQixHQUFHOztBQUV4USxnREFBZ0QsMERBQTBELDJDQUEyQzs7QUFFckosaUNBQWlDLDBHQUEwRyxpQkFBaUIsYUFBYTs7QUFFekssOERBQThELGlGQUFpRixnREFBZ0Qsd0hBQXdILGdCQUFnQixXQUFXLHFCQUFxQiw0QkFBNEIsY0FBYyxTQUFTLG1DQUFtQzs7QUFFN2Isa0RBQWtELGdCQUFnQixnRUFBZ0Usd0RBQXdELDZEQUE2RCxzREFBc0Q7O0FBRTdTLHVDQUF1Qyx1REFBdUQsdUNBQXVDLFNBQVMsT0FBTyxvQkFBb0I7O0FBRXpLO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0Isa0NBQW1COztBQUUzQyxZQUFZLGtDQUFtQjs7QUFFL0IsOEJBQThCLGtDQUFtQjs7QUFFakQsOEJBQThCLGtDQUFtQjs7QUFFakQsa0NBQWtDLGtDQUFtQjs7QUFFckQsbUNBQW1DLGtDQUFtQjs7QUFFdEQsZ0NBQWdDLGtDQUFtQjs7QUFFbkQsOEJBQThCLGtDQUFtQjs7QUFFakQsNkJBQTZCLGtDQUFtQjs7QUFFaEQsU0FBUyxrQ0FBbUI7O0FBRTVCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixvQkFBb0I7QUFDdEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhFQUE4RSxhQUFhO0FBQzNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMsR0FBRzs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RDs7QUFFOUQsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5R0FBeUc7QUFDekc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw2RUFBNkUsNEJBQTRCO0FBQ3pHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07OztBQUdOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0gsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0Esb0JBQW9CLHlCQUF5QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLHlCQUF5QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLFdBQVc7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7O0FBRTVDOztBQUVBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7O0FBRTVDO0FBQ0E7O0FBRUEsd0VBQXdFLDhCQUE4QjtBQUN0RztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNOzs7QUFHTiwwQ0FBMEM7O0FBRTFDO0FBQ0E7O0FBRUEsdUNBQXVDLHNCQUFzQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3RUFBd0UsOEJBQThCO0FBQ3RHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07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QUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUosQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDLElBQUk7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0IsMkJBQTJCO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEdBQUc7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxHQUFHO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRCw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0gsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMsR0FBRzs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLHVCQUF1QjtBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQyx1Q0FBdUMscUJBQXFCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsK0RBQStEOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUMsSUFBSTtBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMEVBQTBFLGdDQUFnQztBQUMxRztBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5Q0FBeUM7O0FBRXpDO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsdUJBQXVCO0FBQ3pDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBLHdCQUF3Qjs7QUFFeEI7QUFDQSxpRkFBaUYsZ0NBQWdDO0FBQ2pIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1RkFBdUYsZ0NBQWdDO0FBQ3ZIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLHVGQUF1RixnQ0FBZ0M7QUFDdkg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQiw0QkFBNEI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBLEVBQUU7OztBQUdGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGLG1CQUFtQixhQUFhOzs7QUFHaEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQSwrQkFBK0IsYUFBYTtBQUM1Qzs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixxQkFBcUI7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0RBQWdEOztBQUVoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDs7QUFFaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0dBQWdHLGdDQUFnQztBQUNoSTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGtDQUFrQywrQkFBK0I7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHLGdDQUFnQztBQUNoSTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw4QkFBOEI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw0Q0FBNEM7O0FBRTVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6Qyw0QkFBNEIsc0JBQXNCO0FBQ2xEO0FBQ0Esa0RBQWtEOztBQUVsRCxtSEFBbUgsZ0NBQWdDO0FBQ25KOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1COztBQUVuQix1QkFBdUI7O0FBRXZCO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osd0NBQXdDLGFBQWE7OztBQUdyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1RkFBdUYsZ0NBQWdDO0FBQ3ZIO0FBQ0Esc0NBQXNDOztBQUV0Qyx1RkFBdUYsZ0NBQWdDO0FBQ3ZIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3RkFBd0YsZ0NBQWdDO0FBQ3hIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7O0FBRXZEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQix1QkFBdUI7QUFDM0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUZBQXVGLGdDQUFnQztBQUN2SDs7QUFFQSx1RkFBdUYsZ0NBQWdDO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVGQUF1RixnQ0FBZ0M7QUFDdkg7QUFDQTs7QUFFQSx3RkFBd0YsZ0NBQWdDO0FBQ3hIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsR0FBRzs7QUFFWjs7QUFFQTtBQUNBLDhDQUE4Qzs7QUFFOUMsc0VBQXNFOztBQUV0RTtBQUNBOztBQUVBLHdCQUF3QixpQ0FBaUM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUMsc0xBQXNMO0FBQ3ZMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1GQUFtRixnQ0FBZ0M7QUFDbkg7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUZBQWlGLGdDQUFnQztBQUNqSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtFQUErRSxnQ0FBZ0M7QUFDL0c7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7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QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw4RUFBOEUsZ0NBQWdDO0FBQzlHOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw4RUFBOEUsZ0NBQWdDO0FBQzlHOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsOEVBQThFLGdDQUFnQztBQUM5Rzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnRkFBZ0YsZ0NBQWdDO0FBQ2hIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixxQkFBcUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCLHFCQUFxQjs7QUFFckIscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxXQUFXOztBQUVYLFdBQVc7O0FBRVgsV0FBVzs7QUFFWCxXQUFXOztBQUVYLFlBQVk7O0FBRVosYUFBYTs7QUFFYixXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNFQUFzRTs7QUFFdEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztB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OztBQUV4RTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBLDBCQUEwQixTQUFTO0FBQ25DOztBQUVBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR04sNkJBQTZCLFNBQVM7QUFDdEM7O0FBRUE7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTs7O0FBR1o7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZOzs7QUFHWjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTs7O0FBR1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkNBQTZDOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBOztBQUVB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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsMEJBQTBCLG9CQUFvQjtBQUM5QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdDQUFnQyxlQUFlO0FBQy9DOztBQUVBLGtDQUFrQyx3QkFBd0I7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxTQUFTO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FB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QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFVBQVU7QUFDdkIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsVUFBVTtBQUN2QixjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBLEdB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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7O0FBR0QsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxrQ0FBbUI7O0FBRXJFLHdDQUF3QyxrQ0FBbUI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILHdCQUF3QixTQUFTO0FBQ2pDO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUE0QyxLQUFLOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0Esb0NBQW9DLE9BQU87QUFDM0M7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsZ0JBQWdCLGtDQUFtQjs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDhDQUE4QyxPQUFPO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4QyxPQUFPO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsT0FBTztBQUNyRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDLE9BQU87QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtDQUErQyxPQUFPO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkMsT0FBTztBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBOztBQUVBLGdEQUFnRCxPQUFPO0FBQ3ZEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FB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QUNBO0FBQ0E7QUFDQSx1Q0FBdUMsUUFBUTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsT0FBTztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHVIQUF1SDtBQUM3SCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixtR0FBbUc7QUFDcEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxrQ0FBbUI7O0FBRXJFO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0NBQW1CO0FBQzlCLGdCQUFnQixrQ0FBbUI7QUFDbkMsWUFBWSxrQ0FBbUI7QUFDL0Isb0JBQW9CLGtDQUFtQjtBQUN2QyxzQkFBc0Isa0NBQW1CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELHdFQUF3RTtBQUNoSTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Qsd0VBQXdFO0FBQ2hJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLE9BQU87QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsT0FBTztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsT0FBTztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLE9BQU87QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBLGtEQUFrRCxrQ0FBbUI7O0FBRXJFO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQ0FBbUI7QUFDdEMsb0JBQW9CLGtDQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLGtEQUFrRCxPQUFPO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QyxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsR0FBRztBQUNIO0FBQ0EsY0FBYztBQUNkLElBQUk7QUFDSixjQUFjO0FBQ2QsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7QUFDQSxhQUFhLCtDQUErQztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsU0FBUztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsT0FBTztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRUFBa0UsT0FBTztBQUN6RTtBQUNBLGtCQUFrQix1Q0FBdUM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJGQUEyRjtBQUMzRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87O0FBRVA7QUFDQSxrREFBa0Qsa0NBQW1COztBQUVyRTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtDQUFtQjtBQUNsQyxpQkFBaUIsa0NBQW1CO0FBQ3BDLGtCQUFrQixrQ0FBbUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLE9BQU87QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxTQUFTO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLE9BQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsT0FBTztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGNBQWM7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGFBQWE7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLE9BQU87QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLE9BQU87QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87O0FBRVA7QUFDQSxrREFBa0Qsa0NBQW1COztBQUVyRTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0NBQW1CO0FBQ25DLGdCQUFnQixrQ0FBbUI7QUFDbkMsZ0JBQWdCLGtDQUFtQjtBQUNuQyxlQUFlLGtDQUFtQjtBQUNsQyxtQkFBbUIsa0NBQW1CO0FBQ3RDLGtCQUFrQixrQ0FBbUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQVE7QUFDcEIsWUFBWSxRQUFRO0FBQ3BCLFlBQVksMEJBQTBCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQixZQUFZLFFBQVE7QUFDcEIsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyxtQ0FBbUM7QUFDbkMsdUNBQXVDO0FBQ3ZDLCtCQUErQjtBQUMvQixrQ0FBa0M7QUFDbEMscUNBQXFDO0FBQ3JDLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQixZQUFZLFFBQVE7QUFDcEIsWUFBWSxRQUFRO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0Esa0JBQWtCLDJCQUEyQjtBQUM3QyxJQUFJO0FBQ0osa0JBQWtCLFlBQVk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLE9BQU87QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxTQUFTO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQSxrREFBa0Qsa0NBQW1COztBQUVyRTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDLGtDQUFtQjs7QUFFL0Q7QUFDQTtBQUNBLGlCQUFpQiwwQkFBMEI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGtDQUFtQjs7QUFFckU7OztBQUdBLG1CQUFtQixrQ0FBbUI7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0Esa0RBQWtELGtDQUFtQjs7QUFFckUsc0JBQXNCLGtDQUFtQjtBQUN6Qyx5QkFBeUIsa0NBQW1COztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTtBQUNBLCtCQUErQixxREFBcUQ7QUFDcEY7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLHlDQUF5QyxtOUVBQW05RTs7O0FBRzUvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0EsOEJBQThCLHVxRUFBdXFFOztBQUVyc0UsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUCxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQ0FBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRkFBc0Ysa0NBQW1CO0FBQ3pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtDQUFtQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQ0FBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGtDQUFtQjtBQUN2RDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsQ0FBQztBQUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vVnVleHkvLi9ub2RlX21vZHVsZXMvcGRmbWFrZS9idWlsZC9wZGZtYWtlLmpzP2U0OTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyohIHBkZm1ha2UgdjAuMi42LCBAbGljZW5zZSBNSVQsIEBsaW5rIGh0dHA6Ly9wZGZtYWtlLm9yZyAqL1xuKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIHtcblx0XHR2YXIgYSA9IGZhY3RvcnkoKTtcblx0XHRmb3IodmFyIGkgaW4gYSkgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGV4cG9ydHMgOiByb290KVtpXSA9IGFbaV07XG5cdH1cbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24oKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xuXG4vKioqLyA5MjgyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogcHJvdmlkZWQgZGVwZW5kZW5jeSAqLyB2YXIgcHJvY2VzcyA9IF9fd2VicGFja19yZXF1aXJlX18oNDE1NSk7XG4vLyBDdXJyZW50bHkgaW4gc3luYyB3aXRoIE5vZGUuanMgbGliL2Fzc2VydC5qc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2NvbW1pdC8yYTUxYWU0MjRhNTEzZWM5YTZhYTM0NjZiYWEwY2MxZDU1ZGQ0ZjNiXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxudmFyIF9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTM2KSxcbiAgICBfcmVxdWlyZSRjb2RlcyA9IF9yZXF1aXJlLmNvZGVzLFxuICAgIEVSUl9BTUJJR1VPVVNfQVJHVU1FTlQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfQU1CSUdVT1VTX0FSR1VNRU5ULFxuICAgIEVSUl9JTlZBTElEX0FSR19UWVBFID0gX3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gICAgRVJSX0lOVkFMSURfQVJHX1ZBTFVFID0gX3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1ZBTFVFLFxuICAgIEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxcbiAgICBFUlJfTUlTU0lOR19BUkdTID0gX3JlcXVpcmUkY29kZXMuRVJSX01JU1NJTkdfQVJHUztcblxudmFyIEFzc2VydGlvbkVycm9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OTYxKTtcblxudmFyIF9yZXF1aXJlMiA9IF9fd2VicGFja19yZXF1aXJlX18oOTUzOSksXG4gICAgaW5zcGVjdCA9IF9yZXF1aXJlMi5pbnNwZWN0O1xuXG52YXIgX3JlcXVpcmUkdHlwZXMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg5NTM5KS50eXBlcyksXG4gICAgaXNQcm9taXNlID0gX3JlcXVpcmUkdHlwZXMuaXNQcm9taXNlLFxuICAgIGlzUmVnRXhwID0gX3JlcXVpcmUkdHlwZXMuaXNSZWdFeHA7XG5cbnZhciBvYmplY3RBc3NpZ24gPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbiA6IChfX3dlYnBhY2tfcmVxdWlyZV9fKDgwOTEpLmFzc2lnbik7XG52YXIgb2JqZWN0SXMgPSBPYmplY3QuaXMgPyBPYmplY3QuaXMgOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwOSk7XG52YXIgZXJyb3JDYWNoZSA9IG5ldyBNYXAoKTtcbnZhciBpc0RlZXBFcXVhbDtcbnZhciBpc0RlZXBTdHJpY3RFcXVhbDtcbnZhciBwYXJzZUV4cHJlc3Npb25BdDtcbnZhciBmaW5kTm9kZUFyb3VuZDtcbnZhciBkZWNvZGVyO1xuXG5mdW5jdGlvbiBsYXp5TG9hZENvbXBhcmlzb24oKSB7XG4gIHZhciBjb21wYXJpc29uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MTU4KTtcblxuICBpc0RlZXBFcXVhbCA9IGNvbXBhcmlzb24uaXNEZWVwRXF1YWw7XG4gIGlzRGVlcFN0cmljdEVxdWFsID0gY29tcGFyaXNvbi5pc0RlZXBTdHJpY3RFcXVhbDtcbn0gLy8gRXNjYXBlIGNvbnRyb2wgY2hhcmFjdGVycyBidXQgbm90IFxcbiBhbmQgXFx0IHRvIGtlZXAgdGhlIGxpbmUgYnJlYWtzIGFuZFxuLy8gaW5kZW50YXRpb24gaW50YWN0LlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuXG52YXIgZXNjYXBlU2VxdWVuY2VzUmVnRXhwID0gL1tcXHgwMC1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZl0vZztcbnZhciBtZXRhID0gKC8qIHVudXNlZCBwdXJlIGV4cHJlc3Npb24gb3Igc3VwZXIgKi8gbnVsbCAmJiAoW1wiXFxcXHUwMDAwXCIsIFwiXFxcXHUwMDAxXCIsIFwiXFxcXHUwMDAyXCIsIFwiXFxcXHUwMDAzXCIsIFwiXFxcXHUwMDA0XCIsIFwiXFxcXHUwMDA1XCIsIFwiXFxcXHUwMDA2XCIsIFwiXFxcXHUwMDA3XCIsICdcXFxcYicsICcnLCAnJywgXCJcXFxcdTAwMGJcIiwgJ1xcXFxmJywgJycsIFwiXFxcXHUwMDBlXCIsIFwiXFxcXHUwMDBmXCIsIFwiXFxcXHUwMDEwXCIsIFwiXFxcXHUwMDExXCIsIFwiXFxcXHUwMDEyXCIsIFwiXFxcXHUwMDEzXCIsIFwiXFxcXHUwMDE0XCIsIFwiXFxcXHUwMDE1XCIsIFwiXFxcXHUwMDE2XCIsIFwiXFxcXHUwMDE3XCIsIFwiXFxcXHUwMDE4XCIsIFwiXFxcXHUwMDE5XCIsIFwiXFxcXHUwMDFhXCIsIFwiXFxcXHUwMDFiXCIsIFwiXFxcXHUwMDFjXCIsIFwiXFxcXHUwMDFkXCIsIFwiXFxcXHUwMDFlXCIsIFwiXFxcXHUwMDFmXCJdKSk7XG5cbnZhciBlc2NhcGVGbiA9IGZ1bmN0aW9uIGVzY2FwZUZuKHN0cikge1xuICByZXR1cm4gbWV0YVtzdHIuY2hhckNvZGVBdCgwKV07XG59O1xuXG52YXIgd2FybmVkID0gZmFsc2U7IC8vIFRoZSBhc3NlcnQgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0aGF0IHRocm93XG4vLyBBc3NlcnRpb25FcnJvcidzIHdoZW4gcGFydGljdWxhciBjb25kaXRpb25zIGFyZSBub3QgbWV0LiBUaGVcbi8vIGFzc2VydCBtb2R1bGUgbXVzdCBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlLlxuXG52YXIgYXNzZXJ0ID0gbW9kdWxlLmV4cG9ydHMgPSBvaztcbnZhciBOT19FWENFUFRJT05fU0VOVElORUwgPSB7fTsgLy8gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gQWxsIGFzc2VydGlvbiBtZXRob2RzIHByb3ZpZGVcbi8vIGJvdGggdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgdmFsdWVzIHRvIHRoZSBhc3NlcnRpb24gZXJyb3IgZm9yXG4vLyBkaXNwbGF5IHB1cnBvc2VzLlxuXG5mdW5jdGlvbiBpbm5lckZhaWwob2JqKSB7XG4gIGlmIChvYmoubWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyBvYmoubWVzc2FnZTtcbiAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG9iaik7XG59XG5cbmZ1bmN0aW9uIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IsIHN0YWNrU3RhcnRGbikge1xuICB2YXIgYXJnc0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbnRlcm5hbE1lc3NhZ2U7XG5cbiAgaWYgKGFyZ3NMZW4gPT09IDApIHtcbiAgICBpbnRlcm5hbE1lc3NhZ2UgPSAnRmFpbGVkJztcbiAgfSBlbHNlIGlmIChhcmdzTGVuID09PSAxKSB7XG4gICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICBhY3R1YWwgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHdhcm5lZCA9PT0gZmFsc2UpIHtcbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgICB2YXIgd2FybiA9IHByb2Nlc3MuZW1pdFdhcm5pbmcgPyBwcm9jZXNzLmVtaXRXYXJuaW5nIDogY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG4gICAgICB3YXJuKCdhc3NlcnQuZmFpbCgpIHdpdGggbW9yZSB0aGFuIG9uZSBhcmd1bWVudCBpcyBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgYXNzZXJ0LnN0cmljdEVxdWFsKCkgaW5zdGVhZCBvciBvbmx5IHBhc3MgYSBtZXNzYWdlLicsICdEZXByZWNhdGlvbldhcm5pbmcnLCAnREVQMDA5NCcpO1xuICAgIH1cblxuICAgIGlmIChhcmdzTGVuID09PSAyKSBvcGVyYXRvciA9ICchPSc7XG4gIH1cblxuICBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyBtZXNzYWdlO1xuICB2YXIgZXJyQXJncyA9IHtcbiAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yID09PSB1bmRlZmluZWQgPyAnZmFpbCcgOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0Rm46IHN0YWNrU3RhcnRGbiB8fCBmYWlsXG4gIH07XG5cbiAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGVyckFyZ3MubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIH1cblxuICB2YXIgZXJyID0gbmV3IEFzc2VydGlvbkVycm9yKGVyckFyZ3MpO1xuXG4gIGlmIChpbnRlcm5hbE1lc3NhZ2UpIHtcbiAgICBlcnIubWVzc2FnZSA9IGludGVybmFsTWVzc2FnZTtcbiAgICBlcnIuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cblxuICB0aHJvdyBlcnI7XG59XG5cbmFzc2VydC5mYWlsID0gZmFpbDsgLy8gVGhlIEFzc2VydGlvbkVycm9yIGlzIGRlZmluZWQgaW4gaW50ZXJuYWwvZXJyb3IuXG5cbmFzc2VydC5Bc3NlcnRpb25FcnJvciA9IEFzc2VydGlvbkVycm9yO1xuXG5mdW5jdGlvbiBpbm5lck9rKGZuLCBhcmdMZW4sIHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICB2YXIgZ2VuZXJhdGVkTWVzc2FnZSA9IGZhbHNlO1xuXG4gICAgaWYgKGFyZ0xlbiA9PT0gMCkge1xuICAgICAgZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gICAgICBtZXNzYWdlID0gJ05vIHZhbHVlIGFyZ3VtZW50IHBhc3NlZCB0byBgYXNzZXJ0Lm9rKClgJztcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdGhyb3cgbWVzc2FnZTtcbiAgICB9XG5cbiAgICB2YXIgZXJyID0gbmV3IEFzc2VydGlvbkVycm9yKHtcbiAgICAgIGFjdHVhbDogdmFsdWUsXG4gICAgICBleHBlY3RlZDogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICBvcGVyYXRvcjogJz09JyxcbiAgICAgIHN0YWNrU3RhcnRGbjogZm5cbiAgICB9KTtcbiAgICBlcnIuZ2VuZXJhdGVkTWVzc2FnZSA9IGdlbmVyYXRlZE1lc3NhZ2U7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59IC8vIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhdmFsdWUuXG5cblxuZnVuY3Rpb24gb2soKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpbm5lck9rLmFwcGx5KHZvaWQgMCwgW29rLCBhcmdzLmxlbmd0aF0uY29uY2F0KGFyZ3MpKTtcbn1cblxuYXNzZXJ0Lm9rID0gb2s7IC8vIFRoZSBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc2hhbGxvdywgY29lcmNpdmUgZXF1YWxpdHkgd2l0aCA9PS5cblxuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzICovXG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoJ2FjdHVhbCcsICdleHBlY3RlZCcpO1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblxuXG4gIGlmIChhY3R1YWwgIT0gZXhwZWN0ZWQpIHtcbiAgICBpbm5lckZhaWwoe1xuICAgICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgb3BlcmF0b3I6ICc9PScsXG4gICAgICBzdGFja1N0YXJ0Rm46IGVxdWFsXG4gICAgfSk7XG4gIH1cbn07IC8vIFRoZSBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciB3aGV0aGVyIHR3byBvYmplY3RzIGFyZSBub3Rcbi8vIGVxdWFsIHdpdGggIT0uXG5cblxuYXNzZXJ0Lm5vdEVxdWFsID0gZnVuY3Rpb24gbm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygnYWN0dWFsJywgJ2V4cGVjdGVkJyk7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXG5cbiAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkge1xuICAgIGlubmVyRmFpbCh7XG4gICAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICBvcGVyYXRvcjogJyE9JyxcbiAgICAgIHN0YWNrU3RhcnRGbjogbm90RXF1YWxcbiAgICB9KTtcbiAgfVxufTsgLy8gVGhlIGVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBhIGRlZXAgZXF1YWxpdHkgcmVsYXRpb24uXG5cblxuYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdhY3R1YWwnLCAnZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGlmIChpc0RlZXBFcXVhbCA9PT0gdW5kZWZpbmVkKSBsYXp5TG9hZENvbXBhcmlzb24oKTtcblxuICBpZiAoIWlzRGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgaW5uZXJGYWlsKHtcbiAgICAgIGFjdHVhbDogYWN0dWFsLFxuICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIG9wZXJhdG9yOiAnZGVlcEVxdWFsJyxcbiAgICAgIHN0YWNrU3RhcnRGbjogZGVlcEVxdWFsXG4gICAgfSk7XG4gIH1cbn07IC8vIFRoZSBub24tZXF1aXZhbGVuY2UgYXNzZXJ0aW9uIHRlc3RzIGZvciBhbnkgZGVlcCBpbmVxdWFsaXR5LlxuXG5cbmFzc2VydC5ub3REZWVwRXF1YWwgPSBmdW5jdGlvbiBub3REZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygnYWN0dWFsJywgJ2V4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoaXNEZWVwRXF1YWwgPT09IHVuZGVmaW5lZCkgbGF6eUxvYWRDb21wYXJpc29uKCk7XG5cbiAgaWYgKGlzRGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgaW5uZXJGYWlsKHtcbiAgICAgIGFjdHVhbDogYWN0dWFsLFxuICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIG9wZXJhdG9yOiAnbm90RGVlcEVxdWFsJyxcbiAgICAgIHN0YWNrU3RhcnRGbjogbm90RGVlcEVxdWFsXG4gICAgfSk7XG4gIH1cbn07XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cblxuYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIGRlZXBTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdhY3R1YWwnLCAnZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGlmIChpc0RlZXBFcXVhbCA9PT0gdW5kZWZpbmVkKSBsYXp5TG9hZENvbXBhcmlzb24oKTtcblxuICBpZiAoIWlzRGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgaW5uZXJGYWlsKHtcbiAgICAgIGFjdHVhbDogYWN0dWFsLFxuICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIG9wZXJhdG9yOiAnZGVlcFN0cmljdEVxdWFsJyxcbiAgICAgIHN0YWNrU3RhcnRGbjogZGVlcFN0cmljdEVxdWFsXG4gICAgfSk7XG4gIH1cbn07XG5cbmFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWwgPSBub3REZWVwU3RyaWN0RXF1YWw7XG5cbmZ1bmN0aW9uIG5vdERlZXBTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdhY3R1YWwnLCAnZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGlmIChpc0RlZXBFcXVhbCA9PT0gdW5kZWZpbmVkKSBsYXp5TG9hZENvbXBhcmlzb24oKTtcblxuICBpZiAoaXNEZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkpIHtcbiAgICBpbm5lckZhaWwoe1xuICAgICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgb3BlcmF0b3I6ICdub3REZWVwU3RyaWN0RXF1YWwnLFxuICAgICAgc3RhY2tTdGFydEZuOiBub3REZWVwU3RyaWN0RXF1YWxcbiAgICB9KTtcbiAgfVxufVxuXG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBzdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdhY3R1YWwnLCAnZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGlmICghb2JqZWN0SXMoYWN0dWFsLCBleHBlY3RlZCkpIHtcbiAgICBpbm5lckZhaWwoe1xuICAgICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgb3BlcmF0b3I6ICdzdHJpY3RFcXVhbCcsXG4gICAgICBzdGFja1N0YXJ0Rm46IHN0cmljdEVxdWFsXG4gICAgfSk7XG4gIH1cbn07XG5cbmFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIG5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoJ2FjdHVhbCcsICdleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKG9iamVjdElzKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgaW5uZXJGYWlsKHtcbiAgICAgIGFjdHVhbDogYWN0dWFsLFxuICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIG9wZXJhdG9yOiAnbm90U3RyaWN0RXF1YWwnLFxuICAgICAgc3RhY2tTdGFydEZuOiBub3RTdHJpY3RFcXVhbFxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgQ29tcGFyaXNvbiA9IGZ1bmN0aW9uIENvbXBhcmlzb24ob2JqLCBrZXlzLCBhY3R1YWwpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29tcGFyaXNvbik7XG5cbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoa2V5IGluIG9iaikge1xuICAgICAgaWYgKGFjdHVhbCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBhY3R1YWxba2V5XSA9PT0gJ3N0cmluZycgJiYgaXNSZWdFeHAob2JqW2tleV0pICYmIG9ialtrZXldLnRlc3QoYWN0dWFsW2tleV0pKSB7XG4gICAgICAgIF90aGlzW2tleV0gPSBhY3R1YWxba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzW2tleV0gPSBvYmpba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gY29tcGFyZUV4Y2VwdGlvbktleShhY3R1YWwsIGV4cGVjdGVkLCBrZXksIG1lc3NhZ2UsIGtleXMsIGZuKSB7XG4gIGlmICghKGtleSBpbiBhY3R1YWwpIHx8ICFpc0RlZXBTdHJpY3RFcXVhbChhY3R1YWxba2V5XSwgZXhwZWN0ZWRba2V5XSkpIHtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIC8vIENyZWF0ZSBwbGFjZWhvbGRlciBvYmplY3RzIHRvIGNyZWF0ZSBhIG5pY2Ugb3V0cHV0LlxuICAgICAgdmFyIGEgPSBuZXcgQ29tcGFyaXNvbihhY3R1YWwsIGtleXMpO1xuICAgICAgdmFyIGIgPSBuZXcgQ29tcGFyaXNvbihleHBlY3RlZCwga2V5cywgYWN0dWFsKTtcbiAgICAgIHZhciBlcnIgPSBuZXcgQXNzZXJ0aW9uRXJyb3Ioe1xuICAgICAgICBhY3R1YWw6IGEsXG4gICAgICAgIGV4cGVjdGVkOiBiLFxuICAgICAgICBvcGVyYXRvcjogJ2RlZXBTdHJpY3RFcXVhbCcsXG4gICAgICAgIHN0YWNrU3RhcnRGbjogZm5cbiAgICAgIH0pO1xuICAgICAgZXJyLmFjdHVhbCA9IGFjdHVhbDtcbiAgICAgIGVyci5leHBlY3RlZCA9IGV4cGVjdGVkO1xuICAgICAgZXJyLm9wZXJhdG9yID0gZm4ubmFtZTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBpbm5lckZhaWwoe1xuICAgICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgb3BlcmF0b3I6IGZuLm5hbWUsXG4gICAgICBzdGFja1N0YXJ0Rm46IGZuXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCwgbXNnLCBmbikge1xuICBpZiAodHlwZW9mIGV4cGVjdGVkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGlzUmVnRXhwKGV4cGVjdGVkKSkgcmV0dXJuIGV4cGVjdGVkLnRlc3QoYWN0dWFsKTsgLy8gYXNzZXJ0LmRvZXNOb3RUaHJvdyBkb2VzIG5vdCBhY2NlcHQgb2JqZWN0cy5cblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2V4cGVjdGVkJywgWydGdW5jdGlvbicsICdSZWdFeHAnXSwgZXhwZWN0ZWQpO1xuICAgIH0gLy8gSGFuZGxlIHByaW1pdGl2ZXMgcHJvcGVybHkuXG5cblxuICAgIGlmIChfdHlwZW9mKGFjdHVhbCkgIT09ICdvYmplY3QnIHx8IGFjdHVhbCA9PT0gbnVsbCkge1xuICAgICAgdmFyIGVyciA9IG5ldyBBc3NlcnRpb25FcnJvcih7XG4gICAgICAgIGFjdHVhbDogYWN0dWFsLFxuICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgb3BlcmF0b3I6ICdkZWVwU3RyaWN0RXF1YWwnLFxuICAgICAgICBzdGFja1N0YXJ0Rm46IGZuXG4gICAgICB9KTtcbiAgICAgIGVyci5vcGVyYXRvciA9IGZuLm5hbWU7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhleHBlY3RlZCk7IC8vIFNwZWNpYWwgaGFuZGxlIGVycm9ycyB0byBtYWtlIHN1cmUgdGhlIG5hbWUgYW5kIHRoZSBtZXNzYWdlIGFyZSBjb21wYXJlZFxuICAgIC8vIGFzIHdlbGwuXG5cbiAgICBpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAga2V5cy5wdXNoKCduYW1lJywgJ21lc3NhZ2UnKTtcbiAgICB9IGVsc2UgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKCdlcnJvcicsIGV4cGVjdGVkLCAnbWF5IG5vdCBiZSBhbiBlbXB0eSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWVwRXF1YWwgPT09IHVuZGVmaW5lZCkgbGF6eUxvYWRDb21wYXJpc29uKCk7XG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICh0eXBlb2YgYWN0dWFsW2tleV0gPT09ICdzdHJpbmcnICYmIGlzUmVnRXhwKGV4cGVjdGVkW2tleV0pICYmIGV4cGVjdGVkW2tleV0udGVzdChhY3R1YWxba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb21wYXJlRXhjZXB0aW9uS2V5KGFjdHVhbCwgZXhwZWN0ZWQsIGtleSwgbXNnLCBrZXlzLCBmbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gR3VhcmQgaW5zdGFuY2VvZiBhZ2FpbnN0IGFycm93IGZ1bmN0aW9ucyBhcyB0aGV5IGRvbid0IGhhdmUgYSBwcm90b3R5cGUuXG5cblxuICBpZiAoZXhwZWN0ZWQucHJvdG90eXBlICE9PSB1bmRlZmluZWQgJiYgYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChFcnJvci5pc1Byb3RvdHlwZU9mKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBleHBlY3RlZC5jYWxsKHt9LCBhY3R1YWwpID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRBY3R1YWwoZm4pIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZm4nLCAnRnVuY3Rpb24nLCBmbik7XG4gIH1cblxuICB0cnkge1xuICAgIGZuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfVxuXG4gIHJldHVybiBOT19FWENFUFRJT05fU0VOVElORUw7XG59XG5cbmZ1bmN0aW9uIGNoZWNrSXNQcm9taXNlKG9iaikge1xuICAvLyBBY2NlcHQgbmF0aXZlIEVTNiBwcm9taXNlcyBhbmQgcHJvbWlzZXMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gYSBzaW1pbGFyXG4gIC8vIHdheS4gRG8gbm90IGFjY2VwdCB0aGVuYWJsZXMgdGhhdCB1c2UgYSBmdW5jdGlvbiBhcyBgb2JqYCBhbmQgdGhhdCBoYXZlIG5vXG4gIC8vIGBjYXRjaGAgaGFuZGxlci5cbiAgLy8gVE9ETzogdGhlbmFibGVzIGFyZSBjaGVja2VkIHVwIHVudGlsIHRoZXkgaGF2ZSB0aGUgY29ycmVjdCBtZXRob2RzLFxuICAvLyBidXQgYWNjb3JkaW5nIHRvIGRvY3VtZW50YXRpb24sIHRoZSBgdGhlbmAgbWV0aG9kIHNob3VsZCByZWNlaXZlXG4gIC8vIHRoZSBgZnVsZmlsbGAgYW5kIGByZWplY3RgIGFyZ3VtZW50cyBhcyB3ZWxsIG9yIGl0IG1heSBiZSBuZXZlciByZXNvbHZlZC5cbiAgcmV0dXJuIGlzUHJvbWlzZShvYmopIHx8IG9iaiAhPT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmNhdGNoID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yQWN0dWFsKHByb21pc2VGbikge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdFByb21pc2U7XG5cbiAgICBpZiAodHlwZW9mIHByb21pc2VGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gUmV0dXJuIGEgcmVqZWN0ZWQgcHJvbWlzZSBpZiBgcHJvbWlzZUZuYCB0aHJvd3Mgc3luY2hyb25vdXNseS5cbiAgICAgIHJlc3VsdFByb21pc2UgPSBwcm9taXNlRm4oKTsgLy8gRmFpbCBpbiBjYXNlIG5vIHByb21pc2UgaXMgcmV0dXJuZWQuXG5cbiAgICAgIGlmICghY2hlY2tJc1Byb21pc2UocmVzdWx0UHJvbWlzZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnaW5zdGFuY2Ugb2YgUHJvbWlzZScsICdwcm9taXNlRm4nLCByZXN1bHRQcm9taXNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoZWNrSXNQcm9taXNlKHByb21pc2VGbikpIHtcbiAgICAgIHJlc3VsdFByb21pc2UgPSBwcm9taXNlRm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgncHJvbWlzZUZuJywgWydGdW5jdGlvbicsICdQcm9taXNlJ10sIHByb21pc2VGbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc3VsdFByb21pc2U7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gTk9fRVhDRVBUSU9OX1NFTlRJTkVMO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gZTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4cGVjdHNFcnJvcihzdGFja1N0YXJ0Rm4sIGFjdHVhbCwgZXJyb3IsIG1lc3NhZ2UpIHtcbiAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdlcnJvcicsIFsnT2JqZWN0JywgJ0Vycm9yJywgJ0Z1bmN0aW9uJywgJ1JlZ0V4cCddLCBlcnJvcik7XG4gICAgfVxuXG4gICAgaWYgKF90eXBlb2YoYWN0dWFsKSA9PT0gJ29iamVjdCcgJiYgYWN0dWFsICE9PSBudWxsKSB7XG4gICAgICBpZiAoYWN0dWFsLm1lc3NhZ2UgPT09IGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFUlJfQU1CSUdVT1VTX0FSR1VNRU5UKCdlcnJvci9tZXNzYWdlJywgXCJUaGUgZXJyb3IgbWVzc2FnZSBcXFwiXCIuY29uY2F0KGFjdHVhbC5tZXNzYWdlLCBcIlxcXCIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLlwiKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhY3R1YWwgPT09IGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0FNQklHVU9VU19BUkdVTUVOVCgnZXJyb3IvbWVzc2FnZScsIFwiVGhlIGVycm9yIFxcXCJcIi5jb25jYXQoYWN0dWFsLCBcIlxcXCIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLlwiKSk7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IGVycm9yO1xuICAgIGVycm9yID0gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKGVycm9yICE9IG51bGwgJiYgX3R5cGVvZihlcnJvcikgIT09ICdvYmplY3QnICYmIHR5cGVvZiBlcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZXJyb3InLCBbJ09iamVjdCcsICdFcnJvcicsICdGdW5jdGlvbicsICdSZWdFeHAnXSwgZXJyb3IpO1xuICB9XG5cbiAgaWYgKGFjdHVhbCA9PT0gTk9fRVhDRVBUSU9OX1NFTlRJTkVMKSB7XG4gICAgdmFyIGRldGFpbHMgPSAnJztcblxuICAgIGlmIChlcnJvciAmJiBlcnJvci5uYW1lKSB7XG4gICAgICBkZXRhaWxzICs9IFwiIChcIi5jb25jYXQoZXJyb3IubmFtZSwgXCIpXCIpO1xuICAgIH1cblxuICAgIGRldGFpbHMgKz0gbWVzc2FnZSA/IFwiOiBcIi5jb25jYXQobWVzc2FnZSkgOiAnLic7XG4gICAgdmFyIGZuVHlwZSA9IHN0YWNrU3RhcnRGbi5uYW1lID09PSAncmVqZWN0cycgPyAncmVqZWN0aW9uJyA6ICdleGNlcHRpb24nO1xuICAgIGlubmVyRmFpbCh7XG4gICAgICBhY3R1YWw6IHVuZGVmaW5lZCxcbiAgICAgIGV4cGVjdGVkOiBlcnJvcixcbiAgICAgIG9wZXJhdG9yOiBzdGFja1N0YXJ0Rm4ubmFtZSxcbiAgICAgIG1lc3NhZ2U6IFwiTWlzc2luZyBleHBlY3RlZCBcIi5jb25jYXQoZm5UeXBlKS5jb25jYXQoZGV0YWlscyksXG4gICAgICBzdGFja1N0YXJ0Rm46IHN0YWNrU3RhcnRGblxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGVycm9yICYmICFleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGVycm9yLCBtZXNzYWdlLCBzdGFja1N0YXJ0Rm4pKSB7XG4gICAgdGhyb3cgYWN0dWFsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4cGVjdHNOb0Vycm9yKHN0YWNrU3RhcnRGbiwgYWN0dWFsLCBlcnJvciwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBOT19FWENFUFRJT05fU0VOVElORUwpIHJldHVybjtcblxuICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBlcnJvcjtcbiAgICBlcnJvciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghZXJyb3IgfHwgZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBlcnJvcikpIHtcbiAgICB2YXIgZGV0YWlscyA9IG1lc3NhZ2UgPyBcIjogXCIuY29uY2F0KG1lc3NhZ2UpIDogJy4nO1xuICAgIHZhciBmblR5cGUgPSBzdGFja1N0YXJ0Rm4ubmFtZSA9PT0gJ2RvZXNOb3RSZWplY3QnID8gJ3JlamVjdGlvbicgOiAnZXhjZXB0aW9uJztcbiAgICBpbm5lckZhaWwoe1xuICAgICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgICBleHBlY3RlZDogZXJyb3IsXG4gICAgICBvcGVyYXRvcjogc3RhY2tTdGFydEZuLm5hbWUsXG4gICAgICBtZXNzYWdlOiBcIkdvdCB1bndhbnRlZCBcIi5jb25jYXQoZm5UeXBlKS5jb25jYXQoZGV0YWlscywgXCJcXG5cIikgKyBcIkFjdHVhbCBtZXNzYWdlOiBcXFwiXCIuY29uY2F0KGFjdHVhbCAmJiBhY3R1YWwubWVzc2FnZSwgXCJcXFwiXCIpLFxuICAgICAgc3RhY2tTdGFydEZuOiBzdGFja1N0YXJ0Rm5cbiAgICB9KTtcbiAgfVxuXG4gIHRocm93IGFjdHVhbDtcbn1cblxuYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uIHRocm93cyhwcm9taXNlRm4pIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgZXhwZWN0c0Vycm9yLmFwcGx5KHZvaWQgMCwgW3Rocm93cywgZ2V0QWN0dWFsKHByb21pc2VGbildLmNvbmNhdChhcmdzKSk7XG59O1xuXG5hc3NlcnQucmVqZWN0cyA9IGZ1bmN0aW9uIHJlamVjdHMocHJvbWlzZUZuKSB7XG4gIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgYXJnc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgfVxuXG4gIHJldHVybiB3YWl0Rm9yQWN0dWFsKHByb21pc2VGbikudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIGV4cGVjdHNFcnJvci5hcHBseSh2b2lkIDAsIFtyZWplY3RzLCByZXN1bHRdLmNvbmNhdChhcmdzKSk7XG4gIH0pO1xufTtcblxuYXNzZXJ0LmRvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uIGRvZXNOb3RUaHJvdyhmbikge1xuICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgIGFyZ3NbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gIH1cblxuICBleHBlY3RzTm9FcnJvci5hcHBseSh2b2lkIDAsIFtkb2VzTm90VGhyb3csIGdldEFjdHVhbChmbildLmNvbmNhdChhcmdzKSk7XG59O1xuXG5hc3NlcnQuZG9lc05vdFJlamVjdCA9IGZ1bmN0aW9uIGRvZXNOb3RSZWplY3QoZm4pIHtcbiAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41ID4gMSA/IF9sZW41IC0gMSA6IDApLCBfa2V5NSA9IDE7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICBhcmdzW19rZXk1IC0gMV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICB9XG5cbiAgcmV0dXJuIHdhaXRGb3JBY3R1YWwoZm4pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgIHJldHVybiBleHBlY3RzTm9FcnJvci5hcHBseSh2b2lkIDAsIFtkb2VzTm90UmVqZWN0LCByZXN1bHRdLmNvbmNhdChhcmdzKSk7XG4gIH0pO1xufTtcblxuYXNzZXJ0LmlmRXJyb3IgPSBmdW5jdGlvbiBpZkVycm9yKGVycikge1xuICBpZiAoZXJyICE9PSBudWxsICYmIGVyciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnaWZFcnJvciBnb3QgdW53YW50ZWQgZXhjZXB0aW9uOiAnO1xuXG4gICAgaWYgKF90eXBlb2YoZXJyKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGVyci5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGVyci5tZXNzYWdlLmxlbmd0aCA9PT0gMCAmJiBlcnIuY29uc3RydWN0b3IpIHtcbiAgICAgICAgbWVzc2FnZSArPSBlcnIuY29uc3RydWN0b3IubmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgKz0gaW5zcGVjdChlcnIpO1xuICAgIH1cblxuICAgIHZhciBuZXdFcnIgPSBuZXcgQXNzZXJ0aW9uRXJyb3Ioe1xuICAgICAgYWN0dWFsOiBlcnIsXG4gICAgICBleHBlY3RlZDogbnVsbCxcbiAgICAgIG9wZXJhdG9yOiAnaWZFcnJvcicsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgc3RhY2tTdGFydEZuOiBpZkVycm9yXG4gICAgfSk7IC8vIE1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYXZlIGEgc3RhY2sgdHJhY2UhXG5cbiAgICB2YXIgb3JpZ1N0YWNrID0gZXJyLnN0YWNrO1xuXG4gICAgaWYgKHR5cGVvZiBvcmlnU3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgcmVtb3ZlIGFueSBkdXBsaWNhdGVkIGZyYW1lcyBmcm9tIHRoZSBlcnJvciBmcmFtZXMgdGFrZW5cbiAgICAgIC8vIGZyb20gd2l0aGluIGBpZkVycm9yYCBhbmQgYWRkIHRoZSBvcmlnaW5hbCBlcnJvciBmcmFtZXMgdG8gdGhlIG5ld2x5XG4gICAgICAvLyBjcmVhdGVkIG9uZXMuXG4gICAgICB2YXIgdG1wMiA9IG9yaWdTdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB0bXAyLnNoaWZ0KCk7IC8vIEZpbHRlciBhbGwgZnJhbWVzIGV4aXN0aW5nIGluIGVyci5zdGFjay5cblxuICAgICAgdmFyIHRtcDEgPSBuZXdFcnIuc3RhY2suc3BsaXQoJ1xcbicpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRtcDIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZnJhbWUuXG4gICAgICAgIHZhciBwb3MgPSB0bXAxLmluZGV4T2YodG1wMltpXSk7XG5cbiAgICAgICAgaWYgKHBvcyAhPT0gLTEpIHtcbiAgICAgICAgICAvLyBPbmx5IGtlZXAgbmV3IGZyYW1lcy5cbiAgICAgICAgICB0bXAxID0gdG1wMS5zbGljZSgwLCBwb3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5ld0Vyci5zdGFjayA9IFwiXCIuY29uY2F0KHRtcDEuam9pbignXFxuJyksIFwiXFxuXCIpLmNvbmNhdCh0bXAyLmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXdFcnI7XG4gIH1cbn07IC8vIEV4cG9zZSBhIHN0cmljdCBvbmx5IHZhcmlhbnQgb2YgYXNzZXJ0XG5cblxuZnVuY3Rpb24gc3RyaWN0KCkge1xuICBmb3IgKHZhciBfbGVuNiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjYpLCBfa2V5NiA9IDA7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHtcbiAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gIH1cblxuICBpbm5lck9rLmFwcGx5KHZvaWQgMCwgW3N0cmljdCwgYXJncy5sZW5ndGhdLmNvbmNhdChhcmdzKSk7XG59XG5cbmFzc2VydC5zdHJpY3QgPSBvYmplY3RBc3NpZ24oc3RyaWN0LCBhc3NlcnQsIHtcbiAgZXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgZGVlcEVxdWFsOiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsLFxuICBub3RFcXVhbDogYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLFxuICBub3REZWVwRXF1YWw6IGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWxcbn0pO1xuYXNzZXJ0LnN0cmljdC5zdHJpY3QgPSBhc3NlcnQuc3RyaWN0O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTk2MTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIHByb2Nlc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxNTUpO1xuLy8gQ3VycmVudGx5IGluIHN5bmMgd2l0aCBOb2RlLmpzIGxpYi9pbnRlcm5hbC9hc3NlcnQvYXNzZXJ0aW9uX2Vycm9yLmpzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvY29tbWl0LzA4MTc4NDBmNzc1MDMyMTY5ZGRkNzBjODVhYzA1OWYxOGZmY2M4MWNcblxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICdmdW5jdGlvbicpIHsgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTsgfSkpOyB9IG93bktleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykgeyB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkOyBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykgeyBpZiAoQ2xhc3MgPT09IG51bGwgfHwgIV9pc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzOyBpZiAodHlwZW9mIENsYXNzICE9PSBcImZ1bmN0aW9uXCIpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IGlmICh0eXBlb2YgX2NhY2hlICE9PSBcInVuZGVmaW5lZFwiKSB7IGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpOyBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTsgfSBmdW5jdGlvbiBXcmFwcGVyKCkgeyByZXR1cm4gX2NvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpOyB9IFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IFdyYXBwZXIsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IHJldHVybiBfc2V0UHJvdG90eXBlT2YoV3JhcHBlciwgQ2xhc3MpOyB9OyByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7IH1cblxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykgeyBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHsgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0OyB9IGVsc2UgeyBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7IHZhciBhID0gW251bGxdOyBhLnB1c2guYXBwbHkoYSwgYXJncyk7IHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTsgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7IGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpOyByZXR1cm4gaW5zdGFuY2U7IH07IH0gcmV0dXJuIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVGdW5jdGlvbihmbikgeyByZXR1cm4gRnVuY3Rpb24udG9TdHJpbmcuY2FsbChmbikuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIikgIT09IC0xOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NTM5KSxcbiAgICBpbnNwZWN0ID0gX3JlcXVpcmUuaW5zcGVjdDtcblxudmFyIF9yZXF1aXJlMiA9IF9fd2VicGFja19yZXF1aXJlX18oMjEzNiksXG4gICAgRVJSX0lOVkFMSURfQVJHX1RZUEUgPSBfcmVxdWlyZTIuY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEU7IC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9lbmRzV2l0aFxuXG5cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc2VhcmNoLCB0aGlzX2xlbikge1xuICBpZiAodGhpc19sZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzX2xlbiA+IHN0ci5sZW5ndGgpIHtcbiAgICB0aGlzX2xlbiA9IHN0ci5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gc3RyLnN1YnN0cmluZyh0aGlzX2xlbiAtIHNlYXJjaC5sZW5ndGgsIHRoaXNfbGVuKSA9PT0gc2VhcmNoO1xufSAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvcmVwZWF0XG5cblxuZnVuY3Rpb24gcmVwZWF0KHN0ciwgY291bnQpIHtcbiAgY291bnQgPSBNYXRoLmZsb29yKGNvdW50KTtcbiAgaWYgKHN0ci5sZW5ndGggPT0gMCB8fCBjb3VudCA9PSAwKSByZXR1cm4gJyc7XG4gIHZhciBtYXhDb3VudCA9IHN0ci5sZW5ndGggKiBjb3VudDtcbiAgY291bnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKGNvdW50KSAvIE1hdGgubG9nKDIpKTtcblxuICB3aGlsZSAoY291bnQpIHtcbiAgICBzdHIgKz0gc3RyO1xuICAgIGNvdW50LS07XG4gIH1cblxuICBzdHIgKz0gc3RyLnN1YnN0cmluZygwLCBtYXhDb3VudCAtIHN0ci5sZW5ndGgpO1xuICByZXR1cm4gc3RyO1xufVxuXG52YXIgYmx1ZSA9ICcnO1xudmFyIGdyZWVuID0gJyc7XG52YXIgcmVkID0gJyc7XG52YXIgd2hpdGUgPSAnJztcbnZhciBrUmVhZGFibGVPcGVyYXRvciA9IHtcbiAgZGVlcFN0cmljdEVxdWFsOiAnRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWw6JyxcbiAgc3RyaWN0RXF1YWw6ICdFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZXF1YWw6JyxcbiAgc3RyaWN0RXF1YWxPYmplY3Q6ICdFeHBlY3RlZCBcImFjdHVhbFwiIHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byBcImV4cGVjdGVkXCI6JyxcbiAgZGVlcEVxdWFsOiAnRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbDonLFxuICBlcXVhbDogJ0V4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGVxdWFsOicsXG4gIG5vdERlZXBTdHJpY3RFcXVhbDogJ0V4cGVjdGVkIFwiYWN0dWFsXCIgbm90IHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWwgdG86JyxcbiAgbm90U3RyaWN0RXF1YWw6ICdFeHBlY3RlZCBcImFjdHVhbFwiIHRvIGJlIHN0cmljdGx5IHVuZXF1YWwgdG86JyxcbiAgbm90U3RyaWN0RXF1YWxPYmplY3Q6ICdFeHBlY3RlZCBcImFjdHVhbFwiIG5vdCB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gXCJleHBlY3RlZFwiOicsXG4gIG5vdERlZXBFcXVhbDogJ0V4cGVjdGVkIFwiYWN0dWFsXCIgbm90IHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbCB0bzonLFxuICBub3RFcXVhbDogJ0V4cGVjdGVkIFwiYWN0dWFsXCIgdG8gYmUgbG9vc2VseSB1bmVxdWFsIHRvOicsXG4gIG5vdElkZW50aWNhbDogJ1ZhbHVlcyBpZGVudGljYWwgYnV0IG5vdCByZWZlcmVuY2UtZXF1YWw6J1xufTsgLy8gQ29tcGFyaW5nIHNob3J0IHByaW1pdGl2ZXMgc2hvdWxkIGp1c3Qgc2hvdyA9PT0gLyAhPT0gaW5zdGVhZCBvZiB1c2luZyB0aGVcbi8vIGRpZmYuXG5cbnZhciBrTWF4U2hvcnRMZW5ndGggPSAxMDtcblxuZnVuY3Rpb24gY29weUVycm9yKHNvdXJjZSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpKTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgJ21lc3NhZ2UnLCB7XG4gICAgdmFsdWU6IHNvdXJjZS5tZXNzYWdlXG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0VmFsdWUodmFsKSB7XG4gIC8vIFRoZSB1dGlsLmluc3BlY3QgZGVmYXVsdCB2YWx1ZXMgY291bGQgYmUgY2hhbmdlZC4gVGhpcyBtYWtlcyBzdXJlIHRoZVxuICAvLyBlcnJvciBtZXNzYWdlcyBjb250YWluIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gbmV2ZXJ0aGVsZXNzLlxuICByZXR1cm4gaW5zcGVjdCh2YWwsIHtcbiAgICBjb21wYWN0OiBmYWxzZSxcbiAgICBjdXN0b21JbnNwZWN0OiBmYWxzZSxcbiAgICBkZXB0aDogMTAwMCxcbiAgICBtYXhBcnJheUxlbmd0aDogSW5maW5pdHksXG4gICAgLy8gQXNzZXJ0IGNvbXBhcmVzIG9ubHkgZW51bWVyYWJsZSBwcm9wZXJ0aWVzICh3aXRoIGEgZmV3IGV4Y2VwdGlvbnMpLlxuICAgIHNob3dIaWRkZW46IGZhbHNlLFxuICAgIC8vIEhhdmluZyBhIGxvbmcgbGluZSBhcyBlcnJvciBpcyBiZXR0ZXIgdGhhbiB3cmFwcGluZyB0aGUgbGluZSBmb3JcbiAgICAvLyBjb21wYXJpc29uIGZvciBub3cuXG4gICAgLy8gVE9ETyhCcmlkZ2VBUik6IGBicmVha0xlbmd0aGAgc2hvdWxkIGJlIGxpbWl0ZWQgYXMgc29vbiBhcyBzb29uIGFzIHdlXG4gICAgLy8gaGF2ZSBtZXRhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnNwZWN0ZWQgcHJvcGVydGllcyAoaS5lLiwga25vdyB3aGVyZVxuICAgIC8vIGluIHdoYXQgbGluZSB0aGUgcHJvcGVydHkgc3RhcnRzIGFuZCBlbmRzKS5cbiAgICBicmVha0xlbmd0aDogSW5maW5pdHksXG4gICAgLy8gQXNzZXJ0IGRvZXMgbm90IGRldGVjdCBwcm94aWVzIGN1cnJlbnRseS5cbiAgICBzaG93UHJveHk6IGZhbHNlLFxuICAgIHNvcnRlZDogdHJ1ZSxcbiAgICAvLyBJbnNwZWN0IGdldHRlcnMgYXMgd2UgYWxzbyBjaGVjayB0aGVtIHdoZW4gY29tcGFyaW5nIGVudHJpZXMuXG4gICAgZ2V0dGVyczogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyRGlmZihhY3R1YWwsIGV4cGVjdGVkLCBvcGVyYXRvcikge1xuICB2YXIgb3RoZXIgPSAnJztcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbGFzdFBvcyA9IDA7XG4gIHZhciBlbmQgPSAnJztcbiAgdmFyIHNraXBwZWQgPSBmYWxzZTtcbiAgdmFyIGFjdHVhbEluc3BlY3RlZCA9IGluc3BlY3RWYWx1ZShhY3R1YWwpO1xuICB2YXIgYWN0dWFsTGluZXMgPSBhY3R1YWxJbnNwZWN0ZWQuc3BsaXQoJ1xcbicpO1xuICB2YXIgZXhwZWN0ZWRMaW5lcyA9IGluc3BlY3RWYWx1ZShleHBlY3RlZCkuc3BsaXQoJ1xcbicpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBpbmRpY2F0b3IgPSAnJzsgLy8gSW4gY2FzZSBib3RoIHZhbHVlcyBhcmUgb2JqZWN0cyBleHBsaWNpdGx5IG1hcmsgdGhlbSBhcyBub3QgcmVmZXJlbmNlIGVxdWFsXG4gIC8vIGZvciB0aGUgYHN0cmljdEVxdWFsYCBvcGVyYXRvci5cblxuICBpZiAob3BlcmF0b3IgPT09ICdzdHJpY3RFcXVhbCcgJiYgX3R5cGVvZihhY3R1YWwpID09PSAnb2JqZWN0JyAmJiBfdHlwZW9mKGV4cGVjdGVkKSA9PT0gJ29iamVjdCcgJiYgYWN0dWFsICE9PSBudWxsICYmIGV4cGVjdGVkICE9PSBudWxsKSB7XG4gICAgb3BlcmF0b3IgPSAnc3RyaWN0RXF1YWxPYmplY3QnO1xuICB9IC8vIElmIFwiYWN0dWFsXCIgYW5kIFwiZXhwZWN0ZWRcIiBmaXQgb24gYSBzaW5nbGUgbGluZSBhbmQgdGhleSBhcmUgbm90IHN0cmljdGx5XG4gIC8vIGVxdWFsLCBjaGVjayBmdXJ0aGVyIHNwZWNpYWwgaGFuZGxpbmcuXG5cblxuICBpZiAoYWN0dWFsTGluZXMubGVuZ3RoID09PSAxICYmIGV4cGVjdGVkTGluZXMubGVuZ3RoID09PSAxICYmIGFjdHVhbExpbmVzWzBdICE9PSBleHBlY3RlZExpbmVzWzBdKSB7XG4gICAgdmFyIGlucHV0TGVuZ3RoID0gYWN0dWFsTGluZXNbMF0ubGVuZ3RoICsgZXhwZWN0ZWRMaW5lc1swXS5sZW5ndGg7IC8vIElmIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIFwiYWN0dWFsXCIgYW5kIFwiZXhwZWN0ZWRcIiB0b2dldGhlciBpcyBsZXNzIHRoYW5cbiAgICAvLyBrTWF4U2hvcnRMZW5ndGggYW5kIGlmIG5laXRoZXIgaXMgYW4gb2JqZWN0IGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpc1xuICAgIC8vIG5vdCBgemVyb2AsIHVzZSB0aGUgc3RyaWN0IGVxdWFsIGNvbXBhcmlzb24gdG8gdmlzdWFsaXplIHRoZSBvdXRwdXQuXG5cbiAgICBpZiAoaW5wdXRMZW5ndGggPD0ga01heFNob3J0TGVuZ3RoKSB7XG4gICAgICBpZiAoKF90eXBlb2YoYWN0dWFsKSAhPT0gJ29iamVjdCcgfHwgYWN0dWFsID09PSBudWxsKSAmJiAoX3R5cGVvZihleHBlY3RlZCkgIT09ICdvYmplY3QnIHx8IGV4cGVjdGVkID09PSBudWxsKSAmJiAoYWN0dWFsICE9PSAwIHx8IGV4cGVjdGVkICE9PSAwKSkge1xuICAgICAgICAvLyAtMCA9PT0gKzBcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGtSZWFkYWJsZU9wZXJhdG9yW29wZXJhdG9yXSwgXCJcXG5cXG5cIikgKyBcIlwiLmNvbmNhdChhY3R1YWxMaW5lc1swXSwgXCIgIT09IFwiKS5jb25jYXQoZXhwZWN0ZWRMaW5lc1swXSwgXCJcXG5cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcGVyYXRvciAhPT0gJ3N0cmljdEVxdWFsT2JqZWN0Jykge1xuICAgICAgLy8gSWYgdGhlIHN0ZGVyciBpcyBhIHR0eSBhbmQgdGhlIGlucHV0IGxlbmd0aCBpcyBsb3dlciB0aGFuIHRoZSBjdXJyZW50XG4gICAgICAvLyBjb2x1bW5zIHBlciBsaW5lLCBhZGQgYSBtaXNtYXRjaCBpbmRpY2F0b3IgYmVsb3cgdGhlIG91dHB1dC4gSWYgaXQgaXNcbiAgICAgIC8vIG5vdCBhIHR0eSwgdXNlIGEgZGVmYXVsdCB2YWx1ZSBvZiA4MCBjaGFyYWN0ZXJzLlxuICAgICAgdmFyIG1heExlbmd0aCA9IHByb2Nlc3Muc3RkZXJyICYmIHByb2Nlc3Muc3RkZXJyLmlzVFRZID8gcHJvY2Vzcy5zdGRlcnIuY29sdW1ucyA6IDgwO1xuXG4gICAgICBpZiAoaW5wdXRMZW5ndGggPCBtYXhMZW5ndGgpIHtcbiAgICAgICAgd2hpbGUgKGFjdHVhbExpbmVzWzBdW2ldID09PSBleHBlY3RlZExpbmVzWzBdW2ldKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IC8vIElnbm9yZSB0aGUgZmlyc3QgY2hhcmFjdGVycy5cblxuXG4gICAgICAgIGlmIChpID4gMikge1xuICAgICAgICAgIC8vIEFkZCBwb3NpdGlvbiBpbmRpY2F0b3IgZm9yIHRoZSBmaXJzdCBtaXNtYXRjaCBpbiBjYXNlIGl0IGlzIGFcbiAgICAgICAgICAvLyBzaW5nbGUgbGluZSBhbmQgdGhlIGlucHV0IGxlbmd0aCBpcyBsZXNzIHRoYW4gdGhlIGNvbHVtbiBsZW5ndGguXG4gICAgICAgICAgaW5kaWNhdG9yID0gXCJcXG4gIFwiLmNvbmNhdChyZXBlYXQoJyAnLCBpKSwgXCJeXCIpO1xuICAgICAgICAgIGkgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFJlbW92ZSBhbGwgZW5kaW5nIGxpbmVzIHRoYXQgbWF0Y2ggKHRoaXMgb3B0aW1pemVzIHRoZSBvdXRwdXQgZm9yXG4gIC8vIHJlYWRhYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdG90YWwgY2hhbmdlZCBsaW5lcykuXG5cblxuICB2YXIgYSA9IGFjdHVhbExpbmVzW2FjdHVhbExpbmVzLmxlbmd0aCAtIDFdO1xuICB2YXIgYiA9IGV4cGVjdGVkTGluZXNbZXhwZWN0ZWRMaW5lcy5sZW5ndGggLSAxXTtcblxuICB3aGlsZSAoYSA9PT0gYikge1xuICAgIGlmIChpKysgPCAyKSB7XG4gICAgICBlbmQgPSBcIlxcbiAgXCIuY29uY2F0KGEpLmNvbmNhdChlbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdGhlciA9IGE7XG4gICAgfVxuXG4gICAgYWN0dWFsTGluZXMucG9wKCk7XG4gICAgZXhwZWN0ZWRMaW5lcy5wb3AoKTtcbiAgICBpZiAoYWN0dWFsTGluZXMubGVuZ3RoID09PSAwIHx8IGV4cGVjdGVkTGluZXMubGVuZ3RoID09PSAwKSBicmVhaztcbiAgICBhID0gYWN0dWFsTGluZXNbYWN0dWFsTGluZXMubGVuZ3RoIC0gMV07XG4gICAgYiA9IGV4cGVjdGVkTGluZXNbZXhwZWN0ZWRMaW5lcy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHZhciBtYXhMaW5lcyA9IE1hdGgubWF4KGFjdHVhbExpbmVzLmxlbmd0aCwgZXhwZWN0ZWRMaW5lcy5sZW5ndGgpOyAvLyBTdHJpY3QgZXF1YWwgd2l0aCBpZGVudGljYWwgb2JqZWN0cyB0aGF0IGFyZSBub3QgaWRlbnRpY2FsIGJ5IHJlZmVyZW5jZS5cbiAgLy8gRS5nLiwgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh7IGE6IFN5bWJvbCgpIH0sIHsgYTogU3ltYm9sKCkgfSlcblxuICBpZiAobWF4TGluZXMgPT09IDApIHtcbiAgICAvLyBXZSBoYXZlIHRvIGdldCB0aGUgcmVzdWx0IGFnYWluLiBUaGUgbGluZXMgd2VyZSBhbGwgcmVtb3ZlZCBiZWZvcmUuXG4gICAgdmFyIF9hY3R1YWxMaW5lcyA9IGFjdHVhbEluc3BlY3RlZC5zcGxpdCgnXFxuJyk7IC8vIE9ubHkgcmVtb3ZlIGxpbmVzIGluIGNhc2UgaXQgbWFrZXMgc2Vuc2UgdG8gY29sbGFwc2UgdGhvc2UuXG4gICAgLy8gVE9ETzogQWNjZXB0IGVudiB0byBhbHdheXMgc2hvdyB0aGUgZnVsbCBlcnJvci5cblxuXG4gICAgaWYgKF9hY3R1YWxMaW5lcy5sZW5ndGggPiAzMCkge1xuICAgICAgX2FjdHVhbExpbmVzWzI2XSA9IFwiXCIuY29uY2F0KGJsdWUsIFwiLi4uXCIpLmNvbmNhdCh3aGl0ZSk7XG5cbiAgICAgIHdoaWxlIChfYWN0dWFsTGluZXMubGVuZ3RoID4gMjcpIHtcbiAgICAgICAgX2FjdHVhbExpbmVzLnBvcCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBcIlwiLmNvbmNhdChrUmVhZGFibGVPcGVyYXRvci5ub3RJZGVudGljYWwsIFwiXFxuXFxuXCIpLmNvbmNhdChfYWN0dWFsTGluZXMuam9pbignXFxuJyksIFwiXFxuXCIpO1xuICB9XG5cbiAgaWYgKGkgPiAzKSB7XG4gICAgZW5kID0gXCJcXG5cIi5jb25jYXQoYmx1ZSwgXCIuLi5cIikuY29uY2F0KHdoaXRlKS5jb25jYXQoZW5kKTtcbiAgICBza2lwcGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChvdGhlciAhPT0gJycpIHtcbiAgICBlbmQgPSBcIlxcbiAgXCIuY29uY2F0KG90aGVyKS5jb25jYXQoZW5kKTtcbiAgICBvdGhlciA9ICcnO1xuICB9XG5cbiAgdmFyIHByaW50ZWRMaW5lcyA9IDA7XG4gIHZhciBtc2cgPSBrUmVhZGFibGVPcGVyYXRvcltvcGVyYXRvcl0gKyBcIlxcblwiLmNvbmNhdChncmVlbiwgXCIrIGFjdHVhbFwiKS5jb25jYXQod2hpdGUsIFwiIFwiKS5jb25jYXQocmVkLCBcIi0gZXhwZWN0ZWRcIikuY29uY2F0KHdoaXRlKTtcbiAgdmFyIHNraXBwZWRNc2cgPSBcIiBcIi5jb25jYXQoYmx1ZSwgXCIuLi5cIikuY29uY2F0KHdoaXRlLCBcIiBMaW5lcyBza2lwcGVkXCIpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBtYXhMaW5lczsgaSsrKSB7XG4gICAgLy8gT25seSBleHRyYSBleHBlY3RlZCBsaW5lcyBleGlzdFxuICAgIHZhciBjdXIgPSBpIC0gbGFzdFBvcztcblxuICAgIGlmIChhY3R1YWxMaW5lcy5sZW5ndGggPCBpICsgMSkge1xuICAgICAgLy8gSWYgdGhlIGxhc3QgZGl2ZXJnaW5nIGxpbmUgaXMgbW9yZSB0aGFuIG9uZSBsaW5lIGFib3ZlIGFuZCB0aGVcbiAgICAgIC8vIGN1cnJlbnQgbGluZSBpcyBhdCBsZWFzdCBsaW5lIHRocmVlLCBhZGQgc29tZSBvZiB0aGUgZm9ybWVyIGxpbmVzIGFuZFxuICAgICAgLy8gYWxzbyBhZGQgZG90cyB0byBpbmRpY2F0ZSBza2lwcGVkIGVudHJpZXMuXG4gICAgICBpZiAoY3VyID4gMSAmJiBpID4gMikge1xuICAgICAgICBpZiAoY3VyID4gNCkge1xuICAgICAgICAgIHJlcyArPSBcIlxcblwiLmNvbmNhdChibHVlLCBcIi4uLlwiKS5jb25jYXQod2hpdGUpO1xuICAgICAgICAgIHNraXBwZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGN1ciA+IDMpIHtcbiAgICAgICAgICByZXMgKz0gXCJcXG4gIFwiLmNvbmNhdChleHBlY3RlZExpbmVzW2kgLSAyXSk7XG4gICAgICAgICAgcHJpbnRlZExpbmVzKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXMgKz0gXCJcXG4gIFwiLmNvbmNhdChleHBlY3RlZExpbmVzW2kgLSAxXSk7XG4gICAgICAgIHByaW50ZWRMaW5lcysrO1xuICAgICAgfSAvLyBNYXJrIHRoZSBjdXJyZW50IGxpbmUgYXMgdGhlIGxhc3QgZGl2ZXJnaW5nIG9uZS5cblxuXG4gICAgICBsYXN0UG9zID0gaTsgLy8gQWRkIHRoZSBleHBlY3RlZCBsaW5lIHRvIHRoZSBjYWNoZS5cblxuICAgICAgb3RoZXIgKz0gXCJcXG5cIi5jb25jYXQocmVkLCBcIi1cIikuY29uY2F0KHdoaXRlLCBcIiBcIikuY29uY2F0KGV4cGVjdGVkTGluZXNbaV0pO1xuICAgICAgcHJpbnRlZExpbmVzKys7IC8vIE9ubHkgZXh0cmEgYWN0dWFsIGxpbmVzIGV4aXN0XG4gICAgfSBlbHNlIGlmIChleHBlY3RlZExpbmVzLmxlbmd0aCA8IGkgKyAxKSB7XG4gICAgICAvLyBJZiB0aGUgbGFzdCBkaXZlcmdpbmcgbGluZSBpcyBtb3JlIHRoYW4gb25lIGxpbmUgYWJvdmUgYW5kIHRoZVxuICAgICAgLy8gY3VycmVudCBsaW5lIGlzIGF0IGxlYXN0IGxpbmUgdGhyZWUsIGFkZCBzb21lIG9mIHRoZSBmb3JtZXIgbGluZXMgYW5kXG4gICAgICAvLyBhbHNvIGFkZCBkb3RzIHRvIGluZGljYXRlIHNraXBwZWQgZW50cmllcy5cbiAgICAgIGlmIChjdXIgPiAxICYmIGkgPiAyKSB7XG4gICAgICAgIGlmIChjdXIgPiA0KSB7XG4gICAgICAgICAgcmVzICs9IFwiXFxuXCIuY29uY2F0KGJsdWUsIFwiLi4uXCIpLmNvbmNhdCh3aGl0ZSk7XG4gICAgICAgICAgc2tpcHBlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VyID4gMykge1xuICAgICAgICAgIHJlcyArPSBcIlxcbiAgXCIuY29uY2F0KGFjdHVhbExpbmVzW2kgLSAyXSk7XG4gICAgICAgICAgcHJpbnRlZExpbmVzKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXMgKz0gXCJcXG4gIFwiLmNvbmNhdChhY3R1YWxMaW5lc1tpIC0gMV0pO1xuICAgICAgICBwcmludGVkTGluZXMrKztcbiAgICAgIH0gLy8gTWFyayB0aGUgY3VycmVudCBsaW5lIGFzIHRoZSBsYXN0IGRpdmVyZ2luZyBvbmUuXG5cblxuICAgICAgbGFzdFBvcyA9IGk7IC8vIEFkZCB0aGUgYWN0dWFsIGxpbmUgdG8gdGhlIHJlc3VsdC5cblxuICAgICAgcmVzICs9IFwiXFxuXCIuY29uY2F0KGdyZWVuLCBcIitcIikuY29uY2F0KHdoaXRlLCBcIiBcIikuY29uY2F0KGFjdHVhbExpbmVzW2ldKTtcbiAgICAgIHByaW50ZWRMaW5lcysrOyAvLyBMaW5lcyBkaXZlcmdlXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBleHBlY3RlZExpbmUgPSBleHBlY3RlZExpbmVzW2ldO1xuICAgICAgdmFyIGFjdHVhbExpbmUgPSBhY3R1YWxMaW5lc1tpXTsgLy8gSWYgdGhlIGxpbmVzIGRpdmVyZ2UsIHNwZWNpZmljYWxseSBjaGVjayBmb3IgbGluZXMgdGhhdCBvbmx5IGRpdmVyZ2UgYnlcbiAgICAgIC8vIGEgdHJhaWxpbmcgY29tbWEuIEluIHRoYXQgY2FzZSBpdCBpcyBhY3R1YWxseSBpZGVudGljYWwgYW5kIHdlIHNob3VsZFxuICAgICAgLy8gbWFyayBpdCBhcyBzdWNoLlxuXG4gICAgICB2YXIgZGl2ZXJnaW5nTGluZXMgPSBhY3R1YWxMaW5lICE9PSBleHBlY3RlZExpbmUgJiYgKCFlbmRzV2l0aChhY3R1YWxMaW5lLCAnLCcpIHx8IGFjdHVhbExpbmUuc2xpY2UoMCwgLTEpICE9PSBleHBlY3RlZExpbmUpOyAvLyBJZiB0aGUgZXhwZWN0ZWQgbGluZSBoYXMgYSB0cmFpbGluZyBjb21tYSBidXQgaXMgb3RoZXJ3aXNlIGlkZW50aWNhbCxcbiAgICAgIC8vIGFkZCBhIGNvbW1hIGF0IHRoZSBlbmQgb2YgdGhlIGFjdHVhbCBsaW5lLiBPdGhlcndpc2UgdGhlIG91dHB1dCBjb3VsZFxuICAgICAgLy8gbG9vayB3ZWlyZCBhcyBpbjpcbiAgICAgIC8vXG4gICAgICAvLyAgIFtcbiAgICAgIC8vICAgICAxICAgICAgICAgLy8gTm8gY29tbWEgYXQgdGhlIGVuZCFcbiAgICAgIC8vICsgICAyXG4gICAgICAvLyAgIF1cbiAgICAgIC8vXG5cbiAgICAgIGlmIChkaXZlcmdpbmdMaW5lcyAmJiBlbmRzV2l0aChleHBlY3RlZExpbmUsICcsJykgJiYgZXhwZWN0ZWRMaW5lLnNsaWNlKDAsIC0xKSA9PT0gYWN0dWFsTGluZSkge1xuICAgICAgICBkaXZlcmdpbmdMaW5lcyA9IGZhbHNlO1xuICAgICAgICBhY3R1YWxMaW5lICs9ICcsJztcbiAgICAgIH1cblxuICAgICAgaWYgKGRpdmVyZ2luZ0xpbmVzKSB7XG4gICAgICAgIC8vIElmIHRoZSBsYXN0IGRpdmVyZ2luZyBsaW5lIGlzIG1vcmUgdGhhbiBvbmUgbGluZSBhYm92ZSBhbmQgdGhlXG4gICAgICAgIC8vIGN1cnJlbnQgbGluZSBpcyBhdCBsZWFzdCBsaW5lIHRocmVlLCBhZGQgc29tZSBvZiB0aGUgZm9ybWVyIGxpbmVzIGFuZFxuICAgICAgICAvLyBhbHNvIGFkZCBkb3RzIHRvIGluZGljYXRlIHNraXBwZWQgZW50cmllcy5cbiAgICAgICAgaWYgKGN1ciA+IDEgJiYgaSA+IDIpIHtcbiAgICAgICAgICBpZiAoY3VyID4gNCkge1xuICAgICAgICAgICAgcmVzICs9IFwiXFxuXCIuY29uY2F0KGJsdWUsIFwiLi4uXCIpLmNvbmNhdCh3aGl0ZSk7XG4gICAgICAgICAgICBza2lwcGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1ciA+IDMpIHtcbiAgICAgICAgICAgIHJlcyArPSBcIlxcbiAgXCIuY29uY2F0KGFjdHVhbExpbmVzW2kgLSAyXSk7XG4gICAgICAgICAgICBwcmludGVkTGluZXMrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXMgKz0gXCJcXG4gIFwiLmNvbmNhdChhY3R1YWxMaW5lc1tpIC0gMV0pO1xuICAgICAgICAgIHByaW50ZWRMaW5lcysrO1xuICAgICAgICB9IC8vIE1hcmsgdGhlIGN1cnJlbnQgbGluZSBhcyB0aGUgbGFzdCBkaXZlcmdpbmcgb25lLlxuXG5cbiAgICAgICAgbGFzdFBvcyA9IGk7IC8vIEFkZCB0aGUgYWN0dWFsIGxpbmUgdG8gdGhlIHJlc3VsdCBhbmQgY2FjaGUgdGhlIGV4cGVjdGVkIGRpdmVyZ2luZ1xuICAgICAgICAvLyBsaW5lIHNvIGNvbnNlY3V0aXZlIGRpdmVyZ2luZyBsaW5lcyBzaG93IHVwIGFzICsrKy0tLSBhbmQgbm90ICstKy0rLS5cblxuICAgICAgICByZXMgKz0gXCJcXG5cIi5jb25jYXQoZ3JlZW4sIFwiK1wiKS5jb25jYXQod2hpdGUsIFwiIFwiKS5jb25jYXQoYWN0dWFsTGluZSk7XG4gICAgICAgIG90aGVyICs9IFwiXFxuXCIuY29uY2F0KHJlZCwgXCItXCIpLmNvbmNhdCh3aGl0ZSwgXCIgXCIpLmNvbmNhdChleHBlY3RlZExpbmUpO1xuICAgICAgICBwcmludGVkTGluZXMgKz0gMjsgLy8gTGluZXMgYXJlIGlkZW50aWNhbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIGFsbCBjYWNoZWQgaW5mb3JtYXRpb24gdG8gdGhlIHJlc3VsdCBiZWZvcmUgYWRkaW5nIG90aGVyIHRoaW5nc1xuICAgICAgICAvLyBhbmQgcmVzZXQgdGhlIGNhY2hlLlxuICAgICAgICByZXMgKz0gb3RoZXI7XG4gICAgICAgIG90aGVyID0gJyc7IC8vIElmIHRoZSBsYXN0IGRpdmVyZ2luZyBsaW5lIGlzIGV4YWN0bHkgb25lIGxpbmUgYWJvdmUgb3IgaWYgaXQgaXMgdGhlXG4gICAgICAgIC8vIHZlcnkgZmlyc3QgbGluZSwgYWRkIHRoZSBsaW5lIHRvIHRoZSByZXN1bHQuXG5cbiAgICAgICAgaWYgKGN1ciA9PT0gMSB8fCBpID09PSAwKSB7XG4gICAgICAgICAgcmVzICs9IFwiXFxuICBcIi5jb25jYXQoYWN0dWFsTGluZSk7XG4gICAgICAgICAgcHJpbnRlZExpbmVzKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEluc3BlY3RlZCBvYmplY3QgdG8gYmlnIChTaG93IH4yMCByb3dzIG1heClcblxuXG4gICAgaWYgKHByaW50ZWRMaW5lcyA+IDIwICYmIGkgPCBtYXhMaW5lcyAtIDIpIHtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChtc2cpLmNvbmNhdChza2lwcGVkTXNnLCBcIlxcblwiKS5jb25jYXQocmVzLCBcIlxcblwiKS5jb25jYXQoYmx1ZSwgXCIuLi5cIikuY29uY2F0KHdoaXRlKS5jb25jYXQob3RoZXIsIFwiXFxuXCIpICsgXCJcIi5jb25jYXQoYmx1ZSwgXCIuLi5cIikuY29uY2F0KHdoaXRlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gXCJcIi5jb25jYXQobXNnKS5jb25jYXQoc2tpcHBlZCA/IHNraXBwZWRNc2cgOiAnJywgXCJcXG5cIikuY29uY2F0KHJlcykuY29uY2F0KG90aGVyKS5jb25jYXQoZW5kKS5jb25jYXQoaW5kaWNhdG9yKTtcbn1cblxudmFyIEFzc2VydGlvbkVycm9yID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfRXJyb3IpIHtcbiAgX2luaGVyaXRzKEFzc2VydGlvbkVycm9yLCBfRXJyb3IpO1xuXG4gIGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXNzZXJ0aW9uRXJyb3IpO1xuXG4gICAgaWYgKF90eXBlb2Yob3B0aW9ucykgIT09ICdvYmplY3QnIHx8IG9wdGlvbnMgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnb3B0aW9ucycsICdPYmplY3QnLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICB2YXIgbWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZSxcbiAgICAgICAgb3BlcmF0b3IgPSBvcHRpb25zLm9wZXJhdG9yLFxuICAgICAgICBzdGFja1N0YXJ0Rm4gPSBvcHRpb25zLnN0YWNrU3RhcnRGbjtcbiAgICB2YXIgYWN0dWFsID0gb3B0aW9ucy5hY3R1YWwsXG4gICAgICAgIGV4cGVjdGVkID0gb3B0aW9ucy5leHBlY3RlZDtcbiAgICB2YXIgbGltaXQgPSBFcnJvci5zdGFja1RyYWNlTGltaXQ7XG4gICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gMDtcblxuICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHtcbiAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEFzc2VydGlvbkVycm9yKS5jYWxsKHRoaXMsIFN0cmluZyhtZXNzYWdlKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5zdGRlcnIgJiYgcHJvY2Vzcy5zdGRlcnIuaXNUVFkpIHtcbiAgICAgICAgLy8gUmVzZXQgb24gZWFjaCBjYWxsIHRvIG1ha2Ugc3VyZSB3ZSBoYW5kbGUgZHluYW1pY2FsbHkgc2V0IGVudmlyb25tZW50XG4gICAgICAgIC8vIHZhcmlhYmxlcyBjb3JyZWN0LlxuICAgICAgICBpZiAocHJvY2Vzcy5zdGRlcnIgJiYgcHJvY2Vzcy5zdGRlcnIuZ2V0Q29sb3JEZXB0aCAmJiBwcm9jZXNzLnN0ZGVyci5nZXRDb2xvckRlcHRoKCkgIT09IDEpIHtcbiAgICAgICAgICBibHVlID0gXCJcXHgxQlszNG1cIjtcbiAgICAgICAgICBncmVlbiA9IFwiXFx4MUJbMzJtXCI7XG4gICAgICAgICAgd2hpdGUgPSBcIlxceDFCWzM5bVwiO1xuICAgICAgICAgIHJlZCA9IFwiXFx4MUJbMzFtXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmx1ZSA9ICcnO1xuICAgICAgICAgIGdyZWVuID0gJyc7XG4gICAgICAgICAgd2hpdGUgPSAnJztcbiAgICAgICAgICByZWQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSAvLyBQcmV2ZW50IHRoZSBlcnJvciBzdGFjayBmcm9tIGJlaW5nIHZpc2libGUgYnkgZHVwbGljYXRpbmcgdGhlIGVycm9yXG4gICAgICAvLyBpbiBhIHZlcnkgY2xvc2Ugd2F5IHRvIHRoZSBvcmlnaW5hbCBpbiBjYXNlIGJvdGggc2lkZXMgYXJlIGFjdHVhbGx5XG4gICAgICAvLyBpbnN0YW5jZXMgb2YgRXJyb3IuXG5cblxuICAgICAgaWYgKF90eXBlb2YoYWN0dWFsKSA9PT0gJ29iamVjdCcgJiYgYWN0dWFsICE9PSBudWxsICYmIF90eXBlb2YoZXhwZWN0ZWQpID09PSAnb2JqZWN0JyAmJiBleHBlY3RlZCAhPT0gbnVsbCAmJiAnc3RhY2snIGluIGFjdHVhbCAmJiBhY3R1YWwgaW5zdGFuY2VvZiBFcnJvciAmJiAnc3RhY2snIGluIGV4cGVjdGVkICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgYWN0dWFsID0gY29weUVycm9yKGFjdHVhbCk7XG4gICAgICAgIGV4cGVjdGVkID0gY29weUVycm9yKGV4cGVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wZXJhdG9yID09PSAnZGVlcFN0cmljdEVxdWFsJyB8fCBvcGVyYXRvciA9PT0gJ3N0cmljdEVxdWFsJykge1xuICAgICAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihBc3NlcnRpb25FcnJvcikuY2FsbCh0aGlzLCBjcmVhdGVFcnJEaWZmKGFjdHVhbCwgZXhwZWN0ZWQsIG9wZXJhdG9yKSkpO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJ25vdERlZXBTdHJpY3RFcXVhbCcgfHwgb3BlcmF0b3IgPT09ICdub3RTdHJpY3RFcXVhbCcpIHtcbiAgICAgICAgLy8gSW4gY2FzZSB0aGUgb2JqZWN0cyBhcmUgZXF1YWwgYnV0IHRoZSBvcGVyYXRvciByZXF1aXJlcyB1bmVxdWFsLCBzaG93XG4gICAgICAgIC8vIHRoZSBmaXJzdCBvYmplY3QgYW5kIHNheSBBIGVxdWFscyBCXG4gICAgICAgIHZhciBiYXNlID0ga1JlYWRhYmxlT3BlcmF0b3Jbb3BlcmF0b3JdO1xuICAgICAgICB2YXIgcmVzID0gaW5zcGVjdFZhbHVlKGFjdHVhbCkuc3BsaXQoJ1xcbicpOyAvLyBJbiBjYXNlIFwiYWN0dWFsXCIgaXMgYW4gb2JqZWN0LCBpdCBzaG91bGQgbm90IGJlIHJlZmVyZW5jZSBlcXVhbC5cblxuICAgICAgICBpZiAob3BlcmF0b3IgPT09ICdub3RTdHJpY3RFcXVhbCcgJiYgX3R5cGVvZihhY3R1YWwpID09PSAnb2JqZWN0JyAmJiBhY3R1YWwgIT09IG51bGwpIHtcbiAgICAgICAgICBiYXNlID0ga1JlYWRhYmxlT3BlcmF0b3Iubm90U3RyaWN0RXF1YWxPYmplY3Q7XG4gICAgICAgIH0gLy8gT25seSByZW1vdmUgbGluZXMgaW4gY2FzZSBpdCBtYWtlcyBzZW5zZSB0byBjb2xsYXBzZSB0aG9zZS5cbiAgICAgICAgLy8gVE9ETzogQWNjZXB0IGVudiB0byBhbHdheXMgc2hvdyB0aGUgZnVsbCBlcnJvci5cblxuXG4gICAgICAgIGlmIChyZXMubGVuZ3RoID4gMzApIHtcbiAgICAgICAgICByZXNbMjZdID0gXCJcIi5jb25jYXQoYmx1ZSwgXCIuLi5cIikuY29uY2F0KHdoaXRlKTtcblxuICAgICAgICAgIHdoaWxlIChyZXMubGVuZ3RoID4gMjcpIHtcbiAgICAgICAgICAgIHJlcy5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gT25seSBwcmludCBhIHNpbmdsZSBpbnB1dC5cblxuXG4gICAgICAgIGlmIChyZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQXNzZXJ0aW9uRXJyb3IpLmNhbGwodGhpcywgXCJcIi5jb25jYXQoYmFzZSwgXCIgXCIpLmNvbmNhdChyZXNbMF0pKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQXNzZXJ0aW9uRXJyb3IpLmNhbGwodGhpcywgXCJcIi5jb25jYXQoYmFzZSwgXCJcXG5cXG5cIikuY29uY2F0KHJlcy5qb2luKCdcXG4nKSwgXCJcXG5cIikpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9yZXMgPSBpbnNwZWN0VmFsdWUoYWN0dWFsKTtcblxuICAgICAgICB2YXIgb3RoZXIgPSAnJztcbiAgICAgICAgdmFyIGtub3duT3BlcmF0b3JzID0ga1JlYWRhYmxlT3BlcmF0b3Jbb3BlcmF0b3JdO1xuXG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gJ25vdERlZXBFcXVhbCcgfHwgb3BlcmF0b3IgPT09ICdub3RFcXVhbCcpIHtcbiAgICAgICAgICBfcmVzID0gXCJcIi5jb25jYXQoa1JlYWRhYmxlT3BlcmF0b3Jbb3BlcmF0b3JdLCBcIlxcblxcblwiKS5jb25jYXQoX3Jlcyk7XG5cbiAgICAgICAgICBpZiAoX3Jlcy5sZW5ndGggPiAxMDI0KSB7XG4gICAgICAgICAgICBfcmVzID0gXCJcIi5jb25jYXQoX3Jlcy5zbGljZSgwLCAxMDIxKSwgXCIuLi5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG90aGVyID0gXCJcIi5jb25jYXQoaW5zcGVjdFZhbHVlKGV4cGVjdGVkKSk7XG5cbiAgICAgICAgICBpZiAoX3Jlcy5sZW5ndGggPiA1MTIpIHtcbiAgICAgICAgICAgIF9yZXMgPSBcIlwiLmNvbmNhdChfcmVzLnNsaWNlKDAsIDUwOSksIFwiLi4uXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvdGhlci5sZW5ndGggPiA1MTIpIHtcbiAgICAgICAgICAgIG90aGVyID0gXCJcIi5jb25jYXQob3RoZXIuc2xpY2UoMCwgNTA5KSwgXCIuLi5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnZGVlcEVxdWFsJyB8fCBvcGVyYXRvciA9PT0gJ2VxdWFsJykge1xuICAgICAgICAgICAgX3JlcyA9IFwiXCIuY29uY2F0KGtub3duT3BlcmF0b3JzLCBcIlxcblxcblwiKS5jb25jYXQoX3JlcywgXCJcXG5cXG5zaG91bGQgZXF1YWxcXG5cXG5cIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG90aGVyID0gXCIgXCIuY29uY2F0KG9wZXJhdG9yLCBcIiBcIikuY29uY2F0KG90aGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihBc3NlcnRpb25FcnJvcikuY2FsbCh0aGlzLCBcIlwiLmNvbmNhdChfcmVzKS5jb25jYXQob3RoZXIpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gbGltaXQ7XG4gICAgX3RoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9ICFtZXNzYWdlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogJ0Fzc2VydGlvbkVycm9yIFtFUlJfQVNTRVJUSU9OXScsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgX3RoaXMuY29kZSA9ICdFUlJfQVNTRVJUSU9OJztcbiAgICBfdGhpcy5hY3R1YWwgPSBhY3R1YWw7XG4gICAgX3RoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgICBfdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBzdGFja1N0YXJ0Rm4pO1xuICAgIH0gLy8gQ3JlYXRlIGVycm9yIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBlcnJvciBjb2RlIGluIHRoZSBuYW1lLlxuXG5cbiAgICBfdGhpcy5zdGFjazsgLy8gUmVzZXQgdGhlIG5hbWUuXG5cbiAgICBfdGhpcy5uYW1lID0gJ0Fzc2VydGlvbkVycm9yJztcbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEFzc2VydGlvbkVycm9yLCBbe1xuICAgIGtleTogXCJ0b1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh0aGlzLm5hbWUsIFwiIFtcIikuY29uY2F0KHRoaXMuY29kZSwgXCJdOiBcIikuY29uY2F0KHRoaXMubWVzc2FnZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBpbnNwZWN0LmN1c3RvbSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUocmVjdXJzZVRpbWVzLCBjdHgpIHtcbiAgICAgIC8vIFRoaXMgbGltaXRzIHRoZSBgYWN0dWFsYCBhbmQgYGV4cGVjdGVkYCBwcm9wZXJ0eSBkZWZhdWx0IGluc3BlY3Rpb24gdG9cbiAgICAgIC8vIHRoZSBtaW5pbXVtIGRlcHRoLiBPdGhlcndpc2UgdGhvc2UgdmFsdWVzIHdvdWxkIGJlIHRvbyB2ZXJib3NlIGNvbXBhcmVkXG4gICAgICAvLyB0byB0aGUgYWN0dWFsIGVycm9yIG1lc3NhZ2Ugd2hpY2ggY29udGFpbnMgYSBjb21iaW5lZCB2aWV3IG9mIHRoZXNlIHR3b1xuICAgICAgLy8gaW5wdXQgdmFsdWVzLlxuICAgICAgcmV0dXJuIGluc3BlY3QodGhpcywgX29iamVjdFNwcmVhZCh7fSwgY3R4LCB7XG4gICAgICAgIGN1c3RvbUluc3BlY3Q6IGZhbHNlLFxuICAgICAgICBkZXB0aDogMFxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBBc3NlcnRpb25FcnJvcjtcbn0oX3dyYXBOYXRpdmVTdXBlcihFcnJvcikpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFzc2VydGlvbkVycm9yO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjEzNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEN1cnJlbnRseSBpbiBzeW5jIHdpdGggTm9kZS5qcyBsaWIvaW50ZXJuYWwvZXJyb3JzLmpzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvY29tbWl0LzNiMDQ0OTYyYzQ4ZmUzMTM5MDU4NzdhOTZiNWQwODk0YTU0MDRmNmZcblxuLyogZXNsaW50IG5vZGUtY29yZS9kb2N1bWVudGVkLWVycm9yczogXCJlcnJvclwiICovXG5cbi8qIGVzbGludCBub2RlLWNvcmUvYWxwaGFiZXRpemUtZXJyb3JzOiBcImVycm9yXCIgKi9cblxuLyogZXNsaW50IG5vZGUtY29yZS9wcmVmZXItdXRpbC1mb3JtYXQtZXJyb3JzOiBcImVycm9yXCIgKi9cbiAvLyBUaGUgd2hvbGUgcG9pbnQgYmVoaW5kIHRoaXMgaW50ZXJuYWwgbW9kdWxlIGlzIHRvIGFsbG93IE5vZGUuanMgdG8gbm9cbi8vIGxvbmdlciBiZSBmb3JjZWQgdG8gdHJlYXQgZXZlcnkgZXJyb3IgbWVzc2FnZSBjaGFuZ2UgYXMgYSBzZW12ZXItbWFqb3Jcbi8vIGNoYW5nZS4gVGhlIE5vZGVFcnJvciBjbGFzc2VzIGhlcmUgYWxsIGV4cG9zZSBhIGBjb2RlYCBwcm9wZXJ0eSB3aG9zZVxuLy8gdmFsdWUgc3RhdGljYWxseSBhbmQgcGVybWFuZW50bHkgaWRlbnRpZmllcyB0aGUgZXJyb3IuIFdoaWxlIHRoZSBlcnJvclxuLy8gbWVzc2FnZSBtYXkgY2hhbmdlLCB0aGUgY29kZSBzaG91bGQgbm90LlxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbnZhciBjb2RlcyA9IHt9OyAvLyBMYXp5IGxvYWRlZFxuXG52YXIgYXNzZXJ0O1xudmFyIHV0aWw7XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yVHlwZShjb2RlLCBtZXNzYWdlLCBCYXNlKSB7XG4gIGlmICghQmFzZSkge1xuICAgIEJhc2UgPSBFcnJvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE1lc3NhZ2UoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWVzc2FnZShhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB9XG4gIH1cblxuICB2YXIgTm9kZUVycm9yID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX0Jhc2UpIHtcbiAgICBfaW5oZXJpdHMoTm9kZUVycm9yLCBfQmFzZSk7XG5cbiAgICBmdW5jdGlvbiBOb2RlRXJyb3IoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm9kZUVycm9yKTtcblxuICAgICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTm9kZUVycm9yKS5jYWxsKHRoaXMsIGdldE1lc3NhZ2UoYXJnMSwgYXJnMiwgYXJnMykpKTtcbiAgICAgIF90aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIHJldHVybiBOb2RlRXJyb3I7XG4gIH0oQmFzZSk7XG5cbiAgY29kZXNbY29kZV0gPSBOb2RlRXJyb3I7XG59IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxMC44LjAvbGliL2ludGVybmFsL2Vycm9ycy5qc1xuXG5cbmZ1bmN0aW9uIG9uZU9mKGV4cGVjdGVkLCB0aGluZykge1xuICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICB2YXIgbGVuID0gZXhwZWN0ZWQubGVuZ3RoO1xuICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGkpO1xuICAgIH0pO1xuXG4gICAgaWYgKGxlbiA+IDIpIHtcbiAgICAgIHJldHVybiBcIm9uZSBvZiBcIi5jb25jYXQodGhpbmcsIFwiIFwiKS5jb25jYXQoZXhwZWN0ZWQuc2xpY2UoMCwgbGVuIC0gMSkuam9pbignLCAnKSwgXCIsIG9yIFwiKSArIGV4cGVjdGVkW2xlbiAtIDFdO1xuICAgIH0gZWxzZSBpZiAobGVuID09PSAyKSB7XG4gICAgICByZXR1cm4gXCJvbmUgb2YgXCIuY29uY2F0KHRoaW5nLCBcIiBcIikuY29uY2F0KGV4cGVjdGVkWzBdLCBcIiBvciBcIikuY29uY2F0KGV4cGVjdGVkWzFdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwib2YgXCIuY29uY2F0KHRoaW5nLCBcIiBcIikuY29uY2F0KGV4cGVjdGVkWzBdKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwib2YgXCIuY29uY2F0KHRoaW5nLCBcIiBcIikuY29uY2F0KFN0cmluZyhleHBlY3RlZCkpO1xuICB9XG59IC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9zdGFydHNXaXRoXG5cblxuZnVuY3Rpb24gc3RhcnRzV2l0aChzdHIsIHNlYXJjaCwgcG9zKSB7XG4gIHJldHVybiBzdHIuc3Vic3RyKCFwb3MgfHwgcG9zIDwgMCA/IDAgOiArcG9zLCBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xufSAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvZW5kc1dpdGhcblxuXG5mdW5jdGlvbiBlbmRzV2l0aChzdHIsIHNlYXJjaCwgdGhpc19sZW4pIHtcbiAgaWYgKHRoaXNfbGVuID09PSB1bmRlZmluZWQgfHwgdGhpc19sZW4gPiBzdHIubGVuZ3RoKSB7XG4gICAgdGhpc19sZW4gPSBzdHIubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zdWJzdHJpbmcodGhpc19sZW4gLSBzZWFyY2gubGVuZ3RoLCB0aGlzX2xlbikgPT09IHNlYXJjaDtcbn0gLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL2luY2x1ZGVzXG5cblxuZnVuY3Rpb24gaW5jbHVkZXMoc3RyLCBzZWFyY2gsIHN0YXJ0KSB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdudW1iZXInKSB7XG4gICAgc3RhcnQgPSAwO1xuICB9XG5cbiAgaWYgKHN0YXJ0ICsgc2VhcmNoLmxlbmd0aCA+IHN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHNlYXJjaCwgc3RhcnQpICE9PSAtMTtcbiAgfVxufVxuXG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9BTUJJR1VPVVNfQVJHVU1FTlQnLCAnVGhlIFwiJXNcIiBhcmd1bWVudCBpcyBhbWJpZ3VvdXMuICVzJywgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX0lOVkFMSURfQVJHX1RZUEUnLCBmdW5jdGlvbiAobmFtZSwgZXhwZWN0ZWQsIGFjdHVhbCkge1xuICBpZiAoYXNzZXJ0ID09PSB1bmRlZmluZWQpIGFzc2VydCA9IF9fd2VicGFja19yZXF1aXJlX18oOTI4Mik7XG4gIGFzc2VydCh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycsIFwiJ25hbWUnIG11c3QgYmUgYSBzdHJpbmdcIik7IC8vIGRldGVybWluZXI6ICdtdXN0IGJlJyBvciAnbXVzdCBub3QgYmUnXG5cbiAgdmFyIGRldGVybWluZXI7XG5cbiAgaWYgKHR5cGVvZiBleHBlY3RlZCA9PT0gJ3N0cmluZycgJiYgc3RhcnRzV2l0aChleHBlY3RlZCwgJ25vdCAnKSkge1xuICAgIGRldGVybWluZXIgPSAnbXVzdCBub3QgYmUnO1xuICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQucmVwbGFjZSgvXm5vdCAvLCAnJyk7XG4gIH0gZWxzZSB7XG4gICAgZGV0ZXJtaW5lciA9ICdtdXN0IGJlJztcbiAgfVxuXG4gIHZhciBtc2c7XG5cbiAgaWYgKGVuZHNXaXRoKG5hbWUsICcgYXJndW1lbnQnKSkge1xuICAgIC8vIEZvciBjYXNlcyBsaWtlICdmaXJzdCBhcmd1bWVudCdcbiAgICBtc2cgPSBcIlRoZSBcIi5jb25jYXQobmFtZSwgXCIgXCIpLmNvbmNhdChkZXRlcm1pbmVyLCBcIiBcIikuY29uY2F0KG9uZU9mKGV4cGVjdGVkLCAndHlwZScpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdHlwZSA9IGluY2x1ZGVzKG5hbWUsICcuJykgPyAncHJvcGVydHknIDogJ2FyZ3VtZW50JztcbiAgICBtc2cgPSBcIlRoZSBcXFwiXCIuY29uY2F0KG5hbWUsIFwiXFxcIiBcIikuY29uY2F0KHR5cGUsIFwiIFwiKS5jb25jYXQoZGV0ZXJtaW5lciwgXCIgXCIpLmNvbmNhdChvbmVPZihleHBlY3RlZCwgJ3R5cGUnKSk7XG4gIH0gLy8gVE9ETyhCcmlkZ2VBUik6IEltcHJvdmUgdGhlIG91dHB1dCBieSBzaG93aW5nIGBudWxsYCBhbmQgc2ltaWxhci5cblxuXG4gIG1zZyArPSBcIi4gUmVjZWl2ZWQgdHlwZSBcIi5jb25jYXQoX3R5cGVvZihhY3R1YWwpKTtcbiAgcmV0dXJuIG1zZztcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9JTlZBTElEX0FSR19WQUxVRScsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB2YXIgcmVhc29uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnaXMgaW52YWxpZCc7XG4gIGlmICh1dGlsID09PSB1bmRlZmluZWQpIHV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1MzkpO1xuICB2YXIgaW5zcGVjdGVkID0gdXRpbC5pbnNwZWN0KHZhbHVlKTtcblxuICBpZiAoaW5zcGVjdGVkLmxlbmd0aCA+IDEyOCkge1xuICAgIGluc3BlY3RlZCA9IFwiXCIuY29uY2F0KGluc3BlY3RlZC5zbGljZSgwLCAxMjgpLCBcIi4uLlwiKTtcbiAgfVxuXG4gIHJldHVybiBcIlRoZSBhcmd1bWVudCAnXCIuY29uY2F0KG5hbWUsIFwiJyBcIikuY29uY2F0KHJlYXNvbiwgXCIuIFJlY2VpdmVkIFwiKS5jb25jYXQoaW5zcGVjdGVkKTtcbn0sIFR5cGVFcnJvciwgUmFuZ2VFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRScsIGZ1bmN0aW9uIChpbnB1dCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIHR5cGU7XG5cbiAgaWYgKHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICB0eXBlID0gXCJpbnN0YW5jZSBvZiBcIi5jb25jYXQodmFsdWUuY29uc3RydWN0b3IubmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdHlwZSA9IFwidHlwZSBcIi5jb25jYXQoX3R5cGVvZih2YWx1ZSkpO1xuICB9XG5cbiAgcmV0dXJuIFwiRXhwZWN0ZWQgXCIuY29uY2F0KGlucHV0LCBcIiB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSBcXFwiXCIpLmNvbmNhdChuYW1lLCBcIlxcXCJcIikgKyBcIiBmdW5jdGlvbiBidXQgZ290IFwiLmNvbmNhdCh0eXBlLCBcIi5cIik7XG59LCBUeXBlRXJyb3IpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfTUlTU0lOR19BUkdTJywgZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGFzc2VydCA9PT0gdW5kZWZpbmVkKSBhc3NlcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkyODIpO1xuICBhc3NlcnQoYXJncy5sZW5ndGggPiAwLCAnQXQgbGVhc3Qgb25lIGFyZyBuZWVkcyB0byBiZSBzcGVjaWZpZWQnKTtcbiAgdmFyIG1zZyA9ICdUaGUgJztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gXCJcXFwiXCIuY29uY2F0KGEsIFwiXFxcIlwiKTtcbiAgfSk7XG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDE6XG4gICAgICBtc2cgKz0gXCJcIi5jb25jYXQoYXJnc1swXSwgXCIgYXJndW1lbnRcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMjpcbiAgICAgIG1zZyArPSBcIlwiLmNvbmNhdChhcmdzWzBdLCBcIiBhbmQgXCIpLmNvbmNhdChhcmdzWzFdLCBcIiBhcmd1bWVudHNcIik7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBtc2cgKz0gYXJncy5zbGljZSgwLCBsZW4gLSAxKS5qb2luKCcsICcpO1xuICAgICAgbXNnICs9IFwiLCBhbmQgXCIuY29uY2F0KGFyZ3NbbGVuIC0gMV0sIFwiIGFyZ3VtZW50c1wiKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIFwiXCIuY29uY2F0KG1zZywgXCIgbXVzdCBiZSBzcGVjaWZpZWRcIik7XG59LCBUeXBlRXJyb3IpO1xubW9kdWxlLmV4cG9ydHMuY29kZXMgPSBjb2RlcztcblxuLyoqKi8gfSksXG5cbi8qKiovIDkxNTg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDdXJyZW50bHkgaW4gc3luYyB3aXRoIE5vZGUuanMgbGliL2ludGVybmFsL3V0aWwvY29tcGFyaXNvbnMuanNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9jb21taXQvMTEyY2M3YzI3NTUxMjU0YWEyYjE3MDk4ZmI3NzQ4NjdmMDVlZDBkOVxuXG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgcmVnZXhGbGFnc1N1cHBvcnRlZCA9IC9hL2cuZmxhZ3MgIT09IHVuZGVmaW5lZDtcblxudmFyIGFycmF5RnJvbVNldCA9IGZ1bmN0aW9uIGFycmF5RnJvbVNldChzZXQpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBhcnJheS5wdXNoKHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBhcnJheTtcbn07XG5cbnZhciBhcnJheUZyb21NYXAgPSBmdW5jdGlvbiBhcnJheUZyb21NYXAobWFwKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgIHJldHVybiBhcnJheS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0pO1xuICByZXR1cm4gYXJyYXk7XG59O1xuXG52YXIgb2JqZWN0SXMgPSBPYmplY3QuaXMgPyBPYmplY3QuaXMgOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwOSk7XG52YXIgb2JqZWN0R2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXTtcbn07XG52YXIgbnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gPyBOdW1iZXIuaXNOYU4gOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2MCk7XG5cbmZ1bmN0aW9uIHVuY3VycnlUaGlzKGYpIHtcbiAgcmV0dXJuIGYuY2FsbC5iaW5kKGYpO1xufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHVuY3VycnlUaGlzKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUpO1xudmFyIG9iamVjdFRvU3RyaW5nID0gdW5jdXJyeVRoaXMoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyk7XG5cbnZhciBfcmVxdWlyZSR0eXBlcyA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDk1MzkpLnR5cGVzKSxcbiAgICBpc0FueUFycmF5QnVmZmVyID0gX3JlcXVpcmUkdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcixcbiAgICBpc0FycmF5QnVmZmVyVmlldyA9IF9yZXF1aXJlJHR5cGVzLmlzQXJyYXlCdWZmZXJWaWV3LFxuICAgIGlzRGF0ZSA9IF9yZXF1aXJlJHR5cGVzLmlzRGF0ZSxcbiAgICBpc01hcCA9IF9yZXF1aXJlJHR5cGVzLmlzTWFwLFxuICAgIGlzUmVnRXhwID0gX3JlcXVpcmUkdHlwZXMuaXNSZWdFeHAsXG4gICAgaXNTZXQgPSBfcmVxdWlyZSR0eXBlcy5pc1NldCxcbiAgICBpc05hdGl2ZUVycm9yID0gX3JlcXVpcmUkdHlwZXMuaXNOYXRpdmVFcnJvcixcbiAgICBpc0JveGVkUHJpbWl0aXZlID0gX3JlcXVpcmUkdHlwZXMuaXNCb3hlZFByaW1pdGl2ZSxcbiAgICBpc051bWJlck9iamVjdCA9IF9yZXF1aXJlJHR5cGVzLmlzTnVtYmVyT2JqZWN0LFxuICAgIGlzU3RyaW5nT2JqZWN0ID0gX3JlcXVpcmUkdHlwZXMuaXNTdHJpbmdPYmplY3QsXG4gICAgaXNCb29sZWFuT2JqZWN0ID0gX3JlcXVpcmUkdHlwZXMuaXNCb29sZWFuT2JqZWN0LFxuICAgIGlzQmlnSW50T2JqZWN0ID0gX3JlcXVpcmUkdHlwZXMuaXNCaWdJbnRPYmplY3QsXG4gICAgaXNTeW1ib2xPYmplY3QgPSBfcmVxdWlyZSR0eXBlcy5pc1N5bWJvbE9iamVjdCxcbiAgICBpc0Zsb2F0MzJBcnJheSA9IF9yZXF1aXJlJHR5cGVzLmlzRmxvYXQzMkFycmF5LFxuICAgIGlzRmxvYXQ2NEFycmF5ID0gX3JlcXVpcmUkdHlwZXMuaXNGbG9hdDY0QXJyYXk7XG5cbmZ1bmN0aW9uIGlzTm9uSW5kZXgoa2V5KSB7XG4gIGlmIChrZXkubGVuZ3RoID09PSAwIHx8IGtleS5sZW5ndGggPiAxMCkgcmV0dXJuIHRydWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY29kZSA9IGtleS5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IDU3KSByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBUaGUgbWF4aW11bSBzaXplIGZvciBhbiBhcnJheSBpcyAyICoqIDMyIC0xLlxuXG5cbiAgcmV0dXJuIGtleS5sZW5ndGggPT09IDEwICYmIGtleSA+PSBNYXRoLnBvdygyLCAzMik7XG59XG5cbmZ1bmN0aW9uIGdldE93bk5vbkluZGV4UHJvcGVydGllcyh2YWx1ZSkge1xuICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmZpbHRlcihpc05vbkluZGV4KS5jb25jYXQob2JqZWN0R2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbHVlKS5maWx0ZXIoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5iaW5kKHZhbHVlKSkpO1xufSAvLyBUYWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cblxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB2YXIgeCA9IGEubGVuZ3RoO1xuICB2YXIgeSA9IGIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldO1xuICAgICAgeSA9IGJbaV07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG52YXIgT05MWV9FTlVNRVJBQkxFID0gdW5kZWZpbmVkO1xudmFyIGtTdHJpY3QgPSB0cnVlO1xudmFyIGtMb29zZSA9IGZhbHNlO1xudmFyIGtOb0l0ZXJhdG9yID0gMDtcbnZhciBrSXNBcnJheSA9IDE7XG52YXIga0lzU2V0ID0gMjtcbnZhciBrSXNNYXAgPSAzOyAvLyBDaGVjayBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgc291cmNlIGFuZCBmbGFnc1xuXG5mdW5jdGlvbiBhcmVTaW1pbGFyUmVnRXhwcyhhLCBiKSB7XG4gIHJldHVybiByZWdleEZsYWdzU3VwcG9ydGVkID8gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3MgOiBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkgPT09IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiKTtcbn1cblxuZnVuY3Rpb24gYXJlU2ltaWxhckZsb2F0QXJyYXlzKGEsIGIpIHtcbiAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYS5ieXRlTGVuZ3RoOyBvZmZzZXQrKykge1xuICAgIGlmIChhW29mZnNldF0gIT09IGJbb2Zmc2V0XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBhcmVTaW1pbGFyVHlwZWRBcnJheXMoYSwgYikge1xuICBpZiAoYS5ieXRlTGVuZ3RoICE9PSBiLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhLmJ1ZmZlciwgYS5ieXRlT2Zmc2V0LCBhLmJ5dGVMZW5ndGgpLCBuZXcgVWludDhBcnJheShiLmJ1ZmZlciwgYi5ieXRlT2Zmc2V0LCBiLmJ5dGVMZW5ndGgpKSA9PT0gMDtcbn1cblxuZnVuY3Rpb24gYXJlRXF1YWxBcnJheUJ1ZmZlcnMoYnVmMSwgYnVmMikge1xuICByZXR1cm4gYnVmMS5ieXRlTGVuZ3RoID09PSBidWYyLmJ5dGVMZW5ndGggJiYgY29tcGFyZShuZXcgVWludDhBcnJheShidWYxKSwgbmV3IFVpbnQ4QXJyYXkoYnVmMikpID09PSAwO1xufVxuXG5mdW5jdGlvbiBpc0VxdWFsQm94ZWRQcmltaXRpdmUodmFsMSwgdmFsMikge1xuICBpZiAoaXNOdW1iZXJPYmplY3QodmFsMSkpIHtcbiAgICByZXR1cm4gaXNOdW1iZXJPYmplY3QodmFsMikgJiYgb2JqZWN0SXMoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodmFsMSksIE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHZhbDIpKTtcbiAgfVxuXG4gIGlmIChpc1N0cmluZ09iamVjdCh2YWwxKSkge1xuICAgIHJldHVybiBpc1N0cmluZ09iamVjdCh2YWwyKSAmJiBTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh2YWwxKSA9PT0gU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodmFsMik7XG4gIH1cblxuICBpZiAoaXNCb29sZWFuT2JqZWN0KHZhbDEpKSB7XG4gICAgcmV0dXJuIGlzQm9vbGVhbk9iamVjdCh2YWwyKSAmJiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodmFsMSkgPT09IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh2YWwyKTtcbiAgfVxuXG4gIGlmIChpc0JpZ0ludE9iamVjdCh2YWwxKSkge1xuICAgIHJldHVybiBpc0JpZ0ludE9iamVjdCh2YWwyKSAmJiBCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh2YWwxKSA9PT0gQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodmFsMik7XG4gIH1cblxuICByZXR1cm4gaXNTeW1ib2xPYmplY3QodmFsMikgJiYgU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodmFsMSkgPT09IFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHZhbDIpO1xufSAvLyBOb3RlczogVHlwZSB0YWdzIGFyZSBoaXN0b3JpY2FsIFtbQ2xhc3NdXSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHNldCBieVxuLy8gRnVuY3Rpb25UZW1wbGF0ZTo6U2V0Q2xhc3NOYW1lKCkgaW4gQysrIG9yIFN5bWJvbC50b1N0cmluZ1RhZyBpbiBKU1xuLy8gYW5kIHJldHJpZXZlZCB1c2luZyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSBpbiBKU1xuLy8gU2VlIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbi8vIGZvciBhIGxpc3Qgb2YgdGFncyBwcmUtZGVmaW5lZCBpbiB0aGUgc3BlYy5cbi8vIFRoZXJlIGFyZSBzb21lIHVuc3BlY2lmaWVkIHRhZ3MgaW4gdGhlIHdpbGQgdG9vIChlLmcuIHR5cGVkIGFycmF5IHRhZ3MpLlxuLy8gU2luY2UgdGFncyBjYW4gYmUgYWx0ZXJlZCwgdGhleSBvbmx5IHNlcnZlIGZhc3QgZmFpbHVyZXNcbi8vXG4vLyBUeXBlZCBhcnJheXMgYW5kIGJ1ZmZlcnMgYXJlIGNoZWNrZWQgYnkgY29tcGFyaW5nIHRoZSBjb250ZW50IGluIHRoZWlyXG4vLyB1bmRlcmx5aW5nIEFycmF5QnVmZmVyLiBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGF0IGl0J3Ncbi8vIHJlYXNvbmFibGUgdG8gaW50ZXJwcmV0IHRoZWlyIHVuZGVybHlpbmcgbWVtb3J5IGluIHRoZSBzYW1lIHdheSxcbi8vIHdoaWNoIGlzIGNoZWNrZWQgYnkgY29tcGFyaW5nIHRoZWlyIHR5cGUgdGFncy5cbi8vIChlLmcuIGEgVWludDhBcnJheSBhbmQgYSBVaW50MTZBcnJheSB3aXRoIHRoZSBzYW1lIG1lbW9yeSBjb250ZW50XG4vLyBjb3VsZCBzdGlsbCBiZSBkaWZmZXJlbnQgYmVjYXVzZSB0aGV5IHdpbGwgYmUgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkpLlxuLy9cbi8vIEZvciBzdHJpY3QgY29tcGFyaXNvbiwgb2JqZWN0cyBzaG91bGQgaGF2ZVxuLy8gYSkgVGhlIHNhbWUgYnVpbHQtaW4gdHlwZSB0YWdzXG4vLyBiKSBUaGUgc2FtZSBwcm90b3R5cGVzLlxuXG5cbmZ1bmN0aW9uIGlubmVyRGVlcEVxdWFsKHZhbDEsIHZhbDIsIHN0cmljdCwgbWVtb3MpIHtcbiAgLy8gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAodmFsMSA9PT0gdmFsMikge1xuICAgIGlmICh2YWwxICE9PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gc3RyaWN0ID8gb2JqZWN0SXModmFsMSwgdmFsMikgOiB0cnVlO1xuICB9IC8vIENoZWNrIG1vcmUgY2xvc2VseSBpZiB2YWwxIGFuZCB2YWwyIGFyZSBlcXVhbC5cblxuXG4gIGlmIChzdHJpY3QpIHtcbiAgICBpZiAoX3R5cGVvZih2YWwxKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsMSA9PT0gJ251bWJlcicgJiYgbnVtYmVySXNOYU4odmFsMSkgJiYgbnVtYmVySXNOYU4odmFsMik7XG4gICAgfVxuXG4gICAgaWYgKF90eXBlb2YodmFsMikgIT09ICdvYmplY3QnIHx8IHZhbDEgPT09IG51bGwgfHwgdmFsMiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsMSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodmFsMSA9PT0gbnVsbCB8fCBfdHlwZW9mKHZhbDEpICE9PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHZhbDIgPT09IG51bGwgfHwgX3R5cGVvZih2YWwyKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICByZXR1cm4gdmFsMSA9PSB2YWwyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHZhbDIgPT09IG51bGwgfHwgX3R5cGVvZih2YWwyKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgdmFsMVRhZyA9IG9iamVjdFRvU3RyaW5nKHZhbDEpO1xuICB2YXIgdmFsMlRhZyA9IG9iamVjdFRvU3RyaW5nKHZhbDIpO1xuXG4gIGlmICh2YWwxVGFnICE9PSB2YWwyVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsMSkpIHtcbiAgICAvLyBDaGVjayBmb3Igc3BhcnNlIGFycmF5cyBhbmQgZ2VuZXJhbCBmYXN0IHBhdGhcbiAgICBpZiAodmFsMS5sZW5ndGggIT09IHZhbDIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGtleXMxID0gZ2V0T3duTm9uSW5kZXhQcm9wZXJ0aWVzKHZhbDEsIE9OTFlfRU5VTUVSQUJMRSk7XG4gICAgdmFyIGtleXMyID0gZ2V0T3duTm9uSW5kZXhQcm9wZXJ0aWVzKHZhbDIsIE9OTFlfRU5VTUVSQUJMRSk7XG5cbiAgICBpZiAoa2V5czEubGVuZ3RoICE9PSBrZXlzMi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5Q2hlY2sodmFsMSwgdmFsMiwgc3RyaWN0LCBtZW1vcywga0lzQXJyYXksIGtleXMxKTtcbiAgfSAvLyBbYnJvd3NlcmlmeV0gVGhpcyB0cmlnZ2VycyBvbiBjZXJ0YWluIHR5cGVzIGluIElFIChNYXAvU2V0KSBzbyB3ZSBkb24ndFxuICAvLyB3YW4ndCB0byBlYXJseSByZXR1cm4gb3V0IG9mIHRoZSByZXN0IG9mIHRoZSBjaGVja3MuIEhvd2V2ZXIgd2UgY2FuIGNoZWNrXG4gIC8vIGlmIHRoZSBzZWNvbmQgdmFsdWUgaXMgb25lIG9mIHRoZXNlIHZhbHVlcyBhbmQgdGhlIGZpcnN0IGlzbid0LlxuXG5cbiAgaWYgKHZhbDFUYWcgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgLy8gcmV0dXJuIGtleUNoZWNrKHZhbDEsIHZhbDIsIHN0cmljdCwgbWVtb3MsIGtOb0l0ZXJhdG9yKTtcbiAgICBpZiAoIWlzTWFwKHZhbDEpICYmIGlzTWFwKHZhbDIpIHx8ICFpc1NldCh2YWwxKSAmJiBpc1NldCh2YWwyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc0RhdGUodmFsMSkpIHtcbiAgICBpZiAoIWlzRGF0ZSh2YWwyKSB8fCBEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwodmFsMSkgIT09IERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbCh2YWwyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1JlZ0V4cCh2YWwxKSkge1xuICAgIGlmICghaXNSZWdFeHAodmFsMikgfHwgIWFyZVNpbWlsYXJSZWdFeHBzKHZhbDEsIHZhbDIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTmF0aXZlRXJyb3IodmFsMSkgfHwgdmFsMSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgLy8gRG8gbm90IGNvbXBhcmUgdGhlIHN0YWNrIGFzIGl0IG1pZ2h0IGRpZmZlciBldmVuIHRob3VnaCB0aGUgZXJyb3IgaXRzZWxmXG4gICAgLy8gaXMgb3RoZXJ3aXNlIGlkZW50aWNhbC5cbiAgICBpZiAodmFsMS5tZXNzYWdlICE9PSB2YWwyLm1lc3NhZ2UgfHwgdmFsMS5uYW1lICE9PSB2YWwyLm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNBcnJheUJ1ZmZlclZpZXcodmFsMSkpIHtcbiAgICBpZiAoIXN0cmljdCAmJiAoaXNGbG9hdDMyQXJyYXkodmFsMSkgfHwgaXNGbG9hdDY0QXJyYXkodmFsMSkpKSB7XG4gICAgICBpZiAoIWFyZVNpbWlsYXJGbG9hdEFycmF5cyh2YWwxLCB2YWwyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghYXJlU2ltaWxhclR5cGVkQXJyYXlzKHZhbDEsIHZhbDIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBCdWZmZXIuY29tcGFyZSByZXR1cm5zIHRydWUsIHNvIHZhbDEubGVuZ3RoID09PSB2YWwyLmxlbmd0aC4gSWYgdGhleSBib3RoXG4gICAgLy8gb25seSBjb250YWluIG51bWVyaWMga2V5cywgd2UgZG9uJ3QgbmVlZCB0byBleGFtIGZ1cnRoZXIgdGhhbiBjaGVja2luZ1xuICAgIC8vIHRoZSBzeW1ib2xzLlxuXG5cbiAgICB2YXIgX2tleXMgPSBnZXRPd25Ob25JbmRleFByb3BlcnRpZXModmFsMSwgT05MWV9FTlVNRVJBQkxFKTtcblxuICAgIHZhciBfa2V5czIgPSBnZXRPd25Ob25JbmRleFByb3BlcnRpZXModmFsMiwgT05MWV9FTlVNRVJBQkxFKTtcblxuICAgIGlmIChfa2V5cy5sZW5ndGggIT09IF9rZXlzMi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5Q2hlY2sodmFsMSwgdmFsMiwgc3RyaWN0LCBtZW1vcywga05vSXRlcmF0b3IsIF9rZXlzKTtcbiAgfSBlbHNlIGlmIChpc1NldCh2YWwxKSkge1xuICAgIGlmICghaXNTZXQodmFsMikgfHwgdmFsMS5zaXplICE9PSB2YWwyLnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5Q2hlY2sodmFsMSwgdmFsMiwgc3RyaWN0LCBtZW1vcywga0lzU2V0KTtcbiAgfSBlbHNlIGlmIChpc01hcCh2YWwxKSkge1xuICAgIGlmICghaXNNYXAodmFsMikgfHwgdmFsMS5zaXplICE9PSB2YWwyLnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5Q2hlY2sodmFsMSwgdmFsMiwgc3RyaWN0LCBtZW1vcywga0lzTWFwKTtcbiAgfSBlbHNlIGlmIChpc0FueUFycmF5QnVmZmVyKHZhbDEpKSB7XG4gICAgaWYgKCFhcmVFcXVhbEFycmF5QnVmZmVycyh2YWwxLCB2YWwyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0JveGVkUHJpbWl0aXZlKHZhbDEpICYmICFpc0VxdWFsQm94ZWRQcmltaXRpdmUodmFsMSwgdmFsMikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4ga2V5Q2hlY2sodmFsMSwgdmFsMiwgc3RyaWN0LCBtZW1vcywga05vSXRlcmF0b3IpO1xufVxuXG5mdW5jdGlvbiBnZXRFbnVtZXJhYmxlcyh2YWwsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlKHZhbCwgayk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBrZXlDaGVjayh2YWwxLCB2YWwyLCBzdHJpY3QsIG1lbW9zLCBpdGVyYXRpb25UeXBlLCBhS2V5cykge1xuICAvLyBGb3IgYWxsIHJlbWFpbmluZyBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSwgb2JqZWN0cyBhbmQgTWFwcyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSBoYXZpbmc6XG4gIC8vIGEpIFRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBlbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAgLy8gYikgVGhlIHNhbWUgc2V0IG9mIGtleXMvaW5kZXhlcyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKVxuICAvLyBjKSBFcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXkvaW5kZXhcbiAgLy8gZCkgRm9yIFNldHMgYW5kIE1hcHMsIGVxdWFsIGNvbnRlbnRzXG4gIC8vIE5vdGU6IHRoaXMgYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA1KSB7XG4gICAgYUtleXMgPSBPYmplY3Qua2V5cyh2YWwxKTtcbiAgICB2YXIgYktleXMgPSBPYmplY3Qua2V5cyh2YWwyKTsgLy8gVGhlIHBhaXIgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzLlxuXG4gICAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIENoZWFwIGtleSB0ZXN0XG5cblxuICB2YXIgaSA9IDA7XG5cbiAgZm9yICg7IGkgPCBhS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzT3duUHJvcGVydHkodmFsMiwgYUtleXNbaV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0cmljdCAmJiBhcmd1bWVudHMubGVuZ3RoID09PSA1KSB7XG4gICAgdmFyIHN5bWJvbEtleXNBID0gb2JqZWN0R2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbDEpO1xuXG4gICAgaWYgKHN5bWJvbEtleXNBLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdmFyIGNvdW50ID0gMDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHN5bWJvbEtleXNBLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBzeW1ib2xLZXlzQVtpXTtcblxuICAgICAgICBpZiAocHJvcGVydHlJc0VudW1lcmFibGUodmFsMSwga2V5KSkge1xuICAgICAgICAgIGlmICghcHJvcGVydHlJc0VudW1lcmFibGUodmFsMiwga2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5SXNFbnVtZXJhYmxlKHZhbDIsIGtleSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN5bWJvbEtleXNCID0gb2JqZWN0R2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbDIpO1xuXG4gICAgICBpZiAoc3ltYm9sS2V5c0EubGVuZ3RoICE9PSBzeW1ib2xLZXlzQi5sZW5ndGggJiYgZ2V0RW51bWVyYWJsZXModmFsMiwgc3ltYm9sS2V5c0IpLmxlbmd0aCAhPT0gY291bnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX3N5bWJvbEtleXNCID0gb2JqZWN0R2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbDIpO1xuXG4gICAgICBpZiAoX3N5bWJvbEtleXNCLmxlbmd0aCAhPT0gMCAmJiBnZXRFbnVtZXJhYmxlcyh2YWwyLCBfc3ltYm9sS2V5c0IpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFLZXlzLmxlbmd0aCA9PT0gMCAmJiAoaXRlcmF0aW9uVHlwZSA9PT0ga05vSXRlcmF0b3IgfHwgaXRlcmF0aW9uVHlwZSA9PT0ga0lzQXJyYXkgJiYgdmFsMS5sZW5ndGggPT09IDAgfHwgdmFsMS5zaXplID09PSAwKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFVzZSBtZW1vcyB0byBoYW5kbGUgY3ljbGVzLlxuXG5cbiAgaWYgKG1lbW9zID09PSB1bmRlZmluZWQpIHtcbiAgICBtZW1vcyA9IHtcbiAgICAgIHZhbDE6IG5ldyBNYXAoKSxcbiAgICAgIHZhbDI6IG5ldyBNYXAoKSxcbiAgICAgIHBvc2l0aW9uOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBwcmV2ZW50IHVwIHRvIHR3byBtYXAuaGFzKHgpIGNhbGxzIGJ5IGRpcmVjdGx5IHJldHJpZXZpbmcgdGhlIHZhbHVlXG4gICAgLy8gYW5kIGNoZWNraW5nIGZvciB1bmRlZmluZWQuIFRoZSBtYXAgY2FuIG9ubHkgY29udGFpbiBudW1iZXJzLCBzbyBpdCBpc1xuICAgIC8vIHNhZmUgdG8gY2hlY2sgZm9yIHVuZGVmaW5lZCBvbmx5LlxuICAgIHZhciB2YWwyTWVtb0EgPSBtZW1vcy52YWwxLmdldCh2YWwxKTtcblxuICAgIGlmICh2YWwyTWVtb0EgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHZhbDJNZW1vQiA9IG1lbW9zLnZhbDIuZ2V0KHZhbDIpO1xuXG4gICAgICBpZiAodmFsMk1lbW9CICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHZhbDJNZW1vQSA9PT0gdmFsMk1lbW9CO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLnBvc2l0aW9uKys7XG4gIH1cblxuICBtZW1vcy52YWwxLnNldCh2YWwxLCBtZW1vcy5wb3NpdGlvbik7XG4gIG1lbW9zLnZhbDIuc2V0KHZhbDIsIG1lbW9zLnBvc2l0aW9uKTtcbiAgdmFyIGFyZUVxID0gb2JqRXF1aXYodmFsMSwgdmFsMiwgc3RyaWN0LCBhS2V5cywgbWVtb3MsIGl0ZXJhdGlvblR5cGUpO1xuICBtZW1vcy52YWwxLmRlbGV0ZSh2YWwxKTtcbiAgbWVtb3MudmFsMi5kZWxldGUodmFsMik7XG4gIHJldHVybiBhcmVFcTtcbn1cblxuZnVuY3Rpb24gc2V0SGFzRXF1YWxFbGVtZW50KHNldCwgdmFsMSwgc3RyaWN0LCBtZW1vKSB7XG4gIC8vIEdvIGxvb2tpbmcuXG4gIHZhciBzZXRWYWx1ZXMgPSBhcnJheUZyb21TZXQoc2V0KTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNldFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB2YWwyID0gc2V0VmFsdWVzW2ldO1xuXG4gICAgaWYgKGlubmVyRGVlcEVxdWFsKHZhbDEsIHZhbDIsIHN0cmljdCwgbWVtbykpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgbWF0Y2hpbmcgZWxlbWVudCB0byBtYWtlIHN1cmUgd2UgZG8gbm90IGNoZWNrIHRoYXQgYWdhaW4uXG4gICAgICBzZXQuZGVsZXRlKHZhbDIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9FcXVhbGl0eV9jb21wYXJpc29uc19hbmRfc2FtZW5lc3MjTG9vc2VfZXF1YWxpdHlfdXNpbmdcbi8vIFNhZGx5IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZXRlY3QgY29ycmVzcG9uZGluZyB2YWx1ZXMgcHJvcGVybHkgaW4gY2FzZSB0aGVcbi8vIHR5cGUgaXMgYSBzdHJpbmcsIG51bWJlciwgYmlnaW50IG9yIGJvb2xlYW4uIFRoZSByZWFzb24gaXMgdGhhdCB0aG9zZSB2YWx1ZXNcbi8vIGNhbiBtYXRjaCBsb3RzIG9mIGRpZmZlcmVudCBzdHJpbmcgdmFsdWVzIChlLmcuLCAxbiA9PSAnKzAwMDAxJykuXG5cblxuZnVuY3Rpb24gZmluZExvb3NlTWF0Y2hpbmdQcmltaXRpdmVzKHByaW0pIHtcbiAgc3dpdGNoIChfdHlwZW9mKHByaW0pKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIC8vIE9ubHkgcGFzcyBpbiBudWxsIGFzIG9iamVjdCFcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHByaW0gPSArcHJpbTtcbiAgICAvLyBMb29zZSBlcXVhbCBlbnRyaWVzIGV4aXN0IG9ubHkgaWYgdGhlIHN0cmluZyBpcyBwb3NzaWJsZSB0byBjb252ZXJ0IHRvXG4gICAgLy8gYSByZWd1bGFyIG51bWJlciBhbmQgbm90IE5hTi5cbiAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBpZiAobnVtYmVySXNOYU4ocHJpbSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2V0TWlnaHRIYXZlTG9vc2VQcmltKGEsIGIsIHByaW0pIHtcbiAgdmFyIGFsdFZhbHVlID0gZmluZExvb3NlTWF0Y2hpbmdQcmltaXRpdmVzKHByaW0pO1xuICBpZiAoYWx0VmFsdWUgIT0gbnVsbCkgcmV0dXJuIGFsdFZhbHVlO1xuICByZXR1cm4gYi5oYXMoYWx0VmFsdWUpICYmICFhLmhhcyhhbHRWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG1hcE1pZ2h0SGF2ZUxvb3NlUHJpbShhLCBiLCBwcmltLCBpdGVtLCBtZW1vKSB7XG4gIHZhciBhbHRWYWx1ZSA9IGZpbmRMb29zZU1hdGNoaW5nUHJpbWl0aXZlcyhwcmltKTtcblxuICBpZiAoYWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBhbHRWYWx1ZTtcbiAgfVxuXG4gIHZhciBjdXJCID0gYi5nZXQoYWx0VmFsdWUpO1xuXG4gIGlmIChjdXJCID09PSB1bmRlZmluZWQgJiYgIWIuaGFzKGFsdFZhbHVlKSB8fCAhaW5uZXJEZWVwRXF1YWwoaXRlbSwgY3VyQiwgZmFsc2UsIG1lbW8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuICFhLmhhcyhhbHRWYWx1ZSkgJiYgaW5uZXJEZWVwRXF1YWwoaXRlbSwgY3VyQiwgZmFsc2UsIG1lbW8pO1xufVxuXG5mdW5jdGlvbiBzZXRFcXVpdihhLCBiLCBzdHJpY3QsIG1lbW8pIHtcbiAgLy8gVGhpcyBpcyBhIGxhemlseSBpbml0aWF0ZWQgU2V0IG9mIGVudHJpZXMgd2hpY2ggaGF2ZSB0byBiZSBjb21wYXJlZFxuICAvLyBwYWlyd2lzZS5cbiAgdmFyIHNldCA9IG51bGw7XG4gIHZhciBhVmFsdWVzID0gYXJyYXlGcm9tU2V0KGEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYVZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB2YWwgPSBhVmFsdWVzW2ldOyAvLyBOb3RlOiBDaGVja2luZyBmb3IgdGhlIG9iamVjdHMgZmlyc3QgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIGZvciBvYmplY3RcbiAgICAvLyBoZWF2eSBzZXRzIGJ1dCBpdCBpcyBhIG1pbm9yIHNsb3cgZG93biBmb3IgcHJpbWl0aXZlcy4gQXMgdGhleSBhcmUgZmFzdFxuICAgIC8vIHRvIGNoZWNrIHRoaXMgaW1wcm92ZXMgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gaW5zdGVhZC5cblxuICAgIGlmIChfdHlwZW9mKHZhbCkgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgaWYgKHNldCA9PT0gbnVsbCkge1xuICAgICAgICBzZXQgPSBuZXcgU2V0KCk7XG4gICAgICB9IC8vIElmIHRoZSBzcGVjaWZpZWQgdmFsdWUgZG9lc24ndCBleGlzdCBpbiB0aGUgc2Vjb25kIHNldCBpdHMgYW4gbm90IG51bGxcbiAgICAgIC8vIG9iamVjdCAob3Igbm9uIHN0cmljdCBvbmx5OiBhIG5vdCBtYXRjaGluZyBwcmltaXRpdmUpIHdlJ2xsIG5lZWQgdG8gZ29cbiAgICAgIC8vIGh1bnRpbmcgZm9yIHNvbWV0aGluZyB0aGF0cyBkZWVwLShzdHJpY3QtKWVxdWFsIHRvIGl0LiBUbyBtYWtlIHRoaXNcbiAgICAgIC8vIE8obiBsb2cgbikgY29tcGxleGl0eSB3ZSBoYXZlIHRvIGNvcHkgdGhlc2UgdmFsdWVzIGluIGEgbmV3IHNldCBmaXJzdC5cblxuXG4gICAgICBzZXQuYWRkKHZhbCk7XG4gICAgfSBlbHNlIGlmICghYi5oYXModmFsKSkge1xuICAgICAgaWYgKHN0cmljdCkgcmV0dXJuIGZhbHNlOyAvLyBGYXN0IHBhdGggdG8gZGV0ZWN0IG1pc3Npbmcgc3RyaW5nLCBzeW1ib2wsIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXMuXG5cbiAgICAgIGlmICghc2V0TWlnaHRIYXZlTG9vc2VQcmltKGEsIGIsIHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2V0ID09PSBudWxsKSB7XG4gICAgICAgIHNldCA9IG5ldyBTZXQoKTtcbiAgICAgIH1cblxuICAgICAgc2V0LmFkZCh2YWwpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzZXQgIT09IG51bGwpIHtcbiAgICB2YXIgYlZhbHVlcyA9IGFycmF5RnJvbVNldChiKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBiVmFsdWVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF92YWwgPSBiVmFsdWVzW19pXTsgLy8gV2UgaGF2ZSB0byBjaGVjayBpZiBhIHByaW1pdGl2ZSB2YWx1ZSBpcyBhbHJlYWR5XG4gICAgICAvLyBtYXRjaGluZyBhbmQgb25seSBpZiBpdCdzIG5vdCwgZ28gaHVudGluZyBmb3IgaXQuXG5cbiAgICAgIGlmIChfdHlwZW9mKF92YWwpID09PSAnb2JqZWN0JyAmJiBfdmFsICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghc2V0SGFzRXF1YWxFbGVtZW50KHNldCwgX3ZhbCwgc3RyaWN0LCBtZW1vKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmICFhLmhhcyhfdmFsKSAmJiAhc2V0SGFzRXF1YWxFbGVtZW50KHNldCwgX3ZhbCwgc3RyaWN0LCBtZW1vKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldC5zaXplID09PSAwO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1hcEhhc0VxdWFsRW50cnkoc2V0LCBtYXAsIGtleTEsIGl0ZW0xLCBzdHJpY3QsIG1lbW8pIHtcbiAgLy8gVG8gYmUgYWJsZSB0byBoYW5kbGUgY2FzZXMgbGlrZTpcbiAgLy8gICBNYXAoW1t7fSwgJ2EnXSwgW3t9LCAnYiddXSkgdnMgTWFwKFtbe30sICdiJ10sIFt7fSwgJ2EnXV0pXG4gIC8vIC4uLiB3ZSBuZWVkIHRvIGNvbnNpZGVyICphbGwqIG1hdGNoaW5nIGtleXMsIG5vdCBqdXN0IHRoZSBmaXJzdCB3ZSBmaW5kLlxuICB2YXIgc2V0VmFsdWVzID0gYXJyYXlGcm9tU2V0KHNldCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5MiA9IHNldFZhbHVlc1tpXTtcblxuICAgIGlmIChpbm5lckRlZXBFcXVhbChrZXkxLCBrZXkyLCBzdHJpY3QsIG1lbW8pICYmIGlubmVyRGVlcEVxdWFsKGl0ZW0xLCBtYXAuZ2V0KGtleTIpLCBzdHJpY3QsIG1lbW8pKSB7XG4gICAgICBzZXQuZGVsZXRlKGtleTIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBtYXBFcXVpdihhLCBiLCBzdHJpY3QsIG1lbW8pIHtcbiAgdmFyIHNldCA9IG51bGw7XG4gIHZhciBhRW50cmllcyA9IGFycmF5RnJvbU1hcChhKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFFbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9hRW50cmllcyRpID0gX3NsaWNlZFRvQXJyYXkoYUVudHJpZXNbaV0sIDIpLFxuICAgICAgICBrZXkgPSBfYUVudHJpZXMkaVswXSxcbiAgICAgICAgaXRlbTEgPSBfYUVudHJpZXMkaVsxXTtcblxuICAgIGlmIChfdHlwZW9mKGtleSkgPT09ICdvYmplY3QnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHNldCA9PT0gbnVsbCkge1xuICAgICAgICBzZXQgPSBuZXcgU2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHNldC5hZGQoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQnkgZGlyZWN0bHkgcmV0cmlldmluZyB0aGUgdmFsdWUgd2UgcHJldmVudCBhbm90aGVyIGIuaGFzKGtleSkgY2hlY2sgaW5cbiAgICAgIC8vIGFsbW9zdCBhbGwgcG9zc2libGUgY2FzZXMuXG4gICAgICB2YXIgaXRlbTIgPSBiLmdldChrZXkpO1xuXG4gICAgICBpZiAoaXRlbTIgPT09IHVuZGVmaW5lZCAmJiAhYi5oYXMoa2V5KSB8fCAhaW5uZXJEZWVwRXF1YWwoaXRlbTEsIGl0ZW0yLCBzdHJpY3QsIG1lbW8pKSB7XG4gICAgICAgIGlmIChzdHJpY3QpIHJldHVybiBmYWxzZTsgLy8gRmFzdCBwYXRoIHRvIGRldGVjdCBtaXNzaW5nIHN0cmluZywgc3ltYm9sLCB1bmRlZmluZWQgYW5kIG51bGxcbiAgICAgICAgLy8ga2V5cy5cblxuICAgICAgICBpZiAoIW1hcE1pZ2h0SGF2ZUxvb3NlUHJpbShhLCBiLCBrZXksIGl0ZW0xLCBtZW1vKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChzZXQgPT09IG51bGwpIHtcbiAgICAgICAgICBzZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXQuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHNldCAhPT0gbnVsbCkge1xuICAgIHZhciBiRW50cmllcyA9IGFycmF5RnJvbU1hcChiKTtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGJFbnRyaWVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIHZhciBfYkVudHJpZXMkX2kgPSBfc2xpY2VkVG9BcnJheShiRW50cmllc1tfaTJdLCAyKSxcbiAgICAgICAgICBrZXkgPSBfYkVudHJpZXMkX2lbMF0sXG4gICAgICAgICAgaXRlbSA9IF9iRW50cmllcyRfaVsxXTtcblxuICAgICAgaWYgKF90eXBlb2Yoa2V5KSA9PT0gJ29iamVjdCcgJiYga2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghbWFwSGFzRXF1YWxFbnRyeShzZXQsIGEsIGtleSwgaXRlbSwgc3RyaWN0LCBtZW1vKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmICghYS5oYXMoa2V5KSB8fCAhaW5uZXJEZWVwRXF1YWwoYS5nZXQoa2V5KSwgaXRlbSwgZmFsc2UsIG1lbW8pKSAmJiAhbWFwSGFzRXF1YWxFbnRyeShzZXQsIGEsIGtleSwgaXRlbSwgZmFsc2UsIG1lbW8pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2V0LnNpemUgPT09IDA7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBrZXlzLCBtZW1vcywgaXRlcmF0aW9uVHlwZSkge1xuICAvLyBTZXRzIGFuZCBtYXBzIGRvbid0IGhhdmUgdGhlaXIgZW50cmllcyBhY2Nlc3NpYmxlIHZpYSBub3JtYWwgb2JqZWN0XG4gIC8vIHByb3BlcnRpZXMuXG4gIHZhciBpID0gMDtcblxuICBpZiAoaXRlcmF0aW9uVHlwZSA9PT0ga0lzU2V0KSB7XG4gICAgaWYgKCFzZXRFcXVpdihhLCBiLCBzdHJpY3QsIG1lbW9zKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpdGVyYXRpb25UeXBlID09PSBrSXNNYXApIHtcbiAgICBpZiAoIW1hcEVxdWl2KGEsIGIsIHN0cmljdCwgbWVtb3MpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKGl0ZXJhdGlvblR5cGUgPT09IGtJc0FycmF5KSB7XG4gICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkoYSwgaSkpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShiLCBpKSB8fCAhaW5uZXJEZWVwRXF1YWwoYVtpXSwgYltpXSwgc3RyaWN0LCBtZW1vcykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaGFzT3duUHJvcGVydHkoYiwgaSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQXJyYXkgaXMgc3BhcnNlLlxuICAgICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcblxuICAgICAgICBmb3IgKDsgaSA8IGtleXNBLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNBW2ldO1xuXG4gICAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShiLCBrZXkpIHx8ICFpbm5lckRlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgc3RyaWN0LCBtZW1vcykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiKS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gVGhlIHBhaXIgbXVzdCBoYXZlIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleS5cbiAgLy8gUG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdDpcblxuXG4gIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9rZXkgPSBrZXlzW2ldO1xuXG4gICAgaWYgKCFpbm5lckRlZXBFcXVhbChhW19rZXldLCBiW19rZXldLCBzdHJpY3QsIG1lbW9zKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0RlZXBFcXVhbCh2YWwxLCB2YWwyKSB7XG4gIHJldHVybiBpbm5lckRlZXBFcXVhbCh2YWwxLCB2YWwyLCBrTG9vc2UpO1xufVxuXG5mdW5jdGlvbiBpc0RlZXBTdHJpY3RFcXVhbCh2YWwxLCB2YWwyKSB7XG4gIHJldHVybiBpbm5lckRlZXBFcXVhbCh2YWwxLCB2YWwyLCBrU3RyaWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzRGVlcEVxdWFsOiBpc0RlZXBFcXVhbCxcbiAgaXNEZWVwU3RyaWN0RXF1YWw6IGlzRGVlcFN0cmljdEVxdWFsXG59O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjA1NTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vLyBUaGUgZm9sbG93aW5nIGJyZWFrIGNsYXNzZXMgYXJlIGhhbmRsZWQgYnkgdGhlIHBhaXIgdGFibGVcbmV4cG9ydHMuT1AgPSAwOyAvLyBPcGVuaW5nIHB1bmN0dWF0aW9uXG5cbmV4cG9ydHMuQ0wgPSAxOyAvLyBDbG9zaW5nIHB1bmN0dWF0aW9uXG5cbmV4cG9ydHMuQ1AgPSAyOyAvLyBDbG9zaW5nIHBhcmVudGhlc2lzXG5cbmV4cG9ydHMuUVUgPSAzOyAvLyBBbWJpZ3VvdXMgcXVvdGF0aW9uXG5cbmV4cG9ydHMuR0wgPSA0OyAvLyBHbHVlXG5cbmV4cG9ydHMuTlMgPSA1OyAvLyBOb24tc3RhcnRlcnNcblxuZXhwb3J0cy5FWCA9IDY7IC8vIEV4Y2xhbWF0aW9uL0ludGVycm9nYXRpb25cblxuZXhwb3J0cy5TWSA9IDc7IC8vIFN5bWJvbHMgYWxsb3dpbmcgYnJlYWsgYWZ0ZXJcblxuZXhwb3J0cy5JUyA9IDg7IC8vIEluZml4IHNlcGFyYXRvclxuXG5leHBvcnRzLlBSID0gOTsgLy8gUHJlZml4XG5cbmV4cG9ydHMuUE8gPSAxMDsgLy8gUG9zdGZpeFxuXG5leHBvcnRzLk5VID0gMTE7IC8vIE51bWVyaWNcblxuZXhwb3J0cy5BTCA9IDEyOyAvLyBBbHBoYWJldGljXG5cbmV4cG9ydHMuSEwgPSAxMzsgLy8gSGVicmV3IExldHRlclxuXG5leHBvcnRzLklEID0gMTQ7IC8vIElkZW9ncmFwaGljXG5cbmV4cG9ydHMuSU4gPSAxNTsgLy8gSW5zZXBhcmFibGUgY2hhcmFjdGVyc1xuXG5leHBvcnRzLkhZID0gMTY7IC8vIEh5cGhlblxuXG5leHBvcnRzLkJBID0gMTc7IC8vIEJyZWFrIGFmdGVyXG5cbmV4cG9ydHMuQkIgPSAxODsgLy8gQnJlYWsgYmVmb3JlXG5cbmV4cG9ydHMuQjIgPSAxOTsgLy8gQnJlYWsgb24gZWl0aGVyIHNpZGUgKGJ1dCBub3QgcGFpcilcblxuZXhwb3J0cy5aVyA9IDIwOyAvLyBaZXJvLXdpZHRoIHNwYWNlXG5cbmV4cG9ydHMuQ00gPSAyMTsgLy8gQ29tYmluaW5nIG1hcmtzXG5cbmV4cG9ydHMuV0ogPSAyMjsgLy8gV29yZCBqb2luZXJcblxuZXhwb3J0cy5IMiA9IDIzOyAvLyBIYW5ndWwgTFZcblxuZXhwb3J0cy5IMyA9IDI0OyAvLyBIYW5ndWwgTFZUXG5cbmV4cG9ydHMuSkwgPSAyNTsgLy8gSGFuZ3VsIEwgSmFtb1xuXG5leHBvcnRzLkpWID0gMjY7IC8vIEhhbmd1bCBWIEphbW9cblxuZXhwb3J0cy5KVCA9IDI3OyAvLyBIYW5ndWwgVCBKYW1vXG5cbmV4cG9ydHMuUkkgPSAyODsgLy8gUmVnaW9uYWwgSW5kaWNhdG9yXG5cbmV4cG9ydHMuRUIgPSAyOTsgLy8gRW1vamkgQmFzZVxuXG5leHBvcnRzLkVNID0gMzA7IC8vIEVtb2ppIE1vZGlmaWVyXG5cbmV4cG9ydHMuWldKID0gMzE7IC8vIFplcm8gV2lkdGggSm9pbmVyXG5cbmV4cG9ydHMuQ0IgPSAzMjsgLy8gQ29udGluZ2VudCBicmVha1xuLy8gVGhlIGZvbGxvd2luZyBicmVhayBjbGFzc2VzIGFyZSBub3QgaGFuZGxlZCBieSB0aGUgcGFpciB0YWJsZVxuXG5leHBvcnRzLkFJID0gMzM7IC8vIEFtYmlndW91cyAoQWxwaGFiZXRpYyBvciBJZGVvZ3JhcGgpXG5cbmV4cG9ydHMuQksgPSAzNDsgLy8gQnJlYWsgKG1hbmRhdG9yeSlcblxuZXhwb3J0cy5DSiA9IDM1OyAvLyBDb25kaXRpb25hbCBKYXBhbmVzZSBTdGFydGVyXG5cbmV4cG9ydHMuQ1IgPSAzNjsgLy8gQ2FycmlhZ2UgcmV0dXJuXG5cbmV4cG9ydHMuTEYgPSAzNzsgLy8gTGluZSBmZWVkXG5cbmV4cG9ydHMuTkwgPSAzODsgLy8gTmV4dCBsaW5lXG5cbmV4cG9ydHMuU0EgPSAzOTsgLy8gU291dGgtRWFzdCBBc2lhblxuXG5leHBvcnRzLlNHID0gNDA7IC8vIFN1cnJvZ2F0ZXNcblxuZXhwb3J0cy5TUCA9IDQxOyAvLyBTcGFjZVxuXG5leHBvcnRzLlhYID0gNDI7IC8vIFVua25vd25cblxuLyoqKi8gfSksXG5cbi8qKiovIDgzODM6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIENJX0JSSywgQ1BfQlJLLCBESV9CUkssIElOX0JSSywgUFJfQlJLO1xuZXhwb3J0cy5ESV9CUksgPSBESV9CUksgPSAwOyAvLyBEaXJlY3QgYnJlYWsgb3Bwb3J0dW5pdHlcblxuZXhwb3J0cy5JTl9CUksgPSBJTl9CUksgPSAxOyAvLyBJbmRpcmVjdCBicmVhayBvcHBvcnR1bml0eVxuXG5leHBvcnRzLkNJX0JSSyA9IENJX0JSSyA9IDI7IC8vIEluZGlyZWN0IGJyZWFrIG9wcG9ydHVuaXR5IGZvciBjb21iaW5pbmcgbWFya3NcblxuZXhwb3J0cy5DUF9CUksgPSBDUF9CUksgPSAzOyAvLyBQcm9oaWJpdGVkIGJyZWFrIGZvciBjb21iaW5pbmcgbWFya3NcblxuZXhwb3J0cy5QUl9CUksgPSBQUl9CUksgPSA0OyAvLyBQcm9oaWJpdGVkIGJyZWFrXG4vLyBCYXNlZCBvbiBleGFtcGxlIHBhaXIgdGFibGUgZnJvbSBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMTQvdHIxNC0zNy5odG1sI1RhYmxlMlxuLy8gLSBaV0ogc3BlY2lhbCBwcm9jZXNzaW5nIGZvciBMQjhhIG9mIFJldmlzaW9uIDQxXG4vLyAtIENCIG1hbnVhbGx5IGFkZGVkIGFzIHBlciBSdWxlIExCMjBcbi8vIC0gQ0wsIENQLCBOUywgU1ksIElTLCBQUiwgUE8sIEhZLCBCQSwgQjIgYW5kIFJJIG1hbnVhbGx5IGFkanVzdGVkIGFzIHBlciBMQjIyIG9mIFJldmlzaW9uIDQ1XG5cbmV4cG9ydHMucGFpclRhYmxlID0gWy8vT1AgICAsIENMICAgICwgQ1AgICAgLCBRVSAgICAsIEdMICAgICwgTlMgICAgLCBFWCAgICAsIFNZICAgICwgSVMgICAgLCBQUiAgICAsIFBPICAgICwgTlUgICAgLCBBTCAgICAsIEhMICAgICwgSUQgICAgLCBJTiAgICAsIEhZICAgICwgQkEgICAgLCBCQiAgICAsIEIyICAgICwgWlcgICAgLCBDTSAgICAsIFdKICAgICwgSDIgICAgLCBIMyAgICAsIEpMICAgICwgSlYgICAgLCBKVCAgICAsIFJJICAgICwgRUIgICAgLCBFTSAgICAsIFpXSiAgICwgQ0JcbltQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBDUF9CUkssIFBSX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLXSwgLy8gT1BcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gQ0xcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gQ1BcbltQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLXSwgLy8gUVVcbltJTl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLXSwgLy8gR0xcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gTlNcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gRVhcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgSU5fQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gU1lcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gSVNcbltJTl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIERJX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gUFJcbltJTl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gUE9cbltJTl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gTlVcbltJTl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gQUxcbltJTl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gSExcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gSURcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gSU5cbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIERJX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gSFlcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIERJX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gQkFcbltJTl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gQkJcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIFBSX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gQjJcbltESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLXSwgLy8gWldcbltJTl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gQ01cbltJTl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLXSwgLy8gV0pcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgSU5fQlJLLCBJTl9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gSDJcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gSDNcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gSkxcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgSU5fQlJLLCBJTl9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gSlZcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gSlRcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gUklcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gRUJcbltESV9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gRU1cbltJTl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBQUl9CUkssIFBSX0JSSywgUFJfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBJTl9CUkssIElOX0JSSywgRElfQlJLLCBJTl9CUkssIElOX0JSSywgSU5fQlJLLCBESV9CUkssIERJX0JSSywgUFJfQlJLLCBDSV9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIElOX0JSSywgRElfQlJLXSwgLy8gWldKXG5bRElfQlJLLCBQUl9CUkssIFBSX0JSSywgSU5fQlJLLCBJTl9CUkssIERJX0JSSywgUFJfQlJLLCBQUl9CUkssIFBSX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIFBSX0JSSywgQ0lfQlJLLCBQUl9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBESV9CUkssIERJX0JSSywgRElfQlJLLCBJTl9CUkssIERJX0JSS10gLy8gQ0Jcbl07XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MTA2OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oOTYwMSk7XG5cbmV4cG9ydHMuRW5jb2RlU3RyZWFtID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MTI2KTtcbmV4cG9ydHMuRGVjb2RlU3RyZWFtID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMDMwKTtcbmV4cG9ydHMuQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5ODgpO1xuZXhwb3J0cy5MYXp5QXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY3NjgpO1xuZXhwb3J0cy5CaXRmaWVsZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzQyNSk7XG5leHBvcnRzLkJvb2xlYW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwMjQpO1xuZXhwb3J0cy5CdWZmZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyNTApO1xuZXhwb3J0cy5FbnVtID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMTAwKTtcbmV4cG9ydHMuT3B0aW9uYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1NDEpO1xuZXhwb3J0cy5SZXNlcnZlZCA9IF9fd2VicGFja19yZXF1aXJlX18oNzQ2OCk7XG5leHBvcnRzLlN0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2Nik7XG5leHBvcnRzLlN0cnVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTIxOSk7XG5leHBvcnRzLlZlcnNpb25lZFN0cnVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMzU4NSk7XG5cbnZhciB1dGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNjYxMCk7XG5cbnZhciBOdW1iZXJUID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NDYyKTtcblxudmFyIFBvaW50ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwMTEpO1xuXG5PYmplY3QuYXNzaWduKGV4cG9ydHMsIHV0aWxzLCBOdW1iZXJULCBQb2ludGVyKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE5ODg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MDQyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxNTM5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4MzA5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxMDM4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4NzgzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0OTE2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNTI2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxODE3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMTY1KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2OTkyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzOTQ4KTtcblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShvLCBhbGxvd0FycmF5TGlrZSkgeyB2YXIgaXQgPSB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSB8fCBvW1wiQEBpdGVyYXRvclwiXTsgaWYgKGl0KSByZXR1cm4gKGl0ID0gaXQuY2FsbChvKSkubmV4dC5iaW5kKGl0KTsgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyByZXR1cm4gZnVuY3Rpb24gKCkgeyBpZiAoaSA+PSBvLmxlbmd0aCkgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OyByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG9baSsrXSB9OyB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbnZhciBfcmVxdWlyZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjQ2MiksXG4gICAgTnVtYmVyVCA9IF9yZXF1aXJlLk51bWJlcjtcblxudmFyIHV0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NjEwKTtcblxudmFyIEFycmF5VCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEFycmF5VCh0eXBlLCBsZW5ndGgsIGxlbmd0aFR5cGUpIHtcbiAgICBpZiAobGVuZ3RoVHlwZSA9PT0gdm9pZCAwKSB7XG4gICAgICBsZW5ndGhUeXBlID0gJ2NvdW50JztcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgIHRoaXMubGVuZ3RoVHlwZSA9IGxlbmd0aFR5cGU7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQXJyYXlULnByb3RvdHlwZTtcblxuICBfcHJvdG8uZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSwgcGFyZW50KSB7XG4gICAgdmFyIGxlbmd0aDtcbiAgICB2YXIgcG9zID0gc3RyZWFtLnBvcztcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGN0eCA9IHBhcmVudDtcblxuICAgIGlmICh0aGlzLmxlbmd0aCAhPSBudWxsKSB7XG4gICAgICBsZW5ndGggPSB1dGlscy5yZXNvbHZlTGVuZ3RoKHRoaXMubGVuZ3RoLCBzdHJlYW0sIHBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVuZ3RoIGluc3RhbmNlb2YgTnVtYmVyVCkge1xuICAgICAgLy8gZGVmaW5lIGhpZGRlbiBwcm9wZXJ0aWVzXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhyZXMsIHtcbiAgICAgICAgcGFyZW50OiB7XG4gICAgICAgICAgdmFsdWU6IHBhcmVudFxuICAgICAgICB9LFxuICAgICAgICBfc3RhcnRPZmZzZXQ6IHtcbiAgICAgICAgICB2YWx1ZTogcG9zXG4gICAgICAgIH0sXG4gICAgICAgIF9jdXJyZW50T2Zmc2V0OiB7XG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgX2xlbmd0aDoge1xuICAgICAgICAgIHZhbHVlOiBsZW5ndGhcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjdHggPSByZXM7XG4gICAgfVxuXG4gICAgaWYgKGxlbmd0aCA9PSBudWxsIHx8IHRoaXMubGVuZ3RoVHlwZSA9PT0gJ2J5dGVzJykge1xuICAgICAgdmFyIHRhcmdldCA9IGxlbmd0aCAhPSBudWxsID8gc3RyZWFtLnBvcyArIGxlbmd0aCA6IChwYXJlbnQgIT0gbnVsbCA/IHBhcmVudC5fbGVuZ3RoIDogdW5kZWZpbmVkKSA/IHBhcmVudC5fc3RhcnRPZmZzZXQgKyBwYXJlbnQuX2xlbmd0aCA6IHN0cmVhbS5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChzdHJlYW0ucG9zIDwgdGFyZ2V0KSB7XG4gICAgICAgIHJlcy5wdXNoKHRoaXMudHlwZS5kZWNvZGUoc3RyZWFtLCBjdHgpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGVuZCA9IGxlbmd0aDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgIHJlcy5wdXNoKHRoaXMudHlwZS5kZWNvZGUoc3RyZWFtLCBjdHgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIF9wcm90by5zaXplID0gZnVuY3Rpb24gc2l6ZShhcnJheSwgY3R4KSB7XG4gICAgaWYgKCFhcnJheSkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZS5zaXplKG51bGwsIGN0eCkgKiB1dGlscy5yZXNvbHZlTGVuZ3RoKHRoaXMubGVuZ3RoLCBudWxsLCBjdHgpO1xuICAgIH1cblxuICAgIHZhciBzaXplID0gMDtcblxuICAgIGlmICh0aGlzLmxlbmd0aCBpbnN0YW5jZW9mIE51bWJlclQpIHtcbiAgICAgIHNpemUgKz0gdGhpcy5sZW5ndGguc2l6ZSgpO1xuICAgICAgY3R4ID0ge1xuICAgICAgICBwYXJlbnQ6IGN0eFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKGFycmF5KSwgX3N0ZXA7ICEoX3N0ZXAgPSBfaXRlcmF0b3IoKSkuZG9uZTspIHtcbiAgICAgIHZhciBpdGVtID0gX3N0ZXAudmFsdWU7XG4gICAgICBzaXplICs9IHRoaXMudHlwZS5zaXplKGl0ZW0sIGN0eCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemU7XG4gIH07XG5cbiAgX3Byb3RvLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHJlYW0sIGFycmF5LCBwYXJlbnQpIHtcbiAgICB2YXIgY3R4ID0gcGFyZW50O1xuXG4gICAgaWYgKHRoaXMubGVuZ3RoIGluc3RhbmNlb2YgTnVtYmVyVCkge1xuICAgICAgY3R4ID0ge1xuICAgICAgICBwb2ludGVyczogW10sXG4gICAgICAgIHN0YXJ0T2Zmc2V0OiBzdHJlYW0ucG9zLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudFxuICAgICAgfTtcbiAgICAgIGN0eC5wb2ludGVyT2Zmc2V0ID0gc3RyZWFtLnBvcyArIHRoaXMuc2l6ZShhcnJheSwgY3R4KTtcbiAgICAgIHRoaXMubGVuZ3RoLmVuY29kZShzdHJlYW0sIGFycmF5Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoYXJyYXkpLCBfc3RlcDI7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMigpKS5kb25lOykge1xuICAgICAgdmFyIGl0ZW0gPSBfc3RlcDIudmFsdWU7XG4gICAgICB0aGlzLnR5cGUuZW5jb2RlKHN0cmVhbSwgaXRlbSwgY3R4KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggaW5zdGFuY2VvZiBOdW1iZXJUKSB7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHdoaWxlIChpIDwgY3R4LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgICAgICB2YXIgcHRyID0gY3R4LnBvaW50ZXJzW2krK107XG4gICAgICAgIHB0ci50eXBlLmVuY29kZShzdHJlYW0sIHB0ci52YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQXJyYXlUO1xufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5VDtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM0MjU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMDg3KTtcblxudmFyIEJpdGZpZWxkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQml0ZmllbGQodHlwZSwgZmxhZ3MpIHtcbiAgICBpZiAoZmxhZ3MgPT09IHZvaWQgMCkge1xuICAgICAgZmxhZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBCaXRmaWVsZC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0pIHtcbiAgICB2YXIgdmFsID0gdGhpcy50eXBlLmRlY29kZShzdHJlYW0pO1xuICAgIHZhciByZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mbGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGZsYWcgPSB0aGlzLmZsYWdzW2ldO1xuXG4gICAgICBpZiAoZmxhZyAhPSBudWxsKSB7XG4gICAgICAgIHJlc1tmbGFnXSA9ICEhKHZhbCAmIDEgPDwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBfcHJvdG8uc2l6ZSA9IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZS5zaXplKCk7XG4gIH07XG5cbiAgX3Byb3RvLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHJlYW0sIGtleXMpIHtcbiAgICB2YXIgdmFsID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mbGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGZsYWcgPSB0aGlzLmZsYWdzW2ldO1xuXG4gICAgICBpZiAoZmxhZyAhPSBudWxsKSB7XG4gICAgICAgIGlmIChrZXlzW2ZsYWddKSB7XG4gICAgICAgICAgdmFsIHw9IDEgPDwgaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnR5cGUuZW5jb2RlKHN0cmVhbSwgdmFsKTtcbiAgfTtcblxuICByZXR1cm4gQml0ZmllbGQ7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gQml0ZmllbGQ7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5MDI0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgQm9vbGVhblQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBCb29sZWFuVCh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBCb29sZWFuVC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCkge1xuICAgIHJldHVybiAhIXRoaXMudHlwZS5kZWNvZGUoc3RyZWFtLCBwYXJlbnQpO1xuICB9O1xuXG4gIF9wcm90by5zaXplID0gZnVuY3Rpb24gc2l6ZSh2YWwsIHBhcmVudCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUuc2l6ZSh2YWwsIHBhcmVudCk7XG4gIH07XG5cbiAgX3Byb3RvLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHJlYW0sIHZhbCwgcGFyZW50KSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZS5lbmNvZGUoc3RyZWFtLCArdmFsLCBwYXJlbnQpO1xuICB9O1xuXG4gIHJldHVybiBCb29sZWFuVDtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBCb29sZWFuVDtcblxuLyoqKi8gfSksXG5cbi8qKiovIDUyNTA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIHV0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NjEwKTtcblxudmFyIF9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NDYyKSxcbiAgICBOdW1iZXJUID0gX3JlcXVpcmUuTnVtYmVyO1xuXG52YXIgQnVmZmVyVCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJ1ZmZlclQobGVuZ3RoKSB7XG4gICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQnVmZmVyVC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCkge1xuICAgIHZhciBsZW5ndGggPSB1dGlscy5yZXNvbHZlTGVuZ3RoKHRoaXMubGVuZ3RoLCBzdHJlYW0sIHBhcmVudCk7XG4gICAgcmV0dXJuIHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG4gIH07XG5cbiAgX3Byb3RvLnNpemUgPSBmdW5jdGlvbiBzaXplKHZhbCwgcGFyZW50KSB7XG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIHJldHVybiB1dGlscy5yZXNvbHZlTGVuZ3RoKHRoaXMubGVuZ3RoLCBudWxsLCBwYXJlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWwubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyZWFtLCBidWYsIHBhcmVudCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCBpbnN0YW5jZW9mIE51bWJlclQpIHtcbiAgICAgIHRoaXMubGVuZ3RoLmVuY29kZShzdHJlYW0sIGJ1Zi5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmKTtcbiAgfTtcblxuICByZXR1cm4gQnVmZmVyVDtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJUO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzAzMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIEJ1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oODgyMylbXCJCdWZmZXJcIl07XG5cblxuX193ZWJwYWNrX3JlcXVpcmVfXygxNTM5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5NzE0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MDQyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0OTE2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MzA2KTtcblxudmFyIGljb252O1xuXG50cnkge1xuICBpY29udiA9IF9fd2VicGFja19yZXF1aXJlX18oNDkxNCk7XG59IGNhdGNoIChlcnJvcikge31cblxudmFyIERlY29kZVN0cmVhbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIERlY29kZVN0cmVhbShidWZmZXIpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy5sZW5ndGggPSB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gRGVjb2RlU3RyZWFtLnByb3RvdHlwZTtcblxuICBfcHJvdG8ucmVhZFN0cmluZyA9IGZ1bmN0aW9uIHJlYWRTdHJpbmcobGVuZ3RoLCBlbmNvZGluZykge1xuICAgIGlmIChlbmNvZGluZyA9PT0gdm9pZCAwKSB7XG4gICAgICBlbmNvZGluZyA9ICdhc2NpaSc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIudG9TdHJpbmcoZW5jb2RpbmcsIHRoaXMucG9zLCB0aGlzLnBvcyArPSBsZW5ndGgpO1xuXG4gICAgICBjYXNlICd1dGYxNmJlJzpcbiAgICAgICAgdmFyIGJ1ZiA9IEJ1ZmZlci5mcm9tKHRoaXMucmVhZEJ1ZmZlcihsZW5ndGgpKTsgLy8gc3dhcCB0aGUgYnl0ZXNcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgZW5kID0gYnVmLmxlbmd0aCAtIDE7IGkgPCBlbmQ7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBieXRlID0gYnVmW2ldO1xuICAgICAgICAgIGJ1ZltpXSA9IGJ1ZltpICsgMV07XG4gICAgICAgICAgYnVmW2kgKyAxXSA9IGJ5dGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJyk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJ1ZiA9IHRoaXMucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAgIGlmIChpY29udikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gaWNvbnYuZGVjb2RlKGJ1ZiwgZW5jb2RpbmcpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yMSkge31cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBidWY7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZWFkQnVmZmVyID0gZnVuY3Rpb24gcmVhZEJ1ZmZlcihsZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuc2xpY2UodGhpcy5wb3MsIHRoaXMucG9zICs9IGxlbmd0aCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlYWRVSW50MjRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MjRCRSgpIHtcbiAgICByZXR1cm4gKHRoaXMucmVhZFVJbnQxNkJFKCkgPDwgOCkgKyB0aGlzLnJlYWRVSW50OCgpO1xuICB9O1xuXG4gIF9wcm90by5yZWFkVUludDI0TEUgPSBmdW5jdGlvbiByZWFkVUludDI0TEUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZFVJbnQxNkxFKCkgKyAodGhpcy5yZWFkVUludDgoKSA8PCAxNik7XG4gIH07XG5cbiAgX3Byb3RvLnJlYWRJbnQyNEJFID0gZnVuY3Rpb24gcmVhZEludDI0QkUoKSB7XG4gICAgcmV0dXJuICh0aGlzLnJlYWRJbnQxNkJFKCkgPDwgOCkgKyB0aGlzLnJlYWRVSW50OCgpO1xuICB9O1xuXG4gIF9wcm90by5yZWFkSW50MjRMRSA9IGZ1bmN0aW9uIHJlYWRJbnQyNExFKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRVSW50MTZMRSgpICsgKHRoaXMucmVhZEludDgoKSA8PCAxNik7XG4gIH07XG5cbiAgcmV0dXJuIERlY29kZVN0cmVhbTtcbn0oKTtcblxuRGVjb2RlU3RyZWFtLlRZUEVTID0ge1xuICBVSW50ODogMSxcbiAgVUludDE2OiAyLFxuICBVSW50MjQ6IDMsXG4gIFVJbnQzMjogNCxcbiAgSW50ODogMSxcbiAgSW50MTY6IDIsXG4gIEludDI0OiAzLFxuICBJbnQzMjogNCxcbiAgRmxvYXQ6IDQsXG4gIERvdWJsZTogOFxufTtcblxudmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3Aoa2V5KSB7XG4gIGlmIChrZXkuc2xpY2UoMCwgNCkgPT09ICdyZWFkJykge1xuICAgIHZhciBieXRlcyA9IERlY29kZVN0cmVhbS5UWVBFU1trZXkucmVwbGFjZSgvcmVhZHxbQkxdRS9nLCAnJyldO1xuXG4gICAgRGVjb2RlU3RyZWFtLnByb3RvdHlwZVtrZXldID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJldCA9IHRoaXMuYnVmZmVyW2tleV0odGhpcy5wb3MpO1xuICAgICAgdGhpcy5wb3MgKz0gYnl0ZXM7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH07XG4gIH1cbn07XG5cbmZvciAodmFyIGtleSBpbiBCdWZmZXIucHJvdG90eXBlKSB7XG4gIF9sb29wKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb2RlU3RyZWFtO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTEyNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIEJ1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oODgyMylbXCJCdWZmZXJcIl07XG5cblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MDQyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMjkwKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0OTE2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MzA2KTtcblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7IHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzOyBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbnZhciBpY29udjtcblxudmFyIHN0cmVhbSA9IF9fd2VicGFja19yZXF1aXJlX18oMjgzMCk7XG5cbnZhciBEZWNvZGVTdHJlYW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwMzApO1xuXG50cnkge1xuICBpY29udiA9IF9fd2VicGFja19yZXF1aXJlX18oNDkxNCk7XG59IGNhdGNoIChlcnJvcikge31cblxudmFyIEVuY29kZVN0cmVhbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3N0cmVhbSRSZWFkYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShFbmNvZGVTdHJlYW0sIF9zdHJlYW0kUmVhZGFibGUpO1xuXG4gIGZ1bmN0aW9uIEVuY29kZVN0cmVhbShidWZmZXJTaXplKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKGJ1ZmZlclNpemUgPT09IHZvaWQgMCkge1xuICAgICAgYnVmZmVyU2l6ZSA9IDY1NTM2O1xuICAgIH1cblxuICAgIF90aGlzID0gX3N0cmVhbSRSZWFkYWJsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuYnVmZmVyID0gQnVmZmVyLmFsbG9jKGJ1ZmZlclNpemUpO1xuICAgIF90aGlzLmJ1ZmZlck9mZnNldCA9IDA7XG4gICAgX3RoaXMucG9zID0gMDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH0gLy8gZG8gbm90aGluZywgcmVxdWlyZWQgYnkgbm9kZVxuXG5cbiAgdmFyIF9wcm90byA9IEVuY29kZVN0cmVhbS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLl9yZWFkID0gZnVuY3Rpb24gX3JlYWQoKSB7fTtcblxuICBfcHJvdG8uZW5zdXJlID0gZnVuY3Rpb24gZW5zdXJlKGJ5dGVzKSB7XG4gICAgaWYgKHRoaXMuYnVmZmVyT2Zmc2V0ICsgYnl0ZXMgPiB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZsdXNoKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIGlmICh0aGlzLmJ1ZmZlck9mZnNldCA+IDApIHtcbiAgICAgIHRoaXMucHVzaChCdWZmZXIuZnJvbSh0aGlzLmJ1ZmZlci5zbGljZSgwLCB0aGlzLmJ1ZmZlck9mZnNldCkpKTtcbiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlck9mZnNldCA9IDA7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by53cml0ZUJ1ZmZlciA9IGZ1bmN0aW9uIHdyaXRlQnVmZmVyKGJ1ZmZlcikge1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnB1c2goYnVmZmVyKTtcbiAgICByZXR1cm4gdGhpcy5wb3MgKz0gYnVmZmVyLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8ud3JpdGVTdHJpbmcgPSBmdW5jdGlvbiB3cml0ZVN0cmluZyhzdHJpbmcsIGVuY29kaW5nKSB7XG4gICAgaWYgKGVuY29kaW5nID09PSB2b2lkIDApIHtcbiAgICAgIGVuY29kaW5nID0gJ2FzY2lpJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiB0aGlzLndyaXRlQnVmZmVyKEJ1ZmZlci5mcm9tKHN0cmluZywgZW5jb2RpbmcpKTtcblxuICAgICAgY2FzZSAndXRmMTZiZSc6XG4gICAgICAgIHZhciBidWYgPSBCdWZmZXIuZnJvbShzdHJpbmcsICd1dGYxNmxlJyk7IC8vIHN3YXAgdGhlIGJ5dGVzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGVuZCA9IGJ1Zi5sZW5ndGggLSAxOyBpIDwgZW5kOyBpICs9IDIpIHtcbiAgICAgICAgICB2YXIgYnl0ZSA9IGJ1ZltpXTtcbiAgICAgICAgICBidWZbaV0gPSBidWZbaSArIDFdO1xuICAgICAgICAgIGJ1ZltpICsgMV0gPSBieXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMud3JpdGVCdWZmZXIoYnVmKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGljb252KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JpdGVCdWZmZXIoaWNvbnYuZW5jb2RlKHN0cmluZywgZW5jb2RpbmcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc3RhbGwgaWNvbnYtbGl0ZSB0byBlbmFibGUgYWRkaXRpb25hbCBzdHJpbmcgZW5jb2RpbmdzLicpO1xuICAgICAgICB9XG5cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLndyaXRlVUludDI0QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQyNEJFKHZhbCkge1xuICAgIHRoaXMuZW5zdXJlKDMpO1xuICAgIHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2Zmc2V0KytdID0gdmFsID4+PiAxNiAmIDB4ZmY7XG4gICAgdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZzZXQrK10gPSB2YWwgPj4+IDggJiAweGZmO1xuICAgIHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2Zmc2V0KytdID0gdmFsICYgMHhmZjtcbiAgICByZXR1cm4gdGhpcy5wb3MgKz0gMztcbiAgfTtcblxuICBfcHJvdG8ud3JpdGVVSW50MjRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDI0TEUodmFsKSB7XG4gICAgdGhpcy5lbnN1cmUoMyk7XG4gICAgdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZzZXQrK10gPSB2YWwgJiAweGZmO1xuICAgIHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2Zmc2V0KytdID0gdmFsID4+PiA4ICYgMHhmZjtcbiAgICB0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZnNldCsrXSA9IHZhbCA+Pj4gMTYgJiAweGZmO1xuICAgIHJldHVybiB0aGlzLnBvcyArPSAzO1xuICB9O1xuXG4gIF9wcm90by53cml0ZUludDI0QkUgPSBmdW5jdGlvbiB3cml0ZUludDI0QkUodmFsKSB7XG4gICAgaWYgKHZhbCA+PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy53cml0ZVVJbnQyNEJFKHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLndyaXRlVUludDI0QkUodmFsICsgMHhmZmZmZmYgKyAxKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLndyaXRlSW50MjRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MjRMRSh2YWwpIHtcbiAgICBpZiAodmFsID49IDApIHtcbiAgICAgIHJldHVybiB0aGlzLndyaXRlVUludDI0TEUodmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMud3JpdGVVSW50MjRMRSh2YWwgKyAweGZmZmZmZiArIDEpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZmlsbCA9IGZ1bmN0aW9uIGZpbGwodmFsLCBsZW5ndGgpIHtcbiAgICBpZiAobGVuZ3RoIDwgdGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICB0aGlzLmVuc3VyZShsZW5ndGgpO1xuICAgICAgdGhpcy5idWZmZXIuZmlsbCh2YWwsIHRoaXMuYnVmZmVyT2Zmc2V0LCB0aGlzLmJ1ZmZlck9mZnNldCArIGxlbmd0aCk7XG4gICAgICB0aGlzLmJ1ZmZlck9mZnNldCArPSBsZW5ndGg7XG4gICAgICByZXR1cm4gdGhpcy5wb3MgKz0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKGxlbmd0aCk7XG4gICAgICBidWYuZmlsbCh2YWwpO1xuICAgICAgcmV0dXJuIHRoaXMud3JpdGVCdWZmZXIoYnVmKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmVuZCA9IGZ1bmN0aW9uIGVuZCgpIHtcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgcmV0dXJuIHRoaXMucHVzaChudWxsKTtcbiAgfTtcblxuICByZXR1cm4gRW5jb2RlU3RyZWFtO1xufShzdHJlYW0uUmVhZGFibGUpO1xuXG52YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChrZXkpIHtcbiAgaWYgKGtleS5zbGljZSgwLCA1KSA9PT0gJ3dyaXRlJykge1xuICAgIHZhciBieXRlcyA9ICtEZWNvZGVTdHJlYW0uVFlQRVNba2V5LnJlcGxhY2UoL3dyaXRlfFtCTF1FL2csICcnKV07XG5cbiAgICBFbmNvZGVTdHJlYW0ucHJvdG90eXBlW2tleV0gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRoaXMuZW5zdXJlKGJ5dGVzKTtcbiAgICAgIHRoaXMuYnVmZmVyW2tleV0odmFsdWUsIHRoaXMuYnVmZmVyT2Zmc2V0KTtcbiAgICAgIHRoaXMuYnVmZmVyT2Zmc2V0ICs9IGJ5dGVzO1xuICAgICAgcmV0dXJuIHRoaXMucG9zICs9IGJ5dGVzO1xuICAgIH07XG4gIH1cbn07XG5cbmZvciAodmFyIGtleSBpbiBCdWZmZXIucHJvdG90eXBlKSB7XG4gIF9sb29wKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW5jb2RlU3RyZWFtO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzEwMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIEVudW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFbnVtKHR5cGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gW107XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEVudW0ucHJvdG90eXBlO1xuXG4gIF9wcm90by5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyZWFtKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy50eXBlLmRlY29kZShzdHJlYW0pO1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnNbaW5kZXhdIHx8IGluZGV4O1xuICB9O1xuXG4gIF9wcm90by5zaXplID0gZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlLnNpemUoKTtcbiAgfTtcblxuICBfcHJvdG8uZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0cmVhbSwgdmFsKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5vcHRpb25zLmluZGV4T2YodmFsKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3B0aW9uIGluIGVudW06IFwiICsgdmFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50eXBlLmVuY29kZShzdHJlYW0sIGluZGV4KTtcbiAgfTtcblxuICByZXR1cm4gRW51bTtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBFbnVtO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjc2ODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg2NzQpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTsgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7IF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxudmFyIEFycmF5VCA9IF9fd2VicGFja19yZXF1aXJlX18oMTk4OCk7XG5cbnZhciBfcmVxdWlyZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjQ2MiksXG4gICAgTnVtYmVyVCA9IF9yZXF1aXJlLk51bWJlcjtcblxudmFyIHV0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NjEwKTtcblxudmFyIF9yZXF1aXJlMiA9IF9fd2VicGFja19yZXF1aXJlX18oOTUzOSksXG4gICAgX2luc3BlY3QgPSBfcmVxdWlyZTIuaW5zcGVjdDtcblxudmFyIExhenlBcnJheVQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9BcnJheVQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTGF6eUFycmF5VCwgX0FycmF5VCk7XG5cbiAgZnVuY3Rpb24gTGF6eUFycmF5VCgpIHtcbiAgICByZXR1cm4gX0FycmF5VC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTGF6eUFycmF5VC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCkge1xuICAgIHZhciBwb3MgPSBzdHJlYW0ucG9zO1xuICAgIHZhciBsZW5ndGggPSB1dGlscy5yZXNvbHZlTGVuZ3RoKHRoaXMubGVuZ3RoLCBzdHJlYW0sIHBhcmVudCk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggaW5zdGFuY2VvZiBOdW1iZXJUKSB7XG4gICAgICBwYXJlbnQgPSB7XG4gICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICBfc3RhcnRPZmZzZXQ6IHBvcyxcbiAgICAgICAgX2N1cnJlbnRPZmZzZXQ6IDAsXG4gICAgICAgIF9sZW5ndGg6IGxlbmd0aFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gbmV3IExhenlBcnJheSh0aGlzLnR5cGUsIGxlbmd0aCwgc3RyZWFtLCBwYXJlbnQpO1xuICAgIHN0cmVhbS5wb3MgKz0gbGVuZ3RoICogdGhpcy50eXBlLnNpemUobnVsbCwgcGFyZW50KTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIF9wcm90by5zaXplID0gZnVuY3Rpb24gc2l6ZSh2YWwsIGN0eCkge1xuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBMYXp5QXJyYXkpIHtcbiAgICAgIHZhbCA9IHZhbC50b0FycmF5KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BcnJheVQucHJvdG90eXBlLnNpemUuY2FsbCh0aGlzLCB2YWwsIGN0eCk7XG4gIH07XG5cbiAgX3Byb3RvLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHJlYW0sIHZhbCwgY3R4KSB7XG4gICAgaWYgKHZhbCBpbnN0YW5jZW9mIExhenlBcnJheSkge1xuICAgICAgdmFsID0gdmFsLnRvQXJyYXkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0FycmF5VC5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcywgc3RyZWFtLCB2YWwsIGN0eCk7XG4gIH07XG5cbiAgcmV0dXJuIExhenlBcnJheVQ7XG59KEFycmF5VCk7XG5cbnZhciBMYXp5QXJyYXkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMYXp5QXJyYXkodHlwZSwgbGVuZ3RoLCBzdHJlYW0sIGN0eCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5jdHggPSBjdHg7XG4gICAgdGhpcy5iYXNlID0gdGhpcy5zdHJlYW0ucG9zO1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8yID0gTGF6eUFycmF5LnByb3RvdHlwZTtcblxuICBfcHJvdG8yLmdldCA9IGZ1bmN0aW9uIGdldChpbmRleCkge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXRlbXNbaW5kZXhdID09IG51bGwpIHtcbiAgICAgIHZhciBwb3MgPSB0aGlzLnN0cmVhbS5wb3M7XG4gICAgICB0aGlzLnN0cmVhbS5wb3MgPSB0aGlzLmJhc2UgKyB0aGlzLnR5cGUuc2l6ZShudWxsLCB0aGlzLmN0eCkgKiBpbmRleDtcbiAgICAgIHRoaXMuaXRlbXNbaW5kZXhdID0gdGhpcy50eXBlLmRlY29kZSh0aGlzLnN0cmVhbSwgdGhpcy5jdHgpO1xuICAgICAgdGhpcy5zdHJlYW0ucG9zID0gcG9zO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLml0ZW1zW2luZGV4XTtcbiAgfTtcblxuICBfcHJvdG8yLnRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLmdldChpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8yLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICAgIHJldHVybiBfaW5zcGVjdCh0aGlzLnRvQXJyYXkoKSk7XG4gIH07XG5cbiAgcmV0dXJuIExhenlBcnJheTtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBMYXp5QXJyYXlUO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjQ2Mjpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTsgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7IF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxudmFyIERlY29kZVN0cmVhbSA9IF9fd2VicGFja19yZXF1aXJlX18oMzAzMCk7XG5cbnZhciBOdW1iZXJUID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTnVtYmVyVCh0eXBlLCBlbmRpYW4pIHtcbiAgICBpZiAoZW5kaWFuID09PSB2b2lkIDApIHtcbiAgICAgIGVuZGlhbiA9ICdCRSc7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmVuZGlhbiA9IGVuZGlhbjtcbiAgICB0aGlzLmZuID0gdGhpcy50eXBlO1xuXG4gICAgaWYgKHRoaXMudHlwZVt0aGlzLnR5cGUubGVuZ3RoIC0gMV0gIT09ICc4Jykge1xuICAgICAgdGhpcy5mbiArPSB0aGlzLmVuZGlhbjtcbiAgICB9XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTnVtYmVyVC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNpemUgPSBmdW5jdGlvbiBzaXplKCkge1xuICAgIHJldHVybiBEZWNvZGVTdHJlYW0uVFlQRVNbdGhpcy50eXBlXTtcbiAgfTtcblxuICBfcHJvdG8uZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSkge1xuICAgIHJldHVybiBzdHJlYW1bXCJyZWFkXCIgKyB0aGlzLmZuXSgpO1xuICB9O1xuXG4gIF9wcm90by5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyZWFtLCB2YWwpIHtcbiAgICByZXR1cm4gc3RyZWFtW1wid3JpdGVcIiArIHRoaXMuZm5dKHZhbCk7XG4gIH07XG5cbiAgcmV0dXJuIE51bWJlclQ7XG59KCk7XG5cbmV4cG9ydHMuTnVtYmVyID0gTnVtYmVyVDtcbmV4cG9ydHMudWludDggPSBuZXcgTnVtYmVyVCgnVUludDgnKTtcbmV4cG9ydHMudWludDE2YmUgPSBleHBvcnRzLnVpbnQxNiA9IG5ldyBOdW1iZXJUKCdVSW50MTYnLCAnQkUnKTtcbmV4cG9ydHMudWludDE2bGUgPSBuZXcgTnVtYmVyVCgnVUludDE2JywgJ0xFJyk7XG5leHBvcnRzLnVpbnQyNGJlID0gZXhwb3J0cy51aW50MjQgPSBuZXcgTnVtYmVyVCgnVUludDI0JywgJ0JFJyk7XG5leHBvcnRzLnVpbnQyNGxlID0gbmV3IE51bWJlclQoJ1VJbnQyNCcsICdMRScpO1xuZXhwb3J0cy51aW50MzJiZSA9IGV4cG9ydHMudWludDMyID0gbmV3IE51bWJlclQoJ1VJbnQzMicsICdCRScpO1xuZXhwb3J0cy51aW50MzJsZSA9IG5ldyBOdW1iZXJUKCdVSW50MzInLCAnTEUnKTtcbmV4cG9ydHMuaW50OCA9IG5ldyBOdW1iZXJUKCdJbnQ4Jyk7XG5leHBvcnRzLmludDE2YmUgPSBleHBvcnRzLmludDE2ID0gbmV3IE51bWJlclQoJ0ludDE2JywgJ0JFJyk7XG5leHBvcnRzLmludDE2bGUgPSBuZXcgTnVtYmVyVCgnSW50MTYnLCAnTEUnKTtcbmV4cG9ydHMuaW50MjRiZSA9IGV4cG9ydHMuaW50MjQgPSBuZXcgTnVtYmVyVCgnSW50MjQnLCAnQkUnKTtcbmV4cG9ydHMuaW50MjRsZSA9IG5ldyBOdW1iZXJUKCdJbnQyNCcsICdMRScpO1xuZXhwb3J0cy5pbnQzMmJlID0gZXhwb3J0cy5pbnQzMiA9IG5ldyBOdW1iZXJUKCdJbnQzMicsICdCRScpO1xuZXhwb3J0cy5pbnQzMmxlID0gbmV3IE51bWJlclQoJ0ludDMyJywgJ0xFJyk7XG5leHBvcnRzLmZsb2F0YmUgPSBleHBvcnRzLmZsb2F0ID0gbmV3IE51bWJlclQoJ0Zsb2F0JywgJ0JFJyk7XG5leHBvcnRzLmZsb2F0bGUgPSBuZXcgTnVtYmVyVCgnRmxvYXQnLCAnTEUnKTtcbmV4cG9ydHMuZG91YmxlYmUgPSBleHBvcnRzLmRvdWJsZSA9IG5ldyBOdW1iZXJUKCdEb3VibGUnLCAnQkUnKTtcbmV4cG9ydHMuZG91YmxlbGUgPSBuZXcgTnVtYmVyVCgnRG91YmxlJywgJ0xFJyk7XG5cbnZhciBGaXhlZCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX051bWJlclQpIHtcbiAgX2luaGVyaXRzTG9vc2UoRml4ZWQsIF9OdW1iZXJUKTtcblxuICBmdW5jdGlvbiBGaXhlZChzaXplLCBlbmRpYW4sIGZyYWNCaXRzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKGZyYWNCaXRzID09PSB2b2lkIDApIHtcbiAgICAgIGZyYWNCaXRzID0gc2l6ZSA+PiAxO1xuICAgIH1cblxuICAgIF90aGlzID0gX051bWJlclQuY2FsbCh0aGlzLCBcIkludFwiICsgc2l6ZSwgZW5kaWFuKSB8fCB0aGlzO1xuICAgIF90aGlzLl9wb2ludCA9IDEgPDwgZnJhY0JpdHM7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90bzIgPSBGaXhlZC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyZWFtKSB7XG4gICAgcmV0dXJuIF9OdW1iZXJULnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLCBzdHJlYW0pIC8gdGhpcy5fcG9pbnQ7XG4gIH07XG5cbiAgX3Byb3RvMi5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyZWFtLCB2YWwpIHtcbiAgICByZXR1cm4gX051bWJlclQucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsIHN0cmVhbSwgdmFsICogdGhpcy5fcG9pbnQgfCAwKTtcbiAgfTtcblxuICByZXR1cm4gRml4ZWQ7XG59KE51bWJlclQpO1xuXG5leHBvcnRzLkZpeGVkID0gRml4ZWQ7XG5leHBvcnRzLmZpeGVkMTZiZSA9IGV4cG9ydHMuZml4ZWQxNiA9IG5ldyBGaXhlZCgxNiwgJ0JFJyk7XG5leHBvcnRzLmZpeGVkMTZsZSA9IG5ldyBGaXhlZCgxNiwgJ0xFJyk7XG5leHBvcnRzLmZpeGVkMzJiZSA9IGV4cG9ydHMuZml4ZWQzMiA9IG5ldyBGaXhlZCgzMiwgJ0JFJyk7XG5leHBvcnRzLmZpeGVkMzJsZSA9IG5ldyBGaXhlZCgzMiwgJ0xFJyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5NTQxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgT3B0aW9uYWwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPcHRpb25hbCh0eXBlLCBjb25kaXRpb24pIHtcbiAgICBpZiAoY29uZGl0aW9uID09PSB2b2lkIDApIHtcbiAgICAgIGNvbmRpdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPcHRpb25hbC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCkge1xuICAgIHZhciBjb25kaXRpb24gPSB0aGlzLmNvbmRpdGlvbjtcblxuICAgIGlmICh0eXBlb2YgY29uZGl0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25kaXRpb24gPSBjb25kaXRpb24uY2FsbChwYXJlbnQsIHBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZS5kZWNvZGUoc3RyZWFtLCBwYXJlbnQpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2l6ZSA9IGZ1bmN0aW9uIHNpemUodmFsLCBwYXJlbnQpIHtcbiAgICB2YXIgY29uZGl0aW9uID0gdGhpcy5jb25kaXRpb247XG5cbiAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmNhbGwocGFyZW50LCBwYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUuc2l6ZSh2YWwsIHBhcmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0cmVhbSwgdmFsLCBwYXJlbnQpIHtcbiAgICB2YXIgY29uZGl0aW9uID0gdGhpcy5jb25kaXRpb247XG5cbiAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmNhbGwocGFyZW50LCBwYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUuZW5jb2RlKHN0cmVhbSwgdmFsLCBwYXJlbnQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gT3B0aW9uYWw7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gT3B0aW9uYWw7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4MDExOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciB1dGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNjYxMCk7XG5cbnZhciBQb2ludGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUG9pbnRlcihvZmZzZXRUeXBlLCB0eXBlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMub2Zmc2V0VHlwZSA9IG9mZnNldFR5cGU7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICB0aGlzLnR5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBudWxsKSB7XG4gICAgICB0aGlzLm9wdGlvbnMudHlwZSA9ICdsb2NhbCc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hbGxvd051bGwgPT0gbnVsbCkge1xuICAgICAgdGhpcy5vcHRpb25zLmFsbG93TnVsbCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5udWxsVmFsdWUgPT0gbnVsbCkge1xuICAgICAgdGhpcy5vcHRpb25zLm51bGxWYWx1ZSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYXp5ID09IG51bGwpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5sYXp5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZWxhdGl2ZVRvKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5yZWxhdGl2ZVRvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVsYXRpdmVUbyBvcHRpb24gbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVsYXRpdmVUb0dldHRlciA9IG9wdGlvbnMucmVsYXRpdmVUbztcbiAgICB9XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUG9pbnRlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIGN0eCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgb2Zmc2V0ID0gdGhpcy5vZmZzZXRUeXBlLmRlY29kZShzdHJlYW0sIGN0eCk7IC8vIGhhbmRsZSBOVUxMIHBvaW50ZXJzXG5cbiAgICBpZiAob2Zmc2V0ID09PSB0aGlzLm9wdGlvbnMubnVsbFZhbHVlICYmIHRoaXMub3B0aW9ucy5hbGxvd051bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciByZWxhdGl2ZTtcblxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2xvY2FsJzpcbiAgICAgICAgcmVsYXRpdmUgPSBjdHguX3N0YXJ0T2Zmc2V0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnaW1tZWRpYXRlJzpcbiAgICAgICAgcmVsYXRpdmUgPSBzdHJlYW0ucG9zIC0gdGhpcy5vZmZzZXRUeXBlLnNpemUoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3BhcmVudCc6XG4gICAgICAgIHJlbGF0aXZlID0gY3R4LnBhcmVudC5fc3RhcnRPZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgYyA9IGN0eDtcblxuICAgICAgICB3aGlsZSAoYy5wYXJlbnQpIHtcbiAgICAgICAgICBjID0gYy5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZWxhdGl2ZSA9IGMuX3N0YXJ0T2Zmc2V0IHx8IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZWxhdGl2ZVRvKSB7XG4gICAgICByZWxhdGl2ZSArPSB0aGlzLnJlbGF0aXZlVG9HZXR0ZXIoY3R4KTtcbiAgICB9XG5cbiAgICB2YXIgcHRyID0gb2Zmc2V0ICsgcmVsYXRpdmU7XG5cbiAgICBpZiAodGhpcy50eXBlICE9IG51bGwpIHtcbiAgICAgIHZhciB2YWwgPSBudWxsO1xuXG4gICAgICB2YXIgZGVjb2RlVmFsdWUgPSBmdW5jdGlvbiBkZWNvZGVWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICBzdHJlYW0ucG9zID0gcHRyO1xuICAgICAgICB2YWwgPSBfdGhpcy50eXBlLmRlY29kZShzdHJlYW0sIGN0eCk7XG4gICAgICAgIHN0cmVhbS5wb3MgPSBwb3M7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9OyAvLyBJZiB0aGlzIGlzIGEgbGF6eSBwb2ludGVyLCBkZWZpbmUgYSBnZXR0ZXIgdG8gZGVjb2RlIG9ubHkgd2hlbiBuZWVkZWQuXG4gICAgICAvLyBUaGlzIG9idmlvdXNseSBvbmx5IHdvcmtzIHdoZW4gdGhlIHBvaW50ZXIgaXMgY29udGFpbmVkIGJ5IGEgU3RydWN0LlxuXG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubGF6eSkge1xuICAgICAgICByZXR1cm4gbmV3IHV0aWxzLlByb3BlcnR5RGVzY3JpcHRvcih7XG4gICAgICAgICAgZ2V0OiBkZWNvZGVWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlY29kZVZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwdHI7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zaXplID0gZnVuY3Rpb24gc2l6ZSh2YWwsIGN0eCkge1xuICAgIHZhciBwYXJlbnQgPSBjdHg7XG5cbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy50eXBlKSB7XG4gICAgICBjYXNlICdsb2NhbCc6XG4gICAgICBjYXNlICdpbW1lZGlhdGUnOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncGFyZW50JzpcbiAgICAgICAgY3R4ID0gY3R4LnBhcmVudDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGdsb2JhbFxuICAgICAgICB3aGlsZSAoY3R4LnBhcmVudCkge1xuICAgICAgICAgIGN0eCA9IGN0eC5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgICAgaWYgKCEodmFsIGluc3RhbmNlb2YgVm9pZFBvaW50ZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgYmUgYSBWb2lkUG9pbnRlclwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIF92YWwgPSB2YWw7XG4gICAgICB0eXBlID0gX3ZhbC50eXBlO1xuICAgICAgdmFsID0gdmFsLnZhbHVlO1xuICAgIH1cblxuICAgIGlmICh2YWwgJiYgY3R4KSB7XG4gICAgICBjdHgucG9pbnRlclNpemUgKz0gdHlwZS5zaXplKHZhbCwgcGFyZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vZmZzZXRUeXBlLnNpemUoKTtcbiAgfTtcblxuICBfcHJvdG8uZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0cmVhbSwgdmFsLCBjdHgpIHtcbiAgICB2YXIgcmVsYXRpdmU7XG4gICAgdmFyIHBhcmVudCA9IGN0eDtcblxuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgdGhpcy5vZmZzZXRUeXBlLmVuY29kZShzdHJlYW0sIHRoaXMub3B0aW9ucy5udWxsVmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2xvY2FsJzpcbiAgICAgICAgcmVsYXRpdmUgPSBjdHguc3RhcnRPZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdpbW1lZGlhdGUnOlxuICAgICAgICByZWxhdGl2ZSA9IHN0cmVhbS5wb3MgKyB0aGlzLm9mZnNldFR5cGUuc2l6ZSh2YWwsIHBhcmVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdwYXJlbnQnOlxuICAgICAgICBjdHggPSBjdHgucGFyZW50O1xuICAgICAgICByZWxhdGl2ZSA9IGN0eC5zdGFydE9mZnNldDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGdsb2JhbFxuICAgICAgICByZWxhdGl2ZSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGN0eC5wYXJlbnQpIHtcbiAgICAgICAgICBjdHggPSBjdHgucGFyZW50O1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbGF0aXZlVG8pIHtcbiAgICAgIHJlbGF0aXZlICs9IHRoaXMucmVsYXRpdmVUb0dldHRlcihwYXJlbnQudmFsKTtcbiAgICB9XG5cbiAgICB0aGlzLm9mZnNldFR5cGUuZW5jb2RlKHN0cmVhbSwgY3R4LnBvaW50ZXJPZmZzZXQgLSByZWxhdGl2ZSk7XG4gICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgICBpZiAoISh2YWwgaW5zdGFuY2VvZiBWb2lkUG9pbnRlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBiZSBhIFZvaWRQb2ludGVyXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3ZhbDIgPSB2YWw7XG4gICAgICB0eXBlID0gX3ZhbDIudHlwZTtcbiAgICAgIHZhbCA9IHZhbC52YWx1ZTtcbiAgICB9XG5cbiAgICBjdHgucG9pbnRlcnMucHVzaCh7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgdmFsOiB2YWwsXG4gICAgICBwYXJlbnQ6IHBhcmVudFxuICAgIH0pO1xuICAgIHJldHVybiBjdHgucG9pbnRlck9mZnNldCArPSB0eXBlLnNpemUodmFsLCBwYXJlbnQpO1xuICB9O1xuXG4gIHJldHVybiBQb2ludGVyO1xufSgpOyAvLyBBIHBvaW50ZXIgd2hvc2UgdHlwZSBpcyBkZXRlcm1pbmVkIGF0IGRlY29kZSB0aW1lXG5cblxudmFyIFZvaWRQb2ludGVyID0gZnVuY3Rpb24gVm9pZFBvaW50ZXIodHlwZSwgdmFsdWUpIHtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xufTtcblxuZXhwb3J0cy5Qb2ludGVyID0gUG9pbnRlcjtcbmV4cG9ydHMuVm9pZFBvaW50ZXIgPSBWb2lkUG9pbnRlcjtcblxuLyoqKi8gfSksXG5cbi8qKiovIDc0Njg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMjkwKTtcblxudmFyIHV0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NjEwKTtcblxudmFyIFJlc2VydmVkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVzZXJ2ZWQodHlwZSwgY291bnQpIHtcbiAgICBpZiAoY291bnQgPT09IHZvaWQgMCkge1xuICAgICAgY291bnQgPSAxO1xuICAgIH1cblxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jb3VudCA9IGNvdW50O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJlc2VydmVkLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSwgcGFyZW50KSB7XG4gICAgc3RyZWFtLnBvcyArPSB0aGlzLnNpemUobnVsbCwgcGFyZW50KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIF9wcm90by5zaXplID0gZnVuY3Rpb24gc2l6ZShkYXRhLCBwYXJlbnQpIHtcbiAgICB2YXIgY291bnQgPSB1dGlscy5yZXNvbHZlTGVuZ3RoKHRoaXMuY291bnQsIG51bGwsIHBhcmVudCk7XG4gICAgcmV0dXJuIHRoaXMudHlwZS5zaXplKCkgKiBjb3VudDtcbiAgfTtcblxuICBfcHJvdG8uZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0cmVhbSwgdmFsLCBwYXJlbnQpIHtcbiAgICByZXR1cm4gc3RyZWFtLmZpbGwoMCwgdGhpcy5zaXplKHZhbCwgcGFyZW50KSk7XG4gIH07XG5cbiAgcmV0dXJuIFJlc2VydmVkO1xufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc2VydmVkO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTQ2Njpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIEJ1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oODgyMylbXCJCdWZmZXJcIl07XG5cblxudmFyIF9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NDYyKSxcbiAgICBOdW1iZXJUID0gX3JlcXVpcmUuTnVtYmVyO1xuXG52YXIgdXRpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2MTApO1xuXG52YXIgU3RyaW5nVCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0cmluZ1QobGVuZ3RoLCBlbmNvZGluZykge1xuICAgIGlmIChlbmNvZGluZyA9PT0gdm9pZCAwKSB7XG4gICAgICBlbmNvZGluZyA9ICdhc2NpaSc7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0cmluZ1QucHJvdG90eXBlO1xuXG4gIF9wcm90by5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyZWFtLCBwYXJlbnQpIHtcbiAgICB2YXIgbGVuZ3RoLCBwb3M7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggIT0gbnVsbCkge1xuICAgICAgbGVuZ3RoID0gdXRpbHMucmVzb2x2ZUxlbmd0aCh0aGlzLmxlbmd0aCwgc3RyZWFtLCBwYXJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYnVmZmVyO1xuICAgICAgYnVmZmVyID0gc3RyZWFtLmJ1ZmZlcjtcbiAgICAgIGxlbmd0aCA9IHN0cmVhbS5sZW5ndGg7XG4gICAgICBwb3MgPSBzdHJlYW0ucG9zO1xuXG4gICAgICB3aGlsZSAocG9zIDwgbGVuZ3RoICYmIGJ1ZmZlcltwb3NdICE9PSAweDAwKSB7XG4gICAgICAgICsrcG9zO1xuICAgICAgfVxuXG4gICAgICBsZW5ndGggPSBwb3MgLSBzdHJlYW0ucG9zO1xuICAgIH1cblxuICAgIHZhciBlbmNvZGluZyA9IHRoaXMuZW5jb2Rpbmc7XG5cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nLmNhbGwocGFyZW50LCBwYXJlbnQpIHx8ICdhc2NpaSc7XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZyA9IHN0cmVhbS5yZWFkU3RyaW5nKGxlbmd0aCwgZW5jb2RpbmcpO1xuXG4gICAgaWYgKHRoaXMubGVuZ3RoID09IG51bGwgJiYgc3RyZWFtLnBvcyA8IHN0cmVhbS5sZW5ndGgpIHtcbiAgICAgIHN0cmVhbS5wb3MrKztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xuXG4gIF9wcm90by5zaXplID0gZnVuY3Rpb24gc2l6ZSh2YWwsIHBhcmVudCkge1xuICAgIC8vIFVzZSB0aGUgZGVmaW5lZCB2YWx1ZSBpZiBubyB2YWx1ZSB3YXMgZ2l2ZW5cbiAgICBpZiAoIXZhbCkge1xuICAgICAgcmV0dXJuIHV0aWxzLnJlc29sdmVMZW5ndGgodGhpcy5sZW5ndGgsIG51bGwsIHBhcmVudCk7XG4gICAgfVxuXG4gICAgdmFyIGVuY29kaW5nID0gdGhpcy5lbmNvZGluZztcblxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcuY2FsbChwYXJlbnQgIT0gbnVsbCA/IHBhcmVudC52YWwgOiB1bmRlZmluZWQsIHBhcmVudCAhPSBudWxsID8gcGFyZW50LnZhbCA6IHVuZGVmaW5lZCkgfHwgJ2FzY2lpJztcbiAgICB9XG5cbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1dGYxNmJlJykge1xuICAgICAgZW5jb2RpbmcgPSAndXRmMTZsZSc7XG4gICAgfVxuXG4gICAgdmFyIHNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWwsIGVuY29kaW5nKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCBpbnN0YW5jZW9mIE51bWJlclQpIHtcbiAgICAgIHNpemUgKz0gdGhpcy5sZW5ndGguc2l6ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PSBudWxsKSB7XG4gICAgICBzaXplKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemU7XG4gIH07XG5cbiAgX3Byb3RvLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHJlYW0sIHZhbCwgcGFyZW50KSB7XG4gICAgdmFyIGVuY29kaW5nID0gdGhpcy5lbmNvZGluZztcblxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcuY2FsbChwYXJlbnQgIT0gbnVsbCA/IHBhcmVudC52YWwgOiB1bmRlZmluZWQsIHBhcmVudCAhPSBudWxsID8gcGFyZW50LnZhbCA6IHVuZGVmaW5lZCkgfHwgJ2FzY2lpJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggaW5zdGFuY2VvZiBOdW1iZXJUKSB7XG4gICAgICB0aGlzLmxlbmd0aC5lbmNvZGUoc3RyZWFtLCBCdWZmZXIuYnl0ZUxlbmd0aCh2YWwsIGVuY29kaW5nKSk7XG4gICAgfVxuXG4gICAgc3RyZWFtLndyaXRlU3RyaW5nKHZhbCwgZW5jb2RpbmcpO1xuXG4gICAgaWYgKHRoaXMubGVuZ3RoID09IG51bGwpIHtcbiAgICAgIHJldHVybiBzdHJlYW0ud3JpdGVVSW50OCgweDAwKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN0cmluZ1Q7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nVDtcblxuLyoqKi8gfSksXG5cbi8qKiovIDEyMTk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIHV0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NjEwKTtcblxudmFyIFN0cnVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0cnVjdChmaWVsZHMpIHtcbiAgICBpZiAoZmllbGRzID09PSB2b2lkIDApIHtcbiAgICAgIGZpZWxkcyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0cnVjdC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCwgbGVuZ3RoKSB7XG4gICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7XG4gICAgICBsZW5ndGggPSAwO1xuICAgIH1cblxuICAgIHZhciByZXMgPSB0aGlzLl9zZXR1cChzdHJlYW0sIHBhcmVudCwgbGVuZ3RoKTtcblxuICAgIHRoaXMuX3BhcnNlRmllbGRzKHN0cmVhbSwgcmVzLCB0aGlzLmZpZWxkcyk7XG5cbiAgICBpZiAodGhpcy5wcm9jZXNzICE9IG51bGwpIHtcbiAgICAgIHRoaXMucHJvY2Vzcy5jYWxsKHJlcywgc3RyZWFtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIF9wcm90by5fc2V0dXAgPSBmdW5jdGlvbiBfc2V0dXAoc3RyZWFtLCBwYXJlbnQsIGxlbmd0aCkge1xuICAgIHZhciByZXMgPSB7fTsgLy8gZGVmaW5lIGhpZGRlbiBwcm9wZXJ0aWVzXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhyZXMsIHtcbiAgICAgIHBhcmVudDoge1xuICAgICAgICB2YWx1ZTogcGFyZW50XG4gICAgICB9LFxuICAgICAgX3N0YXJ0T2Zmc2V0OiB7XG4gICAgICAgIHZhbHVlOiBzdHJlYW0ucG9zXG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRPZmZzZXQ6IHtcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgX2xlbmd0aDoge1xuICAgICAgICB2YWx1ZTogbGVuZ3RoXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBfcHJvdG8uX3BhcnNlRmllbGRzID0gZnVuY3Rpb24gX3BhcnNlRmllbGRzKHN0cmVhbSwgcmVzLCBmaWVsZHMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZmllbGRzKSB7XG4gICAgICB2YXIgdmFsO1xuICAgICAgdmFyIHR5cGUgPSBmaWVsZHNba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbCA9IHR5cGUuY2FsbChyZXMsIHJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSB0eXBlLmRlY29kZShzdHJlYW0sIHJlcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgdXRpbHMuUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcywga2V5LCB2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc1trZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlcy5fY3VycmVudE9mZnNldCA9IHN0cmVhbS5wb3MgLSByZXMuX3N0YXJ0T2Zmc2V0O1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2l6ZSA9IGZ1bmN0aW9uIHNpemUodmFsLCBwYXJlbnQsIGluY2x1ZGVQb2ludGVycykge1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgdmFsID0ge307XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVQb2ludGVycyA9PSBudWxsKSB7XG4gICAgICBpbmNsdWRlUG9pbnRlcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBjdHggPSB7XG4gICAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICAgIHZhbDogdmFsLFxuICAgICAgcG9pbnRlclNpemU6IDBcbiAgICB9O1xuICAgIHZhciBzaXplID0gMDtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmZpZWxkcykge1xuICAgICAgdmFyIHR5cGUgPSB0aGlzLmZpZWxkc1trZXldO1xuXG4gICAgICBpZiAodHlwZS5zaXplICE9IG51bGwpIHtcbiAgICAgICAgc2l6ZSArPSB0eXBlLnNpemUodmFsW2tleV0sIGN0eCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVQb2ludGVycykge1xuICAgICAgc2l6ZSArPSBjdHgucG9pbnRlclNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemU7XG4gIH07XG5cbiAgX3Byb3RvLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHJlYW0sIHZhbCwgcGFyZW50KSB7XG4gICAgdmFyIHR5cGU7XG5cbiAgICBpZiAodGhpcy5wcmVFbmNvZGUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5wcmVFbmNvZGUuY2FsbCh2YWwsIHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdmFyIGN0eCA9IHtcbiAgICAgIHBvaW50ZXJzOiBbXSxcbiAgICAgIHN0YXJ0T2Zmc2V0OiBzdHJlYW0ucG9zLFxuICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICB2YWw6IHZhbCxcbiAgICAgIHBvaW50ZXJTaXplOiAwXG4gICAgfTtcbiAgICBjdHgucG9pbnRlck9mZnNldCA9IHN0cmVhbS5wb3MgKyB0aGlzLnNpemUodmFsLCBjdHgsIGZhbHNlKTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmZpZWxkcykge1xuICAgICAgdHlwZSA9IHRoaXMuZmllbGRzW2tleV07XG5cbiAgICAgIGlmICh0eXBlLmVuY29kZSAhPSBudWxsKSB7XG4gICAgICAgIHR5cGUuZW5jb2RlKHN0cmVhbSwgdmFsW2tleV0sIGN0eCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBjdHgucG9pbnRlcnMubGVuZ3RoKSB7XG4gICAgICB2YXIgcHRyID0gY3R4LnBvaW50ZXJzW2krK107XG4gICAgICBwdHIudHlwZS5lbmNvZGUoc3RyZWFtLCBwdHIudmFsLCBwdHIucGFyZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN0cnVjdDtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJ1Y3Q7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNTg1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oMTUzOSk7XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOyBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG52YXIgU3RydWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjE5KTtcblxudmFyIGdldFBhdGggPSBmdW5jdGlvbiBnZXRQYXRoKG9iamVjdCwgcGF0aEFycmF5KSB7XG4gIHJldHVybiBwYXRoQXJyYXkucmVkdWNlKGZ1bmN0aW9uIChwcmV2T2JqLCBrZXkpIHtcbiAgICByZXR1cm4gcHJldk9iaiAmJiBwcmV2T2JqW2tleV07XG4gIH0sIG9iamVjdCk7XG59O1xuXG52YXIgVmVyc2lvbmVkU3RydWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3RydWN0KSB7XG4gIF9pbmhlcml0c0xvb3NlKFZlcnNpb25lZFN0cnVjdCwgX1N0cnVjdCk7XG5cbiAgZnVuY3Rpb24gVmVyc2lvbmVkU3RydWN0KHR5cGUsIHZlcnNpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKHZlcnNpb25zID09PSB2b2lkIDApIHtcbiAgICAgIHZlcnNpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfU3RydWN0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy50eXBlID0gdHlwZTtcbiAgICBfdGhpcy52ZXJzaW9ucyA9IHZlcnNpb25zO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgX3RoaXMudmVyc2lvblBhdGggPSB0eXBlLnNwbGl0KCcuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFZlcnNpb25lZFN0cnVjdC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCwgbGVuZ3RoKSB7XG4gICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7XG4gICAgICBsZW5ndGggPSAwO1xuICAgIH1cblxuICAgIHZhciByZXMgPSB0aGlzLl9zZXR1cChzdHJlYW0sIHBhcmVudCwgbGVuZ3RoKTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzLnZlcnNpb24gPSBnZXRQYXRoKHBhcmVudCwgdGhpcy52ZXJzaW9uUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy52ZXJzaW9uID0gdGhpcy50eXBlLmRlY29kZShzdHJlYW0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZlcnNpb25zLmhlYWRlcikge1xuICAgICAgdGhpcy5fcGFyc2VGaWVsZHMoc3RyZWFtLCByZXMsIHRoaXMudmVyc2lvbnMuaGVhZGVyKTtcbiAgICB9XG5cbiAgICB2YXIgZmllbGRzID0gdGhpcy52ZXJzaW9uc1tyZXMudmVyc2lvbl07XG5cbiAgICBpZiAoZmllbGRzID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gdmVyc2lvbiBcIiArIHJlcy52ZXJzaW9uKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGRzIGluc3RhbmNlb2YgVmVyc2lvbmVkU3RydWN0KSB7XG4gICAgICByZXR1cm4gZmllbGRzLmRlY29kZShzdHJlYW0sIHBhcmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGFyc2VGaWVsZHMoc3RyZWFtLCByZXMsIGZpZWxkcyk7XG5cbiAgICBpZiAodGhpcy5wcm9jZXNzICE9IG51bGwpIHtcbiAgICAgIHRoaXMucHJvY2Vzcy5jYWxsKHJlcywgc3RyZWFtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIF9wcm90by5zaXplID0gZnVuY3Rpb24gc2l6ZSh2YWwsIHBhcmVudCwgaW5jbHVkZVBvaW50ZXJzKSB7XG4gICAgaWYgKGluY2x1ZGVQb2ludGVycyA9PT0gdm9pZCAwKSB7XG4gICAgICBpbmNsdWRlUG9pbnRlcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBrZXksIHR5cGU7XG5cbiAgICBpZiAoIXZhbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYSBmaXhlZCBzaXplJyk7XG4gICAgfVxuXG4gICAgdmFyIGN0eCA9IHtcbiAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgdmFsOiB2YWwsXG4gICAgICBwb2ludGVyU2l6ZTogMFxuICAgIH07XG4gICAgdmFyIHNpemUgPSAwO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBzaXplICs9IHRoaXMudHlwZS5zaXplKHZhbC52ZXJzaW9uLCBjdHgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZlcnNpb25zLmhlYWRlcikge1xuICAgICAgZm9yIChrZXkgaW4gdGhpcy52ZXJzaW9ucy5oZWFkZXIpIHtcbiAgICAgICAgdHlwZSA9IHRoaXMudmVyc2lvbnMuaGVhZGVyW2tleV07XG5cbiAgICAgICAgaWYgKHR5cGUuc2l6ZSAhPSBudWxsKSB7XG4gICAgICAgICAgc2l6ZSArPSB0eXBlLnNpemUodmFsW2tleV0sIGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmllbGRzID0gdGhpcy52ZXJzaW9uc1t2YWwudmVyc2lvbl07XG5cbiAgICBpZiAoZmllbGRzID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gdmVyc2lvbiBcIiArIHZhbC52ZXJzaW9uKTtcbiAgICB9XG5cbiAgICBmb3IgKGtleSBpbiBmaWVsZHMpIHtcbiAgICAgIHR5cGUgPSBmaWVsZHNba2V5XTtcblxuICAgICAgaWYgKHR5cGUuc2l6ZSAhPSBudWxsKSB7XG4gICAgICAgIHNpemUgKz0gdHlwZS5zaXplKHZhbFtrZXldLCBjdHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmNsdWRlUG9pbnRlcnMpIHtcbiAgICAgIHNpemUgKz0gY3R4LnBvaW50ZXJTaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzaXplO1xuICB9O1xuXG4gIF9wcm90by5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyZWFtLCB2YWwsIHBhcmVudCkge1xuICAgIHZhciBrZXksIHR5cGU7XG5cbiAgICBpZiAodGhpcy5wcmVFbmNvZGUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5wcmVFbmNvZGUuY2FsbCh2YWwsIHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdmFyIGN0eCA9IHtcbiAgICAgIHBvaW50ZXJzOiBbXSxcbiAgICAgIHN0YXJ0T2Zmc2V0OiBzdHJlYW0ucG9zLFxuICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICB2YWw6IHZhbCxcbiAgICAgIHBvaW50ZXJTaXplOiAwXG4gICAgfTtcbiAgICBjdHgucG9pbnRlck9mZnNldCA9IHN0cmVhbS5wb3MgKyB0aGlzLnNpemUodmFsLCBjdHgsIGZhbHNlKTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy50eXBlLmVuY29kZShzdHJlYW0sIHZhbC52ZXJzaW9uKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52ZXJzaW9ucy5oZWFkZXIpIHtcbiAgICAgIGZvciAoa2V5IGluIHRoaXMudmVyc2lvbnMuaGVhZGVyKSB7XG4gICAgICAgIHR5cGUgPSB0aGlzLnZlcnNpb25zLmhlYWRlcltrZXldO1xuXG4gICAgICAgIGlmICh0eXBlLmVuY29kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdHlwZS5lbmNvZGUoc3RyZWFtLCB2YWxba2V5XSwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmaWVsZHMgPSB0aGlzLnZlcnNpb25zW3ZhbC52ZXJzaW9uXTtcblxuICAgIGZvciAoa2V5IGluIGZpZWxkcykge1xuICAgICAgdHlwZSA9IGZpZWxkc1trZXldO1xuXG4gICAgICBpZiAodHlwZS5lbmNvZGUgIT0gbnVsbCkge1xuICAgICAgICB0eXBlLmVuY29kZShzdHJlYW0sIHZhbFtrZXldLCBjdHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgY3R4LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgICAgdmFyIHB0ciA9IGN0eC5wb2ludGVyc1tpKytdO1xuICAgICAgcHRyLnR5cGUuZW5jb2RlKHN0cmVhbSwgcHRyLnZhbCwgcHRyLnBhcmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBWZXJzaW9uZWRTdHJ1Y3Q7XG59KFN0cnVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVyc2lvbmVkU3RydWN0O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjYxMDpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgX3JlcXVpcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0NjIpLFxuICAgIE51bWJlclQgPSBfcmVxdWlyZS5OdW1iZXI7XG5cbmV4cG9ydHMucmVzb2x2ZUxlbmd0aCA9IGZ1bmN0aW9uIChsZW5ndGgsIHN0cmVhbSwgcGFyZW50KSB7XG4gIHZhciByZXM7XG5cbiAgaWYgKHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgcmVzID0gbGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBsZW5ndGggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXMgPSBsZW5ndGguY2FsbChwYXJlbnQsIHBhcmVudCk7XG4gIH0gZWxzZSBpZiAocGFyZW50ICYmIHR5cGVvZiBsZW5ndGggPT09ICdzdHJpbmcnKSB7XG4gICAgcmVzID0gcGFyZW50W2xlbmd0aF07XG4gIH0gZWxzZSBpZiAoc3RyZWFtICYmIGxlbmd0aCBpbnN0YW5jZW9mIE51bWJlclQpIHtcbiAgICByZXMgPSBsZW5ndGguZGVjb2RlKHN0cmVhbSk7XG4gIH1cblxuICBpZiAoaXNOYU4ocmVzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGEgZml4ZWQgc2l6ZScpO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbnZhciBQcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBQcm9wZXJ0eURlc2NyaXB0b3Iob3B0cykge1xuICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgdGhpcy5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgdGhpcy5jb25maWd1cmFibGUgPSB0cnVlO1xuXG4gIGZvciAodmFyIGtleSBpbiBvcHRzKSB7XG4gICAgdmFyIHZhbCA9IG9wdHNba2V5XTtcbiAgICB0aGlzW2tleV0gPSB2YWw7XG4gIH1cbn07XG5cbmV4cG9ydHMuUHJvcGVydHlEZXNjcmlwdG9yID0gUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODgyMzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oMjUyNik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMTgxNyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMTUzOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNjk5Mik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjQ3Mik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjk5MCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oODkyNyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzEwNSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAzNSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDM0NSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzE3NCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjg0Nik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDczMSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzIwOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNjMxOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oODg2Nyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzc4OSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzczOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oOTM2OCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDQ4Myk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjA1Nik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzQ2Mik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNjc4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3NDYyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzODI0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MDIxKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyOTc0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MDE2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3ODAzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2NjQ5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2MDc4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMjkwKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MDQyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMjIyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5NzE0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMjEwKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0OTE2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MzA2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2Njk5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMDIzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5NjUzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNzUzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1NDUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDgzMDkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMxNjEpO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTsgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7IF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxudmFyIGJhc2U2NCA9IF9fd2VicGFja19yZXF1aXJlX18oOTc0Mik7XG5cbnZhciBpZWVlNzU0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NDUpO1xuXG52YXIgY3VzdG9tSW5zcGVjdFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbFsnZm9yJ10gPT09ICdmdW5jdGlvbicgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbj8gU3ltYm9sWydmb3InXSgnbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuOiBudWxsO1xuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXI7XG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyO1xuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwO1xudmFyIEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmY7XG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEg7XG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKTtcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcignVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgKyAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nKTtcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgdmFyIHByb3RvID0ge1xuICAgICAgZm9vOiBmdW5jdGlvbiBmb28oKSB7XG4gICAgICAgIHJldHVybiA0MjtcbiAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihhcnIsIHByb3RvKTtcbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ3BhcmVudCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAnb2Zmc2V0Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0O1xuICB9XG59KTtcblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyKGxlbmd0aCkge1xuICBpZiAobGVuZ3RoID4gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBsZW5ndGggKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyk7XG4gIH0gLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcblxuXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKTtcbiAgcmV0dXJuIGJ1Zjtcbn1cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZyk7XG4gIH1cblxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7XG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTI7IC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuZnVuY3Rpb24gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpO1xuICB9XG5cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5Vmlldyh2YWx1ZSk7XG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgKyAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiB2YWx1ZSk7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZSh2YWx1ZSwgQXJyYXlCdWZmZXIpIHx8IHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgKGlzSW5zdGFuY2UodmFsdWUsIFNoYXJlZEFycmF5QnVmZmVyKSB8fCB2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7XG4gIH1cblxuICB2YXIgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpO1xuXG4gIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTtcbiAgfVxuXG4gIHZhciBiID0gZnJvbU9iamVjdCh2YWx1ZSk7XG4gIGlmIChiKSByZXR1cm4gYjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvUHJpbWl0aXZlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgnc3RyaW5nJyksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICsgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgdmFsdWUpO1xufVxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuXG5cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7XG59OyAvLyBOb3RlOiBDaGFuZ2UgcHJvdG90eXBlICphZnRlciogQnVmZmVyLmZyb20gaXMgZGVmaW5lZCB0byB3b3JrYXJvdW5kIENocm9tZSBidWc6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzE0OFxuXG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLCBVaW50OEFycmF5KTtcblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZShzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7XG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIHNpemUgKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKTtcblxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKTtcbiAgfVxuXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKSA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuXG5cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpO1xufTtcblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpO1xuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKTtcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5cblxuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpO1xufTtcbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cblxuXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpO1xufTtcblxuZnVuY3Rpb24gZnJvbVN0cmluZyhzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnO1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwO1xuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aCk7XG4gIHZhciBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZyk7XG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKTtcbiAgfVxuXG4gIHJldHVybiBidWY7XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMDtcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NTtcbiAgfVxuXG4gIHJldHVybiBidWY7XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcoYXJyYXlWaWV3KSB7XG4gIGlmIChpc0luc3RhbmNlKGFycmF5VmlldywgVWludDhBcnJheSkpIHtcbiAgICB2YXIgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5Vmlldyk7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcihjb3B5LmJ1ZmZlciwgY29weS5ieXRlT2Zmc2V0LCBjb3B5LmJ5dGVMZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KTtcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7XG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7XG4gIH1cblxuICB2YXIgYnVmO1xuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSk7XG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH0gLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcblxuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpO1xuICByZXR1cm4gYnVmO1xufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0KG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDA7XG4gICAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW4pO1xuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBidWY7XG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pO1xuICAgIHJldHVybiBidWY7XG4gIH1cblxuICBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopO1xuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja2VkKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArICdzaXplOiAweCcgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgJyBieXRlcycpO1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aCB8IDA7XG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMDtcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aCk7XG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJiBiICE9PSBCdWZmZXIucHJvdG90eXBlOyAvLyBzbyBCdWZmZXIuaXNCdWZmZXIoQnVmZmVyLnByb3RvdHlwZSkgd2lsbCBiZSBmYWxzZVxufTtcblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYSwgVWludDhBcnJheSkpIGEgPSBCdWZmZXIuZnJvbShhLCBhLm9mZnNldCwgYS5ieXRlTGVuZ3RoKTtcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKTtcblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO1xuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwO1xuICB2YXIgeCA9IGEubGVuZ3RoO1xuICB2YXIgeSA9IGIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldO1xuICAgICAgeSA9IGJbaV07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMTtcbiAgaWYgKHkgPCB4KSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59O1xuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7XG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICB9XG5cbiAgdmFyIGk7XG5cbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpO1xuICB2YXIgcG9zID0gMDtcblxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldO1xuXG4gICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHBvcyArIGJ1Zi5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIGJ1ZiA9IEJ1ZmZlci5mcm9tKGJ1Zik7XG4gICAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGJ1ZmZlciwgYnVmLCBwb3MpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpO1xuICAgIH1cblxuICAgIHBvcyArPSBidWYubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aDtcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuICcgKyAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZyk7XG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIG11c3RNYXRjaCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZTtcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMDsgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2U7XG5cbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuO1xuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoO1xuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMjtcblxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMTtcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGg7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkge1xuICAgICAgICAgIHJldHVybiBtdXN0TWF0Y2ggPyAtMSA6IHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoOyAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG5cbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7XG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyhlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZTsgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMDtcbiAgfSAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuXG5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aDtcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfSAvLyBGb3JjZSBjb2VyY2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuXG5cbiAgZW5kID4+Pj0gMDtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4JztcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKTtcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZCk7XG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZCk7XG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZCk7XG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKTtcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWU7XG4gICAgfVxuICB9XG59IC8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuXG5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZTtcblxuZnVuY3Rpb24gc3dhcChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXTtcbiAgYltuXSA9IGJbbV07XG4gIGJbbV0gPSBpO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNigpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoO1xuXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJyk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7XG5cbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKTtcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0KCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7XG5cbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KTtcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNik7XG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpO1xuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKTtcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmc7XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKTtcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDA7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICB2YXIgc3RyID0gJyc7XG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTO1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpO1xuICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnO1xuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+Jztcbn07XG5cbmlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXIucHJvdG90eXBlLmluc3BlY3Q7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpO1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuICcgKyAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHRhcmdldCk7XG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwO1xuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMDtcbiAgfVxuXG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGg7XG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4Jyk7XG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBzdGFydCA+Pj49IDA7XG4gIGVuZCA+Pj49IDA7XG4gIHRoaXNTdGFydCA+Pj49IDA7XG4gIHRoaXNFbmQgPj4+PSAwO1xuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMDtcbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0O1xuICB2YXIgeSA9IGVuZCAtIHN0YXJ0O1xuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSk7XG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKTtcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldO1xuICAgICAgeSA9IHRhcmdldENvcHlbaV07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMTtcbiAgaWYgKHkgPCB4KSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59OyAvLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcblxuXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMTsgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcblxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0O1xuICAgIGJ5dGVPZmZzZXQgPSAwO1xuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmY7XG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwO1xuICB9XG5cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0OyAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuXG4gIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogYnVmZmVyLmxlbmd0aCAtIDE7XG4gIH0gLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcblxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0O1xuXG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTE7ZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDE7XG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMDtlbHNlIHJldHVybiAtMTtcbiAgfSAvLyBOb3JtYWxpemUgdmFsXG5cblxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKTtcbiAgfSAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuXG5cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcik7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGOyAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG5cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFt2YWxdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKTtcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpO1xufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDE7XG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoO1xuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aDtcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHwgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgaW5kZXhTaXplID0gMjtcbiAgICAgIGFyckxlbmd0aCAvPSAyO1xuICAgICAgdmFsTGVuZ3RoIC89IDI7XG4gICAgICBieXRlT2Zmc2V0IC89IDI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaTtcblxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMTtcblxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpO1xuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4O1xuICAgICAgICBmb3VuZEluZGV4ID0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoO1xuXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWU7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSk7XG59O1xuXG5mdW5jdGlvbiBoZXhXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMDtcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXQ7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmc7XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XG5cbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmc7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGg7XG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyO1xuICB9XG5cbiAgdmFyIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNik7XG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpO1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZDtcbiAgfVxuXG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgb2Zmc2V0ID0gMDsgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldDtcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICBvZmZzZXQgPSAwOyAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG5cbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwO1xuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aDtcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0O1xuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmc7XG5cbiAgaWYgKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJyk7XG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4JztcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2U7XG5cbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTtcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7XG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTtcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpO1xuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZCk7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGkgPSBzdGFydDtcblxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV07XG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGw7XG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSBmaXJzdEJ5dGUgPiAweEVGID8gNCA6IGZpcnN0Qnl0ZSA+IDB4REYgPyAzIDogZmlyc3RCeXRlID4gMHhCRiA/IDIgOiAxO1xuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUgPSB2b2lkIDAsXG4gICAgICAgICAgdGhpcmRCeXRlID0gdm9pZCAwLFxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSB2b2lkIDAsXG4gICAgICAgICAgdGVtcENvZGVQb2ludCA9IHZvaWQgMDtcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXTtcblxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IHNlY29uZEJ5dGUgJiAweDNGO1xuXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV07XG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXTtcblxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgdGhpcmRCeXRlICYgMHgzRjtcblxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdO1xuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdO1xuXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgZm91cnRoQnl0ZSAmIDB4M0Y7XG5cbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRDtcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxO1xuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDA7XG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApO1xuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkY7XG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KTtcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2U7XG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcyk7XG59IC8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxuXG5cbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMDtcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5KGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoO1xuXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpOyAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH0gLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuXG5cbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkpO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZShidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnO1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpO1xuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3Rik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZShidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnO1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpO1xuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aDtcbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMDtcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlbjtcbiAgdmFyIG91dCA9ICcnO1xuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IGhleFNsaWNlTG9va3VwVGFibGVbYnVmW2ldXTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZShidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB2YXIgcmVzID0gJyc7IC8vIElmIGJ5dGVzLmxlbmd0aCBpcyBvZGQsIHRoZSBsYXN0IDggYml0cyBtdXN0IGJlIGlnbm9yZWQgKHNhbWUgYXMgbm9kZS5qcylcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aDtcbiAgc3RhcnQgPSB+fnN0YXJ0O1xuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW47XG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwO1xuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW47XG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW47XG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDA7XG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuO1xuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydDtcbiAgdmFyIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCk7IC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG5cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld0J1ZiwgQnVmZmVyLnByb3RvdHlwZSk7XG4gIHJldHVybiBuZXdCdWY7XG59O1xuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5cblxuZnVuY3Rpb24gY2hlY2tPZmZzZXQob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAob2Zmc2V0ICUgMSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50Jyk7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJyk7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRMRSA9IEJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwO1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKTtcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XTtcbiAgdmFyIG11bCA9IDE7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRCRSA9IEJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwO1xuXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKTtcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF07XG4gIHZhciBtdWwgPSAxO1xuXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWw7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPSBCdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aCk7XG4gIHJldHVybiB0aGlzW29mZnNldF07XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZMRSA9IEJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTtcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgODtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQxNkJFID0gQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpO1xuICByZXR1cm4gdGhpc1tvZmZzZXRdIDw8IDggfCB0aGlzW29mZnNldCArIDFdO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyTEUgPSBCdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRShvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7XG4gIHJldHVybiAodGhpc1tvZmZzZXRdIHwgdGhpc1tvZmZzZXQgKyAxXSA8PCA4IHwgdGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgKyB0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPSBCdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRShvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7XG4gIHJldHVybiB0aGlzW29mZnNldF0gKiAweDEwMDAwMDAgKyAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNiB8IHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCB8IHRoaXNbb2Zmc2V0ICsgM10pO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ1VJbnQ2NExFKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpO1xuICB2YXIgZmlyc3QgPSB0aGlzW29mZnNldF07XG4gIHZhciBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XTtcblxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7XG4gIH1cblxuICB2YXIgbG8gPSBmaXJzdCArIHRoaXNbKytvZmZzZXRdICogTWF0aC5wb3coMiwgOCkgKyB0aGlzWysrb2Zmc2V0XSAqIE1hdGgucG93KDIsIDE2KSArIHRoaXNbKytvZmZzZXRdICogTWF0aC5wb3coMiwgMjQpO1xuICB2YXIgaGkgPSB0aGlzWysrb2Zmc2V0XSArIHRoaXNbKytvZmZzZXRdICogTWF0aC5wb3coMiwgOCkgKyB0aGlzWysrb2Zmc2V0XSAqIE1hdGgucG93KDIsIDE2KSArIGxhc3QgKiBNYXRoLnBvdygyLCAyNCk7XG4gIHJldHVybiBCaWdJbnQobG8pICsgKEJpZ0ludChoaSkgPDwgQmlnSW50KDMyKSk7XG59KTtcbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdVSW50NjRCRShvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKTtcbiAgdmFyIGZpcnN0ID0gdGhpc1tvZmZzZXRdO1xuICB2YXIgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107XG5cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpO1xuICB9XG5cbiAgdmFyIGhpID0gZmlyc3QgKiBNYXRoLnBvdygyLCAyNCkgKyB0aGlzWysrb2Zmc2V0XSAqIE1hdGgucG93KDIsIDE2KSArIHRoaXNbKytvZmZzZXRdICogTWF0aC5wb3coMiwgOCkgKyB0aGlzWysrb2Zmc2V0XTtcbiAgdmFyIGxvID0gdGhpc1srK29mZnNldF0gKiBNYXRoLnBvdygyLCAyNCkgKyB0aGlzWysrb2Zmc2V0XSAqIE1hdGgucG93KDIsIDE2KSArIHRoaXNbKytvZmZzZXRdICogTWF0aC5wb3coMiwgOCkgKyBsYXN0O1xuICByZXR1cm4gKEJpZ0ludChoaSkgPDwgQmlnSW50KDMyKSkgKyBCaWdJbnQobG8pO1xufSk7XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aCk7XG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF07XG4gIHZhciBtdWwgPSAxO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bDtcbiAgfVxuXG4gIG11bCAqPSAweDgwO1xuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKTtcbiAgcmV0dXJuIHZhbDtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aCk7XG4gIHZhciBpID0gYnl0ZUxlbmd0aDtcbiAgdmFyIG11bCA9IDE7XG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV07XG5cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bDtcbiAgfVxuXG4gIG11bCAqPSAweDgwO1xuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKTtcbiAgcmV0dXJuIHZhbDtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aCk7XG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gdGhpc1tvZmZzZXRdO1xuICByZXR1cm4gKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKTtcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8IHRoaXNbb2Zmc2V0ICsgMV0gPDwgODtcbiAgcmV0dXJuIHZhbCAmIDB4ODAwMCA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWw7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpO1xuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8IHRoaXNbb2Zmc2V0XSA8PCA4O1xuICByZXR1cm4gdmFsICYgMHg4MDAwID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbDtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRShvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7XG4gIHJldHVybiB0aGlzW29mZnNldF0gfCB0aGlzW29mZnNldCArIDFdIDw8IDggfCB0aGlzW29mZnNldCArIDJdIDw8IDE2IHwgdGhpc1tvZmZzZXQgKyAzXSA8PCAyNDtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRShvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7XG4gIHJldHVybiB0aGlzW29mZnNldF0gPDwgMjQgfCB0aGlzW29mZnNldCArIDFdIDw8IDE2IHwgdGhpc1tvZmZzZXQgKyAyXSA8PCA4IHwgdGhpc1tvZmZzZXQgKyAzXTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0TEUob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0Jyk7XG4gIHZhciBmaXJzdCA9IHRoaXNbb2Zmc2V0XTtcbiAgdmFyIGxhc3QgPSB0aGlzW29mZnNldCArIDddO1xuXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KTtcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDRdICsgdGhpc1tvZmZzZXQgKyA1XSAqIE1hdGgucG93KDIsIDgpICsgdGhpc1tvZmZzZXQgKyA2XSAqIE1hdGgucG93KDIsIDE2KSArIChsYXN0IDw8IDI0KTsgLy8gT3ZlcmZsb3dcblxuICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KGZpcnN0ICsgdGhpc1srK29mZnNldF0gKiBNYXRoLnBvdygyLCA4KSArIHRoaXNbKytvZmZzZXRdICogTWF0aC5wb3coMiwgMTYpICsgdGhpc1srK29mZnNldF0gKiBNYXRoLnBvdygyLCAyNCkpO1xufSk7XG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdJbnQ2NEJFKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpO1xuICB2YXIgZmlyc3QgPSB0aGlzW29mZnNldF07XG4gIHZhciBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XTtcblxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7XG4gIH1cblxuICB2YXIgdmFsID0gKGZpcnN0IDw8IDI0KSArIC8vIE92ZXJmbG93XG4gIHRoaXNbKytvZmZzZXRdICogTWF0aC5wb3coMiwgMTYpICsgdGhpc1srK29mZnNldF0gKiBNYXRoLnBvdygyLCA4KSArIHRoaXNbKytvZmZzZXRdO1xuICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KHRoaXNbKytvZmZzZXRdICogTWF0aC5wb3coMiwgMjQpICsgdGhpc1srK29mZnNldF0gKiBNYXRoLnBvdygyLCAxNikgKyB0aGlzWysrb2Zmc2V0XSAqIE1hdGgucG93KDIsIDgpICsgbGFzdCk7XG59KTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKTtcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRShvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aCk7XG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpO1xuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpO1xuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KTtcbn07XG5cbmZ1bmN0aW9uIGNoZWNrSW50KGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKTtcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnRMRSA9IEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMDtcblxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMTtcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMCk7XG4gIH1cblxuICB2YXIgbXVsID0gMTtcbiAgdmFyIGkgPSAwO1xuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkY7XG5cbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgLyBtdWwgJiAweEZGO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGg7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID0gQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwO1xuXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxO1xuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKTtcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDE7XG4gIHZhciBtdWwgPSAxO1xuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGO1xuXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAvIG11bCAmIDB4RkY7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aDtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50OCA9IEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDgodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMCk7XG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhmZjtcbiAgcmV0dXJuIG9mZnNldCArIDE7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2TEUgPSBCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMCk7XG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhmZjtcbiAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4O1xuICByZXR1cm4gb2Zmc2V0ICsgMjtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9IEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKTtcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgPj4+IDg7XG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSAmIDB4ZmY7XG4gIHJldHVybiBvZmZzZXQgKyAyO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID0gQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKTtcbiAgdGhpc1tvZmZzZXQgKyAzXSA9IHZhbHVlID4+PiAyNDtcbiAgdGhpc1tvZmZzZXQgKyAyXSA9IHZhbHVlID4+PiAxNjtcbiAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4O1xuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4ZmY7XG4gIHJldHVybiBvZmZzZXQgKyA0O1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID0gQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKTtcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgPj4+IDI0O1xuICB0aGlzW29mZnNldCArIDFdID0gdmFsdWUgPj4+IDE2O1xuICB0aGlzW29mZnNldCArIDJdID0gdmFsdWUgPj4+IDg7XG4gIHRoaXNbb2Zmc2V0ICsgM10gPSB2YWx1ZSAmIDB4ZmY7XG4gIHJldHVybiBvZmZzZXQgKyA0O1xufTtcblxuZnVuY3Rpb24gd3J0QmlnVUludDY0TEUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkge1xuICBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDcpO1xuICB2YXIgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoMHhmZmZmZmZmZikpO1xuICBidWZbb2Zmc2V0KytdID0gbG87XG4gIGxvID0gbG8gPj4gODtcbiAgYnVmW29mZnNldCsrXSA9IGxvO1xuICBsbyA9IGxvID4+IDg7XG4gIGJ1ZltvZmZzZXQrK10gPSBsbztcbiAgbG8gPSBsbyA+PiA4O1xuICBidWZbb2Zmc2V0KytdID0gbG87XG4gIHZhciBoaSA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDB4ZmZmZmZmZmYpKTtcbiAgYnVmW29mZnNldCsrXSA9IGhpO1xuICBoaSA9IGhpID4+IDg7XG4gIGJ1ZltvZmZzZXQrK10gPSBoaTtcbiAgaGkgPSBoaSA+PiA4O1xuICBidWZbb2Zmc2V0KytdID0gaGk7XG4gIGhpID0gaGkgPj4gODtcbiAgYnVmW29mZnNldCsrXSA9IGhpO1xuICByZXR1cm4gb2Zmc2V0O1xufVxuXG5mdW5jdGlvbiB3cnRCaWdVSW50NjRCRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNyk7XG4gIHZhciBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCgweGZmZmZmZmZmKSk7XG4gIGJ1ZltvZmZzZXQgKyA3XSA9IGxvO1xuICBsbyA9IGxvID4+IDg7XG4gIGJ1ZltvZmZzZXQgKyA2XSA9IGxvO1xuICBsbyA9IGxvID4+IDg7XG4gIGJ1ZltvZmZzZXQgKyA1XSA9IGxvO1xuICBsbyA9IGxvID4+IDg7XG4gIGJ1ZltvZmZzZXQgKyA0XSA9IGxvO1xuICB2YXIgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCgweGZmZmZmZmZmKSk7XG4gIGJ1ZltvZmZzZXQgKyAzXSA9IGhpO1xuICBoaSA9IGhpID4+IDg7XG4gIGJ1ZltvZmZzZXQgKyAyXSA9IGhpO1xuICBoaSA9IGhpID4+IDg7XG4gIGJ1ZltvZmZzZXQgKyAxXSA9IGhpO1xuICBoaSA9IGhpID4+IDg7XG4gIGJ1ZltvZmZzZXRdID0gaGk7XG4gIHJldHVybiBvZmZzZXQgKyA4O1xufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHZvaWQgMCkge1xuICAgIG9mZnNldCA9IDA7XG4gIH1cblxuICByZXR1cm4gd3J0QmlnVUludDY0TEUodGhpcywgdmFsdWUsIG9mZnNldCwgQmlnSW50KDApLCBCaWdJbnQoJzB4ZmZmZmZmZmZmZmZmZmZmZicpKTtcbn0pO1xuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnVUludDY0QkUodmFsdWUsIG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHtcbiAgICBvZmZzZXQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCcweGZmZmZmZmZmZmZmZmZmZmYnKSk7XG59KTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpO1xuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KTtcbiAgfVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIG11bCA9IDE7XG4gIHZhciBzdWIgPSAwO1xuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkY7XG5cbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMTtcbiAgICB9XG5cbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsID4+IDApIC0gc3ViICYgMHhGRjtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpO1xuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KTtcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDE7XG4gIHZhciBtdWwgPSAxO1xuICB2YXIgc3ViID0gMDtcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRjtcblxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMTtcbiAgICB9XG5cbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsID4+IDApIC0gc3ViICYgMHhGRjtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDgodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApO1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDE7XG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhmZjtcbiAgcmV0dXJuIG9mZnNldCArIDE7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApO1xuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4ZmY7XG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gODtcbiAgcmV0dXJuIG9mZnNldCArIDI7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApO1xuICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gODtcbiAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlICYgMHhmZjtcbiAgcmV0dXJuIG9mZnNldCArIDI7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCk7XG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhmZjtcbiAgdGhpc1tvZmZzZXQgKyAxXSA9IHZhbHVlID4+PiA4O1xuICB0aGlzW29mZnNldCArIDJdID0gdmFsdWUgPj4+IDE2O1xuICB0aGlzW29mZnNldCArIDNdID0gdmFsdWUgPj4+IDI0O1xuICByZXR1cm4gb2Zmc2V0ICsgNDtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKTtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxO1xuICB0aGlzW29mZnNldF0gPSB2YWx1ZSA+Pj4gMjQ7XG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+Pj4gMTY7XG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+Pj4gODtcbiAgdGhpc1tvZmZzZXQgKyAzXSA9IHZhbHVlICYgMHhmZjtcbiAgcmV0dXJuIG9mZnNldCArIDQ7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ0ludDY0TEUodmFsdWUsIG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHtcbiAgICBvZmZzZXQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoJzB4ODAwMDAwMDAwMDAwMDAwMCcpLCBCaWdJbnQoJzB4N2ZmZmZmZmZmZmZmZmZmZicpKTtcbn0pO1xuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NEJFKHZhbHVlLCBvZmZzZXQpIHtcbiAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKSB7XG4gICAgb2Zmc2V0ID0gMDtcbiAgfVxuXG4gIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCcweDgwMDAwMDAwMDAwMDAwMDAnKSwgQmlnSW50KCcweDdmZmZmZmZmZmZmZmZmZmYnKSk7XG59KTtcblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpO1xuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpO1xufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOCk7XG4gIH1cblxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNCk7XG4gIHJldHVybiBvZmZzZXQgKyA0O1xufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydCk7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpO1xufTtcblxuZnVuY3Rpb24gd3JpdGVEb3VibGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7XG5cbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpO1xuICB9XG5cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpO1xuICByZXR1cm4gb2Zmc2V0ICsgODtcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KTtcbn07IC8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcblxuXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5KHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJyk7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMDtcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aDtcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aDtcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwO1xuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnQ7IC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMDtcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwOyAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG5cbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJyk7XG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJyk7XG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKTsgLy8gQXJlIHdlIG9vYj9cblxuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoO1xuXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0O1xuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0O1xuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKTtcbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0YXJnZXQsIHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCksIHRhcmdldFN0YXJ0KTtcbiAgfVxuXG4gIHJldHVybiBsZW47XG59OyAvLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcblxuXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnQ7XG4gICAgICBzdGFydCA9IDA7XG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZDtcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICAgIH1cblxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApO1xuXG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBjb2RlIDwgMTI4IHx8IGVuY29kaW5nID09PSAnbGF0aW4xJykge1xuICAgICAgICAvLyBGYXN0IHBhdGg6IElmIGB2YWxgIGZpdHMgaW50byBhIHNpbmdsZSBieXRlLCB1c2UgdGhhdCBudW1lcmljIHZhbHVlLlxuICAgICAgICB2YWwgPSBjb2RlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKTtcbiAgfSAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cblxuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKTtcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDA7XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDA7XG4gIGlmICghdmFsKSB2YWwgPSAwO1xuICB2YXIgaTtcblxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKSA/IHZhbCA6IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpO1xuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICsgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07IC8vIENVU1RPTSBFUlJPUlNcbi8vID09PT09PT09PT09PT1cbi8vIFNpbXBsaWZpZWQgdmVyc2lvbnMgZnJvbSBOb2RlLCBjaGFuZ2VkIGZvciBCdWZmZXItb25seSB1c2FnZVxuXG5cbnZhciBlcnJvcnMgPSB7fTtcblxuZnVuY3Rpb24gRShzeW0sIGdldE1lc3NhZ2UsIEJhc2UpIHtcbiAgZXJyb3JzW3N5bV0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9CYXNlKSB7XG4gICAgX2luaGVyaXRzTG9vc2UoTm9kZUVycm9yLCBfQmFzZSk7XG5cbiAgICBmdW5jdGlvbiBOb2RlRXJyb3IoKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX0Jhc2UuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCAnbWVzc2FnZScsIHtcbiAgICAgICAgdmFsdWU6IGdldE1lc3NhZ2UuYXBwbHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIGFyZ3VtZW50cyksXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pOyAvLyBBZGQgdGhlIGVycm9yIGNvZGUgdG8gdGhlIG5hbWUgdG8gaW5jbHVkZSBpdCBpbiB0aGUgc3RhY2sgdHJhY2UuXG5cbiAgICAgIF90aGlzLm5hbWUgPSBfdGhpcy5uYW1lICsgXCIgW1wiICsgc3ltICsgXCJdXCI7IC8vIEFjY2VzcyB0aGUgc3RhY2sgdG8gZ2VuZXJhdGUgdGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBlcnJvciBjb2RlXG4gICAgICAvLyBmcm9tIHRoZSBuYW1lLlxuXG4gICAgICBfdGhpcy5zdGFjazsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgIC8vIFJlc2V0IHRoZSBuYW1lIHRvIHRoZSBhY3R1YWwgbmFtZS5cblxuICAgICAgZGVsZXRlIF90aGlzLm5hbWU7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgdmFyIF9wcm90byA9IE5vZGVFcnJvci5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8udG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIiBbXCIgKyBzeW0gKyBcIl06IFwiICsgdGhpcy5tZXNzYWdlO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoTm9kZUVycm9yLCBbe1xuICAgICAga2V5OiBcImNvZGVcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gc3ltO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29kZScsIHtcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIE5vZGVFcnJvcjtcbiAgfShCYXNlKTtcbn1cblxuRSgnRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZSArIFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc1wiO1xuICB9XG5cbiAgcmV0dXJuICdBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzJztcbn0sIFJhbmdlRXJyb3IpO1xuRSgnRVJSX0lOVkFMSURfQVJHX1RZUEUnLCBmdW5jdGlvbiAobmFtZSwgYWN0dWFsKSB7XG4gIHJldHVybiBcIlRoZSBcXFwiXCIgKyBuYW1lICsgXCJcXFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgXCIgKyB0eXBlb2YgYWN0dWFsO1xufSwgVHlwZUVycm9yKTtcbkUoJ0VSUl9PVVRfT0ZfUkFOR0UnLCBmdW5jdGlvbiAoc3RyLCByYW5nZSwgaW5wdXQpIHtcbiAgdmFyIG1zZyA9IFwiVGhlIHZhbHVlIG9mIFxcXCJcIiArIHN0ciArIFwiXFxcIiBpcyBvdXQgb2YgcmFuZ2UuXCI7XG4gIHZhciByZWNlaXZlZCA9IGlucHV0O1xuXG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGlucHV0KSAmJiBNYXRoLmFicyhpbnB1dCkgPiBNYXRoLnBvdygyLCAzMikpIHtcbiAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihTdHJpbmcoaW5wdXQpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdiaWdpbnQnKSB7XG4gICAgcmVjZWl2ZWQgPSBTdHJpbmcoaW5wdXQpO1xuXG4gICAgaWYgKGlucHV0ID4gTWF0aC5wb3coQmlnSW50KDIpLCBCaWdJbnQoMzIpKSB8fCBpbnB1dCA8IC1NYXRoLnBvdyhCaWdJbnQoMiksIEJpZ0ludCgzMikpKSB7XG4gICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihyZWNlaXZlZCk7XG4gICAgfVxuXG4gICAgcmVjZWl2ZWQgKz0gJ24nO1xuICB9XG5cbiAgbXNnICs9IFwiIEl0IG11c3QgYmUgXCIgKyByYW5nZSArIFwiLiBSZWNlaXZlZCBcIiArIHJlY2VpdmVkO1xuICByZXR1cm4gbXNnO1xufSwgUmFuZ2VFcnJvcik7XG5cbmZ1bmN0aW9uIGFkZE51bWVyaWNhbFNlcGFyYXRvcih2YWwpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgaSA9IHZhbC5sZW5ndGg7XG4gIHZhciBzdGFydCA9IHZhbFswXSA9PT0gJy0nID8gMSA6IDA7XG5cbiAgZm9yICg7IGkgPj0gc3RhcnQgKyA0OyBpIC09IDMpIHtcbiAgICByZXMgPSBcIl9cIiArIHZhbC5zbGljZShpIC0gMywgaSkgKyByZXM7XG4gIH1cblxuICByZXR1cm4gXCJcIiArIHZhbC5zbGljZSgwLCBpKSArIHJlcztcbn0gLy8gQ0hFQ0sgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT1cblxuXG5mdW5jdGlvbiBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKTtcblxuICBpZiAoYnVmW29mZnNldF0gPT09IHVuZGVmaW5lZCB8fCBidWZbb2Zmc2V0ICsgYnl0ZUxlbmd0aF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIChieXRlTGVuZ3RoICsgMSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHtcbiAgICB2YXIgbiA9IHR5cGVvZiBtaW4gPT09ICdiaWdpbnQnID8gJ24nIDogJyc7XG4gICAgdmFyIHJhbmdlO1xuXG4gICAgaWYgKGJ5dGVMZW5ndGggPiAzKSB7XG4gICAgICBpZiAobWluID09PSAwIHx8IG1pbiA9PT0gQmlnSW50KDApKSB7XG4gICAgICAgIHJhbmdlID0gXCI+PSAwXCIgKyBuICsgXCIgYW5kIDwgMlwiICsgbiArIFwiICoqIFwiICsgKGJ5dGVMZW5ndGggKyAxKSAqIDggKyBuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmFuZ2UgPSBcIj49IC0oMlwiICsgbiArIFwiICoqIFwiICsgKChieXRlTGVuZ3RoICsgMSkgKiA4IC0gMSkgKyBuICsgXCIpIGFuZCA8IDIgKiogXCIgKyAoXCJcIiArICgoYnl0ZUxlbmd0aCArIDEpICogOCAtIDEpICsgbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlID0gXCI+PSBcIiArIG1pbiArIG4gKyBcIiBhbmQgPD0gXCIgKyBtYXggKyBuO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSgndmFsdWUnLCByYW5nZSwgdmFsdWUpO1xuICB9XG5cbiAgY2hlY2tCb3VuZHMoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ251bWJlcicsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBib3VuZHNFcnJvcih2YWx1ZSwgbGVuZ3RoLCB0eXBlKSB7XG4gIGlmIChNYXRoLmZsb29yKHZhbHVlKSAhPT0gdmFsdWUpIHtcbiAgICB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgdHlwZSk7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgJ29mZnNldCcsICdhbiBpbnRlZ2VyJywgdmFsdWUpO1xuICB9XG5cbiAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUygpO1xuICB9XG5cbiAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgJ29mZnNldCcsIFwiPj0gXCIgKyAodHlwZSA/IDEgOiAwKSArIFwiIGFuZCA8PSBcIiArIGxlbmd0aCwgdmFsdWUpO1xufSAvLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZztcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4oc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF07IC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuXG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpOyAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG5cbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJyc7IC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuXG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9JztcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eTtcbiAgdmFyIGNvZGVQb2ludDtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbDtcbiAgdmFyIGJ5dGVzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpOyAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG5cbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyB2YWxpZCBsZWFkXG5cblxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gMiBsZWFkcyBpbiBhIHJvd1xuXG5cbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpO1xuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcblxuXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpO1xuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsOyAvLyBlbmNvZGUgdXRmOFxuXG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVhaztcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KTtcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWs7XG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCA+PiAweDYgfCAweEMwLCBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MCk7XG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWs7XG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCA+PiAweEMgfCAweEUwLCBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwKTtcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWs7XG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCwgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLCBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyhzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKTtcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXk7XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsbztcbiAgdmFyIGJ5dGVBcnJheSA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrO1xuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICBoaSA9IGMgPj4gODtcbiAgICBsbyA9IGMgJSAyNTY7XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pO1xuICAgIGJ5dGVBcnJheS5wdXNoKGhpKTtcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXk7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSk7XG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHZhciBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmIChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGggfHwgaSA+PSBzcmMubGVuZ3RoKSBicmVhaztcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV07XG4gIH1cblxuICByZXR1cm4gaTtcbn0gLy8gQXJyYXlCdWZmZXIgb3IgVWludDhBcnJheSBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMgKGkuZS4gaWZyYW1lcykgZG8gbm90IHBhc3Ncbi8vIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2sgYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb2YgdGhhdCB0eXBlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5cblxuZnVuY3Rpb24gaXNJbnN0YW5jZShvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHwgb2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lO1xufVxuXG5mdW5jdGlvbiBudW1iZXJJc05hTihvYmopIHtcbiAgLy8gRm9yIElFMTEgc3VwcG9ydFxuICByZXR1cm4gb2JqICE9PSBvYmo7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59IC8vIENyZWF0ZSBsb29rdXAgdGFibGUgZm9yIGB0b1N0cmluZygnaGV4JylgXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8yMTlcblxuXG52YXIgaGV4U2xpY2VMb29rdXBUYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFscGhhYmV0ID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoMjU2KTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICB2YXIgaTE2ID0gaSAqIDE2O1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICB0YWJsZVtpMTYgKyBqXSA9IGFscGhhYmV0W2ldICsgYWxwaGFiZXRbal07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhYmxlO1xufSgpOyAvLyBSZXR1cm4gbm90IGZ1bmN0aW9uIHdpdGggRXJyb3IgaWYgQmlnSW50IG5vdCBzdXBwb3J0ZWRcblxuXG5mdW5jdGlvbiBkZWZpbmVCaWdJbnRNZXRob2QoZm4pIHtcbiAgcmV0dXJuIHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCA6IGZuO1xufVxuXG5mdW5jdGlvbiBCdWZmZXJCaWdJbnROb3REZWZpbmVkKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0JpZ0ludCBub3Qgc3VwcG9ydGVkJyk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyA0Nzc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3ODAzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxNTM5KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXR5cGVkLWFycmF5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBBcnJheUJ1ZmZlciAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgRGF0YVZpZXcgIT0gJ3VuZGVmaW5lZCc7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMDk0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NzcpO1xuXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3ODEpO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcblxudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxNCk7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcblxudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5Nyk7XG5cbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NDgpO1xuXG52YXIgdHJ5VG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzMzApO1xuXG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODgwKTtcblxudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIwKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKF9fd2VicGFja19yZXF1aXJlX18oMzA3MCkuZik7XG5cbnZhciBpc1Byb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTc2KTtcblxudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NTE4KTtcblxudmFyIHNldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Njc0KTtcblxudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNTExMik7XG5cbnZhciB1aWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3MTEpO1xuXG52YXIgSW50OEFycmF5ID0gZ2xvYmFsLkludDhBcnJheTtcbnZhciBJbnQ4QXJyYXlQcm90b3R5cGUgPSBJbnQ4QXJyYXkgJiYgSW50OEFycmF5LnByb3RvdHlwZTtcbnZhciBVaW50OENsYW1wZWRBcnJheSA9IGdsb2JhbC5VaW50OENsYW1wZWRBcnJheTtcbnZhciBVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSA9IFVpbnQ4Q2xhbXBlZEFycmF5ICYmIFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZTtcbnZhciBUeXBlZEFycmF5ID0gSW50OEFycmF5ICYmIGdldFByb3RvdHlwZU9mKEludDhBcnJheSk7XG52YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IEludDhBcnJheVByb3RvdHlwZSAmJiBnZXRQcm90b3R5cGVPZihJbnQ4QXJyYXlQcm90b3R5cGUpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIFRZUEVEX0FSUkFZX1RBRyA9IHVpZCgnVFlQRURfQVJSQVlfVEFHJyk7XG52YXIgVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IgPSB1aWQoJ1RZUEVEX0FSUkFZX0NPTlNUUlVDVE9SJyk7IC8vIEZpeGluZyBuYXRpdmUgdHlwZWQgYXJyYXlzIGluIE9wZXJhIFByZXN0byBjcmFzaGVzIHRoZSBicm93c2VyLCBzZWUgIzU5NVxuXG52YXIgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyA9IE5BVElWRV9BUlJBWV9CVUZGRVIgJiYgISFzZXRQcm90b3R5cGVPZiAmJiBjbGFzc29mKGdsb2JhbC5vcGVyYSkgIT09ICdPcGVyYSc7XG52YXIgVFlQRURfQVJSQVlfVEFHX1JFUUlSRUQgPSBmYWxzZTtcbnZhciBOQU1FLCBDb25zdHJ1Y3RvciwgUHJvdG90eXBlO1xudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0ID0ge1xuICBJbnQ4QXJyYXk6IDEsXG4gIFVpbnQ4QXJyYXk6IDEsXG4gIFVpbnQ4Q2xhbXBlZEFycmF5OiAxLFxuICBJbnQxNkFycmF5OiAyLFxuICBVaW50MTZBcnJheTogMixcbiAgSW50MzJBcnJheTogNCxcbiAgVWludDMyQXJyYXk6IDQsXG4gIEZsb2F0MzJBcnJheTogNCxcbiAgRmxvYXQ2NEFycmF5OiA4XG59O1xudmFyIEJpZ0ludEFycmF5Q29uc3RydWN0b3JzTGlzdCA9IHtcbiAgQmlnSW50NjRBcnJheTogOCxcbiAgQmlnVWludDY0QXJyYXk6IDhcbn07XG5cbnZhciBpc1ZpZXcgPSBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgdmFyIGtsYXNzID0gY2xhc3NvZihpdCk7XG4gIHJldHVybiBrbGFzcyA9PT0gJ0RhdGFWaWV3JyB8fCBoYXNPd24oVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QsIGtsYXNzKSB8fCBoYXNPd24oQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0LCBrbGFzcyk7XG59O1xuXG52YXIgaXNUeXBlZEFycmF5ID0gZnVuY3Rpb24gaXNUeXBlZEFycmF5KGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIHZhciBrbGFzcyA9IGNsYXNzb2YoaXQpO1xuICByZXR1cm4gaGFzT3duKFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0LCBrbGFzcykgfHwgaGFzT3duKEJpZ0ludEFycmF5Q29uc3RydWN0b3JzTGlzdCwga2xhc3MpO1xufTtcblxudmFyIGFUeXBlZEFycmF5ID0gZnVuY3Rpb24gYVR5cGVkQXJyYXkoaXQpIHtcbiAgaWYgKGlzVHlwZWRBcnJheShpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgVHlwZUVycm9yKCdUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXknKTtcbn07XG5cbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihDKSB7XG4gIGlmIChpc0NhbGxhYmxlKEMpICYmICghc2V0UHJvdG90eXBlT2YgfHwgaXNQcm90b3R5cGVPZihUeXBlZEFycmF5LCBDKSkpIHJldHVybiBDO1xuICB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoQykgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yJyk7XG59O1xuXG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IGZ1bmN0aW9uIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QoS0VZLCBwcm9wZXJ0eSwgZm9yY2VkKSB7XG4gIGlmICghREVTQ1JJUFRPUlMpIHJldHVybjtcbiAgaWYgKGZvcmNlZCkgZm9yICh2YXIgQVJSQVkgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIHtcbiAgICB2YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZ2xvYmFsW0FSUkFZXTtcbiAgICBpZiAoVHlwZWRBcnJheUNvbnN0cnVjdG9yICYmIGhhc093bihUeXBlZEFycmF5Q29uc3RydWN0b3IucHJvdG90eXBlLCBLRVkpKSB0cnkge1xuICAgICAgZGVsZXRlIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGVbS0VZXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLyogZW1wdHkgKi9cbiAgICB9XG4gIH1cblxuICBpZiAoIVR5cGVkQXJyYXlQcm90b3R5cGVbS0VZXSB8fCBmb3JjZWQpIHtcbiAgICByZWRlZmluZShUeXBlZEFycmF5UHJvdG90eXBlLCBLRVksIGZvcmNlZCA/IHByb3BlcnR5IDogTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBJbnQ4QXJyYXlQcm90b3R5cGVbS0VZXSB8fCBwcm9wZXJ0eSk7XG4gIH1cbn07XG5cbnZhciBleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kID0gZnVuY3Rpb24gZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZChLRVksIHByb3BlcnR5LCBmb3JjZWQpIHtcbiAgdmFyIEFSUkFZLCBUeXBlZEFycmF5Q29uc3RydWN0b3I7XG4gIGlmICghREVTQ1JJUFRPUlMpIHJldHVybjtcblxuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICBpZiAoZm9yY2VkKSBmb3IgKEFSUkFZIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBnbG9iYWxbQVJSQVldO1xuICAgICAgaWYgKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciAmJiBoYXNPd24oVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBLRVkpKSB0cnkge1xuICAgICAgICBkZWxldGUgVHlwZWRBcnJheUNvbnN0cnVjdG9yW0tFWV07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghVHlwZWRBcnJheVtLRVldIHx8IGZvcmNlZCkge1xuICAgICAgLy8gVjggfiBDaHJvbWUgNDktNTAgYCVUeXBlZEFycmF5JWAgbWV0aG9kcyBhcmUgbm9uLXdyaXRhYmxlIG5vbi1jb25maWd1cmFibGVcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZWRlZmluZShUeXBlZEFycmF5LCBLRVksIGZvcmNlZCA/IHByb3BlcnR5IDogTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBUeXBlZEFycmF5W0tFWV0gfHwgcHJvcGVydHkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLyogZW1wdHkgKi9cbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChBUlJBWSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGdsb2JhbFtBUlJBWV07XG5cbiAgICBpZiAoVHlwZWRBcnJheUNvbnN0cnVjdG9yICYmICghVHlwZWRBcnJheUNvbnN0cnVjdG9yW0tFWV0gfHwgZm9yY2VkKSkge1xuICAgICAgcmVkZWZpbmUoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBLRVksIHByb3BlcnR5KTtcbiAgICB9XG4gIH1cbn07XG5cbmZvciAoTkFNRSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICBDb25zdHJ1Y3RvciA9IGdsb2JhbFtOQU1FXTtcbiAgUHJvdG90eXBlID0gQ29uc3RydWN0b3IgJiYgQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICBpZiAoUHJvdG90eXBlKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUiwgQ29uc3RydWN0b3IpO2Vsc2UgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyA9IGZhbHNlO1xufVxuXG5mb3IgKE5BTUUgaW4gQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gIENvbnN0cnVjdG9yID0gZ2xvYmFsW05BTUVdO1xuICBQcm90b3R5cGUgPSBDb25zdHJ1Y3RvciAmJiBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIGlmIChQcm90b3R5cGUpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShQcm90b3R5cGUsIFRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SLCBDb25zdHJ1Y3Rvcik7XG59IC8vIFdlYktpdCBidWcgLSB0eXBlZCBhcnJheXMgY29uc3RydWN0b3JzIHByb3RvdHlwZSBpcyBPYmplY3QucHJvdG90eXBlXG5cblxuaWYgKCFOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTIHx8ICFpc0NhbGxhYmxlKFR5cGVkQXJyYXkpIHx8IFR5cGVkQXJyYXkgPT09IEZ1bmN0aW9uLnByb3RvdHlwZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93IC0tIHNhZmVcbiAgVHlwZWRBcnJheSA9IGZ1bmN0aW9uIFR5cGVkQXJyYXkoKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xuICB9O1xuXG4gIGlmIChOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTKSBmb3IgKE5BTUUgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIHtcbiAgICBpZiAoZ2xvYmFsW05BTUVdKSBzZXRQcm90b3R5cGVPZihnbG9iYWxbTkFNRV0sIFR5cGVkQXJyYXkpO1xuICB9XG59XG5cbmlmICghTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB8fCAhVHlwZWRBcnJheVByb3RvdHlwZSB8fCBUeXBlZEFycmF5UHJvdG90eXBlID09PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkucHJvdG90eXBlO1xuICBpZiAoTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUykgZm9yIChOQU1FIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgaWYgKGdsb2JhbFtOQU1FXSkgc2V0UHJvdG90eXBlT2YoZ2xvYmFsW05BTUVdLnByb3RvdHlwZSwgVHlwZWRBcnJheVByb3RvdHlwZSk7XG4gIH1cbn0gLy8gV2ViS2l0IGJ1ZyAtIG9uZSBtb3JlIG9iamVjdCBpbiBVaW50OENsYW1wZWRBcnJheSBwcm90b3R5cGUgY2hhaW5cblxuXG5pZiAoTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBnZXRQcm90b3R5cGVPZihVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSkgIT09IFR5cGVkQXJyYXlQcm90b3R5cGUpIHtcbiAgc2V0UHJvdG90eXBlT2YoVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUsIFR5cGVkQXJyYXlQcm90b3R5cGUpO1xufVxuXG5pZiAoREVTQ1JJUFRPUlMgJiYgIWhhc093bihUeXBlZEFycmF5UHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkge1xuICBUWVBFRF9BUlJBWV9UQUdfUkVRSVJFRCA9IHRydWU7XG4gIGRlZmluZVByb3BlcnR5KFR5cGVkQXJyYXlQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzKSA/IHRoaXNbVFlQRURfQVJSQVlfVEFHXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0pO1xuXG4gIGZvciAoTkFNRSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICAgIGlmIChnbG9iYWxbTkFNRV0pIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxbTkFNRV0sIFRZUEVEX0FSUkFZX1RBRywgTkFNRSk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTOiBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTLFxuICBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUjogVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IsXG4gIFRZUEVEX0FSUkFZX1RBRzogVFlQRURfQVJSQVlfVEFHX1JFUUlSRUQgJiYgVFlQRURfQVJSQVlfVEFHLFxuICBhVHlwZWRBcnJheTogYVR5cGVkQXJyYXksXG4gIGFUeXBlZEFycmF5Q29uc3RydWN0b3I6IGFUeXBlZEFycmF5Q29uc3RydWN0b3IsXG4gIGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6IGV4cG9ydFR5cGVkQXJyYXlNZXRob2QsXG4gIGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6IGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QsXG4gIGlzVmlldzogaXNWaWV3LFxuICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSxcbiAgVHlwZWRBcnJheTogVHlwZWRBcnJheSxcbiAgVHlwZWRBcnJheVByb3RvdHlwZTogVHlwZWRBcnJheVByb3RvdHlwZVxufTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDIwOTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4MzA5KTtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG5cbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG5cbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4MSk7XG5cbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NzcpO1xuXG52YXIgRnVuY3Rpb25OYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NTMwKTtcblxudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oODg4MCk7XG5cbnZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjI0OCk7XG5cbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG5cbnZhciBhbkluc3RhbmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nzg3KTtcblxudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzMDMpO1xuXG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0NjYpO1xuXG52YXIgdG9JbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oNzA2Nyk7XG5cbnZhciBJRUVFNzU0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTc5KTtcblxudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NTE4KTtcblxudmFyIHNldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Njc0KTtcblxudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg4MDA2KS5mKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKF9fd2VicGFja19yZXF1aXJlX18oMzA3MCkuZik7XG5cbnZhciBhcnJheUZpbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyODUpO1xuXG52YXIgYXJyYXlTbGljZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA2KTtcblxudmFyIHNldFRvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MDAzKTtcblxudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk5MDkpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCc7XG52YXIgTmF0aXZlQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkQXJyYXlCdWZmZXIgPSBOYXRpdmVBcnJheUJ1ZmZlcjtcbnZhciBBcnJheUJ1ZmZlclByb3RvdHlwZSA9ICRBcnJheUJ1ZmZlciAmJiAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBEYXRhVmlld1Byb3RvdHlwZSA9ICREYXRhVmlldyAmJiAkRGF0YVZpZXdbUFJPVE9UWVBFXTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIEFycmF5ID0gZ2xvYmFsLkFycmF5O1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBmaWxsID0gdW5jdXJyeVRoaXMoYXJyYXlGaWxsKTtcbnZhciByZXZlcnNlID0gdW5jdXJyeVRoaXMoW10ucmV2ZXJzZSk7XG52YXIgcGFja0lFRUU3NTQgPSBJRUVFNzU0LnBhY2s7XG52YXIgdW5wYWNrSUVFRTc1NCA9IElFRUU3NTQudW5wYWNrO1xuXG52YXIgcGFja0ludDggPSBmdW5jdGlvbiBwYWNrSW50OChudW1iZXIpIHtcbiAgcmV0dXJuIFtudW1iZXIgJiAweEZGXTtcbn07XG5cbnZhciBwYWNrSW50MTYgPSBmdW5jdGlvbiBwYWNrSW50MTYobnVtYmVyKSB7XG4gIHJldHVybiBbbnVtYmVyICYgMHhGRiwgbnVtYmVyID4+IDggJiAweEZGXTtcbn07XG5cbnZhciBwYWNrSW50MzIgPSBmdW5jdGlvbiBwYWNrSW50MzIobnVtYmVyKSB7XG4gIHJldHVybiBbbnVtYmVyICYgMHhGRiwgbnVtYmVyID4+IDggJiAweEZGLCBudW1iZXIgPj4gMTYgJiAweEZGLCBudW1iZXIgPj4gMjQgJiAweEZGXTtcbn07XG5cbnZhciB1bnBhY2tJbnQzMiA9IGZ1bmN0aW9uIHVucGFja0ludDMyKGJ1ZmZlcikge1xuICByZXR1cm4gYnVmZmVyWzNdIDw8IDI0IHwgYnVmZmVyWzJdIDw8IDE2IHwgYnVmZmVyWzFdIDw8IDggfCBidWZmZXJbMF07XG59O1xuXG52YXIgcGFja0Zsb2F0MzIgPSBmdW5jdGlvbiBwYWNrRmxvYXQzMihudW1iZXIpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KG51bWJlciwgMjMsIDQpO1xufTtcblxudmFyIHBhY2tGbG9hdDY0ID0gZnVuY3Rpb24gcGFja0Zsb2F0NjQobnVtYmVyKSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChudW1iZXIsIDUyLCA4KTtcbn07XG5cbnZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiBhZGRHZXR0ZXIoQ29uc3RydWN0b3IsIGtleSkge1xuICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvcltQUk9UT1RZUEVdLCBrZXksIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpW2tleV07XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBnZXQgPSBmdW5jdGlvbiBnZXQodmlldywgY291bnQsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KGluZGV4KTtcbiAgdmFyIHN0b3JlID0gZ2V0SW50ZXJuYWxTdGF0ZSh2aWV3KTtcbiAgaWYgKGludEluZGV4ICsgY291bnQgPiBzdG9yZS5ieXRlTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIGJ5dGVzID0gZ2V0SW50ZXJuYWxTdGF0ZShzdG9yZS5idWZmZXIpLmJ5dGVzO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHN0b3JlLmJ5dGVPZmZzZXQ7XG4gIHZhciBwYWNrID0gYXJyYXlTbGljZShieXRlcywgc3RhcnQsIHN0YXJ0ICsgY291bnQpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcmV2ZXJzZShwYWNrKTtcbn07XG5cbnZhciBzZXQgPSBmdW5jdGlvbiBzZXQodmlldywgY291bnQsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChpbmRleCk7XG4gIHZhciBzdG9yZSA9IGdldEludGVybmFsU3RhdGUodmlldyk7XG4gIGlmIChpbnRJbmRleCArIGNvdW50ID4gc3RvcmUuYnl0ZUxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBieXRlcyA9IGdldEludGVybmFsU3RhdGUoc3RvcmUuYnVmZmVyKS5ieXRlcztcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyBzdG9yZS5ieXRlT2Zmc2V0O1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBieXRlc1tzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBjb3VudCAtIGkgLSAxXTtcbiAgfVxufTtcblxuaWYgKCFOQVRJVkVfQVJSQVlfQlVGRkVSKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgQXJyYXlCdWZmZXJQcm90b3R5cGUpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgYnl0ZXM6IGZpbGwoQXJyYXkoYnl0ZUxlbmd0aCksIDApLFxuICAgICAgYnl0ZUxlbmd0aDogYnl0ZUxlbmd0aFxuICAgIH0pO1xuICAgIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgQXJyYXlCdWZmZXJQcm90b3R5cGUgPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIERhdGFWaWV3UHJvdG90eXBlKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgQXJyYXlCdWZmZXJQcm90b3R5cGUpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBnZXRJbnRlcm5hbFN0YXRlKGJ1ZmZlcikuYnl0ZUxlbmd0aDtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyT3JJbmZpbml0eShieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCcpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICBieXRlTGVuZ3RoOiBieXRlTGVuZ3RoLFxuICAgICAgYnl0ZU9mZnNldDogb2Zmc2V0XG4gICAgfSk7XG5cbiAgICBpZiAoIURFU0NSSVBUT1JTKSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7XG4gICAgICB0aGlzLmJ5dGVPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICB9O1xuXG4gIERhdGFWaWV3UHJvdG90eXBlID0gJERhdGFWaWV3W1BST1RPVFlQRV07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgJ2J5dGVMZW5ndGgnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCAnYnVmZmVyJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgJ2J5dGVMZW5ndGgnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCAnYnl0ZU9mZnNldCcpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoRGF0YVZpZXdQcm90b3R5cGUsIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0XG4gICAgLyogLCBsaXR0bGVFbmRpYW4gKi9cbiAgICApIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0XG4gICAgLyogLCBsaXR0bGVFbmRpYW4gKi9cbiAgICApIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXRcbiAgICAvKiAsIGxpdHRsZUVuZGlhbiAqL1xuICAgICkge1xuICAgICAgcmV0dXJuIHVucGFja0ludDMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldFxuICAgIC8qICwgbGl0dGxlRW5kaWFuICovXG4gICAgKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSW50MzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXRcbiAgICAvKiAsIGxpdHRsZUVuZGlhbiAqL1xuICAgICkge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSwgMjMpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0XG4gICAgLyogLCBsaXR0bGVFbmRpYW4gKi9cbiAgICApIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCksIDUyKTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSW50OCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0ludDgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZVxuICAgIC8qICwgbGl0dGxlRW5kaWFuICovXG4gICAgKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0ludDE2LCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWVcbiAgICAvKiAsIGxpdHRsZUVuZGlhbiAqL1xuICAgICkge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJbnQxNiwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZVxuICAgIC8qICwgbGl0dGxlRW5kaWFuICovXG4gICAgKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0ludDMyLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWVcbiAgICAvKiAsIGxpdHRsZUVuZGlhbiAqL1xuICAgICkge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJbnQzMiwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWVcbiAgICAvKiAsIGxpdHRsZUVuZGlhbiAqL1xuICAgICkge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGbG9hdDMyLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZVxuICAgIC8qICwgbGl0dGxlRW5kaWFuICovXG4gICAgKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Zsb2F0NjQsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIHZhciBJTkNPUlJFQ1RfQVJSQVlfQlVGRkVSX05BTUUgPSBQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBOYXRpdmVBcnJheUJ1ZmZlci5uYW1lICE9PSBBUlJBWV9CVUZGRVI7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xuXG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIE5hdGl2ZUFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBOYXRpdmVBcnJheUJ1ZmZlcigtMSk7XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgTmF0aXZlQXJyYXlCdWZmZXIoKTtcbiAgICBuZXcgTmF0aXZlQXJyYXlCdWZmZXIoMS41KTtcbiAgICBuZXcgTmF0aXZlQXJyYXlCdWZmZXIoTmFOKTtcbiAgICByZXR1cm4gSU5DT1JSRUNUX0FSUkFZX0JVRkZFUl9OQU1FICYmICFDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRTtcbiAgfSkpIHtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCBBcnJheUJ1ZmZlclByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gbmV3IE5hdGl2ZUFycmF5QnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcblxuICAgICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQXJyYXlCdWZmZXJQcm90b3R5cGU7XG5cbiAgICBmb3IgKHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVBcnJheUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KCRBcnJheUJ1ZmZlciwga2V5LCBOYXRpdmVBcnJheUJ1ZmZlcltrZXldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBBcnJheUJ1ZmZlclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfSBlbHNlIGlmIChJTkNPUlJFQ1RfQVJSQVlfQlVGRkVSX05BTUUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTmF0aXZlQXJyYXlCdWZmZXIsICduYW1lJywgQVJSQVlfQlVGRkVSKTtcbiAgfSAvLyBXZWJLaXQgYnVnIC0gdGhlIHNhbWUgcGFyZW50IHByb3RvdHlwZSBmb3IgdHlwZWQgYXJyYXlzIGFuZCBkYXRhIHZpZXdcblxuXG4gIGlmIChzZXRQcm90b3R5cGVPZiAmJiBnZXRQcm90b3R5cGVPZihEYXRhVmlld1Byb3RvdHlwZSkgIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIHNldFByb3RvdHlwZU9mKERhdGFWaWV3UHJvdG90eXBlLCBPYmplY3RQcm90b3R5cGUpO1xuICB9IC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuXG5cbiAgdmFyIHRlc3RWaWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gdW5jdXJyeVRoaXMoRGF0YVZpZXdQcm90b3R5cGUuc2V0SW50OCk7XG4gIHRlc3RWaWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHRlc3RWaWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh0ZXN0Vmlldy5nZXRJbnQ4KDApIHx8ICF0ZXN0Vmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbChEYXRhVmlld1Byb3RvdHlwZSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4KHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDgodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwge1xuICAgIHVuc2FmZTogdHJ1ZVxuICB9KTtcbn1cblxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIsXG4gIERhdGFWaWV3OiAkRGF0YVZpZXdcbn07XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3ODAzOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcblxudmFyIGFycmF5QnVmZmVyTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDkxKTtcblxudmFyIHNldFNwZWNpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzNDApO1xuXG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBBcnJheUJ1ZmZlciA9IGFycmF5QnVmZmVyTW9kdWxlW0FSUkFZX0JVRkZFUl07XG52YXIgTmF0aXZlQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTsgLy8gYEFycmF5QnVmZmVyYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheWJ1ZmZlci1jb25zdHJ1Y3RvclxuXG4kKHtcbiAgZ2xvYmFsOiB0cnVlLFxuICBmb3JjZWQ6IE5hdGl2ZUFycmF5QnVmZmVyICE9PSBBcnJheUJ1ZmZlclxufSwge1xuICBBcnJheUJ1ZmZlcjogQXJyYXlCdWZmZXJcbn0pO1xuc2V0U3BlY2llcyhBUlJBWV9CVUZGRVIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTk0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcbiAgaWYgKHRydWUpIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoX193ZWJwYWNrX3JlcXVpcmVfXyg3NTcpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1MDgpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0NDApLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4MzkpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1ODIpKTtcbiAgfSBlbHNlIHt9XG59KSh2b2lkIDAsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuICAoZnVuY3Rpb24gKCkge1xuICAgIC8vIFNob3J0Y3V0c1xuICAgIHZhciBDID0gQ3J5cHRvSlM7XG4gICAgdmFyIENfbGliID0gQy5saWI7XG4gICAgdmFyIEJsb2NrQ2lwaGVyID0gQ19saWIuQmxvY2tDaXBoZXI7XG4gICAgdmFyIENfYWxnbyA9IEMuYWxnbzsgLy8gTG9va3VwIHRhYmxlc1xuXG4gICAgdmFyIFNCT1ggPSBbXTtcbiAgICB2YXIgSU5WX1NCT1ggPSBbXTtcbiAgICB2YXIgU1VCX01JWF8wID0gW107XG4gICAgdmFyIFNVQl9NSVhfMSA9IFtdO1xuICAgIHZhciBTVUJfTUlYXzIgPSBbXTtcbiAgICB2YXIgU1VCX01JWF8zID0gW107XG4gICAgdmFyIElOVl9TVUJfTUlYXzAgPSBbXTtcbiAgICB2YXIgSU5WX1NVQl9NSVhfMSA9IFtdO1xuICAgIHZhciBJTlZfU1VCX01JWF8yID0gW107XG4gICAgdmFyIElOVl9TVUJfTUlYXzMgPSBbXTsgLy8gQ29tcHV0ZSBsb29rdXAgdGFibGVzXG5cbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQ29tcHV0ZSBkb3VibGUgdGFibGVcbiAgICAgIHZhciBkID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgICAgaWYgKGkgPCAxMjgpIHtcbiAgICAgICAgICBkW2ldID0gaSA8PCAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRbaV0gPSBpIDw8IDEgXiAweDExYjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBXYWxrIEdGKDJeOClcblxuXG4gICAgICB2YXIgeCA9IDA7XG4gICAgICB2YXIgeGkgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgIC8vIENvbXB1dGUgc2JveFxuICAgICAgICB2YXIgc3ggPSB4aSBeIHhpIDw8IDEgXiB4aSA8PCAyIF4geGkgPDwgMyBeIHhpIDw8IDQ7XG4gICAgICAgIHN4ID0gc3ggPj4+IDggXiBzeCAmIDB4ZmYgXiAweDYzO1xuICAgICAgICBTQk9YW3hdID0gc3g7XG4gICAgICAgIElOVl9TQk9YW3N4XSA9IHg7IC8vIENvbXB1dGUgbXVsdGlwbGljYXRpb25cblxuICAgICAgICB2YXIgeDIgPSBkW3hdO1xuICAgICAgICB2YXIgeDQgPSBkW3gyXTtcbiAgICAgICAgdmFyIHg4ID0gZFt4NF07IC8vIENvbXB1dGUgc3ViIGJ5dGVzLCBtaXggY29sdW1ucyB0YWJsZXNcblxuICAgICAgICB2YXIgdCA9IGRbc3hdICogMHgxMDEgXiBzeCAqIDB4MTAxMDEwMDtcbiAgICAgICAgU1VCX01JWF8wW3hdID0gdCA8PCAyNCB8IHQgPj4+IDg7XG4gICAgICAgIFNVQl9NSVhfMVt4XSA9IHQgPDwgMTYgfCB0ID4+PiAxNjtcbiAgICAgICAgU1VCX01JWF8yW3hdID0gdCA8PCA4IHwgdCA+Pj4gMjQ7XG4gICAgICAgIFNVQl9NSVhfM1t4XSA9IHQ7IC8vIENvbXB1dGUgaW52IHN1YiBieXRlcywgaW52IG1peCBjb2x1bW5zIHRhYmxlc1xuXG4gICAgICAgIHZhciB0ID0geDggKiAweDEwMTAxMDEgXiB4NCAqIDB4MTAwMDEgXiB4MiAqIDB4MTAxIF4geCAqIDB4MTAxMDEwMDtcbiAgICAgICAgSU5WX1NVQl9NSVhfMFtzeF0gPSB0IDw8IDI0IHwgdCA+Pj4gODtcbiAgICAgICAgSU5WX1NVQl9NSVhfMVtzeF0gPSB0IDw8IDE2IHwgdCA+Pj4gMTY7XG4gICAgICAgIElOVl9TVUJfTUlYXzJbc3hdID0gdCA8PCA4IHwgdCA+Pj4gMjQ7XG4gICAgICAgIElOVl9TVUJfTUlYXzNbc3hdID0gdDsgLy8gQ29tcHV0ZSBuZXh0IGNvdW50ZXJcblxuICAgICAgICBpZiAoIXgpIHtcbiAgICAgICAgICB4ID0geGkgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHggPSB4MiBeIGRbZFtkW3g4IF4geDJdXV07XG4gICAgICAgICAgeGkgXj0gZFtkW3hpXV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSgpOyAvLyBQcmVjb21wdXRlZCBSY29uIGxvb2t1cFxuXG5cbiAgICB2YXIgUkNPTiA9IFsweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2XTtcbiAgICAvKipcbiAgICAgKiBBRVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cbiAgICAgKi9cblxuICAgIHZhciBBRVMgPSBDX2FsZ28uQUVTID0gQmxvY2tDaXBoZXIuZXh0ZW5kKHtcbiAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiBfZG9SZXNldCgpIHtcbiAgICAgICAgdmFyIHQ7IC8vIFNraXAgcmVzZXQgb2YgblJvdW5kcyBoYXMgYmVlbiBzZXQgYmVmb3JlIGFuZCBrZXkgZGlkIG5vdCBjaGFuZ2VcblxuICAgICAgICBpZiAodGhpcy5fblJvdW5kcyAmJiB0aGlzLl9rZXlQcmlvclJlc2V0ID09PSB0aGlzLl9rZXkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU2hvcnRjdXRzXG5cblxuICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5UHJpb3JSZXNldCA9IHRoaXMuX2tleTtcbiAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuICAgICAgICB2YXIga2V5U2l6ZSA9IGtleS5zaWdCeXRlcyAvIDQ7IC8vIENvbXB1dGUgbnVtYmVyIG9mIHJvdW5kc1xuXG4gICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcyA9IGtleVNpemUgKyA2OyAvLyBDb21wdXRlIG51bWJlciBvZiBrZXkgc2NoZWR1bGUgcm93c1xuXG4gICAgICAgIHZhciBrc1Jvd3MgPSAoblJvdW5kcyArIDEpICogNDsgLy8gQ29tcHV0ZSBrZXkgc2NoZWR1bGVcblxuICAgICAgICB2YXIga2V5U2NoZWR1bGUgPSB0aGlzLl9rZXlTY2hlZHVsZSA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGtzUm93ID0gMDsga3NSb3cgPCBrc1Jvd3M7IGtzUm93KyspIHtcbiAgICAgICAgICBpZiAoa3NSb3cgPCBrZXlTaXplKSB7XG4gICAgICAgICAgICBrZXlTY2hlZHVsZVtrc1Jvd10gPSBrZXlXb3Jkc1trc1Jvd107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHQgPSBrZXlTY2hlZHVsZVtrc1JvdyAtIDFdO1xuXG4gICAgICAgICAgICBpZiAoIShrc1JvdyAlIGtleVNpemUpKSB7XG4gICAgICAgICAgICAgIC8vIFJvdCB3b3JkXG4gICAgICAgICAgICAgIHQgPSB0IDw8IDggfCB0ID4+PiAyNDsgLy8gU3ViIHdvcmRcblxuICAgICAgICAgICAgICB0ID0gU0JPWFt0ID4+PiAyNF0gPDwgMjQgfCBTQk9YW3QgPj4+IDE2ICYgMHhmZl0gPDwgMTYgfCBTQk9YW3QgPj4+IDggJiAweGZmXSA8PCA4IHwgU0JPWFt0ICYgMHhmZl07IC8vIE1peCBSY29uXG5cbiAgICAgICAgICAgICAgdCBePSBSQ09OW2tzUm93IC8ga2V5U2l6ZSB8IDBdIDw8IDI0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlTaXplID4gNiAmJiBrc1JvdyAlIGtleVNpemUgPT0gNCkge1xuICAgICAgICAgICAgICAvLyBTdWIgd29yZFxuICAgICAgICAgICAgICB0ID0gU0JPWFt0ID4+PiAyNF0gPDwgMjQgfCBTQk9YW3QgPj4+IDE2ICYgMHhmZl0gPDwgMTYgfCBTQk9YW3QgPj4+IDggJiAweGZmXSA8PCA4IHwgU0JPWFt0ICYgMHhmZl07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGtleVNjaGVkdWxlW2tzUm93XSA9IGtleVNjaGVkdWxlW2tzUm93IC0ga2V5U2l6ZV0gXiB0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb21wdXRlIGludiBrZXkgc2NoZWR1bGVcblxuXG4gICAgICAgIHZhciBpbnZLZXlTY2hlZHVsZSA9IHRoaXMuX2ludktleVNjaGVkdWxlID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaW52S3NSb3cgPSAwOyBpbnZLc1JvdyA8IGtzUm93czsgaW52S3NSb3crKykge1xuICAgICAgICAgIHZhciBrc1JvdyA9IGtzUm93cyAtIGludktzUm93O1xuXG4gICAgICAgICAgaWYgKGludktzUm93ICUgNCkge1xuICAgICAgICAgICAgdmFyIHQgPSBrZXlTY2hlZHVsZVtrc1Jvd107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0ID0ga2V5U2NoZWR1bGVba3NSb3cgLSA0XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW52S3NSb3cgPCA0IHx8IGtzUm93IDw9IDQpIHtcbiAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IHQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IElOVl9TVUJfTUlYXzBbU0JPWFt0ID4+PiAyNF1dIF4gSU5WX1NVQl9NSVhfMVtTQk9YW3QgPj4+IDE2ICYgMHhmZl1dIF4gSU5WX1NVQl9NSVhfMltTQk9YW3QgPj4+IDggJiAweGZmXV0gXiBJTlZfU1VCX01JWF8zW1NCT1hbdCAmIDB4ZmZdXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIGVuY3J5cHRCbG9jayhNLCBvZmZzZXQpIHtcbiAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5fa2V5U2NoZWR1bGUsIFNVQl9NSVhfMCwgU1VCX01JWF8xLCBTVUJfTUlYXzIsIFNVQl9NSVhfMywgU0JPWCk7XG4gICAgICB9LFxuICAgICAgZGVjcnlwdEJsb2NrOiBmdW5jdGlvbiBkZWNyeXB0QmxvY2soTSwgb2Zmc2V0KSB7XG4gICAgICAgIC8vIFN3YXAgMm5kIGFuZCA0dGggcm93c1xuICAgICAgICB2YXIgdCA9IE1bb2Zmc2V0ICsgMV07XG4gICAgICAgIE1bb2Zmc2V0ICsgMV0gPSBNW29mZnNldCArIDNdO1xuICAgICAgICBNW29mZnNldCArIDNdID0gdDtcblxuICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9pbnZLZXlTY2hlZHVsZSwgSU5WX1NVQl9NSVhfMCwgSU5WX1NVQl9NSVhfMSwgSU5WX1NVQl9NSVhfMiwgSU5WX1NVQl9NSVhfMywgSU5WX1NCT1gpOyAvLyBJbnYgc3dhcCAybmQgYW5kIDR0aCByb3dzXG5cblxuICAgICAgICB2YXIgdCA9IE1bb2Zmc2V0ICsgMV07XG4gICAgICAgIE1bb2Zmc2V0ICsgMV0gPSBNW29mZnNldCArIDNdO1xuICAgICAgICBNW29mZnNldCArIDNdID0gdDtcbiAgICAgIH0sXG4gICAgICBfZG9DcnlwdEJsb2NrOiBmdW5jdGlvbiBfZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwga2V5U2NoZWR1bGUsIFNVQl9NSVhfMCwgU1VCX01JWF8xLCBTVUJfTUlYXzIsIFNVQl9NSVhfMywgU0JPWCkge1xuICAgICAgICAvLyBTaG9ydGN1dFxuICAgICAgICB2YXIgblJvdW5kcyA9IHRoaXMuX25Sb3VuZHM7IC8vIEdldCBpbnB1dCwgYWRkIHJvdW5kIGtleVxuXG4gICAgICAgIHZhciBzMCA9IE1bb2Zmc2V0XSBeIGtleVNjaGVkdWxlWzBdO1xuICAgICAgICB2YXIgczEgPSBNW29mZnNldCArIDFdIF4ga2V5U2NoZWR1bGVbMV07XG4gICAgICAgIHZhciBzMiA9IE1bb2Zmc2V0ICsgMl0gXiBrZXlTY2hlZHVsZVsyXTtcbiAgICAgICAgdmFyIHMzID0gTVtvZmZzZXQgKyAzXSBeIGtleVNjaGVkdWxlWzNdOyAvLyBLZXkgc2NoZWR1bGUgcm93IGNvdW50ZXJcblxuICAgICAgICB2YXIga3NSb3cgPSA0OyAvLyBSb3VuZHNcblxuICAgICAgICBmb3IgKHZhciByb3VuZCA9IDE7IHJvdW5kIDwgblJvdW5kczsgcm91bmQrKykge1xuICAgICAgICAgIC8vIFNoaWZ0IHJvd3MsIHN1YiBieXRlcywgbWl4IGNvbHVtbnMsIGFkZCByb3VuZCBrZXlcbiAgICAgICAgICB2YXIgdDAgPSBTVUJfTUlYXzBbczAgPj4+IDI0XSBeIFNVQl9NSVhfMVtzMSA+Pj4gMTYgJiAweGZmXSBeIFNVQl9NSVhfMltzMiA+Pj4gOCAmIDB4ZmZdIF4gU1VCX01JWF8zW3MzICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcbiAgICAgICAgICB2YXIgdDEgPSBTVUJfTUlYXzBbczEgPj4+IDI0XSBeIFNVQl9NSVhfMVtzMiA+Pj4gMTYgJiAweGZmXSBeIFNVQl9NSVhfMltzMyA+Pj4gOCAmIDB4ZmZdIF4gU1VCX01JWF8zW3MwICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcbiAgICAgICAgICB2YXIgdDIgPSBTVUJfTUlYXzBbczIgPj4+IDI0XSBeIFNVQl9NSVhfMVtzMyA+Pj4gMTYgJiAweGZmXSBeIFNVQl9NSVhfMltzMCA+Pj4gOCAmIDB4ZmZdIF4gU1VCX01JWF8zW3MxICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcbiAgICAgICAgICB2YXIgdDMgPSBTVUJfTUlYXzBbczMgPj4+IDI0XSBeIFNVQl9NSVhfMVtzMCA+Pj4gMTYgJiAweGZmXSBeIFNVQl9NSVhfMltzMSA+Pj4gOCAmIDB4ZmZdIF4gU1VCX01JWF8zW3MyICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXTsgLy8gVXBkYXRlIHN0YXRlXG5cbiAgICAgICAgICBzMCA9IHQwO1xuICAgICAgICAgIHMxID0gdDE7XG4gICAgICAgICAgczIgPSB0MjtcbiAgICAgICAgICBzMyA9IHQzO1xuICAgICAgICB9IC8vIFNoaWZ0IHJvd3MsIHN1YiBieXRlcywgYWRkIHJvdW5kIGtleVxuXG5cbiAgICAgICAgdmFyIHQwID0gKFNCT1hbczAgPj4+IDI0XSA8PCAyNCB8IFNCT1hbczEgPj4+IDE2ICYgMHhmZl0gPDwgMTYgfCBTQk9YW3MyID4+PiA4ICYgMHhmZl0gPDwgOCB8IFNCT1hbczMgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcbiAgICAgICAgdmFyIHQxID0gKFNCT1hbczEgPj4+IDI0XSA8PCAyNCB8IFNCT1hbczIgPj4+IDE2ICYgMHhmZl0gPDwgMTYgfCBTQk9YW3MzID4+PiA4ICYgMHhmZl0gPDwgOCB8IFNCT1hbczAgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcbiAgICAgICAgdmFyIHQyID0gKFNCT1hbczIgPj4+IDI0XSA8PCAyNCB8IFNCT1hbczMgPj4+IDE2ICYgMHhmZl0gPDwgMTYgfCBTQk9YW3MwID4+PiA4ICYgMHhmZl0gPDwgOCB8IFNCT1hbczEgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcbiAgICAgICAgdmFyIHQzID0gKFNCT1hbczMgPj4+IDI0XSA8PCAyNCB8IFNCT1hbczAgPj4+IDE2ICYgMHhmZl0gPDwgMTYgfCBTQk9YW3MxID4+PiA4ICYgMHhmZl0gPDwgOCB8IFNCT1hbczIgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTsgLy8gU2V0IG91dHB1dFxuXG4gICAgICAgIE1bb2Zmc2V0XSA9IHQwO1xuICAgICAgICBNW29mZnNldCArIDFdID0gdDE7XG4gICAgICAgIE1bb2Zmc2V0ICsgMl0gPSB0MjtcbiAgICAgICAgTVtvZmZzZXQgKyAzXSA9IHQzO1xuICAgICAgfSxcbiAgICAgIGtleVNpemU6IDI1NiAvIDMyXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcbiAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG4gICAgICovXG5cbiAgICBDLkFFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQUVTKTtcbiAgfSkoKTtcblxuICByZXR1cm4gQ3J5cHRvSlMuQUVTO1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNTgyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcwNDIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMjIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk3MTQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDU2MSk7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oMzgzOSkpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIC8qKlxuICAgKiBDaXBoZXIgY29yZSBjb21wb25lbnRzLlxuICAgKi9cbiAgQ3J5cHRvSlMubGliLkNpcGhlciB8fCBmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG4gICAgLy8gU2hvcnRjdXRzXG4gICAgdmFyIEMgPSBDcnlwdG9KUztcbiAgICB2YXIgQ19saWIgPSBDLmxpYjtcbiAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG4gICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcbiAgICB2YXIgQnVmZmVyZWRCbG9ja0FsZ29yaXRobSA9IENfbGliLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG07XG4gICAgdmFyIENfZW5jID0gQy5lbmM7XG4gICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4O1xuICAgIHZhciBCYXNlNjQgPSBDX2VuYy5CYXNlNjQ7XG4gICAgdmFyIENfYWxnbyA9IEMuYWxnbztcbiAgICB2YXIgRXZwS0RGID0gQ19hbGdvLkV2cEtERjtcbiAgICAvKipcbiAgICAgKiBBYnN0cmFjdCBiYXNlIGNpcGhlciB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoaXMgY2lwaGVyJ3Mga2V5IHNpemUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdlNpemUgVGhpcyBjaXBoZXIncyBJViBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX0VOQ19YRk9STV9NT0RFIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGVuY3J5cHRpb24gbW9kZS5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX0RFQ19YRk9STV9NT0RFIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGRlY3J5cHRpb24gbW9kZS5cbiAgICAgKi9cblxuICAgIHZhciBDaXBoZXIgPSBDX2xpYi5DaXBoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG4gICAgICAvKipcbiAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICAgICAqXG4gICAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0gaXYgVGhlIElWIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICAgKi9cbiAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIHRoaXMgY2lwaGVyIGluIGVuY3J5cHRpb24gbW9kZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge0NpcGhlcn0gQSBjaXBoZXIgaW5zdGFuY2UuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciBjaXBoZXIgPSBDcnlwdG9KUy5hbGdvLkFFUy5jcmVhdGVFbmNyeXB0b3Ioa2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcbiAgICAgICAqL1xuICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiBjcmVhdGVFbmNyeXB0b3Ioa2V5LCBjZmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0VOQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZGVjcnlwdGlvbiBtb2RlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7Q2lwaGVyfSBBIGNpcGhlciBpbnN0YW5jZS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGNpcGhlciA9IENyeXB0b0pTLmFsZ28uQUVTLmNyZWF0ZURlY3J5cHRvcihrZXlXb3JkQXJyYXksIHsgaXY6IGl2V29yZEFycmF5IH0pO1xuICAgICAgICovXG4gICAgICBjcmVhdGVEZWNyeXB0b3I6IGZ1bmN0aW9uIGNyZWF0ZURlY3J5cHRvcihrZXksIGNmZykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fREVDX1hGT1JNX01PREUsIGtleSwgY2ZnKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGNpcGhlci5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0geGZvcm1Nb2RlIEVpdGhlciB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHRyYW5zb3JtYXRpb24gbW9kZSBjb25zdGFudC5cbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGNpcGhlciA9IENyeXB0b0pTLmFsZ28uQUVTLmNyZWF0ZShDcnlwdG9KUy5hbGdvLkFFUy5fRU5DX1hGT1JNX01PREUsIGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG4gICAgICAgKi9cbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoeGZvcm1Nb2RlLCBrZXksIGNmZykge1xuICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcbiAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTsgLy8gU3RvcmUgdHJhbnNmb3JtIG1vZGUgYW5kIGtleVxuXG4gICAgICAgIHRoaXMuX3hmb3JtTW9kZSA9IHhmb3JtTW9kZTtcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5OyAvLyBTZXQgaW5pdGlhbCB2YWx1ZXNcblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFJlc2V0cyB0aGlzIGNpcGhlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICBjaXBoZXIucmVzZXQoKTtcbiAgICAgICAqL1xuICAgICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7IC8vIFBlcmZvcm0gY29uY3JldGUtY2lwaGVyIGxvZ2ljXG5cbiAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBBZGRzIGRhdGEgdG8gYmUgZW5jcnlwdGVkIG9yIGRlY3J5cHRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGRhdGFVcGRhdGUgVGhlIGRhdGEgdG8gZW5jcnlwdCBvciBkZWNyeXB0LlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRhdGEgYWZ0ZXIgcHJvY2Vzc2luZy5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLnByb2Nlc3MoJ2RhdGEnKTtcbiAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLnByb2Nlc3Mod29yZEFycmF5KTtcbiAgICAgICAqL1xuICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcyhkYXRhVXBkYXRlKSB7XG4gICAgICAgIC8vIEFwcGVuZFxuICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7IC8vIFByb2Nlc3MgYXZhaWxhYmxlIGJsb2Nrc1xuXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3MoKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogRmluYWxpemVzIHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gcHJvY2Vzcy5cbiAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhVXBkYXRlIFRoZSBmaW5hbCBkYXRhIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkYXRhIGFmdGVyIGZpbmFsIHByb2Nlc3NpbmcuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5maW5hbGl6ZSgpO1xuICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIuZmluYWxpemUoJ2RhdGEnKTtcbiAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG4gICAgICAgKi9cbiAgICAgIGZpbmFsaXplOiBmdW5jdGlvbiBmaW5hbGl6ZShkYXRhVXBkYXRlKSB7XG4gICAgICAgIC8vIEZpbmFsIGRhdGEgdXBkYXRlXG4gICAgICAgIGlmIChkYXRhVXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy5fYXBwZW5kKGRhdGFVcGRhdGUpO1xuICAgICAgICB9IC8vIFBlcmZvcm0gY29uY3JldGUtY2lwaGVyIGxvZ2ljXG5cblxuICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWREYXRhID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG4gICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZERhdGE7XG4gICAgICB9LFxuICAgICAga2V5U2l6ZTogMTI4IC8gMzIsXG4gICAgICBpdlNpemU6IDEyOCAvIDMyLFxuICAgICAgX0VOQ19YRk9STV9NT0RFOiAxLFxuICAgICAgX0RFQ19YRk9STV9NT0RFOiAyLFxuXG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgc2hvcnRjdXQgZnVuY3Rpb25zIHRvIGEgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIGVuY3J5cHQgYW5kIGRlY3J5cHQgc2hvcnRjdXQgZnVuY3Rpb25zLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgQUVTID0gQ3J5cHRvSlMubGliLkNpcGhlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uQUVTKTtcbiAgICAgICAqL1xuICAgICAgX2NyZWF0ZUhlbHBlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIFBhc3N3b3JkQmFzZWRDaXBoZXI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemFibGVDaXBoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjaXBoZXIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW5jcnlwdDogZnVuY3Rpb24gZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZykge1xuICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0Q2lwaGVyU3RyYXRlZ3koa2V5KS5lbmNyeXB0KGNpcGhlciwgbWVzc2FnZSwga2V5LCBjZmcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uIGRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkuZGVjcnlwdChjaXBoZXIsIGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfSgpXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogQWJzdHJhY3QgYmFzZSBzdHJlYW0gY2lwaGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGNpcGhlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMSAoMzIgYml0cylcbiAgICAgKi9cblxuICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXIgPSBDaXBoZXIuZXh0ZW5kKHtcbiAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiBfZG9GaW5hbGl6ZSgpIHtcbiAgICAgICAgLy8gUHJvY2VzcyBwYXJ0aWFsIGJsb2Nrc1xuICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWRCbG9ja3MgPSB0aGlzLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7XG5cbiAgICAgICAgcmV0dXJuIGZpbmFsUHJvY2Vzc2VkQmxvY2tzO1xuICAgICAgfSxcbiAgICAgIGJsb2NrU2l6ZTogMVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIE1vZGUgbmFtZXNwYWNlLlxuICAgICAqL1xuXG4gICAgdmFyIENfbW9kZSA9IEMubW9kZSA9IHt9O1xuICAgIC8qKlxuICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIG1vZGUgdGVtcGxhdGUuXG4gICAgICovXG5cbiAgICB2YXIgQmxvY2tDaXBoZXJNb2RlID0gQ19saWIuQmxvY2tDaXBoZXJNb2RlID0gQmFzZS5leHRlbmQoe1xuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZW5jcnlwdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZUVuY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcbiAgICAgICAqL1xuICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiBjcmVhdGVFbmNyeXB0b3IoY2lwaGVyLCBpdikge1xuICAgICAgICByZXR1cm4gdGhpcy5FbmNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZGVjcnlwdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZURlY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcbiAgICAgICAqL1xuICAgICAgY3JlYXRlRGVjcnlwdG9yOiBmdW5jdGlvbiBjcmVhdGVEZWNyeXB0b3IoY2lwaGVyLCBpdikge1xuICAgICAgICByZXR1cm4gdGhpcy5EZWNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgbW9kZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciBtb2RlID0gQ3J5cHRvSlMubW9kZS5DQkMuRW5jcnlwdG9yLmNyZWF0ZShjaXBoZXIsIGl2LndvcmRzKTtcbiAgICAgICAqL1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdChjaXBoZXIsIGl2KSB7XG4gICAgICAgIHRoaXMuX2NpcGhlciA9IGNpcGhlcjtcbiAgICAgICAgdGhpcy5faXYgPSBpdjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS5cbiAgICAgKi9cblxuICAgIHZhciBDQkMgPSBDX21vZGUuQ0JDID0gZnVuY3Rpb24gKCkge1xuICAgICAgLyoqXG4gICAgICAgKiBBYnN0cmFjdCBiYXNlIENCQyBtb2RlLlxuICAgICAgICovXG4gICAgICB2YXIgQ0JDID0gQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuICAgICAgLyoqXG4gICAgICAgKiBDQkMgZW5jcnlwdG9yLlxuICAgICAgICovXG5cbiAgICAgIENCQy5FbmNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcbiAgICAgICAgICovXG4gICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gcHJvY2Vzc0Jsb2NrKHdvcmRzLCBvZmZzZXQpIHtcbiAgICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplOyAvLyBYT1IgYW5kIGVuY3J5cHRcblxuICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcbiAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpOyAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblxuICAgICAgICAgIHRoaXMuX3ByZXZCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvKipcbiAgICAgICAqIENCQyBkZWNyeXB0b3IuXG4gICAgICAgKi9cblxuICAgICAgQ0JDLkRlY3J5cHRvciA9IENCQy5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBkYXRhIGJsb2NrIGF0IG9mZnNldC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgVGhlIGRhdGEgd29yZHMgdG8gb3BlcmF0ZSBvbi5cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSBibG9jayBzdGFydHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICBtb2RlLnByb2Nlc3NCbG9jayhkYXRhLndvcmRzLCBvZmZzZXQpO1xuICAgICAgICAgKi9cbiAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiBwcm9jZXNzQmxvY2sod29yZHMsIG9mZnNldCkge1xuICAgICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXI7XG4gICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7IC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXG4gICAgICAgICAgdmFyIHRoaXNCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTsgLy8gRGVjcnlwdCBhbmQgWE9SXG5cbiAgICAgICAgICBjaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTsgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXG4gICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gdGhpc0Jsb2NrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24geG9yQmxvY2sod29yZHMsIG9mZnNldCwgYmxvY2tTaXplKSB7XG4gICAgICAgIHZhciBibG9jazsgLy8gU2hvcnRjdXRcblxuICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjsgLy8gQ2hvb3NlIG1peGluZyBibG9ja1xuXG4gICAgICAgIGlmIChpdikge1xuICAgICAgICAgIGJsb2NrID0gaXY7IC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3NcblxuICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJsb2NrID0gdGhpcy5fcHJldkJsb2NrO1xuICAgICAgICB9IC8vIFhPUiBibG9ja3NcblxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcbiAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBibG9ja1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ0JDO1xuICAgIH0oKTtcbiAgICAvKipcbiAgICAgKiBQYWRkaW5nIG5hbWVzcGFjZS5cbiAgICAgKi9cblxuXG4gICAgdmFyIENfcGFkID0gQy5wYWQgPSB7fTtcbiAgICAvKipcbiAgICAgKiBQS0NTICM1LzcgcGFkZGluZyBzdHJhdGVneS5cbiAgICAgKi9cblxuICAgIHZhciBQa2NzNyA9IENfcGFkLlBrY3M3ID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBQYWRzIGRhdGEgdXNpbmcgdGhlIGFsZ29yaXRobSBkZWZpbmVkIGluIFBLQ1MgIzUvNy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gZGF0YSBUaGUgZGF0YSB0byBwYWQuXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gYmxvY2tTaXplIFRoZSBtdWx0aXBsZSB0aGF0IHRoZSBkYXRhIHNob3VsZCBiZSBwYWRkZWQgdG8uXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIENyeXB0b0pTLnBhZC5Qa2NzNy5wYWQod29yZEFycmF5LCA0KTtcbiAgICAgICAqL1xuICAgICAgcGFkOiBmdW5jdGlvbiBwYWQoZGF0YSwgYmxvY2tTaXplKSB7XG4gICAgICAgIC8vIFNob3J0Y3V0XG4gICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7IC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblxuICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGJsb2NrU2l6ZUJ5dGVzIC0gZGF0YS5zaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzOyAvLyBDcmVhdGUgcGFkZGluZyB3b3JkXG5cbiAgICAgICAgdmFyIHBhZGRpbmdXb3JkID0gblBhZGRpbmdCeXRlcyA8PCAyNCB8IG5QYWRkaW5nQnl0ZXMgPDwgMTYgfCBuUGFkZGluZ0J5dGVzIDw8IDggfCBuUGFkZGluZ0J5dGVzOyAvLyBDcmVhdGUgcGFkZGluZ1xuXG4gICAgICAgIHZhciBwYWRkaW5nV29yZHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5QYWRkaW5nQnl0ZXM7IGkgKz0gNCkge1xuICAgICAgICAgIHBhZGRpbmdXb3Jkcy5wdXNoKHBhZGRpbmdXb3JkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYWRkaW5nID0gV29yZEFycmF5LmNyZWF0ZShwYWRkaW5nV29yZHMsIG5QYWRkaW5nQnl0ZXMpOyAvLyBBZGQgcGFkZGluZ1xuXG4gICAgICAgIGRhdGEuY29uY2F0KHBhZGRpbmcpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVbnBhZHMgZGF0YSB0aGF0IGhhZCBiZWVuIHBhZGRlZCB1c2luZyB0aGUgYWxnb3JpdGhtIGRlZmluZWQgaW4gUEtDUyAjNS83LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBkYXRhIFRoZSBkYXRhIHRvIHVucGFkLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICBDcnlwdG9KUy5wYWQuUGtjczcudW5wYWQod29yZEFycmF5KTtcbiAgICAgICAqL1xuICAgICAgdW5wYWQ6IGZ1bmN0aW9uIHVucGFkKGRhdGEpIHtcbiAgICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG4gICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1tkYXRhLnNpZ0J5dGVzIC0gMSA+Pj4gMl0gJiAweGZmOyAvLyBSZW1vdmUgcGFkZGluZ1xuXG4gICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGNpcGhlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG4gICAgICovXG5cbiAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlciA9IENpcGhlci5leHRlbmQoe1xuICAgICAgLyoqXG4gICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAgICAgKlxuICAgICAgICogQHByb3BlcnR5IHtNb2RlfSBtb2RlIFRoZSBibG9jayBtb2RlIHRvIHVzZS4gRGVmYXVsdDogQ0JDXG4gICAgICAgKiBAcHJvcGVydHkge1BhZGRpbmd9IHBhZGRpbmcgVGhlIHBhZGRpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBQa2NzN1xuICAgICAgICovXG4gICAgICBjZmc6IENpcGhlci5jZmcuZXh0ZW5kKHtcbiAgICAgICAgbW9kZTogQ0JDLFxuICAgICAgICBwYWRkaW5nOiBQa2NzN1xuICAgICAgfSksXG4gICAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgIHZhciBtb2RlQ3JlYXRvcjsgLy8gUmVzZXQgY2lwaGVyXG5cbiAgICAgICAgQ2lwaGVyLnJlc2V0LmNhbGwodGhpcyk7IC8vIFNob3J0Y3V0c1xuXG4gICAgICAgIHZhciBjZmcgPSB0aGlzLmNmZztcbiAgICAgICAgdmFyIGl2ID0gY2ZnLml2O1xuICAgICAgICB2YXIgbW9kZSA9IGNmZy5tb2RlOyAvLyBSZXNldCBibG9jayBtb2RlXG5cbiAgICAgICAgaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9FTkNfWEZPUk1fTU9ERSkge1xuICAgICAgICAgIG1vZGVDcmVhdG9yID0gbW9kZS5jcmVhdGVFbmNyeXB0b3I7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIC8qIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fREVDX1hGT1JNX01PREUpICovXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZUNyZWF0b3IgPSBtb2RlLmNyZWF0ZURlY3J5cHRvcjsgLy8gS2VlcCBhdCBsZWFzdCBvbmUgYmxvY2sgaW4gdGhlIGJ1ZmZlciBmb3IgdW5wYWRkaW5nXG5cbiAgICAgICAgICAgIHRoaXMuX21pbkJ1ZmZlclNpemUgPSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbW9kZSAmJiB0aGlzLl9tb2RlLl9fY3JlYXRvciA9PSBtb2RlQ3JlYXRvcikge1xuICAgICAgICAgIHRoaXMuX21vZGUuaW5pdCh0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fbW9kZSA9IG1vZGVDcmVhdG9yLmNhbGwobW9kZSwgdGhpcywgaXYgJiYgaXYud29yZHMpO1xuICAgICAgICAgIHRoaXMuX21vZGUuX19jcmVhdG9yID0gbW9kZUNyZWF0b3I7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIF9kb1Byb2Nlc3NCbG9jayh3b3Jkcywgb2Zmc2V0KSB7XG4gICAgICAgIHRoaXMuX21vZGUucHJvY2Vzc0Jsb2NrKHdvcmRzLCBvZmZzZXQpO1xuICAgICAgfSxcbiAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiBfZG9GaW5hbGl6ZSgpIHtcbiAgICAgICAgdmFyIGZpbmFsUHJvY2Vzc2VkQmxvY2tzOyAvLyBTaG9ydGN1dFxuXG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5jZmcucGFkZGluZzsgLy8gRmluYWxpemVcblxuICAgICAgICBpZiAodGhpcy5feGZvcm1Nb2RlID09IHRoaXMuX0VOQ19YRk9STV9NT0RFKSB7XG4gICAgICAgICAgLy8gUGFkIGRhdGFcbiAgICAgICAgICBwYWRkaW5nLnBhZCh0aGlzLl9kYXRhLCB0aGlzLmJsb2NrU2l6ZSk7IC8vIFByb2Nlc3MgZmluYWwgYmxvY2tzXG5cbiAgICAgICAgICBmaW5hbFByb2Nlc3NlZEJsb2NrcyA9IHRoaXMuX3Byb2Nlc3MoISEnZmx1c2gnKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgLyogaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9ERUNfWEZPUk1fTU9ERSkgKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBQcm9jZXNzIGZpbmFsIGJsb2Nrc1xuICAgICAgICAgICAgZmluYWxQcm9jZXNzZWRCbG9ja3MgPSB0aGlzLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7IC8vIFVucGFkIGRhdGFcblxuICAgICAgICAgICAgcGFkZGluZy51bnBhZChmaW5hbFByb2Nlc3NlZEJsb2Nrcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEJsb2NrcztcbiAgICAgIH0sXG4gICAgICBibG9ja1NpemU6IDEyOCAvIDMyXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogQSBjb2xsZWN0aW9uIG9mIGNpcGhlciBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGNpcGhlcnRleHQgVGhlIHJhdyBjaXBoZXJ0ZXh0LlxuICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBrZXkgVGhlIGtleSB0byB0aGlzIGNpcGhlcnRleHQuXG4gICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGl2IFRoZSBJViB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBzYWx0IFRoZSBzYWx0IHVzZWQgd2l0aCBhIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuICAgICAqIEBwcm9wZXJ0eSB7Q2lwaGVyfSBhbGdvcml0aG0gVGhlIGNpcGhlciBhbGdvcml0aG0uXG4gICAgICogQHByb3BlcnR5IHtNb2RlfSBtb2RlIFRoZSBibG9jayBtb2RlIHVzZWQgaW4gdGhlIGNpcGhlcmluZyBvcGVyYXRpb24uXG4gICAgICogQHByb3BlcnR5IHtQYWRkaW5nfSBwYWRkaW5nIFRoZSBwYWRkaW5nIHNjaGVtZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibG9ja1NpemUgVGhlIGJsb2NrIHNpemUgb2YgdGhlIGNpcGhlci5cbiAgICAgKiBAcHJvcGVydHkge0Zvcm1hdH0gZm9ybWF0dGVyIFRoZSBkZWZhdWx0IGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gY29udmVydCB0aGlzIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgc3RyaW5nLlxuICAgICAqL1xuXG4gICAgdmFyIENpcGhlclBhcmFtcyA9IENfbGliLkNpcGhlclBhcmFtcyA9IEJhc2UuZXh0ZW5kKHtcbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjaXBoZXJQYXJhbXMgQW4gb2JqZWN0IHdpdGggYW55IG9mIHRoZSBwb3NzaWJsZSBjaXBoZXIgcGFyYW1ldGVycy5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMubGliLkNpcGhlclBhcmFtcy5jcmVhdGUoe1xuICAgICAgICogICAgICAgICBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0V29yZEFycmF5LFxuICAgICAgICogICAgICAgICBrZXk6IGtleVdvcmRBcnJheSxcbiAgICAgICAqICAgICAgICAgaXY6IGl2V29yZEFycmF5LFxuICAgICAgICogICAgICAgICBzYWx0OiBzYWx0V29yZEFycmF5LFxuICAgICAgICogICAgICAgICBhbGdvcml0aG06IENyeXB0b0pTLmFsZ28uQUVTLFxuICAgICAgICogICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcbiAgICAgICAqICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBLQ1M3LFxuICAgICAgICogICAgICAgICBibG9ja1NpemU6IDQsXG4gICAgICAgKiAgICAgICAgIGZvcm1hdHRlcjogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0xcbiAgICAgICAqICAgICB9KTtcbiAgICAgICAqL1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdChjaXBoZXJQYXJhbXMpIHtcbiAgICAgICAgdGhpcy5taXhJbihjaXBoZXJQYXJhbXMpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDb252ZXJ0cyB0aGlzIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7Rm9ybWF0fSBmb3JtYXR0ZXIgKE9wdGlvbmFsKSBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byB1c2UuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5naWZpZWQgY2lwaGVyIHBhcmFtcy5cbiAgICAgICAqXG4gICAgICAgKiBAdGhyb3dzIEVycm9yIElmIG5laXRoZXIgdGhlIGZvcm1hdHRlciBub3IgdGhlIGRlZmF1bHQgZm9ybWF0dGVyIGlzIHNldC5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgc3RyaW5nID0gY2lwaGVyUGFyYW1zICsgJyc7XG4gICAgICAgKiAgICAgdmFyIHN0cmluZyA9IGNpcGhlclBhcmFtcy50b1N0cmluZygpO1xuICAgICAgICogICAgIHZhciBzdHJpbmcgPSBjaXBoZXJQYXJhbXMudG9TdHJpbmcoQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wpO1xuICAgICAgICovXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoZm9ybWF0dGVyKSB7XG4gICAgICAgIHJldHVybiAoZm9ybWF0dGVyIHx8IHRoaXMuZm9ybWF0dGVyKS5zdHJpbmdpZnkodGhpcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogRm9ybWF0IG5hbWVzcGFjZS5cbiAgICAgKi9cblxuICAgIHZhciBDX2Zvcm1hdCA9IEMuZm9ybWF0ID0ge307XG4gICAgLyoqXG4gICAgICogT3BlblNTTCBmb3JtYXR0aW5nIHN0cmF0ZWd5LlxuICAgICAqL1xuXG4gICAgdmFyIE9wZW5TU0xGb3JtYXR0ZXIgPSBDX2Zvcm1hdC5PcGVuU1NMID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBDb252ZXJ0cyBhIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGFuIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN9IGNpcGhlclBhcmFtcyBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgT3BlblNTTC1jb21wYXRpYmxlIHN0cmluZy5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIG9wZW5TU0xTdHJpbmcgPSBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTC5zdHJpbmdpZnkoY2lwaGVyUGFyYW1zKTtcbiAgICAgICAqL1xuICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoY2lwaGVyUGFyYW1zKSB7XG4gICAgICAgIHZhciB3b3JkQXJyYXk7IC8vIFNob3J0Y3V0c1xuXG4gICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gY2lwaGVyUGFyYW1zLmNpcGhlcnRleHQ7XG4gICAgICAgIHZhciBzYWx0ID0gY2lwaGVyUGFyYW1zLnNhbHQ7IC8vIEZvcm1hdFxuXG4gICAgICAgIGlmIChzYWx0KSB7XG4gICAgICAgICAgd29yZEFycmF5ID0gV29yZEFycmF5LmNyZWF0ZShbMHg1MzYxNmM3NCwgMHg2NTY0NWY1Zl0pLmNvbmNhdChzYWx0KS5jb25jYXQoY2lwaGVydGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd29yZEFycmF5ID0gY2lwaGVydGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3b3JkQXJyYXkudG9TdHJpbmcoQmFzZTY0KTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQ29udmVydHMgYW4gT3BlblNTTC1jb21wYXRpYmxlIHN0cmluZyB0byBhIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVuU1NMU3RyIFRoZSBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wucGFyc2Uob3BlblNTTFN0cmluZyk7XG4gICAgICAgKi9cbiAgICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShvcGVuU1NMU3RyKSB7XG4gICAgICAgIHZhciBzYWx0OyAvLyBQYXJzZSBiYXNlNjRcblxuICAgICAgICB2YXIgY2lwaGVydGV4dCA9IEJhc2U2NC5wYXJzZShvcGVuU1NMU3RyKTsgLy8gU2hvcnRjdXRcblxuICAgICAgICB2YXIgY2lwaGVydGV4dFdvcmRzID0gY2lwaGVydGV4dC53b3JkczsgLy8gVGVzdCBmb3Igc2FsdFxuXG4gICAgICAgIGlmIChjaXBoZXJ0ZXh0V29yZHNbMF0gPT0gMHg1MzYxNmM3NCAmJiBjaXBoZXJ0ZXh0V29yZHNbMV0gPT0gMHg2NTY0NWY1Zikge1xuICAgICAgICAgIC8vIEV4dHJhY3Qgc2FsdFxuICAgICAgICAgIHNhbHQgPSBXb3JkQXJyYXkuY3JlYXRlKGNpcGhlcnRleHRXb3Jkcy5zbGljZSgyLCA0KSk7IC8vIFJlbW92ZSBzYWx0IGZyb20gY2lwaGVydGV4dFxuXG4gICAgICAgICAgY2lwaGVydGV4dFdvcmRzLnNwbGljZSgwLCA0KTtcbiAgICAgICAgICBjaXBoZXJ0ZXh0LnNpZ0J5dGVzIC09IDE2O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoe1xuICAgICAgICAgIGNpcGhlcnRleHQ6IGNpcGhlcnRleHQsXG4gICAgICAgICAgc2FsdDogc2FsdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEEgY2lwaGVyIHdyYXBwZXIgdGhhdCByZXR1cm5zIGNpcGhlcnRleHQgYXMgYSBzZXJpYWxpemFibGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG4gICAgICovXG5cbiAgICB2YXIgU2VyaWFsaXphYmxlQ2lwaGVyID0gQ19saWIuU2VyaWFsaXphYmxlQ2lwaGVyID0gQmFzZS5leHRlbmQoe1xuICAgICAgLyoqXG4gICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAgICAgKlxuICAgICAgICogQHByb3BlcnR5IHtGb3JtYXR0ZXJ9IGZvcm1hdCBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byBjb252ZXJ0IGNpcGhlciBwYXJhbSBvYmplY3RzIHRvIGFuZCBmcm9tIGEgc3RyaW5nLiBEZWZhdWx0OiBPcGVuU1NMXG4gICAgICAgKi9cbiAgICAgIGNmZzogQmFzZS5leHRlbmQoe1xuICAgICAgICBmb3JtYXQ6IE9wZW5TU0xGb3JtYXR0ZXJcbiAgICAgIH0pLFxuXG4gICAgICAvKipcbiAgICAgICAqIEVuY3J5cHRzIGEgbWVzc2FnZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IEEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXkpO1xuICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXksIHsgaXY6IGl2IH0pO1xuICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuICAgICAgICovXG4gICAgICBlbmNyeXB0OiBmdW5jdGlvbiBlbmNyeXB0KGNpcGhlciwgbWVzc2FnZSwga2V5LCBjZmcpIHtcbiAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG4gICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpOyAvLyBFbmNyeXB0XG5cbiAgICAgICAgdmFyIGVuY3J5cHRvciA9IGNpcGhlci5jcmVhdGVFbmNyeXB0b3Ioa2V5LCBjZmcpO1xuICAgICAgICB2YXIgY2lwaGVydGV4dCA9IGVuY3J5cHRvci5maW5hbGl6ZShtZXNzYWdlKTsgLy8gU2hvcnRjdXRcblxuICAgICAgICB2YXIgY2lwaGVyQ2ZnID0gZW5jcnlwdG9yLmNmZzsgLy8gQ3JlYXRlIGFuZCByZXR1cm4gc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXNcblxuICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7XG4gICAgICAgICAgY2lwaGVydGV4dDogY2lwaGVydGV4dCxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICBpdjogY2lwaGVyQ2ZnLml2LFxuICAgICAgICAgIGFsZ29yaXRobTogY2lwaGVyLFxuICAgICAgICAgIG1vZGU6IGNpcGhlckNmZy5tb2RlLFxuICAgICAgICAgIHBhZGRpbmc6IGNpcGhlckNmZy5wYWRkaW5nLFxuICAgICAgICAgIGJsb2NrU2l6ZTogY2lwaGVyLmJsb2NrU2l6ZSxcbiAgICAgICAgICBmb3JtYXR0ZXI6IGNmZy5mb3JtYXRcbiAgICAgICAgfSk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIERlY3J5cHRzIHNlcmlhbGl6ZWQgY2lwaGVydGV4dC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cbiAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dCB0byBkZWNyeXB0LlxuICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBwbGFpbnRleHQuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGZvcm1hdHRlZENpcGhlcnRleHQsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG4gICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZGVjcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgY2lwaGVydGV4dFBhcmFtcywga2V5LCB7IGl2OiBpdiwgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcbiAgICAgICAqL1xuICAgICAgZGVjcnlwdDogZnVuY3Rpb24gZGVjcnlwdChjaXBoZXIsIGNpcGhlcnRleHQsIGtleSwgY2ZnKSB7XG4gICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTsgLy8gQ29udmVydCBzdHJpbmcgdG8gQ2lwaGVyUGFyYW1zXG5cbiAgICAgICAgY2lwaGVydGV4dCA9IHRoaXMuX3BhcnNlKGNpcGhlcnRleHQsIGNmZy5mb3JtYXQpOyAvLyBEZWNyeXB0XG5cbiAgICAgICAgdmFyIHBsYWludGV4dCA9IGNpcGhlci5jcmVhdGVEZWNyeXB0b3Ioa2V5LCBjZmcpLmZpbmFsaXplKGNpcGhlcnRleHQuY2lwaGVydGV4dCk7XG4gICAgICAgIHJldHVybiBwbGFpbnRleHQ7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIENvbnZlcnRzIHNlcmlhbGl6ZWQgY2lwaGVydGV4dCB0byBDaXBoZXJQYXJhbXMsXG4gICAgICAgKiBlbHNlIGFzc3VtZWQgQ2lwaGVyUGFyYW1zIGFscmVhZHkgYW5kIHJldHVybnMgY2lwaGVydGV4dCB1bmNoYW5nZWQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN8c3RyaW5nfSBjaXBoZXJ0ZXh0IFRoZSBjaXBoZXJ0ZXh0LlxuICAgICAgICogQHBhcmFtIHtGb3JtYXR0ZXJ9IGZvcm1hdCBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byB1c2UgdG8gcGFyc2Ugc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIHVuc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuX3BhcnNlKGNpcGhlcnRleHRTdHJpbmdPclBhcmFtcywgZm9ybWF0KTtcbiAgICAgICAqL1xuICAgICAgX3BhcnNlOiBmdW5jdGlvbiBfcGFyc2UoY2lwaGVydGV4dCwgZm9ybWF0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2lwaGVydGV4dCA9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBmb3JtYXQucGFyc2UoY2lwaGVydGV4dCwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNpcGhlcnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBLZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiBuYW1lc3BhY2UuXG4gICAgICovXG5cbiAgICB2YXIgQ19rZGYgPSBDLmtkZiA9IHt9O1xuICAgIC8qKlxuICAgICAqIE9wZW5TU0wga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG4gICAgICovXG5cbiAgICB2YXIgT3BlblNTTEtkZiA9IENfa2RmLk9wZW5TU0wgPSB7XG4gICAgICAvKipcbiAgICAgICAqIERlcml2ZXMgYSBrZXkgYW5kIElWIGZyb20gYSBwYXNzd29yZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIHRvIGRlcml2ZSBmcm9tLlxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGtleVNpemUgVGhlIHNpemUgaW4gd29yZHMgb2YgdGhlIGtleSB0byBnZW5lcmF0ZS5cbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpdlNpemUgVGhlIHNpemUgaW4gd29yZHMgb2YgdGhlIElWIHRvIGdlbmVyYXRlLlxuICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IChPcHRpb25hbCkgQSA2NC1iaXQgc2FsdCB0byB1c2UuIElmIG9taXR0ZWQsIGEgc2FsdCB3aWxsIGJlIGdlbmVyYXRlZCByYW5kb21seS5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IEEgY2lwaGVyIHBhcmFtcyBvYmplY3Qgd2l0aCB0aGUga2V5LCBJViwgYW5kIHNhbHQuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciBkZXJpdmVkUGFyYW1zID0gQ3J5cHRvSlMua2RmLk9wZW5TU0wuZXhlY3V0ZSgnUGFzc3dvcmQnLCAyNTYvMzIsIDEyOC8zMik7XG4gICAgICAgKiAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBDcnlwdG9KUy5rZGYuT3BlblNTTC5leGVjdXRlKCdQYXNzd29yZCcsIDI1Ni8zMiwgMTI4LzMyLCAnc2FsdHNhbHQnKTtcbiAgICAgICAqL1xuICAgICAgZXhlY3V0ZTogZnVuY3Rpb24gZXhlY3V0ZShwYXNzd29yZCwga2V5U2l6ZSwgaXZTaXplLCBzYWx0KSB7XG4gICAgICAgIC8vIEdlbmVyYXRlIHJhbmRvbSBzYWx0XG4gICAgICAgIGlmICghc2FsdCkge1xuICAgICAgICAgIHNhbHQgPSBXb3JkQXJyYXkucmFuZG9tKDY0IC8gOCk7XG4gICAgICAgIH0gLy8gRGVyaXZlIGtleSBhbmQgSVZcblxuXG4gICAgICAgIHZhciBrZXkgPSBFdnBLREYuY3JlYXRlKHtcbiAgICAgICAgICBrZXlTaXplOiBrZXlTaXplICsgaXZTaXplXG4gICAgICAgIH0pLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpOyAvLyBTZXBhcmF0ZSBrZXkgYW5kIElWXG5cbiAgICAgICAgdmFyIGl2ID0gV29yZEFycmF5LmNyZWF0ZShrZXkud29yZHMuc2xpY2Uoa2V5U2l6ZSksIGl2U2l6ZSAqIDQpO1xuICAgICAgICBrZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDsgLy8gUmV0dXJuIHBhcmFtc1xuXG4gICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICBpdjogaXYsXG4gICAgICAgICAgc2FsdDogc2FsdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEEgc2VyaWFsaXphYmxlIGNpcGhlciB3cmFwcGVyIHRoYXQgZGVyaXZlcyB0aGUga2V5IGZyb20gYSBwYXNzd29yZCxcbiAgICAgKiBhbmQgcmV0dXJucyBjaXBoZXJ0ZXh0IGFzIGEgc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuICAgICAqL1xuXG4gICAgdmFyIFBhc3N3b3JkQmFzZWRDaXBoZXIgPSBDX2xpYi5QYXNzd29yZEJhc2VkQ2lwaGVyID0gU2VyaWFsaXphYmxlQ2lwaGVyLmV4dGVuZCh7XG4gICAgICAvKipcbiAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICAgICAqXG4gICAgICAgKiBAcHJvcGVydHkge0tERn0ga2RmIFRoZSBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiB0byB1c2UgdG8gZ2VuZXJhdGUgYSBrZXkgYW5kIElWIGZyb20gYSBwYXNzd29yZC4gRGVmYXVsdDogT3BlblNTTFxuICAgICAgICovXG4gICAgICBjZmc6IFNlcmlhbGl6YWJsZUNpcGhlci5jZmcuZXh0ZW5kKHtcbiAgICAgICAga2RmOiBPcGVuU1NMS2RmXG4gICAgICB9KSxcblxuICAgICAgLyoqXG4gICAgICAgKiBFbmNyeXB0cyBhIG1lc3NhZ2UgdXNpbmcgYSBwYXNzd29yZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBBIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsICdwYXNzd29yZCcpO1xuICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwgJ3Bhc3N3b3JkJywgeyBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuICAgICAgICovXG4gICAgICBlbmNyeXB0OiBmdW5jdGlvbiBlbmNyeXB0KGNpcGhlciwgbWVzc2FnZSwgcGFzc3dvcmQsIGNmZykge1xuICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcbiAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7IC8vIERlcml2ZSBrZXkgYW5kIG90aGVyIHBhcmFtc1xuXG4gICAgICAgIHZhciBkZXJpdmVkUGFyYW1zID0gY2ZnLmtkZi5leGVjdXRlKHBhc3N3b3JkLCBjaXBoZXIua2V5U2l6ZSwgY2lwaGVyLml2U2l6ZSk7IC8vIEFkZCBJViB0byBjb25maWdcblxuICAgICAgICBjZmcuaXYgPSBkZXJpdmVkUGFyYW1zLml2OyAvLyBFbmNyeXB0XG5cbiAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBTZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdC5jYWxsKHRoaXMsIGNpcGhlciwgbWVzc2FnZSwgZGVyaXZlZFBhcmFtcy5rZXksIGNmZyk7IC8vIE1peCBpbiBkZXJpdmVkIHBhcmFtc1xuXG4gICAgICAgIGNpcGhlcnRleHQubWl4SW4oZGVyaXZlZFBhcmFtcyk7XG4gICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBEZWNyeXB0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQgdXNpbmcgYSBwYXNzd29yZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cbiAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dCB0byBkZWNyeXB0LlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcGxhaW50ZXh0LlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZGVjcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgZm9ybWF0dGVkQ2lwaGVydGV4dCwgJ3Bhc3N3b3JkJywgeyBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBjaXBoZXJ0ZXh0UGFyYW1zLCAncGFzc3dvcmQnLCB7IGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG4gICAgICAgKi9cbiAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uIGRlY3J5cHQoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBwYXNzd29yZCwgY2ZnKSB7XG4gICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTsgLy8gQ29udmVydCBzdHJpbmcgdG8gQ2lwaGVyUGFyYW1zXG5cbiAgICAgICAgY2lwaGVydGV4dCA9IHRoaXMuX3BhcnNlKGNpcGhlcnRleHQsIGNmZy5mb3JtYXQpOyAvLyBEZXJpdmUga2V5IGFuZCBvdGhlciBwYXJhbXNcblxuICAgICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IGNmZy5rZGYuZXhlY3V0ZShwYXNzd29yZCwgY2lwaGVyLmtleVNpemUsIGNpcGhlci5pdlNpemUsIGNpcGhlcnRleHQuc2FsdCk7IC8vIEFkZCBJViB0byBjb25maWdcblxuICAgICAgICBjZmcuaXYgPSBkZXJpdmVkUGFyYW1zLml2OyAvLyBEZWNyeXB0XG5cbiAgICAgICAgdmFyIHBsYWludGV4dCA9IFNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0LmNhbGwodGhpcywgY2lwaGVyLCBjaXBoZXJ0ZXh0LCBkZXJpdmVkUGFyYW1zLmtleSwgY2ZnKTtcbiAgICAgICAgcmV0dXJuIHBsYWludGV4dDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSgpO1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NTc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oNTc0Myk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNjk5Mik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMTUzOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oOTEzNSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjk5MCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oODkyNyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzEwNSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAzNSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDM0NSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzE3NCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjg0Nik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDczMSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzIwOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNjMxOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oODg2Nyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzc4OSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzczOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oOTM2OCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDQ4Myk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjA1Nik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzQ2Mik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNjc4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3NDYyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzODI0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MDIxKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyOTc0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MDE2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5NzE0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MDQyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5NjAwKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMjIyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1NjEpO1xuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAvKmdsb2JhbHMgd2luZG93LCBnbG9iYWwsIHJlcXVpcmUqL1xuXG4gIC8qKlxuICAgKiBDcnlwdG9KUyBjb3JlIGNvbXBvbmVudHMuXG4gICAqL1xuICB2YXIgQ3J5cHRvSlMgPSBDcnlwdG9KUyB8fCBmdW5jdGlvbiAoTWF0aCwgdW5kZWZpbmVkKSB7XG4gICAgdmFyIGNyeXB0bzsgLy8gTmF0aXZlIGNyeXB0byBmcm9tIHdpbmRvdyAoQnJvd3NlcilcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY3J5cHRvKSB7XG4gICAgICBjcnlwdG8gPSB3aW5kb3cuY3J5cHRvO1xuICAgIH0gLy8gTmF0aXZlIGNyeXB0byBpbiB3ZWIgd29ya2VyIChCcm93c2VyKVxuXG5cbiAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYuY3J5cHRvKSB7XG4gICAgICBjcnlwdG8gPSBzZWxmLmNyeXB0bztcbiAgICB9IC8vIE5hdGl2ZSBjcnlwdG8gZnJvbSB3b3JrZXJcblxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzLmNyeXB0bykge1xuICAgICAgY3J5cHRvID0gZ2xvYmFsVGhpcy5jcnlwdG87XG4gICAgfSAvLyBOYXRpdmUgKGV4cGVyaW1lbnRhbCBJRSAxMSkgY3J5cHRvIGZyb20gd2luZG93IChCcm93c2VyKVxuXG5cbiAgICBpZiAoIWNyeXB0byAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubXNDcnlwdG8pIHtcbiAgICAgIGNyeXB0byA9IHdpbmRvdy5tc0NyeXB0bztcbiAgICB9IC8vIE5hdGl2ZSBjcnlwdG8gZnJvbSBnbG9iYWwgKE5vZGVKUylcblxuXG4gICAgaWYgKCFjcnlwdG8gJiYgdHlwZW9mIF9fd2VicGFja19yZXF1aXJlX18uZyAhPT0gJ3VuZGVmaW5lZCcgJiYgX193ZWJwYWNrX3JlcXVpcmVfXy5nLmNyeXB0bykge1xuICAgICAgY3J5cHRvID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmNyeXB0bztcbiAgICB9IC8vIE5hdGl2ZSBjcnlwdG8gaW1wb3J0IHZpYSByZXF1aXJlIChOb2RlSlMpXG5cblxuICAgIGlmICghY3J5cHRvICYmIFwiZnVuY3Rpb25cIiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3J5cHRvID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDgwKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge31cbiAgICB9XG4gICAgLypcbiAgICAgKiBDcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcHNldWRvcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgICAgKlxuICAgICAqIEFzIE1hdGgucmFuZG9tKCkgaXMgY3J5cHRvZ3JhcGhpY2FsbHkgbm90IHNhZmUgdG8gdXNlXG4gICAgICovXG5cblxuICAgIHZhciBjcnlwdG9TZWN1cmVSYW5kb21JbnQgPSBmdW5jdGlvbiBjcnlwdG9TZWN1cmVSYW5kb21JbnQoKSB7XG4gICAgICBpZiAoY3J5cHRvKSB7XG4gICAgICAgIC8vIFVzZSBnZXRSYW5kb21WYWx1ZXMgbWV0aG9kIChCcm93c2VyKVxuICAgICAgICBpZiAodHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgIH0gLy8gVXNlIHJhbmRvbUJ5dGVzIG1ldGhvZCAoTm9kZUpTKVxuXG5cbiAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyg0KS5yZWFkSW50MzJMRSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4nKTtcbiAgICB9O1xuICAgIC8qXG4gICAgICogTG9jYWwgcG9seWZpbGwgb2YgT2JqZWN0LmNyZWF0ZVxuICAgICAgKi9cblxuXG4gICAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gRigpIHt9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBzdWJ0eXBlO1xuICAgICAgICBGLnByb3RvdHlwZSA9IG9iajtcbiAgICAgICAgc3VidHlwZSA9IG5ldyBGKCk7XG4gICAgICAgIEYucHJvdG90eXBlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG4gICAgICB9O1xuICAgIH0oKTtcbiAgICAvKipcbiAgICAgKiBDcnlwdG9KUyBuYW1lc3BhY2UuXG4gICAgICovXG5cblxuICAgIHZhciBDID0ge307XG4gICAgLyoqXG4gICAgICogTGlicmFyeSBuYW1lc3BhY2UuXG4gICAgICovXG5cbiAgICB2YXIgQ19saWIgPSBDLmxpYiA9IHt9O1xuICAgIC8qKlxuICAgICAqIEJhc2Ugb2JqZWN0IGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlLlxuICAgICAqL1xuXG4gICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBuZXcgb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGlzIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG92ZXJyaWRlcyBQcm9wZXJ0aWVzIHRvIGNvcHkgaW50byB0aGUgbmV3IG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgbmV3IG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgdmFyIE15VHlwZSA9IENyeXB0b0pTLmxpYi5CYXNlLmV4dGVuZCh7XG4gICAgICAgICAqICAgICAgICAgZmllbGQ6ICd2YWx1ZScsXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAqICAgICAgICAgfVxuICAgICAgICAgKiAgICAgfSk7XG4gICAgICAgICAqL1xuICAgICAgICBleHRlbmQ6IGZ1bmN0aW9uIGV4dGVuZChvdmVycmlkZXMpIHtcbiAgICAgICAgICAvLyBTcGF3blxuICAgICAgICAgIHZhciBzdWJ0eXBlID0gY3JlYXRlKHRoaXMpOyAvLyBBdWdtZW50XG5cbiAgICAgICAgICBpZiAob3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICBzdWJ0eXBlLm1peEluKG92ZXJyaWRlcyk7XG4gICAgICAgICAgfSAvLyBDcmVhdGUgZGVmYXVsdCBpbml0aWFsaXplclxuXG5cbiAgICAgICAgICBpZiAoIXN1YnR5cGUuaGFzT3duUHJvcGVydHkoJ2luaXQnKSB8fCB0aGlzLmluaXQgPT09IHN1YnR5cGUuaW5pdCkge1xuICAgICAgICAgICAgc3VidHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBzdWJ0eXBlLiRzdXBlci5pbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gLy8gSW5pdGlhbGl6ZXIncyBwcm90b3R5cGUgaXMgdGhlIHN1YnR5cGUgb2JqZWN0XG5cblxuICAgICAgICAgIHN1YnR5cGUuaW5pdC5wcm90b3R5cGUgPSBzdWJ0eXBlOyAvLyBSZWZlcmVuY2Ugc3VwZXJ0eXBlXG5cbiAgICAgICAgICBzdWJ0eXBlLiRzdXBlciA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV4dGVuZHMgdGhpcyBvYmplY3QgYW5kIHJ1bnMgdGhlIGluaXQgbWV0aG9kLlxuICAgICAgICAgKiBBcmd1bWVudHMgdG8gY3JlYXRlKCkgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICB2YXIgaW5zdGFuY2UgPSBNeVR5cGUuY3JlYXRlKCk7XG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLmV4dGVuZCgpO1xuICAgICAgICAgIGluc3RhbmNlLmluaXQuYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBhZGQgc29tZSBsb2dpYyB3aGVuIHlvdXIgb2JqZWN0cyBhcmUgY3JlYXRlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuICAgICAgICAgKiAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICogICAgICAgICAgICAgLy8gLi4uXG4gICAgICAgICAqICAgICAgICAgfVxuICAgICAgICAgKiAgICAgfSk7XG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge30sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIGludG8gdGhpcyBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIHRvIG1peCBpbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIE15VHlwZS5taXhJbih7XG4gICAgICAgICAqICAgICAgICAgZmllbGQ6ICd2YWx1ZSdcbiAgICAgICAgICogICAgIH0pO1xuICAgICAgICAgKi9cbiAgICAgICAgbWl4SW46IGZ1bmN0aW9uIG1peEluKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBJRSB3b24ndCBjb3B5IHRvU3RyaW5nIHVzaW5nIHRoZSBsb29wIGFib3ZlXG5cblxuICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICB0aGlzLnRvU3RyaW5nID0gcHJvcGVydGllcy50b1N0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBjbG9uZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIHZhciBjbG9uZSA9IGluc3RhbmNlLmNsb25lKCk7XG4gICAgICAgICAqL1xuICAgICAgICBjbG9uZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0oKTtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG4gICAgICpcbiAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWdCeXRlcyBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoaXMgd29yZCBhcnJheS5cbiAgICAgKi9cblxuXG4gICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheSA9IEJhc2UuZXh0ZW5kKHtcbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gc2lnQnl0ZXMgKE9wdGlvbmFsKSBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoZSB3b3Jkcy5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoKTtcbiAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddKTtcbiAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddLCA2KTtcbiAgICAgICAqL1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCh3b3Jkcywgc2lnQnl0ZXMpIHtcbiAgICAgICAgd29yZHMgPSB0aGlzLndvcmRzID0gd29yZHMgfHwgW107XG5cbiAgICAgICAgaWYgKHNpZ0J5dGVzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuc2lnQnl0ZXMgPSBzaWdCeXRlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogNDtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDb252ZXJ0cyB0aGlzIHdvcmQgYXJyYXkgdG8gYSBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtFbmNvZGVyfSBlbmNvZGVyIChPcHRpb25hbCkgVGhlIGVuY29kaW5nIHN0cmF0ZWd5IHRvIHVzZS4gRGVmYXVsdDogQ3J5cHRvSlMuZW5jLkhleFxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZ2lmaWVkIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheSArICcnO1xuICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoKTtcbiAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcbiAgICAgICAqL1xuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgICAgICAgcmV0dXJuIChlbmNvZGVyIHx8IEhleCkuc3RyaW5naWZ5KHRoaXMpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDb25jYXRlbmF0ZXMgYSB3b3JkIGFycmF5IHRvIHRoaXMgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5IHRvIGFwcGVuZC5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoaXMgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB3b3JkQXJyYXkxLmNvbmNhdCh3b3JkQXJyYXkyKTtcbiAgICAgICAqL1xuICAgICAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQod29yZEFycmF5KSB7XG4gICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICB2YXIgdGhpc1dvcmRzID0gdGhpcy53b3JkcztcbiAgICAgICAgdmFyIHRoYXRXb3JkcyA9IHdvcmRBcnJheS53b3JkcztcbiAgICAgICAgdmFyIHRoaXNTaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG4gICAgICAgIHZhciB0aGF0U2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7IC8vIENsYW1wIGV4Y2VzcyBiaXRzXG5cbiAgICAgICAgdGhpcy5jbGFtcCgpOyAvLyBDb25jYXRcblxuICAgICAgICBpZiAodGhpc1NpZ0J5dGVzICUgNCkge1xuICAgICAgICAgIC8vIENvcHkgb25lIGJ5dGUgYXQgYSB0aW1lXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0U2lnQnl0ZXM7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRoYXRCeXRlID0gdGhhdFdvcmRzW2kgPj4+IDJdID4+PiAyNCAtIGkgJSA0ICogOCAmIDB4ZmY7XG4gICAgICAgICAgICB0aGlzV29yZHNbdGhpc1NpZ0J5dGVzICsgaSA+Pj4gMl0gfD0gdGhhdEJ5dGUgPDwgMjQgLSAodGhpc1NpZ0J5dGVzICsgaSkgJSA0ICogODtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ29weSBvbmUgd29yZCBhdCBhIHRpbWVcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoYXRTaWdCeXRlczsgaiArPSA0KSB7XG4gICAgICAgICAgICB0aGlzV29yZHNbdGhpc1NpZ0J5dGVzICsgaiA+Pj4gMl0gPSB0aGF0V29yZHNbaiA+Pj4gMl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaWdCeXRlcyArPSB0aGF0U2lnQnl0ZXM7IC8vIENoYWluYWJsZVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBSZW1vdmVzIGluc2lnbmlmaWNhbnQgYml0cy5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcbiAgICAgICAqL1xuICAgICAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKCkge1xuICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgdmFyIHdvcmRzID0gdGhpcy53b3JkcztcbiAgICAgICAgdmFyIHNpZ0J5dGVzID0gdGhpcy5zaWdCeXRlczsgLy8gQ2xhbXBcblxuICAgICAgICB3b3Jkc1tzaWdCeXRlcyA+Pj4gMl0gJj0gMHhmZmZmZmZmZiA8PCAzMiAtIHNpZ0J5dGVzICUgNCAqIDg7XG4gICAgICAgIHdvcmRzLmxlbmd0aCA9IE1hdGguY2VpbChzaWdCeXRlcyAvIDQpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgY2xvbmUuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGNsb25lID0gd29yZEFycmF5LmNsb25lKCk7XG4gICAgICAgKi9cbiAgICAgIGNsb25lOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuICAgICAgICBjbG9uZS53b3JkcyA9IHRoaXMud29yZHMuc2xpY2UoMCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIHdvcmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIGJ5dGVzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuQnl0ZXMgVGhlIG51bWJlciBvZiByYW5kb20gYnl0ZXMgdG8gZ2VuZXJhdGUuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcmFuZG9tIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbSgxNik7XG4gICAgICAgKi9cbiAgICAgIHJhbmRvbTogZnVuY3Rpb24gcmFuZG9tKG5CeXRlcykge1xuICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CeXRlczsgaSArPSA0KSB7XG4gICAgICAgICAgd29yZHMucHVzaChjcnlwdG9TZWN1cmVSYW5kb21JbnQoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBuQnl0ZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEVuY29kZXIgbmFtZXNwYWNlLlxuICAgICAqL1xuXG4gICAgdmFyIENfZW5jID0gQy5lbmMgPSB7fTtcbiAgICAvKipcbiAgICAgKiBIZXggZW5jb2Rpbmcgc3RyYXRlZ3kuXG4gICAgICovXG5cbiAgICB2YXIgSGV4ID0gQ19lbmMuSGV4ID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBoZXggc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4IHN0cmluZy5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG4gICAgICAgKi9cbiAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KHdvcmRBcnJheSkge1xuICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7IC8vIENvbnZlcnRcblxuICAgICAgICB2YXIgaGV4Q2hhcnMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcbiAgICAgICAgICB2YXIgYml0ZSA9IHdvcmRzW2kgPj4+IDJdID4+PiAyNCAtIGkgJSA0ICogOCAmIDB4ZmY7XG4gICAgICAgICAgaGV4Q2hhcnMucHVzaCgoYml0ZSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlICYgMHgwZikudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoZXhDaGFycy5qb2luKCcnKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQ29udmVydHMgYSBoZXggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4U3RyIFRoZSBoZXggc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGhleFN0cmluZyk7XG4gICAgICAgKi9cbiAgICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShoZXhTdHIpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRcbiAgICAgICAgdmFyIGhleFN0ckxlbmd0aCA9IGhleFN0ci5sZW5ndGg7IC8vIENvbnZlcnRcblxuICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhleFN0ckxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgd29yZHNbaSA+Pj4gM10gfD0gcGFyc2VJbnQoaGV4U3RyLnN1YnN0cihpLCAyKSwgMTYpIDw8IDI0IC0gaSAlIDggKiA0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgaGV4U3RyTGVuZ3RoIC8gMik7XG4gICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBMYXRpbjEgZW5jb2Rpbmcgc3RyYXRlZ3kuXG4gICAgICovXG5cbiAgICB2YXIgTGF0aW4xID0gQ19lbmMuTGF0aW4xID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBMYXRpbjEgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgTGF0aW4xIHN0cmluZy5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGxhdGluMVN0cmluZyA9IENyeXB0b0pTLmVuYy5MYXRpbjEuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG4gICAgICAgKi9cbiAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KHdvcmRBcnJheSkge1xuICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7IC8vIENvbnZlcnRcblxuICAgICAgICB2YXIgbGF0aW4xQ2hhcnMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcbiAgICAgICAgICB2YXIgYml0ZSA9IHdvcmRzW2kgPj4+IDJdID4+PiAyNCAtIGkgJSA0ICogOCAmIDB4ZmY7XG4gICAgICAgICAgbGF0aW4xQ2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJpdGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYXRpbjFDaGFycy5qb2luKCcnKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQ29udmVydHMgYSBMYXRpbjEgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF0aW4xU3RyIFRoZSBMYXRpbjEgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGxhdGluMVN0cmluZyk7XG4gICAgICAgKi9cbiAgICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShsYXRpbjFTdHIpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRcbiAgICAgICAgdmFyIGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7IC8vIENvbnZlcnRcblxuICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhdGluMVN0ckxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gKGxhdGluMVN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikgPDwgMjQgLSBpICUgNCAqIDg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBsYXRpbjFTdHJMZW5ndGgpO1xuICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogVVRGLTggZW5jb2Rpbmcgc3RyYXRlZ3kuXG4gICAgICovXG5cbiAgICB2YXIgVXRmOCA9IENfZW5jLlV0ZjggPSB7XG4gICAgICAvKipcbiAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi04IHN0cmluZy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi04IHN0cmluZy5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIHV0ZjhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmOC5zdHJpbmdpZnkod29yZEFycmF5KTtcbiAgICAgICAqL1xuICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkod29yZEFycmF5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoTGF0aW4xLnN0cmluZ2lmeSh3b3JkQXJyYXkpKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEYtOCBkYXRhJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQ29udmVydHMgYSBVVEYtOCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGY4U3RyIFRoZSBVVEYtOCBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHV0ZjhTdHJpbmcpO1xuICAgICAgICovXG4gICAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UodXRmOFN0cikge1xuICAgICAgICByZXR1cm4gTGF0aW4xLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh1dGY4U3RyKSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogQWJzdHJhY3QgYnVmZmVyZWQgYmxvY2sgYWxnb3JpdGhtIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogVGhlIHByb3BlcnR5IGJsb2NrU2l6ZSBtdXN0IGJlIGltcGxlbWVudGVkIGluIGEgY29uY3JldGUgc3VidHlwZS5cbiAgICAgKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfbWluQnVmZmVyU2l6ZSBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBrZXB0IHVucHJvY2Vzc2VkIGluIHRoZSBidWZmZXIuIERlZmF1bHQ6IDBcbiAgICAgKi9cblxuICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobSA9IEJhc2UuZXh0ZW5kKHtcbiAgICAgIC8qKlxuICAgICAgICogUmVzZXRzIHRoaXMgYmxvY2sgYWxnb3JpdGhtJ3MgZGF0YSBidWZmZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldCgpO1xuICAgICAgICovXG4gICAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG4gICAgICAgIHRoaXMuX2RhdGEgPSBuZXcgV29yZEFycmF5LmluaXQoKTtcbiAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyA9IDA7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIEFkZHMgbmV3IGRhdGEgdG8gdGhpcyBibG9jayBhbGdvcml0aG0ncyBidWZmZXIuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGFwcGVuZC4gU3RyaW5ncyBhcmUgY29udmVydGVkIHRvIGEgV29yZEFycmF5IHVzaW5nIFVURi04LlxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCgnZGF0YScpO1xuICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCh3b3JkQXJyYXkpO1xuICAgICAgICovXG4gICAgICBfYXBwZW5kOiBmdW5jdGlvbiBfYXBwZW5kKGRhdGEpIHtcbiAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gV29yZEFycmF5LCBlbHNlIGFzc3VtZSBXb3JkQXJyYXkgYWxyZWFkeVxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBkYXRhID0gVXRmOC5wYXJzZShkYXRhKTtcbiAgICAgICAgfSAvLyBBcHBlbmRcblxuXG4gICAgICAgIHRoaXMuX2RhdGEuY29uY2F0KGRhdGEpO1xuXG4gICAgICAgIHRoaXMuX25EYXRhQnl0ZXMgKz0gZGF0YS5zaWdCeXRlcztcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogUHJvY2Vzc2VzIGF2YWlsYWJsZSBkYXRhIGJsb2Nrcy5cbiAgICAgICAqXG4gICAgICAgKiBUaGlzIG1ldGhvZCBpbnZva2VzIF9kb1Byb2Nlc3NCbG9jayhvZmZzZXQpLCB3aGljaCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGEgY29uY3JldGUgc3VidHlwZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvRmx1c2ggV2hldGhlciBhbGwgYmxvY2tzIGFuZCBwYXJ0aWFsIGJsb2NrcyBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHByb2Nlc3NlZCBkYXRhLlxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcygpO1xuICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcyghISdmbHVzaCcpO1xuICAgICAgICovXG4gICAgICBfcHJvY2VzczogZnVuY3Rpb24gX3Byb2Nlc3MoZG9GbHVzaCkge1xuICAgICAgICB2YXIgcHJvY2Vzc2VkV29yZHM7IC8vIFNob3J0Y3V0c1xuXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG4gICAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuICAgICAgICB2YXIgYmxvY2tTaXplID0gdGhpcy5ibG9ja1NpemU7XG4gICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7IC8vIENvdW50IGJsb2NrcyByZWFkeVxuXG4gICAgICAgIHZhciBuQmxvY2tzUmVhZHkgPSBkYXRhU2lnQnl0ZXMgLyBibG9ja1NpemVCeXRlcztcblxuICAgICAgICBpZiAoZG9GbHVzaCkge1xuICAgICAgICAgIC8vIFJvdW5kIHVwIHRvIGluY2x1ZGUgcGFydGlhbCBibG9ja3NcbiAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLmNlaWwobkJsb2Nrc1JlYWR5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSb3VuZCBkb3duIHRvIGluY2x1ZGUgb25seSBmdWxsIGJsb2NrcyxcbiAgICAgICAgICAvLyBsZXNzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIGJ1ZmZlclxuICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGgubWF4KChuQmxvY2tzUmVhZHkgfCAwKSAtIHRoaXMuX21pbkJ1ZmZlclNpemUsIDApO1xuICAgICAgICB9IC8vIENvdW50IHdvcmRzIHJlYWR5XG5cblxuICAgICAgICB2YXIgbldvcmRzUmVhZHkgPSBuQmxvY2tzUmVhZHkgKiBibG9ja1NpemU7IC8vIENvdW50IGJ5dGVzIHJlYWR5XG5cbiAgICAgICAgdmFyIG5CeXRlc1JlYWR5ID0gTWF0aC5taW4obldvcmRzUmVhZHkgKiA0LCBkYXRhU2lnQnl0ZXMpOyAvLyBQcm9jZXNzIGJsb2Nrc1xuXG4gICAgICAgIGlmIChuV29yZHNSZWFkeSkge1xuICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IG5Xb3Jkc1JlYWR5OyBvZmZzZXQgKz0gYmxvY2tTaXplKSB7XG4gICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWFsZ29yaXRobSBsb2dpY1xuICAgICAgICAgICAgdGhpcy5fZG9Qcm9jZXNzQmxvY2soZGF0YVdvcmRzLCBvZmZzZXQpO1xuICAgICAgICAgIH0gLy8gUmVtb3ZlIHByb2Nlc3NlZCB3b3Jkc1xuXG5cbiAgICAgICAgICBwcm9jZXNzZWRXb3JkcyA9IGRhdGFXb3Jkcy5zcGxpY2UoMCwgbldvcmRzUmVhZHkpO1xuICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gbkJ5dGVzUmVhZHk7XG4gICAgICAgIH0gLy8gUmV0dXJuIHByb2Nlc3NlZCB3b3Jkc1xuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdChwcm9jZXNzZWRXb3JkcywgbkJ5dGVzUmVhZHkpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBjbG9uZS5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgY2xvbmUgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLmNsb25lKCk7XG4gICAgICAgKi9cbiAgICAgIGNsb25lOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuICAgICAgICBjbG9uZS5fZGF0YSA9IHRoaXMuX2RhdGEuY2xvbmUoKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgfSxcbiAgICAgIF9taW5CdWZmZXJTaXplOiAwXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogQWJzdHJhY3QgaGFzaGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGhhc2hlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMTYgKDUxMiBiaXRzKVxuICAgICAqL1xuXG4gICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlciA9IEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uZXh0ZW5kKHtcbiAgICAgIC8qKlxuICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAgICovXG4gICAgICBjZmc6IEJhc2UuZXh0ZW5kKCksXG5cbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGhhc2hlci5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCBjb21wdXRhdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgaGFzaGVyID0gQ3J5cHRvSlMuYWxnby5TSEEyNTYuY3JlYXRlKCk7XG4gICAgICAgKi9cbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoY2ZnKSB7XG4gICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpOyAvLyBTZXQgaW5pdGlhbCB2YWx1ZXNcblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFJlc2V0cyB0aGlzIGhhc2hlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICBoYXNoZXIucmVzZXQoKTtcbiAgICAgICAqL1xuICAgICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7IC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cbiAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVcGRhdGVzIHRoaXMgaGFzaGVyIHdpdGggYSBtZXNzYWdlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7SGFzaGVyfSBUaGlzIGhhc2hlci5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICBoYXNoZXIudXBkYXRlKCdtZXNzYWdlJyk7XG4gICAgICAgKiAgICAgaGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuICAgICAgICovXG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShtZXNzYWdlVXBkYXRlKSB7XG4gICAgICAgIC8vIEFwcGVuZFxuICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7IC8vIFVwZGF0ZSB0aGUgaGFzaFxuXG5cbiAgICAgICAgdGhpcy5fcHJvY2VzcygpOyAvLyBDaGFpbmFibGVcblxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBGaW5hbGl6ZXMgdGhlIGhhc2ggY29tcHV0YXRpb24uXG4gICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSAoT3B0aW9uYWwpIEEgZmluYWwgbWVzc2FnZSB1cGRhdGUuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgaGFzaCA9IGhhc2hlci5maW5hbGl6ZSgpO1xuICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCdtZXNzYWdlJyk7XG4gICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcbiAgICAgICAqL1xuICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIGZpbmFsaXplKG1lc3NhZ2VVcGRhdGUpIHtcbiAgICAgICAgLy8gRmluYWwgbWVzc2FnZSB1cGRhdGVcbiAgICAgICAgaWYgKG1lc3NhZ2VVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG4gICAgICAgIH0gLy8gUGVyZm9ybSBjb25jcmV0ZS1oYXNoZXIgbG9naWNcblxuXG4gICAgICAgIHZhciBoYXNoID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG4gICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgfSxcbiAgICAgIGJsb2NrU2l6ZTogNTEyIC8gMzIsXG5cbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIGEgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uU0hBMjU2KTtcbiAgICAgICAqL1xuICAgICAgX2NyZWF0ZUhlbHBlcjogZnVuY3Rpb24gX2NyZWF0ZUhlbHBlcihoYXNoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBjZmcpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IGhhc2hlci5pbml0KGNmZykuZmluYWxpemUobWVzc2FnZSk7XG4gICAgICAgIH07XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIHVzZSBpbiB0aGlzIEhNQUMgaGVscGVyLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciBIbWFjU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihDcnlwdG9KUy5hbGdvLlNIQTI1Nik7XG4gICAgICAgKi9cbiAgICAgIF9jcmVhdGVIbWFjSGVscGVyOiBmdW5jdGlvbiBfY3JlYXRlSG1hY0hlbHBlcihoYXNoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IENfYWxnby5ITUFDLmluaXQoaGFzaGVyLCBrZXkpLmZpbmFsaXplKG1lc3NhZ2UpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEFsZ29yaXRobSBuYW1lc3BhY2UuXG4gICAgICovXG5cbiAgICB2YXIgQ19hbGdvID0gQy5hbGdvID0ge307XG4gICAgcmV0dXJuIEM7XG4gIH0oTWF0aCk7XG5cbiAgcmV0dXJuIENyeXB0b0pTO1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NTA4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk2MDApO1xuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NykpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2hvcnRjdXRzXG4gICAgdmFyIEMgPSBDcnlwdG9KUztcbiAgICB2YXIgQ19saWIgPSBDLmxpYjtcbiAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuICAgIC8qKlxuICAgICAqIEJhc2U2NCBlbmNvZGluZyBzdHJhdGVneS5cbiAgICAgKi9cblxuICAgIHZhciBCYXNlNjQgPSBDX2VuYy5CYXNlNjQgPSB7XG4gICAgICAvKipcbiAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIEJhc2U2NCBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBCYXNlNjQgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgYmFzZTY0U3RyaW5nID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkod29yZEFycmF5KTtcbiAgICAgICAqL1xuICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkod29yZEFycmF5KSB7XG4gICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG4gICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcbiAgICAgICAgdmFyIG1hcCA9IHRoaXMuX21hcDsgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblxuICAgICAgICB3b3JkQXJyYXkuY2xhbXAoKTsgLy8gQ29udmVydFxuXG4gICAgICAgIHZhciBiYXNlNjRDaGFycyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMykge1xuICAgICAgICAgIHZhciBieXRlMSA9IHdvcmRzW2kgPj4+IDJdID4+PiAyNCAtIGkgJSA0ICogOCAmIDB4ZmY7XG4gICAgICAgICAgdmFyIGJ5dGUyID0gd29yZHNbaSArIDEgPj4+IDJdID4+PiAyNCAtIChpICsgMSkgJSA0ICogOCAmIDB4ZmY7XG4gICAgICAgICAgdmFyIGJ5dGUzID0gd29yZHNbaSArIDIgPj4+IDJdID4+PiAyNCAtIChpICsgMikgJSA0ICogOCAmIDB4ZmY7XG4gICAgICAgICAgdmFyIHRyaXBsZXQgPSBieXRlMSA8PCAxNiB8IGJ5dGUyIDw8IDggfCBieXRlMztcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNCAmJiBpICsgaiAqIDAuNzUgPCBzaWdCeXRlczsgaisrKSB7XG4gICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKG1hcC5jaGFyQXQodHJpcGxldCA+Pj4gNiAqICgzIC0gaikgJiAweDNmKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEFkZCBwYWRkaW5nXG5cblxuICAgICAgICB2YXIgcGFkZGluZ0NoYXIgPSBtYXAuY2hhckF0KDY0KTtcblxuICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcbiAgICAgICAgICB3aGlsZSAoYmFzZTY0Q2hhcnMubGVuZ3RoICUgNCkge1xuICAgICAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChwYWRkaW5nQ2hhcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJhc2U2NENoYXJzLmpvaW4oJycpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDb252ZXJ0cyBhIEJhc2U2NCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRTdHIgVGhlIEJhc2U2NCBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UoYmFzZTY0U3RyaW5nKTtcbiAgICAgICAqL1xuICAgICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGJhc2U2NFN0cikge1xuICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgdmFyIGJhc2U2NFN0ckxlbmd0aCA9IGJhc2U2NFN0ci5sZW5ndGg7XG4gICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7XG4gICAgICAgIHZhciByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcDtcblxuICAgICAgICBpZiAoIXJldmVyc2VNYXApIHtcbiAgICAgICAgICByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcCA9IFtdO1xuXG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXAubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHJldmVyc2VNYXBbbWFwLmNoYXJDb2RlQXQoaildID0gajtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSWdub3JlIHBhZGRpbmdcblxuXG4gICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXG4gICAgICAgIGlmIChwYWRkaW5nQ2hhcikge1xuICAgICAgICAgIHZhciBwYWRkaW5nSW5kZXggPSBiYXNlNjRTdHIuaW5kZXhPZihwYWRkaW5nQ2hhcik7XG5cbiAgICAgICAgICBpZiAocGFkZGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgYmFzZTY0U3RyTGVuZ3RoID0gcGFkZGluZ0luZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb252ZXJ0XG5cblxuICAgICAgICByZXR1cm4gcGFyc2VMb29wKGJhc2U2NFN0ciwgYmFzZTY0U3RyTGVuZ3RoLCByZXZlcnNlTWFwKTtcbiAgICAgIH0sXG4gICAgICBfbWFwOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCkge1xuICAgICAgdmFyIHdvcmRzID0gW107XG4gICAgICB2YXIgbkJ5dGVzID0gMDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYXNlNjRTdHJMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSAlIDQpIHtcbiAgICAgICAgICB2YXIgYml0czEgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkgLSAxKV0gPDwgaSAlIDQgKiAyO1xuICAgICAgICAgIHZhciBiaXRzMiA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSldID4+PiA2IC0gaSAlIDQgKiAyO1xuICAgICAgICAgIHZhciBiaXRzQ29tYmluZWQgPSBiaXRzMSB8IGJpdHMyO1xuICAgICAgICAgIHdvcmRzW25CeXRlcyA+Pj4gMl0gfD0gYml0c0NvbWJpbmVkIDw8IDI0IC0gbkJ5dGVzICUgNCAqIDg7XG4gICAgICAgICAgbkJ5dGVzKys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIG5CeXRlcyk7XG4gICAgfVxuICB9KSgpO1xuXG4gIHJldHVybiBDcnlwdG9KUy5lbmMuQmFzZTY0O1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NTkwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk2MDApO1xuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NykpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2hvcnRjdXRzXG4gICAgdmFyIEMgPSBDcnlwdG9KUztcbiAgICB2YXIgQ19saWIgPSBDLmxpYjtcbiAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuICAgIC8qKlxuICAgICAqIEJhc2U2NHVybCBlbmNvZGluZyBzdHJhdGVneS5cbiAgICAgKi9cblxuICAgIHZhciBCYXNlNjR1cmwgPSBDX2VuYy5CYXNlNjR1cmwgPSB7XG4gICAgICAvKipcbiAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIEJhc2U2NHVybCBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVybFNhZmUgV2hldGhlciB0byB1c2UgdXJsIHNhZmVcbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBCYXNlNjR1cmwgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgYmFzZTY0U3RyaW5nID0gQ3J5cHRvSlMuZW5jLkJhc2U2NHVybC5zdHJpbmdpZnkod29yZEFycmF5KTtcbiAgICAgICAqL1xuICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkod29yZEFycmF5LCB1cmxTYWZlKSB7XG4gICAgICAgIGlmICh1cmxTYWZlID09PSB2b2lkIDApIHtcbiAgICAgICAgICB1cmxTYWZlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG4gICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcbiAgICAgICAgdmFyIG1hcCA9IHVybFNhZmUgPyB0aGlzLl9zYWZlX21hcCA6IHRoaXMuX21hcDsgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblxuICAgICAgICB3b3JkQXJyYXkuY2xhbXAoKTsgLy8gQ29udmVydFxuXG4gICAgICAgIHZhciBiYXNlNjRDaGFycyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMykge1xuICAgICAgICAgIHZhciBieXRlMSA9IHdvcmRzW2kgPj4+IDJdID4+PiAyNCAtIGkgJSA0ICogOCAmIDB4ZmY7XG4gICAgICAgICAgdmFyIGJ5dGUyID0gd29yZHNbaSArIDEgPj4+IDJdID4+PiAyNCAtIChpICsgMSkgJSA0ICogOCAmIDB4ZmY7XG4gICAgICAgICAgdmFyIGJ5dGUzID0gd29yZHNbaSArIDIgPj4+IDJdID4+PiAyNCAtIChpICsgMikgJSA0ICogOCAmIDB4ZmY7XG4gICAgICAgICAgdmFyIHRyaXBsZXQgPSBieXRlMSA8PCAxNiB8IGJ5dGUyIDw8IDggfCBieXRlMztcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNCAmJiBpICsgaiAqIDAuNzUgPCBzaWdCeXRlczsgaisrKSB7XG4gICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKG1hcC5jaGFyQXQodHJpcGxldCA+Pj4gNiAqICgzIC0gaikgJiAweDNmKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEFkZCBwYWRkaW5nXG5cblxuICAgICAgICB2YXIgcGFkZGluZ0NoYXIgPSBtYXAuY2hhckF0KDY0KTtcblxuICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcbiAgICAgICAgICB3aGlsZSAoYmFzZTY0Q2hhcnMubGVuZ3RoICUgNCkge1xuICAgICAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChwYWRkaW5nQ2hhcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJhc2U2NENoYXJzLmpvaW4oJycpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDb252ZXJ0cyBhIEJhc2U2NHVybCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRTdHIgVGhlIEJhc2U2NHVybCBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtib29sZWFufSB1cmxTYWZlIFdoZXRoZXIgdG8gdXNlIHVybCBzYWZlXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5CYXNlNjR1cmwucGFyc2UoYmFzZTY0U3RyaW5nKTtcbiAgICAgICAqL1xuICAgICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGJhc2U2NFN0ciwgdXJsU2FmZSkge1xuICAgICAgICBpZiAodXJsU2FmZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgdXJsU2FmZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgdmFyIGJhc2U2NFN0ckxlbmd0aCA9IGJhc2U2NFN0ci5sZW5ndGg7XG4gICAgICAgIHZhciBtYXAgPSB1cmxTYWZlID8gdGhpcy5fc2FmZV9tYXAgOiB0aGlzLl9tYXA7XG4gICAgICAgIHZhciByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcDtcblxuICAgICAgICBpZiAoIXJldmVyc2VNYXApIHtcbiAgICAgICAgICByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcCA9IFtdO1xuXG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXAubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHJldmVyc2VNYXBbbWFwLmNoYXJDb2RlQXQoaildID0gajtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSWdub3JlIHBhZGRpbmdcblxuXG4gICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXG4gICAgICAgIGlmIChwYWRkaW5nQ2hhcikge1xuICAgICAgICAgIHZhciBwYWRkaW5nSW5kZXggPSBiYXNlNjRTdHIuaW5kZXhPZihwYWRkaW5nQ2hhcik7XG5cbiAgICAgICAgICBpZiAocGFkZGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgYmFzZTY0U3RyTGVuZ3RoID0gcGFkZGluZ0luZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb252ZXJ0XG5cblxuICAgICAgICByZXR1cm4gcGFyc2VMb29wKGJhc2U2NFN0ciwgYmFzZTY0U3RyTGVuZ3RoLCByZXZlcnNlTWFwKTtcbiAgICAgIH0sXG4gICAgICBfbWFwOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nLFxuICAgICAgX3NhZmVfbWFwOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXydcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcGFyc2VMb29wKGJhc2U2NFN0ciwgYmFzZTY0U3RyTGVuZ3RoLCByZXZlcnNlTWFwKSB7XG4gICAgICB2YXIgd29yZHMgPSBbXTtcbiAgICAgIHZhciBuQnl0ZXMgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2U2NFN0ckxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpICUgNCkge1xuICAgICAgICAgIHZhciBiaXRzMSA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSAtIDEpXSA8PCBpICUgNCAqIDI7XG4gICAgICAgICAgdmFyIGJpdHMyID0gcmV2ZXJzZU1hcFtiYXNlNjRTdHIuY2hhckNvZGVBdChpKV0gPj4+IDYgLSBpICUgNCAqIDI7XG4gICAgICAgICAgdmFyIGJpdHNDb21iaW5lZCA9IGJpdHMxIHwgYml0czI7XG4gICAgICAgICAgd29yZHNbbkJ5dGVzID4+PiAyXSB8PSBiaXRzQ29tYmluZWQgPDwgMjQgLSBuQnl0ZXMgJSA0ICogODtcbiAgICAgICAgICBuQnl0ZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgbkJ5dGVzKTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgcmV0dXJuIENyeXB0b0pTLmVuYy5CYXNlNjR1cmw7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQ5Nzg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oOTYwMCk7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gIGlmICh0cnVlKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KF9fd2VicGFja19yZXF1aXJlX18oNzU3KSk7XG4gIH0gZWxzZSB7fVxufSkodm9pZCAwLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTaG9ydGN1dHNcbiAgICB2YXIgQyA9IENyeXB0b0pTO1xuICAgIHZhciBDX2xpYiA9IEMubGliO1xuICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG4gICAgdmFyIENfZW5jID0gQy5lbmM7XG4gICAgLyoqXG4gICAgICogVVRGLTE2IEJFIGVuY29kaW5nIHN0cmF0ZWd5LlxuICAgICAqL1xuXG4gICAgdmFyIFV0ZjE2QkUgPSBDX2VuYy5VdGYxNiA9IENfZW5jLlV0ZjE2QkUgPSB7XG4gICAgICAvKipcbiAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi0xNiBCRSBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtMTYgQkUgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgdXRmMTZTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmMTYuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG4gICAgICAgKi9cbiAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KHdvcmRBcnJheSkge1xuICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7IC8vIENvbnZlcnRcblxuICAgICAgICB2YXIgdXRmMTZDaGFycyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSB3b3Jkc1tpID4+PiAyXSA+Pj4gMTYgLSBpICUgNCAqIDggJiAweGZmZmY7XG4gICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgQkUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXRmMTZTdHIgVGhlIFVURi0xNiBCRSBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5VdGYxNi5wYXJzZSh1dGYxNlN0cmluZyk7XG4gICAgICAgKi9cbiAgICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZSh1dGYxNlN0cikge1xuICAgICAgICAvLyBTaG9ydGN1dFxuICAgICAgICB2YXIgdXRmMTZTdHJMZW5ndGggPSB1dGYxNlN0ci5sZW5ndGg7IC8vIENvbnZlcnRcblxuICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHV0ZjE2U3RyTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB3b3Jkc1tpID4+PiAxXSB8PSB1dGYxNlN0ci5jaGFyQ29kZUF0KGkpIDw8IDE2IC0gaSAlIDIgKiAxNjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBXb3JkQXJyYXkuY3JlYXRlKHdvcmRzLCB1dGYxNlN0ckxlbmd0aCAqIDIpO1xuICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogVVRGLTE2IExFIGVuY29kaW5nIHN0cmF0ZWd5LlxuICAgICAqL1xuXG4gICAgQ19lbmMuVXRmMTZMRSA9IHtcbiAgICAgIC8qKlxuICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTE2IExFIHN0cmluZy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi0xNiBMRSBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciB1dGYxNlN0ciA9IENyeXB0b0pTLmVuYy5VdGYxNkxFLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuICAgICAgICovXG4gICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeSh3b3JkQXJyYXkpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3JkcztcbiAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzOyAvLyBDb252ZXJ0XG5cbiAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpICs9IDIpIHtcbiAgICAgICAgICB2YXIgY29kZVBvaW50ID0gc3dhcEVuZGlhbih3b3Jkc1tpID4+PiAyXSA+Pj4gMTYgLSBpICUgNCAqIDggJiAweGZmZmYpO1xuICAgICAgICAgIHV0ZjE2Q2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHV0ZjE2Q2hhcnMuam9pbignJyk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIENvbnZlcnRzIGEgVVRGLTE2IExFIHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjE2U3RyIFRoZSBVVEYtMTYgTEUgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5wYXJzZSh1dGYxNlN0cik7XG4gICAgICAgKi9cbiAgICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZSh1dGYxNlN0cikge1xuICAgICAgICAvLyBTaG9ydGN1dFxuICAgICAgICB2YXIgdXRmMTZTdHJMZW5ndGggPSB1dGYxNlN0ci5sZW5ndGg7IC8vIENvbnZlcnRcblxuICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHV0ZjE2U3RyTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB3b3Jkc1tpID4+PiAxXSB8PSBzd2FwRW5kaWFuKHV0ZjE2U3RyLmNoYXJDb2RlQXQoaSkgPDwgMTYgLSBpICUgMiAqIDE2KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBXb3JkQXJyYXkuY3JlYXRlKHdvcmRzLCB1dGYxNlN0ckxlbmd0aCAqIDIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBzd2FwRW5kaWFuKHdvcmQpIHtcbiAgICAgIHJldHVybiB3b3JkIDw8IDggJiAweGZmMDBmZjAwIHwgd29yZCA+Pj4gOCAmIDB4MDBmZjAwZmY7XG4gICAgfVxuICB9KSgpO1xuXG4gIHJldHVybiBDcnlwdG9KUy5lbmMuVXRmMTY7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM4Mzk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oMjIyMik7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oOTg2NSksIF9fd2VicGFja19yZXF1aXJlX18oNjcyNykpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2hvcnRjdXRzXG4gICAgdmFyIEMgPSBDcnlwdG9KUztcbiAgICB2YXIgQ19saWIgPSBDLmxpYjtcbiAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG4gICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcbiAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuICAgIHZhciBNRDUgPSBDX2FsZ28uTUQ1O1xuICAgIC8qKlxuICAgICAqIFRoaXMga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gaXMgbWVhbnQgdG8gY29uZm9ybSB3aXRoIEVWUF9CeXRlc1RvS2V5LlxuICAgICAqIHd3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by9FVlBfQnl0ZXNUb0tleS5odG1sXG4gICAgICovXG5cbiAgICB2YXIgRXZwS0RGID0gQ19hbGdvLkV2cEtERiA9IEJhc2UuZXh0ZW5kKHtcbiAgICAgIC8qKlxuICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAgICpcbiAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoZSBrZXkgc2l6ZSBpbiB3b3JkcyB0byBnZW5lcmF0ZS4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG4gICAgICAgKiBAcHJvcGVydHkge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuIERlZmF1bHQ6IE1ENVxuICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGl0ZXJhdGlvbnMgVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRvIHBlcmZvcm0uIERlZmF1bHQ6IDFcbiAgICAgICAqL1xuICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG4gICAgICAgIGtleVNpemU6IDEyOCAvIDMyLFxuICAgICAgICBoYXNoZXI6IE1ENSxcbiAgICAgICAgaXRlcmF0aW9uczogMVxuICAgICAgfSksXG5cbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIGRlcml2YXRpb24uXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uRXZwS0RGLmNyZWF0ZSgpO1xuICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiA4IH0pO1xuICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuICAgICAgICovXG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KGNmZykge1xuICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBEZXJpdmVzIGEga2V5IGZyb20gYSBwYXNzd29yZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGtleSA9IGtkZi5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcbiAgICAgICAqL1xuICAgICAgY29tcHV0ZTogZnVuY3Rpb24gY29tcHV0ZShwYXNzd29yZCwgc2FsdCkge1xuICAgICAgICB2YXIgYmxvY2s7IC8vIFNob3J0Y3V0XG5cbiAgICAgICAgdmFyIGNmZyA9IHRoaXMuY2ZnOyAvLyBJbml0IGhhc2hlclxuXG4gICAgICAgIHZhciBoYXNoZXIgPSBjZmcuaGFzaGVyLmNyZWF0ZSgpOyAvLyBJbml0aWFsIHZhbHVlc1xuXG4gICAgICAgIHZhciBkZXJpdmVkS2V5ID0gV29yZEFycmF5LmNyZWF0ZSgpOyAvLyBTaG9ydGN1dHNcblxuICAgICAgICB2YXIgZGVyaXZlZEtleVdvcmRzID0gZGVyaXZlZEtleS53b3JkcztcbiAgICAgICAgdmFyIGtleVNpemUgPSBjZmcua2V5U2l6ZTtcbiAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBjZmcuaXRlcmF0aW9uczsgLy8gR2VuZXJhdGUga2V5XG5cbiAgICAgICAgd2hpbGUgKGRlcml2ZWRLZXlXb3Jkcy5sZW5ndGggPCBrZXlTaXplKSB7XG4gICAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgICBoYXNoZXIudXBkYXRlKGJsb2NrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBibG9jayA9IGhhc2hlci51cGRhdGUocGFzc3dvcmQpLmZpbmFsaXplKHNhbHQpO1xuICAgICAgICAgIGhhc2hlci5yZXNldCgpOyAvLyBJdGVyYXRpb25zXG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICAgICAgYmxvY2sgPSBoYXNoZXIuZmluYWxpemUoYmxvY2spO1xuICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVyaXZlZEtleS5jb25jYXQoYmxvY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVyaXZlZEtleS5zaWdCeXRlcyA9IGtleVNpemUgKiA0O1xuICAgICAgICByZXR1cm4gZGVyaXZlZEtleTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBEZXJpdmVzIGEga2V5IGZyb20gYSBwYXNzd29yZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGNvbXB1dGF0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQpO1xuICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDggfSk7XG4gICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcbiAgICAgKi9cblxuICAgIEMuRXZwS0RGID0gZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0LCBjZmcpIHtcbiAgICAgIHJldHVybiBFdnBLREYuY3JlYXRlKGNmZykuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG4gICAgfTtcbiAgfSkoKTtcblxuICByZXR1cm4gQ3J5cHRvSlMuRXZwS0RGO1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4OTQyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk3MTQpO1xuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcbiAgaWYgKHRydWUpIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoX193ZWJwYWNrX3JlcXVpcmVfXyg3NTcpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1ODIpKTtcbiAgfSBlbHNlIHt9XG59KSh2b2lkIDAsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuICAoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuICAgIC8vIFNob3J0Y3V0c1xuICAgIHZhciBDID0gQ3J5cHRvSlM7XG4gICAgdmFyIENfbGliID0gQy5saWI7XG4gICAgdmFyIENpcGhlclBhcmFtcyA9IENfbGliLkNpcGhlclBhcmFtcztcbiAgICB2YXIgQ19lbmMgPSBDLmVuYztcbiAgICB2YXIgSGV4ID0gQ19lbmMuSGV4O1xuICAgIHZhciBDX2Zvcm1hdCA9IEMuZm9ybWF0O1xuICAgIHZhciBIZXhGb3JtYXR0ZXIgPSBDX2Zvcm1hdC5IZXggPSB7XG4gICAgICAvKipcbiAgICAgICAqIENvbnZlcnRzIHRoZSBjaXBoZXJ0ZXh0IG9mIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QgdG8gYSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfSBjaXBoZXJQYXJhbXMgVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBzdHJpbmcuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciBoZXhTdHJpbmcgPSBDcnlwdG9KUy5mb3JtYXQuSGV4LnN0cmluZ2lmeShjaXBoZXJQYXJhbXMpO1xuICAgICAgICovXG4gICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShjaXBoZXJQYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGNpcGhlclBhcmFtcy5jaXBoZXJ0ZXh0LnRvU3RyaW5nKEhleCk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIENvbnZlcnRzIGEgaGV4YWRlY2ltYWxseSBlbmNvZGVkIGNpcGhlcnRleHQgc3RyaW5nIHRvIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IFRoZSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMuZm9ybWF0LkhleC5wYXJzZShoZXhTdHJpbmcpO1xuICAgICAgICovXG4gICAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBIZXgucGFyc2UoaW5wdXQpO1xuICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7XG4gICAgICAgICAgY2lwaGVydGV4dDogY2lwaGVydGV4dFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9KSgpO1xuXG4gIHJldHVybiBDcnlwdG9KUy5mb3JtYXQuSGV4O1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2NzI3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMjIpO1xuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NykpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2hvcnRjdXRzXG4gICAgdmFyIEMgPSBDcnlwdG9KUztcbiAgICB2YXIgQ19saWIgPSBDLmxpYjtcbiAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG4gICAgdmFyIENfZW5jID0gQy5lbmM7XG4gICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4O1xuICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG4gICAgLyoqXG4gICAgICogSE1BQyBhbGdvcml0aG0uXG4gICAgICovXG5cbiAgICB2YXIgSE1BQyA9IENfYWxnby5ITUFDID0gQmFzZS5leHRlbmQoe1xuICAgICAgLyoqXG4gICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgSE1BQy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgaG1hY0hhc2hlciA9IENyeXB0b0pTLmFsZ28uSE1BQy5jcmVhdGUoQ3J5cHRvSlMuYWxnby5TSEEyNTYsIGtleSk7XG4gICAgICAgKi9cbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoaGFzaGVyLCBrZXkpIHtcbiAgICAgICAgLy8gSW5pdCBoYXNoZXJcbiAgICAgICAgaGFzaGVyID0gdGhpcy5faGFzaGVyID0gbmV3IGhhc2hlci5pbml0KCk7IC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblxuICAgICAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgIGtleSA9IFV0ZjgucGFyc2Uoa2V5KTtcbiAgICAgICAgfSAvLyBTaG9ydGN1dHNcblxuXG4gICAgICAgIHZhciBoYXNoZXJCbG9ja1NpemUgPSBoYXNoZXIuYmxvY2tTaXplO1xuICAgICAgICB2YXIgaGFzaGVyQmxvY2tTaXplQnl0ZXMgPSBoYXNoZXJCbG9ja1NpemUgKiA0OyAvLyBBbGxvdyBhcmJpdHJhcnkgbGVuZ3RoIGtleXNcblxuICAgICAgICBpZiAoa2V5LnNpZ0J5dGVzID4gaGFzaGVyQmxvY2tTaXplQnl0ZXMpIHtcbiAgICAgICAgICBrZXkgPSBoYXNoZXIuZmluYWxpemUoa2V5KTtcbiAgICAgICAgfSAvLyBDbGFtcCBleGNlc3MgYml0c1xuXG5cbiAgICAgICAga2V5LmNsYW1wKCk7IC8vIENsb25lIGtleSBmb3IgaW5uZXIgYW5kIG91dGVyIHBhZHNcblxuICAgICAgICB2YXIgb0tleSA9IHRoaXMuX29LZXkgPSBrZXkuY2xvbmUoKTtcbiAgICAgICAgdmFyIGlLZXkgPSB0aGlzLl9pS2V5ID0ga2V5LmNsb25lKCk7IC8vIFNob3J0Y3V0c1xuXG4gICAgICAgIHZhciBvS2V5V29yZHMgPSBvS2V5LndvcmRzO1xuICAgICAgICB2YXIgaUtleVdvcmRzID0gaUtleS53b3JkczsgLy8gWE9SIGtleXMgd2l0aCBwYWQgY29uc3RhbnRzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXNoZXJCbG9ja1NpemU7IGkrKykge1xuICAgICAgICAgIG9LZXlXb3Jkc1tpXSBePSAweDVjNWM1YzVjO1xuICAgICAgICAgIGlLZXlXb3Jkc1tpXSBePSAweDM2MzYzNjM2O1xuICAgICAgICB9XG5cbiAgICAgICAgb0tleS5zaWdCeXRlcyA9IGlLZXkuc2lnQnl0ZXMgPSBoYXNoZXJCbG9ja1NpemVCeXRlczsgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBSZXNldHMgdGhpcyBITUFDIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIGhtYWNIYXNoZXIucmVzZXQoKTtcbiAgICAgICAqL1xuICAgICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICAvLyBTaG9ydGN1dFxuICAgICAgICB2YXIgaGFzaGVyID0gdGhpcy5faGFzaGVyOyAvLyBSZXNldFxuXG4gICAgICAgIGhhc2hlci5yZXNldCgpO1xuICAgICAgICBoYXNoZXIudXBkYXRlKHRoaXMuX2lLZXkpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVcGRhdGVzIHRoaXMgSE1BQyB3aXRoIGEgbWVzc2FnZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgVGhlIG1lc3NhZ2UgdG8gYXBwZW5kLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge0hNQUN9IFRoaXMgSE1BQyBpbnN0YW5jZS5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICBobWFjSGFzaGVyLnVwZGF0ZSgnbWVzc2FnZScpO1xuICAgICAgICogICAgIGhtYWNIYXNoZXIudXBkYXRlKHdvcmRBcnJheSk7XG4gICAgICAgKi9cbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG1lc3NhZ2VVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5faGFzaGVyLnVwZGF0ZShtZXNzYWdlVXBkYXRlKTsgLy8gQ2hhaW5hYmxlXG5cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogRmluYWxpemVzIHRoZSBITUFDIGNvbXB1dGF0aW9uLlxuICAgICAgICogTm90ZSB0aGF0IHRoZSBmaW5hbGl6ZSBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBkZXN0cnVjdGl2ZSwgcmVhZC1vbmNlIG9wZXJhdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKCk7XG4gICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKCdtZXNzYWdlJyk7XG4gICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG4gICAgICAgKi9cbiAgICAgIGZpbmFsaXplOiBmdW5jdGlvbiBmaW5hbGl6ZShtZXNzYWdlVXBkYXRlKSB7XG4gICAgICAgIC8vIFNob3J0Y3V0XG4gICAgICAgIHZhciBoYXNoZXIgPSB0aGlzLl9oYXNoZXI7IC8vIENvbXB1dGUgSE1BQ1xuXG4gICAgICAgIHZhciBpbm5lckhhc2ggPSBoYXNoZXIuZmluYWxpemUobWVzc2FnZVVwZGF0ZSk7XG4gICAgICAgIGhhc2hlci5yZXNldCgpO1xuICAgICAgICB2YXIgaG1hYyA9IGhhc2hlci5maW5hbGl6ZSh0aGlzLl9vS2V5LmNsb25lKCkuY29uY2F0KGlubmVySGFzaCkpO1xuICAgICAgICByZXR1cm4gaG1hYztcbiAgICAgIH1cbiAgICB9KTtcbiAgfSkoKTtcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTE1Mzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuO1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG4gIGlmICh0cnVlKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KF9fd2VicGFja19yZXF1aXJlX18oNzU3KSwgX193ZWJwYWNrX3JlcXVpcmVfXygyNjAxKSwgX193ZWJwYWNrX3JlcXVpcmVfXygxOTQ3KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg0OTc4KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg3NTA4KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg3NTkwKSwgX193ZWJwYWNrX3JlcXVpcmVfXygzNDQwKSwgX193ZWJwYWNrX3JlcXVpcmVfXyg5ODY1KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg4OTIxKSwgX193ZWJwYWNrX3JlcXVpcmVfXyg2ODc2KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg3OTkxKSwgX193ZWJwYWNrX3JlcXVpcmVfXyg4MTIyKSwgX193ZWJwYWNrX3JlcXVpcmVfXyg4MzQyKSwgX193ZWJwYWNrX3JlcXVpcmVfXyg4NzE0KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg2NzI3KSwgX193ZWJwYWNrX3JlcXVpcmVfXygzNDg2KSwgX193ZWJwYWNrX3JlcXVpcmVfXygzODM5KSwgX193ZWJwYWNrX3JlcXVpcmVfXygxNTgyKSwgX193ZWJwYWNrX3JlcXVpcmVfXyg3MDIpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNjIpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0MTIpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3MjApLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1MTgpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzNjIpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0MzEpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4MDApLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5OTIpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0OSksIF9fd2VicGFja19yZXF1aXJlX18oODk0MiksIF9fd2VicGFja19yZXF1aXJlX18oMTk0KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg4NDM3KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg0NjQwKSwgX193ZWJwYWNrX3JlcXVpcmVfXyg1MzIzKSwgX193ZWJwYWNrX3JlcXVpcmVfXyg0MzYzKSk7XG4gIH0gZWxzZSB7fVxufSkodm9pZCAwLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcbiAgcmV0dXJuIENyeXB0b0pTO1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOTQ3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc4MDMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY5OTIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0NzIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI5OTApO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg5MjcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMxMDUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDUwMzUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQzNDUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcxNzQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI4NDYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ3MzEpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcyMDkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDYzMTkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg4NjcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc3ODkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM3MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDkzNjgpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ0ODMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNTYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM0NjIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY3OCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzQ2Mik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzgyNCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAyMSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjk3NCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAxNik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzE0NSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oOTc0Myk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTEwOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oODI1NSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTEyNSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oOTEzNSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDE5Nyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNjQ5NSk7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gIGlmICh0cnVlKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KF9fd2VicGFja19yZXF1aXJlX18oNzU3KSk7XG4gIH0gZWxzZSB7fVxufSkodm9pZCAwLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBDaGVjayBpZiB0eXBlZCBhcnJheXMgYXJlIHN1cHBvcnRlZFxuICAgIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gU2hvcnRjdXRzXG5cblxuICAgIHZhciBDID0gQ3J5cHRvSlM7XG4gICAgdmFyIENfbGliID0gQy5saWI7XG4gICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTsgLy8gUmVmZXJlbmNlIG9yaWdpbmFsIGluaXRcblxuICAgIHZhciBzdXBlckluaXQgPSBXb3JkQXJyYXkuaW5pdDsgLy8gQXVnbWVudCBXb3JkQXJyYXkuaW5pdCB0byBoYW5kbGUgdHlwZWQgYXJyYXlzXG5cbiAgICB2YXIgc3ViSW5pdCA9IFdvcmRBcnJheS5pbml0ID0gZnVuY3Rpb24gKHR5cGVkQXJyYXkpIHtcbiAgICAgIC8vIENvbnZlcnQgYnVmZmVycyB0byB1aW50OFxuICAgICAgaWYgKHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodHlwZWRBcnJheSk7XG4gICAgICB9IC8vIENvbnZlcnQgb3RoZXIgYXJyYXkgdmlld3MgdG8gdWludDhcblxuXG4gICAgICBpZiAodHlwZWRBcnJheSBpbnN0YW5jZW9mIEludDhBcnJheSB8fCB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5IHx8IHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBJbnQxNkFycmF5IHx8IHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBVaW50MTZBcnJheSB8fCB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50MzJBcnJheSB8fCB0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkgfHwgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fCB0eXBlZEFycmF5IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSB7XG4gICAgICAgIHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSh0eXBlZEFycmF5LmJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5LmJ5dGVMZW5ndGgpO1xuICAgICAgfSAvLyBIYW5kbGUgVWludDhBcnJheVxuXG5cbiAgICAgIGlmICh0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAvLyBTaG9ydGN1dFxuICAgICAgICB2YXIgdHlwZWRBcnJheUJ5dGVMZW5ndGggPSB0eXBlZEFycmF5LmJ5dGVMZW5ndGg7IC8vIEV4dHJhY3QgYnl0ZXNcblxuICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVkQXJyYXlCeXRlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB3b3Jkc1tpID4+PiAyXSB8PSB0eXBlZEFycmF5W2ldIDw8IDI0IC0gaSAlIDQgKiA4O1xuICAgICAgICB9IC8vIEluaXRpYWxpemUgdGhpcyB3b3JkIGFycmF5XG5cblxuICAgICAgICBzdXBlckluaXQuY2FsbCh0aGlzLCB3b3JkcywgdHlwZWRBcnJheUJ5dGVMZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRWxzZSBjYWxsIG5vcm1hbCBpbml0XG4gICAgICAgIHN1cGVySW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzdWJJbml0LnByb3RvdHlwZSA9IFdvcmRBcnJheTtcbiAgfSkoKTtcblxuICByZXR1cm4gQ3J5cHRvSlMubGliLldvcmRBcnJheTtcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzQ0MDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuO1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgaWYgKHRydWUpIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoX193ZWJwYWNrX3JlcXVpcmVfXyg3NTcpKTtcbiAgfSBlbHNlIHt9XG59KSh2b2lkIDAsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuICAoZnVuY3Rpb24gKE1hdGgpIHtcbiAgICAvLyBTaG9ydGN1dHNcbiAgICB2YXIgQyA9IENyeXB0b0pTO1xuICAgIHZhciBDX2xpYiA9IEMubGliO1xuICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG4gICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcbiAgICB2YXIgQ19hbGdvID0gQy5hbGdvOyAvLyBDb25zdGFudHMgdGFibGVcblxuICAgIHZhciBUID0gW107IC8vIENvbXB1dGUgY29uc3RhbnRzXG5cbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG4gICAgICAgIFRbaV0gPSBNYXRoLmFicyhNYXRoLnNpbihpICsgMSkpICogMHgxMDAwMDAwMDAgfCAwO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgLyoqXG4gICAgICogTUQ1IGhhc2ggYWxnb3JpdGhtLlxuICAgICAqL1xuXG5cbiAgICB2YXIgTUQ1ID0gQ19hbGdvLk1ENSA9IEhhc2hlci5leHRlbmQoe1xuICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uIF9kb1Jlc2V0KCkge1xuICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2XSk7XG4gICAgICB9LFxuICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiBfZG9Qcm9jZXNzQmxvY2soTSwgb2Zmc2V0KSB7XG4gICAgICAgIC8vIFN3YXAgZW5kaWFuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICAgIHZhciBvZmZzZXRfaSA9IG9mZnNldCArIGk7XG4gICAgICAgICAgdmFyIE1fb2Zmc2V0X2kgPSBNW29mZnNldF9pXTtcbiAgICAgICAgICBNW29mZnNldF9pXSA9IChNX29mZnNldF9pIDw8IDggfCBNX29mZnNldF9pID4+PiAyNCkgJiAweDAwZmYwMGZmIHwgKE1fb2Zmc2V0X2kgPDwgMjQgfCBNX29mZnNldF9pID4+PiA4KSAmIDB4ZmYwMGZmMDA7XG4gICAgICAgIH0gLy8gU2hvcnRjdXRzXG5cblxuICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG4gICAgICAgIHZhciBNX29mZnNldF8wID0gTVtvZmZzZXQgKyAwXTtcbiAgICAgICAgdmFyIE1fb2Zmc2V0XzEgPSBNW29mZnNldCArIDFdO1xuICAgICAgICB2YXIgTV9vZmZzZXRfMiA9IE1bb2Zmc2V0ICsgMl07XG4gICAgICAgIHZhciBNX29mZnNldF8zID0gTVtvZmZzZXQgKyAzXTtcbiAgICAgICAgdmFyIE1fb2Zmc2V0XzQgPSBNW29mZnNldCArIDRdO1xuICAgICAgICB2YXIgTV9vZmZzZXRfNSA9IE1bb2Zmc2V0ICsgNV07XG4gICAgICAgIHZhciBNX29mZnNldF82ID0gTVtvZmZzZXQgKyA2XTtcbiAgICAgICAgdmFyIE1fb2Zmc2V0XzcgPSBNW29mZnNldCArIDddO1xuICAgICAgICB2YXIgTV9vZmZzZXRfOCA9IE1bb2Zmc2V0ICsgOF07XG4gICAgICAgIHZhciBNX29mZnNldF85ID0gTVtvZmZzZXQgKyA5XTtcbiAgICAgICAgdmFyIE1fb2Zmc2V0XzEwID0gTVtvZmZzZXQgKyAxMF07XG4gICAgICAgIHZhciBNX29mZnNldF8xMSA9IE1bb2Zmc2V0ICsgMTFdO1xuICAgICAgICB2YXIgTV9vZmZzZXRfMTIgPSBNW29mZnNldCArIDEyXTtcbiAgICAgICAgdmFyIE1fb2Zmc2V0XzEzID0gTVtvZmZzZXQgKyAxM107XG4gICAgICAgIHZhciBNX29mZnNldF8xNCA9IE1bb2Zmc2V0ICsgMTRdO1xuICAgICAgICB2YXIgTV9vZmZzZXRfMTUgPSBNW29mZnNldCArIDE1XTsgLy8gV29ya2luZyB2YXJpYWxiZXNcblxuICAgICAgICB2YXIgYSA9IEhbMF07XG4gICAgICAgIHZhciBiID0gSFsxXTtcbiAgICAgICAgdmFyIGMgPSBIWzJdO1xuICAgICAgICB2YXIgZCA9IEhbM107IC8vIENvbXB1dGF0aW9uXG5cbiAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzAsIDcsIFRbMF0pO1xuICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfMSwgMTIsIFRbMV0pO1xuICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfMiwgMTcsIFRbMl0pO1xuICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMywgMjIsIFRbM10pO1xuICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgTV9vZmZzZXRfNCwgNywgVFs0XSk7XG4gICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBNX29mZnNldF81LCAxMiwgVFs1XSk7XG4gICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF82LCAxNywgVFs2XSk7XG4gICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF83LCAyMiwgVFs3XSk7XG4gICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF84LCA3LCBUWzhdKTtcbiAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzksIDEyLCBUWzldKTtcbiAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzEwLCAxNywgVFsxMF0pO1xuICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTEsIDIyLCBUWzExXSk7XG4gICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF8xMiwgNywgVFsxMl0pO1xuICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTMsIDEyLCBUWzEzXSk7XG4gICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF8xNCwgMTcsIFRbMTRdKTtcbiAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzE1LCAyMiwgVFsxNV0pO1xuICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfMSwgNSwgVFsxNl0pO1xuICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfNiwgOSwgVFsxN10pO1xuICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfMTEsIDE0LCBUWzE4XSk7XG4gICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF8wLCAyMCwgVFsxOV0pO1xuICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfNSwgNSwgVFsyMF0pO1xuICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfMTAsIDksIFRbMjFdKTtcbiAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzE1LCAxNCwgVFsyMl0pO1xuICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfNCwgMjAsIFRbMjNdKTtcbiAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzksIDUsIFRbMjRdKTtcbiAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzE0LCA5LCBUWzI1XSk7XG4gICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF8zLCAxNCwgVFsyNl0pO1xuICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfOCwgMjAsIFRbMjddKTtcbiAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEzLCA1LCBUWzI4XSk7XG4gICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF8yLCA5LCBUWzI5XSk7XG4gICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF83LCAxNCwgVFszMF0pO1xuICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfMTIsIDIwLCBUWzMxXSk7XG4gICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF81LCA0LCBUWzMyXSk7XG4gICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF84LCAxMSwgVFszM10pO1xuICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTEsIDE2LCBUWzM0XSk7XG4gICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF8xNCwgMjMsIFRbMzVdKTtcbiAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEsIDQsIFRbMzZdKTtcbiAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzQsIDExLCBUWzM3XSk7XG4gICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF83LCAxNiwgVFszOF0pO1xuICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTAsIDIzLCBUWzM5XSk7XG4gICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF8xMywgNCwgVFs0MF0pO1xuICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfMCwgMTEsIFRbNDFdKTtcbiAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzMsIDE2LCBUWzQyXSk7XG4gICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF82LCAyMywgVFs0M10pO1xuICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfOSwgNCwgVFs0NF0pO1xuICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTIsIDExLCBUWzQ1XSk7XG4gICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8xNSwgMTYsIFRbNDZdKTtcbiAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzIsIDIzLCBUWzQ3XSk7XG4gICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF8wLCA2LCBUWzQ4XSk7XG4gICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF83LCAxMCwgVFs0OV0pO1xuICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTQsIDE1LCBUWzUwXSk7XG4gICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF81LCAyMSwgVFs1MV0pO1xuICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgTV9vZmZzZXRfMTIsIDYsIFRbNTJdKTtcbiAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzMsIDEwLCBUWzUzXSk7XG4gICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8xMCwgMTUsIFRbNTRdKTtcbiAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzEsIDIxLCBUWzU1XSk7XG4gICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF84LCA2LCBUWzU2XSk7XG4gICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF8xNSwgMTAsIFRbNTddKTtcbiAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzYsIDE1LCBUWzU4XSk7XG4gICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF8xMywgMjEsIFRbNTldKTtcbiAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzQsIDYsIFRbNjBdKTtcbiAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzExLCAxMCwgVFs2MV0pO1xuICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMiwgMTUsIFRbNjJdKTtcbiAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzksIDIxLCBUWzYzXSk7IC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cbiAgICAgICAgSFswXSA9IEhbMF0gKyBhIHwgMDtcbiAgICAgICAgSFsxXSA9IEhbMV0gKyBiIHwgMDtcbiAgICAgICAgSFsyXSA9IEhbMl0gKyBjIHwgMDtcbiAgICAgICAgSFszXSA9IEhbM10gKyBkIHwgMDtcbiAgICAgIH0sXG4gICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gX2RvRmluYWxpemUoKSB7XG4gICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7IC8vIEFkZCBwYWRkaW5nXG5cbiAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAyNCAtIG5CaXRzTGVmdCAlIDMyO1xuICAgICAgICB2YXIgbkJpdHNUb3RhbEggPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG4gICAgICAgIHZhciBuQml0c1RvdGFsTCA9IG5CaXRzVG90YWw7XG4gICAgICAgIGRhdGFXb3Jkc1sobkJpdHNMZWZ0ICsgNjQgPj4+IDkgPDwgNCkgKyAxNV0gPSAobkJpdHNUb3RhbEggPDwgOCB8IG5CaXRzVG90YWxIID4+PiAyNCkgJiAweDAwZmYwMGZmIHwgKG5CaXRzVG90YWxIIDw8IDI0IHwgbkJpdHNUb3RhbEggPj4+IDgpICYgMHhmZjAwZmYwMDtcbiAgICAgICAgZGF0YVdvcmRzWyhuQml0c0xlZnQgKyA2NCA+Pj4gOSA8PCA0KSArIDE0XSA9IChuQml0c1RvdGFsTCA8PCA4IHwgbkJpdHNUb3RhbEwgPj4+IDI0KSAmIDB4MDBmZjAwZmYgfCAobkJpdHNUb3RhbEwgPDwgMjQgfCBuQml0c1RvdGFsTCA+Pj4gOCkgJiAweGZmMDBmZjAwO1xuICAgICAgICBkYXRhLnNpZ0J5dGVzID0gKGRhdGFXb3Jkcy5sZW5ndGggKyAxKSAqIDQ7IC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cbiAgICAgICAgdGhpcy5fcHJvY2VzcygpOyAvLyBTaG9ydGN1dHNcblxuXG4gICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaDtcbiAgICAgICAgdmFyIEggPSBoYXNoLndvcmRzOyAvLyBTd2FwIGVuZGlhblxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgLy8gU2hvcnRjdXRcbiAgICAgICAgICB2YXIgSF9pID0gSFtpXTtcbiAgICAgICAgICBIW2ldID0gKEhfaSA8PCA4IHwgSF9pID4+PiAyNCkgJiAweDAwZmYwMGZmIHwgKEhfaSA8PCAyNCB8IEhfaSA+Pj4gOCkgJiAweGZmMDBmZjAwO1xuICAgICAgICB9IC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cblxuICAgICAgICByZXR1cm4gaGFzaDtcbiAgICAgIH0sXG4gICAgICBjbG9uZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gRkYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgICAgdmFyIG4gPSBhICsgKGIgJiBjIHwgfmIgJiBkKSArIHggKyB0O1xuICAgICAgcmV0dXJuIChuIDw8IHMgfCBuID4+PiAzMiAtIHMpICsgYjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBHRyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgICB2YXIgbiA9IGEgKyAoYiAmIGQgfCBjICYgfmQpICsgeCArIHQ7XG4gICAgICByZXR1cm4gKG4gPDwgcyB8IG4gPj4+IDMyIC0gcykgKyBiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIEhIKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICAgIHZhciBuID0gYSArIChiIF4gYyBeIGQpICsgeCArIHQ7XG4gICAgICByZXR1cm4gKG4gPDwgcyB8IG4gPj4+IDMyIC0gcykgKyBiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIElJKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICAgIHZhciBuID0gYSArIChjIF4gKGIgfCB+ZCkpICsgeCArIHQ7XG4gICAgICByZXR1cm4gKG4gPDwgcyB8IG4gPj4+IDMyIC0gcykgKyBiO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuICAgICAqXG4gICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5NRDUoJ21lc3NhZ2UnKTtcbiAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5NRDUod29yZEFycmF5KTtcbiAgICAgKi9cblxuXG4gICAgQy5NRDUgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihNRDUpO1xuICAgIC8qKlxuICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuICAgICAqXG4gICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjTUQ1KG1lc3NhZ2UsIGtleSk7XG4gICAgICovXG5cbiAgICBDLkhtYWNNRDUgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoTUQ1KTtcbiAgfSkoTWF0aCk7XG5cbiAgcmV0dXJuIENyeXB0b0pTLk1ENTtcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNzAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcwNDIpO1xuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcbiAgaWYgKHRydWUpIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoX193ZWJwYWNrX3JlcXVpcmVfXyg3NTcpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1ODIpKTtcbiAgfSBlbHNlIHt9XG59KSh2b2lkIDAsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuICAvKipcbiAgICogQ2lwaGVyIEZlZWRiYWNrIGJsb2NrIG1vZGUuXG4gICAqL1xuICBDcnlwdG9KUy5tb2RlLkNGQiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgQ0ZCID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcbiAgICBDRkIuRW5jcnlwdG9yID0gQ0ZCLmV4dGVuZCh7XG4gICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIHByb2Nlc3NCbG9jayh3b3Jkcywgb2Zmc2V0KSB7XG4gICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcbiAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1BbmRFbmNyeXB0LmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpOyAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblxuICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgQ0ZCLkRlY3J5cHRvciA9IENGQi5leHRlbmQoe1xuICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiBwcm9jZXNzQmxvY2sod29yZHMsIG9mZnNldCkge1xuICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcbiAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7IC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXG4gICAgICAgIHZhciB0aGlzQmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG4gICAgICAgIGdlbmVyYXRlS2V5c3RyZWFtQW5kRW5jcnlwdC5jYWxsKHRoaXMsIHdvcmRzLCBvZmZzZXQsIGJsb2NrU2l6ZSwgY2lwaGVyKTsgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXG4gICAgICAgIHRoaXMuX3ByZXZCbG9jayA9IHRoaXNCbG9jaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlS2V5c3RyZWFtQW5kRW5jcnlwdCh3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUsIGNpcGhlcikge1xuICAgICAgdmFyIGtleXN0cmVhbTsgLy8gU2hvcnRjdXRcblxuICAgICAgdmFyIGl2ID0gdGhpcy5faXY7IC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXG4gICAgICBpZiAoaXYpIHtcbiAgICAgICAga2V5c3RyZWFtID0gaXYuc2xpY2UoMCk7IC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3NcblxuICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXN0cmVhbSA9IHRoaXMuX3ByZXZCbG9jaztcbiAgICAgIH1cblxuICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApOyAvLyBFbmNyeXB0XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcbiAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBDRkI7XG4gIH0oKTtcblxuICByZXR1cm4gQ3J5cHRvSlMubW9kZS5DRkI7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQ0MTI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oNzA0Mik7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oMTU4MikpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIC8qKiBAcHJlc2VydmVcbiAgICogQ291bnRlciBibG9jayBtb2RlIGNvbXBhdGlibGUgd2l0aCAgRHIgQnJpYW4gR2xhZG1hbiBmaWxlZW5jLmNcbiAgICogZGVyaXZlZCBmcm9tIENyeXB0b0pTLm1vZGUuQ1RSXG4gICAqIEphbiBIcnVieSBqaHJ1Ynkud2ViQGdtYWlsLmNvbVxuICAgKi9cbiAgQ3J5cHRvSlMubW9kZS5DVFJHbGFkbWFuID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBDVFJHbGFkbWFuID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuICAgIGZ1bmN0aW9uIGluY1dvcmQod29yZCkge1xuICAgICAgaWYgKCh3b3JkID4+IDI0ICYgMHhmZikgPT09IDB4ZmYpIHtcbiAgICAgICAgLy9vdmVyZmxvd1xuICAgICAgICB2YXIgYjEgPSB3b3JkID4+IDE2ICYgMHhmZjtcbiAgICAgICAgdmFyIGIyID0gd29yZCA+PiA4ICYgMHhmZjtcbiAgICAgICAgdmFyIGIzID0gd29yZCAmIDB4ZmY7XG5cbiAgICAgICAgaWYgKGIxID09PSAweGZmKSAvLyBvdmVyZmxvdyBiMVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGIxID0gMDtcblxuICAgICAgICAgICAgaWYgKGIyID09PSAweGZmKSB7XG4gICAgICAgICAgICAgIGIyID0gMDtcblxuICAgICAgICAgICAgICBpZiAoYjMgPT09IDB4ZmYpIHtcbiAgICAgICAgICAgICAgICBiMyA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKytiMztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgKytiMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICsrYjE7XG4gICAgICAgIH1cblxuICAgICAgICB3b3JkID0gMDtcbiAgICAgICAgd29yZCArPSBiMSA8PCAxNjtcbiAgICAgICAgd29yZCArPSBiMiA8PCA4O1xuICAgICAgICB3b3JkICs9IGIzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd29yZCArPSAweDAxIDw8IDI0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29yZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmNDb3VudGVyKGNvdW50ZXIpIHtcbiAgICAgIGlmICgoY291bnRlclswXSA9IGluY1dvcmQoY291bnRlclswXSkpID09PSAwKSB7XG4gICAgICAgIC8vIGVuY3JfZGF0YSBpbiBmaWxlZW5jLmMgZnJvbSAgRHIgQnJpYW4gR2xhZG1hbidzIGNvdW50cyBvbmx5IHdpdGggRFdPUkQgaiA8IDhcbiAgICAgICAgY291bnRlclsxXSA9IGluY1dvcmQoY291bnRlclsxXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb3VudGVyO1xuICAgIH1cblxuICAgIHZhciBFbmNyeXB0b3IgPSBDVFJHbGFkbWFuLkVuY3J5cHRvciA9IENUUkdsYWRtYW4uZXh0ZW5kKHtcbiAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gcHJvY2Vzc0Jsb2NrKHdvcmRzLCBvZmZzZXQpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXI7XG4gICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyOyAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblxuICAgICAgICBpZiAoaXYpIHtcbiAgICAgICAgICBjb3VudGVyID0gdGhpcy5fY291bnRlciA9IGl2LnNsaWNlKDApOyAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cbiAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGluY0NvdW50ZXIoY291bnRlcik7XG4gICAgICAgIHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7IC8vIEVuY3J5cHRcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgQ1RSR2xhZG1hbi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG4gICAgcmV0dXJuIENUUkdsYWRtYW47XG4gIH0oKTtcblxuICByZXR1cm4gQ3J5cHRvSlMubW9kZS5DVFJHbGFkbWFuO1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMzYyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcwNDIpO1xuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcbiAgaWYgKHRydWUpIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoX193ZWJwYWNrX3JlcXVpcmVfXyg3NTcpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1ODIpKTtcbiAgfSBlbHNlIHt9XG59KSh2b2lkIDAsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuICAvKipcbiAgICogQ291bnRlciBibG9jayBtb2RlLlxuICAgKi9cbiAgQ3J5cHRvSlMubW9kZS5DVFIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIENUUiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG4gICAgdmFyIEVuY3J5cHRvciA9IENUUi5FbmNyeXB0b3IgPSBDVFIuZXh0ZW5kKHtcbiAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gcHJvY2Vzc0Jsb2NrKHdvcmRzLCBvZmZzZXQpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXI7XG4gICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyOyAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblxuICAgICAgICBpZiAoaXYpIHtcbiAgICAgICAgICBjb3VudGVyID0gdGhpcy5fY291bnRlciA9IGl2LnNsaWNlKDApOyAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cbiAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7IC8vIEluY3JlbWVudCBjb3VudGVyXG5cbiAgICAgICAgY291bnRlcltibG9ja1NpemUgLSAxXSA9IGNvdW50ZXJbYmxvY2tTaXplIC0gMV0gKyAxIHwgMDsgLy8gRW5jcnlwdFxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcbiAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBDVFIuRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuICAgIHJldHVybiBDVFI7XG4gIH0oKTtcblxuICByZXR1cm4gQ3J5cHRvSlMubW9kZS5DVFI7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM1MTg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oMTU4MikpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIC8qKlxuICAgKiBFbGVjdHJvbmljIENvZGVib29rIGJsb2NrIG1vZGUuXG4gICAqL1xuICBDcnlwdG9KUy5tb2RlLkVDQiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgRUNCID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcbiAgICBFQ0IuRW5jcnlwdG9yID0gRUNCLmV4dGVuZCh7XG4gICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIHByb2Nlc3NCbG9jayh3b3Jkcywgb2Zmc2V0KSB7XG4gICAgICAgIHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sod29yZHMsIG9mZnNldCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgRUNCLkRlY3J5cHRvciA9IEVDQi5leHRlbmQoe1xuICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiBwcm9jZXNzQmxvY2sod29yZHMsIG9mZnNldCkge1xuICAgICAgICB0aGlzLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBFQ0I7XG4gIH0oKTtcblxuICByZXR1cm4gQ3J5cHRvSlMubW9kZS5FQ0I7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDU3MjA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oNzA0Mik7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oMTU4MikpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIC8qKlxuICAgKiBPdXRwdXQgRmVlZGJhY2sgYmxvY2sgbW9kZS5cbiAgICovXG4gIENyeXB0b0pTLm1vZGUuT0ZCID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBPRkIgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuICAgIHZhciBFbmNyeXB0b3IgPSBPRkIuRW5jcnlwdG9yID0gT0ZCLmV4dGVuZCh7XG4gICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIHByb2Nlc3NCbG9jayh3b3Jkcywgb2Zmc2V0KSB7XG4gICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcbiAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG4gICAgICAgIHZhciBrZXlzdHJlYW0gPSB0aGlzLl9rZXlzdHJlYW07IC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXG4gICAgICAgIGlmIChpdikge1xuICAgICAgICAgIGtleXN0cmVhbSA9IHRoaXMuX2tleXN0cmVhbSA9IGl2LnNsaWNlKDApOyAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cbiAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2soa2V5c3RyZWFtLCAwKTsgLy8gRW5jcnlwdFxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcbiAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBPRkIuRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuICAgIHJldHVybiBPRkI7XG4gIH0oKTtcblxuICByZXR1cm4gQ3J5cHRvSlMubW9kZS5PRkI7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDYzNjI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oMTU4MikpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIC8qKlxuICAgKiBBTlNJIFguOTIzIHBhZGRpbmcgc3RyYXRlZ3kuXG4gICAqL1xuICBDcnlwdG9KUy5wYWQuQW5zaVg5MjMgPSB7XG4gICAgcGFkOiBmdW5jdGlvbiBwYWQoZGF0YSwgYmxvY2tTaXplKSB7XG4gICAgICAvLyBTaG9ydGN1dHNcbiAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDsgLy8gQ291bnQgcGFkZGluZyBieXRlc1xuXG4gICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGJsb2NrU2l6ZUJ5dGVzIC0gZGF0YVNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXM7IC8vIENvbXB1dGUgbGFzdCBieXRlIHBvc2l0aW9uXG5cbiAgICAgIHZhciBsYXN0Qnl0ZVBvcyA9IGRhdGFTaWdCeXRlcyArIG5QYWRkaW5nQnl0ZXMgLSAxOyAvLyBQYWRcblxuICAgICAgZGF0YS5jbGFtcCgpO1xuICAgICAgZGF0YS53b3Jkc1tsYXN0Qnl0ZVBvcyA+Pj4gMl0gfD0gblBhZGRpbmdCeXRlcyA8PCAyNCAtIGxhc3RCeXRlUG9zICUgNCAqIDg7XG4gICAgICBkYXRhLnNpZ0J5dGVzICs9IG5QYWRkaW5nQnl0ZXM7XG4gICAgfSxcbiAgICB1bnBhZDogZnVuY3Rpb24gdW5wYWQoZGF0YSkge1xuICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG4gICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGRhdGEud29yZHNbZGF0YS5zaWdCeXRlcyAtIDEgPj4+IDJdICYgMHhmZjsgLy8gUmVtb3ZlIHBhZGRpbmdcblxuICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuUGFkZGluZ0J5dGVzO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIENyeXB0b0pTLnBhZC5BbnNpeDkyMztcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDQzMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMjIyKTtcblxuO1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG4gIGlmICh0cnVlKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KF9fd2VicGFja19yZXF1aXJlX18oNzU3KSwgX193ZWJwYWNrX3JlcXVpcmVfXygxNTgyKSk7XG4gIH0gZWxzZSB7fVxufSkodm9pZCAwLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcbiAgLyoqXG4gICAqIElTTyAxMDEyNiBwYWRkaW5nIHN0cmF0ZWd5LlxuICAgKi9cbiAgQ3J5cHRvSlMucGFkLklzbzEwMTI2ID0ge1xuICAgIHBhZDogZnVuY3Rpb24gcGFkKGRhdGEsIGJsb2NrU2l6ZSkge1xuICAgICAgLy8gU2hvcnRjdXRcbiAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7IC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblxuICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGEuc2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlczsgLy8gUGFkXG5cbiAgICAgIGRhdGEuY29uY2F0KENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKG5QYWRkaW5nQnl0ZXMgLSAxKSkuY29uY2F0KENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFtuUGFkZGluZ0J5dGVzIDw8IDI0XSwgMSkpO1xuICAgIH0sXG4gICAgdW5wYWQ6IGZ1bmN0aW9uIHVucGFkKGRhdGEpIHtcbiAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzW2RhdGEuc2lnQnl0ZXMgLSAxID4+PiAyXSAmIDB4ZmY7IC8vIFJlbW92ZSBwYWRkaW5nXG5cbiAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcbiAgICB9XG4gIH07XG4gIHJldHVybiBDcnlwdG9KUy5wYWQuSXNvMTAxMjY7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDg4MDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oMjIyMik7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oMTU4MikpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIC8qKlxuICAgKiBJU08vSUVDIDk3OTctMSBQYWRkaW5nIE1ldGhvZCAyLlxuICAgKi9cbiAgQ3J5cHRvSlMucGFkLklzbzk3OTcxID0ge1xuICAgIHBhZDogZnVuY3Rpb24gcGFkKGRhdGEsIGJsb2NrU2l6ZSkge1xuICAgICAgLy8gQWRkIDB4ODAgYnl0ZVxuICAgICAgZGF0YS5jb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4ODAwMDAwMDBdLCAxKSk7IC8vIFplcm8gcGFkIHRoZSByZXN0XG5cbiAgICAgIENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZy5wYWQoZGF0YSwgYmxvY2tTaXplKTtcbiAgICB9LFxuICAgIHVucGFkOiBmdW5jdGlvbiB1bnBhZChkYXRhKSB7XG4gICAgICAvLyBSZW1vdmUgemVybyBwYWRkaW5nXG4gICAgICBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcudW5wYWQoZGF0YSk7IC8vIFJlbW92ZSBvbmUgbW9yZSBieXRlIC0tIHRoZSAweDgwIGJ5dGVcblxuICAgICAgZGF0YS5zaWdCeXRlcy0tO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIENyeXB0b0pTLnBhZC5Jc285Nzk3MTtcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjQ5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcbiAgaWYgKHRydWUpIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoX193ZWJwYWNrX3JlcXVpcmVfXyg3NTcpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1ODIpKTtcbiAgfSBlbHNlIHt9XG59KSh2b2lkIDAsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuICAvKipcbiAgICogQSBub29wIHBhZGRpbmcgc3RyYXRlZ3kuXG4gICAqL1xuICBDcnlwdG9KUy5wYWQuTm9QYWRkaW5nID0ge1xuICAgIHBhZDogZnVuY3Rpb24gcGFkKCkge30sXG4gICAgdW5wYWQ6IGZ1bmN0aW9uIHVucGFkKCkge31cbiAgfTtcbiAgcmV0dXJuIENyeXB0b0pTLnBhZC5Ob1BhZGRpbmc7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM5OTI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oMTU4MikpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIC8qKlxuICAgKiBaZXJvIHBhZGRpbmcgc3RyYXRlZ3kuXG4gICAqL1xuICBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcgPSB7XG4gICAgcGFkOiBmdW5jdGlvbiBwYWQoZGF0YSwgYmxvY2tTaXplKSB7XG4gICAgICAvLyBTaG9ydGN1dFxuICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDsgLy8gUGFkXG5cbiAgICAgIGRhdGEuY2xhbXAoKTtcbiAgICAgIGRhdGEuc2lnQnl0ZXMgKz0gYmxvY2tTaXplQnl0ZXMgLSAoZGF0YS5zaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzIHx8IGJsb2NrU2l6ZUJ5dGVzKTtcbiAgICB9LFxuICAgIHVucGFkOiBmdW5jdGlvbiB1bnBhZChkYXRhKSB7XG4gICAgICAvLyBTaG9ydGN1dFxuICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7IC8vIFVucGFkXG5cbiAgICAgIHZhciBpID0gZGF0YS5zaWdCeXRlcyAtIDE7XG5cbiAgICAgIGZvciAodmFyIGkgPSBkYXRhLnNpZ0J5dGVzIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYgKGRhdGFXb3Jkc1tpID4+PiAyXSA+Pj4gMjQgLSBpICUgNCAqIDggJiAweGZmKSB7XG4gICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4gQ3J5cHRvSlMucGFkLlplcm9QYWRkaW5nO1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNDg2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMjIpO1xuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcbiAgaWYgKHRydWUpIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoX193ZWJwYWNrX3JlcXVpcmVfXyg3NTcpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4NjUpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDY3MjcpKTtcbiAgfSBlbHNlIHt9XG59KSh2b2lkIDAsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuICAoZnVuY3Rpb24gKCkge1xuICAgIC8vIFNob3J0Y3V0c1xuICAgIHZhciBDID0gQ3J5cHRvSlM7XG4gICAgdmFyIENfbGliID0gQy5saWI7XG4gICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG4gICAgdmFyIENfYWxnbyA9IEMuYWxnbztcbiAgICB2YXIgU0hBMSA9IENfYWxnby5TSEExO1xuICAgIHZhciBITUFDID0gQ19hbGdvLkhNQUM7XG4gICAgLyoqXG4gICAgICogUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMiBhbGdvcml0aG0uXG4gICAgICovXG5cbiAgICB2YXIgUEJLREYyID0gQ19hbGdvLlBCS0RGMiA9IEJhc2UuZXh0ZW5kKHtcbiAgICAgIC8qKlxuICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAgICpcbiAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoZSBrZXkgc2l6ZSBpbiB3b3JkcyB0byBnZW5lcmF0ZS4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG4gICAgICAgKiBAcHJvcGVydHkge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gdXNlLiBEZWZhdWx0OiBTSEExXG4gICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gaXRlcmF0aW9ucyBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybS4gRGVmYXVsdDogMVxuICAgICAgICovXG4gICAgICBjZmc6IEJhc2UuZXh0ZW5kKHtcbiAgICAgICAga2V5U2l6ZTogMTI4IC8gMzIsXG4gICAgICAgIGhhc2hlcjogU0hBMSxcbiAgICAgICAgaXRlcmF0aW9uczogMVxuICAgICAgfSksXG5cbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIGRlcml2YXRpb24uXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uUEJLREYyLmNyZWF0ZSgpO1xuICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLlBCS0RGMi5jcmVhdGUoeyBrZXlTaXplOiA4IH0pO1xuICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLlBCS0RGMi5jcmVhdGUoeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuICAgICAgICovXG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KGNmZykge1xuICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDb21wdXRlcyB0aGUgUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMi5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cbiAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGtleSA9IGtkZi5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcbiAgICAgICAqL1xuICAgICAgY29tcHV0ZTogZnVuY3Rpb24gY29tcHV0ZShwYXNzd29yZCwgc2FsdCkge1xuICAgICAgICAvLyBTaG9ydGN1dFxuICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7IC8vIEluaXQgSE1BQ1xuXG4gICAgICAgIHZhciBobWFjID0gSE1BQy5jcmVhdGUoY2ZnLmhhc2hlciwgcGFzc3dvcmQpOyAvLyBJbml0aWFsIHZhbHVlc1xuXG4gICAgICAgIHZhciBkZXJpdmVkS2V5ID0gV29yZEFycmF5LmNyZWF0ZSgpO1xuICAgICAgICB2YXIgYmxvY2tJbmRleCA9IFdvcmRBcnJheS5jcmVhdGUoWzB4MDAwMDAwMDFdKTsgLy8gU2hvcnRjdXRzXG5cbiAgICAgICAgdmFyIGRlcml2ZWRLZXlXb3JkcyA9IGRlcml2ZWRLZXkud29yZHM7XG4gICAgICAgIHZhciBibG9ja0luZGV4V29yZHMgPSBibG9ja0luZGV4LndvcmRzO1xuICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zOyAvLyBHZW5lcmF0ZSBrZXlcblxuICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcbiAgICAgICAgICB2YXIgYmxvY2sgPSBobWFjLnVwZGF0ZShzYWx0KS5maW5hbGl6ZShibG9ja0luZGV4KTtcbiAgICAgICAgICBobWFjLnJlc2V0KCk7IC8vIFNob3J0Y3V0c1xuXG4gICAgICAgICAgdmFyIGJsb2NrV29yZHMgPSBibG9jay53b3JkcztcbiAgICAgICAgICB2YXIgYmxvY2tXb3Jkc0xlbmd0aCA9IGJsb2NrV29yZHMubGVuZ3RoOyAvLyBJdGVyYXRpb25zXG5cbiAgICAgICAgICB2YXIgaW50ZXJtZWRpYXRlID0gYmxvY2s7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICAgICAgaW50ZXJtZWRpYXRlID0gaG1hYy5maW5hbGl6ZShpbnRlcm1lZGlhdGUpO1xuICAgICAgICAgICAgaG1hYy5yZXNldCgpOyAvLyBTaG9ydGN1dFxuXG4gICAgICAgICAgICB2YXIgaW50ZXJtZWRpYXRlV29yZHMgPSBpbnRlcm1lZGlhdGUud29yZHM7IC8vIFhPUiBpbnRlcm1lZGlhdGUgd2l0aCBibG9ja1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJsb2NrV29yZHNMZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICBibG9ja1dvcmRzW2pdIF49IGludGVybWVkaWF0ZVdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlcml2ZWRLZXkuY29uY2F0KGJsb2NrKTtcbiAgICAgICAgICBibG9ja0luZGV4V29yZHNbMF0rKztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcml2ZWRLZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDtcbiAgICAgICAgcmV0dXJuIGRlcml2ZWRLZXk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIFBhc3N3b3JkLUJhc2VkIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9uIDIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cbiAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBjb21wdXRhdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0KTtcbiAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4IH0pO1xuICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG4gICAgICovXG5cbiAgICBDLlBCS0RGMiA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgY2ZnKSB7XG4gICAgICByZXR1cm4gUEJLREYyLmNyZWF0ZShjZmcpLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuICAgIH07XG4gIH0pKCk7XG5cbiAgcmV0dXJuIENyeXB0b0pTLlBCS0RGMjtcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDM2Mzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuO1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG4gIGlmICh0cnVlKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KF9fd2VicGFja19yZXF1aXJlX18oNzU3KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg3NTA4KSwgX193ZWJwYWNrX3JlcXVpcmVfXygzNDQwKSwgX193ZWJwYWNrX3JlcXVpcmVfXygzODM5KSwgX193ZWJwYWNrX3JlcXVpcmVfXygxNTgyKSk7XG4gIH0gZWxzZSB7fVxufSkodm9pZCAwLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTaG9ydGN1dHNcbiAgICB2YXIgQyA9IENyeXB0b0pTO1xuICAgIHZhciBDX2xpYiA9IEMubGliO1xuICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG4gICAgdmFyIENfYWxnbyA9IEMuYWxnbzsgLy8gUmV1c2FibGUgb2JqZWN0c1xuXG4gICAgdmFyIFMgPSBbXTtcbiAgICB2YXIgQ18gPSBbXTtcbiAgICB2YXIgRyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFJhYmJpdCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBsZWdhY3kgdmVyc2lvbiB0aGF0IG5lZ2xlY3RlZCB0byBjb252ZXJ0IHRoZSBrZXkgdG8gbGl0dGxlLWVuZGlhbi5cbiAgICAgKiBUaGlzIGVycm9yIGRvZXNuJ3QgYWZmZWN0IHRoZSBjaXBoZXIncyBzZWN1cml0eSxcbiAgICAgKiBidXQgaXQgZG9lcyBhZmZlY3QgaXRzIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMuXG4gICAgICovXG5cbiAgICB2YXIgUmFiYml0TGVnYWN5ID0gQ19hbGdvLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5leHRlbmQoe1xuICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uIF9kb1Jlc2V0KCkge1xuICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgdmFyIEsgPSB0aGlzLl9rZXkud29yZHM7XG4gICAgICAgIHZhciBpdiA9IHRoaXMuY2ZnLml2OyAvLyBHZW5lcmF0ZSBpbml0aWFsIHN0YXRlIHZhbHVlc1xuXG4gICAgICAgIHZhciBYID0gdGhpcy5fWCA9IFtLWzBdLCBLWzNdIDw8IDE2IHwgS1syXSA+Pj4gMTYsIEtbMV0sIEtbMF0gPDwgMTYgfCBLWzNdID4+PiAxNiwgS1syXSwgS1sxXSA8PCAxNiB8IEtbMF0gPj4+IDE2LCBLWzNdLCBLWzJdIDw8IDE2IHwgS1sxXSA+Pj4gMTZdOyAvLyBHZW5lcmF0ZSBpbml0aWFsIGNvdW50ZXIgdmFsdWVzXG5cbiAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW0tbMl0gPDwgMTYgfCBLWzJdID4+PiAxNiwgS1swXSAmIDB4ZmZmZjAwMDAgfCBLWzFdICYgMHgwMDAwZmZmZiwgS1szXSA8PCAxNiB8IEtbM10gPj4+IDE2LCBLWzFdICYgMHhmZmZmMDAwMCB8IEtbMl0gJiAweDAwMDBmZmZmLCBLWzBdIDw8IDE2IHwgS1swXSA+Pj4gMTYsIEtbMl0gJiAweGZmZmYwMDAwIHwgS1szXSAmIDB4MDAwMGZmZmYsIEtbMV0gPDwgMTYgfCBLWzFdID4+PiAxNiwgS1szXSAmIDB4ZmZmZjAwMDAgfCBLWzBdICYgMHgwMDAwZmZmZl07IC8vIENhcnJ5IGJpdFxuXG4gICAgICAgIHRoaXMuX2IgPSAwOyAvLyBJdGVyYXRlIHRoZSBzeXN0ZW0gZm91ciB0aW1lc1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG4gICAgICAgIH0gLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgICBDW2ldIF49IFhbaSArIDQgJiA3XTtcbiAgICAgICAgfSAvLyBJViBzZXR1cFxuXG5cbiAgICAgICAgaWYgKGl2KSB7XG4gICAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgICAgdmFyIElWID0gaXYud29yZHM7XG4gICAgICAgICAgdmFyIElWXzAgPSBJVlswXTtcbiAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdOyAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblxuICAgICAgICAgIHZhciBpMCA9IChJVl8wIDw8IDggfCBJVl8wID4+PiAyNCkgJiAweDAwZmYwMGZmIHwgKElWXzAgPDwgMjQgfCBJVl8wID4+PiA4KSAmIDB4ZmYwMGZmMDA7XG4gICAgICAgICAgdmFyIGkyID0gKElWXzEgPDwgOCB8IElWXzEgPj4+IDI0KSAmIDB4MDBmZjAwZmYgfCAoSVZfMSA8PCAyNCB8IElWXzEgPj4+IDgpICYgMHhmZjAwZmYwMDtcbiAgICAgICAgICB2YXIgaTEgPSBpMCA+Pj4gMTYgfCBpMiAmIDB4ZmZmZjAwMDA7XG4gICAgICAgICAgdmFyIGkzID0gaTIgPDwgMTYgfCBpMCAmIDB4MDAwMGZmZmY7IC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXG4gICAgICAgICAgQ1swXSBePSBpMDtcbiAgICAgICAgICBDWzFdIF49IGkxO1xuICAgICAgICAgIENbMl0gXj0gaTI7XG4gICAgICAgICAgQ1szXSBePSBpMztcbiAgICAgICAgICBDWzRdIF49IGkwO1xuICAgICAgICAgIENbNV0gXj0gaTE7XG4gICAgICAgICAgQ1s2XSBePSBpMjtcbiAgICAgICAgICBDWzddIF49IGkzOyAvLyBJdGVyYXRlIHRoZSBzeXN0ZW0gZm91ciB0aW1lc1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gX2RvUHJvY2Vzc0Jsb2NrKE0sIG9mZnNldCkge1xuICAgICAgICAvLyBTaG9ydGN1dFxuICAgICAgICB2YXIgWCA9IHRoaXMuX1g7IC8vIEl0ZXJhdGUgdGhlIHN5c3RlbVxuXG4gICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpOyAvLyBHZW5lcmF0ZSBmb3VyIGtleXN0cmVhbSB3b3Jkc1xuXG4gICAgICAgIFNbMF0gPSBYWzBdIF4gWFs1XSA+Pj4gMTYgXiBYWzNdIDw8IDE2O1xuICAgICAgICBTWzFdID0gWFsyXSBeIFhbN10gPj4+IDE2IF4gWFs1XSA8PCAxNjtcbiAgICAgICAgU1syXSA9IFhbNF0gXiBYWzFdID4+PiAxNiBeIFhbN10gPDwgMTY7XG4gICAgICAgIFNbM10gPSBYWzZdIF4gWFszXSA+Pj4gMTYgXiBYWzFdIDw8IDE2O1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgLy8gU3dhcCBlbmRpYW5cbiAgICAgICAgICBTW2ldID0gKFNbaV0gPDwgOCB8IFNbaV0gPj4+IDI0KSAmIDB4MDBmZjAwZmYgfCAoU1tpXSA8PCAyNCB8IFNbaV0gPj4+IDgpICYgMHhmZjAwZmYwMDsgLy8gRW5jcnlwdFxuXG4gICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYmxvY2tTaXplOiAxMjggLyAzMixcbiAgICAgIGl2U2l6ZTogNjQgLyAzMlxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbmV4dFN0YXRlKCkge1xuICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICB2YXIgWCA9IHRoaXMuX1g7XG4gICAgICB2YXIgQyA9IHRoaXMuX0M7IC8vIFNhdmUgb2xkIGNvdW50ZXIgdmFsdWVzXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgIENfW2ldID0gQ1tpXTtcbiAgICAgIH0gLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXG5cbiAgICAgIENbMF0gPSBDWzBdICsgMHg0ZDM0ZDM0ZCArIHRoaXMuX2IgfCAwO1xuICAgICAgQ1sxXSA9IENbMV0gKyAweGQzNGQzNGQzICsgKENbMF0gPj4+IDAgPCBDX1swXSA+Pj4gMCA/IDEgOiAwKSB8IDA7XG4gICAgICBDWzJdID0gQ1syXSArIDB4MzRkMzRkMzQgKyAoQ1sxXSA+Pj4gMCA8IENfWzFdID4+PiAwID8gMSA6IDApIHwgMDtcbiAgICAgIENbM10gPSBDWzNdICsgMHg0ZDM0ZDM0ZCArIChDWzJdID4+PiAwIDwgQ19bMl0gPj4+IDAgPyAxIDogMCkgfCAwO1xuICAgICAgQ1s0XSA9IENbNF0gKyAweGQzNGQzNGQzICsgKENbM10gPj4+IDAgPCBDX1szXSA+Pj4gMCA/IDEgOiAwKSB8IDA7XG4gICAgICBDWzVdID0gQ1s1XSArIDB4MzRkMzRkMzQgKyAoQ1s0XSA+Pj4gMCA8IENfWzRdID4+PiAwID8gMSA6IDApIHwgMDtcbiAgICAgIENbNl0gPSBDWzZdICsgMHg0ZDM0ZDM0ZCArIChDWzVdID4+PiAwIDwgQ19bNV0gPj4+IDAgPyAxIDogMCkgfCAwO1xuICAgICAgQ1s3XSA9IENbN10gKyAweGQzNGQzNGQzICsgKENbNl0gPj4+IDAgPCBDX1s2XSA+Pj4gMCA/IDEgOiAwKSB8IDA7XG4gICAgICB0aGlzLl9iID0gQ1s3XSA+Pj4gMCA8IENfWzddID4+PiAwID8gMSA6IDA7IC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgdmFyIGd4ID0gWFtpXSArIENbaV07IC8vIENvbnN0cnVjdCBoaWdoIGFuZCBsb3cgYXJndW1lbnQgZm9yIHNxdWFyaW5nXG5cbiAgICAgICAgdmFyIGdhID0gZ3ggJiAweGZmZmY7XG4gICAgICAgIHZhciBnYiA9IGd4ID4+PiAxNjsgLy8gQ2FsY3VsYXRlIGhpZ2ggYW5kIGxvdyByZXN1bHQgb2Ygc3F1YXJpbmdcblxuICAgICAgICB2YXIgZ2ggPSAoKGdhICogZ2EgPj4+IDE3KSArIGdhICogZ2IgPj4+IDE1KSArIGdiICogZ2I7XG4gICAgICAgIHZhciBnbCA9ICgoZ3ggJiAweGZmZmYwMDAwKSAqIGd4IHwgMCkgKyAoKGd4ICYgMHgwMDAwZmZmZikgKiBneCB8IDApOyAvLyBIaWdoIFhPUiBsb3dcblxuICAgICAgICBHW2ldID0gZ2ggXiBnbDtcbiAgICAgIH0gLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblxuXG4gICAgICBYWzBdID0gR1swXSArIChHWzddIDw8IDE2IHwgR1s3XSA+Pj4gMTYpICsgKEdbNl0gPDwgMTYgfCBHWzZdID4+PiAxNikgfCAwO1xuICAgICAgWFsxXSA9IEdbMV0gKyAoR1swXSA8PCA4IHwgR1swXSA+Pj4gMjQpICsgR1s3XSB8IDA7XG4gICAgICBYWzJdID0gR1syXSArIChHWzFdIDw8IDE2IHwgR1sxXSA+Pj4gMTYpICsgKEdbMF0gPDwgMTYgfCBHWzBdID4+PiAxNikgfCAwO1xuICAgICAgWFszXSA9IEdbM10gKyAoR1syXSA8PCA4IHwgR1syXSA+Pj4gMjQpICsgR1sxXSB8IDA7XG4gICAgICBYWzRdID0gR1s0XSArIChHWzNdIDw8IDE2IHwgR1szXSA+Pj4gMTYpICsgKEdbMl0gPDwgMTYgfCBHWzJdID4+PiAxNikgfCAwO1xuICAgICAgWFs1XSA9IEdbNV0gKyAoR1s0XSA8PCA4IHwgR1s0XSA+Pj4gMjQpICsgR1szXSB8IDA7XG4gICAgICBYWzZdID0gR1s2XSArIChHWzVdIDw8IDE2IHwgR1s1XSA+Pj4gMTYpICsgKEdbNF0gPDwgMTYgfCBHWzRdID4+PiAxNikgfCAwO1xuICAgICAgWFs3XSA9IEdbN10gKyAoR1s2XSA8PCA4IHwgR1s2XSA+Pj4gMjQpICsgR1s1XSB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SYWJiaXRMZWdhY3kuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG4gICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuICAgICAqL1xuXG5cbiAgICBDLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdExlZ2FjeSk7XG4gIH0pKCk7XG5cbiAgcmV0dXJuIENyeXB0b0pTLlJhYmJpdExlZ2FjeTtcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTMyMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuO1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG4gIGlmICh0cnVlKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KF9fd2VicGFja19yZXF1aXJlX18oNzU3KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg3NTA4KSwgX193ZWJwYWNrX3JlcXVpcmVfXygzNDQwKSwgX193ZWJwYWNrX3JlcXVpcmVfXygzODM5KSwgX193ZWJwYWNrX3JlcXVpcmVfXygxNTgyKSk7XG4gIH0gZWxzZSB7fVxufSkodm9pZCAwLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTaG9ydGN1dHNcbiAgICB2YXIgQyA9IENyeXB0b0pTO1xuICAgIHZhciBDX2xpYiA9IEMubGliO1xuICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG4gICAgdmFyIENfYWxnbyA9IEMuYWxnbzsgLy8gUmV1c2FibGUgb2JqZWN0c1xuXG4gICAgdmFyIFMgPSBbXTtcbiAgICB2YXIgQ18gPSBbXTtcbiAgICB2YXIgRyA9IFtdO1xuICAgIC8qKlxuICAgICAqIFJhYmJpdCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobVxuICAgICAqL1xuXG4gICAgdmFyIFJhYmJpdCA9IENfYWxnby5SYWJiaXQgPSBTdHJlYW1DaXBoZXIuZXh0ZW5kKHtcbiAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiBfZG9SZXNldCgpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciBLID0gdGhpcy5fa2V5LndvcmRzO1xuICAgICAgICB2YXIgaXYgPSB0aGlzLmNmZy5pdjsgLy8gU3dhcCBlbmRpYW5cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgIEtbaV0gPSAoS1tpXSA8PCA4IHwgS1tpXSA+Pj4gMjQpICYgMHgwMGZmMDBmZiB8IChLW2ldIDw8IDI0IHwgS1tpXSA+Pj4gOCkgJiAweGZmMDBmZjAwO1xuICAgICAgICB9IC8vIEdlbmVyYXRlIGluaXRpYWwgc3RhdGUgdmFsdWVzXG5cblxuICAgICAgICB2YXIgWCA9IHRoaXMuX1ggPSBbS1swXSwgS1szXSA8PCAxNiB8IEtbMl0gPj4+IDE2LCBLWzFdLCBLWzBdIDw8IDE2IHwgS1szXSA+Pj4gMTYsIEtbMl0sIEtbMV0gPDwgMTYgfCBLWzBdID4+PiAxNiwgS1szXSwgS1syXSA8PCAxNiB8IEtbMV0gPj4+IDE2XTsgLy8gR2VuZXJhdGUgaW5pdGlhbCBjb3VudGVyIHZhbHVlc1xuXG4gICAgICAgIHZhciBDID0gdGhpcy5fQyA9IFtLWzJdIDw8IDE2IHwgS1syXSA+Pj4gMTYsIEtbMF0gJiAweGZmZmYwMDAwIHwgS1sxXSAmIDB4MDAwMGZmZmYsIEtbM10gPDwgMTYgfCBLWzNdID4+PiAxNiwgS1sxXSAmIDB4ZmZmZjAwMDAgfCBLWzJdICYgMHgwMDAwZmZmZiwgS1swXSA8PCAxNiB8IEtbMF0gPj4+IDE2LCBLWzJdICYgMHhmZmZmMDAwMCB8IEtbM10gJiAweDAwMDBmZmZmLCBLWzFdIDw8IDE2IHwgS1sxXSA+Pj4gMTYsIEtbM10gJiAweGZmZmYwMDAwIHwgS1swXSAmIDB4MDAwMGZmZmZdOyAvLyBDYXJyeSBiaXRcblxuICAgICAgICB0aGlzLl9iID0gMDsgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuICAgICAgICB9IC8vIE1vZGlmeSB0aGUgY291bnRlcnNcblxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgQ1tpXSBePSBYW2kgKyA0ICYgN107XG4gICAgICAgIH0gLy8gSVYgc2V0dXBcblxuXG4gICAgICAgIGlmIChpdikge1xuICAgICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICAgIHZhciBJViA9IGl2LndvcmRzO1xuICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG4gICAgICAgICAgdmFyIElWXzEgPSBJVlsxXTsgLy8gR2VuZXJhdGUgZm91ciBzdWJ2ZWN0b3JzXG5cbiAgICAgICAgICB2YXIgaTAgPSAoSVZfMCA8PCA4IHwgSVZfMCA+Pj4gMjQpICYgMHgwMGZmMDBmZiB8IChJVl8wIDw8IDI0IHwgSVZfMCA+Pj4gOCkgJiAweGZmMDBmZjAwO1xuICAgICAgICAgIHZhciBpMiA9IChJVl8xIDw8IDggfCBJVl8xID4+PiAyNCkgJiAweDAwZmYwMGZmIHwgKElWXzEgPDwgMjQgfCBJVl8xID4+PiA4KSAmIDB4ZmYwMGZmMDA7XG4gICAgICAgICAgdmFyIGkxID0gaTAgPj4+IDE2IHwgaTIgJiAweGZmZmYwMDAwO1xuICAgICAgICAgIHZhciBpMyA9IGkyIDw8IDE2IHwgaTAgJiAweDAwMDBmZmZmOyAvLyBNb2RpZnkgY291bnRlciB2YWx1ZXNcblxuICAgICAgICAgIENbMF0gXj0gaTA7XG4gICAgICAgICAgQ1sxXSBePSBpMTtcbiAgICAgICAgICBDWzJdIF49IGkyO1xuICAgICAgICAgIENbM10gXj0gaTM7XG4gICAgICAgICAgQ1s0XSBePSBpMDtcbiAgICAgICAgICBDWzVdIF49IGkxO1xuICAgICAgICAgIENbNl0gXj0gaTI7XG4gICAgICAgICAgQ1s3XSBePSBpMzsgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICBuZXh0U3RhdGUuY2FsbCh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIF9kb1Byb2Nlc3NCbG9jayhNLCBvZmZzZXQpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRcbiAgICAgICAgdmFyIFggPSB0aGlzLl9YOyAvLyBJdGVyYXRlIHRoZSBzeXN0ZW1cblxuICAgICAgICBuZXh0U3RhdGUuY2FsbCh0aGlzKTsgLy8gR2VuZXJhdGUgZm91ciBrZXlzdHJlYW0gd29yZHNcblxuICAgICAgICBTWzBdID0gWFswXSBeIFhbNV0gPj4+IDE2IF4gWFszXSA8PCAxNjtcbiAgICAgICAgU1sxXSA9IFhbMl0gXiBYWzddID4+PiAxNiBeIFhbNV0gPDwgMTY7XG4gICAgICAgIFNbMl0gPSBYWzRdIF4gWFsxXSA+Pj4gMTYgXiBYWzddIDw8IDE2O1xuICAgICAgICBTWzNdID0gWFs2XSBeIFhbM10gPj4+IDE2IF4gWFsxXSA8PCAxNjtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG4gICAgICAgICAgU1tpXSA9IChTW2ldIDw8IDggfCBTW2ldID4+PiAyNCkgJiAweDAwZmYwMGZmIHwgKFNbaV0gPDwgMjQgfCBTW2ldID4+PiA4KSAmIDB4ZmYwMGZmMDA7IC8vIEVuY3J5cHRcblxuICAgICAgICAgIE1bb2Zmc2V0ICsgaV0gXj0gU1tpXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGJsb2NrU2l6ZTogMTI4IC8gMzIsXG4gICAgICBpdlNpemU6IDY0IC8gMzJcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcbiAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgdmFyIFggPSB0aGlzLl9YO1xuICAgICAgdmFyIEMgPSB0aGlzLl9DOyAvLyBTYXZlIG9sZCBjb3VudGVyIHZhbHVlc1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgICAgICBDX1tpXSA9IENbaV07XG4gICAgICB9IC8vIENhbGN1bGF0ZSBuZXcgY291bnRlciB2YWx1ZXNcblxuXG4gICAgICBDWzBdID0gQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iIHwgMDtcbiAgICAgIENbMV0gPSBDWzFdICsgMHhkMzRkMzRkMyArIChDWzBdID4+PiAwIDwgQ19bMF0gPj4+IDAgPyAxIDogMCkgfCAwO1xuICAgICAgQ1syXSA9IENbMl0gKyAweDM0ZDM0ZDM0ICsgKENbMV0gPj4+IDAgPCBDX1sxXSA+Pj4gMCA/IDEgOiAwKSB8IDA7XG4gICAgICBDWzNdID0gQ1szXSArIDB4NGQzNGQzNGQgKyAoQ1syXSA+Pj4gMCA8IENfWzJdID4+PiAwID8gMSA6IDApIHwgMDtcbiAgICAgIENbNF0gPSBDWzRdICsgMHhkMzRkMzRkMyArIChDWzNdID4+PiAwIDwgQ19bM10gPj4+IDAgPyAxIDogMCkgfCAwO1xuICAgICAgQ1s1XSA9IENbNV0gKyAweDM0ZDM0ZDM0ICsgKENbNF0gPj4+IDAgPCBDX1s0XSA+Pj4gMCA/IDEgOiAwKSB8IDA7XG4gICAgICBDWzZdID0gQ1s2XSArIDB4NGQzNGQzNGQgKyAoQ1s1XSA+Pj4gMCA8IENfWzVdID4+PiAwID8gMSA6IDApIHwgMDtcbiAgICAgIENbN10gPSBDWzddICsgMHhkMzRkMzRkMyArIChDWzZdID4+PiAwIDwgQ19bNl0gPj4+IDAgPyAxIDogMCkgfCAwO1xuICAgICAgdGhpcy5fYiA9IENbN10gPj4+IDAgPCBDX1s3XSA+Pj4gMCA/IDEgOiAwOyAvLyBDYWxjdWxhdGUgdGhlIGctdmFsdWVzXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgIHZhciBneCA9IFhbaV0gKyBDW2ldOyAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXG4gICAgICAgIHZhciBnYSA9IGd4ICYgMHhmZmZmO1xuICAgICAgICB2YXIgZ2IgPSBneCA+Pj4gMTY7IC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cbiAgICAgICAgdmFyIGdoID0gKChnYSAqIGdhID4+PiAxNykgKyBnYSAqIGdiID4+PiAxNSkgKyBnYiAqIGdiO1xuICAgICAgICB2YXIgZ2wgPSAoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCB8IDApICsgKChneCAmIDB4MDAwMGZmZmYpICogZ3ggfCAwKTsgLy8gSGlnaCBYT1IgbG93XG5cbiAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG4gICAgICB9IC8vIENhbGN1bGF0ZSBuZXcgc3RhdGUgdmFsdWVzXG5cblxuICAgICAgWFswXSA9IEdbMF0gKyAoR1s3XSA8PCAxNiB8IEdbN10gPj4+IDE2KSArIChHWzZdIDw8IDE2IHwgR1s2XSA+Pj4gMTYpIHwgMDtcbiAgICAgIFhbMV0gPSBHWzFdICsgKEdbMF0gPDwgOCB8IEdbMF0gPj4+IDI0KSArIEdbN10gfCAwO1xuICAgICAgWFsyXSA9IEdbMl0gKyAoR1sxXSA8PCAxNiB8IEdbMV0gPj4+IDE2KSArIChHWzBdIDw8IDE2IHwgR1swXSA+Pj4gMTYpIHwgMDtcbiAgICAgIFhbM10gPSBHWzNdICsgKEdbMl0gPDwgOCB8IEdbMl0gPj4+IDI0KSArIEdbMV0gfCAwO1xuICAgICAgWFs0XSA9IEdbNF0gKyAoR1szXSA8PCAxNiB8IEdbM10gPj4+IDE2KSArIChHWzJdIDw8IDE2IHwgR1syXSA+Pj4gMTYpIHwgMDtcbiAgICAgIFhbNV0gPSBHWzVdICsgKEdbNF0gPDwgOCB8IEdbNF0gPj4+IDI0KSArIEdbM10gfCAwO1xuICAgICAgWFs2XSA9IEdbNl0gKyAoR1s1XSA8PCAxNiB8IEdbNV0gPj4+IDE2KSArIChHWzRdIDw8IDE2IHwgR1s0XSA+Pj4gMTYpIHwgMDtcbiAgICAgIFhbN10gPSBHWzddICsgKEdbNl0gPDwgOCB8IEdbNl0gPj4+IDI0KSArIEdbNV0gfCAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJhYmJpdC5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcbiAgICAgKi9cblxuXG4gICAgQy5SYWJiaXQgPSBTdHJlYW1DaXBoZXIuX2NyZWF0ZUhlbHBlcihSYWJiaXQpO1xuICB9KSgpO1xuXG4gIHJldHVybiBDcnlwdG9KUy5SYWJiaXQ7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQ2NDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oMTUzOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oODY3NCk7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oNzUwOCksIF9fd2VicGFja19yZXF1aXJlX18oMzQ0MCksIF9fd2VicGFja19yZXF1aXJlX18oMzgzOSksIF9fd2VicGFja19yZXF1aXJlX18oMTU4MikpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2hvcnRjdXRzXG4gICAgdmFyIEMgPSBDcnlwdG9KUztcbiAgICB2YXIgQ19saWIgPSBDLmxpYjtcbiAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyO1xuICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG4gICAgLyoqXG4gICAgICogUkM0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtLlxuICAgICAqL1xuXG4gICAgdmFyIFJDNCA9IENfYWxnby5SQzQgPSBTdHJlYW1DaXBoZXIuZXh0ZW5kKHtcbiAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiBfZG9SZXNldCgpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG4gICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3JkcztcbiAgICAgICAgdmFyIGtleVNpZ0J5dGVzID0ga2V5LnNpZ0J5dGVzOyAvLyBJbml0IHNib3hcblxuICAgICAgICB2YXIgUyA9IHRoaXMuX1MgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgU1tpXSA9IGk7XG4gICAgICAgIH0gLy8gS2V5IHNldHVwXG5cblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICAgIHZhciBrZXlCeXRlSW5kZXggPSBpICUga2V5U2lnQnl0ZXM7XG4gICAgICAgICAgdmFyIGtleUJ5dGUgPSBrZXlXb3Jkc1trZXlCeXRlSW5kZXggPj4+IDJdID4+PiAyNCAtIGtleUJ5dGVJbmRleCAlIDQgKiA4ICYgMHhmZjtcbiAgICAgICAgICBqID0gKGogKyBTW2ldICsga2V5Qnl0ZSkgJSAyNTY7IC8vIFN3YXBcblxuICAgICAgICAgIHZhciB0ID0gU1tpXTtcbiAgICAgICAgICBTW2ldID0gU1tqXTtcbiAgICAgICAgICBTW2pdID0gdDtcbiAgICAgICAgfSAvLyBDb3VudGVyc1xuXG5cbiAgICAgICAgdGhpcy5faSA9IHRoaXMuX2ogPSAwO1xuICAgICAgfSxcbiAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gX2RvUHJvY2Vzc0Jsb2NrKE0sIG9mZnNldCkge1xuICAgICAgICBNW29mZnNldF0gXj0gZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkLmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAga2V5U2l6ZTogMjU2IC8gMzIsXG4gICAgICBpdlNpemU6IDBcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlS2V5c3RyZWFtV29yZCgpIHtcbiAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgdmFyIFMgPSB0aGlzLl9TO1xuICAgICAgdmFyIGkgPSB0aGlzLl9pO1xuICAgICAgdmFyIGogPSB0aGlzLl9qOyAvLyBHZW5lcmF0ZSBrZXlzdHJlYW0gd29yZFxuXG4gICAgICB2YXIga2V5c3RyZWFtV29yZCA9IDA7XG5cbiAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgNDsgbisrKSB7XG4gICAgICAgIGkgPSAoaSArIDEpICUgMjU2O1xuICAgICAgICBqID0gKGogKyBTW2ldKSAlIDI1NjsgLy8gU3dhcFxuXG4gICAgICAgIHZhciB0ID0gU1tpXTtcbiAgICAgICAgU1tpXSA9IFNbal07XG4gICAgICAgIFNbal0gPSB0O1xuICAgICAgICBrZXlzdHJlYW1Xb3JkIHw9IFNbKFNbaV0gKyBTW2pdKSAlIDI1Nl0gPDwgMjQgLSBuICogODtcbiAgICAgIH0gLy8gVXBkYXRlIGNvdW50ZXJzXG5cblxuICAgICAgdGhpcy5faSA9IGk7XG4gICAgICB0aGlzLl9qID0gajtcbiAgICAgIHJldHVybiBrZXlzdHJlYW1Xb3JkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUkM0LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJDNC5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcbiAgICAgKi9cblxuXG4gICAgQy5SQzQgPSBTdHJlYW1DaXBoZXIuX2NyZWF0ZUhlbHBlcihSQzQpO1xuICAgIC8qKlxuICAgICAqIE1vZGlmaWVkIFJDNCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobS5cbiAgICAgKi9cblxuICAgIHZhciBSQzREcm9wID0gQ19hbGdvLlJDNERyb3AgPSBSQzQuZXh0ZW5kKHtcbiAgICAgIC8qKlxuICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAgICpcbiAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkcm9wIFRoZSBudW1iZXIgb2Yga2V5c3RyZWFtIHdvcmRzIHRvIGRyb3AuIERlZmF1bHQgMTkyXG4gICAgICAgKi9cbiAgICAgIGNmZzogUkM0LmNmZy5leHRlbmQoe1xuICAgICAgICBkcm9wOiAxOTJcbiAgICAgIH0pLFxuICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uIF9kb1Jlc2V0KCkge1xuICAgICAgICBSQzQuX2RvUmVzZXQuY2FsbCh0aGlzKTsgLy8gRHJvcFxuXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY2ZnLmRyb3A7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICBnZW5lcmF0ZUtleXN0cmVhbVdvcmQuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SQzREcm9wLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJDNERyb3AuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG4gICAgICovXG5cbiAgICBDLlJDNERyb3AgPSBTdHJlYW1DaXBoZXIuX2NyZWF0ZUhlbHBlcihSQzREcm9wKTtcbiAgfSkoKTtcblxuICByZXR1cm4gQ3J5cHRvSlMuUkM0O1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NzE0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NykpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIC8qKiBAcHJlc2VydmVcbiAgKGMpIDIwMTIgYnkgQ8OpZHJpYyBNZXNuaWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gIFx0UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICBcdCAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICBcdFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAgKi9cbiAgKGZ1bmN0aW9uIChNYXRoKSB7XG4gICAgLy8gU2hvcnRjdXRzXG4gICAgdmFyIEMgPSBDcnlwdG9KUztcbiAgICB2YXIgQ19saWIgPSBDLmxpYjtcbiAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG4gICAgdmFyIENfYWxnbyA9IEMuYWxnbzsgLy8gQ29uc3RhbnRzIHRhYmxlXG5cbiAgICB2YXIgX3psID0gV29yZEFycmF5LmNyZWF0ZShbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNywgNCwgMTMsIDEsIDEwLCA2LCAxNSwgMywgMTIsIDAsIDksIDUsIDIsIDE0LCAxMSwgOCwgMywgMTAsIDE0LCA0LCA5LCAxNSwgOCwgMSwgMiwgNywgMCwgNiwgMTMsIDExLCA1LCAxMiwgMSwgOSwgMTEsIDEwLCAwLCA4LCAxMiwgNCwgMTMsIDMsIDcsIDE1LCAxNCwgNSwgNiwgMiwgNCwgMCwgNSwgOSwgNywgMTIsIDIsIDEwLCAxNCwgMSwgMywgOCwgMTEsIDYsIDE1LCAxM10pO1xuXG4gICAgdmFyIF96ciA9IFdvcmRBcnJheS5jcmVhdGUoWzUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFdKTtcblxuICAgIHZhciBfc2wgPSBXb3JkQXJyYXkuY3JlYXRlKFsxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMiwgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LCAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNl0pO1xuXG4gICAgdmFyIF9zciA9IFdvcmRBcnJheS5jcmVhdGUoWzgsIDksIDksIDExLCAxMywgMTUsIDE1LCA1LCA3LCA3LCA4LCAxMSwgMTQsIDE0LCAxMiwgNiwgOSwgMTMsIDE1LCA3LCAxMiwgOCwgOSwgMTEsIDcsIDcsIDEyLCA3LCA2LCAxNSwgMTMsIDExLCA5LCA3LCAxNSwgMTEsIDgsIDYsIDYsIDE0LCAxMiwgMTMsIDUsIDE0LCAxMywgMTMsIDcsIDUsIDE1LCA1LCA4LCAxMSwgMTQsIDE0LCA2LCAxNCwgNiwgOSwgMTIsIDksIDEyLCA1LCAxNSwgOCwgOCwgNSwgMTIsIDksIDEyLCA1LCAxNCwgNiwgOCwgMTMsIDYsIDUsIDE1LCAxMywgMTEsIDExXSk7XG5cbiAgICB2YXIgX2hsID0gV29yZEFycmF5LmNyZWF0ZShbMHgwMDAwMDAwMCwgMHg1QTgyNzk5OSwgMHg2RUQ5RUJBMSwgMHg4RjFCQkNEQywgMHhBOTUzRkQ0RV0pO1xuXG4gICAgdmFyIF9ociA9IFdvcmRBcnJheS5jcmVhdGUoWzB4NTBBMjhCRTYsIDB4NUM0REQxMjQsIDB4NkQ3MDNFRjMsIDB4N0E2RDc2RTksIDB4MDAwMDAwMDBdKTtcbiAgICAvKipcbiAgICAgKiBSSVBFTUQxNjAgaGFzaCBhbGdvcml0aG0uXG4gICAgICovXG5cblxuICAgIHZhciBSSVBFTUQxNjAgPSBDX2FsZ28uUklQRU1EMTYwID0gSGFzaGVyLmV4dGVuZCh7XG4gICAgICBfZG9SZXNldDogZnVuY3Rpb24gX2RvUmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX2hhc2ggPSBXb3JkQXJyYXkuY3JlYXRlKFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2LCAweEMzRDJFMUYwXSk7XG4gICAgICB9LFxuICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiBfZG9Qcm9jZXNzQmxvY2soTSwgb2Zmc2V0KSB7XG4gICAgICAgIC8vIFN3YXAgZW5kaWFuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICAgIHZhciBvZmZzZXRfaSA9IG9mZnNldCArIGk7XG4gICAgICAgICAgdmFyIE1fb2Zmc2V0X2kgPSBNW29mZnNldF9pXTsgLy8gU3dhcFxuXG4gICAgICAgICAgTVtvZmZzZXRfaV0gPSAoTV9vZmZzZXRfaSA8PCA4IHwgTV9vZmZzZXRfaSA+Pj4gMjQpICYgMHgwMGZmMDBmZiB8IChNX29mZnNldF9pIDw8IDI0IHwgTV9vZmZzZXRfaSA+Pj4gOCkgJiAweGZmMDBmZjAwO1xuICAgICAgICB9IC8vIFNob3J0Y3V0XG5cblxuICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG4gICAgICAgIHZhciBobCA9IF9obC53b3JkcztcbiAgICAgICAgdmFyIGhyID0gX2hyLndvcmRzO1xuICAgICAgICB2YXIgemwgPSBfemwud29yZHM7XG4gICAgICAgIHZhciB6ciA9IF96ci53b3JkcztcbiAgICAgICAgdmFyIHNsID0gX3NsLndvcmRzO1xuICAgICAgICB2YXIgc3IgPSBfc3Iud29yZHM7IC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cbiAgICAgICAgdmFyIGFsLCBibCwgY2wsIGRsLCBlbDtcbiAgICAgICAgdmFyIGFyLCBiciwgY3IsIGRyLCBlcjtcbiAgICAgICAgYXIgPSBhbCA9IEhbMF07XG4gICAgICAgIGJyID0gYmwgPSBIWzFdO1xuICAgICAgICBjciA9IGNsID0gSFsyXTtcbiAgICAgICAgZHIgPSBkbCA9IEhbM107XG4gICAgICAgIGVyID0gZWwgPSBIWzRdOyAvLyBDb21wdXRhdGlvblxuXG4gICAgICAgIHZhciB0O1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkgKz0gMSkge1xuICAgICAgICAgIHQgPSBhbCArIE1bb2Zmc2V0ICsgemxbaV1dIHwgMDtcblxuICAgICAgICAgIGlmIChpIDwgMTYpIHtcbiAgICAgICAgICAgIHQgKz0gZjEoYmwsIGNsLCBkbCkgKyBobFswXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPCAzMikge1xuICAgICAgICAgICAgdCArPSBmMihibCwgY2wsIGRsKSArIGhsWzFdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IDQ4KSB7XG4gICAgICAgICAgICB0ICs9IGYzKGJsLCBjbCwgZGwpICsgaGxbMl07XG4gICAgICAgICAgfSBlbHNlIGlmIChpIDwgNjQpIHtcbiAgICAgICAgICAgIHQgKz0gZjQoYmwsIGNsLCBkbCkgKyBobFszXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgKGk8ODApIHtcbiAgICAgICAgICAgIHQgKz0gZjUoYmwsIGNsLCBkbCkgKyBobFs0XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0ID0gdCB8IDA7XG4gICAgICAgICAgdCA9IHJvdGwodCwgc2xbaV0pO1xuICAgICAgICAgIHQgPSB0ICsgZWwgfCAwO1xuICAgICAgICAgIGFsID0gZWw7XG4gICAgICAgICAgZWwgPSBkbDtcbiAgICAgICAgICBkbCA9IHJvdGwoY2wsIDEwKTtcbiAgICAgICAgICBjbCA9IGJsO1xuICAgICAgICAgIGJsID0gdDtcbiAgICAgICAgICB0ID0gYXIgKyBNW29mZnNldCArIHpyW2ldXSB8IDA7XG5cbiAgICAgICAgICBpZiAoaSA8IDE2KSB7XG4gICAgICAgICAgICB0ICs9IGY1KGJyLCBjciwgZHIpICsgaHJbMF07XG4gICAgICAgICAgfSBlbHNlIGlmIChpIDwgMzIpIHtcbiAgICAgICAgICAgIHQgKz0gZjQoYnIsIGNyLCBkcikgKyBoclsxXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPCA0OCkge1xuICAgICAgICAgICAgdCArPSBmMyhiciwgY3IsIGRyKSArIGhyWzJdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IDY0KSB7XG4gICAgICAgICAgICB0ICs9IGYyKGJyLCBjciwgZHIpICsgaHJbM107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIChpPDgwKSB7XG4gICAgICAgICAgICB0ICs9IGYxKGJyLCBjciwgZHIpICsgaHJbNF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdCA9IHQgfCAwO1xuICAgICAgICAgIHQgPSByb3RsKHQsIHNyW2ldKTtcbiAgICAgICAgICB0ID0gdCArIGVyIHwgMDtcbiAgICAgICAgICBhciA9IGVyO1xuICAgICAgICAgIGVyID0gZHI7XG4gICAgICAgICAgZHIgPSByb3RsKGNyLCAxMCk7XG4gICAgICAgICAgY3IgPSBicjtcbiAgICAgICAgICBiciA9IHQ7XG4gICAgICAgIH0gLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblxuXG4gICAgICAgIHQgPSBIWzFdICsgY2wgKyBkciB8IDA7XG4gICAgICAgIEhbMV0gPSBIWzJdICsgZGwgKyBlciB8IDA7XG4gICAgICAgIEhbMl0gPSBIWzNdICsgZWwgKyBhciB8IDA7XG4gICAgICAgIEhbM10gPSBIWzRdICsgYWwgKyBiciB8IDA7XG4gICAgICAgIEhbNF0gPSBIWzBdICsgYmwgKyBjciB8IDA7XG4gICAgICAgIEhbMF0gPSB0O1xuICAgICAgfSxcbiAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiBfZG9GaW5hbGl6ZSgpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG4gICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG4gICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODsgLy8gQWRkIHBhZGRpbmdcblxuICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8IDI0IC0gbkJpdHNMZWZ0ICUgMzI7XG4gICAgICAgIGRhdGFXb3Jkc1sobkJpdHNMZWZ0ICsgNjQgPj4+IDkgPDwgNCkgKyAxNF0gPSAobkJpdHNUb3RhbCA8PCA4IHwgbkJpdHNUb3RhbCA+Pj4gMjQpICYgMHgwMGZmMDBmZiB8IChuQml0c1RvdGFsIDw8IDI0IHwgbkJpdHNUb3RhbCA+Pj4gOCkgJiAweGZmMDBmZjAwO1xuICAgICAgICBkYXRhLnNpZ0J5dGVzID0gKGRhdGFXb3Jkcy5sZW5ndGggKyAxKSAqIDQ7IC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cbiAgICAgICAgdGhpcy5fcHJvY2VzcygpOyAvLyBTaG9ydGN1dHNcblxuXG4gICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaDtcbiAgICAgICAgdmFyIEggPSBoYXNoLndvcmRzOyAvLyBTd2FwIGVuZGlhblxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICAgICAgLy8gU2hvcnRjdXRcbiAgICAgICAgICB2YXIgSF9pID0gSFtpXTsgLy8gU3dhcFxuXG4gICAgICAgICAgSFtpXSA9IChIX2kgPDwgOCB8IEhfaSA+Pj4gMjQpICYgMHgwMGZmMDBmZiB8IChIX2kgPDwgMjQgfCBIX2kgPj4+IDgpICYgMHhmZjAwZmYwMDtcbiAgICAgICAgfSAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXG5cbiAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICB9LFxuICAgICAgY2xvbmU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcbiAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGYxKHgsIHksIHopIHtcbiAgICAgIHJldHVybiB4IF4geSBeIHo7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZjIoeCwgeSwgeikge1xuICAgICAgcmV0dXJuIHggJiB5IHwgfnggJiB6O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGYzKHgsIHksIHopIHtcbiAgICAgIHJldHVybiAoeCB8IH55KSBeIHo7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZjQoeCwgeSwgeikge1xuICAgICAgcmV0dXJuIHggJiB6IHwgeSAmIH56O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGY1KHgsIHksIHopIHtcbiAgICAgIHJldHVybiB4IF4gKHkgfCB+eik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcm90bCh4LCBuKSB7XG4gICAgICByZXR1cm4geCA8PCBuIHwgeCA+Pj4gMzIgLSBuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuICAgICAqXG4gICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5SSVBFTUQxNjAoJ21lc3NhZ2UnKTtcbiAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5SSVBFTUQxNjAod29yZEFycmF5KTtcbiAgICAgKi9cblxuXG4gICAgQy5SSVBFTUQxNjAgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihSSVBFTUQxNjApO1xuICAgIC8qKlxuICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuICAgICAqXG4gICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjUklQRU1EMTYwKG1lc3NhZ2UsIGtleSk7XG4gICAgICovXG5cbiAgICBDLkhtYWNSSVBFTUQxNjAgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoUklQRU1EMTYwKTtcbiAgfSkoTWF0aCk7XG5cbiAgcmV0dXJuIENyeXB0b0pTLlJJUEVNRDE2MDtcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTg2NTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuO1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgaWYgKHRydWUpIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoX193ZWJwYWNrX3JlcXVpcmVfXyg3NTcpKTtcbiAgfSBlbHNlIHt9XG59KSh2b2lkIDAsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuICAoZnVuY3Rpb24gKCkge1xuICAgIC8vIFNob3J0Y3V0c1xuICAgIHZhciBDID0gQ3J5cHRvSlM7XG4gICAgdmFyIENfbGliID0gQy5saWI7XG4gICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcbiAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuICAgIHZhciBDX2FsZ28gPSBDLmFsZ287IC8vIFJldXNhYmxlIG9iamVjdFxuXG4gICAgdmFyIFcgPSBbXTtcbiAgICAvKipcbiAgICAgKiBTSEEtMSBoYXNoIGFsZ29yaXRobS5cbiAgICAgKi9cblxuICAgIHZhciBTSEExID0gQ19hbGdvLlNIQTEgPSBIYXNoZXIuZXh0ZW5kKHtcbiAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiBfZG9SZXNldCgpIHtcbiAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMF0pO1xuICAgICAgfSxcbiAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gX2RvUHJvY2Vzc0Jsb2NrKE0sIG9mZnNldCkge1xuICAgICAgICAvLyBTaG9ydGN1dFxuICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7IC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cbiAgICAgICAgdmFyIGEgPSBIWzBdO1xuICAgICAgICB2YXIgYiA9IEhbMV07XG4gICAgICAgIHZhciBjID0gSFsyXTtcbiAgICAgICAgdmFyIGQgPSBIWzNdO1xuICAgICAgICB2YXIgZSA9IEhbNF07IC8vIENvbXB1dGF0aW9uXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGkgPCAxNikge1xuICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbiA9IFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl07XG4gICAgICAgICAgICBXW2ldID0gbiA8PCAxIHwgbiA+Pj4gMzE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHQgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgZSArIFdbaV07XG5cbiAgICAgICAgICBpZiAoaSA8IDIwKSB7XG4gICAgICAgICAgICB0ICs9IChiICYgYyB8IH5iICYgZCkgKyAweDVhODI3OTk5O1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IDQwKSB7XG4gICAgICAgICAgICB0ICs9IChiIF4gYyBeIGQpICsgMHg2ZWQ5ZWJhMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPCA2MCkge1xuICAgICAgICAgICAgdCArPSAoYiAmIGMgfCBiICYgZCB8IGMgJiBkKSAtIDB4NzBlNDQzMjQ7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAvKiBpZiAoaSA8IDgwKSAqL1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ICs9IChiIF4gYyBeIGQpIC0gMHgzNTlkM2UyYTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGUgPSBkO1xuICAgICAgICAgIGQgPSBjO1xuICAgICAgICAgIGMgPSBiIDw8IDMwIHwgYiA+Pj4gMjtcbiAgICAgICAgICBiID0gYTtcbiAgICAgICAgICBhID0gdDtcbiAgICAgICAgfSAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXG5cbiAgICAgICAgSFswXSA9IEhbMF0gKyBhIHwgMDtcbiAgICAgICAgSFsxXSA9IEhbMV0gKyBiIHwgMDtcbiAgICAgICAgSFsyXSA9IEhbMl0gKyBjIHwgMDtcbiAgICAgICAgSFszXSA9IEhbM10gKyBkIHwgMDtcbiAgICAgICAgSFs0XSA9IEhbNF0gKyBlIHwgMDtcbiAgICAgIH0sXG4gICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gX2RvRmluYWxpemUoKSB7XG4gICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7IC8vIEFkZCBwYWRkaW5nXG5cbiAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAyNCAtIG5CaXRzTGVmdCAlIDMyO1xuICAgICAgICBkYXRhV29yZHNbKG5CaXRzTGVmdCArIDY0ID4+PiA5IDw8IDQpICsgMTRdID0gTWF0aC5mbG9vcihuQml0c1RvdGFsIC8gMHgxMDAwMDAwMDApO1xuICAgICAgICBkYXRhV29yZHNbKG5CaXRzTGVmdCArIDY0ID4+PiA5IDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcbiAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0OyAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXG4gICAgICAgIHRoaXMuX3Byb2Nlc3MoKTsgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblxuXG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNoO1xuICAgICAgfSxcbiAgICAgIGNsb25lOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG4gICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMSgnbWVzc2FnZScpO1xuICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTEod29yZEFycmF5KTtcbiAgICAgKi9cblxuICAgIEMuU0hBMSA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFNIQTEpO1xuICAgIC8qKlxuICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuICAgICAqXG4gICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMShtZXNzYWdlLCBrZXkpO1xuICAgICAqL1xuXG4gICAgQy5IbWFjU0hBMSA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihTSEExKTtcbiAgfSkoKTtcblxuICByZXR1cm4gQ3J5cHRvSlMuU0hBMTtcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjg3Njpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuO1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG4gIGlmICh0cnVlKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KF9fd2VicGFja19yZXF1aXJlX18oNzU3KSwgX193ZWJwYWNrX3JlcXVpcmVfXyg4OTIxKSk7XG4gIH0gZWxzZSB7fVxufSkodm9pZCAwLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTaG9ydGN1dHNcbiAgICB2YXIgQyA9IENyeXB0b0pTO1xuICAgIHZhciBDX2xpYiA9IEMubGliO1xuICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG4gICAgdmFyIENfYWxnbyA9IEMuYWxnbztcbiAgICB2YXIgU0hBMjU2ID0gQ19hbGdvLlNIQTI1NjtcbiAgICAvKipcbiAgICAgKiBTSEEtMjI0IGhhc2ggYWxnb3JpdGhtLlxuICAgICAqL1xuXG4gICAgdmFyIFNIQTIyNCA9IENfYWxnby5TSEEyMjQgPSBTSEEyNTYuZXh0ZW5kKHtcbiAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiBfZG9SZXNldCgpIHtcbiAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbMHhjMTA1OWVkOCwgMHgzNjdjZDUwNywgMHgzMDcwZGQxNywgMHhmNzBlNTkzOSwgMHhmZmMwMGIzMSwgMHg2ODU4MTUxMSwgMHg2NGY5OGZhNywgMHhiZWZhNGZhNF0pO1xuICAgICAgfSxcbiAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiBfZG9GaW5hbGl6ZSgpIHtcbiAgICAgICAgdmFyIGhhc2ggPSBTSEEyNTYuX2RvRmluYWxpemUuY2FsbCh0aGlzKTtcblxuICAgICAgICBoYXNoLnNpZ0J5dGVzIC09IDQ7XG4gICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTIyNCgnbWVzc2FnZScpO1xuICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTIyNCh3b3JkQXJyYXkpO1xuICAgICAqL1xuXG4gICAgQy5TSEEyMjQgPSBTSEEyNTYuX2NyZWF0ZUhlbHBlcihTSEEyMjQpO1xuICAgIC8qKlxuICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuICAgICAqXG4gICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMjI0KG1lc3NhZ2UsIGtleSk7XG4gICAgICovXG5cbiAgICBDLkhtYWNTSEEyMjQgPSBTSEEyNTYuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMjI0KTtcbiAgfSkoKTtcblxuICByZXR1cm4gQ3J5cHRvSlMuU0hBMjI0O1xufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4OTIxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcwNDIpO1xuXG47XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NykpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIChmdW5jdGlvbiAoTWF0aCkge1xuICAgIC8vIFNob3J0Y3V0c1xuICAgIHZhciBDID0gQ3J5cHRvSlM7XG4gICAgdmFyIENfbGliID0gQy5saWI7XG4gICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcbiAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuICAgIHZhciBDX2FsZ28gPSBDLmFsZ287IC8vIEluaXRpYWxpemF0aW9uIGFuZCByb3VuZCBjb25zdGFudHMgdGFibGVzXG5cbiAgICB2YXIgSCA9IFtdO1xuICAgIHZhciBLID0gW107IC8vIENvbXB1dGUgY29uc3RhbnRzXG5cbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gaXNQcmltZShuKSB7XG4gICAgICAgIHZhciBzcXJ0TiA9IE1hdGguc3FydChuKTtcblxuICAgICAgICBmb3IgKHZhciBmYWN0b3IgPSAyOyBmYWN0b3IgPD0gc3FydE47IGZhY3RvcisrKSB7XG4gICAgICAgICAgaWYgKCEobiAlIGZhY3RvcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZ2V0RnJhY3Rpb25hbEJpdHMobikge1xuICAgICAgICByZXR1cm4gKG4gLSAobiB8IDApKSAqIDB4MTAwMDAwMDAwIHwgMDtcbiAgICAgIH1cblxuICAgICAgdmFyIG4gPSAyO1xuICAgICAgdmFyIG5QcmltZSA9IDA7XG5cbiAgICAgIHdoaWxlIChuUHJpbWUgPCA2NCkge1xuICAgICAgICBpZiAoaXNQcmltZShuKSkge1xuICAgICAgICAgIGlmIChuUHJpbWUgPCA4KSB7XG4gICAgICAgICAgICBIW25QcmltZV0gPSBnZXRGcmFjdGlvbmFsQml0cyhNYXRoLnBvdyhuLCAxIC8gMikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEtbblByaW1lXSA9IGdldEZyYWN0aW9uYWxCaXRzKE1hdGgucG93KG4sIDEgLyAzKSk7XG4gICAgICAgICAgblByaW1lKys7XG4gICAgICAgIH1cblxuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgfSkoKTsgLy8gUmV1c2FibGUgb2JqZWN0XG5cblxuICAgIHZhciBXID0gW107XG4gICAgLyoqXG4gICAgICogU0hBLTI1NiBoYXNoIGFsZ29yaXRobS5cbiAgICAgKi9cblxuICAgIHZhciBTSEEyNTYgPSBDX2FsZ28uU0hBMjU2ID0gSGFzaGVyLmV4dGVuZCh7XG4gICAgICBfZG9SZXNldDogZnVuY3Rpb24gX2RvUmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoSC5zbGljZSgwKSk7XG4gICAgICB9LFxuICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiBfZG9Qcm9jZXNzQmxvY2soTSwgb2Zmc2V0KSB7XG4gICAgICAgIC8vIFNob3J0Y3V0XG4gICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkczsgLy8gV29ya2luZyB2YXJpYWJsZXNcblxuICAgICAgICB2YXIgYSA9IEhbMF07XG4gICAgICAgIHZhciBiID0gSFsxXTtcbiAgICAgICAgdmFyIGMgPSBIWzJdO1xuICAgICAgICB2YXIgZCA9IEhbM107XG4gICAgICAgIHZhciBlID0gSFs0XTtcbiAgICAgICAgdmFyIGYgPSBIWzVdO1xuICAgICAgICB2YXIgZyA9IEhbNl07XG4gICAgICAgIHZhciBoID0gSFs3XTsgLy8gQ29tcHV0YXRpb25cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspIHtcbiAgICAgICAgICBpZiAoaSA8IDE2KSB7XG4gICAgICAgICAgICBXW2ldID0gTVtvZmZzZXQgKyBpXSB8IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBnYW1tYTB4ID0gV1tpIC0gMTVdO1xuICAgICAgICAgICAgdmFyIGdhbW1hMCA9IChnYW1tYTB4IDw8IDI1IHwgZ2FtbWEweCA+Pj4gNykgXiAoZ2FtbWEweCA8PCAxNCB8IGdhbW1hMHggPj4+IDE4KSBeIGdhbW1hMHggPj4+IDM7XG4gICAgICAgICAgICB2YXIgZ2FtbWExeCA9IFdbaSAtIDJdO1xuICAgICAgICAgICAgdmFyIGdhbW1hMSA9IChnYW1tYTF4IDw8IDE1IHwgZ2FtbWExeCA+Pj4gMTcpIF4gKGdhbW1hMXggPDwgMTMgfCBnYW1tYTF4ID4+PiAxOSkgXiBnYW1tYTF4ID4+PiAxMDtcbiAgICAgICAgICAgIFdbaV0gPSBnYW1tYTAgKyBXW2kgLSA3XSArIGdhbW1hMSArIFdbaSAtIDE2XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY2ggPSBlICYgZiBeIH5lICYgZztcbiAgICAgICAgICB2YXIgbWFqID0gYSAmIGIgXiBhICYgYyBeIGIgJiBjO1xuICAgICAgICAgIHZhciBzaWdtYTAgPSAoYSA8PCAzMCB8IGEgPj4+IDIpIF4gKGEgPDwgMTkgfCBhID4+PiAxMykgXiAoYSA8PCAxMCB8IGEgPj4+IDIyKTtcbiAgICAgICAgICB2YXIgc2lnbWExID0gKGUgPDwgMjYgfCBlID4+PiA2KSBeIChlIDw8IDIxIHwgZSA+Pj4gMTEpIF4gKGUgPDwgNyB8IGUgPj4+IDI1KTtcbiAgICAgICAgICB2YXIgdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXTtcbiAgICAgICAgICB2YXIgdDIgPSBzaWdtYTAgKyBtYWo7XG4gICAgICAgICAgaCA9IGc7XG4gICAgICAgICAgZyA9IGY7XG4gICAgICAgICAgZiA9IGU7XG4gICAgICAgICAgZSA9IGQgKyB0MSB8IDA7XG4gICAgICAgICAgZCA9IGM7XG4gICAgICAgICAgYyA9IGI7XG4gICAgICAgICAgYiA9IGE7XG4gICAgICAgICAgYSA9IHQxICsgdDIgfCAwO1xuICAgICAgICB9IC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cblxuICAgICAgICBIWzBdID0gSFswXSArIGEgfCAwO1xuICAgICAgICBIWzFdID0gSFsxXSArIGIgfCAwO1xuICAgICAgICBIWzJdID0gSFsyXSArIGMgfCAwO1xuICAgICAgICBIWzNdID0gSFszXSArIGQgfCAwO1xuICAgICAgICBIWzRdID0gSFs0XSArIGUgfCAwO1xuICAgICAgICBIWzVdID0gSFs1XSArIGYgfCAwO1xuICAgICAgICBIWzZdID0gSFs2XSArIGcgfCAwO1xuICAgICAgICBIWzddID0gSFs3XSArIGggfCAwO1xuICAgICAgfSxcbiAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiBfZG9GaW5hbGl6ZSgpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG4gICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG4gICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODsgLy8gQWRkIHBhZGRpbmdcblxuICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8IDI0IC0gbkJpdHNMZWZ0ICUgMzI7XG4gICAgICAgIGRhdGFXb3Jkc1sobkJpdHNMZWZ0ICsgNjQgPj4+IDkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG4gICAgICAgIGRhdGFXb3Jkc1sobkJpdHNMZWZ0ICsgNjQgPj4+IDkgPDwgNCkgKyAxNV0gPSBuQml0c1RvdGFsO1xuICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7IC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cbiAgICAgICAgdGhpcy5fcHJvY2VzcygpOyAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc2g7XG4gICAgICB9LFxuICAgICAgY2xvbmU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcbiAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuICAgICAqXG4gICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyNTYoJ21lc3NhZ2UnKTtcbiAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyNTYod29yZEFycmF5KTtcbiAgICAgKi9cblxuICAgIEMuU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMjU2KTtcbiAgICAvKipcbiAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cbiAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTI1NihtZXNzYWdlLCBrZXkpO1xuICAgICAqL1xuXG4gICAgQy5IbWFjU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTI1Nik7XG4gIH0pKE1hdGgpO1xuXG4gIHJldHVybiBDcnlwdG9KUy5TSEEyNTY7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDgzNDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oNzA0Mik7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oMjYwMSkpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIChmdW5jdGlvbiAoTWF0aCkge1xuICAgIC8vIFNob3J0Y3V0c1xuICAgIHZhciBDID0gQ3J5cHRvSlM7XG4gICAgdmFyIENfbGliID0gQy5saWI7XG4gICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcbiAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuICAgIHZhciBDX3g2NCA9IEMueDY0O1xuICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcbiAgICB2YXIgQ19hbGdvID0gQy5hbGdvOyAvLyBDb25zdGFudHMgdGFibGVzXG5cbiAgICB2YXIgUkhPX09GRlNFVFMgPSBbXTtcbiAgICB2YXIgUElfSU5ERVhFUyA9IFtdO1xuICAgIHZhciBST1VORF9DT05TVEFOVFMgPSBbXTsgLy8gQ29tcHV0ZSBDb25zdGFudHNcblxuICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDb21wdXRlIHJobyBvZmZzZXQgY29uc3RhbnRzXG4gICAgICB2YXIgeCA9IDEsXG4gICAgICAgICAgeSA9IDA7XG5cbiAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgMjQ7IHQrKykge1xuICAgICAgICBSSE9fT0ZGU0VUU1t4ICsgNSAqIHldID0gKHQgKyAxKSAqICh0ICsgMikgLyAyICUgNjQ7XG4gICAgICAgIHZhciBuZXdYID0geSAlIDU7XG4gICAgICAgIHZhciBuZXdZID0gKDIgKiB4ICsgMyAqIHkpICUgNTtcbiAgICAgICAgeCA9IG5ld1g7XG4gICAgICAgIHkgPSBuZXdZO1xuICAgICAgfSAvLyBDb21wdXRlIHBpIGluZGV4IGNvbnN0YW50c1xuXG5cbiAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG4gICAgICAgICAgUElfSU5ERVhFU1t4ICsgNSAqIHldID0geSArICgyICogeCArIDMgKiB5KSAlIDUgKiA1O1xuICAgICAgICB9XG4gICAgICB9IC8vIENvbXB1dGUgcm91bmQgY29uc3RhbnRzXG5cblxuICAgICAgdmFyIExGU1IgPSAweDAxO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnRNc3cgPSAwO1xuICAgICAgICB2YXIgcm91bmRDb25zdGFudExzdyA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA3OyBqKyspIHtcbiAgICAgICAgICBpZiAoTEZTUiAmIDB4MDEpIHtcbiAgICAgICAgICAgIHZhciBiaXRQb3NpdGlvbiA9ICgxIDw8IGopIC0gMTtcblxuICAgICAgICAgICAgaWYgKGJpdFBvc2l0aW9uIDwgMzIpIHtcbiAgICAgICAgICAgICAgcm91bmRDb25zdGFudExzdyBePSAxIDw8IGJpdFBvc2l0aW9uO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIC8qIGlmIChiaXRQb3NpdGlvbiA+PSAzMikgKi9cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJvdW5kQ29uc3RhbnRNc3cgXj0gMSA8PCBiaXRQb3NpdGlvbiAtIDMyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBDb21wdXRlIG5leHQgTEZTUlxuXG5cbiAgICAgICAgICBpZiAoTEZTUiAmIDB4ODApIHtcbiAgICAgICAgICAgIC8vIFByaW1pdGl2ZSBwb2x5bm9taWFsIG92ZXIgR0YoMik6IHheOCArIHheNiArIHheNSArIHheNCArIDFcbiAgICAgICAgICAgIExGU1IgPSBMRlNSIDw8IDEgXiAweDcxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBMRlNSIDw8PSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIFJPVU5EX0NPTlNUQU5UU1tpXSA9IFg2NFdvcmQuY3JlYXRlKHJvdW5kQ29uc3RhbnRNc3csIHJvdW5kQ29uc3RhbnRMc3cpO1xuICAgICAgfVxuICAgIH0pKCk7IC8vIFJldXNhYmxlIG9iamVjdHMgZm9yIHRlbXBvcmFyeSB2YWx1ZXNcblxuXG4gICAgdmFyIFQgPSBbXTtcblxuICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcbiAgICAgICAgVFtpXSA9IFg2NFdvcmQuY3JlYXRlKCk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICAvKipcbiAgICAgKiBTSEEtMyBoYXNoIGFsZ29yaXRobS5cbiAgICAgKi9cblxuXG4gICAgdmFyIFNIQTMgPSBDX2FsZ28uU0hBMyA9IEhhc2hlci5leHRlbmQoe1xuICAgICAgLyoqXG4gICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAgICAgKlxuICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IG91dHB1dExlbmd0aFxuICAgICAgICogICBUaGUgZGVzaXJlZCBudW1iZXIgb2YgYml0cyBpbiB0aGUgb3V0cHV0IGhhc2guXG4gICAgICAgKiAgIE9ubHkgdmFsdWVzIHBlcm1pdHRlZCBhcmU6IDIyNCwgMjU2LCAzODQsIDUxMi5cbiAgICAgICAqICAgRGVmYXVsdDogNTEyXG4gICAgICAgKi9cbiAgICAgIGNmZzogSGFzaGVyLmNmZy5leHRlbmQoe1xuICAgICAgICBvdXRwdXRMZW5ndGg6IDUxMlxuICAgICAgfSksXG4gICAgICBfZG9SZXNldDogZnVuY3Rpb24gX2RvUmVzZXQoKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG4gICAgICAgICAgc3RhdGVbaV0gPSBuZXcgWDY0V29yZC5pbml0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsb2NrU2l6ZSA9ICgxNjAwIC0gMiAqIHRoaXMuY2ZnLm91dHB1dExlbmd0aCkgLyAzMjtcbiAgICAgIH0sXG4gICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIF9kb1Byb2Nlc3NCbG9jayhNLCBvZmZzZXQpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuICAgICAgICB2YXIgbkJsb2NrU2l6ZUxhbmVzID0gdGhpcy5ibG9ja1NpemUgLyAyOyAvLyBBYnNvcmJcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CbG9ja1NpemVMYW5lczsgaSsrKSB7XG4gICAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgICAgdmFyIE0yaSA9IE1bb2Zmc2V0ICsgMiAqIGldO1xuICAgICAgICAgIHZhciBNMmkxID0gTVtvZmZzZXQgKyAyICogaSArIDFdOyAvLyBTd2FwIGVuZGlhblxuXG4gICAgICAgICAgTTJpID0gKE0yaSA8PCA4IHwgTTJpID4+PiAyNCkgJiAweDAwZmYwMGZmIHwgKE0yaSA8PCAyNCB8IE0yaSA+Pj4gOCkgJiAweGZmMDBmZjAwO1xuICAgICAgICAgIE0yaTEgPSAoTTJpMSA8PCA4IHwgTTJpMSA+Pj4gMjQpICYgMHgwMGZmMDBmZiB8IChNMmkxIDw8IDI0IHwgTTJpMSA+Pj4gOCkgJiAweGZmMDBmZjAwOyAvLyBBYnNvcmIgbWVzc2FnZSBpbnRvIHN0YXRlXG5cbiAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuICAgICAgICAgIGxhbmUuaGlnaCBePSBNMmkxO1xuICAgICAgICAgIGxhbmUubG93IF49IE0yaTtcbiAgICAgICAgfSAvLyBSb3VuZHNcblxuXG4gICAgICAgIGZvciAodmFyIHJvdW5kID0gMDsgcm91bmQgPCAyNDsgcm91bmQrKykge1xuICAgICAgICAgIC8vIFRoZXRhXG4gICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCA1OyB4KyspIHtcbiAgICAgICAgICAgIC8vIE1peCBjb2x1bW4gbGFuZXNcbiAgICAgICAgICAgIHZhciB0TXN3ID0gMCxcbiAgICAgICAgICAgICAgICB0THN3ID0gMDtcblxuICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcbiAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVt4ICsgNSAqIHldO1xuICAgICAgICAgICAgICB0TXN3IF49IGxhbmUuaGlnaDtcbiAgICAgICAgICAgICAgdExzdyBePSBsYW5lLmxvdztcbiAgICAgICAgICAgIH0gLy8gVGVtcG9yYXJ5IHZhbHVlc1xuXG5cbiAgICAgICAgICAgIHZhciBUeCA9IFRbeF07XG4gICAgICAgICAgICBUeC5oaWdoID0gdE1zdztcbiAgICAgICAgICAgIFR4LmxvdyA9IHRMc3c7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCA1OyB4KyspIHtcbiAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICAgICAgdmFyIFR4NCA9IFRbKHggKyA0KSAlIDVdO1xuICAgICAgICAgICAgdmFyIFR4MSA9IFRbKHggKyAxKSAlIDVdO1xuICAgICAgICAgICAgdmFyIFR4MU1zdyA9IFR4MS5oaWdoO1xuICAgICAgICAgICAgdmFyIFR4MUxzdyA9IFR4MS5sb3c7IC8vIE1peCBzdXJyb3VuZGluZyBjb2x1bW5zXG5cbiAgICAgICAgICAgIHZhciB0TXN3ID0gVHg0LmhpZ2ggXiAoVHgxTXN3IDw8IDEgfCBUeDFMc3cgPj4+IDMxKTtcbiAgICAgICAgICAgIHZhciB0THN3ID0gVHg0LmxvdyBeIChUeDFMc3cgPDwgMSB8IFR4MU1zdyA+Pj4gMzEpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW3ggKyA1ICogeV07XG4gICAgICAgICAgICAgIGxhbmUuaGlnaCBePSB0TXN3O1xuICAgICAgICAgICAgICBsYW5lLmxvdyBePSB0THN3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gUmhvIFBpXG5cblxuICAgICAgICAgIGZvciAodmFyIGxhbmVJbmRleCA9IDE7IGxhbmVJbmRleCA8IDI1OyBsYW5lSW5kZXgrKykge1xuICAgICAgICAgICAgdmFyIHRNc3c7XG4gICAgICAgICAgICB2YXIgdExzdzsgLy8gU2hvcnRjdXRzXG5cbiAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbbGFuZUluZGV4XTtcbiAgICAgICAgICAgIHZhciBsYW5lTXN3ID0gbGFuZS5oaWdoO1xuICAgICAgICAgICAgdmFyIGxhbmVMc3cgPSBsYW5lLmxvdztcbiAgICAgICAgICAgIHZhciByaG9PZmZzZXQgPSBSSE9fT0ZGU0VUU1tsYW5lSW5kZXhdOyAvLyBSb3RhdGUgbGFuZXNcblxuICAgICAgICAgICAgaWYgKHJob09mZnNldCA8IDMyKSB7XG4gICAgICAgICAgICAgIHRNc3cgPSBsYW5lTXN3IDw8IHJob09mZnNldCB8IGxhbmVMc3cgPj4+IDMyIC0gcmhvT2Zmc2V0O1xuICAgICAgICAgICAgICB0THN3ID0gbGFuZUxzdyA8PCByaG9PZmZzZXQgfCBsYW5lTXN3ID4+PiAzMiAtIHJob09mZnNldDtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAvKiBpZiAocmhvT2Zmc2V0ID49IDMyKSAqL1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdE1zdyA9IGxhbmVMc3cgPDwgcmhvT2Zmc2V0IC0gMzIgfCBsYW5lTXN3ID4+PiA2NCAtIHJob09mZnNldDtcbiAgICAgICAgICAgICAgICB0THN3ID0gbGFuZU1zdyA8PCByaG9PZmZzZXQgLSAzMiB8IGxhbmVMc3cgPj4+IDY0IC0gcmhvT2Zmc2V0O1xuICAgICAgICAgICAgICB9IC8vIFRyYW5zcG9zZSBsYW5lc1xuXG5cbiAgICAgICAgICAgIHZhciBUUGlMYW5lID0gVFtQSV9JTkRFWEVTW2xhbmVJbmRleF1dO1xuICAgICAgICAgICAgVFBpTGFuZS5oaWdoID0gdE1zdztcbiAgICAgICAgICAgIFRQaUxhbmUubG93ID0gdExzdztcbiAgICAgICAgICB9IC8vIFJobyBwaSBhdCB4ID0geSA9IDBcblxuXG4gICAgICAgICAgdmFyIFQwID0gVFswXTtcbiAgICAgICAgICB2YXIgc3RhdGUwID0gc3RhdGVbMF07XG4gICAgICAgICAgVDAuaGlnaCA9IHN0YXRlMC5oaWdoO1xuICAgICAgICAgIFQwLmxvdyA9IHN0YXRlMC5sb3c7IC8vIENoaVxuXG4gICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCA1OyB4KyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG4gICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICAgICAgICB2YXIgbGFuZUluZGV4ID0geCArIDUgKiB5O1xuICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2xhbmVJbmRleF07XG4gICAgICAgICAgICAgIHZhciBUTGFuZSA9IFRbbGFuZUluZGV4XTtcbiAgICAgICAgICAgICAgdmFyIFR4MUxhbmUgPSBUWyh4ICsgMSkgJSA1ICsgNSAqIHldO1xuICAgICAgICAgICAgICB2YXIgVHgyTGFuZSA9IFRbKHggKyAyKSAlIDUgKyA1ICogeV07IC8vIE1peCByb3dzXG5cbiAgICAgICAgICAgICAgbGFuZS5oaWdoID0gVExhbmUuaGlnaCBeIH5UeDFMYW5lLmhpZ2ggJiBUeDJMYW5lLmhpZ2g7XG4gICAgICAgICAgICAgIGxhbmUubG93ID0gVExhbmUubG93IF4gflR4MUxhbmUubG93ICYgVHgyTGFuZS5sb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBJb3RhXG5cblxuICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbMF07XG4gICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnQgPSBST1VORF9DT05TVEFOVFNbcm91bmRdO1xuICAgICAgICAgIGxhbmUuaGlnaCBePSByb3VuZENvbnN0YW50LmhpZ2g7XG4gICAgICAgICAgbGFuZS5sb3cgXj0gcm91bmRDb25zdGFudC5sb3c7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gX2RvRmluYWxpemUoKSB7XG4gICAgICAgIC8vIFNob3J0Y3V0c1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG4gICAgICAgIHZhciBibG9ja1NpemVCaXRzID0gdGhpcy5ibG9ja1NpemUgKiAzMjsgLy8gQWRkIHBhZGRpbmdcblxuICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDEgPDwgMjQgLSBuQml0c0xlZnQgJSAzMjtcbiAgICAgICAgZGF0YVdvcmRzWyhNYXRoLmNlaWwoKG5CaXRzTGVmdCArIDEpIC8gYmxvY2tTaXplQml0cykgKiBibG9ja1NpemVCaXRzID4+PiA1KSAtIDFdIHw9IDB4ODA7XG4gICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDsgLy8gSGFzaCBmaW5hbCBibG9ja3NcblxuICAgICAgICB0aGlzLl9wcm9jZXNzKCk7IC8vIFNob3J0Y3V0c1xuXG5cbiAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG4gICAgICAgIHZhciBvdXRwdXRMZW5ndGhCeXRlcyA9IHRoaXMuY2ZnLm91dHB1dExlbmd0aCAvIDg7XG4gICAgICAgIHZhciBvdXRwdXRMZW5ndGhMYW5lcyA9IG91dHB1dExlbmd0aEJ5dGVzIC8gODsgLy8gU3F1ZWV6ZVxuXG4gICAgICAgIHZhciBoYXNoV29yZHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG91dHB1dExlbmd0aExhbmVzOyBpKyspIHtcbiAgICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuICAgICAgICAgIHZhciBsYW5lTXN3ID0gbGFuZS5oaWdoO1xuICAgICAgICAgIHZhciBsYW5lTHN3ID0gbGFuZS5sb3c7IC8vIFN3YXAgZW5kaWFuXG5cbiAgICAgICAgICBsYW5lTXN3ID0gKGxhbmVNc3cgPDwgOCB8IGxhbmVNc3cgPj4+IDI0KSAmIDB4MDBmZjAwZmYgfCAobGFuZU1zdyA8PCAyNCB8IGxhbmVNc3cgPj4+IDgpICYgMHhmZjAwZmYwMDtcbiAgICAgICAgICBsYW5lTHN3ID0gKGxhbmVMc3cgPDwgOCB8IGxhbmVMc3cgPj4+IDI0KSAmIDB4MDBmZjAwZmYgfCAobGFuZUxzdyA8PCAyNCB8IGxhbmVMc3cgPj4+IDgpICYgMHhmZjAwZmYwMDsgLy8gU3F1ZWV6ZSBzdGF0ZSB0byByZXRyaWV2ZSBoYXNoXG5cbiAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTHN3KTtcbiAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTXN3KTtcbiAgICAgICAgfSAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdChoYXNoV29yZHMsIG91dHB1dExlbmd0aEJ5dGVzKTtcbiAgICAgIH0sXG4gICAgICBjbG9uZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXG4gICAgICAgIHZhciBzdGF0ZSA9IGNsb25lLl9zdGF0ZSA9IHRoaXMuX3N0YXRlLnNsaWNlKDApO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU7IGkrKykge1xuICAgICAgICAgIHN0YXRlW2ldID0gc3RhdGVbaV0uY2xvbmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuICAgICAqXG4gICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEzKCdtZXNzYWdlJyk7XG4gICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMyh3b3JkQXJyYXkpO1xuICAgICAqL1xuXG4gICAgQy5TSEEzID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMyk7XG4gICAgLyoqXG4gICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG4gICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEzKG1lc3NhZ2UsIGtleSk7XG4gICAgICovXG5cbiAgICBDLkhtYWNTSEEzID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTMpO1xuICB9KShNYXRoKTtcblxuICByZXR1cm4gQ3J5cHRvSlMuU0hBMztcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODEyMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuO1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG4gIGlmICh0cnVlKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KF9fd2VicGFja19yZXF1aXJlX18oNzU3KSwgX193ZWJwYWNrX3JlcXVpcmVfXygyNjAxKSwgX193ZWJwYWNrX3JlcXVpcmVfXyg3OTkxKSk7XG4gIH0gZWxzZSB7fVxufSkodm9pZCAwLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTaG9ydGN1dHNcbiAgICB2YXIgQyA9IENyeXB0b0pTO1xuICAgIHZhciBDX3g2NCA9IEMueDY0O1xuICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcbiAgICB2YXIgWDY0V29yZEFycmF5ID0gQ194NjQuV29yZEFycmF5O1xuICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG4gICAgdmFyIFNIQTUxMiA9IENfYWxnby5TSEE1MTI7XG4gICAgLyoqXG4gICAgICogU0hBLTM4NCBoYXNoIGFsZ29yaXRobS5cbiAgICAgKi9cblxuICAgIHZhciBTSEEzODQgPSBDX2FsZ28uU0hBMzg0ID0gU0hBNTEyLmV4dGVuZCh7XG4gICAgICBfZG9SZXNldDogZnVuY3Rpb24gX2RvUmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgWDY0V29yZEFycmF5LmluaXQoW25ldyBYNjRXb3JkLmluaXQoMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCksIG5ldyBYNjRXb3JkLmluaXQoMHg2MjlhMjkyYSwgMHgzNjdjZDUwNyksIG5ldyBYNjRXb3JkLmluaXQoMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyksIG5ldyBYNjRXb3JkLmluaXQoMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSksIG5ldyBYNjRXb3JkLmluaXQoMHg2NzMzMjY2NywgMHhmZmMwMGIzMSksIG5ldyBYNjRXb3JkLmluaXQoMHg4ZWI0NGE4NywgMHg2ODU4MTUxMSksIG5ldyBYNjRXb3JkLmluaXQoMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyksIG5ldyBYNjRXb3JkLmluaXQoMHg0N2I1NDgxZCwgMHhiZWZhNGZhNCldKTtcbiAgICAgIH0sXG4gICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gX2RvRmluYWxpemUoKSB7XG4gICAgICAgIHZhciBoYXNoID0gU0hBNTEyLl9kb0ZpbmFsaXplLmNhbGwodGhpcyk7XG5cbiAgICAgICAgaGFzaC5zaWdCeXRlcyAtPSAxNjtcbiAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMzg0KCdtZXNzYWdlJyk7XG4gICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMzg0KHdvcmRBcnJheSk7XG4gICAgICovXG5cbiAgICBDLlNIQTM4NCA9IFNIQTUxMi5fY3JlYXRlSGVscGVyKFNIQTM4NCk7XG4gICAgLyoqXG4gICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG4gICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEzODQobWVzc2FnZSwga2V5KTtcbiAgICAgKi9cblxuICAgIEMuSG1hY1NIQTM4NCA9IFNIQTUxMi5fY3JlYXRlSG1hY0hlbHBlcihTSEEzODQpO1xuICB9KSgpO1xuXG4gIHJldHVybiBDcnlwdG9KUy5TSEEzODQ7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDc5OTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oMjYwMSkpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2hvcnRjdXRzXG4gICAgdmFyIEMgPSBDcnlwdG9KUztcbiAgICB2YXIgQ19saWIgPSBDLmxpYjtcbiAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuICAgIHZhciBDX3g2NCA9IEMueDY0O1xuICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcbiAgICB2YXIgWDY0V29yZEFycmF5ID0gQ194NjQuV29yZEFycmF5O1xuICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cbiAgICBmdW5jdGlvbiBYNjRXb3JkX2NyZWF0ZSgpIHtcbiAgICAgIHJldHVybiBYNjRXb3JkLmNyZWF0ZS5hcHBseShYNjRXb3JkLCBhcmd1bWVudHMpO1xuICAgIH0gLy8gQ29uc3RhbnRzXG5cblxuICAgIHZhciBLID0gW1g2NFdvcmRfY3JlYXRlKDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIpLCBYNjRXb3JkX2NyZWF0ZSgweDcxMzc0NDkxLCAweDIzZWY2NWNkKSwgWDY0V29yZF9jcmVhdGUoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIFg2NFdvcmRfY3JlYXRlKDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMpLCBYNjRXb3JkX2NyZWF0ZSgweDM5NTZjMjViLCAweGYzNDhiNTM4KSwgWDY0V29yZF9jcmVhdGUoMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSksIFg2NFdvcmRfY3JlYXRlKDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIpLCBYNjRXb3JkX2NyZWF0ZSgweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4KSwgWDY0V29yZF9jcmVhdGUoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIFg2NFdvcmRfY3JlYXRlKDB4MTI4MzViMDEsIDB4NDU3MDZmYmUpLCBYNjRXb3JkX2NyZWF0ZSgweDI0MzE4NWJlLCAweDRlZTRiMjhjKSwgWDY0V29yZF9jcmVhdGUoMHg1NTBjN2RjMywgMHhkNWZmYjRlMiksIFg2NFdvcmRfY3JlYXRlKDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYpLCBYNjRXb3JkX2NyZWF0ZSgweDgwZGViMWZlLCAweDNiMTY5NmIxKSwgWDY0V29yZF9jcmVhdGUoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIFg2NFdvcmRfY3JlYXRlKDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQpLCBYNjRXb3JkX2NyZWF0ZSgweGU0OWI2OWMxLCAweDllZjE0YWQyKSwgWDY0V29yZF9jcmVhdGUoMHhlZmJlNDc4NiwgMHgzODRmMjVlMyksIFg2NFdvcmRfY3JlYXRlKDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUpLCBYNjRXb3JkX2NyZWF0ZSgweDI0MGNhMWNjLCAweDc3YWM5YzY1KSwgWDY0V29yZF9jcmVhdGUoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIFg2NFdvcmRfY3JlYXRlKDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMpLCBYNjRXb3JkX2NyZWF0ZSgweDVjYjBhOWRjLCAweGJkNDFmYmQ0KSwgWDY0V29yZF9jcmVhdGUoMHg3NmY5ODhkYSwgMHg4MzExNTNiNSksIFg2NFdvcmRfY3JlYXRlKDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIpLCBYNjRXb3JkX2NyZWF0ZSgweGE4MzFjNjZkLCAweDJkYjQzMjEwKSwgWDY0V29yZF9jcmVhdGUoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIFg2NFdvcmRfY3JlYXRlKDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQpLCBYNjRXb3JkX2NyZWF0ZSgweGM2ZTAwYmYzLCAweDNkYTg4ZmMyKSwgWDY0V29yZF9jcmVhdGUoMHhkNWE3OTE0NywgMHg5MzBhYTcyNSksIFg2NFdvcmRfY3JlYXRlKDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYpLCBYNjRXb3JkX2NyZWF0ZSgweDE0MjkyOTY3LCAweDBhMGU2ZTcwKSwgWDY0V29yZF9jcmVhdGUoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIFg2NFdvcmRfY3JlYXRlKDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYpLCBYNjRXb3JkX2NyZWF0ZSgweDRkMmM2ZGZjLCAweDVhYzQyYWVkKSwgWDY0V29yZF9jcmVhdGUoMHg1MzM4MGQxMywgMHg5ZDk1YjNkZiksIFg2NFdvcmRfY3JlYXRlKDB4NjUwYTczNTQsIDB4OGJhZjYzZGUpLCBYNjRXb3JkX2NyZWF0ZSgweDc2NmEwYWJiLCAweDNjNzdiMmE4KSwgWDY0V29yZF9jcmVhdGUoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIFg2NFdvcmRfY3JlYXRlKDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IpLCBYNjRXb3JkX2NyZWF0ZSgweGEyYmZlOGExLCAweDRjZjEwMzY0KSwgWDY0V29yZF9jcmVhdGUoMHhhODFhNjY0YiwgMHhiYzQyMzAwMSksIFg2NFdvcmRfY3JlYXRlKDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEpLCBYNjRXb3JkX2NyZWF0ZSgweGM3NmM1MWEzLCAweDA2NTRiZTMwKSwgWDY0V29yZF9jcmVhdGUoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIFg2NFdvcmRfY3JlYXRlKDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTApLCBYNjRXb3JkX2NyZWF0ZSgweGY0MGUzNTg1LCAweDU3NzEyMDJhKSwgWDY0V29yZF9jcmVhdGUoMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCksIFg2NFdvcmRfY3JlYXRlKDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgpLCBYNjRXb3JkX2NyZWF0ZSgweDFlMzc2YzA4LCAweDUxNDFhYjUzKSwgWDY0V29yZF9jcmVhdGUoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIFg2NFdvcmRfY3JlYXRlKDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgpLCBYNjRXb3JkX2NyZWF0ZSgweDM5MWMwY2IzLCAweGM1Yzk1YTYzKSwgWDY0V29yZF9jcmVhdGUoMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYiksIFg2NFdvcmRfY3JlYXRlKDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMpLCBYNjRXb3JkX2NyZWF0ZSgweDY4MmU2ZmYzLCAweGQ2YjJiOGEzKSwgWDY0V29yZF9jcmVhdGUoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIFg2NFdvcmRfY3JlYXRlKDB4NzhhNTYzNmYsIDB4NDMxNzJmNjApLCBYNjRXb3JkX2NyZWF0ZSgweDg0Yzg3ODE0LCAweGExZjBhYjcyKSwgWDY0V29yZF9jcmVhdGUoMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyksIFg2NFdvcmRfY3JlYXRlKDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgpLCBYNjRXb3JkX2NyZWF0ZSgweGE0NTA2Y2ViLCAweGRlODJiZGU5KSwgWDY0V29yZF9jcmVhdGUoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIFg2NFdvcmRfY3JlYXRlKDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIpLCBYNjRXb3JkX2NyZWF0ZSgweGNhMjczZWNlLCAweGVhMjY2MTljKSwgWDY0V29yZF9jcmVhdGUoMHhkMTg2YjhjNywgMHgyMWMwYzIwNyksIFg2NFdvcmRfY3JlYXRlKDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUpLCBYNjRXb3JkX2NyZWF0ZSgweGY1N2Q0ZjdmLCAweGVlNmVkMTc4KSwgWDY0V29yZF9jcmVhdGUoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIFg2NFdvcmRfY3JlYXRlKDB4MGE2MzdkYzUsIDB4YTJjODk4YTYpLCBYNjRXb3JkX2NyZWF0ZSgweDExM2Y5ODA0LCAweGJlZjkwZGFlKSwgWDY0V29yZF9jcmVhdGUoMHgxYjcxMGIzNSwgMHgxMzFjNDcxYiksIFg2NFdvcmRfY3JlYXRlKDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQpLCBYNjRXb3JkX2NyZWF0ZSgweDMyY2FhYjdiLCAweDQwYzcyNDkzKSwgWDY0V29yZF9jcmVhdGUoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIFg2NFdvcmRfY3JlYXRlKDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMpLCBYNjRXb3JkX2NyZWF0ZSgweDRjYzVkNGJlLCAweGNiM2U0MmI2KSwgWDY0V29yZF9jcmVhdGUoMHg1OTdmMjk5YywgMHhmYzY1N2UyYSksIFg2NFdvcmRfY3JlYXRlKDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMpLCBYNjRXb3JkX2NyZWF0ZSgweDZjNDQxOThjLCAweDRhNDc1ODE3KV07IC8vIFJldXNhYmxlIG9iamVjdHNcblxuICAgIHZhciBXID0gW107XG5cbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG4gICAgICAgIFdbaV0gPSBYNjRXb3JkX2NyZWF0ZSgpO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgLyoqXG4gICAgICogU0hBLTUxMiBoYXNoIGFsZ29yaXRobS5cbiAgICAgKi9cblxuXG4gICAgdmFyIFNIQTUxMiA9IENfYWxnby5TSEE1MTIgPSBIYXNoZXIuZXh0ZW5kKHtcbiAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiBfZG9SZXNldCgpIHtcbiAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBYNjRXb3JkQXJyYXkuaW5pdChbbmV3IFg2NFdvcmQuaW5pdCgweDZhMDllNjY3LCAweGYzYmNjOTA4KSwgbmV3IFg2NFdvcmQuaW5pdCgweGJiNjdhZTg1LCAweDg0Y2FhNzNiKSwgbmV3IFg2NFdvcmQuaW5pdCgweDNjNmVmMzcyLCAweGZlOTRmODJiKSwgbmV3IFg2NFdvcmQuaW5pdCgweGE1NGZmNTNhLCAweDVmMWQzNmYxKSwgbmV3IFg2NFdvcmQuaW5pdCgweDUxMGU1MjdmLCAweGFkZTY4MmQxKSwgbmV3IFg2NFdvcmQuaW5pdCgweDliMDU2ODhjLCAweDJiM2U2YzFmKSwgbmV3IFg2NFdvcmQuaW5pdCgweDFmODNkOWFiLCAweGZiNDFiZDZiKSwgbmV3IFg2NFdvcmQuaW5pdCgweDViZTBjZDE5LCAweDEzN2UyMTc5KV0pO1xuICAgICAgfSxcbiAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gX2RvUHJvY2Vzc0Jsb2NrKE0sIG9mZnNldCkge1xuICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgdmFyIEggPSB0aGlzLl9oYXNoLndvcmRzO1xuICAgICAgICB2YXIgSDAgPSBIWzBdO1xuICAgICAgICB2YXIgSDEgPSBIWzFdO1xuICAgICAgICB2YXIgSDIgPSBIWzJdO1xuICAgICAgICB2YXIgSDMgPSBIWzNdO1xuICAgICAgICB2YXIgSDQgPSBIWzRdO1xuICAgICAgICB2YXIgSDUgPSBIWzVdO1xuICAgICAgICB2YXIgSDYgPSBIWzZdO1xuICAgICAgICB2YXIgSDcgPSBIWzddO1xuICAgICAgICB2YXIgSDBoID0gSDAuaGlnaDtcbiAgICAgICAgdmFyIEgwbCA9IEgwLmxvdztcbiAgICAgICAgdmFyIEgxaCA9IEgxLmhpZ2g7XG4gICAgICAgIHZhciBIMWwgPSBIMS5sb3c7XG4gICAgICAgIHZhciBIMmggPSBIMi5oaWdoO1xuICAgICAgICB2YXIgSDJsID0gSDIubG93O1xuICAgICAgICB2YXIgSDNoID0gSDMuaGlnaDtcbiAgICAgICAgdmFyIEgzbCA9IEgzLmxvdztcbiAgICAgICAgdmFyIEg0aCA9IEg0LmhpZ2g7XG4gICAgICAgIHZhciBINGwgPSBINC5sb3c7XG4gICAgICAgIHZhciBINWggPSBINS5oaWdoO1xuICAgICAgICB2YXIgSDVsID0gSDUubG93O1xuICAgICAgICB2YXIgSDZoID0gSDYuaGlnaDtcbiAgICAgICAgdmFyIEg2bCA9IEg2LmxvdztcbiAgICAgICAgdmFyIEg3aCA9IEg3LmhpZ2g7XG4gICAgICAgIHZhciBIN2wgPSBINy5sb3c7IC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cbiAgICAgICAgdmFyIGFoID0gSDBoO1xuICAgICAgICB2YXIgYWwgPSBIMGw7XG4gICAgICAgIHZhciBiaCA9IEgxaDtcbiAgICAgICAgdmFyIGJsID0gSDFsO1xuICAgICAgICB2YXIgY2ggPSBIMmg7XG4gICAgICAgIHZhciBjbCA9IEgybDtcbiAgICAgICAgdmFyIGRoID0gSDNoO1xuICAgICAgICB2YXIgZGwgPSBIM2w7XG4gICAgICAgIHZhciBlaCA9IEg0aDtcbiAgICAgICAgdmFyIGVsID0gSDRsO1xuICAgICAgICB2YXIgZmggPSBINWg7XG4gICAgICAgIHZhciBmbCA9IEg1bDtcbiAgICAgICAgdmFyIGdoID0gSDZoO1xuICAgICAgICB2YXIgZ2wgPSBINmw7XG4gICAgICAgIHZhciBoaCA9IEg3aDtcbiAgICAgICAgdmFyIGhsID0gSDdsOyAvLyBSb3VuZHNcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDgwOyBpKyspIHtcbiAgICAgICAgICB2YXIgV2lsO1xuICAgICAgICAgIHZhciBXaWg7IC8vIFNob3J0Y3V0XG5cbiAgICAgICAgICB2YXIgV2kgPSBXW2ldOyAvLyBFeHRlbmQgbWVzc2FnZVxuXG4gICAgICAgICAgaWYgKGkgPCAxNikge1xuICAgICAgICAgICAgV2loID0gV2kuaGlnaCA9IE1bb2Zmc2V0ICsgaSAqIDJdIHwgMDtcbiAgICAgICAgICAgIFdpbCA9IFdpLmxvdyA9IE1bb2Zmc2V0ICsgaSAqIDIgKyAxXSB8IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEdhbW1hMFxuICAgICAgICAgICAgdmFyIGdhbW1hMHggPSBXW2kgLSAxNV07XG4gICAgICAgICAgICB2YXIgZ2FtbWEweGggPSBnYW1tYTB4LmhpZ2g7XG4gICAgICAgICAgICB2YXIgZ2FtbWEweGwgPSBnYW1tYTB4LmxvdztcbiAgICAgICAgICAgIHZhciBnYW1tYTBoID0gKGdhbW1hMHhoID4+PiAxIHwgZ2FtbWEweGwgPDwgMzEpIF4gKGdhbW1hMHhoID4+PiA4IHwgZ2FtbWEweGwgPDwgMjQpIF4gZ2FtbWEweGggPj4+IDc7XG4gICAgICAgICAgICB2YXIgZ2FtbWEwbCA9IChnYW1tYTB4bCA+Pj4gMSB8IGdhbW1hMHhoIDw8IDMxKSBeIChnYW1tYTB4bCA+Pj4gOCB8IGdhbW1hMHhoIDw8IDI0KSBeIChnYW1tYTB4bCA+Pj4gNyB8IGdhbW1hMHhoIDw8IDI1KTsgLy8gR2FtbWExXG5cbiAgICAgICAgICAgIHZhciBnYW1tYTF4ID0gV1tpIC0gMl07XG4gICAgICAgICAgICB2YXIgZ2FtbWExeGggPSBnYW1tYTF4LmhpZ2g7XG4gICAgICAgICAgICB2YXIgZ2FtbWExeGwgPSBnYW1tYTF4LmxvdztcbiAgICAgICAgICAgIHZhciBnYW1tYTFoID0gKGdhbW1hMXhoID4+PiAxOSB8IGdhbW1hMXhsIDw8IDEzKSBeIChnYW1tYTF4aCA8PCAzIHwgZ2FtbWExeGwgPj4+IDI5KSBeIGdhbW1hMXhoID4+PiA2O1xuICAgICAgICAgICAgdmFyIGdhbW1hMWwgPSAoZ2FtbWExeGwgPj4+IDE5IHwgZ2FtbWExeGggPDwgMTMpIF4gKGdhbW1hMXhsIDw8IDMgfCBnYW1tYTF4aCA+Pj4gMjkpIF4gKGdhbW1hMXhsID4+PiA2IHwgZ2FtbWExeGggPDwgMjYpOyAvLyBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl1cblxuICAgICAgICAgICAgdmFyIFdpNyA9IFdbaSAtIDddO1xuICAgICAgICAgICAgdmFyIFdpN2ggPSBXaTcuaGlnaDtcbiAgICAgICAgICAgIHZhciBXaTdsID0gV2k3LmxvdztcbiAgICAgICAgICAgIHZhciBXaTE2ID0gV1tpIC0gMTZdO1xuICAgICAgICAgICAgdmFyIFdpMTZoID0gV2kxNi5oaWdoO1xuICAgICAgICAgICAgdmFyIFdpMTZsID0gV2kxNi5sb3c7XG4gICAgICAgICAgICBXaWwgPSBnYW1tYTBsICsgV2k3bDtcbiAgICAgICAgICAgIFdpaCA9IGdhbW1hMGggKyBXaTdoICsgKFdpbCA+Pj4gMCA8IGdhbW1hMGwgPj4+IDAgPyAxIDogMCk7XG4gICAgICAgICAgICBXaWwgPSBXaWwgKyBnYW1tYTFsO1xuICAgICAgICAgICAgV2loID0gV2loICsgZ2FtbWExaCArIChXaWwgPj4+IDAgPCBnYW1tYTFsID4+PiAwID8gMSA6IDApO1xuICAgICAgICAgICAgV2lsID0gV2lsICsgV2kxNmw7XG4gICAgICAgICAgICBXaWggPSBXaWggKyBXaTE2aCArIChXaWwgPj4+IDAgPCBXaTE2bCA+Pj4gMCA/IDEgOiAwKTtcbiAgICAgICAgICAgIFdpLmhpZ2ggPSBXaWg7XG4gICAgICAgICAgICBXaS5sb3cgPSBXaWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGNoaCA9IGVoICYgZmggXiB+ZWggJiBnaDtcbiAgICAgICAgICB2YXIgY2hsID0gZWwgJiBmbCBeIH5lbCAmIGdsO1xuICAgICAgICAgIHZhciBtYWpoID0gYWggJiBiaCBeIGFoICYgY2ggXiBiaCAmIGNoO1xuICAgICAgICAgIHZhciBtYWpsID0gYWwgJiBibCBeIGFsICYgY2wgXiBibCAmIGNsO1xuICAgICAgICAgIHZhciBzaWdtYTBoID0gKGFoID4+PiAyOCB8IGFsIDw8IDQpIF4gKGFoIDw8IDMwIHwgYWwgPj4+IDIpIF4gKGFoIDw8IDI1IHwgYWwgPj4+IDcpO1xuICAgICAgICAgIHZhciBzaWdtYTBsID0gKGFsID4+PiAyOCB8IGFoIDw8IDQpIF4gKGFsIDw8IDMwIHwgYWggPj4+IDIpIF4gKGFsIDw8IDI1IHwgYWggPj4+IDcpO1xuICAgICAgICAgIHZhciBzaWdtYTFoID0gKGVoID4+PiAxNCB8IGVsIDw8IDE4KSBeIChlaCA+Pj4gMTggfCBlbCA8PCAxNCkgXiAoZWggPDwgMjMgfCBlbCA+Pj4gOSk7XG4gICAgICAgICAgdmFyIHNpZ21hMWwgPSAoZWwgPj4+IDE0IHwgZWggPDwgMTgpIF4gKGVsID4+PiAxOCB8IGVoIDw8IDE0KSBeIChlbCA8PCAyMyB8IGVoID4+PiA5KTsgLy8gdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXVxuXG4gICAgICAgICAgdmFyIEtpID0gS1tpXTtcbiAgICAgICAgICB2YXIgS2loID0gS2kuaGlnaDtcbiAgICAgICAgICB2YXIgS2lsID0gS2kubG93O1xuICAgICAgICAgIHZhciB0MWwgPSBobCArIHNpZ21hMWw7XG4gICAgICAgICAgdmFyIHQxaCA9IGhoICsgc2lnbWExaCArICh0MWwgPj4+IDAgPCBobCA+Pj4gMCA/IDEgOiAwKTtcbiAgICAgICAgICB2YXIgdDFsID0gdDFsICsgY2hsO1xuICAgICAgICAgIHZhciB0MWggPSB0MWggKyBjaGggKyAodDFsID4+PiAwIDwgY2hsID4+PiAwID8gMSA6IDApO1xuICAgICAgICAgIHZhciB0MWwgPSB0MWwgKyBLaWw7XG4gICAgICAgICAgdmFyIHQxaCA9IHQxaCArIEtpaCArICh0MWwgPj4+IDAgPCBLaWwgPj4+IDAgPyAxIDogMCk7XG4gICAgICAgICAgdmFyIHQxbCA9IHQxbCArIFdpbDtcbiAgICAgICAgICB2YXIgdDFoID0gdDFoICsgV2loICsgKHQxbCA+Pj4gMCA8IFdpbCA+Pj4gMCA/IDEgOiAwKTsgLy8gdDIgPSBzaWdtYTAgKyBtYWpcblxuICAgICAgICAgIHZhciB0MmwgPSBzaWdtYTBsICsgbWFqbDtcbiAgICAgICAgICB2YXIgdDJoID0gc2lnbWEwaCArIG1hamggKyAodDJsID4+PiAwIDwgc2lnbWEwbCA+Pj4gMCA/IDEgOiAwKTsgLy8gVXBkYXRlIHdvcmtpbmcgdmFyaWFibGVzXG5cbiAgICAgICAgICBoaCA9IGdoO1xuICAgICAgICAgIGhsID0gZ2w7XG4gICAgICAgICAgZ2ggPSBmaDtcbiAgICAgICAgICBnbCA9IGZsO1xuICAgICAgICAgIGZoID0gZWg7XG4gICAgICAgICAgZmwgPSBlbDtcbiAgICAgICAgICBlbCA9IGRsICsgdDFsIHwgMDtcbiAgICAgICAgICBlaCA9IGRoICsgdDFoICsgKGVsID4+PiAwIDwgZGwgPj4+IDAgPyAxIDogMCkgfCAwO1xuICAgICAgICAgIGRoID0gY2g7XG4gICAgICAgICAgZGwgPSBjbDtcbiAgICAgICAgICBjaCA9IGJoO1xuICAgICAgICAgIGNsID0gYmw7XG4gICAgICAgICAgYmggPSBhaDtcbiAgICAgICAgICBibCA9IGFsO1xuICAgICAgICAgIGFsID0gdDFsICsgdDJsIHwgMDtcbiAgICAgICAgICBhaCA9IHQxaCArIHQyaCArIChhbCA+Pj4gMCA8IHQxbCA+Pj4gMCA/IDEgOiAwKSB8IDA7XG4gICAgICAgIH0gLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblxuXG4gICAgICAgIEgwbCA9IEgwLmxvdyA9IEgwbCArIGFsO1xuICAgICAgICBIMC5oaWdoID0gSDBoICsgYWggKyAoSDBsID4+PiAwIDwgYWwgPj4+IDAgPyAxIDogMCk7XG4gICAgICAgIEgxbCA9IEgxLmxvdyA9IEgxbCArIGJsO1xuICAgICAgICBIMS5oaWdoID0gSDFoICsgYmggKyAoSDFsID4+PiAwIDwgYmwgPj4+IDAgPyAxIDogMCk7XG4gICAgICAgIEgybCA9IEgyLmxvdyA9IEgybCArIGNsO1xuICAgICAgICBIMi5oaWdoID0gSDJoICsgY2ggKyAoSDJsID4+PiAwIDwgY2wgPj4+IDAgPyAxIDogMCk7XG4gICAgICAgIEgzbCA9IEgzLmxvdyA9IEgzbCArIGRsO1xuICAgICAgICBIMy5oaWdoID0gSDNoICsgZGggKyAoSDNsID4+PiAwIDwgZGwgPj4+IDAgPyAxIDogMCk7XG4gICAgICAgIEg0bCA9IEg0LmxvdyA9IEg0bCArIGVsO1xuICAgICAgICBINC5oaWdoID0gSDRoICsgZWggKyAoSDRsID4+PiAwIDwgZWwgPj4+IDAgPyAxIDogMCk7XG4gICAgICAgIEg1bCA9IEg1LmxvdyA9IEg1bCArIGZsO1xuICAgICAgICBINS5oaWdoID0gSDVoICsgZmggKyAoSDVsID4+PiAwIDwgZmwgPj4+IDAgPyAxIDogMCk7XG4gICAgICAgIEg2bCA9IEg2LmxvdyA9IEg2bCArIGdsO1xuICAgICAgICBINi5oaWdoID0gSDZoICsgZ2ggKyAoSDZsID4+PiAwIDwgZ2wgPj4+IDAgPyAxIDogMCk7XG4gICAgICAgIEg3bCA9IEg3LmxvdyA9IEg3bCArIGhsO1xuICAgICAgICBINy5oaWdoID0gSDdoICsgaGggKyAoSDdsID4+PiAwIDwgaGwgPj4+IDAgPyAxIDogMCk7XG4gICAgICB9LFxuICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uIF9kb0ZpbmFsaXplKCkge1xuICAgICAgICAvLyBTaG9ydGN1dHNcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcbiAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcbiAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4OyAvLyBBZGQgcGFkZGluZ1xuXG4gICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgMjQgLSBuQml0c0xlZnQgJSAzMjtcbiAgICAgICAgZGF0YVdvcmRzWyhuQml0c0xlZnQgKyAxMjggPj4+IDEwIDw8IDUpICsgMzBdID0gTWF0aC5mbG9vcihuQml0c1RvdGFsIC8gMHgxMDAwMDAwMDApO1xuICAgICAgICBkYXRhV29yZHNbKG5CaXRzTGVmdCArIDEyOCA+Pj4gMTAgPDwgNSkgKyAzMV0gPSBuQml0c1RvdGFsO1xuICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7IC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cbiAgICAgICAgdGhpcy5fcHJvY2VzcygpOyAvLyBDb252ZXJ0IGhhc2ggdG8gMzItYml0IHdvcmQgYXJyYXkgYmVmb3JlIHJldHVybmluZ1xuXG5cbiAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoLnRvWDMyKCk7IC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cblxuICAgICAgICByZXR1cm4gaGFzaDtcbiAgICAgIH0sXG4gICAgICBjbG9uZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgfSxcbiAgICAgIGJsb2NrU2l6ZTogMTAyNCAvIDMyXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBNTEyKCdtZXNzYWdlJyk7XG4gICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBNTEyKHdvcmRBcnJheSk7XG4gICAgICovXG5cbiAgICBDLlNIQTUxMiA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFNIQTUxMik7XG4gICAgLyoqXG4gICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG4gICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEE1MTIobWVzc2FnZSwga2V5KTtcbiAgICAgKi9cblxuICAgIEMuSG1hY1NIQTUxMiA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihTSEE1MTIpO1xuICB9KSgpO1xuXG4gIHJldHVybiBDcnlwdG9KUy5TSEE1MTI7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDg0Mzc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oNzA0Mik7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuICBpZiAodHJ1ZSkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDc1NyksIF9fd2VicGFja19yZXF1aXJlX18oNzUwOCksIF9fd2VicGFja19yZXF1aXJlX18oMzQ0MCksIF9fd2VicGFja19yZXF1aXJlX18oMzgzOSksIF9fd2VicGFja19yZXF1aXJlX18oMTU4MikpO1xuICB9IGVsc2Uge31cbn0pKHZvaWQgMCwgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2hvcnRjdXRzXG4gICAgdmFyIEMgPSBDcnlwdG9KUztcbiAgICB2YXIgQ19saWIgPSBDLmxpYjtcbiAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuICAgIHZhciBCbG9ja0NpcGhlciA9IENfbGliLkJsb2NrQ2lwaGVyO1xuICAgIHZhciBDX2FsZ28gPSBDLmFsZ287IC8vIFBlcm11dGVkIENob2ljZSAxIGNvbnN0YW50c1xuXG4gICAgdmFyIFBDMSA9IFs1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LCAxLCA1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LCAxMCwgMiwgNTksIDUxLCA0MywgMzUsIDI3LCAxOSwgMTEsIDMsIDYwLCA1MiwgNDQsIDM2LCA2MywgNTUsIDQ3LCAzOSwgMzEsIDIzLCAxNSwgNywgNjIsIDU0LCA0NiwgMzgsIDMwLCAyMiwgMTQsIDYsIDYxLCA1MywgNDUsIDM3LCAyOSwgMjEsIDEzLCA1LCAyOCwgMjAsIDEyLCA0XTsgLy8gUGVybXV0ZWQgQ2hvaWNlIDIgY29uc3RhbnRzXG5cbiAgICB2YXIgUEMyID0gWzE0LCAxNywgMTEsIDI0LCAxLCA1LCAzLCAyOCwgMTUsIDYsIDIxLCAxMCwgMjMsIDE5LCAxMiwgNCwgMjYsIDgsIDE2LCA3LCAyNywgMjAsIDEzLCAyLCA0MSwgNTIsIDMxLCAzNywgNDcsIDU1LCAzMCwgNDAsIDUxLCA0NSwgMzMsIDQ4LCA0NCwgNDksIDM5LCA1NiwgMzQsIDUzLCA0NiwgNDIsIDUwLCAzNiwgMjksIDMyXTsgLy8gQ3VtdWxhdGl2ZSBiaXQgc2hpZnQgY29uc3RhbnRzXG5cbiAgICB2YXIgQklUX1NISUZUUyA9IFsxLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNSwgMTcsIDE5LCAyMSwgMjMsIDI1LCAyNywgMjhdOyAvLyBTQk9YZXMgYW5kIHJvdW5kIHBlcm11dGF0aW9uIGNvbnN0YW50c1xuXG4gICAgdmFyIFNCT1hfUCA9IFt7XG4gICAgICAweDA6IDB4ODA4MjAwLFxuICAgICAgMHgxMDAwMDAwMDogMHg4MDAwLFxuICAgICAgMHgyMDAwMDAwMDogMHg4MDgwMDIsXG4gICAgICAweDMwMDAwMDAwOiAweDIsXG4gICAgICAweDQwMDAwMDAwOiAweDIwMCxcbiAgICAgIDB4NTAwMDAwMDA6IDB4ODA4MjAyLFxuICAgICAgMHg2MDAwMDAwMDogMHg4MDAyMDIsXG4gICAgICAweDcwMDAwMDAwOiAweDgwMDAwMCxcbiAgICAgIDB4ODAwMDAwMDA6IDB4MjAyLFxuICAgICAgMHg5MDAwMDAwMDogMHg4MDAyMDAsXG4gICAgICAweGEwMDAwMDAwOiAweDgyMDAsXG4gICAgICAweGIwMDAwMDAwOiAweDgwODAwMCxcbiAgICAgIDB4YzAwMDAwMDA6IDB4ODAwMixcbiAgICAgIDB4ZDAwMDAwMDA6IDB4ODAwMDAyLFxuICAgICAgMHhlMDAwMDAwMDogMHgwLFxuICAgICAgMHhmMDAwMDAwMDogMHg4MjAyLFxuICAgICAgMHg4MDAwMDAwOiAweDAsXG4gICAgICAweDE4MDAwMDAwOiAweDgwODIwMixcbiAgICAgIDB4MjgwMDAwMDA6IDB4ODIwMixcbiAgICAgIDB4MzgwMDAwMDA6IDB4ODAwMCxcbiAgICAgIDB4NDgwMDAwMDA6IDB4ODA4MjAwLFxuICAgICAgMHg1ODAwMDAwMDogMHgyMDAsXG4gICAgICAweDY4MDAwMDAwOiAweDgwODAwMixcbiAgICAgIDB4NzgwMDAwMDA6IDB4MixcbiAgICAgIDB4ODgwMDAwMDA6IDB4ODAwMjAwLFxuICAgICAgMHg5ODAwMDAwMDogMHg4MjAwLFxuICAgICAgMHhhODAwMDAwMDogMHg4MDgwMDAsXG4gICAgICAweGI4MDAwMDAwOiAweDgwMDIwMixcbiAgICAgIDB4YzgwMDAwMDA6IDB4ODAwMDAyLFxuICAgICAgMHhkODAwMDAwMDogMHg4MDAyLFxuICAgICAgMHhlODAwMDAwMDogMHgyMDIsXG4gICAgICAweGY4MDAwMDAwOiAweDgwMDAwMCxcbiAgICAgIDB4MTogMHg4MDAwLFxuICAgICAgMHgxMDAwMDAwMTogMHgyLFxuICAgICAgMHgyMDAwMDAwMTogMHg4MDgyMDAsXG4gICAgICAweDMwMDAwMDAxOiAweDgwMDAwMCxcbiAgICAgIDB4NDAwMDAwMDE6IDB4ODA4MDAyLFxuICAgICAgMHg1MDAwMDAwMTogMHg4MjAwLFxuICAgICAgMHg2MDAwMDAwMTogMHgyMDAsXG4gICAgICAweDcwMDAwMDAxOiAweDgwMDIwMixcbiAgICAgIDB4ODAwMDAwMDE6IDB4ODA4MjAyLFxuICAgICAgMHg5MDAwMDAwMTogMHg4MDgwMDAsXG4gICAgICAweGEwMDAwMDAxOiAweDgwMDAwMixcbiAgICAgIDB4YjAwMDAwMDE6IDB4ODIwMixcbiAgICAgIDB4YzAwMDAwMDE6IDB4MjAyLFxuICAgICAgMHhkMDAwMDAwMTogMHg4MDAyMDAsXG4gICAgICAweGUwMDAwMDAxOiAweDgwMDIsXG4gICAgICAweGYwMDAwMDAxOiAweDAsXG4gICAgICAweDgwMDAwMDE6IDB4ODA4MjAyLFxuICAgICAgMHgxODAwMDAwMTogMHg4MDgwMDAsXG4gICAgICAweDI4MDAwMDAxOiAweDgwMDAwMCxcbiAgICAgIDB4MzgwMDAwMDE6IDB4MjAwLFxuICAgICAgMHg0ODAwMDAwMTogMHg4MDAwLFxuICAgICAgMHg1ODAwMDAwMTogMHg4MDAwMDIsXG4gICAgICAweDY4MDAwMDAxOiAweDIsXG4gICAgICAweDc4MDAwMDAxOiAweDgyMDIsXG4gICAgICAweDg4MDAwMDAxOiAweDgwMDIsXG4gICAgICAweDk4MDAwMDAxOiAweDgwMDIwMixcbiAgICAgIDB4YTgwMDAwMDE6IDB4MjAyLFxuICAgICAgMHhiODAwMDAwMTogMHg4MDgyMDAsXG4gICAgICAweGM4MDAwMDAxOiAweDgwMDIwMCxcbiAgICAgIDB4ZDgwMDAwMDE6IDB4MCxcbiAgICAgIDB4ZTgwMDAwMDE6IDB4ODIwMCxcbiAgICAgIDB4ZjgwMDAwMDE6IDB4ODA4MDAyXG4gICAgfSwge1xuICAgICAgMHgwOiAweDQwMDg0MDEwLFxuICAgICAgMHgxMDAwMDAwOiAweDQwMDAsXG4gICAgICAweDIwMDAwMDA6IDB4ODAwMDAsXG4gICAgICAweDMwMDAwMDA6IDB4NDAwODAwMTAsXG4gICAgICAweDQwMDAwMDA6IDB4NDAwMDAwMTAsXG4gICAgICAweDUwMDAwMDA6IDB4NDAwODQwMDAsXG4gICAgICAweDYwMDAwMDA6IDB4NDAwMDQwMDAsXG4gICAgICAweDcwMDAwMDA6IDB4MTAsXG4gICAgICAweDgwMDAwMDA6IDB4ODQwMDAsXG4gICAgICAweDkwMDAwMDA6IDB4NDAwMDQwMTAsXG4gICAgICAweGEwMDAwMDA6IDB4NDAwMDAwMDAsXG4gICAgICAweGIwMDAwMDA6IDB4ODQwMTAsXG4gICAgICAweGMwMDAwMDA6IDB4ODAwMTAsXG4gICAgICAweGQwMDAwMDA6IDB4MCxcbiAgICAgIDB4ZTAwMDAwMDogMHg0MDEwLFxuICAgICAgMHhmMDAwMDAwOiAweDQwMDgwMDAwLFxuICAgICAgMHg4MDAwMDA6IDB4NDAwMDQwMDAsXG4gICAgICAweDE4MDAwMDA6IDB4ODQwMTAsXG4gICAgICAweDI4MDAwMDA6IDB4MTAsXG4gICAgICAweDM4MDAwMDA6IDB4NDAwMDQwMTAsXG4gICAgICAweDQ4MDAwMDA6IDB4NDAwODQwMTAsXG4gICAgICAweDU4MDAwMDA6IDB4NDAwMDAwMDAsXG4gICAgICAweDY4MDAwMDA6IDB4ODAwMDAsXG4gICAgICAweDc4MDAwMDA6IDB4NDAwODAwMTAsXG4gICAgICAweDg4MDAwMDA6IDB4ODAwMTAsXG4gICAgICAweDk4MDAwMDA6IDB4MCxcbiAgICAgIDB4YTgwMDAwMDogMHg0MDAwLFxuICAgICAgMHhiODAwMDAwOiAweDQwMDgwMDAwLFxuICAgICAgMHhjODAwMDAwOiAweDQwMDAwMDEwLFxuICAgICAgMHhkODAwMDAwOiAweDg0MDAwLFxuICAgICAgMHhlODAwMDAwOiAweDQwMDg0MDAwLFxuICAgICAgMHhmODAwMDAwOiAweDQwMTAsXG4gICAgICAweDEwMDAwMDAwOiAweDAsXG4gICAgICAweDExMDAwMDAwOiAweDQwMDgwMDEwLFxuICAgICAgMHgxMjAwMDAwMDogMHg0MDAwNDAxMCxcbiAgICAgIDB4MTMwMDAwMDA6IDB4NDAwODQwMDAsXG4gICAgICAweDE0MDAwMDAwOiAweDQwMDgwMDAwLFxuICAgICAgMHgxNTAwMDAwMDogMHgxMCxcbiAgICAgIDB4MTYwMDAwMDA6IDB4ODQwMTAsXG4gICAgICAweDE3MDAwMDAwOiAweDQwMDAsXG4gICAgICAweDE4MDAwMDAwOiAweDQwMTAsXG4gICAgICAweDE5MDAwMDAwOiAweDgwMDAwLFxuICAgICAgMHgxYTAwMDAwMDogMHg4MDAxMCxcbiAgICAgIDB4MWIwMDAwMDA6IDB4NDAwMDAwMTAsXG4gICAgICAweDFjMDAwMDAwOiAweDg0MDAwLFxuICAgICAgMHgxZDAwMDAwMDogMHg0MDAwNDAwMCxcbiAgICAgIDB4MWUwMDAwMDA6IDB4NDAwMDAwMDAsXG4gICAgICAweDFmMDAwMDAwOiAweDQwMDg0MDEwLFxuICAgICAgMHgxMDgwMDAwMDogMHg4NDAxMCxcbiAgICAgIDB4MTE4MDAwMDA6IDB4ODAwMDAsXG4gICAgICAweDEyODAwMDAwOiAweDQwMDgwMDAwLFxuICAgICAgMHgxMzgwMDAwMDogMHg0MDAwLFxuICAgICAgMHgxNDgwMDAwMDogMHg0MDAwNDAwMCxcbiAgICAgIDB4MTU4MDAwMDA6IDB4NDAwODQwMTAsXG4gICAgICAweDE2ODAwMDAwOiAweDEwLFxuICAgICAgMHgxNzgwMDAwMDogMHg0MDAwMDAwMCxcbiAgICAgIDB4MTg4MDAwMDA6IDB4NDAwODQwMDAsXG4gICAgICAweDE5ODAwMDAwOiAweDQwMDAwMDEwLFxuICAgICAgMHgxYTgwMDAwMDogMHg0MDAwNDAxMCxcbiAgICAgIDB4MWI4MDAwMDA6IDB4ODAwMTAsXG4gICAgICAweDFjODAwMDAwOiAweDAsXG4gICAgICAweDFkODAwMDAwOiAweDQwMTAsXG4gICAgICAweDFlODAwMDAwOiAweDQwMDgwMDEwLFxuICAgICAgMHgxZjgwMDAwMDogMHg4NDAwMFxuICAgIH0sIHtcbiAgICAgIDB4MDogMHgxMDQsXG4gICAgICAweDEwMDAwMDogMHgwLFxuICAgICAgMHgyMDAwMDA6IDB4NDAwMDEwMCxcbiAgICAgIDB4MzAwMDAwOiAweDEwMTA0LFxuICAgICAgMHg0MDAwMDA6IDB4MTAwMDQsXG4gICAgICAweDUwMDAwMDogMHg0MDAwMDA0LFxuICAgICAgMHg2MDAwMDA6IDB4NDAxMDEwNCxcbiAgICAgIDB4NzAwMDAwOiAweDQwMTAwMDAsXG4gICAgICAweDgwMDAwMDogMHg0MDAwMDAwLFxuICAgICAgMHg5MDAwMDA6IDB4NDAxMDEwMCxcbiAgICAgIDB4YTAwMDAwOiAweDEwMTAwLFxuICAgICAgMHhiMDAwMDA6IDB4NDAxMDAwNCxcbiAgICAgIDB4YzAwMDAwOiAweDQwMDAxMDQsXG4gICAgICAweGQwMDAwMDogMHgxMDAwMCxcbiAgICAgIDB4ZTAwMDAwOiAweDQsXG4gICAgICAweGYwMDAwMDogMHgxMDAsXG4gICAgICAweDgwMDAwOiAweDQwMTAxMDAsXG4gICAgICAweDE4MDAwMDogMHg0MDEwMDA0LFxuICAgICAgMHgyODAwMDA6IDB4MCxcbiAgICAgIDB4MzgwMDAwOiAweDQwMDAxMDAsXG4gICAgICAweDQ4MDAwMDogMHg0MDAwMDA0LFxuICAgICAgMHg1ODAwMDA6IDB4MTAwMDAsXG4gICAgICAweDY4MDAwMDogMHgxMDAwNCxcbiAgICAgIDB4NzgwMDAwOiAweDEwNCxcbiAgICAgIDB4ODgwMDAwOiAweDQsXG4gICAgICAweDk4MDAwMDogMHgxMDAsXG4gICAgICAweGE4MDAwMDogMHg0MDEwMDAwLFxuICAgICAgMHhiODAwMDA6IDB4MTAxMDQsXG4gICAgICAweGM4MDAwMDogMHgxMDEwMCxcbiAgICAgIDB4ZDgwMDAwOiAweDQwMDAxMDQsXG4gICAgICAweGU4MDAwMDogMHg0MDEwMTA0LFxuICAgICAgMHhmODAwMDA6IDB4NDAwMDAwMCxcbiAgICAgIDB4MTAwMDAwMDogMHg0MDEwMTAwLFxuICAgICAgMHgxMTAwMDAwOiAweDEwMDA0LFxuICAgICAgMHgxMjAwMDAwOiAweDEwMDAwLFxuICAgICAgMHgxMzAwMDAwOiAweDQwMDAxMDAsXG4gICAgICAweDE0MDAwMDA6IDB4MTAwLFxuICAgICAgMHgxNTAwMDAwOiAweDQwMTAxMDQsXG4gICAgICAweDE2MDAwMDA6IDB4NDAwMDAwNCxcbiAgICAgIDB4MTcwMDAwMDogMHgwLFxuICAgICAgMHgxODAwMDAwOiAweDQwMDAxMDQsXG4gICAgICAweDE5MDAwMDA6IDB4NDAwMDAwMCxcbiAgICAgIDB4MWEwMDAwMDogMHg0LFxuICAgICAgMHgxYjAwMDAwOiAweDEwMTAwLFxuICAgICAgMHgxYzAwMDAwOiAweDQwMTAwMDAsXG4gICAgICAweDFkMDAwMDA6IDB4MTA0LFxuICAgICAgMHgxZTAwMDAwOiAweDEwMTA0LFxuICAgICAgMHgxZjAwMDAwOiAweDQwMTAwMDQsXG4gICAgICAweDEwODAwMDA6IDB4NDAwMDAwMCxcbiAgICAgIDB4MTE4MDAwMDogMHgxMDQsXG4gICAgICAweDEyODAwMDA6IDB4NDAxMDEwMCxcbiAgICAgIDB4MTM4MDAwMDogMHgwLFxuICAgICAgMHgxNDgwMDAwOiAweDEwMDA0LFxuICAgICAgMHgxNTgwMDAwOiAweDQwMDAxMDAsXG4gICAgICAweDE2ODAwMDA6IDB4MTAwLFxuICAgICAgMHgxNzgwMDAwOiAweDQwMTAwMDQsXG4gICAgICAweDE4ODAwMDA6IDB4MTAwMDAsXG4gICAgICAweDE5ODAwMDA6IDB4NDAxMDEwNCxcbiAgICAgIDB4MWE4MDAwMDogMHgxMDEwNCxcbiAgICAgIDB4MWI4MDAwMDogMHg0MDAwMDA0LFxuICAgICAgMHgxYzgwMDAwOiAweDQwMDAxMDQsXG4gICAgICAweDFkODAwMDA6IDB4NDAxMDAwMCxcbiAgICAgIDB4MWU4MDAwMDogMHg0LFxuICAgICAgMHgxZjgwMDAwOiAweDEwMTAwXG4gICAgfSwge1xuICAgICAgMHgwOiAweDgwNDAxMDAwLFxuICAgICAgMHgxMDAwMDogMHg4MDAwMTA0MCxcbiAgICAgIDB4MjAwMDA6IDB4NDAxMDQwLFxuICAgICAgMHgzMDAwMDogMHg4MDQwMDAwMCxcbiAgICAgIDB4NDAwMDA6IDB4MCxcbiAgICAgIDB4NTAwMDA6IDB4NDAxMDAwLFxuICAgICAgMHg2MDAwMDogMHg4MDAwMDA0MCxcbiAgICAgIDB4NzAwMDA6IDB4NDAwMDQwLFxuICAgICAgMHg4MDAwMDogMHg4MDAwMDAwMCxcbiAgICAgIDB4OTAwMDA6IDB4NDAwMDAwLFxuICAgICAgMHhhMDAwMDogMHg0MCxcbiAgICAgIDB4YjAwMDA6IDB4ODAwMDEwMDAsXG4gICAgICAweGMwMDAwOiAweDgwNDAwMDQwLFxuICAgICAgMHhkMDAwMDogMHgxMDQwLFxuICAgICAgMHhlMDAwMDogMHgxMDAwLFxuICAgICAgMHhmMDAwMDogMHg4MDQwMTA0MCxcbiAgICAgIDB4ODAwMDogMHg4MDAwMTA0MCxcbiAgICAgIDB4MTgwMDA6IDB4NDAsXG4gICAgICAweDI4MDAwOiAweDgwNDAwMDQwLFxuICAgICAgMHgzODAwMDogMHg4MDAwMTAwMCxcbiAgICAgIDB4NDgwMDA6IDB4NDAxMDAwLFxuICAgICAgMHg1ODAwMDogMHg4MDQwMTA0MCxcbiAgICAgIDB4NjgwMDA6IDB4MCxcbiAgICAgIDB4NzgwMDA6IDB4ODA0MDAwMDAsXG4gICAgICAweDg4MDAwOiAweDEwMDAsXG4gICAgICAweDk4MDAwOiAweDgwNDAxMDAwLFxuICAgICAgMHhhODAwMDogMHg0MDAwMDAsXG4gICAgICAweGI4MDAwOiAweDEwNDAsXG4gICAgICAweGM4MDAwOiAweDgwMDAwMDAwLFxuICAgICAgMHhkODAwMDogMHg0MDAwNDAsXG4gICAgICAweGU4MDAwOiAweDQwMTA0MCxcbiAgICAgIDB4ZjgwMDA6IDB4ODAwMDAwNDAsXG4gICAgICAweDEwMDAwMDogMHg0MDAwNDAsXG4gICAgICAweDExMDAwMDogMHg0MDEwMDAsXG4gICAgICAweDEyMDAwMDogMHg4MDAwMDA0MCxcbiAgICAgIDB4MTMwMDAwOiAweDAsXG4gICAgICAweDE0MDAwMDogMHgxMDQwLFxuICAgICAgMHgxNTAwMDA6IDB4ODA0MDAwNDAsXG4gICAgICAweDE2MDAwMDogMHg4MDQwMTAwMCxcbiAgICAgIDB4MTcwMDAwOiAweDgwMDAxMDQwLFxuICAgICAgMHgxODAwMDA6IDB4ODA0MDEwNDAsXG4gICAgICAweDE5MDAwMDogMHg4MDAwMDAwMCxcbiAgICAgIDB4MWEwMDAwOiAweDgwNDAwMDAwLFxuICAgICAgMHgxYjAwMDA6IDB4NDAxMDQwLFxuICAgICAgMHgxYzAwMDA6IDB4ODAwMDEwMDAsXG4gICAgICAweDFkMDAwMDogMHg0MDAwMDAsXG4gICAgICAweDFlMDAwMDogMHg0MCxcbiAgICAgIDB4MWYwMDAwOiAweDEwMDAsXG4gICAgICAweDEwODAwMDogMHg4MDQwMDAwMCxcbiAgICAgIDB4MTE4MDAwOiAweDgwNDAxMDQwLFxuICAgICAgMHgxMjgwMDA6IDB4MCxcbiAgICAgIDB4MTM4MDAwOiAweDQwMTAwMCxcbiAgICAgIDB4MTQ4MDAwOiAweDQwMDA0MCxcbiAgICAgIDB4MTU4MDAwOiAweDgwMDAwMDAwLFxuICAgICAgMHgxNjgwMDA6IDB4ODAwMDEwNDAsXG4gICAgICAweDE3ODAwMDogMHg0MCxcbiAgICAgIDB4MTg4MDAwOiAweDgwMDAwMDQwLFxuICAgICAgMHgxOTgwMDA6IDB4MTAwMCxcbiAgICAgIDB4MWE4MDAwOiAweDgwMDAxMDAwLFxuICAgICAgMHgxYjgwMDA6IDB4ODA0MDAwNDAsXG4gICAgICAweDFjODAwMDogMHgxMDQwLFxuICAgICAgMHgxZDgwMDA6IDB4ODA0MDEwMDAsXG4gICAgICAweDFlODAwMDogMHg0MDAwMDAsXG4gICAgICAweDFmODAwMDogMHg0MDEwNDBcbiAgICB9LCB7XG4gICAgICAweDA6IDB4ODAsXG4gICAgICAweDEwMDA6IDB4MTA0MDAwMCxcbiAgICAgIDB4MjAwMDogMHg0MDAwMCxcbiAgICAgIDB4MzAwMDogMHgyMDAwMDAwMCxcbiAgICAgIDB4NDAwMDogMHgyMDA0MDA4MCxcbiAgICAgIDB4NTAwMDogMHgxMDAwMDgwLFxuICAgICAgMHg2MDAwOiAweDIxMDAwMDgwLFxuICAgICAgMHg3MDAwOiAweDQwMDgwLFxuICAgICAgMHg4MDAwOiAweDEwMDAwMDAsXG4gICAgICAweDkwMDA6IDB4MjAwNDAwMDAsXG4gICAgICAweGEwMDA6IDB4MjAwMDAwODAsXG4gICAgICAweGIwMDA6IDB4MjEwNDAwODAsXG4gICAgICAweGMwMDA6IDB4MjEwNDAwMDAsXG4gICAgICAweGQwMDA6IDB4MCxcbiAgICAgIDB4ZTAwMDogMHgxMDQwMDgwLFxuICAgICAgMHhmMDAwOiAweDIxMDAwMDAwLFxuICAgICAgMHg4MDA6IDB4MTA0MDA4MCxcbiAgICAgIDB4MTgwMDogMHgyMTAwMDA4MCxcbiAgICAgIDB4MjgwMDogMHg4MCxcbiAgICAgIDB4MzgwMDogMHgxMDQwMDAwLFxuICAgICAgMHg0ODAwOiAweDQwMDAwLFxuICAgICAgMHg1ODAwOiAweDIwMDQwMDgwLFxuICAgICAgMHg2ODAwOiAweDIxMDQwMDAwLFxuICAgICAgMHg3ODAwOiAweDIwMDAwMDAwLFxuICAgICAgMHg4ODAwOiAweDIwMDQwMDAwLFxuICAgICAgMHg5ODAwOiAweDAsXG4gICAgICAweGE4MDA6IDB4MjEwNDAwODAsXG4gICAgICAweGI4MDA6IDB4MTAwMDA4MCxcbiAgICAgIDB4YzgwMDogMHgyMDAwMDA4MCxcbiAgICAgIDB4ZDgwMDogMHgyMTAwMDAwMCxcbiAgICAgIDB4ZTgwMDogMHgxMDAwMDAwLFxuICAgICAgMHhmODAwOiAweDQwMDgwLFxuICAgICAgMHgxMDAwMDogMHg0MDAwMCxcbiAgICAgIDB4MTEwMDA6IDB4ODAsXG4gICAgICAweDEyMDAwOiAweDIwMDAwMDAwLFxuICAgICAgMHgxMzAwMDogMHgyMTAwMDA4MCxcbiAgICAgIDB4MTQwMDA6IDB4MTAwMDA4MCxcbiAgICAgIDB4MTUwMDA6IDB4MjEwNDAwMDAsXG4gICAgICAweDE2MDAwOiAweDIwMDQwMDgwLFxuICAgICAgMHgxNzAwMDogMHgxMDAwMDAwLFxuICAgICAgMHgxODAwMDogMHgyMTA0MDA4MCxcbiAgICAgIDB4MTkwMDA6IDB4MjEwMDAwMDAsXG4gICAgICAweDFhMDAwOiAweDEwNDAwMDAsXG4gICAgICAweDFiMDAwOiAweDIwMDQwMDAwLFxuICAgICAgMHgxYzAwMDogMHg0MDA4MCxcbiAgICAgIDB4MWQwMDA6IDB4MjAwMDAwODAsXG4gICAgICAweDFlMDAwOiAweDAsXG4gICAgICAweDFmMDAwOiAweDEwNDAwODAsXG4gICAgICAweDEwODAwOiAweDIxMDAwMDgwLFxuICAgICAgMHgxMTgwMDogMHgxMDAwMDAwLFxuICAgICAgMHgxMjgwMDogMHgxMDQwMDAwLFxuICAgICAgMHgxMzgwMDogMHgyMDA0MDA4MCxcbiAgICAgIDB4MTQ4MDA6IDB4MjAwMDAwMDAsXG4gICAgICAweDE1ODAwOiAweDEwNDAwODAsXG4gICAgICAweDE2ODAwOiAweDgwLFxuICAgICAgMHgxNzgwMDogMHgyMTA0MDAwMCxcbiAgICAgIDB4MTg4MDA6IDB4NDAwODAsXG4gICAgICAweDE5ODAwOiAweDIxMDQwMDgwLFxuICAgICAgMHgxYTgwMDogMHgwLFxuICAgICAgMHgxYjgwMDogMHgyMTAwMDAwMCxcbiAgICAgIDB4MWM4MDA6IDB4MTAwMDA4MCxcbiAgICAgIDB4MWQ4MDA6IDB4NDAwMDAsXG4gICAgICAweDFlODAwOiAweDIwMDQwMDAwLFxuICAgICAgMHgxZjgwMDogMHgyMDAwMDA4MFxuICAgIH0sIHtcbiAgICAgIDB4MDogMHgxMDAwMDAwOCxcbiAgICAgIDB4MTAwOiAweDIwMDAsXG4gICAgICAweDIwMDogMHgxMDIwMDAwMCxcbiAgICAgIDB4MzAwOiAweDEwMjAyMDA4LFxuICAgICAgMHg0MDA6IDB4MTAwMDIwMDAsXG4gICAgICAweDUwMDogMHgyMDAwMDAsXG4gICAgICAweDYwMDogMHgyMDAwMDgsXG4gICAgICAweDcwMDogMHgxMDAwMDAwMCxcbiAgICAgIDB4ODAwOiAweDAsXG4gICAgICAweDkwMDogMHgxMDAwMjAwOCxcbiAgICAgIDB4YTAwOiAweDIwMjAwMCxcbiAgICAgIDB4YjAwOiAweDgsXG4gICAgICAweGMwMDogMHgxMDIwMDAwOCxcbiAgICAgIDB4ZDAwOiAweDIwMjAwOCxcbiAgICAgIDB4ZTAwOiAweDIwMDgsXG4gICAgICAweGYwMDogMHgxMDIwMjAwMCxcbiAgICAgIDB4ODA6IDB4MTAyMDAwMDAsXG4gICAgICAweDE4MDogMHgxMDIwMjAwOCxcbiAgICAgIDB4MjgwOiAweDgsXG4gICAgICAweDM4MDogMHgyMDAwMDAsXG4gICAgICAweDQ4MDogMHgyMDIwMDgsXG4gICAgICAweDU4MDogMHgxMDAwMDAwOCxcbiAgICAgIDB4NjgwOiAweDEwMDAyMDAwLFxuICAgICAgMHg3ODA6IDB4MjAwOCxcbiAgICAgIDB4ODgwOiAweDIwMDAwOCxcbiAgICAgIDB4OTgwOiAweDIwMDAsXG4gICAgICAweGE4MDogMHgxMDAwMjAwOCxcbiAgICAgIDB4YjgwOiAweDEwMjAwMDA4LFxuICAgICAgMHhjODA6IDB4MCxcbiAgICAgIDB4ZDgwOiAweDEwMjAyMDAwLFxuICAgICAgMHhlODA6IDB4MjAyMDAwLFxuICAgICAgMHhmODA6IDB4MTAwMDAwMDAsXG4gICAgICAweDEwMDA6IDB4MTAwMDIwMDAsXG4gICAgICAweDExMDA6IDB4MTAyMDAwMDgsXG4gICAgICAweDEyMDA6IDB4MTAyMDIwMDgsXG4gICAgICAweDEzMDA6IDB4MjAwOCxcbiAgICAgIDB4MTQwMDogMHgyMDAwMDAsXG4gICAgICAweDE1MDA6IDB4MTAwMDAwMDAsXG4gICAgICAweDE2MDA6IDB4MTAwMDAwMDgsXG4gICAgICAweDE3MDA6IDB4MjAyMDAwLFxuICAgICAgMHgxODAwOiAweDIwMjAwOCxcbiAgICAgIDB4MTkwMDogMHgwLFxuICAgICAgMHgxYTAwOiAweDgsXG4gICAgICAweDFiMDA6IDB4MTAyMDAwMDAsXG4gICAgICAweDFjMDA6IDB4MjAwMCxcbiAgICAgIDB4MWQwMDogMHgxMDAwMjAwOCxcbiAgICAgIDB4MWUwMDogMHgxMDIwMjAwMCxcbiAgICAgIDB4MWYwMDogMHgyMDAwMDgsXG4gICAgICAweDEwODA6IDB4OCxcbiAgICAgIDB4MTE4MDogMHgyMDIwMDAsXG4gICAgICAweDEyODA6IDB4MjAwMDAwLFxuICAgICAgMHgxMzgwOiAweDEwMDAwMDA4LFxuICAgICAgMHgxNDgwOiAweDEwMDAyMDAwLFxuICAgICAgMHgxNTgwOiAweDIwMDgsXG4gICAgICAweDE2ODA6IDB4MTAyMDIwMDgsXG4gICAgICAweDE3ODA6IDB4MTAyMDAwMDAsXG4gICAgICAweDE4ODA6IDB4MTAyMDIwMDAsXG4gICAgICAweDE5ODA6IDB4MTAyMDAwMDgsXG4gICAgICAweDFhODA6IDB4MjAwMCxcbiAgICAgIDB4MWI4MDogMHgyMDIwMDgsXG4gICAgICAweDFjODA6IDB4MjAwMDA4LFxuICAgICAgMHgxZDgwOiAweDAsXG4gICAgICAweDFlODA6IDB4MTAwMDAwMDAsXG4gICAgICAweDFmODA6IDB4MTAwMDIwMDhcbiAgICB9LCB7XG4gICAgICAweDA6IDB4MTAwMDAwLFxuICAgICAgMHgxMDogMHgyMDAwNDAxLFxuICAgICAgMHgyMDogMHg0MDAsXG4gICAgICAweDMwOiAweDEwMDQwMSxcbiAgICAgIDB4NDA6IDB4MjEwMDQwMSxcbiAgICAgIDB4NTA6IDB4MCxcbiAgICAgIDB4NjA6IDB4MSxcbiAgICAgIDB4NzA6IDB4MjEwMDAwMSxcbiAgICAgIDB4ODA6IDB4MjAwMDQwMCxcbiAgICAgIDB4OTA6IDB4MTAwMDAxLFxuICAgICAgMHhhMDogMHgyMDAwMDAxLFxuICAgICAgMHhiMDogMHgyMTAwNDAwLFxuICAgICAgMHhjMDogMHgyMTAwMDAwLFxuICAgICAgMHhkMDogMHg0MDEsXG4gICAgICAweGUwOiAweDEwMDQwMCxcbiAgICAgIDB4ZjA6IDB4MjAwMDAwMCxcbiAgICAgIDB4ODogMHgyMTAwMDAxLFxuICAgICAgMHgxODogMHgwLFxuICAgICAgMHgyODogMHgyMDAwNDAxLFxuICAgICAgMHgzODogMHgyMTAwNDAwLFxuICAgICAgMHg0ODogMHgxMDAwMDAsXG4gICAgICAweDU4OiAweDIwMDAwMDEsXG4gICAgICAweDY4OiAweDIwMDAwMDAsXG4gICAgICAweDc4OiAweDQwMSxcbiAgICAgIDB4ODg6IDB4MTAwNDAxLFxuICAgICAgMHg5ODogMHgyMDAwNDAwLFxuICAgICAgMHhhODogMHgyMTAwMDAwLFxuICAgICAgMHhiODogMHgxMDAwMDEsXG4gICAgICAweGM4OiAweDQwMCxcbiAgICAgIDB4ZDg6IDB4MjEwMDQwMSxcbiAgICAgIDB4ZTg6IDB4MSxcbiAgICAgIDB4Zjg6IDB4MTAwNDAwLFxuICAgICAgMHgxMDA6IDB4MjAwMDAwMCxcbiAgICAgIDB4MTEwOiAweDEwMDAwMCxcbiAgICAgIDB4MTIwOiAweDIwMDA0MDEsXG4gICAgICAweDEzMDogMHgyMTAwMDAxLFxuICAgICAgMHgxNDA6IDB4MTAwMDAxLFxuICAgICAgMHgxNTA6IDB4MjAwMDQwMCxcbiAgICAgIDB4MTYwOiAweDIxMDA0MDAsXG4gICAgICAweDE3MDogMHgxMDA0MDEsXG4gICAgICAweDE4MDogMHg0MDEsXG4gICAgICAweDE5MDogMHgyMTAwNDAxLFxuICAgICAgMHgxYTA6IDB4MTAwNDAwLFxuICAgICAgMHgxYjA6IDB4MSxcbiAgICAgIDB4MWMwOiAweDAsXG4gICAgICAweDFkMDogMHgyMTAwMDAwLFxuICAgICAgMHgxZTA6IDB4MjAwMDAwMSxcbiAgICAgIDB4MWYwOiAweDQwMCxcbiAgICAgIDB4MTA4OiAweDEwMDQwMCxcbiAgICAgIDB4MTE4OiAweDIwMDA0MDEsXG4gICAgICAweDEyODogMHgyMTAwMDAxLFxuICAgICAgMHgxMzg6IDB4MSxcbiAgICAgIDB4MTQ4OiAweDIwMDAwMDAsXG4gICAgICAweDE1ODogMHgxMDAwMDAsXG4gICAgICAweDE2ODogMHg0MDEsXG4gICAgICAweDE3ODogMHgyMTAwNDAwLFxuICAgICAgMHgxODg6IDB4MjAwMDAwMSxcbiAgICAgIDB4MTk4OiAweDIxMDAwMDAsXG4gICAgICAweDFhODogMHgwLFxuICAgICAgMHgxYjg6IDB4MjEwMDQwMSxcbiAgICAgIDB4MWM4OiAweDEwMDQwMSxcbiAgICAgIDB4MWQ4OiAweDQwMCxcbiAgICAgIDB4MWU4OiAweDIwMDA0MDAsXG4gICAgICAweDFmODogMHgxMDAwMDFcbiAgICB9LCB7XG4gICAgICAweDA6IDB4ODAwMDgyMCxcbiAgICAgIDB4MTogMHgyMDAwMCxcbiAgICAgIDB4MjogMHg4MDAwMDAwLFxuICAgICAgMHgzOiAweDIwLFxuICAgICAgMHg0OiAweDIwMDIwLFxuICAgICAgMHg1OiAweDgwMjA4MjAsXG4gICAgICAweDY6IDB4ODAyMDgwMCxcbiAgICAgIDB4NzogMHg4MDAsXG4gICAgICAweDg6IDB4ODAyMDAwMCxcbiAgICAgIDB4OTogMHg4MDAwODAwLFxuICAgICAgMHhhOiAweDIwODAwLFxuICAgICAgMHhiOiAweDgwMjAwMjAsXG4gICAgICAweGM6IDB4ODIwLFxuICAgICAgMHhkOiAweDAsXG4gICAgICAweGU6IDB4ODAwMDAyMCxcbiAgICAgIDB4ZjogMHgyMDgyMCxcbiAgICAgIDB4ODAwMDAwMDA6IDB4ODAwLFxuICAgICAgMHg4MDAwMDAwMTogMHg4MDIwODIwLFxuICAgICAgMHg4MDAwMDAwMjogMHg4MDAwODIwLFxuICAgICAgMHg4MDAwMDAwMzogMHg4MDAwMDAwLFxuICAgICAgMHg4MDAwMDAwNDogMHg4MDIwMDAwLFxuICAgICAgMHg4MDAwMDAwNTogMHgyMDgwMCxcbiAgICAgIDB4ODAwMDAwMDY6IDB4MjA4MjAsXG4gICAgICAweDgwMDAwMDA3OiAweDIwLFxuICAgICAgMHg4MDAwMDAwODogMHg4MDAwMDIwLFxuICAgICAgMHg4MDAwMDAwOTogMHg4MjAsXG4gICAgICAweDgwMDAwMDBhOiAweDIwMDIwLFxuICAgICAgMHg4MDAwMDAwYjogMHg4MDIwODAwLFxuICAgICAgMHg4MDAwMDAwYzogMHgwLFxuICAgICAgMHg4MDAwMDAwZDogMHg4MDIwMDIwLFxuICAgICAgMHg4MDAwMDAwZTogMHg4MDAwODAwLFxuICAgICAgMHg4MDAwMDAwZjogMHgyMDAwMCxcbiAgICAgIDB4MTA6IDB4MjA4MjAsXG4gICAgICAweDExOiAweDgwMjA4MDAsXG4gICAgICAweDEyOiAweDIwLFxuICAgICAgMHgxMzogMHg4MDAsXG4gICAgICAweDE0OiAweDgwMDA4MDAsXG4gICAgICAweDE1OiAweDgwMDAwMjAsXG4gICAgICAweDE2OiAweDgwMjAwMjAsXG4gICAgICAweDE3OiAweDIwMDAwLFxuICAgICAgMHgxODogMHgwLFxuICAgICAgMHgxOTogMHgyMDAyMCxcbiAgICAgIDB4MWE6IDB4ODAyMDAwMCxcbiAgICAgIDB4MWI6IDB4ODAwMDgyMCxcbiAgICAgIDB4MWM6IDB4ODAyMDgyMCxcbiAgICAgIDB4MWQ6IDB4MjA4MDAsXG4gICAgICAweDFlOiAweDgyMCxcbiAgICAgIDB4MWY6IDB4ODAwMDAwMCxcbiAgICAgIDB4ODAwMDAwMTA6IDB4MjAwMDAsXG4gICAgICAweDgwMDAwMDExOiAweDgwMCxcbiAgICAgIDB4ODAwMDAwMTI6IDB4ODAyMDAyMCxcbiAgICAgIDB4ODAwMDAwMTM6IDB4MjA4MjAsXG4gICAgICAweDgwMDAwMDE0OiAweDIwLFxuICAgICAgMHg4MDAwMDAxNTogMHg4MDIwMDAwLFxuICAgICAgMHg4MDAwMDAxNjogMHg4MDAwMDAwLFxuICAgICAgMHg4MDAwMDAxNzogMHg4MDAwODIwLFxuICAgICAgMHg4MDAwMDAxODogMHg4MDIwODIwLFxuICAgICAgMHg4MDAwMDAxOTogMHg4MDAwMDIwLFxuICAgICAgMHg4MDAwMDAxYTogMHg4MDAwODAwLFxuICAgICAgMHg4MDAwMDAxYjogMHgwLFxuICAgICAgMHg4MDAwMDAxYzogMHgyMDgwMCxcbiAgICAgIDB4ODAwMDAwMWQ6IDB4ODIwLFxuICAgICAgMHg4MDAwMDAxZTogMHgyMDAyMCxcbiAgICAgIDB4ODAwMDAwMWY6IDB4ODAyMDgwMFxuICAgIH1dOyAvLyBNYXNrcyB0aGF0IHNlbGVjdCB0aGUgU0JPWCBpbnB1dFxuXG4gICAgdmFyIFNCT1hfTUFTSyA9IFsweGY4MDAwMDAxLCAweDFmODAwMDAwLCAweDAxZjgwMDAwLCAweDAwMWY4MDAwLCAweDAwMDFmODAwLCAweDAwMDAxZjgwLCAweDAwMDAwMWY4LCAweDgwMDAwMDFmXTtcbiAgICAvKipcbiAgICAgKiBERVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cbiAgICAgKi9cblxuICAgIHZhciBERVMgPSBDX2FsZ28uREVTID0gQmxvY2tDaXBoZXIuZXh0ZW5kKHtcbiAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiBfZG9SZXNldCgpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG4gICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3JkczsgLy8gU2VsZWN0IDU2IGJpdHMgYWNjb3JkaW5nIHRvIFBDMVxuXG4gICAgICAgIHZhciBrZXlCaXRzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1NjsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleUJpdFBvcyA9IFBDMVtpXSAtIDE7XG4gICAgICAgICAga2V5Qml0c1tpXSA9IGtleVdvcmRzW2tleUJpdFBvcyA+Pj4gNV0gPj4+IDMxIC0ga2V5Qml0UG9zICUgMzIgJiAxO1xuICAgICAgICB9IC8vIEFzc2VtYmxlIDE2IHN1YmtleXNcblxuXG4gICAgICAgIHZhciBzdWJLZXlzID0gdGhpcy5fc3ViS2V5cyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIG5TdWJLZXkgPSAwOyBuU3ViS2V5IDwgMTY7IG5TdWJLZXkrKykge1xuICAgICAgICAgIC8vIENyZWF0ZSBzdWJrZXlcbiAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tuU3ViS2V5XSA9IFtdOyAvLyBTaG9ydGN1dFxuXG4gICAgICAgICAgdmFyIGJpdFNoaWZ0ID0gQklUX1NISUZUU1tuU3ViS2V5XTsgLy8gU2VsZWN0IDQ4IGJpdHMgYWNjb3JkaW5nIHRvIFBDMlxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgICAgICAgICAvLyBTZWxlY3QgZnJvbSB0aGUgbGVmdCAyOCBrZXkgYml0c1xuICAgICAgICAgICAgc3ViS2V5W2kgLyA2IHwgMF0gfD0ga2V5Qml0c1soUEMyW2ldIC0gMSArIGJpdFNoaWZ0KSAlIDI4XSA8PCAzMSAtIGkgJSA2OyAvLyBTZWxlY3QgZnJvbSB0aGUgcmlnaHQgMjgga2V5IGJpdHNcblxuICAgICAgICAgICAgc3ViS2V5WzQgKyAoaSAvIDYgfCAwKV0gfD0ga2V5Qml0c1syOCArIChQQzJbaSArIDI0XSAtIDEgKyBiaXRTaGlmdCkgJSAyOF0gPDwgMzEgLSBpICUgNjtcbiAgICAgICAgICB9IC8vIFNpbmNlIGVhY2ggc3Via2V5IGlzIGFwcGxpZWQgdG8gYW4gZXhwYW5kZWQgMzItYml0IGlucHV0LFxuICAgICAgICAgIC8vIHRoZSBzdWJrZXkgY2FuIGJlIGJyb2tlbiBpbnRvIDggdmFsdWVzIHNjYWxlZCB0byAzMi1iaXRzLFxuICAgICAgICAgIC8vIHdoaWNoIGFsbG93cyB0aGUga2V5IHRvIGJlIHVzZWQgd2l0aG91dCBleHBhbnNpb25cblxuXG4gICAgICAgICAgc3ViS2V5WzBdID0gc3ViS2V5WzBdIDw8IDEgfCBzdWJLZXlbMF0gPj4+IDMxO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIHN1YktleVtpXSA9IHN1YktleVtpXSA+Pj4gKGkgLSAxKSAqIDQgKyAzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN1YktleVs3XSA9IHN1YktleVs3XSA8PCA1IHwgc3ViS2V5WzddID4+PiAyNztcbiAgICAgICAgfSAvLyBDb21wdXRlIGludmVyc2Ugc3Via2V5c1xuXG5cbiAgICAgICAgdmFyIGludlN1YktleXMgPSB0aGlzLl9pbnZTdWJLZXlzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICAgICAgaW52U3ViS2V5c1tpXSA9IHN1YktleXNbMTUgLSBpXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gZW5jcnlwdEJsb2NrKE0sIG9mZnNldCkge1xuICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9zdWJLZXlzKTtcbiAgICAgIH0sXG4gICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIGRlY3J5cHRCbG9jayhNLCBvZmZzZXQpIHtcbiAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52U3ViS2V5cyk7XG4gICAgICB9LFxuICAgICAgX2RvQ3J5cHRCbG9jazogZnVuY3Rpb24gX2RvQ3J5cHRCbG9jayhNLCBvZmZzZXQsIHN1YktleXMpIHtcbiAgICAgICAgLy8gR2V0IGlucHV0XG4gICAgICAgIHRoaXMuX2xCbG9jayA9IE1bb2Zmc2V0XTtcbiAgICAgICAgdGhpcy5fckJsb2NrID0gTVtvZmZzZXQgKyAxXTsgLy8gSW5pdGlhbCBwZXJtdXRhdGlvblxuXG4gICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCA0LCAweDBmMGYwZjBmKTtcbiAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDE2LCAweDAwMDBmZmZmKTtcbiAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDIsIDB4MzMzMzMzMzMpO1xuICAgICAgICBleGNoYW5nZVJMLmNhbGwodGhpcywgOCwgMHgwMGZmMDBmZik7XG4gICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxLCAweDU1NTU1NTU1KTsgLy8gUm91bmRzXG5cbiAgICAgICAgZm9yICh2YXIgcm91bmQgPSAwOyByb3VuZCA8IDE2OyByb3VuZCsrKSB7XG4gICAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgICAgdmFyIHN1YktleSA9IHN1YktleXNbcm91bmRdO1xuICAgICAgICAgIHZhciBsQmxvY2sgPSB0aGlzLl9sQmxvY2s7XG4gICAgICAgICAgdmFyIHJCbG9jayA9IHRoaXMuX3JCbG9jazsgLy8gRmVpc3RlbCBmdW5jdGlvblxuXG4gICAgICAgICAgdmFyIGYgPSAwO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgICAgIGYgfD0gU0JPWF9QW2ldWygockJsb2NrIF4gc3ViS2V5W2ldKSAmIFNCT1hfTUFTS1tpXSkgPj4+IDBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xCbG9jayA9IHJCbG9jaztcbiAgICAgICAgICB0aGlzLl9yQmxvY2sgPSBsQmxvY2sgXiBmO1xuICAgICAgICB9IC8vIFVuZG8gc3dhcCBmcm9tIGxhc3Qgcm91bmRcblxuXG4gICAgICAgIHZhciB0ID0gdGhpcy5fbEJsb2NrO1xuICAgICAgICB0aGlzLl9sQmxvY2sgPSB0aGlzLl9yQmxvY2s7XG4gICAgICAgIHRoaXMuX3JCbG9jayA9IHQ7IC8vIEZpbmFsIHBlcm11dGF0aW9uXG5cbiAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDEsIDB4NTU1NTU1NTUpO1xuICAgICAgICBleGNoYW5nZVJMLmNhbGwodGhpcywgOCwgMHgwMGZmMDBmZik7XG4gICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCAyLCAweDMzMzMzMzMzKTtcbiAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDE2LCAweDAwMDBmZmZmKTtcbiAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDQsIDB4MGYwZjBmMGYpOyAvLyBTZXQgb3V0cHV0XG5cbiAgICAgICAgTVtvZmZzZXRdID0gdGhpcy5fbEJsb2NrO1xuICAgICAgICBNW29mZnNldCArIDFdID0gdGhpcy5fckJsb2NrO1xuICAgICAgfSxcbiAgICAgIGtleVNpemU6IDY0IC8gMzIsXG4gICAgICBpdlNpemU6IDY0IC8gMzIsXG4gICAgICBibG9ja1NpemU6IDY0IC8gMzJcbiAgICB9KTsgLy8gU3dhcCBiaXRzIGFjcm9zcyB0aGUgbGVmdCBhbmQgcmlnaHQgd29yZHNcblxuICAgIGZ1bmN0aW9uIGV4Y2hhbmdlTFIob2Zmc2V0LCBtYXNrKSB7XG4gICAgICB2YXIgdCA9ICh0aGlzLl9sQmxvY2sgPj4+IG9mZnNldCBeIHRoaXMuX3JCbG9jaykgJiBtYXNrO1xuICAgICAgdGhpcy5fckJsb2NrIF49IHQ7XG4gICAgICB0aGlzLl9sQmxvY2sgXj0gdCA8PCBvZmZzZXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhjaGFuZ2VSTChvZmZzZXQsIG1hc2spIHtcbiAgICAgIHZhciB0ID0gKHRoaXMuX3JCbG9jayA+Pj4gb2Zmc2V0IF4gdGhpcy5fbEJsb2NrKSAmIG1hc2s7XG4gICAgICB0aGlzLl9sQmxvY2sgXj0gdDtcbiAgICAgIHRoaXMuX3JCbG9jayBePSB0IDw8IG9mZnNldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLkRFUy5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcbiAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5ERVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG4gICAgICovXG5cblxuICAgIEMuREVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihERVMpO1xuICAgIC8qKlxuICAgICAqIFRyaXBsZS1ERVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cbiAgICAgKi9cblxuICAgIHZhciBUcmlwbGVERVMgPSBDX2FsZ28uVHJpcGxlREVTID0gQmxvY2tDaXBoZXIuZXh0ZW5kKHtcbiAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiBfZG9SZXNldCgpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG4gICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3JkczsgLy8gTWFrZSBzdXJlIHRoZSBrZXkgbGVuZ3RoIGlzIHZhbGlkICg2NCwgMTI4IG9yID49IDE5MiBiaXQpXG5cbiAgICAgICAgaWYgKGtleVdvcmRzLmxlbmd0aCAhPT0gMiAmJiBrZXlXb3Jkcy5sZW5ndGggIT09IDQgJiYga2V5V29yZHMubGVuZ3RoIDwgNikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgbGVuZ3RoIC0gM0RFUyByZXF1aXJlcyB0aGUga2V5IGxlbmd0aCB0byBiZSA2NCwgMTI4LCAxOTIgb3IgPjE5Mi4nKTtcbiAgICAgICAgfSAvLyBFeHRlbmQgdGhlIGtleSBhY2NvcmRpbmcgdG8gdGhlIGtleWluZyBvcHRpb25zIGRlZmluZWQgaW4gM0RFUyBzdGFuZGFyZFxuXG5cbiAgICAgICAgdmFyIGtleTEgPSBrZXlXb3Jkcy5zbGljZSgwLCAyKTtcbiAgICAgICAgdmFyIGtleTIgPSBrZXlXb3Jkcy5sZW5ndGggPCA0ID8ga2V5V29yZHMuc2xpY2UoMCwgMikgOiBrZXlXb3Jkcy5zbGljZSgyLCA0KTtcbiAgICAgICAgdmFyIGtleTMgPSBrZXlXb3Jkcy5sZW5ndGggPCA2ID8ga2V5V29yZHMuc2xpY2UoMCwgMikgOiBrZXlXb3Jkcy5zbGljZSg0LCA2KTsgLy8gQ3JlYXRlIERFUyBpbnN0YW5jZXNcblxuICAgICAgICB0aGlzLl9kZXMxID0gREVTLmNyZWF0ZUVuY3J5cHRvcihXb3JkQXJyYXkuY3JlYXRlKGtleTEpKTtcbiAgICAgICAgdGhpcy5fZGVzMiA9IERFUy5jcmVhdGVFbmNyeXB0b3IoV29yZEFycmF5LmNyZWF0ZShrZXkyKSk7XG4gICAgICAgIHRoaXMuX2RlczMgPSBERVMuY3JlYXRlRW5jcnlwdG9yKFdvcmRBcnJheS5jcmVhdGUoa2V5MykpO1xuICAgICAgfSxcbiAgICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gZW5jcnlwdEJsb2NrKE0sIG9mZnNldCkge1xuICAgICAgICB0aGlzLl9kZXMxLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXG4gICAgICAgIHRoaXMuX2RlczIuZGVjcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cbiAgICAgICAgdGhpcy5fZGVzMy5lbmNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcbiAgICAgIH0sXG4gICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIGRlY3J5cHRCbG9jayhNLCBvZmZzZXQpIHtcbiAgICAgICAgdGhpcy5fZGVzMy5kZWNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblxuICAgICAgICB0aGlzLl9kZXMyLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXG4gICAgICAgIHRoaXMuX2RlczEuZGVjcnlwdEJsb2NrKE0sIG9mZnNldCk7XG4gICAgICB9LFxuICAgICAga2V5U2l6ZTogMTkyIC8gMzIsXG4gICAgICBpdlNpemU6IDY0IC8gMzIsXG4gICAgICBibG9ja1NpemU6IDY0IC8gMzJcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuVHJpcGxlREVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcbiAgICAgKi9cblxuICAgIEMuVHJpcGxlREVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihUcmlwbGVERVMpO1xuICB9KSgpO1xuXG4gIHJldHVybiBDcnlwdG9KUy5UcmlwbGVERVM7XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI2MDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oNzA0Mik7XG5cbjtcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gIGlmICh0cnVlKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KF9fd2VicGFja19yZXF1aXJlX18oNzU3KSk7XG4gIH0gZWxzZSB7fVxufSkodm9pZCAwLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcbiAgKGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcbiAgICAvLyBTaG9ydGN1dHNcbiAgICB2YXIgQyA9IENyeXB0b0pTO1xuICAgIHZhciBDX2xpYiA9IEMubGliO1xuICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcbiAgICB2YXIgWDMyV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuICAgIC8qKlxuICAgICAqIHg2NCBuYW1lc3BhY2UuXG4gICAgICovXG5cbiAgICB2YXIgQ194NjQgPSBDLng2NCA9IHt9O1xuICAgIC8qKlxuICAgICAqIEEgNjQtYml0IHdvcmQuXG4gICAgICovXG5cbiAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQgPSBCYXNlLmV4dGVuZCh7XG4gICAgICAvKipcbiAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCA2NC1iaXQgd29yZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gaGlnaCBUaGUgaGlnaCAzMiBiaXRzLlxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxvdyBUaGUgbG93IDMyIGJpdHMuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIHg2NFdvcmQgPSBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgwMDAxMDIwMywgMHgwNDA1MDYwNyk7XG4gICAgICAgKi9cbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoaGlnaCwgbG93KSB7XG4gICAgICAgIHRoaXMuaGlnaCA9IGhpZ2g7XG4gICAgICAgIHRoaXMubG93ID0gbG93O1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBCaXR3aXNlIE5PVHMgdGhpcyB3b3JkLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBuZWdhdGluZy5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgbmVnYXRlZCA9IHg2NFdvcmQubm90KCk7XG4gICAgICAgKi9cbiAgICAgIC8vIG5vdDogZnVuY3Rpb24gKCkge1xuICAgICAgLy8gdmFyIGhpZ2ggPSB+dGhpcy5oaWdoO1xuICAgICAgLy8gdmFyIGxvdyA9IH50aGlzLmxvdztcbiAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuICAgICAgLy8gfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBCaXR3aXNlIEFORHMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7WDY0V29yZH0gd29yZCBUaGUgeDY0LVdvcmQgdG8gQU5EIHdpdGggdGhpcyB3b3JkLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBBTkRpbmcuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGFuZGVkID0geDY0V29yZC5hbmQoYW5vdGhlclg2NFdvcmQpO1xuICAgICAgICovXG4gICAgICAvLyBhbmQ6IGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCAmIHdvcmQuaGlnaDtcbiAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyAmIHdvcmQubG93O1xuICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG4gICAgICAvLyB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIEJpdHdpc2UgT1JzIHRoaXMgd29yZCB3aXRoIHRoZSBwYXNzZWQgd29yZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIE9SIHdpdGggdGhpcyB3b3JkLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBPUmluZy5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgb3JlZCA9IHg2NFdvcmQub3IoYW5vdGhlclg2NFdvcmQpO1xuICAgICAgICovXG4gICAgICAvLyBvcjogZnVuY3Rpb24gKHdvcmQpIHtcbiAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoIHwgd29yZC5oaWdoO1xuICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IHwgd29yZC5sb3c7XG4gICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcbiAgICAgIC8vIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQml0d2lzZSBYT1JzIHRoaXMgd29yZCB3aXRoIHRoZSBwYXNzZWQgd29yZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIFhPUiB3aXRoIHRoaXMgd29yZC5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgWE9SaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciB4b3JlZCA9IHg2NFdvcmQueG9yKGFub3RoZXJYNjRXb3JkKTtcbiAgICAgICAqL1xuICAgICAgLy8geG9yOiBmdW5jdGlvbiAod29yZCkge1xuICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggXiB3b3JkLmhpZ2g7XG4gICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgXiB3b3JkLmxvdztcbiAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuICAgICAgLy8gfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBTaGlmdHMgdGhpcyB3b3JkIG4gYml0cyB0byB0aGUgbGVmdC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciBzaGlmdGVkID0geDY0V29yZC5zaGlmdEwoMjUpO1xuICAgICAgICovXG4gICAgICAvLyBzaGlmdEw6IGZ1bmN0aW9uIChuKSB7XG4gICAgICAvLyBpZiAobiA8IDMyKSB7XG4gICAgICAvLyB2YXIgaGlnaCA9ICh0aGlzLmhpZ2ggPDwgbikgfCAodGhpcy5sb3cgPj4+ICgzMiAtIG4pKTtcbiAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyA8PCBuO1xuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5sb3cgPDwgKG4gLSAzMik7XG4gICAgICAvLyB2YXIgbG93ID0gMDtcbiAgICAgIC8vIH1cbiAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuICAgICAgLy8gfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBTaGlmdHMgdGhpcyB3b3JkIG4gYml0cyB0byB0aGUgcmlnaHQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBzaGlmdGluZy5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRSKDcpO1xuICAgICAgICovXG4gICAgICAvLyBzaGlmdFI6IGZ1bmN0aW9uIChuKSB7XG4gICAgICAvLyBpZiAobiA8IDMyKSB7XG4gICAgICAvLyB2YXIgbG93ID0gKHRoaXMubG93ID4+PiBuKSB8ICh0aGlzLmhpZ2ggPDwgKDMyIC0gbikpO1xuICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggPj4+IG47XG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gdmFyIGxvdyA9IHRoaXMuaGlnaCA+Pj4gKG4gLSAzMik7XG4gICAgICAvLyB2YXIgaGlnaCA9IDA7XG4gICAgICAvLyB9XG4gICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcbiAgICAgIC8vIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgYml0cyB0byByb3RhdGUuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHJvdGF0aW5nLlxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKlxuICAgICAgICogICAgIHZhciByb3RhdGVkID0geDY0V29yZC5yb3RMKDI1KTtcbiAgICAgICAqL1xuICAgICAgLy8gcm90TDogZnVuY3Rpb24gKG4pIHtcbiAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0TChuKS5vcih0aGlzLnNoaWZ0Uig2NCAtIG4pKTtcbiAgICAgIC8vIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSByaWdodC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gcm90YXRlLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciByb3RhdGluZy5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgcm90YXRlZCA9IHg2NFdvcmQucm90Uig3KTtcbiAgICAgICAqL1xuICAgICAgLy8gcm90UjogZnVuY3Rpb24gKG4pIHtcbiAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0UihuKS5vcih0aGlzLnNoaWZ0TCg2NCAtIG4pKTtcbiAgICAgIC8vIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQWRkcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBhZGQgd2l0aCB0aGlzIHdvcmQuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIGFkZGluZy5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgYWRkZWQgPSB4NjRXb3JkLmFkZChhbm90aGVyWDY0V29yZCk7XG4gICAgICAgKi9cbiAgICAgIC8vIGFkZDogZnVuY3Rpb24gKHdvcmQpIHtcbiAgICAgIC8vIHZhciBsb3cgPSAodGhpcy5sb3cgKyB3b3JkLmxvdykgfCAwO1xuICAgICAgLy8gdmFyIGNhcnJ5ID0gKGxvdyA+Pj4gMCkgPCAodGhpcy5sb3cgPj4+IDApID8gMSA6IDA7XG4gICAgICAvLyB2YXIgaGlnaCA9ICh0aGlzLmhpZ2ggKyB3b3JkLmhpZ2ggKyBjYXJyeSkgfCAwO1xuICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG4gICAgICAvLyB9XG5cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiA2NC1iaXQgd29yZHMuXG4gICAgICpcbiAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgQ3J5cHRvSlMueDY0LldvcmQgb2JqZWN0cy5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gc2lnQnl0ZXMgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGlzIHdvcmQgYXJyYXkuXG4gICAgICovXG5cbiAgICB2YXIgWDY0V29yZEFycmF5ID0gQ194NjQuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuICAgICAgLyoqXG4gICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0FycmF5fSB3b3JkcyAoT3B0aW9uYWwpIEFuIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gc2lnQnl0ZXMgKE9wdGlvbmFsKSBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoZSB3b3Jkcy5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMueDY0LldvcmRBcnJheS5jcmVhdGUoKTtcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKFtcbiAgICAgICAqICAgICAgICAgQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpLFxuICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgxODE5MWExYiwgMHgxYzFkMWUxZilcbiAgICAgICAqICAgICBdKTtcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKFtcbiAgICAgICAqICAgICAgICAgQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpLFxuICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgxODE5MWExYiwgMHgxYzFkMWUxZilcbiAgICAgICAqICAgICBdLCAxMCk7XG4gICAgICAgKi9cbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQod29yZHMsIHNpZ0J5dGVzKSB7XG4gICAgICAgIHdvcmRzID0gdGhpcy53b3JkcyA9IHdvcmRzIHx8IFtdO1xuXG4gICAgICAgIGlmIChzaWdCeXRlcyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHdvcmRzLmxlbmd0aCAqIDg7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQ29udmVydHMgdGhpcyA2NC1iaXQgd29yZCBhcnJheSB0byBhIDMyLWJpdCB3b3JkIGFycmF5LlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm4ge0NyeXB0b0pTLmxpYi5Xb3JkQXJyYXl9IFRoaXMgd29yZCBhcnJheSdzIGRhdGEgYXMgYSAzMi1iaXQgd29yZCBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICAgICB2YXIgeDMyV29yZEFycmF5ID0geDY0V29yZEFycmF5LnRvWDMyKCk7XG4gICAgICAgKi9cbiAgICAgIHRvWDMyOiBmdW5jdGlvbiB0b1gzMigpIHtcbiAgICAgICAgLy8gU2hvcnRjdXRzXG4gICAgICAgIHZhciB4NjRXb3JkcyA9IHRoaXMud29yZHM7XG4gICAgICAgIHZhciB4NjRXb3Jkc0xlbmd0aCA9IHg2NFdvcmRzLmxlbmd0aDsgLy8gQ29udmVydFxuXG4gICAgICAgIHZhciB4MzJXb3JkcyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeDY0V29yZHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciB4NjRXb3JkID0geDY0V29yZHNbaV07XG4gICAgICAgICAgeDMyV29yZHMucHVzaCh4NjRXb3JkLmhpZ2gpO1xuICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5sb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFgzMldvcmRBcnJheS5jcmVhdGUoeDMyV29yZHMsIHRoaXMuc2lnQnl0ZXMpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIHdvcmQgYXJyYXkuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7WDY0V29yZEFycmF5fSBUaGUgY2xvbmUuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgICAgdmFyIGNsb25lID0geDY0V29yZEFycmF5LmNsb25lKCk7XG4gICAgICAgKi9cbiAgICAgIGNsb25lOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpOyAvLyBDbG9uZSBcIndvcmRzXCIgYXJyYXlcblxuICAgICAgICB2YXIgd29yZHMgPSBjbG9uZS53b3JkcyA9IHRoaXMud29yZHMuc2xpY2UoMCk7IC8vIENsb25lIGVhY2ggWDY0V29yZCBvYmplY3RcblxuICAgICAgICB2YXIgd29yZHNMZW5ndGggPSB3b3Jkcy5sZW5ndGg7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgd29yZHNbaV0gPSB3b3Jkc1tpXS5jbG9uZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgfVxuICAgIH0pO1xuICB9KSgpO1xuXG4gIHJldHVybiBDcnlwdG9KUztcbn0pO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTgxMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0NDMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM2ODApO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM3MDYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI3MDMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ4OSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDc0Nyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oODMwOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oODY3NCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMTAzOCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDkxNik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDcyMyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjE2NSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNjk5Mik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMTUzOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oODc4Myk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzk0OCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjUyNik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMTgxNyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzA0Mik7XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UobywgYWxsb3dBcnJheUxpa2UpIHsgdmFyIGl0ID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0gfHwgb1tcIkBAaXRlcmF0b3JcIl07IGlmIChpdCkgcmV0dXJuIChpdCA9IGl0LmNhbGwobykpLm5leHQuYmluZChpdCk7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTsgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTsgfTsgfSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkgeyBcInVzZSBzdHJpY3RcIjsgLyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqLyBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHsgcmV0dXJuIGV4cG9ydHM7IH07IHZhciBleHBvcnRzID0ge30sIE9wID0gT2JqZWN0LnByb3RvdHlwZSwgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHksICRTeW1ib2wgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LCBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIiwgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiOyBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7IHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pLCBvYmpba2V5XTsgfSB0cnkgeyBkZWZpbmUoe30sIFwiXCIpOyB9IGNhdGNoIChlcnIpIHsgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkgeyByZXR1cm4gb2JqW2tleV0gPSB2YWx1ZTsgfTsgfSBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7IHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yLCBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSksIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7IHJldHVybiBnZW5lcmF0b3IuX2ludm9rZSA9IGZ1bmN0aW9uIChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7IHZhciBzdGF0ZSA9IFwic3VzcGVuZGVkU3RhcnRcIjsgcmV0dXJuIGZ1bmN0aW9uIChtZXRob2QsIGFyZykgeyBpZiAoXCJleGVjdXRpbmdcIiA9PT0gc3RhdGUpIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7IGlmIChcImNvbXBsZXRlZFwiID09PSBzdGF0ZSkgeyBpZiAoXCJ0aHJvd1wiID09PSBtZXRob2QpIHRocm93IGFyZzsgcmV0dXJuIGRvbmVSZXN1bHQoKTsgfSBmb3IgKGNvbnRleHQubWV0aG9kID0gbWV0aG9kLCBjb250ZXh0LmFyZyA9IGFyZzs7KSB7IHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7IGlmIChkZWxlZ2F0ZSkgeyB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTsgaWYgKGRlbGVnYXRlUmVzdWx0KSB7IGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7IHJldHVybiBkZWxlZ2F0ZVJlc3VsdDsgfSB9IGlmIChcIm5leHRcIiA9PT0gY29udGV4dC5tZXRob2QpIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7IGlmIChcInN1c3BlbmRlZFN0YXJ0XCIgPT09IHN0YXRlKSB0aHJvdyBzdGF0ZSA9IFwiY29tcGxldGVkXCIsIGNvbnRleHQuYXJnOyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTsgfSBlbHNlIFwicmV0dXJuXCIgPT09IGNvbnRleHQubWV0aG9kICYmIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTsgc3RhdGUgPSBcImV4ZWN1dGluZ1wiOyB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7IGlmIChcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSkgeyBpZiAoc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBcImNvbXBsZXRlZFwiIDogXCJzdXNwZW5kZWRZaWVsZFwiLCByZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTsgcmV0dXJuIHsgdmFsdWU6IHJlY29yZC5hcmcsIGRvbmU6IGNvbnRleHQuZG9uZSB9OyB9IFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUgJiYgKHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZyk7IH0gfTsgfShpbm5lckZuLCBzZWxmLCBjb250ZXh0KSwgZ2VuZXJhdG9yOyB9IGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykgeyB0cnkgeyByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07IH0gY2F0Y2ggKGVycikgeyByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07IH0gfSBleHBvcnRzLndyYXAgPSB3cmFwOyB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9OyBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fSBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9IGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge30gdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307IGRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pOyB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpOyBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJiBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiYgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSAmJiAoSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSk7IHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTsgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkgeyBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7IGRlZmluZShwcm90b3R5cGUsIG1ldGhvZCwgZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTsgfSk7IH0pOyB9IGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkgeyBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkgeyB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTsgaWYgKFwidGhyb3dcIiAhPT0gcmVjb3JkLnR5cGUpIHsgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmcsIHZhbHVlID0gcmVzdWx0LnZhbHVlOyByZXR1cm4gdmFsdWUgJiYgXCJvYmplY3RcIiA9PSB0eXBlb2YgdmFsdWUgJiYgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSA/IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbiAodmFsdWUpIHsgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTsgfSwgZnVuY3Rpb24gKGVycikgeyBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7IH0pIDogUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbiAodW53cmFwcGVkKSB7IHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZCwgcmVzb2x2ZShyZXN1bHQpOyB9LCBmdW5jdGlvbiAoZXJyb3IpIHsgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpOyB9KTsgfSByZWplY3QocmVjb3JkLmFyZyk7IH0gdmFyIHByZXZpb3VzUHJvbWlzZTsgdGhpcy5faW52b2tlID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7IGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkgeyByZXR1cm4gbmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpOyB9KTsgfSByZXR1cm4gcHJldmlvdXNQcm9taXNlID0gcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7IH07IH0gZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkgeyB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdOyBpZiAodW5kZWZpbmVkID09PSBtZXRob2QpIHsgaWYgKGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7IGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4gJiYgKGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQsIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSkgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7IGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpOyB9IHJldHVybiBDb250aW51ZVNlbnRpbmVsOyB9IHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7IGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSByZXR1cm4gY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZywgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWw7IHZhciBpbmZvID0gcmVjb3JkLmFyZzsgcmV0dXJuIGluZm8gPyBpbmZvLmRvbmUgPyAoY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWUsIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IGNvbnRleHQubWV0aG9kICYmIChjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKSA6IGluZm8gOiAoY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgQ29udGludWVTZW50aW5lbCk7IH0gZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHsgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTsgMSBpbiBsb2NzICYmIChlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV0pLCAyIGluIGxvY3MgJiYgKGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdLCBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7IH0gZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkgeyB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTsgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgcmVjb3JkLmFyZywgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDsgfSBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7IHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV0sIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7IH0gZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7IGlmIChpdGVyYWJsZSkgeyB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07IGlmIChpdGVyYXRvck1ldGhvZCkgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpOyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBpdGVyYWJsZS5uZXh0KSByZXR1cm4gaXRlcmFibGU7IGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkgeyB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHsgZm9yICg7ICsraSA8IGl0ZXJhYmxlLmxlbmd0aDspIHsgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkgcmV0dXJuIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXSwgbmV4dC5kb25lID0gITEsIG5leHQ7IH0gcmV0dXJuIG5leHQudmFsdWUgPSB1bmRlZmluZWQsIG5leHQuZG9uZSA9ICEwLCBuZXh0OyB9OyByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDsgfSB9IHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTsgfSBmdW5jdGlvbiBkb25lUmVzdWx0KCkgeyByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiAhMCB9OyB9IHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKEdwLCBcImNvbnN0cnVjdG9yXCIsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSwgZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIEdlbmVyYXRvckZ1bmN0aW9uKSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpLCBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbiAoZ2VuRnVuKSB7IHZhciBjdG9yID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBnZW5GdW4gJiYgZ2VuRnVuLmNvbnN0cnVjdG9yOyByZXR1cm4gISFjdG9yICYmIChjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkpOyB9LCBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7IHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAoZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmUoZ2VuRnVuLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKSwgZ2VuRnVuOyB9LCBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24gKGFyZykgeyByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTsgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBhc3luY0l0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSwgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHsgdm9pZCAwID09PSBQcm9taXNlSW1wbCAmJiAoUHJvbWlzZUltcGwgPSBQcm9taXNlKTsgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSwgUHJvbWlzZUltcGwpOyByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTsgfSk7IH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCksIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSwgZGVmaW5lKEdwLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7IH0pLCBleHBvcnRzLmtleXMgPSBmdW5jdGlvbiAob2JqZWN0KSB7IHZhciBrZXlzID0gW107IGZvciAodmFyIGtleSBpbiBvYmplY3QpIHsga2V5cy5wdXNoKGtleSk7IH0gcmV0dXJuIGtleXMucmV2ZXJzZSgpLCBmdW5jdGlvbiBuZXh0KCkgeyBmb3IgKDsga2V5cy5sZW5ndGg7KSB7IHZhciBrZXkgPSBrZXlzLnBvcCgpOyBpZiAoa2V5IGluIG9iamVjdCkgcmV0dXJuIG5leHQudmFsdWUgPSBrZXksIG5leHQuZG9uZSA9ICExLCBuZXh0OyB9IHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDsgfTsgfSwgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0geyBjb25zdHJ1Y3RvcjogQ29udGV4dCwgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KHNraXBUZW1wUmVzZXQpIHsgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB1bmRlZmluZWQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhc2tpcFRlbXBSZXNldCkgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7IFwidFwiID09PSBuYW1lLmNoYXJBdCgwKSAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpICYmICh0aGlzW25hbWVdID0gdW5kZWZpbmVkKTsgfSB9LCBzdG9wOiBmdW5jdGlvbiBzdG9wKCkgeyB0aGlzLmRvbmUgPSAhMDsgdmFyIHJvb3RSZWNvcmQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjsgaWYgKFwidGhyb3dcIiA9PT0gcm9vdFJlY29yZC50eXBlKSB0aHJvdyByb290UmVjb3JkLmFyZzsgcmV0dXJuIHRoaXMucnZhbDsgfSwgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGV4Y2VwdGlvbikgeyBpZiAodGhpcy5kb25lKSB0aHJvdyBleGNlcHRpb247IHZhciBjb250ZXh0ID0gdGhpczsgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7IHJldHVybiByZWNvcmQudHlwZSA9IFwidGhyb3dcIiwgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbiwgY29udGV4dC5uZXh0ID0gbG9jLCBjYXVnaHQgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgISFjYXVnaHQ7IH0gZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV0sIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247IGlmIChcInJvb3RcIiA9PT0gZW50cnkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpOyBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikgeyB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKSwgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7IGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7IGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApOyBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTsgfSBlbHNlIGlmIChoYXNDYXRjaCkgeyBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsICEwKTsgfSBlbHNlIHsgaWYgKCFoYXNGaW5hbGx5KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTsgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7IH0gfSB9IH0sIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykgeyBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7IHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTsgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7IHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTsgYnJlYWs7IH0gfSBmaW5hbGx5RW50cnkgJiYgKFwiYnJlYWtcIiA9PT0gdHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHR5cGUpICYmIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYyAmJiAoZmluYWxseUVudHJ5ID0gbnVsbCk7IHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9OyByZXR1cm4gcmVjb3JkLnR5cGUgPSB0eXBlLCByZWNvcmQuYXJnID0gYXJnLCBmaW5hbGx5RW50cnkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MsIENvbnRpbnVlU2VudGluZWwpIDogdGhpcy5jb21wbGV0ZShyZWNvcmQpOyB9LCBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykgeyBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgdGhyb3cgcmVjb3JkLmFyZzsgcmV0dXJuIFwiYnJlYWtcIiA9PT0gcmVjb3JkLnR5cGUgfHwgXCJjb250aW51ZVwiID09PSByZWNvcmQudHlwZSA/IHRoaXMubmV4dCA9IHJlY29yZC5hcmcgOiBcInJldHVyblwiID09PSByZWNvcmQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSAmJiBhZnRlckxvYyAmJiAodGhpcy5uZXh0ID0gYWZ0ZXJMb2MpLCBDb250aW51ZVNlbnRpbmVsOyB9LCBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7IGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldOyBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykgcmV0dXJuIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpLCByZXNldFRyeUVudHJ5KGVudHJ5KSwgQ29udGludWVTZW50aW5lbDsgfSB9LCBjYXRjaDogZnVuY3Rpb24gX2NhdGNoKHRyeUxvYykgeyBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7IHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTsgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7IHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uOyBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgeyB2YXIgdGhyb3duID0gcmVjb3JkLmFyZzsgcmVzZXRUcnlFbnRyeShlbnRyeSk7IH0gcmV0dXJuIHRocm93bjsgfSB9IHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTsgfSwgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykgeyByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHsgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsIG5leHRMb2M6IG5leHRMb2MgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHVuZGVmaW5lZCksIENvbnRpbnVlU2VudGluZWw7IH0gfSwgZXhwb3J0czsgfVxuXG52YXIgSU5JVElBTF9TVEFURSA9IDE7XG52YXIgRkFJTF9TVEFURSA9IDA7XG4vKipcbiAqIEEgU3RhdGVNYWNoaW5lIHJlcHJlc2VudHMgYSBkZXRlcm1pbmlzdGljIGZpbml0ZSBhdXRvbWF0b24uXG4gKiBJdCBjYW4gcGVyZm9ybSBtYXRjaGVzIG92ZXIgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMsIHNpbWlsYXIgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKi9cblxudmFyIFN0YXRlTWFjaGluZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0YXRlTWFjaGluZShkZmEpIHtcbiAgICB0aGlzLnN0YXRlVGFibGUgPSBkZmEuc3RhdGVUYWJsZTtcbiAgICB0aGlzLmFjY2VwdGluZyA9IGRmYS5hY2NlcHRpbmc7XG4gICAgdGhpcy50YWdzID0gZGZhLnRhZ3M7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gaXRlcmFibGUgb2JqZWN0IHRoYXQgeWllbGRzIHBhdHRlcm4gbWF0Y2hlcyBvdmVyIHRoZSBpbnB1dCBzZXF1ZW5jZS5cbiAgICogTWF0Y2hlcyBhcmUgb2YgdGhlIGZvcm0gW3N0YXJ0SW5kZXgsIGVuZEluZGV4LCB0YWdzXS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gU3RhdGVNYWNoaW5lLnByb3RvdHlwZTtcblxuICBfcHJvdG8ubWF0Y2ggPSBmdW5jdGlvbiBtYXRjaChzdHIpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gX3JlZiA9IHt9LCBfcmVmW1N5bWJvbC5pdGVyYXRvcl0gPSAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHtcbiAgICAgIHZhciBzdGF0ZSwgc3RhcnRSdW4sIGxhc3RBY2NlcHRpbmcsIGxhc3RTdGF0ZSwgcCwgYztcbiAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgc3RhdGUgPSBJTklUSUFMX1NUQVRFO1xuICAgICAgICAgICAgICBzdGFydFJ1biA9IG51bGw7XG4gICAgICAgICAgICAgIGxhc3RBY2NlcHRpbmcgPSBudWxsO1xuICAgICAgICAgICAgICBsYXN0U3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICBwID0gMDtcblxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBpZiAoIShwIDwgc3RyLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjID0gc3RyW3BdO1xuICAgICAgICAgICAgICBsYXN0U3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgc3RhdGUgPSBzZWxmLnN0YXRlVGFibGVbc3RhdGVdW2NdO1xuXG4gICAgICAgICAgICAgIGlmICghKHN0YXRlID09PSBGQUlMX1NUQVRFKSkge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghKHN0YXJ0UnVuICE9IG51bGwgJiYgbGFzdEFjY2VwdGluZyAhPSBudWxsICYmIGxhc3RBY2NlcHRpbmcgPj0gc3RhcnRSdW4pKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEzO1xuICAgICAgICAgICAgICByZXR1cm4gW3N0YXJ0UnVuLCBsYXN0QWNjZXB0aW5nLCBzZWxmLnRhZ3NbbGFzdFN0YXRlXV07XG5cbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBzdGF0ZSBhcyBpZiB3ZSBzdGFydGVkIG92ZXIgZnJvbSB0aGUgaW5pdGlhbCBzdGF0ZVxuICAgICAgICAgICAgICBzdGF0ZSA9IHNlbGYuc3RhdGVUYWJsZVtJTklUSUFMX1NUQVRFXVtjXTtcbiAgICAgICAgICAgICAgc3RhcnRSdW4gPSBudWxsO1xuXG4gICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAvLyBzdGFydCBhIHJ1biBpZiBub3QgaW4gdGhlIGZhaWx1cmUgc3RhdGVcbiAgICAgICAgICAgICAgaWYgKHN0YXRlICE9PSBGQUlMX1NUQVRFICYmIHN0YXJ0UnVuID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdGFydFJ1biA9IHA7XG4gICAgICAgICAgICAgIH0gLy8gaWYgYWNjZXB0aW5nLCBtYXJrIHRoZSBwb3RlbnRpYWwgbWF0Y2ggZW5kXG5cblxuICAgICAgICAgICAgICBpZiAoc2VsZi5hY2NlcHRpbmdbc3RhdGVdKSB7XG4gICAgICAgICAgICAgICAgbGFzdEFjY2VwdGluZyA9IHA7XG4gICAgICAgICAgICAgIH0gLy8gcmVzZXQgdGhlIHN0YXRlIHRvIHRoZSBpbml0aWFsIHN0YXRlIGlmIHdlIGdldCBpbnRvIHRoZSBmYWlsdXJlIHN0YXRlXG5cblxuICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09IEZBSUxfU1RBVEUpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IElOSVRJQUxfU1RBVEU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgICAgcCsrO1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgIGlmICghKHN0YXJ0UnVuICE9IG51bGwgJiYgbGFzdEFjY2VwdGluZyAhPSBudWxsICYmIGxhc3RBY2NlcHRpbmcgPj0gc3RhcnRSdW4pKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI0O1xuICAgICAgICAgICAgICByZXR1cm4gW3N0YXJ0UnVuLCBsYXN0QWNjZXB0aW5nLCBzZWxmLnRhZ3Nbc3RhdGVdXTtcblxuICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIF9jYWxsZWUpO1xuICAgIH0pLCBfcmVmO1xuICB9XG4gIC8qKlxuICAgKiBGb3IgZWFjaCBtYXRjaCBvdmVyIHRoZSBpbnB1dCBzZXF1ZW5jZSwgYWN0aW9uIGZ1bmN0aW9ucyBtYXRjaGluZ1xuICAgKiB0aGUgdGFnIGRlZmluaXRpb25zIGluIHRoZSBpbnB1dCBwYXR0ZXJuIGFyZSBjYWxsZWQgd2l0aCB0aGUgc3RhcnRJbmRleCxcbiAgICogZW5kSW5kZXgsIGFuZCBzdWItbWF0Y2ggc2VxdWVuY2UuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmFwcGx5ID0gZnVuY3Rpb24gYXBwbHkoc3RyLCBhY3Rpb25zKSB7XG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLm1hdGNoKHN0cikpLCBfc3RlcDsgIShfc3RlcCA9IF9pdGVyYXRvcigpKS5kb25lOykge1xuICAgICAgdmFyIF9zdGVwJHZhbHVlID0gX3N0ZXAudmFsdWUsXG4gICAgICAgICAgc3RhcnQgPSBfc3RlcCR2YWx1ZVswXSxcbiAgICAgICAgICBlbmQgPSBfc3RlcCR2YWx1ZVsxXSxcbiAgICAgICAgICB0YWdzID0gX3N0ZXAkdmFsdWVbMl07XG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRhZ3MpLCBfc3RlcDI7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMigpKS5kb25lOykge1xuICAgICAgICB2YXIgdGFnID0gX3N0ZXAyLnZhbHVlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uc1t0YWddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYWN0aW9uc1t0YWddKHN0YXJ0LCBlbmQsIHN0ci5zbGljZShzdGFydCwgZW5kICsgMSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTdGF0ZU1hY2hpbmU7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGVNYWNoaW5lO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODQ3ODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIEJ1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oODgyMylbXCJCdWZmZXJcIl07XG5cblxuX193ZWJwYWNrX3JlcXVpcmVfXygxNTM5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4Njc0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MDQyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2Njk5KTtcblxuLypcbiAqIE1JVCBMSUNFTlNFXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTEgRGV2b24gR292ZXR0XG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzXG4gKiBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmVcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsXG4gKiBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnNcbiAqIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4gKiBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4gKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqL1xudmFyIGZzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzODU3KTtcblxudmFyIHpsaWIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2MzUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIFBORy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocGF0aCwgZm4pIHtcbiAgICByZXR1cm4gZnMucmVhZEZpbGUocGF0aCwgZnVuY3Rpb24gKGVyciwgZmlsZSkge1xuICAgICAgdmFyIHBuZyA9IG5ldyBQTkcoZmlsZSk7XG4gICAgICByZXR1cm4gcG5nLmRlY29kZShmdW5jdGlvbiAocGl4ZWxzKSB7XG4gICAgICAgIHJldHVybiBmbihwaXhlbHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgUE5HLmxvYWQgPSBmdW5jdGlvbiBsb2FkKHBhdGgpIHtcbiAgICB2YXIgZmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoKTtcbiAgICByZXR1cm4gbmV3IFBORyhmaWxlKTtcbiAgfTtcblxuICBmdW5jdGlvbiBQTkcoZGF0YSkge1xuICAgIHZhciBpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5wb3MgPSA4OyAvLyBTa2lwIHRoZSBkZWZhdWx0IGhlYWRlclxuXG4gICAgdGhpcy5wYWxldHRlID0gW107XG4gICAgdGhpcy5pbWdEYXRhID0gW107XG4gICAgdGhpcy50cmFuc3BhcmVuY3kgPSB7fTtcbiAgICB0aGlzLnRleHQgPSB7fTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgY2h1bmtTaXplID0gdGhpcy5yZWFkVUludDMyKCk7XG4gICAgICB2YXIgc2VjdGlvbiA9ICcnO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgIHNlY3Rpb24gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmRhdGFbdGhpcy5wb3MrK10pO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHNlY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnSUhEUic6XG4gICAgICAgICAgLy8gd2UgY2FuIGdyYWIgIGludGVyZXN0aW5nIHZhbHVlcyBmcm9tIGhlcmUgKGxpa2Ugd2lkdGgsIGhlaWdodCwgZXRjKVxuICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWRVSW50MzIoKTtcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhZFVJbnQzMigpO1xuICAgICAgICAgIHRoaXMuYml0cyA9IHRoaXMuZGF0YVt0aGlzLnBvcysrXTtcbiAgICAgICAgICB0aGlzLmNvbG9yVHlwZSA9IHRoaXMuZGF0YVt0aGlzLnBvcysrXTtcbiAgICAgICAgICB0aGlzLmNvbXByZXNzaW9uTWV0aG9kID0gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xuICAgICAgICAgIHRoaXMuZmlsdGVyTWV0aG9kID0gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xuICAgICAgICAgIHRoaXMuaW50ZXJsYWNlTWV0aG9kID0gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1BMVEUnOlxuICAgICAgICAgIHRoaXMucGFsZXR0ZSA9IHRoaXMucmVhZChjaHVua1NpemUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ0lEQVQnOlxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjaHVua1NpemU7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5pbWdEYXRhLnB1c2godGhpcy5kYXRhW3RoaXMucG9zKytdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd0Uk5TJzpcbiAgICAgICAgICAvLyBUaGlzIGNodW5rIGNhbiBvbmx5IG9jY3VyIG9uY2UgYW5kIGl0IG11c3Qgb2NjdXIgYWZ0ZXIgdGhlXG4gICAgICAgICAgLy8gUExURSBjaHVuayBhbmQgYmVmb3JlIHRoZSBJREFUIGNodW5rLlxuICAgICAgICAgIHRoaXMudHJhbnNwYXJlbmN5ID0ge307XG5cbiAgICAgICAgICBzd2l0Y2ggKHRoaXMuY29sb3JUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIC8vIEluZGV4ZWQgY29sb3IsIFJHQi4gRWFjaCBieXRlIGluIHRoaXMgY2h1bmsgaXMgYW4gYWxwaGEgZm9yXG4gICAgICAgICAgICAgIC8vIHRoZSBwYWxldHRlIGluZGV4IGluIHRoZSBQTFRFIChcInBhbGV0dGVcIikgY2h1bmsgdXAgdW50aWwgdGhlXG4gICAgICAgICAgICAgIC8vIGxhc3Qgbm9uLW9wYXF1ZSBlbnRyeS4gU2V0IHVwIGFuIGFycmF5LCBzdHJldGNoaW5nIG92ZXIgYWxsXG4gICAgICAgICAgICAgIC8vIHBhbGV0dGUgZW50cmllcyB3aGljaCB3aWxsIGJlIDAgKG9wYXF1ZSkgb3IgMSAodHJhbnNwYXJlbnQpLlxuICAgICAgICAgICAgICB0aGlzLnRyYW5zcGFyZW5jeS5pbmRleGVkID0gdGhpcy5yZWFkKGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgIHZhciBzaG9ydCA9IDI1NSAtIHRoaXMudHJhbnNwYXJlbmN5LmluZGV4ZWQubGVuZ3RoO1xuXG4gICAgICAgICAgICAgIGlmIChzaG9ydCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2hvcnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVuY3kuaW5kZXhlZC5wdXNoKDI1NSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgLy8gR3JleXNjYWxlLiBDb3JyZXNwb25kaW5nIHRvIGVudHJpZXMgaW4gdGhlIFBMVEUgY2h1bmsuXG4gICAgICAgICAgICAgIC8vIEdyZXkgaXMgdHdvIGJ5dGVzLCByYW5nZSAwIC4uICgyIF4gYml0LWRlcHRoKSAtIDFcbiAgICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVuY3kuZ3JheXNjYWxlID0gdGhpcy5yZWFkKGNodW5rU2l6ZSlbMF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIC8vIFRydWUgY29sb3Igd2l0aCBwcm9wZXIgYWxwaGEgY2hhbm5lbC5cbiAgICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVuY3kucmdiID0gdGhpcy5yZWFkKGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3RFWHQnOlxuICAgICAgICAgIHZhciB0ZXh0ID0gdGhpcy5yZWFkKGNodW5rU2l6ZSk7XG4gICAgICAgICAgdmFyIGluZGV4ID0gdGV4dC5pbmRleE9mKDApO1xuICAgICAgICAgIHZhciBrZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgdGV4dC5zbGljZSgwLCBpbmRleCkpO1xuICAgICAgICAgIHRoaXMudGV4dFtrZXldID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIHRleHQuc2xpY2UoaW5kZXggKyAxKSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnSUVORCc6XG4gICAgICAgICAgLy8gd2UndmUgZ290IGV2ZXJ5dGhpbmcgd2UgbmVlZCFcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMuY29sb3JUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JzID0gMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgdGhpcy5jb2xvcnMgPSAzO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmhhc0FscGhhQ2hhbm5lbCA9IFs0LCA2XS5pbmNsdWRlcyh0aGlzLmNvbG9yVHlwZSk7XG4gICAgICAgICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzICsgKHRoaXMuaGFzQWxwaGFDaGFubmVsID8gMSA6IDApO1xuICAgICAgICAgIHRoaXMucGl4ZWxCaXRsZW5ndGggPSB0aGlzLmJpdHMgKiBjb2xvcnM7XG5cbiAgICAgICAgICBzd2l0Y2ggKHRoaXMuY29sb3JzKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JTcGFjZSA9ICdEZXZpY2VHcmF5JztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgdGhpcy5jb2xvclNwYWNlID0gJ0RldmljZVJHQic7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaW1nRGF0YSA9IG5ldyBCdWZmZXIodGhpcy5pbWdEYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyB1bmtub3duIChvciB1bmltcG9ydGFudCkgc2VjdGlvbiwgc2tpcCBpdFxuICAgICAgICAgIHRoaXMucG9zICs9IGNodW5rU2l6ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgKz0gNDsgLy8gU2tpcCB0aGUgQ1JDXG5cbiAgICAgIGlmICh0aGlzLnBvcyA+IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvbXBsZXRlIG9yIGNvcnJ1cHQgUE5HIGZpbGUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUE5HLnByb3RvdHlwZTtcblxuICBfcHJvdG8ucmVhZCA9IGZ1bmN0aW9uIHJlYWQoYnl0ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGJ5dGVzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlYWRVSW50MzIgPSBmdW5jdGlvbiByZWFkVUludDMyKCkge1xuICAgIHZhciBiMSA9IHRoaXMuZGF0YVt0aGlzLnBvcysrXSA8PCAyNDtcbiAgICB2YXIgYjIgPSB0aGlzLmRhdGFbdGhpcy5wb3MrK10gPDwgMTY7XG4gICAgdmFyIGIzID0gdGhpcy5kYXRhW3RoaXMucG9zKytdIDw8IDg7XG4gICAgdmFyIGI0ID0gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xuICAgIHJldHVybiBiMSB8IGIyIHwgYjMgfCBiNDtcbiAgfTtcblxuICBfcHJvdG8ucmVhZFVJbnQxNiA9IGZ1bmN0aW9uIHJlYWRVSW50MTYoKSB7XG4gICAgdmFyIGIxID0gdGhpcy5kYXRhW3RoaXMucG9zKytdIDw8IDg7XG4gICAgdmFyIGIyID0gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xuICAgIHJldHVybiBiMSB8IGIyO1xuICB9O1xuXG4gIF9wcm90by5kZWNvZGVQaXhlbHMgPSBmdW5jdGlvbiBkZWNvZGVQaXhlbHMoZm4pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIHpsaWIuaW5mbGF0ZSh0aGlzLmltZ0RhdGEsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2lkdGggPSBfdGhpcy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcy5oZWlnaHQ7XG4gICAgICB2YXIgcGl4ZWxCeXRlcyA9IF90aGlzLnBpeGVsQml0bGVuZ3RoIC8gODtcbiAgICAgIHZhciBwaXhlbHMgPSBuZXcgQnVmZmVyKHdpZHRoICogaGVpZ2h0ICogcGl4ZWxCeXRlcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICB2YXIgcG9zID0gMDtcblxuICAgICAgZnVuY3Rpb24gcGFzcyh4MCwgeTAsIGR4LCBkeSwgc2luZ2xlUGFzcykge1xuICAgICAgICBpZiAoc2luZ2xlUGFzcyA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgc2luZ2xlUGFzcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHcgPSBNYXRoLmNlaWwoKHdpZHRoIC0geDApIC8gZHgpO1xuICAgICAgICB2YXIgaCA9IE1hdGguY2VpbCgoaGVpZ2h0IC0geTApIC8gZHkpO1xuICAgICAgICB2YXIgc2NhbmxpbmVMZW5ndGggPSBwaXhlbEJ5dGVzICogdztcbiAgICAgICAgdmFyIGJ1ZmZlciA9IHNpbmdsZVBhc3MgPyBwaXhlbHMgOiBuZXcgQnVmZmVyKHNjYW5saW5lTGVuZ3RoICogaCk7XG4gICAgICAgIHZhciByb3cgPSAwO1xuICAgICAgICB2YXIgYyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHJvdyA8IGggJiYgcG9zIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGJ5dGUsIGNvbCwgaSwgbGVmdCwgdXBwZXI7XG5cbiAgICAgICAgICBzd2l0Y2ggKGRhdGFbcG9zKytdKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIC8vIE5vbmVcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNjYW5saW5lTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBidWZmZXJbYysrXSA9IGRhdGFbcG9zKytdO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgLy8gU3ViXG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzY2FubGluZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnl0ZSA9IGRhdGFbcG9zKytdO1xuICAgICAgICAgICAgICAgIGxlZnQgPSBpIDwgcGl4ZWxCeXRlcyA/IDAgOiBidWZmZXJbYyAtIHBpeGVsQnl0ZXNdO1xuICAgICAgICAgICAgICAgIGJ1ZmZlcltjKytdID0gKGJ5dGUgKyBsZWZ0KSAlIDI1NjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIC8vIFVwXG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzY2FubGluZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnl0ZSA9IGRhdGFbcG9zKytdO1xuICAgICAgICAgICAgICAgIGNvbCA9IChpIC0gaSAlIHBpeGVsQnl0ZXMpIC8gcGl4ZWxCeXRlcztcbiAgICAgICAgICAgICAgICB1cHBlciA9IHJvdyAmJiBidWZmZXJbKHJvdyAtIDEpICogc2NhbmxpbmVMZW5ndGggKyBjb2wgKiBwaXhlbEJ5dGVzICsgaSAlIHBpeGVsQnl0ZXNdO1xuICAgICAgICAgICAgICAgIGJ1ZmZlcltjKytdID0gKHVwcGVyICsgYnl0ZSkgJSAyNTY7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAvLyBBdmVyYWdlXG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzY2FubGluZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnl0ZSA9IGRhdGFbcG9zKytdO1xuICAgICAgICAgICAgICAgIGNvbCA9IChpIC0gaSAlIHBpeGVsQnl0ZXMpIC8gcGl4ZWxCeXRlcztcbiAgICAgICAgICAgICAgICBsZWZ0ID0gaSA8IHBpeGVsQnl0ZXMgPyAwIDogYnVmZmVyW2MgLSBwaXhlbEJ5dGVzXTtcbiAgICAgICAgICAgICAgICB1cHBlciA9IHJvdyAmJiBidWZmZXJbKHJvdyAtIDEpICogc2NhbmxpbmVMZW5ndGggKyBjb2wgKiBwaXhlbEJ5dGVzICsgaSAlIHBpeGVsQnl0ZXNdO1xuICAgICAgICAgICAgICAgIGJ1ZmZlcltjKytdID0gKGJ5dGUgKyBNYXRoLmZsb29yKChsZWZ0ICsgdXBwZXIpIC8gMikpICUgMjU2O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgLy8gUGFldGhcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNjYW5saW5lTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFldGgsIHVwcGVyTGVmdDtcbiAgICAgICAgICAgICAgICBieXRlID0gZGF0YVtwb3MrK107XG4gICAgICAgICAgICAgICAgY29sID0gKGkgLSBpICUgcGl4ZWxCeXRlcykgLyBwaXhlbEJ5dGVzO1xuICAgICAgICAgICAgICAgIGxlZnQgPSBpIDwgcGl4ZWxCeXRlcyA/IDAgOiBidWZmZXJbYyAtIHBpeGVsQnl0ZXNdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJvdyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgdXBwZXIgPSB1cHBlckxlZnQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB1cHBlciA9IGJ1ZmZlclsocm93IC0gMSkgKiBzY2FubGluZUxlbmd0aCArIGNvbCAqIHBpeGVsQnl0ZXMgKyBpICUgcGl4ZWxCeXRlc107XG4gICAgICAgICAgICAgICAgICB1cHBlckxlZnQgPSBjb2wgJiYgYnVmZmVyWyhyb3cgLSAxKSAqIHNjYW5saW5lTGVuZ3RoICsgKGNvbCAtIDEpICogcGl4ZWxCeXRlcyArIGkgJSBwaXhlbEJ5dGVzXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcCA9IGxlZnQgKyB1cHBlciAtIHVwcGVyTGVmdDtcbiAgICAgICAgICAgICAgICB2YXIgcGEgPSBNYXRoLmFicyhwIC0gbGVmdCk7XG4gICAgICAgICAgICAgICAgdmFyIHBiID0gTWF0aC5hYnMocCAtIHVwcGVyKTtcbiAgICAgICAgICAgICAgICB2YXIgcGMgPSBNYXRoLmFicyhwIC0gdXBwZXJMZWZ0KTtcblxuICAgICAgICAgICAgICAgIGlmIChwYSA8PSBwYiAmJiBwYSA8PSBwYykge1xuICAgICAgICAgICAgICAgICAgcGFldGggPSBsZWZ0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGIgPD0gcGMpIHtcbiAgICAgICAgICAgICAgICAgIHBhZXRoID0gdXBwZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBhZXRoID0gdXBwZXJMZWZ0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJ1ZmZlcltjKytdID0gKGJ5dGUgKyBwYWV0aCkgJSAyNTY7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBmaWx0ZXIgYWxnb3JpdGhtOiBcIiArIGRhdGFbcG9zIC0gMV0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc2luZ2xlUGFzcykge1xuICAgICAgICAgICAgdmFyIHBpeGVsc1BvcyA9ICgoeTAgKyByb3cgKiBkeSkgKiB3aWR0aCArIHgwKSAqIHBpeGVsQnl0ZXM7XG4gICAgICAgICAgICB2YXIgYnVmZmVyUG9zID0gcm93ICogc2NhbmxpbmVMZW5ndGg7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3OyBpKyspIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwaXhlbEJ5dGVzOyBqKyspIHtcbiAgICAgICAgICAgICAgICBwaXhlbHNbcGl4ZWxzUG9zKytdID0gYnVmZmVyW2J1ZmZlclBvcysrXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHBpeGVsc1BvcyArPSAoZHggLSAxKSAqIHBpeGVsQnl0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcm93Kys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLmludGVybGFjZU1ldGhvZCA9PT0gMSkge1xuICAgICAgICAvKlxuICAgICAgICAgIDEgNiA0IDYgMiA2IDQgNlxuICAgICAgICAgIDcgNyA3IDcgNyA3IDcgN1xuICAgICAgICAgIDUgNiA1IDYgNSA2IDUgNlxuICAgICAgICAgIDcgNyA3IDcgNyA3IDcgN1xuICAgICAgICAgIDMgNiA0IDYgMyA2IDQgNlxuICAgICAgICAgIDcgNyA3IDcgNyA3IDcgN1xuICAgICAgICAgIDUgNiA1IDYgNSA2IDUgNlxuICAgICAgICAgIDcgNyA3IDcgNyA3IDcgN1xuICAgICAgICAqL1xuICAgICAgICBwYXNzKDAsIDAsIDgsIDgpOyAvLyAxXG5cbiAgICAgICAgcGFzcyg0LCAwLCA4LCA4KTsgLy8gMlxuXG4gICAgICAgIHBhc3MoMCwgNCwgNCwgOCk7IC8vIDNcblxuICAgICAgICBwYXNzKDIsIDAsIDQsIDQpOyAvLyA0XG5cbiAgICAgICAgcGFzcygwLCAyLCAyLCA0KTsgLy8gNVxuXG4gICAgICAgIHBhc3MoMSwgMCwgMiwgMik7IC8vIDZcblxuICAgICAgICBwYXNzKDAsIDEsIDEsIDIpOyAvLyA3XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXNzKDAsIDAsIDEsIDEsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4ocGl4ZWxzKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZGVjb2RlUGFsZXR0ZSA9IGZ1bmN0aW9uIGRlY29kZVBhbGV0dGUoKSB7XG4gICAgdmFyIHBhbGV0dGUgPSB0aGlzLnBhbGV0dGU7XG4gICAgdmFyIGxlbmd0aCA9IHBhbGV0dGUubGVuZ3RoO1xuICAgIHZhciB0cmFuc3BhcmVuY3kgPSB0aGlzLnRyYW5zcGFyZW5jeS5pbmRleGVkIHx8IFtdO1xuICAgIHZhciByZXQgPSBuZXcgQnVmZmVyKHRyYW5zcGFyZW5jeS5sZW5ndGggKyBsZW5ndGgpO1xuICAgIHZhciBwb3MgPSAwO1xuICAgIHZhciBjID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgIHZhciBsZWZ0O1xuICAgICAgcmV0W3BvcysrXSA9IHBhbGV0dGVbaV07XG4gICAgICByZXRbcG9zKytdID0gcGFsZXR0ZVtpICsgMV07XG4gICAgICByZXRbcG9zKytdID0gcGFsZXR0ZVtpICsgMl07XG4gICAgICByZXRbcG9zKytdID0gKGxlZnQgPSB0cmFuc3BhcmVuY3lbYysrXSkgIT0gbnVsbCA/IGxlZnQgOiAyNTU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfTtcblxuICBfcHJvdG8uY29weVRvSW1hZ2VEYXRhID0gZnVuY3Rpb24gY29weVRvSW1hZ2VEYXRhKGltYWdlRGF0YSwgcGl4ZWxzKSB7XG4gICAgdmFyIGosIGs7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwYWxldHRlID0gbnVsbDtcbiAgICB2YXIgYWxwaGEgPSB0aGlzLmhhc0FscGhhQ2hhbm5lbDtcblxuICAgIGlmICh0aGlzLnBhbGV0dGUubGVuZ3RoKSB7XG4gICAgICBwYWxldHRlID0gdGhpcy5fZGVjb2RlZFBhbGV0dGUgfHwgKHRoaXMuX2RlY29kZWRQYWxldHRlID0gdGhpcy5kZWNvZGVQYWxldHRlKCkpO1xuICAgICAgY29sb3JzID0gNDtcbiAgICAgIGFscGhhID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IGltYWdlRGF0YS5kYXRhIHx8IGltYWdlRGF0YTtcbiAgICB2YXIgbGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgdmFyIGlucHV0ID0gcGFsZXR0ZSB8fCBwaXhlbHM7XG4gICAgdmFyIGkgPSBqID0gMDtcblxuICAgIGlmIChjb2xvcnMgPT09IDEpIHtcbiAgICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICAgIGsgPSBwYWxldHRlID8gcGl4ZWxzW2kgLyA0XSAqIDQgOiBqO1xuICAgICAgICB2YXIgdiA9IGlucHV0W2srK107XG4gICAgICAgIGRhdGFbaSsrXSA9IHY7XG4gICAgICAgIGRhdGFbaSsrXSA9IHY7XG4gICAgICAgIGRhdGFbaSsrXSA9IHY7XG4gICAgICAgIGRhdGFbaSsrXSA9IGFscGhhID8gaW5wdXRbaysrXSA6IDI1NTtcbiAgICAgICAgaiA9IGs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICAgIGsgPSBwYWxldHRlID8gcGl4ZWxzW2kgLyA0XSAqIDQgOiBqO1xuICAgICAgICBkYXRhW2krK10gPSBpbnB1dFtrKytdO1xuICAgICAgICBkYXRhW2krK10gPSBpbnB1dFtrKytdO1xuICAgICAgICBkYXRhW2krK10gPSBpbnB1dFtrKytdO1xuICAgICAgICBkYXRhW2krK10gPSBhbHBoYSA/IGlucHV0W2srK10gOiAyNTU7XG4gICAgICAgIGogPSBrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGZuKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgcmV0ID0gbmV3IEJ1ZmZlcih0aGlzLndpZHRoICogdGhpcy5oZWlnaHQgKiA0KTtcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVQaXhlbHMoZnVuY3Rpb24gKHBpeGVscykge1xuICAgICAgX3RoaXMyLmNvcHlUb0ltYWdlRGF0YShyZXQsIHBpeGVscyk7XG5cbiAgICAgIHJldHVybiBmbihyZXQpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBQTkc7XG59KCk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNzUwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMyOTApO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODIzKTtcblxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXI7IC8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcblxuZnVuY3Rpb24gY29weVByb3BzKHNyYywgZHN0KSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBkc3Rba2V5XSA9IHNyY1trZXldO1xuICB9XG59XG5cbmlmIChCdWZmZXIuZnJvbSAmJiBCdWZmZXIuYWxsb2MgJiYgQnVmZmVyLmFsbG9jVW5zYWZlICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBidWZmZXI7XG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKTtcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBTYWZlQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpO1xufSAvLyBDb3B5IHN0YXRpYyBtZXRob2RzIGZyb20gQnVmZmVyXG5cblxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcik7XG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7XG59O1xuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cblxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpO1xuXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoMCk7XG4gIH1cblxuICByZXR1cm4gYnVmO1xufTtcblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cblxuICByZXR1cm4gQnVmZmVyKHNpemUpO1xufTtcblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpO1xufTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDcxMDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBwcm92aWRlZCBkZXBlbmRlbmN5ICovIHZhciBwcm9jZXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MTU1KTtcbi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDgxNDUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY5OTIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0NzIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI5OTApO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg5MjcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMxMDUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDUwMzUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQzNDUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcxNzQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI4NDYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ3MzEpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcyMDkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDYzMTkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg4NjcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc3ODkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM3MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDkzNjgpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ0ODMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNTYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM0NjIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY3OCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzQ2Mik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzgyNCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAyMSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjk3NCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAxNik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzI5MCk7XG5cbnZhciBidWZmZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4MjMpO1xuXG52YXIgQnVmZmVyID0gYnVmZmVyLkJ1ZmZlcjtcbnZhciBzYWZlciA9IHt9O1xudmFyIGtleTtcblxuZm9yIChrZXkgaW4gYnVmZmVyKSB7XG4gIGlmICghYnVmZmVyLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlO1xuICBpZiAoa2V5ID09PSAnU2xvd0J1ZmZlcicgfHwga2V5ID09PSAnQnVmZmVyJykgY29udGludWU7XG4gIHNhZmVyW2tleV0gPSBidWZmZXJba2V5XTtcbn1cblxudmFyIFNhZmVyID0gc2FmZXIuQnVmZmVyID0ge307XG5cbmZvciAoa2V5IGluIEJ1ZmZlcikge1xuICBpZiAoIUJ1ZmZlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSBjb250aW51ZTtcbiAgaWYgKGtleSA9PT0gJ2FsbG9jVW5zYWZlJyB8fCBrZXkgPT09ICdhbGxvY1Vuc2FmZVNsb3cnKSBjb250aW51ZTtcbiAgU2FmZXJba2V5XSA9IEJ1ZmZlcltrZXldO1xufVxuXG5zYWZlci5CdWZmZXIucHJvdG90eXBlID0gQnVmZmVyLnByb3RvdHlwZTtcblxuaWYgKCFTYWZlci5mcm9tIHx8IFNhZmVyLmZyb20gPT09IFVpbnQ4QXJyYXkuZnJvbSkge1xuICBTYWZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgdmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59XG5cbmlmICghU2FmZXIuYWxsb2MpIHtcbiAgU2FmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHNpemUpO1xuICAgIH1cblxuICAgIGlmIChzaXplIDwgMCB8fCBzaXplID49IDIgKiAoMSA8PCAzMCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTtcbiAgICB9XG5cbiAgICB2YXIgYnVmID0gQnVmZmVyKHNpemUpO1xuXG4gICAgaWYgKCFmaWxsIHx8IGZpbGwubGVuZ3RoID09PSAwKSB7XG4gICAgICBidWYuZmlsbCgwKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfTtcbn1cblxuaWYgKCFzYWZlci5rU3RyaW5nTWF4TGVuZ3RoKSB7XG4gIHRyeSB7XG4gICAgc2FmZXIua1N0cmluZ01heExlbmd0aCA9IHByb2Nlc3MuYmluZGluZygnYnVmZmVyJykua1N0cmluZ01heExlbmd0aDtcbiAgfSBjYXRjaCAoZSkgey8vIHdlIGNhbid0IGRldGVybWluZSBrU3RyaW5nTWF4TGVuZ3RoIGluIGVudmlyb25tZW50cyB3aGVyZSBwcm9jZXNzLmJpbmRpbmdcbiAgICAvLyBpcyB1bnN1cHBvcnRlZCwgc28gbGV0J3Mgbm90IHNldCBpdFxuICB9XG59XG5cbmlmICghc2FmZXIuY29uc3RhbnRzKSB7XG4gIHNhZmVyLmNvbnN0YW50cyA9IHtcbiAgICBNQVhfTEVOR1RIOiBzYWZlci5rTWF4TGVuZ3RoXG4gIH07XG5cbiAgaWYgKHNhZmVyLmtTdHJpbmdNYXhMZW5ndGgpIHtcbiAgICBzYWZlci5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEggPSBzYWZlci5rU3RyaW5nTWF4TGVuZ3RoO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2FmZXI7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMzYxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbl9fd2VicGFja19yZXF1aXJlX18oNzk0MSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjUyNik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzMyNyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMTUzOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAwMyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDc0Nyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oOTMzNyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzA0Mik7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxudmFyIF9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODIzKSxcbiAgICBCdWZmZXIgPSBfcmVxdWlyZS5CdWZmZXI7XG5cbnZhciBfcmVxdWlyZTIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4NjIpLFxuICAgIGluc3BlY3QgPSBfcmVxdWlyZTIuaW5zcGVjdDtcblxudmFyIGN1c3RvbSA9IGluc3BlY3QgJiYgaW5zcGVjdC5jdXN0b20gfHwgJ2luc3BlY3QnO1xuXG5mdW5jdGlvbiBjb3B5QnVmZmVyKHNyYywgdGFyZ2V0LCBvZmZzZXQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5jb3B5LmNhbGwoc3JjLCB0YXJnZXQsIG9mZnNldCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQnVmZmVyTGlzdCk7XG5cbiAgICB0aGlzLmhlYWQgPSBudWxsO1xuICAgIHRoaXMudGFpbCA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEJ1ZmZlckxpc3QsIFt7XG4gICAga2V5OiBcInB1c2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHVzaCh2KSB7XG4gICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgIGRhdGE6IHYsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O2Vsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICAgICsrdGhpcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVuc2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5zaGlmdCh2KSB7XG4gICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgIGRhdGE6IHYsXG4gICAgICAgIG5leHQ6IHRoaXMuaGVhZFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnk7XG4gICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICAgICsrdGhpcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoaWZ0KCkge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICB2YXIgcmV0ID0gdGhpcy5oZWFkLmRhdGE7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcbiAgICAgIC0tdGhpcy5sZW5ndGg7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImpvaW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gam9pbihzKSB7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuXG4gICAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgICByZXQgKz0gcyArIHAuZGF0YTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29uY2F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbmNhdChuKSB7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApO1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHdoaWxlIChwKSB7XG4gICAgICAgIGNvcHlCdWZmZXIocC5kYXRhLCByZXQsIGkpO1xuICAgICAgICBpICs9IHAuZGF0YS5sZW5ndGg7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuXG4gIH0sIHtcbiAgICBrZXk6IFwiY29uc3VtZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb25zdW1lKG4sIGhhc1N0cmluZ3MpIHtcbiAgICAgIHZhciByZXQ7XG5cbiAgICAgIGlmIChuIDwgdGhpcy5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIC8vIGBzbGljZWAgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3MuXG4gICAgICAgIHJldCA9IHRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsIG4pO1xuICAgICAgICB0aGlzLmhlYWQuZGF0YSA9IHRoaXMuaGVhZC5kYXRhLnNsaWNlKG4pO1xuICAgICAgfSBlbHNlIGlmIChuID09PSB0aGlzLmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8gRmlyc3QgY2h1bmsgaXMgYSBwZXJmZWN0IG1hdGNoLlxuICAgICAgICByZXQgPSB0aGlzLnNoaWZ0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXN1bHQgc3BhbnMgbW9yZSB0aGFuIG9uZSBidWZmZXIuXG4gICAgICAgIHJldCA9IGhhc1N0cmluZ3MgPyB0aGlzLl9nZXRTdHJpbmcobikgOiB0aGlzLl9nZXRCdWZmZXIobik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpcnN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpcnN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVhZC5kYXRhO1xuICAgIH0gLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cblxuICB9LCB7XG4gICAga2V5OiBcIl9nZXRTdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2dldFN0cmluZyhuKSB7XG4gICAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICAgIHZhciBjID0gMTtcbiAgICAgIHZhciByZXQgPSBwLmRhdGE7XG4gICAgICBuIC09IHJldC5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICAgIHZhciBzdHIgPSBwLmRhdGE7XG4gICAgICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkgcmV0ICs9IHN0cjtlbHNlIHJldCArPSBzdHIuc2xpY2UoMCwgbik7XG4gICAgICAgIG4gLT0gbmI7XG5cbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgICsrYztcbiAgICAgICAgICAgIGlmIChwLm5leHQpIHRoaXMuaGVhZCA9IHAubmV4dDtlbHNlIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHA7XG4gICAgICAgICAgICBwLmRhdGEgPSBzdHIuc2xpY2UobmIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgKytjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxlbmd0aCAtPSBjO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuXG4gIH0sIHtcbiAgICBrZXk6IFwiX2dldEJ1ZmZlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0QnVmZmVyKG4pIHtcbiAgICAgIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gICAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICAgIHZhciBjID0gMTtcbiAgICAgIHAuZGF0YS5jb3B5KHJldCk7XG4gICAgICBuIC09IHAuZGF0YS5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICAgIHZhciBidWYgPSBwLmRhdGE7XG4gICAgICAgIHZhciBuYiA9IG4gPiBidWYubGVuZ3RoID8gYnVmLmxlbmd0aCA6IG47XG4gICAgICAgIGJ1Zi5jb3B5KHJldCwgcmV0Lmxlbmd0aCAtIG4sIDAsIG5iKTtcbiAgICAgICAgbiAtPSBuYjtcblxuICAgICAgICBpZiAobiA9PT0gMCkge1xuICAgICAgICAgIGlmIChuYiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgKytjO1xuICAgICAgICAgICAgaWYgKHAubmV4dCkgdGhpcy5oZWFkID0gcC5uZXh0O2Vsc2UgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWFkID0gcDtcbiAgICAgICAgICAgIHAuZGF0YSA9IGJ1Zi5zbGljZShuYik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICArK2M7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGVuZ3RoIC09IGM7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gLy8gTWFrZSBzdXJlIHRoZSBsaW5rZWQgbGlzdCBvbmx5IHNob3dzIHRoZSBtaW5pbWFsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi5cblxuICB9LCB7XG4gICAga2V5OiBjdXN0b20sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF8sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0KHRoaXMsIF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgLy8gT25seSBpbnNwZWN0IG9uZSBsZXZlbC5cbiAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgIC8vIEl0IHNob3VsZCBub3QgcmVjdXJzZS5cbiAgICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2VcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQnVmZmVyTGlzdDtcbn0oKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDIxNTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBfX2Rpcm5hbWUgPSBcIi9cIjtcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIEJ1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oODgyMylbXCJCdWZmZXJcIl07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzk0MSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjUyNik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzMyNyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMTUzOSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAwMyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDc0Nyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oOTMzNyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDg5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNDE5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxODE3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMTY1KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2OTkyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4NzgzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzOTQ4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxMDM4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MDQyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4MzA5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0OTE2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNzA3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMjIyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5NjAwKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5NzE0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MzA2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxMjQ5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5ODQxKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0OTUzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2OTc3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2Njk5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MTkyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5NjUzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMTIzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NzIzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4NzM0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNDcyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyOTkwKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4OTI3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMTA1KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MDM1KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0MzQ1KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MTc0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyODQ2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NzMxKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MjA5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2MzE5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4ODY3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3Nzg5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNzM5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5MzY4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NDgzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMDU2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNDYyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2NzgpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc0NjIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM4MjQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDUwMjEpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI5NzQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDUwMTYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc4MDMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMyOTApO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk2MDEpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMyMTApO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDkyNTQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDczOTcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg2NzQpO1xuXG52YXIgX3N0cmVhbSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXygyODMwKSk7XG5cbnZhciBfemxpYiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXygyNjM1KSk7XG5cbnZhciBfY3J5cHRvSnMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oNTE1MykpO1xuXG52YXIgX2ZvbnRraXQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oMTkxNykpO1xuXG52YXIgX2V2ZW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNzE4Nyk7XG5cbnZhciBfbGluZWJyZWFrID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDczMzcpKTtcblxudmFyIF9wbmdKcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXyg4NDc4KSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBmcyA9IF9fd2VicGFja19yZXF1aXJlX18oMzg1Nyk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcblxuICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLFxuICAgICAgICByZXN1bHQ7XG5cbiAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcblxuICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7XG59XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7XG4gIHZhciBpdDtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBvW1N5bWJvbC5pdGVyYXRvcl0gPT0gbnVsbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChpdCkgbyA9IGl0O1xuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgczogRixcbiAgICAgICAgbjogZnVuY3Rpb24gbigpIHtcbiAgICAgICAgICBpZiAoaSA+PSBvLmxlbmd0aCkgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiBvW2krK11cbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBlOiBmdW5jdGlvbiBlKF9lMikge1xuICAgICAgICAgIHRocm93IF9lMjtcbiAgICAgICAgfSxcbiAgICAgICAgZjogRlxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG4gIH1cblxuICB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsXG4gICAgICBkaWRFcnIgPSBmYWxzZSxcbiAgICAgIGVycjtcbiAgcmV0dXJuIHtcbiAgICBzOiBmdW5jdGlvbiBzKCkge1xuICAgICAgaXQgPSBvW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9LFxuICAgIG46IGZ1bmN0aW9uIG4oKSB7XG4gICAgICB2YXIgc3RlcCA9IGl0Lm5leHQoKTtcbiAgICAgIG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7XG4gICAgICByZXR1cm4gc3RlcDtcbiAgICB9LFxuICAgIGU6IGZ1bmN0aW9uIGUoX2UzKSB7XG4gICAgICBkaWRFcnIgPSB0cnVlO1xuICAgICAgZXJyID0gX2UzO1xuICAgIH0sXG4gICAgZjogZnVuY3Rpb24gZigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdC5yZXR1cm4gIT0gbnVsbCkgaXQucmV0dXJuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuLypcclxuUERGQWJzdHJhY3RSZWZlcmVuY2UgLSBhYnN0cmFjdCBjbGFzcyBmb3IgUERGIHJlZmVyZW5jZVxyXG4qL1xuXG5cbnZhciBQREZBYnN0cmFjdFJlZmVyZW5jZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBERkFic3RyYWN0UmVmZXJlbmNlKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZBYnN0cmFjdFJlZmVyZW5jZSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUERGQWJzdHJhY3RSZWZlcmVuY2UsIFt7XG4gICAga2V5OiBcInRvU3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMnKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUERGQWJzdHJhY3RSZWZlcmVuY2U7XG59KCk7XG5cbnZhciBQREZUcmVlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUERGVHJlZSgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGVHJlZSk7XG5cbiAgICB0aGlzLl9pdGVtcyA9IHt9OyAvLyBkaXNhYmxlIC9MaW1pdHMgb3V0cHV0IGZvciB0aGlzIHRyZWVcblxuICAgIHRoaXMubGltaXRzID0gdHlwZW9mIG9wdGlvbnMubGltaXRzID09PSAnYm9vbGVhbicgPyBvcHRpb25zLmxpbWl0cyA6IHRydWU7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUERGVHJlZSwgW3tcbiAgICBrZXk6IFwiYWRkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZChrZXksIHZhbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5faXRlbXNba2V5XTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzOyAvLyBOZWVkcyB0byBiZSBzb3J0ZWQgYnkga2V5XG5cblxuICAgICAgdmFyIHNvcnRlZEtleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9pdGVtcykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gX3RoaXMuX2NvbXBhcmVLZXlzKGEsIGIpO1xuICAgICAgfSk7XG4gICAgICB2YXIgb3V0ID0gWyc8PCddO1xuXG4gICAgICBpZiAodGhpcy5saW1pdHMgJiYgc29ydGVkS2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhciBmaXJzdCA9IHNvcnRlZEtleXNbMF0sXG4gICAgICAgICAgICBsYXN0ID0gc29ydGVkS2V5c1tzb3J0ZWRLZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICBvdXQucHVzaChcIiAgL0xpbWl0cyBcIi5jb25jYXQoUERGT2JqZWN0LmNvbnZlcnQoW3RoaXMuX2RhdGFGb3JLZXkoZmlyc3QpLCB0aGlzLl9kYXRhRm9yS2V5KGxhc3QpXSkpKTtcbiAgICAgIH1cblxuICAgICAgb3V0LnB1c2goXCIgIC9cIi5jb25jYXQodGhpcy5fa2V5c05hbWUoKSwgXCIgW1wiKSk7XG5cbiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzb3J0ZWRLZXlzKSxcbiAgICAgICAgICBfc3RlcDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIga2V5ID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgb3V0LnB1c2goXCIgICAgXCIuY29uY2F0KFBERk9iamVjdC5jb252ZXJ0KHRoaXMuX2RhdGFGb3JLZXkoa2V5KSksIFwiIFwiKS5jb25jYXQoUERGT2JqZWN0LmNvbnZlcnQodGhpcy5faXRlbXNba2V5XSkpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgfVxuXG4gICAgICBvdXQucHVzaCgnXScpO1xuICAgICAgb3V0LnB1c2goJz4+Jyk7XG4gICAgICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfY29tcGFyZUtleXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NvbXBhcmVLZXlzKClcbiAgICAvKmEsIGIqL1xuICAgIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9rZXlzTmFtZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfa2V5c05hbWUoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfZGF0YUZvcktleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZGF0YUZvcktleSgpXG4gICAgLyprKi9cbiAgICB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcycpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQREZUcmVlO1xufSgpO1xuXG52YXIgcGFkID0gZnVuY3Rpb24gcGFkKHN0ciwgbGVuZ3RoKSB7XG4gIHJldHVybiAoQXJyYXkobGVuZ3RoICsgMSkuam9pbignMCcpICsgc3RyKS5zbGljZSgtbGVuZ3RoKTtcbn07XG5cbnZhciBlc2NhcGFibGVSZSA9IC9bXFxuXFxyXFx0XFxiXFxmKClcXFxcXS9nO1xudmFyIGVzY2FwYWJsZSA9IHtcbiAgJ1xcbic6ICdcXFxcbicsXG4gICdcXHInOiAnXFxcXHInLFxuICAnXFx0JzogJ1xcXFx0JyxcbiAgJ1xcYic6ICdcXFxcYicsXG4gICdcXGYnOiAnXFxcXGYnLFxuICAnXFxcXCc6ICdcXFxcXFxcXCcsXG4gICcoJzogJ1xcXFwoJyxcbiAgJyknOiAnXFxcXCknXG59OyAvLyBDb252ZXJ0IGxpdHRsZSBlbmRpYW4gVVRGLTE2IHRvIGJpZyBlbmRpYW5cblxudmFyIHN3YXBCeXRlcyA9IGZ1bmN0aW9uIHN3YXBCeXRlcyhidWZmKSB7XG4gIHZhciBsID0gYnVmZi5sZW5ndGg7XG5cbiAgaWYgKGwgJiAweDAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCdWZmZXIgbGVuZ3RoIG11c3QgYmUgZXZlbicpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBlbmQgPSBsIC0gMTsgaSA8IGVuZDsgaSArPSAyKSB7XG4gICAgICB2YXIgYSA9IGJ1ZmZbaV07XG4gICAgICBidWZmW2ldID0gYnVmZltpICsgMV07XG4gICAgICBidWZmW2kgKyAxXSA9IGE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1ZmY7XG59O1xuXG52YXIgUERGT2JqZWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUERGT2JqZWN0KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZPYmplY3QpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBERk9iamVjdCwgbnVsbCwgW3tcbiAgICBrZXk6IFwiY29udmVydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb252ZXJ0KG9iamVjdCkge1xuICAgICAgdmFyIGVuY3J5cHRGbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDsgLy8gU3RyaW5nIGxpdGVyYWxzIGFyZSBjb252ZXJ0ZWQgdG8gdGhlIFBERiBuYW1lIHR5cGVcblxuICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBcIi9cIi5jb25jYXQob2JqZWN0KTsgLy8gU3RyaW5nIG9iamVjdHMgYXJlIGNvbnZlcnRlZCB0byBQREYgc3RyaW5ncyAoVVRGLTE2KVxuICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgdmFyIHN0cmluZyA9IG9iamVjdDsgLy8gRGV0ZWN0IGlmIHRoaXMgaXMgYSB1bmljb2RlIHN0cmluZ1xuXG4gICAgICAgIHZhciBpc1VuaWNvZGUgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgZW5kID0gc3RyaW5nLmxlbmd0aDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KGkpID4gMHg3Zikge1xuICAgICAgICAgICAgaXNVbmljb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBJZiBzbywgZW5jb2RlIGl0IGFzIGJpZyBlbmRpYW4gVVRGLTE2XG5cblxuICAgICAgICB2YXIgc3RyaW5nQnVmZmVyO1xuXG4gICAgICAgIGlmIChpc1VuaWNvZGUpIHtcbiAgICAgICAgICBzdHJpbmdCdWZmZXIgPSBzd2FwQnl0ZXMoQnVmZmVyLmZyb20oXCJcXHVGRUZGXCIuY29uY2F0KHN0cmluZyksICd1dGYxNmxlJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmluZ0J1ZmZlciA9IEJ1ZmZlci5mcm9tKHN0cmluZy52YWx1ZU9mKCksICdhc2NpaScpO1xuICAgICAgICB9IC8vIEVuY3J5cHQgdGhlIHN0cmluZyB3aGVuIG5lY2Vzc2FyeVxuXG5cbiAgICAgICAgaWYgKGVuY3J5cHRGbikge1xuICAgICAgICAgIHN0cmluZyA9IGVuY3J5cHRGbihzdHJpbmdCdWZmZXIpLnRvU3RyaW5nKCdiaW5hcnknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoJ2JpbmFyeScpO1xuICAgICAgICB9IC8vIEVzY2FwZSBjaGFyYWN0ZXJzIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjXG5cblxuICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShlc2NhcGFibGVSZSwgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICByZXR1cm4gZXNjYXBhYmxlW2NdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFwiKFwiLmNvbmNhdChzdHJpbmcsIFwiKVwiKTsgLy8gQnVmZmVycyBhcmUgY29udmVydGVkIHRvIFBERiBoZXggc3RyaW5nc1xuICAgICAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gXCI8XCIuY29uY2F0KG9iamVjdC50b1N0cmluZygnaGV4JyksIFwiPlwiKTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgUERGQWJzdHJhY3RSZWZlcmVuY2UgfHwgb2JqZWN0IGluc3RhbmNlb2YgUERGVHJlZSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgdmFyIF9zdHJpbmcgPSBcIkQ6XCIuY29uY2F0KHBhZChvYmplY3QuZ2V0VVRDRnVsbFllYXIoKSwgNCkpICsgcGFkKG9iamVjdC5nZXRVVENNb250aCgpICsgMSwgMikgKyBwYWQob2JqZWN0LmdldFVUQ0RhdGUoKSwgMikgKyBwYWQob2JqZWN0LmdldFVUQ0hvdXJzKCksIDIpICsgcGFkKG9iamVjdC5nZXRVVENNaW51dGVzKCksIDIpICsgcGFkKG9iamVjdC5nZXRVVENTZWNvbmRzKCksIDIpICsgJ1onOyAvLyBFbmNyeXB0IHRoZSBzdHJpbmcgd2hlbiBuZWNlc3NhcnlcblxuXG4gICAgICAgIGlmIChlbmNyeXB0Rm4pIHtcbiAgICAgICAgICBfc3RyaW5nID0gZW5jcnlwdEZuKEJ1ZmZlci5mcm9tKF9zdHJpbmcsICdhc2NpaScpKS50b1N0cmluZygnYmluYXJ5Jyk7IC8vIEVzY2FwZSBjaGFyYWN0ZXJzIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjXG5cbiAgICAgICAgICBfc3RyaW5nID0gX3N0cmluZy5yZXBsYWNlKGVzY2FwYWJsZVJlLCBmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgcmV0dXJuIGVzY2FwYWJsZVtjXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBcIihcIi5jb25jYXQoX3N0cmluZywgXCIpXCIpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgdmFyIGl0ZW1zID0gb2JqZWN0Lm1hcChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHJldHVybiBQREZPYmplY3QuY29udmVydChlLCBlbmNyeXB0Rm4pO1xuICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgIHJldHVybiBcIltcIi5jb25jYXQoaXRlbXMsIFwiXVwiKTtcbiAgICAgIH0gZWxzZSBpZiAoe30udG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICB2YXIgb3V0ID0gWyc8PCddO1xuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICB2YXIgdmFsID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgb3V0LnB1c2goXCIvXCIuY29uY2F0KGtleSwgXCIgXCIpLmNvbmNhdChQREZPYmplY3QuY29udmVydCh2YWwsIGVuY3J5cHRGbikpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dC5wdXNoKCc+PicpO1xuICAgICAgICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gUERGT2JqZWN0Lm51bWJlcihvYmplY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KG9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm51bWJlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBudW1iZXIobikge1xuICAgICAgaWYgKG4gPiAtMWUyMSAmJiBuIDwgMWUyMSkge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChuICogMWU2KSAvIDFlNjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgbnVtYmVyOiBcIi5jb25jYXQobikpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQREZPYmplY3Q7XG59KCk7XG5cbnZhciBQREZSZWZlcmVuY2UgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QREZBYnN0cmFjdFJlZmVyZW5jZSkge1xuICBfaW5oZXJpdHMoUERGUmVmZXJlbmNlLCBfUERGQWJzdHJhY3RSZWZlcmVuY2UpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUERGUmVmZXJlbmNlKTtcblxuICBmdW5jdGlvbiBQREZSZWZlcmVuY2UoZG9jdW1lbnQsIGlkKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIGRhdGEgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERlJlZmVyZW5jZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuICAgIF90aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgX3RoaXMuaWQgPSBpZDtcbiAgICBfdGhpcy5kYXRhID0gZGF0YTtcbiAgICBfdGhpcy5nZW4gPSAwO1xuICAgIF90aGlzLmNvbXByZXNzID0gX3RoaXMuZG9jdW1lbnQuY29tcHJlc3MgJiYgIV90aGlzLmRhdGEuRmlsdGVyO1xuICAgIF90aGlzLnVuY29tcHJlc3NlZExlbmd0aCA9IDA7XG4gICAgX3RoaXMuYnVmZmVyID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBERlJlZmVyZW5jZSwgW3tcbiAgICBrZXk6IFwid3JpdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGUoY2h1bmspIHtcbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rICsgJ1xcbicsICdiaW5hcnknKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bmNvbXByZXNzZWRMZW5ndGggKz0gY2h1bmsubGVuZ3RoO1xuXG4gICAgICBpZiAodGhpcy5kYXRhLkxlbmd0aCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZGF0YS5MZW5ndGggPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHRoaXMuZGF0YS5MZW5ndGggKz0gY2h1bmsubGVuZ3RoO1xuXG4gICAgICBpZiAodGhpcy5jb21wcmVzcykge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLkZpbHRlciA9ICdGbGF0ZURlY29kZSc7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVuZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmQoY2h1bmspIHtcbiAgICAgIGlmIChjaHVuaykge1xuICAgICAgICB0aGlzLndyaXRlKGNodW5rKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmluYWxpemVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmluYWxpemUoKSB7XG4gICAgICB0aGlzLm9mZnNldCA9IHRoaXMuZG9jdW1lbnQuX29mZnNldDtcbiAgICAgIHZhciBlbmNyeXB0Rm4gPSB0aGlzLmRvY3VtZW50Ll9zZWN1cml0eSA/IHRoaXMuZG9jdW1lbnQuX3NlY3VyaXR5LmdldEVuY3J5cHRGbih0aGlzLmlkLCB0aGlzLmdlbikgOiBudWxsO1xuXG4gICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmNvbmNhdCh0aGlzLmJ1ZmZlcik7XG5cbiAgICAgICAgaWYgKHRoaXMuY29tcHJlc3MpIHtcbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IF96bGliLmRlZmF1bHQuZGVmbGF0ZVN5bmModGhpcy5idWZmZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVuY3J5cHRGbikge1xuICAgICAgICAgIHRoaXMuYnVmZmVyID0gZW5jcnlwdEZuKHRoaXMuYnVmZmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0YS5MZW5ndGggPSB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZG9jdW1lbnQuX3dyaXRlKFwiXCIuY29uY2F0KHRoaXMuaWQsIFwiIFwiKS5jb25jYXQodGhpcy5nZW4sIFwiIG9ialwiKSk7XG5cbiAgICAgIHRoaXMuZG9jdW1lbnQuX3dyaXRlKFBERk9iamVjdC5jb252ZXJ0KHRoaXMuZGF0YSwgZW5jcnlwdEZuKSk7XG5cbiAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5fd3JpdGUoJ3N0cmVhbScpO1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnQuX3dyaXRlKHRoaXMuYnVmZmVyKTtcblxuICAgICAgICB0aGlzLmJ1ZmZlciA9IFtdOyAvLyBmcmVlIHVwIG1lbW9yeVxuXG4gICAgICAgIHRoaXMuZG9jdW1lbnQuX3dyaXRlKCdcXG5lbmRzdHJlYW0nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kb2N1bWVudC5fd3JpdGUoJ2VuZG9iaicpO1xuXG4gICAgICB0aGlzLmRvY3VtZW50Ll9yZWZFbmQodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvU3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHRoaXMuaWQsIFwiIFwiKS5jb25jYXQodGhpcy5nZW4sIFwiIFJcIik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBERlJlZmVyZW5jZTtcbn0oUERGQWJzdHJhY3RSZWZlcmVuY2UpO1xuLypcclxuUERGUGFnZSAtIHJlcHJlc2VudHMgYSBzaW5nbGUgcGFnZSBpbiB0aGUgUERGIGRvY3VtZW50XHJcbkJ5IERldm9uIEdvdmV0dFxyXG4qL1xuXG5cbnZhciBERUZBVUxUX01BUkdJTlMgPSB7XG4gIHRvcDogNzIsXG4gIGxlZnQ6IDcyLFxuICBib3R0b206IDcyLFxuICByaWdodDogNzJcbn07XG52YXIgU0laRVMgPSB7XG4gICc0QTAnOiBbNDc2Ny44NywgNjc0MC43OV0sXG4gICcyQTAnOiBbMzM3MC4zOSwgNDc2Ny44N10sXG4gIEEwOiBbMjM4My45NCwgMzM3MC4zOV0sXG4gIEExOiBbMTY4My43OCwgMjM4My45NF0sXG4gIEEyOiBbMTE5MC41NSwgMTY4My43OF0sXG4gIEEzOiBbODQxLjg5LCAxMTkwLjU1XSxcbiAgQTQ6IFs1OTUuMjgsIDg0MS44OV0sXG4gIEE1OiBbNDE5LjUzLCA1OTUuMjhdLFxuICBBNjogWzI5Ny42NCwgNDE5LjUzXSxcbiAgQTc6IFsyMDkuNzYsIDI5Ny42NF0sXG4gIEE4OiBbMTQ3LjQsIDIwOS43Nl0sXG4gIEE5OiBbMTA0Ljg4LCAxNDcuNF0sXG4gIEExMDogWzczLjcsIDEwNC44OF0sXG4gIEIwOiBbMjgzNC42NSwgNDAwOC4xOV0sXG4gIEIxOiBbMjAwNC4wOSwgMjgzNC42NV0sXG4gIEIyOiBbMTQxNy4zMiwgMjAwNC4wOV0sXG4gIEIzOiBbMTAwMC42MywgMTQxNy4zMl0sXG4gIEI0OiBbNzA4LjY2LCAxMDAwLjYzXSxcbiAgQjU6IFs0OTguOSwgNzA4LjY2XSxcbiAgQjY6IFszNTQuMzMsIDQ5OC45XSxcbiAgQjc6IFsyNDkuNDUsIDM1NC4zM10sXG4gIEI4OiBbMTc1Ljc1LCAyNDkuNDVdLFxuICBCOTogWzEyNC43MiwgMTc1Ljc1XSxcbiAgQjEwOiBbODcuODcsIDEyNC43Ml0sXG4gIEMwOiBbMjU5OS4zNywgMzY3Ni41NF0sXG4gIEMxOiBbMTgzNi44NSwgMjU5OS4zN10sXG4gIEMyOiBbMTI5OC4yNywgMTgzNi44NV0sXG4gIEMzOiBbOTE4LjQzLCAxMjk4LjI3XSxcbiAgQzQ6IFs2NDkuMTMsIDkxOC40M10sXG4gIEM1OiBbNDU5LjIxLCA2NDkuMTNdLFxuICBDNjogWzMyMy4xNSwgNDU5LjIxXSxcbiAgQzc6IFsyMjkuNjEsIDMyMy4xNV0sXG4gIEM4OiBbMTYxLjU3LCAyMjkuNjFdLFxuICBDOTogWzExMy4zOSwgMTYxLjU3XSxcbiAgQzEwOiBbNzkuMzcsIDExMy4zOV0sXG4gIFJBMDogWzI0MzcuOCwgMzQ1OC4yN10sXG4gIFJBMTogWzE3MjkuMTMsIDI0MzcuOF0sXG4gIFJBMjogWzEyMTguOSwgMTcyOS4xM10sXG4gIFJBMzogWzg2NC41NywgMTIxOC45XSxcbiAgUkE0OiBbNjA5LjQ1LCA4NjQuNTddLFxuICBTUkEwOiBbMjU1MS4xOCwgMzYyOC4zNV0sXG4gIFNSQTE6IFsxODE0LjE3LCAyNTUxLjE4XSxcbiAgU1JBMjogWzEyNzUuNTksIDE4MTQuMTddLFxuICBTUkEzOiBbOTA3LjA5LCAxMjc1LjU5XSxcbiAgU1JBNDogWzYzNy44LCA5MDcuMDldLFxuICBFWEVDVVRJVkU6IFs1MjEuODYsIDc1Ni4wXSxcbiAgRk9MSU86IFs2MTIuMCwgOTM2LjBdLFxuICBMRUdBTDogWzYxMi4wLCAxMDA4LjBdLFxuICBMRVRURVI6IFs2MTIuMCwgNzkyLjBdLFxuICBUQUJMT0lEOiBbNzkyLjAsIDEyMjQuMF1cbn07XG5cbnZhciBQREZQYWdlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUERGUGFnZShkb2N1bWVudCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZQYWdlKTtcblxuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICB0aGlzLnNpemUgPSBvcHRpb25zLnNpemUgfHwgJ2xldHRlcic7XG4gICAgdGhpcy5sYXlvdXQgPSBvcHRpb25zLmxheW91dCB8fCAncG9ydHJhaXQnOyAvLyBwcm9jZXNzIG1hcmdpbnNcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5tYXJnaW4gPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLm1hcmdpbnMgPSB7XG4gICAgICAgIHRvcDogb3B0aW9ucy5tYXJnaW4sXG4gICAgICAgIGxlZnQ6IG9wdGlvbnMubWFyZ2luLFxuICAgICAgICBib3R0b206IG9wdGlvbnMubWFyZ2luLFxuICAgICAgICByaWdodDogb3B0aW9ucy5tYXJnaW5cbiAgICAgIH07IC8vIGRlZmF1bHQgdG8gMSBpbmNoIG1hcmdpbnNcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXJnaW5zID0gb3B0aW9ucy5tYXJnaW5zIHx8IERFRkFVTFRfTUFSR0lOUztcbiAgICB9IC8vIGNhbGN1bGF0ZSBwYWdlIGRpbWVuc2lvbnNcblxuXG4gICAgdmFyIGRpbWVuc2lvbnMgPSBBcnJheS5pc0FycmF5KHRoaXMuc2l6ZSkgPyB0aGlzLnNpemUgOiBTSVpFU1t0aGlzLnNpemUudG9VcHBlckNhc2UoKV07XG4gICAgdGhpcy53aWR0aCA9IGRpbWVuc2lvbnNbdGhpcy5sYXlvdXQgPT09ICdwb3J0cmFpdCcgPyAwIDogMV07XG4gICAgdGhpcy5oZWlnaHQgPSBkaW1lbnNpb25zW3RoaXMubGF5b3V0ID09PSAncG9ydHJhaXQnID8gMSA6IDBdO1xuICAgIHRoaXMuY29udGVudCA9IHRoaXMuZG9jdW1lbnQucmVmKCk7IC8vIEluaXRpYWxpemUgdGhlIEZvbnQsIFhPYmplY3QsIGFuZCBFeHRHU3RhdGUgZGljdGlvbmFyaWVzXG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHRoaXMuZG9jdW1lbnQucmVmKHtcbiAgICAgIFByb2NTZXQ6IFsnUERGJywgJ1RleHQnLCAnSW1hZ2VCJywgJ0ltYWdlQycsICdJbWFnZUknXVxuICAgIH0pOyAvLyBUaGUgcGFnZSBkaWN0aW9uYXJ5XG5cbiAgICB0aGlzLmRpY3Rpb25hcnkgPSB0aGlzLmRvY3VtZW50LnJlZih7XG4gICAgICBUeXBlOiAnUGFnZScsXG4gICAgICBQYXJlbnQ6IHRoaXMuZG9jdW1lbnQuX3Jvb3QuZGF0YS5QYWdlcyxcbiAgICAgIE1lZGlhQm94OiBbMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdLFxuICAgICAgQ29udGVudHM6IHRoaXMuY29udGVudCxcbiAgICAgIFJlc291cmNlczogdGhpcy5yZXNvdXJjZXNcbiAgICB9KTtcbiAgICB0aGlzLm1hcmtpbmdzID0gW107XG4gIH0gLy8gTGF6aWx5IGNyZWF0ZSB0aGVzZSBvYmplY3RzXG5cblxuICBfY3JlYXRlQ2xhc3MoUERGUGFnZSwgW3tcbiAgICBrZXk6IFwibWF4WVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtYXhZKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0IC0gdGhpcy5tYXJnaW5zLmJvdHRvbTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGUoY2h1bmspIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQud3JpdGUoY2h1bmspO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5kKCkge1xuICAgICAgdGhpcy5kaWN0aW9uYXJ5LmVuZCgpO1xuICAgICAgdGhpcy5yZXNvdXJjZXMuZW5kKCk7XG4gICAgICByZXR1cm4gdGhpcy5jb250ZW50LmVuZCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb250c1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLnJlc291cmNlcy5kYXRhO1xuICAgICAgcmV0dXJuIGRhdGEuRm9udCAhPSBudWxsID8gZGF0YS5Gb250IDogZGF0YS5Gb250ID0ge307XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInhvYmplY3RzXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMucmVzb3VyY2VzLmRhdGE7XG4gICAgICByZXR1cm4gZGF0YS5YT2JqZWN0ICE9IG51bGwgPyBkYXRhLlhPYmplY3QgOiBkYXRhLlhPYmplY3QgPSB7fTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXh0X2dzdGF0ZXNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5yZXNvdXJjZXMuZGF0YTtcbiAgICAgIHJldHVybiBkYXRhLkV4dEdTdGF0ZSAhPSBudWxsID8gZGF0YS5FeHRHU3RhdGUgOiBkYXRhLkV4dEdTdGF0ZSA9IHt9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwYXR0ZXJuc1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLnJlc291cmNlcy5kYXRhO1xuICAgICAgcmV0dXJuIGRhdGEuUGF0dGVybiAhPSBudWxsID8gZGF0YS5QYXR0ZXJuIDogZGF0YS5QYXR0ZXJuID0ge307XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbG9yU3BhY2VzXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMucmVzb3VyY2VzLmRhdGE7XG4gICAgICByZXR1cm4gZGF0YS5Db2xvclNwYWNlIHx8IChkYXRhLkNvbG9yU3BhY2UgPSB7fSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFubm90YXRpb25zXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuZGljdGlvbmFyeS5kYXRhO1xuICAgICAgcmV0dXJuIGRhdGEuQW5ub3RzICE9IG51bGwgPyBkYXRhLkFubm90cyA6IGRhdGEuQW5ub3RzID0gW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0cnVjdFBhcmVudFRyZWVLZXlcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5kaWN0aW9uYXJ5LmRhdGE7XG4gICAgICByZXR1cm4gZGF0YS5TdHJ1Y3RQYXJlbnRzICE9IG51bGwgPyBkYXRhLlN0cnVjdFBhcmVudHMgOiBkYXRhLlN0cnVjdFBhcmVudHMgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZVN0cnVjdFBhcmVudFRyZWVOZXh0S2V5KCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBERlBhZ2U7XG59KCk7XG5cbnZhciBQREZOYW1lVHJlZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BERlRyZWUpIHtcbiAgX2luaGVyaXRzKFBERk5hbWVUcmVlLCBfUERGVHJlZSk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihQREZOYW1lVHJlZSk7XG5cbiAgZnVuY3Rpb24gUERGTmFtZVRyZWUoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERk5hbWVUcmVlKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQREZOYW1lVHJlZSwgW3tcbiAgICBrZXk6IFwiX2NvbXBhcmVLZXlzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jb21wYXJlS2V5cyhhLCBiKSB7XG4gICAgICByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfa2V5c05hbWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2tleXNOYW1lKCkge1xuICAgICAgcmV0dXJuIFwiTmFtZXNcIjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2RhdGFGb3JLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2RhdGFGb3JLZXkoaykge1xuICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoayk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBERk5hbWVUcmVlO1xufShQREZUcmVlKTtcbi8qKlxyXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBpbiBhIHJhbmdlIGdyb3VwLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICogQHBhcmFtIHtudW1iZXJbXX0gcmFuZ2VHcm91cFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXG5cblxuZnVuY3Rpb24gaW5SYW5nZSh2YWx1ZSwgcmFuZ2VHcm91cCkge1xuICBpZiAodmFsdWUgPCByYW5nZUdyb3VwWzBdKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzdGFydFJhbmdlID0gMDtcbiAgdmFyIGVuZFJhbmdlID0gcmFuZ2VHcm91cC5sZW5ndGggLyAyO1xuXG4gIHdoaWxlIChzdGFydFJhbmdlIDw9IGVuZFJhbmdlKSB7XG4gICAgdmFyIG1pZGRsZVJhbmdlID0gTWF0aC5mbG9vcigoc3RhcnRSYW5nZSArIGVuZFJhbmdlKSAvIDIpOyAvLyBhY3R1YWwgYXJyYXkgaW5kZXhcblxuICAgIHZhciBhcnJheUluZGV4ID0gbWlkZGxlUmFuZ2UgKiAyOyAvLyBDaGVjayBpZiB2YWx1ZSBpcyBpbiByYW5nZSBwb2ludGVkIGJ5IGFjdHVhbCBpbmRleFxuXG4gICAgaWYgKHZhbHVlID49IHJhbmdlR3JvdXBbYXJyYXlJbmRleF0gJiYgdmFsdWUgPD0gcmFuZ2VHcm91cFthcnJheUluZGV4ICsgMV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA+IHJhbmdlR3JvdXBbYXJyYXlJbmRleCArIDFdKSB7XG4gICAgICAvLyBTZWFyY2ggUmlnaHQgU2lkZSBPZiBBcnJheVxuICAgICAgc3RhcnRSYW5nZSA9IG1pZGRsZVJhbmdlICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VhcmNoIExlZnQgU2lkZSBPZiBBcnJheVxuICAgICAgZW5kUmFuZ2UgPSBtaWRkbGVSYW5nZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXHJcbiAqIEEuMSBVbmFzc2lnbmVkIGNvZGUgcG9pbnRzIGluIFVuaWNvZGUgMy4yXHJcbiAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDU0I2FwcGVuZGl4LUEuMVxyXG4gKi9cblxuXG52YXIgdW5hc3NpZ25lZF9jb2RlX3BvaW50cyA9IFsweDAyMjEsIDB4MDIyMSwgMHgwMjM0LCAweDAyNGYsIDB4MDJhZSwgMHgwMmFmLCAweDAyZWYsIDB4MDJmZiwgMHgwMzUwLCAweDAzNWYsIDB4MDM3MCwgMHgwMzczLCAweDAzNzYsIDB4MDM3OSwgMHgwMzdiLCAweDAzN2QsIDB4MDM3ZiwgMHgwMzgzLCAweDAzOGIsIDB4MDM4YiwgMHgwMzhkLCAweDAzOGQsIDB4MDNhMiwgMHgwM2EyLCAweDAzY2YsIDB4MDNjZiwgMHgwM2Y3LCAweDAzZmYsIDB4MDQ4NywgMHgwNDg3LCAweDA0Y2YsIDB4MDRjZiwgMHgwNGY2LCAweDA0ZjcsIDB4MDRmYSwgMHgwNGZmLCAweDA1MTAsIDB4MDUzMCwgMHgwNTU3LCAweDA1NTgsIDB4MDU2MCwgMHgwNTYwLCAweDA1ODgsIDB4MDU4OCwgMHgwNThiLCAweDA1OTAsIDB4MDVhMiwgMHgwNWEyLCAweDA1YmEsIDB4MDViYSwgMHgwNWM1LCAweDA1Y2YsIDB4MDVlYiwgMHgwNWVmLCAweDA1ZjUsIDB4MDYwYiwgMHgwNjBkLCAweDA2MWEsIDB4MDYxYywgMHgwNjFlLCAweDA2MjAsIDB4MDYyMCwgMHgwNjNiLCAweDA2M2YsIDB4MDY1NiwgMHgwNjVmLCAweDA2ZWUsIDB4MDZlZiwgMHgwNmZmLCAweDA2ZmYsIDB4MDcwZSwgMHgwNzBlLCAweDA3MmQsIDB4MDcyZiwgMHgwNzRiLCAweDA3N2YsIDB4MDdiMiwgMHgwOTAwLCAweDA5MDQsIDB4MDkwNCwgMHgwOTNhLCAweDA5M2IsIDB4MDk0ZSwgMHgwOTRmLCAweDA5NTUsIDB4MDk1NywgMHgwOTcxLCAweDA5ODAsIDB4MDk4NCwgMHgwOTg0LCAweDA5OGQsIDB4MDk4ZSwgMHgwOTkxLCAweDA5OTIsIDB4MDlhOSwgMHgwOWE5LCAweDA5YjEsIDB4MDliMSwgMHgwOWIzLCAweDA5YjUsIDB4MDliYSwgMHgwOWJiLCAweDA5YmQsIDB4MDliZCwgMHgwOWM1LCAweDA5YzYsIDB4MDljOSwgMHgwOWNhLCAweDA5Y2UsIDB4MDlkNiwgMHgwOWQ4LCAweDA5ZGIsIDB4MDlkZSwgMHgwOWRlLCAweDA5ZTQsIDB4MDllNSwgMHgwOWZiLCAweDBhMDEsIDB4MGEwMywgMHgwYTA0LCAweDBhMGIsIDB4MGEwZSwgMHgwYTExLCAweDBhMTIsIDB4MGEyOSwgMHgwYTI5LCAweDBhMzEsIDB4MGEzMSwgMHgwYTM0LCAweDBhMzQsIDB4MGEzNywgMHgwYTM3LCAweDBhM2EsIDB4MGEzYiwgMHgwYTNkLCAweDBhM2QsIDB4MGE0MywgMHgwYTQ2LCAweDBhNDksIDB4MGE0YSwgMHgwYTRlLCAweDBhNTgsIDB4MGE1ZCwgMHgwYTVkLCAweDBhNWYsIDB4MGE2NSwgMHgwYTc1LCAweDBhODAsIDB4MGE4NCwgMHgwYTg0LCAweDBhOGMsIDB4MGE4YywgMHgwYThlLCAweDBhOGUsIDB4MGE5MiwgMHgwYTkyLCAweDBhYTksIDB4MGFhOSwgMHgwYWIxLCAweDBhYjEsIDB4MGFiNCwgMHgwYWI0LCAweDBhYmEsIDB4MGFiYiwgMHgwYWM2LCAweDBhYzYsIDB4MGFjYSwgMHgwYWNhLCAweDBhY2UsIDB4MGFjZiwgMHgwYWQxLCAweDBhZGYsIDB4MGFlMSwgMHgwYWU1LCAweDBhZjAsIDB4MGIwMCwgMHgwYjA0LCAweDBiMDQsIDB4MGIwZCwgMHgwYjBlLCAweDBiMTEsIDB4MGIxMiwgMHgwYjI5LCAweDBiMjksIDB4MGIzMSwgMHgwYjMxLCAweDBiMzQsIDB4MGIzNSwgMHgwYjNhLCAweDBiM2IsIDB4MGI0NCwgMHgwYjQ2LCAweDBiNDksIDB4MGI0YSwgMHgwYjRlLCAweDBiNTUsIDB4MGI1OCwgMHgwYjViLCAweDBiNWUsIDB4MGI1ZSwgMHgwYjYyLCAweDBiNjUsIDB4MGI3MSwgMHgwYjgxLCAweDBiODQsIDB4MGI4NCwgMHgwYjhiLCAweDBiOGQsIDB4MGI5MSwgMHgwYjkxLCAweDBiOTYsIDB4MGI5OCwgMHgwYjliLCAweDBiOWIsIDB4MGI5ZCwgMHgwYjlkLCAweDBiYTAsIDB4MGJhMiwgMHgwYmE1LCAweDBiYTcsIDB4MGJhYiwgMHgwYmFkLCAweDBiYjYsIDB4MGJiNiwgMHgwYmJhLCAweDBiYmQsIDB4MGJjMywgMHgwYmM1LCAweDBiYzksIDB4MGJjOSwgMHgwYmNlLCAweDBiZDYsIDB4MGJkOCwgMHgwYmU2LCAweDBiZjMsIDB4MGMwMCwgMHgwYzA0LCAweDBjMDQsIDB4MGMwZCwgMHgwYzBkLCAweDBjMTEsIDB4MGMxMSwgMHgwYzI5LCAweDBjMjksIDB4MGMzNCwgMHgwYzM0LCAweDBjM2EsIDB4MGMzZCwgMHgwYzQ1LCAweDBjNDUsIDB4MGM0OSwgMHgwYzQ5LCAweDBjNGUsIDB4MGM1NCwgMHgwYzU3LCAweDBjNWYsIDB4MGM2MiwgMHgwYzY1LCAweDBjNzAsIDB4MGM4MSwgMHgwYzg0LCAweDBjODQsIDB4MGM4ZCwgMHgwYzhkLCAweDBjOTEsIDB4MGM5MSwgMHgwY2E5LCAweDBjYTksIDB4MGNiNCwgMHgwY2I0LCAweDBjYmEsIDB4MGNiZCwgMHgwY2M1LCAweDBjYzUsIDB4MGNjOSwgMHgwY2M5LCAweDBjY2UsIDB4MGNkNCwgMHgwY2Q3LCAweDBjZGQsIDB4MGNkZiwgMHgwY2RmLCAweDBjZTIsIDB4MGNlNSwgMHgwY2YwLCAweDBkMDEsIDB4MGQwNCwgMHgwZDA0LCAweDBkMGQsIDB4MGQwZCwgMHgwZDExLCAweDBkMTEsIDB4MGQyOSwgMHgwZDI5LCAweDBkM2EsIDB4MGQzZCwgMHgwZDQ0LCAweDBkNDUsIDB4MGQ0OSwgMHgwZDQ5LCAweDBkNGUsIDB4MGQ1NiwgMHgwZDU4LCAweDBkNWYsIDB4MGQ2MiwgMHgwZDY1LCAweDBkNzAsIDB4MGQ4MSwgMHgwZDg0LCAweDBkODQsIDB4MGQ5NywgMHgwZDk5LCAweDBkYjIsIDB4MGRiMiwgMHgwZGJjLCAweDBkYmMsIDB4MGRiZSwgMHgwZGJmLCAweDBkYzcsIDB4MGRjOSwgMHgwZGNiLCAweDBkY2UsIDB4MGRkNSwgMHgwZGQ1LCAweDBkZDcsIDB4MGRkNywgMHgwZGUwLCAweDBkZjEsIDB4MGRmNSwgMHgwZTAwLCAweDBlM2IsIDB4MGUzZSwgMHgwZTVjLCAweDBlODAsIDB4MGU4MywgMHgwZTgzLCAweDBlODUsIDB4MGU4NiwgMHgwZTg5LCAweDBlODksIDB4MGU4YiwgMHgwZThjLCAweDBlOGUsIDB4MGU5MywgMHgwZTk4LCAweDBlOTgsIDB4MGVhMCwgMHgwZWEwLCAweDBlYTQsIDB4MGVhNCwgMHgwZWE2LCAweDBlYTYsIDB4MGVhOCwgMHgwZWE5LCAweDBlYWMsIDB4MGVhYywgMHgwZWJhLCAweDBlYmEsIDB4MGViZSwgMHgwZWJmLCAweDBlYzUsIDB4MGVjNSwgMHgwZWM3LCAweDBlYzcsIDB4MGVjZSwgMHgwZWNmLCAweDBlZGEsIDB4MGVkYiwgMHgwZWRlLCAweDBlZmYsIDB4MGY0OCwgMHgwZjQ4LCAweDBmNmIsIDB4MGY3MCwgMHgwZjhjLCAweDBmOGYsIDB4MGY5OCwgMHgwZjk4LCAweDBmYmQsIDB4MGZiZCwgMHgwZmNkLCAweDBmY2UsIDB4MGZkMCwgMHgwZmZmLCAweDEwMjIsIDB4MTAyMiwgMHgxMDI4LCAweDEwMjgsIDB4MTAyYiwgMHgxMDJiLCAweDEwMzMsIDB4MTAzNSwgMHgxMDNhLCAweDEwM2YsIDB4MTA1YSwgMHgxMDlmLCAweDEwYzYsIDB4MTBjZiwgMHgxMGY5LCAweDEwZmEsIDB4MTBmYywgMHgxMGZmLCAweDExNWEsIDB4MTE1ZSwgMHgxMWEzLCAweDExYTcsIDB4MTFmYSwgMHgxMWZmLCAweDEyMDcsIDB4MTIwNywgMHgxMjQ3LCAweDEyNDcsIDB4MTI0OSwgMHgxMjQ5LCAweDEyNGUsIDB4MTI0ZiwgMHgxMjU3LCAweDEyNTcsIDB4MTI1OSwgMHgxMjU5LCAweDEyNWUsIDB4MTI1ZiwgMHgxMjg3LCAweDEyODcsIDB4MTI4OSwgMHgxMjg5LCAweDEyOGUsIDB4MTI4ZiwgMHgxMmFmLCAweDEyYWYsIDB4MTJiMSwgMHgxMmIxLCAweDEyYjYsIDB4MTJiNywgMHgxMmJmLCAweDEyYmYsIDB4MTJjMSwgMHgxMmMxLCAweDEyYzYsIDB4MTJjNywgMHgxMmNmLCAweDEyY2YsIDB4MTJkNywgMHgxMmQ3LCAweDEyZWYsIDB4MTJlZiwgMHgxMzBmLCAweDEzMGYsIDB4MTMxMSwgMHgxMzExLCAweDEzMTYsIDB4MTMxNywgMHgxMzFmLCAweDEzMWYsIDB4MTM0NywgMHgxMzQ3LCAweDEzNWIsIDB4MTM2MCwgMHgxMzdkLCAweDEzOWYsIDB4MTNmNSwgMHgxNDAwLCAweDE2NzcsIDB4MTY3ZiwgMHgxNjlkLCAweDE2OWYsIDB4MTZmMSwgMHgxNmZmLCAweDE3MGQsIDB4MTcwZCwgMHgxNzE1LCAweDE3MWYsIDB4MTczNywgMHgxNzNmLCAweDE3NTQsIDB4MTc1ZiwgMHgxNzZkLCAweDE3NmQsIDB4MTc3MSwgMHgxNzcxLCAweDE3NzQsIDB4MTc3ZiwgMHgxN2RkLCAweDE3ZGYsIDB4MTdlYSwgMHgxN2ZmLCAweDE4MGYsIDB4MTgwZiwgMHgxODFhLCAweDE4MWYsIDB4MTg3OCwgMHgxODdmLCAweDE4YWEsIDB4MWRmZiwgMHgxZTljLCAweDFlOWYsIDB4MWVmYSwgMHgxZWZmLCAweDFmMTYsIDB4MWYxNywgMHgxZjFlLCAweDFmMWYsIDB4MWY0NiwgMHgxZjQ3LCAweDFmNGUsIDB4MWY0ZiwgMHgxZjU4LCAweDFmNTgsIDB4MWY1YSwgMHgxZjVhLCAweDFmNWMsIDB4MWY1YywgMHgxZjVlLCAweDFmNWUsIDB4MWY3ZSwgMHgxZjdmLCAweDFmYjUsIDB4MWZiNSwgMHgxZmM1LCAweDFmYzUsIDB4MWZkNCwgMHgxZmQ1LCAweDFmZGMsIDB4MWZkYywgMHgxZmYwLCAweDFmZjEsIDB4MWZmNSwgMHgxZmY1LCAweDFmZmYsIDB4MWZmZiwgMHgyMDUzLCAweDIwNTYsIDB4MjA1OCwgMHgyMDVlLCAweDIwNjQsIDB4MjA2OSwgMHgyMDcyLCAweDIwNzMsIDB4MjA4ZiwgMHgyMDlmLCAweDIwYjIsIDB4MjBjZiwgMHgyMGViLCAweDIwZmYsIDB4MjEzYiwgMHgyMTNjLCAweDIxNGMsIDB4MjE1MiwgMHgyMTg0LCAweDIxOGYsIDB4MjNjZiwgMHgyM2ZmLCAweDI0MjcsIDB4MjQzZiwgMHgyNDRiLCAweDI0NWYsIDB4MjRmZiwgMHgyNGZmLCAweDI2MTQsIDB4MjYxNSwgMHgyNjE4LCAweDI2MTgsIDB4MjY3ZSwgMHgyNjdmLCAweDI2OGEsIDB4MjcwMCwgMHgyNzA1LCAweDI3MDUsIDB4MjcwYSwgMHgyNzBiLCAweDI3MjgsIDB4MjcyOCwgMHgyNzRjLCAweDI3NGMsIDB4Mjc0ZSwgMHgyNzRlLCAweDI3NTMsIDB4Mjc1NSwgMHgyNzU3LCAweDI3NTcsIDB4Mjc1ZiwgMHgyNzYwLCAweDI3OTUsIDB4Mjc5NywgMHgyN2IwLCAweDI3YjAsIDB4MjdiZiwgMHgyN2NmLCAweDI3ZWMsIDB4MjdlZiwgMHgyYjAwLCAweDJlN2YsIDB4MmU5YSwgMHgyZTlhLCAweDJlZjQsIDB4MmVmZiwgMHgyZmQ2LCAweDJmZWYsIDB4MmZmYywgMHgyZmZmLCAweDMwNDAsIDB4MzA0MCwgMHgzMDk3LCAweDMwOTgsIDB4MzEwMCwgMHgzMTA0LCAweDMxMmQsIDB4MzEzMCwgMHgzMThmLCAweDMxOGYsIDB4MzFiOCwgMHgzMWVmLCAweDMyMWQsIDB4MzIxZiwgMHgzMjQ0LCAweDMyNTAsIDB4MzI3YywgMHgzMjdlLCAweDMyY2MsIDB4MzJjZiwgMHgzMmZmLCAweDMyZmYsIDB4MzM3NywgMHgzMzdhLCAweDMzZGUsIDB4MzNkZiwgMHgzM2ZmLCAweDMzZmYsIDB4NGRiNiwgMHg0ZGZmLCAweDlmYTYsIDB4OWZmZiwgMHhhNDhkLCAweGE0OGYsIDB4YTRjNywgMHhhYmZmLCAweGQ3YTQsIDB4ZDdmZiwgMHhmYTJlLCAweGZhMmYsIDB4ZmE2YiwgMHhmYWZmLCAweGZiMDcsIDB4ZmIxMiwgMHhmYjE4LCAweGZiMWMsIDB4ZmIzNywgMHhmYjM3LCAweGZiM2QsIDB4ZmIzZCwgMHhmYjNmLCAweGZiM2YsIDB4ZmI0MiwgMHhmYjQyLCAweGZiNDUsIDB4ZmI0NSwgMHhmYmIyLCAweGZiZDIsIDB4ZmQ0MCwgMHhmZDRmLCAweGZkOTAsIDB4ZmQ5MSwgMHhmZGM4LCAweGZkY2YsIDB4ZmRmZCwgMHhmZGZmLCAweGZlMTAsIDB4ZmUxZiwgMHhmZTI0LCAweGZlMmYsIDB4ZmU0NywgMHhmZTQ4LCAweGZlNTMsIDB4ZmU1MywgMHhmZTY3LCAweGZlNjcsIDB4ZmU2YywgMHhmZTZmLCAweGZlNzUsIDB4ZmU3NSwgMHhmZWZkLCAweGZlZmUsIDB4ZmYwMCwgMHhmZjAwLCAweGZmYmYsIDB4ZmZjMSwgMHhmZmM4LCAweGZmYzksIDB4ZmZkMCwgMHhmZmQxLCAweGZmZDgsIDB4ZmZkOSwgMHhmZmRkLCAweGZmZGYsIDB4ZmZlNywgMHhmZmU3LCAweGZmZWYsIDB4ZmZmOCwgMHgxMDAwMCwgMHgxMDJmZiwgMHgxMDMxZiwgMHgxMDMxZiwgMHgxMDMyNCwgMHgxMDMyZiwgMHgxMDM0YiwgMHgxMDNmZiwgMHgxMDQyNiwgMHgxMDQyNywgMHgxMDQ0ZSwgMHgxY2ZmZiwgMHgxZDBmNiwgMHgxZDBmZiwgMHgxZDEyNywgMHgxZDEyOSwgMHgxZDFkZSwgMHgxZDNmZiwgMHgxZDQ1NSwgMHgxZDQ1NSwgMHgxZDQ5ZCwgMHgxZDQ5ZCwgMHgxZDRhMCwgMHgxZDRhMSwgMHgxZDRhMywgMHgxZDRhNCwgMHgxZDRhNywgMHgxZDRhOCwgMHgxZDRhZCwgMHgxZDRhZCwgMHgxZDRiYSwgMHgxZDRiYSwgMHgxZDRiYywgMHgxZDRiYywgMHgxZDRjMSwgMHgxZDRjMSwgMHgxZDRjNCwgMHgxZDRjNCwgMHgxZDUwNiwgMHgxZDUwNiwgMHgxZDUwYiwgMHgxZDUwYywgMHgxZDUxNSwgMHgxZDUxNSwgMHgxZDUxZCwgMHgxZDUxZCwgMHgxZDUzYSwgMHgxZDUzYSwgMHgxZDUzZiwgMHgxZDUzZiwgMHgxZDU0NSwgMHgxZDU0NSwgMHgxZDU0NywgMHgxZDU0OSwgMHgxZDU1MSwgMHgxZDU1MSwgMHgxZDZhNCwgMHgxZDZhNywgMHgxZDdjYSwgMHgxZDdjZCwgMHgxZDgwMCwgMHgxZmZmZCwgMHgyYTZkNywgMHgyZjdmZiwgMHgyZmExZSwgMHgyZmZmZCwgMHgzMDAwMCwgMHgzZmZmZCwgMHg0MDAwMCwgMHg0ZmZmZCwgMHg1MDAwMCwgMHg1ZmZmZCwgMHg2MDAwMCwgMHg2ZmZmZCwgMHg3MDAwMCwgMHg3ZmZmZCwgMHg4MDAwMCwgMHg4ZmZmZCwgMHg5MDAwMCwgMHg5ZmZmZCwgMHhhMDAwMCwgMHhhZmZmZCwgMHhiMDAwMCwgMHhiZmZmZCwgMHhjMDAwMCwgMHhjZmZmZCwgMHhkMDAwMCwgMHhkZmZmZCwgMHhlMDAwMCwgMHhlMDAwMCwgMHhlMDAwMiwgMHhlMDAxZiwgMHhlMDA4MCwgMHhlZmZmZF07IC8vIHByZXR0aWVyLWlnbm9yZS1lbmRcblxudmFyIGlzVW5hc3NpZ25lZENvZGVQb2ludCA9IGZ1bmN0aW9uIGlzVW5hc3NpZ25lZENvZGVQb2ludChjaGFyYWN0ZXIpIHtcbiAgcmV0dXJuIGluUmFuZ2UoY2hhcmFjdGVyLCB1bmFzc2lnbmVkX2NvZGVfcG9pbnRzKTtcbn07IC8vIHByZXR0aWVyLWlnbm9yZS1zdGFydFxuXG4vKipcclxuICogQi4xIENvbW1vbmx5IG1hcHBlZCB0byBub3RoaW5nXHJcbiAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDU0I2FwcGVuZGl4LUIuMVxyXG4gKi9cblxuXG52YXIgY29tbW9ubHlfbWFwcGVkX3RvX25vdGhpbmcgPSBbMHgwMGFkLCAweDAwYWQsIDB4MDM0ZiwgMHgwMzRmLCAweDE4MDYsIDB4MTgwNiwgMHgxODBiLCAweDE4MGIsIDB4MTgwYywgMHgxODBjLCAweDE4MGQsIDB4MTgwZCwgMHgyMDBiLCAweDIwMGIsIDB4MjAwYywgMHgyMDBjLCAweDIwMGQsIDB4MjAwZCwgMHgyMDYwLCAweDIwNjAsIDB4ZmUwMCwgMHhmZTAwLCAweGZlMDEsIDB4ZmUwMSwgMHhmZTAyLCAweGZlMDIsIDB4ZmUwMywgMHhmZTAzLCAweGZlMDQsIDB4ZmUwNCwgMHhmZTA1LCAweGZlMDUsIDB4ZmUwNiwgMHhmZTA2LCAweGZlMDcsIDB4ZmUwNywgMHhmZTA4LCAweGZlMDgsIDB4ZmUwOSwgMHhmZTA5LCAweGZlMGEsIDB4ZmUwYSwgMHhmZTBiLCAweGZlMGIsIDB4ZmUwYywgMHhmZTBjLCAweGZlMGQsIDB4ZmUwZCwgMHhmZTBlLCAweGZlMGUsIDB4ZmUwZiwgMHhmZTBmLCAweGZlZmYsIDB4ZmVmZl07IC8vIHByZXR0aWVyLWlnbm9yZS1lbmRcblxudmFyIGlzQ29tbW9ubHlNYXBwZWRUb05vdGhpbmcgPSBmdW5jdGlvbiBpc0NvbW1vbmx5TWFwcGVkVG9Ob3RoaW5nKGNoYXJhY3Rlcikge1xuICByZXR1cm4gaW5SYW5nZShjaGFyYWN0ZXIsIGNvbW1vbmx5X21hcHBlZF90b19ub3RoaW5nKTtcbn07IC8vIHByZXR0aWVyLWlnbm9yZS1zdGFydFxuXG4vKipcclxuICogQy4xLjIgTm9uLUFTQ0lJIHNwYWNlIGNoYXJhY3RlcnNcclxuICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0NTQjYXBwZW5kaXgtQy4xLjJcclxuICovXG5cblxudmFyIG5vbl9BU0NJSV9zcGFjZV9jaGFyYWN0ZXJzID0gWzB4MDBhMCwgMHgwMGEwXG4vKiBOTy1CUkVBSyBTUEFDRSAqL1xuLCAweDE2ODAsIDB4MTY4MFxuLyogT0dIQU0gU1BBQ0UgTUFSSyAqL1xuLCAweDIwMDAsIDB4MjAwMFxuLyogRU4gUVVBRCAqL1xuLCAweDIwMDEsIDB4MjAwMVxuLyogRU0gUVVBRCAqL1xuLCAweDIwMDIsIDB4MjAwMlxuLyogRU4gU1BBQ0UgKi9cbiwgMHgyMDAzLCAweDIwMDNcbi8qIEVNIFNQQUNFICovXG4sIDB4MjAwNCwgMHgyMDA0XG4vKiBUSFJFRS1QRVItRU0gU1BBQ0UgKi9cbiwgMHgyMDA1LCAweDIwMDVcbi8qIEZPVVItUEVSLUVNIFNQQUNFICovXG4sIDB4MjAwNiwgMHgyMDA2XG4vKiBTSVgtUEVSLUVNIFNQQUNFICovXG4sIDB4MjAwNywgMHgyMDA3XG4vKiBGSUdVUkUgU1BBQ0UgKi9cbiwgMHgyMDA4LCAweDIwMDhcbi8qIFBVTkNUVUFUSU9OIFNQQUNFICovXG4sIDB4MjAwOSwgMHgyMDA5XG4vKiBUSElOIFNQQUNFICovXG4sIDB4MjAwYSwgMHgyMDBhXG4vKiBIQUlSIFNQQUNFICovXG4sIDB4MjAwYiwgMHgyMDBiXG4vKiBaRVJPIFdJRFRIIFNQQUNFICovXG4sIDB4MjAyZiwgMHgyMDJmXG4vKiBOQVJST1cgTk8tQlJFQUsgU1BBQ0UgKi9cbiwgMHgyMDVmLCAweDIwNWZcbi8qIE1FRElVTSBNQVRIRU1BVElDQUwgU1BBQ0UgKi9cbiwgMHgzMDAwLCAweDMwMDBcbi8qIElERU9HUkFQSElDIFNQQUNFICovXG5dOyAvLyBwcmV0dGllci1pZ25vcmUtZW5kXG5cbnZhciBpc05vbkFTQ0lJU3BhY2VDaGFyYWN0ZXIgPSBmdW5jdGlvbiBpc05vbkFTQ0lJU3BhY2VDaGFyYWN0ZXIoY2hhcmFjdGVyKSB7XG4gIHJldHVybiBpblJhbmdlKGNoYXJhY3Rlciwgbm9uX0FTQ0lJX3NwYWNlX2NoYXJhY3RlcnMpO1xufTsgLy8gcHJldHRpZXItaWdub3JlLXN0YXJ0XG5cblxudmFyIG5vbl9BU0NJSV9jb250cm9sc19jaGFyYWN0ZXJzID0gW1xuLyoqXHJcbiAqIEMuMi4yIE5vbi1BU0NJSSBjb250cm9sIGNoYXJhY3RlcnNcclxuICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0NTQjYXBwZW5kaXgtQy4yLjJcclxuICovXG4weDAwODAsIDB4MDA5ZlxuLyogW0NPTlRST0wgQ0hBUkFDVEVSU10gKi9cbiwgMHgwNmRkLCAweDA2ZGRcbi8qIEFSQUJJQyBFTkQgT0YgQVlBSCAqL1xuLCAweDA3MGYsIDB4MDcwZlxuLyogU1lSSUFDIEFCQlJFVklBVElPTiBNQVJLICovXG4sIDB4MTgwZSwgMHgxODBlXG4vKiBNT05HT0xJQU4gVk9XRUwgU0VQQVJBVE9SICovXG4sIDB4MjAwYywgMHgyMDBjXG4vKiBaRVJPIFdJRFRIIE5PTi1KT0lORVIgKi9cbiwgMHgyMDBkLCAweDIwMGRcbi8qIFpFUk8gV0lEVEggSk9JTkVSICovXG4sIDB4MjAyOCwgMHgyMDI4XG4vKiBMSU5FIFNFUEFSQVRPUiAqL1xuLCAweDIwMjksIDB4MjAyOVxuLyogUEFSQUdSQVBIIFNFUEFSQVRPUiAqL1xuLCAweDIwNjAsIDB4MjA2MFxuLyogV09SRCBKT0lORVIgKi9cbiwgMHgyMDYxLCAweDIwNjFcbi8qIEZVTkNUSU9OIEFQUExJQ0FUSU9OICovXG4sIDB4MjA2MiwgMHgyMDYyXG4vKiBJTlZJU0lCTEUgVElNRVMgKi9cbiwgMHgyMDYzLCAweDIwNjNcbi8qIElOVklTSUJMRSBTRVBBUkFUT1IgKi9cbiwgMHgyMDZhLCAweDIwNmZcbi8qIFtDT05UUk9MIENIQVJBQ1RFUlNdICovXG4sIDB4ZmVmZiwgMHhmZWZmXG4vKiBaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFICovXG4sIDB4ZmZmOSwgMHhmZmZjXG4vKiBbQ09OVFJPTCBDSEFSQUNURVJTXSAqL1xuLCAweDFkMTczLCAweDFkMTdhXG4vKiBbTVVTSUNBTCBDT05UUk9MIENIQVJBQ1RFUlNdICovXG5dO1xudmFyIG5vbl9jaGFyYWN0ZXJfY29kZXBvaW50cyA9IFtcbi8qKlxyXG4gKiBDLjQgTm9uLWNoYXJhY3RlciBjb2RlIHBvaW50c1xyXG4gKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ1NCNhcHBlbmRpeC1DLjRcclxuICovXG4weGZkZDAsIDB4ZmRlZlxuLyogW05PTkNIQVJBQ1RFUiBDT0RFIFBPSU5UU10gKi9cbiwgMHhmZmZlLCAweGZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4MWZmZmUsIDB4MWZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4MmZmZmUsIDB4MmZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4M2ZmZmUsIDB4M2ZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4NGZmZmUsIDB4NGZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4NWZmZmUsIDB4NWZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4NmZmZmUsIDB4NmZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4N2ZmZmUsIDB4N2ZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4OGZmZmUsIDB4OGZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4OWZmZmUsIDB4OWZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4YWZmZmUsIDB4YWZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4YmZmZmUsIDB4YmZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4Y2ZmZmUsIDB4Y2ZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4ZGZmZmUsIDB4ZGZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4ZWZmZmUsIDB4ZWZmZmZcbi8qIFtOT05DSEFSQUNURVIgQ09ERSBQT0lOVFNdICovXG4sIDB4MTBmZmZlLCAweDEwZmZmZlxuLyogW05PTkNIQVJBQ1RFUiBDT0RFIFBPSU5UU10gKi9cbl07XG4vKipcclxuICogMi4zLiAgUHJvaGliaXRlZCBPdXRwdXRcclxuICovXG5cbnZhciBwcm9oaWJpdGVkX2NoYXJhY3RlcnMgPSBbXG4vKipcclxuICogQy4yLjEgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzXHJcbiAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDU0I2FwcGVuZGl4LUMuMi4xXHJcbiAqL1xuMCwgMHgwMDFmXG4vKiBbQ09OVFJPTCBDSEFSQUNURVJTXSAqL1xuLCAweDAwN2YsIDB4MDA3ZlxuLyogREVMRVRFICovXG4sXG4vKipcclxuICogQy44IENoYW5nZSBkaXNwbGF5IHByb3BlcnRpZXMgb3IgYXJlIGRlcHJlY2F0ZWRcclxuICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0NTQjYXBwZW5kaXgtQy44XHJcbiAqL1xuMHgwMzQwLCAweDAzNDBcbi8qIENPTUJJTklORyBHUkFWRSBUT05FIE1BUksgKi9cbiwgMHgwMzQxLCAweDAzNDFcbi8qIENPTUJJTklORyBBQ1VURSBUT05FIE1BUksgKi9cbiwgMHgyMDBlLCAweDIwMGVcbi8qIExFRlQtVE8tUklHSFQgTUFSSyAqL1xuLCAweDIwMGYsIDB4MjAwZlxuLyogUklHSFQtVE8tTEVGVCBNQVJLICovXG4sIDB4MjAyYSwgMHgyMDJhXG4vKiBMRUZULVRPLVJJR0hUIEVNQkVERElORyAqL1xuLCAweDIwMmIsIDB4MjAyYlxuLyogUklHSFQtVE8tTEVGVCBFTUJFRERJTkcgKi9cbiwgMHgyMDJjLCAweDIwMmNcbi8qIFBPUCBESVJFQ1RJT05BTCBGT1JNQVRUSU5HICovXG4sIDB4MjAyZCwgMHgyMDJkXG4vKiBMRUZULVRPLVJJR0hUIE9WRVJSSURFICovXG4sIDB4MjAyZSwgMHgyMDJlXG4vKiBSSUdIVC1UTy1MRUZUIE9WRVJSSURFICovXG4sIDB4MjA2YSwgMHgyMDZhXG4vKiBJTkhJQklUIFNZTU1FVFJJQyBTV0FQUElORyAqL1xuLCAweDIwNmIsIDB4MjA2YlxuLyogQUNUSVZBVEUgU1lNTUVUUklDIFNXQVBQSU5HICovXG4sIDB4MjA2YywgMHgyMDZjXG4vKiBJTkhJQklUIEFSQUJJQyBGT1JNIFNIQVBJTkcgKi9cbiwgMHgyMDZkLCAweDIwNmRcbi8qIEFDVElWQVRFIEFSQUJJQyBGT1JNIFNIQVBJTkcgKi9cbiwgMHgyMDZlLCAweDIwNmVcbi8qIE5BVElPTkFMIERJR0lUIFNIQVBFUyAqL1xuLCAweDIwNmYsIDB4MjA2ZlxuLyogTk9NSU5BTCBESUdJVCBTSEFQRVMgKi9cbixcbi8qKlxyXG4gKiBDLjcgSW5hcHByb3ByaWF0ZSBmb3IgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uXHJcbiAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDU0I2FwcGVuZGl4LUMuN1xyXG4gKi9cbjB4MmZmMCwgMHgyZmZiXG4vKiBbSURFT0dSQVBISUMgREVTQ1JJUFRJT04gQ0hBUkFDVEVSU10gKi9cbixcbi8qKlxyXG4gKiBDLjUgU3Vycm9nYXRlIGNvZGVzXHJcbiAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDU0I2FwcGVuZGl4LUMuNVxyXG4gKi9cbjB4ZDgwMCwgMHhkZmZmLFxuLyoqXHJcbiAqIEMuMyBQcml2YXRlIHVzZVxyXG4gKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ1NCNhcHBlbmRpeC1DLjNcclxuICovXG4weGUwMDAsIDB4ZjhmZlxuLyogW1BSSVZBVEUgVVNFLCBQTEFORSAwXSAqL1xuLFxuLyoqXHJcbiAqIEMuNiBJbmFwcHJvcHJpYXRlIGZvciBwbGFpbiB0ZXh0XHJcbiAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDU0I2FwcGVuZGl4LUMuNlxyXG4gKi9cbjB4ZmZmOSwgMHhmZmY5XG4vKiBJTlRFUkxJTkVBUiBBTk5PVEFUSU9OIEFOQ0hPUiAqL1xuLCAweGZmZmEsIDB4ZmZmYVxuLyogSU5URVJMSU5FQVIgQU5OT1RBVElPTiBTRVBBUkFUT1IgKi9cbiwgMHhmZmZiLCAweGZmZmJcbi8qIElOVEVSTElORUFSIEFOTk9UQVRJT04gVEVSTUlOQVRPUiAqL1xuLCAweGZmZmMsIDB4ZmZmY1xuLyogT0JKRUNUIFJFUExBQ0VNRU5UIENIQVJBQ1RFUiAqL1xuLCAweGZmZmQsIDB4ZmZmZFxuLyogUkVQTEFDRU1FTlQgQ0hBUkFDVEVSICovXG4sXG4vKipcclxuICogQy45IFRhZ2dpbmcgY2hhcmFjdGVyc1xyXG4gKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ1NCNhcHBlbmRpeC1DLjlcclxuICovXG4weGUwMDAxLCAweGUwMDAxXG4vKiBMQU5HVUFHRSBUQUcgKi9cbiwgMHhlMDAyMCwgMHhlMDA3ZlxuLyogW1RBR0dJTkcgQ0hBUkFDVEVSU10gKi9cbixcbi8qKlxyXG4gKiBDLjMgUHJpdmF0ZSB1c2VcclxuICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0NTQjYXBwZW5kaXgtQy4zXHJcbiAqL1xuMHhmMDAwMCwgMHhmZmZmZFxuLyogW1BSSVZBVEUgVVNFLCBQTEFORSAxNV0gKi9cbiwgMHgxMDAwMDAsIDB4MTBmZmZkXG4vKiBbUFJJVkFURSBVU0UsIFBMQU5FIDE2XSAqL1xuXTsgLy8gcHJldHRpZXItaWdub3JlLWVuZFxuXG52YXIgaXNQcm9oaWJpdGVkQ2hhcmFjdGVyID0gZnVuY3Rpb24gaXNQcm9oaWJpdGVkQ2hhcmFjdGVyKGNoYXJhY3Rlcikge1xuICByZXR1cm4gaW5SYW5nZShjaGFyYWN0ZXIsIG5vbl9BU0NJSV9zcGFjZV9jaGFyYWN0ZXJzKSB8fCBpblJhbmdlKGNoYXJhY3RlciwgcHJvaGliaXRlZF9jaGFyYWN0ZXJzKSB8fCBpblJhbmdlKGNoYXJhY3Rlciwgbm9uX0FTQ0lJX2NvbnRyb2xzX2NoYXJhY3RlcnMpIHx8IGluUmFuZ2UoY2hhcmFjdGVyLCBub25fY2hhcmFjdGVyX2NvZGVwb2ludHMpO1xufTsgLy8gcHJldHRpZXItaWdub3JlLXN0YXJ0XG5cbi8qKlxyXG4gKiBELjEgQ2hhcmFjdGVycyB3aXRoIGJpZGlyZWN0aW9uYWwgcHJvcGVydHkgXCJSXCIgb3IgXCJBTFwiXHJcbiAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDU0I2FwcGVuZGl4LUQuMVxyXG4gKi9cblxuXG52YXIgYmlkaXJlY3Rpb25hbF9yX2FsID0gWzB4MDViZSwgMHgwNWJlLCAweDA1YzAsIDB4MDVjMCwgMHgwNWMzLCAweDA1YzMsIDB4MDVkMCwgMHgwNWVhLCAweDA1ZjAsIDB4MDVmNCwgMHgwNjFiLCAweDA2MWIsIDB4MDYxZiwgMHgwNjFmLCAweDA2MjEsIDB4MDYzYSwgMHgwNjQwLCAweDA2NGEsIDB4MDY2ZCwgMHgwNjZmLCAweDA2NzEsIDB4MDZkNSwgMHgwNmRkLCAweDA2ZGQsIDB4MDZlNSwgMHgwNmU2LCAweDA2ZmEsIDB4MDZmZSwgMHgwNzAwLCAweDA3MGQsIDB4MDcxMCwgMHgwNzEwLCAweDA3MTIsIDB4MDcyYywgMHgwNzgwLCAweDA3YTUsIDB4MDdiMSwgMHgwN2IxLCAweDIwMGYsIDB4MjAwZiwgMHhmYjFkLCAweGZiMWQsIDB4ZmIxZiwgMHhmYjI4LCAweGZiMmEsIDB4ZmIzNiwgMHhmYjM4LCAweGZiM2MsIDB4ZmIzZSwgMHhmYjNlLCAweGZiNDAsIDB4ZmI0MSwgMHhmYjQzLCAweGZiNDQsIDB4ZmI0NiwgMHhmYmIxLCAweGZiZDMsIDB4ZmQzZCwgMHhmZDUwLCAweGZkOGYsIDB4ZmQ5MiwgMHhmZGM3LCAweGZkZjAsIDB4ZmRmYywgMHhmZTcwLCAweGZlNzQsIDB4ZmU3NiwgMHhmZWZjXTsgLy8gcHJldHRpZXItaWdub3JlLWVuZFxuXG52YXIgaXNCaWRpcmVjdGlvbmFsUkFMID0gZnVuY3Rpb24gaXNCaWRpcmVjdGlvbmFsUkFMKGNoYXJhY3Rlcikge1xuICByZXR1cm4gaW5SYW5nZShjaGFyYWN0ZXIsIGJpZGlyZWN0aW9uYWxfcl9hbCk7XG59OyAvLyBwcmV0dGllci1pZ25vcmUtc3RhcnRcblxuLyoqXHJcbiAqIEQuMiBDaGFyYWN0ZXJzIHdpdGggYmlkaXJlY3Rpb25hbCBwcm9wZXJ0eSBcIkxcIlxyXG4gKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ1NCNhcHBlbmRpeC1ELjJcclxuICovXG5cblxudmFyIGJpZGlyZWN0aW9uYWxfbCA9IFsweDAwNDEsIDB4MDA1YSwgMHgwMDYxLCAweDAwN2EsIDB4MDBhYSwgMHgwMGFhLCAweDAwYjUsIDB4MDBiNSwgMHgwMGJhLCAweDAwYmEsIDB4MDBjMCwgMHgwMGQ2LCAweDAwZDgsIDB4MDBmNiwgMHgwMGY4LCAweDAyMjAsIDB4MDIyMiwgMHgwMjMzLCAweDAyNTAsIDB4MDJhZCwgMHgwMmIwLCAweDAyYjgsIDB4MDJiYiwgMHgwMmMxLCAweDAyZDAsIDB4MDJkMSwgMHgwMmUwLCAweDAyZTQsIDB4MDJlZSwgMHgwMmVlLCAweDAzN2EsIDB4MDM3YSwgMHgwMzg2LCAweDAzODYsIDB4MDM4OCwgMHgwMzhhLCAweDAzOGMsIDB4MDM4YywgMHgwMzhlLCAweDAzYTEsIDB4MDNhMywgMHgwM2NlLCAweDAzZDAsIDB4MDNmNSwgMHgwNDAwLCAweDA0ODIsIDB4MDQ4YSwgMHgwNGNlLCAweDA0ZDAsIDB4MDRmNSwgMHgwNGY4LCAweDA0ZjksIDB4MDUwMCwgMHgwNTBmLCAweDA1MzEsIDB4MDU1NiwgMHgwNTU5LCAweDA1NWYsIDB4MDU2MSwgMHgwNTg3LCAweDA1ODksIDB4MDU4OSwgMHgwOTAzLCAweDA5MDMsIDB4MDkwNSwgMHgwOTM5LCAweDA5M2QsIDB4MDk0MCwgMHgwOTQ5LCAweDA5NGMsIDB4MDk1MCwgMHgwOTUwLCAweDA5NTgsIDB4MDk2MSwgMHgwOTY0LCAweDA5NzAsIDB4MDk4MiwgMHgwOTgzLCAweDA5ODUsIDB4MDk4YywgMHgwOThmLCAweDA5OTAsIDB4MDk5MywgMHgwOWE4LCAweDA5YWEsIDB4MDliMCwgMHgwOWIyLCAweDA5YjIsIDB4MDliNiwgMHgwOWI5LCAweDA5YmUsIDB4MDljMCwgMHgwOWM3LCAweDA5YzgsIDB4MDljYiwgMHgwOWNjLCAweDA5ZDcsIDB4MDlkNywgMHgwOWRjLCAweDA5ZGQsIDB4MDlkZiwgMHgwOWUxLCAweDA5ZTYsIDB4MDlmMSwgMHgwOWY0LCAweDA5ZmEsIDB4MGEwNSwgMHgwYTBhLCAweDBhMGYsIDB4MGExMCwgMHgwYTEzLCAweDBhMjgsIDB4MGEyYSwgMHgwYTMwLCAweDBhMzIsIDB4MGEzMywgMHgwYTM1LCAweDBhMzYsIDB4MGEzOCwgMHgwYTM5LCAweDBhM2UsIDB4MGE0MCwgMHgwYTU5LCAweDBhNWMsIDB4MGE1ZSwgMHgwYTVlLCAweDBhNjYsIDB4MGE2ZiwgMHgwYTcyLCAweDBhNzQsIDB4MGE4MywgMHgwYTgzLCAweDBhODUsIDB4MGE4YiwgMHgwYThkLCAweDBhOGQsIDB4MGE4ZiwgMHgwYTkxLCAweDBhOTMsIDB4MGFhOCwgMHgwYWFhLCAweDBhYjAsIDB4MGFiMiwgMHgwYWIzLCAweDBhYjUsIDB4MGFiOSwgMHgwYWJkLCAweDBhYzAsIDB4MGFjOSwgMHgwYWM5LCAweDBhY2IsIDB4MGFjYywgMHgwYWQwLCAweDBhZDAsIDB4MGFlMCwgMHgwYWUwLCAweDBhZTYsIDB4MGFlZiwgMHgwYjAyLCAweDBiMDMsIDB4MGIwNSwgMHgwYjBjLCAweDBiMGYsIDB4MGIxMCwgMHgwYjEzLCAweDBiMjgsIDB4MGIyYSwgMHgwYjMwLCAweDBiMzIsIDB4MGIzMywgMHgwYjM2LCAweDBiMzksIDB4MGIzZCwgMHgwYjNlLCAweDBiNDAsIDB4MGI0MCwgMHgwYjQ3LCAweDBiNDgsIDB4MGI0YiwgMHgwYjRjLCAweDBiNTcsIDB4MGI1NywgMHgwYjVjLCAweDBiNWQsIDB4MGI1ZiwgMHgwYjYxLCAweDBiNjYsIDB4MGI3MCwgMHgwYjgzLCAweDBiODMsIDB4MGI4NSwgMHgwYjhhLCAweDBiOGUsIDB4MGI5MCwgMHgwYjkyLCAweDBiOTUsIDB4MGI5OSwgMHgwYjlhLCAweDBiOWMsIDB4MGI5YywgMHgwYjllLCAweDBiOWYsIDB4MGJhMywgMHgwYmE0LCAweDBiYTgsIDB4MGJhYSwgMHgwYmFlLCAweDBiYjUsIDB4MGJiNywgMHgwYmI5LCAweDBiYmUsIDB4MGJiZiwgMHgwYmMxLCAweDBiYzIsIDB4MGJjNiwgMHgwYmM4LCAweDBiY2EsIDB4MGJjYywgMHgwYmQ3LCAweDBiZDcsIDB4MGJlNywgMHgwYmYyLCAweDBjMDEsIDB4MGMwMywgMHgwYzA1LCAweDBjMGMsIDB4MGMwZSwgMHgwYzEwLCAweDBjMTIsIDB4MGMyOCwgMHgwYzJhLCAweDBjMzMsIDB4MGMzNSwgMHgwYzM5LCAweDBjNDEsIDB4MGM0NCwgMHgwYzYwLCAweDBjNjEsIDB4MGM2NiwgMHgwYzZmLCAweDBjODIsIDB4MGM4MywgMHgwYzg1LCAweDBjOGMsIDB4MGM4ZSwgMHgwYzkwLCAweDBjOTIsIDB4MGNhOCwgMHgwY2FhLCAweDBjYjMsIDB4MGNiNSwgMHgwY2I5LCAweDBjYmUsIDB4MGNiZSwgMHgwY2MwLCAweDBjYzQsIDB4MGNjNywgMHgwY2M4LCAweDBjY2EsIDB4MGNjYiwgMHgwY2Q1LCAweDBjZDYsIDB4MGNkZSwgMHgwY2RlLCAweDBjZTAsIDB4MGNlMSwgMHgwY2U2LCAweDBjZWYsIDB4MGQwMiwgMHgwZDAzLCAweDBkMDUsIDB4MGQwYywgMHgwZDBlLCAweDBkMTAsIDB4MGQxMiwgMHgwZDI4LCAweDBkMmEsIDB4MGQzOSwgMHgwZDNlLCAweDBkNDAsIDB4MGQ0NiwgMHgwZDQ4LCAweDBkNGEsIDB4MGQ0YywgMHgwZDU3LCAweDBkNTcsIDB4MGQ2MCwgMHgwZDYxLCAweDBkNjYsIDB4MGQ2ZiwgMHgwZDgyLCAweDBkODMsIDB4MGQ4NSwgMHgwZDk2LCAweDBkOWEsIDB4MGRiMSwgMHgwZGIzLCAweDBkYmIsIDB4MGRiZCwgMHgwZGJkLCAweDBkYzAsIDB4MGRjNiwgMHgwZGNmLCAweDBkZDEsIDB4MGRkOCwgMHgwZGRmLCAweDBkZjIsIDB4MGRmNCwgMHgwZTAxLCAweDBlMzAsIDB4MGUzMiwgMHgwZTMzLCAweDBlNDAsIDB4MGU0NiwgMHgwZTRmLCAweDBlNWIsIDB4MGU4MSwgMHgwZTgyLCAweDBlODQsIDB4MGU4NCwgMHgwZTg3LCAweDBlODgsIDB4MGU4YSwgMHgwZThhLCAweDBlOGQsIDB4MGU4ZCwgMHgwZTk0LCAweDBlOTcsIDB4MGU5OSwgMHgwZTlmLCAweDBlYTEsIDB4MGVhMywgMHgwZWE1LCAweDBlYTUsIDB4MGVhNywgMHgwZWE3LCAweDBlYWEsIDB4MGVhYiwgMHgwZWFkLCAweDBlYjAsIDB4MGViMiwgMHgwZWIzLCAweDBlYmQsIDB4MGViZCwgMHgwZWMwLCAweDBlYzQsIDB4MGVjNiwgMHgwZWM2LCAweDBlZDAsIDB4MGVkOSwgMHgwZWRjLCAweDBlZGQsIDB4MGYwMCwgMHgwZjE3LCAweDBmMWEsIDB4MGYzNCwgMHgwZjM2LCAweDBmMzYsIDB4MGYzOCwgMHgwZjM4LCAweDBmM2UsIDB4MGY0NywgMHgwZjQ5LCAweDBmNmEsIDB4MGY3ZiwgMHgwZjdmLCAweDBmODUsIDB4MGY4NSwgMHgwZjg4LCAweDBmOGIsIDB4MGZiZSwgMHgwZmM1LCAweDBmYzcsIDB4MGZjYywgMHgwZmNmLCAweDBmY2YsIDB4MTAwMCwgMHgxMDIxLCAweDEwMjMsIDB4MTAyNywgMHgxMDI5LCAweDEwMmEsIDB4MTAyYywgMHgxMDJjLCAweDEwMzEsIDB4MTAzMSwgMHgxMDM4LCAweDEwMzgsIDB4MTA0MCwgMHgxMDU3LCAweDEwYTAsIDB4MTBjNSwgMHgxMGQwLCAweDEwZjgsIDB4MTBmYiwgMHgxMGZiLCAweDExMDAsIDB4MTE1OSwgMHgxMTVmLCAweDExYTIsIDB4MTFhOCwgMHgxMWY5LCAweDEyMDAsIDB4MTIwNiwgMHgxMjA4LCAweDEyNDYsIDB4MTI0OCwgMHgxMjQ4LCAweDEyNGEsIDB4MTI0ZCwgMHgxMjUwLCAweDEyNTYsIDB4MTI1OCwgMHgxMjU4LCAweDEyNWEsIDB4MTI1ZCwgMHgxMjYwLCAweDEyODYsIDB4MTI4OCwgMHgxMjg4LCAweDEyOGEsIDB4MTI4ZCwgMHgxMjkwLCAweDEyYWUsIDB4MTJiMCwgMHgxMmIwLCAweDEyYjIsIDB4MTJiNSwgMHgxMmI4LCAweDEyYmUsIDB4MTJjMCwgMHgxMmMwLCAweDEyYzIsIDB4MTJjNSwgMHgxMmM4LCAweDEyY2UsIDB4MTJkMCwgMHgxMmQ2LCAweDEyZDgsIDB4MTJlZSwgMHgxMmYwLCAweDEzMGUsIDB4MTMxMCwgMHgxMzEwLCAweDEzMTIsIDB4MTMxNSwgMHgxMzE4LCAweDEzMWUsIDB4MTMyMCwgMHgxMzQ2LCAweDEzNDgsIDB4MTM1YSwgMHgxMzYxLCAweDEzN2MsIDB4MTNhMCwgMHgxM2Y0LCAweDE0MDEsIDB4MTY3NiwgMHgxNjgxLCAweDE2OWEsIDB4MTZhMCwgMHgxNmYwLCAweDE3MDAsIDB4MTcwYywgMHgxNzBlLCAweDE3MTEsIDB4MTcyMCwgMHgxNzMxLCAweDE3MzUsIDB4MTczNiwgMHgxNzQwLCAweDE3NTEsIDB4MTc2MCwgMHgxNzZjLCAweDE3NmUsIDB4MTc3MCwgMHgxNzgwLCAweDE3YjYsIDB4MTdiZSwgMHgxN2M1LCAweDE3YzcsIDB4MTdjOCwgMHgxN2Q0LCAweDE3ZGEsIDB4MTdkYywgMHgxN2RjLCAweDE3ZTAsIDB4MTdlOSwgMHgxODEwLCAweDE4MTksIDB4MTgyMCwgMHgxODc3LCAweDE4ODAsIDB4MThhOCwgMHgxZTAwLCAweDFlOWIsIDB4MWVhMCwgMHgxZWY5LCAweDFmMDAsIDB4MWYxNSwgMHgxZjE4LCAweDFmMWQsIDB4MWYyMCwgMHgxZjQ1LCAweDFmNDgsIDB4MWY0ZCwgMHgxZjUwLCAweDFmNTcsIDB4MWY1OSwgMHgxZjU5LCAweDFmNWIsIDB4MWY1YiwgMHgxZjVkLCAweDFmNWQsIDB4MWY1ZiwgMHgxZjdkLCAweDFmODAsIDB4MWZiNCwgMHgxZmI2LCAweDFmYmMsIDB4MWZiZSwgMHgxZmJlLCAweDFmYzIsIDB4MWZjNCwgMHgxZmM2LCAweDFmY2MsIDB4MWZkMCwgMHgxZmQzLCAweDFmZDYsIDB4MWZkYiwgMHgxZmUwLCAweDFmZWMsIDB4MWZmMiwgMHgxZmY0LCAweDFmZjYsIDB4MWZmYywgMHgyMDBlLCAweDIwMGUsIDB4MjA3MSwgMHgyMDcxLCAweDIwN2YsIDB4MjA3ZiwgMHgyMTAyLCAweDIxMDIsIDB4MjEwNywgMHgyMTA3LCAweDIxMGEsIDB4MjExMywgMHgyMTE1LCAweDIxMTUsIDB4MjExOSwgMHgyMTFkLCAweDIxMjQsIDB4MjEyNCwgMHgyMTI2LCAweDIxMjYsIDB4MjEyOCwgMHgyMTI4LCAweDIxMmEsIDB4MjEyZCwgMHgyMTJmLCAweDIxMzEsIDB4MjEzMywgMHgyMTM5LCAweDIxM2QsIDB4MjEzZiwgMHgyMTQ1LCAweDIxNDksIDB4MjE2MCwgMHgyMTgzLCAweDIzMzYsIDB4MjM3YSwgMHgyMzk1LCAweDIzOTUsIDB4MjQ5YywgMHgyNGU5LCAweDMwMDUsIDB4MzAwNywgMHgzMDIxLCAweDMwMjksIDB4MzAzMSwgMHgzMDM1LCAweDMwMzgsIDB4MzAzYywgMHgzMDQxLCAweDMwOTYsIDB4MzA5ZCwgMHgzMDlmLCAweDMwYTEsIDB4MzBmYSwgMHgzMGZjLCAweDMwZmYsIDB4MzEwNSwgMHgzMTJjLCAweDMxMzEsIDB4MzE4ZSwgMHgzMTkwLCAweDMxYjcsIDB4MzFmMCwgMHgzMjFjLCAweDMyMjAsIDB4MzI0MywgMHgzMjYwLCAweDMyN2IsIDB4MzI3ZiwgMHgzMmIwLCAweDMyYzAsIDB4MzJjYiwgMHgzMmQwLCAweDMyZmUsIDB4MzMwMCwgMHgzMzc2LCAweDMzN2IsIDB4MzNkZCwgMHgzM2UwLCAweDMzZmUsIDB4MzQwMCwgMHg0ZGI1LCAweDRlMDAsIDB4OWZhNSwgMHhhMDAwLCAweGE0OGMsIDB4YWMwMCwgMHhkN2EzLCAweGQ4MDAsIDB4ZmEyZCwgMHhmYTMwLCAweGZhNmEsIDB4ZmIwMCwgMHhmYjA2LCAweGZiMTMsIDB4ZmIxNywgMHhmZjIxLCAweGZmM2EsIDB4ZmY0MSwgMHhmZjVhLCAweGZmNjYsIDB4ZmZiZSwgMHhmZmMyLCAweGZmYzcsIDB4ZmZjYSwgMHhmZmNmLCAweGZmZDIsIDB4ZmZkNywgMHhmZmRhLCAweGZmZGMsIDB4MTAzMDAsIDB4MTAzMWUsIDB4MTAzMjAsIDB4MTAzMjMsIDB4MTAzMzAsIDB4MTAzNGEsIDB4MTA0MDAsIDB4MTA0MjUsIDB4MTA0MjgsIDB4MTA0NGQsIDB4MWQwMDAsIDB4MWQwZjUsIDB4MWQxMDAsIDB4MWQxMjYsIDB4MWQxMmEsIDB4MWQxNjYsIDB4MWQxNmEsIDB4MWQxNzIsIDB4MWQxODMsIDB4MWQxODQsIDB4MWQxOGMsIDB4MWQxYTksIDB4MWQxYWUsIDB4MWQxZGQsIDB4MWQ0MDAsIDB4MWQ0NTQsIDB4MWQ0NTYsIDB4MWQ0OWMsIDB4MWQ0OWUsIDB4MWQ0OWYsIDB4MWQ0YTIsIDB4MWQ0YTIsIDB4MWQ0YTUsIDB4MWQ0YTYsIDB4MWQ0YTksIDB4MWQ0YWMsIDB4MWQ0YWUsIDB4MWQ0YjksIDB4MWQ0YmIsIDB4MWQ0YmIsIDB4MWQ0YmQsIDB4MWQ0YzAsIDB4MWQ0YzIsIDB4MWQ0YzMsIDB4MWQ0YzUsIDB4MWQ1MDUsIDB4MWQ1MDcsIDB4MWQ1MGEsIDB4MWQ1MGQsIDB4MWQ1MTQsIDB4MWQ1MTYsIDB4MWQ1MWMsIDB4MWQ1MWUsIDB4MWQ1MzksIDB4MWQ1M2IsIDB4MWQ1M2UsIDB4MWQ1NDAsIDB4MWQ1NDQsIDB4MWQ1NDYsIDB4MWQ1NDYsIDB4MWQ1NGEsIDB4MWQ1NTAsIDB4MWQ1NTIsIDB4MWQ2YTMsIDB4MWQ2YTgsIDB4MWQ3YzksIDB4MjAwMDAsIDB4MmE2ZDYsIDB4MmY4MDAsIDB4MmZhMWQsIDB4ZjAwMDAsIDB4ZmZmZmQsIDB4MTAwMDAwLCAweDEwZmZmZF07IC8vIHByZXR0aWVyLWlnbm9yZS1lbmRcblxudmFyIGlzQmlkaXJlY3Rpb25hbEwgPSBmdW5jdGlvbiBpc0JpZGlyZWN0aW9uYWxMKGNoYXJhY3Rlcikge1xuICByZXR1cm4gaW5SYW5nZShjaGFyYWN0ZXIsIGJpZGlyZWN0aW9uYWxfbCk7XG59O1xuLyoqXHJcbiAqIG5vbi1BU0NJSSBzcGFjZSBjaGFyYWN0ZXJzIFtTdHJpbmdQcmVwLCBDLjEuMl0gdGhhdCBjYW4gYmVcclxuICogbWFwcGVkIHRvIFNQQUNFIChVKzAwMjApXHJcbiAqL1xuXG5cbnZhciBtYXBwaW5nMnNwYWNlID0gaXNOb25BU0NJSVNwYWNlQ2hhcmFjdGVyO1xuLyoqXHJcbiAqIHRoZSBcImNvbW1vbmx5IG1hcHBlZCB0byBub3RoaW5nXCIgY2hhcmFjdGVycyBbU3RyaW5nUHJlcCwgQi4xXVxyXG4gKiB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gbm90aGluZy5cclxuICovXG5cbnZhciBtYXBwaW5nMm5vdGhpbmcgPSBpc0NvbW1vbmx5TWFwcGVkVG9Ob3RoaW5nOyAvLyB1dGlsc1xuXG52YXIgZ2V0Q29kZVBvaW50ID0gZnVuY3Rpb24gZ2V0Q29kZVBvaW50KGNoYXJhY3Rlcikge1xuICByZXR1cm4gY2hhcmFjdGVyLmNvZGVQb2ludEF0KDApO1xufTtcblxudmFyIGZpcnN0ID0gZnVuY3Rpb24gZmlyc3QoeCkge1xuICByZXR1cm4geFswXTtcbn07XG5cbnZhciBsYXN0ID0gZnVuY3Rpb24gbGFzdCh4KSB7XG4gIHJldHVybiB4W3gubGVuZ3RoIC0gMV07XG59O1xuLyoqXHJcbiAqIENvbnZlcnQgcHJvdmlkZWQgc3RyaW5nIGludG8gYW4gYXJyYXkgb2YgVW5pY29kZSBDb2RlIFBvaW50cy5cclxuICogQmFzZWQgb24gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNDA5MTY1LzE1NTYyNDlcclxuICogYW5kIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2NvZGUtcG9pbnQtYXQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyW119XHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvQ29kZVBvaW50cyhpbnB1dCkge1xuICB2YXIgY29kZXBvaW50cyA9IFtdO1xuICB2YXIgc2l6ZSA9IGlucHV0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkgKz0gMSkge1xuICAgIHZhciBiZWZvcmUgPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuXG4gICAgaWYgKGJlZm9yZSA+PSAweGQ4MDAgJiYgYmVmb3JlIDw9IDB4ZGJmZiAmJiBzaXplID4gaSArIDEpIHtcbiAgICAgIHZhciBuZXh0ID0gaW5wdXQuY2hhckNvZGVBdChpICsgMSk7XG5cbiAgICAgIGlmIChuZXh0ID49IDB4ZGMwMCAmJiBuZXh0IDw9IDB4ZGZmZikge1xuICAgICAgICBjb2RlcG9pbnRzLnB1c2goKGJlZm9yZSAtIDB4ZDgwMCkgKiAweDQwMCArIG5leHQgLSAweGRjMDAgKyAweDEwMDAwKTtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb2RlcG9pbnRzLnB1c2goYmVmb3JlKTtcbiAgfVxuXG4gIHJldHVybiBjb2RlcG9pbnRzO1xufVxuLyoqXHJcbiAqIFNBU0xwcmVwLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcclxuICogQHBhcmFtIHtib29sZWFufSBvcHRzLmFsbG93VW5hc3NpZ25lZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKi9cblxuXG5mdW5jdGlvbiBzYXNscHJlcChpbnB1dCkge1xuICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzdHJpbmcuJyk7XG4gIH1cblxuICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9IC8vIDEuIE1hcFxuXG5cbiAgdmFyIG1hcHBlZF9pbnB1dCA9IHRvQ29kZVBvaW50cyhpbnB1dCkgLy8gMS4xIG1hcHBpbmcgdG8gc3BhY2VcbiAgLm1hcChmdW5jdGlvbiAoY2hhcmFjdGVyKSB7XG4gICAgcmV0dXJuIG1hcHBpbmcyc3BhY2UoY2hhcmFjdGVyKSA/IDB4MjAgOiBjaGFyYWN0ZXI7XG4gIH0pIC8vIDEuMiBtYXBwaW5nIHRvIG5vdGhpbmdcbiAgLmZpbHRlcihmdW5jdGlvbiAoY2hhcmFjdGVyKSB7XG4gICAgcmV0dXJuICFtYXBwaW5nMm5vdGhpbmcoY2hhcmFjdGVyKTtcbiAgfSk7IC8vIDIuIE5vcm1hbGl6ZVxuXG4gIHZhciBub3JtYWxpemVkX2lucHV0ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkobnVsbCwgbWFwcGVkX2lucHV0KS5ub3JtYWxpemUoJ05GS0MnKTtcbiAgdmFyIG5vcm1hbGl6ZWRfbWFwID0gdG9Db2RlUG9pbnRzKG5vcm1hbGl6ZWRfaW5wdXQpOyAvLyAzLiBQcm9oaWJpdFxuXG4gIHZhciBoYXNQcm9oaWJpdGVkID0gbm9ybWFsaXplZF9tYXAuc29tZShpc1Byb2hpYml0ZWRDaGFyYWN0ZXIpO1xuXG4gIGlmIChoYXNQcm9oaWJpdGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcm9oaWJpdGVkIGNoYXJhY3Rlciwgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MDEzI3NlY3Rpb24tMi4zJyk7XG4gIH0gLy8gVW5hc3NpZ25lZCBDb2RlIFBvaW50c1xuXG5cbiAgaWYgKG9wdHMuYWxsb3dVbmFzc2lnbmVkICE9PSB0cnVlKSB7XG4gICAgdmFyIGhhc1VuYXNzaWduZWQgPSBub3JtYWxpemVkX21hcC5zb21lKGlzVW5hc3NpZ25lZENvZGVQb2ludCk7XG5cbiAgICBpZiAoaGFzVW5hc3NpZ25lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFzc2lnbmVkIGNvZGUgcG9pbnQsIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDAxMyNzZWN0aW9uLTIuNScpO1xuICAgIH1cbiAgfSAvLyA0LiBjaGVjayBiaWRpXG5cblxuICB2YXIgaGFzQmlkaVJBTCA9IG5vcm1hbGl6ZWRfbWFwLnNvbWUoaXNCaWRpcmVjdGlvbmFsUkFMKTtcbiAgdmFyIGhhc0JpZGlMID0gbm9ybWFsaXplZF9tYXAuc29tZShpc0JpZGlyZWN0aW9uYWxMKTsgLy8gNC4xIElmIGEgc3RyaW5nIGNvbnRhaW5zIGFueSBSYW5kQUxDYXQgY2hhcmFjdGVyLCB0aGUgc3RyaW5nIE1VU1QgTk9UXG4gIC8vIGNvbnRhaW4gYW55IExDYXQgY2hhcmFjdGVyLlxuXG4gIGlmIChoYXNCaWRpUkFMICYmIGhhc0JpZGlMKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgbXVzdCBub3QgY29udGFpbiBSYW5kQUxDYXQgYW5kIExDYXQgYXQgdGhlIHNhbWUgdGltZSwnICsgJyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0NTQjc2VjdGlvbi02Jyk7XG4gIH1cbiAgLyoqXHJcbiAgICogNC4yIElmIGEgc3RyaW5nIGNvbnRhaW5zIGFueSBSYW5kQUxDYXQgY2hhcmFjdGVyLCBhIFJhbmRBTENhdFxyXG4gICAqIGNoYXJhY3RlciBNVVNUIGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZywgYW5kIGFcclxuICAgKiBSYW5kQUxDYXQgY2hhcmFjdGVyIE1VU1QgYmUgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcuXHJcbiAgICovXG5cblxuICB2YXIgaXNGaXJzdEJpZGlSQUwgPSBpc0JpZGlyZWN0aW9uYWxSQUwoZ2V0Q29kZVBvaW50KGZpcnN0KG5vcm1hbGl6ZWRfaW5wdXQpKSk7XG4gIHZhciBpc0xhc3RCaWRpUkFMID0gaXNCaWRpcmVjdGlvbmFsUkFMKGdldENvZGVQb2ludChsYXN0KG5vcm1hbGl6ZWRfaW5wdXQpKSk7XG5cbiAgaWYgKGhhc0JpZGlSQUwgJiYgIShpc0ZpcnN0QmlkaVJBTCAmJiBpc0xhc3RCaWRpUkFMKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmlkaXJlY3Rpb25hbCBSYW5kQUxDYXQgY2hhcmFjdGVyIG11c3QgYmUgdGhlIGZpcnN0IGFuZCB0aGUgbGFzdCcgKyAnIGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nLCBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0NTQjc2VjdGlvbi02Jyk7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZF9pbnB1dDtcbn1cblxudmFyIFBERlNlY3VyaXR5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgX2NyZWF0ZUNsYXNzKFBERlNlY3VyaXR5LCBudWxsLCBbe1xuICAgIGtleTogXCJnZW5lcmF0ZUZpbGVJRFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZW5lcmF0ZUZpbGVJRCgpIHtcbiAgICAgIHZhciBpbmZvID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIHZhciBpbmZvU3RyID0gXCJcIi5jb25jYXQoaW5mby5DcmVhdGlvbkRhdGUuZ2V0VGltZSgpLCBcIlxcblwiKTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIGluZm8pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICBpZiAoIWluZm8uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5mb1N0ciArPSBcIlwiLmNvbmNhdChrZXksIFwiOiBcIikuY29uY2F0KGluZm9ba2V5XS52YWx1ZU9mKCksIFwiXFxuXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29yZEFycmF5VG9CdWZmZXIoX2NyeXB0b0pzLmRlZmF1bHQuTUQ1KGluZm9TdHIpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2VuZXJhdGVSYW5kb21Xb3JkQXJyYXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21Xb3JkQXJyYXkoYnl0ZXMpIHtcbiAgICAgIHJldHVybiBfY3J5cHRvSnMuZGVmYXVsdC5saWIuV29yZEFycmF5LnJhbmRvbShieXRlcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNyZWF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUoZG9jdW1lbnQpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgaWYgKCFvcHRpb25zLm93bmVyUGFzc3dvcmQgJiYgIW9wdGlvbnMudXNlclBhc3N3b3JkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFBERlNlY3VyaXR5KGRvY3VtZW50LCBvcHRpb25zKTtcbiAgICB9XG4gIH1dKTtcblxuICBmdW5jdGlvbiBQREZTZWN1cml0eShkb2N1bWVudCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZTZWN1cml0eSk7XG5cbiAgICBpZiAoIW9wdGlvbnMub3duZXJQYXNzd29yZCAmJiAhb3B0aW9ucy51c2VyUGFzc3dvcmQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm9uZSBvZiBvd25lciBwYXNzd29yZCBhbmQgdXNlciBwYXNzd29yZCBpcyBkZWZpbmVkLicpO1xuICAgIH1cblxuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuICAgIHRoaXMuX3NldHVwRW5jcnlwdGlvbihvcHRpb25zKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQREZTZWN1cml0eSwgW3tcbiAgICBrZXk6IFwiX3NldHVwRW5jcnlwdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0dXBFbmNyeXB0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHN3aXRjaCAob3B0aW9ucy5wZGZWZXJzaW9uKSB7XG4gICAgICAgIGNhc2UgJzEuNCc6XG4gICAgICAgIGNhc2UgJzEuNSc6XG4gICAgICAgICAgdGhpcy52ZXJzaW9uID0gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICcxLjYnOlxuICAgICAgICBjYXNlICcxLjcnOlxuICAgICAgICAgIHRoaXMudmVyc2lvbiA9IDQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnMS43ZXh0Myc6XG4gICAgICAgICAgdGhpcy52ZXJzaW9uID0gNTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRoaXMudmVyc2lvbiA9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbmNEaWN0ID0ge1xuICAgICAgICBGaWx0ZXI6ICdTdGFuZGFyZCdcbiAgICAgIH07XG5cbiAgICAgIHN3aXRjaCAodGhpcy52ZXJzaW9uKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgdGhpcy5fc2V0dXBFbmNyeXB0aW9uVjFWMlY0KHRoaXMudmVyc2lvbiwgZW5jRGljdCwgb3B0aW9ucyk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgdGhpcy5fc2V0dXBFbmNyeXB0aW9uVjUoZW5jRGljdCwgb3B0aW9ucyk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaWN0aW9uYXJ5ID0gdGhpcy5kb2N1bWVudC5yZWYoZW5jRGljdCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9zZXR1cEVuY3J5cHRpb25WMVYyVjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3NldHVwRW5jcnlwdGlvblYxVjJWNCh2LCBlbmNEaWN0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgciwgcGVybWlzc2lvbnM7XG5cbiAgICAgIHN3aXRjaCAodikge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgciA9IDI7XG4gICAgICAgICAgdGhpcy5rZXlCaXRzID0gNDA7XG4gICAgICAgICAgcGVybWlzc2lvbnMgPSBnZXRQZXJtaXNzaW9uc1IyKG9wdGlvbnMucGVybWlzc2lvbnMpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByID0gMztcbiAgICAgICAgICB0aGlzLmtleUJpdHMgPSAxMjg7XG4gICAgICAgICAgcGVybWlzc2lvbnMgPSBnZXRQZXJtaXNzaW9uc1IzKG9wdGlvbnMucGVybWlzc2lvbnMpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByID0gNDtcbiAgICAgICAgICB0aGlzLmtleUJpdHMgPSAxMjg7XG4gICAgICAgICAgcGVybWlzc2lvbnMgPSBnZXRQZXJtaXNzaW9uc1IzKG9wdGlvbnMucGVybWlzc2lvbnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFkZGVkVXNlclBhc3N3b3JkID0gcHJvY2Vzc1Bhc3N3b3JkUjJSM1I0KG9wdGlvbnMudXNlclBhc3N3b3JkKTtcbiAgICAgIHZhciBwYWRkZWRPd25lclBhc3N3b3JkID0gb3B0aW9ucy5vd25lclBhc3N3b3JkID8gcHJvY2Vzc1Bhc3N3b3JkUjJSM1I0KG9wdGlvbnMub3duZXJQYXNzd29yZCkgOiBwYWRkZWRVc2VyUGFzc3dvcmQ7XG4gICAgICB2YXIgb3duZXJQYXNzd29yZEVudHJ5ID0gZ2V0T3duZXJQYXNzd29yZFIyUjNSNChyLCB0aGlzLmtleUJpdHMsIHBhZGRlZFVzZXJQYXNzd29yZCwgcGFkZGVkT3duZXJQYXNzd29yZCk7XG4gICAgICB0aGlzLmVuY3J5cHRpb25LZXkgPSBnZXRFbmNyeXB0aW9uS2V5UjJSM1I0KHIsIHRoaXMua2V5Qml0cywgdGhpcy5kb2N1bWVudC5faWQsIHBhZGRlZFVzZXJQYXNzd29yZCwgb3duZXJQYXNzd29yZEVudHJ5LCBwZXJtaXNzaW9ucyk7XG4gICAgICB2YXIgdXNlclBhc3N3b3JkRW50cnk7XG5cbiAgICAgIGlmIChyID09PSAyKSB7XG4gICAgICAgIHVzZXJQYXNzd29yZEVudHJ5ID0gZ2V0VXNlclBhc3N3b3JkUjIodGhpcy5lbmNyeXB0aW9uS2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVzZXJQYXNzd29yZEVudHJ5ID0gZ2V0VXNlclBhc3N3b3JkUjNSNCh0aGlzLmRvY3VtZW50Ll9pZCwgdGhpcy5lbmNyeXB0aW9uS2V5KTtcbiAgICAgIH1cblxuICAgICAgZW5jRGljdC5WID0gdjtcblxuICAgICAgaWYgKHYgPj0gMikge1xuICAgICAgICBlbmNEaWN0Lkxlbmd0aCA9IHRoaXMua2V5Qml0cztcbiAgICAgIH1cblxuICAgICAgaWYgKHYgPT09IDQpIHtcbiAgICAgICAgZW5jRGljdC5DRiA9IHtcbiAgICAgICAgICBTdGRDRjoge1xuICAgICAgICAgICAgQXV0aEV2ZW50OiAnRG9jT3BlbicsXG4gICAgICAgICAgICBDRk06ICdBRVNWMicsXG4gICAgICAgICAgICBMZW5ndGg6IHRoaXMua2V5Qml0cyAvIDhcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGVuY0RpY3QuU3RtRiA9ICdTdGRDRic7XG4gICAgICAgIGVuY0RpY3QuU3RyRiA9ICdTdGRDRic7XG4gICAgICB9XG5cbiAgICAgIGVuY0RpY3QuUiA9IHI7XG4gICAgICBlbmNEaWN0Lk8gPSB3b3JkQXJyYXlUb0J1ZmZlcihvd25lclBhc3N3b3JkRW50cnkpO1xuICAgICAgZW5jRGljdC5VID0gd29yZEFycmF5VG9CdWZmZXIodXNlclBhc3N3b3JkRW50cnkpO1xuICAgICAgZW5jRGljdC5QID0gcGVybWlzc2lvbnM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9zZXR1cEVuY3J5cHRpb25WNVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0dXBFbmNyeXB0aW9uVjUoZW5jRGljdCwgb3B0aW9ucykge1xuICAgICAgdGhpcy5rZXlCaXRzID0gMjU2O1xuICAgICAgdmFyIHBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnNSMyhvcHRpb25zLnBlcm1pc3Npb25zKTtcbiAgICAgIHZhciBwcm9jZXNzZWRVc2VyUGFzc3dvcmQgPSBwcm9jZXNzUGFzc3dvcmRSNShvcHRpb25zLnVzZXJQYXNzd29yZCk7XG4gICAgICB2YXIgcHJvY2Vzc2VkT3duZXJQYXNzd29yZCA9IG9wdGlvbnMub3duZXJQYXNzd29yZCA/IHByb2Nlc3NQYXNzd29yZFI1KG9wdGlvbnMub3duZXJQYXNzd29yZCkgOiBwcm9jZXNzZWRVc2VyUGFzc3dvcmQ7XG4gICAgICB0aGlzLmVuY3J5cHRpb25LZXkgPSBnZXRFbmNyeXB0aW9uS2V5UjUoUERGU2VjdXJpdHkuZ2VuZXJhdGVSYW5kb21Xb3JkQXJyYXkpO1xuICAgICAgdmFyIHVzZXJQYXNzd29yZEVudHJ5ID0gZ2V0VXNlclBhc3N3b3JkUjUocHJvY2Vzc2VkVXNlclBhc3N3b3JkLCBQREZTZWN1cml0eS5nZW5lcmF0ZVJhbmRvbVdvcmRBcnJheSk7XG5cbiAgICAgIHZhciB1c2VyS2V5U2FsdCA9IF9jcnlwdG9Kcy5kZWZhdWx0LmxpYi5Xb3JkQXJyYXkuY3JlYXRlKHVzZXJQYXNzd29yZEVudHJ5LndvcmRzLnNsaWNlKDEwLCAxMiksIDgpO1xuXG4gICAgICB2YXIgdXNlckVuY3J5cHRpb25LZXlFbnRyeSA9IGdldFVzZXJFbmNyeXB0aW9uS2V5UjUocHJvY2Vzc2VkVXNlclBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdGhpcy5lbmNyeXB0aW9uS2V5KTtcbiAgICAgIHZhciBvd25lclBhc3N3b3JkRW50cnkgPSBnZXRPd25lclBhc3N3b3JkUjUocHJvY2Vzc2VkT3duZXJQYXNzd29yZCwgdXNlclBhc3N3b3JkRW50cnksIFBERlNlY3VyaXR5LmdlbmVyYXRlUmFuZG9tV29yZEFycmF5KTtcblxuICAgICAgdmFyIG93bmVyS2V5U2FsdCA9IF9jcnlwdG9Kcy5kZWZhdWx0LmxpYi5Xb3JkQXJyYXkuY3JlYXRlKG93bmVyUGFzc3dvcmRFbnRyeS53b3Jkcy5zbGljZSgxMCwgMTIpLCA4KTtcblxuICAgICAgdmFyIG93bmVyRW5jcnlwdGlvbktleUVudHJ5ID0gZ2V0T3duZXJFbmNyeXB0aW9uS2V5UjUocHJvY2Vzc2VkT3duZXJQYXNzd29yZCwgb3duZXJLZXlTYWx0LCB1c2VyUGFzc3dvcmRFbnRyeSwgdGhpcy5lbmNyeXB0aW9uS2V5KTtcbiAgICAgIHZhciBwZXJtc0VudHJ5ID0gZ2V0RW5jcnlwdGVkUGVybWlzc2lvbnNSNShwZXJtaXNzaW9ucywgdGhpcy5lbmNyeXB0aW9uS2V5LCBQREZTZWN1cml0eS5nZW5lcmF0ZVJhbmRvbVdvcmRBcnJheSk7XG4gICAgICBlbmNEaWN0LlYgPSA1O1xuICAgICAgZW5jRGljdC5MZW5ndGggPSB0aGlzLmtleUJpdHM7XG4gICAgICBlbmNEaWN0LkNGID0ge1xuICAgICAgICBTdGRDRjoge1xuICAgICAgICAgIEF1dGhFdmVudDogJ0RvY09wZW4nLFxuICAgICAgICAgIENGTTogJ0FFU1YzJyxcbiAgICAgICAgICBMZW5ndGg6IHRoaXMua2V5Qml0cyAvIDhcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVuY0RpY3QuU3RtRiA9ICdTdGRDRic7XG4gICAgICBlbmNEaWN0LlN0ckYgPSAnU3RkQ0YnO1xuICAgICAgZW5jRGljdC5SID0gNTtcbiAgICAgIGVuY0RpY3QuTyA9IHdvcmRBcnJheVRvQnVmZmVyKG93bmVyUGFzc3dvcmRFbnRyeSk7XG4gICAgICBlbmNEaWN0Lk9FID0gd29yZEFycmF5VG9CdWZmZXIob3duZXJFbmNyeXB0aW9uS2V5RW50cnkpO1xuICAgICAgZW5jRGljdC5VID0gd29yZEFycmF5VG9CdWZmZXIodXNlclBhc3N3b3JkRW50cnkpO1xuICAgICAgZW5jRGljdC5VRSA9IHdvcmRBcnJheVRvQnVmZmVyKHVzZXJFbmNyeXB0aW9uS2V5RW50cnkpO1xuICAgICAgZW5jRGljdC5QID0gcGVybWlzc2lvbnM7XG4gICAgICBlbmNEaWN0LlBlcm1zID0gd29yZEFycmF5VG9CdWZmZXIocGVybXNFbnRyeSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEVuY3J5cHRGblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRFbmNyeXB0Rm4ob2JqLCBnZW4pIHtcbiAgICAgIHZhciBkaWdlc3Q7XG5cbiAgICAgIGlmICh0aGlzLnZlcnNpb24gPCA1KSB7XG4gICAgICAgIGRpZ2VzdCA9IHRoaXMuZW5jcnlwdGlvbktleS5jbG9uZSgpLmNvbmNhdChfY3J5cHRvSnMuZGVmYXVsdC5saWIuV29yZEFycmF5LmNyZWF0ZShbKG9iaiAmIDB4ZmYpIDw8IDI0IHwgKG9iaiAmIDB4ZmYwMCkgPDwgOCB8IG9iaiA+PiA4ICYgMHhmZjAwIHwgZ2VuICYgMHhmZiwgKGdlbiAmIDB4ZmYwMCkgPDwgMTZdLCA1KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09IDEgfHwgdGhpcy52ZXJzaW9uID09PSAyKSB7XG4gICAgICAgIHZhciBfa2V5ID0gX2NyeXB0b0pzLmRlZmF1bHQuTUQ1KGRpZ2VzdCk7XG5cbiAgICAgICAgX2tleS5zaWdCeXRlcyA9IE1hdGgubWluKDE2LCB0aGlzLmtleUJpdHMgLyA4ICsgNSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIHdvcmRBcnJheVRvQnVmZmVyKF9jcnlwdG9Kcy5kZWZhdWx0LlJDNC5lbmNyeXB0KF9jcnlwdG9Kcy5kZWZhdWx0LmxpYi5Xb3JkQXJyYXkuY3JlYXRlKGJ1ZmZlciksIF9rZXkpLmNpcGhlcnRleHQpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIga2V5O1xuXG4gICAgICBpZiAodGhpcy52ZXJzaW9uID09PSA0KSB7XG4gICAgICAgIGtleSA9IF9jcnlwdG9Kcy5kZWZhdWx0Lk1ENShkaWdlc3QuY29uY2F0KF9jcnlwdG9Kcy5kZWZhdWx0LmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDczNDE2YzU0XSwgNCkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleSA9IHRoaXMuZW5jcnlwdGlvbktleTtcbiAgICAgIH1cblxuICAgICAgdmFyIGl2ID0gUERGU2VjdXJpdHkuZ2VuZXJhdGVSYW5kb21Xb3JkQXJyYXkoMTYpO1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIG1vZGU6IF9jcnlwdG9Kcy5kZWZhdWx0Lm1vZGUuQ0JDLFxuICAgICAgICBwYWRkaW5nOiBfY3J5cHRvSnMuZGVmYXVsdC5wYWQuUGtjczcsXG4gICAgICAgIGl2OiBpdlxuICAgICAgfTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYnVmZmVyKSB7XG4gICAgICAgIHJldHVybiB3b3JkQXJyYXlUb0J1ZmZlcihpdi5jbG9uZSgpLmNvbmNhdChfY3J5cHRvSnMuZGVmYXVsdC5BRVMuZW5jcnlwdChfY3J5cHRvSnMuZGVmYXVsdC5saWIuV29yZEFycmF5LmNyZWF0ZShidWZmZXIpLCBrZXksIG9wdGlvbnMpLmNpcGhlcnRleHQpKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVuZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmQoKSB7XG4gICAgICB0aGlzLmRpY3Rpb25hcnkuZW5kKCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBERlNlY3VyaXR5O1xufSgpO1xuXG5mdW5jdGlvbiBnZXRQZXJtaXNzaW9uc1IyKCkge1xuICB2YXIgcGVybWlzc2lvbk9iamVjdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciBwZXJtaXNzaW9ucyA9IDB4ZmZmZmZmYzAgPj4gMDtcblxuICBpZiAocGVybWlzc2lvbk9iamVjdC5wcmludGluZykge1xuICAgIHBlcm1pc3Npb25zIHw9IDQ7XG4gIH1cblxuICBpZiAocGVybWlzc2lvbk9iamVjdC5tb2RpZnlpbmcpIHtcbiAgICBwZXJtaXNzaW9ucyB8PSA4O1xuICB9XG5cbiAgaWYgKHBlcm1pc3Npb25PYmplY3QuY29weWluZykge1xuICAgIHBlcm1pc3Npb25zIHw9IDE2O1xuICB9XG5cbiAgaWYgKHBlcm1pc3Npb25PYmplY3QuYW5ub3RhdGluZykge1xuICAgIHBlcm1pc3Npb25zIHw9IDMyO1xuICB9XG5cbiAgcmV0dXJuIHBlcm1pc3Npb25zO1xufVxuXG5mdW5jdGlvbiBnZXRQZXJtaXNzaW9uc1IzKCkge1xuICB2YXIgcGVybWlzc2lvbk9iamVjdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciBwZXJtaXNzaW9ucyA9IDB4ZmZmZmYwYzAgPj4gMDtcblxuICBpZiAocGVybWlzc2lvbk9iamVjdC5wcmludGluZyA9PT0gJ2xvd1Jlc29sdXRpb24nKSB7XG4gICAgcGVybWlzc2lvbnMgfD0gNDtcbiAgfVxuXG4gIGlmIChwZXJtaXNzaW9uT2JqZWN0LnByaW50aW5nID09PSAnaGlnaFJlc29sdXRpb24nKSB7XG4gICAgcGVybWlzc2lvbnMgfD0gMjA1MjtcbiAgfVxuXG4gIGlmIChwZXJtaXNzaW9uT2JqZWN0Lm1vZGlmeWluZykge1xuICAgIHBlcm1pc3Npb25zIHw9IDg7XG4gIH1cblxuICBpZiAocGVybWlzc2lvbk9iamVjdC5jb3B5aW5nKSB7XG4gICAgcGVybWlzc2lvbnMgfD0gMTY7XG4gIH1cblxuICBpZiAocGVybWlzc2lvbk9iamVjdC5hbm5vdGF0aW5nKSB7XG4gICAgcGVybWlzc2lvbnMgfD0gMzI7XG4gIH1cblxuICBpZiAocGVybWlzc2lvbk9iamVjdC5maWxsaW5nRm9ybXMpIHtcbiAgICBwZXJtaXNzaW9ucyB8PSAyNTY7XG4gIH1cblxuICBpZiAocGVybWlzc2lvbk9iamVjdC5jb250ZW50QWNjZXNzaWJpbGl0eSkge1xuICAgIHBlcm1pc3Npb25zIHw9IDUxMjtcbiAgfVxuXG4gIGlmIChwZXJtaXNzaW9uT2JqZWN0LmRvY3VtZW50QXNzZW1ibHkpIHtcbiAgICBwZXJtaXNzaW9ucyB8PSAxMDI0O1xuICB9XG5cbiAgcmV0dXJuIHBlcm1pc3Npb25zO1xufVxuXG5mdW5jdGlvbiBnZXRVc2VyUGFzc3dvcmRSMihlbmNyeXB0aW9uS2V5KSB7XG4gIHJldHVybiBfY3J5cHRvSnMuZGVmYXVsdC5SQzQuZW5jcnlwdChwcm9jZXNzUGFzc3dvcmRSMlIzUjQoKSwgZW5jcnlwdGlvbktleSkuY2lwaGVydGV4dDtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlclBhc3N3b3JkUjNSNChkb2N1bWVudElkLCBlbmNyeXB0aW9uS2V5KSB7XG4gIHZhciBrZXkgPSBlbmNyeXB0aW9uS2V5LmNsb25lKCk7XG5cbiAgdmFyIGNpcGhlciA9IF9jcnlwdG9Kcy5kZWZhdWx0Lk1ENShwcm9jZXNzUGFzc3dvcmRSMlIzUjQoKS5jb25jYXQoX2NyeXB0b0pzLmRlZmF1bHQubGliLldvcmRBcnJheS5jcmVhdGUoZG9jdW1lbnRJZCkpKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAgICB2YXIgeG9yUm91bmQgPSBNYXRoLmNlaWwoa2V5LnNpZ0J5dGVzIC8gNCk7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHhvclJvdW5kOyBqKyspIHtcbiAgICAgIGtleS53b3Jkc1tqXSA9IGVuY3J5cHRpb25LZXkud29yZHNbal0gXiAoaSB8IGkgPDwgOCB8IGkgPDwgMTYgfCBpIDw8IDI0KTtcbiAgICB9XG5cbiAgICBjaXBoZXIgPSBfY3J5cHRvSnMuZGVmYXVsdC5SQzQuZW5jcnlwdChjaXBoZXIsIGtleSkuY2lwaGVydGV4dDtcbiAgfVxuXG4gIHJldHVybiBjaXBoZXIuY29uY2F0KF9jcnlwdG9Kcy5kZWZhdWx0LmxpYi5Xb3JkQXJyYXkuY3JlYXRlKG51bGwsIDE2KSk7XG59XG5cbmZ1bmN0aW9uIGdldE93bmVyUGFzc3dvcmRSMlIzUjQociwga2V5Qml0cywgcGFkZGVkVXNlclBhc3N3b3JkLCBwYWRkZWRPd25lclBhc3N3b3JkKSB7XG4gIHZhciBkaWdlc3QgPSBwYWRkZWRPd25lclBhc3N3b3JkO1xuICB2YXIgcm91bmQgPSByID49IDMgPyA1MSA6IDE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3VuZDsgaSsrKSB7XG4gICAgZGlnZXN0ID0gX2NyeXB0b0pzLmRlZmF1bHQuTUQ1KGRpZ2VzdCk7XG4gIH1cblxuICB2YXIga2V5ID0gZGlnZXN0LmNsb25lKCk7XG4gIGtleS5zaWdCeXRlcyA9IGtleUJpdHMgLyA4O1xuICB2YXIgY2lwaGVyID0gcGFkZGVkVXNlclBhc3N3b3JkO1xuICByb3VuZCA9IHIgPj0gMyA/IDIwIDogMTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcm91bmQ7IF9pKyspIHtcbiAgICB2YXIgeG9yUm91bmQgPSBNYXRoLmNlaWwoa2V5LnNpZ0J5dGVzIC8gNCk7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHhvclJvdW5kOyBqKyspIHtcbiAgICAgIGtleS53b3Jkc1tqXSA9IGRpZ2VzdC53b3Jkc1tqXSBeIChfaSB8IF9pIDw8IDggfCBfaSA8PCAxNiB8IF9pIDw8IDI0KTtcbiAgICB9XG5cbiAgICBjaXBoZXIgPSBfY3J5cHRvSnMuZGVmYXVsdC5SQzQuZW5jcnlwdChjaXBoZXIsIGtleSkuY2lwaGVydGV4dDtcbiAgfVxuXG4gIHJldHVybiBjaXBoZXI7XG59XG5cbmZ1bmN0aW9uIGdldEVuY3J5cHRpb25LZXlSMlIzUjQociwga2V5Qml0cywgZG9jdW1lbnRJZCwgcGFkZGVkVXNlclBhc3N3b3JkLCBvd25lclBhc3N3b3JkRW50cnksIHBlcm1pc3Npb25zKSB7XG4gIHZhciBrZXkgPSBwYWRkZWRVc2VyUGFzc3dvcmQuY2xvbmUoKS5jb25jYXQob3duZXJQYXNzd29yZEVudHJ5KS5jb25jYXQoX2NyeXB0b0pzLmRlZmF1bHQubGliLldvcmRBcnJheS5jcmVhdGUoW2xzYkZpcnN0V29yZChwZXJtaXNzaW9ucyldLCA0KSkuY29uY2F0KF9jcnlwdG9Kcy5kZWZhdWx0LmxpYi5Xb3JkQXJyYXkuY3JlYXRlKGRvY3VtZW50SWQpKTtcbiAgdmFyIHJvdW5kID0gciA+PSAzID8gNTEgOiAxO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcm91bmQ7IGkrKykge1xuICAgIGtleSA9IF9jcnlwdG9Kcy5kZWZhdWx0Lk1ENShrZXkpO1xuICAgIGtleS5zaWdCeXRlcyA9IGtleUJpdHMgLyA4O1xuICB9XG5cbiAgcmV0dXJuIGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlclBhc3N3b3JkUjUocHJvY2Vzc2VkVXNlclBhc3N3b3JkLCBnZW5lcmF0ZVJhbmRvbVdvcmRBcnJheSkge1xuICB2YXIgdmFsaWRhdGlvblNhbHQgPSBnZW5lcmF0ZVJhbmRvbVdvcmRBcnJheSg4KTtcbiAgdmFyIGtleVNhbHQgPSBnZW5lcmF0ZVJhbmRvbVdvcmRBcnJheSg4KTtcbiAgcmV0dXJuIF9jcnlwdG9Kcy5kZWZhdWx0LlNIQTI1Nihwcm9jZXNzZWRVc2VyUGFzc3dvcmQuY2xvbmUoKS5jb25jYXQodmFsaWRhdGlvblNhbHQpKS5jb25jYXQodmFsaWRhdGlvblNhbHQpLmNvbmNhdChrZXlTYWx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlckVuY3J5cHRpb25LZXlSNShwcm9jZXNzZWRVc2VyUGFzc3dvcmQsIHVzZXJLZXlTYWx0LCBlbmNyeXB0aW9uS2V5KSB7XG4gIHZhciBrZXkgPSBfY3J5cHRvSnMuZGVmYXVsdC5TSEEyNTYocHJvY2Vzc2VkVXNlclBhc3N3b3JkLmNsb25lKCkuY29uY2F0KHVzZXJLZXlTYWx0KSk7XG5cbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgbW9kZTogX2NyeXB0b0pzLmRlZmF1bHQubW9kZS5DQkMsXG4gICAgcGFkZGluZzogX2NyeXB0b0pzLmRlZmF1bHQucGFkLk5vUGFkZGluZyxcbiAgICBpdjogX2NyeXB0b0pzLmRlZmF1bHQubGliLldvcmRBcnJheS5jcmVhdGUobnVsbCwgMTYpXG4gIH07XG4gIHJldHVybiBfY3J5cHRvSnMuZGVmYXVsdC5BRVMuZW5jcnlwdChlbmNyeXB0aW9uS2V5LCBrZXksIG9wdGlvbnMpLmNpcGhlcnRleHQ7XG59XG5cbmZ1bmN0aW9uIGdldE93bmVyUGFzc3dvcmRSNShwcm9jZXNzZWRPd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmRFbnRyeSwgZ2VuZXJhdGVSYW5kb21Xb3JkQXJyYXkpIHtcbiAgdmFyIHZhbGlkYXRpb25TYWx0ID0gZ2VuZXJhdGVSYW5kb21Xb3JkQXJyYXkoOCk7XG4gIHZhciBrZXlTYWx0ID0gZ2VuZXJhdGVSYW5kb21Xb3JkQXJyYXkoOCk7XG4gIHJldHVybiBfY3J5cHRvSnMuZGVmYXVsdC5TSEEyNTYocHJvY2Vzc2VkT3duZXJQYXNzd29yZC5jbG9uZSgpLmNvbmNhdCh2YWxpZGF0aW9uU2FsdCkuY29uY2F0KHVzZXJQYXNzd29yZEVudHJ5KSkuY29uY2F0KHZhbGlkYXRpb25TYWx0KS5jb25jYXQoa2V5U2FsdCk7XG59XG5cbmZ1bmN0aW9uIGdldE93bmVyRW5jcnlwdGlvbktleVI1KHByb2Nlc3NlZE93bmVyUGFzc3dvcmQsIG93bmVyS2V5U2FsdCwgdXNlclBhc3N3b3JkRW50cnksIGVuY3J5cHRpb25LZXkpIHtcbiAgdmFyIGtleSA9IF9jcnlwdG9Kcy5kZWZhdWx0LlNIQTI1Nihwcm9jZXNzZWRPd25lclBhc3N3b3JkLmNsb25lKCkuY29uY2F0KG93bmVyS2V5U2FsdCkuY29uY2F0KHVzZXJQYXNzd29yZEVudHJ5KSk7XG5cbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgbW9kZTogX2NyeXB0b0pzLmRlZmF1bHQubW9kZS5DQkMsXG4gICAgcGFkZGluZzogX2NyeXB0b0pzLmRlZmF1bHQucGFkLk5vUGFkZGluZyxcbiAgICBpdjogX2NyeXB0b0pzLmRlZmF1bHQubGliLldvcmRBcnJheS5jcmVhdGUobnVsbCwgMTYpXG4gIH07XG4gIHJldHVybiBfY3J5cHRvSnMuZGVmYXVsdC5BRVMuZW5jcnlwdChlbmNyeXB0aW9uS2V5LCBrZXksIG9wdGlvbnMpLmNpcGhlcnRleHQ7XG59XG5cbmZ1bmN0aW9uIGdldEVuY3J5cHRpb25LZXlSNShnZW5lcmF0ZVJhbmRvbVdvcmRBcnJheSkge1xuICByZXR1cm4gZ2VuZXJhdGVSYW5kb21Xb3JkQXJyYXkoMzIpO1xufVxuXG5mdW5jdGlvbiBnZXRFbmNyeXB0ZWRQZXJtaXNzaW9uc1I1KHBlcm1pc3Npb25zLCBlbmNyeXB0aW9uS2V5LCBnZW5lcmF0ZVJhbmRvbVdvcmRBcnJheSkge1xuICB2YXIgY2lwaGVyID0gX2NyeXB0b0pzLmRlZmF1bHQubGliLldvcmRBcnJheS5jcmVhdGUoW2xzYkZpcnN0V29yZChwZXJtaXNzaW9ucyksIDB4ZmZmZmZmZmYsIDB4NTQ2MTY0NjJdLCAxMikuY29uY2F0KGdlbmVyYXRlUmFuZG9tV29yZEFycmF5KDQpKTtcblxuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBtb2RlOiBfY3J5cHRvSnMuZGVmYXVsdC5tb2RlLkVDQixcbiAgICBwYWRkaW5nOiBfY3J5cHRvSnMuZGVmYXVsdC5wYWQuTm9QYWRkaW5nXG4gIH07XG4gIHJldHVybiBfY3J5cHRvSnMuZGVmYXVsdC5BRVMuZW5jcnlwdChjaXBoZXIsIGVuY3J5cHRpb25LZXksIG9wdGlvbnMpLmNpcGhlcnRleHQ7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NQYXNzd29yZFIyUjNSNCgpIHtcbiAgdmFyIHBhc3N3b3JkID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgdmFyIG91dCA9IEJ1ZmZlci5hbGxvYygzMik7XG4gIHZhciBsZW5ndGggPSBwYXNzd29yZC5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIGluZGV4IDwgMzIpIHtcbiAgICB2YXIgY29kZSA9IHBhc3N3b3JkLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgaWYgKGNvZGUgPiAweGZmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bhc3N3b3JkIGNvbnRhaW5zIG9uZSBvciBtb3JlIGludmFsaWQgY2hhcmFjdGVycy4nKTtcbiAgICB9XG5cbiAgICBvdXRbaW5kZXhdID0gY29kZTtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgd2hpbGUgKGluZGV4IDwgMzIpIHtcbiAgICBvdXRbaW5kZXhdID0gUEFTU1dPUkRfUEFERElOR1tpbmRleCAtIGxlbmd0aF07XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiBfY3J5cHRvSnMuZGVmYXVsdC5saWIuV29yZEFycmF5LmNyZWF0ZShvdXQpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzUGFzc3dvcmRSNSgpIHtcbiAgdmFyIHBhc3N3b3JkID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgcGFzc3dvcmQgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc2FzbHByZXAocGFzc3dvcmQpKSk7XG4gIHZhciBsZW5ndGggPSBNYXRoLm1pbigxMjcsIHBhc3N3b3JkLmxlbmd0aCk7XG4gIHZhciBvdXQgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgb3V0W2ldID0gcGFzc3dvcmQuY2hhckNvZGVBdChpKTtcbiAgfVxuXG4gIHJldHVybiBfY3J5cHRvSnMuZGVmYXVsdC5saWIuV29yZEFycmF5LmNyZWF0ZShvdXQpO1xufVxuXG5mdW5jdGlvbiBsc2JGaXJzdFdvcmQoZGF0YSkge1xuICByZXR1cm4gKGRhdGEgJiAweGZmKSA8PCAyNCB8IChkYXRhICYgMHhmZjAwKSA8PCA4IHwgZGF0YSA+PiA4ICYgMHhmZjAwIHwgZGF0YSA+PiAyNCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIHdvcmRBcnJheVRvQnVmZmVyKHdvcmRBcnJheSkge1xuICB2YXIgYnl0ZUFycmF5ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JkQXJyYXkuc2lnQnl0ZXM7IGkrKykge1xuICAgIGJ5dGVBcnJheS5wdXNoKHdvcmRBcnJheS53b3Jkc1tNYXRoLmZsb29yKGkgLyA0KV0gPj4gOCAqICgzIC0gaSAlIDQpICYgMHhmZik7XG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmZyb20oYnl0ZUFycmF5KTtcbn1cblxudmFyIFBBU1NXT1JEX1BBRERJTkcgPSBbMHgyOCwgMHhiZiwgMHg0ZSwgMHg1ZSwgMHg0ZSwgMHg3NSwgMHg4YSwgMHg0MSwgMHg2NCwgMHgwMCwgMHg0ZSwgMHg1NiwgMHhmZiwgMHhmYSwgMHgwMSwgMHgwOCwgMHgyZSwgMHgyZSwgMHgwMCwgMHhiNiwgMHhkMCwgMHg2OCwgMHgzZSwgMHg4MCwgMHgyZiwgMHgwYywgMHhhOSwgMHhmZSwgMHg2NCwgMHg1MywgMHg2OSwgMHg3YV07XG52YXIgbnVtYmVyID0gUERGT2JqZWN0Lm51bWJlcjtcblxudmFyIFBERkdyYWRpZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUERGR3JhZGllbnQoZG9jKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERkdyYWRpZW50KTtcblxuICAgIHRoaXMuZG9jID0gZG9jO1xuICAgIHRoaXMuc3RvcHMgPSBbXTtcbiAgICB0aGlzLmVtYmVkZGVkID0gZmFsc2U7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBbMSwgMCwgMCwgMSwgMCwgMF07XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUERGR3JhZGllbnQsIFt7XG4gICAga2V5OiBcInN0b3BcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RvcChwb3MsIGNvbG9yLCBvcGFjaXR5KSB7XG4gICAgICBpZiAob3BhY2l0eSA9PSBudWxsKSB7XG4gICAgICAgIG9wYWNpdHkgPSAxO1xuICAgICAgfVxuXG4gICAgICBjb2xvciA9IHRoaXMuZG9jLl9ub3JtYWxpemVDb2xvcihjb2xvcik7XG5cbiAgICAgIGlmICh0aGlzLnN0b3BzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoY29sb3IubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgdGhpcy5fY29sb3JTcGFjZSA9ICdEZXZpY2VSR0InO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbG9yLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgIHRoaXMuX2NvbG9yU3BhY2UgPSAnRGV2aWNlQ01ZSyc7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sb3IubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5fY29sb3JTcGFjZSA9ICdEZXZpY2VHcmF5JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gY29sb3Igc3BhY2UnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9jb2xvclNwYWNlID09PSAnRGV2aWNlUkdCJyAmJiBjb2xvci5sZW5ndGggIT09IDMgfHwgdGhpcy5fY29sb3JTcGFjZSA9PT0gJ0RldmljZUNNWUsnICYmIGNvbG9yLmxlbmd0aCAhPT0gNCB8fCB0aGlzLl9jb2xvclNwYWNlID09PSAnRGV2aWNlR3JheScgJiYgY29sb3IubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQWxsIGdyYWRpZW50IHN0b3BzIG11c3QgdXNlIHRoZSBzYW1lIGNvbG9yIHNwYWNlJyk7XG4gICAgICB9XG5cbiAgICAgIG9wYWNpdHkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBvcGFjaXR5KSk7XG4gICAgICB0aGlzLnN0b3BzLnB1c2goW3BvcywgY29sb3IsIG9wYWNpdHldKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRUcmFuc2Zvcm1cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VHJhbnNmb3JtKG0xMSwgbTEyLCBtMjEsIG0yMiwgZHgsIGR5KSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybSA9IFttMTEsIG0xMiwgbTIxLCBtMjIsIGR4LCBkeV07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW1iZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW1iZWQobSkge1xuICAgICAgdmFyIGZuO1xuICAgICAgdmFyIHN0b3BzTGVuZ3RoID0gdGhpcy5zdG9wcy5sZW5ndGg7XG5cbiAgICAgIGlmIChzdG9wc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1iZWRkZWQgPSB0cnVlO1xuICAgICAgdGhpcy5tYXRyaXggPSBtOyAvLyBpZiB0aGUgbGFzdCBzdG9wIGNvbWVzIGJlZm9yZSAxMDAlLCBhZGQgYSBjb3B5IGF0IDEwMCVcblxuICAgICAgdmFyIGxhc3QgPSB0aGlzLnN0b3BzW3N0b3BzTGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChsYXN0WzBdIDwgMSkge1xuICAgICAgICB0aGlzLnN0b3BzLnB1c2goWzEsIGxhc3RbMV0sIGxhc3RbMl1dKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJvdW5kcyA9IFtdO1xuICAgICAgdmFyIGVuY29kZSA9IFtdO1xuICAgICAgdmFyIHN0b3BzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RvcHNMZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgZW5jb2RlLnB1c2goMCwgMSk7XG5cbiAgICAgICAgaWYgKGkgKyAyICE9PSBzdG9wc0xlbmd0aCkge1xuICAgICAgICAgIGJvdW5kcy5wdXNoKHRoaXMuc3RvcHNbaSArIDFdWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuID0gdGhpcy5kb2MucmVmKHtcbiAgICAgICAgICBGdW5jdGlvblR5cGU6IDIsXG4gICAgICAgICAgRG9tYWluOiBbMCwgMV0sXG4gICAgICAgICAgQzA6IHRoaXMuc3RvcHNbaSArIDBdWzFdLFxuICAgICAgICAgIEMxOiB0aGlzLnN0b3BzW2kgKyAxXVsxXSxcbiAgICAgICAgICBOOiAxXG4gICAgICAgIH0pO1xuICAgICAgICBzdG9wcy5wdXNoKGZuKTtcbiAgICAgICAgZm4uZW5kKCk7XG4gICAgICB9IC8vIGlmIHRoZXJlIGFyZSBvbmx5IHR3byBzdG9wcywgd2UgZG9uJ3QgbmVlZCBhIHN0aXRjaGluZyBmdW5jdGlvblxuXG5cbiAgICAgIGlmIChzdG9wc0xlbmd0aCA9PT0gMSkge1xuICAgICAgICBmbiA9IHN0b3BzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm4gPSB0aGlzLmRvYy5yZWYoe1xuICAgICAgICAgIEZ1bmN0aW9uVHlwZTogMyxcbiAgICAgICAgICAvLyBzdGl0Y2hpbmcgZnVuY3Rpb25cbiAgICAgICAgICBEb21haW46IFswLCAxXSxcbiAgICAgICAgICBGdW5jdGlvbnM6IHN0b3BzLFxuICAgICAgICAgIEJvdW5kczogYm91bmRzLFxuICAgICAgICAgIEVuY29kZTogZW5jb2RlXG4gICAgICAgIH0pO1xuICAgICAgICBmbi5lbmQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pZCA9IFwiU2hcIi5jb25jYXQoKyt0aGlzLmRvYy5fZ3JhZENvdW50KTtcbiAgICAgIHZhciBzaGFkZXIgPSB0aGlzLnNoYWRlcihmbik7XG4gICAgICBzaGFkZXIuZW5kKCk7XG4gICAgICB2YXIgcGF0dGVybiA9IHRoaXMuZG9jLnJlZih7XG4gICAgICAgIFR5cGU6ICdQYXR0ZXJuJyxcbiAgICAgICAgUGF0dGVyblR5cGU6IDIsXG4gICAgICAgIFNoYWRpbmc6IHNoYWRlcixcbiAgICAgICAgTWF0cml4OiB0aGlzLm1hdHJpeC5tYXAobnVtYmVyKVxuICAgICAgfSk7XG4gICAgICBwYXR0ZXJuLmVuZCgpO1xuXG4gICAgICBpZiAodGhpcy5zdG9wcy5zb21lKGZ1bmN0aW9uIChzdG9wKSB7XG4gICAgICAgIHJldHVybiBzdG9wWzJdIDwgMTtcbiAgICAgIH0pKSB7XG4gICAgICAgIHZhciBncmFkID0gdGhpcy5vcGFjaXR5R3JhZGllbnQoKTtcbiAgICAgICAgZ3JhZC5fY29sb3JTcGFjZSA9ICdEZXZpY2VHcmF5JztcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5zdG9wcyksXG4gICAgICAgICAgICBfc3RlcDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgICB2YXIgc3RvcCA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgICAgZ3JhZC5zdG9wKHN0b3BbMF0sIFtzdG9wWzJdXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgICAgIH1cblxuICAgICAgICBncmFkID0gZ3JhZC5lbWJlZCh0aGlzLm1hdHJpeCk7XG4gICAgICAgIHZhciBwYWdlQkJveCA9IFswLCAwLCB0aGlzLmRvYy5wYWdlLndpZHRoLCB0aGlzLmRvYy5wYWdlLmhlaWdodF07XG4gICAgICAgIHZhciBmb3JtID0gdGhpcy5kb2MucmVmKHtcbiAgICAgICAgICBUeXBlOiAnWE9iamVjdCcsXG4gICAgICAgICAgU3VidHlwZTogJ0Zvcm0nLFxuICAgICAgICAgIEZvcm1UeXBlOiAxLFxuICAgICAgICAgIEJCb3g6IHBhZ2VCQm94LFxuICAgICAgICAgIEdyb3VwOiB7XG4gICAgICAgICAgICBUeXBlOiAnR3JvdXAnLFxuICAgICAgICAgICAgUzogJ1RyYW5zcGFyZW5jeScsXG4gICAgICAgICAgICBDUzogJ0RldmljZUdyYXknXG4gICAgICAgICAgfSxcbiAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIFByb2NTZXQ6IFsnUERGJywgJ1RleHQnLCAnSW1hZ2VCJywgJ0ltYWdlQycsICdJbWFnZUknXSxcbiAgICAgICAgICAgIFBhdHRlcm46IHtcbiAgICAgICAgICAgICAgU2gxOiBncmFkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybS53cml0ZSgnL1BhdHRlcm4gY3MgL1NoMSBzY24nKTtcbiAgICAgICAgZm9ybS5lbmQoXCJcIi5jb25jYXQocGFnZUJCb3guam9pbignICcpLCBcIiByZSBmXCIpKTtcbiAgICAgICAgdmFyIGdzdGF0ZSA9IHRoaXMuZG9jLnJlZih7XG4gICAgICAgICAgVHlwZTogJ0V4dEdTdGF0ZScsXG4gICAgICAgICAgU01hc2s6IHtcbiAgICAgICAgICAgIFR5cGU6ICdNYXNrJyxcbiAgICAgICAgICAgIFM6ICdMdW1pbm9zaXR5JyxcbiAgICAgICAgICAgIEc6IGZvcm1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBnc3RhdGUuZW5kKCk7XG4gICAgICAgIHZhciBvcGFjaXR5UGF0dGVybiA9IHRoaXMuZG9jLnJlZih7XG4gICAgICAgICAgVHlwZTogJ1BhdHRlcm4nLFxuICAgICAgICAgIFBhdHRlcm5UeXBlOiAxLFxuICAgICAgICAgIFBhaW50VHlwZTogMSxcbiAgICAgICAgICBUaWxpbmdUeXBlOiAyLFxuICAgICAgICAgIEJCb3g6IHBhZ2VCQm94LFxuICAgICAgICAgIFhTdGVwOiBwYWdlQkJveFsyXSxcbiAgICAgICAgICBZU3RlcDogcGFnZUJCb3hbM10sXG4gICAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICBQcm9jU2V0OiBbJ1BERicsICdUZXh0JywgJ0ltYWdlQicsICdJbWFnZUMnLCAnSW1hZ2VJJ10sXG4gICAgICAgICAgICBQYXR0ZXJuOiB7XG4gICAgICAgICAgICAgIFNoMTogcGF0dGVyblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEV4dEdTdGF0ZToge1xuICAgICAgICAgICAgICBHczE6IGdzdGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG9wYWNpdHlQYXR0ZXJuLndyaXRlKCcvR3MxIGdzIC9QYXR0ZXJuIGNzIC9TaDEgc2NuJyk7XG4gICAgICAgIG9wYWNpdHlQYXR0ZXJuLmVuZChcIlwiLmNvbmNhdChwYWdlQkJveC5qb2luKCcgJyksIFwiIHJlIGZcIikpO1xuICAgICAgICB0aGlzLmRvYy5wYWdlLnBhdHRlcm5zW3RoaXMuaWRdID0gb3BhY2l0eVBhdHRlcm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRvYy5wYWdlLnBhdHRlcm5zW3RoaXMuaWRdID0gcGF0dGVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5KHN0cm9rZSkge1xuICAgICAgLy8gYXBwbHkgZ3JhZGllbnQgdHJhbnNmb3JtIHRvIGV4aXN0aW5nIGRvY3VtZW50IGN0bVxuICAgICAgdmFyIF90aGlzJGRvYyRfY3RtID0gX3NsaWNlZFRvQXJyYXkodGhpcy5kb2MuX2N0bSwgNiksXG4gICAgICAgICAgbTAgPSBfdGhpcyRkb2MkX2N0bVswXSxcbiAgICAgICAgICBtMSA9IF90aGlzJGRvYyRfY3RtWzFdLFxuICAgICAgICAgIG0yID0gX3RoaXMkZG9jJF9jdG1bMl0sXG4gICAgICAgICAgbTMgPSBfdGhpcyRkb2MkX2N0bVszXSxcbiAgICAgICAgICBtNCA9IF90aGlzJGRvYyRfY3RtWzRdLFxuICAgICAgICAgIG01ID0gX3RoaXMkZG9jJF9jdG1bNV07XG5cbiAgICAgIHZhciBfdGhpcyR0cmFuc2Zvcm0gPSBfc2xpY2VkVG9BcnJheSh0aGlzLnRyYW5zZm9ybSwgNiksXG4gICAgICAgICAgbTExID0gX3RoaXMkdHJhbnNmb3JtWzBdLFxuICAgICAgICAgIG0xMiA9IF90aGlzJHRyYW5zZm9ybVsxXSxcbiAgICAgICAgICBtMjEgPSBfdGhpcyR0cmFuc2Zvcm1bMl0sXG4gICAgICAgICAgbTIyID0gX3RoaXMkdHJhbnNmb3JtWzNdLFxuICAgICAgICAgIGR4ID0gX3RoaXMkdHJhbnNmb3JtWzRdLFxuICAgICAgICAgIGR5ID0gX3RoaXMkdHJhbnNmb3JtWzVdO1xuXG4gICAgICB2YXIgbSA9IFttMCAqIG0xMSArIG0yICogbTEyLCBtMSAqIG0xMSArIG0zICogbTEyLCBtMCAqIG0yMSArIG0yICogbTIyLCBtMSAqIG0yMSArIG0zICogbTIyLCBtMCAqIGR4ICsgbTIgKiBkeSArIG00LCBtMSAqIGR4ICsgbTMgKiBkeSArIG01XTtcblxuICAgICAgaWYgKCF0aGlzLmVtYmVkZGVkIHx8IG0uam9pbignICcpICE9PSB0aGlzLm1hdHJpeC5qb2luKCcgJykpIHtcbiAgICAgICAgdGhpcy5lbWJlZChtKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kb2MuX3NldENvbG9yU3BhY2UoJ1BhdHRlcm4nLCBzdHJva2UpO1xuXG4gICAgICB2YXIgb3AgPSBzdHJva2UgPyAnU0NOJyA6ICdzY24nO1xuICAgICAgcmV0dXJuIHRoaXMuZG9jLmFkZENvbnRlbnQoXCIvXCIuY29uY2F0KHRoaXMuaWQsIFwiIFwiKS5jb25jYXQob3ApKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUERGR3JhZGllbnQ7XG59KCk7XG5cbnZhciBQREZMaW5lYXJHcmFkaWVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BERkdyYWRpZW50KSB7XG4gIF9pbmhlcml0cyhQREZMaW5lYXJHcmFkaWVudCwgX1BERkdyYWRpZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFBERkxpbmVhckdyYWRpZW50KTtcblxuICBmdW5jdGlvbiBQREZMaW5lYXJHcmFkaWVudChkb2MsIHgxLCB5MSwgeDIsIHkyKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERkxpbmVhckdyYWRpZW50KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9jKTtcbiAgICBfdGhpcy54MSA9IHgxO1xuICAgIF90aGlzLnkxID0geTE7XG4gICAgX3RoaXMueDIgPSB4MjtcbiAgICBfdGhpcy55MiA9IHkyO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQREZMaW5lYXJHcmFkaWVudCwgW3tcbiAgICBrZXk6IFwic2hhZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoYWRlcihmbikge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jLnJlZih7XG4gICAgICAgIFNoYWRpbmdUeXBlOiAyLFxuICAgICAgICBDb2xvclNwYWNlOiB0aGlzLl9jb2xvclNwYWNlLFxuICAgICAgICBDb29yZHM6IFt0aGlzLngxLCB0aGlzLnkxLCB0aGlzLngyLCB0aGlzLnkyXSxcbiAgICAgICAgRnVuY3Rpb246IGZuLFxuICAgICAgICBFeHRlbmQ6IFt0cnVlLCB0cnVlXVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9wYWNpdHlHcmFkaWVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvcGFjaXR5R3JhZGllbnQoKSB7XG4gICAgICByZXR1cm4gbmV3IFBERkxpbmVhckdyYWRpZW50KHRoaXMuZG9jLCB0aGlzLngxLCB0aGlzLnkxLCB0aGlzLngyLCB0aGlzLnkyKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUERGTGluZWFyR3JhZGllbnQ7XG59KFBERkdyYWRpZW50KTtcblxudmFyIFBERlJhZGlhbEdyYWRpZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUERGR3JhZGllbnQyKSB7XG4gIF9pbmhlcml0cyhQREZSYWRpYWxHcmFkaWVudCwgX1BERkdyYWRpZW50Mik7XG5cbiAgdmFyIF9zdXBlcjIgPSBfY3JlYXRlU3VwZXIoUERGUmFkaWFsR3JhZGllbnQpO1xuXG4gIGZ1bmN0aW9uIFBERlJhZGlhbEdyYWRpZW50KGRvYywgeDEsIHkxLCByMSwgeDIsIHkyLCByMikge1xuICAgIHZhciBfdGhpczI7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGUmFkaWFsR3JhZGllbnQpO1xuXG4gICAgX3RoaXMyID0gX3N1cGVyMi5jYWxsKHRoaXMsIGRvYyk7XG4gICAgX3RoaXMyLmRvYyA9IGRvYztcbiAgICBfdGhpczIueDEgPSB4MTtcbiAgICBfdGhpczIueTEgPSB5MTtcbiAgICBfdGhpczIucjEgPSByMTtcbiAgICBfdGhpczIueDIgPSB4MjtcbiAgICBfdGhpczIueTIgPSB5MjtcbiAgICBfdGhpczIucjIgPSByMjtcbiAgICByZXR1cm4gX3RoaXMyO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBERlJhZGlhbEdyYWRpZW50LCBbe1xuICAgIGtleTogXCJzaGFkZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hhZGVyKGZuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb2MucmVmKHtcbiAgICAgICAgU2hhZGluZ1R5cGU6IDMsXG4gICAgICAgIENvbG9yU3BhY2U6IHRoaXMuX2NvbG9yU3BhY2UsXG4gICAgICAgIENvb3JkczogW3RoaXMueDEsIHRoaXMueTEsIHRoaXMucjEsIHRoaXMueDIsIHRoaXMueTIsIHRoaXMucjJdLFxuICAgICAgICBGdW5jdGlvbjogZm4sXG4gICAgICAgIEV4dGVuZDogW3RydWUsIHRydWVdXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib3BhY2l0eUdyYWRpZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9wYWNpdHlHcmFkaWVudCgpIHtcbiAgICAgIHJldHVybiBuZXcgUERGUmFkaWFsR3JhZGllbnQodGhpcy5kb2MsIHRoaXMueDEsIHRoaXMueTEsIHRoaXMucjEsIHRoaXMueDIsIHRoaXMueTIsIHRoaXMucjIpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQREZSYWRpYWxHcmFkaWVudDtcbn0oUERGR3JhZGllbnQpO1xuXG52YXIgR3JhZGllbnQgPSB7XG4gIFBERkdyYWRpZW50OiBQREZHcmFkaWVudCxcbiAgUERGTGluZWFyR3JhZGllbnQ6IFBERkxpbmVhckdyYWRpZW50LFxuICBQREZSYWRpYWxHcmFkaWVudDogUERGUmFkaWFsR3JhZGllbnRcbn07XG4vKlxyXG5QREYgdGlsaW5nIHBhdHRlcm4gc3VwcG9ydC4gVW5jb2xvcmVkIG9ubHkuXHJcbiAqL1xuXG52YXIgdW5kZXJseWluZ0NvbG9yU3BhY2VzID0gWydEZXZpY2VDTVlLJywgJ0RldmljZVJHQiddO1xuXG52YXIgUERGVGlsaW5nUGF0dGVybiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBERlRpbGluZ1BhdHRlcm4oZG9jLCBiQm94LCB4U3RlcCwgeVN0ZXAsIHN0cmVhbSkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZUaWxpbmdQYXR0ZXJuKTtcblxuICAgIHRoaXMuZG9jID0gZG9jO1xuICAgIHRoaXMuYkJveCA9IGJCb3g7XG4gICAgdGhpcy54U3RlcCA9IHhTdGVwO1xuICAgIHRoaXMueVN0ZXAgPSB5U3RlcDtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQREZUaWxpbmdQYXR0ZXJuLCBbe1xuICAgIGtleTogXCJjcmVhdGVQYXR0ZXJuXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZVBhdHRlcm4oKSB7XG4gICAgICAvLyBubyByZXNvdXJjZXMgbmVlZGVkIGZvciBvdXIgY3VycmVudCB1c2FnZVxuICAgICAgLy8gcmVxdWlyZWQgZW50cnlcbiAgICAgIHZhciByZXNvdXJjZXMgPSB0aGlzLmRvYy5yZWYoKTtcbiAgICAgIHJlc291cmNlcy5lbmQoKTsgLy8gYXBwbHkgZGVmYXVsdCB0cmFuc2Zvcm0gbWF0cml4IChmbGlwcGVkIGluIHRoZSBkZWZhdWx0IGRvYy5fY3RtKVxuICAgICAgLy8gc2VlIGRvY3VtZW50LmpzICYgZ3JhZGllbnQuanNcblxuICAgICAgdmFyIF90aGlzJGRvYyRfY3RtID0gX3NsaWNlZFRvQXJyYXkodGhpcy5kb2MuX2N0bSwgNiksXG4gICAgICAgICAgbTAgPSBfdGhpcyRkb2MkX2N0bVswXSxcbiAgICAgICAgICBtMSA9IF90aGlzJGRvYyRfY3RtWzFdLFxuICAgICAgICAgIG0yID0gX3RoaXMkZG9jJF9jdG1bMl0sXG4gICAgICAgICAgbTMgPSBfdGhpcyRkb2MkX2N0bVszXSxcbiAgICAgICAgICBtNCA9IF90aGlzJGRvYyRfY3RtWzRdLFxuICAgICAgICAgIG01ID0gX3RoaXMkZG9jJF9jdG1bNV07XG5cbiAgICAgIHZhciBtMTEgPSAxLFxuICAgICAgICAgIG0xMiA9IDAsXG4gICAgICAgICAgbTIxID0gMCxcbiAgICAgICAgICBtMjIgPSAxLFxuICAgICAgICAgIGR4ID0gMCxcbiAgICAgICAgICBkeSA9IDA7XG4gICAgICB2YXIgbSA9IFttMCAqIG0xMSArIG0yICogbTEyLCBtMSAqIG0xMSArIG0zICogbTEyLCBtMCAqIG0yMSArIG0yICogbTIyLCBtMSAqIG0yMSArIG0zICogbTIyLCBtMCAqIGR4ICsgbTIgKiBkeSArIG00LCBtMSAqIGR4ICsgbTMgKiBkeSArIG01XTtcbiAgICAgIHZhciBwYXR0ZXJuID0gdGhpcy5kb2MucmVmKHtcbiAgICAgICAgVHlwZTogJ1BhdHRlcm4nLFxuICAgICAgICBQYXR0ZXJuVHlwZTogMSxcbiAgICAgICAgLy8gdGlsaW5nXG4gICAgICAgIFBhaW50VHlwZTogMixcbiAgICAgICAgLy8gMS1jb2xvcmVkLCAyLXVuY29sb3JlZFxuICAgICAgICBUaWxpbmdUeXBlOiAyLFxuICAgICAgICAvLyAyLW5vIGRpc3RvcnRpb25cbiAgICAgICAgQkJveDogdGhpcy5iQm94LFxuICAgICAgICBYU3RlcDogdGhpcy54U3RlcCxcbiAgICAgICAgWVN0ZXA6IHRoaXMueVN0ZXAsXG4gICAgICAgIE1hdHJpeDogbS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICByZXR1cm4gK3YudG9GaXhlZCg1KTtcbiAgICAgICAgfSksXG4gICAgICAgIFJlc291cmNlczogcmVzb3VyY2VzXG4gICAgICB9KTtcbiAgICAgIHBhdHRlcm4uZW5kKHRoaXMuc3RyZWFtKTtcbiAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbWJlZFBhdHRlcm5Db2xvclNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbWJlZFBhdHRlcm5Db2xvclNwYWNlcygpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7IC8vIG1hcCBlYWNoIHBhdHRlcm4gdG8gYW4gdW5kZXJseWluZyBjb2xvciBzcGFjZVxuICAgICAgLy8gYW5kIGVtYmVkIG9uIGVhY2ggcGFnZVxuXG5cbiAgICAgIHVuZGVybHlpbmdDb2xvclNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjc05hbWUpIHtcbiAgICAgICAgdmFyIGNzSWQgPSBfdGhpcy5nZXRQYXR0ZXJuQ29sb3JTcGFjZUlkKGNzTmFtZSk7XG5cbiAgICAgICAgaWYgKF90aGlzLmRvYy5wYWdlLmNvbG9yU3BhY2VzW2NzSWRdKSByZXR1cm47XG5cbiAgICAgICAgdmFyIGNzID0gX3RoaXMuZG9jLnJlZihbJ1BhdHRlcm4nLCBjc05hbWVdKTtcblxuICAgICAgICBjcy5lbmQoKTtcbiAgICAgICAgX3RoaXMuZG9jLnBhZ2UuY29sb3JTcGFjZXNbY3NJZF0gPSBjcztcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRQYXR0ZXJuQ29sb3JTcGFjZUlkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhdHRlcm5Db2xvclNwYWNlSWQodW5kZXJseWluZ0NvbG9yc3BhY2UpIHtcbiAgICAgIHJldHVybiBcIkNzUFwiLmNvbmNhdCh1bmRlcmx5aW5nQ29sb3JzcGFjZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVtYmVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVtYmVkKCkge1xuICAgICAgaWYgKCF0aGlzLmlkKSB7XG4gICAgICAgIHRoaXMuZG9jLl9wYXR0ZXJuQ291bnQgPSB0aGlzLmRvYy5fcGF0dGVybkNvdW50ICsgMTtcbiAgICAgICAgdGhpcy5pZCA9ICdQJyArIHRoaXMuZG9jLl9wYXR0ZXJuQ291bnQ7XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHRoaXMuY3JlYXRlUGF0dGVybigpO1xuICAgICAgfSAvLyBwYXR0ZXJucyBhcmUgZW1iZWRkZWQgaW4gZWFjaCBwYWdlXG5cblxuICAgICAgaWYgKCF0aGlzLmRvYy5wYWdlLnBhdHRlcm5zW3RoaXMuaWRdKSB7XG4gICAgICAgIHRoaXMuZG9jLnBhZ2UucGF0dGVybnNbdGhpcy5pZF0gPSB0aGlzLnBhdHRlcm47XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5KHN0cm9rZSwgcGF0dGVybkNvbG9yKSB7XG4gICAgICAvLyBkbyBhbnkgZW1iZWRkaW5nL2NyZWF0aW5nIHRoYXQgbWlnaHQgYmUgbmVlZGVkXG4gICAgICB0aGlzLmVtYmVkUGF0dGVybkNvbG9yU3BhY2VzKCk7XG4gICAgICB0aGlzLmVtYmVkKCk7XG5cbiAgICAgIHZhciBub3JtYWxpemVkQ29sb3IgPSB0aGlzLmRvYy5fbm9ybWFsaXplQ29sb3IocGF0dGVybkNvbG9yKTtcblxuICAgICAgaWYgKCFub3JtYWxpemVkQ29sb3IpIHRocm93IEVycm9yKFwiaW52YWxpZCBwYXR0ZXJuIGNvbG9yLiAodmFsdWU6IFwiLmNvbmNhdChwYXR0ZXJuQ29sb3IsIFwiKVwiKSk7IC8vIHNlbGVjdCBvbmUgb2YgdGhlIHBhdHRlcm4gY29sb3Igc3BhY2VzXG5cbiAgICAgIHZhciBjc0lkID0gdGhpcy5nZXRQYXR0ZXJuQ29sb3JTcGFjZUlkKHRoaXMuZG9jLl9nZXRDb2xvclNwYWNlKG5vcm1hbGl6ZWRDb2xvcikpO1xuXG4gICAgICB0aGlzLmRvYy5fc2V0Q29sb3JTcGFjZShjc0lkLCBzdHJva2UpOyAvLyBzdHJva2UvZmlsbCB1c2luZyB0aGUgcGF0dGVybiBhbmQgY29sb3IgKGluIHRoZSBhYm92ZSB1bmRlcmx5aW5nIGNvbG9yIHNwYWNlKVxuXG5cbiAgICAgIHZhciBvcCA9IHN0cm9rZSA/ICdTQ04nIDogJ3Njbic7XG4gICAgICByZXR1cm4gdGhpcy5kb2MuYWRkQ29udGVudChcIlwiLmNvbmNhdChub3JtYWxpemVkQ29sb3Iuam9pbignICcpLCBcIiAvXCIpLmNvbmNhdCh0aGlzLmlkLCBcIiBcIikuY29uY2F0KG9wKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBERlRpbGluZ1BhdHRlcm47XG59KCk7XG5cbnZhciBwYXR0ZXJuID0ge1xuICBQREZUaWxpbmdQYXR0ZXJuOiBQREZUaWxpbmdQYXR0ZXJuXG59O1xudmFyIFBERkdyYWRpZW50JDEgPSBHcmFkaWVudC5QREZHcmFkaWVudCxcbiAgICBQREZMaW5lYXJHcmFkaWVudCQxID0gR3JhZGllbnQuUERGTGluZWFyR3JhZGllbnQsXG4gICAgUERGUmFkaWFsR3JhZGllbnQkMSA9IEdyYWRpZW50LlBERlJhZGlhbEdyYWRpZW50O1xudmFyIFBERlRpbGluZ1BhdHRlcm4kMSA9IHBhdHRlcm4uUERGVGlsaW5nUGF0dGVybjtcbnZhciBDb2xvck1peGluID0ge1xuICBpbml0Q29sb3I6IGZ1bmN0aW9uIGluaXRDb2xvcigpIHtcbiAgICAvLyBUaGUgb3BhY2l0eSBkaWN0aW9uYXJpZXNcbiAgICB0aGlzLl9vcGFjaXR5UmVnaXN0cnkgPSB7fTtcbiAgICB0aGlzLl9vcGFjaXR5Q291bnQgPSAwO1xuICAgIHRoaXMuX3BhdHRlcm5Db3VudCA9IDA7XG4gICAgcmV0dXJuIHRoaXMuX2dyYWRDb3VudCA9IDA7XG4gIH0sXG4gIF9ub3JtYWxpemVDb2xvcjogZnVuY3Rpb24gX25vcm1hbGl6ZUNvbG9yKGNvbG9yKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChjb2xvci5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICBpZiAoY29sb3IubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgY29sb3IgPSBjb2xvci5yZXBsYWNlKC8jKFswLTlBLUZdKShbMC05QS1GXSkoWzAtOUEtRl0pL2ksICcjJDEkMSQyJDIkMyQzJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaGV4ID0gcGFyc2VJbnQoY29sb3Iuc2xpY2UoMSksIDE2KTtcbiAgICAgICAgY29sb3IgPSBbaGV4ID4+IDE2LCBoZXggPj4gOCAmIDB4ZmYsIGhleCAmIDB4ZmZdO1xuICAgICAgfSBlbHNlIGlmIChuYW1lZENvbG9yc1tjb2xvcl0pIHtcbiAgICAgICAgY29sb3IgPSBuYW1lZENvbG9yc1tjb2xvcl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3IpKSB7XG4gICAgICAvLyBSR0JcbiAgICAgIGlmIChjb2xvci5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgY29sb3IgPSBjb2xvci5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgICByZXR1cm4gcGFydCAvIDI1NTtcbiAgICAgICAgfSk7IC8vIENNWUtcbiAgICAgIH0gZWxzZSBpZiAoY29sb3IubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIGNvbG9yID0gY29sb3IubWFwKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnQgLyAxMDA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIF9zZXRDb2xvcjogZnVuY3Rpb24gX3NldENvbG9yKGNvbG9yLCBzdHJva2UpIHtcbiAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBQREZHcmFkaWVudCQxKSB7XG4gICAgICBjb2xvci5hcHBseShzdHJva2UpO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIHNlZSBpZiB0aWxpbmcgcGF0dGVybiwgZGVjb2RlICYgYXBwbHkgaXQgaXRcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29sb3IpICYmIGNvbG9yWzBdIGluc3RhbmNlb2YgUERGVGlsaW5nUGF0dGVybiQxKSB7XG4gICAgICBjb2xvclswXS5hcHBseShzdHJva2UsIGNvbG9yWzFdKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gYW55IG90aGVyIGNhc2Ugc2hvdWxkIGJlIGEgbm9ybWFsIGNvbG9yIGFuZCBub3QgYSBwYXR0ZXJuXG5cblxuICAgIHJldHVybiB0aGlzLl9zZXRDb2xvckNvcmUoY29sb3IsIHN0cm9rZSk7XG4gIH0sXG4gIF9zZXRDb2xvckNvcmU6IGZ1bmN0aW9uIF9zZXRDb2xvckNvcmUoY29sb3IsIHN0cm9rZSkge1xuICAgIGNvbG9yID0gdGhpcy5fbm9ybWFsaXplQ29sb3IoY29sb3IpO1xuXG4gICAgaWYgKCFjb2xvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBvcCA9IHN0cm9rZSA/ICdTQ04nIDogJ3Njbic7XG5cbiAgICB2YXIgc3BhY2UgPSB0aGlzLl9nZXRDb2xvclNwYWNlKGNvbG9yKTtcblxuICAgIHRoaXMuX3NldENvbG9yU3BhY2Uoc3BhY2UsIHN0cm9rZSk7XG5cbiAgICBjb2xvciA9IGNvbG9yLmpvaW4oJyAnKTtcbiAgICB0aGlzLmFkZENvbnRlbnQoXCJcIi5jb25jYXQoY29sb3IsIFwiIFwiKS5jb25jYXQob3ApKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgX3NldENvbG9yU3BhY2U6IGZ1bmN0aW9uIF9zZXRDb2xvclNwYWNlKHNwYWNlLCBzdHJva2UpIHtcbiAgICB2YXIgb3AgPSBzdHJva2UgPyAnQ1MnIDogJ2NzJztcbiAgICByZXR1cm4gdGhpcy5hZGRDb250ZW50KFwiL1wiLmNvbmNhdChzcGFjZSwgXCIgXCIpLmNvbmNhdChvcCkpO1xuICB9LFxuICBfZ2V0Q29sb3JTcGFjZTogZnVuY3Rpb24gX2dldENvbG9yU3BhY2UoY29sb3IpIHtcbiAgICByZXR1cm4gY29sb3IubGVuZ3RoID09PSA0ID8gJ0RldmljZUNNWUsnIDogJ0RldmljZVJHQic7XG4gIH0sXG4gIGZpbGxDb2xvcjogZnVuY3Rpb24gZmlsbENvbG9yKGNvbG9yLCBvcGFjaXR5KSB7XG4gICAgdmFyIHNldCA9IHRoaXMuX3NldENvbG9yKGNvbG9yLCBmYWxzZSk7XG5cbiAgICBpZiAoc2V0KSB7XG4gICAgICB0aGlzLmZpbGxPcGFjaXR5KG9wYWNpdHkpO1xuICAgIH0gLy8gc2F2ZSB0aGlzIGZvciB0ZXh0IHdyYXBwZXIsIHdoaWNoIG5lZWRzIHRvIHJlc2V0XG4gICAgLy8gdGhlIGZpbGwgY29sb3Igb24gbmV3IHBhZ2VzXG5cblxuICAgIHRoaXMuX2ZpbGxDb2xvciA9IFtjb2xvciwgb3BhY2l0eV07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHN0cm9rZUNvbG9yOiBmdW5jdGlvbiBzdHJva2VDb2xvcihjb2xvciwgb3BhY2l0eSkge1xuICAgIHZhciBzZXQgPSB0aGlzLl9zZXRDb2xvcihjb2xvciwgdHJ1ZSk7XG5cbiAgICBpZiAoc2V0KSB7XG4gICAgICB0aGlzLnN0cm9rZU9wYWNpdHkob3BhY2l0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIG9wYWNpdHk6IGZ1bmN0aW9uIG9wYWNpdHkoX29wYWNpdHkpIHtcbiAgICB0aGlzLl9kb09wYWNpdHkoX29wYWNpdHksIF9vcGFjaXR5KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBmaWxsT3BhY2l0eTogZnVuY3Rpb24gZmlsbE9wYWNpdHkob3BhY2l0eSkge1xuICAgIHRoaXMuX2RvT3BhY2l0eShvcGFjaXR5LCBudWxsKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBzdHJva2VPcGFjaXR5OiBmdW5jdGlvbiBzdHJva2VPcGFjaXR5KG9wYWNpdHkpIHtcbiAgICB0aGlzLl9kb09wYWNpdHkobnVsbCwgb3BhY2l0eSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgX2RvT3BhY2l0eTogZnVuY3Rpb24gX2RvT3BhY2l0eShmaWxsT3BhY2l0eSwgc3Ryb2tlT3BhY2l0eSkge1xuICAgIHZhciBkaWN0aW9uYXJ5LCBuYW1lO1xuXG4gICAgaWYgKGZpbGxPcGFjaXR5ID09IG51bGwgJiYgc3Ryb2tlT3BhY2l0eSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZpbGxPcGFjaXR5ICE9IG51bGwpIHtcbiAgICAgIGZpbGxPcGFjaXR5ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgZmlsbE9wYWNpdHkpKTtcbiAgICB9XG5cbiAgICBpZiAoc3Ryb2tlT3BhY2l0eSAhPSBudWxsKSB7XG4gICAgICBzdHJva2VPcGFjaXR5ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgc3Ryb2tlT3BhY2l0eSkpO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBcIlwiLmNvbmNhdChmaWxsT3BhY2l0eSwgXCJfXCIpLmNvbmNhdChzdHJva2VPcGFjaXR5KTtcblxuICAgIGlmICh0aGlzLl9vcGFjaXR5UmVnaXN0cnlba2V5XSkge1xuICAgICAgdmFyIF90aGlzJF9vcGFjaXR5UmVnaXN0ciA9IF9zbGljZWRUb0FycmF5KHRoaXMuX29wYWNpdHlSZWdpc3RyeVtrZXldLCAyKTtcblxuICAgICAgZGljdGlvbmFyeSA9IF90aGlzJF9vcGFjaXR5UmVnaXN0clswXTtcbiAgICAgIG5hbWUgPSBfdGhpcyRfb3BhY2l0eVJlZ2lzdHJbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpY3Rpb25hcnkgPSB7XG4gICAgICAgIFR5cGU6ICdFeHRHU3RhdGUnXG4gICAgICB9O1xuXG4gICAgICBpZiAoZmlsbE9wYWNpdHkgIT0gbnVsbCkge1xuICAgICAgICBkaWN0aW9uYXJ5LmNhID0gZmlsbE9wYWNpdHk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJva2VPcGFjaXR5ICE9IG51bGwpIHtcbiAgICAgICAgZGljdGlvbmFyeS5DQSA9IHN0cm9rZU9wYWNpdHk7XG4gICAgICB9XG5cbiAgICAgIGRpY3Rpb25hcnkgPSB0aGlzLnJlZihkaWN0aW9uYXJ5KTtcbiAgICAgIGRpY3Rpb25hcnkuZW5kKCk7XG4gICAgICB2YXIgaWQgPSArK3RoaXMuX29wYWNpdHlDb3VudDtcbiAgICAgIG5hbWUgPSBcIkdzXCIuY29uY2F0KGlkKTtcbiAgICAgIHRoaXMuX29wYWNpdHlSZWdpc3RyeVtrZXldID0gW2RpY3Rpb25hcnksIG5hbWVdO1xuICAgIH1cblxuICAgIHRoaXMucGFnZS5leHRfZ3N0YXRlc1tuYW1lXSA9IGRpY3Rpb25hcnk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29udGVudChcIi9cIi5jb25jYXQobmFtZSwgXCIgZ3NcIikpO1xuICB9LFxuICBsaW5lYXJHcmFkaWVudDogZnVuY3Rpb24gbGluZWFyR3JhZGllbnQoeDEsIHkxLCB4MiwgeTIpIHtcbiAgICByZXR1cm4gbmV3IFBERkxpbmVhckdyYWRpZW50JDEodGhpcywgeDEsIHkxLCB4MiwgeTIpO1xuICB9LFxuICByYWRpYWxHcmFkaWVudDogZnVuY3Rpb24gcmFkaWFsR3JhZGllbnQoeDEsIHkxLCByMSwgeDIsIHkyLCByMikge1xuICAgIHJldHVybiBuZXcgUERGUmFkaWFsR3JhZGllbnQkMSh0aGlzLCB4MSwgeTEsIHIxLCB4MiwgeTIsIHIyKTtcbiAgfSxcbiAgcGF0dGVybjogZnVuY3Rpb24gcGF0dGVybihiYm94LCB4U3RlcCwgeVN0ZXAsIHN0cmVhbSkge1xuICAgIHJldHVybiBuZXcgUERGVGlsaW5nUGF0dGVybiQxKHRoaXMsIGJib3gsIHhTdGVwLCB5U3RlcCwgc3RyZWFtKTtcbiAgfVxufTtcbnZhciBuYW1lZENvbG9ycyA9IHtcbiAgYWxpY2VibHVlOiBbMjQwLCAyNDgsIDI1NV0sXG4gIGFudGlxdWV3aGl0ZTogWzI1MCwgMjM1LCAyMTVdLFxuICBhcXVhOiBbMCwgMjU1LCAyNTVdLFxuICBhcXVhbWFyaW5lOiBbMTI3LCAyNTUsIDIxMl0sXG4gIGF6dXJlOiBbMjQwLCAyNTUsIDI1NV0sXG4gIGJlaWdlOiBbMjQ1LCAyNDUsIDIyMF0sXG4gIGJpc3F1ZTogWzI1NSwgMjI4LCAxOTZdLFxuICBibGFjazogWzAsIDAsIDBdLFxuICBibGFuY2hlZGFsbW9uZDogWzI1NSwgMjM1LCAyMDVdLFxuICBibHVlOiBbMCwgMCwgMjU1XSxcbiAgYmx1ZXZpb2xldDogWzEzOCwgNDMsIDIyNl0sXG4gIGJyb3duOiBbMTY1LCA0MiwgNDJdLFxuICBidXJseXdvb2Q6IFsyMjIsIDE4NCwgMTM1XSxcbiAgY2FkZXRibHVlOiBbOTUsIDE1OCwgMTYwXSxcbiAgY2hhcnRyZXVzZTogWzEyNywgMjU1LCAwXSxcbiAgY2hvY29sYXRlOiBbMjEwLCAxMDUsIDMwXSxcbiAgY29yYWw6IFsyNTUsIDEyNywgODBdLFxuICBjb3JuZmxvd2VyYmx1ZTogWzEwMCwgMTQ5LCAyMzddLFxuICBjb3Juc2lsazogWzI1NSwgMjQ4LCAyMjBdLFxuICBjcmltc29uOiBbMjIwLCAyMCwgNjBdLFxuICBjeWFuOiBbMCwgMjU1LCAyNTVdLFxuICBkYXJrYmx1ZTogWzAsIDAsIDEzOV0sXG4gIGRhcmtjeWFuOiBbMCwgMTM5LCAxMzldLFxuICBkYXJrZ29sZGVucm9kOiBbMTg0LCAxMzQsIDExXSxcbiAgZGFya2dyYXk6IFsxNjksIDE2OSwgMTY5XSxcbiAgZGFya2dyZWVuOiBbMCwgMTAwLCAwXSxcbiAgZGFya2dyZXk6IFsxNjksIDE2OSwgMTY5XSxcbiAgZGFya2toYWtpOiBbMTg5LCAxODMsIDEwN10sXG4gIGRhcmttYWdlbnRhOiBbMTM5LCAwLCAxMzldLFxuICBkYXJrb2xpdmVncmVlbjogWzg1LCAxMDcsIDQ3XSxcbiAgZGFya29yYW5nZTogWzI1NSwgMTQwLCAwXSxcbiAgZGFya29yY2hpZDogWzE1MywgNTAsIDIwNF0sXG4gIGRhcmtyZWQ6IFsxMzksIDAsIDBdLFxuICBkYXJrc2FsbW9uOiBbMjMzLCAxNTAsIDEyMl0sXG4gIGRhcmtzZWFncmVlbjogWzE0MywgMTg4LCAxNDNdLFxuICBkYXJrc2xhdGVibHVlOiBbNzIsIDYxLCAxMzldLFxuICBkYXJrc2xhdGVncmF5OiBbNDcsIDc5LCA3OV0sXG4gIGRhcmtzbGF0ZWdyZXk6IFs0NywgNzksIDc5XSxcbiAgZGFya3R1cnF1b2lzZTogWzAsIDIwNiwgMjA5XSxcbiAgZGFya3Zpb2xldDogWzE0OCwgMCwgMjExXSxcbiAgZGVlcHBpbms6IFsyNTUsIDIwLCAxNDddLFxuICBkZWVwc2t5Ymx1ZTogWzAsIDE5MSwgMjU1XSxcbiAgZGltZ3JheTogWzEwNSwgMTA1LCAxMDVdLFxuICBkaW1ncmV5OiBbMTA1LCAxMDUsIDEwNV0sXG4gIGRvZGdlcmJsdWU6IFszMCwgMTQ0LCAyNTVdLFxuICBmaXJlYnJpY2s6IFsxNzgsIDM0LCAzNF0sXG4gIGZsb3JhbHdoaXRlOiBbMjU1LCAyNTAsIDI0MF0sXG4gIGZvcmVzdGdyZWVuOiBbMzQsIDEzOSwgMzRdLFxuICBmdWNoc2lhOiBbMjU1LCAwLCAyNTVdLFxuICBnYWluc2Jvcm86IFsyMjAsIDIyMCwgMjIwXSxcbiAgZ2hvc3R3aGl0ZTogWzI0OCwgMjQ4LCAyNTVdLFxuICBnb2xkOiBbMjU1LCAyMTUsIDBdLFxuICBnb2xkZW5yb2Q6IFsyMTgsIDE2NSwgMzJdLFxuICBncmF5OiBbMTI4LCAxMjgsIDEyOF0sXG4gIGdyZXk6IFsxMjgsIDEyOCwgMTI4XSxcbiAgZ3JlZW46IFswLCAxMjgsIDBdLFxuICBncmVlbnllbGxvdzogWzE3MywgMjU1LCA0N10sXG4gIGhvbmV5ZGV3OiBbMjQwLCAyNTUsIDI0MF0sXG4gIGhvdHBpbms6IFsyNTUsIDEwNSwgMTgwXSxcbiAgaW5kaWFucmVkOiBbMjA1LCA5MiwgOTJdLFxuICBpbmRpZ286IFs3NSwgMCwgMTMwXSxcbiAgaXZvcnk6IFsyNTUsIDI1NSwgMjQwXSxcbiAga2hha2k6IFsyNDAsIDIzMCwgMTQwXSxcbiAgbGF2ZW5kZXI6IFsyMzAsIDIzMCwgMjUwXSxcbiAgbGF2ZW5kZXJibHVzaDogWzI1NSwgMjQwLCAyNDVdLFxuICBsYXduZ3JlZW46IFsxMjQsIDI1MiwgMF0sXG4gIGxlbW9uY2hpZmZvbjogWzI1NSwgMjUwLCAyMDVdLFxuICBsaWdodGJsdWU6IFsxNzMsIDIxNiwgMjMwXSxcbiAgbGlnaHRjb3JhbDogWzI0MCwgMTI4LCAxMjhdLFxuICBsaWdodGN5YW46IFsyMjQsIDI1NSwgMjU1XSxcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFsyNTAsIDI1MCwgMjEwXSxcbiAgbGlnaHRncmF5OiBbMjExLCAyMTEsIDIxMV0sXG4gIGxpZ2h0Z3JlZW46IFsxNDQsIDIzOCwgMTQ0XSxcbiAgbGlnaHRncmV5OiBbMjExLCAyMTEsIDIxMV0sXG4gIGxpZ2h0cGluazogWzI1NSwgMTgyLCAxOTNdLFxuICBsaWdodHNhbG1vbjogWzI1NSwgMTYwLCAxMjJdLFxuICBsaWdodHNlYWdyZWVuOiBbMzIsIDE3OCwgMTcwXSxcbiAgbGlnaHRza3libHVlOiBbMTM1LCAyMDYsIDI1MF0sXG4gIGxpZ2h0c2xhdGVncmF5OiBbMTE5LCAxMzYsIDE1M10sXG4gIGxpZ2h0c2xhdGVncmV5OiBbMTE5LCAxMzYsIDE1M10sXG4gIGxpZ2h0c3RlZWxibHVlOiBbMTc2LCAxOTYsIDIyMl0sXG4gIGxpZ2h0eWVsbG93OiBbMjU1LCAyNTUsIDIyNF0sXG4gIGxpbWU6IFswLCAyNTUsIDBdLFxuICBsaW1lZ3JlZW46IFs1MCwgMjA1LCA1MF0sXG4gIGxpbmVuOiBbMjUwLCAyNDAsIDIzMF0sXG4gIG1hZ2VudGE6IFsyNTUsIDAsIDI1NV0sXG4gIG1hcm9vbjogWzEyOCwgMCwgMF0sXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFsxMDIsIDIwNSwgMTcwXSxcbiAgbWVkaXVtYmx1ZTogWzAsIDAsIDIwNV0sXG4gIG1lZGl1bW9yY2hpZDogWzE4NiwgODUsIDIxMV0sXG4gIG1lZGl1bXB1cnBsZTogWzE0NywgMTEyLCAyMTldLFxuICBtZWRpdW1zZWFncmVlbjogWzYwLCAxNzksIDExM10sXG4gIG1lZGl1bXNsYXRlYmx1ZTogWzEyMywgMTA0LCAyMzhdLFxuICBtZWRpdW1zcHJpbmdncmVlbjogWzAsIDI1MCwgMTU0XSxcbiAgbWVkaXVtdHVycXVvaXNlOiBbNzIsIDIwOSwgMjA0XSxcbiAgbWVkaXVtdmlvbGV0cmVkOiBbMTk5LCAyMSwgMTMzXSxcbiAgbWlkbmlnaHRibHVlOiBbMjUsIDI1LCAxMTJdLFxuICBtaW50Y3JlYW06IFsyNDUsIDI1NSwgMjUwXSxcbiAgbWlzdHlyb3NlOiBbMjU1LCAyMjgsIDIyNV0sXG4gIG1vY2Nhc2luOiBbMjU1LCAyMjgsIDE4MV0sXG4gIG5hdmFqb3doaXRlOiBbMjU1LCAyMjIsIDE3M10sXG4gIG5hdnk6IFswLCAwLCAxMjhdLFxuICBvbGRsYWNlOiBbMjUzLCAyNDUsIDIzMF0sXG4gIG9saXZlOiBbMTI4LCAxMjgsIDBdLFxuICBvbGl2ZWRyYWI6IFsxMDcsIDE0MiwgMzVdLFxuICBvcmFuZ2U6IFsyNTUsIDE2NSwgMF0sXG4gIG9yYW5nZXJlZDogWzI1NSwgNjksIDBdLFxuICBvcmNoaWQ6IFsyMTgsIDExMiwgMjE0XSxcbiAgcGFsZWdvbGRlbnJvZDogWzIzOCwgMjMyLCAxNzBdLFxuICBwYWxlZ3JlZW46IFsxNTIsIDI1MSwgMTUyXSxcbiAgcGFsZXR1cnF1b2lzZTogWzE3NSwgMjM4LCAyMzhdLFxuICBwYWxldmlvbGV0cmVkOiBbMjE5LCAxMTIsIDE0N10sXG4gIHBhcGF5YXdoaXA6IFsyNTUsIDIzOSwgMjEzXSxcbiAgcGVhY2hwdWZmOiBbMjU1LCAyMTgsIDE4NV0sXG4gIHBlcnU6IFsyMDUsIDEzMywgNjNdLFxuICBwaW5rOiBbMjU1LCAxOTIsIDIwM10sXG4gIHBsdW06IFsyMjEsIDE2MCwgMjIxXSxcbiAgcG93ZGVyYmx1ZTogWzE3NiwgMjI0LCAyMzBdLFxuICBwdXJwbGU6IFsxMjgsIDAsIDEyOF0sXG4gIHJlZDogWzI1NSwgMCwgMF0sXG4gIHJvc3licm93bjogWzE4OCwgMTQzLCAxNDNdLFxuICByb3lhbGJsdWU6IFs2NSwgMTA1LCAyMjVdLFxuICBzYWRkbGVicm93bjogWzEzOSwgNjksIDE5XSxcbiAgc2FsbW9uOiBbMjUwLCAxMjgsIDExNF0sXG4gIHNhbmR5YnJvd246IFsyNDQsIDE2NCwgOTZdLFxuICBzZWFncmVlbjogWzQ2LCAxMzksIDg3XSxcbiAgc2Vhc2hlbGw6IFsyNTUsIDI0NSwgMjM4XSxcbiAgc2llbm5hOiBbMTYwLCA4MiwgNDVdLFxuICBzaWx2ZXI6IFsxOTIsIDE5MiwgMTkyXSxcbiAgc2t5Ymx1ZTogWzEzNSwgMjA2LCAyMzVdLFxuICBzbGF0ZWJsdWU6IFsxMDYsIDkwLCAyMDVdLFxuICBzbGF0ZWdyYXk6IFsxMTIsIDEyOCwgMTQ0XSxcbiAgc2xhdGVncmV5OiBbMTEyLCAxMjgsIDE0NF0sXG4gIHNub3c6IFsyNTUsIDI1MCwgMjUwXSxcbiAgc3ByaW5nZ3JlZW46IFswLCAyNTUsIDEyN10sXG4gIHN0ZWVsYmx1ZTogWzcwLCAxMzAsIDE4MF0sXG4gIHRhbjogWzIxMCwgMTgwLCAxNDBdLFxuICB0ZWFsOiBbMCwgMTI4LCAxMjhdLFxuICB0aGlzdGxlOiBbMjE2LCAxOTEsIDIxNl0sXG4gIHRvbWF0bzogWzI1NSwgOTksIDcxXSxcbiAgdHVycXVvaXNlOiBbNjQsIDIyNCwgMjA4XSxcbiAgdmlvbGV0OiBbMjM4LCAxMzAsIDIzOF0sXG4gIHdoZWF0OiBbMjQ1LCAyMjIsIDE3OV0sXG4gIHdoaXRlOiBbMjU1LCAyNTUsIDI1NV0sXG4gIHdoaXRlc21va2U6IFsyNDUsIDI0NSwgMjQ1XSxcbiAgeWVsbG93OiBbMjU1LCAyNTUsIDBdLFxuICB5ZWxsb3dncmVlbjogWzE1NCwgMjA1LCA1MF1cbn07XG52YXIgY3gsIGN5LCBweCwgcHksIHN4LCBzeTtcbmN4ID0gY3kgPSBweCA9IHB5ID0gc3ggPSBzeSA9IDA7XG52YXIgcGFyYW1ldGVycyA9IHtcbiAgQTogNyxcbiAgYTogNyxcbiAgQzogNixcbiAgYzogNixcbiAgSDogMSxcbiAgaDogMSxcbiAgTDogMixcbiAgbDogMixcbiAgTTogMixcbiAgbTogMixcbiAgUTogNCxcbiAgcTogNCxcbiAgUzogNCxcbiAgczogNCxcbiAgVDogMixcbiAgdDogMixcbiAgVjogMSxcbiAgdjogMSxcbiAgWjogMCxcbiAgejogMFxufTtcblxudmFyIHBhcnNlID0gZnVuY3Rpb24gcGFyc2UocGF0aCkge1xuICB2YXIgY21kO1xuICB2YXIgcmV0ID0gW107XG4gIHZhciBhcmdzID0gW107XG4gIHZhciBjdXJBcmcgPSAnJztcbiAgdmFyIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuICB2YXIgcGFyYW1zID0gMDtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocGF0aCksXG4gICAgICBfc3RlcDtcblxuICB0cnkge1xuICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgYyA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICBpZiAocGFyYW1ldGVyc1tjXSAhPSBudWxsKSB7XG4gICAgICAgIHBhcmFtcyA9IHBhcmFtZXRlcnNbY107XG5cbiAgICAgICAgaWYgKGNtZCkge1xuICAgICAgICAgIC8vIHNhdmUgZXhpc3RpbmcgY29tbWFuZFxuICAgICAgICAgIGlmIChjdXJBcmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXJnc1thcmdzLmxlbmd0aF0gPSArY3VyQXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldFtyZXQubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgIGNtZDogY21kLFxuICAgICAgICAgICAgYXJnczogYXJnc1xuICAgICAgICAgIH07XG4gICAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICAgIGN1ckFyZyA9ICcnO1xuICAgICAgICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY21kID0gYztcbiAgICAgIH0gZWxzZSBpZiAoWycgJywgJywnXS5pbmNsdWRlcyhjKSB8fCBjID09PSAnLScgJiYgY3VyQXJnLmxlbmd0aCA+IDAgJiYgY3VyQXJnW2N1ckFyZy5sZW5ndGggLSAxXSAhPT0gJ2UnIHx8IGMgPT09ICcuJyAmJiBmb3VuZERlY2ltYWwpIHtcbiAgICAgICAgaWYgKGN1ckFyZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gcGFyYW1zKSB7XG4gICAgICAgICAgLy8gaGFuZGxlIHJldXNlZCBjb21tYW5kc1xuICAgICAgICAgIHJldFtyZXQubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgIGNtZDogY21kLFxuICAgICAgICAgICAgYXJnczogYXJnc1xuICAgICAgICAgIH07XG4gICAgICAgICAgYXJncyA9IFsrY3VyQXJnXTsgLy8gaGFuZGxlIGFzc3VtZWQgY29tbWFuZHNcblxuICAgICAgICAgIGlmIChjbWQgPT09ICdNJykge1xuICAgICAgICAgICAgY21kID0gJ0wnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjbWQgPT09ICdtJykge1xuICAgICAgICAgICAgY21kID0gJ2wnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcmdzW2FyZ3MubGVuZ3RoXSA9ICtjdXJBcmc7XG4gICAgICAgIH1cblxuICAgICAgICBmb3VuZERlY2ltYWwgPSBjID09PSAnLic7IC8vIGZpeCBmb3IgbmVnYXRpdmUgbnVtYmVycyBvciByZXBlYXRlZCBkZWNpbWFscyB3aXRoIG5vIGRlbGltZXRlciBiZXR3ZWVuIGNvbW1hbmRzXG5cbiAgICAgICAgY3VyQXJnID0gWyctJywgJy4nXS5pbmNsdWRlcyhjKSA/IGMgOiAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1ckFyZyArPSBjO1xuXG4gICAgICAgIGlmIChjID09PSAnLicpIHtcbiAgICAgICAgICBmb3VuZERlY2ltYWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBhZGQgdGhlIGxhc3QgY29tbWFuZFxuXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9pdGVyYXRvci5lKGVycik7XG4gIH0gZmluYWxseSB7XG4gICAgX2l0ZXJhdG9yLmYoKTtcbiAgfVxuXG4gIGlmIChjdXJBcmcubGVuZ3RoID4gMCkge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gcGFyYW1zKSB7XG4gICAgICAvLyBoYW5kbGUgcmV1c2VkIGNvbW1hbmRzXG4gICAgICByZXRbcmV0Lmxlbmd0aF0gPSB7XG4gICAgICAgIGNtZDogY21kLFxuICAgICAgICBhcmdzOiBhcmdzXG4gICAgICB9O1xuICAgICAgYXJncyA9IFsrY3VyQXJnXTsgLy8gaGFuZGxlIGFzc3VtZWQgY29tbWFuZHNcblxuICAgICAgaWYgKGNtZCA9PT0gJ00nKSB7XG4gICAgICAgIGNtZCA9ICdMJztcbiAgICAgIH1cblxuICAgICAgaWYgKGNtZCA9PT0gJ20nKSB7XG4gICAgICAgIGNtZCA9ICdsJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXJnc1thcmdzLmxlbmd0aF0gPSArY3VyQXJnO1xuICAgIH1cbiAgfVxuXG4gIHJldFtyZXQubGVuZ3RoXSA9IHtcbiAgICBjbWQ6IGNtZCxcbiAgICBhcmdzOiBhcmdzXG4gIH07XG4gIHJldHVybiByZXQ7XG59O1xuXG52YXIgX2FwcGx5ID0gZnVuY3Rpb24gYXBwbHkoY29tbWFuZHMsIGRvYykge1xuICAvLyBjdXJyZW50IHBvaW50LCBjb250cm9sIHBvaW50LCBhbmQgc3VicGF0aCBzdGFydGluZyBwb2ludFxuICBjeCA9IGN5ID0gcHggPSBweSA9IHN4ID0gc3kgPSAwOyAvLyBydW4gdGhlIGNvbW1hbmRzXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjID0gY29tbWFuZHNbaV07XG5cbiAgICBpZiAodHlwZW9mIHJ1bm5lcnNbYy5jbWRdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBydW5uZXJzW2MuY21kXShkb2MsIGMuYXJncyk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcnVubmVycyA9IHtcbiAgTTogZnVuY3Rpb24gTShkb2MsIGEpIHtcbiAgICBjeCA9IGFbMF07XG4gICAgY3kgPSBhWzFdO1xuICAgIHB4ID0gcHkgPSBudWxsO1xuICAgIHN4ID0gY3g7XG4gICAgc3kgPSBjeTtcbiAgICByZXR1cm4gZG9jLm1vdmVUbyhjeCwgY3kpO1xuICB9LFxuICBtOiBmdW5jdGlvbiBtKGRvYywgYSkge1xuICAgIGN4ICs9IGFbMF07XG4gICAgY3kgKz0gYVsxXTtcbiAgICBweCA9IHB5ID0gbnVsbDtcbiAgICBzeCA9IGN4O1xuICAgIHN5ID0gY3k7XG4gICAgcmV0dXJuIGRvYy5tb3ZlVG8oY3gsIGN5KTtcbiAgfSxcbiAgQzogZnVuY3Rpb24gQyhkb2MsIGEpIHtcbiAgICBjeCA9IGFbNF07XG4gICAgY3kgPSBhWzVdO1xuICAgIHB4ID0gYVsyXTtcbiAgICBweSA9IGFbM107XG4gICAgcmV0dXJuIGRvYy5iZXppZXJDdXJ2ZVRvLmFwcGx5KGRvYywgX3RvQ29uc3VtYWJsZUFycmF5KGEpKTtcbiAgfSxcbiAgYzogZnVuY3Rpb24gYyhkb2MsIGEpIHtcbiAgICBkb2MuYmV6aWVyQ3VydmVUbyhhWzBdICsgY3gsIGFbMV0gKyBjeSwgYVsyXSArIGN4LCBhWzNdICsgY3ksIGFbNF0gKyBjeCwgYVs1XSArIGN5KTtcbiAgICBweCA9IGN4ICsgYVsyXTtcbiAgICBweSA9IGN5ICsgYVszXTtcbiAgICBjeCArPSBhWzRdO1xuICAgIHJldHVybiBjeSArPSBhWzVdO1xuICB9LFxuICBTOiBmdW5jdGlvbiBTKGRvYywgYSkge1xuICAgIGlmIChweCA9PT0gbnVsbCkge1xuICAgICAgcHggPSBjeDtcbiAgICAgIHB5ID0gY3k7XG4gICAgfVxuXG4gICAgZG9jLmJlemllckN1cnZlVG8oY3ggLSAocHggLSBjeCksIGN5IC0gKHB5IC0gY3kpLCBhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBweCA9IGFbMF07XG4gICAgcHkgPSBhWzFdO1xuICAgIGN4ID0gYVsyXTtcbiAgICByZXR1cm4gY3kgPSBhWzNdO1xuICB9LFxuICBzOiBmdW5jdGlvbiBzKGRvYywgYSkge1xuICAgIGlmIChweCA9PT0gbnVsbCkge1xuICAgICAgcHggPSBjeDtcbiAgICAgIHB5ID0gY3k7XG4gICAgfVxuXG4gICAgZG9jLmJlemllckN1cnZlVG8oY3ggLSAocHggLSBjeCksIGN5IC0gKHB5IC0gY3kpLCBjeCArIGFbMF0sIGN5ICsgYVsxXSwgY3ggKyBhWzJdLCBjeSArIGFbM10pO1xuICAgIHB4ID0gY3ggKyBhWzBdO1xuICAgIHB5ID0gY3kgKyBhWzFdO1xuICAgIGN4ICs9IGFbMl07XG4gICAgcmV0dXJuIGN5ICs9IGFbM107XG4gIH0sXG4gIFE6IGZ1bmN0aW9uIFEoZG9jLCBhKSB7XG4gICAgcHggPSBhWzBdO1xuICAgIHB5ID0gYVsxXTtcbiAgICBjeCA9IGFbMl07XG4gICAgY3kgPSBhWzNdO1xuICAgIHJldHVybiBkb2MucXVhZHJhdGljQ3VydmVUbyhhWzBdLCBhWzFdLCBjeCwgY3kpO1xuICB9LFxuICBxOiBmdW5jdGlvbiBxKGRvYywgYSkge1xuICAgIGRvYy5xdWFkcmF0aWNDdXJ2ZVRvKGFbMF0gKyBjeCwgYVsxXSArIGN5LCBhWzJdICsgY3gsIGFbM10gKyBjeSk7XG4gICAgcHggPSBjeCArIGFbMF07XG4gICAgcHkgPSBjeSArIGFbMV07XG4gICAgY3ggKz0gYVsyXTtcbiAgICByZXR1cm4gY3kgKz0gYVszXTtcbiAgfSxcbiAgVDogZnVuY3Rpb24gVChkb2MsIGEpIHtcbiAgICBpZiAocHggPT09IG51bGwpIHtcbiAgICAgIHB4ID0gY3g7XG4gICAgICBweSA9IGN5O1xuICAgIH0gZWxzZSB7XG4gICAgICBweCA9IGN4IC0gKHB4IC0gY3gpO1xuICAgICAgcHkgPSBjeSAtIChweSAtIGN5KTtcbiAgICB9XG5cbiAgICBkb2MucXVhZHJhdGljQ3VydmVUbyhweCwgcHksIGFbMF0sIGFbMV0pO1xuICAgIHB4ID0gY3ggLSAocHggLSBjeCk7XG4gICAgcHkgPSBjeSAtIChweSAtIGN5KTtcbiAgICBjeCA9IGFbMF07XG4gICAgcmV0dXJuIGN5ID0gYVsxXTtcbiAgfSxcbiAgdDogZnVuY3Rpb24gdChkb2MsIGEpIHtcbiAgICBpZiAocHggPT09IG51bGwpIHtcbiAgICAgIHB4ID0gY3g7XG4gICAgICBweSA9IGN5O1xuICAgIH0gZWxzZSB7XG4gICAgICBweCA9IGN4IC0gKHB4IC0gY3gpO1xuICAgICAgcHkgPSBjeSAtIChweSAtIGN5KTtcbiAgICB9XG5cbiAgICBkb2MucXVhZHJhdGljQ3VydmVUbyhweCwgcHksIGN4ICsgYVswXSwgY3kgKyBhWzFdKTtcbiAgICBjeCArPSBhWzBdO1xuICAgIHJldHVybiBjeSArPSBhWzFdO1xuICB9LFxuICBBOiBmdW5jdGlvbiBBKGRvYywgYSkge1xuICAgIHNvbHZlQXJjKGRvYywgY3gsIGN5LCBhKTtcbiAgICBjeCA9IGFbNV07XG4gICAgcmV0dXJuIGN5ID0gYVs2XTtcbiAgfSxcbiAgYTogZnVuY3Rpb24gYShkb2MsIF9hKSB7XG4gICAgX2FbNV0gKz0gY3g7XG4gICAgX2FbNl0gKz0gY3k7XG4gICAgc29sdmVBcmMoZG9jLCBjeCwgY3ksIF9hKTtcbiAgICBjeCA9IF9hWzVdO1xuICAgIHJldHVybiBjeSA9IF9hWzZdO1xuICB9LFxuICBMOiBmdW5jdGlvbiBMKGRvYywgYSkge1xuICAgIGN4ID0gYVswXTtcbiAgICBjeSA9IGFbMV07XG4gICAgcHggPSBweSA9IG51bGw7XG4gICAgcmV0dXJuIGRvYy5saW5lVG8oY3gsIGN5KTtcbiAgfSxcbiAgbDogZnVuY3Rpb24gbChkb2MsIGEpIHtcbiAgICBjeCArPSBhWzBdO1xuICAgIGN5ICs9IGFbMV07XG4gICAgcHggPSBweSA9IG51bGw7XG4gICAgcmV0dXJuIGRvYy5saW5lVG8oY3gsIGN5KTtcbiAgfSxcbiAgSDogZnVuY3Rpb24gSChkb2MsIGEpIHtcbiAgICBjeCA9IGFbMF07XG4gICAgcHggPSBweSA9IG51bGw7XG4gICAgcmV0dXJuIGRvYy5saW5lVG8oY3gsIGN5KTtcbiAgfSxcbiAgaDogZnVuY3Rpb24gaChkb2MsIGEpIHtcbiAgICBjeCArPSBhWzBdO1xuICAgIHB4ID0gcHkgPSBudWxsO1xuICAgIHJldHVybiBkb2MubGluZVRvKGN4LCBjeSk7XG4gIH0sXG4gIFY6IGZ1bmN0aW9uIFYoZG9jLCBhKSB7XG4gICAgY3kgPSBhWzBdO1xuICAgIHB4ID0gcHkgPSBudWxsO1xuICAgIHJldHVybiBkb2MubGluZVRvKGN4LCBjeSk7XG4gIH0sXG4gIHY6IGZ1bmN0aW9uIHYoZG9jLCBhKSB7XG4gICAgY3kgKz0gYVswXTtcbiAgICBweCA9IHB5ID0gbnVsbDtcbiAgICByZXR1cm4gZG9jLmxpbmVUbyhjeCwgY3kpO1xuICB9LFxuICBaOiBmdW5jdGlvbiBaKGRvYykge1xuICAgIGRvYy5jbG9zZVBhdGgoKTtcbiAgICBjeCA9IHN4O1xuICAgIHJldHVybiBjeSA9IHN5O1xuICB9LFxuICB6OiBmdW5jdGlvbiB6KGRvYykge1xuICAgIGRvYy5jbG9zZVBhdGgoKTtcbiAgICBjeCA9IHN4O1xuICAgIHJldHVybiBjeSA9IHN5O1xuICB9XG59O1xuXG52YXIgc29sdmVBcmMgPSBmdW5jdGlvbiBzb2x2ZUFyYyhkb2MsIHgsIHksIGNvb3Jkcykge1xuICB2YXIgX2Nvb3JkcyA9IF9zbGljZWRUb0FycmF5KGNvb3JkcywgNyksXG4gICAgICByeCA9IF9jb29yZHNbMF0sXG4gICAgICByeSA9IF9jb29yZHNbMV0sXG4gICAgICByb3QgPSBfY29vcmRzWzJdLFxuICAgICAgbGFyZ2UgPSBfY29vcmRzWzNdLFxuICAgICAgc3dlZXAgPSBfY29vcmRzWzRdLFxuICAgICAgZXggPSBfY29vcmRzWzVdLFxuICAgICAgZXkgPSBfY29vcmRzWzZdO1xuXG4gIHZhciBzZWdzID0gYXJjVG9TZWdtZW50cyhleCwgZXksIHJ4LCByeSwgbGFyZ2UsIHN3ZWVwLCByb3QsIHgsIHkpO1xuXG4gIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoc2VncyksXG4gICAgICBfc3RlcDI7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykge1xuICAgICAgdmFyIHNlZyA9IF9zdGVwMi52YWx1ZTtcbiAgICAgIHZhciBiZXogPSBzZWdtZW50VG9CZXppZXIuYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkoc2VnKSk7XG4gICAgICBkb2MuYmV6aWVyQ3VydmVUby5hcHBseShkb2MsIF90b0NvbnN1bWFibGVBcnJheShiZXopKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9pdGVyYXRvcjIuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvcjIuZigpO1xuICB9XG59OyAvLyBmcm9tIElua3NjYXBlIHN2Z3RvcGRmLCB0aGFua3MhXG5cblxudmFyIGFyY1RvU2VnbWVudHMgPSBmdW5jdGlvbiBhcmNUb1NlZ21lbnRzKHgsIHksIHJ4LCByeSwgbGFyZ2UsIHN3ZWVwLCByb3RhdGVYLCBveCwgb3kpIHtcbiAgdmFyIHRoID0gcm90YXRlWCAqIChNYXRoLlBJIC8gMTgwKTtcbiAgdmFyIHNpbl90aCA9IE1hdGguc2luKHRoKTtcbiAgdmFyIGNvc190aCA9IE1hdGguY29zKHRoKTtcbiAgcnggPSBNYXRoLmFicyhyeCk7XG4gIHJ5ID0gTWF0aC5hYnMocnkpO1xuICBweCA9IGNvc190aCAqIChveCAtIHgpICogMC41ICsgc2luX3RoICogKG95IC0geSkgKiAwLjU7XG4gIHB5ID0gY29zX3RoICogKG95IC0geSkgKiAwLjUgLSBzaW5fdGggKiAob3ggLSB4KSAqIDAuNTtcbiAgdmFyIHBsID0gcHggKiBweCAvIChyeCAqIHJ4KSArIHB5ICogcHkgLyAocnkgKiByeSk7XG5cbiAgaWYgKHBsID4gMSkge1xuICAgIHBsID0gTWF0aC5zcXJ0KHBsKTtcbiAgICByeCAqPSBwbDtcbiAgICByeSAqPSBwbDtcbiAgfVxuXG4gIHZhciBhMDAgPSBjb3NfdGggLyByeDtcbiAgdmFyIGEwMSA9IHNpbl90aCAvIHJ4O1xuICB2YXIgYTEwID0gLXNpbl90aCAvIHJ5O1xuICB2YXIgYTExID0gY29zX3RoIC8gcnk7XG4gIHZhciB4MCA9IGEwMCAqIG94ICsgYTAxICogb3k7XG4gIHZhciB5MCA9IGExMCAqIG94ICsgYTExICogb3k7XG4gIHZhciB4MSA9IGEwMCAqIHggKyBhMDEgKiB5O1xuICB2YXIgeTEgPSBhMTAgKiB4ICsgYTExICogeTtcbiAgdmFyIGQgPSAoeDEgLSB4MCkgKiAoeDEgLSB4MCkgKyAoeTEgLSB5MCkgKiAoeTEgLSB5MCk7XG4gIHZhciBzZmFjdG9yX3NxID0gMSAvIGQgLSAwLjI1O1xuXG4gIGlmIChzZmFjdG9yX3NxIDwgMCkge1xuICAgIHNmYWN0b3Jfc3EgPSAwO1xuICB9XG5cbiAgdmFyIHNmYWN0b3IgPSBNYXRoLnNxcnQoc2ZhY3Rvcl9zcSk7XG5cbiAgaWYgKHN3ZWVwID09PSBsYXJnZSkge1xuICAgIHNmYWN0b3IgPSAtc2ZhY3RvcjtcbiAgfVxuXG4gIHZhciB4YyA9IDAuNSAqICh4MCArIHgxKSAtIHNmYWN0b3IgKiAoeTEgLSB5MCk7XG4gIHZhciB5YyA9IDAuNSAqICh5MCArIHkxKSArIHNmYWN0b3IgKiAoeDEgLSB4MCk7XG4gIHZhciB0aDAgPSBNYXRoLmF0YW4yKHkwIC0geWMsIHgwIC0geGMpO1xuICB2YXIgdGgxID0gTWF0aC5hdGFuMih5MSAtIHljLCB4MSAtIHhjKTtcbiAgdmFyIHRoX2FyYyA9IHRoMSAtIHRoMDtcblxuICBpZiAodGhfYXJjIDwgMCAmJiBzd2VlcCA9PT0gMSkge1xuICAgIHRoX2FyYyArPSAyICogTWF0aC5QSTtcbiAgfSBlbHNlIGlmICh0aF9hcmMgPiAwICYmIHN3ZWVwID09PSAwKSB7XG4gICAgdGhfYXJjIC09IDIgKiBNYXRoLlBJO1xuICB9XG5cbiAgdmFyIHNlZ21lbnRzID0gTWF0aC5jZWlsKE1hdGguYWJzKHRoX2FyYyAvIChNYXRoLlBJICogMC41ICsgMC4wMDEpKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzOyBpKyspIHtcbiAgICB2YXIgdGgyID0gdGgwICsgaSAqIHRoX2FyYyAvIHNlZ21lbnRzO1xuICAgIHZhciB0aDMgPSB0aDAgKyAoaSArIDEpICogdGhfYXJjIC8gc2VnbWVudHM7XG4gICAgcmVzdWx0W2ldID0gW3hjLCB5YywgdGgyLCB0aDMsIHJ4LCByeSwgc2luX3RoLCBjb3NfdGhdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBzZWdtZW50VG9CZXppZXIgPSBmdW5jdGlvbiBzZWdtZW50VG9CZXppZXIoY3gsIGN5LCB0aDAsIHRoMSwgcngsIHJ5LCBzaW5fdGgsIGNvc190aCkge1xuICB2YXIgYTAwID0gY29zX3RoICogcng7XG4gIHZhciBhMDEgPSAtc2luX3RoICogcnk7XG4gIHZhciBhMTAgPSBzaW5fdGggKiByeDtcbiAgdmFyIGExMSA9IGNvc190aCAqIHJ5O1xuICB2YXIgdGhfaGFsZiA9IDAuNSAqICh0aDEgLSB0aDApO1xuICB2YXIgdCA9IDggLyAzICogTWF0aC5zaW4odGhfaGFsZiAqIDAuNSkgKiBNYXRoLnNpbih0aF9oYWxmICogMC41KSAvIE1hdGguc2luKHRoX2hhbGYpO1xuICB2YXIgeDEgPSBjeCArIE1hdGguY29zKHRoMCkgLSB0ICogTWF0aC5zaW4odGgwKTtcbiAgdmFyIHkxID0gY3kgKyBNYXRoLnNpbih0aDApICsgdCAqIE1hdGguY29zKHRoMCk7XG4gIHZhciB4MyA9IGN4ICsgTWF0aC5jb3ModGgxKTtcbiAgdmFyIHkzID0gY3kgKyBNYXRoLnNpbih0aDEpO1xuICB2YXIgeDIgPSB4MyArIHQgKiBNYXRoLnNpbih0aDEpO1xuICB2YXIgeTIgPSB5MyAtIHQgKiBNYXRoLmNvcyh0aDEpO1xuICByZXR1cm4gW2EwMCAqIHgxICsgYTAxICogeTEsIGExMCAqIHgxICsgYTExICogeTEsIGEwMCAqIHgyICsgYTAxICogeTIsIGExMCAqIHgyICsgYTExICogeTIsIGEwMCAqIHgzICsgYTAxICogeTMsIGExMCAqIHgzICsgYTExICogeTNdO1xufTtcblxudmFyIFNWR1BhdGggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTVkdQYXRoKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTVkdQYXRoKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTVkdQYXRoLCBudWxsLCBbe1xuICAgIGtleTogXCJhcHBseVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhcHBseShkb2MsIHBhdGgpIHtcbiAgICAgIHZhciBjb21tYW5kcyA9IHBhcnNlKHBhdGgpO1xuXG4gICAgICBfYXBwbHkoY29tbWFuZHMsIGRvYyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNWR1BhdGg7XG59KCk7XG5cbnZhciBudW1iZXIkMSA9IFBERk9iamVjdC5udW1iZXI7IC8vIFRoaXMgY29uc3RhbnQgaXMgdXNlZCB0byBhcHByb3hpbWF0ZSBhIHN5bW1ldHJpY2FsIGFyYyB1c2luZyBhIGN1YmljXG4vLyBCZXppZXIgY3VydmUuXG5cbnZhciBLQVBQQSA9IDQuMCAqICgoTWF0aC5zcXJ0KDIpIC0gMS4wKSAvIDMuMCk7XG52YXIgVmVjdG9yTWl4aW4gPSB7XG4gIGluaXRWZWN0b3I6IGZ1bmN0aW9uIGluaXRWZWN0b3IoKSB7XG4gICAgdGhpcy5fY3RtID0gWzEsIDAsIDAsIDEsIDAsIDBdOyAvLyBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIG1hdHJpeFxuXG4gICAgcmV0dXJuIHRoaXMuX2N0bVN0YWNrID0gW107XG4gIH0sXG4gIHNhdmU6IGZ1bmN0aW9uIHNhdmUoKSB7XG4gICAgdGhpcy5fY3RtU3RhY2sucHVzaCh0aGlzLl9jdG0uc2xpY2UoKSk7IC8vIFRPRE86IHNhdmUvcmVzdG9yZSBjb2xvcnNwYWNlIGFuZCBzdHlsZXMgc28gbm90IHNldHRpbmcgaXQgdW5uZXNzZXNhcmlseSBhbGwgdGhlIHRpbWU/XG5cblxuICAgIHJldHVybiB0aGlzLmFkZENvbnRlbnQoJ3EnKTtcbiAgfSxcbiAgcmVzdG9yZTogZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICB0aGlzLl9jdG0gPSB0aGlzLl9jdG1TdGFjay5wb3AoKSB8fCBbMSwgMCwgMCwgMSwgMCwgMF07XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29udGVudCgnUScpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uIGNsb3NlUGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb250ZW50KCdoJyk7XG4gIH0sXG4gIGxpbmVXaWR0aDogZnVuY3Rpb24gbGluZVdpZHRoKHcpIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb250ZW50KFwiXCIuY29uY2F0KG51bWJlciQxKHcpLCBcIiB3XCIpKTtcbiAgfSxcbiAgX0NBUF9TVFlMRVM6IHtcbiAgICBCVVRUOiAwLFxuICAgIFJPVU5EOiAxLFxuICAgIFNRVUFSRTogMlxuICB9LFxuICBsaW5lQ2FwOiBmdW5jdGlvbiBsaW5lQ2FwKGMpIHtcbiAgICBpZiAodHlwZW9mIGMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjID0gdGhpcy5fQ0FQX1NUWUxFU1tjLnRvVXBwZXJDYXNlKCldO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZENvbnRlbnQoXCJcIi5jb25jYXQoYywgXCIgSlwiKSk7XG4gIH0sXG4gIF9KT0lOX1NUWUxFUzoge1xuICAgIE1JVEVSOiAwLFxuICAgIFJPVU5EOiAxLFxuICAgIEJFVkVMOiAyXG4gIH0sXG4gIGxpbmVKb2luOiBmdW5jdGlvbiBsaW5lSm9pbihqKSB7XG4gICAgaWYgKHR5cGVvZiBqID09PSAnc3RyaW5nJykge1xuICAgICAgaiA9IHRoaXMuX0pPSU5fU1RZTEVTW2oudG9VcHBlckNhc2UoKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkQ29udGVudChcIlwiLmNvbmNhdChqLCBcIiBqXCIpKTtcbiAgfSxcbiAgbWl0ZXJMaW1pdDogZnVuY3Rpb24gbWl0ZXJMaW1pdChtKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29udGVudChcIlwiLmNvbmNhdChudW1iZXIkMShtKSwgXCIgTVwiKSk7XG4gIH0sXG4gIGRhc2g6IGZ1bmN0aW9uIGRhc2gobGVuZ3RoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBvcmlnaW5hbExlbmd0aCA9IGxlbmd0aDtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBbbGVuZ3RoLCBvcHRpb25zLnNwYWNlIHx8IGxlbmd0aF07XG4gICAgfVxuXG4gICAgdmFyIHZhbGlkID0gbGVuZ3RoLmV2ZXJ5KGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHgpICYmIHggPiAwO1xuICAgIH0pO1xuXG4gICAgaWYgKCF2YWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGFzaChcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxMZW5ndGgpLCBcIiwgXCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShvcHRpb25zKSwgXCIpIGludmFsaWQsIGxlbmd0aHMgbXVzdCBiZSBudW1lcmljIGFuZCBncmVhdGVyIHRoYW4gemVyb1wiKSk7XG4gICAgfVxuXG4gICAgbGVuZ3RoID0gbGVuZ3RoLm1hcChudW1iZXIkMSkuam9pbignICcpO1xuICAgIHJldHVybiB0aGlzLmFkZENvbnRlbnQoXCJbXCIuY29uY2F0KGxlbmd0aCwgXCJdIFwiKS5jb25jYXQobnVtYmVyJDEob3B0aW9ucy5waGFzZSB8fCAwKSwgXCIgZFwiKSk7XG4gIH0sXG4gIHVuZGFzaDogZnVuY3Rpb24gdW5kYXNoKCkge1xuICAgIHJldHVybiB0aGlzLmFkZENvbnRlbnQoJ1tdIDAgZCcpO1xuICB9LFxuICBtb3ZlVG86IGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29udGVudChcIlwiLmNvbmNhdChudW1iZXIkMSh4KSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMSh5KSwgXCIgbVwiKSk7XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24gbGluZVRvKHgsIHkpIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb250ZW50KFwiXCIuY29uY2F0KG51bWJlciQxKHgpLCBcIiBcIikuY29uY2F0KG51bWJlciQxKHkpLCBcIiBsXCIpKTtcbiAgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24gYmV6aWVyQ3VydmVUbyhjcDF4LCBjcDF5LCBjcDJ4LCBjcDJ5LCB4LCB5KSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29udGVudChcIlwiLmNvbmNhdChudW1iZXIkMShjcDF4KSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMShjcDF5KSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMShjcDJ4KSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMShjcDJ5KSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMSh4KSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMSh5KSwgXCIgY1wiKSk7XG4gIH0sXG4gIHF1YWRyYXRpY0N1cnZlVG86IGZ1bmN0aW9uIHF1YWRyYXRpY0N1cnZlVG8oY3B4LCBjcHksIHgsIHkpIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb250ZW50KFwiXCIuY29uY2F0KG51bWJlciQxKGNweCksIFwiIFwiKS5jb25jYXQobnVtYmVyJDEoY3B5KSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMSh4KSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMSh5KSwgXCIgdlwiKSk7XG4gIH0sXG4gIHJlY3Q6IGZ1bmN0aW9uIHJlY3QoeCwgeSwgdywgaCkge1xuICAgIHJldHVybiB0aGlzLmFkZENvbnRlbnQoXCJcIi5jb25jYXQobnVtYmVyJDEoeCksIFwiIFwiKS5jb25jYXQobnVtYmVyJDEoeSksIFwiIFwiKS5jb25jYXQobnVtYmVyJDEodyksIFwiIFwiKS5jb25jYXQobnVtYmVyJDEoaCksIFwiIHJlXCIpKTtcbiAgfSxcbiAgcm91bmRlZFJlY3Q6IGZ1bmN0aW9uIHJvdW5kZWRSZWN0KHgsIHksIHcsIGgsIHIpIHtcbiAgICBpZiAociA9PSBudWxsKSB7XG4gICAgICByID0gMDtcbiAgICB9XG5cbiAgICByID0gTWF0aC5taW4ociwgMC41ICogdywgMC41ICogaCk7IC8vIGFtb3VudCB0byBpbnNldCBjb250cm9sIHBvaW50cyBmcm9tIGNvcm5lcnMgKHNlZSBgZWxsaXBzZWApXG5cbiAgICB2YXIgYyA9IHIgKiAoMS4wIC0gS0FQUEEpO1xuICAgIHRoaXMubW92ZVRvKHggKyByLCB5KTtcbiAgICB0aGlzLmxpbmVUbyh4ICsgdyAtIHIsIHkpO1xuICAgIHRoaXMuYmV6aWVyQ3VydmVUbyh4ICsgdyAtIGMsIHksIHggKyB3LCB5ICsgYywgeCArIHcsIHkgKyByKTtcbiAgICB0aGlzLmxpbmVUbyh4ICsgdywgeSArIGggLSByKTtcbiAgICB0aGlzLmJlemllckN1cnZlVG8oeCArIHcsIHkgKyBoIC0gYywgeCArIHcgLSBjLCB5ICsgaCwgeCArIHcgLSByLCB5ICsgaCk7XG4gICAgdGhpcy5saW5lVG8oeCArIHIsIHkgKyBoKTtcbiAgICB0aGlzLmJlemllckN1cnZlVG8oeCArIGMsIHkgKyBoLCB4LCB5ICsgaCAtIGMsIHgsIHkgKyBoIC0gcik7XG4gICAgdGhpcy5saW5lVG8oeCwgeSArIHIpO1xuICAgIHRoaXMuYmV6aWVyQ3VydmVUbyh4LCB5ICsgYywgeCArIGMsIHksIHggKyByLCB5KTtcbiAgICByZXR1cm4gdGhpcy5jbG9zZVBhdGgoKTtcbiAgfSxcbiAgZWxsaXBzZTogZnVuY3Rpb24gZWxsaXBzZSh4LCB5LCByMSwgcjIpIHtcbiAgICAvLyBiYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXMvMjE3MzA4NCMyMTczMDg0XG4gICAgaWYgKHIyID09IG51bGwpIHtcbiAgICAgIHIyID0gcjE7XG4gICAgfVxuXG4gICAgeCAtPSByMTtcbiAgICB5IC09IHIyO1xuICAgIHZhciBveCA9IHIxICogS0FQUEE7XG4gICAgdmFyIG95ID0gcjIgKiBLQVBQQTtcbiAgICB2YXIgeGUgPSB4ICsgcjEgKiAyO1xuICAgIHZhciB5ZSA9IHkgKyByMiAqIDI7XG4gICAgdmFyIHhtID0geCArIHIxO1xuICAgIHZhciB5bSA9IHkgKyByMjtcbiAgICB0aGlzLm1vdmVUbyh4LCB5bSk7XG4gICAgdGhpcy5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICB0aGlzLmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgdGhpcy5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICB0aGlzLmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICByZXR1cm4gdGhpcy5jbG9zZVBhdGgoKTtcbiAgfSxcbiAgY2lyY2xlOiBmdW5jdGlvbiBjaXJjbGUoeCwgeSwgcmFkaXVzKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxsaXBzZSh4LCB5LCByYWRpdXMpO1xuICB9LFxuICBhcmM6IGZ1bmN0aW9uIGFyYyh4LCB5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKSB7XG4gICAgaWYgKGFudGljbG9ja3dpc2UgPT0gbnVsbCkge1xuICAgICAgYW50aWNsb2Nrd2lzZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBUV09fUEkgPSAyLjAgKiBNYXRoLlBJO1xuICAgIHZhciBIQUxGX1BJID0gMC41ICogTWF0aC5QSTtcbiAgICB2YXIgZGVsdGFBbmcgPSBlbmRBbmdsZSAtIHN0YXJ0QW5nbGU7XG5cbiAgICBpZiAoTWF0aC5hYnMoZGVsdGFBbmcpID4gVFdPX1BJKSB7XG4gICAgICAvLyBkcmF3IG9ubHkgZnVsbCBjaXJjbGUgaWYgbW9yZSB0aGFuIHRoYXQgaXMgc3BlY2lmaWVkXG4gICAgICBkZWx0YUFuZyA9IFRXT19QSTtcbiAgICB9IGVsc2UgaWYgKGRlbHRhQW5nICE9PSAwICYmIGFudGljbG9ja3dpc2UgIT09IGRlbHRhQW5nIDwgMCkge1xuICAgICAgLy8gbmVjZXNzYXJ5IHRvIGZsaXAgZGlyZWN0aW9uIG9mIHJlbmRlcmluZ1xuICAgICAgdmFyIGRpciA9IGFudGljbG9ja3dpc2UgPyAtMSA6IDE7XG4gICAgICBkZWx0YUFuZyA9IGRpciAqIFRXT19QSSArIGRlbHRhQW5nO1xuICAgIH1cblxuICAgIHZhciBudW1TZWdzID0gTWF0aC5jZWlsKE1hdGguYWJzKGRlbHRhQW5nKSAvIEhBTEZfUEkpO1xuICAgIHZhciBzZWdBbmcgPSBkZWx0YUFuZyAvIG51bVNlZ3M7XG4gICAgdmFyIGhhbmRsZUxlbiA9IHNlZ0FuZyAvIEhBTEZfUEkgKiBLQVBQQSAqIHJhZGl1cztcbiAgICB2YXIgY3VyQW5nID0gc3RhcnRBbmdsZTsgLy8gY29tcG9uZW50IGRpc3RhbmNlcyBiZXR3ZWVuIGFuY2hvciBwb2ludCBhbmQgY29udHJvbCBwb2ludFxuXG4gICAgdmFyIGRlbHRhQ3ggPSAtTWF0aC5zaW4oY3VyQW5nKSAqIGhhbmRsZUxlbjtcbiAgICB2YXIgZGVsdGFDeSA9IE1hdGguY29zKGN1ckFuZykgKiBoYW5kbGVMZW47IC8vIGFuY2hvciBwb2ludFxuXG4gICAgdmFyIGF4ID0geCArIE1hdGguY29zKGN1ckFuZykgKiByYWRpdXM7XG4gICAgdmFyIGF5ID0geSArIE1hdGguc2luKGN1ckFuZykgKiByYWRpdXM7IC8vIGNhbGN1bGF0ZSBhbmQgcmVuZGVyIHNlZ21lbnRzXG5cbiAgICB0aGlzLm1vdmVUbyhheCwgYXkpO1xuXG4gICAgZm9yICh2YXIgc2VnSWR4ID0gMDsgc2VnSWR4IDwgbnVtU2Vnczsgc2VnSWR4KyspIHtcbiAgICAgIC8vIHN0YXJ0aW5nIGNvbnRyb2wgcG9pbnRcbiAgICAgIHZhciBjcDF4ID0gYXggKyBkZWx0YUN4O1xuICAgICAgdmFyIGNwMXkgPSBheSArIGRlbHRhQ3k7IC8vIHN0ZXAgYW5nbGVcblxuICAgICAgY3VyQW5nICs9IHNlZ0FuZzsgLy8gbmV4dCBhbmNob3IgcG9pbnRcblxuICAgICAgYXggPSB4ICsgTWF0aC5jb3MoY3VyQW5nKSAqIHJhZGl1cztcbiAgICAgIGF5ID0geSArIE1hdGguc2luKGN1ckFuZykgKiByYWRpdXM7IC8vIG5leHQgY29udHJvbCBwb2ludCBkZWx0YVxuXG4gICAgICBkZWx0YUN4ID0gLU1hdGguc2luKGN1ckFuZykgKiBoYW5kbGVMZW47XG4gICAgICBkZWx0YUN5ID0gTWF0aC5jb3MoY3VyQW5nKSAqIGhhbmRsZUxlbjsgLy8gZW5kaW5nIGNvbnRyb2wgcG9pbnRcblxuICAgICAgdmFyIGNwMnggPSBheCAtIGRlbHRhQ3g7XG4gICAgICB2YXIgY3AyeSA9IGF5IC0gZGVsdGFDeTsgLy8gcmVuZGVyIHNlZ21lbnRcblxuICAgICAgdGhpcy5iZXppZXJDdXJ2ZVRvKGNwMXgsIGNwMXksIGNwMngsIGNwMnksIGF4LCBheSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHBvbHlnb246IGZ1bmN0aW9uIHBvbHlnb24oKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHBvaW50cyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHBvaW50c1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB0aGlzLm1vdmVUby5hcHBseSh0aGlzLCBfdG9Db25zdW1hYmxlQXJyYXkocG9pbnRzLnNoaWZ0KCkgfHwgW10pKTtcblxuICAgIGZvciAodmFyIF9pID0gMCwgX3BvaW50cyA9IHBvaW50czsgX2kgPCBfcG9pbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIHBvaW50ID0gX3BvaW50c1tfaV07XG4gICAgICB0aGlzLmxpbmVUby5hcHBseSh0aGlzLCBfdG9Db25zdW1hYmxlQXJyYXkocG9pbnQgfHwgW10pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jbG9zZVBhdGgoKTtcbiAgfSxcbiAgcGF0aDogZnVuY3Rpb24gcGF0aChfcGF0aCkge1xuICAgIFNWR1BhdGguYXBwbHkodGhpcywgX3BhdGgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBfd2luZGluZ1J1bGU6IGZ1bmN0aW9uIF93aW5kaW5nUnVsZShydWxlKSB7XG4gICAgaWYgKC9ldmVuLT9vZGQvLnRlc3QocnVsZSkpIHtcbiAgICAgIHJldHVybiAnKic7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9LFxuICBmaWxsOiBmdW5jdGlvbiBmaWxsKGNvbG9yLCBydWxlKSB7XG4gICAgaWYgKC8oZXZlbi0/b2RkKXwobm9uLT96ZXJvKS8udGVzdChjb2xvcikpIHtcbiAgICAgIHJ1bGUgPSBjb2xvcjtcbiAgICAgIGNvbG9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIHRoaXMuZmlsbENvbG9yKGNvbG9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGRDb250ZW50KFwiZlwiLmNvbmNhdCh0aGlzLl93aW5kaW5nUnVsZShydWxlKSkpO1xuICB9LFxuICBzdHJva2U6IGZ1bmN0aW9uIHN0cm9rZShjb2xvcikge1xuICAgIGlmIChjb2xvcikge1xuICAgICAgdGhpcy5zdHJva2VDb2xvcihjb2xvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkQ29udGVudCgnUycpO1xuICB9LFxuICBmaWxsQW5kU3Ryb2tlOiBmdW5jdGlvbiBmaWxsQW5kU3Ryb2tlKGZpbGxDb2xvciwgc3Ryb2tlQ29sb3IsIHJ1bGUpIHtcbiAgICBpZiAoc3Ryb2tlQ29sb3IgPT0gbnVsbCkge1xuICAgICAgc3Ryb2tlQ29sb3IgPSBmaWxsQ29sb3I7XG4gICAgfVxuXG4gICAgdmFyIGlzRmlsbFJ1bGUgPSAvKGV2ZW4tP29kZCl8KG5vbi0/emVybykvO1xuXG4gICAgaWYgKGlzRmlsbFJ1bGUudGVzdChmaWxsQ29sb3IpKSB7XG4gICAgICBydWxlID0gZmlsbENvbG9yO1xuICAgICAgZmlsbENvbG9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaXNGaWxsUnVsZS50ZXN0KHN0cm9rZUNvbG9yKSkge1xuICAgICAgcnVsZSA9IHN0cm9rZUNvbG9yO1xuICAgICAgc3Ryb2tlQ29sb3IgPSBmaWxsQ29sb3I7XG4gICAgfVxuXG4gICAgaWYgKGZpbGxDb2xvcikge1xuICAgICAgdGhpcy5maWxsQ29sb3IoZmlsbENvbG9yKTtcbiAgICAgIHRoaXMuc3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZENvbnRlbnQoXCJCXCIuY29uY2F0KHRoaXMuX3dpbmRpbmdSdWxlKHJ1bGUpKSk7XG4gIH0sXG4gIGNsaXA6IGZ1bmN0aW9uIGNsaXAocnVsZSkge1xuICAgIHJldHVybiB0aGlzLmFkZENvbnRlbnQoXCJXXCIuY29uY2F0KHRoaXMuX3dpbmRpbmdSdWxlKHJ1bGUpLCBcIiBuXCIpKTtcbiAgfSxcbiAgdHJhbnNmb3JtOiBmdW5jdGlvbiB0cmFuc2Zvcm0obTExLCBtMTIsIG0yMSwgbTIyLCBkeCwgZHkpIHtcbiAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIG1hdHJpeFxuICAgIHZhciBtID0gdGhpcy5fY3RtO1xuXG4gICAgdmFyIF9tID0gX3NsaWNlZFRvQXJyYXkobSwgNiksXG4gICAgICAgIG0wID0gX21bMF0sXG4gICAgICAgIG0xID0gX21bMV0sXG4gICAgICAgIG0yID0gX21bMl0sXG4gICAgICAgIG0zID0gX21bM10sXG4gICAgICAgIG00ID0gX21bNF0sXG4gICAgICAgIG01ID0gX21bNV07XG5cbiAgICBtWzBdID0gbTAgKiBtMTEgKyBtMiAqIG0xMjtcbiAgICBtWzFdID0gbTEgKiBtMTEgKyBtMyAqIG0xMjtcbiAgICBtWzJdID0gbTAgKiBtMjEgKyBtMiAqIG0yMjtcbiAgICBtWzNdID0gbTEgKiBtMjEgKyBtMyAqIG0yMjtcbiAgICBtWzRdID0gbTAgKiBkeCArIG0yICogZHkgKyBtNDtcbiAgICBtWzVdID0gbTEgKiBkeCArIG0zICogZHkgKyBtNTtcbiAgICB2YXIgdmFsdWVzID0gW20xMSwgbTEyLCBtMjEsIG0yMiwgZHgsIGR5XS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBudW1iZXIkMSh2KTtcbiAgICB9KS5qb2luKCcgJyk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29udGVudChcIlwiLmNvbmNhdCh2YWx1ZXMsIFwiIGNtXCIpKTtcbiAgfSxcbiAgdHJhbnNsYXRlOiBmdW5jdGlvbiB0cmFuc2xhdGUoeCwgeSkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybSgxLCAwLCAwLCAxLCB4LCB5KTtcbiAgfSxcbiAgcm90YXRlOiBmdW5jdGlvbiByb3RhdGUoYW5nbGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHk7XG4gICAgdmFyIHJhZCA9IGFuZ2xlICogTWF0aC5QSSAvIDE4MDtcbiAgICB2YXIgY29zID0gTWF0aC5jb3MocmFkKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4ocmFkKTtcbiAgICB2YXIgeCA9IHkgPSAwO1xuXG4gICAgaWYgKG9wdGlvbnMub3JpZ2luICE9IG51bGwpIHtcbiAgICAgIHZhciBfb3B0aW9ucyRvcmlnaW4gPSBfc2xpY2VkVG9BcnJheShvcHRpb25zLm9yaWdpbiwgMik7XG5cbiAgICAgIHggPSBfb3B0aW9ucyRvcmlnaW5bMF07XG4gICAgICB5ID0gX29wdGlvbnMkb3JpZ2luWzFdO1xuICAgICAgdmFyIHgxID0geCAqIGNvcyAtIHkgKiBzaW47XG4gICAgICB2YXIgeTEgPSB4ICogc2luICsgeSAqIGNvcztcbiAgICAgIHggLT0geDE7XG4gICAgICB5IC09IHkxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybShjb3MsIHNpbiwgLXNpbiwgY29zLCB4LCB5KTtcbiAgfSxcbiAgc2NhbGU6IGZ1bmN0aW9uIHNjYWxlKHhGYWN0b3IsIHlGYWN0b3IpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgdmFyIHk7XG5cbiAgICBpZiAoeUZhY3RvciA9PSBudWxsKSB7XG4gICAgICB5RmFjdG9yID0geEZhY3RvcjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHlGYWN0b3IgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0geUZhY3RvcjtcbiAgICAgIHlGYWN0b3IgPSB4RmFjdG9yO1xuICAgIH1cblxuICAgIHZhciB4ID0geSA9IDA7XG5cbiAgICBpZiAob3B0aW9ucy5vcmlnaW4gIT0gbnVsbCkge1xuICAgICAgdmFyIF9vcHRpb25zJG9yaWdpbjIgPSBfc2xpY2VkVG9BcnJheShvcHRpb25zLm9yaWdpbiwgMik7XG5cbiAgICAgIHggPSBfb3B0aW9ucyRvcmlnaW4yWzBdO1xuICAgICAgeSA9IF9vcHRpb25zJG9yaWdpbjJbMV07XG4gICAgICB4IC09IHhGYWN0b3IgKiB4O1xuICAgICAgeSAtPSB5RmFjdG9yICogeTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oeEZhY3RvciwgMCwgMCwgeUZhY3RvciwgeCwgeSk7XG4gIH1cbn07XG52YXIgV0lOX0FOU0lfTUFQID0ge1xuICA0MDI6IDEzMSxcbiAgODIxMTogMTUwLFxuICA4MjEyOiAxNTEsXG4gIDgyMTY6IDE0NSxcbiAgODIxNzogMTQ2LFxuICA4MjE4OiAxMzAsXG4gIDgyMjA6IDE0NyxcbiAgODIyMTogMTQ4LFxuICA4MjIyOiAxMzIsXG4gIDgyMjQ6IDEzNCxcbiAgODIyNTogMTM1LFxuICA4MjI2OiAxNDksXG4gIDgyMzA6IDEzMyxcbiAgODM2NDogMTI4LFxuICA4MjQwOiAxMzcsXG4gIDgyNDk6IDEzOSxcbiAgODI1MDogMTU1LFxuICA3MTA6IDEzNixcbiAgODQ4MjogMTUzLFxuICAzMzg6IDE0MCxcbiAgMzM5OiAxNTYsXG4gIDczMjogMTUyLFxuICAzNTI6IDEzOCxcbiAgMzUzOiAxNTQsXG4gIDM3NjogMTU5LFxuICAzODE6IDE0MixcbiAgMzgyOiAxNThcbn07XG52YXIgY2hhcmFjdGVycyA9IFwiLm5vdGRlZiAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmXFxuLm5vdGRlZiAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmXFxuLm5vdGRlZiAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmXFxuLm5vdGRlZiAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmXFxuLm5vdGRlZiAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmXFxuLm5vdGRlZiAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmXFxuLm5vdGRlZiAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmXFxuLm5vdGRlZiAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmICAgICAgICAubm90ZGVmXFxuICBcXG5zcGFjZSAgICAgICAgIGV4Y2xhbSAgICAgICAgIHF1b3RlZGJsICAgICAgIG51bWJlcnNpZ25cXG5kb2xsYXIgICAgICAgIHBlcmNlbnQgICAgICAgIGFtcGVyc2FuZCAgICAgIHF1b3Rlc2luZ2xlXFxucGFyZW5sZWZ0ICAgICBwYXJlbnJpZ2h0ICAgICBhc3RlcmlzayAgICAgICBwbHVzXFxuY29tbWEgICAgICAgICBoeXBoZW4gICAgICAgICBwZXJpb2QgICAgICAgICBzbGFzaFxcbnplcm8gICAgICAgICAgb25lICAgICAgICAgICAgdHdvICAgICAgICAgICAgdGhyZWVcXG5mb3VyICAgICAgICAgIGZpdmUgICAgICAgICAgIHNpeCAgICAgICAgICAgIHNldmVuXFxuZWlnaHQgICAgICAgICBuaW5lICAgICAgICAgICBjb2xvbiAgICAgICAgICBzZW1pY29sb25cXG5sZXNzICAgICAgICAgIGVxdWFsICAgICAgICAgIGdyZWF0ZXIgICAgICAgIHF1ZXN0aW9uXFxuICBcXG5hdCAgICAgICAgICAgIEEgICAgICAgICAgICAgIEIgICAgICAgICAgICAgIENcXG5EICAgICAgICAgICAgIEUgICAgICAgICAgICAgIEYgICAgICAgICAgICAgIEdcXG5IICAgICAgICAgICAgIEkgICAgICAgICAgICAgIEogICAgICAgICAgICAgIEtcXG5MICAgICAgICAgICAgIE0gICAgICAgICAgICAgIE4gICAgICAgICAgICAgIE9cXG5QICAgICAgICAgICAgIFEgICAgICAgICAgICAgIFIgICAgICAgICAgICAgIFNcXG5UICAgICAgICAgICAgIFUgICAgICAgICAgICAgIFYgICAgICAgICAgICAgIFdcXG5YICAgICAgICAgICAgIFkgICAgICAgICAgICAgIFogICAgICAgICAgICAgIGJyYWNrZXRsZWZ0XFxuYmFja3NsYXNoICAgICBicmFja2V0cmlnaHQgICBhc2NpaWNpcmN1bSAgICB1bmRlcnNjb3JlXFxuICBcXG5ncmF2ZSAgICAgICAgIGEgICAgICAgICAgICAgIGIgICAgICAgICAgICAgIGNcXG5kICAgICAgICAgICAgIGUgICAgICAgICAgICAgIGYgICAgICAgICAgICAgIGdcXG5oICAgICAgICAgICAgIGkgICAgICAgICAgICAgIGogICAgICAgICAgICAgIGtcXG5sICAgICAgICAgICAgIG0gICAgICAgICAgICAgIG4gICAgICAgICAgICAgIG9cXG5wICAgICAgICAgICAgIHEgICAgICAgICAgICAgIHIgICAgICAgICAgICAgIHNcXG50ICAgICAgICAgICAgIHUgICAgICAgICAgICAgIHYgICAgICAgICAgICAgIHdcXG54ICAgICAgICAgICAgIHkgICAgICAgICAgICAgIHogICAgICAgICAgICAgIGJyYWNlbGVmdFxcbmJhciAgICAgICAgICAgYnJhY2VyaWdodCAgICAgYXNjaWl0aWxkZSAgICAgLm5vdGRlZlxcbiAgXFxuRXVybyAgICAgICAgICAubm90ZGVmICAgICAgICBxdW90ZXNpbmdsYmFzZSBmbG9yaW5cXG5xdW90ZWRibGJhc2UgIGVsbGlwc2lzICAgICAgIGRhZ2dlciAgICAgICAgIGRhZ2dlcmRibFxcbmNpcmN1bWZsZXggICAgcGVydGhvdXNhbmQgICAgU2Nhcm9uICAgICAgICAgZ3VpbHNpbmdsbGVmdFxcbk9FICAgICAgICAgICAgLm5vdGRlZiAgICAgICAgWmNhcm9uICAgICAgICAgLm5vdGRlZlxcbi5ub3RkZWYgICAgICAgcXVvdGVsZWZ0ICAgICAgcXVvdGVyaWdodCAgICAgcXVvdGVkYmxsZWZ0XFxucXVvdGVkYmxyaWdodCBidWxsZXQgICAgICAgICBlbmRhc2ggICAgICAgICBlbWRhc2hcXG50aWxkZSAgICAgICAgIHRyYWRlbWFyayAgICAgIHNjYXJvbiAgICAgICAgIGd1aWxzaW5nbHJpZ2h0XFxub2UgICAgICAgICAgICAubm90ZGVmICAgICAgICB6Y2Fyb24gICAgICAgICB5ZGllcmVzaXNcXG4gIFxcbnNwYWNlICAgICAgICAgZXhjbGFtZG93biAgICAgY2VudCAgICAgICAgICAgc3RlcmxpbmdcXG5jdXJyZW5jeSAgICAgIHllbiAgICAgICAgICAgIGJyb2tlbmJhciAgICAgIHNlY3Rpb25cXG5kaWVyZXNpcyAgICAgIGNvcHlyaWdodCAgICAgIG9yZGZlbWluaW5lICAgIGd1aWxsZW1vdGxlZnRcXG5sb2dpY2Fsbm90ICAgIGh5cGhlbiAgICAgICAgIHJlZ2lzdGVyZWQgICAgIG1hY3JvblxcbmRlZ3JlZSAgICAgICAgcGx1c21pbnVzICAgICAgdHdvc3VwZXJpb3IgICAgdGhyZWVzdXBlcmlvclxcbmFjdXRlICAgICAgICAgbXUgICAgICAgICAgICAgcGFyYWdyYXBoICAgICAgcGVyaW9kY2VudGVyZWRcXG5jZWRpbGxhICAgICAgIG9uZXN1cGVyaW9yICAgIG9yZG1hc2N1bGluZSAgIGd1aWxsZW1vdHJpZ2h0XFxub25lcXVhcnRlciAgICBvbmVoYWxmICAgICAgICB0aHJlZXF1YXJ0ZXJzICBxdWVzdGlvbmRvd25cXG4gIFxcbkFncmF2ZSAgICAgICAgQWFjdXRlICAgICAgICAgQWNpcmN1bWZsZXggICAgQXRpbGRlXFxuQWRpZXJlc2lzICAgICBBcmluZyAgICAgICAgICBBRSAgICAgICAgICAgICBDY2VkaWxsYVxcbkVncmF2ZSAgICAgICAgRWFjdXRlICAgICAgICAgRWNpcmN1bWZsZXggICAgRWRpZXJlc2lzXFxuSWdyYXZlICAgICAgICBJYWN1dGUgICAgICAgICBJY2lyY3VtZmxleCAgICBJZGllcmVzaXNcXG5FdGggICAgICAgICAgIE50aWxkZSAgICAgICAgIE9ncmF2ZSAgICAgICAgIE9hY3V0ZVxcbk9jaXJjdW1mbGV4ICAgT3RpbGRlICAgICAgICAgT2RpZXJlc2lzICAgICAgbXVsdGlwbHlcXG5Pc2xhc2ggICAgICAgIFVncmF2ZSAgICAgICAgIFVhY3V0ZSAgICAgICAgIFVjaXJjdW1mbGV4XFxuVWRpZXJlc2lzICAgICBZYWN1dGUgICAgICAgICBUaG9ybiAgICAgICAgICBnZXJtYW5kYmxzXFxuICBcXG5hZ3JhdmUgICAgICAgIGFhY3V0ZSAgICAgICAgIGFjaXJjdW1mbGV4ICAgIGF0aWxkZVxcbmFkaWVyZXNpcyAgICAgYXJpbmcgICAgICAgICAgYWUgICAgICAgICAgICAgY2NlZGlsbGFcXG5lZ3JhdmUgICAgICAgIGVhY3V0ZSAgICAgICAgIGVjaXJjdW1mbGV4ICAgIGVkaWVyZXNpc1xcbmlncmF2ZSAgICAgICAgaWFjdXRlICAgICAgICAgaWNpcmN1bWZsZXggICAgaWRpZXJlc2lzXFxuZXRoICAgICAgICAgICBudGlsZGUgICAgICAgICBvZ3JhdmUgICAgICAgICBvYWN1dGVcXG5vY2lyY3VtZmxleCAgIG90aWxkZSAgICAgICAgIG9kaWVyZXNpcyAgICAgIGRpdmlkZVxcbm9zbGFzaCAgICAgICAgdWdyYXZlICAgICAgICAgdWFjdXRlICAgICAgICAgdWNpcmN1bWZsZXhcXG51ZGllcmVzaXMgICAgIHlhY3V0ZSAgICAgICAgIHRob3JuICAgICAgICAgIHlkaWVyZXNpc1wiLnNwbGl0KC9cXHMrLyk7XG5cbnZhciBBRk1Gb250ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgX2NyZWF0ZUNsYXNzKEFGTUZvbnQsIG51bGwsIFt7XG4gICAga2V5OiBcIm9wZW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3BlbihmaWxlbmFtZSkge1xuICAgICAgcmV0dXJuIG5ldyBBRk1Gb250KGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwgJ3V0ZjgnKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgZnVuY3Rpb24gQUZNRm9udChjb250ZW50cykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBRk1Gb250KTtcblxuICAgIHRoaXMuY29udGVudHMgPSBjb250ZW50cztcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcbiAgICB0aGlzLmdseXBoV2lkdGhzID0ge307XG4gICAgdGhpcy5ib3VuZGluZ0JveGVzID0ge307XG4gICAgdGhpcy5rZXJuUGFpcnMgPSB7fTtcbiAgICB0aGlzLnBhcnNlKCk7IC8vIHRvZG86IHJlbW92ZSBjaGFyV2lkdGhzIHNpbmNlIGFwcGVhcnMgdG8gbm90IGJlIHVzZWRcblxuICAgIHRoaXMuY2hhcldpZHRocyA9IG5ldyBBcnJheSgyNTYpO1xuXG4gICAgZm9yICh2YXIgY2hhciA9IDA7IGNoYXIgPD0gMjU1OyBjaGFyKyspIHtcbiAgICAgIHRoaXMuY2hhcldpZHRoc1tjaGFyXSA9IHRoaXMuZ2x5cGhXaWR0aHNbY2hhcmFjdGVyc1tjaGFyXV07XG4gICAgfVxuXG4gICAgdGhpcy5iYm94ID0gdGhpcy5hdHRyaWJ1dGVzWydGb250QkJveCddLnNwbGl0KC9cXHMrLykubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gK2U7XG4gICAgfSk7XG4gICAgdGhpcy5hc2NlbmRlciA9ICsodGhpcy5hdHRyaWJ1dGVzWydBc2NlbmRlciddIHx8IDApO1xuICAgIHRoaXMuZGVzY2VuZGVyID0gKyh0aGlzLmF0dHJpYnV0ZXNbJ0Rlc2NlbmRlciddIHx8IDApO1xuICAgIHRoaXMueEhlaWdodCA9ICsodGhpcy5hdHRyaWJ1dGVzWydYSGVpZ2h0J10gfHwgMCk7XG4gICAgdGhpcy5jYXBIZWlnaHQgPSArKHRoaXMuYXR0cmlidXRlc1snQ2FwSGVpZ2h0J10gfHwgMCk7XG4gICAgdGhpcy5saW5lR2FwID0gdGhpcy5iYm94WzNdIC0gdGhpcy5iYm94WzFdIC0gKHRoaXMuYXNjZW5kZXIgLSB0aGlzLmRlc2NlbmRlcik7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQUZNRm9udCwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9ICcnO1xuXG4gICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5jb250ZW50cy5zcGxpdCgnXFxuJykpLFxuICAgICAgICAgIF9zdGVwO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBsaW5lID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICAgIHZhciBhO1xuXG4gICAgICAgICAgaWYgKG1hdGNoID0gbGluZS5tYXRjaCgvXlN0YXJ0KFxcdyspLykpIHtcbiAgICAgICAgICAgIHNlY3Rpb24gPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPSBsaW5lLm1hdGNoKC9eRW5kKFxcdyspLykpIHtcbiAgICAgICAgICAgIHNlY3Rpb24gPSAnJztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAoc2VjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnRm9udE1ldHJpY3MnOlxuICAgICAgICAgICAgICBtYXRjaCA9IGxpbmUubWF0Y2goLyheXFx3KylcXHMrKC4qKS8pO1xuICAgICAgICAgICAgICB2YXIga2V5ID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG1hdGNoWzJdO1xuXG4gICAgICAgICAgICAgIGlmIChhID0gdGhpcy5hdHRyaWJ1dGVzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgICAgICAgICAgIGEgPSB0aGlzLmF0dHJpYnV0ZXNba2V5XSA9IFthXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQ2hhck1ldHJpY3MnOlxuICAgICAgICAgICAgICBpZiAoIS9eQ0g/XFxzLy50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgbmFtZSA9IGxpbmUubWF0Y2goL1xcYk5cXHMrKFxcLj9cXHcrKVxccyo7LylbMV07XG4gICAgICAgICAgICAgIHRoaXMuZ2x5cGhXaWR0aHNbbmFtZV0gPSArbGluZS5tYXRjaCgvXFxiV1hcXHMrKFxcZCspXFxzKjsvKVsxXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0tlcm5QYWlycyc6XG4gICAgICAgICAgICAgIG1hdGNoID0gbGluZS5tYXRjaCgvXktQWFxccysoXFwuP1xcdyspXFxzKyhcXC4/XFx3KylcXHMrKC0/XFxkKykvKTtcblxuICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmtlcm5QYWlyc1ttYXRjaFsxXSArICdcXDAnICsgbWF0Y2hbMl1dID0gcGFyc2VJbnQobWF0Y2hbM10pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVuY29kZVRleHRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5jb2RlVGV4dCh0ZXh0KSB7XG4gICAgICB2YXIgcmVzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0ZXh0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBjaGFyID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBjaGFyID0gV0lOX0FOU0lfTUFQW2NoYXJdIHx8IGNoYXI7XG4gICAgICAgIHJlcy5wdXNoKGNoYXIudG9TdHJpbmcoMTYpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2x5cGhzRm9yU3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdseXBoc0ZvclN0cmluZyhzdHJpbmcpIHtcbiAgICAgIHZhciBnbHlwaHMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHN0cmluZy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICAgICAgZ2x5cGhzLnB1c2godGhpcy5jaGFyYWN0ZXJUb0dseXBoKGNoYXJDb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnbHlwaHM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNoYXJhY3RlclRvR2x5cGhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhcmFjdGVyVG9HbHlwaChjaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBjaGFyYWN0ZXJzW1dJTl9BTlNJX01BUFtjaGFyYWN0ZXJdIHx8IGNoYXJhY3Rlcl0gfHwgJy5ub3RkZWYnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3aWR0aE9mR2x5cGhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd2lkdGhPZkdseXBoKGdseXBoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nbHlwaFdpZHRoc1tnbHlwaF0gfHwgMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0S2VyblBhaXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0S2VyblBhaXIobGVmdCwgcmlnaHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmtlcm5QYWlyc1tsZWZ0ICsgJ1xcMCcgKyByaWdodF0gfHwgMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWR2YW5jZXNGb3JHbHlwaHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWR2YW5jZXNGb3JHbHlwaHMoZ2x5cGhzKSB7XG4gICAgICB2YXIgYWR2YW5jZXMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGdseXBocy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIGxlZnQgPSBnbHlwaHNbaW5kZXhdO1xuICAgICAgICB2YXIgcmlnaHQgPSBnbHlwaHNbaW5kZXggKyAxXTtcbiAgICAgICAgYWR2YW5jZXMucHVzaCh0aGlzLndpZHRoT2ZHbHlwaChsZWZ0KSArIHRoaXMuZ2V0S2VyblBhaXIobGVmdCwgcmlnaHQpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFkdmFuY2VzO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBBRk1Gb250O1xufSgpO1xuXG52YXIgUERGRm9udCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBERkZvbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERkZvbnQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBERkZvbnQsIFt7XG4gICAga2V5OiBcImVuY29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmNvZGUoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3aWR0aE9mU3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdpZHRoT2ZTdHJpbmcoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVmKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbmFyeSAhPSBudWxsID8gdGhpcy5kaWN0aW9uYXJ5IDogdGhpcy5kaWN0aW9uYXJ5ID0gdGhpcy5kb2N1bWVudC5yZWYoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmluYWxpemVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmluYWxpemUoKSB7XG4gICAgICBpZiAodGhpcy5lbWJlZGRlZCB8fCB0aGlzLmRpY3Rpb25hcnkgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1iZWQoKTtcbiAgICAgIHJldHVybiB0aGlzLmVtYmVkZGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW1iZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW1iZWQoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsaW5lSGVpZ2h0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxpbmVIZWlnaHQoc2l6ZSwgaW5jbHVkZUdhcCkge1xuICAgICAgaWYgKGluY2x1ZGVHYXAgPT0gbnVsbCkge1xuICAgICAgICBpbmNsdWRlR2FwID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBnYXAgPSBpbmNsdWRlR2FwID8gdGhpcy5saW5lR2FwIDogMDtcbiAgICAgIHJldHVybiAodGhpcy5hc2NlbmRlciArIGdhcCAtIHRoaXMuZGVzY2VuZGVyKSAvIDEwMDAgKiBzaXplO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQREZGb250O1xufSgpO1xuXG52YXIgU1RBTkRBUkRfRk9OVFMgPSB7XG4gIENvdXJpZXI6IGZ1bmN0aW9uIENvdXJpZXIoKSB7XG4gICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhfX2Rpcm5hbWUgKyAnL2RhdGEvQ291cmllci5hZm0nLCAndXRmOCcpO1xuICB9LFxuICAnQ291cmllci1Cb2xkJzogZnVuY3Rpb24gQ291cmllckJvbGQoKSB7XG4gICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhfX2Rpcm5hbWUgKyAnL2RhdGEvQ291cmllci1Cb2xkLmFmbScsICd1dGY4Jyk7XG4gIH0sXG4gICdDb3VyaWVyLU9ibGlxdWUnOiBmdW5jdGlvbiBDb3VyaWVyT2JsaXF1ZSgpIHtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKF9fZGlybmFtZSArICcvZGF0YS9Db3VyaWVyLU9ibGlxdWUuYWZtJywgJ3V0ZjgnKTtcbiAgfSxcbiAgJ0NvdXJpZXItQm9sZE9ibGlxdWUnOiBmdW5jdGlvbiBDb3VyaWVyQm9sZE9ibGlxdWUoKSB7XG4gICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhfX2Rpcm5hbWUgKyAnL2RhdGEvQ291cmllci1Cb2xkT2JsaXF1ZS5hZm0nLCAndXRmOCcpO1xuICB9LFxuICBIZWx2ZXRpY2E6IGZ1bmN0aW9uIEhlbHZldGljYSgpIHtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKF9fZGlybmFtZSArICcvZGF0YS9IZWx2ZXRpY2EuYWZtJywgJ3V0ZjgnKTtcbiAgfSxcbiAgJ0hlbHZldGljYS1Cb2xkJzogZnVuY3Rpb24gSGVsdmV0aWNhQm9sZCgpIHtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKF9fZGlybmFtZSArICcvZGF0YS9IZWx2ZXRpY2EtQm9sZC5hZm0nLCAndXRmOCcpO1xuICB9LFxuICAnSGVsdmV0aWNhLU9ibGlxdWUnOiBmdW5jdGlvbiBIZWx2ZXRpY2FPYmxpcXVlKCkge1xuICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoX19kaXJuYW1lICsgJy9kYXRhL0hlbHZldGljYS1PYmxpcXVlLmFmbScsICd1dGY4Jyk7XG4gIH0sXG4gICdIZWx2ZXRpY2EtQm9sZE9ibGlxdWUnOiBmdW5jdGlvbiBIZWx2ZXRpY2FCb2xkT2JsaXF1ZSgpIHtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKF9fZGlybmFtZSArICcvZGF0YS9IZWx2ZXRpY2EtQm9sZE9ibGlxdWUuYWZtJywgJ3V0ZjgnKTtcbiAgfSxcbiAgJ1RpbWVzLVJvbWFuJzogZnVuY3Rpb24gVGltZXNSb21hbigpIHtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKF9fZGlybmFtZSArICcvZGF0YS9UaW1lcy1Sb21hbi5hZm0nLCAndXRmOCcpO1xuICB9LFxuICAnVGltZXMtQm9sZCc6IGZ1bmN0aW9uIFRpbWVzQm9sZCgpIHtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKF9fZGlybmFtZSArICcvZGF0YS9UaW1lcy1Cb2xkLmFmbScsICd1dGY4Jyk7XG4gIH0sXG4gICdUaW1lcy1JdGFsaWMnOiBmdW5jdGlvbiBUaW1lc0l0YWxpYygpIHtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKF9fZGlybmFtZSArICcvZGF0YS9UaW1lcy1JdGFsaWMuYWZtJywgJ3V0ZjgnKTtcbiAgfSxcbiAgJ1RpbWVzLUJvbGRJdGFsaWMnOiBmdW5jdGlvbiBUaW1lc0JvbGRJdGFsaWMoKSB7XG4gICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhfX2Rpcm5hbWUgKyAnL2RhdGEvVGltZXMtQm9sZEl0YWxpYy5hZm0nLCAndXRmOCcpO1xuICB9LFxuICBTeW1ib2w6IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKF9fZGlybmFtZSArICcvZGF0YS9TeW1ib2wuYWZtJywgJ3V0ZjgnKTtcbiAgfSxcbiAgWmFwZkRpbmdiYXRzOiBmdW5jdGlvbiBaYXBmRGluZ2JhdHMoKSB7XG4gICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhfX2Rpcm5hbWUgKyAnL2RhdGEvWmFwZkRpbmdiYXRzLmFmbScsICd1dGY4Jyk7XG4gIH1cbn07XG5cbnZhciBTdGFuZGFyZEZvbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QREZGb250KSB7XG4gIF9pbmhlcml0cyhTdGFuZGFyZEZvbnQsIF9QREZGb250KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN0YW5kYXJkRm9udCk7XG5cbiAgZnVuY3Rpb24gU3RhbmRhcmRGb250KGRvY3VtZW50LCBuYW1lLCBpZCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdGFuZGFyZEZvbnQpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICBfdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgIF90aGlzLmlkID0gaWQ7XG4gICAgX3RoaXMuZm9udCA9IG5ldyBBRk1Gb250KFNUQU5EQVJEX0ZPTlRTW190aGlzLm5hbWVdKCkpO1xuICAgIHZhciBfdGhpcyRmb250ID0gX3RoaXMuZm9udDtcbiAgICBfdGhpcy5hc2NlbmRlciA9IF90aGlzJGZvbnQuYXNjZW5kZXI7XG4gICAgX3RoaXMuZGVzY2VuZGVyID0gX3RoaXMkZm9udC5kZXNjZW5kZXI7XG4gICAgX3RoaXMuYmJveCA9IF90aGlzJGZvbnQuYmJveDtcbiAgICBfdGhpcy5saW5lR2FwID0gX3RoaXMkZm9udC5saW5lR2FwO1xuICAgIF90aGlzLnhIZWlnaHQgPSBfdGhpcyRmb250LnhIZWlnaHQ7XG4gICAgX3RoaXMuY2FwSGVpZ2h0ID0gX3RoaXMkZm9udC5jYXBIZWlnaHQ7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN0YW5kYXJkRm9udCwgW3tcbiAgICBrZXk6IFwiZW1iZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW1iZWQoKSB7XG4gICAgICB0aGlzLmRpY3Rpb25hcnkuZGF0YSA9IHtcbiAgICAgICAgVHlwZTogJ0ZvbnQnLFxuICAgICAgICBCYXNlRm9udDogdGhpcy5uYW1lLFxuICAgICAgICBTdWJ0eXBlOiAnVHlwZTEnLFxuICAgICAgICBFbmNvZGluZzogJ1dpbkFuc2lFbmNvZGluZydcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5LmVuZCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbmNvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5jb2RlKHRleHQpIHtcbiAgICAgIHZhciBlbmNvZGVkID0gdGhpcy5mb250LmVuY29kZVRleHQodGV4dCk7XG4gICAgICB2YXIgZ2x5cGhzID0gdGhpcy5mb250LmdseXBoc0ZvclN0cmluZyhcIlwiLmNvbmNhdCh0ZXh0KSk7XG4gICAgICB2YXIgYWR2YW5jZXMgPSB0aGlzLmZvbnQuYWR2YW5jZXNGb3JHbHlwaHMoZ2x5cGhzKTtcbiAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGdseXBoID0gZ2x5cGhzW2ldO1xuICAgICAgICBwb3NpdGlvbnMucHVzaCh7XG4gICAgICAgICAgeEFkdmFuY2U6IGFkdmFuY2VzW2ldLFxuICAgICAgICAgIHlBZHZhbmNlOiAwLFxuICAgICAgICAgIHhPZmZzZXQ6IDAsXG4gICAgICAgICAgeU9mZnNldDogMCxcbiAgICAgICAgICBhZHZhbmNlV2lkdGg6IHRoaXMuZm9udC53aWR0aE9mR2x5cGgoZ2x5cGgpXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW2VuY29kZWQsIHBvc2l0aW9uc107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIndpZHRoT2ZTdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd2lkdGhPZlN0cmluZyhzdHJpbmcsIHNpemUpIHtcbiAgICAgIHZhciBnbHlwaHMgPSB0aGlzLmZvbnQuZ2x5cGhzRm9yU3RyaW5nKFwiXCIuY29uY2F0KHN0cmluZykpO1xuICAgICAgdmFyIGFkdmFuY2VzID0gdGhpcy5mb250LmFkdmFuY2VzRm9yR2x5cGhzKGdseXBocyk7XG4gICAgICB2YXIgd2lkdGggPSAwO1xuXG4gICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoYWR2YW5jZXMpLFxuICAgICAgICAgIF9zdGVwO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBhZHZhbmNlID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgd2lkdGggKz0gYWR2YW5jZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2NhbGUgPSBzaXplIC8gMTAwMDtcbiAgICAgIHJldHVybiB3aWR0aCAqIHNjYWxlO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImlzU3RhbmRhcmRGb250XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzU3RhbmRhcmRGb250KG5hbWUpIHtcbiAgICAgIHJldHVybiBuYW1lIGluIFNUQU5EQVJEX0ZPTlRTO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdGFuZGFyZEZvbnQ7XG59KFBERkZvbnQpO1xuXG52YXIgdG9IZXggPSBmdW5jdGlvbiB0b0hleChudW0pIHtcbiAgcmV0dXJuIFwiMDAwMFwiLmNvbmNhdChudW0udG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG59O1xuXG52YXIgRW1iZWRkZWRGb250ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUERGRm9udCkge1xuICBfaW5oZXJpdHMoRW1iZWRkZWRGb250LCBfUERGRm9udCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFbWJlZGRlZEZvbnQpO1xuXG4gIGZ1bmN0aW9uIEVtYmVkZGVkRm9udChkb2N1bWVudCwgZm9udCwgaWQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRW1iZWRkZWRGb250KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgX3RoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICBfdGhpcy5mb250ID0gZm9udDtcbiAgICBfdGhpcy5pZCA9IGlkO1xuICAgIF90aGlzLnN1YnNldCA9IF90aGlzLmZvbnQuY3JlYXRlU3Vic2V0KCk7XG4gICAgX3RoaXMudW5pY29kZSA9IFtbMF1dO1xuICAgIF90aGlzLndpZHRocyA9IFtfdGhpcy5mb250LmdldEdseXBoKDApLmFkdmFuY2VXaWR0aF07XG4gICAgX3RoaXMubmFtZSA9IF90aGlzLmZvbnQucG9zdHNjcmlwdE5hbWU7XG4gICAgX3RoaXMuc2NhbGUgPSAxMDAwIC8gX3RoaXMuZm9udC51bml0c1BlckVtO1xuICAgIF90aGlzLmFzY2VuZGVyID0gX3RoaXMuZm9udC5hc2NlbnQgKiBfdGhpcy5zY2FsZTtcbiAgICBfdGhpcy5kZXNjZW5kZXIgPSBfdGhpcy5mb250LmRlc2NlbnQgKiBfdGhpcy5zY2FsZTtcbiAgICBfdGhpcy54SGVpZ2h0ID0gX3RoaXMuZm9udC54SGVpZ2h0ICogX3RoaXMuc2NhbGU7XG4gICAgX3RoaXMuY2FwSGVpZ2h0ID0gX3RoaXMuZm9udC5jYXBIZWlnaHQgKiBfdGhpcy5zY2FsZTtcbiAgICBfdGhpcy5saW5lR2FwID0gX3RoaXMuZm9udC5saW5lR2FwICogX3RoaXMuc2NhbGU7XG4gICAgX3RoaXMuYmJveCA9IF90aGlzLmZvbnQuYmJveDtcblxuICAgIGlmIChkb2N1bWVudC5vcHRpb25zLmZvbnRMYXlvdXRDYWNoZSAhPT0gZmFsc2UpIHtcbiAgICAgIF90aGlzLmxheW91dENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRW1iZWRkZWRGb250LCBbe1xuICAgIGtleTogXCJsYXlvdXRSdW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbGF5b3V0UnVuKHRleHQsIGZlYXR1cmVzKSB7XG4gICAgICB2YXIgcnVuID0gdGhpcy5mb250LmxheW91dCh0ZXh0LCBmZWF0dXJlcyk7IC8vIE5vcm1hbGl6ZSBwb3NpdGlvbiB2YWx1ZXNcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydW4ucG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHJ1bi5wb3NpdGlvbnNbaV07XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHBvc2l0aW9uKSB7XG4gICAgICAgICAgcG9zaXRpb25ba2V5XSAqPSB0aGlzLnNjYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zaXRpb24uYWR2YW5jZVdpZHRoID0gcnVuLmdseXBoc1tpXS5hZHZhbmNlV2lkdGggKiB0aGlzLnNjYWxlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcnVuO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsYXlvdXRDYWNoZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbGF5b3V0Q2FjaGVkKHRleHQpIHtcbiAgICAgIGlmICghdGhpcy5sYXlvdXRDYWNoZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRSdW4odGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjYWNoZWQ7XG5cbiAgICAgIGlmIChjYWNoZWQgPSB0aGlzLmxheW91dENhY2hlW3RleHRdKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBydW4gPSB0aGlzLmxheW91dFJ1bih0ZXh0KTtcbiAgICAgIHRoaXMubGF5b3V0Q2FjaGVbdGV4dF0gPSBydW47XG4gICAgICByZXR1cm4gcnVuO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsYXlvdXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbGF5b3V0KHRleHQsIGZlYXR1cmVzLCBvbmx5V2lkdGgpIHtcbiAgICAgIC8vIFNraXAgdGhlIGNhY2hlIGlmIGFueSB1c2VyIGRlZmluZWQgZmVhdHVyZXMgYXJlIGFwcGxpZWRcbiAgICAgIGlmIChmZWF0dXJlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRSdW4odGV4dCwgZmVhdHVyZXMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ2x5cGhzID0gb25seVdpZHRoID8gbnVsbCA6IFtdO1xuICAgICAgdmFyIHBvc2l0aW9ucyA9IG9ubHlXaWR0aCA/IG51bGwgOiBbXTtcbiAgICAgIHZhciBhZHZhbmNlV2lkdGggPSAwOyAvLyBTcGxpdCB0aGUgc3RyaW5nIGJ5IHdvcmRzIHRvIGluY3JlYXNlIGNhY2hlIGVmZmljaWVuY3kuXG4gICAgICAvLyBGb3IgdGhpcyBwdXJwb3NlLCBzcGFjZXMgYW5kIHRhYnMgYXJlIGEgZ29vZCBlbm91Z2ggZGVsaW1ldGVyLlxuXG4gICAgICB2YXIgbGFzdCA9IDA7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPD0gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5lZWRsZTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IHRleHQubGVuZ3RoICYmIGxhc3QgPCBpbmRleCB8fCAobmVlZGxlID0gdGV4dC5jaGFyQXQoaW5kZXgpLCBbJyAnLCAnXFx0J10uaW5jbHVkZXMobmVlZGxlKSkpIHtcbiAgICAgICAgICB2YXIgcnVuID0gdGhpcy5sYXlvdXRDYWNoZWQodGV4dC5zbGljZShsYXN0LCArK2luZGV4KSk7XG5cbiAgICAgICAgICBpZiAoIW9ubHlXaWR0aCkge1xuICAgICAgICAgICAgZ2x5cGhzID0gZ2x5cGhzLmNvbmNhdChydW4uZ2x5cGhzKTtcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IHBvc2l0aW9ucy5jb25jYXQocnVuLnBvc2l0aW9ucyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWR2YW5jZVdpZHRoICs9IHJ1bi5hZHZhbmNlV2lkdGg7XG4gICAgICAgICAgbGFzdCA9IGluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2x5cGhzOiBnbHlwaHMsXG4gICAgICAgIHBvc2l0aW9uczogcG9zaXRpb25zLFxuICAgICAgICBhZHZhbmNlV2lkdGg6IGFkdmFuY2VXaWR0aFxuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW5jb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuY29kZSh0ZXh0LCBmZWF0dXJlcykge1xuICAgICAgdmFyIF90aGlzJGxheW91dCA9IHRoaXMubGF5b3V0KHRleHQsIGZlYXR1cmVzKSxcbiAgICAgICAgICBnbHlwaHMgPSBfdGhpcyRsYXlvdXQuZ2x5cGhzLFxuICAgICAgICAgIHBvc2l0aW9ucyA9IF90aGlzJGxheW91dC5wb3NpdGlvbnM7XG5cbiAgICAgIHZhciByZXMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGdseXBoID0gZ2x5cGhzW2ldO1xuICAgICAgICB2YXIgZ2lkID0gdGhpcy5zdWJzZXQuaW5jbHVkZUdseXBoKGdseXBoLmlkKTtcbiAgICAgICAgcmVzLnB1c2goXCIwMDAwXCIuY29uY2F0KGdpZC50b1N0cmluZygxNikpLnNsaWNlKC00KSk7XG5cbiAgICAgICAgaWYgKHRoaXMud2lkdGhzW2dpZF0gPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMud2lkdGhzW2dpZF0gPSBnbHlwaC5hZHZhbmNlV2lkdGggKiB0aGlzLnNjYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudW5pY29kZVtnaWRdID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnVuaWNvZGVbZ2lkXSA9IGdseXBoLmNvZGVQb2ludHM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtyZXMsIHBvc2l0aW9uc107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIndpZHRoT2ZTdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd2lkdGhPZlN0cmluZyhzdHJpbmcsIHNpemUsIGZlYXR1cmVzKSB7XG4gICAgICB2YXIgd2lkdGggPSB0aGlzLmxheW91dChzdHJpbmcsIGZlYXR1cmVzLCB0cnVlKS5hZHZhbmNlV2lkdGg7XG4gICAgICB2YXIgc2NhbGUgPSBzaXplIC8gMTAwMDtcbiAgICAgIHJldHVybiB3aWR0aCAqIHNjYWxlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbWJlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbWJlZCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgaXNDRkYgPSB0aGlzLnN1YnNldC5jZmYgIT0gbnVsbDtcbiAgICAgIHZhciBmb250RmlsZSA9IHRoaXMuZG9jdW1lbnQucmVmKCk7XG5cbiAgICAgIGlmIChpc0NGRikge1xuICAgICAgICBmb250RmlsZS5kYXRhLlN1YnR5cGUgPSAnQ0lERm9udFR5cGUwQyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3Vic2V0LmVuY29kZVN0cmVhbSgpLm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGZvbnRGaWxlLndyaXRlKGRhdGEpO1xuICAgICAgfSkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZvbnRGaWxlLmVuZCgpO1xuICAgICAgfSk7XG4gICAgICB2YXIgZmFtaWx5Q2xhc3MgPSAoKHRoaXMuZm9udFsnT1MvMiddICE9IG51bGwgPyB0aGlzLmZvbnRbJ09TLzInXS5zRmFtaWx5Q2xhc3MgOiB1bmRlZmluZWQpIHx8IDApID4+IDg7XG4gICAgICB2YXIgZmxhZ3MgPSAwO1xuXG4gICAgICBpZiAodGhpcy5mb250LnBvc3QuaXNGaXhlZFBpdGNoKSB7XG4gICAgICAgIGZsYWdzIHw9IDEgPDwgMDtcbiAgICAgIH1cblxuICAgICAgaWYgKDEgPD0gZmFtaWx5Q2xhc3MgJiYgZmFtaWx5Q2xhc3MgPD0gNykge1xuICAgICAgICBmbGFncyB8PSAxIDw8IDE7XG4gICAgICB9XG5cbiAgICAgIGZsYWdzIHw9IDEgPDwgMjsgLy8gYXNzdW1lIHRoZSBmb250IHVzZXMgbm9uLWxhdGluIGNoYXJhY3RlcnNcblxuICAgICAgaWYgKGZhbWlseUNsYXNzID09PSAxMCkge1xuICAgICAgICBmbGFncyB8PSAxIDw8IDM7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZvbnQuaGVhZC5tYWNTdHlsZS5pdGFsaWMpIHtcbiAgICAgICAgZmxhZ3MgfD0gMSA8PCA2O1xuICAgICAgfSAvLyBnZW5lcmF0ZSBhIHRhZyAoNiB1cHBlcmNhc2UgbGV0dGVycy4gMTcgaXMgdGhlIGNoYXIgY29kZSBvZmZzZXQgZnJvbSAnMCcgdG8gJ0EnLiA3MyB3aWxsIG1hcCB0byAnWicpXG5cblxuICAgICAgdmFyIHRhZyA9IFsxLCAyLCAzLCA0LCA1LCA2XS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKF90aGlzMi5pZC5jaGFyQ29kZUF0KGkpIHx8IDczKSArIDE3KTtcbiAgICAgIH0pLmpvaW4oJycpO1xuICAgICAgdmFyIG5hbWUgPSB0YWcgKyAnKycgKyB0aGlzLmZvbnQucG9zdHNjcmlwdE5hbWU7XG4gICAgICB2YXIgYmJveCA9IHRoaXMuZm9udC5iYm94O1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSB0aGlzLmRvY3VtZW50LnJlZih7XG4gICAgICAgIFR5cGU6ICdGb250RGVzY3JpcHRvcicsXG4gICAgICAgIEZvbnROYW1lOiBuYW1lLFxuICAgICAgICBGbGFnczogZmxhZ3MsXG4gICAgICAgIEZvbnRCQm94OiBbYmJveC5taW5YICogdGhpcy5zY2FsZSwgYmJveC5taW5ZICogdGhpcy5zY2FsZSwgYmJveC5tYXhYICogdGhpcy5zY2FsZSwgYmJveC5tYXhZICogdGhpcy5zY2FsZV0sXG4gICAgICAgIEl0YWxpY0FuZ2xlOiB0aGlzLmZvbnQuaXRhbGljQW5nbGUsXG4gICAgICAgIEFzY2VudDogdGhpcy5hc2NlbmRlcixcbiAgICAgICAgRGVzY2VudDogdGhpcy5kZXNjZW5kZXIsXG4gICAgICAgIENhcEhlaWdodDogKHRoaXMuZm9udC5jYXBIZWlnaHQgfHwgdGhpcy5mb250LmFzY2VudCkgKiB0aGlzLnNjYWxlLFxuICAgICAgICBYSGVpZ2h0OiAodGhpcy5mb250LnhIZWlnaHQgfHwgMCkgKiB0aGlzLnNjYWxlLFxuICAgICAgICBTdGVtVjogMFxuICAgICAgfSk7IC8vIG5vdCBzdXJlIGhvdyB0byBjYWxjdWxhdGUgdGhpc1xuXG4gICAgICBpZiAoaXNDRkYpIHtcbiAgICAgICAgZGVzY3JpcHRvci5kYXRhLkZvbnRGaWxlMyA9IGZvbnRGaWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVzY3JpcHRvci5kYXRhLkZvbnRGaWxlMiA9IGZvbnRGaWxlO1xuICAgICAgfVxuXG4gICAgICBkZXNjcmlwdG9yLmVuZCgpO1xuICAgICAgdmFyIGRlc2NlbmRhbnRGb250RGF0YSA9IHtcbiAgICAgICAgVHlwZTogJ0ZvbnQnLFxuICAgICAgICBTdWJ0eXBlOiAnQ0lERm9udFR5cGUwJyxcbiAgICAgICAgQmFzZUZvbnQ6IG5hbWUsXG4gICAgICAgIENJRFN5c3RlbUluZm86IHtcbiAgICAgICAgICBSZWdpc3RyeTogbmV3IFN0cmluZygnQWRvYmUnKSxcbiAgICAgICAgICBPcmRlcmluZzogbmV3IFN0cmluZygnSWRlbnRpdHknKSxcbiAgICAgICAgICBTdXBwbGVtZW50OiAwXG4gICAgICAgIH0sXG4gICAgICAgIEZvbnREZXNjcmlwdG9yOiBkZXNjcmlwdG9yLFxuICAgICAgICBXOiBbMCwgdGhpcy53aWR0aHNdXG4gICAgICB9O1xuXG4gICAgICBpZiAoIWlzQ0ZGKSB7XG4gICAgICAgIGRlc2NlbmRhbnRGb250RGF0YS5TdWJ0eXBlID0gJ0NJREZvbnRUeXBlMic7XG4gICAgICAgIGRlc2NlbmRhbnRGb250RGF0YS5DSURUb0dJRE1hcCA9ICdJZGVudGl0eSc7XG4gICAgICB9XG5cbiAgICAgIHZhciBkZXNjZW5kYW50Rm9udCA9IHRoaXMuZG9jdW1lbnQucmVmKGRlc2NlbmRhbnRGb250RGF0YSk7XG4gICAgICBkZXNjZW5kYW50Rm9udC5lbmQoKTtcbiAgICAgIHRoaXMuZGljdGlvbmFyeS5kYXRhID0ge1xuICAgICAgICBUeXBlOiAnRm9udCcsXG4gICAgICAgIFN1YnR5cGU6ICdUeXBlMCcsXG4gICAgICAgIEJhc2VGb250OiBuYW1lLFxuICAgICAgICBFbmNvZGluZzogJ0lkZW50aXR5LUgnLFxuICAgICAgICBEZXNjZW5kYW50Rm9udHM6IFtkZXNjZW5kYW50Rm9udF0sXG4gICAgICAgIFRvVW5pY29kZTogdGhpcy50b1VuaWNvZGVDbWFwKClcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5LmVuZCgpO1xuICAgIH0gLy8gTWFwcyB0aGUgZ2x5cGggaWRzIGVuY29kZWQgaW4gdGhlIFBERiBiYWNrIHRvIHVuaWNvZGUgc3RyaW5nc1xuICAgIC8vIEJlY2F1c2Ugb2YgbGlnYXR1cmUgc3Vic3RpdHV0aW9ucyBhbmQgdGhlIGxpa2UsIHRoZXJlIG1heSBiZSBvbmUgb3IgbW9yZVxuICAgIC8vIHVuaWNvZGUgY2hhcmFjdGVycyByZXByZXNlbnRlZCBieSBlYWNoIGdseXBoLlxuXG4gIH0sIHtcbiAgICBrZXk6IFwidG9Vbmljb2RlQ21hcFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1VuaWNvZGVDbWFwKCkge1xuICAgICAgdmFyIGNtYXAgPSB0aGlzLmRvY3VtZW50LnJlZigpO1xuICAgICAgdmFyIGVudHJpZXMgPSBbXTtcblxuICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMudW5pY29kZSksXG4gICAgICAgICAgX3N0ZXA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIGNvZGVQb2ludHMgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICB2YXIgZW5jb2RlZCA9IFtdOyAvLyBlbmNvZGUgY29kZVBvaW50cyB0byB1dGYxNlxuXG4gICAgICAgICAgdmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihjb2RlUG9pbnRzKSxcbiAgICAgICAgICAgICAgX3N0ZXAyO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9zdGVwMi52YWx1ZTtcblxuICAgICAgICAgICAgICBpZiAodmFsdWUgPiAweGZmZmYpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSAtPSAweDEwMDAwO1xuICAgICAgICAgICAgICAgIGVuY29kZWQucHVzaCh0b0hleCh2YWx1ZSA+Pj4gMTAgJiAweDNmZiB8IDB4ZDgwMCkpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gMHhkYzAwIHwgdmFsdWUgJiAweDNmZjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVuY29kZWQucHVzaCh0b0hleCh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgX2l0ZXJhdG9yMi5lKGVycik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIF9pdGVyYXRvcjIuZigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVudHJpZXMucHVzaChcIjxcIi5jb25jYXQoZW5jb2RlZC5qb2luKCcgJyksIFwiPlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICAgIH1cblxuICAgICAgY21hcC5lbmQoXCIvQ0lESW5pdCAvUHJvY1NldCBmaW5kcmVzb3VyY2UgYmVnaW5cXG4xMiBkaWN0IGJlZ2luXFxuYmVnaW5jbWFwXFxuL0NJRFN5c3RlbUluZm8gPDxcXG4gIC9SZWdpc3RyeSAoQWRvYmUpXFxuICAvT3JkZXJpbmcgKFVDUylcXG4gIC9TdXBwbGVtZW50IDBcXG4+PiBkZWZcXG4vQ01hcE5hbWUgL0Fkb2JlLUlkZW50aXR5LVVDUyBkZWZcXG4vQ01hcFR5cGUgMiBkZWZcXG4xIGJlZ2luY29kZXNwYWNlcmFuZ2VcXG48MDAwMD48ZmZmZj5cXG5lbmRjb2Rlc3BhY2VyYW5nZVxcbjEgYmVnaW5iZnJhbmdlXFxuPDAwMDA+IDxcIi5jb25jYXQodG9IZXgoZW50cmllcy5sZW5ndGggLSAxKSwgXCI+IFtcIikuY29uY2F0KGVudHJpZXMuam9pbignICcpLCBcIl1cXG5lbmRiZnJhbmdlXFxuZW5kY21hcFxcbkNNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcFxcbmVuZFxcbmVuZFwiKSk7XG4gICAgICByZXR1cm4gY21hcDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRW1iZWRkZWRGb250O1xufShQREZGb250KTtcblxudmFyIFBERkZvbnRGYWN0b3J5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUERGRm9udEZhY3RvcnkoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERkZvbnRGYWN0b3J5KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQREZGb250RmFjdG9yeSwgbnVsbCwgW3tcbiAgICBrZXk6IFwib3BlblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVuKGRvY3VtZW50LCBzcmMsIGZhbWlseSwgaWQpIHtcbiAgICAgIHZhciBmb250O1xuXG4gICAgICBpZiAodHlwZW9mIHNyYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKFN0YW5kYXJkRm9udC5pc1N0YW5kYXJkRm9udChzcmMpKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdGFuZGFyZEZvbnQoZG9jdW1lbnQsIHNyYywgaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3JjID0gZnMucmVhZEZpbGVTeW5jKHNyYyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoc3JjKSkge1xuICAgICAgICBmb250ID0gX2ZvbnRraXQuZGVmYXVsdC5jcmVhdGUoc3JjLCBmYW1pbHkpO1xuICAgICAgfSBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIGZvbnQgPSBfZm9udGtpdC5kZWZhdWx0LmNyZWF0ZShCdWZmZXIuZnJvbShzcmMpLCBmYW1pbHkpO1xuICAgICAgfSBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBmb250ID0gX2ZvbnRraXQuZGVmYXVsdC5jcmVhdGUoQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoc3JjKSksIGZhbWlseSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb250ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYSBzdXBwb3J0ZWQgZm9udCBmb3JtYXQgb3Igc3RhbmRhcmQgUERGIGZvbnQuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRW1iZWRkZWRGb250KGRvY3VtZW50LCBmb250LCBpZCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBERkZvbnRGYWN0b3J5O1xufSgpO1xuXG52YXIgRm9udHNNaXhpbiA9IHtcbiAgaW5pdEZvbnRzOiBmdW5jdGlvbiBpbml0Rm9udHMoKSB7XG4gICAgdmFyIGRlZmF1bHRGb250ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnSGVsdmV0aWNhJzsgLy8gTG9va3VwIHRhYmxlIGZvciBlbWJlZGRlZCBmb250c1xuXG4gICAgdGhpcy5fZm9udEZhbWlsaWVzID0ge307XG4gICAgdGhpcy5fZm9udENvdW50ID0gMDsgLy8gRm9udCBzdGF0ZVxuXG4gICAgdGhpcy5fZm9udFNpemUgPSAxMjtcbiAgICB0aGlzLl9mb250ID0gbnVsbDtcbiAgICB0aGlzLl9yZWdpc3RlcmVkRm9udHMgPSB7fTsgLy8gU2V0IHRoZSBkZWZhdWx0IGZvbnRcblxuICAgIGlmIChkZWZhdWx0Rm9udCkge1xuICAgICAgdGhpcy5mb250KGRlZmF1bHRGb250KTtcbiAgICB9XG4gIH0sXG4gIGZvbnQ6IGZ1bmN0aW9uIGZvbnQoc3JjLCBmYW1pbHksIHNpemUpIHtcbiAgICB2YXIgY2FjaGVLZXksIGZvbnQ7XG5cbiAgICBpZiAodHlwZW9mIGZhbWlseSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHNpemUgPSBmYW1pbHk7XG4gICAgICBmYW1pbHkgPSBudWxsO1xuICAgIH0gLy8gY2hlY2sgcmVnaXN0ZXJlZCBmb250cyBpZiBzcmMgaXMgYSBzdHJpbmdcblxuXG4gICAgaWYgKHR5cGVvZiBzcmMgPT09ICdzdHJpbmcnICYmIHRoaXMuX3JlZ2lzdGVyZWRGb250c1tzcmNdKSB7XG4gICAgICBjYWNoZUtleSA9IHNyYztcbiAgICAgIHZhciBfdGhpcyRfcmVnaXN0ZXJlZEZvbnQgPSB0aGlzLl9yZWdpc3RlcmVkRm9udHNbc3JjXTtcbiAgICAgIHNyYyA9IF90aGlzJF9yZWdpc3RlcmVkRm9udC5zcmM7XG4gICAgICBmYW1pbHkgPSBfdGhpcyRfcmVnaXN0ZXJlZEZvbnQuZmFtaWx5O1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZUtleSA9IGZhbWlseSB8fCBzcmM7XG5cbiAgICAgIGlmICh0eXBlb2YgY2FjaGVLZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhY2hlS2V5ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2l6ZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLmZvbnRTaXplKHNpemUpO1xuICAgIH0gLy8gZmFzdCBwYXRoOiBjaGVjayBpZiB0aGUgZm9udCBpcyBhbHJlYWR5IGluIHRoZSBQREZcblxuXG4gICAgaWYgKGZvbnQgPSB0aGlzLl9mb250RmFtaWxpZXNbY2FjaGVLZXldKSB7XG4gICAgICB0aGlzLl9mb250ID0gZm9udDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gLy8gbG9hZCB0aGUgZm9udFxuXG5cbiAgICB2YXIgaWQgPSBcIkZcIi5jb25jYXQoKyt0aGlzLl9mb250Q291bnQpO1xuICAgIHRoaXMuX2ZvbnQgPSBQREZGb250RmFjdG9yeS5vcGVuKHRoaXMsIHNyYywgZmFtaWx5LCBpZCk7IC8vIGNoZWNrIGZvciBleGlzdGluZyBmb250IGZhbWlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgaW4gdGhlIFBERlxuICAgIC8vIHVzZWZ1bCBpZiB0aGUgZm9udCB3YXMgcGFzc2VkIGFzIGEgYnVmZmVyXG5cbiAgICBpZiAoZm9udCA9IHRoaXMuX2ZvbnRGYW1pbGllc1t0aGlzLl9mb250Lm5hbWVdKSB7XG4gICAgICB0aGlzLl9mb250ID0gZm9udDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gLy8gc2F2ZSB0aGUgZm9udCBmb3IgcmV1c2UgbGF0ZXJcblxuXG4gICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICB0aGlzLl9mb250RmFtaWxpZXNbY2FjaGVLZXldID0gdGhpcy5fZm9udDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZm9udC5uYW1lKSB7XG4gICAgICB0aGlzLl9mb250RmFtaWxpZXNbdGhpcy5fZm9udC5uYW1lXSA9IHRoaXMuX2ZvbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGZvbnRTaXplOiBmdW5jdGlvbiBmb250U2l6ZShfZm9udFNpemUpIHtcbiAgICB0aGlzLl9mb250U2l6ZSA9IF9mb250U2l6ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY3VycmVudExpbmVIZWlnaHQ6IGZ1bmN0aW9uIGN1cnJlbnRMaW5lSGVpZ2h0KGluY2x1ZGVHYXApIHtcbiAgICBpZiAoaW5jbHVkZUdhcCA9PSBudWxsKSB7XG4gICAgICBpbmNsdWRlR2FwID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZvbnQubGluZUhlaWdodCh0aGlzLl9mb250U2l6ZSwgaW5jbHVkZUdhcCk7XG4gIH0sXG4gIHJlZ2lzdGVyRm9udDogZnVuY3Rpb24gcmVnaXN0ZXJGb250KG5hbWUsIHNyYywgZmFtaWx5KSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJlZEZvbnRzW25hbWVdID0ge1xuICAgICAgc3JjOiBzcmMsXG4gICAgICBmYW1pbHk6IGZhbWlseVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5cbnZhciBMaW5lV3JhcHBlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0V2ZW50RW1pdHRlcikge1xuICBfaW5oZXJpdHMoTGluZVdyYXBwZXIsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoTGluZVdyYXBwZXIpO1xuXG4gIGZ1bmN0aW9uIExpbmVXcmFwcGVyKGRvY3VtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpbmVXcmFwcGVyKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgX3RoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICBfdGhpcy5pbmRlbnQgPSBvcHRpb25zLmluZGVudCB8fCAwO1xuICAgIF90aGlzLmNoYXJhY3RlclNwYWNpbmcgPSBvcHRpb25zLmNoYXJhY3RlclNwYWNpbmcgfHwgMDtcbiAgICBfdGhpcy53b3JkU3BhY2luZyA9IG9wdGlvbnMud29yZFNwYWNpbmcgPT09IDA7XG4gICAgX3RoaXMuY29sdW1ucyA9IG9wdGlvbnMuY29sdW1ucyB8fCAxO1xuICAgIF90aGlzLmNvbHVtbkdhcCA9IG9wdGlvbnMuY29sdW1uR2FwICE9IG51bGwgPyBvcHRpb25zLmNvbHVtbkdhcCA6IDE4OyAvLyAxLzQgaW5jaFxuXG4gICAgX3RoaXMubGluZVdpZHRoID0gKG9wdGlvbnMud2lkdGggLSBfdGhpcy5jb2x1bW5HYXAgKiAoX3RoaXMuY29sdW1ucyAtIDEpKSAvIF90aGlzLmNvbHVtbnM7XG4gICAgX3RoaXMuc3BhY2VMZWZ0ID0gX3RoaXMubGluZVdpZHRoO1xuICAgIF90aGlzLnN0YXJ0WCA9IF90aGlzLmRvY3VtZW50Lng7XG4gICAgX3RoaXMuc3RhcnRZID0gX3RoaXMuZG9jdW1lbnQueTtcbiAgICBfdGhpcy5jb2x1bW4gPSAxO1xuICAgIF90aGlzLmVsbGlwc2lzID0gb3B0aW9ucy5lbGxpcHNpcztcbiAgICBfdGhpcy5jb250aW51ZWRYID0gMDtcbiAgICBfdGhpcy5mZWF0dXJlcyA9IG9wdGlvbnMuZmVhdHVyZXM7IC8vIGNhbGN1bGF0ZSB0aGUgbWF4aW11bSBZIHBvc2l0aW9uIHRoZSB0ZXh0IGNhbiBhcHBlYXIgYXRcblxuICAgIGlmIChvcHRpb25zLmhlaWdodCAhPSBudWxsKSB7XG4gICAgICBfdGhpcy5oZWlnaHQgPSBvcHRpb25zLmhlaWdodDtcbiAgICAgIF90aGlzLm1heFkgPSBfdGhpcy5zdGFydFkgKyBvcHRpb25zLmhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgX3RoaXMubWF4WSA9IF90aGlzLmRvY3VtZW50LnBhZ2UubWF4WSgpO1xuICAgIH0gLy8gaGFuZGxlIHBhcmFncmFwaCBpbmRlbnRzXG5cblxuICAgIF90aGlzLm9uKCdmaXJzdExpbmUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgLy8gaWYgdGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdGV4dCBzZWdtZW50LCBhbmRcbiAgICAgIC8vIHdlJ3JlIGNvbnRpbnVpbmcgd2hlcmUgd2UgbGVmdCBvZmYsIGluZGVudCB0aGF0IG11Y2hcbiAgICAgIC8vIG90aGVyd2lzZSB1c2UgdGhlIHVzZXIgc3BlY2lmaWVkIGluZGVudCBvcHRpb25cbiAgICAgIHZhciBpbmRlbnQgPSBfdGhpcy5jb250aW51ZWRYIHx8IF90aGlzLmluZGVudDtcbiAgICAgIF90aGlzLmRvY3VtZW50LnggKz0gaW5kZW50O1xuICAgICAgX3RoaXMubGluZVdpZHRoIC09IGluZGVudDtcbiAgICAgIHJldHVybiBfdGhpcy5vbmNlKCdsaW5lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5kb2N1bWVudC54IC09IGluZGVudDtcbiAgICAgICAgX3RoaXMubGluZVdpZHRoICs9IGluZGVudDtcblxuICAgICAgICBpZiAob3B0aW9ucy5jb250aW51ZWQgJiYgIV90aGlzLmNvbnRpbnVlZFgpIHtcbiAgICAgICAgICBfdGhpcy5jb250aW51ZWRYID0gX3RoaXMuaW5kZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRpbnVlZCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5jb250aW51ZWRYID0gMDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7IC8vIGhhbmRsZSBsZWZ0IGFsaWduaW5nIGxhc3QgbGluZXMgb2YgcGFyYWdyYXBoc1xuXG5cbiAgICBfdGhpcy5vbignbGFzdExpbmUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgdmFyIGFsaWduID0gb3B0aW9ucy5hbGlnbjtcblxuICAgICAgaWYgKGFsaWduID09PSAnanVzdGlmeScpIHtcbiAgICAgICAgb3B0aW9ucy5hbGlnbiA9ICdsZWZ0JztcbiAgICAgIH1cblxuICAgICAgX3RoaXMubGFzdExpbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIF90aGlzLm9uY2UoJ2xpbmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmRvY3VtZW50LnkgKz0gb3B0aW9ucy5wYXJhZ3JhcGhHYXAgfHwgMDtcbiAgICAgICAgb3B0aW9ucy5hbGlnbiA9IGFsaWduO1xuICAgICAgICByZXR1cm4gX3RoaXMubGFzdExpbmUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKExpbmVXcmFwcGVyLCBbe1xuICAgIGtleTogXCJ3b3JkV2lkdGhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd29yZFdpZHRoKHdvcmQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LndpZHRoT2ZTdHJpbmcod29yZCwgdGhpcykgKyB0aGlzLmNoYXJhY3RlclNwYWNpbmcgKyB0aGlzLndvcmRTcGFjaW5nO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlYWNoV29yZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlYWNoV29yZCh0ZXh0LCBmbikge1xuICAgICAgLy8gc2V0dXAgYSB1bmljb2RlIGxpbmUgYnJlYWtlclxuICAgICAgdmFyIGJrO1xuICAgICAgdmFyIGJyZWFrZXIgPSBuZXcgX2xpbmVicmVhay5kZWZhdWx0KHRleHQpO1xuICAgICAgdmFyIGxhc3QgPSBudWxsO1xuICAgICAgdmFyIHdvcmRXaWR0aHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICB3aGlsZSAoYmsgPSBicmVha2VyLm5leHRCcmVhaygpKSB7XG4gICAgICAgIHZhciBzaG91bGRDb250aW51ZTtcbiAgICAgICAgdmFyIHdvcmQgPSB0ZXh0LnNsaWNlKChsYXN0ICE9IG51bGwgPyBsYXN0LnBvc2l0aW9uIDogdW5kZWZpbmVkKSB8fCAwLCBiay5wb3NpdGlvbik7XG4gICAgICAgIHZhciB3ID0gd29yZFdpZHRoc1t3b3JkXSAhPSBudWxsID8gd29yZFdpZHRoc1t3b3JkXSA6IHdvcmRXaWR0aHNbd29yZF0gPSB0aGlzLndvcmRXaWR0aCh3b3JkKTsgLy8gaWYgdGhlIHdvcmQgaXMgbG9uZ2VyIHRoYW4gdGhlIHdob2xlIGxpbmUsIGNob3AgaXQgdXBcbiAgICAgICAgLy8gVE9ETzogYnJlYWsgYnkgZ3JhcGhlbWUgY2x1c3RlcnMsIG5vdCBKUyBzdHJpbmcgY2hhcmFjdGVyc1xuXG4gICAgICAgIGlmICh3ID4gdGhpcy5saW5lV2lkdGggKyB0aGlzLmNvbnRpbnVlZFgpIHtcbiAgICAgICAgICAvLyBtYWtlIHNvbWUgZmFrZSBicmVhayBvYmplY3RzXG4gICAgICAgICAgdmFyIGxiayA9IGxhc3Q7XG4gICAgICAgICAgdmFyIGZiayA9IHt9O1xuXG4gICAgICAgICAgd2hpbGUgKHdvcmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBmaXQgYXMgbXVjaCBvZiB0aGUgd29yZCBhcyBwb3NzaWJsZSBpbnRvIHRoZSBzcGFjZSB3ZSBoYXZlXG4gICAgICAgICAgICB2YXIgbCwgbWlnaHRHcm93O1xuXG4gICAgICAgICAgICBpZiAodyA+IHRoaXMuc3BhY2VMZWZ0KSB7XG4gICAgICAgICAgICAgIC8vIHN0YXJ0IG91ciBjaGVjayBhdCB0aGUgZW5kIG9mIG91ciBhdmFpbGFibGUgc3BhY2UgLSB0aGlzIG1ldGhvZCBpcyBmYXN0ZXIgdGhhbiBhIGxvb3Agb2YgZWFjaCBjaGFyYWN0ZXIgYW5kIGl0IHJlc29sdmVzXG4gICAgICAgICAgICAgIC8vIGFuIGlzc3VlIHdpdGggbG9uZyBsb29wcyB3aGVuIHByb2Nlc3NpbmcgbWFzc2l2ZSB3b3Jkcywgc3VjaCBhcyBhIGh1Z2UgbnVtYmVyIG9mIHNwYWNlc1xuICAgICAgICAgICAgICBsID0gTWF0aC5jZWlsKHRoaXMuc3BhY2VMZWZ0IC8gKHcgLyB3b3JkLmxlbmd0aCkpO1xuICAgICAgICAgICAgICB3ID0gdGhpcy53b3JkV2lkdGgod29yZC5zbGljZSgwLCBsKSk7XG4gICAgICAgICAgICAgIG1pZ2h0R3JvdyA9IHcgPD0gdGhpcy5zcGFjZUxlZnQgJiYgbCA8IHdvcmQubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbCA9IHdvcmQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbXVzdFNocmluayA9IHcgPiB0aGlzLnNwYWNlTGVmdCAmJiBsID4gMDsgLy8gc2hyaW5rIG9yIGdyb3cgd29yZCBhcyBuZWNlc3NhcnkgYWZ0ZXIgb3VyIG5lYXItZ3Vlc3MgYWJvdmVcblxuICAgICAgICAgICAgd2hpbGUgKG11c3RTaHJpbmsgfHwgbWlnaHRHcm93KSB7XG4gICAgICAgICAgICAgIGlmIChtdXN0U2hyaW5rKSB7XG4gICAgICAgICAgICAgICAgdyA9IHRoaXMud29yZFdpZHRoKHdvcmQuc2xpY2UoMCwgLS1sKSk7XG4gICAgICAgICAgICAgICAgbXVzdFNocmluayA9IHcgPiB0aGlzLnNwYWNlTGVmdCAmJiBsID4gMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3ID0gdGhpcy53b3JkV2lkdGgod29yZC5zbGljZSgwLCArK2wpKTtcbiAgICAgICAgICAgICAgICBtdXN0U2hyaW5rID0gdyA+IHRoaXMuc3BhY2VMZWZ0ICYmIGwgPiAwO1xuICAgICAgICAgICAgICAgIG1pZ2h0R3JvdyA9IHcgPD0gdGhpcy5zcGFjZUxlZnQgJiYgbCA8IHdvcmQubGVuZ3RoO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIGNoZWNrIGZvciB0aGUgZWRnZSBjYXNlIHdoZXJlIGEgc2luZ2xlIGNoYXJhY3RlciBjYW5ub3QgZml0IGludG8gYSBsaW5lLlxuXG5cbiAgICAgICAgICAgIGlmIChsID09PSAwICYmIHRoaXMuc3BhY2VMZWZ0ID09PSB0aGlzLmxpbmVXaWR0aCkge1xuICAgICAgICAgICAgICBsID0gMTtcbiAgICAgICAgICAgIH0gLy8gc2VuZCBhIHJlcXVpcmVkIGJyZWFrIHVubGVzcyB0aGlzIGlzIHRoZSBsYXN0IHBpZWNlIGFuZCBhIGxpbmVicmVhayBpcyBub3Qgc3BlY2lmaWVkXG5cblxuICAgICAgICAgICAgZmJrLnJlcXVpcmVkID0gYmsucmVxdWlyZWQgfHwgbCA8IHdvcmQubGVuZ3RoO1xuICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmbih3b3JkLnNsaWNlKDAsIGwpLCB3LCBmYmssIGxiayk7XG4gICAgICAgICAgICBsYmsgPSB7XG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgICAgICAgICAgfTsgLy8gZ2V0IHRoZSByZW1haW5pbmcgcGllY2Ugb2YgdGhlIHdvcmRcblxuICAgICAgICAgICAgd29yZCA9IHdvcmQuc2xpY2UobCk7XG4gICAgICAgICAgICB3ID0gdGhpcy53b3JkV2lkdGgod29yZCk7XG5cbiAgICAgICAgICAgIGlmIChzaG91bGRDb250aW51ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IGVtaXQgdGhlIGJyZWFrIGFzIGl0IHdhcyBnaXZlbiB0byB1c1xuICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZm4od29yZCwgdywgYmssIGxhc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZENvbnRpbnVlID09PSBmYWxzZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdCA9IGJrO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3cmFwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyYXAodGV4dCwgb3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7IC8vIG92ZXJyaWRlIG9wdGlvbnMgZnJvbSBwcmV2aW91cyBjb250aW51ZWQgZnJhZ21lbnRzXG5cblxuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50ICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5pbmRlbnQgPSBvcHRpb25zLmluZGVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY2hhcmFjdGVyU3BhY2luZyAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hhcmFjdGVyU3BhY2luZyA9IG9wdGlvbnMuY2hhcmFjdGVyU3BhY2luZztcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud29yZFNwYWNpbmcgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLndvcmRTcGFjaW5nID0gb3B0aW9ucy53b3JkU3BhY2luZztcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuZWxsaXBzaXMgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVsbGlwc2lzID0gb3B0aW9ucy5lbGxpcHNpcztcbiAgICAgIH0gLy8gbWFrZSBzdXJlIHdlJ3JlIGFjdHVhbGx5IG9uIHRoZSBwYWdlXG4gICAgICAvLyBhbmQgdGhhdCB0aGUgZmlyc3QgbGluZSBvZiBpcyBuZXZlciBieVxuICAgICAgLy8gaXRzZWxmIGF0IHRoZSBib3R0b20gb2YgYSBwYWdlIChvcnBoYW5zKVxuXG5cbiAgICAgIHZhciBuZXh0WSA9IHRoaXMuZG9jdW1lbnQueSArIHRoaXMuZG9jdW1lbnQuY3VycmVudExpbmVIZWlnaHQodHJ1ZSk7XG5cbiAgICAgIGlmICh0aGlzLmRvY3VtZW50LnkgPiB0aGlzLm1heFkgfHwgbmV4dFkgPiB0aGlzLm1heFkpIHtcbiAgICAgICAgdGhpcy5uZXh0U2VjdGlvbigpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYnVmZmVyID0gJyc7XG4gICAgICB2YXIgdGV4dFdpZHRoID0gMDtcbiAgICAgIHZhciB3YyA9IDA7XG4gICAgICB2YXIgbGMgPSAwO1xuICAgICAgdmFyIHkgPSB0aGlzLmRvY3VtZW50Lnk7IC8vIHVzZWQgdG8gcmVzZXQgWSBwb3MgaWYgb3B0aW9ucy5jb250aW51ZWQgKGJlbG93KVxuXG4gICAgICB2YXIgZW1pdExpbmUgPSBmdW5jdGlvbiBlbWl0TGluZSgpIHtcbiAgICAgICAgb3B0aW9ucy50ZXh0V2lkdGggPSB0ZXh0V2lkdGggKyBfdGhpczIud29yZFNwYWNpbmcgKiAod2MgLSAxKTtcbiAgICAgICAgb3B0aW9ucy53b3JkQ291bnQgPSB3YztcbiAgICAgICAgb3B0aW9ucy5saW5lV2lkdGggPSBfdGhpczIubGluZVdpZHRoO1xuICAgICAgICB5ID0gX3RoaXMyLmRvY3VtZW50Lnk7XG5cbiAgICAgICAgX3RoaXMyLmVtaXQoJ2xpbmUnLCBidWZmZXIsIG9wdGlvbnMsIF90aGlzMik7XG5cbiAgICAgICAgcmV0dXJuIGxjKys7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmVtaXQoJ3NlY3Rpb25TdGFydCcsIG9wdGlvbnMsIHRoaXMpO1xuICAgICAgdGhpcy5lYWNoV29yZCh0ZXh0LCBmdW5jdGlvbiAod29yZCwgdywgYmssIGxhc3QpIHtcbiAgICAgICAgaWYgKGxhc3QgPT0gbnVsbCB8fCBsYXN0LnJlcXVpcmVkKSB7XG4gICAgICAgICAgX3RoaXMyLmVtaXQoJ2ZpcnN0TGluZScsIG9wdGlvbnMsIF90aGlzMik7XG5cbiAgICAgICAgICBfdGhpczIuc3BhY2VMZWZ0ID0gX3RoaXMyLmxpbmVXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3IDw9IF90aGlzMi5zcGFjZUxlZnQpIHtcbiAgICAgICAgICBidWZmZXIgKz0gd29yZDtcbiAgICAgICAgICB0ZXh0V2lkdGggKz0gdztcbiAgICAgICAgICB3YysrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJrLnJlcXVpcmVkIHx8IHcgPiBfdGhpczIuc3BhY2VMZWZ0KSB7XG4gICAgICAgICAgLy8gaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgbWF4IGhlaWdodCBhbmQgYW4gZWxsaXBzaXMsIGFuZCBpcyBhYm91dCB0byBwYXNzIHRoZVxuICAgICAgICAgIC8vIG1heCBoZWlnaHQgYW5kIG1heCBjb2x1bW5zIGFmdGVyIHRoZSBuZXh0IGxpbmUsIGFwcGVuZCB0aGUgZWxsaXBzaXNcbiAgICAgICAgICB2YXIgbGggPSBfdGhpczIuZG9jdW1lbnQuY3VycmVudExpbmVIZWlnaHQodHJ1ZSk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMyLmhlaWdodCAhPSBudWxsICYmIF90aGlzMi5lbGxpcHNpcyAmJiBfdGhpczIuZG9jdW1lbnQueSArIGxoICogMiA+IF90aGlzMi5tYXhZICYmIF90aGlzMi5jb2x1bW4gPj0gX3RoaXMyLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGlmIChfdGhpczIuZWxsaXBzaXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgX3RoaXMyLmVsbGlwc2lzID0gJ+KApic7XG4gICAgICAgICAgICB9IC8vIG1hcCBkZWZhdWx0IGVsbGlwc2lzIGNoYXJhY3RlclxuXG5cbiAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKC9cXHMrJC8sICcnKTtcbiAgICAgICAgICAgIHRleHRXaWR0aCA9IF90aGlzMi53b3JkV2lkdGgoYnVmZmVyICsgX3RoaXMyLmVsbGlwc2lzKTsgLy8gcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyIHVudGlsIHRoZSBlbGxpcHNpcyBmaXRzXG4gICAgICAgICAgICAvLyB0byBhdm9pZCBpbmZpbml0ZSBsb29wIG5lZWQgdG8gc3RvcCB3aGlsZS1sb29wIGlmIGJ1ZmZlciBpcyBlbXB0eSBzdHJpbmdcblxuICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlciAmJiB0ZXh0V2lkdGggPiBfdGhpczIubGluZVdpZHRoKSB7XG4gICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgwLCAtMSkucmVwbGFjZSgvXFxzKyQvLCAnJyk7XG4gICAgICAgICAgICAgIHRleHRXaWR0aCA9IF90aGlzMi53b3JkV2lkdGgoYnVmZmVyICsgX3RoaXMyLmVsbGlwc2lzKTtcbiAgICAgICAgICAgIH0gLy8gbmVlZCB0byBhZGQgZWxsaXBzaXMgb25seSBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIGl0XG5cblxuICAgICAgICAgICAgaWYgKHRleHRXaWR0aCA8PSBfdGhpczIubGluZVdpZHRoKSB7XG4gICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlciArIF90aGlzMi5lbGxpcHNpcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGV4dFdpZHRoID0gX3RoaXMyLndvcmRXaWR0aChidWZmZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChiay5yZXF1aXJlZCkge1xuICAgICAgICAgICAgaWYgKHcgPiBfdGhpczIuc3BhY2VMZWZ0KSB7XG4gICAgICAgICAgICAgIGVtaXRMaW5lKCk7XG4gICAgICAgICAgICAgIGJ1ZmZlciA9IHdvcmQ7XG4gICAgICAgICAgICAgIHRleHRXaWR0aCA9IHc7XG4gICAgICAgICAgICAgIHdjID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX3RoaXMyLmVtaXQoJ2xhc3RMaW5lJywgb3B0aW9ucywgX3RoaXMyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbWl0TGluZSgpOyAvLyBpZiB3ZSd2ZSByZWFjaGVkIHRoZSBlZGdlIG9mIHRoZSBwYWdlLFxuICAgICAgICAgIC8vIGNvbnRpbnVlIG9uIGEgbmV3IHBhZ2Ugb3IgY29sdW1uXG5cbiAgICAgICAgICBpZiAoX3RoaXMyLmRvY3VtZW50LnkgKyBsaCA+IF90aGlzMi5tYXhZKSB7XG4gICAgICAgICAgICB2YXIgc2hvdWxkQ29udGludWUgPSBfdGhpczIubmV4dFNlY3Rpb24oKTsgLy8gc3RvcCBpZiB3ZSByZWFjaGVkIHRoZSBtYXhpbXVtIGhlaWdodFxuXG5cbiAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUpIHtcbiAgICAgICAgICAgICAgd2MgPSAwO1xuICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gcmVzZXQgdGhlIHNwYWNlIGxlZnQgYW5kIGJ1ZmZlclxuXG5cbiAgICAgICAgICBpZiAoYmsucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIF90aGlzMi5zcGFjZUxlZnQgPSBfdGhpczIubGluZVdpZHRoO1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICB0ZXh0V2lkdGggPSAwO1xuICAgICAgICAgICAgcmV0dXJuIHdjID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIHNwYWNlIGxlZnQgYW5kIGJ1ZmZlclxuICAgICAgICAgICAgX3RoaXMyLnNwYWNlTGVmdCA9IF90aGlzMi5saW5lV2lkdGggLSB3O1xuICAgICAgICAgICAgYnVmZmVyID0gd29yZDtcbiAgICAgICAgICAgIHRleHRXaWR0aCA9IHc7XG4gICAgICAgICAgICByZXR1cm4gd2MgPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnNwYWNlTGVmdCAtPSB3O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHdjID4gMCkge1xuICAgICAgICB0aGlzLmVtaXQoJ2xhc3RMaW5lJywgb3B0aW9ucywgdGhpcyk7XG4gICAgICAgIGVtaXRMaW5lKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdCgnc2VjdGlvbkVuZCcsIG9wdGlvbnMsIHRoaXMpOyAvLyBpZiB0aGUgd3JhcCBpcyBzZXQgdG8gYmUgY29udGludWVkLCBzYXZlIHRoZSBYIHBvc2l0aW9uXG4gICAgICAvLyB0byBzdGFydCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgbmV4dCBzZWdtZW50IGF0LCBhbmQgcmVzZXRcbiAgICAgIC8vIHRoZSB5IHBvc2l0aW9uXG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnRpbnVlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAobGMgPiAxKSB7XG4gICAgICAgICAgdGhpcy5jb250aW51ZWRYID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udGludWVkWCArPSBvcHRpb25zLnRleHRXaWR0aCB8fCAwO1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudC55ID0geTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LnggPSB0aGlzLnN0YXJ0WDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibmV4dFNlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbmV4dFNlY3Rpb24ob3B0aW9ucykge1xuICAgICAgdGhpcy5lbWl0KCdzZWN0aW9uRW5kJywgb3B0aW9ucywgdGhpcyk7XG5cbiAgICAgIGlmICgrK3RoaXMuY29sdW1uID4gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIC8vIGlmIGEgbWF4IGhlaWdodCB3YXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB3ZSdyZSBkb25lLlxuICAgICAgICAvLyBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzIHRvIG1ha2UgYSBuZXcgcGFnZSBhdCB0aGUgYm90dG9tLlxuICAgICAgICBpZiAodGhpcy5oZWlnaHQgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZG9jdW1lbnQuY29udGludWVPbk5ld1BhZ2UoKTtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSAxO1xuICAgICAgICB0aGlzLnN0YXJ0WSA9IHRoaXMuZG9jdW1lbnQucGFnZS5tYXJnaW5zLnRvcDtcbiAgICAgICAgdGhpcy5tYXhZID0gdGhpcy5kb2N1bWVudC5wYWdlLm1heFkoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC54ID0gdGhpcy5zdGFydFg7XG5cbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQuX2ZpbGxDb2xvcikge1xuICAgICAgICAgIHZhciBfdGhpcyRkb2N1bWVudDtcblxuICAgICAgICAgIChfdGhpcyRkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQpLmZpbGxDb2xvci5hcHBseShfdGhpcyRkb2N1bWVudCwgX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuZG9jdW1lbnQuX2ZpbGxDb2xvcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbWl0KCdwYWdlQnJlYWsnLCBvcHRpb25zLCB0aGlzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQueCArPSB0aGlzLmxpbmVXaWR0aCArIHRoaXMuY29sdW1uR2FwO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnkgPSB0aGlzLnN0YXJ0WTtcbiAgICAgICAgdGhpcy5lbWl0KCdjb2x1bW5CcmVhaycsIG9wdGlvbnMsIHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVtaXQoJ3NlY3Rpb25TdGFydCcsIG9wdGlvbnMsIHRoaXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIExpbmVXcmFwcGVyO1xufShfZXZlbnRzLkV2ZW50RW1pdHRlcik7XG5cbnZhciBudW1iZXIkMiA9IFBERk9iamVjdC5udW1iZXI7XG52YXIgVGV4dE1peGluID0ge1xuICBpbml0VGV4dDogZnVuY3Rpb24gaW5pdFRleHQoKSB7XG4gICAgdGhpcy5fbGluZSA9IHRoaXMuX2xpbmUuYmluZCh0aGlzKTsgLy8gQ3VycmVudCBjb29yZGluYXRlc1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICAgIHJldHVybiB0aGlzLl9saW5lR2FwID0gMDtcbiAgfSxcbiAgbGluZUdhcDogZnVuY3Rpb24gbGluZUdhcChfbGluZUdhcCkge1xuICAgIHRoaXMuX2xpbmVHYXAgPSBfbGluZUdhcDtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgbW92ZURvd246IGZ1bmN0aW9uIG1vdmVEb3duKGxpbmVzKSB7XG4gICAgaWYgKGxpbmVzID09IG51bGwpIHtcbiAgICAgIGxpbmVzID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLnkgKz0gdGhpcy5jdXJyZW50TGluZUhlaWdodCh0cnVlKSAqIGxpbmVzICsgdGhpcy5fbGluZUdhcDtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgbW92ZVVwOiBmdW5jdGlvbiBtb3ZlVXAobGluZXMpIHtcbiAgICBpZiAobGluZXMgPT0gbnVsbCkge1xuICAgICAgbGluZXMgPSAxO1xuICAgIH1cblxuICAgIHRoaXMueSAtPSB0aGlzLmN1cnJlbnRMaW5lSGVpZ2h0KHRydWUpICogbGluZXMgKyB0aGlzLl9saW5lR2FwO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBfdGV4dDogZnVuY3Rpb24gX3RleHQodGV4dCwgeCwgeSwgb3B0aW9ucywgbGluZUNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIG9wdGlvbnMgPSB0aGlzLl9pbml0T3B0aW9ucyh4LCB5LCBvcHRpb25zKTsgLy8gQ29udmVydCB0ZXh0IHRvIGEgc3RyaW5nXG5cbiAgICB0ZXh0ID0gdGV4dCA9PSBudWxsID8gJycgOiBcIlwiLmNvbmNhdCh0ZXh0KTsgLy8gaWYgdGhlIHdvcmRTcGFjaW5nIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHJlbW92ZSBtdWx0aXBsZSBjb25zZWN1dGl2ZSBzcGFjZXNcblxuICAgIGlmIChvcHRpb25zLndvcmRTcGFjaW5nKSB7XG4gICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7XG4gICAgfVxuXG4gICAgdmFyIGFkZFN0cnVjdHVyZSA9IGZ1bmN0aW9uIGFkZFN0cnVjdHVyZSgpIHtcbiAgICAgIGlmIChvcHRpb25zLnN0cnVjdFBhcmVudCkge1xuICAgICAgICBvcHRpb25zLnN0cnVjdFBhcmVudC5hZGQoX3RoaXMuc3RydWN0KG9wdGlvbnMuc3RydWN0VHlwZSB8fCAnUCcsIFtfdGhpcy5tYXJrU3RydWN0dXJlQ29udGVudChvcHRpb25zLnN0cnVjdFR5cGUgfHwgJ1AnKV0pKTtcbiAgICAgIH1cbiAgICB9OyAvLyB3b3JkIHdyYXBwaW5nXG5cblxuICAgIGlmIChvcHRpb25zLndpZHRoKSB7XG4gICAgICB2YXIgd3JhcHBlciA9IHRoaXMuX3dyYXBwZXI7XG5cbiAgICAgIGlmICghd3JhcHBlcikge1xuICAgICAgICB3cmFwcGVyID0gbmV3IExpbmVXcmFwcGVyKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB3cmFwcGVyLm9uKCdsaW5lJywgbGluZUNhbGxiYWNrKTtcbiAgICAgICAgd3JhcHBlci5vbignZmlyc3RMaW5lJywgYWRkU3RydWN0dXJlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fd3JhcHBlciA9IG9wdGlvbnMuY29udGludWVkID8gd3JhcHBlciA6IG51bGw7XG4gICAgICB0aGlzLl90ZXh0T3B0aW9ucyA9IG9wdGlvbnMuY29udGludWVkID8gb3B0aW9ucyA6IG51bGw7XG4gICAgICB3cmFwcGVyLndyYXAodGV4dCwgb3B0aW9ucyk7IC8vIHJlbmRlciBwYXJhZ3JhcGhzIGFzIHNpbmdsZSBsaW5lc1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGV4dC5zcGxpdCgnXFxuJykpLFxuICAgICAgICAgIF9zdGVwO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBsaW5lID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgYWRkU3RydWN0dXJlKCk7XG4gICAgICAgICAgbGluZUNhbGxiYWNrKGxpbmUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHRleHQ6IGZ1bmN0aW9uIHRleHQoX3RleHQyLCB4LCB5LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RleHQoX3RleHQyLCB4LCB5LCBvcHRpb25zLCB0aGlzLl9saW5lKTtcbiAgfSxcbiAgd2lkdGhPZlN0cmluZzogZnVuY3Rpb24gd2lkdGhPZlN0cmluZyhzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgcmV0dXJuIHRoaXMuX2ZvbnQud2lkdGhPZlN0cmluZyhzdHJpbmcsIHRoaXMuX2ZvbnRTaXplLCBvcHRpb25zLmZlYXR1cmVzKSArIChvcHRpb25zLmNoYXJhY3RlclNwYWNpbmcgfHwgMCkgKiAoc3RyaW5nLmxlbmd0aCAtIDEpO1xuICB9LFxuICBoZWlnaHRPZlN0cmluZzogZnVuY3Rpb24gaGVpZ2h0T2ZTdHJpbmcodGV4dCwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIHggPSB0aGlzLngsXG4gICAgICAgIHkgPSB0aGlzLnk7XG4gICAgb3B0aW9ucyA9IHRoaXMuX2luaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIG9wdGlvbnMuaGVpZ2h0ID0gSW5maW5pdHk7IC8vIGRvbid0IGJyZWFrIHBhZ2VzXG5cbiAgICB2YXIgbGluZUdhcCA9IG9wdGlvbnMubGluZUdhcCB8fCB0aGlzLl9saW5lR2FwIHx8IDA7XG5cbiAgICB0aGlzLl90ZXh0KHRleHQsIHRoaXMueCwgdGhpcy55LCBvcHRpb25zLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLnkgKz0gX3RoaXMyLmN1cnJlbnRMaW5lSGVpZ2h0KHRydWUpICsgbGluZUdhcDtcbiAgICB9KTtcblxuICAgIHZhciBoZWlnaHQgPSB0aGlzLnkgLSB5O1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9LFxuICBsaXN0OiBmdW5jdGlvbiBsaXN0KF9saXN0LCB4LCB5LCBvcHRpb25zLCB3cmFwcGVyKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBvcHRpb25zID0gdGhpcy5faW5pdE9wdGlvbnMoeCwgeSwgb3B0aW9ucyk7XG4gICAgdmFyIGxpc3RUeXBlID0gb3B0aW9ucy5saXN0VHlwZSB8fCAnYnVsbGV0JztcbiAgICB2YXIgdW5pdCA9IE1hdGgucm91bmQodGhpcy5fZm9udC5hc2NlbmRlciAvIDEwMDAgKiB0aGlzLl9mb250U2l6ZSk7XG4gICAgdmFyIG1pZExpbmUgPSB1bml0IC8gMjtcbiAgICB2YXIgciA9IG9wdGlvbnMuYnVsbGV0UmFkaXVzIHx8IHVuaXQgLyAzO1xuICAgIHZhciBpbmRlbnQgPSBvcHRpb25zLnRleHRJbmRlbnQgfHwgKGxpc3RUeXBlID09PSAnYnVsbGV0JyA/IHIgKiA1IDogdW5pdCAqIDIpO1xuICAgIHZhciBpdGVtSW5kZW50ID0gb3B0aW9ucy5idWxsZXRJbmRlbnQgfHwgKGxpc3RUeXBlID09PSAnYnVsbGV0JyA/IHIgKiA4IDogdW5pdCAqIDIpO1xuICAgIHZhciBsZXZlbCA9IDE7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGxldmVscyA9IFtdO1xuICAgIHZhciBudW1iZXJzID0gW107XG5cbiAgICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uIGZsYXR0ZW4obGlzdCkge1xuICAgICAgdmFyIG4gPSAxO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGlzdC5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBsaXN0W19pXTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICAgIGxldmVsKys7XG4gICAgICAgICAgZmxhdHRlbihpdGVtKTtcbiAgICAgICAgICBsZXZlbC0tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgbGV2ZWxzLnB1c2gobGV2ZWwpO1xuXG4gICAgICAgICAgaWYgKGxpc3RUeXBlICE9PSAnYnVsbGV0Jykge1xuICAgICAgICAgICAgbnVtYmVycy5wdXNoKG4rKyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZsYXR0ZW4oX2xpc3QpO1xuXG4gICAgdmFyIGxhYmVsID0gZnVuY3Rpb24gbGFiZWwobikge1xuICAgICAgc3dpdGNoIChsaXN0VHlwZSkge1xuICAgICAgICBjYXNlICdudW1iZXJlZCc6XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KG4sIFwiLlwiKTtcblxuICAgICAgICBjYXNlICdsZXR0ZXJlZCc6XG4gICAgICAgICAgdmFyIGxldHRlciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoKG4gLSAxKSAlIDI2ICsgNjUpO1xuICAgICAgICAgIHZhciB0aW1lcyA9IE1hdGguZmxvb3IoKG4gLSAxKSAvIDI2ICsgMSk7XG4gICAgICAgICAgdmFyIHRleHQgPSBBcnJheSh0aW1lcyArIDEpLmpvaW4obGV0dGVyKTtcbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodGV4dCwgXCIuXCIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3cmFwcGVyID0gbmV3IExpbmVXcmFwcGVyKHRoaXMsIG9wdGlvbnMpO1xuICAgIHdyYXBwZXIub24oJ2xpbmUnLCB0aGlzLl9saW5lKTtcbiAgICBsZXZlbCA9IDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdyYXBwZXIub24oJ2ZpcnN0TGluZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBpdGVtLCBpdGVtVHlwZSwgbGFiZWxUeXBlLCBib2R5VHlwZTtcblxuICAgICAgaWYgKG9wdGlvbnMuc3RydWN0UGFyZW50KSB7XG4gICAgICAgIGlmIChvcHRpb25zLnN0cnVjdFR5cGVzKSB7XG4gICAgICAgICAgdmFyIF9vcHRpb25zJHN0cnVjdFR5cGVzID0gX3NsaWNlZFRvQXJyYXkob3B0aW9ucy5zdHJ1Y3RUeXBlcywgMyk7XG5cbiAgICAgICAgICBpdGVtVHlwZSA9IF9vcHRpb25zJHN0cnVjdFR5cGVzWzBdO1xuICAgICAgICAgIGxhYmVsVHlwZSA9IF9vcHRpb25zJHN0cnVjdFR5cGVzWzFdO1xuICAgICAgICAgIGJvZHlUeXBlID0gX29wdGlvbnMkc3RydWN0VHlwZXNbMl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVR5cGUgPSAnTEknO1xuICAgICAgICAgIGxhYmVsVHlwZSA9ICdMYmwnO1xuICAgICAgICAgIGJvZHlUeXBlID0gJ0xCb2R5JztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVR5cGUpIHtcbiAgICAgICAgaXRlbSA9IF90aGlzMy5zdHJ1Y3QoaXRlbVR5cGUpO1xuICAgICAgICBvcHRpb25zLnN0cnVjdFBhcmVudC5hZGQoaXRlbSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc3RydWN0UGFyZW50KSB7XG4gICAgICAgIGl0ZW0gPSBvcHRpb25zLnN0cnVjdFBhcmVudDtcbiAgICAgIH1cblxuICAgICAgdmFyIGw7XG5cbiAgICAgIGlmICgobCA9IGxldmVsc1tpKytdKSAhPT0gbGV2ZWwpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBpdGVtSW5kZW50ICogKGwgLSBsZXZlbCk7XG4gICAgICAgIF90aGlzMy54ICs9IGRpZmY7XG4gICAgICAgIHdyYXBwZXIubGluZVdpZHRoIC09IGRpZmY7XG4gICAgICAgIGxldmVsID0gbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW0gJiYgKGxhYmVsVHlwZSB8fCBib2R5VHlwZSkpIHtcbiAgICAgICAgaXRlbS5hZGQoX3RoaXMzLnN0cnVjdChsYWJlbFR5cGUgfHwgYm9keVR5cGUsIFtfdGhpczMubWFya1N0cnVjdHVyZUNvbnRlbnQobGFiZWxUeXBlIHx8IGJvZHlUeXBlKV0pKTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChsaXN0VHlwZSkge1xuICAgICAgICBjYXNlICdidWxsZXQnOlxuICAgICAgICAgIF90aGlzMy5jaXJjbGUoX3RoaXMzLnggLSBpbmRlbnQgKyByLCBfdGhpczMueSArIG1pZExpbmUsIHIpO1xuXG4gICAgICAgICAgX3RoaXMzLmZpbGwoKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ251bWJlcmVkJzpcbiAgICAgICAgY2FzZSAnbGV0dGVyZWQnOlxuICAgICAgICAgIHZhciB0ZXh0ID0gbGFiZWwobnVtYmVyc1tpIC0gMV0pO1xuXG4gICAgICAgICAgX3RoaXMzLl9mcmFnbWVudCh0ZXh0LCBfdGhpczMueCAtIGluZGVudCwgX3RoaXMzLnksIG9wdGlvbnMpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtICYmIGxhYmVsVHlwZSAmJiBib2R5VHlwZSkge1xuICAgICAgICBpdGVtLmFkZChfdGhpczMuc3RydWN0KGJvZHlUeXBlLCBbX3RoaXMzLm1hcmtTdHJ1Y3R1cmVDb250ZW50KGJvZHlUeXBlKV0pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW0gJiYgaXRlbSAhPT0gb3B0aW9ucy5zdHJ1Y3RQYXJlbnQpIHtcbiAgICAgICAgaXRlbS5lbmQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB3cmFwcGVyLm9uKCdzZWN0aW9uU3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcG9zID0gaW5kZW50ICsgaXRlbUluZGVudCAqIChsZXZlbCAtIDEpO1xuICAgICAgX3RoaXMzLnggKz0gcG9zO1xuICAgICAgcmV0dXJuIHdyYXBwZXIubGluZVdpZHRoIC09IHBvcztcbiAgICB9KTtcbiAgICB3cmFwcGVyLm9uKCdzZWN0aW9uRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBvcyA9IGluZGVudCArIGl0ZW1JbmRlbnQgKiAobGV2ZWwgLSAxKTtcbiAgICAgIF90aGlzMy54IC09IHBvcztcbiAgICAgIHJldHVybiB3cmFwcGVyLmxpbmVXaWR0aCArPSBwb3M7XG4gICAgfSk7XG4gICAgd3JhcHBlci53cmFwKGl0ZW1zLmpvaW4oJ1xcbicpLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgX2luaXRPcHRpb25zOiBmdW5jdGlvbiBfaW5pdE9wdGlvbnMoKSB7XG4gICAgdmFyIHggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHZhciB5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IHg7XG4gICAgICB4ID0gbnVsbDtcbiAgICB9IC8vIGNsb25lIG9wdGlvbnMgb2JqZWN0XG5cblxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTsgLy8gZXh0ZW5kIG9wdGlvbnMgd2l0aCBwcmV2aW91cyB2YWx1ZXMgZm9yIGNvbnRpbnVlZCB0ZXh0XG5cbiAgICBpZiAodGhpcy5fdGV4dE9wdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl90ZXh0T3B0aW9ucykge1xuICAgICAgICB2YXIgdmFsID0gdGhpcy5fdGV4dE9wdGlvbnNba2V5XTtcblxuICAgICAgICBpZiAoa2V5ICE9PSAnY29udGludWVkJykge1xuICAgICAgICAgIGlmIChyZXN1bHRba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvblxuXG5cbiAgICBpZiAoeCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnggPSB4O1xuICAgIH1cblxuICAgIGlmICh5ICE9IG51bGwpIHtcbiAgICAgIHRoaXMueSA9IHk7XG4gICAgfSAvLyB3cmFwIHRvIG1hcmdpbnMgaWYgbm8geCBvciB5IHBvc2l0aW9uIHBhc3NlZFxuXG5cbiAgICBpZiAocmVzdWx0LmxpbmVCcmVhayAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChyZXN1bHQud2lkdGggPT0gbnVsbCkge1xuICAgICAgICByZXN1bHQud2lkdGggPSB0aGlzLnBhZ2Uud2lkdGggLSB0aGlzLnggLSB0aGlzLnBhZ2UubWFyZ2lucy5yaWdodDtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LndpZHRoID0gTWF0aC5tYXgocmVzdWx0LndpZHRoLCAwKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3VsdC5jb2x1bW5zKSB7XG4gICAgICByZXN1bHQuY29sdW1ucyA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5jb2x1bW5HYXAgPT0gbnVsbCkge1xuICAgICAgcmVzdWx0LmNvbHVtbkdhcCA9IDE4O1xuICAgIH0gLy8gMS80IGluY2hcblxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSxcbiAgX2xpbmU6IGZ1bmN0aW9uIF9saW5lKHRleHQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdyYXBwZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuX2ZyYWdtZW50KHRleHQsIHRoaXMueCwgdGhpcy55LCBvcHRpb25zKTtcblxuICAgIHZhciBsaW5lR2FwID0gb3B0aW9ucy5saW5lR2FwIHx8IHRoaXMuX2xpbmVHYXAgfHwgMDtcblxuICAgIGlmICghd3JhcHBlcikge1xuICAgICAgcmV0dXJuIHRoaXMueCArPSB0aGlzLndpZHRoT2ZTdHJpbmcodGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnkgKz0gdGhpcy5jdXJyZW50TGluZUhlaWdodCh0cnVlKSArIGxpbmVHYXA7XG4gICAgfVxuICB9LFxuICBfZnJhZ21lbnQ6IGZ1bmN0aW9uIF9mcmFnbWVudCh0ZXh0LCB4LCB5LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgZHksIGVuY29kZWQsIGksIHBvc2l0aW9ucywgdGV4dFdpZHRoLCB3b3JkcztcbiAgICB0ZXh0ID0gXCJcIi5jb25jYXQodGV4dCkucmVwbGFjZSgvXFxuL2csICcnKTtcblxuICAgIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gaGFuZGxlIG9wdGlvbnNcblxuXG4gICAgdmFyIGFsaWduID0gb3B0aW9ucy5hbGlnbiB8fCAnbGVmdCc7XG4gICAgdmFyIHdvcmRTcGFjaW5nID0gb3B0aW9ucy53b3JkU3BhY2luZyB8fCAwO1xuICAgIHZhciBjaGFyYWN0ZXJTcGFjaW5nID0gb3B0aW9ucy5jaGFyYWN0ZXJTcGFjaW5nIHx8IDA7IC8vIHRleHQgYWxpZ25tZW50c1xuXG4gICAgaWYgKG9wdGlvbnMud2lkdGgpIHtcbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIHRleHRXaWR0aCA9IHRoaXMud2lkdGhPZlN0cmluZyh0ZXh0LnJlcGxhY2UoL1xccyskLywgJycpLCBvcHRpb25zKTtcbiAgICAgICAgICB4ICs9IG9wdGlvbnMubGluZVdpZHRoIC0gdGV4dFdpZHRoO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgeCArPSBvcHRpb25zLmxpbmVXaWR0aCAvIDIgLSBvcHRpb25zLnRleHRXaWR0aCAvIDI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnanVzdGlmeSc6XG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSB3b3JkIHNwYWNpbmcgdmFsdWVcbiAgICAgICAgICB3b3JkcyA9IHRleHQudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgICAgdGV4dFdpZHRoID0gdGhpcy53aWR0aE9mU3RyaW5nKHRleHQucmVwbGFjZSgvXFxzKy9nLCAnJyksIG9wdGlvbnMpO1xuICAgICAgICAgIHZhciBzcGFjZVdpZHRoID0gdGhpcy53aWR0aE9mU3RyaW5nKCcgJykgKyBjaGFyYWN0ZXJTcGFjaW5nO1xuICAgICAgICAgIHdvcmRTcGFjaW5nID0gTWF0aC5tYXgoMCwgKG9wdGlvbnMubGluZVdpZHRoIC0gdGV4dFdpZHRoKSAvIE1hdGgubWF4KDEsIHdvcmRzLmxlbmd0aCAtIDEpIC0gc3BhY2VXaWR0aCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSAvLyB0ZXh0IGJhc2VsaW5lIGFsaWdubWVudHMgYmFzZWQgb24gaHR0cDovL3dpa2kuYXBhY2hlLm9yZy94bWxncmFwaGljcy1mb3AvTGluZUxheW91dC9BbGlnbm1lbnRIYW5kbGluZ1xuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuYmFzZWxpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICBkeSA9IC1vcHRpb25zLmJhc2VsaW5lO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKG9wdGlvbnMuYmFzZWxpbmUpIHtcbiAgICAgICAgY2FzZSAnc3ZnLW1pZGRsZSc6XG4gICAgICAgICAgZHkgPSAwLjUgKiB0aGlzLl9mb250LnhIZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgY2FzZSAnc3ZnLWNlbnRyYWwnOlxuICAgICAgICAgIGR5ID0gMC41ICogKHRoaXMuX2ZvbnQuZGVzY2VuZGVyICsgdGhpcy5fZm9udC5hc2NlbmRlcik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgY2FzZSAnaWRlb2dyYXBoaWMnOlxuICAgICAgICAgIGR5ID0gdGhpcy5fZm9udC5kZXNjZW5kZXI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWxwaGFiZXRpYyc6XG4gICAgICAgICAgZHkgPSAwO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ21hdGhlbWF0aWNhbCc6XG4gICAgICAgICAgZHkgPSAwLjUgKiB0aGlzLl9mb250LmFzY2VuZGVyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2hhbmdpbmcnOlxuICAgICAgICAgIGR5ID0gMC44ICogdGhpcy5fZm9udC5hc2NlbmRlcjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIGR5ID0gdGhpcy5fZm9udC5hc2NlbmRlcjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGR5ID0gdGhpcy5fZm9udC5hc2NlbmRlcjtcbiAgICAgIH1cblxuICAgICAgZHkgPSBkeSAvIDEwMDAgKiB0aGlzLl9mb250U2l6ZTtcbiAgICB9IC8vIGNhbGN1bGF0ZSB0aGUgYWN0dWFsIHJlbmRlcmVkIHdpZHRoIG9mIHRoZSBzdHJpbmcgYWZ0ZXIgd29yZCBhbmQgY2hhcmFjdGVyIHNwYWNpbmdcblxuXG4gICAgdmFyIHJlbmRlcmVkV2lkdGggPSBvcHRpb25zLnRleHRXaWR0aCArIHdvcmRTcGFjaW5nICogKG9wdGlvbnMud29yZENvdW50IC0gMSkgKyBjaGFyYWN0ZXJTcGFjaW5nICogKHRleHQubGVuZ3RoIC0gMSk7IC8vIGNyZWF0ZSBsaW5rIGFubm90YXRpb25zIGlmIHRoZSBsaW5rIG9wdGlvbiBpcyBnaXZlblxuXG4gICAgaWYgKG9wdGlvbnMubGluayAhPSBudWxsKSB7XG4gICAgICB0aGlzLmxpbmsoeCwgeSwgcmVuZGVyZWRXaWR0aCwgdGhpcy5jdXJyZW50TGluZUhlaWdodCgpLCBvcHRpb25zLmxpbmspO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmdvVG8gIT0gbnVsbCkge1xuICAgICAgdGhpcy5nb1RvKHgsIHksIHJlbmRlcmVkV2lkdGgsIHRoaXMuY3VycmVudExpbmVIZWlnaHQoKSwgb3B0aW9ucy5nb1RvKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5kZXN0aW5hdGlvbiAhPSBudWxsKSB7XG4gICAgICB0aGlzLmFkZE5hbWVkRGVzdGluYXRpb24ob3B0aW9ucy5kZXN0aW5hdGlvbiwgJ1hZWicsIHgsIHksIG51bGwpO1xuICAgIH0gLy8gY3JlYXRlIHVuZGVybGluZVxuXG5cbiAgICBpZiAob3B0aW9ucy51bmRlcmxpbmUpIHtcbiAgICAgIHRoaXMuc2F2ZSgpO1xuXG4gICAgICBpZiAoIW9wdGlvbnMuc3Ryb2tlKSB7XG4gICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IuYXBwbHkodGhpcywgX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuX2ZpbGxDb2xvciB8fCBbXSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5fZm9udFNpemUgPCAxMCA/IDAuNSA6IE1hdGguZmxvb3IodGhpcy5fZm9udFNpemUgLyAxMCk7XG4gICAgICB0aGlzLmxpbmVXaWR0aChsaW5lV2lkdGgpO1xuICAgICAgdmFyIGxpbmVZID0geSArIHRoaXMuY3VycmVudExpbmVIZWlnaHQoKSAtIGxpbmVXaWR0aDtcbiAgICAgIHRoaXMubW92ZVRvKHgsIGxpbmVZKTtcbiAgICAgIHRoaXMubGluZVRvKHggKyByZW5kZXJlZFdpZHRoLCBsaW5lWSk7XG4gICAgICB0aGlzLnN0cm9rZSgpO1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgfSAvLyBjcmVhdGUgc3RyaWtldGhyb3VnaCBsaW5lXG5cblxuICAgIGlmIChvcHRpb25zLnN0cmlrZSkge1xuICAgICAgdGhpcy5zYXZlKCk7XG5cbiAgICAgIGlmICghb3B0aW9ucy5zdHJva2UpIHtcbiAgICAgICAgdGhpcy5zdHJva2VDb2xvci5hcHBseSh0aGlzLCBfdG9Db25zdW1hYmxlQXJyYXkodGhpcy5fZmlsbENvbG9yIHx8IFtdKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBfbGluZVdpZHRoID0gdGhpcy5fZm9udFNpemUgPCAxMCA/IDAuNSA6IE1hdGguZmxvb3IodGhpcy5fZm9udFNpemUgLyAxMCk7XG5cbiAgICAgIHRoaXMubGluZVdpZHRoKF9saW5lV2lkdGgpO1xuXG4gICAgICB2YXIgX2xpbmVZID0geSArIHRoaXMuY3VycmVudExpbmVIZWlnaHQoKSAvIDI7XG5cbiAgICAgIHRoaXMubW92ZVRvKHgsIF9saW5lWSk7XG4gICAgICB0aGlzLmxpbmVUbyh4ICsgcmVuZGVyZWRXaWR0aCwgX2xpbmVZKTtcbiAgICAgIHRoaXMuc3Ryb2tlKCk7XG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmUoKTsgLy8gb2JsaXF1ZSAoYW5nbGUgaW4gZGVncmVlcyBvciBib29sZWFuKVxuXG4gICAgaWYgKG9wdGlvbnMub2JsaXF1ZSkge1xuICAgICAgdmFyIHNrZXc7XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5vYmxpcXVlID09PSAnbnVtYmVyJykge1xuICAgICAgICBza2V3ID0gLU1hdGgudGFuKG9wdGlvbnMub2JsaXF1ZSAqIE1hdGguUEkgLyAxODApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2tldyA9IC0wLjI1O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYW5zZm9ybSgxLCAwLCAwLCAxLCB4LCB5KTtcbiAgICAgIHRoaXMudHJhbnNmb3JtKDEsIDAsIHNrZXcsIDEsIC1za2V3ICogZHksIDApO1xuICAgICAgdGhpcy50cmFuc2Zvcm0oMSwgMCwgMCwgMSwgLXgsIC15KTtcbiAgICB9IC8vIGZsaXAgY29vcmRpbmF0ZSBzeXN0ZW1cblxuXG4gICAgdGhpcy50cmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIHRoaXMucGFnZS5oZWlnaHQpO1xuICAgIHkgPSB0aGlzLnBhZ2UuaGVpZ2h0IC0geSAtIGR5OyAvLyBhZGQgY3VycmVudCBmb250IHRvIHBhZ2UgaWYgbmVjZXNzYXJ5XG5cbiAgICBpZiAodGhpcy5wYWdlLmZvbnRzW3RoaXMuX2ZvbnQuaWRdID09IG51bGwpIHtcbiAgICAgIHRoaXMucGFnZS5mb250c1t0aGlzLl9mb250LmlkXSA9IHRoaXMuX2ZvbnQucmVmKCk7XG4gICAgfSAvLyBiZWdpbiB0aGUgdGV4dCBvYmplY3RcblxuXG4gICAgdGhpcy5hZGRDb250ZW50KCdCVCcpOyAvLyB0ZXh0IHBvc2l0aW9uXG5cbiAgICB0aGlzLmFkZENvbnRlbnQoXCIxIDAgMCAxIFwiLmNvbmNhdChudW1iZXIkMih4KSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMih5KSwgXCIgVG1cIikpOyAvLyBmb250IGFuZCBmb250IHNpemVcblxuICAgIHRoaXMuYWRkQ29udGVudChcIi9cIi5jb25jYXQodGhpcy5fZm9udC5pZCwgXCIgXCIpLmNvbmNhdChudW1iZXIkMih0aGlzLl9mb250U2l6ZSksIFwiIFRmXCIpKTsgLy8gcmVuZGVyaW5nIG1vZGVcblxuICAgIHZhciBtb2RlID0gb3B0aW9ucy5maWxsICYmIG9wdGlvbnMuc3Ryb2tlID8gMiA6IG9wdGlvbnMuc3Ryb2tlID8gMSA6IDA7XG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgdGhpcy5hZGRDb250ZW50KFwiXCIuY29uY2F0KG1vZGUsIFwiIFRyXCIpKTtcbiAgICB9IC8vIENoYXJhY3RlciBzcGFjaW5nXG5cblxuICAgIGlmIChjaGFyYWN0ZXJTcGFjaW5nKSB7XG4gICAgICB0aGlzLmFkZENvbnRlbnQoXCJcIi5jb25jYXQobnVtYmVyJDIoY2hhcmFjdGVyU3BhY2luZyksIFwiIFRjXCIpKTtcbiAgICB9IC8vIEFkZCB0aGUgYWN0dWFsIHRleHRcbiAgICAvLyBJZiB3ZSBoYXZlIGEgd29yZCBzcGFjaW5nIHZhbHVlLCB3ZSBuZWVkIHRvIGVuY29kZSBlYWNoIHdvcmQgc2VwYXJhdGVseVxuICAgIC8vIHNpbmNlIHRoZSBub3JtYWwgVHcgb3BlcmF0b3Igb25seSB3b3JrcyBvbiBjaGFyYWN0ZXIgY29kZSAzMiwgd2hpY2ggaXNuJ3RcbiAgICAvLyB1c2VkIGZvciBlbWJlZGRlZCBmb250cy5cblxuXG4gICAgaWYgKHdvcmRTcGFjaW5nKSB7XG4gICAgICB3b3JkcyA9IHRleHQudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgICB3b3JkU3BhY2luZyArPSB0aGlzLndpZHRoT2ZTdHJpbmcoJyAnKSArIGNoYXJhY3RlclNwYWNpbmc7XG4gICAgICB3b3JkU3BhY2luZyAqPSAxMDAwIC8gdGhpcy5fZm9udFNpemU7XG4gICAgICBlbmNvZGVkID0gW107XG4gICAgICBwb3NpdGlvbnMgPSBbXTtcblxuICAgICAgdmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih3b3JkcyksXG4gICAgICAgICAgX3N0ZXAyO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciB3b3JkID0gX3N0ZXAyLnZhbHVlO1xuXG4gICAgICAgICAgdmFyIF90aGlzJF9mb250JGVuY29kZSA9IHRoaXMuX2ZvbnQuZW5jb2RlKHdvcmQsIG9wdGlvbnMuZmVhdHVyZXMpLFxuICAgICAgICAgICAgICBfdGhpcyRfZm9udCRlbmNvZGUyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkX2ZvbnQkZW5jb2RlLCAyKSxcbiAgICAgICAgICAgICAgZW5jb2RlZFdvcmQgPSBfdGhpcyRfZm9udCRlbmNvZGUyWzBdLFxuICAgICAgICAgICAgICBwb3NpdGlvbnNXb3JkID0gX3RoaXMkX2ZvbnQkZW5jb2RlMlsxXTtcblxuICAgICAgICAgIGVuY29kZWQgPSBlbmNvZGVkLmNvbmNhdChlbmNvZGVkV29yZCk7XG4gICAgICAgICAgcG9zaXRpb25zID0gcG9zaXRpb25zLmNvbmNhdChwb3NpdGlvbnNXb3JkKTsgLy8gYWRkIHRoZSB3b3JkIHNwYWNpbmcgdG8gdGhlIGVuZCBvZiB0aGUgd29yZFxuICAgICAgICAgIC8vIGNsb25lIG9iamVjdCBiZWNhdXNlIG9mIGNhY2hlXG5cbiAgICAgICAgICB2YXIgc3BhY2UgPSB7fTtcbiAgICAgICAgICB2YXIgb2JqZWN0ID0gcG9zaXRpb25zW3Bvc2l0aW9ucy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBvYmplY3Rba2V5XTtcbiAgICAgICAgICAgIHNwYWNlW2tleV0gPSB2YWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3BhY2UueEFkdmFuY2UgKz0gd29yZFNwYWNpbmc7XG4gICAgICAgICAgcG9zaXRpb25zW3Bvc2l0aW9ucy5sZW5ndGggLSAxXSA9IHNwYWNlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yMi5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IyLmYoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF90aGlzJF9mb250JGVuY29kZTMgPSB0aGlzLl9mb250LmVuY29kZSh0ZXh0LCBvcHRpb25zLmZlYXR1cmVzKTtcblxuICAgICAgdmFyIF90aGlzJF9mb250JGVuY29kZTQgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRfZm9udCRlbmNvZGUzLCAyKTtcblxuICAgICAgZW5jb2RlZCA9IF90aGlzJF9mb250JGVuY29kZTRbMF07XG4gICAgICBwb3NpdGlvbnMgPSBfdGhpcyRfZm9udCRlbmNvZGU0WzFdO1xuICAgIH1cblxuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnRTaXplIC8gMTAwMDtcbiAgICB2YXIgY29tbWFuZHMgPSBbXTtcbiAgICB2YXIgbGFzdCA9IDA7XG4gICAgdmFyIGhhZE9mZnNldCA9IGZhbHNlOyAvLyBBZGRzIGEgc2VnbWVudCBvZiB0ZXh0IHRvIHRoZSBUSiBjb21tYW5kIGJ1ZmZlclxuXG4gICAgdmFyIGFkZFNlZ21lbnQgPSBmdW5jdGlvbiBhZGRTZWdtZW50KGN1cikge1xuICAgICAgaWYgKGxhc3QgPCBjdXIpIHtcbiAgICAgICAgdmFyIGhleCA9IGVuY29kZWQuc2xpY2UobGFzdCwgY3VyKS5qb2luKCcnKTtcbiAgICAgICAgdmFyIGFkdmFuY2UgPSBwb3NpdGlvbnNbY3VyIC0gMV0ueEFkdmFuY2UgLSBwb3NpdGlvbnNbY3VyIC0gMV0uYWR2YW5jZVdpZHRoO1xuICAgICAgICBjb21tYW5kcy5wdXNoKFwiPFwiLmNvbmNhdChoZXgsIFwiPiBcIikuY29uY2F0KG51bWJlciQyKC1hZHZhbmNlKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFzdCA9IGN1cjtcbiAgICB9OyAvLyBGbHVzaGVzIHRoZSBjdXJyZW50IFRKIGNvbW1hbmRzIHRvIHRoZSBvdXRwdXQgc3RyZWFtXG5cblxuICAgIHZhciBmbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKGkpIHtcbiAgICAgIGFkZFNlZ21lbnQoaSk7XG5cbiAgICAgIGlmIChjb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIF90aGlzNC5hZGRDb250ZW50KFwiW1wiLmNvbmNhdChjb21tYW5kcy5qb2luKCcgJyksIFwiXSBUSlwiKSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbW1hbmRzLmxlbmd0aCA9IDA7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgYW4geCBvciB5IG9mZnNldCwgd2UgaGF2ZSB0byBicmVhayBvdXQgb2YgdGhlIGN1cnJlbnQgVEogY29tbWFuZFxuICAgICAgLy8gc28gd2UgY2FuIG1vdmUgdGhlIHRleHQgcG9zaXRpb24uXG4gICAgICB2YXIgcG9zID0gcG9zaXRpb25zW2ldO1xuXG4gICAgICBpZiAocG9zLnhPZmZzZXQgfHwgcG9zLnlPZmZzZXQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIGN1cnJlbnQgYnVmZmVyXG4gICAgICAgIGZsdXNoKGkpOyAvLyBNb3ZlIHRoZSB0ZXh0IHBvc2l0aW9uIGFuZCBmbHVzaCBqdXN0IHRoZSBjdXJyZW50IGNoYXJhY3RlclxuXG4gICAgICAgIHRoaXMuYWRkQ29udGVudChcIjEgMCAwIDEgXCIuY29uY2F0KG51bWJlciQyKHggKyBwb3MueE9mZnNldCAqIHNjYWxlKSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMih5ICsgcG9zLnlPZmZzZXQgKiBzY2FsZSksIFwiIFRtXCIpKTtcbiAgICAgICAgZmx1c2goaSArIDEpO1xuICAgICAgICBoYWRPZmZzZXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlIGxhc3QgY2hhcmFjdGVyIGhhZCBhbiBvZmZzZXQsIHJlc2V0IHRoZSB0ZXh0IHBvc2l0aW9uXG4gICAgICAgIGlmIChoYWRPZmZzZXQpIHtcbiAgICAgICAgICB0aGlzLmFkZENvbnRlbnQoXCIxIDAgMCAxIFwiLmNvbmNhdChudW1iZXIkMih4KSwgXCIgXCIpLmNvbmNhdChudW1iZXIkMih5KSwgXCIgVG1cIikpO1xuICAgICAgICAgIGhhZE9mZnNldCA9IGZhbHNlO1xuICAgICAgICB9IC8vIEdyb3VwIHNlZ21lbnRzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgYWR2YW5jZSBhZGp1c3RtZW50c1xuXG5cbiAgICAgICAgaWYgKHBvcy54QWR2YW5jZSAtIHBvcy5hZHZhbmNlV2lkdGggIT09IDApIHtcbiAgICAgICAgICBhZGRTZWdtZW50KGkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB4ICs9IHBvcy54QWR2YW5jZSAqIHNjYWxlO1xuICAgIH0gLy8gRmx1c2ggYW55IHJlbWFpbmluZyBjb21tYW5kc1xuXG5cbiAgICBmbHVzaChpKTsgLy8gZW5kIHRoZSB0ZXh0IG9iamVjdFxuXG4gICAgdGhpcy5hZGRDb250ZW50KCdFVCcpOyAvLyByZXN0b3JlIGZsaXBwZWQgY29vcmRpbmF0ZSBzeXN0ZW1cblxuICAgIHJldHVybiB0aGlzLnJlc3RvcmUoKTtcbiAgfVxufTtcbnZhciBNQVJLRVJTID0gWzB4ZmZjMCwgMHhmZmMxLCAweGZmYzIsIDB4ZmZjMywgMHhmZmM1LCAweGZmYzYsIDB4ZmZjNywgMHhmZmM4LCAweGZmYzksIDB4ZmZjYSwgMHhmZmNiLCAweGZmY2MsIDB4ZmZjZCwgMHhmZmNlLCAweGZmY2ZdO1xudmFyIENPTE9SX1NQQUNFX01BUCA9IHtcbiAgMTogJ0RldmljZUdyYXknLFxuICAzOiAnRGV2aWNlUkdCJyxcbiAgNDogJ0RldmljZUNNWUsnXG59O1xuXG52YXIgSlBFRyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEpQRUcoZGF0YSwgbGFiZWwpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSlBFRyk7XG5cbiAgICB2YXIgbWFya2VyO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5yZWFkVUludDE2QkUoMCkgIT09IDB4ZmZkOCkge1xuICAgICAgdGhyb3cgJ1NPSSBub3QgZm91bmQgaW4gSlBFRyc7XG4gICAgfVxuXG4gICAgdmFyIHBvcyA9IDI7XG5cbiAgICB3aGlsZSAocG9zIDwgdGhpcy5kYXRhLmxlbmd0aCkge1xuICAgICAgbWFya2VyID0gdGhpcy5kYXRhLnJlYWRVSW50MTZCRShwb3MpO1xuICAgICAgcG9zICs9IDI7XG5cbiAgICAgIGlmIChNQVJLRVJTLmluY2x1ZGVzKG1hcmtlcikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHBvcyArPSB0aGlzLmRhdGEucmVhZFVJbnQxNkJFKHBvcyk7XG4gICAgfVxuXG4gICAgaWYgKCFNQVJLRVJTLmluY2x1ZGVzKG1hcmtlcikpIHtcbiAgICAgIHRocm93ICdJbnZhbGlkIEpQRUcuJztcbiAgICB9XG5cbiAgICBwb3MgKz0gMjtcbiAgICB0aGlzLmJpdHMgPSB0aGlzLmRhdGFbcG9zKytdO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5kYXRhLnJlYWRVSW50MTZCRShwb3MpO1xuICAgIHBvcyArPSAyO1xuICAgIHRoaXMud2lkdGggPSB0aGlzLmRhdGEucmVhZFVJbnQxNkJFKHBvcyk7XG4gICAgcG9zICs9IDI7XG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5kYXRhW3BvcysrXTtcbiAgICB0aGlzLmNvbG9yU3BhY2UgPSBDT0xPUl9TUEFDRV9NQVBbY2hhbm5lbHNdO1xuICAgIHRoaXMub2JqID0gbnVsbDtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhKUEVHLCBbe1xuICAgIGtleTogXCJlbWJlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbWJlZChkb2N1bWVudCkge1xuICAgICAgaWYgKHRoaXMub2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vYmogPSBkb2N1bWVudC5yZWYoe1xuICAgICAgICBUeXBlOiAnWE9iamVjdCcsXG4gICAgICAgIFN1YnR5cGU6ICdJbWFnZScsXG4gICAgICAgIEJpdHNQZXJDb21wb25lbnQ6IHRoaXMuYml0cyxcbiAgICAgICAgV2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgIEhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgIENvbG9yU3BhY2U6IHRoaXMuY29sb3JTcGFjZSxcbiAgICAgICAgRmlsdGVyOiAnRENURGVjb2RlJ1xuICAgICAgfSk7IC8vIGFkZCBleHRyYSBkZWNvZGUgcGFyYW1zIGZvciBDTVlLIGltYWdlcy4gQnkgc3dhcHBpbmcgdGhlXG4gICAgICAvLyBtaW4gYW5kIG1heCB2YWx1ZXMgZnJvbSB0aGUgZGVmYXVsdCwgd2UgaW52ZXJ0IHRoZSBjb2xvcnMuIFNlZVxuICAgICAgLy8gc2VjdGlvbiA0LjguNCBvZiB0aGUgc3BlYy5cblxuICAgICAgaWYgKHRoaXMuY29sb3JTcGFjZSA9PT0gJ0RldmljZUNNWUsnKSB7XG4gICAgICAgIHRoaXMub2JqLmRhdGFbJ0RlY29kZSddID0gWzEuMCwgMC4wLCAxLjAsIDAuMCwgMS4wLCAwLjAsIDEuMCwgMC4wXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vYmouZW5kKHRoaXMuZGF0YSk7IC8vIGZyZWUgbWVtb3J5XG5cbiAgICAgIHJldHVybiB0aGlzLmRhdGEgPSBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBKUEVHO1xufSgpO1xuXG52YXIgUE5HSW1hZ2UgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQTkdJbWFnZShkYXRhLCBsYWJlbCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQTkdJbWFnZSk7XG5cbiAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgdGhpcy5pbWFnZSA9IG5ldyBfcG5nSnMuZGVmYXVsdChkYXRhKTtcbiAgICB0aGlzLndpZHRoID0gdGhpcy5pbWFnZS53aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMuaW1hZ2UuaGVpZ2h0O1xuICAgIHRoaXMuaW1nRGF0YSA9IHRoaXMuaW1hZ2UuaW1nRGF0YTtcbiAgICB0aGlzLm9iaiA9IG51bGw7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUE5HSW1hZ2UsIFt7XG4gICAga2V5OiBcImVtYmVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVtYmVkKGRvY3VtZW50KSB7XG4gICAgICB2YXIgZGF0YURlY29kZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcblxuICAgICAgaWYgKHRoaXMub2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGhhc0FscGhhQ2hhbm5lbCA9IHRoaXMuaW1hZ2UuaGFzQWxwaGFDaGFubmVsO1xuICAgICAgdmFyIGlzSW50ZXJsYWNlZCA9IHRoaXMuaW1hZ2UuaW50ZXJsYWNlTWV0aG9kID09PSAxO1xuICAgICAgdGhpcy5vYmogPSB0aGlzLmRvY3VtZW50LnJlZih7XG4gICAgICAgIFR5cGU6ICdYT2JqZWN0JyxcbiAgICAgICAgU3VidHlwZTogJ0ltYWdlJyxcbiAgICAgICAgQml0c1BlckNvbXBvbmVudDogaGFzQWxwaGFDaGFubmVsID8gOCA6IHRoaXMuaW1hZ2UuYml0cyxcbiAgICAgICAgV2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgIEhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgIEZpbHRlcjogJ0ZsYXRlRGVjb2RlJ1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghaGFzQWxwaGFDaGFubmVsKSB7XG4gICAgICAgIHZhciBwYXJhbXMgPSB0aGlzLmRvY3VtZW50LnJlZih7XG4gICAgICAgICAgUHJlZGljdG9yOiBpc0ludGVybGFjZWQgPyAxIDogMTUsXG4gICAgICAgICAgQ29sb3JzOiB0aGlzLmltYWdlLmNvbG9ycyxcbiAgICAgICAgICBCaXRzUGVyQ29tcG9uZW50OiB0aGlzLmltYWdlLmJpdHMsXG4gICAgICAgICAgQ29sdW1uczogdGhpcy53aWR0aFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vYmouZGF0YVsnRGVjb2RlUGFybXMnXSA9IHBhcmFtcztcbiAgICAgICAgcGFyYW1zLmVuZCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbWFnZS5wYWxldHRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLm9iai5kYXRhWydDb2xvclNwYWNlJ10gPSB0aGlzLmltYWdlLmNvbG9yU3BhY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbWJlZCB0aGUgY29sb3IgcGFsZXR0ZSBpbiB0aGUgUERGIGFzIGFuIG9iamVjdCBzdHJlYW1cbiAgICAgICAgdmFyIHBhbGV0dGUgPSB0aGlzLmRvY3VtZW50LnJlZigpO1xuICAgICAgICBwYWxldHRlLmVuZChCdWZmZXIuZnJvbSh0aGlzLmltYWdlLnBhbGV0dGUpKTsgLy8gYnVpbGQgdGhlIGNvbG9yIHNwYWNlIGFycmF5IGZvciB0aGUgaW1hZ2VcblxuICAgICAgICB0aGlzLm9iai5kYXRhWydDb2xvclNwYWNlJ10gPSBbJ0luZGV4ZWQnLCAnRGV2aWNlUkdCJywgdGhpcy5pbWFnZS5wYWxldHRlLmxlbmd0aCAvIDMgLSAxLCBwYWxldHRlXTtcbiAgICAgIH0gLy8gRm9yIFBORyBjb2xvciB0eXBlcyAwLCAyIGFuZCAzLCB0aGUgdHJhbnNwYXJlbmN5IGRhdGEgaXMgc3RvcmVkIGluXG4gICAgICAvLyBhIGRlZGljYXRlZCBQTkcgY2h1bmsuXG5cblxuICAgICAgaWYgKHRoaXMuaW1hZ2UudHJhbnNwYXJlbmN5LmdyYXlzY2FsZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIFVzZSBDb2xvciBLZXkgTWFza2luZyAoc3BlYyBzZWN0aW9uIDQuOC41KVxuICAgICAgICAvLyBBbiBhcnJheSB3aXRoIE4gZWxlbWVudHMsIHdoZXJlIE4gaXMgdHdvIHRpbWVzIHRoZSBudW1iZXIgb2YgY29sb3IgY29tcG9uZW50cy5cbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuaW1hZ2UudHJhbnNwYXJlbmN5LmdyYXlzY2FsZTtcbiAgICAgICAgdGhpcy5vYmouZGF0YVsnTWFzayddID0gW3ZhbCwgdmFsXTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZS50cmFuc3BhcmVuY3kucmdiKSB7XG4gICAgICAgIC8vIFVzZSBDb2xvciBLZXkgTWFza2luZyAoc3BlYyBzZWN0aW9uIDQuOC41KVxuICAgICAgICAvLyBBbiBhcnJheSB3aXRoIE4gZWxlbWVudHMsIHdoZXJlIE4gaXMgdHdvIHRpbWVzIHRoZSBudW1iZXIgb2YgY29sb3IgY29tcG9uZW50cy5cbiAgICAgICAgdmFyIHJnYiA9IHRoaXMuaW1hZ2UudHJhbnNwYXJlbmN5LnJnYjtcbiAgICAgICAgdmFyIG1hc2sgPSBbXTtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocmdiKSxcbiAgICAgICAgICAgIF9zdGVwO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICAgIHZhciB4ID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgICBtYXNrLnB1c2goeCwgeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9iai5kYXRhWydNYXNrJ10gPSBtYXNrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmltYWdlLnRyYW5zcGFyZW5jeS5pbmRleGVkKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHRyYW5zcGFyZW5jeSBTTWFzayBmb3IgdGhlIGltYWdlIGJhc2VkIG9uIHRoZSBkYXRhXG4gICAgICAgIC8vIGluIHRoZSBQTFRFIGFuZCB0Uk5TIHNlY3Rpb25zLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMgb24gU01hc2tzLlxuICAgICAgICBkYXRhRGVjb2RlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRJbmRleGVkQWxwaGFDaGFubmVsKCk7XG4gICAgICB9IGVsc2UgaWYgKGhhc0FscGhhQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3IgUE5HIGNvbG9yIHR5cGVzIDQgYW5kIDYsIHRoZSB0cmFuc3BhcmVuY3kgZGF0YSBpcyBzdG9yZWQgYXMgYSBhbHBoYVxuICAgICAgICAvLyBjaGFubmVsIG1peGVkIGluIHdpdGggdGhlIG1haW4gaW1hZ2UgZGF0YS4gU2VwYXJhdGUgdGhpcyBkYXRhIG91dCBpbnRvIGFuXG4gICAgICAgIC8vIFNNYXNrIG9iamVjdCBhbmQgc3RvcmUgaXQgc2VwYXJhdGVseSBpbiB0aGUgUERGLlxuICAgICAgICBkYXRhRGVjb2RlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLnNwbGl0QWxwaGFDaGFubmVsKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0ludGVybGFjZWQgJiYgIWRhdGFEZWNvZGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlY29kZURhdGEoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maW5hbGl6ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaW5hbGl6ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5hbGl6ZSgpIHtcbiAgICAgIGlmICh0aGlzLmFscGhhQ2hhbm5lbCkge1xuICAgICAgICB2YXIgc01hc2sgPSB0aGlzLmRvY3VtZW50LnJlZih7XG4gICAgICAgICAgVHlwZTogJ1hPYmplY3QnLFxuICAgICAgICAgIFN1YnR5cGU6ICdJbWFnZScsXG4gICAgICAgICAgSGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgICAgICBXaWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICBCaXRzUGVyQ29tcG9uZW50OiA4LFxuICAgICAgICAgIEZpbHRlcjogJ0ZsYXRlRGVjb2RlJyxcbiAgICAgICAgICBDb2xvclNwYWNlOiAnRGV2aWNlR3JheScsXG4gICAgICAgICAgRGVjb2RlOiBbMCwgMV1cbiAgICAgICAgfSk7XG4gICAgICAgIHNNYXNrLmVuZCh0aGlzLmFscGhhQ2hhbm5lbCk7XG4gICAgICAgIHRoaXMub2JqLmRhdGFbJ1NNYXNrJ10gPSBzTWFzaztcbiAgICAgIH0gLy8gYWRkIHRoZSBhY3R1YWwgaW1hZ2UgZGF0YVxuXG5cbiAgICAgIHRoaXMub2JqLmVuZCh0aGlzLmltZ0RhdGEpOyAvLyBmcmVlIG1lbW9yeVxuXG4gICAgICB0aGlzLmltYWdlID0gbnVsbDtcbiAgICAgIHJldHVybiB0aGlzLmltZ0RhdGEgPSBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzcGxpdEFscGhhQ2hhbm5lbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzcGxpdEFscGhhQ2hhbm5lbCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHJldHVybiB0aGlzLmltYWdlLmRlY29kZVBpeGVscyhmdW5jdGlvbiAocGl4ZWxzKSB7XG4gICAgICAgIHZhciBhLCBwO1xuICAgICAgICB2YXIgY29sb3JDb3VudCA9IF90aGlzLmltYWdlLmNvbG9ycztcbiAgICAgICAgdmFyIHBpeGVsQ291bnQgPSBfdGhpcy53aWR0aCAqIF90aGlzLmhlaWdodDtcbiAgICAgICAgdmFyIGltZ0RhdGEgPSBCdWZmZXIuYWxsb2MocGl4ZWxDb3VudCAqIGNvbG9yQ291bnQpO1xuICAgICAgICB2YXIgYWxwaGFDaGFubmVsID0gQnVmZmVyLmFsbG9jKHBpeGVsQ291bnQpO1xuICAgICAgICB2YXIgaSA9IHAgPSBhID0gMDtcbiAgICAgICAgdmFyIGxlbiA9IHBpeGVscy5sZW5ndGg7IC8vIEZvciAxNmJpdCBpbWFnZXMgY29weSBvbmx5IG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSAoTVNCKSAtIFBORyBkYXRhIGlzIGFsd2F5cyBzdG9yZWQgaW4gbmV0d29yayBieXRlIG9yZGVyIChNU0IgZmlyc3QpXG5cbiAgICAgICAgdmFyIHNraXBCeXRlQ291bnQgPSBfdGhpcy5pbWFnZS5iaXRzID09PSAxNiA/IDEgOiAwO1xuXG4gICAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgICAgZm9yICh2YXIgY29sb3JJbmRleCA9IDA7IGNvbG9ySW5kZXggPCBjb2xvckNvdW50OyBjb2xvckluZGV4KyspIHtcbiAgICAgICAgICAgIGltZ0RhdGFbcCsrXSA9IHBpeGVsc1tpKytdO1xuICAgICAgICAgICAgaSArPSBza2lwQnl0ZUNvdW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFscGhhQ2hhbm5lbFthKytdID0gcGl4ZWxzW2krK107XG4gICAgICAgICAgaSArPSBza2lwQnl0ZUNvdW50O1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuaW1nRGF0YSA9IF96bGliLmRlZmF1bHQuZGVmbGF0ZVN5bmMoaW1nRGF0YSk7XG4gICAgICAgIF90aGlzLmFscGhhQ2hhbm5lbCA9IF96bGliLmRlZmF1bHQuZGVmbGF0ZVN5bmMoYWxwaGFDaGFubmVsKTtcbiAgICAgICAgcmV0dXJuIF90aGlzLmZpbmFsaXplKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9hZEluZGV4ZWRBbHBoYUNoYW5uZWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZEluZGV4ZWRBbHBoYUNoYW5uZWwoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHRyYW5zcGFyZW5jeSA9IHRoaXMuaW1hZ2UudHJhbnNwYXJlbmN5LmluZGV4ZWQ7XG4gICAgICByZXR1cm4gdGhpcy5pbWFnZS5kZWNvZGVQaXhlbHMoZnVuY3Rpb24gKHBpeGVscykge1xuICAgICAgICB2YXIgYWxwaGFDaGFubmVsID0gQnVmZmVyLmFsbG9jKF90aGlzMi53aWR0aCAqIF90aGlzMi5oZWlnaHQpO1xuICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGVuZCA9IHBpeGVscy5sZW5ndGg7IGogPCBlbmQ7IGorKykge1xuICAgICAgICAgIGFscGhhQ2hhbm5lbFtpKytdID0gdHJhbnNwYXJlbmN5W3BpeGVsc1tqXV07XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIuYWxwaGFDaGFubmVsID0gX3psaWIuZGVmYXVsdC5kZWZsYXRlU3luYyhhbHBoYUNoYW5uZWwpO1xuICAgICAgICByZXR1cm4gX3RoaXMyLmZpbmFsaXplKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVjb2RlRGF0YVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZWNvZGVEYXRhKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaW1hZ2UuZGVjb2RlUGl4ZWxzKGZ1bmN0aW9uIChwaXhlbHMpIHtcbiAgICAgICAgX3RoaXMzLmltZ0RhdGEgPSBfemxpYi5kZWZhdWx0LmRlZmxhdGVTeW5jKHBpeGVscyk7XG5cbiAgICAgICAgX3RoaXMzLmZpbmFsaXplKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUE5HSW1hZ2U7XG59KCk7XG5cbnZhciBQREZJbWFnZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBERkltYWdlKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZJbWFnZSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUERGSW1hZ2UsIG51bGwsIFt7XG4gICAga2V5OiBcIm9wZW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3BlbihzcmMsIGxhYmVsKSB7XG4gICAgICB2YXIgZGF0YTtcblxuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzcmMpKSB7XG4gICAgICAgIGRhdGEgPSBzcmM7XG4gICAgICB9IGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShzcmMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBtYXRjaDtcblxuICAgICAgICBpZiAobWF0Y2ggPSAvXmRhdGE6Lis7YmFzZTY0LCguKikkLy5leGVjKHNyYykpIHtcbiAgICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20obWF0Y2hbMV0sICdiYXNlNjQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHNyYyk7XG5cbiAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGFbMF0gPT09IDB4ZmYgJiYgZGF0YVsxXSA9PT0gMHhkOCkge1xuICAgICAgICByZXR1cm4gbmV3IEpQRUcoZGF0YSwgbGFiZWwpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhWzBdID09PSAweDg5ICYmIGRhdGEudG9TdHJpbmcoJ2FzY2lpJywgMSwgNCkgPT09ICdQTkcnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2UoZGF0YSwgbGFiZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGltYWdlIGZvcm1hdC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUERGSW1hZ2U7XG59KCk7XG5cbnZhciBJbWFnZXNNaXhpbiA9IHtcbiAgaW5pdEltYWdlczogZnVuY3Rpb24gaW5pdEltYWdlcygpIHtcbiAgICB0aGlzLl9pbWFnZVJlZ2lzdHJ5ID0ge307XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlQ291bnQgPSAwO1xuICB9LFxuICBpbWFnZTogZnVuY3Rpb24gaW1hZ2Uoc3JjLCB4LCB5KSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuICAgIHZhciBiaCwgYnAsIGJ3LCBpbWFnZSwgaXAsIGxlZnQsIGxlZnQxO1xuXG4gICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IHg7XG4gICAgICB4ID0gbnVsbDtcbiAgICB9XG5cbiAgICB4ID0gKGxlZnQgPSB4ICE9IG51bGwgPyB4IDogb3B0aW9ucy54KSAhPSBudWxsID8gbGVmdCA6IHRoaXMueDtcbiAgICB5ID0gKGxlZnQxID0geSAhPSBudWxsID8geSA6IG9wdGlvbnMueSkgIT0gbnVsbCA/IGxlZnQxIDogdGhpcy55O1xuXG4gICAgaWYgKHR5cGVvZiBzcmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbWFnZSA9IHRoaXMuX2ltYWdlUmVnaXN0cnlbc3JjXTtcbiAgICB9XG5cbiAgICBpZiAoIWltYWdlKSB7XG4gICAgICBpZiAoc3JjLndpZHRoICYmIHNyYy5oZWlnaHQpIHtcbiAgICAgICAgaW1hZ2UgPSBzcmM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWFnZSA9IHRoaXMub3BlbkltYWdlKHNyYyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbWFnZS5vYmopIHtcbiAgICAgIGltYWdlLmVtYmVkKHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2UueG9iamVjdHNbaW1hZ2UubGFiZWxdID09IG51bGwpIHtcbiAgICAgIHRoaXMucGFnZS54b2JqZWN0c1tpbWFnZS5sYWJlbF0gPSBpbWFnZS5vYmo7XG4gICAgfVxuXG4gICAgdmFyIHcgPSBvcHRpb25zLndpZHRoIHx8IGltYWdlLndpZHRoO1xuICAgIHZhciBoID0gb3B0aW9ucy5oZWlnaHQgfHwgaW1hZ2UuaGVpZ2h0O1xuXG4gICAgaWYgKG9wdGlvbnMud2lkdGggJiYgIW9wdGlvbnMuaGVpZ2h0KSB7XG4gICAgICB2YXIgd3AgPSB3IC8gaW1hZ2Uud2lkdGg7XG4gICAgICB3ID0gaW1hZ2Uud2lkdGggKiB3cDtcbiAgICAgIGggPSBpbWFnZS5oZWlnaHQgKiB3cDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaGVpZ2h0ICYmICFvcHRpb25zLndpZHRoKSB7XG4gICAgICB2YXIgaHAgPSBoIC8gaW1hZ2UuaGVpZ2h0O1xuICAgICAgdyA9IGltYWdlLndpZHRoICogaHA7XG4gICAgICBoID0gaW1hZ2UuaGVpZ2h0ICogaHA7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnNjYWxlKSB7XG4gICAgICB3ID0gaW1hZ2Uud2lkdGggKiBvcHRpb25zLnNjYWxlO1xuICAgICAgaCA9IGltYWdlLmhlaWdodCAqIG9wdGlvbnMuc2NhbGU7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmZpdCkge1xuICAgICAgdmFyIF9vcHRpb25zJGZpdCA9IF9zbGljZWRUb0FycmF5KG9wdGlvbnMuZml0LCAyKTtcblxuICAgICAgYncgPSBfb3B0aW9ucyRmaXRbMF07XG4gICAgICBiaCA9IF9vcHRpb25zJGZpdFsxXTtcbiAgICAgIGJwID0gYncgLyBiaDtcbiAgICAgIGlwID0gaW1hZ2Uud2lkdGggLyBpbWFnZS5oZWlnaHQ7XG5cbiAgICAgIGlmIChpcCA+IGJwKSB7XG4gICAgICAgIHcgPSBidztcbiAgICAgICAgaCA9IGJ3IC8gaXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoID0gYmg7XG4gICAgICAgIHcgPSBiaCAqIGlwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5jb3Zlcikge1xuICAgICAgdmFyIF9vcHRpb25zJGNvdmVyID0gX3NsaWNlZFRvQXJyYXkob3B0aW9ucy5jb3ZlciwgMik7XG5cbiAgICAgIGJ3ID0gX29wdGlvbnMkY292ZXJbMF07XG4gICAgICBiaCA9IF9vcHRpb25zJGNvdmVyWzFdO1xuICAgICAgYnAgPSBidyAvIGJoO1xuICAgICAgaXAgPSBpbWFnZS53aWR0aCAvIGltYWdlLmhlaWdodDtcblxuICAgICAgaWYgKGlwID4gYnApIHtcbiAgICAgICAgaCA9IGJoO1xuICAgICAgICB3ID0gYmggKiBpcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHcgPSBidztcbiAgICAgICAgaCA9IGJ3IC8gaXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZml0IHx8IG9wdGlvbnMuY292ZXIpIHtcbiAgICAgIGlmIChvcHRpb25zLmFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICB4ID0geCArIGJ3IC8gMiAtIHcgLyAyO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIHggPSB4ICsgYncgLSB3O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy52YWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHkgPSB5ICsgYmggLyAyIC0gaCAvIDI7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudmFsaWduID09PSAnYm90dG9tJykge1xuICAgICAgICB5ID0geSArIGJoIC0gaDtcbiAgICAgIH1cbiAgICB9IC8vIGNyZWF0ZSBsaW5rIGFubm90YXRpb25zIGlmIHRoZSBsaW5rIG9wdGlvbiBpcyBnaXZlblxuXG5cbiAgICBpZiAob3B0aW9ucy5saW5rICE9IG51bGwpIHtcbiAgICAgIHRoaXMubGluayh4LCB5LCB3LCBoLCBvcHRpb25zLmxpbmspO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmdvVG8gIT0gbnVsbCkge1xuICAgICAgdGhpcy5nb1RvKHgsIHksIHcsIGgsIG9wdGlvbnMuZ29Ubyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGVzdGluYXRpb24gIT0gbnVsbCkge1xuICAgICAgdGhpcy5hZGROYW1lZERlc3RpbmF0aW9uKG9wdGlvbnMuZGVzdGluYXRpb24sICdYWVonLCB4LCB5LCBudWxsKTtcbiAgICB9IC8vIFNldCB0aGUgY3VycmVudCB5IHBvc2l0aW9uIHRvIGJlbG93IHRoZSBpbWFnZSBpZiBpdCBpcyBpbiB0aGUgZG9jdW1lbnQgZmxvd1xuXG5cbiAgICBpZiAodGhpcy55ID09PSB5KSB7XG4gICAgICB0aGlzLnkgKz0gaDtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmUoKTtcbiAgICB0aGlzLnRyYW5zZm9ybSh3LCAwLCAwLCAtaCwgeCwgeSArIGgpO1xuICAgIHRoaXMuYWRkQ29udGVudChcIi9cIi5jb25jYXQoaW1hZ2UubGFiZWwsIFwiIERvXCIpKTtcbiAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgb3BlbkltYWdlOiBmdW5jdGlvbiBvcGVuSW1hZ2Uoc3JjKSB7XG4gICAgdmFyIGltYWdlO1xuXG4gICAgaWYgKHR5cGVvZiBzcmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbWFnZSA9IHRoaXMuX2ltYWdlUmVnaXN0cnlbc3JjXTtcbiAgICB9XG5cbiAgICBpZiAoIWltYWdlKSB7XG4gICAgICBpbWFnZSA9IFBERkltYWdlLm9wZW4oc3JjLCBcIklcIi5jb25jYXQoKyt0aGlzLl9pbWFnZUNvdW50KSk7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3JjID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl9pbWFnZVJlZ2lzdHJ5W3NyY10gPSBpbWFnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW1hZ2U7XG4gIH1cbn07XG52YXIgQW5ub3RhdGlvbnNNaXhpbiA9IHtcbiAgYW5ub3RhdGU6IGZ1bmN0aW9uIGFubm90YXRlKHgsIHksIHcsIGgsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLlR5cGUgPSAnQW5ub3QnO1xuICAgIG9wdGlvbnMuUmVjdCA9IHRoaXMuX2NvbnZlcnRSZWN0KHgsIHksIHcsIGgpO1xuICAgIG9wdGlvbnMuQm9yZGVyID0gWzAsIDAsIDBdO1xuXG4gICAgaWYgKG9wdGlvbnMuU3VidHlwZSA9PT0gJ0xpbmsnICYmIHR5cGVvZiBvcHRpb25zLkYgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRpb25zLkYgPSAxIDw8IDI7IC8vIFByaW50IEFubm90YXRpb24gRmxhZ1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLlN1YnR5cGUgIT09ICdMaW5rJykge1xuICAgICAgaWYgKG9wdGlvbnMuQyA9PSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMuQyA9IHRoaXMuX25vcm1hbGl6ZUNvbG9yKG9wdGlvbnMuY29sb3IgfHwgWzAsIDAsIDBdKTtcbiAgICAgIH1cbiAgICB9IC8vIGNvbnZlcnQgY29sb3JzXG5cblxuICAgIGRlbGV0ZSBvcHRpb25zLmNvbG9yO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLkRlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLkRlc3QgPSBuZXcgU3RyaW5nKG9wdGlvbnMuRGVzdCk7XG4gICAgfSAvLyBDYXBpdGFsaXplIGtleXNcblxuXG4gICAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgIHZhciB2YWwgPSBvcHRpb25zW2tleV07XG4gICAgICBvcHRpb25zW2tleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpXSA9IHZhbDtcbiAgICB9XG5cbiAgICB2YXIgcmVmID0gdGhpcy5yZWYob3B0aW9ucyk7XG4gICAgdGhpcy5wYWdlLmFubm90YXRpb25zLnB1c2gocmVmKTtcbiAgICByZWYuZW5kKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIG5vdGU6IGZ1bmN0aW9uIG5vdGUoeCwgeSwgdywgaCwgY29udGVudHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDoge307XG4gICAgb3B0aW9ucy5TdWJ0eXBlID0gJ1RleHQnO1xuICAgIG9wdGlvbnMuQ29udGVudHMgPSBuZXcgU3RyaW5nKGNvbnRlbnRzKTtcbiAgICBvcHRpb25zLk5hbWUgPSAnQ29tbWVudCc7XG5cbiAgICBpZiAob3B0aW9ucy5jb2xvciA9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLmNvbG9yID0gWzI0MywgMjIzLCA5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYW5ub3RhdGUoeCwgeSwgdywgaCwgb3B0aW9ucyk7XG4gIH0sXG4gIGdvVG86IGZ1bmN0aW9uIGdvVG8oeCwgeSwgdywgaCwgbmFtZSkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB7fTtcbiAgICBvcHRpb25zLlN1YnR5cGUgPSAnTGluayc7XG4gICAgb3B0aW9ucy5BID0gdGhpcy5yZWYoe1xuICAgICAgUzogJ0dvVG8nLFxuICAgICAgRDogbmV3IFN0cmluZyhuYW1lKVxuICAgIH0pO1xuICAgIG9wdGlvbnMuQS5lbmQoKTtcbiAgICByZXR1cm4gdGhpcy5hbm5vdGF0ZSh4LCB5LCB3LCBoLCBvcHRpb25zKTtcbiAgfSxcbiAgbGluazogZnVuY3Rpb24gbGluayh4LCB5LCB3LCBoLCB1cmwpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDoge307XG4gICAgb3B0aW9ucy5TdWJ0eXBlID0gJ0xpbmsnO1xuXG4gICAgaWYgKHR5cGVvZiB1cmwgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBMaW5rIHRvIGEgcGFnZSBpbiB0aGUgZG9jdW1lbnQgKHRoZSBwYWdlIG11c3QgYWxyZWFkeSBleGlzdClcbiAgICAgIHZhciBwYWdlcyA9IHRoaXMuX3Jvb3QuZGF0YS5QYWdlcy5kYXRhO1xuXG4gICAgICBpZiAodXJsID49IDAgJiYgdXJsIDwgcGFnZXMuS2lkcy5sZW5ndGgpIHtcbiAgICAgICAgb3B0aW9ucy5BID0gdGhpcy5yZWYoe1xuICAgICAgICAgIFM6ICdHb1RvJyxcbiAgICAgICAgICBEOiBbcGFnZXMuS2lkc1t1cmxdLCAnWFlaJywgbnVsbCwgbnVsbCwgbnVsbF1cbiAgICAgICAgfSk7XG4gICAgICAgIG9wdGlvbnMuQS5lbmQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBkb2N1bWVudCBoYXMgbm8gcGFnZSBcIi5jb25jYXQodXJsKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpbmsgdG8gYW4gZXh0ZXJuYWwgdXJsXG4gICAgICBvcHRpb25zLkEgPSB0aGlzLnJlZih7XG4gICAgICAgIFM6ICdVUkknLFxuICAgICAgICBVUkk6IG5ldyBTdHJpbmcodXJsKVxuICAgICAgfSk7XG4gICAgICBvcHRpb25zLkEuZW5kKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYW5ub3RhdGUoeCwgeSwgdywgaCwgb3B0aW9ucyk7XG4gIH0sXG4gIF9tYXJrdXA6IGZ1bmN0aW9uIF9tYXJrdXAoeCwgeSwgdywgaCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB7fTtcblxuICAgIHZhciBfdGhpcyRfY29udmVydFJlY3QgPSB0aGlzLl9jb252ZXJ0UmVjdCh4LCB5LCB3LCBoKSxcbiAgICAgICAgX3RoaXMkX2NvbnZlcnRSZWN0MiA9IF9zbGljZWRUb0FycmF5KF90aGlzJF9jb252ZXJ0UmVjdCwgNCksXG4gICAgICAgIHgxID0gX3RoaXMkX2NvbnZlcnRSZWN0MlswXSxcbiAgICAgICAgeTEgPSBfdGhpcyRfY29udmVydFJlY3QyWzFdLFxuICAgICAgICB4MiA9IF90aGlzJF9jb252ZXJ0UmVjdDJbMl0sXG4gICAgICAgIHkyID0gX3RoaXMkX2NvbnZlcnRSZWN0MlszXTtcblxuICAgIG9wdGlvbnMuUXVhZFBvaW50cyA9IFt4MSwgeTIsIHgyLCB5MiwgeDEsIHkxLCB4MiwgeTFdO1xuICAgIG9wdGlvbnMuQ29udGVudHMgPSBuZXcgU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuYW5ub3RhdGUoeCwgeSwgdywgaCwgb3B0aW9ucyk7XG4gIH0sXG4gIGhpZ2hsaWdodDogZnVuY3Rpb24gaGlnaGxpZ2h0KHgsIHksIHcsIGgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge307XG4gICAgb3B0aW9ucy5TdWJ0eXBlID0gJ0hpZ2hsaWdodCc7XG5cbiAgICBpZiAob3B0aW9ucy5jb2xvciA9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLmNvbG9yID0gWzI0MSwgMjM4LCAxNDhdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tYXJrdXAoeCwgeSwgdywgaCwgb3B0aW9ucyk7XG4gIH0sXG4gIHVuZGVybGluZTogZnVuY3Rpb24gdW5kZXJsaW5lKHgsIHksIHcsIGgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge307XG4gICAgb3B0aW9ucy5TdWJ0eXBlID0gJ1VuZGVybGluZSc7XG4gICAgcmV0dXJuIHRoaXMuX21hcmt1cCh4LCB5LCB3LCBoLCBvcHRpb25zKTtcbiAgfSxcbiAgc3RyaWtlOiBmdW5jdGlvbiBzdHJpa2UoeCwgeSwgdywgaCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB7fTtcbiAgICBvcHRpb25zLlN1YnR5cGUgPSAnU3RyaWtlT3V0JztcbiAgICByZXR1cm4gdGhpcy5fbWFya3VwKHgsIHksIHcsIGgsIG9wdGlvbnMpO1xuICB9LFxuICBsaW5lQW5ub3RhdGlvbjogZnVuY3Rpb24gbGluZUFubm90YXRpb24oeDEsIHkxLCB4MiwgeTIpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge307XG4gICAgb3B0aW9ucy5TdWJ0eXBlID0gJ0xpbmUnO1xuICAgIG9wdGlvbnMuQ29udGVudHMgPSBuZXcgU3RyaW5nKCk7XG4gICAgb3B0aW9ucy5MID0gW3gxLCB0aGlzLnBhZ2UuaGVpZ2h0IC0geTEsIHgyLCB0aGlzLnBhZ2UuaGVpZ2h0IC0geTJdO1xuICAgIHJldHVybiB0aGlzLmFubm90YXRlKHgxLCB5MSwgeDIsIHkyLCBvcHRpb25zKTtcbiAgfSxcbiAgcmVjdEFubm90YXRpb246IGZ1bmN0aW9uIHJlY3RBbm5vdGF0aW9uKHgsIHksIHcsIGgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge307XG4gICAgb3B0aW9ucy5TdWJ0eXBlID0gJ1NxdWFyZSc7XG4gICAgb3B0aW9ucy5Db250ZW50cyA9IG5ldyBTdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5hbm5vdGF0ZSh4LCB5LCB3LCBoLCBvcHRpb25zKTtcbiAgfSxcbiAgZWxsaXBzZUFubm90YXRpb246IGZ1bmN0aW9uIGVsbGlwc2VBbm5vdGF0aW9uKHgsIHksIHcsIGgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge307XG4gICAgb3B0aW9ucy5TdWJ0eXBlID0gJ0NpcmNsZSc7XG4gICAgb3B0aW9ucy5Db250ZW50cyA9IG5ldyBTdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5hbm5vdGF0ZSh4LCB5LCB3LCBoLCBvcHRpb25zKTtcbiAgfSxcbiAgdGV4dEFubm90YXRpb246IGZ1bmN0aW9uIHRleHRBbm5vdGF0aW9uKHgsIHksIHcsIGgsIHRleHQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDoge307XG4gICAgb3B0aW9ucy5TdWJ0eXBlID0gJ0ZyZWVUZXh0JztcbiAgICBvcHRpb25zLkNvbnRlbnRzID0gbmV3IFN0cmluZyh0ZXh0KTtcbiAgICBvcHRpb25zLkRBID0gbmV3IFN0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmFubm90YXRlKHgsIHksIHcsIGgsIG9wdGlvbnMpO1xuICB9LFxuICBmaWxlQW5ub3RhdGlvbjogZnVuY3Rpb24gZmlsZUFubm90YXRpb24oeCwgeSwgdywgaCkge1xuICAgIHZhciBmaWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB7fTtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDoge307IC8vIGNyZWF0ZSBoaWRkZW4gZmlsZVxuXG4gICAgdmFyIGZpbGVzcGVjID0gdGhpcy5maWxlKGZpbGUuc3JjLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGhpZGRlbjogdHJ1ZVxuICAgIH0sIGZpbGUpKTtcbiAgICBvcHRpb25zLlN1YnR5cGUgPSAnRmlsZUF0dGFjaG1lbnQnO1xuICAgIG9wdGlvbnMuRlMgPSBmaWxlc3BlYzsgLy8gYWRkIGRlc2NyaXB0aW9uIGZyb20gZmlsZXNwZWMgdW5sZXNzIGRlc2NyaXB0aW9uIChDb250ZW50cykgaGFzIGFscmVhZHkgYmVlbiBzZXRcblxuICAgIGlmIChvcHRpb25zLkNvbnRlbnRzKSB7XG4gICAgICBvcHRpb25zLkNvbnRlbnRzID0gbmV3IFN0cmluZyhvcHRpb25zLkNvbnRlbnRzKTtcbiAgICB9IGVsc2UgaWYgKGZpbGVzcGVjLmRhdGEuRGVzYykge1xuICAgICAgb3B0aW9ucy5Db250ZW50cyA9IGZpbGVzcGVjLmRhdGEuRGVzYztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hbm5vdGF0ZSh4LCB5LCB3LCBoLCBvcHRpb25zKTtcbiAgfSxcbiAgX2NvbnZlcnRSZWN0OiBmdW5jdGlvbiBfY29udmVydFJlY3QoeDEsIHkxLCB3LCBoKSB7XG4gICAgLy8gZmxpcCB5MSBhbmQgeTJcbiAgICB2YXIgeTIgPSB5MTtcbiAgICB5MSArPSBoOyAvLyBtYWtlIHgyXG5cbiAgICB2YXIgeDIgPSB4MSArIHc7IC8vIGFwcGx5IGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gbWF0cml4IHRvIHBvaW50c1xuXG4gICAgdmFyIF90aGlzJF9jdG0gPSBfc2xpY2VkVG9BcnJheSh0aGlzLl9jdG0sIDYpLFxuICAgICAgICBtMCA9IF90aGlzJF9jdG1bMF0sXG4gICAgICAgIG0xID0gX3RoaXMkX2N0bVsxXSxcbiAgICAgICAgbTIgPSBfdGhpcyRfY3RtWzJdLFxuICAgICAgICBtMyA9IF90aGlzJF9jdG1bM10sXG4gICAgICAgIG00ID0gX3RoaXMkX2N0bVs0XSxcbiAgICAgICAgbTUgPSBfdGhpcyRfY3RtWzVdO1xuXG4gICAgeDEgPSBtMCAqIHgxICsgbTIgKiB5MSArIG00O1xuICAgIHkxID0gbTEgKiB4MSArIG0zICogeTEgKyBtNTtcbiAgICB4MiA9IG0wICogeDIgKyBtMiAqIHkyICsgbTQ7XG4gICAgeTIgPSBtMSAqIHgyICsgbTMgKiB5MiArIG01O1xuICAgIHJldHVybiBbeDEsIHkxLCB4MiwgeTJdO1xuICB9XG59O1xuXG52YXIgUERGT3V0bGluZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBERk91dGxpbmUoZG9jdW1lbnQsIHBhcmVudCwgdGl0bGUsIGRlc3QpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge1xuICAgICAgZXhwYW5kZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZPdXRsaW5lKTtcblxuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMub3V0bGluZURhdGEgPSB7fTtcblxuICAgIGlmIChkZXN0ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm91dGxpbmVEYXRhWydEZXN0J10gPSBbZGVzdC5kaWN0aW9uYXJ5LCAnRml0J107XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5vdXRsaW5lRGF0YVsnUGFyZW50J10gPSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRpdGxlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm91dGxpbmVEYXRhWydUaXRsZSddID0gbmV3IFN0cmluZyh0aXRsZSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaWN0aW9uYXJ5ID0gdGhpcy5kb2N1bWVudC5yZWYodGhpcy5vdXRsaW5lRGF0YSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBERk91dGxpbmUsIFt7XG4gICAga2V5OiBcImFkZEl0ZW1cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkSXRlbSh0aXRsZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICAgICAgZXhwYW5kZWQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBQREZPdXRsaW5lKHRoaXMuZG9jdW1lbnQsIHRoaXMuZGljdGlvbmFyeSwgdGl0bGUsIHRoaXMuZG9jdW1lbnQucGFnZSwgb3B0aW9ucyk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2gocmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVuZE91dGxpbmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5kT3V0bGluZSgpIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBhbmRlZCkge1xuICAgICAgICAgIHRoaXMub3V0bGluZURhdGEuQ291bnQgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaXJzdCA9IHRoaXMuY2hpbGRyZW5bMF0sXG4gICAgICAgICAgICBsYXN0ID0gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgICAgICB0aGlzLm91dGxpbmVEYXRhLkZpcnN0ID0gZmlyc3QuZGljdGlvbmFyeTtcbiAgICAgICAgdGhpcy5vdXRsaW5lRGF0YS5MYXN0ID0gbGFzdC5kaWN0aW9uYXJ5O1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgY2hpbGQub3V0bGluZURhdGEuUHJldiA9IHRoaXMuY2hpbGRyZW5baSAtIDFdLmRpY3Rpb25hcnk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGNoaWxkLm91dGxpbmVEYXRhLk5leHQgPSB0aGlzLmNoaWxkcmVuW2kgKyAxXS5kaWN0aW9uYXJ5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkLmVuZE91dGxpbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5LmVuZCgpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQREZPdXRsaW5lO1xufSgpO1xuXG52YXIgT3V0bGluZU1peGluID0ge1xuICBpbml0T3V0bGluZTogZnVuY3Rpb24gaW5pdE91dGxpbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3V0bGluZSA9IG5ldyBQREZPdXRsaW5lKHRoaXMsIG51bGwsIG51bGwsIG51bGwpO1xuICB9LFxuICBlbmRPdXRsaW5lOiBmdW5jdGlvbiBlbmRPdXRsaW5lKCkge1xuICAgIHRoaXMub3V0bGluZS5lbmRPdXRsaW5lKCk7XG5cbiAgICBpZiAodGhpcy5vdXRsaW5lLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3Jvb3QuZGF0YS5PdXRsaW5lcyA9IHRoaXMub3V0bGluZS5kaWN0aW9uYXJ5O1xuICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZGF0YS5QYWdlTW9kZSA9ICdVc2VPdXRsaW5lcyc7XG4gICAgfVxuICB9XG59O1xuLypcclxuUERGU3RydWN0dXJlQ29udGVudCAtIGEgcmVmZXJlbmNlIHRvIGEgbWFya2VkIHN0cnVjdHVyZSBjb250ZW50XHJcbkJ5IEJlbiBTY2htaWR0XHJcbiovXG5cbnZhciBQREZTdHJ1Y3R1cmVDb250ZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUERGU3RydWN0dXJlQ29udGVudChwYWdlUmVmLCBtY2lkKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERlN0cnVjdHVyZUNvbnRlbnQpO1xuXG4gICAgdGhpcy5yZWZzID0gW3tcbiAgICAgIHBhZ2VSZWY6IHBhZ2VSZWYsXG4gICAgICBtY2lkOiBtY2lkXG4gICAgfV07XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUERGU3RydWN0dXJlQ29udGVudCwgW3tcbiAgICBrZXk6IFwicHVzaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXNoKHN0cnVjdENvbnRlbnQpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHN0cnVjdENvbnRlbnQucmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnJlZnMucHVzaChyZWYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBERlN0cnVjdHVyZUNvbnRlbnQ7XG59KCk7XG5cbnZhciBQREZTdHJ1Y3R1cmVFbGVtZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUERGU3RydWN0dXJlRWxlbWVudChkb2N1bWVudCwgdHlwZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgdmFyIGNoaWxkcmVuID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBudWxsO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERlN0cnVjdHVyZUVsZW1lbnQpO1xuXG4gICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgIHRoaXMuX2F0dGFjaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9mbHVzaGVkID0gZmFsc2U7XG4gICAgdGhpcy5kaWN0aW9uYXJ5ID0gZG9jdW1lbnQucmVmKHtcbiAgICAgIC8vIFR5cGU6IFwiU3RydWN0RWxlbVwiLFxuICAgICAgUzogdHlwZVxuICAgIH0pO1xuICAgIHZhciBkYXRhID0gdGhpcy5kaWN0aW9uYXJ5LmRhdGE7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSB8fCB0aGlzLl9pc1ZhbGlkQ2hpbGQob3B0aW9ucykpIHtcbiAgICAgIGNoaWxkcmVuID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkYXRhLlQgPSBuZXcgU3RyaW5nKG9wdGlvbnMudGl0bGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sYW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZGF0YS5MYW5nID0gbmV3IFN0cmluZyhvcHRpb25zLmxhbmcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hbHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkYXRhLkFsdCA9IG5ldyBTdHJpbmcob3B0aW9ucy5hbHQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHBhbmRlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRhdGEuRSA9IG5ldyBTdHJpbmcob3B0aW9ucy5leHBhbmRlZCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmFjdHVhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRhdGEuQWN0dWFsVGV4dCA9IG5ldyBTdHJpbmcob3B0aW9ucy5hY3R1YWwpO1xuICAgIH1cblxuICAgIHRoaXMuX2NoaWxkcmVuID0gW107XG5cbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xuICAgICAgfVxuXG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuYWRkKGNoaWxkKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUERGU3RydWN0dXJlRWxlbWVudCwgW3tcbiAgICBrZXk6IFwiYWRkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZChjaGlsZCkge1xuICAgICAgaWYgKHRoaXMuX2VuZGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhZGQgY2hpbGQgdG8gYWxyZWFkeS1lbmRlZCBzdHJ1Y3R1cmUgZWxlbWVudFwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkQ2hpbGQoY2hpbGQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RydWN0dXJlIGVsZW1lbnQgY2hpbGRcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFBERlN0cnVjdHVyZUVsZW1lbnQpIHtcbiAgICAgICAgY2hpbGQuc2V0UGFyZW50KHRoaXMuZGljdGlvbmFyeSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkKSB7XG4gICAgICAgICAgY2hpbGQuc2V0QXR0YWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBQREZTdHJ1Y3R1cmVDb250ZW50KSB7XG4gICAgICAgIHRoaXMuX2FkZENvbnRlbnRUb1BhcmVudFRyZWUoY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nICYmIHRoaXMuX2F0dGFjaGVkKSB7XG4gICAgICAgIC8vIF9jb250ZW50Rm9yQ2xvc3VyZSgpIGFkZHMgdGhlIGNvbnRlbnQgdG8gdGhlIHBhcmVudCB0cmVlXG4gICAgICAgIGNoaWxkID0gdGhpcy5fY29udGVudEZvckNsb3N1cmUoY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9hZGRDb250ZW50VG9QYXJlbnRUcmVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hZGRDb250ZW50VG9QYXJlbnRUcmVlKGNvbnRlbnQpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBjb250ZW50LnJlZnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgcGFnZVJlZiA9IF9yZWYucGFnZVJlZixcbiAgICAgICAgICAgIG1jaWQgPSBfcmVmLm1jaWQ7XG5cbiAgICAgICAgdmFyIHBhZ2VTdHJ1Y3RQYXJlbnRzID0gX3RoaXMyLmRvY3VtZW50LmdldFN0cnVjdFBhcmVudFRyZWUoKS5nZXQocGFnZVJlZi5kYXRhLlN0cnVjdFBhcmVudHMpO1xuXG4gICAgICAgIHBhZ2VTdHJ1Y3RQYXJlbnRzW21jaWRdID0gX3RoaXMyLmRpY3Rpb25hcnk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0UGFyZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFBhcmVudChwYXJlbnRSZWYpIHtcbiAgICAgIGlmICh0aGlzLmRpY3Rpb25hcnkuZGF0YS5QKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cnVjdHVyZSBlbGVtZW50IGFkZGVkIHRvIG1vcmUgdGhhbiBvbmUgcGFyZW50XCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRpY3Rpb25hcnkuZGF0YS5QID0gcGFyZW50UmVmO1xuXG4gICAgICB0aGlzLl9mbHVzaCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRBdHRhY2hlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRBdHRhY2hlZCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fYXR0YWNoZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgUERGU3RydWN0dXJlRWxlbWVudCkge1xuICAgICAgICAgIGNoaWxkLnNldEF0dGFjaGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgX3RoaXMzLl9jaGlsZHJlbltpbmRleF0gPSBfdGhpczMuX2NvbnRlbnRGb3JDbG9zdXJlKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2F0dGFjaGVkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fZmx1c2goKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuZCgpIHtcbiAgICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkIGluc3RhbmNlb2YgUERGU3RydWN0dXJlRWxlbWVudDtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBjaGlsZC5lbmQoKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9lbmRlZCA9IHRydWU7XG5cbiAgICAgIHRoaXMuX2ZsdXNoKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9pc1ZhbGlkQ2hpbGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2lzVmFsaWRDaGlsZChjaGlsZCkge1xuICAgICAgcmV0dXJuIGNoaWxkIGluc3RhbmNlb2YgUERGU3RydWN0dXJlRWxlbWVudCB8fCBjaGlsZCBpbnN0YW5jZW9mIFBERlN0cnVjdHVyZUNvbnRlbnQgfHwgdHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfY29udGVudEZvckNsb3N1cmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NvbnRlbnRGb3JDbG9zdXJlKGNsb3N1cmUpIHtcbiAgICAgIHZhciBjb250ZW50ID0gdGhpcy5kb2N1bWVudC5tYXJrU3RydWN0dXJlQ29udGVudCh0aGlzLmRpY3Rpb25hcnkuZGF0YS5TKTtcbiAgICAgIGNsb3N1cmUoKTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuZW5kTWFya2VkQ29udGVudCgpO1xuXG4gICAgICB0aGlzLl9hZGRDb250ZW50VG9QYXJlbnRUcmVlKGNvbnRlbnQpO1xuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2lzRmx1c2hhYmxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9pc0ZsdXNoYWJsZSgpIHtcbiAgICAgIGlmICghdGhpcy5kaWN0aW9uYXJ5LmRhdGEuUCB8fCAhdGhpcy5fZW5kZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBQREZTdHJ1Y3R1cmVFbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkLl9pc0ZsdXNoYWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2ZsdXNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9mbHVzaCgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fZmx1c2hlZCB8fCAhdGhpcy5faXNGbHVzaGFibGUoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGljdGlvbmFyeS5kYXRhLksgPSBbXTtcblxuICAgICAgdGhpcy5fY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzNC5fZmx1c2hDaGlsZChjaGlsZCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5kaWN0aW9uYXJ5LmVuZCgpOyAvLyBmcmVlIG1lbW9yeSB1c2VkIGJ5IGNoaWxkcmVuOyB0aGUgZGljdGlvbmFyeSBpdHNlbGYgbWF5IHN0aWxsIGJlXG4gICAgICAvLyByZWZlcmVuY2VkIGJ5IGEgcGFyZW50IHN0cnVjdHVyZSBlbGVtZW50IG9yIHJvb3QsIGJ1dCB3ZSBjYW5cbiAgICAgIC8vIGF0IGxlYXN0IHRyaW0gdGhlIHRyZWUgaGVyZVxuXG4gICAgICB0aGlzLl9jaGlsZHJlbiA9IFtdO1xuICAgICAgdGhpcy5kaWN0aW9uYXJ5LmRhdGEuSyA9IG51bGw7XG4gICAgICB0aGlzLl9mbHVzaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2ZsdXNoQ2hpbGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2ZsdXNoQ2hpbGQoY2hpbGQpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBQREZTdHJ1Y3R1cmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZGljdGlvbmFyeS5kYXRhLksucHVzaChjaGlsZC5kaWN0aW9uYXJ5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgUERGU3RydWN0dXJlQ29udGVudCkge1xuICAgICAgICBjaGlsZC5yZWZzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgdmFyIHBhZ2VSZWYgPSBfcmVmMi5wYWdlUmVmLFxuICAgICAgICAgICAgICBtY2lkID0gX3JlZjIubWNpZDtcblxuICAgICAgICAgIGlmICghX3RoaXM1LmRpY3Rpb25hcnkuZGF0YS5QZykge1xuICAgICAgICAgICAgX3RoaXM1LmRpY3Rpb25hcnkuZGF0YS5QZyA9IHBhZ2VSZWY7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF90aGlzNS5kaWN0aW9uYXJ5LmRhdGEuUGcgPT09IHBhZ2VSZWYpIHtcbiAgICAgICAgICAgIF90aGlzNS5kaWN0aW9uYXJ5LmRhdGEuSy5wdXNoKG1jaWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczUuZGljdGlvbmFyeS5kYXRhLksucHVzaCh7XG4gICAgICAgICAgICAgIFR5cGU6IFwiTUNSXCIsXG4gICAgICAgICAgICAgIFBnOiBwYWdlUmVmLFxuICAgICAgICAgICAgICBNQ0lEOiBtY2lkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQREZTdHJ1Y3R1cmVFbGVtZW50O1xufSgpO1xuXG52YXIgUERGTnVtYmVyVHJlZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BERlRyZWUpIHtcbiAgX2luaGVyaXRzKFBERk51bWJlclRyZWUsIF9QREZUcmVlKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFBERk51bWJlclRyZWUpO1xuXG4gIGZ1bmN0aW9uIFBERk51bWJlclRyZWUoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERk51bWJlclRyZWUpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBERk51bWJlclRyZWUsIFt7XG4gICAga2V5OiBcIl9jb21wYXJlS2V5c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY29tcGFyZUtleXMoYSwgYikge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KGEpIC0gcGFyc2VJbnQoYik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9rZXlzTmFtZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfa2V5c05hbWUoKSB7XG4gICAgICByZXR1cm4gXCJOdW1zXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9kYXRhRm9yS2V5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kYXRhRm9yS2V5KGspIHtcbiAgICAgIHJldHVybiBwYXJzZUludChrKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUERGTnVtYmVyVHJlZTtcbn0oUERGVHJlZSk7XG5cbnZhciBNYXJraW5nc01peGluID0ge1xuICBpbml0TWFya2luZ3M6IGZ1bmN0aW9uIGluaXRNYXJraW5ncyhvcHRpb25zKSB7XG4gICAgdGhpcy5zdHJ1Y3RDaGlsZHJlbiA9IFtdO1xuXG4gICAgaWYgKG9wdGlvbnMudGFnZ2VkKSB7XG4gICAgICB0aGlzLmdldE1hcmtJbmZvRGljdGlvbmFyeSgpLmRhdGEuTWFya2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ2V0U3RydWN0VHJlZVJvb3QoKTtcbiAgICB9XG4gIH0sXG4gIG1hcmtDb250ZW50OiBmdW5jdGlvbiBtYXJrQ29udGVudCh0YWcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcblxuICAgIGlmICh0YWcgPT09ICdBcnRpZmFjdCcgfHwgb3B0aW9ucyAmJiBvcHRpb25zLm1jaWQpIHtcbiAgICAgIHZhciB0b0Nsb3NlID0gMDtcbiAgICAgIHRoaXMucGFnZS5tYXJraW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChtYXJraW5nKSB7XG4gICAgICAgIGlmICh0b0Nsb3NlIHx8IG1hcmtpbmcuc3RydWN0Q29udGVudCB8fCBtYXJraW5nLnRhZyA9PT0gJ0FydGlmYWN0Jykge1xuICAgICAgICAgIHRvQ2xvc2UrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHdoaWxlICh0b0Nsb3NlLS0pIHtcbiAgICAgICAgdGhpcy5lbmRNYXJrZWRDb250ZW50KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICB0aGlzLnBhZ2UubWFya2luZ3MucHVzaCh7XG4gICAgICAgIHRhZzogdGFnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkQ29udGVudChcIi9cIi5jb25jYXQodGFnLCBcIiBCTUNcIikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5wYWdlLm1hcmtpbmdzLnB1c2goe1xuICAgICAgdGFnOiB0YWcsXG4gICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfSk7XG4gICAgdmFyIGRpY3Rpb25hcnkgPSB7fTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5tY2lkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZGljdGlvbmFyeS5NQ0lEID0gb3B0aW9ucy5tY2lkO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdBcnRpZmFjdCcpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICBkaWN0aW9uYXJ5LlR5cGUgPSBvcHRpb25zLnR5cGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuYmJveCkpIHtcbiAgICAgICAgZGljdGlvbmFyeS5CQm94ID0gW29wdGlvbnMuYmJveFswXSwgdGhpcy5wYWdlLmhlaWdodCAtIG9wdGlvbnMuYmJveFszXSwgb3B0aW9ucy5iYm94WzJdLCB0aGlzLnBhZ2UuaGVpZ2h0IC0gb3B0aW9ucy5iYm94WzFdXTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5hdHRhY2hlZCkgJiYgb3B0aW9ucy5hdHRhY2hlZC5ldmVyeShmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbiAgICAgIH0pKSB7XG4gICAgICAgIGRpY3Rpb25hcnkuQXR0YWNoZWQgPSBvcHRpb25zLmF0dGFjaGVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdTcGFuJykge1xuICAgICAgaWYgKG9wdGlvbnMubGFuZykge1xuICAgICAgICBkaWN0aW9uYXJ5LkxhbmcgPSBuZXcgU3RyaW5nKG9wdGlvbnMubGFuZyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmFsdCkge1xuICAgICAgICBkaWN0aW9uYXJ5LkFsdCA9IG5ldyBTdHJpbmcob3B0aW9ucy5hbHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5leHBhbmRlZCkge1xuICAgICAgICBkaWN0aW9uYXJ5LkUgPSBuZXcgU3RyaW5nKG9wdGlvbnMuZXhwYW5kZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5hY3R1YWwpIHtcbiAgICAgICAgZGljdGlvbmFyeS5BY3R1YWxUZXh0ID0gbmV3IFN0cmluZyhvcHRpb25zLmFjdHVhbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hZGRDb250ZW50KFwiL1wiLmNvbmNhdCh0YWcsIFwiIFwiKS5jb25jYXQoUERGT2JqZWN0LmNvbnZlcnQoZGljdGlvbmFyeSksIFwiIEJEQ1wiKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIG1hcmtTdHJ1Y3R1cmVDb250ZW50OiBmdW5jdGlvbiBtYXJrU3RydWN0dXJlQ29udGVudCh0YWcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHBhZ2VTdHJ1Y3RQYXJlbnRzID0gdGhpcy5nZXRTdHJ1Y3RQYXJlbnRUcmVlKCkuZ2V0KHRoaXMucGFnZS5zdHJ1Y3RQYXJlbnRUcmVlS2V5KTtcbiAgICB2YXIgbWNpZCA9IHBhZ2VTdHJ1Y3RQYXJlbnRzLmxlbmd0aDtcbiAgICBwYWdlU3RydWN0UGFyZW50cy5wdXNoKG51bGwpO1xuICAgIHRoaXMubWFya0NvbnRlbnQodGFnLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICBtY2lkOiBtY2lkXG4gICAgfSkpO1xuICAgIHZhciBzdHJ1Y3RDb250ZW50ID0gbmV3IFBERlN0cnVjdHVyZUNvbnRlbnQodGhpcy5wYWdlLmRpY3Rpb25hcnksIG1jaWQpO1xuICAgIHRoaXMucGFnZS5tYXJraW5ncy5zbGljZSgtMSlbMF0uc3RydWN0Q29udGVudCA9IHN0cnVjdENvbnRlbnQ7XG4gICAgcmV0dXJuIHN0cnVjdENvbnRlbnQ7XG4gIH0sXG4gIGVuZE1hcmtlZENvbnRlbnQ6IGZ1bmN0aW9uIGVuZE1hcmtlZENvbnRlbnQoKSB7XG4gICAgdGhpcy5wYWdlLm1hcmtpbmdzLnBvcCgpO1xuICAgIHRoaXMuYWRkQ29udGVudCgnRU1DJyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHN0cnVjdDogZnVuY3Rpb24gc3RydWN0KHR5cGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIGNoaWxkcmVuID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuICAgIHJldHVybiBuZXcgUERGU3RydWN0dXJlRWxlbWVudCh0aGlzLCB0eXBlLCBvcHRpb25zLCBjaGlsZHJlbik7XG4gIH0sXG4gIGFkZFN0cnVjdHVyZTogZnVuY3Rpb24gYWRkU3RydWN0dXJlKHN0cnVjdEVsZW0pIHtcbiAgICB2YXIgc3RydWN0VHJlZVJvb3QgPSB0aGlzLmdldFN0cnVjdFRyZWVSb290KCk7XG4gICAgc3RydWN0RWxlbS5zZXRQYXJlbnQoc3RydWN0VHJlZVJvb3QpO1xuICAgIHN0cnVjdEVsZW0uc2V0QXR0YWNoZWQoKTtcbiAgICB0aGlzLnN0cnVjdENoaWxkcmVuLnB1c2goc3RydWN0RWxlbSk7XG5cbiAgICBpZiAoIXN0cnVjdFRyZWVSb290LmRhdGEuSykge1xuICAgICAgc3RydWN0VHJlZVJvb3QuZGF0YS5LID0gW107XG4gICAgfVxuXG4gICAgc3RydWN0VHJlZVJvb3QuZGF0YS5LLnB1c2goc3RydWN0RWxlbS5kaWN0aW9uYXJ5KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgaW5pdFBhZ2VNYXJraW5nczogZnVuY3Rpb24gaW5pdFBhZ2VNYXJraW5ncyhwYWdlTWFya2luZ3MpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcGFnZU1hcmtpbmdzLmZvckVhY2goZnVuY3Rpb24gKG1hcmtpbmcpIHtcbiAgICAgIGlmIChtYXJraW5nLnN0cnVjdENvbnRlbnQpIHtcbiAgICAgICAgdmFyIHN0cnVjdENvbnRlbnQgPSBtYXJraW5nLnN0cnVjdENvbnRlbnQ7XG5cbiAgICAgICAgdmFyIG5ld1N0cnVjdENvbnRlbnQgPSBfdGhpcy5tYXJrU3RydWN0dXJlQ29udGVudChtYXJraW5nLnRhZywgbWFya2luZy5vcHRpb25zKTtcblxuICAgICAgICBzdHJ1Y3RDb250ZW50LnB1c2gobmV3U3RydWN0Q29udGVudCk7XG4gICAgICAgIF90aGlzLnBhZ2UubWFya2luZ3Muc2xpY2UoLTEpWzBdLnN0cnVjdENvbnRlbnQgPSBzdHJ1Y3RDb250ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMubWFya0NvbnRlbnQobWFya2luZy50YWcsIG1hcmtpbmcub3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIGVuZFBhZ2VNYXJraW5nczogZnVuY3Rpb24gZW5kUGFnZU1hcmtpbmdzKHBhZ2UpIHtcbiAgICB2YXIgcGFnZU1hcmtpbmdzID0gcGFnZS5tYXJraW5ncztcbiAgICBwYWdlTWFya2luZ3MuZm9yRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGFnZS53cml0ZSgnRU1DJyk7XG4gICAgfSk7XG4gICAgcGFnZS5tYXJraW5ncyA9IFtdO1xuICAgIHJldHVybiBwYWdlTWFya2luZ3M7XG4gIH0sXG4gIGdldE1hcmtJbmZvRGljdGlvbmFyeTogZnVuY3Rpb24gZ2V0TWFya0luZm9EaWN0aW9uYXJ5KCkge1xuICAgIGlmICghdGhpcy5fcm9vdC5kYXRhLk1hcmtJbmZvKSB7XG4gICAgICB0aGlzLl9yb290LmRhdGEuTWFya0luZm8gPSB0aGlzLnJlZih7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Jvb3QuZGF0YS5NYXJrSW5mbztcbiAgfSxcbiAgZ2V0U3RydWN0VHJlZVJvb3Q6IGZ1bmN0aW9uIGdldFN0cnVjdFRyZWVSb290KCkge1xuICAgIGlmICghdGhpcy5fcm9vdC5kYXRhLlN0cnVjdFRyZWVSb290KSB7XG4gICAgICB0aGlzLl9yb290LmRhdGEuU3RydWN0VHJlZVJvb3QgPSB0aGlzLnJlZih7XG4gICAgICAgIFR5cGU6ICdTdHJ1Y3RUcmVlUm9vdCcsXG4gICAgICAgIFBhcmVudFRyZWU6IG5ldyBQREZOdW1iZXJUcmVlKCksXG4gICAgICAgIFBhcmVudFRyZWVOZXh0S2V5OiAwXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcm9vdC5kYXRhLlN0cnVjdFRyZWVSb290O1xuICB9LFxuICBnZXRTdHJ1Y3RQYXJlbnRUcmVlOiBmdW5jdGlvbiBnZXRTdHJ1Y3RQYXJlbnRUcmVlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cnVjdFRyZWVSb290KCkuZGF0YS5QYXJlbnRUcmVlO1xuICB9LFxuICBjcmVhdGVTdHJ1Y3RQYXJlbnRUcmVlTmV4dEtleTogZnVuY3Rpb24gY3JlYXRlU3RydWN0UGFyZW50VHJlZU5leHRLZXkoKSB7XG4gICAgLy8gaW5pdGlhbGlzZSB0aGUgTWFya0luZm8gZGljdGlvbmFyeVxuICAgIHRoaXMuZ2V0TWFya0luZm9EaWN0aW9uYXJ5KCk7XG4gICAgdmFyIHN0cnVjdFRyZWVSb290ID0gdGhpcy5nZXRTdHJ1Y3RUcmVlUm9vdCgpO1xuICAgIHZhciBrZXkgPSBzdHJ1Y3RUcmVlUm9vdC5kYXRhLlBhcmVudFRyZWVOZXh0S2V5Kys7XG4gICAgc3RydWN0VHJlZVJvb3QuZGF0YS5QYXJlbnRUcmVlLmFkZChrZXksIFtdKTtcbiAgICByZXR1cm4ga2V5O1xuICB9LFxuICBlbmRNYXJraW5nczogZnVuY3Rpb24gZW5kTWFya2luZ3MoKSB7XG4gICAgdmFyIHN0cnVjdFRyZWVSb290ID0gdGhpcy5fcm9vdC5kYXRhLlN0cnVjdFRyZWVSb290O1xuXG4gICAgaWYgKHN0cnVjdFRyZWVSb290KSB7XG4gICAgICBzdHJ1Y3RUcmVlUm9vdC5lbmQoKTtcbiAgICAgIHRoaXMuc3RydWN0Q2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoc3RydWN0RWxlbSkge1xuICAgICAgICByZXR1cm4gc3RydWN0RWxlbS5lbmQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9yb290LmRhdGEuTWFya0luZm8pIHtcbiAgICAgIHRoaXMuX3Jvb3QuZGF0YS5NYXJrSW5mby5lbmQoKTtcbiAgICB9XG4gIH1cbn07XG52YXIgRklFTERfRkxBR1MgPSB7XG4gIHJlYWRPbmx5OiAxLFxuICByZXF1aXJlZDogMixcbiAgbm9FeHBvcnQ6IDQsXG4gIG11bHRpbGluZTogMHgxMDAwLFxuICBwYXNzd29yZDogMHgyMDAwLFxuICB0b2dnbGVUb09mZkJ1dHRvbjogMHg0MDAwLFxuICByYWRpb0J1dHRvbjogMHg4MDAwLFxuICBwdXNoQnV0dG9uOiAweDEwMDAwLFxuICBjb21ibzogMHgyMDAwMCxcbiAgZWRpdDogMHg0MDAwMCxcbiAgc29ydDogMHg4MDAwMCxcbiAgbXVsdGlTZWxlY3Q6IDB4MjAwMDAwLFxuICBub1NwZWxsOiAweDQwMDAwMFxufTtcbnZhciBGSUVMRF9KVVNUSUZZID0ge1xuICBsZWZ0OiAwLFxuICBjZW50ZXI6IDEsXG4gIHJpZ2h0OiAyXG59O1xudmFyIFZBTFVFX01BUCA9IHtcbiAgdmFsdWU6ICdWJyxcbiAgZGVmYXVsdFZhbHVlOiAnRFYnXG59O1xudmFyIEZPUk1BVF9TUEVDSUFMID0ge1xuICB6aXA6ICcwJyxcbiAgemlwUGx1czQ6ICcxJyxcbiAgemlwNDogJzEnLFxuICBwaG9uZTogJzInLFxuICBzc246ICczJ1xufTtcbnZhciBGT1JNQVRfREVGQVVMVCA9IHtcbiAgbnVtYmVyOiB7XG4gICAgbkRlYzogMCxcbiAgICBzZXBDb21tYTogZmFsc2UsXG4gICAgbmVnU3R5bGU6ICdNaW51c0JsYWNrJyxcbiAgICBjdXJyZW5jeTogJycsXG4gICAgY3VycmVuY3lQcmVwZW5kOiB0cnVlXG4gIH0sXG4gIHBlcmNlbnQ6IHtcbiAgICBuRGVjOiAwLFxuICAgIHNlcENvbW1hOiBmYWxzZVxuICB9XG59O1xudmFyIEFjcm9Gb3JtTWl4aW4gPSB7XG4gIC8qKlxyXG4gICAqIE11c3QgY2FsbCBpZiBhZGRpbmcgQWNyb0Zvcm1zIHRvIGEgZG9jdW1lbnQuIE11c3QgYWxzbyBjYWxsIGZvbnQoKSBiZWZvcmVcclxuICAgKiB0aGlzIG1ldGhvZCB0byBzZXQgdGhlIGRlZmF1bHQgZm9udC5cclxuICAgKi9cbiAgaW5pdEZvcm06IGZ1bmN0aW9uIGluaXRGb3JtKCkge1xuICAgIGlmICghdGhpcy5fZm9udCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNldCBhIGZvbnQgYmVmb3JlIGNhbGxpbmcgaW5pdEZvcm0gbWV0aG9kJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fYWNyb2Zvcm0gPSB7XG4gICAgICBmb250czoge30sXG4gICAgICBkZWZhdWx0Rm9udDogdGhpcy5fZm9udC5uYW1lXG4gICAgfTtcbiAgICB0aGlzLl9hY3JvZm9ybS5mb250c1t0aGlzLl9mb250LmlkXSA9IHRoaXMuX2ZvbnQucmVmKCk7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBGaWVsZHM6IFtdLFxuICAgICAgTmVlZEFwcGVhcmFuY2VzOiB0cnVlLFxuICAgICAgREE6IG5ldyBTdHJpbmcoXCIvXCIuY29uY2F0KHRoaXMuX2ZvbnQuaWQsIFwiIDAgVGYgMCBnXCIpKSxcbiAgICAgIERSOiB7XG4gICAgICAgIEZvbnQ6IHt9XG4gICAgICB9XG4gICAgfTtcbiAgICBkYXRhLkRSLkZvbnRbdGhpcy5fZm9udC5pZF0gPSB0aGlzLl9mb250LnJlZigpO1xuICAgIHZhciBBY3JvRm9ybSA9IHRoaXMucmVmKGRhdGEpO1xuICAgIHRoaXMuX3Jvb3QuZGF0YS5BY3JvRm9ybSA9IEFjcm9Gb3JtO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIC8qKlxyXG4gICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGRvY3VtZW50LmpzXHJcbiAgICovXG4gIGVuZEFjcm9Gb3JtOiBmdW5jdGlvbiBlbmRBY3JvRm9ybSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuX3Jvb3QuZGF0YS5BY3JvRm9ybSkge1xuICAgICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLl9hY3JvZm9ybS5mb250cykubGVuZ3RoICYmICF0aGlzLl9hY3JvZm9ybS5kZWZhdWx0Rm9udCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGZvbnRzIHNwZWNpZmllZCBmb3IgUERGIGZvcm0nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZvbnREaWN0ID0gdGhpcy5fcm9vdC5kYXRhLkFjcm9Gb3JtLmRhdGEuRFIuRm9udDtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2Fjcm9mb3JtLmZvbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGZvbnREaWN0W25hbWVdID0gX3RoaXMuX2Fjcm9mb3JtLmZvbnRzW25hbWVdO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3Jvb3QuZGF0YS5BY3JvRm9ybS5kYXRhLkZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZFJlZikge1xuICAgICAgICBfdGhpcy5fZW5kQ2hpbGQoZmllbGRSZWYpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3Jvb3QuZGF0YS5BY3JvRm9ybS5lbmQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgX2VuZENoaWxkOiBmdW5jdGlvbiBfZW5kQ2hpbGQocmVmKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWYuZGF0YS5LaWRzKSkge1xuICAgICAgcmVmLmRhdGEuS2lkcy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZFJlZikge1xuICAgICAgICBfdGhpczIuX2VuZENoaWxkKGNoaWxkUmVmKTtcbiAgICAgIH0pO1xuICAgICAgcmVmLmVuZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW5kIGFkZHMgYSBmb3JtIGZpZWxkIHRvIHRoZSBkb2N1bWVudC4gRm9ybSBmaWVsZHMgYXJlIGludGVybWVkaWF0ZVxyXG4gICAqIG5vZGVzIGluIGEgUERGIGZvcm0gdGhhdCBhcmUgdXNlZCB0byBzcGVjaWZ5IGZvcm0gbmFtZSBoZWlyYXJjaHkgYW5kIGZvcm1cclxuICAgKiB2YWx1ZSBkZWZhdWx0cy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIGZpZWxkIG5hbWUgKFQgYXR0cmlidXRlIGluIGZpZWxkIGRpY3Rpb25hcnkpXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgIC0gb3RoZXIgYXR0cmlidXRlcyB0byBpbmNsdWRlIGluIGZpZWxkIGRpY3Rpb25hcnlcclxuICAgKi9cbiAgZm9ybUZpZWxkOiBmdW5jdGlvbiBmb3JtRmllbGQobmFtZSkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIHZhciBmaWVsZERpY3QgPSB0aGlzLl9maWVsZERpY3QobmFtZSwgbnVsbCwgb3B0aW9ucyk7XG5cbiAgICB2YXIgZmllbGRSZWYgPSB0aGlzLnJlZihmaWVsZERpY3QpO1xuXG4gICAgdGhpcy5fYWRkVG9QYXJlbnQoZmllbGRSZWYpO1xuXG4gICAgcmV0dXJuIGZpZWxkUmVmO1xuICB9LFxuXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW5kIGFkZHMgYSBGb3JtIEFubm90YXRpb24gdG8gdGhlIGRvY3VtZW50LiBGb3JtIGFubm90YXRpb25zIGFyZVxyXG4gICAqIGNhbGxlZCBXaWRnZXQgYW5ub3RhdGlvbnMgaW50ZXJuYWxseSB3aXRoaW4gYSBQREYgZmlsZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIGZvcm0gZmllbGQgbmFtZSAoVCBhdHRyaWJ1dGUgb2Ygd2lkZ2V0IGFubm90YXRpb25cclxuICAgKiBkaWN0aW9uYXJ5KVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICAgKiBAcGFyYW0ge251bWJlcn0gd1xyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcclxuICAgKi9cbiAgZm9ybUFubm90YXRpb246IGZ1bmN0aW9uIGZvcm1Bbm5vdGF0aW9uKG5hbWUsIHR5cGUsIHgsIHksIHcsIGgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA2ICYmIGFyZ3VtZW50c1s2XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzZdIDoge307XG5cbiAgICB2YXIgZmllbGREaWN0ID0gdGhpcy5fZmllbGREaWN0KG5hbWUsIHR5cGUsIG9wdGlvbnMpO1xuXG4gICAgZmllbGREaWN0LlN1YnR5cGUgPSAnV2lkZ2V0JztcblxuICAgIGlmIChmaWVsZERpY3QuRiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWVsZERpY3QuRiA9IDQ7IC8vIHByaW50IHRoZSBhbm5vdGF0aW9uXG4gICAgfSAvLyBBZGQgRmllbGQgYW5ub3QgdG8gcGFnZSwgYW5kIGdldCBpdCdzIHJlZlxuXG5cbiAgICB0aGlzLmFubm90YXRlKHgsIHksIHcsIGgsIGZpZWxkRGljdCk7XG4gICAgdmFyIGFubm90UmVmID0gdGhpcy5wYWdlLmFubm90YXRpb25zW3RoaXMucGFnZS5hbm5vdGF0aW9ucy5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gdGhpcy5fYWRkVG9QYXJlbnQoYW5ub3RSZWYpO1xuICB9LFxuICBmb3JtVGV4dDogZnVuY3Rpb24gZm9ybVRleHQobmFtZSwgeCwgeSwgdywgaCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB7fTtcbiAgICByZXR1cm4gdGhpcy5mb3JtQW5ub3RhdGlvbihuYW1lLCAndGV4dCcsIHgsIHksIHcsIGgsIG9wdGlvbnMpO1xuICB9LFxuICBmb3JtUHVzaEJ1dHRvbjogZnVuY3Rpb24gZm9ybVB1c2hCdXR0b24obmFtZSwgeCwgeSwgdywgaCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB7fTtcbiAgICByZXR1cm4gdGhpcy5mb3JtQW5ub3RhdGlvbihuYW1lLCAncHVzaEJ1dHRvbicsIHgsIHksIHcsIGgsIG9wdGlvbnMpO1xuICB9LFxuICBmb3JtQ29tYm86IGZ1bmN0aW9uIGZvcm1Db21ibyhuYW1lLCB4LCB5LCB3LCBoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHt9O1xuICAgIHJldHVybiB0aGlzLmZvcm1Bbm5vdGF0aW9uKG5hbWUsICdjb21ibycsIHgsIHksIHcsIGgsIG9wdGlvbnMpO1xuICB9LFxuICBmb3JtTGlzdDogZnVuY3Rpb24gZm9ybUxpc3QobmFtZSwgeCwgeSwgdywgaCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB7fTtcbiAgICByZXR1cm4gdGhpcy5mb3JtQW5ub3RhdGlvbihuYW1lLCAnbGlzdCcsIHgsIHksIHcsIGgsIG9wdGlvbnMpO1xuICB9LFxuICBmb3JtUmFkaW9CdXR0b246IGZ1bmN0aW9uIGZvcm1SYWRpb0J1dHRvbihuYW1lLCB4LCB5LCB3LCBoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHt9O1xuICAgIHJldHVybiB0aGlzLmZvcm1Bbm5vdGF0aW9uKG5hbWUsICdyYWRpb0J1dHRvbicsIHgsIHksIHcsIGgsIG9wdGlvbnMpO1xuICB9LFxuICBmb3JtQ2hlY2tib3g6IGZ1bmN0aW9uIGZvcm1DaGVja2JveChuYW1lLCB4LCB5LCB3LCBoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHt9O1xuICAgIHJldHVybiB0aGlzLmZvcm1Bbm5vdGF0aW9uKG5hbWUsICdjaGVja2JveCcsIHgsIHksIHcsIGgsIG9wdGlvbnMpO1xuICB9LFxuICBfYWRkVG9QYXJlbnQ6IGZ1bmN0aW9uIF9hZGRUb1BhcmVudChmaWVsZFJlZikge1xuICAgIHZhciBwYXJlbnQgPSBmaWVsZFJlZi5kYXRhLlBhcmVudDtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGlmICghcGFyZW50LmRhdGEuS2lkcykge1xuICAgICAgICBwYXJlbnQuZGF0YS5LaWRzID0gW107XG4gICAgICB9XG5cbiAgICAgIHBhcmVudC5kYXRhLktpZHMucHVzaChmaWVsZFJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jvb3QuZGF0YS5BY3JvRm9ybS5kYXRhLkZpZWxkcy5wdXNoKGZpZWxkUmVmKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgX2ZpZWxkRGljdDogZnVuY3Rpb24gX2ZpZWxkRGljdChuYW1lLCB0eXBlKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gICAgaWYgKCF0aGlzLl9hY3JvZm9ybSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGRvY3VtZW50LmluaXRGb3JtcygpIG1ldGhvZCBiZWZvcmUgYWRkaW5nIGZvcm0gZWxlbWVudHMgdG8gZG9jdW1lbnQnKTtcbiAgICB9XG5cbiAgICB2YXIgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICAgIG9wdHMgPSB0aGlzLl9yZXNvbHZlVHlwZSh0eXBlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBvcHRzID0gdGhpcy5fcmVzb2x2ZUZsYWdzKG9wdHMpO1xuICAgIG9wdHMgPSB0aGlzLl9yZXNvbHZlSnVzdGlmeShvcHRzKTtcbiAgICBvcHRzID0gdGhpcy5fcmVzb2x2ZUZvbnQob3B0cyk7XG4gICAgb3B0cyA9IHRoaXMuX3Jlc29sdmVTdHJpbmdzKG9wdHMpO1xuICAgIG9wdHMgPSB0aGlzLl9yZXNvbHZlQ29sb3JzKG9wdHMpO1xuICAgIG9wdHMgPSB0aGlzLl9yZXNvbHZlRm9ybWF0KG9wdHMpO1xuICAgIG9wdHMuVCA9IG5ldyBTdHJpbmcobmFtZSk7XG5cbiAgICBpZiAob3B0cy5wYXJlbnQpIHtcbiAgICAgIG9wdHMuUGFyZW50ID0gb3B0cy5wYXJlbnQ7XG4gICAgICBkZWxldGUgb3B0cy5wYXJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdHM7XG4gIH0sXG4gIF9yZXNvbHZlVHlwZTogZnVuY3Rpb24gX3Jlc29sdmVUeXBlKHR5cGUsIG9wdHMpIHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICBvcHRzLkZUID0gJ1R4JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwdXNoQnV0dG9uJykge1xuICAgICAgb3B0cy5GVCA9ICdCdG4nO1xuICAgICAgb3B0cy5wdXNoQnV0dG9uID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdyYWRpb0J1dHRvbicpIHtcbiAgICAgIG9wdHMuRlQgPSAnQnRuJztcbiAgICAgIG9wdHMucmFkaW9CdXR0b24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgb3B0cy5GVCA9ICdCdG4nO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbWJvJykge1xuICAgICAgb3B0cy5GVCA9ICdDaCc7XG4gICAgICBvcHRzLmNvbWJvID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsaXN0Jykge1xuICAgICAgb3B0cy5GVCA9ICdDaCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZm9ybSBhbm5vdGF0aW9uIHR5cGUgJ1wiLmNvbmNhdCh0eXBlLCBcIidcIikpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRzO1xuICB9LFxuICBfcmVzb2x2ZUZvcm1hdDogZnVuY3Rpb24gX3Jlc29sdmVGb3JtYXQob3B0cykge1xuICAgIHZhciBmID0gb3B0cy5mb3JtYXQ7XG5cbiAgICBpZiAoZiAmJiBmLnR5cGUpIHtcbiAgICAgIHZhciBmbktleXN0cm9rZTtcbiAgICAgIHZhciBmbkZvcm1hdDtcbiAgICAgIHZhciBwYXJhbXMgPSAnJztcblxuICAgICAgaWYgKEZPUk1BVF9TUEVDSUFMW2YudHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmbktleXN0cm9rZSA9IFwiQUZTcGVjaWFsX0tleXN0cm9rZVwiO1xuICAgICAgICBmbkZvcm1hdCA9IFwiQUZTcGVjaWFsX0Zvcm1hdFwiO1xuICAgICAgICBwYXJhbXMgPSBGT1JNQVRfU1BFQ0lBTFtmLnR5cGVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IGYudHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGYudHlwZS5zbGljZSgxKTtcbiAgICAgICAgZm5LZXlzdHJva2UgPSBcIkFGXCIuY29uY2F0KGZvcm1hdCwgXCJfS2V5c3Ryb2tlXCIpO1xuICAgICAgICBmbkZvcm1hdCA9IFwiQUZcIi5jb25jYXQoZm9ybWF0LCBcIl9Gb3JtYXRcIik7XG5cbiAgICAgICAgaWYgKGYudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgZm5LZXlzdHJva2UgKz0gJ0V4JztcbiAgICAgICAgICBwYXJhbXMgPSBTdHJpbmcoZi5wYXJhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSAndGltZScpIHtcbiAgICAgICAgICBwYXJhbXMgPSBTdHJpbmcoZi5wYXJhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHZhciBwID0gT2JqZWN0LmFzc2lnbih7fSwgRk9STUFUX0RFRkFVTFQubnVtYmVyLCBmKTtcbiAgICAgICAgICBwYXJhbXMgPSBTdHJpbmcoW1N0cmluZyhwLm5EZWMpLCBwLnNlcENvbW1hID8gJzAnIDogJzEnLCAnXCInICsgcC5uZWdTdHlsZSArICdcIicsICdudWxsJywgJ1wiJyArIHAuY3VycmVuY3kgKyAnXCInLCBTdHJpbmcocC5jdXJyZW5jeVByZXBlbmQpXS5qb2luKCcsJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgdmFyIF9wID0gT2JqZWN0LmFzc2lnbih7fSwgRk9STUFUX0RFRkFVTFQucGVyY2VudCwgZik7XG5cbiAgICAgICAgICBwYXJhbXMgPSBTdHJpbmcoW1N0cmluZyhfcC5uRGVjKSwgX3Auc2VwQ29tbWEgPyAnMCcgOiAnMSddLmpvaW4oJywnKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb3B0cy5BQSA9IG9wdHMuQUEgPyBvcHRzLkFBIDoge307XG4gICAgICBvcHRzLkFBLksgPSB7XG4gICAgICAgIFM6ICdKYXZhU2NyaXB0JyxcbiAgICAgICAgSlM6IG5ldyBTdHJpbmcoXCJcIi5jb25jYXQoZm5LZXlzdHJva2UsIFwiKFwiKS5jb25jYXQocGFyYW1zLCBcIik7XCIpKVxuICAgICAgfTtcbiAgICAgIG9wdHMuQUEuRiA9IHtcbiAgICAgICAgUzogJ0phdmFTY3JpcHQnLFxuICAgICAgICBKUzogbmV3IFN0cmluZyhcIlwiLmNvbmNhdChmbkZvcm1hdCwgXCIoXCIpLmNvbmNhdChwYXJhbXMsIFwiKTtcIikpXG4gICAgICB9O1xuICAgIH1cblxuICAgIGRlbGV0ZSBvcHRzLmZvcm1hdDtcbiAgICByZXR1cm4gb3B0cztcbiAgfSxcbiAgX3Jlc29sdmVDb2xvcnM6IGZ1bmN0aW9uIF9yZXNvbHZlQ29sb3JzKG9wdHMpIHtcbiAgICB2YXIgY29sb3IgPSB0aGlzLl9ub3JtYWxpemVDb2xvcihvcHRzLmJhY2tncm91bmRDb2xvcik7XG5cbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIGlmICghb3B0cy5NSykge1xuICAgICAgICBvcHRzLk1LID0ge307XG4gICAgICB9XG5cbiAgICAgIG9wdHMuTUsuQkcgPSBjb2xvcjtcbiAgICB9XG5cbiAgICBjb2xvciA9IHRoaXMuX25vcm1hbGl6ZUNvbG9yKG9wdHMuYm9yZGVyQ29sb3IpO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICBpZiAoIW9wdHMuTUspIHtcbiAgICAgICAgb3B0cy5NSyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBvcHRzLk1LLkJDID0gY29sb3I7XG4gICAgfVxuXG4gICAgZGVsZXRlIG9wdHMuYmFja2dyb3VuZENvbG9yO1xuICAgIGRlbGV0ZSBvcHRzLmJvcmRlckNvbG9yO1xuICAgIHJldHVybiBvcHRzO1xuICB9LFxuICBfcmVzb2x2ZUZsYWdzOiBmdW5jdGlvbiBfcmVzb2x2ZUZsYWdzKG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmIChGSUVMRF9GTEFHU1trZXldKSB7XG4gICAgICAgIHJlc3VsdCB8PSBGSUVMRF9GTEFHU1trZXldO1xuICAgICAgICBkZWxldGUgb3B0aW9uc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCAhPT0gMCkge1xuICAgICAgb3B0aW9ucy5GZiA9IG9wdGlvbnMuRmYgPyBvcHRpb25zLkZmIDogMDtcbiAgICAgIG9wdGlvbnMuRmYgfD0gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9LFxuICBfcmVzb2x2ZUp1c3RpZnk6IGZ1bmN0aW9uIF9yZXNvbHZlSnVzdGlmeShvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICBpZiAob3B0aW9ucy5hbGlnbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIEZJRUxEX0pVU1RJRllbb3B0aW9ucy5hbGlnbl0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJlc3VsdCA9IEZJRUxEX0pVU1RJRllbb3B0aW9ucy5hbGlnbl07XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBvcHRpb25zLmFsaWduO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQgIT09IDApIHtcbiAgICAgIG9wdGlvbnMuUSA9IHJlc3VsdDsgLy8gZGVmYXVsdFxuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9LFxuICBfcmVzb2x2ZUZvbnQ6IGZ1bmN0aW9uIF9yZXNvbHZlRm9udChvcHRpb25zKSB7XG4gICAgLy8gYWRkIGN1cnJlbnQgZm9udCB0byBkb2N1bWVudC1sZXZlbCBBY3JvRm9ybSBkaWN0IGlmIG5lY2Vzc2FyeVxuICAgIGlmICh0aGlzLl9hY3JvZm9ybS5mb250c1t0aGlzLl9mb250LmlkXSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fYWNyb2Zvcm0uZm9udHNbdGhpcy5fZm9udC5pZF0gPSB0aGlzLl9mb250LnJlZigpO1xuICAgIH0gLy8gYWRkIGN1cnJlbnQgZm9udCB0byBmaWVsZCdzIHJlc291cmNlIGRpY3QgKFJEKSBpZiBub3QgdGhlIGRlZmF1bHQgYWNyb2Zvcm0gZm9udFxuXG5cbiAgICBpZiAodGhpcy5fYWNyb2Zvcm0uZGVmYXVsdEZvbnQgIT09IHRoaXMuX2ZvbnQubmFtZSkge1xuICAgICAgb3B0aW9ucy5EUiA9IHtcbiAgICAgICAgRm9udDoge31cbiAgICAgIH07IC8vIEdldCB0aGUgZm9udFNpemUgb3B0aW9uLiBJZiBub3Qgc2V0IHVzZSBhdXRvIHNpemluZ1xuXG4gICAgICB2YXIgZm9udFNpemUgPSBvcHRpb25zLmZvbnRTaXplIHx8IDA7XG4gICAgICBvcHRpb25zLkRSLkZvbnRbdGhpcy5fZm9udC5pZF0gPSB0aGlzLl9mb250LnJlZigpO1xuICAgICAgb3B0aW9ucy5EQSA9IG5ldyBTdHJpbmcoXCIvXCIuY29uY2F0KHRoaXMuX2ZvbnQuaWQsIFwiIFwiKS5jb25jYXQoZm9udFNpemUsIFwiIFRmIDAgZ1wiKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sXG4gIF9yZXNvbHZlU3RyaW5nczogZnVuY3Rpb24gX3Jlc29sdmVTdHJpbmdzKG9wdGlvbnMpIHtcbiAgICB2YXIgc2VsZWN0ID0gW107XG5cbiAgICBmdW5jdGlvbiBhcHBlbmRDaG9pY2VzKGEpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGEubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgIGlmICh0eXBlb2YgYVtpZHhdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc2VsZWN0LnB1c2gobmV3IFN0cmluZyhhW2lkeF0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0LnB1c2goYVtpZHhdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBlbmRDaG9pY2VzKG9wdGlvbnMuT3B0KTtcblxuICAgIGlmIChvcHRpb25zLnNlbGVjdCkge1xuICAgICAgYXBwZW5kQ2hvaWNlcyhvcHRpb25zLnNlbGVjdCk7XG4gICAgICBkZWxldGUgb3B0aW9ucy5zZWxlY3Q7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdC5sZW5ndGgpIHtcbiAgICAgIG9wdGlvbnMuT3B0ID0gc2VsZWN0O1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKFZBTFVFX01BUCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAob3B0aW9uc1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3B0aW9uc1tWQUxVRV9NQVBba2V5XV0gPSBvcHRpb25zW2tleV07XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgWydWJywgJ0RWJ10uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnNba2V5XSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3B0aW9uc1trZXldID0gbmV3IFN0cmluZyhvcHRpb25zW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbnMuTUsgJiYgb3B0aW9ucy5NSy5DQSkge1xuICAgICAgb3B0aW9ucy5NSy5DQSA9IG5ldyBTdHJpbmcob3B0aW9ucy5NSy5DQSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubGFiZWwpIHtcbiAgICAgIG9wdGlvbnMuTUsgPSBvcHRpb25zLk1LID8gb3B0aW9ucy5NSyA6IHt9O1xuICAgICAgb3B0aW9ucy5NSy5DQSA9IG5ldyBTdHJpbmcob3B0aW9ucy5sYWJlbCk7XG4gICAgICBkZWxldGUgb3B0aW9ucy5sYWJlbDtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxufTtcbnZhciBBdHRhY2htZW50c01peGluID0ge1xuICAvKipcclxuICAgKiBFbWJlZCBjb250ZW50cyBvZiBgc3JjYCBpbiBQREZcclxuICAgKiBAcGFyYW0ge0J1ZmZlciB8IEFycmF5QnVmZmVyIHwgc3RyaW5nfSBzcmMgaW5wdXQgQnVmZmVyLCBBcnJheUJ1ZmZlciwgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9yIHBhdGggdG8gZmlsZVxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXHJcbiAgICogICogb3B0aW9ucy5uYW1lOiBmaWxlbmFtZSB0byBiZSBzaG93biBpbiBQREYsIHdpbGwgdXNlIGBzcmNgIGlmIG5vbmUgc2V0XHJcbiAgICogICogb3B0aW9ucy50eXBlOiBmaWxldHlwZSB0byBiZSBzaG93biBpbiBQREZcclxuICAgKiAgKiBvcHRpb25zLmRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB0byBiZSBzaG93biBpbiBQREZcclxuICAgKiAgKiBvcHRpb25zLmhpZGRlbjogaWYgdHJ1ZSwgZG8gbm90IGFkZCBhdHRhY2htZW50IHRvIEVtYmVkZGVkRmlsZXMgZGljdGlvbmFyeS4gVXNlZnVsIGZvciBmaWxlIGF0dGFjaG1lbnQgYW5ub3RhdGlvbnNcclxuICAgKiAgKiBvcHRpb25zLmNyZWF0aW9uRGF0ZTogb3ZlcnJpZGUgY3JlYXRpb24gZGF0ZVxyXG4gICAqICAqIG9wdGlvbnMubW9kaWZpZWREYXRlOiBvdmVycmlkZSBtb2RpZmllZCBkYXRlXHJcbiAgICogQHJldHVybnMgZmlsZXNwZWMgcmVmZXJlbmNlXHJcbiAgICovXG4gIGZpbGU6IGZ1bmN0aW9uIGZpbGUoc3JjKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIG9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCBzcmM7XG4gICAgdmFyIHJlZkJvZHkgPSB7XG4gICAgICBUeXBlOiAnRW1iZWRkZWRGaWxlJyxcbiAgICAgIFBhcmFtczoge31cbiAgICB9O1xuICAgIHZhciBkYXRhO1xuXG4gICAgaWYgKCFzcmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3JjIHNwZWNpZmllZCcpO1xuICAgIH1cblxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoc3JjKSkge1xuICAgICAgZGF0YSA9IHNyYztcbiAgICB9IGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoc3JjKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtYXRjaDtcblxuICAgICAgaWYgKG1hdGNoID0gL15kYXRhOiguKik7YmFzZTY0LCguKikkLy5leGVjKHNyYykpIHtcbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgcmVmQm9keS5TdWJ0eXBlID0gbWF0Y2hbMV0ucmVwbGFjZSgnLycsICcjMkYnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShtYXRjaFsyXSwgJ2Jhc2U2NCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhzcmMpO1xuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCByZWFkIGNvbnRlbnRzIG9mIGZpbGUgYXQgZmlsZXBhdGggXCIuY29uY2F0KHNyYykpO1xuICAgICAgICB9IC8vIHVwZGF0ZSBDcmVhdGlvbkRhdGUgYW5kIE1vZERhdGVcblxuXG4gICAgICAgIHZhciBfZnMkc3RhdFN5bmMgPSBmcy5zdGF0U3luYyhzcmMpLFxuICAgICAgICAgICAgYmlydGh0aW1lID0gX2ZzJHN0YXRTeW5jLmJpcnRodGltZSxcbiAgICAgICAgICAgIGN0aW1lID0gX2ZzJHN0YXRTeW5jLmN0aW1lO1xuXG4gICAgICAgIHJlZkJvZHkuUGFyYW1zLkNyZWF0aW9uRGF0ZSA9IGJpcnRodGltZTtcbiAgICAgICAgcmVmQm9keS5QYXJhbXMuTW9kRGF0ZSA9IGN0aW1lO1xuICAgICAgfVxuICAgIH0gLy8gb3ZlcnJpZGUgY3JlYXRpb24gZGF0ZSBhbmQgbW9kaWZpZWQgZGF0ZVxuXG5cbiAgICBpZiAob3B0aW9ucy5jcmVhdGlvbkRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZWZCb2R5LlBhcmFtcy5DcmVhdGlvbkRhdGUgPSBvcHRpb25zLmNyZWF0aW9uRGF0ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tb2RpZmllZERhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZWZCb2R5LlBhcmFtcy5Nb2REYXRlID0gb3B0aW9ucy5tb2RpZmllZERhdGU7XG4gICAgfSAvLyBhZGQgb3B0aW9uYWwgc3VidHlwZVxuXG5cbiAgICBpZiAob3B0aW9ucy50eXBlKSB7XG4gICAgICByZWZCb2R5LlN1YnR5cGUgPSBvcHRpb25zLnR5cGUucmVwbGFjZSgnLycsICcjMkYnKTtcbiAgICB9IC8vIGFkZCBjaGVja3N1bSBhbmQgc2l6ZSBpbmZvcm1hdGlvblxuXG5cbiAgICB2YXIgY2hlY2tzdW0gPSBfY3J5cHRvSnMuZGVmYXVsdC5NRDUoX2NyeXB0b0pzLmRlZmF1bHQubGliLldvcmRBcnJheS5jcmVhdGUobmV3IFVpbnQ4QXJyYXkoZGF0YSkpKTtcblxuICAgIHJlZkJvZHkuUGFyYW1zLkNoZWNrU3VtID0gbmV3IFN0cmluZyhjaGVja3N1bSk7XG4gICAgcmVmQm9keS5QYXJhbXMuU2l6ZSA9IGRhdGEuYnl0ZUxlbmd0aDsgLy8gc2F2ZSBzb21lIHNwYWNlIHdoZW4gZW1iZWRkaW5nIHRoZSBzYW1lIGZpbGUgYWdhaW5cbiAgICAvLyBpZiBhIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCBtZXRhZGF0YSBleGlzdHMsIHJldXNlIGl0cyByZWZlcmVuY2VcblxuICAgIHZhciByZWY7XG4gICAgaWYgKCF0aGlzLl9maWxlUmVnaXN0cnkpIHRoaXMuX2ZpbGVSZWdpc3RyeSA9IHt9O1xuICAgIHZhciBmaWxlID0gdGhpcy5fZmlsZVJlZ2lzdHJ5W29wdGlvbnMubmFtZV07XG5cbiAgICBpZiAoZmlsZSAmJiBpc0VxdWFsKHJlZkJvZHksIGZpbGUpKSB7XG4gICAgICByZWYgPSBmaWxlLnJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVmID0gdGhpcy5yZWYocmVmQm9keSk7XG4gICAgICByZWYuZW5kKGRhdGEpO1xuICAgICAgdGhpcy5fZmlsZVJlZ2lzdHJ5W29wdGlvbnMubmFtZV0gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcmVmQm9keSksIHt9LCB7XG4gICAgICAgIHJlZjogcmVmXG4gICAgICB9KTtcbiAgICB9IC8vIGFkZCBmaWxlc3BlYyBmb3IgZW1iZWRkZWQgZmlsZVxuXG5cbiAgICB2YXIgZmlsZVNwZWNCb2R5ID0ge1xuICAgICAgVHlwZTogJ0ZpbGVzcGVjJyxcbiAgICAgIEY6IG5ldyBTdHJpbmcob3B0aW9ucy5uYW1lKSxcbiAgICAgIEVGOiB7XG4gICAgICAgIEY6IHJlZlxuICAgICAgfSxcbiAgICAgIFVGOiBuZXcgU3RyaW5nKG9wdGlvbnMubmFtZSlcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMuZGVzY3JpcHRpb24pIHtcbiAgICAgIGZpbGVTcGVjQm9keS5EZXNjID0gbmV3IFN0cmluZyhvcHRpb25zLmRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICB2YXIgZmlsZXNwZWMgPSB0aGlzLnJlZihmaWxlU3BlY0JvZHkpO1xuICAgIGZpbGVzcGVjLmVuZCgpO1xuXG4gICAgaWYgKCFvcHRpb25zLmhpZGRlbikge1xuICAgICAgdGhpcy5hZGROYW1lZEVtYmVkZGVkRmlsZShvcHRpb25zLm5hbWUsIGZpbGVzcGVjKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNwZWM7XG4gIH1cbn07XG4vKiogY2hlY2sgdHdvIGVtYmVkZGVkIGZpbGUgbWV0YWRhdGEgb2JqZWN0cyBmb3IgZXF1YWxpdHkgKi9cblxuZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhLlN1YnR5cGUgPT09IGIuU3VidHlwZSAmJiBhLlBhcmFtcy5DaGVja1N1bS50b1N0cmluZygpID09PSBiLlBhcmFtcy5DaGVja1N1bS50b1N0cmluZygpICYmIGEuUGFyYW1zLlNpemUgPT09IGIuUGFyYW1zLlNpemUgJiYgYS5QYXJhbXMuQ3JlYXRpb25EYXRlID09PSBiLlBhcmFtcy5DcmVhdGlvbkRhdGUgJiYgYS5QYXJhbXMuTW9kRGF0ZSA9PT0gYi5QYXJhbXMuTW9kRGF0ZTtcbn1cblxudmFyIFBERkRvY3VtZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfc3RyZWFtJFJlYWRhYmxlKSB7XG4gIF9pbmhlcml0cyhQREZEb2N1bWVudCwgX3N0cmVhbSRSZWFkYWJsZSk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihQREZEb2N1bWVudCk7XG5cbiAgZnVuY3Rpb24gUERGRG9jdW1lbnQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERkRvY3VtZW50KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgX3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7IC8vIFBERiB2ZXJzaW9uXG5cbiAgICBzd2l0Y2ggKG9wdGlvbnMucGRmVmVyc2lvbikge1xuICAgICAgY2FzZSAnMS40JzpcbiAgICAgICAgX3RoaXMudmVyc2lvbiA9IDEuNDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJzEuNSc6XG4gICAgICAgIF90aGlzLnZlcnNpb24gPSAxLjU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICcxLjYnOlxuICAgICAgICBfdGhpcy52ZXJzaW9uID0gMS42O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnMS43JzpcbiAgICAgIGNhc2UgJzEuN2V4dDMnOlxuICAgICAgICBfdGhpcy52ZXJzaW9uID0gMS43O1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgX3RoaXMudmVyc2lvbiA9IDEuMztcbiAgICAgICAgYnJlYWs7XG4gICAgfSAvLyBXaGV0aGVyIHN0cmVhbXMgc2hvdWxkIGJlIGNvbXByZXNzZWRcblxuXG4gICAgX3RoaXMuY29tcHJlc3MgPSBfdGhpcy5vcHRpb25zLmNvbXByZXNzICE9IG51bGwgPyBfdGhpcy5vcHRpb25zLmNvbXByZXNzIDogdHJ1ZTtcbiAgICBfdGhpcy5fcGFnZUJ1ZmZlciA9IFtdO1xuICAgIF90aGlzLl9wYWdlQnVmZmVyU3RhcnQgPSAwOyAvLyBUaGUgUERGIG9iamVjdCBzdG9yZVxuXG4gICAgX3RoaXMuX29mZnNldHMgPSBbXTtcbiAgICBfdGhpcy5fd2FpdGluZyA9IDA7XG4gICAgX3RoaXMuX2VuZGVkID0gZmFsc2U7XG4gICAgX3RoaXMuX29mZnNldCA9IDA7XG5cbiAgICB2YXIgUGFnZXMgPSBfdGhpcy5yZWYoe1xuICAgICAgVHlwZTogJ1BhZ2VzJyxcbiAgICAgIENvdW50OiAwLFxuICAgICAgS2lkczogW11cbiAgICB9KTtcblxuICAgIHZhciBOYW1lcyA9IF90aGlzLnJlZih7XG4gICAgICBEZXN0czogbmV3IFBERk5hbWVUcmVlKClcbiAgICB9KTtcblxuICAgIF90aGlzLl9yb290ID0gX3RoaXMucmVmKHtcbiAgICAgIFR5cGU6ICdDYXRhbG9nJyxcbiAgICAgIFBhZ2VzOiBQYWdlcyxcbiAgICAgIE5hbWVzOiBOYW1lc1xuICAgIH0pO1xuXG4gICAgaWYgKF90aGlzLm9wdGlvbnMubGFuZykge1xuICAgICAgX3RoaXMuX3Jvb3QuZGF0YS5MYW5nID0gbmV3IFN0cmluZyhfdGhpcy5vcHRpb25zLmxhbmcpO1xuICAgIH0gLy8gVGhlIGN1cnJlbnQgcGFnZVxuXG5cbiAgICBfdGhpcy5wYWdlID0gbnVsbDsgLy8gSW5pdGlhbGl6ZSBtaXhpbnNcblxuICAgIF90aGlzLmluaXRDb2xvcigpO1xuXG4gICAgX3RoaXMuaW5pdFZlY3RvcigpO1xuXG4gICAgX3RoaXMuaW5pdEZvbnRzKG9wdGlvbnMuZm9udCk7XG5cbiAgICBfdGhpcy5pbml0VGV4dCgpO1xuXG4gICAgX3RoaXMuaW5pdEltYWdlcygpO1xuXG4gICAgX3RoaXMuaW5pdE91dGxpbmUoKTtcblxuICAgIF90aGlzLmluaXRNYXJraW5ncyhvcHRpb25zKTsgLy8gSW5pdGlhbGl6ZSB0aGUgbWV0YWRhdGFcblxuXG4gICAgX3RoaXMuaW5mbyA9IHtcbiAgICAgIFByb2R1Y2VyOiAnUERGS2l0JyxcbiAgICAgIENyZWF0b3I6ICdQREZLaXQnLFxuICAgICAgQ3JlYXRpb25EYXRlOiBuZXcgRGF0ZSgpXG4gICAgfTtcblxuICAgIGlmIChfdGhpcy5vcHRpb25zLmluZm8pIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBfdGhpcy5vcHRpb25zLmluZm8pIHtcbiAgICAgICAgdmFyIHZhbCA9IF90aGlzLm9wdGlvbnMuaW5mb1trZXldO1xuICAgICAgICBfdGhpcy5pbmZvW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKF90aGlzLm9wdGlvbnMuZGlzcGxheVRpdGxlKSB7XG4gICAgICBfdGhpcy5fcm9vdC5kYXRhLlZpZXdlclByZWZlcmVuY2VzID0gX3RoaXMucmVmKHtcbiAgICAgICAgRGlzcGxheURvY1RpdGxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IC8vIEdlbmVyYXRlIGZpbGUgSURcblxuXG4gICAgX3RoaXMuX2lkID0gUERGU2VjdXJpdHkuZ2VuZXJhdGVGaWxlSUQoX3RoaXMuaW5mbyk7IC8vIEluaXRpYWxpemUgc2VjdXJpdHkgc2V0dGluZ3NcblxuICAgIF90aGlzLl9zZWN1cml0eSA9IFBERlNlY3VyaXR5LmNyZWF0ZShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgb3B0aW9ucyk7IC8vIFdyaXRlIHRoZSBoZWFkZXJcbiAgICAvLyBQREYgdmVyc2lvblxuXG4gICAgX3RoaXMuX3dyaXRlKFwiJVBERi1cIi5jb25jYXQoX3RoaXMudmVyc2lvbikpOyAvLyA0IGJpbmFyeSBjaGFycywgYXMgcmVjb21tZW5kZWQgYnkgdGhlIHNwZWNcblxuXG4gICAgX3RoaXMuX3dyaXRlKCclXFx4RkZcXHhGRlxceEZGXFx4RkYnKTsgLy8gQWRkIHRoZSBmaXJzdCBwYWdlXG5cblxuICAgIGlmIChfdGhpcy5vcHRpb25zLmF1dG9GaXJzdFBhZ2UgIT09IGZhbHNlKSB7XG4gICAgICBfdGhpcy5hZGRQYWdlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBERkRvY3VtZW50LCBbe1xuICAgIGtleTogXCJhZGRQYWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFBhZ2Uob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgfSAvLyBlbmQgdGhlIGN1cnJlbnQgcGFnZSBpZiBuZWVkZWRcblxuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5idWZmZXJQYWdlcykge1xuICAgICAgICB0aGlzLmZsdXNoUGFnZXMoKTtcbiAgICAgIH0gLy8gY3JlYXRlIGEgcGFnZSBvYmplY3RcblxuXG4gICAgICB0aGlzLnBhZ2UgPSBuZXcgUERGUGFnZSh0aGlzLCBvcHRpb25zKTtcblxuICAgICAgdGhpcy5fcGFnZUJ1ZmZlci5wdXNoKHRoaXMucGFnZSk7IC8vIGFkZCB0aGUgcGFnZSB0byB0aGUgb2JqZWN0IHN0b3JlXG5cblxuICAgICAgdmFyIHBhZ2VzID0gdGhpcy5fcm9vdC5kYXRhLlBhZ2VzLmRhdGE7XG4gICAgICBwYWdlcy5LaWRzLnB1c2godGhpcy5wYWdlLmRpY3Rpb25hcnkpO1xuICAgICAgcGFnZXMuQ291bnQrKzsgLy8gcmVzZXQgeCBhbmQgeSBjb29yZGluYXRlc1xuXG4gICAgICB0aGlzLnggPSB0aGlzLnBhZ2UubWFyZ2lucy5sZWZ0O1xuICAgICAgdGhpcy55ID0gdGhpcy5wYWdlLm1hcmdpbnMudG9wOyAvLyBmbGlwIFBERiBjb29yZGluYXRlIHN5c3RlbSBzbyB0aGF0IHRoZSBvcmlnaW4gaXMgaW5cbiAgICAgIC8vIHRoZSB0b3AgbGVmdCByYXRoZXIgdGhhbiB0aGUgYm90dG9tIGxlZnRcblxuICAgICAgdGhpcy5fY3RtID0gWzEsIDAsIDAsIDEsIDAsIDBdO1xuICAgICAgdGhpcy50cmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIHRoaXMucGFnZS5oZWlnaHQpO1xuICAgICAgdGhpcy5lbWl0KCdwYWdlQWRkZWQnKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb250aW51ZU9uTmV3UGFnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb250aW51ZU9uTmV3UGFnZShvcHRpb25zKSB7XG4gICAgICB2YXIgcGFnZU1hcmtpbmdzID0gdGhpcy5lbmRQYWdlTWFya2luZ3ModGhpcy5wYWdlKTtcbiAgICAgIHRoaXMuYWRkUGFnZShvcHRpb25zKTtcbiAgICAgIHRoaXMuaW5pdFBhZ2VNYXJraW5ncyhwYWdlTWFya2luZ3MpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImJ1ZmZlcmVkUGFnZVJhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJ1ZmZlcmVkUGFnZVJhbmdlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IHRoaXMuX3BhZ2VCdWZmZXJTdGFydCxcbiAgICAgICAgY291bnQ6IHRoaXMuX3BhZ2VCdWZmZXIubGVuZ3RoXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzd2l0Y2hUb1BhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3dpdGNoVG9QYWdlKG4pIHtcbiAgICAgIHZhciBwYWdlO1xuXG4gICAgICBpZiAoIShwYWdlID0gdGhpcy5fcGFnZUJ1ZmZlcltuIC0gdGhpcy5fcGFnZUJ1ZmZlclN0YXJ0XSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3dpdGNoVG9QYWdlKFwiLmNvbmNhdChuLCBcIikgb3V0IG9mIGJvdW5kcywgY3VycmVudCBidWZmZXIgY292ZXJzIHBhZ2VzIFwiKS5jb25jYXQodGhpcy5fcGFnZUJ1ZmZlclN0YXJ0LCBcIiB0byBcIikuY29uY2F0KHRoaXMuX3BhZ2VCdWZmZXJTdGFydCArIHRoaXMuX3BhZ2VCdWZmZXIubGVuZ3RoIC0gMSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5wYWdlID0gcGFnZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmx1c2hQYWdlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmbHVzaFBhZ2VzKCkge1xuICAgICAgLy8gdGhpcyBsb2NhbCB2YXJpYWJsZSBleGlzdHMgc28gd2UncmUgZnV0dXJlLXByb29mIGFnYWluc3RcbiAgICAgIC8vIHJlZW50cmFudCBjYWxscyB0byBmbHVzaFBhZ2VzLlxuICAgICAgdmFyIHBhZ2VzID0gdGhpcy5fcGFnZUJ1ZmZlcjtcbiAgICAgIHRoaXMuX3BhZ2VCdWZmZXIgPSBbXTtcbiAgICAgIHRoaXMuX3BhZ2VCdWZmZXJTdGFydCArPSBwYWdlcy5sZW5ndGg7XG5cbiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihwYWdlcyksXG4gICAgICAgICAgX3N0ZXA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIHBhZ2UgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICB0aGlzLmVuZFBhZ2VNYXJraW5ncyhwYWdlKTtcbiAgICAgICAgICBwYWdlLmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZE5hbWVkRGVzdGluYXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTmFtZWREZXN0aW5hdGlvbihuYW1lKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXJncyA9IFsnWFlaJywgbnVsbCwgbnVsbCwgbnVsbF07XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdzWzBdID09PSAnWFlaJyAmJiBhcmdzWzJdICE9PSBudWxsKSB7XG4gICAgICAgIGFyZ3NbMl0gPSB0aGlzLnBhZ2UuaGVpZ2h0IC0gYXJnc1syXTtcbiAgICAgIH1cblxuICAgICAgYXJncy51bnNoaWZ0KHRoaXMucGFnZS5kaWN0aW9uYXJ5KTtcblxuICAgICAgdGhpcy5fcm9vdC5kYXRhLk5hbWVzLmRhdGEuRGVzdHMuYWRkKG5hbWUsIGFyZ3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGROYW1lZEVtYmVkZGVkRmlsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGROYW1lZEVtYmVkZGVkRmlsZShuYW1lLCByZWYpIHtcbiAgICAgIGlmICghdGhpcy5fcm9vdC5kYXRhLk5hbWVzLmRhdGEuRW1iZWRkZWRGaWxlcykge1xuICAgICAgICAvLyBkaXNhYmxpbmcgL0xpbWl0cyBmb3IgdGhpcyB0cmVlIGZpeGVzIGF0dGFjaG1lbnRzIG5vdCBzaG93aW5nIGluIEFkb2JlIFJlYWRlclxuICAgICAgICB0aGlzLl9yb290LmRhdGEuTmFtZXMuZGF0YS5FbWJlZGRlZEZpbGVzID0gbmV3IFBERk5hbWVUcmVlKHtcbiAgICAgICAgICBsaW1pdHM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyBhZGQgZmlsZXNwZWMgdG8gRW1iZWRkZWRGaWxlc1xuXG5cbiAgICAgIHRoaXMuX3Jvb3QuZGF0YS5OYW1lcy5kYXRhLkVtYmVkZGVkRmlsZXMuYWRkKG5hbWUsIHJlZik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZE5hbWVkSmF2YVNjcmlwdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGROYW1lZEphdmFTY3JpcHQobmFtZSwganMpIHtcbiAgICAgIGlmICghdGhpcy5fcm9vdC5kYXRhLk5hbWVzLmRhdGEuSmF2YVNjcmlwdCkge1xuICAgICAgICB0aGlzLl9yb290LmRhdGEuTmFtZXMuZGF0YS5KYXZhU2NyaXB0ID0gbmV3IFBERk5hbWVUcmVlKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICBKUzogbmV3IFN0cmluZyhqcyksXG4gICAgICAgIFM6ICdKYXZhU2NyaXB0J1xuICAgICAgfTtcblxuICAgICAgdGhpcy5fcm9vdC5kYXRhLk5hbWVzLmRhdGEuSmF2YVNjcmlwdC5hZGQobmFtZSwgZGF0YSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlZlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWYoZGF0YSkge1xuICAgICAgdmFyIHJlZiA9IG5ldyBQREZSZWZlcmVuY2UodGhpcywgdGhpcy5fb2Zmc2V0cy5sZW5ndGggKyAxLCBkYXRhKTtcblxuICAgICAgdGhpcy5fb2Zmc2V0cy5wdXNoKG51bGwpOyAvLyBwbGFjZWhvbGRlciBmb3IgdGhpcyBvYmplY3QncyBvZmZzZXQgb25jZSBpdCBpcyBmaW5hbGl6ZWRcblxuXG4gICAgICB0aGlzLl93YWl0aW5nKys7XG4gICAgICByZXR1cm4gcmVmO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfcmVhZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVhZCgpIHt9IC8vIGRvIG5vdGhpbmcsIGJ1dCB0aGlzIG1ldGhvZCBpcyByZXF1aXJlZCBieSBub2RlXG5cbiAgfSwge1xuICAgIGtleTogXCJfd3JpdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3dyaXRlKGRhdGEpIHtcbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhICsgJ1xcbicsICdiaW5hcnknKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wdXNoKGRhdGEpO1xuICAgICAgcmV0dXJuIHRoaXMuX29mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkQ29udGVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRDb250ZW50KGRhdGEpIHtcbiAgICAgIHRoaXMucGFnZS53cml0ZShkYXRhKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfcmVmRW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yZWZFbmQocmVmKSB7XG4gICAgICB0aGlzLl9vZmZzZXRzW3JlZi5pZCAtIDFdID0gcmVmLm9mZnNldDtcblxuICAgICAgaWYgKC0tdGhpcy5fd2FpdGluZyA9PT0gMCAmJiB0aGlzLl9lbmRlZCkge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZShmaWxlbmFtZSwgZm4pIHtcbiAgICAgIC8vIHByaW50IGEgZGVwcmVjYXRpb24gd2FybmluZyB3aXRoIGEgc3RhY2t0cmFjZVxuICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcIlBERkRvY3VtZW50I3dyaXRlIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBQREZLaXQuIFBsZWFzZSBwaXBlIHRoZSBkb2N1bWVudCBpbnRvIGEgTm9kZSBzdHJlYW0uXCIpO1xuICAgICAgY29uc29sZS53YXJuKGVyci5zdGFjayk7XG4gICAgICB0aGlzLnBpcGUoZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZW5hbWUpKTtcbiAgICAgIHRoaXMuZW5kKCk7XG4gICAgICByZXR1cm4gdGhpcy5vbmNlKCdlbmQnLCBmbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVuZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmQoKSB7XG4gICAgICB0aGlzLmZsdXNoUGFnZXMoKTtcbiAgICAgIHRoaXMuX2luZm8gPSB0aGlzLnJlZigpO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5pbmZvKSB7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLmluZm9ba2V5XTtcblxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWwgPSBuZXcgU3RyaW5nKHZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnJlZih2YWwpO1xuICAgICAgICBlbnRyeS5lbmQoKTtcbiAgICAgICAgdGhpcy5faW5mby5kYXRhW2tleV0gPSBlbnRyeTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5mby5lbmQoKTtcblxuICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl9mb250RmFtaWxpZXMpIHtcbiAgICAgICAgdmFyIGZvbnQgPSB0aGlzLl9mb250RmFtaWxpZXNbbmFtZV07XG4gICAgICAgIGZvbnQuZmluYWxpemUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbmRPdXRsaW5lKCk7XG4gICAgICB0aGlzLmVuZE1hcmtpbmdzKCk7XG5cbiAgICAgIHRoaXMuX3Jvb3QuZW5kKCk7XG5cbiAgICAgIHRoaXMuX3Jvb3QuZGF0YS5QYWdlcy5lbmQoKTtcblxuICAgICAgdGhpcy5fcm9vdC5kYXRhLk5hbWVzLmVuZCgpO1xuXG4gICAgICB0aGlzLmVuZEFjcm9Gb3JtKCk7XG5cbiAgICAgIGlmICh0aGlzLl9yb290LmRhdGEuVmlld2VyUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgdGhpcy5fcm9vdC5kYXRhLlZpZXdlclByZWZlcmVuY2VzLmVuZCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc2VjdXJpdHkpIHtcbiAgICAgICAgdGhpcy5fc2VjdXJpdHkuZW5kKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl93YWl0aW5nID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5hbGl6ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2ZpbmFsaXplXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9maW5hbGl6ZSgpIHtcbiAgICAgIC8vIGdlbmVyYXRlIHhyZWZcbiAgICAgIHZhciB4UmVmT2Zmc2V0ID0gdGhpcy5fb2Zmc2V0O1xuXG4gICAgICB0aGlzLl93cml0ZSgneHJlZicpO1xuXG4gICAgICB0aGlzLl93cml0ZShcIjAgXCIuY29uY2F0KHRoaXMuX29mZnNldHMubGVuZ3RoICsgMSkpO1xuXG4gICAgICB0aGlzLl93cml0ZSgnMDAwMDAwMDAwMCA2NTUzNSBmICcpO1xuXG4gICAgICB2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX29mZnNldHMpLFxuICAgICAgICAgIF9zdGVwMjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaXRlcmF0b3IyLnMoKTsgIShfc3RlcDIgPSBfaXRlcmF0b3IyLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gX3N0ZXAyLnZhbHVlO1xuICAgICAgICAgIG9mZnNldCA9IFwiMDAwMDAwMDAwMFwiLmNvbmNhdChvZmZzZXQpLnNsaWNlKC0xMCk7XG5cbiAgICAgICAgICB0aGlzLl93cml0ZShvZmZzZXQgKyAnIDAwMDAwIG4gJyk7XG4gICAgICAgIH0gLy8gdHJhaWxlclxuXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yMi5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IyLmYoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRyYWlsZXIgPSB7XG4gICAgICAgIFNpemU6IHRoaXMuX29mZnNldHMubGVuZ3RoICsgMSxcbiAgICAgICAgUm9vdDogdGhpcy5fcm9vdCxcbiAgICAgICAgSW5mbzogdGhpcy5faW5mbyxcbiAgICAgICAgSUQ6IFt0aGlzLl9pZCwgdGhpcy5faWRdXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5fc2VjdXJpdHkpIHtcbiAgICAgICAgdHJhaWxlci5FbmNyeXB0ID0gdGhpcy5fc2VjdXJpdHkuZGljdGlvbmFyeTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fd3JpdGUoJ3RyYWlsZXInKTtcblxuICAgICAgdGhpcy5fd3JpdGUoUERGT2JqZWN0LmNvbnZlcnQodHJhaWxlcikpO1xuXG4gICAgICB0aGlzLl93cml0ZSgnc3RhcnR4cmVmJyk7XG5cbiAgICAgIHRoaXMuX3dyaXRlKFwiXCIuY29uY2F0KHhSZWZPZmZzZXQpKTtcblxuICAgICAgdGhpcy5fd3JpdGUoJyUlRU9GJyk7IC8vIGVuZCB0aGUgc3RyZWFtXG5cblxuICAgICAgcmV0dXJuIHRoaXMucHVzaChudWxsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gJ1tvYmplY3QgUERGRG9jdW1lbnRdJztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUERGRG9jdW1lbnQ7XG59KF9zdHJlYW0uZGVmYXVsdC5SZWFkYWJsZSk7XG5cbnZhciBtaXhpbiA9IGZ1bmN0aW9uIG1peGluKG1ldGhvZHMpIHtcbiAgT2JqZWN0LmFzc2lnbihQREZEb2N1bWVudC5wcm90b3R5cGUsIG1ldGhvZHMpO1xufTtcblxubWl4aW4oQ29sb3JNaXhpbik7XG5taXhpbihWZWN0b3JNaXhpbik7XG5taXhpbihGb250c01peGluKTtcbm1peGluKFRleHRNaXhpbik7XG5taXhpbihJbWFnZXNNaXhpbik7XG5taXhpbihBbm5vdGF0aW9uc01peGluKTtcbm1peGluKE91dGxpbmVNaXhpbik7XG5taXhpbihNYXJraW5nc01peGluKTtcbm1peGluKEFjcm9Gb3JtTWl4aW4pO1xubWl4aW4oQXR0YWNobWVudHNNaXhpbik7XG5QREZEb2N1bWVudC5MaW5lV3JhcHBlciA9IExpbmVXcmFwcGVyO1xudmFyIF9kZWZhdWx0ID0gUERGRG9jdW1lbnQ7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDc4MTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcwNDIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY5OTIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0NzIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI5OTApO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg5MjcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMxMDUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDUwMzUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQzNDUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcxNzQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI4NDYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ3MzEpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcyMDkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDYzMTkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg4NjcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc3ODkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM3MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDkzNjgpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ0ODMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNTYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM0NjIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY3OCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzQ2Mik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzgyNCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAyMSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjk3NCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAxNik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oOTEzNSk7XG5cbnZhciBpbmZsYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMTEpO1xuXG52YXIgX3JlcXVpcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3NTMpLFxuICAgIHN3YXAzMkxFID0gX3JlcXVpcmUuc3dhcDMyTEU7IC8vIFNoaWZ0IHNpemUgZm9yIGdldHRpbmcgdGhlIGluZGV4LTEgdGFibGUgb2Zmc2V0LlxuXG5cbnZhciBTSElGVF8xID0gNiArIDU7IC8vIFNoaWZ0IHNpemUgZm9yIGdldHRpbmcgdGhlIGluZGV4LTIgdGFibGUgb2Zmc2V0LlxuXG52YXIgU0hJRlRfMiA9IDU7IC8vIERpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIHNoaWZ0IHNpemVzLFxuLy8gZm9yIGdldHRpbmcgYW4gaW5kZXgtMSBvZmZzZXQgZnJvbSBhbiBpbmRleC0yIG9mZnNldC4gNj0xMS01XG5cbnZhciBTSElGVF8xXzIgPSBTSElGVF8xIC0gU0hJRlRfMjsgLy8gTnVtYmVyIG9mIGluZGV4LTEgZW50cmllcyBmb3IgdGhlIEJNUC4gMzI9MHgyMFxuLy8gVGhpcyBwYXJ0IG9mIHRoZSBpbmRleC0xIHRhYmxlIGlzIG9taXR0ZWQgZnJvbSB0aGUgc2VyaWFsaXplZCBmb3JtLlxuXG52YXIgT01JVFRFRF9CTVBfSU5ERVhfMV9MRU5HVEggPSAweDEwMDAwID4+IFNISUZUXzE7IC8vIE51bWJlciBvZiBlbnRyaWVzIGluIGFuIGluZGV4LTIgYmxvY2suIDY0PTB4NDBcblxudmFyIElOREVYXzJfQkxPQ0tfTEVOR1RIID0gMSA8PCBTSElGVF8xXzI7IC8vIE1hc2sgZm9yIGdldHRpbmcgdGhlIGxvd2VyIGJpdHMgZm9yIHRoZSBpbi1pbmRleC0yLWJsb2NrIG9mZnNldC4gKi9cblxudmFyIElOREVYXzJfTUFTSyA9IElOREVYXzJfQkxPQ0tfTEVOR1RIIC0gMTsgLy8gU2hpZnQgc2l6ZSBmb3Igc2hpZnRpbmcgbGVmdCB0aGUgaW5kZXggYXJyYXkgdmFsdWVzLlxuLy8gSW5jcmVhc2VzIHBvc3NpYmxlIGRhdGEgc2l6ZSB3aXRoIDE2LWJpdCBpbmRleCB2YWx1ZXMgYXQgdGhlIGNvc3Rcbi8vIG9mIGNvbXBhY3RhYmlsaXR5LlxuLy8gVGhpcyByZXF1aXJlcyBkYXRhIGJsb2NrcyB0byBiZSBhbGlnbmVkIGJ5IERBVEFfR1JBTlVMQVJJVFkuXG5cbnZhciBJTkRFWF9TSElGVCA9IDI7IC8vIE51bWJlciBvZiBlbnRyaWVzIGluIGEgZGF0YSBibG9jay4gMzI9MHgyMFxuXG52YXIgREFUQV9CTE9DS19MRU5HVEggPSAxIDw8IFNISUZUXzI7IC8vIE1hc2sgZm9yIGdldHRpbmcgdGhlIGxvd2VyIGJpdHMgZm9yIHRoZSBpbi1kYXRhLWJsb2NrIG9mZnNldC5cblxudmFyIERBVEFfTUFTSyA9IERBVEFfQkxPQ0tfTEVOR1RIIC0gMTsgLy8gVGhlIHBhcnQgb2YgdGhlIGluZGV4LTIgdGFibGUgZm9yIFUrRDgwMC4uVStEQkZGIHN0b3JlcyB2YWx1ZXMgZm9yXG4vLyBsZWFkIHN1cnJvZ2F0ZSBjb2RlIF91bml0c18gbm90IGNvZGUgX3BvaW50c18uXG4vLyBWYWx1ZXMgZm9yIGxlYWQgc3Vycm9nYXRlIGNvZGUgX3BvaW50c18gYXJlIGluZGV4ZWQgd2l0aCB0aGlzIHBvcnRpb24gb2YgdGhlIHRhYmxlLlxuLy8gTGVuZ3RoPTMyPTB4MjA9MHg0MDA+PlNISUZUXzIuIChUaGVyZSBhcmUgMTAyND0weDQwMCBsZWFkIHN1cnJvZ2F0ZXMuKVxuXG52YXIgTFNDUF9JTkRFWF8yX09GRlNFVCA9IDB4MTAwMDAgPj4gU0hJRlRfMjtcbnZhciBMU0NQX0lOREVYXzJfTEVOR1RIID0gMHg0MDAgPj4gU0hJRlRfMjsgLy8gQ291bnQgdGhlIGxlbmd0aHMgb2YgYm90aCBCTVAgcGllY2VzLiAyMDgwPTB4ODIwXG5cbnZhciBJTkRFWF8yX0JNUF9MRU5HVEggPSBMU0NQX0lOREVYXzJfT0ZGU0VUICsgTFNDUF9JTkRFWF8yX0xFTkdUSDsgLy8gVGhlIDItYnl0ZSBVVEYtOCB2ZXJzaW9uIG9mIHRoZSBpbmRleC0yIHRhYmxlIGZvbGxvd3MgYXQgb2Zmc2V0IDIwODA9MHg4MjAuXG4vLyBMZW5ndGggMzI9MHgyMCBmb3IgbGVhZCBieXRlcyBDMC4uREYsIHJlZ2FyZGxlc3Mgb2YgU0hJRlRfMi5cblxudmFyIFVURjhfMkJfSU5ERVhfMl9PRkZTRVQgPSBJTkRFWF8yX0JNUF9MRU5HVEg7XG52YXIgVVRGOF8yQl9JTkRFWF8yX0xFTkdUSCA9IDB4ODAwID4+IDY7IC8vIFUrMDgwMCBpcyB0aGUgZmlyc3QgY29kZSBwb2ludCBhZnRlciAyLWJ5dGUgVVRGLThcbi8vIFRoZSBpbmRleC0xIHRhYmxlLCBvbmx5IHVzZWQgZm9yIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMsIGF0IG9mZnNldCAyMTEyPTB4ODQwLlxuLy8gVmFyaWFibGUgbGVuZ3RoLCBmb3IgY29kZSBwb2ludHMgdXAgdG8gaGlnaFN0YXJ0LCB3aGVyZSB0aGUgbGFzdCBzaW5nbGUtdmFsdWUgcmFuZ2Ugc3RhcnRzLlxuLy8gTWF4aW11bSBsZW5ndGggNTEyPTB4MjAwPTB4MTAwMDAwPj5TSElGVF8xLlxuLy8gKEZvciAweDEwMDAwMCBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzIFUrMTAwMDAuLlUrMTBmZmZmLilcbi8vXG4vLyBUaGUgcGFydCBvZiB0aGUgaW5kZXgtMiB0YWJsZSBmb3Igc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50cyBzdGFydHNcbi8vIGFmdGVyIHRoaXMgaW5kZXgtMSB0YWJsZS5cbi8vXG4vLyBCb3RoIHRoZSBpbmRleC0xIHRhYmxlIGFuZCB0aGUgZm9sbG93aW5nIHBhcnQgb2YgdGhlIGluZGV4LTIgdGFibGVcbi8vIGFyZSBvbWl0dGVkIGNvbXBsZXRlbHkgaWYgdGhlcmUgaXMgb25seSBCTVAgZGF0YS5cblxudmFyIElOREVYXzFfT0ZGU0VUID0gVVRGOF8yQl9JTkRFWF8yX09GRlNFVCArIFVURjhfMkJfSU5ERVhfMl9MRU5HVEg7IC8vIFRoZSBhbGlnbm1lbnQgc2l6ZSBvZiBhIGRhdGEgYmxvY2suIEFsc28gdGhlIGdyYW51bGFyaXR5IGZvciBjb21wYWN0aW9uLlxuXG52YXIgREFUQV9HUkFOVUxBUklUWSA9IDEgPDwgSU5ERVhfU0hJRlQ7XG5cbnZhciBVbmljb2RlVHJpZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFVuaWNvZGVUcmllKGRhdGEpIHtcbiAgICB2YXIgaXNCdWZmZXIgPSB0eXBlb2YgZGF0YS5yZWFkVUludDMyQkUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRhdGEuc2xpY2UgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaXNCdWZmZXIgfHwgZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIC8vIHJlYWQgYmluYXJ5IGZvcm1hdFxuICAgICAgdmFyIHVuY29tcHJlc3NlZExlbmd0aDtcblxuICAgICAgaWYgKGlzQnVmZmVyKSB7XG4gICAgICAgIHRoaXMuaGlnaFN0YXJ0ID0gZGF0YS5yZWFkVUludDMyTEUoMCk7XG4gICAgICAgIHRoaXMuZXJyb3JWYWx1ZSA9IGRhdGEucmVhZFVJbnQzMkxFKDQpO1xuICAgICAgICB1bmNvbXByZXNzZWRMZW5ndGggPSBkYXRhLnJlYWRVSW50MzJMRSg4KTtcbiAgICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMTIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZpZXcgPSBuZXcgRGF0YVZpZXcoZGF0YS5idWZmZXIpO1xuICAgICAgICB0aGlzLmhpZ2hTdGFydCA9IHZpZXcuZ2V0VWludDMyKDAsIHRydWUpO1xuICAgICAgICB0aGlzLmVycm9yVmFsdWUgPSB2aWV3LmdldFVpbnQzMig0LCB0cnVlKTtcbiAgICAgICAgdW5jb21wcmVzc2VkTGVuZ3RoID0gdmlldy5nZXRVaW50MzIoOCwgdHJ1ZSk7XG4gICAgICAgIGRhdGEgPSBkYXRhLnN1YmFycmF5KDEyKTtcbiAgICAgIH0gLy8gZG91YmxlIGluZmxhdGUgdGhlIGFjdHVhbCB0cmllIGRhdGFcblxuXG4gICAgICBkYXRhID0gaW5mbGF0ZShkYXRhLCBuZXcgVWludDhBcnJheSh1bmNvbXByZXNzZWRMZW5ndGgpKTtcbiAgICAgIGRhdGEgPSBpbmZsYXRlKGRhdGEsIG5ldyBVaW50OEFycmF5KHVuY29tcHJlc3NlZExlbmd0aCkpOyAvLyBzd2FwIGJ5dGVzIGZyb20gbGl0dGxlLWVuZGlhblxuXG4gICAgICBzd2FwMzJMRShkYXRhKTtcbiAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50MzJBcnJheShkYXRhLmJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHByZS1wYXJzZWQgZGF0YVxuICAgICAgdmFyIF9kYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZGF0YSA9IF9kYXRhLmRhdGE7XG4gICAgICB0aGlzLmhpZ2hTdGFydCA9IF9kYXRhLmhpZ2hTdGFydDtcbiAgICAgIHRoaXMuZXJyb3JWYWx1ZSA9IF9kYXRhLmVycm9yVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIF9wcm90byA9IFVuaWNvZGVUcmllLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KGNvZGVQb2ludCkge1xuICAgIHZhciBpbmRleDtcblxuICAgIGlmIChjb2RlUG9pbnQgPCAwIHx8IGNvZGVQb2ludCA+IDB4MTBmZmZmKSB7XG4gICAgICByZXR1cm4gdGhpcy5lcnJvclZhbHVlO1xuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPCAweGQ4MDAgfHwgY29kZVBvaW50ID4gMHhkYmZmICYmIGNvZGVQb2ludCA8PSAweGZmZmYpIHtcbiAgICAgIC8vIE9yZGluYXJ5IEJNUCBjb2RlIHBvaW50LCBleGNsdWRpbmcgbGVhZGluZyBzdXJyb2dhdGVzLlxuICAgICAgLy8gQk1QIHVzZXMgYSBzaW5nbGUgbGV2ZWwgbG9va3VwLiAgQk1QIGluZGV4IHN0YXJ0cyBhdCBvZmZzZXQgMCBpbiB0aGUgaW5kZXguXG4gICAgICAvLyBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgaW5kZXggYXJyYXkgaXRzZWxmLlxuICAgICAgaW5kZXggPSAodGhpcy5kYXRhW2NvZGVQb2ludCA+PiBTSElGVF8yXSA8PCBJTkRFWF9TSElGVCkgKyAoY29kZVBvaW50ICYgREFUQV9NQVNLKTtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFbaW5kZXhdO1xuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPD0gMHhmZmZmKSB7XG4gICAgICAvLyBMZWFkIFN1cnJvZ2F0ZSBDb2RlIFBvaW50LiAgQSBTZXBhcmF0ZSBpbmRleCBzZWN0aW9uIGlzIHN0b3JlZCBmb3JcbiAgICAgIC8vIGxlYWQgc3Vycm9nYXRlIGNvZGUgdW5pdHMgYW5kIGNvZGUgcG9pbnRzLlxuICAgICAgLy8gICBUaGUgbWFpbiBpbmRleCBoYXMgdGhlIGNvZGUgdW5pdCBkYXRhLlxuICAgICAgLy8gICBGb3IgdGhpcyBmdW5jdGlvbiwgd2UgbmVlZCB0aGUgY29kZSBwb2ludCBkYXRhLlxuICAgICAgaW5kZXggPSAodGhpcy5kYXRhW0xTQ1BfSU5ERVhfMl9PRkZTRVQgKyAoY29kZVBvaW50IC0gMHhkODAwID4+IFNISUZUXzIpXSA8PCBJTkRFWF9TSElGVCkgKyAoY29kZVBvaW50ICYgREFUQV9NQVNLKTtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFbaW5kZXhdO1xuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPCB0aGlzLmhpZ2hTdGFydCkge1xuICAgICAgLy8gU3VwcGxlbWVudGFsIGNvZGUgcG9pbnQsIHVzZSB0d28tbGV2ZWwgbG9va3VwLlxuICAgICAgaW5kZXggPSB0aGlzLmRhdGFbSU5ERVhfMV9PRkZTRVQgLSBPTUlUVEVEX0JNUF9JTkRFWF8xX0xFTkdUSCArIChjb2RlUG9pbnQgPj4gU0hJRlRfMSldO1xuICAgICAgaW5kZXggPSB0aGlzLmRhdGFbaW5kZXggKyAoY29kZVBvaW50ID4+IFNISUZUXzIgJiBJTkRFWF8yX01BU0spXTtcbiAgICAgIGluZGV4ID0gKGluZGV4IDw8IElOREVYX1NISUZUKSArIChjb2RlUG9pbnQgJiBEQVRBX01BU0spO1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVtpbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gREFUQV9HUkFOVUxBUklUWV07XG4gIH07XG5cbiAgcmV0dXJuIFVuaWNvZGVUcmllO1xufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVuaWNvZGVUcmllO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTc1Mzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY5OTIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI0NzIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI5OTApO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg5MjcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMxMDUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDUwMzUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQzNDUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcxNzQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI4NDYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ3MzEpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcyMDkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDYzMTkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg4NjcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc3ODkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM3MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDkzNjgpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ0ODMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwNTYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM0NjIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY3OCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNzQ2Mik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMzgyNCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAyMSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjk3NCk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTAxNik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oOTEzNSk7XG5cbnZhciBpc0JpZ0VuZGlhbiA9IG5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheShbMHgxMjM0NTY3OF0pLmJ1ZmZlcilbMF0gPT09IDB4MTI7XG5cbnZhciBzd2FwID0gZnVuY3Rpb24gc3dhcChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXTtcbiAgYltuXSA9IGJbbV07XG4gIGJbbV0gPSBpO1xufTtcblxudmFyIHN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMihhcnJheSkge1xuICB2YXIgbGVuID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKGFycmF5LCBpLCBpICsgMyk7XG4gICAgc3dhcChhcnJheSwgaSArIDEsIGkgKyAyKTtcbiAgfVxufTtcblxudmFyIHN3YXAzMkxFID0gZnVuY3Rpb24gc3dhcDMyTEUoYXJyYXkpIHtcbiAgaWYgKGlzQmlnRW5kaWFuKSB7XG4gICAgc3dhcDMyKGFycmF5KTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN3YXAzMkxFOiBzd2FwMzJMRVxufTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDgwNzE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIFNWR3RvUERGID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTE5KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTVkd0b1BERjtcblxuLyoqKi8gfSksXG5cbi8qKiovIDg1MTk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBtb2R1bGUgZGVjb3JhdG9yICovIG1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18ubm1kKG1vZHVsZSk7XG5cblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4MzA5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3OTQxKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMjEwKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0OTE2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NzIzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNzI4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MzA2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MDQyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5NjUzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMTIzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMjIyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2OTkyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxNTM5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzOTQ4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5MjU0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMjkwKTtcblxudmFyIFNWR3RvUERGID0gZnVuY3Rpb24gU1ZHdG9QREYoZG9jLCBzdmcsIHgsIHksIG9wdGlvbnMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE5hbWVkQ29sb3JzID0ge1xuICAgIGFsaWNlYmx1ZTogWzI0MCwgMjQ4LCAyNTVdLFxuICAgIGFudGlxdWV3aGl0ZTogWzI1MCwgMjM1LCAyMTVdLFxuICAgIGFxdWE6IFswLCAyNTUsIDI1NV0sXG4gICAgYXF1YW1hcmluZTogWzEyNywgMjU1LCAyMTJdLFxuICAgIGF6dXJlOiBbMjQwLCAyNTUsIDI1NV0sXG4gICAgYmVpZ2U6IFsyNDUsIDI0NSwgMjIwXSxcbiAgICBiaXNxdWU6IFsyNTUsIDIyOCwgMTk2XSxcbiAgICBibGFjazogWzAsIDAsIDBdLFxuICAgIGJsYW5jaGVkYWxtb25kOiBbMjU1LCAyMzUsIDIwNV0sXG4gICAgYmx1ZTogWzAsIDAsIDI1NV0sXG4gICAgYmx1ZXZpb2xldDogWzEzOCwgNDMsIDIyNl0sXG4gICAgYnJvd246IFsxNjUsIDQyLCA0Ml0sXG4gICAgYnVybHl3b29kOiBbMjIyLCAxODQsIDEzNV0sXG4gICAgY2FkZXRibHVlOiBbOTUsIDE1OCwgMTYwXSxcbiAgICBjaGFydHJldXNlOiBbMTI3LCAyNTUsIDBdLFxuICAgIGNob2NvbGF0ZTogWzIxMCwgMTA1LCAzMF0sXG4gICAgY29yYWw6IFsyNTUsIDEyNywgODBdLFxuICAgIGNvcm5mbG93ZXJibHVlOiBbMTAwLCAxNDksIDIzN10sXG4gICAgY29ybnNpbGs6IFsyNTUsIDI0OCwgMjIwXSxcbiAgICBjcmltc29uOiBbMjIwLCAyMCwgNjBdLFxuICAgIGN5YW46IFswLCAyNTUsIDI1NV0sXG4gICAgZGFya2JsdWU6IFswLCAwLCAxMzldLFxuICAgIGRhcmtjeWFuOiBbMCwgMTM5LCAxMzldLFxuICAgIGRhcmtnb2xkZW5yb2Q6IFsxODQsIDEzNCwgMTFdLFxuICAgIGRhcmtncmF5OiBbMTY5LCAxNjksIDE2OV0sXG4gICAgZGFya2dyZXk6IFsxNjksIDE2OSwgMTY5XSxcbiAgICBkYXJrZ3JlZW46IFswLCAxMDAsIDBdLFxuICAgIGRhcmtraGFraTogWzE4OSwgMTgzLCAxMDddLFxuICAgIGRhcmttYWdlbnRhOiBbMTM5LCAwLCAxMzldLFxuICAgIGRhcmtvbGl2ZWdyZWVuOiBbODUsIDEwNywgNDddLFxuICAgIGRhcmtvcmFuZ2U6IFsyNTUsIDE0MCwgMF0sXG4gICAgZGFya29yY2hpZDogWzE1MywgNTAsIDIwNF0sXG4gICAgZGFya3JlZDogWzEzOSwgMCwgMF0sXG4gICAgZGFya3NhbG1vbjogWzIzMywgMTUwLCAxMjJdLFxuICAgIGRhcmtzZWFncmVlbjogWzE0MywgMTg4LCAxNDNdLFxuICAgIGRhcmtzbGF0ZWJsdWU6IFs3MiwgNjEsIDEzOV0sXG4gICAgZGFya3NsYXRlZ3JheTogWzQ3LCA3OSwgNzldLFxuICAgIGRhcmtzbGF0ZWdyZXk6IFs0NywgNzksIDc5XSxcbiAgICBkYXJrdHVycXVvaXNlOiBbMCwgMjA2LCAyMDldLFxuICAgIGRhcmt2aW9sZXQ6IFsxNDgsIDAsIDIxMV0sXG4gICAgZGVlcHBpbms6IFsyNTUsIDIwLCAxNDddLFxuICAgIGRlZXBza3libHVlOiBbMCwgMTkxLCAyNTVdLFxuICAgIGRpbWdyYXk6IFsxMDUsIDEwNSwgMTA1XSxcbiAgICBkaW1ncmV5OiBbMTA1LCAxMDUsIDEwNV0sXG4gICAgZG9kZ2VyYmx1ZTogWzMwLCAxNDQsIDI1NV0sXG4gICAgZmlyZWJyaWNrOiBbMTc4LCAzNCwgMzRdLFxuICAgIGZsb3JhbHdoaXRlOiBbMjU1LCAyNTAsIDI0MF0sXG4gICAgZm9yZXN0Z3JlZW46IFszNCwgMTM5LCAzNF0sXG4gICAgZnVjaHNpYTogWzI1NSwgMCwgMjU1XSxcbiAgICBnYWluc2Jvcm86IFsyMjAsIDIyMCwgMjIwXSxcbiAgICBnaG9zdHdoaXRlOiBbMjQ4LCAyNDgsIDI1NV0sXG4gICAgZ29sZDogWzI1NSwgMjE1LCAwXSxcbiAgICBnb2xkZW5yb2Q6IFsyMTgsIDE2NSwgMzJdLFxuICAgIGdyYXk6IFsxMjgsIDEyOCwgMTI4XSxcbiAgICBncmV5OiBbMTI4LCAxMjgsIDEyOF0sXG4gICAgZ3JlZW46IFswLCAxMjgsIDBdLFxuICAgIGdyZWVueWVsbG93OiBbMTczLCAyNTUsIDQ3XSxcbiAgICBob25leWRldzogWzI0MCwgMjU1LCAyNDBdLFxuICAgIGhvdHBpbms6IFsyNTUsIDEwNSwgMTgwXSxcbiAgICBpbmRpYW5yZWQ6IFsyMDUsIDkyLCA5Ml0sXG4gICAgaW5kaWdvOiBbNzUsIDAsIDEzMF0sXG4gICAgaXZvcnk6IFsyNTUsIDI1NSwgMjQwXSxcbiAgICBraGFraTogWzI0MCwgMjMwLCAxNDBdLFxuICAgIGxhdmVuZGVyOiBbMjMwLCAyMzAsIDI1MF0sXG4gICAgbGF2ZW5kZXJibHVzaDogWzI1NSwgMjQwLCAyNDVdLFxuICAgIGxhd25ncmVlbjogWzEyNCwgMjUyLCAwXSxcbiAgICBsZW1vbmNoaWZmb246IFsyNTUsIDI1MCwgMjA1XSxcbiAgICBsaWdodGJsdWU6IFsxNzMsIDIxNiwgMjMwXSxcbiAgICBsaWdodGNvcmFsOiBbMjQwLCAxMjgsIDEyOF0sXG4gICAgbGlnaHRjeWFuOiBbMjI0LCAyNTUsIDI1NV0sXG4gICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFsyNTAsIDI1MCwgMjEwXSxcbiAgICBsaWdodGdyYXk6IFsyMTEsIDIxMSwgMjExXSxcbiAgICBsaWdodGdyZXk6IFsyMTEsIDIxMSwgMjExXSxcbiAgICBsaWdodGdyZWVuOiBbMTQ0LCAyMzgsIDE0NF0sXG4gICAgbGlnaHRwaW5rOiBbMjU1LCAxODIsIDE5M10sXG4gICAgbGlnaHRzYWxtb246IFsyNTUsIDE2MCwgMTIyXSxcbiAgICBsaWdodHNlYWdyZWVuOiBbMzIsIDE3OCwgMTcwXSxcbiAgICBsaWdodHNreWJsdWU6IFsxMzUsIDIwNiwgMjUwXSxcbiAgICBsaWdodHNsYXRlZ3JheTogWzExOSwgMTM2LCAxNTNdLFxuICAgIGxpZ2h0c2xhdGVncmV5OiBbMTE5LCAxMzYsIDE1M10sXG4gICAgbGlnaHRzdGVlbGJsdWU6IFsxNzYsIDE5NiwgMjIyXSxcbiAgICBsaWdodHllbGxvdzogWzI1NSwgMjU1LCAyMjRdLFxuICAgIGxpbWU6IFswLCAyNTUsIDBdLFxuICAgIGxpbWVncmVlbjogWzUwLCAyMDUsIDUwXSxcbiAgICBsaW5lbjogWzI1MCwgMjQwLCAyMzBdLFxuICAgIG1hZ2VudGE6IFsyNTUsIDAsIDI1NV0sXG4gICAgbWFyb29uOiBbMTI4LCAwLCAwXSxcbiAgICBtZWRpdW1hcXVhbWFyaW5lOiBbMTAyLCAyMDUsIDE3MF0sXG4gICAgbWVkaXVtYmx1ZTogWzAsIDAsIDIwNV0sXG4gICAgbWVkaXVtb3JjaGlkOiBbMTg2LCA4NSwgMjExXSxcbiAgICBtZWRpdW1wdXJwbGU6IFsxNDcsIDExMiwgMjE5XSxcbiAgICBtZWRpdW1zZWFncmVlbjogWzYwLCAxNzksIDExM10sXG4gICAgbWVkaXVtc2xhdGVibHVlOiBbMTIzLCAxMDQsIDIzOF0sXG4gICAgbWVkaXVtc3ByaW5nZ3JlZW46IFswLCAyNTAsIDE1NF0sXG4gICAgbWVkaXVtdHVycXVvaXNlOiBbNzIsIDIwOSwgMjA0XSxcbiAgICBtZWRpdW12aW9sZXRyZWQ6IFsxOTksIDIxLCAxMzNdLFxuICAgIG1pZG5pZ2h0Ymx1ZTogWzI1LCAyNSwgMTEyXSxcbiAgICBtaW50Y3JlYW06IFsyNDUsIDI1NSwgMjUwXSxcbiAgICBtaXN0eXJvc2U6IFsyNTUsIDIyOCwgMjI1XSxcbiAgICBtb2NjYXNpbjogWzI1NSwgMjI4LCAxODFdLFxuICAgIG5hdmFqb3doaXRlOiBbMjU1LCAyMjIsIDE3M10sXG4gICAgbmF2eTogWzAsIDAsIDEyOF0sXG4gICAgb2xkbGFjZTogWzI1MywgMjQ1LCAyMzBdLFxuICAgIG9saXZlOiBbMTI4LCAxMjgsIDBdLFxuICAgIG9saXZlZHJhYjogWzEwNywgMTQyLCAzNV0sXG4gICAgb3JhbmdlOiBbMjU1LCAxNjUsIDBdLFxuICAgIG9yYW5nZXJlZDogWzI1NSwgNjksIDBdLFxuICAgIG9yY2hpZDogWzIxOCwgMTEyLCAyMTRdLFxuICAgIHBhbGVnb2xkZW5yb2Q6IFsyMzgsIDIzMiwgMTcwXSxcbiAgICBwYWxlZ3JlZW46IFsxNTIsIDI1MSwgMTUyXSxcbiAgICBwYWxldHVycXVvaXNlOiBbMTc1LCAyMzgsIDIzOF0sXG4gICAgcGFsZXZpb2xldHJlZDogWzIxOSwgMTEyLCAxNDddLFxuICAgIHBhcGF5YXdoaXA6IFsyNTUsIDIzOSwgMjEzXSxcbiAgICBwZWFjaHB1ZmY6IFsyNTUsIDIxOCwgMTg1XSxcbiAgICBwZXJ1OiBbMjA1LCAxMzMsIDYzXSxcbiAgICBwaW5rOiBbMjU1LCAxOTIsIDIwM10sXG4gICAgcGx1bTogWzIyMSwgMTYwLCAyMjFdLFxuICAgIHBvd2RlcmJsdWU6IFsxNzYsIDIyNCwgMjMwXSxcbiAgICBwdXJwbGU6IFsxMjgsIDAsIDEyOF0sXG4gICAgcmViZWNjYXB1cnBsZTogWzEwMiwgNTEsIDE1M10sXG4gICAgcmVkOiBbMjU1LCAwLCAwXSxcbiAgICByb3N5YnJvd246IFsxODgsIDE0MywgMTQzXSxcbiAgICByb3lhbGJsdWU6IFs2NSwgMTA1LCAyMjVdLFxuICAgIHNhZGRsZWJyb3duOiBbMTM5LCA2OSwgMTldLFxuICAgIHNhbG1vbjogWzI1MCwgMTI4LCAxMTRdLFxuICAgIHNhbmR5YnJvd246IFsyNDQsIDE2NCwgOTZdLFxuICAgIHNlYWdyZWVuOiBbNDYsIDEzOSwgODddLFxuICAgIHNlYXNoZWxsOiBbMjU1LCAyNDUsIDIzOF0sXG4gICAgc2llbm5hOiBbMTYwLCA4MiwgNDVdLFxuICAgIHNpbHZlcjogWzE5MiwgMTkyLCAxOTJdLFxuICAgIHNreWJsdWU6IFsxMzUsIDIwNiwgMjM1XSxcbiAgICBzbGF0ZWJsdWU6IFsxMDYsIDkwLCAyMDVdLFxuICAgIHNsYXRlZ3JheTogWzExMiwgMTI4LCAxNDRdLFxuICAgIHNsYXRlZ3JleTogWzExMiwgMTI4LCAxNDRdLFxuICAgIHNub3c6IFsyNTUsIDI1MCwgMjUwXSxcbiAgICBzcHJpbmdncmVlbjogWzAsIDI1NSwgMTI3XSxcbiAgICBzdGVlbGJsdWU6IFs3MCwgMTMwLCAxODBdLFxuICAgIHRhbjogWzIxMCwgMTgwLCAxNDBdLFxuICAgIHRlYWw6IFswLCAxMjgsIDEyOF0sXG4gICAgdGhpc3RsZTogWzIxNiwgMTkxLCAyMTZdLFxuICAgIHRvbWF0bzogWzI1NSwgOTksIDcxXSxcbiAgICB0dXJxdW9pc2U6IFs2NCwgMjI0LCAyMDhdLFxuICAgIHZpb2xldDogWzIzOCwgMTMwLCAyMzhdLFxuICAgIHdoZWF0OiBbMjQ1LCAyMjIsIDE3OV0sXG4gICAgd2hpdGU6IFsyNTUsIDI1NSwgMjU1XSxcbiAgICB3aGl0ZXNtb2tlOiBbMjQ1LCAyNDUsIDI0NV0sXG4gICAgeWVsbG93OiBbMjU1LCAyNTUsIDBdXG4gIH07XG4gIHZhciBEZWZhdWx0Q29sb3JzID0ge1xuICAgIGJsYWNrOiBbTmFtZWRDb2xvcnMuYmxhY2ssIDFdLFxuICAgIHdoaXRlOiBbTmFtZWRDb2xvcnMud2hpdGUsIDFdLFxuICAgIHRyYW5zcGFyZW50OiBbTmFtZWRDb2xvcnMuYmxhY2ssIDBdXG4gIH07XG4gIHZhciBFbnRpdGllcyA9IHtcbiAgICBxdW90OiAzNCxcbiAgICBhbXA6IDM4LFxuICAgIGx0OiA2MCxcbiAgICBndDogNjIsXG4gICAgYXBvczogMzksXG4gICAgT0VsaWc6IDMzOCxcbiAgICBvZWxpZzogMzM5LFxuICAgIFNjYXJvbjogMzUyLFxuICAgIHNjYXJvbjogMzUzLFxuICAgIFl1bWw6IDM3NixcbiAgICBjaXJjOiA3MTAsXG4gICAgdGlsZGU6IDczMixcbiAgICBlbnNwOiA4MTk0LFxuICAgIGVtc3A6IDgxOTUsXG4gICAgdGhpbnNwOiA4MjAxLFxuICAgIHp3bmo6IDgyMDQsXG4gICAgendqOiA4MjA1LFxuICAgIGxybTogODIwNixcbiAgICBybG06IDgyMDcsXG4gICAgbmRhc2g6IDgyMTEsXG4gICAgbWRhc2g6IDgyMTIsXG4gICAgbHNxdW86IDgyMTYsXG4gICAgcnNxdW86IDgyMTcsXG4gICAgc2JxdW86IDgyMTgsXG4gICAgbGRxdW86IDgyMjAsXG4gICAgcmRxdW86IDgyMjEsXG4gICAgYmRxdW86IDgyMjIsXG4gICAgZGFnZ2VyOiA4MjI0LFxuICAgIERhZ2dlcjogODIyNSxcbiAgICBwZXJtaWw6IDgyNDAsXG4gICAgbHNhcXVvOiA4MjQ5LFxuICAgIHJzYXF1bzogODI1MCxcbiAgICBldXJvOiA4MzY0LFxuICAgIG5ic3A6IDE2MCxcbiAgICBpZXhjbDogMTYxLFxuICAgIGNlbnQ6IDE2MixcbiAgICBwb3VuZDogMTYzLFxuICAgIGN1cnJlbjogMTY0LFxuICAgIHllbjogMTY1LFxuICAgIGJydmJhcjogMTY2LFxuICAgIHNlY3Q6IDE2NyxcbiAgICB1bWw6IDE2OCxcbiAgICBjb3B5OiAxNjksXG4gICAgb3JkZjogMTcwLFxuICAgIGxhcXVvOiAxNzEsXG4gICAgbm90OiAxNzIsXG4gICAgc2h5OiAxNzMsXG4gICAgcmVnOiAxNzQsXG4gICAgbWFjcjogMTc1LFxuICAgIGRlZzogMTc2LFxuICAgIHBsdXNtbjogMTc3LFxuICAgIHN1cDI6IDE3OCxcbiAgICBzdXAzOiAxNzksXG4gICAgYWN1dGU6IDE4MCxcbiAgICBtaWNybzogMTgxLFxuICAgIHBhcmE6IDE4MixcbiAgICBtaWRkb3Q6IDE4MyxcbiAgICBjZWRpbDogMTg0LFxuICAgIHN1cDE6IDE4NSxcbiAgICBvcmRtOiAxODYsXG4gICAgcmFxdW86IDE4NyxcbiAgICBmcmFjMTQ6IDE4OCxcbiAgICBmcmFjMTI6IDE4OSxcbiAgICBmcmFjMzQ6IDE5MCxcbiAgICBpcXVlc3Q6IDE5MSxcbiAgICBBZ3JhdmU6IDE5MixcbiAgICBBYWN1dGU6IDE5MyxcbiAgICBBY2lyYzogMTk0LFxuICAgIEF0aWxkZTogMTk1LFxuICAgIEF1bWw6IDE5NixcbiAgICBBcmluZzogMTk3LFxuICAgIEFFbGlnOiAxOTgsXG4gICAgQ2NlZGlsOiAxOTksXG4gICAgRWdyYXZlOiAyMDAsXG4gICAgRWFjdXRlOiAyMDEsXG4gICAgRWNpcmM6IDIwMixcbiAgICBFdW1sOiAyMDMsXG4gICAgSWdyYXZlOiAyMDQsXG4gICAgSWFjdXRlOiAyMDUsXG4gICAgSWNpcmM6IDIwNixcbiAgICBJdW1sOiAyMDcsXG4gICAgRVRIOiAyMDgsXG4gICAgTnRpbGRlOiAyMDksXG4gICAgT2dyYXZlOiAyMTAsXG4gICAgT2FjdXRlOiAyMTEsXG4gICAgT2NpcmM6IDIxMixcbiAgICBPdGlsZGU6IDIxMyxcbiAgICBPdW1sOiAyMTQsXG4gICAgdGltZXM6IDIxNSxcbiAgICBPc2xhc2g6IDIxNixcbiAgICBVZ3JhdmU6IDIxNyxcbiAgICBVYWN1dGU6IDIxOCxcbiAgICBVY2lyYzogMjE5LFxuICAgIFV1bWw6IDIyMCxcbiAgICBZYWN1dGU6IDIyMSxcbiAgICBUSE9STjogMjIyLFxuICAgIHN6bGlnOiAyMjMsXG4gICAgYWdyYXZlOiAyMjQsXG4gICAgYWFjdXRlOiAyMjUsXG4gICAgYWNpcmM6IDIyNixcbiAgICBhdGlsZGU6IDIyNyxcbiAgICBhdW1sOiAyMjgsXG4gICAgYXJpbmc6IDIyOSxcbiAgICBhZWxpZzogMjMwLFxuICAgIGNjZWRpbDogMjMxLFxuICAgIGVncmF2ZTogMjMyLFxuICAgIGVhY3V0ZTogMjMzLFxuICAgIGVjaXJjOiAyMzQsXG4gICAgZXVtbDogMjM1LFxuICAgIGlncmF2ZTogMjM2LFxuICAgIGlhY3V0ZTogMjM3LFxuICAgIGljaXJjOiAyMzgsXG4gICAgaXVtbDogMjM5LFxuICAgIGV0aDogMjQwLFxuICAgIG50aWxkZTogMjQxLFxuICAgIG9ncmF2ZTogMjQyLFxuICAgIG9hY3V0ZTogMjQzLFxuICAgIG9jaXJjOiAyNDQsXG4gICAgb3RpbGRlOiAyNDUsXG4gICAgb3VtbDogMjQ2LFxuICAgIGRpdmlkZTogMjQ3LFxuICAgIG9zbGFzaDogMjQ4LFxuICAgIHVncmF2ZTogMjQ5LFxuICAgIHVhY3V0ZTogMjUwLFxuICAgIHVjaXJjOiAyNTEsXG4gICAgdXVtbDogMjUyLFxuICAgIHlhY3V0ZTogMjUzLFxuICAgIHRob3JuOiAyNTQsXG4gICAgeXVtbDogMjU1LFxuICAgIGZub2Y6IDQwMixcbiAgICBBbHBoYTogOTEzLFxuICAgIEJldGE6IDkxNCxcbiAgICBHYW1tYTogOTE1LFxuICAgIERlbHRhOiA5MTYsXG4gICAgRXBzaWxvbjogOTE3LFxuICAgIFpldGE6IDkxOCxcbiAgICBFdGE6IDkxOSxcbiAgICBUaGV0YTogOTIwLFxuICAgIElvdGE6IDkyMSxcbiAgICBLYXBwYTogOTIyLFxuICAgIExhbWJkYTogOTIzLFxuICAgIE11OiA5MjQsXG4gICAgTnU6IDkyNSxcbiAgICBYaTogOTI2LFxuICAgIE9taWNyb246IDkyNyxcbiAgICBQaTogOTI4LFxuICAgIFJobzogOTI5LFxuICAgIFNpZ21hOiA5MzEsXG4gICAgVGF1OiA5MzIsXG4gICAgVXBzaWxvbjogOTMzLFxuICAgIFBoaTogOTM0LFxuICAgIENoaTogOTM1LFxuICAgIFBzaTogOTM2LFxuICAgIE9tZWdhOiA5MzcsXG4gICAgYWxwaGE6IDk0NSxcbiAgICBiZXRhOiA5NDYsXG4gICAgZ2FtbWE6IDk0NyxcbiAgICBkZWx0YTogOTQ4LFxuICAgIGVwc2lsb246IDk0OSxcbiAgICB6ZXRhOiA5NTAsXG4gICAgZXRhOiA5NTEsXG4gICAgdGhldGE6IDk1MixcbiAgICBpb3RhOiA5NTMsXG4gICAga2FwcGE6IDk1NCxcbiAgICBsYW1iZGE6IDk1NSxcbiAgICBtdTogOTU2LFxuICAgIG51OiA5NTcsXG4gICAgeGk6IDk1OCxcbiAgICBvbWljcm9uOiA5NTksXG4gICAgcGk6IDk2MCxcbiAgICByaG86IDk2MSxcbiAgICBzaWdtYWY6IDk2MixcbiAgICBzaWdtYTogOTYzLFxuICAgIHRhdTogOTY0LFxuICAgIHVwc2lsb246IDk2NSxcbiAgICBwaGk6IDk2NixcbiAgICBjaGk6IDk2NyxcbiAgICBwc2k6IDk2OCxcbiAgICBvbWVnYTogOTY5LFxuICAgIHRoZXRhc3ltOiA5NzcsXG4gICAgdXBzaWg6IDk3OCxcbiAgICBwaXY6IDk4MixcbiAgICBidWxsOiA4MjI2LFxuICAgIGhlbGxpcDogODIzMCxcbiAgICBwcmltZTogODI0MixcbiAgICBQcmltZTogODI0MyxcbiAgICBvbGluZTogODI1NCxcbiAgICBmcmFzbDogODI2MCxcbiAgICB3ZWllcnA6IDg0NzIsXG4gICAgaW1hZ2U6IDg0NjUsXG4gICAgcmVhbDogODQ3NixcbiAgICB0cmFkZTogODQ4MixcbiAgICBhbGVmc3ltOiA4NTAxLFxuICAgIGxhcnI6IDg1OTIsXG4gICAgdWFycjogODU5MyxcbiAgICByYXJyOiA4NTk0LFxuICAgIGRhcnI6IDg1OTUsXG4gICAgaGFycjogODU5NixcbiAgICBjcmFycjogODYyOSxcbiAgICBsQXJyOiA4NjU2LFxuICAgIHVBcnI6IDg2NTcsXG4gICAgckFycjogODY1OCxcbiAgICBkQXJyOiA4NjU5LFxuICAgIGhBcnI6IDg2NjAsXG4gICAgZm9yYWxsOiA4NzA0LFxuICAgIHBhcnQ6IDg3MDYsXG4gICAgZXhpc3Q6IDg3MDcsXG4gICAgZW1wdHk6IDg3MDksXG4gICAgbmFibGE6IDg3MTEsXG4gICAgaXNpbjogODcxMixcbiAgICBub3RpbjogODcxMyxcbiAgICBuaTogODcxNSxcbiAgICBwcm9kOiA4NzE5LFxuICAgIHN1bTogODcyMSxcbiAgICBtaW51czogODcyMixcbiAgICBsb3dhc3Q6IDg3MjcsXG4gICAgcmFkaWM6IDg3MzAsXG4gICAgcHJvcDogODczMyxcbiAgICBpbmZpbjogODczNCxcbiAgICBhbmc6IDg3MzYsXG4gICAgYW5kOiA4NzQzLFxuICAgIG9yOiA4NzQ0LFxuICAgIGNhcDogODc0NSxcbiAgICBjdXA6IDg3NDYsXG4gICAgaW50OiA4NzQ3LFxuICAgIHRoZXJlNDogODc1NixcbiAgICBzaW06IDg3NjQsXG4gICAgY29uZzogODc3MyxcbiAgICBhc3ltcDogODc3NixcbiAgICBuZTogODgwMCxcbiAgICBlcXVpdjogODgwMSxcbiAgICBsZTogODgwNCxcbiAgICBnZTogODgwNSxcbiAgICBzdWI6IDg4MzQsXG4gICAgc3VwOiA4ODM1LFxuICAgIG5zdWI6IDg4MzYsXG4gICAgc3ViZTogODgzOCxcbiAgICBzdXBlOiA4ODM5LFxuICAgIG9wbHVzOiA4ODUzLFxuICAgIG90aW1lczogODg1NSxcbiAgICBwZXJwOiA4ODY5LFxuICAgIHNkb3Q6IDg5MDEsXG4gICAgbGNlaWw6IDg5NjgsXG4gICAgcmNlaWw6IDg5NjksXG4gICAgbGZsb29yOiA4OTcwLFxuICAgIHJmbG9vcjogODk3MSxcbiAgICBsYW5nOiA5MDAxLFxuICAgIHJhbmc6IDkwMDIsXG4gICAgbG96OiA5Njc0LFxuICAgIHNwYWRlczogOTgyNCxcbiAgICBjbHViczogOTgyNyxcbiAgICBoZWFydHM6IDk4MjksXG4gICAgZGlhbXM6IDk4MzBcbiAgfTtcbiAgdmFyIFBhdGhBcmd1bWVudHMgPSB7XG4gICAgQTogNyxcbiAgICBhOiA3LFxuICAgIEM6IDYsXG4gICAgYzogNixcbiAgICBIOiAxLFxuICAgIGg6IDEsXG4gICAgTDogMixcbiAgICBsOiAyLFxuICAgIE06IDIsXG4gICAgbTogMixcbiAgICBROiA0LFxuICAgIHE6IDQsXG4gICAgUzogNCxcbiAgICBzOiA0LFxuICAgIFQ6IDIsXG4gICAgdDogMixcbiAgICBWOiAxLFxuICAgIHY6IDEsXG4gICAgWjogMCxcbiAgICB6OiAwXG4gIH07XG4gIHZhciBQYXRoRmxhZ3MgPSB7XG4gICAgQTM6IHRydWUsXG4gICAgQTQ6IHRydWUsXG4gICAgYTM6IHRydWUsXG4gICAgYTQ6IHRydWVcbiAgfTtcbiAgdmFyIFByb3BlcnRpZXMgPSB7XG4gICAgJ2NvbG9yJzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6IHVuZGVmaW5lZFxuICAgIH0sXG4gICAgJ3Zpc2liaWxpdHknOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogJ3Zpc2libGUnLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgICdoaWRkZW4nOiAnaGlkZGVuJyxcbiAgICAgICAgJ2NvbGxhcHNlJzogJ2hpZGRlbicsXG4gICAgICAgICd2aXNpYmxlJzogJ3Zpc2libGUnXG4gICAgICB9XG4gICAgfSxcbiAgICAnZmlsbCc6IHtcbiAgICAgIGluaGVyaXQ6IHRydWUsXG4gICAgICBpbml0aWFsOiBEZWZhdWx0Q29sb3JzLmJsYWNrXG4gICAgfSxcbiAgICAnc3Ryb2tlJzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6ICdub25lJ1xuICAgIH0sXG4gICAgJ3N0b3AtY29sb3InOiB7XG4gICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgIGluaXRpYWw6IERlZmF1bHRDb2xvcnMuYmxhY2tcbiAgICB9LFxuICAgICdmaWxsLW9wYWNpdHknOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogMVxuICAgIH0sXG4gICAgJ3N0cm9rZS1vcGFjaXR5Jzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6IDFcbiAgICB9LFxuICAgICdzdG9wLW9wYWNpdHknOiB7XG4gICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgIGluaXRpYWw6IDFcbiAgICB9LFxuICAgICdmaWxsLXJ1bGUnOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogJ25vbnplcm8nLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgICdub256ZXJvJzogJ25vbnplcm8nLFxuICAgICAgICAnZXZlbm9kZCc6ICdldmVub2RkJ1xuICAgICAgfVxuICAgIH0sXG4gICAgJ2NsaXAtcnVsZSc6IHtcbiAgICAgIGluaGVyaXQ6IHRydWUsXG4gICAgICBpbml0aWFsOiAnbm9uemVybycsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgJ25vbnplcm8nOiAnbm9uemVybycsXG4gICAgICAgICdldmVub2RkJzogJ2V2ZW5vZGQnXG4gICAgICB9XG4gICAgfSxcbiAgICAnc3Ryb2tlLXdpZHRoJzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6IDFcbiAgICB9LFxuICAgICdzdHJva2UtZGFzaGFycmF5Jzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6IFtdXG4gICAgfSxcbiAgICAnc3Ryb2tlLWRhc2hvZmZzZXQnOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogMFxuICAgIH0sXG4gICAgJ3N0cm9rZS1taXRlcmxpbWl0Jzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6IDRcbiAgICB9LFxuICAgICdzdHJva2UtbGluZWpvaW4nOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogJ21pdGVyJyxcbiAgICAgIHZhbHVlczoge1xuICAgICAgICAnbWl0ZXInOiAnbWl0ZXInLFxuICAgICAgICAncm91bmQnOiAncm91bmQnLFxuICAgICAgICAnYmV2ZWwnOiAnYmV2ZWwnXG4gICAgICB9XG4gICAgfSxcbiAgICAnc3Ryb2tlLWxpbmVjYXAnOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogJ2J1dHQnLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgICdidXR0JzogJ2J1dHQnLFxuICAgICAgICAncm91bmQnOiAncm91bmQnLFxuICAgICAgICAnc3F1YXJlJzogJ3NxdWFyZSdcbiAgICAgIH1cbiAgICB9LFxuICAgICdmb250LXNpemUnOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogMTYsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgJ3h4LXNtYWxsJzogOSxcbiAgICAgICAgJ3gtc21hbGwnOiAxMCxcbiAgICAgICAgJ3NtYWxsJzogMTMsXG4gICAgICAgICdtZWRpdW0nOiAxNixcbiAgICAgICAgJ2xhcmdlJzogMTgsXG4gICAgICAgICd4LWxhcmdlJzogMjQsXG4gICAgICAgICd4eC1sYXJnZSc6IDMyXG4gICAgICB9XG4gICAgfSxcbiAgICAnZm9udC1mYW1pbHknOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogJ3NhbnMtc2VyaWYnXG4gICAgfSxcbiAgICAnZm9udC13ZWlnaHQnOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogJ25vcm1hbCcsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgJzYwMCc6ICdib2xkJyxcbiAgICAgICAgJzcwMCc6ICdib2xkJyxcbiAgICAgICAgJzgwMCc6ICdib2xkJyxcbiAgICAgICAgJzkwMCc6ICdib2xkJyxcbiAgICAgICAgJ2JvbGQnOiAnYm9sZCcsXG4gICAgICAgICdib2xkZXInOiAnYm9sZCcsXG4gICAgICAgICc1MDAnOiAnbm9ybWFsJyxcbiAgICAgICAgJzQwMCc6ICdub3JtYWwnLFxuICAgICAgICAnMzAwJzogJ25vcm1hbCcsXG4gICAgICAgICcyMDAnOiAnbm9ybWFsJyxcbiAgICAgICAgJzEwMCc6ICdub3JtYWwnLFxuICAgICAgICAnbm9ybWFsJzogJ25vcm1hbCcsXG4gICAgICAgICdsaWdodGVyJzogJ25vcm1hbCdcbiAgICAgIH1cbiAgICB9LFxuICAgICdmb250LXN0eWxlJzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6ICdub3JtYWwnLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgICdpdGFsaWMnOiAnaXRhbGljJyxcbiAgICAgICAgJ29ibGlxdWUnOiAnaXRhbGljJyxcbiAgICAgICAgJ25vcm1hbCc6ICdub3JtYWwnXG4gICAgICB9XG4gICAgfSxcbiAgICAndGV4dC1hbmNob3InOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogJ3N0YXJ0JyxcbiAgICAgIHZhbHVlczoge1xuICAgICAgICAnc3RhcnQnOiAnc3RhcnQnLFxuICAgICAgICAnbWlkZGxlJzogJ21pZGRsZScsXG4gICAgICAgICdlbmQnOiAnZW5kJ1xuICAgICAgfVxuICAgIH0sXG4gICAgJ2RpcmVjdGlvbic6IHtcbiAgICAgIGluaGVyaXQ6IHRydWUsXG4gICAgICBpbml0aWFsOiAnbHRyJyxcbiAgICAgIHZhbHVlczoge1xuICAgICAgICAnbHRyJzogJ2x0cicsXG4gICAgICAgICdydGwnOiAncnRsJ1xuICAgICAgfVxuICAgIH0sXG4gICAgJ2RvbWluYW50LWJhc2VsaW5lJzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6ICdiYXNlbGluZScsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgJ2F1dG8nOiAnYmFzZWxpbmUnLFxuICAgICAgICAnYmFzZWxpbmUnOiAnYmFzZWxpbmUnLFxuICAgICAgICAnYmVmb3JlLWVkZ2UnOiAnYmVmb3JlLWVkZ2UnLFxuICAgICAgICAndGV4dC1iZWZvcmUtZWRnZSc6ICdiZWZvcmUtZWRnZScsXG4gICAgICAgICdtaWRkbGUnOiAnbWlkZGxlJyxcbiAgICAgICAgJ2NlbnRyYWwnOiAnY2VudHJhbCcsXG4gICAgICAgICdhZnRlci1lZGdlJzogJ2FmdGVyLWVkZ2UnLFxuICAgICAgICAndGV4dC1hZnRlci1lZGdlJzogJ2FmdGVyLWVkZ2UnLFxuICAgICAgICAnaWRlb2dyYXBoaWMnOiAnaWRlb2dyYXBoaWMnLFxuICAgICAgICAnYWxwaGFiZXRpYyc6ICdhbHBoYWJldGljJyxcbiAgICAgICAgJ2hhbmdpbmcnOiAnaGFuZ2luZycsXG4gICAgICAgICdtYXRoZW1hdGljYWwnOiAnbWF0aGVtYXRpY2FsJ1xuICAgICAgfVxuICAgIH0sXG4gICAgJ2FsaWdubWVudC1iYXNlbGluZSc6IHtcbiAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgaW5pdGlhbDogdW5kZWZpbmVkLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgICdhdXRvJzogJ2Jhc2VsaW5lJyxcbiAgICAgICAgJ2Jhc2VsaW5lJzogJ2Jhc2VsaW5lJyxcbiAgICAgICAgJ2JlZm9yZS1lZGdlJzogJ2JlZm9yZS1lZGdlJyxcbiAgICAgICAgJ3RleHQtYmVmb3JlLWVkZ2UnOiAnYmVmb3JlLWVkZ2UnLFxuICAgICAgICAnbWlkZGxlJzogJ21pZGRsZScsXG4gICAgICAgICdjZW50cmFsJzogJ2NlbnRyYWwnLFxuICAgICAgICAnYWZ0ZXItZWRnZSc6ICdhZnRlci1lZGdlJyxcbiAgICAgICAgJ3RleHQtYWZ0ZXItZWRnZSc6ICdhZnRlci1lZGdlJyxcbiAgICAgICAgJ2lkZW9ncmFwaGljJzogJ2lkZW9ncmFwaGljJyxcbiAgICAgICAgJ2FscGhhYmV0aWMnOiAnYWxwaGFiZXRpYycsXG4gICAgICAgICdoYW5naW5nJzogJ2hhbmdpbmcnLFxuICAgICAgICAnbWF0aGVtYXRpY2FsJzogJ21hdGhlbWF0aWNhbCdcbiAgICAgIH1cbiAgICB9LFxuICAgICdiYXNlbGluZS1zaGlmdCc6IHtcbiAgICAgIGluaGVyaXQ6IHRydWUsXG4gICAgICBpbml0aWFsOiAnYmFzZWxpbmUnLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgICdiYXNlbGluZSc6ICdiYXNlbGluZScsXG4gICAgICAgICdzdWInOiAnc3ViJyxcbiAgICAgICAgJ3N1cGVyJzogJ3N1cGVyJ1xuICAgICAgfVxuICAgIH0sXG4gICAgJ3dvcmQtc3BhY2luZyc6IHtcbiAgICAgIGluaGVyaXQ6IHRydWUsXG4gICAgICBpbml0aWFsOiAwLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgIG5vcm1hbDogMFxuICAgICAgfVxuICAgIH0sXG4gICAgJ2xldHRlci1zcGFjaW5nJzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6IDAsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgbm9ybWFsOiAwXG4gICAgICB9XG4gICAgfSxcbiAgICAndGV4dC1kZWNvcmF0aW9uJzoge1xuICAgICAgaW5oZXJpdDogZmFsc2UsXG4gICAgICBpbml0aWFsOiAnbm9uZScsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgJ25vbmUnOiAnbm9uZScsXG4gICAgICAgICd1bmRlcmxpbmUnOiAndW5kZXJsaW5lJyxcbiAgICAgICAgJ292ZXJsaW5lJzogJ292ZXJsaW5lJyxcbiAgICAgICAgJ2xpbmUtdGhyb3VnaCc6ICdsaW5lLXRocm91Z2gnXG4gICAgICB9XG4gICAgfSxcbiAgICAneG1sOnNwYWNlJzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6ICdkZWZhdWx0JyxcbiAgICAgIGNzczogJ3doaXRlLXNwYWNlJyxcbiAgICAgIHZhbHVlczoge1xuICAgICAgICAncHJlc2VydmUnOiAncHJlc2VydmUnLFxuICAgICAgICAnZGVmYXVsdCc6ICdkZWZhdWx0JyxcbiAgICAgICAgJ3ByZSc6ICdwcmVzZXJ2ZScsXG4gICAgICAgICdwcmUtbGluZSc6ICdwcmVzZXJ2ZScsXG4gICAgICAgICdwcmUtd3JhcCc6ICdwcmVzZXJ2ZScsXG4gICAgICAgICdub3dyYXAnOiAnZGVmYXVsdCdcbiAgICAgIH1cbiAgICB9LFxuICAgICdtYXJrZXItc3RhcnQnOiB7XG4gICAgICBpbmhlcml0OiB0cnVlLFxuICAgICAgaW5pdGlhbDogJ25vbmUnXG4gICAgfSxcbiAgICAnbWFya2VyLW1pZCc6IHtcbiAgICAgIGluaGVyaXQ6IHRydWUsXG4gICAgICBpbml0aWFsOiAnbm9uZSdcbiAgICB9LFxuICAgICdtYXJrZXItZW5kJzoge1xuICAgICAgaW5oZXJpdDogdHJ1ZSxcbiAgICAgIGluaXRpYWw6ICdub25lJ1xuICAgIH0sXG4gICAgJ29wYWNpdHknOiB7XG4gICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgIGluaXRpYWw6IDFcbiAgICB9LFxuICAgICd0cmFuc2Zvcm0nOiB7XG4gICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgIGluaXRpYWw6IFsxLCAwLCAwLCAxLCAwLCAwXVxuICAgIH0sXG4gICAgJ2Rpc3BsYXknOiB7XG4gICAgICBpbmhlcml0OiBmYWxzZSxcbiAgICAgIGluaXRpYWw6ICdpbmxpbmUnLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgICdub25lJzogJ25vbmUnLFxuICAgICAgICAnaW5saW5lJzogJ2lubGluZScsXG4gICAgICAgICdibG9jayc6ICdpbmxpbmUnXG4gICAgICB9XG4gICAgfSxcbiAgICAnY2xpcC1wYXRoJzoge1xuICAgICAgaW5oZXJpdDogZmFsc2UsXG4gICAgICBpbml0aWFsOiAnbm9uZSdcbiAgICB9LFxuICAgICdtYXNrJzoge1xuICAgICAgaW5oZXJpdDogZmFsc2UsXG4gICAgICBpbml0aWFsOiAnbm9uZSdcbiAgICB9LFxuICAgICdvdmVyZmxvdyc6IHtcbiAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgaW5pdGlhbDogJ2hpZGRlbicsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgJ2hpZGRlbic6ICdoaWRkZW4nLFxuICAgICAgICAnc2Nyb2xsJzogJ2hpZGRlbicsXG4gICAgICAgICd2aXNpYmxlJzogJ3Zpc2libGUnXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGRvY0JlZ2luR3JvdXAoYmJveCkge1xuICAgIHZhciBncm91cCA9IG5ldyBmdW5jdGlvbiBQREZHcm91cCgpIHt9KCk7XG4gICAgZ3JvdXAubmFtZSA9ICdHJyArIChkb2MuX2dyb3VwQ291bnQgPSAoZG9jLl9ncm91cENvdW50IHx8IDApICsgMSk7XG4gICAgZ3JvdXAucmVzb3VyY2VzID0gZG9jLnJlZigpO1xuICAgIGdyb3VwLnhvYmogPSBkb2MucmVmKHtcbiAgICAgIFR5cGU6ICdYT2JqZWN0JyxcbiAgICAgIFN1YnR5cGU6ICdGb3JtJyxcbiAgICAgIEZvcm1UeXBlOiAxLFxuICAgICAgQkJveDogYmJveCxcbiAgICAgIEdyb3VwOiB7XG4gICAgICAgIFM6ICdUcmFuc3BhcmVuY3knLFxuICAgICAgICBDUzogJ0RldmljZVJHQicsXG4gICAgICAgIEk6IHRydWUsXG4gICAgICAgIEs6IGZhbHNlXG4gICAgICB9LFxuICAgICAgUmVzb3VyY2VzOiBncm91cC5yZXNvdXJjZXNcbiAgICB9KTtcbiAgICBncm91cC54b2JqLndyaXRlKCcnKTtcbiAgICBncm91cC5zYXZlZE1hdHJpeCA9IGRvYy5fY3RtO1xuICAgIGdyb3VwLnNhdmVkUGFnZSA9IGRvYy5wYWdlO1xuICAgIGdyb3VwU3RhY2sucHVzaChncm91cCk7XG4gICAgZG9jLl9jdG0gPSBbMSwgMCwgMCwgMSwgMCwgMF07XG4gICAgZG9jLnBhZ2UgPSB7XG4gICAgICB3aWR0aDogZG9jLnBhZ2Uud2lkdGgsXG4gICAgICBoZWlnaHQ6IGRvYy5wYWdlLmhlaWdodCxcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShkYXRhKSB7XG4gICAgICAgIGdyb3VwLnhvYmoud3JpdGUoZGF0YSk7XG4gICAgICB9LFxuICAgICAgZm9udHM6IHt9LFxuICAgICAgeG9iamVjdHM6IHt9LFxuICAgICAgZXh0X2dzdGF0ZXM6IHt9LFxuICAgICAgcGF0dGVybnM6IHt9XG4gICAgfTtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cblxuICBmdW5jdGlvbiBkb2NFbmRHcm91cChncm91cCkge1xuICAgIGlmIChncm91cCAhPT0gZ3JvdXBTdGFjay5wb3AoKSkge1xuICAgICAgdGhyb3cgJ0dyb3VwIG5vdCBtYXRjaGluZyc7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGRvYy5wYWdlLmZvbnRzKS5sZW5ndGgpIHtcbiAgICAgIGdyb3VwLnJlc291cmNlcy5kYXRhLkZvbnQgPSBkb2MucGFnZS5mb250cztcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jLnBhZ2UueG9iamVjdHMpLmxlbmd0aCkge1xuICAgICAgZ3JvdXAucmVzb3VyY2VzLmRhdGEuWE9iamVjdCA9IGRvYy5wYWdlLnhvYmplY3RzO1xuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhkb2MucGFnZS5leHRfZ3N0YXRlcykubGVuZ3RoKSB7XG4gICAgICBncm91cC5yZXNvdXJjZXMuZGF0YS5FeHRHU3RhdGUgPSBkb2MucGFnZS5leHRfZ3N0YXRlcztcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jLnBhZ2UucGF0dGVybnMpLmxlbmd0aCkge1xuICAgICAgZ3JvdXAucmVzb3VyY2VzLmRhdGEuUGF0dGVybiA9IGRvYy5wYWdlLnBhdHRlcm5zO1xuICAgIH1cblxuICAgIGdyb3VwLnJlc291cmNlcy5lbmQoKTtcbiAgICBncm91cC54b2JqLmVuZCgpO1xuICAgIGRvYy5fY3RtID0gZ3JvdXAuc2F2ZWRNYXRyaXg7XG4gICAgZG9jLnBhZ2UgPSBncm91cC5zYXZlZFBhZ2U7XG4gIH1cblxuICBmdW5jdGlvbiBkb2NJbnNlcnRHcm91cChncm91cCkge1xuICAgIGRvYy5wYWdlLnhvYmplY3RzW2dyb3VwLm5hbWVdID0gZ3JvdXAueG9iajtcbiAgICBkb2MuYWRkQ29udGVudCgnLycgKyBncm91cC5uYW1lICsgJyBEbycpO1xuICB9XG5cbiAgZnVuY3Rpb24gZG9jQXBwbHlNYXNrKGdyb3VwLCBjbGlwKSB7XG4gICAgdmFyIG5hbWUgPSAnTScgKyAoZG9jLl9tYXNrQ291bnQgPSAoZG9jLl9tYXNrQ291bnQgfHwgMCkgKyAxKTtcbiAgICB2YXIgZ3N0YXRlID0gZG9jLnJlZih7XG4gICAgICBUeXBlOiAnRXh0R1N0YXRlJyxcbiAgICAgIENBOiAxLFxuICAgICAgY2E6IDEsXG4gICAgICBCTTogJ05vcm1hbCcsXG4gICAgICBTTWFzazoge1xuICAgICAgICBTOiAnTHVtaW5vc2l0eScsXG4gICAgICAgIEc6IGdyb3VwLnhvYmosXG4gICAgICAgIEJDOiBjbGlwID8gWzAsIDAsIDBdIDogWzEsIDEsIDFdXG4gICAgICB9XG4gICAgfSk7XG4gICAgZ3N0YXRlLmVuZCgpO1xuICAgIGRvYy5wYWdlLmV4dF9nc3RhdGVzW25hbWVdID0gZ3N0YXRlO1xuICAgIGRvYy5hZGRDb250ZW50KCcvJyArIG5hbWUgKyAnIGdzJyk7XG4gIH1cblxuICBmdW5jdGlvbiBkb2NDcmVhdGVQYXR0ZXJuKGdyb3VwLCBkeCwgZHksIG1hdHJpeCkge1xuICAgIHZhciBwYXR0ZXJuID0gbmV3IGZ1bmN0aW9uIFBERlBhdHRlcm4oKSB7fSgpO1xuICAgIHBhdHRlcm4uZ3JvdXAgPSBncm91cDtcbiAgICBwYXR0ZXJuLmR4ID0gZHg7XG4gICAgcGF0dGVybi5keSA9IGR5O1xuICAgIHBhdHRlcm4ubWF0cml4ID0gbWF0cml4IHx8IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICByZXR1cm4gcGF0dGVybjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRvY1VzZVBhdHRlcm4ocGF0dGVybiwgc3Ryb2tlKSB7XG4gICAgdmFyIG5hbWUgPSAnUCcgKyAoZG9jLl9wYXR0ZXJuQ291bnQgPSAoZG9jLl9wYXR0ZXJuQ291bnQgfHwgMCkgKyAxKTtcbiAgICB2YXIgcmVmID0gZG9jLnJlZih7XG4gICAgICBUeXBlOiAnUGF0dGVybicsXG4gICAgICBQYXR0ZXJuVHlwZTogMSxcbiAgICAgIFBhaW50VHlwZTogMSxcbiAgICAgIFRpbGluZ1R5cGU6IDIsXG4gICAgICBCQm94OiBbMCwgMCwgcGF0dGVybi5keCwgcGF0dGVybi5keV0sXG4gICAgICBYU3RlcDogcGF0dGVybi5keCxcbiAgICAgIFlTdGVwOiBwYXR0ZXJuLmR5LFxuICAgICAgTWF0cml4OiBtdWx0aXBseU1hdHJpeChkb2MuX2N0bSwgcGF0dGVybi5tYXRyaXgpLFxuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIFByb2NTZXQ6IFsnUERGJywgJ1RleHQnLCAnSW1hZ2VCJywgJ0ltYWdlQycsICdJbWFnZUknXSxcbiAgICAgICAgWE9iamVjdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciB0ZW1wID0ge307XG4gICAgICAgICAgdGVtcFtwYXR0ZXJuLmdyb3VwLm5hbWVdID0gcGF0dGVybi5ncm91cC54b2JqO1xuICAgICAgICAgIHJldHVybiB0ZW1wO1xuICAgICAgICB9KClcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZWYud3JpdGUoJy8nICsgcGF0dGVybi5ncm91cC5uYW1lICsgJyBEbycpO1xuICAgIHJlZi5lbmQoKTtcbiAgICBkb2MucGFnZS5wYXR0ZXJuc1tuYW1lXSA9IHJlZjtcblxuICAgIGlmIChzdHJva2UpIHtcbiAgICAgIGRvYy5hZGRDb250ZW50KCcvUGF0dGVybiBDUycpO1xuICAgICAgZG9jLmFkZENvbnRlbnQoJy8nICsgbmFtZSArICcgU0NOJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvYy5hZGRDb250ZW50KCcvUGF0dGVybiBjcycpO1xuICAgICAgZG9jLmFkZENvbnRlbnQoJy8nICsgbmFtZSArICcgc2NuJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZG9jQmVnaW5UZXh0KGZvbnQsIHNpemUpIHtcbiAgICBpZiAoIWRvYy5wYWdlLmZvbnRzW2ZvbnQuaWRdKSB7XG4gICAgICBkb2MucGFnZS5mb250c1tmb250LmlkXSA9IGZvbnQucmVmKCk7XG4gICAgfVxuXG4gICAgZG9jLmFkZENvbnRlbnQoJ0JUJykuYWRkQ29udGVudCgnLycgKyBmb250LmlkICsgJyAnICsgc2l6ZSArICcgVGYnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRvY1NldFRleHRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZikge1xuICAgIGRvYy5hZGRDb250ZW50KHZhbGlkYXRlTnVtYmVyKGEpICsgJyAnICsgdmFsaWRhdGVOdW1iZXIoYikgKyAnICcgKyB2YWxpZGF0ZU51bWJlcigtYykgKyAnICcgKyB2YWxpZGF0ZU51bWJlcigtZCkgKyAnICcgKyB2YWxpZGF0ZU51bWJlcihlKSArICcgJyArIHZhbGlkYXRlTnVtYmVyKGYpICsgJyBUbScpO1xuICB9XG5cbiAgZnVuY3Rpb24gZG9jU2V0VGV4dE1vZGUoZmlsbCwgc3Ryb2tlKSB7XG4gICAgdmFyIG1vZGUgPSBmaWxsICYmIHN0cm9rZSA/IDIgOiBzdHJva2UgPyAxIDogZmlsbCA/IDAgOiAzO1xuICAgIGRvYy5hZGRDb250ZW50KG1vZGUgKyAnIFRyJyk7XG4gIH1cblxuICBmdW5jdGlvbiBkb2NXcml0ZUdseXBoKGdseXBoKSB7XG4gICAgZG9jLmFkZENvbnRlbnQoJzwnICsgZ2x5cGggKyAnPiBUaicpO1xuICB9XG5cbiAgZnVuY3Rpb24gZG9jRW5kVGV4dCgpIHtcbiAgICBkb2MuYWRkQ29udGVudCgnRVQnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRvY0ZpbGxDb2xvcihjb2xvcikge1xuICAgIGlmIChjb2xvclswXS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUERGUGF0dGVybicpIHtcbiAgICAgIGRvYy5maWxsT3BhY2l0eShjb2xvclsxXSk7XG4gICAgICBkb2NVc2VQYXR0ZXJuKGNvbG9yWzBdLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvYy5maWxsQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkb2NTdHJva2VDb2xvcihjb2xvcikge1xuICAgIGlmIChjb2xvclswXS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUERGUGF0dGVybicpIHtcbiAgICAgIGRvYy5zdHJva2VPcGFjaXR5KGNvbG9yWzFdKTtcbiAgICAgIGRvY1VzZVBhdHRlcm4oY29sb3JbMF0sIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2Muc3Ryb2tlQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkb2NJbnNlcnRMaW5rKHgsIHksIHcsIGgsIHVybCkge1xuICAgIHZhciByZWYgPSBkb2MucmVmKHtcbiAgICAgIFR5cGU6ICdBbm5vdCcsXG4gICAgICBTdWJ0eXBlOiAnTGluaycsXG4gICAgICBSZWN0OiBbeCwgeSwgdywgaF0sXG4gICAgICBCb3JkZXI6IFswLCAwLCAwXSxcbiAgICAgIEE6IHtcbiAgICAgICAgUzogJ1VSSScsXG4gICAgICAgIFVSSTogbmV3IFN0cmluZyh1cmwpXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVmLmVuZCgpO1xuICAgIGxpbmtzLnB1c2gocmVmKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlWG1sKHhtbCkge1xuICAgIHZhciBTdmdOb2RlID0gZnVuY3Rpb24gU3ZnTm9kZSh0YWcsIHR5cGUsIHZhbHVlLCBlcnJvcikge1xuICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgdGhpcy5ub2RlTmFtZSA9IHRhZztcbiAgICAgIHRoaXMubm9kZVZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLm5vZGVUeXBlID0gdHlwZTtcbiAgICAgIHRoaXMuYXR0cmlidXRlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB0aGlzLmNoaWxkTm9kZXMgPSBbXTtcbiAgICAgIHRoaXMucGFyZW50Tm9kZSA9IG51bGw7XG4gICAgICB0aGlzLmlkID0gJyc7XG4gICAgICB0aGlzLnRleHRDb250ZW50ID0gJyc7XG4gICAgICB0aGlzLmNsYXNzTGlzdCA9IFtdO1xuICAgIH07XG5cbiAgICBTdmdOb2RlLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoYXR0cikge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1thdHRyXSAhPSBudWxsID8gdGhpcy5hdHRyaWJ1dGVzW2F0dHJdIDogbnVsbDtcbiAgICB9O1xuXG4gICAgU3ZnTm9kZS5wcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBudWxsO1xuXG4gICAgICAoZnVuY3Rpb24gcmVjdXJzaXZlKG5vZGUpIHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgaWYgKG5vZGUuaWQgPT09IGlkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBub2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZWN1cnNpdmUobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKHRoaXMpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBTdmdOb2RlLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgKGZ1bmN0aW9uIHJlY3Vyc2l2ZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09IHRhZykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZShub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkodGhpcyk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHZhciBwYXJzZXIgPSBuZXcgU3RyaW5nUGFyc2VyKHhtbC50cmltKCkpLFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIGNoaWxkLFxuICAgICAgICBlcnJvciA9IGZhbHNlO1xuXG4gICAgdmFyIHJlY3Vyc2l2ZSA9IGZ1bmN0aW9uIHJlY3Vyc2l2ZSgpIHtcbiAgICAgIHZhciB0ZW1wLCBjaGlsZDtcblxuICAgICAgaWYgKHRlbXAgPSBwYXJzZXIubWF0Y2goL148KFtcXHc6Li1dKylcXHMqLywgdHJ1ZSkpIHtcbiAgICAgICAgLy8gT3BlbmluZyB0YWdcbiAgICAgICAgdmFyIG5vZGUgPSBuZXcgU3ZnTm9kZSh0ZW1wWzFdLCAxLCBudWxsLCBlcnJvcik7XG5cbiAgICAgICAgd2hpbGUgKHRlbXAgPSBwYXJzZXIubWF0Y2goL14oW1xcdzouLV0rKSg/Olxccyo9XFxzKlwiKFteXCJdKilcInxcXHMqPVxccyonKFteJ10qKScpP1xccyovLCB0cnVlKSkge1xuICAgICAgICAgIC8vIEF0dHJpYnV0ZVxuICAgICAgICAgIHZhciBhdHRyID0gdGVtcFsxXSxcbiAgICAgICAgICAgICAgdmFsdWUgPSBkZWNvZGVFbnRpdGllcyh0ZW1wWzJdIHx8IHRlbXBbM10gfHwgJycpO1xuXG4gICAgICAgICAgaWYgKCFub2RlLmF0dHJpYnV0ZXNbYXR0cl0pIHtcbiAgICAgICAgICAgIG5vZGUuYXR0cmlidXRlc1thdHRyXSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoYXR0ciA9PT0gJ2lkJykge1xuICAgICAgICAgICAgICBub2RlLmlkID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhdHRyID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2FybmluZ0NhbGxiYWNrKCdwYXJzZVhtbDogZHVwbGljYXRlIGF0dHJpYnV0ZSBcIicgKyBhdHRyICsgJ1wiJyk7XG4gICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlci5tYXRjaCgvXj4vKSkge1xuICAgICAgICAgIC8vIEVuZCBvZiBvcGVuaW5nIHRhZ1xuICAgICAgICAgIHdoaWxlIChjaGlsZCA9IHJlY3Vyc2l2ZSgpKSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkTm9kZXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgKz0gY2hpbGQubm9kZVR5cGUgPT09IDMgfHwgY2hpbGQubm9kZVR5cGUgPT09IDQgPyBjaGlsZC5ub2RlVmFsdWUgOiBjaGlsZC50ZXh0Q29udGVudDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGVtcCA9IHBhcnNlci5tYXRjaCgvXjxcXC8oW1xcdzouLV0rKVxccyo+LywgdHJ1ZSkpIHtcbiAgICAgICAgICAgIC8vIENsb3NpbmcgdGFnXG4gICAgICAgICAgICBpZiAodGVtcFsxXSA9PT0gbm9kZS5ub2RlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdhcm5pbmdDYWxsYmFjaygncGFyc2VYbWw6IHRhZyBub3QgbWF0Y2hpbmcsIG9wZW5pbmcgXCInICsgbm9kZS5ub2RlTmFtZSArICdcIiAmIGNsb3NpbmcgXCInICsgdGVtcFsxXSArICdcIicpO1xuICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3YXJuaW5nQ2FsbGJhY2soJ3BhcnNlWG1sOiB0YWcgbm90IG1hdGNoaW5nLCBvcGVuaW5nIFwiJyArIG5vZGUubm9kZU5hbWUgKyAnXCIgJiBub3QgY2xvc2luZycpO1xuICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnNlci5tYXRjaCgvXlxcLz4vKSkge1xuICAgICAgICAgIC8vIFNlbGYtY2xvc2luZyB0YWdcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YXJuaW5nQ2FsbGJhY2soJ3BhcnNlWG1sOiB0YWcgY291bGQgbm90IGJlIHBhcnNlZCBcIicgKyBub2RlLm5vZGVOYW1lICsgJ1wiJyk7XG4gICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRlbXAgPSBwYXJzZXIubWF0Y2goL148IS0tW1xcc1xcU10qPy0tPi8pKSB7XG4gICAgICAgIC8vIENvbW1lbnRcbiAgICAgICAgcmV0dXJuIG5ldyBTdmdOb2RlKG51bGwsIDgsIHRlbXAsIGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAodGVtcCA9IHBhcnNlci5tYXRjaCgvXjxcXD9bXFxzXFxTXSo/XFw/Pi8pKSB7XG4gICAgICAgIC8vIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgICAgIHJldHVybiBuZXcgU3ZnTm9kZShudWxsLCA3LCB0ZW1wLCBlcnJvcik7XG4gICAgICB9IGVsc2UgaWYgKHRlbXAgPSBwYXJzZXIubWF0Y2goL148IURPQ1RZUEVcXHMqKFtcXHNcXFNdKj8pPi8pKSB7XG4gICAgICAgIC8vIERvY3R5cGVcbiAgICAgICAgcmV0dXJuIG5ldyBTdmdOb2RlKG51bGwsIDEwLCB0ZW1wLCBlcnJvcik7XG4gICAgICB9IGVsc2UgaWYgKHRlbXAgPSBwYXJzZXIubWF0Y2goL148IVxcW0NEQVRBXFxbKFtcXHNcXFNdKj8pXFxdXFxdPi8sIHRydWUpKSB7XG4gICAgICAgIC8vIENkYXRhIG5vZGVcbiAgICAgICAgcmV0dXJuIG5ldyBTdmdOb2RlKCcjY2RhdGEtc2VjdGlvbicsIDQsIHRlbXBbMV0sIGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAodGVtcCA9IHBhcnNlci5tYXRjaCgvXihbXjxdKykvLCB0cnVlKSkge1xuICAgICAgICAvLyBUZXh0IG5vZGVcbiAgICAgICAgcmV0dXJuIG5ldyBTdmdOb2RlKCcjdGV4dCcsIDMsIGRlY29kZUVudGl0aWVzKHRlbXBbMV0pLCBlcnJvcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdoaWxlIChjaGlsZCA9IHJlY3Vyc2l2ZSgpKSB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEgJiYgIXJlc3VsdCkge1xuICAgICAgICByZXN1bHQgPSBjaGlsZDtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEgfHwgY2hpbGQubm9kZVR5cGUgPT09IDMgJiYgY2hpbGQubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgd2FybmluZ0NhbGxiYWNrKCdwYXJzZVhtbDogZGF0YSBhZnRlciBkb2N1bWVudCBlbmQgaGFzIGJlZW4gZGlzY2FyZGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlci5tYXRjaEFsbCgpKSB7XG4gICAgICB3YXJuaW5nQ2FsbGJhY2soJ3BhcnNlWG1sOiBwYXJzaW5nIGVycm9yJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIDtcblxuICBmdW5jdGlvbiBkZWNvZGVFbnRpdGllcyhzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyYoPzojKFswLTldKyl8I1t4WF0oWzAtOUEtRmEtZl0rKXwoWzAtOUEtWmEtel0rKSk7L2csIGZ1bmN0aW9uIChtdCwgbTAsIG0xLCBtMikge1xuICAgICAgaWYgKG0wKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG0wLCAxMCkpO1xuICAgICAgfSBlbHNlIGlmIChtMSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChtMSwgMTYpKTtcbiAgICAgIH0gZWxzZSBpZiAobTIgJiYgRW50aXRpZXNbbTJdKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKEVudGl0aWVzW20yXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbXQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNvbG9yKHJhdykge1xuICAgIHZhciB0ZW1wLCByZXN1bHQ7XG4gICAgcmF3ID0gKHJhdyB8fCAnJykudHJpbSgpO1xuXG4gICAgaWYgKHRlbXAgPSBOYW1lZENvbG9yc1tyYXddKSB7XG4gICAgICByZXN1bHQgPSBbdGVtcC5zbGljZSgpLCAxXTtcbiAgICB9IGVsc2UgaWYgKHRlbXAgPSByYXcubWF0Y2goL15yZ2JhXFwoXFxzKihbMC05XSspXFxzKixcXHMqKFswLTldKylcXHMqLFxccyooWzAtOV0rKVxccyosXFxzKihbMC05Ll0rKVxccypcXCkkL2kpKSB7XG4gICAgICB0ZW1wWzFdID0gcGFyc2VJbnQodGVtcFsxXSk7XG4gICAgICB0ZW1wWzJdID0gcGFyc2VJbnQodGVtcFsyXSk7XG4gICAgICB0ZW1wWzNdID0gcGFyc2VJbnQodGVtcFszXSk7XG4gICAgICB0ZW1wWzRdID0gcGFyc2VGbG9hdCh0ZW1wWzRdKTtcblxuICAgICAgaWYgKHRlbXBbMV0gPCAyNTYgJiYgdGVtcFsyXSA8IDI1NiAmJiB0ZW1wWzNdIDwgMjU2ICYmIHRlbXBbNF0gPD0gMSkge1xuICAgICAgICByZXN1bHQgPSBbdGVtcC5zbGljZSgxLCA0KSwgdGVtcFs0XV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0ZW1wID0gcmF3Lm1hdGNoKC9ecmdiXFwoXFxzKihbMC05XSspXFxzKixcXHMqKFswLTldKylcXHMqLFxccyooWzAtOV0rKVxccypcXCkkL2kpKSB7XG4gICAgICB0ZW1wWzFdID0gcGFyc2VJbnQodGVtcFsxXSk7XG4gICAgICB0ZW1wWzJdID0gcGFyc2VJbnQodGVtcFsyXSk7XG4gICAgICB0ZW1wWzNdID0gcGFyc2VJbnQodGVtcFszXSk7XG5cbiAgICAgIGlmICh0ZW1wWzFdIDwgMjU2ICYmIHRlbXBbMl0gPCAyNTYgJiYgdGVtcFszXSA8IDI1Nikge1xuICAgICAgICByZXN1bHQgPSBbdGVtcC5zbGljZSgxLCA0KSwgMV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0ZW1wID0gcmF3Lm1hdGNoKC9ecmdiXFwoXFxzKihbMC05Ll0rKSVcXHMqLFxccyooWzAtOS5dKyklXFxzKixcXHMqKFswLTkuXSspJVxccypcXCkkL2kpKSB7XG4gICAgICB0ZW1wWzFdID0gMi41NSAqIHBhcnNlRmxvYXQodGVtcFsxXSk7XG4gICAgICB0ZW1wWzJdID0gMi41NSAqIHBhcnNlRmxvYXQodGVtcFsyXSk7XG4gICAgICB0ZW1wWzNdID0gMi41NSAqIHBhcnNlRmxvYXQodGVtcFszXSk7XG5cbiAgICAgIGlmICh0ZW1wWzFdIDwgMjU2ICYmIHRlbXBbMl0gPCAyNTYgJiYgdGVtcFszXSA8IDI1Nikge1xuICAgICAgICByZXN1bHQgPSBbdGVtcC5zbGljZSgxLCA0KSwgMV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0ZW1wID0gcmF3Lm1hdGNoKC9eIyhbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KSQvaSkpIHtcbiAgICAgIHJlc3VsdCA9IFtbcGFyc2VJbnQodGVtcFsxXSwgMTYpLCBwYXJzZUludCh0ZW1wWzJdLCAxNiksIHBhcnNlSW50KHRlbXBbM10sIDE2KV0sIDFdO1xuICAgIH0gZWxzZSBpZiAodGVtcCA9IHJhdy5tYXRjaCgvXiMoWzAtOWEtZl0pKFswLTlhLWZdKShbMC05YS1mXSkkL2kpKSB7XG4gICAgICByZXN1bHQgPSBbWzB4MTEgKiBwYXJzZUludCh0ZW1wWzFdLCAxNiksIDB4MTEgKiBwYXJzZUludCh0ZW1wWzJdLCAxNiksIDB4MTEgKiBwYXJzZUludCh0ZW1wWzNdLCAxNildLCAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sb3JDYWxsYmFjayA/IGNvbG9yQ2FsbGJhY2socmVzdWx0LCByYXcpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gb3BhY2l0eVRvQ29sb3IoY29sb3IsIG9wYWNpdHksIGlzTWFzaykge1xuICAgIHZhciBuZXdDb2xvciA9IGNvbG9yWzBdLnNsaWNlKCksXG4gICAgICAgIG5ld09wYWNpdHkgPSBjb2xvclsxXSAqIG9wYWNpdHk7XG5cbiAgICBpZiAoaXNNYXNrKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5ld0NvbG9yW2ldICo9IG5ld09wYWNpdHk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbmV3Q29sb3IsIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW25ld0NvbG9yLCBuZXdPcGFjaXR5XTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtdWx0aXBseU1hdHJpeCgpIHtcbiAgICBmdW5jdGlvbiBtdWx0aXBseShhLCBiKSB7XG4gICAgICByZXR1cm4gW2FbMF0gKiBiWzBdICsgYVsyXSAqIGJbMV0sIGFbMV0gKiBiWzBdICsgYVszXSAqIGJbMV0sIGFbMF0gKiBiWzJdICsgYVsyXSAqIGJbM10sIGFbMV0gKiBiWzJdICsgYVszXSAqIGJbM10sIGFbMF0gKiBiWzRdICsgYVsyXSAqIGJbNV0gKyBhWzRdLCBhWzFdICogYls0XSArIGFbM10gKiBiWzVdICsgYVs1XV07XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IGFyZ3VtZW50c1swXTtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQgPSBtdWx0aXBseShyZXN1bHQsIGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50KHAsIG0pIHtcbiAgICByZXR1cm4gW21bMF0gKiBwWzBdICsgbVsyXSAqIHBbMV0gKyBtWzRdLCBtWzFdICogcFswXSArIG1bM10gKiBwWzFdICsgbVs1XV07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRHbG9iYWxNYXRyaXgoKSB7XG4gICAgdmFyIGN0bSA9IGRvYy5fY3RtO1xuXG4gICAgZm9yICh2YXIgaSA9IGdyb3VwU3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGN0bSA9IG11bHRpcGx5TWF0cml4KGdyb3VwU3RhY2tbaV0uc2F2ZWRNYXRyaXgsIGN0bSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN0bTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhZ2VCQm94KCkge1xuICAgIHJldHVybiBuZXcgU3ZnU2hhcGUoKS5NKDAsIDApLkwoZG9jLnBhZ2Uud2lkdGgsIDApLkwoZG9jLnBhZ2Uud2lkdGgsIGRvYy5wYWdlLmhlaWdodCkuTCgwLCBkb2MucGFnZS5oZWlnaHQpLnRyYW5zZm9ybShpbnZlcnNlTWF0cml4KGdldEdsb2JhbE1hdHJpeCgpKSkuZ2V0Qm91bmRpbmdCb3goKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmVyc2VNYXRyaXgobSkge1xuICAgIHZhciBkdCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgcmV0dXJuIFttWzNdIC8gZHQsIC1tWzFdIC8gZHQsIC1tWzJdIC8gZHQsIG1bMF0gLyBkdCwgKG1bMl0gKiBtWzVdIC0gbVszXSAqIG1bNF0pIC8gZHQsIChtWzFdICogbVs0XSAtIG1bMF0gKiBtWzVdKSAvIGR0XTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlTWF0cml4KG0pIHtcbiAgICB2YXIgbTAgPSB2YWxpZGF0ZU51bWJlcihtWzBdKSxcbiAgICAgICAgbTEgPSB2YWxpZGF0ZU51bWJlcihtWzFdKSxcbiAgICAgICAgbTIgPSB2YWxpZGF0ZU51bWJlcihtWzJdKSxcbiAgICAgICAgbTMgPSB2YWxpZGF0ZU51bWJlcihtWzNdKSxcbiAgICAgICAgbTQgPSB2YWxpZGF0ZU51bWJlcihtWzRdKSxcbiAgICAgICAgbTUgPSB2YWxpZGF0ZU51bWJlcihtWzVdKTtcblxuICAgIGlmIChpc05vdEVxdWFsKG0wICogbTMgLSBtMSAqIG0yLCAwKSkge1xuICAgICAgcmV0dXJuIFttMCwgbTEsIG0yLCBtMywgbTQsIG01XTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzb2x2ZUVxdWF0aW9uKGN1cnZlKSB7XG4gICAgdmFyIGEgPSBjdXJ2ZVsyXSB8fCAwLFxuICAgICAgICBiID0gY3VydmVbMV0gfHwgMCxcbiAgICAgICAgYyA9IGN1cnZlWzBdIHx8IDA7XG5cbiAgICBpZiAoaXNFcXVhbChhLCAwKSAmJiBpc0VxdWFsKGIsIDApKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIGlmIChpc0VxdWFsKGEsIDApKSB7XG4gICAgICByZXR1cm4gWy1jIC8gYl07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBkID0gYiAqIGIgLSA0ICogYSAqIGM7XG5cbiAgICAgIGlmIChpc05vdEVxdWFsKGQsIDApICYmIGQgPiAwKSB7XG4gICAgICAgIHJldHVybiBbKC1iICsgTWF0aC5zcXJ0KGQpKSAvICgyICogYSksICgtYiAtIE1hdGguc3FydChkKSkgLyAoMiAqIGEpXTtcbiAgICAgIH0gZWxzZSBpZiAoaXNFcXVhbChkLCAwKSkge1xuICAgICAgICByZXR1cm4gWy1iIC8gKDIgKiBhKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q3VydmVWYWx1ZSh0LCBjdXJ2ZSkge1xuICAgIHJldHVybiAoY3VydmVbMF0gfHwgMCkgKyAoY3VydmVbMV0gfHwgMCkgKiB0ICsgKGN1cnZlWzJdIHx8IDApICogdCAqIHQgKyAoY3VydmVbM10gfHwgMCkgKiB0ICogdCAqIHQ7XG4gIH1cblxuICBmdW5jdGlvbiBpc0VxdWFsKG51bWJlciwgcmVmKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKG51bWJlciAtIHJlZikgPCAxZS0xMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm90RXF1YWwobnVtYmVyLCByZWYpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMobnVtYmVyIC0gcmVmKSA+PSAxZS0xMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyKG4pIHtcbiAgICByZXR1cm4gbiA+IC0xZTIxICYmIG4gPCAxZTIxID8gTWF0aC5yb3VuZChuICogMWU2KSAvIDFlNiA6IDA7XG4gIH1cblxuICBmdW5jdGlvbiBpc0FycmF5TGlrZSh2KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmIHR5cGVvZiB2Lmxlbmd0aCA9PT0gJ251bWJlcic7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVRyYW5mb3JtKHYpIHtcbiAgICB2YXIgcGFyc2VyID0gbmV3IFN0cmluZ1BhcnNlcigodiB8fCAnJykudHJpbSgpKSxcbiAgICAgICAgcmVzdWx0ID0gWzEsIDAsIDAsIDEsIDAsIDBdLFxuICAgICAgICB0ZW1wO1xuXG4gICAgd2hpbGUgKHRlbXAgPSBwYXJzZXIubWF0Y2goL14oW0EtWmEtel0rKVxccypbKF0oW14oXSspWyldLywgdHJ1ZSkpIHtcbiAgICAgIHZhciBmdW5jID0gdGVtcFsxXSxcbiAgICAgICAgICBudW1zID0gW10sXG4gICAgICAgICAgcGFyc2VyMiA9IG5ldyBTdHJpbmdQYXJzZXIodGVtcFsyXS50cmltKCkpLFxuICAgICAgICAgIHRlbXAyID0gdm9pZCAwO1xuXG4gICAgICB3aGlsZSAodGVtcDIgPSBwYXJzZXIyLm1hdGNoTnVtYmVyKCkpIHtcbiAgICAgICAgbnVtcy5wdXNoKE51bWJlcih0ZW1wMikpO1xuICAgICAgICBwYXJzZXIyLm1hdGNoU2VwYXJhdG9yKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmdW5jID09PSAnbWF0cml4JyAmJiBudW1zLmxlbmd0aCA9PT0gNikge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseU1hdHJpeChyZXN1bHQsIFtudW1zWzBdLCBudW1zWzFdLCBudW1zWzJdLCBudW1zWzNdLCBudW1zWzRdLCBudW1zWzVdXSk7XG4gICAgICB9IGVsc2UgaWYgKGZ1bmMgPT09ICd0cmFuc2xhdGUnICYmIG51bXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHJlc3VsdCA9IG11bHRpcGx5TWF0cml4KHJlc3VsdCwgWzEsIDAsIDAsIDEsIG51bXNbMF0sIG51bXNbMV1dKTtcbiAgICAgIH0gZWxzZSBpZiAoZnVuYyA9PT0gJ3RyYW5zbGF0ZScgJiYgbnVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmVzdWx0ID0gbXVsdGlwbHlNYXRyaXgocmVzdWx0LCBbMSwgMCwgMCwgMSwgbnVtc1swXSwgMF0pO1xuICAgICAgfSBlbHNlIGlmIChmdW5jID09PSAnc2NhbGUnICYmIG51bXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHJlc3VsdCA9IG11bHRpcGx5TWF0cml4KHJlc3VsdCwgW251bXNbMF0sIDAsIDAsIG51bXNbMV0sIDAsIDBdKTtcbiAgICAgIH0gZWxzZSBpZiAoZnVuYyA9PT0gJ3NjYWxlJyAmJiBudW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseU1hdHJpeChyZXN1bHQsIFtudW1zWzBdLCAwLCAwLCBudW1zWzBdLCAwLCAwXSk7XG4gICAgICB9IGVsc2UgaWYgKGZ1bmMgPT09ICdyb3RhdGUnICYmIG51bXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHZhciBhID0gbnVtc1swXSAqIE1hdGguUEkgLyAxODA7XG4gICAgICAgIHJlc3VsdCA9IG11bHRpcGx5TWF0cml4KHJlc3VsdCwgWzEsIDAsIDAsIDEsIG51bXNbMV0sIG51bXNbMl1dLCBbTWF0aC5jb3MoYSksIE1hdGguc2luKGEpLCAtTWF0aC5zaW4oYSksIE1hdGguY29zKGEpLCAwLCAwXSwgWzEsIDAsIDAsIDEsIC1udW1zWzFdLCAtbnVtc1syXV0pO1xuICAgICAgfSBlbHNlIGlmIChmdW5jID09PSAncm90YXRlJyAmJiBudW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgX2EgPSBudW1zWzBdICogTWF0aC5QSSAvIDE4MDtcblxuICAgICAgICByZXN1bHQgPSBtdWx0aXBseU1hdHJpeChyZXN1bHQsIFtNYXRoLmNvcyhfYSksIE1hdGguc2luKF9hKSwgLU1hdGguc2luKF9hKSwgTWF0aC5jb3MoX2EpLCAwLCAwXSk7XG4gICAgICB9IGVsc2UgaWYgKGZ1bmMgPT09ICdza2V3WCcgJiYgbnVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIF9hMiA9IG51bXNbMF0gKiBNYXRoLlBJIC8gMTgwO1xuXG4gICAgICAgIHJlc3VsdCA9IG11bHRpcGx5TWF0cml4KHJlc3VsdCwgWzEsIDAsIE1hdGgudGFuKF9hMiksIDEsIDAsIDBdKTtcbiAgICAgIH0gZWxzZSBpZiAoZnVuYyA9PT0gJ3NrZXdZJyAmJiBudW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgX2EzID0gbnVtc1swXSAqIE1hdGguUEkgLyAxODA7XG5cbiAgICAgICAgcmVzdWx0ID0gbXVsdGlwbHlNYXRyaXgocmVzdWx0LCBbMSwgTWF0aC50YW4oX2EzKSwgMCwgMSwgMCwgMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwYXJzZXIubWF0Y2hTZXBhcmF0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VyLm1hdGNoQWxsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VBc3BlY3RSYXRpbyhhc3BlY3RSYXRpbywgYXZhaWxXaWR0aCwgYXZhaWxIZWlnaHQsIGVsZW1XaWR0aCwgZWxlbUhlaWdodCwgaW5pdEFsaWduKSB7XG4gICAgdmFyIHRlbXAgPSAoYXNwZWN0UmF0aW8gfHwgJycpLnRyaW0oKS5tYXRjaCgvXihub25lKSR8XngoTWlufE1pZHxNYXgpWShNaW58TWlkfE1heCkoPzpcXHMrKG1lZXR8c2xpY2UpKT8kLykgfHwgW10sXG4gICAgICAgIHJhdGlvVHlwZSA9IHRlbXBbMV0gfHwgdGVtcFs0XSB8fCAnbWVldCcsXG4gICAgICAgIHhBbGlnbiA9IHRlbXBbMl0gfHwgJ01pZCcsXG4gICAgICAgIHlBbGlnbiA9IHRlbXBbM10gfHwgJ01pZCcsXG4gICAgICAgIHNjYWxlWCA9IGF2YWlsV2lkdGggLyBlbGVtV2lkdGgsXG4gICAgICAgIHNjYWxlWSA9IGF2YWlsSGVpZ2h0IC8gZWxlbUhlaWdodCxcbiAgICAgICAgZHggPSB7XG4gICAgICAnTWluJzogMCxcbiAgICAgICdNaWQnOiAwLjUsXG4gICAgICAnTWF4JzogMVxuICAgIH1beEFsaWduXSAtIChpbml0QWxpZ24gfHwgMCksXG4gICAgICAgIGR5ID0ge1xuICAgICAgJ01pbic6IDAsXG4gICAgICAnTWlkJzogMC41LFxuICAgICAgJ01heCc6IDFcbiAgICB9W3lBbGlnbl0gLSAoaW5pdEFsaWduIHx8IDApO1xuXG4gICAgaWYgKHJhdGlvVHlwZSA9PT0gJ3NsaWNlJykge1xuICAgICAgc2NhbGVZID0gc2NhbGVYID0gTWF0aC5tYXgoc2NhbGVYLCBzY2FsZVkpO1xuICAgIH0gZWxzZSBpZiAocmF0aW9UeXBlID09PSAnbWVldCcpIHtcbiAgICAgIHNjYWxlWSA9IHNjYWxlWCA9IE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3NjYWxlWCwgMCwgMCwgc2NhbGVZLCBkeCAqIChhdmFpbFdpZHRoIC0gZWxlbVdpZHRoICogc2NhbGVYKSwgZHkgKiAoYXZhaWxIZWlnaHQgLSBlbGVtSGVpZ2h0ICogc2NhbGVZKV07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVN0eWxlQXR0cih2KSB7XG4gICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdiA9ICh2IHx8ICcnKS50cmltKCkuc3BsaXQoLzsvKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9ICh2W2ldLnNwbGl0KCc6JylbMF0gfHwgJycpLnRyaW0oKSxcbiAgICAgICAgICB2YWx1ZSA9ICh2W2ldLnNwbGl0KCc6JylbMV0gfHwgJycpLnRyaW0oKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHRbJ21hcmtlciddKSB7XG4gICAgICBpZiAoIXJlc3VsdFsnbWFya2VyLXN0YXJ0J10pIHtcbiAgICAgICAgcmVzdWx0WydtYXJrZXItc3RhcnQnXSA9IHJlc3VsdFsnbWFya2VyJ107XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzdWx0WydtYXJrZXItbWlkJ10pIHtcbiAgICAgICAgcmVzdWx0WydtYXJrZXItbWlkJ10gPSByZXN1bHRbJ21hcmtlciddO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3VsdFsnbWFya2VyLWVuZCddKSB7XG4gICAgICAgIHJlc3VsdFsnbWFya2VyLWVuZCddID0gcmVzdWx0WydtYXJrZXInXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Wydmb250J10pIHtcbiAgICAgIHZhciBmb250RmFtaWx5ID0gbnVsbCxcbiAgICAgICAgICBmb250U2l6ZSA9IG51bGwsXG4gICAgICAgICAgZm9udFN0eWxlID0gXCJub3JtYWxcIixcbiAgICAgICAgICBmb250V2VpZ2h0ID0gXCJub3JtYWxcIixcbiAgICAgICAgICBmb250VmFyaWFudCA9IFwibm9ybWFsXCI7XG4gICAgICB2YXIgcGFydHMgPSByZXN1bHRbJ2ZvbnQnXS5zcGxpdCgvXFxzKy8pO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcGFydHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHN3aXRjaCAocGFydHNbX2ldKSB7XG4gICAgICAgICAgY2FzZSBcIm5vcm1hbFwiOlxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiaXRhbGljXCI6XG4gICAgICAgICAgY2FzZSBcIm9ibGlxdWVcIjpcbiAgICAgICAgICAgIGZvbnRTdHlsZSA9IHBhcnRzW19pXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInNtYWxsLWNhcHNcIjpcbiAgICAgICAgICAgIGZvbnRWYXJpYW50ID0gcGFydHNbX2ldO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiYm9sZFwiOlxuICAgICAgICAgIGNhc2UgXCJib2xkZXJcIjpcbiAgICAgICAgICBjYXNlIFwibGlnaHRlclwiOlxuICAgICAgICAgIGNhc2UgXCIxMDBcIjpcbiAgICAgICAgICBjYXNlIFwiMjAwXCI6XG4gICAgICAgICAgY2FzZSBcIjMwMFwiOlxuICAgICAgICAgIGNhc2UgXCI0MDBcIjpcbiAgICAgICAgICBjYXNlIFwiNTAwXCI6XG4gICAgICAgICAgY2FzZSBcIjYwMFwiOlxuICAgICAgICAgIGNhc2UgXCI3MDBcIjpcbiAgICAgICAgICBjYXNlIFwiODAwXCI6XG4gICAgICAgICAgY2FzZSBcIjkwMFwiOlxuICAgICAgICAgICAgZm9udFdlaWdodCA9IHBhcnRzW19pXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICghZm9udFNpemUpIHtcbiAgICAgICAgICAgICAgZm9udFNpemUgPSBwYXJ0c1tfaV0uc3BsaXQoJy8nKVswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICghZm9udEZhbWlseSkge1xuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHkgPSBwYXJ0c1tfaV07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9udEZhbWlseSArPSAnICcgKyBwYXJ0c1tfaV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN1bHRbJ2ZvbnQtc3R5bGUnXSkge1xuICAgICAgICByZXN1bHRbJ2ZvbnQtc3R5bGUnXSA9IGZvbnRTdHlsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN1bHRbJ2ZvbnQtdmFyaWFudCddKSB7XG4gICAgICAgIHJlc3VsdFsnZm9udC12YXJpYW50J10gPSBmb250VmFyaWFudDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN1bHRbJ2ZvbnQtd2VpZ2h0J10pIHtcbiAgICAgICAgcmVzdWx0Wydmb250LXdlaWdodCddID0gZm9udFdlaWdodDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN1bHRbJ2ZvbnQtc2l6ZSddKSB7XG4gICAgICAgIHJlc3VsdFsnZm9udC1zaXplJ10gPSBmb250U2l6ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN1bHRbJ2ZvbnQtZmFtaWx5J10pIHtcbiAgICAgICAgcmVzdWx0Wydmb250LWZhbWlseSddID0gZm9udEZhbWlseTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTZWxlY3Rvcih2KSB7XG4gICAgdmFyIHBhcnRzID0gdi5zcGxpdCgvKD89Wy4jXSkvZyksXG4gICAgICAgIGlkcyA9IFtdLFxuICAgICAgICBjbGFzc2VzID0gW10sXG4gICAgICAgIHRhZ3MgPSBbXSxcbiAgICAgICAgdGVtcDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0ZW1wID0gcGFydHNbaV0ubWF0Y2goL15bI10oW19BLVphLXowLTktXSspJC8pKSB7XG4gICAgICAgIGlkcy5wdXNoKHRlbXBbMV0pO1xuICAgICAgfSBlbHNlIGlmICh0ZW1wID0gcGFydHNbaV0ubWF0Y2goL15bLl0oW19BLVphLXowLTktXSspJC8pKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCh0ZW1wWzFdKTtcbiAgICAgIH0gZWxzZSBpZiAodGVtcCA9IHBhcnRzW2ldLm1hdGNoKC9eKFtfQS1aYS16MC05LV0rKSQvKSkge1xuICAgICAgICB0YWdzLnB1c2godGVtcFsxXSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnRzW2ldICE9PSAnKicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0YWdzOiB0YWdzLFxuICAgICAgaWRzOiBpZHMsXG4gICAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgICAgc3BlY2lmaWNpdHk6IGlkcy5sZW5ndGggKiAxMDAwMCArIGNsYXNzZXMubGVuZ3RoICogMTAwICsgdGFncy5sZW5ndGhcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTdHlsZVNoZWV0KHYpIHtcbiAgICB2YXIgcGFyc2VyID0gbmV3IFN0cmluZ1BhcnNlcih2LnRyaW0oKSksXG4gICAgICAgIHJ1bGVzID0gW10sXG4gICAgICAgIHJ1bGU7XG5cbiAgICB3aGlsZSAocnVsZSA9IHBhcnNlci5tYXRjaCgvXlxccyooW15cXHtcXH1dKj8pXFxzKlxceyhbXlxce1xcfV0qPylcXH0vLCB0cnVlKSkge1xuICAgICAgdmFyIHNlbGVjdG9ycyA9IHJ1bGVbMV0uc3BsaXQoL1xccyosXFxzKi9nKSxcbiAgICAgICAgICBjc3MgPSBwYXJzZVN0eWxlQXR0cihydWxlWzJdKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gcGFyc2VTZWxlY3RvcihzZWxlY3RvcnNbaV0pO1xuXG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgICAgICAgICAgY3NzOiBjc3NcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoZXNTZWxlY3RvcihlbGVtLCBzZWxlY3Rvcikge1xuICAgIGlmIChlbGVtLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3Rvci50YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc2VsZWN0b3IudGFnc1tpXSAhPT0gZWxlbS5ub2RlTmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgc2VsZWN0b3IuaWRzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIGlmIChzZWxlY3Rvci5pZHNbX2kyXSAhPT0gZWxlbS5pZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgc2VsZWN0b3IuY2xhc3Nlcy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICBpZiAoZWxlbS5jbGFzc0xpc3QuaW5kZXhPZihzZWxlY3Rvci5jbGFzc2VzW19pM10pID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTdHlsZShlbGVtKSB7XG4gICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIHNwZWNpZmljaXRpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcnVsZSA9IHN0eWxlUnVsZXNbaV07XG5cbiAgICAgIGlmIChtYXRjaGVzU2VsZWN0b3IoZWxlbSwgcnVsZS5zZWxlY3RvcikpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHJ1bGUuY3NzKSB7XG4gICAgICAgICAgaWYgKCEoc3BlY2lmaWNpdGllc1trZXldID4gcnVsZS5zZWxlY3Rvci5zcGVjaWZpY2l0eSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gcnVsZS5jc3Nba2V5XTtcbiAgICAgICAgICAgIHNwZWNpZmljaXRpZXNba2V5XSA9IHJ1bGUuc2VsZWN0b3Iuc3BlY2lmaWNpdHk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbWJpbmVBcnJheXMoYXJyYXkxLCBhcnJheTIpIHtcbiAgICByZXR1cm4gYXJyYXkxLmNvbmNhdChhcnJheTIuc2xpY2UoYXJyYXkxLmxlbmd0aCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QXNjZW50KGZvbnQsIHNpemUpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoZm9udC5hc2NlbmRlciwgKGZvbnQuYmJveFszXSB8fCBmb250LmJib3gubWF4WSkgKiAoZm9udC5zY2FsZSB8fCAxKSkgKiBzaXplIC8gMTAwMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERlc2NlbnQoZm9udCwgc2l6ZSkge1xuICAgIHJldHVybiBNYXRoLm1pbihmb250LmRlc2NlbmRlciwgKGZvbnQuYmJveFsxXSB8fCBmb250LmJib3gubWluWSkgKiAoZm9udC5zY2FsZSB8fCAxKSkgKiBzaXplIC8gMTAwMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFhIZWlnaHQoZm9udCwgc2l6ZSkge1xuICAgIHJldHVybiAoZm9udC54SGVpZ2h0IHx8IDAuNSAqIChmb250LmFzY2VuZGVyIC0gZm9udC5kZXNjZW5kZXIpKSAqIHNpemUgLyAxMDAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmFzZWxpbmUoZm9udCwgc2l6ZSwgYmFzZWxpbmUsIHNoaWZ0KSB7XG4gICAgdmFyIGR5MSwgZHkyO1xuXG4gICAgc3dpdGNoIChiYXNlbGluZSkge1xuICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgZHkxID0gMC41ICogZ2V0WEhlaWdodChmb250LCBzaXplKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2NlbnRyYWwnOlxuICAgICAgICBkeTEgPSAwLjUgKiAoZ2V0RGVzY2VudChmb250LCBzaXplKSArIGdldEFzY2VudChmb250LCBzaXplKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhZnRlci1lZGdlJzpcbiAgICAgIGNhc2UgJ3RleHQtYWZ0ZXItZWRnZSc6XG4gICAgICAgIGR5MSA9IGdldERlc2NlbnQoZm9udCwgc2l6ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhbHBoYWJldGljJzpcbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgY2FzZSAnYmFzZWxpbmUnOlxuICAgICAgICBkeTEgPSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbWF0aGVtYXRpY2FsJzpcbiAgICAgICAgZHkxID0gMC41ICogZ2V0QXNjZW50KGZvbnQsIHNpemUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnaGFuZ2luZyc6XG4gICAgICAgIGR5MSA9IDAuOCAqIGdldEFzY2VudChmb250LCBzaXplKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2JlZm9yZS1lZGdlJzpcbiAgICAgIGNhc2UgJ3RleHQtYmVmb3JlLWVkZ2UnOlxuICAgICAgICBkeTEgPSBnZXRBc2NlbnQoZm9udCwgc2l6ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBkeTEgPSAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNoaWZ0KSB7XG4gICAgICBjYXNlICdiYXNlbGluZSc6XG4gICAgICAgIGR5MiA9IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdXBlcic6XG4gICAgICAgIGR5MiA9IDAuNiAqIHNpemU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdWInOlxuICAgICAgICBkeTIgPSAtMC42ICogc2l6ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGR5MiA9IHNoaWZ0O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gZHkxIC0gZHkyO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VGV4dFBvcyhmb250LCBzaXplLCB0ZXh0KSB7XG4gICAgdmFyIGVuY29kZWQgPSBmb250LmVuY29kZSgnJyArIHRleHQpLFxuICAgICAgICBoZXggPSBlbmNvZGVkWzBdLFxuICAgICAgICBwb3MgPSBlbmNvZGVkWzFdLFxuICAgICAgICBkYXRhID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhleC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHVuaWNvZGUgPSBmb250LnVuaWNvZGUgPyBmb250LnVuaWNvZGVbcGFyc2VJbnQoaGV4W2ldLCAxNildIDogW3RleHQuY2hhckNvZGVBdChpKV07XG4gICAgICBkYXRhLnB1c2goe1xuICAgICAgICBnbHlwaDogaGV4W2ldLFxuICAgICAgICB1bmljb2RlOiB1bmljb2RlLFxuICAgICAgICB3aWR0aDogcG9zW2ldLmFkdmFuY2VXaWR0aCAqIHNpemUgLyAxMDAwLFxuICAgICAgICB4T2Zmc2V0OiBwb3NbaV0ueE9mZnNldCAqIHNpemUgLyAxMDAwLFxuICAgICAgICB5T2Zmc2V0OiBwb3NbaV0ueU9mZnNldCAqIHNpemUgLyAxMDAwLFxuICAgICAgICB4QWR2YW5jZTogcG9zW2ldLnhBZHZhbmNlICogc2l6ZSAvIDEwMDAsXG4gICAgICAgIHlBZHZhbmNlOiBwb3NbaV0ueUFkdmFuY2UgKiBzaXplIC8gMTAwMFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTVkdFbGVtZW50KG9iaiwgaW5oZXJpdHMpIHtcbiAgICBzd2l0Y2ggKG9iai5ub2RlTmFtZSkge1xuICAgICAgY2FzZSAndXNlJzpcbiAgICAgICAgcmV0dXJuIG5ldyBTdmdFbGVtVXNlKG9iaiwgaW5oZXJpdHMpO1xuXG4gICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICByZXR1cm4gbmV3IFN2Z0VsZW1TeW1ib2wob2JqLCBpbmhlcml0cyk7XG5cbiAgICAgIGNhc2UgJ2cnOlxuICAgICAgICByZXR1cm4gbmV3IFN2Z0VsZW1Hcm91cChvYmosIGluaGVyaXRzKTtcblxuICAgICAgY2FzZSAnYSc6XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbUxpbmsob2JqLCBpbmhlcml0cyk7XG5cbiAgICAgIGNhc2UgJ3N2Zyc6XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbVN2ZyhvYmosIGluaGVyaXRzKTtcblxuICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICByZXR1cm4gbmV3IFNWR0VsZW1JbWFnZShvYmosIGluaGVyaXRzKTtcblxuICAgICAgY2FzZSAncmVjdCc6XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbVJlY3Qob2JqLCBpbmhlcml0cyk7XG5cbiAgICAgIGNhc2UgJ2NpcmNsZSc6XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbUNpcmNsZShvYmosIGluaGVyaXRzKTtcblxuICAgICAgY2FzZSAnZWxsaXBzZSc6XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbUVsbGlwc2Uob2JqLCBpbmhlcml0cyk7XG5cbiAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICByZXR1cm4gbmV3IFN2Z0VsZW1MaW5lKG9iaiwgaW5oZXJpdHMpO1xuXG4gICAgICBjYXNlICdwb2x5bGluZSc6XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbVBvbHlsaW5lKG9iaiwgaW5oZXJpdHMpO1xuXG4gICAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgICAgcmV0dXJuIG5ldyBTdmdFbGVtUG9seWdvbihvYmosIGluaGVyaXRzKTtcblxuICAgICAgY2FzZSAncGF0aCc6XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbVBhdGgob2JqLCBpbmhlcml0cyk7XG5cbiAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICByZXR1cm4gbmV3IFN2Z0VsZW1UZXh0KG9iaiwgaW5oZXJpdHMpO1xuXG4gICAgICBjYXNlICd0c3Bhbic6XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbVRzcGFuKG9iaiwgaW5oZXJpdHMpO1xuXG4gICAgICBjYXNlICd0ZXh0UGF0aCc6XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbVRleHRQYXRoKG9iaiwgaW5oZXJpdHMpO1xuXG4gICAgICBjYXNlICcjdGV4dCc6XG4gICAgICBjYXNlICcjY2RhdGEtc2VjdGlvbic6XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbVRleHROb2RlKG9iaiwgaW5oZXJpdHMpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbmV3IFN2Z0VsZW0ob2JqLCBpbmhlcml0cyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIFN0cmluZ1BhcnNlciA9IGZ1bmN0aW9uIFN0cmluZ1BhcnNlcihzdHIpIHtcbiAgICB0aGlzLm1hdGNoID0gZnVuY3Rpb24gKGV4cCwgYWxsKSB7XG4gICAgICB2YXIgdGVtcCA9IHN0ci5tYXRjaChleHApO1xuXG4gICAgICBpZiAoIXRlbXAgfHwgdGVtcC5pbmRleCAhPT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcodGVtcFswXS5sZW5ndGgpO1xuICAgICAgcmV0dXJuIGFsbCA/IHRlbXAgOiB0ZW1wWzBdO1xuICAgIH07XG5cbiAgICB0aGlzLm1hdGNoU2VwYXJhdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWF0Y2goL14oPzpcXHMqLFxccyp8XFxzKnwpLyk7XG4gICAgfTtcblxuICAgIHRoaXMubWF0Y2hTcGFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1hdGNoKC9eKD86XFxzKikvKTtcbiAgICB9O1xuXG4gICAgdGhpcy5tYXRjaExlbmd0aFVuaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXRjaCgvXig/OnB4fHB0fGNtfG1tfGlufHBjfGVtfGV4fCV8KS8pO1xuICAgIH07XG5cbiAgICB0aGlzLm1hdGNoTnVtYmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWF0Y2goL14oPzpbLStdPyg/OlswLTldK1suXVswLTldK3xbMC05XStbLl18Wy5dWzAtOV0rfFswLTldKykoPzpbZUVdWy0rXT9bMC05XSspPykvKTtcbiAgICB9O1xuXG4gICAgdGhpcy5tYXRjaEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1hdGNoKC9eW1xcc1xcU10rLyk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgQmV6aWVyU2VnbWVudCA9IGZ1bmN0aW9uIEJlemllclNlZ21lbnQocDF4LCBwMXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBwMnkpIHtcbiAgICB2YXIgZGl2aXNpb25zID0gNiAqIHByZWNpc2lvbjtcbiAgICB2YXIgZXF1YXRpb25YID0gW3AxeCwgLTMgKiBwMXggKyAzICogYzF4LCAzICogcDF4IC0gNiAqIGMxeCArIDMgKiBjMngsIC1wMXggKyAzICogYzF4IC0gMyAqIGMyeCArIHAyeF07XG4gICAgdmFyIGVxdWF0aW9uWSA9IFtwMXksIC0zICogcDF5ICsgMyAqIGMxeSwgMyAqIHAxeSAtIDYgKiBjMXkgKyAzICogYzJ5LCAtcDF5ICsgMyAqIGMxeSAtIDMgKiBjMnkgKyBwMnldO1xuICAgIHZhciBkZXJpdmF0aXZlWCA9IFstMyAqIHAxeCArIDMgKiBjMXgsIDYgKiBwMXggLSAxMiAqIGMxeCArIDYgKiBjMngsIC0zICogcDF4ICsgOSAqIGMxeCAtIDkgKiBjMnggKyAzICogcDJ4XTtcbiAgICB2YXIgZGVyaXZhdGl2ZVkgPSBbLTMgKiBwMXkgKyAzICogYzF5LCA2ICogcDF5IC0gMTIgKiBjMXkgKyA2ICogYzJ5LCAtMyAqIHAxeSArIDkgKiBjMXkgLSA5ICogYzJ5ICsgMyAqIHAyeV07XG4gICAgdmFyIGxlbmd0aE1hcCA9IFswXTtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IGRpdmlzaW9uczsgaSsrKSB7XG4gICAgICB2YXIgdCA9IChpIC0gMC41KSAvIGRpdmlzaW9ucztcbiAgICAgIHZhciBkeCA9IGdldEN1cnZlVmFsdWUodCwgZGVyaXZhdGl2ZVgpIC8gZGl2aXNpb25zLFxuICAgICAgICAgIGR5ID0gZ2V0Q3VydmVWYWx1ZSh0LCBkZXJpdmF0aXZlWSkgLyBkaXZpc2lvbnMsXG4gICAgICAgICAgbCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICBsZW5ndGhNYXBbaV0gPSBsZW5ndGhNYXBbaSAtIDFdICsgbDtcbiAgICB9XG5cbiAgICB0aGlzLnRvdGFsTGVuZ3RoID0gbGVuZ3RoTWFwW2RpdmlzaW9uc107XG4gICAgdGhpcy5zdGFydFBvaW50ID0gW3AxeCwgcDF5LCBpc0VxdWFsKHAxeCwgYzF4KSAmJiBpc0VxdWFsKHAxeSwgYzF5KSA/IE1hdGguYXRhbjIoYzJ5IC0gYzF5LCBjMnggLSBjMXgpIDogTWF0aC5hdGFuMihjMXkgLSBwMXksIGMxeCAtIHAxeCldO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBbcDJ4LCBwMnksIGlzRXF1YWwoYzJ4LCBwMngpICYmIGlzRXF1YWwoYzJ5LCBwMnkpID8gTWF0aC5hdGFuMihjMnkgLSBjMXksIGMyeCAtIGMxeCkgOiBNYXRoLmF0YW4yKHAyeSAtIGMyeSwgcDJ4IC0gYzJ4KV07XG5cbiAgICB0aGlzLmdldEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRlbXA7XG4gICAgICB2YXIgbWluWCA9IGdldEN1cnZlVmFsdWUoMCwgZXF1YXRpb25YKSxcbiAgICAgICAgICBtaW5ZID0gZ2V0Q3VydmVWYWx1ZSgwLCBlcXVhdGlvblkpLFxuICAgICAgICAgIG1heFggPSBnZXRDdXJ2ZVZhbHVlKDEsIGVxdWF0aW9uWCksXG4gICAgICAgICAgbWF4WSA9IGdldEN1cnZlVmFsdWUoMSwgZXF1YXRpb25ZKTtcblxuICAgICAgaWYgKG1pblggPiBtYXhYKSB7XG4gICAgICAgIHRlbXAgPSBtYXhYO1xuICAgICAgICBtYXhYID0gbWluWDtcbiAgICAgICAgbWluWCA9IHRlbXA7XG4gICAgICB9XG5cbiAgICAgIGlmIChtaW5ZID4gbWF4WSkge1xuICAgICAgICB0ZW1wID0gbWF4WTtcbiAgICAgICAgbWF4WSA9IG1pblk7XG4gICAgICAgIG1pblkgPSB0ZW1wO1xuICAgICAgfVxuXG4gICAgICB2YXIgcm9vdHNYID0gc29sdmVFcXVhdGlvbihkZXJpdmF0aXZlWCk7XG5cbiAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IHJvb3RzWC5sZW5ndGg7IF9pNCsrKSB7XG4gICAgICAgIGlmIChyb290c1hbX2k0XSA+PSAwICYmIHJvb3RzWFtfaTRdIDw9IDEpIHtcbiAgICAgICAgICB2YXIgX3ggPSBnZXRDdXJ2ZVZhbHVlKHJvb3RzWFtfaTRdLCBlcXVhdGlvblgpO1xuXG4gICAgICAgICAgaWYgKF94IDwgbWluWCkge1xuICAgICAgICAgICAgbWluWCA9IF94O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfeCA+IG1heFgpIHtcbiAgICAgICAgICAgIG1heFggPSBfeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJvb3RzWSA9IHNvbHZlRXF1YXRpb24oZGVyaXZhdGl2ZVkpO1xuXG4gICAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCByb290c1kubGVuZ3RoOyBfaTUrKykge1xuICAgICAgICBpZiAocm9vdHNZW19pNV0gPj0gMCAmJiByb290c1lbX2k1XSA8PSAxKSB7XG4gICAgICAgICAgdmFyIF95ID0gZ2V0Q3VydmVWYWx1ZShyb290c1lbX2k1XSwgZXF1YXRpb25ZKTtcblxuICAgICAgICAgIGlmIChfeSA8IG1pblkpIHtcbiAgICAgICAgICAgIG1pblkgPSBfeTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX3kgPiBtYXhZKSB7XG4gICAgICAgICAgICBtYXhZID0gX3k7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbWluWCwgbWluWSwgbWF4WCwgbWF4WV07XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UG9pbnRBdExlbmd0aCA9IGZ1bmN0aW9uIChsKSB7XG4gICAgICBpZiAoaXNFcXVhbChsLCAwKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFBvaW50O1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNFcXVhbChsLCB0aGlzLnRvdGFsTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmRQb2ludDtcbiAgICAgIH1cblxuICAgICAgaWYgKGwgPCAwIHx8IGwgPiB0aGlzLnRvdGFsTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX2k2ID0gMTsgX2k2IDw9IGRpdmlzaW9uczsgX2k2KyspIHtcbiAgICAgICAgdmFyIGwxID0gbGVuZ3RoTWFwW19pNiAtIDFdLFxuICAgICAgICAgICAgbDIgPSBsZW5ndGhNYXBbX2k2XTtcblxuICAgICAgICBpZiAobDEgPD0gbCAmJiBsIDw9IGwyKSB7XG4gICAgICAgICAgdmFyIF90ID0gKF9pNiAtIChsMiAtIGwpIC8gKGwyIC0gbDEpKSAvIGRpdmlzaW9ucyxcbiAgICAgICAgICAgICAgX3gyID0gZ2V0Q3VydmVWYWx1ZShfdCwgZXF1YXRpb25YKSxcbiAgICAgICAgICAgICAgX3kyID0gZ2V0Q3VydmVWYWx1ZShfdCwgZXF1YXRpb25ZKSxcbiAgICAgICAgICAgICAgX2R4ID0gZ2V0Q3VydmVWYWx1ZShfdCwgZGVyaXZhdGl2ZVgpLFxuICAgICAgICAgICAgICBfZHkgPSBnZXRDdXJ2ZVZhbHVlKF90LCBkZXJpdmF0aXZlWSk7XG5cbiAgICAgICAgICByZXR1cm4gW194MiwgX3kyLCBNYXRoLmF0YW4yKF9keSwgX2R4KV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIHZhciBMaW5lU2VnbWVudCA9IGZ1bmN0aW9uIExpbmVTZWdtZW50KHAxeCwgcDF5LCBwMngsIHAyeSkge1xuICAgIHRoaXMudG90YWxMZW5ndGggPSBNYXRoLnNxcnQoKHAyeCAtIHAxeCkgKiAocDJ4IC0gcDF4KSArIChwMnkgLSBwMXkpICogKHAyeSAtIHAxeSkpO1xuICAgIHRoaXMuc3RhcnRQb2ludCA9IFtwMXgsIHAxeSwgTWF0aC5hdGFuMihwMnkgLSBwMXksIHAyeCAtIHAxeCldO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBbcDJ4LCBwMnksIE1hdGguYXRhbjIocDJ5IC0gcDF5LCBwMnggLSBwMXgpXTtcblxuICAgIHRoaXMuZ2V0Qm91bmRpbmdCb3ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gW01hdGgubWluKHRoaXMuc3RhcnRQb2ludFswXSwgdGhpcy5lbmRQb2ludFswXSksIE1hdGgubWluKHRoaXMuc3RhcnRQb2ludFsxXSwgdGhpcy5lbmRQb2ludFsxXSksIE1hdGgubWF4KHRoaXMuc3RhcnRQb2ludFswXSwgdGhpcy5lbmRQb2ludFswXSksIE1hdGgubWF4KHRoaXMuc3RhcnRQb2ludFsxXSwgdGhpcy5lbmRQb2ludFsxXSldO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFBvaW50QXRMZW5ndGggPSBmdW5jdGlvbiAobCkge1xuICAgICAgaWYgKGwgPj0gMCAmJiBsIDw9IHRoaXMudG90YWxMZW5ndGgpIHtcbiAgICAgICAgdmFyIHIgPSBsIC8gdGhpcy50b3RhbExlbmd0aCB8fCAwLFxuICAgICAgICAgICAgX3gzID0gdGhpcy5zdGFydFBvaW50WzBdICsgciAqICh0aGlzLmVuZFBvaW50WzBdIC0gdGhpcy5zdGFydFBvaW50WzBdKSxcbiAgICAgICAgICAgIF95MyA9IHRoaXMuc3RhcnRQb2ludFsxXSArIHIgKiAodGhpcy5lbmRQb2ludFsxXSAtIHRoaXMuc3RhcnRQb2ludFsxXSk7XG5cbiAgICAgICAgcmV0dXJuIFtfeDMsIF95MywgdGhpcy5zdGFydFBvaW50WzJdXTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIHZhciBTdmdTaGFwZSA9IGZ1bmN0aW9uIFN2Z1NoYXBlKCkge1xuICAgIHRoaXMucGF0aENvbW1hbmRzID0gW107XG4gICAgdGhpcy5wYXRoU2VnbWVudHMgPSBbXTtcbiAgICB0aGlzLnN0YXJ0UG9pbnQgPSBudWxsO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBudWxsO1xuICAgIHRoaXMudG90YWxMZW5ndGggPSAwO1xuICAgIHZhciBzdGFydFggPSAwLFxuICAgICAgICBzdGFydFkgPSAwLFxuICAgICAgICBjdXJyWCA9IDAsXG4gICAgICAgIGN1cnJZID0gMCxcbiAgICAgICAgbGFzdENvbSxcbiAgICAgICAgbGFzdEN0cmxYLFxuICAgICAgICBsYXN0Q3RybFk7XG5cbiAgICB0aGlzLm1vdmUgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgc3RhcnRYID0gY3VyclggPSB4O1xuICAgICAgc3RhcnRZID0gY3VyclkgPSB5O1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMubGluZSA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICB2YXIgc2VnbWVudCA9IG5ldyBMaW5lU2VnbWVudChjdXJyWCwgY3VyclksIHgsIHkpO1xuICAgICAgY3VyclggPSB4O1xuICAgICAgY3VyclkgPSB5O1xuICAgICAgcmV0dXJuIHNlZ21lbnQ7XG4gICAgfTtcblxuICAgIHRoaXMuY3VydmUgPSBmdW5jdGlvbiAoYzF4LCBjMXksIGMyeCwgYzJ5LCB4LCB5KSB7XG4gICAgICB2YXIgc2VnbWVudCA9IG5ldyBCZXppZXJTZWdtZW50KGN1cnJYLCBjdXJyWSwgYzF4LCBjMXksIGMyeCwgYzJ5LCB4LCB5KTtcbiAgICAgIGN1cnJYID0geDtcbiAgICAgIGN1cnJZID0geTtcbiAgICAgIHJldHVybiBzZWdtZW50O1xuICAgIH07XG5cbiAgICB0aGlzLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNlZ21lbnQgPSBuZXcgTGluZVNlZ21lbnQoY3VyclgsIGN1cnJZLCBzdGFydFgsIHN0YXJ0WSk7XG4gICAgICBjdXJyWCA9IHN0YXJ0WDtcbiAgICAgIGN1cnJZID0gc3RhcnRZO1xuICAgICAgcmV0dXJuIHNlZ21lbnQ7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICB0aGlzLnBhdGhDb21tYW5kcy5wdXNoKGRhdGEpO1xuICAgICAgdmFyIHNlZ21lbnQgPSB0aGlzW2RhdGFbMF1dLmFwcGx5KHRoaXMsIGRhdGEuc2xpY2UoMykpO1xuXG4gICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBzZWdtZW50Lmhhc1N0YXJ0ID0gZGF0YVsxXTtcbiAgICAgICAgc2VnbWVudC5oYXNFbmQgPSBkYXRhWzJdO1xuICAgICAgICB0aGlzLnN0YXJ0UG9pbnQgPSB0aGlzLnN0YXJ0UG9pbnQgfHwgc2VnbWVudC5zdGFydFBvaW50O1xuICAgICAgICB0aGlzLmVuZFBvaW50ID0gc2VnbWVudC5lbmRQb2ludDtcbiAgICAgICAgdGhpcy5wYXRoU2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICAgICAgdGhpcy50b3RhbExlbmd0aCArPSBzZWdtZW50LnRvdGFsTGVuZ3RoO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLk0gPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgdGhpcy5hZGRDb21tYW5kKFsnbW92ZScsIHRydWUsIHRydWUsIHgsIHldKTtcbiAgICAgIGxhc3RDb20gPSAnTSc7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgdGhpcy5tID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIHJldHVybiB0aGlzLk0oY3VyclggKyB4LCBjdXJyWSArIHkpO1xuICAgIH07XG5cbiAgICB0aGlzLlogPSB0aGlzLnogPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmFkZENvbW1hbmQoWydjbG9zZScsIHRydWUsIHRydWVdKTtcbiAgICAgIGxhc3RDb20gPSAnWic7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgdGhpcy5MID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIHRoaXMuYWRkQ29tbWFuZChbJ2xpbmUnLCB0cnVlLCB0cnVlLCB4LCB5XSk7XG4gICAgICBsYXN0Q29tID0gJ0wnO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIHRoaXMubCA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgICByZXR1cm4gdGhpcy5MKGN1cnJYICsgeCwgY3VyclkgKyB5KTtcbiAgICB9O1xuXG4gICAgdGhpcy5IID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB0aGlzLkwoeCwgY3VyclkpO1xuICAgIH07XG5cbiAgICB0aGlzLmggPSBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHRoaXMuTChjdXJyWCArIHgsIGN1cnJZKTtcbiAgICB9O1xuXG4gICAgdGhpcy5WID0gZnVuY3Rpb24gKHkpIHtcbiAgICAgIHJldHVybiB0aGlzLkwoY3VyclgsIHkpO1xuICAgIH07XG5cbiAgICB0aGlzLnYgPSBmdW5jdGlvbiAoeSkge1xuICAgICAgcmV0dXJuIHRoaXMuTChjdXJyWCwgY3VyclkgKyB5KTtcbiAgICB9O1xuXG4gICAgdGhpcy5DID0gZnVuY3Rpb24gKGMxeCwgYzF5LCBjMngsIGMyeSwgeCwgeSkge1xuICAgICAgdGhpcy5hZGRDb21tYW5kKFsnY3VydmUnLCB0cnVlLCB0cnVlLCBjMXgsIGMxeSwgYzJ4LCBjMnksIHgsIHldKTtcbiAgICAgIGxhc3RDb20gPSAnQyc7XG4gICAgICBsYXN0Q3RybFggPSBjMng7XG4gICAgICBsYXN0Q3RybFkgPSBjMnk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgdGhpcy5jID0gZnVuY3Rpb24gKGMxeCwgYzF5LCBjMngsIGMyeSwgeCwgeSkge1xuICAgICAgcmV0dXJuIHRoaXMuQyhjdXJyWCArIGMxeCwgY3VyclkgKyBjMXksIGN1cnJYICsgYzJ4LCBjdXJyWSArIGMyeSwgY3VyclggKyB4LCBjdXJyWSArIHkpO1xuICAgIH07XG5cbiAgICB0aGlzLlMgPSBmdW5jdGlvbiAoYzF4LCBjMXksIHgsIHkpIHtcbiAgICAgIHJldHVybiB0aGlzLkMoY3VyclggKyAobGFzdENvbSA9PT0gJ0MnID8gY3VyclggLSBsYXN0Q3RybFggOiAwKSwgY3VyclkgKyAobGFzdENvbSA9PT0gJ0MnID8gY3VyclkgLSBsYXN0Q3RybFkgOiAwKSwgYzF4LCBjMXksIHgsIHkpO1xuICAgIH07XG5cbiAgICB0aGlzLnMgPSBmdW5jdGlvbiAoYzF4LCBjMXksIHgsIHkpIHtcbiAgICAgIHJldHVybiB0aGlzLkMoY3VyclggKyAobGFzdENvbSA9PT0gJ0MnID8gY3VyclggLSBsYXN0Q3RybFggOiAwKSwgY3VyclkgKyAobGFzdENvbSA9PT0gJ0MnID8gY3VyclkgLSBsYXN0Q3RybFkgOiAwKSwgY3VyclggKyBjMXgsIGN1cnJZICsgYzF5LCBjdXJyWCArIHgsIGN1cnJZICsgeSk7XG4gICAgfTtcblxuICAgIHRoaXMuUSA9IGZ1bmN0aW9uIChjeCwgY3ksIHgsIHkpIHtcbiAgICAgIHZhciBjMXggPSBjdXJyWCArIDIgLyAzICogKGN4IC0gY3VyclgpLFxuICAgICAgICAgIGMxeSA9IGN1cnJZICsgMiAvIDMgKiAoY3kgLSBjdXJyWSksXG4gICAgICAgICAgYzJ4ID0geCArIDIgLyAzICogKGN4IC0geCksXG4gICAgICAgICAgYzJ5ID0geSArIDIgLyAzICogKGN5IC0geSk7XG4gICAgICB0aGlzLmFkZENvbW1hbmQoWydjdXJ2ZScsIHRydWUsIHRydWUsIGMxeCwgYzF5LCBjMngsIGMyeSwgeCwgeV0pO1xuICAgICAgbGFzdENvbSA9ICdRJztcbiAgICAgIGxhc3RDdHJsWCA9IGN4O1xuICAgICAgbGFzdEN0cmxZID0gY3k7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgdGhpcy5xID0gZnVuY3Rpb24gKGMxeCwgYzF5LCB4LCB5KSB7XG4gICAgICByZXR1cm4gdGhpcy5RKGN1cnJYICsgYzF4LCBjdXJyWSArIGMxeSwgY3VyclggKyB4LCBjdXJyWSArIHkpO1xuICAgIH07XG5cbiAgICB0aGlzLlQgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgcmV0dXJuIHRoaXMuUShjdXJyWCArIChsYXN0Q29tID09PSAnUScgPyBjdXJyWCAtIGxhc3RDdHJsWCA6IDApLCBjdXJyWSArIChsYXN0Q29tID09PSAnUScgPyBjdXJyWSAtIGxhc3RDdHJsWSA6IDApLCB4LCB5KTtcbiAgICB9O1xuXG4gICAgdGhpcy50ID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgIHJldHVybiB0aGlzLlEoY3VyclggKyAobGFzdENvbSA9PT0gJ1EnID8gY3VyclggLSBsYXN0Q3RybFggOiAwKSwgY3VyclkgKyAobGFzdENvbSA9PT0gJ1EnID8gY3VyclkgLSBsYXN0Q3RybFkgOiAwKSwgY3VyclggKyB4LCBjdXJyWSArIHkpO1xuICAgIH07XG5cbiAgICB0aGlzLkEgPSBmdW5jdGlvbiAocngsIHJ5LCBmaSwgZmEsIGZzLCB4LCB5KSB7XG4gICAgICBpZiAoaXNFcXVhbChyeCwgMCkgfHwgaXNFcXVhbChyeSwgMCkpIHtcbiAgICAgICAgdGhpcy5hZGRDb21tYW5kKFsnbGluZScsIHRydWUsIHRydWUsIHgsIHldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpID0gZmkgKiAoTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgIHJ4ID0gTWF0aC5hYnMocngpO1xuICAgICAgICByeSA9IE1hdGguYWJzKHJ5KTtcbiAgICAgICAgZmEgPSAxICogISFmYTtcbiAgICAgICAgZnMgPSAxICogISFmcztcbiAgICAgICAgdmFyIHgxID0gTWF0aC5jb3MoZmkpICogKGN1cnJYIC0geCkgLyAyICsgTWF0aC5zaW4oZmkpICogKGN1cnJZIC0geSkgLyAyLFxuICAgICAgICAgICAgeTEgPSBNYXRoLmNvcyhmaSkgKiAoY3VyclkgLSB5KSAvIDIgLSBNYXRoLnNpbihmaSkgKiAoY3VyclggLSB4KSAvIDIsXG4gICAgICAgICAgICBsYW1iZGEgPSB4MSAqIHgxIC8gKHJ4ICogcngpICsgeTEgKiB5MSAvIChyeSAqIHJ5KTtcblxuICAgICAgICBpZiAobGFtYmRhID4gMSkge1xuICAgICAgICAgIHJ4ICo9IE1hdGguc3FydChsYW1iZGEpO1xuICAgICAgICAgIHJ5ICo9IE1hdGguc3FydChsYW1iZGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHIgPSBNYXRoLnNxcnQoTWF0aC5tYXgoMCwgcnggKiByeCAqIHJ5ICogcnkgLSByeCAqIHJ4ICogeTEgKiB5MSAtIHJ5ICogcnkgKiB4MSAqIHgxKSAvIChyeCAqIHJ4ICogeTEgKiB5MSArIHJ5ICogcnkgKiB4MSAqIHgxKSksXG4gICAgICAgICAgICB4MiA9IChmYSA9PT0gZnMgPyAtMSA6IDEpICogciAqIHJ4ICogeTEgLyByeSxcbiAgICAgICAgICAgIHkyID0gKGZhID09PSBmcyA/IDEgOiAtMSkgKiByICogcnkgKiB4MSAvIHJ4O1xuICAgICAgICB2YXIgY3ggPSBNYXRoLmNvcyhmaSkgKiB4MiAtIE1hdGguc2luKGZpKSAqIHkyICsgKGN1cnJYICsgeCkgLyAyLFxuICAgICAgICAgICAgY3kgPSBNYXRoLnNpbihmaSkgKiB4MiArIE1hdGguY29zKGZpKSAqIHkyICsgKGN1cnJZICsgeSkgLyAyLFxuICAgICAgICAgICAgdGgxID0gTWF0aC5hdGFuMigoeTEgLSB5MikgLyByeSwgKHgxIC0geDIpIC8gcngpLFxuICAgICAgICAgICAgdGgyID0gTWF0aC5hdGFuMigoLXkxIC0geTIpIC8gcnksICgteDEgLSB4MikgLyByeCk7XG5cbiAgICAgICAgaWYgKGZzID09PSAwICYmIHRoMiAtIHRoMSA+IDApIHtcbiAgICAgICAgICB0aDIgLT0gMiAqIE1hdGguUEk7XG4gICAgICAgIH0gZWxzZSBpZiAoZnMgPT09IDEgJiYgdGgyIC0gdGgxIDwgMCkge1xuICAgICAgICAgIHRoMiArPSAyICogTWF0aC5QSTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWdtcyA9IE1hdGguY2VpbChNYXRoLmFicyh0aDIgLSB0aDEpIC8gKE1hdGguUEkgLyBwcmVjaXNpb24pKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21zOyBpKyspIHtcbiAgICAgICAgICB2YXIgdGgzID0gdGgxICsgaSAqICh0aDIgLSB0aDEpIC8gc2VnbXMsXG4gICAgICAgICAgICAgIHRoNCA9IHRoMSArIChpICsgMSkgKiAodGgyIC0gdGgxKSAvIHNlZ21zLFxuICAgICAgICAgICAgICB0ID0gNCAvIDMgKiBNYXRoLnRhbigodGg0IC0gdGgzKSAvIDQpO1xuICAgICAgICAgIHZhciBjMXggPSBjeCArIE1hdGguY29zKGZpKSAqIHJ4ICogKE1hdGguY29zKHRoMykgLSB0ICogTWF0aC5zaW4odGgzKSkgLSBNYXRoLnNpbihmaSkgKiByeSAqIChNYXRoLnNpbih0aDMpICsgdCAqIE1hdGguY29zKHRoMykpLFxuICAgICAgICAgICAgICBjMXkgPSBjeSArIE1hdGguc2luKGZpKSAqIHJ4ICogKE1hdGguY29zKHRoMykgLSB0ICogTWF0aC5zaW4odGgzKSkgKyBNYXRoLmNvcyhmaSkgKiByeSAqIChNYXRoLnNpbih0aDMpICsgdCAqIE1hdGguY29zKHRoMykpLFxuICAgICAgICAgICAgICBjMnggPSBjeCArIE1hdGguY29zKGZpKSAqIHJ4ICogKE1hdGguY29zKHRoNCkgKyB0ICogTWF0aC5zaW4odGg0KSkgLSBNYXRoLnNpbihmaSkgKiByeSAqIChNYXRoLnNpbih0aDQpIC0gdCAqIE1hdGguY29zKHRoNCkpLFxuICAgICAgICAgICAgICBjMnkgPSBjeSArIE1hdGguc2luKGZpKSAqIHJ4ICogKE1hdGguY29zKHRoNCkgKyB0ICogTWF0aC5zaW4odGg0KSkgKyBNYXRoLmNvcyhmaSkgKiByeSAqIChNYXRoLnNpbih0aDQpIC0gdCAqIE1hdGguY29zKHRoNCkpLFxuICAgICAgICAgICAgICBlbmRYID0gY3ggKyBNYXRoLmNvcyhmaSkgKiByeCAqIE1hdGguY29zKHRoNCkgLSBNYXRoLnNpbihmaSkgKiByeSAqIE1hdGguc2luKHRoNCksXG4gICAgICAgICAgICAgIGVuZFkgPSBjeSArIE1hdGguc2luKGZpKSAqIHJ4ICogTWF0aC5jb3ModGg0KSArIE1hdGguY29zKGZpKSAqIHJ5ICogTWF0aC5zaW4odGg0KTtcbiAgICAgICAgICB0aGlzLmFkZENvbW1hbmQoWydjdXJ2ZScsIGkgPT09IDAsIGkgPT09IHNlZ21zIC0gMSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBlbmRYLCBlbmRZXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdENvbSA9ICdBJztcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICB0aGlzLmEgPSBmdW5jdGlvbiAocngsIHJ5LCBmaSwgZmEsIGZzLCB4LCB5KSB7XG4gICAgICByZXR1cm4gdGhpcy5BKHJ4LCByeSwgZmksIGZhLCBmcywgY3VyclggKyB4LCBjdXJyWSArIHkpO1xuICAgIH07XG5cbiAgICB0aGlzLnBhdGggPSBmdW5jdGlvbiAoZCkge1xuICAgICAgdmFyIGNvbW1hbmQsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgdGVtcCxcbiAgICAgICAgICBwYXJzZXIgPSBuZXcgU3RyaW5nUGFyc2VyKChkIHx8ICcnKS50cmltKCkpO1xuXG4gICAgICB3aGlsZSAoY29tbWFuZCA9IHBhcnNlci5tYXRjaCgvXlthc3R2enFtaGxjQVNUVlpRTUhMQ10vKSkge1xuICAgICAgICBwYXJzZXIubWF0Y2hTZXBhcmF0b3IoKTtcbiAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgICAgIHdoaWxlICh2YWx1ZSA9IFBhdGhGbGFnc1tjb21tYW5kICsgdmFsdWVzLmxlbmd0aF0gPyBwYXJzZXIubWF0Y2goL15bMDFdLykgOiBwYXJzZXIubWF0Y2hOdW1iZXIoKSkge1xuICAgICAgICAgIHBhcnNlci5tYXRjaFNlcGFyYXRvcigpO1xuXG4gICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IFBhdGhBcmd1bWVudHNbY29tbWFuZF0pIHtcbiAgICAgICAgICAgIHRoaXNbY29tbWFuZF0uYXBwbHkodGhpcywgdmFsdWVzKTtcbiAgICAgICAgICAgIHZhbHVlcyA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ00nKSB7XG4gICAgICAgICAgICAgIGNvbW1hbmQgPSAnTCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT09ICdtJykge1xuICAgICAgICAgICAgICBjb21tYW5kID0gJ2wnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhbHVlcy5wdXNoKE51bWJlcih2YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IFBhdGhBcmd1bWVudHNbY29tbWFuZF0pIHtcbiAgICAgICAgICB0aGlzW2NvbW1hbmRdLmFwcGx5KHRoaXMsIHZhbHVlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FybmluZ0NhbGxiYWNrKCdTdmdQYXRoOiBjb21tYW5kICcgKyBjb21tYW5kICsgJyB3aXRoICcgKyB2YWx1ZXMubGVuZ3RoICsgJyBudW1iZXJzJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZW1wID0gcGFyc2VyLm1hdGNoQWxsKCkpIHtcbiAgICAgICAgd2FybmluZ0NhbGxiYWNrKCdTdmdQYXRoOiB1bmV4cGVjdGVkIHN0cmluZyAnICsgdGVtcCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGJib3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07XG5cbiAgICAgIGZ1bmN0aW9uIGFkZEJvdW5kcyhiYm94MSkge1xuICAgICAgICBpZiAoYmJveDFbMF0gPCBiYm94WzBdKSB7XG4gICAgICAgICAgYmJveFswXSA9IGJib3gxWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJib3gxWzJdID4gYmJveFsyXSkge1xuICAgICAgICAgIGJib3hbMl0gPSBiYm94MVsyXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiYm94MVsxXSA8IGJib3hbMV0pIHtcbiAgICAgICAgICBiYm94WzFdID0gYmJveDFbMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmJveDFbM10gPiBiYm94WzNdKSB7XG4gICAgICAgICAgYmJveFszXSA9IGJib3gxWzNdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXRoU2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYWRkQm91bmRzKHRoaXMucGF0aFNlZ21lbnRzW2ldLmdldEJvdW5kaW5nQm94KCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmJveFswXSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgYmJveFswXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChiYm94WzFdID09PSBJbmZpbml0eSkge1xuICAgICAgICBiYm94WzFdID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGJib3hbMl0gPT09IC1JbmZpbml0eSkge1xuICAgICAgICBiYm94WzJdID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGJib3hbM10gPT09IC1JbmZpbml0eSkge1xuICAgICAgICBiYm94WzNdID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJib3g7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UG9pbnRBdExlbmd0aCA9IGZ1bmN0aW9uIChsKSB7XG4gICAgICBpZiAobCA+PSAwICYmIGwgPD0gdGhpcy50b3RhbExlbmd0aCkge1xuICAgICAgICB2YXIgdGVtcDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGF0aFNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRlbXAgPSB0aGlzLnBhdGhTZWdtZW50c1tpXS5nZXRQb2ludEF0TGVuZ3RoKGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsIC09IHRoaXMucGF0aFNlZ21lbnRzW2ldLnRvdGFsTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kUG9pbnQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMudHJhbnNmb3JtID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgIHRoaXMucGF0aFNlZ21lbnRzID0gW107XG4gICAgICB0aGlzLnN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgdGhpcy5lbmRQb2ludCA9IG51bGw7XG4gICAgICB0aGlzLnRvdGFsTGVuZ3RoID0gMDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGhDb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMucGF0aENvbW1hbmRzLnNoaWZ0KCk7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDM7IGogPCBkYXRhLmxlbmd0aDsgaiArPSAyKSB7XG4gICAgICAgICAgdmFyIHAgPSB0cmFuc2Zvcm1Qb2ludChbZGF0YVtqXSwgZGF0YVtqICsgMV1dLCBtKTtcbiAgICAgICAgICBkYXRhW2pdID0gcFswXTtcbiAgICAgICAgICBkYXRhW2ogKyAxXSA9IHBbMV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICB0aGlzLm1lcmdlU2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhcGUucGF0aENvbW1hbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZChzaGFwZS5wYXRoQ29tbWFuZHNbaV0uc2xpY2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICB0aGlzLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG5ldyBTdmdTaGFwZSgpLm1lcmdlU2hhcGUodGhpcyk7XG4gICAgfTtcblxuICAgIHRoaXMuaW5zZXJ0SW5Eb2N1bWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXRoQ29tbWFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbW1hbmQgPSB0aGlzLnBhdGhDb21tYW5kc1tpXVswXSxcbiAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMucGF0aENvbW1hbmRzW2ldLnNsaWNlKDMpO1xuXG4gICAgICAgIHN3aXRjaCAoY29tbWFuZCkge1xuICAgICAgICAgIGNhc2UgJ21vdmUnOlxuICAgICAgICAgICAgZG9jLm1vdmVUbyh2YWx1ZXNbMF0sIHZhbHVlc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICAgICAgZG9jLmxpbmVUbyh2YWx1ZXNbMF0sIHZhbHVlc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2N1cnZlJzpcbiAgICAgICAgICAgIGRvYy5iZXppZXJDdXJ2ZVRvKHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIHZhbHVlc1szXSwgdmFsdWVzWzRdLCB2YWx1ZXNbNV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdjbG9zZSc6XG4gICAgICAgICAgICBkb2MuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmdldFN1YlBhdGhzID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN1YlBhdGhzID0gW10sXG4gICAgICAgICAgc2hhcGUgPSBuZXcgU3ZnU2hhcGUoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGhDb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMucGF0aENvbW1hbmRzW2ldLFxuICAgICAgICAgICAgY29tbWFuZCA9IHRoaXMucGF0aENvbW1hbmRzW2ldWzBdO1xuXG4gICAgICAgIGlmIChjb21tYW5kID09PSAnbW92ZScgJiYgaSAhPT0gMCkge1xuICAgICAgICAgIHN1YlBhdGhzLnB1c2goc2hhcGUpO1xuICAgICAgICAgIHNoYXBlID0gbmV3IFN2Z1NoYXBlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzaGFwZS5hZGRDb21tYW5kKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBzdWJQYXRocy5wdXNoKHNoYXBlKTtcbiAgICAgIHJldHVybiBzdWJQYXRocztcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRNYXJrZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG1hcmtlcnMgPSBbXSxcbiAgICAgICAgICBzdWJQYXRocyA9IHRoaXMuZ2V0U3ViUGF0aHMoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJQYXRocy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc3ViUGF0aCA9IHN1YlBhdGhzW2ldLFxuICAgICAgICAgICAgc3ViUGF0aE1hcmtlcnMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1YlBhdGgucGF0aFNlZ21lbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIHNlZ21lbnQgPSBzdWJQYXRoLnBhdGhTZWdtZW50c1tqXTtcblxuICAgICAgICAgIGlmIChpc05vdEVxdWFsKHNlZ21lbnQudG90YWxMZW5ndGgsIDApIHx8IGogPT09IDAgfHwgaiA9PT0gc3ViUGF0aC5wYXRoU2VnbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgaWYgKHNlZ21lbnQuaGFzU3RhcnQpIHtcbiAgICAgICAgICAgICAgdmFyIHN0YXJ0TWFya2VyID0gc2VnbWVudC5nZXRQb2ludEF0TGVuZ3RoKDApLFxuICAgICAgICAgICAgICAgICAgcHJldkVuZE1hcmtlciA9IHN1YlBhdGhNYXJrZXJzLnBvcCgpO1xuXG4gICAgICAgICAgICAgIGlmIChwcmV2RW5kTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNYXJrZXJbMl0gPSAwLjUgKiAocHJldkVuZE1hcmtlclsyXSArIHN0YXJ0TWFya2VyWzJdKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN1YlBhdGhNYXJrZXJzLnB1c2goc3RhcnRNYXJrZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VnbWVudC5oYXNFbmQpIHtcbiAgICAgICAgICAgICAgdmFyIGVuZE1hcmtlciA9IHNlZ21lbnQuZ2V0UG9pbnRBdExlbmd0aChzZWdtZW50LnRvdGFsTGVuZ3RoKTtcbiAgICAgICAgICAgICAgc3ViUGF0aE1hcmtlcnMucHVzaChlbmRNYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hcmtlcnMgPSBtYXJrZXJzLmNvbmNhdChzdWJQYXRoTWFya2Vycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXJrZXJzO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW0gPSBmdW5jdGlvbiBTdmdFbGVtKG9iaiwgaW5oZXJpdHMpIHtcbiAgICB2YXIgc3R5bGVDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIGNoaWxkcmVuQ2FjaGUgPSBudWxsO1xuICAgIHRoaXMubmFtZSA9IG9iai5ub2RlTmFtZTtcbiAgICB0aGlzLmlzT3V0ZXJFbGVtZW50ID0gb2JqID09PSBzdmcgfHwgIW9iai5wYXJlbnROb2RlO1xuICAgIHRoaXMuaW5oZXJpdHMgPSBpbmhlcml0cyB8fCAoIXRoaXMuaXNPdXRlckVsZW1lbnQgPyBjcmVhdGVTVkdFbGVtZW50KG9iai5wYXJlbnROb2RlLCBudWxsKSA6IG51bGwpO1xuICAgIHRoaXMuc3RhY2sgPSB0aGlzLmluaGVyaXRzID8gdGhpcy5pbmhlcml0cy5zdGFjay5jb25jYXQob2JqKSA6IFtvYmpdO1xuICAgIHRoaXMuc3R5bGUgPSBwYXJzZVN0eWxlQXR0cih0eXBlb2Ygb2JqLmdldEF0dHJpYnV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouZ2V0QXR0cmlidXRlKCdzdHlsZScpKTtcbiAgICB0aGlzLmNzcyA9IHVzZUNTUyA/IGdldENvbXB1dGVkU3R5bGUob2JqKSA6IGdldFN0eWxlKG9iaik7XG4gICAgdGhpcy5hbGxvd2VkQ2hpbGRyZW4gPSBbXTtcblxuICAgIHRoaXMuYXR0ciA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmdldEF0dHJpYnV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gb2JqLmdldEF0dHJpYnV0ZShrZXkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnJlc29sdmVVcmwgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhciB0ZW1wID0gKHZhbHVlIHx8ICcnKS5tYXRjaCgvXlxccyooPzp1cmxcXChcIiguKikjKC4qKVwiXFwpfHVybFxcKCcoLiopIyguKiknXFwpfHVybFxcKCguKikjKC4qKVxcKXwoLiopIyguKikpXFxzKiQvKSB8fCBbXTtcbiAgICAgIHZhciBmaWxlID0gdGVtcFsxXSB8fCB0ZW1wWzNdIHx8IHRlbXBbNV0gfHwgdGVtcFs3XSxcbiAgICAgICAgICBpZCA9IHRlbXBbMl0gfHwgdGVtcFs0XSB8fCB0ZW1wWzZdIHx8IHRlbXBbOF07XG5cbiAgICAgIGlmIChpZCkge1xuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICB2YXIgc3ZnT2JqID0gc3ZnLmdldEVsZW1lbnRCeUlkKGlkKTtcblxuICAgICAgICAgIGlmIChzdmdPYmopIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmluZGV4T2Yoc3ZnT2JqKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN2Z09iajtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdhcm5pbmdDYWxsYmFjaygnU1ZHdG9QREY6IGxvb3Agb2YgY2lyY3VsYXIgcmVmZXJlbmNlcyBmb3IgaWQgXCInICsgaWQgKyAnXCInKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkb2N1bWVudENhbGxiYWNrKSB7XG4gICAgICAgICAgdmFyIHN2Z3MgPSBkb2N1bWVudENhY2hlW2ZpbGVdO1xuXG4gICAgICAgICAgaWYgKCFzdmdzKSB7XG4gICAgICAgICAgICBzdmdzID0gZG9jdW1lbnRDYWxsYmFjayhmaWxlKTtcblxuICAgICAgICAgICAgaWYgKCFpc0FycmF5TGlrZShzdmdzKSkge1xuICAgICAgICAgICAgICBzdmdzID0gW3N2Z3NdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN2Z3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdmdzW2ldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHN2Z3NbaV0gPSBwYXJzZVhtbChzdmdzW2ldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb2N1bWVudENhY2hlW2ZpbGVdID0gc3ZncztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCBzdmdzLmxlbmd0aDsgX2k3KyspIHtcbiAgICAgICAgICAgIHZhciBfc3ZnT2JqID0gc3Znc1tfaTddLmdldEVsZW1lbnRCeUlkKGlkKTtcblxuICAgICAgICAgICAgaWYgKF9zdmdPYmopIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2suaW5kZXhPZihfc3ZnT2JqKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3N2Z09iajtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuaW5nQ2FsbGJhY2soJ1NWR3RvUERGOiBsb29wIG9mIGNpcmN1bGFyIHJlZmVyZW5jZXMgZm9yIGlkIFwiJyArIGZpbGUgKyAnIycgKyBpZCArICdcIicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmNvbXB1dGVVbml0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgdW5pdCwgcGVyY2VudCwgaXNGb250U2l6ZSkge1xuICAgICAgaWYgKHVuaXQgPT09ICclJykge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSkgLyAxMDAgKiAoaXNGb250U2l6ZSB8fCBwZXJjZW50ICE9IG51bGwgPyBwZXJjZW50IDogdGhpcy5nZXRWaWV3cG9ydCgpKTtcbiAgICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gJ2V4JyB8fCB1bml0ID09PSAnZW0nKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAqIHtcbiAgICAgICAgICAnZW0nOiAxLFxuICAgICAgICAgICdleCc6IDAuNVxuICAgICAgICB9W3VuaXRdICogKGlzRm9udFNpemUgPyBwZXJjZW50IDogdGhpcy5nZXQoJ2ZvbnQtc2l6ZScpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAqIHtcbiAgICAgICAgICAnJzogMSxcbiAgICAgICAgICAncHgnOiAxLFxuICAgICAgICAgICdwdCc6IDk2IC8gNzIsXG4gICAgICAgICAgJ2NtJzogOTYgLyAyLjU0LFxuICAgICAgICAgICdtbSc6IDk2IC8gMjUuNCxcbiAgICAgICAgICAnaW4nOiA5NixcbiAgICAgICAgICAncGMnOiA5NiAvIDZcbiAgICAgICAgfVt1bml0XTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5jb21wdXRlTGVuZ3RoID0gZnVuY3Rpb24gKHZhbHVlLCBwZXJjZW50LCBpbml0aWFsLCBpc0ZvbnRTaXplKSB7XG4gICAgICB2YXIgcGFyc2VyID0gbmV3IFN0cmluZ1BhcnNlcigodmFsdWUgfHwgJycpLnRyaW0oKSksXG4gICAgICAgICAgdGVtcDEsXG4gICAgICAgICAgdGVtcDI7XG5cbiAgICAgIGlmICh0eXBlb2YgKHRlbXAxID0gcGFyc2VyLm1hdGNoTnVtYmVyKCkpID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgKHRlbXAyID0gcGFyc2VyLm1hdGNoTGVuZ3RoVW5pdCgpKSA9PT0gJ3N0cmluZycgJiYgIXBhcnNlci5tYXRjaEFsbCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXB1dGVVbml0cyh0ZW1wMSwgdGVtcDIsIHBlcmNlbnQsIGlzRm9udFNpemUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5pdGlhbDtcbiAgICB9O1xuXG4gICAgdGhpcy5jb21wdXRlTGVuZ3RoTGlzdCA9IGZ1bmN0aW9uICh2YWx1ZSwgcGVyY2VudCwgc3RyaWN0KSB7XG4gICAgICB2YXIgcGFyc2VyID0gbmV3IFN0cmluZ1BhcnNlcigodmFsdWUgfHwgJycpLnRyaW0oKSksXG4gICAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgICAgdGVtcDEsXG4gICAgICAgICAgdGVtcDI7XG5cbiAgICAgIHdoaWxlICh0eXBlb2YgKHRlbXAxID0gcGFyc2VyLm1hdGNoTnVtYmVyKCkpID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgKHRlbXAyID0gcGFyc2VyLm1hdGNoTGVuZ3RoVW5pdCgpKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jb21wdXRlVW5pdHModGVtcDEsIHRlbXAyLCBwZXJjZW50KSk7XG4gICAgICAgIHBhcnNlci5tYXRjaFNlcGFyYXRvcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyaWN0ICYmIHBhcnNlci5tYXRjaEFsbCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRMZW5ndGggPSBmdW5jdGlvbiAoa2V5LCBwZXJjZW50LCBpbml0aWFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wdXRlTGVuZ3RoKHRoaXMuYXR0cihrZXkpLCBwZXJjZW50LCBpbml0aWFsKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRMZW5ndGhMaXN0ID0gZnVuY3Rpb24gKGtleSwgcGVyY2VudCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZUxlbmd0aExpc3QodGhpcy5hdHRyKGtleSksIHBlcmNlbnQpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFVybCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVVcmwodGhpcy5hdHRyKGtleSkpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldE51bWJlckxpc3QgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgcGFyc2VyID0gbmV3IFN0cmluZ1BhcnNlcigodGhpcy5hdHRyKGtleSkgfHwgJycpLnRyaW0oKSksXG4gICAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgICAgdGVtcDtcblxuICAgICAgd2hpbGUgKHRlbXAgPSBwYXJzZXIubWF0Y2hOdW1iZXIoKSkge1xuICAgICAgICByZXN1bHQucHVzaChOdW1iZXIodGVtcCkpO1xuICAgICAgICBwYXJzZXIubWF0Y2hTZXBhcmF0b3IoKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LmVycm9yID0gcGFyc2VyLm1hdGNoQWxsKCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB0aGlzLmdldFZpZXdib3ggPSBmdW5jdGlvbiAoa2V5LCBpbml0aWFsKSB7XG4gICAgICB2YXIgdmlld0JveCA9IHRoaXMuZ2V0TnVtYmVyTGlzdChrZXkpO1xuXG4gICAgICBpZiAodmlld0JveC5sZW5ndGggPT09IDQgJiYgdmlld0JveFsyXSA+PSAwICYmIHZpZXdCb3hbM10gPj0gMCkge1xuICAgICAgICByZXR1cm4gdmlld0JveDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluaXRpYWw7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UGVyY2VudCA9IGZ1bmN0aW9uIChrZXksIGluaXRpYWwpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuYXR0cihrZXkpO1xuICAgICAgdmFyIHBhcnNlciA9IG5ldyBTdHJpbmdQYXJzZXIoKHZhbHVlIHx8ICcnKS50cmltKCkpLFxuICAgICAgICAgIHRlbXAxLFxuICAgICAgICAgIHRlbXAyO1xuICAgICAgdmFyIG51bWJlciA9IHBhcnNlci5tYXRjaE51bWJlcigpO1xuXG4gICAgICBpZiAoIW51bWJlcikge1xuICAgICAgICByZXR1cm4gaW5pdGlhbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnNlci5tYXRjaCgnJScpKSB7XG4gICAgICAgIG51bWJlciAqPSAwLjAxO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyc2VyLm1hdGNoQWxsKCkpIHtcbiAgICAgICAgcmV0dXJuIGluaXRpYWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBudW1iZXIpKTtcbiAgICB9O1xuXG4gICAgdGhpcy5jaG9vc2VWYWx1ZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwgJiYgYXJndW1lbnRzW2ldID09PSBhcmd1bWVudHNbaV0pIHtcbiAgICAgICAgICByZXR1cm4gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIH07XG5cbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmIChzdHlsZUNhY2hlW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc3R5bGVDYWNoZVtrZXldO1xuICAgICAgfVxuXG4gICAgICB2YXIga2V5SW5mbyA9IFByb3BlcnRpZXNba2V5XSB8fCB7fSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICByZXN1bHQ7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGlmIChrZXkgIT09ICd0cmFuc2Zvcm0nKSB7XG4gICAgICAgICAgICAgIC8vIHRoZSBDU1MgdHJhbnNmb3JtIGJlaGF2ZXMgc3RyYW5nZWx5XG4gICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jc3Nba2V5SW5mby5jc3MgfHwga2V5XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuc3R5bGVba2V5XTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmF0dHIoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLmluaGVyaXRzID8gdGhpcy5pbmhlcml0cy5nZXQoa2V5KSA6IGtleUluZm8uaW5pdGlhbDtcblxuICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlQ2FjaGVba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5SW5mby52YWx1ZXMgIT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdCA9IGtleUluZm8udmFsdWVzW3ZhbHVlXTtcblxuICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlQ2FjaGVba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBwYXJzZWQgPSB2b2lkIDA7XG5cbiAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZm9udC1zaXplJzpcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5jb21wdXRlTGVuZ3RoKHZhbHVlLCB0aGlzLmluaGVyaXRzID8gdGhpcy5pbmhlcml0cy5nZXQoa2V5KSA6IGtleUluZm8uaW5pdGlhbCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2Jhc2VsaW5lLXNoaWZ0JzpcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5jb21wdXRlTGVuZ3RoKHZhbHVlLCB0aGlzLmdldCgnZm9udC1zaXplJykpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZm9udC1mYW1pbHknOlxuICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdvcGFjaXR5JzpcbiAgICAgICAgICAgIGNhc2UgJ3N0cm9rZS1vcGFjaXR5JzpcbiAgICAgICAgICAgIGNhc2UgJ2ZpbGwtb3BhY2l0eSc6XG4gICAgICAgICAgICBjYXNlICdzdG9wLW9wYWNpdHknOlxuICAgICAgICAgICAgICBwYXJzZWQgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBwYXJzZWQpKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICd0cmFuc2Zvcm0nOlxuICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZVRyYW5mb3JtKHZhbHVlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3N0cm9rZS1kYXNoYXJyYXknOlxuICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNlZCA9IHRoaXMuY29tcHV0ZUxlbmd0aExpc3QodmFsdWUsIHRoaXMuZ2V0Vmlld3BvcnQoKSwgdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VtID0gMCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyc2VkLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocGFyc2VkW2pdIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHN1bSArPSBwYXJzZWRbal07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZC5sZW5ndGggJSAyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlZC5jb25jYXQocGFyc2VkKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VtID09PSAwID8gW10gOiBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnbm9uZScgfHwgdmFsdWUgPT09ICd0cmFuc3BhcmVudCcpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAnbm9uZSc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvcih2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZmlsbCc6XG4gICAgICAgICAgICBjYXNlICdzdHJva2UnOlxuICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdub25lJyB8fCB2YWx1ZSA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdub25lJztcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2N1cnJlbnRDb2xvcicpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmdldCgnY29sb3InKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJzZWQgPSBwYXJzZUNvbG9yKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2VkID0gKHZhbHVlIHx8ICcnKS5zcGxpdCgnICcpKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMucmVzb2x2ZVVybChwYXJzZWRbMF0pLFxuICAgICAgICAgICAgICAgICAgICBmYWxsYmFja0NvbG9yID0gcGFyc2VDb2xvcihwYXJzZWRbMV0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxsYmFja0NvbG9yO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0Lm5vZGVOYW1lID09PSAnbGluZWFyR3JhZGllbnQnIHx8IG9iamVjdC5ub2RlTmFtZSA9PT0gJ3JhZGlhbEdyYWRpZW50Jykge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFN2Z0VsZW1HcmFkaWVudChvYmplY3QsIG51bGwsIGZhbGxiYWNrQ29sb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0Lm5vZGVOYW1lID09PSAncGF0dGVybicpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTdmdFbGVtUGF0dGVybihvYmplY3QsIG51bGwsIGZhbGxiYWNrQ29sb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxsYmFja0NvbG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzdG9wLWNvbG9yJzpcbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnbm9uZScgfHwgdmFsdWUgPT09ICd0cmFuc3BhcmVudCcpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAnbm9uZSc7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjdXJyZW50Q29sb3InKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5nZXQoJ2NvbG9yJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvcih2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnbWFya2VyLXN0YXJ0JzpcbiAgICAgICAgICAgIGNhc2UgJ21hcmtlci1taWQnOlxuICAgICAgICAgICAgY2FzZSAnbWFya2VyLWVuZCc6XG4gICAgICAgICAgICBjYXNlICdjbGlwLXBhdGgnOlxuICAgICAgICAgICAgY2FzZSAnbWFzayc6XG4gICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJ25vbmUnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucmVzb2x2ZVVybCh2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnc3Ryb2tlLXdpZHRoJzpcbiAgICAgICAgICAgICAgcGFyc2VkID0gdGhpcy5jb21wdXRlTGVuZ3RoKHZhbHVlLCB0aGlzLmdldFZpZXdwb3J0KCkpO1xuXG4gICAgICAgICAgICAgIGlmIChwYXJzZWQgIT0gbnVsbCAmJiBwYXJzZWQgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlZDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzdHJva2UtbWl0ZXJsaW1pdCc6XG4gICAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuXG4gICAgICAgICAgICAgIGlmIChwYXJzZWQgIT0gbnVsbCAmJiBwYXJzZWQgPj0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlZDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICd3b3JkLXNwYWNpbmcnOlxuICAgICAgICAgICAgY2FzZSAnbGV0dGVyLXNwYWNpbmcnOlxuICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmNvbXB1dGVMZW5ndGgodmFsdWUsIHRoaXMuZ2V0Vmlld3BvcnQoKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzdHJva2UtZGFzaG9mZnNldCc6XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuY29tcHV0ZUxlbmd0aCh2YWx1ZSwgdGhpcy5nZXRWaWV3cG9ydCgpKTtcblxuICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkge1xuICAgICAgICAgICAgICAgICAgLy8gZml4IGZvciBjcmJ1Zy5jb20vNjYwODUwXG4gICAgICAgICAgICAgICAgICB2YXIgZGFzaGFycmF5ID0gdGhpcy5nZXQoJ3N0cm9rZS1kYXNoYXJyYXknKTtcblxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IGRhc2hhcnJheS5sZW5ndGg7IF9qKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGRhc2hhcnJheVtfal07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGVDYWNoZVtrZXldID0gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGVDYWNoZVtrZXldID0ga2V5SW5mby5pbmhlcml0ICYmIHRoaXMuaW5oZXJpdHMgPyB0aGlzLmluaGVyaXRzLmdldChrZXkpIDoga2V5SW5mby5pbml0aWFsO1xuICAgIH07XG5cbiAgICB0aGlzLmdldENoaWxkcmVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGNoaWxkcmVuQ2FjaGUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW5DYWNoZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoaWxkcmVuID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gb2JqLmNoaWxkTm9kZXNbaV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC5lcnJvciAmJiB0aGlzLmFsbG93ZWRDaGlsZHJlbi5pbmRleE9mKGNoaWxkLm5vZGVOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNyZWF0ZVNWR0VsZW1lbnQoY2hpbGQsIHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hpbGRyZW5DYWNoZSA9IGNoaWxkcmVuO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFBhcmVudFZXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaGVyaXRzID8gdGhpcy5pbmhlcml0cy5nZXRWV2lkdGgoKSA6IHZpZXdwb3J0V2lkdGg7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UGFyZW50VkhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaGVyaXRzID8gdGhpcy5pbmhlcml0cy5nZXRWSGVpZ2h0KCkgOiB2aWV3cG9ydEhlaWdodDtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRQYXJlbnRWaWV3cG9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBNYXRoLnNxcnQoMC41ICogdGhpcy5nZXRQYXJlbnRWV2lkdGgoKSAqIHRoaXMuZ2V0UGFyZW50VldpZHRoKCkgKyAwLjUgKiB0aGlzLmdldFBhcmVudFZIZWlnaHQoKSAqIHRoaXMuZ2V0UGFyZW50VkhlaWdodCgpKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRWV2lkdGggPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRWV2lkdGgoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRWSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50VkhlaWdodCgpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFZpZXdwb3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIE1hdGguc3FydCgwLjUgKiB0aGlzLmdldFZXaWR0aCgpICogdGhpcy5nZXRWV2lkdGgoKSArIDAuNSAqIHRoaXMuZ2V0VkhlaWdodCgpICogdGhpcy5nZXRWSGVpZ2h0KCkpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNoYXBlID0gdGhpcy5nZXRCb3VuZGluZ1NoYXBlKCk7XG4gICAgICByZXR1cm4gc2hhcGUuZ2V0Qm91bmRpbmdCb3goKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBTdmdFbGVtU3R5bGFibGUgPSBmdW5jdGlvbiBTdmdFbGVtU3R5bGFibGUob2JqLCBpbmhlcml0cykge1xuICAgIFN2Z0VsZW0uY2FsbCh0aGlzLCBvYmosIGluaGVyaXRzKTtcblxuICAgIHRoaXMudHJhbnNmb3JtID0gZnVuY3Rpb24gKCkge1xuICAgICAgZG9jLnRyYW5zZm9ybS5hcHBseShkb2MsIHRoaXMuZ2V0VHJhbnNmb3JtYXRpb24oKSk7XG4gICAgfTtcblxuICAgIHRoaXMuY2xpcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLmdldCgnY2xpcC1wYXRoJykgIT09ICdub25lJykge1xuICAgICAgICB2YXIgY2xpcFBhdGggPSBuZXcgU3ZnRWxlbUNsaXBQYXRoKHRoaXMuZ2V0KCdjbGlwLXBhdGgnKSwgbnVsbCk7XG4gICAgICAgIGNsaXBQYXRoLnVzZU1hc2sodGhpcy5nZXRCb3VuZGluZ0JveCgpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMubWFzayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLmdldCgnbWFzaycpICE9PSAnbm9uZScpIHtcbiAgICAgICAgdmFyIG1hc2sgPSBuZXcgU3ZnRWxlbU1hc2sodGhpcy5nZXQoJ21hc2snKSwgbnVsbCk7XG4gICAgICAgIG1hc2sudXNlTWFzayh0aGlzLmdldEJvdW5kaW5nQm94KCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5nZXRGaWxsID0gZnVuY3Rpb24gKGlzQ2xpcCwgaXNNYXNrKSB7XG4gICAgICB2YXIgb3BhY2l0eSA9IHRoaXMuZ2V0KCdvcGFjaXR5JyksXG4gICAgICAgICAgZmlsbCA9IHRoaXMuZ2V0KCdmaWxsJyksXG4gICAgICAgICAgZmlsbE9wYWNpdHkgPSB0aGlzLmdldCgnZmlsbC1vcGFjaXR5Jyk7XG5cbiAgICAgIGlmIChpc0NsaXApIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRDb2xvcnMud2hpdGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxsICE9PSAnbm9uZScgJiYgb3BhY2l0eSAmJiBmaWxsT3BhY2l0eSkge1xuICAgICAgICBpZiAoZmlsbCBpbnN0YW5jZW9mIFN2Z0VsZW1HcmFkaWVudCB8fCBmaWxsIGluc3RhbmNlb2YgU3ZnRWxlbVBhdHRlcm4pIHtcbiAgICAgICAgICByZXR1cm4gZmlsbC5nZXRQYWludCh0aGlzLmdldEJvdW5kaW5nQm94KCksIGZpbGxPcGFjaXR5ICogb3BhY2l0eSwgaXNDbGlwLCBpc01hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wYWNpdHlUb0NvbG9yKGZpbGwsIGZpbGxPcGFjaXR5ICogb3BhY2l0eSwgaXNNYXNrKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5nZXRTdHJva2UgPSBmdW5jdGlvbiAoaXNDbGlwLCBpc01hc2spIHtcbiAgICAgIHZhciBvcGFjaXR5ID0gdGhpcy5nZXQoJ29wYWNpdHknKSxcbiAgICAgICAgICBzdHJva2UgPSB0aGlzLmdldCgnc3Ryb2tlJyksXG4gICAgICAgICAgc3Ryb2tlT3BhY2l0eSA9IHRoaXMuZ2V0KCdzdHJva2Utb3BhY2l0eScpO1xuXG4gICAgICBpZiAoaXNDbGlwIHx8IGlzRXF1YWwodGhpcy5nZXQoJ3N0cm9rZS13aWR0aCcpLCAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJva2UgIT09ICdub25lJyAmJiBvcGFjaXR5ICYmIHN0cm9rZU9wYWNpdHkpIHtcbiAgICAgICAgaWYgKHN0cm9rZSBpbnN0YW5jZW9mIFN2Z0VsZW1HcmFkaWVudCB8fCBzdHJva2UgaW5zdGFuY2VvZiBTdmdFbGVtUGF0dGVybikge1xuICAgICAgICAgIHJldHVybiBzdHJva2UuZ2V0UGFpbnQodGhpcy5nZXRCb3VuZGluZ0JveCgpLCBzdHJva2VPcGFjaXR5ICogb3BhY2l0eSwgaXNDbGlwLCBpc01hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wYWNpdHlUb0NvbG9yKHN0cm9rZSwgc3Ryb2tlT3BhY2l0eSAqIG9wYWNpdHksIGlzTWFzayk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICB2YXIgU3ZnRWxlbUhhc0NoaWxkcmVuID0gZnVuY3Rpb24gU3ZnRWxlbUhhc0NoaWxkcmVuKG9iaiwgaW5oZXJpdHMpIHtcbiAgICBTdmdFbGVtU3R5bGFibGUuY2FsbCh0aGlzLCBvYmosIGluaGVyaXRzKTtcbiAgICB0aGlzLmFsbG93ZWRDaGlsZHJlbiA9IFsndXNlJywgJ2cnLCAnYScsICdzdmcnLCAnaW1hZ2UnLCAncmVjdCcsICdjaXJjbGUnLCAnZWxsaXBzZScsICdsaW5lJywgJ3BvbHlsaW5lJywgJ3BvbHlnb24nLCAncGF0aCcsICd0ZXh0J107XG5cbiAgICB0aGlzLmdldEJvdW5kaW5nU2hhcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2hhcGUgPSBuZXcgU3ZnU2hhcGUoKSxcbiAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY2hpbGRyZW5baV0uZ2V0KCdkaXNwbGF5JykgIT09ICdub25lJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW5baV0uZ2V0Qm91bmRpbmdTaGFwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGNoaWxkU2hhcGUgPSBjaGlsZHJlbltpXS5nZXRCb3VuZGluZ1NoYXBlKCkuY2xvbmUoKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbltpXS5nZXRUcmFuc2Zvcm1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBjaGlsZFNoYXBlLnRyYW5zZm9ybShjaGlsZHJlbltpXS5nZXRUcmFuc2Zvcm1hdGlvbigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2hhcGUubWVyZ2VTaGFwZShjaGlsZFNoYXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNoYXBlO1xuICAgIH07XG5cbiAgICB0aGlzLmRyYXdDaGlsZHJlbiA9IGZ1bmN0aW9uIChpc0NsaXAsIGlzTWFzaykge1xuICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbigpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjaGlsZHJlbltpXS5nZXQoJ2Rpc3BsYXknKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbltpXS5kcmF3SW5Eb2N1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2hpbGRyZW5baV0uZHJhd0luRG9jdW1lbnQoaXNDbGlwLCBpc01hc2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1Db250YWluZXIgPSBmdW5jdGlvbiBTdmdFbGVtQ29udGFpbmVyKG9iaiwgaW5oZXJpdHMpIHtcbiAgICBTdmdFbGVtSGFzQ2hpbGRyZW4uY2FsbCh0aGlzLCBvYmosIGluaGVyaXRzKTtcblxuICAgIHRoaXMuZHJhd0NvbnRlbnQgPSBmdW5jdGlvbiAoaXNDbGlwLCBpc01hc2spIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtKCk7XG4gICAgICB2YXIgY2xpcHBlZCA9IHRoaXMuY2xpcCgpLFxuICAgICAgICAgIG1hc2tlZCA9IHRoaXMubWFzaygpLFxuICAgICAgICAgIGdyb3VwO1xuXG4gICAgICBpZiAoKHRoaXMuZ2V0KCdvcGFjaXR5JykgPCAxIHx8IGNsaXBwZWQgfHwgbWFza2VkKSAmJiAhaXNDbGlwKSB7XG4gICAgICAgIGdyb3VwID0gZG9jQmVnaW5Hcm91cChnZXRQYWdlQkJveCgpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kcmF3Q2hpbGRyZW4oaXNDbGlwLCBpc01hc2spO1xuXG4gICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgZG9jRW5kR3JvdXAoZ3JvdXApO1xuICAgICAgICBkb2MuZmlsbE9wYWNpdHkodGhpcy5nZXQoJ29wYWNpdHknKSk7XG4gICAgICAgIGRvY0luc2VydEdyb3VwKGdyb3VwKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIHZhciBTdmdFbGVtVXNlID0gZnVuY3Rpb24gU3ZnRWxlbVVzZShvYmosIGluaGVyaXRzKSB7XG4gICAgU3ZnRWxlbUNvbnRhaW5lci5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuICAgIHZhciB4ID0gdGhpcy5nZXRMZW5ndGgoJ3gnLCB0aGlzLmdldFZXaWR0aCgpLCAwKSxcbiAgICAgICAgeSA9IHRoaXMuZ2V0TGVuZ3RoKCd5JywgdGhpcy5nZXRWSGVpZ2h0KCksIDApLFxuICAgICAgICBjaGlsZCA9IHRoaXMuZ2V0VXJsKCdocmVmJykgfHwgdGhpcy5nZXRVcmwoJ3hsaW5rOmhyZWYnKTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgY2hpbGQgPSBjcmVhdGVTVkdFbGVtZW50KGNoaWxkLCB0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLmdldENoaWxkcmVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGNoaWxkID8gW2NoaWxkXSA6IFtdO1xuICAgIH07XG5cbiAgICB0aGlzLmRyYXdJbkRvY3VtZW50ID0gZnVuY3Rpb24gKGlzQ2xpcCwgaXNNYXNrKSB7XG4gICAgICBkb2Muc2F2ZSgpO1xuICAgICAgdGhpcy5kcmF3Q29udGVudChpc0NsaXAsIGlzTWFzayk7XG4gICAgICBkb2MucmVzdG9yZSgpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFRyYW5zZm9ybWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG11bHRpcGx5TWF0cml4KHRoaXMuZ2V0KCd0cmFuc2Zvcm0nKSwgWzEsIDAsIDAsIDEsIHgsIHldKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBTdmdFbGVtU3ltYm9sID0gZnVuY3Rpb24gU3ZnRWxlbVN5bWJvbChvYmosIGluaGVyaXRzKSB7XG4gICAgU3ZnRWxlbUNvbnRhaW5lci5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TGVuZ3RoKCd3aWR0aCcsIHRoaXMuZ2V0UGFyZW50VldpZHRoKCksIHRoaXMuZ2V0UGFyZW50VldpZHRoKCkpLFxuICAgICAgICBoZWlnaHQgPSB0aGlzLmdldExlbmd0aCgnaGVpZ2h0JywgdGhpcy5nZXRQYXJlbnRWSGVpZ2h0KCksIHRoaXMuZ2V0UGFyZW50VkhlaWdodCgpKTtcblxuICAgIGlmIChpbmhlcml0cyBpbnN0YW5jZW9mIFN2Z0VsZW1Vc2UpIHtcbiAgICAgIHdpZHRoID0gaW5oZXJpdHMuZ2V0TGVuZ3RoKCd3aWR0aCcsIGluaGVyaXRzLmdldFBhcmVudFZXaWR0aCgpLCB3aWR0aCk7XG4gICAgICBoZWlnaHQgPSBpbmhlcml0cy5nZXRMZW5ndGgoJ2hlaWdodCcsIGluaGVyaXRzLmdldFBhcmVudFZIZWlnaHQoKSwgaGVpZ2h0KTtcbiAgICB9XG5cbiAgICB2YXIgYXNwZWN0UmF0aW8gPSAodGhpcy5hdHRyKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJykgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgdmlld0JveCA9IHRoaXMuZ2V0Vmlld2JveCgndmlld0JveCcsIFswLCAwLCB3aWR0aCwgaGVpZ2h0XSk7XG5cbiAgICB0aGlzLmdldFZXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB2aWV3Qm94WzJdO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFZIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdmlld0JveFszXTtcbiAgICB9O1xuXG4gICAgdGhpcy5kcmF3SW5Eb2N1bWVudCA9IGZ1bmN0aW9uIChpc0NsaXAsIGlzTWFzaykge1xuICAgICAgZG9jLnNhdmUoKTtcbiAgICAgIHRoaXMuZHJhd0NvbnRlbnQoaXNDbGlwLCBpc01hc2spO1xuICAgICAgZG9jLnJlc3RvcmUoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRUcmFuc2Zvcm1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBtdWx0aXBseU1hdHJpeChwYXJzZUFzcGVjdFJhdGlvKGFzcGVjdFJhdGlvLCB3aWR0aCwgaGVpZ2h0LCB2aWV3Qm94WzJdLCB2aWV3Qm94WzNdKSwgWzEsIDAsIDAsIDEsIC12aWV3Qm94WzBdLCAtdmlld0JveFsxXV0pO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1Hcm91cCA9IGZ1bmN0aW9uIFN2Z0VsZW1Hcm91cChvYmosIGluaGVyaXRzKSB7XG4gICAgU3ZnRWxlbUNvbnRhaW5lci5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuXG4gICAgdGhpcy5kcmF3SW5Eb2N1bWVudCA9IGZ1bmN0aW9uIChpc0NsaXAsIGlzTWFzaykge1xuICAgICAgZG9jLnNhdmUoKTtcblxuICAgICAgaWYgKHRoaXMubGluayAmJiAhaXNDbGlwICYmICFpc01hc2spIHtcbiAgICAgICAgdGhpcy5hZGRMaW5rKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZHJhd0NvbnRlbnQoaXNDbGlwLCBpc01hc2spO1xuICAgICAgZG9jLnJlc3RvcmUoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRUcmFuc2Zvcm1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldCgndHJhbnNmb3JtJyk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgU3ZnRWxlbUxpbmsgPSBmdW5jdGlvbiBTdmdFbGVtTGluayhvYmosIGluaGVyaXRzKSB7XG4gICAgaWYgKGluaGVyaXRzICYmIGluaGVyaXRzLmlzVGV4dCkge1xuICAgICAgU3ZnRWxlbVRzcGFuLmNhbGwodGhpcywgb2JqLCBpbmhlcml0cyk7XG4gICAgICB0aGlzLmFsbG93ZWRDaGlsZHJlbiA9IFsndGV4dFBhdGgnLCAndHNwYW4nLCAnI3RleHQnLCAnI2NkYXRhLXNlY3Rpb24nLCAnYSddO1xuICAgIH0gZWxzZSB7XG4gICAgICBTdmdFbGVtR3JvdXAuY2FsbCh0aGlzLCBvYmosIGluaGVyaXRzKTtcbiAgICB9XG5cbiAgICB0aGlzLmxpbmsgPSB0aGlzLmF0dHIoJ2hyZWYnKSB8fCB0aGlzLmF0dHIoJ3hsaW5rOmhyZWYnKTtcblxuICAgIHRoaXMuYWRkTGluayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLmxpbmsubWF0Y2goL14oPzpbYS16XVthLXowLTkrLi1dKjp8XFwvXFwvKT8vaSkgJiYgdGhpcy5nZXRDaGlsZHJlbigpLmxlbmd0aCkge1xuICAgICAgICB2YXIgYmJveCA9IHRoaXMuZ2V0Qm91bmRpbmdTaGFwZSgpLnRyYW5zZm9ybShnZXRHbG9iYWxNYXRyaXgoKSkuZ2V0Qm91bmRpbmdCb3goKTtcbiAgICAgICAgZG9jSW5zZXJ0TGluayhiYm94WzBdLCBiYm94WzFdLCBiYm94WzJdLCBiYm94WzNdLCB0aGlzLmxpbmspO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1TdmcgPSBmdW5jdGlvbiBTdmdFbGVtU3ZnKG9iaiwgaW5oZXJpdHMpIHtcbiAgICBTdmdFbGVtQ29udGFpbmVyLmNhbGwodGhpcywgb2JqLCBpbmhlcml0cyk7XG4gICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMZW5ndGgoJ3dpZHRoJywgdGhpcy5nZXRQYXJlbnRWV2lkdGgoKSwgdGhpcy5nZXRQYXJlbnRWV2lkdGgoKSksXG4gICAgICAgIGhlaWdodCA9IHRoaXMuZ2V0TGVuZ3RoKCdoZWlnaHQnLCB0aGlzLmdldFBhcmVudFZIZWlnaHQoKSwgdGhpcy5nZXRQYXJlbnRWSGVpZ2h0KCkpLFxuICAgICAgICB4ID0gdGhpcy5nZXRMZW5ndGgoJ3gnLCB0aGlzLmdldFBhcmVudFZXaWR0aCgpLCAwKSxcbiAgICAgICAgeSA9IHRoaXMuZ2V0TGVuZ3RoKCd5JywgdGhpcy5nZXRQYXJlbnRWSGVpZ2h0KCksIDApO1xuXG4gICAgaWYgKGluaGVyaXRzIGluc3RhbmNlb2YgU3ZnRWxlbVVzZSkge1xuICAgICAgd2lkdGggPSBpbmhlcml0cy5nZXRMZW5ndGgoJ3dpZHRoJywgaW5oZXJpdHMuZ2V0UGFyZW50VldpZHRoKCksIHdpZHRoKTtcbiAgICAgIGhlaWdodCA9IGluaGVyaXRzLmdldExlbmd0aCgnaGVpZ2h0JywgaW5oZXJpdHMuZ2V0UGFyZW50VkhlaWdodCgpLCBoZWlnaHQpO1xuICAgIH1cblxuICAgIHZhciBhc3BlY3RSYXRpbyA9IHRoaXMuYXR0cigncHJlc2VydmVBc3BlY3RSYXRpbycpLFxuICAgICAgICB2aWV3Qm94ID0gdGhpcy5nZXRWaWV3Ym94KCd2aWV3Qm94JywgWzAsIDAsIHdpZHRoLCBoZWlnaHRdKTtcblxuICAgIGlmICh0aGlzLmlzT3V0ZXJFbGVtZW50ICYmIHByZXNlcnZlQXNwZWN0UmF0aW8pIHtcbiAgICAgIHggPSB5ID0gMDtcbiAgICAgIHdpZHRoID0gdmlld3BvcnRXaWR0aDtcbiAgICAgIGhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0O1xuICAgICAgYXNwZWN0UmF0aW8gPSBwcmVzZXJ2ZUFzcGVjdFJhdGlvO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0VldpZHRoID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHZpZXdCb3hbMl07XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0VkhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB2aWV3Qm94WzNdO1xuICAgIH07XG5cbiAgICB0aGlzLmRyYXdJbkRvY3VtZW50ID0gZnVuY3Rpb24gKGlzQ2xpcCwgaXNNYXNrKSB7XG4gICAgICBkb2Muc2F2ZSgpO1xuXG4gICAgICBpZiAodGhpcy5nZXQoJ292ZXJmbG93JykgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgIG5ldyBTdmdTaGFwZSgpLk0oeCwgeSkuTCh4ICsgd2lkdGgsIHkpLkwoeCArIHdpZHRoLCB5ICsgaGVpZ2h0KS5MKHgsIHkgKyBoZWlnaHQpLlooKS50cmFuc2Zvcm0odGhpcy5nZXQoJ3RyYW5zZm9ybScpKS5pbnNlcnRJbkRvY3VtZW50KCk7XG4gICAgICAgIGRvYy5jbGlwKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZHJhd0NvbnRlbnQoaXNDbGlwLCBpc01hc2spO1xuICAgICAgZG9jLnJlc3RvcmUoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRUcmFuc2Zvcm1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBtdWx0aXBseU1hdHJpeCh0aGlzLmdldCgndHJhbnNmb3JtJyksIFsxLCAwLCAwLCAxLCB4LCB5XSwgcGFyc2VBc3BlY3RSYXRpbyhhc3BlY3RSYXRpbywgd2lkdGgsIGhlaWdodCwgdmlld0JveFsyXSwgdmlld0JveFszXSksIFsxLCAwLCAwLCAxLCAtdmlld0JveFswXSwgLXZpZXdCb3hbMV1dKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBTVkdFbGVtSW1hZ2UgPSBmdW5jdGlvbiBTVkdFbGVtSW1hZ2Uob2JqLCBpbmhlcml0cykge1xuICAgIFN2Z0VsZW1TdHlsYWJsZS5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuICAgIHZhciBsaW5rID0gaW1hZ2VDYWxsYmFjayh0aGlzLmF0dHIoJ2hyZWYnKSB8fCB0aGlzLmF0dHIoJ3hsaW5rOmhyZWYnKSB8fCAnJyksXG4gICAgICAgIHggPSB0aGlzLmdldExlbmd0aCgneCcsIHRoaXMuZ2V0VldpZHRoKCksIDApLFxuICAgICAgICB5ID0gdGhpcy5nZXRMZW5ndGgoJ3knLCB0aGlzLmdldFZIZWlnaHQoKSwgMCksXG4gICAgICAgIHdpZHRoID0gdGhpcy5nZXRMZW5ndGgoJ3dpZHRoJywgdGhpcy5nZXRWV2lkdGgoKSwgJ2F1dG8nKSxcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5nZXRMZW5ndGgoJ2hlaWdodCcsIHRoaXMuZ2V0VkhlaWdodCgpLCAnYXV0bycpLFxuICAgICAgICBpbWFnZTtcblxuICAgIHRyeSB7XG4gICAgICBpbWFnZSA9IGRvYy5vcGVuSW1hZ2UobGluayk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgd2FybmluZ0NhbGxiYWNrKCdTVkdFbGVtSW1hZ2U6IGZhaWxlZCB0byBvcGVuIGltYWdlIFwiJyArIGxpbmsgKyAnXCIgaW4gUERGS2l0Jyk7XG4gICAgfVxuXG4gICAgaWYgKGltYWdlKSB7XG4gICAgICBpZiAod2lkdGggPT09ICdhdXRvJyAmJiBoZWlnaHQgIT09ICdhdXRvJykge1xuICAgICAgICB3aWR0aCA9IGhlaWdodCAqIGltYWdlLndpZHRoIC8gaW1hZ2UuaGVpZ2h0O1xuICAgICAgfSBlbHNlIGlmIChoZWlnaHQgPT09ICdhdXRvJyAmJiB3aWR0aCAhPT0gJ2F1dG8nKSB7XG4gICAgICAgIGhlaWdodCA9IHdpZHRoICogaW1hZ2UuaGVpZ2h0IC8gaW1hZ2Uud2lkdGg7XG4gICAgICB9IGVsc2UgaWYgKHdpZHRoID09PSAnYXV0bycgJiYgaGVpZ2h0ID09PSAnYXV0bycpIHtcbiAgICAgICAgd2lkdGggPSBpbWFnZS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3aWR0aCA9PT0gJ2F1dG8nIHx8IHdpZHRoIDwgMCkge1xuICAgICAgd2lkdGggPSAwO1xuICAgIH1cblxuICAgIGlmIChoZWlnaHQgPT09ICdhdXRvJyB8fCBoZWlnaHQgPCAwKSB7XG4gICAgICBoZWlnaHQgPSAwO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0VHJhbnNmb3JtYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXQoJ3RyYW5zZm9ybScpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEJvdW5kaW5nU2hhcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV3IFN2Z1NoYXBlKCkuTSh4LCB5KS5MKHggKyB3aWR0aCwgeSkuTSh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpLkwoeCwgeSArIGhlaWdodCk7XG4gICAgfTtcblxuICAgIHRoaXMuZHJhd0luRG9jdW1lbnQgPSBmdW5jdGlvbiAoaXNDbGlwLCBpc01hc2spIHtcbiAgICAgIGlmICh0aGlzLmdldCgndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJyB8fCAhaW1hZ2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb2Muc2F2ZSgpO1xuICAgICAgdGhpcy50cmFuc2Zvcm0oKTtcblxuICAgICAgaWYgKHRoaXMuZ2V0KCdvdmVyZmxvdycpID09PSAnaGlkZGVuJykge1xuICAgICAgICBkb2MucmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KS5jbGlwKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xpcCgpO1xuICAgICAgdGhpcy5tYXNrKCk7XG4gICAgICBkb2MudHJhbnNsYXRlKHgsIHkpO1xuICAgICAgZG9jLnRyYW5zZm9ybS5hcHBseShkb2MsIHBhcnNlQXNwZWN0UmF0aW8odGhpcy5hdHRyKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyksIHdpZHRoLCBoZWlnaHQsIGltYWdlID8gaW1hZ2Uud2lkdGggOiB3aWR0aCwgaW1hZ2UgPyBpbWFnZS5oZWlnaHQgOiBoZWlnaHQpKTtcblxuICAgICAgaWYgKCFpc0NsaXApIHtcbiAgICAgICAgZG9jLmZpbGxPcGFjaXR5KHRoaXMuZ2V0KCdvcGFjaXR5JykpO1xuICAgICAgICBkb2MuaW1hZ2UoaW1hZ2UsIDAsIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jLnJlY3QoMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCk7XG4gICAgICAgIGRvY0ZpbGxDb2xvcihEZWZhdWx0Q29sb3JzLndoaXRlKS5maWxsKCk7XG4gICAgICB9XG5cbiAgICAgIGRvYy5yZXN0b3JlKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgU3ZnRWxlbVBhdHRlcm4gPSBmdW5jdGlvbiBTdmdFbGVtUGF0dGVybihvYmosIGluaGVyaXRzLCBmYWxsYmFjaykge1xuICAgIFN2Z0VsZW1IYXNDaGlsZHJlbi5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuXG4gICAgdGhpcy5yZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmVmID0gdGhpcy5nZXRVcmwoJ2hyZWYnKSB8fCB0aGlzLmdldFVybCgneGxpbms6aHJlZicpO1xuXG4gICAgICBpZiAocmVmICYmIHJlZi5ub2RlTmFtZSA9PT0gb2JqLm5vZGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3ZnRWxlbVBhdHRlcm4ocmVmLCBpbmhlcml0cywgZmFsbGJhY2spO1xuICAgICAgfVxuICAgIH0uY2FsbCh0aGlzKTtcblxuICAgIHZhciBfYXR0ciA9IHRoaXMuYXR0cjtcblxuICAgIHRoaXMuYXR0ciA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBhdHRyID0gX2F0dHIuY2FsbCh0aGlzLCBrZXkpO1xuXG4gICAgICBpZiAoYXR0ciAhPSBudWxsIHx8IGtleSA9PT0gJ2hyZWYnIHx8IGtleSA9PT0gJ3hsaW5rOmhyZWYnKSB7XG4gICAgICAgIHJldHVybiBhdHRyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yZWYgPyB0aGlzLnJlZi5hdHRyKGtleSkgOiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgX2dldENoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbjtcblxuICAgIHRoaXMuZ2V0Q2hpbGRyZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBfZ2V0Q2hpbGRyZW4uY2FsbCh0aGlzKTtcblxuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yZWYgPyB0aGlzLnJlZi5nZXRDaGlsZHJlbigpIDogW107XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UGFpbnQgPSBmdW5jdGlvbiAoYkJveCwgZ09wYWNpdHksIGlzQ2xpcCwgaXNNYXNrKSB7XG4gICAgICB2YXIgYkJveFVuaXRzUGF0dGVybiA9IHRoaXMuYXR0cigncGF0dGVyblVuaXRzJykgIT09ICd1c2VyU3BhY2VPblVzZScsXG4gICAgICAgICAgYkJveFVuaXRzQ29udGVudCA9IHRoaXMuYXR0cigncGF0dGVybkNvbnRlbnRVbml0cycpID09PSAnb2JqZWN0Qm91bmRpbmdCb3gnLFxuICAgICAgICAgIHggPSB0aGlzLmdldExlbmd0aCgneCcsIGJCb3hVbml0c1BhdHRlcm4gPyAxIDogdGhpcy5nZXRQYXJlbnRWV2lkdGgoKSwgMCksXG4gICAgICAgICAgeSA9IHRoaXMuZ2V0TGVuZ3RoKCd5JywgYkJveFVuaXRzUGF0dGVybiA/IDEgOiB0aGlzLmdldFBhcmVudFZIZWlnaHQoKSwgMCksXG4gICAgICAgICAgd2lkdGggPSB0aGlzLmdldExlbmd0aCgnd2lkdGgnLCBiQm94VW5pdHNQYXR0ZXJuID8gMSA6IHRoaXMuZ2V0UGFyZW50VldpZHRoKCksIDApLFxuICAgICAgICAgIGhlaWdodCA9IHRoaXMuZ2V0TGVuZ3RoKCdoZWlnaHQnLCBiQm94VW5pdHNQYXR0ZXJuID8gMSA6IHRoaXMuZ2V0UGFyZW50VkhlaWdodCgpLCAwKTtcblxuICAgICAgaWYgKGJCb3hVbml0c0NvbnRlbnQgJiYgIWJCb3hVbml0c1BhdHRlcm4pIHtcbiAgICAgICAgLy8gVXNlIHRoZSBzYW1lIHVuaXRzIGZvciBwYXR0ZXJuICYgcGF0dGVybiBjb250ZW50XG4gICAgICAgIHggPSAoeCAtIGJCb3hbMF0pIC8gKGJCb3hbMl0gLSBiQm94WzBdKSB8fCAwO1xuICAgICAgICB5ID0gKHkgLSBiQm94WzFdKSAvIChiQm94WzNdIC0gYkJveFsxXSkgfHwgMDtcbiAgICAgICAgd2lkdGggPSB3aWR0aCAvIChiQm94WzJdIC0gYkJveFswXSkgfHwgMDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IC8gKGJCb3hbM10gLSBiQm94WzFdKSB8fCAwO1xuICAgICAgfSBlbHNlIGlmICghYkJveFVuaXRzQ29udGVudCAmJiBiQm94VW5pdHNQYXR0ZXJuKSB7XG4gICAgICAgIHggPSBiQm94WzBdICsgeCAqIChiQm94WzJdIC0gYkJveFswXSk7XG4gICAgICAgIHkgPSBiQm94WzFdICsgeSAqIChiQm94WzNdIC0gYkJveFsxXSk7XG4gICAgICAgIHdpZHRoID0gd2lkdGggKiAoYkJveFsyXSAtIGJCb3hbMF0pO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKiAoYkJveFszXSAtIGJCb3hbMV0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmlld0JveCA9IHRoaXMuZ2V0Vmlld2JveCgndmlld0JveCcsIFswLCAwLCB3aWR0aCwgaGVpZ2h0XSksXG4gICAgICAgICAgYXNwZWN0UmF0aW8gPSAodGhpcy5hdHRyKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJykgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgICBhc3BlY3RSYXRpb01hdHJpeCA9IG11bHRpcGx5TWF0cml4KHBhcnNlQXNwZWN0UmF0aW8oYXNwZWN0UmF0aW8sIHdpZHRoLCBoZWlnaHQsIHZpZXdCb3hbMl0sIHZpZXdCb3hbM10sIDApLCBbMSwgMCwgMCwgMSwgLXZpZXdCb3hbMF0sIC12aWV3Qm94WzFdXSksXG4gICAgICAgICAgbWF0cml4ID0gcGFyc2VUcmFuZm9ybSh0aGlzLmF0dHIoJ3BhdHRlcm5UcmFuc2Zvcm0nKSk7XG5cbiAgICAgIGlmIChiQm94VW5pdHNDb250ZW50KSB7XG4gICAgICAgIG1hdHJpeCA9IG11bHRpcGx5TWF0cml4KFtiQm94WzJdIC0gYkJveFswXSwgMCwgMCwgYkJveFszXSAtIGJCb3hbMV0sIGJCb3hbMF0sIGJCb3hbMV1dLCBtYXRyaXgpO1xuICAgICAgfVxuXG4gICAgICBtYXRyaXggPSBtdWx0aXBseU1hdHJpeChtYXRyaXgsIFsxLCAwLCAwLCAxLCB4LCB5XSk7XG5cbiAgICAgIGlmICgobWF0cml4ID0gdmFsaWRhdGVNYXRyaXgobWF0cml4KSkgJiYgKGFzcGVjdFJhdGlvTWF0cml4ID0gdmFsaWRhdGVNYXRyaXgoYXNwZWN0UmF0aW9NYXRyaXgpKSAmJiAod2lkdGggPSB2YWxpZGF0ZU51bWJlcih3aWR0aCkpICYmIChoZWlnaHQgPSB2YWxpZGF0ZU51bWJlcihoZWlnaHQpKSkge1xuICAgICAgICB2YXIgZ3JvdXAgPSBkb2NCZWdpbkdyb3VwKFswLCAwLCB3aWR0aCwgaGVpZ2h0XSk7XG4gICAgICAgIGRvYy50cmFuc2Zvcm0uYXBwbHkoZG9jLCBhc3BlY3RSYXRpb01hdHJpeCk7XG4gICAgICAgIHRoaXMuZHJhd0NoaWxkcmVuKGlzQ2xpcCwgaXNNYXNrKTtcbiAgICAgICAgZG9jRW5kR3JvdXAoZ3JvdXApO1xuICAgICAgICByZXR1cm4gW2RvY0NyZWF0ZVBhdHRlcm4oZ3JvdXAsIHdpZHRoLCBoZWlnaHQsIG1hdHJpeCksIGdPcGFjaXR5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxsYmFjayA/IFtmYWxsYmFja1swXSwgZmFsbGJhY2tbMV0gKiBnT3BhY2l0eV0gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0VldpZHRoID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGJCb3hVbml0c1BhdHRlcm4gPSB0aGlzLmF0dHIoJ3BhdHRlcm5Vbml0cycpICE9PSAndXNlclNwYWNlT25Vc2UnLFxuICAgICAgICAgIHdpZHRoID0gdGhpcy5nZXRMZW5ndGgoJ3dpZHRoJywgYkJveFVuaXRzUGF0dGVybiA/IDEgOiB0aGlzLmdldFBhcmVudFZXaWR0aCgpLCAwKTtcbiAgICAgIHJldHVybiB0aGlzLmdldFZpZXdib3goJ3ZpZXdCb3gnLCBbMCwgMCwgd2lkdGgsIDBdKVsyXTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRWSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGJCb3hVbml0c1BhdHRlcm4gPSB0aGlzLmF0dHIoJ3BhdHRlcm5Vbml0cycpICE9PSAndXNlclNwYWNlT25Vc2UnLFxuICAgICAgICAgIGhlaWdodCA9IHRoaXMuZ2V0TGVuZ3RoKCdoZWlnaHQnLCBiQm94VW5pdHNQYXR0ZXJuID8gMSA6IHRoaXMuZ2V0UGFyZW50VkhlaWdodCgpLCAwKTtcbiAgICAgIHJldHVybiB0aGlzLmdldFZpZXdib3goJ3ZpZXdCb3gnLCBbMCwgMCwgMCwgaGVpZ2h0XSlbM107XG4gICAgfTtcbiAgfTtcblxuICB2YXIgU3ZnRWxlbUdyYWRpZW50ID0gZnVuY3Rpb24gU3ZnRWxlbUdyYWRpZW50KG9iaiwgaW5oZXJpdHMsIGZhbGxiYWNrKSB7XG4gICAgU3ZnRWxlbS5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuICAgIHRoaXMuYWxsb3dlZENoaWxkcmVuID0gWydzdG9wJ107XG5cbiAgICB0aGlzLnJlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZWYgPSB0aGlzLmdldFVybCgnaHJlZicpIHx8IHRoaXMuZ2V0VXJsKCd4bGluazpocmVmJyk7XG5cbiAgICAgIGlmIChyZWYgJiYgcmVmLm5vZGVOYW1lID09PSBvYmoubm9kZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdmdFbGVtR3JhZGllbnQocmVmLCBpbmhlcml0cywgZmFsbGJhY2spO1xuICAgICAgfVxuICAgIH0uY2FsbCh0aGlzKTtcblxuICAgIHZhciBfYXR0ciA9IHRoaXMuYXR0cjtcblxuICAgIHRoaXMuYXR0ciA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBhdHRyID0gX2F0dHIuY2FsbCh0aGlzLCBrZXkpO1xuXG4gICAgICBpZiAoYXR0ciAhPSBudWxsIHx8IGtleSA9PT0gJ2hyZWYnIHx8IGtleSA9PT0gJ3hsaW5rOmhyZWYnKSB7XG4gICAgICAgIHJldHVybiBhdHRyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yZWYgPyB0aGlzLnJlZi5hdHRyKGtleSkgOiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgX2dldENoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbjtcblxuICAgIHRoaXMuZ2V0Q2hpbGRyZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBfZ2V0Q2hpbGRyZW4uY2FsbCh0aGlzKTtcblxuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yZWYgPyB0aGlzLnJlZi5nZXRDaGlsZHJlbigpIDogW107XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UGFpbnQgPSBmdW5jdGlvbiAoYkJveCwgZ09wYWNpdHksIGlzQ2xpcCwgaXNNYXNrKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKCk7XG5cbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuWzBdLFxuICAgICAgICAgICAgc3RvcENvbG9yID0gY2hpbGQuZ2V0KCdzdG9wLWNvbG9yJyk7XG5cbiAgICAgICAgaWYgKHN0b3BDb2xvciA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wYWNpdHlUb0NvbG9yKHN0b3BDb2xvciwgY2hpbGQuZ2V0KCdzdG9wLW9wYWNpdHknKSAqIGdPcGFjaXR5LCBpc01hc2spO1xuICAgICAgfVxuXG4gICAgICB2YXIgYkJveFVuaXRzID0gdGhpcy5hdHRyKCdncmFkaWVudFVuaXRzJykgIT09ICd1c2VyU3BhY2VPblVzZScsXG4gICAgICAgICAgbWF0cml4ID0gcGFyc2VUcmFuZm9ybSh0aGlzLmF0dHIoJ2dyYWRpZW50VHJhbnNmb3JtJykpLFxuICAgICAgICAgIHNwcmVhZCA9IHRoaXMuYXR0cignc3ByZWFkTWV0aG9kJyksXG4gICAgICAgICAgZ3JhZCxcbiAgICAgICAgICB4MSxcbiAgICAgICAgICB4MixcbiAgICAgICAgICB5MSxcbiAgICAgICAgICB5MixcbiAgICAgICAgICByMixcbiAgICAgICAgICBuQWZ0ZXIgPSAwLFxuICAgICAgICAgIG5CZWZvcmUgPSAwLFxuICAgICAgICAgIG5Ub3RhbCA9IDE7XG5cbiAgICAgIGlmIChiQm94VW5pdHMpIHtcbiAgICAgICAgbWF0cml4ID0gbXVsdGlwbHlNYXRyaXgoW2JCb3hbMl0gLSBiQm94WzBdLCAwLCAwLCBiQm94WzNdIC0gYkJveFsxXSwgYkJveFswXSwgYkJveFsxXV0sIG1hdHJpeCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRyaXggPSB2YWxpZGF0ZU1hdHJpeChtYXRyaXgpKSB7XG4gICAgICAgIGlmICh0aGlzLm5hbWUgPT09ICdsaW5lYXJHcmFkaWVudCcpIHtcbiAgICAgICAgICB4MSA9IHRoaXMuZ2V0TGVuZ3RoKCd4MScsIGJCb3hVbml0cyA/IDEgOiB0aGlzLmdldFZXaWR0aCgpLCAwKTtcbiAgICAgICAgICB4MiA9IHRoaXMuZ2V0TGVuZ3RoKCd4MicsIGJCb3hVbml0cyA/IDEgOiB0aGlzLmdldFZXaWR0aCgpLCBiQm94VW5pdHMgPyAxIDogdGhpcy5nZXRWV2lkdGgoKSk7XG4gICAgICAgICAgeTEgPSB0aGlzLmdldExlbmd0aCgneTEnLCBiQm94VW5pdHMgPyAxIDogdGhpcy5nZXRWSGVpZ2h0KCksIDApO1xuICAgICAgICAgIHkyID0gdGhpcy5nZXRMZW5ndGgoJ3kyJywgYkJveFVuaXRzID8gMSA6IHRoaXMuZ2V0VkhlaWdodCgpLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4MiA9IHRoaXMuZ2V0TGVuZ3RoKCdjeCcsIGJCb3hVbml0cyA/IDEgOiB0aGlzLmdldFZXaWR0aCgpLCBiQm94VW5pdHMgPyAwLjUgOiAwLjUgKiB0aGlzLmdldFZXaWR0aCgpKTtcbiAgICAgICAgICB5MiA9IHRoaXMuZ2V0TGVuZ3RoKCdjeScsIGJCb3hVbml0cyA/IDEgOiB0aGlzLmdldFZIZWlnaHQoKSwgYkJveFVuaXRzID8gMC41IDogMC41ICogdGhpcy5nZXRWSGVpZ2h0KCkpO1xuICAgICAgICAgIHIyID0gdGhpcy5nZXRMZW5ndGgoJ3InLCBiQm94VW5pdHMgPyAxIDogdGhpcy5nZXRWaWV3cG9ydCgpLCBiQm94VW5pdHMgPyAwLjUgOiAwLjUgKiB0aGlzLmdldFZpZXdwb3J0KCkpO1xuICAgICAgICAgIHgxID0gdGhpcy5nZXRMZW5ndGgoJ2Z4JywgYkJveFVuaXRzID8gMSA6IHRoaXMuZ2V0VldpZHRoKCksIHgyKTtcbiAgICAgICAgICB5MSA9IHRoaXMuZ2V0TGVuZ3RoKCdmeScsIGJCb3hVbml0cyA/IDEgOiB0aGlzLmdldFZIZWlnaHQoKSwgeTIpO1xuXG4gICAgICAgICAgaWYgKHIyIDwgMCkge1xuICAgICAgICAgICAgd2FybmluZ0NhbGxiYWNrKCdTdmdFbGVtR3JhZGllbnQ6IG5lZ2F0aXZlIHIgdmFsdWUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZCA9IE1hdGguc3FydChNYXRoLnBvdyh4MiAtIHgxLCAyKSArIE1hdGgucG93KHkyIC0geTEsIDIpKSxcbiAgICAgICAgICAgICAgbXVsdGlwbGllciA9IDE7XG5cbiAgICAgICAgICBpZiAoZCA+IHIyKSB7XG4gICAgICAgICAgICAvLyBhY2NvcmRpbmcgdG8gc3BlY2lmaWNhdGlvblxuICAgICAgICAgICAgbXVsdGlwbGllciA9IHIyIC8gZDtcbiAgICAgICAgICAgIHgxID0geDIgKyAoeDEgLSB4MikgKiBtdWx0aXBsaWVyO1xuICAgICAgICAgICAgeTEgPSB5MiArICh5MSAtIHkyKSAqIG11bHRpcGxpZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcjIgPSBNYXRoLm1heChyMiwgZCAqIG11bHRpcGxpZXIgKiAoMSArIDFlLTYpKTsgLy8gZml4IGZvciBlZGdlLWNhc2UgZ3JhZGllbnRzIHNlZSBpc3N1ZSAjODRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzcHJlYWQgPT09ICdyZWZsZWN0JyB8fCBzcHJlYWQgPT09ICdyZXBlYXQnKSB7XG4gICAgICAgICAgdmFyIGludiA9IGludmVyc2VNYXRyaXgobWF0cml4KSxcbiAgICAgICAgICAgICAgY29ybmVyMSA9IHRyYW5zZm9ybVBvaW50KFtiQm94WzBdLCBiQm94WzFdXSwgaW52KSxcbiAgICAgICAgICAgICAgY29ybmVyMiA9IHRyYW5zZm9ybVBvaW50KFtiQm94WzJdLCBiQm94WzFdXSwgaW52KSxcbiAgICAgICAgICAgICAgY29ybmVyMyA9IHRyYW5zZm9ybVBvaW50KFtiQm94WzJdLCBiQm94WzNdXSwgaW52KSxcbiAgICAgICAgICAgICAgY29ybmVyNCA9IHRyYW5zZm9ybVBvaW50KFtiQm94WzBdLCBiQm94WzNdXSwgaW52KTtcblxuICAgICAgICAgIGlmICh0aGlzLm5hbWUgPT09ICdsaW5lYXJHcmFkaWVudCcpIHtcbiAgICAgICAgICAgIC8vIFNlZSBmaWxlICdncmFkaWVudC1yZXBlYXQtbWF0aHMucG5nJ1xuICAgICAgICAgICAgbkFmdGVyID0gTWF0aC5tYXgoKGNvcm5lcjFbMF0gLSB4MikgKiAoeDIgLSB4MSkgKyAoY29ybmVyMVsxXSAtIHkyKSAqICh5MiAtIHkxKSwgKGNvcm5lcjJbMF0gLSB4MikgKiAoeDIgLSB4MSkgKyAoY29ybmVyMlsxXSAtIHkyKSAqICh5MiAtIHkxKSwgKGNvcm5lcjNbMF0gLSB4MikgKiAoeDIgLSB4MSkgKyAoY29ybmVyM1sxXSAtIHkyKSAqICh5MiAtIHkxKSwgKGNvcm5lcjRbMF0gLSB4MikgKiAoeDIgLSB4MSkgKyAoY29ybmVyNFsxXSAtIHkyKSAqICh5MiAtIHkxKSkgLyAoTWF0aC5wb3coeDIgLSB4MSwgMikgKyBNYXRoLnBvdyh5MiAtIHkxLCAyKSk7XG4gICAgICAgICAgICBuQmVmb3JlID0gTWF0aC5tYXgoKGNvcm5lcjFbMF0gLSB4MSkgKiAoeDEgLSB4MikgKyAoY29ybmVyMVsxXSAtIHkxKSAqICh5MSAtIHkyKSwgKGNvcm5lcjJbMF0gLSB4MSkgKiAoeDEgLSB4MikgKyAoY29ybmVyMlsxXSAtIHkxKSAqICh5MSAtIHkyKSwgKGNvcm5lcjNbMF0gLSB4MSkgKiAoeDEgLSB4MikgKyAoY29ybmVyM1sxXSAtIHkxKSAqICh5MSAtIHkyKSwgKGNvcm5lcjRbMF0gLSB4MSkgKiAoeDEgLSB4MikgKyAoY29ybmVyNFsxXSAtIHkxKSAqICh5MSAtIHkyKSkgLyAoTWF0aC5wb3coeDIgLSB4MSwgMikgKyBNYXRoLnBvdyh5MiAtIHkxLCAyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5BZnRlciA9IE1hdGguc3FydChNYXRoLm1heChNYXRoLnBvdyhjb3JuZXIxWzBdIC0geDIsIDIpICsgTWF0aC5wb3coY29ybmVyMVsxXSAtIHkyLCAyKSwgTWF0aC5wb3coY29ybmVyMlswXSAtIHgyLCAyKSArIE1hdGgucG93KGNvcm5lcjJbMV0gLSB5MiwgMiksIE1hdGgucG93KGNvcm5lcjNbMF0gLSB4MiwgMikgKyBNYXRoLnBvdyhjb3JuZXIzWzFdIC0geTIsIDIpLCBNYXRoLnBvdyhjb3JuZXI0WzBdIC0geDIsIDIpICsgTWF0aC5wb3coY29ybmVyNFsxXSAtIHkyLCAyKSkpIC8gcjIgLSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5BZnRlciA9IE1hdGguY2VpbChuQWZ0ZXIgKyAwLjUpOyAvLyBBZGQgYSBsaXR0bGUgbW9yZSBiZWNhdXNlIHRoZSBzdHJva2UgY2FuIGV4dGVuZCBvdXRzaWRlIG9mIHRoZSBib3VuZGluZyBib3hcblxuICAgICAgICAgIG5CZWZvcmUgPSBNYXRoLmNlaWwobkJlZm9yZSArIDAuNSk7XG4gICAgICAgICAgblRvdGFsID0gbkJlZm9yZSArIDEgKyBuQWZ0ZXI7IC8vIEhvdyBtYW55IHRpbWVzIHRoZSBncmFkaWVudCBuZWVkcyB0byBiZSByZXBlYXRlZCB0byBmaWxsIHRoZSBvYmplY3QgYm91bmRpbmcgYm94XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uYW1lID09PSAnbGluZWFyR3JhZGllbnQnKSB7XG4gICAgICAgICAgZ3JhZCA9IGRvYy5saW5lYXJHcmFkaWVudCh4MSAtIG5CZWZvcmUgKiAoeDIgLSB4MSksIHkxIC0gbkJlZm9yZSAqICh5MiAtIHkxKSwgeDIgKyBuQWZ0ZXIgKiAoeDIgLSB4MSksIHkyICsgbkFmdGVyICogKHkyIC0geTEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBncmFkID0gZG9jLnJhZGlhbEdyYWRpZW50KHgxLCB5MSwgMCwgeDIsIHkyLCByMiArIG5BZnRlciAqIHIyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgblRvdGFsOyBuKyspIHtcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gMCxcbiAgICAgICAgICAgICAgaW5PcmRlciA9IHNwcmVhZCAhPT0gJ3JlZmxlY3QnIHx8IChuIC0gbkJlZm9yZSkgJSAyID09PSAwO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIF9jaGlsZCA9IGNoaWxkcmVuW2luT3JkZXIgPyBpIDogY2hpbGRyZW4ubGVuZ3RoIC0gMSAtIGldLFxuICAgICAgICAgICAgICAgIF9zdG9wQ29sb3IgPSBfY2hpbGQuZ2V0KCdzdG9wLWNvbG9yJyk7XG5cbiAgICAgICAgICAgIGlmIChfc3RvcENvbG9yID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgX3N0b3BDb2xvciA9IERlZmF1bHRDb2xvcnMudHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9zdG9wQ29sb3IgPSBvcGFjaXR5VG9Db2xvcihfc3RvcENvbG9yLCBfY2hpbGQuZ2V0KCdzdG9wLW9wYWNpdHknKSAqIGdPcGFjaXR5LCBpc01hc2spO1xuICAgICAgICAgICAgb2Zmc2V0ID0gTWF0aC5tYXgob2Zmc2V0LCBpbk9yZGVyID8gX2NoaWxkLmdldFBlcmNlbnQoJ29mZnNldCcsIDApIDogMSAtIF9jaGlsZC5nZXRQZXJjZW50KCdvZmZzZXQnLCAwKSk7XG5cbiAgICAgICAgICAgIGlmIChpID09PSAwICYmIF9zdG9wQ29sb3JbMF0ubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgIGdyYWQuX2NvbG9yU3BhY2UgPSAnRGV2aWNlQ01ZSyc7XG4gICAgICAgICAgICB9IC8vIEZpeCB1bnRpbCBQUiAjNzYzIGlzIG1lcmdlZCBpbnRvIFBERktpdFxuXG5cbiAgICAgICAgICAgIGlmIChpID09PSAwICYmIG9mZnNldCA+IDApIHtcbiAgICAgICAgICAgICAgZ3JhZC5zdG9wKChuICsgMCkgLyBuVG90YWwsIF9zdG9wQ29sb3JbMF0sIF9zdG9wQ29sb3JbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBncmFkLnN0b3AoKG4gKyBvZmZzZXQpIC8gKG5BZnRlciArIG5CZWZvcmUgKyAxKSwgX3N0b3BDb2xvclswXSwgX3N0b3BDb2xvclsxXSk7XG5cbiAgICAgICAgICAgIGlmIChpID09PSBjaGlsZHJlbi5sZW5ndGggLSAxICYmIG9mZnNldCA8IDEpIHtcbiAgICAgICAgICAgICAgZ3JhZC5zdG9wKChuICsgMSkgLyBuVG90YWwsIF9zdG9wQ29sb3JbMF0sIF9zdG9wQ29sb3JbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdyYWQuc2V0VHJhbnNmb3JtLmFwcGx5KGdyYWQsIG1hdHJpeCk7XG4gICAgICAgIHJldHVybiBbZ3JhZCwgMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsbGJhY2sgPyBbZmFsbGJhY2tbMF0sIGZhbGxiYWNrWzFdICogZ09wYWNpdHldIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1CYXNpY1NoYXBlID0gZnVuY3Rpb24gU3ZnRWxlbUJhc2ljU2hhcGUob2JqLCBpbmhlcml0cykge1xuICAgIFN2Z0VsZW1TdHlsYWJsZS5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuICAgIHRoaXMuZGFzaFNjYWxlID0gMTtcblxuICAgIHRoaXMuZ2V0Qm91bmRpbmdTaGFwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNoYXBlO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFRyYW5zZm9ybWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0KCd0cmFuc2Zvcm0nKTtcbiAgICB9O1xuXG4gICAgdGhpcy5kcmF3SW5Eb2N1bWVudCA9IGZ1bmN0aW9uIChpc0NsaXAsIGlzTWFzaykge1xuICAgICAgaWYgKHRoaXMuZ2V0KCd2aXNpYmlsaXR5JykgPT09ICdoaWRkZW4nIHx8ICF0aGlzLnNoYXBlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9jLnNhdmUoKTtcbiAgICAgIHRoaXMudHJhbnNmb3JtKCk7XG4gICAgICB0aGlzLmNsaXAoKTtcblxuICAgICAgaWYgKCFpc0NsaXApIHtcbiAgICAgICAgdmFyIG1hc2tlZCA9IHRoaXMubWFzaygpLFxuICAgICAgICAgICAgZ3JvdXA7XG5cbiAgICAgICAgaWYgKG1hc2tlZCkge1xuICAgICAgICAgIGdyb3VwID0gZG9jQmVnaW5Hcm91cChnZXRQYWdlQkJveCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdWJQYXRocyA9IHRoaXMuc2hhcGUuZ2V0U3ViUGF0aHMoKSxcbiAgICAgICAgICAgIGZpbGwgPSB0aGlzLmdldEZpbGwoaXNDbGlwLCBpc01hc2spLFxuICAgICAgICAgICAgc3Ryb2tlID0gdGhpcy5nZXRTdHJva2UoaXNDbGlwLCBpc01hc2spLFxuICAgICAgICAgICAgbGluZVdpZHRoID0gdGhpcy5nZXQoJ3N0cm9rZS13aWR0aCcpLFxuICAgICAgICAgICAgbGluZUNhcCA9IHRoaXMuZ2V0KCdzdHJva2UtbGluZWNhcCcpO1xuXG4gICAgICAgIGlmIChmaWxsIHx8IHN0cm9rZSkge1xuICAgICAgICAgIGlmIChmaWxsKSB7XG4gICAgICAgICAgICBkb2NGaWxsQ29sb3IoZmlsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0cm9rZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdWJQYXRocy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICBpZiAoaXNFcXVhbChzdWJQYXRoc1tqXS50b3RhbExlbmd0aCwgMCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoKGxpbmVDYXAgPT09ICdzcXVhcmUnIHx8IGxpbmVDYXAgPT09ICdyb3VuZCcpICYmIGxpbmVXaWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdWJQYXRoc1tqXS5zdGFydFBvaW50ICYmIHN1YlBhdGhzW2pdLnN0YXJ0UG9pbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3g0ID0gc3ViUGF0aHNbal0uc3RhcnRQb2ludFswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF95NCA9IHN1YlBhdGhzW2pdLnN0YXJ0UG9pbnRbMV07XG4gICAgICAgICAgICAgICAgICAgIGRvY0ZpbGxDb2xvcihzdHJva2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lQ2FwID09PSAnc3F1YXJlJykge1xuICAgICAgICAgICAgICAgICAgICAgIGRvYy5yZWN0KF94NCAtIDAuNSAqIGxpbmVXaWR0aCwgX3k0IC0gMC41ICogbGluZVdpZHRoLCBsaW5lV2lkdGgsIGxpbmVXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZUNhcCA9PT0gJ3JvdW5kJykge1xuICAgICAgICAgICAgICAgICAgICAgIGRvYy5jaXJjbGUoX3g0LCBfeTQsIDAuNSAqIGxpbmVXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBkb2MuZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZGFzaEFycmF5ID0gdGhpcy5nZXQoJ3N0cm9rZS1kYXNoYXJyYXknKSxcbiAgICAgICAgICAgICAgICBkYXNoT2Zmc2V0ID0gdGhpcy5nZXQoJ3N0cm9rZS1kYXNob2Zmc2V0Jyk7XG5cbiAgICAgICAgICAgIGlmIChpc05vdEVxdWFsKHRoaXMuZGFzaFNjYWxlLCAxKSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfajIgPSAwOyBfajIgPCBkYXNoQXJyYXkubGVuZ3RoOyBfajIrKykge1xuICAgICAgICAgICAgICAgIGRhc2hBcnJheVtfajJdICo9IHRoaXMuZGFzaFNjYWxlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGFzaE9mZnNldCAqPSB0aGlzLmRhc2hTY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9jU3Ryb2tlQ29sb3Ioc3Ryb2tlKTtcbiAgICAgICAgICAgIGRvYy5saW5lV2lkdGgobGluZVdpZHRoKS5taXRlckxpbWl0KHRoaXMuZ2V0KCdzdHJva2UtbWl0ZXJsaW1pdCcpKS5saW5lSm9pbih0aGlzLmdldCgnc3Ryb2tlLWxpbmVqb2luJykpLmxpbmVDYXAobGluZUNhcCkuZGFzaChkYXNoQXJyYXksIHtcbiAgICAgICAgICAgICAgcGhhc2U6IGRhc2hPZmZzZXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAodmFyIF9qMyA9IDA7IF9qMyA8IHN1YlBhdGhzLmxlbmd0aDsgX2ozKyspIHtcbiAgICAgICAgICAgIGlmIChzdWJQYXRoc1tfajNdLnRvdGFsTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBzdWJQYXRoc1tfajNdLmluc2VydEluRG9jdW1lbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmlsbCAmJiBzdHJva2UpIHtcbiAgICAgICAgICAgIGRvYy5maWxsQW5kU3Ryb2tlKHRoaXMuZ2V0KCdmaWxsLXJ1bGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWxsKSB7XG4gICAgICAgICAgICBkb2MuZmlsbCh0aGlzLmdldCgnZmlsbC1ydWxlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3Ryb2tlKSB7XG4gICAgICAgICAgICBkb2Muc3Ryb2tlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1hcmtlclN0YXJ0ID0gdGhpcy5nZXQoJ21hcmtlci1zdGFydCcpLFxuICAgICAgICAgICAgbWFya2VyTWlkID0gdGhpcy5nZXQoJ21hcmtlci1taWQnKSxcbiAgICAgICAgICAgIG1hcmtlckVuZCA9IHRoaXMuZ2V0KCdtYXJrZXItZW5kJyk7XG5cbiAgICAgICAgaWYgKG1hcmtlclN0YXJ0ICE9PSAnbm9uZScgfHwgbWFya2VyTWlkICE9PSAnbm9uZScgfHwgbWFya2VyRW5kICE9PSAnbm9uZScpIHtcbiAgICAgICAgICB2YXIgbWFya2Vyc1BvcyA9IHRoaXMuc2hhcGUuZ2V0TWFya2VycygpO1xuXG4gICAgICAgICAgaWYgKG1hcmtlclN0YXJ0ICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHZhciBtYXJrZXIgPSBuZXcgU3ZnRWxlbU1hcmtlcihtYXJrZXJTdGFydCwgbnVsbCk7XG4gICAgICAgICAgICBtYXJrZXIuZHJhd01hcmtlcihmYWxzZSwgaXNNYXNrLCBtYXJrZXJzUG9zWzBdLCBsaW5lV2lkdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtYXJrZXJNaWQgIT09ICdub25lJykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXJrZXJzUG9zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgX21hcmtlciA9IG5ldyBTdmdFbGVtTWFya2VyKG1hcmtlck1pZCwgbnVsbCk7XG5cbiAgICAgICAgICAgICAgX21hcmtlci5kcmF3TWFya2VyKGZhbHNlLCBpc01hc2ssIG1hcmtlcnNQb3NbaV0sIGxpbmVXaWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1hcmtlckVuZCAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB2YXIgX21hcmtlcjIgPSBuZXcgU3ZnRWxlbU1hcmtlcihtYXJrZXJFbmQsIG51bGwpO1xuXG4gICAgICAgICAgICBfbWFya2VyMi5kcmF3TWFya2VyKGZhbHNlLCBpc01hc2ssIG1hcmtlcnNQb3NbbWFya2Vyc1Bvcy5sZW5ndGggLSAxXSwgbGluZVdpZHRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICBkb2NFbmRHcm91cChncm91cCk7XG4gICAgICAgICAgZG9jSW5zZXJ0R3JvdXAoZ3JvdXApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNoYXBlLmluc2VydEluRG9jdW1lbnQoKTtcbiAgICAgICAgZG9jRmlsbENvbG9yKERlZmF1bHRDb2xvcnMud2hpdGUpO1xuICAgICAgICBkb2MuZmlsbCh0aGlzLmdldCgnY2xpcC1ydWxlJykpO1xuICAgICAgfVxuXG4gICAgICBkb2MucmVzdG9yZSgpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1SZWN0ID0gZnVuY3Rpb24gU3ZnRWxlbVJlY3Qob2JqLCBpbmhlcml0cykge1xuICAgIFN2Z0VsZW1CYXNpY1NoYXBlLmNhbGwodGhpcywgb2JqLCBpbmhlcml0cyk7XG4gICAgdmFyIHggPSB0aGlzLmdldExlbmd0aCgneCcsIHRoaXMuZ2V0VldpZHRoKCksIDApLFxuICAgICAgICB5ID0gdGhpcy5nZXRMZW5ndGgoJ3knLCB0aGlzLmdldFZIZWlnaHQoKSwgMCksXG4gICAgICAgIHcgPSB0aGlzLmdldExlbmd0aCgnd2lkdGgnLCB0aGlzLmdldFZXaWR0aCgpLCAwKSxcbiAgICAgICAgaCA9IHRoaXMuZ2V0TGVuZ3RoKCdoZWlnaHQnLCB0aGlzLmdldFZIZWlnaHQoKSwgMCksXG4gICAgICAgIHJ4ID0gdGhpcy5nZXRMZW5ndGgoJ3J4JywgdGhpcy5nZXRWV2lkdGgoKSksXG4gICAgICAgIHJ5ID0gdGhpcy5nZXRMZW5ndGgoJ3J5JywgdGhpcy5nZXRWSGVpZ2h0KCkpO1xuXG4gICAgaWYgKHJ4ID09PSB1bmRlZmluZWQgJiYgcnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcnggPSByeSA9IDA7XG4gICAgfSBlbHNlIGlmIChyeCA9PT0gdW5kZWZpbmVkICYmIHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ4ID0gcnk7XG4gICAgfSBlbHNlIGlmIChyeCAhPT0gdW5kZWZpbmVkICYmIHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ5ID0gcng7XG4gICAgfVxuXG4gICAgaWYgKHcgPiAwICYmIGggPiAwKSB7XG4gICAgICBpZiAocnggJiYgcnkpIHtcbiAgICAgICAgcnggPSBNYXRoLm1pbihyeCwgMC41ICogdyk7XG4gICAgICAgIHJ5ID0gTWF0aC5taW4ocnksIDAuNSAqIGgpO1xuICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFN2Z1NoYXBlKCkuTSh4ICsgcngsIHkpLkwoeCArIHcgLSByeCwgeSkuQShyeCwgcnksIDAsIDAsIDEsIHggKyB3LCB5ICsgcnkpLkwoeCArIHcsIHkgKyBoIC0gcnkpLkEocngsIHJ5LCAwLCAwLCAxLCB4ICsgdyAtIHJ4LCB5ICsgaCkuTCh4ICsgcngsIHkgKyBoKS5BKHJ4LCByeSwgMCwgMCwgMSwgeCwgeSArIGggLSByeSkuTCh4LCB5ICsgcnkpLkEocngsIHJ5LCAwLCAwLCAxLCB4ICsgcngsIHkpLlooKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgU3ZnU2hhcGUoKS5NKHgsIHkpLkwoeCArIHcsIHkpLkwoeCArIHcsIHkgKyBoKS5MKHgsIHkgKyBoKS5aKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hhcGUgPSBuZXcgU3ZnU2hhcGUoKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1DaXJjbGUgPSBmdW5jdGlvbiBTdmdFbGVtQ2lyY2xlKG9iaiwgaW5oZXJpdHMpIHtcbiAgICBTdmdFbGVtQmFzaWNTaGFwZS5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuICAgIHZhciBjeCA9IHRoaXMuZ2V0TGVuZ3RoKCdjeCcsIHRoaXMuZ2V0VldpZHRoKCksIDApLFxuICAgICAgICBjeSA9IHRoaXMuZ2V0TGVuZ3RoKCdjeScsIHRoaXMuZ2V0VkhlaWdodCgpLCAwKSxcbiAgICAgICAgciA9IHRoaXMuZ2V0TGVuZ3RoKCdyJywgdGhpcy5nZXRWaWV3cG9ydCgpLCAwKTtcblxuICAgIGlmIChyID4gMCkge1xuICAgICAgdGhpcy5zaGFwZSA9IG5ldyBTdmdTaGFwZSgpLk0oY3ggKyByLCBjeSkuQShyLCByLCAwLCAwLCAxLCBjeCAtIHIsIGN5KS5BKHIsIHIsIDAsIDAsIDEsIGN4ICsgciwgY3kpLlooKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaGFwZSA9IG5ldyBTdmdTaGFwZSgpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgU3ZnRWxlbUVsbGlwc2UgPSBmdW5jdGlvbiBTdmdFbGVtRWxsaXBzZShvYmosIGluaGVyaXRzKSB7XG4gICAgU3ZnRWxlbUJhc2ljU2hhcGUuY2FsbCh0aGlzLCBvYmosIGluaGVyaXRzKTtcbiAgICB2YXIgY3ggPSB0aGlzLmdldExlbmd0aCgnY3gnLCB0aGlzLmdldFZXaWR0aCgpLCAwKSxcbiAgICAgICAgY3kgPSB0aGlzLmdldExlbmd0aCgnY3knLCB0aGlzLmdldFZIZWlnaHQoKSwgMCksXG4gICAgICAgIHJ4ID0gdGhpcy5nZXRMZW5ndGgoJ3J4JywgdGhpcy5nZXRWV2lkdGgoKSwgMCksXG4gICAgICAgIHJ5ID0gdGhpcy5nZXRMZW5ndGgoJ3J5JywgdGhpcy5nZXRWSGVpZ2h0KCksIDApO1xuXG4gICAgaWYgKHJ4ID4gMCAmJiByeSA+IDApIHtcbiAgICAgIHRoaXMuc2hhcGUgPSBuZXcgU3ZnU2hhcGUoKS5NKGN4ICsgcngsIGN5KS5BKHJ4LCByeSwgMCwgMCwgMSwgY3ggLSByeCwgY3kpLkEocngsIHJ5LCAwLCAwLCAxLCBjeCArIHJ4LCBjeSkuWigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNoYXBlID0gbmV3IFN2Z1NoYXBlKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBTdmdFbGVtTGluZSA9IGZ1bmN0aW9uIFN2Z0VsZW1MaW5lKG9iaiwgaW5oZXJpdHMpIHtcbiAgICBTdmdFbGVtQmFzaWNTaGFwZS5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuICAgIHZhciB4MSA9IHRoaXMuZ2V0TGVuZ3RoKCd4MScsIHRoaXMuZ2V0VldpZHRoKCksIDApLFxuICAgICAgICB5MSA9IHRoaXMuZ2V0TGVuZ3RoKCd5MScsIHRoaXMuZ2V0VkhlaWdodCgpLCAwKSxcbiAgICAgICAgeDIgPSB0aGlzLmdldExlbmd0aCgneDInLCB0aGlzLmdldFZXaWR0aCgpLCAwKSxcbiAgICAgICAgeTIgPSB0aGlzLmdldExlbmd0aCgneTInLCB0aGlzLmdldFZIZWlnaHQoKSwgMCk7XG4gICAgdGhpcy5zaGFwZSA9IG5ldyBTdmdTaGFwZSgpLk0oeDEsIHkxKS5MKHgyLCB5Mik7XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1Qb2x5bGluZSA9IGZ1bmN0aW9uIFN2Z0VsZW1Qb2x5bGluZShvYmosIGluaGVyaXRzKSB7XG4gICAgU3ZnRWxlbUJhc2ljU2hhcGUuY2FsbCh0aGlzLCBvYmosIGluaGVyaXRzKTtcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5nZXROdW1iZXJMaXN0KCdwb2ludHMnKTtcbiAgICB0aGlzLnNoYXBlID0gbmV3IFN2Z1NoYXBlKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2hhcGUuTShwb2ludHNbaV0sIHBvaW50c1tpICsgMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaGFwZS5MKHBvaW50c1tpXSwgcG9pbnRzW2kgKyAxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvaW50cy5lcnJvcikge1xuICAgICAgd2FybmluZ0NhbGxiYWNrKCdTdmdFbGVtUG9seWdvbjogdW5leHBlY3RlZCBzdHJpbmcgJyArIHBvaW50cy5lcnJvcik7XG4gICAgfVxuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggJSAyID09PSAxKSB7XG4gICAgICB3YXJuaW5nQ2FsbGJhY2soJ1N2Z0VsZW1Qb2x5bGluZTogdW5ldmVuIG51bWJlciBvZiBjb29yZGluYXRlcycpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgU3ZnRWxlbVBvbHlnb24gPSBmdW5jdGlvbiBTdmdFbGVtUG9seWdvbihvYmosIGluaGVyaXRzKSB7XG4gICAgU3ZnRWxlbUJhc2ljU2hhcGUuY2FsbCh0aGlzLCBvYmosIGluaGVyaXRzKTtcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5nZXROdW1iZXJMaXN0KCdwb2ludHMnKTtcbiAgICB0aGlzLnNoYXBlID0gbmV3IFN2Z1NoYXBlKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2hhcGUuTShwb2ludHNbaV0sIHBvaW50c1tpICsgMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaGFwZS5MKHBvaW50c1tpXSwgcG9pbnRzW2kgKyAxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zaGFwZS5aKCk7XG5cbiAgICBpZiAocG9pbnRzLmVycm9yKSB7XG4gICAgICB3YXJuaW5nQ2FsbGJhY2soJ1N2Z0VsZW1Qb2x5Z29uOiB1bmV4cGVjdGVkIHN0cmluZyAnICsgcG9pbnRzLmVycm9yKTtcbiAgICB9XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCAlIDIgPT09IDEpIHtcbiAgICAgIHdhcm5pbmdDYWxsYmFjaygnU3ZnRWxlbVBvbHlnb246IHVuZXZlbiBudW1iZXIgb2YgY29vcmRpbmF0ZXMnKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1QYXRoID0gZnVuY3Rpb24gU3ZnRWxlbVBhdGgob2JqLCBpbmhlcml0cykge1xuICAgIFN2Z0VsZW1CYXNpY1NoYXBlLmNhbGwodGhpcywgb2JqLCBpbmhlcml0cyk7XG4gICAgdGhpcy5zaGFwZSA9IG5ldyBTdmdTaGFwZSgpLnBhdGgodGhpcy5hdHRyKCdkJykpO1xuICAgIHZhciBwYXRoTGVuZ3RoID0gdGhpcy5nZXRMZW5ndGgoJ3BhdGhMZW5ndGgnLCB0aGlzLmdldFZpZXdwb3J0KCkpO1xuICAgIHRoaXMucGF0aExlbmd0aCA9IHBhdGhMZW5ndGggPiAwID8gcGF0aExlbmd0aCA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRhc2hTY2FsZSA9IHRoaXMucGF0aExlbmd0aCAhPT0gdW5kZWZpbmVkID8gdGhpcy5zaGFwZS50b3RhbExlbmd0aCAvIHRoaXMucGF0aExlbmd0aCA6IDE7XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1NYXJrZXIgPSBmdW5jdGlvbiBTdmdFbGVtTWFya2VyKG9iaiwgaW5oZXJpdHMpIHtcbiAgICBTdmdFbGVtSGFzQ2hpbGRyZW4uY2FsbCh0aGlzLCBvYmosIGluaGVyaXRzKTtcbiAgICB2YXIgd2lkdGggPSB0aGlzLmdldExlbmd0aCgnbWFya2VyV2lkdGgnLCB0aGlzLmdldFBhcmVudFZXaWR0aCgpLCAzKSxcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5nZXRMZW5ndGgoJ21hcmtlckhlaWdodCcsIHRoaXMuZ2V0UGFyZW50VkhlaWdodCgpLCAzKSxcbiAgICAgICAgdmlld0JveCA9IHRoaXMuZ2V0Vmlld2JveCgndmlld0JveCcsIFswLCAwLCB3aWR0aCwgaGVpZ2h0XSk7XG5cbiAgICB0aGlzLmdldFZXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB2aWV3Qm94WzJdO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFZIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdmlld0JveFszXTtcbiAgICB9O1xuXG4gICAgdGhpcy5kcmF3TWFya2VyID0gZnVuY3Rpb24gKGlzQ2xpcCwgaXNNYXNrLCBwb3NBcnJheSwgc3Ryb2tlV2lkdGgpIHtcbiAgICAgIGRvYy5zYXZlKCk7XG4gICAgICB2YXIgb3JpZW50ID0gdGhpcy5hdHRyKCdvcmllbnQnKSxcbiAgICAgICAgICB1bml0cyA9IHRoaXMuYXR0cignbWFya2VyVW5pdHMnKSxcbiAgICAgICAgICByb3RhdGUgPSBvcmllbnQgPT09ICdhdXRvJyA/IHBvc0FycmF5WzJdIDogKHBhcnNlRmxvYXQob3JpZW50KSB8fCAwKSAqIE1hdGguUEkgLyAxODAsXG4gICAgICAgICAgc2NhbGUgPSB1bml0cyA9PT0gJ3VzZXJTcGFjZU9uVXNlJyA/IDEgOiBzdHJva2VXaWR0aDtcbiAgICAgIGRvYy50cmFuc2Zvcm0oTWF0aC5jb3Mocm90YXRlKSAqIHNjYWxlLCBNYXRoLnNpbihyb3RhdGUpICogc2NhbGUsIC1NYXRoLnNpbihyb3RhdGUpICogc2NhbGUsIE1hdGguY29zKHJvdGF0ZSkgKiBzY2FsZSwgcG9zQXJyYXlbMF0sIHBvc0FycmF5WzFdKTtcbiAgICAgIHZhciByZWZYID0gdGhpcy5nZXRMZW5ndGgoJ3JlZlgnLCB0aGlzLmdldFZXaWR0aCgpLCAwKSxcbiAgICAgICAgICByZWZZID0gdGhpcy5nZXRMZW5ndGgoJ3JlZlknLCB0aGlzLmdldFZIZWlnaHQoKSwgMCksXG4gICAgICAgICAgYXNwZWN0UmF0aW9NYXRyaXggPSBwYXJzZUFzcGVjdFJhdGlvKHRoaXMuYXR0cigncHJlc2VydmVBc3BlY3RSYXRpbycpLCB3aWR0aCwgaGVpZ2h0LCB2aWV3Qm94WzJdLCB2aWV3Qm94WzNdLCAwLjUpO1xuXG4gICAgICBpZiAodGhpcy5nZXQoJ292ZXJmbG93JykgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgIGRvYy5yZWN0KGFzcGVjdFJhdGlvTWF0cml4WzBdICogKHZpZXdCb3hbMF0gKyB2aWV3Qm94WzJdIC8gMiAtIHJlZlgpIC0gd2lkdGggLyAyLCBhc3BlY3RSYXRpb01hdHJpeFszXSAqICh2aWV3Qm94WzFdICsgdmlld0JveFszXSAvIDIgLSByZWZZKSAtIGhlaWdodCAvIDIsIHdpZHRoLCBoZWlnaHQpLmNsaXAoKTtcbiAgICAgIH1cblxuICAgICAgZG9jLnRyYW5zZm9ybS5hcHBseShkb2MsIGFzcGVjdFJhdGlvTWF0cml4KTtcbiAgICAgIGRvYy50cmFuc2xhdGUoLXJlZlgsIC1yZWZZKTtcbiAgICAgIHZhciBncm91cDtcblxuICAgICAgaWYgKHRoaXMuZ2V0KCdvcGFjaXR5JykgPCAxICYmICFpc0NsaXApIHtcbiAgICAgICAgZ3JvdXAgPSBkb2NCZWdpbkdyb3VwKGdldFBhZ2VCQm94KCkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRyYXdDaGlsZHJlbihpc0NsaXAsIGlzTWFzayk7XG5cbiAgICAgIGlmIChncm91cCkge1xuICAgICAgICBkb2NFbmRHcm91cChncm91cCk7XG4gICAgICAgIGRvYy5maWxsT3BhY2l0eSh0aGlzLmdldCgnb3BhY2l0eScpKTtcbiAgICAgICAgZG9jSW5zZXJ0R3JvdXAoZ3JvdXApO1xuICAgICAgfVxuXG4gICAgICBkb2MucmVzdG9yZSgpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1DbGlwUGF0aCA9IGZ1bmN0aW9uIFN2Z0VsZW1DbGlwUGF0aChvYmosIGluaGVyaXRzKSB7XG4gICAgU3ZnRWxlbUhhc0NoaWxkcmVuLmNhbGwodGhpcywgb2JqLCBpbmhlcml0cyk7XG5cbiAgICB0aGlzLnVzZU1hc2sgPSBmdW5jdGlvbiAoYkJveCkge1xuICAgICAgdmFyIGdyb3VwID0gZG9jQmVnaW5Hcm91cChnZXRQYWdlQkJveCgpKTtcbiAgICAgIGRvYy5zYXZlKCk7XG5cbiAgICAgIGlmICh0aGlzLmF0dHIoJ2NsaXBQYXRoVW5pdHMnKSA9PT0gJ29iamVjdEJvdW5kaW5nQm94Jykge1xuICAgICAgICBkb2MudHJhbnNmb3JtKGJCb3hbMl0gLSBiQm94WzBdLCAwLCAwLCBiQm94WzNdIC0gYkJveFsxXSwgYkJveFswXSwgYkJveFsxXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xpcCgpO1xuICAgICAgdGhpcy5kcmF3Q2hpbGRyZW4odHJ1ZSwgZmFsc2UpO1xuICAgICAgZG9jLnJlc3RvcmUoKTtcbiAgICAgIGRvY0VuZEdyb3VwKGdyb3VwKTtcbiAgICAgIGRvY0FwcGx5TWFzayhncm91cCwgdHJ1ZSk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgU3ZnRWxlbU1hc2sgPSBmdW5jdGlvbiBTdmdFbGVtTWFzayhvYmosIGluaGVyaXRzKSB7XG4gICAgU3ZnRWxlbUhhc0NoaWxkcmVuLmNhbGwodGhpcywgb2JqLCBpbmhlcml0cyk7XG5cbiAgICB0aGlzLnVzZU1hc2sgPSBmdW5jdGlvbiAoYkJveCkge1xuICAgICAgdmFyIGdyb3VwID0gZG9jQmVnaW5Hcm91cChnZXRQYWdlQkJveCgpKTtcbiAgICAgIGRvYy5zYXZlKCk7XG4gICAgICB2YXIgeCwgeSwgdywgaDtcblxuICAgICAgaWYgKHRoaXMuYXR0cignbWFza1VuaXRzJykgPT09ICd1c2VyU3BhY2VPblVzZScpIHtcbiAgICAgICAgeCA9IHRoaXMuZ2V0TGVuZ3RoKCd4JywgdGhpcy5nZXRWV2lkdGgoKSwgLTAuMSAqIChiQm94WzJdIC0gYkJveFswXSkgKyBiQm94WzBdKTtcbiAgICAgICAgeSA9IHRoaXMuZ2V0TGVuZ3RoKCd5JywgdGhpcy5nZXRWSGVpZ2h0KCksIC0wLjEgKiAoYkJveFszXSAtIGJCb3hbMV0pICsgYkJveFsxXSk7XG4gICAgICAgIHcgPSB0aGlzLmdldExlbmd0aCgnd2lkdGgnLCB0aGlzLmdldFZXaWR0aCgpLCAxLjIgKiAoYkJveFsyXSAtIGJCb3hbMF0pKTtcbiAgICAgICAgaCA9IHRoaXMuZ2V0TGVuZ3RoKCdoZWlnaHQnLCB0aGlzLmdldFZIZWlnaHQoKSwgMS4yICogKGJCb3hbM10gLSBiQm94WzFdKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4ID0gdGhpcy5nZXRMZW5ndGgoJ3gnLCB0aGlzLmdldFZXaWR0aCgpLCAtMC4xKSAqIChiQm94WzJdIC0gYkJveFswXSkgKyBiQm94WzBdO1xuICAgICAgICB5ID0gdGhpcy5nZXRMZW5ndGgoJ3knLCB0aGlzLmdldFZIZWlnaHQoKSwgLTAuMSkgKiAoYkJveFszXSAtIGJCb3hbMV0pICsgYkJveFsxXTtcbiAgICAgICAgdyA9IHRoaXMuZ2V0TGVuZ3RoKCd3aWR0aCcsIHRoaXMuZ2V0VldpZHRoKCksIDEuMikgKiAoYkJveFsyXSAtIGJCb3hbMF0pO1xuICAgICAgICBoID0gdGhpcy5nZXRMZW5ndGgoJ2hlaWdodCcsIHRoaXMuZ2V0VkhlaWdodCgpLCAxLjIpICogKGJCb3hbM10gLSBiQm94WzFdKTtcbiAgICAgIH1cblxuICAgICAgZG9jLnJlY3QoeCwgeSwgdywgaCkuY2xpcCgpO1xuXG4gICAgICBpZiAodGhpcy5hdHRyKCdtYXNrQ29udGVudFVuaXRzJykgPT09ICdvYmplY3RCb3VuZGluZ0JveCcpIHtcbiAgICAgICAgZG9jLnRyYW5zZm9ybShiQm94WzJdIC0gYkJveFswXSwgMCwgMCwgYkJveFszXSAtIGJCb3hbMV0sIGJCb3hbMF0sIGJCb3hbMV0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNsaXAoKTtcbiAgICAgIHRoaXMuZHJhd0NoaWxkcmVuKGZhbHNlLCB0cnVlKTtcbiAgICAgIGRvYy5yZXN0b3JlKCk7XG4gICAgICBkb2NFbmRHcm91cChncm91cCk7XG4gICAgICBkb2NBcHBseU1hc2soZ3JvdXAsIHRydWUpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1UZXh0Q29udGFpbmVyID0gZnVuY3Rpb24gU3ZnRWxlbVRleHRDb250YWluZXIob2JqLCBpbmhlcml0cykge1xuICAgIFN2Z0VsZW1TdHlsYWJsZS5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuICAgIHRoaXMuYWxsb3dlZENoaWxkcmVuID0gWyd0c3BhbicsICcjdGV4dCcsICcjY2RhdGEtc2VjdGlvbicsICdhJ107XG4gICAgdGhpcy5pc1RleHQgPSB0cnVlO1xuXG4gICAgdGhpcy5nZXRCb3VuZGluZ1NoYXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNoYXBlID0gbmV3IFN2Z1NoYXBlKCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcG9zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwb3MgPSB0aGlzLl9wb3NbaV07XG5cbiAgICAgICAgaWYgKCFwb3MuaGlkZGVuKSB7XG4gICAgICAgICAgdmFyIGR4MCA9IHBvcy5hc2NlbnQgKiBNYXRoLnNpbihwb3Mucm90YXRlKSxcbiAgICAgICAgICAgICAgZHkwID0gLXBvcy5hc2NlbnQgKiBNYXRoLmNvcyhwb3Mucm90YXRlKSxcbiAgICAgICAgICAgICAgZHgxID0gcG9zLmRlc2NlbnQgKiBNYXRoLnNpbihwb3Mucm90YXRlKSxcbiAgICAgICAgICAgICAgZHkxID0gLXBvcy5kZXNjZW50ICogTWF0aC5jb3MocG9zLnJvdGF0ZSksXG4gICAgICAgICAgICAgIGR4MiA9IHBvcy53aWR0aCAqIE1hdGguY29zKHBvcy5yb3RhdGUpLFxuICAgICAgICAgICAgICBkeTIgPSBwb3Mud2lkdGggKiBNYXRoLnNpbihwb3Mucm90YXRlKTtcbiAgICAgICAgICBzaGFwZS5NKHBvcy54ICsgZHgwLCBwb3MueSArIGR5MCkuTChwb3MueCArIGR4MCArIGR4MiwgcG9zLnkgKyBkeTAgKyBkeTIpLk0ocG9zLnggKyBkeDEgKyBkeDIsIHBvcy55ICsgZHkxICsgZHkyKS5MKHBvcy54ICsgZHgxLCBwb3MueSArIGR5MSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNoYXBlO1xuICAgIH07XG5cbiAgICB0aGlzLmRyYXdUZXh0SW5Eb2N1bWVudCA9IGZ1bmN0aW9uIChpc0NsaXAsIGlzTWFzaykge1xuICAgICAgaWYgKHRoaXMubGluayAmJiAhaXNDbGlwICYmICFpc01hc2spIHtcbiAgICAgICAgdGhpcy5hZGRMaW5rKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmdldCgndGV4dC1kZWNvcmF0aW9uJykgPT09ICd1bmRlcmxpbmUnKSB7XG4gICAgICAgIHRoaXMuZGVjb3JhdGUoMC4wNSAqIHRoaXMuX2ZvbnQuc2l6ZSwgLTAuMDc1ICogdGhpcy5fZm9udC5zaXplLCBpc0NsaXAsIGlzTWFzayk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmdldCgndGV4dC1kZWNvcmF0aW9uJykgPT09ICdvdmVybGluZScpIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0ZSgwLjA1ICogdGhpcy5fZm9udC5zaXplLCBnZXRBc2NlbnQodGhpcy5fZm9udC5mb250LCB0aGlzLl9mb250LnNpemUpICsgMC4wNzUgKiB0aGlzLl9mb250LnNpemUsIGlzQ2xpcCwgaXNNYXNrKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpbGwgPSB0aGlzLmdldEZpbGwoaXNDbGlwLCBpc01hc2spLFxuICAgICAgICAgIHN0cm9rZSA9IHRoaXMuZ2V0U3Ryb2tlKGlzQ2xpcCwgaXNNYXNrKSxcbiAgICAgICAgICBzdHJva2VXaWR0aCA9IHRoaXMuZ2V0KCdzdHJva2Utd2lkdGgnKTtcblxuICAgICAgaWYgKHRoaXMuX2ZvbnQuZmF1eEJvbGQpIHtcbiAgICAgICAgaWYgKCFzdHJva2UpIHtcbiAgICAgICAgICBzdHJva2UgPSBmaWxsO1xuICAgICAgICAgIHN0cm9rZVdpZHRoID0gdGhpcy5fZm9udC5zaXplICogMC4wMztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJva2VXaWR0aCArPSB0aGlzLl9mb250LnNpemUgKiAwLjAzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGRFbGVtID0gY2hpbGRyZW5baV07XG5cbiAgICAgICAgc3dpdGNoIChjaGlsZEVsZW0ubmFtZSkge1xuICAgICAgICAgIGNhc2UgJ3RzcGFuJzpcbiAgICAgICAgICBjYXNlICd0ZXh0UGF0aCc6XG4gICAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgICBpZiAoY2hpbGRFbGVtLmdldCgnZGlzcGxheScpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgY2hpbGRFbGVtLmRyYXdUZXh0SW5Eb2N1bWVudChpc0NsaXAsIGlzTWFzayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnI3RleHQnOlxuICAgICAgICAgIGNhc2UgJyNjZGF0YS1zZWN0aW9uJzpcbiAgICAgICAgICAgIGlmICh0aGlzLmdldCgndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbGwgfHwgc3Ryb2tlIHx8IGlzQ2xpcCkge1xuICAgICAgICAgICAgICBpZiAoZmlsbCkge1xuICAgICAgICAgICAgICAgIGRvY0ZpbGxDb2xvcihmaWxsKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdHJva2UgJiYgc3Ryb2tlV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBkb2NTdHJva2VDb2xvcihzdHJva2UpO1xuICAgICAgICAgICAgICAgIGRvYy5saW5lV2lkdGgoc3Ryb2tlV2lkdGgpLm1pdGVyTGltaXQodGhpcy5nZXQoJ3N0cm9rZS1taXRlcmxpbWl0JykpLmxpbmVKb2luKHRoaXMuZ2V0KCdzdHJva2UtbGluZWpvaW4nKSkubGluZUNhcCh0aGlzLmdldCgnc3Ryb2tlLWxpbmVjYXAnKSkuZGFzaCh0aGlzLmdldCgnc3Ryb2tlLWRhc2hhcnJheScpLCB7XG4gICAgICAgICAgICAgICAgICBwaGFzZTogdGhpcy5nZXQoJ3N0cm9rZS1kYXNob2Zmc2V0JylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRvY0JlZ2luVGV4dCh0aGlzLl9mb250LmZvbnQsIHRoaXMuX2ZvbnQuc2l6ZSk7XG4gICAgICAgICAgICAgIGRvY1NldFRleHRNb2RlKCEhZmlsbCwgISFzdHJva2UpO1xuXG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBwb3MgPSBjaGlsZEVsZW0uX3BvczsgaiA8IHBvcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmICghcG9zW2pdLmhpZGRlbiAmJiBpc05vdEVxdWFsKHBvc1tqXS53aWR0aCwgMCkpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyhwb3Nbal0ucm90YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICBzaW4gPSBNYXRoLnNpbihwb3Nbal0ucm90YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICBza2V3ID0gdGhpcy5fZm9udC5mYXV4SXRhbGljID8gLTAuMjUgOiAwO1xuICAgICAgICAgICAgICAgICAgZG9jU2V0VGV4dE1hdHJpeChjb3MgKiBwb3Nbal0uc2NhbGUsIHNpbiAqIHBvc1tqXS5zY2FsZSwgY29zICogc2tldyAtIHNpbiwgc2luICogc2tldyArIGNvcywgcG9zW2pdLngsIHBvc1tqXS55KTtcbiAgICAgICAgICAgICAgICAgIGRvY1dyaXRlR2x5cGgocG9zW2pdLmdseXBoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkb2NFbmRUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmdldCgndGV4dC1kZWNvcmF0aW9uJykgPT09ICdsaW5lLXRocm91Z2gnKSB7XG4gICAgICAgIHRoaXMuZGVjb3JhdGUoMC4wNSAqIHRoaXMuX2ZvbnQuc2l6ZSwgMC41ICogKGdldEFzY2VudCh0aGlzLl9mb250LmZvbnQsIHRoaXMuX2ZvbnQuc2l6ZSkgKyBnZXREZXNjZW50KHRoaXMuX2ZvbnQuZm9udCwgdGhpcy5fZm9udC5zaXplKSksIGlzQ2xpcCwgaXNNYXNrKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5kZWNvcmF0ZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGxpbmVQb3NpdGlvbiwgaXNDbGlwLCBpc01hc2spIHtcbiAgICAgIHZhciBmaWxsID0gdGhpcy5nZXRGaWxsKGlzQ2xpcCwgaXNNYXNrKSxcbiAgICAgICAgICBzdHJva2UgPSB0aGlzLmdldFN0cm9rZShpc0NsaXAsIGlzTWFzayk7XG5cbiAgICAgIGlmIChmaWxsKSB7XG4gICAgICAgIGRvY0ZpbGxDb2xvcihmaWxsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cm9rZSkge1xuICAgICAgICBkb2NTdHJva2VDb2xvcihzdHJva2UpO1xuICAgICAgICBkb2MubGluZVdpZHRoKHRoaXMuZ2V0KCdzdHJva2Utd2lkdGgnKSkubWl0ZXJMaW1pdCh0aGlzLmdldCgnc3Ryb2tlLW1pdGVybGltaXQnKSkubGluZUpvaW4odGhpcy5nZXQoJ3N0cm9rZS1saW5lam9pbicpKS5saW5lQ2FwKHRoaXMuZ2V0KCdzdHJva2UtbGluZWNhcCcpKS5kYXNoKHRoaXMuZ2V0KCdzdHJva2UtZGFzaGFycmF5JyksIHtcbiAgICAgICAgICBwaGFzZTogdGhpcy5nZXQoJ3N0cm9rZS1kYXNob2Zmc2V0JylcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBwb3MgPSB0aGlzLl9wb3M7IGogPCBwb3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFwb3Nbal0uaGlkZGVuICYmIGlzTm90RXF1YWwocG9zW2pdLndpZHRoLCAwKSkge1xuICAgICAgICAgIHZhciBkeDAgPSAobGluZVBvc2l0aW9uICsgbGluZVdpZHRoIC8gMikgKiBNYXRoLnNpbihwb3Nbal0ucm90YXRlKSxcbiAgICAgICAgICAgICAgZHkwID0gLShsaW5lUG9zaXRpb24gKyBsaW5lV2lkdGggLyAyKSAqIE1hdGguY29zKHBvc1tqXS5yb3RhdGUpLFxuICAgICAgICAgICAgICBkeDEgPSAobGluZVBvc2l0aW9uIC0gbGluZVdpZHRoIC8gMikgKiBNYXRoLnNpbihwb3Nbal0ucm90YXRlKSxcbiAgICAgICAgICAgICAgZHkxID0gLShsaW5lUG9zaXRpb24gLSBsaW5lV2lkdGggLyAyKSAqIE1hdGguY29zKHBvc1tqXS5yb3RhdGUpLFxuICAgICAgICAgICAgICBkeDIgPSBwb3Nbal0ud2lkdGggKiBNYXRoLmNvcyhwb3Nbal0ucm90YXRlKSxcbiAgICAgICAgICAgICAgZHkyID0gcG9zW2pdLndpZHRoICogTWF0aC5zaW4ocG9zW2pdLnJvdGF0ZSk7XG4gICAgICAgICAgbmV3IFN2Z1NoYXBlKCkuTShwb3Nbal0ueCArIGR4MCwgcG9zW2pdLnkgKyBkeTApLkwocG9zW2pdLnggKyBkeDAgKyBkeDIsIHBvc1tqXS55ICsgZHkwICsgZHkyKS5MKHBvc1tqXS54ICsgZHgxICsgZHgyLCBwb3Nbal0ueSArIGR5MSArIGR5MikuTChwb3Nbal0ueCArIGR4MSwgcG9zW2pdLnkgKyBkeTEpLlooKS5pbnNlcnRJbkRvY3VtZW50KCk7XG5cbiAgICAgICAgICBpZiAoZmlsbCAmJiBzdHJva2UpIHtcbiAgICAgICAgICAgIGRvYy5maWxsQW5kU3Ryb2tlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWxsKSB7XG4gICAgICAgICAgICBkb2MuZmlsbCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3Ryb2tlKSB7XG4gICAgICAgICAgICBkb2Muc3Ryb2tlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICB2YXIgU3ZnRWxlbVRleHROb2RlID0gZnVuY3Rpb24gU3ZnRWxlbVRleHROb2RlKG9iaiwgaW5oZXJpdHMpIHtcbiAgICB0aGlzLm5hbWUgPSBvYmoubm9kZU5hbWU7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IG9iai5ub2RlVmFsdWU7XG4gIH07XG5cbiAgdmFyIFN2Z0VsZW1Uc3BhbiA9IGZ1bmN0aW9uIFN2Z0VsZW1Uc3BhbihvYmosIGluaGVyaXRzKSB7XG4gICAgU3ZnRWxlbVRleHRDb250YWluZXIuY2FsbCh0aGlzLCBvYmosIGluaGVyaXRzKTtcbiAgfTtcblxuICB2YXIgU3ZnRWxlbVRleHRQYXRoID0gZnVuY3Rpb24gU3ZnRWxlbVRleHRQYXRoKG9iaiwgaW5oZXJpdHMpIHtcbiAgICBTdmdFbGVtVGV4dENvbnRhaW5lci5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuICAgIHZhciBwYXRoT2JqZWN0LCBwYXRoTGVuZ3RoLCB0ZW1wO1xuXG4gICAgaWYgKCh0ZW1wID0gdGhpcy5hdHRyKCdwYXRoJykpICYmIHRlbXAudHJpbSgpICE9PSAnJykge1xuICAgICAgdmFyIF9wYXRoTGVuZ3RoID0gdGhpcy5nZXRMZW5ndGgoJ3BhdGhMZW5ndGgnLCB0aGlzLmdldFZpZXdwb3J0KCkpO1xuXG4gICAgICB0aGlzLnBhdGhPYmplY3QgPSBuZXcgU3ZnU2hhcGUoKS5wYXRoKHRlbXApO1xuICAgICAgdGhpcy5wYXRoTGVuZ3RoID0gX3BhdGhMZW5ndGggPiAwID8gX3BhdGhMZW5ndGggOiB0aGlzLnBhdGhPYmplY3QudG90YWxMZW5ndGg7XG4gICAgICB0aGlzLnBhdGhTY2FsZSA9IHRoaXMucGF0aE9iamVjdC50b3RhbExlbmd0aCAvIHRoaXMucGF0aExlbmd0aDtcbiAgICB9IGVsc2UgaWYgKCh0ZW1wID0gdGhpcy5nZXRVcmwoJ2hyZWYnKSB8fCB0aGlzLmdldFVybCgneGxpbms6aHJlZicpKSAmJiB0ZW1wLm5vZGVOYW1lID09PSAncGF0aCcpIHtcbiAgICAgIHZhciBwYXRoRWxlbSA9IG5ldyBTdmdFbGVtUGF0aCh0ZW1wLCB0aGlzKTtcbiAgICAgIHRoaXMucGF0aE9iamVjdCA9IHBhdGhFbGVtLnNoYXBlLmNsb25lKCkudHJhbnNmb3JtKHBhdGhFbGVtLmdldCgndHJhbnNmb3JtJykpO1xuICAgICAgdGhpcy5wYXRoTGVuZ3RoID0gdGhpcy5jaG9vc2VWYWx1ZShwYXRoRWxlbS5wYXRoTGVuZ3RoLCB0aGlzLnBhdGhPYmplY3QudG90YWxMZW5ndGgpO1xuICAgICAgdGhpcy5wYXRoU2NhbGUgPSB0aGlzLnBhdGhPYmplY3QudG90YWxMZW5ndGggLyB0aGlzLnBhdGhMZW5ndGg7XG4gICAgfVxuICB9O1xuXG4gIHZhciBTdmdFbGVtVGV4dCA9IGZ1bmN0aW9uIFN2Z0VsZW1UZXh0KG9iaiwgaW5oZXJpdHMpIHtcbiAgICBTdmdFbGVtVGV4dENvbnRhaW5lci5jYWxsKHRoaXMsIG9iaiwgaW5oZXJpdHMpO1xuICAgIHRoaXMuYWxsb3dlZENoaWxkcmVuID0gWyd0ZXh0UGF0aCcsICd0c3BhbicsICcjdGV4dCcsICcjY2RhdGEtc2VjdGlvbicsICdhJ107XG5cbiAgICAoZnVuY3Rpb24gKHRleHRQYXJlbnRFbGVtKSB7XG4gICAgICB2YXIgcHJvY2Vzc2VkVGV4dCA9ICcnLFxuICAgICAgICAgIHJlbWFpbmluZ1RleHQgPSBvYmoudGV4dENvbnRlbnQsXG4gICAgICAgICAgdGV4dFBhdGhzID0gW10sXG4gICAgICAgICAgY3VycmVudENodW5rID0gW10sXG4gICAgICAgICAgY3VycmVudEFuY2hvcixcbiAgICAgICAgICBjdXJyZW50RGlyZWN0aW9uLFxuICAgICAgICAgIGN1cnJlbnRYID0gMCxcbiAgICAgICAgICBjdXJyZW50WSA9IDA7XG5cbiAgICAgIGZ1bmN0aW9uIGRvQW5jaG9yaW5nKCkge1xuICAgICAgICBpZiAoY3VycmVudENodW5rLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBsYXN0ID0gY3VycmVudENodW5rW2N1cnJlbnRDaHVuay5sZW5ndGggLSAxXTtcbiAgICAgICAgICB2YXIgZmlyc3QgPSBjdXJyZW50Q2h1bmtbMF07XG4gICAgICAgICAgdmFyIHdpZHRoID0gbGFzdC54ICsgbGFzdC53aWR0aCAtIGZpcnN0Lng7XG4gICAgICAgICAgdmFyIGFuY2hvcmR4ID0ge1xuICAgICAgICAgICAgJ3N0YXJ0bHRyJzogMCxcbiAgICAgICAgICAgICdtaWRkbGVsdHInOiAwLjUsXG4gICAgICAgICAgICAnZW5kbHRyJzogMSxcbiAgICAgICAgICAgICdzdGFydHJ0bCc6IDEsXG4gICAgICAgICAgICAnbWlkZGxlcnRsJzogMC41LFxuICAgICAgICAgICAgJ2VuZHJ0bCc6IDBcbiAgICAgICAgICB9W2N1cnJlbnRBbmNob3IgKyBjdXJyZW50RGlyZWN0aW9uXSAqIHdpZHRoIHx8IDA7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnJlbnRDaHVuay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY3VycmVudENodW5rW2ldLnggLT0gYW5jaG9yZHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudENodW5rID0gW107XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGFkanVzdExlbmd0aChwb3MsIGxlbmd0aCwgc3BhY2luZ0FuZEdseXBocykge1xuICAgICAgICB2YXIgZmlyc3RDaGFyID0gcG9zWzBdLFxuICAgICAgICAgICAgbGFzdENoYXIgPSBwb3NbcG9zLmxlbmd0aCAtIDFdLFxuICAgICAgICAgICAgc3RhcnRYID0gZmlyc3RDaGFyLngsXG4gICAgICAgICAgICBlbmRYID0gbGFzdENoYXIueCArIGxhc3RDaGFyLndpZHRoO1xuXG4gICAgICAgIGlmIChzcGFjaW5nQW5kR2x5cGhzKSB7XG4gICAgICAgICAgdmFyIHRleHRTY2FsZSA9IGxlbmd0aCAvIChlbmRYIC0gc3RhcnRYKTtcblxuICAgICAgICAgIGlmICh0ZXh0U2NhbGUgPiAwICYmIHRleHRTY2FsZSA8IEluZmluaXR5KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBvcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICBwb3Nbal0ueCA9IHN0YXJ0WCArIHRleHRTY2FsZSAqIChwb3Nbal0ueCAtIHN0YXJ0WCk7XG4gICAgICAgICAgICAgIHBvc1tqXS5zY2FsZSAqPSB0ZXh0U2NhbGU7XG4gICAgICAgICAgICAgIHBvc1tqXS53aWR0aCAqPSB0ZXh0U2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwb3MubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIHZhciBzcGFjZURpZmYgPSAobGVuZ3RoIC0gKGVuZFggLSBzdGFydFgpKSAvIChwb3MubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIF9qNCA9IDA7IF9qNCA8IHBvcy5sZW5ndGg7IF9qNCsrKSB7XG4gICAgICAgICAgICAgIHBvc1tfajRdLnggKz0gX2o0ICogc3BhY2VEaWZmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRYICs9IGxlbmd0aCAtIChlbmRYIC0gc3RhcnRYKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVjdXJzaXZlKGN1cnJlbnRFbGVtLCBwYXJlbnRFbGVtKSB7XG4gICAgICAgIGN1cnJlbnRFbGVtLl94ID0gY29tYmluZUFycmF5cyhjdXJyZW50RWxlbS5nZXRMZW5ndGhMaXN0KCd4JywgY3VycmVudEVsZW0uZ2V0VldpZHRoKCkpLCBwYXJlbnRFbGVtID8gcGFyZW50RWxlbS5feC5zbGljZShwYXJlbnRFbGVtLl9wb3MubGVuZ3RoKSA6IFtdKTtcbiAgICAgICAgY3VycmVudEVsZW0uX3kgPSBjb21iaW5lQXJyYXlzKGN1cnJlbnRFbGVtLmdldExlbmd0aExpc3QoJ3knLCBjdXJyZW50RWxlbS5nZXRWSGVpZ2h0KCkpLCBwYXJlbnRFbGVtID8gcGFyZW50RWxlbS5feS5zbGljZShwYXJlbnRFbGVtLl9wb3MubGVuZ3RoKSA6IFtdKTtcbiAgICAgICAgY3VycmVudEVsZW0uX2R4ID0gY29tYmluZUFycmF5cyhjdXJyZW50RWxlbS5nZXRMZW5ndGhMaXN0KCdkeCcsIGN1cnJlbnRFbGVtLmdldFZXaWR0aCgpKSwgcGFyZW50RWxlbSA/IHBhcmVudEVsZW0uX2R4LnNsaWNlKHBhcmVudEVsZW0uX3Bvcy5sZW5ndGgpIDogW10pO1xuICAgICAgICBjdXJyZW50RWxlbS5fZHkgPSBjb21iaW5lQXJyYXlzKGN1cnJlbnRFbGVtLmdldExlbmd0aExpc3QoJ2R5JywgY3VycmVudEVsZW0uZ2V0VkhlaWdodCgpKSwgcGFyZW50RWxlbSA/IHBhcmVudEVsZW0uX2R5LnNsaWNlKHBhcmVudEVsZW0uX3Bvcy5sZW5ndGgpIDogW10pO1xuICAgICAgICBjdXJyZW50RWxlbS5fcm90ID0gY29tYmluZUFycmF5cyhjdXJyZW50RWxlbS5nZXROdW1iZXJMaXN0KCdyb3RhdGUnKSwgcGFyZW50RWxlbSA/IHBhcmVudEVsZW0uX3JvdC5zbGljZShwYXJlbnRFbGVtLl9wb3MubGVuZ3RoKSA6IFtdKTtcbiAgICAgICAgY3VycmVudEVsZW0uX2RlZlJvdCA9IGN1cnJlbnRFbGVtLmNob29zZVZhbHVlKGN1cnJlbnRFbGVtLl9yb3RbY3VycmVudEVsZW0uX3JvdC5sZW5ndGggLSAxXSwgcGFyZW50RWxlbSAmJiBwYXJlbnRFbGVtLl9kZWZSb3QsIDApO1xuXG4gICAgICAgIGlmIChjdXJyZW50RWxlbS5uYW1lID09PSAndGV4dFBhdGgnKSB7XG4gICAgICAgICAgY3VycmVudEVsZW0uX3kgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmb250T3B0aW9ucyA9IHtcbiAgICAgICAgICBmYXV4SXRhbGljOiBmYWxzZSxcbiAgICAgICAgICBmYXV4Qm9sZDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgICAgIGZvbnROYW1lb3JMaW5rID0gZm9udENhbGxiYWNrKGN1cnJlbnRFbGVtLmdldCgnZm9udC1mYW1pbHknKSwgY3VycmVudEVsZW0uZ2V0KCdmb250LXdlaWdodCcpID09PSAnYm9sZCcsIGN1cnJlbnRFbGVtLmdldCgnZm9udC1zdHlsZScpID09PSAnaXRhbGljJywgZm9udE9wdGlvbnMpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZG9jLmZvbnQoZm9udE5hbWVvckxpbmspO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgd2FybmluZ0NhbGxiYWNrKCdTVkdFbGVtVGV4dDogZmFpbGVkIHRvIG9wZW4gZm9udCBcIicgKyBmb250TmFtZW9yTGluayArICdcIiBpbiBQREZLaXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRFbGVtLl9wb3MgPSBbXTtcbiAgICAgICAgY3VycmVudEVsZW0uX2luZGV4ID0gMDtcbiAgICAgICAgY3VycmVudEVsZW0uX2ZvbnQgPSB7XG4gICAgICAgICAgZm9udDogZG9jLl9mb250LFxuICAgICAgICAgIHNpemU6IGN1cnJlbnRFbGVtLmdldCgnZm9udC1zaXplJyksXG4gICAgICAgICAgZmF1eEl0YWxpYzogZm9udE9wdGlvbnMuZmF1eEl0YWxpYyxcbiAgICAgICAgICBmYXV4Qm9sZDogZm9udE9wdGlvbnMuZmF1eEJvbGRcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHRleHRMZW5ndGggPSBjdXJyZW50RWxlbS5nZXRMZW5ndGgoJ3RleHRMZW5ndGgnLCBjdXJyZW50RWxlbS5nZXRWV2lkdGgoKSwgdW5kZWZpbmVkKSxcbiAgICAgICAgICAgIHNwYWNpbmdBbmRHbHlwaHMgPSBjdXJyZW50RWxlbS5hdHRyKCdsZW5ndGhBZGp1c3QnKSA9PT0gJ3NwYWNpbmdBbmRHbHlwaHMnLFxuICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBjdXJyZW50RWxlbS5nZXQoJ3dvcmQtc3BhY2luZycpLFxuICAgICAgICAgICAgbGV0dGVyU3BhY2luZyA9IGN1cnJlbnRFbGVtLmdldCgnbGV0dGVyLXNwYWNpbmcnKSxcbiAgICAgICAgICAgIHRleHRBbmNob3IgPSBjdXJyZW50RWxlbS5nZXQoJ3RleHQtYW5jaG9yJyksXG4gICAgICAgICAgICB0ZXh0RGlyZWN0aW9uID0gY3VycmVudEVsZW0uZ2V0KCdkaXJlY3Rpb24nKSxcbiAgICAgICAgICAgIGJhc2VsaW5lID0gZ2V0QmFzZWxpbmUoY3VycmVudEVsZW0uX2ZvbnQuZm9udCwgY3VycmVudEVsZW0uX2ZvbnQuc2l6ZSwgY3VycmVudEVsZW0uZ2V0KCdhbGlnbm1lbnQtYmFzZWxpbmUnKSB8fCBjdXJyZW50RWxlbS5nZXQoJ2RvbWluYW50LWJhc2VsaW5lJyksIGN1cnJlbnRFbGVtLmdldCgnYmFzZWxpbmUtc2hpZnQnKSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtLm5hbWUgPT09ICd0ZXh0UGF0aCcpIHtcbiAgICAgICAgICBkb0FuY2hvcmluZygpO1xuICAgICAgICAgIGN1cnJlbnRYID0gY3VycmVudFkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoaWxkcmVuID0gY3VycmVudEVsZW0uZ2V0Q2hpbGRyZW4oKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNoaWxkRWxlbSA9IGNoaWxkcmVuW2ldO1xuXG4gICAgICAgICAgc3dpdGNoIChjaGlsZEVsZW0ubmFtZSkge1xuICAgICAgICAgICAgY2FzZSAndHNwYW4nOlxuICAgICAgICAgICAgY2FzZSAndGV4dFBhdGgnOlxuICAgICAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZShjaGlsZEVsZW0sIGN1cnJlbnRFbGVtKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJyN0ZXh0JzpcbiAgICAgICAgICAgIGNhc2UgJyNjZGF0YS1zZWN0aW9uJzpcbiAgICAgICAgICAgICAgdmFyIHJhd1RleHQgPSBjaGlsZEVsZW0udGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgICAgICByZW5kZXJlZFRleHQgPSByYXdUZXh0LFxuICAgICAgICAgICAgICAgICAgd29yZHMgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIGNoaWxkRWxlbS5fZm9udCA9IGN1cnJlbnRFbGVtLl9mb250O1xuICAgICAgICAgICAgICBjaGlsZEVsZW0uX3BvcyA9IFtdO1xuICAgICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcocmF3VGV4dC5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbS5nZXQoJ3htbDpzcGFjZScpID09PSAncHJlc2VydmUnKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyZWRUZXh0ID0gcmVuZGVyZWRUZXh0LnJlcGxhY2UoL1tcXHNdL2csICcgJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyZWRUZXh0ID0gcmVuZGVyZWRUZXh0LnJlcGxhY2UoL1tcXHNdKy9nLCAnICcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZFRleHQubWF0Y2goL1tcXHNdJHxeJC8pKSB7XG4gICAgICAgICAgICAgICAgICByZW5kZXJlZFRleHQgPSByZW5kZXJlZFRleHQucmVwbGFjZSgvXltcXHNdLywgJycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdUZXh0Lm1hdGNoKC9eW1xcc10qJC8pKSB7XG4gICAgICAgICAgICAgICAgICByZW5kZXJlZFRleHQgPSByZW5kZXJlZFRleHQucmVwbGFjZSgvW1xcc10kLywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHByb2Nlc3NlZFRleHQgKz0gcmF3VGV4dDtcblxuICAgICAgICAgICAgICBpZiAod29yZFNwYWNpbmcgPT09IDApIHtcbiAgICAgICAgICAgICAgICB3b3JkcyA9IFtyZW5kZXJlZFRleHRdO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdvcmRzID0gcmVuZGVyZWRUZXh0LnNwbGl0KC8oXFxzKS8pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgdyA9IDA7IHcgPCB3b3Jkcy5sZW5ndGg7IHcrKykge1xuICAgICAgICAgICAgICAgIHZhciBwb3MgPSBnZXRUZXh0UG9zKGN1cnJlbnRFbGVtLl9mb250LmZvbnQsIGN1cnJlbnRFbGVtLl9mb250LnNpemUsIHdvcmRzW3ddKTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBjdXJyZW50RWxlbS5faW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgeEF0dHIgPSBjdXJyZW50RWxlbS5feFtpbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgeUF0dHIgPSBjdXJyZW50RWxlbS5feVtpbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgZHhBdHRyID0gY3VycmVudEVsZW0uX2R4W2luZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICBkeUF0dHIgPSBjdXJyZW50RWxlbS5fZHlbaW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICAgIHJvdEF0dHIgPSBjdXJyZW50RWxlbS5fcm90W2luZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzID0gISh3ID09PSAwICYmIGogPT09IDApO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoeEF0dHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGRvQW5jaG9yaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0geEF0dHI7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmICh5QXR0ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZG9BbmNob3JpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgPSB5QXR0cjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGR4QXR0ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggKz0gZHhBdHRyO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoZHlBdHRyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludW91cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBkeUF0dHI7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChyb3RBdHRyICE9PSB1bmRlZmluZWQgfHwgY3VycmVudEVsZW0uX2RlZlJvdCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGg6IHBvc1tqXS5nbHlwaCxcbiAgICAgICAgICAgICAgICAgICAgcm90YXRlOiBNYXRoLlBJIC8gMTgwICogY3VycmVudEVsZW0uY2hvb3NlVmFsdWUocm90QXR0ciwgY3VycmVudEVsZW0uX2RlZlJvdCksXG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYICsgcG9zW2pdLnhPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIHk6IGN1cnJlbnRZICsgYmFzZWxpbmUgKyBwb3Nbal0ueU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHBvc1tqXS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgYXNjZW50OiBnZXRBc2NlbnQoY3VycmVudEVsZW0uX2ZvbnQuZm9udCwgY3VycmVudEVsZW0uX2ZvbnQuc2l6ZSksXG4gICAgICAgICAgICAgICAgICAgIGRlc2NlbnQ6IGdldERlc2NlbnQoY3VycmVudEVsZW0uX2ZvbnQuZm9udCwgY3VycmVudEVsZW0uX2ZvbnQuc2l6ZSksXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiAxLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzOiBjb250aW51b3VzXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgY3VycmVudENodW5rLnB1c2gocG9zaXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICBjaGlsZEVsZW0uX3Bvcy5wdXNoKHBvc2l0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW0uX3Bvcy5wdXNoKHBvc2l0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW0uX2luZGV4ICs9IHBvc1tqXS51bmljb2RlLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDaHVuay5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEFuY2hvciA9IHRleHRBbmNob3I7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnREaXJlY3Rpb24gPSB0ZXh0RGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjdXJyZW50WCArPSBwb3Nbal0ueEFkdmFuY2UgKyBsZXR0ZXJTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gcG9zW2pdLnlBZHZhbmNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh3b3Jkc1t3XSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICBjdXJyZW50WCArPSB3b3JkU3BhY2luZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKGNoaWxkRWxlbS50ZXh0Q29udGVudC5sZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0TGVuZ3RoICYmIGN1cnJlbnRFbGVtLl9wb3MubGVuZ3RoKSB7XG4gICAgICAgICAgYWRqdXN0TGVuZ3RoKGN1cnJlbnRFbGVtLl9wb3MsIHRleHRMZW5ndGgsIHNwYWNpbmdBbmRHbHlwaHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtLm5hbWUgPT09ICd0ZXh0UGF0aCcgfHwgY3VycmVudEVsZW0ubmFtZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgZG9BbmNob3JpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50RWxlbS5uYW1lID09PSAndGV4dFBhdGgnKSB7XG4gICAgICAgICAgdGV4dFBhdGhzLnB1c2goY3VycmVudEVsZW0pO1xuICAgICAgICAgIHZhciBwYXRoT2JqZWN0ID0gY3VycmVudEVsZW0ucGF0aE9iamVjdDtcblxuICAgICAgICAgIGlmIChwYXRoT2JqZWN0KSB7XG4gICAgICAgICAgICBjdXJyZW50WCA9IHBhdGhPYmplY3QuZW5kUG9pbnRbMF07XG4gICAgICAgICAgICBjdXJyZW50WSA9IHBhdGhPYmplY3QuZW5kUG9pbnRbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudEVsZW0pIHtcbiAgICAgICAgICBwYXJlbnRFbGVtLl9wb3MgPSBwYXJlbnRFbGVtLl9wb3MuY29uY2F0KGN1cnJlbnRFbGVtLl9wb3MpO1xuICAgICAgICAgIHBhcmVudEVsZW0uX2luZGV4ICs9IGN1cnJlbnRFbGVtLl9pbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB0ZXh0T25QYXRoKGN1cnJlbnRFbGVtKSB7XG4gICAgICAgIHZhciBwYXRoT2JqZWN0ID0gY3VycmVudEVsZW0ucGF0aE9iamVjdCxcbiAgICAgICAgICAgIHBhdGhMZW5ndGggPSBjdXJyZW50RWxlbS5wYXRoTGVuZ3RoLFxuICAgICAgICAgICAgcGF0aFNjYWxlID0gY3VycmVudEVsZW0ucGF0aFNjYWxlO1xuXG4gICAgICAgIGlmIChwYXRoT2JqZWN0KSB7XG4gICAgICAgICAgdmFyIHRleHRPZmZzZXQgPSBjdXJyZW50RWxlbS5nZXRMZW5ndGgoJ3N0YXJ0T2Zmc2V0JywgcGF0aExlbmd0aCwgMCk7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGN1cnJlbnRFbGVtLl9wb3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBjaGFyTWlkWCA9IHRleHRPZmZzZXQgKyBjdXJyZW50RWxlbS5fcG9zW2pdLnggKyAwLjUgKiBjdXJyZW50RWxlbS5fcG9zW2pdLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAoY2hhck1pZFggPiBwYXRoTGVuZ3RoIHx8IGNoYXJNaWRYIDwgMCkge1xuICAgICAgICAgICAgICBjdXJyZW50RWxlbS5fcG9zW2pdLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgcG9pbnRPblBhdGggPSBwYXRoT2JqZWN0LmdldFBvaW50QXRMZW5ndGgoY2hhck1pZFggKiBwYXRoU2NhbGUpO1xuXG4gICAgICAgICAgICAgIGlmIChpc05vdEVxdWFsKHBhdGhTY2FsZSwgMSkpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbS5fcG9zW2pdLnNjYWxlICo9IHBhdGhTY2FsZTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbS5fcG9zW2pdLndpZHRoICo9IHBhdGhTY2FsZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGN1cnJlbnRFbGVtLl9wb3Nbal0ueCA9IHBvaW50T25QYXRoWzBdIC0gMC41ICogY3VycmVudEVsZW0uX3Bvc1tqXS53aWR0aCAqIE1hdGguY29zKHBvaW50T25QYXRoWzJdKSAtIGN1cnJlbnRFbGVtLl9wb3Nbal0ueSAqIE1hdGguc2luKHBvaW50T25QYXRoWzJdKTtcbiAgICAgICAgICAgICAgY3VycmVudEVsZW0uX3Bvc1tqXS55ID0gcG9pbnRPblBhdGhbMV0gLSAwLjUgKiBjdXJyZW50RWxlbS5fcG9zW2pdLndpZHRoICogTWF0aC5zaW4ocG9pbnRPblBhdGhbMl0pICsgY3VycmVudEVsZW0uX3Bvc1tqXS55ICogTWF0aC5jb3MocG9pbnRPblBhdGhbMl0pO1xuICAgICAgICAgICAgICBjdXJyZW50RWxlbS5fcG9zW2pdLnJvdGF0ZSA9IHBvaW50T25QYXRoWzJdICsgY3VycmVudEVsZW0uX3Bvc1tqXS5yb3RhdGU7XG4gICAgICAgICAgICAgIGN1cnJlbnRFbGVtLl9wb3Nbal0uY29udGludW91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBfajUgPSAwOyBfajUgPCBjdXJyZW50RWxlbS5fcG9zLmxlbmd0aDsgX2o1KyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtLl9wb3NbX2o1XS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWN1cnNpdmUodGV4dFBhcmVudEVsZW0sIG51bGwpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRQYXRocy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0ZXh0T25QYXRoKHRleHRQYXRoc1tpXSk7XG4gICAgICB9XG4gICAgfSkodGhpcyk7XG5cbiAgICB0aGlzLmdldFRyYW5zZm9ybWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0KCd0cmFuc2Zvcm0nKTtcbiAgICB9O1xuXG4gICAgdGhpcy5kcmF3SW5Eb2N1bWVudCA9IGZ1bmN0aW9uIChpc0NsaXAsIGlzTWFzaykge1xuICAgICAgZG9jLnNhdmUoKTtcbiAgICAgIHRoaXMudHJhbnNmb3JtKCk7XG4gICAgICB0aGlzLmNsaXAoKTtcbiAgICAgIHZhciBtYXNrZWQgPSB0aGlzLm1hc2soKSxcbiAgICAgICAgICBncm91cDtcblxuICAgICAgaWYgKG1hc2tlZCkge1xuICAgICAgICBncm91cCA9IGRvY0JlZ2luR3JvdXAoZ2V0UGFnZUJCb3goKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZHJhd1RleHRJbkRvY3VtZW50KGlzQ2xpcCwgaXNNYXNrKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIGRvY0VuZEdyb3VwKGdyb3VwKTtcbiAgICAgICAgZG9jSW5zZXJ0R3JvdXAoZ3JvdXApO1xuICAgICAgfVxuXG4gICAgICBkb2MucmVzdG9yZSgpO1xuICAgIH07XG4gIH07XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBweFRvUHQgPSBvcHRpb25zLmFzc3VtZVB0ID8gMSA6IDcyIC8gOTYsXG4gICAgICAvLyAxcHggPSA3Mi85NnB0LCBidXQgb25seSBpZiBhc3N1bWVQdCBpcyBmYWxzZVxuICB2aWV3cG9ydFdpZHRoID0gKG9wdGlvbnMud2lkdGggfHwgZG9jLnBhZ2Uud2lkdGgpIC8gcHhUb1B0LFxuICAgICAgdmlld3BvcnRIZWlnaHQgPSAob3B0aW9ucy5oZWlnaHQgfHwgZG9jLnBhZ2UuaGVpZ2h0KSAvIHB4VG9QdCxcbiAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8gPSBvcHRpb25zLnByZXNlcnZlQXNwZWN0UmF0aW8gfHwgbnVsbCxcbiAgICAgIC8vIGRlZmF1bHQgdG8gbnVsbCBzbyB0aGF0IHRoZSBhdHRyIGNhbiBvdmVycmlkZSBpZiBub3QgcGFzc2VkXG4gIHVzZUNTUyA9IG9wdGlvbnMudXNlQ1NTICYmIHR5cGVvZiBTVkdFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBzdmcgaW5zdGFuY2VvZiBTVkdFbGVtZW50ICYmIHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlID09PSAnZnVuY3Rpb24nLFxuICAgICAgd2FybmluZ0NhbGxiYWNrID0gb3B0aW9ucy53YXJuaW5nQ2FsbGJhY2ssXG4gICAgICBmb250Q2FsbGJhY2sgPSBvcHRpb25zLmZvbnRDYWxsYmFjayxcbiAgICAgIGltYWdlQ2FsbGJhY2sgPSBvcHRpb25zLmltYWdlQ2FsbGJhY2ssXG4gICAgICBjb2xvckNhbGxiYWNrID0gb3B0aW9ucy5jb2xvckNhbGxiYWNrLFxuICAgICAgZG9jdW1lbnRDYWxsYmFjayA9IG9wdGlvbnMuZG9jdW1lbnRDYWxsYmFjayxcbiAgICAgIHByZWNpc2lvbiA9IE1hdGguY2VpbChNYXRoLm1heCgxLCBvcHRpb25zLnByZWNpc2lvbikpIHx8IDMsXG4gICAgICBncm91cFN0YWNrID0gW10sXG4gICAgICBkb2N1bWVudENhY2hlID0ge30sXG4gICAgICBsaW5rcyA9IFtdLFxuICAgICAgc3R5bGVSdWxlcyA9IFtdO1xuXG4gIGlmICh0eXBlb2Ygd2FybmluZ0NhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgd2FybmluZ0NhbGxiYWNrID0gZnVuY3Rpb24gd2FybmluZ0NhbGxiYWNrKHN0cikge1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGNvbnNvbGUud2FybiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zb2xlLndhcm4oc3RyKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmb250Q2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICBmb250Q2FsbGJhY2sgPSBmdW5jdGlvbiBmb250Q2FsbGJhY2soZmFtaWx5LCBib2xkLCBpdGFsaWMsIGZvbnRPcHRpb25zKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgZm9udCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhlIGRvY3VtZW50XG4gICAgICBpZiAoYm9sZCAmJiBpdGFsaWMpIHtcbiAgICAgICAgaWYgKGRvYy5fcmVnaXN0ZXJlZEZvbnRzLmhhc093blByb3BlcnR5KGZhbWlseSArICctQm9sZEl0YWxpYycpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbWlseSArICctQm9sZEl0YWxpYyc7XG4gICAgICAgIH0gZWxzZSBpZiAoZG9jLl9yZWdpc3RlcmVkRm9udHMuaGFzT3duUHJvcGVydHkoZmFtaWx5ICsgJy1JdGFsaWMnKSkge1xuICAgICAgICAgIGZvbnRPcHRpb25zLmZhdXhCb2xkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gZmFtaWx5ICsgJy1JdGFsaWMnO1xuICAgICAgICB9IGVsc2UgaWYgKGRvYy5fcmVnaXN0ZXJlZEZvbnRzLmhhc093blByb3BlcnR5KGZhbWlseSArICctQm9sZCcpKSB7XG4gICAgICAgICAgZm9udE9wdGlvbnMuZmF1eEl0YWxpYyA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGZhbWlseSArICctQm9sZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZG9jLl9yZWdpc3RlcmVkRm9udHMuaGFzT3duUHJvcGVydHkoZmFtaWx5KSkge1xuICAgICAgICAgIGZvbnRPcHRpb25zLmZhdXhCb2xkID0gdHJ1ZTtcbiAgICAgICAgICBmb250T3B0aW9ucy5mYXV4SXRhbGljID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gZmFtaWx5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChib2xkICYmICFpdGFsaWMpIHtcbiAgICAgICAgaWYgKGRvYy5fcmVnaXN0ZXJlZEZvbnRzLmhhc093blByb3BlcnR5KGZhbWlseSArICctQm9sZCcpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbWlseSArICctQm9sZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZG9jLl9yZWdpc3RlcmVkRm9udHMuaGFzT3duUHJvcGVydHkoZmFtaWx5KSkge1xuICAgICAgICAgIGZvbnRPcHRpb25zLmZhdXhCb2xkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gZmFtaWx5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghYm9sZCAmJiBpdGFsaWMpIHtcbiAgICAgICAgaWYgKGRvYy5fcmVnaXN0ZXJlZEZvbnRzLmhhc093blByb3BlcnR5KGZhbWlseSArICctSXRhbGljJykpIHtcbiAgICAgICAgICByZXR1cm4gZmFtaWx5ICsgJy1JdGFsaWMnO1xuICAgICAgICB9IGVsc2UgaWYgKGRvYy5fcmVnaXN0ZXJlZEZvbnRzLmhhc093blByb3BlcnR5KGZhbWlseSkpIHtcbiAgICAgICAgICBmb250T3B0aW9ucy5mYXV4SXRhbGljID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gZmFtaWx5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghYm9sZCAmJiAhaXRhbGljKSB7XG4gICAgICAgIGlmIChkb2MuX3JlZ2lzdGVyZWRGb250cy5oYXNPd25Qcm9wZXJ0eShmYW1pbHkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbWlseTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBVc2Ugc3RhbmRhcmQgZm9udHMgYXMgZmFsbGJhY2tcblxuXG4gICAgICBpZiAoZmFtaWx5Lm1hdGNoKC8oPzpefCwpXFxzKnNlcmlmXFxzKiQvKSkge1xuICAgICAgICBpZiAoYm9sZCAmJiBpdGFsaWMpIHtcbiAgICAgICAgICByZXR1cm4gJ1RpbWVzLUJvbGRJdGFsaWMnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvbGQgJiYgIWl0YWxpYykge1xuICAgICAgICAgIHJldHVybiAnVGltZXMtQm9sZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWJvbGQgJiYgaXRhbGljKSB7XG4gICAgICAgICAgcmV0dXJuICdUaW1lcy1JdGFsaWMnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFib2xkICYmICFpdGFsaWMpIHtcbiAgICAgICAgICByZXR1cm4gJ1RpbWVzLVJvbWFuJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmYW1pbHkubWF0Y2goLyg/Ol58LClcXHMqbW9ub3NwYWNlXFxzKiQvKSkge1xuICAgICAgICBpZiAoYm9sZCAmJiBpdGFsaWMpIHtcbiAgICAgICAgICByZXR1cm4gJ0NvdXJpZXItQm9sZE9ibGlxdWUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvbGQgJiYgIWl0YWxpYykge1xuICAgICAgICAgIHJldHVybiAnQ291cmllci1Cb2xkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYm9sZCAmJiBpdGFsaWMpIHtcbiAgICAgICAgICByZXR1cm4gJ0NvdXJpZXItT2JsaXF1ZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWJvbGQgJiYgIWl0YWxpYykge1xuICAgICAgICAgIHJldHVybiAnQ291cmllcic7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmFtaWx5Lm1hdGNoKC8oPzpefCwpXFxzKnNhbnMtc2VyaWZcXHMqJC8pIHx8IHRydWUpIHtcbiAgICAgICAgaWYgKGJvbGQgJiYgaXRhbGljKSB7XG4gICAgICAgICAgcmV0dXJuICdIZWx2ZXRpY2EtQm9sZE9ibGlxdWUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvbGQgJiYgIWl0YWxpYykge1xuICAgICAgICAgIHJldHVybiAnSGVsdmV0aWNhLUJvbGQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFib2xkICYmIGl0YWxpYykge1xuICAgICAgICAgIHJldHVybiAnSGVsdmV0aWNhLU9ibGlxdWUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFib2xkICYmICFpdGFsaWMpIHtcbiAgICAgICAgICByZXR1cm4gJ0hlbHZldGljYSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbWFnZUNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaW1hZ2VDYWxsYmFjayA9IGZ1bmN0aW9uIGltYWdlQ2FsbGJhY2sobGluaykge1xuICAgICAgcmV0dXJuIGxpbmsucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29sb3JDYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbG9yQ2FsbGJhY2sgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGNvbG9yIGluIERlZmF1bHRDb2xvcnMpIHtcbiAgICAgIHZhciBuZXdDb2xvciA9IGNvbG9yQ2FsbGJhY2soRGVmYXVsdENvbG9yc1tjb2xvcl0pO1xuICAgICAgRGVmYXVsdENvbG9yc1tjb2xvcl1bMF0gPSBuZXdDb2xvclswXTtcbiAgICAgIERlZmF1bHRDb2xvcnNbY29sb3JdWzFdID0gbmV3Q29sb3JbMV07XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudENhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgZG9jdW1lbnRDYWxsYmFjayA9IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHN2ZyA9PT0gJ3N0cmluZycpIHtcbiAgICBzdmcgPSBwYXJzZVhtbChzdmcpO1xuICB9XG5cbiAgaWYgKHN2Zykge1xuICAgIHZhciBzdHlsZXMgPSBzdmcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N0eWxlJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgc3R5bGVSdWxlcyA9IHN0eWxlUnVsZXMuY29uY2F0KHBhcnNlU3R5bGVTaGVldChzdHlsZXNbaV0udGV4dENvbnRlbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbSA9IGNyZWF0ZVNWR0VsZW1lbnQoc3ZnLCBudWxsKTtcblxuICAgIGlmICh0eXBlb2YgZWxlbS5kcmF3SW5Eb2N1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKG9wdGlvbnMudXNlQ1NTICYmICF1c2VDU1MpIHtcbiAgICAgICAgd2FybmluZ0NhbGxiYWNrKCdTVkd0b1BERjogdXNlQ1NTIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGZvciBTVkcgKmVsZW1lbnRzKiBpbiBjb21wYXRpYmxlIGJyb3dzZXJzJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzYXZlZEZpbGxDb2xvciA9IGRvYy5fZmlsbENvbG9yO1xuICAgICAgZG9jLnNhdmUoKS50cmFuc2xhdGUoeCB8fCAwLCB5IHx8IDApLnNjYWxlKHB4VG9QdCk7XG4gICAgICBlbGVtLmRyYXdJbkRvY3VtZW50KCk7XG5cbiAgICAgIGZvciAodmFyIF9pOCA9IDA7IF9pOCA8IGxpbmtzLmxlbmd0aDsgX2k4KyspIHtcbiAgICAgICAgZG9jLnBhZ2UuYW5ub3RhdGlvbnMucHVzaChsaW5rc1tfaThdKTtcbiAgICAgIH1cblxuICAgICAgZG9jLnJlc3RvcmUoKTtcbiAgICAgIGRvYy5fZmlsbENvbG9yID0gc2F2ZWRGaWxsQ29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm5pbmdDYWxsYmFjaygnU1ZHdG9QREY6IHRoaXMgZWxlbWVudCBjYW5cXCd0IGJlIHJlbmRlcmVkIGRpcmVjdGx5OiAnICsgc3ZnLm5vZGVOYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2FybmluZ0NhbGxiYWNrKCdTVkd0b1BERjogdGhlIGlucHV0IGRvZXMgbm90IGxvb2sgbGlrZSBhIHZhbGlkIFNWRycpO1xuICB9XG59O1xuXG5pZiAoIHRydWUgJiYgbW9kdWxlICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBTVkd0b1BERjtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDk3NDI6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsoXG4gICAgICB1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpXG4gICAgKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0MTgxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG4vKiBDb3B5cmlnaHQgMjAxMyBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuXG4gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4gICBCaXQgcmVhZGluZyBoZWxwZXJzXG4qL1xuXG52YXIgQlJPVExJX1JFQURfU0laRSA9IDQwOTY7XG52YXIgQlJPVExJX0lCVUZfU0laRSA9ICAoMiAqIEJST1RMSV9SRUFEX1NJWkUgKyAzMik7XG52YXIgQlJPVExJX0lCVUZfTUFTSyA9ICAoMiAqIEJST1RMSV9SRUFEX1NJWkUgLSAxKTtcblxudmFyIGtCaXRNYXNrID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgMCwgMSwgMywgNywgMTUsIDMxLCA2MywgMTI3LCAyNTUsIDUxMSwgMTAyMywgMjA0NywgNDA5NSwgODE5MSwgMTYzODMsIDMyNzY3LFxuICA2NTUzNSwgMTMxMDcxLCAyNjIxNDMsIDUyNDI4NywgMTA0ODU3NSwgMjA5NzE1MSwgNDE5NDMwMywgODM4ODYwNywgMTY3NzcyMTVcbl0pO1xuXG4vKiBJbnB1dCBieXRlIGJ1ZmZlciwgY29uc2lzdCBvZiBhIHJpbmdidWZmZXIgYW5kIGEgXCJzbGFja1wiIHJlZ2lvbiB3aGVyZSAqL1xuLyogYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHJpbmdidWZmZXIgYXJlIGNvcGllZC4gKi9cbmZ1bmN0aW9uIEJyb3RsaUJpdFJlYWRlcihpbnB1dCkge1xuICB0aGlzLmJ1Zl8gPSBuZXcgVWludDhBcnJheShCUk9UTElfSUJVRl9TSVpFKTtcbiAgdGhpcy5pbnB1dF8gPSBpbnB1dDsgICAgLyogaW5wdXQgY2FsbGJhY2sgKi9cbiAgXG4gIHRoaXMucmVzZXQoKTtcbn1cblxuQnJvdGxpQml0UmVhZGVyLlJFQURfU0laRSA9IEJST1RMSV9SRUFEX1NJWkU7XG5Ccm90bGlCaXRSZWFkZXIuSUJVRl9NQVNLID0gQlJPVExJX0lCVUZfTUFTSztcblxuQnJvdGxpQml0UmVhZGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmJ1Zl9wdHJfID0gMDsgICAgICAvKiBuZXh0IGlucHV0IHdpbGwgd3JpdGUgaGVyZSAqL1xuICB0aGlzLnZhbF8gPSAwOyAgICAgICAgICAvKiBwcmUtZmV0Y2hlZCBiaXRzICovXG4gIHRoaXMucG9zXyA9IDA7ICAgICAgICAgIC8qIGJ5dGUgcG9zaXRpb24gaW4gc3RyZWFtICovXG4gIHRoaXMuYml0X3Bvc18gPSAwOyAgICAgIC8qIGN1cnJlbnQgYml0LXJlYWRpbmcgcG9zaXRpb24gaW4gdmFsXyAqL1xuICB0aGlzLmJpdF9lbmRfcG9zXyA9IDA7ICAvKiBiaXQtcmVhZGluZyBlbmQgcG9zaXRpb24gZnJvbSBMU0Igb2YgdmFsXyAqL1xuICB0aGlzLmVvc18gPSAwOyAgICAgICAgICAvKiBpbnB1dCBzdHJlYW0gaXMgZmluaXNoZWQgKi9cbiAgXG4gIHRoaXMucmVhZE1vcmVJbnB1dCgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIHRoaXMudmFsXyB8PSB0aGlzLmJ1Zl9bdGhpcy5wb3NfXSA8PCAoOCAqIGkpO1xuICAgICsrdGhpcy5wb3NfO1xuICB9XG4gIFxuICByZXR1cm4gdGhpcy5iaXRfZW5kX3Bvc18gPiAwO1xufTtcblxuLyogRmlsbHMgdXAgdGhlIGlucHV0IHJpbmdidWZmZXIgYnkgY2FsbGluZyB0aGUgaW5wdXQgY2FsbGJhY2suXG5cbiAgIERvZXMgbm90aGluZyBpZiB0aGVyZSBhcmUgYXQgbGVhc3QgMzIgYnl0ZXMgcHJlc2VudCBhZnRlciBjdXJyZW50IHBvc2l0aW9uLlxuXG4gICBSZXR1cm5zIDAgaWYgZWl0aGVyOlxuICAgIC0gdGhlIGlucHV0IGNhbGxiYWNrIHJldHVybmVkIGFuIGVycm9yLCBvclxuICAgIC0gdGhlcmUgaXMgbm8gbW9yZSBpbnB1dCBhbmQgdGhlIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLlxuXG4gICBBZnRlciBlbmNvdW50ZXJpbmcgdGhlIGVuZCBvZiB0aGUgaW5wdXQgc3RyZWFtLCAzMiBhZGRpdGlvbmFsIHplcm8gYnl0ZXMgYXJlXG4gICBjb3BpZWQgdG8gdGhlIHJpbmdidWZmZXIsIHRoZXJlZm9yZSBpdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlclxuICAgZXZlcnkgMzIgYnl0ZXMgb2YgaW5wdXQgaXMgcmVhZC5cbiovXG5Ccm90bGlCaXRSZWFkZXIucHJvdG90eXBlLnJlYWRNb3JlSW5wdXQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuYml0X2VuZF9wb3NfID4gMjU2KSB7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKHRoaXMuZW9zXykge1xuICAgIGlmICh0aGlzLmJpdF9wb3NfID4gdGhpcy5iaXRfZW5kX3Bvc18pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIGlucHV0ICcgKyB0aGlzLmJpdF9wb3NfICsgJyAnICsgdGhpcy5iaXRfZW5kX3Bvc18pO1xuICB9IGVsc2Uge1xuICAgIHZhciBkc3QgPSB0aGlzLmJ1Zl9wdHJfO1xuICAgIHZhciBieXRlc19yZWFkID0gdGhpcy5pbnB1dF8ucmVhZCh0aGlzLmJ1Zl8sIGRzdCwgQlJPVExJX1JFQURfU0laRSk7XG4gICAgaWYgKGJ5dGVzX3JlYWQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIGlucHV0Jyk7XG4gICAgfVxuICAgIFxuICAgIGlmIChieXRlc19yZWFkIDwgQlJPVExJX1JFQURfU0laRSkge1xuICAgICAgdGhpcy5lb3NfID0gMTtcbiAgICAgIC8qIFN0b3JlIDMyIGJ5dGVzIG9mIHplcm8gYWZ0ZXIgdGhlIHN0cmVhbSBlbmQuICovXG4gICAgICBmb3IgKHZhciBwID0gMDsgcCA8IDMyOyBwKyspXG4gICAgICAgIHRoaXMuYnVmX1tkc3QgKyBieXRlc19yZWFkICsgcF0gPSAwO1xuICAgIH1cbiAgICBcbiAgICBpZiAoZHN0ID09PSAwKSB7XG4gICAgICAvKiBDb3B5IHRoZSBoZWFkIG9mIHRoZSByaW5nYnVmZmVyIHRvIHRoZSBzbGFjayByZWdpb24uICovXG4gICAgICBmb3IgKHZhciBwID0gMDsgcCA8IDMyOyBwKyspXG4gICAgICAgIHRoaXMuYnVmX1soQlJPVExJX1JFQURfU0laRSA8PCAxKSArIHBdID0gdGhpcy5idWZfW3BdO1xuXG4gICAgICB0aGlzLmJ1Zl9wdHJfID0gQlJPVExJX1JFQURfU0laRTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWZfcHRyXyA9IDA7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuYml0X2VuZF9wb3NfICs9IGJ5dGVzX3JlYWQgPDwgMztcbiAgfVxufTtcblxuLyogR3VhcmFudGVlcyB0aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCAyNCBiaXRzIGluIHRoZSBidWZmZXIuICovXG5Ccm90bGlCaXRSZWFkZXIucHJvdG90eXBlLmZpbGxCaXRXaW5kb3cgPSBmdW5jdGlvbigpIHsgICAgXG4gIHdoaWxlICh0aGlzLmJpdF9wb3NfID49IDgpIHtcbiAgICB0aGlzLnZhbF8gPj4+PSA4O1xuICAgIHRoaXMudmFsXyB8PSB0aGlzLmJ1Zl9bdGhpcy5wb3NfICYgQlJPVExJX0lCVUZfTUFTS10gPDwgMjQ7XG4gICAgKyt0aGlzLnBvc187XG4gICAgdGhpcy5iaXRfcG9zXyA9IHRoaXMuYml0X3Bvc18gLSA4ID4+PiAwO1xuICAgIHRoaXMuYml0X2VuZF9wb3NfID0gdGhpcy5iaXRfZW5kX3Bvc18gLSA4ID4+PiAwO1xuICB9XG59O1xuXG4vKiBSZWFkcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzIGZyb20gUmVhZCBCdWZmZXIuICovXG5Ccm90bGlCaXRSZWFkZXIucHJvdG90eXBlLnJlYWRCaXRzID0gZnVuY3Rpb24obl9iaXRzKSB7XG4gIGlmICgzMiAtIHRoaXMuYml0X3Bvc18gPCBuX2JpdHMpIHtcbiAgICB0aGlzLmZpbGxCaXRXaW5kb3coKTtcbiAgfVxuICBcbiAgdmFyIHZhbCA9ICgodGhpcy52YWxfID4+PiB0aGlzLmJpdF9wb3NfKSAmIGtCaXRNYXNrW25fYml0c10pO1xuICB0aGlzLmJpdF9wb3NfICs9IG5fYml0cztcbiAgcmV0dXJuIHZhbDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQnJvdGxpQml0UmVhZGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3MDgwOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSB7XG5cbi8qIENvcHlyaWdodCAyMDEzIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbiAgIExvb2t1cCB0YWJsZSB0byBtYXAgdGhlIHByZXZpb3VzIHR3byBieXRlcyB0byBhIGNvbnRleHQgaWQuXG5cbiAgIFRoZXJlIGFyZSBmb3VyIGRpZmZlcmVudCBjb250ZXh0IG1vZGVsaW5nIG1vZGVzIGRlZmluZWQgaGVyZTpcbiAgICAgQ09OVEVYVF9MU0I2OiBjb250ZXh0IGlkIGlzIHRoZSBsZWFzdCBzaWduaWZpY2FudCA2IGJpdHMgb2YgdGhlIGxhc3QgYnl0ZSxcbiAgICAgQ09OVEVYVF9NU0I2OiBjb250ZXh0IGlkIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IDYgYml0cyBvZiB0aGUgbGFzdCBieXRlLFxuICAgICBDT05URVhUX1VURjg6IHNlY29uZC1vcmRlciBjb250ZXh0IG1vZGVsIHR1bmVkIGZvciBVVEY4LWVuY29kZWQgdGV4dCxcbiAgICAgQ09OVEVYVF9TSUdORUQ6IHNlY29uZC1vcmRlciBjb250ZXh0IG1vZGVsIHR1bmVkIGZvciBzaWduZWQgaW50ZWdlcnMuXG5cbiAgIFRoZSBjb250ZXh0IGlkIGZvciB0aGUgVVRGOCBjb250ZXh0IG1vZGVsIGlzIGNhbGN1bGF0ZWQgYXMgZm9sbG93cy4gSWYgcDFcbiAgIGFuZCBwMiBhcmUgdGhlIHByZXZpb3VzIHR3byBieXRlcywgd2UgY2FsY3VhbHRlIHRoZSBjb250ZXh0IGFzXG5cbiAgICAgY29udGV4dCA9IGtDb250ZXh0TG9va3VwW3AxXSB8IGtDb250ZXh0TG9va3VwW3AyICsgMjU2XS5cblxuICAgSWYgdGhlIHByZXZpb3VzIHR3byBieXRlcyBhcmUgQVNDSUkgY2hhcmFjdGVycyAoaS5lLiA8IDEyOCksIHRoaXMgd2lsbCBiZVxuICAgZXF1aXZhbGVudCB0b1xuXG4gICAgIGNvbnRleHQgPSA0ICogY29udGV4dDEocDEpICsgY29udGV4dDIocDIpLFxuXG4gICB3aGVyZSBjb250ZXh0MSBpcyBiYXNlZCBvbiB0aGUgcHJldmlvdXMgYnl0ZSBpbiB0aGUgZm9sbG93aW5nIHdheTpcblxuICAgICAwICA6IG5vbi1BU0NJSSBjb250cm9sXG4gICAgIDEgIDogXFx0LCBcXG4sIFxcclxuICAgICAyICA6IHNwYWNlXG4gICAgIDMgIDogb3RoZXIgcHVuY3R1YXRpb25cbiAgICAgNCAgOiBcIiAnXG4gICAgIDUgIDogJVxuICAgICA2ICA6ICggPCBbIHtcbiAgICAgNyAgOiApID4gXSB9XG4gICAgIDggIDogLCA7IDpcbiAgICAgOSAgOiAuXG4gICAgIDEwIDogPVxuICAgICAxMSA6IG51bWJlclxuICAgICAxMiA6IHVwcGVyLWNhc2Ugdm93ZWxcbiAgICAgMTMgOiB1cHBlci1jYXNlIGNvbnNvbmFudFxuICAgICAxNCA6IGxvd2VyLWNhc2Ugdm93ZWxcbiAgICAgMTUgOiBsb3dlci1jYXNlIGNvbnNvbmFudFxuXG4gICBhbmQgY29udGV4dDIgaXMgYmFzZWQgb24gdGhlIHNlY29uZCBsYXN0IGJ5dGU6XG5cbiAgICAgMCA6IGNvbnRyb2wsIHNwYWNlXG4gICAgIDEgOiBwdW5jdHVhdGlvblxuICAgICAyIDogdXBwZXItY2FzZSBsZXR0ZXIsIG51bWJlclxuICAgICAzIDogbG93ZXItY2FzZSBsZXR0ZXJcblxuICAgSWYgdGhlIGxhc3QgYnl0ZSBpcyBBU0NJSSwgYW5kIHRoZSBzZWNvbmQgbGFzdCBieXRlIGlzIG5vdCAoaW4gYSB2YWxpZCBVVEY4XG4gICBzdHJlYW0gaXQgd2lsbCBiZSBhIGNvbnRpbnVhdGlvbiBieXRlLCB2YWx1ZSBiZXR3ZWVuIDEyOCBhbmQgMTkxKSwgdGhlXG4gICBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIGlmIHRoZSBzZWNvbmQgbGFzdCBieXRlIHdhcyBhbiBBU0NJSSBjb250cm9sIG9yIHNwYWNlLlxuXG4gICBJZiB0aGUgbGFzdCBieXRlIGlzIGEgVVRGOCBsZWFkIGJ5dGUgKHZhbHVlID49IDE5MiksIHRoZW4gdGhlIG5leHQgYnl0ZSB3aWxsXG4gICBiZSBhIGNvbnRpbnVhdGlvbiBieXRlIGFuZCB0aGUgY29udGV4dCBpZCBpcyAyIG9yIDMgZGVwZW5kaW5nIG9uIHRoZSBMU0Igb2ZcbiAgIHRoZSBsYXN0IGJ5dGUgYW5kIHRvIGEgbGVzc2VyIGV4dGVudCBvbiB0aGUgc2Vjb25kIGxhc3QgYnl0ZSBpZiBpdCBpcyBBU0NJSS5cblxuICAgSWYgdGhlIGxhc3QgYnl0ZSBpcyBhIFVURjggY29udGludWF0aW9uIGJ5dGUsIHRoZSBzZWNvbmQgbGFzdCBieXRlIGNhbiBiZTpcbiAgICAgLSBjb250aW51YXRpb24gYnl0ZTogdGhlIG5leHQgYnl0ZSBpcyBwcm9iYWJseSBBU0NJSSBvciBsZWFkIGJ5dGUgKGFzc3VtaW5nXG4gICAgICAgNC1ieXRlIFVURjggY2hhcmFjdGVycyBhcmUgcmFyZSkgYW5kIHRoZSBjb250ZXh0IGlkIGlzIDAgb3IgMS5cbiAgICAgLSBsZWFkIGJ5dGUgKDE5MiAtIDIwNyk6IG5leHQgYnl0ZSBpcyBBU0NJSSBvciBsZWFkIGJ5dGUsIGNvbnRleHQgaXMgMCBvciAxXG4gICAgIC0gbGVhZCBieXRlICgyMDggLSAyNTUpOiBuZXh0IGJ5dGUgaXMgY29udGludWF0aW9uIGJ5dGUsIGNvbnRleHQgaXMgMiBvciAzXG5cbiAgIFRoZSBwb3NzaWJsZSB2YWx1ZSBjb21iaW5hdGlvbnMgb2YgdGhlIHByZXZpb3VzIHR3byBieXRlcywgdGhlIHJhbmdlIG9mXG4gICBjb250ZXh0IGlkcyBhbmQgdGhlIHR5cGUgb2YgdGhlIG5leHQgYnl0ZSBpcyBzdW1tYXJpemVkIGluIHRoZSB0YWJsZSBiZWxvdzpcblxuICAgfC0tLS0tLS0tXFwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAgIHwgICAgICAgICBcXCAgICAgICAgICAgICAgICAgICAgICAgICBMYXN0IGJ5dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICB8IFNlY29uZCAgIFxcLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICAgfCBsYXN0IGJ5dGUgXFwgICAgQVNDSUkgICAgICAgICAgICB8ICAgY29udC4gYnl0ZSAgICAgICAgfCAgIGxlYWQgYnl0ZSAgICAgIHxcbiAgIHwgICAgICAgICAgICBcXCAgICgwLTEyNykgICAgICAgICAgfCAgICgxMjgtMTkxKSAgICAgICAgIHwgICAoMTkyLSkgICAgICAgICB8XG4gICB8PT09PT09PT09PT09PXw9PT09PT09PT09PT09PT09PT09fD09PT09PT09PT09PT09PT09PT09PXw9PT09PT09PT09PT09PT09PT18XG4gICB8ICBBU0NJSSAgICAgIHwgbmV4dDogQVNDSUkvbGVhZCAgfCAgbm90IHZhbGlkICAgICAgICAgIHwgIG5leHQ6IGNvbnQuICAgICB8XG4gICB8ICAoMC0xMjcpICAgIHwgY29udGV4dDogNCAtIDYzICAgfCAgICAgICAgICAgICAgICAgICAgIHwgIGNvbnRleHQ6IDIgLSAzICB8XG4gICB8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18XG4gICB8ICBjb250LiBieXRlIHwgbmV4dDogQVNDSUkvbGVhZCAgfCAgbmV4dDogQVNDSUkvbGVhZCAgIHwgIG5leHQ6IGNvbnQuICAgICB8XG4gICB8ICAoMTI4LTE5MSkgIHwgY29udGV4dDogNCAtIDYzICAgfCAgY29udGV4dDogMCAtIDEgICAgIHwgIGNvbnRleHQ6IDIgLSAzICB8XG4gICB8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18XG4gICB8ICBsZWFkIGJ5dGUgIHwgbm90IHZhbGlkICAgICAgICAgfCAgbmV4dDogQVNDSUkvbGVhZCAgIHwgIG5vdCB2YWxpZCAgICAgICB8XG4gICB8ICAoMTkyLTIwNykgIHwgICAgICAgICAgICAgICAgICAgfCAgY29udGV4dDogMCAtIDEgICAgIHwgICAgICAgICAgICAgICAgICB8XG4gICB8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18XG4gICB8ICBsZWFkIGJ5dGUgIHwgbm90IHZhbGlkICAgICAgICAgfCAgbmV4dDogY29udC4gICAgICAgIHwgIG5vdCB2YWxpZCAgICAgICB8XG4gICB8ICAoMjA4LSkgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgY29udGV4dDogMiAtIDMgICAgIHwgICAgICAgICAgICAgICAgICB8XG4gICB8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18XG5cbiAgIFRoZSBjb250ZXh0IGlkIGZvciB0aGUgc2lnbmVkIGNvbnRleHQgbW9kZSBpcyBjYWxjdWxhdGVkIGFzOlxuXG4gICAgIGNvbnRleHQgPSAoa0NvbnRleHRMb29rdXBbNTEyICsgcDFdIDw8IDMpIHwga0NvbnRleHRMb29rdXBbNTEyICsgcDJdLlxuXG4gICBGb3IgYW55IGNvbnRleHQgbW9kZWxpbmcgbW9kZXMsIHRoZSBjb250ZXh0IGlkcyBjYW4gYmUgY2FsY3VsYXRlZCBieSB8LWluZ1xuICAgdG9nZXRoZXIgdHdvIGxvb2t1cHMgZnJvbSBvbmUgdGFibGUgdXNpbmcgY29udGV4dCBtb2RlbCBkZXBlbmRlbnQgb2Zmc2V0czpcblxuICAgICBjb250ZXh0ID0ga0NvbnRleHRMb29rdXBbb2Zmc2V0MSArIHAxXSB8IGtDb250ZXh0TG9va3VwW29mZnNldDIgKyBwMl0uXG5cbiAgIHdoZXJlIG9mZnNldDEgYW5kIG9mZnNldDIgYXJlIGRlcGVuZGVudCBvbiB0aGUgY29udGV4dCBtb2RlLlxuKi9cblxudmFyIENPTlRFWFRfTFNCNiAgICAgICAgID0gMDtcbnZhciBDT05URVhUX01TQjYgICAgICAgICA9IDE7XG52YXIgQ09OVEVYVF9VVEY4ICAgICAgICAgPSAyO1xudmFyIENPTlRFWFRfU0lHTkVEICAgICAgID0gMztcblxuLyogQ29tbW9uIGNvbnRleHQgbG9va3VwIHRhYmxlIGZvciBhbGwgY29udGV4dCBtb2Rlcy4gKi9cbmV4cG9ydHMubG9va3VwID0gbmV3IFVpbnQ4QXJyYXkoW1xuICAvKiBDT05URVhUX1VURjgsIGxhc3QgYnl0ZS4gKi9cbiAgLyogQVNDSUkgcmFuZ2UuICovXG4gICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICA0LCAgNCwgIDAsICAwLCAgNCwgIDAsICAwLFxuICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCxcbiAgIDgsIDEyLCAxNiwgMTIsIDEyLCAyMCwgMTIsIDE2LCAyNCwgMjgsIDEyLCAxMiwgMzIsIDEyLCAzNiwgMTIsXG4gIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAzMiwgMzIsIDI0LCA0MCwgMjgsIDEyLFxuICAxMiwgNDgsIDUyLCA1MiwgNTIsIDQ4LCA1MiwgNTIsIDUyLCA0OCwgNTIsIDUyLCA1MiwgNTIsIDUyLCA0OCxcbiAgNTIsIDUyLCA1MiwgNTIsIDUyLCA0OCwgNTIsIDUyLCA1MiwgNTIsIDUyLCAyNCwgMTIsIDI4LCAxMiwgMTIsXG4gIDEyLCA1NiwgNjAsIDYwLCA2MCwgNTYsIDYwLCA2MCwgNjAsIDU2LCA2MCwgNjAsIDYwLCA2MCwgNjAsIDU2LFxuICA2MCwgNjAsIDYwLCA2MCwgNjAsIDU2LCA2MCwgNjAsIDYwLCA2MCwgNjAsIDI0LCAxMiwgMjgsIDEyLCAgMCxcbiAgLyogVVRGOCBjb250aW51YXRpb24gYnl0ZSByYW5nZS4gKi9cbiAgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSxcbiAgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSxcbiAgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSxcbiAgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSxcbiAgLyogVVRGOCBsZWFkIGJ5dGUgcmFuZ2UuICovXG4gIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsXG4gIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsXG4gIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsXG4gIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsIDIsIDMsXG4gIC8qIENPTlRFWFRfVVRGOCBzZWNvbmQgbGFzdCBieXRlLiAqL1xuICAvKiBBU0NJSSByYW5nZS4gKi9cbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSxcbiAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMSwgMSwgMSwgMSwgMSwgMSxcbiAgMSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMixcbiAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMSwgMSwgMSwgMSwgMSxcbiAgMSwgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyxcbiAgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMSwgMSwgMSwgMSwgMCxcbiAgLyogVVRGOCBjb250aW51YXRpb24gYnl0ZSByYW5nZS4gKi9cbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgLyogVVRGOCBsZWFkIGJ5dGUgcmFuZ2UuICovXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsXG4gIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsXG4gIC8qIENPTlRFWFRfU0lHTkVELCBzZWNvbmQgbGFzdCBieXRlLiAqL1xuICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLFxuICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLFxuICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLFxuICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLFxuICAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLFxuICAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLFxuICAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLFxuICAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLFxuICA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LFxuICA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LFxuICA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LFxuICA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LFxuICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA3LFxuICAvKiBDT05URVhUX1NJR05FRCwgbGFzdCBieXRlLCBzYW1lIGFzIHRoZSBhYm92ZSB2YWx1ZXMgc2hpZnRlZCBieSAzIGJpdHMuICovXG4gICAwLCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LFxuICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNixcbiAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsXG4gIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LFxuICAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCxcbiAgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsXG4gIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LFxuICAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCxcbiAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsXG4gIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLFxuICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMixcbiAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsXG4gIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLFxuICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCxcbiAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsXG4gIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDU2LFxuICAvKiBDT05URVhUX0xTQjYsIGxhc3QgYnl0ZS4gKi9cbiAgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsXG4gIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLFxuICAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NyxcbiAgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsXG4gICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSxcbiAgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsXG4gIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLFxuICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcbiAgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsXG4gIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LFxuICA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MyxcbiAgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsXG4gIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLFxuICAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NyxcbiAgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsXG4gIC8qIENPTlRFWFRfTVNCNiwgbGFzdCBieXRlLiAqL1xuICAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAyLCAgMiwgIDIsICAyLCAgMywgIDMsICAzLCAgMyxcbiAgIDQsICA0LCAgNCwgIDQsICA1LCAgNSwgIDUsICA1LCAgNiwgIDYsICA2LCAgNiwgIDcsICA3LCAgNywgIDcsXG4gICA4LCAgOCwgIDgsICA4LCAgOSwgIDksICA5LCAgOSwgMTAsIDEwLCAxMCwgMTAsIDExLCAxMSwgMTEsIDExLFxuICAxMiwgMTIsIDEyLCAxMiwgMTMsIDEzLCAxMywgMTMsIDE0LCAxNCwgMTQsIDE0LCAxNSwgMTUsIDE1LCAxNSxcbiAgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwgMTksIDE5LCAxOSwgMTksXG4gIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMjIsIDIyLCAyMiwgMjIsIDIzLCAyMywgMjMsIDIzLFxuICAyNCwgMjQsIDI0LCAyNCwgMjUsIDI1LCAyNSwgMjUsIDI2LCAyNiwgMjYsIDI2LCAyNywgMjcsIDI3LCAyNyxcbiAgMjgsIDI4LCAyOCwgMjgsIDI5LCAyOSwgMjksIDI5LCAzMCwgMzAsIDMwLCAzMCwgMzEsIDMxLCAzMSwgMzEsXG4gIDMyLCAzMiwgMzIsIDMyLCAzMywgMzMsIDMzLCAzMywgMzQsIDM0LCAzNCwgMzQsIDM1LCAzNSwgMzUsIDM1LFxuICAzNiwgMzYsIDM2LCAzNiwgMzcsIDM3LCAzNywgMzcsIDM4LCAzOCwgMzgsIDM4LCAzOSwgMzksIDM5LCAzOSxcbiAgNDAsIDQwLCA0MCwgNDAsIDQxLCA0MSwgNDEsIDQxLCA0MiwgNDIsIDQyLCA0MiwgNDMsIDQzLCA0MywgNDMsXG4gIDQ0LCA0NCwgNDQsIDQ0LCA0NSwgNDUsIDQ1LCA0NSwgNDYsIDQ2LCA0NiwgNDYsIDQ3LCA0NywgNDcsIDQ3LFxuICA0OCwgNDgsIDQ4LCA0OCwgNDksIDQ5LCA0OSwgNDksIDUwLCA1MCwgNTAsIDUwLCA1MSwgNTEsIDUxLCA1MSxcbiAgNTIsIDUyLCA1MiwgNTIsIDUzLCA1MywgNTMsIDUzLCA1NCwgNTQsIDU0LCA1NCwgNTUsIDU1LCA1NSwgNTUsXG4gIDU2LCA1NiwgNTYsIDU2LCA1NywgNTcsIDU3LCA1NywgNTgsIDU4LCA1OCwgNTgsIDU5LCA1OSwgNTksIDU5LFxuICA2MCwgNjAsIDYwLCA2MCwgNjEsIDYxLCA2MSwgNjEsIDYyLCA2MiwgNjIsIDYyLCA2MywgNjMsIDYzLCA2MyxcbiAgLyogQ09OVEVYVF97TSxMfVNCNiwgc2Vjb25kIGxhc3QgYnl0ZSwgKi9cbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbl0pO1xuXG5leHBvcnRzLmxvb2t1cE9mZnNldHMgPSBuZXcgVWludDE2QXJyYXkoW1xuICAvKiBDT05URVhUX0xTQjYgKi9cbiAgMTAyNCwgMTUzNixcbiAgLyogQ09OVEVYVF9NU0I2ICovXG4gIDEyODAsIDE1MzYsXG4gIC8qIENPTlRFWFRfVVRGOCAqL1xuICAwLCAyNTYsXG4gIC8qIENPTlRFWFRfU0lHTkVEICovXG4gIDc2OCwgNTEyLFxuXSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDY0NTA6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF9fd2VicGFja191bnVzZWRfZXhwb3J0X187XG4vKiBDb3B5cmlnaHQgMjAxMyBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuXG4gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxudmFyIEJyb3RsaUlucHV0ID0gKF9fd2VicGFja19yZXF1aXJlX18oNjE1NCkvKiAuQnJvdGxpSW5wdXQgKi8gLmcpO1xudmFyIEJyb3RsaU91dHB1dCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYxNTQpLyogLkJyb3RsaU91dHB1dCAqLyAuaik7XG52YXIgQnJvdGxpQml0UmVhZGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MTgxKTtcbnZhciBCcm90bGlEaWN0aW9uYXJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MTM5KTtcbnZhciBIdWZmbWFuQ29kZSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDk2NikvKiAuSHVmZm1hbkNvZGUgKi8gLmgpO1xudmFyIEJyb3RsaUJ1aWxkSHVmZm1hblRhYmxlID0gKF9fd2VicGFja19yZXF1aXJlX18oOTY2KS8qIC5Ccm90bGlCdWlsZEh1ZmZtYW5UYWJsZSAqLyAuZyk7XG52YXIgQ29udGV4dCA9IF9fd2VicGFja19yZXF1aXJlX18oNzA4MCk7XG52YXIgUHJlZml4ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NDM1KTtcbnZhciBUcmFuc2Zvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5NzMpO1xuXG52YXIga0RlZmF1bHRDb2RlTGVuZ3RoID0gODtcbnZhciBrQ29kZUxlbmd0aFJlcGVhdENvZGUgPSAxNjtcbnZhciBrTnVtTGl0ZXJhbENvZGVzID0gMjU2O1xudmFyIGtOdW1JbnNlcnRBbmRDb3B5Q29kZXMgPSA3MDQ7XG52YXIga051bUJsb2NrTGVuZ3RoQ29kZXMgPSAyNjtcbnZhciBrTGl0ZXJhbENvbnRleHRCaXRzID0gNjtcbnZhciBrRGlzdGFuY2VDb250ZXh0Qml0cyA9IDI7XG5cbnZhciBIVUZGTUFOX1RBQkxFX0JJVFMgPSA4O1xudmFyIEhVRkZNQU5fVEFCTEVfTUFTSyA9IDB4ZmY7XG4vKiBNYXhpbXVtIHBvc3NpYmxlIEh1ZmZtYW4gdGFibGUgc2l6ZSBmb3IgYW4gYWxwaGFiZXQgc2l6ZSBvZiA3MDQsIG1heCBjb2RlXG4gKiBsZW5ndGggMTUgYW5kIHJvb3QgdGFibGUgYml0cyA4LiAqL1xudmFyIEhVRkZNQU5fTUFYX1RBQkxFX1NJWkUgPSAxMDgwO1xuXG52YXIgQ09ERV9MRU5HVEhfQ09ERVMgPSAxODtcbnZhciBrQ29kZUxlbmd0aENvZGVPcmRlciA9IG5ldyBVaW50OEFycmF5KFtcbiAgMSwgMiwgMywgNCwgMCwgNSwgMTcsIDYsIDE2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuXSk7XG5cbnZhciBOVU1fRElTVEFOQ0VfU0hPUlRfQ09ERVMgPSAxNjtcbnZhciBrRGlzdGFuY2VTaG9ydENvZGVJbmRleE9mZnNldCA9IG5ldyBVaW50OEFycmF5KFtcbiAgMywgMiwgMSwgMCwgMywgMywgMywgMywgMywgMywgMiwgMiwgMiwgMiwgMiwgMlxuXSk7XG5cbnZhciBrRGlzdGFuY2VTaG9ydENvZGVWYWx1ZU9mZnNldCA9IG5ldyBJbnQ4QXJyYXkoW1xuICAwLCAwLCAwLCAwLCAtMSwgMSwgLTIsIDIsIC0zLCAzLCAtMSwgMSwgLTIsIDIsIC0zLCAzXG5dKTtcblxudmFyIGtNYXhIdWZmbWFuVGFibGVTaXplID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgMjU2LCA0MDIsIDQzNiwgNDY4LCA1MDAsIDUzNCwgNTY2LCA1OTgsIDYzMCwgNjYyLCA2OTQsIDcyNiwgNzU4LCA3OTAsIDgyMixcbiAgODU0LCA4ODYsIDkyMCwgOTUyLCA5ODQsIDEwMTYsIDEwNDgsIDEwODBcbl0pO1xuXG5mdW5jdGlvbiBEZWNvZGVXaW5kb3dCaXRzKGJyKSB7XG4gIHZhciBuO1xuICBpZiAoYnIucmVhZEJpdHMoMSkgPT09IDApIHtcbiAgICByZXR1cm4gMTY7XG4gIH1cbiAgXG4gIG4gPSBici5yZWFkQml0cygzKTtcbiAgaWYgKG4gPiAwKSB7XG4gICAgcmV0dXJuIDE3ICsgbjtcbiAgfVxuICBcbiAgbiA9IGJyLnJlYWRCaXRzKDMpO1xuICBpZiAobiA+IDApIHtcbiAgICByZXR1cm4gOCArIG47XG4gIH1cbiAgXG4gIHJldHVybiAxNztcbn1cblxuLyogRGVjb2RlcyBhIG51bWJlciBpbiB0aGUgcmFuZ2UgWzAuLjI1NV0sIGJ5IHJlYWRpbmcgMSAtIDExIGJpdHMuICovXG5mdW5jdGlvbiBEZWNvZGVWYXJMZW5VaW50OChicikge1xuICBpZiAoYnIucmVhZEJpdHMoMSkpIHtcbiAgICB2YXIgbmJpdHMgPSBici5yZWFkQml0cygzKTtcbiAgICBpZiAobmJpdHMgPT09IDApIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnIucmVhZEJpdHMobmJpdHMpICsgKDEgPDwgbmJpdHMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gTWV0YUJsb2NrTGVuZ3RoKCkge1xuICB0aGlzLm1ldGFfYmxvY2tfbGVuZ3RoID0gMDtcbiAgdGhpcy5pbnB1dF9lbmQgPSAwO1xuICB0aGlzLmlzX3VuY29tcHJlc3NlZCA9IDA7XG4gIHRoaXMuaXNfbWV0YWRhdGEgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gRGVjb2RlTWV0YUJsb2NrTGVuZ3RoKGJyKSB7XG4gIHZhciBvdXQgPSBuZXcgTWV0YUJsb2NrTGVuZ3RoOyAgXG4gIHZhciBzaXplX25pYmJsZXM7XG4gIHZhciBzaXplX2J5dGVzO1xuICB2YXIgaTtcbiAgXG4gIG91dC5pbnB1dF9lbmQgPSBici5yZWFkQml0cygxKTtcbiAgaWYgKG91dC5pbnB1dF9lbmQgJiYgYnIucmVhZEJpdHMoMSkpIHtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIFxuICBzaXplX25pYmJsZXMgPSBici5yZWFkQml0cygyKSArIDQ7XG4gIGlmIChzaXplX25pYmJsZXMgPT09IDcpIHtcbiAgICBvdXQuaXNfbWV0YWRhdGEgPSB0cnVlO1xuICAgIFxuICAgIGlmIChici5yZWFkQml0cygxKSAhPT0gMClcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNlcnZlZCBiaXQnKTtcbiAgICBcbiAgICBzaXplX2J5dGVzID0gYnIucmVhZEJpdHMoMik7XG4gICAgaWYgKHNpemVfYnl0ZXMgPT09IDApXG4gICAgICByZXR1cm4gb3V0O1xuICAgIFxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplX2J5dGVzOyBpKyspIHtcbiAgICAgIHZhciBuZXh0X2J5dGUgPSBici5yZWFkQml0cyg4KTtcbiAgICAgIGlmIChpICsgMSA9PT0gc2l6ZV9ieXRlcyAmJiBzaXplX2J5dGVzID4gMSAmJiBuZXh0X2J5dGUgPT09IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaXplIGJ5dGUnKTtcbiAgICAgIFxuICAgICAgb3V0Lm1ldGFfYmxvY2tfbGVuZ3RoIHw9IG5leHRfYnl0ZSA8PCAoaSAqIDgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZV9uaWJibGVzOyArK2kpIHtcbiAgICAgIHZhciBuZXh0X25pYmJsZSA9IGJyLnJlYWRCaXRzKDQpO1xuICAgICAgaWYgKGkgKyAxID09PSBzaXplX25pYmJsZXMgJiYgc2l6ZV9uaWJibGVzID4gNCAmJiBuZXh0X25pYmJsZSA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNpemUgbmliYmxlJyk7XG4gICAgICBcbiAgICAgIG91dC5tZXRhX2Jsb2NrX2xlbmd0aCB8PSBuZXh0X25pYmJsZSA8PCAoaSAqIDQpO1xuICAgIH1cbiAgfVxuICBcbiAgKytvdXQubWV0YV9ibG9ja19sZW5ndGg7XG4gIFxuICBpZiAoIW91dC5pbnB1dF9lbmQgJiYgIW91dC5pc19tZXRhZGF0YSkge1xuICAgIG91dC5pc191bmNvbXByZXNzZWQgPSBici5yZWFkQml0cygxKTtcbiAgfVxuICBcbiAgcmV0dXJuIG91dDtcbn1cblxuLyogRGVjb2RlcyB0aGUgbmV4dCBIdWZmbWFuIGNvZGUgZnJvbSBiaXQtc3RyZWFtLiAqL1xuZnVuY3Rpb24gUmVhZFN5bWJvbCh0YWJsZSwgaW5kZXgsIGJyKSB7XG4gIHZhciBzdGFydF9pbmRleCA9IGluZGV4O1xuICBcbiAgdmFyIG5iaXRzO1xuICBici5maWxsQml0V2luZG93KCk7XG4gIGluZGV4ICs9IChici52YWxfID4+PiBici5iaXRfcG9zXykgJiBIVUZGTUFOX1RBQkxFX01BU0s7XG4gIG5iaXRzID0gdGFibGVbaW5kZXhdLmJpdHMgLSBIVUZGTUFOX1RBQkxFX0JJVFM7XG4gIGlmIChuYml0cyA+IDApIHtcbiAgICBici5iaXRfcG9zXyArPSBIVUZGTUFOX1RBQkxFX0JJVFM7XG4gICAgaW5kZXggKz0gdGFibGVbaW5kZXhdLnZhbHVlO1xuICAgIGluZGV4ICs9IChici52YWxfID4+PiBici5iaXRfcG9zXykgJiAoKDEgPDwgbmJpdHMpIC0gMSk7XG4gIH1cbiAgYnIuYml0X3Bvc18gKz0gdGFibGVbaW5kZXhdLmJpdHM7XG4gIHJldHVybiB0YWJsZVtpbmRleF0udmFsdWU7XG59XG5cbmZ1bmN0aW9uIFJlYWRIdWZmbWFuQ29kZUxlbmd0aHMoY29kZV9sZW5ndGhfY29kZV9sZW5ndGhzLCBudW1fc3ltYm9scywgY29kZV9sZW5ndGhzLCBicikge1xuICB2YXIgc3ltYm9sID0gMDtcbiAgdmFyIHByZXZfY29kZV9sZW4gPSBrRGVmYXVsdENvZGVMZW5ndGg7XG4gIHZhciByZXBlYXQgPSAwO1xuICB2YXIgcmVwZWF0X2NvZGVfbGVuID0gMDtcbiAgdmFyIHNwYWNlID0gMzI3Njg7XG4gIFxuICB2YXIgdGFibGUgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKVxuICAgIHRhYmxlLnB1c2gobmV3IEh1ZmZtYW5Db2RlKDAsIDApKTtcbiAgXG4gIEJyb3RsaUJ1aWxkSHVmZm1hblRhYmxlKHRhYmxlLCAwLCA1LCBjb2RlX2xlbmd0aF9jb2RlX2xlbmd0aHMsIENPREVfTEVOR1RIX0NPREVTKTtcblxuICB3aGlsZSAoc3ltYm9sIDwgbnVtX3N5bWJvbHMgJiYgc3BhY2UgPiAwKSB7XG4gICAgdmFyIHAgPSAwO1xuICAgIHZhciBjb2RlX2xlbjtcbiAgICBcbiAgICBici5yZWFkTW9yZUlucHV0KCk7XG4gICAgYnIuZmlsbEJpdFdpbmRvdygpO1xuICAgIHAgKz0gKGJyLnZhbF8gPj4+IGJyLmJpdF9wb3NfKSAmIDMxO1xuICAgIGJyLmJpdF9wb3NfICs9IHRhYmxlW3BdLmJpdHM7XG4gICAgY29kZV9sZW4gPSB0YWJsZVtwXS52YWx1ZSAmIDB4ZmY7XG4gICAgaWYgKGNvZGVfbGVuIDwga0NvZGVMZW5ndGhSZXBlYXRDb2RlKSB7XG4gICAgICByZXBlYXQgPSAwO1xuICAgICAgY29kZV9sZW5ndGhzW3N5bWJvbCsrXSA9IGNvZGVfbGVuO1xuICAgICAgaWYgKGNvZGVfbGVuICE9PSAwKSB7XG4gICAgICAgIHByZXZfY29kZV9sZW4gPSBjb2RlX2xlbjtcbiAgICAgICAgc3BhY2UgLT0gMzI3NjggPj4gY29kZV9sZW47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBleHRyYV9iaXRzID0gY29kZV9sZW4gLSAxNDtcbiAgICAgIHZhciBvbGRfcmVwZWF0O1xuICAgICAgdmFyIHJlcGVhdF9kZWx0YTtcbiAgICAgIHZhciBuZXdfbGVuID0gMDtcbiAgICAgIGlmIChjb2RlX2xlbiA9PT0ga0NvZGVMZW5ndGhSZXBlYXRDb2RlKSB7XG4gICAgICAgIG5ld19sZW4gPSBwcmV2X2NvZGVfbGVuO1xuICAgICAgfVxuICAgICAgaWYgKHJlcGVhdF9jb2RlX2xlbiAhPT0gbmV3X2xlbikge1xuICAgICAgICByZXBlYXQgPSAwO1xuICAgICAgICByZXBlYXRfY29kZV9sZW4gPSBuZXdfbGVuO1xuICAgICAgfVxuICAgICAgb2xkX3JlcGVhdCA9IHJlcGVhdDtcbiAgICAgIGlmIChyZXBlYXQgPiAwKSB7XG4gICAgICAgIHJlcGVhdCAtPSAyO1xuICAgICAgICByZXBlYXQgPDw9IGV4dHJhX2JpdHM7XG4gICAgICB9XG4gICAgICByZXBlYXQgKz0gYnIucmVhZEJpdHMoZXh0cmFfYml0cykgKyAzO1xuICAgICAgcmVwZWF0X2RlbHRhID0gcmVwZWF0IC0gb2xkX3JlcGVhdDtcbiAgICAgIGlmIChzeW1ib2wgKyByZXBlYXRfZGVsdGEgPiBudW1fc3ltYm9scykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tSZWFkSHVmZm1hbkNvZGVMZW5ndGhzXSBzeW1ib2wgKyByZXBlYXRfZGVsdGEgPiBudW1fc3ltYm9scycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHJlcGVhdF9kZWx0YTsgeCsrKVxuICAgICAgICBjb2RlX2xlbmd0aHNbc3ltYm9sICsgeF0gPSByZXBlYXRfY29kZV9sZW47XG4gICAgICBcbiAgICAgIHN5bWJvbCArPSByZXBlYXRfZGVsdGE7XG4gICAgICBcbiAgICAgIGlmIChyZXBlYXRfY29kZV9sZW4gIT09IDApIHtcbiAgICAgICAgc3BhY2UgLT0gcmVwZWF0X2RlbHRhIDw8ICgxNSAtIHJlcGVhdF9jb2RlX2xlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzcGFjZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIltSZWFkSHVmZm1hbkNvZGVMZW5ndGhzXSBzcGFjZSA9IFwiICsgc3BhY2UpO1xuICB9XG4gIFxuICBmb3IgKDsgc3ltYm9sIDwgbnVtX3N5bWJvbHM7IHN5bWJvbCsrKVxuICAgIGNvZGVfbGVuZ3Roc1tzeW1ib2xdID0gMDtcbn1cblxuZnVuY3Rpb24gUmVhZEh1ZmZtYW5Db2RlKGFscGhhYmV0X3NpemUsIHRhYmxlcywgdGFibGUsIGJyKSB7XG4gIHZhciB0YWJsZV9zaXplID0gMDtcbiAgdmFyIHNpbXBsZV9jb2RlX29yX3NraXA7XG4gIHZhciBjb2RlX2xlbmd0aHMgPSBuZXcgVWludDhBcnJheShhbHBoYWJldF9zaXplKTtcbiAgXG4gIGJyLnJlYWRNb3JlSW5wdXQoKTtcbiAgXG4gIC8qIHNpbXBsZV9jb2RlX29yX3NraXAgaXMgdXNlZCBhcyBmb2xsb3dzOlxuICAgICAxIGZvciBzaW1wbGUgY29kZTtcbiAgICAgMCBmb3Igbm8gc2tpcHBpbmcsIDIgc2tpcHMgMiBjb2RlIGxlbmd0aHMsIDMgc2tpcHMgMyBjb2RlIGxlbmd0aHMgKi9cbiAgc2ltcGxlX2NvZGVfb3Jfc2tpcCA9IGJyLnJlYWRCaXRzKDIpO1xuICBpZiAoc2ltcGxlX2NvZGVfb3Jfc2tpcCA9PT0gMSkge1xuICAgIC8qIFJlYWQgc3ltYm9scywgY29kZXMgJiBjb2RlIGxlbmd0aHMgZGlyZWN0bHkuICovXG4gICAgdmFyIGk7XG4gICAgdmFyIG1heF9iaXRzX2NvdW50ZXIgPSBhbHBoYWJldF9zaXplIC0gMTtcbiAgICB2YXIgbWF4X2JpdHMgPSAwO1xuICAgIHZhciBzeW1ib2xzID0gbmV3IEludDMyQXJyYXkoNCk7XG4gICAgdmFyIG51bV9zeW1ib2xzID0gYnIucmVhZEJpdHMoMikgKyAxO1xuICAgIHdoaWxlIChtYXhfYml0c19jb3VudGVyKSB7XG4gICAgICBtYXhfYml0c19jb3VudGVyID4+PSAxO1xuICAgICAgKyttYXhfYml0cztcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3N5bWJvbHM7ICsraSkge1xuICAgICAgc3ltYm9sc1tpXSA9IGJyLnJlYWRCaXRzKG1heF9iaXRzKSAlIGFscGhhYmV0X3NpemU7XG4gICAgICBjb2RlX2xlbmd0aHNbc3ltYm9sc1tpXV0gPSAyO1xuICAgIH1cbiAgICBjb2RlX2xlbmd0aHNbc3ltYm9sc1swXV0gPSAxO1xuICAgIHN3aXRjaCAobnVtX3N5bWJvbHMpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGlmICgoc3ltYm9sc1swXSA9PT0gc3ltYm9sc1sxXSkgfHxcbiAgICAgICAgICAgIChzeW1ib2xzWzBdID09PSBzeW1ib2xzWzJdKSB8fFxuICAgICAgICAgICAgKHN5bWJvbHNbMV0gPT09IHN5bWJvbHNbMl0pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbUmVhZEh1ZmZtYW5Db2RlXSBpbnZhbGlkIHN5bWJvbHMnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaWYgKHN5bWJvbHNbMF0gPT09IHN5bWJvbHNbMV0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tSZWFkSHVmZm1hbkNvZGVdIGludmFsaWQgc3ltYm9scycpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb2RlX2xlbmd0aHNbc3ltYm9sc1sxXV0gPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDpcbiAgICAgICAgaWYgKChzeW1ib2xzWzBdID09PSBzeW1ib2xzWzFdKSB8fFxuICAgICAgICAgICAgKHN5bWJvbHNbMF0gPT09IHN5bWJvbHNbMl0pIHx8XG4gICAgICAgICAgICAoc3ltYm9sc1swXSA9PT0gc3ltYm9sc1szXSkgfHxcbiAgICAgICAgICAgIChzeW1ib2xzWzFdID09PSBzeW1ib2xzWzJdKSB8fFxuICAgICAgICAgICAgKHN5bWJvbHNbMV0gPT09IHN5bWJvbHNbM10pIHx8XG4gICAgICAgICAgICAoc3ltYm9sc1syXSA9PT0gc3ltYm9sc1szXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tSZWFkSHVmZm1hbkNvZGVdIGludmFsaWQgc3ltYm9scycpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoYnIucmVhZEJpdHMoMSkpIHtcbiAgICAgICAgICBjb2RlX2xlbmd0aHNbc3ltYm9sc1syXV0gPSAzO1xuICAgICAgICAgIGNvZGVfbGVuZ3Roc1tzeW1ib2xzWzNdXSA9IDM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29kZV9sZW5ndGhzW3N5bWJvbHNbMF1dID0gMjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0gZWxzZSB7ICAvKiBEZWNvZGUgSHVmZm1hbi1jb2RlZCBjb2RlIGxlbmd0aHMuICovXG4gICAgdmFyIGk7XG4gICAgdmFyIGNvZGVfbGVuZ3RoX2NvZGVfbGVuZ3RocyA9IG5ldyBVaW50OEFycmF5KENPREVfTEVOR1RIX0NPREVTKTtcbiAgICB2YXIgc3BhY2UgPSAzMjtcbiAgICB2YXIgbnVtX2NvZGVzID0gMDtcbiAgICAvKiBTdGF0aWMgSHVmZm1hbiBjb2RlIGZvciB0aGUgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzICovXG4gICAgdmFyIGh1ZmYgPSBbXG4gICAgICBuZXcgSHVmZm1hbkNvZGUoMiwgMCksIG5ldyBIdWZmbWFuQ29kZSgyLCA0KSwgbmV3IEh1ZmZtYW5Db2RlKDIsIDMpLCBuZXcgSHVmZm1hbkNvZGUoMywgMiksIFxuICAgICAgbmV3IEh1ZmZtYW5Db2RlKDIsIDApLCBuZXcgSHVmZm1hbkNvZGUoMiwgNCksIG5ldyBIdWZmbWFuQ29kZSgyLCAzKSwgbmV3IEh1ZmZtYW5Db2RlKDQsIDEpLFxuICAgICAgbmV3IEh1ZmZtYW5Db2RlKDIsIDApLCBuZXcgSHVmZm1hbkNvZGUoMiwgNCksIG5ldyBIdWZmbWFuQ29kZSgyLCAzKSwgbmV3IEh1ZmZtYW5Db2RlKDMsIDIpLCBcbiAgICAgIG5ldyBIdWZmbWFuQ29kZSgyLCAwKSwgbmV3IEh1ZmZtYW5Db2RlKDIsIDQpLCBuZXcgSHVmZm1hbkNvZGUoMiwgMyksIG5ldyBIdWZmbWFuQ29kZSg0LCA1KVxuICAgIF07XG4gICAgZm9yIChpID0gc2ltcGxlX2NvZGVfb3Jfc2tpcDsgaSA8IENPREVfTEVOR1RIX0NPREVTICYmIHNwYWNlID4gMDsgKytpKSB7XG4gICAgICB2YXIgY29kZV9sZW5faWR4ID0ga0NvZGVMZW5ndGhDb2RlT3JkZXJbaV07XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgdjtcbiAgICAgIGJyLmZpbGxCaXRXaW5kb3coKTtcbiAgICAgIHAgKz0gKGJyLnZhbF8gPj4+IGJyLmJpdF9wb3NfKSAmIDE1O1xuICAgICAgYnIuYml0X3Bvc18gKz0gaHVmZltwXS5iaXRzO1xuICAgICAgdiA9IGh1ZmZbcF0udmFsdWU7XG4gICAgICBjb2RlX2xlbmd0aF9jb2RlX2xlbmd0aHNbY29kZV9sZW5faWR4XSA9IHY7XG4gICAgICBpZiAodiAhPT0gMCkge1xuICAgICAgICBzcGFjZSAtPSAoMzIgPj4gdik7XG4gICAgICAgICsrbnVtX2NvZGVzO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAoIShudW1fY29kZXMgPT09IDEgfHwgc3BhY2UgPT09IDApKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbUmVhZEh1ZmZtYW5Db2RlXSBpbnZhbGlkIG51bV9jb2RlcyBvciBzcGFjZScpO1xuICAgIFxuICAgIFJlYWRIdWZmbWFuQ29kZUxlbmd0aHMoY29kZV9sZW5ndGhfY29kZV9sZW5ndGhzLCBhbHBoYWJldF9zaXplLCBjb2RlX2xlbmd0aHMsIGJyKTtcbiAgfVxuICBcbiAgdGFibGVfc2l6ZSA9IEJyb3RsaUJ1aWxkSHVmZm1hblRhYmxlKHRhYmxlcywgdGFibGUsIEhVRkZNQU5fVEFCTEVfQklUUywgY29kZV9sZW5ndGhzLCBhbHBoYWJldF9zaXplKTtcbiAgXG4gIGlmICh0YWJsZV9zaXplID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW1JlYWRIdWZmbWFuQ29kZV0gQnVpbGRIdWZmbWFuVGFibGUgZmFpbGVkOiBcIik7XG4gIH1cbiAgXG4gIHJldHVybiB0YWJsZV9zaXplO1xufVxuXG5mdW5jdGlvbiBSZWFkQmxvY2tMZW5ndGgodGFibGUsIGluZGV4LCBicikge1xuICB2YXIgY29kZTtcbiAgdmFyIG5iaXRzO1xuICBjb2RlID0gUmVhZFN5bWJvbCh0YWJsZSwgaW5kZXgsIGJyKTtcbiAgbmJpdHMgPSBQcmVmaXgua0Jsb2NrTGVuZ3RoUHJlZml4Q29kZVtjb2RlXS5uYml0cztcbiAgcmV0dXJuIFByZWZpeC5rQmxvY2tMZW5ndGhQcmVmaXhDb2RlW2NvZGVdLm9mZnNldCArIGJyLnJlYWRCaXRzKG5iaXRzKTtcbn1cblxuZnVuY3Rpb24gVHJhbnNsYXRlU2hvcnRDb2Rlcyhjb2RlLCByaW5nYnVmZmVyLCBpbmRleCkge1xuICB2YXIgdmFsO1xuICBpZiAoY29kZSA8IE5VTV9ESVNUQU5DRV9TSE9SVF9DT0RFUykge1xuICAgIGluZGV4ICs9IGtEaXN0YW5jZVNob3J0Q29kZUluZGV4T2Zmc2V0W2NvZGVdO1xuICAgIGluZGV4ICY9IDM7XG4gICAgdmFsID0gcmluZ2J1ZmZlcltpbmRleF0gKyBrRGlzdGFuY2VTaG9ydENvZGVWYWx1ZU9mZnNldFtjb2RlXTtcbiAgfSBlbHNlIHtcbiAgICB2YWwgPSBjb2RlIC0gTlVNX0RJU1RBTkNFX1NIT1JUX0NPREVTICsgMTtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiBNb3ZlVG9Gcm9udCh2LCBpbmRleCkge1xuICB2YXIgdmFsdWUgPSB2W2luZGV4XTtcbiAgdmFyIGkgPSBpbmRleDtcbiAgZm9yICg7IGk7IC0taSkgdltpXSA9IHZbaSAtIDFdO1xuICB2WzBdID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEludmVyc2VNb3ZlVG9Gcm9udFRyYW5zZm9ybSh2LCB2X2xlbikge1xuICB2YXIgbXRmID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIG10ZltpXSA9IGk7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IHZfbGVuOyArK2kpIHtcbiAgICB2YXIgaW5kZXggPSB2W2ldO1xuICAgIHZbaV0gPSBtdGZbaW5kZXhdO1xuICAgIGlmIChpbmRleCkgTW92ZVRvRnJvbnQobXRmLCBpbmRleCk7XG4gIH1cbn1cblxuLyogQ29udGFpbnMgYSBjb2xsZWN0aW9uIG9mIGh1ZmZtYW4gdHJlZXMgd2l0aCB0aGUgc2FtZSBhbHBoYWJldCBzaXplLiAqL1xuZnVuY3Rpb24gSHVmZm1hblRyZWVHcm91cChhbHBoYWJldF9zaXplLCBudW1faHRyZWVzKSB7XG4gIHRoaXMuYWxwaGFiZXRfc2l6ZSA9IGFscGhhYmV0X3NpemU7XG4gIHRoaXMubnVtX2h0cmVlcyA9IG51bV9odHJlZXM7XG4gIHRoaXMuY29kZXMgPSBuZXcgQXJyYXkobnVtX2h0cmVlcyArIG51bV9odHJlZXMgKiBrTWF4SHVmZm1hblRhYmxlU2l6ZVsoYWxwaGFiZXRfc2l6ZSArIDMxKSA+Pj4gNV0pOyAgXG4gIHRoaXMuaHRyZWVzID0gbmV3IFVpbnQzMkFycmF5KG51bV9odHJlZXMpO1xufVxuXG5IdWZmbWFuVHJlZUdyb3VwLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihicikge1xuICB2YXIgaTtcbiAgdmFyIHRhYmxlX3NpemU7XG4gIHZhciBuZXh0ID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IHRoaXMubnVtX2h0cmVlczsgKytpKSB7XG4gICAgdGhpcy5odHJlZXNbaV0gPSBuZXh0O1xuICAgIHRhYmxlX3NpemUgPSBSZWFkSHVmZm1hbkNvZGUodGhpcy5hbHBoYWJldF9zaXplLCB0aGlzLmNvZGVzLCBuZXh0LCBicik7XG4gICAgbmV4dCArPSB0YWJsZV9zaXplO1xuICB9XG59O1xuXG5mdW5jdGlvbiBEZWNvZGVDb250ZXh0TWFwKGNvbnRleHRfbWFwX3NpemUsIGJyKSB7XG4gIHZhciBvdXQgPSB7IG51bV9odHJlZXM6IG51bGwsIGNvbnRleHRfbWFwOiBudWxsIH07XG4gIHZhciB1c2VfcmxlX2Zvcl96ZXJvcztcbiAgdmFyIG1heF9ydW5fbGVuZ3RoX3ByZWZpeCA9IDA7XG4gIHZhciB0YWJsZTtcbiAgdmFyIGk7XG4gIFxuICBici5yZWFkTW9yZUlucHV0KCk7XG4gIHZhciBudW1faHRyZWVzID0gb3V0Lm51bV9odHJlZXMgPSBEZWNvZGVWYXJMZW5VaW50OChicikgKyAxO1xuXG4gIHZhciBjb250ZXh0X21hcCA9IG91dC5jb250ZXh0X21hcCA9IG5ldyBVaW50OEFycmF5KGNvbnRleHRfbWFwX3NpemUpO1xuICBpZiAobnVtX2h0cmVlcyA8PSAxKSB7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHVzZV9ybGVfZm9yX3plcm9zID0gYnIucmVhZEJpdHMoMSk7XG4gIGlmICh1c2VfcmxlX2Zvcl96ZXJvcykge1xuICAgIG1heF9ydW5fbGVuZ3RoX3ByZWZpeCA9IGJyLnJlYWRCaXRzKDQpICsgMTtcbiAgfVxuICBcbiAgdGFibGUgPSBbXTtcbiAgZm9yIChpID0gMDsgaSA8IEhVRkZNQU5fTUFYX1RBQkxFX1NJWkU7IGkrKykge1xuICAgIHRhYmxlW2ldID0gbmV3IEh1ZmZtYW5Db2RlKDAsIDApO1xuICB9XG4gIFxuICBSZWFkSHVmZm1hbkNvZGUobnVtX2h0cmVlcyArIG1heF9ydW5fbGVuZ3RoX3ByZWZpeCwgdGFibGUsIDAsIGJyKTtcbiAgXG4gIGZvciAoaSA9IDA7IGkgPCBjb250ZXh0X21hcF9zaXplOykge1xuICAgIHZhciBjb2RlO1xuXG4gICAgYnIucmVhZE1vcmVJbnB1dCgpO1xuICAgIGNvZGUgPSBSZWFkU3ltYm9sKHRhYmxlLCAwLCBicik7XG4gICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgIGNvbnRleHRfbWFwW2ldID0gMDtcbiAgICAgICsraTtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPD0gbWF4X3J1bl9sZW5ndGhfcHJlZml4KSB7XG4gICAgICB2YXIgcmVwcyA9IDEgKyAoMSA8PCBjb2RlKSArIGJyLnJlYWRCaXRzKGNvZGUpO1xuICAgICAgd2hpbGUgKC0tcmVwcykge1xuICAgICAgICBpZiAoaSA+PSBjb250ZXh0X21hcF9zaXplKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW0RlY29kZUNvbnRleHRNYXBdIGkgPj0gY29udGV4dF9tYXBfc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0X21hcFtpXSA9IDA7XG4gICAgICAgICsraTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dF9tYXBbaV0gPSBjb2RlIC0gbWF4X3J1bl9sZW5ndGhfcHJlZml4O1xuICAgICAgKytpO1xuICAgIH1cbiAgfVxuICBpZiAoYnIucmVhZEJpdHMoMSkpIHtcbiAgICBJbnZlcnNlTW92ZVRvRnJvbnRUcmFuc2Zvcm0oY29udGV4dF9tYXAsIGNvbnRleHRfbWFwX3NpemUpO1xuICB9XG4gIFxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBEZWNvZGVCbG9ja1R5cGUobWF4X2Jsb2NrX3R5cGUsIHRyZWVzLCB0cmVlX3R5cGUsIGJsb2NrX3R5cGVzLCByaW5nYnVmZmVycywgaW5kZXhlcywgYnIpIHtcbiAgdmFyIHJpbmdidWZmZXIgPSB0cmVlX3R5cGUgKiAyO1xuICB2YXIgaW5kZXggPSB0cmVlX3R5cGU7XG4gIHZhciB0eXBlX2NvZGUgPSBSZWFkU3ltYm9sKHRyZWVzLCB0cmVlX3R5cGUgKiBIVUZGTUFOX01BWF9UQUJMRV9TSVpFLCBicik7XG4gIHZhciBibG9ja190eXBlO1xuICBpZiAodHlwZV9jb2RlID09PSAwKSB7XG4gICAgYmxvY2tfdHlwZSA9IHJpbmdidWZmZXJzW3JpbmdidWZmZXIgKyAoaW5kZXhlc1tpbmRleF0gJiAxKV07XG4gIH0gZWxzZSBpZiAodHlwZV9jb2RlID09PSAxKSB7XG4gICAgYmxvY2tfdHlwZSA9IHJpbmdidWZmZXJzW3JpbmdidWZmZXIgKyAoKGluZGV4ZXNbaW5kZXhdIC0gMSkgJiAxKV0gKyAxO1xuICB9IGVsc2Uge1xuICAgIGJsb2NrX3R5cGUgPSB0eXBlX2NvZGUgLSAyO1xuICB9XG4gIGlmIChibG9ja190eXBlID49IG1heF9ibG9ja190eXBlKSB7XG4gICAgYmxvY2tfdHlwZSAtPSBtYXhfYmxvY2tfdHlwZTtcbiAgfVxuICBibG9ja190eXBlc1t0cmVlX3R5cGVdID0gYmxvY2tfdHlwZTtcbiAgcmluZ2J1ZmZlcnNbcmluZ2J1ZmZlciArIChpbmRleGVzW2luZGV4XSAmIDEpXSA9IGJsb2NrX3R5cGU7XG4gICsraW5kZXhlc1tpbmRleF07XG59XG5cbmZ1bmN0aW9uIENvcHlVbmNvbXByZXNzZWRCbG9ja1RvT3V0cHV0KG91dHB1dCwgbGVuLCBwb3MsIHJpbmdidWZmZXIsIHJpbmdidWZmZXJfbWFzaywgYnIpIHtcbiAgdmFyIHJiX3NpemUgPSByaW5nYnVmZmVyX21hc2sgKyAxO1xuICB2YXIgcmJfcG9zID0gcG9zICYgcmluZ2J1ZmZlcl9tYXNrO1xuICB2YXIgYnJfcG9zID0gYnIucG9zXyAmIEJyb3RsaUJpdFJlYWRlci5JQlVGX01BU0s7XG4gIHZhciBuYnl0ZXM7XG5cbiAgLyogRm9yIHNob3J0IGxlbmd0aHMgY29weSBieXRlLWJ5LWJ5dGUgKi9cbiAgaWYgKGxlbiA8IDggfHwgYnIuYml0X3Bvc18gKyAobGVuIDw8IDMpIDwgYnIuYml0X2VuZF9wb3NfKSB7XG4gICAgd2hpbGUgKGxlbi0tID4gMCkge1xuICAgICAgYnIucmVhZE1vcmVJbnB1dCgpO1xuICAgICAgcmluZ2J1ZmZlcltyYl9wb3MrK10gPSBici5yZWFkQml0cyg4KTtcbiAgICAgIGlmIChyYl9wb3MgPT09IHJiX3NpemUpIHtcbiAgICAgICAgb3V0cHV0LndyaXRlKHJpbmdidWZmZXIsIHJiX3NpemUpO1xuICAgICAgICByYl9wb3MgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYnIuYml0X2VuZF9wb3NfIDwgMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tDb3B5VW5jb21wcmVzc2VkQmxvY2tUb091dHB1dF0gYnIuYml0X2VuZF9wb3NfIDwgMzInKTtcbiAgfVxuXG4gIC8qIENvcHkgcmVtYWluaW5nIDAtNCBieXRlcyBmcm9tIGJyLnZhbF8gdG8gcmluZ2J1ZmZlci4gKi9cbiAgd2hpbGUgKGJyLmJpdF9wb3NfIDwgMzIpIHtcbiAgICByaW5nYnVmZmVyW3JiX3Bvc10gPSAoYnIudmFsXyA+Pj4gYnIuYml0X3Bvc18pO1xuICAgIGJyLmJpdF9wb3NfICs9IDg7XG4gICAgKytyYl9wb3M7XG4gICAgLS1sZW47XG4gIH1cblxuICAvKiBDb3B5IHJlbWFpbmluZyBieXRlcyBmcm9tIGJyLmJ1Zl8gdG8gcmluZ2J1ZmZlci4gKi9cbiAgbmJ5dGVzID0gKGJyLmJpdF9lbmRfcG9zXyAtIGJyLmJpdF9wb3NfKSA+PiAzO1xuICBpZiAoYnJfcG9zICsgbmJ5dGVzID4gQnJvdGxpQml0UmVhZGVyLklCVUZfTUFTSykge1xuICAgIHZhciB0YWlsID0gQnJvdGxpQml0UmVhZGVyLklCVUZfTUFTSyArIDEgLSBicl9wb3M7XG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCB0YWlsOyB4KyspXG4gICAgICByaW5nYnVmZmVyW3JiX3BvcyArIHhdID0gYnIuYnVmX1ticl9wb3MgKyB4XTtcbiAgICBcbiAgICBuYnl0ZXMgLT0gdGFpbDtcbiAgICByYl9wb3MgKz0gdGFpbDtcbiAgICBsZW4gLT0gdGFpbDtcbiAgICBicl9wb3MgPSAwO1xuICB9XG5cbiAgZm9yICh2YXIgeCA9IDA7IHggPCBuYnl0ZXM7IHgrKylcbiAgICByaW5nYnVmZmVyW3JiX3BvcyArIHhdID0gYnIuYnVmX1ticl9wb3MgKyB4XTtcbiAgXG4gIHJiX3BvcyArPSBuYnl0ZXM7XG4gIGxlbiAtPSBuYnl0ZXM7XG5cbiAgLyogSWYgd2Ugd3JvdGUgcGFzdCB0aGUgbG9naWNhbCBlbmQgb2YgdGhlIHJpbmdidWZmZXIsIGNvcHkgdGhlIHRhaWwgb2YgdGhlXG4gICAgIHJpbmdidWZmZXIgdG8gaXRzIGJlZ2lubmluZyBhbmQgZmx1c2ggdGhlIHJpbmdidWZmZXIgdG8gdGhlIG91dHB1dC4gKi9cbiAgaWYgKHJiX3BvcyA+PSByYl9zaXplKSB7XG4gICAgb3V0cHV0LndyaXRlKHJpbmdidWZmZXIsIHJiX3NpemUpO1xuICAgIHJiX3BvcyAtPSByYl9zaXplOyAgICBcbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHJiX3BvczsgeCsrKVxuICAgICAgcmluZ2J1ZmZlclt4XSA9IHJpbmdidWZmZXJbcmJfc2l6ZSArIHhdO1xuICB9XG5cbiAgLyogSWYgd2UgaGF2ZSBtb3JlIHRvIGNvcHkgdGhhbiB0aGUgcmVtYWluaW5nIHNpemUgb2YgdGhlIHJpbmdidWZmZXIsIHRoZW4gd2VcbiAgICAgZmlyc3QgZmlsbCB0aGUgcmluZ2J1ZmZlciBmcm9tIHRoZSBpbnB1dCBhbmQgdGhlbiBmbHVzaCB0aGUgcmluZ2J1ZmZlciB0b1xuICAgICB0aGUgb3V0cHV0ICovXG4gIHdoaWxlIChyYl9wb3MgKyBsZW4gPj0gcmJfc2l6ZSkge1xuICAgIG5ieXRlcyA9IHJiX3NpemUgLSByYl9wb3M7XG4gICAgaWYgKGJyLmlucHV0Xy5yZWFkKHJpbmdidWZmZXIsIHJiX3BvcywgbmJ5dGVzKSA8IG5ieXRlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbQ29weVVuY29tcHJlc3NlZEJsb2NrVG9PdXRwdXRdIG5vdCBlbm91Z2ggYnl0ZXMnKTtcbiAgICB9XG4gICAgb3V0cHV0LndyaXRlKHJpbmdidWZmZXIsIHJiX3NpemUpO1xuICAgIGxlbiAtPSBuYnl0ZXM7XG4gICAgcmJfcG9zID0gMDtcbiAgfVxuXG4gIC8qIENvcHkgc3RyYWlnaHQgZnJvbSB0aGUgaW5wdXQgb250byB0aGUgcmluZ2J1ZmZlci4gVGhlIHJpbmdidWZmZXIgd2lsbCBiZVxuICAgICBmbHVzaGVkIHRvIHRoZSBvdXRwdXQgYXQgYSBsYXRlciB0aW1lLiAqL1xuICBpZiAoYnIuaW5wdXRfLnJlYWQocmluZ2J1ZmZlciwgcmJfcG9zLCBsZW4pIDwgbGVuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbQ29weVVuY29tcHJlc3NlZEJsb2NrVG9PdXRwdXRdIG5vdCBlbm91Z2ggYnl0ZXMnKTtcbiAgfVxuXG4gIC8qIFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBiaXQgcmVhZGVyLiAqL1xuICBici5yZXNldCgpO1xufVxuXG4vKiBBZHZhbmNlcyB0aGUgYml0IHJlYWRlciBwb3NpdGlvbiB0byB0aGUgbmV4dCBieXRlIGJvdW5kYXJ5IGFuZCB2ZXJpZmllc1xuICAgdGhhdCBhbnkgc2tpcHBlZCBiaXRzIGFyZSBzZXQgdG8gemVyby4gKi9cbmZ1bmN0aW9uIEp1bXBUb0J5dGVCb3VuZGFyeShicikge1xuICB2YXIgbmV3X2JpdF9wb3MgPSAoYnIuYml0X3Bvc18gKyA3KSAmIH43O1xuICB2YXIgcGFkX2JpdHMgPSBici5yZWFkQml0cyhuZXdfYml0X3BvcyAtIGJyLmJpdF9wb3NfKTtcbiAgcmV0dXJuIHBhZF9iaXRzID09IDA7XG59XG5cbmZ1bmN0aW9uIEJyb3RsaURlY29tcHJlc3NlZFNpemUoYnVmZmVyKSB7XG4gIHZhciBpbnB1dCA9IG5ldyBCcm90bGlJbnB1dChidWZmZXIpO1xuICB2YXIgYnIgPSBuZXcgQnJvdGxpQml0UmVhZGVyKGlucHV0KTtcbiAgRGVjb2RlV2luZG93Qml0cyhicik7XG4gIHZhciBvdXQgPSBEZWNvZGVNZXRhQmxvY2tMZW5ndGgoYnIpO1xuICByZXR1cm4gb3V0Lm1ldGFfYmxvY2tfbGVuZ3RoO1xufVxuXG5fX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fID0gQnJvdGxpRGVjb21wcmVzc2VkU2l6ZTtcblxuZnVuY3Rpb24gQnJvdGxpRGVjb21wcmVzc0J1ZmZlcihidWZmZXIsIG91dHB1dF9zaXplKSB7XG4gIHZhciBpbnB1dCA9IG5ldyBCcm90bGlJbnB1dChidWZmZXIpO1xuICBcbiAgaWYgKG91dHB1dF9zaXplID09IG51bGwpIHtcbiAgICBvdXRwdXRfc2l6ZSA9IEJyb3RsaURlY29tcHJlc3NlZFNpemUoYnVmZmVyKTtcbiAgfVxuICBcbiAgdmFyIG91dHB1dF9idWZmZXIgPSBuZXcgVWludDhBcnJheShvdXRwdXRfc2l6ZSk7XG4gIHZhciBvdXRwdXQgPSBuZXcgQnJvdGxpT3V0cHV0KG91dHB1dF9idWZmZXIpO1xuICBcbiAgQnJvdGxpRGVjb21wcmVzcyhpbnB1dCwgb3V0cHV0KTtcbiAgXG4gIGlmIChvdXRwdXQucG9zIDwgb3V0cHV0LmJ1ZmZlci5sZW5ndGgpIHtcbiAgICBvdXRwdXQuYnVmZmVyID0gb3V0cHV0LmJ1ZmZlci5zdWJhcnJheSgwLCBvdXRwdXQucG9zKTtcbiAgfVxuICBcbiAgcmV0dXJuIG91dHB1dC5idWZmZXI7XG59XG5cbmV4cG9ydHMuQnJvdGxpRGVjb21wcmVzc0J1ZmZlciA9IEJyb3RsaURlY29tcHJlc3NCdWZmZXI7XG5cbmZ1bmN0aW9uIEJyb3RsaURlY29tcHJlc3MoaW5wdXQsIG91dHB1dCkge1xuICB2YXIgaTtcbiAgdmFyIHBvcyA9IDA7XG4gIHZhciBpbnB1dF9lbmQgPSAwO1xuICB2YXIgd2luZG93X2JpdHMgPSAwO1xuICB2YXIgbWF4X2JhY2t3YXJkX2Rpc3RhbmNlO1xuICB2YXIgbWF4X2Rpc3RhbmNlID0gMDtcbiAgdmFyIHJpbmdidWZmZXJfc2l6ZTtcbiAgdmFyIHJpbmdidWZmZXJfbWFzaztcbiAgdmFyIHJpbmdidWZmZXI7XG4gIHZhciByaW5nYnVmZmVyX2VuZDtcbiAgLyogVGhpcyByaW5nIGJ1ZmZlciBob2xkcyBhIGZldyBwYXN0IGNvcHkgZGlzdGFuY2VzIHRoYXQgd2lsbCBiZSB1c2VkIGJ5ICovXG4gIC8qIHNvbWUgc3BlY2lhbCBkaXN0YW5jZSBjb2Rlcy4gKi9cbiAgdmFyIGRpc3RfcmIgPSBbIDE2LCAxNSwgMTEsIDQgXTtcbiAgdmFyIGRpc3RfcmJfaWR4ID0gMDtcbiAgLyogVGhlIHByZXZpb3VzIDIgYnl0ZXMgdXNlZCBmb3IgY29udGV4dC4gKi9cbiAgdmFyIHByZXZfYnl0ZTEgPSAwO1xuICB2YXIgcHJldl9ieXRlMiA9IDA7XG4gIHZhciBoZ3JvdXAgPSBbbmV3IEh1ZmZtYW5UcmVlR3JvdXAoMCwgMCksIG5ldyBIdWZmbWFuVHJlZUdyb3VwKDAsIDApLCBuZXcgSHVmZm1hblRyZWVHcm91cCgwLCAwKV07XG4gIHZhciBibG9ja190eXBlX3RyZWVzO1xuICB2YXIgYmxvY2tfbGVuX3RyZWVzO1xuICB2YXIgYnI7XG5cbiAgLyogV2UgbmVlZCB0aGUgc2xhY2sgcmVnaW9uIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4gICAgICAgLSBhbHdheXMgZG9pbmcgdHdvIDgtYnl0ZSBjb3BpZXMgZm9yIGZhc3QgYmFja3dhcmQgY29weWluZ1xuICAgICAgIC0gdHJhbnNmb3Jtc1xuICAgICAgIC0gZmx1c2hpbmcgdGhlIGlucHV0IHJpbmdidWZmZXIgd2hlbiBkZWNvZGluZyB1bmNvbXByZXNzZWQgYmxvY2tzICovXG4gIHZhciBrUmluZ0J1ZmZlcldyaXRlQWhlYWRTbGFjayA9IDEyOCArIEJyb3RsaUJpdFJlYWRlci5SRUFEX1NJWkU7XG5cbiAgYnIgPSBuZXcgQnJvdGxpQml0UmVhZGVyKGlucHV0KTtcblxuICAvKiBEZWNvZGUgd2luZG93IHNpemUuICovXG4gIHdpbmRvd19iaXRzID0gRGVjb2RlV2luZG93Qml0cyhicik7XG4gIG1heF9iYWNrd2FyZF9kaXN0YW5jZSA9ICgxIDw8IHdpbmRvd19iaXRzKSAtIDE2O1xuXG4gIHJpbmdidWZmZXJfc2l6ZSA9IDEgPDwgd2luZG93X2JpdHM7XG4gIHJpbmdidWZmZXJfbWFzayA9IHJpbmdidWZmZXJfc2l6ZSAtIDE7XG4gIHJpbmdidWZmZXIgPSBuZXcgVWludDhBcnJheShyaW5nYnVmZmVyX3NpemUgKyBrUmluZ0J1ZmZlcldyaXRlQWhlYWRTbGFjayArIEJyb3RsaURpY3Rpb25hcnkubWF4RGljdGlvbmFyeVdvcmRMZW5ndGgpO1xuICByaW5nYnVmZmVyX2VuZCA9IHJpbmdidWZmZXJfc2l6ZTtcblxuICBibG9ja190eXBlX3RyZWVzID0gW107XG4gIGJsb2NrX2xlbl90cmVlcyA9IFtdO1xuICBmb3IgKHZhciB4ID0gMDsgeCA8IDMgKiBIVUZGTUFOX01BWF9UQUJMRV9TSVpFOyB4KyspIHtcbiAgICBibG9ja190eXBlX3RyZWVzW3hdID0gbmV3IEh1ZmZtYW5Db2RlKDAsIDApO1xuICAgIGJsb2NrX2xlbl90cmVlc1t4XSA9IG5ldyBIdWZmbWFuQ29kZSgwLCAwKTtcbiAgfVxuXG4gIHdoaWxlICghaW5wdXRfZW5kKSB7XG4gICAgdmFyIG1ldGFfYmxvY2tfcmVtYWluaW5nX2xlbiA9IDA7XG4gICAgdmFyIGlzX3VuY29tcHJlc3NlZDtcbiAgICB2YXIgYmxvY2tfbGVuZ3RoID0gWyAxIDw8IDI4LCAxIDw8IDI4LCAxIDw8IDI4IF07XG4gICAgdmFyIGJsb2NrX3R5cGUgPSBbIDAgXTtcbiAgICB2YXIgbnVtX2Jsb2NrX3R5cGVzID0gWyAxLCAxLCAxIF07XG4gICAgdmFyIGJsb2NrX3R5cGVfcmIgPSBbIDAsIDEsIDAsIDEsIDAsIDEgXTtcbiAgICB2YXIgYmxvY2tfdHlwZV9yYl9pbmRleCA9IFsgMCBdO1xuICAgIHZhciBkaXN0YW5jZV9wb3N0Zml4X2JpdHM7XG4gICAgdmFyIG51bV9kaXJlY3RfZGlzdGFuY2VfY29kZXM7XG4gICAgdmFyIGRpc3RhbmNlX3Bvc3RmaXhfbWFzaztcbiAgICB2YXIgbnVtX2Rpc3RhbmNlX2NvZGVzO1xuICAgIHZhciBjb250ZXh0X21hcCA9IG51bGw7XG4gICAgdmFyIGNvbnRleHRfbW9kZXMgPSBudWxsO1xuICAgIHZhciBudW1fbGl0ZXJhbF9odHJlZXM7XG4gICAgdmFyIGRpc3RfY29udGV4dF9tYXAgPSBudWxsO1xuICAgIHZhciBudW1fZGlzdF9odHJlZXM7XG4gICAgdmFyIGNvbnRleHRfb2Zmc2V0ID0gMDtcbiAgICB2YXIgY29udGV4dF9tYXBfc2xpY2UgPSBudWxsO1xuICAgIHZhciBsaXRlcmFsX2h0cmVlX2luZGV4ID0gMDtcbiAgICB2YXIgZGlzdF9jb250ZXh0X29mZnNldCA9IDA7XG4gICAgdmFyIGRpc3RfY29udGV4dF9tYXBfc2xpY2UgPSBudWxsO1xuICAgIHZhciBkaXN0X2h0cmVlX2luZGV4ID0gMDtcbiAgICB2YXIgY29udGV4dF9sb29rdXBfb2Zmc2V0MSA9IDA7XG4gICAgdmFyIGNvbnRleHRfbG9va3VwX29mZnNldDIgPSAwO1xuICAgIHZhciBjb250ZXh0X21vZGU7XG4gICAgdmFyIGh0cmVlX2NvbW1hbmQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgMzsgKytpKSB7XG4gICAgICBoZ3JvdXBbaV0uY29kZXMgPSBudWxsO1xuICAgICAgaGdyb3VwW2ldLmh0cmVlcyA9IG51bGw7XG4gICAgfVxuXG4gICAgYnIucmVhZE1vcmVJbnB1dCgpO1xuICAgIFxuICAgIHZhciBfb3V0ID0gRGVjb2RlTWV0YUJsb2NrTGVuZ3RoKGJyKTtcbiAgICBtZXRhX2Jsb2NrX3JlbWFpbmluZ19sZW4gPSBfb3V0Lm1ldGFfYmxvY2tfbGVuZ3RoO1xuICAgIGlmIChwb3MgKyBtZXRhX2Jsb2NrX3JlbWFpbmluZ19sZW4gPiBvdXRwdXQuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgLyogV2UgbmVlZCB0byBncm93IHRoZSBvdXRwdXQgYnVmZmVyIHRvIGZpdCB0aGUgYWRkaXRpb25hbCBkYXRhLiAqL1xuICAgICAgdmFyIHRtcCA9IG5ldyBVaW50OEFycmF5KCBwb3MgKyBtZXRhX2Jsb2NrX3JlbWFpbmluZ19sZW4gKTtcbiAgICAgIHRtcC5zZXQoIG91dHB1dC5idWZmZXIgKTtcbiAgICAgIG91dHB1dC5idWZmZXIgPSB0bXA7XG4gICAgfSAgICBcbiAgICBpbnB1dF9lbmQgPSBfb3V0LmlucHV0X2VuZDtcbiAgICBpc191bmNvbXByZXNzZWQgPSBfb3V0LmlzX3VuY29tcHJlc3NlZDtcbiAgICBcbiAgICBpZiAoX291dC5pc19tZXRhZGF0YSkge1xuICAgICAgSnVtcFRvQnl0ZUJvdW5kYXJ5KGJyKTtcbiAgICAgIFxuICAgICAgZm9yICg7IG1ldGFfYmxvY2tfcmVtYWluaW5nX2xlbiA+IDA7IC0tbWV0YV9ibG9ja19yZW1haW5pbmdfbGVuKSB7XG4gICAgICAgIGJyLnJlYWRNb3JlSW5wdXQoKTtcbiAgICAgICAgLyogUmVhZCBvbmUgYnl0ZSBhbmQgaWdub3JlIGl0LiAqL1xuICAgICAgICBici5yZWFkQml0cyg4KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIFxuICAgIGlmIChtZXRhX2Jsb2NrX3JlbWFpbmluZ19sZW4gPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBcbiAgICBpZiAoaXNfdW5jb21wcmVzc2VkKSB7XG4gICAgICBici5iaXRfcG9zXyA9IChici5iaXRfcG9zXyArIDcpICYgfjc7XG4gICAgICBDb3B5VW5jb21wcmVzc2VkQmxvY2tUb091dHB1dChvdXRwdXQsIG1ldGFfYmxvY2tfcmVtYWluaW5nX2xlbiwgcG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZ2J1ZmZlciwgcmluZ2J1ZmZlcl9tYXNrLCBicik7XG4gICAgICBwb3MgKz0gbWV0YV9ibG9ja19yZW1haW5pbmdfbGVuO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIFxuICAgIGZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHtcbiAgICAgIG51bV9ibG9ja190eXBlc1tpXSA9IERlY29kZVZhckxlblVpbnQ4KGJyKSArIDE7XG4gICAgICBpZiAobnVtX2Jsb2NrX3R5cGVzW2ldID49IDIpIHtcbiAgICAgICAgUmVhZEh1ZmZtYW5Db2RlKG51bV9ibG9ja190eXBlc1tpXSArIDIsIGJsb2NrX3R5cGVfdHJlZXMsIGkgKiBIVUZGTUFOX01BWF9UQUJMRV9TSVpFLCBicik7XG4gICAgICAgIFJlYWRIdWZmbWFuQ29kZShrTnVtQmxvY2tMZW5ndGhDb2RlcywgYmxvY2tfbGVuX3RyZWVzLCBpICogSFVGRk1BTl9NQVhfVEFCTEVfU0laRSwgYnIpO1xuICAgICAgICBibG9ja19sZW5ndGhbaV0gPSBSZWFkQmxvY2tMZW5ndGgoYmxvY2tfbGVuX3RyZWVzLCBpICogSFVGRk1BTl9NQVhfVEFCTEVfU0laRSwgYnIpO1xuICAgICAgICBibG9ja190eXBlX3JiX2luZGV4W2ldID0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgYnIucmVhZE1vcmVJbnB1dCgpO1xuICAgIFxuICAgIGRpc3RhbmNlX3Bvc3RmaXhfYml0cyA9IGJyLnJlYWRCaXRzKDIpO1xuICAgIG51bV9kaXJlY3RfZGlzdGFuY2VfY29kZXMgPSBOVU1fRElTVEFOQ0VfU0hPUlRfQ09ERVMgKyAoYnIucmVhZEJpdHMoNCkgPDwgZGlzdGFuY2VfcG9zdGZpeF9iaXRzKTtcbiAgICBkaXN0YW5jZV9wb3N0Zml4X21hc2sgPSAoMSA8PCBkaXN0YW5jZV9wb3N0Zml4X2JpdHMpIC0gMTtcbiAgICBudW1fZGlzdGFuY2VfY29kZXMgPSAobnVtX2RpcmVjdF9kaXN0YW5jZV9jb2RlcyArICg0OCA8PCBkaXN0YW5jZV9wb3N0Zml4X2JpdHMpKTtcbiAgICBjb250ZXh0X21vZGVzID0gbmV3IFVpbnQ4QXJyYXkobnVtX2Jsb2NrX3R5cGVzWzBdKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYmxvY2tfdHlwZXNbMF07ICsraSkge1xuICAgICAgIGJyLnJlYWRNb3JlSW5wdXQoKTtcbiAgICAgICBjb250ZXh0X21vZGVzW2ldID0gKGJyLnJlYWRCaXRzKDIpIDw8IDEpO1xuICAgIH1cbiAgICBcbiAgICB2YXIgX28xID0gRGVjb2RlQ29udGV4dE1hcChudW1fYmxvY2tfdHlwZXNbMF0gPDwga0xpdGVyYWxDb250ZXh0Qml0cywgYnIpO1xuICAgIG51bV9saXRlcmFsX2h0cmVlcyA9IF9vMS5udW1faHRyZWVzO1xuICAgIGNvbnRleHRfbWFwID0gX28xLmNvbnRleHRfbWFwO1xuICAgIFxuICAgIHZhciBfbzIgPSBEZWNvZGVDb250ZXh0TWFwKG51bV9ibG9ja190eXBlc1syXSA8PCBrRGlzdGFuY2VDb250ZXh0Qml0cywgYnIpO1xuICAgIG51bV9kaXN0X2h0cmVlcyA9IF9vMi5udW1faHRyZWVzO1xuICAgIGRpc3RfY29udGV4dF9tYXAgPSBfbzIuY29udGV4dF9tYXA7XG4gICAgXG4gICAgaGdyb3VwWzBdID0gbmV3IEh1ZmZtYW5UcmVlR3JvdXAoa051bUxpdGVyYWxDb2RlcywgbnVtX2xpdGVyYWxfaHRyZWVzKTtcbiAgICBoZ3JvdXBbMV0gPSBuZXcgSHVmZm1hblRyZWVHcm91cChrTnVtSW5zZXJ0QW5kQ29weUNvZGVzLCBudW1fYmxvY2tfdHlwZXNbMV0pO1xuICAgIGhncm91cFsyXSA9IG5ldyBIdWZmbWFuVHJlZUdyb3VwKG51bV9kaXN0YW5jZV9jb2RlcywgbnVtX2Rpc3RfaHRyZWVzKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHtcbiAgICAgIGhncm91cFtpXS5kZWNvZGUoYnIpO1xuICAgIH1cblxuICAgIGNvbnRleHRfbWFwX3NsaWNlID0gMDtcbiAgICBkaXN0X2NvbnRleHRfbWFwX3NsaWNlID0gMDtcbiAgICBjb250ZXh0X21vZGUgPSBjb250ZXh0X21vZGVzW2Jsb2NrX3R5cGVbMF1dO1xuICAgIGNvbnRleHRfbG9va3VwX29mZnNldDEgPSBDb250ZXh0Lmxvb2t1cE9mZnNldHNbY29udGV4dF9tb2RlXTtcbiAgICBjb250ZXh0X2xvb2t1cF9vZmZzZXQyID0gQ29udGV4dC5sb29rdXBPZmZzZXRzW2NvbnRleHRfbW9kZSArIDFdO1xuICAgIGh0cmVlX2NvbW1hbmQgPSBoZ3JvdXBbMV0uaHRyZWVzWzBdO1xuXG4gICAgd2hpbGUgKG1ldGFfYmxvY2tfcmVtYWluaW5nX2xlbiA+IDApIHtcbiAgICAgIHZhciBjbWRfY29kZTtcbiAgICAgIHZhciByYW5nZV9pZHg7XG4gICAgICB2YXIgaW5zZXJ0X2NvZGU7XG4gICAgICB2YXIgY29weV9jb2RlO1xuICAgICAgdmFyIGluc2VydF9sZW5ndGg7XG4gICAgICB2YXIgY29weV9sZW5ndGg7XG4gICAgICB2YXIgZGlzdGFuY2VfY29kZTtcbiAgICAgIHZhciBkaXN0YW5jZTtcbiAgICAgIHZhciBjb250ZXh0O1xuICAgICAgdmFyIGo7XG4gICAgICB2YXIgY29weV9kc3Q7XG5cbiAgICAgIGJyLnJlYWRNb3JlSW5wdXQoKTtcbiAgICAgIFxuICAgICAgaWYgKGJsb2NrX2xlbmd0aFsxXSA9PT0gMCkge1xuICAgICAgICBEZWNvZGVCbG9ja1R5cGUobnVtX2Jsb2NrX3R5cGVzWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfdHlwZV90cmVlcywgMSwgYmxvY2tfdHlwZSwgYmxvY2tfdHlwZV9yYixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX3R5cGVfcmJfaW5kZXgsIGJyKTtcbiAgICAgICAgYmxvY2tfbGVuZ3RoWzFdID0gUmVhZEJsb2NrTGVuZ3RoKGJsb2NrX2xlbl90cmVlcywgSFVGRk1BTl9NQVhfVEFCTEVfU0laRSwgYnIpO1xuICAgICAgICBodHJlZV9jb21tYW5kID0gaGdyb3VwWzFdLmh0cmVlc1tibG9ja190eXBlWzFdXTtcbiAgICAgIH1cbiAgICAgIC0tYmxvY2tfbGVuZ3RoWzFdO1xuICAgICAgY21kX2NvZGUgPSBSZWFkU3ltYm9sKGhncm91cFsxXS5jb2RlcywgaHRyZWVfY29tbWFuZCwgYnIpO1xuICAgICAgcmFuZ2VfaWR4ID0gY21kX2NvZGUgPj4gNjtcbiAgICAgIGlmIChyYW5nZV9pZHggPj0gMikge1xuICAgICAgICByYW5nZV9pZHggLT0gMjtcbiAgICAgICAgZGlzdGFuY2VfY29kZSA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzdGFuY2VfY29kZSA9IDA7XG4gICAgICB9XG4gICAgICBpbnNlcnRfY29kZSA9IFByZWZpeC5rSW5zZXJ0UmFuZ2VMdXRbcmFuZ2VfaWR4XSArICgoY21kX2NvZGUgPj4gMykgJiA3KTtcbiAgICAgIGNvcHlfY29kZSA9IFByZWZpeC5rQ29weVJhbmdlTHV0W3JhbmdlX2lkeF0gKyAoY21kX2NvZGUgJiA3KTtcbiAgICAgIGluc2VydF9sZW5ndGggPSBQcmVmaXgua0luc2VydExlbmd0aFByZWZpeENvZGVbaW5zZXJ0X2NvZGVdLm9mZnNldCArXG4gICAgICAgICAgYnIucmVhZEJpdHMoUHJlZml4LmtJbnNlcnRMZW5ndGhQcmVmaXhDb2RlW2luc2VydF9jb2RlXS5uYml0cyk7XG4gICAgICBjb3B5X2xlbmd0aCA9IFByZWZpeC5rQ29weUxlbmd0aFByZWZpeENvZGVbY29weV9jb2RlXS5vZmZzZXQgK1xuICAgICAgICAgIGJyLnJlYWRCaXRzKFByZWZpeC5rQ29weUxlbmd0aFByZWZpeENvZGVbY29weV9jb2RlXS5uYml0cyk7XG4gICAgICBwcmV2X2J5dGUxID0gcmluZ2J1ZmZlcltwb3MtMSAmIHJpbmdidWZmZXJfbWFza107XG4gICAgICBwcmV2X2J5dGUyID0gcmluZ2J1ZmZlcltwb3MtMiAmIHJpbmdidWZmZXJfbWFza107XG4gICAgICBmb3IgKGogPSAwOyBqIDwgaW5zZXJ0X2xlbmd0aDsgKytqKSB7XG4gICAgICAgIGJyLnJlYWRNb3JlSW5wdXQoKTtcblxuICAgICAgICBpZiAoYmxvY2tfbGVuZ3RoWzBdID09PSAwKSB7XG4gICAgICAgICAgRGVjb2RlQmxvY2tUeXBlKG51bV9ibG9ja190eXBlc1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfdHlwZV90cmVlcywgMCwgYmxvY2tfdHlwZSwgYmxvY2tfdHlwZV9yYixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfdHlwZV9yYl9pbmRleCwgYnIpO1xuICAgICAgICAgIGJsb2NrX2xlbmd0aFswXSA9IFJlYWRCbG9ja0xlbmd0aChibG9ja19sZW5fdHJlZXMsIDAsIGJyKTtcbiAgICAgICAgICBjb250ZXh0X29mZnNldCA9IGJsb2NrX3R5cGVbMF0gPDwga0xpdGVyYWxDb250ZXh0Qml0cztcbiAgICAgICAgICBjb250ZXh0X21hcF9zbGljZSA9IGNvbnRleHRfb2Zmc2V0O1xuICAgICAgICAgIGNvbnRleHRfbW9kZSA9IGNvbnRleHRfbW9kZXNbYmxvY2tfdHlwZVswXV07XG4gICAgICAgICAgY29udGV4dF9sb29rdXBfb2Zmc2V0MSA9IENvbnRleHQubG9va3VwT2Zmc2V0c1tjb250ZXh0X21vZGVdO1xuICAgICAgICAgIGNvbnRleHRfbG9va3VwX29mZnNldDIgPSBDb250ZXh0Lmxvb2t1cE9mZnNldHNbY29udGV4dF9tb2RlICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dCA9IChDb250ZXh0Lmxvb2t1cFtjb250ZXh0X2xvb2t1cF9vZmZzZXQxICsgcHJldl9ieXRlMV0gfFxuICAgICAgICAgICAgICAgICAgIENvbnRleHQubG9va3VwW2NvbnRleHRfbG9va3VwX29mZnNldDIgKyBwcmV2X2J5dGUyXSk7XG4gICAgICAgIGxpdGVyYWxfaHRyZWVfaW5kZXggPSBjb250ZXh0X21hcFtjb250ZXh0X21hcF9zbGljZSArIGNvbnRleHRdO1xuICAgICAgICAtLWJsb2NrX2xlbmd0aFswXTtcbiAgICAgICAgcHJldl9ieXRlMiA9IHByZXZfYnl0ZTE7XG4gICAgICAgIHByZXZfYnl0ZTEgPSBSZWFkU3ltYm9sKGhncm91cFswXS5jb2RlcywgaGdyb3VwWzBdLmh0cmVlc1tsaXRlcmFsX2h0cmVlX2luZGV4XSwgYnIpO1xuICAgICAgICByaW5nYnVmZmVyW3BvcyAmIHJpbmdidWZmZXJfbWFza10gPSBwcmV2X2J5dGUxO1xuICAgICAgICBpZiAoKHBvcyAmIHJpbmdidWZmZXJfbWFzaykgPT09IHJpbmdidWZmZXJfbWFzaykge1xuICAgICAgICAgIG91dHB1dC53cml0ZShyaW5nYnVmZmVyLCByaW5nYnVmZmVyX3NpemUpO1xuICAgICAgICB9XG4gICAgICAgICsrcG9zO1xuICAgICAgfVxuICAgICAgbWV0YV9ibG9ja19yZW1haW5pbmdfbGVuIC09IGluc2VydF9sZW5ndGg7XG4gICAgICBpZiAobWV0YV9ibG9ja19yZW1haW5pbmdfbGVuIDw9IDApIGJyZWFrO1xuXG4gICAgICBpZiAoZGlzdGFuY2VfY29kZSA8IDApIHtcbiAgICAgICAgdmFyIGNvbnRleHQ7XG4gICAgICAgIFxuICAgICAgICBici5yZWFkTW9yZUlucHV0KCk7XG4gICAgICAgIGlmIChibG9ja19sZW5ndGhbMl0gPT09IDApIHtcbiAgICAgICAgICBEZWNvZGVCbG9ja1R5cGUobnVtX2Jsb2NrX3R5cGVzWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja190eXBlX3RyZWVzLCAyLCBibG9ja190eXBlLCBibG9ja190eXBlX3JiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja190eXBlX3JiX2luZGV4LCBicik7XG4gICAgICAgICAgYmxvY2tfbGVuZ3RoWzJdID0gUmVhZEJsb2NrTGVuZ3RoKGJsb2NrX2xlbl90cmVlcywgMiAqIEhVRkZNQU5fTUFYX1RBQkxFX1NJWkUsIGJyKTtcbiAgICAgICAgICBkaXN0X2NvbnRleHRfb2Zmc2V0ID0gYmxvY2tfdHlwZVsyXSA8PCBrRGlzdGFuY2VDb250ZXh0Qml0cztcbiAgICAgICAgICBkaXN0X2NvbnRleHRfbWFwX3NsaWNlID0gZGlzdF9jb250ZXh0X29mZnNldDtcbiAgICAgICAgfVxuICAgICAgICAtLWJsb2NrX2xlbmd0aFsyXTtcbiAgICAgICAgY29udGV4dCA9IChjb3B5X2xlbmd0aCA+IDQgPyAzIDogY29weV9sZW5ndGggLSAyKSAmIDB4ZmY7XG4gICAgICAgIGRpc3RfaHRyZWVfaW5kZXggPSBkaXN0X2NvbnRleHRfbWFwW2Rpc3RfY29udGV4dF9tYXBfc2xpY2UgKyBjb250ZXh0XTtcbiAgICAgICAgZGlzdGFuY2VfY29kZSA9IFJlYWRTeW1ib2woaGdyb3VwWzJdLmNvZGVzLCBoZ3JvdXBbMl0uaHRyZWVzW2Rpc3RfaHRyZWVfaW5kZXhdLCBicik7XG4gICAgICAgIGlmIChkaXN0YW5jZV9jb2RlID49IG51bV9kaXJlY3RfZGlzdGFuY2VfY29kZXMpIHtcbiAgICAgICAgICB2YXIgbmJpdHM7XG4gICAgICAgICAgdmFyIHBvc3RmaXg7XG4gICAgICAgICAgdmFyIG9mZnNldDtcbiAgICAgICAgICBkaXN0YW5jZV9jb2RlIC09IG51bV9kaXJlY3RfZGlzdGFuY2VfY29kZXM7XG4gICAgICAgICAgcG9zdGZpeCA9IGRpc3RhbmNlX2NvZGUgJiBkaXN0YW5jZV9wb3N0Zml4X21hc2s7XG4gICAgICAgICAgZGlzdGFuY2VfY29kZSA+Pj0gZGlzdGFuY2VfcG9zdGZpeF9iaXRzO1xuICAgICAgICAgIG5iaXRzID0gKGRpc3RhbmNlX2NvZGUgPj4gMSkgKyAxO1xuICAgICAgICAgIG9mZnNldCA9ICgoMiArIChkaXN0YW5jZV9jb2RlICYgMSkpIDw8IG5iaXRzKSAtIDQ7XG4gICAgICAgICAgZGlzdGFuY2VfY29kZSA9IG51bV9kaXJlY3RfZGlzdGFuY2VfY29kZXMgK1xuICAgICAgICAgICAgICAoKG9mZnNldCArIGJyLnJlYWRCaXRzKG5iaXRzKSkgPDxcbiAgICAgICAgICAgICAgIGRpc3RhbmNlX3Bvc3RmaXhfYml0cykgKyBwb3N0Zml4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIENvbnZlcnQgdGhlIGRpc3RhbmNlIGNvZGUgdG8gdGhlIGFjdHVhbCBkaXN0YW5jZSBieSBwb3NzaWJseSBsb29raW5nICovXG4gICAgICAvKiB1cCBwYXN0IGRpc3RuYWNlcyBmcm9tIHRoZSByaW5nYnVmZmVyLiAqL1xuICAgICAgZGlzdGFuY2UgPSBUcmFuc2xhdGVTaG9ydENvZGVzKGRpc3RhbmNlX2NvZGUsIGRpc3RfcmIsIGRpc3RfcmJfaWR4KTtcbiAgICAgIGlmIChkaXN0YW5jZSA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbQnJvdGxpRGVjb21wcmVzc10gaW52YWxpZCBkaXN0YW5jZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAocG9zIDwgbWF4X2JhY2t3YXJkX2Rpc3RhbmNlICYmXG4gICAgICAgICAgbWF4X2Rpc3RhbmNlICE9PSBtYXhfYmFja3dhcmRfZGlzdGFuY2UpIHtcbiAgICAgICAgbWF4X2Rpc3RhbmNlID0gcG9zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF4X2Rpc3RhbmNlID0gbWF4X2JhY2t3YXJkX2Rpc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBjb3B5X2RzdCA9IHBvcyAmIHJpbmdidWZmZXJfbWFzaztcblxuICAgICAgaWYgKGRpc3RhbmNlID4gbWF4X2Rpc3RhbmNlKSB7XG4gICAgICAgIGlmIChjb3B5X2xlbmd0aCA+PSBCcm90bGlEaWN0aW9uYXJ5Lm1pbkRpY3Rpb25hcnlXb3JkTGVuZ3RoICYmXG4gICAgICAgICAgICBjb3B5X2xlbmd0aCA8PSBCcm90bGlEaWN0aW9uYXJ5Lm1heERpY3Rpb25hcnlXb3JkTGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIG9mZnNldCA9IEJyb3RsaURpY3Rpb25hcnkub2Zmc2V0c0J5TGVuZ3RoW2NvcHlfbGVuZ3RoXTtcbiAgICAgICAgICB2YXIgd29yZF9pZCA9IGRpc3RhbmNlIC0gbWF4X2Rpc3RhbmNlIC0gMTtcbiAgICAgICAgICB2YXIgc2hpZnQgPSBCcm90bGlEaWN0aW9uYXJ5LnNpemVCaXRzQnlMZW5ndGhbY29weV9sZW5ndGhdO1xuICAgICAgICAgIHZhciBtYXNrID0gKDEgPDwgc2hpZnQpIC0gMTtcbiAgICAgICAgICB2YXIgd29yZF9pZHggPSB3b3JkX2lkICYgbWFzaztcbiAgICAgICAgICB2YXIgdHJhbnNmb3JtX2lkeCA9IHdvcmRfaWQgPj4gc2hpZnQ7XG4gICAgICAgICAgb2Zmc2V0ICs9IHdvcmRfaWR4ICogY29weV9sZW5ndGg7XG4gICAgICAgICAgaWYgKHRyYW5zZm9ybV9pZHggPCBUcmFuc2Zvcm0ua051bVRyYW5zZm9ybXMpIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSBUcmFuc2Zvcm0udHJhbnNmb3JtRGljdGlvbmFyeVdvcmQocmluZ2J1ZmZlciwgY29weV9kc3QsIG9mZnNldCwgY29weV9sZW5ndGgsIHRyYW5zZm9ybV9pZHgpO1xuICAgICAgICAgICAgY29weV9kc3QgKz0gbGVuO1xuICAgICAgICAgICAgcG9zICs9IGxlbjtcbiAgICAgICAgICAgIG1ldGFfYmxvY2tfcmVtYWluaW5nX2xlbiAtPSBsZW47XG4gICAgICAgICAgICBpZiAoY29weV9kc3QgPj0gcmluZ2J1ZmZlcl9lbmQpIHtcbiAgICAgICAgICAgICAgb3V0cHV0LndyaXRlKHJpbmdidWZmZXIsIHJpbmdidWZmZXJfc2l6ZSk7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBmb3IgKHZhciBfeCA9IDA7IF94IDwgKGNvcHlfZHN0IC0gcmluZ2J1ZmZlcl9lbmQpOyBfeCsrKVxuICAgICAgICAgICAgICAgIHJpbmdidWZmZXJbX3hdID0gcmluZ2J1ZmZlcltyaW5nYnVmZmVyX2VuZCArIF94XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYWNrd2FyZCByZWZlcmVuY2UuIHBvczogXCIgKyBwb3MgKyBcIiBkaXN0YW5jZTogXCIgKyBkaXN0YW5jZSArXG4gICAgICAgICAgICAgIFwiIGxlbjogXCIgKyBjb3B5X2xlbmd0aCArIFwiIGJ5dGVzIGxlZnQ6IFwiICsgbWV0YV9ibG9ja19yZW1haW5pbmdfbGVuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYWNrd2FyZCByZWZlcmVuY2UuIHBvczogXCIgKyBwb3MgKyBcIiBkaXN0YW5jZTogXCIgKyBkaXN0YW5jZSArXG4gICAgICAgICAgICBcIiBsZW46IFwiICsgY29weV9sZW5ndGggKyBcIiBieXRlcyBsZWZ0OiBcIiArIG1ldGFfYmxvY2tfcmVtYWluaW5nX2xlbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkaXN0YW5jZV9jb2RlID4gMCkge1xuICAgICAgICAgIGRpc3RfcmJbZGlzdF9yYl9pZHggJiAzXSA9IGRpc3RhbmNlO1xuICAgICAgICAgICsrZGlzdF9yYl9pZHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29weV9sZW5ndGggPiBtZXRhX2Jsb2NrX3JlbWFpbmluZ19sZW4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhY2t3YXJkIHJlZmVyZW5jZS4gcG9zOiBcIiArIHBvcyArIFwiIGRpc3RhbmNlOiBcIiArIGRpc3RhbmNlICtcbiAgICAgICAgICAgIFwiIGxlbjogXCIgKyBjb3B5X2xlbmd0aCArIFwiIGJ5dGVzIGxlZnQ6IFwiICsgbWV0YV9ibG9ja19yZW1haW5pbmdfbGVuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjb3B5X2xlbmd0aDsgKytqKSB7XG4gICAgICAgICAgcmluZ2J1ZmZlcltwb3MgJiByaW5nYnVmZmVyX21hc2tdID0gcmluZ2J1ZmZlclsocG9zIC0gZGlzdGFuY2UpICYgcmluZ2J1ZmZlcl9tYXNrXTtcbiAgICAgICAgICBpZiAoKHBvcyAmIHJpbmdidWZmZXJfbWFzaykgPT09IHJpbmdidWZmZXJfbWFzaykge1xuICAgICAgICAgICAgb3V0cHV0LndyaXRlKHJpbmdidWZmZXIsIHJpbmdidWZmZXJfc2l6ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgICsrcG9zO1xuICAgICAgICAgIC0tbWV0YV9ibG9ja19yZW1haW5pbmdfbGVuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIFdoZW4gd2UgZ2V0IGhlcmUsIHdlIG11c3QgaGF2ZSBpbnNlcnRlZCBhdCBsZWFzdCBvbmUgbGl0ZXJhbCBhbmQgKi9cbiAgICAgIC8qIG1hZGUgYSBjb3B5IG9mIGF0IGxlYXN0IGxlbmd0aCB0d28sIHRoZXJlZm9yZSBhY2Nlc3NpbmcgdGhlIGxhc3QgMiAqL1xuICAgICAgLyogYnl0ZXMgaXMgdmFsaWQuICovXG4gICAgICBwcmV2X2J5dGUxID0gcmluZ2J1ZmZlclsocG9zIC0gMSkgJiByaW5nYnVmZmVyX21hc2tdO1xuICAgICAgcHJldl9ieXRlMiA9IHJpbmdidWZmZXJbKHBvcyAtIDIpICYgcmluZ2J1ZmZlcl9tYXNrXTtcbiAgICB9XG5cbiAgICAvKiBQcm90ZWN0IHBvcyBmcm9tIG92ZXJmbG93LCB3cmFwIGl0IGFyb3VuZCBhdCBldmVyeSBHQiBvZiBpbnB1dCBkYXRhICovXG4gICAgcG9zICY9IDB4M2ZmZmZmZmY7XG4gIH1cblxuICBvdXRwdXQud3JpdGUocmluZ2J1ZmZlciwgcG9zICYgcmluZ2J1ZmZlcl9tYXNrKTtcbn1cblxuX193ZWJwYWNrX3VudXNlZF9leHBvcnRfXyA9IEJyb3RsaURlY29tcHJlc3M7XG5cbkJyb3RsaURpY3Rpb25hcnkuaW5pdCgpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MzQwOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBiYXNlNjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3NDIpO1xuXG4vKipcbiAqIFRoZSBub3JtYWwgZGljdGlvbmFyeS1kYXRhLmpzIGlzIHF1aXRlIGxhcmdlLCB3aGljaCBtYWtlcyBpdCBcbiAqIHVuc3VpdGFibGUgZm9yIGJyb3dzZXIgdXNhZ2UuIEluIG9yZGVyIHRvIG1ha2UgaXQgc21hbGxlciwgXG4gKiB3ZSByZWFkIGRpY3Rpb25hcnkuYmluLCB3aGljaCBpcyBhIGNvbXByZXNzZWQgdmVyc2lvbiBvZlxuICogdGhlIGRpY3Rpb25hcnksIGFuZCBvbiBpbml0aWFsIGxvYWQsIEJyb3RsaSBkZWNvbXByZXNzZXMgXG4gKiBpdCdzIG93biBkaWN0aW9uYXJ5LiDwn5icXG4gKi9cbmV4cG9ydHMuaW5pdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgQnJvdGxpRGVjb21wcmVzc0J1ZmZlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDY0NTApLkJyb3RsaURlY29tcHJlc3NCdWZmZXIpO1xuICB2YXIgY29tcHJlc3NlZCA9IGJhc2U2NC50b0J5dGVBcnJheShfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MjIpKTtcbiAgcmV0dXJuIEJyb3RsaURlY29tcHJlc3NCdWZmZXIoY29tcHJlc3NlZCk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNzIyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5tb2R1bGUuZXhwb3J0cz1cIlc1L2ZjUUxuNWdLZjJYVWJBaVExWFVMWCtUWno2QURUb0RzZ3FrNnFWZmVDMGU0bTZPTzJ3Y1ExSjc2WkJWUlYxZlJrRXNkdS8vNjJ6UXNGRVpXU1RDbk1oY3NRS2xTMnFPaHVWWVlNR0NrVjBmWFdFb01GYkVTWHJLRVo5d2RVRXN5dzlnNGJKbEV0MVk2b1ZNeE1SVEVWYkNJd1p6Snpib0s1ajhtNFlIMDJxZ1hZaHYxVitQTTQzNXNMVnh5SEppaGFKUkVFaFpHcUwwM3R4R0ZRTG03NmNhR08vb3Z4S3Z6Q2J5LzN2TVR0WC80NTlmMGlnaTdXdXRuS2lNUTZ3T0RTb1JoLzhMeDFWM1E5OU12S3R3QjZiSGRFUllSWTBoU3RKb01qTmVUc05YN2JuK1k3ZTRFUTNiZjh4QmM3TDBCc3lmRlBLNDNkR1NYcEw2Y2xZQy9JMzI4aDU0L1ZZclE1aTA2NDhGZ2JHdGw4MzdzdkozNUwzTW90LytuUGxOcFdnS3gxZ0dYUVlxWDZuK2JiWjd3dXlDSEtjVW9rMTJYanF1YjdOWFpHenFCeDBTRCt1emlOZjg3dDd2ZTQyanhTS1FvVzNueXhWcldJR2xGU2hoQ0t4anBaWjVNZUduYTArbEJraytrYU44RjlxRkJBRmdFb2d5TUJkY1gvVDFXL1duTU9pLzd5Y1dVUWxvRUJLR2VDNDhNa2l3cUprSk8rMTJlUWlPRkhNbWNrNnEvSWpXVzNSWmxhbnkyM1RCbStjTnIvODQvb2k1R0dtR0JaV3JaNmorenlrVm96ejVmVC9RSC9EYTZXVGJaWVlQeW5WTk83a3h6dU5OMmt4S0tXY2hlNVd2ZWl0UEtBZWNCOFljQUh6Lyt6WExqY0x6a2REU2t0TklEd1pFOUo5WCt0dG80M29KeTY1d0FwTTNtRHpZdEN3WDlsTStONVZSM2tYWW8wWjN0MFR0WGZnQkZnN2dVOG9OMERnbDdmWmxVYmhObGwrMHV1b2hSVktqckVkOGVnclNuZHk1L1RnZDJncWpBNENBVnVDN0VTVW1MM0Rab0duZmhRVjh1d25waThFR3ZBVlZzb3dOUnhQdWRjazcrb3FBVURrd1pvcFdxRm5XMXJpc3MwdDF6NmlDSVNWS3JlWUdOdlFjWHYrMUw5K2piUDhjZC9kUFVpcUJzbzJxKzdaeUZCdkVOQ2trVnI0NGl5UGJ0T29Pb0NlY1dzaXVxTVNNTDVsdit2TjVNelVyK0RuaDczRzdRMVluUllKVllYSFJKYU5BT0J5aWFLNkN1c2dGZEJQRTQwcjBydnFYVjd0a3NLTzJEckhZWEJUdjhQNXlzcXhFeDhWRFhVRERxa1BINk5OT1YvYTJXSDh6bGtYUkVMU2E4UCtoZU55SkJCUDdQZ3NHMUV0V3ROZWY2L2krbGNheXpRd1FDc2R1aWRwYktmaFdVRGdBRW15aEd1L3pWVGFjSTZSUzB6VEFCck9ZdWVlbW5WYTE5dTlmVDIzTi9UYTZSdlRwb2Y1RFd5Z3FyZUNxckRBZ000TElEMSsxVC90YVU2eVRGVkxxWE92Ky9NdVFPRm5hRjh2TE1LRDd0S1dEb0JkQUxneEYzM3pRY2NDY2RIeDhmS0lWZFc2OU83cUh0WHBlR3I5amJicEZBK3FSTVdyNWhwMHM2N0ZQYzdIQWlMVjBnMC9wZVpsVzdoSlBZRWhaeWhwU3dhaG5mOTMvdFpnZnFaV1hGZG1kWEJ6cXhHSExyUUt4b0FZNmZSb0JoZ0NSUG1tR3VlWVo1SmV4VFZES1VJWHprRy9mcXAvMFUzaEFnUWRKOXp1bXV0SzZucVdiYXF2bTFwZ3UwM0lZUitHKzhzMGpEQkJ6OGNBcFpGU0JldVdhc3lxbzJPTURLQVpDb3pTK0dXU3ZML0hzRTlySHhvb2UxN1Uzcy9sVEUrVlpBazRqM2RwNnVJR2FDMEpNaXFSNUNVc2FiUHlNMGRPWURSN0VhN2lwNFVTWmx5YTM4WWZQdHZyWC90QmxoSGlsajU1bloxbmZOMjRBT0FpOUJWdHovTWJuOEFFREpDcUpnc1ZVYTZuUW5TeHYyRnM3bC9ObEN6cGZZRWptUHJOeWliLyt0MGVpMmVFTWp2TmhMa0hDWmxjaTRXaEJlN2VQWlRtellxbFk5KzFweHRTNEdCKzVsTTFCSFQ5dFMyNzBFV1VEWUZxMUkweVkvZk5pQWs0Yms5eUJnbWVmL2YyazZBbFlRWkhzTkZuVzh3QlF4Q2Q2OGlXdjcvMzViWGZ6M0pabWZHbGlnV0FLUmpJczNJcHp4UTI3dkFnbEhTaU96Q1l6SjlMOUExQ2RpeUZ2eVI2NnVjQTRqS2lmdTVlaHdFUjI2eVY3SGpLcW41TWZvem83Q294eHQ4TFdXUFQ0N0JlTXhYOHAwUGpiN2habis2Ync3ejNMdys3NjUzajVzSThDTHU1a1RocE1sajFtNGMyY2gzakdjUDFGc1QxM3Z1SzNxamVjS1RaazJrSGNPWlk0MFVYK3FkYXhzdFpxc3FRcWdYeitRR0Y5OVpKTHFyM1ZZdTRhZWNsMUFiNUdtcVM4ay9HVjViOTV6eFE1ZDRFZlhVSjZrVFMvQ1hGL2FpcUtET1QxVDdKejV6MFB3RFVjd3I5Y2xMTjFPSkdDaUtmcXZhaCtoM1h6ckJPaUxPVzh3dm44Z1c2cUU4dlB4aStFZnYrVUg1NVQ3UFFGVk1oNmNaMXBaUWx6SnBLWjdQN3VXdndQR0o2RFRsUjZ3YnlqM0l2Mkh5ZWZuUm8vZHY3ZE54K3FhYTBOMzhpQnNSKytVaWw3V2Q0YWZ3RE5zcnpEQUs0Zlhad3ZFWS9qZEt1SUtYbGZyUWQyQzM5ZFc3bnRuUmJJcDlPdEd5OXBQQm4vVjJBU29pLzJVSlpmUyt4dUdMSDhibkx1UGx6ZFROUzZ6ZHlrOER0L2g2c2ZPVzVteXhoMWYremYzelozTVgvbU85Y1FQcDVwT3g5NjdaQTYvcHFIdmNsTmZuVUZGK3JxK1ZkN2FsS3I2S1dQY0lEaHBuNnYySzZObFV1NkxyS284Yi9wWXBVL0dhemZ2dHdobjd0RU9VdVhodDVyVUpkU2Y2c0xqWWYwVlRZRGd3SjgxeWFxS1RVWWVqL3RiSGNrU1JiL0haaWN3R0pxaDFtQUhCL0l1TnM5ZGM5eXV2RjNENVhvY20zZWxXRmRxNW9FeTcwZFlGaXQ3OXlhTGlOalBqNVVVY1ZtWlVWaFFFaFc1VjJaNkNtNEhWSC9SOHFsYW1SWXdCaWxldWgwN0NiRWNlM1RYYTJKbVhXQmYrb3p0MzE5cHNib29iZVpoVm53aE1aek9lUUp6aHBURGJQNzFUdjhIdVp4eFVJLyttYTNYVzZERkREczQrcW1wRVJ3SEdCZDJlZHh3VUtsT0RSZFVXWi9nMEdPZXpyYnpPWmF1Rk1haTRRVTZHVkhWNmFQTkJpQm5kSFNzVjRJenB2VWlpWXlnNk95eXJMNERqNXEvTHczTjVrQXdmdEVWbDlyTmQ3Sms1UERpajJoVEg2d0lYbnN5WGtLZVB4Ym1IWWdDOEE2YW41Rm9iL0tINUd0QzBsNGVGc28rVnB4ZWR0SkhkSHBObStCdnk0Qzc5eVZPa3Jac0xyUTNPSENlQjBSYStrQklSbGRVR2xEQ0VtcTJSd1huZnloNkR6K2FsazZlZnRJMm42c2FzdFJyR3did3N6QmVEUlMvRmEvS3dSSmtDelRzTHIvSkNzNWhPUEUvTVBMWWRaMUYxZnY3RCtWbXlzWDZOcE9DOGFVOUY0UXM2SHZEeVV5OVB2RkdES1ovUDUxMDFUWUhGbDhwamo2d20vcXlTNzVldFpoaGZnMFVFTDRPWW1IazZtNmRPMTkyQXpvSXlQU1Y5UWVkREE0TWwyM3JSYnF4TVBNeGY3RkpuRGM1RlRFbFZTL1B5cWdlUHptd1ZaMjZOV2hSRFErb2FUN2x5N2VsbDRzM0R5cFMxczBnK3RPcjdYSHJya1pqOSt4L21KQnR0ckx4OThsRklhUlp6SHo0YUM3cjUyL0pRNFZqSGFoWTIvWVZYWm4vUUMyenRRYi9zWTN1Umx5YzV2UVM4bkxQR1QvbjI3NDk1aThIUEExNTJ6N0ZoNWFGcHluMUdQSktIdVBMOEl3OTREdVczS2prVVJBV1pYbjRFUXk4OXhpS0VITjFtay90a000Z1lEQnh3Tm9ZdlJmRTZMRnFzeFdKdFByREdic25MTWFwM0thM01Vb3l0VzBjdmllb3pPbWRFUm1oY3F6RyszSG1adjJ5WmVpSWVRVEtHZFJUNEhITnhla20xdFkrL24wNnJHbUZsZXFMc2NTRVJ6Y3RUS002RzlQMFBjMVJtVnZyYXNjSXhhTzFDUUNpWVBFMTViRDdjM3hTZVc3Z1h4WWpneGNyVWxjYkl2TzByK1lwbGh4MGtUdDNxYWZET21GeU1qZ0d4WHU3M3JkZE1IcFYxd011YnlBR2NmL3Y1ZExyNVA3MlRhOWxCRitmek1Kck15Y3d2Kzl2blUzQU5JbDFjSDl0Zlc3YWY4dTAvSEcwdlY0N2pORlh6RlR0YWhhMXh2emUvczhLTXRDWXVjWGMxbnpmZC9NUXlkVVhuL2I3MlJCdDV3Ty8zalJjTUg5QmRoQy95Y3RLQkl2ZVJZUHJOcERXcUJzTzhWTW1QK1d2UmFPY0E0elJNUjFQdlNvTzkyclM3cFlFditmWmZFZlRNekVkTSs2WDV0TGx5eEV4aHFMUmttczVFdUxvdkxmeDY2ZGU1ZkwyL3lYMDJINTJGUFZ3YWhyUHFtTi9FMG9WWG5zQ0toYmkveVJ4WDgzblJiVUtXaHpZY2VYT250ZnVYbjUxTnN6SjZNTzczcFFmNVBsNGluM2VjNEpVOGhGN3BwVjM0K21tOXIxTFkwZWUvaTFPMXdwZDgremZMenRFMGNxQnhnZ2lCaTVCdTk1djlsM3I5ci9VNWh3ZUxuK1RiZnhvd3JXRHFkSmF1S2Q4K3EvZEg4c2JQa2M5dHR1eU85NGY3L1hLL25IWDQ2TVBGTEViNXFRbE5QdmhKNTAvNTl0OWZ0M0xYdTd1VmFXYU8yYkRyRENuUlN6WnlXdkZLeE8xK3ZUOE13d3VuUjNiWDBDa2ZQanFiNEs5TzE5dG41WDUwUHZtWXBFd0h0aVc5V3R6dVYvczc2QjF6dkxMTmtWaU5kOHlTeElsLzNvcmZxUDkwVHlUR2FmNy9yeDhqUXplSEpYZG1oL042WUR2YnZtVEJ3Q2R4ZkVRMU5jTDZ3Tk1kU0lYTnE3YjFFVXpSeTEvQXhzeWs1cDIyR01HMWIrR3hGZ2JIRXJaaDkyd3V2Y28wQXVPTFhjdDlodncybncvTHFJY0RSUm1KbW1aemNnVWE3SnBNL1dWL1M5SVVmYkY1NlRMMm9yenF3ZWJkUkQ4bklZTko0MUQvaHozN0ZvMTFwMlkyMXd6UGNuNzEzcVZHaHF0ZXZTdFlmR0g0bjY5T0VKdFB2YmJMWVd2c2NEcWMzSGdudTE2Nit0QXlMbnhyWDBZNXpvWWpWKysxc0k3dDVrTXIwMktULyt1d3RrYytyWkxPZi9xbi9zM25ZQ2YxM0RnOC9zQjJkaUpnakdxalErVExoeGJ6eXVlMk9iN1g2LzlsVXdXN2ErbGJ6bkh6T1l5OExLVzFDL3VSUGJRWTNLVy8wZ085TFh1bkhMdlBMOTdhZmJhOWJGdGM5aG16N0dBdHRqVllsQ3ZRQWlPd0FrL2dDNStoa0xFczZ0cjNBWkt4TEp0T0V3azJkTHhUWVdzSUIvai9Ub1d0SVd6bzkwNkZyU0c4aWFxcXFxcXFpSWlJaUFnek16TXpOeitBeUsrMDEvemk4bjhTK1kxTWpvUmFRODBXVS9HOE1CbE8rNTNWUFhBTnJXbTR3ekdVVlpVampCSlpWZGhwY2ZranNtY1dhTytVRWxkWGkxZSt6cStIT3NDcGtuWXNodWg4cE9MSVNKdW43VE4wRUlHVzJ4VG5sT0ltZWVjbm9HVzRyYXhlMkcxVDNIRXZmWVVZTWhHK2dBRk9Bd2g1bks4bVpod0pNbU43cjIyNFFWc05Gdlo4N1owcWF0dmtua2x5UERLM0h5NDVQZ1ZLWGppNTJXZW40ZDRQbEZWVllHbk5hcCtmU3BGYks5MHJZbmhVYzZuOTFRM0FZOUUwdEpPRnJjZlp0bS80OTFYYmNHL2pzVmlVUFBYNzZxbWV1aXorcVkxSGs3LzFWUE00MDV6V1Z1b2hlTFVpbXBXWWRWekNtVWRLSGViTWR6Z3JZcmI4bUwyZWVMU25SV0hkb25mWmE4UnNPVTlGMzd3KzU5MWw1RkxZSGlPcVdlSHRFL2xXckJIY1JLcDN1aHRyOHlYbThMVS81bXMrTk02WktzcXU5MGNGWjRvNTgrazRyZHJ0Qjk3TkFERmJ3bUVHN2xYcXZpcmhPVE9xVTE0eHVVRjJteUlqVVJjUEhyUE9RNGxtTTNQZU1nN2JVdWswbm5aaTY3YlhzVTZIOGxocUlvOFRhT3JFYWZDTzFBUks5UGpDMFFPb3EyQnhtTWRnWUI5Ry9sSWI5KytmcU5KMnM3QkhHRnlCTm1aQVI4SjNLQ28wMTJpa2FTUDhCQ3JmNlZJMFg1eGRuYmhISU8rQjVyYk95QjU0elhremZPYnlKNGVjd3hmcUJKTUxGYzdtNTlyTmN3N2hvSG5GWjBiMDB6ZWUrZ1RxdmptNjFQYjR4bjBrY0RYNGp2SE0wckJYWnlwRzNEQ0tuRC9XYWEvWnRIbXRGUGdPNWVFVHgrazdSclZnM2FTd20yWW9OWG5DczNYUFFEaE5uK0ZpYTZJbE9PdUlHNlZKSDdUUDZhdmEyNmVoS0hRYTJUNE4wdGNaOWRQQ0dvM1pkbk5sdHNIUWJlWXQ1dlBuSmV6Vi9jQWVOeXBkbWwxdkNISThNODFuU1JQNVFpMittSTh2L3N4aVpydTkxODduUnRwM2YvNDJOZW1jT05hKzRlVkMzUENaemM4OGFaaDg1MUNxU3NzaGU3MHVQeGVOL2RtWXdsd2IzdHJ3TXJOMUdxOGpibkFwY1ZEeC95RFBlWXM1LzdyNjJ0c1E2bExnK0RpRlhURWh6UjlkSHF2MGlUNHRnajgyNVcrSDNYaVJVTlVaVDJrUjlSaTArbHArVU0zaVF0Uzh1T0UyM0x5NEtZdHZxSDEzamdoVW50SlJBZXd1ek5MRFhwOFJ4ZGNhQTNjTVk2VE8ySWVTRlJYZXplV0lqQ3F5aHNVZE1ZdUNnWVRaU0twQnlwZTF6UmZxOEZzaHZmQlBjNkJBUVdsNy9ReElEcDNWR28xSjN2bjQyT0VzM3F6bndzK1lMUlhieW15QjE5YTlYQng2bi9vd2N5eGxFWXlGV0NpK2tHOUYrRXlELzR5bjgwK2FnYVo5UDdheTJEbnk5OWFLMm85MUZrZkVPWThoQnd5Zmk1dXd4Mnk1U2FIbUcrb3EvemwxRlgvOGlyT2Y4WTN2QWNYLzZ1TFA2QTZudk1PMjRlZFNHUGpRYzgyN1J3MmF0WCt6MmJLcTBDbVc5bU90WW5yNS9BZkRhMVpmUGFYbkt0bFdib3J1cDdRWXgrT3IydVdiK04zTi8vMit5RGNYTXFJSmRmNTV4bDcvdnNqNFdvUFBseEx4dFZya0o0dy90VGUzbUxkQVRPT1l3eGNxNTJ3NVd4ejVNYlBkVnM1TzgvbGhmRTdkUGowYklpUFEzUVYwaXFtNG0zWVg4aFJmYzZqUTNmV2VwZXZNcVVESmQ4Nlo0dndNNDBDV0hubitXcGhzR0hmaWVGMDJEM3RtWnZwV0Qra0JwTkNGY0xuWmhjbW1yaHBHenpiZEErc1ExYXIxOE9KRDg3SU9LT0ZvUk56bmFIUE5IVWZVTmh2WTFpVSt1aHZFdnBLSGFVbjNxSzNleFZWeVg0am9pcHAzdW03Rm1ZSldtQStXYklEc2hScGJWUng1L25xc3RDZ3k4N0ZHYmZWQjh5REdDcVMrMnFDc25Sd25TQU42emd6eGZkQjJuQlQvdlo0LzZ1eGI2b0g4YjRWQlJ4aUlCOTN3TGE0N2hHM3cyU0wvMloyN3lPWEpGd1pwU0phQll5dmFqQTd2UlJZTktxbGpYS3B0L0NGRC90U01yMThES0tid0IweGdnQmVQYXRsMW5raTB5dnFXNXpjaGx5Wm1KME9UeEozRCtmc1lKcy9teFlONStMZTVvYWd0Y2wrWXNWdnk4a1NqSTJZR3ZHanZtcGtSUzlXMmR0WHFXblZ1eFVoVVJtMWxLdG91L2hkRXExOVZCcDlPakd2SEVRU21ycHVmMlIyNG1YR2hlaWw4S2VpQU5ZOGZXMVZFUlVmQkltYjY0ajEyY2FCWm1SVmlaSGJlVk1qQ3JQRGc5QTkwSVhydG5zWUN1WnRSUTBQeXJLRGpCTk9zUGZLc2cxcEEwMmdIbFZyME9YaUZodHA2bkpxWFZ6Y2JmTTBLbnpDM2dnT0VOUEU5VkJkbUhLTjZMWWFpamI0d1h4Sm41QTBGU0RGNWoraDFvb1p4ODg1SnQzWkt6TzVuN1o1V2ZORU90eXlQcVFFbm43V0x2NUZpczNQZGdNc2hqRjFGUnlkYk55ZUJieUtJMW9OMVRSVnJWSzdrZ3NiL3pqWDRORFBJUk1jdFZlYXhWQjM4VmgxeDVLYmVKYlUxMzhBTTVLem1adTN1bnkwRXJ5Z3hpSkY3R1ZYVXJQekZ4cmx4MXVGZEFhWkZETjljdkliNzRxRDl0ekJNbzdMN1dJRVlLK3NsYTFEVk1IcEYwRjdiMytZNlMremp2TGVETUNwYXBtSm8xd2VCV3V4S0Yzck9vY2loMWd1bjRCb0poMWtXblYvSm1pcTZ1T2hLM1ZmS3hFSEVrYWZqTGdLM291amFQelk2U1hnOHBoaEw0VE5SMXh2SmQxV2EwYVlGZlBVTUxyTkJEQ2g0QXVHUlRidEtNYzZaMVVkajhldlkvWnBDdU1BVWVmZG82OURaVW5nb3FFMVA5QTNQSmZPZjdXaXhDRWorWTZ0N2ZZZUhiYnhVQW9GVjNNODljQ0tmbWEzZmMxK2pLUmU3TUZXRWJRcUVmeXpPMngvd3JPMlZZSDdpWWRROUJrUHlJOC8za1hCcExhQ3BVN2VDMFl2L2FtL3RFRHU3SFpwcWcwRXZIbzBuZi9SL2dSelVXeTMzL0hYTUpRZXUxR3lsS21Pa1h6bENmR0ZydUFjUFBoYUdxWk90dTE5enNKMVNPMkp6NFp0dGg1Y0JYNm1SUXdXbUR3cnlHOUZVTWxaek5ja01kSytJb01KdjFyT1duQmFtUzJ3MktIaWFQTVBMQzE1aENabTRLVHBvWnlqNEUyVHFDL1A2cjcvRWhuRE1oS2ljWloxWnd4dUM3RFB6REdzNTNxOGdYYUk5a0ZUSysyTFRxN2Jod3NUYnJNVjhSc2Z1YTVsTVMwRndiVGl0VVZuVmExeVRiNUlYNTFtbVluVWNQOXdQcjhKaTF0aVlKZUpWOUdaVHJRaEY3dnZkVTJPVFU0Mm9nSjlGRHdobXljSTJMSWcrKzAzQzZzY1loVXlVdU1WNXRrdzZrR1VvTCttak5DMzgrd01kV05sam42dEdQcFJFUzd2ZXFyU241VFJ1ditkaDZKVkwvaURIVTFkYjRjOVdLMysrT3JIM1BxemlGOTE2VU1VS244RzY3bk42MEdmV2lIclhZaFVHM3lWV215WWFrNTlOSGo4dDFzbUc0VURpV3oyclBITnJLbk40Wm8xTEJicjIvZUY5WVowbjBibHgybkc0WCtFS0Z4dlMzVzI4SkVTRCtGV2s2MVZDRDN6L1VSR0hpSmwrKzdUZEJ3a0NqNnRHT0gzcURiMFFxY09GOUt6cGowSFViL0t5RlczWWhqMlZNS0pxR1psZUZCSDd2cXZmN1dxTEMzWE11SFY4cThhNHNURnV4VXRrRC82SklCdkthVmp2OTZuZGdydUtaMWsvQkh6cWYySzlmTGs3SEdYQU55TERkMXZ4a0svaTA1NXBuemwrenc2ekxud1hsVllWdGZtYWNKZ0VwUlAxaGJHZ3JZUFZONnYybEcraWRRTkdtd2NLWHUvOHhFai9QNnFlL3NCMldtd05wNnBwOGphSVNNa3dkbGVGWFlLNTVOSFdMVFRidXRTVXFqQmZER1dvL1lnOTE4cVErOEJSWlNBSFpiZnVOWnoyTzBzb3YxVWU0Q1dsVmczckZoTTNLbGpqOWtzR2QvTlVoazRuSCthNVVOMisxaTgrTk0zdlJOcDd1UTZzcWV4U0N1a0VWbFZacmlITnFGaTVyTG05VE1XYTRxbTNpZEpxcHBRQUNvbDJsNFZTdXZXTGZ0YTRKY1h5M2JST1BOYlhPZ2RPaEc0N0xDMEN3Vy9kTWxTeDRKZjE3YUVVM3lBMXg5cCtZYzBqdXBYZ2NNdVlOa3U2NGlZT2tHVG9WRHVKdmxiRUtsSnFzbWlIYnZOcklWWkVIK3lGZEY4RGJsZVo2aU5pV3dNcXZ0TXAvbVNwd3g1S3hSclQ5cDNNQVBUSEd0TWJmdmRGaHlqOXZoYUtjbjNBdDhMYzE2QWkrdkJjU3AxenRYaTdyQ0paeC9xbDdUWGNjbHE2UTc2VWVLV0R5OWJvUzBXSElqVXVXaFBHOExCbVc1eTJyaHVUcE01dnNMdCtIT0xoMVlmMERxWGE5dHNmQytrYUt0Mmh0QTBhaS9MMmk3UktvTmpFd3p0a21SVTBHZmdXMVR4VXZQRmhnMFY3RGRmV0prNWdmcmNjcFl2K01BOU0wZGtHVExFQ2VZd1VpeFJ6alJGZG1qRzd6ZFpJbDNYS0I5WWxpTktJMzFsZmE3aTJKRzVDOFNzK3JIZTBEN1o2OTYvVjNERUFPV0huUTl5TmFoTVVsNWtFTldTNnBIS0twMkQxQmFTcnJIZEUxdzJxTnhJenRwWGdVSXJGMGJtMTVZTUw0YjZWMWsrR3BOeXNUYWhLTVZyclM4NWxUVm85T0dKOTZJNDdlQXk1cllXcFJmL21JemVvWVUxREthUUNUVVZ3cmhIZXlOb0RxSGVsK2xMeHI5V0t6aFNZdzd2clI2K1Y1cTBwZmkyazNMMXpxa3ViWTZycmQ5Wkx2U3VXTmYwdXFua1krRnBUdkZ6U1c5RnAwYjlsOEpBN1RIVjllQ2kvUFkvU0NaSVVZeDNCVTJhbGo3Q20zVlY2ZVlwaW9zNGI2V3VOT0pkWVhVSzN6VHFqNUNWRzJGcVlNNFo3Q3VJVTBxTzA1WFIwZDcxRkhNMFloWm1KbVRSZkxsWEV1bU44MkJHdHpkWDBTMTl0MWUrYlVpZUs4elJtcXBhNFFjNVRTamlmbWFRc1kyRVRMamhJMzZnTVIxKzdxcGpkWFhIaWNlVWVrZkJhdWNIU2hBT2lGWG12M3NObUdReVU1aVZnbm9vY3VvblFYRVBURndzbEh0UzhSK0E0N1N0STl3ajBpU3J0Ymk1ck15c2N6RmlJbXNRK2JkRkNsbkZqanBYWHdNeTZPN3Fmak9yOEZiMGE3T0RJdGlzam5uM0VRTzE2K3lwZDFjd3lhQVc1WXp4ejVRa25mTU83NjQzZlhXL0k5eTNVMnhIMjdPYXBxcjU2Wi90RXpnbGo2SWJUNkhFSGpvcGlYcWVSYmU1bVFRdnh0Y2JET1Z2ZXJOMFpnTWR6cVJZUmphWHRNUmQ1NlE0Y1pTbWRQdlpKZFNyaEoxRDl6TlhQcUFFcVBJYXZQZGZ1YnQ1b2tlMmttdjBkenRJc3pTdjJWWXVveWYxVXVvcGJzWWIrdVg5aDZXcHdqcGd0WjZmTk5hd05KNHE4TzNDRm9TYmlvQWFPU1pNeDJHWWFQWUIrckViNnFqUWlOUkZRNzZUdndORlZLRCtCaEg5VmhjS0dzWHptTUk3QnB0VS9DTldvbE03WXpST3ZwRkFudHNpV0pwNmVSMmQzR2FyY1lTaFZZU1VxaG1ZT1dqNUU5Nk5LMld2bVlOVGVZN1pzNFJVRWR2OWg5UVQ0RXNlS3Q2THpMcnFFT3MzaHhBWTFNYU5XcFNhNnpaeDhGM1lPVmVDWU1TODhXK0NZSER1V2U0eW9jNllLK2RqRHVFT3JCUjVsdmgwcitROXVNODhscmp4OXg5QXRncFFWTkU4ciszTzZHdnc1OUQra0JGL1VNWHlobGlZVXRQam12WEdZNkRrM3gra0VPVytHdGRNVkM0RVpUcW9TL2ptUjBQMExTNzVET2MvdzJ2bnJpOTdNNFNkYlo4cWVVN2dnOERWYkVSa1U1Z2VhTVFPM21ZclNZeUFuZ2VVUXFyTjBDMC92c0ZtY2dXTlhOZWlkc1RBajcvNE1uY0pSMGNhYUJVcGJMSzF5QkNCTlJqRXY2S3Z1VlNkcFBuRU1KZHNSUnRxSitVOHROMWdYQTRlUEhjNlpUMGV2aUk3M1VPSkYwZkVaOFlhbmVBUXFRZEdwaE52d000bklxUG5YeFYweEEwZm5DVCtvQWhKdXl3L3E4ak8weThDalN0ZVpFeHdCcElONlN2TnA2QTVHL2FiaTZlZ2VORC8xR1RndWh1TmphVWJiblNiR2Q0TDg5MzdFem0zNEV5aTZuMW1hZU9CeGgzUEkwanpKRGY1bWgvQnNMRDdGMkdPS3ZsQS81Z3R2eEkzL2VWNHNMZktXNVd5K29pbytlcy91NlQ4VVUrbnNvZnk1N0ljYi9KbFpIUEZ0Q2dkL3grYnd0M1pUK3hYVHRUdFRyR0FiNFFlaEM2WDlHKzhZVCtvemNMeERzZENqc3VPcXdQRm5yZExZYUZjOTJVaTBtNGZyMzlsWW1sQ2FxVGl0N0c2Ty8za1dEa2d0WGpOSDRCaUVtLytqZWdRbmloT3RmZmZuMzNXeHNGamhmTWQ0OEhUK2Y2bzZYNjVqN1hSOFdMU0hNRmt4YnZPWXNyUnNGMWJvd0R1U1ExOE1reGs0cXoyem9HUEw1ZnU5aDJIcW10MWFzbDNRM1l1M3N6T2Mrc3BpQ21YNEFFVEJNM3BMb1RZU3Azc1Z4YWh5aEw4ZUM0bVBOOWsyeDNvMHhraWl4SXpNM0NaRnpmNW9SNG1lY1E1K2F4MndDYWgzL2NybW5Ib3FSMCtLTWFPUHhSaWYxb0VGUkZPTy9rVFBQbXR3dytOZk1YeEVLNmduNmlVMzJVNmZGcnVJejhRNFdnbGp0bmFDVlRCZ1d4N2RpVWRzaEM5WkVhNXlLcFJCQmVXMTJyL2lOYy8rRWdOcW1oc3dOQjhTQm9paEhYZURGN3JyV0RMY210M1Y4R1lZTjdwWFJ5NERaamo0REp1VUJMNWlDM0RRQWFvbzR2a2Z0cVZUWVJHTFMzbUhaN2dkbWRUVHFiZ05OL1BUZFRDT1RnWG9sYzg4TWhYQUVVTWRYMGl5MUpNdWs1d0xzZ2V1MFFVWWx6MlM0c2tUV3dKejZwT20vOGlocm1nR2ZGZ3JpK1pXVUsyZ0FQSGdiV2E4amFvY2RTdU00RkpZb0tpY1lYL1pTRU5rZzlRMVp6SmZ3U2NmVm5SMkRlZ09Hd0N2bW9nYVdKQ0xRZXB2OVdObFU2UWdzbU93SUNxdVUyOE1sazNkOVc1RTgxbFUvNUV6MExjWDZsd0tNV0RObHVOS2ZCRFV5L3BoSmdCY01uZmtoOWlSeHJkT3pnczA4SmRQQjg1THdvK0dVU2I0dDNuQyswYnlxTVp0TzJmUUo0VTJ6R0lyNDl0LzI4cW1tR3YyUmFuREQ3YTNGRWNkdHV0a1c4dHd3d2xVU3BiOFFhbG9kZGRiQmZOSEtEUTgyOEJkRTdPQmdGZGlLWW9oTGF3RllxcHliUW94QVRacmhlTGhkSTcrMFpsdTlRMW15UmNkMTVyOVVJbThLMkxHSnhxVGVnbnRxTlZNS25mMWE4elFpeVVSMXJ4b3FqaUZ4ZUh4cUZjWVVUSGZEdTdyaGJXbmc2cU94T3NJKzVBMXA5bVJ5RVBkVmtUbEUyNHZZNTRXN2JXYzZqTWdadk5YZGZDOS85cTc0MDhLRHNiZEw3VXR6N1FGU0RldHoycGljQXJ6cmRwTDhPYUNIQzlWMjZScm9lbXREWjV5Tk0vS0drV015VG1mbkluRXZ3dFNEMjNVY0ZjamhhRTNWS3prb2FFTUtHQmZ0NFhiSU82Zm9yVFkxbG1HUXdWbUtpY0JDaUFyRHpFKzFvSXhFMDhmV2V2aUlPRDVUem5xSCtPb0hhZHZvT1AyMGRyTVBlNUlyZzNYQlF6aVcyWER1SFl6anFRUTR3eVNzc2pYVXM1SCt0M0ZXWU1IcHBVbkJITXgvbllJVDVkN09takRiZ0Q5RjZuYTNtNGw3S2RrZVNPM2tURVBYYWZpV2lub2dhZzdiNTJ0YWlaaEwxVFN2QkZtRVphZkZxMkg4a2hRYVpYdWl0Q2V3VDVGQmdWdFBLMGo0eFVIUGZVejNRMjhlYWMxWjEzOURBUDIzZGdraTk0RUM4dmJEUFRRQzk3SFBQU1dqVU5HNXRXS01zYXhBRU1LQzA2NjVYdm8xTnRkMDd3Q0xOZjhRNTZtckVQVnBDeGxJTVZsUWxXUnhNM29BZnBnSWMrOEtDM3JFWFVvZzVnMDZ2dDd6Z1hZOGdySDdoaHdWU2FldXZDMDZZWVJBd3BieWsvVW56ajloTEVaTnMyb3hQUUI5eWMrR25MNnpUZ3E3ckkrK0tESndYMlNQOFNkNll6VHV3NWxWL2tVNmVReFJEMTJvbWZRQVc2Y2FUUjRMaWtZa0JCMUNNT3J2Z1JyL1ZZNzUrTlNCNDBDbmk2YkFEQXRhSyt2eXhWV3BmOU5lS0p4TjJLWVE4UTJ4UEIzSzFzN2Z1aHZXYnIyWHBnVzA0NFZENkRSczBxWG9xS2YxTkZzYUd2S0pjNDdsZVVWM3BwcFAvNVZUS0ZoYUd1b2w0RXNmamY1enlDeVVIbUh0aENoY1loNGhZTFFGK0FGV3N1cTR0MHdKeVdnZHdRVk9aaVYwZWZSSFBvSzUrRTF2ano5d1RKbVZrSVRDOW9Fc3RBc3laU2dFL2RiaWN3S3I4OVlVeEtaSStvd0QyMDVUbTVsbm5tRFJ1UC9Kbnp4WDNnTXRscmNYMFVlc1pkeHlRcVlRdUVXNFI1MXZtUTV4T1p0ZVVkOFNKcnVNbFRVemh0VncvTnE3ZVVCY3FOMi9IVm90Z2ZuZ2lmNjB5S0V0b1V4M1dZT1psVkp1Sk9oOHU1OWZ6U0RQRll0UWdxRFVBR3lHaFFPQXZLcm9YTWNPWVkwcWpuU3RKUi9HM2FQK0p0MXNMVmxHVjhQT3dyLzZPR3NxZXRueUYzVG1UcVpqRU5mblhoNTFveGU5cVZVdzJNNzhFekFKK0lNOGxaMU1CUFE5WldTVmM0SjNtV1NyTEtyTUhSZUE1cWRHb3owT0RSc2FBK3Z3eFhBMmNBTTRxbGZ6QkpBNjU4MW00aHp4SXRRdzVkeHJyQkwzWTZrQ2JVY0Z4bzFTOGp5VjQ0cS8vKzdBU05OdWRaNnhlYU5PU0lVZmZxTW40QTlsSWpGY3RZbjJncEVQQWIzZjdwM2lJQk44SDE0RlVHUTljdDJoUHNMK2NFc1RnVXJSNDd1SlZONG40d3Qvd2dmd3dIdU9uTGQ0eW9ia29meThKdnhTUVRBN3JNcERJYzYwOFNsWkZKZlpZY21iVDB0QUhwUEU4TXJ0UTQyc2lUVU5XeHF2V1pPbXZ1OWYwSlBvUW1nKzZsN3NaV3d5Zmk2UFhreEpud0JyYVVHME1ZRzR6WUhRejNpZ3kvWHNGa3g1dE5ReHc0M3F2STlkVTNmMERkaE9VbEhLam1pMVZBcjJLaXkwSFp3RDhWZUViaGgwT2lEZE1Zc3BvbFFzWWRTd2pDY2plb3dJWE5aVlVQbUwyd3dJa1lobVhLaEdvemRDSjRsUktic2Y0TkJoL1huUW9TOTJOSkVXT1ZPRnMyWWhOOGM1UVpGZUswcFJkQUc0MGhxdkxibW9TQTh4UW16T09FYzd3TGNtZTlKT3NqUENFZ3BDd1VzOUUyRG9oTUhSaFVleUdJTjZURnZyYm55OG5EdWlsc0RwenJINW1TNzZBUG9JRUptSXRTNjdzUUorbmZ3ZGR6bWpQeGNCRUJCQ3cwa1dEd2QwRVpDa05lT0Q3Tk5RaHRCbTdLSEw5bVJ4ajZVMXlXVTJwdXpsSUR0cFl4ZEg0WlBlWEJKa1RHQUpmVXIvb1RDei9peXBZNnVYYVIyVjFkb1B4SllscncyZ2hIMEQ1Z2JyaEZjSXh6WXdpNGEvNGhxVmRmMkRkeEJwNnZHWURqYXZ4TUFBb3krMSszYWlPNlMzVy9RQUtOVlhhZ0R0dnNOdHg3S3MrSEtnbzZVMjFCK1FTWmdJb2dWNUJ0K0JuWGlzZFZmeTlWeVhWKzJQNWZNdXZkcEFqTTFvL0s5WitYbkU0RU9DcnVlK2tjZFlIcUFRMC9ZL09tTmxRNk9JMzNqSC91RDFSYWxQYUhwSkFtMmF2MC94dHBxZFhWS05EcmM5RjJpem8yM1d1N2ZpcmdiVVJGRE5YOWVHR2VZQmhpeXB5WFpmdDJqM2hUdnpFNlBNV0tzb2QvL3JFSUxEa3pCWGZpN3hoMGVGa2ZiMy8xenpQSy9QSTVOazNGYlp5VGw0bXE1QmZCb1ZvcWlQSE80UTRRS1pBbHJRM01kTmZpM294SWp2c00za0FGdjNmZHVmdXJxWVIzUFN3WC9tcEd5L0dGSS9CMk1OUGlOZE9wcFdWYnMvZ2pGM1lIK1FBOWpNaGxBYmh2YXNBSHN0QjBJSmV3MDlpQWttWEhsMS9URWoranZIT3BPR3JQUlFYYlBBRE0rSWcyL09FY1VjcGdQVEl0TXRXNERkcWdmWVZJLys0aEFGV1lqVUdwT1AvVXdOdUI3K0JiS09jQUxiam9iZGd6ZUJRZmpnTlNwMkdPcHh6R0xqNzBWdnE1Y3cyQW9ZRU53S0xVdEpVWDhzR1JveDRkVmEvVE40eEt3YUtjbDlYYXdRUi91TnVzNzAwSGYxN3B5Tm5lenJVZ2FZOWU0TUFEaEVEQnBzSlQ2eTFnREpzMXE2d2x3R2h1VXpHUjdDOGtncGpQeUhXd3N2cmYzeW4xekpFSVJhNWVTeG9MQVpPQ1I5eGJ1enR4RlJKVzlabU1ZZkNGSjBldm05RjJmVm51amU5MlJjNFBsNkE4Ymx1TjhNWnl5SkdaMCtzTlNiLy9EdkFGeEMyQnFsRXNGd2NjV2VBbDZDeUJjUVYxYng0bVFNQlAxSnhxazFFVUFETkxlaWVTMmRVRmJRL2Mva3Z3SXRiWjd0eDBzdDE2dmlxZDUzV3NSbVBUS3YyQUQ4Q1VuaHRQV2c1YVVlZ05wc1lnYXNhdzIrRVZvb2VOS21yVzNNRnRqNzZiWUhKbTVLOWdwQVhaWHNFNVU4RE04WG1WT1NKMUYxV25MeTZuUXVwK2p4NTJiQWIrckNxNnk5V1hsMkIyb1pEaGZEa1c3SDNvWWZULzR4eDVWbmNCdXhNWFAybE5maFVWUWpTU3pTUmJ1WkZFNHZGYXdsenZlWHhhWUtWczhMcHZBYjhJUllGM1pIaVJubTBBRGVOUFdvY3d4U3pOc2VHN05yU0VWWm9IZEtXcWFHRUJ6MU44UHQ3a0ZicWgzTFltQWJtOWkxSUNoSXBMcE01QVM2bXI2T0FQSE13d3puVnk2MVlwQllYOHhaRE4vYStsdDduK3g1ajRiTk9WdGVaOGxqM2hwQUhTeDFWUjh2WkhlYzRBSE85WEZDZGpaOWVSa1NWNjVsak1tWlZ6YWVqMnFGbi9xdDFsdld6TlpFZkh4SzNxT0pySEw2Y3JyMENSek1veDVmMmU4QUxCQjRVR0ZaS0EzdE42RjZJWGQzMkdUSlhHUTdEVGk5ai9kTmNMRjlqQ2JEY1dHS3hvS1RZYmxJd2JMRFJlTDAwTFJjRFBNY1F1WExNaDVZemd0ZmprRksxRFAxaUR6ellZVlp6NU0va1dZUmxScGlnMWh0VlJqVkNrbm0raDFNNUxpRURYT3lIUkVodnpDR3BGWmpIUzBSc0syN28yYXZnZGlsckprYWxXcVBXM0Q5Z213VjM3SEttZk0zRjhZWmoyYXIrdkhGdmYzQjhDUm9INGtESElLOW1yQWcrb3dpRXdOampkOVYrRnNRS1lSOGN6SnJVa2Y3UW9pMllhVzZFVkRacDV6WWxxaVl0dVhPVEhrNGZBY1o3cUJiZExEaUpxMFdOVjFsMitIbnRrMW1NV3Z4clltYzhrSXg4RzNyVzM2SjZSYTRsTHJUT0NnaU9paG1vdytZbnpVVDE5amJWMkIzUldxU0h5eGtobWdzQnFNWVd2T2NVb20xakRRNDM2K2ZjYnUzeGYyYmJlcVUvY2ErQzRET0tFK2UzcXZtZU1xVzNBeGVqZnpCUkZWY3dWWVBxNEwwQVBTV1dvSnUrNVVZWDRxZzVVNllUaW9xUUdQRzlYcm51Wi9Ca3h1WXBlNkxpODcrMThFc2t5UVcvdUErdWsycnBIcHI2aHV0MlRsVmJLZ1drRnB4K0FaZmZ3ZWl3MitWaXR0a0V5Zi9pZmluUy8wSXRSTDJKcTN0UU9jeFBhV08yeHJHNjhHZEZvVXBaZ0ZYYVAyd1lWdFJjNnhZQ2ZJMUNhQnF5V3BnNGJ4OE9IQlF3c1Y0WFdNaWJaWjBMWWpXRXkySXhRMW1acmYxL1VOYllDSnBsV3Uzblo0V3BvZElHVkEwNWQrUldTUytFVDl0SDNSZkdHbU5JMWNJWTdldlpacTdvK2EwYmpqeWdwbVIzbVZmYWxrVC9TWkdUMjdROFFHYWx3R2xET1M5VkhDeUZBSUwwYTFRN0ppVzNzYXo5Z3FZOGxxS3luRnJQQ3p4a1U0U0lmTGM5VmZDSTVlZGdSaERYczBlZE85OTJuaFRLSHJpUkVQMU5KQzZTUk9NZ1EweE81a05OWk9oTU9JVDk5QVVFbGJ4cWVaRjhBM3hyZkRKc1d0RG5VZW5BSGRZV1N3QWJZakZxUVorRDVnaTNoTks4Q1N4VTlpNmY2Q2xMOUlHbGoxT1BNUUFzcjg0WUc2aWpzSnBDYUdXajc1YzN5T1pLQkI5bU5wUU5QVUtrSzBENndnTEg4TUdveVJ4VFg2WTA1UTRBbllOWE1ad1hNNGVpai85V3BzTS85Q29SbkZRWEdSNk1FYVkrRlh2WEVPM1JPMEphU3RrNk9YdUhWQVRISkUrMVcrVFUzYlNaMmtzTXRxak8wemZTSkNkQnY3eTJkOERNeDZUZlZtZTNxMFpwVEtNTXU0WUwvdDdjaVROdGREa3dQb2doM0Nuang3cWswOFNId2YrZGtzWjdNMnZDT2xmc0YwaFE2SjRlaFBDYUhUTnJNL3pCU09xRDgzZEJFQkNXL0YvTEVtZWgwbk9IZDdvVmwzL1FvLzlHVURra2JqN3l6KzljdnZ1K2REQXR4OE56Q0RUUDRpS2Radms5TVdpaXp2dElMTGVweXNmbFN2VExGQlozN1JMd2lyaXF5UnhZdi96cmdGZC85WFZIaC9PbXpCdkRYNG1pdE1SL2xVYXZzMlZ4NmNSOTRsekFrcGxtM0lSTnk0VEZmdTQ3dHVZczlFUVBJUFZ0YTRQNjR0VitzWjduM3VlZDNjZ0V4MllLK1FMNSt4bXM2b3NrOHFRYlR5dUtWR2RhWDlGUXFrNnFmRG5UNXlreGswVks3S1o2MmI2RE5EVWZRbHFHSHhTTUt2MVAwWE41QnFNZUtHMVA0V3A1UWZaRFVDRWxkcHBvWDBVNnNzMmpJa28yWHBVUktDSWhmYU9xTFBmU2hkdFMzN1pyVCtqRlJTSDJ4WVZWMXJtVC9NQnRSUWh4aU80TVEzaUFHbGFaaSs5UFdCRUlYT1ZudTlqTjFmOTIxbFdMWmt5OWJxYk0zSjJNQUFJOWptdUF4M2d5b0VVYTZQMml2czBFZU52L09SK0FYNnE1U1c2bDVIYW9GdVM2anI2eWc5bGltdStQMEtZS3pmTVhXY1FTZlRYenBPektFS3B3STNZR1hacFNTeTJMVGxNZ2ZtRkEzQ0Y2UjVjOXhXRXRSdUNnMlpQVVEyTmI2ZFJGVE5kNFRmR0hybkVXU0tIUHVSeWlKU0RBWitLWDBWeG1TSGpHUGJRVExWcHFpeGlhMnV5aFEzOTRnQk10N0MzWkFteG4vREpTK2wxZkJzQW8yRWlyL0Mwakc5Y3NkNCsvdHAxMnBQYy9CVkpHYUs5bWZ2cjdNL0NlenRybUNPNXFZMDZFZGk0eEFHdGlFaG5XQWJ6THkyVkV5YXpFMUo1blBtZ1U0UnBXNFNhMFRuT1Q2dzVsZ3QzL3RNcFJPaWdISG1leEJHQU1ZMG1kY0RiRHhXSXo0MU5nZEQ2b3hnSHNKUmdyNVJuVDZ3WkFrVE9jU3RVNE5NT1FOZW1TTzdneEdhaGRFc0MrTlJWR3hNVWhRbW1NMGxsV1JiYm1GR0h6RXFMTTRJdzBINzU3N0t5bytaZisyY1VGSU93OTNnRVkxNzF2UWFNMEhMd3BqcGRSUjZKejdWMGNrRTdYellKMFRtWTl6bkxkemt2YTB2TnJBR0dUNVNVWjV1YUhEa2NHdkkweVNwd2thc0VnWlBNc2VZY3U4NXc4SFBkU05pKzRUNkE4M2lBd0RieGdlRmNCMVpNMmlHWHpGY0VPVWxZVnJFY2thT3lvZGZ2YVlTUTdHdUI0SVNFMG5ZSmMxNVgvMWNpRFRQYlBDZ1lKSzU1VmtFb3I0THZ6TDlTMldEeTR4ais2Rk9xVnlUQUMyWk5vd2hlZWVTSTVoQS8wMmw4VVlrdjRuazlpYVZuK2tDVkVVc3RnazVIeXErZ0ptNlI5dkczcmh1TTkwNGhlL2hGbU5RYVVJQVRCMXkzdncrT214UDRYNVlpNkE1STVqSnVmSENqRjkrQUdOd25FbGxaalVjbzZYaHNPNVQ1K1IzeXh6NXlMVk9uQW4wenVTKzZ6ZGowblRKYkVaQ2JYSmR0cGZZWmZDZUNPcUpIb0UydlBQRlM2ZVJMaklKbEc2OVg5M25mUjBteFNGWHpwMVpjMGx0L1ZhZkRhSW1oVU10Ym5xV1ZiOU00bkdOUUxONjhCSFA3QVI4SWw5ZGtjeHptQnY4UENabHc5Z3VZMGx1cmJCc21OWWx3SlpzQS9CMTUvSGZrYmpid1BkZGFWZWNscy9lbG1ESE5XMnI0Y3JBeDQzZmVOa2ZSd3NhTnEveXlKMGQvcDVoWjZBWmFqejdEQmZVb2swWlU2MmdDeno3eDhlVmZKVEtBOElXbjQ1dklOTFNNMXErSEY5Q1Y5cUYzelA2TWwyMWtQUEwzQ1h6a3VZVWxuU3FUK0lqNHRJL29kNUt3SXMrdERhakRzNjRvd043dE9BZDZldWNHeitLZk8yNmlOY0JGcGJXQTU3MzJiQk5XTzRrSE5wcjlEOTU1TDYxYnZIQ0YvbXdTcno2ZVFhRGpmREVBTnFHTWtGYytOR3hwS1p6Q0Qyc2ovSnJIZCt6bFBROEl6N1ErMkpWSWlWQ3VDS29LL2hsQUVIenZrL1BpcTNtUkwxclQvZkVoOWhvVDVHSm1lWXN3ZzFvdGlLeWRpekovZlMyU2VLSFZ1NlozSkVIamlXOE5hVFFnUDV4ZEJsaThuQzU3WGlOOWhycXVCdTk5aG45enF3bzkyK1BNMkpYdHBlVlpTMFBkcVI1bUR5RHJlTU10RXdzK0Nwd2FSeXl6b1l0ZmN2dDlQSklXMGZKVk5OaS9GRnlSc2VhN3BlTHZKckwrNWI0R09YSjh0QXIrQVRrOWY4S21pSXNSaHFSeTB2Rnp3UlYzWjVkWjNRcUlVOEpRL3VRcGtKYmpNVU1GajJGOXNDRmVhQmpJNCtmTC9vTjMrTFFnakk0enVBZlErM0lQSVBGUUJjY2YwY2xKcHNmcG5CeEQ4NGF0d3R1cGtHcUt2ckg3Y0dObC9RY1djU2k2d2NWRE1MNmxqT2dZYm8rMkJPQVdOTmpsVUJQaXlpdFVBd2JuaEZ2TGJucXc0MmtSM1lwMmt2MmRNZURkY0dPWDVrVDRTNk00NEtIRUIvU3BDZmw3eGdzVXZzK0pOWTlHM08yWC82RkV0OUZ5QW41N2xyYml1K3RsODNzQ3ltU3ZxOWVaYmU5bWNoTDdNVGYvVGE3OGU4MHpTZjBoWVk1ZVVVNytmZjE0anY3WHk4cWp6Znp6enZhSm5ySWR2RmI1QkxXS2NXR3k1L3c3K3ZWMmN2SWZ3SHFkVEIrUnVKSzVvajltYnQwSHk5NEFtak1qandZTlpsTlM2dWl5eE5ud055dDNnZHJlTGI2NHAvMyswOG5Ya2I5MkxUa2tSZ0ZPd2sxb0dFVmxsY09qNWx2MWhmQVp5d0Rvd3MwOTQ0VTh2VUZ3K0EvbnVWcS9VQ3lnc3JtV0lCbkh5VTAxZDBYSlB3cmlFT3Z4L0lTSzZQazR5MncwZ21valpzN2xVOFR0YWtCQWRuZTR2L2FOeG1NcEs0VmNHTXA3c2kweXFzaW9sWFJ1T2kxWjFQN1NxRDNabXAwQ1djeUs0VWJtcDJTWGlYdUk1bkdMQ2llRkhLSE5SSWxjWTNQeXMyZHdNVFlDYXFseVdTSVR3cjJvR1h2eVUzaDFQZjhlUTN3MWJuRDdpbG9jVmpZRGtjWFIzT28xQlhnTUxUVWpOdzJ4TVZ3anRwOTlOaFNWYzVhSVdyRFFUNURIUEt0Q3RoZUJQNHpIY3c0ZHoyZVJkVE1hbWhsSGh0ZmdxSkpISTdOR0RVdzFYTDh2c1NlU0h5S3FEdHFvQW1yUXFzWXd2d2k3SFczb2pXeWhJYTVvejV4SlRhcTE0TkF6RkxqVkxSMTJyUk5VUTZ4b2hEbnJXRmI1Ykc5eWY4YUNEOGQ1cGhvYWNrY05KcCtEdzNEdWUzUk0rNVJpZDdFdUlnc253Z3BYMHJVV2gvbnFQdEJ5TWhNWlo2OU5wZ3ZSVEtaNjJWaVorUTdEcDVyNEswZDdFZkp1aXkwNkt1SVlhdVJoNUVjcmhkdDJRcFRTMWsxQXNjRUh2YXBOYlUzSEwxRjJURnlSMzNXeGI1TXZINWlac3JuM1NEY3N4bG5uc2hPOFBMd21kR04rcGFXblF1T1J0WkdYMzd1aEZUNjRTZXVQc3g4VU9va1k2T044NVdkUTFka2k1ekVyc0pHYXpjQk9kZFdKRUtxTlBpSnBzTUQxR3JWTHJWWStBT2RQV1FuZVR5eVAxaFJYL2xNTTRab2dHR09oWXVBZHI3Ri9ET2lBb2MrK2NuNXZsZjB6a01VSjQwWjFybGd2OUJlbFBxVk9weEtlT3B6S2RGOG1hSysxVnYyM01POWsvOCtxcExveHJJR0gyRURRbG5HbUg4Q0QzMUc4UXFseVFJY3BtUjVid21TVnc5L05zNklIZ3VsQ1JlaHZaLytWck02MEN1L3IzQW9udEZmcmxqZXc3NHNrWWUydXluN0pLUXRGUUJRUko5cnlHaWMvelFPc2JTNHNjVUJjdEE4Y1BUb1EzeDZaQlF1NkRQdTVtMWJuQ3RQOFRsbExZQTBVVFFOVnF6YTVuZmV3M01vcHkxR1BVd0c1anNsME9WWG5pUG1BY21McU81SEc4SHYzblNMZWNFOW9PalBEWGNzVHhvQ0J4WXl6QmRqNHdtbnlFVjRrdkZEdW5pcFM4U1NrdmRhTW5UQk45YnJIVVI4eGRtbUVBcC9QZHFrOXVleHRwMXQrSnJ0WHdwTi9NRzJ3L3FoUk1wU054UTF1aGcva0tPMzBlUS9GeUhVRGtXSFQ4VjZnR1JVNERoRE14WnU3eFhpajlVaTZqbHBXbVFDcUpnM0ZrT1RxM1dLbmVDUllaeEJYTU5BVkxRZ0hYU0NHU3FOZGplYlk5NG95SXBWak1ZZWhBaUZ4L3RxekJYRkhaYUw1UGVlRDc0clc1T3lzRm9VWFk4c2ViVVpsZUZUVWEvK3pCS1ZURkRvcFRSZVhOdVpxNDdRamtXbnhqaXJDb21tTzRML0dyRnRWVjIxRXBNeXc4d3lUaEw1WTU5ZDg4eHRseDFnMXR0U0lDRHdub2Y2bHQvNnpsaVB6Z1ZVTDhqV0JqQzBvMkQ2S2crak51VGhrQWxhREpzcS9BRzJhS0EvL0E3NmF2dzJLTnF0djIyM1ArV3EzU3RSREROS0ZGZ3RzRnVrWXQxR0ZEV29vRlZYaXRhTmhiM1JDeUppNGNNZU5qUk9pUEVEYjRrK0czK2hEOHRzZys1aGhtU2MvOHQySlRTd1lvQ3pBSTc1ZG9xOFFUSGUrRS9UdzBSUVNVRGxVKzZ1QmVOTjNoNmpKR1gvbUg4b2owaTNjYUNOc2p2VG5vaDczQnR5WnBzZmxITHE2QWZ3Sk5DRFg0Uzk4aDQrcENPaEdLRGhWM3J0a0tITWEzRUc0Sjl5OHpGV0k0VXNmTnpDL1JsNW1pZE5uN2d3b045ajIzSEdDUVErT0FacFRUUE1kaVZvdzc0MGdJeXVFdGQwcVZ4TXlOWGhIY251WFJLZHc1d0RVU0wzNThrdGpNWG1Ba3ZJQjczQkxhMXZmRjlCQVVaSW5QWUppd3hxRldRUUJWazdnUUg0b2pmVVEvS0VqbitBL1dSNkVFZTRDdGJwb0xlMW16SGthamdUSW9FMFNMREhWYXVLaHJxMTJ6ckFYQkdiUFBXS0N0NERHZWRxM0p5R1JibVBGVzMyYkU3VDIwKzczQmF0Vi9xUWhoQldmV0JGSGZoWVdYakFMdHMzOEZlbW5vVCs5Ym4xakRCTWNVTW1ZZ1NjMGU3R1FqdjJNVUJ3TFU4aW9uQ3BnVitRcmhnN2lVSWZVWTZKRnhSMFkrWlRDUE0rclZ1cTBHTkx5SlhYNm5yVVR0OEh6RkJSWTFFL0ZJbTJFZVZBOU5jWHJqN1M2WVlJQ2hWUUNXci9tMmZZVWpDNGowWExrelo4R0NTTGZta1czUEIveHErbmxYc0tWQk9qN3ZUdnFLQ09NcTdadHFyM2NRK044Z0JuUGFBcHMrb0d3V09rYnV4blJZai94L1dqaURjbFZyczIyeE1LNHFBckUxWnRrMTQ1NmtpSnJpdzZhYmtOZVJIb2dhUFJCZ2JnRjlaOGkvdGJ6V0VMTjRDdmJxdHJxVjlUdEdTbm1QUzJGOWtxT0lCYWF6SFlhSjliaTNBb0RCdmxaYXNNbHV4dDBCRFhmaHAwMkpuNDExYVZ0NlM0VFVCOFpnRkRrSTZUUDZnd1BZODV3K29VUVNzakllWFZtaW5yd0lkSzJaQWF3YjhTZTZYT0piT2FsaVF4SFNybkFlT05ETHVDbkZlaklicDRZRHRCY1FDd01zWWlSWmZIZWZ1RUpxSmN3S1RUSjhzeDVoakhtSkkxc1BGSE9yNlc5QWhaMk5Bb2QzOG1uTFFrMWdPejJMQ0FvaG9RYmdNYlVLOVJNRUEzTGtpRjdTcjl0TFpwNmxrY2lJR2hFMlY1NDZ3M01hbTUzVnRWa0diQjl3MFlrMlhpUm5DbWJweG1IcjJrNGVTQzBSdU5iak5zVWZESWZjOERadlJ2Z1VEZTFJbEtkWlR6Y1Q0WkdFYjUzZHA4VnRzb1pseVh6TEhPZEFic3AxTFBUVmFIdkxBMEdZREZNYkFXL1dVQmZVQWRId3FMRkFWKzN1SHZZV3JDZmhVT1IyaTg5cXZDQm9PYjQ4dXNBR2RjRjJNNGFLbjc5ay80M1d6QloreFIxTDB1WmZpYTcwWFA5c29RUmVldWhaaVVuWEZERzFUOC9PWE5tc3NUU25ZTysza1ZMQWdlaVk3MTl1RHdMOUZReWNnTFBlc3NOaWhNWmJBS0c3cXdQWnlHMTFHMStaQTNqQVgyeWRkcFlmbWFLQmxtZmNLL1YwbXdJUlVEQzBuSlNPUFVsMktCOGgxM0Y0ZGxWWmlSaGRHWTVmYXJ3TitmOWhFYjFjUmk0MVpjR0RuNlhlOU1NU1RPWTgxVUxKeVhJSFNXRklRSHN0VllMaUpFaVVqa3RsSGlHam50TjUvYnRCOEZ1K3ZwMjh6bDJmWlhOK2RKRHlONkVYaFMrMHl6cXBsL0xTSk5FVVZ4bXU3QnNOZGpBWTBqVnNBaGtOdXVZMEUxRzQ4ZWoyNW1TdCswMHlQYlE0U1JDVmtJd2I2SVN2WXRtSlJQejladDVkazc2YmxmK2xKd0FQSDVLREYrdkhBbUFDTG9DZEcyQWRpaTZkT0huTkpuVG1adG9PR084UTFqeTF2ZU13NmdiTEZUb1FtZkphN25UN0FsODltUmJSa1paUXhKVEtnSzVLYzlJTnptVEpGcDB0cEFQek5teUwvRjA4YlgzbmhDdW1NL2NSLzJSUG45ZW1aM1Zsam9rdHRaRDF6VldYbFVJcUVVN1NMazVJMGxGUlUwQWNFTlhCWWF6TmFWenNWSEEvc0QzbzlobTQyd2JISVJiL0JCUVRLekFpOHMzK2JNdHBPT1pnTGRRekNZUGZYM1VVeEtkMVdZVmtHSDdsaC9SQkJnTVpad1h6VTkrR1l4ZEJxbEdzMExQK0RaNWcyQldOaDZGQWNSOTQ0QitLL0pUV0kzdDlZeVZ5UmhsUDRDQ29Vay9tbUY3K3IycGlsVkJqeFhCSEZhQmZCdHI5aGJWbjJ6RHVJMGtFT0cza0J4OENHZFBPalgxcGgxUE9PWkpVTzFKRUdHMGp6VXkydEs0WDBDZ1ZOWWhta3FxUXlzUk50S3VQZENKcUszV1c1N2thVjE3dlhnaXlQcmw0S0VFV2dpR0YxZXVJNFFrU0ZIRmYwVERyb1FpTE5LSmlMYmRoSDBZQmhyaVJOQ0hQeFNxSm1OTm9rZXRhaW9vaHFNZ2xoNndMdEVHV1NNMUVaYlFnNzJoMFVKQUlQVkZDQUpPVGhwUUdHZEtmRm92Y3dFZWlCdVpITjJPYjR1Vk03K2d3Wkx6MUQ5RTd0YTRSbU1aMjRPQkJBZzdFaDZkTFhHb2ZaNFUyVEZPQ1FNS2p3aFZja2pyeWRSUytZYXFDdzFrWXQ2VWV4dXpiTkVEeVlMVFpuclkxUHpzSFpKVDRVK2F3TzJ4bHFUU1l1Nm4vVTI5TzJ3UFhnR09FS0RNU3ErelRVdHljOCs2aUxwMGl2YXY0Rkt4K3h4Vnk0RnhoSUYvcHVjVkRxcHNWZTJqRk9mZFpoVHpMejJRanR6dnNUQ3ZEUFU3YnpESDJlWFZLVVY5VForcUZ0YVNTeG5ZZ1lkWEt3VnJlSWd2V2hUOWVHREIyT3ZuV3lQTGZJSUlmTm5mSXhVOG5XN01iY0gwNW5obHNZdGFXOUVaUnN4V2NLZEVxSW5xMURpWlBLQ3o3aUdtQVU5L2Njbm5RdWQycE5nSUdGWU9UQVdqaElyZDYzYVBEZ2ZqOC9zZGxENGwrVVRsY3hUSTlqYmFNcXFOMGdReFNIczYwSUFjVzNjSDRwM1YxYVNjaVRLQjI5TDF0ejJlVVFoUmlUZ1R2bXFjK3NHdEJOaDRreTBtUUpHc2R5Y0JSRVArZkFhU3MxRVJFRFZvNWd2Z2k1K2FDTjdORUN3MzBvd2JDYzFtU3BqaWFoeU5Wd0pkMWppR2d6U3dmVHB6ZjJjNVhKdkcvZzFuMGZIODhLSE5uZit1N1ppUk1sWHVlU0lzbG9KQlV0VzllenZzeDlncmZzWC9GTnhuYnhVMUx2ZzBoTHhpeHlwSEtHRkFhUHUweENEOG9EVGVGU3lmUlQ2czgxMDlHTVVaTDhtMnhYcDhYMmRwUENXV2RYODRpZ2E0QnJUbE9mcW94NHNocUVnaC9IdDRxUnN0NTJjQTF4T0lVdU94Z2ZVaXZwNnY1ZjhJVnlhcnlFZHBWazcyRVJBd2RUNGFvWTF1c0JnbVArMG0wNlEyMTZIL251YnROWXhIYU9JWWpjYWNoM0E4RXovemMwS2NTaGhlbDBIQ1lqRnNBMEZqWXF5SjVaVUgxYVp3Myt6V0MwaExwTTZHRGZjQWRuOWZxMm9yUG1aYlc2WFhyZitLcmM5UnR2SUk1amVEM2RGb1QxS3daSnd4ZlVNdmM1S0xmbjhyUk9XMjNKdzg5c0oyYTVkcEIzcVdEVUJXRjJpWDhPQ3VLcHJIb3NKMm1mbEJSK1dxczg2VnZnSS9YTW5zcWI5NytWbEtkUFZ5c2N6UGo4Smh6ZitXQ3ZHQkhpakFxWWxhdmJGNjBzb01XbEhidktUK1NjdmhwcmdlVGxuNTF4WDBzRitFYWRjL2wyczJhNUJna1ZiSFl5ejBFODVwMExzdHFIK2dFR2lSODRuQlJSRkluOGhMU1pyR3dxalozRTI5Y3VHaSs1WjVicDdFTThNV0ZhOXNzUy92eTRWckRmRUNTdjdEU1U4NERhUDBzWEkzQXA0bFd6blE2NW5Rb1RLUldVMzBnZDdObjhab3dVdkdJeDRhcXlYR3dtQS9QQjRxTjhtc0pVT0RlelVIRWwwVlA5dW8rY1o4dlBGb2RTSUI0QzdsUVlqRUZqOHl1NDlDMktJVjNxeE1GWVRldkc4S3FBcjBUUGxrYnpISG5UcERwdnB6emlBaU5GaDh4aVQ3Qy9UaXlIMEVndVV3NHZ4QWdwbkUyN1dJeXBWK3VGTjJ6Vzd4bmlGL243NXRyczlJSjVhbUIxelhYWjFMRmtKNkdiUy9kRm9remw0Y2MybWFtVndoTDRYVTBBdjVnRFdBbCthRVdoQVA3dDJWSXdVK0VwdmZPUERjTEFTWDdIN2xacFhBMlhRZmJTbEQ0cVUxOE5mZk5Qb0FLTU5TY2NCZk85WVZWZ21sVzRSeWRCcWZIQVY3K2hyWjg0V0pHaG82Yk5UMFlNaHh4TGRPeC9kd0dqMG95YWs5YUFrTko4bFJKelV1QThzUitmUHlpeVRnVUhpbzUrUHArWWFLbEhyaFI0MWpZNU5FU1BTM3grelRNZTBTMkhuTE9LQ09RUHBkeEt5dmlCdmRIckNEUnFPK2w5NkhoaE5CTFhXdjR5RU11RVVZbzhrWG5ZSk04b0lnVk00WEoreFhPZXY0WWJXZXFzdmdxMGxtdzQvUGlZcjlzWUx0K1c1RUF1WVNGbkpFYW44Q3dKd2J0QVNCZkxCQnBKWmlSUG9yL2FDSkJac00rTWh2UzdaZXB5SHZVOG01V1NtYVpueHVMdHM4b2psNktrUzhvU0FIa3E1R1dsQ0IvTmdKNVczck8yQ2oxTUs3YWh4c0NyYlRUM2EwVi9RUUgrc0VyeFY0WFVXREh4MGtrRnkyNWJQbUJNQlE2QlUzSG9IaGhZY0pCOUpoUDZOWFVXS3huRTByYVhIQjZVOUtIcFdkUUNRSTcycWV2cDVmTXpjbStBdkM4NXJzeW5WUWhydURBOWZwOUNPZTdONTZjZzFVS0dTYXM4OXZyTitXbEdMWVR3aTVXKzB4WWRLRUd0R0NlTkp3WEtEVTBYcVU1dVFZbldzTXdURU5MR3RiUU12b0dqSUZJRU16Q1JhbDRybkJBZzdEL0NTbjhNc0N2UytGREpKQXpvaWlvSkVoWkpnQXA5bjIrMVl6bnI3SCs2ZVQ0WWtKOU1wajYwSW1jVzRpNGlIRExuOVJ5ZEI4ZHgzUVltM3JzWDZuNFZSclpEc1lLNkRDR3drd2Q1bjMvSU5GRXBrMTZmWXBQNkp0TVFwcUVNemNPZlFHQUhYQlRFR3p1TEowM0dZUUw5Ym1WMi83RXhEbFJmK1V2ZjFzTTJmclJ0Q1dtYWwxMnBNZ3RvbnZTQ3RSNG4xQ0xVWlJkVEhESFAxT3R3cWQrcmNkbGF2bktqVUIvT1lYUUhVSnpwTnlGb0twUUsrMk9nckVLcEd5SWdJQmduMnk5UUhuVEppaFpPcEV2T0tJb0hBTUdBWEhtajIxTHltMzlNYmlvdzRJRis3N3hOdWV3emlOVkJ4cjZLRDVlKzlIelpTQklsVWEvQW1zREZKRlhleXJRYWtSM0Z3b3dUR2NBREpIY0VmaEdrWFlOR1NZbzRkaDRieHdMTSsyOHhqaXFrZG4wLzNSNFVFa3ZjQnJCZm4vU3pCYzFYaEtNMlZQbEpnS1NvcmpEYWM5NlYyVW5RWVhsMS95WlBUNERWZWxnTytzb01qZXhYd1lPNThWTGw1eEluUVVaSThqYzNIMkNQbkNOYjlYMDVuT3hJeTRNbGVjYXNUcUdLNnMyYXo0UmpwRjJjUVAyRzI4Uis3d0RQc1pEWkMva1d0amRvSEM3U3BkUG1xUXJVQWhNd0tWdXhDbVlUaUQ5cS9PN0dIdFp2UFNOMENBVVFOL3J5bVhaTm5pWUxsSkRFNzBic2s2WHhzaDRrRE9keGU3QTJ3bzdQOUY1WXZxcVJESTZicmY3OXlQQ1NwNEkwalZvTzRZbkxZdFg1bnpzcFI1V0I0QUtPWXRSMXVqWGJPUXBQeVlEdmZSRTNGTjV6dzBpN3JlZWhkaTd5VjBZRFJLUmxsR0NHUms1WXorVXYxZllsMlp3cm5Hc3FzamdBVm8weEVVYmE4b2hqYU5NSk53VHdaQS93QkRXRlNDcGcxZVVIOE1ZTDJ6ZGlveFJUcWdHUXJEWnhReU56eUJKUFhaRjArb3hJVEpBYmo3b05DNUp3Z0RNVUphTTVHcWxHQ1djLy9LQ0lySSthY2xFZTRJQTB1enY3Y3VqNkdDZGFKT05waTEzTzU0NHZidElIQkYrQStKZURGVVFOeTYxR2tpM3J0eVE0YVV5d242cnUzMTQvZGtHaVA4SXdqbzBKLzJUeHM0OVprd0VsNG14K2lZVVVPNTVJNnBKelU0UCs3UlJzK0RYWmt5S1VZWnFWV3JQRjRJOTRtNFd4MXRYZUU3NG85R3VYOTc3eXZKL2prZGFrOCtBbW9IVmpJMTVWK1d3QmRBUkZWMklQaXJKZ1ZNZHNnMVBlejJWTkhxYTdFSFdkVGtsM1hUY3lqRzlCaXVlV0Z2UWZYSThhV1NrdXVSbXFpL0hVdXpxeXZMSmZOZnMwdHhNcWxkWVlmbFdCMUJTMzFXa3VQSkdHd1hVQ3BqaVFTa3RrdUJNV3dIalNrUXhlZWhxdzFLZ3owVHJ6bTdRYnRneGlFUERWbVdDTkNBZUNmUk9UcGhkMVpOT2h6THk2WGZKeUc2WGdkNU1DQVp3NHhpZTBTajVBblkxL2FrRGdOUzlZRmwzWTA2dmQ2RkFzZzJnVlFKdHpHN0xWcTFPSDJmcmJYTkhXSC9OWTg5Tk5aNFFVU0pxTDJ5RWNHQURiVDM4WDBiR2R1a3FZbFNvbGlLT2NzU1R1cWhjYWVtVWVZTExvSTgrTVpvcjJSeFhUUlRoRjFMckhmcWYvNUxjTEFqZGw0RUVSZ1V5c1lTMmdlRSt5RmRhc1U5MVVnVURzYzJjU1ExWm9UOSt1TE93ZGdBbWlmd1FxRjAyOElOYzJJUUVEZlRtVXczZVp4dno3VWQxejN4YzFQUWZlQ3ZmS3NCOWpPaFJqN3JGeWI5WGNEV0xjWWowYkJ5b3N5Y2hNZXpNTFZrRmlZY2RCQlF0dkk2SzBLUnVPWlFIMmtCc1lISmFYVGt1cDhGMGVJaE8xL0djSXdXS3ByMm1vdUI3ZzVUVURKTnZPUlhQWGEvbVU4YmgyN1RBWllCZTJzS3g0TlN2NU9qbkhJV0QyUnV5c0N6QmxVZmVOWGhEZDJqeG5Ib1VsaGVKM2pCQXB6VVJ5MGZ3bTJGd3dzU1UwY2FRR2wwS3Y4aG9wUlFFMjExTm52dExSc21DTnJoaHBFRG9OaVpFekQyUWRKV0tiUlJXbmFGZWRYSEFFTFNOMHQwYmZzQ3NNZjBrdGZCb1hCb05BK25aTjkrcFNsbXV6c3BGZXZtc3FxY01sbHp6dmt5WHJ6b0ErUnlvMWVQWHBkR09vSnZoeXJ1K0VCUnNtT3A3TVhaMHZOVU1VcUhMVW9LZ2xnMXA3M3NXZVptUGMrS0F3MHBFMnpJc0ZGRTVINDE5Mkt3RHZEeGR4RVlvREJETlpqYmcyYm1BRFRlVUtLNTdJUEQ0ZlRZRjRjNkVuWHgvdGVZTU9SQkR0SWhQSm5laVpueTdOdi96RytZbWVrSUtDb3hyNmthdUUyYlp0Qkx1ZmV0TkcwQnRCWTdmKy9JbVV5cE1CdmRXdS9RN3ZUTVJ6dzVhUUdaV3VjMVYwSEVzSXRGWU1JQm5vS0daMHhjYXJiYS9UWVpxNTBrQ2FmbEZ5c1lqQTRFREtIcUdkcFlXZEtZbW0rYTdUQURtVzM1eWZuT1lwWllya3BWRXRpcUYwRXVqSTAwYWVwbE5zMmsrcXlGWk5lRTNDRFBMOVA2YjRQUS9rYXRhSGtWcExTRVZHSzdFWDZyQWE3SVZOcnZadEZ2T0E2b2tLdkJnTXRGREFHWk94ODhNZUJjSjhBUjNBZ1VVZUl6bkFONnRqQ1VpcEdEWk9ObTFGaldKcDRBM1FJelNhSU9tWjdEdkYveXNZWWJNL2ZGRE9WMGpudEFqUmRhcHhKeEwwZVRocEVoS09qQ0REcTJrcyszR3J3eHFJRktMZTFXZE96SUk4WElPUEdud3k2TEtYVmZwU0RPVEVmYVJzR3VqaHBTNGhCSXNNT3FIYmwxNlBKeGM0RWthVnU5d3BFWWxGLzg0TlN2NVp1bTRkck1mcDl5WGJ6ekFPSnFxUzRZa0k0Y0JyRnJDN2JNUGlDZmdJM25OWkFxa2szUU9acVIreXlxeCtuRFFLQkJCWjdRS3JmR01DTCtYcHFGYUJKVTB3cGtCZEFoYlI0aEpzbVQ1YXlubHZrb3VveG0vTmpENW9lNkJ6VklPOXVrdE0rLzVkRUM1UDd2WnZhcm11Ty9sS1h6NHNCYWJWUElBVHVLVHJ3YkpQOFhVa2RNNnVFY3RIS1hJQ1VKR2phWklXUmJacDhjenF1UVlmWTZ5bkJVQ2ZJVStnRzZ3cVNJQm1ZSW05cFpwWGRhTDEyMVY3cTBWakRqbVFuWHZNZTd5c29FWm5aTDE1QjBTcHhTMWpqZDgzdU5JT0tad3U1TVB6ZzJOaE94M3hNT1BZd0VuMkNVemJTcndBczVPQXRyejNHQWFVa0pPVTc0WHdqYVlVbUdKZFpCUzFOSlZrR1lyVG9JTkxLRGp4Y3VJbHlmVnNLUVNHL0c0RHlpTzJTbFF2SjBkME90MXVPRzVJRlNBa3ErUFJWTWdWTUR2T0lKTWRxamVDRktVR1JXQlc5d2lnWXZjYlU3Q1FMLzdtZUYyS1pBYVdsKzR5OXVob3dBWDdlbG9nQXZJdEFBeG8yK1NGeEdSc0hHRVc5Qm5obFR1V2lnWXhSY25WVUJSUUhWNDFMVitGcjVDSllWN3NIZmV5d3N3eDRYTXRVeDZFa0JoUitxOEFYWFVBOHVQSjczUGI0OWk5S0c5Zk9sanZYZXlGajlpeGdibzZDY2JBSjdXSFdxS0h5L2grWWpCd3A2VmNON004OUZHelEwNHFiclF0Z3JPRnliZzNnUVJUWUc1eG43M0Fya2ZRV2pDSlJPd3kzSjM4RHgvRDdqT2E2QkJOc2l0RXcxd0dxNzgwRUVpb09lRCtaR3AySjY2QURpVkdNYXlpSFl1Y01rOG5USzJ6elQ5Q25FcmFBazk1a1FqeTRrMEdSRWxMTDVZQUtMUUVySjVycDFlYXk5TzRGYjZ5SkdtOVU0RmFNd1BHeHRLRDZvZElJSEtvV25oS28xVThLSXBGQytNVm41OVpYbWM3WlRCWmZzZzZGUThXMTBZZlRyNHUwbllycEhaYloxalhpTG1vb0YwY09tMCttUG5KQlhRdGVwYzduMEJxT2lwTkNxSTZ5eWxvVGVSU2hOS0gwNEZJbzBnY01rMEgveFRoeU40cFBBV2pERGtFcDNsTk5QUk5WZnBNSTQ0Q1dSbFJnVmlQNjRlSzBKU1JwMFdVdkNXWXVtbFcvYzU4VmN6L3lNd1ZjVzVvWWI5KzI2VEVod3ZieGlOZzQ4aGwxVkkxVVhUVS8vRXRhK0JNS25HVWl2Y3RmTDV3SU5ERDBnaVFMMWlwdDZVN0M5Y2Q0K2xncVkybE1VWjAyVXY2UHJzK1pFWmVyN1pmV0JYVmdobGZPT3JDbHdzb09GS3pXRWZ6NlJadTFlQ3MrSzhmTHZrdHM1K0JYMGd5ckZZdmUwQzNxSHJuNVUvT2g2RC9DaWhtV0lyWTdIVVpSaEpheGRlK3RsZHU2YWRZSitMZVh1cFF3MFhFeEMzNlJFVGRORnhjcTlnbE11NGNOUVNYOWNxUi9HUVlwK0l4VWtJY05HV1ZVN1p0R2E2UDNYQXlvZFJ0MFhlUzNUcDAxQW5DaDBaYlVoNFZyU1plVjlSV2ZTb1d5eG5ZM2h6Y1ozMEcvSW5EcTR3eFJyRWVqcmVCeG5oSVFia3hlbnhrYXhsK2s3ZUxVUWtVUjZ2S0oyaURGTkdYM1dtVkExeWFPSCttdmhCZCtzRTZ2YWNRekZvYndZNUJxRUFGbWVqd1c1bmU3SHRWTm9sT1VnSmM4Q3NVeG1jL0xCaThONW11OVZzSUE1SHlFcm5TNnplQ3o3VkxJOStuL2hiVDZoVG9rTVhUVnlYSlJLU0cyaGQybGFiWFRidG1LNGZOSDNJWkJQcmVTQTRGTWVWb3VWTjN6RzV4OUNpR3BMdy8zcGNlbzRxR3FwK3JWcCt6Kzd5UTk4b0VmK255SDRGMytKOUloZURCYTk0V2k2M3pKYkxCQ0labTdQMGFzSEdwSUp0M1B6RTNtMFM0WUlXeVhCQ1ZYR2lrajhNdWREUEIvNk5tMnY0SXhKNWdVMGlpMGd1eTVTVUhxR1VZelRQMGpJSlU1RTgyUkhVWHRYNGxEZHJpaEJMZFAxWWFHMUFHVUMxMnJRS3VJYUd2Q3BNalpDOWJXU0NZbmpEbHZwV2JrZFhNVE5lQkhMS2l1b296TUdJdmtjem1QMGFSSlNKOFBZbkxDVk5oS0hYQk5ja0g3OWU4WjhLYzJ3VWVqNHNRWm9IOHFEUkdrZzg2bWFXL1pRV0dObkxjWG1xM0ZsWE02c3NSLzNQNkUvYkhNdm02SExydjF5Uml4aXQyNUpzSDMvSU9yMlVWNEJXSmh4WFc1Qko2WGRyMDduOWtGM1pOQWs2L1hwYzVNU0ZtWUoyUjdiZEw4S2s3cTFPVTlFbGcvdEN4SjhnaVQyN3dTVHlTRjBHT3hnNFBiWUpkaS9OeWlhOU5uODlDR0R1bGZKZW1tMWFpRXIvZWxlR1NOKzVNUnJWSjRLNmxneVRUSVczaTljUTBkQWk2Rkh0MFlNYkgzd0RTQXRHTFNBY2Nlenp4SGl0dDFRZGhXMzZDUWdQY0E4dklJQmgzL0pOamYvT2JtYzJ5enBrOGVkU2xTNGxWZHdnVzV2emJZRXlGb0Y0R0NCQmJ5MWtlVk51ZUhBSCtldmkrSDdvT1ZmUzNYdVBRU05UWE9PTkFiekplU2I1c3R3ZFFIbDFaanJHb0U0OUk4K0E5ajN0K2FoaFFqNzRGQ1NXcFpyajd3UlNGSkpubndpMVQ5SEw1cXJDRlcvSlpxNlA2MlhrTVdUYit1NGxHcEtmbW13aUpXeDE3OEdPRzdLYnJaR3F5V3dtdXlLV1BrTnN3a1oxcTh1cHRVbHZpSWkrQVhoMmJPT1RPTHNydE5rZnFiUUplaDI0cmVlYmtJTkxranV0NXI0ZDlHUi9yOENCYTlTVTBVUWhzblpwNWNQK1JxV0NpeFJtN2k0WVJGYnRaNEVBa2h0TmE2akhiNmdQWVF2N01LcWtQTFJtWDNkRnNLOFhzUkxWWjZJRVZyQ2JtTkRjOG81bXFzb2dqQVFmb0M5QmM3UjZnZncwM20rbFFwdjZrVGZoeHNjRElYNnMwdytmQnh0a2hqWEFYcjEwVW91V0N4M0MvcC9GWXdKUlMvQVhSS2tqT2I1Q0xtSzRYUmUwK3hlRER3VmtKUFphdTUyYnpMRURIQ3FWMGY0NHBQZ0tPa1lLZ1RaSjMzZm1rM1R1OFNkeEowMlNITThGZW01U01zV3FSeWkyRjF5bmZSSnN6Y0ZLeWtkV2xOcWdEQS9MOWxLWUJtYzdadS9xOWlpMUZQRjQ3VkprcWhpclVvYjUzem9pSnRWVlJWd01SMzRnVjlpcWNCYUhiUnU5a2t2cWszeU1wZlJGRzQ5cEtLaklpcTdoL1ZwUndQR1RIb1k0Y2cwNVg1MDI4aUhzTHZVVy91eitralB5SUVoaGNLVXdDa0pBd2JSOXBJRUdPbjh6NnN2QU84aTg5c0ozZEw1cURXRlliUytIR1BSTXhZd0pJdEZRTjg2WUVTZUpRaG4ydXJHaUxSZmZRZUxwdERsOGRBZ2IrVHA0N1VRUHhXT3cxN09lQ2hMTjFXbnpsa1BMMVQ1TytPM01lbnBuNEMzSVk1TEVlcEhwblBlWkhidnVXZmVWdFBsa0g0TFpqUGJCcmtKVDNOb1JKekJ0ODZDTzBYcTU5b1ErOGRzbTB5bVJjbVF5bjh3NzFtaG1jdUVJNWJ5dUYrQzg4VlBZbHkyc0V6amx6QVEzdmRuLzErSHpndXc2cUZOTmJxZW5oWkdiZGlHNlJ3WmFURzdqVEEyWDlSZFhqRE45eWoxdVFweU80THg4S1JBY1pjYlpNYWZwNHdQT2Q1TWRYb0ZZNTJWMUE4TTloaTNzc285Myt1cHJFMHFZTk1qa0UyMkN2SzRIdVV4cU43b0l6NXBXdUVUcTFsUUFqcWxTbHFkRDJSbnIvZ2dwL1RWa1FZam45bE1mWWVsazJzSDVIUGRvcFlvN01Id2xWMW9yOUJ4ZitRQ3lMem05MnZ6RzJ3amlJakMvWkhFSnplcm9KbDZiZEZQVHBaaG81TVYyVTg2ZkxRcXhObEdJTXFDR3krOVdZaEo4b2IxcjArV2h4ZGU5TDJQZHlzRVR2OTdPK3hWdytWTk4xVFpTUU41STZsOW01SXA2cExJcUxtNGExQjFmZkg2Z0h5cVQ5cDgyTk9qbnRSV0dJb2ZPM2JKejVHaGt2U1dic1h1ZVRBTWFKRG91OTlrR0xxRGxod0JaTkVRNG1LUHVEdlZ3U0s0V21MbHVIeWhBOTdwWmlWZThnK0p4bW5KRjhJa1YvdENzNEpxL0hnT29BRUdSOXRDRHNEYkRtaTNPdmlVUXBHNUQ4WG1LY1NBVWFGTFJYYjJsbUpUTllkaHRZeWZqQllaUW1ONXFUNUNOdWFEM0JWbmxrQ2s3YnNNVzNBdFhrTk1NVHVXNEhqVUVSU0puVlEwdnNCR2Exd28zUWg3MTE1WEdlVEYzTlR6OHcwNDQwQWdVN2MzYlNYTy9LTUlOYUlXWGQwb0xwb3EvMC9RSnhDUVNKOVhuWXkxVzdUWUxCSnBIc1ZXRDFhaHNBN0ZqTnZSZDZteENpSHNtOGc2WjBwbnpxSXBGMWRIVXRQMklUVTVaMWhaSGJ1K0wzQkVFU3RCYkw5WFl2R2ZFYWt2MWJtZitiT1pHbm9pdUhFZGxCbmFDaHhZS056QjIzYjhzdzhZeVQ3QWp4Zms0OWVKSUF2ZGJWa2RGQ2UySjBnTWVmaFEwYklaeGh4M2Z6TUl5c1FOaU44UGdPVUt4T011cjEwTGR1aWdSRURSTVp5UDRvR1dyUDFHRlk0dDZncm9BU3NaNDIxb3M0OHdBZG5yYm92TmhMdDdTY05VTGt3WjVBSVpKVHJiYUtZVExqQTFvSjNzSXVOL2FZb2NtLzl1b1FIRUlsYWNGMXMvVE0xZkxjUFRMMzhPOWZPc2pNRUl3b1BLZnZ0N29wdUk5RzJIZi9QUjRhQ0xEUTd3Tm1JZEV1WEovUU5MNzJrNXE0TmVqQWxkUGZlM1VWVnF6a3lzOFlaL2pZT0dPcDZjK1l6UkNyQ3VxME0xMXk3VGlONnFrN1lYUk1uL2d1a3hyRWltYk1RanIzandSTTZkS1ZaNFJVZldRcjhub1BYTEpxNnloNVIzRUgxSVZPSEVTc3QvTEl0YkcyRDJ2UnNaUmtBT2J6dlFBQUQzbWIzL0c0TnpvcEkwRkFpSGZicHEwWDcyYWRnNlNSais4T0hNU2h0Rnh4TFpsZi9uTGdSTGJDbHdsNVdtYVlTcyt5RWprcTQ4dFk3WjJiRTBOOTFtSnd0K3VhME5sUkpJRGgwSGlrRjRVdlNWb3JGajJZVnU5WWVTNXRmdmxWalBTb051L1p1NmRFVWZCT1Q1NTVoYWhCZE4zU2E1WHVqMlJ2YXUxbFFOSWFDOTQ0eTBSV2o5VWlORHNrQUsxV29MK0VmWGNDNkliQlhGUnlWZlgvV0tYeFBBd1V5SUFHVzhnZ1owOGhjaWpLVHQxWUtuVU82UVB2Y3JtRFZBYjBGQ0xJWG41aWQ0ZkQvSng0dHcvZ2JYczdXRjliMlJnWHRQaExCRzl2RjVGRWtkSEFLclFIWkFKQy9IV3ZrN252enpEeklYWmxmRlRKb0MzSnBHZ0xQQlk3U1FUakdsVXZHNTc3eU51dFoxaFRmczkvMW5rU1hLOXp6S0xSWjNWT0RlS1VvdkplMFdDcTF6Vk1ZeENKTWVubU56UElVMlM4VEE0RTd3V21iTmt4cTlySTJkZDZ2MFZwY0FQVk14bkRzdldUV0ZheXlxdktaTzdaMDhhNjJpL29IMi9qeGY4cnBtZk82NGluM0ZMaUwxR1g4SUd0VkU5TTIzeUdzSXFKYnhEVHkrTHRhTVdEYVBxa3ltYjVWclFkek92cWxkZVUwU1VpNklpckc4VVozamNwUmJ3SGExQzBEd3c5Ry9TRlgzZ1B2VEpRRStreXorZzFCZU1JTEtLTytvbGNIemN0T1dnenhZSG5PRDdkcENSdHVaRVhBQ2pncWVzWk1hc29QZ251REM0blV2aUFBeERjNXBuZ2pvQUlUSWt2aEt3ZzVkNjA4cGRyWmNBK3FuNVRNVDZVby9RekJhT3hCQ0xUSlgzTWdrODVyTWZzbld4ODZvTHhmN3AyUFg1T05xaWVUYS9xTTN0UHc0Wlh2bEFwODNOU0Q4RjcrWmdjdEsxVHBvWXd0aVUyaDAySENHaW9INXRrVkNxTlZUTUg1cDAwc1J5MkpVMXF5REJQMkNJSS9EZzRXRHNJbCt6Z2VYNzU4OXNyeDZZT1JSUU1CZktib2RiQjc0M1RsNFdMS09FbndXVVZCc205NFNPbENyYWNVNzJNU3lqMDY4d2RwWWp5ejFGd0MyYmpRbnhuQjZNcC9wWit5eVpYdGd1RWFZQitrcWhqUTZVVW13U0Zhek9iK3JoWWpMYW9pTSthTjkvOEtLbjB6YUNURnBOOWVLd1d5Ny91NEVIek80NlRkRlNOak1mbjJpUFNKd0RQQ0ZIYzBJMSt2amRBWnc1WmpxUi91emk5Wm4yMG9BYTVKbkxFay9FQTNWUldFN0ovWHJ1cGZGSlB0Q1V1cUhQcG5sTDdJU0p0UnBTVmNCOHFzWkNtMlFFa1dvUk90Q0tLeFVoM3lFY01iV1lKd2s2RGxFQkcwYlpQNmVnMDZGTDN2NlJQYjdvZEd1d203Rk44Zkc0d29xdEI4ZTdNNWtsUHBvOTdHb09iTnd0K2x1ZFRBbXh5QzVobWNGeCtkSXZFWktJNmlnRktIcUxIMDFpWTFvNzkwM1Z6RzlRR2V0eVZ4NVJObUJZVVUrekl1U3ZhL3lJY0VDVWk0cFJtRTNWa0YyYXZxdWxRRVVZNHlaL3dtTmJvQnpQbUFQZXkzK2RTWXRCWlVqZVdXVDBwUHdDejRWb3p4cDl4ZUNsSVU2MHF2RUZNUUNhUHZQYUE3MFdsT1A5Zi9leTM5bWFjdnBHQ1ZhK3pmYThnTzQ0d2J4cEpVbEM4R04vcFJNVFF0elk4WjgvaGlOclUrWnE2NFpmRkdJa2RqN203YWJjSzFFQnR3czFYNEovaG5xdmFzUHZ2RFNEWVdOK1FjUVZHTXFYYWxrRHRUYWQ1cllZMFRJUjFFcW94M2N6d1BNaktQdkY1c0Z2MTdUaHVqcjFJWjFZdGw0VlgxSjB2alhLbUxZNGxtWGlwUkFybzBxVkdFY1h4RVZNTUVsNTRqUU1kNEo3Umpnb21VMGoxcHRqeXhZK2NMaVN5WFBmaUVjSVMybFdESzNJU0F5NlVaM0hiNXZuUG5jQTk0NDExamN5NzVheTZCNkRTVHpLNlVUQ1pSOXVEQU50UEJydklEZ2pzZmFyTWl3b2F4Mk9sTHhhU29ZbjRpUmdrcEVHcUVrd294NXR5SThhS2tMbGZaMTJsTzExVHhzcVJNWTg5ajVKYU81NVhmUEpQREwxTEdTbkM4OFJlOUFpK051NWJaanR3UnJ2RklUVUZIUFI0Wm14R3NsUU1lY2diWk83bkhrMzJxSHhZa2R2V3B1cDA3b2pjTUNhVnJwRkF5RlpKSmJOdkJwWmZkZjM5SGRvMmtQdFQ3djAvZjhSL0I1Tno0ZjF0OS8zek5NLzduNlNVSGZjV2s1ZGZRRkp2Y0pNZ1BvbEdDcE9GYi9XQzBGR1dVMmFzdVF5VCtybTg4WktaNzhDZWkvQ0FoOTM5Q0gwSllicFpJUHR4YzJ1ZlhxalMzcEhIOWxuV0s0aUo3T2pSL0VFU3BDbzJSM01ZS3lFN3JIZmhUdldobzRjTDFRZE40akZUeVI2c3lNd0ZtMTI0VFZERFJYTU52ZUkxRHAvbnR3ZHo4azhreHc3aUZTeDYrWXg2TysxTHpNVnJOMEJCenppWmk5a25lWlN6Z29sbEJuVndCaDZvU09QSFhyZ2xyT2orUW1SL0FFU3JoRHBLcldUKzgvQWlNRHhTLzV3d1JOdUdRUExsSjlvdm9taEpXbjhzTUxWSXRROE4vN0lYdnREOGtkT29IYXcrdkJTYkZJbVFzdi9PQ0FJdWk5OUUrWVNJT01sTXZCWGtBdCtOQVpLOHdCOUpmOENQdEIrVE9VT1IrejcxZC9BRlhwUEJUNitBNUZManhNakxJRW9KenJRZnF1dnhFSWkrV29VekdSMUl6UUZOdmJZT254YjJQeVEwa0dkeVhLelcyYXhRTDhsTkFYUGs2TkVqcXJSRDFvWnRLTGxGb29mclh3MGRDTldBU0h6eSs3UFN6T1VKM1h0YVBac3hMRGpyK280MWZLdUtXTm1qaVp0ZmtPekl0dmxWMk1ER1NoZUdGMG1hMDRxRTNUVUVmcUpNclhGbTdEcEsrMjdEU3ZDVVZmN3JiTm9salBoaGE1VzdLQnFWcTBTaFVTVGJSbXVxUHRRcmVWV0g0SkVUNXlNaHVxTW9TZDRyL044c0RtZVFpUVF2aTF0Y1p2N01vYzdkVDVYNUF0Q0Q2a05FR1pPelZjTllscFg0QWJUc0xnU1lZbGlpUHlWb25pdVlZeVN4c0J5NWNnYjNwRCtFSzBHcGIwd0pnMDMxZFBnYUw4Slp0NnNJdnpOUEVIZlZQT2pYbWFYajRiZDR2b1h6cFo1R0FwTWhJTGdNYkNFV1oyendnZGVRZ2pOSExiUEl0K0txeFJ3V1BMVE42SHdaME91aWpqNFVGK1NnMEF1OFh1SUtXMFd4bGV4ZHJGckRjWko4U2hhdWF0M1gwWG1IeWdxZ0wxbkF1MmhySkZiNHdaWGtjUytpMzZLTXlVMXlGdll2MjNiUVVKaS8zeVFwcXIvbmFVT29pRVdPeGNreXEvZ3E0M2RGb3UxRFZEYVlNWks5dGhvNytJWFhva0JDczVHUmZPY0JLN2czQStqWFEzOUs0WUE4UEJSVzRtNSt5UjBaQXhXSm5jalJWYklUdklBUEhZUnQxRUozWUxpVWJxSXZvS0h0ekhLdFV5MWRkUlVRMEFVTzQxdm9uWkRVT1crbXJzencrU1cvNlEvSVVnTnBjWEZqa003RjRDU1NRMkV4Wmc4NW90c01zN2txc1FENE94WWVCTkRjU3BpZmpNb0xiN0dFYkdXVHdhc1ZPYm1CL2JmUGNVbHEwd1loWENZRURXUlcwMlRQNWJCcllzS1RHV2puV0RESjFGN3pXYWkwelcvMlhzQ3V2QlFqUEZjVFlhUVgzdFNYUlNtOGhzQW9EZGpBcksvT0ZwNnZjV1lPRTdsaXpQMFljKzhwMTZpNy9OaVhJaWlRVHA3YzdYdXM5MjVWRXRsS0FqVWRGaHlhaUxUN1Z4RGFncHJNRndpeDR3WjA1dTBxajdjRFdGZDBXOU9ZSEl1M0piSktNWFJKMWFZTm92dWdnK1FxUk43Zk5IU2kyNlZTZ0JwbitKZk11UG8zYWVxUFdpay93STVSejNCV2FyUFFYNGk1K2RNMG5wd1ZPc1grS3NPaEM3dkRnK09Kc3o0UTV6bG5JZWZsVVdMNlFZTWJmOVdEZkxtb3NMRjRRZXYzbUppT3VIam9vci9kTWVCcEE5aUtEa01qWUJOYlJvNDE0SEN4anNIckI0RVhOYkh6Tk1ESENMdU5CRzZTZitKNE1aL0VsVnNEU0x4aklpR3NUUGh3OEJQanhiZlF0c2tqK2R5Tk1LT09jVVlJUkJFSXFiYXp6M2xtamxSUWhwbHhxNjczVmtsTU1ZNjU5N3Z1K2Q4OWVjL3pxN01pNGdRdmg4N2VoWWJwT3VaRVhqNWcvUTdTN0JGREFBQjlEekczNVNDODUzeHRXVmNuWlFvSDU0amVPcVlMUjlORHV3eHNWdGhUVjdWOTluL0I3SFNiQXl0YkV5VlR6LzVOaEo4Z0dJakcwRTVqM2dyaVVMVWQ1Umc3dFFSKzkwaEpnTlFLUUgyYnRiU2ZQY2FUT2ZJZXhjMWRiMUJ4VU9oTTF2V0NwTGFZdUtyM0ZkTlR0L1QzUFdDcEVVV0RLRXR6WXJqcHpsTC93cmkzTUlUS3NGdnRGOFFWVi9OaFZvOTdhS0lCZ2RsaU5jMTBkV2RYVkRwVnRzTm4rMlVJb2xyZ3FkV0E0RVk4c28wWXZCNGErYUx6TVhpTUF1T0hRclhZMHRyK0NMMTBKYnZaemdqSkp1QjFjUmtkVDdEVXFUdm5zd1ZVcDVra1VTRlZ0SUlGWUswNSt0UXhUNjk5MkhITldWaFd4VXNEMVBrY2VJcmxYdVVWUm9nd21mZGh5cmY2enphTDgrYzBMN0dYTVpPdGVBaEFWUVZ3ZEpoKzduclg3eDRMYUlJZnoyRjJ2N0RnL3VEZnoyRmErNGdGbTJ6SEFvcjhVcWltSkczVlRKdFpFb0ZYaG5EWVh2eE1KRmM2a3UyYmhiQ3h6aWoyejVVTnVLMGptcDFtbnZrVk5VZlIrU0VtajFMcjk0THltNzVQTzdGczBNSXIzR2RzV1hSWFNmZ0xUVlkwRkxxYmE5N3UxSW44TkFjWTdJQzZUaldMaWd3S0VJbTQzTnhUZGFWVHY5bWNLa3p1ekJrS2Q4eC94dDFwLzlCYlA3V3liNGJwbzFLMWduT3BiTHZLejU4cFdsM0I1NVJKL1o1bVJETFB0TlFnMTRqZE9FczkraC9WNVVWcHdyQUk4a0diWDhLUFZQRElNZklxS0RqSkQ5VXlET1BoalozdkZBeWVjd3lxNGFrVUU5bURPdEpFSzFocER5aTZBZTg3c1dBQ2xYR1Rpd1B3TjdQWFd3anhhUjc5QXJIUklQZVlLVHVuVlcyNHNQci8zSFB6Mkl3SDhvS0g0T2xXRW10NEJMTTZXNWc0a01jWWJMd2oydXNvZEQxMDg4c3RaQTdWT3NVU3BFVmw0dzdOTWIxRVVITVJ4QXhMRjBDSVYrMEwzaVpiK2VrQjF2U0RTRmpBWjNoZkxKZjdnRmFYck9LbittaFIrcld3L2VUWEljQWdsNEh2RnVCZzFMT21PQXdKSDNlb1ZFamp3aGVLQTRpY2JyUUNtdkF0cFEwbVhHMGFnWXA1bWo0UmI2bWRRK1JWNFFCUGJ4TXFoOUM3bzhuUDBXa28yb2NuQ0hlUkdoTjFYVnlUMmI5QUNzTCs2eWxVeSt5QzNRRW5hS1JJSks5MVl0YW9TcmNXWk1Nd3h1TTBFOUo2OForWXlqQTBnOHAxUGZIQUFJUk95NlNhMDRWWE91VDZBMzUxRk9XaEtmVEdzRkozUlRKR1dZUG9MazVGVks0T2FZUjloa0p2ZXp3Rjl2UU4xMTI2cjZpc01HWFdUcUZXKzNITDNJL2p1cmxJZERXSVZ2WVkrczZ5cTdsckZTUEFHUmRuVTdQVndZL1N2V2JaR3BYenkzQlEyTG1BSmxyT05Vc1pzNG9Ha2x5MFYyNjd4YkQ1S01ZOHdvTk5zbVdHMVZWZ0xDcmE4YVFCQmNJNERQMkJsTnd4aGlDdEhsYXo2T1dGb0NXMHZNUjNFcnJHN0p5TWpUU0NudlJjc0VIZ21QbndBNmlOcEoyRHJGYjRnTGxoS0p5WkdhV2tBOTdINkZGZHdFY0xUNkRSUVFMKytmT2tWQzRjWUdXMVRHLzNpSzVkU2hSU3VpQnVsbWlocWdqUjQ1VmkwM28yUmJRYlAzc3h0OTBWeFE2dnpkbEdma1htbUttak9pMDgwSlNIa0xudGp2c0JKbnY3Z0tzY09hVE9rRWFSUXFBbkNBNEhXdEI0WG5NdE9ocFJtSDJGSDh0VFhySWpBR05XRW11ZFFMQ2tjVmxHVFE5NjVLaDBINml4WGJnSW1RUDZiNDJCNDlzTzVDOHBjN2lSbGd5dlNZdmNuSDlGZ1EzYXpMYlFHMmNVVzk2U0RvalRRU3R4a09KeU91REdUSEFubldrejI5YUV3TjlGVDhFSjR5aFhPZytqTFRyQ1BLZUVvSjlhN2xEWE9qRXI4QWdYNEJtbk1RNjY4b1cwellQeVFpVk1QeEtSSHRwZm5FRXlhS2hkek5WVGhseHhEUU5kckhlWmlVRmI2Tm9ZMkt3dlNiN0JuUmNwSnkrL2cvekFZeDNmWVNONVFFYVZEMlkxVnNOV3hCMEJTTzEyTVJzUlk4SkxmQWV6Uk16NWxVUnVMVW5HMVRvS2s2UTMwRnVnaHFXTjZnQk5jRnhQL25ZL2l2K2lhVVFPYSsyTnV5bTQ2d3RJL0R2U2Z6U3AxakVpNFNkWUJFN1loVGlWVjVjWDlnd2JvVkRNVmdacDVZQlFsSE9RdmFETmZjQ29DSnVZaGY1a3o1a3dpSUtQanpncGNSSkhQYk9oSmFqZW9lUkw1M2N1TWFoaFY4WjdJUnI2TTRoVzBKelQ3bXphTVV6UXBtODY2endNN0NzMDdmSllYdVd2akFNa2JlNU82VjRidTcxc09HNkpRNG9MOHpJZVhIaGVGVmF2enhtbEl5QmtnYzlJWmxFRHBsTVByOHhsY3lzczRwVlVkd0sxZTdDSzJrVHNTZHE3ZzVTSFJBbDNwWVVCOUtvNGZzaDRxbGVPeUp2MXozS0ZTVFN2d0VjUk8vRXc4b3pFRFlaU3FwZm9WVzl1aEpmWXJOQVhSMFozVm1lb0FEK3JWV3R3UC8xM3NFLzNJQ1gzSGhERzNDTWM0NzZkRUVDMEszdW1TQUQ0aitaUUxWZEZPc1dMMkMxVEg1KzRLaVNXSCtsTWlibytCNTVoUjNHcTQwRzFuMjVzR2NOMG1FY29VMndOOUZDVnlRTEJoWU91OWFIVkxXakVLeDJKSVVaaTV5U29IVUFJOWI4aEd6YUxNeENaRE1MaHY4TWtjcFRxRXd6OUtGRHBDcHFRaFZtc0dRTjhtMjR3eUI4MkZBS05tamdmS1JzWFJtc1NFU292QXdYakJJb01LU0c1MXA2VW04YjNpN0dJU3M3a2pUcS9QWm9pb0NmSnpmS2RKVE4wUTQ1a1FFUXVoOUg4OE0zeUVzM0RidFJUS0FMcmFNMFlDOGxhaU1pT09lNkFEbVRjQ2lSRWVBV1plbEJhRVhSYVN1ajJseDB4SGFSWXFGNjVPMExvNU9DRlUxOEE4Y01ERTRNTFltOXcyUVNyOU5nUUFJY1J4WnNOcEE3VUpSMGU3MUpMK1ZVK0lTV0ZrNUk5N2xyYTh1R2c3R2xRWWhHZDRHYzZyeHNMRlJpSWVHTzRhYlA0UzRla1ExZmlxREN5ODdHWkhkNTJmbjVhYURHdXZPbUlvZnJ6cFZ3TXZ0YnJlWi84NTVPYVhUUmNOaU5FMHd6R1pTeGJqZzI2djhrbzhMNTM3di9YQ0NXUDJNRmFBckpwdm5rZXAwcEErTzg2TVdqUkFaUFFSZnpuWmlTSWFUcHB5Nm0zcDZIck5Tc1k3ZkR0ejdDbDRWL0RKQWpRRG95aUwydXdmMVVIVmQyQUlyekJVU2xKYVRqNGs2Tkw5N2EvR3FoV0tVOVJVbWpuWUtwbTJyK0pZVWNya0N1Wkt2Y1l2cmc4cERvVUtReXdZOUdEV2cwM0RVRlNpcmxVWEJTNVNXbi9LQW50bmYwSWRIR0wvN213WHFERytMWllqYkVkUW1xVXFxNHk1NFRObVdVUDdJZ2NBdzU4MTZZQnp3aU5JSmlFOU00bFBDemVJL0ZHQmVZeTNwNklBbUg0QWpYWG12UTRJeTBZODJOVG9iY0FnZ1QyQ2RxejZNeDRUZEdvcTlmbjJldHJXS1VORnlhdEFIeWRRVFZVUTJTNU9XVlVsdWdjTnZvVXJsQThjSkp6OU1xT2EvVzNpVm5vNHpESGZFN3pob1k1ZjVsUlRWWkRoclFiUjhMUzRlUkx6OGlQTXlCTDZvNFBpTGxwODlGamRva1FMYVNCbUtIVXdXcDBuYTVmRTN2OXpueTJZY0RYRy9qZkk5c2N0dWxIUmJka0k1YTRHT1BKeDRvQUpRelZaL3lZQWFkbzhLTlpVZEVGczlaUGlCc2F1c290WE1OZWJFZ3IwZHlvcHVxZlNjRkozT0ROUEhnY2xBQ1BkY2N3djBZSkdRZHNOMmxob1Y0SFZHQnhjRVVlVVgvYWxyNG5xcGNjMUNDUjN2UjdnNDB6dGVRZy9KdldtRmxVRTRtQWlUcEhsWUdyQjd3K1UyS2RTd1F6MlFKS0JlLzVlaWl4V2lwbWZQMTVBRldySzhTaDFHQkJZTGd6a2kxd1RNaEdRbWFnWHFKMitGdXFKOGYwWHpYQ1ZKRkhRZE1Bdzh4Y28xMUhoTTM0N2FsckF1K3dtWDNwREZBQk92a0MrV1BYMFVoZzFaNU1WSEtOUk94YVI4NFlWM3MxMlVjTSs3MGNKNDYwU3pFYUtMeWg0NzJ2T01EM1huYUs3enhaY1hsV3FlbkV2Y2ptZ0dOUjJPS2JJMXM4VStpd2lXK0hvdEhhbHAzZTFNR0R5NkJNVkl2YWpuQXprRkhiZVZzZ2ptSlVrclA5T0F3bkVIWVhWQnFZeDNxN0x2WGpvVlIwbVk4aCtaYU9uaDA1M3Bkc0drbWJxaHlyeU4wMWVWSHlTcitDa0RZa1NNZVoxeGpQTlZNK2dWTFRES3UyVkdzTVVKcVdPNFR3UERQMFZPZzIvOElUYkFVYU1HYjRMakw3TCtQaTExbEVWTVhUWUlsQVovUUhtVEVOanl4M2tEa0JkZmN2dlF0NnRLazZqWUZNNEVHNVVYRFRhRjUrMVpqUno2VzdNZEpQQyt3VGtiRFVpbTRwNVFRSDNiOWtHazJCa2lseWV1cjhCYzIwd201dUpTQk85NUdmWURJMUVaaXBvUmFIN3VWdmVuZXF6NDN0bFRaR1JRNGE3Q05tTUhnWHlPUVFPTDZXUWtnTVVUUURUOHZoMjFhU2R6N0VSaVpUMWpLOUYrdjZ3Z0Z2dUVtR25nU3ZJVVIyQ0prYzV0eDFReWdmWm5BcnVPTm9iQjFpZENMQjFGQ2ZPN04xWmRSb2NUOC9XeWUrRW5EaU85cHpxSXBuTERsNGJrYVJLVytla0JWd0huNDZTaHcxWDB0Y2x0LzBST2lqdVVCNGtJSW5yVkpVNGJ1V2Y0WUlUSnRqT0o2aUtkcjF1K2ZsZ1FlRkg3MEd4S2poZGd0L01yd2ZCNEsvc1hjelErOXpZY3JENGRoWTZxWmhaMDEwcnJ4Z2dXQThKYVp5ZzJwWWlqOGllWUVnMWFaSmtaSzlPMVJlN3NCMGlvdWY2MHJLMEdkK0FZbHA3c29xQ0JDREd3ZktlVVFoQ0JuMEUwbzBHUzZQZG1qTGkwVHRDWVplcWF6cXdOK3lOSU5JQThMazNpUERuV1VpSVBMR05jSG1aRHhmZUswaUFkeG0vVDdMbk4rZ2VtUkw2MWhISWMwTkNBWmFpWUpSK09IbkxXU2U4c0xySzkwNUI1ZUVKSE5sV3E0Um1FWElhRlRtbzQ5Zjh3NjErTndmRVV5dUpBd1ZxWkNMRmN5SEJLQWNJVmozc056ZkVPWHpWS0luZHhIdytBUjkzb3doYkN4VVpmNkdzOGN6Ni8xVmRyRkVQcnYzMzArOXM2QnRNVlBKM3psL1VmOXJVaTBaL29wZXhmZEwzeWtGNzZlOTk5R1BmVnY4Zkp2L1kvKy81aEVNb24xdHFORnlWUmV2Vjl5OS91SXZzRzNkYkI4R1JScmdhRVhmaHgrMnhlT0Z0K2NFbjNSWmFuTnhkRWUyK0I2TUhwTmJyUkU1M1BsRGlmUHZGY3A0a083OElMUjBUNHh5Vy9XR1B5QnNxR2RvQTd6SkpDdTFUS2JHZmhucWduUmJ4YkIyQjNVWm9lUTJiejJzVFZuVXdva1RjVFUyMVJ4TjFQWVBTM1NhcjdUMGVSSXN5Q05vd3I5YW13b01VL29kOXMyQVB0aUtOTDZFTk9seUtBRHN0QUVXS0Erc2RLRGhySjZCT2hSSm1aK1FKYkFhWjMvNUZxMC9sdW1DZ0V6R0VidTN5aTBZNEk0RWdWQWpxeGg0SGJ1UW4wR3JSaE9XeUFmc2dsUUpBVkwxeS82eWV6UzJrOFJFMk1zdEpMaDkyTk9CM0dDWWdGWHpuRjRkMjVxaVA0WkN5STRSWUdlc3V0NkZYSzZHd1BwS0s4V0hFa2hZdWkwQXlFbXI1TWwzdUJGdFBGZG5pb0k4UmlDb29hN1oxRzFXdXlJaTNuU05nbHV0Yyt4WThCa2VXM0pKWFBLNmpkMlZJTXBhU3hwVnRGcStSK3lTSzlKNldHNVF2dCtDK1FIMWh5WVVPVks3ODU3bkZteURCWWdaL28rQW5pYnpOVnF5WUNKUXZ5RFhEVEsraVhka0E3MWJZN1RMM2J2dUx4TEJROGtiVHZURVk5YXFrUTMrTWlMV2JFZ2pMek9IK2xYZ2NvMUVSZ3pkODByREN5bWxwYVJRYk9ZbktHL09Eb0ZsNDZselQwY2pNNUZZVnZ2MHFMVWJENWx5SnRNVWFDMXBGbFRrTk9OeDZsbGlhWDlvMGkvMXZ3czViTktuNU91RU5RRUttTGxjUDRvMlptSmpENHp6ZDNGazMydVE0dVJXa1BTVXFiNExCZTNFWEhkT1JOQjJCV3N3czVkYVJuTWZOVlg3aXNQU2IxaE1RZEFKaTEvcW1ETWZSVWxDVTc0cG1uempiWGZMOFBWRzhOc1c2SVFNMk5lMjNpQ1BJcHJ5SmpZYlZubTVoQ3ZLcE1hN0hMVmlOaU5jK3hUZkRJYUttM2pjdFZpRDhBMU05WVBKTmswMDNWVnI0Wm8yTXVHVzh2aWw4U0xhR3BQWHFHN0k0RExkdGw4YTRSYngxTHQ0dzVIdXFhYTFYelpCdGoyMDhFSlZHY21LWUV1YWVOMjd6VDlFRTZhMDlKZXJYZEVicGFOZ05xWUpkaFAxTmRxaVBLc2JEUlVpODZYdnZOQzdyTUU1bXJTUXRyekFaVm5kdFNqQ01xZDhCbWFlR1I0bDRZRlVMR1JCZVhJVjlZNHl4TEZkeW9VTnBpeTJJaGVQU1d6Qm9mWVBQMGVJYTJxNUpQNGo5RzhhdC9BcW9Tc0xBVXVSWHR2Z3NxWC96WXdzRStvZjZvU0RiVU9vNFJNSncrRE9VVEpxK2hucXdLaW05WXkvbmFweVpOVGMyckNxNlY5akh0SmJ4R1BEd2x6V2ovU2szekYvQkhPbFQvZlNqU3E3RnFsUEkxcTZKK3J1OEFrdTAwOFNGSU5YWmZPZm5aTk92R1BNdEVtbjJnTFB0K0g0UUxBKy9TWWU0ajM5OGF1emhLSXAyUG9rM21QQzVxMUlOMUhnUittbkVmYzROZWVIWXdkMi9rcHN6UjNjQm43bmk5TmJJcWh0U1dGVzh4YlVKdVVQVk9lZVh1M2owSUdabUZOaXdhTlo2ckg0L3pRMk9EejZ0RnhSTHNVWVp1MWJmZDF1SXZmUUR0NFlEL2VmS1l2OFZGOGJIR0RnSzIydzJXcXdwaTQzdk5DT1hGSlpDR01xV2lQYkw4bWlsNnRzbU9UWEFXQ3lNQ3c3M2UyckFEWmoySUs2cnFrc00zRVhGMmNiTGI0dmpCMTR3YS95WEs1dndVKzA1TXpFUko1blhzWHNXMjFvN00rZ08wanMyT3lLY2lQNXVGMmlYeWIyRGlwdHdRZUhlcXlna3JOc3FWQ1NsbGR4Qk1wd0hpMXZmYzhSS3BQLzRMM0xtcHE2RFpjdmhERGZ4VENFM3NwbGFjVGNPdFhkSzJnMzAzZElXQlZlMndEL0d2amExY0NsRlE2N2d3MHQxWlV0dHNVZ1ExVmVreThvT3BTNmtzWUVjNGJxc2VDYlp5NzY2U3ZMM0ZvZG1uYWhsV0pSZ1ZDTmpQeGhML2ZrMnd5dmxLaElUSC9WUUNpcE9JMGROY1JhNUIxTTVIbU9CalRMZVpRSnkyMzdlMm1vYndtRHlKTkhlUGhkRG1pa252TEthRGJTaEwrSXMxWFRDSnVMUWQyd21kSkw3K21LdnMyOTR3aFhRRCt2dGQ4OEtLazBEWFA4QjFYdTlKK3hvNjlWT3VGZ2V4Z1RyY3ZJNlN5bHR1TGl4OU9QdUU2L2lSSllvQk1FWHhVNHNoUU1mNEZqcXdmMVB0bkovd1dTWmQyOXJoWmpSbVRHZ2lHVEFVUXFSeituQ2RqZU1mWWhzQkQ1THY2MEtJTFdFdk5FSGZtc0RzMkwwQTI1MjM1MWVVb1l4QXlzVmFDSlZMZEg5UUZXQW1xSkRDT0RVY2RvbzEyK2dkNmJXMmJvWTBwQlZIV0w2TFFESzViWVdoMVY4dkZ2aTBjUnBmd3Y3Y0ppTVgzQVpOSnVUZGRIZWhUSWRVMFlRL3NRMWRMb0YyeFFQY0N1SEtpdUNXT1kzMERIZTFPd2NDbExBaHFBS3lxbG5JYkgvOHU5U2NKcGNTNGtncDZIS0RVZGlPZ1JhUkdTaVVDUkJqekk1Z1Nrc01aS3F5N1NkNTFhZWcwdGdKK3gwVEg5WUgyTWdzYXA5TjdFTlpkRUIwYmV5MkRNVHJCQTFobjU2U0VyTkhmM3RLdHF5TDliNnlYRVA5Ny9yYytqZ0QyTjFMTlVINlJNOUF6UDNrU2lwcjA2UmtLT29sUjdITzc2OGpqV2lIMVg5MmpBN2RrZzdnY05janFzWkNnZnFXdzB0UFhkTGcyMGNGNnZuUXlwZzdnTHRrYXpySEFvZHlZZkVOUFFac2RmbmpNWmlOdTRuSk85N0QxL3NRRSszdk5GenJTRE9LdytrZUxFQ1lmN1JKd1ZIZVAvajc5ODMzb1owZWdvbllCMkZsRkU1cWowMkIvTFZPTUpRbHNCOHVOZzNMZWc0cXRad250c09TTmlkUjBhYmJabUFLNHNDenZ0OFlpdXoyeXJOQ0pvSDVPOFh2WC92TGVSL0JCWVRXajBzT1BZTS9qeXhSZDUrL0p6aUtBQUJhUGN3LzM0VUEzYWovZ0xaeFpnUkNXTjZtNG0zZGVtYW5OZ3N4MFAyMzcvUStFdzVWWW5KUGt5Q1kwY0lWSG9GbjJBeS9lN1U0UDE5QVBiUEZYRUhYOTRONktoRU1QRzdpd0IzK0krTzFqZDVuNlZTZ0hlZ3hnYVNhd082aVFDWUZnRHNQU01zTk9jVWo0cTNzRjZLekdhSC8wdTVQUW9Bai84enE2VWM5TW9OckdxaFllYjJqUW8wV2xHbFhqeHRhblpMUzI0L09JTjVHeC8yZzY4NEJQRFFwd2xxbmtGY3hwbVAvb3NuT1hyRnV1NFBxaWZvdVFIMGVGNXFDa3ZJVFFiSncvWnZ5NW1BSFdDOW9VK2NUaVloSm1TZktzQ3l0MWNHVnhpc0t1K055bUVRSUF5YUNndWQvVjA5cVQzbmsvOXMvU1dzWXRoYTd5TnB6QklNTTQwckNTR2FKOXU2bEVrbDAwdlhCaUV0N3A5UDVJQkNpYXZ5bkVPdjdGZ0xxUGRlcXhSaUN3dUZWTW9sU0lVQmNveWZVQzJlMkZKU0FVZ1lkVkdGZjBiMEtuMkVabEs5N3l5eHJUMk1WZ3Z0UmlrZmRhQVc4UndFRWZOK0I3L2VLOGJCZHA3VVJwYnFuMXhjckM2ZDJVamRzS2J6Q2pCRnFrS2tvWnQ3TXJoZzZZYWdFN3Nwa3FqMGpPcldNK1VHUTBNVWxHMmV2UDF1RTFwMnhTdjRkTUswZG5hNkVOY05VRit4a2FKN0I3NjROZHhMQ3B1dmhibGx0VlJBZjd2SzVxUHR0Si85UllGVVVTR2NMZGlibno2bWY3V2tQTzNNa1VVaFIybUFPdUd2OElXdzVYRzFadm9WTW5qU0FaZTZUN1dZQTk5R0VOeG9Ia01pS3hIbEN1SzVHZDBJTnJJU0ltSFFyUW12NkY0bXFVL1RUUThuSE1EekNSaXZLeVNROGRxa3BRZ25VTW53SWthQXVjNi9GR3ExaHczYjJTYmEzOThCaFV3VVpTQUlPOFhadm51TGRZMm42aE9Yd3MrZ3E5QkhVS2NLRkE2a3o2RkRucHhMUElDYTNxR2huYzk3Ym8xRlQvWEprNDhMcmtISjJDQXRCdjBSdE45N04yMXBsZnBYSHZaOGdNSmI3WmM0Y2ZJNk1iUHdzVzdBaWxDU1hNRklFVUVtaXI4WExFa2xBMHp0WWJHcFRUR3F0dHA1aHBGVFRJcVV5YUFJcXZNVDlBL3grSmk1ZWpBNEJoeGIvY2wxcFVkT0Q2ZXBkM3lpbElkTzZqMjk3eElub2lCUHVFRFcyL1Vmc2xEeWhHa1FzN1d5MjUzYlZubFQrU1dnODl6WUlLLzlLWEZsNWZlK2pvdzJyZDVGWHY4ekRQcm1mTVhpVVB0OVFCTy9pSzRRR2JYNWovN1J4MWMxdnpzWThPTmJQM2xWSWFQcmhMNCsxUXJFQ1ROM255S2F2R0cwZ0JCdEh2VEtoR29CSGdNWEhTdEZvd04rSEtyUHJpWXUrT1owNUZybjhva1FyUGFheG9LUDFVTENTL2NtS0ZOM2djSDdIUWxWanJhQ2VRbXRqZzFwU1F4ZXVxWGlTS2dMcHhjLzFPaVpzVTQrbjRsejRocGFoR3lXQlVSTGk0NjQybjFnbjlxejliSXNhQ2VFUEowdUptZW5NV3AydEptSXdMUTZWU2dEWUVyT2VCQ2ZTajlQNEcvdkk3b0lGK2wvbjVmcDk1NlFneEd2dXI3N3luYXdBdTNHOU1kRmJKYnU0OU5abldubkZjUUhqeFJ1aFVZdmcxVS9lODRONEpUZWNjaURBS2IvS1lJRlh6bG95dUUxZVlYZjU0TW1oalRxN0IveUJUb0R6enB4M3RKQ1RvM0hDbVZQWWZtdEJSZTNtUFlFRS82UmxUSXhiZjRmU09jYUtGR2s0Z2JhVVdlNDRoVms5U1p6aFc4MHlmVzVRV0JIeG10VXp2TWhmVlFsaTRnWlRrdElPWmQ5bWpKNWhzYm16dHRhSFFCMjlBbTNkWmtteDNnL3F2WW9jeWhaMlBYQVdzTlFpSWFmK1E4Vy9NV1BJSzcvVGp2Q3g1cTJYUnA0bFZXeWRNYzJ3SVFraGFkREIweHNudy9rU0V5R2pMS2pJNGNvVkl3dHViVEYzRTdNSjZMUzZVT3NKS2o4MlhWQVZQSkpjZXBmZXdiekU5MWl2WFp2T3ZZZnNtTWV2d3RQcGZNekdtQzdXSmx5VzJqMGpoN0FGMUpMbXdFSlNLWXdJdnU2REhjM1lueUxIOVpkSUJuUStuT1ZEUmlQK1JFcHF2Kyt0eXBZSEl2b0p5SUNHQTQwZDhiUjdIUjJrN2RvNlVRVEhGNG9yaVllSVFieEtlNFRoNisvbDFCalV0UzlocU9SaDNNYmd2WXJTdFhUZlN3YUJPbUFWUVp6cFlOcXNBbVF5alk1Nk1VcXR5M2MveEg2R3VoTnZOYUc5dkdiRzZjUHRCTThVQTNlOHI1MUQwQVI5a296S3VHR1NNZ0x6M25BSHhETm5jN0dUd3BMajcvNkhlV3AxaWtzRGVUandDTHB4ZWp1TXRwTW5HSmdzaWt1MXNPQUN3UTl1a3pFU2lEUk43N1lORVN4UjVMcGhPbGNBU1hBNXVJdHMxTG5CSWNuMUo3QkxXczQ5RE1BTFNudXo5NWdkT3JUWnIwdTFTZVlIaW5uby9wRTU4eFlvWGJWTy9TK0ZFTU1zNXF5V2tNbnA4UTNDbHlUbFpQNTJZOW5xN2I4ZklUUHVWWFVrOW9oRzVFRkh3NGdBRWNqRnhmS2IzeHVBc0VqeDJ6MXd4TmJTWk1jZ1M5R0t5VzNSNkt3Sk9OZ3RBNjRMVHl4V204QnZ1ZHAwTTFGZEpQRUdvcE00RnZnN0cvaHNwdGtoQ2ZIRmVndjRFTnd4UGVYbVloeHdaeTdqcytCZU0yN3Q5T0RCTXluVkNMSjdSV2NCTXRlWkp0dmpPWUhiNWxPbkNMWVdORU1LQzU5QkE3Y292dTFjQU5hMlBYTDA1aUdkdWZPemtnRnFxSEJPcmdRVlVtTEVjK01rejRScThPNldrTnI3YXROa0g0TThkK1NEMXQvdFN6dDNvRnFsK25lVnMrQXdFSTVKYUJKYXhBUnRZMlo0bUtvVXF4ZHM0VXBaMHN2M3pJYk5vbzBKNGZpaGxkUVRYM1hOY3VOY1ptY3JCNUxUV01kemVSdUF0QmszY1pIWVFGNmdUaTNQTnVESjBubVIrNExQTG9IdnhRSXhSZ0o5aU5OWHFmMlNZSmhjdkN0SmlWV284NVRzeUZPdXE3RXlCUEpyQWRoRWdFMGNUcTE2RlFYaFlQSkZxU2ZpVm4wSVFuUE95MExiVTRCZUc5NFFqZFlOQjBDaVEzUWF4UXFEMmViU01pTmphVmF3OFdhTTRaNVduemNWRHNyNGVHd2VTTGEyREUzQldWaWF4aFpGSWNTVGpneE5DQWZlbGcraHpuVk9Zb2U1VnFUWXMxZzdXdGZUbTNlNC9XZHVDNnArcXFBTThINFp5ckpDR3Bld1RoVERQZTZIN0N6WC96UThUbStyNjVIZVpuK01zbXhVY2lFV1BsQVZhSy9WQmFRQldmb0cvYVJML2pTWklRZmVwLzg5R2phc1dtYmFXemVFWjJSMUZPanZ5SlQzN085QjgwNDZTUlNLVkVuWFdsQnFia2I1WENTM3FGZXVFOXhiOStmckVrbnhXQjVoMUQvaHJ1ejJpVkRFQVM3K3FrRXo1T3Q1YWdISmM3V0NkWTk0V3M2MXNVUmNYNW5HOFVFTEdCQUhaM2krM1Z1bEF5VDBuS05OejRLMkxCSEJXSmNUQlgxd3pmKy8vdS9qLzkrLy92ODcrOS9sOUxiaC9ML3V5TllpVHNXVjJMd3NqYUE2TXhUdXpGTXFteFc4SncvK0lwcGRYOHQvQ2xnaTFySTFTTjBVQy9yNnRYLzRsVWMyVlYxT1FSZVNlQ3NqVXBLWmNodzRYVWNqSGZ3NnJ5Q1YzUjhzNlZYbTY3dnA0bitsY1BWOWdKd21iS1FFc21ySmk5YzJ2a3dybThIRmJWWU5UYVJHcThEOTF0OW41K1UrYUQvaE50TjNIakMvbkMvdlVvR0ZTQ2tYUCtObFJjbUxVcUxiaVVCbDRMWWYxVS9DQ3Z3dGQzcnlDSDhnVW1HSVRBeGlIMU81cm5HVHo3eTFMdUZqbW5GR1ExVVd1TTdId2ZYdFdsMmZQRktrbFl3TlVwRjJJTC9UbWFSRVRqUWlNNVNKYWNJKzNHdjVNQlU4bFA1SW82Z1drYXdweXpORVZHcU9keDRZbE8xZEN2amJXRlpXYkNtZWlGS1BTbE1LdEtjTUZMcy9LUXh0Z0FIaTdOWk5DUTMyYkJBVzJtYkhmbFZaOHdYS2kxSktWSGtXMjBibllubDNkS1dKZVdKT2lYM29LUEJENlpiaTBadlNJdVdrdFVIQjhxRFI4RE1NaDFaZmtCTDlGUzl4NXIwaEJHTEo4cFVDSnYzTllIK0FlOHA0MG1aV2Q1bTVmaG9iRmpRZVF2cVRUNFZLV0lZZlJMMHRmYVhLaVZsNzVoSFJldVRKRWNxVmx1ZytlT0lJYzRiZEl5ZHRuMkswaU5aUHNZV1F2UWlvMnFiTzNPcUFsUEhERE9CN0RmakdFZlZGNTFGcXFOYWNkNlFtZ0ZLSnBNZkxwNURIVHY0d1hsT05LVlhGOXpUSnBEVjRtMXNZWnFKUGhvdGNzbGlaTTh5a3NLa0NrenBpWHQrRWNSUXZTUXFtQlM5V2RXa3hNVEpYUFN3OTRqcUkzdmFyQ2pReFRhempsTUg4alRTOGlsYVc4MDE0L3Z3QS9MTmErWWlGb3l5eDNzL0tzd1AzTzhRVzFqdHE0NXlUTS9EWDlhOE00dm9UVmFPMmVidncxRW9vRHcveWc2WTFmYVkrV3dyZFZzNVl0MGhRNUV3UmZZWFNGeHJheTFZdlNNK2tZbWxwTEcyLzltbTFNZm1iS0hYcjQ0SWg4blZLYjFNNTM3WkFOVWtDdGRzUFo4MEpWS1ZLYWJWSENhZGFMWGcrSVY4aTVHU3dwWnRpMGg2ZGlUYUtzOXNkcFVLRXBkN2pEVXBZbUh0aVgzM1NLaU8zdHV5ZGtheEE3cEVjOVhJUUVPZldKbHN6ajVZcEw1YktlUXlUN2FaU0JPYW12U0hsOHhzV3ZnbzI2SVAvYnFrKzBFSlV6K2dra2N2bFVseVBwMmtkS0Z0dDd5NWFDZGtzOVpKSmNGcDVaV2VhV0tndG5YTU4zT1J3R0xCRTBQdGtFSWVrNUZZMmFWc3NVWkh0c1dJdm5sak1WSnR1VklqcFp1cC81VkwxeVBPSFdXSGtPTWM2WXlTV01ja2N6RDVqVWoybWxMVnF1RmFNVThsZUdWYXFlWGlzK2FSUkw4em00V3VCazZjeVdmR014Z3RyOHVzZVFFeDdrL1B2Um9aeWQ5bmRlMUdVQ1Y4NGdNWDhPZ3UvQldlellQU1IyN2xselFuQTk3b28wcFl5eG9iWVVKZnNqK3lzVG05ekorUzRwazBUR285VlRHMEtqcVloVG1BTGZvRFpWS2xhMmI1eWh2MjQxUHhGYUxKczNpMDVLMEFBSWRjR3hDSlptVDNaZFQ3Q2xpUjdxK2t1cjdXZFFqeWdZdE9XUkw5QjhFNHM0TEk4S3BBajdiRTBkZzdETE9hWCtNR2VBaTBoTU1TU1daRXorUnVkWGJaQ3NHWVMwUXFpWGpIOVhRYmQ4c0NCK25JVlRxNy9UL0ZEUyt6V1k5cTdaMmZkcTF0ZExiNnYzaEtLVkRBdzVnamo2bzlyMXdIRlJPZEhjMThNSnA0U0oyVWN2dStpUTlFZ2tla1c4VkNNK3BzTTZ5Ky8yU0J5OHROTjRhM0wxTXpQK09Mc3l2RVNvNWdTN0lRT25JcU1tdmlKQlZjNnpiVkcxbjhlWGlBM2o0NmttdnZ0Smxld3dORHJ4azRTYkpPdFAvVFYvbElWSzl1ZVNoTmJiTUhmd25MVExMaGJadU83OWVjNVh2ZmdSd0xGSyt3MXI1WldXMTVyVkZackUrd0txTlJ2NUtxc0xOZnBHZ25vVVU2WTcxTnhFbU43TXlxd3FBUXFvSVVMT3cvTGJ1VUIyK3VFNzVnSnQra3ExcVk0TG94VitxUi96YWx1cGVhM0Q1K1dNZWFSSW4wc0FJNkREV0RoMTU4ZnFVYjRZaEF4aFJFYlVOMHF5eUpZa0JVNFYyS0FSWERUNjVnVzNnUnNpdjd4U1BZRUtMd3pncmlXY1dnUHIwc2JabnY3bTFYSE5GVzZ4UGRHTlpVZHhGaVVZbG1YTmpEVld1dTdMQ2tYL25Wa3JYYUpoaVlrdEJJU0MyeGdCWFFuTkVQK2NwdFdsMWVHNjJhN0NQWHJucmtUUTVCUUFTYkVxVVpXTURpWlVpc0t5SERlTEZPYUpJTFVvNWY2aUR0NFpPOE1scWFLTHRvMEFtVEhWVmJrR3V5UGExUi95d1pzV1JvUkRvUmROTU1Id1lUc2tsTVZubEFkMlMwMjgyYmdNSThmaUpwRGg2OU9TTDZLM3FibzIwS2ZwTk11cm5ZR1FTci9zdEZxWjdoWXN4S2xMbktBS2hzbUI4QUlwRVE0YmQvTnJUTFRYZWZzRTZDaFJtS1dqWEtWZ3BHb1BzOEdBaWNnS1Z3NEswcWdEZ3kxQTZoRnExV1JhdDNmSEYrRmtVK2I2SDROV3BPVTNLWFR4ckliMnFTSEFiK3FobThoaVNST2kvOW9mYXBqeGh5S3h4bnRQcGdlNktMNVo0K1dCTVlrQWNFNiswSGQzWWgyekJzSzJNVjNpVzBZNmN2T0Nyb1hsUmIyTU1KdGRXeCszZGtGekdoMlBlM0RaOVFwU3FwYVIvckUxSW1PckhxWVl5Y2NwaUxDMjJhbUpJalJXVkFoZXJUZnBRTG1vNi9LMnBuYTg1R3JEdVFQbEgxVHNhcjhpc0FKYlhMYWZTd09vZjRnZzlSa0FHbS9vWXBCUVFpUFVveURrMkJDUTFrK0tJTHE0OEVyRm80V1NSaEhMcS95N21ndzMrTDg1UHBQNnhXcjZjZ3A5c09qWWpLYWdPcnhGMTQ4dWh1YVd0amV0OTUzZmgxSVFpRXpnQytkMklnQkNjVVpxZ1RBSUNtMmJSOG9DakRMQnNtZytUaHloZkQrekJhbHNLQlkxQ2U1NFkvdDljd2ZiTHU5U0Z3RWdwaGZvcE5BM3lOeGd5RGFmVU0zbVlUb3ZaTmdQR2RkNFpGRk9qMXZ0ZkZXM3U3TitpSEVOMUhrZWVzRE1YS1B5b0NEQ0dWTW80R0NDRDZQQmhRM2RSWklIeTBZLzNNYUU1elU5bVRDcnd3blpvanRFK3FOcE1Ta0pTcG1HZTBFekx5RmVsTUpxaGZGUTdhNTB1WHhaOHBDYzJ3eHRBS1dnSG9lYW1SMk83UiticTdJYlBZSXRPMGVzZFJnb1RhWTM4aFpMSjV5MDJvSVZ3b1Bva0dJenhBTUR1YW5RMXZuMldEUTAwUmg2bzVRT2FDUnU5OWZ3RGJRY04wWEF1cWtGcHhUL2NmejNzbEdSVm9rck5VMGlxaU1BSkZFYktTY1pkbVNrVFV6bkMwVStNZndGT0dkTGdzZXdSeVBLd0JaWVNteTZVMzI1aVVoQlFOeGJBQzNGTEtEVjlWU091UXBPT3VrSi9HQW11L3R5RWJYOURnRXA2ZHYxem9VMElxenBHNmdzc1NqSVlSVlBHZ1UxUUFRWVJnSVQ4Z0VWMEVYcjFzcWVoMkk2clhqdG1vQ1l5RURDZS9Qa0ZFaS9RNDhGdVQyOXA1NTdpTitMQ3drNUNLL0NaMldkQWRmUVpoMlo5UUdyelBMU05SajVpZ1VXemw5VmkwckNxSDhHMUtwNFFNTGt1d01DQXlwZHZpRFh5T0lrMEFIVE04SEJZS2gzYjAvRitEeG9OajRaZG9aZkNwUVZkblphcnFvTWFIV25NTE5WY3lldnl0R3NyWFFFb0lidWJxV1lObzdOUkh6ZGMwenZUMjFmV1Zpcmo3ZzM2aXk2cHhvZ2Z2Z0hwMXhIMVR1cmJ6OFF5eUhuWGVCSmljcFlVY3RiekFwd3paMUhUK0ZQRVhNQWdVWmV0Z2VHTXd0NEcrREhpRFQyTHUrUFQyMWZqSkNBZlYxNmEvV3UxUHFPa1VIU1RLWWhXVzZQaGhIVWxOdFd6Rm5BN01iWStyNjR2a3dkcGZOQjJKZldnV1hBdmt6ZDQySzRsTjl4N1dyZzRrSUtnWENiNG1jVzU5NU1DUEovY1RmUEFNUU1GV3ducXdkZTR3OEhaWUpGcFF3Y1NNaGpWejRCOHA2bmNTQ04xWDRrbHhvSUg0Qk4ySjZ0YUJNajZsSGtBT3M4SkpBbVhxNXhzUXRyUElQSUlwL0hHNmkyMXhNR2NGZ3FEWFNSRjB4UWcxNGQydXk2SGdLRTEzTFN2UWU1Mm9TaEY1SngxUjZhdnlMNHRoaFhRWkhmQzk0b1p6dVBVQktGWWYxVnZEYXhJcnRWNmROR1N4N0RPMGkxcDZDekJrdUFtRXF5V2NlUVk3RjkrVTBPYllEem9hMWlLYW8vY09EL3Y2UTlnSHJycjF1Q2VPazhmU1Q5TUcyM1VsMEttTTNyK1duNkhpNldBY0w3Z0VlYXlraWN2Z2p6a2pTd0ZzQVhJUjgxWng0UUo2b29zVnlKa0NjVCs0eEFsZENjaWhxdlRmOTRISFVQWFlwM1JFSWFSNGRocFFGNitGSzFIMGk5aTdQdmg4b3d1M2xPNFBUMWl1cXUrRGtMMkJqOStrZGZHQWcyVFh3MDNpTkh5b2J4b2ZMRTJpYmpzWURQZ2VFUWxSTVI3YWZYYlNHUWNuUGpJMkQrc2R0bXVRNzcxZGJBU1VzRG5kVTd0NThqcnJOR1J6SVN2d2lvQWxIczVGQStjQkU1Q2N6bmtkOE5NVjZCUjZrc25LTFBabk1VYXdSRFUxTVovaWIzeENka1RibEhLdTRibE5peWxINW4yMTN5TTB6dWJFaWUwbzRKaHpjZkF5M0g1cWgybDE3dUxvb0JOTGFPK2d6b25USDJ1RjhQUXU5RXlIK3BqR3NBQ1RNeTRjSHpzUGR5bVVTWFlKT01QM3lUa1hxdk8vbHB2dDBjWDVla0RFdTlQVWZCZVpPRGtGdUFqWENhR2RpNmV3NHF4SjhQbUZmd21QcGtnUWpRbFdxb21GWTZVa2ptY25BdEpHNzVFVlIrTnB6R3BQMUVmNXFVVWJmb3dyQzN6Y1NMWDNCeGdXRWdFeC92OWNQOEg4dTFNdnQ5L3JNRFlmNnNqd1UxeFNPUEJnekZFZUpMTVJWRnRLbzVRSHNVWVQ4WlJMQ2FoMjc1OTlFdXFvQzlQWWpZTzZhb0FNSEI4WDFPSHdFQVlvdUhmSEIzbnliMkIrU25aeE0vdncvYkN0T1JqTE1TeTVhWm9FcHZnZEd2bEpmTlBGVXUvcDdaNFZWSzFoaUkwL1VUdUIzWlBxNG9oRWJtN01udGdjMWV2RXRrbmFvc2daU3duREMyQmRNbWlicGVnNDhYOEl4bCsvOCt4WGRic2hRWFVQUHZ4OGpUM2ZrRUxpdkhTbXFiaGJsZk5GU2hXQXlRbkozV0JVNlNNWVNJcFREbUhqZExWQWRsQURkejlnQ3BsWnc2bVRpSHFEd0lzeGJtOUVyR3VzaVZwZzJ3OFEza2hLVi9SOU9qOFBGZUY0M2htVy9uU2Q5OW5aemh5akNYM1FPWmtrQjZCc0g0SDg2NldHeXY5RTBoVkF6UFlhaDJ0a1JmUVpNbVAycmluZk9lUWFsZ2Uwb3ZoZHVCakpzOWExR0J3UmVlcmNlaWZ5NDljdE9oNS82NUFUWXVNc0FrVmx0bXZUTEJrNG9IcGRsNmkrcDhEb05qNEZiMnZoZEZZZXIySlNFaWxFd1BkNW41ek5vR0JYRWpyZWcvd2gyTkZuTlJhSVVIU09YYTRlSlJ3eWdab1g2dm5XbnFWZENSVDFBUnhlRnJOQkordHNkb29Nd3FuWWhFN3pJeG5EOHBaSCtQME51MXdXeENQVEFEZk5XbXF4NjI2SUJKSnE2TmVhcGNHZU9tYnRYdmwwVGVXRzBZN09HR1Y0K0VIVHROQklUNVdkMEJ1amw3aW5YZ1pnZlhUTTVlZkQzcURUSjU0Tzl2M0Jrdit0ZElSbHExa1hjVkQwQkVNaXJtRnhnbE5QdDVwZWRiMUFueHVDWU1DaFV5a3dzVElXcVQyM1hEcHZUaUtFcnUxY1RjRU1lbmlCK0hRRGVoeFBYTm1rb3RGZHdVUG5pbEIvdTROeDVYYzZsOEo5akgxRWdLWlVVdDh0OGN5b1psZURCRXQ4b2liRG1KUkFvTUtKNU9lOUNTV1M1Wk1FSnZhY3NHVmRYRFdqcC9ZcGU1eDBwOVBYQjJQQXd0MkxSRDNkK2Z0TmdwdXl2eGxQOHBCODRvQjFpNzN2QVZwd3lybVhXNzJoZlc2RHpuOUprajQrKzBWUTRkMEtTeDFBc0RBNE90WFhEbzYzL3crR0QrekM3dzVTSmF4c21ubFlSUTRkZ2RqQTd0VGwyS05MbnBKK212a29EeHR0MWE0b1BhWDNFVnFqOTZvOXNSS0JRcVU3Wk9pdXBlQUl5TE1EK1kzWXdIeDMwWFdIQjVDUWl3N3EzbWoxRURsUDJlQnNaYno3OWF5VU1ieUhRN3M4Z3U0TGdpcDFMaUdKajdOUWo5MDUvK3JnVVlLQUE1cWRybEhLSWtuV21xZnVSK1BCOFJkQmtEZy9OZ25sVDg5RzcyaDJOdnlTbmo3VXlCd0QrbWkvSVdzMXhXYnh1VndVSVZYdW41Y01xQnRGYnJjY0krRElManNWUWc2ZWVxMGl0aVJmZWRuODlDdnlGdHBreGFhdUV2U0FOdVptQjFwOEZHUGJVOTRKOW1lZHdzWjlIa1VZam1JN09INUh1eGVuZExieFRhWXJQdUlmRTJmZlhGS2hvTkJVcDMzSHNGQVhtQ1YvVnhwcTVBWWdGb1JyNUF5OTNaTFJsZ2FJUGpoWmpYWlpDaFQrYUU1aVdBWE1YMG9TRlFFdHdqaXVoUVFJdFRRWDVJWXJLZktCK3F1ZVROcGxSMUhvZmxvNS9JNmFQUG1BQ3dRQ0UyalRPWW81RHoxY3M3U29kMEtURy8za0VER2sza1VhVUNPTjE5eFNKQ2FiM2tOcFdaaFNXa084bCtTcFc3MFduM2cwY2lPSUpPNUpYbWE2ZGJvczZqeWlzdXhYd1VVaGoyKzF1R2hjdnVsaUt0V3dzVVR3NGdpMWMvZGlFRXBaSG9Lb3hUQmVNRG1oUGhLVHg3VFhXUmFrVjhpbUpSMzU1RGNJSGtSOUlSRUh4b2hQNFRieVI1THRGVTI0dW1SUFJtRVlIYnBlMUxnaHl4UHg3WWdVSGpOYmJRRlJRaGg0S2VVMUVhYlh4OEZTM0pBeHAycndSRG9lV2tKZ1dSVVNLdzZnR1A1VTJQdU85VjRadWlLWEdHekZRdVJ1Zit0a1NTc2JCdFJKS2hDaTNFTnVMbFhoUGJqVEtENGRqWFZuZlhGZHM2WmIrMVhpVXJSZnlheUd4SnExK1NZQkVmYktsZ2ppU21rMG9yZ1RxelNTK0RaNXJUcXNKYnR0aU50cCtLTXFHRTJBSEdGdzZqUXFNNXZENnZNcHRtWFY5T0FqcTQ5VWYvTHg5T3BhbStIbjVPOXA4cW9CQkFRaXh6UVo0ZU5Wa085c1B6SkFNeVIxeTQvUkNRUTFzMHBWNUtBVTVzS0x3M3RrY0ZiSS9KcXJqQ3NLNE13K1c4YW9kNGxpb1l1YXdVaUN5VldCRS9xUGFGaTVibmtncGZ1L2FlNDcxNzRySTFmcVFvVGJXMEhyVTZGQWVqcTdCeU0wVjR6a1pUZzAyL1lKSzJON2hVUVJDZVo0QklnU0VxZ0Q4WHNqekc2TElzU2J1SG9JZHovTGhGemJObjFjbGNpMU5IV0owLzYvTzhISk1kSXBFWmJxaTFScnJGZm9vL3JJLzd1Zm0yTVBHNWxVSTBJWUo0TUFpSFJUU09GSjJvVHZlckZIWVhUaGtZRklveUZ4NnJNWUZnYU9LTTR4TldkbE9uSWNLYi9zdXB0cHRnVE9UZFZJZjRZZ2RhQWpKbklBbTRxTk5ITlFxcUF6dmk1M0dreVJDRW9zZVVCckhvaFpzalVia1I4Z2ZLdGMvK09hNzJsd3hKOE1xNkhEZkRBVGJmYkpoemVJdUZRSlNpdzF1WnBySGx6VWY5MFdncUc3NnpPMGVDQjFXZFB2MUlUNnNOeHhoOTFHRUwyWXBnQzk3aWtGSHlvYUg5Mm5kd2R1cVo2SVlqa2cyMERYMzNNV2RvWms3UWtjS1VDZ2lzSVlzbE9hYUx5dklJcVJLV1FqMTZqRTFEbFFXSkphUG9wV1RKalhmaXhFalJKSm84ZzQrK3d1UWpicStXVllqc3FDdU5JUVczWWpueEtlMk01WktFcXErY1g3WlZnbmtic1UzUldJeVhBMXJ4djRrR2Vyc1lKakQvL2F1bGRYR21jRWJjZlRlRjE2WTE3MDhGQjFISWZtV3Y2ZFNGaTZvRDRFK1JJakNzRVora1k3ZEtud1JlSkp3M3hDakt2aTNrR040MnJ2eWhVbEl6MEJwK2ZOU1Y1eHdGaXVCekcyOTZlNXMvb0hvRnRVeVVwbG1QdWxJUGwrZTFDUUlRVnRqbHpMenp6YlYrRC9PVlF0WXpvNWl4dE1pNUJtSHVHNE4vdUtmSms1VUlSRXA3KzEyb1psS3RQQm9tWFN6QVkwS2d0YlB6elpvSFF4dWpuUkVVZ0JVK08vaktLaGd4VmhSUHRicXlIaVVhUndScEh2N3BnUlB5VXJuRTdmWWtWYmxHbWZUWTI4dEZDdmxJTEMwNFR6M2l2a05XVmF6QStPc1lyeHZSTS9oaU5uOEZjNGJRQmVVWkFCR3g1Uy94RmY5TGJibWsyOThYN2lGZzJ5ZWltdnNRcXFKK2hZYnQ2dXErWmY5akMrSmN3aWNjZDYxTktRdEZ2R1dyZ0ppSEI1bHdpNmZSOEt6WVM3RWFFSGYva2E5RUM3SDhEK1dFYTNURUFDSEJrTlNqL2NYeEZlcTRSbGxDK2ZVRm0yeHRzdFlMTDJub3MxRGZ6c0M5dnFERGRSVmNQQTNIbzk1YUVRSHZFeFZUaFhQcXltNjVsbGtLbGZSWGJQVFJpRGVwZHlsSGptVjlZVFdBRWpsRDlEZFFuQ2VtN0FqL21sNThPbjM2NjM5MjIxNEI1enJtUXovOXlTRzJtRnFFd2pxNXNGbDV0WUpQdzVoTno4bHlaUFVUc3I1RTBGMkM5Vk1Qblpja1dQNyttYndwL0JpTjdmNGtmN3Z0R25aRjJKR3ZqSy9zRFgxUnRjRlk1b1BRbkU0bElBWVY0OVUzQzlTUDBMQ1kvOWkvV0lGSzlPUmp6TTlrRy9LR3JBdXdGbWdkRXBkTGFpcVFOcENUR1pWdUFPNjVhZmtZMWgzM2hycXlMalp5OTJKSzMvdHdkajlwYWZGY3dmWE9ObVBRV2xkUGxNZTdqbFAyNEpzMHY5bThiSUo5VGdTMkl1UnZFOVpWUmFDd1NKWU90QWZMNUgvWVM0RmZ6S1dLYmVrK0dGdWxoZXlLdERObEJ0cmRtcitLVStpYkhUZGFsekZVbU1meHczZjM2eCszY1FiSkxJdFNpbFc5Y3V2WkVNakt3OTg3anlrWlJsc0gvVUkrSGxLZm8ydEx3ZW1CRWVCRnRteEYyeG1JdEEvZEFJZlErclhubTg4ZHF2WGErR2FwT1lWdC8yd2FGaW1YRngzVEMyTVVpT2k1L01sKzNyai9ZVTZJaHgyaFhnaURYRnNVZVFrUkFENndGM1NDUGkyZmxrN1h3S0FBNHpib3F5bnVFTEQzMTJFSjg4bG1ERVZPTWExVy9LL2E4dEd5bFpSTXJNb0lMeW9NUXp6YkRKSE5acmhINzdMOXFTQzQySFZtS2laNVMwMDE2VVRwODNnT2hDd3o5WEl0SzlmZ1hmSzNGNWQ3blpDQlVla29MeHJ1dFFhUEhhMTZSanNhMGdUcnp5anFUbm1jSWNyeGc2WDZka0tpdWN1ZGMwREQ1VzRwSlBmMHZ1RFc4cjUvdXcyNFlmTXV4RlJwRDJvdlQybUZYNzl4SDZKZitNVmR2MlRZcVI2Lzk1NVFnVlBlM0pDRC9XakFZY0xBOXRwWGdGaUVqZ2UySjVsamVJL2lVemc5MUtRdUhrSUk0bW1IWnhDM1hRT1JMQUM2Rzd1Rm41TE9tbG5Ya2pGZG9POTc2bW9OVHhFbFM4SGR4V29QQWtqam9jRFIxMzZtMmwrZjV0NnhhYU5nZG9kT3ZUdTByaWV2bmhOQUI3OVdOclZzNkVzUGdrZ2ZhaEY5Z1NGenpBZCtySlNyYXc1TWxsaXQ3dlVQNVl4QTg0M2xVcHU2LzVqQVIwUnZINHJSWGtTZzNuRStPNUdGeWZlK0wwczVyM2swNUZ5Z2hTRm5LbzRUVGdzMDdxajRuVExxT1lqNnFhVzlrbkpURGtGNU9GTVlibUNQKzhIMTZUeTQ4Mk9qdkVSVjZPRnl3MDQzTDl3M2hvSmk0MDhzUitTR28xV3ZpWFV1OGQ3cVMrZWhLanBLd3hlQ3Roc20yTEJGU0ZlZXR4MHg0QWFLUHh0cDNDeGRXcUNzTHJCMXMvajVUQWhjMWpOWnNYV2w2dGpvL1dEb2V3eHpnOFQ4Tm5oWjFuaVV3TC9uaGZ5Z0xhbkNuUndhRkdEeUx3K3NmWmh5WjFVdFlUcDhUWUI2ZEU3UjNWc0tLSDk1Q1V4Sjh1OE4rOXUyLzlIVU5LSFczeDN3NUdRcmZPUGFmazJ3NXFacThNYUhUMGViZVkzd0lzcDNyTjlscnBJc1c5YzF3czNWTlYrSndOejBMbzkrVjd6WnI2R0Q1NldlNmdXVkl2dG1hbTVHUFBrVkFicjc0cjZTd2h1TCtUUlh0Vy8wcGd5WDE2Vk5sNC9FQUQ1MFRuVVB1d3JXNk9jVU8yVmxXWFMwaW5xODcya2s3R1VsVzZvL296RktxK1NpcDZMY1R0U0RmRHJQVGNDSGh4NzVIOEJlUm9uK0tHMndSd3pmRGdXaEFMbWlXT01PNmgzcG0xVUNaRVBFalNjeWs3dGRMeDZXcmRBMk4xUVRQRU52Tm5oQ1FqVzZrbDA1Ny9xdjdJd1JyeUhyWkJDd1ZTYkxMbkZSaUhkVHdrOG1sWWl4RnQxc2xFY1BEN0ZWaHQxM0h5cVZleUQ1NUhPWHJoMkVsQXhKeWluR2VvRnp3S0E5MXpmcmRMdkR4SlNqem1JbWZ2VGlzcmVJMjVFRGNWZkdzbXhMVmJmVThQR2UvN05tV1dLalhjZFRKMTFqQWxWSVkvQnYvbWN4Zy9RMTB2Q0h3S0cxR1cvWGJKcTVueERoeUxxaW9ybjdXZDdWRVZMOFVnVnpwSE1qUStaOERVZ1N1a2lWd1dBS2tlVGxWVmVaN3QxREduQ2dKVklkQlBaQUVLNWY4Q0R5RE5vN3RLNC81REJqZEQ1TVBWODZUYUVoR3NMVkZQUVNJNjhLbEJZeTg0RmlldmRVOWdXaDZYWnJ1Z3Z0Q1ptaTl2ZmQ2ZGI2VjdGbW9FY1JIbkczNlZaSDhONGFaYWxkcTl6WmF3dDF1QkZneFlZeCtHcy9xVzFqd0FOZUZ5K0xDb3lteU02emdHN2o4Ykd6VXlMaHZyYkprVFlBRWRJQ0ViNGtNS3VzS1Q5VjNlSXdNTHNqZFVkZ2lqTWMrN2lLcnIrVHhyVldHMFUrVzk1U0dyeG54R3JFNGVhSkZmZ3ZBalVNNFNBeThVYVJ3RTlqNlpRSDVxWUFXR3RYQnl2RGlMU0RmT0QweUZBM1VDTUtTeVEzMGZ5eTFtSVJnNFpjZ1pITE5IV2wrYzlTZWlqT3ZiT0p4b1F5N2xUTjJyM1k4cDZvdnh2VVk3NGFPWWJ1VmV6cnlxWEE2VStmY3A2d1NWOVg1L09aS1AxOHRCNTZVYTBnTXl4Skk3WHlOVDdJcnFOOEdzQjlyTC9rUDVLTXJqWHhncUtMRGErVjVPQ0g2YTVobU9XZW1NVXNlYTl2UWw5dDVPY2U3NlByVHlUdjUwRXhPcW5nRTNQSFBmU0wvL0FJdFBkQjdrR255VFJoVlVVRk5kSkoyejdSdGt0WndnbVF6aEJHL0c3UXNqWm1KZkNFN2s3NUVtZElLSDd4bG5tRHJOTS9YYlRUNkZ6bGRjSC9yY1JHeGxQcnY0cURTY3FFN0pTbVFBQkpXcVJUL1RVY0pTd29RTSsxanZEaWd2cmpqSDhvZUsyaW4xUysveU8xajh4QXdzL1Q1dTBWbkl2QVBxYUUxYXROdU4wY3VSbGlMY0gyajBuVEw0SnBjUjd3OVF5YTBKb2FIZ3NPaUFMTENDelJrbDFVVUVTeit6ZS9nSVhIR3REd2dZcks2cENGS0oxd2ViU0RvZzR6VGxQa2dYWnF4bFFEaVlNamhEcHdUdEJXMld4dGhXYm92OWR0Mlg5WEZMRm1jRitlRWMxVWFRNzRncVppWnNkajYzcEgxcWN2M1Z5OEpZY2lvZ0lWS3NKOFl5M0o5dy9HaGpXVlNRQW1yUzBCUE9XSytSS1YrMGxXcVhnWU1uSUZ3cGNaVkQ3elBTcDU0N2k5SGxmbEI4Z1ZuU1RHbW1xMUNsTzA4MU9XL1VIMTFwRVFNZmtFZERGempMQzFDZG8vQmRMM3M3Y1hiOEorK0h6ejFyaE9VVlpGSVBlaFJpWjhWWXU2KzdFcjdqNVBTWnU5Zy9HQmRtTnpKbXlDRDl3aXN3ajlCWncrVDNpQnJnODFyZTM2aWhNTGpvVkxvV2MrNjJhMVUvN3FWWDVDcHZUVkY3cm9jU0FLd3Y0Y0JWcVptN2xMRFMvcW9YczRmTXMvVlFpNkJ0VmJOQTN1U3pLcFFmakgxbzN4NExydmtPbjQwemhtNmhqZHVEZ2x6SlV3QTBQT2FiZ2RYSW5kcDlmemhPbzIzUGUrUms5R1NMWDBkNzFQb3FyeThOUURUek5sc2ErSlRORzkrVXJFZituZ3hDakdFc0RDYzBieit1ZFZSeUhRSTFqbUVPM1MrSU9ReWNFcTdYd0I2ejN3Zk1mYTczbThQVlJwK2lPZ3RaZmVTQmwwMXhuMDN2TWFRSmt5ajd2bmhHQ2tsc0NXVlJVbDR5KzVvTlV6UTYzQjJkYmpERjN2aWtkLzNSVU1pZlBZblg1R2xmdWsyRnNWLzdScWpJOXlLVGJFOHdKWSs3NHA3cVhPOCtkSVlnanRMRC9OOFRKdFJoMDROOXRYSkE0SDU5SWtNbUxFbGd2cjBRNU9DZVZmZEF0KzVoa2g0cFFnZlJNSHBMNzRYYXRMUXBQaU95SFJzL09kbUh0QmY4bk9aY3hWS3pkR2NsSU4xNmxFN2tKK3BWTWpzcE9JKzUrVHFMUk82bTBacE5YSm9aUnY5TVBEUmNBZkpVdE5aSHlpZy9zMnd3UmVha0ZnUFBKd0NRbXUxSTMwL3RjQmJqaStOYTUzaTFXMU4rQnFvWTdaeG8rVS9NOVh5SjRPazJTU2tCdG9Pcnd1aEFZM2EwM0V1Nmw4d0ZkSUcxY04rZThob3BUa2lLRjA5M0t1SC9CY0IzOXJNaUdETG42WFZoR0tFYWFUL3ZxYi9sdWZ1QWRwR0V4ZXZGMStKOWl0a0ZoQ2Z5bVdyOXZHYjNCVEs0ajU5OHpSSDcrZStNVTltYXJ1WnFiMHBrR3hSRFJFMUNENFo4TFY0dmhnUGlkazV3MkJxODE2ZzNuSHcxLy9qM0pTdHo3TlI5SElXRUxPOFRNbjNRclAvelpwLy8rRHY5cDQyOS9vZ3YrR0FUUituL1VkRituczl4TmtYWlFKWFk0dDlqTWtKTlVGeWdBdHpuZFh3anNzK3lXSDlIQW5MUVFmaEFza2RaUzJsMDFITFd2N0w3dXM1dVRINDA5cHFpdHZmU09RZy9jK1p0N2s4NzlQM0s5K1dWNjhuNyszY1pmdVJkL2REUFAvMDNybitkKy9uQnZXZmdEbHQ4K0x6anFKL3Z4M0NuTk93aVhoaG83NzhDOTZpRCsxVEJ2UlpZZVArRUg4MUxFMHZWd09Pcm1DTEIzaUt6STF4K3ZKRXNyUEg0dUYwVUI0VEo0WDN1RGZPQ28zUFlwWWUwTUY0Ym91aDBEUS9sNDNmeFVGN1krZHBXdXZUU2ZmQjB5TzJVUVVFVEkvTHdDWkUzQnZuZXZKN2M5elVsWTNINTh4emtlNkRORkRRRzhuMFd0RE40TEFZTjRub2dLYXYxZXpPZksveit0NnRzQ1RwK2RoeDR5bWpXdUNKazFkRVVpZkRQK0h5UzRpUC9WZzlCMmpUbzlMNE5iaUJ1RFM0bnV1SFc2SCtKRFFuMkp0cVJLR2tFUVBFWUU3dXphelhJa2N4SUFxVXExZXNhc1pCRVRsRVpZN3k3Sm8rUm9WL0lzalk5ZUlNa1V2cjQySGMweHF0c2F2WnZoejFPTHdTeE1PVHVxemxoYjBXYmRPd0JIOUVZaXlCamF0ejQwYlV4VEhiaVd4cUowdW1hMTlxaFBydXZjV0psYmlTU0g0OE9MRERwYUhQc3p2eWN0NDFaZlR1MTArdmpveDZrT3FLNnYwSy9nRVBwaEV2TWwvdndTditBNEhobTM2SlNQOUlYVHlDWkRtNGtLc3FENWF5OGIxU2FkL3ZhaXlPNU4vc0RmRVY2WjRxOTVFK3lmanhwcUJvQkVUVzJDN3hsNHBJTzJiRE9EREZ1clVQd0U3RVdDMlVwbHErQUhtQkh2aXIyUFNna1IxMi9SeTY1TzBhWnRRUGVYaTltVGxGL1dqNUdRK3ZGa1l5aFhzTFRqckJTUDlod2s0R1BxRFA1ckJuNS9sOGIwbUxSQXZSU3pYSGMyOTNiczNzOEVzZEUzbTJleHhpZFdWQjRqb0hSK1MrZHo1L1crdjAwSzNUcU4xNENEQnRoOGVXY3NUYml3WFBzeWdIZEdpZDBQRWR5NkhIbTJ2L0lVdVY1UlZhcFltekdzWDkwbXBuSWROR2NPT3E2NERiYzVHVWJZcEQ5TTdTKzZjTFkvL1FtanhGTFA1Y3VURlJtM3ZBNXJrRlpyb0ZuTzNiakhGMzV1VTNzOG12TDdUcDlueVRjNG15bVRKNXNMSXA3dW1TbkdrTzIzZmFlaHR6M21tVFM3ZmJWeDVyUDd4M0hYSWpSTmVxL0EzeENzOUpOQjA4YzlTOUJGMk8zYk91cjBJdHNsRnhYZ1JQZGFhcEJJaTRkUnBLR3hWejdpcjY5dC9iYzlxVHhqdnRPeUdPZmlMR0RoUjRmWXl3SHYxV2RPcGx4SVY4N1RwTEJ5M1djMFFQMFA5czRHN0ZCTk9kSVRTL3RlcDNvM2gxVEVhNVhERGlpN2ZXdHFSelVFUmVQMmZieHo3YkhXV0pkYklPeE9VSlp0SXROWnBURlJmajZ2bTlzWWpSeFFWTytXVGRpT2hkUGVUSis4WWlyUHZvZUw4OGw1aUxZT0hkM2IvSW1rcSsxWk4xRWwzVWlraGZ0dXRlRVl4ZjFXdWpvZjhQcjRJQ1R1NWV6WnlaNHRIUU14bHpVSExZTzJWTU9vTk1HTC8yMFM1aTJvMm9iZmsrOHFxZFI3eHpiUkRiZ1UwbG51SWd6NExlbFE1WFM3eGJMdVNRdE5TOTV2M1pVT2RhVXgvUWQ4cXhDdDZ4ZjJFNjJ5Yi9IdWtMTzZSeW9yVjhLZ1lsNVlOYzc1eStLdmVmcnhZK2xjLzY0eTlrdldQMGEwYkR6L3JvanErUldqTzA2V2VydVdxTkZVN3IzSFBJY0xXUnFsOElDWnN6MkxzL3FPbS9DTG42KytYK1FmN21Hc3BZQ3Jab2QvbHBsNlJ3NHhOL3l1cThncVY0QjZhSGsxaFZFMVNmSUx4V3U1Z3ZYcWJmQVJZUXBzcGN4S3AxRi9jOFhPUHprWnZtb1N3K3ZFcUJMZHJxMWZyM3dBUHY1Tm5NOWk4RitqZEF1eGtQNVo3MWM2dWhLM2VubG5HeW1yN1VzV1pLQzEycWdVaUc4WFhHUTlteG5xejRHU0lseWJGOWVYbWJxajJzSFgrYTFqZjBnUm9PTkhSZFJTcklxMDNUeTg5ZVExR2JWL0JrK2R1NCtWMTV6bHMrdnZFUnZaNEU3WmJueFdUVmpEamI0by9rOGpsdzQ0cFRJclVHeHh1SnZCZU8raGV1aE9qcEZzTzZsVkovYVhuSkRhL2JNMFFsMWNMYlhFL1BidjNFWjN2ajNpVnJCNWlyanVwWlR6bG52Njc3TnJJOVVOWU5xYlBncC9IWlhTK2xKbWs4N3dlYys3WU94VERvMmF3MmwzTmZEcjM0Vk5sdnFXSkJrbnVLN29TbFo2L1QxMHp1T29QWk9lb0lrODFOK3NMODQzV0oyUTRaMGZaM3Njc3FDL0pWMmZ1aFdpMWpHVVJTS1pWNjM3bGY1M1hubngxNi92S0VYWTg5YVZKMGZ2OTFqR2RmRytHNCtzbml3SGVzNGhTK3VkT3I0UmZoRmhHL0Y1Z1VHMzVRYVUrTWN1TG1jbGI1WldtUitzRzVWNm5mK1B4WXpscm5GR3hwWmFLOGVxcVZvME5mbUFXb0dmWERpVC9GblViV3Z6R0RPVHI4YWt0T1pXZzRCWXZ6NVlIMTJaYmZDY0d0TmsrZERBWk5HV3ZIb3YrUElPblk5UHJqZzhoL3dMUnJUNjlzdWFNVlo1Yk51SzAwbFNWcG5xU1gxTk9OLzgxRm9QOTJyWW5kaW9ud2dPaUE4V01mNHZjOGwxNUtxRUVHNHlBbTIrV0FONUJyZnUxc3E5c3VXWXFnb2FqZ09ZdC9KQ2sxZ0M4d1BrSytYS0N0Ulg2VEF0Z3ZybnVCZ05SbW42SThsVkRpcE9WQjlrWDZPeGtwNFpLeWQxTTZHajgvdjJVN2srWVFCTDk1S2I5UFFFTnVjSmIwSmxXM2I1dE9iTjdtL1oxajFldjM4OGQ3bzE1emdYc0k5Q2lrQUdBVmlSNmxrSnY3bmI0QWs0ME0yRzhUSjQ0N2tOK3B2ZkhpT0ZqU1VTUDZQTStRZmJBeXdLSkNCYXhTVnhwaXpIc2VaVXlVQmhxNTl2Rndya3lHb1JpSGJvMGFwd2VFWmVTTHVOaVErSEFla09uYXJGZzAwZFpOWGFQZW9IUFRSUjBGbUV5cVlFeE9WYWFhTzhjMHVGVWg3VTRlL1V4ZEJtdGhsQkRnZzI1N1EzM2oxaEE3SFR4U2VUVFN1Vm5QWmJnVzFub2R3bUcxNmFLQkRLeEVldHY3RDlPak8wSmhyYkpUbm9lK2tjR29ESmF6RlNPOC9mVU45SnkvZzRYSzVQVWt3MmRnUERHcEpxQmZoZTdHQStjanpmRS9FR3NNTStGVjluajlJQWhyU2ZUL0ozUUU1VEVJWXlrNVVqc0k2WlpjQ1ByNkE4RlpVRjRnOW5ucFZtalg5ME1MU1F5c0lQRDBuRnpxd0NjU0ptSWI1bVl2MkNtaytDMU1ERmtaUXlDQnE0Yy9ZYWk5TEo2eFlrR1MveDJzNS9mcklXMnZtRzJXcnYwQVBwQ2RnQ0E5c25GdmZwZTh1YzBPd2RSczRHOTk3M1BHRUJuUUI1cUtyQ1E2bTZYL0g3TkluWjd5LzE2NzQvWlhPVnA3T2V1Q1JrOEpGUzUxNlZIcm5IMUhrSVVJbFRJbGpqSGFRdEV0a0p0b3NZdWw3N2NWd2prM2dXMUFqYWE2eldleUhHTGxwazNWSEUyVkZ6VDJ5SS9FdmxHVVN6Mkg5ellFMXM0bnNLTXRNcU55S050TC81OUNwRkpraTVGb3U2VlhHbTh2V0FURVB3clVWT0x2b0E4akx1d096VkJDZ0hCMkNyNVY2T3dFV3RKRUtva0prZmM4N2grc05IVHZNYjBLVlRwNTI4NFFUUHVwb1d2UVZVd1Vlb2daUjNrQk1FU1lvMG1mdWtld1JWUEtoNStyekxRYjdIS2pGRklnV2hqMXczeU4vcUNOb1BJOFhGaVVnQk5UMWhDSEJzQXo4TDdPeXQ4d1FXVUZqOTJPTm4vQVB5SkZnOGh6dWVxb0pkTmo1N1JPckZiZmZ1Uy9YeHJTWExUUmdqNXV4WmpwZ1FZY2VlTWMyd0pyYWhSZVNLcG0zUWpIZnFFeFRMQUIyaXBWdW1FOHBxY1p2OExZWFFpUEhIc2diNUJNVzh6TTVwdlFpdCttUXg4WEdhVkRjZlZiTHlNVGxZOHhjZm1tL1JTQVQvSDA5VVFvbDVnSXo3ckVTRG1uclE0YlVSSUI0aVJYTURRd3hnZXgxR2d0RHhLcDJIYXlJa1IrRS9hRG1DdHRObTJDNmx5dFdkZk9WekQ2WDJTcERXalFEbE1SdkFwMXN5bVd2NG15MWJQQ0QrRTFFbUduTUdXaE53bXljSm5EVjJXclFOeE80NXVrRWIwOEFBZmZpellLVlVMcDE1STR2Yk5LNUR6V3dDU1VBRGZtS2hmR1NVcWlpMUwyVXNFOHJCN21MdUh1VUpaT3g0K1dpaXpIQkovaHdib2FCemhwTk9WdmdGVGY1Y0pzSGVmN0wxSENJOWRPVVViYitZeFVKV242ZFlPTHorVEhpOTFrelk1ZHRPNWMrZ3JYN3YwakVic3VvT0dub0lyZURJZy9zRk15RytUeUNMSWNBV2QxSVoxVU5GeEU4VWllMTN1Y200MFUyZmN4QzB1M1dMdkxPeHd1K0Y3TVdVc0hzZHRGUVo3VytubGZDQVNpQUt5aDhyblAzRXlEQnl2dEpiNktheDYvSGtMelQ5U3lFeVRNVk0xelB0TTBNSlkxNERtc1doNE1nRDE1RWE5SGQwMEFka1RaMEVpRzVOQUd1SUJ6UUpKMEpSMG5hK09CN2xRQTZVS3hNZmloSVE3R0NDblZ6Njk0UXZ5a1dYVHhwUzJzb0R1K3NtcnUxVWRJeFN2QXN6QkZEMWM4YzZaT29iQThiSmlKSXZ1eWNnSVhCUUlYV3doeVRnWkRReEpUUlhnRXdSTkFhd0dTWE8wYTFES2pkaWhMVk5wL3RhRS94WWhzZ3dlK1ZwS0VFQjRMbHJhUXlFODRnRWloeENuYmZveU91SklFWHkyRklZdytKalJ1c3liS2xVMmcvdmhUU0dUeWR2Q3ZYaFlCZHRBWHRTMnY3TGtIdG1YaC84Zmx5MWRvOEZJL0QwZjhVYnpWYjVoK0tSaE1HU0FtUjJtaGkwWUcvdWo3d2d4Y2Z6Q3JNdmRqaXRVSXBYRFg4YWUySmNGLzM2cVVXSU13TjZKc2phUkdOaitqRXRlR0RjRnlUVWI4WC9OSFN1Y0tNSnA3cGR1eHRENkt1eFZseXh4d2FlaUMxRmJHQkVTTzg0bGJ5ckF1Z1l4ZGwrMk44LzZBZ1dwby9JZW9BT2NzRzM1SUEvYjNBdVN5b2E1NUw3bGxCTGxhV2xFV3Z1Q0ZkOGY4TmZjVFVnekp2NkNiQis2b2hXd29kbGs5bkdXRnBCQU9hejV1RVc1eEJ2bWpuSEZlRHNiMG1Yd2F5ajNtZFlxNWd4eE5mM0gzL3RuQ2dId2pTcnBTZ1Z4TG1pVHR1c3pkUlVGSXNuNkxpTVBqTDgwOHZMMXVRaERiTTdhQTQzbUlTWFJlcWpTc2t5bklSY0hDSjlxZUZvcEpmeDl0cXlVb0diU3dKZXgvMGFERTNwbEJQR3ROQllnV2JkTG9tMytRL2JqZGl6UjIvQVMvYy9kSC9kM0c3cHlsMXFEWGd0T0Z0RXFpZHdMcXhQWXRyTkV2ZWFzV3EzdlBVVXRxVGV1OGdwb3Y0YmRPUVJJMmtuZUZ2Uk5NclNoeVZlRXVwSzFQb0xEUE1TZldNSUpjczI2N21HQjhYOUNlaFFDRjBnSXlocFAxMG1ieU03bHdXMWU2VEd2SEJWMXNnL1V5VGdoSFBHUnFNeWFlYkM2cGJCMVdLTkNRdGxhaTFHR3ZtcTl6VUthVXpMYVhzWEVCWXRIeG1GYkVaMmtKaFIxNjRMaFdXMlRscDFkaHNHRTdaZ0lXUkJPeDNaY3UyRHhnSCtHODNXVFBjZUtHMFRnUUtLaWlOTk9sV2d2cU5FYm5yazZmVkQrQXFSYW0yT2d1WmIwWVdTVFg4OE4raS9FTFN4YmFVVXBQeDR2SlV6WWcvV29uU2VBOHhVSzZ1N0RQSGdwcVdwRWU2RDRjWGc1dUs5RklZVmJhNDdWL25iK3d5T3RrK3pHOFJyUzRFQTBvdXdhMDRpQnlSTFN2b0pBMkZ6YW9iYlp0WG5xOEdkYmZxRXA1STJkcGZwajU5VENWaWY2K0U3NXA2NjVmYWlYOGdTMjEzUnFCeFRacWZIUDQ2bkY2TlNlbk9uZXVUK3ZnYkxVYmRUSDIvdDBSRUZYWkpPRUI2REh2eDZONmc5OTU2Q1lyWS9BWWNtOWdFTEpYWWtyU2krMEYwZ2VLRFpnT0NJWWtMVS8rR09XNWFHajhtdkxGZ3RGSDUrWEM4aHZBRTNDdkhSZmw0b2ZNL1F3azR4MkErUitueWM5Z051LzlUZW03WFc0WFJueVJ5bWY1MnowOWNUT2RyK1BHNitQL1ZiNFFpWGx3YXVjNVdCMXozbytJSmpsYnhJOE15V3RTelQrazRzS1ZiaEYzeGErdkR0czNOeFhhODdpaXUreFJIOWNBcHJuT0wyaDZ2VjU0aVFSWHVPQWoxczhuTEZLOGdaNzBUaElRY1dkRjE5LzJ4YUptVDBlZnJrTkRrV2JwQVFQZG85Mlo4K0huL2FMamJPekI5QUkvazEyZlBzOUhoVU5ESjF1NmF4MlZ4RDNSNlB5d043QnJMSjI2ejZzM1FvTXA3NnF6endldHJEQUJLU0drZlc1UHdTMUd2WU5VYks2dVJxeGZ5VkdOeUZCMEUrT3VnTU04a0t3bUptdXB1UldPOFhrWFhYUUVDeVJWdzlVeUlydEN0Y2M0b05xWHFyN0FVUkJtS242S2h6M2VCTjk2THdJSnJBR1A5bXIvNTl1VE9TeDYzMXN1eVQrUXVqRGQ0YmVVRnBaMGtKRUVuamxQK1gvS3Iya0NLaG5FTlRnNEJzTVRPbU1xbGoyV01GTFJVbFZHMGZ6ZENCZ1V0YTlvZHJKZnBWZEZvbVRpNmFrMHRGalhUY2RxcXZXQkF6alk2aFZySDlzYnQzWjlnbitBVkRwVGNRSW1lZmJCNGVkaXJqenJzTmlldnZlNFpUNEVVWldWM1R4RXNJVys5TVQvUkpvS2ZaWllTUkdmQzFDd1BHLzlyZE1PTThxUi9MVVl2dzVmL2VtVVNvRDdZU0Z1T29xY2hkVWcyVWVQZDFlQ3RGU0tneExTWjc2NG95NGx2UkNJSDZib3dQeFpXd3hORmN0a3NMZWlsNDdwZmV2Y0JpcGtrQkljNG5nWkcra3hHWjcxYTcyS1E3VmFaNk1aT1prUUpaWE02a2IvQWMwL1hrSng4ZHZ5ZkpjV2JJM3pPTkVhRVBJVzhHYmtZanNaY3d5K2VNb0tyWWpEbXZFRWl4SHprQ1NDUlBSemhPZkpadUxkY2J4MTlFTDIzTUE4cm5qVFpaNzg3RkdNbmtxbnB1ekI1LzkwdzFndFVTUmFXY2IwZXRhODE5OFZFZVpNVVNmSWh5dWM0L255d0ZROXVxbjdqZHFYaCs1d3d2K1JLOVhvdU5QYllkb0VlbE5HbzM0S3l5U3dpZ3NyZkNlMHYvUGxXUHZRdlFnOFIwS2dITzE4bVRWVGhoUXJsYkVRMEtwL0p4UGRqSHlSN0UxUVB3L3V0MHIrSERERzdCd1pGbTlJcUVVWlJwdjJXcHpsTWtPZW1lTGNBdDVDc3J6c2tMR2FWT0F4eXlTelpWL0QyRVk3eWROWk1mOGU4VmhIY0tHSEFXTnN6ZjFFT3E4Zk5zdGlqTVk0Slh5QVR3VGRuY0ZGcWNORGZEbyttV0Z2eEpKcGM0c0VadGpYeUJkb0ZjeGJVbW5pQ29LcTVqeWRVSE5qWUp4TXFOMUt6WVY2Mk11Z2NFTFZoUzNCbmQrVExMT2g3ZHdzL3pTWFd6eEViNE5qNGFGdW41eDRrRFdMSzVUVUYveUNYQi9jWll2STlrUGdWc0cyalNodFhreGZnVCt4empKb2ZYcVBFbklYSVExbG5JZG1WekJPTTkwRVh2SlVXNmEwblovN1hqSkdsOFRvTzNIL2ZkeG54bVROS0JaeG5rcFhMVmdMWENaeXdHVDNZeVM3NXcvUEFINUkvak11UnNwZWo4eFpPYlU5a1JFYlJBK2txam1LUkZhS0dXQW1GUXNwQytRTGJLUGYwUmFLM09YdkJTV3FvNDZwNzB3cy9lWnB1NmpDdFpVZ1F5NnI0dEhNUFVkQWdXR0dVWU5idXYvMWE2SytNVkZzZDNUMTgzK1Q4Y2FwU282bTArU2g1N2ZFZUcvOTVkeWtHSkJRTWowOURTVzJiWTBtVW9uRHk5YTh0ckxubkw1QjVMVzNObDhySlpOeXNPOFpiKzgwelh4cVVHRnB1ZDNRendiN2JmKzhtcTZ4MFRBbkpVOXBEUVI5WVFtWmhsbmEyeHV4SnQwYUNPL2YxU1U4Z2JsT3JiSXlNc3hUbFZVVzY5VkpQellVMkhsUlhjcUUybExMeG5PYlp1ejJ0VDlDaXZmVEFVWWZtekpsdC9sT1Bnc1I2Vk42NC94UWQ0SmxrL1JWN1VLVnYyR3gvQVdzbVRBdUNXS2hkd0MrNEhtS0VLWVpoMlhpczRLc1VSMUJlT2JzMWMxM3dxRlJub2NkbXVoZWFUVjMwZ3ZWWFpjb3V6SEtLNXp3ck41MmpYSkV1WDZkR3gzQkNwVi8rKzRmM2h5YVcvY1FKTEZLcWFzanNNdU8zQjNXbE1xMmd5WWZkSzFlN0wycE8vdFJ5ZTJtd3p3WlBmZFVNcmw1d2RMcWRkMkt2L3dWdG5weVdZaGQ0OUw2cnNPVis4SFhQcldIMkt1cDg5bDJ0ejZiZjgwaVlTZCtWNExST1NPSGVhbXZleFI1MjRxNHI0M3JUbXRGelF2QXJwdldmTFlGWnJiRnNwQnNYTlVxcWVuanhOTnNGWGF0WnZsSWhrN3RlVVBmSytZTDMyRjhNY1RuanYwQlpOcHBiK3ZzaG9DcnRMWGpJV3EzRUpYcFZYSWxHNlpOTDBkaDZxRW0yV013RGpEM0xmT2ZrR2gxL2N6WWMvMHFoaUQyb3pObkg0ODgyTVZWdDNKYlZGa2J3b3dOQ08zS0w1SW9ZVzV3bFZlR0NWaU91djFzdlp4N0ZienhLekE0ekdxQmxSUmFSV0NvYlhhVnE0eVlDV2JaZjhlaUp3dDNPWStNRmlTSmVuZ2NGUDJ0MEpNZnpPaUo3Y0VDdnB4N25lZzFSYzV4KzdteVBKT1h0MkZvaFZSeVh0RCsvckRvVE95R1lJbkplbFpNam9sZWNWSFVoVU5xdmRaV2cySjJ0MGpQbWlMRmVSRC84Zk9UNG8rTkdJTGIrVHVmQ285Y2VCQm0zSkxWbitNTzI2NzVuN3FpRVgvNlcrMTg4Y1lnM1puNU5TVGpnT0tmV0ZTQUFOYTZyYUN4U29WVTg1MW9KTFkxMVdJb1lLMGR1MGVjNUU0dENuQVBvS2g3MXJpVHNqVklwM2dLdkJiRVlRaU5Zcm1IMjJvTFFXQTJBZHdNbklENlBYOWI1OGRSMlFLbzRxYWcxRDFaK0wvRndFS1RSN29zT1pQV0VDUEpJSFFxUFVzTTVpL0NINVl1cFZQZkZBNXBIVUJjc2VzaDhlTzVZaHlXbmFWUlBabi9CbWRYVnVtWldQeE1QNWUyOHptMnVxSGdGb1Q5Q3ltSFlOTnJ6cnJqbFhaTTA2SG56RHhZTmxJNWIvUW9zeExtbXJxREZxbW9nUWRxazBXTGtVY2VvQXZReEhna0l5dldVNjlCUEZyMjRWQjYrbHg3NVJuYTZkR3RybU94RG52Qm9qdmkxLzRkSGpWZWc4b3dvZlBlMWNPbnhVMWlvaDAxNnMvVnVkdjltaFY5ZjM1QXQrU2gyOGgxYnBwOHhocjA5K3ZmNDdFbHgzTXM2aHlwNlF2QjN0MHZuTGJPaHdvNjYwY3A3SzB2dmVwYWJLN1lKZnhFV1dmckMyWXpKZllPanlnUHdmd2QvMWFtVHFhMGhaNXVlZWJoV1lWTXViUlR3SWpqKzBPcTBvaFUzemZSZnVMOGd0NTlYc0hkd0t0eFRRUTRZMnF6Nmdpc3hubTJVZGxtcEVrZ09zWno3aUVrNlFPdDhCdVB3citOUjAxTFRxWG1KbzFDNzZvMU4yNzR0d0p2bCtJMDY5VGlMcGVuSy9taVJ4aHlZOGp2WVY2VzFXdVN3aEg5cTdrdXduSk10bTdJV2NxczdIc255SFNxV1hMU3BZdFpHYVIxVjN0MGdhdW5pbkZQWkd0V3NrRjY1cnR0aTQ4VVY5dVY5S004a2ZEWXMwcGdCMDBTK1RselRYVjZQOG14cTE1YjlFbjhzejNqV1NzemNpZlphL051dWZQTm5OVGIwMzFwcHR0MCtzUlNILzdVRzhwemJzZ3R0M09HM3V0N0I5SnpETXQybVRadXlSTklWOEQ1NFR1VHJwTmNIdGdtTWxZSmVpWTlYUzgzTllKaWNqUmp0SlNmOUJaTHNRdjYyOVFkRHNLUWhUSzVDblhocGs3dk1Oa0h6UGhtMEV4Vy9WQ0dBcEhmUHlCYWd0WlFUUW1QSHg3ZzVJWFhzclFEUHpJVmh2MkxCNkloMTM4aVNEd3cxSk5IckR2elV4dnA3M01zUUJWaFc4RWJyUmVhVlVjTEIxUjNQVVh5YVlHNEhwSlVjTFZ4TWdEeGNQa1ZSUXBMN1ZUQUdhYkR6YktjdmcxMnQ1UDhUU0dRa3JqL2dPcnBuYmlESHdsdUE3M3hiWHRzL0w3dTQ2OGNSV1NXUnRnVHdsUW5BNDdFS2cwT2laRGdGeEFLUVFVY3NiR29tSVRnZVhVQUF5S2UwM2VBN01wNGdueUtRbW0wTFhKdEVrNmRka3NNSkN1eERtbUh6bVZoTytYYU4yQTU0TUloM25pdzVDRjdQd2lYRlpybkE4d09kZUhMdnZoZG9xSURHOVBESTdVbldXSHE1MjZUOHk2aXhKUGhrdVZLWm5vVXJ1T3BVZ09PcDNpSUtCamsreWkxdkhvNWNJdEhYYjFQSUt6R2FabFJTMGc1ZDNNVjJwRDhGUWRHWUxaNzNhYWUvZUVJVWVQTWM0TkZ6OHBJVWZMQ3JyRjRqVldINWdRbmVOM1M4dkFOQm1VWHJFY0tHbjZoSVVOOTV5MXZwc3ZMd2JHcHpWOUwwWktUYW42VERYTTA1MjM2dUxKY0lFTUtWQXhLTlQwSzhXbGp1d05ueTNCTlFSZnpvdkE4NWJlSTl6cjFBR05ZbllDVmtSMWFHbmdXVVJVcmdxUitnUnJRaHhXODFsM0NIZXZqdkdFUHpQTVR4ZHNJZkI5ZGZHUmJaVTBjZy8xbWN1YnRFQ1g0dHZhZWRtTkF2VHhDSnRjMlFhb1VhbEdmRU5DR0s3SVMvTzhDUnBkT1ZjYThFV0NSd3Yyc1NXRThDSlBXNVBDdWdqQ1hQZDNoNlU2MGNQRCtiZGh0WFp1WUI2c3Rjb3ZlRTdTbTVNTTJ5dmZVSFhGU1c3S3pMbWk3L0VlRVdMMHdxY09IOU1PU0tqaENISG13K0pHTGNZRS83U0JaUUNSZ2dveDBaWlRBeHJsek5OWFlYTDVmTklqa2RUNFlNcVZVejZwOFlEdDA0OXY0T1hHZGczcVRydExCVVhPWmY3YWhQbFpBWS9PKzdTcDBidkdTSGR5UThCMUxPc3BscU1iOVNlOFZBRTdnSWRTWnZ4YlJTcmZsK0xrNVFhcWk1UUpjZXFqaXRkRXJjSFhnLzNNcnlsalBTSUFNYWFsb0ZtMWNWd0JKOERObWtEcW9HUk9TSEZldHJnalE1Q2FodUtrZEg1cFJQaWdNcmdUdGxGSTh1ZkpQSlNVbEdnVGpiQlN2cFJjMHp5cGlVbjZVNUtacWNSb3lydHpobUo3L2NhZVprbVZSd0pRZUxPRzhMWTZ2UDVDaHBLaGM4SnMwRWwrbjZGWHFieDlJdGR0THRZUDkya0tmYVRMdENpOFN0TFpkRU5KYTlFeDFuT296MWtRN3F4b2laRktSeUxmNE80Q0hSVDBULzBXOUY4ZXBOS1ZvZXl4VVhoeTNzUU1Nc0pqUUpFeU1Pam1PaE1GZ09tbWxzY1Y0ZUZpMUNsZFU5Mnlqd2xlaXJFS1BXM2JQQXVFaFJaVjdKc0tWM0xyNWNFVEFpRnVYNU53NVVsRjdkMkhaOTZCaDBzZ0ZJTDVLR2FLU29WWVZsdmRLcFpKVlA1K05aN3hERWtRaG1EZ3NES2NpYXpKQ1hKNlpOMkIzRlkyZjZWWnlHbC90NGF1bkdJQWsvQkhhUytpK1NwZFJmbkIvT2t0T3Z5amluV05mTTlLc3I2V3d0Q2ExaENtZVJJNmljcEZNNG84cXVDTHNpa1UwdE1vWkkvOUVxWFJNcEtHYVd6b2ZsNG5RdVZRbTE3ZDVmVTVxWENRZUNEcVZhTDlYSjlxSjA4bjNHM0VGWlMyOFNIRWIzY2RSQmR0TzBZY1R6aWwzUWtuTktFZS9zbVExZlRiMFhicHlOQjV4QWV1SWxmKzVLV2xFWTBEcUpic256SmxReEpQT1Z5SGlLTXg1WHU5RmNFdjFGYmc2RmhtNHQrSnl5NUpDMVczWU84ZFlMc08wUFhQYnhvZEJndHRUYkgzcnQ5Q3AxbEpJazJyM08xWnF1OTRlUmJuSXoyZjUwbFdvbFl6dUtzajRQTW9rNGFiSExPOE5BQzg4NGhpWHg1Rnk1cFdLTzBiV0w3dUVHWGFKQ3R6bmhQNjdTbFE0eGpXSWZncTZFcFoyOFFNdHVaSzdKQzBSR2JsOW5BNFh0Rkx1Zy9OTE1vSDFwR3Q5SW9uQUpxY0VETHlINlREUk9jYnNtR1BhR0l4TW80MUlVQW5RVlBNUEdCeXA0bU9taDlaUU1rQkFja3NVSzU1THNaajdFNXo1WHVab3lXQ0t1Nm5IbURxMjJ4SS85WjhZZHhKeTRrV3BEMTZqTFZycHdHTFdmeU9EMFdkK2NCekZCeFZhR3Y3UzVrOXF3aC81dC9MUUVYc1JxSTNROVJtM1FJb2FaVzlHbHNEYUtPVXl5a3lXdWhOT3ByU0VpMHMxRzRyZ29pWDFWNzQzRUVMdGkrcEp1NW9nNlgwZzZvVHluVXFsaEg5azZlenlSaTA1TkdaSHowbnZwM0hPSnI3ZWJyQVVGckRqYmtGQk9iRXZkUVdra1ViTDBwRXZNVTQ2WDU4dkY5ajlGM2o2a3B5ZXROVUJJdHJFdWJXOVp2TVBNNHFOcUxsc1NCSnFPSDNYYk53di9jWERYTnhOOGlGTHpVaHRlaXNZWStSbEhZT3VQMjkvQ2IrTCt4diszNVJ2N3h1ZG5aNm9oSzRjTVBmQ0c4S0k3ZE5tak5rL0g0ZTg0cE94bi9zWkhLOXBzZnZqOG5jQThxSno3Tzh4cWJ4RVNEaXZHSk9aekY3bzVQSkxRN2czNHFBV295dUEreDNidFU5OExUNlp5R3ljZUlYanJxb2IyQ0FWcWw0Vk9UUVBVUVl2SFYvZzR6QXVDWkd2WVFCdGYwd21kNWxpbHJ2dUVuMUJYTG55MDFCNGg0U01EbFlzbk5wbTlkN205aDU3OHVmcGVmOVo0V3BscVdRdnFvNTJmeVVBN0oyNGVaRDVhdjZTeUdJVjlrcG1ITnF5dmRmemNwRU13OTdCdmtuVjJmcStNRkh1bjlCVDNMc2Y4cGJ6dmlzV2lJUXZZa25nKzhWeGsxVitkbGkxdTU2a1k1MExSamFQZG90dlQ1QndxdHd5RitlbW8vejlKM3lWVVZHZktyeFF0Sk1PQVFXb1FpaS80ZHA5d2d5YlNhNW1rdWNtUkx0RVFaL3B6MHRML05WY2dXQWQ5NW5FUTNUZzZ0TmJ1eW4zSWVwejY1TDNodU1VVUJudGxsV3V1NERidE9GU01TYnBJTFY0Znk2d2xNMFNPdmk2Q3BMaDgxYzFMcmVJdktkNjF1RVdCY0R3MWxVQlVXMUkwWittL1BhUmxYK1BRL294ZzBZZTZLVWlJaVRGNEFETms1OVlkcHQ1L3JreG1xOXRWNUtjcC9lUUxVVlZtQnpRTlZ1eXRRQ1A2RXpkMEc4ZUx4V3lIcG1aV0ozYkF6a1dUdGc0bFpsdzQyU1FlekVtaVVQYUpVdVIvcWtsVkEvODdTNEFyRkNwQUxkWTNRUmRVdzNHM1hiV1VwNmFxOXowelVpemNQYTczNTFwOUpYT1p5ZmRaQkZucXQ5MFZ6UW5kWEIvbXdmOExDOVNUajVrZW5WcE51cU9RUVAzbUlSSmo3ZVYyMUZ4RzhWQXhLckVuM2MrWGZtWjgwMEVQYjkvNWxJbGlqc2NVYkI2ZGEwUlFhTW9vazB6dWcxRzB0S2kvSkJDNHJ3Ny9EM200QVJ6QWt6TWNWckRjVDJTeUZ0VWRXQXNGbHNQREZxVjNOK0VqeVhhb0VlUHdyb2FaQ2lMcUV6YjhNVytQTkU5VG1UQzAxRXpXbGk1MVB6WnZVcWtteXVST1UrVjZpaytMZS85cVQ2bnd6VXpmOXRQNjh0WWVpMFlhREd4NmtBZDdqbjFjS3FPQ3VZYmlFTEg5ellxY2M0TW5SSmprZUdpcWFHd0xJbWh5ZUtzK3hLSk1CbE9KMDVvdzlnR0NLWjFWcG5NS29TQ1RiTVMrWCsyM3kwNDJ6T2I1TXRjWS82b0JlQW8xVnk4OU9UeWhwYXZGUDc4alhDY0ZIMHQ3R3gyNGhNRU9tMmdzRWZHYWJWcFFndkZxYlFLTXNrbkZSUm11UEhjWnUwU3UvV01GcGhadkIyci9FR2JHNzJycEdHaG8zaCtNc3owdUd6SjdoTksydXFRaUUxcW1uMHpnYWNLWVlaQkNxc3hWK3NqYnBvVmRTaWxXL2I5NG4yeE5iNjQ4Vm1OSW9penFFV2hCbnNlbitkMGtiQ1BtUkl0ZldxU0JlT2Q5V25lM2M2YmNkNnV2WE9KNldkaVNzdVhxMG5kaHFyUTRRb1dVakNqWXRaMEVBaG5TT1AxbTQ0eGtmME83alhnaHJ6U0pXeFA0YS90NzJqVTI5VnUycnZ1NG43SGZIa2ttUU9NR1NTK05QZUxHTzVJNzNtQzJCNytsTWlCUVFaUk05LzlsaUxJZm93dXBVRkFiUEJiUitseERNNk04UHRnaDFwYUpxNVJ2czd5RXVMUXYvN2Qxb1Uyd29GU2IzRk1QV1FPS011Q3VKN3BERGpwSWNsdXM1VGVFb01CeTJZZFZCNGZ4bWVzYUNlTU5zRWdUSEtTNVdEU0d5TlVPb0VwY0MyT0ZXdElSZjB3MjdjazM0L0RqeFJUVkljYzkra3FaRTZpTVNpVkRzaUtkUC9YejVYZkVobS9zQmhPNTBwMXJ2SkRsa3l5eHVKOVNQZ3M3WWVVSkJqWGRlQWtFK1A5T1FKbTZTWm5uMXN2Y2R1STc4ZFltYmtFMm10emlQcmNqVmlzWEc3OHNwTHZiWmFTRngvUmtzOXpQNExLbjBDZHovM0pzZXRrVDA2QThmL3lDZ01PNk1iMUhtZTBKSjdiMndaejFxbGVxVHVLQkdva2hQVlVaMGRWdSt0blFZTkVZMWZta1pTejYrRUdaNUV6TDc2NTdtcmVaR1IzalVmYUVrNDU4UERuaUJ6c1NtQktoRFJ6ZlhhbWVyeUp2OS9ENW02SElxWjBSK291Q0U1NER6cDRJSnV1RDFlNERjNWkrUHBTT1JKZkcyM3VWZ3FpeEFNRHZjaE1SMG5aZEg1YnJjbFl3Um9KUld2L3JseEdSSTVmZkQ1TlBHbUlEdDd2REUxNDM0cFlkVlpJRmg4OUJzOTRIR0dKYlR3ck44VDZsaDFIWkZUT0I0bFd6V2o2RVZxeFNNdkMwL2xqV0JRM0Yya2MvbU8yYjZ0V29uVDJKRXFFd0Z0czhyejJoK29XTmRzOWNlUjJjYjd6WnZKVERwcEhhRWhLNWF2V3Fzc2VXYTJEdDVCQmhhYmRXU2t0Uzgwb01Rckw0VHZBTTliNUhNbXlEbk8rT2trYk1YZlVKRzdlWHFUSUc2bHFTT0VicVZSK3FZZFA3dVdiNTdXRUpxenloNDExR0FWc0RpblBzN0t2VWVYSXRsY01kT1VXelhCSDZ6c2N5bVYxTExWQ3RjOEllUG9qelhIRjltNWI1ekd3QlJkemN5VUpraXU5MzhBcG1BYXlSZEpyWDFQbVZndVdVdnQyVGhRNjJjekl0VHlXSk1XMkFuL2hkRGZNSzdTaUZRbEdJZEFibHRIejN5Y29oN2o5VjdHeE5XQnBidGNTZHFtNFh4UndUYXdjM2NiWit4ZlN2OXFRZkVrREtmWlR3Q2txV0dJL3VyMjUwSXRYbE1saDZ2VU5XRVlJZzlBM0d6YmdtYnF2VE44anMyWU1vODdDVTV5Nm5aNGRiSkxEUUpqOWZjN3lNN3RaekpEWkZ0cU9jVTgrbVpqWWxxNFZtaWZJMjNpSGIxWm9UOUUra1QyZG9sblAxQWZpT2t0N1BRQ1N5a0JpWHk1bXY2MzdJZWdXU0tqOUlLcllaZjRMdTkrSTd1Yitta1JkbHZZemVoaC9qYUo5bjdIVUg1YjJJYmdlTmRrWTd3eDF5Vnp4UzdwYnZreTYrbm1WVXRSbGxFRmZ3ZVVRMC9uRzAxN1dvVVlTeHMrajJCNEZWL0Y2MkV0SGxNV1pYWXJqR0hwdGhuTmIxeDY2TEtaMFFlOTJJTldIZGZSL3ZxcDAyd01TOHIxRzRkSnFIb2s4S21RNzk0N0cxM2E0WVhic0dnSGNCdlJ1VnUxZUFpNC9BNStaaXhtZFNYTTczTHVwQi9MSDdPOXl4TFRWWEpUeUJiSTFTNDlUSVJPcmZWQ09iL2N6WjlwTTRKc1p4OGtVejhkUUd2N2dVV0t4WHZUSDdRTS8zSjJPdVhYZ2NpVWhxWStjZ3RhT2xpUVFWT1l0aEJMVjN4cEVTWlQzcm1mRVlOWnhtcEJiYjI0Q1Jhbzg2cHJuK2k5VE5PaDhWeFJKR1hKZlhIQVRKSHMxVDV0eGdjL29wWXJZOFhqbEdRUWJSY294SUJjblZzTWptVTF5bW1JVUw0ZHZpSlhuZE1BSjBZZXQrYzdPNTIvcDk4eXRsbUFzR0JhVEFtTWhpbUFudnAxVFdOR005QnB1aXRHait0ODEwQ1UyVWhvcnJqUEtHdFRoVkM4V2FYdzA0V0ZuVDVmVGpxbVB5clEwdE4zQ2tMc2N0VnkyeHIwWldnaVdWWjFPcmxGamp4SllzT2ladjJjQW9PdkUrN3NZMEkvVHdXY1pxTW95SUtOT2Z0d1A3dysrUmZnNjdsamZvdktZYTUwaWYzZnpFLzhhUFlWZXkvTnEzNStuSDJzTFBoL2ZQNVRzeWxTS0dPWjRrNjlkMlBuSDQzK2txKytzUlhIUXFHQXJXZHdoeCtocHdRQzZKZ1QydXhlaFlVNFpidzdvTmI2L0hMaWtQeUpST0dLMm91eXIrdnpzZUVTcDlHNTBUNEF5RnJTcU9RMHJyb0NZUDRzTURGQnJIbjM0MkV5WlRNbFN5azQ3ckhTcTg5WTkvbkkzekc1bFgxNlo1bHhwaGd1TE9jWlVuZEw4d05jcmt5akg4MmpxZzhCbzhPWWt5bnJ4WnZiRm5vNWxVUzNPUHI4S28zbVg5Tm9SUGRZT0tLakQwN2J2Z0ZncFovUkYrWXprV3ZKL0hzL3RVYmZlR3pHV0x4TkFqZkR6SEhNVlNEd0I1U2FiUUxzSVpIaUJwNDNGakdrYWllbllvRGQxOGh1MkJHd09LN1UzbzcwSy9XWS9rdXVLZG1kcnlrSUJVZEcybXZFOTFMMUp0VGJoMjBtT0xiazF2Q0FhbXU3dXRsWGVHVTJvb1Zpa2JVL2FjdGNnbXNDMUZLazJxbWozR1dlSVdiajR0R0l4RTdCTGNCV1V2dmNuZC9sWXhzTVY0RjkxN2ZXZUZCL1hiSU5OM3FHdkl5VHBDYWx6MWxWZXdkSUdxZUFTL2dCOE1pK3NBK0JxRGlYM1ZHRDJlVXVuVFJiU1krQXVEeTRFM1F4M2hBaHduU1hYK0IwenVqM2VRMW1pUzhWdXgyei9sNi9Ca1d0aktHVTcyYUprT0NXaEdjU2YzK2tGa2tCMTV2R09zUXJTZEZyNnFUajBnQllpT2xuQk80MTE3MGdPV0hTVW9CVlJVMkpqd3BwWWRoSUZEZnU3dElSSGNjU05NNUtaT0ZEUHowVEdNQWp6ekVwZUx3VFdwK2tuMjAxa1U2TmpiaU1RSng4MytMWDFlMXRaMTBrdUNoSlovWEJVUTFkd2FCSGpUREpEcU95bXBFazhYMk0zVnRWdzIxSmtzQ2hBOHcxdFRlZk8zUkoxRk1icVowMWJISGt1ZERCL09oTGZlN1A1R09IYUkyOFpYS1RNdXFvMGhMV1E0SGFiQnNHRzdOYlAxUmlYdEVUejA3NGVyNncvT2VySldFcWpta3EyeTUxcTFCVkkrSlV1ZG5WYTNvZ0JwemRoRkU3ZkM3a3lickF0Mlo2UnFEakFUQVVFWWVZSzQ1V011cEJLUVJ0UWxVK3VOc2puemo2Wm1HcmV6QStBU3JXeFE2TE1rSFJYcVh3TnE3ZnR2MjhkVXgvWlNKY2lEWFAyU1dKc1dhTjBGalBYOVlrbzZMb2JaN2FZVy9JZFVrdEk5YXBUTHlIUzhEeVdQeXVvWnl4TjFUSy92dGZ4azNId1doNkpjelpDOEZ0bjBiSUpheTJnK241d2Q3bG05ckVzS08rc3ZxVm1pK2Mxajg4aFNDeGJ6cmc0K0hFUDBOdDEvQjZZVzFYVm0wOVQxQ3BBS2pjOW4xOGhqcXNhRkdkZnl2YTFaRzBYdTNpcDZONkpHcHlUU3FZNWg0Qk9scExQYU9ueXc0NVBkWFROK0R0QUtnN0RMckxGVG5XdXNvU0JIazNzMGQ3WW91SkhxODUvUjA5VGZjMzdFTlhaRjQ4ZUFZTG5xOUdMaW9OY3dEWnJDNkZXNmdvZEI4Sm5xWVVQdm4wcFdMZlF6MGxNMFl5OE15YmduODREczNROWJEUDEwYkx5T1YrcXp4YTRSZDlEaHU3Y2p1OG1NYU9OWEszVXFtQlE5cUlnN2V0SXdFcU0va0VDay9EemphNEJzMXhSK1EvdENiYzhJS3JTR3NUZEpKMHZnZTdJRzIwVzY4N3VWbUs2aWNXUTZjRDNsd0Z6Z05NR3RGdk81cXlKZUtmbEdMQUFjUVpPcmt4Vnd5M2NXdnFsR3B2am1mOVFlNkFwMjBNUGJWOTJEUFYwT2hGTTRrejhZcjBmZkMyekxXU1Exa3FZNlFkUXJ0dFIza2gxWUx0UWQxa0NFdjVoVm9QSVJXbDVFUmNVVHR0QklyV3A2WHM1RWhoNU9VVXdJNWFFQnZ1aURtVW9FTm1uVncxRm9oQ3JiUnAxQTFFK1hTbFdWT1RpN0FEVys1T2hiOXoxdks0cXg1UjVsUGRHQ1BCSlowMG1DK1NzcDhWVWJncEdBdlhXTXVXUVFSYkNxSTZScjJqdHhaeHRmUDdXLzhvbnoreXowR3M3NkxhVDVIWDllY3lpWkNCL1pSL2dGdE14UHNEd29ob2VDUnRpdUx4RTFHTTF2VUVVZ0J2ODYrZWVoTDU4L1A1NlFGR1EvTXFPZS92Qzc2TDYzanptZWF4NGV4ZC9PS1RVdmtYZytmT0pVSHljaDl4dC85Z29KTXJhcFNndlhyajgrOHZrL044MGYyMlNld2o2Y3lHcXQxQjZtenRvZWtsVkhIcmFvdWh2SEphRy9PdUJ6NkRIS01wRm1RVUxVMWJSV2x5WUUwUlBYWVlrVXljSWVtTjdUTHRnTkNKWDZCcWR5eERLa2VnTzduSks1eFE3T1ZZRFpUTWY5YlZIaWR0azZEUVg5RXQrVjlNN2VzZ2JzWUJkRWVVcHNCMFh2dzJrZDkrckk3VittNDd1K08vdHE3bXc3MjYySFUxV2xTOXVGenNWNkp4SUhObVVDeTBRUzllMDc3SkdSRmJHNjV6My9kT0tCL1prK3lEZEtwVW1kWGpuL2FTM041bnY0Zks3Yk1ISG1QbEhkNEUyK2lUYlY1cnB6U2NSbnhrNktBUnVEVEo4UTFMcEsybVA4Z2oxRWJ1SjlSSXlZK0VXSzRoQ2lJREJBUzFUbTJJRVhBRmZnS1BnZEw5TzZtQWEwNndqQ2NVQUw2RXN4UFFXTzlWTmVnQlBtLzBHZ2taYkR4Q3lueHVqWC85MnZtR2NqWlJNQVk0NXB1YWsyc0ZMQ0xTd1hwRXN5eTVmbkYwakdKQmhtK2ZOU0hLS1VVZnkrMjc2QTcvZmVMT0Z4eFV1SFJOSkkyT3Nlbnh5dmY4REFHT2JUNjBwZlRUbGhFZzl1L0tLa2hKcW01VTEvK0JFY1NrcEZEQTVYZUNxeHdYbVBhYzFqY3VaM0pXUStwME5kV3piLzV2MVp2RjhHdE1URkZFZFFqcExPMGJ3UGIwQkhOV25pcDNsaURYSTJmWGYwNWpqdmZKME5wakxDVWdmVGg5Q01GWVZGS0VkNFovT0cvMkMrTjQzNW1uSys5dDFndkNpVmNhYUg3cks0K1BqQ3ZwVk5peit0MlF5cUgxTzh4M0pLWlZsNlErTHAvWEs4d01qVk1zbE9xOUZkU3c1RnRVcy9DcHRYSDlQVyt3YldIZ3JWMTdSNWpUVk90R3RLRnUzbmI4MFQrRTB0djlRa3pXM0oyZGJhdy84ZGRBS1owcHhJYUVxTGpsUHJqaTNWZ0ozR3ZkRnZscUQ4MDc1d294aDRmVnQwSlpFMEtWRnNBdnFoZTBkcU45YjM1anRTcG5ZTVhrVSt2WnErSUFIYWQzSUhjMnMvTFlybkQxYW5mRzQ2SUZpTUlyOW9OYlpEV3Z3dGhxWU5xT2lnYUtkL1hsTFU0WEhmay9QWElqUHNMeS85L2tBdFErL3dLSCtoSS9JUk9XajVGUHZUWkFUOWY3ajRaWFF5RzRNMFR1ak1BRlhZa0t2RUh2MXhoeVNla2dYR0dxTnhXZVdLbGY4ZERBbEx1QjFjYi9xT0Qrcms3Y213dCsxeUtwazljdWRxQmFuVGk2elRiWFJ0VjhxeWxOdGp5T1ZLeTFIVHowR1c5cmp0NnNTakFaY1Q1UitLZHR5WWIwenlxRzlwU0x1Q3c1V0J3QW43ZmpCaktMTG94TFhNSSs1Mkw5Y0x3SVIyQjZPbGxKWkxISjh2RHhtV2R0RitRSm5tdDFyc0hQSVdZMjBsZnRrOGZZZVBrQUlnNkhnbjUzMlFvSXBlZ014aVdnQU9mZTUvVTQ0QVBSOEFjME5lWnJWaDNnRWhzMTJXK3RWU2lXaVVRZWtmL1lCRUNVeTVmZFliQTA4ZGQ3VnpQQVA5YWlWY0lCOWs2dFk3V2RKMXdOVitiSGV5ZE50bUM2RzVJQ3RGQzFad21KVS9qOGhmMEk4VFJWS1NpejVvWUlhOTNFcFVJNzhYOEdZSUFaYWJ4NDcvbjhMREFBSjBuTnRQMXJwUk9wcnFLTUJSZWNTaGNhNnFYdVRTSTNqWkJMT0IzVnAzODFCNXJDR2hqU3ZoL05TVmtZcDJxSWRQL0JnPVwiO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MTM5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIENvcHlyaWdodCAyMDEzIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbiAgIENvbGxlY3Rpb24gb2Ygc3RhdGljIGRpY3Rpb25hcnkgd29yZHMuXG4qL1xuXG52YXIgZGF0YSA9IF9fd2VicGFja19yZXF1aXJlX18oNTM0MCk7XG5leHBvcnRzLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgZXhwb3J0cy5kaWN0aW9uYXJ5ID0gZGF0YS5pbml0KCk7XG59O1xuXG5leHBvcnRzLm9mZnNldHNCeUxlbmd0aCA9IG5ldyBVaW50MzJBcnJheShbXG4gICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgNDA5NiwgIDkyMTYsIDIxNTA0LCAzNTg0MCwgNDQwMzIsXG4gNTMyNDgsIDYzNDg4LCA3NDc1MiwgODcwNDAsIDkzNjk2LCAxMDA4NjQsIDEwNDcwNCwgMTA2NzUyLCAxMDg5MjgsIDExMzUzNixcbiAxMTU5NjgsIDExODUyOCwgMTE5ODcyLCAxMjEyODAsIDEyMjAxNixcbl0pO1xuXG5leHBvcnRzLnNpemVCaXRzQnlMZW5ndGggPSBuZXcgVWludDhBcnJheShbXG4gIDAsICAwLCAgMCwgIDAsIDEwLCAxMCwgMTEsIDExLCAxMCwgMTAsXG4gMTAsIDEwLCAxMCwgIDksICA5LCAgOCwgIDcsICA3LCAgOCwgIDcsXG4gIDcsICA2LCAgNiwgIDUsICA1LFxuXSk7XG5cbmV4cG9ydHMubWluRGljdGlvbmFyeVdvcmRMZW5ndGggPSA0O1xuZXhwb3J0cy5tYXhEaWN0aW9uYXJ5V29yZExlbmd0aCA9IDI0O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5NjY6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuZnVuY3Rpb24gSHVmZm1hbkNvZGUoYml0cywgdmFsdWUpIHtcbiAgdGhpcy5iaXRzID0gYml0czsgICAvKiBudW1iZXIgb2YgYml0cyB1c2VkIGZvciB0aGlzIHN5bWJvbCAqL1xuICB0aGlzLnZhbHVlID0gdmFsdWU7IC8qIHN5bWJvbCB2YWx1ZSBvciB0YWJsZSBvZmZzZXQgKi9cbn1cblxuZXhwb3J0cy5oID0gSHVmZm1hbkNvZGU7XG5cbnZhciBNQVhfTEVOR1RIID0gMTU7XG5cbi8qIFJldHVybnMgcmV2ZXJzZShyZXZlcnNlKGtleSwgbGVuKSArIDEsIGxlbiksIHdoZXJlIHJldmVyc2Uoa2V5LCBsZW4pIGlzIHRoZVxuICAgYml0LXdpc2UgcmV2ZXJzYWwgb2YgdGhlIGxlbiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIGtleS4gKi9cbmZ1bmN0aW9uIEdldE5leHRLZXkoa2V5LCBsZW4pIHtcbiAgdmFyIHN0ZXAgPSAxIDw8IChsZW4gLSAxKTtcbiAgd2hpbGUgKGtleSAmIHN0ZXApIHtcbiAgICBzdGVwID4+PSAxO1xuICB9XG4gIHJldHVybiAoa2V5ICYgKHN0ZXAgLSAxKSkgKyBzdGVwO1xufVxuXG4vKiBTdG9yZXMgY29kZSBpbiB0YWJsZVswXSwgdGFibGVbc3RlcF0sIHRhYmxlWzIqc3RlcF0sIC4uLiwgdGFibGVbZW5kXSAqL1xuLyogQXNzdW1lcyB0aGF0IGVuZCBpcyBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIHN0ZXAgKi9cbmZ1bmN0aW9uIFJlcGxpY2F0ZVZhbHVlKHRhYmxlLCBpLCBzdGVwLCBlbmQsIGNvZGUpIHtcbiAgZG8ge1xuICAgIGVuZCAtPSBzdGVwO1xuICAgIHRhYmxlW2kgKyBlbmRdID0gbmV3IEh1ZmZtYW5Db2RlKGNvZGUuYml0cywgY29kZS52YWx1ZSk7XG4gIH0gd2hpbGUgKGVuZCA+IDApO1xufVxuXG4vKiBSZXR1cm5zIHRoZSB0YWJsZSB3aWR0aCBvZiB0aGUgbmV4dCAybmQgbGV2ZWwgdGFibGUuIGNvdW50IGlzIHRoZSBoaXN0b2dyYW1cbiAgIG9mIGJpdCBsZW5ndGhzIGZvciB0aGUgcmVtYWluaW5nIHN5bWJvbHMsIGxlbiBpcyB0aGUgY29kZSBsZW5ndGggb2YgdGhlIG5leHRcbiAgIHByb2Nlc3NlZCBzeW1ib2wgKi9cbmZ1bmN0aW9uIE5leHRUYWJsZUJpdFNpemUoY291bnQsIGxlbiwgcm9vdF9iaXRzKSB7XG4gIHZhciBsZWZ0ID0gMSA8PCAobGVuIC0gcm9vdF9iaXRzKTtcbiAgd2hpbGUgKGxlbiA8IE1BWF9MRU5HVEgpIHtcbiAgICBsZWZ0IC09IGNvdW50W2xlbl07XG4gICAgaWYgKGxlZnQgPD0gMCkgYnJlYWs7XG4gICAgKytsZW47XG4gICAgbGVmdCA8PD0gMTtcbiAgfVxuICByZXR1cm4gbGVuIC0gcm9vdF9iaXRzO1xufVxuXG5leHBvcnRzLmcgPSBmdW5jdGlvbihyb290X3RhYmxlLCB0YWJsZSwgcm9vdF9iaXRzLCBjb2RlX2xlbmd0aHMsIGNvZGVfbGVuZ3Roc19zaXplKSB7XG4gIHZhciBzdGFydF90YWJsZSA9IHRhYmxlO1xuICB2YXIgY29kZTsgICAgICAgICAgICAvKiBjdXJyZW50IHRhYmxlIGVudHJ5ICovXG4gIHZhciBsZW47ICAgICAgICAgICAgIC8qIGN1cnJlbnQgY29kZSBsZW5ndGggKi9cbiAgdmFyIHN5bWJvbDsgICAgICAgICAgLyogc3ltYm9sIGluZGV4IGluIG9yaWdpbmFsIG9yIHNvcnRlZCB0YWJsZSAqL1xuICB2YXIga2V5OyAgICAgICAgICAgICAvKiByZXZlcnNlZCBwcmVmaXggY29kZSAqL1xuICB2YXIgc3RlcDsgICAgICAgICAgICAvKiBzdGVwIHNpemUgdG8gcmVwbGljYXRlIHZhbHVlcyBpbiBjdXJyZW50IHRhYmxlICovXG4gIHZhciBsb3c7ICAgICAgICAgICAgIC8qIGxvdyBiaXRzIGZvciBjdXJyZW50IHJvb3QgZW50cnkgKi9cbiAgdmFyIG1hc2s7ICAgICAgICAgICAgLyogbWFzayBmb3IgbG93IGJpdHMgKi9cbiAgdmFyIHRhYmxlX2JpdHM7ICAgICAgLyoga2V5IGxlbmd0aCBvZiBjdXJyZW50IHRhYmxlICovXG4gIHZhciB0YWJsZV9zaXplOyAgICAgIC8qIHNpemUgb2YgY3VycmVudCB0YWJsZSAqL1xuICB2YXIgdG90YWxfc2l6ZTsgICAgICAvKiBzdW0gb2Ygcm9vdCB0YWJsZSBzaXplIGFuZCAybmQgbGV2ZWwgdGFibGUgc2l6ZXMgKi9cbiAgdmFyIHNvcnRlZDsgICAgICAgICAgLyogc3ltYm9scyBzb3J0ZWQgYnkgY29kZSBsZW5ndGggKi9cbiAgdmFyIGNvdW50ID0gbmV3IEludDMyQXJyYXkoTUFYX0xFTkdUSCArIDEpOyAgLyogbnVtYmVyIG9mIGNvZGVzIG9mIGVhY2ggbGVuZ3RoICovXG4gIHZhciBvZmZzZXQgPSBuZXcgSW50MzJBcnJheShNQVhfTEVOR1RIICsgMSk7ICAvKiBvZmZzZXRzIGluIHNvcnRlZCB0YWJsZSBmb3IgZWFjaCBsZW5ndGggKi9cblxuICBzb3J0ZWQgPSBuZXcgSW50MzJBcnJheShjb2RlX2xlbmd0aHNfc2l6ZSk7XG5cbiAgLyogYnVpbGQgaGlzdG9ncmFtIG9mIGNvZGUgbGVuZ3RocyAqL1xuICBmb3IgKHN5bWJvbCA9IDA7IHN5bWJvbCA8IGNvZGVfbGVuZ3Roc19zaXplOyBzeW1ib2wrKykge1xuICAgIGNvdW50W2NvZGVfbGVuZ3Roc1tzeW1ib2xdXSsrO1xuICB9XG5cbiAgLyogZ2VuZXJhdGUgb2Zmc2V0cyBpbnRvIHNvcnRlZCBzeW1ib2wgdGFibGUgYnkgY29kZSBsZW5ndGggKi9cbiAgb2Zmc2V0WzFdID0gMDtcbiAgZm9yIChsZW4gPSAxOyBsZW4gPCBNQVhfTEVOR1RIOyBsZW4rKykge1xuICAgIG9mZnNldFtsZW4gKyAxXSA9IG9mZnNldFtsZW5dICsgY291bnRbbGVuXTtcbiAgfVxuXG4gIC8qIHNvcnQgc3ltYm9scyBieSBsZW5ndGgsIGJ5IHN5bWJvbCBvcmRlciB3aXRoaW4gZWFjaCBsZW5ndGggKi9cbiAgZm9yIChzeW1ib2wgPSAwOyBzeW1ib2wgPCBjb2RlX2xlbmd0aHNfc2l6ZTsgc3ltYm9sKyspIHtcbiAgICBpZiAoY29kZV9sZW5ndGhzW3N5bWJvbF0gIT09IDApIHtcbiAgICAgIHNvcnRlZFtvZmZzZXRbY29kZV9sZW5ndGhzW3N5bWJvbF1dKytdID0gc3ltYm9sO1xuICAgIH1cbiAgfVxuICBcbiAgdGFibGVfYml0cyA9IHJvb3RfYml0cztcbiAgdGFibGVfc2l6ZSA9IDEgPDwgdGFibGVfYml0cztcbiAgdG90YWxfc2l6ZSA9IHRhYmxlX3NpemU7XG5cbiAgLyogc3BlY2lhbCBjYXNlIGNvZGUgd2l0aCBvbmx5IG9uZSB2YWx1ZSAqL1xuICBpZiAob2Zmc2V0W01BWF9MRU5HVEhdID09PSAxKSB7XG4gICAgZm9yIChrZXkgPSAwOyBrZXkgPCB0b3RhbF9zaXplOyArK2tleSkge1xuICAgICAgcm9vdF90YWJsZVt0YWJsZSArIGtleV0gPSBuZXcgSHVmZm1hbkNvZGUoMCwgc29ydGVkWzBdICYgMHhmZmZmKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRvdGFsX3NpemU7XG4gIH1cblxuICAvKiBmaWxsIGluIHJvb3QgdGFibGUgKi9cbiAga2V5ID0gMDtcbiAgc3ltYm9sID0gMDtcbiAgZm9yIChsZW4gPSAxLCBzdGVwID0gMjsgbGVuIDw9IHJvb3RfYml0czsgKytsZW4sIHN0ZXAgPDw9IDEpIHtcbiAgICBmb3IgKDsgY291bnRbbGVuXSA+IDA7IC0tY291bnRbbGVuXSkge1xuICAgICAgY29kZSA9IG5ldyBIdWZmbWFuQ29kZShsZW4gJiAweGZmLCBzb3J0ZWRbc3ltYm9sKytdICYgMHhmZmZmKTtcbiAgICAgIFJlcGxpY2F0ZVZhbHVlKHJvb3RfdGFibGUsIHRhYmxlICsga2V5LCBzdGVwLCB0YWJsZV9zaXplLCBjb2RlKTtcbiAgICAgIGtleSA9IEdldE5leHRLZXkoa2V5LCBsZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qIGZpbGwgaW4gMm5kIGxldmVsIHRhYmxlcyBhbmQgYWRkIHBvaW50ZXJzIHRvIHJvb3QgdGFibGUgKi9cbiAgbWFzayA9IHRvdGFsX3NpemUgLSAxO1xuICBsb3cgPSAtMTtcbiAgZm9yIChsZW4gPSByb290X2JpdHMgKyAxLCBzdGVwID0gMjsgbGVuIDw9IE1BWF9MRU5HVEg7ICsrbGVuLCBzdGVwIDw8PSAxKSB7XG4gICAgZm9yICg7IGNvdW50W2xlbl0gPiAwOyAtLWNvdW50W2xlbl0pIHtcbiAgICAgIGlmICgoa2V5ICYgbWFzaykgIT09IGxvdykge1xuICAgICAgICB0YWJsZSArPSB0YWJsZV9zaXplO1xuICAgICAgICB0YWJsZV9iaXRzID0gTmV4dFRhYmxlQml0U2l6ZShjb3VudCwgbGVuLCByb290X2JpdHMpO1xuICAgICAgICB0YWJsZV9zaXplID0gMSA8PCB0YWJsZV9iaXRzO1xuICAgICAgICB0b3RhbF9zaXplICs9IHRhYmxlX3NpemU7XG4gICAgICAgIGxvdyA9IGtleSAmIG1hc2s7XG4gICAgICAgIHJvb3RfdGFibGVbc3RhcnRfdGFibGUgKyBsb3ddID0gbmV3IEh1ZmZtYW5Db2RlKCh0YWJsZV9iaXRzICsgcm9vdF9iaXRzKSAmIDB4ZmYsICgodGFibGUgLSBzdGFydF90YWJsZSkgLSBsb3cpICYgMHhmZmZmKTtcbiAgICAgIH1cbiAgICAgIGNvZGUgPSBuZXcgSHVmZm1hbkNvZGUoKGxlbiAtIHJvb3RfYml0cykgJiAweGZmLCBzb3J0ZWRbc3ltYm9sKytdICYgMHhmZmZmKTtcbiAgICAgIFJlcGxpY2F0ZVZhbHVlKHJvb3RfdGFibGUsIHRhYmxlICsgKGtleSA+PiByb290X2JpdHMpLCBzdGVwLCB0YWJsZV9zaXplLCBjb2RlKTtcbiAgICAgIGtleSA9IEdldE5leHRLZXkoa2V5LCBsZW4pO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIHRvdGFsX3NpemU7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDg0MzU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuLyogQ29weXJpZ2h0IDIwMTMgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuICAgTG9va3VwIHRhYmxlcyB0byBtYXAgcHJlZml4IGNvZGVzIHRvIHZhbHVlIHJhbmdlcy4gVGhpcyBpcyB1c2VkIGR1cmluZ1xuICAgZGVjb2Rpbmcgb2YgdGhlIGJsb2NrIGxlbmd0aHMsIGxpdGVyYWwgaW5zZXJ0aW9uIGxlbmd0aHMgYW5kIGNvcHkgbGVuZ3Rocy5cbiovXG5cbi8qIFJlcHJlc2VudHMgdGhlIHJhbmdlIG9mIHZhbHVlcyBiZWxvbmdpbmcgdG8gYSBwcmVmaXggY29kZTogKi9cbi8qIFtvZmZzZXQsIG9mZnNldCArIDJebmJpdHMpICovXG5mdW5jdGlvbiBQcmVmaXhDb2RlUmFuZ2Uob2Zmc2V0LCBuYml0cykge1xuICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgdGhpcy5uYml0cyA9IG5iaXRzO1xufVxuXG5leHBvcnRzLmtCbG9ja0xlbmd0aFByZWZpeENvZGUgPSBbXG4gIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMSwgMiksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoNSwgMiksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoOSwgMiksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMTMsIDIpLFxuICBuZXcgUHJlZml4Q29kZVJhbmdlKDE3LCAzKSwgbmV3IFByZWZpeENvZGVSYW5nZSgyNSwgMyksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMzMsIDMpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDQxLCAzKSxcbiAgbmV3IFByZWZpeENvZGVSYW5nZSg0OSwgNCksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoNjUsIDQpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDgxLCA0KSwgbmV3IFByZWZpeENvZGVSYW5nZSg5NywgNCksXG4gIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMTEzLCA1KSwgbmV3IFByZWZpeENvZGVSYW5nZSgxNDUsIDUpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDE3NywgNSksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMjA5LCA1KSxcbiAgbmV3IFByZWZpeENvZGVSYW5nZSgyNDEsIDYpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDMwNSwgNiksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMzY5LCA3KSwgbmV3IFByZWZpeENvZGVSYW5nZSg0OTcsIDgpLFxuICBuZXcgUHJlZml4Q29kZVJhbmdlKDc1MywgOSksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMTI2NSwgMTApLCBuZXcgUHJlZml4Q29kZVJhbmdlKDIyODksIDExKSwgbmV3IFByZWZpeENvZGVSYW5nZSg0MzM3LCAxMiksXG4gIG5ldyBQcmVmaXhDb2RlUmFuZ2UoODQzMywgMTMpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDE2NjI1LCAyNClcbl07XG5cbmV4cG9ydHMua0luc2VydExlbmd0aFByZWZpeENvZGUgPSBbXG4gIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMCwgMCksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMSwgMCksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMiwgMCksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMywgMCksXG4gIG5ldyBQcmVmaXhDb2RlUmFuZ2UoNCwgMCksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoNSwgMCksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoNiwgMSksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoOCwgMSksXG4gIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMTAsIDIpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDE0LCAyKSwgbmV3IFByZWZpeENvZGVSYW5nZSgxOCwgMyksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMjYsIDMpLFxuICBuZXcgUHJlZml4Q29kZVJhbmdlKDM0LCA0KSwgbmV3IFByZWZpeENvZGVSYW5nZSg1MCwgNCksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoNjYsIDUpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDk4LCA1KSxcbiAgbmV3IFByZWZpeENvZGVSYW5nZSgxMzAsIDYpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDE5NCwgNyksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMzIyLCA4KSwgbmV3IFByZWZpeENvZGVSYW5nZSg1NzgsIDkpLFxuICBuZXcgUHJlZml4Q29kZVJhbmdlKDEwOTAsIDEwKSwgbmV3IFByZWZpeENvZGVSYW5nZSgyMTE0LCAxMiksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoNjIxMCwgMTQpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDIyNTk0LCAyNCksXG5dO1xuXG5leHBvcnRzLmtDb3B5TGVuZ3RoUHJlZml4Q29kZSA9IFtcbiAgbmV3IFByZWZpeENvZGVSYW5nZSgyLCAwKSwgbmV3IFByZWZpeENvZGVSYW5nZSgzLCAwKSwgbmV3IFByZWZpeENvZGVSYW5nZSg0LCAwKSwgbmV3IFByZWZpeENvZGVSYW5nZSg1LCAwKSxcbiAgbmV3IFByZWZpeENvZGVSYW5nZSg2LCAwKSwgbmV3IFByZWZpeENvZGVSYW5nZSg3LCAwKSwgbmV3IFByZWZpeENvZGVSYW5nZSg4LCAwKSwgbmV3IFByZWZpeENvZGVSYW5nZSg5LCAwKSxcbiAgbmV3IFByZWZpeENvZGVSYW5nZSgxMCwgMSksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMTIsIDEpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDE0LCAyKSwgbmV3IFByZWZpeENvZGVSYW5nZSgxOCwgMiksXG4gIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMjIsIDMpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDMwLCAzKSwgbmV3IFByZWZpeENvZGVSYW5nZSgzOCwgNCksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoNTQsIDQpLFxuICBuZXcgUHJlZml4Q29kZVJhbmdlKDcwLCA1KSwgbmV3IFByZWZpeENvZGVSYW5nZSgxMDIsIDUpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDEzNCwgNiksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMTk4LCA3KSxcbiAgbmV3IFByZWZpeENvZGVSYW5nZSgzMjYsIDgpLCBuZXcgUHJlZml4Q29kZVJhbmdlKDU4MiwgOSksIG5ldyBQcmVmaXhDb2RlUmFuZ2UoMTA5NCwgMTApLCBuZXcgUHJlZml4Q29kZVJhbmdlKDIxMTgsIDI0KSxcbl07XG5cbmV4cG9ydHMua0luc2VydFJhbmdlTHV0ID0gW1xuICAwLCAwLCA4LCA4LCAwLCAxNiwgOCwgMTYsIDE2LFxuXTtcblxuZXhwb3J0cy5rQ29weVJhbmdlTHV0ID0gW1xuICAwLCA4LCAwLCA4LCAxNiwgMCwgMTYsIDgsIDE2LFxuXTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjE1NDpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5mdW5jdGlvbiBCcm90bGlJbnB1dChidWZmZXIpIHtcbiAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gIHRoaXMucG9zID0gMDtcbn1cblxuQnJvdGxpSW5wdXQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihidWYsIGksIGNvdW50KSB7XG4gIGlmICh0aGlzLnBvcyArIGNvdW50ID4gdGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgY291bnQgPSB0aGlzLmJ1ZmZlci5sZW5ndGggLSB0aGlzLnBvcztcbiAgfVxuICBcbiAgZm9yICh2YXIgcCA9IDA7IHAgPCBjb3VudDsgcCsrKVxuICAgIGJ1ZltpICsgcF0gPSB0aGlzLmJ1ZmZlclt0aGlzLnBvcyArIHBdO1xuICBcbiAgdGhpcy5wb3MgKz0gY291bnQ7XG4gIHJldHVybiBjb3VudDtcbn1cblxuZXhwb3J0cy5nID0gQnJvdGxpSW5wdXQ7XG5cbmZ1bmN0aW9uIEJyb3RsaU91dHB1dChidWYpIHtcbiAgdGhpcy5idWZmZXIgPSBidWY7XG4gIHRoaXMucG9zID0gMDtcbn1cblxuQnJvdGxpT3V0cHV0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1ZiwgY291bnQpIHtcbiAgaWYgKHRoaXMucG9zICsgY291bnQgPiB0aGlzLmJ1ZmZlci5sZW5ndGgpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdPdXRwdXQgYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2gnKTtcbiAgXG4gIHRoaXMuYnVmZmVyLnNldChidWYuc3ViYXJyYXkoMCwgY291bnQpLCB0aGlzLnBvcyk7XG4gIHRoaXMucG9zICs9IGNvdW50O1xuICByZXR1cm4gY291bnQ7XG59O1xuXG5leHBvcnRzLmogPSBCcm90bGlPdXRwdXQ7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI5NzM6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLyogQ29weXJpZ2h0IDIwMTMgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuICAgVHJhbnNmb3JtYXRpb25zIG9uIGRpY3Rpb25hcnkgd29yZHMuXG4qL1xuXG52YXIgQnJvdGxpRGljdGlvbmFyeSA9IF9fd2VicGFja19yZXF1aXJlX18oNTEzOSk7XG5cbnZhciBrSWRlbnRpdHkgICAgICAgPSAwO1xudmFyIGtPbWl0TGFzdDEgICAgICA9IDE7XG52YXIga09taXRMYXN0MiAgICAgID0gMjtcbnZhciBrT21pdExhc3QzICAgICAgPSAzO1xudmFyIGtPbWl0TGFzdDQgICAgICA9IDQ7XG52YXIga09taXRMYXN0NSAgICAgID0gNTtcbnZhciBrT21pdExhc3Q2ICAgICAgPSA2O1xudmFyIGtPbWl0TGFzdDcgICAgICA9IDc7XG52YXIga09taXRMYXN0OCAgICAgID0gODtcbnZhciBrT21pdExhc3Q5ICAgICAgPSA5O1xudmFyIGtVcHBlcmNhc2VGaXJzdCA9IDEwO1xudmFyIGtVcHBlcmNhc2VBbGwgICA9IDExO1xudmFyIGtPbWl0Rmlyc3QxICAgICA9IDEyO1xudmFyIGtPbWl0Rmlyc3QyICAgICA9IDEzO1xudmFyIGtPbWl0Rmlyc3QzICAgICA9IDE0O1xudmFyIGtPbWl0Rmlyc3Q0ICAgICA9IDE1O1xudmFyIGtPbWl0Rmlyc3Q1ICAgICA9IDE2O1xudmFyIGtPbWl0Rmlyc3Q2ICAgICA9IDE3O1xudmFyIGtPbWl0Rmlyc3Q3ICAgICA9IDE4O1xudmFyIGtPbWl0Rmlyc3Q4ICAgICA9IDE5O1xudmFyIGtPbWl0Rmlyc3Q5ICAgICA9IDIwO1xuXG5mdW5jdGlvbiBUcmFuc2Zvcm0ocHJlZml4LCB0cmFuc2Zvcm0sIHN1ZmZpeCkge1xuICB0aGlzLnByZWZpeCA9IG5ldyBVaW50OEFycmF5KHByZWZpeC5sZW5ndGgpO1xuICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgdGhpcy5zdWZmaXggPSBuZXcgVWludDhBcnJheShzdWZmaXgubGVuZ3RoKTtcbiAgXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlZml4Lmxlbmd0aDsgaSsrKVxuICAgIHRoaXMucHJlZml4W2ldID0gcHJlZml4LmNoYXJDb2RlQXQoaSk7XG4gIFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1ZmZpeC5sZW5ndGg7IGkrKylcbiAgICB0aGlzLnN1ZmZpeFtpXSA9IHN1ZmZpeC5jaGFyQ29kZUF0KGkpO1xufVxuXG52YXIga1RyYW5zZm9ybXMgPSBbXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcIlwiICAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIgXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgIFwiIFwiLCBrSWRlbnRpdHksICAgICAgIFwiIFwiICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga09taXRGaXJzdDEsICAgICBcIlwiICAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtVcHBlcmNhc2VGaXJzdCwgXCIgXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiIHRoZSBcIiAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICBcIiBcIiwga0lkZW50aXR5LCAgICAgICBcIlwiICAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICBcInMgXCIsIGtJZGVudGl0eSwgICAgICAgXCIgXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiIG9mIFwiICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga1VwcGVyY2FzZUZpcnN0LCBcIlwiICAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIgYW5kIFwiICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrT21pdEZpcnN0MiwgICAgIFwiXCIgICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga09taXRMYXN0MSwgICAgICBcIlwiICAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICBcIiwgXCIsIGtJZGVudGl0eSwgICAgICAgXCIgXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiLCBcIiAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICBcIiBcIiwga1VwcGVyY2FzZUZpcnN0LCBcIiBcIiAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIgaW4gXCIgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiIHRvIFwiICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgIFwiZSBcIiwga0lkZW50aXR5LCAgICAgICBcIiBcIiAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCJcXFwiXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIuXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiXFxcIj5cIiAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiXFxuXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtPbWl0TGFzdDMsICAgICAgXCJcIiAgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiXVwiICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcIiBmb3IgXCIgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtPbWl0Rmlyc3QzLCAgICAgXCJcIiAgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrT21pdExhc3QyLCAgICAgIFwiXCIgICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcIiBhIFwiICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIgdGhhdCBcIiAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgIFwiIFwiLCBrVXBwZXJjYXNlRmlyc3QsIFwiXCIgICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcIi4gXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgXCIuXCIsIGtJZGVudGl0eSwgICAgICAgXCJcIiAgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgIFwiIFwiLCBrSWRlbnRpdHksICAgICAgIFwiLCBcIiAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga09taXRGaXJzdDQsICAgICBcIlwiICAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIgd2l0aCBcIiAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiJ1wiICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcIiBmcm9tIFwiICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIgYnkgXCIgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrT21pdEZpcnN0NSwgICAgIFwiXCIgICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga09taXRGaXJzdDYsICAgICBcIlwiICAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICBcIiB0aGUgXCIsIGtJZGVudGl0eSwgICAgICAgXCJcIiAgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrT21pdExhc3Q0LCAgICAgIFwiXCIgICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcIi4gVGhlIFwiICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtVcHBlcmNhc2VBbGwsICAgXCJcIiAgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiIG9uIFwiICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcIiBhcyBcIiAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIgaXMgXCIgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrT21pdExhc3Q3LCAgICAgIFwiXCIgICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga09taXRMYXN0MSwgICAgICBcImluZyBcIiAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCJcXG5cXHRcIiAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCI6XCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgIFwiIFwiLCBrSWRlbnRpdHksICAgICAgIFwiLiBcIiAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcImVkIFwiICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtPbWl0Rmlyc3Q5LCAgICAgXCJcIiAgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrT21pdEZpcnN0NywgICAgIFwiXCIgICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga09taXRMYXN0NiwgICAgICBcIlwiICAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIoXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrVXBwZXJjYXNlRmlyc3QsIFwiLCBcIiAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga09taXRMYXN0OCwgICAgICBcIlwiICAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIgYXQgXCIgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwibHkgXCIgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgIFwiIHRoZSBcIiwga0lkZW50aXR5LCAgICAgICBcIiBvZiBcIiAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtPbWl0TGFzdDUsICAgICAgXCJcIiAgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrT21pdExhc3Q5LCAgICAgIFwiXCIgICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICBcIiBcIiwga1VwcGVyY2FzZUZpcnN0LCBcIiwgXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtVcHBlcmNhc2VGaXJzdCwgXCJcXFwiXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgXCIuXCIsIGtJZGVudGl0eSwgICAgICAgXCIoXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrVXBwZXJjYXNlQWxsLCAgIFwiIFwiICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga1VwcGVyY2FzZUZpcnN0LCBcIlxcXCI+XCIgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcIj1cXFwiXCIgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICBcIiBcIiwga0lkZW50aXR5LCAgICAgICBcIi5cIiAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICBcIi5jb20vXCIsIGtJZGVudGl0eSwgICAgICAgXCJcIiAgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgXCIgdGhlIFwiLCBrSWRlbnRpdHksICAgICAgIFwiIG9mIHRoZSBcIiAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga1VwcGVyY2FzZUZpcnN0LCBcIidcIiAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCIuIFRoaXMgXCIgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiLFwiICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICBcIi5cIiwga0lkZW50aXR5LCAgICAgICBcIiBcIiAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtVcHBlcmNhc2VGaXJzdCwgXCIoXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrVXBwZXJjYXNlRmlyc3QsIFwiLlwiICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcIiBub3QgXCIgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgXCIgXCIsIGtJZGVudGl0eSwgICAgICAgXCI9XFxcIlwiICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCJlciBcIiAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgIFwiIFwiLCBrVXBwZXJjYXNlQWxsLCAgIFwiIFwiICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga0lkZW50aXR5LCAgICAgICBcImFsIFwiICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgXCIgXCIsIGtVcHBlcmNhc2VBbGwsICAgXCJcIiAgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiPSdcIiAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga1VwcGVyY2FzZUFsbCwgICBcIlxcXCJcIiAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga1VwcGVyY2FzZUZpcnN0LCBcIi4gXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgXCIgXCIsIGtJZGVudGl0eSwgICAgICAgXCIoXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiZnVsIFwiICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICBcIiBcIiwga1VwcGVyY2FzZUZpcnN0LCBcIi4gXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCJpdmUgXCIgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwibGVzcyBcIiAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga1VwcGVyY2FzZUFsbCwgICBcIidcIiAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtJZGVudGl0eSwgICAgICAgXCJlc3QgXCIgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgIFwiIFwiLCBrVXBwZXJjYXNlRmlyc3QsIFwiLlwiICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga1VwcGVyY2FzZUFsbCwgICBcIlxcXCI+XCIgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICBcIiBcIiwga0lkZW50aXR5LCAgICAgICBcIj0nXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtVcHBlcmNhc2VGaXJzdCwgXCIsXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwiaXplIFwiICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga1VwcGVyY2FzZUFsbCwgICBcIi5cIiAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCBcIlxceGMyXFx4YTBcIiwga0lkZW50aXR5LCAgICAgICBcIlwiICAgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgXCIgXCIsIGtJZGVudGl0eSwgICAgICAgXCIsXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrVXBwZXJjYXNlRmlyc3QsIFwiPVxcXCJcIiAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrVXBwZXJjYXNlQWxsLCAgIFwiPVxcXCJcIiAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrSWRlbnRpdHksICAgICAgIFwib3VzIFwiICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga1VwcGVyY2FzZUFsbCwgICBcIiwgXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtVcHBlcmNhc2VGaXJzdCwgXCI9J1wiICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgIFwiIFwiLCBrVXBwZXJjYXNlRmlyc3QsIFwiLFwiICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICBcIiBcIiwga1VwcGVyY2FzZUFsbCwgICBcIj1cXFwiXCIgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICBcIiBcIiwga1VwcGVyY2FzZUFsbCwgICBcIiwgXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgIFwiXCIsIGtVcHBlcmNhc2VBbGwsICAgXCIsXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrVXBwZXJjYXNlQWxsLCAgIFwiKFwiICAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICAgXCJcIiwga1VwcGVyY2FzZUFsbCwgICBcIi4gXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgXCIgXCIsIGtVcHBlcmNhc2VBbGwsICAgXCIuXCIgICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgICBcIlwiLCBrVXBwZXJjYXNlQWxsLCAgIFwiPSdcIiAgICAgICAgICksXG4gICAgIG5ldyBUcmFuc2Zvcm0oICAgICAgICBcIiBcIiwga1VwcGVyY2FzZUFsbCwgICBcIi4gXCIgICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgXCIgXCIsIGtVcHBlcmNhc2VGaXJzdCwgXCI9XFxcIlwiICAgICAgICApLFxuICAgICBuZXcgVHJhbnNmb3JtKCAgICAgICAgXCIgXCIsIGtVcHBlcmNhc2VBbGwsICAgXCI9J1wiICAgICAgICAgKSxcbiAgICAgbmV3IFRyYW5zZm9ybSggICAgICAgIFwiIFwiLCBrVXBwZXJjYXNlRmlyc3QsIFwiPSdcIiAgICAgICAgIClcbl07XG5cbmV4cG9ydHMua1RyYW5zZm9ybXMgPSBrVHJhbnNmb3JtcztcbmV4cG9ydHMua051bVRyYW5zZm9ybXMgPSBrVHJhbnNmb3Jtcy5sZW5ndGg7XG5cbmZ1bmN0aW9uIFRvVXBwZXJDYXNlKHAsIGkpIHtcbiAgaWYgKHBbaV0gPCAweGMwKSB7XG4gICAgaWYgKHBbaV0gPj0gOTcgJiYgcFtpXSA8PSAxMjIpIHtcbiAgICAgIHBbaV0gXj0gMzI7XG4gICAgfVxuICAgIHJldHVybiAxO1xuICB9XG4gIFxuICAvKiBBbiBvdmVybHkgc2ltcGxpZmllZCB1cHBlcmNhc2luZyBtb2RlbCBmb3IgdXRmLTguICovXG4gIGlmIChwW2ldIDwgMHhlMCkge1xuICAgIHBbaSArIDFdIF49IDMyO1xuICAgIHJldHVybiAyO1xuICB9XG4gIFxuICAvKiBBbiBhcmJpdHJhcnkgdHJhbnNmb3JtIGZvciB0aHJlZSBieXRlIGNoYXJhY3RlcnMuICovXG4gIHBbaSArIDJdIF49IDU7XG4gIHJldHVybiAzO1xufVxuXG5leHBvcnRzLnRyYW5zZm9ybURpY3Rpb25hcnlXb3JkID0gZnVuY3Rpb24oZHN0LCBpZHgsIHdvcmQsIGxlbiwgdHJhbnNmb3JtKSB7XG4gIHZhciBwcmVmaXggPSBrVHJhbnNmb3Jtc1t0cmFuc2Zvcm1dLnByZWZpeDtcbiAgdmFyIHN1ZmZpeCA9IGtUcmFuc2Zvcm1zW3RyYW5zZm9ybV0uc3VmZml4O1xuICB2YXIgdCA9IGtUcmFuc2Zvcm1zW3RyYW5zZm9ybV0udHJhbnNmb3JtO1xuICB2YXIgc2tpcCA9IHQgPCBrT21pdEZpcnN0MSA/IDAgOiB0IC0gKGtPbWl0Rmlyc3QxIC0gMSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHN0YXJ0X2lkeCA9IGlkeDtcbiAgdmFyIHVwcGVyY2FzZTtcbiAgXG4gIGlmIChza2lwID4gbGVuKSB7XG4gICAgc2tpcCA9IGxlbjtcbiAgfVxuICBcbiAgdmFyIHByZWZpeF9wb3MgPSAwO1xuICB3aGlsZSAocHJlZml4X3BvcyA8IHByZWZpeC5sZW5ndGgpIHtcbiAgICBkc3RbaWR4KytdID0gcHJlZml4W3ByZWZpeF9wb3MrK107XG4gIH1cbiAgXG4gIHdvcmQgKz0gc2tpcDtcbiAgbGVuIC09IHNraXA7XG4gIFxuICBpZiAodCA8PSBrT21pdExhc3Q5KSB7XG4gICAgbGVuIC09IHQ7XG4gIH1cbiAgXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGRzdFtpZHgrK10gPSBCcm90bGlEaWN0aW9uYXJ5LmRpY3Rpb25hcnlbd29yZCArIGldO1xuICB9XG4gIFxuICB1cHBlcmNhc2UgPSBpZHggLSBsZW47XG4gIFxuICBpZiAodCA9PT0ga1VwcGVyY2FzZUZpcnN0KSB7XG4gICAgVG9VcHBlckNhc2UoZHN0LCB1cHBlcmNhc2UpO1xuICB9IGVsc2UgaWYgKHQgPT09IGtVcHBlcmNhc2VBbGwpIHtcbiAgICB3aGlsZSAobGVuID4gMCkge1xuICAgICAgdmFyIHN0ZXAgPSBUb1VwcGVyQ2FzZShkc3QsIHVwcGVyY2FzZSk7XG4gICAgICB1cHBlcmNhc2UgKz0gc3RlcDtcbiAgICAgIGxlbiAtPSBzdGVwO1xuICAgIH1cbiAgfVxuICBcbiAgdmFyIHN1ZmZpeF9wb3MgPSAwO1xuICB3aGlsZSAoc3VmZml4X3BvcyA8IHN1ZmZpeC5sZW5ndGgpIHtcbiAgICBkc3RbaWR4KytdID0gc3VmZml4W3N1ZmZpeF9wb3MrK107XG4gIH1cbiAgXG4gIHJldHVybiBpZHggLSBzdGFydF9pZHg7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc3MDk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0NTApLkJyb3RsaURlY29tcHJlc3NCdWZmZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDQ1MDU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBwcm92aWRlZCBkZXBlbmRlbmN5ICovIHZhciBCdWZmZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4MjMpW1wiQnVmZmVyXCJdO1xuLyogcHJvdmlkZWQgZGVwZW5kZW5jeSAqLyB2YXIgcHJvY2VzcyA9IF9fd2VicGFja19yZXF1aXJlX18oNDE1NSk7XG5cbi8qIGVzbGludCBjYW1lbGNhc2U6IFwib2ZmXCIgKi9cblxudmFyIGFzc2VydCA9IF9fd2VicGFja19yZXF1aXJlX18oOTI4Mik7XG5cbnZhciBac3RyZWFtID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjkyKTtcbnZhciB6bGliX2RlZmxhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwNSk7XG52YXIgemxpYl9pbmZsYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTQ4KTtcbnZhciBjb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MTkpO1xuXG5mb3IgKHZhciBrZXkgaW4gY29uc3RhbnRzKSB7XG4gIGV4cG9ydHNba2V5XSA9IGNvbnN0YW50c1trZXldO1xufVxuXG4vLyB6bGliIG1vZGVzXG5leHBvcnRzLk5PTkUgPSAwO1xuZXhwb3J0cy5ERUZMQVRFID0gMTtcbmV4cG9ydHMuSU5GTEFURSA9IDI7XG5leHBvcnRzLkdaSVAgPSAzO1xuZXhwb3J0cy5HVU5aSVAgPSA0O1xuZXhwb3J0cy5ERUZMQVRFUkFXID0gNTtcbmV4cG9ydHMuSU5GTEFURVJBVyA9IDY7XG5leHBvcnRzLlVOWklQID0gNztcblxudmFyIEdaSVBfSEVBREVSX0lEMSA9IDB4MWY7XG52YXIgR1pJUF9IRUFERVJfSUQyID0gMHg4YjtcblxuLyoqXG4gKiBFbXVsYXRlIE5vZGUncyB6bGliIEMrKyBsYXllciBmb3IgdXNlIGJ5IHRoZSBKUyBsYXllciBpbiBpbmRleC5qc1xuICovXG5mdW5jdGlvbiBabGliKG1vZGUpIHtcbiAgaWYgKHR5cGVvZiBtb2RlICE9PSAnbnVtYmVyJyB8fCBtb2RlIDwgZXhwb3J0cy5ERUZMQVRFIHx8IG1vZGUgPiBleHBvcnRzLlVOWklQKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQmFkIGFyZ3VtZW50Jyk7XG4gIH1cblxuICB0aGlzLmRpY3Rpb25hcnkgPSBudWxsO1xuICB0aGlzLmVyciA9IDA7XG4gIHRoaXMuZmx1c2ggPSAwO1xuICB0aGlzLmluaXRfZG9uZSA9IGZhbHNlO1xuICB0aGlzLmxldmVsID0gMDtcbiAgdGhpcy5tZW1MZXZlbCA9IDA7XG4gIHRoaXMubW9kZSA9IG1vZGU7XG4gIHRoaXMuc3RyYXRlZ3kgPSAwO1xuICB0aGlzLndpbmRvd0JpdHMgPSAwO1xuICB0aGlzLndyaXRlX2luX3Byb2dyZXNzID0gZmFsc2U7XG4gIHRoaXMucGVuZGluZ19jbG9zZSA9IGZhbHNlO1xuICB0aGlzLmd6aXBfaWRfYnl0ZXNfcmVhZCA9IDA7XG59XG5cblpsaWIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy53cml0ZV9pbl9wcm9ncmVzcykge1xuICAgIHRoaXMucGVuZGluZ19jbG9zZSA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5wZW5kaW5nX2Nsb3NlID0gZmFsc2U7XG5cbiAgYXNzZXJ0KHRoaXMuaW5pdF9kb25lLCAnY2xvc2UgYmVmb3JlIGluaXQnKTtcbiAgYXNzZXJ0KHRoaXMubW9kZSA8PSBleHBvcnRzLlVOWklQKTtcblxuICBpZiAodGhpcy5tb2RlID09PSBleHBvcnRzLkRFRkxBVEUgfHwgdGhpcy5tb2RlID09PSBleHBvcnRzLkdaSVAgfHwgdGhpcy5tb2RlID09PSBleHBvcnRzLkRFRkxBVEVSQVcpIHtcbiAgICB6bGliX2RlZmxhdGUuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pO1xuICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gZXhwb3J0cy5JTkZMQVRFIHx8IHRoaXMubW9kZSA9PT0gZXhwb3J0cy5HVU5aSVAgfHwgdGhpcy5tb2RlID09PSBleHBvcnRzLklORkxBVEVSQVcgfHwgdGhpcy5tb2RlID09PSBleHBvcnRzLlVOWklQKSB7XG4gICAgemxpYl9pbmZsYXRlLmluZmxhdGVFbmQodGhpcy5zdHJtKTtcbiAgfVxuXG4gIHRoaXMubW9kZSA9IGV4cG9ydHMuTk9ORTtcblxuICB0aGlzLmRpY3Rpb25hcnkgPSBudWxsO1xufTtcblxuWmxpYi5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZmx1c2gsIGlucHV0LCBpbl9vZmYsIGluX2xlbiwgb3V0LCBvdXRfb2ZmLCBvdXRfbGVuKSB7XG4gIHJldHVybiB0aGlzLl93cml0ZSh0cnVlLCBmbHVzaCwgaW5wdXQsIGluX29mZiwgaW5fbGVuLCBvdXQsIG91dF9vZmYsIG91dF9sZW4pO1xufTtcblxuWmxpYi5wcm90b3R5cGUud3JpdGVTeW5jID0gZnVuY3Rpb24gKGZsdXNoLCBpbnB1dCwgaW5fb2ZmLCBpbl9sZW4sIG91dCwgb3V0X29mZiwgb3V0X2xlbikge1xuICByZXR1cm4gdGhpcy5fd3JpdGUoZmFsc2UsIGZsdXNoLCBpbnB1dCwgaW5fb2ZmLCBpbl9sZW4sIG91dCwgb3V0X29mZiwgb3V0X2xlbik7XG59O1xuXG5abGliLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoYXN5bmMsIGZsdXNoLCBpbnB1dCwgaW5fb2ZmLCBpbl9sZW4sIG91dCwgb3V0X29mZiwgb3V0X2xlbikge1xuICBhc3NlcnQuZXF1YWwoYXJndW1lbnRzLmxlbmd0aCwgOCk7XG5cbiAgYXNzZXJ0KHRoaXMuaW5pdF9kb25lLCAnd3JpdGUgYmVmb3JlIGluaXQnKTtcbiAgYXNzZXJ0KHRoaXMubW9kZSAhPT0gZXhwb3J0cy5OT05FLCAnYWxyZWFkeSBmaW5hbGl6ZWQnKTtcbiAgYXNzZXJ0LmVxdWFsKGZhbHNlLCB0aGlzLndyaXRlX2luX3Byb2dyZXNzLCAnd3JpdGUgYWxyZWFkeSBpbiBwcm9ncmVzcycpO1xuICBhc3NlcnQuZXF1YWwoZmFsc2UsIHRoaXMucGVuZGluZ19jbG9zZSwgJ2Nsb3NlIGlzIHBlbmRpbmcnKTtcblxuICB0aGlzLndyaXRlX2luX3Byb2dyZXNzID0gdHJ1ZTtcblxuICBhc3NlcnQuZXF1YWwoZmFsc2UsIGZsdXNoID09PSB1bmRlZmluZWQsICdtdXN0IHByb3ZpZGUgZmx1c2ggdmFsdWUnKTtcblxuICB0aGlzLndyaXRlX2luX3Byb2dyZXNzID0gdHJ1ZTtcblxuICBpZiAoZmx1c2ggIT09IGV4cG9ydHMuWl9OT19GTFVTSCAmJiBmbHVzaCAhPT0gZXhwb3J0cy5aX1BBUlRJQUxfRkxVU0ggJiYgZmx1c2ggIT09IGV4cG9ydHMuWl9TWU5DX0ZMVVNIICYmIGZsdXNoICE9PSBleHBvcnRzLlpfRlVMTF9GTFVTSCAmJiBmbHVzaCAhPT0gZXhwb3J0cy5aX0ZJTklTSCAmJiBmbHVzaCAhPT0gZXhwb3J0cy5aX0JMT0NLKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZsdXNoIHZhbHVlJyk7XG4gIH1cblxuICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgIGlucHV0ID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIGluX2xlbiA9IDA7XG4gICAgaW5fb2ZmID0gMDtcbiAgfVxuXG4gIHRoaXMuc3RybS5hdmFpbF9pbiA9IGluX2xlbjtcbiAgdGhpcy5zdHJtLmlucHV0ID0gaW5wdXQ7XG4gIHRoaXMuc3RybS5uZXh0X2luID0gaW5fb2ZmO1xuICB0aGlzLnN0cm0uYXZhaWxfb3V0ID0gb3V0X2xlbjtcbiAgdGhpcy5zdHJtLm91dHB1dCA9IG91dDtcbiAgdGhpcy5zdHJtLm5leHRfb3V0ID0gb3V0X29mZjtcbiAgdGhpcy5mbHVzaCA9IGZsdXNoO1xuXG4gIGlmICghYXN5bmMpIHtcbiAgICAvLyBzeW5jIHZlcnNpb25cbiAgICB0aGlzLl9wcm9jZXNzKCk7XG5cbiAgICBpZiAodGhpcy5fY2hlY2tFcnJvcigpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJTeW5jKCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGFzeW5jIHZlcnNpb25cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9wcm9jZXNzKCk7XG4gICAgc2VsZi5fYWZ0ZXIoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5abGliLnByb3RvdHlwZS5fYWZ0ZXJTeW5jID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXZhaWxfb3V0ID0gdGhpcy5zdHJtLmF2YWlsX291dDtcbiAgdmFyIGF2YWlsX2luID0gdGhpcy5zdHJtLmF2YWlsX2luO1xuXG4gIHRoaXMud3JpdGVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcblxuICByZXR1cm4gW2F2YWlsX2luLCBhdmFpbF9vdXRdO1xufTtcblxuWmxpYi5wcm90b3R5cGUuX3Byb2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBuZXh0X2V4cGVjdGVkX2hlYWRlcl9ieXRlID0gbnVsbDtcblxuICAvLyBJZiB0aGUgYXZhaWxfb3V0IGlzIGxlZnQgYXQgMCwgdGhlbiBpdCBtZWFucyB0aGF0IGl0IHJhbiBvdXRcbiAgLy8gb2Ygcm9vbS4gIElmIHRoZXJlIHdhcyBhdmFpbF9vdXQgbGVmdCBvdmVyLCB0aGVuIGl0IG1lYW5zXG4gIC8vIHRoYXQgYWxsIG9mIHRoZSBpbnB1dCB3YXMgY29uc3VtZWQuXG4gIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSBleHBvcnRzLkRFRkxBVEU6XG4gICAgY2FzZSBleHBvcnRzLkdaSVA6XG4gICAgY2FzZSBleHBvcnRzLkRFRkxBVEVSQVc6XG4gICAgICB0aGlzLmVyciA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlKHRoaXMuc3RybSwgdGhpcy5mbHVzaCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGV4cG9ydHMuVU5aSVA6XG4gICAgICBpZiAodGhpcy5zdHJtLmF2YWlsX2luID4gMCkge1xuICAgICAgICBuZXh0X2V4cGVjdGVkX2hlYWRlcl9ieXRlID0gdGhpcy5zdHJtLm5leHRfaW47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodGhpcy5nemlwX2lkX2J5dGVzX3JlYWQpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGlmIChuZXh0X2V4cGVjdGVkX2hlYWRlcl9ieXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5zdHJtLmlucHV0W25leHRfZXhwZWN0ZWRfaGVhZGVyX2J5dGVdID09PSBHWklQX0hFQURFUl9JRDEpIHtcbiAgICAgICAgICAgIHRoaXMuZ3ppcF9pZF9ieXRlc19yZWFkID0gMTtcbiAgICAgICAgICAgIG5leHRfZXhwZWN0ZWRfaGVhZGVyX2J5dGUrKztcblxuICAgICAgICAgICAgaWYgKHRoaXMuc3RybS5hdmFpbF9pbiA9PT0gMSkge1xuICAgICAgICAgICAgICAvLyBUaGUgb25seSBhdmFpbGFibGUgYnl0ZSB3YXMgYWxyZWFkeSByZWFkLlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlID0gZXhwb3J0cy5JTkZMQVRFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAobmV4dF9leHBlY3RlZF9oZWFkZXJfYnl0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuc3RybS5pbnB1dFtuZXh0X2V4cGVjdGVkX2hlYWRlcl9ieXRlXSA9PT0gR1pJUF9IRUFERVJfSUQyKSB7XG4gICAgICAgICAgICB0aGlzLmd6aXBfaWRfYnl0ZXNfcmVhZCA9IDI7XG4gICAgICAgICAgICB0aGlzLm1vZGUgPSBleHBvcnRzLkdVTlpJUDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gYWN0dWFsIGRpZmZlcmVuY2UgYmV0d2VlbiBJTkZMQVRFIGFuZCBJTkZMQVRFUkFXXG4gICAgICAgICAgICAvLyAoYWZ0ZXIgaW5pdGlhbGl6YXRpb24pLlxuICAgICAgICAgICAgdGhpcy5tb2RlID0gZXhwb3J0cy5JTkZMQVRFO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBudW1iZXIgb2YgZ3ppcCBtYWdpYyBudW1iZXIgYnl0ZXMgcmVhZCcpO1xuICAgICAgfVxuXG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIGV4cG9ydHMuSU5GTEFURTpcbiAgICBjYXNlIGV4cG9ydHMuR1VOWklQOlxuICAgIGNhc2UgZXhwb3J0cy5JTkZMQVRFUkFXOlxuICAgICAgdGhpcy5lcnIgPSB6bGliX2luZmxhdGUuaW5mbGF0ZSh0aGlzLnN0cm0sIHRoaXMuZmx1c2hcblxuICAgICAgLy8gSWYgZGF0YSB3YXMgZW5jb2RlZCB3aXRoIGRpY3Rpb25hcnlcbiAgICAgICk7aWYgKHRoaXMuZXJyID09PSBleHBvcnRzLlpfTkVFRF9ESUNUICYmIHRoaXMuZGljdGlvbmFyeSkge1xuICAgICAgICAvLyBMb2FkIGl0XG4gICAgICAgIHRoaXMuZXJyID0gemxpYl9pbmZsYXRlLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgdGhpcy5kaWN0aW9uYXJ5KTtcbiAgICAgICAgaWYgKHRoaXMuZXJyID09PSBleHBvcnRzLlpfT0spIHtcbiAgICAgICAgICAvLyBBbmQgdHJ5IHRvIGRlY29kZSBhZ2FpblxuICAgICAgICAgIHRoaXMuZXJyID0gemxpYl9pbmZsYXRlLmluZmxhdGUodGhpcy5zdHJtLCB0aGlzLmZsdXNoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVyciA9PT0gZXhwb3J0cy5aX0RBVEFfRVJST1IpIHtcbiAgICAgICAgICAvLyBCb3RoIGluZmxhdGVTZXREaWN0aW9uYXJ5KCkgYW5kIGluZmxhdGUoKSByZXR1cm4gWl9EQVRBX0VSUk9SLlxuICAgICAgICAgIC8vIE1ha2UgaXQgcG9zc2libGUgZm9yIEFmdGVyKCkgdG8gdGVsbCBhIGJhZCBkaWN0aW9uYXJ5IGZyb20gYmFkXG4gICAgICAgICAgLy8gaW5wdXQuXG4gICAgICAgICAgdGhpcy5lcnIgPSBleHBvcnRzLlpfTkVFRF9ESUNUO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAodGhpcy5zdHJtLmF2YWlsX2luID4gMCAmJiB0aGlzLm1vZGUgPT09IGV4cG9ydHMuR1VOWklQICYmIHRoaXMuZXJyID09PSBleHBvcnRzLlpfU1RSRUFNX0VORCAmJiB0aGlzLnN0cm0ubmV4dF9pblswXSAhPT0gMHgwMCkge1xuICAgICAgICAvLyBCeXRlcyByZW1haW4gaW4gaW5wdXQgYnVmZmVyLiBQZXJoYXBzIHRoaXMgaXMgYW5vdGhlciBjb21wcmVzc2VkXG4gICAgICAgIC8vIG1lbWJlciBpbiB0aGUgc2FtZSBhcmNoaXZlLCBvciBqdXN0IHRyYWlsaW5nIGdhcmJhZ2UuXG4gICAgICAgIC8vIFRyYWlsaW5nIHplcm8gYnl0ZXMgYXJlIG9rYXksIHRob3VnaCwgc2luY2UgdGhleSBhcmUgZnJlcXVlbnRseVxuICAgICAgICAvLyB1c2VkIGZvciBwYWRkaW5nLlxuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgdGhpcy5lcnIgPSB6bGliX2luZmxhdGUuaW5mbGF0ZSh0aGlzLnN0cm0sIHRoaXMuZmx1c2gpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBtb2RlICcgKyB0aGlzLm1vZGUpO1xuICB9XG59O1xuXG5abGliLnByb3RvdHlwZS5fY2hlY2tFcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gQWNjZXB0YWJsZSBlcnJvciBzdGF0ZXMgZGVwZW5kIG9uIHRoZSB0eXBlIG9mIHpsaWIgc3RyZWFtLlxuICBzd2l0Y2ggKHRoaXMuZXJyKSB7XG4gICAgY2FzZSBleHBvcnRzLlpfT0s6XG4gICAgY2FzZSBleHBvcnRzLlpfQlVGX0VSUk9SOlxuICAgICAgaWYgKHRoaXMuc3RybS5hdmFpbF9vdXQgIT09IDAgJiYgdGhpcy5mbHVzaCA9PT0gZXhwb3J0cy5aX0ZJTklTSCkge1xuICAgICAgICB0aGlzLl9lcnJvcigndW5leHBlY3RlZCBlbmQgb2YgZmlsZScpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIGV4cG9ydHMuWl9TVFJFQU1fRU5EOlxuICAgICAgLy8gbm9ybWFsIHN0YXR1c2VzLCBub3QgZmF0YWxcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZXhwb3J0cy5aX05FRURfRElDVDpcbiAgICAgIGlmICh0aGlzLmRpY3Rpb25hcnkgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9lcnJvcignTWlzc2luZyBkaWN0aW9uYXJ5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9lcnJvcignQmFkIGRpY3Rpb25hcnknKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gc29tZXRoaW5nIGVsc2UuXG4gICAgICB0aGlzLl9lcnJvcignWmxpYiBlcnJvcicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5abGliLnByb3RvdHlwZS5fYWZ0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5fY2hlY2tFcnJvcigpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGF2YWlsX291dCA9IHRoaXMuc3RybS5hdmFpbF9vdXQ7XG4gIHZhciBhdmFpbF9pbiA9IHRoaXMuc3RybS5hdmFpbF9pbjtcblxuICB0aGlzLndyaXRlX2luX3Byb2dyZXNzID0gZmFsc2U7XG5cbiAgLy8gY2FsbCB0aGUgd3JpdGUoKSBjYlxuICB0aGlzLmNhbGxiYWNrKGF2YWlsX2luLCBhdmFpbF9vdXQpO1xuXG4gIGlmICh0aGlzLnBlbmRpbmdfY2xvc2UpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cbn07XG5cblpsaWIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gIGlmICh0aGlzLnN0cm0ubXNnKSB7XG4gICAgbWVzc2FnZSA9IHRoaXMuc3RybS5tc2c7XG4gIH1cbiAgdGhpcy5vbmVycm9yKG1lc3NhZ2UsIHRoaXMuZXJyXG5cbiAgLy8gbm8gaG9wZSBvZiByZXNjdWUuXG4gICk7dGhpcy53cml0ZV9pbl9wcm9ncmVzcyA9IGZhbHNlO1xuICBpZiAodGhpcy5wZW5kaW5nX2Nsb3NlKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG59O1xuXG5abGliLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKHdpbmRvd0JpdHMsIGxldmVsLCBtZW1MZXZlbCwgc3RyYXRlZ3ksIGRpY3Rpb25hcnkpIHtcbiAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT09IDQgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gNSwgJ2luaXQod2luZG93Qml0cywgbGV2ZWwsIG1lbUxldmVsLCBzdHJhdGVneSwgW2RpY3Rpb25hcnldKScpO1xuXG4gIGFzc2VydCh3aW5kb3dCaXRzID49IDggJiYgd2luZG93Qml0cyA8PSAxNSwgJ2ludmFsaWQgd2luZG93Qml0cycpO1xuICBhc3NlcnQobGV2ZWwgPj0gLTEgJiYgbGV2ZWwgPD0gOSwgJ2ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwnKTtcblxuICBhc3NlcnQobWVtTGV2ZWwgPj0gMSAmJiBtZW1MZXZlbCA8PSA5LCAnaW52YWxpZCBtZW1sZXZlbCcpO1xuXG4gIGFzc2VydChzdHJhdGVneSA9PT0gZXhwb3J0cy5aX0ZJTFRFUkVEIHx8IHN0cmF0ZWd5ID09PSBleHBvcnRzLlpfSFVGRk1BTl9PTkxZIHx8IHN0cmF0ZWd5ID09PSBleHBvcnRzLlpfUkxFIHx8IHN0cmF0ZWd5ID09PSBleHBvcnRzLlpfRklYRUQgfHwgc3RyYXRlZ3kgPT09IGV4cG9ydHMuWl9ERUZBVUxUX1NUUkFURUdZLCAnaW52YWxpZCBzdHJhdGVneScpO1xuXG4gIHRoaXMuX2luaXQobGV2ZWwsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwgZGljdGlvbmFyeSk7XG4gIHRoaXMuX3NldERpY3Rpb25hcnkoKTtcbn07XG5cblpsaWIucHJvdG90eXBlLnBhcmFtcyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdkZWZsYXRlUGFyYW1zIE5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cblpsaWIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLl9zZXREaWN0aW9uYXJ5KCk7XG59O1xuXG5abGliLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChsZXZlbCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5LCBkaWN0aW9uYXJ5KSB7XG4gIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgdGhpcy53aW5kb3dCaXRzID0gd2luZG93Qml0cztcbiAgdGhpcy5tZW1MZXZlbCA9IG1lbUxldmVsO1xuICB0aGlzLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7XG5cbiAgdGhpcy5mbHVzaCA9IGV4cG9ydHMuWl9OT19GTFVTSDtcblxuICB0aGlzLmVyciA9IGV4cG9ydHMuWl9PSztcblxuICBpZiAodGhpcy5tb2RlID09PSBleHBvcnRzLkdaSVAgfHwgdGhpcy5tb2RlID09PSBleHBvcnRzLkdVTlpJUCkge1xuICAgIHRoaXMud2luZG93Qml0cyArPSAxNjtcbiAgfVxuXG4gIGlmICh0aGlzLm1vZGUgPT09IGV4cG9ydHMuVU5aSVApIHtcbiAgICB0aGlzLndpbmRvd0JpdHMgKz0gMzI7XG4gIH1cblxuICBpZiAodGhpcy5tb2RlID09PSBleHBvcnRzLkRFRkxBVEVSQVcgfHwgdGhpcy5tb2RlID09PSBleHBvcnRzLklORkxBVEVSQVcpIHtcbiAgICB0aGlzLndpbmRvd0JpdHMgPSAtMSAqIHRoaXMud2luZG93Qml0cztcbiAgfVxuXG4gIHRoaXMuc3RybSA9IG5ldyBac3RyZWFtKCk7XG5cbiAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuREVGTEFURTpcbiAgICBjYXNlIGV4cG9ydHMuR1pJUDpcbiAgICBjYXNlIGV4cG9ydHMuREVGTEFURVJBVzpcbiAgICAgIHRoaXMuZXJyID0gemxpYl9kZWZsYXRlLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sIHRoaXMubGV2ZWwsIGV4cG9ydHMuWl9ERUZMQVRFRCwgdGhpcy53aW5kb3dCaXRzLCB0aGlzLm1lbUxldmVsLCB0aGlzLnN0cmF0ZWd5KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZXhwb3J0cy5JTkZMQVRFOlxuICAgIGNhc2UgZXhwb3J0cy5HVU5aSVA6XG4gICAgY2FzZSBleHBvcnRzLklORkxBVEVSQVc6XG4gICAgY2FzZSBleHBvcnRzLlVOWklQOlxuICAgICAgdGhpcy5lcnIgPSB6bGliX2luZmxhdGUuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSwgdGhpcy53aW5kb3dCaXRzKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbW9kZSAnICsgdGhpcy5tb2RlKTtcbiAgfVxuXG4gIGlmICh0aGlzLmVyciAhPT0gZXhwb3J0cy5aX09LKSB7XG4gICAgdGhpcy5fZXJyb3IoJ0luaXQgZXJyb3InKTtcbiAgfVxuXG4gIHRoaXMuZGljdGlvbmFyeSA9IGRpY3Rpb25hcnk7XG5cbiAgdGhpcy53cml0ZV9pbl9wcm9ncmVzcyA9IGZhbHNlO1xuICB0aGlzLmluaXRfZG9uZSA9IHRydWU7XG59O1xuXG5abGliLnByb3RvdHlwZS5fc2V0RGljdGlvbmFyeSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuZGljdGlvbmFyeSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5lcnIgPSBleHBvcnRzLlpfT0s7XG5cbiAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuREVGTEFURTpcbiAgICBjYXNlIGV4cG9ydHMuREVGTEFURVJBVzpcbiAgICAgIHRoaXMuZXJyID0gemxpYl9kZWZsYXRlLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgdGhpcy5kaWN0aW9uYXJ5KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmICh0aGlzLmVyciAhPT0gZXhwb3J0cy5aX09LKSB7XG4gICAgdGhpcy5fZXJyb3IoJ0ZhaWxlZCB0byBzZXQgZGljdGlvbmFyeScpO1xuICB9XG59O1xuXG5abGliLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZXJyID0gZXhwb3J0cy5aX09LO1xuXG4gIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSBleHBvcnRzLkRFRkxBVEU6XG4gICAgY2FzZSBleHBvcnRzLkRFRkxBVEVSQVc6XG4gICAgY2FzZSBleHBvcnRzLkdaSVA6XG4gICAgICB0aGlzLmVyciA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlUmVzZXQodGhpcy5zdHJtKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZXhwb3J0cy5JTkZMQVRFOlxuICAgIGNhc2UgZXhwb3J0cy5JTkZMQVRFUkFXOlxuICAgIGNhc2UgZXhwb3J0cy5HVU5aSVA6XG4gICAgICB0aGlzLmVyciA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlUmVzZXQodGhpcy5zdHJtKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmICh0aGlzLmVyciAhPT0gZXhwb3J0cy5aX09LKSB7XG4gICAgdGhpcy5fZXJyb3IoJ0ZhaWxlZCB0byByZXNldCBzdHJlYW0nKTtcbiAgfVxufTtcblxuZXhwb3J0cy5abGliID0gWmxpYjtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI2MzU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBwcm92aWRlZCBkZXBlbmRlbmN5ICovIHZhciBwcm9jZXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MTU1KTtcblxuXG52YXIgQnVmZmVyID0gKF9fd2VicGFja19yZXF1aXJlX18oODgyMykuQnVmZmVyKTtcbnZhciBUcmFuc2Zvcm0gPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyODMwKS5UcmFuc2Zvcm0pO1xudmFyIGJpbmRpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1MDUpO1xudmFyIHV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1MzkpO1xudmFyIGFzc2VydCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDkyODIpLm9rKTtcbnZhciBrTWF4TGVuZ3RoID0gKF9fd2VicGFja19yZXF1aXJlX18oODgyMykua01heExlbmd0aCk7XG52YXIga1JhbmdlRXJyb3JNZXNzYWdlID0gJ0Nhbm5vdCBjcmVhdGUgZmluYWwgQnVmZmVyLiBJdCB3b3VsZCBiZSBsYXJnZXIgJyArICd0aGFuIDB4JyArIGtNYXhMZW5ndGgudG9TdHJpbmcoMTYpICsgJyBieXRlcyc7XG5cbi8vIHpsaWIgZG9lc24ndCBwcm92aWRlIHRoZXNlLCBzbyBrbHVkZ2UgdGhlbSBpbiBmb2xsb3dpbmcgdGhlIHNhbWVcbi8vIGNvbnN0IG5hbWluZyBzY2hlbWUgemxpYiB1c2VzLlxuYmluZGluZy5aX01JTl9XSU5ET1dCSVRTID0gODtcbmJpbmRpbmcuWl9NQVhfV0lORE9XQklUUyA9IDE1O1xuYmluZGluZy5aX0RFRkFVTFRfV0lORE9XQklUUyA9IDE1O1xuXG4vLyBmZXdlciB0aGFuIDY0IGJ5dGVzIHBlciBjaHVuayBpcyBzdHVwaWQuXG4vLyB0ZWNobmljYWxseSBpdCBjb3VsZCB3b3JrIHdpdGggYXMgZmV3IGFzIDgsIGJ1dCBldmVuIDY0IGJ5dGVzXG4vLyBpcyBhYnN1cmRseSBsb3cuICBVc3VhbGx5IGEgTUIgb3IgbW9yZSBpcyBiZXN0LlxuYmluZGluZy5aX01JTl9DSFVOSyA9IDY0O1xuYmluZGluZy5aX01BWF9DSFVOSyA9IEluZmluaXR5O1xuYmluZGluZy5aX0RFRkFVTFRfQ0hVTksgPSAxNiAqIDEwMjQ7XG5cbmJpbmRpbmcuWl9NSU5fTUVNTEVWRUwgPSAxO1xuYmluZGluZy5aX01BWF9NRU1MRVZFTCA9IDk7XG5iaW5kaW5nLlpfREVGQVVMVF9NRU1MRVZFTCA9IDg7XG5cbmJpbmRpbmcuWl9NSU5fTEVWRUwgPSAtMTtcbmJpbmRpbmcuWl9NQVhfTEVWRUwgPSA5O1xuYmluZGluZy5aX0RFRkFVTFRfTEVWRUwgPSBiaW5kaW5nLlpfREVGQVVMVF9DT01QUkVTU0lPTjtcblxuLy8gZXhwb3NlIGFsbCB0aGUgemxpYiBjb25zdGFudHNcbnZhciBia2V5cyA9IE9iamVjdC5rZXlzKGJpbmRpbmcpO1xuZm9yICh2YXIgYmsgPSAwOyBiayA8IGJrZXlzLmxlbmd0aDsgYmsrKykge1xuICB2YXIgYmtleSA9IGJrZXlzW2JrXTtcbiAgaWYgKGJrZXkubWF0Y2goL15aLykpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgYmtleSwge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmRpbmdbYmtleV0sIHdyaXRhYmxlOiBmYWxzZVxuICAgIH0pO1xuICB9XG59XG5cbi8vIHRyYW5zbGF0aW9uIHRhYmxlIGZvciByZXR1cm4gY29kZXMuXG52YXIgY29kZXMgPSB7XG4gIFpfT0s6IGJpbmRpbmcuWl9PSyxcbiAgWl9TVFJFQU1fRU5EOiBiaW5kaW5nLlpfU1RSRUFNX0VORCxcbiAgWl9ORUVEX0RJQ1Q6IGJpbmRpbmcuWl9ORUVEX0RJQ1QsXG4gIFpfRVJSTk86IGJpbmRpbmcuWl9FUlJOTyxcbiAgWl9TVFJFQU1fRVJST1I6IGJpbmRpbmcuWl9TVFJFQU1fRVJST1IsXG4gIFpfREFUQV9FUlJPUjogYmluZGluZy5aX0RBVEFfRVJST1IsXG4gIFpfTUVNX0VSUk9SOiBiaW5kaW5nLlpfTUVNX0VSUk9SLFxuICBaX0JVRl9FUlJPUjogYmluZGluZy5aX0JVRl9FUlJPUixcbiAgWl9WRVJTSU9OX0VSUk9SOiBiaW5kaW5nLlpfVkVSU0lPTl9FUlJPUlxufTtcblxudmFyIGNrZXlzID0gT2JqZWN0LmtleXMoY29kZXMpO1xuZm9yICh2YXIgY2sgPSAwOyBjayA8IGNrZXlzLmxlbmd0aDsgY2srKykge1xuICB2YXIgY2tleSA9IGNrZXlzW2NrXTtcbiAgY29kZXNbY29kZXNbY2tleV1dID0gY2tleTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29kZXNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IE9iamVjdC5mcmVlemUoY29kZXMpLCB3cml0YWJsZTogZmFsc2Vcbn0pKTtcblxuZXhwb3J0cy5EZWZsYXRlID0gRGVmbGF0ZTtcbmV4cG9ydHMuSW5mbGF0ZSA9IEluZmxhdGU7XG5leHBvcnRzLkd6aXAgPSBHemlwO1xuZXhwb3J0cy5HdW56aXAgPSBHdW56aXA7XG5leHBvcnRzLkRlZmxhdGVSYXcgPSBEZWZsYXRlUmF3O1xuZXhwb3J0cy5JbmZsYXRlUmF3ID0gSW5mbGF0ZVJhdztcbmV4cG9ydHMuVW56aXAgPSBVbnppcDtcblxuZXhwb3J0cy5jcmVhdGVEZWZsYXRlID0gZnVuY3Rpb24gKG8pIHtcbiAgcmV0dXJuIG5ldyBEZWZsYXRlKG8pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVJbmZsYXRlID0gZnVuY3Rpb24gKG8pIHtcbiAgcmV0dXJuIG5ldyBJbmZsYXRlKG8pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVEZWZsYXRlUmF3ID0gZnVuY3Rpb24gKG8pIHtcbiAgcmV0dXJuIG5ldyBEZWZsYXRlUmF3KG8pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVJbmZsYXRlUmF3ID0gZnVuY3Rpb24gKG8pIHtcbiAgcmV0dXJuIG5ldyBJbmZsYXRlUmF3KG8pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVHemlwID0gZnVuY3Rpb24gKG8pIHtcbiAgcmV0dXJuIG5ldyBHemlwKG8pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVHdW56aXAgPSBmdW5jdGlvbiAobykge1xuICByZXR1cm4gbmV3IEd1bnppcChvKTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlVW56aXAgPSBmdW5jdGlvbiAobykge1xuICByZXR1cm4gbmV3IFVuemlwKG8pO1xufTtcblxuLy8gQ29udmVuaWVuY2UgbWV0aG9kcy5cbi8vIGNvbXByZXNzL2RlY29tcHJlc3MgYSBzdHJpbmcgb3IgYnVmZmVyIGluIG9uZSBzdGVwLlxuZXhwb3J0cy5kZWZsYXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgb3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRzO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuICByZXR1cm4gemxpYkJ1ZmZlcihuZXcgRGVmbGF0ZShvcHRzKSwgYnVmZmVyLCBjYWxsYmFjayk7XG59O1xuXG5leHBvcnRzLmRlZmxhdGVTeW5jID0gZnVuY3Rpb24gKGJ1ZmZlciwgb3B0cykge1xuICByZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IERlZmxhdGUob3B0cyksIGJ1ZmZlcik7XG59O1xuXG5leHBvcnRzLmd6aXAgPSBmdW5jdGlvbiAoYnVmZmVyLCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIHJldHVybiB6bGliQnVmZmVyKG5ldyBHemlwKG9wdHMpLCBidWZmZXIsIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydHMuZ3ppcFN5bmMgPSBmdW5jdGlvbiAoYnVmZmVyLCBvcHRzKSB7XG4gIHJldHVybiB6bGliQnVmZmVyU3luYyhuZXcgR3ppcChvcHRzKSwgYnVmZmVyKTtcbn07XG5cbmV4cG9ydHMuZGVmbGF0ZVJhdyA9IGZ1bmN0aW9uIChidWZmZXIsIG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cbiAgcmV0dXJuIHpsaWJCdWZmZXIobmV3IERlZmxhdGVSYXcob3B0cyksIGJ1ZmZlciwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0cy5kZWZsYXRlUmF3U3luYyA9IGZ1bmN0aW9uIChidWZmZXIsIG9wdHMpIHtcbiAgcmV0dXJuIHpsaWJCdWZmZXJTeW5jKG5ldyBEZWZsYXRlUmF3KG9wdHMpLCBidWZmZXIpO1xufTtcblxuZXhwb3J0cy51bnppcCA9IGZ1bmN0aW9uIChidWZmZXIsIG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cbiAgcmV0dXJuIHpsaWJCdWZmZXIobmV3IFVuemlwKG9wdHMpLCBidWZmZXIsIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydHMudW56aXBTeW5jID0gZnVuY3Rpb24gKGJ1ZmZlciwgb3B0cykge1xuICByZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IFVuemlwKG9wdHMpLCBidWZmZXIpO1xufTtcblxuZXhwb3J0cy5pbmZsYXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgb3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRzO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuICByZXR1cm4gemxpYkJ1ZmZlcihuZXcgSW5mbGF0ZShvcHRzKSwgYnVmZmVyLCBjYWxsYmFjayk7XG59O1xuXG5leHBvcnRzLmluZmxhdGVTeW5jID0gZnVuY3Rpb24gKGJ1ZmZlciwgb3B0cykge1xuICByZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IEluZmxhdGUob3B0cyksIGJ1ZmZlcik7XG59O1xuXG5leHBvcnRzLmd1bnppcCA9IGZ1bmN0aW9uIChidWZmZXIsIG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cbiAgcmV0dXJuIHpsaWJCdWZmZXIobmV3IEd1bnppcChvcHRzKSwgYnVmZmVyLCBjYWxsYmFjayk7XG59O1xuXG5leHBvcnRzLmd1bnppcFN5bmMgPSBmdW5jdGlvbiAoYnVmZmVyLCBvcHRzKSB7XG4gIHJldHVybiB6bGliQnVmZmVyU3luYyhuZXcgR3VuemlwKG9wdHMpLCBidWZmZXIpO1xufTtcblxuZXhwb3J0cy5pbmZsYXRlUmF3ID0gZnVuY3Rpb24gKGJ1ZmZlciwgb3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRzO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuICByZXR1cm4gemxpYkJ1ZmZlcihuZXcgSW5mbGF0ZVJhdyhvcHRzKSwgYnVmZmVyLCBjYWxsYmFjayk7XG59O1xuXG5leHBvcnRzLmluZmxhdGVSYXdTeW5jID0gZnVuY3Rpb24gKGJ1ZmZlciwgb3B0cykge1xuICByZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IEluZmxhdGVSYXcob3B0cyksIGJ1ZmZlcik7XG59O1xuXG5mdW5jdGlvbiB6bGliQnVmZmVyKGVuZ2luZSwgYnVmZmVyLCBjYWxsYmFjaykge1xuICB2YXIgYnVmZmVycyA9IFtdO1xuICB2YXIgbnJlYWQgPSAwO1xuXG4gIGVuZ2luZS5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgZW5naW5lLm9uKCdlbmQnLCBvbkVuZCk7XG5cbiAgZW5naW5lLmVuZChidWZmZXIpO1xuICBmbG93KCk7XG5cbiAgZnVuY3Rpb24gZmxvdygpIHtcbiAgICB2YXIgY2h1bms7XG4gICAgd2hpbGUgKG51bGwgIT09IChjaHVuayA9IGVuZ2luZS5yZWFkKCkpKSB7XG4gICAgICBidWZmZXJzLnB1c2goY2h1bmspO1xuICAgICAgbnJlYWQgKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgICBlbmdpbmUub25jZSgncmVhZGFibGUnLCBmbG93KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgZW5naW5lLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkVuZCk7XG4gICAgZW5naW5lLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIGZsb3cpO1xuICAgIGNhbGxiYWNrKGVycik7XG4gIH1cblxuICBmdW5jdGlvbiBvbkVuZCgpIHtcbiAgICB2YXIgYnVmO1xuICAgIHZhciBlcnIgPSBudWxsO1xuXG4gICAgaWYgKG5yZWFkID49IGtNYXhMZW5ndGgpIHtcbiAgICAgIGVyciA9IG5ldyBSYW5nZUVycm9yKGtSYW5nZUVycm9yTWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgbnJlYWQpO1xuICAgIH1cblxuICAgIGJ1ZmZlcnMgPSBbXTtcbiAgICBlbmdpbmUuY2xvc2UoKTtcbiAgICBjYWxsYmFjayhlcnIsIGJ1Zik7XG4gIH1cbn1cblxuZnVuY3Rpb24gemxpYkJ1ZmZlclN5bmMoZW5naW5lLCBidWZmZXIpIHtcbiAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdzdHJpbmcnKSBidWZmZXIgPSBCdWZmZXIuZnJvbShidWZmZXIpO1xuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vdCBhIHN0cmluZyBvciBidWZmZXInKTtcblxuICB2YXIgZmx1c2hGbGFnID0gZW5naW5lLl9maW5pc2hGbHVzaEZsYWc7XG5cbiAgcmV0dXJuIGVuZ2luZS5fcHJvY2Vzc0NodW5rKGJ1ZmZlciwgZmx1c2hGbGFnKTtcbn1cblxuLy8gZ2VuZXJpYyB6bGliXG4vLyBtaW5pbWFsIDItYnl0ZSBoZWFkZXJcbmZ1bmN0aW9uIERlZmxhdGUob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVmbGF0ZSkpIHJldHVybiBuZXcgRGVmbGF0ZShvcHRzKTtcbiAgWmxpYi5jYWxsKHRoaXMsIG9wdHMsIGJpbmRpbmcuREVGTEFURSk7XG59XG5cbmZ1bmN0aW9uIEluZmxhdGUob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5mbGF0ZSkpIHJldHVybiBuZXcgSW5mbGF0ZShvcHRzKTtcbiAgWmxpYi5jYWxsKHRoaXMsIG9wdHMsIGJpbmRpbmcuSU5GTEFURSk7XG59XG5cbi8vIGd6aXAgLSBiaWdnZXIgaGVhZGVyLCBzYW1lIGRlZmxhdGUgY29tcHJlc3Npb25cbmZ1bmN0aW9uIEd6aXAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgR3ppcCkpIHJldHVybiBuZXcgR3ppcChvcHRzKTtcbiAgWmxpYi5jYWxsKHRoaXMsIG9wdHMsIGJpbmRpbmcuR1pJUCk7XG59XG5cbmZ1bmN0aW9uIEd1bnppcChvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBHdW56aXApKSByZXR1cm4gbmV3IEd1bnppcChvcHRzKTtcbiAgWmxpYi5jYWxsKHRoaXMsIG9wdHMsIGJpbmRpbmcuR1VOWklQKTtcbn1cblxuLy8gcmF3IC0gbm8gaGVhZGVyXG5mdW5jdGlvbiBEZWZsYXRlUmF3KG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERlZmxhdGVSYXcpKSByZXR1cm4gbmV3IERlZmxhdGVSYXcob3B0cyk7XG4gIFpsaWIuY2FsbCh0aGlzLCBvcHRzLCBiaW5kaW5nLkRFRkxBVEVSQVcpO1xufVxuXG5mdW5jdGlvbiBJbmZsYXRlUmF3KG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEluZmxhdGVSYXcpKSByZXR1cm4gbmV3IEluZmxhdGVSYXcob3B0cyk7XG4gIFpsaWIuY2FsbCh0aGlzLCBvcHRzLCBiaW5kaW5nLklORkxBVEVSQVcpO1xufVxuXG4vLyBhdXRvLWRldGVjdCBoZWFkZXIuXG5mdW5jdGlvbiBVbnppcChvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVbnppcCkpIHJldHVybiBuZXcgVW56aXAob3B0cyk7XG4gIFpsaWIuY2FsbCh0aGlzLCBvcHRzLCBiaW5kaW5nLlVOWklQKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEZsdXNoRmxhZyhmbGFnKSB7XG4gIHJldHVybiBmbGFnID09PSBiaW5kaW5nLlpfTk9fRkxVU0ggfHwgZmxhZyA9PT0gYmluZGluZy5aX1BBUlRJQUxfRkxVU0ggfHwgZmxhZyA9PT0gYmluZGluZy5aX1NZTkNfRkxVU0ggfHwgZmxhZyA9PT0gYmluZGluZy5aX0ZVTExfRkxVU0ggfHwgZmxhZyA9PT0gYmluZGluZy5aX0ZJTklTSCB8fCBmbGFnID09PSBiaW5kaW5nLlpfQkxPQ0s7XG59XG5cbi8vIHRoZSBabGliIGNsYXNzIHRoZXkgYWxsIGluaGVyaXQgZnJvbVxuLy8gVGhpcyB0aGluZyBtYW5hZ2VzIHRoZSBxdWV1ZSBvZiByZXF1ZXN0cywgYW5kIHJldHVybnNcbi8vIHRydWUgb3IgZmFsc2UgaWYgdGhlcmUgaXMgYW55dGhpbmcgaW4gdGhlIHF1ZXVlIHdoZW5cbi8vIHlvdSBjYWxsIHRoZSAud3JpdGUoKSBtZXRob2QuXG5cbmZ1bmN0aW9uIFpsaWIob3B0cywgbW9kZSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHRoaXMuX29wdHMgPSBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdGhpcy5fY2h1bmtTaXplID0gb3B0cy5jaHVua1NpemUgfHwgZXhwb3J0cy5aX0RFRkFVTFRfQ0hVTks7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0cyk7XG5cbiAgaWYgKG9wdHMuZmx1c2ggJiYgIWlzVmFsaWRGbHVzaEZsYWcob3B0cy5mbHVzaCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmx1c2ggZmxhZzogJyArIG9wdHMuZmx1c2gpO1xuICB9XG4gIGlmIChvcHRzLmZpbmlzaEZsdXNoICYmICFpc1ZhbGlkRmx1c2hGbGFnKG9wdHMuZmluaXNoRmx1c2gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZsdXNoIGZsYWc6ICcgKyBvcHRzLmZpbmlzaEZsdXNoKTtcbiAgfVxuXG4gIHRoaXMuX2ZsdXNoRmxhZyA9IG9wdHMuZmx1c2ggfHwgYmluZGluZy5aX05PX0ZMVVNIO1xuICB0aGlzLl9maW5pc2hGbHVzaEZsYWcgPSB0eXBlb2Ygb3B0cy5maW5pc2hGbHVzaCAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRzLmZpbmlzaEZsdXNoIDogYmluZGluZy5aX0ZJTklTSDtcblxuICBpZiAob3B0cy5jaHVua1NpemUpIHtcbiAgICBpZiAob3B0cy5jaHVua1NpemUgPCBleHBvcnRzLlpfTUlOX0NIVU5LIHx8IG9wdHMuY2h1bmtTaXplID4gZXhwb3J0cy5aX01BWF9DSFVOSykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNodW5rIHNpemU6ICcgKyBvcHRzLmNodW5rU2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMud2luZG93Qml0cykge1xuICAgIGlmIChvcHRzLndpbmRvd0JpdHMgPCBleHBvcnRzLlpfTUlOX1dJTkRPV0JJVFMgfHwgb3B0cy53aW5kb3dCaXRzID4gZXhwb3J0cy5aX01BWF9XSU5ET1dCSVRTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgd2luZG93Qml0czogJyArIG9wdHMud2luZG93Qml0cyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMubGV2ZWwpIHtcbiAgICBpZiAob3B0cy5sZXZlbCA8IGV4cG9ydHMuWl9NSU5fTEVWRUwgfHwgb3B0cy5sZXZlbCA+IGV4cG9ydHMuWl9NQVhfTEVWRUwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbDogJyArIG9wdHMubGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRzLm1lbUxldmVsKSB7XG4gICAgaWYgKG9wdHMubWVtTGV2ZWwgPCBleHBvcnRzLlpfTUlOX01FTUxFVkVMIHx8IG9wdHMubWVtTGV2ZWwgPiBleHBvcnRzLlpfTUFYX01FTUxFVkVMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWVtTGV2ZWw6ICcgKyBvcHRzLm1lbUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5zdHJhdGVneSkge1xuICAgIGlmIChvcHRzLnN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9GSUxURVJFRCAmJiBvcHRzLnN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9IVUZGTUFOX09OTFkgJiYgb3B0cy5zdHJhdGVneSAhPSBleHBvcnRzLlpfUkxFICYmIG9wdHMuc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX0ZJWEVEICYmIG9wdHMuc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX0RFRkFVTFRfU1RSQVRFR1kpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJhdGVneTogJyArIG9wdHMuc3RyYXRlZ3kpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRzLmRpY3Rpb25hcnkpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvcHRzLmRpY3Rpb25hcnkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGljdGlvbmFyeTogaXQgc2hvdWxkIGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5faGFuZGxlID0gbmV3IGJpbmRpbmcuWmxpYihtb2RlKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX2hhZEVycm9yID0gZmFsc2U7XG4gIHRoaXMuX2hhbmRsZS5vbmVycm9yID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGVycm5vKSB7XG4gICAgLy8gdGhlcmUgaXMgbm8gd2F5IHRvIGNsZWFubHkgcmVjb3Zlci5cbiAgICAvLyBjb250aW51aW5nIG9ubHkgb2JzY3VyZXMgcHJvYmxlbXMuXG4gICAgX2Nsb3NlKHNlbGYpO1xuICAgIHNlbGYuX2hhZEVycm9yID0gdHJ1ZTtcblxuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICBlcnJvci5lcnJubyA9IGVycm5vO1xuICAgIGVycm9yLmNvZGUgPSBleHBvcnRzLmNvZGVzW2Vycm5vXTtcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICB9O1xuXG4gIHZhciBsZXZlbCA9IGV4cG9ydHMuWl9ERUZBVUxUX0NPTVBSRVNTSU9OO1xuICBpZiAodHlwZW9mIG9wdHMubGV2ZWwgPT09ICdudW1iZXInKSBsZXZlbCA9IG9wdHMubGV2ZWw7XG5cbiAgdmFyIHN0cmF0ZWd5ID0gZXhwb3J0cy5aX0RFRkFVTFRfU1RSQVRFR1k7XG4gIGlmICh0eXBlb2Ygb3B0cy5zdHJhdGVneSA9PT0gJ251bWJlcicpIHN0cmF0ZWd5ID0gb3B0cy5zdHJhdGVneTtcblxuICB0aGlzLl9oYW5kbGUuaW5pdChvcHRzLndpbmRvd0JpdHMgfHwgZXhwb3J0cy5aX0RFRkFVTFRfV0lORE9XQklUUywgbGV2ZWwsIG9wdHMubWVtTGV2ZWwgfHwgZXhwb3J0cy5aX0RFRkFVTFRfTUVNTEVWRUwsIHN0cmF0ZWd5LCBvcHRzLmRpY3Rpb25hcnkpO1xuXG4gIHRoaXMuX2J1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSh0aGlzLl9jaHVua1NpemUpO1xuICB0aGlzLl9vZmZzZXQgPSAwO1xuICB0aGlzLl9sZXZlbCA9IGxldmVsO1xuICB0aGlzLl9zdHJhdGVneSA9IHN0cmF0ZWd5O1xuXG4gIHRoaXMub25jZSgnZW5kJywgdGhpcy5jbG9zZSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfY2xvc2VkJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICFfdGhpcy5faGFuZGxlO1xuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWVcbiAgfSk7XG59XG5cbnV0aWwuaW5oZXJpdHMoWmxpYiwgVHJhbnNmb3JtKTtcblxuWmxpYi5wcm90b3R5cGUucGFyYW1zID0gZnVuY3Rpb24gKGxldmVsLCBzdHJhdGVneSwgY2FsbGJhY2spIHtcbiAgaWYgKGxldmVsIDwgZXhwb3J0cy5aX01JTl9MRVZFTCB8fCBsZXZlbCA+IGV4cG9ydHMuWl9NQVhfTEVWRUwpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbDogJyArIGxldmVsKTtcbiAgfVxuICBpZiAoc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX0ZJTFRFUkVEICYmIHN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9IVUZGTUFOX09OTFkgJiYgc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX1JMRSAmJiBzdHJhdGVneSAhPSBleHBvcnRzLlpfRklYRUQgJiYgc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX0RFRkFVTFRfU1RSQVRFR1kpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHN0cmF0ZWd5OiAnICsgc3RyYXRlZ3kpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xldmVsICE9PSBsZXZlbCB8fCB0aGlzLl9zdHJhdGVneSAhPT0gc3RyYXRlZ3kpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5mbHVzaChiaW5kaW5nLlpfU1lOQ19GTFVTSCwgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0KHNlbGYuX2hhbmRsZSwgJ3psaWIgYmluZGluZyBjbG9zZWQnKTtcbiAgICAgIHNlbGYuX2hhbmRsZS5wYXJhbXMobGV2ZWwsIHN0cmF0ZWd5KTtcbiAgICAgIGlmICghc2VsZi5faGFkRXJyb3IpIHtcbiAgICAgICAgc2VsZi5fbGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgc2VsZi5fc3RyYXRlZ3kgPSBzdHJhdGVneTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spO1xuICB9XG59O1xuXG5abGliLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgYXNzZXJ0KHRoaXMuX2hhbmRsZSwgJ3psaWIgYmluZGluZyBjbG9zZWQnKTtcbiAgcmV0dXJuIHRoaXMuX2hhbmRsZS5yZXNldCgpO1xufTtcblxuLy8gVGhpcyBpcyB0aGUgX2ZsdXNoIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgdHJhbnNmb3JtIGNsYXNzLFxuLy8gaW50ZXJuYWxseSwgd2hlbiB0aGUgbGFzdCBjaHVuayBoYXMgYmVlbiB3cml0dGVuLlxuWmxpYi5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRoaXMuX3RyYW5zZm9ybShCdWZmZXIuYWxsb2MoMCksICcnLCBjYWxsYmFjayk7XG59O1xuXG5abGliLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChraW5kLCBjYWxsYmFjaykge1xuICB2YXIgX3RoaXMyID0gdGhpcztcblxuICB2YXIgd3MgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmICh0eXBlb2Yga2luZCA9PT0gJ2Z1bmN0aW9uJyB8fCBraW5kID09PSB1bmRlZmluZWQgJiYgIWNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBraW5kO1xuICAgIGtpbmQgPSBiaW5kaW5nLlpfRlVMTF9GTFVTSDtcbiAgfVxuXG4gIGlmICh3cy5lbmRlZCkge1xuICAgIGlmIChjYWxsYmFjaykgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gIH0gZWxzZSBpZiAod3MuZW5kaW5nKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB0aGlzLm9uY2UoJ2VuZCcsIGNhbGxiYWNrKTtcbiAgfSBlbHNlIGlmICh3cy5uZWVkRHJhaW4pIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMub25jZSgnZHJhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuZmx1c2goa2luZCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX2ZsdXNoRmxhZyA9IGtpbmQ7XG4gICAgdGhpcy53cml0ZShCdWZmZXIuYWxsb2MoMCksICcnLCBjYWxsYmFjayk7XG4gIH1cbn07XG5cblpsaWIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIF9jbG9zZSh0aGlzLCBjYWxsYmFjayk7XG4gIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTlQsIHRoaXMpO1xufTtcblxuZnVuY3Rpb24gX2Nsb3NlKGVuZ2luZSwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrKSBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcblxuICAvLyBDYWxsZXIgbWF5IGludm9rZSAuY2xvc2UgYWZ0ZXIgYSB6bGliIGVycm9yICh3aGljaCB3aWxsIG51bGwgX2hhbmRsZSkuXG4gIGlmICghZW5naW5lLl9oYW5kbGUpIHJldHVybjtcblxuICBlbmdpbmUuX2hhbmRsZS5jbG9zZSgpO1xuICBlbmdpbmUuX2hhbmRsZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGVtaXRDbG9zZU5UKHNlbGYpIHtcbiAgc2VsZi5lbWl0KCdjbG9zZScpO1xufVxuXG5abGliLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIGZsdXNoRmxhZztcbiAgdmFyIHdzID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIGVuZGluZyA9IHdzLmVuZGluZyB8fCB3cy5lbmRlZDtcbiAgdmFyIGxhc3QgPSBlbmRpbmcgJiYgKCFjaHVuayB8fCB3cy5sZW5ndGggPT09IGNodW5rLmxlbmd0aCk7XG5cbiAgaWYgKGNodW5rICE9PSBudWxsICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSByZXR1cm4gY2IobmV3IEVycm9yKCdpbnZhbGlkIGlucHV0JykpO1xuXG4gIGlmICghdGhpcy5faGFuZGxlKSByZXR1cm4gY2IobmV3IEVycm9yKCd6bGliIGJpbmRpbmcgY2xvc2VkJykpO1xuXG4gIC8vIElmIGl0J3MgdGhlIGxhc3QgY2h1bmssIG9yIGEgZmluYWwgZmx1c2gsIHdlIHVzZSB0aGUgWl9GSU5JU0ggZmx1c2ggZmxhZ1xuICAvLyAob3Igd2hhdGV2ZXIgZmxhZyB3YXMgcHJvdmlkZWQgdXNpbmcgb3B0cy5maW5pc2hGbHVzaCkuXG4gIC8vIElmIGl0J3MgZXhwbGljaXRseSBmbHVzaGluZyBhdCBzb21lIG90aGVyIHRpbWUsIHRoZW4gd2UgdXNlXG4gIC8vIFpfRlVMTF9GTFVTSC4gT3RoZXJ3aXNlLCB1c2UgWl9OT19GTFVTSCBmb3IgbWF4aW11bSBjb21wcmVzc2lvblxuICAvLyBnb29kbmVzcy5cbiAgaWYgKGxhc3QpIGZsdXNoRmxhZyA9IHRoaXMuX2ZpbmlzaEZsdXNoRmxhZztlbHNlIHtcbiAgICBmbHVzaEZsYWcgPSB0aGlzLl9mbHVzaEZsYWc7XG4gICAgLy8gb25jZSB3ZSd2ZSBmbHVzaGVkIHRoZSBsYXN0IG9mIHRoZSBxdWV1ZSwgc3RvcCBmbHVzaGluZyBhbmRcbiAgICAvLyBnbyBiYWNrIHRvIHRoZSBub3JtYWwgYmVoYXZpb3IuXG4gICAgaWYgKGNodW5rLmxlbmd0aCA+PSB3cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2ZsdXNoRmxhZyA9IHRoaXMuX29wdHMuZmx1c2ggfHwgYmluZGluZy5aX05PX0ZMVVNIO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX3Byb2Nlc3NDaHVuayhjaHVuaywgZmx1c2hGbGFnLCBjYik7XG59O1xuXG5abGliLnByb3RvdHlwZS5fcHJvY2Vzc0NodW5rID0gZnVuY3Rpb24gKGNodW5rLCBmbHVzaEZsYWcsIGNiKSB7XG4gIHZhciBhdmFpbEluQmVmb3JlID0gY2h1bmsgJiYgY2h1bmsubGVuZ3RoO1xuICB2YXIgYXZhaWxPdXRCZWZvcmUgPSB0aGlzLl9jaHVua1NpemUgLSB0aGlzLl9vZmZzZXQ7XG4gIHZhciBpbk9mZiA9IDA7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBhc3luYyA9IHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJztcblxuICBpZiAoIWFzeW5jKSB7XG4gICAgdmFyIGJ1ZmZlcnMgPSBbXTtcbiAgICB2YXIgbnJlYWQgPSAwO1xuXG4gICAgdmFyIGVycm9yO1xuICAgIHRoaXMub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVyKSB7XG4gICAgICBlcnJvciA9IGVyO1xuICAgIH0pO1xuXG4gICAgYXNzZXJ0KHRoaXMuX2hhbmRsZSwgJ3psaWIgYmluZGluZyBjbG9zZWQnKTtcbiAgICBkbyB7XG4gICAgICB2YXIgcmVzID0gdGhpcy5faGFuZGxlLndyaXRlU3luYyhmbHVzaEZsYWcsIGNodW5rLCAvLyBpblxuICAgICAgaW5PZmYsIC8vIGluX29mZlxuICAgICAgYXZhaWxJbkJlZm9yZSwgLy8gaW5fbGVuXG4gICAgICB0aGlzLl9idWZmZXIsIC8vIG91dFxuICAgICAgdGhpcy5fb2Zmc2V0LCAvL291dF9vZmZcbiAgICAgIGF2YWlsT3V0QmVmb3JlKTsgLy8gb3V0X2xlblxuICAgIH0gd2hpbGUgKCF0aGlzLl9oYWRFcnJvciAmJiBjYWxsYmFjayhyZXNbMF0sIHJlc1sxXSkpO1xuXG4gICAgaWYgKHRoaXMuX2hhZEVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBpZiAobnJlYWQgPj0ga01heExlbmd0aCkge1xuICAgICAgX2Nsb3NlKHRoaXMpO1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3Ioa1JhbmdlRXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICB2YXIgYnVmID0gQnVmZmVyLmNvbmNhdChidWZmZXJzLCBucmVhZCk7XG4gICAgX2Nsb3NlKHRoaXMpO1xuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIGFzc2VydCh0aGlzLl9oYW5kbGUsICd6bGliIGJpbmRpbmcgY2xvc2VkJyk7XG4gIHZhciByZXEgPSB0aGlzLl9oYW5kbGUud3JpdGUoZmx1c2hGbGFnLCBjaHVuaywgLy8gaW5cbiAgaW5PZmYsIC8vIGluX29mZlxuICBhdmFpbEluQmVmb3JlLCAvLyBpbl9sZW5cbiAgdGhpcy5fYnVmZmVyLCAvLyBvdXRcbiAgdGhpcy5fb2Zmc2V0LCAvL291dF9vZmZcbiAgYXZhaWxPdXRCZWZvcmUpOyAvLyBvdXRfbGVuXG5cbiAgcmVxLmJ1ZmZlciA9IGNodW5rO1xuICByZXEuY2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICBmdW5jdGlvbiBjYWxsYmFjayhhdmFpbEluQWZ0ZXIsIGF2YWlsT3V0QWZ0ZXIpIHtcbiAgICAvLyBXaGVuIHRoZSBjYWxsYmFjayBpcyB1c2VkIGluIGFuIGFzeW5jIHdyaXRlLCB0aGUgY2FsbGJhY2snc1xuICAgIC8vIGNvbnRleHQgaXMgdGhlIGByZXFgIG9iamVjdCB0aGF0IHdhcyBjcmVhdGVkLiBUaGUgcmVxIG9iamVjdFxuICAgIC8vIGlzID09PSB0aGlzLl9oYW5kbGUsIGFuZCB0aGF0J3Mgd2h5IGl0J3MgaW1wb3J0YW50IHRvIG51bGxcbiAgICAvLyBvdXQgdGhlIHZhbHVlcyBhZnRlciB0aGV5IGFyZSBkb25lIGJlaW5nIHVzZWQuIGB0aGlzLl9oYW5kbGVgXG4gICAgLy8gY2FuIHN0YXkgaW4gbWVtb3J5IGxvbmdlciB0aGFuIHRoZSBjYWxsYmFjayBhbmQgYnVmZmVyIGFyZSBuZWVkZWQuXG4gICAgaWYgKHRoaXMpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChzZWxmLl9oYWRFcnJvcikgcmV0dXJuO1xuXG4gICAgdmFyIGhhdmUgPSBhdmFpbE91dEJlZm9yZSAtIGF2YWlsT3V0QWZ0ZXI7XG4gICAgYXNzZXJ0KGhhdmUgPj0gMCwgJ2hhdmUgc2hvdWxkIG5vdCBnbyBkb3duJyk7XG5cbiAgICBpZiAoaGF2ZSA+IDApIHtcbiAgICAgIHZhciBvdXQgPSBzZWxmLl9idWZmZXIuc2xpY2Uoc2VsZi5fb2Zmc2V0LCBzZWxmLl9vZmZzZXQgKyBoYXZlKTtcbiAgICAgIHNlbGYuX29mZnNldCArPSBoYXZlO1xuICAgICAgLy8gc2VydmUgc29tZSBvdXRwdXQgdG8gdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgIHNlbGYucHVzaChvdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG91dCk7XG4gICAgICAgIG5yZWFkICs9IG91dC5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZXhoYXVzdGVkIHRoZSBvdXRwdXQgYnVmZmVyLCBvciB1c2VkIGFsbCB0aGUgaW5wdXQgY3JlYXRlIGEgbmV3IG9uZS5cbiAgICBpZiAoYXZhaWxPdXRBZnRlciA9PT0gMCB8fCBzZWxmLl9vZmZzZXQgPj0gc2VsZi5fY2h1bmtTaXplKSB7XG4gICAgICBhdmFpbE91dEJlZm9yZSA9IHNlbGYuX2NodW5rU2l6ZTtcbiAgICAgIHNlbGYuX29mZnNldCA9IDA7XG4gICAgICBzZWxmLl9idWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoc2VsZi5fY2h1bmtTaXplKTtcbiAgICB9XG5cbiAgICBpZiAoYXZhaWxPdXRBZnRlciA9PT0gMCkge1xuICAgICAgLy8gTm90IGFjdHVhbGx5IGRvbmUuICBOZWVkIHRvIHJlcHJvY2Vzcy5cbiAgICAgIC8vIEFsc28sIHVwZGF0ZSB0aGUgYXZhaWxJbkJlZm9yZSB0byB0aGUgYXZhaWxJbkFmdGVyIHZhbHVlLFxuICAgICAgLy8gc28gdGhhdCBpZiB3ZSBoYXZlIHRvIGhpdCBpdCBhIHRoaXJkIChmb3VydGgsIGV0Yy4pIHRpbWUsXG4gICAgICAvLyBpdCdsbCBoYXZlIHRoZSBjb3JyZWN0IGJ5dGUgY291bnRzLlxuICAgICAgaW5PZmYgKz0gYXZhaWxJbkJlZm9yZSAtIGF2YWlsSW5BZnRlcjtcbiAgICAgIGF2YWlsSW5CZWZvcmUgPSBhdmFpbEluQWZ0ZXI7XG5cbiAgICAgIGlmICghYXN5bmMpIHJldHVybiB0cnVlO1xuXG4gICAgICB2YXIgbmV3UmVxID0gc2VsZi5faGFuZGxlLndyaXRlKGZsdXNoRmxhZywgY2h1bmssIGluT2ZmLCBhdmFpbEluQmVmb3JlLCBzZWxmLl9idWZmZXIsIHNlbGYuX29mZnNldCwgc2VsZi5fY2h1bmtTaXplKTtcbiAgICAgIG5ld1JlcS5jYWxsYmFjayA9IGNhbGxiYWNrOyAvLyB0aGlzIHNhbWUgZnVuY3Rpb25cbiAgICAgIG5ld1JlcS5idWZmZXIgPSBjaHVuaztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWFzeW5jKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBmaW5pc2hlZCB3aXRoIHRoZSBjaHVuay5cbiAgICBjYigpO1xuICB9XG59O1xuXG51dGlsLmluaGVyaXRzKERlZmxhdGUsIFpsaWIpO1xudXRpbC5pbmhlcml0cyhJbmZsYXRlLCBabGliKTtcbnV0aWwuaW5oZXJpdHMoR3ppcCwgWmxpYik7XG51dGlsLmluaGVyaXRzKEd1bnppcCwgWmxpYik7XG51dGlsLmluaGVyaXRzKERlZmxhdGVSYXcsIFpsaWIpO1xudXRpbC5pbmhlcml0cyhJbmZsYXRlUmF3LCBabGliKTtcbnV0aWwuaW5oZXJpdHMoVW56aXAsIFpsaWIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTkyNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgR2V0SW50cmluc2ljID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTApO1xuXG52YXIgY2FsbEJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1NTkpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQmluZChHZXRJbnRyaW5zaWMoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQm91bmRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWMgPSBHZXRJbnRyaW5zaWMobmFtZSwgISFhbGxvd01pc3NpbmcpO1xuXHRpZiAodHlwZW9mIGludHJpbnNpYyA9PT0gJ2Z1bmN0aW9uJyAmJiAkaW5kZXhPZihuYW1lLCAnLnByb3RvdHlwZS4nKSA+IC0xKSB7XG5cdFx0cmV0dXJuIGNhbGxCaW5kKGludHJpbnNpYyk7XG5cdH1cblx0cmV0dXJuIGludHJpbnNpYztcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDU1NTk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2MTIpO1xudmFyIEdldEludHJpbnNpYyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwKTtcblxudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG52YXIgJG1heCA9IEdldEludHJpbnNpYygnJU1hdGgubWF4JScpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdHZhciBmdW5jID0gJHJlZmxlY3RBcHBseShiaW5kLCAkY2FsbCwgYXJndW1lbnRzKTtcblx0aWYgKCRnT1BEICYmICRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdHZhciBkZXNjID0gJGdPUEQoZnVuYywgJ2xlbmd0aCcpO1xuXHRcdGlmIChkZXNjLmNvbmZpZ3VyYWJsZSkge1xuXHRcdFx0Ly8gb3JpZ2luYWwgbGVuZ3RoLCBwbHVzIHRoZSByZWNlaXZlciwgbWludXMgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIChhZnRlciB0aGUgcmVjZWl2ZXIpXG5cdFx0XHQkZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdGZ1bmMsXG5cdFx0XHRcdCdsZW5ndGgnLFxuXHRcdFx0XHR7IHZhbHVlOiAxICsgJG1heCgwLCBvcmlnaW5hbEZ1bmN0aW9uLmxlbmd0aCAtIChhcmd1bWVudHMubGVuZ3RoIC0gMSkpIH1cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmdW5jO1xufTtcblxudmFyIGFwcGx5QmluZCA9IGZ1bmN0aW9uIGFwcGx5QmluZCgpIHtcblx0cmV0dXJuICRyZWZsZWN0QXBwbHkoYmluZCwgJGFwcGx5LCBhcmd1bWVudHMpO1xufTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHQkZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhcHBseScsIHsgdmFsdWU6IGFwcGx5QmluZCB9KTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzLmFwcGx5ID0gYXBwbHlCaW5kO1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2MzEzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIEJ1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oODgyMylbXCJCdWZmZXJcIl07XG52YXIgY2xvbmUgPSAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2xvbmVzIChjb3BpZXMpIGFuIE9iamVjdCB1c2luZyBkZWVwIGNvcHlpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGRlZmF1bHQsIGJ1dCBpZiB5b3UgYXJlIGNlcnRhaW5cbiAqIHRoZXJlIGFyZSBubyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHlvdXIgb2JqZWN0LCB5b3UgY2FuIHNhdmUgc29tZSBDUFUgdGltZVxuICogYnkgY2FsbGluZyBjbG9uZShvYmosIGZhbHNlKS5cbiAqXG4gKiBDYXV0aW9uOiBpZiBgY2lyY3VsYXJgIGlzIGZhbHNlIGFuZCBgcGFyZW50YCBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2VzLFxuICogeW91ciBwcm9ncmFtIG1heSBlbnRlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBjcmFzaC5cbiAqXG4gKiBAcGFyYW0gYHBhcmVudGAgLSB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHBhcmFtIGBjaXJjdWxhcmAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZCBtYXkgY29udGFpblxuICogICAgY2lyY3VsYXIgcmVmZXJlbmNlcy4gKG9wdGlvbmFsIC0gdHJ1ZSBieSBkZWZhdWx0KVxuICogQHBhcmFtIGBkZXB0aGAgLSBzZXQgdG8gYSBudW1iZXIgaWYgdGhlIG9iamVjdCBpcyBvbmx5IHRvIGJlIGNsb25lZCB0b1xuICogICAgYSBwYXJ0aWN1bGFyIGRlcHRoLiAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBJbmZpbml0eSlcbiAqIEBwYXJhbSBgcHJvdG90eXBlYCAtIHNldHMgdGhlIHByb3RvdHlwZSB0byBiZSB1c2VkIHdoZW4gY2xvbmluZyBhbiBvYmplY3QuXG4gKiAgICAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBwYXJlbnQgcHJvdG90eXBlKS5cbiovXG5mdW5jdGlvbiBjbG9uZShwYXJlbnQsIGNpcmN1bGFyLCBkZXB0aCwgcHJvdG90eXBlKSB7XG4gIHZhciBmaWx0ZXI7XG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT09ICdvYmplY3QnKSB7XG4gICAgZGVwdGggPSBjaXJjdWxhci5kZXB0aDtcbiAgICBwcm90b3R5cGUgPSBjaXJjdWxhci5wcm90b3R5cGU7XG4gICAgZmlsdGVyID0gY2lyY3VsYXIuZmlsdGVyO1xuICAgIGNpcmN1bGFyID0gY2lyY3VsYXIuY2lyY3VsYXJcbiAgfVxuICAvLyBtYWludGFpbiB0d28gYXJyYXlzIGZvciBjaXJjdWxhciByZWZlcmVuY2VzLCB3aGVyZSBjb3JyZXNwb25kaW5nIHBhcmVudHNcbiAgLy8gYW5kIGNoaWxkcmVuIGhhdmUgdGhlIHNhbWUgaW5kZXhcbiAgdmFyIGFsbFBhcmVudHMgPSBbXTtcbiAgdmFyIGFsbENoaWxkcmVuID0gW107XG5cbiAgdmFyIHVzZUJ1ZmZlciA9IHR5cGVvZiBCdWZmZXIgIT0gJ3VuZGVmaW5lZCc7XG5cbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PSAndW5kZWZpbmVkJylcbiAgICBjaXJjdWxhciA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBkZXB0aCA9PSAndW5kZWZpbmVkJylcbiAgICBkZXB0aCA9IEluZmluaXR5O1xuXG4gIC8vIHJlY3Vyc2UgdGhpcyBmdW5jdGlvbiBzbyB3ZSBkb24ndCByZXNldCBhbGxQYXJlbnRzIGFuZCBhbGxDaGlsZHJlblxuICBmdW5jdGlvbiBfY2xvbmUocGFyZW50LCBkZXB0aCkge1xuICAgIC8vIGNsb25pbmcgbnVsbCBhbHdheXMgcmV0dXJucyBudWxsXG4gICAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgaWYgKGRlcHRoID09IDApXG4gICAgICByZXR1cm4gcGFyZW50O1xuXG4gICAgdmFyIGNoaWxkO1xuICAgIHZhciBwcm90bztcbiAgICBpZiAodHlwZW9mIHBhcmVudCAhPSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBpZiAoY2xvbmUuX19pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gW107XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzUmVnRXhwKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IFJlZ0V4cChwYXJlbnQuc291cmNlLCBfX2dldFJlZ0V4cEZsYWdzKHBhcmVudCkpO1xuICAgICAgaWYgKHBhcmVudC5sYXN0SW5kZXgpIGNoaWxkLmxhc3RJbmRleCA9IHBhcmVudC5sYXN0SW5kZXg7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzRGF0ZShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBEYXRlKHBhcmVudC5nZXRUaW1lKCkpO1xuICAgIH0gZWxzZSBpZiAodXNlQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihwYXJlbnQpKSB7XG4gICAgICBpZiAoQnVmZmVyLmFsbG9jVW5zYWZlKSB7XG4gICAgICAgIC8vIE5vZGUuanMgPj0gNC41LjBcbiAgICAgICAgY2hpbGQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPbGRlciBOb2RlLmpzIHZlcnNpb25zXG4gICAgICAgIGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5jb3B5KGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcbiAgICAgICAgcHJvdG8gPSBwcm90b3R5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICB2YXIgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcblxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgIHJldHVybiBhbGxDaGlsZHJlbltpbmRleF07XG4gICAgICB9XG4gICAgICBhbGxQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gcGFyZW50KSB7XG4gICAgICB2YXIgYXR0cnM7XG4gICAgICBpZiAocHJvdG8pIHtcbiAgICAgICAgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJzICYmIGF0dHJzLnNldCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2hpbGRbaV0gPSBfY2xvbmUocGFyZW50W2ldLCBkZXB0aCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHJldHVybiBfY2xvbmUocGFyZW50LCBkZXB0aCk7XG59XG5cbi8qKlxuICogU2ltcGxlIGZsYXQgY2xvbmUgdXNpbmcgcHJvdG90eXBlLCBhY2NlcHRzIG9ubHkgb2JqZWN0cywgdXNlZnVsbCBmb3IgcHJvcGVydHlcbiAqIG92ZXJyaWRlIG9uIEZMQVQgY29uZmlndXJhdGlvbiBvYmplY3QgKG5vIG5lc3RlZCBwcm9wcykuXG4gKlxuICogVVNFIFdJVEggQ0FVVElPTiEgVGhpcyBtYXkgbm90IGJlaGF2ZSBhcyB5b3Ugd2lzaCBpZiB5b3UgZG8gbm90IGtub3cgaG93IHRoaXNcbiAqIHdvcmtzLlxuICovXG5jbG9uZS5jbG9uZVByb3RvdHlwZSA9IGZ1bmN0aW9uIGNsb25lUHJvdG90eXBlKHBhcmVudCkge1xuICBpZiAocGFyZW50ID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHZhciBjID0gZnVuY3Rpb24gKCkge307XG4gIGMucHJvdG90eXBlID0gcGFyZW50O1xuICByZXR1cm4gbmV3IGMoKTtcbn07XG5cbi8vIHByaXZhdGUgdXRpbGl0eSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gX19vYmpUb1N0cihvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59O1xuY2xvbmUuX19vYmpUb1N0ciA9IF9fb2JqVG9TdHI7XG5cbmZ1bmN0aW9uIF9faXNEYXRlKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBEYXRlXSc7XG59O1xuY2xvbmUuX19pc0RhdGUgPSBfX2lzRGF0ZTtcblxuZnVuY3Rpb24gX19pc0FycmF5KG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbmNsb25lLl9faXNBcnJheSA9IF9faXNBcnJheTtcblxuZnVuY3Rpb24gX19pc1JlZ0V4cChvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuY2xvbmUuX19pc1JlZ0V4cCA9IF9faXNSZWdFeHA7XG5cbmZ1bmN0aW9uIF9fZ2V0UmVnRXhwRmxhZ3MocmUpIHtcbiAgdmFyIGZsYWdzID0gJyc7XG4gIGlmIChyZS5nbG9iYWwpIGZsYWdzICs9ICdnJztcbiAgaWYgKHJlLmlnbm9yZUNhc2UpIGZsYWdzICs9ICdpJztcbiAgaWYgKHJlLm11bHRpbGluZSkgZmxhZ3MgKz0gJ20nO1xuICByZXR1cm4gZmxhZ3M7XG59O1xuY2xvbmUuX19nZXRSZWdFeHBGbGFncyA9IF9fZ2V0UmVnRXhwRmxhZ3M7XG5cbnJldHVybiBjbG9uZTtcbn0pKCk7XG5cbmlmICggdHJ1ZSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGNsb25lO1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0NjY3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbl9fd2VicGFja19yZXF1aXJlX18oMjQ3OSk7XG52YXIgcGF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oODU3KTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC52YWx1ZXM7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc2MzM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5MTcwKTtcbl9fd2VicGFja19yZXF1aXJlX18oNjk5Mik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzkpO1xuX193ZWJwYWNrX3JlcXVpcmVfXyg4Njc0KTtcbl9fd2VicGFja19yZXF1aXJlX18oNzkyMik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ2NjgpO1xuX193ZWJwYWNrX3JlcXVpcmVfXyg3NzI3KTtcbl9fd2VicGFja19yZXF1aXJlX18oODc4Myk7XG52YXIgcGF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oODU3KTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlByb21pc2U7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDM4Njc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHBhcmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTE1MCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg2MjgpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbl9fd2VicGFja19yZXF1aXJlX18oNzMxNCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc0NzkpO1xuX193ZWJwYWNrX3JlcXVpcmVfXyg2MjkwKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk2NjI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjE0KTtcbnZhciB0cnlUb1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMzMCk7XG5cbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5NDgzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGlzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0MTEpO1xudmFyIHRyeVRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MzMwKTtcblxudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDYwNzc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjE0KTtcblxudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PSAnb2JqZWN0JyB8fCBpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTIyMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MTEyKTtcbnZhciBjcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzA3MCk7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5pZiAoQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTUzMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGNoYXJBdCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDg3MTApLmNoYXJBdCk7XG5cbi8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDU3ODc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgaXNQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNzk3Nik7XG5cbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk2NzA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XG5cbnZhciBTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEwNDg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNzkwOCk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDAwKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjI0NCk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvcHl3aXRoaW5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtY29weXdpdGhpbiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBtaW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjg1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5MDgpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwMCk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyNDQpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbGxgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsbFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGVuZFBvcyA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKTtcbiAgd2hpbGUgKGVuZFBvcyA+IGluZGV4KSBPW2luZGV4KytdID0gdmFsdWU7XG4gIHJldHVybiBPO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODUzMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICRmb3JFYWNoID0gKF9fd2VicGFja19yZXF1aXJlX18oMjA5MikuZm9yRWFjaCk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IF9fd2VicGFja19yZXF1aXJlX18oOTM0MSk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzc0NTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGxpc3QpIHtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gbmV3IENvbnN0cnVjdG9yKGxlbmd0aCk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NDU3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBiaW5kID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OTc0KTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTE2KTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNzkwOCk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IF9fd2VicGFja19yZXF1aXJlX18oMzQxMSk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NjU5KTtcbnZhciBpc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NDExKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjI0NCk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxMzUpO1xudmFyIGdldEl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTU0KTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0Nik7XG5cbnZhciBBcnJheSA9IGdsb2JhbC5BcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09IEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTMxODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NjU2KTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MDApO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MjQ0KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjA5Mjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgYmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oOTk3NCk7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIEluZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzNjEpO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTA4KTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjI0NCk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NDE3KTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDY1ODM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1sYXN0aW5kZXhvZiAtLSBzYWZlICovXG52YXIgYXBwbHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDQpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTY1Nik7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IF9fd2VicGFja19yZXF1aXJlX18oOTMwMyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyNDQpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzNDEpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG52YXIgJGxhc3RJbmRleE9mID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJGxhc3RJbmRleE9mICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnbGFzdEluZGV4T2YnKTtcbnZhciBGT1JDRUQgPSBORUdBVElWRV9aRVJPIHx8ICFTVFJJQ1RfTUVUSE9EO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmxhc3RpbmRleG9mXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgLy8gY29udmVydCAtMCB0byArMFxuICBpZiAoTkVHQVRJVkVfWkVSTykgcmV0dXJuIGFwcGx5KCRsYXN0SW5kZXhPZiwgdGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGluZGV4ID0gbWluKGluZGV4LCB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50c1sxXSkpO1xuICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTyAmJiBPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gIHJldHVybiAtMTtcbn0gOiAkbGFzdEluZGV4T2Y7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDExOTQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xudmFyIFY4X1ZFUlNJT04gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczOTIpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDkzNDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzY3MTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBhQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2NjIpO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTA4KTtcbnZhciBJbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MzYxKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjI0NCk7XG5cbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjA2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0MzYyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBhcnJheVNsaWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDYpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzQ3NTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBpc0FycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMTU3KTtcbnZhciBpc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NDExKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIEFycmF5ID0gZ2xvYmFsLkFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1NDE3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNzQ3NSk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNDExOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOTY3MCk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTIxMik7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzA3Mjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MTEyKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0MzI2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjQ4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IF9fd2VicGFja19yZXF1aXJlX18oMTY5NCk7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjE0KTtcbnZhciBjbGFzc29mUmF3ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MzI2KTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciBPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc3NDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcbnZhciBhcnJheVNsaWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDYpO1xuXG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIFRFU1QgPSAoZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gU3RyaW5nKEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcbnZhciBJU19GSVJFRk9YX09SX1NBRkFSSV9TVEFDSyA9IC9AW15cXG5dKlxcbi8udGVzdChURVNUKSAmJiAhL3p4Y2FzZC8udGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmICh0eXBlb2Ygc3RhY2sgIT0gJ3N0cmluZycpIHJldHVybiBzdGFjaztcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSykge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IGVsc2UgaWYgKElTX0ZJUkVGT1hfT1JfU0FGQVJJX1NUQUNLKSB7XG4gICAgcmV0dXJuIGpvaW4oYXJyYXlTbGljZShzcGxpdChzdGFjaywgJ1xcbicpLCBkcm9wRW50cmllcyksICdcXG4nKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1NjMxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygzMDcwKS5mKTtcbnZhciBjcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcbnZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjI0OCk7XG52YXIgYmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oOTk3NCk7XG52YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNTc4Nyk7XG52YXIgaXRlcmF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDA4KTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oNjU0KTtcbnZhciBzZXRTcGVjaWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MzQwKTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4MSk7XG52YXIgZmFzdEtleSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MjMpLmZhc3RLZXkpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk5MDkpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIFByb3RvdHlwZSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgdmFyIGRlZmluZSA9IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgIHZhciBwcmV2aW91cywgaW5kZXg7XG4gICAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubGFzdCA9IGVudHJ5ID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzID0gc3RhdGUubGFzdCxcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVtb3ZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdGF0ZS5maXJzdCkgc3RhdGUuZmlyc3QgPSBlbnRyeTtcbiAgICAgICAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy5uZXh0ID0gZW50cnk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSsrO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSsrO1xuICAgICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHN0YXRlLmluZGV4W2luZGV4XSA9IGVudHJ5O1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgdmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIC8vIGZhc3QgY2FzZVxuICAgICAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICAgICAgdmFyIGVudHJ5O1xuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiBzdGF0ZS5pbmRleFtpbmRleF07XG4gICAgICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgICAgIGZvciAoZW50cnkgPSBzdGF0ZS5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnkubmV4dCkge1xuICAgICAgICBpZiAoZW50cnkua2V5ID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZWRlZmluZUFsbChQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT0gZW50cnkpIHN0YXRlLmxhc3QgPSBwcmV2O1xuICAgICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZS0tO1xuICAgICAgICAgIGVsc2UgdGhhdC5zaXplLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuZmlyc3QpIHtcbiAgICAgICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXR9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZWRlZmluZUFsbChQcm90b3R5cGUsIElTX01BUCA/IHtcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudmFsdWU7XG4gICAgICB9LFxuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5zZXRcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgICB0eXBlOiBJVEVSQVRPUl9OQU1FLFxuICAgICAgICB0YXJnZXQ6IGl0ZXJhdGVkLFxuICAgICAgICBzdGF0ZTogZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUoaXRlcmF0ZWQpLFxuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4geyB2YWx1ZTogZW50cnkua2V5LCBkb25lOiBmYWxzZSB9O1xuICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiBlbnRyeS52YWx1ZSwgZG9uZTogZmFsc2UgfTtcbiAgICAgIHJldHVybiB7IHZhbHVlOiBbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGRvbmU6IGZhbHNlIH07XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGVbQEBzcGVjaWVzXWAgYWNjZXNzb3JzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtbWFwLUBAc3BlY2llc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXNldC1AQHNwZWNpZXNcbiAgICBzZXRTcGVjaWVzKENPTlNUUlVDVE9SX05BTUUpO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NzEwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgaXNGb3JjZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3MDUpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIwKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDIzKTtcbnZhciBpdGVyYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MDgpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3ODcpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxNCk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNzA3Mik7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwMDMpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NTg3KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIENvbnN0cnVjdG9yID0gTmF0aXZlQ29uc3RydWN0b3I7XG4gIHZhciBleHBvcnRlZCA9IHt9O1xuXG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIHVuY3VycmllZE5hdGl2ZU1ldGhvZCA9IHVuY3VycnlUaGlzKE5hdGl2ZVByb3RvdHlwZVtLRVldKTtcbiAgICByZWRlZmluZShOYXRpdmVQcm90b3R5cGUsIEtFWSxcbiAgICAgIEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywgdmFsdWUgPT09IDAgPyAwIDogdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gOiBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IHVuZGVmaW5lZCA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICB2YXIgUkVQTEFDRSA9IGlzRm9yY2VkKFxuICAgIENPTlNUUlVDVE9SX05BTUUsXG4gICAgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCkuZW50cmllcygpLm5leHQoKTtcbiAgICB9KSlcbiAgKTtcblxuICBpZiAoUkVQTEFDRSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQ29uc3RydWN0b3IgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgfSBlbHNlIGlmIChpc0ZvcmNlZChDT05TVFJVQ1RPUl9OQU1FLCB0cnVlKSkge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihpdGVyYWJsZSk7IH0pO1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAoZHVtbXksIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UoZHVtbXksIE5hdGl2ZVByb3RvdHlwZSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCksIGR1bW15LCBDb25zdHJ1Y3Rvcik7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE5hdGl2ZVByb3RvdHlwZTtcbiAgICAgIE5hdGl2ZVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgIH1cblxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cblxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuXG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBOYXRpdmVQcm90b3R5cGUuY2xlYXIpIGRlbGV0ZSBOYXRpdmVQcm90b3R5cGUuY2xlYXI7XG4gIH1cblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IENvbnN0cnVjdG9yICE9IE5hdGl2ZUNvbnN0cnVjdG9yIH0sIGV4cG9ydGVkKTtcblxuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk5MjA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5Nyk7XG52YXIgb3duS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzg4Nyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjM2KTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzA3MCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSkgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OTY0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHZhciByZWdleHAgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgIHRyeSB7XG4gICAgICByZWdleHBbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gZmFsc2U7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NTQ0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDIzMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0ODgpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzQwKTtcblxudmFyIHF1b3QgPSAvXCIvZztcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbi8vIGBDcmVhdGVIVE1MYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaHRtbFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIHJlcGxhY2UodG9TdHJpbmcodmFsdWUpLCBxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDQ5OTQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDMzODMpLkl0ZXJhdG9yUHJvdG90eXBlKTtcbnZhciBjcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkxMTQpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MDAzKTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0OTcpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDg4ODA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NzgxKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzA3MCk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MTE0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDkxMTQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDYxMzU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB0b1Byb3BlcnR5S2V5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OTQ4KTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzA3MCk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MTE0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NzA5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOTY3MCk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjE0MCk7XG5cbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGFuT2JqZWN0KHRoaXMpO1xuICBpZiAoaGludCA9PT0gJ3N0cmluZycgfHwgaGludCA9PT0gJ2RlZmF1bHQnKSBoaW50ID0gJ3N0cmluZyc7XG4gIGVsc2UgaWYgKGhpbnQgIT09ICdudW1iZXInKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBoaW50Jyk7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKHRoaXMsIGhpbnQpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjU0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjkxNik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oMTkxMyk7XG52YXIgRnVuY3Rpb25OYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NTMwKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MTQpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5OTQpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NTE4KTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNzY3NCk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwMDMpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oODg4MCk7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMjApO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNTExMik7XG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NDk3KTtcbnZhciBJdGVyYXRvcnNDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMzgzKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICByZWRlZmluZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3MjM1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBwYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTcpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5Nyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjA2MSk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygzMDcwKS5mKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gOTc4MTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9IDc7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzE3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODMyNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDg1MDk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gaW4gb2xkIFdlYktpdCB2ZXJzaW9ucywgYGVsZW1lbnQuY2xhc3NMaXN0YCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgZ2xvYmFsIGBET01Ub2tlbkxpc3RgXG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMTcpO1xuXG52YXIgY2xhc3NMaXN0ID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdzcGFuJykuY2xhc3NMaXN0O1xudmFyIERPTVRva2VuTGlzdFByb3RvdHlwZSA9IGNsYXNzTGlzdCAmJiBjbGFzc0xpc3QuY29uc3RydWN0b3IgJiYgY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Ub2tlbkxpc3RQcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgPyB1bmRlZmluZWQgOiBET01Ub2tlbkxpc3RQcm90b3R5cGU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDg4ODY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHVzZXJBZ2VudCA9IF9fd2VicGFja19yZXF1aXJlX18oODExMyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzg3MTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNTY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIFVBID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MTEzKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTUyODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdXNlckFnZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MTEzKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdCh1c2VyQWdlbnQpICYmIGdsb2JhbC5QZWJibGUgIT09IHVuZGVmaW5lZDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjgzMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdXNlckFnZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MTEzKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MjY4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MzI2KTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTAzNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdXNlckFnZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MTEzKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHVzZXJBZ2VudCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDgxMTM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdldEJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwMDUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzM5Mjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciB1c2VyQWdlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxMTMpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODAwODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdXNlckFnZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MTEzKTtcblxudmFyIHdlYmtpdCA9IHVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcXC8oXFxkKylcXC4vKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIXdlYmtpdCAmJiArd2Via2l0WzFdO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NDg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOTE0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MTE0KTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgZXJyb3IgPSBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMTA5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMzYpLmYpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oODg4MCk7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMjApO1xudmFyIHNldEdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oMzUwNSk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oOTkyMCk7XG52YXIgaXNGb3JjZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3MDUpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLm5vVGFyZ2V0R2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICByZWRlZmluZSh0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3MjkzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3MDA3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xuX193ZWJwYWNrX3JlcXVpcmVfXyg0OTE2KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMjApO1xudmFyIHJlZ2V4cEV4ZWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNjEpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oODg4MCk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuXG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIHJlYWwgcmVnZXggaGVyZSBzaW5jZSBpdCBjYXVzZXMgZGVvcHRpbWl6YXRpb25cbiAgICAgIC8vIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluIFY4XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzA2XG4gICAgICByZSA9IHt9O1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgICAgcmUuZmxhZ3MgPSAnJztcbiAgICAgIHJlW1NZTUJPTF0gPSAvLi9bU1lNQk9MXTtcbiAgICB9XG5cbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgdW5jdXJyaWVkTmF0aXZlUmVnRXhwTWV0aG9kID0gdW5jdXJyeVRoaXMoLy4vW1NZTUJPTF0pO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgdmFyIHVuY3VycmllZE5hdGl2ZU1ldGhvZCA9IHVuY3VycnlUaGlzKG5hdGl2ZU1ldGhvZCk7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuY3VycmllZE5hdGl2ZVJlZ0V4cE1ldGhvZChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgbWV0aG9kc1swXSk7XG4gICAgcmVkZWZpbmUoUmVnRXhwUHJvdG90eXBlLCBTWU1CT0wsIG1ldGhvZHNbMV0pO1xuICB9XG5cbiAgaWYgKFNIQU0pIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSZWdFeHBQcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDY2Nzc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDIxMDQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGJpbmQgPSBGdW5jdGlvblByb3RvdHlwZS5iaW5kO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKGJpbmQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5OTc0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgYUNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjYyKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBiaW5kID8gYmluZChmbiwgdGhhdCkgOiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzA2NTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIGFDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTY2Mik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XG52YXIgaGFzT3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTk3KTtcbnZhciBhcnJheVNsaWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDYpO1xuXG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoQywgYXJnc0xlbmd0aCwgYXJncykge1xuICBpZiAoIWhhc093bihmYWN0b3JpZXMsIGFyZ3NMZW5ndGgpKSB7XG4gICAgZm9yICh2YXIgbGlzdCA9IFtdLCBpID0gMDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9IEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBqb2luKGxpc3QsICcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIEYgPSBhQ2FsbGFibGUodGhpcyk7XG4gIHZhciBQcm90b3R5cGUgPSBGLnByb3RvdHlwZTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IGNvbmNhdChwYXJ0QXJncywgYXJyYXlTbGljZShhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kRnVuY3Rpb24gPyBjb25zdHJ1Y3QoRiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogRi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KFByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gUHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDY5MTY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gY2FsbC5iaW5kID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjUzMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3ODEpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5Nyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNzAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYmluZCA9IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQ7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgY2FsbEJpbmQgPSBiaW5kICYmIGJpbmQuYmluZChjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiaW5kID8gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiAmJiBjYWxsQmluZChjYWxsLCBmbik7XG59IDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MDA1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxNCk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pIDogZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEyNDY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0OCk7XG52YXIgZ2V0TWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MTczKTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0OTcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNTExMik7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDg1NTQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjkxNik7XG52YXIgYUNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjYyKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOTY3MCk7XG52YXIgdHJ5VG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzMzApO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjQ2KTtcblxudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChjYWxsKGl0ZXJhdG9yTWV0aG9kLCBhcmd1bWVudCkpO1xuICB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDgxNzM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGFDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTY2Mik7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjQ3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5MDgpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9KS9nO1xuXG4vLyBgR2V0U3Vic3RpdHV0aW9uYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gIH1cbiAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICB2YXIgY2FwdHVyZTtcbiAgICBzd2l0Y2ggKGNoYXJBdChjaCwgMCkpIHtcbiAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHJpbmdTbGljZShzdHIsIDAsIHBvc2l0aW9uKTtcbiAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHJpbmdTbGljZShzdHIsIHRhaWxQb3MpO1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW3N0cmluZ1NsaWNlKGNoLCAxLCAtMSldO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoYXJBdChjaCwgMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaGFyQXQoY2gsIDEpO1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICB9KTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc4NTQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPT0gJ29iamVjdCcgJiYgX193ZWJwYWNrX3JlcXVpcmVfXy5nKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjU5Nzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTA4KTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNTAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdmFyIGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZTtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgIGFyZ3VtZW50cy5sZW5ndGggPT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OTA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdldEJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwMDUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0NjY0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4MSk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxNyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWllZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPSA3O1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDExNzk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xuXG52YXIgQXJyYXkgPSBnbG9iYWwuQXJyYXk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xuXG52YXIgcGFjayA9IGZ1bmN0aW9uIChudW1iZXIsIG1hbnRpc3NhTGVuZ3RoLCBieXRlcykge1xuICB2YXIgYnVmZmVyID0gQXJyYXkoYnl0ZXMpO1xuICB2YXIgZXhwb25lbnRMZW5ndGggPSBieXRlcyAqIDggLSBtYW50aXNzYUxlbmd0aCAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZXhwb25lbnRMZW5ndGgpIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtYW50aXNzYUxlbmd0aCA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwIHx8IG51bWJlciA9PT0gMCAmJiAxIC8gbnVtYmVyIDwgMCA/IDEgOiAwO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgZXhwb25lbnQsIG1hbnRpc3NhLCBjO1xuICBudW1iZXIgPSBhYnMobnVtYmVyKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgaWYgKG51bWJlciAhPSBudW1iZXIgfHwgbnVtYmVyID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgbWFudGlzc2EgPSBudW1iZXIgIT0gbnVtYmVyID8gMSA6IDA7XG4gICAgZXhwb25lbnQgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGV4cG9uZW50ID0gZmxvb3IobG9nKG51bWJlcikgLyBMTjIpO1xuICAgIGlmIChudW1iZXIgKiAoYyA9IHBvdygyLCAtZXhwb25lbnQpKSA8IDEpIHtcbiAgICAgIGV4cG9uZW50LS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChleHBvbmVudCArIGVCaWFzID49IDEpIHtcbiAgICAgIG51bWJlciArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bWJlciArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAobnVtYmVyICogYyA+PSAyKSB7XG4gICAgICBleHBvbmVudCsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZXhwb25lbnQgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtYW50aXNzYSA9IDA7XG4gICAgICBleHBvbmVudCA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChleHBvbmVudCArIGVCaWFzID49IDEpIHtcbiAgICAgIG1hbnRpc3NhID0gKG51bWJlciAqIGMgLSAxKSAqIHBvdygyLCBtYW50aXNzYUxlbmd0aCk7XG4gICAgICBleHBvbmVudCA9IGV4cG9uZW50ICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbnRpc3NhID0gbnVtYmVyICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbWFudGlzc2FMZW5ndGgpO1xuICAgICAgZXhwb25lbnQgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbWFudGlzc2FMZW5ndGggPj0gODsgYnVmZmVyW2luZGV4KytdID0gbWFudGlzc2EgJiAyNTUsIG1hbnRpc3NhIC89IDI1NiwgbWFudGlzc2FMZW5ndGggLT0gOCk7XG4gIGV4cG9uZW50ID0gZXhwb25lbnQgPDwgbWFudGlzc2FMZW5ndGggfCBtYW50aXNzYTtcbiAgZXhwb25lbnRMZW5ndGggKz0gbWFudGlzc2FMZW5ndGg7XG4gIGZvciAoOyBleHBvbmVudExlbmd0aCA+IDA7IGJ1ZmZlcltpbmRleCsrXSA9IGV4cG9uZW50ICYgMjU1LCBleHBvbmVudCAvPSAyNTYsIGV4cG9uZW50TGVuZ3RoIC09IDgpO1xuICBidWZmZXJbLS1pbmRleF0gfD0gc2lnbiAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbnZhciB1bnBhY2sgPSBmdW5jdGlvbiAoYnVmZmVyLCBtYW50aXNzYUxlbmd0aCkge1xuICB2YXIgYnl0ZXMgPSBidWZmZXIubGVuZ3RoO1xuICB2YXIgZXhwb25lbnRMZW5ndGggPSBieXRlcyAqIDggLSBtYW50aXNzYUxlbmd0aCAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZXhwb25lbnRMZW5ndGgpIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBleHBvbmVudExlbmd0aCAtIDc7XG4gIHZhciBpbmRleCA9IGJ5dGVzIC0gMTtcbiAgdmFyIHNpZ24gPSBidWZmZXJbaW5kZXgtLV07XG4gIHZhciBleHBvbmVudCA9IHNpZ24gJiAxMjc7XG4gIHZhciBtYW50aXNzYTtcbiAgc2lnbiA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZXhwb25lbnQgPSBleHBvbmVudCAqIDI1NiArIGJ1ZmZlcltpbmRleF0sIGluZGV4LS0sIG5CaXRzIC09IDgpO1xuICBtYW50aXNzYSA9IGV4cG9uZW50ICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGV4cG9uZW50ID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1hbnRpc3NhTGVuZ3RoO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtYW50aXNzYSA9IG1hbnRpc3NhICogMjU2ICsgYnVmZmVyW2luZGV4XSwgaW5kZXgtLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChleHBvbmVudCA9PT0gMCkge1xuICAgIGV4cG9uZW50ID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGV4cG9uZW50ID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG1hbnRpc3NhID8gTmFOIDogc2lnbiA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG1hbnRpc3NhID0gbWFudGlzc2EgKyBwb3coMiwgbWFudGlzc2FMZW5ndGgpO1xuICAgIGV4cG9uZW50ID0gZXhwb25lbnQgLSBlQmlhcztcbiAgfSByZXR1cm4gKHNpZ24gPyAtMSA6IDEpICogbWFudGlzc2EgKiBwb3coMiwgZXhwb25lbnQgLSBtYW50aXNzYUxlbmd0aCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFjazogcGFjayxcbiAgdW5wYWNrOiB1bnBhY2tcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDgzNjE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MzI2KTtcblxudmFyIE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICFPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gOTU4Nzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjE0KTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNzY3NCk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNzg4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjE0KTtcbnZhciBzdG9yZSA9IF9fd2VicGFja19yZXF1aXJlX18oNTQ2NSk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4MzQwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4ODApO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjQyMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIGhpZGRlbktleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1MDEpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5Nyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygzMDcwKS5mKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MDA2KTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNTYpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oOTcxMSk7XG52YXIgRlJFRVpJTkcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2NzcpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk5MDk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIE5BVElWRV9XRUFLX01BUCA9IF9fd2VicGFja19yZXF1aXJlX18oODUzNik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODgwKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1OTcpO1xudmFyIHNoYXJlZCA9IF9fd2VicGFja19yZXF1aXJlX18oNTQ2NSk7XG52YXIgc2hhcmVkS2V5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MjAwKTtcbnZhciBoaWRkZW5LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNTAxKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIHZhciB3bWdldCA9IHVuY3VycnlUaGlzKHN0b3JlLmdldCk7XG4gIHZhciB3bWhhcyA9IHVuY3VycnlUaGlzKHN0b3JlLmhhcyk7XG4gIHZhciB3bXNldCA9IHVuY3VycnlUaGlzKHN0b3JlLnNldCk7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAod21oYXMoc3RvcmUsIGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgd21zZXQoc3RvcmUsIGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21nZXQoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NjU5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xudmFyIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oNzQ5Nyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMTU3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MzI2KTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT0gJ0FycmF5Jztcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDYxNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0NDExOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxNCk7XG52YXIgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oNjQ4KTtcbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MDA1KTtcbnZhciBpbnNwZWN0U291cmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzg4KTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgZW1wdHkgPSBbXTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIGVtcHR5LCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gIH0gcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG59O1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDQ3MDU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MTQpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1OTg4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYElzSW50ZWdyYWxOdW1iZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2ludGVncmFsbnVtYmVyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbnVtYmVyLWlzaW50ZWdlciAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc0ludGVnZXIgfHwgZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTExOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MTQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE5MTM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc4NTA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpO1xudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzMjYpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNTExMik7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDIxOTA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgZ2V0QnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oNTAwNSk7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjE0KTtcbnZhciBpc1Byb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTc2KTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IF9fd2VicGFja19yZXF1aXJlX18oMzMwNyk7XG5cbnZhciBPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsIE9iamVjdChpdCkpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDA4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk5NzQpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5MTYpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjcwKTtcbnZhciB0cnlUb1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMzMCk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NjU5KTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjI0NCk7XG52YXIgaXNQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNzk3Nik7XG52YXIgZ2V0SXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1NTQpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjQ2KTtcbnZhciBpdGVyYXRvckNsb3NlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MjEyKTtcblxudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gOTIxMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjkxNik7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2NzApO1xudmFyIGdldE1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oODE3Myk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMzgzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxNCk7XG52YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1MTgpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIwKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xudmFyIElTX1BVUkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MTMpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9IEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIHJlZGVmaW5lKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzQ5Nzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjI0NDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0NjYpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDU5NDg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgYmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oOTk3NCk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gKF9fd2VicGFja19yZXF1aXJlX18oMTIzNikuZik7XG52YXIgbWFjcm90YXNrID0gKF9fd2VicGFja19yZXF1aXJlX18oMjYxKS5zZXQpO1xudmFyIElTX0lPUyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgzMyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUyOCk7XG52YXIgSVNfV0VCT1NfV0VCS0lUID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDM2KTtcbnZhciBJU19OT0RFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MjY4KTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuLy8gTm9kZS5qcyAxMSBzaG93cyBFeHBlcmltZW50YWxXYXJuaW5nIG9uIGdldHRpbmcgYHF1ZXVlTWljcm90YXNrYFxudmFyIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdxdWV1ZU1pY3JvdGFzaycpO1xudmFyIHF1ZXVlTWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcblxudmFyIGZsdXNoLCBoZWFkLCBsYXN0LCBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghcXVldWVNaWNyb3Rhc2spIHtcbiAgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKElTX05PREUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmJpbmQoZ2xvYmFsKVxuICAgIG1hY3JvdGFzayA9IGJpbmQobWFjcm90YXNrLCBnbG9iYWwpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hY3JvdGFzayhmbHVzaCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHF1ZXVlTWljcm90YXNrIHx8IGZ1bmN0aW9uIChmbikge1xuICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gIGlmICghaGVhZCkge1xuICAgIGhlYWQgPSB0YXNrO1xuICAgIG5vdGlmeSgpO1xuICB9IGxhc3QgPSB0YXNrO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzM2Njpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTMzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczOTIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICByZXR1cm4gIVN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODUzNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MTQpO1xudmFyIGluc3BlY3RTb3VyY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3ODgpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KGluc3BlY3RTb3VyY2UoV2Vha01hcCkpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NTIzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYUNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjYyKTtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDYyNzc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzQwKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzkyOTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBpc1JlZ0V4cCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1MCk7XG5cbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNSZWdFeHAoaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zXCIpO1xuICB9IHJldHVybiBpdDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDcwMjM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG5cbnZhciBnbG9iYWxJc0Zpbml0ZSA9IGdsb2JhbC5pc0Zpbml0ZTtcblxuLy8gYE51bWJlci5pc0Zpbml0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5pc2Zpbml0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW51bWJlci1pc2Zpbml0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc0Zpbml0ZSB8fCBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIGdsb2JhbElzRmluaXRlKGl0KTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE1NzQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4MSk7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5MTYpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciBvYmplY3RLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTU2KTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxODEpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mjk2KTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNzkwOCk7XG52YXIgSW5kZXhlZE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oODM2MSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChvYmplY3RLZXlzKFMpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZSwgUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjcwKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MDQ4KTtcbnZhciBlbnVtQnVnS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oNzQ4KTtcbnZhciBoaWRkZW5LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNTAxKTtcbnZhciBodG1sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OTApO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMzE3KTtcbnZhciBzaGFyZWRLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMDApO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2MDQ4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4MSk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwNzApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjcwKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2NTYpO1xudmFyIG9iamVjdEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5NTYpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDMwNzA6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3ODEpO1xudmFyIElFOF9ET01fREVGSU5FID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NjY0KTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOTY3MCk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IF9fd2VicGFja19yZXF1aXJlX18oNDk0OCk7XG5cbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjM2OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4MSk7XG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjkxNik7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyOTYpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oOTExNCk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NjU2KTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OTQ4KTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1OTcpO1xudmFyIElFOF9ET01fREVGSU5FID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NjY0KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTU2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MzI2KTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2NTYpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gKF9fd2VicGFja19yZXF1aXJlX18oODAwNikuZik7XG52YXIgYXJyYXlTbGljZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA2KTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4MDA2OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzMjQpO1xudmFyIGVudW1CdWdLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NDgpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTE4MTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5NTE4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5Nyk7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjE0KTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNzkwOCk7XG52YXIgc2hhcmVkS2V5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MjAwKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1NDQpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0ID0gZ2xvYmFsLk9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc5NzY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjMyNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5Nyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NjU2KTtcbnZhciBpbmRleE9mID0gKF9fd2VicGFja19yZXF1aXJlX18oMTMxOCkuaW5kZXhPZik7XG52YXIgaGlkZGVuS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUwMSk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTk1Njpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MzI0KTtcbnZhciBlbnVtQnVnS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oNzQ4KTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDUyOTY6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3Njc0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2NzApO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjA3Nyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpcyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDY5OTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3ODEpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcbnZhciBvYmplY3RLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTU2KTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2NTYpO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDUyOTYpLmYpO1xuXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSB1bmN1cnJ5VGhpcygkcHJvcGVydHlJc0VudW1lcmFibGUpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYE9iamVjdC57IGVudHJpZXMsIHZhbHVlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRPX0VOVFJJRVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IG9iamVjdEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBwcm9wZXJ0eUlzRW51bWVyYWJsZShPLCBrZXkpKSB7XG4gICAgICAgIHB1c2gocmVzdWx0LCBUT19FTlRSSUVTID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYE9iamVjdC5lbnRyaWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZW50cmllc1xuICBlbnRyaWVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBPYmplY3QudmFsdWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QudmFsdWVzXG4gIHZhbHVlczogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjg4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjk0KTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NDgpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjE0MDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTE2KTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MTQpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzODg3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MDA1KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oODAwNik7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MTgxKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOTY3MCk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDg1Nzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI1MzQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk0Nzg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjcwKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IF9fd2VicGFja19yZXF1aXJlX18oODUyMyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDIyNDg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIwKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEzMjA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjE0KTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1OTcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oODg4MCk7XG52YXIgc2V0R2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNTA1KTtcbnZhciBpbnNwZWN0U291cmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzg4KTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OTA5KTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDY1MzApLkNPTkZJR1VSQUJMRSk7XG5cbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciB1bnNhZmUgPSBvcHRpb25zID8gISFvcHRpb25zLnVuc2FmZSA6IGZhbHNlO1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5lbnVtZXJhYmxlIDogZmFsc2U7XG4gIHZhciBub1RhcmdldEdldCA9IG9wdGlvbnMgPyAhIW9wdGlvbnMubm9UYXJnZXRHZXQgOiBmYWxzZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zICYmIG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICB2YXIgc3RhdGU7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkge1xuICAgIGlmIChTdHJpbmcobmFtZSkuc2xpY2UoMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgICAgbmFtZSA9ICdbJyArIFN0cmluZyhuYW1lKS5yZXBsYWNlKC9eU3ltYm9sXFwoKFteKV0qKVxcKS8sICckMScpICsgJ10nO1xuICAgIH1cbiAgICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCBuYW1lKTtcbiAgICB9XG4gICAgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gICAgaWYgKCFzdGF0ZS5zb3VyY2UpIHtcbiAgICAgIHN0YXRlLnNvdXJjZSA9IFRFTVBMQVRFLmpvaW4odHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICAgIH1cbiAgfVxuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBzZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCF1bnNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICB9IGVsc2UgaWYgKCFub1RhcmdldEdldCAmJiBPW2tleV0pIHtcbiAgICBzaW1wbGUgPSB0cnVlO1xuICB9XG4gIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCBrZXksIHZhbHVlKTtcbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NjUxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5MTYpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjcwKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MTQpO1xudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzMjYpO1xudmFyIHJlZ2V4cEV4ZWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNjEpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxuLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAoaXNDYWxsYWJsZShleGVjKSkge1xuICAgIHZhciByZXN1bHQgPSBjYWxsKGV4ZWMsIFIsIFMpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSA9PT0gJ1JlZ0V4cCcpIHJldHVybiBjYWxsKHJlZ2V4cEV4ZWMsIFIsIFMpO1xuICB0aHJvdyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDIyNjE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTE2KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNDApO1xudmFyIHJlZ2V4cEZsYWdzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MDY2KTtcbnZhciBzdGlja3lIZWxwZXJzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOTk5KTtcbnZhciBzaGFyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMDkpO1xudmFyIGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xudmFyIGdldEludGVybmFsU3RhdGUgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg5OTA5KS5nZXQpO1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk0NDEpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IF9fd2VicGFja19yZXF1aXJlX18oNzE2OCk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1kgfHwgc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0c7XG5cbmlmIChQQVRDSCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHMgLS0gVE9ET1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyaW5nKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHJlKTtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgcmF3ID0gc3RhdGUucmF3O1xuICAgIHZhciByZXN1bHQsIHJlQ29weSwgbGFzdEluZGV4LCBtYXRjaCwgaSwgb2JqZWN0LCBncm91cDtcblxuICAgIGlmIChyYXcpIHtcbiAgICAgIHJhdy5sYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICByZXN1bHQgPSBjYWxsKHBhdGNoZWRFeGVjLCByYXcsIHN0cik7XG4gICAgICByZS5sYXN0SW5kZXggPSByYXcubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBzID0gc3RhdGUuZ3JvdXBzO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSBjYWxsKHJlZ2V4cEZsYWdzLCByZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsICd5JywgJycpO1xuICAgICAgaWYgKGluZGV4T2YoZmxhZ3MsICdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IHN0cmluZ1NsaWNlKHN0ciwgcmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIGNoYXJBdChzdHIsIHJlLmxhc3RJbmRleCAtIDEpICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBjYWxsKG5hdGl2ZUV4ZWMsIHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IHN0cmluZ1NsaWNlKG1hdGNoLmlucHV0LCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBzdHJpbmdTbGljZShtYXRjaFswXSwgY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzA2Njpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjcwKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjk5OTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbmV4cG9ydHMuVU5TVVBQT1JURURfWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnYScsICd5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdhYmNkJykgIT0gbnVsbDtcbn0pO1xuXG5leHBvcnRzLkJST0tFTl9DQVJFVCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9ICRSZWdFeHAoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPSBudWxsO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk0NDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAncycpIC0+IC8uL3MgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS5leGVjKCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3MTY4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcoPzxhPmIpJywgJ2cnKSAtPiAvKD88YT5iKS9nIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDQ4ODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcblxudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDM1MDU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjM0MDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGdldEJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwMDUpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMDcwKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NzgxKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDgwMDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKF9fd2VicGFja19yZXF1aXJlX18oMzA3MCkuZik7XG52YXIgaGFzT3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTk3KTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDKSB7XG4gIGlmIChpdCAmJiAhaGFzT3duKGl0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoaXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2MjAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBzaGFyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMDkpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oOTcxMSk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1NDY1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIHNldEdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oMzUwNSk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IHNldEdsb2JhbChTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjMwOTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oMTkxMyk7XG52YXIgc3RvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU0NjUpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMTkuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2NzA3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOTY3MCk7XG52YXIgYUNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NDgzKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzQyOTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xuXG4vLyBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIGEgbWV0aG9kLCBsb3dlcmNhc2Vcbi8vIG9mIGEgdGFnIGFuZCBlc2NhcGluZyBxdW90ZXMgaW4gYXJndW1lbnRzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTUVUSE9EX05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDg3MTA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MzAzKTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM0MCk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQ4OCk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NDE1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MzAzKTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM0MCk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQ4OCk7XG5cbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGVhdGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwZWF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXJPckluZmluaXR5KGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG51bWJlciBvZiByZXBldGl0aW9ucycpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzdWx0ICs9IHN0cjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDYwOTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gKF9fd2VicGFja19yZXF1aXJlX18oNjUzMCkuUFJPUEVSKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgd2hpdGVzcGFjZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNjEpO1xuXG52YXIgbm9uID0gJ1xcdTIwMEJcXHUwMDg1XFx1MTgwRSc7XG5cbi8vIGNoZWNrIHRoYXQgYSBtZXRob2Qgd29ya3Mgd2l0aCB0aGUgY29ycmVjdCBsaXN0XG4vLyBvZiB3aGl0ZXNwYWNlcyBhbmQgaGFzIGEgY29ycmVjdCBuYW1lXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXSgpXG4gICAgICB8fCBub25bTUVUSE9EX05BTUVdKCkgIT09IG5vblxuICAgICAgfHwgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRSk7XG4gIH0pO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzExMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0ODgpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzQwKTtcbnZhciB3aGl0ZXNwYWNlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM2MSk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgd2hpdGVzcGFjZSA9ICdbJyArIHdoaXRlc3BhY2VzICsgJ10nO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cCh3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJycpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNjE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgYXBwbHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDQpO1xudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk5NzQpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxNCk7XG52YXIgaGFzT3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTk3KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgaHRtbCA9IF9fd2VicGFja19yZXF1aXJlX18oNDkwKTtcbnZhciBhcnJheVNsaWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDYpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxNyk7XG52YXIgSVNfSU9TID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2ODMzKTtcbnZhciBJU19OT0RFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MjY4KTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbnRyeSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICBsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgcG9zdCA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKFN0cmluZyhpZCksIGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShpc0NhbGxhYmxlKGZuKSA/IGZuIDogRnVuY3Rpb24oZm4pLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgIGlzQ2FsbGFibGUoZ2xvYmFsLnBvc3RNZXNzYWdlKSAmJlxuICAgICFnbG9iYWwuaW1wb3J0U2NyaXB0cyAmJlxuICAgIGxvY2F0aW9uICYmIGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKHBvc3QpXG4gICkge1xuICAgIGRlZmVyID0gcG9zdDtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NjM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcblxuLy8gYHRoaXNOdW1iZXJWYWx1ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRoaXNudW1iZXJ2YWx1ZVxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcygxLjAudmFsdWVPZik7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE0MDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzMDMpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3MDY3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzMDMpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NDY2KTtcblxudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcblxuLy8gYFRvSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHZhciBudW1iZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIG9yIGluZGV4Jyk7XG4gIHJldHVybiBsZW5ndGg7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1NjU2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oODM2MSk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQ4OCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDkzMDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIHNhZmVcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiAobnVtYmVyID4gMCA/IGZsb29yIDogY2VpbCkobnVtYmVyKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc0NjY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzMDMpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc5MDg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQ4OCk7XG5cbnZhciBPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0NTkwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIHRvUG9zaXRpdmVJbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMDAyKTtcblxudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gIHZhciBvZmZzZXQgPSB0b1Bvc2l0aXZlSW50ZWdlcihpdCk7XG4gIGlmIChvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0Jyk7XG4gIHJldHVybiBvZmZzZXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMDAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzMDMpO1xuXG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpdCk7XG4gIGlmIChyZXN1bHQgPCAwKSB0aHJvdyBSYW5nZUVycm9yKFwiVGhlIGFyZ3VtZW50IGNhbid0IGJlIGxlc3MgdGhhbiAwXCIpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzU5Mzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTE2KTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcbnZhciBpc1N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5MCk7XG52YXIgZ2V0TWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MTczKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTQwKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OTQ4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzU5Myk7XG52YXIgaXNTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOTApO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTY5NDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MTEyKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMzQwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0OCk7XG5cbnZhciBTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiBTdHJpbmcoYXJndW1lbnQpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjMzMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcblxudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5ODQzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTE2KTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4MSk7XG52YXIgVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUyA9IF9fd2VicGFja19yZXF1aXJlX18oMzgzMik7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA5NCk7XG52YXIgQXJyYXlCdWZmZXJNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTEpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3ODcpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oOTExNCk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODgwKTtcbnZhciBpc0ludGVncmFsTnVtYmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OTg4KTtcbnZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oNzQ2Nik7XG52YXIgdG9JbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oNzA2Nyk7XG52YXIgdG9PZmZzZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1OTApO1xudmFyIHRvUHJvcGVydHlLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5NDgpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5Nyk7XG52YXIgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oNjQ4KTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcbnZhciBpc1N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5MCk7XG52YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XG52YXIgaXNQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNzk3Nik7XG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2NzQpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg4MDA2KS5mKTtcbnZhciB0eXBlZEFycmF5RnJvbSA9IF9fd2VicGFja19yZXF1aXJlX18oNzMyMSk7XG52YXIgZm9yRWFjaCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTIpLmZvckVhY2gpO1xudmFyIHNldFNwZWNpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzNDApO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMDcwKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMzYpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk5MDkpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NTg3KTtcblxudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgQXJyYXlCdWZmZXIgPSBBcnJheUJ1ZmZlck1vZHVsZS5BcnJheUJ1ZmZlcjtcbnZhciBBcnJheUJ1ZmZlclByb3RvdHlwZSA9IEFycmF5QnVmZmVyLnByb3RvdHlwZTtcbnZhciBEYXRhVmlldyA9IEFycmF5QnVmZmVyTW9kdWxlLkRhdGFWaWV3O1xudmFyIE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M7XG52YXIgVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLlRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SO1xudmFyIFRZUEVEX0FSUkFZX1RBRyA9IEFycmF5QnVmZmVyVmlld0NvcmUuVFlQRURfQVJSQVlfVEFHO1xudmFyIFR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLlR5cGVkQXJyYXk7XG52YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IEFycmF5QnVmZmVyVmlld0NvcmUuVHlwZWRBcnJheVByb3RvdHlwZTtcbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xudmFyIGlzVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuaXNUeXBlZEFycmF5O1xudmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoJztcblxudmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihDKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gbmV3IEMobGVuZ3RoKTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShpdCwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpW2tleV07XG4gIH0gfSk7XG59O1xuXG52YXIgaXNBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIga2xhc3M7XG4gIHJldHVybiBpc1Byb3RvdHlwZU9mKEFycmF5QnVmZmVyUHJvdG90eXBlLCBpdCkgfHwgKGtsYXNzID0gY2xhc3NvZihpdCkpID09ICdBcnJheUJ1ZmZlcicgfHwga2xhc3MgPT0gJ1NoYXJlZEFycmF5QnVmZmVyJztcbn07XG5cbnZhciBpc1R5cGVkQXJyYXlJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICByZXR1cm4gaXNUeXBlZEFycmF5KHRhcmdldClcbiAgICAmJiAhaXNTeW1ib2woa2V5KVxuICAgICYmIGtleSBpbiB0YXJnZXRcbiAgICAmJiBpc0ludGVncmFsTnVtYmVyKCtrZXkpXG4gICAgJiYga2V5ID49IDA7XG59O1xuXG52YXIgd3JhcHBlZEdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIHJldHVybiBpc1R5cGVkQXJyYXlJbmRleCh0YXJnZXQsIGtleSlcbiAgICA/IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigyLCB0YXJnZXRba2V5XSlcbiAgICA6IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG59O1xuXG52YXIgd3JhcHBlZERlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoaXNUeXBlZEFycmF5SW5kZXgodGFyZ2V0LCBrZXkpXG4gICAgJiYgaXNPYmplY3QoZGVzY3JpcHRvcilcbiAgICAmJiBoYXNPd24oZGVzY3JpcHRvciwgJ3ZhbHVlJylcbiAgICAmJiAhaGFzT3duKGRlc2NyaXB0b3IsICdnZXQnKVxuICAgICYmICFoYXNPd24oZGVzY3JpcHRvciwgJ3NldCcpXG4gICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGVcbiAgICAmJiAoIWhhc093bihkZXNjcmlwdG9yLCAnd3JpdGFibGUnKSB8fCBkZXNjcmlwdG9yLndyaXRhYmxlKVxuICAgICYmICghaGFzT3duKGRlc2NyaXB0b3IsICdlbnVtZXJhYmxlJykgfHwgZGVzY3JpcHRvci5lbnVtZXJhYmxlKVxuICApIHtcbiAgICB0YXJnZXRba2V5XSA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xufTtcblxuaWYgKERFU0NSSVBUT1JTKSB7XG4gIGlmICghTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUykge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gd3JhcHBlZEdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gd3JhcHBlZERlZmluZVByb3BlcnR5O1xuICAgIGFkZEdldHRlcihUeXBlZEFycmF5UHJvdG90eXBlLCAnYnVmZmVyJyk7XG4gICAgYWRkR2V0dGVyKFR5cGVkQXJyYXlQcm90b3R5cGUsICdieXRlT2Zmc2V0Jyk7XG4gICAgYWRkR2V0dGVyKFR5cGVkQXJyYXlQcm90b3R5cGUsICdieXRlTGVuZ3RoJyk7XG4gICAgYWRkR2V0dGVyKFR5cGVkQXJyYXlQcm90b3R5cGUsICdsZW5ndGgnKTtcbiAgfVxuXG4gICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTIH0sIHtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IHdyYXBwZWRHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gICAgZGVmaW5lUHJvcGVydHk6IHdyYXBwZWREZWZpbmVQcm9wZXJ0eVxuICB9KTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgdmFyIEJZVEVTID0gVFlQRS5tYXRjaCgvXFxkKyQvKVswXSAvIDg7XG4gICAgdmFyIENPTlNUUlVDVE9SX05BTUUgPSBUWVBFICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIFRZUEU7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgVFlQRTtcbiAgICB2YXIgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICAgIHZhciBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBOYXRpdmVUeXBlZEFycmF5Q29uc3RydWN0b3I7XG4gICAgdmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSA9IFR5cGVkQXJyYXlDb25zdHJ1Y3RvciAmJiBUeXBlZEFycmF5Q29uc3RydWN0b3IucHJvdG90eXBlO1xuICAgIHZhciBleHBvcnRlZCA9IHt9O1xuXG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgcmV0dXJuIGRhdGEudmlld1tHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLmJ5dGVPZmZzZXQsIHRydWUpO1xuICAgIH07XG5cbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgaWYgKENMQU1QRUQpIHZhbHVlID0gKHZhbHVlID0gcm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweEZGID8gMHhGRiA6IHZhbHVlICYgMHhGRjtcbiAgICAgIGRhdGEudmlld1tTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLmJ5dGVPZmZzZXQsIHZhbHVlLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgdmFyIGFkZEVsZW1lbnQgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoYXQsIGluZGV4LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXR0ZXIodGhpcywgaW5kZXgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBzZXR0ZXIodGhpcywgaW5kZXgsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICghTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUykge1xuICAgICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIGJ5dGVPZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGg7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICAgIGJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgYnl0ZU9mZnNldCA9IHRvT2Zmc2V0KG9mZnNldCwgQllURVMpO1xuICAgICAgICAgIHZhciAkbGVuID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGlmICgkbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICgkbGVuICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSAkbGVuIC0gYnl0ZU9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgYnl0ZU9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKGlzVHlwZWRBcnJheShkYXRhKSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5Q29uc3RydWN0b3IsIGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjYWxsKHR5cGVkQXJyYXlGcm9tLCBUeXBlZEFycmF5Q29uc3RydWN0b3IsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgICAgICAgIGJ5dGVPZmZzZXQ6IGJ5dGVPZmZzZXQsXG4gICAgICAgICAgYnl0ZUxlbmd0aDogYnl0ZUxlbmd0aCxcbiAgICAgICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgICAgICB2aWV3OiBuZXcgRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBUeXBlZEFycmF5KTtcbiAgICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoVHlwZWRBcnJheVByb3RvdHlwZSk7XG4gICAgfSBlbHNlIGlmIChUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTKSB7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uIChkdW1teSwgZGF0YSwgdHlwZWRBcnJheU9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKGR1bW15LCBUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUpO1xuICAgICAgICByZXR1cm4gaW5oZXJpdElmUmVxdWlyZWQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHJldHVybiBuZXcgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICAgIGlmIChpc0FycmF5QnVmZmVyKGRhdGEpKSByZXR1cm4gJGxlbmd0aCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG5ldyBOYXRpdmVUeXBlZEFycmF5Q29uc3RydWN0b3IoZGF0YSwgdG9PZmZzZXQodHlwZWRBcnJheU9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiB0eXBlZEFycmF5T2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGRhdGEsIHRvT2Zmc2V0KHR5cGVkQXJyYXlPZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGRhdGEpO1xuICAgICAgICAgIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5Q29uc3RydWN0b3IsIGRhdGEpO1xuICAgICAgICAgIHJldHVybiBjYWxsKHR5cGVkQXJyYXlGcm9tLCBUeXBlZEFycmF5Q29uc3RydWN0b3IsIGRhdGEpO1xuICAgICAgICB9KCksIGR1bW15LCBUeXBlZEFycmF5Q29uc3RydWN0b3IpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBUeXBlZEFycmF5KTtcbiAgICAgIGZvckVhY2goZ2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVUeXBlZEFycmF5Q29uc3RydWN0b3IpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFR5cGVkQXJyYXlDb25zdHJ1Y3Rvciwga2V5LCBOYXRpdmVUeXBlZEFycmF5Q29uc3RydWN0b3Jba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZTtcbiAgICB9XG5cbiAgICBpZiAoVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlLmNvbnN0cnVjdG9yICE9PSBUeXBlZEFycmF5Q29uc3RydWN0b3IpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSwgVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcik7XG5cbiAgICBpZiAoVFlQRURfQVJSQVlfVEFHKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlLCBUWVBFRF9BUlJBWV9UQUcsIENPTlNUUlVDVE9SX05BTUUpO1xuICAgIH1cblxuICAgIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuXG4gICAgJCh7XG4gICAgICBnbG9iYWw6IHRydWUsIGZvcmNlZDogVHlwZWRBcnJheUNvbnN0cnVjdG9yICE9IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3Rvciwgc2hhbTogIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1NcbiAgICB9LCBleHBvcnRlZCk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3IpKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuICAgIH1cblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG4gICAgfVxuXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzgzMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwNzIpO1xudmFyIE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyMDk0KS5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTKTtcblxudmFyIEFycmF5QnVmZmVyID0gZ2xvYmFsLkFycmF5QnVmZmVyO1xudmFyIEludDhBcnJheSA9IGdsb2JhbC5JbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgSW50OEFycmF5KDEpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmV3IEludDhBcnJheSgtMSk7XG59KSB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBuZXcgSW50OEFycmF5KCk7XG4gIG5ldyBJbnQ4QXJyYXkobnVsbCk7XG4gIG5ldyBJbnQ4QXJyYXkoMS41KTtcbiAgbmV3IEludDhBcnJheShpdGVyYWJsZSk7XG59LCB0cnVlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFNhZmFyaSAoMTErKSBidWcgLSBhIHJlYXNvbiB3aHkgZXZlbiBTYWZhcmkgMTMgc2hvdWxkIGxvYWQgYSB0eXBlZCBhcnJheSBwb2x5ZmlsbFxuICByZXR1cm4gbmV3IEludDhBcnJheShuZXcgQXJyYXlCdWZmZXIoMiksIDEsIHVuZGVmaW5lZCkubGVuZ3RoICE9PSAxO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDMwNzQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGFycmF5RnJvbUNvbnN0cnVjdG9yQW5kTGlzdCA9IF9fd2VicGFja19yZXF1aXJlX18oNzc0NSk7XG52YXIgdHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNjMwNCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluc3RhbmNlLCBsaXN0KSB7XG4gIHJldHVybiBhcnJheUZyb21Db25zdHJ1Y3RvckFuZExpc3QodHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihpbnN0YW5jZSksIGxpc3QpO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzMyMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgYmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oOTk3NCk7XG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjkxNik7XG52YXIgYUNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NDgzKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNzkwOCk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyNDQpO1xudmFyIGdldEl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTU0KTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0Nik7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NjU5KTtcbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gKF9fd2VicGFja19yZXF1aXJlX18oMjA5NCkuYVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBmbiwgdGhpc0FyZyAqLykge1xuICB2YXIgQyA9IGFDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChPKTtcbiAgdmFyIGksIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvciwgbmV4dDtcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICFpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlcmF0b3JNZXRob2QpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgTyA9IFtdO1xuICAgIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgICAgTy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIH1cbiAgfVxuICBpZiAobWFwcGluZyAmJiBhcmd1bWVudHNMZW5ndGggPiAyKSB7XG4gICAgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNbMl0pO1xuICB9XG4gIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICByZXN1bHQgPSBuZXcgKGFUeXBlZEFycmF5Q29uc3RydWN0b3IoQykpKGxlbmd0aCk7XG4gIGZvciAoaSA9IDA7IGxlbmd0aCA+IGk7IGkrKykge1xuICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDYzMDQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTQpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNjcwNyk7XG5cbnZhciBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUiA9IEFycmF5QnVmZmVyVmlld0NvcmUuVFlQRURfQVJSQVlfQ09OU1RSVUNUT1I7XG52YXIgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcblxuLy8gYSBwYXJ0IG9mIGBUeXBlZEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jdHlwZWRhcnJheS1zcGVjaWVzLWNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICByZXR1cm4gYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSwgb3JpZ2luYWxBcnJheVtUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUl0pKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk3MTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMzA3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjA2MTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MTEyKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MTEyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIHNoYXJlZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjMwOSk7XG52YXIgaGFzT3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTk3KTtcbnZhciB1aWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3MTEpO1xudmFyIE5BVElWRV9TWU1CT0wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzMDcpO1xuXG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIHN5bWJvbEZvciA9IFN5bWJvbCAmJiBTeW1ib2xbJ2ZvciddO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpIHx8ICEoTkFUSVZFX1NZTUJPTCB8fCB0eXBlb2YgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID09ICdzdHJpbmcnKSkge1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICdTeW1ib2wuJyArIG5hbWU7XG4gICAgaWYgKE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSkpIHtcbiAgICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IFN5bWJvbFtuYW1lXTtcbiAgICB9IGVsc2UgaWYgKFVTRV9TWU1CT0xfQVNfVUlEICYmIHN5bWJvbEZvcikge1xuICAgICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gc3ltYm9sRm9yKGRlc2NyaXB0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKGRlc2NyaXB0aW9uKTtcbiAgICB9XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEzNjE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5MTcwOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGlzUHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5NzYpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NTE4KTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNzY3NCk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oOTkyMCk7XG52YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODgwKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkxMTQpO1xudmFyIGNsZWFyRXJyb3JTdGFjayA9IF9fd2VicGFja19yZXF1aXJlX18oNzc0MSk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzNDApO1xudmFyIGl0ZXJhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwOCk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyNzcpO1xudmFyIEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOTE0KTtcblxudmFyIEVycm9yID0gZ2xvYmFsLkVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgdGhhdCA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgIHRoYXQgPSBzZXRQcm90b3R5cGVPZihuZXcgRXJyb3IodW5kZWZpbmVkKSwgZ2V0UHJvdG90eXBlT2YodGhhdCkpO1xuICB9XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UsICcnKSk7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdzdGFjaycsIGNsZWFyRXJyb3JTdGFjayh0aGF0LnN0YWNrLCAxKSk7XG4gIGluc3RhbGxFcnJvckNhdXNlKHRoYXQsIG9wdGlvbnMpO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCBFcnJvcik7XG5lbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoJEFnZ3JlZ2F0ZUVycm9yLCBFcnJvcik7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuLy8gYEFnZ3JlZ2F0ZUVycm9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZ2dyZWdhdGUtZXJyb3ItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjIyMjpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgaXNBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oMzE1Nyk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5MDgpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MjQ0KTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNjEzNSk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NDE3KTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTk0KTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xudmFyIFY4X1ZFUlNJT04gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczOTIpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGO1xudmFyIE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCA9ICdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBpZiAobiArIGxlbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQpO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobiA+PSBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTQ1OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIGNvcHlXaXRoaW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNDgpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMjMpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29weXdpdGhpblxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBjb3B5V2l0aGluOiBjb3B5V2l0aGluXG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygnY29weVdpdGhpbicpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMjkwOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIGZpbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyODUpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMjMpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsbFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBmaWxsOiBmaWxsXG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygnZmlsbCcpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3MzI3OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciAkZmlsdGVyID0gKF9fd2VicGFja19yZXF1aXJlX18oMjA5MikuZmlsdGVyKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTk0KTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEwMzg6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgZnJvbSA9IF9fd2VicGFja19yZXF1aXJlX18oODQ1Nyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MDcyKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2Njk5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciAkaW5jbHVkZXMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygxMzE4KS5pbmNsdWRlcyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIyMyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDY5OTI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2NTYpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMjMpO1xudmFyIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oNzQ5Nyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTkwOSk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1NCk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk2MDA6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MzYxKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2NTYpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzNDEpO1xuXG52YXIgdW4kSm9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgRVMzX1NUUklOR1MgPSBJbmRleGVkT2JqZWN0ICE9IE9iamVjdDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnam9pbicsICcsJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuam9pbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBFUzNfU1RSSU5HUyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIHVuJEpvaW4odG9JbmRleGVkT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjQ5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciAkbWFwID0gKF9fd2VicGFja19yZXF1aXJlX18oMjA5MikubWFwKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTk0KTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDcwNDI6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgaXNBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oMzE1Nyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNDQxMSk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDAwKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjI0NCk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NjU2KTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNjEzNSk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MTEyKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTk0KTtcbnZhciB1biRTbGljZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA2KTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIEFycmF5ID0gZ2xvYmFsLkFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAoaXNDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvcikgJiYgKENvbnN0cnVjdG9yID09PSBBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW4kU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjcwNzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIGFDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTY2Mik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5MDgpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MjQ0KTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM0MCk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xudmFyIGludGVybmFsU29ydCA9IF9fd2VicGFja19yZXF1aXJlX18oNDM2Mik7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IF9fd2VicGFja19yZXF1aXJlX18oOTM0MSk7XG52YXIgRkYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4ODYpO1xudmFyIElFX09SX0VER0UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Nik7XG52YXIgVjggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczOTIpO1xudmFyIFdFQktJVCA9IF9fd2VicGFja19yZXF1aXJlX18oODAwOCk7XG5cbnZhciB0ZXN0ID0gW107XG52YXIgdW4kU29ydCA9IHVuY3VycnlUaGlzKHRlc3Quc29ydCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKHRlc3QucHVzaCk7XG5cbi8vIElFOC1cbnZhciBGQUlMU19PTl9VTkRFRklORUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSk7XG4vLyBWOCBidWdcbnZhciBGQUlMU19PTl9OVUxMID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQobnVsbCk7XG59KTtcbi8vIE9sZCBXZWJLaXRcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29ydCcpO1xuXG52YXIgU1RBQkxFX1NPUlQgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3MDtcbiAgaWYgKEZGICYmIEZGID4gMykgcmV0dXJuO1xuICBpZiAoSUVfT1JfRURHRSkgcmV0dXJuIHRydWU7XG4gIGlmIChXRUJLSVQpIHJldHVybiBXRUJLSVQgPCA2MDM7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgY29kZSwgY2hyLCB2YWx1ZSwgaW5kZXg7XG5cbiAgLy8gZ2VuZXJhdGUgYW4gYXJyYXkgd2l0aCBtb3JlIDUxMiBlbGVtZW50cyAoQ2hha3JhIGFuZCBvbGQgVjggZmFpbHMgb25seSBpbiB0aGlzIGNhc2UpXG4gIGZvciAoY29kZSA9IDY1OyBjb2RlIDwgNzY7IGNvZGUrKykge1xuICAgIGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgNjY6IGNhc2UgNjk6IGNhc2UgNzA6IGNhc2UgNzI6IHZhbHVlID0gMzsgYnJlYWs7XG4gICAgICBjYXNlIDY4OiBjYXNlIDcxOiB2YWx1ZSA9IDQ7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogdmFsdWUgPSAyO1xuICAgIH1cblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ3OyBpbmRleCsrKSB7XG4gICAgICB0ZXN0LnB1c2goeyBrOiBjaHIgKyBpbmRleCwgdjogdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgdGVzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLnYgLSBhLnY7IH0pO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRlc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY2hyID0gdGVzdFtpbmRleF0uay5jaGFyQXQoMCk7XG4gICAgaWYgKHJlc3VsdC5jaGFyQXQocmVzdWx0Lmxlbmd0aCAtIDEpICE9PSBjaHIpIHJlc3VsdCArPSBjaHI7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0ICE9PSAnREdCRUZIQUNJSksnO1xufSk7XG5cbnZhciBGT1JDRUQgPSBGQUlMU19PTl9VTkRFRklORUQgfHwgIUZBSUxTX09OX05VTEwgfHwgIVNUUklDVF9NRVRIT0QgfHwgIVNUQUJMRV9TT1JUO1xuXG52YXIgZ2V0U29ydENvbXBhcmUgPSBmdW5jdGlvbiAoY29tcGFyZWZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIHJldHVybiArY29tcGFyZWZuKHgsIHkpIHx8IDA7XG4gICAgcmV0dXJuIHRvU3RyaW5nKHgpID4gdG9TdHJpbmcoeSkgPyAxIDogLTE7XG4gIH07XG59O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29ydFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIGFDYWxsYWJsZShjb21wYXJlZm4pO1xuXG4gICAgdmFyIGFycmF5ID0gdG9PYmplY3QodGhpcyk7XG5cbiAgICBpZiAoU1RBQkxFX1NPUlQpIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZCA/IHVuJFNvcnQoYXJyYXkpIDogdW4kU29ydChhcnJheSwgY29tcGFyZWZuKTtcblxuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBhcnJheUxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGFycmF5KTtcbiAgICB2YXIgaXRlbXNMZW5ndGgsIGluZGV4O1xuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpbmRleCBpbiBhcnJheSkgcHVzaChpdGVtcywgYXJyYXlbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpbnRlcm5hbFNvcnQoaXRlbXMsIGdldFNvcnRDb21wYXJlKGNvbXBhcmVmbikpO1xuXG4gICAgaXRlbXNMZW5ndGggPSBpdGVtcy5sZW5ndGg7XG4gICAgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgaXRlbXNMZW5ndGgpIGFycmF5W2luZGV4XSA9IGl0ZW1zW2luZGV4KytdO1xuICAgIHdoaWxlIChpbmRleCA8IGFycmF5TGVuZ3RoKSBkZWxldGUgYXJyYXlbaW5kZXgrK107XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1NjE6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDAwKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MzAzKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjI0NCk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5MDgpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNTQxNyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxMzUpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOTQpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NwbGljZScpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjtcbnZhciBNQVhJTVVNX0FMTE9XRURfTEVOR1RIX0VYQ0VFREVEID0gJ01heGltdW0gYWxsb3dlZCBsZW5ndGggZXhjZWVkZWQnO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNwbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zcGxpY2Vcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNwbGljZTogZnVuY3Rpb24gc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCAvKiAsIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFjdHVhbFN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpbnNlcnRDb3VudCwgYWN0dWFsRGVsZXRlQ291bnQsIEEsIGssIGZyb20sIHRvO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgIGluc2VydENvdW50ID0gYWN0dWFsRGVsZXRlQ291bnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IDA7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IGxlbiAtIGFjdHVhbFN0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFyZ3VtZW50c0xlbmd0aCAtIDI7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IG1pbihtYXgodG9JbnRlZ2VyT3JJbmZpbml0eShkZWxldGVDb3VudCksIDApLCBsZW4gLSBhY3R1YWxTdGFydCk7XG4gICAgfVxuICAgIGlmIChsZW4gKyBpbnNlcnRDb3VudCAtIGFjdHVhbERlbGV0ZUNvdW50ID4gTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9MRU5HVEhfRVhDRUVERUQpO1xuICAgIH1cbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBmb3IgKGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgZnJvbSA9IGFjdHVhbFN0YXJ0ICsgaztcbiAgICAgIGlmIChmcm9tIGluIE8pIGNyZWF0ZVByb3BlcnR5KEEsIGssIE9bZnJvbV0pO1xuICAgIH1cbiAgICBBLmxlbmd0aCA9IGFjdHVhbERlbGV0ZUNvdW50O1xuICAgIGlmIChpbnNlcnRDb3VudCA8IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBhY3R1YWxTdGFydDsgayA8IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudDtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQ7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgICB9XG4gICAgICBmb3IgKGsgPSBsZW47IGsgPiBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50OyBrLS0pIGRlbGV0ZSBPW2sgLSAxXTtcbiAgICB9IGVsc2UgaWYgKGluc2VydENvdW50ID4gYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrID4gYWN0dWFsU3RhcnQ7IGstLSkge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50IC0gMTtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQgLSAxO1xuICAgICAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSAwOyBrIDwgaW5zZXJ0Q291bnQ7IGsrKykge1xuICAgICAgT1trICsgYWN0dWFsU3RhcnRdID0gYXJndW1lbnRzW2sgKyAyXTtcbiAgICB9XG4gICAgTy5sZW5ndGggPSBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50O1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjA3ODpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1OTcpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIwKTtcbnZhciBkYXRlVG9QcmltaXRpdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3MDkpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNTExMik7XG5cbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG52YXIgRGF0ZVByb3RvdHlwZSA9IERhdGUucHJvdG90eXBlO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5pZiAoIWhhc093bihEYXRlUHJvdG90eXBlLCBUT19QUklNSVRJVkUpKSB7XG4gIHJlZGVmaW5lKERhdGVQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZGF0ZVRvUHJpbWl0aXZlKTtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODMwOTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4MSk7XG52YXIgRlVOQ1RJT05fTkFNRV9FWElTVFMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2NTMwKS5FWElTVFMpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDMwNzApLmYpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uUHJvdG90eXBlLnRvU3RyaW5nKTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgcmVnRXhwRXhlYyA9IHVuY3VycnlUaGlzKG5hbWVSRS5leGVjKTtcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyBGdW5jdGlvbiBpbnN0YW5jZXMgYC5uYW1lYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi1pbnN0YW5jZXMtbmFtZVxuaWYgKERFU0NSSVBUT1JTICYmICFGVU5DVElPTl9OQU1FX0VYSVNUUykge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTkFNRSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZWdFeHBFeGVjKG5hbWVSRSwgZnVuY3Rpb25Ub1N0cmluZyh0aGlzKSlbMV07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTgzNzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xuXG4vLyBgZ2xvYmFsVGhpc2Agb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdsb2JhbHRoaXNcbiQoeyBnbG9iYWw6IHRydWUgfSwge1xuICBnbG9iYWxUaGlzOiBnbG9iYWxcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNzA2OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwMDMpO1xuXG4vLyBKU09OW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE1MzI6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGNvbGxlY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3MTApO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2MzEpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjcwMzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oODAwMyk7XG5cbi8vIE1hdGhbQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5NjUzOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4MSk7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgaXNGb3JjZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3MDUpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIwKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1OTcpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NTg3KTtcbnZhciBpc1Byb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTc2KTtcbnZhciBpc1N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5MCk7XG52YXIgdG9QcmltaXRpdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1OTMpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gKF9fd2VicGFja19yZXF1aXJlX18oODAwNikuZik7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gKF9fd2VicGFja19yZXF1aXJlX18oMTIzNikuZik7XG52YXIgZGVmaW5lUHJvcGVydHkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygzMDcwKS5mKTtcbnZhciB0aGlzTnVtYmVyVmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2Myk7XG52YXIgdHJpbSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDMxMTEpLnRyaW0pO1xuXG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgTmF0aXZlTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgTnVtYmVyUHJvdG90eXBlID0gTmF0aXZlTnVtYmVyLnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGFycmF5U2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xuXG4vLyBgVG9OdW1lcmljYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9udW1lcmljXG52YXIgdG9OdW1lcmljID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcmltVmFsdWUgPSB0b1ByaW1pdGl2ZSh2YWx1ZSwgJ251bWJlcicpO1xuICByZXR1cm4gdHlwZW9mIHByaW1WYWx1ZSA9PSAnYmlnaW50JyA/IHByaW1WYWx1ZSA6IHRvTnVtYmVyKHByaW1WYWx1ZSk7XG59O1xuXG4vLyBgVG9OdW1iZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b251bWJlclxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnbnVtYmVyJyk7XG4gIHZhciBmaXJzdCwgdGhpcmQsIHJhZGl4LCBtYXhDb2RlLCBkaWdpdHMsIGxlbmd0aCwgaW5kZXgsIGNvZGU7XG4gIGlmIChpc1N5bWJvbChpdCkpIHRocm93IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBudW1iZXInKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSB0cmltKGl0KTtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoaXQsIDApO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGNoYXJDb2RlQXQoaXQsIDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoY2hhckNvZGVBdChpdCwgMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIG9mIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIG9mIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGRpZ2l0cyA9IGFycmF5U2xpY2UoaXQsIDIpO1xuICAgICAgbGVuZ3RoID0gZGlnaXRzLmxlbmd0aDtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb2RlID0gY2hhckNvZGVBdChkaWdpdHMsIGluZGV4KTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbi8vIGBOdW1iZXJgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci1jb25zdHJ1Y3RvclxuaWYgKGlzRm9yY2VkKE5VTUJFUiwgIU5hdGl2ZU51bWJlcignIDBvMScpIHx8ICFOYXRpdmVOdW1iZXIoJzBiMScpIHx8IE5hdGl2ZU51bWJlcignKzB4MScpKSkge1xuICB2YXIgTnVtYmVyV3JhcHBlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogTmF0aXZlTnVtYmVyKHRvTnVtZXJpYyh2YWx1ZSkpO1xuICAgIHZhciBkdW1teSA9IHRoaXM7XG4gICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgcmV0dXJuIGlzUHJvdG90eXBlT2YoTnVtYmVyUHJvdG90eXBlLCBkdW1teSkgJiYgZmFpbHMoZnVuY3Rpb24gKCkgeyB0aGlzTnVtYmVyVmFsdWUoZHVtbXkpOyB9KVxuICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChPYmplY3QobiksIGR1bW15LCBOdW1iZXJXcmFwcGVyKSA6IG47XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBERVNDUklQVE9SUyA/IGdldE93blByb3BlcnR5TmFtZXMoTmF0aXZlTnVtYmVyKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTMjAxNSAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTMjAxNSBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixwYXJzZUZsb2F0LHBhcnNlSW50LCcgK1xuICAgIC8vIEVTTmV4dFxuICAgICdmcm9tU3RyaW5nLHJhbmdlJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhc093bihOYXRpdmVOdW1iZXIsIGtleSA9IGtleXNbal0pICYmICFoYXNPd24oTnVtYmVyV3JhcHBlciwga2V5KSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkoTnVtYmVyV3JhcHBlciwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTmF0aXZlTnVtYmVyLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgTnVtYmVyV3JhcHBlci5wcm90b3R5cGUgPSBOdW1iZXJQcm90b3R5cGU7XG4gIE51bWJlclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE51bWJlcldyYXBwZXI7XG4gIHJlZGVmaW5lKGdsb2JhbCwgTlVNQkVSLCBOdW1iZXJXcmFwcGVyKTtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzI5OTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcblxuLy8gYE51bWJlci5FUFNJTE9OYCBjb25zdGFudFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuZXBzaWxvblxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwge1xuICBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpXG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTE5Mjpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBudW1iZXJJc0Zpbml0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzAyMyk7XG5cbi8vIGBOdW1iZXIuaXNGaW5pdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNmaW5pdGVcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHsgaXNGaW5pdGU6IG51bWJlcklzRmluaXRlIH0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMTYxOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIGlzSW50ZWdyYWxOdW1iZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5ODgpO1xuXG4vLyBgTnVtYmVyLmlzSW50ZWdlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5pc2ludGVnZXJcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNJbnRlZ2VyOiBpc0ludGVncmFsTnVtYmVyXG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjk3Nzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IF9fd2VicGFja19yZXF1aXJlX18oOTMwMyk7XG52YXIgdGhpc051bWJlclZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NjMpO1xudmFyICRyZXBlYXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0MTUpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcblxudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciByZXBlYXQgPSB1bmN1cnJ5VGhpcygkcmVwZWF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciB1biRUb0ZpeGVkID0gdW5jdXJyeVRoaXMoMS4wLnRvRml4ZWQpO1xuXG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xuXG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKGRhdGEsIG4sIGMpIHtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2luZGV4IDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2luZGV4XTtcbiAgICBkYXRhW2luZGV4XSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xuXG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKGRhdGEsIG4pIHtcbiAgdmFyIGluZGV4ID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pbmRleCA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2luZGV4XTtcbiAgICBkYXRhW2luZGV4XSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcblxudmFyIGRhdGFUb1N0cmluZyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHZhciBpbmRleCA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWluZGV4ID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaW5kZXggPT09IDAgfHwgZGF0YVtpbmRleF0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaW5kZXhdKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0KCcwJywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHVuJFRvRml4ZWQoMC4wMDAwOCwgMykgIT09ICcwLjAwMCcgfHxcbiAgICB1biRUb0ZpeGVkKDAuOSwgMCkgIT09ICcxJyB8fFxuICAgIHVuJFRvRml4ZWQoMS4yNTUsIDIpICE9PSAnMS4yNScgfHxcbiAgICB1biRUb0ZpeGVkKDEwMDAwMDAwMDAwMDAwMDAxMjguMCwgMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4Jztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gIHVuJFRvRml4ZWQoe30pO1xufSk7XG5cbi8vIGBOdW1iZXIucHJvdG90eXBlLnRvRml4ZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIucHJvdG90eXBlLnRvZml4ZWRcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIG51bWJlciA9IHRoaXNOdW1iZXJWYWx1ZSh0aGlzKTtcbiAgICB2YXIgZnJhY3REaWdpdHMgPSB0b0ludGVnZXJPckluZmluaXR5KGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbiAgICB2YXIgc2lnbiA9ICcnO1xuICAgIHZhciByZXN1bHQgPSAnMCc7XG4gICAgdmFyIGUsIHosIGosIGs7XG5cbiAgICBpZiAoZnJhY3REaWdpdHMgPCAwIHx8IGZyYWN0RGlnaXRzID4gMjApIHRocm93IFJhbmdlRXJyb3IoJ0luY29ycmVjdCBmcmFjdGlvbiBkaWdpdHMnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChudW1iZXIgIT0gbnVtYmVyKSByZXR1cm4gJ05hTic7XG4gICAgaWYgKG51bWJlciA8PSAtMWUyMSB8fCBudW1iZXIgPj0gMWUyMSkgcmV0dXJuIFN0cmluZyhudW1iZXIpO1xuICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICBzaWduID0gJy0nO1xuICAgICAgbnVtYmVyID0gLW51bWJlcjtcbiAgICB9XG4gICAgaWYgKG51bWJlciA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKG51bWJlciAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyBudW1iZXIgKiBwb3coMiwgLWUsIDEpIDogbnVtYmVyIC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseShkYXRhLCAwLCB6KTtcbiAgICAgICAgaiA9IGZyYWN0RGlnaXRzO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoZGF0YSwgMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkoZGF0YSwgcG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoZGF0YSwgMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoZGF0YSwgMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoZGF0YSwgMSwgMSk7XG4gICAgICAgIGRpdmlkZShkYXRhLCAyKTtcbiAgICAgICAgcmVzdWx0ID0gZGF0YVRvU3RyaW5nKGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoZGF0YSwgMCwgeik7XG4gICAgICAgIG11bHRpcGx5KGRhdGEsIDEgPDwgLWUsIDApO1xuICAgICAgICByZXN1bHQgPSBkYXRhVG9TdHJpbmcoZGF0YSkgKyByZXBlYXQoJzAnLCBmcmFjdERpZ2l0cyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmcmFjdERpZ2l0cyA+IDApIHtcbiAgICAgIGsgPSByZXN1bHQubGVuZ3RoO1xuICAgICAgcmVzdWx0ID0gc2lnbiArIChrIDw9IGZyYWN0RGlnaXRzXG4gICAgICAgID8gJzAuJyArIHJlcGVhdCgnMCcsIGZyYWN0RGlnaXRzIC0gaykgKyByZXN1bHRcbiAgICAgICAgOiBzdHJpbmdTbGljZShyZXN1bHQsIDAsIGsgLSBmcmFjdERpZ2l0cykgKyAnLicgKyBzdHJpbmdTbGljZShyZXN1bHQsIGsgLSBmcmFjdERpZ2l0cykpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBzaWduICsgcmVzdWx0O1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk2MDE6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTc0KTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMzcxOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIEZSRUVaSU5HID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Njc3KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XG52YXIgb25GcmVlemUgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyNDIzKS5vbkZyZWV6ZSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZnJlZXplIC0tIHNhZmVcbnZhciAkZnJlZXplID0gT2JqZWN0LmZyZWV6ZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkZnJlZXplKDEpOyB9KTtcblxuLy8gYE9iamVjdC5mcmVlemVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZnJlZXplXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhRlJFRVpJTkcgfSwge1xuICBmcmVlemU6IGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUob25GcmVlemUoaXQpKSA6IGl0O1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTAwMzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NjU2KTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygxMjM2KS5mKTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc4MSk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBGQUlMU19PTl9QUklNSVRJVkVTO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDkzMzc6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3ODEpO1xudmFyIG93bktleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4ODcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTY1Nik7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjM2KTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNjEzNSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDQ4OTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5MDgpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NTE4KTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1NDQpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc5NDE6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5MDgpO1xudmFyIG5hdGl2ZUtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5NTYpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTUzOTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OTQpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIwKTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMjg4KTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICByZWRlZmluZShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI0Nzk6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgJHZhbHVlcyA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2OTkpLnZhbHVlcyk7XG5cbi8vIGBPYmplY3QudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnZhbHVlc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhPKSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoTyk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3OTIyOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTE2KTtcbnZhciBhQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2NjIpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTIzKTtcbnZhciBwZXJmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTM0KTtcbnZhciBpdGVyYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MDgpO1xuXG4vLyBgUHJvbWlzZS5hbGxTZXR0bGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxzZXR0bGVkXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICBhbGxTZXR0bGVkOiBmdW5jdGlvbiBhbGxTZXR0bGVkKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAncmVqZWN0ZWQnLCByZWFzb246IGVycm9yIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0NjY4OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBhQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2NjIpO1xudmFyIGdldEJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwMDUpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5MTYpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTIzKTtcbnZhciBwZXJmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTM0KTtcbnZhciBpdGVyYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MDgpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc3Mjc6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIElTX1BVUkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MTMpO1xudmFyIE5hdGl2ZVByb21pc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzNjYpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MDA1KTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MTQpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNjcwNyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk0NzgpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIwKTtcblxuLy8gU2FmYXJpIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwODI5XG52YXIgTk9OX0dFTkVSSUMgPSAhIU5hdGl2ZVByb21pc2UgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICBOYXRpdmVQcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddLmNhbGwoeyB0aGVuOiBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmZpbmFsbHlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogTk9OX0dFTkVSSUMgfSwge1xuICAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBnZXRCdWlsdEluKCdQcm9taXNlJykpO1xuICAgIHZhciBpc0Z1bmN0aW9uID0gaXNDYWxsYWJsZShvbkZpbmFsbHkpO1xuICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseSxcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHlcbiAgICApO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjZmluYWxseWAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnZmluYWxseSddO1xuICBpZiAoTmF0aXZlUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZS5wcm90b3R5cGUsICdmaW5hbGx5JywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4Njc0OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBJU19QVVJFID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTEzKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGdldEJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwMDUpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5MTYpO1xudmFyIE5hdGl2ZVByb21pc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzNjYpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIwKTtcbnZhciByZWRlZmluZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjI0OCk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2NzQpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MDAzKTtcbnZhciBzZXRTcGVjaWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MzQwKTtcbnZhciBhQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2NjIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxNCk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XG52YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNTc4Nyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjc4OCk7XG52YXIgaXRlcmF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDA4KTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwNzIpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNjcwNyk7XG52YXIgdGFzayA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDI2MSkuc2V0KTtcbnZhciBtaWNyb3Rhc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5NDgpO1xudmFyIHByb21pc2VSZXNvbHZlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NDc4KTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NDIpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTIzKTtcbnZhciBwZXJmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTM0KTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OTA5KTtcbnZhciBpc0ZvcmNlZCA9IF9fd2VicGFja19yZXF1aXJlX18oNDcwNSk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MTEyKTtcbnZhciBJU19CUk9XU0VSID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODcxKTtcbnZhciBJU19OT0RFID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MjY4KTtcbnZhciBWOF9WRVJTSU9OID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MzkyKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFBST01JU0UpO1xudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlICYmIE5hdGl2ZVByb21pc2UucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2U7XG52YXIgUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xuXG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgTkFUSVZFX1JFSkVDVElPTl9FVkVOVCA9IGlzQ2FsbGFibGUoZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG52YXIgU1VCQ0xBU1NJTkcgPSBmYWxzZTtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbnZhciBGT1JDRUQgPSBpc0ZvcmNlZChQUk9NSVNFLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKFByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSNmaW5hbGx5IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKFY4X1ZFUlNJT04gPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBEZXRlY3QgY29ycmVjdG5lc3Mgb2Ygc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIH07XG4gIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICByZXR1cm4gIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgSVNfQlJPV1NFUiAmJiAhTkFUSVZFX1JFSkVDVElPTl9FVkVOVDtcbn0pO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9IEZPUkNFRCB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKVsnY2F0Y2gnXShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gc3RhdGUucmVhY3Rpb25zO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBvayA9IHN0YXRlLnN0YXRlID09IEZVTEZJTExFRDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBjaGFpbltpbmRleCsrXTtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGNhbGwodGhlbiwgcmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdGF0ZS5yZWFjdGlvbnMgPSBbXTtcbiAgICBzdGF0ZS5ub3RpZmllZCA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhc3RhdGUucmVqZWN0aW9uKSBvblVuaGFuZGxlZChzdGF0ZSk7XG4gIH0pO1xufTtcblxudmFyIGRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAobmFtZSwgcHJvbWlzZSwgcmVhc29uKSB7XG4gIHZhciBldmVudCwgaGFuZGxlcjtcbiAgaWYgKERJU1BBVENIX0VWRU5UKSB7XG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldmVudC5wcm9taXNlID0gcHJvbWlzZTtcbiAgICBldmVudC5yZWFzb24gPSByZWFzb247XG4gICAgZXZlbnQuaW5pdEV2ZW50KG5hbWUsIGZhbHNlLCB0cnVlKTtcbiAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSBldmVudCA9IHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiByZWFzb24gfTtcbiAgaWYgKCFOQVRJVkVfUkVKRUNUSU9OX0VWRU5UICYmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkpIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4oc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZS5mYWNhZGUgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICB2YXIgdGhlbiA9IGlzVGhlbmFibGUodmFsdWUpO1xuICAgIGlmICh0aGVuKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsKHRoZW4sIHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3Qod3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdCh7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIGFDYWxsYWJsZShleGVjdXRvcik7XG4gICAgY2FsbChJbnRlcm5hbCwgdGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKSwgYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaW50ZXJuYWxSZWplY3Qoc3RhdGUsIGVycm9yKTtcbiAgICB9XG4gIH07XG4gIFByb21pc2VQcm90b3R5cGUgPSBQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IFtdLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZWRlZmluZUFsbChQcm9taXNlUHJvdG90eXBlLCB7XG4gICAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgICAgdmFyIHJlYWN0aW9ucyA9IHN0YXRlLnJlYWN0aW9ucztcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gaXNDYWxsYWJsZShvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gSVNfTk9ERSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgc3RhdGUucGFyZW50ID0gdHJ1ZTtcbiAgICAgIHJlYWN0aW9uc1tyZWFjdGlvbnMubGVuZ3RoXSA9IHJlYWN0aW9uO1xuICAgICAgaWYgKHN0YXRlLnN0YXRlICE9IFBFTkRJTkcpIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2UpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFTVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGwobmF0aXZlVGhlbiwgdGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcblxuICAgICAgLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuICAgICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBgLmNvbnN0cnVjdG9yID09PSBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICAgIC8vIG1ha2UgYGluc3RhbmNlb2YgUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgc2V0UHJvdG90eXBlT2YoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuXG5Qcm9taXNlV3JhcHBlciA9IGdldEJ1aWx0SW4oUFJPTUlTRSk7XG5cbi8vIHN0YXRpY3NcbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlamVjdFxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICBjYWxsKGNhcGFiaWxpdHkucmVqZWN0LCB1bmRlZmluZWQsIHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShJU19QVVJFICYmIHRoaXMgPT09IFByb21pc2VXcmFwcGVyID8gUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICAvLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gYFByb21pc2UucmFjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI0MTk6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgZ2V0QnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oNTAwNSk7XG52YXIgYXBwbHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDQpO1xudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwNjUpO1xudmFyIGFDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oOTQ4Myk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2NzApO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpO1xudmFyIGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcblxudmFyIG5hdGl2ZUNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYFJlZmxlY3QuY29uc3RydWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5jb25zdHJ1Y3Rcbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG5cbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbnZhciBGT1JDRUQgPSBORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRztcblxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogRk9SQ0VEIH0sIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUNvbnN0cnVjdG9yKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUNvbnN0cnVjdG9yKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIG5hdGl2ZUNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDkxNjpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgZXhlYyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI2MSk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmV4ZWNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLmV4ZWNcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMDg3OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NzgxKTtcbnZhciBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzA3MCk7XG52YXIgcmVnRXhwRmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwNjYpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBGT1JDRUQgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnKS5nZXQuY2FsbCh7IGRvdEFsbDogdHJ1ZSwgc3RpY2t5OiB0cnVlIH0pICE9PSAnc3knO1xufSk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3NcbmlmIChGT1JDRUQpIG9iamVjdERlZmluZVByb3BlcnR5TW9kdWxlLmYoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZWdFeHBGbGFnc1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk3MTQ6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDY1MzApLlBST1BFUik7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMjApO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjcwKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTc2KTtcbnZhciAkdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNDApO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciByZWdFeHBGbGFncyA9IF9fd2VicGFja19yZXF1aXJlX18oNzA2Nik7XG5cbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgbiRUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xudmFyIGdldEZsYWdzID0gdW5jdXJyeVRoaXMocmVnRXhwRmxhZ3MpO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuJFRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbnZhciBJTkNPUlJFQ1RfTkFNRSA9IFBST1BFUl9GVU5DVElPTl9OQU1FICYmIG4kVG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkc7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKE5PVF9HRU5FUklDIHx8IElOQ09SUkVDVF9OQU1FKSB7XG4gIHJlZGVmaW5lKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgcCA9ICR0b1N0cmluZyhSLnNvdXJjZSk7XG4gICAgdmFyIHJmID0gUi5mbGFncztcbiAgICB2YXIgZiA9ICR0b1N0cmluZyhyZiA9PT0gdW5kZWZpbmVkICYmIGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCBSKSAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSA/IGdldEZsYWdzKFIpIDogcmYpO1xuICAgIHJldHVybiAnLycgKyBwICsgJy8nICsgZjtcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE4OTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgY29sbGVjdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNzcxMCk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYzMSk7XG5cbi8vIGBTZXRgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC1vYmplY3RzXG5jb2xsZWN0aW9uKCdTZXQnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5ODQxOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBjb2RlQXQgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg4NzEwKS5jb2RlQXQpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gY29kZUF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OTUzOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MDIpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwMCk7XG5cbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zdHJpbmctZnJvbWNvZGVwb2ludCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG52YXIgSU5DT1JSRUNUX0xFTkdUSCA9ICEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDE7XG5cbi8vIGBTdHJpbmcuZnJvbUNvZGVQb2ludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5mcm9tY29kZXBvaW50XG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfTEVOR1RIIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gW107XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBjb2RlID0gK2FyZ3VtZW50c1tpKytdO1xuICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwRkZGRikgIT09IGNvZGUpIHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgZWxlbWVudHNbaV0gPSBjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhEODAwLCBjb2RlICUgMHg0MDAgKyAweERDMDApO1xuICAgIH0gcmV0dXJuIGpvaW4oZWxlbWVudHMsICcnKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDIwMjM6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcbnZhciBub3RBUmVnRXhwID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOTI5KTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NDg4KTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM0MCk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5NjQpO1xuXG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhY29ycmVjdElzUmVnRXhwTG9naWMoJ2luY2x1ZGVzJykgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfnN0cmluZ0luZGV4T2YoXG4gICAgICB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKSxcbiAgICAgIHRvU3RyaW5nKG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKSksXG4gICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NzM0OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBjcmVhdGVIVE1MID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MjMwKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNDI5KTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaXRhbGljc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuaXRhbGljc1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2l0YWxpY3MnKSB9LCB7XG4gIGl0YWxpY3M6IGZ1bmN0aW9uIGl0YWxpY3MoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2knLCAnJywgJycpO1xuICB9XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODc4Mzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgY2hhckF0ID0gKF9fd2VicGFja19yZXF1aXJlX18oODcxMCkuY2hhckF0KTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM0MCk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTkwOSk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1NCk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDkyNTQ6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIGNyZWF0ZUhUTUwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyMzApO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0MjkpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5saW5rYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5saW5rXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnbGluaycpIH0sIHtcbiAgbGluazogZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDYzNzM6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3RyaW5nLXByb3RvdHlwZS1tYXRjaGFsbCAtLSBzYWZlICovXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTE2KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNDk5NCk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQ4OCk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0NjYpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzQwKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOTY3MCk7XG52YXIgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oNDMyNik7XG52YXIgaXNQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNzk3Nik7XG52YXIgaXNSZWdFeHAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTApO1xudmFyIHJlZ0V4cEZsYWdzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MDY2KTtcbnZhciBnZXRNZXRob2QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxNzMpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIwKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MTEyKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY3MDcpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUzMCk7XG52YXIgcmVnRXhwRXhlYyA9IF9fd2VicGFja19yZXF1aXJlX18oNzY1MSk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTkwOSk7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oMTkxMyk7XG5cbnZhciBNQVRDSF9BTEwgPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG52YXIgUkVHRVhQX1NUUklORyA9ICdSZWdFeHAgU3RyaW5nJztcbnZhciBSRUdFWFBfU1RSSU5HX0lURVJBVE9SID0gUkVHRVhQX1NUUklORyArICcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUkVHRVhQX1NUUklOR19JVEVSQVRPUik7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGdldEZsYWdzID0gdW5jdXJyeVRoaXMocmVnRXhwRmxhZ3MpO1xudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciB1biRNYXRjaEFsbCA9IHVuY3VycnlUaGlzKCcnLm1hdGNoQWxsKTtcblxudmFyIFdPUktTX1dJVEhfTk9OX0dMT0JBTF9SRUdFWCA9ICEhdW4kTWF0Y2hBbGwgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdW4kTWF0Y2hBbGwoJ2EnLCAvLi8pO1xufSk7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJlZ2V4cCwgc3RyaW5nLCAkZ2xvYmFsLCBmdWxsVW5pY29kZSkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBSRUdFWFBfU1RSSU5HX0lURVJBVE9SLFxuICAgIHJlZ2V4cDogcmVnZXhwLFxuICAgIHN0cmluZzogc3RyaW5nLFxuICAgIGdsb2JhbDogJGdsb2JhbCxcbiAgICB1bmljb2RlOiBmdWxsVW5pY29kZSxcbiAgICBkb25lOiBmYWxzZVxuICB9KTtcbn0sIFJFR0VYUF9TVFJJTkcsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHZhciBSID0gc3RhdGUucmVnZXhwO1xuICB2YXIgUyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIG1hdGNoID0gcmVnRXhwRXhlYyhSLCBTKTtcbiAgaWYgKG1hdGNoID09PSBudWxsKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiBzdGF0ZS5kb25lID0gdHJ1ZSB9O1xuICBpZiAoc3RhdGUuZ2xvYmFsKSB7XG4gICAgaWYgKHRvU3RyaW5nKG1hdGNoWzBdKSA9PT0gJycpIFIubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKFIubGFzdEluZGV4KSwgc3RhdGUudW5pY29kZSk7XG4gICAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBmYWxzZSB9O1xuICB9XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IGZhbHNlIH07XG59KTtcblxudmFyICRtYXRjaEFsbCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuICB2YXIgQywgZmxhZ3NWYWx1ZSwgZmxhZ3MsIG1hdGNoZXIsICRnbG9iYWwsIGZ1bGxVbmljb2RlO1xuICBDID0gc3BlY2llc0NvbnN0cnVjdG9yKFIsIFJlZ0V4cCk7XG4gIGZsYWdzVmFsdWUgPSBSLmZsYWdzO1xuICBpZiAoZmxhZ3NWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCBSKSAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSkge1xuICAgIGZsYWdzVmFsdWUgPSBnZXRGbGFncyhSKTtcbiAgfVxuICBmbGFncyA9IGZsYWdzVmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogdG9TdHJpbmcoZmxhZ3NWYWx1ZSk7XG4gIG1hdGNoZXIgPSBuZXcgQyhDID09PSBSZWdFeHAgPyBSLnNvdXJjZSA6IFIsIGZsYWdzKTtcbiAgJGdsb2JhbCA9ICEhfnN0cmluZ0luZGV4T2YoZmxhZ3MsICdnJyk7XG4gIGZ1bGxVbmljb2RlID0gISF+c3RyaW5nSW5kZXhPZihmbGFncywgJ3UnKTtcbiAgbWF0Y2hlci5sYXN0SW5kZXggPSB0b0xlbmd0aChSLmxhc3RJbmRleCk7XG4gIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsICRnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFdPUktTX1dJVEhfTk9OX0dMT0JBTF9SRUdFWCB9LCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgdmFyIGZsYWdzLCBTLCBtYXRjaGVyLCByeDtcbiAgICBpZiAocmVnZXhwICE9IG51bGwpIHtcbiAgICAgIGlmIChpc1JlZ0V4cChyZWdleHApKSB7XG4gICAgICAgIGZsYWdzID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZVxuICAgICAgICAgID8gcmVnZXhwLmZsYWdzXG4gICAgICAgICAgOiBnZXRGbGFncyhyZWdleHApXG4gICAgICAgICkpO1xuICAgICAgICBpZiAoIX5zdHJpbmdJbmRleE9mKGZsYWdzLCAnZycpKSB0aHJvdyBUeXBlRXJyb3IoJ2AubWF0Y2hBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcycpO1xuICAgICAgfVxuICAgICAgaWYgKFdPUktTX1dJVEhfTk9OX0dMT0JBTF9SRUdFWCkgcmV0dXJuIHVuJE1hdGNoQWxsKE8sIHJlZ2V4cCk7XG4gICAgICBtYXRjaGVyID0gZ2V0TWV0aG9kKHJlZ2V4cCwgTUFUQ0hfQUxMKTtcbiAgICAgIGlmIChtYXRjaGVyID09PSB1bmRlZmluZWQgJiYgSVNfUFVSRSAmJiBjbGFzc29mKHJlZ2V4cCkgPT0gJ1JlZ0V4cCcpIG1hdGNoZXIgPSAkbWF0Y2hBbGw7XG4gICAgICBpZiAobWF0Y2hlcikgcmV0dXJuIGNhbGwobWF0Y2hlciwgcmVnZXhwLCBPKTtcbiAgICB9IGVsc2UgaWYgKFdPUktTX1dJVEhfTk9OX0dMT0JBTF9SRUdFWCkgcmV0dXJuIHVuJE1hdGNoQWxsKE8sIHJlZ2V4cCk7XG4gICAgUyA9IHRvU3RyaW5nKE8pO1xuICAgIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAsICdnJyk7XG4gICAgcmV0dXJuIElTX1BVUkUgPyBjYWxsKCRtYXRjaEFsbCwgcngsIFMpIDogcnhbTUFUQ0hfQUxMXShTKTtcbiAgfVxufSk7XG5cbklTX1BVUkUgfHwgTUFUQ0hfQUxMIGluIFJlZ0V4cFByb3RvdHlwZSB8fCByZWRlZmluZShSZWdFeHBQcm90b3R5cGUsIE1BVENIX0FMTCwgJG1hdGNoQWxsKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDcyMzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjkxNik7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwMDcpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjcwKTtcbnZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oNzQ2Nik7XG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNDApO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0ODgpO1xudmFyIGdldE1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oODE3Myk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTMwKTtcbnZhciByZWdFeHBFeGVjID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NjUxKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIG1hdGNoZXIgPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHJlZ2V4cCwgTUFUQ0gpO1xuICAgICAgcmV0dXJuIG1hdGNoZXIgPyBjYWxsKG1hdGNoZXIsIHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKHRvU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNYXRjaCwgcngsIFMpO1xuXG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG5cbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI0ODE6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgcmVwZWF0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NDE1KTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucmVwZWF0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSB9LCB7XG4gIHJlcGVhdDogcmVwZWF0XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTMwNjpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXBwbHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDQpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5MTYpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IF9fd2VicGFja19yZXF1aXJlX18oNzAwNyk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjcwKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MTQpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkzMDMpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NDY2KTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM0MCk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQ4OCk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTMwKTtcbnZhciBnZXRNZXRob2QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxNzMpO1xudmFyIGdldFN1YnN0aXR1dGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNjQ3KTtcbnZhciByZWdFeHBFeGVjID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NjUxKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xuXG52YXIgUkVQTEFDRSA9IHdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBJRSA8PSAxMSByZXBsYWNlcyAkMCB3aXRoIHRoZSB3aG9sZSBtYXRjaCwgYXMgaWYgaXQgd2FzICQmXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MDI0NjY2L2dldHRpbmctaWUtdG8tcmVwbGFjZS1hLXJlZ2V4LXdpdGgtdGhlLWxpdGVyYWwtc3RyaW5nLTBcbnZhciBSRVBMQUNFX0tFRVBTXyQwID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9wcmVmZXItZXNjYXBlLXJlcGxhY2VtZW50LWRvbGxhci1jaGFyIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiAnYScucmVwbGFjZSgvLi8sICckMCcpID09PSAnJDAnO1xufSkoKTtcblxuLy8gU2FmYXJpIDw9IDEzLjAuMyg/KSBzdWJzdGl0dXRlcyBudGggY2FwdHVyZSB3aGVyZSBuPm0gd2l0aCBhbiBlbXB0eSBzdHJpbmdcbnZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICgvLi9bUkVQTEFDRV0pIHtcbiAgICByZXR1cm4gLy4vW1JFUExBQ0VdKCdhJywgJyQwJykgPT09ICcnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0pKCk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby11c2VsZXNzLWRvbGxhci1yZXBsYWNlbWVudHMgLS0gZmFsc2UgcG9zaXRpdmVcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdyZXBsYWNlJywgZnVuY3Rpb24gKF8sIG5hdGl2ZVJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgVU5TQUZFX1NVQlNUSVRVVEUgPSBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA/ICckJyA6ICckMCc7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHJlcGxhY2VyID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHNlYXJjaFZhbHVlLCBSRVBMQUNFKTtcbiAgICAgIHJldHVybiByZXBsYWNlclxuICAgICAgICA/IGNhbGwocmVwbGFjZXIsIHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogY2FsbChuYXRpdmVSZXBsYWNlLCB0b1N0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHN0cmluZywgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdCh0aGlzKTtcbiAgICAgIHZhciBTID0gdG9TdHJpbmcoc3RyaW5nKTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgcmVwbGFjZVZhbHVlID09ICdzdHJpbmcnICYmXG4gICAgICAgIHN0cmluZ0luZGV4T2YocmVwbGFjZVZhbHVlLCBVTlNBRkVfU1VCU1RJVFVURSkgPT09IC0xICYmXG4gICAgICAgIHN0cmluZ0luZGV4T2YocmVwbGFjZVZhbHVlLCAnJDwnKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVJlcGxhY2UsIHJ4LCBTLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IGlzQ2FsbGFibGUocmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG5cbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcblxuICAgICAgICBwdXNoKHJlc3VsdHMsIHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcblxuICAgICAgICB2YXIgbWF0Y2hTdHIgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG5cbiAgICAgICAgdmFyIG1hdGNoZWQgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlck9ySW5maW5pdHkocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgcHVzaChjYXB0dXJlcywgbWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gY29uY2F0KFttYXRjaGVkXSwgY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSBwdXNoKHJlcGxhY2VyQXJncywgbmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gdG9TdHJpbmcoYXBwbHkocmVwbGFjZVZhbHVlLCB1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBzdHJpbmdTbGljZShTLCBuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcbn0sICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyB8fCAhUkVQTEFDRV9LRUVQU18kMCB8fCBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDMxMjM6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFwcGx5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA0KTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTE2KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwMDcpO1xudmFyIGlzUmVnRXhwID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODUwKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOTY3MCk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQ4OCk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NzA3KTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzApO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NDY2KTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM0MCk7XG52YXIgZ2V0TWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MTczKTtcbnZhciBhcnJheVNsaWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDYpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NjUxKTtcbnZhciByZWdleHBFeGVjID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYxKTtcbnZhciBzdGlja3lIZWxwZXJzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOTk5KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZO1xudmFyIE1BWF9VSU5UMzIgPSAweEZGRkZGRkZGO1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcygkcHVzaCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbi8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuLy8gV2VleCBKUyBoYXMgZnJvemVuIGJ1aWx0LWluIHByb3RvdHlwZXMsIHNvIHVzZSB0cnkgLyBjYXRjaCB3cmFwcGVyXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggIT09IDIgfHwgcmVzdWx0WzBdICE9PSAnYScgfHwgcmVzdWx0WzFdICE9PSAnYic7XG59KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3NwbGl0JywgZnVuY3Rpb24gKFNQTElULCBuYXRpdmVTcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnLnNwbGl0KC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgICd0ZXN0Jy5zcGxpdCgvKD86KS8sIC0xKS5sZW5ndGggIT0gNCB8fFxuICAgICdhYicuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT0gMiB8fFxuICAgICcuJy5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGggIT0gNCB8fFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tZW1wdHktY2FwdHVyaW5nLWdyb3VwLCByZWdleHAvbm8tZW1wdHktZ3JvdXAgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICAnLicuc3BsaXQoLygpKCkvKS5sZW5ndGggPiAxIHx8XG4gICAgJycuc3BsaXQoLy4/LykubGVuZ3RoXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHJldHVybiBbc3RyaW5nXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGwobmF0aXZlU3BsaXQsIHN0cmluZywgc2VwYXJhdG9yLCBsaW0pO1xuICAgICAgfVxuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSBjYWxsKHJlZ2V4cEV4ZWMsIHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weS5sYXN0SW5kZXg7XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgcHVzaChvdXRwdXQsIHN0cmluZ1NsaWNlKHN0cmluZywgbGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZy5sZW5ndGgpIGFwcGx5KCRwdXNoLCBvdXRwdXQsIGFycmF5U2xpY2UobWF0Y2gsIDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dC5sZW5ndGggPj0gbGltKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weS5sYXN0SW5kZXggPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhZXhlYyhzZXBhcmF0b3JDb3B5LCAnJykpIHB1c2gob3V0cHV0LCAnJyk7XG4gICAgICB9IGVsc2UgcHVzaChvdXRwdXQsIHN0cmluZ1NsaWNlKHN0cmluZywgbGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dC5sZW5ndGggPiBsaW0gPyBhcnJheVNsaWNlKG91dHB1dCwgMCwgbGltKSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnLnNwbGl0KHVuZGVmaW5lZCwgMCkubGVuZ3RoKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6IGNhbGwobmF0aXZlU3BsaXQsIHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSBpbnRlcm5hbFNwbGl0ID0gbmF0aXZlU3BsaXQ7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGdldE1ldGhvZChzZXBhcmF0b3IsIFNQTElUKTtcbiAgICAgIHJldHVybiBzcGxpdHRlclxuICAgICAgICA/IGNhbGwoc3BsaXR0ZXIsIHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogY2FsbChpbnRlcm5hbFNwbGl0LCB0b1N0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHN0cmluZywgbGltaXQpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByeCwgUywgbGltaXQsIGludGVybmFsU3BsaXQgIT09IG5hdGl2ZVNwbGl0KTtcblxuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChVTlNVUFBPUlRFRF9ZID8gJ2cnIDogJ3knKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFVOU1VQUE9SVEVEX1kgPyAnXig/OicgKyByeC5zb3VyY2UgKyAnKScgOiByeCwgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFVOU1VQUE9SVEVEX1kgPyAwIDogcTtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgVU5TVVBQT1JURURfWSA/IHN0cmluZ1NsaWNlKFMsIHEpIDogUyk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChVTlNVUFBPUlRFRF9ZID8gcSA6IDApKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHVzaChBLCBzdHJpbmdTbGljZShTLCBwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBwdXNoKEEsIHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHB1c2goQSwgc3RyaW5nU2xpY2UoUywgcCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSwgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQywgVU5TVVBQT1JURURfWSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDczOTc6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIGNyZWF0ZUhUTUwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyMzApO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0MjkpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnN0cmlrZVxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ3N0cmlrZScpIH0sIHtcbiAgc3RyaWtlOiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMjEwOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciAkdHJpbSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDMxMTEpLnRyaW0pO1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwOTEpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNDQzOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzIzNSk7XG5cbi8vIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmFzeW5jaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxODE3OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBgU3ltYm9sLnByb3RvdHlwZS5kZXNjcmlwdGlvbmAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25cblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMDkpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NzgxKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1OTcpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxNCk7XG52YXIgaXNQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNzk3Nik7XG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNDApO1xudmFyIGRlZmluZVByb3BlcnR5ID0gKF9fd2VicGFja19yZXF1aXJlX18oMzA3MCkuZik7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oOTkyMCk7XG5cbnZhciBOYXRpdmVTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9IE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wucHJvdG90eXBlO1xuXG5pZiAoREVTQ1JJUFRPUlMgJiYgaXNDYWxsYWJsZShOYXRpdmVTeW1ib2wpICYmICghKCdkZXNjcmlwdGlvbicgaW4gU3ltYm9sUHJvdG90eXBlKSB8fFxuICAvLyBTYWZhcmkgMTIgYnVnXG4gIE5hdGl2ZVN5bWJvbCgpLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWRcbikpIHtcbiAgdmFyIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSA9IHt9O1xuICAvLyB3cmFwIFN5bWJvbCBjb25zdHJ1Y3RvciBmb3IgY29ycmVjdCB3b3JrIHdpdGggdW5kZWZpbmVkIGRlc2NyaXB0aW9uXG4gIHZhciBTeW1ib2xXcmFwcGVyID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIHZhciBkZXNjcmlwdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgcmVzdWx0ID0gaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpXG4gICAgICA/IG5ldyBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pXG4gICAgICAvLyBpbiBFZGdlIDEzLCBTdHJpbmcoU3ltYm9sKHVuZGVmaW5lZCkpID09PSAnU3ltYm9sKHVuZGVmaW5lZCknXG4gICAgICA6IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyBOYXRpdmVTeW1ib2woKSA6IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbik7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSAnJykgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlW3Jlc3VsdF0gPSB0cnVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhTeW1ib2xXcmFwcGVyLCBOYXRpdmVTeW1ib2wpO1xuICBTeW1ib2xXcmFwcGVyLnByb3RvdHlwZSA9IFN5bWJvbFByb3RvdHlwZTtcbiAgU3ltYm9sUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ltYm9sV3JhcHBlcjtcblxuICB2YXIgTkFUSVZFX1NZTUJPTCA9IFN0cmluZyhOYXRpdmVTeW1ib2woJ3Rlc3QnKSkgPT0gJ1N5bWJvbCh0ZXN0KSc7XG4gIHZhciBzeW1ib2xUb1N0cmluZyA9IHVuY3VycnlUaGlzKFN5bWJvbFByb3RvdHlwZS50b1N0cmluZyk7XG4gIHZhciBzeW1ib2xWYWx1ZU9mID0gdW5jdXJyeVRoaXMoU3ltYm9sUHJvdG90eXBlLnZhbHVlT2YpO1xuICB2YXIgcmVnZXhwID0gL15TeW1ib2xcXCgoLiopXFwpW14pXSskLztcbiAgdmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbiAgdmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG4gIGRlZmluZVByb3BlcnR5KFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgdmFyIHN5bWJvbCA9IHN5bWJvbFZhbHVlT2YodGhpcyk7XG4gICAgICB2YXIgc3RyaW5nID0gc3ltYm9sVG9TdHJpbmcoc3ltYm9sKTtcbiAgICAgIGlmIChoYXNPd24oRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlLCBzeW1ib2wpKSByZXR1cm4gJyc7XG4gICAgICB2YXIgZGVzYyA9IE5BVElWRV9TWU1CT0wgPyBzdHJpbmdTbGljZShzdHJpbmcsIDcsIC0xKSA6IHJlcGxhY2Uoc3RyaW5nLCByZWdleHAsICckMScpO1xuICAgICAgcmV0dXJuIGRlc2MgPT09ICcnID8gdW5kZWZpbmVkIDogZGVzYztcbiAgICB9XG4gIH0pO1xuXG4gICQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgU3ltYm9sOiBTeW1ib2xXcmFwcGVyXG4gIH0pO1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMTY1OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzIzNSk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNTI2OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGdldEJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwMDUpO1xudmFyIGFwcGx5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA0KTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTE2KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oMTkxMyk7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3ODEpO1xudmFyIE5BVElWRV9TWU1CT0wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMyk7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5Nyk7XG52YXIgaXNBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oMzE1Nyk7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjE0KTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTc2KTtcbnZhciBpc1N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5MCk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2NzApO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTA4KTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2NTYpO1xudmFyIHRvUHJvcGVydHlLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5NDgpO1xudmFyICR0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM0MCk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MTE0KTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcbnZhciBvYmplY3RLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTU2KTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MDA2KTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNTYpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNTE4MSk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjM2KTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzA3MCk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyOTYpO1xudmFyIGFycmF5U2xpY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XG52YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMjApO1xudmFyIHNoYXJlZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjMwOSk7XG52YXIgc2hhcmVkS2V5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MjAwKTtcbnZhciBoaWRkZW5LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNTAxKTtcbnZhciB1aWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3MTEpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNTExMik7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjA2MSk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjM1KTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oODAwMyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTkwOSk7XG52YXIgJGZvckVhY2ggPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyMDkyKS5mb3JFYWNoKTtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoU3ltYm9sUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzT3duKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHt9KSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bih0aGlzLCBISURERU4pICYmIGhhc093bih0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKHRoaXMsIHRhZywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICByZWRlZmluZShTeW1ib2xQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgcmVkZWZpbmUoJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgcmVkZWZpbmUoT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBTeW1ib2wuZm9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9ICR0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gJFN5bWJvbChzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfSxcbiAgLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KSB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZCBiZWhhdmlvciB3aXRoIHN5bWJvbHNcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbmlmICgkc3RyaW5naWZ5KSB7XG4gIHZhciBGT1JDRURfSlNPTl9TVFJJTkdJRlkgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN5bWJvbCA9ICRTeW1ib2woKTtcbiAgICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAgIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPSAnW251bGxdJ1xuICAgICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9ICd7fSdcbiAgICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPSAne30nO1xuICB9KTtcblxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX0pTT05fU1RSSU5HSUZZIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyICRyZXBsYWNlciA9IHJlcGxhY2VyO1xuICAgICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmlmICghU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUudmFsdWVPZjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gIHJlZGVmaW5lKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgIC8vIFRPRE86IGltcHJvdmUgaGludCBsb2dpY1xuICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICB9KTtcbn1cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDY2NDk6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjM1KTtcblxuLy8gYFN5bWJvbC50b1ByaW1pdGl2ZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvcHJpbWl0aXZlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDM2ODA6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjM1KTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvc3RyaW5ndGFnXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI5OTA6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzAyKTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDk0KTtcbnZhciAkQXJyYXlDb3B5V2l0aGluID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQ4KTtcblxudmFyIHUkQXJyYXlDb3B5V2l0aGluID0gdW5jdXJyeVRoaXMoJEFycmF5Q29weVdpdGhpbik7XG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmNvcHlXaXRoaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmNvcHl3aXRoaW5cbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2NvcHlXaXRoaW4nLCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgcmV0dXJuIHUkQXJyYXlDb3B5V2l0aGluKGFUeXBlZEFycmF5KHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODkyNzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA5NCk7XG52YXIgJGV2ZXJ5ID0gKF9fd2VicGFja19yZXF1aXJlX18oMjA5MikuZXZlcnkpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5ldmVyeVxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZXZlcnknLCBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGV2ZXJ5KGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzEwNTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA5NCk7XG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjkxNik7XG52YXIgJGZpbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyODUpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZpbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmZpbGxcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2ZpbGwnLCBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykge1xuICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgcmV0dXJuIGNhbGwoXG4gICAgJGZpbGwsXG4gICAgYVR5cGVkQXJyYXkodGhpcyksXG4gICAgdmFsdWUsXG4gICAgbGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCxcbiAgICBsZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkXG4gICk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTAzNTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA5NCk7XG52YXIgJGZpbHRlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTIpLmZpbHRlcik7XG52YXIgZnJvbVNwZWNpZXNBbmRMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMDc0KTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmZpbHRlclxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZmlsdGVyJywgZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHZhciBsaXN0ID0gJGZpbHRlcihhVHlwZWRBcnJheSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICByZXR1cm4gZnJvbVNwZWNpZXNBbmRMaXN0KHRoaXMsIGxpc3QpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDcxNzQ6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTQpO1xudmFyICRmaW5kSW5kZXggPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyMDkyKS5maW5kSW5kZXgpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuZmluZGluZGV4XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaW5kSW5kZXgnLCBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZpbmRJbmRleChhVHlwZWRBcnJheSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDM0NTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA5NCk7XG52YXIgJGZpbmQgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyMDkyKS5maW5kKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5maW5kXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaW5kJywgZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZmluZChhVHlwZWRBcnJheSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDE5Nzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4NDMpO1xuXG4vLyBgRmxvYXQzMkFycmF5YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10eXBlZGFycmF5LW9iamVjdHNcbmNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcignRmxvYXQzMicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2NDk1OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oOTg0Myk7XG5cbi8vIGBGbG9hdDY0QXJyYXlgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXR5cGVkYXJyYXktb2JqZWN0c1xuY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKCdGbG9hdDY0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI4NDY6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTQpO1xudmFyICRmb3JFYWNoID0gKF9fd2VicGFja19yZXF1aXJlX18oMjA5MikuZm9yRWFjaCk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuZm9yZWFjaFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZm9yRWFjaCcsIGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgJGZvckVhY2goYVR5cGVkQXJyYXkodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4MTQ1OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTID0gX193ZWJwYWNrX3JlcXVpcmVfXygzODMyKTtcbnZhciBleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kID0gKF9fd2VicGFja19yZXF1aXJlX18oMjA5NCkuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCk7XG52YXIgdHlwZWRBcnJheUZyb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczMjEpO1xuXG4vLyBgJVR5cGVkQXJyYXklLmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUuZnJvbVxuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCgnZnJvbScsIHR5cGVkQXJyYXlGcm9tLCBUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDczMTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA5NCk7XG52YXIgJGluY2x1ZGVzID0gKF9fd2VicGFja19yZXF1aXJlX18oMTMxOCkuaW5jbHVkZXMpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5pbmNsdWRlc1xuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnaW5jbHVkZXMnLCBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gIHJldHVybiAkaW5jbHVkZXMoYVR5cGVkQXJyYXkodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3MjA5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDk0KTtcbnZhciAkaW5kZXhPZiA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMTgpLmluZGV4T2YpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmluZGV4b2ZcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2luZGV4T2YnLCBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgcmV0dXJuICRpbmRleE9mKGFUeXBlZEFycmF5KHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTEwOTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4NDMpO1xuXG4vLyBgSW50MTZBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ0ludDE2JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MTI1OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oOTg0Myk7XG5cbi8vIGBJbnQzMkFycmF5YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10eXBlZGFycmF5LW9iamVjdHNcbmNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcignSW50MzInLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDcxNDU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5ODQzKTtcblxuLy8gYEludDhBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ0ludDgnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjMxOTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2NTMwKS5QUk9QRVIpO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTQpO1xudmFyIEFycmF5SXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTkyKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxMTIpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xudmFyIGFycmF5VmFsdWVzID0gdW5jdXJyeVRoaXMoQXJyYXlJdGVyYXRvcnMudmFsdWVzKTtcbnZhciBhcnJheUtleXMgPSB1bmN1cnJ5VGhpcyhBcnJheUl0ZXJhdG9ycy5rZXlzKTtcbnZhciBhcnJheUVudHJpZXMgPSB1bmN1cnJ5VGhpcyhBcnJheUl0ZXJhdG9ycy5lbnRyaWVzKTtcbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcbnZhciBuYXRpdmVUeXBlZEFycmF5SXRlcmF0b3IgPSBVaW50OEFycmF5ICYmIFVpbnQ4QXJyYXkucHJvdG90eXBlW0lURVJBVE9SXTtcblxudmFyIFBST1BFUl9BUlJBWV9WQUxVRVNfTkFNRSA9ICEhbmF0aXZlVHlwZWRBcnJheUl0ZXJhdG9yICYmIG5hdGl2ZVR5cGVkQXJyYXlJdGVyYXRvci5uYW1lID09PSAndmFsdWVzJztcblxudmFyIHR5cGVkQXJyYXlWYWx1ZXMgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gIHJldHVybiBhcnJheVZhbHVlcyhhVHlwZWRBcnJheSh0aGlzKSk7XG59O1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5lbnRyaWVzXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdlbnRyaWVzJywgZnVuY3Rpb24gZW50cmllcygpIHtcbiAgcmV0dXJuIGFycmF5RW50cmllcyhhVHlwZWRBcnJheSh0aGlzKSk7XG59KTtcbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmtleXNcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2tleXMnLCBmdW5jdGlvbiBrZXlzKCkge1xuICByZXR1cm4gYXJyYXlLZXlzKGFUeXBlZEFycmF5KHRoaXMpKTtcbn0pO1xuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS52YWx1ZXNcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3ZhbHVlcycsIHR5cGVkQXJyYXlWYWx1ZXMsIFBST1BFUl9GVU5DVElPTl9OQU1FICYmICFQUk9QRVJfQVJSQVlfVkFMVUVTX05BTUUpO1xuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLUBAaXRlcmF0b3JcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoSVRFUkFUT1IsIHR5cGVkQXJyYXlWYWx1ZXMsIFBST1BFUl9GVU5DVElPTl9OQU1FICYmICFQUk9QRVJfQVJSQVlfVkFMVUVTX05BTUUpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4ODY3OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDk0KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcbnZhciAkam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5qb2luXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdqb2luJywgZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgcmV0dXJuICRqb2luKGFUeXBlZEFycmF5KHRoaXMpLCBzZXBhcmF0b3IpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc3ODk6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTQpO1xudmFyIGFwcGx5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA0KTtcbnZhciAkbGFzdEluZGV4T2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1ODMpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmxhc3RJbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5sYXN0aW5kZXhvZlxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnbGFzdEluZGV4T2YnLCBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICByZXR1cm4gYXBwbHkoJGxhc3RJbmRleE9mLCBhVHlwZWRBcnJheSh0aGlzKSwgbGVuZ3RoID4gMSA/IFtzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV1dIDogW3NlYXJjaEVsZW1lbnRdKTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNzM5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDk0KTtcbnZhciAkbWFwID0gKF9fd2VicGFja19yZXF1aXJlX18oMjA5MikubWFwKTtcbnZhciB0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MzA0KTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLm1hcFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnbWFwJywgZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJG1hcChhVHlwZWRBcnJheSh0aGlzKSwgbWFwZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyAodHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihPKSkobGVuZ3RoKTtcbiAgfSk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDQ4Mzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA5NCk7XG52YXIgJHJlZHVjZVJpZ2h0ID0gKF9fd2VicGFja19yZXF1aXJlX18oMzY3MSkucmlnaHQpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnJlZHVjZVJpY2h0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgncmVkdWNlUmlnaHQnLCBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICByZXR1cm4gJHJlZHVjZVJpZ2h0KGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBsZW5ndGgsIGxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDkzNjg6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTQpO1xudmFyICRyZWR1Y2UgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygzNjcxKS5sZWZ0KTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnJlZHVjZVxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgncmVkdWNlJywgZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHJldHVybiAkcmVkdWNlKGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBsZW5ndGgsIGxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDIwNTY6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTQpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5yZXZlcnNlXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdyZXZlcnNlJywgZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIgbGVuZ3RoID0gYVR5cGVkQXJyYXkodGhhdCkubGVuZ3RoO1xuICB2YXIgbWlkZGxlID0gZmxvb3IobGVuZ3RoIC8gMik7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciB2YWx1ZTtcbiAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICB0aGF0W2luZGV4KytdID0gdGhhdFstLWxlbmd0aF07XG4gICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gIH0gcmV0dXJuIHRoYXQ7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzQ2Mjpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDk0KTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjI0NCk7XG52YXIgdG9PZmZzZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1OTApO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTA4KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG5cbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby10eXBlZC1hcnJheXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgbmV3IEludDhBcnJheSgxKS5zZXQoe30pO1xufSk7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnNldGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuc2V0XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdzZXQnLCBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gIGFUeXBlZEFycmF5KHRoaXMpO1xuICB2YXIgb2Zmc2V0ID0gdG9PZmZzZXQoYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDEpO1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc3JjKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgaWYgKGxlbiArIG9mZnNldCA+IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoJyk7XG4gIHdoaWxlIChpbmRleCA8IGxlbikgdGhpc1tvZmZzZXQgKyBpbmRleF0gPSBzcmNbaW5kZXgrK107XG59LCBGT1JDRUQpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2Nzg6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTQpO1xudmFyIHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzMDQpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MjkzKTtcbnZhciBhcnJheVNsaWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDYpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby10eXBlZC1hcnJheXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgbmV3IEludDhBcnJheSgxKS5zbGljZSgpO1xufSk7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5zbGljZVxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnc2xpY2UnLCBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gIHZhciBsaXN0ID0gYXJyYXlTbGljZShhVHlwZWRBcnJheSh0aGlzKSwgc3RhcnQsIGVuZCk7XG4gIHZhciBDID0gdHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gbmV3IEMobGVuZ3RoKTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0sIEZPUkNFRCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc0NjI6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTQpO1xudmFyICRzb21lID0gKF9fd2VicGFja19yZXF1aXJlX18oMjA5Mikuc29tZSk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuc29tZVxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnc29tZScsIGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRzb21lKGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzgyNDpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyOTMpO1xudmFyIGFDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTY2Mik7XG52YXIgaW50ZXJuYWxTb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MzYyKTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDk0KTtcbnZhciBGRiA9IF9fd2VicGFja19yZXF1aXJlX18oODg4Nik7XG52YXIgSUVfT1JfRURHRSA9IF9fd2VicGFja19yZXF1aXJlX18oMjU2KTtcbnZhciBWOCA9IF9fd2VicGFja19yZXF1aXJlX18oNzM5Mik7XG52YXIgV0VCS0lUID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MDA4KTtcblxudmFyIEFycmF5ID0gZ2xvYmFsLkFycmF5O1xudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyIFVpbnQxNkFycmF5ID0gZ2xvYmFsLlVpbnQxNkFycmF5O1xudmFyIHVuJFNvcnQgPSBVaW50MTZBcnJheSAmJiB1bmN1cnJ5VGhpcyhVaW50MTZBcnJheS5wcm90b3R5cGUuc29ydCk7XG5cbi8vIFdlYktpdFxudmFyIEFDQ0VQVF9JTkNPUlJFQ1RfQVJHVU1FTlRTID0gISF1biRTb3J0ICYmICEoZmFpbHMoZnVuY3Rpb24gKCkge1xuICB1biRTb3J0KG5ldyBVaW50MTZBcnJheSgyKSwgbnVsbCk7XG59KSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHVuJFNvcnQobmV3IFVpbnQxNkFycmF5KDIpLCB7fSk7XG59KSk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICEhdW4kU29ydCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3NDtcbiAgaWYgKEZGKSByZXR1cm4gRkYgPCA2NztcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAyO1xuXG4gIHZhciBhcnJheSA9IG5ldyBVaW50MTZBcnJheSg1MTYpO1xuICB2YXIgZXhwZWN0ZWQgPSBBcnJheSg1MTYpO1xuICB2YXIgaW5kZXgsIG1vZDtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA1MTY7IGluZGV4KyspIHtcbiAgICBtb2QgPSBpbmRleCAlIDQ7XG4gICAgYXJyYXlbaW5kZXhdID0gNTE1IC0gaW5kZXg7XG4gICAgZXhwZWN0ZWRbaW5kZXhdID0gaW5kZXggLSAyICogbW9kICsgMztcbiAgfVxuXG4gIHVuJFNvcnQoYXJyYXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIChhIC8gNCB8IDApIC0gKGIgLyA0IHwgMCk7XG4gIH0pO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDUxNjsgaW5kZXgrKykge1xuICAgIGlmIChhcnJheVtpbmRleF0gIT09IGV4cGVjdGVkW2luZGV4XSkgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuXG52YXIgZ2V0U29ydENvbXBhcmUgPSBmdW5jdGlvbiAoY29tcGFyZWZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmICh5ICE9PSB5KSByZXR1cm4gLTE7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoeCAhPT0geCkgcmV0dXJuIDE7XG4gICAgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkgcmV0dXJuIDEgLyB4ID4gMCAmJiAxIC8geSA8IDAgPyAxIDogLTE7XG4gICAgcmV0dXJuIHggPiB5O1xuICB9O1xufTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuc29ydFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnc29ydCcsIGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG4gIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIHVuJFNvcnQodGhpcywgY29tcGFyZWZuKTtcblxuICByZXR1cm4gaW50ZXJuYWxTb3J0KGFUeXBlZEFycmF5KHRoaXMpLCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcbn0sICFTVEFCTEVfU09SVCB8fCBBQ0NFUFRfSU5DT1JSRUNUX0FSR1VNRU5UUyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDUwMjE6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOTQpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NDY2KTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MDApO1xudmFyIHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzMDQpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnN1YmFycmF5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5zdWJhcnJheVxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnc3ViYXJyYXknLCBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gIHZhciBPID0gYVR5cGVkQXJyYXkodGhpcyk7XG4gIHZhciBsZW5ndGggPSBPLmxlbmd0aDtcbiAgdmFyIGJlZ2luSW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbmd0aCk7XG4gIHZhciBDID0gdHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihPKTtcbiAgcmV0dXJuIG5ldyBDKFxuICAgIE8uYnVmZmVyLFxuICAgIE8uYnl0ZU9mZnNldCArIGJlZ2luSW5kZXggKiBPLkJZVEVTX1BFUl9FTEVNRU5ULFxuICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gYmVnaW5JbmRleClcbiAgKTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOTc0OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIGFwcGx5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA0KTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDk0KTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgYXJyYXlTbGljZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA2KTtcblxudmFyIEludDhBcnJheSA9IGdsb2JhbC5JbnQ4QXJyYXk7XG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG52YXIgJHRvTG9jYWxlU3RyaW5nID0gW10udG9Mb2NhbGVTdHJpbmc7XG5cbi8vIGlPUyBTYWZhcmkgNi54IGZhaWxzIGhlcmVcbnZhciBUT19MT0NBTEVfU1RSSU5HX0JVRyA9ICEhSW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgJHRvTG9jYWxlU3RyaW5nLmNhbGwobmV3IEludDhBcnJheSgxKSk7XG59KTtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBJbnQ4QXJyYXkoWzEsIDJdKS50b0xvY2FsZVN0cmluZygpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgSW50OEFycmF5LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG59KTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnRvbG9jYWxlc3RyaW5nXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCd0b0xvY2FsZVN0cmluZycsIGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICByZXR1cm4gYXBwbHkoXG4gICAgJHRvTG9jYWxlU3RyaW5nLFxuICAgIFRPX0xPQ0FMRV9TVFJJTkdfQlVHID8gYXJyYXlTbGljZShhVHlwZWRBcnJheSh0aGlzKSkgOiBhVHlwZWRBcnJheSh0aGlzKSxcbiAgICBhcnJheVNsaWNlKGFyZ3VtZW50cylcbiAgKTtcbn0sIEZPUkNFRCk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDUwMTY6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyMDk0KS5leHBvcnRUeXBlZEFycmF5TWV0aG9kKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI5Myk7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODU0KTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwMik7XG5cbnZhciBVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXk7XG52YXIgVWludDhBcnJheVByb3RvdHlwZSA9IFVpbnQ4QXJyYXkgJiYgVWludDhBcnJheS5wcm90b3R5cGUgfHwge307XG52YXIgYXJyYXlUb1N0cmluZyA9IFtdLnRvU3RyaW5nO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxuaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgYXJyYXlUb1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBqb2luKHRoaXMpO1xuICB9O1xufVxuXG52YXIgSVNfTk9UX0FSUkFZX01FVEhPRCA9IFVpbnQ4QXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZztcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnRvc3RyaW5nXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCd0b1N0cmluZycsIGFycmF5VG9TdHJpbmcsIElTX05PVF9BUlJBWV9NRVRIT0QpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4MjU1OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oOTg0Myk7XG5cbi8vIGBVaW50MTZBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ1VpbnQxNicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDkxMzU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5ODQzKTtcblxuLy8gYFVpbnQzMkFycmF5YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10eXBlZGFycmF5LW9iamVjdHNcbmNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcignVWludDMyJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjQ3Mjpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4NDMpO1xuXG4vLyBgVWludDhBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ1VpbnQ4JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5NzQzOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oOTg0Myk7XG5cbi8vIGBVaW50OENsYW1wZWRBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ1VpbnQ4JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59LCB0cnVlKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODYyODpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDkxNzApO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1NzQzOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbl9fd2VicGFja19yZXF1aXJlX18oNTgzNyk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDczMTQ6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuX193ZWJwYWNrX3JlcXVpcmVfXyg3OTIyKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjI5MDpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ2NjgpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NDc5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTA5KTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oODUyMyk7XG52YXIgcGVyZm9ybSA9IF9fd2VicGFja19yZXF1aXJlX18oMjUzNCk7XG5cbi8vIGBQcm9taXNlLnRyeWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDM3Mjg6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuX193ZWJwYWNrX3JlcXVpcmVfXyg2MzczKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDc0Nzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4NTQpO1xudmFyIERPTUl0ZXJhYmxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oODMyNCk7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTA5KTtcbnZhciBmb3JFYWNoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTMzKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4ODApO1xuXG52YXIgaGFuZGxlUHJvdG90eXBlID0gZnVuY3Rpb24gKENvbGxlY3Rpb25Qcm90b3R5cGUpIHtcbiAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIENvbGxlY3Rpb25Qcm90b3R5cGUuZm9yRWFjaCAhPT0gZm9yRWFjaCkgdHJ5IHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgJ2ZvckVhY2gnLCBmb3JFYWNoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBDb2xsZWN0aW9uUHJvdG90eXBlLmZvckVhY2ggPSBmb3JFYWNoO1xuICB9XG59O1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIGlmIChET01JdGVyYWJsZXNbQ09MTEVDVElPTl9OQU1FXSkge1xuICAgIGhhbmRsZVByb3RvdHlwZShnbG9iYWxbQ09MTEVDVElPTl9OQU1FXSAmJiBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXS5wcm90b3R5cGUpO1xuICB9XG59XG5cbmhhbmRsZVByb3RvdHlwZShET01Ub2tlbkxpc3RQcm90b3R5cGUpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOTQ4OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNzg1NCk7XG52YXIgRE9NSXRlcmFibGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MzI0KTtcbnZhciBET01Ub2tlbkxpc3RQcm90b3R5cGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1MDkpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OTkyKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4ODApO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNTExMik7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvck1ldGhvZHMudmFsdWVzO1xuXG52YXIgaGFuZGxlUHJvdG90eXBlID0gZnVuY3Rpb24gKENvbGxlY3Rpb25Qcm90b3R5cGUsIENPTExFQ1RJT05fTkFNRSkge1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSkge1xuICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gQXJyYXlWYWx1ZXMpIHRyeSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gPSBBcnJheVZhbHVlcztcbiAgICB9XG4gICAgaWYgKCFDb2xsZWN0aW9uUHJvdG90eXBlW1RPX1NUUklOR19UQUddKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgICB9XG4gICAgaWYgKERPTUl0ZXJhYmxlc1tDT0xMRUNUSU9OX05BTUVdKSBmb3IgKHZhciBNRVRIT0RfTkFNRSBpbiBBcnJheUl0ZXJhdG9yTWV0aG9kcykge1xuICAgICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gIT09IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSkgdHJ5IHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIE1FVEhPRF9OQU1FLCBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gPSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV07XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIGhhbmRsZVByb3RvdHlwZShnbG9iYWxbQ09MTEVDVElPTl9OQU1FXSAmJiBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXS5wcm90b3R5cGUsIENPTExFQ1RJT05fTkFNRSk7XG59XG5cbmhhbmRsZVByb3RvdHlwZShET01Ub2tlbkxpc3RQcm90b3R5cGUsICdET01Ub2tlbkxpc3QnKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzc1Mzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwOSk7XG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjkxNik7XG5cbi8vIGBVUkwucHJvdG90eXBlLnRvSlNPTmAgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdG9qc29uXG4kKHsgdGFyZ2V0OiAnVVJMJywgcHJvdG86IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4gY2FsbChVUkwucHJvdG90eXBlLnRvU3RyaW5nLCB0aGlzKTtcbiAgfVxufSk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDExNTA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHBhcmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNzYzMyk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM5NDgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjUxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBvYmplY3RLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjE1KTtcbnZhciBpc0FyZ3VtZW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMjU4NCk7XG52YXIgaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwOSk7XG52YXIgaXNSZWdleCA9IF9fd2VicGFja19yZXF1aXJlX18oODQyMCk7XG52YXIgZmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4NDcpO1xudmFyIGlzRGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oODkyMyk7XG5cbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcblxuZnVuY3Rpb24gZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAob3B0cy5zdHJpY3QgPyBpcyhhY3R1YWwsIGV4cGVjdGVkKSA6IGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIDcuMy4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JywgZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkIHx8ICh0eXBlb2YgYWN0dWFsICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgZXhwZWN0ZWQgIT09ICdvYmplY3QnKSkge1xuICAgIHJldHVybiBvcHRzLnN0cmljdCA/IGlzKGFjdHVhbCwgZXhwZWN0ZWQpIDogYWN0dWFsID09IGV4cGVjdGVkO1xuICB9XG5cbiAgLypcbiAgICogNy40LiBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gICAqIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAgKiB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gICAqIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgICogY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgICogYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgcmV0dXJuIG9iakVxdWl2KGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZE9yTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIoeCkge1xuICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnIHx8IHR5cGVvZiB4Lmxlbmd0aCAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiB4LmNvcHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHguc2xpY2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHgubGVuZ3RoID4gMCAmJiB0eXBlb2YgeFswXSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG9iakVxdWl2KGEsIGIsIG9wdHMpIHtcbiAgLyogZXNsaW50IG1heC1zdGF0ZW1lbnRzOiBbMiwgNTBdICovXG4gIHZhciBpLCBrZXk7XG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChpc1VuZGVmaW5lZE9yTnVsbChhKSB8fCBpc1VuZGVmaW5lZE9yTnVsbChiKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAvLyBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuXG4gIGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgaWYgKGlzQXJndW1lbnRzKGEpICE9PSBpc0FyZ3VtZW50cyhiKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICB2YXIgYUlzUmVnZXggPSBpc1JlZ2V4KGEpO1xuICB2YXIgYklzUmVnZXggPSBpc1JlZ2V4KGIpO1xuICBpZiAoYUlzUmVnZXggIT09IGJJc1JlZ2V4KSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAoYUlzUmVnZXggfHwgYklzUmVnZXgpIHtcbiAgICByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGZsYWdzKGEpID09PSBmbGFncyhiKTtcbiAgfVxuXG4gIGlmIChpc0RhdGUoYSkgJiYgaXNEYXRlKGIpKSB7XG4gICAgcmV0dXJuIGdldFRpbWUuY2FsbChhKSA9PT0gZ2V0VGltZS5jYWxsKGIpO1xuICB9XG5cbiAgdmFyIGFJc0J1ZmZlciA9IGlzQnVmZmVyKGEpO1xuICB2YXIgYklzQnVmZmVyID0gaXNCdWZmZXIoYik7XG4gIGlmIChhSXNCdWZmZXIgIT09IGJJc0J1ZmZlcikgeyByZXR1cm4gZmFsc2U7IH1cbiAgaWYgKGFJc0J1ZmZlciB8fCBiSXNCdWZmZXIpIHsgLy8gJiYgd291bGQgd29yayB0b28sIGJlY2F1c2UgYm90aCBhcmUgdHJ1ZSBvciBib3RoIGZhbHNlIGhlcmVcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYVtpXSAhPT0gYltpXSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIHRyeSB7XG4gICAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgICB2YXIga2IgPSBvYmplY3RLZXlzKGIpO1xuICB9IGNhdGNoIChlKSB7IC8vIGhhcHBlbnMgd2hlbiBvbmUgaXMgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgdGhlIG90aGVyIGlzbid0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoa2V5cyBpbmNvcnBvcmF0ZXMgaGFzT3duUHJvcGVydHkpXG4gIGlmIChrYS5sZW5ndGggIT09IGtiLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAvLyB0aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vIH5+fmNoZWFwIGtleSB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGthW2ldICE9IGtiW2ldKSB7IHJldHVybiBmYWxzZTsgfVxuICB9XG4gIC8vIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kIH5+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIWRlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgb3B0cykpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWVwRXF1YWw7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDQyODk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMTUpO1xudmFyIGhhc1N5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2woJ2ZvbycpID09PSAnc3ltYm9sJztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyIG9yaWdEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcblx0cmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0ci5jYWxsKGZuKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQ0KSgpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IG9yaWdEZWZpbmVQcm9wZXJ0eSAmJiBoYXNQcm9wZXJ0eURlc2NyaXB0b3JzO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCB2YWx1ZSwgcHJlZGljYXRlKSB7XG5cdGlmIChuYW1lIGluIG9iamVjdCAmJiAoIWlzRnVuY3Rpb24ocHJlZGljYXRlKSB8fCAhcHJlZGljYXRlKCkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFtuYW1lXSA9IHZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdH1cbn07XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKG9iamVjdCwgbWFwKSB7XG5cdHZhciBwcmVkaWNhdGVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB7fTtcblx0dmFyIHByb3BzID0ga2V5cyhtYXApO1xuXHRpZiAoaGFzU3ltYm9scykge1xuXHRcdHByb3BzID0gY29uY2F0LmNhbGwocHJvcHMsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobWFwKSk7XG5cdH1cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcHNbaV0sIG1hcFtwcm9wc1tpXV0sIHByZWRpY2F0ZXNbcHJvcHNbaV1dKTtcblx0fVxufTtcblxuZGVmaW5lUHJvcGVydGllcy5zdXBwb3J0c0Rlc2NyaXB0b3JzID0gISFzdXBwb3J0c0Rlc2NyaXB0b3JzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnRpZXM7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDgwOTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb2RlIHJlZmFjdG9yZWQgZnJvbSBNb3ppbGxhIERldmVsb3BlciBOZXR3b3JrOlxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuICovXG5cblxuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBmaXJzdFNvdXJjZSkge1xuICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgZmlyc3QgYXJndW1lbnQgdG8gb2JqZWN0Jyk7XG4gIH1cblxuICB2YXIgdG8gPSBPYmplY3QodGFyZ2V0KTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbmV4dFNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICBpZiAobmV4dFNvdXJjZSA9PT0gdW5kZWZpbmVkIHx8IG5leHRTb3VyY2UgPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBrZXlzQXJyYXkgPSBPYmplY3Qua2V5cyhPYmplY3QobmV4dFNvdXJjZSkpO1xuICAgIGZvciAodmFyIG5leHRJbmRleCA9IDAsIGxlbiA9IGtleXNBcnJheS5sZW5ndGg7IG5leHRJbmRleCA8IGxlbjsgbmV4dEluZGV4KyspIHtcbiAgICAgIHZhciBuZXh0S2V5ID0ga2V5c0FycmF5W25leHRJbmRleF07XG4gICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmV4dFNvdXJjZSwgbmV4dEtleSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkICYmIGRlc2MuZW51bWVyYWJsZSkge1xuICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0bztcbn1cblxuZnVuY3Rpb24gcG9seWZpbGwoKSB7XG4gIGlmICghT2JqZWN0LmFzc2lnbikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QsICdhc3NpZ24nLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGFzc2lnblxuICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NpZ246IGFzc2lnbixcbiAgcG9seWZpbGw6IHBvbHlmaWxsXG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3MTg3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5cblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjUzNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgX19fRVhQT1NFX0xPQURFUl9JTVBPUlRfX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyNzUpO1xudmFyIF9fX0VYUE9TRV9MT0FERVJfR0VUX0dMT0JBTF9USElTX19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NjcyKTtcbnZhciBfX19FWFBPU0VfTE9BREVSX0dMT0JBTF9USElTX19fID0gX19fRVhQT1NFX0xPQURFUl9HRVRfR0xPQkFMX1RISVNfX187XG5pZiAodHlwZW9mIF9fX0VYUE9TRV9MT0FERVJfR0xPQkFMX1RISVNfX19bXCJwZGZNYWtlXCJdID09PSAndW5kZWZpbmVkJykgX19fRVhQT1NFX0xPQURFUl9HTE9CQUxfVEhJU19fX1tcInBkZk1ha2VcIl0gPSBfX19FWFBPU0VfTE9BREVSX0lNUE9SVF9fXztcbm1vZHVsZS5leHBvcnRzID0gX19fRVhQT1NFX0xPQURFUl9JTVBPUlRfX187XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc2NzI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcztcbiAgfVxuXG4gIHZhciBnO1xuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZyA9IHRoaXMgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfSAvLyBUaGlzIHdvcmtzIGlmIHRoZSBzZWxmIHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblxuXG4gICAgaWYgKHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9IC8vIFRoaXMgd29ya3MgaWYgdGhlIGdsb2JhbCByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cblxuICAgIGlmICh0eXBlb2YgX193ZWJwYWNrX3JlcXVpcmVfXy5nICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnO1xufSgpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDAyOTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNTMyMCk7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm9yRWFjaEFycmF5ID0gZnVuY3Rpb24gZm9yRWFjaEFycmF5KGFycmF5LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksIGkpKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaFN0cmluZyA9IGZ1bmN0aW9uIGZvckVhY2hTdHJpbmcoc3RyaW5nLCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc3RyaW5nLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIC8vIG5vIHN1Y2ggdGhpbmcgYXMgYSBzcGFyc2Ugc3RyaW5nLlxuICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlcmF0b3Ioc3RyaW5nLmNoYXJBdChpKSwgaSwgc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIHN0cmluZy5jaGFyQXQoaSksIGksIHN0cmluZyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaE9iamVjdCA9IGZ1bmN0aW9uIGZvckVhY2hPYmplY3Qob2JqZWN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBrIGluIG9iamVjdCkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrXSwgaywgb2JqZWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChyZWNlaXZlciwgb2JqZWN0W2tdLCBrLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGxpc3QsIGl0ZXJhdG9yLCB0aGlzQXJnKSB7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGl0ZXJhdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB2YXIgcmVjZWl2ZXI7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykge1xuICAgICAgICByZWNlaXZlciA9IHRoaXNBcmc7XG4gICAgfVxuXG4gICAgaWYgKHRvU3RyLmNhbGwobGlzdCkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgZm9yRWFjaEFycmF5KGxpc3QsIGl0ZXJhdG9yLCByZWNlaXZlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZm9yRWFjaFN0cmluZyhsaXN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvckVhY2hPYmplY3QobGlzdCwgaXRlcmF0b3IsIHJlY2VpdmVyKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc2NDg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuY2FsbCh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gTWF0aC5tYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJncy5wdXNoKCckJyArIGkpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDg2MTI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGltcGxlbWVudGF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NjQ4KTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTk3Mjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGZ1bmN0aW9uc0hhdmVOYW1lcyA9IGZ1bmN0aW9uIGZ1bmN0aW9uc0hhdmVOYW1lcygpIHtcblx0cmV0dXJuIHR5cGVvZiBmdW5jdGlvbiBmKCkge30ubmFtZSA9PT0gJ3N0cmluZyc7XG59O1xuXG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5pZiAoZ09QRCkge1xuXHR0cnkge1xuXHRcdGdPUEQoW10sICdsZW5ndGgnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGdPUERcblx0XHRnT1BEID0gbnVsbDtcblx0fVxufVxuXG5mdW5jdGlvbnNIYXZlTmFtZXMuZnVuY3Rpb25zSGF2ZUNvbmZpZ3VyYWJsZU5hbWVzID0gZnVuY3Rpb24gZnVuY3Rpb25zSGF2ZUNvbmZpZ3VyYWJsZU5hbWVzKCkge1xuXHRpZiAoIWZ1bmN0aW9uc0hhdmVOYW1lcygpIHx8ICFnT1BEKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHZhciBkZXNjID0gZ09QRChmdW5jdGlvbiAoKSB7fSwgJ25hbWUnKTtcblx0cmV0dXJuICEhZGVzYyAmJiAhIWRlc2MuY29uZmlndXJhYmxlO1xufTtcblxudmFyICRiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5cbmZ1bmN0aW9uc0hhdmVOYW1lcy5ib3VuZEZ1bmN0aW9uc0hhdmVOYW1lcyA9IGZ1bmN0aW9uIGJvdW5kRnVuY3Rpb25zSGF2ZU5hbWVzKCkge1xuXHRyZXR1cm4gZnVuY3Rpb25zSGF2ZU5hbWVzKCkgJiYgdHlwZW9mICRiaW5kID09PSAnZnVuY3Rpb24nICYmIGZ1bmN0aW9uIGYoKSB7fS5iaW5kKCkubmFtZSAhPT0gJyc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uc0hhdmVOYW1lcztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjEwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciB1bmRlZmluZWQ7XG5cbnZhciAkU3ludGF4RXJyb3IgPSBTeW50YXhFcnJvcjtcbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbnZhciBnZXRFdmFsbGVkQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoZXhwcmVzc2lvblN5bnRheCkge1xuXHR0cnkge1xuXHRcdHJldHVybiAkRnVuY3Rpb24oJ1widXNlIHN0cmljdFwiOyByZXR1cm4gKCcgKyBleHByZXNzaW9uU3ludGF4ICsgJykuY29uc3RydWN0b3I7JykoKTtcblx0fSBjYXRjaCAoZSkge31cbn07XG5cbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5pZiAoJGdPUEQpIHtcblx0dHJ5IHtcblx0XHQkZ09QRCh7fSwgJycpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0JGdPUEQgPSBudWxsOyAvLyB0aGlzIGlzIElFIDgsIHdoaWNoIGhhcyBhIGJyb2tlbiBnT1BEXG5cdH1cbn1cblxudmFyIHRocm93VHlwZUVycm9yID0gZnVuY3Rpb24gKCkge1xuXHR0aHJvdyBuZXcgJFR5cGVFcnJvcigpO1xufTtcbnZhciBUaHJvd1R5cGVFcnJvciA9ICRnT1BEXG5cdD8gKGZ1bmN0aW9uICgpIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9ucywgbm8tY2FsbGVyLCBuby1yZXN0cmljdGVkLXByb3BlcnRpZXNcblx0XHRcdGFyZ3VtZW50cy5jYWxsZWU7IC8vIElFIDggZG9lcyBub3QgdGhyb3cgaGVyZVxuXHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdH0gY2F0Y2ggKGNhbGxlZVRocm93cykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gSUUgOCB0aHJvd3Mgb24gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhcmd1bWVudHMsICcnKVxuXHRcdFx0XHRyZXR1cm4gJGdPUEQoYXJndW1lbnRzLCAnY2FsbGVlJykuZ2V0O1xuXHRcdFx0fSBjYXRjaCAoZ09QRHRocm93cykge1xuXHRcdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KCkpXG5cdDogdGhyb3dUeXBlRXJyb3I7XG5cbnZhciBoYXNTeW1ib2xzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDA1KSgpO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguX19wcm90b19fOyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG5cbnZhciBuZWVkc0V2YWwgPSB7fTtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogbmVlZHNFdmFsLFxuXHQnJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyVCaWdJbnQlJzogdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQsXG5cdCclQm9vbGVhbiUnOiBCb29sZWFuLFxuXHQnJURhdGFWaWV3JSc6IHR5cGVvZiBEYXRhVmlldyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBEYXRhVmlldyxcblx0JyVEYXRlJSc6IERhdGUsXG5cdCclZGVjb2RlVVJJJSc6IGRlY29kZVVSSSxcblx0JyVkZWNvZGVVUklDb21wb25lbnQlJzogZGVjb2RlVVJJQ29tcG9uZW50LFxuXHQnJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCclZW5jb2RlVVJJQ29tcG9uZW50JSc6IGVuY29kZVVSSUNvbXBvbmVudCxcblx0JyVFcnJvciUnOiBFcnJvcixcblx0JyVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJUV2YWxFcnJvciUnOiBFdmFsRXJyb3IsXG5cdCclRmxvYXQzMkFycmF5JSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LFxuXHQnJUZsb2F0NjRBcnJheSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheSxcblx0JyVGaW5hbGl6YXRpb25SZWdpc3RyeSUnOiB0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmluYWxpemF0aW9uUmVnaXN0cnksXG5cdCclRnVuY3Rpb24lJzogJEZ1bmN0aW9uLFxuXHQnJUdlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVJbnQ4QXJyYXklJzogdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQ4QXJyYXksXG5cdCclSW50MTZBcnJheSUnOiB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQxNkFycmF5LFxuXHQnJUludDMyQXJyYXklJzogdHlwZW9mIEludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MzJBcnJheSxcblx0JyVpc0Zpbml0ZSUnOiBpc0Zpbml0ZSxcblx0JyVpc05hTiUnOiBpc05hTixcblx0JyVJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSkgOiB1bmRlZmluZWQsXG5cdCclSlNPTiUnOiB0eXBlb2YgSlNPTiA9PT0gJ29iamVjdCcgPyBKU09OIDogdW5kZWZpbmVkLFxuXHQnJU1hcCUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcCxcblx0JyVNYXBJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBNYXAoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJU1hdGglJzogTWF0aCxcblx0JyVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJU9iamVjdCUnOiBPYmplY3QsXG5cdCclcGFyc2VGbG9hdCUnOiBwYXJzZUZsb2F0LFxuXHQnJXBhcnNlSW50JSc6IHBhcnNlSW50LFxuXHQnJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCclUmFuZ2VFcnJvciUnOiBSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6IFJlZmVyZW5jZUVycm9yLFxuXHQnJVJlZmxlY3QlJzogdHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUmVmbGVjdCxcblx0JyVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJVNldCUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNldCxcblx0JyVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyVTdHJpbmclJzogU3RyaW5nLFxuXHQnJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90bygnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJVN5bnRheEVycm9yJSc6ICRTeW50YXhFcnJvcixcblx0JyVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyVUeXBlZEFycmF5JSc6IFR5cGVkQXJyYXksXG5cdCclVHlwZUVycm9yJSc6ICRUeXBlRXJyb3IsXG5cdCclVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCclVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJVVSSUVycm9yJSc6IFVSSUVycm9yLFxuXHQnJVdlYWtNYXAlJzogdHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha01hcCxcblx0JyVXZWFrUmVmJSc6IHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtSZWYsXG5cdCclV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0XG59O1xuXG52YXIgZG9FdmFsID0gZnVuY3Rpb24gZG9FdmFsKG5hbWUpIHtcblx0dmFyIHZhbHVlO1xuXHRpZiAobmFtZSA9PT0gJyVBc3luY0Z1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24gKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUdlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvciUnKSB7XG5cdFx0dmFyIGZuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKTtcblx0XHRpZiAoZm4pIHtcblx0XHRcdHZhbHVlID0gZm4ucHJvdG90eXBlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJykge1xuXHRcdHZhciBnZW4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvciUnKTtcblx0XHRpZiAoZ2VuKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFByb3RvKGdlbi5wcm90b3R5cGUpO1xuXHRcdH1cblx0fVxuXG5cdElOVFJJTlNJQ1NbbmFtZV0gPSB2YWx1ZTtcblxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgTEVHQUNZX0FMSUFTRVMgPSB7XG5cdCclQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvdHlwZSUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG9fZW50cmllcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdlbnRyaWVzJ10sXG5cdCclQXJyYXlQcm90b19mb3JFYWNoJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2ZvckVhY2gnXSxcblx0JyVBcnJheVByb3RvX2tleXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAna2V5cyddLFxuXHQnJUFycmF5UHJvdG9fdmFsdWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ3ZhbHVlcyddLFxuXHQnJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlJzogWydBc3luY0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUJvb2xlYW5Qcm90b3R5cGUlJzogWydCb29sZWFuJywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGFWaWV3UHJvdG90eXBlJSc6IFsnRGF0YVZpZXcnLCAncHJvdG90eXBlJ10sXG5cdCclRGF0ZVByb3RvdHlwZSUnOiBbJ0RhdGUnLCAncHJvdG90eXBlJ10sXG5cdCclRXJyb3JQcm90b3R5cGUlJzogWydFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVFdmFsRXJyb3JQcm90b3R5cGUlJzogWydFdmFsRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0NjRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvciUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQ4QXJyYXlQcm90b3R5cGUlJzogWydJbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ0ludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ0ludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSlNPTlBhcnNlJSc6IFsnSlNPTicsICdwYXJzZSddLFxuXHQnJUpTT05TdHJpbmdpZnklJzogWydKU09OJywgJ3N0cmluZ2lmeSddLFxuXHQnJU1hcFByb3RvdHlwZSUnOiBbJ01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVOdW1iZXJQcm90b3R5cGUlJzogWydOdW1iZXInLCAncHJvdG90eXBlJ10sXG5cdCclT2JqZWN0UHJvdG90eXBlJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZSddLFxuXHQnJU9ialByb3RvX3RvU3RyaW5nJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd0b1N0cmluZyddLFxuXHQnJU9ialByb3RvX3ZhbHVlT2YlJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3ZhbHVlT2YnXSxcblx0JyVQcm9taXNlUHJvdG90eXBlJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnXSxcblx0JyVQcm9taXNlUHJvdG9fdGhlbiUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJywgJ3RoZW4nXSxcblx0JyVQcm9taXNlX2FsbCUnOiBbJ1Byb21pc2UnLCAnYWxsJ10sXG5cdCclUHJvbWlzZV9yZWplY3QlJzogWydQcm9taXNlJywgJ3JlamVjdCddLFxuXHQnJVByb21pc2VfcmVzb2x2ZSUnOiBbJ1Byb21pc2UnLCAncmVzb2x2ZSddLFxuXHQnJVJhbmdlRXJyb3JQcm90b3R5cGUlJzogWydSYW5nZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSc6IFsnUmVmZXJlbmNlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVnRXhwUHJvdG90eXBlJSc6IFsnUmVnRXhwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVNldFByb3RvdHlwZSUnOiBbJ1NldCcsICdwcm90b3R5cGUnXSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN0cmluZ1Byb3RvdHlwZSUnOiBbJ1N0cmluZycsICdwcm90b3R5cGUnXSxcblx0JyVTeW1ib2xQcm90b3R5cGUlJzogWydTeW1ib2wnLCAncHJvdG90eXBlJ10sXG5cdCclU3ludGF4RXJyb3JQcm90b3R5cGUlJzogWydTeW50YXhFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVHlwZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlRXJyb3JQcm90b3R5cGUlJzogWydUeXBlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlJzogWydVaW50OENsYW1wZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnVWludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVVJJRXJyb3JQcm90b3R5cGUlJzogWydVUklFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrTWFwUHJvdG90eXBlJSc6IFsnV2Vha01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrU2V0UHJvdG90eXBlJSc6IFsnV2Vha1NldCcsICdwcm90b3R5cGUnXVxufTtcblxudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2MTIpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oNzY0Mik7XG52YXIgJGNvbmNhdCA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBBcnJheS5wcm90b3R5cGUuY29uY2F0KTtcbnZhciAkc3BsaWNlQXBwbHkgPSBiaW5kLmNhbGwoRnVuY3Rpb24uYXBwbHksIEFycmF5LnByb3RvdHlwZS5zcGxpY2UpO1xudmFyICRyZXBsYWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG52YXIgJHN0clNsaWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUuc2xpY2UpO1xudmFyICRleGVjID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFJlZ0V4cC5wcm90b3R5cGUuZXhlYyk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0aWYgKCRleGVjKC9eJT9bXiVdKiU/JC8sIG5hbWUpID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZScpO1xuXHR9XG5cdHZhciBwYXJ0cyA9IHN0cmluZ1RvUGF0aChuYW1lKTtcblx0dmFyIGludHJpbnNpY0Jhc2VOYW1lID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzWzBdIDogJyc7XG5cblx0dmFyIGludHJpbnNpYyA9IGdldEJhc2VJbnRyaW5zaWMoJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJScsIGFsbG93TWlzc2luZyk7XG5cdHZhciBpbnRyaW5zaWNSZWFsTmFtZSA9IGludHJpbnNpYy5uYW1lO1xuXHR2YXIgdmFsdWUgPSBpbnRyaW5zaWMudmFsdWU7XG5cdHZhciBza2lwRnVydGhlckNhY2hpbmcgPSBmYWxzZTtcblxuXHR2YXIgYWxpYXMgPSBpbnRyaW5zaWMuYWxpYXM7XG5cdGlmIChhbGlhcykge1xuXHRcdGludHJpbnNpY0Jhc2VOYW1lID0gYWxpYXNbMF07XG5cdFx0JHNwbGljZUFwcGx5KHBhcnRzLCAkY29uY2F0KFswLCAxXSwgYWxpYXMpKTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAxLCBpc093biA9IHRydWU7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdHZhciBwYXJ0ID0gcGFydHNbaV07XG5cdFx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHBhcnQsIDAsIDEpO1xuXHRcdHZhciBsYXN0ID0gJHN0clNsaWNlKHBhcnQsIC0xKTtcblx0XHRpZiAoXG5cdFx0XHQoXG5cdFx0XHRcdChmaXJzdCA9PT0gJ1wiJyB8fCBmaXJzdCA9PT0gXCInXCIgfHwgZmlyc3QgPT09ICdgJylcblx0XHRcdFx0fHwgKGxhc3QgPT09ICdcIicgfHwgbGFzdCA9PT0gXCInXCIgfHwgbGFzdCA9PT0gJ2AnKVxuXHRcdFx0KVxuXHRcdFx0JiYgZmlyc3QgIT09IGxhc3Rcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Byb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMnKTtcblx0XHR9XG5cdFx0aWYgKHBhcnQgPT09ICdjb25zdHJ1Y3RvcicgfHwgIWlzT3duKSB7XG5cdFx0XHRza2lwRnVydGhlckNhY2hpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGludHJpbnNpY0Jhc2VOYW1lICs9ICcuJyArIHBhcnQ7XG5cdFx0aW50cmluc2ljUmVhbE5hbWUgPSAnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJztcblxuXHRcdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljUmVhbE5hbWUpKSB7XG5cdFx0XHR2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0aWYgKCEocGFydCBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKCFhbGxvd01pc3NpbmcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYmFzZSBpbnRyaW5zaWMgZm9yICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdm9pZCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoJGdPUEQgJiYgKGkgKyAxKSA+PSBwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGRlc2MgPSAkZ09QRCh2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdGlzT3duID0gISFkZXNjO1xuXG5cdFx0XHRcdC8vIEJ5IGNvbnZlbnRpb24sIHdoZW4gYSBkYXRhIHByb3BlcnR5IGlzIGNvbnZlcnRlZCB0byBhbiBhY2Nlc3NvclxuXHRcdFx0XHQvLyBwcm9wZXJ0eSB0byBlbXVsYXRlIGEgZGF0YSBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IHN1ZmZlciBmcm9tXG5cdFx0XHRcdC8vIHRoZSBvdmVycmlkZSBtaXN0YWtlLCB0aGF0IGFjY2Vzc29yJ3MgZ2V0dGVyIGlzIG1hcmtlZCB3aXRoXG5cdFx0XHRcdC8vIGFuIGBvcmlnaW5hbFZhbHVlYCBwcm9wZXJ0eS4gSGVyZSwgd2hlbiB3ZSBkZXRlY3QgdGhpcywgd2Vcblx0XHRcdFx0Ly8gdXBob2xkIHRoZSBpbGx1c2lvbiBieSBwcmV0ZW5kaW5nIHRvIHNlZSB0aGF0IG9yaWdpbmFsIGRhdGFcblx0XHRcdFx0Ly8gcHJvcGVydHksIGkuZS4sIHJldHVybmluZyB0aGUgdmFsdWUgcmF0aGVyIHRoYW4gdGhlIGdldHRlclxuXHRcdFx0XHQvLyBpdHNlbGYuXG5cdFx0XHRcdGlmIChpc093biAmJiAnZ2V0JyBpbiBkZXNjICYmICEoJ29yaWdpbmFsVmFsdWUnIGluIGRlc2MuZ2V0KSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVzYy5nZXQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXNPd24gPSBoYXNPd24odmFsdWUsIHBhcnQpO1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPd24gJiYgIXNraXBGdXJ0aGVyQ2FjaGluZykge1xuXHRcdFx0XHRJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMDQ0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBHZXRJbnRyaW5zaWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3JzID0gZnVuY3Rpb24gaGFzUHJvcGVydHlEZXNjcmlwdG9ycygpIHtcblx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdHRyeSB7XG5cdFx0XHQkZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyB2YWx1ZTogMSB9KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGRlZmluZVByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbmhhc1Byb3BlcnR5RGVzY3JpcHRvcnMuaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBmdW5jdGlvbiBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZygpIHtcblx0Ly8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG5cdGlmICghaGFzUHJvcGVydHlEZXNjcmlwdG9ycygpKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0dHJ5IHtcblx0XHRyZXR1cm4gJGRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggIT09IDE7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJbiBGaXJlZm94IDQtMjIsIGRlZmluaW5nIGxlbmd0aCBvbiBhbiBhcnJheSB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvcnM7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE0MDU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IF9fd2VicGFja19yZXF1aXJlX18oNTQxOSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzTmF0aXZlU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sKCdmb28nKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sKCdiYXInKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0cmV0dXJuIGhhc1N5bWJvbFNoYW0oKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDU0MTk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjQxMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaGFzU3ltYm9scyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQxOSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzVG9TdHJpbmdUYWdTaGFtcygpIHtcblx0cmV0dXJuIGhhc1N5bWJvbHMoKSAmJiAhIVN5bWJvbC50b1N0cmluZ1RhZztcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc2NDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2MTIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjg4OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgQnVmZmVyID0gKF9fd2VicGFja19yZXF1aXJlX18oNzEwMykuQnVmZmVyKTtcblxuLy8gTXVsdGlieXRlIGNvZGVjLiBJbiB0aGlzIHNjaGVtZSwgYSBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgYnkgMSBvciBtb3JlIGJ5dGVzLlxuLy8gT3VyIGNvZGVjIHN1cHBvcnRzIFVURi0xNiBzdXJyb2dhdGVzLCBleHRlbnNpb25zIGZvciBHQjE4MDMwIGFuZCB1bmljb2RlIHNlcXVlbmNlcy5cbi8vIFRvIHNhdmUgbWVtb3J5IGFuZCBsb2FkaW5nIHRpbWUsIHdlIHJlYWQgdGFibGUgZmlsZXMgb25seSB3aGVuIHJlcXVlc3RlZC5cblxuZXhwb3J0cy5fZGJjcyA9IERCQ1NDb2RlYztcblxudmFyIFVOQVNTSUdORUQgPSAtMSxcbiAgICBHQjE4MDMwX0NPREUgPSAtMixcbiAgICBTRVFfU1RBUlQgID0gLTEwLFxuICAgIE5PREVfU1RBUlQgPSAtMTAwMCxcbiAgICBVTkFTU0lHTkVEX05PREUgPSBuZXcgQXJyYXkoMHgxMDApLFxuICAgIERFRl9DSEFSID0gLTE7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMHgxMDA7IGkrKylcbiAgICBVTkFTU0lHTkVEX05PREVbaV0gPSBVTkFTU0lHTkVEO1xuXG5cbi8vIENsYXNzIERCQ1NDb2RlYyByZWFkcyBhbmQgaW5pdGlhbGl6ZXMgbWFwcGluZyB0YWJsZXMuXG5mdW5jdGlvbiBEQkNTQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuZW5jb2RpbmdOYW1lID0gY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZTtcbiAgICBpZiAoIWNvZGVjT3B0aW9ucylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS5cIilcbiAgICBpZiAoIWNvZGVjT3B0aW9ucy50YWJsZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgJ1wiICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIicgaGFzIG5vIGRhdGEuXCIpO1xuXG4gICAgLy8gTG9hZCB0YWJsZXMuXG4gICAgdmFyIG1hcHBpbmdUYWJsZSA9IGNvZGVjT3B0aW9ucy50YWJsZSgpO1xuXG5cbiAgICAvLyBEZWNvZGUgdGFibGVzOiBNQkNTIC0+IFVuaWNvZGUuXG5cbiAgICAvLyBkZWNvZGVUYWJsZXMgaXMgYSB0cmllLCBlbmNvZGVkIGFzIGFuIGFycmF5IG9mIGFycmF5cyBvZiBpbnRlZ2Vycy4gSW50ZXJuYWwgYXJyYXlzIGFyZSB0cmllIG5vZGVzIGFuZCBhbGwgaGF2ZSBsZW4gPSAyNTYuXG4gICAgLy8gVHJpZSByb290IGlzIGRlY29kZVRhYmxlc1swXS5cbiAgICAvLyBWYWx1ZXM6ID49ICAwIC0+IHVuaWNvZGUgY2hhcmFjdGVyIGNvZGUuIGNhbiBiZSA+IDB4RkZGRlxuICAgIC8vICAgICAgICAgPT0gVU5BU1NJR05FRCAtPiB1bmtub3duL3VuYXNzaWduZWQgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA9PSBHQjE4MDMwX0NPREUgLT4gdGhpcyBpcyB0aGUgZW5kIG9mIGEgR0IxODAzMCA0LWJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA8PSBOT0RFX1NUQVJUIC0+IGluZGV4IG9mIHRoZSBuZXh0IG5vZGUgaW4gb3VyIHRyaWUgdG8gcHJvY2VzcyBuZXh0IGJ5dGUuXG4gICAgLy8gICAgICAgICA8PSBTRVFfU1RBUlQgIC0+IGluZGV4IG9mIHRoZSBzdGFydCBvZiBhIGNoYXJhY3RlciBjb2RlIHNlcXVlbmNlLCBpbiBkZWNvZGVUYWJsZVNlcS5cbiAgICB0aGlzLmRlY29kZVRhYmxlcyA9IFtdO1xuICAgIHRoaXMuZGVjb2RlVGFibGVzWzBdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgcm9vdCBub2RlLlxuXG4gICAgLy8gU29tZXRpbWVzIGEgTUJDUyBjaGFyIGNvcnJlc3BvbmRzIHRvIGEgc2VxdWVuY2Ugb2YgdW5pY29kZSBjaGFycy4gV2Ugc3RvcmUgdGhlbSBhcyBhcnJheXMgb2YgaW50ZWdlcnMgaGVyZS4gXG4gICAgdGhpcy5kZWNvZGVUYWJsZVNlcSA9IFtdO1xuXG4gICAgLy8gQWN0dWFsIG1hcHBpbmcgdGFibGVzIGNvbnNpc3Qgb2YgY2h1bmtzLiBVc2UgdGhlbSB0byBmaWxsIHVwIGRlY29kZSB0YWJsZXMuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBwaW5nVGFibGUubGVuZ3RoOyBpKyspXG4gICAgICAgIHRoaXMuX2FkZERlY29kZUNodW5rKG1hcHBpbmdUYWJsZVtpXSk7XG5cbiAgICAvLyBMb2FkICYgY3JlYXRlIEdCMTgwMzAgdGFibGVzIHdoZW4gbmVlZGVkLlxuICAgIGlmICh0eXBlb2YgY29kZWNPcHRpb25zLmdiMTgwMzAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5nYjE4MDMwID0gY29kZWNPcHRpb25zLmdiMTgwMzAoKTsgLy8gTG9hZCBHQjE4MDMwIHJhbmdlcy5cblxuICAgICAgICAvLyBBZGQgR0IxODAzMCBjb21tb24gZGVjb2RlIG5vZGVzLlxuICAgICAgICB2YXIgY29tbW9uVGhpcmRCeXRlTm9kZUlkeCA9IHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5kZWNvZGVUYWJsZXMucHVzaChVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuXG4gICAgICAgIHZhciBjb21tb25Gb3VydGhCeXRlTm9kZUlkeCA9IHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5kZWNvZGVUYWJsZXMucHVzaChVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuXG4gICAgICAgIC8vIEZpbGwgb3V0IHRoZSB0cmVlXG4gICAgICAgIHZhciBmaXJzdEJ5dGVOb2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbMF07XG4gICAgICAgIGZvciAodmFyIGkgPSAweDgxOyBpIDw9IDB4RkU7IGkrKykge1xuICAgICAgICAgICAgdmFyIHNlY29uZEJ5dGVOb2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbTk9ERV9TVEFSVCAtIGZpcnN0Qnl0ZU5vZGVbaV1dO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB4MzA7IGogPD0gMHgzOTsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlY29uZEJ5dGVOb2RlW2pdID09PSBVTkFTU0lHTkVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZEJ5dGVOb2RlW2pdID0gTk9ERV9TVEFSVCAtIGNvbW1vblRoaXJkQnl0ZU5vZGVJZHg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmRCeXRlTm9kZVtqXSA+IE5PREVfU1RBUlQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2IxODAzMCBkZWNvZGUgdGFibGVzIGNvbmZsaWN0IGF0IGJ5dGUgMlwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdGhpcmRCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW05PREVfU1RBUlQgLSBzZWNvbmRCeXRlTm9kZVtqXV07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDB4ODE7IGsgPD0gMHhGRTsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlyZEJ5dGVOb2RlW2tdID09PSBVTkFTU0lHTkVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlyZEJ5dGVOb2RlW2tdID0gTk9ERV9TVEFSVCAtIGNvbW1vbkZvdXJ0aEJ5dGVOb2RlSWR4O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXJkQnl0ZU5vZGVba10gPT09IE5PREVfU1RBUlQgLSBjb21tb25Gb3VydGhCeXRlTm9kZUlkeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcmRCeXRlTm9kZVtrXSA+IE5PREVfU1RBUlQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImdiMTgwMzAgZGVjb2RlIHRhYmxlcyBjb25mbGljdCBhdCBieXRlIDNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgZm91cnRoQnl0ZU5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1tOT0RFX1NUQVJUIC0gdGhpcmRCeXRlTm9kZVtrXV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAweDMwOyBsIDw9IDB4Mzk7IGwrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdXJ0aEJ5dGVOb2RlW2xdID09PSBVTkFTU0lHTkVEKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdXJ0aEJ5dGVOb2RlW2xdID0gR0IxODAzMF9DT0RFO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBpY29udi5kZWZhdWx0Q2hhclVuaWNvZGU7XG5cbiAgICBcbiAgICAvLyBFbmNvZGUgdGFibGVzOiBVbmljb2RlIC0+IERCQ1MuXG5cbiAgICAvLyBgZW5jb2RlVGFibGVgIGlzIGFycmF5IG1hcHBpbmcgZnJvbSB1bmljb2RlIGNoYXIgdG8gZW5jb2RlZCBjaGFyLiBBbGwgaXRzIHZhbHVlcyBhcmUgaW50ZWdlcnMgZm9yIHBlcmZvcm1hbmNlLlxuICAgIC8vIEJlY2F1c2UgaXQgY2FuIGJlIHNwYXJzZSwgaXQgaXMgcmVwcmVzZW50ZWQgYXMgYXJyYXkgb2YgYnVja2V0cyBieSAyNTYgY2hhcnMgZWFjaC4gQnVja2V0IGNhbiBiZSBudWxsLlxuICAgIC8vIFZhbHVlczogPj0gIDAgLT4gaXQgaXMgYSBub3JtYWwgY2hhci4gV3JpdGUgdGhlIHZhbHVlIChpZiA8PTI1NiB0aGVuIDEgYnl0ZSwgaWYgPD02NTUzNiB0aGVuIDIgYnl0ZXMsIGV0Yy4pLlxuICAgIC8vICAgICAgICAgPT0gVU5BU1NJR05FRCAtPiBubyBjb252ZXJzaW9uIGZvdW5kLiBPdXRwdXQgYSBkZWZhdWx0IGNoYXIuXG4gICAgLy8gICAgICAgICA8PSBTRVFfU1RBUlQgIC0+IGl0J3MgYW4gaW5kZXggaW4gZW5jb2RlVGFibGVTZXEsIHNlZSBiZWxvdy4gVGhlIGNoYXJhY3RlciBzdGFydHMgYSBzZXF1ZW5jZS5cbiAgICB0aGlzLmVuY29kZVRhYmxlID0gW107XG4gICAgXG4gICAgLy8gYGVuY29kZVRhYmxlU2VxYCBpcyB1c2VkIHdoZW4gYSBzZXF1ZW5jZSBvZiB1bmljb2RlIGNoYXJhY3RlcnMgaXMgZW5jb2RlZCBhcyBhIHNpbmdsZSBjb2RlLiBXZSB1c2UgYSB0cmVlIG9mXG4gICAgLy8gb2JqZWN0cyB3aGVyZSBrZXlzIGNvcnJlc3BvbmQgdG8gY2hhcmFjdGVycyBpbiBzZXF1ZW5jZSBhbmQgbGVhZnMgYXJlIHRoZSBlbmNvZGVkIGRiY3MgdmFsdWVzLiBBIHNwZWNpYWwgREVGX0NIQVIga2V5XG4gICAgLy8gbWVhbnMgZW5kIG9mIHNlcXVlbmNlIChuZWVkZWQgd2hlbiBvbmUgc2VxdWVuY2UgaXMgYSBzdHJpY3Qgc3Vic2VxdWVuY2Ugb2YgYW5vdGhlcikuXG4gICAgLy8gT2JqZWN0cyBhcmUga2VwdCBzZXBhcmF0ZWx5IGZyb20gZW5jb2RlVGFibGUgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UuXG4gICAgdGhpcy5lbmNvZGVUYWJsZVNlcSA9IFtdO1xuXG4gICAgLy8gU29tZSBjaGFycyBjYW4gYmUgZGVjb2RlZCwgYnV0IG5lZWQgbm90IGJlIGVuY29kZWQuXG4gICAgdmFyIHNraXBFbmNvZGVDaGFycyA9IHt9O1xuICAgIGlmIChjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHMpXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZWNPcHRpb25zLmVuY29kZVNraXBWYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gY29kZWNPcHRpb25zLmVuY29kZVNraXBWYWxzW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKVxuICAgICAgICAgICAgICAgIHNraXBFbmNvZGVDaGFyc1t2YWxdID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gdmFsLmZyb207IGogPD0gdmFsLnRvOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIHNraXBFbmNvZGVDaGFyc1tqXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgLy8gVXNlIGRlY29kZSB0cmllIHRvIHJlY3Vyc2l2ZWx5IGZpbGwgb3V0IGVuY29kZSB0YWJsZXMuXG4gICAgdGhpcy5fZmlsbEVuY29kZVRhYmxlKDAsIDAsIHNraXBFbmNvZGVDaGFycyk7XG5cbiAgICAvLyBBZGQgbW9yZSBlbmNvZGluZyBwYWlycyB3aGVuIG5lZWRlZC5cbiAgICBpZiAoY29kZWNPcHRpb25zLmVuY29kZUFkZCkge1xuICAgICAgICBmb3IgKHZhciB1Q2hhciBpbiBjb2RlY09wdGlvbnMuZW5jb2RlQWRkKVxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb2RlY09wdGlvbnMuZW5jb2RlQWRkLCB1Q2hhcikpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RW5jb2RlQ2hhcih1Q2hhci5jaGFyQ29kZUF0KDApLCBjb2RlY09wdGlvbnMuZW5jb2RlQWRkW3VDaGFyXSk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZDaGFyU0IgID0gdGhpcy5lbmNvZGVUYWJsZVswXVtpY29udi5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNvZGVBdCgwKV07XG4gICAgaWYgKHRoaXMuZGVmQ2hhclNCID09PSBVTkFTU0lHTkVEKSB0aGlzLmRlZkNoYXJTQiA9IHRoaXMuZW5jb2RlVGFibGVbMF1bJz8nXTtcbiAgICBpZiAodGhpcy5kZWZDaGFyU0IgPT09IFVOQVNTSUdORUQpIHRoaXMuZGVmQ2hhclNCID0gXCI/XCIuY2hhckNvZGVBdCgwKTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gREJDU0VuY29kZXI7XG5EQkNTQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBEQkNTRGVjb2RlcjtcblxuLy8gRGVjb2RlciBoZWxwZXJzXG5EQkNTQ29kZWMucHJvdG90eXBlLl9nZXREZWNvZGVUcmllTm9kZSA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgICB2YXIgYnl0ZXMgPSBbXTtcbiAgICBmb3IgKDsgYWRkciA+IDA7IGFkZHIgPj4+PSA4KVxuICAgICAgICBieXRlcy5wdXNoKGFkZHIgJiAweEZGKTtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoID09IDApXG4gICAgICAgIGJ5dGVzLnB1c2goMCk7XG5cbiAgICB2YXIgbm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzWzBdO1xuICAgIGZvciAodmFyIGkgPSBieXRlcy5sZW5ndGgtMTsgaSA+IDA7IGktLSkgeyAvLyBUcmF2ZXJzZSBub2RlcyBkZWVwZXIgaW50byB0aGUgdHJpZS5cbiAgICAgICAgdmFyIHZhbCA9IG5vZGVbYnl0ZXNbaV1dO1xuXG4gICAgICAgIGlmICh2YWwgPT0gVU5BU1NJR05FRCkgeyAvLyBDcmVhdGUgbmV3IG5vZGUuXG4gICAgICAgICAgICBub2RlW2J5dGVzW2ldXSA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmRlY29kZVRhYmxlcy5wdXNoKG5vZGUgPSBVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCA8PSBOT0RFX1NUQVJUKSB7IC8vIEV4aXN0aW5nIG5vZGUuXG4gICAgICAgICAgICBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbTk9ERV9TVEFSVCAtIHZhbF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcndyaXRlIGJ5dGUgaW4gXCIgKyB0aGlzLmVuY29kaW5nTmFtZSArIFwiLCBhZGRyOiBcIiArIGFkZHIudG9TdHJpbmcoMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fYWRkRGVjb2RlQ2h1bmsgPSBmdW5jdGlvbihjaHVuaykge1xuICAgIC8vIEZpcnN0IGVsZW1lbnQgb2YgY2h1bmsgaXMgdGhlIGhleCBtYmNzIGNvZGUgd2hlcmUgd2Ugc3RhcnQuXG4gICAgdmFyIGN1ckFkZHIgPSBwYXJzZUludChjaHVua1swXSwgMTYpO1xuXG4gICAgLy8gQ2hvb3NlIHRoZSBkZWNvZGluZyBub2RlIHdoZXJlIHdlJ2xsIHdyaXRlIG91ciBjaGFycy5cbiAgICB2YXIgd3JpdGVUYWJsZSA9IHRoaXMuX2dldERlY29kZVRyaWVOb2RlKGN1ckFkZHIpO1xuICAgIGN1ckFkZHIgPSBjdXJBZGRyICYgMHhGRjtcblxuICAgIC8vIFdyaXRlIGFsbCBvdGhlciBlbGVtZW50cyBvZiB0aGUgY2h1bmsgdG8gdGhlIHRhYmxlLlxuICAgIGZvciAodmFyIGsgPSAxOyBrIDwgY2h1bmsubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBjaHVua1trXTtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiKSB7IC8vIFN0cmluZywgd3JpdGUgYXMtaXMuXG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQubGVuZ3RoOykge1xuICAgICAgICAgICAgICAgIHZhciBjb2RlID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgaWYgKDB4RDgwMCA8PSBjb2RlICYmIGNvZGUgPCAweERDMDApIHsgLy8gRGVjb2RlIHN1cnJvZ2F0ZVxuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVRyYWlsID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgweERDMDAgPD0gY29kZVRyYWlsICYmIGNvZGVUcmFpbCA8IDB4RTAwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IDB4MTAwMDAgKyAoY29kZSAtIDB4RDgwMCkgKiAweDQwMCArIChjb2RlVHJhaWwgLSAweERDMDApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIgaW4gXCIgICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIiBhdCBjaHVuayBcIiArIGNodW5rWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoMHgwRkYwIDwgY29kZSAmJiBjb2RlIDw9IDB4MEZGRikgeyAvLyBDaGFyYWN0ZXIgc2VxdWVuY2UgKG91ciBvd24gZW5jb2RpbmcgdXNlZClcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IDB4RkZGIC0gY29kZSArIDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZXEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBsZW47IG0rKylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoKHBhcnQuY2hhckNvZGVBdChsKyspKTsgLy8gU2ltcGxlIHZhcmlhdGlvbjogZG9uJ3Qgc3VwcG9ydCBzdXJyb2dhdGVzIG9yIHN1YnNlcXVlbmNlcyBpbiBzZXEuXG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVUYWJsZVtjdXJBZGRyKytdID0gU0VRX1NUQVJUIC0gdGhpcy5kZWNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChzZXEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IGNvZGU7IC8vIEJhc2ljIGNoYXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcnQgPT09IFwibnVtYmVyXCIpIHsgLy8gSW50ZWdlciwgbWVhbmluZyBpbmNyZWFzaW5nIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggcHJldiBjaGFyYWN0ZXIuXG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB3cml0ZVRhYmxlW2N1ckFkZHIgLSAxXSArIDE7XG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQ7IGwrKylcbiAgICAgICAgICAgICAgICB3cml0ZVRhYmxlW2N1ckFkZHIrK10gPSBjaGFyQ29kZSsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCB0eXBlICdcIiArIHR5cGVvZiBwYXJ0ICsgXCInIGdpdmVuIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgY2h1bmsgXCIgKyBjaHVua1swXSk7XG4gICAgfVxuICAgIGlmIChjdXJBZGRyID4gMHhGRilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IGNodW5rIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgYWRkciBcIiArIGNodW5rWzBdICsgXCI6IHRvbyBsb25nXCIgKyBjdXJBZGRyKTtcbn1cblxuLy8gRW5jb2RlciBoZWxwZXJzXG5EQkNTQ29kZWMucHJvdG90eXBlLl9nZXRFbmNvZGVCdWNrZXQgPSBmdW5jdGlvbih1Q29kZSkge1xuICAgIHZhciBoaWdoID0gdUNvZGUgPj4gODsgLy8gVGhpcyBjb3VsZCBiZSA+IDB4RkYgYmVjYXVzZSBvZiBhc3RyYWwgY2hhcmFjdGVycy5cbiAgICBpZiAodGhpcy5lbmNvZGVUYWJsZVtoaWdoXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aGlzLmVuY29kZVRhYmxlW2hpZ2hdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgYnVja2V0IG9uIGRlbWFuZC5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVUYWJsZVtoaWdoXTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlQ2hhciA9IGZ1bmN0aW9uKHVDb2RlLCBkYmNzQ29kZSkge1xuICAgIHZhciBidWNrZXQgPSB0aGlzLl9nZXRFbmNvZGVCdWNrZXQodUNvZGUpO1xuICAgIHZhciBsb3cgPSB1Q29kZSAmIDB4RkY7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVClcbiAgICAgICAgdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQtYnVja2V0W2xvd11dW0RFRl9DSEFSXSA9IGRiY3NDb2RlOyAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSwgc2V0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2Ugb2YgaXQuXG4gICAgZWxzZSBpZiAoYnVja2V0W2xvd10gPT0gVU5BU1NJR05FRClcbiAgICAgICAgYnVja2V0W2xvd10gPSBkYmNzQ29kZTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlU2VxdWVuY2UgPSBmdW5jdGlvbihzZXEsIGRiY3NDb2RlKSB7XG4gICAgXG4gICAgLy8gR2V0IHRoZSByb290IG9mIGNoYXJhY3RlciB0cmVlIGFjY29yZGluZyB0byBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlcXVlbmNlLlxuICAgIHZhciB1Q29kZSA9IHNlcVswXTtcbiAgICB2YXIgYnVja2V0ID0gdGhpcy5fZ2V0RW5jb2RlQnVja2V0KHVDb2RlKTtcbiAgICB2YXIgbG93ID0gdUNvZGUgJiAweEZGO1xuXG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVCkge1xuICAgICAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSB3aXRoICAtIHVzZSBpdC5cbiAgICAgICAgbm9kZSA9IHRoaXMuZW5jb2RlVGFibGVTZXFbU0VRX1NUQVJULWJ1Y2tldFtsb3ddXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIHdhcyBubyBzZXF1ZW5jZSBvYmplY3QgLSBhbGxvY2F0ZSBhIG5ldyBvbmUuXG4gICAgICAgIG5vZGUgPSB7fTtcbiAgICAgICAgaWYgKGJ1Y2tldFtsb3ddICE9PSBVTkFTU0lHTkVEKSBub2RlW0RFRl9DSEFSXSA9IGJ1Y2tldFtsb3ddOyAvLyBJZiBhIGNoYXIgd2FzIHNldCBiZWZvcmUgLSBtYWtlIGl0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2UuXG4gICAgICAgIGJ1Y2tldFtsb3ddID0gU0VRX1NUQVJUIC0gdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgIHRoaXMuZW5jb2RlVGFibGVTZXEucHVzaChub2RlKTtcbiAgICB9XG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgY2hhcmFjdGVyIHRyZWUsIGFsbG9jYXRpbmcgbmV3IG5vZGVzIGFzIG5lZWRlZC5cbiAgICBmb3IgKHZhciBqID0gMTsgaiA8IHNlcS5sZW5ndGgtMTsgaisrKSB7XG4gICAgICAgIHZhciBvbGRWYWwgPSBub2RlW3VDb2RlXTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbGRWYWwgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgbm9kZSA9IG9sZFZhbDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZVt1Q29kZV0gPSB7fVxuICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIG5vZGVbREVGX0NIQVJdID0gb2xkVmFsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxlYWYgdG8gZ2l2ZW4gZGJjc0NvZGUuXG4gICAgdUNvZGUgPSBzZXFbc2VxLmxlbmd0aC0xXTtcbiAgICBub2RlW3VDb2RlXSA9IGRiY3NDb2RlO1xufVxuXG5EQkNTQ29kZWMucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGUgPSBmdW5jdGlvbihub2RlSWR4LCBwcmVmaXgsIHNraXBFbmNvZGVDaGFycykge1xuICAgIHZhciBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbbm9kZUlkeF07XG4gICAgdmFyIGhhc1ZhbHVlcyA9IGZhbHNlO1xuICAgIHZhciBzdWJOb2RlRW1wdHkgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDB4MTAwOyBpKyspIHtcbiAgICAgICAgdmFyIHVDb2RlID0gbm9kZVtpXTtcbiAgICAgICAgdmFyIG1iQ29kZSA9IHByZWZpeCArIGk7XG4gICAgICAgIGlmIChza2lwRW5jb2RlQ2hhcnNbbWJDb2RlXSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICh1Q29kZSA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRFbmNvZGVDaGFyKHVDb2RlLCBtYkNvZGUpO1xuICAgICAgICAgICAgaGFzVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1Q29kZSA8PSBOT0RFX1NUQVJUKSB7XG4gICAgICAgICAgICB2YXIgc3ViTm9kZUlkeCA9IE5PREVfU1RBUlQgLSB1Q29kZTtcbiAgICAgICAgICAgIGlmICghc3ViTm9kZUVtcHR5W3N1Yk5vZGVJZHhdKSB7ICAvLyBTa2lwIGVtcHR5IHN1YnRyZWVzICh0aGV5IGFyZSB0b28gbGFyZ2UgaW4gZ2IxODAzMCkuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ByZWZpeCA9IChtYkNvZGUgPDwgOCkgPj4+IDA7ICAvLyBOT1RFOiAnPj4+IDAnIGtlZXBzIDMyLWJpdCBudW0gcG9zaXRpdmUuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGxFbmNvZGVUYWJsZShzdWJOb2RlSWR4LCBuZXdQcmVmaXgsIHNraXBFbmNvZGVDaGFycykpXG4gICAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBzdWJOb2RlRW1wdHlbc3ViTm9kZUlkeF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHVDb2RlIDw9IFNFUV9TVEFSVCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSB1Q29kZV0sIG1iQ29kZSk7XG4gICAgICAgICAgICBoYXNWYWx1ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoYXNWYWx1ZXM7XG59XG5cblxuXG4vLyA9PSBFbmNvZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBEQkNTRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIC8vIEVuY29kZXIgc3RhdGVcbiAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICB0aGlzLnNlcU9iaiA9IHVuZGVmaW5lZDtcbiAgICBcbiAgICAvLyBTdGF0aWMgZGF0YVxuICAgIHRoaXMuZW5jb2RlVGFibGUgPSBjb2RlYy5lbmNvZGVUYWJsZTtcbiAgICB0aGlzLmVuY29kZVRhYmxlU2VxID0gY29kZWMuZW5jb2RlVGFibGVTZXE7XG4gICAgdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUgPSBjb2RlYy5kZWZDaGFyU0I7XG4gICAgdGhpcy5nYjE4MDMwID0gY29kZWMuZ2IxODAzMDtcbn1cblxuREJDU0VuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIG5ld0J1ZiA9IEJ1ZmZlci5hbGxvYyhzdHIubGVuZ3RoICogKHRoaXMuZ2IxODAzMCA/IDQgOiAzKSksXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSB0aGlzLmxlYWRTdXJyb2dhdGUsXG4gICAgICAgIHNlcU9iaiA9IHRoaXMuc2VxT2JqLCBuZXh0Q2hhciA9IC0xLFxuICAgICAgICBpID0gMCwgaiA9IDA7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAvLyAwLiBHZXQgbmV4dCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChuZXh0Q2hhciA9PT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChpID09IHN0ci5sZW5ndGgpIGJyZWFrO1xuICAgICAgICAgICAgdmFyIHVDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB1Q29kZSA9IG5leHRDaGFyO1xuICAgICAgICAgICAgbmV4dENoYXIgPSAtMTsgICAgXG4gICAgICAgIH1cblxuICAgICAgICAvLyAxLiBIYW5kbGUgc3Vycm9nYXRlcy5cbiAgICAgICAgaWYgKDB4RDgwMCA8PSB1Q29kZSAmJiB1Q29kZSA8IDB4RTAwMCkgeyAvLyBDaGFyIGlzIG9uZSBvZiBzdXJyb2dhdGVzLlxuICAgICAgICAgICAgaWYgKHVDb2RlIDwgMHhEQzAwKSB7IC8vIFdlJ3ZlIGdvdCBsZWFkIHN1cnJvZ2F0ZS5cbiAgICAgICAgICAgICAgICBpZiAobGVhZFN1cnJvZ2F0ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IHVDb2RlO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gdUNvZGU7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZSBsZWFkIHN1cnJvZ2F0ZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIFdlJ3ZlIGdvdCB0cmFpbCBzdXJyb2dhdGUuXG4gICAgICAgICAgICAgICAgaWYgKGxlYWRTdXJyb2dhdGUgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHVDb2RlID0gMHgxMDAwMCArIChsZWFkU3Vycm9nYXRlIC0gMHhEODAwKSAqIDB4NDAwICsgKHVDb2RlIC0gMHhEQzAwKTtcbiAgICAgICAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluY29tcGxldGUgc3Vycm9nYXRlIHBhaXIgLSBvbmx5IHRyYWlsIHN1cnJvZ2F0ZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsZWFkU3Vycm9nYXRlICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSBzdXJyb2dhdGUgcGFpciAtIG9ubHkgbGVhZCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgICAgICBuZXh0Q2hhciA9IHVDb2RlOyB1Q29kZSA9IFVOQVNTSUdORUQ7IC8vIFdyaXRlIGFuIGVycm9yLCB0aGVuIGN1cnJlbnQgY2hhci5cbiAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIENvbnZlcnQgdUNvZGUgY2hhcmFjdGVyLlxuICAgICAgICB2YXIgZGJjc0NvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICBpZiAoc2VxT2JqICE9PSB1bmRlZmluZWQgJiYgdUNvZGUgIT0gVU5BU1NJR05FRCkgeyAvLyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2VxdWVuY2VcbiAgICAgICAgICAgIHZhciByZXNDb2RlID0gc2VxT2JqW3VDb2RlXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzQ29kZSA9PT0gJ29iamVjdCcpIHsgLy8gU2VxdWVuY2UgY29udGludWVzLlxuICAgICAgICAgICAgICAgIHNlcU9iaiA9IHJlc0NvZGU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc0NvZGUgPT0gJ251bWJlcicpIHsgLy8gU2VxdWVuY2UgZmluaXNoZWQuIFdyaXRlIGl0LlxuICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gcmVzQ29kZTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNDb2RlID09IHVuZGVmaW5lZCkgeyAvLyBDdXJyZW50IGNoYXJhY3RlciBpcyBub3QgcGFydCBvZiB0aGUgc2VxdWVuY2UuXG5cbiAgICAgICAgICAgICAgICAvLyBUcnkgZGVmYXVsdCBjaGFyYWN0ZXIgZm9yIHRoaXMgc2VxdWVuY2VcbiAgICAgICAgICAgICAgICByZXNDb2RlID0gc2VxT2JqW0RFRl9DSEFSXTtcbiAgICAgICAgICAgICAgICBpZiAocmVzQ29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gcmVzQ29kZTsgLy8gRm91bmQuIFdyaXRlIGl0LlxuICAgICAgICAgICAgICAgICAgICBuZXh0Q2hhciA9IHVDb2RlOyAvLyBDdXJyZW50IGNoYXJhY3RlciB3aWxsIGJlIHdyaXR0ZW4gdG9vIGluIHRoZSBuZXh0IGl0ZXJhdGlvbi5cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoYXQgaWYgd2UgaGF2ZSBubyBkZWZhdWx0PyAocmVzQ29kZSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZW4sIHdlIHNob3VsZCB3cml0ZSBmaXJzdCBjaGFyIG9mIHRoZSBzZXF1ZW5jZSBhcy1pcyBhbmQgdHJ5IHRoZSByZXN0IHJlY3Vyc2l2ZWx5LlxuICAgICAgICAgICAgICAgICAgICAvLyBEaWRuJ3QgZG8gaXQgZm9yIG5vdyBiZWNhdXNlIG5vIGVuY29kaW5nIGhhcyB0aGlzIHNpdHVhdGlvbiB5ZXQuXG4gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwganVzdCBza2lwIHRoZSBzZXF1ZW5jZSBhbmQgd3JpdGUgY3VycmVudCBjaGFyLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcU9iaiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA+PSAwKSB7ICAvLyBSZWd1bGFyIGNoYXJhY3RlclxuICAgICAgICAgICAgdmFyIHN1YnRhYmxlID0gdGhpcy5lbmNvZGVUYWJsZVt1Q29kZSA+PiA4XTtcbiAgICAgICAgICAgIGlmIChzdWJ0YWJsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gc3VidGFibGVbdUNvZGUgJiAweEZGXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlIDw9IFNFUV9TVEFSVCkgeyAvLyBTZXF1ZW5jZSBzdGFydFxuICAgICAgICAgICAgICAgIHNlcU9iaiA9IHRoaXMuZW5jb2RlVGFibGVTZXFbU0VRX1NUQVJULWRiY3NDb2RlXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlID09IFVOQVNTSUdORUQgJiYgdGhpcy5nYjE4MDMwKSB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIEdCMTgwMzAgYWxnb3JpdGhtIHRvIGZpbmQgY2hhcmFjdGVyKHMpIHRvIHdyaXRlLlxuICAgICAgICAgICAgICAgIHZhciBpZHggPSBmaW5kSWR4KHRoaXMuZ2IxODAzMC51Q2hhcnMsIHVDb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYmNzQ29kZSA9IHRoaXMuZ2IxODAzMC5nYkNoYXJzW2lkeF0gKyAodUNvZGUgLSB0aGlzLmdiMTgwMzAudUNoYXJzW2lkeF0pO1xuICAgICAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDB4ODEgKyBNYXRoLmZsb29yKGRiY3NDb2RlIC8gMTI2MDApOyBkYmNzQ29kZSA9IGRiY3NDb2RlICUgMTI2MDA7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHgzMCArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMjYwKTsgZGJjc0NvZGUgPSBkYmNzQ29kZSAlIDEyNjA7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHg4MSArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMCk7IGRiY3NDb2RlID0gZGJjc0NvZGUgJSAxMDtcbiAgICAgICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSAweDMwICsgZGJjc0NvZGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFdyaXRlIGRiY3NDb2RlIGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGRiY3NDb2RlID09PSBVTkFTU0lHTkVEKVxuICAgICAgICAgICAgZGJjc0NvZGUgPSB0aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChkYmNzQ29kZSA8IDB4MTAwKSB7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRiY3NDb2RlIDwgMHgxMDAwMCkge1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiA4OyAgIC8vIGhpZ2ggYnl0ZVxuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSAmIDB4RkY7IC8vIGxvdyBieXRlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGJjc0NvZGUgPCAweDEwMDAwMDApIHtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4gMTY7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IChkYmNzQ29kZSA+PiA4KSAmIDB4RkY7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlICYgMHhGRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4+IDI0O1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSAoZGJjc0NvZGUgPj4+IDE2KSAmIDB4RkY7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IChkYmNzQ29kZSA+Pj4gOCkgJiAweEZGO1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSAmIDB4RkY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlcU9iaiA9IHNlcU9iajtcbiAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSBsZWFkU3Vycm9nYXRlO1xuICAgIHJldHVybiBuZXdCdWYuc2xpY2UoMCwgaik7XG59XG5cbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5sZWFkU3Vycm9nYXRlID09PSAtMSAmJiB0aGlzLnNlcU9iaiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47IC8vIEFsbCBjbGVhbi4gTW9zdCBvZnRlbiBjYXNlLlxuXG4gICAgdmFyIG5ld0J1ZiA9IEJ1ZmZlci5hbGxvYygxMCksIGogPSAwO1xuXG4gICAgaWYgKHRoaXMuc2VxT2JqKSB7IC8vIFdlJ3JlIGluIHRoZSBzZXF1ZW5jZS5cbiAgICAgICAgdmFyIGRiY3NDb2RlID0gdGhpcy5zZXFPYmpbREVGX0NIQVJdO1xuICAgICAgICBpZiAoZGJjc0NvZGUgIT09IHVuZGVmaW5lZCkgeyAvLyBXcml0ZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlLlxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlIDwgMHgxMDApIHtcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiA4OyAgIC8vIGhpZ2ggYnl0ZVxuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgJiAweEZGOyAvLyBsb3cgYnl0ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU2VlIHRvZG8gYWJvdmUuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXFPYmogPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVhZFN1cnJvZ2F0ZSAhPT0gLTEpIHtcbiAgICAgICAgLy8gSW5jb21wbGV0ZSBzdXJyb2dhdGUgcGFpciAtIG9ubHkgbGVhZCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgIG5ld0J1ZltqKytdID0gdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU7XG4gICAgICAgIHRoaXMubGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gbmV3QnVmLnNsaWNlKDAsIGopO1xufVxuXG4vLyBFeHBvcnQgZm9yIHRlc3RpbmdcbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS5maW5kSWR4ID0gZmluZElkeDtcblxuXG4vLyA9PSBEZWNvZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBEQkNTRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIC8vIERlY29kZXIgc3RhdGVcbiAgICB0aGlzLm5vZGVJZHggPSAwO1xuICAgIHRoaXMucHJldkJ5dGVzID0gW107XG5cbiAgICAvLyBTdGF0aWMgZGF0YVxuICAgIHRoaXMuZGVjb2RlVGFibGVzID0gY29kZWMuZGVjb2RlVGFibGVzO1xuICAgIHRoaXMuZGVjb2RlVGFibGVTZXEgPSBjb2RlYy5kZWNvZGVUYWJsZVNlcTtcbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGNvZGVjLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICB0aGlzLmdiMTgwMzAgPSBjb2RlYy5nYjE4MDMwO1xufVxuXG5EQkNTRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgbmV3QnVmID0gQnVmZmVyLmFsbG9jKGJ1Zi5sZW5ndGgqMiksXG4gICAgICAgIG5vZGVJZHggPSB0aGlzLm5vZGVJZHgsIFxuICAgICAgICBwcmV2Qnl0ZXMgPSB0aGlzLnByZXZCeXRlcywgcHJldk9mZnNldCA9IHRoaXMucHJldkJ5dGVzLmxlbmd0aCxcbiAgICAgICAgc2VxU3RhcnQgPSAtdGhpcy5wcmV2Qnl0ZXMubGVuZ3RoLCAvLyBpZHggb2YgdGhlIHN0YXJ0IG9mIGN1cnJlbnQgcGFyc2VkIHNlcXVlbmNlLlxuICAgICAgICB1Q29kZTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY3VyQnl0ZSA9IChpID49IDApID8gYnVmW2ldIDogcHJldkJ5dGVzW2kgKyBwcmV2T2Zmc2V0XTtcblxuICAgICAgICAvLyBMb29rdXAgaW4gY3VycmVudCB0cmllIG5vZGUuXG4gICAgICAgIHZhciB1Q29kZSA9IHRoaXMuZGVjb2RlVGFibGVzW25vZGVJZHhdW2N1ckJ5dGVdO1xuXG4gICAgICAgIGlmICh1Q29kZSA+PSAwKSB7IFxuICAgICAgICAgICAgLy8gTm9ybWFsIGNoYXJhY3RlciwganVzdCB1c2UgaXQuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPT09IFVOQVNTSUdORUQpIHsgLy8gVW5rbm93biBjaGFyLlxuICAgICAgICAgICAgLy8gVE9ETzogQ2FsbGJhY2sgd2l0aCBzZXEuXG4gICAgICAgICAgICB1Q29kZSA9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICBpID0gc2VxU3RhcnQ7IC8vIFNraXAgb25lIGJ5dGUgKCdpJyB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IHRoZSBmb3IgbG9vcCkgYW5kIHRyeSB0byBwYXJzZSBhZ2Fpbi5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA9PT0gR0IxODAzMF9DT0RFKSB7XG4gICAgICAgICAgICBpZiAoaSA+PSAzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHB0ciA9IChidWZbaS0zXS0weDgxKSoxMjYwMCArIChidWZbaS0yXS0weDMwKSoxMjYwICsgKGJ1ZltpLTFdLTB4ODEpKjEwICsgKGN1ckJ5dGUtMHgzMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBwdHIgPSAocHJldkJ5dGVzW2ktMytwcmV2T2Zmc2V0XS0weDgxKSoxMjYwMCArIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpLTIgPj0gMCkgPyBidWZbaS0yXSA6IHByZXZCeXRlc1tpLTIrcHJldk9mZnNldF0pLTB4MzApKjEyNjAgKyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaS0xID49IDApID8gYnVmW2ktMV0gOiBwcmV2Qnl0ZXNbaS0xK3ByZXZPZmZzZXRdKS0weDgxKSoxMCArIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VyQnl0ZS0weDMwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpZHggPSBmaW5kSWR4KHRoaXMuZ2IxODAzMC5nYkNoYXJzLCBwdHIpO1xuICAgICAgICAgICAgdUNvZGUgPSB0aGlzLmdiMTgwMzAudUNoYXJzW2lkeF0gKyBwdHIgLSB0aGlzLmdiMTgwMzAuZ2JDaGFyc1tpZHhdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlIDw9IE5PREVfU1RBUlQpIHsgLy8gR28gdG8gbmV4dCB0cmllIG5vZGUuXG4gICAgICAgICAgICBub2RlSWR4ID0gTk9ERV9TVEFSVCAtIHVDb2RlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPD0gU0VRX1NUQVJUKSB7IC8vIE91dHB1dCBhIHNlcXVlbmNlIG9mIGNoYXJzLlxuICAgICAgICAgICAgdmFyIHNlcSA9IHRoaXMuZGVjb2RlVGFibGVTZXFbU0VRX1NUQVJUIC0gdUNvZGVdO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzZXEubGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAgICAgICAgICAgdUNvZGUgPSBzZXFba107XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZSA+PiA4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdUNvZGUgPSBzZXFbc2VxLmxlbmd0aC0xXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpY29udi1saXRlIGludGVybmFsIGVycm9yOiBpbnZhbGlkIGRlY29kaW5nIHRhYmxlIHZhbHVlIFwiICsgdUNvZGUgKyBcIiBhdCBcIiArIG5vZGVJZHggKyBcIi9cIiArIGN1ckJ5dGUpO1xuXG4gICAgICAgIC8vIFdyaXRlIHRoZSBjaGFyYWN0ZXIgdG8gYnVmZmVyLCBoYW5kbGluZyBoaWdoZXIgcGxhbmVzIHVzaW5nIHN1cnJvZ2F0ZSBwYWlyLlxuICAgICAgICBpZiAodUNvZGUgPj0gMHgxMDAwMCkgeyBcbiAgICAgICAgICAgIHVDb2RlIC09IDB4MTAwMDA7XG4gICAgICAgICAgICB2YXIgdUNvZGVMZWFkID0gMHhEODAwIHwgKHVDb2RlID4+IDEwKTtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGVMZWFkICYgMHhGRjtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGVMZWFkID4+IDg7XG5cbiAgICAgICAgICAgIHVDb2RlID0gMHhEQzAwIHwgKHVDb2RlICYgMHgzRkYpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgJiAweEZGO1xuICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlID4+IDg7XG5cbiAgICAgICAgLy8gUmVzZXQgdHJpZSBub2RlLlxuICAgICAgICBub2RlSWR4ID0gMDsgc2VxU3RhcnQgPSBpKzE7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlSWR4ID0gbm9kZUlkeDtcbiAgICB0aGlzLnByZXZCeXRlcyA9IChzZXFTdGFydCA+PSAwKVxuICAgICAgICA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ1Ziwgc2VxU3RhcnQpXG4gICAgICAgIDogcHJldkJ5dGVzLnNsaWNlKHNlcVN0YXJ0ICsgcHJldk9mZnNldCkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ1ZikpO1xuXG4gICAgcmV0dXJuIG5ld0J1Zi5zbGljZSgwLCBqKS50b1N0cmluZygndWNzMicpO1xufVxuXG5EQkNTRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJldCA9ICcnO1xuXG4gICAgLy8gVHJ5IHRvIHBhcnNlIGFsbCByZW1haW5pbmcgY2hhcnMuXG4gICAgd2hpbGUgKHRoaXMucHJldkJ5dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gU2tpcCAxIGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyLlxuICAgICAgICByZXQgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgIHZhciBieXRlc0FyciA9IHRoaXMucHJldkJ5dGVzLnNsaWNlKDEpO1xuXG4gICAgICAgIC8vIFBhcnNlIHJlbWFpbmluZyBhcyB1c3VhbC5cbiAgICAgICAgdGhpcy5wcmV2Qnl0ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICAgICAgaWYgKGJ5dGVzQXJyLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXQgKz0gdGhpcy53cml0ZShieXRlc0Fycik7XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2Qnl0ZXMgPSBbXTtcbiAgICB0aGlzLm5vZGVJZHggPSAwO1xuICAgIHJldHVybiByZXQ7XG59XG5cbi8vIEJpbmFyeSBzZWFyY2ggZm9yIEdCMTgwMzAuIFJldHVybnMgbGFyZ2VzdCBpIHN1Y2ggdGhhdCB0YWJsZVtpXSA8PSB2YWwuXG5mdW5jdGlvbiBmaW5kSWR4KHRhYmxlLCB2YWwpIHtcbiAgICBpZiAodGFibGVbMF0gPiB2YWwpXG4gICAgICAgIHJldHVybiAtMTtcblxuICAgIHZhciBsID0gMCwgciA9IHRhYmxlLmxlbmd0aDtcbiAgICB3aGlsZSAobCA8IHItMSkgeyAvLyBhbHdheXMgdGFibGVbbF0gPD0gdmFsIDwgdGFibGVbcl1cbiAgICAgICAgdmFyIG1pZCA9IGwgKyAoKHItbCsxKSA+PiAxKTtcbiAgICAgICAgaWYgKHRhYmxlW21pZF0gPD0gdmFsKVxuICAgICAgICAgICAgbCA9IG1pZDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgciA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGw7XG59XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTk5MDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vLyBEZXNjcmlwdGlvbiBvZiBzdXBwb3J0ZWQgZG91YmxlIGJ5dGUgZW5jb2RpbmdzIGFuZCBhbGlhc2VzLlxuLy8gVGFibGVzIGFyZSBub3QgcmVxdWlyZSgpLWQgdW50aWwgdGhleSBhcmUgbmVlZGVkIHRvIHNwZWVkIHVwIGxpYnJhcnkgbG9hZC5cbi8vIHJlcXVpcmUoKS1zIGFyZSBkaXJlY3QgdG8gc3VwcG9ydCBCcm93c2VyaWZ5LlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBcbiAgICAvLyA9PSBKYXBhbmVzZS9TaGlmdEpJUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQWxsIGphcGFuZXNlIGVuY29kaW5ncyBhcmUgYmFzZWQgb24gSklTIFggc2V0IG9mIHN0YW5kYXJkczpcbiAgICAvLyBKSVMgWCAwMjAxIC0gU2luZ2xlLWJ5dGUgZW5jb2Rpbmcgb2YgQVNDSUkgKyDCpSArIEthbmEgY2hhcnMgYXQgMHhBMS0weERGLlxuICAgIC8vIEpJUyBYIDAyMDggLSBNYWluIHNldCBvZiA2ODc5IGNoYXJhY3RlcnMsIHBsYWNlZCBpbiA5NHg5NCBwbGFuZSwgdG8gYmUgZW5jb2RlZCBieSAyIGJ5dGVzLiBcbiAgICAvLyAgICAgICAgICAgICAgSGFzIHNldmVyYWwgdmFyaWF0aW9ucyBpbiAxOTc4LCAxOTgzLCAxOTkwIGFuZCAxOTk3LlxuICAgIC8vIEpJUyBYIDAyMTIgLSBTdXBwbGVtZW50YXJ5IHBsYW5lIG9mIDYwNjcgY2hhcnMgaW4gOTR4OTQgcGxhbmUuIDE5OTAuIEVmZmVjdGl2ZWx5IGRlYWQuXG4gICAgLy8gSklTIFggMDIxMyAtIEV4dGVuc2lvbiBhbmQgbW9kZXJuIHJlcGxhY2VtZW50IG9mIDAyMDggYW5kIDAyMTIuIFRvdGFsIGNoYXJzOiAxMTIzMy5cbiAgICAvLyAgICAgICAgICAgICAgMiBwbGFuZXMsIGZpcnN0IGlzIHN1cGVyc2V0IG9mIDAyMDgsIHNlY29uZCAtIHJldmlzZWQgMDIxMi5cbiAgICAvLyAgICAgICAgICAgICAgSW50cm9kdWNlZCBpbiAyMDAwLCByZXZpc2VkIDIwMDQuIFNvbWUgY2hhcmFjdGVycyBhcmUgaW4gVW5pY29kZSBQbGFuZSAyICgweDJ4eHh4KVxuXG4gICAgLy8gQnl0ZSBlbmNvZGluZ3MgYXJlOlxuICAgIC8vICAqIFNoaWZ0X0pJUzogQ29tcGF0aWJsZSB3aXRoIDAyMDEsIHVzZXMgbm90IGRlZmluZWQgY2hhcnMgaW4gdG9wIGhhbGYgYXMgbGVhZCBieXRlcyBmb3IgZG91YmxlLWJ5dGVcbiAgICAvLyAgICAgICAgICAgICAgIGVuY29kaW5nIG9mIDAyMDguIExlYWQgYnl0ZSByYW5nZXM6IDB4ODEtMHg5RiwgMHhFMC0weEVGOyBUcmFpbCBieXRlIHJhbmdlczogMHg0MC0weDdFLCAweDgwLTB4OUUsIDB4OUYtMHhGQy5cbiAgICAvLyAgICAgICAgICAgICAgIFdpbmRvd3MgQ1A5MzIgaXMgYSBzdXBlcnNldCBvZiBTaGlmdF9KSVMuIFNvbWUgY29tcGFuaWVzIGFkZGVkIG1vcmUgY2hhcnMsIG5vdGFibHkgS0RESS5cbiAgICAvLyAgKiBFVUMtSlA6ICAgIFVwIHRvIDMgYnl0ZXMgcGVyIGNoYXJhY3Rlci4gVXNlZCBtb3N0bHkgb24gKm5peGVzLlxuICAgIC8vICAgICAgICAgICAgICAgMHgwMC0weDdGICAgICAgIC0gbG93ZXIgcGFydCBvZiAwMjAxXG4gICAgLy8gICAgICAgICAgICAgICAweDhFLCAweEExLTB4REYgLSB1cHBlciBwYXJ0IG9mIDAyMDFcbiAgICAvLyAgICAgICAgICAgICAgICgweEExLTB4RkUpeDIgICAtIDAyMDggcGxhbmUgKDk0eDk0KS5cbiAgICAvLyAgICAgICAgICAgICAgIDB4OEYsICgweEExLTB4RkUpeDIgLSAwMjEyIHBsYW5lICg5NHg5NCkuXG4gICAgLy8gICogSklTIFggMjA4OiA3LWJpdCwgZGlyZWN0IGVuY29kaW5nIG9mIDAyMDguIEJ5dGUgcmFuZ2VzOiAweDIxLTB4N0UgKDk0IHZhbHVlcykuIFVuY29tbW9uLlxuICAgIC8vICAgICAgICAgICAgICAgVXNlZCBhcy1pcyBpbiBJU08yMDIyIGZhbWlseS5cbiAgICAvLyAgKiBJU08yMDIyLUpQOiBTdGF0ZWZ1bCBlbmNvZGluZywgd2l0aCBlc2NhcGUgc2VxdWVuY2VzIHRvIHN3aXRjaCBiZXR3ZWVuIEFTQ0lJLCBcbiAgICAvLyAgICAgICAgICAgICAgICAwMjAxLTE5NzYgUm9tYW4sIDAyMDgtMTk3OCwgMDIwOC0xOTgzLlxuICAgIC8vICAqIElTTzIwMjItSlAtMTogQWRkcyBlc2Mgc2VxIGZvciAwMjEyLTE5OTAuXG4gICAgLy8gICogSVNPMjAyMi1KUC0yOiBBZGRzIGVzYyBzZXEgZm9yIEdCMjMxMy0xOTgwLCBLU1gxMDAxLTE5OTIsIElTTzg4NTktMSwgSVNPODg1OS03LlxuICAgIC8vICAqIElTTzIwMjItSlAtMzogQWRkcyBlc2Mgc2VxIGZvciAwMjAxLTE5NzYgS2FuYSBzZXQsIDAyMTMtMjAwMCBQbGFuZXMgMSwgMi5cbiAgICAvLyAgKiBJU08yMDIyLUpQLTIwMDQ6IEFkZHMgMDIxMy0yMDA0IFBsYW5lIDEuXG4gICAgLy9cbiAgICAvLyBBZnRlciBKSVMgWCAwMjEzIGFwcGVhcmVkLCBTaGlmdF9KSVMtMjAwNCwgRVVDLUpJU1gwMjEzIGFuZCBJU08yMDIyLUpQLTIwMDQgZm9sbG93ZWQsIHdpdGgganVzdCBjaGFuZ2luZyB0aGUgcGxhbmVzLlxuICAgIC8vXG4gICAgLy8gT3ZlcmFsbCwgaXQgc2VlbXMgdGhhdCBpdCdzIGEgbWVzcyA6KCBodHRwOi8vd3d3OC5wbGFsYS5vci5qcC90a3Vib3RhMS91bmljb2RlLXN5bWJvbHMtbWFwMi5odG1sXG5cbiAgICAnc2hpZnRqaXMnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oNzAxNCkgfSxcbiAgICAgICAgZW5jb2RlQWRkOiB7J1xcdTAwYTUnOiAweDVDLCAnXFx1MjAzRSc6IDB4N0V9LFxuICAgICAgICBlbmNvZGVTa2lwVmFsczogW3tmcm9tOiAweEVENDAsIHRvOiAweEY5NDB9XSxcbiAgICB9LFxuICAgICdjc3NoaWZ0amlzJzogJ3NoaWZ0amlzJyxcbiAgICAnbXNrYW5qaSc6ICdzaGlmdGppcycsXG4gICAgJ3NqaXMnOiAnc2hpZnRqaXMnLFxuICAgICd3aW5kb3dzMzFqJzogJ3NoaWZ0amlzJyxcbiAgICAnbXMzMWonOiAnc2hpZnRqaXMnLFxuICAgICd4c2ppcyc6ICdzaGlmdGppcycsXG4gICAgJ3dpbmRvd3M5MzInOiAnc2hpZnRqaXMnLFxuICAgICdtczkzMic6ICdzaGlmdGppcycsXG4gICAgJzkzMic6ICdzaGlmdGppcycsXG4gICAgJ2NwOTMyJzogJ3NoaWZ0amlzJyxcblxuICAgICdldWNqcCc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyg1NjMzKSB9LFxuICAgICAgICBlbmNvZGVBZGQ6IHsnXFx1MDBhNSc6IDB4NUMsICdcXHUyMDNFJzogMHg3RX0sXG4gICAgfSxcblxuICAgIC8vIFRPRE86IEtEREkgZXh0ZW5zaW9uIHRvIFNoaWZ0X0pJU1xuICAgIC8vIFRPRE86IElCTSBDQ1NJRCA5NDIgPSBDUDkzMiwgYnV0IEYwLUY5IGN1c3RvbSBjaGFycyBhbmQgb3RoZXIgY2hhciBjaGFuZ2VzLlxuICAgIC8vIFRPRE86IElCTSBDQ1NJRCA5NDMgPSBTaGlmdF9KSVMgPSBDUDkzMiB3aXRoIG9yaWdpbmFsIFNoaWZ0X0pJUyBsb3dlciAxMjggY2hhcnMuXG5cblxuICAgIC8vID09IENoaW5lc2UvR0JLID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dCS1xuICAgIC8vIFdlIG1vc3RseSBpbXBsZW1lbnQgVzNDIHJlY29tbWVuZGF0aW9uOiBodHRwczovL3d3dy53My5vcmcvVFIvZW5jb2RpbmcvI2diay1lbmNvZGVyXG5cbiAgICAvLyBPbGRlc3QgR0IyMzEyICgxOTgxLCB+NzYwMCBjaGFycykgaXMgYSBzdWJzZXQgb2YgQ1A5MzZcbiAgICAnZ2IyMzEyJzogJ2NwOTM2JyxcbiAgICAnZ2IyMzEyODAnOiAnY3A5MzYnLFxuICAgICdnYjIzMTIxOTgwJzogJ2NwOTM2JyxcbiAgICAnY3NnYjIzMTInOiAnY3A5MzYnLFxuICAgICdjc2lzbzU4Z2IyMzEyODAnOiAnY3A5MzYnLFxuICAgICdldWNjbic6ICdjcDkzNicsXG5cbiAgICAvLyBNaWNyb3NvZnQncyBDUDkzNiBpcyBhIHN1YnNldCBhbmQgYXBwcm94aW1hdGlvbiBvZiBHQksuXG4gICAgJ3dpbmRvd3M5MzYnOiAnY3A5MzYnLFxuICAgICdtczkzNic6ICdjcDkzNicsXG4gICAgJzkzNic6ICdjcDkzNicsXG4gICAgJ2NwOTM2Jzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzMzYpIH0sXG4gICAgfSxcblxuICAgIC8vIEdCSyAofjIyMDAwIGNoYXJzKSBpcyBhbiBleHRlbnNpb24gb2YgQ1A5MzYgdGhhdCBhZGRlZCB1c2VyLW1hcHBlZCBjaGFycyBhbmQgc29tZSBvdGhlci5cbiAgICAnZ2JrJzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiAoX193ZWJwYWNrX3JlcXVpcmVfXygzMzM2KS5jb25jYXQpKF9fd2VicGFja19yZXF1aXJlX18oNDM0NikpIH0sXG4gICAgfSxcbiAgICAneGdiayc6ICdnYmsnLFxuICAgICdpc29pcjU4JzogJ2diaycsXG5cbiAgICAvLyBHQjE4MDMwIGlzIGFuIGFsZ29yaXRobWljIGV4dGVuc2lvbiBvZiBHQksuXG4gICAgLy8gTWFpbiBzb3VyY2U6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9lbmNvZGluZy8jZ2JrLWVuY29kZXJcbiAgICAvLyBodHRwOi8vaWN1LXByb2plY3Qub3JnL2RvY3MvcGFwZXJzL2diMTgwMzAuaHRtbFxuICAgIC8vIGh0dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS9kYXRhL3RydW5rL2NoYXJzZXQvZGF0YS94bWwvZ2ItMTgwMzAtMjAwMC54bWxcbiAgICAvLyBodHRwOi8vd3d3LmtobmdhaS5jb20vY2hpbmVzZS9jaGFybWFwL3RibGdiay5waHA/cGFnZT0wXG4gICAgJ2diMTgwMzAnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIChfX3dlYnBhY2tfcmVxdWlyZV9fKDMzMzYpLmNvbmNhdCkoX193ZWJwYWNrX3JlcXVpcmVfXyg0MzQ2KSkgfSxcbiAgICAgICAgZ2IxODAzMDogZnVuY3Rpb24oKSB7IHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyNTgpIH0sXG4gICAgICAgIGVuY29kZVNraXBWYWxzOiBbMHg4MF0sXG4gICAgICAgIGVuY29kZUFkZDogeyfigqwnOiAweEEyRTN9LFxuICAgIH0sXG5cbiAgICAnY2hpbmVzZSc6ICdnYjE4MDMwJyxcblxuXG4gICAgLy8gPT0gS29yZWFuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEVVQy1LUiwgS1NfQ181NjAxIGFuZCBLUyBYIDEwMDEgYXJlIGV4YWN0bHkgdGhlIHNhbWUuXG4gICAgJ3dpbmRvd3M5NDknOiAnY3A5NDknLFxuICAgICdtczk0OSc6ICdjcDk0OScsXG4gICAgJzk0OSc6ICdjcDk0OScsXG4gICAgJ2NwOTQ5Jzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDczNDgpIH0sXG4gICAgfSxcblxuICAgICdjc2V1Y2tyJzogJ2NwOTQ5JyxcbiAgICAnY3Nrc2M1NjAxMTk4Nyc6ICdjcDk0OScsXG4gICAgJ2V1Y2tyJzogJ2NwOTQ5JyxcbiAgICAnaXNvaXIxNDknOiAnY3A5NDknLFxuICAgICdrb3JlYW4nOiAnY3A5NDknLFxuICAgICdrc2M1NjAxMTk4Nyc6ICdjcDk0OScsXG4gICAgJ2tzYzU2MDExOTg5JzogJ2NwOTQ5JyxcbiAgICAna3NjNTYwMSc6ICdjcDk0OScsXG5cblxuICAgIC8vID09IEJpZzUvVGFpd2FuL0hvbmcgS29uZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBUaGVyZSBhcmUgbG90cyBvZiB0YWJsZXMgZm9yIEJpZzUgYW5kIGNwOTUwLiBQbGVhc2Ugc2VlIHRoZSBmb2xsb3dpbmcgbGlua3MgZm9yIGhpc3Rvcnk6XG4gICAgLy8gaHR0cDovL21venR3Lm9yZy9kb2NzL2JpZzUvICBodHRwOi8vd3d3LmhhaWJsZS5kZS9icnVuby9jaGFyc2V0cy9jb252ZXJzaW9uLXRhYmxlcy9CaWc1Lmh0bWxcbiAgICAvLyBWYXJpYXRpb25zLCBpbiByb3VnaGx5IG51bWJlciBvZiBkZWZpbmVkIGNoYXJzOlxuICAgIC8vICAqIFdpbmRvd3MgQ1AgOTUwOiBNaWNyb3NvZnQgdmFyaWFudCBvZiBCaWc1LiBDYW5vbmljYWw6IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZUL1dJTkRPV1MvQ1A5NTAuVFhUXG4gICAgLy8gICogV2luZG93cyBDUCA5NTE6IE1pY3Jvc29mdCB2YXJpYW50IG9mIEJpZzUtSEtTQ1MtMjAwMS4gU2VlbXMgdG8gYmUgbmV2ZXIgcHVibGljLiBodHRwOi8vbWUuYWJlbGNoZXVuZy5vcmcvYXJ0aWNsZXMvcmVzZWFyY2gvd2hhdC1pcy1jcDk1MS9cbiAgICAvLyAgKiBCaWc1LTIwMDMgKFRhaXdhbiBzdGFuZGFyZCkgYWxtb3N0IHN1cGVyc2V0IG9mIGNwOTUwLlxuICAgIC8vICAqIFVuaWNvZGUtYXQtb24gKFVBTykgLyBNb3ppbGxhIDEuOC4gRmFsbGluZyBvdXQgb2YgdXNlIG9uIHRoZSBXZWIuIE5vdCBzdXBwb3J0ZWQgYnkgb3RoZXIgYnJvd3NlcnMuXG4gICAgLy8gICogQmlnNS1IS1NDUyAoLTIwMDEsIC0yMDA0LCAtMjAwOCkuIEhvbmcgS29uZyBzdGFuZGFyZC4gXG4gICAgLy8gICAgbWFueSB1bmljb2RlIGNvZGUgcG9pbnRzIG1vdmVkIGZyb20gUFVBIHRvIFN1cHBsZW1lbnRhcnkgcGxhbmUgKFUrMlhYWFgpIG92ZXIgdGhlIHllYXJzLlxuICAgIC8vICAgIFBsdXMsIGl0IGhhcyA0IGNvbWJpbmluZyBzZXF1ZW5jZXMuXG4gICAgLy8gICAgU2VlbXMgdGhhdCBNb3ppbGxhIHJlZnVzZWQgdG8gc3VwcG9ydCBpdCBmb3IgMTAgeXJzLiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI0MzEgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEwMjk5XG4gICAgLy8gICAgYmVjYXVzZSBiaWc1LWhrc2NzIGlzIHRoZSBvbmx5IGVuY29kaW5nIHRvIGluY2x1ZGUgYXN0cmFsIGNoYXJhY3RlcnMgaW4gbm9uLWFsZ29yaXRobWljIHdheS5cbiAgICAvLyAgICBJbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBjb25zaXN0ZW50IHdpdGhpbiBicm93c2Vyczsgc29tZXRpbWVzIGxhYmVsZWQgYXMganVzdCBiaWc1LlxuICAgIC8vICAgIE1TIEludGVybmV0IEV4cGxvcmVyIHN3aXRjaGVzIGZyb20gYmlnNSB0byBiaWc1LWhrc2NzIHdoZW4gYSBwYXRjaCBhcHBsaWVkLlxuICAgIC8vICAgIEdyZWF0IGRpc2N1c3Npb24gJiByZWNhcCBvZiB3aGF0J3MgZ29pbmcgb24gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNDcwI2MzMVxuICAgIC8vICAgIEluIHRoZSBlbmNvZGVyLCBpdCBtaWdodCBtYWtlIHNlbnNlIHRvIHN1cHBvcnQgZW5jb2Rpbmcgb2xkIFBVQSBtYXBwaW5ncyB0byBCaWc1IGJ5dGVzIHNlcS1zLlxuICAgIC8vICAgIE9mZmljaWFsIHNwZWM6IGh0dHA6Ly93d3cub2djaW8uZ292LmhrL2VuL2J1c2luZXNzL3RlY2hfcHJvbW90aW9uL2NjbGkvdGVybXMvZG9jLzIwMDNjbXBfMjAwOC50eHRcbiAgICAvLyAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9nY2lvLmdvdi5oay90Yy9idXNpbmVzcy90ZWNoX3Byb21vdGlvbi9jY2xpL3Rlcm1zL2RvYy9oa3Njcy0yMDA4LWJpZzUtaXNvLnR4dFxuICAgIC8vIFxuICAgIC8vIEN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiBob3cgdG8gZGVhbCB3aXRoIEJpZzUoLUhLU0NTKSBpcyBpbiB0aGUgRW5jb2RpbmcgU3RhbmRhcmQsIGh0dHA6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2JpZzUtZW5jb2RlclxuICAgIC8vIFVuaWNvZGUgbWFwcGluZyAoaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvT0JTT0xFVEUvRUFTVEFTSUEvT1RIRVIvQklHNS5UWFQpIGlzIHNhaWQgdG8gYmUgd3JvbmcuXG5cbiAgICAnd2luZG93czk1MCc6ICdjcDk1MCcsXG4gICAgJ21zOTUwJzogJ2NwOTUwJyxcbiAgICAnOTUwJzogJ2NwOTUwJyxcbiAgICAnY3A5NTAnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oNDI4NCkgfSxcbiAgICB9LFxuXG4gICAgLy8gQmlnNSBoYXMgbWFueSB2YXJpYXRpb25zIGFuZCBpcyBhbiBleHRlbnNpb24gb2YgY3A5NTAuIFdlIHVzZSBFbmNvZGluZyBTdGFuZGFyZCdzIGFzIGEgY29uc2Vuc3VzLlxuICAgICdiaWc1JzogJ2JpZzVoa3NjcycsXG4gICAgJ2JpZzVoa3Njcyc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKF9fd2VicGFja19yZXF1aXJlX18oNDI4NCkuY29uY2F0KShfX3dlYnBhY2tfcmVxdWlyZV9fKDM0ODApKSB9LFxuICAgICAgICBlbmNvZGVTa2lwVmFsczogW1xuICAgICAgICAgICAgLy8gQWx0aG91Z2ggRW5jb2RpbmcgU3RhbmRhcmQgc2F5cyB3ZSBzaG91bGQgYXZvaWQgZW5jb2RpbmcgdG8gSEtTQ1MgYXJlYSAoU2VlIFN0ZXAgMSBvZlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2luZGV4LWJpZzUtcG9pbnRlciksIHdlIHN0aWxsIGRvIGl0IHRvIGluY3JlYXNlIGNvbXBhdGliaWxpdHkgd2l0aCBJQ1UuXG4gICAgICAgICAgICAvLyBCdXQgaWYgYSBzaW5nbGUgdW5pY29kZSBwb2ludCBjYW4gYmUgZW5jb2RlZCBib3RoIGFzIEhLU0NTIGFuZCByZWd1bGFyIEJpZzUsIHdlIHByZWZlciB0aGUgbGF0dGVyLlxuICAgICAgICAgICAgMHg4ZTY5LCAweDhlNmYsIDB4OGU3ZSwgMHg4ZWFiLCAweDhlYjQsIDB4OGVjZCwgMHg4ZWQwLCAweDhmNTcsIDB4OGY2OSwgMHg4ZjZlLCAweDhmY2IsIDB4OGZmZSxcbiAgICAgICAgICAgIDB4OTA2ZCwgMHg5MDdhLCAweDkwYzQsIDB4OTBkYywgMHg5MGYxLCAweDkxYmYsIDB4OTJhZiwgMHg5MmIwLCAweDkyYjEsIDB4OTJiMiwgMHg5MmQxLCAweDk0NDcsIDB4OTRjYSxcbiAgICAgICAgICAgIDB4OTVkOSwgMHg5NmZjLCAweDk5NzUsIDB4OWI3NiwgMHg5Yjc4LCAweDliN2IsIDB4OWJjNiwgMHg5YmRlLCAweDliZWMsIDB4OWJmNiwgMHg5YzQyLCAweDljNTMsIDB4OWM2MixcbiAgICAgICAgICAgIDB4OWM2OCwgMHg5YzZiLCAweDljNzcsIDB4OWNiYywgMHg5Y2JkLCAweDljZDAsIDB4OWQ1NywgMHg5ZDVhLCAweDlkYzQsIDB4OWRlZiwgMHg5ZGZiLCAweDllYTksIDB4OWVlZixcbiAgICAgICAgICAgIDB4OWVmZCwgMHg5ZjYwLCAweDlmY2IsIDB4YTA3NywgMHhhMGRjLCAweGEwZGYsIDB4OGZjYywgMHg5MmM4LCAweDk2NDQsIDB4OTZlZCxcblxuICAgICAgICAgICAgLy8gU3RlcCAyIG9mIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNpbmRleC1iaWc1LXBvaW50ZXI6IFVzZSBsYXN0IHBvaW50ZXIgZm9yIFUrMjU1MCwgVSsyNTVFLCBVKzI1NjEsIFUrMjU2QSwgVSs1MzQxLCBvciBVKzUzNDVcbiAgICAgICAgICAgIDB4YTJhNCwgMHhhMmE1LCAweGEyYTcsIDB4YTJhNiwgMHhhMmNjLCAweGEyY2UsXG4gICAgICAgIF0sXG4gICAgfSxcblxuICAgICdjbmJpZzUnOiAnYmlnNWhrc2NzJyxcbiAgICAnY3NiaWc1JzogJ2JpZzVoa3NjcycsXG4gICAgJ3h4YmlnNSc6ICdiaWc1aGtzY3MnLFxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjkzNDpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vLyBVcGRhdGUgdGhpcyBhcnJheSBpZiB5b3UgYWRkL3JlbmFtZS9yZW1vdmUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuXG4vLyBXZSBzdXBwb3J0IEJyb3dzZXJpZnkgYnkgc2tpcHBpbmcgYXV0b21hdGljIG1vZHVsZSBkaXNjb3ZlcnkgYW5kIHJlcXVpcmluZyBtb2R1bGVzIGRpcmVjdGx5LlxudmFyIG1vZHVsZXMgPSBbXG4gICAgX193ZWJwYWNrX3JlcXVpcmVfXygxMDI1KSxcbiAgICBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2ODgpLFxuICAgIF9fd2VicGFja19yZXF1aXJlX18oMTI3OSksXG4gICAgX193ZWJwYWNrX3JlcXVpcmVfXyg3NTgpLFxuICAgIF9fd2VicGFja19yZXF1aXJlX18oOTA2OCksXG4gICAgX193ZWJwYWNrX3JlcXVpcmVfXygzNzY5KSxcbiAgICBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwMTgpLFxuICAgIF9fd2VicGFja19yZXF1aXJlX18oNjg4KSxcbiAgICBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5OTApLFxuXTtcblxuLy8gUHV0IGFsbCBlbmNvZGluZy9hbGlhcy9jb2RlYyBkZWZpbml0aW9ucyB0byBzaW5nbGUgb2JqZWN0IGFuZCBleHBvcnQgaXQuXG5mb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbW9kdWxlID0gbW9kdWxlc1tpXTtcbiAgICBmb3IgKHZhciBlbmMgaW4gbW9kdWxlKVxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZHVsZSwgZW5jKSlcbiAgICAgICAgICAgIGV4cG9ydHNbZW5jXSA9IG1vZHVsZVtlbmNdO1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMDI1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgQnVmZmVyID0gKF9fd2VicGFja19yZXF1aXJlX18oNzEwMykuQnVmZmVyKTtcblxuLy8gRXhwb3J0IE5vZGUuanMgaW50ZXJuYWwgZW5jb2RpbmdzLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBFbmNvZGluZ3NcbiAgICB1dGY4OiAgIHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWV9LFxuICAgIGNlc3U4OiAgeyB0eXBlOiBcIl9pbnRlcm5hbFwiLCBib21Bd2FyZTogdHJ1ZX0sXG4gICAgdW5pY29kZTExdXRmODogXCJ1dGY4XCIsXG5cbiAgICB1Y3MyOiAgIHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWV9LFxuICAgIHV0ZjE2bGU6IFwidWNzMlwiLFxuXG4gICAgYmluYXJ5OiB7IHR5cGU6IFwiX2ludGVybmFsXCIgfSxcbiAgICBiYXNlNjQ6IHsgdHlwZTogXCJfaW50ZXJuYWxcIiB9LFxuICAgIGhleDogICAgeyB0eXBlOiBcIl9pbnRlcm5hbFwiIH0sXG5cbiAgICAvLyBDb2RlYy5cbiAgICBfaW50ZXJuYWw6IEludGVybmFsQ29kZWMsXG59O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBJbnRlcm5hbENvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmVuYyA9IGNvZGVjT3B0aW9ucy5lbmNvZGluZ05hbWU7XG4gICAgdGhpcy5ib21Bd2FyZSA9IGNvZGVjT3B0aW9ucy5ib21Bd2FyZTtcblxuICAgIGlmICh0aGlzLmVuYyA9PT0gXCJiYXNlNjRcIilcbiAgICAgICAgdGhpcy5lbmNvZGVyID0gSW50ZXJuYWxFbmNvZGVyQmFzZTY0O1xuICAgIGVsc2UgaWYgKHRoaXMuZW5jID09PSBcImNlc3U4XCIpIHtcbiAgICAgICAgdGhpcy5lbmMgPSBcInV0ZjhcIjsgLy8gVXNlIHV0ZjggZm9yIGRlY29kaW5nLlxuICAgICAgICB0aGlzLmVuY29kZXIgPSBJbnRlcm5hbEVuY29kZXJDZXN1ODtcblxuICAgICAgICAvLyBBZGQgZGVjb2RlciBmb3IgdmVyc2lvbnMgb2YgTm9kZSBub3Qgc3VwcG9ydGluZyBDRVNVLThcbiAgICAgICAgaWYgKEJ1ZmZlci5mcm9tKCdlZGEwYmRlZGIyYTknLCAnaGV4JykudG9TdHJpbmcoKSAhPT0gJ/CfkqknKSB7XG4gICAgICAgICAgICB0aGlzLmRlY29kZXIgPSBJbnRlcm5hbERlY29kZXJDZXN1ODtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENoYXJVbmljb2RlID0gaWNvbnYuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5JbnRlcm5hbENvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gSW50ZXJuYWxFbmNvZGVyO1xuSW50ZXJuYWxDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IEludGVybmFsRGVjb2RlcjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gV2UgdXNlIG5vZGUuanMgaW50ZXJuYWwgZGVjb2Rlci4gSXRzIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBhcyBvdXJzLlxudmFyIFN0cmluZ0RlY29kZXIgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyNTUzKS8qIC5TdHJpbmdEZWNvZGVyICovIC5zKTtcblxuaWYgKCFTdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQpIC8vIE5vZGUgdjAuOCBkb2Vzbid0IGhhdmUgdGhpcyBtZXRob2QuXG4gICAgU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7fTtcblxuXG5mdW5jdGlvbiBJbnRlcm5hbERlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2Rlcihjb2RlYy5lbmMpO1xufVxuXG5JbnRlcm5hbERlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgICBidWYgPSBCdWZmZXIuZnJvbShidWYpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoYnVmKTtcbn1cblxuSW50ZXJuYWxEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpO1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFbmNvZGVyIGlzIG1vc3RseSB0cml2aWFsXG5cbmZ1bmN0aW9uIEludGVybmFsRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuZW5jID0gY29kZWMuZW5jO1xufVxuXG5JbnRlcm5hbEVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgdGhpcy5lbmMpO1xufVxuXG5JbnRlcm5hbEVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGNlcHQgYmFzZTY0IGVuY29kZXIsIHdoaWNoIG11c3Qga2VlcCBpdHMgc3RhdGUuXG5cbmZ1bmN0aW9uIEludGVybmFsRW5jb2RlckJhc2U2NChvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMucHJldlN0ciA9ICcnO1xufVxuXG5JbnRlcm5hbEVuY29kZXJCYXNlNjQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgc3RyID0gdGhpcy5wcmV2U3RyICsgc3RyO1xuICAgIHZhciBjb21wbGV0ZVF1YWRzID0gc3RyLmxlbmd0aCAtIChzdHIubGVuZ3RoICUgNCk7XG4gICAgdGhpcy5wcmV2U3RyID0gc3RyLnNsaWNlKGNvbXBsZXRlUXVhZHMpO1xuICAgIHN0ciA9IHN0ci5zbGljZSgwLCBjb21wbGV0ZVF1YWRzKTtcblxuICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIsIFwiYmFzZTY0XCIpO1xufVxuXG5JbnRlcm5hbEVuY29kZXJCYXNlNjQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLnByZXZTdHIsIFwiYmFzZTY0XCIpO1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDRVNVLTggZW5jb2RlciBpcyBhbHNvIHNwZWNpYWwuXG5cbmZ1bmN0aW9uIEludGVybmFsRW5jb2RlckNlc3U4KG9wdGlvbnMsIGNvZGVjKSB7XG59XG5cbkludGVybmFsRW5jb2RlckNlc3U4LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2Moc3RyLmxlbmd0aCAqIDMpLCBidWZJZHggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBOYWl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGl0IHdvcmtzIGJlY2F1c2UgQ0VTVS04IGlzIGVzcGVjaWFsbHkgZWFzeVxuICAgICAgICAvLyB0byBjb252ZXJ0IGZyb20gVVRGLTE2ICh3aGljaCBhbGwgSlMgc3RyaW5ncyBhcmUgZW5jb2RlZCBpbikuXG4gICAgICAgIGlmIChjaGFyQ29kZSA8IDB4ODApXG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gY2hhckNvZGU7XG4gICAgICAgIGVsc2UgaWYgKGNoYXJDb2RlIDwgMHg4MDApIHtcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAweEMwICsgKGNoYXJDb2RlID4+PiA2KTtcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAweDgwICsgKGNoYXJDb2RlICYgMHgzZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIGNoYXJDb2RlIHdpbGwgYWx3YXlzIGJlIDwgMHgxMDAwMCBpbiBqYXZhc2NyaXB0LlxuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4RTAgKyAoY2hhckNvZGUgPj4+IDEyKTtcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAweDgwICsgKChjaGFyQ29kZSA+Pj4gNikgJiAweDNmKTtcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAweDgwICsgKGNoYXJDb2RlICYgMHgzZik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xufVxuXG5JbnRlcm5hbEVuY29kZXJDZXN1OC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDRVNVLTggZGVjb2RlciBpcyBub3QgaW1wbGVtZW50ZWQgaW4gTm9kZSB2NC4wK1xuXG5mdW5jdGlvbiBJbnRlcm5hbERlY29kZXJDZXN1OChvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuYWNjID0gMDtcbiAgICB0aGlzLmNvbnRCeXRlcyA9IDA7XG4gICAgdGhpcy5hY2NCeXRlcyA9IDA7XG4gICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBjb2RlYy5kZWZhdWx0Q2hhclVuaWNvZGU7XG59XG5cbkludGVybmFsRGVjb2RlckNlc3U4LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciBhY2MgPSB0aGlzLmFjYywgY29udEJ5dGVzID0gdGhpcy5jb250Qnl0ZXMsIGFjY0J5dGVzID0gdGhpcy5hY2NCeXRlcywgXG4gICAgICAgIHJlcyA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjdXJCeXRlID0gYnVmW2ldO1xuICAgICAgICBpZiAoKGN1ckJ5dGUgJiAweEMwKSAhPT0gMHg4MCkgeyAvLyBMZWFkaW5nIGJ5dGVcbiAgICAgICAgICAgIGlmIChjb250Qnl0ZXMgPiAwKSB7IC8vIFByZXZpb3VzIGNvZGUgaXMgaW52YWxpZFxuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgICAgICBjb250Qnl0ZXMgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VyQnl0ZSA8IDB4ODApIHsgLy8gU2luZ2xlLWJ5dGUgY29kZVxuICAgICAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGN1ckJ5dGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJCeXRlIDwgMHhFMCkgeyAvLyBUd28tYnl0ZSBjb2RlXG4gICAgICAgICAgICAgICAgYWNjID0gY3VyQnl0ZSAmIDB4MUY7XG4gICAgICAgICAgICAgICAgY29udEJ5dGVzID0gMTsgYWNjQnl0ZXMgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJCeXRlIDwgMHhGMCkgeyAvLyBUaHJlZS1ieXRlIGNvZGVcbiAgICAgICAgICAgICAgICBhY2MgPSBjdXJCeXRlICYgMHgwRjtcbiAgICAgICAgICAgICAgICBjb250Qnl0ZXMgPSAyOyBhY2NCeXRlcyA9IDE7XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBGb3VyIG9yIG1vcmUgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIENFU1UtOC5cbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7IC8vIENvbnRpbnVhdGlvbiBieXRlXG4gICAgICAgICAgICBpZiAoY29udEJ5dGVzID4gMCkgeyAvLyBXZSdyZSB3YWl0aW5nIGZvciBpdC5cbiAgICAgICAgICAgICAgICBhY2MgPSAoYWNjIDw8IDYpIHwgKGN1ckJ5dGUgJiAweDNmKTtcbiAgICAgICAgICAgICAgICBjb250Qnl0ZXMtLTsgYWNjQnl0ZXMrKztcbiAgICAgICAgICAgICAgICBpZiAoY29udEJ5dGVzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBvdmVybG9uZyBlbmNvZGluZywgYnV0IHN1cHBvcnQgTW9kaWZpZWQgVVRGLTggKGVuY29kaW5nIE5VTEwgYXMgQzAgODApXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY2NCeXRlcyA9PT0gMiAmJiBhY2MgPCAweDgwICYmIGFjYyA+IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFjY0J5dGVzID09PSAzICYmIGFjYyA8IDB4ODAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBY3R1YWxseSBhZGQgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYWNjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBVbmV4cGVjdGVkIGNvbnRpbnVhdGlvbiBieXRlXG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWNjID0gYWNjOyB0aGlzLmNvbnRCeXRlcyA9IGNvbnRCeXRlczsgdGhpcy5hY2NCeXRlcyA9IGFjY0J5dGVzO1xuICAgIHJldHVybiByZXM7XG59XG5cbkludGVybmFsRGVjb2RlckNlc3U4LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBpZiAodGhpcy5jb250Qnl0ZXMgPiAwKVxuICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gOTA2ODpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEJ1ZmZlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDcxMDMpLkJ1ZmZlcik7XG5cbi8vIFNpbmdsZS1ieXRlIGNvZGVjLiBOZWVkcyBhICdjaGFycycgc3RyaW5nIHBhcmFtZXRlciB0aGF0IGNvbnRhaW5zIDI1NiBvciAxMjggY2hhcnMgdGhhdFxuLy8gY29ycmVzcG9uZCB0byBlbmNvZGVkIGJ5dGVzIChpZiAxMjggLSB0aGVuIGxvd2VyIGhhbGYgaXMgQVNDSUkpLiBcblxuZXhwb3J0cy5fc2JjcyA9IFNCQ1NDb2RlYztcbmZ1bmN0aW9uIFNCQ1NDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgaWYgKCFjb2RlY09wdGlvbnMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuXCIpXG4gICAgXG4gICAgLy8gUHJlcGFyZSBjaGFyIGJ1ZmZlciBmb3IgZGVjb2RpbmcuXG4gICAgaWYgKCFjb2RlY09wdGlvbnMuY2hhcnMgfHwgKGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGggIT09IDEyOCAmJiBjb2RlY09wdGlvbnMuY2hhcnMubGVuZ3RoICE9PSAyNTYpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyAnXCIrY29kZWNPcHRpb25zLnR5cGUrXCInIGhhcyBpbmNvcnJlY3QgJ2NoYXJzJyAobXVzdCBiZSBvZiBsZW4gMTI4IG9yIDI1NilcIik7XG4gICAgXG4gICAgaWYgKGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGggPT09IDEyOCkge1xuICAgICAgICB2YXIgYXNjaWlTdHJpbmcgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyODsgaSsrKVxuICAgICAgICAgICAgYXNjaWlTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTtcbiAgICAgICAgY29kZWNPcHRpb25zLmNoYXJzID0gYXNjaWlTdHJpbmcgKyBjb2RlY09wdGlvbnMuY2hhcnM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWNvZGVCdWYgPSBCdWZmZXIuZnJvbShjb2RlY09wdGlvbnMuY2hhcnMsICd1Y3MyJyk7XG4gICAgXG4gICAgLy8gRW5jb2RpbmcgYnVmZmVyLlxuICAgIHZhciBlbmNvZGVCdWYgPSBCdWZmZXIuYWxsb2MoNjU1MzYsIGljb252LmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZWNPcHRpb25zLmNoYXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICBlbmNvZGVCdWZbY29kZWNPcHRpb25zLmNoYXJzLmNoYXJDb2RlQXQoaSldID0gaTtcblxuICAgIHRoaXMuZW5jb2RlQnVmID0gZW5jb2RlQnVmO1xufVxuXG5TQkNTQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBTQkNTRW5jb2RlcjtcblNCQ1NDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFNCQ1NEZWNvZGVyO1xuXG5cbmZ1bmN0aW9uIFNCQ1NFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5lbmNvZGVCdWYgPSBjb2RlYy5lbmNvZGVCdWY7XG59XG5cblNCQ1NFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2Moc3RyLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXG4gICAgICAgIGJ1ZltpXSA9IHRoaXMuZW5jb2RlQnVmW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICBcbiAgICByZXR1cm4gYnVmO1xufVxuXG5TQkNTRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuZnVuY3Rpb24gU0JDU0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmRlY29kZUJ1ZiA9IGNvZGVjLmRlY29kZUJ1Zjtcbn1cblxuU0JDU0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgLy8gU3RyaW5ncyBhcmUgaW1tdXRhYmxlIGluIEpTIC0+IHdlIHVzZSB1Y3MyIGJ1ZmZlciB0byBzcGVlZCB1cCBjb21wdXRhdGlvbnMuXG4gICAgdmFyIGRlY29kZUJ1ZiA9IHRoaXMuZGVjb2RlQnVmO1xuICAgIHZhciBuZXdCdWYgPSBCdWZmZXIuYWxsb2MoYnVmLmxlbmd0aCoyKTtcbiAgICB2YXIgaWR4MSA9IDAsIGlkeDIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlkeDEgPSBidWZbaV0qMjsgaWR4MiA9IGkqMjtcbiAgICAgICAgbmV3QnVmW2lkeDJdID0gZGVjb2RlQnVmW2lkeDFdO1xuICAgICAgICBuZXdCdWZbaWR4MisxXSA9IGRlY29kZUJ1ZltpZHgxKzFdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QnVmLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblNCQ1NEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzAxODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLy8gR2VuZXJhdGVkIGRhdGEgZm9yIHNiY3MgY29kZWMuIERvbid0IGVkaXQgbWFudWFsbHkuIFJlZ2VuZXJhdGUgdXNpbmcgZ2VuZXJhdGlvbi9nZW4tc2Jjcy5qcyBzY3JpcHQuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCI0MzdcIjogXCJjcDQzN1wiLFxuICBcIjczN1wiOiBcImNwNzM3XCIsXG4gIFwiNzc1XCI6IFwiY3A3NzVcIixcbiAgXCI4NTBcIjogXCJjcDg1MFwiLFxuICBcIjg1MlwiOiBcImNwODUyXCIsXG4gIFwiODU1XCI6IFwiY3A4NTVcIixcbiAgXCI4NTZcIjogXCJjcDg1NlwiLFxuICBcIjg1N1wiOiBcImNwODU3XCIsXG4gIFwiODU4XCI6IFwiY3A4NThcIixcbiAgXCI4NjBcIjogXCJjcDg2MFwiLFxuICBcIjg2MVwiOiBcImNwODYxXCIsXG4gIFwiODYyXCI6IFwiY3A4NjJcIixcbiAgXCI4NjNcIjogXCJjcDg2M1wiLFxuICBcIjg2NFwiOiBcImNwODY0XCIsXG4gIFwiODY1XCI6IFwiY3A4NjVcIixcbiAgXCI4NjZcIjogXCJjcDg2NlwiLFxuICBcIjg2OVwiOiBcImNwODY5XCIsXG4gIFwiODc0XCI6IFwid2luZG93czg3NFwiLFxuICBcIjkyMlwiOiBcImNwOTIyXCIsXG4gIFwiMTA0NlwiOiBcImNwMTA0NlwiLFxuICBcIjExMjRcIjogXCJjcDExMjRcIixcbiAgXCIxMTI1XCI6IFwiY3AxMTI1XCIsXG4gIFwiMTEyOVwiOiBcImNwMTEyOVwiLFxuICBcIjExMzNcIjogXCJjcDExMzNcIixcbiAgXCIxMTYxXCI6IFwiY3AxMTYxXCIsXG4gIFwiMTE2MlwiOiBcImNwMTE2MlwiLFxuICBcIjExNjNcIjogXCJjcDExNjNcIixcbiAgXCIxMjUwXCI6IFwid2luZG93czEyNTBcIixcbiAgXCIxMjUxXCI6IFwid2luZG93czEyNTFcIixcbiAgXCIxMjUyXCI6IFwid2luZG93czEyNTJcIixcbiAgXCIxMjUzXCI6IFwid2luZG93czEyNTNcIixcbiAgXCIxMjU0XCI6IFwid2luZG93czEyNTRcIixcbiAgXCIxMjU1XCI6IFwid2luZG93czEyNTVcIixcbiAgXCIxMjU2XCI6IFwid2luZG93czEyNTZcIixcbiAgXCIxMjU3XCI6IFwid2luZG93czEyNTdcIixcbiAgXCIxMjU4XCI6IFwid2luZG93czEyNThcIixcbiAgXCIyODU5MVwiOiBcImlzbzg4NTkxXCIsXG4gIFwiMjg1OTJcIjogXCJpc284ODU5MlwiLFxuICBcIjI4NTkzXCI6IFwiaXNvODg1OTNcIixcbiAgXCIyODU5NFwiOiBcImlzbzg4NTk0XCIsXG4gIFwiMjg1OTVcIjogXCJpc284ODU5NVwiLFxuICBcIjI4NTk2XCI6IFwiaXNvODg1OTZcIixcbiAgXCIyODU5N1wiOiBcImlzbzg4NTk3XCIsXG4gIFwiMjg1OThcIjogXCJpc284ODU5OFwiLFxuICBcIjI4NTk5XCI6IFwiaXNvODg1OTlcIixcbiAgXCIyODYwMFwiOiBcImlzbzg4NTkxMFwiLFxuICBcIjI4NjAxXCI6IFwiaXNvODg1OTExXCIsXG4gIFwiMjg2MDNcIjogXCJpc284ODU5MTNcIixcbiAgXCIyODYwNFwiOiBcImlzbzg4NTkxNFwiLFxuICBcIjI4NjA1XCI6IFwiaXNvODg1OTE1XCIsXG4gIFwiMjg2MDZcIjogXCJpc284ODU5MTZcIixcbiAgXCJ3aW5kb3dzODc0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73vv73vv73vv73igKbvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73igJjigJnigJzigJ3igKLigJPigJTvv73vv73vv73vv73vv73vv73vv73vv73CoOC4geC4guC4g+C4hOC4heC4huC4h+C4iOC4ieC4iuC4i+C4jOC4jeC4juC4j+C4kOC4keC4kuC4k+C4lOC4leC4luC4l+C4mOC4meC4muC4m+C4nOC4neC4nuC4n+C4oOC4oeC4ouC4o+C4pOC4peC4puC4p+C4qOC4qeC4quC4q+C4rOC4reC4ruC4r+C4sOC4seC4suC4s+C4tOC4teC4tuC4t+C4uOC4ueC4uu+/ve+/ve+/ve+/veC4v+C5gOC5geC5guC5g+C5hOC5heC5huC5h+C5iOC5ieC5iuC5i+C5jOC5jeC5juC5j+C5kOC5keC5kuC5k+C5lOC5leC5luC5l+C5mOC5meC5muC5m++/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwid2luODc0XCI6IFwid2luZG93czg3NFwiLFxuICBcImNwODc0XCI6IFwid2luZG93czg3NFwiLFxuICBcIndpbmRvd3MxMjUwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrvv73igJ7igKbigKDigKHvv73igLDFoOKAucWaxaTFvcW577+94oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSixaHigLrFm8Wlxb7FusKgy4fLmMWBwqTEhMKmwqfCqMKpxZ7Cq8Kswq3CrsW7wrDCscubxYLCtMK1wrbCt8K4xIXFn8K7xL3LncS+xbzFlMOBw4LEgsOExLnEhsOHxIzDicSYw4vEmsONw47EjsSQxYPFh8OTw5TFkMOWw5fFmMWuw5rFsMOcw53FosOfxZXDocOixIPDpMS6xIfDp8SNw6nEmcOrxJvDrcOuxI/EkcWExYjDs8O0xZHDtsO3xZnFr8O6xbHDvMO9xaPLmVwiXG4gIH0sXG4gIFwid2luMTI1MFwiOiBcIndpbmRvd3MxMjUwXCIsXG4gIFwiY3AxMjUwXCI6IFwid2luZG93czEyNTBcIixcbiAgXCJ3aW5kb3dzMTI1MVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0ILQg+KAmtGT4oCe4oCm4oCg4oCh4oKs4oCw0InigLnQitCM0IvQj9GS4oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi0ZnigLrRmtGc0ZvRn8Kg0I7RntCIwqTSkMKmwqfQgcKp0ITCq8Kswq3CrtCHwrDCsdCG0ZbSkcK1wrbCt9GR4oSW0ZTCu9GY0IXRldGX0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y9cIlxuICB9LFxuICBcIndpbjEyNTFcIjogXCJ3aW5kb3dzMTI1MVwiLFxuICBcImNwMTI1MVwiOiBcIndpbmRvd3MxMjUxXCIsXG4gIFwid2luZG93czEyNTJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmsaS4oCe4oCm4oCg4oChy4bigLDFoOKAucWS77+9xb3vv73vv73igJjigJnigJzigJ3igKLigJPigJTLnOKEosWh4oC6xZPvv73FvsW4wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/XCJcbiAgfSxcbiAgXCJ3aW4xMjUyXCI6IFwid2luZG93czEyNTJcIixcbiAgXCJjcDEyNTJcIjogXCJ3aW5kb3dzMTI1MlwiLFxuICBcIndpbmRvd3MxMjUzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAoe+/veKAsO+/veKAue+/ve+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEou+/veKAuu+/ve+/ve+/ve+/vcKgzoXOhsKjwqTCpcKmwqfCqMKp77+9wqvCrMKtwq7igJXCsMKxwrLCs86EwrXCtsK3zojOic6KwrvOjMK9zo7Oj86QzpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoe+/vc6jzqTOpc6mzqfOqM6pzqrOq86szq3Ors6vzrDOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4LPg8+Ez4XPhs+Hz4jPic+Kz4vPjM+Nz47vv71cIlxuICB9LFxuICBcIndpbjEyNTNcIjogXCJ3aW5kb3dzMTI1M1wiLFxuICBcImNwMTI1M1wiOiBcIndpbmRvd3MxMjUzXCIsXG4gIFwid2luZG93czEyNTRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmsaS4oCe4oCm4oCg4oChy4bigLDFoOKAucWS77+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLFoeKAusWT77+977+9xbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/EnsORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMSwxZ7Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvxJ/DscOyw7PDtMO1w7bDt8O4w7nDusO7w7zEscWfw79cIlxuICB9LFxuICBcIndpbjEyNTRcIjogXCJ3aW5kb3dzMTI1NFwiLFxuICBcImNwMTI1NFwiOiBcIndpbmRvd3MxMjU0XCIsXG4gIFwid2luZG93czEyNTVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmsaS4oCe4oCm4oCg4oChy4bigLDvv73igLnvv73vv73vv73vv73vv73igJjigJnigJzigJ3igKLigJPigJTLnOKEou+/veKAuu+/ve+/ve+/ve+/vcKgwqHCosKj4oKqwqXCpsKnwqjCqcOXwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5w7fCu8K8wr3CvsK/1rDWsday1rPWtNa11rbWt9a41rnWuta71rzWvda+1r/XgNeB14LXg9ew17HXstez17Tvv73vv73vv73vv73vv73vv73vv73XkNeR15LXk9eU15XXlteX15jXmdea15vXnNed157Xn9eg16HXotej16TXpdem16fXqNep16rvv73vv73igI7igI/vv71cIlxuICB9LFxuICBcIndpbjEyNTVcIjogXCJ3aW5kb3dzMTI1NVwiLFxuICBcImNwMTI1NVwiOiBcIndpbmRvd3MxMjU1XCIsXG4gIFwid2luZG93czEyNTZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrNm+4oCaxpLigJ7igKbigKDigKHLhuKAsNm54oC5xZLahtqY2ojar+KAmOKAmeKAnOKAneKAouKAk+KAlNqp4oSi2pHigLrFk+KAjOKAjdq6wqDYjMKiwqPCpMKlwqbCp8KowqnavsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCudibwrvCvMK9wr7Yn9uB2KHYotij2KTYpdim2KfYqNip2KrYq9is2K3Yrtiv2LDYsdiy2LPYtNi12LbDl9i32LjYudi62YDZgdmC2YPDoNmEw6LZhdmG2YfZiMOnw6jDqcOqw6vZidmKw67Dr9mL2YzZjdmOw7TZj9mQw7fZkcO52ZLDu8O84oCO4oCP25JcIlxuICB9LFxuICBcIndpbjEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICBcImNwMTI1NlwiOiBcIndpbmRvd3MxMjU2XCIsXG4gIFwid2luZG93czEyNTdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmu+/veKAnuKApuKAoOKAoe+/veKAsO+/veKAue+/vcKoy4fCuO+/veKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEou+/veKAuu+/vcKvy5vvv73CoO+/vcKiwqPCpO+/vcKmwqfDmMKpxZbCq8Kswq3CrsOGwrDCscKywrPCtMK1wrbCt8O4wrnFl8K7wrzCvcK+w6bEhMSuxIDEhsOEw4XEmMSSxIzDicW5xJbEosS2xKrEu8WgxYPFhcOTxYzDlcOWw5fFssWBxZrFqsOcxbvFvcOfxIXEr8SBxIfDpMOlxJnEk8SNw6nFusSXxKPEt8SrxLzFocWExYbDs8WNw7XDtsO3xbPFgsWbxavDvMW8xb7LmVwiXG4gIH0sXG4gIFwid2luMTI1N1wiOiBcIndpbmRvd3MxMjU3XCIsXG4gIFwiY3AxMjU3XCI6IFwid2luZG93czEyNTdcIixcbiAgXCJ3aW5kb3dzMTI1OFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHLhuKAsO+/veKAucWS77+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLvv73igLrFk++/ve+/vcW4wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsSCw4TDhcOGw4fDiMOJw4rDi8yAw43DjsOPxJDDkcyJw5PDlMagw5bDl8OYw5nDmsObw5zGr8yDw5/DoMOhw6LEg8Okw6XDpsOnw6jDqcOqw6vMgcOtw67Dr8SRw7HMo8Ozw7TGocO2w7fDuMO5w7rDu8O8xrDigqvDv1wiXG4gIH0sXG4gIFwid2luMTI1OFwiOiBcIndpbmRvd3MxMjU4XCIsXG4gIFwiY3AxMjU4XCI6IFwid2luZG93czEyNThcIixcbiAgXCJpc284ODU5MVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwiY3AyODU5MVwiOiBcImlzbzg4NTkxXCIsXG4gIFwiaXNvODg1OTJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMSEy5jFgcKkxL3FmsKnwqjFoMWexaTFucKtxb3Fu8KwxIXLm8WCwrTEvsWby4fCuMWhxZ/FpcW6y53FvsW8xZTDgcOCxILDhMS5xIbDh8SMw4nEmMOLxJrDjcOOxI7EkMWDxYfDk8OUxZDDlsOXxZjFrsOaxbDDnMOdxaLDn8WVw6HDosSDw6TEusSHw6fEjcOpxJnDq8Sbw63DrsSPxJHFhMWIw7PDtMWRw7bDt8WZxa/DusWxw7zDvcWjy5lcIlxuICB9LFxuICBcImNwMjg1OTJcIjogXCJpc284ODU5MlwiLFxuICBcImlzbzg4NTkzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDEpsuYwqPCpO+/vcSkwqfCqMSwxZ7EnsS0wq3vv73Fu8KwxKfCssKzwrTCtcSlwrfCuMSxxZ/En8S1wr3vv73FvMOAw4HDgu+/vcOExIrEiMOHw4jDicOKw4vDjMONw47Dj++/vcORw5LDk8OUxKDDlsOXxJzDmcOaw5vDnMWsxZzDn8Ogw6HDou+/vcOkxIvEicOnw6jDqcOqw6vDrMOtw67Dr++/vcOxw7LDs8O0xKHDtsO3xJ3DucO6w7vDvMWtxZ3LmVwiXG4gIH0sXG4gIFwiY3AyODU5M1wiOiBcImlzbzg4NTkzXCIsXG4gIFwiaXNvODg1OTRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMSExLjFlsKkxKjEu8KnwqjFoMSSxKLFpsKtxb3Cr8KwxIXLm8WXwrTEqcS8y4fCuMWhxJPEo8WnxYrFvsWLxIDDgcOCw4PDhMOFw4bErsSMw4nEmMOLxJbDjcOOxKrEkMWFxYzEtsOUw5XDlsOXw5jFssOaw5vDnMWoxarDn8SBw6HDosOjw6TDpcOmxK/EjcOpxJnDq8SXw63DrsSrxJHFhsWNxLfDtMO1w7bDt8O4xbPDusO7w7zFqcWry5lcIlxuICB9LFxuICBcImNwMjg1OTRcIjogXCJpc284ODU5NFwiLFxuICBcImlzbzg4NTk1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDQgdCC0IPQhNCF0IbQh9CI0InQitCL0IzCrdCO0I/QkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj+KEltGR0ZLRk9GU0ZXRltGX0ZjRmdGa0ZvRnMKn0Z7Rn1wiXG4gIH0sXG4gIFwiY3AyODU5NVwiOiBcImlzbzg4NTk1XCIsXG4gIFwiaXNvODg1OTZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoO+/ve+/ve+/vcKk77+977+977+977+977+977+977+92IzCre+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vdib77+977+977+92J/vv73Yodii2KPYpNil2KbYp9io2KnYqtir2KzYrdiu2K/YsNix2LLYs9i02LXYtti32LjYudi677+977+977+977+977+92YDZgdmC2YPZhNmF2YbZh9mI2YnZitmL2YzZjdmO2Y/ZkNmR2ZLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIlxuICB9LFxuICBcImNwMjg1OTZcIjogXCJpc284ODU5NlwiLFxuICBcImlzbzg4NTk3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDigJjigJnCo+KCrOKCr8KmwqfCqMKpzbrCq8Kswq3vv73igJXCsMKxwrLCs86EzoXOhsK3zojOic6KwrvOjMK9zo7Oj86QzpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoe+/vc6jzqTOpc6mzqfOqM6pzqrOq86szq3Ors6vzrDOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4LPg8+Ez4XPhs+Hz4jPic+Kz4vPjM+Nz47vv71cIlxuICB9LFxuICBcImNwMjg1OTdcIjogXCJpc284ODU5N1wiLFxuICBcImlzbzg4NTk4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDvv73CosKjwqTCpcKmwqfCqMKpw5fCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnDt8K7wrzCvcK+77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94oCX15DXkdeS15PXlNeV15bXl9eY15nXmteb15zXndee15/XoNeh16LXo9ek16XXpten16jXqdeq77+977+94oCO4oCP77+9XCJcbiAgfSxcbiAgXCJjcDI4NTk4XCI6IFwiaXNvODg1OThcIixcbiAgXCJpc284ODU5OVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8Sew5HDksOTw5TDlcOWw5fDmMOZw5rDm8OcxLDFnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/En8Oxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMSxxZ/Dv1wiXG4gIH0sXG4gIFwiY3AyODU5OVwiOiBcImlzbzg4NTk5XCIsXG4gIFwiaXNvODg1OTEwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDEhMSSxKLEqsSoxLbCp8S7xJDFoMWmxb3CrcWqxYrCsMSFxJPEo8SrxKnEt8K3xLzEkcWhxafFvuKAlcWrxYvEgMOBw4LDg8OEw4XDhsSuxIzDicSYw4vElsONw47Dj8OQxYXFjMOTw5TDlcOWxajDmMWyw5rDm8Ocw53DnsOfxIHDocOiw6PDpMOlw6bEr8SNw6nEmcOrxJfDrcOuw6/DsMWGxY3Ds8O0w7XDtsWpw7jFs8O6w7vDvMO9w77EuFwiXG4gIH0sXG4gIFwiY3AyODYwMFwiOiBcImlzbzg4NTkxMFwiLFxuICBcImlzbzg4NTkxMVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677+977+977+977+94Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4Lmb77+977+977+977+9XCJcbiAgfSxcbiAgXCJjcDI4NjAxXCI6IFwiaXNvODg1OTExXCIsXG4gIFwiaXNvODg1OTEzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDigJ3CosKjwqTigJ7CpsKnw5jCqcWWwqvCrMKtwq7DhsKwwrHCssKz4oCcwrXCtsK3w7jCucWXwrvCvMK9wr7DpsSExK7EgMSGw4TDhcSYxJLEjMOJxbnElsSixLbEqsS7xaDFg8WFw5PFjMOVw5bDl8WyxYHFmsWqw5zFu8W9w5/EhcSvxIHEh8Okw6XEmcSTxI3DqcW6xJfEo8S3xKvEvMWhxYTFhsOzxY3DtcO2w7fFs8WCxZvFq8O8xbzFvuKAmVwiXG4gIH0sXG4gIFwiY3AyODYwM1wiOiBcImlzbzg4NTkxM1wiLFxuICBcImlzbzg4NTkxNFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg4biC4biDwqPEisSL4biKwqfhuoDCqeG6guG4i+G7ssKtwq7FuOG4nuG4n8SgxKHhuYDhuYHCtuG5luG6geG5l+G6g+G5oOG7s+G6hOG6heG5ocOAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPxbTDkcOSw5PDlMOVw5bhuarDmMOZw5rDm8Ocw53FtsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/FtcOxw7LDs8O0w7XDtuG5q8O4w7nDusO7w7zDvcW3w79cIlxuICB9LFxuICBcImNwMjg2MDRcIjogXCJpc284ODU5MTRcIixcbiAgXCJpc284ODU5MTVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo+KCrMKlxaDCp8WhwqnCqsKrwqzCrcKuwq/CsMKxwrLCs8W9wrXCtsK3xb7CucK6wrvFksWTxbjCv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/XCJcbiAgfSxcbiAgXCJjcDI4NjA1XCI6IFwiaXNvODg1OTE1XCIsXG4gIFwiaXNvODg1OTE2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDEhMSFxYHigqzigJ7FoMKnxaHCqciYwqvFucKtxbrFu8KwwrHEjMWCxb3igJ3CtsK3xb7EjciZwrvFksWTxbjFvMOAw4HDgsSCw4TEhsOGw4fDiMOJw4rDi8OMw43DjsOPxJDFg8OSw5PDlMWQw5bFmsWww5nDmsObw5zEmMiaw5/DoMOhw6LEg8OkxIfDpsOnw6jDqcOqw6vDrMOtw67Dr8SRxYTDssOzw7TFkcO2xZvFscO5w7rDu8O8xJnIm8O/XCJcbiAgfSxcbiAgXCJjcDI4NjA2XCI6IFwiaXNvODg1OTE2XCIsXG4gIFwiY3A0MzdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8Ouw6zDhMOFw4nDpsOGw7TDtsOyw7vDucO/w5bDnMKiwqPCpeKCp8aSw6HDrcOzw7rDscORwqrCusK/4oyQwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtNDM3XCI6IFwiY3A0MzdcIixcbiAgXCJjc2libTQzN1wiOiBcImNwNDM3XCIsXG4gIFwiY3A3MzdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIs6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHOo86kzqXOps6nzqjOqc6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPg8+Cz4TPhc+Gz4fPiOKWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM+JzqzOrc6uz4rOr8+Mz43Pi8+OzobOiM6JzorOjM6Ozo/CseKJpeKJpM6qzqvDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm03MzdcIjogXCJjcDczN1wiLFxuICBcImNzaWJtNzM3XCI6IFwiY3A3MzdcIixcbiAgXCJjcDc3NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwixIbDvMOpxIHDpMSjw6XEh8WCxJPFlsWXxKvFucOEw4XDicOmw4bFjcO2xKLCosWaxZvDlsOcw7jCo8OYw5fCpMSAxKrDs8W7xbzFuuKAncKmwqnCrsKswr3CvMWBwqvCu+KWkeKWkuKWk+KUguKUpMSExIzEmMSW4pWj4pWR4pWX4pWdxK7FoOKUkOKUlOKUtOKUrOKUnOKUgOKUvMWyxarilZrilZTilanilabilaDilZDilazFvcSFxI3EmcSXxK/FocWzxavFvuKUmOKUjOKWiOKWhOKWjOKWkOKWgMOTw5/FjMWDw7XDlcK1xYTEtsS3xLvEvMWGxJLFheKAmcKtwrHigJzCvsK2wqfDt+KAnsKw4oiZwrfCucKzwrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtNzc1XCI6IFwiY3A3NzVcIixcbiAgXCJjc2libTc3NVwiOiBcImNwNzc1XCIsXG4gIFwiY3A4NTBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8Ouw6zDhMOFw4nDpsOGw7TDtsOyw7vDucO/w5bDnMO4wqPDmMOXxpLDocOtw7PDusOxw5HCqsK6wr/CrsKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpMOBw4LDgMKp4pWj4pWR4pWX4pWdwqLCpeKUkOKUlOKUtOKUrOKUnOKUgOKUvMOjw4PilZrilZTilanilabilaDilZDilazCpMOww5DDisOLw4jEscONw47Dj+KUmOKUjOKWiOKWhMKmw4ziloDDk8Ofw5TDksO1w5XCtcO+w57DmsObw5nDvcOdwq/CtMKtwrHigJfCvsK2wqfDt8K4wrDCqMK3wrnCs8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg1MFwiOiBcImNwODUwXCIsXG4gIFwiY3NpYm04NTBcIjogXCJjcDg1MFwiLFxuICBcImNwODUyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkxa/Eh8OnxYLDq8WQxZHDrsW5w4TEhsOJxLnEusO0w7bEvcS+xZrFm8OWw5zFpMWlxYHDl8SNw6HDrcOzw7rEhMSFxb3FvsSYxJnCrMW6xIzFn8KrwrvilpHilpLilpPilILilKTDgcOCxJrFnuKVo+KVkeKVl+KVncW7xbzilJDilJTilLTilKzilJzilIDilLzEgsSD4pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTEkcSQxI7Di8SPxYfDjcOOxJvilJjilIzilojiloTFosWu4paAw5PDn8OUxYPFhMWIxaDFocWUw5rFlcWww73DncWjwrTCrcudy5vLh8uYwqfDt8K4wrDCqMuZxbHFmMWZ4pagwqBcIlxuICB9LFxuICBcImlibTg1MlwiOiBcImNwODUyXCIsXG4gIFwiY3NpYm04NTJcIjogXCJjcDg1MlwiLFxuICBcImNwODU1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLRktCC0ZPQg9GR0IHRlNCE0ZXQhdGW0IbRl9CH0ZjQiNGZ0InRmtCK0ZvQi9Gc0IzRntCO0Z/Qj9GO0K7RitCq0LDQkNCx0JHRhtCm0LTQlNC10JXRhNCk0LPQk8KrwrvilpHilpLilpPilILilKTRhdCl0LjQmOKVo+KVkeKVl+KVndC50JnilJDilJTilLTilKzilJzilIDilLzQutCa4pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTQu9Cb0LzQnNC90J3QvtCe0L/ilJjilIzilojiloTQn9GP4paA0K/RgNCg0YHQodGC0KLRg9Cj0LbQltCy0JLRjNCs4oSWwq3Ri9Cr0LfQl9GI0KjRjdCt0YnQqdGH0KfCp+KWoMKgXCJcbiAgfSxcbiAgXCJpYm04NTVcIjogXCJjcDg1NVwiLFxuICBcImNzaWJtODU1XCI6IFwiY3A4NTVcIixcbiAgXCJjcDg1NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi15DXkdeS15PXlNeV15bXl9eY15nXmteb15zXndee15/XoNeh16LXo9ek16XXpten16jXqdeq77+9wqPvv73Dl++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vcKuwqzCvcK877+9wqvCu+KWkeKWkuKWk+KUguKUpO+/ve+/ve+/vcKp4pWj4pWR4pWX4pWdwqLCpeKUkOKUlOKUtOKUrOKUnOKUgOKUvO+/ve+/veKVmuKVlOKVqeKVpuKVoOKVkOKVrMKk77+977+977+977+977+977+977+977+977+94pSY4pSM4paI4paEwqbvv73iloDvv73vv73vv73vv73vv73vv73Cte+/ve+/ve+/ve+/ve+/ve+/ve+/vcKvwrTCrcKx4oCXwr7CtsKnw7fCuMKwwqjCt8K5wrPCsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NTZcIjogXCJjcDg1NlwiLFxuICBcImNzaWJtODU2XCI6IFwiY3A4NTZcIixcbiAgXCJjcDg1N1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67EscOEw4XDicOmw4bDtMO2w7LDu8O5xLDDlsOcw7jCo8OYxZ7Fn8Ohw63Ds8O6w7HDkcSexJ/Cv8KuwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSkw4HDgsOAwqnilaPilZHilZfilZ3CosKl4pSQ4pSU4pS04pSs4pSc4pSA4pS8w6PDg+KVmuKVlOKVqeKVpuKVoOKVkOKVrMKkwrrCqsOKw4vDiO+/vcONw47Dj+KUmOKUjOKWiOKWhMKmw4ziloDDk8Ofw5TDksO1w5XCte+/vcOXw5rDm8OZw6zDv8KvwrTCrcKx77+9wr7CtsKnw7fCuMKwwqjCt8K5wrPCsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NTdcIjogXCJjcDg1N1wiLFxuICBcImNzaWJtODU3XCI6IFwiY3A4NTdcIixcbiAgXCJjcDg1OFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcw7jCo8OYw5fGksOhw63Ds8O6w7HDkcKqwrrCv8KuwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSkw4HDgsOAwqnilaPilZHilZfilZ3CosKl4pSQ4pSU4pS04pSs4pSc4pSA4pS8w6PDg+KVmuKVlOKVqeKVpuKVoOKVkOKVrMKkw7DDkMOKw4vDiOKCrMONw47Dj+KUmOKUjOKWiOKWhMKmw4ziloDDk8Ofw5TDksO1w5XCtcO+w57DmsObw5nDvcOdwq/CtMKtwrHigJfCvsK2wqfDt8K4wrDCqMK3wrnCs8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg1OFwiOiBcImNwODU4XCIsXG4gIFwiY3NpYm04NThcIjogXCJjcDg1OFwiLFxuICBcImNwODYwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOjw6DDgcOnw6rDisOow43DlMOsw4PDgsOJw4DDiMO0w7XDssOaw7nDjMOVw5zCosKjw5nigqfDk8Ohw63Ds8O6w7HDkcKqwrrCv8OSwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODYwXCI6IFwiY3A4NjBcIixcbiAgXCJjc2libTg2MFwiOiBcImNwODYwXCIsXG4gIFwiY3A4NjFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDkMOww57DhMOFw4nDpsOGw7TDtsO+w7vDncO9w5bDnMO4wqPDmOKCp8aSw6HDrcOzw7rDgcONw5PDmsK/4oyQwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODYxXCI6IFwiY3A4NjFcIixcbiAgXCJjc2libTg2MVwiOiBcImNwODYxXCIsXG4gIFwiY3A4NjJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIteQ15HXkteT15TXldeW15fXmNeZ15rXm9ec153Xntef16DXodei16PXpNel16bXp9eo16nXqsKiwqPCpeKCp8aSw6HDrcOzw7rDscORwqrCusK/4oyQwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODYyXCI6IFwiY3A4NjJcIixcbiAgXCJjc2libTg2MlwiOiBcImNwODYyXCIsXG4gIFwiY3A4NjNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw4LDoMK2w6fDqsOrw6jDr8Ou4oCXw4DCp8OJw4jDisO0w4vDj8O7w7nCpMOUw5zCosKjw5nDm8aSwqbCtMOzw7rCqMK4wrPCr8OO4oyQwqzCvcK8wr7Cq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODYzXCI6IFwiY3A4NjNcIixcbiAgXCJjc2libTg2M1wiOiBcImNwODYzXCIsXG4gIFwiY3A4NjRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMk2aomJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/CsMK34oiZ4oia4paS4pSA4pSC4pS84pSk4pSs4pSc4pS04pSQ4pSM4pSU4pSYzrLiiJ7PhsKxwr3CvOKJiMKrwrvvu7fvu7jvv73vv73vu7vvu7zvv73CoMKt77qCwqPCpO+6hO+/ve+/ve+6ju+6j++6le+6mdiM77qd77qh77ql2aDZodmi2aPZpNml2abZp9mo2anvu5HYm++6se+6te+6udifwqLvuoDvuoHvuoPvuoXvu4rvuovvuo3vupHvupPvupfvupvvup/vuqPvuqfvuqnvuqvvuq3vuq/vurPvurfvurvvur/vu4Hvu4Xvu4vvu4/CpsKsw7fDl++7idmA77uT77uX77ub77uf77uj77un77ur77ut77uv77uz77q977uM77uO77uN77uh77m92ZHvu6Xvu6nvu6zvu7Dvu7Lvu5Dvu5Xvu7Xvu7bvu53vu5nvu7HilqDvv71cIlxuICB9LFxuICBcImlibTg2NFwiOiBcImNwODY0XCIsXG4gIFwiY3NpYm04NjRcIjogXCJjcDg2NFwiLFxuICBcImNwODY1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zDuMKjw5jigqfGksOhw63Ds8O6w7HDkcKqwrrCv+KMkMKswr3CvMKhwqvCpOKWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg2NVwiOiBcImNwODY1XCIsXG4gIFwiY3NpYm04NjVcIjogXCJjcDg2NVwiLFxuICBcImNwODY2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/ilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDRgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9CB0ZHQhNGU0IfRl9CO0Z7CsOKImcK34oia4oSWwqTilqDCoFwiXG4gIH0sXG4gIFwiaWJtODY2XCI6IFwiY3A4NjZcIixcbiAgXCJjc2libTg2NlwiOiBcImNwODY2XCIsXG4gIFwiY3A4NjlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIu+/ve+/ve+/ve+/ve+/ve+/vc6G77+9wrfCrMKm4oCY4oCZzojigJXOic6KzqrOjO+/ve+/vc6OzqvCqc6PwrLCs86swqPOrc6uzq/Pis6Qz4zPjc6RzpLOk86UzpXOls6Xwr3OmM6ZwqvCu+KWkeKWkuKWk+KUguKUpM6azpvOnM6d4pWj4pWR4pWX4pWdzp7On+KUkOKUlOKUtOKUrOKUnOKUgOKUvM6gzqHilZrilZTilanilabilaDilZDilazOo86kzqXOps6nzqjOqc6xzrLOs+KUmOKUjOKWiOKWhM60zrXiloDOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPg8+Cz4TOhMKtwrHPhc+Gz4fCp8+IzoXCsMKoz4nPi86wz47ilqDCoFwiXG4gIH0sXG4gIFwiaWJtODY5XCI6IFwiY3A4NjlcIixcbiAgXCJjc2libTg2OVwiOiBcImNwODY5XCIsXG4gIFwiY3A5MjJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7igL7CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPxaDDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncW9w5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Whw7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73FvsO/XCJcbiAgfSxcbiAgXCJpYm05MjJcIjogXCJjcDkyMlwiLFxuICBcImNzaWJtOTIyXCI6IFwiY3A5MjJcIixcbiAgXCJjcDEwNDZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIu+6iMOXw7fvo7bvo7Xvo7Tvo7fvubHCiOKWoOKUguKUgOKUkOKUjOKUlOKUmO+5ue+5u++5ve+5v++5t++6iu+7sO+7s++7su+7ju+7j++7kO+7tu+7uO+7uu+7vMKg76O676O576O4wqTvo7vvuovvupHvupfvupvvup/vuqPYjMKt77qn77qz2aDZodmi2aPZpNml2abZp9mo2anvurfYm++6u++6v++7itif77uL2KHYotij2KTYpdim2KfYqNip2KrYq9is2K3Yrtiv2LDYsdiy2LPYtNi12LbYt++7h9i52Lrvu4zvuoLvuoTvuo7vu5PZgNmB2YLZg9mE2YXZhtmH2YjZidmK2YvZjNmN2Y7Zj9mQ2ZHZku+7l++7m++7n++jvO+7te+7t++7ue+7u++7o++7p++7rO+7qe+/vVwiXG4gIH0sXG4gIFwiaWJtMTA0NlwiOiBcImNwMTA0NlwiLFxuICBcImNzaWJtMTA0NlwiOiBcImNwMTA0NlwiLFxuICBcImNwMTEyNFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg0IHQgtKQ0ITQhdCG0IfQiNCJ0IrQi9CMwq3QjtCP0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/ihJbRkdGS0pHRlNGV0ZbRl9GY0ZnRmtGb0ZzCp9Ge0Z9cIlxuICB9LFxuICBcImlibTExMjRcIjogXCJjcDExMjRcIixcbiAgXCJjc2libTExMjRcIjogXCJjcDExMjRcIixcbiAgXCJjcDExMjVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgNGA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0IHRkdKQ0pHQhNGU0IbRltCH0ZfCt+KImuKElsKk4pagwqBcIlxuICB9LFxuICBcImlibTExMjVcIjogXCJjcDExMjVcIixcbiAgXCJjc2libTExMjVcIjogXCJjcDExMjVcIixcbiAgXCJjcDExMjlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo8KkwqXCpsKnxZPCqcKqwqvCrMKtwq7Cr8KwwrHCssKzxbjCtcK2wrfFksK5wrrCu8K8wr3CvsK/w4DDgcOCxILDhMOFw4bDh8OIw4nDisOLzIDDjcOOw4/EkMORzInDk8OUxqDDlsOXw5jDmcOaw5vDnMavzIPDn8Ogw6HDosSDw6TDpcOmw6fDqMOpw6rDq8yBw63DrsOvxJHDscyjw7PDtMahw7bDt8O4w7nDusO7w7zGsOKCq8O/XCJcbiAgfSxcbiAgXCJpYm0xMTI5XCI6IFwiY3AxMTI5XCIsXG4gIFwiY3NpYm0xMTI5XCI6IFwiY3AxMTI5XCIsXG4gIFwiY3AxMTMzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDguoHguoLguoTguofguojguqrguorguo3gupTgupXgupbgupfgupnguprgupvgupzgup3gup7gup/guqHguqLguqPguqXguqfguqvguq3guq7vv73vv73vv73guq/gurDgurLgurPgurTgurXgurbgurfgurjgurngurzgurHgurvgur3vv73vv73vv73gu4Dgu4Hgu4Lgu4Pgu4Tgu4jgu4ngu4rgu4vgu4zgu43gu4bvv73gu5zgu53igq3vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73gu5Dgu5Hgu5Lgu5Pgu5Tgu5Xgu5bgu5fgu5jgu5nvv73vv73CosKswqbvv71cIlxuICB9LFxuICBcImlibTExMzNcIjogXCJjcDExMzNcIixcbiAgXCJjc2libTExMzNcIjogXCJjcDExMzNcIixcbiAgXCJjcDExNjFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veC5iOC4geC4guC4g+C4hOC4heC4huC4h+C4iOC4ieC4iuC4i+C4jOC4jeC4juC4j+C4kOC4keC4kuC4k+C4lOC4leC4luC4l+C4mOC4meC4muC4m+C4nOC4neC4nuC4n+C4oOC4oeC4ouC4o+C4pOC4peC4puC4p+C4qOC4qeC4quC4q+C4rOC4reC4ruC4r+C4sOC4seC4suC4s+C4tOC4teC4tuC4t+C4uOC4ueC4uuC5ieC5iuC5i+KCrOC4v+C5gOC5geC5guC5g+C5hOC5heC5huC5h+C5iOC5ieC5iuC5i+C5jOC5jeC5juC5j+C5kOC5keC5kuC5k+C5lOC5leC5luC5l+C5mOC5meC5muC5m8KiwqzCpsKgXCJcbiAgfSxcbiAgXCJpYm0xMTYxXCI6IFwiY3AxMTYxXCIsXG4gIFwiY3NpYm0xMTYxXCI6IFwiY3AxMTYxXCIsXG4gIFwiY3AxMTYyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzCgcKCwoPChOKApsKGwofCiMKJworCi8KMwo3CjsKPwpDigJjigJnigJzigJ3igKLigJPigJTCmMKZwprCm8Kcwp3CnsKfwqDguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvv73vv73vv73vv73guL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvvv73vv73vv73vv71cIlxuICB9LFxuICBcImlibTExNjJcIjogXCJjcDExNjJcIixcbiAgXCJjc2libTExNjJcIjogXCJjcDExNjJcIixcbiAgXCJjcDExNjNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo+KCrMKlwqbCp8WTwqnCqsKrwqzCrcKuwq/CsMKxwrLCs8W4wrXCtsK3xZLCucK6wrvCvMK9wr7Cv8OAw4HDgsSCw4TDhcOGw4fDiMOJw4rDi8yAw43DjsOPxJDDkcyJw5PDlMagw5bDl8OYw5nDmsObw5zGr8yDw5/DoMOhw6LEg8Okw6XDpsOnw6jDqcOqw6vMgcOtw67Dr8SRw7HMo8Ozw7TGocO2w7fDuMO5w7rDu8O8xrDigqvDv1wiXG4gIH0sXG4gIFwiaWJtMTE2M1wiOiBcImNwMTE2M1wiLFxuICBcImNzaWJtMTE2M1wiOiBcImNwMTE2M1wiLFxuICBcIm1hY2Nyb2F0aWFuXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7FoOKEosK0wqjiiaDFvcOY4oiewrHiiaTiiaXiiIbCteKIguKIkeKIj8Wh4oirwqrCuuKEpsW+w7jCv8KhwqziiJrGkuKJiMSGwqvEjOKApsKgw4DDg8OVxZLFk8SQ4oCU4oCc4oCd4oCY4oCZw7fil4rvv73CqeKBhMKk4oC54oC6w4bCu+KAk8K34oCa4oCe4oCww4LEh8OBxI3DiMONw47Dj8OMw5PDlMSRw5LDmsObw5nEscuGy5zCr8+Aw4vLmsK4w4rDpsuHXCJcbiAgfSxcbiAgXCJtYWNjeXJpbGxpY1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr+KAoMKwwqLCo8Kn4oCiwrbQhsKuwqnihKLQgtGS4omg0IPRk+KInsKx4omk4oml0ZbCteKIgtCI0ITRlNCH0ZfQidGZ0IrRmtGY0IXCrOKImsaS4omI4oiGwqvCu+KApsKg0IvRm9CM0ZzRleKAk+KAlOKAnOKAneKAmOKAmcO34oCe0I7RntCP0Z/ihJbQgdGR0Y/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjsKkXCJcbiAgfSxcbiAgXCJtYWNncmVla1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TCucKyw4nCs8OWw5zOhcOgw6LDpM6EwqjDp8Opw6jDqsOrwqPihKLDrsOv4oCiwr3igLDDtMO2wqbCrcO5w7vDvOKAoM6TzpTOmM6bzp7OoMOfwq7Cqc6jzqrCp+KJoMKwzofOkcKx4omk4omlwqXOks6VzpbOl86ZzprOnM6mzqvOqM6pzqzOncKszp/OoeKJiM6kwqvCu+KApsKgzqXOp86GzojFk+KAk+KAleKAnOKAneKAmOKAmcO3zonOis6Mzo7Orc6uzq/PjM6Pz43Osc6yz4jOtM61z4bOs863zrnOvs66zrvOvM69zr/PgM+Oz4HPg8+EzrjPic+Cz4fPhc62z4rPi86QzrDvv71cIlxuICB9LFxuICBcIm1hY2ljZWxhbmRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zDncKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCuuKEpsOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTCpMOQw7DDnsO+w73Ct+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIlxuICB9LFxuICBcIm1hY3JvbWFuXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK64oSmw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhMKk4oC54oC676yB76yC4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCJcbiAgfSxcbiAgXCJtYWNyb21hbmlhXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDEgsWe4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK64oSmxIPFn8K/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhMKk4oC54oC6xaLFo+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+/vcOSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiXG4gIH0sXG4gIFwibWFjdGhhaVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwqvCu+KApu+ijO+ij++iku+ile+imO+ii++iju+ike+ilO+il+KAnOKAne+ime+/veKAou+ihO+iie+ihe+ihu+ih++iiO+iiu+ije+ikO+ik++iluKAmOKAme+/vcKg4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677u/4oCL4oCT4oCU4Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4oSi4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZwq7Cqe+/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwibWFjdHVya2lzaFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCuuKEpsOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjEnsSfxLDEscWexZ/igKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDme+/vcuGy5zCr8uYy5nLmsK4y53Lm8uHXCJcbiAgfSxcbiAgXCJtYWN1a3JhaW5lXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv4oCgwrDSkMKjwqfigKLCttCGwq7CqeKEotCC0ZLiiaDQg9GT4oiewrHiiaTiiaXRlsK10pHQiNCE0ZTQh9GX0InRmdCK0ZrRmNCFwqziiJrGkuKJiOKIhsKrwrvigKbCoNCL0ZvQjNGc0ZXigJPigJTigJzigJ3igJjigJnDt+KAntCO0Z7Qj9Gf4oSW0IHRkdGP0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7CpFwiXG4gIH0sXG4gIFwia29pOHJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKUgOKUguKUjOKUkOKUlOKUmOKUnOKUpOKUrOKUtOKUvOKWgOKWhOKWiOKWjOKWkOKWkeKWkuKWk+KMoOKWoOKImeKImuKJiOKJpOKJpcKg4oyhwrDCssK3w7filZDilZHilZLRkeKVk+KVlOKVleKVluKVl+KVmOKVmeKVmuKVm+KVnOKVneKVnuKVn+KVoOKVodCB4pWi4pWj4pWk4pWl4pWm4pWn4pWo4pWp4pWq4pWr4pWswqnRjtCw0LHRhtC00LXRhNCz0YXQuNC50LrQu9C80L3QvtC/0Y/RgNGB0YLRg9C20LLRjNGL0LfRiNGN0YnRh9GK0K7QkNCR0KbQlNCV0KTQk9Cl0JjQmdCa0JvQnNCd0J7Qn9Cv0KDQodCi0KPQltCS0KzQq9CX0KjQrdCp0KfQqlwiXG4gIH0sXG4gIFwia29pOHVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKUgOKUguKUjOKUkOKUlOKUmOKUnOKUpOKUrOKUtOKUvOKWgOKWhOKWiOKWjOKWkOKWkeKWkuKWk+KMoOKWoOKImeKImuKJiOKJpOKJpcKg4oyhwrDCssK3w7filZDilZHilZLRkdGU4pWU0ZbRl+KVl+KVmOKVmeKVmuKVm9KR4pWd4pWe4pWf4pWg4pWh0IHQhOKVo9CG0IfilabilafilajilanilarSkOKVrMKp0Y7QsNCx0YbQtNC10YTQs9GF0LjQudC60LvQvNC90L7Qv9GP0YDRgdGC0YPQttCy0YzRi9C30YjRjdGJ0YfRitCu0JDQkdCm0JTQldCk0JPQpdCY0JnQmtCb0JzQndCe0J/Qr9Cg0KHQotCj0JbQktCs0KvQl9Co0K3QqdCn0KpcIlxuICB9LFxuICBcImtvaThydVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4pSA4pSC4pSM4pSQ4pSU4pSY4pSc4pSk4pSs4pS04pS84paA4paE4paI4paM4paQ4paR4paS4paT4oyg4pag4oiZ4oia4omI4omk4omlwqDijKHCsMKywrfDt+KVkOKVkeKVktGR0ZTilZTRltGX4pWX4pWY4pWZ4pWa4pWb0pHRnuKVnuKVn+KVoOKVodCB0ITilaPQhtCH4pWm4pWn4pWo4pWp4pWq0pDQjsKp0Y7QsNCx0YbQtNC10YTQs9GF0LjQudC60LvQvNC90L7Qv9GP0YDRgdGC0YPQttCy0YzRi9C30YjRjdGJ0YfRitCu0JDQkdCm0JTQldCk0JPQpdCY0JnQmtCb0JzQndCe0J/Qr9Cg0KHQotCj0JbQktCs0KvQl9Co0K3QqdCn0KpcIlxuICB9LFxuICBcImtvaTh0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLSm9KT4oCa0pLigJ7igKbigKDigKHvv73igLDSs+KAudKy0rfStu+/vdKa4oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi77+94oC677+977+977+977+977+906/TrtGRwqTTo8Kmwqfvv73vv73vv73Cq8Kswq3Cru+/vcKwwrHCstCB77+906LCtsK377+94oSW77+9wrvvv73vv73vv73CqdGO0LDQsdGG0LTQtdGE0LPRhdC40LnQutC70LzQvdC+0L/Rj9GA0YHRgtGD0LbQstGM0YvQt9GI0Y3RidGH0YrQrtCQ0JHQptCU0JXQpNCT0KXQmNCZ0JrQm9Cc0J3QntCf0K/QoNCh0KLQo9CW0JLQrNCr0JfQqNCt0KnQp9CqXCJcbiAgfSxcbiAgXCJhcm1zY2lpOFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg77+91ofWiSkowrvCq+KAlC7VnSwt1origKbVnNWb1Z7UsdWh1LLVotSz1aPUtNWk1LXVpdS21abUt9Wn1LjVqNS51anUutWq1LvVq9S81azUvdWt1L7VrtS/1a/VgNWw1YHVsdWC1bLVg9Wz1YTVtNWF1bXVhtW21YfVt9WI1bjVidW51YrVutWL1bvVjNW81Y3VvdWO1b7Vj9W/1ZDWgNWR1oHVktaC1ZPWg9WU1oTVldaF1ZbWhtWa77+9XCJcbiAgfSxcbiAgXCJyazEwNDhcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCC0IPigJrRk+KAnuKApuKAoOKAoeKCrOKAsNCJ4oC50IrSmtK60I/RkuKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEotGZ4oC60ZrSm9K70Z/CoNKw0rHTmMKk06jCpsKn0IHCqdKSwqvCrMKtwq7SrsKwwrHQhtGW06nCtcK2wrfRkeKEltKTwrvTmdKi0qPSr9CQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGPXCJcbiAgfSxcbiAgXCJ0Y3ZuXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAww5rhu6RcXHUwMDAz4buq4bus4buuXFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTDhu6jhu7Dhu7Lhu7bhu7jDneG7tFxcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/w4DhuqLDg8OB4bqg4bq24bqsw4jhurrhurzDieG6uOG7hsOM4buIxKjDjeG7isOS4buOw5XDk+G7jOG7mOG7nOG7nuG7oOG7muG7osOZ4bumxajCoMSCw4LDisOUxqDGr8SQxIPDosOqw7TGocawxJHhurDMgMyJzIPMgcyjw6DhuqPDo8Oh4bqh4bqy4bqx4bqz4bq14bqv4bq04bqu4bqm4bqo4bqq4bqk4buA4bq34bqn4bqp4bqr4bql4bqtw6jhu4Lhurvhur3DqeG6ueG7geG7g+G7heG6v+G7h8Os4buJ4buE4bq+4buSxKnDreG7i8Oy4buU4buPw7XDs+G7jeG7k+G7leG7l+G7keG7meG7neG7n+G7oeG7m+G7o8O54buW4bunxanDuuG7peG7q+G7reG7r+G7qeG7seG7s+G7t+G7ucO94bu14buQXCJcbiAgfSxcbiAgXCJnZW9yZ2lhbmFjYWRlbXlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHigJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFksKNwo7Cj8KQ4oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLFoeKAusWTwp3CnsW4wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv+GDkOGDkeGDkuGDk+GDlOGDleGDluGDl+GDmOGDmeGDmuGDm+GDnOGDneGDnuGDn+GDoOGDoeGDouGDo+GDpOGDpeGDpuGDp+GDqOGDqeGDquGDq+GDrOGDreGDruGDr+GDsOGDseGDsuGDs+GDtOGDteGDtsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/XCJcbiAgfSxcbiAgXCJnZW9yZ2lhbnBzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKB4oCaxpLigJ7igKbigKDigKHLhuKAsMWg4oC5xZLCjcKOwo/CkOKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSixaHigLrFk8Kdwp7FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/hg5Dhg5Hhg5Lhg5Phg5Thg5Xhg5bhg7Hhg5fhg5jhg5nhg5rhg5vhg5zhg7Lhg53hg57hg5/hg6Dhg6Hhg6Lhg7Phg6Phg6Thg6Xhg6bhg6fhg6jhg6nhg6rhg6vhg6zhg63hg67hg7Thg6/hg7Dhg7XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/XCJcbiAgfSxcbiAgXCJwdDE1NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0pbSktOu0pPigJ7igKbSttKu0rLSr9Kg06LSotKa0rrSuNKX4oCY4oCZ4oCc4oCd4oCi4oCT4oCU0rPSt9Kh06PSo9Kb0rvSucKg0I7RntCI06jSmNKwwqfQgcKp05jCq8Ks06/CrtKcwrDSsdCG0ZbSmdOpwrbCt9GR4oSW05nCu9GY0qrSq9Kd0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y9cIlxuICB9LFxuICBcInZpc2NpaVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXFx1MDAwMFxcdTAwMDHhurJcXHUwMDAzXFx1MDAwNOG6tOG6qlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEz4bu2XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOOG7uFxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWThu7RcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/4bqg4bqu4bqw4bq24bqk4bqm4bqo4bqs4bq84bq44bq+4buA4buC4buE4buG4buQ4buS4buU4buW4buY4bui4bua4buc4bue4buK4buO4buM4buI4bumxajhu6Thu7LDleG6r+G6seG6t+G6peG6p+G6qeG6reG6veG6ueG6v+G7geG7g+G7heG7h+G7keG7k+G7leG7l+G7oMag4buZ4bud4buf4buL4buw4buo4buq4busxqHhu5vGr8OAw4HDgsOD4bqixILhurPhurXDiMOJw4rhurrDjMONxKjhu7PEkOG7qcOSw5PDlOG6oeG7t+G7q+G7rcOZw5rhu7nhu7XDneG7ocaww6DDocOiw6PhuqPEg+G7r+G6q8Oow6nDquG6u8Osw63EqeG7icSR4buxw7LDs8O0w7Xhu4/hu43hu6XDucO6xanhu6fDveG7o+G7rlwiXG4gIH0sXG4gIFwiaXNvNjQ2Y25cIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiPCpSUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x94oC+f++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwiaXNvNjQ2anBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW8KlXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x94oC+f++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwiaHByb21hbjhcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMOAw4LDiMOKw4vDjsOPwrTLi8uGwqjLnMOZw5vigqTCr8Odw73CsMOHw6fDkcOxwqHCv8KkwqPCpcKnxpLCosOiw6rDtMO7w6HDqcOzw7rDoMOow7LDucOkw6vDtsO8w4XDrsOYw4bDpcOtw7jDpsOEw6zDlsOcw4nDr8Ofw5TDgcODw6PDkMOww43DjMOTw5LDlcO1xaDFocOaxbjDv8Oew77Ct8K1wrbCvuKAlMK8wr3CqsK6wqvilqDCu8Kx77+9XCJcbiAgfSxcbiAgXCJtYWNpbnRvc2hcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGEwqTigLnigLrvrIHvrILigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIlxuICB9LFxuICBcImFzY2lpXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIlxuICB9LFxuICBcInRpczYyMFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677+977+977+977+94Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4Lmb77+977+977+977+9XCJcbiAgfVxufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzc2OTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLy8gTWFudWFsbHkgYWRkZWQgZGF0YSB0byBiZSB1c2VkIGJ5IHNiY3MgY29kZWMgaW4gYWRkaXRpb24gdG8gZ2VuZXJhdGVkIG9uZS5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gTm90IHN1cHBvcnRlZCBieSBpY29udiwgbm90IHN1cmUgd2h5LlxuICAgIFwiMTAwMjlcIjogXCJtYWNjZW50ZXVyb1wiLFxuICAgIFwibWFjY2VudGV1cm9cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiw4TEgMSBw4nEhMOWw5zDocSFxIzDpMSNxIbEh8OpxbnFusSOw63Ej8SSxJPElsOzxJfDtMO2w7XDusSaxJvDvOKAoMKwxJjCo8Kn4oCiwrbDn8KuwqnihKLEmcKo4omgxKPErsSvxKriiaTiiaXEq8S24oiC4oiRxYLEu8S8xL3EvsS5xLrFhcWGxYPCrOKImsWExYfiiIbCq8K74oCmwqDFiMWQw5XFkcWM4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rFjcWUxZXFmOKAueKAusWZxZbFl8Wg4oCa4oCexaHFmsWbw4HFpMWlw43FvcW+xarDk8OUxavFrsOaxa/FsMWxxbLFs8Odw73Et8W7xYHFvMSiy4dcIlxuICAgIH0sXG5cbiAgICBcIjgwOFwiOiBcImNwODA4XCIsXG4gICAgXCJpYm04MDhcIjogXCJjcDgwOFwiLFxuICAgIFwiY3A4MDhcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paA0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/QgdGR0ITRlNCH0ZfQjtGewrDiiJnCt+KImuKEluKCrOKWoMKgXCJcbiAgICB9LFxuXG4gICAgXCJtaWtcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/ilJTilLTilKzilJzilIDilLzilaPilZHilZrilZTilanilabilaDilZDilazilJDilpHilpLilpPilILilKTihJbCp+KVl+KVneKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICAgIH0sXG5cbiAgICBcImNwNzIwXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceDgwXFx4ODHDqcOiXFx4ODTDoFxceDg2w6fDqsOrw6jDr8OuXFx4OGRcXHg4ZVxceDhmXFx4OTBcXHUwNjUxXFx1MDY1MsO0wqTZgMO7w7nYodii2KPYpMKj2KXYptin2KjYqdiq2KvYrNit2K7Yr9iw2LHYstiz2LTYtcKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDYtti32LjYudi62YHCtdmC2YPZhNmF2YbZh9mI2YnZiuKJoVxcdTA2NGJcXHUwNjRjXFx1MDY0ZFxcdTA2NGVcXHUwNjRmXFx1MDY1MOKJiMKw4oiZwrfiiJrigb/CsuKWoFxcdTAwYTBcIlxuICAgIH0sXG5cbiAgICAvLyBBbGlhc2VzIG9mIGdlbmVyYXRlZCBlbmNvZGluZ3MuXG4gICAgXCJhc2NpaThiaXRcIjogXCJhc2NpaVwiLFxuICAgIFwidXNhc2NpaVwiOiBcImFzY2lpXCIsXG4gICAgXCJhbnNpeDM0XCI6IFwiYXNjaWlcIixcbiAgICBcImFuc2l4MzQxOTY4XCI6IFwiYXNjaWlcIixcbiAgICBcImFuc2l4MzQxOTg2XCI6IFwiYXNjaWlcIixcbiAgICBcImNzYXNjaWlcIjogXCJhc2NpaVwiLFxuICAgIFwiY3AzNjdcIjogXCJhc2NpaVwiLFxuICAgIFwiaWJtMzY3XCI6IFwiYXNjaWlcIixcbiAgICBcImlzb2lyNlwiOiBcImFzY2lpXCIsXG4gICAgXCJpc282NDZ1c1wiOiBcImFzY2lpXCIsXG4gICAgXCJpc282NDZpcnZcIjogXCJhc2NpaVwiLFxuICAgIFwidXNcIjogXCJhc2NpaVwiLFxuXG4gICAgXCJsYXRpbjFcIjogXCJpc284ODU5MVwiLFxuICAgIFwibGF0aW4yXCI6IFwiaXNvODg1OTJcIixcbiAgICBcImxhdGluM1wiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJsYXRpbjRcIjogXCJpc284ODU5NFwiLFxuICAgIFwibGF0aW41XCI6IFwiaXNvODg1OTlcIixcbiAgICBcImxhdGluNlwiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwibGF0aW43XCI6IFwiaXNvODg1OTEzXCIsXG4gICAgXCJsYXRpbjhcIjogXCJpc284ODU5MTRcIixcbiAgICBcImxhdGluOVwiOiBcImlzbzg4NTkxNVwiLFxuICAgIFwibGF0aW4xMFwiOiBcImlzbzg4NTkxNlwiLFxuXG4gICAgXCJjc2lzb2xhdGluMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJjc2lzb2xhdGluMlwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJjc2lzb2xhdGluM1wiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJjc2lzb2xhdGluNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJjc2lzb2xhdGluY3lyaWxsaWNcIjogXCJpc284ODU5NVwiLFxuICAgIFwiY3Npc29sYXRpbmFyYWJpY1wiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJjc2lzb2xhdGluZ3JlZWtcIiA6IFwiaXNvODg1OTdcIixcbiAgICBcImNzaXNvbGF0aW5oZWJyZXdcIjogXCJpc284ODU5OFwiLFxuICAgIFwiY3Npc29sYXRpbjVcIjogXCJpc284ODU5OVwiLFxuICAgIFwiY3Npc29sYXRpbjZcIjogXCJpc284ODU5MTBcIixcblxuICAgIFwibDFcIjogXCJpc284ODU5MVwiLFxuICAgIFwibDJcIjogXCJpc284ODU5MlwiLFxuICAgIFwibDNcIjogXCJpc284ODU5M1wiLFxuICAgIFwibDRcIjogXCJpc284ODU5NFwiLFxuICAgIFwibDVcIjogXCJpc284ODU5OVwiLFxuICAgIFwibDZcIjogXCJpc284ODU5MTBcIixcbiAgICBcImw3XCI6IFwiaXNvODg1OTEzXCIsXG4gICAgXCJsOFwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwibDlcIjogXCJpc284ODU5MTVcIixcbiAgICBcImwxMFwiOiBcImlzbzg4NTkxNlwiLFxuXG4gICAgXCJpc29pcjE0XCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImlzb2lyNTdcIjogXCJpc282NDZjblwiLFxuICAgIFwiaXNvaXIxMDBcIjogXCJpc284ODU5MVwiLFxuICAgIFwiaXNvaXIxMDFcIjogXCJpc284ODU5MlwiLFxuICAgIFwiaXNvaXIxMDlcIjogXCJpc284ODU5M1wiLFxuICAgIFwiaXNvaXIxMTBcIjogXCJpc284ODU5NFwiLFxuICAgIFwiaXNvaXIxNDRcIjogXCJpc284ODU5NVwiLFxuICAgIFwiaXNvaXIxMjdcIjogXCJpc284ODU5NlwiLFxuICAgIFwiaXNvaXIxMjZcIjogXCJpc284ODU5N1wiLFxuICAgIFwiaXNvaXIxMzhcIjogXCJpc284ODU5OFwiLFxuICAgIFwiaXNvaXIxNDhcIjogXCJpc284ODU5OVwiLFxuICAgIFwiaXNvaXIxNTdcIjogXCJpc284ODU5MTBcIixcbiAgICBcImlzb2lyMTY2XCI6IFwidGlzNjIwXCIsXG4gICAgXCJpc29pcjE3OVwiOiBcImlzbzg4NTkxM1wiLFxuICAgIFwiaXNvaXIxOTlcIjogXCJpc284ODU5MTRcIixcbiAgICBcImlzb2lyMjAzXCI6IFwiaXNvODg1OTE1XCIsXG4gICAgXCJpc29pcjIyNlwiOiBcImlzbzg4NTkxNlwiLFxuXG4gICAgXCJjcDgxOVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJpYm04MTlcIjogXCJpc284ODU5MVwiLFxuXG4gICAgXCJjeXJpbGxpY1wiOiBcImlzbzg4NTk1XCIsXG5cbiAgICBcImFyYWJpY1wiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJhcmFiaWM4XCI6IFwiaXNvODg1OTZcIixcbiAgICBcImVjbWExMTRcIjogXCJpc284ODU5NlwiLFxuICAgIFwiYXNtbzcwOFwiOiBcImlzbzg4NTk2XCIsXG5cbiAgICBcImdyZWVrXCIgOiBcImlzbzg4NTk3XCIsXG4gICAgXCJncmVlazhcIiA6IFwiaXNvODg1OTdcIixcbiAgICBcImVjbWExMThcIiA6IFwiaXNvODg1OTdcIixcbiAgICBcImVsb3Q5MjhcIiA6IFwiaXNvODg1OTdcIixcblxuICAgIFwiaGVicmV3XCI6IFwiaXNvODg1OThcIixcbiAgICBcImhlYnJldzhcIjogXCJpc284ODU5OFwiLFxuXG4gICAgXCJ0dXJraXNoXCI6IFwiaXNvODg1OTlcIixcbiAgICBcInR1cmtpc2g4XCI6IFwiaXNvODg1OTlcIixcblxuICAgIFwidGhhaVwiOiBcImlzbzg4NTkxMVwiLFxuICAgIFwidGhhaThcIjogXCJpc284ODU5MTFcIixcblxuICAgIFwiY2VsdGljXCI6IFwiaXNvODg1OTE0XCIsXG4gICAgXCJjZWx0aWM4XCI6IFwiaXNvODg1OTE0XCIsXG4gICAgXCJpc29jZWx0aWNcIjogXCJpc284ODU5MTRcIixcblxuICAgIFwidGlzNjIwMFwiOiBcInRpczYyMFwiLFxuICAgIFwidGlzNjIwMjUyOTFcIjogXCJ0aXM2MjBcIixcbiAgICBcInRpczYyMDI1MzMwXCI6IFwidGlzNjIwXCIsXG5cbiAgICBcIjEwMDAwXCI6IFwibWFjcm9tYW5cIixcbiAgICBcIjEwMDA2XCI6IFwibWFjZ3JlZWtcIixcbiAgICBcIjEwMDA3XCI6IFwibWFjY3lyaWxsaWNcIixcbiAgICBcIjEwMDc5XCI6IFwibWFjaWNlbGFuZFwiLFxuICAgIFwiMTAwODFcIjogXCJtYWN0dXJraXNoXCIsXG5cbiAgICBcImNzcGM4Y29kZXBhZ2U0MzdcIjogXCJjcDQzN1wiLFxuICAgIFwiY3NwYzc3NWJhbHRpY1wiOiBcImNwNzc1XCIsXG4gICAgXCJjc3BjODUwbXVsdGlsaW5ndWFsXCI6IFwiY3A4NTBcIixcbiAgICBcImNzcGNwODUyXCI6IFwiY3A4NTJcIixcbiAgICBcImNzcGM4NjJsYXRpbmhlYnJld1wiOiBcImNwODYyXCIsXG4gICAgXCJjcGdyXCI6IFwiY3A4NjlcIixcblxuICAgIFwibXNlZVwiOiBcImNwMTI1MFwiLFxuICAgIFwibXNjeXJsXCI6IFwiY3AxMjUxXCIsXG4gICAgXCJtc2Fuc2lcIjogXCJjcDEyNTJcIixcbiAgICBcIm1zZ3JlZWtcIjogXCJjcDEyNTNcIixcbiAgICBcIm1zdHVya1wiOiBcImNwMTI1NFwiLFxuICAgIFwibXNoZWJyXCI6IFwiY3AxMjU1XCIsXG4gICAgXCJtc2FyYWJcIjogXCJjcDEyNTZcIixcbiAgICBcIndpbmJhbHRyaW1cIjogXCJjcDEyNTdcIixcblxuICAgIFwiY3AyMDg2NlwiOiBcImtvaThyXCIsXG4gICAgXCIyMDg2NlwiOiBcImtvaThyXCIsXG4gICAgXCJpYm04NzhcIjogXCJrb2k4clwiLFxuICAgIFwiY3Nrb2k4clwiOiBcImtvaThyXCIsXG5cbiAgICBcImNwMjE4NjZcIjogXCJrb2k4dVwiLFxuICAgIFwiMjE4NjZcIjogXCJrb2k4dVwiLFxuICAgIFwiaWJtMTE2OFwiOiBcImtvaTh1XCIsXG5cbiAgICBcInN0cmsxMDQ4MjAwMlwiOiBcInJrMTA0OFwiLFxuXG4gICAgXCJ0Y3ZuNTcxMlwiOiBcInRjdm5cIixcbiAgICBcInRjdm41NzEyMVwiOiBcInRjdm5cIixcblxuICAgIFwiZ2IxOTg4ODBcIjogXCJpc282NDZjblwiLFxuICAgIFwiY25cIjogXCJpc282NDZjblwiLFxuXG4gICAgXCJjc2lzbzE0amlzYzYyMjByb1wiOiBcImlzbzY0NmpwXCIsXG4gICAgXCJqaXNjNjIyMDE5Njlyb1wiOiBcImlzbzY0NmpwXCIsXG4gICAgXCJqcFwiOiBcImlzbzY0NmpwXCIsXG5cbiAgICBcImNzaHByb21hbjhcIjogXCJocHJvbWFuOFwiLFxuICAgIFwicjhcIjogXCJocHJvbWFuOFwiLFxuICAgIFwicm9tYW44XCI6IFwiaHByb21hbjhcIixcbiAgICBcInhyb21hbjhcIjogXCJocHJvbWFuOFwiLFxuICAgIFwiaWJtMTA1MVwiOiBcImhwcm9tYW44XCIsXG5cbiAgICBcIm1hY1wiOiBcIm1hY2ludG9zaFwiLFxuICAgIFwiY3NtYWNpbnRvc2hcIjogXCJtYWNpbnRvc2hcIixcbn07XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTI3OTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEJ1ZmZlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDcxMDMpLkJ1ZmZlcik7XG5cbi8vIE5vdGU6IFVURjE2LUxFIChvciBVQ1MyKSBjb2RlYyBpcyBOb2RlLmpzIG5hdGl2ZS4gU2VlIGVuY29kaW5ncy9pbnRlcm5hbC5qc1xuXG4vLyA9PSBVVEYxNi1CRSBjb2RlYy4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnRzLnV0ZjE2YmUgPSBVdGYxNkJFQ29kZWM7XG5mdW5jdGlvbiBVdGYxNkJFQ29kZWMoKSB7XG59XG5cblV0ZjE2QkVDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjE2QkVFbmNvZGVyO1xuVXRmMTZCRUNvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmMTZCRURlY29kZXI7XG5VdGYxNkJFQ29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG5mdW5jdGlvbiBVdGYxNkJFRW5jb2RlcigpIHtcbn1cblxuVXRmMTZCRUVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0ciwgJ3VjczInKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB2YXIgdG1wID0gYnVmW2ldOyBidWZbaV0gPSBidWZbaSsxXTsgYnVmW2krMV0gPSB0bXA7XG4gICAgfVxuICAgIHJldHVybiBidWY7XG59XG5cblV0ZjE2QkVFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGYxNkJFRGVjb2RlcigpIHtcbiAgICB0aGlzLm92ZXJmbG93Qnl0ZSA9IC0xO1xufVxuXG5VdGYxNkJFRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICBpZiAoYnVmLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gJyc7XG5cbiAgICB2YXIgYnVmMiA9IEJ1ZmZlci5hbGxvYyhidWYubGVuZ3RoICsgMSksXG4gICAgICAgIGkgPSAwLCBqID0gMDtcblxuICAgIGlmICh0aGlzLm92ZXJmbG93Qnl0ZSAhPT0gLTEpIHtcbiAgICAgICAgYnVmMlswXSA9IGJ1ZlswXTtcbiAgICAgICAgYnVmMlsxXSA9IHRoaXMub3ZlcmZsb3dCeXRlO1xuICAgICAgICBpID0gMTsgaiA9IDI7XG4gICAgfVxuXG4gICAgZm9yICg7IGkgPCBidWYubGVuZ3RoLTE7IGkgKz0gMiwgais9IDIpIHtcbiAgICAgICAgYnVmMltqXSA9IGJ1ZltpKzFdO1xuICAgICAgICBidWYyW2orMV0gPSBidWZbaV07XG4gICAgfVxuXG4gICAgdGhpcy5vdmVyZmxvd0J5dGUgPSAoaSA9PSBidWYubGVuZ3RoLTEpID8gYnVmW2J1Zi5sZW5ndGgtMV0gOiAtMTtcblxuICAgIHJldHVybiBidWYyLnNsaWNlKDAsIGopLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblV0ZjE2QkVEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm92ZXJmbG93Qnl0ZSA9IC0xO1xufVxuXG5cbi8vID09IFVURi0xNiBjb2RlYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNvZGVyIGNob29zZXMgYXV0b21hdGljYWxseSBmcm9tIFVURi0xNkxFIGFuZCBVVEYtMTZCRSB1c2luZyBCT00gYW5kIHNwYWNlLWJhc2VkIGhldXJpc3RpYy5cbi8vIERlZmF1bHRzIHRvIFVURi0xNkxFLCBhcyBpdCdzIHByZXZhbGVudCBhbmQgZGVmYXVsdCBpbiBOb2RlLlxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtMTYgYW5kIGh0dHA6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI3V0Zi0xNmxlXG4vLyBEZWNvZGVyIGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQ6IGljb252LmRlY29kZShidWYsICd1dGYxNicsIHtkZWZhdWx0RW5jb2Rpbmc6ICd1dGYtMTZiZSd9KTtcblxuLy8gRW5jb2RlciB1c2VzIFVURi0xNkxFIGFuZCBwcmVwZW5kcyBCT00gKHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggYWRkQk9NOiBmYWxzZSkuXG5cbmV4cG9ydHMudXRmMTYgPSBVdGYxNkNvZGVjO1xuZnVuY3Rpb24gVXRmMTZDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5pY29udiA9IGljb252O1xufVxuXG5VdGYxNkNvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmMTZFbmNvZGVyO1xuVXRmMTZDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFV0ZjE2RGVjb2RlcjtcblxuXG4vLyAtLSBFbmNvZGluZyAocGFzcy10aHJvdWdoKVxuXG5mdW5jdGlvbiBVdGYxNkVuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAob3B0aW9ucy5hZGRCT00gPT09IHVuZGVmaW5lZClcbiAgICAgICAgb3B0aW9ucy5hZGRCT00gPSB0cnVlO1xuICAgIHRoaXMuZW5jb2RlciA9IGNvZGVjLmljb252LmdldEVuY29kZXIoJ3V0Zi0xNmxlJywgb3B0aW9ucyk7XG59XG5cblV0ZjE2RW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKHN0cik7XG59XG5cblV0ZjE2RW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKTtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGYxNkRlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmRlY29kZXIgPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbEJ1ZnMgPSBbXTtcbiAgICB0aGlzLmluaXRpYWxCdWZzTGVuID0gMDtcblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xufVxuXG5VdGYxNkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgaWYgKCF0aGlzLmRlY29kZXIpIHtcbiAgICAgICAgLy8gQ29kZWMgaXMgbm90IGNob3NlbiB5ZXQuIEFjY3VtdWxhdGUgaW5pdGlhbCBieXRlcy5cbiAgICAgICAgdGhpcy5pbml0aWFsQnVmcy5wdXNoKGJ1Zik7XG4gICAgICAgIHRoaXMuaW5pdGlhbEJ1ZnNMZW4gKz0gYnVmLmxlbmd0aDtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxCdWZzTGVuIDwgMTYpIC8vIFdlIG5lZWQgbW9yZSBieXRlcyB0byB1c2Ugc3BhY2UgaGV1cmlzdGljIChzZWUgYmVsb3cpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG5cbiAgICAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggYnl0ZXMgLT4gZGV0ZWN0IGVuZGlhbm5lc3MuXG4gICAgICAgIHZhciBlbmNvZGluZyA9IGRldGVjdEVuY29kaW5nKHRoaXMuaW5pdGlhbEJ1ZnMsIHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO1xuICAgICAgICB0aGlzLmRlY29kZXIgPSB0aGlzLmljb252LmdldERlY29kZXIoZW5jb2RpbmcsIHRoaXMub3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHJlc1N0ciA9ICcnO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICByZXNTdHIgKz0gdGhpcy5kZWNvZGVyLndyaXRlKHRoaXMuaW5pdGlhbEJ1ZnNbaV0pO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoID0gdGhpcy5pbml0aWFsQnVmc0xlbiA9IDA7XG4gICAgICAgIHJldHVybiByZXNTdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShidWYpO1xufVxuXG5VdGYxNkRlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5kZWNvZGVyKSB7XG4gICAgICAgIHZhciBlbmNvZGluZyA9IGRldGVjdEVuY29kaW5nKHRoaXMuaW5pdGlhbEJ1ZnMsIHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO1xuICAgICAgICB0aGlzLmRlY29kZXIgPSB0aGlzLmljb252LmdldERlY29kZXIoZW5jb2RpbmcsIHRoaXMub3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHJlc1N0ciA9ICcnO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICByZXNTdHIgKz0gdGhpcy5kZWNvZGVyLndyaXRlKHRoaXMuaW5pdGlhbEJ1ZnNbaV0pO1xuXG4gICAgICAgIHZhciB0cmFpbCA9IHRoaXMuZGVjb2Rlci5lbmQoKTtcbiAgICAgICAgaWYgKHRyYWlsKVxuICAgICAgICAgICAgcmVzU3RyICs9IHRyYWlsO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoID0gdGhpcy5pbml0aWFsQnVmc0xlbiA9IDA7XG4gICAgICAgIHJldHVybiByZXNTdHI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZXIuZW5kKCk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdEVuY29kaW5nKGJ1ZnMsIGRlZmF1bHRFbmNvZGluZykge1xuICAgIHZhciBiID0gW107XG4gICAgdmFyIGNoYXJzUHJvY2Vzc2VkID0gMDtcbiAgICB2YXIgYXNjaWlDaGFyc0xFID0gMCwgYXNjaWlDaGFyc0JFID0gMDsgLy8gTnVtYmVyIG9mIEFTQ0lJIGNoYXJzIHdoZW4gZGVjb2RlZCBhcyBMRSBvciBCRS5cblxuICAgIG91dGVyX2xvb3A6XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBidWZzW2ldO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJ1Zi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgYi5wdXNoKGJ1ZltqXSk7XG4gICAgICAgICAgICBpZiAoYi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhcnNQcm9jZXNzZWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgQk9NIGZpcnN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoYlswXSA9PT0gMHhGRiAmJiBiWzFdID09PSAweEZFKSByZXR1cm4gJ3V0Zi0xNmxlJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJbMF0gPT09IDB4RkUgJiYgYlsxXSA9PT0gMHhGRikgcmV0dXJuICd1dGYtMTZiZSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJbMF0gPT09IDAgJiYgYlsxXSAhPT0gMCkgYXNjaWlDaGFyc0JFKys7XG4gICAgICAgICAgICAgICAgaWYgKGJbMF0gIT09IDAgJiYgYlsxXSA9PT0gMCkgYXNjaWlDaGFyc0xFKys7XG5cbiAgICAgICAgICAgICAgICBiLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgY2hhcnNQcm9jZXNzZWQrKztcblxuICAgICAgICAgICAgICAgIGlmIChjaGFyc1Byb2Nlc3NlZCA+PSAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXJfbG9vcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNYWtlIGRlY2lzaW9ucy5cbiAgICAvLyBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgY29udGVudCBoYXMgQVNDSUkgY2hhcnMgKFUrMDAqKiksIGJ1dCB0aGUgb3Bwb3NpdGUgKFUrKiowMCkgaXMgdW5jb21tb24uXG4gICAgLy8gU28sIHdlIGNvdW50IEFTQ0lJIGFzIGlmIGl0IHdhcyBMRSBvciBCRSwgYW5kIGRlY2lkZSBmcm9tIHRoYXQuXG4gICAgaWYgKGFzY2lpQ2hhcnNCRSA+IGFzY2lpQ2hhcnNMRSkgcmV0dXJuICd1dGYtMTZiZSc7XG4gICAgaWYgKGFzY2lpQ2hhcnNCRSA8IGFzY2lpQ2hhcnNMRSkgcmV0dXJuICd1dGYtMTZsZSc7XG5cbiAgICAvLyBDb3VsZG4ndCBkZWNpZGUgKGxpa2VseSBhbGwgemVyb3Mgb3Igbm90IGVub3VnaCBkYXRhKS5cbiAgICByZXR1cm4gZGVmYXVsdEVuY29kaW5nIHx8ICd1dGYtMTZsZSc7XG59XG5cblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3Njg4OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBCdWZmZXIgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg3MTAzKS5CdWZmZXIpO1xuXG4vLyA9PSBVVEYzMi1MRS9CRSBjb2RlYy4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnRzLl91dGYzMiA9IFV0ZjMyQ29kZWM7XG5cbmZ1bmN0aW9uIFV0ZjMyQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbiAgICB0aGlzLmJvbUF3YXJlID0gdHJ1ZTtcbiAgICB0aGlzLmlzTEUgPSBjb2RlY09wdGlvbnMuaXNMRTtcbn1cblxuZXhwb3J0cy51dGYzMmxlID0geyB0eXBlOiAnX3V0ZjMyJywgaXNMRTogdHJ1ZSB9O1xuZXhwb3J0cy51dGYzMmJlID0geyB0eXBlOiAnX3V0ZjMyJywgaXNMRTogZmFsc2UgfTtcblxuLy8gQWxpYXNlc1xuZXhwb3J0cy51Y3M0bGUgPSAndXRmMzJsZSc7XG5leHBvcnRzLnVjczRiZSA9ICd1dGYzMmJlJztcblxuVXRmMzJDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjMyRW5jb2RlcjtcblV0ZjMyQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGYzMkRlY29kZXI7XG5cbi8vIC0tIEVuY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjMyRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuaXNMRSA9IGNvZGVjLmlzTEU7XG4gICAgdGhpcy5oaWdoU3Vycm9nYXRlID0gMDtcbn1cblxuVXRmMzJFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBzcmMgPSBCdWZmZXIuZnJvbShzdHIsICd1Y3MyJyk7XG4gICAgdmFyIGRzdCA9IEJ1ZmZlci5hbGxvYyhzcmMubGVuZ3RoICogMik7XG4gICAgdmFyIHdyaXRlMzIgPSB0aGlzLmlzTEUgPyBkc3Qud3JpdGVVSW50MzJMRSA6IGRzdC53cml0ZVVJbnQzMkJFO1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIGNvZGUgPSBzcmMucmVhZFVJbnQxNkxFKGkpO1xuICAgICAgICB2YXIgaXNIaWdoU3Vycm9nYXRlID0gKDB4RDgwMCA8PSBjb2RlICYmIGNvZGUgPCAweERDMDApO1xuICAgICAgICB2YXIgaXNMb3dTdXJyb2dhdGUgPSAoMHhEQzAwIDw9IGNvZGUgJiYgY29kZSA8IDB4RTAwMCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGlnaFN1cnJvZ2F0ZSkge1xuICAgICAgICAgICAgaWYgKGlzSGlnaFN1cnJvZ2F0ZSB8fCAhaXNMb3dTdXJyb2dhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgdHdvIGhpZ2ggc3Vycm9nYXRlcyBpbiBhIHJvdywgbm9yIGEgaGlnaCBzdXJyb2dhdGUgd2hpY2ggaXNuJ3QgZm9sbG93ZWQgYnkgYSBsb3dcbiAgICAgICAgICAgICAgICAvLyBzdXJyb2dhdGUuIElmIHRoaXMgaGFwcGVucywga2VlcCB0aGUgcGVuZGluZyBoaWdoIHN1cnJvZ2F0ZSBhcyBhIHN0YW5kLWFsb25lIHNlbWktaW52YWxpZCBjaGFyYWN0ZXJcbiAgICAgICAgICAgICAgICAvLyAodGVjaG5pY2FsbHkgd3JvbmcsIGJ1dCBleHBlY3RlZCBieSBzb21lIGFwcGxpY2F0aW9ucywgbGlrZSBXaW5kb3dzIGZpbGUgbmFtZXMpLlxuICAgICAgICAgICAgICAgIHdyaXRlMzIuY2FsbChkc3QsIHRoaXMuaGlnaFN1cnJvZ2F0ZSwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAzMi1iaXQgdmFsdWUgZnJvbSBoaWdoIGFuZCBsb3cgc3Vycm9nYXRlcztcbiAgICAgICAgICAgICAgICB2YXIgY29kZXBvaW50ID0gKCgodGhpcy5oaWdoU3Vycm9nYXRlIC0gMHhEODAwKSA8PCAxMCkgfCAoY29kZSAtIDB4REMwMCkpICsgMHgxMDAwMDtcblxuICAgICAgICAgICAgICAgIHdyaXRlMzIuY2FsbChkc3QsIGNvZGVwb2ludCwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hTdXJyb2dhdGUgPSAwO1xuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNIaWdoU3Vycm9nYXRlKVxuICAgICAgICAgICAgdGhpcy5oaWdoU3Vycm9nYXRlID0gY29kZTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFdmVuIGlmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGxvdyBzdXJyb2dhdGUsIHdpdGggbm8gcHJldmlvdXMgaGlnaCBzdXJyb2dhdGUsIHdlJ2xsXG4gICAgICAgICAgICAvLyBlbmNvZGUgaXQgYXMgYSBzZW1pLWludmFsaWQgc3RhbmQtYWxvbmUgY2hhcmFjdGVyIGZvciB0aGUgc2FtZSByZWFzb25zIGV4cHJlc3NlZCBhYm92ZSBmb3JcbiAgICAgICAgICAgIC8vIHVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlcy5cbiAgICAgICAgICAgIHdyaXRlMzIuY2FsbChkc3QsIGNvZGUsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgIHRoaXMuaGlnaFN1cnJvZ2F0ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2Zmc2V0IDwgZHN0Lmxlbmd0aClcbiAgICAgICAgZHN0ID0gZHN0LnNsaWNlKDAsIG9mZnNldCk7XG5cbiAgICByZXR1cm4gZHN0O1xufTtcblxuVXRmMzJFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAvLyBUcmVhdCBhbnkgbGVmdG92ZXIgaGlnaCBzdXJyb2dhdGUgYXMgYSBzZW1pLXZhbGlkIGluZGVwZW5kZW50IGNoYXJhY3Rlci5cbiAgICBpZiAoIXRoaXMuaGlnaFN1cnJvZ2F0ZSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYyg0KTtcblxuICAgIGlmICh0aGlzLmlzTEUpXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQzMkxFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwgMCk7XG4gICAgZWxzZVxuICAgICAgICBidWYud3JpdGVVSW50MzJCRSh0aGlzLmhpZ2hTdXJyb2dhdGUsIDApO1xuXG4gICAgdGhpcy5oaWdoU3Vycm9nYXRlID0gMDtcblxuICAgIHJldHVybiBidWY7XG59O1xuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGYzMkRlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmlzTEUgPSBjb2RlYy5pc0xFO1xuICAgIHRoaXMuYmFkQ2hhciA9IGNvZGVjLmljb252LmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApO1xuICAgIHRoaXMub3ZlcmZsb3cgPSBbXTtcbn1cblxuVXRmMzJEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHNyYykge1xuICAgIGlmIChzcmMubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gJyc7XG5cbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGVwb2ludCA9IDA7XG4gICAgdmFyIGRzdCA9IEJ1ZmZlci5hbGxvYyhzcmMubGVuZ3RoICsgNCk7XG4gICAgdmFyIG9mZnNldCA9IDA7XG4gICAgdmFyIGlzTEUgPSB0aGlzLmlzTEU7XG4gICAgdmFyIG92ZXJmbG93ID0gdGhpcy5vdmVyZmxvdztcbiAgICB2YXIgYmFkQ2hhciA9IHRoaXMuYmFkQ2hhcjtcblxuICAgIGlmIChvdmVyZmxvdy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoOyBpIDwgc3JjLmxlbmd0aCAmJiBvdmVyZmxvdy5sZW5ndGggPCA0OyBpKyspXG4gICAgICAgICAgICBvdmVyZmxvdy5wdXNoKHNyY1tpXSk7XG4gICAgICAgIFxuICAgICAgICBpZiAob3ZlcmZsb3cubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBjb2RlcG9pbnQgaXMgYSBzaWduZWQgaW50MzIgYW5kIGNhbiBiZSBuZWdhdGl2ZS5cbiAgICAgICAgICAgIC8vIE5PVEU6IFdlIGNvcGllZCB0aGlzIGJsb2NrIGZyb20gYmVsb3cgdG8gaGVscCBWOCBvcHRpbWl6ZSBpdCAoaXQgd29ya3Mgd2l0aCBhcnJheSwgbm90IGJ1ZmZlcikuXG4gICAgICAgICAgICBpZiAoaXNMRSkge1xuICAgICAgICAgICAgICAgIGNvZGVwb2ludCA9IG92ZXJmbG93W2ldIHwgKG92ZXJmbG93W2krMV0gPDwgOCkgfCAob3ZlcmZsb3dbaSsyXSA8PCAxNikgfCAob3ZlcmZsb3dbaSszXSA8PCAyNCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvZGVwb2ludCA9IG92ZXJmbG93W2krM10gfCAob3ZlcmZsb3dbaSsyXSA8PCA4KSB8IChvdmVyZmxvd1tpKzFdIDw8IDE2KSB8IChvdmVyZmxvd1tpXSA8PCAyNCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdmVyZmxvdy5sZW5ndGggPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgPSBfd3JpdGVDb2RlcG9pbnQoZHN0LCBvZmZzZXQsIGNvZGVwb2ludCwgYmFkQ2hhcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNYWluIGxvb3AuIFNob3VsZCBiZSBhcyBvcHRpbWl6ZWQgYXMgcG9zc2libGUuXG4gICAgZm9yICg7IGkgPCBzcmMubGVuZ3RoIC0gMzsgaSArPSA0KSB7XG4gICAgICAgIC8vIE5PVEU6IGNvZGVwb2ludCBpcyBhIHNpZ25lZCBpbnQzMiBhbmQgY2FuIGJlIG5lZ2F0aXZlLlxuICAgICAgICBpZiAoaXNMRSkge1xuICAgICAgICAgICAgY29kZXBvaW50ID0gc3JjW2ldIHwgKHNyY1tpKzFdIDw8IDgpIHwgKHNyY1tpKzJdIDw8IDE2KSB8IChzcmNbaSszXSA8PCAyNCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2RlcG9pbnQgPSBzcmNbaSszXSB8IChzcmNbaSsyXSA8PCA4KSB8IChzcmNbaSsxXSA8PCAxNikgfCAoc3JjW2ldIDw8IDI0KTtcbiAgICAgICAgfVxuICAgICAgICBvZmZzZXQgPSBfd3JpdGVDb2RlcG9pbnQoZHN0LCBvZmZzZXQsIGNvZGVwb2ludCwgYmFkQ2hhcik7XG4gICAgfVxuXG4gICAgLy8gS2VlcCBvdmVyZmxvd2luZyBieXRlcy5cbiAgICBmb3IgKDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgICBvdmVyZmxvdy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRzdC5zbGljZSgwLCBvZmZzZXQpLnRvU3RyaW5nKCd1Y3MyJyk7XG59O1xuXG5mdW5jdGlvbiBfd3JpdGVDb2RlcG9pbnQoZHN0LCBvZmZzZXQsIGNvZGVwb2ludCwgYmFkQ2hhcikge1xuICAgIC8vIE5PVEU6IGNvZGVwb2ludCBpcyBzaWduZWQgaW50MzIgYW5kIGNhbiBiZSBuZWdhdGl2ZS4gV2Uga2VlcCBpdCB0aGF0IHdheSB0byBoZWxwIFY4IHdpdGggb3B0aW1pemF0aW9ucy5cbiAgICBpZiAoY29kZXBvaW50IDwgMCB8fCBjb2RlcG9pbnQgPiAweDEwRkZGRikge1xuICAgICAgICAvLyBOb3QgYSB2YWxpZCBVbmljb2RlIGNvZGVwb2ludFxuICAgICAgICBjb2RlcG9pbnQgPSBiYWRDaGFyO1xuICAgIH0gXG5cbiAgICAvLyBFcGhlbWVyYWwgUGxhbmVzOiBXcml0ZSBoaWdoIHN1cnJvZ2F0ZS5cbiAgICBpZiAoY29kZXBvaW50ID49IDB4MTAwMDApIHtcbiAgICAgICAgY29kZXBvaW50IC09IDB4MTAwMDA7XG5cbiAgICAgICAgdmFyIGhpZ2ggPSAweEQ4MDAgfCAoY29kZXBvaW50ID4+IDEwKTtcbiAgICAgICAgZHN0W29mZnNldCsrXSA9IGhpZ2ggJiAweGZmO1xuICAgICAgICBkc3Rbb2Zmc2V0KytdID0gaGlnaCA+PiA4O1xuXG4gICAgICAgIC8vIExvdyBzdXJyb2dhdGUgaXMgd3JpdHRlbiBiZWxvdy5cbiAgICAgICAgdmFyIGNvZGVwb2ludCA9IDB4REMwMCB8IChjb2RlcG9pbnQgJiAweDNGRik7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgQk1QIGNoYXIgb3IgbG93IHN1cnJvZ2F0ZS5cbiAgICBkc3Rbb2Zmc2V0KytdID0gY29kZXBvaW50ICYgMHhmZjtcbiAgICBkc3Rbb2Zmc2V0KytdID0gY29kZXBvaW50ID4+IDg7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xufTtcblxuVXRmMzJEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm92ZXJmbG93Lmxlbmd0aCA9IDA7XG59O1xuXG4vLyA9PSBVVEYtMzIgQXV0byBjb2RlYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNvZGVyIGNob29zZXMgYXV0b21hdGljYWxseSBmcm9tIFVURi0zMkxFIGFuZCBVVEYtMzJCRSB1c2luZyBCT00gYW5kIHNwYWNlLWJhc2VkIGhldXJpc3RpYy5cbi8vIERlZmF1bHRzIHRvIFVURi0zMkxFLiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi0zMlxuLy8gRW5jb2Rlci9kZWNvZGVyIGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQ6IGljb252LmRlY29kZShidWYsICd1dGYzMicsIHtkZWZhdWx0RW5jb2Rpbmc6ICd1dGYtMzJiZSd9KTtcblxuLy8gRW5jb2RlciBwcmVwZW5kcyBCT00gKHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggKGFkZEJPTTogZmFsc2V9KS5cblxuZXhwb3J0cy51dGYzMiA9IFV0ZjMyQXV0b0NvZGVjO1xuZXhwb3J0cy51Y3M0ID0gJ3V0ZjMyJztcblxuZnVuY3Rpb24gVXRmMzJBdXRvQ29kZWMob3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmljb252ID0gaWNvbnY7XG59XG5cblV0ZjMyQXV0b0NvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmMzJBdXRvRW5jb2RlcjtcblV0ZjMyQXV0b0NvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmMzJBdXRvRGVjb2RlcjtcblxuLy8gLS0gRW5jb2RpbmdcblxuZnVuY3Rpb24gVXRmMzJBdXRvRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKG9wdGlvbnMuYWRkQk9NID09PSB1bmRlZmluZWQpXG4gICAgICAgIG9wdGlvbnMuYWRkQk9NID0gdHJ1ZTtcblxuICAgIHRoaXMuZW5jb2RlciA9IGNvZGVjLmljb252LmdldEVuY29kZXIob3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0Zi0zMmxlJywgb3B0aW9ucyk7XG59XG5cblV0ZjMyQXV0b0VuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShzdHIpO1xufTtcblxuVXRmMzJBdXRvRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKTtcbn07XG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjMyQXV0b0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmRlY29kZXIgPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbEJ1ZnMgPSBbXTtcbiAgICB0aGlzLmluaXRpYWxCdWZzTGVuID0gMDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbn1cblxuVXRmMzJBdXRvRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICBpZiAoIXRoaXMuZGVjb2RlcikgeyBcbiAgICAgICAgLy8gQ29kZWMgaXMgbm90IGNob3NlbiB5ZXQuIEFjY3VtdWxhdGUgaW5pdGlhbCBieXRlcy5cbiAgICAgICAgdGhpcy5pbml0aWFsQnVmcy5wdXNoKGJ1Zik7XG4gICAgICAgIHRoaXMuaW5pdGlhbEJ1ZnNMZW4gKz0gYnVmLmxlbmd0aDtcblxuICAgICAgICBpZiAodGhpcy5pbml0aWFsQnVmc0xlbiA8IDMyKSAvLyBXZSBuZWVkIG1vcmUgYnl0ZXMgdG8gdXNlIHNwYWNlIGhldXJpc3RpYyAoc2VlIGJlbG93KVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuXG4gICAgICAgIC8vIFdlIGhhdmUgZW5vdWdoIGJ5dGVzIC0+IGRldGVjdCBlbmRpYW5uZXNzLlxuICAgICAgICB2YXIgZW5jb2RpbmcgPSBkZXRlY3RFbmNvZGluZyh0aGlzLmluaXRpYWxCdWZzLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgICAgIHZhciByZXNTdHIgPSAnJztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmluaXRpYWxCdWZzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgcmVzU3RyICs9IHRoaXMuZGVjb2Rlci53cml0ZSh0aGlzLmluaXRpYWxCdWZzW2ldKTtcblxuICAgICAgICB0aGlzLmluaXRpYWxCdWZzLmxlbmd0aCA9IHRoaXMuaW5pdGlhbEJ1ZnNMZW4gPSAwO1xuICAgICAgICByZXR1cm4gcmVzU3RyO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoYnVmKTtcbn07XG5cblV0ZjMyQXV0b0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5kZWNvZGVyKSB7XG4gICAgICAgIHZhciBlbmNvZGluZyA9IGRldGVjdEVuY29kaW5nKHRoaXMuaW5pdGlhbEJ1ZnMsIHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO1xuICAgICAgICB0aGlzLmRlY29kZXIgPSB0aGlzLmljb252LmdldERlY29kZXIoZW5jb2RpbmcsIHRoaXMub3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHJlc1N0ciA9ICcnO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICByZXNTdHIgKz0gdGhpcy5kZWNvZGVyLndyaXRlKHRoaXMuaW5pdGlhbEJ1ZnNbaV0pO1xuXG4gICAgICAgIHZhciB0cmFpbCA9IHRoaXMuZGVjb2Rlci5lbmQoKTtcbiAgICAgICAgaWYgKHRyYWlsKVxuICAgICAgICAgICAgcmVzU3RyICs9IHRyYWlsO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoID0gdGhpcy5pbml0aWFsQnVmc0xlbiA9IDA7XG4gICAgICAgIHJldHVybiByZXNTdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKTtcbn07XG5cbmZ1bmN0aW9uIGRldGVjdEVuY29kaW5nKGJ1ZnMsIGRlZmF1bHRFbmNvZGluZykge1xuICAgIHZhciBiID0gW107XG4gICAgdmFyIGNoYXJzUHJvY2Vzc2VkID0gMDtcbiAgICB2YXIgaW52YWxpZExFID0gMCwgaW52YWxpZEJFID0gMDsgICAvLyBOdW1iZXIgb2YgaW52YWxpZCBjaGFycyB3aGVuIGRlY29kZWQgYXMgTEUgb3IgQkUuXG4gICAgdmFyIGJtcENoYXJzTEUgPSAwLCBibXBDaGFyc0JFID0gMDsgLy8gTnVtYmVyIG9mIEJNUCBjaGFycyB3aGVuIGRlY29kZWQgYXMgTEUgb3IgQkUuXG5cbiAgICBvdXRlcl9sb29wOlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYnVmID0gYnVmc1tpXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBidWYubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGIucHVzaChidWZbal0pO1xuICAgICAgICAgICAgaWYgKGIubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJzUHJvY2Vzc2VkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIEJPTSBmaXJzdC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJbMF0gPT09IDB4RkYgJiYgYlsxXSA9PT0gMHhGRSAmJiBiWzJdID09PSAwICYmIGJbM10gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndXRmLTMybGUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChiWzBdID09PSAwICYmIGJbMV0gPT09IDAgJiYgYlsyXSA9PT0gMHhGRSAmJiBiWzNdID09PSAweEZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3V0Zi0zMmJlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChiWzBdICE9PSAwIHx8IGJbMV0gPiAweDEwKSBpbnZhbGlkQkUrKztcbiAgICAgICAgICAgICAgICBpZiAoYlszXSAhPT0gMCB8fCBiWzJdID4gMHgxMCkgaW52YWxpZExFKys7XG5cbiAgICAgICAgICAgICAgICBpZiAoYlswXSA9PT0gMCAmJiBiWzFdID09PSAwICYmIChiWzJdICE9PSAwIHx8IGJbM10gIT09IDApKSBibXBDaGFyc0JFKys7XG4gICAgICAgICAgICAgICAgaWYgKChiWzBdICE9PSAwIHx8IGJbMV0gIT09IDApICYmIGJbMl0gPT09IDAgJiYgYlszXSA9PT0gMCkgYm1wQ2hhcnNMRSsrO1xuXG4gICAgICAgICAgICAgICAgYi5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIGNoYXJzUHJvY2Vzc2VkKys7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hhcnNQcm9jZXNzZWQgPj0gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyX2xvb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWFrZSBkZWNpc2lvbnMuXG4gICAgaWYgKGJtcENoYXJzQkUgLSBpbnZhbGlkQkUgPiBibXBDaGFyc0xFIC0gaW52YWxpZExFKSAgcmV0dXJuICd1dGYtMzJiZSc7XG4gICAgaWYgKGJtcENoYXJzQkUgLSBpbnZhbGlkQkUgPCBibXBDaGFyc0xFIC0gaW52YWxpZExFKSAgcmV0dXJuICd1dGYtMzJsZSc7XG5cbiAgICAvLyBDb3VsZG4ndCBkZWNpZGUgKGxpa2VseSBhbGwgemVyb3Mgb3Igbm90IGVub3VnaCBkYXRhKS5cbiAgICByZXR1cm4gZGVmYXVsdEVuY29kaW5nIHx8ICd1dGYtMzJsZSc7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc1ODpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEJ1ZmZlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDcxMDMpLkJ1ZmZlcik7XG5cbi8vIFVURi03IGNvZGVjLCBhY2NvcmRpbmcgdG8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIxNTJcbi8vIFNlZSBhbHNvIGJlbG93IGEgVVRGLTctSU1BUCBjb2RlYywgYWNjb3JkaW5nIHRvIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1MDEjc2VjdGlvbi01LjEuM1xuXG5leHBvcnRzLnV0ZjcgPSBVdGY3Q29kZWM7XG5leHBvcnRzLnVuaWNvZGUxMXV0ZjcgPSAndXRmNyc7IC8vIEFsaWFzIFVOSUNPREUtMS0xLVVURi03XG5mdW5jdGlvbiBVdGY3Q29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbn07XG5cblV0ZjdDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjdFbmNvZGVyO1xuVXRmN0NvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmN0RlY29kZXI7XG5VdGY3Q29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG52YXIgbm9uRGlyZWN0Q2hhcnMgPSAvW15BLVphLXowLTknXFwoXFwpLC1cXC5cXC86XFw/IFxcblxcclxcdF0rL2c7XG5cbmZ1bmN0aW9uIFV0ZjdFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xufVxuXG5VdGY3RW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAvLyBOYWl2ZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAvLyBOb24tZGlyZWN0IGNoYXJzIGFyZSBlbmNvZGVkIGFzIFwiKzxiYXNlNjQ+LVwiOyBzaW5nbGUgXCIrXCIgY2hhciBpcyBlbmNvZGVkIGFzIFwiKy1cIi5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLnJlcGxhY2Uobm9uRGlyZWN0Q2hhcnMsIGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgICAgIHJldHVybiBcIitcIiArIChjaHVuayA9PT0gJysnID8gJycgOiBcbiAgICAgICAgICAgIHRoaXMuaWNvbnYuZW5jb2RlKGNodW5rLCAndXRmMTYtYmUnKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvPSskLywgJycpKSBcbiAgICAgICAgICAgICsgXCItXCI7XG4gICAgfS5iaW5kKHRoaXMpKSk7XG59XG5cblV0ZjdFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3RGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xufVxuXG52YXIgYmFzZTY0UmVnZXggPSAvW0EtWmEtejAtOVxcLytdLztcbnZhciBiYXNlNjRDaGFycyA9IFtdO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKylcbiAgICBiYXNlNjRDaGFyc1tpXSA9IGJhc2U2NFJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XG5cbnZhciBwbHVzQ2hhciA9ICcrJy5jaGFyQ29kZUF0KDApLCBcbiAgICBtaW51c0NoYXIgPSAnLScuY2hhckNvZGVBdCgwKSxcbiAgICBhbmRDaGFyID0gJyYnLmNoYXJDb2RlQXQoMCk7XG5cblV0ZjdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciByZXMgPSBcIlwiLCBsYXN0SSA9IDAsXG4gICAgICAgIGluQmFzZTY0ID0gdGhpcy5pbkJhc2U2NCxcbiAgICAgICAgYmFzZTY0QWNjdW0gPSB0aGlzLmJhc2U2NEFjY3VtO1xuXG4gICAgLy8gVGhlIGRlY29kZXIgaXMgbW9yZSBpbnZvbHZlZCBhcyB3ZSBtdXN0IGhhbmRsZSBjaHVua3MgaW4gc3RyZWFtLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpbkJhc2U2NCkgeyAvLyBXZSdyZSBpbiBkaXJlY3QgbW9kZS5cbiAgICAgICAgICAgIC8vIFdyaXRlIGRpcmVjdCBjaGFycyB1bnRpbCAnKydcbiAgICAgICAgICAgIGlmIChidWZbaV0gPT0gcGx1c0NoYXIpIHtcbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJLCBpKSwgXCJhc2NpaVwiKTsgLy8gV3JpdGUgZGlyZWN0IGNoYXJzLlxuICAgICAgICAgICAgICAgIGxhc3RJID0gaSsxO1xuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gV2UgZGVjb2RlIGJhc2U2NC5cbiAgICAgICAgICAgIGlmICghYmFzZTY0Q2hhcnNbYnVmW2ldXSkgeyAvLyBCYXNlNjQgZW5kZWQuXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGFzdEkgJiYgYnVmW2ldID09IG1pbnVzQ2hhcikgey8vIFwiKy1cIiAtPiBcIitcIlxuICAgICAgICAgICAgICAgICAgICByZXMgKz0gXCIrXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGI2NHN0ciA9IGJhc2U2NEFjY3VtICsgdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJLCBpKSwgXCJhc2NpaVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlci5mcm9tKGI2NHN0ciwgJ2Jhc2U2NCcpLCBcInV0ZjE2LWJlXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChidWZbaV0gIT0gbWludXNDaGFyKSAvLyBNaW51cyBpcyBhYnNvcmJlZCBhZnRlciBiYXNlNjQuXG4gICAgICAgICAgICAgICAgICAgIGktLTtcblxuICAgICAgICAgICAgICAgIGxhc3RJID0gaSsxO1xuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYmFzZTY0QWNjdW0gPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSksIFwiYXNjaWlcIik7IC8vIFdyaXRlIGRpcmVjdCBjaGFycy5cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEkpLCBcImFzY2lpXCIpO1xuXG4gICAgICAgIHZhciBjYW5CZURlY29kZWQgPSBiNjRzdHIubGVuZ3RoIC0gKGI2NHN0ci5sZW5ndGggJSA4KTsgLy8gTWluaW1hbCBjaHVuazogMiBxdWFkcyAtPiAyeDMgYnl0ZXMgLT4gMyBjaGFycy5cbiAgICAgICAgYmFzZTY0QWNjdW0gPSBiNjRzdHIuc2xpY2UoY2FuQmVEZWNvZGVkKTsgLy8gVGhlIHJlc3Qgd2lsbCBiZSBkZWNvZGVkIGluIGZ1dHVyZS5cbiAgICAgICAgYjY0c3RyID0gYjY0c3RyLnNsaWNlKDAsIGNhbkJlRGVjb2RlZCk7XG5cbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlci5mcm9tKGI2NHN0ciwgJ2Jhc2U2NCcpLCBcInV0ZjE2LWJlXCIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5CYXNlNjQgPSBpbkJhc2U2NDtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gYmFzZTY0QWNjdW07XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5VdGY3RGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQgJiYgdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGggPiAwKVxuICAgICAgICByZXMgPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xuICAgIHJldHVybiByZXM7XG59XG5cblxuLy8gVVRGLTctSU1BUCBjb2RlYy5cbi8vIFJGQzM1MDEgU2VjLiA1LjEuMyBNb2RpZmllZCBVVEYtNyAoaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTUuMS4zKVxuLy8gRGlmZmVyZW5jZXM6XG4vLyAgKiBCYXNlNjQgcGFydCBpcyBzdGFydGVkIGJ5IFwiJlwiIGluc3RlYWQgb2YgXCIrXCJcbi8vICAqIERpcmVjdCBjaGFyYWN0ZXJzIGFyZSAweDIwLTB4N0UsIGV4Y2VwdCBcIiZcIiAoMHgyNilcbi8vICAqIEluIEJhc2U2NCwgXCIsXCIgaXMgdXNlZCBpbnN0ZWFkIG9mIFwiL1wiXG4vLyAgKiBCYXNlNjQgbXVzdCBub3QgYmUgdXNlZCB0byByZXByZXNlbnQgZGlyZWN0IGNoYXJhY3RlcnMuXG4vLyAgKiBObyBpbXBsaWNpdCBzaGlmdCBiYWNrIGZyb20gQmFzZTY0IChzaG91bGQgYWx3YXlzIGVuZCB3aXRoICctJylcbi8vICAqIFN0cmluZyBtdXN0IGVuZCBpbiBub24tc2hpZnRlZCBwb3NpdGlvbi5cbi8vICAqIFwiLSZcIiB3aGlsZSBpbiBiYXNlNjQgaXMgbm90IGFsbG93ZWQuXG5cblxuZXhwb3J0cy51dGY3aW1hcCA9IFV0ZjdJTUFQQ29kZWM7XG5mdW5jdGlvbiBVdGY3SU1BUENvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmljb252ID0gaWNvbnY7XG59O1xuXG5VdGY3SU1BUENvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmN0lNQVBFbmNvZGVyO1xuVXRmN0lNQVBDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFV0ZjdJTUFQRGVjb2RlcjtcblV0ZjdJTUFQQ29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3SU1BUEVuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBCdWZmZXIuYWxsb2MoNik7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IDA7XG59XG5cblV0ZjdJTUFQRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LFxuICAgICAgICBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW0sXG4gICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gdGhpcy5iYXNlNjRBY2N1bUlkeCxcbiAgICAgICAgYnVmID0gQnVmZmVyLmFsbG9jKHN0ci5sZW5ndGgqNSArIDEwKSwgYnVmSWR4ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB1Q2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoMHgyMCA8PSB1Q2hhciAmJiB1Q2hhciA8PSAweDdFKSB7IC8vIERpcmVjdCBjaGFyYWN0ZXIgb3IgJyYnLlxuICAgICAgICAgICAgaWYgKGluQmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGJhc2U2NEFjY3VtSWR4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBidWZJZHggKz0gYnVmLndyaXRlKGJhc2U2NEFjY3VtLnNsaWNlKDAsIGJhc2U2NEFjY3VtSWR4KS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJykucmVwbGFjZSgvPSskLywgJycpLCBidWZJZHgpO1xuICAgICAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bUlkeCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IG1pbnVzQ2hhcjsgLy8gV3JpdGUgJy0nLCB0aGVuIGdvIHRvIGRpcmVjdCBtb2RlLlxuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gdUNoYXI7IC8vIFdyaXRlIGRpcmVjdCBjaGFyYWN0ZXJcblxuICAgICAgICAgICAgICAgIGlmICh1Q2hhciA9PT0gYW5kQ2hhcikgIC8vIEFtcGVyc2FuZCAtPiAnJi0nXG4gICAgICAgICAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHsgLy8gTm9uLWRpcmVjdCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gYW5kQ2hhcjsgLy8gV3JpdGUgJyYnLCB0aGVuIGdvIHRvIGJhc2U2NCBtb2RlLlxuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJhc2U2NCkge1xuICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtW2Jhc2U2NEFjY3VtSWR4KytdID0gdUNoYXIgPj4gODtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bVtiYXNlNjRBY2N1bUlkeCsrXSA9IHVDaGFyICYgMHhGRjtcblxuICAgICAgICAgICAgICAgIGlmIChiYXNlNjRBY2N1bUlkeCA9PSBiYXNlNjRBY2N1bS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZShiYXNlNjRBY2N1bS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJyksIGJ1ZklkeCk7XG4gICAgICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gaW5CYXNlNjQ7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IGJhc2U2NEFjY3VtSWR4O1xuXG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xufVxuXG5VdGY3SU1BUEVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2MoMTApLCBidWZJZHggPSAwO1xuICAgIGlmICh0aGlzLmluQmFzZTY0KSB7XG4gICAgICAgIGlmICh0aGlzLmJhc2U2NEFjY3VtSWR4ID4gMCkge1xuICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsIHRoaXMuYmFzZTY0QWNjdW1JZHgpLnRvU3RyaW5nKCdiYXNlNjQnKS5yZXBsYWNlKC9cXC8vZywgJywnKS5yZXBsYWNlKC89KyQvLCAnJyksIGJ1ZklkeCk7XG4gICAgICAgICAgICB0aGlzLmJhc2U2NEFjY3VtSWR4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7IC8vIFdyaXRlICctJywgdGhlbiBnbyB0byBkaXJlY3QgbW9kZS5cbiAgICAgICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBidWYuc2xpY2UoMCwgYnVmSWR4KTtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3SU1BUERlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSAnJztcbn1cblxudmFyIGJhc2U2NElNQVBDaGFycyA9IGJhc2U2NENoYXJzLnNsaWNlKCk7XG5iYXNlNjRJTUFQQ2hhcnNbJywnLmNoYXJDb2RlQXQoMCldID0gdHJ1ZTtcblxuVXRmN0lNQVBEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciByZXMgPSBcIlwiLCBsYXN0SSA9IDAsXG4gICAgICAgIGluQmFzZTY0ID0gdGhpcy5pbkJhc2U2NCxcbiAgICAgICAgYmFzZTY0QWNjdW0gPSB0aGlzLmJhc2U2NEFjY3VtO1xuXG4gICAgLy8gVGhlIGRlY29kZXIgaXMgbW9yZSBpbnZvbHZlZCBhcyB3ZSBtdXN0IGhhbmRsZSBjaHVua3MgaW4gc3RyZWFtLlxuICAgIC8vIEl0IGlzIGZvcmdpdmluZywgY2xvc2VyIHRvIHN0YW5kYXJkIFVURi03IChmb3IgZXhhbXBsZSwgJy0nIGlzIG9wdGlvbmFsIGF0IHRoZSBlbmQpLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpbkJhc2U2NCkgeyAvLyBXZSdyZSBpbiBkaXJlY3QgbW9kZS5cbiAgICAgICAgICAgIC8vIFdyaXRlIGRpcmVjdCBjaGFycyB1bnRpbCAnJidcbiAgICAgICAgICAgIGlmIChidWZbaV0gPT0gYW5kQ2hhcikge1xuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEksIGkpLCBcImFzY2lpXCIpOyAvLyBXcml0ZSBkaXJlY3QgY2hhcnMuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyAvLyBXZSBkZWNvZGUgYmFzZTY0LlxuICAgICAgICAgICAgaWYgKCFiYXNlNjRJTUFQQ2hhcnNbYnVmW2ldXSkgeyAvLyBCYXNlNjQgZW5kZWQuXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGFzdEkgJiYgYnVmW2ldID09IG1pbnVzQ2hhcikgeyAvLyBcIiYtXCIgLT4gXCImXCJcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IFwiJlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSwgaSksIFwiYXNjaWlcIikucmVwbGFjZSgvLC9nLCAnLycpO1xuICAgICAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoQnVmZmVyLmZyb20oYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPSBtaW51c0NoYXIpIC8vIE1pbnVzIG1heSBiZSBhYnNvcmJlZCBhZnRlciBiYXNlNjQuXG4gICAgICAgICAgICAgICAgICAgIGktLTtcblxuICAgICAgICAgICAgICAgIGxhc3RJID0gaSsxO1xuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYmFzZTY0QWNjdW0gPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSksIFwiYXNjaWlcIik7IC8vIFdyaXRlIGRpcmVjdCBjaGFycy5cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEkpLCBcImFzY2lpXCIpLnJlcGxhY2UoLywvZywgJy8nKTtcblxuICAgICAgICB2YXIgY2FuQmVEZWNvZGVkID0gYjY0c3RyLmxlbmd0aCAtIChiNjRzdHIubGVuZ3RoICUgOCk7IC8vIE1pbmltYWwgY2h1bms6IDIgcXVhZHMgLT4gMngzIGJ5dGVzIC0+IDMgY2hhcnMuXG4gICAgICAgIGJhc2U2NEFjY3VtID0gYjY0c3RyLnNsaWNlKGNhbkJlRGVjb2RlZCk7IC8vIFRoZSByZXN0IHdpbGwgYmUgZGVjb2RlZCBpbiBmdXR1cmUuXG4gICAgICAgIGI2NHN0ciA9IGI2NHN0ci5zbGljZSgwLCBjYW5CZURlY29kZWQpO1xuXG4gICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbShiNjRzdHIsICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gaW5CYXNlNjQ7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9IGJhc2U2NEFjY3VtO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuVXRmN0lNQVBEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVzID0gXCJcIjtcbiAgICBpZiAodGhpcy5pbkJhc2U2NCAmJiB0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aCA+IDApXG4gICAgICAgIHJlcyA9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlci5mcm9tKHRoaXMuYmFzZTY0QWNjdW0sICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcblxuICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gJyc7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDUzOTU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIEJPTUNoYXIgPSAnXFx1RkVGRic7XG5cbmV4cG9ydHMuUHJlcGVuZEJPTSA9IFByZXBlbmRCT01XcmFwcGVyXG5mdW5jdGlvbiBQcmVwZW5kQk9NV3JhcHBlcihlbmNvZGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy5lbmNvZGVyID0gZW5jb2RlcjtcbiAgICB0aGlzLmFkZEJPTSA9IHRydWU7XG59XG5cblByZXBlbmRCT01XcmFwcGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICh0aGlzLmFkZEJPTSkge1xuICAgICAgICBzdHIgPSBCT01DaGFyICsgc3RyO1xuICAgICAgICB0aGlzLmFkZEJPTSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVuY29kZXIud3JpdGUoc3RyKTtcbn1cblxuUHJlcGVuZEJPTVdyYXBwZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmVuY29kZXIuZW5kKCk7XG59XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0cy5TdHJpcEJPTSA9IFN0cmlwQk9NV3JhcHBlcjtcbmZ1bmN0aW9uIFN0cmlwQk9NV3JhcHBlcihkZWNvZGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy5kZWNvZGVyID0gZGVjb2RlcjtcbiAgICB0aGlzLnBhc3MgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5TdHJpcEJPTVdyYXBwZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZGVjb2Rlci53cml0ZShidWYpO1xuICAgIGlmICh0aGlzLnBhc3MgfHwgIXJlcylcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgIGlmIChyZXNbMF0gPT09IEJPTUNoYXIpIHtcbiAgICAgICAgcmVzID0gcmVzLnNsaWNlKDEpO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5zdHJpcEJPTSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdHJpcEJPTSgpO1xuICAgIH1cblxuICAgIHRoaXMucGFzcyA9IHRydWU7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuU3RyaXBCT01XcmFwcGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpO1xufVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDQ5MTQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIEJ1ZmZlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDcxMDMpLkJ1ZmZlcik7XG5cbnZhciBib21IYW5kbGluZyA9IF9fd2VicGFja19yZXF1aXJlX18oNTM5NSksXG4gICAgaWNvbnYgPSBtb2R1bGUuZXhwb3J0cztcblxuLy8gQWxsIGNvZGVjcyBhbmQgYWxpYXNlcyBhcmUga2VwdCBoZXJlLCBrZXllZCBieSBlbmNvZGluZyBuYW1lL2FsaWFzLlxuLy8gVGhleSBhcmUgbGF6eSBsb2FkZWQgaW4gYGljb252LmdldENvZGVjYCBmcm9tIGBlbmNvZGluZ3MvaW5kZXguanNgLlxuaWNvbnYuZW5jb2RpbmdzID0gbnVsbDtcblxuLy8gQ2hhcmFjdGVycyBlbWl0dGVkIGluIGNhc2Ugb2YgZXJyb3IuXG5pY29udi5kZWZhdWx0Q2hhclVuaWNvZGUgPSAn77+9Jztcbmljb252LmRlZmF1bHRDaGFyU2luZ2xlQnl0ZSA9ICc/JztcblxuLy8gUHVibGljIEFQSS5cbmljb252LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHIsIGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgc3RyID0gXCJcIiArIChzdHIgfHwgXCJcIik7IC8vIEVuc3VyZSBzdHJpbmcuXG5cbiAgICB2YXIgZW5jb2RlciA9IGljb252LmdldEVuY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpO1xuXG4gICAgdmFyIHJlcyA9IGVuY29kZXIud3JpdGUoc3RyKTtcbiAgICB2YXIgdHJhaWwgPSBlbmNvZGVyLmVuZCgpO1xuICAgIFxuICAgIHJldHVybiAodHJhaWwgJiYgdHJhaWwubGVuZ3RoID4gMCkgPyBCdWZmZXIuY29uY2F0KFtyZXMsIHRyYWlsXSkgOiByZXM7XG59XG5cbmljb252LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShidWYsIGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBidWYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghaWNvbnYuc2tpcERlY29kZVdhcm5pbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ljb252LWxpdGUgd2FybmluZzogZGVjb2RlKCktaW5nIHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL2FzaHR1Y2hraW4vaWNvbnYtbGl0ZS93aWtpL1VzZS1CdWZmZXJzLXdoZW4tZGVjb2RpbmcnKTtcbiAgICAgICAgICAgIGljb252LnNraXBEZWNvZGVXYXJuaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZiA9IEJ1ZmZlci5mcm9tKFwiXCIgKyAoYnVmIHx8IFwiXCIpLCBcImJpbmFyeVwiKTsgLy8gRW5zdXJlIGJ1ZmZlci5cbiAgICB9XG5cbiAgICB2YXIgZGVjb2RlciA9IGljb252LmdldERlY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpO1xuXG4gICAgdmFyIHJlcyA9IGRlY29kZXIud3JpdGUoYnVmKTtcbiAgICB2YXIgdHJhaWwgPSBkZWNvZGVyLmVuZCgpO1xuXG4gICAgcmV0dXJuIHRyYWlsID8gKHJlcyArIHRyYWlsKSA6IHJlcztcbn1cblxuaWNvbnYuZW5jb2RpbmdFeGlzdHMgPSBmdW5jdGlvbiBlbmNvZGluZ0V4aXN0cyhlbmMpIHtcbiAgICB0cnkge1xuICAgICAgICBpY29udi5nZXRDb2RlYyhlbmMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8vIExlZ2FjeSBhbGlhc2VzIHRvIGNvbnZlcnQgZnVuY3Rpb25zXG5pY29udi50b0VuY29kaW5nID0gaWNvbnYuZW5jb2RlO1xuaWNvbnYuZnJvbUVuY29kaW5nID0gaWNvbnYuZGVjb2RlO1xuXG4vLyBTZWFyY2ggZm9yIGEgY29kZWMgaW4gaWNvbnYuZW5jb2RpbmdzLiBDYWNoZSBjb2RlYyBkYXRhIGluIGljb252Ll9jb2RlY0RhdGFDYWNoZS5cbmljb252Ll9jb2RlY0RhdGFDYWNoZSA9IHt9O1xuaWNvbnYuZ2V0Q29kZWMgPSBmdW5jdGlvbiBnZXRDb2RlYyhlbmNvZGluZykge1xuICAgIGlmICghaWNvbnYuZW5jb2RpbmdzKVxuICAgICAgICBpY29udi5lbmNvZGluZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5MzQpOyAvLyBMYXp5IGxvYWQgYWxsIGVuY29kaW5nIGRlZmluaXRpb25zLlxuICAgIFxuICAgIC8vIENhbm9uaWNhbGl6ZSBlbmNvZGluZyBuYW1lOiBzdHJpcCBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFycyBhbmQgYXBwZW5kZWQgeWVhci5cbiAgICB2YXIgZW5jID0gaWNvbnYuX2Nhbm9uaWNhbGl6ZUVuY29kaW5nKGVuY29kaW5nKTtcblxuICAgIC8vIFRyYXZlcnNlIGljb252LmVuY29kaW5ncyB0byBmaW5kIGFjdHVhbCBjb2RlYy5cbiAgICB2YXIgY29kZWNPcHRpb25zID0ge307XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGNvZGVjID0gaWNvbnYuX2NvZGVjRGF0YUNhY2hlW2VuY107XG4gICAgICAgIGlmIChjb2RlYylcbiAgICAgICAgICAgIHJldHVybiBjb2RlYztcblxuICAgICAgICB2YXIgY29kZWNEZWYgPSBpY29udi5lbmNvZGluZ3NbZW5jXTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBjb2RlY0RlZikge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiAvLyBEaXJlY3QgYWxpYXMgdG8gb3RoZXIgZW5jb2RpbmcuXG4gICAgICAgICAgICAgICAgZW5jID0gY29kZWNEZWY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjogLy8gQWxpYXMgd2l0aCBvcHRpb25zLiBDYW4gYmUgbGF5ZXJlZC5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gY29kZWNEZWYpXG4gICAgICAgICAgICAgICAgICAgIGNvZGVjT3B0aW9uc1trZXldID0gY29kZWNEZWZba2V5XTtcblxuICAgICAgICAgICAgICAgIGlmICghY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSA9IGVuYztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBlbmMgPSBjb2RlY0RlZi50eXBlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjogLy8gQ29kZWMgaXRzZWxmLlxuICAgICAgICAgICAgICAgIGlmICghY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSA9IGVuYztcblxuICAgICAgICAgICAgICAgIC8vIFRoZSBjb2RlYyBmdW5jdGlvbiBtdXN0IGxvYWQgYWxsIHRhYmxlcyBhbmQgcmV0dXJuIG9iamVjdCB3aXRoIC5lbmNvZGVyIGFuZCAuZGVjb2RlciBtZXRob2RzLlxuICAgICAgICAgICAgICAgIC8vIEl0J2xsIGJlIGNhbGxlZCBvbmx5IG9uY2UgKGZvciBlYWNoIGRpZmZlcmVudCBvcHRpb25zIG9iamVjdCkuXG4gICAgICAgICAgICAgICAgY29kZWMgPSBuZXcgY29kZWNEZWYoY29kZWNPcHRpb25zLCBpY29udik7XG5cbiAgICAgICAgICAgICAgICBpY29udi5fY29kZWNEYXRhQ2FjaGVbY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZV0gPSBjb2RlYzsgLy8gU2F2ZSBpdCB0byBiZSByZXVzZWQgbGF0ZXIuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVjO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVuY29kaW5nIG5vdCByZWNvZ25pemVkOiAnXCIgKyBlbmNvZGluZyArIFwiJyAoc2VhcmNoZWQgYXM6ICdcIitlbmMrXCInKVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuaWNvbnYuX2Nhbm9uaWNhbGl6ZUVuY29kaW5nID0gZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgICAvLyBDYW5vbmljYWxpemUgZW5jb2RpbmcgbmFtZTogc3RyaXAgYWxsIG5vbi1hbHBoYW51bWVyaWMgY2hhcnMgYW5kIGFwcGVuZGVkIHllYXIuXG4gICAgcmV0dXJuICgnJytlbmNvZGluZykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC86XFxkezR9JHxbXjAtOWEtel0vZywgXCJcIik7XG59XG5cbmljb252LmdldEVuY29kZXIgPSBmdW5jdGlvbiBnZXRFbmNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgdmFyIGNvZGVjID0gaWNvbnYuZ2V0Q29kZWMoZW5jb2RpbmcpLFxuICAgICAgICBlbmNvZGVyID0gbmV3IGNvZGVjLmVuY29kZXIob3B0aW9ucywgY29kZWMpO1xuXG4gICAgaWYgKGNvZGVjLmJvbUF3YXJlICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5hZGRCT00pXG4gICAgICAgIGVuY29kZXIgPSBuZXcgYm9tSGFuZGxpbmcuUHJlcGVuZEJPTShlbmNvZGVyLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBlbmNvZGVyO1xufVxuXG5pY29udi5nZXREZWNvZGVyID0gZnVuY3Rpb24gZ2V0RGVjb2RlcihlbmNvZGluZywgb3B0aW9ucykge1xuICAgIHZhciBjb2RlYyA9IGljb252LmdldENvZGVjKGVuY29kaW5nKSxcbiAgICAgICAgZGVjb2RlciA9IG5ldyBjb2RlYy5kZWNvZGVyKG9wdGlvbnMsIGNvZGVjKTtcblxuICAgIGlmIChjb2RlYy5ib21Bd2FyZSAmJiAhKG9wdGlvbnMgJiYgb3B0aW9ucy5zdHJpcEJPTSA9PT0gZmFsc2UpKVxuICAgICAgICBkZWNvZGVyID0gbmV3IGJvbUhhbmRsaW5nLlN0cmlwQk9NKGRlY29kZXIsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGRlY29kZXI7XG59XG5cbi8vIFN0cmVhbWluZyBBUElcbi8vIE5PVEU6IFN0cmVhbWluZyBBUEkgbmF0dXJhbGx5IGRlcGVuZHMgb24gJ3N0cmVhbScgbW9kdWxlIGZyb20gTm9kZS5qcy4gVW5mb3J0dW5hdGVseSBpbiBicm93c2VyIGVudmlyb25tZW50cyB0aGlzIG1vZHVsZSBjYW4gYWRkXG4vLyB1cCB0byAxMDBLYiB0byB0aGUgb3V0cHV0IGJ1bmRsZS4gVG8gYXZvaWQgdW5uZWNlc3NhcnkgY29kZSBibG9hdCwgd2UgZG9uJ3QgZW5hYmxlIFN0cmVhbWluZyBBUEkgaW4gYnJvd3NlciBieSBkZWZhdWx0LlxuLy8gSWYgeW91IHdvdWxkIGxpa2UgdG8gZW5hYmxlIGl0IGV4cGxpY2l0bHksIHBsZWFzZSBhZGQgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHlvdXIgYXBwOlxuLy8gPiBpY29udi5lbmFibGVTdHJlYW1pbmdBUEkocmVxdWlyZSgnc3RyZWFtJykpO1xuaWNvbnYuZW5hYmxlU3RyZWFtaW5nQVBJID0gZnVuY3Rpb24gZW5hYmxlU3RyZWFtaW5nQVBJKHN0cmVhbV9tb2R1bGUpIHtcbiAgICBpZiAoaWNvbnYuc3VwcG9ydHNTdHJlYW1zKVxuICAgICAgICByZXR1cm47XG5cbiAgICAvLyBEZXBlbmRlbmN5LWluamVjdCBzdHJlYW0gbW9kdWxlIHRvIGNyZWF0ZSBJY29udkxpdGUgc3RyZWFtIGNsYXNzZXMuXG4gICAgdmFyIHN0cmVhbXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwNDQpKHN0cmVhbV9tb2R1bGUpO1xuXG4gICAgLy8gTm90IHB1YmxpYyBBUEkgeWV0LCBidXQgZXhwb3NlIHRoZSBzdHJlYW0gY2xhc3Nlcy5cbiAgICBpY29udi5JY29udkxpdGVFbmNvZGVyU3RyZWFtID0gc3RyZWFtcy5JY29udkxpdGVFbmNvZGVyU3RyZWFtO1xuICAgIGljb252Lkljb252TGl0ZURlY29kZXJTdHJlYW0gPSBzdHJlYW1zLkljb252TGl0ZURlY29kZXJTdHJlYW07XG5cbiAgICAvLyBTdHJlYW1pbmcgQVBJLlxuICAgIGljb252LmVuY29kZVN0cmVhbSA9IGZ1bmN0aW9uIGVuY29kZVN0cmVhbShlbmNvZGluZywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IGljb252Lkljb252TGl0ZUVuY29kZXJTdHJlYW0oaWNvbnYuZ2V0RW5jb2RlcihlbmNvZGluZywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGljb252LmRlY29kZVN0cmVhbSA9IGZ1bmN0aW9uIGRlY29kZVN0cmVhbShlbmNvZGluZywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IGljb252Lkljb252TGl0ZURlY29kZXJTdHJlYW0oaWNvbnYuZ2V0RGVjb2RlcihlbmNvZGluZywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGljb252LnN1cHBvcnRzU3RyZWFtcyA9IHRydWU7XG59XG5cbi8vIEVuYWJsZSBTdHJlYW1pbmcgQVBJIGF1dG9tYXRpY2FsbHkgaWYgJ3N0cmVhbScgbW9kdWxlIGlzIGF2YWlsYWJsZSBhbmQgbm9uLWVtcHR5ICh0aGUgbWFqb3JpdHkgb2YgZW52aXJvbm1lbnRzKS5cbnZhciBzdHJlYW1fbW9kdWxlO1xudHJ5IHtcbiAgICBzdHJlYW1fbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1ODMyKTtcbn0gY2F0Y2ggKGUpIHt9XG5cbmlmIChzdHJlYW1fbW9kdWxlICYmIHN0cmVhbV9tb2R1bGUuVHJhbnNmb3JtKSB7XG4gICAgaWNvbnYuZW5hYmxlU3RyZWFtaW5nQVBJKHN0cmVhbV9tb2R1bGUpO1xuXG59IGVsc2Uge1xuICAgIC8vIEluIHJhcmUgY2FzZXMgd2hlcmUgJ3N0cmVhbScgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUgYnkgZGVmYXVsdCwgdGhyb3cgYSBoZWxwZnVsIGV4Y2VwdGlvbi5cbiAgICBpY29udi5lbmNvZGVTdHJlYW0gPSBpY29udi5kZWNvZGVTdHJlYW0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWNvbnYtbGl0ZSBTdHJlYW1pbmcgQVBJIGlzIG5vdCBlbmFibGVkLiBVc2UgaWNvbnYuZW5hYmxlU3RyZWFtaW5nQVBJKHJlcXVpcmUoJ3N0cmVhbScpKTsgdG8gZW5hYmxlIGl0LlwiKTtcbiAgICB9O1xufVxuXG5pZiAoZmFsc2UpIHt9XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDgwNDQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIEJ1ZmZlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDcxMDMpLkJ1ZmZlcik7XG5cbi8vIE5PVEU6IER1ZSB0byAnc3RyZWFtJyBtb2R1bGUgYmVpbmcgcHJldHR5IGxhcmdlICh+MTAwS2IsIHNpZ25pZmljYW50IGluIGJyb3dzZXIgZW52aXJvbm1lbnRzKSwgXG4vLyB3ZSBvcHQgdG8gZGVwZW5kZW5jeS1pbmplY3QgaXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGhhcmQgZGVwZW5kZW5jeS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc3RyZWFtX21vZHVsZSkge1xuICAgIHZhciBUcmFuc2Zvcm0gPSBzdHJlYW1fbW9kdWxlLlRyYW5zZm9ybTtcblxuICAgIC8vID09IEVuY29kZXIgc3RyZWFtID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIEljb252TGl0ZUVuY29kZXJTdHJlYW0oY29udiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmNvbnYgPSBjb252O1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5kZWNvZGVTdHJpbmdzID0gZmFsc2U7IC8vIFdlIGFjY2VwdCBvbmx5IHN0cmluZ3MsIHNvIHdlIGRvbid0IG5lZWQgdG8gZGVjb2RlIHRoZW0uXG4gICAgICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIEljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBJY29udkxpdGVFbmNvZGVyU3RyZWFtIH1cbiAgICB9KTtcblxuICAgIEljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGRvbmUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcihcIkljb252IGVuY29kaW5nIHN0cmVhbSBuZWVkcyBzdHJpbmdzIGFzIGl0cyBpbnB1dC5cIikpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi53cml0ZShjaHVuayk7XG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgSWNvbnZMaXRlRW5jb2RlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24oZG9uZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi5lbmQoKTtcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcyk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBJY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZS5jb2xsZWN0ID0gZnVuY3Rpb24oY2IpIHtcbiAgICAgICAgdmFyIGNodW5rcyA9IFtdO1xuICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGNiKTtcbiAgICAgICAgdGhpcy5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7IGNodW5rcy5wdXNoKGNodW5rKTsgfSk7XG4gICAgICAgIHRoaXMub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY2IobnVsbCwgQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuXG4gICAgLy8gPT0gRGVjb2RlciBzdHJlYW0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgZnVuY3Rpb24gSWNvbnZMaXRlRGVjb2RlclN0cmVhbShjb252LCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuY29udiA9IGNvbnY7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLmVuY29kaW5nID0gdGhpcy5lbmNvZGluZyA9ICd1dGY4JzsgLy8gV2Ugb3V0cHV0IHN0cmluZ3MuXG4gICAgICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIEljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBJY29udkxpdGVEZWNvZGVyU3RyZWFtIH1cbiAgICB9KTtcblxuICAgIEljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGRvbmUpIHtcbiAgICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmICEoY2h1bmsgaW5zdGFuY2VvZiBVaW50OEFycmF5KSlcbiAgICAgICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcihcIkljb252IGRlY29kaW5nIHN0cmVhbSBuZWVkcyBidWZmZXJzIGFzIGl0cyBpbnB1dC5cIikpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi53cml0ZShjaHVuayk7XG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMsIHRoaXMuZW5jb2RpbmcpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgSWNvbnZMaXRlRGVjb2RlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24oZG9uZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi5lbmQoKTtcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcywgdGhpcy5lbmNvZGluZyk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgSWNvbnZMaXRlRGVjb2RlclN0cmVhbS5wcm90b3R5cGUuY29sbGVjdCA9IGZ1bmN0aW9uKGNiKSB7XG4gICAgICAgIHZhciByZXMgPSAnJztcbiAgICAgICAgdGhpcy5vbignZXJyb3InLCBjYik7XG4gICAgICAgIHRoaXMub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykgeyByZXMgKz0gY2h1bms7IH0pO1xuICAgICAgICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNiKG51bGwsIHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBJY29udkxpdGVFbmNvZGVyU3RyZWFtOiBJY29udkxpdGVFbmNvZGVyU3RyZWFtLFxuICAgICAgICBJY29udkxpdGVEZWNvZGVyU3RyZWFtOiBJY29udkxpdGVEZWNvZGVyU3RyZWFtLFxuICAgIH07XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2NDU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTcxNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNTg0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBoYXNUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oNjQxMCkoKTtcbnZhciBjYWxsQm91bmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MjQpO1xuXG52YXIgJHRvU3RyaW5nID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nJyk7XG5cbnZhciBpc1N0YW5kYXJkQXJndW1lbnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0aWYgKGhhc1RvU3RyaW5nVGFnICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiAkdG9TdHJpbmcodmFsdWUpID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn07XG5cbnZhciBpc0xlZ2FjeUFyZ3VtZW50cyA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG5cdGlmIChpc1N0YW5kYXJkQXJndW1lbnRzKHZhbHVlKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdHZhbHVlLmxlbmd0aCA+PSAwICYmXG5cdFx0JHRvU3RyaW5nKHZhbHVlKSAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdCR0b1N0cmluZyh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufTtcblxudmFyIHN1cHBvcnRzU3RhbmRhcmRBcmd1bWVudHMgPSAoZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gaXNTdGFuZGFyZEFyZ3VtZW50cyhhcmd1bWVudHMpO1xufSgpKTtcblxuaXNTdGFuZGFyZEFyZ3VtZW50cy5pc0xlZ2FjeUFyZ3VtZW50cyA9IGlzTGVnYWN5QXJndW1lbnRzOyAvLyBmb3IgdGVzdHNcblxubW9kdWxlLmV4cG9ydHMgPSBzdXBwb3J0c1N0YW5kYXJkQXJndW1lbnRzID8gaXNTdGFuZGFyZEFyZ3VtZW50cyA6IGlzTGVnYWN5QXJndW1lbnRzO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MzIwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgZm5Ub1N0ciA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciByZWZsZWN0QXBwbHkgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdCAhPT0gbnVsbCAmJiBSZWZsZWN0LmFwcGx5O1xudmFyIGJhZEFycmF5TGlrZTtcbnZhciBpc0NhbGxhYmxlTWFya2VyO1xuaWYgKHR5cGVvZiByZWZsZWN0QXBwbHkgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHR0cnkge1xuXHRcdGJhZEFycmF5TGlrZSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2xlbmd0aCcsIHtcblx0XHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR0aHJvdyBpc0NhbGxhYmxlTWFya2VyO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlzQ2FsbGFibGVNYXJrZXIgPSB7fTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuXHRcdHJlZmxlY3RBcHBseShmdW5jdGlvbiAoKSB7IHRocm93IDQyOyB9LCBudWxsLCBiYWRBcnJheUxpa2UpO1xuXHR9IGNhdGNoIChfKSB7XG5cdFx0aWYgKF8gIT09IGlzQ2FsbGFibGVNYXJrZXIpIHtcblx0XHRcdHJlZmxlY3RBcHBseSA9IG51bGw7XG5cdFx0fVxuXHR9XG59IGVsc2Uge1xuXHRyZWZsZWN0QXBwbHkgPSBudWxsO1xufVxuXG52YXIgY29uc3RydWN0b3JSZWdleCA9IC9eXFxzKmNsYXNzXFxiLztcbnZhciBpc0VTNkNsYXNzRm4gPSBmdW5jdGlvbiBpc0VTNkNsYXNzRnVuY3Rpb24odmFsdWUpIHtcblx0dHJ5IHtcblx0XHR2YXIgZm5TdHIgPSBmblRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBjb25zdHJ1Y3RvclJlZ2V4LnRlc3QoZm5TdHIpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBub3QgYSBmdW5jdGlvblxuXHR9XG59O1xuXG52YXIgdHJ5RnVuY3Rpb25PYmplY3QgPSBmdW5jdGlvbiB0cnlGdW5jdGlvblRvU3RyKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKGlzRVM2Q2xhc3NGbih2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0Zm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgb2JqZWN0Q2xhc3MgPSAnW29iamVjdCBPYmplY3RdJztcbnZhciBmbkNsYXNzID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbnZhciBnZW5DbGFzcyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSc7XG52YXIgZGRhQ2xhc3MgPSAnW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0nOyAvLyBJRSAxMVxudmFyIGRkYUNsYXNzMiA9ICdbb2JqZWN0IEhUTUwgZG9jdW1lbnQuYWxsIGNsYXNzXSc7XG52YXIgZGRhQ2xhc3MzID0gJ1tvYmplY3QgSFRNTENvbGxlY3Rpb25dJzsgLy8gSUUgOS0xMFxudmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhIVN5bWJvbC50b1N0cmluZ1RhZzsgLy8gYmV0dGVyOiB1c2UgYGhhcy10b3N0cmluZ3RhZ2BcblxudmFyIGlzSUU2OCA9ICEoMCBpbiBbLF0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNwYXJzZS1hcnJheXMsIGNvbW1hLXNwYWNpbmdcblxudmFyIGlzRERBID0gZnVuY3Rpb24gaXNEb2N1bWVudERvdEFsbCgpIHsgcmV0dXJuIGZhbHNlOyB9O1xuaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ29iamVjdCcpIHtcblx0Ly8gRmlyZWZveCAzIGNhbm9uaWNhbGl6ZXMgRERBIHRvIHVuZGVmaW5lZCB3aGVuIGl0J3Mgbm90IGFjY2Vzc2VkIGRpcmVjdGx5XG5cdHZhciBhbGwgPSBkb2N1bWVudC5hbGw7XG5cdGlmICh0b1N0ci5jYWxsKGFsbCkgPT09IHRvU3RyLmNhbGwoZG9jdW1lbnQuYWxsKSkge1xuXHRcdGlzRERBID0gZnVuY3Rpb24gaXNEb2N1bWVudERvdEFsbCh2YWx1ZSkge1xuXHRcdFx0LyogZ2xvYmFscyBkb2N1bWVudDogZmFsc2UgKi9cblx0XHRcdC8vIGluIElFIDYtOCwgdHlwZW9mIGRvY3VtZW50LmFsbCBpcyBcIm9iamVjdFwiIGFuZCBpdCdzIHRydXRoeVxuXHRcdFx0aWYgKChpc0lFNjggfHwgIXZhbHVlKSAmJiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHZhciBzdHIgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0c3RyID09PSBkZGFDbGFzc1xuXHRcdFx0XHRcdFx0fHwgc3RyID09PSBkZGFDbGFzczJcblx0XHRcdFx0XHRcdHx8IHN0ciA9PT0gZGRhQ2xhc3MzIC8vIG9wZXJhIDEyLjE2XG5cdFx0XHRcdFx0XHR8fCBzdHIgPT09IG9iamVjdENsYXNzIC8vIElFIDYtOFxuXHRcdFx0XHRcdCkgJiYgdmFsdWUoJycpID09IG51bGw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHsgLyoqLyB9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAoaXNEREEodmFsdWUpKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpICYmIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTtcblx0fVxuXHQ6IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAoaXNEREEodmFsdWUpKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKGhhc1RvU3RyaW5nVGFnKSB7IHJldHVybiB0cnlGdW5jdGlvbk9iamVjdCh2YWx1ZSk7IH1cblx0XHRpZiAoaXNFUzZDbGFzc0ZuKHZhbHVlKSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR2YXIgc3RyQ2xhc3MgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0XHRpZiAoc3RyQ2xhc3MgIT09IGZuQ2xhc3MgJiYgc3RyQ2xhc3MgIT09IGdlbkNsYXNzICYmICEoL15cXFtvYmplY3QgSFRNTC8pLnRlc3Qoc3RyQ2xhc3MpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHJldHVybiB0cnlGdW5jdGlvbk9iamVjdCh2YWx1ZSk7XG5cdH07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDg5MjM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGdldERheSA9IERhdGUucHJvdG90eXBlLmdldERheTtcbnZhciB0cnlEYXRlT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RGF0ZUdldERheUNhbGwodmFsdWUpIHtcblx0dHJ5IHtcblx0XHRnZXREYXkuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZGF0ZUNsYXNzID0gJ1tvYmplY3QgRGF0ZV0nO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NDEwKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRGF0ZU9iamVjdCh2YWx1ZSkge1xuXHRpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaGFzVG9TdHJpbmdUYWcgPyB0cnlEYXRlT2JqZWN0KHZhbHVlKSA6IHRvU3RyLmNhbGwodmFsdWUpID09PSBkYXRlQ2xhc3M7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NjYyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZm5Ub1N0ciA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciBpc0ZuUmVnZXggPSAvXlxccyooPzpmdW5jdGlvbik/XFwqLztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oNjQxMCkoKTtcbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBnZXRHZW5lcmF0b3JGdW5jID0gZnVuY3Rpb24gKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5cdGlmICghaGFzVG9TdHJpbmdUYWcpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0dHJ5IHtcblx0XHRyZXR1cm4gRnVuY3Rpb24oJ3JldHVybiBmdW5jdGlvbiooKSB7fScpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0fVxufTtcbnZhciBHZW5lcmF0b3JGdW5jdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0dlbmVyYXRvckZ1bmN0aW9uKGZuKSB7XG5cdGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKGlzRm5SZWdleC50ZXN0KGZuVG9TdHIuY2FsbChmbikpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFoYXNUb1N0cmluZ1RhZykge1xuXHRcdHZhciBzdHIgPSB0b1N0ci5jYWxsKGZuKTtcblx0XHRyZXR1cm4gc3RyID09PSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nO1xuXHR9XG5cdGlmICghZ2V0UHJvdG8pIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHR5cGVvZiBHZW5lcmF0b3JGdW5jdGlvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHR2YXIgZ2VuZXJhdG9yRnVuYyA9IGdldEdlbmVyYXRvckZ1bmMoKTtcblx0XHRHZW5lcmF0b3JGdW5jdGlvbiA9IGdlbmVyYXRvckZ1bmMgPyBnZXRQcm90byhnZW5lcmF0b3JGdW5jKSA6IGZhbHNlO1xuXHR9XG5cdHJldHVybiBnZXRQcm90byhmbikgPT09IEdlbmVyYXRvckZ1bmN0aW9uO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODYxMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLyogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW51bWJlci5pc25hbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNjA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGNhbGxCaW5kID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTU5KTtcbnZhciBkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyODkpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2MTEpO1xudmFyIGdldFBvbHlmaWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NDE1KTtcbnZhciBzaGltID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NzQzKTtcblxudmFyIHBvbHlmaWxsID0gY2FsbEJpbmQoZ2V0UG9seWZpbGwoKSwgTnVtYmVyKTtcblxuLyogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW51bWJlci5pc25hbiAqL1xuXG5kZWZpbmUocG9seWZpbGwsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBvbHlmaWxsO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5NDE1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oODYxMSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdGlmIChOdW1iZXIuaXNOYU4gJiYgTnVtYmVyLmlzTmFOKE5hTikgJiYgIU51bWJlci5pc05hTignYScpKSB7XG5cdFx0cmV0dXJuIE51bWJlci5pc05hTjtcblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2NzQzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyODkpO1xudmFyIGdldFBvbHlmaWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NDE1KTtcblxuLyogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW51bWJlci5pc25hbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1OdW1iZXJJc05hTigpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0ZGVmaW5lKE51bWJlciwgeyBpc05hTjogcG9seWZpbGwgfSwge1xuXHRcdGlzTmFOOiBmdW5jdGlvbiB0ZXN0SXNOYU4oKSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzTmFOICE9PSBwb2x5ZmlsbDtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NDIwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBjYWxsQm91bmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MjQpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NDEwKSgpO1xudmFyIGhhcztcbnZhciAkZXhlYztcbnZhciBpc1JlZ2V4TWFya2VyO1xudmFyIGJhZFN0cmluZ2lmaWVyO1xuXG5pZiAoaGFzVG9TdHJpbmdUYWcpIHtcblx0aGFzID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5Jyk7XG5cdCRleGVjID0gY2FsbEJvdW5kKCdSZWdFeHAucHJvdG90eXBlLmV4ZWMnKTtcblx0aXNSZWdleE1hcmtlciA9IHt9O1xuXG5cdHZhciB0aHJvd1JlZ2V4TWFya2VyID0gZnVuY3Rpb24gKCkge1xuXHRcdHRocm93IGlzUmVnZXhNYXJrZXI7XG5cdH07XG5cdGJhZFN0cmluZ2lmaWVyID0ge1xuXHRcdHRvU3RyaW5nOiB0aHJvd1JlZ2V4TWFya2VyLFxuXHRcdHZhbHVlT2Y6IHRocm93UmVnZXhNYXJrZXJcblx0fTtcblxuXHRpZiAodHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSA9PT0gJ3N5bWJvbCcpIHtcblx0XHRiYWRTdHJpbmdpZmllcltTeW1ib2wudG9QcmltaXRpdmVdID0gdGhyb3dSZWdleE1hcmtlcjtcblx0fVxufVxuXG52YXIgJHRvU3RyaW5nID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgcmVnZXhDbGFzcyA9ICdbb2JqZWN0IFJlZ0V4cF0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1RvU3RyaW5nVGFnXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHQ/IGZ1bmN0aW9uIGlzUmVnZXgodmFsdWUpIHtcblx0XHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR2YXIgZGVzY3JpcHRvciA9IGdPUEQodmFsdWUsICdsYXN0SW5kZXgnKTtcblx0XHR2YXIgaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBoYXMoZGVzY3JpcHRvciwgJ3ZhbHVlJyk7XG5cdFx0aWYgKCFoYXNMYXN0SW5kZXhEYXRhUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0JGV4ZWModmFsdWUsIGJhZFN0cmluZ2lmaWVyKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZSA9PT0gaXNSZWdleE1hcmtlcjtcblx0XHR9XG5cdH1cblx0OiBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0Ly8gSW4gb2xkZXIgYnJvd3NlcnMsIHR5cGVvZiByZWdleCBpbmNvcnJlY3RseSByZXR1cm5zICdmdW5jdGlvbidcblx0XHRpZiAoIXZhbHVlIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJHRvU3RyaW5nKHZhbHVlKSA9PT0gcmVnZXhDbGFzcztcblx0fTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTY5Mjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgZm9yRWFjaCA9IF9fd2VicGFja19yZXF1aXJlX18oNDAyOSk7XG52YXIgYXZhaWxhYmxlVHlwZWRBcnJheXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwODMpO1xudmFyIGNhbGxCb3VuZCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkyNCk7XG5cbnZhciAkdG9TdHJpbmcgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcbnZhciBoYXNUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oNjQxMCkoKTtcblxudmFyIGcgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ3VuZGVmaW5lZCcgPyBfX3dlYnBhY2tfcmVxdWlyZV9fLmcgOiBnbG9iYWxUaGlzO1xudmFyIHR5cGVkQXJyYXlzID0gYXZhaWxhYmxlVHlwZWRBcnJheXMoKTtcblxudmFyICRpbmRleE9mID0gY2FsbEJvdW5kKCdBcnJheS5wcm90b3R5cGUuaW5kZXhPZicsIHRydWUpIHx8IGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIC0xO1xufTtcbnZhciAkc2xpY2UgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuc2xpY2UnKTtcbnZhciB0b1N0clRhZ3MgPSB7fTtcbnZhciBnT1BEID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODIpO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mOyAvLyByZXF1aXJlKCdnZXRwcm90b3R5cGVvZicpO1xuaWYgKGhhc1RvU3RyaW5nVGFnICYmIGdPUEQgJiYgZ2V0UHJvdG90eXBlT2YpIHtcblx0Zm9yRWFjaCh0eXBlZEFycmF5cywgZnVuY3Rpb24gKHR5cGVkQXJyYXkpIHtcblx0XHR2YXIgYXJyID0gbmV3IGdbdHlwZWRBcnJheV0oKTtcblx0XHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGFycikge1xuXHRcdFx0dmFyIHByb3RvID0gZ2V0UHJvdG90eXBlT2YoYXJyKTtcblx0XHRcdHZhciBkZXNjcmlwdG9yID0gZ09QRChwcm90bywgU3ltYm9sLnRvU3RyaW5nVGFnKTtcblx0XHRcdGlmICghZGVzY3JpcHRvcikge1xuXHRcdFx0XHR2YXIgc3VwZXJQcm90byA9IGdldFByb3RvdHlwZU9mKHByb3RvKTtcblx0XHRcdFx0ZGVzY3JpcHRvciA9IGdPUEQoc3VwZXJQcm90bywgU3ltYm9sLnRvU3RyaW5nVGFnKTtcblx0XHRcdH1cblx0XHRcdHRvU3RyVGFnc1t0eXBlZEFycmF5XSA9IGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fSk7XG59XG5cbnZhciB0cnlUeXBlZEFycmF5cyA9IGZ1bmN0aW9uIHRyeUFsbFR5cGVkQXJyYXlzKHZhbHVlKSB7XG5cdHZhciBhbnlUcnVlID0gZmFsc2U7XG5cdGZvckVhY2godG9TdHJUYWdzLCBmdW5jdGlvbiAoZ2V0dGVyLCB0eXBlZEFycmF5KSB7XG5cdFx0aWYgKCFhbnlUcnVlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhbnlUcnVlID0gZ2V0dGVyLmNhbGwodmFsdWUpID09PSB0eXBlZEFycmF5O1xuXHRcdFx0fSBjYXRjaCAoZSkgeyAvKiovIH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYW55VHJ1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNUeXBlZEFycmF5KHZhbHVlKSB7XG5cdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKCFoYXNUb1N0cmluZ1RhZyB8fCAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSkpIHtcblx0XHR2YXIgdGFnID0gJHNsaWNlKCR0b1N0cmluZyh2YWx1ZSksIDgsIC0xKTtcblx0XHRyZXR1cm4gJGluZGV4T2YodHlwZWRBcnJheXMsIHRhZykgPiAtMTtcblx0fVxuXHRpZiAoIWdPUEQpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdHJldHVybiB0cnlUeXBlZEFycmF5cyh2YWx1ZSk7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0MjQ0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgbnVtYmVySXNOYU4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXMoYSwgYikge1xuXHRpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG5cdFx0cmV0dXJuIDEgLyBhID09PSAxIC8gYjtcblx0fVxuXHRpZiAoYSA9PT0gYikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmIChudW1iZXJJc05hTihhKSAmJiBudW1iZXJJc05hTihiKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjA5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyODkpO1xudmFyIGNhbGxCaW5kID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTU5KTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MjQ0KTtcbnZhciBnZXRQb2x5ZmlsbCA9IF9fd2VicGFja19yZXF1aXJlX18oNTYyNCk7XG52YXIgc2hpbSA9IF9fd2VicGFja19yZXF1aXJlX18oMjI4MSk7XG5cbnZhciBwb2x5ZmlsbCA9IGNhbGxCaW5kKGdldFBvbHlmaWxsKCksIE9iamVjdCk7XG5cbmRlZmluZShwb2x5ZmlsbCwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcG9seWZpbGw7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDU2MjQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGltcGxlbWVudGF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MjQ0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0cmV0dXJuIHR5cGVvZiBPYmplY3QuaXMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QuaXMgOiBpbXBsZW1lbnRhdGlvbjtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDIyODE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGdldFBvbHlmaWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NjI0KTtcbnZhciBkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyODkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1PYmplY3RJcygpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0ZGVmaW5lKE9iamVjdCwgeyBpczogcG9seWZpbGwgfSwge1xuXHRcdGlzOiBmdW5jdGlvbiB0ZXN0T2JqZWN0SXMoKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmlzICE9PSBwb2x5ZmlsbDtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4OTg3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MTQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGdsb2JhbC1yZXF1aXJlXG5cdHZhciBpc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXHR2YXIgaGFzRG9udEVudW1CdWcgPSAhaXNFbnVtZXJhYmxlLmNhbGwoeyB0b1N0cmluZzogbnVsbCB9LCAndG9TdHJpbmcnKTtcblx0dmFyIGhhc1Byb3RvRW51bUJ1ZyA9IGlzRW51bWVyYWJsZS5jYWxsKGZ1bmN0aW9uICgpIHt9LCAncHJvdG90eXBlJyk7XG5cdHZhciBkb250RW51bXMgPSBbXG5cdFx0J3RvU3RyaW5nJyxcblx0XHQndG9Mb2NhbGVTdHJpbmcnLFxuXHRcdCd2YWx1ZU9mJyxcblx0XHQnaGFzT3duUHJvcGVydHknLFxuXHRcdCdpc1Byb3RvdHlwZU9mJyxcblx0XHQncHJvcGVydHlJc0VudW1lcmFibGUnLFxuXHRcdCdjb25zdHJ1Y3Rvcidcblx0XTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlID0gZnVuY3Rpb24gKG8pIHtcblx0XHR2YXIgY3RvciA9IG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIGN0b3IgJiYgY3Rvci5wcm90b3R5cGUgPT09IG87XG5cdH07XG5cdHZhciBleGNsdWRlZEtleXMgPSB7XG5cdFx0JGFwcGxpY2F0aW9uQ2FjaGU6IHRydWUsXG5cdFx0JGNvbnNvbGU6IHRydWUsXG5cdFx0JGV4dGVybmFsOiB0cnVlLFxuXHRcdCRmcmFtZTogdHJ1ZSxcblx0XHQkZnJhbWVFbGVtZW50OiB0cnVlLFxuXHRcdCRmcmFtZXM6IHRydWUsXG5cdFx0JGlubmVySGVpZ2h0OiB0cnVlLFxuXHRcdCRpbm5lcldpZHRoOiB0cnVlLFxuXHRcdCRvbm1vemZ1bGxzY3JlZW5jaGFuZ2U6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmVycm9yOiB0cnVlLFxuXHRcdCRvdXRlckhlaWdodDogdHJ1ZSxcblx0XHQkb3V0ZXJXaWR0aDogdHJ1ZSxcblx0XHQkcGFnZVhPZmZzZXQ6IHRydWUsXG5cdFx0JHBhZ2VZT2Zmc2V0OiB0cnVlLFxuXHRcdCRwYXJlbnQ6IHRydWUsXG5cdFx0JHNjcm9sbExlZnQ6IHRydWUsXG5cdFx0JHNjcm9sbFRvcDogdHJ1ZSxcblx0XHQkc2Nyb2xsWDogdHJ1ZSxcblx0XHQkc2Nyb2xsWTogdHJ1ZSxcblx0XHQkc2VsZjogdHJ1ZSxcblx0XHQkd2Via2l0SW5kZXhlZERCOiB0cnVlLFxuXHRcdCR3ZWJraXRTdG9yYWdlSW5mbzogdHJ1ZSxcblx0XHQkd2luZG93OiB0cnVlXG5cdH07XG5cdHZhciBoYXNBdXRvbWF0aW9uRXF1YWxpdHlCdWcgPSAoZnVuY3Rpb24gKCkge1xuXHRcdC8qIGdsb2JhbCB3aW5kb3cgKi9cblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0Zm9yICh2YXIgayBpbiB3aW5kb3cpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICghZXhjbHVkZWRLZXlzWyckJyArIGtdICYmIGhhcy5jYWxsKHdpbmRvdywgaykgJiYgd2luZG93W2tdICE9PSBudWxsICYmIHR5cGVvZiB3aW5kb3dba10gPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlKHdpbmRvd1trXSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0oKSk7XG5cdHZhciBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kgPSBmdW5jdGlvbiAobykge1xuXHRcdC8qIGdsb2JhbCB3aW5kb3cgKi9cblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1Zykge1xuXHRcdFx0cmV0dXJuIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlKG8pO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlKG8pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH07XG5cblx0a2V5c1NoaW0gPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuXHRcdHZhciBpc09iamVjdCA9IG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jztcblx0XHR2YXIgaXNGdW5jdGlvbiA9IHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0XHR2YXIgaXNBcmd1bWVudHMgPSBpc0FyZ3Mob2JqZWN0KTtcblx0XHR2YXIgaXNTdHJpbmcgPSBpc09iamVjdCAmJiB0b1N0ci5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IFN0cmluZ10nO1xuXHRcdHZhciB0aGVLZXlzID0gW107XG5cblx0XHRpZiAoIWlzT2JqZWN0ICYmICFpc0Z1bmN0aW9uICYmICFpc0FyZ3VtZW50cykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCcpO1xuXHRcdH1cblxuXHRcdHZhciBza2lwUHJvdG8gPSBoYXNQcm90b0VudW1CdWcgJiYgaXNGdW5jdGlvbjtcblx0XHRpZiAoaXNTdHJpbmcgJiYgb2JqZWN0Lmxlbmd0aCA+IDAgJiYgIWhhcy5jYWxsKG9iamVjdCwgMCkpIHtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcoaSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc0FyZ3VtZW50cyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBvYmplY3QubGVuZ3RoOyArK2opIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhqKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAodmFyIG5hbWUgaW4gb2JqZWN0KSB7XG5cdFx0XHRcdGlmICghKHNraXBQcm90byAmJiBuYW1lID09PSAncHJvdG90eXBlJykgJiYgaGFzLmNhbGwob2JqZWN0LCBuYW1lKSkge1xuXHRcdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcobmFtZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGhhc0RvbnRFbnVtQnVnKSB7XG5cdFx0XHR2YXIgc2tpcENvbnN0cnVjdG9yID0gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGVJZk5vdEJ1Z2d5KG9iamVjdCk7XG5cblx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgZG9udEVudW1zLmxlbmd0aDsgKytrKSB7XG5cdFx0XHRcdGlmICghKHNraXBDb25zdHJ1Y3RvciAmJiBkb250RW51bXNba10gPT09ICdjb25zdHJ1Y3RvcicpICYmIGhhcy5jYWxsKG9iamVjdCwgZG9udEVudW1zW2tdKSkge1xuXHRcdFx0XHRcdHRoZUtleXMucHVzaChkb250RW51bXNba10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGVLZXlzO1xuXHR9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBrZXlzU2hpbTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjIxNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaXNBcmdzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDE0KTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5ODcpO1xuXG52YXIgb3JpZ2luYWxLZXlzID0gT2JqZWN0LmtleXM7XG5cbmtleXNTaGltLnNoaW0gPSBmdW5jdGlvbiBzaGltT2JqZWN0S2V5cygpIHtcblx0aWYgKE9iamVjdC5rZXlzKSB7XG5cdFx0dmFyIGtleXNXb3Jrc1dpdGhBcmd1bWVudHMgPSAoZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gU2FmYXJpIDUuMCBidWdcblx0XHRcdHZhciBhcmdzID0gT2JqZWN0LmtleXMoYXJndW1lbnRzKTtcblx0XHRcdHJldHVybiBhcmdzICYmIGFyZ3MubGVuZ3RoID09PSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdH0oMSwgMikpO1xuXHRcdGlmICgha2V5c1dvcmtzV2l0aEFyZ3VtZW50cykge1xuXHRcdFx0T2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuXHRcdFx0XHRpZiAoaXNBcmdzKG9iamVjdCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKHNsaWNlLmNhbGwob2JqZWN0KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhvYmplY3QpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0LmtleXMgPSBrZXlzU2hpbTtcblx0fVxuXHRyZXR1cm4gT2JqZWN0LmtleXMgfHwga2V5c1NoaW07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNDE0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG5cdHZhciBzdHIgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0dmFyIGlzQXJncyA9IHN0ciA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cdGlmICghaXNBcmdzKSB7XG5cdFx0aXNBcmdzID0gc3RyICE9PSAnW29iamVjdCBBcnJheV0nICYmXG5cdFx0XHR2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcicgJiZcblx0XHRcdHZhbHVlLmxlbmd0aCA+PSAwICYmXG5cdFx0XHR0b1N0ci5jYWxsKHZhbHVlLmNhbGxlZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdH1cblx0cmV0dXJuIGlzQXJncztcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDQyMzY6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuXG52YXIgVFlQRURfT0sgPSAgKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJykgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIFVpbnQxNkFycmF5ICE9PSAndW5kZWZpbmVkJykgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIEludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKTtcblxuZnVuY3Rpb24gX2hhcyhvYmosIGtleSkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn1cblxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiAob2JqIC8qZnJvbTEsIGZyb20yLCBmcm9tMywgLi4uKi8pIHtcbiAgdmFyIHNvdXJjZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHtcbiAgICB2YXIgc291cmNlID0gc291cmNlcy5zaGlmdCgpO1xuICAgIGlmICghc291cmNlKSB7IGNvbnRpbnVlOyB9XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc291cmNlICsgJ211c3QgYmUgbm9uLW9iamVjdCcpO1xuICAgIH1cblxuICAgIGZvciAodmFyIHAgaW4gc291cmNlKSB7XG4gICAgICBpZiAoX2hhcyhzb3VyY2UsIHApKSB7XG4gICAgICAgIG9ialtwXSA9IHNvdXJjZVtwXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuXG4vLyByZWR1Y2UgYnVmZmVyIHNpemUsIGF2b2lkaW5nIG1lbSBjb3B5XG5leHBvcnRzLnNocmlua0J1ZiA9IGZ1bmN0aW9uIChidWYsIHNpemUpIHtcbiAgaWYgKGJ1Zi5sZW5ndGggPT09IHNpemUpIHsgcmV0dXJuIGJ1ZjsgfVxuICBpZiAoYnVmLnN1YmFycmF5KSB7IHJldHVybiBidWYuc3ViYXJyYXkoMCwgc2l6ZSk7IH1cbiAgYnVmLmxlbmd0aCA9IHNpemU7XG4gIHJldHVybiBidWY7XG59O1xuXG5cbnZhciBmblR5cGVkID0ge1xuICBhcnJheVNldDogZnVuY3Rpb24gKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7XG4gICAgaWYgKHNyYy5zdWJhcnJheSAmJiBkZXN0LnN1YmFycmF5KSB7XG4gICAgICBkZXN0LnNldChzcmMuc3ViYXJyYXkoc3JjX29mZnMsIHNyY19vZmZzICsgbGVuKSwgZGVzdF9vZmZzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRmFsbGJhY2sgdG8gb3JkaW5hcnkgYXJyYXlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkZXN0W2Rlc3Rfb2ZmcyArIGldID0gc3JjW3NyY19vZmZzICsgaV07XG4gICAgfVxuICB9LFxuICAvLyBKb2luIGFycmF5IG9mIGNodW5rcyB0byBzaW5nbGUgYXJyYXkuXG4gIGZsYXR0ZW5DaHVua3M6IGZ1bmN0aW9uIChjaHVua3MpIHtcbiAgICB2YXIgaSwgbCwgbGVuLCBwb3MsIGNodW5rLCByZXN1bHQ7XG5cbiAgICAvLyBjYWxjdWxhdGUgZGF0YSBsZW5ndGhcbiAgICBsZW4gPSAwO1xuICAgIGZvciAoaSA9IDAsIGwgPSBjaHVua3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBsZW4gKz0gY2h1bmtzW2ldLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBqb2luIGNodW5rc1xuICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgcG9zID0gMDtcbiAgICBmb3IgKGkgPSAwLCBsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY2h1bmsgPSBjaHVua3NbaV07XG4gICAgICByZXN1bHQuc2V0KGNodW5rLCBwb3MpO1xuICAgICAgcG9zICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuXG52YXIgZm5VbnR5cGVkID0ge1xuICBhcnJheVNldDogZnVuY3Rpb24gKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldO1xuICAgIH1cbiAgfSxcbiAgLy8gSm9pbiBhcnJheSBvZiBjaHVua3MgdG8gc2luZ2xlIGFycmF5LlxuICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbiAoY2h1bmtzKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgY2h1bmtzKTtcbiAgfVxufTtcblxuXG4vLyBFbmFibGUvRGlzYWJsZSB0eXBlZCBhcnJheXMgdXNlLCBmb3IgdGVzdGluZ1xuLy9cbmV4cG9ydHMuc2V0VHlwZWQgPSBmdW5jdGlvbiAob24pIHtcbiAgaWYgKG9uKSB7XG4gICAgZXhwb3J0cy5CdWY4ICA9IFVpbnQ4QXJyYXk7XG4gICAgZXhwb3J0cy5CdWYxNiA9IFVpbnQxNkFycmF5O1xuICAgIGV4cG9ydHMuQnVmMzIgPSBJbnQzMkFycmF5O1xuICAgIGV4cG9ydHMuYXNzaWduKGV4cG9ydHMsIGZuVHlwZWQpO1xuICB9IGVsc2Uge1xuICAgIGV4cG9ydHMuQnVmOCAgPSBBcnJheTtcbiAgICBleHBvcnRzLkJ1ZjE2ID0gQXJyYXk7XG4gICAgZXhwb3J0cy5CdWYzMiA9IEFycmF5O1xuICAgIGV4cG9ydHMuYXNzaWduKGV4cG9ydHMsIGZuVW50eXBlZCk7XG4gIH1cbn07XG5cbmV4cG9ydHMuc2V0VHlwZWQoVFlQRURfT0spO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2MDY5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vLyBOb3RlOiBhZGxlcjMyIHRha2VzIDEyJSBmb3IgbGV2ZWwgMCBhbmQgMiUgZm9yIGxldmVsIDYuXG4vLyBJdCBpc24ndCB3b3J0aCBpdCB0byBtYWtlIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBhcyBpbiBvcmlnaW5hbC5cbi8vIFNtYWxsIHNpemUgaXMgcHJlZmVyYWJsZS5cblxuLy8gKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyXG4vLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpblxuLy9cbi8vIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkXG4vLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXNcbi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsXG4vLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0XG4vLyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG4vL1xuLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3Rcbi8vICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmVcbi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlXG4vLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuXG4vLyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZVxuLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG4vLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuXG5mdW5jdGlvbiBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbiwgcG9zKSB7XG4gIHZhciBzMSA9IChhZGxlciAmIDB4ZmZmZikgfDAsXG4gICAgICBzMiA9ICgoYWRsZXIgPj4+IDE2KSAmIDB4ZmZmZikgfDAsXG4gICAgICBuID0gMDtcblxuICB3aGlsZSAobGVuICE9PSAwKSB7XG4gICAgLy8gU2V0IGxpbWl0IH4gdHdpY2UgbGVzcyB0aGFuIDU1NTIsIHRvIGtlZXBcbiAgICAvLyBzMiBpbiAzMS1iaXRzLCBiZWNhdXNlIHdlIGZvcmNlIHNpZ25lZCBpbnRzLlxuICAgIC8vIGluIG90aGVyIGNhc2UgJT0gd2lsbCBmYWlsLlxuICAgIG4gPSBsZW4gPiAyMDAwID8gMjAwMCA6IGxlbjtcbiAgICBsZW4gLT0gbjtcblxuICAgIGRvIHtcbiAgICAgIHMxID0gKHMxICsgYnVmW3BvcysrXSkgfDA7XG4gICAgICBzMiA9IChzMiArIHMxKSB8MDtcbiAgICB9IHdoaWxlICgtLW4pO1xuXG4gICAgczEgJT0gNjU1MjE7XG4gICAgczIgJT0gNjU1MjE7XG4gIH1cblxuICByZXR1cm4gKHMxIHwgKHMyIDw8IDE2KSkgfDA7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBhZGxlcjMyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNjE5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIC8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi9cbiAgWl9OT19GTFVTSDogICAgICAgICAwLFxuICBaX1BBUlRJQUxfRkxVU0g6ICAgIDEsXG4gIFpfU1lOQ19GTFVTSDogICAgICAgMixcbiAgWl9GVUxMX0ZMVVNIOiAgICAgICAzLFxuICBaX0ZJTklTSDogICAgICAgICAgIDQsXG4gIFpfQkxPQ0s6ICAgICAgICAgICAgNSxcbiAgWl9UUkVFUzogICAgICAgICAgICA2LFxuXG4gIC8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXNcbiAgKiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuXG4gICovXG4gIFpfT0s6ICAgICAgICAgICAgICAgMCxcbiAgWl9TVFJFQU1fRU5EOiAgICAgICAxLFxuICBaX05FRURfRElDVDogICAgICAgIDIsXG4gIFpfRVJSTk86ICAgICAgICAgICAtMSxcbiAgWl9TVFJFQU1fRVJST1I6ICAgIC0yLFxuICBaX0RBVEFfRVJST1I6ICAgICAgLTMsXG4gIC8vWl9NRU1fRVJST1I6ICAgICAtNCxcbiAgWl9CVUZfRVJST1I6ICAgICAgIC01LFxuICAvL1pfVkVSU0lPTl9FUlJPUjogLTYsXG5cbiAgLyogY29tcHJlc3Npb24gbGV2ZWxzICovXG4gIFpfTk9fQ09NUFJFU1NJT046ICAgICAgICAgMCxcbiAgWl9CRVNUX1NQRUVEOiAgICAgICAgICAgICAxLFxuICBaX0JFU1RfQ09NUFJFU1NJT046ICAgICAgIDksXG4gIFpfREVGQVVMVF9DT01QUkVTU0lPTjogICAtMSxcblxuXG4gIFpfRklMVEVSRUQ6ICAgICAgICAgICAgICAgMSxcbiAgWl9IVUZGTUFOX09OTFk6ICAgICAgICAgICAyLFxuICBaX1JMRTogICAgICAgICAgICAgICAgICAgIDMsXG4gIFpfRklYRUQ6ICAgICAgICAgICAgICAgICAgNCxcbiAgWl9ERUZBVUxUX1NUUkFURUdZOiAgICAgICAwLFxuXG4gIC8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbiAgWl9CSU5BUlk6ICAgICAgICAgICAgICAgICAwLFxuICBaX1RFWFQ6ICAgICAgICAgICAgICAgICAgIDEsXG4gIC8vWl9BU0NJSTogICAgICAgICAgICAgICAgMSwgLy8gPSBaX1RFWFQgKGRlcHJlY2F0ZWQpXG4gIFpfVU5LTk9XTjogICAgICAgICAgICAgICAgMixcblxuICAvKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKi9cbiAgWl9ERUZMQVRFRDogICAgICAgICAgICAgICA4XG4gIC8vWl9OVUxMOiAgICAgICAgICAgICAgICAgbnVsbCAvLyBVc2UgLTEgb3IgbnVsbCBpbmxpbmUsIGRlcGVuZGluZyBvbiB2YXIgdHlwZVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjg2OTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLy8gTm90ZTogd2UgY2FuJ3QgZ2V0IHNpZ25pZmljYW50IHNwZWVkIGJvb3N0IGhlcmUuXG4vLyBTbyB3cml0ZSBjb2RlIHRvIG1pbmltaXplIHNpemUgLSBubyBwcmVnZW5lcmF0ZWQgdGFibGVzXG4vLyBhbmQgYXJyYXkgdG9vbHMgZGVwZW5kZW5jaWVzLlxuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbi8vIFVzZSBvcmRpbmFyeSBhcnJheSwgc2luY2UgdW50eXBlZCBtYWtlcyBubyBib29zdCBoZXJlXG5mdW5jdGlvbiBtYWtlVGFibGUoKSB7XG4gIHZhciBjLCB0YWJsZSA9IFtdO1xuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgMjU2OyBuKyspIHtcbiAgICBjID0gbjtcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IDg7IGsrKykge1xuICAgICAgYyA9ICgoYyAmIDEpID8gKDB4RURCODgzMjAgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcbiAgICB9XG4gICAgdGFibGVbbl0gPSBjO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlO1xufVxuXG4vLyBDcmVhdGUgdGFibGUgb24gbG9hZC4gSnVzdCAyNTUgc2lnbmVkIGxvbmdzLiBOb3QgYSBwcm9ibGVtLlxudmFyIGNyY1RhYmxlID0gbWFrZVRhYmxlKCk7XG5cblxuZnVuY3Rpb24gY3JjMzIoY3JjLCBidWYsIGxlbiwgcG9zKSB7XG4gIHZhciB0ID0gY3JjVGFibGUsXG4gICAgICBlbmQgPSBwb3MgKyBsZW47XG5cbiAgY3JjIF49IC0xO1xuXG4gIGZvciAodmFyIGkgPSBwb3M7IGkgPCBlbmQ7IGkrKykge1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdFsoY3JjIF4gYnVmW2ldKSAmIDB4RkZdO1xuICB9XG5cbiAgcmV0dXJuIChjcmMgXiAoLTEpKTsgLy8gPj4+IDA7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBjcmMzMjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDA1OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxudmFyIHV0aWxzICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyMzYpO1xudmFyIHRyZWVzICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0Mik7XG52YXIgYWRsZXIzMiA9IF9fd2VicGFja19yZXF1aXJlX18oNjA2OSk7XG52YXIgY3JjMzIgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjg2OSk7XG52YXIgbXNnICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oODg5OCk7XG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbi8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi9cbnZhciBaX05PX0ZMVVNIICAgICAgPSAwO1xudmFyIFpfUEFSVElBTF9GTFVTSCA9IDE7XG4vL3ZhciBaX1NZTkNfRkxVU0ggICAgPSAyO1xudmFyIFpfRlVMTF9GTFVTSCAgICA9IDM7XG52YXIgWl9GSU5JU0ggICAgICAgID0gNDtcbnZhciBaX0JMT0NLICAgICAgICAgPSA1O1xuLy92YXIgWl9UUkVFUyAgICAgICAgID0gNjtcblxuXG4vKiBSZXR1cm4gY29kZXMgZm9yIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGZ1bmN0aW9ucy4gTmVnYXRpdmUgdmFsdWVzXG4gKiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuXG4gKi9cbnZhciBaX09LICAgICAgICAgICAgPSAwO1xudmFyIFpfU1RSRUFNX0VORCAgICA9IDE7XG4vL3ZhciBaX05FRURfRElDVCAgICAgPSAyO1xuLy92YXIgWl9FUlJOTyAgICAgICAgID0gLTE7XG52YXIgWl9TVFJFQU1fRVJST1IgID0gLTI7XG52YXIgWl9EQVRBX0VSUk9SICAgID0gLTM7XG4vL3ZhciBaX01FTV9FUlJPUiAgICAgPSAtNDtcbnZhciBaX0JVRl9FUlJPUiAgICAgPSAtNTtcbi8vdmFyIFpfVkVSU0lPTl9FUlJPUiA9IC02O1xuXG5cbi8qIGNvbXByZXNzaW9uIGxldmVscyAqL1xuLy92YXIgWl9OT19DT01QUkVTU0lPTiAgICAgID0gMDtcbi8vdmFyIFpfQkVTVF9TUEVFRCAgICAgICAgICA9IDE7XG4vL3ZhciBaX0JFU1RfQ09NUFJFU1NJT04gICAgPSA5O1xudmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xO1xuXG5cbnZhciBaX0ZJTFRFUkVEICAgICAgICAgICAgPSAxO1xudmFyIFpfSFVGRk1BTl9PTkxZICAgICAgICA9IDI7XG52YXIgWl9STEUgICAgICAgICAgICAgICAgID0gMztcbnZhciBaX0ZJWEVEICAgICAgICAgICAgICAgPSA0O1xudmFyIFpfREVGQVVMVF9TVFJBVEVHWSAgICA9IDA7XG5cbi8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbi8vdmFyIFpfQklOQVJZICAgICAgICAgICAgICA9IDA7XG4vL3ZhciBaX1RFWFQgICAgICAgICAgICAgICAgPSAxO1xuLy92YXIgWl9BU0NJSSAgICAgICAgICAgICAgID0gMTsgLy8gPSBaX1RFWFRcbnZhciBaX1VOS05PV04gICAgICAgICAgICAgPSAyO1xuXG5cbi8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAqL1xudmFyIFpfREVGTEFURUQgID0gODtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG52YXIgTUFYX01FTV9MRVZFTCA9IDk7XG4vKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi9cbnZhciBNQVhfV0JJVFMgPSAxNTtcbi8qIDMySyBMWjc3IHdpbmRvdyAqL1xudmFyIERFRl9NRU1fTEVWRUwgPSA4O1xuXG5cbnZhciBMRU5HVEhfQ09ERVMgID0gMjk7XG4vKiBudW1iZXIgb2YgbGVuZ3RoIGNvZGVzLCBub3QgY291bnRpbmcgdGhlIHNwZWNpYWwgRU5EX0JMT0NLIGNvZGUgKi9cbnZhciBMSVRFUkFMUyAgICAgID0gMjU2O1xuLyogbnVtYmVyIG9mIGxpdGVyYWwgYnl0ZXMgMC4uMjU1ICovXG52YXIgTF9DT0RFUyAgICAgICA9IExJVEVSQUxTICsgMSArIExFTkdUSF9DT0RFUztcbi8qIG51bWJlciBvZiBMaXRlcmFsIG9yIExlbmd0aCBjb2RlcywgaW5jbHVkaW5nIHRoZSBFTkRfQkxPQ0sgY29kZSAqL1xudmFyIERfQ09ERVMgICAgICAgPSAzMDtcbi8qIG51bWJlciBvZiBkaXN0YW5jZSBjb2RlcyAqL1xudmFyIEJMX0NPREVTICAgICAgPSAxOTtcbi8qIG51bWJlciBvZiBjb2RlcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBiaXQgbGVuZ3RocyAqL1xudmFyIEhFQVBfU0laRSAgICAgPSAyICogTF9DT0RFUyArIDE7XG4vKiBtYXhpbXVtIGhlYXAgc2l6ZSAqL1xudmFyIE1BWF9CSVRTICA9IDE1O1xuLyogQWxsIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQklUUyBiaXRzICovXG5cbnZhciBNSU5fTUFUQ0ggPSAzO1xudmFyIE1BWF9NQVRDSCA9IDI1ODtcbnZhciBNSU5fTE9PS0FIRUFEID0gKE1BWF9NQVRDSCArIE1JTl9NQVRDSCArIDEpO1xuXG52YXIgUFJFU0VUX0RJQ1QgPSAweDIwO1xuXG52YXIgSU5JVF9TVEFURSA9IDQyO1xudmFyIEVYVFJBX1NUQVRFID0gNjk7XG52YXIgTkFNRV9TVEFURSA9IDczO1xudmFyIENPTU1FTlRfU1RBVEUgPSA5MTtcbnZhciBIQ1JDX1NUQVRFID0gMTAzO1xudmFyIEJVU1lfU1RBVEUgPSAxMTM7XG52YXIgRklOSVNIX1NUQVRFID0gNjY2O1xuXG52YXIgQlNfTkVFRF9NT1JFICAgICAgPSAxOyAvKiBibG9jayBub3QgY29tcGxldGVkLCBuZWVkIG1vcmUgaW5wdXQgb3IgbW9yZSBvdXRwdXQgKi9cbnZhciBCU19CTE9DS19ET05FICAgICA9IDI7IC8qIGJsb2NrIGZsdXNoIHBlcmZvcm1lZCAqL1xudmFyIEJTX0ZJTklTSF9TVEFSVEVEID0gMzsgLyogZmluaXNoIHN0YXJ0ZWQsIG5lZWQgb25seSBtb3JlIG91dHB1dCBhdCBuZXh0IGRlZmxhdGUgKi9cbnZhciBCU19GSU5JU0hfRE9ORSAgICA9IDQ7IC8qIGZpbmlzaCBkb25lLCBhY2NlcHQgbm8gbW9yZSBpbnB1dCBvciBvdXRwdXQgKi9cblxudmFyIE9TX0NPREUgPSAweDAzOyAvLyBVbml4IDopIC4gRG9uJ3QgZGV0ZWN0LCB1c2UgdGhpcyBkZWZhdWx0LlxuXG5mdW5jdGlvbiBlcnIoc3RybSwgZXJyb3JDb2RlKSB7XG4gIHN0cm0ubXNnID0gbXNnW2Vycm9yQ29kZV07XG4gIHJldHVybiBlcnJvckNvZGU7XG59XG5cbmZ1bmN0aW9uIHJhbmsoZikge1xuICByZXR1cm4gKChmKSA8PCAxKSAtICgoZikgPiA0ID8gOSA6IDApO1xufVxuXG5mdW5jdGlvbiB6ZXJvKGJ1ZikgeyB2YXIgbGVuID0gYnVmLmxlbmd0aDsgd2hpbGUgKC0tbGVuID49IDApIHsgYnVmW2xlbl0gPSAwOyB9IH1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGbHVzaCBhcyBtdWNoIHBlbmRpbmcgb3V0cHV0IGFzIHBvc3NpYmxlLiBBbGwgZGVmbGF0ZSgpIG91dHB1dCBnb2VzXG4gKiB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gc28gc29tZSBhcHBsaWNhdGlvbnMgbWF5IHdpc2ggdG8gbW9kaWZ5IGl0XG4gKiB0byBhdm9pZCBhbGxvY2F0aW5nIGEgbGFyZ2Ugc3RybS0+b3V0cHV0IGJ1ZmZlciBhbmQgY29weWluZyBpbnRvIGl0LlxuICogKFNlZSBhbHNvIHJlYWRfYnVmKCkpLlxuICovXG5mdW5jdGlvbiBmbHVzaF9wZW5kaW5nKHN0cm0pIHtcbiAgdmFyIHMgPSBzdHJtLnN0YXRlO1xuXG4gIC8vX3RyX2ZsdXNoX2JpdHMocyk7XG4gIHZhciBsZW4gPSBzLnBlbmRpbmc7XG4gIGlmIChsZW4gPiBzdHJtLmF2YWlsX291dCkge1xuICAgIGxlbiA9IHN0cm0uYXZhaWxfb3V0O1xuICB9XG4gIGlmIChsZW4gPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgdXRpbHMuYXJyYXlTZXQoc3RybS5vdXRwdXQsIHMucGVuZGluZ19idWYsIHMucGVuZGluZ19vdXQsIGxlbiwgc3RybS5uZXh0X291dCk7XG4gIHN0cm0ubmV4dF9vdXQgKz0gbGVuO1xuICBzLnBlbmRpbmdfb3V0ICs9IGxlbjtcbiAgc3RybS50b3RhbF9vdXQgKz0gbGVuO1xuICBzdHJtLmF2YWlsX291dCAtPSBsZW47XG4gIHMucGVuZGluZyAtPSBsZW47XG4gIGlmIChzLnBlbmRpbmcgPT09IDApIHtcbiAgICBzLnBlbmRpbmdfb3V0ID0gMDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGZsdXNoX2Jsb2NrX29ubHkocywgbGFzdCkge1xuICB0cmVlcy5fdHJfZmx1c2hfYmxvY2socywgKHMuYmxvY2tfc3RhcnQgPj0gMCA/IHMuYmxvY2tfc3RhcnQgOiAtMSksIHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0LCBsYXN0KTtcbiAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7XG4gIGZsdXNoX3BlbmRpbmcocy5zdHJtKTtcbn1cblxuXG5mdW5jdGlvbiBwdXRfYnl0ZShzLCBiKSB7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYjtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBQdXQgYSBzaG9ydCBpbiB0aGUgcGVuZGluZyBidWZmZXIuIFRoZSAxNi1iaXQgdmFsdWUgaXMgcHV0IGluIE1TQiBvcmRlci5cbiAqIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzdGF0ZSBpcyBjb3JyZWN0IGFuZCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpblxuICogcGVuZGluZ19idWYuXG4gKi9cbmZ1bmN0aW9uIHB1dFNob3J0TVNCKHMsIGIpIHtcbi8vICBwdXRfYnl0ZShzLCAoQnl0ZSkoYiA+PiA4KSk7XG4vLyAgcHV0X2J5dGUocywgKEJ5dGUpKGIgJiAweGZmKSk7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gKGIgPj4+IDgpICYgMHhmZjtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiICYgMHhmZjtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFJlYWQgYSBuZXcgYnVmZmVyIGZyb20gdGhlIGN1cnJlbnQgaW5wdXQgc3RyZWFtLCB1cGRhdGUgdGhlIGFkbGVyMzJcbiAqIGFuZCB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gIEFsbCBkZWZsYXRlKCkgaW5wdXQgZ29lcyB0aHJvdWdoXG4gKiB0aGlzIGZ1bmN0aW9uIHNvIHNvbWUgYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIG1vZGlmeSBpdCB0byBhdm9pZFxuICogYWxsb2NhdGluZyBhIGxhcmdlIHN0cm0tPmlucHV0IGJ1ZmZlciBhbmQgY29weWluZyBmcm9tIGl0LlxuICogKFNlZSBhbHNvIGZsdXNoX3BlbmRpbmcoKSkuXG4gKi9cbmZ1bmN0aW9uIHJlYWRfYnVmKHN0cm0sIGJ1Ziwgc3RhcnQsIHNpemUpIHtcbiAgdmFyIGxlbiA9IHN0cm0uYXZhaWxfaW47XG5cbiAgaWYgKGxlbiA+IHNpemUpIHsgbGVuID0gc2l6ZTsgfVxuICBpZiAobGVuID09PSAwKSB7IHJldHVybiAwOyB9XG5cbiAgc3RybS5hdmFpbF9pbiAtPSBsZW47XG5cbiAgLy8gem1lbWNweShidWYsIHN0cm0tPm5leHRfaW4sIGxlbik7XG4gIHV0aWxzLmFycmF5U2V0KGJ1Ziwgc3RybS5pbnB1dCwgc3RybS5uZXh0X2luLCBsZW4sIHN0YXJ0KTtcbiAgaWYgKHN0cm0uc3RhdGUud3JhcCA9PT0gMSkge1xuICAgIHN0cm0uYWRsZXIgPSBhZGxlcjMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7XG4gIH1cblxuICBlbHNlIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDIpIHtcbiAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgYnVmLCBsZW4sIHN0YXJ0KTtcbiAgfVxuXG4gIHN0cm0ubmV4dF9pbiArPSBsZW47XG4gIHN0cm0udG90YWxfaW4gKz0gbGVuO1xuXG4gIHJldHVybiBsZW47XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTZXQgbWF0Y2hfc3RhcnQgdG8gdGhlIGxvbmdlc3QgbWF0Y2ggc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHN0cmluZyBhbmRcbiAqIHJldHVybiBpdHMgbGVuZ3RoLiBNYXRjaGVzIHNob3J0ZXIgb3IgZXF1YWwgdG8gcHJldl9sZW5ndGggYXJlIGRpc2NhcmRlZCxcbiAqIGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyBlcXVhbCB0byBwcmV2X2xlbmd0aCBhbmQgbWF0Y2hfc3RhcnQgaXNcbiAqIGdhcmJhZ2UuXG4gKiBJTiBhc3NlcnRpb25zOiBjdXJfbWF0Y2ggaXMgdGhlIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gZm9yIHRoZSBjdXJyZW50XG4gKiAgIHN0cmluZyAoc3Ryc3RhcnQpIGFuZCBpdHMgZGlzdGFuY2UgaXMgPD0gTUFYX0RJU1QsIGFuZCBwcmV2X2xlbmd0aCA+PSAxXG4gKiBPVVQgYXNzZXJ0aW9uOiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIG5vdCBncmVhdGVyIHRoYW4gcy0+bG9va2FoZWFkLlxuICovXG5mdW5jdGlvbiBsb25nZXN0X21hdGNoKHMsIGN1cl9tYXRjaCkge1xuICB2YXIgY2hhaW5fbGVuZ3RoID0gcy5tYXhfY2hhaW5fbGVuZ3RoOyAgICAgIC8qIG1heCBoYXNoIGNoYWluIGxlbmd0aCAqL1xuICB2YXIgc2NhbiA9IHMuc3Ryc3RhcnQ7IC8qIGN1cnJlbnQgc3RyaW5nICovXG4gIHZhciBtYXRjaDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoZWQgc3RyaW5nICovXG4gIHZhciBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgbWF0Y2ggKi9cbiAgdmFyIGJlc3RfbGVuID0gcy5wcmV2X2xlbmd0aDsgICAgICAgICAgICAgIC8qIGJlc3QgbWF0Y2ggbGVuZ3RoIHNvIGZhciAqL1xuICB2YXIgbmljZV9tYXRjaCA9IHMubmljZV9tYXRjaDsgICAgICAgICAgICAgLyogc3RvcCBpZiBtYXRjaCBsb25nIGVub3VnaCAqL1xuICB2YXIgbGltaXQgPSAocy5zdHJzdGFydCA+IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSA/XG4gICAgICBzLnN0cnN0YXJ0IC0gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgOiAwLypOSUwqLztcblxuICB2YXIgX3dpbiA9IHMud2luZG93OyAvLyBzaG9ydGN1dFxuXG4gIHZhciB3bWFzayA9IHMud19tYXNrO1xuICB2YXIgcHJldiAgPSBzLnByZXY7XG5cbiAgLyogU3RvcCB3aGVuIGN1cl9tYXRjaCBiZWNvbWVzIDw9IGxpbWl0LiBUbyBzaW1wbGlmeSB0aGUgY29kZSxcbiAgICogd2UgcHJldmVudCBtYXRjaGVzIHdpdGggdGhlIHN0cmluZyBvZiB3aW5kb3cgaW5kZXggMC5cbiAgICovXG5cbiAgdmFyIHN0cmVuZCA9IHMuc3Ryc3RhcnQgKyBNQVhfTUFUQ0g7XG4gIHZhciBzY2FuX2VuZDEgID0gX3dpbltzY2FuICsgYmVzdF9sZW4gLSAxXTtcbiAgdmFyIHNjYW5fZW5kICAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbl07XG5cbiAgLyogVGhlIGNvZGUgaXMgb3B0aW1pemVkIGZvciBIQVNIX0JJVFMgPj0gOCBhbmQgTUFYX01BVENILTIgbXVsdGlwbGUgb2YgMTYuXG4gICAqIEl0IGlzIGVhc3kgdG8gZ2V0IHJpZCBvZiB0aGlzIG9wdGltaXphdGlvbiBpZiBuZWNlc3NhcnkuXG4gICAqL1xuICAvLyBBc3NlcnQocy0+aGFzaF9iaXRzID49IDggJiYgTUFYX01BVENIID09IDI1OCwgXCJDb2RlIHRvbyBjbGV2ZXJcIik7XG5cbiAgLyogRG8gbm90IHdhc3RlIHRvbyBtdWNoIHRpbWUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgZ29vZCBtYXRjaDogKi9cbiAgaWYgKHMucHJldl9sZW5ndGggPj0gcy5nb29kX21hdGNoKSB7XG4gICAgY2hhaW5fbGVuZ3RoID4+PSAyO1xuICB9XG4gIC8qIERvIG5vdCBsb29rIGZvciBtYXRjaGVzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4gVGhpcyBpcyBuZWNlc3NhcnlcbiAgICogdG8gbWFrZSBkZWZsYXRlIGRldGVybWluaXN0aWMuXG4gICAqL1xuICBpZiAobmljZV9tYXRjaCA+IHMubG9va2FoZWFkKSB7IG5pY2VfbWF0Y2ggPSBzLmxvb2thaGVhZDsgfVxuXG4gIC8vIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplLU1JTl9MT09LQUhFQUQsIFwibmVlZCBsb29rYWhlYWRcIik7XG5cbiAgZG8ge1xuICAgIC8vIEFzc2VydChjdXJfbWF0Y2ggPCBzLT5zdHJzdGFydCwgXCJubyBmdXR1cmVcIik7XG4gICAgbWF0Y2ggPSBjdXJfbWF0Y2g7XG5cbiAgICAvKiBTa2lwIHRvIG5leHQgbWF0Y2ggaWYgdGhlIG1hdGNoIGxlbmd0aCBjYW5ub3QgaW5jcmVhc2VcbiAgICAgKiBvciBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIGxlc3MgdGhhbiAyLiAgTm90ZSB0aGF0IHRoZSBjaGVja3MgYmVsb3dcbiAgICAgKiBmb3IgaW5zdWZmaWNpZW50IGxvb2thaGVhZCBvbmx5IG9jY3VyIG9jY2FzaW9uYWxseSBmb3IgcGVyZm9ybWFuY2VcbiAgICAgKiByZWFzb25zLiAgVGhlcmVmb3JlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpbGwgYmUgYWNjZXNzZWQsIGFuZFxuICAgICAqIGNvbmRpdGlvbmFsIGp1bXBzIHdpbGwgYmUgbWFkZSB0aGF0IGRlcGVuZCBvbiB0aG9zZSB2YWx1ZXMuXG4gICAgICogSG93ZXZlciB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaCBpcyBsaW1pdGVkIHRvIHRoZSBsb29rYWhlYWQsIHNvXG4gICAgICogdGhlIG91dHB1dCBvZiBkZWZsYXRlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZXMuXG4gICAgICovXG5cbiAgICBpZiAoX3dpblttYXRjaCArIGJlc3RfbGVuXSAgICAgIT09IHNjYW5fZW5kICB8fFxuICAgICAgICBfd2luW21hdGNoICsgYmVzdF9sZW4gLSAxXSAhPT0gc2Nhbl9lbmQxIHx8XG4gICAgICAgIF93aW5bbWF0Y2hdICAgICAgICAgICAgICAgICE9PSBfd2luW3NjYW5dIHx8XG4gICAgICAgIF93aW5bKyttYXRjaF0gICAgICAgICAgICAgICE9PSBfd2luW3NjYW4gKyAxXSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyogVGhlIGNoZWNrIGF0IGJlc3RfbGVuLTEgY2FuIGJlIHJlbW92ZWQgYmVjYXVzZSBpdCB3aWxsIGJlIG1hZGVcbiAgICAgKiBhZ2FpbiBsYXRlci4gKFRoaXMgaGV1cmlzdGljIGlzIG5vdCBhbHdheXMgYSB3aW4uKVxuICAgICAqIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY29tcGFyZSBzY2FuWzJdIGFuZCBtYXRjaFsyXSBzaW5jZSB0aGV5XG4gICAgICogYXJlIGFsd2F5cyBlcXVhbCB3aGVuIHRoZSBvdGhlciBieXRlcyBtYXRjaCwgZ2l2ZW4gdGhhdFxuICAgICAqIHRoZSBoYXNoIGtleXMgYXJlIGVxdWFsIGFuZCB0aGF0IEhBU0hfQklUUyA+PSA4LlxuICAgICAqL1xuICAgIHNjYW4gKz0gMjtcbiAgICBtYXRjaCsrO1xuICAgIC8vIEFzc2VydCgqc2NhbiA9PSAqbWF0Y2gsIFwibWF0Y2hbMl0/XCIpO1xuXG4gICAgLyogV2UgY2hlY2sgZm9yIGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBldmVyeSA4dGggY29tcGFyaXNvbjtcbiAgICAgKiB0aGUgMjU2dGggY2hlY2sgd2lsbCBiZSBtYWRlIGF0IHN0cnN0YXJ0KzI1OC5cbiAgICAgKi9cbiAgICBkbyB7XG4gICAgICAvKmpzaGludCBub2VtcHR5OmZhbHNlKi9cbiAgICB9IHdoaWxlIChfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmXG4gICAgICAgICAgICAgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJlxuICAgICAgICAgICAgIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiZcbiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmXG4gICAgICAgICAgICAgc2NhbiA8IHN0cmVuZCk7XG5cbiAgICAvLyBBc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZS0xKSwgXCJ3aWxkIHNjYW5cIik7XG5cbiAgICBsZW4gPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7XG4gICAgc2NhbiA9IHN0cmVuZCAtIE1BWF9NQVRDSDtcblxuICAgIGlmIChsZW4gPiBiZXN0X2xlbikge1xuICAgICAgcy5tYXRjaF9zdGFydCA9IGN1cl9tYXRjaDtcbiAgICAgIGJlc3RfbGVuID0gbGVuO1xuICAgICAgaWYgKGxlbiA+PSBuaWNlX21hdGNoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc2Nhbl9lbmQxICA9IF93aW5bc2NhbiArIGJlc3RfbGVuIC0gMV07XG4gICAgICBzY2FuX2VuZCAgID0gX3dpbltzY2FuICsgYmVzdF9sZW5dO1xuICAgIH1cbiAgfSB3aGlsZSAoKGN1cl9tYXRjaCA9IHByZXZbY3VyX21hdGNoICYgd21hc2tdKSA+IGxpbWl0ICYmIC0tY2hhaW5fbGVuZ3RoICE9PSAwKTtcblxuICBpZiAoYmVzdF9sZW4gPD0gcy5sb29rYWhlYWQpIHtcbiAgICByZXR1cm4gYmVzdF9sZW47XG4gIH1cbiAgcmV0dXJuIHMubG9va2FoZWFkO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmlsbCB0aGUgd2luZG93IHdoZW4gdGhlIGxvb2thaGVhZCBiZWNvbWVzIGluc3VmZmljaWVudC5cbiAqIFVwZGF0ZXMgc3Ryc3RhcnQgYW5kIGxvb2thaGVhZC5cbiAqXG4gKiBJTiBhc3NlcnRpb246IGxvb2thaGVhZCA8IE1JTl9MT09LQUhFQURcbiAqIE9VVCBhc3NlcnRpb25zOiBzdHJzdGFydCA8PSB3aW5kb3dfc2l6ZS1NSU5fTE9PS0FIRUFEXG4gKiAgICBBdCBsZWFzdCBvbmUgYnl0ZSBoYXMgYmVlbiByZWFkLCBvciBhdmFpbF9pbiA9PSAwOyByZWFkcyBhcmVcbiAqICAgIHBlcmZvcm1lZCBmb3IgYXQgbGVhc3QgdHdvIGJ5dGVzIChyZXF1aXJlZCBmb3IgdGhlIHppcCB0cmFuc2xhdGVfZW9sXG4gKiAgICBvcHRpb24gLS0gbm90IHN1cHBvcnRlZCBoZXJlKS5cbiAqL1xuZnVuY3Rpb24gZmlsbF93aW5kb3cocykge1xuICB2YXIgX3dfc2l6ZSA9IHMud19zaXplO1xuICB2YXIgcCwgbiwgbSwgbW9yZSwgc3RyO1xuXG4gIC8vQXNzZXJ0KHMtPmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQsIFwiYWxyZWFkeSBlbm91Z2ggbG9va2FoZWFkXCIpO1xuXG4gIGRvIHtcbiAgICBtb3JlID0gcy53aW5kb3dfc2l6ZSAtIHMubG9va2FoZWFkIC0gcy5zdHJzdGFydDtcblxuICAgIC8vIEpTIGludHMgaGF2ZSAzMiBiaXQsIGJsb2NrIGJlbG93IG5vdCBuZWVkZWRcbiAgICAvKiBEZWFsIHdpdGggIUAjJCUgNjRLIGxpbWl0OiAqL1xuICAgIC8vaWYgKHNpemVvZihpbnQpIDw9IDIpIHtcbiAgICAvLyAgICBpZiAobW9yZSA9PSAwICYmIHMtPnN0cnN0YXJ0ID09IDAgJiYgcy0+bG9va2FoZWFkID09IDApIHtcbiAgICAvLyAgICAgICAgbW9yZSA9IHdzaXplO1xuICAgIC8vXG4gICAgLy8gIH0gZWxzZSBpZiAobW9yZSA9PSAodW5zaWduZWQpKC0xKSkge1xuICAgIC8vICAgICAgICAvKiBWZXJ5IHVubGlrZWx5LCBidXQgcG9zc2libGUgb24gMTYgYml0IG1hY2hpbmUgaWZcbiAgICAvLyAgICAgICAgICogc3Ryc3RhcnQgPT0gMCAmJiBsb29rYWhlYWQgPT0gMSAoaW5wdXQgZG9uZSBhIGJ5dGUgYXQgdGltZSlcbiAgICAvLyAgICAgICAgICovXG4gICAgLy8gICAgICAgIG1vcmUtLTtcbiAgICAvLyAgICB9XG4gICAgLy99XG5cblxuICAgIC8qIElmIHRoZSB3aW5kb3cgaXMgYWxtb3N0IGZ1bGwgYW5kIHRoZXJlIGlzIGluc3VmZmljaWVudCBsb29rYWhlYWQsXG4gICAgICogbW92ZSB0aGUgdXBwZXIgaGFsZiB0byB0aGUgbG93ZXIgb25lIHRvIG1ha2Ugcm9vbSBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgKi9cbiAgICBpZiAocy5zdHJzdGFydCA+PSBfd19zaXplICsgKF93X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkge1xuXG4gICAgICB1dGlscy5hcnJheVNldChzLndpbmRvdywgcy53aW5kb3csIF93X3NpemUsIF93X3NpemUsIDApO1xuICAgICAgcy5tYXRjaF9zdGFydCAtPSBfd19zaXplO1xuICAgICAgcy5zdHJzdGFydCAtPSBfd19zaXplO1xuICAgICAgLyogd2Ugbm93IGhhdmUgc3Ryc3RhcnQgPj0gTUFYX0RJU1QgKi9cbiAgICAgIHMuYmxvY2tfc3RhcnQgLT0gX3dfc2l6ZTtcblxuICAgICAgLyogU2xpZGUgdGhlIGhhc2ggdGFibGUgKGNvdWxkIGJlIGF2b2lkZWQgd2l0aCAzMiBiaXQgdmFsdWVzXG4gICAgICAgYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlKS4gV2Ugc2xpZGUgZXZlbiB3aGVuIGxldmVsID09IDBcbiAgICAgICB0byBrZWVwIHRoZSBoYXNoIHRhYmxlIGNvbnNpc3RlbnQgaWYgd2Ugc3dpdGNoIGJhY2sgdG8gbGV2ZWwgPiAwXG4gICAgICAgbGF0ZXIuIChVc2luZyBsZXZlbCAwIHBlcm1hbmVudGx5IGlzIG5vdCBhbiBvcHRpbWFsIHVzYWdlIG9mXG4gICAgICAgemxpYiwgc28gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGlzIHBhdGhvbG9naWNhbCBjYXNlLilcbiAgICAgICAqL1xuXG4gICAgICBuID0gcy5oYXNoX3NpemU7XG4gICAgICBwID0gbjtcbiAgICAgIGRvIHtcbiAgICAgICAgbSA9IHMuaGVhZFstLXBdO1xuICAgICAgICBzLmhlYWRbcF0gPSAobSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwKTtcbiAgICAgIH0gd2hpbGUgKC0tbik7XG5cbiAgICAgIG4gPSBfd19zaXplO1xuICAgICAgcCA9IG47XG4gICAgICBkbyB7XG4gICAgICAgIG0gPSBzLnByZXZbLS1wXTtcbiAgICAgICAgcy5wcmV2W3BdID0gKG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMCk7XG4gICAgICAgIC8qIElmIG4gaXMgbm90IG9uIGFueSBoYXNoIGNoYWluLCBwcmV2W25dIGlzIGdhcmJhZ2UgYnV0XG4gICAgICAgICAqIGl0cyB2YWx1ZSB3aWxsIG5ldmVyIGJlIHVzZWQuXG4gICAgICAgICAqL1xuICAgICAgfSB3aGlsZSAoLS1uKTtcblxuICAgICAgbW9yZSArPSBfd19zaXplO1xuICAgIH1cbiAgICBpZiAocy5zdHJtLmF2YWlsX2luID09PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvKiBJZiB0aGVyZSB3YXMgbm8gc2xpZGluZzpcbiAgICAgKiAgICBzdHJzdGFydCA8PSBXU0laRStNQVhfRElTVC0xICYmIGxvb2thaGVhZCA8PSBNSU5fTE9PS0FIRUFEIC0gMSAmJlxuICAgICAqICAgIG1vcmUgPT0gd2luZG93X3NpemUgLSBsb29rYWhlYWQgLSBzdHJzdGFydFxuICAgICAqID0+IG1vcmUgPj0gd2luZG93X3NpemUgLSAoTUlOX0xPT0tBSEVBRC0xICsgV1NJWkUgKyBNQVhfRElTVC0xKVxuICAgICAqID0+IG1vcmUgPj0gd2luZG93X3NpemUgLSAyKldTSVpFICsgMlxuICAgICAqIEluIHRoZSBCSUdfTUVNIG9yIE1NQVAgY2FzZSAobm90IHlldCBzdXBwb3J0ZWQpLFxuICAgICAqICAgd2luZG93X3NpemUgPT0gaW5wdXRfc2l6ZSArIE1JTl9MT09LQUhFQUQgICYmXG4gICAgICogICBzdHJzdGFydCArIHMtPmxvb2thaGVhZCA8PSBpbnB1dF9zaXplID0+IG1vcmUgPj0gTUlOX0xPT0tBSEVBRC5cbiAgICAgKiBPdGhlcndpc2UsIHdpbmRvd19zaXplID09IDIqV1NJWkUgc28gbW9yZSA+PSAyLlxuICAgICAqIElmIHRoZXJlIHdhcyBzbGlkaW5nLCBtb3JlID49IFdTSVpFLiBTbyBpbiBhbGwgY2FzZXMsIG1vcmUgPj0gMi5cbiAgICAgKi9cbiAgICAvL0Fzc2VydChtb3JlID49IDIsIFwibW9yZSA8IDJcIik7XG4gICAgbiA9IHJlYWRfYnVmKHMuc3RybSwgcy53aW5kb3csIHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCwgbW9yZSk7XG4gICAgcy5sb29rYWhlYWQgKz0gbjtcblxuICAgIC8qIEluaXRpYWxpemUgdGhlIGhhc2ggdmFsdWUgbm93IHRoYXQgd2UgaGF2ZSBzb21lIGlucHV0OiAqL1xuICAgIGlmIChzLmxvb2thaGVhZCArIHMuaW5zZXJ0ID49IE1JTl9NQVRDSCkge1xuICAgICAgc3RyID0gcy5zdHJzdGFydCAtIHMuaW5zZXJ0O1xuICAgICAgcy5pbnNfaCA9IHMud2luZG93W3N0cl07XG5cbiAgICAgIC8qIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgMV0pOyAqL1xuICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbc3RyICsgMV0pICYgcy5oYXNoX21hc2s7XG4vLyNpZiBNSU5fTUFUQ0ggIT0gM1xuLy8gICAgICAgIENhbGwgdXBkYXRlX2hhc2goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzXG4vLyNlbmRpZlxuICAgICAgd2hpbGUgKHMuaW5zZXJ0KSB7XG4gICAgICAgIC8qIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsgKi9cbiAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbc3RyICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG5cbiAgICAgICAgcy5wcmV2W3N0ciAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTtcbiAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gc3RyO1xuICAgICAgICBzdHIrKztcbiAgICAgICAgcy5pbnNlcnQtLTtcbiAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPCBNSU5fTUFUQ0gpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKiBJZiB0aGUgd2hvbGUgaW5wdXQgaGFzIGxlc3MgdGhhbiBNSU5fTUFUQ0ggYnl0ZXMsIGluc19oIGlzIGdhcmJhZ2UsXG4gICAgICogYnV0IHRoaXMgaXMgbm90IGltcG9ydGFudCBzaW5jZSBvbmx5IGxpdGVyYWwgYnl0ZXMgd2lsbCBiZSBlbWl0dGVkLlxuICAgICAqL1xuXG4gIH0gd2hpbGUgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBzLnN0cm0uYXZhaWxfaW4gIT09IDApO1xuXG4gIC8qIElmIHRoZSBXSU5fSU5JVCBieXRlcyBhZnRlciB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGRhdGEgaGF2ZSBuZXZlciBiZWVuXG4gICAqIHdyaXR0ZW4sIHRoZW4gemVybyB0aG9zZSBieXRlcyBpbiBvcmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgcmVwb3J0cyBvZlxuICAgKiB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgKG9yIHVuaW5pdGlhbGlzZWQgYXMgSnVsaWFuIHdyaXRlcykgYnl0ZXMgYnlcbiAgICogdGhlIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMuICBVcGRhdGUgdGhlIGhpZ2ggd2F0ZXIgbWFyayBmb3IgdGhlIG5leHRcbiAgICogdGltZSB0aHJvdWdoIGhlcmUuICBXSU5fSU5JVCBpcyBzZXQgdG8gTUFYX01BVENIIHNpbmNlIHRoZSBsb25nZXN0IG1hdGNoXG4gICAqIHJvdXRpbmVzIGFsbG93IHNjYW5uaW5nIHRvIHN0cnN0YXJ0ICsgTUFYX01BVENILCBpZ25vcmluZyBsb29rYWhlYWQuXG4gICAqL1xuLy8gIGlmIChzLmhpZ2hfd2F0ZXIgPCBzLndpbmRvd19zaXplKSB7XG4vLyAgICB2YXIgY3VyciA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZDtcbi8vICAgIHZhciBpbml0ID0gMDtcbi8vXG4vLyAgICBpZiAocy5oaWdoX3dhdGVyIDwgY3Vycikge1xuLy8gICAgICAvKiBQcmV2aW91cyBoaWdoIHdhdGVyIG1hcmsgYmVsb3cgY3VycmVudCBkYXRhIC0tIHplcm8gV0lOX0lOSVRcbi8vICAgICAgICogYnl0ZXMgb3IgdXAgdG8gZW5kIG9mIHdpbmRvdywgd2hpY2hldmVyIGlzIGxlc3MuXG4vLyAgICAgICAqL1xuLy8gICAgICBpbml0ID0gcy53aW5kb3dfc2l6ZSAtIGN1cnI7XG4vLyAgICAgIGlmIChpbml0ID4gV0lOX0lOSVQpXG4vLyAgICAgICAgaW5pdCA9IFdJTl9JTklUO1xuLy8gICAgICB6bWVtemVybyhzLT53aW5kb3cgKyBjdXJyLCAodW5zaWduZWQpaW5pdCk7XG4vLyAgICAgIHMtPmhpZ2hfd2F0ZXIgPSBjdXJyICsgaW5pdDtcbi8vICAgIH1cbi8vICAgIGVsc2UgaWYgKHMtPmhpZ2hfd2F0ZXIgPCAodWxnKWN1cnIgKyBXSU5fSU5JVCkge1xuLy8gICAgICAvKiBIaWdoIHdhdGVyIG1hcmsgYXQgb3IgYWJvdmUgY3VycmVudCBkYXRhLCBidXQgYmVsb3cgY3VycmVudCBkYXRhXG4vLyAgICAgICAqIHBsdXMgV0lOX0lOSVQgLS0gemVybyBvdXQgdG8gY3VycmVudCBkYXRhIHBsdXMgV0lOX0lOSVQsIG9yIHVwXG4vLyAgICAgICAqIHRvIGVuZCBvZiB3aW5kb3csIHdoaWNoZXZlciBpcyBsZXNzLlxuLy8gICAgICAgKi9cbi8vICAgICAgaW5pdCA9ICh1bGcpY3VyciArIFdJTl9JTklUIC0gcy0+aGlnaF93YXRlcjtcbi8vICAgICAgaWYgKGluaXQgPiBzLT53aW5kb3dfc2l6ZSAtIHMtPmhpZ2hfd2F0ZXIpXG4vLyAgICAgICAgaW5pdCA9IHMtPndpbmRvd19zaXplIC0gcy0+aGlnaF93YXRlcjtcbi8vICAgICAgem1lbXplcm8ocy0+d2luZG93ICsgcy0+aGlnaF93YXRlciwgKHVuc2lnbmVkKWluaXQpO1xuLy8gICAgICBzLT5oaWdoX3dhdGVyICs9IGluaXQ7XG4vLyAgICB9XG4vLyAgfVxuLy9cbi8vICBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQsXG4vLyAgICBcIm5vdCBlbm91Z2ggcm9vbSBmb3Igc2VhcmNoXCIpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHkgd2l0aG91dCBjb21wcmVzc2lvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGlucHV0IHN0cmVhbSwgcmV0dXJuXG4gKiB0aGUgY3VycmVudCBibG9jayBzdGF0ZS5cbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaW5zZXJ0IG5ldyBzdHJpbmdzIGluIHRoZSBkaWN0aW9uYXJ5IHNpbmNlXG4gKiB1bmNvbXByZXNzaWJsZSBkYXRhIGlzIHByb2JhYmx5IG5vdCB1c2VmdWwuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZFxuICogb25seSBmb3IgdGhlIGxldmVsPTAgY29tcHJlc3Npb24gb3B0aW9uLlxuICogTk9URTogdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgb3B0aW1pemVkIHRvIGF2b2lkIGV4dHJhIGNvcHlpbmcgZnJvbVxuICogd2luZG93IHRvIHBlbmRpbmdfYnVmLlxuICovXG5mdW5jdGlvbiBkZWZsYXRlX3N0b3JlZChzLCBmbHVzaCkge1xuICAvKiBTdG9yZWQgYmxvY2tzIGFyZSBsaW1pdGVkIHRvIDB4ZmZmZiBieXRlcywgcGVuZGluZ19idWYgaXMgbGltaXRlZFxuICAgKiB0byBwZW5kaW5nX2J1Zl9zaXplLCBhbmQgZWFjaCBzdG9yZWQgYmxvY2sgaGFzIGEgNSBieXRlIGhlYWRlcjpcbiAgICovXG4gIHZhciBtYXhfYmxvY2tfc2l6ZSA9IDB4ZmZmZjtcblxuICBpZiAobWF4X2Jsb2NrX3NpemUgPiBzLnBlbmRpbmdfYnVmX3NpemUgLSA1KSB7XG4gICAgbWF4X2Jsb2NrX3NpemUgPSBzLnBlbmRpbmdfYnVmX3NpemUgLSA1O1xuICB9XG5cbiAgLyogQ29weSBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gaW5wdXQgdG8gb3V0cHV0OiAqL1xuICBmb3IgKDs7KSB7XG4gICAgLyogRmlsbCB0aGUgd2luZG93IGFzIG11Y2ggYXMgcG9zc2libGU6ICovXG4gICAgaWYgKHMubG9va2FoZWFkIDw9IDEpIHtcblxuICAgICAgLy9Bc3NlcnQocy0+c3Ryc3RhcnQgPCBzLT53X3NpemUrTUFYX0RJU1QocykgfHxcbiAgICAgIC8vICBzLT5ibG9ja19zdGFydCA+PSAobG9uZylzLT53X3NpemUsIFwic2xpZGUgdG9vIGxhdGVcIik7XG4vLyAgICAgIGlmICghKHMuc3Ryc3RhcnQgPCBzLndfc2l6ZSArIChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIHx8XG4vLyAgICAgICAgcy5ibG9ja19zdGFydCA+PSBzLndfc2l6ZSkpIHtcbi8vICAgICAgICB0aHJvdyAgbmV3IEVycm9yKFwic2xpZGUgdG9vIGxhdGVcIik7XG4vLyAgICAgIH1cblxuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPT09IDAgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi9cbiAgICB9XG4gICAgLy9Bc3NlcnQocy0+YmxvY2tfc3RhcnQgPj0gMEwsIFwiYmxvY2sgZ29uZVwiKTtcbi8vICAgIGlmIChzLmJsb2NrX3N0YXJ0IDwgMCkgdGhyb3cgbmV3IEVycm9yKFwiYmxvY2sgZ29uZVwiKTtcblxuICAgIHMuc3Ryc3RhcnQgKz0gcy5sb29rYWhlYWQ7XG4gICAgcy5sb29rYWhlYWQgPSAwO1xuXG4gICAgLyogRW1pdCBhIHN0b3JlZCBibG9jayBpZiBwZW5kaW5nX2J1ZiB3aWxsIGJlIGZ1bGw6ICovXG4gICAgdmFyIG1heF9zdGFydCA9IHMuYmxvY2tfc3RhcnQgKyBtYXhfYmxvY2tfc2l6ZTtcblxuICAgIGlmIChzLnN0cnN0YXJ0ID09PSAwIHx8IHMuc3Ryc3RhcnQgPj0gbWF4X3N0YXJ0KSB7XG4gICAgICAvKiBzdHJzdGFydCA9PSAwIGlzIHBvc3NpYmxlIHdoZW4gd3JhcGFyb3VuZCBvbiAxNi1iaXQgbWFjaGluZSAqL1xuICAgICAgcy5sb29rYWhlYWQgPSBzLnN0cnN0YXJ0IC0gbWF4X3N0YXJ0O1xuICAgICAgcy5zdHJzdGFydCA9IG1heF9zdGFydDtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG5cblxuICAgIH1cbiAgICAvKiBGbHVzaCBpZiB3ZSBtYXkgaGF2ZSB0byBzbGlkZSwgb3RoZXJ3aXNlIGJsb2NrX3N0YXJ0IG1heSBiZWNvbWVcbiAgICAgKiBuZWdhdGl2ZSBhbmQgdGhlIGRhdGEgd2lsbCBiZSBnb25lOlxuICAgICAqL1xuICAgIGlmIChzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydCA+PSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkge1xuICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgLyoqKi9cbiAgICB9XG4gIH1cblxuICBzLmluc2VydCA9IDA7XG5cbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG5cbiAgaWYgKHMuc3Ryc3RhcnQgPiBzLmJsb2NrX3N0YXJ0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG5cbiAgcmV0dXJuIEJTX05FRURfTU9SRTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb21wcmVzcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGlucHV0IHN0cmVhbSwgcmV0dXJuIHRoZSBjdXJyZW50XG4gKiBibG9jayBzdGF0ZS5cbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBsYXp5IGV2YWx1YXRpb24gb2YgbWF0Y2hlcyBhbmQgaW5zZXJ0c1xuICogbmV3IHN0cmluZ3MgaW4gdGhlIGRpY3Rpb25hcnkgb25seSBmb3IgdW5tYXRjaGVkIHN0cmluZ3Mgb3IgZm9yIHNob3J0XG4gKiBtYXRjaGVzLiBJdCBpcyB1c2VkIG9ubHkgZm9yIHRoZSBmYXN0IGNvbXByZXNzaW9uIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVfZmFzdChzLCBmbHVzaCkge1xuICB2YXIgaGFzaF9oZWFkOyAgICAgICAgLyogaGVhZCBvZiB0aGUgaGFzaCBjaGFpbiAqL1xuICB2YXIgYmZsdXNoOyAgICAgICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovXG5cbiAgZm9yICg7Oykge1xuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdFxuICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzXG4gICAgICogZm9yIHRoZSBuZXh0IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlXG4gICAgICogc3RyaW5nIGZvbGxvd2luZyB0aGUgbmV4dCBtYXRjaC5cbiAgICAgKi9cbiAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICBicmVhazsgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi9cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJbnNlcnQgdGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlXG4gICAgICogZGljdGlvbmFyeSwgYW5kIHNldCBoYXNoX2hlYWQgdG8gdGhlIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW46XG4gICAgICovXG4gICAgaGFzaF9oZWFkID0gMC8qTklMKi87XG4gICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkge1xuICAgICAgLyoqKiBJTlNFUlRfU1RSSU5HKHMsIHMuc3Ryc3RhcnQsIGhhc2hfaGVhZCk7ICoqKi9cbiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzaztcbiAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDtcbiAgICAgIC8qKiovXG4gICAgfVxuXG4gICAgLyogRmluZCB0aGUgbG9uZ2VzdCBtYXRjaCwgZGlzY2FyZGluZyB0aG9zZSA8PSBwcmV2X2xlbmd0aC5cbiAgICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYWx3YXlzIG1hdGNoX2xlbmd0aCA8IE1JTl9NQVRDSFxuICAgICAqL1xuICAgIGlmIChoYXNoX2hlYWQgIT09IDAvKk5JTCovICYmICgocy5zdHJzdGFydCAtIGhhc2hfaGVhZCkgPD0gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkpKSB7XG4gICAgICAvKiBUbyBzaW1wbGlmeSB0aGUgY29kZSwgd2UgcHJldmVudCBtYXRjaGVzIHdpdGggdGhlIHN0cmluZ1xuICAgICAgICogb2Ygd2luZG93IGluZGV4IDAgKGluIHBhcnRpY3VsYXIgd2UgaGF2ZSB0byBhdm9pZCBhIG1hdGNoXG4gICAgICAgKiBvZiB0aGUgc3RyaW5nIHdpdGggaXRzZWxmIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5wdXQgZmlsZSkuXG4gICAgICAgKi9cbiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpO1xuICAgICAgLyogbG9uZ2VzdF9tYXRjaCgpIHNldHMgbWF0Y2hfc3RhcnQgKi9cbiAgICB9XG4gICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkge1xuICAgICAgLy8gY2hlY2tfbWF0Y2gocywgcy5zdHJzdGFydCwgcy5tYXRjaF9zdGFydCwgcy5tYXRjaF9sZW5ndGgpOyAvLyBmb3IgZGVidWcgb25seVxuXG4gICAgICAvKioqIF90cl90YWxseV9kaXN0KHMsIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gsIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCBzLnN0cnN0YXJ0IC0gcy5tYXRjaF9zdGFydCwgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gpO1xuXG4gICAgICBzLmxvb2thaGVhZCAtPSBzLm1hdGNoX2xlbmd0aDtcblxuICAgICAgLyogSW5zZXJ0IG5ldyBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIG9ubHkgaWYgdGhlIG1hdGNoIGxlbmd0aFxuICAgICAgICogaXMgbm90IHRvbyBsYXJnZS4gVGhpcyBzYXZlcyB0aW1lIGJ1dCBkZWdyYWRlcyBjb21wcmVzc2lvbi5cbiAgICAgICAqL1xuICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoIDw9IHMubWF4X2xhenlfbWF0Y2gvKm1heF9pbnNlcnRfbGVuZ3RoKi8gJiYgcy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7XG4gICAgICAgIHMubWF0Y2hfbGVuZ3RoLS07IC8qIHN0cmluZyBhdCBzdHJzdGFydCBhbHJlYWR5IGluIHRhYmxlICovXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgICAgICAgLyoqKiBJTlNFUlRfU1RSSU5HKHMsIHMuc3Ryc3RhcnQsIGhhc2hfaGVhZCk7ICoqKi9cbiAgICAgICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG4gICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDtcbiAgICAgICAgICAvKioqL1xuICAgICAgICAgIC8qIHN0cnN0YXJ0IG5ldmVyIGV4Y2VlZHMgV1NJWkUtTUFYX01BVENILCBzbyB0aGVyZSBhcmVcbiAgICAgICAgICAgKiBhbHdheXMgTUlOX01BVENIIGJ5dGVzIGFoZWFkLlxuICAgICAgICAgICAqL1xuICAgICAgICB9IHdoaWxlICgtLXMubWF0Y2hfbGVuZ3RoICE9PSAwKTtcbiAgICAgICAgcy5zdHJzdGFydCsrO1xuICAgICAgfSBlbHNlXG4gICAgICB7XG4gICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7XG4gICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDtcbiAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3Muc3Ryc3RhcnRdO1xuICAgICAgICAvKiBVUERBVEVfSEFTSChzLCBzLmluc19oLCBzLndpbmRvd1tzLnN0cnN0YXJ0KzFdKTsgKi9cbiAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIDFdKSAmIHMuaGFzaF9tYXNrO1xuXG4vLyNpZiBNSU5fTUFUQ0ggIT0gM1xuLy8gICAgICAgICAgICAgICAgQ2FsbCBVUERBVEVfSEFTSCgpIE1JTl9NQVRDSC0zIG1vcmUgdGltZXNcbi8vI2VuZGlmXG4gICAgICAgIC8qIElmIGxvb2thaGVhZCA8IE1JTl9NQVRDSCwgaW5zX2ggaXMgZ2FyYmFnZSwgYnV0IGl0IGRvZXMgbm90XG4gICAgICAgICAqIG1hdHRlciBzaW5jZSBpdCB3aWxsIGJlIHJlY29tcHV0ZWQgYXQgbmV4dCBkZWZsYXRlIGNhbGwuXG4gICAgICAgICAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBObyBtYXRjaCwgb3V0cHV0IGEgbGl0ZXJhbCBieXRlICovXG4gICAgICAvL1RyYWNldnYoKHN0ZGVycixcIiVjXCIsIHMud2luZG93W3Muc3Ryc3RhcnRdKSk7XG4gICAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydF0sIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7XG5cbiAgICAgIHMubG9va2FoZWFkLS07XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgfVxuICAgIGlmIChiZmx1c2gpIHtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG4gICAgfVxuICB9XG4gIHMuaW5zZXJ0ID0gKChzLnN0cnN0YXJ0IDwgKE1JTl9NQVRDSCAtIDEpKSA/IHMuc3Ryc3RhcnQgOiBNSU5fTUFUQ0ggLSAxKTtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLmxhc3RfbGl0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNhbWUgYXMgYWJvdmUsIGJ1dCBhY2hpZXZlcyBiZXR0ZXIgY29tcHJlc3Npb24uIFdlIHVzZSBhIGxhenlcbiAqIGV2YWx1YXRpb24gZm9yIG1hdGNoZXM6IGEgbWF0Y2ggaXMgZmluYWxseSBhZG9wdGVkIG9ubHkgaWYgdGhlcmUgaXNcbiAqIG5vIGJldHRlciBtYXRjaCBhdCB0aGUgbmV4dCB3aW5kb3cgcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVfc2xvdyhzLCBmbHVzaCkge1xuICB2YXIgaGFzaF9oZWFkOyAgICAgICAgICAvKiBoZWFkIG9mIGhhc2ggY2hhaW4gKi9cbiAgdmFyIGJmbHVzaDsgICAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqL1xuXG4gIHZhciBtYXhfaW5zZXJ0O1xuXG4gIC8qIFByb2Nlc3MgdGhlIGlucHV0IGJsb2NrLiAqL1xuICBmb3IgKDs7KSB7XG4gICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0XG4gICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXNcbiAgICAgKiBmb3IgdGhlIG5leHQgbWF0Y2gsIHBsdXMgTUlOX01BVENIIGJ5dGVzIHRvIGluc2VydCB0aGVcbiAgICAgKiBzdHJpbmcgZm9sbG93aW5nIHRoZSBuZXh0IG1hdGNoLlxuICAgICAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQpIHtcbiAgICAgIGZpbGxfd2luZG93KHMpO1xuICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7IGJyZWFrOyB9IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgfVxuXG4gICAgLyogSW5zZXJ0IHRoZSBzdHJpbmcgd2luZG93W3N0cnN0YXJ0IC4uIHN0cnN0YXJ0KzJdIGluIHRoZVxuICAgICAqIGRpY3Rpb25hcnksIGFuZCBzZXQgaGFzaF9oZWFkIHRvIHRoZSBoZWFkIG9mIHRoZSBoYXNoIGNoYWluOlxuICAgICAqL1xuICAgIGhhc2hfaGVhZCA9IDAvKk5JTCovO1xuICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovXG4gICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG4gICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTtcbiAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7XG4gICAgICAvKioqL1xuICAgIH1cblxuICAgIC8qIEZpbmQgdGhlIGxvbmdlc3QgbWF0Y2gsIGRpc2NhcmRpbmcgdGhvc2UgPD0gcHJldl9sZW5ndGguXG4gICAgICovXG4gICAgcy5wcmV2X2xlbmd0aCA9IHMubWF0Y2hfbGVuZ3RoO1xuICAgIHMucHJldl9tYXRjaCA9IHMubWF0Y2hfc3RhcnQ7XG4gICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuXG4gICAgaWYgKGhhc2hfaGVhZCAhPT0gMC8qTklMKi8gJiYgcy5wcmV2X2xlbmd0aCA8IHMubWF4X2xhenlfbWF0Y2ggJiZcbiAgICAgICAgcy5zdHJzdGFydCAtIGhhc2hfaGVhZCA8PSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKS8qTUFYX0RJU1QocykqLykge1xuICAgICAgLyogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmdcbiAgICAgICAqIG9mIHdpbmRvdyBpbmRleCAwIChpbiBwYXJ0aWN1bGFyIHdlIGhhdmUgdG8gYXZvaWQgYSBtYXRjaFxuICAgICAgICogb2YgdGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLlxuICAgICAgICovXG4gICAgICBzLm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2gocywgaGFzaF9oZWFkKTtcbiAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovXG5cbiAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSA1ICYmXG4gICAgICAgICAocy5zdHJhdGVneSA9PT0gWl9GSUxURVJFRCB8fCAocy5tYXRjaF9sZW5ndGggPT09IE1JTl9NQVRDSCAmJiBzLnN0cnN0YXJ0IC0gcy5tYXRjaF9zdGFydCA+IDQwOTYvKlRPT19GQVIqLykpKSB7XG5cbiAgICAgICAgLyogSWYgcHJldl9tYXRjaCBpcyBhbHNvIE1JTl9NQVRDSCwgbWF0Y2hfc3RhcnQgaXMgZ2FyYmFnZVxuICAgICAgICAgKiBidXQgd2Ugd2lsbCBpZ25vcmUgdGhlIGN1cnJlbnQgbWF0Y2ggYW55d2F5LlxuICAgICAgICAgKi9cbiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuICAgICAgfVxuICAgIH1cbiAgICAvKiBJZiB0aGVyZSB3YXMgYSBtYXRjaCBhdCB0aGUgcHJldmlvdXMgc3RlcCBhbmQgdGhlIGN1cnJlbnRcbiAgICAgKiBtYXRjaCBpcyBub3QgYmV0dGVyLCBvdXRwdXQgdGhlIHByZXZpb3VzIG1hdGNoOlxuICAgICAqL1xuICAgIGlmIChzLnByZXZfbGVuZ3RoID49IE1JTl9NQVRDSCAmJiBzLm1hdGNoX2xlbmd0aCA8PSBzLnByZXZfbGVuZ3RoKSB7XG4gICAgICBtYXhfaW5zZXJ0ID0gcy5zdHJzdGFydCArIHMubG9va2FoZWFkIC0gTUlOX01BVENIO1xuICAgICAgLyogRG8gbm90IGluc2VydCBzdHJpbmdzIGluIGhhc2ggdGFibGUgYmV5b25kIHRoaXMuICovXG5cbiAgICAgIC8vY2hlY2tfbWF0Y2gocywgcy5zdHJzdGFydC0xLCBzLnByZXZfbWF0Y2gsIHMucHJldl9sZW5ndGgpO1xuXG4gICAgICAvKioqX3RyX3RhbGx5X2Rpc3Qocywgcy5zdHJzdGFydCAtIDEgLSBzLnByZXZfbWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgICBzLnByZXZfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOyoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCBzLnN0cnN0YXJ0IC0gMSAtIHMucHJldl9tYXRjaCwgcy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCk7XG4gICAgICAvKiBJbnNlcnQgaW4gaGFzaCB0YWJsZSBhbGwgc3RyaW5ncyB1cCB0byB0aGUgZW5kIG9mIHRoZSBtYXRjaC5cbiAgICAgICAqIHN0cnN0YXJ0LTEgYW5kIHN0cnN0YXJ0IGFyZSBhbHJlYWR5IGluc2VydGVkLiBJZiB0aGVyZSBpcyBub3RcbiAgICAgICAqIGVub3VnaCBsb29rYWhlYWQsIHRoZSBsYXN0IHR3byBzdHJpbmdzIGFyZSBub3QgaW5zZXJ0ZWQgaW5cbiAgICAgICAqIHRoZSBoYXNoIHRhYmxlLlxuICAgICAgICovXG4gICAgICBzLmxvb2thaGVhZCAtPSBzLnByZXZfbGVuZ3RoIC0gMTtcbiAgICAgIHMucHJldl9sZW5ndGggLT0gMjtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKCsrcy5zdHJzdGFydCA8PSBtYXhfaW5zZXJ0KSB7XG4gICAgICAgICAgLyoqKiBJTlNFUlRfU1RSSU5HKHMsIHMuc3Ryc3RhcnQsIGhhc2hfaGVhZCk7ICoqKi9cbiAgICAgICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG4gICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDtcbiAgICAgICAgICAvKioqL1xuICAgICAgICB9XG4gICAgICB9IHdoaWxlICgtLXMucHJldl9sZW5ndGggIT09IDApO1xuICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAwO1xuICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuICAgICAgcy5zdHJzdGFydCsrO1xuXG4gICAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgICAgfVxuICAgICAgICAvKioqL1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChzLm1hdGNoX2F2YWlsYWJsZSkge1xuICAgICAgLyogSWYgdGhlcmUgd2FzIG5vIG1hdGNoIGF0IHRoZSBwcmV2aW91cyBwb3NpdGlvbiwgb3V0cHV0IGFcbiAgICAgICAqIHNpbmdsZSBsaXRlcmFsLiBJZiB0aGVyZSB3YXMgYSBtYXRjaCBidXQgdGhlIGN1cnJlbnQgbWF0Y2hcbiAgICAgICAqIGlzIGxvbmdlciwgdHJ1bmNhdGUgdGhlIHByZXZpb3VzIG1hdGNoIHRvIGEgc2luZ2xlIGxpdGVyYWwuXG4gICAgICAgKi9cbiAgICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0LTFdKSk7XG4gICAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydC0xXSwgYmZsdXNoKTsgKioqL1xuICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7XG5cbiAgICAgIGlmIChiZmx1c2gpIHtcbiAgICAgICAgLyoqKiBGTFVTSF9CTE9DS19PTkxZKHMsIDApICoqKi9cbiAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICAgIC8qKiovXG4gICAgICB9XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLyogVGhlcmUgaXMgbm8gcHJldmlvdXMgbWF0Y2ggdG8gY29tcGFyZSB3aXRoLCB3YWl0IGZvclxuICAgICAgICogdGhlIG5leHQgc3RlcCB0byBkZWNpZGUuXG4gICAgICAgKi9cbiAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMTtcbiAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICAgIHMubG9va2FoZWFkLS07XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChmbHVzaCAhPSBaX05PX0ZMVVNILCBcIm5vIGZsdXNoP1wiKTtcbiAgaWYgKHMubWF0Y2hfYXZhaWxhYmxlKSB7XG4gICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0pKTtcbiAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydC0xXSwgYmZsdXNoKTsgKioqL1xuICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0IC0gMV0pO1xuXG4gICAgcy5tYXRjaF9hdmFpbGFibGUgPSAwO1xuICB9XG4gIHMuaW5zZXJ0ID0gcy5zdHJzdGFydCA8IE1JTl9NQVRDSCAtIDEgPyBzLnN0cnN0YXJ0IDogTUlOX01BVENIIC0gMTtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLmxhc3RfbGl0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG5cbiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGb3IgWl9STEUsIHNpbXBseSBsb29rIGZvciBydW5zIG9mIGJ5dGVzLCBnZW5lcmF0ZSBtYXRjaGVzIG9ubHkgb2YgZGlzdGFuY2VcbiAqIG9uZS4gIERvIG5vdCBtYWludGFpbiBhIGhhc2ggdGFibGUuICAoSXQgd2lsbCBiZSByZWdlbmVyYXRlZCBpZiB0aGlzIHJ1biBvZlxuICogZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gWl9STEUuKVxuICovXG5mdW5jdGlvbiBkZWZsYXRlX3JsZShzLCBmbHVzaCkge1xuICB2YXIgYmZsdXNoOyAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqL1xuICB2YXIgcHJldjsgICAgICAgICAgICAgIC8qIGJ5dGUgYXQgZGlzdGFuY2Ugb25lIHRvIG1hdGNoICovXG4gIHZhciBzY2FuLCBzdHJlbmQ7ICAgICAgLyogc2NhbiBnb2VzIHVwIHRvIHN0cmVuZCBmb3IgbGVuZ3RoIG9mIHJ1biAqL1xuXG4gIHZhciBfd2luID0gcy53aW5kb3c7XG5cbiAgZm9yICg7Oykge1xuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdFxuICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzXG4gICAgICogZm9yIHRoZSBsb25nZXN0IHJ1biwgcGx1cyBvbmUgZm9yIHRoZSB1bnJvbGxlZCBsb29wLlxuICAgICAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA8PSBNQVhfTUFUQ0gpIHtcbiAgICAgIGZpbGxfd2luZG93KHMpO1xuICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7IGJyZWFrOyB9IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgfVxuXG4gICAgLyogU2VlIGhvdyBtYW55IHRpbWVzIHRoZSBwcmV2aW91cyBieXRlIHJlcGVhdHMgKi9cbiAgICBzLm1hdGNoX2xlbmd0aCA9IDA7XG4gICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCAmJiBzLnN0cnN0YXJ0ID4gMCkge1xuICAgICAgc2NhbiA9IHMuc3Ryc3RhcnQgLSAxO1xuICAgICAgcHJldiA9IF93aW5bc2Nhbl07XG4gICAgICBpZiAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0pIHtcbiAgICAgICAgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIC8qanNoaW50IG5vZW1wdHk6ZmFsc2UqL1xuICAgICAgICB9IHdoaWxlIChwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmXG4gICAgICAgICAgICAgICAgIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiZcbiAgICAgICAgICAgICAgICAgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJlxuICAgICAgICAgICAgICAgICBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmXG4gICAgICAgICAgICAgICAgIHNjYW4gPCBzdHJlbmQpO1xuICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTtcbiAgICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoID4gcy5sb29rYWhlYWQpIHtcbiAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IHMubG9va2FoZWFkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL0Fzc2VydChzY2FuIDw9IHMtPndpbmRvdysodUludCkocy0+d2luZG93X3NpemUtMSksIFwid2lsZCBzY2FuXCIpO1xuICAgIH1cblxuICAgIC8qIEVtaXQgbWF0Y2ggaWYgaGF2ZSBydW4gb2YgTUlOX01BVENIIG9yIGxvbmdlciwgZWxzZSBlbWl0IGxpdGVyYWwgKi9cbiAgICBpZiAocy5tYXRjaF9sZW5ndGggPj0gTUlOX01BVENIKSB7XG4gICAgICAvL2NoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQsIHMuc3Ryc3RhcnQgLSAxLCBzLm1hdGNoX2xlbmd0aCk7XG5cbiAgICAgIC8qKiogX3RyX3RhbGx5X2Rpc3QocywgMSwgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gsIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAxLCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7XG5cbiAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoO1xuICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDtcbiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogTm8gbWF0Y2gsIG91dHB1dCBhIGxpdGVyYWwgYnl0ZSAqL1xuICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7XG4gICAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydF0sIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7XG5cbiAgICAgIHMubG9va2FoZWFkLS07XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgfVxuICAgIGlmIChiZmx1c2gpIHtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG4gICAgfVxuICB9XG4gIHMuaW5zZXJ0ID0gMDtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLmxhc3RfbGl0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZvciBaX0hVRkZNQU5fT05MWSwgZG8gbm90IGxvb2sgZm9yIG1hdGNoZXMuICBEbyBub3QgbWFpbnRhaW4gYSBoYXNoIHRhYmxlLlxuICogKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBydW4gb2YgZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gSHVmZm1hbi4pXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVfaHVmZihzLCBmbHVzaCkge1xuICB2YXIgYmZsdXNoOyAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cblxuICBmb3IgKDs7KSB7XG4gICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGxpdGVyYWwgdG8gd3JpdGUuICovXG4gICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrOyAgICAgIC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogT3V0cHV0IGEgbGl0ZXJhbCBieXRlICovXG4gICAgcy5tYXRjaF9sZW5ndGggPSAwO1xuICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpO1xuICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSwgYmZsdXNoKTsgKioqL1xuICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7XG4gICAgcy5sb29rYWhlYWQtLTtcbiAgICBzLnN0cnN0YXJ0Kys7XG4gICAgaWYgKGJmbHVzaCkge1xuICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgLyoqKi9cbiAgICB9XG4gIH1cbiAgcy5pbnNlcnQgPSAwO1xuICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDtcbiAgICB9XG4gICAgLyoqKi9cbiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7XG4gIH1cbiAgaWYgKHMubGFzdF9saXQpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgfVxuICAgIC8qKiovXG4gIH1cbiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7XG59XG5cbi8qIFZhbHVlcyBmb3IgbWF4X2xhenlfbWF0Y2gsIGdvb2RfbWF0Y2ggYW5kIG1heF9jaGFpbl9sZW5ndGgsIGRlcGVuZGluZyBvblxuICogdGhlIGRlc2lyZWQgcGFjayBsZXZlbCAoMC4uOSkuIFRoZSB2YWx1ZXMgZ2l2ZW4gYmVsb3cgaGF2ZSBiZWVuIHR1bmVkIHRvXG4gKiBleGNsdWRlIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2UgZm9yIHBhdGhvbG9naWNhbCBmaWxlcy4gQmV0dGVyIHZhbHVlcyBtYXkgYmVcbiAqIGZvdW5kIGZvciBzcGVjaWZpYyBmaWxlcy5cbiAqL1xuZnVuY3Rpb24gQ29uZmlnKGdvb2RfbGVuZ3RoLCBtYXhfbGF6eSwgbmljZV9sZW5ndGgsIG1heF9jaGFpbiwgZnVuYykge1xuICB0aGlzLmdvb2RfbGVuZ3RoID0gZ29vZF9sZW5ndGg7XG4gIHRoaXMubWF4X2xhenkgPSBtYXhfbGF6eTtcbiAgdGhpcy5uaWNlX2xlbmd0aCA9IG5pY2VfbGVuZ3RoO1xuICB0aGlzLm1heF9jaGFpbiA9IG1heF9jaGFpbjtcbiAgdGhpcy5mdW5jID0gZnVuYztcbn1cblxudmFyIGNvbmZpZ3VyYXRpb25fdGFibGU7XG5cbmNvbmZpZ3VyYXRpb25fdGFibGUgPSBbXG4gIC8qICAgICAgZ29vZCBsYXp5IG5pY2UgY2hhaW4gKi9cbiAgbmV3IENvbmZpZygwLCAwLCAwLCAwLCBkZWZsYXRlX3N0b3JlZCksICAgICAgICAgIC8qIDAgc3RvcmUgb25seSAqL1xuICBuZXcgQ29uZmlnKDQsIDQsIDgsIDQsIGRlZmxhdGVfZmFzdCksICAgICAgICAgICAgLyogMSBtYXggc3BlZWQsIG5vIGxhenkgbWF0Y2hlcyAqL1xuICBuZXcgQ29uZmlnKDQsIDUsIDE2LCA4LCBkZWZsYXRlX2Zhc3QpLCAgICAgICAgICAgLyogMiAqL1xuICBuZXcgQ29uZmlnKDQsIDYsIDMyLCAzMiwgZGVmbGF0ZV9mYXN0KSwgICAgICAgICAgLyogMyAqL1xuXG4gIG5ldyBDb25maWcoNCwgNCwgMTYsIDE2LCBkZWZsYXRlX3Nsb3cpLCAgICAgICAgICAvKiA0IGxhenkgbWF0Y2hlcyAqL1xuICBuZXcgQ29uZmlnKDgsIDE2LCAzMiwgMzIsIGRlZmxhdGVfc2xvdyksICAgICAgICAgLyogNSAqL1xuICBuZXcgQ29uZmlnKDgsIDE2LCAxMjgsIDEyOCwgZGVmbGF0ZV9zbG93KSwgICAgICAgLyogNiAqL1xuICBuZXcgQ29uZmlnKDgsIDMyLCAxMjgsIDI1NiwgZGVmbGF0ZV9zbG93KSwgICAgICAgLyogNyAqL1xuICBuZXcgQ29uZmlnKDMyLCAxMjgsIDI1OCwgMTAyNCwgZGVmbGF0ZV9zbG93KSwgICAgLyogOCAqL1xuICBuZXcgQ29uZmlnKDMyLCAyNTgsIDI1OCwgNDA5NiwgZGVmbGF0ZV9zbG93KSAgICAgLyogOSBtYXggY29tcHJlc3Npb24gKi9cbl07XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSBcImxvbmdlc3QgbWF0Y2hcIiByb3V0aW5lcyBmb3IgYSBuZXcgemxpYiBzdHJlYW1cbiAqL1xuZnVuY3Rpb24gbG1faW5pdChzKSB7XG4gIHMud2luZG93X3NpemUgPSAyICogcy53X3NpemU7XG5cbiAgLyoqKiBDTEVBUl9IQVNIKHMpOyAqKiovXG4gIHplcm8ocy5oZWFkKTsgLy8gRmlsbCB3aXRoIE5JTCAoPSAwKTtcblxuICAvKiBTZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOlxuICAgKi9cbiAgcy5tYXhfbGF6eV9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2xhenk7XG4gIHMuZ29vZF9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZ29vZF9sZW5ndGg7XG4gIHMubmljZV9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubmljZV9sZW5ndGg7XG4gIHMubWF4X2NoYWluX2xlbmd0aCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2NoYWluO1xuXG4gIHMuc3Ryc3RhcnQgPSAwO1xuICBzLmJsb2NrX3N0YXJ0ID0gMDtcbiAgcy5sb29rYWhlYWQgPSAwO1xuICBzLmluc2VydCA9IDA7XG4gIHMubWF0Y2hfbGVuZ3RoID0gcy5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7XG4gIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgcy5pbnNfaCA9IDA7XG59XG5cblxuZnVuY3Rpb24gRGVmbGF0ZVN0YXRlKCkge1xuICB0aGlzLnN0cm0gPSBudWxsOyAgICAgICAgICAgIC8qIHBvaW50ZXIgYmFjayB0byB0aGlzIHpsaWIgc3RyZWFtICovXG4gIHRoaXMuc3RhdHVzID0gMDsgICAgICAgICAgICAvKiBhcyB0aGUgbmFtZSBpbXBsaWVzICovXG4gIHRoaXMucGVuZGluZ19idWYgPSBudWxsOyAgICAgIC8qIG91dHB1dCBzdGlsbCBwZW5kaW5nICovXG4gIHRoaXMucGVuZGluZ19idWZfc2l6ZSA9IDA7ICAvKiBzaXplIG9mIHBlbmRpbmdfYnVmICovXG4gIHRoaXMucGVuZGluZ19vdXQgPSAwOyAgICAgICAvKiBuZXh0IHBlbmRpbmcgYnl0ZSB0byBvdXRwdXQgdG8gdGhlIHN0cmVhbSAqL1xuICB0aGlzLnBlbmRpbmcgPSAwOyAgICAgICAgICAgLyogbmIgb2YgYnl0ZXMgaW4gdGhlIHBlbmRpbmcgYnVmZmVyICovXG4gIHRoaXMud3JhcCA9IDA7ICAgICAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwICovXG4gIHRoaXMuZ3poZWFkID0gbnVsbDsgICAgICAgICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqL1xuICB0aGlzLmd6aW5kZXggPSAwOyAgICAgICAgICAgLyogd2hlcmUgaW4gZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQgKi9cbiAgdGhpcy5tZXRob2QgPSBaX0RFRkxBVEVEOyAvKiBjYW4gb25seSBiZSBERUZMQVRFRCAqL1xuICB0aGlzLmxhc3RfZmx1c2ggPSAtMTsgICAvKiB2YWx1ZSBvZiBmbHVzaCBwYXJhbSBmb3IgcHJldmlvdXMgZGVmbGF0ZSBjYWxsICovXG5cbiAgdGhpcy53X3NpemUgPSAwOyAgLyogTFo3NyB3aW5kb3cgc2l6ZSAoMzJLIGJ5IGRlZmF1bHQpICovXG4gIHRoaXMud19iaXRzID0gMDsgIC8qIGxvZzIod19zaXplKSAgKDguLjE2KSAqL1xuICB0aGlzLndfbWFzayA9IDA7ICAvKiB3X3NpemUgLSAxICovXG5cbiAgdGhpcy53aW5kb3cgPSBudWxsO1xuICAvKiBTbGlkaW5nIHdpbmRvdy4gSW5wdXQgYnl0ZXMgYXJlIHJlYWQgaW50byB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIHdpbmRvdyxcbiAgICogYW5kIG1vdmUgdG8gdGhlIGZpcnN0IGhhbGYgbGF0ZXIgdG8ga2VlcCBhIGRpY3Rpb25hcnkgb2YgYXQgbGVhc3Qgd1NpemVcbiAgICogYnl0ZXMuIFdpdGggdGhpcyBvcmdhbml6YXRpb24sIG1hdGNoZXMgYXJlIGxpbWl0ZWQgdG8gYSBkaXN0YW5jZSBvZlxuICAgKiB3U2l6ZS1NQVhfTUFUQ0ggYnl0ZXMsIGJ1dCB0aGlzIGVuc3VyZXMgdGhhdCBJTyBpcyBhbHdheXNcbiAgICogcGVyZm9ybWVkIHdpdGggYSBsZW5ndGggbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUuXG4gICAqL1xuXG4gIHRoaXMud2luZG93X3NpemUgPSAwO1xuICAvKiBBY3R1YWwgc2l6ZSBvZiB3aW5kb3c6IDIqd1NpemUsIGV4Y2VwdCB3aGVuIHRoZSB1c2VyIGlucHV0IGJ1ZmZlclxuICAgKiBpcyBkaXJlY3RseSB1c2VkIGFzIHNsaWRpbmcgd2luZG93LlxuICAgKi9cblxuICB0aGlzLnByZXYgPSBudWxsO1xuICAvKiBMaW5rIHRvIG9sZGVyIHN0cmluZyB3aXRoIHNhbWUgaGFzaCBpbmRleC4gVG8gbGltaXQgdGhlIHNpemUgb2YgdGhpc1xuICAgKiBhcnJheSB0byA2NEssIHRoaXMgbGluayBpcyBtYWludGFpbmVkIG9ubHkgZm9yIHRoZSBsYXN0IDMySyBzdHJpbmdzLlxuICAgKiBBbiBpbmRleCBpbiB0aGlzIGFycmF5IGlzIHRodXMgYSB3aW5kb3cgaW5kZXggbW9kdWxvIDMySy5cbiAgICovXG5cbiAgdGhpcy5oZWFkID0gbnVsbDsgICAvKiBIZWFkcyBvZiB0aGUgaGFzaCBjaGFpbnMgb3IgTklMLiAqL1xuXG4gIHRoaXMuaW5zX2ggPSAwOyAgICAgICAvKiBoYXNoIGluZGV4IG9mIHN0cmluZyB0byBiZSBpbnNlcnRlZCAqL1xuICB0aGlzLmhhc2hfc2l6ZSA9IDA7ICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIGhhc2ggdGFibGUgKi9cbiAgdGhpcy5oYXNoX2JpdHMgPSAwOyAgIC8qIGxvZzIoaGFzaF9zaXplKSAqL1xuICB0aGlzLmhhc2hfbWFzayA9IDA7ICAgLyogaGFzaF9zaXplLTEgKi9cblxuICB0aGlzLmhhc2hfc2hpZnQgPSAwO1xuICAvKiBOdW1iZXIgb2YgYml0cyBieSB3aGljaCBpbnNfaCBtdXN0IGJlIHNoaWZ0ZWQgYXQgZWFjaCBpbnB1dFxuICAgKiBzdGVwLiBJdCBtdXN0IGJlIHN1Y2ggdGhhdCBhZnRlciBNSU5fTUFUQ0ggc3RlcHMsIHRoZSBvbGRlc3RcbiAgICogYnl0ZSBubyBsb25nZXIgdGFrZXMgcGFydCBpbiB0aGUgaGFzaCBrZXksIHRoYXQgaXM6XG4gICAqICAgaGFzaF9zaGlmdCAqIE1JTl9NQVRDSCA+PSBoYXNoX2JpdHNcbiAgICovXG5cbiAgdGhpcy5ibG9ja19zdGFydCA9IDA7XG4gIC8qIFdpbmRvdyBwb3NpdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IG91dHB1dCBibG9jay4gR2V0c1xuICAgKiBuZWdhdGl2ZSB3aGVuIHRoZSB3aW5kb3cgaXMgbW92ZWQgYmFja3dhcmRzLlxuICAgKi9cblxuICB0aGlzLm1hdGNoX2xlbmd0aCA9IDA7ICAgICAgLyogbGVuZ3RoIG9mIGJlc3QgbWF0Y2ggKi9cbiAgdGhpcy5wcmV2X21hdGNoID0gMDsgICAgICAgIC8qIHByZXZpb3VzIG1hdGNoICovXG4gIHRoaXMubWF0Y2hfYXZhaWxhYmxlID0gMDsgICAvKiBzZXQgaWYgcHJldmlvdXMgbWF0Y2ggZXhpc3RzICovXG4gIHRoaXMuc3Ryc3RhcnQgPSAwOyAgICAgICAgICAvKiBzdGFydCBvZiBzdHJpbmcgdG8gaW5zZXJ0ICovXG4gIHRoaXMubWF0Y2hfc3RhcnQgPSAwOyAgICAgICAvKiBzdGFydCBvZiBtYXRjaGluZyBzdHJpbmcgKi9cbiAgdGhpcy5sb29rYWhlYWQgPSAwOyAgICAgICAgIC8qIG51bWJlciBvZiB2YWxpZCBieXRlcyBhaGVhZCBpbiB3aW5kb3cgKi9cblxuICB0aGlzLnByZXZfbGVuZ3RoID0gMDtcbiAgLyogTGVuZ3RoIG9mIHRoZSBiZXN0IG1hdGNoIGF0IHByZXZpb3VzIHN0ZXAuIE1hdGNoZXMgbm90IGdyZWF0ZXIgdGhhbiB0aGlzXG4gICAqIGFyZSBkaXNjYXJkZWQuIFRoaXMgaXMgdXNlZCBpbiB0aGUgbGF6eSBtYXRjaCBldmFsdWF0aW9uLlxuICAgKi9cblxuICB0aGlzLm1heF9jaGFpbl9sZW5ndGggPSAwO1xuICAvKiBUbyBzcGVlZCB1cCBkZWZsYXRpb24sIGhhc2ggY2hhaW5zIGFyZSBuZXZlciBzZWFyY2hlZCBiZXlvbmQgdGhpc1xuICAgKiBsZW5ndGguICBBIGhpZ2hlciBsaW1pdCBpbXByb3ZlcyBjb21wcmVzc2lvbiByYXRpbyBidXQgZGVncmFkZXMgdGhlXG4gICAqIHNwZWVkLlxuICAgKi9cblxuICB0aGlzLm1heF9sYXp5X21hdGNoID0gMDtcbiAgLyogQXR0ZW1wdCB0byBmaW5kIGEgYmV0dGVyIG1hdGNoIG9ubHkgd2hlbiB0aGUgY3VycmVudCBtYXRjaCBpcyBzdHJpY3RseVxuICAgKiBzbWFsbGVyIHRoYW4gdGhpcyB2YWx1ZS4gVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBvbmx5IGZvciBjb21wcmVzc2lvblxuICAgKiBsZXZlbHMgPj0gNC5cbiAgICovXG4gIC8vIFRoYXQncyBhbGlhcyB0byBtYXhfbGF6eV9tYXRjaCwgZG9uJ3QgdXNlIGRpcmVjdGx5XG4gIC8vdGhpcy5tYXhfaW5zZXJ0X2xlbmd0aCA9IDA7XG4gIC8qIEluc2VydCBuZXcgc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSBvbmx5IGlmIHRoZSBtYXRjaCBsZW5ndGggaXMgbm90XG4gICAqIGdyZWF0ZXIgdGhhbiB0aGlzIGxlbmd0aC4gVGhpcyBzYXZlcyB0aW1lIGJ1dCBkZWdyYWRlcyBjb21wcmVzc2lvbi5cbiAgICogbWF4X2luc2VydF9sZW5ndGggaXMgdXNlZCBvbmx5IGZvciBjb21wcmVzc2lvbiBsZXZlbHMgPD0gMy5cbiAgICovXG5cbiAgdGhpcy5sZXZlbCA9IDA7ICAgICAvKiBjb21wcmVzc2lvbiBsZXZlbCAoMS4uOSkgKi9cbiAgdGhpcy5zdHJhdGVneSA9IDA7ICAvKiBmYXZvciBvciBmb3JjZSBIdWZmbWFuIGNvZGluZyovXG5cbiAgdGhpcy5nb29kX21hdGNoID0gMDtcbiAgLyogVXNlIGEgZmFzdGVyIHNlYXJjaCB3aGVuIHRoZSBwcmV2aW91cyBtYXRjaCBpcyBsb25nZXIgdGhhbiB0aGlzICovXG5cbiAgdGhpcy5uaWNlX21hdGNoID0gMDsgLyogU3RvcCBzZWFyY2hpbmcgd2hlbiBjdXJyZW50IG1hdGNoIGV4Y2VlZHMgdGhpcyAqL1xuXG4gICAgICAgICAgICAgIC8qIHVzZWQgYnkgdHJlZXMuYzogKi9cblxuICAvKiBEaWRuJ3QgdXNlIGN0X2RhdGEgdHlwZWRlZiBiZWxvdyB0byBzdXBwcmVzcyBjb21waWxlciB3YXJuaW5nICovXG5cbiAgLy8gc3RydWN0IGN0X2RhdGFfcyBkeW5fbHRyZWVbSEVBUF9TSVpFXTsgICAvKiBsaXRlcmFsIGFuZCBsZW5ndGggdHJlZSAqL1xuICAvLyBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9kdHJlZVsyKkRfQ09ERVMrMV07IC8qIGRpc3RhbmNlIHRyZWUgKi9cbiAgLy8gc3RydWN0IGN0X2RhdGFfcyBibF90cmVlWzIqQkxfQ09ERVMrMV07ICAvKiBIdWZmbWFuIHRyZWUgZm9yIGJpdCBsZW5ndGhzICovXG5cbiAgLy8gVXNlIGZsYXQgYXJyYXkgb2YgRE9VQkxFIHNpemUsIHdpdGggaW50ZXJsZWF2ZWQgZmF0YSxcbiAgLy8gYmVjYXVzZSBKUyBkb2VzIG5vdCBzdXBwb3J0IGVmZmVjdGl2ZVxuICB0aGlzLmR5bl9sdHJlZSAgPSBuZXcgdXRpbHMuQnVmMTYoSEVBUF9TSVpFICogMik7XG4gIHRoaXMuZHluX2R0cmVlICA9IG5ldyB1dGlscy5CdWYxNigoMiAqIERfQ09ERVMgKyAxKSAqIDIpO1xuICB0aGlzLmJsX3RyZWUgICAgPSBuZXcgdXRpbHMuQnVmMTYoKDIgKiBCTF9DT0RFUyArIDEpICogMik7XG4gIHplcm8odGhpcy5keW5fbHRyZWUpO1xuICB6ZXJvKHRoaXMuZHluX2R0cmVlKTtcbiAgemVybyh0aGlzLmJsX3RyZWUpO1xuXG4gIHRoaXMubF9kZXNjICAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBsaXRlcmFsIHRyZWUgKi9cbiAgdGhpcy5kX2Rlc2MgICA9IG51bGw7ICAgICAgICAgLyogZGVzYy4gZm9yIGRpc3RhbmNlIHRyZWUgKi9cbiAgdGhpcy5ibF9kZXNjICA9IG51bGw7ICAgICAgICAgLyogZGVzYy4gZm9yIGJpdCBsZW5ndGggdHJlZSAqL1xuXG4gIC8vdXNoIGJsX2NvdW50W01BWF9CSVRTKzFdO1xuICB0aGlzLmJsX2NvdW50ID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWF9CSVRTICsgMSk7XG4gIC8qIG51bWJlciBvZiBjb2RlcyBhdCBlYWNoIGJpdCBsZW5ndGggZm9yIGFuIG9wdGltYWwgdHJlZSAqL1xuXG4gIC8vaW50IGhlYXBbMipMX0NPREVTKzFdOyAgICAgIC8qIGhlYXAgdXNlZCB0byBidWlsZCB0aGUgSHVmZm1hbiB0cmVlcyAqL1xuICB0aGlzLmhlYXAgPSBuZXcgdXRpbHMuQnVmMTYoMiAqIExfQ09ERVMgKyAxKTsgIC8qIGhlYXAgdXNlZCB0byBidWlsZCB0aGUgSHVmZm1hbiB0cmVlcyAqL1xuICB6ZXJvKHRoaXMuaGVhcCk7XG5cbiAgdGhpcy5oZWFwX2xlbiA9IDA7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoZWFwICovXG4gIHRoaXMuaGVhcF9tYXggPSAwOyAgICAgICAgICAgICAgIC8qIGVsZW1lbnQgb2YgbGFyZ2VzdCBmcmVxdWVuY3kgKi9cbiAgLyogVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsyKm5dIGFuZCBoZWFwWzIqbisxXS4gaGVhcFswXSBpcyBub3QgdXNlZC5cbiAgICogVGhlIHNhbWUgaGVhcCBhcnJheSBpcyB1c2VkIHRvIGJ1aWxkIGFsbCB0cmVlcy5cbiAgICovXG5cbiAgdGhpcy5kZXB0aCA9IG5ldyB1dGlscy5CdWYxNigyICogTF9DT0RFUyArIDEpOyAvL3VjaCBkZXB0aFsyKkxfQ09ERVMrMV07XG4gIHplcm8odGhpcy5kZXB0aCk7XG4gIC8qIERlcHRoIG9mIGVhY2ggc3VidHJlZSB1c2VkIGFzIHRpZSBicmVha2VyIGZvciB0cmVlcyBvZiBlcXVhbCBmcmVxdWVuY3lcbiAgICovXG5cbiAgdGhpcy5sX2J1ZiA9IDA7ICAgICAgICAgIC8qIGJ1ZmZlciBpbmRleCBmb3IgbGl0ZXJhbHMgb3IgbGVuZ3RocyAqL1xuXG4gIHRoaXMubGl0X2J1ZnNpemUgPSAwO1xuICAvKiBTaXplIG9mIG1hdGNoIGJ1ZmZlciBmb3IgbGl0ZXJhbHMvbGVuZ3Rocy4gIFRoZXJlIGFyZSA0IHJlYXNvbnMgZm9yXG4gICAqIGxpbWl0aW5nIGxpdF9idWZzaXplIHRvIDY0SzpcbiAgICogICAtIGZyZXF1ZW5jaWVzIGNhbiBiZSBrZXB0IGluIDE2IGJpdCBjb3VudGVyc1xuICAgKiAgIC0gaWYgY29tcHJlc3Npb24gaXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmaXJzdCBibG9jaywgYWxsIGlucHV0XG4gICAqICAgICBkYXRhIGlzIHN0aWxsIGluIHRoZSB3aW5kb3cgc28gd2UgY2FuIHN0aWxsIGVtaXQgYSBzdG9yZWQgYmxvY2sgZXZlblxuICAgKiAgICAgd2hlbiBpbnB1dCBjb21lcyBmcm9tIHN0YW5kYXJkIGlucHV0LiAgKFRoaXMgY2FuIGFsc28gYmUgZG9uZSBmb3JcbiAgICogICAgIGFsbCBibG9ja3MgaWYgbGl0X2J1ZnNpemUgaXMgbm90IGdyZWF0ZXIgdGhhbiAzMksuKVxuICAgKiAgIC0gaWYgY29tcHJlc3Npb24gaXMgbm90IHN1Y2Nlc3NmdWwgZm9yIGEgZmlsZSBzbWFsbGVyIHRoYW4gNjRLLCB3ZSBjYW5cbiAgICogICAgIGV2ZW4gZW1pdCBhIHN0b3JlZCBmaWxlIGluc3RlYWQgb2YgYSBzdG9yZWQgYmxvY2sgKHNhdmluZyA1IGJ5dGVzKS5cbiAgICogICAgIFRoaXMgaXMgYXBwbGljYWJsZSBvbmx5IGZvciB6aXAgKG5vdCBnemlwIG9yIHpsaWIpLlxuICAgKiAgIC0gY3JlYXRpbmcgbmV3IEh1ZmZtYW4gdHJlZXMgbGVzcyBmcmVxdWVudGx5IG1heSBub3QgcHJvdmlkZSBmYXN0XG4gICAqICAgICBhZGFwdGF0aW9uIHRvIGNoYW5nZXMgaW4gdGhlIGlucHV0IGRhdGEgc3RhdGlzdGljcy4gKFRha2UgZm9yXG4gICAqICAgICBleGFtcGxlIGEgYmluYXJ5IGZpbGUgd2l0aCBwb29ybHkgY29tcHJlc3NpYmxlIGNvZGUgZm9sbG93ZWQgYnlcbiAgICogICAgIGEgaGlnaGx5IGNvbXByZXNzaWJsZSBzdHJpbmcgdGFibGUuKSBTbWFsbGVyIGJ1ZmZlciBzaXplcyBnaXZlXG4gICAqICAgICBmYXN0IGFkYXB0YXRpb24gYnV0IGhhdmUgb2YgY291cnNlIHRoZSBvdmVyaGVhZCBvZiB0cmFuc21pdHRpbmdcbiAgICogICAgIHRyZWVzIG1vcmUgZnJlcXVlbnRseS5cbiAgICogICAtIEkgY2FuJ3QgY291bnQgYWJvdmUgNFxuICAgKi9cblxuICB0aGlzLmxhc3RfbGl0ID0gMDsgICAgICAvKiBydW5uaW5nIGluZGV4IGluIGxfYnVmICovXG5cbiAgdGhpcy5kX2J1ZiA9IDA7XG4gIC8qIEJ1ZmZlciBpbmRleCBmb3IgZGlzdGFuY2VzLiBUbyBzaW1wbGlmeSB0aGUgY29kZSwgZF9idWYgYW5kIGxfYnVmIGhhdmVcbiAgICogdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzLiBUbyB1c2UgZGlmZmVyZW50IGxlbmd0aHMsIGFuIGV4dHJhIGZsYWdcbiAgICogYXJyYXkgd291bGQgYmUgbmVjZXNzYXJ5LlxuICAgKi9cblxuICB0aGlzLm9wdF9sZW4gPSAwOyAgICAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBvcHRpbWFsIHRyZWVzICovXG4gIHRoaXMuc3RhdGljX2xlbiA9IDA7ICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIHN0YXRpYyB0cmVlcyAqL1xuICB0aGlzLm1hdGNoZXMgPSAwOyAgICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4gY3VycmVudCBibG9jayAqL1xuICB0aGlzLmluc2VydCA9IDA7ICAgICAgICAvKiBieXRlcyBhdCBlbmQgb2Ygd2luZG93IGxlZnQgdG8gaW5zZXJ0ICovXG5cblxuICB0aGlzLmJpX2J1ZiA9IDA7XG4gIC8qIE91dHB1dCBidWZmZXIuIGJpdHMgYXJlIGluc2VydGVkIHN0YXJ0aW5nIGF0IHRoZSBib3R0b20gKGxlYXN0XG4gICAqIHNpZ25pZmljYW50IGJpdHMpLlxuICAgKi9cbiAgdGhpcy5iaV92YWxpZCA9IDA7XG4gIC8qIE51bWJlciBvZiB2YWxpZCBiaXRzIGluIGJpX2J1Zi4gIEFsbCBiaXRzIGFib3ZlIHRoZSBsYXN0IHZhbGlkIGJpdFxuICAgKiBhcmUgYWx3YXlzIHplcm8uXG4gICAqL1xuXG4gIC8vIFVzZWQgZm9yIHdpbmRvdyBtZW1vcnkgaW5pdC4gV2Ugc2FmZWx5IGlnbm9yZSBpdCBmb3IgSlMuIFRoYXQgbWFrZXNcbiAgLy8gc2Vuc2Ugb25seSBmb3IgcG9pbnRlcnMgYW5kIG1lbW9yeSBjaGVjayB0b29scy5cbiAgLy90aGlzLmhpZ2hfd2F0ZXIgPSAwO1xuICAvKiBIaWdoIHdhdGVyIG1hcmsgb2Zmc2V0IGluIHdpbmRvdyBmb3IgaW5pdGlhbGl6ZWQgYnl0ZXMgLS0gYnl0ZXMgYWJvdmVcbiAgICogdGhpcyBhcmUgc2V0IHRvIHplcm8gaW4gb3JkZXIgdG8gYXZvaWQgbWVtb3J5IGNoZWNrIHdhcm5pbmdzIHdoZW5cbiAgICogbG9uZ2VzdCBtYXRjaCByb3V0aW5lcyBhY2Nlc3MgYnl0ZXMgcGFzdCB0aGUgaW5wdXQuICBUaGlzIGlzIHRoZW5cbiAgICogdXBkYXRlZCB0byB0aGUgbmV3IGhpZ2ggd2F0ZXIgbWFyay5cbiAgICovXG59XG5cblxuZnVuY3Rpb24gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKSB7XG4gIHZhciBzO1xuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpO1xuICB9XG5cbiAgc3RybS50b3RhbF9pbiA9IHN0cm0udG90YWxfb3V0ID0gMDtcbiAgc3RybS5kYXRhX3R5cGUgPSBaX1VOS05PV047XG5cbiAgcyA9IHN0cm0uc3RhdGU7XG4gIHMucGVuZGluZyA9IDA7XG4gIHMucGVuZGluZ19vdXQgPSAwO1xuXG4gIGlmIChzLndyYXAgPCAwKSB7XG4gICAgcy53cmFwID0gLXMud3JhcDtcbiAgICAvKiB3YXMgbWFkZSBuZWdhdGl2ZSBieSBkZWZsYXRlKC4uLiwgWl9GSU5JU0gpOyAqL1xuICB9XG4gIHMuc3RhdHVzID0gKHMud3JhcCA/IElOSVRfU1RBVEUgOiBCVVNZX1NUQVRFKTtcbiAgc3RybS5hZGxlciA9IChzLndyYXAgPT09IDIpID9cbiAgICAwICAvLyBjcmMzMigwLCBaX05VTEwsIDApXG4gIDpcbiAgICAxOyAvLyBhZGxlcjMyKDAsIFpfTlVMTCwgMClcbiAgcy5sYXN0X2ZsdXNoID0gWl9OT19GTFVTSDtcbiAgdHJlZXMuX3RyX2luaXQocyk7XG4gIHJldHVybiBaX09LO1xufVxuXG5cbmZ1bmN0aW9uIGRlZmxhdGVSZXNldChzdHJtKSB7XG4gIHZhciByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pO1xuICBpZiAocmV0ID09PSBaX09LKSB7XG4gICAgbG1faW5pdChzdHJtLnN0YXRlKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5cbmZ1bmN0aW9uIGRlZmxhdGVTZXRIZWFkZXIoc3RybSwgaGVhZCkge1xuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIGlmIChzdHJtLnN0YXRlLndyYXAgIT09IDIpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIHN0cm0uc3RhdGUuZ3poZWFkID0gaGVhZDtcbiAgcmV0dXJuIFpfT0s7XG59XG5cblxuZnVuY3Rpb24gZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSkge1xuICBpZiAoIXN0cm0pIHsgLy8gPT09IFpfTlVMTFxuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuICB2YXIgd3JhcCA9IDE7XG5cbiAgaWYgKGxldmVsID09PSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pIHtcbiAgICBsZXZlbCA9IDY7XG4gIH1cblxuICBpZiAod2luZG93Qml0cyA8IDApIHsgLyogc3VwcHJlc3MgemxpYiB3cmFwcGVyICovXG4gICAgd3JhcCA9IDA7XG4gICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzO1xuICB9XG5cbiAgZWxzZSBpZiAod2luZG93Qml0cyA+IDE1KSB7XG4gICAgd3JhcCA9IDI7ICAgICAgICAgICAvKiB3cml0ZSBnemlwIHdyYXBwZXIgaW5zdGVhZCAqL1xuICAgIHdpbmRvd0JpdHMgLT0gMTY7XG4gIH1cblxuXG4gIGlmIChtZW1MZXZlbCA8IDEgfHwgbWVtTGV2ZWwgPiBNQVhfTUVNX0xFVkVMIHx8IG1ldGhvZCAhPT0gWl9ERUZMQVRFRCB8fFxuICAgIHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSB8fCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8XG4gICAgc3RyYXRlZ3kgPCAwIHx8IHN0cmF0ZWd5ID4gWl9GSVhFRCkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpO1xuICB9XG5cblxuICBpZiAod2luZG93Qml0cyA9PT0gOCkge1xuICAgIHdpbmRvd0JpdHMgPSA5O1xuICB9XG4gIC8qIHVudGlsIDI1Ni1ieXRlIHdpbmRvdyBidWcgZml4ZWQgKi9cblxuICB2YXIgcyA9IG5ldyBEZWZsYXRlU3RhdGUoKTtcblxuICBzdHJtLnN0YXRlID0gcztcbiAgcy5zdHJtID0gc3RybTtcblxuICBzLndyYXAgPSB3cmFwO1xuICBzLmd6aGVhZCA9IG51bGw7XG4gIHMud19iaXRzID0gd2luZG93Qml0cztcbiAgcy53X3NpemUgPSAxIDw8IHMud19iaXRzO1xuICBzLndfbWFzayA9IHMud19zaXplIC0gMTtcblxuICBzLmhhc2hfYml0cyA9IG1lbUxldmVsICsgNztcbiAgcy5oYXNoX3NpemUgPSAxIDw8IHMuaGFzaF9iaXRzO1xuICBzLmhhc2hfbWFzayA9IHMuaGFzaF9zaXplIC0gMTtcbiAgcy5oYXNoX3NoaWZ0ID0gfn4oKHMuaGFzaF9iaXRzICsgTUlOX01BVENIIC0gMSkgLyBNSU5fTUFUQ0gpO1xuXG4gIHMud2luZG93ID0gbmV3IHV0aWxzLkJ1Zjgocy53X3NpemUgKiAyKTtcbiAgcy5oZWFkID0gbmV3IHV0aWxzLkJ1ZjE2KHMuaGFzaF9zaXplKTtcbiAgcy5wcmV2ID0gbmV3IHV0aWxzLkJ1ZjE2KHMud19zaXplKTtcblxuICAvLyBEb24ndCBuZWVkIG1lbSBpbml0IG1hZ2ljIGZvciBKUy5cbiAgLy9zLmhpZ2hfd2F0ZXIgPSAwOyAgLyogbm90aGluZyB3cml0dGVuIHRvIHMtPndpbmRvdyB5ZXQgKi9cblxuICBzLmxpdF9idWZzaXplID0gMSA8PCAobWVtTGV2ZWwgKyA2KTsgLyogMTZLIGVsZW1lbnRzIGJ5IGRlZmF1bHQgKi9cblxuICBzLnBlbmRpbmdfYnVmX3NpemUgPSBzLmxpdF9idWZzaXplICogNDtcblxuICAvL292ZXJsYXkgPSAodXNoZiAqKSBaQUxMT0Moc3RybSwgcy0+bGl0X2J1ZnNpemUsIHNpemVvZih1c2gpKzIpO1xuICAvL3MtPnBlbmRpbmdfYnVmID0gKHVjaGYgKikgb3ZlcmxheTtcbiAgcy5wZW5kaW5nX2J1ZiA9IG5ldyB1dGlscy5CdWY4KHMucGVuZGluZ19idWZfc2l6ZSk7XG5cbiAgLy8gSXQgaXMgb2Zmc2V0IGZyb20gYHMucGVuZGluZ19idWZgIChzaXplIGlzIGBzLmxpdF9idWZzaXplICogMmApXG4gIC8vcy0+ZF9idWYgPSBvdmVybGF5ICsgcy0+bGl0X2J1ZnNpemUvc2l6ZW9mKHVzaCk7XG4gIHMuZF9idWYgPSAxICogcy5saXRfYnVmc2l6ZTtcblxuICAvL3MtPmxfYnVmID0gcy0+cGVuZGluZ19idWYgKyAoMStzaXplb2YodXNoKSkqcy0+bGl0X2J1ZnNpemU7XG4gIHMubF9idWYgPSAoMSArIDIpICogcy5saXRfYnVmc2l6ZTtcblxuICBzLmxldmVsID0gbGV2ZWw7XG4gIHMuc3RyYXRlZ3kgPSBzdHJhdGVneTtcbiAgcy5tZXRob2QgPSBtZXRob2Q7XG5cbiAgcmV0dXJuIGRlZmxhdGVSZXNldChzdHJtKTtcbn1cblxuZnVuY3Rpb24gZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpIHtcbiAgcmV0dXJuIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgWl9ERUZMQVRFRCwgTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBaX0RFRkFVTFRfU1RSQVRFR1kpO1xufVxuXG5cbmZ1bmN0aW9uIGRlZmxhdGUoc3RybSwgZmx1c2gpIHtcbiAgdmFyIG9sZF9mbHVzaCwgcztcbiAgdmFyIGJlZywgdmFsOyAvLyBmb3IgZ3ppcCBoZWFkZXIgd3JpdGUgb25seVxuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSB8fFxuICAgIGZsdXNoID4gWl9CTE9DSyB8fCBmbHVzaCA8IDApIHtcbiAgICByZXR1cm4gc3RybSA/IGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUikgOiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIHMgPSBzdHJtLnN0YXRlO1xuXG4gIGlmICghc3RybS5vdXRwdXQgfHxcbiAgICAgICghc3RybS5pbnB1dCAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSB8fFxuICAgICAgKHMuc3RhdHVzID09PSBGSU5JU0hfU1RBVEUgJiYgZmx1c2ggIT09IFpfRklOSVNIKSkge1xuICAgIHJldHVybiBlcnIoc3RybSwgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSA/IFpfQlVGX0VSUk9SIDogWl9TVFJFQU1fRVJST1IpO1xuICB9XG5cbiAgcy5zdHJtID0gc3RybTsgLyoganVzdCBpbiBjYXNlICovXG4gIG9sZF9mbHVzaCA9IHMubGFzdF9mbHVzaDtcbiAgcy5sYXN0X2ZsdXNoID0gZmx1c2g7XG5cbiAgLyogV3JpdGUgdGhlIGhlYWRlciAqL1xuICBpZiAocy5zdGF0dXMgPT09IElOSVRfU1RBVEUpIHtcblxuICAgIGlmIChzLndyYXAgPT09IDIpIHsgLy8gR1pJUCBoZWFkZXJcbiAgICAgIHN0cm0uYWRsZXIgPSAwOyAgLy9jcmMzMigwTCwgWl9OVUxMLCAwKTtcbiAgICAgIHB1dF9ieXRlKHMsIDMxKTtcbiAgICAgIHB1dF9ieXRlKHMsIDEzOSk7XG4gICAgICBwdXRfYnl0ZShzLCA4KTtcbiAgICAgIGlmICghcy5nemhlYWQpIHsgLy8gcy0+Z3poZWFkID09IFpfTlVMTFxuICAgICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIHMubGV2ZWwgPT09IDkgPyAyIDpcbiAgICAgICAgICAgICAgICAgICAgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgP1xuICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTtcbiAgICAgICAgcHV0X2J5dGUocywgT1NfQ09ERSk7XG4gICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGV4dCA/IDEgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgIChzLmd6aGVhZC5oY3JjID8gMiA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgKCFzLmd6aGVhZC5leHRyYSA/IDAgOiA0KSArXG4gICAgICAgICAgICAgICAgICAgICghcy5nemhlYWQubmFtZSA/IDAgOiA4KSArXG4gICAgICAgICAgICAgICAgICAgICghcy5nemhlYWQuY29tbWVudCA/IDAgOiAxNilcbiAgICAgICAgKTtcbiAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGltZSA+PiA4KSAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGltZSA+PiAxNikgJiAweGZmKTtcbiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gMjQpICYgMHhmZik7XG4gICAgICAgIHB1dF9ieXRlKHMsIHMubGV2ZWwgPT09IDkgPyAyIDpcbiAgICAgICAgICAgICAgICAgICAgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgP1xuICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTtcbiAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQub3MgJiAweGZmKTtcbiAgICAgICAgaWYgKHMuZ3poZWFkLmV4dHJhICYmIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkge1xuICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDB4ZmYpO1xuICAgICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC5leHRyYS5sZW5ndGggPj4gOCkgJiAweGZmKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocy5nemhlYWQuaGNyYykge1xuICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcsIDApO1xuICAgICAgICB9XG4gICAgICAgIHMuZ3ppbmRleCA9IDA7XG4gICAgICAgIHMuc3RhdHVzID0gRVhUUkFfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgLy8gREVGTEFURSBoZWFkZXJcbiAgICB7XG4gICAgICB2YXIgaGVhZGVyID0gKFpfREVGTEFURUQgKyAoKHMud19iaXRzIC0gOCkgPDwgNCkpIDw8IDg7XG4gICAgICB2YXIgbGV2ZWxfZmxhZ3MgPSAtMTtcblxuICAgICAgaWYgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIpIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAwO1xuICAgICAgfSBlbHNlIGlmIChzLmxldmVsIDwgNikge1xuICAgICAgICBsZXZlbF9mbGFncyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHMubGV2ZWwgPT09IDYpIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAzO1xuICAgICAgfVxuICAgICAgaGVhZGVyIHw9IChsZXZlbF9mbGFncyA8PCA2KTtcbiAgICAgIGlmIChzLnN0cnN0YXJ0ICE9PSAwKSB7IGhlYWRlciB8PSBQUkVTRVRfRElDVDsgfVxuICAgICAgaGVhZGVyICs9IDMxIC0gKGhlYWRlciAlIDMxKTtcblxuICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTtcblxuICAgICAgLyogU2F2ZSB0aGUgYWRsZXIzMiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnk6ICovXG4gICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkge1xuICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7XG4gICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiAweGZmZmYpO1xuICAgICAgfVxuICAgICAgc3RybS5hZGxlciA9IDE7IC8vIGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7XG4gICAgfVxuICB9XG5cbi8vI2lmZGVmIEdaSVBcbiAgaWYgKHMuc3RhdHVzID09PSBFWFRSQV9TVEFURSkge1xuICAgIGlmIChzLmd6aGVhZC5leHRyYS8qICE9IFpfTlVMTCovKSB7XG4gICAgICBiZWcgPSBzLnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovXG5cbiAgICAgIHdoaWxlIChzLmd6aW5kZXggPCAocy5nemhlYWQuZXh0cmEubGVuZ3RoICYgMHhmZmZmKSkge1xuICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICAgICAgYmVnID0gcy5wZW5kaW5nO1xuICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhW3MuZ3ppbmRleF0gJiAweGZmKTtcbiAgICAgICAgcy5nemluZGV4Kys7XG4gICAgICB9XG4gICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmd6aW5kZXggPT09IHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkge1xuICAgICAgICBzLmd6aW5kZXggPSAwO1xuICAgICAgICBzLnN0YXR1cyA9IE5BTUVfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFO1xuICAgIH1cbiAgfVxuICBpZiAocy5zdGF0dXMgPT09IE5BTUVfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQubmFtZS8qICE9IFpfTlVMTCovKSB7XG4gICAgICBiZWcgPSBzLnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovXG4gICAgICAvL2ludCB2YWw7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgICAgICAgIGJlZyA9IHMucGVuZGluZztcbiAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICAgIHZhbCA9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSlMgc3BlY2lmaWM6IGxpdHRsZSBtYWdpYyB0byBhZGQgemVybyB0ZXJtaW5hdG9yIHRvIGVuZCBvZiBzdHJpbmdcbiAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLm5hbWUubGVuZ3RoKSB7XG4gICAgICAgICAgdmFsID0gcy5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDB4ZmY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgfVxuICAgICAgICBwdXRfYnl0ZShzLCB2YWwpO1xuICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTtcblxuICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsID09PSAwKSB7XG4gICAgICAgIHMuZ3ppbmRleCA9IDA7XG4gICAgICAgIHMuc3RhdHVzID0gQ09NTUVOVF9TVEFURTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzLnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7XG4gICAgfVxuICB9XG4gIGlmIChzLnN0YXR1cyA9PT0gQ09NTUVOVF9TVEFURSkge1xuICAgIGlmIChzLmd6aGVhZC5jb21tZW50LyogIT0gWl9OVUxMKi8pIHtcbiAgICAgIGJlZyA9IHMucGVuZGluZzsgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi9cbiAgICAgIC8vaW50IHZhbDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICAgICAgYmVnID0gcy5wZW5kaW5nO1xuICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgICAgdmFsID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBKUyBzcGVjaWZpYzogbGl0dGxlIG1hZ2ljIHRvIGFkZCB6ZXJvIHRlcm1pbmF0b3IgdG8gZW5kIG9mIHN0cmluZ1xuICAgICAgICBpZiAocy5nemluZGV4IDwgcy5nemhlYWQuY29tbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICB2YWwgPSBzLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMHhmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7XG4gICAgICB9IHdoaWxlICh2YWwgIT09IDApO1xuXG4gICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWwgPT09IDApIHtcbiAgICAgICAgcy5zdGF0dXMgPSBIQ1JDX1NUQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTtcbiAgICB9XG4gIH1cbiAgaWYgKHMuc3RhdHVzID09PSBIQ1JDX1NUQVRFKSB7XG4gICAgaWYgKHMuZ3poZWFkLmhjcmMpIHtcbiAgICAgIGlmIChzLnBlbmRpbmcgKyAyID4gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICB9XG4gICAgICBpZiAocy5wZW5kaW5nICsgMiA8PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAoc3RybS5hZGxlciA+PiA4KSAmIDB4ZmYpO1xuICAgICAgICBzdHJtLmFkbGVyID0gMDsgLy9jcmMzMigwTCwgWl9OVUxMLCAwKTtcbiAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTtcbiAgICB9XG4gIH1cbi8vI2VuZGlmXG5cbiAgLyogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZSAqL1xuICBpZiAocy5wZW5kaW5nICE9PSAwKSB7XG4gICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIC8qIFNpbmNlIGF2YWlsX291dCBpcyAwLCBkZWZsYXRlIHdpbGwgYmUgY2FsbGVkIGFnYWluIHdpdGhcbiAgICAgICAqIG1vcmUgb3V0cHV0IHNwYWNlLCBidXQgcG9zc2libHkgd2l0aCBib3RoIHBlbmRpbmcgYW5kXG4gICAgICAgKiBhdmFpbF9pbiBlcXVhbCB0byB6ZXJvLiBUaGVyZSB3b24ndCBiZSBhbnl0aGluZyB0byBkbyxcbiAgICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBhbiBlcnJvciBzaXR1YXRpb24gc28gbWFrZSBzdXJlIHdlXG4gICAgICAgKiByZXR1cm4gT0sgaW5zdGVhZCBvZiBCVUZfRVJST1IgYXQgbmV4dCBjYWxsIG9mIGRlZmxhdGU6XG4gICAgICAgKi9cbiAgICAgIHMubGFzdF9mbHVzaCA9IC0xO1xuICAgICAgcmV0dXJuIFpfT0s7XG4gICAgfVxuXG4gICAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNvbWV0aGluZyB0byBkbyBhbmQgYXZvaWQgZHVwbGljYXRlIGNvbnNlY3V0aXZlXG4gICAgICogZmx1c2hlcy4gRm9yIHJlcGVhdGVkIGFuZCB1c2VsZXNzIGNhbGxzIHdpdGggWl9GSU5JU0gsIHdlIGtlZXBcbiAgICAgKiByZXR1cm5pbmcgWl9TVFJFQU1fRU5EIGluc3RlYWQgb2YgWl9CVUZfRVJST1IuXG4gICAgICovXG4gIH0gZWxzZSBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiByYW5rKGZsdXNoKSA8PSByYW5rKG9sZF9mbHVzaCkgJiZcbiAgICBmbHVzaCAhPT0gWl9GSU5JU0gpIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTtcbiAgfVxuXG4gIC8qIFVzZXIgbXVzdCBub3QgcHJvdmlkZSBtb3JlIGlucHV0IGFmdGVyIHRoZSBmaXJzdCBGSU5JU0g6ICovXG4gIGlmIChzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIHN0cm0uYXZhaWxfaW4gIT09IDApIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTtcbiAgfVxuXG4gIC8qIFN0YXJ0IGEgbmV3IGJsb2NrIG9yIGNvbnRpbnVlIHRoZSBjdXJyZW50IG9uZS5cbiAgICovXG4gIGlmIChzdHJtLmF2YWlsX2luICE9PSAwIHx8IHMubG9va2FoZWFkICE9PSAwIHx8XG4gICAgKGZsdXNoICE9PSBaX05PX0ZMVVNIICYmIHMuc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpKSB7XG4gICAgdmFyIGJzdGF0ZSA9IChzLnN0cmF0ZWd5ID09PSBaX0hVRkZNQU5fT05MWSkgPyBkZWZsYXRlX2h1ZmYocywgZmx1c2gpIDpcbiAgICAgIChzLnN0cmF0ZWd5ID09PSBaX1JMRSA/IGRlZmxhdGVfcmxlKHMsIGZsdXNoKSA6XG4gICAgICAgIGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZnVuYyhzLCBmbHVzaCkpO1xuXG4gICAgaWYgKGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQgfHwgYnN0YXRlID09PSBCU19GSU5JU0hfRE9ORSkge1xuICAgICAgcy5zdGF0dXMgPSBGSU5JU0hfU1RBVEU7XG4gICAgfVxuICAgIGlmIChic3RhdGUgPT09IEJTX05FRURfTU9SRSB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9TVEFSVEVEKSB7XG4gICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7XG4gICAgICAgIC8qIGF2b2lkIEJVRl9FUlJPUiBuZXh0IGNhbGwsIHNlZSBhYm92ZSAqL1xuICAgICAgfVxuICAgICAgcmV0dXJuIFpfT0s7XG4gICAgICAvKiBJZiBmbHVzaCAhPSBaX05PX0ZMVVNIICYmIGF2YWlsX291dCA9PSAwLCB0aGUgbmV4dCBjYWxsXG4gICAgICAgKiBvZiBkZWZsYXRlIHNob3VsZCB1c2UgdGhlIHNhbWUgZmx1c2ggcGFyYW1ldGVyIHRvIG1ha2Ugc3VyZVxuICAgICAgICogdGhhdCB0aGUgZmx1c2ggaXMgY29tcGxldGUuIFNvIHdlIGRvbid0IGhhdmUgdG8gb3V0cHV0IGFuXG4gICAgICAgKiBlbXB0eSBibG9jayBoZXJlLCB0aGlzIHdpbGwgYmUgZG9uZSBhdCBuZXh0IGNhbGwuIFRoaXMgYWxzb1xuICAgICAgICogZW5zdXJlcyB0aGF0IGZvciBhIHZlcnkgc21hbGwgb3V0cHV0IGJ1ZmZlciwgd2UgZW1pdCBhdCBtb3N0XG4gICAgICAgKiBvbmUgZW1wdHkgYmxvY2suXG4gICAgICAgKi9cbiAgICB9XG4gICAgaWYgKGJzdGF0ZSA9PT0gQlNfQkxPQ0tfRE9ORSkge1xuICAgICAgaWYgKGZsdXNoID09PSBaX1BBUlRJQUxfRkxVU0gpIHtcbiAgICAgICAgdHJlZXMuX3RyX2FsaWduKHMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZmx1c2ggIT09IFpfQkxPQ0spIHsgLyogRlVMTF9GTFVTSCBvciBTWU5DX0ZMVVNIICovXG5cbiAgICAgICAgdHJlZXMuX3RyX3N0b3JlZF9ibG9jayhzLCAwLCAwLCBmYWxzZSk7XG4gICAgICAgIC8qIEZvciBhIGZ1bGwgZmx1c2gsIHRoaXMgZW1wdHkgYmxvY2sgd2lsbCBiZSByZWNvZ25pemVkXG4gICAgICAgICAqIGFzIGEgc3BlY2lhbCBtYXJrZXIgYnkgaW5mbGF0ZV9zeW5jKCkuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfRlVMTF9GTFVTSCkge1xuICAgICAgICAgIC8qKiogQ0xFQVJfSEFTSChzKTsgKioqLyAgICAgICAgICAgICAvKiBmb3JnZXQgaGlzdG9yeSAqL1xuICAgICAgICAgIHplcm8ocy5oZWFkKTsgLy8gRmlsbCB3aXRoIE5JTCAoPSAwKTtcblxuICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICAgICAgcy5zdHJzdGFydCA9IDA7XG4gICAgICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gMDtcbiAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7IC8qIGF2b2lkIEJVRl9FUlJPUiBhdCBuZXh0IGNhbGwsIHNlZSBhYm92ZSAqL1xuICAgICAgICByZXR1cm4gWl9PSztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy9Bc3NlcnQoc3RybS0+YXZhaWxfb3V0ID4gMCwgXCJidWcyXCIpO1xuICAvL2lmIChzdHJtLmF2YWlsX291dCA8PSAwKSB7IHRocm93IG5ldyBFcnJvcihcImJ1ZzJcIik7fVxuXG4gIGlmIChmbHVzaCAhPT0gWl9GSU5JU0gpIHsgcmV0dXJuIFpfT0s7IH1cbiAgaWYgKHMud3JhcCA8PSAwKSB7IHJldHVybiBaX1NUUkVBTV9FTkQ7IH1cblxuICAvKiBXcml0ZSB0aGUgdHJhaWxlciAqL1xuICBpZiAocy53cmFwID09PSAyKSB7XG4gICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDgpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gMTYpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gMjQpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLnRvdGFsX2luID4+IDgpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0udG90YWxfaW4gPj4gMTYpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0udG90YWxfaW4gPj4gMjQpICYgMHhmZik7XG4gIH1cbiAgZWxzZVxuICB7XG4gICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciA+Pj4gMTYpO1xuICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiAweGZmZmYpO1xuICB9XG5cbiAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgLyogSWYgYXZhaWxfb3V0IGlzIHplcm8sIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNhbGwgZGVmbGF0ZSBhZ2FpblxuICAgKiB0byBmbHVzaCB0aGUgcmVzdC5cbiAgICovXG4gIGlmIChzLndyYXAgPiAwKSB7IHMud3JhcCA9IC1zLndyYXA7IH1cbiAgLyogd3JpdGUgdGhlIHRyYWlsZXIgb25seSBvbmNlISAqL1xuICByZXR1cm4gcy5wZW5kaW5nICE9PSAwID8gWl9PSyA6IFpfU1RSRUFNX0VORDtcbn1cblxuZnVuY3Rpb24gZGVmbGF0ZUVuZChzdHJtKSB7XG4gIHZhciBzdGF0dXM7XG5cbiAgaWYgKCFzdHJtLyo9PSBaX05VTEwqLyB8fCAhc3RybS5zdGF0ZS8qPT0gWl9OVUxMKi8pIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICBzdGF0dXMgPSBzdHJtLnN0YXRlLnN0YXR1cztcbiAgaWYgKHN0YXR1cyAhPT0gSU5JVF9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gRVhUUkFfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IE5BTUVfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IENPTU1FTlRfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IEhDUkNfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IEJVU1lfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IEZJTklTSF9TVEFURVxuICApIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKTtcbiAgfVxuXG4gIHN0cm0uc3RhdGUgPSBudWxsO1xuXG4gIHJldHVybiBzdGF0dXMgPT09IEJVU1lfU1RBVEUgPyBlcnIoc3RybSwgWl9EQVRBX0VSUk9SKSA6IFpfT0s7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gYnl0ZVxuICogc2VxdWVuY2Ugd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LlxuICovXG5mdW5jdGlvbiBkZWZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5KSB7XG4gIHZhciBkaWN0TGVuZ3RoID0gZGljdGlvbmFyeS5sZW5ndGg7XG5cbiAgdmFyIHM7XG4gIHZhciBzdHIsIG47XG4gIHZhciB3cmFwO1xuICB2YXIgYXZhaWw7XG4gIHZhciBuZXh0O1xuICB2YXIgaW5wdXQ7XG4gIHZhciB0bXBEaWN0O1xuXG4gIGlmICghc3RybS8qPT0gWl9OVUxMKi8gfHwgIXN0cm0uc3RhdGUvKj09IFpfTlVMTCovKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgcyA9IHN0cm0uc3RhdGU7XG4gIHdyYXAgPSBzLndyYXA7XG5cbiAgaWYgKHdyYXAgPT09IDIgfHwgKHdyYXAgPT09IDEgJiYgcy5zdGF0dXMgIT09IElOSVRfU1RBVEUpIHx8IHMubG9va2FoZWFkKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgLyogd2hlbiB1c2luZyB6bGliIHdyYXBwZXJzLCBjb21wdXRlIEFkbGVyLTMyIGZvciBwcm92aWRlZCBkaWN0aW9uYXJ5ICovXG4gIGlmICh3cmFwID09PSAxKSB7XG4gICAgLyogYWRsZXIzMihzdHJtLT5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7ICovXG4gICAgc3RybS5hZGxlciA9IGFkbGVyMzIoc3RybS5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgMCk7XG4gIH1cblxuICBzLndyYXAgPSAwOyAgIC8qIGF2b2lkIGNvbXB1dGluZyBBZGxlci0zMiBpbiByZWFkX2J1ZiAqL1xuXG4gIC8qIGlmIGRpY3Rpb25hcnkgd291bGQgZmlsbCB3aW5kb3csIGp1c3QgcmVwbGFjZSB0aGUgaGlzdG9yeSAqL1xuICBpZiAoZGljdExlbmd0aCA+PSBzLndfc2l6ZSkge1xuICAgIGlmICh3cmFwID09PSAwKSB7ICAgICAgICAgICAgLyogYWxyZWFkeSBlbXB0eSBvdGhlcndpc2UgKi9cbiAgICAgIC8qKiogQ0xFQVJfSEFTSChzKTsgKioqL1xuICAgICAgemVybyhzLmhlYWQpOyAvLyBGaWxsIHdpdGggTklMICg9IDApO1xuICAgICAgcy5zdHJzdGFydCA9IDA7XG4gICAgICBzLmJsb2NrX3N0YXJ0ID0gMDtcbiAgICAgIHMuaW5zZXJ0ID0gMDtcbiAgICB9XG4gICAgLyogdXNlIHRoZSB0YWlsICovXG4gICAgLy8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnkuc2xpY2UoZGljdExlbmd0aCAtIHMud19zaXplKTtcbiAgICB0bXBEaWN0ID0gbmV3IHV0aWxzLkJ1Zjgocy53X3NpemUpO1xuICAgIHV0aWxzLmFycmF5U2V0KHRtcERpY3QsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGggLSBzLndfc2l6ZSwgcy53X3NpemUsIDApO1xuICAgIGRpY3Rpb25hcnkgPSB0bXBEaWN0O1xuICAgIGRpY3RMZW5ndGggPSBzLndfc2l6ZTtcbiAgfVxuICAvKiBpbnNlcnQgZGljdGlvbmFyeSBpbnRvIHdpbmRvdyBhbmQgaGFzaCAqL1xuICBhdmFpbCA9IHN0cm0uYXZhaWxfaW47XG4gIG5leHQgPSBzdHJtLm5leHRfaW47XG4gIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgc3RybS5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7XG4gIHN0cm0ubmV4dF9pbiA9IDA7XG4gIHN0cm0uaW5wdXQgPSBkaWN0aW9uYXJ5O1xuICBmaWxsX3dpbmRvdyhzKTtcbiAgd2hpbGUgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkge1xuICAgIHN0ciA9IHMuc3Ryc3RhcnQ7XG4gICAgbiA9IHMubG9va2FoZWFkIC0gKE1JTl9NQVRDSCAtIDEpO1xuICAgIGRvIHtcbiAgICAgIC8qIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsgKi9cbiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuXG4gICAgICBzLnByZXZbc3RyICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuXG4gICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzdHI7XG4gICAgICBzdHIrKztcbiAgICB9IHdoaWxlICgtLW4pO1xuICAgIHMuc3Ryc3RhcnQgPSBzdHI7XG4gICAgcy5sb29rYWhlYWQgPSBNSU5fTUFUQ0ggLSAxO1xuICAgIGZpbGxfd2luZG93KHMpO1xuICB9XG4gIHMuc3Ryc3RhcnQgKz0gcy5sb29rYWhlYWQ7XG4gIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0O1xuICBzLmluc2VydCA9IHMubG9va2FoZWFkO1xuICBzLmxvb2thaGVhZCA9IDA7XG4gIHMubWF0Y2hfbGVuZ3RoID0gcy5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7XG4gIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgc3RybS5pbnB1dCA9IGlucHV0O1xuICBzdHJtLmF2YWlsX2luID0gYXZhaWw7XG4gIHMud3JhcCA9IHdyYXA7XG4gIHJldHVybiBaX09LO1xufVxuXG5cbmV4cG9ydHMuZGVmbGF0ZUluaXQgPSBkZWZsYXRlSW5pdDtcbmV4cG9ydHMuZGVmbGF0ZUluaXQyID0gZGVmbGF0ZUluaXQyO1xuZXhwb3J0cy5kZWZsYXRlUmVzZXQgPSBkZWZsYXRlUmVzZXQ7XG5leHBvcnRzLmRlZmxhdGVSZXNldEtlZXAgPSBkZWZsYXRlUmVzZXRLZWVwO1xuZXhwb3J0cy5kZWZsYXRlU2V0SGVhZGVyID0gZGVmbGF0ZVNldEhlYWRlcjtcbmV4cG9ydHMuZGVmbGF0ZSA9IGRlZmxhdGU7XG5leHBvcnRzLmRlZmxhdGVFbmQgPSBkZWZsYXRlRW5kO1xuZXhwb3J0cy5kZWZsYXRlU2V0RGljdGlvbmFyeSA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5O1xuZXhwb3J0cy5kZWZsYXRlSW5mbyA9ICdwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpJztcblxuLyogTm90IGltcGxlbWVudGVkXG5leHBvcnRzLmRlZmxhdGVCb3VuZCA9IGRlZmxhdGVCb3VuZDtcbmV4cG9ydHMuZGVmbGF0ZUNvcHkgPSBkZWZsYXRlQ29weTtcbmV4cG9ydHMuZGVmbGF0ZVBhcmFtcyA9IGRlZmxhdGVQYXJhbXM7XG5leHBvcnRzLmRlZmxhdGVQZW5kaW5nID0gZGVmbGF0ZVBlbmRpbmc7XG5leHBvcnRzLmRlZmxhdGVQcmltZSA9IGRlZmxhdGVQcmltZTtcbmV4cG9ydHMuZGVmbGF0ZVR1bmUgPSBkZWZsYXRlVHVuZTtcbiovXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDQyNjQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxuLy8gU2VlIHN0YXRlIGRlZnMgZnJvbSBpbmZsYXRlLmpzXG52YXIgQkFEID0gMzA7ICAgICAgIC8qIGdvdCBhIGRhdGEgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi9cbnZhciBUWVBFID0gMTI7ICAgICAgLyogaTogd2FpdGluZyBmb3IgdHlwZSBiaXRzLCBpbmNsdWRpbmcgbGFzdC1mbGFnIGJpdCAqL1xuXG4vKlxuICAgRGVjb2RlIGxpdGVyYWwsIGxlbmd0aCwgYW5kIGRpc3RhbmNlIGNvZGVzIGFuZCB3cml0ZSBvdXQgdGhlIHJlc3VsdGluZ1xuICAgbGl0ZXJhbCBhbmQgbWF0Y2ggYnl0ZXMgdW50aWwgZWl0aGVyIG5vdCBlbm91Z2ggaW5wdXQgb3Igb3V0cHV0IGlzXG4gICBhdmFpbGFibGUsIGFuIGVuZC1vZi1ibG9jayBpcyBlbmNvdW50ZXJlZCwgb3IgYSBkYXRhIGVycm9yIGlzIGVuY291bnRlcmVkLlxuICAgV2hlbiBsYXJnZSBlbm91Z2ggaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGFyZSBzdXBwbGllZCB0byBpbmZsYXRlKCksIGZvclxuICAgZXhhbXBsZSwgYSAxNksgaW5wdXQgYnVmZmVyIGFuZCBhIDY0SyBvdXRwdXQgYnVmZmVyLCBtb3JlIHRoYW4gOTUlIG9mIHRoZVxuICAgaW5mbGF0ZSBleGVjdXRpb24gdGltZSBpcyBzcGVudCBpbiB0aGlzIHJvdXRpbmUuXG5cbiAgIEVudHJ5IGFzc3VtcHRpb25zOlxuXG4gICAgICAgIHN0YXRlLm1vZGUgPT09IExFTlxuICAgICAgICBzdHJtLmF2YWlsX2luID49IDZcbiAgICAgICAgc3RybS5hdmFpbF9vdXQgPj0gMjU4XG4gICAgICAgIHN0YXJ0ID49IHN0cm0uYXZhaWxfb3V0XG4gICAgICAgIHN0YXRlLmJpdHMgPCA4XG5cbiAgIE9uIHJldHVybiwgc3RhdGUubW9kZSBpcyBvbmUgb2Y6XG5cbiAgICAgICAgTEVOIC0tIHJhbiBvdXQgb2YgZW5vdWdoIG91dHB1dCBzcGFjZSBvciBlbm91Z2ggYXZhaWxhYmxlIGlucHV0XG4gICAgICAgIFRZUEUgLS0gcmVhY2hlZCBlbmQgb2YgYmxvY2sgY29kZSwgaW5mbGF0ZSgpIHRvIGludGVycHJldCBuZXh0IGJsb2NrXG4gICAgICAgIEJBRCAtLSBlcnJvciBpbiBibG9jayBkYXRhXG5cbiAgIE5vdGVzOlxuXG4gICAgLSBUaGUgbWF4aW11bSBpbnB1dCBiaXRzIHVzZWQgYnkgYSBsZW5ndGgvZGlzdGFuY2UgcGFpciBpcyAxNSBiaXRzIGZvciB0aGVcbiAgICAgIGxlbmd0aCBjb2RlLCA1IGJpdHMgZm9yIHRoZSBsZW5ndGggZXh0cmEsIDE1IGJpdHMgZm9yIHRoZSBkaXN0YW5jZSBjb2RlLFxuICAgICAgYW5kIDEzIGJpdHMgZm9yIHRoZSBkaXN0YW5jZSBleHRyYS4gIFRoaXMgdG90YWxzIDQ4IGJpdHMsIG9yIHNpeCBieXRlcy5cbiAgICAgIFRoZXJlZm9yZSBpZiBzdHJtLmF2YWlsX2luID49IDYsIHRoZW4gdGhlcmUgaXMgZW5vdWdoIGlucHV0IHRvIGF2b2lkXG4gICAgICBjaGVja2luZyBmb3IgYXZhaWxhYmxlIGlucHV0IHdoaWxlIGRlY29kaW5nLlxuXG4gICAgLSBUaGUgbWF4aW11bSBieXRlcyB0aGF0IGEgc2luZ2xlIGxlbmd0aC9kaXN0YW5jZSBwYWlyIGNhbiBvdXRwdXQgaXMgMjU4XG4gICAgICBieXRlcywgd2hpY2ggaXMgdGhlIG1heGltdW0gbGVuZ3RoIHRoYXQgY2FuIGJlIGNvZGVkLiAgaW5mbGF0ZV9mYXN0KClcbiAgICAgIHJlcXVpcmVzIHN0cm0uYXZhaWxfb3V0ID49IDI1OCBmb3IgZWFjaCBsb29wIHRvIGF2b2lkIGNoZWNraW5nIGZvclxuICAgICAgb3V0cHV0IHNwYWNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmxhdGVfZmFzdChzdHJtLCBzdGFydCkge1xuICB2YXIgc3RhdGU7XG4gIHZhciBfaW47ICAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmlucHV0ICovXG4gIHZhciBsYXN0OyAgICAgICAgICAgICAgICAgICAvKiBoYXZlIGVub3VnaCBpbnB1dCB3aGlsZSBpbiA8IGxhc3QgKi9cbiAgdmFyIF9vdXQ7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0ub3V0cHV0ICovXG4gIHZhciBiZWc7ICAgICAgICAgICAgICAgICAgICAvKiBpbmZsYXRlKCkncyBpbml0aWFsIHN0cm0ub3V0cHV0ICovXG4gIHZhciBlbmQ7ICAgICAgICAgICAgICAgICAgICAvKiB3aGlsZSBvdXQgPCBlbmQsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUgKi9cbi8vI2lmZGVmIElORkxBVEVfU1RSSUNUXG4gIHZhciBkbWF4OyAgICAgICAgICAgICAgICAgICAvKiBtYXhpbXVtIGRpc3RhbmNlIGZyb20gemxpYiBoZWFkZXIgKi9cbi8vI2VuZGlmXG4gIHZhciB3c2l6ZTsgICAgICAgICAgICAgICAgICAvKiB3aW5kb3cgc2l6ZSBvciB6ZXJvIGlmIG5vdCB1c2luZyB3aW5kb3cgKi9cbiAgdmFyIHdoYXZlOyAgICAgICAgICAgICAgICAgIC8qIHZhbGlkIGJ5dGVzIGluIHRoZSB3aW5kb3cgKi9cbiAgdmFyIHduZXh0OyAgICAgICAgICAgICAgICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqL1xuICAvLyBVc2UgYHNfd2luZG93YCBpbnN0ZWFkIGB3aW5kb3dgLCBhdm9pZCBjb25mbGljdCB3aXRoIGluc3RydW1lbnRhdGlvbiB0b29sc1xuICB2YXIgc193aW5kb3c7ICAgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNsaWRpbmcgd2luZG93LCBpZiB3c2l6ZSAhPSAwICovXG4gIHZhciBob2xkOyAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmhvbGQgKi9cbiAgdmFyIGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0uYml0cyAqL1xuICB2YXIgbGNvZGU7ICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5sZW5jb2RlICovXG4gIHZhciBkY29kZTsgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmRpc3Rjb2RlICovXG4gIHZhciBsbWFzazsgICAgICAgICAgICAgICAgICAvKiBtYXNrIGZvciBmaXJzdCBsZXZlbCBvZiBsZW5ndGggY29kZXMgKi9cbiAgdmFyIGRtYXNrOyAgICAgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGZpcnN0IGxldmVsIG9mIGRpc3RhbmNlIGNvZGVzICovXG4gIHZhciBoZXJlOyAgICAgICAgICAgICAgICAgICAvKiByZXRyaWV2ZWQgdGFibGUgZW50cnkgKi9cbiAgdmFyIG9wOyAgICAgICAgICAgICAgICAgICAgIC8qIGNvZGUgYml0cywgb3BlcmF0aW9uLCBleHRyYSBiaXRzLCBvciAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdpbmRvdyBwb3NpdGlvbiwgd2luZG93IGJ5dGVzIHRvIGNvcHkgKi9cbiAgdmFyIGxlbjsgICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCwgdW51c2VkIGJ5dGVzICovXG4gIHZhciBkaXN0OyAgICAgICAgICAgICAgICAgICAvKiBtYXRjaCBkaXN0YW5jZSAqL1xuICB2YXIgZnJvbTsgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBmcm9tICovXG4gIHZhciBmcm9tX3NvdXJjZTtcblxuXG4gIHZhciBpbnB1dCwgb3V0cHV0OyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzXG5cbiAgLyogY29weSBzdGF0ZSB0byBsb2NhbCB2YXJpYWJsZXMgKi9cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICAvL2hlcmUgPSBzdGF0ZS5oZXJlO1xuICBfaW4gPSBzdHJtLm5leHRfaW47XG4gIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgbGFzdCA9IF9pbiArIChzdHJtLmF2YWlsX2luIC0gNSk7XG4gIF9vdXQgPSBzdHJtLm5leHRfb3V0O1xuICBvdXRwdXQgPSBzdHJtLm91dHB1dDtcbiAgYmVnID0gX291dCAtIChzdGFydCAtIHN0cm0uYXZhaWxfb3V0KTtcbiAgZW5kID0gX291dCArIChzdHJtLmF2YWlsX291dCAtIDI1Nyk7XG4vLyNpZmRlZiBJTkZMQVRFX1NUUklDVFxuICBkbWF4ID0gc3RhdGUuZG1heDtcbi8vI2VuZGlmXG4gIHdzaXplID0gc3RhdGUud3NpemU7XG4gIHdoYXZlID0gc3RhdGUud2hhdmU7XG4gIHduZXh0ID0gc3RhdGUud25leHQ7XG4gIHNfd2luZG93ID0gc3RhdGUud2luZG93O1xuICBob2xkID0gc3RhdGUuaG9sZDtcbiAgYml0cyA9IHN0YXRlLmJpdHM7XG4gIGxjb2RlID0gc3RhdGUubGVuY29kZTtcbiAgZGNvZGUgPSBzdGF0ZS5kaXN0Y29kZTtcbiAgbG1hc2sgPSAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDE7XG4gIGRtYXNrID0gKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMTtcblxuXG4gIC8qIGRlY29kZSBsaXRlcmFscyBhbmQgbGVuZ3RoL2Rpc3RhbmNlcyB1bnRpbCBlbmQtb2YtYmxvY2sgb3Igbm90IGVub3VnaFxuICAgICBpbnB1dCBkYXRhIG9yIG91dHB1dCBzcGFjZSAqL1xuXG4gIHRvcDpcbiAgZG8ge1xuICAgIGlmIChiaXRzIDwgMTUpIHtcbiAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICBiaXRzICs9IDg7XG4gICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgYml0cyArPSA4O1xuICAgIH1cblxuICAgIGhlcmUgPSBsY29kZVtob2xkICYgbG1hc2tdO1xuXG4gICAgZG9sZW46XG4gICAgZm9yICg7OykgeyAvLyBHb3RvIGVtdWxhdGlvblxuICAgICAgb3AgPSBoZXJlID4+PiAyNC8qaGVyZS5iaXRzKi87XG4gICAgICBob2xkID4+Pj0gb3A7XG4gICAgICBiaXRzIC09IG9wO1xuICAgICAgb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZi8qaGVyZS5vcCovO1xuICAgICAgaWYgKG9wID09PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXRlcmFsICovXG4gICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/XG4gICAgICAgIC8vICAgICAgICBcImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXFxuXCIgOlxuICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XFxuXCIsIGhlcmUudmFsKSk7XG4gICAgICAgIG91dHB1dFtfb3V0KytdID0gaGVyZSAmIDB4ZmZmZi8qaGVyZS52YWwqLztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggYmFzZSAqL1xuICAgICAgICBsZW4gPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovO1xuICAgICAgICBvcCAmPSAxNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqL1xuICAgICAgICBpZiAob3ApIHtcbiAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW4gKz0gaG9sZCAmICgoMSA8PCBvcCkgLSAxKTtcbiAgICAgICAgICBob2xkID4+Pj0gb3A7XG4gICAgICAgICAgYml0cyAtPSBvcDtcbiAgICAgICAgfVxuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxcblwiLCBsZW4pKTtcbiAgICAgICAgaWYgKGJpdHMgPCAxNSkge1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIGhlcmUgPSBkY29kZVtob2xkICYgZG1hc2tdO1xuXG4gICAgICAgIGRvZGlzdDpcbiAgICAgICAgZm9yICg7OykgeyAvLyBnb3RvIGVtdWxhdGlvblxuICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMjQvKmhlcmUuYml0cyovO1xuICAgICAgICAgIGhvbGQgPj4+PSBvcDtcbiAgICAgICAgICBiaXRzIC09IG9wO1xuICAgICAgICAgIG9wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmYvKmhlcmUub3AqLztcblxuICAgICAgICAgIGlmIChvcCAmIDE2KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhc2UgKi9cbiAgICAgICAgICAgIGRpc3QgPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovO1xuICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqL1xuICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkge1xuICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHtcbiAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzdCArPSBob2xkICYgKCgxIDw8IG9wKSAtIDEpO1xuLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1RcbiAgICAgICAgICAgIGlmIChkaXN0ID4gZG1heCkge1xuICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICAgIGJyZWFrIHRvcDtcbiAgICAgICAgICAgIH1cbi8vI2VuZGlmXG4gICAgICAgICAgICBob2xkID4+Pj0gb3A7XG4gICAgICAgICAgICBiaXRzIC09IG9wO1xuICAgICAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBkaXN0YW5jZSAldVxcblwiLCBkaXN0KSk7XG4gICAgICAgICAgICBvcCA9IF9vdXQgLSBiZWc7ICAgICAgICAgICAgICAgIC8qIG1heCBkaXN0YW5jZSBpbiBvdXRwdXQgKi9cbiAgICAgICAgICAgIGlmIChkaXN0ID4gb3ApIHsgICAgICAgICAgICAgICAgLyogc2VlIGlmIGNvcHkgZnJvbSB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgb3AgPSBkaXN0IC0gb3A7ICAgICAgICAgICAgICAgLyogZGlzdGFuY2UgYmFjayBpbiB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgaWYgKG9wID4gd2hhdmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkge1xuICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2snO1xuICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDtcbiAgICAgICAgICAgICAgICB9XG5cbi8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYXVsdHMsXG4vLyBkb24ndCBlbmFibGUgaXQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5XG4vLyNpZmRlZiBJTkZMQVRFX0FMTE9XX0lOVkFMSURfRElTVEFOQ0VfVE9PRkFSX0FSUlJcbi8vICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gb3AgLSB3aGF2ZSkge1xuLy8gICAgICAgICAgICAgICAgICBkbyB7XG4vLyAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSAwO1xuLy8gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7XG4vLyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHRvcDtcbi8vICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgIGxlbiAtPSBvcCAtIHdoYXZlO1xuLy8gICAgICAgICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IDA7XG4vLyAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wID4gd2hhdmUpO1xuLy8gICAgICAgICAgICAgICAgaWYgKG9wID09PSAwKSB7XG4vLyAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDtcbi8vICAgICAgICAgICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4vLyAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuKTtcbi8vICAgICAgICAgICAgICAgICAgY29udGludWUgdG9wO1xuLy8gICAgICAgICAgICAgICAgfVxuLy8jZW5kaWZcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmcm9tID0gMDsgLy8gd2luZG93IGluZGV4XG4gICAgICAgICAgICAgIGZyb21fc291cmNlID0gc193aW5kb3c7XG4gICAgICAgICAgICAgIGlmICh3bmV4dCA9PT0gMCkgeyAgICAgICAgICAgLyogdmVyeSBjb21tb24gY2FzZSAqL1xuICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgLSBvcDtcbiAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20gd2luZG93ICovXG4gICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7XG4gICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApO1xuICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OyAgLyogcmVzdCBmcm9tIG91dHB1dCAqL1xuICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHduZXh0IDwgb3ApIHsgICAgICAvKiB3cmFwIGFyb3VuZCB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplICsgd25leHQgLSBvcDtcbiAgICAgICAgICAgICAgICBvcCAtPSB3bmV4dDtcbiAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20gZW5kIG9mIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgbGVuIC09IG9wO1xuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTtcbiAgICAgICAgICAgICAgICAgIGZyb20gPSAwO1xuICAgICAgICAgICAgICAgICAgaWYgKHduZXh0IDwgbGVuKSB7ICAvKiBzb21lIGZyb20gc3RhcnQgb2Ygd2luZG93ICovXG4gICAgICAgICAgICAgICAgICAgIG9wID0gd25leHQ7XG4gICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDtcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7XG4gICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgICAgICAvKiByZXN0IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogY29udGlndW91cyBpbiB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICBmcm9tICs9IHduZXh0IC0gb3A7XG4gICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgbGVuIC09IG9wO1xuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTtcbiAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgIC8qIHJlc3QgZnJvbSBvdXRwdXQgKi9cbiAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB3aGlsZSAobGVuID4gMikge1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdO1xuICAgICAgICAgICAgICAgIGxlbiAtPSAzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAgICAgICAgIC8qIGNvcHkgZGlyZWN0IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtaW5pbXVtIGxlbmd0aCBpcyB0aHJlZSAqL1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuICAgICAgICAgICAgICAgIGxlbiAtPSAzO1xuICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gPiAyKTtcbiAgICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9PT0gMCkgeyAgICAgICAgICAvKiAybmQgbGV2ZWwgZGlzdGFuY2UgY29kZSAqL1xuICAgICAgICAgICAgaGVyZSA9IGRjb2RlWyhoZXJlICYgMHhmZmZmKS8qaGVyZS52YWwqLyArIChob2xkICYgKCgxIDw8IG9wKSAtIDEpKV07XG4gICAgICAgICAgICBjb250aW51ZSBkb2Rpc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSBjb2RlJztcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICBicmVhayB0b3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7IC8vIG5lZWQgdG8gZW11bGF0ZSBnb3RvIHZpYSBcImNvbnRpbnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoKG9wICYgNjQpID09PSAwKSB7ICAgICAgICAgICAgICAvKiAybmQgbGV2ZWwgbGVuZ3RoIGNvZGUgKi9cbiAgICAgICAgaGVyZSA9IGxjb2RlWyhoZXJlICYgMHhmZmZmKS8qaGVyZS52YWwqLyArIChob2xkICYgKCgxIDw8IG9wKSAtIDEpKV07XG4gICAgICAgIGNvbnRpbnVlIGRvbGVuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAob3AgJiAzMikgeyAgICAgICAgICAgICAgICAgICAgIC8qIGVuZC1vZi1ibG9jayAqL1xuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xcblwiKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgICBicmVhayB0b3A7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWsgdG9wO1xuICAgICAgfVxuXG4gICAgICBicmVhazsgLy8gbmVlZCB0byBlbXVsYXRlIGdvdG8gdmlhIFwiY29udGludWVcIlxuICAgIH1cbiAgfSB3aGlsZSAoX2luIDwgbGFzdCAmJiBfb3V0IDwgZW5kKTtcblxuICAvKiByZXR1cm4gdW51c2VkIGJ5dGVzIChvbiBlbnRyeSwgYml0cyA8IDgsIHNvIGluIHdvbid0IGdvIHRvbyBmYXIgYmFjaykgKi9cbiAgbGVuID0gYml0cyA+PiAzO1xuICBfaW4gLT0gbGVuO1xuICBiaXRzIC09IGxlbiA8PCAzO1xuICBob2xkICY9ICgxIDw8IGJpdHMpIC0gMTtcblxuICAvKiB1cGRhdGUgc3RhdGUgYW5kIHJldHVybiAqL1xuICBzdHJtLm5leHRfaW4gPSBfaW47XG4gIHN0cm0ubmV4dF9vdXQgPSBfb3V0O1xuICBzdHJtLmF2YWlsX2luID0gKF9pbiA8IGxhc3QgPyA1ICsgKGxhc3QgLSBfaW4pIDogNSAtIChfaW4gLSBsYXN0KSk7XG4gIHN0cm0uYXZhaWxfb3V0ID0gKF9vdXQgPCBlbmQgPyAyNTcgKyAoZW5kIC0gX291dCkgOiAyNTcgLSAoX291dCAtIGVuZCkpO1xuICBzdGF0ZS5ob2xkID0gaG9sZDtcbiAgc3RhdGUuYml0cyA9IGJpdHM7XG4gIHJldHVybjtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDc5NDg6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLy8gKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyXG4vLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpblxuLy9cbi8vIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkXG4vLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXNcbi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsXG4vLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0XG4vLyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG4vL1xuLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3Rcbi8vICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmVcbi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlXG4vLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuXG4vLyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZVxuLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG4vLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuXG52YXIgdXRpbHMgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDIzNik7XG52YXIgYWRsZXIzMiAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNjA2OSk7XG52YXIgY3JjMzIgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjg2OSk7XG52YXIgaW5mbGF0ZV9mYXN0ICA9IF9fd2VicGFja19yZXF1aXJlX18oNDI2NCk7XG52YXIgaW5mbGF0ZV90YWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTI0MSk7XG5cbnZhciBDT0RFUyA9IDA7XG52YXIgTEVOUyA9IDE7XG52YXIgRElTVFMgPSAyO1xuXG4vKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG4vKiBBbGxvd2VkIGZsdXNoIHZhbHVlczsgc2VlIGRlZmxhdGUoKSBhbmQgaW5mbGF0ZSgpIGJlbG93IGZvciBkZXRhaWxzICovXG4vL3ZhciBaX05PX0ZMVVNIICAgICAgPSAwO1xuLy92YXIgWl9QQVJUSUFMX0ZMVVNIID0gMTtcbi8vdmFyIFpfU1lOQ19GTFVTSCAgICA9IDI7XG4vL3ZhciBaX0ZVTExfRkxVU0ggICAgPSAzO1xudmFyIFpfRklOSVNIICAgICAgICA9IDQ7XG52YXIgWl9CTE9DSyAgICAgICAgID0gNTtcbnZhciBaX1RSRUVTICAgICAgICAgPSA2O1xuXG5cbi8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXNcbiAqIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy5cbiAqL1xudmFyIFpfT0sgICAgICAgICAgICA9IDA7XG52YXIgWl9TVFJFQU1fRU5EICAgID0gMTtcbnZhciBaX05FRURfRElDVCAgICAgPSAyO1xuLy92YXIgWl9FUlJOTyAgICAgICAgID0gLTE7XG52YXIgWl9TVFJFQU1fRVJST1IgID0gLTI7XG52YXIgWl9EQVRBX0VSUk9SICAgID0gLTM7XG52YXIgWl9NRU1fRVJST1IgICAgID0gLTQ7XG52YXIgWl9CVUZfRVJST1IgICAgID0gLTU7XG4vL3ZhciBaX1ZFUlNJT05fRVJST1IgPSAtNjtcblxuLyogVGhlIGRlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kICovXG52YXIgWl9ERUZMQVRFRCAgPSA4O1xuXG5cbi8qIFNUQVRFUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbnZhciAgICBIRUFEID0gMTsgICAgICAgLyogaTogd2FpdGluZyBmb3IgbWFnaWMgaGVhZGVyICovXG52YXIgICAgRkxBR1MgPSAyOyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1ldGhvZCBhbmQgZmxhZ3MgKGd6aXApICovXG52YXIgICAgVElNRSA9IDM7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1vZGlmaWNhdGlvbiB0aW1lIChnemlwKSAqL1xudmFyICAgIE9TID0gNDsgICAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBmbGFncyBhbmQgb3BlcmF0aW5nIHN5c3RlbSAoZ3ppcCkgKi9cbnZhciAgICBFWExFTiA9IDU7ICAgICAgLyogaTogd2FpdGluZyBmb3IgZXh0cmEgbGVuZ3RoIChnemlwKSAqL1xudmFyICAgIEVYVFJBID0gNjsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBieXRlcyAoZ3ppcCkgKi9cbnZhciAgICBOQU1FID0gNzsgICAgICAgLyogaTogd2FpdGluZyBmb3IgZW5kIG9mIGZpbGUgbmFtZSAoZ3ppcCkgKi9cbnZhciAgICBDT01NRU5UID0gODsgICAgLyogaTogd2FpdGluZyBmb3IgZW5kIG9mIGNvbW1lbnQgKGd6aXApICovXG52YXIgICAgSENSQyA9IDk7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGhlYWRlciBjcmMgKGd6aXApICovXG52YXIgICAgRElDVElEID0gMTA7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpY3Rpb25hcnkgY2hlY2sgdmFsdWUgKi9cbnZhciAgICBESUNUID0gMTE7ICAgICAgLyogd2FpdGluZyBmb3IgaW5mbGF0ZVNldERpY3Rpb25hcnkoKSBjYWxsICovXG52YXIgICAgICAgIFRZUEUgPSAxMjsgICAgICAvKiBpOiB3YWl0aW5nIGZvciB0eXBlIGJpdHMsIGluY2x1ZGluZyBsYXN0LWZsYWcgYml0ICovXG52YXIgICAgICAgIFRZUEVETyA9IDEzOyAgICAvKiBpOiBzYW1lLCBidXQgc2tpcCBjaGVjayB0byBleGl0IGluZmxhdGUgb24gbmV3IGJsb2NrICovXG52YXIgICAgICAgIFNUT1JFRCA9IDE0OyAgICAvKiBpOiB3YWl0aW5nIGZvciBzdG9yZWQgc2l6ZSAobGVuZ3RoIGFuZCBjb21wbGVtZW50KSAqL1xudmFyICAgICAgICBDT1BZXyA9IDE1OyAgICAgLyogaS9vOiBzYW1lIGFzIENPUFkgYmVsb3csIGJ1dCBvbmx5IGZpcnN0IHRpbWUgaW4gKi9cbnZhciAgICAgICAgQ09QWSA9IDE2OyAgICAgIC8qIGkvbzogd2FpdGluZyBmb3IgaW5wdXQgb3Igb3V0cHV0IHRvIGNvcHkgc3RvcmVkIGJsb2NrICovXG52YXIgICAgICAgIFRBQkxFID0gMTc7ICAgICAvKiBpOiB3YWl0aW5nIGZvciBkeW5hbWljIGJsb2NrIHRhYmxlIGxlbmd0aHMgKi9cbnZhciAgICAgICAgTEVOTEVOUyA9IDE4OyAgIC8qIGk6IHdhaXRpbmcgZm9yIGNvZGUgbGVuZ3RoIGNvZGUgbGVuZ3RocyAqL1xudmFyICAgICAgICBDT0RFTEVOUyA9IDE5OyAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdCBhbmQgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovXG52YXIgICAgICAgICAgICBMRU5fID0gMjA7ICAgICAgLyogaTogc2FtZSBhcyBMRU4gYmVsb3csIGJ1dCBvbmx5IGZpcnN0IHRpbWUgaW4gKi9cbnZhciAgICAgICAgICAgIExFTiA9IDIxOyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGgvbGl0L2VvYiBjb2RlICovXG52YXIgICAgICAgICAgICBMRU5FWFQgPSAyMjsgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoIGV4dHJhIGJpdHMgKi9cbnZhciAgICAgICAgICAgIERJU1QgPSAyMzsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBkaXN0YW5jZSBjb2RlICovXG52YXIgICAgICAgICAgICBESVNURVhUID0gMjQ7ICAgLyogaTogd2FpdGluZyBmb3IgZGlzdGFuY2UgZXh0cmEgYml0cyAqL1xudmFyICAgICAgICAgICAgTUFUQ0ggPSAyNTsgICAgIC8qIG86IHdhaXRpbmcgZm9yIG91dHB1dCBzcGFjZSB0byBjb3B5IHN0cmluZyAqL1xudmFyICAgICAgICAgICAgTElUID0gMjY7ICAgICAgIC8qIG86IHdhaXRpbmcgZm9yIG91dHB1dCBzcGFjZSB0byB3cml0ZSBsaXRlcmFsICovXG52YXIgICAgQ0hFQ0sgPSAyNzsgICAgIC8qIGk6IHdhaXRpbmcgZm9yIDMyLWJpdCBjaGVjayB2YWx1ZSAqL1xudmFyICAgIExFTkdUSCA9IDI4OyAgICAvKiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgbGVuZ3RoIChnemlwKSAqL1xudmFyICAgIERPTkUgPSAyOTsgICAgICAvKiBmaW5pc2hlZCBjaGVjaywgZG9uZSAtLSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqL1xudmFyICAgIEJBRCA9IDMwOyAgICAgICAvKiBnb3QgYSBkYXRhIGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG52YXIgICAgTUVNID0gMzE7ICAgICAgIC8qIGdvdCBhbiBpbmZsYXRlKCkgbWVtb3J5IGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG52YXIgICAgU1lOQyA9IDMyOyAgICAgIC8qIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBieXRlcyB0byByZXN0YXJ0IGluZmxhdGUoKSAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cblxudmFyIEVOT1VHSF9MRU5TID0gODUyO1xudmFyIEVOT1VHSF9ESVNUUyA9IDU5Mjtcbi8vdmFyIEVOT1VHSCA9ICAoRU5PVUdIX0xFTlMrRU5PVUdIX0RJU1RTKTtcblxudmFyIE1BWF9XQklUUyA9IDE1O1xuLyogMzJLIExaNzcgd2luZG93ICovXG52YXIgREVGX1dCSVRTID0gTUFYX1dCSVRTO1xuXG5cbmZ1bmN0aW9uIHpzd2FwMzIocSkge1xuICByZXR1cm4gICgoKHEgPj4+IDI0KSAmIDB4ZmYpICtcbiAgICAgICAgICAoKHEgPj4+IDgpICYgMHhmZjAwKSArXG4gICAgICAgICAgKChxICYgMHhmZjAwKSA8PCA4KSArXG4gICAgICAgICAgKChxICYgMHhmZikgPDwgMjQpKTtcbn1cblxuXG5mdW5jdGlvbiBJbmZsYXRlU3RhdGUoKSB7XG4gIHRoaXMubW9kZSA9IDA7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgaW5mbGF0ZSBtb2RlICovXG4gIHRoaXMubGFzdCA9IGZhbHNlOyAgICAgICAgICAvKiB0cnVlIGlmIHByb2Nlc3NpbmcgbGFzdCBibG9jayAqL1xuICB0aGlzLndyYXAgPSAwOyAgICAgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwgYml0IDEgdHJ1ZSBmb3IgZ3ppcCAqL1xuICB0aGlzLmhhdmVkaWN0ID0gZmFsc2U7ICAgICAgLyogdHJ1ZSBpZiBkaWN0aW9uYXJ5IHByb3ZpZGVkICovXG4gIHRoaXMuZmxhZ3MgPSAwOyAgICAgICAgICAgICAvKiBnemlwIGhlYWRlciBtZXRob2QgYW5kIGZsYWdzICgwIGlmIHpsaWIpICovXG4gIHRoaXMuZG1heCA9IDA7ICAgICAgICAgICAgICAvKiB6bGliIGhlYWRlciBtYXggZGlzdGFuY2UgKElORkxBVEVfU1RSSUNUKSAqL1xuICB0aGlzLmNoZWNrID0gMDsgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGNvcHkgb2YgY2hlY2sgdmFsdWUgKi9cbiAgdGhpcy50b3RhbCA9IDA7ICAgICAgICAgICAgIC8qIHByb3RlY3RlZCBjb3B5IG9mIG91dHB1dCBjb3VudCAqL1xuICAvLyBUT0RPOiBtYXkgYmUge31cbiAgdGhpcy5oZWFkID0gbnVsbDsgICAgICAgICAgIC8qIHdoZXJlIHRvIHNhdmUgZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gKi9cblxuICAvKiBzbGlkaW5nIHdpbmRvdyAqL1xuICB0aGlzLndiaXRzID0gMDsgICAgICAgICAgICAgLyogbG9nIGJhc2UgMiBvZiByZXF1ZXN0ZWQgd2luZG93IHNpemUgKi9cbiAgdGhpcy53c2l6ZSA9IDA7ICAgICAgICAgICAgIC8qIHdpbmRvdyBzaXplIG9yIHplcm8gaWYgbm90IHVzaW5nIHdpbmRvdyAqL1xuICB0aGlzLndoYXZlID0gMDsgICAgICAgICAgICAgLyogdmFsaWQgYnl0ZXMgaW4gdGhlIHdpbmRvdyAqL1xuICB0aGlzLnduZXh0ID0gMDsgICAgICAgICAgICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovXG4gIHRoaXMud2luZG93ID0gbnVsbDsgICAgICAgICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIG5lZWRlZCAqL1xuXG4gIC8qIGJpdCBhY2N1bXVsYXRvciAqL1xuICB0aGlzLmhvbGQgPSAwOyAgICAgICAgICAgICAgLyogaW5wdXQgYml0IGFjY3VtdWxhdG9yICovXG4gIHRoaXMuYml0cyA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYml0cyBpbiBcImluXCIgKi9cblxuICAvKiBmb3Igc3RyaW5nIGFuZCBzdG9yZWQgYmxvY2sgY29weWluZyAqL1xuICB0aGlzLmxlbmd0aCA9IDA7ICAgICAgICAgICAgLyogbGl0ZXJhbCBvciBsZW5ndGggb2YgZGF0YSB0byBjb3B5ICovXG4gIHRoaXMub2Zmc2V0ID0gMDsgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYWNrIHRvIGNvcHkgc3RyaW5nIGZyb20gKi9cblxuICAvKiBmb3IgdGFibGUgYW5kIGNvZGUgZGVjb2RpbmcgKi9cbiAgdGhpcy5leHRyYSA9IDA7ICAgICAgICAgICAgIC8qIGV4dHJhIGJpdHMgbmVlZGVkICovXG5cbiAgLyogZml4ZWQgYW5kIGR5bmFtaWMgY29kZSB0YWJsZXMgKi9cbiAgdGhpcy5sZW5jb2RlID0gbnVsbDsgICAgICAgICAgLyogc3RhcnRpbmcgdGFibGUgZm9yIGxlbmd0aC9saXRlcmFsIGNvZGVzICovXG4gIHRoaXMuZGlzdGNvZGUgPSBudWxsOyAgICAgICAgIC8qIHN0YXJ0aW5nIHRhYmxlIGZvciBkaXN0YW5jZSBjb2RlcyAqL1xuICB0aGlzLmxlbmJpdHMgPSAwOyAgICAgICAgICAgLyogaW5kZXggYml0cyBmb3IgbGVuY29kZSAqL1xuICB0aGlzLmRpc3RiaXRzID0gMDsgICAgICAgICAgLyogaW5kZXggYml0cyBmb3IgZGlzdGNvZGUgKi9cblxuICAvKiBkeW5hbWljIHRhYmxlIGJ1aWxkaW5nICovXG4gIHRoaXMubmNvZGUgPSAwOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzICovXG4gIHRoaXMubmxlbiA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbGVuZ3RoIGNvZGUgbGVuZ3RocyAqL1xuICB0aGlzLm5kaXN0ID0gMDsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGUgbGVuZ3RocyAqL1xuICB0aGlzLmhhdmUgPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGUgbGVuZ3RocyBpbiBsZW5zW10gKi9cbiAgdGhpcy5uZXh0ID0gbnVsbDsgICAgICAgICAgICAgIC8qIG5leHQgYXZhaWxhYmxlIHNwYWNlIGluIGNvZGVzW10gKi9cblxuICB0aGlzLmxlbnMgPSBuZXcgdXRpbHMuQnVmMTYoMzIwKTsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGNvZGUgbGVuZ3RocyAqL1xuICB0aGlzLndvcmsgPSBuZXcgdXRpbHMuQnVmMTYoMjg4KTsgLyogd29yayBhcmVhIGZvciBjb2RlIHRhYmxlIGJ1aWxkaW5nICovXG5cbiAgLypcbiAgIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBwb2ludGVycyBpbiBqcywgd2UgdXNlIGxlbmNvZGUgYW5kIGRpc3Rjb2RlIGRpcmVjdGx5XG4gICBhcyBidWZmZXJzIHNvIHdlIGRvbid0IG5lZWQgY29kZXNcbiAgKi9cbiAgLy90aGlzLmNvZGVzID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSCk7ICAgICAgIC8qIHNwYWNlIGZvciBjb2RlIHRhYmxlcyAqL1xuICB0aGlzLmxlbmR5biA9IG51bGw7ICAgICAgICAgICAgICAvKiBkeW5hbWljIHRhYmxlIGZvciBsZW5ndGgvbGl0ZXJhbCBjb2RlcyAoSlMgc3BlY2lmaWMpICovXG4gIHRoaXMuZGlzdGR5biA9IG51bGw7ICAgICAgICAgICAgIC8qIGR5bmFtaWMgdGFibGUgZm9yIGRpc3RhbmNlIGNvZGVzIChKUyBzcGVjaWZpYykgKi9cbiAgdGhpcy5zYW5lID0gMDsgICAgICAgICAgICAgICAgICAgLyogaWYgZmFsc2UsIGFsbG93IGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciAqL1xuICB0aGlzLmJhY2sgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBiaXRzIGJhY2sgb2YgbGFzdCB1bnByb2Nlc3NlZCBsZW5ndGgvbGl0ICovXG4gIHRoaXMud2FzID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWwgbGVuZ3RoIG9mIG1hdGNoICovXG59XG5cbmZ1bmN0aW9uIGluZmxhdGVSZXNldEtlZXAoc3RybSkge1xuICB2YXIgc3RhdGU7XG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IHN0YXRlLnRvdGFsID0gMDtcbiAgc3RybS5tc2cgPSAnJzsgLypaX05VTEwqL1xuICBpZiAoc3RhdGUud3JhcCkgeyAgICAgICAvKiB0byBzdXBwb3J0IGlsbC1jb25jZWl2ZWQgSmF2YSB0ZXN0IHN1aXRlICovXG4gICAgc3RybS5hZGxlciA9IHN0YXRlLndyYXAgJiAxO1xuICB9XG4gIHN0YXRlLm1vZGUgPSBIRUFEO1xuICBzdGF0ZS5sYXN0ID0gMDtcbiAgc3RhdGUuaGF2ZWRpY3QgPSAwO1xuICBzdGF0ZS5kbWF4ID0gMzI3Njg7XG4gIHN0YXRlLmhlYWQgPSBudWxsLypaX05VTEwqLztcbiAgc3RhdGUuaG9sZCA9IDA7XG4gIHN0YXRlLmJpdHMgPSAwO1xuICAvL3N0YXRlLmxlbmNvZGUgPSBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLm5leHQgPSBzdGF0ZS5jb2RlcztcbiAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5biA9IG5ldyB1dGlscy5CdWYzMihFTk9VR0hfTEVOUyk7XG4gIHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUuZGlzdGR5biA9IG5ldyB1dGlscy5CdWYzMihFTk9VR0hfRElTVFMpO1xuXG4gIHN0YXRlLnNhbmUgPSAxO1xuICBzdGF0ZS5iYWNrID0gLTE7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogcmVzZXRcXG5cIikpO1xuICByZXR1cm4gWl9PSztcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZVJlc2V0KHN0cm0pIHtcbiAgdmFyIHN0YXRlO1xuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBzdGF0ZS53c2l6ZSA9IDA7XG4gIHN0YXRlLndoYXZlID0gMDtcbiAgc3RhdGUud25leHQgPSAwO1xuICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTtcblxufVxuXG5mdW5jdGlvbiBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpIHtcbiAgdmFyIHdyYXA7XG4gIHZhciBzdGF0ZTtcblxuICAvKiBnZXQgdGhlIHN0YXRlICovXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuXG4gIC8qIGV4dHJhY3Qgd3JhcCByZXF1ZXN0IGZyb20gd2luZG93Qml0cyBwYXJhbWV0ZXIgKi9cbiAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7XG4gICAgd3JhcCA9IDA7XG4gICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzO1xuICB9XG4gIGVsc2Uge1xuICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDE7XG4gICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkge1xuICAgICAgd2luZG93Qml0cyAmPSAxNTtcbiAgICB9XG4gIH1cblxuICAvKiBzZXQgbnVtYmVyIG9mIHdpbmRvdyBiaXRzLCBmcmVlIHdpbmRvdyBpZiBkaWZmZXJlbnQgKi9cbiAgaWYgKHdpbmRvd0JpdHMgJiYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkpIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cbiAgaWYgKHN0YXRlLndpbmRvdyAhPT0gbnVsbCAmJiBzdGF0ZS53Yml0cyAhPT0gd2luZG93Qml0cykge1xuICAgIHN0YXRlLndpbmRvdyA9IG51bGw7XG4gIH1cblxuICAvKiB1cGRhdGUgc3RhdGUgYW5kIHJlc2V0IHRoZSByZXN0IG9mIGl0ICovXG4gIHN0YXRlLndyYXAgPSB3cmFwO1xuICBzdGF0ZS53Yml0cyA9IHdpbmRvd0JpdHM7XG4gIHJldHVybiBpbmZsYXRlUmVzZXQoc3RybSk7XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSB7XG4gIHZhciByZXQ7XG4gIHZhciBzdGF0ZTtcblxuICBpZiAoIXN0cm0pIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIC8vc3RybS5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqL1xuXG4gIHN0YXRlID0gbmV3IEluZmxhdGVTdGF0ZSgpO1xuXG4gIC8vaWYgKHN0YXRlID09PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjtcbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiBhbGxvY2F0ZWRcXG5cIikpO1xuICBzdHJtLnN0YXRlID0gc3RhdGU7XG4gIHN0YXRlLndpbmRvdyA9IG51bGwvKlpfTlVMTCovO1xuICByZXQgPSBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpO1xuICBpZiAocmV0ICE9PSBaX09LKSB7XG4gICAgc3RybS5zdGF0ZSA9IG51bGwvKlpfTlVMTCovO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVJbml0KHN0cm0pIHtcbiAgcmV0dXJuIGluZmxhdGVJbml0MihzdHJtLCBERUZfV0JJVFMpO1xufVxuXG5cbi8qXG4gUmV0dXJuIHN0YXRlIHdpdGggbGVuZ3RoIGFuZCBkaXN0YW5jZSBkZWNvZGluZyB0YWJsZXMgYW5kIGluZGV4IHNpemVzIHNldCB0b1xuIGZpeGVkIGNvZGUgZGVjb2RpbmcuICBOb3JtYWxseSB0aGlzIHJldHVybnMgZml4ZWQgdGFibGVzIGZyb20gaW5mZml4ZWQuaC5cbiBJZiBCVUlMREZJWEVEIGlzIGRlZmluZWQsIHRoZW4gaW5zdGVhZCB0aGlzIHJvdXRpbmUgYnVpbGRzIHRoZSB0YWJsZXMgdGhlXG4gZmlyc3QgdGltZSBpdCdzIGNhbGxlZCwgYW5kIHJldHVybnMgdGhvc2UgdGFibGVzIHRoZSBmaXJzdCB0aW1lIGFuZFxuIHRoZXJlYWZ0ZXIuICBUaGlzIHJlZHVjZXMgdGhlIHNpemUgb2YgdGhlIGNvZGUgYnkgYWJvdXQgMksgYnl0ZXMsIGluXG4gZXhjaGFuZ2UgZm9yIGEgbGl0dGxlIGV4ZWN1dGlvbiB0aW1lLiAgSG93ZXZlciwgQlVJTERGSVhFRCBzaG91bGQgbm90IGJlXG4gdXNlZCBmb3IgdGhyZWFkZWQgYXBwbGljYXRpb25zLCBzaW5jZSB0aGUgcmV3cml0aW5nIG9mIHRoZSB0YWJsZXMgYW5kIHZpcmdpblxuIG1heSBub3QgYmUgdGhyZWFkLXNhZmUuXG4gKi9cbnZhciB2aXJnaW4gPSB0cnVlO1xuXG52YXIgbGVuZml4LCBkaXN0Zml4OyAvLyBXZSBoYXZlIG5vIHBvaW50ZXJzIGluIEpTLCBzbyBrZWVwIHRhYmxlcyBzZXBhcmF0ZVxuXG5mdW5jdGlvbiBmaXhlZHRhYmxlcyhzdGF0ZSkge1xuICAvKiBidWlsZCBmaXhlZCBodWZmbWFuIHRhYmxlcyBpZiBmaXJzdCBjYWxsIChtYXkgbm90IGJlIHRocmVhZCBzYWZlKSAqL1xuICBpZiAodmlyZ2luKSB7XG4gICAgdmFyIHN5bTtcblxuICAgIGxlbmZpeCA9IG5ldyB1dGlscy5CdWYzMig1MTIpO1xuICAgIGRpc3RmaXggPSBuZXcgdXRpbHMuQnVmMzIoMzIpO1xuXG4gICAgLyogbGl0ZXJhbC9sZW5ndGggdGFibGUgKi9cbiAgICBzeW0gPSAwO1xuICAgIHdoaWxlIChzeW0gPCAxNDQpIHsgc3RhdGUubGVuc1tzeW0rK10gPSA4OyB9XG4gICAgd2hpbGUgKHN5bSA8IDI1NikgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDk7IH1cbiAgICB3aGlsZSAoc3ltIDwgMjgwKSB7IHN0YXRlLmxlbnNbc3ltKytdID0gNzsgfVxuICAgIHdoaWxlIChzeW0gPCAyODgpIHsgc3RhdGUubGVuc1tzeW0rK10gPSA4OyB9XG5cbiAgICBpbmZsYXRlX3RhYmxlKExFTlMsICBzdGF0ZS5sZW5zLCAwLCAyODgsIGxlbmZpeCwgICAwLCBzdGF0ZS53b3JrLCB7IGJpdHM6IDkgfSk7XG5cbiAgICAvKiBkaXN0YW5jZSB0YWJsZSAqL1xuICAgIHN5bSA9IDA7XG4gICAgd2hpbGUgKHN5bSA8IDMyKSB7IHN0YXRlLmxlbnNbc3ltKytdID0gNTsgfVxuXG4gICAgaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUubGVucywgMCwgMzIsICAgZGlzdGZpeCwgMCwgc3RhdGUud29yaywgeyBiaXRzOiA1IH0pO1xuXG4gICAgLyogZG8gdGhpcyBqdXN0IG9uY2UgKi9cbiAgICB2aXJnaW4gPSBmYWxzZTtcbiAgfVxuXG4gIHN0YXRlLmxlbmNvZGUgPSBsZW5maXg7XG4gIHN0YXRlLmxlbmJpdHMgPSA5O1xuICBzdGF0ZS5kaXN0Y29kZSA9IGRpc3RmaXg7XG4gIHN0YXRlLmRpc3RiaXRzID0gNTtcbn1cblxuXG4vKlxuIFVwZGF0ZSB0aGUgd2luZG93IHdpdGggdGhlIGxhc3Qgd3NpemUgKG5vcm1hbGx5IDMySykgYnl0ZXMgd3JpdHRlbiBiZWZvcmVcbiByZXR1cm5pbmcuICBJZiB3aW5kb3cgZG9lcyBub3QgZXhpc3QgeWV0LCBjcmVhdGUgaXQuICBUaGlzIGlzIG9ubHkgY2FsbGVkXG4gd2hlbiBhIHdpbmRvdyBpcyBhbHJlYWR5IGluIHVzZSwgb3Igd2hlbiBvdXRwdXQgaGFzIGJlZW4gd3JpdHRlbiBkdXJpbmcgdGhpc1xuIGluZmxhdGUgY2FsbCwgYnV0IHRoZSBlbmQgb2YgdGhlIGRlZmxhdGUgc3RyZWFtIGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC5cbiBJdCBpcyBhbHNvIGNhbGxlZCB0byBjcmVhdGUgYSB3aW5kb3cgZm9yIGRpY3Rpb25hcnkgZGF0YSB3aGVuIGEgZGljdGlvbmFyeVxuIGlzIGxvYWRlZC5cblxuIFByb3ZpZGluZyBvdXRwdXQgYnVmZmVycyBsYXJnZXIgdGhhbiAzMksgdG8gaW5mbGF0ZSgpIHNob3VsZCBwcm92aWRlIGEgc3BlZWRcbiBhZHZhbnRhZ2UsIHNpbmNlIG9ubHkgdGhlIGxhc3QgMzJLIG9mIG91dHB1dCBpcyBjb3BpZWQgdG8gdGhlIHNsaWRpbmcgd2luZG93XG4gdXBvbiByZXR1cm4gZnJvbSBpbmZsYXRlKCksIGFuZCBzaW5jZSBhbGwgZGlzdGFuY2VzIGFmdGVyIHRoZSBmaXJzdCAzMksgb2ZcbiBvdXRwdXQgd2lsbCBmYWxsIGluIHRoZSBvdXRwdXQgZGF0YSwgbWFraW5nIG1hdGNoIGNvcGllcyBzaW1wbGVyIGFuZCBmYXN0ZXIuXG4gVGhlIGFkdmFudGFnZSBtYXkgYmUgZGVwZW5kZW50IG9uIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzb3IncyBkYXRhIGNhY2hlcy5cbiAqL1xuZnVuY3Rpb24gdXBkYXRld2luZG93KHN0cm0sIHNyYywgZW5kLCBjb3B5KSB7XG4gIHZhciBkaXN0O1xuICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlO1xuXG4gIC8qIGlmIGl0IGhhc24ndCBiZWVuIGRvbmUgYWxyZWFkeSwgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSB3aW5kb3cgKi9cbiAgaWYgKHN0YXRlLndpbmRvdyA9PT0gbnVsbCkge1xuICAgIHN0YXRlLndzaXplID0gMSA8PCBzdGF0ZS53Yml0cztcbiAgICBzdGF0ZS53bmV4dCA9IDA7XG4gICAgc3RhdGUud2hhdmUgPSAwO1xuXG4gICAgc3RhdGUud2luZG93ID0gbmV3IHV0aWxzLkJ1Zjgoc3RhdGUud3NpemUpO1xuICB9XG5cbiAgLyogY29weSBzdGF0ZS0+d3NpemUgb3IgbGVzcyBvdXRwdXQgYnl0ZXMgaW50byB0aGUgY2lyY3VsYXIgd2luZG93ICovXG4gIGlmIChjb3B5ID49IHN0YXRlLndzaXplKSB7XG4gICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LCBzcmMsIGVuZCAtIHN0YXRlLndzaXplLCBzdGF0ZS53c2l6ZSwgMCk7XG4gICAgc3RhdGUud25leHQgPSAwO1xuICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7XG4gIH1cbiAgZWxzZSB7XG4gICAgZGlzdCA9IHN0YXRlLndzaXplIC0gc3RhdGUud25leHQ7XG4gICAgaWYgKGRpc3QgPiBjb3B5KSB7XG4gICAgICBkaXN0ID0gY29weTtcbiAgICB9XG4gICAgLy96bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsIGVuZCAtIGNvcHksIGRpc3QpO1xuICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdywgc3JjLCBlbmQgLSBjb3B5LCBkaXN0LCBzdGF0ZS53bmV4dCk7XG4gICAgY29weSAtPSBkaXN0O1xuICAgIGlmIChjb3B5KSB7XG4gICAgICAvL3ptZW1jcHkoc3RhdGUtPndpbmRvdywgZW5kIC0gY29weSwgY29weSk7XG4gICAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gY29weSwgY29weSwgMCk7XG4gICAgICBzdGF0ZS53bmV4dCA9IGNvcHk7XG4gICAgICBzdGF0ZS53aGF2ZSA9IHN0YXRlLndzaXplO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHN0YXRlLnduZXh0ICs9IGRpc3Q7XG4gICAgICBpZiAoc3RhdGUud25leHQgPT09IHN0YXRlLndzaXplKSB7IHN0YXRlLnduZXh0ID0gMDsgfVxuICAgICAgaWYgKHN0YXRlLndoYXZlIDwgc3RhdGUud3NpemUpIHsgc3RhdGUud2hhdmUgKz0gZGlzdDsgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZShzdHJtLCBmbHVzaCkge1xuICB2YXIgc3RhdGU7XG4gIHZhciBpbnB1dCwgb3V0cHV0OyAgICAgICAgICAvLyBpbnB1dC9vdXRwdXQgYnVmZmVyc1xuICB2YXIgbmV4dDsgICAgICAgICAgICAgICAgICAgLyogbmV4dCBpbnB1dCBJTkRFWCAqL1xuICB2YXIgcHV0OyAgICAgICAgICAgICAgICAgICAgLyogbmV4dCBvdXRwdXQgSU5ERVggKi9cbiAgdmFyIGhhdmUsIGxlZnQ7ICAgICAgICAgICAgIC8qIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICovXG4gIHZhciBob2xkOyAgICAgICAgICAgICAgICAgICAvKiBiaXQgYnVmZmVyICovXG4gIHZhciBiaXRzOyAgICAgICAgICAgICAgICAgICAvKiBiaXRzIGluIGJpdCBidWZmZXIgKi9cbiAgdmFyIF9pbiwgX291dDsgICAgICAgICAgICAgIC8qIHNhdmUgc3RhcnRpbmcgYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi9cbiAgdmFyIGNvcHk7ICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzdG9yZWQgb3IgbWF0Y2ggYnl0ZXMgdG8gY29weSAqL1xuICB2YXIgZnJvbTsgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBieXRlcyBmcm9tICovXG4gIHZhciBmcm9tX3NvdXJjZTtcbiAgdmFyIGhlcmUgPSAwOyAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgZGVjb2RpbmcgdGFibGUgZW50cnkgKi9cbiAgdmFyIGhlcmVfYml0cywgaGVyZV9vcCwgaGVyZV92YWw7IC8vIHBha2VkIFwiaGVyZVwiIGRlbm9ybWFsaXplZCAoSlMgc3BlY2lmaWMpXG4gIC8vdmFyIGxhc3Q7ICAgICAgICAgICAgICAgICAgIC8qIHBhcmVudCB0YWJsZSBlbnRyeSAqL1xuICB2YXIgbGFzdF9iaXRzLCBsYXN0X29wLCBsYXN0X3ZhbDsgLy8gcGFrZWQgXCJsYXN0XCIgZGVub3JtYWxpemVkIChKUyBzcGVjaWZpYylcbiAgdmFyIGxlbjsgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCB0byBjb3B5IGZvciByZXBlYXRzLCBiaXRzIHRvIGRyb3AgKi9cbiAgdmFyIHJldDsgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovXG4gIHZhciBoYnVmID0gbmV3IHV0aWxzLkJ1ZjgoNCk7ICAgIC8qIGJ1ZmZlciBmb3IgZ3ppcCBoZWFkZXIgY3JjIGNhbGN1bGF0aW9uICovXG4gIHZhciBvcHRzO1xuXG4gIHZhciBuOyAvLyB0ZW1wb3JhcnkgdmFyIGZvciBORUVEX0JJVFNcblxuICB2YXIgb3JkZXIgPSAvKiBwZXJtdXRhdGlvbiBvZiBjb2RlIGxlbmd0aHMgKi9cbiAgICBbIDE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTUgXTtcblxuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSB8fCAhc3RybS5vdXRwdXQgfHxcbiAgICAgICghc3RybS5pbnB1dCAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSkge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHsgc3RhdGUubW9kZSA9IFRZUEVETzsgfSAgICAvKiBza2lwIGNoZWNrICovXG5cblxuICAvLy0tLSBMT0FEKCkgLS0tXG4gIHB1dCA9IHN0cm0ubmV4dF9vdXQ7XG4gIG91dHB1dCA9IHN0cm0ub3V0cHV0O1xuICBsZWZ0ID0gc3RybS5hdmFpbF9vdXQ7XG4gIG5leHQgPSBzdHJtLm5leHRfaW47XG4gIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgaGF2ZSA9IHN0cm0uYXZhaWxfaW47XG4gIGhvbGQgPSBzdGF0ZS5ob2xkO1xuICBiaXRzID0gc3RhdGUuYml0cztcbiAgLy8tLS1cblxuICBfaW4gPSBoYXZlO1xuICBfb3V0ID0gbGVmdDtcbiAgcmV0ID0gWl9PSztcblxuICBpbmZfbGVhdmU6IC8vIGdvdG8gZW11bGF0aW9uXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKHN0YXRlLm1vZGUpIHtcbiAgICAgIGNhc2UgSEVBRDpcbiAgICAgICAgaWYgKHN0YXRlLndyYXAgPT09IDApIHtcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRURPO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vPT09IE5FRURCSVRTKDE2KTtcbiAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBpZiAoKHN0YXRlLndyYXAgJiAyKSAmJiBob2xkID09PSAweDhiMWYpIHsgIC8qIGd6aXAgaGVhZGVyICovXG4gICAgICAgICAgc3RhdGUuY2hlY2sgPSAwLypjcmMzMigwTCwgWl9OVUxMLCAwKSovO1xuICAgICAgICAgIC8vPT09IENSQzIoc3RhdGUuY2hlY2ssIGhvbGQpO1xuICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjtcbiAgICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjtcbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTtcbiAgICAgICAgICAvLz09PS8vXG5cbiAgICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICAgIGhvbGQgPSAwO1xuICAgICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICBzdGF0ZS5tb2RlID0gRkxBR1M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmxhZ3MgPSAwOyAgICAgICAgICAgLyogZXhwZWN0IHpsaWIgaGVhZGVyICovXG4gICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoc3RhdGUud3JhcCAmIDEpIHx8ICAgLyogY2hlY2sgaWYgemxpYiBoZWFkZXIgYWxsb3dlZCAqL1xuICAgICAgICAgICgoKGhvbGQgJiAweGZmKS8qQklUUyg4KSovIDw8IDgpICsgKGhvbGQgPj4gOCkpICUgMzEpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdpbmNvcnJlY3QgaGVhZGVyIGNoZWNrJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaG9sZCAmIDB4MGYpLypCSVRTKDQpKi8gIT09IFpfREVGTEFURUQpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICd1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLy0tLSBEUk9QQklUUyg0KSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gNDtcbiAgICAgICAgYml0cyAtPSA0O1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIGxlbiA9IChob2xkICYgMHgwZikvKkJJVFMoNCkqLyArIDg7XG4gICAgICAgIGlmIChzdGF0ZS53Yml0cyA9PT0gMCkge1xuICAgICAgICAgIHN0YXRlLndiaXRzID0gbGVuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxlbiA+IHN0YXRlLndiaXRzKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCB3aW5kb3cgc2l6ZSc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5kbWF4ID0gMSA8PCBsZW47XG4gICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICB6bGliIGhlYWRlciBva1xcblwiKSk7XG4gICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDEvKmFkbGVyMzIoMEwsIFpfTlVMTCwgMCkqLztcbiAgICAgICAgc3RhdGUubW9kZSA9IGhvbGQgJiAweDIwMCA/IERJQ1RJRCA6IFRZUEU7XG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRkxBR1M6XG4gICAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi9cbiAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5mbGFncyA9IGhvbGQ7XG4gICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgJiAweGZmKSAhPT0gWl9ERUZMQVRFRCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ3Vua25vd24gY29tcHJlc3Npb24gbWV0aG9kJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4ZTAwMCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ3Vua25vd24gaGVhZGVyIGZsYWdzIHNldCc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQudGV4dCA9ICgoaG9sZCA+PiA4KSAmIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAgIC8vPT09IENSQzIoc3RhdGUuY2hlY2ssIGhvbGQpO1xuICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjtcbiAgICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjtcbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTtcbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgIH1cbiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLm1vZGUgPSBUSU1FO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIFRJTUU6XG4gICAgICAgIC8vPT09IE5FRURCSVRTKDMyKTsgKi9cbiAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQudGltZSA9IGhvbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgICAgLy89PT0gQ1JDNChzdGF0ZS5jaGVjaywgaG9sZClcbiAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7XG4gICAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7XG4gICAgICAgICAgaGJ1ZlsyXSA9IChob2xkID4+PiAxNikgJiAweGZmO1xuICAgICAgICAgIGhidWZbM10gPSAoaG9sZCA+Pj4gMjQpICYgMHhmZjtcbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCA0LCAwKTtcbiAgICAgICAgICAvLz09PVxuICAgICAgICB9XG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5tb2RlID0gT1M7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgT1M6XG4gICAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi9cbiAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQueGZsYWdzID0gKGhvbGQgJiAweGZmKTtcbiAgICAgICAgICBzdGF0ZS5oZWFkLm9zID0gKGhvbGQgPj4gOCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7XG4gICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApO1xuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgfVxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUubW9kZSA9IEVYTEVOO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIEVYTEVOOlxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDA0MDApIHtcbiAgICAgICAgICAvLz09PSBORUVEQklUUygxNik7ICovXG4gICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikge1xuICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIHN0YXRlLmxlbmd0aCA9IGhvbGQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmFfbGVuID0gaG9sZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgICAgICAvLz09PSBDUkMyKHN0YXRlLmNoZWNrLCBob2xkKTtcbiAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjtcbiAgICAgICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7XG4gICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbnVsbC8qWl9OVUxMKi87XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUubW9kZSA9IEVYVFJBO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIEVYVFJBOlxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDA0MDApIHtcbiAgICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoO1xuICAgICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgeyBjb3B5ID0gaGF2ZTsgfVxuICAgICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgICAgICBsZW4gPSBzdGF0ZS5oZWFkLmV4dHJhX2xlbiAtIHN0YXRlLmxlbmd0aDtcbiAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5oZWFkLmV4dHJhKSB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIHVudHlwZWQgYXJyYXkgZm9yIG1vcmUgY29udmVuaWVudCBwcm9jZXNzaW5nIGxhdGVyXG4gICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5leHRyYSA9IG5ldyBBcnJheShzdGF0ZS5oZWFkLmV4dHJhX2xlbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoXG4gICAgICAgICAgICAgICAgc3RhdGUuaGVhZC5leHRyYSxcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgICAgIC8vIGV4dHJhIGZpZWxkIGlzIGxpbWl0ZWQgdG8gNjU1MzYgYnl0ZXNcbiAgICAgICAgICAgICAgICAvLyAtIG5vIG5lZWQgZm9yIGFkZGl0aW9uYWwgc2l6ZSBjaGVja1xuICAgICAgICAgICAgICAgIGNvcHksXG4gICAgICAgICAgICAgICAgLypsZW4gKyBjb3B5ID4gc3RhdGUuaGVhZC5leHRyYV9tYXggLSBsZW4gPyBzdGF0ZS5oZWFkLmV4dHJhX21heCA6IGNvcHksKi9cbiAgICAgICAgICAgICAgICBsZW5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgLy96bWVtY3B5KHN0YXRlLmhlYWQuZXh0cmEgKyBsZW4sIG5leHQsXG4gICAgICAgICAgICAgIC8vICAgICAgICBsZW4gKyBjb3B5ID4gc3RhdGUuaGVhZC5leHRyYV9tYXggP1xuICAgICAgICAgICAgICAvLyAgICAgICAgc3RhdGUuaGVhZC5leHRyYV9tYXggLSBsZW4gOiBjb3B5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYXZlIC09IGNvcHk7XG4gICAgICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5sZW5ndGggPSAwO1xuICAgICAgICBzdGF0ZS5tb2RlID0gTkFNRTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBOQU1FOlxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDA4MDApIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBjb3B5ID0gMDtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAvLyBUT0RPOiAyIG9yIDEgYnl0ZXM/XG4gICAgICAgICAgICBsZW4gPSBpbnB1dFtuZXh0ICsgY29weSsrXTtcbiAgICAgICAgICAgIC8qIHVzZSBjb25zdGFudCBsaW1pdCBiZWNhdXNlIGluIGpzIHdlIHNob3VsZCBub3QgcHJlYWxsb2NhdGUgbWVtb3J5ICovXG4gICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCAmJiBsZW4gJiZcbiAgICAgICAgICAgICAgICAoc3RhdGUubGVuZ3RoIDwgNjU1MzYgLypzdGF0ZS5oZWFkLm5hbWVfbWF4Ki8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmhlYWQubmFtZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYXZlIC09IGNvcHk7XG4gICAgICAgICAgbmV4dCArPSBjb3B5O1xuICAgICAgICAgIGlmIChsZW4pIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQubmFtZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUubGVuZ3RoID0gMDtcbiAgICAgICAgc3RhdGUubW9kZSA9IENPTU1FTlQ7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgQ09NTUVOVDpcbiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgxMDAwKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgY29weSA9IDA7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgbGVuID0gaW5wdXRbbmV4dCArIGNvcHkrK107XG4gICAgICAgICAgICAvKiB1c2UgY29uc3RhbnQgbGltaXQgYmVjYXVzZSBpbiBqcyB3ZSBzaG91bGQgbm90IHByZWFsbG9jYXRlIG1lbW9yeSAqL1xuICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmXG4gICAgICAgICAgICAgICAgKHN0YXRlLmxlbmd0aCA8IDY1NTM2IC8qc3RhdGUuaGVhZC5jb21tX21heCovKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmNvbW1lbnQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2ZSk7XG4gICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhdmUgLT0gY29weTtcbiAgICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgICAgaWYgKGxlbikgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgc3RhdGUuaGVhZC5jb21tZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5tb2RlID0gSENSQztcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBIQ1JDOlxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICAvLz09PSBORUVEQklUUygxNik7ICovXG4gICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikge1xuICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIGlmIChob2xkICE9PSAoc3RhdGUuY2hlY2sgJiAweGZmZmYpKSB7XG4gICAgICAgICAgICBzdHJtLm1zZyA9ICdoZWFkZXIgY3JjIG1pc21hdGNoJztcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgICBob2xkID0gMDtcbiAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgICBzdGF0ZS5oZWFkLmhjcmMgPSAoKHN0YXRlLmZsYWdzID4+IDkpICYgMSk7XG4gICAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAwO1xuICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERJQ1RJRDpcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMzIpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDMyKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IHpzd2FwMzIoaG9sZCk7XG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5tb2RlID0gRElDVDtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBESUNUOlxuICAgICAgICBpZiAoc3RhdGUuaGF2ZWRpY3QgPT09IDApIHtcbiAgICAgICAgICAvLy0tLSBSRVNUT1JFKCkgLS0tXG4gICAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDtcbiAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7XG4gICAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTtcbiAgICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDtcbiAgICAgICAgICBzdGF0ZS5iaXRzID0gYml0cztcbiAgICAgICAgICAvLy0tLVxuICAgICAgICAgIHJldHVybiBaX05FRURfRElDVDtcbiAgICAgICAgfVxuICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxLyphZGxlcjMyKDBMLCBaX05VTEwsIDApKi87XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIFRZUEU6XG4gICAgICAgIGlmIChmbHVzaCA9PT0gWl9CTE9DSyB8fCBmbHVzaCA9PT0gWl9UUkVFUykgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBUWVBFRE86XG4gICAgICAgIGlmIChzdGF0ZS5sYXN0KSB7XG4gICAgICAgICAgLy8tLS0gQllURUJJVFMoKSAtLS0vL1xuICAgICAgICAgIGhvbGQgPj4+PSBiaXRzICYgNztcbiAgICAgICAgICBiaXRzIC09IGJpdHMgJiA3O1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQ0hFQ0s7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0gTkVFREJJVFMoMyk7ICovXG4gICAgICAgIHdoaWxlIChiaXRzIDwgMykge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5sYXN0ID0gKGhvbGQgJiAweDAxKS8qQklUUygxKSovO1xuICAgICAgICAvLy0tLSBEUk9QQklUUygxKSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gMTtcbiAgICAgICAgYml0cyAtPSAxO1xuICAgICAgICAvLy0tLS8vXG5cbiAgICAgICAgc3dpdGNoICgoaG9sZCAmIDB4MDMpLypCSVRTKDIpKi8pIHtcbiAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdG9yZWQgYmxvY2sgKi9cbiAgICAgICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgIHN0b3JlZCBibG9jayVzXFxuXCIsXG4gICAgICAgICAgICAvLyAgICAgICAgc3RhdGUubGFzdCA/IFwiIChsYXN0KVwiIDogXCJcIikpO1xuICAgICAgICAgICAgc3RhdGUubW9kZSA9IFNUT1JFRDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpeGVkIGJsb2NrICovXG4gICAgICAgICAgICBmaXhlZHRhYmxlcyhzdGF0ZSk7XG4gICAgICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICBmaXhlZCBjb2RlcyBibG9jayVzXFxuXCIsXG4gICAgICAgICAgICAvLyAgICAgICAgc3RhdGUubGFzdCA/IFwiIChsYXN0KVwiIDogXCJcIikpO1xuICAgICAgICAgICAgc3RhdGUubW9kZSA9IExFTl87ICAgICAgICAgICAgIC8qIGRlY29kZSBjb2RlcyAqL1xuICAgICAgICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7XG4gICAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKDIpIC0tLS8vXG4gICAgICAgICAgICAgIGhvbGQgPj4+PSAyO1xuICAgICAgICAgICAgICBiaXRzIC09IDI7XG4gICAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICAgICAgYnJlYWsgaW5mX2xlYXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHluYW1pYyBibG9jayAqL1xuICAgICAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgZHluYW1pYyBjb2RlcyBibG9jayVzXFxuXCIsXG4gICAgICAgICAgICAvLyAgICAgICAgc3RhdGUubGFzdCA/IFwiIChsYXN0KVwiIDogXCJcIikpO1xuICAgICAgICAgICAgc3RhdGUubW9kZSA9IFRBQkxFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBibG9jayB0eXBlJztcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoMikgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IDI7XG4gICAgICAgIGJpdHMgLT0gMjtcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RPUkVEOlxuICAgICAgICAvLy0tLSBCWVRFQklUUygpIC0tLS8vIC8qIGdvIHRvIGJ5dGUgYm91bmRhcnkgKi9cbiAgICAgICAgaG9sZCA+Pj49IGJpdHMgJiA3O1xuICAgICAgICBiaXRzIC09IGJpdHMgJiA3O1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIC8vPT09IE5FRURCSVRTKDMyKTsgKi9cbiAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBpZiAoKGhvbGQgJiAweGZmZmYpICE9PSAoKGhvbGQgPj4+IDE2KSBeIDB4ZmZmZikpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmxlbmd0aCA9IGhvbGQgJiAweGZmZmY7XG4gICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgc3RvcmVkIGxlbmd0aCAldVxcblwiLFxuICAgICAgICAvLyAgICAgICAgc3RhdGUubGVuZ3RoKSk7XG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5tb2RlID0gQ09QWV87XG4gICAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBDT1BZXzpcbiAgICAgICAgc3RhdGUubW9kZSA9IENPUFk7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgQ09QWTpcbiAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDtcbiAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICBpZiAoY29weSA+IGhhdmUpIHsgY29weSA9IGhhdmU7IH1cbiAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIHsgY29weSA9IGxlZnQ7IH1cbiAgICAgICAgICBpZiAoY29weSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAvLy0tLSB6bWVtY3B5KHB1dCwgbmV4dCwgY29weSk7IC0tLVxuICAgICAgICAgIHV0aWxzLmFycmF5U2V0KG91dHB1dCwgaW5wdXQsIG5leHQsIGNvcHksIHB1dCk7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIGhhdmUgLT0gY29weTtcbiAgICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgICAgbGVmdCAtPSBjb3B5O1xuICAgICAgICAgIHB1dCArPSBjb3B5O1xuICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgc3RvcmVkIGVuZFxcblwiKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVEFCTEU6XG4gICAgICAgIC8vPT09IE5FRURCSVRTKDE0KTsgKi9cbiAgICAgICAgd2hpbGUgKGJpdHMgPCAxNCkge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5ubGVuID0gKGhvbGQgJiAweDFmKS8qQklUUyg1KSovICsgMjU3O1xuICAgICAgICAvLy0tLSBEUk9QQklUUyg1KSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gNTtcbiAgICAgICAgYml0cyAtPSA1O1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIHN0YXRlLm5kaXN0ID0gKGhvbGQgJiAweDFmKS8qQklUUyg1KSovICsgMTtcbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoNSkgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IDU7XG4gICAgICAgIGJpdHMgLT0gNTtcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBzdGF0ZS5uY29kZSA9IChob2xkICYgMHgwZikvKkJJVFMoNCkqLyArIDQ7XG4gICAgICAgIC8vLS0tIERST1BCSVRTKDQpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSA0O1xuICAgICAgICBiaXRzIC09IDQ7XG4gICAgICAgIC8vLS0tLy9cbi8vI2lmbmRlZiBQS1pJUF9CVUdfV09SS0FST1VORFxuICAgICAgICBpZiAoc3RhdGUubmxlbiA+IDI4NiB8fCBzdGF0ZS5uZGlzdCA+IDMwKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAndG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMnO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbi8vI2VuZGlmXG4gICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgdGFibGUgc2l6ZXMgb2tcXG5cIikpO1xuICAgICAgICBzdGF0ZS5oYXZlID0gMDtcbiAgICAgICAgc3RhdGUubW9kZSA9IExFTkxFTlM7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgTEVOTEVOUzpcbiAgICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCBzdGF0ZS5uY29kZSkge1xuICAgICAgICAgIC8vPT09IE5FRURCSVRTKDMpO1xuICAgICAgICAgIHdoaWxlIChiaXRzIDwgMykge1xuICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIHN0YXRlLmxlbnNbb3JkZXJbc3RhdGUuaGF2ZSsrXV0gPSAoaG9sZCAmIDB4MDcpOy8vQklUUygzKTtcbiAgICAgICAgICAvLy0tLSBEUk9QQklUUygzKSAtLS0vL1xuICAgICAgICAgIGhvbGQgPj4+PSAzO1xuICAgICAgICAgIGJpdHMgLT0gMztcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCAxOSkge1xuICAgICAgICAgIHN0YXRlLmxlbnNbb3JkZXJbc3RhdGUuaGF2ZSsrXV0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIGhhdmUgc2VwYXJhdGUgdGFibGVzICYgbm8gcG9pbnRlcnMuIDIgY29tbWVudGVkIGxpbmVzIGJlbG93IG5vdCBuZWVkZWQuXG4gICAgICAgIC8vc3RhdGUubmV4dCA9IHN0YXRlLmNvZGVzO1xuICAgICAgICAvL3N0YXRlLmxlbmNvZGUgPSBzdGF0ZS5uZXh0O1xuICAgICAgICAvLyBTd2l0Y2ggdG8gdXNlIGR5bmFtaWMgdGFibGVcbiAgICAgICAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5bjtcbiAgICAgICAgc3RhdGUubGVuYml0cyA9IDc7XG5cbiAgICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9O1xuICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKENPREVTLCBzdGF0ZS5sZW5zLCAwLCAxOSwgc3RhdGUubGVuY29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7XG4gICAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7XG5cbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgY29kZSBsZW5ndGhzIHNldCc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgIGNvZGUgbGVuZ3RocyBva1xcblwiKSk7XG4gICAgICAgIHN0YXRlLmhhdmUgPSAwO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQ09ERUxFTlM7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgQ09ERUxFTlM6XG4gICAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7XG4gICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDEpXTsvKkJJVFMoc3RhdGUubGVuYml0cykqL1xuICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICAgIGlmICgoaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vXG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGVyZV92YWwgPCAxNikge1xuICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgc3RhdGUubGVuc1tzdGF0ZS5oYXZlKytdID0gaGVyZV92YWw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhlcmVfdmFsID09PSAxNikge1xuICAgICAgICAgICAgICAvLz09PSBORUVEQklUUyhoZXJlLmJpdHMgKyAyKTtcbiAgICAgICAgICAgICAgbiA9IGhlcmVfYml0cyArIDI7XG4gICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikge1xuICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy89PT0vL1xuICAgICAgICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCc7XG4gICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZW4gPSBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUgLSAxXTtcbiAgICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDB4MDMpOy8vQklUUygyKTtcbiAgICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoMikgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IDI7XG4gICAgICAgICAgICAgIGJpdHMgLT0gMjtcbiAgICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaGVyZV92YWwgPT09IDE3KSB7XG4gICAgICAgICAgICAgIC8vPT09IE5FRURCSVRTKGhlcmUuYml0cyArIDMpO1xuICAgICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgMztcbiAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICAgICAgbGVuID0gMDtcbiAgICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDB4MDcpOy8vQklUUygzKTtcbiAgICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoMykgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IDM7XG4gICAgICAgICAgICAgIGJpdHMgLT0gMztcbiAgICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIC8vPT09IE5FRURCSVRTKGhlcmUuYml0cyArIDcpO1xuICAgICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgNztcbiAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICAgICAgbGVuID0gMDtcbiAgICAgICAgICAgICAgY29weSA9IDExICsgKGhvbGQgJiAweDdmKTsvL0JJVFMoNyk7XG4gICAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKDcpIC0tLS8vXG4gICAgICAgICAgICAgIGhvbGQgPj4+PSA3O1xuICAgICAgICAgICAgICBiaXRzIC09IDc7XG4gICAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlICsgY29weSA+IHN0YXRlLm5sZW4gKyBzdGF0ZS5uZGlzdCkge1xuICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0JztcbiAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY29weS0tKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGxlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiBoYW5kbGUgZXJyb3IgYnJlYWtzIGluIHdoaWxlICovXG4gICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBCQUQpIHsgYnJlYWs7IH1cblxuICAgICAgICAvKiBjaGVjayBmb3IgZW5kLW9mLWJsb2NrIGNvZGUgKGJldHRlciBoYXZlIG9uZSkgKi9cbiAgICAgICAgaWYgKHN0YXRlLmxlbnNbMjU2XSA9PT0gMCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGJ1aWxkIGNvZGUgdGFibGVzIC0tIG5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIGxlbmJpdHMgb3IgZGlzdGJpdHNcbiAgICAgICAgICAgdmFsdWVzIGhlcmUgKDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaFxuICAgICAgICAgICBjb25jZXJuaW5nIHRoZSBFTk9VR0ggY29uc3RhbnRzLCB3aGljaCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzICovXG4gICAgICAgIHN0YXRlLmxlbmJpdHMgPSA5O1xuXG4gICAgICAgIG9wdHMgPSB7IGJpdHM6IHN0YXRlLmxlbmJpdHMgfTtcbiAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCBzdGF0ZS5ubGVuLCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTtcbiAgICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC5cbiAgICAgICAgLy8gc3RhdGUubmV4dF9pbmRleCA9IG9wdHMudGFibGVfaW5kZXg7XG4gICAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7XG4gICAgICAgIC8vIHN0YXRlLmxlbmNvZGUgPSBzdGF0ZS5uZXh0O1xuXG4gICAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQnO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5kaXN0Yml0cyA9IDY7XG4gICAgICAgIC8vc3RhdGUuZGlzdGNvZGUuY29weShzdGF0ZS5jb2Rlcyk7XG4gICAgICAgIC8vIFN3aXRjaCB0byB1c2UgZHluYW1pYyB0YWJsZVxuICAgICAgICBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLmRpc3RkeW47XG4gICAgICAgIG9wdHMgPSB7IGJpdHM6IHN0YXRlLmRpc3RiaXRzIH07XG4gICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLmxlbnMsIHN0YXRlLm5sZW4sIHN0YXRlLm5kaXN0LCBzdGF0ZS5kaXN0Y29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7XG4gICAgICAgIC8vIFdlIGhhdmUgc2VwYXJhdGUgdGFibGVzICYgbm8gcG9pbnRlcnMuIDIgY29tbWVudGVkIGxpbmVzIGJlbG93IG5vdCBuZWVkZWQuXG4gICAgICAgIC8vIHN0YXRlLm5leHRfaW5kZXggPSBvcHRzLnRhYmxlX2luZGV4O1xuICAgICAgICBzdGF0ZS5kaXN0Yml0cyA9IG9wdHMuYml0cztcbiAgICAgICAgLy8gc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5uZXh0O1xuXG4gICAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlcyBzZXQnO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgJ2luZmxhdGU6ICAgICAgIGNvZGVzIG9rXFxuJykpO1xuICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXztcbiAgICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIExFTl86XG4gICAgICAgIHN0YXRlLm1vZGUgPSBMRU47XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgTEVOOlxuICAgICAgICBpZiAoaGF2ZSA+PSA2ICYmIGxlZnQgPj0gMjU4KSB7XG4gICAgICAgICAgLy8tLS0gUkVTVE9SRSgpIC0tLVxuICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSBwdXQ7XG4gICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0O1xuICAgICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7XG4gICAgICAgICAgc3RybS5hdmFpbF9pbiA9IGhhdmU7XG4gICAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7XG4gICAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7XG4gICAgICAgICAgLy8tLS1cbiAgICAgICAgICBpbmZsYXRlX2Zhc3Qoc3RybSwgX291dCk7XG4gICAgICAgICAgLy8tLS0gTE9BRCgpIC0tLVxuICAgICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7XG4gICAgICAgICAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7XG4gICAgICAgICAgbGVmdCA9IHN0cm0uYXZhaWxfb3V0O1xuICAgICAgICAgIG5leHQgPSBzdHJtLm5leHRfaW47XG4gICAgICAgICAgaW5wdXQgPSBzdHJtLmlucHV0O1xuICAgICAgICAgIGhhdmUgPSBzdHJtLmF2YWlsX2luO1xuICAgICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkO1xuICAgICAgICAgIGJpdHMgPSBzdGF0ZS5iaXRzO1xuICAgICAgICAgIC8vLS0tXG5cbiAgICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gVFlQRSkge1xuICAgICAgICAgICAgc3RhdGUuYmFjayA9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5iYWNrID0gMDtcbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgIGhlcmUgPSBzdGF0ZS5sZW5jb2RlW2hvbGQgJiAoKDEgPDwgc3RhdGUubGVuYml0cykgLSAxKV07ICAvKkJJVFMoc3RhdGUubGVuYml0cykqL1xuICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0O1xuICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsgYnJlYWs7IH1cbiAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vXG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhlcmVfb3AgJiYgKGhlcmVfb3AgJiAweGYwKSA9PT0gMCkge1xuICAgICAgICAgIGxhc3RfYml0cyA9IGhlcmVfYml0cztcbiAgICAgICAgICBsYXN0X29wID0gaGVyZV9vcDtcbiAgICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsO1xuICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5sZW5jb2RlW2xhc3RfdmFsICtcbiAgICAgICAgICAgICAgICAgICAgKChob2xkICYgKCgxIDw8IChsYXN0X2JpdHMgKyBsYXN0X29wKSkgLSAxKSkvKkJJVFMobGFzdC5iaXRzICsgbGFzdC5vcCkqLyA+PiBsYXN0X2JpdHMpXTtcbiAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0O1xuICAgICAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmO1xuICAgICAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgMHhmZmZmO1xuXG4gICAgICAgICAgICBpZiAoKGxhc3RfYml0cyArIGhlcmVfYml0cykgPD0gYml0cykgeyBicmVhazsgfVxuICAgICAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vL1xuICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8tLS0gRFJPUEJJVFMobGFzdC5iaXRzKSAtLS0vL1xuICAgICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7XG4gICAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7XG4gICAgICAgIHN0YXRlLmxlbmd0aCA9IGhlcmVfdmFsO1xuICAgICAgICBpZiAoaGVyZV9vcCA9PT0gMCkge1xuICAgICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/XG4gICAgICAgICAgLy8gICAgICAgIFwiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcXG5cIiA6XG4gICAgICAgICAgLy8gICAgICAgIFwiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxcblwiLCBoZXJlLnZhbCkpO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBMSVQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhlcmVfb3AgJiAzMikge1xuICAgICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgICAgZW5kIG9mIGJsb2NrXFxuXCIpKTtcbiAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhlcmVfb3AgJiA2NCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTtcbiAgICAgICAgc3RhdGUubW9kZSA9IExFTkVYVDtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBMRU5FWFQ6XG4gICAgICAgIGlmIChzdGF0ZS5leHRyYSkge1xuICAgICAgICAgIC8vPT09IE5FRURCSVRTKHN0YXRlLmV4dHJhKTtcbiAgICAgICAgICBuID0gc3RhdGUuZXh0cmE7XG4gICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgc3RhdGUubGVuZ3RoICs9IGhvbGQgJiAoKDEgPDwgc3RhdGUuZXh0cmEpIC0gMSkvKkJJVFMoc3RhdGUuZXh0cmEpKi87XG4gICAgICAgICAgLy8tLS0gRFJPUEJJVFMoc3RhdGUuZXh0cmEpIC0tLS8vXG4gICAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhO1xuICAgICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7XG4gICAgICAgIH1cbiAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBsZW5ndGggJXVcXG5cIiwgc3RhdGUubGVuZ3RoKSk7XG4gICAgICAgIHN0YXRlLndhcyA9IHN0YXRlLmxlbmd0aDtcbiAgICAgICAgc3RhdGUubW9kZSA9IERJU1Q7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgRElTVDpcbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtob2xkICYgKCgxIDw8IHN0YXRlLmRpc3RiaXRzKSAtIDEpXTsvKkJJVFMoc3RhdGUuZGlzdGJpdHMpKi9cbiAgICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDtcbiAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgMHhmZmZmO1xuXG4gICAgICAgICAgaWYgKChoZXJlX2JpdHMpIDw9IGJpdHMpIHsgYnJlYWs7IH1cbiAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vXG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgIH1cbiAgICAgICAgaWYgKChoZXJlX29wICYgMHhmMCkgPT09IDApIHtcbiAgICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7XG4gICAgICAgICAgbGFzdF9vcCA9IGhlcmVfb3A7XG4gICAgICAgICAgbGFzdF92YWwgPSBoZXJlX3ZhbDtcbiAgICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICBoZXJlID0gc3RhdGUuZGlzdGNvZGVbbGFzdF92YWwgK1xuICAgICAgICAgICAgICAgICAgICAoKGhvbGQgJiAoKDEgPDwgKGxhc3RfYml0cyArIGxhc3Rfb3ApKSAtIDEpKS8qQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSovID4+IGxhc3RfYml0cyldO1xuICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICAgIGlmICgobGFzdF9iaXRzICsgaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vXG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLy0tLSBEUk9QQklUUyhsYXN0LmJpdHMpIC0tLS8vXG4gICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0cztcbiAgICAgICAgICBiaXRzIC09IGxhc3RfYml0cztcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgc3RhdGUuYmFjayArPSBsYXN0X2JpdHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICBiaXRzIC09IGhlcmVfYml0cztcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBzdGF0ZS5iYWNrICs9IGhlcmVfYml0cztcbiAgICAgICAgaWYgKGhlcmVfb3AgJiA2NCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgY29kZSc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5vZmZzZXQgPSBoZXJlX3ZhbDtcbiAgICAgICAgc3RhdGUuZXh0cmEgPSAoaGVyZV9vcCkgJiAxNTtcbiAgICAgICAgc3RhdGUubW9kZSA9IERJU1RFWFQ7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgRElTVEVYVDpcbiAgICAgICAgaWYgKHN0YXRlLmV4dHJhKSB7XG4gICAgICAgICAgLy89PT0gTkVFREJJVFMoc3RhdGUuZXh0cmEpO1xuICAgICAgICAgIG4gPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHtcbiAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICBzdGF0ZS5vZmZzZXQgKz0gaG9sZCAmICgoMSA8PCBzdGF0ZS5leHRyYSkgLSAxKS8qQklUUyhzdGF0ZS5leHRyYSkqLztcbiAgICAgICAgICAvLy0tLSBEUk9QQklUUyhzdGF0ZS5leHRyYSkgLS0tLy9cbiAgICAgICAgICBob2xkID4+Pj0gc3RhdGUuZXh0cmE7XG4gICAgICAgICAgYml0cyAtPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgc3RhdGUuYmFjayArPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgfVxuLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1RcbiAgICAgICAgaWYgKHN0YXRlLm9mZnNldCA+IHN0YXRlLmRtYXgpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuLy8jZW5kaWZcbiAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBkaXN0YW5jZSAldVxcblwiLCBzdGF0ZS5vZmZzZXQpKTtcbiAgICAgICAgc3RhdGUubW9kZSA9IE1BVENIO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIE1BVENIOlxuICAgICAgICBpZiAobGVmdCA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgY29weSA9IF9vdXQgLSBsZWZ0O1xuICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gY29weSkgeyAgICAgICAgIC8qIGNvcHkgZnJvbSB3aW5kb3cgKi9cbiAgICAgICAgICBjb3B5ID0gc3RhdGUub2Zmc2V0IC0gY29weTtcbiAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLndoYXZlKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkge1xuICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuLy8gKCEpIFRoaXMgYmxvY2sgaXMgZGlzYWJsZWQgaW4gemxpYiBkZWZhdWx0cyxcbi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHlcbi8vI2lmZGVmIElORkxBVEVfQUxMT1dfSU5WQUxJRF9ESVNUQU5DRV9UT09GQVJfQVJSUlxuLy8gICAgICAgICAgVHJhY2UoKHN0ZGVyciwgXCJpbmZsYXRlLmMgdG9vIGZhclxcblwiKSk7XG4vLyAgICAgICAgICBjb3B5IC09IHN0YXRlLndoYXZlO1xuLy8gICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS5sZW5ndGgpIHsgY29weSA9IHN0YXRlLmxlbmd0aDsgfVxuLy8gICAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9XG4vLyAgICAgICAgICBsZWZ0IC09IGNvcHk7XG4vLyAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTtcbi8vICAgICAgICAgIGRvIHtcbi8vICAgICAgICAgICAgb3V0cHV0W3B1dCsrXSA9IDA7XG4vLyAgICAgICAgICB9IHdoaWxlICgtLWNvcHkpO1xuLy8gICAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgeyBzdGF0ZS5tb2RlID0gTEVOOyB9XG4vLyAgICAgICAgICBicmVhaztcbi8vI2VuZGlmXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUud25leHQpIHtcbiAgICAgICAgICAgIGNvcHkgLT0gc3RhdGUud25leHQ7XG4gICAgICAgICAgICBmcm9tID0gc3RhdGUud3NpemUgLSBjb3B5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZyb20gPSBzdGF0ZS53bmV4dCAtIGNvcHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUubGVuZ3RoKSB7IGNvcHkgPSBzdGF0ZS5sZW5ndGg7IH1cbiAgICAgICAgICBmcm9tX3NvdXJjZSA9IHN0YXRlLndpbmRvdztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3B5IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7XG4gICAgICAgICAgZnJvbSA9IHB1dCAtIHN0YXRlLm9mZnNldDtcbiAgICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3B5ID4gbGVmdCkgeyBjb3B5ID0gbGVmdDsgfVxuICAgICAgICBsZWZ0IC09IGNvcHk7XG4gICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgb3V0cHV0W3B1dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgIH0gd2hpbGUgKC0tY29weSk7XG4gICAgICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHsgc3RhdGUubW9kZSA9IExFTjsgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTElUOlxuICAgICAgICBpZiAobGVmdCA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgb3V0cHV0W3B1dCsrXSA9IHN0YXRlLmxlbmd0aDtcbiAgICAgICAgbGVmdC0tO1xuICAgICAgICBzdGF0ZS5tb2RlID0gTEVOO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ0hFQ0s6XG4gICAgICAgIGlmIChzdGF0ZS53cmFwKSB7XG4gICAgICAgICAgLy89PT0gTkVFREJJVFMoMzIpO1xuICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgLy8gVXNlICd8JyBpbnN0ZWFkIG9mICcrJyB0byBtYWtlIHN1cmUgdGhhdCByZXN1bHQgaXMgc2lnbmVkXG4gICAgICAgICAgICBob2xkIHw9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIF9vdXQgLT0gbGVmdDtcbiAgICAgICAgICBzdHJtLnRvdGFsX291dCArPSBfb3V0O1xuICAgICAgICAgIHN0YXRlLnRvdGFsICs9IF9vdXQ7XG4gICAgICAgICAgaWYgKF9vdXQpIHtcbiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9XG4gICAgICAgICAgICAgICAgLypVUERBVEUoc3RhdGUuY2hlY2ssIHB1dCAtIF9vdXQsIF9vdXQpOyovXG4gICAgICAgICAgICAgICAgKHN0YXRlLmZsYWdzID8gY3JjMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgcHV0IC0gX291dCkgOiBhZGxlcjMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHB1dCAtIF9vdXQpKTtcblxuICAgICAgICAgIH1cbiAgICAgICAgICBfb3V0ID0gbGVmdDtcbiAgICAgICAgICAvLyBOQjogY3JjMzIgc3RvcmVkIGFzIHNpZ25lZCAzMi1iaXQgaW50LCB6c3dhcDMyIHJldHVybnMgc2lnbmVkIHRvb1xuICAgICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgPyBob2xkIDogenN3YXAzMihob2xkKSkgIT09IHN0YXRlLmNoZWNrKSB7XG4gICAgICAgICAgICBzdHJtLm1zZyA9ICdpbmNvcnJlY3QgZGF0YSBjaGVjayc7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICBjaGVjayBtYXRjaGVzIHRyYWlsZXJcXG5cIikpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLm1vZGUgPSBMRU5HVEg7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgTEVOR1RIOlxuICAgICAgICBpZiAoc3RhdGUud3JhcCAmJiBzdGF0ZS5mbGFncykge1xuICAgICAgICAgIC8vPT09IE5FRURCSVRTKDMyKTtcbiAgICAgICAgICB3aGlsZSAoYml0cyA8IDMyKSB7XG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgaWYgKGhvbGQgIT09IChzdGF0ZS50b3RhbCAmIDB4ZmZmZmZmZmYpKSB7XG4gICAgICAgICAgICBzdHJtLm1zZyA9ICdpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrJztcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgICBob2xkID0gMDtcbiAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgIGxlbmd0aCBtYXRjaGVzIHRyYWlsZXJcXG5cIikpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLm1vZGUgPSBET05FO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIERPTkU6XG4gICAgICAgIHJldCA9IFpfU1RSRUFNX0VORDtcbiAgICAgICAgYnJlYWsgaW5mX2xlYXZlO1xuICAgICAgY2FzZSBCQUQ6XG4gICAgICAgIHJldCA9IFpfREFUQV9FUlJPUjtcbiAgICAgICAgYnJlYWsgaW5mX2xlYXZlO1xuICAgICAgY2FzZSBNRU06XG4gICAgICAgIHJldHVybiBaX01FTV9FUlJPUjtcbiAgICAgIGNhc2UgU1lOQzpcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICAgIH1cbiAgfVxuXG4gIC8vIGluZl9sZWF2ZSA8LSBoZXJlIGlzIHJlYWwgcGxhY2UgZm9yIFwiZ290byBpbmZfbGVhdmVcIiwgZW11bGF0ZWQgdmlhIFwiYnJlYWsgaW5mX2xlYXZlXCJcblxuICAvKlxuICAgICBSZXR1cm4gZnJvbSBpbmZsYXRlKCksIHVwZGF0aW5nIHRoZSB0b3RhbCBjb3VudHMgYW5kIHRoZSBjaGVjayB2YWx1ZS5cbiAgICAgSWYgdGhlcmUgd2FzIG5vIHByb2dyZXNzIGR1cmluZyB0aGUgaW5mbGF0ZSgpIGNhbGwsIHJldHVybiBhIGJ1ZmZlclxuICAgICBlcnJvci4gIENhbGwgdXBkYXRld2luZG93KCkgdG8gY3JlYXRlIGFuZC9vciB1cGRhdGUgdGhlIHdpbmRvdyBzdGF0ZS5cbiAgICAgTm90ZTogYSBtZW1vcnkgZXJyb3IgZnJvbSBpbmZsYXRlKCkgaXMgbm9uLXJlY292ZXJhYmxlLlxuICAgKi9cblxuICAvLy0tLSBSRVNUT1JFKCkgLS0tXG4gIHN0cm0ubmV4dF9vdXQgPSBwdXQ7XG4gIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDtcbiAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgc3RybS5hdmFpbF9pbiA9IGhhdmU7XG4gIHN0YXRlLmhvbGQgPSBob2xkO1xuICBzdGF0ZS5iaXRzID0gYml0cztcbiAgLy8tLS1cblxuICBpZiAoc3RhdGUud3NpemUgfHwgKF9vdXQgIT09IHN0cm0uYXZhaWxfb3V0ICYmIHN0YXRlLm1vZGUgPCBCQUQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUubW9kZSA8IENIRUNLIHx8IGZsdXNoICE9PSBaX0ZJTklTSCkpKSB7XG4gICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCwgX291dCAtIHN0cm0uYXZhaWxfb3V0KSkge1xuICAgICAgc3RhdGUubW9kZSA9IE1FTTtcbiAgICAgIHJldHVybiBaX01FTV9FUlJPUjtcbiAgICB9XG4gIH1cbiAgX2luIC09IHN0cm0uYXZhaWxfaW47XG4gIF9vdXQgLT0gc3RybS5hdmFpbF9vdXQ7XG4gIHN0cm0udG90YWxfaW4gKz0gX2luO1xuICBzdHJtLnRvdGFsX291dCArPSBfb3V0O1xuICBzdGF0ZS50b3RhbCArPSBfb3V0O1xuICBpZiAoc3RhdGUud3JhcCAmJiBfb3V0KSB7XG4gICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gLypVUERBVEUoc3RhdGUuY2hlY2ssIHN0cm0ubmV4dF9vdXQgLSBfb3V0LCBfb3V0KTsqL1xuICAgICAgKHN0YXRlLmZsYWdzID8gY3JjMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgc3RybS5uZXh0X291dCAtIF9vdXQpIDogYWRsZXIzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCkpO1xuICB9XG4gIHN0cm0uZGF0YV90eXBlID0gc3RhdGUuYml0cyArIChzdGF0ZS5sYXN0ID8gNjQgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgIChzdGF0ZS5tb2RlID09PSBUWVBFID8gMTI4IDogMCkgK1xuICAgICAgICAgICAgICAgICAgICAoc3RhdGUubW9kZSA9PT0gTEVOXyB8fCBzdGF0ZS5tb2RlID09PSBDT1BZXyA/IDI1NiA6IDApO1xuICBpZiAoKChfaW4gPT09IDAgJiYgX291dCA9PT0gMCkgfHwgZmx1c2ggPT09IFpfRklOSVNIKSAmJiByZXQgPT09IFpfT0spIHtcbiAgICByZXQgPSBaX0JVRl9FUlJPUjtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBpbmZsYXRlRW5kKHN0cm0pIHtcblxuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgLyp8fCBzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTAqLykge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIHZhciBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIGlmIChzdGF0ZS53aW5kb3cpIHtcbiAgICBzdGF0ZS53aW5kb3cgPSBudWxsO1xuICB9XG4gIHN0cm0uc3RhdGUgPSBudWxsO1xuICByZXR1cm4gWl9PSztcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZUdldEhlYWRlcihzdHJtLCBoZWFkKSB7XG4gIHZhciBzdGF0ZTtcblxuICAvKiBjaGVjayBzdGF0ZSAqL1xuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgaWYgKChzdGF0ZS53cmFwICYgMikgPT09IDApIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG5cbiAgLyogc2F2ZSBoZWFkZXIgc3RydWN0dXJlICovXG4gIHN0YXRlLmhlYWQgPSBoZWFkO1xuICBoZWFkLmRvbmUgPSBmYWxzZTtcbiAgcmV0dXJuIFpfT0s7XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnkpIHtcbiAgdmFyIGRpY3RMZW5ndGggPSBkaWN0aW9uYXJ5Lmxlbmd0aDtcblxuICB2YXIgc3RhdGU7XG4gIHZhciBkaWN0aWQ7XG4gIHZhciByZXQ7XG5cbiAgLyogY2hlY2sgc3RhdGUgKi9cbiAgaWYgKCFzdHJtIC8qID09IFpfTlVMTCAqLyB8fCAhc3RybS5zdGF0ZSAvKiA9PSBaX05VTEwgKi8pIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIHN0YXRlID0gc3RybS5zdGF0ZTtcblxuICBpZiAoc3RhdGUud3JhcCAhPT0gMCAmJiBzdGF0ZS5tb2RlICE9PSBESUNUKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgLyogY2hlY2sgZm9yIGNvcnJlY3QgZGljdGlvbmFyeSBpZGVudGlmaWVyICovXG4gIGlmIChzdGF0ZS5tb2RlID09PSBESUNUKSB7XG4gICAgZGljdGlkID0gMTsgLyogYWRsZXIzMigwLCBudWxsLCAwKSovXG4gICAgLyogZGljdGlkID0gYWRsZXIzMihkaWN0aWQsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOyAqL1xuICAgIGRpY3RpZCA9IGFkbGVyMzIoZGljdGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCAwKTtcbiAgICBpZiAoZGljdGlkICE9PSBzdGF0ZS5jaGVjaykge1xuICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjtcbiAgICB9XG4gIH1cbiAgLyogY29weSBkaWN0aW9uYXJ5IHRvIHdpbmRvdyB1c2luZyB1cGRhdGV3aW5kb3coKSwgd2hpY2ggd2lsbCBhbWVuZCB0aGVcbiAgIGV4aXN0aW5nIGRpY3Rpb25hcnkgaWYgYXBwcm9wcmlhdGUgKi9cbiAgcmV0ID0gdXBkYXRld2luZG93KHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIGRpY3RMZW5ndGgpO1xuICBpZiAocmV0KSB7XG4gICAgc3RhdGUubW9kZSA9IE1FTTtcbiAgICByZXR1cm4gWl9NRU1fRVJST1I7XG4gIH1cbiAgc3RhdGUuaGF2ZWRpY3QgPSAxO1xuICAvLyBUcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgIGRpY3Rpb25hcnkgc2V0XFxuXCIpKTtcbiAgcmV0dXJuIFpfT0s7XG59XG5cbmV4cG9ydHMuaW5mbGF0ZVJlc2V0ID0gaW5mbGF0ZVJlc2V0O1xuZXhwb3J0cy5pbmZsYXRlUmVzZXQyID0gaW5mbGF0ZVJlc2V0MjtcbmV4cG9ydHMuaW5mbGF0ZVJlc2V0S2VlcCA9IGluZmxhdGVSZXNldEtlZXA7XG5leHBvcnRzLmluZmxhdGVJbml0ID0gaW5mbGF0ZUluaXQ7XG5leHBvcnRzLmluZmxhdGVJbml0MiA9IGluZmxhdGVJbml0MjtcbmV4cG9ydHMuaW5mbGF0ZSA9IGluZmxhdGU7XG5leHBvcnRzLmluZmxhdGVFbmQgPSBpbmZsYXRlRW5kO1xuZXhwb3J0cy5pbmZsYXRlR2V0SGVhZGVyID0gaW5mbGF0ZUdldEhlYWRlcjtcbmV4cG9ydHMuaW5mbGF0ZVNldERpY3Rpb25hcnkgPSBpbmZsYXRlU2V0RGljdGlvbmFyeTtcbmV4cG9ydHMuaW5mbGF0ZUluZm8gPSAncGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSc7XG5cbi8qIE5vdCBpbXBsZW1lbnRlZFxuZXhwb3J0cy5pbmZsYXRlQ29weSA9IGluZmxhdGVDb3B5O1xuZXhwb3J0cy5pbmZsYXRlR2V0RGljdGlvbmFyeSA9IGluZmxhdGVHZXREaWN0aW9uYXJ5O1xuZXhwb3J0cy5pbmZsYXRlTWFyayA9IGluZmxhdGVNYXJrO1xuZXhwb3J0cy5pbmZsYXRlUHJpbWUgPSBpbmZsYXRlUHJpbWU7XG5leHBvcnRzLmluZmxhdGVTeW5jID0gaW5mbGF0ZVN5bmM7XG5leHBvcnRzLmluZmxhdGVTeW5jUG9pbnQgPSBpbmZsYXRlU3luY1BvaW50O1xuZXhwb3J0cy5pbmZsYXRlVW5kZXJtaW5lID0gaW5mbGF0ZVVuZGVybWluZTtcbiovXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDkyNDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLy8gKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyXG4vLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpblxuLy9cbi8vIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkXG4vLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXNcbi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsXG4vLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0XG4vLyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG4vL1xuLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3Rcbi8vICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmVcbi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlXG4vLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuXG4vLyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZVxuLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG4vLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuXG52YXIgdXRpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyMzYpO1xuXG52YXIgTUFYQklUUyA9IDE1O1xudmFyIEVOT1VHSF9MRU5TID0gODUyO1xudmFyIEVOT1VHSF9ESVNUUyA9IDU5Mjtcbi8vdmFyIEVOT1VHSCA9IChFTk9VR0hfTEVOUytFTk9VR0hfRElTVFMpO1xuXG52YXIgQ09ERVMgPSAwO1xudmFyIExFTlMgPSAxO1xudmFyIERJU1RTID0gMjtcblxudmFyIGxiYXNlID0gWyAvKiBMZW5ndGggY29kZXMgMjU3Li4yODUgYmFzZSAqL1xuICAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMywgMjcsIDMxLFxuICAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMFxuXTtcblxudmFyIGxleHQgPSBbIC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqL1xuICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCxcbiAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDcyLCA3OFxuXTtcblxudmFyIGRiYXNlID0gWyAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovXG4gIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MyxcbiAgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LFxuICA4MTkzLCAxMjI4OSwgMTYzODUsIDI0NTc3LCAwLCAwXG5dO1xuXG52YXIgZGV4dCA9IFsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgZXh0cmEgKi9cbiAgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTgsIDE4LCAxOSwgMTksIDIwLCAyMCwgMjEsIDIxLCAyMiwgMjIsXG4gIDIzLCAyMywgMjQsIDI0LCAyNSwgMjUsIDI2LCAyNiwgMjcsIDI3LFxuICAyOCwgMjgsIDI5LCAyOSwgNjQsIDY0XG5dO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmxhdGVfdGFibGUodHlwZSwgbGVucywgbGVuc19pbmRleCwgY29kZXMsIHRhYmxlLCB0YWJsZV9pbmRleCwgd29yaywgb3B0cylcbntcbiAgdmFyIGJpdHMgPSBvcHRzLmJpdHM7XG4gICAgICAvL2hlcmUgPSBvcHRzLmhlcmU7IC8qIHRhYmxlIGVudHJ5IGZvciBkdXBsaWNhdGlvbiAqL1xuXG4gIHZhciBsZW4gPSAwOyAgICAgICAgICAgICAgIC8qIGEgY29kZSdzIGxlbmd0aCBpbiBiaXRzICovXG4gIHZhciBzeW0gPSAwOyAgICAgICAgICAgICAgIC8qIGluZGV4IG9mIGNvZGUgc3ltYm9scyAqL1xuICB2YXIgbWluID0gMCwgbWF4ID0gMDsgICAgICAgICAgLyogbWluaW11bSBhbmQgbWF4aW11bSBjb2RlIGxlbmd0aHMgKi9cbiAgdmFyIHJvb3QgPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIHJvb3QgdGFibGUgKi9cbiAgdmFyIGN1cnIgPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIGN1cnJlbnQgdGFibGUgKi9cbiAgdmFyIGRyb3AgPSAwOyAgICAgICAgICAgICAgLyogY29kZSBiaXRzIHRvIGRyb3AgZm9yIHN1Yi10YWJsZSAqL1xuICB2YXIgbGVmdCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBwcmVmaXggY29kZXMgYXZhaWxhYmxlICovXG4gIHZhciB1c2VkID0gMDsgICAgICAgICAgICAgIC8qIGNvZGUgZW50cmllcyBpbiB0YWJsZSB1c2VkICovXG4gIHZhciBodWZmID0gMDsgICAgICAgICAgICAgIC8qIEh1ZmZtYW4gY29kZSAqL1xuICB2YXIgaW5jcjsgICAgICAgICAgICAgIC8qIGZvciBpbmNyZW1lbnRpbmcgY29kZSwgaW5kZXggKi9cbiAgdmFyIGZpbGw7ICAgICAgICAgICAgICAvKiBpbmRleCBmb3IgcmVwbGljYXRpbmcgZW50cmllcyAqL1xuICB2YXIgbG93OyAgICAgICAgICAgICAgIC8qIGxvdyBiaXRzIGZvciBjdXJyZW50IHJvb3QgZW50cnkgKi9cbiAgdmFyIG1hc2s7ICAgICAgICAgICAgICAvKiBtYXNrIGZvciBsb3cgcm9vdCBiaXRzICovXG4gIHZhciBuZXh0OyAgICAgICAgICAgICAvKiBuZXh0IGF2YWlsYWJsZSBzcGFjZSBpbiB0YWJsZSAqL1xuICB2YXIgYmFzZSA9IG51bGw7ICAgICAvKiBiYXNlIHZhbHVlIHRhYmxlIHRvIHVzZSAqL1xuICB2YXIgYmFzZV9pbmRleCA9IDA7XG4vLyAgdmFyIHNob2V4dHJhOyAgICAvKiBleHRyYSBiaXRzIHRhYmxlIHRvIHVzZSAqL1xuICB2YXIgZW5kOyAgICAgICAgICAgICAgICAgICAgLyogdXNlIGJhc2UgYW5kIGV4dHJhIGZvciBzeW1ib2wgPiBlbmQgKi9cbiAgdmFyIGNvdW50ID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWEJJVFMgKyAxKTsgLy9bTUFYQklUUysxXTsgICAgLyogbnVtYmVyIG9mIGNvZGVzIG9mIGVhY2ggbGVuZ3RoICovXG4gIHZhciBvZmZzID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWEJJVFMgKyAxKTsgLy9bTUFYQklUUysxXTsgICAgIC8qIG9mZnNldHMgaW4gdGFibGUgZm9yIGVhY2ggbGVuZ3RoICovXG4gIHZhciBleHRyYSA9IG51bGw7XG4gIHZhciBleHRyYV9pbmRleCA9IDA7XG5cbiAgdmFyIGhlcmVfYml0cywgaGVyZV9vcCwgaGVyZV92YWw7XG5cbiAgLypcbiAgIFByb2Nlc3MgYSBzZXQgb2YgY29kZSBsZW5ndGhzIHRvIGNyZWF0ZSBhIGNhbm9uaWNhbCBIdWZmbWFuIGNvZGUuICBUaGVcbiAgIGNvZGUgbGVuZ3RocyBhcmUgbGVuc1swLi5jb2Rlcy0xXS4gIEVhY2ggbGVuZ3RoIGNvcnJlc3BvbmRzIHRvIHRoZVxuICAgc3ltYm9scyAwLi5jb2Rlcy0xLiAgVGhlIEh1ZmZtYW4gY29kZSBpcyBnZW5lcmF0ZWQgYnkgZmlyc3Qgc29ydGluZyB0aGVcbiAgIHN5bWJvbHMgYnkgbGVuZ3RoIGZyb20gc2hvcnQgdG8gbG9uZywgYW5kIHJldGFpbmluZyB0aGUgc3ltYm9sIG9yZGVyXG4gICBmb3IgY29kZXMgd2l0aCBlcXVhbCBsZW5ndGhzLiAgVGhlbiB0aGUgY29kZSBzdGFydHMgd2l0aCBhbGwgemVybyBiaXRzXG4gICBmb3IgdGhlIGZpcnN0IGNvZGUgb2YgdGhlIHNob3J0ZXN0IGxlbmd0aCwgYW5kIHRoZSBjb2RlcyBhcmUgaW50ZWdlclxuICAgaW5jcmVtZW50cyBmb3IgdGhlIHNhbWUgbGVuZ3RoLCBhbmQgemVyb3MgYXJlIGFwcGVuZGVkIGFzIHRoZSBsZW5ndGhcbiAgIGluY3JlYXNlcy4gIEZvciB0aGUgZGVmbGF0ZSBmb3JtYXQsIHRoZXNlIGJpdHMgYXJlIHN0b3JlZCBiYWNrd2FyZHNcbiAgIGZyb20gdGhlaXIgbW9yZSBuYXR1cmFsIGludGVnZXIgaW5jcmVtZW50IG9yZGVyaW5nLCBhbmQgc28gd2hlbiB0aGVcbiAgIGRlY29kaW5nIHRhYmxlcyBhcmUgYnVpbHQgaW4gdGhlIGxhcmdlIGxvb3AgYmVsb3csIHRoZSBpbnRlZ2VyIGNvZGVzXG4gICBhcmUgaW5jcmVtZW50ZWQgYmFja3dhcmRzLlxuXG4gICBUaGlzIHJvdXRpbmUgYXNzdW1lcywgYnV0IGRvZXMgbm90IGNoZWNrLCB0aGF0IGFsbCBvZiB0aGUgZW50cmllcyBpblxuICAgbGVuc1tdIGFyZSBpbiB0aGUgcmFuZ2UgMC4uTUFYQklUUy4gIFRoZSBjYWxsZXIgbXVzdCBhc3N1cmUgdGhpcy5cbiAgIDEuLk1BWEJJVFMgaXMgaW50ZXJwcmV0ZWQgYXMgdGhhdCBjb2RlIGxlbmd0aC4gIHplcm8gbWVhbnMgdGhhdCB0aGF0XG4gICBzeW1ib2wgZG9lcyBub3Qgb2NjdXIgaW4gdGhpcyBjb2RlLlxuXG4gICBUaGUgY29kZXMgYXJlIHNvcnRlZCBieSBjb21wdXRpbmcgYSBjb3VudCBvZiBjb2RlcyBmb3IgZWFjaCBsZW5ndGgsXG4gICBjcmVhdGluZyBmcm9tIHRoYXQgYSB0YWJsZSBvZiBzdGFydGluZyBpbmRpY2VzIGZvciBlYWNoIGxlbmd0aCBpbiB0aGVcbiAgIHNvcnRlZCB0YWJsZSwgYW5kIHRoZW4gZW50ZXJpbmcgdGhlIHN5bWJvbHMgaW4gb3JkZXIgaW4gdGhlIHNvcnRlZFxuICAgdGFibGUuICBUaGUgc29ydGVkIHRhYmxlIGlzIHdvcmtbXSwgd2l0aCB0aGF0IHNwYWNlIGJlaW5nIHByb3ZpZGVkIGJ5XG4gICB0aGUgY2FsbGVyLlxuXG4gICBUaGUgbGVuZ3RoIGNvdW50cyBhcmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMgYXMgd2VsbCwgaS5lLiBmaW5kaW5nXG4gICB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBsZW5ndGggY29kZXMsIGRldGVybWluaW5nIGlmIHRoZXJlIGFyZSBhbnlcbiAgIGNvZGVzIGF0IGFsbCwgY2hlY2tpbmcgZm9yIGEgdmFsaWQgc2V0IG9mIGxlbmd0aHMsIGFuZCBsb29raW5nIGFoZWFkXG4gICBhdCBsZW5ndGggY291bnRzIHRvIGRldGVybWluZSBzdWItdGFibGUgc2l6ZXMgd2hlbiBidWlsZGluZyB0aGVcbiAgIGRlY29kaW5nIHRhYmxlcy5cbiAgICovXG5cbiAgLyogYWNjdW11bGF0ZSBsZW5ndGhzIGZvciBjb2RlcyAoYXNzdW1lcyBsZW5zW10gYWxsIGluIDAuLk1BWEJJVFMpICovXG4gIGZvciAobGVuID0gMDsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7XG4gICAgY291bnRbbGVuXSA9IDA7XG4gIH1cbiAgZm9yIChzeW0gPSAwOyBzeW0gPCBjb2Rlczsgc3ltKyspIHtcbiAgICBjb3VudFtsZW5zW2xlbnNfaW5kZXggKyBzeW1dXSsrO1xuICB9XG5cbiAgLyogYm91bmQgY29kZSBsZW5ndGhzLCBmb3JjZSByb290IHRvIGJlIHdpdGhpbiBjb2RlIGxlbmd0aHMgKi9cbiAgcm9vdCA9IGJpdHM7XG4gIGZvciAobWF4ID0gTUFYQklUUzsgbWF4ID49IDE7IG1heC0tKSB7XG4gICAgaWYgKGNvdW50W21heF0gIT09IDApIHsgYnJlYWs7IH1cbiAgfVxuICBpZiAocm9vdCA+IG1heCkge1xuICAgIHJvb3QgPSBtYXg7XG4gIH1cbiAgaWYgKG1heCA9PT0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHN5bWJvbHMgdG8gY29kZSBhdCBhbGwgKi9cbiAgICAvL3RhYmxlLm9wW29wdHMudGFibGVfaW5kZXhdID0gNjQ7ICAvL2hlcmUub3AgPSAodmFyIGNoYXIpNjQ7ICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi9cbiAgICAvL3RhYmxlLmJpdHNbb3B0cy50YWJsZV9pbmRleF0gPSAxOyAgIC8vaGVyZS5iaXRzID0gKHZhciBjaGFyKTE7XG4gICAgLy90YWJsZS52YWxbb3B0cy50YWJsZV9pbmRleCsrXSA9IDA7ICAgLy9oZXJlLnZhbCA9ICh2YXIgc2hvcnQpMDtcbiAgICB0YWJsZVt0YWJsZV9pbmRleCsrXSA9ICgxIDw8IDI0KSB8ICg2NCA8PCAxNikgfCAwO1xuXG5cbiAgICAvL3RhYmxlLm9wW29wdHMudGFibGVfaW5kZXhdID0gNjQ7XG4gICAgLy90YWJsZS5iaXRzW29wdHMudGFibGVfaW5kZXhdID0gMTtcbiAgICAvL3RhYmxlLnZhbFtvcHRzLnRhYmxlX2luZGV4KytdID0gMDtcbiAgICB0YWJsZVt0YWJsZV9pbmRleCsrXSA9ICgxIDw8IDI0KSB8ICg2NCA8PCAxNikgfCAwO1xuXG4gICAgb3B0cy5iaXRzID0gMTtcbiAgICByZXR1cm4gMDsgICAgIC8qIG5vIHN5bWJvbHMsIGJ1dCB3YWl0IGZvciBkZWNvZGluZyB0byByZXBvcnQgZXJyb3IgKi9cbiAgfVxuICBmb3IgKG1pbiA9IDE7IG1pbiA8IG1heDsgbWluKyspIHtcbiAgICBpZiAoY291bnRbbWluXSAhPT0gMCkgeyBicmVhazsgfVxuICB9XG4gIGlmIChyb290IDwgbWluKSB7XG4gICAgcm9vdCA9IG1pbjtcbiAgfVxuXG4gIC8qIGNoZWNrIGZvciBhbiBvdmVyLXN1YnNjcmliZWQgb3IgaW5jb21wbGV0ZSBzZXQgb2YgbGVuZ3RocyAqL1xuICBsZWZ0ID0gMTtcbiAgZm9yIChsZW4gPSAxOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHtcbiAgICBsZWZ0IDw8PSAxO1xuICAgIGxlZnQgLT0gY291bnRbbGVuXTtcbiAgICBpZiAobGVmdCA8IDApIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9ICAgICAgICAvKiBvdmVyLXN1YnNjcmliZWQgKi9cbiAgfVxuICBpZiAobGVmdCA+IDAgJiYgKHR5cGUgPT09IENPREVTIHx8IG1heCAhPT0gMSkpIHtcbiAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgIC8qIGluY29tcGxldGUgc2V0ICovXG4gIH1cblxuICAvKiBnZW5lcmF0ZSBvZmZzZXRzIGludG8gc3ltYm9sIHRhYmxlIGZvciBlYWNoIGxlbmd0aCBmb3Igc29ydGluZyAqL1xuICBvZmZzWzFdID0gMDtcbiAgZm9yIChsZW4gPSAxOyBsZW4gPCBNQVhCSVRTOyBsZW4rKykge1xuICAgIG9mZnNbbGVuICsgMV0gPSBvZmZzW2xlbl0gKyBjb3VudFtsZW5dO1xuICB9XG5cbiAgLyogc29ydCBzeW1ib2xzIGJ5IGxlbmd0aCwgYnkgc3ltYm9sIG9yZGVyIHdpdGhpbiBlYWNoIGxlbmd0aCAqL1xuICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykge1xuICAgIGlmIChsZW5zW2xlbnNfaW5kZXggKyBzeW1dICE9PSAwKSB7XG4gICAgICB3b3JrW29mZnNbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rK10gPSBzeW07XG4gICAgfVxuICB9XG5cbiAgLypcbiAgIENyZWF0ZSBhbmQgZmlsbCBpbiBkZWNvZGluZyB0YWJsZXMuICBJbiB0aGlzIGxvb3AsIHRoZSB0YWJsZSBiZWluZ1xuICAgZmlsbGVkIGlzIGF0IG5leHQgYW5kIGhhcyBjdXJyIGluZGV4IGJpdHMuICBUaGUgY29kZSBiZWluZyB1c2VkIGlzIGh1ZmZcbiAgIHdpdGggbGVuZ3RoIGxlbi4gIFRoYXQgY29kZSBpcyBjb252ZXJ0ZWQgdG8gYW4gaW5kZXggYnkgZHJvcHBpbmcgZHJvcFxuICAgYml0cyBvZmYgb2YgdGhlIGJvdHRvbS4gIEZvciBjb2RlcyB3aGVyZSBsZW4gaXMgbGVzcyB0aGFuIGRyb3AgKyBjdXJyLFxuICAgdGhvc2UgdG9wIGRyb3AgKyBjdXJyIC0gbGVuIGJpdHMgYXJlIGluY3JlbWVudGVkIHRocm91Z2ggYWxsIHZhbHVlcyB0b1xuICAgZmlsbCB0aGUgdGFibGUgd2l0aCByZXBsaWNhdGVkIGVudHJpZXMuXG5cbiAgIHJvb3QgaXMgdGhlIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciB0aGUgcm9vdCB0YWJsZS4gIFdoZW4gbGVuIGV4Y2VlZHNcbiAgIHJvb3QsIHN1Yi10YWJsZXMgYXJlIGNyZWF0ZWQgcG9pbnRlZCB0byBieSB0aGUgcm9vdCBlbnRyeSB3aXRoIGFuIGluZGV4XG4gICBvZiB0aGUgbG93IHJvb3QgYml0cyBvZiBodWZmLiAgVGhpcyBpcyBzYXZlZCBpbiBsb3cgdG8gY2hlY2sgZm9yIHdoZW4gYVxuICAgbmV3IHN1Yi10YWJsZSBzaG91bGQgYmUgc3RhcnRlZC4gIGRyb3AgaXMgemVybyB3aGVuIHRoZSByb290IHRhYmxlIGlzXG4gICBiZWluZyBmaWxsZWQsIGFuZCBkcm9wIGlzIHJvb3Qgd2hlbiBzdWItdGFibGVzIGFyZSBiZWluZyBmaWxsZWQuXG5cbiAgIFdoZW4gYSBuZXcgc3ViLXRhYmxlIGlzIG5lZWRlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGxvb2sgYWhlYWQgaW4gdGhlXG4gICBjb2RlIGxlbmd0aHMgdG8gZGV0ZXJtaW5lIHdoYXQgc2l6ZSBzdWItdGFibGUgaXMgbmVlZGVkLiAgVGhlIGxlbmd0aFxuICAgY291bnRzIGFyZSB1c2VkIGZvciB0aGlzLCBhbmQgc28gY291bnRbXSBpcyBkZWNyZW1lbnRlZCBhcyBjb2RlcyBhcmVcbiAgIGVudGVyZWQgaW4gdGhlIHRhYmxlcy5cblxuICAgdXNlZCBrZWVwcyB0cmFjayBvZiBob3cgbWFueSB0YWJsZSBlbnRyaWVzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB0aGVcbiAgIHByb3ZpZGVkICp0YWJsZSBzcGFjZS4gIEl0IGlzIGNoZWNrZWQgZm9yIExFTlMgYW5kIERJU1QgdGFibGVzIGFnYWluc3RcbiAgIHRoZSBjb25zdGFudHMgRU5PVUdIX0xFTlMgYW5kIEVOT1VHSF9ESVNUUyB0byBndWFyZCBhZ2FpbnN0IGNoYW5nZXMgaW5cbiAgIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSBjb25zdGFudHMuICBTZWUgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmhcbiAgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG4gICBzeW0gaW5jcmVtZW50cyB0aHJvdWdoIGFsbCBzeW1ib2xzLCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcyB3aGVuXG4gICBhbGwgY29kZXMgb2YgbGVuZ3RoIG1heCwgaS5lLiBhbGwgY29kZXMsIGhhdmUgYmVlbiBwcm9jZXNzZWQuICBUaGlzXG4gICByb3V0aW5lIHBlcm1pdHMgaW5jb21wbGV0ZSBjb2Rlcywgc28gYW5vdGhlciBsb29wIGFmdGVyIHRoaXMgb25lIGZpbGxzXG4gICBpbiB0aGUgcmVzdCBvZiB0aGUgZGVjb2RpbmcgdGFibGVzIHdpdGggaW52YWxpZCBjb2RlIG1hcmtlcnMuXG4gICAqL1xuXG4gIC8qIHNldCB1cCBmb3IgY29kZSB0eXBlICovXG4gIC8vIHBvb3IgbWFuIG9wdGltaXphdGlvbiAtIHVzZSBpZi1lbHNlIGluc3RlYWQgb2Ygc3dpdGNoLFxuICAvLyB0byBhdm9pZCBkZW9wdHMgaW4gb2xkIHY4XG4gIGlmICh0eXBlID09PSBDT0RFUykge1xuICAgIGJhc2UgPSBleHRyYSA9IHdvcms7ICAgIC8qIGR1bW15IHZhbHVlLS1ub3QgdXNlZCAqL1xuICAgIGVuZCA9IDE5O1xuXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTEVOUykge1xuICAgIGJhc2UgPSBsYmFzZTtcbiAgICBiYXNlX2luZGV4IC09IDI1NztcbiAgICBleHRyYSA9IGxleHQ7XG4gICAgZXh0cmFfaW5kZXggLT0gMjU3O1xuICAgIGVuZCA9IDI1NjtcblxuICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogRElTVFMgKi9cbiAgICBiYXNlID0gZGJhc2U7XG4gICAgZXh0cmEgPSBkZXh0O1xuICAgIGVuZCA9IC0xO1xuICB9XG5cbiAgLyogaW5pdGlhbGl6ZSBvcHRzIGZvciBsb29wICovXG4gIGh1ZmYgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlICovXG4gIHN5bSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlIHN5bWJvbCAqL1xuICBsZW4gPSBtaW47ICAgICAgICAgICAgICAgICAgLyogc3RhcnRpbmcgY29kZSBsZW5ndGggKi9cbiAgbmV4dCA9IHRhYmxlX2luZGV4OyAgICAgICAgICAgICAgLyogY3VycmVudCB0YWJsZSB0byBmaWxsIGluICovXG4gIGN1cnIgPSByb290OyAgICAgICAgICAgICAgICAvKiBjdXJyZW50IHRhYmxlIGluZGV4IGJpdHMgKi9cbiAgZHJvcCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgYml0cyB0byBkcm9wIGZyb20gY29kZSBmb3IgaW5kZXggKi9cbiAgbG93ID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIHRyaWdnZXIgbmV3IHN1Yi10YWJsZSB3aGVuIGxlbiA+IHJvb3QgKi9cbiAgdXNlZCA9IDEgPDwgcm9vdDsgICAgICAgICAgLyogdXNlIHJvb3QgdGFibGUgZW50cmllcyAqL1xuICBtYXNrID0gdXNlZCAtIDE7ICAgICAgICAgICAgLyogbWFzayBmb3IgY29tcGFyaW5nIGxvdyAqL1xuXG4gIC8qIGNoZWNrIGF2YWlsYWJsZSB0YWJsZSBzcGFjZSAqL1xuICBpZiAoKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fFxuICAgICh0eXBlID09PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgLyogcHJvY2VzcyBhbGwgY29kZXMgYW5kIG1ha2UgdGFibGUgZW50cmllcyAqL1xuICBmb3IgKDs7KSB7XG4gICAgLyogY3JlYXRlIHRhYmxlIGVudHJ5ICovXG4gICAgaGVyZV9iaXRzID0gbGVuIC0gZHJvcDtcbiAgICBpZiAod29ya1tzeW1dIDwgZW5kKSB7XG4gICAgICBoZXJlX29wID0gMDtcbiAgICAgIGhlcmVfdmFsID0gd29ya1tzeW1dO1xuICAgIH1cbiAgICBlbHNlIGlmICh3b3JrW3N5bV0gPiBlbmQpIHtcbiAgICAgIGhlcmVfb3AgPSBleHRyYVtleHRyYV9pbmRleCArIHdvcmtbc3ltXV07XG4gICAgICBoZXJlX3ZhbCA9IGJhc2VbYmFzZV9pbmRleCArIHdvcmtbc3ltXV07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaGVyZV9vcCA9IDMyICsgNjQ7ICAgICAgICAgLyogZW5kIG9mIGJsb2NrICovXG4gICAgICBoZXJlX3ZhbCA9IDA7XG4gICAgfVxuXG4gICAgLyogcmVwbGljYXRlIGZvciB0aG9zZSBpbmRpY2VzIHdpdGggbG93IGxlbiBiaXRzIGVxdWFsIHRvIGh1ZmYgKi9cbiAgICBpbmNyID0gMSA8PCAobGVuIC0gZHJvcCk7XG4gICAgZmlsbCA9IDEgPDwgY3VycjtcbiAgICBtaW4gPSBmaWxsOyAgICAgICAgICAgICAgICAgLyogc2F2ZSBvZmZzZXQgdG8gbmV4dCB0YWJsZSAqL1xuICAgIGRvIHtcbiAgICAgIGZpbGwgLT0gaW5jcjtcbiAgICAgIHRhYmxlW25leHQgKyAoaHVmZiA+PiBkcm9wKSArIGZpbGxdID0gKGhlcmVfYml0cyA8PCAyNCkgfCAoaGVyZV9vcCA8PCAxNikgfCBoZXJlX3ZhbCB8MDtcbiAgICB9IHdoaWxlIChmaWxsICE9PSAwKTtcblxuICAgIC8qIGJhY2t3YXJkcyBpbmNyZW1lbnQgdGhlIGxlbi1iaXQgY29kZSBodWZmICovXG4gICAgaW5jciA9IDEgPDwgKGxlbiAtIDEpO1xuICAgIHdoaWxlIChodWZmICYgaW5jcikge1xuICAgICAgaW5jciA+Pj0gMTtcbiAgICB9XG4gICAgaWYgKGluY3IgIT09IDApIHtcbiAgICAgIGh1ZmYgJj0gaW5jciAtIDE7XG4gICAgICBodWZmICs9IGluY3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh1ZmYgPSAwO1xuICAgIH1cblxuICAgIC8qIGdvIHRvIG5leHQgc3ltYm9sLCB1cGRhdGUgY291bnQsIGxlbiAqL1xuICAgIHN5bSsrO1xuICAgIGlmICgtLWNvdW50W2xlbl0gPT09IDApIHtcbiAgICAgIGlmIChsZW4gPT09IG1heCkgeyBicmVhazsgfVxuICAgICAgbGVuID0gbGVuc1tsZW5zX2luZGV4ICsgd29ya1tzeW1dXTtcbiAgICB9XG5cbiAgICAvKiBjcmVhdGUgbmV3IHN1Yi10YWJsZSBpZiBuZWVkZWQgKi9cbiAgICBpZiAobGVuID4gcm9vdCAmJiAoaHVmZiAmIG1hc2spICE9PSBsb3cpIHtcbiAgICAgIC8qIGlmIGZpcnN0IHRpbWUsIHRyYW5zaXRpb24gdG8gc3ViLXRhYmxlcyAqL1xuICAgICAgaWYgKGRyb3AgPT09IDApIHtcbiAgICAgICAgZHJvcCA9IHJvb3Q7XG4gICAgICB9XG5cbiAgICAgIC8qIGluY3JlbWVudCBwYXN0IGxhc3QgdGFibGUgKi9cbiAgICAgIG5leHQgKz0gbWluOyAgICAgICAgICAgIC8qIGhlcmUgbWluIGlzIDEgPDwgY3VyciAqL1xuXG4gICAgICAvKiBkZXRlcm1pbmUgbGVuZ3RoIG9mIG5leHQgdGFibGUgKi9cbiAgICAgIGN1cnIgPSBsZW4gLSBkcm9wO1xuICAgICAgbGVmdCA9IDEgPDwgY3VycjtcbiAgICAgIHdoaWxlIChjdXJyICsgZHJvcCA8IG1heCkge1xuICAgICAgICBsZWZ0IC09IGNvdW50W2N1cnIgKyBkcm9wXTtcbiAgICAgICAgaWYgKGxlZnQgPD0gMCkgeyBicmVhazsgfVxuICAgICAgICBjdXJyKys7XG4gICAgICAgIGxlZnQgPDw9IDE7XG4gICAgICB9XG5cbiAgICAgIC8qIGNoZWNrIGZvciBlbm91Z2ggc3BhY2UgKi9cbiAgICAgIHVzZWQgKz0gMSA8PCBjdXJyO1xuICAgICAgaWYgKCh0eXBlID09PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykgfHxcbiAgICAgICAgKHR5cGUgPT09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICAvKiBwb2ludCBlbnRyeSBpbiByb290IHRhYmxlIHRvIHN1Yi10YWJsZSAqL1xuICAgICAgbG93ID0gaHVmZiAmIG1hc2s7XG4gICAgICAvKnRhYmxlLm9wW2xvd10gPSBjdXJyO1xuICAgICAgdGFibGUuYml0c1tsb3ddID0gcm9vdDtcbiAgICAgIHRhYmxlLnZhbFtsb3ddID0gbmV4dCAtIG9wdHMudGFibGVfaW5kZXg7Ki9cbiAgICAgIHRhYmxlW2xvd10gPSAocm9vdCA8PCAyNCkgfCAoY3VyciA8PCAxNikgfCAobmV4dCAtIHRhYmxlX2luZGV4KSB8MDtcbiAgICB9XG4gIH1cblxuICAvKiBmaWxsIGluIHJlbWFpbmluZyB0YWJsZSBlbnRyeSBpZiBjb2RlIGlzIGluY29tcGxldGUgKGd1YXJhbnRlZWQgdG8gaGF2ZVxuICAgYXQgbW9zdCBvbmUgcmVtYWluaW5nIGVudHJ5LCBzaW5jZSBpZiB0aGUgY29kZSBpcyBpbmNvbXBsZXRlLCB0aGVcbiAgIG1heGltdW0gY29kZSBsZW5ndGggdGhhdCB3YXMgYWxsb3dlZCB0byBnZXQgdGhpcyBmYXIgaXMgb25lIGJpdCkgKi9cbiAgaWYgKGh1ZmYgIT09IDApIHtcbiAgICAvL3RhYmxlLm9wW25leHQgKyBodWZmXSA9IDY0OyAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi9cbiAgICAvL3RhYmxlLmJpdHNbbmV4dCArIGh1ZmZdID0gbGVuIC0gZHJvcDtcbiAgICAvL3RhYmxlLnZhbFtuZXh0ICsgaHVmZl0gPSAwO1xuICAgIHRhYmxlW25leHQgKyBodWZmXSA9ICgobGVuIC0gZHJvcCkgPDwgMjQpIHwgKDY0IDw8IDE2KSB8MDtcbiAgfVxuXG4gIC8qIHNldCByZXR1cm4gcGFyYW1ldGVycyAqL1xuICAvL29wdHMudGFibGVfaW5kZXggKz0gdXNlZDtcbiAgb3B0cy5iaXRzID0gcm9vdDtcbiAgcmV0dXJuIDA7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4ODk4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAyOiAgICAgICduZWVkIGRpY3Rpb25hcnknLCAgICAgLyogWl9ORUVEX0RJQ1QgICAgICAgMiAgKi9cbiAgMTogICAgICAnc3RyZWFtIGVuZCcsICAgICAgICAgIC8qIFpfU1RSRUFNX0VORCAgICAgIDEgICovXG4gIDA6ICAgICAgJycsICAgICAgICAgICAgICAgICAgICAvKiBaX09LICAgICAgICAgICAgICAwICAqL1xuICAnLTEnOiAgICdmaWxlIGVycm9yJywgICAgICAgICAgLyogWl9FUlJOTyAgICAgICAgICgtMSkgKi9cbiAgJy0yJzogICAnc3RyZWFtIGVycm9yJywgICAgICAgIC8qIFpfU1RSRUFNX0VSUk9SICAoLTIpICovXG4gICctMyc6ICAgJ2RhdGEgZXJyb3InLCAgICAgICAgICAvKiBaX0RBVEFfRVJST1IgICAgKC0zKSAqL1xuICAnLTQnOiAgICdpbnN1ZmZpY2llbnQgbWVtb3J5JywgLyogWl9NRU1fRVJST1IgICAgICgtNCkgKi9cbiAgJy01JzogICAnYnVmZmVyIGVycm9yJywgICAgICAgIC8qIFpfQlVGX0VSUk9SICAgICAoLTUpICovXG4gICctNic6ICAgJ2luY29tcGF0aWJsZSB2ZXJzaW9uJyAvKiBaX1ZFUlNJT05fRVJST1IgKC02KSAqL1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzQyOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxuLyogZXNsaW50LWRpc2FibGUgc3BhY2UtdW5hcnktb3BzICovXG5cbnZhciB1dGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIzNik7XG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbi8vdmFyIFpfRklMVEVSRUQgICAgICAgICAgPSAxO1xuLy92YXIgWl9IVUZGTUFOX09OTFkgICAgICA9IDI7XG4vL3ZhciBaX1JMRSAgICAgICAgICAgICAgID0gMztcbnZhciBaX0ZJWEVEICAgICAgICAgICAgICAgPSA0O1xuLy92YXIgWl9ERUZBVUxUX1NUUkFURUdZICA9IDA7XG5cbi8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbnZhciBaX0JJTkFSWSAgICAgICAgICAgICAgPSAwO1xudmFyIFpfVEVYVCAgICAgICAgICAgICAgICA9IDE7XG4vL3ZhciBaX0FTQ0lJICAgICAgICAgICAgID0gMTsgLy8gPSBaX1RFWFRcbnZhciBaX1VOS05PV04gICAgICAgICAgICAgPSAyO1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbmZ1bmN0aW9uIHplcm8oYnVmKSB7IHZhciBsZW4gPSBidWYubGVuZ3RoOyB3aGlsZSAoLS1sZW4gPj0gMCkgeyBidWZbbGVuXSA9IDA7IH0gfVxuXG4vLyBGcm9tIHp1dGlsLmhcblxudmFyIFNUT1JFRF9CTE9DSyA9IDA7XG52YXIgU1RBVElDX1RSRUVTID0gMTtcbnZhciBEWU5fVFJFRVMgICAgPSAyO1xuLyogVGhlIHRocmVlIGtpbmRzIG9mIGJsb2NrIHR5cGUgKi9cblxudmFyIE1JTl9NQVRDSCAgICA9IDM7XG52YXIgTUFYX01BVENIICAgID0gMjU4O1xuLyogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gbWF0Y2ggbGVuZ3RocyAqL1xuXG4vLyBGcm9tIGRlZmxhdGUuaFxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS5cbiAqL1xuXG52YXIgTEVOR1RIX0NPREVTICA9IDI5O1xuLyogbnVtYmVyIG9mIGxlbmd0aCBjb2Rlcywgbm90IGNvdW50aW5nIHRoZSBzcGVjaWFsIEVORF9CTE9DSyBjb2RlICovXG5cbnZhciBMSVRFUkFMUyAgICAgID0gMjU2O1xuLyogbnVtYmVyIG9mIGxpdGVyYWwgYnl0ZXMgMC4uMjU1ICovXG5cbnZhciBMX0NPREVTICAgICAgID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTO1xuLyogbnVtYmVyIG9mIExpdGVyYWwgb3IgTGVuZ3RoIGNvZGVzLCBpbmNsdWRpbmcgdGhlIEVORF9CTE9DSyBjb2RlICovXG5cbnZhciBEX0NPREVTICAgICAgID0gMzA7XG4vKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi9cblxudmFyIEJMX0NPREVTICAgICAgPSAxOTtcbi8qIG51bWJlciBvZiBjb2RlcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBiaXQgbGVuZ3RocyAqL1xuXG52YXIgSEVBUF9TSVpFICAgICA9IDIgKiBMX0NPREVTICsgMTtcbi8qIG1heGltdW0gaGVhcCBzaXplICovXG5cbnZhciBNQVhfQklUUyAgICAgID0gMTU7XG4vKiBBbGwgY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CSVRTIGJpdHMgKi9cblxudmFyIEJ1Zl9zaXplICAgICAgPSAxNjtcbi8qIHNpemUgb2YgYml0IGJ1ZmZlciBpbiBiaV9idWYgKi9cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbnN0YW50c1xuICovXG5cbnZhciBNQVhfQkxfQklUUyA9IDc7XG4vKiBCaXQgbGVuZ3RoIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQkxfQklUUyBiaXRzICovXG5cbnZhciBFTkRfQkxPQ0sgICA9IDI1Njtcbi8qIGVuZCBvZiBibG9jayBsaXRlcmFsIGNvZGUgKi9cblxudmFyIFJFUF8zXzYgICAgID0gMTY7XG4vKiByZXBlYXQgcHJldmlvdXMgYml0IGxlbmd0aCAzLTYgdGltZXMgKDIgYml0cyBvZiByZXBlYXQgY291bnQpICovXG5cbnZhciBSRVBaXzNfMTAgICA9IDE3O1xuLyogcmVwZWF0IGEgemVybyBsZW5ndGggMy0xMCB0aW1lcyAgKDMgYml0cyBvZiByZXBlYXQgY291bnQpICovXG5cbnZhciBSRVBaXzExXzEzOCA9IDE4O1xuLyogcmVwZWF0IGEgemVybyBsZW5ndGggMTEtMTM4IHRpbWVzICAoNyBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi9cblxuLyogZXNsaW50LWRpc2FibGUgY29tbWEtc3BhY2luZyxhcnJheS1icmFja2V0LXNwYWNpbmcgKi9cbnZhciBleHRyYV9sYml0cyA9ICAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBsZW5ndGggY29kZSAqL1xuICBbMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXTtcblxudmFyIGV4dHJhX2RiaXRzID0gICAvKiBleHRyYSBiaXRzIGZvciBlYWNoIGRpc3RhbmNlIGNvZGUgKi9cbiAgWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdO1xuXG52YXIgZXh0cmFfYmxiaXRzID0gIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggYml0IGxlbmd0aCBjb2RlICovXG4gIFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XTtcblxudmFyIGJsX29yZGVyID1cbiAgWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO1xuLyogZXNsaW50LWVuYWJsZSBjb21tYS1zcGFjaW5nLGFycmF5LWJyYWNrZXQtc3BhY2luZyAqL1xuXG4vKiBUaGUgbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcyBhcmUgc2VudCBpbiBvcmRlciBvZiBkZWNyZWFzaW5nXG4gKiBwcm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhzIGZvciB1bnVzZWQgYml0IGxlbmd0aCBjb2Rlcy5cbiAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuXG4gKi9cblxuLy8gV2UgcHJlLWZpbGwgYXJyYXlzIHdpdGggMCB0byBhdm9pZCB1bmluaXRpYWxpemVkIGdhcHNcblxudmFyIERJU1RfQ09ERV9MRU4gPSA1MTI7IC8qIHNlZSBkZWZpbml0aW9uIG9mIGFycmF5IGRpc3RfY29kZSBiZWxvdyAqL1xuXG4vLyAhISEhIFVzZSBmbGF0IGFycmF5IGluc3RlYWQgb2Ygc3RydWN0dXJlLCBGcmVxID0gaSoyLCBMZW4gPSBpKjIrMVxudmFyIHN0YXRpY19sdHJlZSAgPSBuZXcgQXJyYXkoKExfQ09ERVMgKyAyKSAqIDIpO1xuemVybyhzdGF0aWNfbHRyZWUpO1xuLyogVGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUuIFNpbmNlIHRoZSBiaXQgbGVuZ3RocyBhcmUgaW1wb3NlZCwgdGhlcmUgaXMgbm9cbiAqIG5lZWQgZm9yIHRoZSBMX0NPREVTIGV4dHJhIGNvZGVzIHVzZWQgZHVyaW5nIGhlYXAgY29uc3RydWN0aW9uLiBIb3dldmVyXG4gKiBUaGUgY29kZXMgMjg2IGFuZCAyODcgYXJlIG5lZWRlZCB0byBidWlsZCBhIGNhbm9uaWNhbCB0cmVlIChzZWUgX3RyX2luaXRcbiAqIGJlbG93KS5cbiAqL1xuXG52YXIgc3RhdGljX2R0cmVlICA9IG5ldyBBcnJheShEX0NPREVTICogMik7XG56ZXJvKHN0YXRpY19kdHJlZSk7XG4vKiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUuIChBY3R1YWxseSBhIHRyaXZpYWwgdHJlZSBzaW5jZSBhbGwgY29kZXMgdXNlXG4gKiA1IGJpdHMuKVxuICovXG5cbnZhciBfZGlzdF9jb2RlICAgID0gbmV3IEFycmF5KERJU1RfQ09ERV9MRU4pO1xuemVybyhfZGlzdF9jb2RlKTtcbi8qIERpc3RhbmNlIGNvZGVzLiBUaGUgZmlyc3QgMjU2IHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSBkaXN0YW5jZXNcbiAqIDMgLi4gMjU4LCB0aGUgbGFzdCAyNTYgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIHRvcCA4IGJpdHMgb2ZcbiAqIHRoZSAxNSBiaXQgZGlzdGFuY2VzLlxuICovXG5cbnZhciBfbGVuZ3RoX2NvZGUgID0gbmV3IEFycmF5KE1BWF9NQVRDSCAtIE1JTl9NQVRDSCArIDEpO1xuemVybyhfbGVuZ3RoX2NvZGUpO1xuLyogbGVuZ3RoIGNvZGUgZm9yIGVhY2ggbm9ybWFsaXplZCBtYXRjaCBsZW5ndGggKDAgPT0gTUlOX01BVENIKSAqL1xuXG52YXIgYmFzZV9sZW5ndGggICA9IG5ldyBBcnJheShMRU5HVEhfQ09ERVMpO1xuemVybyhiYXNlX2xlbmd0aCk7XG4vKiBGaXJzdCBub3JtYWxpemVkIGxlbmd0aCBmb3IgZWFjaCBjb2RlICgwID0gTUlOX01BVENIKSAqL1xuXG52YXIgYmFzZV9kaXN0ICAgICA9IG5ldyBBcnJheShEX0NPREVTKTtcbnplcm8oYmFzZV9kaXN0KTtcbi8qIEZpcnN0IG5vcm1hbGl6ZWQgZGlzdGFuY2UgZm9yIGVhY2ggY29kZSAoMCA9IGRpc3RhbmNlIG9mIDEpICovXG5cblxuZnVuY3Rpb24gU3RhdGljVHJlZURlc2Moc3RhdGljX3RyZWUsIGV4dHJhX2JpdHMsIGV4dHJhX2Jhc2UsIGVsZW1zLCBtYXhfbGVuZ3RoKSB7XG5cbiAgdGhpcy5zdGF0aWNfdHJlZSAgPSBzdGF0aWNfdHJlZTsgIC8qIHN0YXRpYyB0cmVlIG9yIE5VTEwgKi9cbiAgdGhpcy5leHRyYV9iaXRzICAgPSBleHRyYV9iaXRzOyAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggY29kZSBvciBOVUxMICovXG4gIHRoaXMuZXh0cmFfYmFzZSAgID0gZXh0cmFfYmFzZTsgICAvKiBiYXNlIGluZGV4IGZvciBleHRyYV9iaXRzICovXG4gIHRoaXMuZWxlbXMgICAgICAgID0gZWxlbXM7ICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0cmVlICovXG4gIHRoaXMubWF4X2xlbmd0aCAgID0gbWF4X2xlbmd0aDsgICAvKiBtYXggYml0IGxlbmd0aCBmb3IgdGhlIGNvZGVzICovXG5cbiAgLy8gc2hvdyBpZiBgc3RhdGljX3RyZWVgIGhhcyBkYXRhIG9yIGR1bW15IC0gbmVlZGVkIGZvciBtb25vbW9ycGhpYyBvYmplY3RzXG4gIHRoaXMuaGFzX3N0cmVlICAgID0gc3RhdGljX3RyZWUgJiYgc3RhdGljX3RyZWUubGVuZ3RoO1xufVxuXG5cbnZhciBzdGF0aWNfbF9kZXNjO1xudmFyIHN0YXRpY19kX2Rlc2M7XG52YXIgc3RhdGljX2JsX2Rlc2M7XG5cblxuZnVuY3Rpb24gVHJlZURlc2MoZHluX3RyZWUsIHN0YXRfZGVzYykge1xuICB0aGlzLmR5bl90cmVlID0gZHluX3RyZWU7ICAgICAvKiB0aGUgZHluYW1pYyB0cmVlICovXG4gIHRoaXMubWF4X2NvZGUgPSAwOyAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xuICB0aGlzLnN0YXRfZGVzYyA9IHN0YXRfZGVzYzsgICAvKiB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdHJlZSAqL1xufVxuXG5cblxuZnVuY3Rpb24gZF9jb2RlKGRpc3QpIHtcbiAgcmV0dXJuIGRpc3QgPCAyNTYgPyBfZGlzdF9jb2RlW2Rpc3RdIDogX2Rpc3RfY29kZVsyNTYgKyAoZGlzdCA+Pj4gNyldO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogT3V0cHV0IGEgc2hvcnQgTFNCIGZpcnN0IG9uIHRoZSBzdHJlYW0uXG4gKiBJTiBhc3NlcnRpb246IHRoZXJlIGlzIGVub3VnaCByb29tIGluIHBlbmRpbmdCdWYuXG4gKi9cbmZ1bmN0aW9uIHB1dF9zaG9ydChzLCB3KSB7XG4vLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodykgJiAweGZmKSk7XG4vLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodXNoKSh3KSA+PiA4KSk7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gKHcpICYgMHhmZjtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSAodyA+Pj4gOCkgJiAweGZmO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIHZhbHVlIG9uIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuXG4gKiBJTiBhc3NlcnRpb246IGxlbmd0aCA8PSAxNiBhbmQgdmFsdWUgZml0cyBpbiBsZW5ndGggYml0cy5cbiAqL1xuZnVuY3Rpb24gc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpIHtcbiAgaWYgKHMuYmlfdmFsaWQgPiAoQnVmX3NpemUgLSBsZW5ndGgpKSB7XG4gICAgcy5iaV9idWYgfD0gKHZhbHVlIDw8IHMuYmlfdmFsaWQpICYgMHhmZmZmO1xuICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7XG4gICAgcy5iaV9idWYgPSB2YWx1ZSA+PiAoQnVmX3NpemUgLSBzLmJpX3ZhbGlkKTtcbiAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aCAtIEJ1Zl9zaXplO1xuICB9IGVsc2Uge1xuICAgIHMuYmlfYnVmIHw9ICh2YWx1ZSA8PCBzLmJpX3ZhbGlkKSAmIDB4ZmZmZjtcbiAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHNlbmRfY29kZShzLCBjLCB0cmVlKSB7XG4gIHNlbmRfYml0cyhzLCB0cmVlW2MgKiAyXS8qLkNvZGUqLywgdHJlZVtjICogMiArIDFdLyouTGVuKi8pO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUmV2ZXJzZSB0aGUgZmlyc3QgbGVuIGJpdHMgb2YgYSBjb2RlLCB1c2luZyBzdHJhaWdodGZvcndhcmQgY29kZSAoYSBmYXN0ZXJcbiAqIG1ldGhvZCB3b3VsZCB1c2UgYSB0YWJsZSlcbiAqIElOIGFzc2VydGlvbjogMSA8PSBsZW4gPD0gMTVcbiAqL1xuZnVuY3Rpb24gYmlfcmV2ZXJzZShjb2RlLCBsZW4pIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGRvIHtcbiAgICByZXMgfD0gY29kZSAmIDE7XG4gICAgY29kZSA+Pj49IDE7XG4gICAgcmVzIDw8PSAxO1xuICB9IHdoaWxlICgtLWxlbiA+IDApO1xuICByZXR1cm4gcmVzID4+PiAxO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggdGhlIGJpdCBidWZmZXIsIGtlZXBpbmcgYXQgbW9zdCA3IGJpdHMgaW4gaXQuXG4gKi9cbmZ1bmN0aW9uIGJpX2ZsdXNoKHMpIHtcbiAgaWYgKHMuYmlfdmFsaWQgPT09IDE2KSB7XG4gICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTtcbiAgICBzLmJpX2J1ZiA9IDA7XG4gICAgcy5iaV92YWxpZCA9IDA7XG5cbiAgfSBlbHNlIGlmIChzLmJpX3ZhbGlkID49IDgpIHtcbiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmICYgMHhmZjtcbiAgICBzLmJpX2J1ZiA+Pj0gODtcbiAgICBzLmJpX3ZhbGlkIC09IDg7XG4gIH1cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbXB1dGUgdGhlIG9wdGltYWwgYml0IGxlbmd0aHMgZm9yIGEgdHJlZSBhbmQgdXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoXG4gKiBmb3IgdGhlIGN1cnJlbnQgYmxvY2suXG4gKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQsIGhlYXBbaGVhcF9tYXhdIGFuZFxuICogICAgYWJvdmUgYXJlIHRoZSB0cmVlIG5vZGVzIHNvcnRlZCBieSBpbmNyZWFzaW5nIGZyZXF1ZW5jeS5cbiAqIE9VVCBhc3NlcnRpb25zOiB0aGUgZmllbGQgbGVuIGlzIHNldCB0byB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RoLCB0aGVcbiAqICAgICBhcnJheSBibF9jb3VudCBjb250YWlucyB0aGUgZnJlcXVlbmNpZXMgZm9yIGVhY2ggYml0IGxlbmd0aC5cbiAqICAgICBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpcyBhbHNvIHVwZGF0ZWQgaWYgc3RyZWUgaXNcbiAqICAgICBub3QgbnVsbC5cbiAqL1xuZnVuY3Rpb24gZ2VuX2JpdGxlbihzLCBkZXNjKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHRyZWVfZGVzYyAqZGVzYzsgICAgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqL1xue1xuICB2YXIgdHJlZSAgICAgICAgICAgID0gZGVzYy5keW5fdHJlZTtcbiAgdmFyIG1heF9jb2RlICAgICAgICA9IGRlc2MubWF4X2NvZGU7XG4gIHZhciBzdHJlZSAgICAgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTtcbiAgdmFyIGhhc19zdHJlZSAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgdmFyIGV4dHJhICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2JpdHM7XG4gIHZhciBiYXNlICAgICAgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5leHRyYV9iYXNlO1xuICB2YXIgbWF4X2xlbmd0aCAgICAgID0gZGVzYy5zdGF0X2Rlc2MubWF4X2xlbmd0aDtcbiAgdmFyIGg7ICAgICAgICAgICAgICAvKiBoZWFwIGluZGV4ICovXG4gIHZhciBuLCBtOyAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHRoZSB0cmVlIGVsZW1lbnRzICovXG4gIHZhciBiaXRzOyAgICAgICAgICAgLyogYml0IGxlbmd0aCAqL1xuICB2YXIgeGJpdHM7ICAgICAgICAgIC8qIGV4dHJhIGJpdHMgKi9cbiAgdmFyIGY7ICAgICAgICAgICAgICAvKiBmcmVxdWVuY3kgKi9cbiAgdmFyIG92ZXJmbG93ID0gMDsgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgd2l0aCBiaXQgbGVuZ3RoIHRvbyBsYXJnZSAqL1xuXG4gIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykge1xuICAgIHMuYmxfY291bnRbYml0c10gPSAwO1xuICB9XG5cbiAgLyogSW4gYSBmaXJzdCBwYXNzLCBjb21wdXRlIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhzICh3aGljaCBtYXlcbiAgICogb3ZlcmZsb3cgaW4gdGhlIGNhc2Ugb2YgdGhlIGJpdCBsZW5ndGggdHJlZSkuXG4gICAqL1xuICB0cmVlW3MuaGVhcFtzLmhlYXBfbWF4XSAqIDIgKyAxXS8qLkxlbiovID0gMDsgLyogcm9vdCBvZiB0aGUgaGVhcCAqL1xuXG4gIGZvciAoaCA9IHMuaGVhcF9tYXggKyAxOyBoIDwgSEVBUF9TSVpFOyBoKyspIHtcbiAgICBuID0gcy5oZWFwW2hdO1xuICAgIGJpdHMgPSB0cmVlW3RyZWVbbiAqIDIgKyAxXS8qLkRhZCovICogMiArIDFdLyouTGVuKi8gKyAxO1xuICAgIGlmIChiaXRzID4gbWF4X2xlbmd0aCkge1xuICAgICAgYml0cyA9IG1heF9sZW5ndGg7XG4gICAgICBvdmVyZmxvdysrO1xuICAgIH1cbiAgICB0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IGJpdHM7XG4gICAgLyogV2Ugb3ZlcndyaXRlIHRyZWVbbl0uRGFkIHdoaWNoIGlzIG5vIGxvbmdlciBuZWVkZWQgKi9cblxuICAgIGlmIChuID4gbWF4X2NvZGUpIHsgY29udGludWU7IH0gLyogbm90IGEgbGVhZiBub2RlICovXG5cbiAgICBzLmJsX2NvdW50W2JpdHNdKys7XG4gICAgeGJpdHMgPSAwO1xuICAgIGlmIChuID49IGJhc2UpIHtcbiAgICAgIHhiaXRzID0gZXh0cmFbbiAtIGJhc2VdO1xuICAgIH1cbiAgICBmID0gdHJlZVtuICogMl0vKi5GcmVxKi87XG4gICAgcy5vcHRfbGVuICs9IGYgKiAoYml0cyArIHhiaXRzKTtcbiAgICBpZiAoaGFzX3N0cmVlKSB7XG4gICAgICBzLnN0YXRpY19sZW4gKz0gZiAqIChzdHJlZVtuICogMiArIDFdLyouTGVuKi8gKyB4Yml0cyk7XG4gICAgfVxuICB9XG4gIGlmIChvdmVyZmxvdyA9PT0gMCkgeyByZXR1cm47IH1cblxuICAvLyBUcmFjZSgoc3RkZXJyLFwiXFxuYml0IGxlbmd0aCBvdmVyZmxvd1xcblwiKSk7XG4gIC8qIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBsZSBvbiBvYmoyIGFuZCBwaWMgb2YgdGhlIENhbGdhcnkgY29ycHVzICovXG5cbiAgLyogRmluZCB0aGUgZmlyc3QgYml0IGxlbmd0aCB3aGljaCBjb3VsZCBpbmNyZWFzZTogKi9cbiAgZG8ge1xuICAgIGJpdHMgPSBtYXhfbGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAocy5ibF9jb3VudFtiaXRzXSA9PT0gMCkgeyBiaXRzLS07IH1cbiAgICBzLmJsX2NvdW50W2JpdHNdLS07ICAgICAgLyogbW92ZSBvbmUgbGVhZiBkb3duIHRoZSB0cmVlICovXG4gICAgcy5ibF9jb3VudFtiaXRzICsgMV0gKz0gMjsgLyogbW92ZSBvbmUgb3ZlcmZsb3cgaXRlbSBhcyBpdHMgYnJvdGhlciAqL1xuICAgIHMuYmxfY291bnRbbWF4X2xlbmd0aF0tLTtcbiAgICAvKiBUaGUgYnJvdGhlciBvZiB0aGUgb3ZlcmZsb3cgaXRlbSBhbHNvIG1vdmVzIG9uZSBzdGVwIHVwLFxuICAgICAqIGJ1dCB0aGlzIGRvZXMgbm90IGFmZmVjdCBibF9jb3VudFttYXhfbGVuZ3RoXVxuICAgICAqL1xuICAgIG92ZXJmbG93IC09IDI7XG4gIH0gd2hpbGUgKG92ZXJmbG93ID4gMCk7XG5cbiAgLyogTm93IHJlY29tcHV0ZSBhbGwgYml0IGxlbmd0aHMsIHNjYW5uaW5nIGluIGluY3JlYXNpbmcgZnJlcXVlbmN5LlxuICAgKiBoIGlzIHN0aWxsIGVxdWFsIHRvIEhFQVBfU0laRS4gKEl0IGlzIHNpbXBsZXIgdG8gcmVjb25zdHJ1Y3QgYWxsXG4gICAqIGxlbmd0aHMgaW5zdGVhZCBvZiBmaXhpbmcgb25seSB0aGUgd3Jvbmcgb25lcy4gVGhpcyBpZGVhIGlzIHRha2VuXG4gICAqIGZyb20gJ2FyJyB3cml0dGVuIGJ5IEhhcnVoaWtvIE9rdW11cmEuKVxuICAgKi9cbiAgZm9yIChiaXRzID0gbWF4X2xlbmd0aDsgYml0cyAhPT0gMDsgYml0cy0tKSB7XG4gICAgbiA9IHMuYmxfY291bnRbYml0c107XG4gICAgd2hpbGUgKG4gIT09IDApIHtcbiAgICAgIG0gPSBzLmhlYXBbLS1oXTtcbiAgICAgIGlmIChtID4gbWF4X2NvZGUpIHsgY29udGludWU7IH1cbiAgICAgIGlmICh0cmVlW20gKiAyICsgMV0vKi5MZW4qLyAhPT0gYml0cykge1xuICAgICAgICAvLyBUcmFjZSgoc3RkZXJyLFwiY29kZSAlZCBiaXRzICVkLT4lZFxcblwiLCBtLCB0cmVlW21dLkxlbiwgYml0cykpO1xuICAgICAgICBzLm9wdF9sZW4gKz0gKGJpdHMgLSB0cmVlW20gKiAyICsgMV0vKi5MZW4qLykgKiB0cmVlW20gKiAyXS8qLkZyZXEqLztcbiAgICAgICAgdHJlZVttICogMiArIDFdLyouTGVuKi8gPSBiaXRzO1xuICAgICAgfVxuICAgICAgbi0tO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogR2VuZXJhdGUgdGhlIGNvZGVzIGZvciBhIGdpdmVuIHRyZWUgYW5kIGJpdCBjb3VudHMgKHdoaWNoIG5lZWQgbm90IGJlXG4gKiBvcHRpbWFsKS5cbiAqIElOIGFzc2VydGlvbjogdGhlIGFycmF5IGJsX2NvdW50IGNvbnRhaW5zIHRoZSBiaXQgbGVuZ3RoIHN0YXRpc3RpY3MgZm9yXG4gKiB0aGUgZ2l2ZW4gdHJlZSBhbmQgdGhlIGZpZWxkIGxlbiBpcyBzZXQgZm9yIGFsbCB0cmVlIGVsZW1lbnRzLlxuICogT1VUIGFzc2VydGlvbjogdGhlIGZpZWxkIGNvZGUgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cyBvZiBub25cbiAqICAgICB6ZXJvIGNvZGUgbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIGJsX2NvdW50KVxuLy8gICAgY3RfZGF0YSAqdHJlZTsgICAgICAgICAgICAgLyogdGhlIHRyZWUgdG8gZGVjb3JhdGUgKi9cbi8vICAgIGludCBtYXhfY29kZTsgICAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xuLy8gICAgdXNoZiAqYmxfY291bnQ7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCAqL1xue1xuICB2YXIgbmV4dF9jb2RlID0gbmV3IEFycmF5KE1BWF9CSVRTICsgMSk7IC8qIG5leHQgY29kZSB2YWx1ZSBmb3IgZWFjaCBiaXQgbGVuZ3RoICovXG4gIHZhciBjb2RlID0gMDsgICAgICAgICAgICAgIC8qIHJ1bm5pbmcgY29kZSB2YWx1ZSAqL1xuICB2YXIgYml0czsgICAgICAgICAgICAgICAgICAvKiBiaXQgaW5kZXggKi9cbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogY29kZSBpbmRleCAqL1xuXG4gIC8qIFRoZSBkaXN0cmlidXRpb24gY291bnRzIGFyZSBmaXJzdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjb2RlIHZhbHVlc1xuICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC5cbiAgICovXG4gIGZvciAoYml0cyA9IDE7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykge1xuICAgIG5leHRfY29kZVtiaXRzXSA9IGNvZGUgPSAoY29kZSArIGJsX2NvdW50W2JpdHMgLSAxXSkgPDwgMTtcbiAgfVxuICAvKiBDaGVjayB0aGF0IHRoZSBiaXQgY291bnRzIGluIGJsX2NvdW50IGFyZSBjb25zaXN0ZW50LiBUaGUgbGFzdCBjb2RlXG4gICAqIG11c3QgYmUgYWxsIG9uZXMuXG4gICAqL1xuICAvL0Fzc2VydCAoY29kZSArIGJsX2NvdW50W01BWF9CSVRTXS0xID09ICgxPDxNQVhfQklUUyktMSxcbiAgLy8gICAgICAgIFwiaW5jb25zaXN0ZW50IGJpdCBjb3VudHNcIik7XG4gIC8vVHJhY2V2KChzdGRlcnIsXCJcXG5nZW5fY29kZXM6IG1heF9jb2RlICVkIFwiLCBtYXhfY29kZSkpO1xuXG4gIGZvciAobiA9IDA7ICBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICB2YXIgbGVuID0gdHJlZVtuICogMiArIDFdLyouTGVuKi87XG4gICAgaWYgKGxlbiA9PT0gMCkgeyBjb250aW51ZTsgfVxuICAgIC8qIE5vdyByZXZlcnNlIHRoZSBiaXRzICovXG4gICAgdHJlZVtuICogMl0vKi5Db2RlKi8gPSBiaV9yZXZlcnNlKG5leHRfY29kZVtsZW5dKyssIGxlbik7XG5cbiAgICAvL1RyYWNlY3YodHJlZSAhPSBzdGF0aWNfbHRyZWUsIChzdGRlcnIsXCJcXG5uICUzZCAlYyBsICUyZCBjICU0eCAoJXgpIFwiLFxuICAgIC8vICAgICBuLCAoaXNncmFwaChuKSA/IG4gOiAnICcpLCBsZW4sIHRyZWVbbl0uQ29kZSwgbmV4dF9jb2RlW2xlbl0tMSkpO1xuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSB2YXJpb3VzICdjb25zdGFudCcgdGFibGVzLlxuICovXG5mdW5jdGlvbiB0cl9zdGF0aWNfaW5pdCgpIHtcbiAgdmFyIG47ICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIHRyZWUgZWxlbWVudHMgKi9cbiAgdmFyIGJpdHM7ICAgICAvKiBiaXQgY291bnRlciAqL1xuICB2YXIgbGVuZ3RoOyAgIC8qIGxlbmd0aCB2YWx1ZSAqL1xuICB2YXIgY29kZTsgICAgIC8qIGNvZGUgdmFsdWUgKi9cbiAgdmFyIGRpc3Q7ICAgICAvKiBkaXN0YW5jZSBpbmRleCAqL1xuICB2YXIgYmxfY291bnQgPSBuZXcgQXJyYXkoTUFYX0JJVFMgKyAxKTtcbiAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCBmb3IgYW4gb3B0aW1hbCB0cmVlICovXG5cbiAgLy8gZG8gY2hlY2sgaW4gX3RyX2luaXQoKVxuICAvL2lmIChzdGF0aWNfaW5pdF9kb25lKSByZXR1cm47XG5cbiAgLyogRm9yIHNvbWUgZW1iZWRkZWQgdGFyZ2V0cywgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbm90IGluaXRpYWxpemVkOiAqL1xuLyojaWZkZWYgTk9fSU5JVF9HTE9CQUxfUE9JTlRFUlNcbiAgc3RhdGljX2xfZGVzYy5zdGF0aWNfdHJlZSA9IHN0YXRpY19sdHJlZTtcbiAgc3RhdGljX2xfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfbGJpdHM7XG4gIHN0YXRpY19kX2Rlc2Muc3RhdGljX3RyZWUgPSBzdGF0aWNfZHRyZWU7XG4gIHN0YXRpY19kX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2RiaXRzO1xuICBzdGF0aWNfYmxfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfYmxiaXRzO1xuI2VuZGlmKi9cblxuICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGxlbmd0aCAoMC4uMjU1KSAtPiBsZW5ndGggY29kZSAoMC4uMjgpICovXG4gIGxlbmd0aCA9IDA7XG4gIGZvciAoY29kZSA9IDA7IGNvZGUgPCBMRU5HVEhfQ09ERVMgLSAxOyBjb2RlKyspIHtcbiAgICBiYXNlX2xlbmd0aFtjb2RlXSA9IGxlbmd0aDtcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgZXh0cmFfbGJpdHNbY29kZV0pOyBuKyspIHtcbiAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGgrK10gPSBjb2RlO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAobGVuZ3RoID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogbGVuZ3RoICE9IDI1NlwiKTtcbiAgLyogTm90ZSB0aGF0IHRoZSBsZW5ndGggMjU1IChtYXRjaCBsZW5ndGggMjU4KSBjYW4gYmUgcmVwcmVzZW50ZWRcbiAgICogaW4gdHdvIGRpZmZlcmVudCB3YXlzOiBjb2RlIDI4NCArIDUgYml0cyBvciBjb2RlIDI4NSwgc28gd2VcbiAgICogb3ZlcndyaXRlIGxlbmd0aF9jb2RlWzI1NV0gdG8gdXNlIHRoZSBiZXN0IGVuY29kaW5nOlxuICAgKi9cbiAgX2xlbmd0aF9jb2RlW2xlbmd0aCAtIDFdID0gY29kZTtcblxuICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGRpc3QgKDAuLjMySykgLT4gZGlzdCBjb2RlICgwLi4yOSkgKi9cbiAgZGlzdCA9IDA7XG4gIGZvciAoY29kZSA9IDA7IGNvZGUgPCAxNjsgY29kZSsrKSB7XG4gICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdDtcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgZXh0cmFfZGJpdHNbY29kZV0pOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogZGlzdCAhPSAyNTZcIik7XG4gIGRpc3QgPj49IDc7IC8qIGZyb20gbm93IG9uLCBhbGwgZGlzdGFuY2VzIGFyZSBkaXZpZGVkIGJ5IDEyOCAqL1xuICBmb3IgKDsgY29kZSA8IERfQ09ERVM7IGNvZGUrKykge1xuICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3QgPDwgNztcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgKGV4dHJhX2RiaXRzW2NvZGVdIC0gNykpOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbMjU2ICsgZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogMjU2K2Rpc3QgIT0gNTEyXCIpO1xuXG4gIC8qIENvbnN0cnVjdCB0aGUgY29kZXMgb2YgdGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUgKi9cbiAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7XG4gICAgYmxfY291bnRbYml0c10gPSAwO1xuICB9XG5cbiAgbiA9IDA7XG4gIHdoaWxlIChuIDw9IDE0Mykge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA4O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs4XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI1NSkge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA5O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs5XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI3OSkge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA3O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs3XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI4Nykge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA4O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs4XSsrO1xuICB9XG4gIC8qIENvZGVzIDI4NiBhbmQgMjg3IGRvIG5vdCBleGlzdCwgYnV0IHdlIG11c3QgaW5jbHVkZSB0aGVtIGluIHRoZVxuICAgKiB0cmVlIGNvbnN0cnVjdGlvbiB0byBnZXQgYSBjYW5vbmljYWwgSHVmZm1hbiB0cmVlIChsb25nZXN0IGNvZGVcbiAgICogYWxsIG9uZXMpXG4gICAqL1xuICBnZW5fY29kZXMoc3RhdGljX2x0cmVlLCBMX0NPREVTICsgMSwgYmxfY291bnQpO1xuXG4gIC8qIFRoZSBzdGF0aWMgZGlzdGFuY2UgdHJlZSBpcyB0cml2aWFsOiAqL1xuICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgbisrKSB7XG4gICAgc3RhdGljX2R0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDU7XG4gICAgc3RhdGljX2R0cmVlW24gKiAyXS8qLkNvZGUqLyA9IGJpX3JldmVyc2UobiwgNSk7XG4gIH1cblxuICAvLyBOb3cgZGF0YSByZWFkeSBhbmQgd2UgY2FuIGluaXQgc3RhdGljIHRyZWVzXG4gIHN0YXRpY19sX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2x0cmVlLCBleHRyYV9sYml0cywgTElURVJBTFMgKyAxLCBMX0NPREVTLCBNQVhfQklUUyk7XG4gIHN0YXRpY19kX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2R0cmVlLCBleHRyYV9kYml0cywgMCwgICAgICAgICAgRF9DT0RFUywgTUFYX0JJVFMpO1xuICBzdGF0aWNfYmxfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhuZXcgQXJyYXkoMCksIGV4dHJhX2JsYml0cywgMCwgICAgICAgICBCTF9DT0RFUywgTUFYX0JMX0JJVFMpO1xuXG4gIC8vc3RhdGljX2luaXRfZG9uZSA9IHRydWU7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIGEgbmV3IGJsb2NrLlxuICovXG5mdW5jdGlvbiBpbml0X2Jsb2NrKHMpIHtcbiAgdmFyIG47IC8qIGl0ZXJhdGVzIG92ZXIgdHJlZSBlbGVtZW50cyAqL1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIHRyZWVzLiAqL1xuICBmb3IgKG4gPSAwOyBuIDwgTF9DT0RFUzsgIG4rKykgeyBzLmR5bl9sdHJlZVtuICogMl0vKi5GcmVxKi8gPSAwOyB9XG4gIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyAgbisrKSB7IHMuZHluX2R0cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH1cbiAgZm9yIChuID0gMDsgbiA8IEJMX0NPREVTOyBuKyspIHsgcy5ibF90cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH1cblxuICBzLmR5bl9sdHJlZVtFTkRfQkxPQ0sgKiAyXS8qLkZyZXEqLyA9IDE7XG4gIHMub3B0X2xlbiA9IHMuc3RhdGljX2xlbiA9IDA7XG4gIHMubGFzdF9saXQgPSBzLm1hdGNoZXMgPSAwO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggdGhlIGJpdCBidWZmZXIgYW5kIGFsaWduIHRoZSBvdXRwdXQgb24gYSBieXRlIGJvdW5kYXJ5XG4gKi9cbmZ1bmN0aW9uIGJpX3dpbmR1cChzKVxue1xuICBpZiAocy5iaV92YWxpZCA+IDgpIHtcbiAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpO1xuICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPiAwKSB7XG4gICAgLy9wdXRfYnl0ZShzLCAoQnl0ZSlzLT5iaV9idWYpO1xuICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gcy5iaV9idWY7XG4gIH1cbiAgcy5iaV9idWYgPSAwO1xuICBzLmJpX3ZhbGlkID0gMDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5IGEgc3RvcmVkIGJsb2NrLCBzdG9yaW5nIGZpcnN0IHRoZSBsZW5ndGggYW5kIGl0c1xuICogb25lJ3MgY29tcGxlbWVudCBpZiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNvcHlfYmxvY2socywgYnVmLCBsZW4sIGhlYWRlcilcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAgICAqYnVmOyAgICAvKiB0aGUgaW5wdXQgZGF0YSAqL1xuLy91bnNpZ25lZCBsZW47ICAgICAvKiBpdHMgbGVuZ3RoICovXG4vL2ludCAgICAgIGhlYWRlcjsgIC8qIHRydWUgaWYgYmxvY2sgaGVhZGVyIG11c3QgYmUgd3JpdHRlbiAqL1xue1xuICBiaV93aW5kdXAocyk7ICAgICAgICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovXG5cbiAgaWYgKGhlYWRlcikge1xuICAgIHB1dF9zaG9ydChzLCBsZW4pO1xuICAgIHB1dF9zaG9ydChzLCB+bGVuKTtcbiAgfVxuLy8gIHdoaWxlIChsZW4tLSkge1xuLy8gICAgcHV0X2J5dGUocywgKmJ1ZisrKTtcbi8vICB9XG4gIHV0aWxzLmFycmF5U2V0KHMucGVuZGluZ19idWYsIHMud2luZG93LCBidWYsIGxlbiwgcy5wZW5kaW5nKTtcbiAgcy5wZW5kaW5nICs9IGxlbjtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb21wYXJlcyB0byBzdWJ0cmVlcywgdXNpbmcgdGhlIHRyZWUgZGVwdGggYXMgdGllIGJyZWFrZXIgd2hlblxuICogdGhlIHN1YnRyZWVzIGhhdmUgZXF1YWwgZnJlcXVlbmN5LiBUaGlzIG1pbmltaXplcyB0aGUgd29yc3QgY2FzZSBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIHNtYWxsZXIodHJlZSwgbiwgbSwgZGVwdGgpIHtcbiAgdmFyIF9uMiA9IG4gKiAyO1xuICB2YXIgX20yID0gbSAqIDI7XG4gIHJldHVybiAodHJlZVtfbjJdLyouRnJlcSovIDwgdHJlZVtfbTJdLyouRnJlcSovIHx8XG4gICAgICAgICAodHJlZVtfbjJdLyouRnJlcSovID09PSB0cmVlW19tMl0vKi5GcmVxKi8gJiYgZGVwdGhbbl0gPD0gZGVwdGhbbV0pKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBSZXN0b3JlIHRoZSBoZWFwIHByb3BlcnR5IGJ5IG1vdmluZyBkb3duIHRoZSB0cmVlIHN0YXJ0aW5nIGF0IG5vZGUgayxcbiAqIGV4Y2hhbmdpbmcgYSBub2RlIHdpdGggdGhlIHNtYWxsZXN0IG9mIGl0cyB0d28gc29ucyBpZiBuZWNlc3NhcnksIHN0b3BwaW5nXG4gKiB3aGVuIHRoZSBoZWFwIHByb3BlcnR5IGlzIHJlLWVzdGFibGlzaGVkIChlYWNoIGZhdGhlciBzbWFsbGVyIHRoYW4gaXRzXG4gKiB0d28gc29ucykuXG4gKi9cbmZ1bmN0aW9uIHBxZG93bmhlYXAocywgdHJlZSwgaylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICBjdF9kYXRhICp0cmVlOyAgLyogdGhlIHRyZWUgdG8gcmVzdG9yZSAqL1xuLy8gICAgaW50IGs7ICAgICAgICAgICAgICAgLyogbm9kZSB0byBtb3ZlIGRvd24gKi9cbntcbiAgdmFyIHYgPSBzLmhlYXBba107XG4gIHZhciBqID0gayA8PCAxOyAgLyogbGVmdCBzb24gb2YgayAqL1xuICB3aGlsZSAoaiA8PSBzLmhlYXBfbGVuKSB7XG4gICAgLyogU2V0IGogdG8gdGhlIHNtYWxsZXN0IG9mIHRoZSB0d28gc29uczogKi9cbiAgICBpZiAoaiA8IHMuaGVhcF9sZW4gJiZcbiAgICAgIHNtYWxsZXIodHJlZSwgcy5oZWFwW2ogKyAxXSwgcy5oZWFwW2pdLCBzLmRlcHRoKSkge1xuICAgICAgaisrO1xuICAgIH1cbiAgICAvKiBFeGl0IGlmIHYgaXMgc21hbGxlciB0aGFuIGJvdGggc29ucyAqL1xuICAgIGlmIChzbWFsbGVyKHRyZWUsIHYsIHMuaGVhcFtqXSwgcy5kZXB0aCkpIHsgYnJlYWs7IH1cblxuICAgIC8qIEV4Y2hhbmdlIHYgd2l0aCB0aGUgc21hbGxlc3Qgc29uICovXG4gICAgcy5oZWFwW2tdID0gcy5oZWFwW2pdO1xuICAgIGsgPSBqO1xuXG4gICAgLyogQW5kIGNvbnRpbnVlIGRvd24gdGhlIHRyZWUsIHNldHRpbmcgaiB0byB0aGUgbGVmdCBzb24gb2YgayAqL1xuICAgIGogPDw9IDE7XG4gIH1cbiAgcy5oZWFwW2tdID0gdjtcbn1cblxuXG4vLyBpbmxpbmVkIG1hbnVhbGx5XG4vLyB2YXIgU01BTExFU1QgPSAxO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgdGhlIGJsb2NrIGRhdGEgY29tcHJlc3NlZCB1c2luZyB0aGUgZ2l2ZW4gSHVmZm1hbiB0cmVlc1xuICovXG5mdW5jdGlvbiBjb21wcmVzc19ibG9jayhzLCBsdHJlZSwgZHRyZWUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY29uc3QgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqL1xuLy8gICAgY29uc3QgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3RhbmNlIHRyZWUgKi9cbntcbiAgdmFyIGRpc3Q7ICAgICAgICAgICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqL1xuICB2YXIgbGM7ICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdCA9PSAwKSAqL1xuICB2YXIgbHggPSAwOyAgICAgICAgIC8qIHJ1bm5pbmcgaW5kZXggaW4gbF9idWYgKi9cbiAgdmFyIGNvZGU7ICAgICAgICAgICAvKiB0aGUgY29kZSB0byBzZW5kICovXG4gIHZhciBleHRyYTsgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgdG8gc2VuZCAqL1xuXG4gIGlmIChzLmxhc3RfbGl0ICE9PSAwKSB7XG4gICAgZG8ge1xuICAgICAgZGlzdCA9IChzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBseCAqIDJdIDw8IDgpIHwgKHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4ICogMiArIDFdKTtcbiAgICAgIGxjID0gcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgbHhdO1xuICAgICAgbHgrKztcblxuICAgICAgaWYgKGRpc3QgPT09IDApIHtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGxjLCBsdHJlZSk7IC8qIHNlbmQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICAgICAgLy9UcmFjZWN2KGlzZ3JhcGgobGMpLCAoc3RkZXJyLFwiICclYycgXCIsIGxjKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBIZXJlLCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovXG4gICAgICAgIGNvZGUgPSBfbGVuZ3RoX2NvZGVbbGNdO1xuICAgICAgICBzZW5kX2NvZGUocywgY29kZSArIExJVEVSQUxTICsgMSwgbHRyZWUpOyAvKiBzZW5kIHRoZSBsZW5ndGggY29kZSAqL1xuICAgICAgICBleHRyYSA9IGV4dHJhX2xiaXRzW2NvZGVdO1xuICAgICAgICBpZiAoZXh0cmEgIT09IDApIHtcbiAgICAgICAgICBsYyAtPSBiYXNlX2xlbmd0aFtjb2RlXTtcbiAgICAgICAgICBzZW5kX2JpdHMocywgbGMsIGV4dHJhKTsgICAgICAgLyogc2VuZCB0aGUgZXh0cmEgbGVuZ3RoIGJpdHMgKi9cbiAgICAgICAgfVxuICAgICAgICBkaXN0LS07IC8qIGRpc3QgaXMgbm93IHRoZSBtYXRjaCBkaXN0YW5jZSAtIDEgKi9cbiAgICAgICAgY29kZSA9IGRfY29kZShkaXN0KTtcbiAgICAgICAgLy9Bc3NlcnQgKGNvZGUgPCBEX0NPREVTLCBcImJhZCBkX2NvZGVcIik7XG5cbiAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUsIGR0cmVlKTsgICAgICAgLyogc2VuZCB0aGUgZGlzdGFuY2UgY29kZSAqL1xuICAgICAgICBleHRyYSA9IGV4dHJhX2RiaXRzW2NvZGVdO1xuICAgICAgICBpZiAoZXh0cmEgIT09IDApIHtcbiAgICAgICAgICBkaXN0IC09IGJhc2VfZGlzdFtjb2RlXTtcbiAgICAgICAgICBzZW5kX2JpdHMocywgZGlzdCwgZXh0cmEpOyAgIC8qIHNlbmQgdGhlIGV4dHJhIGRpc3RhbmNlIGJpdHMgKi9cbiAgICAgICAgfVxuICAgICAgfSAvKiBsaXRlcmFsIG9yIG1hdGNoIHBhaXIgPyAqL1xuXG4gICAgICAvKiBDaGVjayB0aGF0IHRoZSBvdmVybGF5IGJldHdlZW4gcGVuZGluZ19idWYgYW5kIGRfYnVmK2xfYnVmIGlzIG9rOiAqL1xuICAgICAgLy9Bc3NlcnQoKHVJbnQpKHMtPnBlbmRpbmcpIDwgcy0+bGl0X2J1ZnNpemUgKyAyKmx4LFxuICAgICAgLy8gICAgICAgXCJwZW5kaW5nQnVmIG92ZXJmbG93XCIpO1xuXG4gICAgfSB3aGlsZSAobHggPCBzLmxhc3RfbGl0KTtcbiAgfVxuXG4gIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbnN0cnVjdCBvbmUgSHVmZm1hbiB0cmVlIGFuZCBhc3NpZ25zIHRoZSBjb2RlIGJpdCBzdHJpbmdzIGFuZCBsZW5ndGhzLlxuICogVXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoIGZvciB0aGUgY3VycmVudCBibG9jay5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkIGZyZXEgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cy5cbiAqIE9VVCBhc3NlcnRpb25zOiB0aGUgZmllbGRzIGxlbiBhbmQgY29kZSBhcmUgc2V0IHRvIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhcbiAqICAgICBhbmQgY29ycmVzcG9uZGluZyBjb2RlLiBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpc1xuICogICAgIGFsc28gdXBkYXRlZCBpZiBzdHJlZSBpcyBub3QgbnVsbC4gVGhlIGZpZWxkIG1heF9jb2RlIGlzIHNldC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRfdHJlZShzLCBkZXNjKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHRyZWVfZGVzYyAqZGVzYzsgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqL1xue1xuICB2YXIgdHJlZSAgICAgPSBkZXNjLmR5bl90cmVlO1xuICB2YXIgc3RyZWUgICAgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTtcbiAgdmFyIGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgdmFyIGVsZW1zICAgID0gZGVzYy5zdGF0X2Rlc2MuZWxlbXM7XG4gIHZhciBuLCBtOyAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgaGVhcCBlbGVtZW50cyAqL1xuICB2YXIgbWF4X2NvZGUgPSAtMTsgLyogbGFyZ2VzdCBjb2RlIHdpdGggbm9uIHplcm8gZnJlcXVlbmN5ICovXG4gIHZhciBub2RlOyAgICAgICAgICAvKiBuZXcgbm9kZSBiZWluZyBjcmVhdGVkICovXG5cbiAgLyogQ29uc3RydWN0IHRoZSBpbml0aWFsIGhlYXAsIHdpdGggbGVhc3QgZnJlcXVlbnQgZWxlbWVudCBpblxuICAgKiBoZWFwW1NNQUxMRVNUXS4gVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsyKm5dIGFuZCBoZWFwWzIqbisxXS5cbiAgICogaGVhcFswXSBpcyBub3QgdXNlZC5cbiAgICovXG4gIHMuaGVhcF9sZW4gPSAwO1xuICBzLmhlYXBfbWF4ID0gSEVBUF9TSVpFO1xuXG4gIGZvciAobiA9IDA7IG4gPCBlbGVtczsgbisrKSB7XG4gICAgaWYgKHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgICBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IG1heF9jb2RlID0gbjtcbiAgICAgIHMuZGVwdGhbbl0gPSAwO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovID0gMDtcbiAgICB9XG4gIH1cblxuICAvKiBUaGUgcGt6aXAgZm9ybWF0IHJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIGRpc3RhbmNlIGNvZGUgZXhpc3RzLFxuICAgKiBhbmQgdGhhdCBhdCBsZWFzdCBvbmUgYml0IHNob3VsZCBiZSBzZW50IGV2ZW4gaWYgdGhlcmUgaXMgb25seSBvbmVcbiAgICogcG9zc2libGUgY29kZS4gU28gdG8gYXZvaWQgc3BlY2lhbCBjaGVja3MgbGF0ZXIgb24gd2UgZm9yY2UgYXQgbGVhc3RcbiAgICogdHdvIGNvZGVzIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeS5cbiAgICovXG4gIHdoaWxlIChzLmhlYXBfbGVuIDwgMikge1xuICAgIG5vZGUgPSBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IChtYXhfY29kZSA8IDIgPyArK21heF9jb2RlIDogMCk7XG4gICAgdHJlZVtub2RlICogMl0vKi5GcmVxKi8gPSAxO1xuICAgIHMuZGVwdGhbbm9kZV0gPSAwO1xuICAgIHMub3B0X2xlbi0tO1xuXG4gICAgaWYgKGhhc19zdHJlZSkge1xuICAgICAgcy5zdGF0aWNfbGVuIC09IHN0cmVlW25vZGUgKiAyICsgMV0vKi5MZW4qLztcbiAgICB9XG4gICAgLyogbm9kZSBpcyAwIG9yIDEgc28gaXQgZG9lcyBub3QgaGF2ZSBleHRyYSBiaXRzICovXG4gIH1cbiAgZGVzYy5tYXhfY29kZSA9IG1heF9jb2RlO1xuXG4gIC8qIFRoZSBlbGVtZW50cyBoZWFwW2hlYXBfbGVuLzIrMSAuLiBoZWFwX2xlbl0gYXJlIGxlYXZlcyBvZiB0aGUgdHJlZSxcbiAgICogZXN0YWJsaXNoIHN1Yi1oZWFwcyBvZiBpbmNyZWFzaW5nIGxlbmd0aHM6XG4gICAqL1xuICBmb3IgKG4gPSAocy5oZWFwX2xlbiA+PiAxLyppbnQgLzIqLyk7IG4gPj0gMTsgbi0tKSB7IHBxZG93bmhlYXAocywgdHJlZSwgbik7IH1cblxuICAvKiBDb25zdHJ1Y3QgdGhlIEh1ZmZtYW4gdHJlZSBieSByZXBlYXRlZGx5IGNvbWJpbmluZyB0aGUgbGVhc3QgdHdvXG4gICAqIGZyZXF1ZW50IG5vZGVzLlxuICAgKi9cbiAgbm9kZSA9IGVsZW1zOyAgICAgICAgICAgICAgLyogbmV4dCBpbnRlcm5hbCBub2RlIG9mIHRoZSB0cmVlICovXG4gIGRvIHtcbiAgICAvL3BxcmVtb3ZlKHMsIHRyZWUsIG4pOyAgLyogbiA9IG5vZGUgb2YgbGVhc3QgZnJlcXVlbmN5ICovXG4gICAgLyoqKiBwcXJlbW92ZSAqKiovXG4gICAgbiA9IHMuaGVhcFsxLypTTUFMTEVTVCovXTtcbiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBzLmhlYXBbcy5oZWFwX2xlbi0tXTtcbiAgICBwcWRvd25oZWFwKHMsIHRyZWUsIDEvKlNNQUxMRVNUKi8pO1xuICAgIC8qKiovXG5cbiAgICBtID0gcy5oZWFwWzEvKlNNQUxMRVNUKi9dOyAvKiBtID0gbm9kZSBvZiBuZXh0IGxlYXN0IGZyZXF1ZW5jeSAqL1xuXG4gICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBuOyAvKiBrZWVwIHRoZSBub2RlcyBzb3J0ZWQgYnkgZnJlcXVlbmN5ICovXG4gICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBtO1xuXG4gICAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgZmF0aGVyIG9mIG4gYW5kIG0gKi9cbiAgICB0cmVlW25vZGUgKiAyXS8qLkZyZXEqLyA9IHRyZWVbbiAqIDJdLyouRnJlcSovICsgdHJlZVttICogMl0vKi5GcmVxKi87XG4gICAgcy5kZXB0aFtub2RlXSA9IChzLmRlcHRoW25dID49IHMuZGVwdGhbbV0gPyBzLmRlcHRoW25dIDogcy5kZXB0aFttXSkgKyAxO1xuICAgIHRyZWVbbiAqIDIgKyAxXS8qLkRhZCovID0gdHJlZVttICogMiArIDFdLyouRGFkKi8gPSBub2RlO1xuXG4gICAgLyogYW5kIGluc2VydCB0aGUgbmV3IG5vZGUgaW4gdGhlIGhlYXAgKi9cbiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBub2RlKys7XG4gICAgcHFkb3duaGVhcChzLCB0cmVlLCAxLypTTUFMTEVTVCovKTtcblxuICB9IHdoaWxlIChzLmhlYXBfbGVuID49IDIpO1xuXG4gIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gcy5oZWFwWzEvKlNNQUxMRVNUKi9dO1xuXG4gIC8qIEF0IHRoaXMgcG9pbnQsIHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQuIFdlIGNhbiBub3dcbiAgICogZ2VuZXJhdGUgdGhlIGJpdCBsZW5ndGhzLlxuICAgKi9cbiAgZ2VuX2JpdGxlbihzLCBkZXNjKTtcblxuICAvKiBUaGUgZmllbGQgbGVuIGlzIG5vdyBzZXQsIHdlIGNhbiBnZW5lcmF0ZSB0aGUgYml0IGNvZGVzICovXG4gIGdlbl9jb2Rlcyh0cmVlLCBtYXhfY29kZSwgcy5ibF9jb3VudCk7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTY2FuIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIHRvIGRldGVybWluZSB0aGUgZnJlcXVlbmNpZXMgb2YgdGhlIGNvZGVzXG4gKiBpbiB0aGUgYml0IGxlbmd0aCB0cmVlLlxuICovXG5mdW5jdGlvbiBzY2FuX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgICAvKiB0aGUgdHJlZSB0byBiZSBzY2FubmVkICovXG4vLyAgICBpbnQgbWF4X2NvZGU7ICAgIC8qIGFuZCBpdHMgbGFyZ2VzdCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xue1xuICB2YXIgbjsgICAgICAgICAgICAgICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICovXG4gIHZhciBwcmV2bGVuID0gLTE7ICAgICAgICAgIC8qIGxhc3QgZW1pdHRlZCBsZW5ndGggKi9cbiAgdmFyIGN1cmxlbjsgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgY29kZSAqL1xuXG4gIHZhciBuZXh0bGVuID0gdHJlZVswICogMiArIDFdLyouTGVuKi87IC8qIGxlbmd0aCBvZiBuZXh0IGNvZGUgKi9cblxuICB2YXIgY291bnQgPSAwOyAgICAgICAgICAgICAvKiByZXBlYXQgY291bnQgb2YgdGhlIGN1cnJlbnQgY29kZSAqL1xuICB2YXIgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBtYXggcmVwZWF0IGNvdW50ICovXG4gIHZhciBtaW5fY291bnQgPSA0OyAgICAgICAgIC8qIG1pbiByZXBlYXQgY291bnQgKi9cblxuICBpZiAobmV4dGxlbiA9PT0gMCkge1xuICAgIG1heF9jb3VudCA9IDEzODtcbiAgICBtaW5fY291bnQgPSAzO1xuICB9XG4gIHRyZWVbKG1heF9jb2RlICsgMSkgKiAyICsgMV0vKi5MZW4qLyA9IDB4ZmZmZjsgLyogZ3VhcmQgKi9cblxuICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICBjdXJsZW4gPSBuZXh0bGVuO1xuICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBzLmJsX3RyZWVbY3VybGVuICogMl0vKi5GcmVxKi8gKz0gY291bnQ7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkge1xuXG4gICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7IHMuYmxfdHJlZVtjdXJsZW4gKiAyXS8qLkZyZXEqLysrOyB9XG4gICAgICBzLmJsX3RyZWVbUkVQXzNfNiAqIDJdLyouRnJlcSovKys7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7XG4gICAgICBzLmJsX3RyZWVbUkVQWl8zXzEwICogMl0vKi5GcmVxKi8rKztcblxuICAgIH0gZWxzZSB7XG4gICAgICBzLmJsX3RyZWVbUkVQWl8xMV8xMzggKiAyXS8qLkZyZXEqLysrO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuXG4gICAgaWYgKG5leHRsZW4gPT09IDApIHtcbiAgICAgIG1heF9jb3VudCA9IDEzODtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgbWF4X2NvdW50ID0gNjtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbWF4X2NvdW50ID0gNztcbiAgICAgIG1pbl9jb3VudCA9IDQ7XG4gICAgfVxuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTZW5kIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIGluIGNvbXByZXNzZWQgZm9ybSwgdXNpbmcgdGhlIGNvZGVzIGluXG4gKiBibF90cmVlLlxuICovXG5mdW5jdGlvbiBzZW5kX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqL1xuLy8gICAgaW50IG1heF9jb2RlOyAgICAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi9cbntcbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqL1xuICB2YXIgcHJldmxlbiA9IC0xOyAgICAgICAgICAvKiBsYXN0IGVtaXR0ZWQgbGVuZ3RoICovXG4gIHZhciBjdXJsZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNvZGUgKi9cblxuICB2YXIgbmV4dGxlbiA9IHRyZWVbMCAqIDIgKyAxXS8qLkxlbiovOyAvKiBsZW5ndGggb2YgbmV4dCBjb2RlICovXG5cbiAgdmFyIGNvdW50ID0gMDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9mIHRoZSBjdXJyZW50IGNvZGUgKi9cbiAgdmFyIG1heF9jb3VudCA9IDc7ICAgICAgICAgLyogbWF4IHJlcGVhdCBjb3VudCAqL1xuICB2YXIgbWluX2NvdW50ID0gNDsgICAgICAgICAvKiBtaW4gcmVwZWF0IGNvdW50ICovXG5cbiAgLyogdHJlZVttYXhfY29kZSsxXS5MZW4gPSAtMTsgKi8gIC8qIGd1YXJkIGFscmVhZHkgc2V0ICovXG4gIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgbWF4X2NvdW50ID0gMTM4O1xuICAgIG1pbl9jb3VudCA9IDM7XG4gIH1cblxuICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICBjdXJsZW4gPSBuZXh0bGVuO1xuICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBkbyB7IHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7IH0gd2hpbGUgKC0tY291bnQgIT09IDApO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHtcbiAgICAgIGlmIChjdXJsZW4gIT09IHByZXZsZW4pIHtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTtcbiAgICAgICAgY291bnQtLTtcbiAgICAgIH1cbiAgICAgIC8vQXNzZXJ0KGNvdW50ID49IDMgJiYgY291bnQgPD0gNiwgXCIgM182P1wiKTtcbiAgICAgIHNlbmRfY29kZShzLCBSRVBfM182LCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMik7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7XG4gICAgICBzZW5kX2NvZGUocywgUkVQWl8zXzEwLCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfMTFfMTM4LCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMTEsIDcpO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuICAgIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgICBtYXhfY291bnQgPSAxMzg7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHtcbiAgICAgIG1heF9jb3VudCA9IDY7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIG1heF9jb3VudCA9IDc7XG4gICAgICBtaW5fY291bnQgPSA0O1xuICAgIH1cbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29uc3RydWN0IHRoZSBIdWZmbWFuIHRyZWUgZm9yIHRoZSBiaXQgbGVuZ3RocyBhbmQgcmV0dXJuIHRoZSBpbmRleCBpblxuICogYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2RlIHRvIHNlbmQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkX2JsX3RyZWUocykge1xuICB2YXIgbWF4X2JsaW5kZXg7ICAvKiBpbmRleCBvZiBsYXN0IGJpdCBsZW5ndGggY29kZSBvZiBub24gemVybyBmcmVxICovXG5cbiAgLyogRGV0ZXJtaW5lIHRoZSBiaXQgbGVuZ3RoIGZyZXF1ZW5jaWVzIGZvciBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqL1xuICBzY2FuX3RyZWUocywgcy5keW5fbHRyZWUsIHMubF9kZXNjLm1heF9jb2RlKTtcbiAgc2Nhbl90cmVlKHMsIHMuZHluX2R0cmVlLCBzLmRfZGVzYy5tYXhfY29kZSk7XG5cbiAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZTogKi9cbiAgYnVpbGRfdHJlZShzLCBzLmJsX2Rlc2MpO1xuICAvKiBvcHRfbGVuIG5vdyBpbmNsdWRlcyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9ucywgZXhjZXB0XG4gICAqIHRoZSBsZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3RocyBjb2RlcyBhbmQgdGhlIDUrNSs0IGJpdHMgZm9yIHRoZSBjb3VudHMuXG4gICAqL1xuXG4gIC8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJpdCBsZW5ndGggY29kZXMgdG8gc2VuZC4gVGhlIHBremlwIGZvcm1hdFxuICAgKiByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IDQgYml0IGxlbmd0aCBjb2RlcyBiZSBzZW50LiAoYXBwbm90ZS50eHQgc2F5c1xuICAgKiAzIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaXMgNC4pXG4gICAqL1xuICBmb3IgKG1heF9ibGluZGV4ID0gQkxfQ09ERVMgLSAxOyBtYXhfYmxpbmRleCA+PSAzOyBtYXhfYmxpbmRleC0tKSB7XG4gICAgaWYgKHMuYmxfdHJlZVtibF9vcmRlclttYXhfYmxpbmRleF0gKiAyICsgMV0vKi5MZW4qLyAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8qIFVwZGF0ZSBvcHRfbGVuIHRvIGluY2x1ZGUgdGhlIGJpdCBsZW5ndGggdHJlZSBhbmQgY291bnRzICovXG4gIHMub3B0X2xlbiArPSAzICogKG1heF9ibGluZGV4ICsgMSkgKyA1ICsgNSArIDQ7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuZHluIHRyZWVzOiBkeW4gJWxkLCBzdGF0ICVsZFwiLFxuICAvLyAgICAgICAgcy0+b3B0X2xlbiwgcy0+c3RhdGljX2xlbikpO1xuXG4gIHJldHVybiBtYXhfYmxpbmRleDtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgdGhlIGhlYWRlciBmb3IgYSBibG9jayB1c2luZyBkeW5hbWljIEh1ZmZtYW4gdHJlZXM6IHRoZSBjb3VudHMsIHRoZVxuICogbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcywgdGhlIGxpdGVyYWwgdHJlZSBhbmQgdGhlIGRpc3RhbmNlIHRyZWUuXG4gKiBJTiBhc3NlcnRpb246IGxjb2RlcyA+PSAyNTcsIGRjb2RlcyA+PSAxLCBibGNvZGVzID49IDQuXG4gKi9cbmZ1bmN0aW9uIHNlbmRfYWxsX3RyZWVzKHMsIGxjb2RlcywgZGNvZGVzLCBibGNvZGVzKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGludCBsY29kZXMsIGRjb2RlcywgYmxjb2RlczsgLyogbnVtYmVyIG9mIGNvZGVzIGZvciBlYWNoIHRyZWUgKi9cbntcbiAgdmFyIHJhbms7ICAgICAgICAgICAgICAgICAgICAvKiBpbmRleCBpbiBibF9vcmRlciAqL1xuXG4gIC8vQXNzZXJ0IChsY29kZXMgPj0gMjU3ICYmIGRjb2RlcyA+PSAxICYmIGJsY29kZXMgPj0gNCwgXCJub3QgZW5vdWdoIGNvZGVzXCIpO1xuICAvL0Fzc2VydCAobGNvZGVzIDw9IExfQ09ERVMgJiYgZGNvZGVzIDw9IERfQ09ERVMgJiYgYmxjb2RlcyA8PSBCTF9DT0RFUyxcbiAgLy8gICAgICAgIFwidG9vIG1hbnkgY29kZXNcIik7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgY291bnRzOiBcIikpO1xuICBzZW5kX2JpdHMocywgbGNvZGVzIC0gMjU3LCA1KTsgLyogbm90ICsyNTUgYXMgc3RhdGVkIGluIGFwcG5vdGUudHh0ICovXG4gIHNlbmRfYml0cyhzLCBkY29kZXMgLSAxLCAgIDUpO1xuICBzZW5kX2JpdHMocywgYmxjb2RlcyAtIDQsICA0KTsgLyogbm90IC0zIGFzIHN0YXRlZCBpbiBhcHBub3RlLnR4dCAqL1xuICBmb3IgKHJhbmsgPSAwOyByYW5rIDwgYmxjb2RlczsgcmFuaysrKSB7XG4gICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5ibCBjb2RlICUyZCBcIiwgYmxfb3JkZXJbcmFua10pKTtcbiAgICBzZW5kX2JpdHMocywgcy5ibF90cmVlW2JsX29yZGVyW3JhbmtdICogMiArIDFdLyouTGVuKi8sIDMpO1xuICB9XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgdHJlZTogc2VudCAlbGRcIiwgcy0+Yml0c19zZW50KSk7XG5cbiAgc2VuZF90cmVlKHMsIHMuZHluX2x0cmVlLCBsY29kZXMgLSAxKTsgLyogbGl0ZXJhbCB0cmVlICovXG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxubGl0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xuXG4gIHNlbmRfdHJlZShzLCBzLmR5bl9kdHJlZSwgZGNvZGVzIC0gMSk7IC8qIGRpc3RhbmNlIHRyZWUgKi9cbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5kaXN0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ2hlY2sgaWYgdGhlIGRhdGEgdHlwZSBpcyBURVhUIG9yIEJJTkFSWSwgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4gKiAtIFRFWFQgaWYgdGhlIHR3byBjb25kaXRpb25zIGJlbG93IGFyZSBzYXRpc2ZpZWQ6XG4gKiAgICBhKSBUaGVyZSBhcmUgbm8gbm9uLXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBiZWxvbmdpbmcgdG8gdGhlXG4gKiAgICAgICBcImJsYWNrIGxpc3RcIiAoMC4uNiwgMTQuLjI1LCAyOC4uMzEpLlxuICogICAgYikgVGhlcmUgaXMgYXQgbGVhc3Qgb25lIHByaW50YWJsZSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIHRoZVxuICogICAgICAgXCJ3aGl0ZSBsaXN0XCIgKDkge1RBQn0sIDEwIHtMRn0sIDEzIHtDUn0sIDMyLi4yNTUpLlxuICogLSBCSU5BUlkgb3RoZXJ3aXNlLlxuICogLSBUaGUgZm9sbG93aW5nIHBhcnRpYWxseS1wb3J0YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgZm9ybSBhXG4gKiAgIFwiZ3JheSBsaXN0XCIgdGhhdCBpcyBpZ25vcmVkIGluIHRoaXMgZGV0ZWN0aW9uIGFsZ29yaXRobTpcbiAqICAgKDcge0JFTH0sIDgge0JTfSwgMTEge1ZUfSwgMTIge0ZGfSwgMjYge1NVQn0sIDI3IHtFU0N9KS5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkcyBGcmVxIG9mIGR5bl9sdHJlZSBhcmUgc2V0LlxuICovXG5mdW5jdGlvbiBkZXRlY3RfZGF0YV90eXBlKHMpIHtcbiAgLyogYmxhY2tfbWFzayBpcyB0aGUgYml0IG1hc2sgb2YgYmxhY2stbGlzdGVkIGJ5dGVzXG4gICAqIHNldCBiaXRzIDAuLjYsIDE0Li4yNSwgYW5kIDI4Li4zMVxuICAgKiAweGYzZmZjMDdmID0gYmluYXJ5IDExMTEwMDExMTExMTExMTExMTAwMDAwMDAxMTExMTExXG4gICAqL1xuICB2YXIgYmxhY2tfbWFzayA9IDB4ZjNmZmMwN2Y7XG4gIHZhciBuO1xuXG4gIC8qIENoZWNrIGZvciBub24tdGV4dHVhbCAoXCJibGFjay1saXN0ZWRcIikgYnl0ZXMuICovXG4gIGZvciAobiA9IDA7IG4gPD0gMzE7IG4rKywgYmxhY2tfbWFzayA+Pj49IDEpIHtcbiAgICBpZiAoKGJsYWNrX21hc2sgJiAxKSAmJiAocy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSkge1xuICAgICAgcmV0dXJuIFpfQklOQVJZO1xuICAgIH1cbiAgfVxuXG4gIC8qIENoZWNrIGZvciB0ZXh0dWFsIChcIndoaXRlLWxpc3RlZFwiKSBieXRlcy4gKi9cbiAgaWYgKHMuZHluX2x0cmVlWzkgKiAyXS8qLkZyZXEqLyAhPT0gMCB8fCBzLmR5bl9sdHJlZVsxMCAqIDJdLyouRnJlcSovICE9PSAwIHx8XG4gICAgICBzLmR5bl9sdHJlZVsxMyAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgcmV0dXJuIFpfVEVYVDtcbiAgfVxuICBmb3IgKG4gPSAzMjsgbiA8IExJVEVSQUxTOyBuKyspIHtcbiAgICBpZiAocy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgICByZXR1cm4gWl9URVhUO1xuICAgIH1cbiAgfVxuXG4gIC8qIFRoZXJlIGFyZSBubyBcImJsYWNrLWxpc3RlZFwiIG9yIFwid2hpdGUtbGlzdGVkXCIgYnl0ZXM6XG4gICAqIHRoaXMgc3RyZWFtIGVpdGhlciBpcyBlbXB0eSBvciBoYXMgdG9sZXJhdGVkIChcImdyYXktbGlzdGVkXCIpIGJ5dGVzIG9ubHkuXG4gICAqL1xuICByZXR1cm4gWl9CSU5BUlk7XG59XG5cblxudmFyIHN0YXRpY19pbml0X2RvbmUgPSBmYWxzZTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSB0cmVlIGRhdGEgc3RydWN0dXJlcyBmb3IgYSBuZXcgemxpYiBzdHJlYW0uXG4gKi9cbmZ1bmN0aW9uIF90cl9pbml0KHMpXG57XG5cbiAgaWYgKCFzdGF0aWNfaW5pdF9kb25lKSB7XG4gICAgdHJfc3RhdGljX2luaXQoKTtcbiAgICBzdGF0aWNfaW5pdF9kb25lID0gdHJ1ZTtcbiAgfVxuXG4gIHMubF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9sdHJlZSwgc3RhdGljX2xfZGVzYyk7XG4gIHMuZF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9kdHJlZSwgc3RhdGljX2RfZGVzYyk7XG4gIHMuYmxfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmJsX3RyZWUsIHN0YXRpY19ibF9kZXNjKTtcblxuICBzLmJpX2J1ZiA9IDA7XG4gIHMuYmlfdmFsaWQgPSAwO1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBmaXJzdCBmaWxlOiAqL1xuICBpbml0X2Jsb2NrKHMpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIHN0b3JlZCBibG9ja1xuICovXG5mdW5jdGlvbiBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdClcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jayAqL1xuLy91bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi9cbi8vaW50IGxhc3Q7ICAgICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqL1xue1xuICBzZW5kX2JpdHMocywgKFNUT1JFRF9CTE9DSyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTsgICAgLyogc2VuZCBibG9jayB0eXBlICovXG4gIGNvcHlfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCB0cnVlKTsgLyogd2l0aCBoZWFkZXIgKi9cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgb25lIGVtcHR5IHN0YXRpYyBibG9jayB0byBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUuXG4gKiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5IHJlbWFpbiBpbiB0aGUgYml0IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gX3RyX2FsaWduKHMpIHtcbiAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUyA8PCAxLCAzKTtcbiAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgc3RhdGljX2x0cmVlKTtcbiAgYmlfZmx1c2gocyk7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50IGJsb2NrOiBkeW5hbWljIHRyZWVzLCBzdGF0aWNcbiAqIHRyZWVzIG9yIHN0b3JlLCBhbmQgb3V0cHV0IHRoZSBlbmNvZGVkIGJsb2NrIHRvIHRoZSB6aXAgZmlsZS5cbiAqL1xuZnVuY3Rpb24gX3RyX2ZsdXNoX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdClcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jaywgb3IgTlVMTCBpZiB0b28gb2xkICovXG4vL3VsZyBzdG9yZWRfbGVuOyAgIC8qIGxlbmd0aCBvZiBpbnB1dCBibG9jayAqL1xuLy9pbnQgbGFzdDsgICAgICAgICAvKiBvbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBmb3IgYSBmaWxlICovXG57XG4gIHZhciBvcHRfbGVuYiwgc3RhdGljX2xlbmI7ICAvKiBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGluIGJ5dGVzICovXG4gIHZhciBtYXhfYmxpbmRleCA9IDA7ICAgICAgICAvKiBpbmRleCBvZiBsYXN0IGJpdCBsZW5ndGggY29kZSBvZiBub24gemVybyBmcmVxICovXG5cbiAgLyogQnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgdW5sZXNzIGEgc3RvcmVkIGJsb2NrIGlzIGZvcmNlZCAqL1xuICBpZiAocy5sZXZlbCA+IDApIHtcblxuICAgIC8qIENoZWNrIGlmIHRoZSBmaWxlIGlzIGJpbmFyeSBvciB0ZXh0ICovXG4gICAgaWYgKHMuc3RybS5kYXRhX3R5cGUgPT09IFpfVU5LTk9XTikge1xuICAgICAgcy5zdHJtLmRhdGFfdHlwZSA9IGRldGVjdF9kYXRhX3R5cGUocyk7XG4gICAgfVxuXG4gICAgLyogQ29uc3RydWN0IHRoZSBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqL1xuICAgIGJ1aWxkX3RyZWUocywgcy5sX2Rlc2MpO1xuICAgIC8vIFRyYWNldigoc3RkZXJyLCBcIlxcbmxpdCBkYXRhOiBkeW4gJWxkLCBzdGF0ICVsZFwiLCBzLT5vcHRfbGVuLFxuICAgIC8vICAgICAgICBzLT5zdGF0aWNfbGVuKSk7XG5cbiAgICBidWlsZF90cmVlKHMsIHMuZF9kZXNjKTtcbiAgICAvLyBUcmFjZXYoKHN0ZGVyciwgXCJcXG5kaXN0IGRhdGE6IGR5biAlbGQsIHN0YXQgJWxkXCIsIHMtPm9wdF9sZW4sXG4gICAgLy8gICAgICAgIHMtPnN0YXRpY19sZW4pKTtcbiAgICAvKiBBdCB0aGlzIHBvaW50LCBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGFyZSB0aGUgdG90YWwgYml0IGxlbmd0aHMgb2ZcbiAgICAgKiB0aGUgY29tcHJlc3NlZCBibG9jayBkYXRhLCBleGNsdWRpbmcgdGhlIHRyZWUgcmVwcmVzZW50YXRpb25zLlxuICAgICAqL1xuXG4gICAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZSBmb3IgdGhlIGFib3ZlIHR3byB0cmVlcywgYW5kIGdldCB0aGUgaW5kZXhcbiAgICAgKiBpbiBibF9vcmRlciBvZiB0aGUgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgdG8gc2VuZC5cbiAgICAgKi9cbiAgICBtYXhfYmxpbmRleCA9IGJ1aWxkX2JsX3RyZWUocyk7XG5cbiAgICAvKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcuIENvbXB1dGUgdGhlIGJsb2NrIGxlbmd0aHMgaW4gYnl0ZXMuICovXG4gICAgb3B0X2xlbmIgPSAocy5vcHRfbGVuICsgMyArIDcpID4+PiAzO1xuICAgIHN0YXRpY19sZW5iID0gKHMuc3RhdGljX2xlbiArIDMgKyA3KSA+Pj4gMztcblxuICAgIC8vIFRyYWNldigoc3RkZXJyLCBcIlxcbm9wdCAlbHUoJWx1KSBzdGF0ICVsdSglbHUpIHN0b3JlZCAlbHUgbGl0ICV1IFwiLFxuICAgIC8vICAgICAgICBvcHRfbGVuYiwgcy0+b3B0X2xlbiwgc3RhdGljX2xlbmIsIHMtPnN0YXRpY19sZW4sIHN0b3JlZF9sZW4sXG4gICAgLy8gICAgICAgIHMtPmxhc3RfbGl0KSk7XG5cbiAgICBpZiAoc3RhdGljX2xlbmIgPD0gb3B0X2xlbmIpIHsgb3B0X2xlbmIgPSBzdGF0aWNfbGVuYjsgfVxuXG4gIH0gZWxzZSB7XG4gICAgLy8gQXNzZXJ0KGJ1ZiAhPSAoY2hhciopMCwgXCJsb3N0IGJ1ZlwiKTtcbiAgICBvcHRfbGVuYiA9IHN0YXRpY19sZW5iID0gc3RvcmVkX2xlbiArIDU7IC8qIGZvcmNlIGEgc3RvcmVkIGJsb2NrICovXG4gIH1cblxuICBpZiAoKHN0b3JlZF9sZW4gKyA0IDw9IG9wdF9sZW5iKSAmJiAoYnVmICE9PSAtMSkpIHtcbiAgICAvKiA0OiB0d28gd29yZHMgZm9yIHRoZSBsZW5ndGhzICovXG5cbiAgICAvKiBUaGUgdGVzdCBidWYgIT0gTlVMTCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBMSVRfQlVGU0laRSA+IFdTSVpFLlxuICAgICAqIE90aGVyd2lzZSB3ZSBjYW4ndCBoYXZlIHByb2Nlc3NlZCBtb3JlIHRoYW4gV1NJWkUgaW5wdXQgYnl0ZXMgc2luY2VcbiAgICAgKiB0aGUgbGFzdCBibG9jayBmbHVzaCwgYmVjYXVzZSBjb21wcmVzc2lvbiB3b3VsZCBoYXZlIGJlZW5cbiAgICAgKiBzdWNjZXNzZnVsLiBJZiBMSVRfQlVGU0laRSA8PSBXU0laRSwgaXQgaXMgbmV2ZXIgdG9vIGxhdGUgdG9cbiAgICAgKiB0cmFuc2Zvcm0gYSBibG9jayBpbnRvIGEgc3RvcmVkIGJsb2NrLlxuICAgICAqL1xuICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KTtcblxuICB9IGVsc2UgaWYgKHMuc3RyYXRlZ3kgPT09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT09IG9wdF9sZW5iKSB7XG5cbiAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTtcbiAgICBjb21wcmVzc19ibG9jayhzLCBzdGF0aWNfbHRyZWUsIHN0YXRpY19kdHJlZSk7XG5cbiAgfSBlbHNlIHtcbiAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTtcbiAgICBzZW5kX2FsbF90cmVlcyhzLCBzLmxfZGVzYy5tYXhfY29kZSArIDEsIHMuZF9kZXNjLm1heF9jb2RlICsgMSwgbWF4X2JsaW5kZXggKyAxKTtcbiAgICBjb21wcmVzc19ibG9jayhzLCBzLmR5bl9sdHJlZSwgcy5keW5fZHRyZWUpO1xuICB9XG4gIC8vIEFzc2VydCAocy0+Y29tcHJlc3NlZF9sZW4gPT0gcy0+Yml0c19zZW50LCBcImJhZCBjb21wcmVzc2VkIHNpemVcIik7XG4gIC8qIFRoZSBhYm92ZSBjaGVjayBpcyBtYWRlIG1vZCAyXjMyLCBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gNTEyIE1CXG4gICAqIGFuZCB1TG9uZyBpbXBsZW1lbnRlZCBvbiAzMiBiaXRzLlxuICAgKi9cbiAgaW5pdF9ibG9jayhzKTtcblxuICBpZiAobGFzdCkge1xuICAgIGJpX3dpbmR1cChzKTtcbiAgfVxuICAvLyBUcmFjZXYoKHN0ZGVycixcIlxcbmNvbXBybGVuICVsdSglbHUpIFwiLCBzLT5jb21wcmVzc2VkX2xlbj4+MyxcbiAgLy8gICAgICAgcy0+Y29tcHJlc3NlZF9sZW4tNypsYXN0KSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2F2ZSB0aGUgbWF0Y2ggaW5mbyBhbmQgdGFsbHkgdGhlIGZyZXF1ZW5jeSBjb3VudHMuIFJldHVybiB0cnVlIGlmXG4gKiB0aGUgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQuXG4gKi9cbmZ1bmN0aW9uIF90cl90YWxseShzLCBkaXN0LCBsYylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICB1bnNpZ25lZCBkaXN0OyAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi9cbi8vICAgIHVuc2lnbmVkIGxjOyAgICAvKiBtYXRjaCBsZW5ndGgtTUlOX01BVENIIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0PT0wKSAqL1xue1xuICAvL3ZhciBvdXRfbGVuZ3RoLCBpbl9sZW5ndGgsIGRjb2RlO1xuXG4gIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyXSAgICAgPSAoZGlzdCA+Pj4gOCkgJiAweGZmO1xuICBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBzLmxhc3RfbGl0ICogMiArIDFdID0gZGlzdCAmIDB4ZmY7XG5cbiAgcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgcy5sYXN0X2xpdF0gPSBsYyAmIDB4ZmY7XG4gIHMubGFzdF9saXQrKztcblxuICBpZiAoZGlzdCA9PT0gMCkge1xuICAgIC8qIGxjIGlzIHRoZSB1bm1hdGNoZWQgY2hhciAqL1xuICAgIHMuZHluX2x0cmVlW2xjICogMl0vKi5GcmVxKi8rKztcbiAgfSBlbHNlIHtcbiAgICBzLm1hdGNoZXMrKztcbiAgICAvKiBIZXJlLCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovXG4gICAgZGlzdC0tOyAgICAgICAgICAgICAvKiBkaXN0ID0gbWF0Y2ggZGlzdGFuY2UgLSAxICovXG4gICAgLy9Bc3NlcnQoKHVzaClkaXN0IDwgKHVzaClNQVhfRElTVChzKSAmJlxuICAgIC8vICAgICAgICh1c2gpbGMgPD0gKHVzaCkoTUFYX01BVENILU1JTl9NQVRDSCkgJiZcbiAgICAvLyAgICAgICAodXNoKWRfY29kZShkaXN0KSA8ICh1c2gpRF9DT0RFUywgIFwiX3RyX3RhbGx5OiBiYWQgbWF0Y2hcIik7XG5cbiAgICBzLmR5bl9sdHJlZVsoX2xlbmd0aF9jb2RlW2xjXSArIExJVEVSQUxTICsgMSkgKiAyXS8qLkZyZXEqLysrO1xuICAgIHMuZHluX2R0cmVlW2RfY29kZShkaXN0KSAqIDJdLyouRnJlcSovKys7XG4gIH1cblxuLy8gKCEpIFRoaXMgYmxvY2sgaXMgZGlzYWJsZWQgaW4gemxpYiBkZWZhdWx0cyxcbi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHlcblxuLy8jaWZkZWYgVFJVTkNBVEVfQkxPQ0tcbi8vICAvKiBUcnkgdG8gZ3Vlc3MgaWYgaXQgaXMgcHJvZml0YWJsZSB0byBzdG9wIHRoZSBjdXJyZW50IGJsb2NrIGhlcmUgKi9cbi8vICBpZiAoKHMubGFzdF9saXQgJiAweDFmZmYpID09PSAwICYmIHMubGV2ZWwgPiAyKSB7XG4vLyAgICAvKiBDb21wdXRlIGFuIHVwcGVyIGJvdW5kIGZvciB0aGUgY29tcHJlc3NlZCBsZW5ndGggKi9cbi8vICAgIG91dF9sZW5ndGggPSBzLmxhc3RfbGl0Kjg7XG4vLyAgICBpbl9sZW5ndGggPSBzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydDtcbi8vXG4vLyAgICBmb3IgKGRjb2RlID0gMDsgZGNvZGUgPCBEX0NPREVTOyBkY29kZSsrKSB7XG4vLyAgICAgIG91dF9sZW5ndGggKz0gcy5keW5fZHRyZWVbZGNvZGUqMl0vKi5GcmVxKi8gKiAoNSArIGV4dHJhX2RiaXRzW2Rjb2RlXSk7XG4vLyAgICB9XG4vLyAgICBvdXRfbGVuZ3RoID4+Pj0gMztcbi8vICAgIC8vVHJhY2V2KChzdGRlcnIsXCJcXG5sYXN0X2xpdCAldSwgaW4gJWxkLCBvdXQgfiVsZCglbGQlJSkgXCIsXG4vLyAgICAvLyAgICAgICBzLT5sYXN0X2xpdCwgaW5fbGVuZ3RoLCBvdXRfbGVuZ3RoLFxuLy8gICAgLy8gICAgICAgMTAwTCAtIG91dF9sZW5ndGgqMTAwTC9pbl9sZW5ndGgpKTtcbi8vICAgIGlmIChzLm1hdGNoZXMgPCAocy5sYXN0X2xpdD4+MSkvKmludCAvMiovICYmIG91dF9sZW5ndGggPCAoaW5fbGVuZ3RoPj4xKS8qaW50IC8yKi8pIHtcbi8vICAgICAgcmV0dXJuIHRydWU7XG4vLyAgICB9XG4vLyAgfVxuLy8jZW5kaWZcblxuICByZXR1cm4gKHMubGFzdF9saXQgPT09IHMubGl0X2J1ZnNpemUgLSAxKTtcbiAgLyogV2UgYXZvaWQgZXF1YWxpdHkgd2l0aCBsaXRfYnVmc2l6ZSBiZWNhdXNlIG9mIHdyYXBhcm91bmQgYXQgNjRLXG4gICAqIG9uIDE2IGJpdCBtYWNoaW5lcyBhbmQgYmVjYXVzZSBzdG9yZWQgYmxvY2tzIGFyZSByZXN0cmljdGVkIHRvXG4gICAqIDY0Sy0xIGJ5dGVzLlxuICAgKi9cbn1cblxuZXhwb3J0cy5fdHJfaW5pdCAgPSBfdHJfaW5pdDtcbmV4cG9ydHMuX3RyX3N0b3JlZF9ibG9jayA9IF90cl9zdG9yZWRfYmxvY2s7XG5leHBvcnRzLl90cl9mbHVzaF9ibG9jayAgPSBfdHJfZmx1c2hfYmxvY2s7XG5leHBvcnRzLl90cl90YWxseSA9IF90cl90YWxseTtcbmV4cG9ydHMuX3RyX2FsaWduID0gX3RyX2FsaWduO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMjkyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbmZ1bmN0aW9uIFpTdHJlYW0oKSB7XG4gIC8qIG5leHQgaW5wdXQgYnl0ZSAqL1xuICB0aGlzLmlucHV0ID0gbnVsbDsgLy8gSlMgc3BlY2lmaWMsIGJlY2F1c2Ugd2UgaGF2ZSBubyBwb2ludGVyc1xuICB0aGlzLm5leHRfaW4gPSAwO1xuICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IGlucHV0ICovXG4gIHRoaXMuYXZhaWxfaW4gPSAwO1xuICAvKiB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi9cbiAgdGhpcy50b3RhbF9pbiA9IDA7XG4gIC8qIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1dCB0aGVyZSAqL1xuICB0aGlzLm91dHB1dCA9IG51bGw7IC8vIEpTIHNwZWNpZmljLCBiZWNhdXNlIHdlIGhhdmUgbm8gcG9pbnRlcnNcbiAgdGhpcy5uZXh0X291dCA9IDA7XG4gIC8qIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG91dHB1dCAqL1xuICB0aGlzLmF2YWlsX291dCA9IDA7XG4gIC8qIHRvdGFsIG51bWJlciBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovXG4gIHRoaXMudG90YWxfb3V0ID0gMDtcbiAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovXG4gIHRoaXMubXNnID0gJycvKlpfTlVMTCovO1xuICAvKiBub3QgdmlzaWJsZSBieSBhcHBsaWNhdGlvbnMgKi9cbiAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQgKi9cbiAgdGhpcy5kYXRhX3R5cGUgPSAyLypaX1VOS05PV04qLztcbiAgLyogYWRsZXIzMiB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgKi9cbiAgdGhpcy5hZGxlciA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWlN0cmVhbTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDE1NTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzY5Nzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgZnVuY3Rpb25zSGF2ZUNvbmZpZ3VyYWJsZU5hbWVzID0gKF9fd2VicGFja19yZXF1aXJlX18oNTk3MikuZnVuY3Rpb25zSGF2ZUNvbmZpZ3VyYWJsZU5hbWVzKSgpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmhhc0luZGljZXMpIHtcblx0XHRyZXN1bHQgKz0gJ2QnO1xuXHR9XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmlmIChmdW5jdGlvbnNIYXZlQ29uZmlndXJhYmxlTmFtZXMgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgXCJuYW1lXCIsICh7IHZhbHVlOiAnZ2V0IGZsYWdzJyB9KSk7XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI4NDc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGRlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDI4OSk7XG52YXIgY2FsbEJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1NTkpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2OTcpO1xudmFyIGdldFBvbHlmaWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzIxKTtcbnZhciBzaGltID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzUzKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChnZXRQb2x5ZmlsbCgpKTtcblxuZGVmaW5lKGZsYWdzQm91bmQsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYWdzQm91bmQ7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE3MjE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGltcGxlbWVudGF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjk3KTtcblxudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg0Mjg5KS5zdXBwb3J0c0Rlc2NyaXB0b3JzKTtcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzICYmICgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKFxuXHRcdFx0ZGVzY3JpcHRvclxuXHRcdFx0JiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nXG5cdFx0XHQmJiB0eXBlb2YgUmVnRXhwLnByb3RvdHlwZS5kb3RBbGwgPT09ICdib29sZWFuJ1xuXHRcdFx0JiYgdHlwZW9mIFJlZ0V4cC5wcm90b3R5cGUuaGFzSW5kaWNlcyA9PT0gJ2Jvb2xlYW4nXG5cdFx0KSB7XG5cdFx0XHQvKiBlc2xpbnQgZ2V0dGVyLXJldHVybjogMCAqL1xuXHRcdFx0dmFyIGNhbGxzID0gJyc7XG5cdFx0XHR2YXIgbyA9IHt9O1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sICdoYXNJbmRpY2VzJywge1xuXHRcdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRjYWxscyArPSAnZCc7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sICdzdGlja3knLCB7XG5cdFx0XHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGNhbGxzICs9ICd5Jztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoY2FsbHMgPT09ICdkeScpIHtcblx0XHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNzUzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gKF9fd2VicGFja19yZXF1aXJlX18oNDI4OSkuc3VwcG9ydHNEZXNjcmlwdG9ycyk7XG52YXIgZ2V0UG9seWZpbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MjEpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDYwOTk6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLyogcHJvdmlkZWQgZGVwZW5kZW5jeSAqLyB2YXIgQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODIzKVtcIkJ1ZmZlclwiXTtcbjsoZnVuY3Rpb24gKHNheCkgeyAvLyB3cmFwcGVyIGZvciBub24tbm9kZSBlbnZzXG4gIHNheC5wYXJzZXIgPSBmdW5jdGlvbiAoc3RyaWN0LCBvcHQpIHsgcmV0dXJuIG5ldyBTQVhQYXJzZXIoc3RyaWN0LCBvcHQpIH1cbiAgc2F4LlNBWFBhcnNlciA9IFNBWFBhcnNlclxuICBzYXguU0FYU3RyZWFtID0gU0FYU3RyZWFtXG4gIHNheC5jcmVhdGVTdHJlYW0gPSBjcmVhdGVTdHJlYW1cblxuICAvLyBXaGVuIHdlIHBhc3MgdGhlIE1BWF9CVUZGRVJfTEVOR1RIIHBvc2l0aW9uLCBzdGFydCBjaGVja2luZyBmb3IgYnVmZmVyIG92ZXJydW5zLlxuICAvLyBXaGVuIHdlIGNoZWNrLCBzY2hlZHVsZSB0aGUgbmV4dCBjaGVjayBmb3IgTUFYX0JVRkZFUl9MRU5HVEggLSAobWF4KGJ1ZmZlciBsZW5ndGhzKSksXG4gIC8vIHNpbmNlIHRoYXQncyB0aGUgZWFybGllc3QgdGhhdCBhIGJ1ZmZlciBvdmVycnVuIGNvdWxkIG9jY3VyLiAgVGhpcyB3YXksIGNoZWNrcyBhcmVcbiAgLy8gYXMgcmFyZSBhcyByZXF1aXJlZCwgYnV0IGFzIG9mdGVuIGFzIG5lY2Vzc2FyeSB0byBlbnN1cmUgbmV2ZXIgY3Jvc3NpbmcgdGhpcyBib3VuZC5cbiAgLy8gRnVydGhlcm1vcmUsIGJ1ZmZlcnMgYXJlIG9ubHkgdGVzdGVkIGF0IG1vc3Qgb25jZSBwZXIgd3JpdGUoKSwgc28gcGFzc2luZyBhIHZlcnlcbiAgLy8gbGFyZ2Ugc3RyaW5nIGludG8gd3JpdGUoKSBtaWdodCBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMsIGJ1dCB0aGlzIGlzIG1hbmFnZWFibGUgYnlcbiAgLy8gdGhlIGNhbGxlciwgc28gaXQgaXMgYXNzdW1lZCB0byBiZSBzYWZlLiAgVGh1cywgYSBjYWxsIHRvIHdyaXRlKCkgbWF5LCBpbiB0aGUgZXh0cmVtZVxuICAvLyBlZGdlIGNhc2UsIHJlc3VsdCBpbiBjcmVhdGluZyBhdCBtb3N0IG9uZSBjb21wbGV0ZSBjb3B5IG9mIHRoZSBzdHJpbmcgcGFzc2VkIGluLlxuICAvLyBTZXQgdG8gSW5maW5pdHkgdG8gaGF2ZSB1bmxpbWl0ZWQgYnVmZmVycy5cbiAgc2F4Lk1BWF9CVUZGRVJfTEVOR1RIID0gNjQgKiAxMDI0XG5cbiAgdmFyIGJ1ZmZlcnMgPSBbXG4gICAgJ2NvbW1lbnQnLCAnc2dtbERlY2wnLCAndGV4dE5vZGUnLCAndGFnTmFtZScsICdkb2N0eXBlJyxcbiAgICAncHJvY0luc3ROYW1lJywgJ3Byb2NJbnN0Qm9keScsICdlbnRpdHknLCAnYXR0cmliTmFtZScsXG4gICAgJ2F0dHJpYlZhbHVlJywgJ2NkYXRhJywgJ3NjcmlwdCdcbiAgXVxuXG4gIHNheC5FVkVOVFMgPSBbXG4gICAgJ3RleHQnLFxuICAgICdwcm9jZXNzaW5naW5zdHJ1Y3Rpb24nLFxuICAgICdzZ21sZGVjbGFyYXRpb24nLFxuICAgICdkb2N0eXBlJyxcbiAgICAnY29tbWVudCcsXG4gICAgJ29wZW50YWdzdGFydCcsXG4gICAgJ2F0dHJpYnV0ZScsXG4gICAgJ29wZW50YWcnLFxuICAgICdjbG9zZXRhZycsXG4gICAgJ29wZW5jZGF0YScsXG4gICAgJ2NkYXRhJyxcbiAgICAnY2xvc2VjZGF0YScsXG4gICAgJ2Vycm9yJyxcbiAgICAnZW5kJyxcbiAgICAncmVhZHknLFxuICAgICdzY3JpcHQnLFxuICAgICdvcGVubmFtZXNwYWNlJyxcbiAgICAnY2xvc2VuYW1lc3BhY2UnXG4gIF1cblxuICBmdW5jdGlvbiBTQVhQYXJzZXIgKHN0cmljdCwgb3B0KSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNBWFBhcnNlcikpIHtcbiAgICAgIHJldHVybiBuZXcgU0FYUGFyc2VyKHN0cmljdCwgb3B0KVxuICAgIH1cblxuICAgIHZhciBwYXJzZXIgPSB0aGlzXG4gICAgY2xlYXJCdWZmZXJzKHBhcnNlcilcbiAgICBwYXJzZXIucSA9IHBhcnNlci5jID0gJydcbiAgICBwYXJzZXIuYnVmZmVyQ2hlY2tQb3NpdGlvbiA9IHNheC5NQVhfQlVGRkVSX0xFTkdUSFxuICAgIHBhcnNlci5vcHQgPSBvcHQgfHwge31cbiAgICBwYXJzZXIub3B0Lmxvd2VyY2FzZSA9IHBhcnNlci5vcHQubG93ZXJjYXNlIHx8IHBhcnNlci5vcHQubG93ZXJjYXNldGFnc1xuICAgIHBhcnNlci5sb29zZUNhc2UgPSBwYXJzZXIub3B0Lmxvd2VyY2FzZSA/ICd0b0xvd2VyQ2FzZScgOiAndG9VcHBlckNhc2UnXG4gICAgcGFyc2VyLnRhZ3MgPSBbXVxuICAgIHBhcnNlci5jbG9zZWQgPSBwYXJzZXIuY2xvc2VkUm9vdCA9IHBhcnNlci5zYXdSb290ID0gZmFsc2VcbiAgICBwYXJzZXIudGFnID0gcGFyc2VyLmVycm9yID0gbnVsbFxuICAgIHBhcnNlci5zdHJpY3QgPSAhIXN0cmljdFxuICAgIHBhcnNlci5ub3NjcmlwdCA9ICEhKHN0cmljdCB8fCBwYXJzZXIub3B0Lm5vc2NyaXB0KVxuICAgIHBhcnNlci5zdGF0ZSA9IFMuQkVHSU5cbiAgICBwYXJzZXIuc3RyaWN0RW50aXRpZXMgPSBwYXJzZXIub3B0LnN0cmljdEVudGl0aWVzXG4gICAgcGFyc2VyLkVOVElUSUVTID0gcGFyc2VyLnN0cmljdEVudGl0aWVzID8gT2JqZWN0LmNyZWF0ZShzYXguWE1MX0VOVElUSUVTKSA6IE9iamVjdC5jcmVhdGUoc2F4LkVOVElUSUVTKVxuICAgIHBhcnNlci5hdHRyaWJMaXN0ID0gW11cblxuICAgIC8vIG5hbWVzcGFjZXMgZm9ybSBhIHByb3RvdHlwZSBjaGFpbi5cbiAgICAvLyBpdCBhbHdheXMgcG9pbnRzIGF0IHRoZSBjdXJyZW50IHRhZyxcbiAgICAvLyB3aGljaCBwcm90b3MgdG8gaXRzIHBhcmVudCB0YWcuXG4gICAgaWYgKHBhcnNlci5vcHQueG1sbnMpIHtcbiAgICAgIHBhcnNlci5ucyA9IE9iamVjdC5jcmVhdGUocm9vdE5TKVxuICAgIH1cblxuICAgIC8vIG1vc3RseSBqdXN0IGZvciBlcnJvciByZXBvcnRpbmdcbiAgICBwYXJzZXIudHJhY2tQb3NpdGlvbiA9IHBhcnNlci5vcHQucG9zaXRpb24gIT09IGZhbHNlXG4gICAgaWYgKHBhcnNlci50cmFja1Bvc2l0aW9uKSB7XG4gICAgICBwYXJzZXIucG9zaXRpb24gPSBwYXJzZXIubGluZSA9IHBhcnNlci5jb2x1bW4gPSAwXG4gICAgfVxuICAgIGVtaXQocGFyc2VyLCAnb25yZWFkeScpXG4gIH1cblxuICBpZiAoIU9iamVjdC5jcmVhdGUpIHtcbiAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgIGZ1bmN0aW9uIEYgKCkge31cbiAgICAgIEYucHJvdG90eXBlID0gb1xuICAgICAgdmFyIG5ld2YgPSBuZXcgRigpXG4gICAgICByZXR1cm4gbmV3ZlxuICAgIH1cbiAgfVxuXG4gIGlmICghT2JqZWN0LmtleXMpIHtcbiAgICBPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYSA9IFtdXG4gICAgICBmb3IgKHZhciBpIGluIG8pIGlmIChvLmhhc093blByb3BlcnR5KGkpKSBhLnB1c2goaSlcbiAgICAgIHJldHVybiBhXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tCdWZmZXJMZW5ndGggKHBhcnNlcikge1xuICAgIHZhciBtYXhBbGxvd2VkID0gTWF0aC5tYXgoc2F4Lk1BWF9CVUZGRVJfTEVOR1RILCAxMClcbiAgICB2YXIgbWF4QWN0dWFsID0gMFxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYnVmZmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBsZW4gPSBwYXJzZXJbYnVmZmVyc1tpXV0ubGVuZ3RoXG4gICAgICBpZiAobGVuID4gbWF4QWxsb3dlZCkge1xuICAgICAgICAvLyBUZXh0L2NkYXRhIG5vZGVzIGNhbiBnZXQgYmlnLCBhbmQgc2luY2UgdGhleSdyZSBidWZmZXJlZCxcbiAgICAgICAgLy8gd2UgY2FuIGdldCBoZXJlIHVuZGVyIG5vcm1hbCBjb25kaXRpb25zLlxuICAgICAgICAvLyBBdm9pZCBpc3N1ZXMgYnkgZW1pdHRpbmcgdGhlIHRleHQgbm9kZSBub3csXG4gICAgICAgIC8vIHNvIGF0IGxlYXN0IGl0IHdvbid0IGdldCBhbnkgYmlnZ2VyLlxuICAgICAgICBzd2l0Y2ggKGJ1ZmZlcnNbaV0pIHtcbiAgICAgICAgICBjYXNlICd0ZXh0Tm9kZSc6XG4gICAgICAgICAgICBjbG9zZVRleHQocGFyc2VyKVxuICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgIGNhc2UgJ2NkYXRhJzpcbiAgICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uY2RhdGEnLCBwYXJzZXIuY2RhdGEpXG4gICAgICAgICAgICBwYXJzZXIuY2RhdGEgPSAnJ1xuICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgIGNhc2UgJ3NjcmlwdCc6XG4gICAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbnNjcmlwdCcsIHBhcnNlci5zY3JpcHQpXG4gICAgICAgICAgICBwYXJzZXIuc2NyaXB0ID0gJydcbiAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZXJyb3IocGFyc2VyLCAnTWF4IGJ1ZmZlciBsZW5ndGggZXhjZWVkZWQ6ICcgKyBidWZmZXJzW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtYXhBY3R1YWwgPSBNYXRoLm1heChtYXhBY3R1YWwsIGxlbilcbiAgICB9XG4gICAgLy8gc2NoZWR1bGUgdGhlIG5leHQgY2hlY2sgZm9yIHRoZSBlYXJsaWVzdCBwb3NzaWJsZSBidWZmZXIgb3ZlcnJ1bi5cbiAgICB2YXIgbSA9IHNheC5NQVhfQlVGRkVSX0xFTkdUSCAtIG1heEFjdHVhbFxuICAgIHBhcnNlci5idWZmZXJDaGVja1Bvc2l0aW9uID0gbSArIHBhcnNlci5wb3NpdGlvblxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJCdWZmZXJzIChwYXJzZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGJ1ZmZlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBwYXJzZXJbYnVmZmVyc1tpXV0gPSAnJ1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoQnVmZmVycyAocGFyc2VyKSB7XG4gICAgY2xvc2VUZXh0KHBhcnNlcilcbiAgICBpZiAocGFyc2VyLmNkYXRhICE9PSAnJykge1xuICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25jZGF0YScsIHBhcnNlci5jZGF0YSlcbiAgICAgIHBhcnNlci5jZGF0YSA9ICcnXG4gICAgfVxuICAgIGlmIChwYXJzZXIuc2NyaXB0ICE9PSAnJykge1xuICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25zY3JpcHQnLCBwYXJzZXIuc2NyaXB0KVxuICAgICAgcGFyc2VyLnNjcmlwdCA9ICcnXG4gICAgfVxuICB9XG5cbiAgU0FYUGFyc2VyLnByb3RvdHlwZSA9IHtcbiAgICBlbmQ6IGZ1bmN0aW9uICgpIHsgZW5kKHRoaXMpIH0sXG4gICAgd3JpdGU6IHdyaXRlLFxuICAgIHJlc3VtZTogZnVuY3Rpb24gKCkgeyB0aGlzLmVycm9yID0gbnVsbDsgcmV0dXJuIHRoaXMgfSxcbiAgICBjbG9zZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy53cml0ZShudWxsKSB9LFxuICAgIGZsdXNoOiBmdW5jdGlvbiAoKSB7IGZsdXNoQnVmZmVycyh0aGlzKSB9XG4gIH1cblxuICB2YXIgU3RyZWFtXG4gIHRyeSB7XG4gICAgU3RyZWFtID0gKF9fd2VicGFja19yZXF1aXJlX18oMjgzMCkuU3RyZWFtKVxuICB9IGNhdGNoIChleCkge1xuICAgIFN0cmVhbSA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cblxuICB2YXIgc3RyZWFtV3JhcHMgPSBzYXguRVZFTlRTLmZpbHRlcihmdW5jdGlvbiAoZXYpIHtcbiAgICByZXR1cm4gZXYgIT09ICdlcnJvcicgJiYgZXYgIT09ICdlbmQnXG4gIH0pXG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyZWFtIChzdHJpY3QsIG9wdCkge1xuICAgIHJldHVybiBuZXcgU0FYU3RyZWFtKHN0cmljdCwgb3B0KVxuICB9XG5cbiAgZnVuY3Rpb24gU0FYU3RyZWFtIChzdHJpY3QsIG9wdCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTQVhTdHJlYW0pKSB7XG4gICAgICByZXR1cm4gbmV3IFNBWFN0cmVhbShzdHJpY3QsIG9wdClcbiAgICB9XG5cbiAgICBTdHJlYW0uYXBwbHkodGhpcylcblxuICAgIHRoaXMuX3BhcnNlciA9IG5ldyBTQVhQYXJzZXIoc3RyaWN0LCBvcHQpXG4gICAgdGhpcy53cml0YWJsZSA9IHRydWVcbiAgICB0aGlzLnJlYWRhYmxlID0gdHJ1ZVxuXG4gICAgdmFyIG1lID0gdGhpc1xuXG4gICAgdGhpcy5fcGFyc2VyLm9uZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuZW1pdCgnZW5kJylcbiAgICB9XG5cbiAgICB0aGlzLl9wYXJzZXIub25lcnJvciA9IGZ1bmN0aW9uIChlcikge1xuICAgICAgbWUuZW1pdCgnZXJyb3InLCBlcilcblxuICAgICAgLy8gaWYgZGlkbid0IHRocm93LCB0aGVuIG1lYW5zIGVycm9yIHdhcyBoYW5kbGVkLlxuICAgICAgLy8gZ28gYWhlYWQgYW5kIGNsZWFyIGVycm9yLCBzbyB3ZSBjYW4gd3JpdGUgYWdhaW4uXG4gICAgICBtZS5fcGFyc2VyLmVycm9yID0gbnVsbFxuICAgIH1cblxuICAgIHRoaXMuX2RlY29kZXIgPSBudWxsXG5cbiAgICBzdHJlYW1XcmFwcy5mb3JFYWNoKGZ1bmN0aW9uIChldikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLCAnb24nICsgZXYsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIG1lLl9wYXJzZXJbJ29uJyArIGV2XVxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgICAgaWYgKCFoKSB7XG4gICAgICAgICAgICBtZS5yZW1vdmVBbGxMaXN0ZW5lcnMoZXYpXG4gICAgICAgICAgICBtZS5fcGFyc2VyWydvbicgKyBldl0gPSBoXG4gICAgICAgICAgICByZXR1cm4gaFxuICAgICAgICAgIH1cbiAgICAgICAgICBtZS5vbihldiwgaClcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgU0FYU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RyZWFtLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogU0FYU3RyZWFtXG4gICAgfVxuICB9KVxuXG4gIFNBWFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgQnVmZmVyLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICBCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgIGlmICghdGhpcy5fZGVjb2Rlcikge1xuICAgICAgICB2YXIgU0QgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygyNTUzKS8qIC5TdHJpbmdEZWNvZGVyICovIC5zKVxuICAgICAgICB0aGlzLl9kZWNvZGVyID0gbmV3IFNEKCd1dGY4JylcbiAgICAgIH1cbiAgICAgIGRhdGEgPSB0aGlzLl9kZWNvZGVyLndyaXRlKGRhdGEpXG4gICAgfVxuXG4gICAgdGhpcy5fcGFyc2VyLndyaXRlKGRhdGEudG9TdHJpbmcoKSlcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBTQVhTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHRoaXMud3JpdGUoY2h1bmspXG4gICAgfVxuICAgIHRoaXMuX3BhcnNlci5lbmQoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBTQVhTdHJlYW0ucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBoYW5kbGVyKSB7XG4gICAgdmFyIG1lID0gdGhpc1xuICAgIGlmICghbWUuX3BhcnNlclsnb24nICsgZXZdICYmIHN0cmVhbVdyYXBzLmluZGV4T2YoZXYpICE9PSAtMSkge1xuICAgICAgbWUuX3BhcnNlclsnb24nICsgZXZdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBbYXJndW1lbnRzWzBdXSA6IEFycmF5LmFwcGx5KG51bGwsIGFyZ3VtZW50cylcbiAgICAgICAgYXJncy5zcGxpY2UoMCwgMCwgZXYpXG4gICAgICAgIG1lLmVtaXQuYXBwbHkobWUsIGFyZ3MpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmVhbS5wcm90b3R5cGUub24uY2FsbChtZSwgZXYsIGhhbmRsZXIpXG4gIH1cblxuICAvLyB0aGlzIHJlYWxseSBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIGNoYXJhY3RlciBjbGFzc2VzLlxuICAvLyBYTUwgYWxsb3dzIGFsbCBtYW5uZXIgb2YgcmlkaWN1bG91cyBudW1iZXJzIGFuZCBkaWdpdHMuXG4gIHZhciBDREFUQSA9ICdbQ0RBVEFbJ1xuICB2YXIgRE9DVFlQRSA9ICdET0NUWVBFJ1xuICB2YXIgWE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnXG4gIHZhciBYTUxOU19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nXG4gIHZhciByb290TlMgPSB7IHhtbDogWE1MX05BTUVTUEFDRSwgeG1sbnM6IFhNTE5TX05BTUVTUEFDRSB9XG5cbiAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC8jTlQtTmFtZVN0YXJ0Q2hhclxuICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIHdvcmtzIG9uIHN0cmluZ3MsIGEgc2luZ2xlIGNoYXJhY3RlciBhdCBhIHRpbWVcbiAgLy8gYXMgc3VjaCwgaXQgY2Fubm90IGV2ZXIgc3VwcG9ydCBhc3RyYWwtcGxhbmUgY2hhcmFjdGVycyAoMTAwMDAtRUZGRkYpXG4gIC8vIHdpdGhvdXQgYSBzaWduaWZpY2FudCBicmVha2luZyBjaGFuZ2UgdG8gZWl0aGVyIHRoaXMgIHBhcnNlciwgb3IgdGhlXG4gIC8vIEphdmFTY3JpcHQgbGFuZ3VhZ2UuICBJbXBsZW1lbnRhdGlvbiBvZiBhbiBlbW9qaS1jYXBhYmxlIHhtbCBwYXJzZXJcbiAgLy8gaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci5cbiAgdmFyIG5hbWVTdGFydCA9IC9bOl9BLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdL1xuXG4gIHZhciBuYW1lQm9keSA9IC9bOl9BLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwLlxcZC1dL1xuXG4gIHZhciBlbnRpdHlTdGFydCA9IC9bIzpfQS1aYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXS9cbiAgdmFyIGVudGl0eUJvZHkgPSAvWyM6X0EtWmEtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDAuXFxkLV0vXG5cbiAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlIChjKSB7XG4gICAgcmV0dXJuIGMgPT09ICcgJyB8fCBjID09PSAnXFxuJyB8fCBjID09PSAnXFxyJyB8fCBjID09PSAnXFx0J1xuICB9XG5cbiAgZnVuY3Rpb24gaXNRdW90ZSAoYykge1xuICAgIHJldHVybiBjID09PSAnXCInIHx8IGMgPT09ICdcXCcnXG4gIH1cblxuICBmdW5jdGlvbiBpc0F0dHJpYkVuZCAoYykge1xuICAgIHJldHVybiBjID09PSAnPicgfHwgaXNXaGl0ZXNwYWNlKGMpXG4gIH1cblxuICBmdW5jdGlvbiBpc01hdGNoIChyZWdleCwgYykge1xuICAgIHJldHVybiByZWdleC50ZXN0KGMpXG4gIH1cblxuICBmdW5jdGlvbiBub3RNYXRjaCAocmVnZXgsIGMpIHtcbiAgICByZXR1cm4gIWlzTWF0Y2gocmVnZXgsIGMpXG4gIH1cblxuICB2YXIgUyA9IDBcbiAgc2F4LlNUQVRFID0ge1xuICAgIEJFR0lOOiBTKyssIC8vIGxlYWRpbmcgYnl0ZSBvcmRlciBtYXJrIG9yIHdoaXRlc3BhY2VcbiAgICBCRUdJTl9XSElURVNQQUNFOiBTKyssIC8vIGxlYWRpbmcgd2hpdGVzcGFjZVxuICAgIFRFWFQ6IFMrKywgLy8gZ2VuZXJhbCBzdHVmZlxuICAgIFRFWFRfRU5USVRZOiBTKyssIC8vICZhbXAgYW5kIHN1Y2guXG4gICAgT1BFTl9XQUtBOiBTKyssIC8vIDxcbiAgICBTR01MX0RFQ0w6IFMrKywgLy8gPCFCTEFSR1xuICAgIFNHTUxfREVDTF9RVU9URUQ6IFMrKywgLy8gPCFCTEFSRyBmb28gXCJiYXJcbiAgICBET0NUWVBFOiBTKyssIC8vIDwhRE9DVFlQRVxuICAgIERPQ1RZUEVfUVVPVEVEOiBTKyssIC8vIDwhRE9DVFlQRSBcIi8vYmxhaFxuICAgIERPQ1RZUEVfRFREOiBTKyssIC8vIDwhRE9DVFlQRSBcIi8vYmxhaFwiIFsgLi4uXG4gICAgRE9DVFlQRV9EVERfUVVPVEVEOiBTKyssIC8vIDwhRE9DVFlQRSBcIi8vYmxhaFwiIFsgXCJmb29cbiAgICBDT01NRU5UX1NUQVJUSU5HOiBTKyssIC8vIDwhLVxuICAgIENPTU1FTlQ6IFMrKywgLy8gPCEtLVxuICAgIENPTU1FTlRfRU5ESU5HOiBTKyssIC8vIDwhLS0gYmxhaCAtXG4gICAgQ09NTUVOVF9FTkRFRDogUysrLCAvLyA8IS0tIGJsYWggLS1cbiAgICBDREFUQTogUysrLCAvLyA8IVtDREFUQVsgc29tZXRoaW5nXG4gICAgQ0RBVEFfRU5ESU5HOiBTKyssIC8vIF1cbiAgICBDREFUQV9FTkRJTkdfMjogUysrLCAvLyBdXVxuICAgIFBST0NfSU5TVDogUysrLCAvLyA8P2hpXG4gICAgUFJPQ19JTlNUX0JPRFk6IFMrKywgLy8gPD9oaSB0aGVyZVxuICAgIFBST0NfSU5TVF9FTkRJTkc6IFMrKywgLy8gPD9oaSBcInRoZXJlXCIgP1xuICAgIE9QRU5fVEFHOiBTKyssIC8vIDxzdHJvbmdcbiAgICBPUEVOX1RBR19TTEFTSDogUysrLCAvLyA8c3Ryb25nIC9cbiAgICBBVFRSSUI6IFMrKywgLy8gPGFcbiAgICBBVFRSSUJfTkFNRTogUysrLCAvLyA8YSBmb29cbiAgICBBVFRSSUJfTkFNRV9TQVdfV0hJVEU6IFMrKywgLy8gPGEgZm9vIF9cbiAgICBBVFRSSUJfVkFMVUU6IFMrKywgLy8gPGEgZm9vPVxuICAgIEFUVFJJQl9WQUxVRV9RVU9URUQ6IFMrKywgLy8gPGEgZm9vPVwiYmFyXG4gICAgQVRUUklCX1ZBTFVFX0NMT1NFRDogUysrLCAvLyA8YSBmb289XCJiYXJcIlxuICAgIEFUVFJJQl9WQUxVRV9VTlFVT1RFRDogUysrLCAvLyA8YSBmb289YmFyXG4gICAgQVRUUklCX1ZBTFVFX0VOVElUWV9ROiBTKyssIC8vIDxmb28gYmFyPVwiJnF1b3Q7XCJcbiAgICBBVFRSSUJfVkFMVUVfRU5USVRZX1U6IFMrKywgLy8gPGZvbyBiYXI9JnF1b3RcbiAgICBDTE9TRV9UQUc6IFMrKywgLy8gPC9hXG4gICAgQ0xPU0VfVEFHX1NBV19XSElURTogUysrLCAvLyA8L2EgICA+XG4gICAgU0NSSVBUOiBTKyssIC8vIDxzY3JpcHQ+IC4uLlxuICAgIFNDUklQVF9FTkRJTkc6IFMrKyAvLyA8c2NyaXB0PiAuLi4gPFxuICB9XG5cbiAgc2F4LlhNTF9FTlRJVElFUyA9IHtcbiAgICAnYW1wJzogJyYnLFxuICAgICdndCc6ICc+JyxcbiAgICAnbHQnOiAnPCcsXG4gICAgJ3F1b3QnOiAnXCInLFxuICAgICdhcG9zJzogXCInXCJcbiAgfVxuXG4gIHNheC5FTlRJVElFUyA9IHtcbiAgICAnYW1wJzogJyYnLFxuICAgICdndCc6ICc+JyxcbiAgICAnbHQnOiAnPCcsXG4gICAgJ3F1b3QnOiAnXCInLFxuICAgICdhcG9zJzogXCInXCIsXG4gICAgJ0FFbGlnJzogMTk4LFxuICAgICdBYWN1dGUnOiAxOTMsXG4gICAgJ0FjaXJjJzogMTk0LFxuICAgICdBZ3JhdmUnOiAxOTIsXG4gICAgJ0FyaW5nJzogMTk3LFxuICAgICdBdGlsZGUnOiAxOTUsXG4gICAgJ0F1bWwnOiAxOTYsXG4gICAgJ0NjZWRpbCc6IDE5OSxcbiAgICAnRVRIJzogMjA4LFxuICAgICdFYWN1dGUnOiAyMDEsXG4gICAgJ0VjaXJjJzogMjAyLFxuICAgICdFZ3JhdmUnOiAyMDAsXG4gICAgJ0V1bWwnOiAyMDMsXG4gICAgJ0lhY3V0ZSc6IDIwNSxcbiAgICAnSWNpcmMnOiAyMDYsXG4gICAgJ0lncmF2ZSc6IDIwNCxcbiAgICAnSXVtbCc6IDIwNyxcbiAgICAnTnRpbGRlJzogMjA5LFxuICAgICdPYWN1dGUnOiAyMTEsXG4gICAgJ09jaXJjJzogMjEyLFxuICAgICdPZ3JhdmUnOiAyMTAsXG4gICAgJ09zbGFzaCc6IDIxNixcbiAgICAnT3RpbGRlJzogMjEzLFxuICAgICdPdW1sJzogMjE0LFxuICAgICdUSE9STic6IDIyMixcbiAgICAnVWFjdXRlJzogMjE4LFxuICAgICdVY2lyYyc6IDIxOSxcbiAgICAnVWdyYXZlJzogMjE3LFxuICAgICdVdW1sJzogMjIwLFxuICAgICdZYWN1dGUnOiAyMjEsXG4gICAgJ2FhY3V0ZSc6IDIyNSxcbiAgICAnYWNpcmMnOiAyMjYsXG4gICAgJ2FlbGlnJzogMjMwLFxuICAgICdhZ3JhdmUnOiAyMjQsXG4gICAgJ2FyaW5nJzogMjI5LFxuICAgICdhdGlsZGUnOiAyMjcsXG4gICAgJ2F1bWwnOiAyMjgsXG4gICAgJ2NjZWRpbCc6IDIzMSxcbiAgICAnZWFjdXRlJzogMjMzLFxuICAgICdlY2lyYyc6IDIzNCxcbiAgICAnZWdyYXZlJzogMjMyLFxuICAgICdldGgnOiAyNDAsXG4gICAgJ2V1bWwnOiAyMzUsXG4gICAgJ2lhY3V0ZSc6IDIzNyxcbiAgICAnaWNpcmMnOiAyMzgsXG4gICAgJ2lncmF2ZSc6IDIzNixcbiAgICAnaXVtbCc6IDIzOSxcbiAgICAnbnRpbGRlJzogMjQxLFxuICAgICdvYWN1dGUnOiAyNDMsXG4gICAgJ29jaXJjJzogMjQ0LFxuICAgICdvZ3JhdmUnOiAyNDIsXG4gICAgJ29zbGFzaCc6IDI0OCxcbiAgICAnb3RpbGRlJzogMjQ1LFxuICAgICdvdW1sJzogMjQ2LFxuICAgICdzemxpZyc6IDIyMyxcbiAgICAndGhvcm4nOiAyNTQsXG4gICAgJ3VhY3V0ZSc6IDI1MCxcbiAgICAndWNpcmMnOiAyNTEsXG4gICAgJ3VncmF2ZSc6IDI0OSxcbiAgICAndXVtbCc6IDI1MixcbiAgICAneWFjdXRlJzogMjUzLFxuICAgICd5dW1sJzogMjU1LFxuICAgICdjb3B5JzogMTY5LFxuICAgICdyZWcnOiAxNzQsXG4gICAgJ25ic3AnOiAxNjAsXG4gICAgJ2lleGNsJzogMTYxLFxuICAgICdjZW50JzogMTYyLFxuICAgICdwb3VuZCc6IDE2MyxcbiAgICAnY3VycmVuJzogMTY0LFxuICAgICd5ZW4nOiAxNjUsXG4gICAgJ2JydmJhcic6IDE2NixcbiAgICAnc2VjdCc6IDE2NyxcbiAgICAndW1sJzogMTY4LFxuICAgICdvcmRmJzogMTcwLFxuICAgICdsYXF1byc6IDE3MSxcbiAgICAnbm90JzogMTcyLFxuICAgICdzaHknOiAxNzMsXG4gICAgJ21hY3InOiAxNzUsXG4gICAgJ2RlZyc6IDE3NixcbiAgICAncGx1c21uJzogMTc3LFxuICAgICdzdXAxJzogMTg1LFxuICAgICdzdXAyJzogMTc4LFxuICAgICdzdXAzJzogMTc5LFxuICAgICdhY3V0ZSc6IDE4MCxcbiAgICAnbWljcm8nOiAxODEsXG4gICAgJ3BhcmEnOiAxODIsXG4gICAgJ21pZGRvdCc6IDE4MyxcbiAgICAnY2VkaWwnOiAxODQsXG4gICAgJ29yZG0nOiAxODYsXG4gICAgJ3JhcXVvJzogMTg3LFxuICAgICdmcmFjMTQnOiAxODgsXG4gICAgJ2ZyYWMxMic6IDE4OSxcbiAgICAnZnJhYzM0JzogMTkwLFxuICAgICdpcXVlc3QnOiAxOTEsXG4gICAgJ3RpbWVzJzogMjE1LFxuICAgICdkaXZpZGUnOiAyNDcsXG4gICAgJ09FbGlnJzogMzM4LFxuICAgICdvZWxpZyc6IDMzOSxcbiAgICAnU2Nhcm9uJzogMzUyLFxuICAgICdzY2Fyb24nOiAzNTMsXG4gICAgJ1l1bWwnOiAzNzYsXG4gICAgJ2Zub2YnOiA0MDIsXG4gICAgJ2NpcmMnOiA3MTAsXG4gICAgJ3RpbGRlJzogNzMyLFxuICAgICdBbHBoYSc6IDkxMyxcbiAgICAnQmV0YSc6IDkxNCxcbiAgICAnR2FtbWEnOiA5MTUsXG4gICAgJ0RlbHRhJzogOTE2LFxuICAgICdFcHNpbG9uJzogOTE3LFxuICAgICdaZXRhJzogOTE4LFxuICAgICdFdGEnOiA5MTksXG4gICAgJ1RoZXRhJzogOTIwLFxuICAgICdJb3RhJzogOTIxLFxuICAgICdLYXBwYSc6IDkyMixcbiAgICAnTGFtYmRhJzogOTIzLFxuICAgICdNdSc6IDkyNCxcbiAgICAnTnUnOiA5MjUsXG4gICAgJ1hpJzogOTI2LFxuICAgICdPbWljcm9uJzogOTI3LFxuICAgICdQaSc6IDkyOCxcbiAgICAnUmhvJzogOTI5LFxuICAgICdTaWdtYSc6IDkzMSxcbiAgICAnVGF1JzogOTMyLFxuICAgICdVcHNpbG9uJzogOTMzLFxuICAgICdQaGknOiA5MzQsXG4gICAgJ0NoaSc6IDkzNSxcbiAgICAnUHNpJzogOTM2LFxuICAgICdPbWVnYSc6IDkzNyxcbiAgICAnYWxwaGEnOiA5NDUsXG4gICAgJ2JldGEnOiA5NDYsXG4gICAgJ2dhbW1hJzogOTQ3LFxuICAgICdkZWx0YSc6IDk0OCxcbiAgICAnZXBzaWxvbic6IDk0OSxcbiAgICAnemV0YSc6IDk1MCxcbiAgICAnZXRhJzogOTUxLFxuICAgICd0aGV0YSc6IDk1MixcbiAgICAnaW90YSc6IDk1MyxcbiAgICAna2FwcGEnOiA5NTQsXG4gICAgJ2xhbWJkYSc6IDk1NSxcbiAgICAnbXUnOiA5NTYsXG4gICAgJ251JzogOTU3LFxuICAgICd4aSc6IDk1OCxcbiAgICAnb21pY3Jvbic6IDk1OSxcbiAgICAncGknOiA5NjAsXG4gICAgJ3Jobyc6IDk2MSxcbiAgICAnc2lnbWFmJzogOTYyLFxuICAgICdzaWdtYSc6IDk2MyxcbiAgICAndGF1JzogOTY0LFxuICAgICd1cHNpbG9uJzogOTY1LFxuICAgICdwaGknOiA5NjYsXG4gICAgJ2NoaSc6IDk2NyxcbiAgICAncHNpJzogOTY4LFxuICAgICdvbWVnYSc6IDk2OSxcbiAgICAndGhldGFzeW0nOiA5NzcsXG4gICAgJ3Vwc2loJzogOTc4LFxuICAgICdwaXYnOiA5ODIsXG4gICAgJ2Vuc3AnOiA4MTk0LFxuICAgICdlbXNwJzogODE5NSxcbiAgICAndGhpbnNwJzogODIwMSxcbiAgICAnenduaic6IDgyMDQsXG4gICAgJ3p3aic6IDgyMDUsXG4gICAgJ2xybSc6IDgyMDYsXG4gICAgJ3JsbSc6IDgyMDcsXG4gICAgJ25kYXNoJzogODIxMSxcbiAgICAnbWRhc2gnOiA4MjEyLFxuICAgICdsc3F1byc6IDgyMTYsXG4gICAgJ3JzcXVvJzogODIxNyxcbiAgICAnc2JxdW8nOiA4MjE4LFxuICAgICdsZHF1byc6IDgyMjAsXG4gICAgJ3JkcXVvJzogODIyMSxcbiAgICAnYmRxdW8nOiA4MjIyLFxuICAgICdkYWdnZXInOiA4MjI0LFxuICAgICdEYWdnZXInOiA4MjI1LFxuICAgICdidWxsJzogODIyNixcbiAgICAnaGVsbGlwJzogODIzMCxcbiAgICAncGVybWlsJzogODI0MCxcbiAgICAncHJpbWUnOiA4MjQyLFxuICAgICdQcmltZSc6IDgyNDMsXG4gICAgJ2xzYXF1byc6IDgyNDksXG4gICAgJ3JzYXF1byc6IDgyNTAsXG4gICAgJ29saW5lJzogODI1NCxcbiAgICAnZnJhc2wnOiA4MjYwLFxuICAgICdldXJvJzogODM2NCxcbiAgICAnaW1hZ2UnOiA4NDY1LFxuICAgICd3ZWllcnAnOiA4NDcyLFxuICAgICdyZWFsJzogODQ3NixcbiAgICAndHJhZGUnOiA4NDgyLFxuICAgICdhbGVmc3ltJzogODUwMSxcbiAgICAnbGFycic6IDg1OTIsXG4gICAgJ3VhcnInOiA4NTkzLFxuICAgICdyYXJyJzogODU5NCxcbiAgICAnZGFycic6IDg1OTUsXG4gICAgJ2hhcnInOiA4NTk2LFxuICAgICdjcmFycic6IDg2MjksXG4gICAgJ2xBcnInOiA4NjU2LFxuICAgICd1QXJyJzogODY1NyxcbiAgICAnckFycic6IDg2NTgsXG4gICAgJ2RBcnInOiA4NjU5LFxuICAgICdoQXJyJzogODY2MCxcbiAgICAnZm9yYWxsJzogODcwNCxcbiAgICAncGFydCc6IDg3MDYsXG4gICAgJ2V4aXN0JzogODcwNyxcbiAgICAnZW1wdHknOiA4NzA5LFxuICAgICduYWJsYSc6IDg3MTEsXG4gICAgJ2lzaW4nOiA4NzEyLFxuICAgICdub3Rpbic6IDg3MTMsXG4gICAgJ25pJzogODcxNSxcbiAgICAncHJvZCc6IDg3MTksXG4gICAgJ3N1bSc6IDg3MjEsXG4gICAgJ21pbnVzJzogODcyMixcbiAgICAnbG93YXN0JzogODcyNyxcbiAgICAncmFkaWMnOiA4NzMwLFxuICAgICdwcm9wJzogODczMyxcbiAgICAnaW5maW4nOiA4NzM0LFxuICAgICdhbmcnOiA4NzM2LFxuICAgICdhbmQnOiA4NzQzLFxuICAgICdvcic6IDg3NDQsXG4gICAgJ2NhcCc6IDg3NDUsXG4gICAgJ2N1cCc6IDg3NDYsXG4gICAgJ2ludCc6IDg3NDcsXG4gICAgJ3RoZXJlNCc6IDg3NTYsXG4gICAgJ3NpbSc6IDg3NjQsXG4gICAgJ2NvbmcnOiA4NzczLFxuICAgICdhc3ltcCc6IDg3NzYsXG4gICAgJ25lJzogODgwMCxcbiAgICAnZXF1aXYnOiA4ODAxLFxuICAgICdsZSc6IDg4MDQsXG4gICAgJ2dlJzogODgwNSxcbiAgICAnc3ViJzogODgzNCxcbiAgICAnc3VwJzogODgzNSxcbiAgICAnbnN1Yic6IDg4MzYsXG4gICAgJ3N1YmUnOiA4ODM4LFxuICAgICdzdXBlJzogODgzOSxcbiAgICAnb3BsdXMnOiA4ODUzLFxuICAgICdvdGltZXMnOiA4ODU1LFxuICAgICdwZXJwJzogODg2OSxcbiAgICAnc2RvdCc6IDg5MDEsXG4gICAgJ2xjZWlsJzogODk2OCxcbiAgICAncmNlaWwnOiA4OTY5LFxuICAgICdsZmxvb3InOiA4OTcwLFxuICAgICdyZmxvb3InOiA4OTcxLFxuICAgICdsYW5nJzogOTAwMSxcbiAgICAncmFuZyc6IDkwMDIsXG4gICAgJ2xveic6IDk2NzQsXG4gICAgJ3NwYWRlcyc6IDk4MjQsXG4gICAgJ2NsdWJzJzogOTgyNyxcbiAgICAnaGVhcnRzJzogOTgyOSxcbiAgICAnZGlhbXMnOiA5ODMwXG4gIH1cblxuICBPYmplY3Qua2V5cyhzYXguRU5USVRJRVMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlID0gc2F4LkVOVElUSUVTW2tleV1cbiAgICB2YXIgcyA9IHR5cGVvZiBlID09PSAnbnVtYmVyJyA/IFN0cmluZy5mcm9tQ2hhckNvZGUoZSkgOiBlXG4gICAgc2F4LkVOVElUSUVTW2tleV0gPSBzXG4gIH0pXG5cbiAgZm9yICh2YXIgcyBpbiBzYXguU1RBVEUpIHtcbiAgICBzYXguU1RBVEVbc2F4LlNUQVRFW3NdXSA9IHNcbiAgfVxuXG4gIC8vIHNob3J0aGFuZFxuICBTID0gc2F4LlNUQVRFXG5cbiAgZnVuY3Rpb24gZW1pdCAocGFyc2VyLCBldmVudCwgZGF0YSkge1xuICAgIHBhcnNlcltldmVudF0gJiYgcGFyc2VyW2V2ZW50XShkYXRhKVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdE5vZGUgKHBhcnNlciwgbm9kZVR5cGUsIGRhdGEpIHtcbiAgICBpZiAocGFyc2VyLnRleHROb2RlKSBjbG9zZVRleHQocGFyc2VyKVxuICAgIGVtaXQocGFyc2VyLCBub2RlVHlwZSwgZGF0YSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlVGV4dCAocGFyc2VyKSB7XG4gICAgcGFyc2VyLnRleHROb2RlID0gdGV4dG9wdHMocGFyc2VyLm9wdCwgcGFyc2VyLnRleHROb2RlKVxuICAgIGlmIChwYXJzZXIudGV4dE5vZGUpIGVtaXQocGFyc2VyLCAnb250ZXh0JywgcGFyc2VyLnRleHROb2RlKVxuICAgIHBhcnNlci50ZXh0Tm9kZSA9ICcnXG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0b3B0cyAob3B0LCB0ZXh0KSB7XG4gICAgaWYgKG9wdC50cmltKSB0ZXh0ID0gdGV4dC50cmltKClcbiAgICBpZiAob3B0Lm5vcm1hbGl6ZSkgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxzKy9nLCAnICcpXG4gICAgcmV0dXJuIHRleHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGVycm9yIChwYXJzZXIsIGVyKSB7XG4gICAgY2xvc2VUZXh0KHBhcnNlcilcbiAgICBpZiAocGFyc2VyLnRyYWNrUG9zaXRpb24pIHtcbiAgICAgIGVyICs9ICdcXG5MaW5lOiAnICsgcGFyc2VyLmxpbmUgK1xuICAgICAgICAnXFxuQ29sdW1uOiAnICsgcGFyc2VyLmNvbHVtbiArXG4gICAgICAgICdcXG5DaGFyOiAnICsgcGFyc2VyLmNcbiAgICB9XG4gICAgZXIgPSBuZXcgRXJyb3IoZXIpXG4gICAgcGFyc2VyLmVycm9yID0gZXJcbiAgICBlbWl0KHBhcnNlciwgJ29uZXJyb3InLCBlcilcbiAgICByZXR1cm4gcGFyc2VyXG4gIH1cblxuICBmdW5jdGlvbiBlbmQgKHBhcnNlcikge1xuICAgIGlmIChwYXJzZXIuc2F3Um9vdCAmJiAhcGFyc2VyLmNsb3NlZFJvb3QpIHN0cmljdEZhaWwocGFyc2VyLCAnVW5jbG9zZWQgcm9vdCB0YWcnKVxuICAgIGlmICgocGFyc2VyLnN0YXRlICE9PSBTLkJFR0lOKSAmJlxuICAgICAgKHBhcnNlci5zdGF0ZSAhPT0gUy5CRUdJTl9XSElURVNQQUNFKSAmJlxuICAgICAgKHBhcnNlci5zdGF0ZSAhPT0gUy5URVhUKSkge1xuICAgICAgZXJyb3IocGFyc2VyLCAnVW5leHBlY3RlZCBlbmQnKVxuICAgIH1cbiAgICBjbG9zZVRleHQocGFyc2VyKVxuICAgIHBhcnNlci5jID0gJydcbiAgICBwYXJzZXIuY2xvc2VkID0gdHJ1ZVxuICAgIGVtaXQocGFyc2VyLCAnb25lbmQnKVxuICAgIFNBWFBhcnNlci5jYWxsKHBhcnNlciwgcGFyc2VyLnN0cmljdCwgcGFyc2VyLm9wdClcbiAgICByZXR1cm4gcGFyc2VyXG4gIH1cblxuICBmdW5jdGlvbiBzdHJpY3RGYWlsIChwYXJzZXIsIG1lc3NhZ2UpIHtcbiAgICBpZiAodHlwZW9mIHBhcnNlciAhPT0gJ29iamVjdCcgfHwgIShwYXJzZXIgaW5zdGFuY2VvZiBTQVhQYXJzZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBjYWxsIHRvIHN0cmljdEZhaWwnKVxuICAgIH1cbiAgICBpZiAocGFyc2VyLnN0cmljdCkge1xuICAgICAgZXJyb3IocGFyc2VyLCBtZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG5ld1RhZyAocGFyc2VyKSB7XG4gICAgaWYgKCFwYXJzZXIuc3RyaWN0KSBwYXJzZXIudGFnTmFtZSA9IHBhcnNlci50YWdOYW1lW3BhcnNlci5sb29zZUNhc2VdKClcbiAgICB2YXIgcGFyZW50ID0gcGFyc2VyLnRhZ3NbcGFyc2VyLnRhZ3MubGVuZ3RoIC0gMV0gfHwgcGFyc2VyXG4gICAgdmFyIHRhZyA9IHBhcnNlci50YWcgPSB7IG5hbWU6IHBhcnNlci50YWdOYW1lLCBhdHRyaWJ1dGVzOiB7fSB9XG5cbiAgICAvLyB3aWxsIGJlIG92ZXJyaWRkZW4gaWYgdGFnIGNvbnRhaWxzIGFuIHhtbG5zPVwiZm9vXCIgb3IgeG1sbnM6Zm9vPVwiYmFyXCJcbiAgICBpZiAocGFyc2VyLm9wdC54bWxucykge1xuICAgICAgdGFnLm5zID0gcGFyZW50Lm5zXG4gICAgfVxuICAgIHBhcnNlci5hdHRyaWJMaXN0Lmxlbmd0aCA9IDBcbiAgICBlbWl0Tm9kZShwYXJzZXIsICdvbm9wZW50YWdzdGFydCcsIHRhZylcbiAgfVxuXG4gIGZ1bmN0aW9uIHFuYW1lIChuYW1lLCBhdHRyaWJ1dGUpIHtcbiAgICB2YXIgaSA9IG5hbWUuaW5kZXhPZignOicpXG4gICAgdmFyIHF1YWxOYW1lID0gaSA8IDAgPyBbICcnLCBuYW1lIF0gOiBuYW1lLnNwbGl0KCc6JylcbiAgICB2YXIgcHJlZml4ID0gcXVhbE5hbWVbMF1cbiAgICB2YXIgbG9jYWwgPSBxdWFsTmFtZVsxXVxuXG4gICAgLy8gPHggXCJ4bWxuc1wiPVwiaHR0cDovL2Zvb1wiPlxuICAgIGlmIChhdHRyaWJ1dGUgJiYgbmFtZSA9PT0gJ3htbG5zJykge1xuICAgICAgcHJlZml4ID0gJ3htbG5zJ1xuICAgICAgbG9jYWwgPSAnJ1xuICAgIH1cblxuICAgIHJldHVybiB7IHByZWZpeDogcHJlZml4LCBsb2NhbDogbG9jYWwgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXR0cmliIChwYXJzZXIpIHtcbiAgICBpZiAoIXBhcnNlci5zdHJpY3QpIHtcbiAgICAgIHBhcnNlci5hdHRyaWJOYW1lID0gcGFyc2VyLmF0dHJpYk5hbWVbcGFyc2VyLmxvb3NlQ2FzZV0oKVxuICAgIH1cblxuICAgIGlmIChwYXJzZXIuYXR0cmliTGlzdC5pbmRleE9mKHBhcnNlci5hdHRyaWJOYW1lKSAhPT0gLTEgfHxcbiAgICAgIHBhcnNlci50YWcuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShwYXJzZXIuYXR0cmliTmFtZSkpIHtcbiAgICAgIHBhcnNlci5hdHRyaWJOYW1lID0gcGFyc2VyLmF0dHJpYlZhbHVlID0gJydcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChwYXJzZXIub3B0LnhtbG5zKSB7XG4gICAgICB2YXIgcW4gPSBxbmFtZShwYXJzZXIuYXR0cmliTmFtZSwgdHJ1ZSlcbiAgICAgIHZhciBwcmVmaXggPSBxbi5wcmVmaXhcbiAgICAgIHZhciBsb2NhbCA9IHFuLmxvY2FsXG5cbiAgICAgIGlmIChwcmVmaXggPT09ICd4bWxucycpIHtcbiAgICAgICAgLy8gbmFtZXNwYWNlIGJpbmRpbmcgYXR0cmlidXRlLiBwdXNoIHRoZSBiaW5kaW5nIGludG8gc2NvcGVcbiAgICAgICAgaWYgKGxvY2FsID09PSAneG1sJyAmJiBwYXJzZXIuYXR0cmliVmFsdWUgIT09IFhNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlcixcbiAgICAgICAgICAgICd4bWw6IHByZWZpeCBtdXN0IGJlIGJvdW5kIHRvICcgKyBYTUxfTkFNRVNQQUNFICsgJ1xcbicgK1xuICAgICAgICAgICAgJ0FjdHVhbDogJyArIHBhcnNlci5hdHRyaWJWYWx1ZSlcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbCA9PT0gJ3htbG5zJyAmJiBwYXJzZXIuYXR0cmliVmFsdWUgIT09IFhNTE5TX05BTUVTUEFDRSkge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLFxuICAgICAgICAgICAgJ3htbG5zOiBwcmVmaXggbXVzdCBiZSBib3VuZCB0byAnICsgWE1MTlNfTkFNRVNQQUNFICsgJ1xcbicgK1xuICAgICAgICAgICAgJ0FjdHVhbDogJyArIHBhcnNlci5hdHRyaWJWYWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgdGFnID0gcGFyc2VyLnRhZ1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBwYXJzZXIudGFnc1twYXJzZXIudGFncy5sZW5ndGggLSAxXSB8fCBwYXJzZXJcbiAgICAgICAgICBpZiAodGFnLm5zID09PSBwYXJlbnQubnMpIHtcbiAgICAgICAgICAgIHRhZy5ucyA9IE9iamVjdC5jcmVhdGUocGFyZW50Lm5zKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0YWcubnNbbG9jYWxdID0gcGFyc2VyLmF0dHJpYlZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZGVmZXIgb25hdHRyaWJ1dGUgZXZlbnRzIHVudGlsIGFsbCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBzZWVuXG4gICAgICAvLyBzbyBhbnkgbmV3IGJpbmRpbmdzIGNhbiB0YWtlIGVmZmVjdC4gcHJlc2VydmUgYXR0cmlidXRlIG9yZGVyXG4gICAgICAvLyBzbyBkZWZlcnJlZCBldmVudHMgY2FuIGJlIGVtaXR0ZWQgaW4gZG9jdW1lbnQgb3JkZXJcbiAgICAgIHBhcnNlci5hdHRyaWJMaXN0LnB1c2goW3BhcnNlci5hdHRyaWJOYW1lLCBwYXJzZXIuYXR0cmliVmFsdWVdKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbiBub24teG1sbnMgbW9kZSwgd2UgY2FuIGVtaXQgdGhlIGV2ZW50IHJpZ2h0IGF3YXlcbiAgICAgIHBhcnNlci50YWcuYXR0cmlidXRlc1twYXJzZXIuYXR0cmliTmFtZV0gPSBwYXJzZXIuYXR0cmliVmFsdWVcbiAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uYXR0cmlidXRlJywge1xuICAgICAgICBuYW1lOiBwYXJzZXIuYXR0cmliTmFtZSxcbiAgICAgICAgdmFsdWU6IHBhcnNlci5hdHRyaWJWYWx1ZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBwYXJzZXIuYXR0cmliTmFtZSA9IHBhcnNlci5hdHRyaWJWYWx1ZSA9ICcnXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuVGFnIChwYXJzZXIsIHNlbGZDbG9zaW5nKSB7XG4gICAgaWYgKHBhcnNlci5vcHQueG1sbnMpIHtcbiAgICAgIC8vIGVtaXQgbmFtZXNwYWNlIGJpbmRpbmcgZXZlbnRzXG4gICAgICB2YXIgdGFnID0gcGFyc2VyLnRhZ1xuXG4gICAgICAvLyBhZGQgbmFtZXNwYWNlIGluZm8gdG8gdGFnXG4gICAgICB2YXIgcW4gPSBxbmFtZShwYXJzZXIudGFnTmFtZSlcbiAgICAgIHRhZy5wcmVmaXggPSBxbi5wcmVmaXhcbiAgICAgIHRhZy5sb2NhbCA9IHFuLmxvY2FsXG4gICAgICB0YWcudXJpID0gdGFnLm5zW3FuLnByZWZpeF0gfHwgJydcblxuICAgICAgaWYgKHRhZy5wcmVmaXggJiYgIXRhZy51cmkpIHtcbiAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdVbmJvdW5kIG5hbWVzcGFjZSBwcmVmaXg6ICcgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHBhcnNlci50YWdOYW1lKSlcbiAgICAgICAgdGFnLnVyaSA9IHFuLnByZWZpeFxuICAgICAgfVxuXG4gICAgICB2YXIgcGFyZW50ID0gcGFyc2VyLnRhZ3NbcGFyc2VyLnRhZ3MubGVuZ3RoIC0gMV0gfHwgcGFyc2VyXG4gICAgICBpZiAodGFnLm5zICYmIHBhcmVudC5ucyAhPT0gdGFnLm5zKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRhZy5ucykuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29ub3Blbm5hbWVzcGFjZScsIHtcbiAgICAgICAgICAgIHByZWZpeDogcCxcbiAgICAgICAgICAgIHVyaTogdGFnLm5zW3BdXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gaGFuZGxlIGRlZmVycmVkIG9uYXR0cmlidXRlIGV2ZW50c1xuICAgICAgLy8gTm90ZTogZG8gbm90IGFwcGx5IGRlZmF1bHQgbnMgdG8gYXR0cmlidXRlczpcbiAgICAgIC8vICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC1uYW1lcy8jZGVmYXVsdGluZ1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJzZXIuYXR0cmliTGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIG52ID0gcGFyc2VyLmF0dHJpYkxpc3RbaV1cbiAgICAgICAgdmFyIG5hbWUgPSBudlswXVxuICAgICAgICB2YXIgdmFsdWUgPSBudlsxXVxuICAgICAgICB2YXIgcXVhbE5hbWUgPSBxbmFtZShuYW1lLCB0cnVlKVxuICAgICAgICB2YXIgcHJlZml4ID0gcXVhbE5hbWUucHJlZml4XG4gICAgICAgIHZhciBsb2NhbCA9IHF1YWxOYW1lLmxvY2FsXG4gICAgICAgIHZhciB1cmkgPSBwcmVmaXggPT09ICcnID8gJycgOiAodGFnLm5zW3ByZWZpeF0gfHwgJycpXG4gICAgICAgIHZhciBhID0ge1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgICAgIGxvY2FsOiBsb2NhbCxcbiAgICAgICAgICB1cmk6IHVyaVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUncyBhbnkgYXR0cmlidXRlcyB3aXRoIGFuIHVuZGVmaW5lZCBuYW1lc3BhY2UsXG4gICAgICAgIC8vIHRoZW4gZmFpbCBvbiB0aGVtIG5vdy5cbiAgICAgICAgaWYgKHByZWZpeCAmJiBwcmVmaXggIT09ICd4bWxucycgJiYgIXVyaSkge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnVW5ib3VuZCBuYW1lc3BhY2UgcHJlZml4OiAnICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHByZWZpeCkpXG4gICAgICAgICAgYS51cmkgPSBwcmVmaXhcbiAgICAgICAgfVxuICAgICAgICBwYXJzZXIudGFnLmF0dHJpYnV0ZXNbbmFtZV0gPSBhXG4gICAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uYXR0cmlidXRlJywgYSlcbiAgICAgIH1cbiAgICAgIHBhcnNlci5hdHRyaWJMaXN0Lmxlbmd0aCA9IDBcbiAgICB9XG5cbiAgICBwYXJzZXIudGFnLmlzU2VsZkNsb3NpbmcgPSAhIXNlbGZDbG9zaW5nXG5cbiAgICAvLyBwcm9jZXNzIHRoZSB0YWdcbiAgICBwYXJzZXIuc2F3Um9vdCA9IHRydWVcbiAgICBwYXJzZXIudGFncy5wdXNoKHBhcnNlci50YWcpXG4gICAgZW1pdE5vZGUocGFyc2VyLCAnb25vcGVudGFnJywgcGFyc2VyLnRhZylcbiAgICBpZiAoIXNlbGZDbG9zaW5nKSB7XG4gICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIDxzY3JpcHQ+IGluIG5vbi1zdHJpY3QgbW9kZS5cbiAgICAgIGlmICghcGFyc2VyLm5vc2NyaXB0ICYmIHBhcnNlci50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzY3JpcHQnKSB7XG4gICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgIH1cbiAgICAgIHBhcnNlci50YWcgPSBudWxsXG4gICAgICBwYXJzZXIudGFnTmFtZSA9ICcnXG4gICAgfVxuICAgIHBhcnNlci5hdHRyaWJOYW1lID0gcGFyc2VyLmF0dHJpYlZhbHVlID0gJydcbiAgICBwYXJzZXIuYXR0cmliTGlzdC5sZW5ndGggPSAwXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVRhZyAocGFyc2VyKSB7XG4gICAgaWYgKCFwYXJzZXIudGFnTmFtZSkge1xuICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdXZWlyZCBlbXB0eSBjbG9zZSB0YWcuJylcbiAgICAgIHBhcnNlci50ZXh0Tm9kZSArPSAnPC8+J1xuICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocGFyc2VyLnNjcmlwdCkge1xuICAgICAgaWYgKHBhcnNlci50YWdOYW1lICE9PSAnc2NyaXB0Jykge1xuICAgICAgICBwYXJzZXIuc2NyaXB0ICs9ICc8LycgKyBwYXJzZXIudGFnTmFtZSArICc+J1xuICAgICAgICBwYXJzZXIudGFnTmFtZSA9ICcnXG4gICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25zY3JpcHQnLCBwYXJzZXIuc2NyaXB0KVxuICAgICAgcGFyc2VyLnNjcmlwdCA9ICcnXG4gICAgfVxuXG4gICAgLy8gZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGNsb3NpbmcgdGFnIGFjdHVhbGx5IGV4aXN0cy5cbiAgICAvLyA8YT48Yj48L2M+PC9iPjwvYT4gd2lsbCBjbG9zZSBldmVyeXRoaW5nLCBvdGhlcndpc2UuXG4gICAgdmFyIHQgPSBwYXJzZXIudGFncy5sZW5ndGhcbiAgICB2YXIgdGFnTmFtZSA9IHBhcnNlci50YWdOYW1lXG4gICAgaWYgKCFwYXJzZXIuc3RyaWN0KSB7XG4gICAgICB0YWdOYW1lID0gdGFnTmFtZVtwYXJzZXIubG9vc2VDYXNlXSgpXG4gICAgfVxuICAgIHZhciBjbG9zZVRvID0gdGFnTmFtZVxuICAgIHdoaWxlICh0LS0pIHtcbiAgICAgIHZhciBjbG9zZSA9IHBhcnNlci50YWdzW3RdXG4gICAgICBpZiAoY2xvc2UubmFtZSAhPT0gY2xvc2VUbykge1xuICAgICAgICAvLyBmYWlsIHRoZSBmaXJzdCB0aW1lIGluIHN0cmljdCBtb2RlXG4gICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnVW5leHBlY3RlZCBjbG9zZSB0YWcnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkaWRuJ3QgZmluZCBpdC4gIHdlIGFscmVhZHkgZmFpbGVkIGZvciBzdHJpY3QsIHNvIGp1c3QgYWJvcnQuXG4gICAgaWYgKHQgPCAwKSB7XG4gICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ1VubWF0Y2hlZCBjbG9zaW5nIHRhZzogJyArIHBhcnNlci50YWdOYW1lKVxuICAgICAgcGFyc2VyLnRleHROb2RlICs9ICc8LycgKyBwYXJzZXIudGFnTmFtZSArICc+J1xuICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcGFyc2VyLnRhZ05hbWUgPSB0YWdOYW1lXG4gICAgdmFyIHMgPSBwYXJzZXIudGFncy5sZW5ndGhcbiAgICB3aGlsZSAocy0tID4gdCkge1xuICAgICAgdmFyIHRhZyA9IHBhcnNlci50YWcgPSBwYXJzZXIudGFncy5wb3AoKVxuICAgICAgcGFyc2VyLnRhZ05hbWUgPSBwYXJzZXIudGFnLm5hbWVcbiAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uY2xvc2V0YWcnLCBwYXJzZXIudGFnTmFtZSlcblxuICAgICAgdmFyIHggPSB7fVxuICAgICAgZm9yICh2YXIgaSBpbiB0YWcubnMpIHtcbiAgICAgICAgeFtpXSA9IHRhZy5uc1tpXVxuICAgICAgfVxuXG4gICAgICB2YXIgcGFyZW50ID0gcGFyc2VyLnRhZ3NbcGFyc2VyLnRhZ3MubGVuZ3RoIC0gMV0gfHwgcGFyc2VyXG4gICAgICBpZiAocGFyc2VyLm9wdC54bWxucyAmJiB0YWcubnMgIT09IHBhcmVudC5ucykge1xuICAgICAgICAvLyByZW1vdmUgbmFtZXNwYWNlIGJpbmRpbmdzIGludHJvZHVjZWQgYnkgdGFnXG4gICAgICAgIE9iamVjdC5rZXlzKHRhZy5ucykuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgICAgICAgIHZhciBuID0gdGFnLm5zW3BdXG4gICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25jbG9zZW5hbWVzcGFjZScsIHsgcHJlZml4OiBwLCB1cmk6IG4gfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHQgPT09IDApIHBhcnNlci5jbG9zZWRSb290ID0gdHJ1ZVxuICAgIHBhcnNlci50YWdOYW1lID0gcGFyc2VyLmF0dHJpYlZhbHVlID0gcGFyc2VyLmF0dHJpYk5hbWUgPSAnJ1xuICAgIHBhcnNlci5hdHRyaWJMaXN0Lmxlbmd0aCA9IDBcbiAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlRW50aXR5IChwYXJzZXIpIHtcbiAgICB2YXIgZW50aXR5ID0gcGFyc2VyLmVudGl0eVxuICAgIHZhciBlbnRpdHlMQyA9IGVudGl0eS50b0xvd2VyQ2FzZSgpXG4gICAgdmFyIG51bVxuICAgIHZhciBudW1TdHIgPSAnJ1xuXG4gICAgaWYgKHBhcnNlci5FTlRJVElFU1tlbnRpdHldKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLkVOVElUSUVTW2VudGl0eV1cbiAgICB9XG4gICAgaWYgKHBhcnNlci5FTlRJVElFU1tlbnRpdHlMQ10pIHtcbiAgICAgIHJldHVybiBwYXJzZXIuRU5USVRJRVNbZW50aXR5TENdXG4gICAgfVxuICAgIGVudGl0eSA9IGVudGl0eUxDXG4gICAgaWYgKGVudGl0eS5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgaWYgKGVudGl0eS5jaGFyQXQoMSkgPT09ICd4Jykge1xuICAgICAgICBlbnRpdHkgPSBlbnRpdHkuc2xpY2UoMilcbiAgICAgICAgbnVtID0gcGFyc2VJbnQoZW50aXR5LCAxNilcbiAgICAgICAgbnVtU3RyID0gbnVtLnRvU3RyaW5nKDE2KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW50aXR5ID0gZW50aXR5LnNsaWNlKDEpXG4gICAgICAgIG51bSA9IHBhcnNlSW50KGVudGl0eSwgMTApXG4gICAgICAgIG51bVN0ciA9IG51bS50b1N0cmluZygxMClcbiAgICAgIH1cbiAgICB9XG4gICAgZW50aXR5ID0gZW50aXR5LnJlcGxhY2UoL14wKy8sICcnKVxuICAgIGlmIChpc05hTihudW0pIHx8IG51bVN0ci50b0xvd2VyQ2FzZSgpICE9PSBlbnRpdHkpIHtcbiAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBjaGFyYWN0ZXIgZW50aXR5JylcbiAgICAgIHJldHVybiAnJicgKyBwYXJzZXIuZW50aXR5ICsgJzsnXG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KG51bSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGJlZ2luV2hpdGVTcGFjZSAocGFyc2VyLCBjKSB7XG4gICAgaWYgKGMgPT09ICc8Jykge1xuICAgICAgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1dBS0FcbiAgICAgIHBhcnNlci5zdGFydFRhZ1Bvc2l0aW9uID0gcGFyc2VyLnBvc2l0aW9uXG4gICAgfSBlbHNlIGlmICghaXNXaGl0ZXNwYWNlKGMpKSB7XG4gICAgICAvLyBoYXZlIHRvIHByb2Nlc3MgdGhpcyBhcyBhIHRleHQgbm9kZS5cbiAgICAgIC8vIHdlaXJkLCBidXQgaGFwcGVucy5cbiAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnTm9uLXdoaXRlc3BhY2UgYmVmb3JlIGZpcnN0IHRhZy4nKVxuICAgICAgcGFyc2VyLnRleHROb2RlID0gY1xuICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hhckF0IChjaHVuaywgaSkge1xuICAgIHZhciByZXN1bHQgPSAnJ1xuICAgIGlmIChpIDwgY2h1bmsubGVuZ3RoKSB7XG4gICAgICByZXN1bHQgPSBjaHVuay5jaGFyQXQoaSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGUgKGNodW5rKSB7XG4gICAgdmFyIHBhcnNlciA9IHRoaXNcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5lcnJvclxuICAgIH1cbiAgICBpZiAocGFyc2VyLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIGVycm9yKHBhcnNlcixcbiAgICAgICAgJ0Nhbm5vdCB3cml0ZSBhZnRlciBjbG9zZS4gQXNzaWduIGFuIG9ucmVhZHkgaGFuZGxlci4nKVxuICAgIH1cbiAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbmQocGFyc2VyKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGNodW5rID09PSAnb2JqZWN0Jykge1xuICAgICAgY2h1bmsgPSBjaHVuay50b1N0cmluZygpXG4gICAgfVxuICAgIHZhciBpID0gMFxuICAgIHZhciBjID0gJydcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgYyA9IGNoYXJBdChjaHVuaywgaSsrKVxuICAgICAgcGFyc2VyLmMgPSBjXG5cbiAgICAgIGlmICghYykge1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyc2VyLnRyYWNrUG9zaXRpb24pIHtcbiAgICAgICAgcGFyc2VyLnBvc2l0aW9uKytcbiAgICAgICAgaWYgKGMgPT09ICdcXG4nKSB7XG4gICAgICAgICAgcGFyc2VyLmxpbmUrK1xuICAgICAgICAgIHBhcnNlci5jb2x1bW4gPSAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VyLmNvbHVtbisrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChwYXJzZXIuc3RhdGUpIHtcbiAgICAgICAgY2FzZSBTLkJFR0lOOlxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQkVHSU5fV0hJVEVTUEFDRVxuICAgICAgICAgIGlmIChjID09PSAnXFx1RkVGRicpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJlZ2luV2hpdGVTcGFjZShwYXJzZXIsIGMpXG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQkVHSU5fV0hJVEVTUEFDRTpcbiAgICAgICAgICBiZWdpbldoaXRlU3BhY2UocGFyc2VyLCBjKVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLlRFWFQ6XG4gICAgICAgICAgaWYgKHBhcnNlci5zYXdSb290ICYmICFwYXJzZXIuY2xvc2VkUm9vdCkge1xuICAgICAgICAgICAgdmFyIHN0YXJ0aSA9IGkgLSAxXG4gICAgICAgICAgICB3aGlsZSAoYyAmJiBjICE9PSAnPCcgJiYgYyAhPT0gJyYnKSB7XG4gICAgICAgICAgICAgIGMgPSBjaGFyQXQoY2h1bmssIGkrKylcbiAgICAgICAgICAgICAgaWYgKGMgJiYgcGFyc2VyLnRyYWNrUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBwYXJzZXIucG9zaXRpb24rK1xuICAgICAgICAgICAgICAgIGlmIChjID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgICAgcGFyc2VyLmxpbmUrK1xuICAgICAgICAgICAgICAgICAgcGFyc2VyLmNvbHVtbiA9IDBcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGFyc2VyLmNvbHVtbisrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZXIudGV4dE5vZGUgKz0gY2h1bmsuc3Vic3RyaW5nKHN0YXJ0aSwgaSAtIDEpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjID09PSAnPCcgJiYgIShwYXJzZXIuc2F3Um9vdCAmJiBwYXJzZXIuY2xvc2VkUm9vdCAmJiAhcGFyc2VyLnN0cmljdCkpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9XQUtBXG4gICAgICAgICAgICBwYXJzZXIuc3RhcnRUYWdQb3NpdGlvbiA9IHBhcnNlci5wb3NpdGlvblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZShjKSAmJiAoIXBhcnNlci5zYXdSb290IHx8IHBhcnNlci5jbG9zZWRSb290KSkge1xuICAgICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ1RleHQgZGF0YSBvdXRzaWRlIG9mIHJvb3Qgbm9kZS4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICcmJykge1xuICAgICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRfRU5USVRZXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJzZXIudGV4dE5vZGUgKz0gY1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5TQ1JJUFQ6XG4gICAgICAgICAgLy8gb25seSBub24tc3RyaWN0XG4gICAgICAgICAgaWYgKGMgPT09ICc8Jykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRfRU5ESU5HXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5zY3JpcHQgKz0gY1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5TQ1JJUFRfRU5ESU5HOlxuICAgICAgICAgIGlmIChjID09PSAnLycpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0xPU0VfVEFHXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5zY3JpcHQgKz0gJzwnICsgY1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuT1BFTl9XQUtBOlxuICAgICAgICAgIC8vIGVpdGhlciBhIC8sID8sICEsIG9yIHRleHQgaXMgY29taW5nIG5leHQuXG4gICAgICAgICAgaWYgKGMgPT09ICchJykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TR01MX0RFQ0xcbiAgICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCA9ICcnXG4gICAgICAgICAgfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoYykpIHtcbiAgICAgICAgICAgIC8vIHdhaXQgZm9yIGl0Li4uXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9UQUdcbiAgICAgICAgICAgIHBhcnNlci50YWdOYW1lID0gY1xuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNMT1NFX1RBR1xuICAgICAgICAgICAgcGFyc2VyLnRhZ05hbWUgPSAnJ1xuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlBST0NfSU5TVFxuICAgICAgICAgICAgcGFyc2VyLnByb2NJbnN0TmFtZSA9IHBhcnNlci5wcm9jSW5zdEJvZHkgPSAnJ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ1VuZW5jb2RlZCA8JylcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBzb21lIHdoaXRlc3BhY2UsIHRoZW4gYWRkIHRoYXQgaW4uXG4gICAgICAgICAgICBpZiAocGFyc2VyLnN0YXJ0VGFnUG9zaXRpb24gKyAxIDwgcGFyc2VyLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgIHZhciBwYWQgPSBwYXJzZXIucG9zaXRpb24gLSBwYXJzZXIuc3RhcnRUYWdQb3NpdGlvblxuICAgICAgICAgICAgICBjID0gbmV3IEFycmF5KHBhZCkuam9pbignICcpICsgY1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VyLnRleHROb2RlICs9ICc8JyArIGNcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5TR01MX0RFQ0w6XG4gICAgICAgICAgaWYgKChwYXJzZXIuc2dtbERlY2wgKyBjKS50b1VwcGVyQ2FzZSgpID09PSBDREFUQSkge1xuICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25vcGVuY2RhdGEnKVxuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DREFUQVxuICAgICAgICAgICAgcGFyc2VyLnNnbWxEZWNsID0gJydcbiAgICAgICAgICAgIHBhcnNlci5jZGF0YSA9ICcnXG4gICAgICAgICAgfSBlbHNlIGlmIChwYXJzZXIuc2dtbERlY2wgKyBjID09PSAnLS0nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRcbiAgICAgICAgICAgIHBhcnNlci5jb21tZW50ID0gJydcbiAgICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCA9ICcnXG4gICAgICAgICAgfSBlbHNlIGlmICgocGFyc2VyLnNnbWxEZWNsICsgYykudG9VcHBlckNhc2UoKSA9PT0gRE9DVFlQRSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFXG4gICAgICAgICAgICBpZiAocGFyc2VyLmRvY3R5cGUgfHwgcGFyc2VyLnNhd1Jvb3QpIHtcbiAgICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsXG4gICAgICAgICAgICAgICAgJ0luYXBwcm9wcmlhdGVseSBsb2NhdGVkIGRvY3R5cGUgZGVjbGFyYXRpb24nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VyLmRvY3R5cGUgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnNnbWxEZWNsID0gJydcbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25zZ21sZGVjbGFyYXRpb24nLCBwYXJzZXIuc2dtbERlY2wpXG4gICAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgfSBlbHNlIGlmIChpc1F1b3RlKGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNHTUxfREVDTF9RVU9URURcbiAgICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCArPSBjXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCArPSBjXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLlNHTUxfREVDTF9RVU9URUQ6XG4gICAgICAgICAgaWYgKGMgPT09IHBhcnNlci5xKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNHTUxfREVDTFxuICAgICAgICAgICAgcGFyc2VyLnEgPSAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgKz0gY1xuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkRPQ1RZUEU6XG4gICAgICAgICAgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbmRvY3R5cGUnLCBwYXJzZXIuZG9jdHlwZSlcbiAgICAgICAgICAgIHBhcnNlci5kb2N0eXBlID0gdHJ1ZSAvLyBqdXN0IHJlbWVtYmVyIHRoYXQgd2Ugc2F3IGl0LlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIuZG9jdHlwZSArPSBjXG4gICAgICAgICAgICBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuRE9DVFlQRV9EVERcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNRdW90ZShjKSkge1xuICAgICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVfUVVPVEVEXG4gICAgICAgICAgICAgIHBhcnNlci5xID0gY1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5ET0NUWVBFX1FVT1RFRDpcbiAgICAgICAgICBwYXJzZXIuZG9jdHlwZSArPSBjXG4gICAgICAgICAgaWYgKGMgPT09IHBhcnNlci5xKSB7XG4gICAgICAgICAgICBwYXJzZXIucSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuRE9DVFlQRV9EVEQ6XG4gICAgICAgICAgcGFyc2VyLmRvY3R5cGUgKz0gY1xuICAgICAgICAgIGlmIChjID09PSAnXScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuRE9DVFlQRVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNRdW90ZShjKSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFX0RURF9RVU9URURcbiAgICAgICAgICAgIHBhcnNlci5xID0gY1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5ET0NUWVBFX0RURF9RVU9URUQ6XG4gICAgICAgICAgcGFyc2VyLmRvY3R5cGUgKz0gY1xuICAgICAgICAgIGlmIChjID09PSBwYXJzZXIucSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFX0RURFxuICAgICAgICAgICAgcGFyc2VyLnEgPSAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5DT01NRU5UOlxuICAgICAgICAgIGlmIChjID09PSAnLScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVF9FTkRJTkdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLmNvbW1lbnQgKz0gY1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5DT01NRU5UX0VORElORzpcbiAgICAgICAgICBpZiAoYyA9PT0gJy0nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRfRU5ERURcbiAgICAgICAgICAgIHBhcnNlci5jb21tZW50ID0gdGV4dG9wdHMocGFyc2VyLm9wdCwgcGFyc2VyLmNvbW1lbnQpXG4gICAgICAgICAgICBpZiAocGFyc2VyLmNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25jb21tZW50JywgcGFyc2VyLmNvbW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZXIuY29tbWVudCA9ICcnXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5jb21tZW50ICs9ICctJyArIGNcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVFxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5DT01NRU5UX0VOREVEOlxuICAgICAgICAgIGlmIChjICE9PSAnPicpIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnTWFsZm9ybWVkIGNvbW1lbnQnKVxuICAgICAgICAgICAgLy8gYWxsb3cgPCEtLSBibGFoIC0tIGJsb28gLS0+IGluIG5vbi1zdHJpY3QgbW9kZSxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGEgY29tbWVudCBvZiBcIiBibGFoIC0tIGJsb28gXCJcbiAgICAgICAgICAgIHBhcnNlci5jb21tZW50ICs9ICctLScgKyBjXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkNEQVRBOlxuICAgICAgICAgIGlmIChjID09PSAnXScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0RBVEFfRU5ESU5HXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5jZGF0YSArPSBjXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkNEQVRBX0VORElORzpcbiAgICAgICAgICBpZiAoYyA9PT0gJ10nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBX0VORElOR18yXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5jZGF0YSArPSAnXScgKyBjXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkNEQVRBX0VORElOR18yOlxuICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIGlmIChwYXJzZXIuY2RhdGEpIHtcbiAgICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25jZGF0YScsIHBhcnNlci5jZGF0YSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uY2xvc2VjZGF0YScpXG4gICAgICAgICAgICBwYXJzZXIuY2RhdGEgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnXScpIHtcbiAgICAgICAgICAgIHBhcnNlci5jZGF0YSArPSAnXSdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLmNkYXRhICs9ICddXScgKyBjXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLlBST0NfSU5TVDpcbiAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlBST0NfSU5TVF9FTkRJTkdcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZShjKSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5QUk9DX0lOU1RfQk9EWVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIucHJvY0luc3ROYW1lICs9IGNcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuUFJPQ19JTlNUX0JPRFk6XG4gICAgICAgICAgaWYgKCFwYXJzZXIucHJvY0luc3RCb2R5ICYmIGlzV2hpdGVzcGFjZShjKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5QUk9DX0lOU1RfRU5ESU5HXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5wcm9jSW5zdEJvZHkgKz0gY1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5QUk9DX0lOU1RfRU5ESU5HOlxuICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29ucHJvY2Vzc2luZ2luc3RydWN0aW9uJywge1xuICAgICAgICAgICAgICBuYW1lOiBwYXJzZXIucHJvY0luc3ROYW1lLFxuICAgICAgICAgICAgICBib2R5OiBwYXJzZXIucHJvY0luc3RCb2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcGFyc2VyLnByb2NJbnN0TmFtZSA9IHBhcnNlci5wcm9jSW5zdEJvZHkgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5wcm9jSW5zdEJvZHkgKz0gJz8nICsgY1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5QUk9DX0lOU1RfQk9EWVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5PUEVOX1RBRzpcbiAgICAgICAgICBpZiAoaXNNYXRjaChuYW1lQm9keSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci50YWdOYW1lICs9IGNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3VGFnKHBhcnNlcilcbiAgICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgICAgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICcvJykge1xuICAgICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fVEFHX1NMQVNIXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZShjKSkge1xuICAgICAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBjaGFyYWN0ZXIgaW4gdGFnIG5hbWUnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLk9QRU5fVEFHX1NMQVNIOlxuICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIG9wZW5UYWcocGFyc2VyLCB0cnVlKVxuICAgICAgICAgICAgY2xvc2VUYWcocGFyc2VyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ZvcndhcmQtc2xhc2ggaW4gb3BlbmluZyB0YWcgbm90IGZvbGxvd2VkIGJ5ID4nKVxuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQVRUUklCOlxuICAgICAgICAgIC8vIGhhdmVuJ3QgcmVhZCB0aGUgYXR0cmlidXRlIG5hbWUgeWV0LlxuICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fVEFHX1NMQVNIXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJOYW1lID0gY1xuICAgICAgICAgICAgcGFyc2VyLmF0dHJpYlZhbHVlID0gJydcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX05BTUVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lJylcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQVRUUklCX05BTUU6XG4gICAgICAgICAgaWYgKGMgPT09ICc9Jykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVcbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdBdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZScpXG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSBwYXJzZXIuYXR0cmliTmFtZVxuICAgICAgICAgICAgYXR0cmliKHBhcnNlcilcbiAgICAgICAgICAgIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNXaGl0ZXNwYWNlKGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9OQU1FX1NBV19XSElURVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaChuYW1lQm9keSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJOYW1lICs9IGNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lJylcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQVRUUklCX05BTUVfU0FXX1dISVRFOlxuICAgICAgICAgIGlmIChjID09PSAnPScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFXG4gICAgICAgICAgfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoYykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnQXR0cmlidXRlIHdpdGhvdXQgdmFsdWUnKVxuICAgICAgICAgICAgcGFyc2VyLnRhZy5hdHRyaWJ1dGVzW3BhcnNlci5hdHRyaWJOYW1lXSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSAnJ1xuICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25hdHRyaWJ1dGUnLCB7XG4gICAgICAgICAgICAgIG5hbWU6IHBhcnNlci5hdHRyaWJOYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliTmFtZSA9ICcnXG4gICAgICAgICAgICBpZiAoYyA9PT0gJz4nKSB7XG4gICAgICAgICAgICAgIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBjXG4gICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX05BTUVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBhdHRyaWJ1dGUgbmFtZScpXG4gICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRTpcbiAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGMpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNRdW90ZShjKSkge1xuICAgICAgICAgICAgcGFyc2VyLnEgPSBjXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9RVU9URURcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdVbnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUnKVxuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfVU5RVU9URURcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9IGNcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX1FVT1RFRDpcbiAgICAgICAgICBpZiAoYyAhPT0gcGFyc2VyLnEpIHtcbiAgICAgICAgICAgIGlmIChjID09PSAnJicpIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfRU5USVRZX1FcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSArPSBjXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBhdHRyaWIocGFyc2VyKVxuICAgICAgICAgIHBhcnNlci5xID0gJydcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9DTE9TRURcbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfQ0xPU0VEOlxuICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fVEFHX1NMQVNIXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnTm8gd2hpdGVzcGFjZSBiZXR3ZWVuIGF0dHJpYnV0ZXMnKVxuICAgICAgICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBjXG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfTkFNRVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ludmFsaWQgYXR0cmlidXRlIG5hbWUnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfVU5RVU9URUQ6XG4gICAgICAgICAgaWYgKCFpc0F0dHJpYkVuZChjKSkge1xuICAgICAgICAgICAgaWYgKGMgPT09ICcmJykge1xuICAgICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfVVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyc2VyLmF0dHJpYlZhbHVlICs9IGNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGF0dHJpYihwYXJzZXIpXG4gICAgICAgICAgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkNMT1NFX1RBRzpcbiAgICAgICAgICBpZiAoIXBhcnNlci50YWdOYW1lKSB7XG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGMpKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5vdE1hdGNoKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgICAgaWYgKHBhcnNlci5zY3JpcHQpIHtcbiAgICAgICAgICAgICAgICBwYXJzZXIuc2NyaXB0ICs9ICc8LycgKyBjXG4gICAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ludmFsaWQgdGFnbmFtZSBpbiBjbG9zaW5nIHRhZy4nKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJzZXIudGFnTmFtZSA9IGNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgY2xvc2VUYWcocGFyc2VyKVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaChuYW1lQm9keSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci50YWdOYW1lICs9IGNcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNlci5zY3JpcHQpIHtcbiAgICAgICAgICAgIHBhcnNlci5zY3JpcHQgKz0gJzwvJyArIHBhcnNlci50YWdOYW1lXG4gICAgICAgICAgICBwYXJzZXIudGFnTmFtZSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNDUklQVFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZShjKSkge1xuICAgICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ludmFsaWQgdGFnbmFtZSBpbiBjbG9zaW5nIHRhZycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNMT1NFX1RBR19TQVdfV0hJVEVcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQ0xPU0VfVEFHX1NBV19XSElURTpcbiAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGMpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYyA9PT0gJz4nKSB7XG4gICAgICAgICAgICBjbG9zZVRhZyhwYXJzZXIpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGNsb3NpbmcgdGFnJylcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuVEVYVF9FTlRJVFk6XG4gICAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfRU5USVRZX1E6XG4gICAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfRU5USVRZX1U6XG4gICAgICAgICAgdmFyIHJldHVyblN0YXRlXG4gICAgICAgICAgdmFyIGJ1ZmZlclxuICAgICAgICAgIHN3aXRjaCAocGFyc2VyLnN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlIFMuVEVYVF9FTlRJVFk6XG4gICAgICAgICAgICAgIHJldHVyblN0YXRlID0gUy5URVhUXG4gICAgICAgICAgICAgIGJ1ZmZlciA9ICd0ZXh0Tm9kZSdcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfUTpcbiAgICAgICAgICAgICAgcmV0dXJuU3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9RVU9URURcbiAgICAgICAgICAgICAgYnVmZmVyID0gJ2F0dHJpYlZhbHVlJ1xuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX0VOVElUWV9VOlxuICAgICAgICAgICAgICByZXR1cm5TdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX1VOUVVPVEVEXG4gICAgICAgICAgICAgIGJ1ZmZlciA9ICdhdHRyaWJWYWx1ZSdcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYyA9PT0gJzsnKSB7XG4gICAgICAgICAgICBwYXJzZXJbYnVmZmVyXSArPSBwYXJzZUVudGl0eShwYXJzZXIpXG4gICAgICAgICAgICBwYXJzZXIuZW50aXR5ID0gJydcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IHJldHVyblN0YXRlXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoKHBhcnNlci5lbnRpdHkubGVuZ3RoID8gZW50aXR5Qm9keSA6IGVudGl0eVN0YXJ0LCBjKSkge1xuICAgICAgICAgICAgcGFyc2VyLmVudGl0eSArPSBjXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBjaGFyYWN0ZXIgaW4gZW50aXR5IG5hbWUnKVxuICAgICAgICAgICAgcGFyc2VyW2J1ZmZlcl0gKz0gJyYnICsgcGFyc2VyLmVudGl0eSArIGNcbiAgICAgICAgICAgIHBhcnNlci5lbnRpdHkgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gcmV0dXJuU3RhdGVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHBhcnNlciwgJ1Vua25vd24gc3RhdGU6ICcgKyBwYXJzZXIuc3RhdGUpXG4gICAgICB9XG4gICAgfSAvLyB3aGlsZVxuXG4gICAgaWYgKHBhcnNlci5wb3NpdGlvbiA+PSBwYXJzZXIuYnVmZmVyQ2hlY2tQb3NpdGlvbikge1xuICAgICAgY2hlY2tCdWZmZXJMZW5ndGgocGFyc2VyKVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VyXG4gIH1cblxuICAvKiEgaHR0cDovL210aHMuYmUvZnJvbWNvZGVwb2ludCB2MC4xLjAgYnkgQG1hdGhpYXMgKi9cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFTdHJpbmcuZnJvbUNvZGVQb2ludCkge1xuICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuICAgICAgdmFyIGZsb29yID0gTWF0aC5mbG9vclxuICAgICAgdmFyIGZyb21Db2RlUG9pbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBNQVhfU0laRSA9IDB4NDAwMFxuICAgICAgICB2YXIgY29kZVVuaXRzID0gW11cbiAgICAgICAgdmFyIGhpZ2hTdXJyb2dhdGVcbiAgICAgICAgdmFyIGxvd1N1cnJvZ2F0ZVxuICAgICAgICB2YXIgaW5kZXggPSAtMVxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiAnJ1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSAnJ1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBOdW1iZXIoYXJndW1lbnRzW2luZGV4XSlcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNGaW5pdGUoY29kZVBvaW50KSB8fCAvLyBgTmFOYCwgYCtJbmZpbml0eWAsIG9yIGAtSW5maW5pdHlgXG4gICAgICAgICAgICBjb2RlUG9pbnQgPCAwIHx8IC8vIG5vdCBhIHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludFxuICAgICAgICAgICAgY29kZVBvaW50ID4gMHgxMEZGRkYgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG4gICAgICAgICAgICBmbG9vcihjb2RlUG9pbnQpICE9PSBjb2RlUG9pbnQgLy8gbm90IGFuIGludGVnZXJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludDogJyArIGNvZGVQb2ludClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweEZGRkYpIHsgLy8gQk1QIGNvZGUgcG9pbnRcbiAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludClcbiAgICAgICAgICB9IGVsc2UgeyAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW4gc3Vycm9nYXRlIGhhbHZlc1xuICAgICAgICAgICAgLy8gaHR0cDovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcbiAgICAgICAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICAgICAgICBoaWdoU3Vycm9nYXRlID0gKGNvZGVQb2ludCA+PiAxMCkgKyAweEQ4MDBcbiAgICAgICAgICAgIGxvd1N1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgJSAweDQwMCkgKyAweERDMDBcbiAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gbGVuZ3RoIHx8IGNvZGVVbml0cy5sZW5ndGggPiBNQVhfU0laRSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZS5hcHBseShudWxsLCBjb2RlVW5pdHMpXG4gICAgICAgICAgICBjb2RlVW5pdHMubGVuZ3RoID0gMFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RyaW5nLCAnZnJvbUNvZGVQb2ludCcsIHtcbiAgICAgICAgICB2YWx1ZTogZnJvbUNvZGVQb2ludCxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFN0cmluZy5mcm9tQ29kZVBvaW50ID0gZnJvbUNvZGVQb2ludFxuICAgICAgfVxuICAgIH0oKSlcbiAgfVxufSkoIGZhbHNlID8gMCA6IGV4cG9ydHMpXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI4MzA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbm1vZHVsZS5leHBvcnRzID0gU3RyZWFtO1xuXG52YXIgRUUgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg3MTg3KS5FdmVudEVtaXR0ZXIpO1xudmFyIGluaGVyaXRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NzE3KTtcblxuaW5oZXJpdHMoU3RyZWFtLCBFRSk7XG5TdHJlYW0uUmVhZGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1NzcpO1xuU3RyZWFtLldyaXRhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMjMpO1xuU3RyZWFtLkR1cGxleCA9IF9fd2VicGFja19yZXF1aXJlX18oODY1Nik7XG5TdHJlYW0uVHJhbnNmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NDczKTtcblN0cmVhbS5QYXNzVGhyb3VnaCA9IF9fd2VicGFja19yZXF1aXJlX18oMjM2Nik7XG5TdHJlYW0uZmluaXNoZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwODYpXG5TdHJlYW0ucGlwZWxpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0NzIpXG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuNC54XG5TdHJlYW0uU3RyZWFtID0gU3RyZWFtO1xuXG5cblxuLy8gb2xkLXN0eWxlIHN0cmVhbXMuICBOb3RlIHRoYXQgdGhlIHBpcGUgbWV0aG9kICh0aGUgb25seSByZWxldmFudFxuLy8gcGFydCBvZiB0aGlzIGNsYXNzKSBpcyBvdmVycmlkZGVuIGluIHRoZSBSZWFkYWJsZSBjbGFzcy5cblxuZnVuY3Rpb24gU3RyZWFtKCkge1xuICBFRS5jYWxsKHRoaXMpO1xufVxuXG5TdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIHZhciBzb3VyY2UgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlKSB7XG4gICAgICBpZiAoZmFsc2UgPT09IGRlc3Qud3JpdGUoY2h1bmspICYmIHNvdXJjZS5wYXVzZSkge1xuICAgICAgICBzb3VyY2UucGF1c2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzb3VyY2Uub24oJ2RhdGEnLCBvbmRhdGEpO1xuXG4gIGZ1bmN0aW9uIG9uZHJhaW4oKSB7XG4gICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7XG4gICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgfVxuICB9XG5cbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICAvLyBJZiB0aGUgJ2VuZCcgb3B0aW9uIGlzIG5vdCBzdXBwbGllZCwgZGVzdC5lbmQoKSB3aWxsIGJlIGNhbGxlZCB3aGVuXG4gIC8vIHNvdXJjZSBnZXRzIHRoZSAnZW5kJyBvciAnY2xvc2UnIGV2ZW50cy4gIE9ubHkgZGVzdC5lbmQoKSBvbmNlLlxuICBpZiAoIWRlc3QuX2lzU3RkaW8gJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMuZW5kICE9PSBmYWxzZSkpIHtcbiAgICBzb3VyY2Uub24oJ2VuZCcsIG9uZW5kKTtcbiAgICBzb3VyY2Uub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIH1cblxuICB2YXIgZGlkT25FbmQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVybjtcbiAgICBkaWRPbkVuZCA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIGRlc3QuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgZGVzdC5kZXN0cm95KCk7XG4gIH1cblxuICAvLyBkb24ndCBsZWF2ZSBkYW5nbGluZyBwaXBlcyB3aGVuIHRoZXJlIGFyZSBlcnJvcnMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKEVFLmxpc3RlbmVyQ291bnQodGhpcywgJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgc3RyZWFtIGVycm9yIGluIHBpcGUuXG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBkZXN0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIHJlbW92ZSBhbGwgdGhlIGV2ZW50IGxpc3RlbmVycyB0aGF0IHdlcmUgYWRkZWQuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIGNsZWFudXApO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKTtcblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cCk7XG4gIH1cblxuICBzb3VyY2Uub24oJ2VuZCcsIGNsZWFudXApO1xuICBzb3VyY2Uub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5vbignY2xvc2UnLCBjbGVhbnVwKTtcblxuICBkZXN0LmVtaXQoJ3BpcGUnLCBzb3VyY2UpO1xuXG4gIC8vIEFsbG93IGZvciB1bml4LWxpa2UgdXNhZ2U6IEEucGlwZShCKS5waXBlKEMpXG4gIHJldHVybiBkZXN0O1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODEwNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7IHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzOyBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBjb2RlcyA9IHt9O1xuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclR5cGUoY29kZSwgbWVzc2FnZSwgQmFzZSkge1xuICBpZiAoIUJhc2UpIHtcbiAgICBCYXNlID0gRXJyb3I7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRNZXNzYWdlKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1lc3NhZ2UoYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIE5vZGVFcnJvciA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9CYXNlKSB7XG4gICAgX2luaGVyaXRzTG9vc2UoTm9kZUVycm9yLCBfQmFzZSk7XG5cbiAgICBmdW5jdGlvbiBOb2RlRXJyb3IoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgcmV0dXJuIF9CYXNlLmNhbGwodGhpcywgZ2V0TWVzc2FnZShhcmcxLCBhcmcyLCBhcmczKSkgfHwgdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gTm9kZUVycm9yO1xuICB9KEJhc2UpO1xuXG4gIE5vZGVFcnJvci5wcm90b3R5cGUubmFtZSA9IEJhc2UubmFtZTtcbiAgTm9kZUVycm9yLnByb3RvdHlwZS5jb2RlID0gY29kZTtcbiAgY29kZXNbY29kZV0gPSBOb2RlRXJyb3I7XG59IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxMC44LjAvbGliL2ludGVybmFsL2Vycm9ycy5qc1xuXG5cbmZ1bmN0aW9uIG9uZU9mKGV4cGVjdGVkLCB0aGluZykge1xuICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICB2YXIgbGVuID0gZXhwZWN0ZWQubGVuZ3RoO1xuICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGkpO1xuICAgIH0pO1xuXG4gICAgaWYgKGxlbiA+IDIpIHtcbiAgICAgIHJldHVybiBcIm9uZSBvZiBcIi5jb25jYXQodGhpbmcsIFwiIFwiKS5jb25jYXQoZXhwZWN0ZWQuc2xpY2UoMCwgbGVuIC0gMSkuam9pbignLCAnKSwgXCIsIG9yIFwiKSArIGV4cGVjdGVkW2xlbiAtIDFdO1xuICAgIH0gZWxzZSBpZiAobGVuID09PSAyKSB7XG4gICAgICByZXR1cm4gXCJvbmUgb2YgXCIuY29uY2F0KHRoaW5nLCBcIiBcIikuY29uY2F0KGV4cGVjdGVkWzBdLCBcIiBvciBcIikuY29uY2F0KGV4cGVjdGVkWzFdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwib2YgXCIuY29uY2F0KHRoaW5nLCBcIiBcIikuY29uY2F0KGV4cGVjdGVkWzBdKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwib2YgXCIuY29uY2F0KHRoaW5nLCBcIiBcIikuY29uY2F0KFN0cmluZyhleHBlY3RlZCkpO1xuICB9XG59IC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9zdGFydHNXaXRoXG5cblxuZnVuY3Rpb24gc3RhcnRzV2l0aChzdHIsIHNlYXJjaCwgcG9zKSB7XG4gIHJldHVybiBzdHIuc3Vic3RyKCFwb3MgfHwgcG9zIDwgMCA/IDAgOiArcG9zLCBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xufSAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvZW5kc1dpdGhcblxuXG5mdW5jdGlvbiBlbmRzV2l0aChzdHIsIHNlYXJjaCwgdGhpc19sZW4pIHtcbiAgaWYgKHRoaXNfbGVuID09PSB1bmRlZmluZWQgfHwgdGhpc19sZW4gPiBzdHIubGVuZ3RoKSB7XG4gICAgdGhpc19sZW4gPSBzdHIubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zdWJzdHJpbmcodGhpc19sZW4gLSBzZWFyY2gubGVuZ3RoLCB0aGlzX2xlbikgPT09IHNlYXJjaDtcbn0gLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL2luY2x1ZGVzXG5cblxuZnVuY3Rpb24gaW5jbHVkZXMoc3RyLCBzZWFyY2gsIHN0YXJ0KSB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdudW1iZXInKSB7XG4gICAgc3RhcnQgPSAwO1xuICB9XG5cbiAgaWYgKHN0YXJ0ICsgc2VhcmNoLmxlbmd0aCA+IHN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHNlYXJjaCwgc3RhcnQpICE9PSAtMTtcbiAgfVxufVxuXG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9JTlZBTElEX09QVF9WQUxVRScsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gJ1RoZSB2YWx1ZSBcIicgKyB2YWx1ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCInICsgbmFtZSArICdcIic7XG59LCBUeXBlRXJyb3IpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfSU5WQUxJRF9BUkdfVFlQRScsIGZ1bmN0aW9uIChuYW1lLCBleHBlY3RlZCwgYWN0dWFsKSB7XG4gIC8vIGRldGVybWluZXI6ICdtdXN0IGJlJyBvciAnbXVzdCBub3QgYmUnXG4gIHZhciBkZXRlcm1pbmVyO1xuXG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnICYmIHN0YXJ0c1dpdGgoZXhwZWN0ZWQsICdub3QgJykpIHtcbiAgICBkZXRlcm1pbmVyID0gJ211c3Qgbm90IGJlJztcbiAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnJlcGxhY2UoL15ub3QgLywgJycpO1xuICB9IGVsc2Uge1xuICAgIGRldGVybWluZXIgPSAnbXVzdCBiZSc7XG4gIH1cblxuICB2YXIgbXNnO1xuXG4gIGlmIChlbmRzV2l0aChuYW1lLCAnIGFyZ3VtZW50JykpIHtcbiAgICAvLyBGb3IgY2FzZXMgbGlrZSAnZmlyc3QgYXJndW1lbnQnXG4gICAgbXNnID0gXCJUaGUgXCIuY29uY2F0KG5hbWUsIFwiIFwiKS5jb25jYXQoZGV0ZXJtaW5lciwgXCIgXCIpLmNvbmNhdChvbmVPZihleHBlY3RlZCwgJ3R5cGUnKSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHR5cGUgPSBpbmNsdWRlcyhuYW1lLCAnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCc7XG4gICAgbXNnID0gXCJUaGUgXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCIgXCIpLmNvbmNhdCh0eXBlLCBcIiBcIikuY29uY2F0KGRldGVybWluZXIsIFwiIFwiKS5jb25jYXQob25lT2YoZXhwZWN0ZWQsICd0eXBlJykpO1xuICB9XG5cbiAgbXNnICs9IFwiLiBSZWNlaXZlZCB0eXBlIFwiLmNvbmNhdCh0eXBlb2YgYWN0dWFsKTtcbiAgcmV0dXJuIG1zZztcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YnLCAnc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQnLCBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gJ1RoZSAnICsgbmFtZSArICcgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCc7XG59KTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnLCAnUHJlbWF0dXJlIGNsb3NlJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fREVTVFJPWUVEJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuICdDYW5ub3QgY2FsbCAnICsgbmFtZSArICcgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCc7XG59KTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX01VTFRJUExFX0NBTExCQUNLJywgJ0NhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcycpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX0NBTk5PVF9QSVBFJywgJ0Nhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQnLCAnd3JpdGUgYWZ0ZXIgZW5kJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fTlVMTF9WQUxVRVMnLCAnTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0nLCBUeXBlRXJyb3IpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfVU5LTk9XTl9FTkNPRElORycsIGZ1bmN0aW9uIChhcmcpIHtcbiAgcmV0dXJuICdVbmtub3duIGVuY29kaW5nOiAnICsgYXJnO1xufSwgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCcsICdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpO1xubW9kdWxlLmV4cG9ydHMucSA9IGNvZGVzO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NjU2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogcHJvdmlkZWQgZGVwZW5kZW5jeSAqLyB2YXIgcHJvY2VzcyA9IF9fd2VicGFja19yZXF1aXJlX18oNDE1NSk7XG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbi8vIGEgZHVwbGV4IHN0cmVhbSBpcyBqdXN0IGEgc3RyZWFtIHRoYXQgaXMgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUuXG4vLyBTaW5jZSBKUyBkb2Vzbid0IGhhdmUgbXVsdGlwbGUgcHJvdG90eXBhbCBpbmhlcml0YW5jZSwgdGhpcyBjbGFzc1xuLy8gcHJvdG90eXBhbGx5IGluaGVyaXRzIGZyb20gUmVhZGFibGUsIGFuZCB0aGVuIHBhcmFzaXRpY2FsbHkgZnJvbVxuLy8gV3JpdGFibGUuXG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4O1xuXG52YXIgUmVhZGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1NzcpO1xuXG52YXIgV3JpdGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyMyk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTcxNykoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbntcbiAgLy8gQWxsb3cgdGhlIGtleXMgYXJyYXkgdG8gYmUgR0MnZWQuXG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpO1xuXG4gIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBEdXBsZXgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIFdyaXRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcblxuICAgIGlmIChvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgIH1cbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVMZW5ndGgnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aDtcbiAgfVxufSk7IC8vIHRoZSBuby1oYWxmLW9wZW4gZW5mb3JjZXJcblxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIElmIHRoZSB3cml0YWJsZSBzaWRlIGVuZGVkLCB0aGVuIHdlJ3JlIG9rLlxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuOyAvLyBubyBtb3JlIGRhdGEgY2FuIGJlIHdyaXR0ZW4uXG4gIC8vIEJ1dCBhbGxvdyBtb3JlIHdyaXRlcyB0byBoYXBwZW4gaW4gdGhpcyB0aWNrLlxuXG4gIHByb2Nlc3MubmV4dFRpY2sob25FbmROVCwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIG9uRW5kTlQoc2VsZikge1xuICBzZWxmLmVuZCgpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG5cblxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMzY2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhc3NUaHJvdWdoO1xuXG52YXIgVHJhbnNmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NDczKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1NzE3KShQYXNzVGhyb3VnaCwgVHJhbnNmb3JtKTtcblxuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuayk7XG59O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjU3Nzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIHByb2Nlc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxNTUpO1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZTtcbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgRUUgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg3MTg3KS5FdmVudEVtaXR0ZXIpO1xuXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gRUVsaXN0ZW5lckNvdW50KGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxuXG52YXIgU3RyZWFtID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMTk0KTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cbnZhciBCdWZmZXIgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg4ODIzKS5CdWZmZXIpO1xuXG52YXIgT3VyVWludDhBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18uZy5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuXG5mdW5jdGlvbiBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShjaHVuayk7XG59XG5cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxuXG52YXIgZGVidWdVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NjQpO1xuXG52YXIgZGVidWc7XG5cbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gZGVidWcoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cbnZhciBCdWZmZXJMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMzYxKTtcblxudmFyIGRlc3Ryb3lJbXBsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDI5KTtcblxudmFyIF9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NCksXG4gICAgZ2V0SGlnaFdhdGVyTWFyayA9IF9yZXF1aXJlLmdldEhpZ2hXYXRlck1hcms7XG5cbnZhciBfcmVxdWlyZSRjb2RlcyA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDgxMDYpLyogLmNvZGVzICovIC5xKSxcbiAgICBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFLFxuICAgIEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLFxuICAgIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEID0gX3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gICAgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7IC8vIExhenkgbG9hZGVkIHRvIGltcHJvdmUgdGhlIHN0YXJ0dXAgcGVyZm9ybWFuY2UuXG5cblxudmFyIFN0cmluZ0RlY29kZXI7XG52YXIgY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yO1xudmFyIGZyb207XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTcxNykoUmVhZGFibGUsIFN0cmVhbSk7XG5cbnZhciBlcnJvck9yRGVzdHJveSA9IGRlc3Ryb3lJbXBsLmVycm9yT3JEZXN0cm95O1xudmFyIGtQcm94eUV2ZW50cyA9IFsnZXJyb3InLCAnY2xvc2UnLCAnZGVzdHJveScsICdwYXVzZScsICdyZXN1bWUnXTtcblxuZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbikge1xuICAvLyBTYWRseSB0aGlzIGlzIG5vdCBjYWNoZWFibGUgYXMgc29tZSBsaWJyYXJpZXMgYnVuZGxlIHRoZWlyIG93blxuICAvLyBldmVudCBlbWl0dGVyIGltcGxlbWVudGF0aW9uIHdpdGggdGhlbS5cbiAgaWYgKHR5cGVvZiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKGV2ZW50LCBmbik7IC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnlcbiAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gIC8vIHRvIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBOb2RlLmpzIHRoYXQgZG8gbm90IGluY2x1ZGVcbiAgLy8gdGhlIHByZXBlbmRMaXN0ZW5lcigpIG1ldGhvZC4gVGhlIGdvYWwgaXMgdG8gZXZlbnR1YWxseSByZW1vdmUgdGhpcyBoYWNrLlxuXG4gIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbZXZlbnRdKSBlbWl0dGVyLm9uKGV2ZW50LCBmbik7ZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbWl0dGVyLl9ldmVudHNbZXZlbnRdKSkgZW1pdHRlci5fZXZlbnRzW2V2ZW50XS51bnNoaWZ0KGZuKTtlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0gPSBbZm4sIGVtaXR0ZXIuX2V2ZW50c1tldmVudF1dO1xufVxuXG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IF9fd2VicGFja19yZXF1aXJlX18oODY1Nik7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OyAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG5cbiAgaWYgKHR5cGVvZiBpc0R1cGxleCAhPT0gJ2Jvb2xlYW4nKSBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDsgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcblxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTsgLy8gdGhlIHBvaW50IGF0IHdoaWNoIGl0IHN0b3BzIGNhbGxpbmcgX3JlYWQoKSB0byBmaWxsIHRoZSBidWZmZXJcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyBcImRvbid0IGNhbGwgX3JlYWQgcHJlZW1wdGl2ZWx5IGV2ZXJcIlxuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KTsgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuXG4gIHRoaXMuYnVmZmVyID0gbmV3IEJ1ZmZlckxpc3QoKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xuICB0aGlzLnBpcGVzID0gbnVsbDtcbiAgdGhpcy5waXBlc0NvdW50ID0gMDtcbiAgdGhpcy5mbG93aW5nID0gbnVsbDtcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICB0aGlzLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWFkaW5nID0gZmFsc2U7IC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGV2ZW50ICdyZWFkYWJsZScvJ2RhdGEnIGlzIGVtaXR0ZWRcbiAgLy8gaW1tZWRpYXRlbHksIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2VcbiAgLy8gYW55IGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHJlYWQgY2FsbC5cblxuICB0aGlzLnN5bmMgPSB0cnVlOyAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cblxuICB0aGlzLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlTGlzdGVuaW5nID0gZmFsc2U7XG4gIHRoaXMucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHRoaXMucGF1c2VkID0gdHJ1ZTsgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cblxuICB0aGlzLmVtaXRDbG9zZSA9IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZTsgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdlbmQnIChhbmQgcG90ZW50aWFsbHkgJ2ZpbmlzaCcpXG5cbiAgdGhpcy5hdXRvRGVzdHJveSA9ICEhb3B0aW9ucy5hdXRvRGVzdHJveTsgLy8gaGFzIGl0IGJlZW4gZGVzdHJveWVkXG5cbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cblxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JzsgLy8gdGhlIG51bWJlciBvZiB3cml0ZXJzIHRoYXQgYXJlIGF3YWl0aW5nIGEgZHJhaW4gZXZlbnQgaW4gLnBpcGUoKXNcblxuICB0aGlzLmF3YWl0RHJhaW4gPSAwOyAvLyBpZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkXG5cbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuICB0aGlzLmRlY29kZXIgPSBudWxsO1xuICB0aGlzLmVuY29kaW5nID0gbnVsbDtcblxuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NTMpLyogLlN0cmluZ0RlY29kZXIgKi8gLnMpO1xuICAgIHRoaXMuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKG9wdGlvbnMuZW5jb2RpbmcpO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IF9fd2VicGFja19yZXF1aXJlX18oODY1Nik7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7IC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFJlYWRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41XG5cbiAgdmFyIGlzRHVwbGV4ID0gdGhpcyBpbnN0YW5jZW9mIER1cGxleDtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KTsgLy8gbGVnYWN5XG5cbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZDtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcblxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcblxuUmVhZGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07IC8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblxuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHNraXBDaHVua0NoZWNrO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcblxuICAgICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHNraXBDaHVua0NoZWNrID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIGVuY29kaW5nLCBmYWxzZSwgc2tpcENodW5rQ2hlY2spO1xufTsgLy8gVW5zaGlmdCBzaG91bGQgKmFsd2F5cyogYmUgc29tZXRoaW5nIGRpcmVjdGx5IG91dCBvZiByZWFkKClcblxuXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgbnVsbCwgdHJ1ZSwgZmFsc2UpO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCwgc2tpcENodW5rQ2hlY2spIHtcbiAgZGVidWcoJ3JlYWRhYmxlQWRkQ2h1bmsnLCBjaHVuayk7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcblxuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKCFza2lwQ2h1bmtDaGVjaykgZXIgPSBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKTtcblxuICAgIGlmIChlcikge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihjaHVuaykgIT09IEJ1ZmZlci5wcm90b3R5cGUpIHtcbiAgICAgICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQoKSk7ZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YoKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICAgICAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuay5sZW5ndGggIT09IDApIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7ZWxzZSBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfSAvLyBXZSBjYW4gcHVzaCBtb3JlIGRhdGEgaWYgd2UgYXJlIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLlxuICAvLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZSBtb3JlIGJ5dGVzLlxuICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLCBzdWNoIGFzIHRoZSByZXBsLlxuXG5cbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuXG5mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkge1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgIGlmIChzdGF0ZS5uZWVkUmVhZGFibGUpIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICB9XG5cbiAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXI7XG5cbiAgaWYgKCFfaXNVaW50OEFycmF5KGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnY2h1bmsnLCBbJ3N0cmluZycsICdCdWZmZXInLCAnVWludDhBcnJheSddLCBjaHVuayk7XG4gIH1cblxuICByZXR1cm4gZXI7XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS5pc1BhdXNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9PT0gZmFsc2U7XG59OyAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblxuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NTMpLyogLlN0cmluZ0RlY29kZXIgKi8gLnMpO1xuICB2YXIgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IGRlY29kZXI7IC8vIElmIHNldEVuY29kaW5nKG51bGwpLCBkZWNvZGVyLmVuY29kaW5nIGVxdWFscyB1dGY4XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZzsgLy8gSXRlcmF0ZSBvdmVyIGN1cnJlbnQgYnVmZmVyIHRvIGNvbnZlcnQgYWxyZWFkeSBzdG9yZWQgQnVmZmVyczpcblxuICB2YXIgcCA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQ7XG4gIHZhciBjb250ZW50ID0gJyc7XG5cbiAgd2hpbGUgKHAgIT09IG51bGwpIHtcbiAgICBjb250ZW50ICs9IGRlY29kZXIud3JpdGUocC5kYXRhKTtcbiAgICBwID0gcC5uZXh0O1xuICB9XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKTtcblxuICBpZiAoY29udGVudCAhPT0gJycpIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goY29udGVudCk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG4gIHJldHVybiB0aGlzO1xufTsgLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDFHQlxuXG5cbnZhciBNQVhfSFdNID0gMHg0MDAwMDAwMDtcblxuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+PSBNQVhfSFdNKSB7XG4gICAgLy8gVE9ETyhyb25hZyk6IFRocm93IEVSUl9WQUxVRV9PVVRfT0ZfUkFOR0UuXG4gICAgbiA9IE1BWF9IV007XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBuZXh0IGhpZ2hlc3QgcG93ZXIgb2YgMiB0byBwcmV2ZW50IGluY3JlYXNpbmcgaHdtIGV4Y2Vzc2l2ZWx5IGluXG4gICAgLy8gdGlueSBhbW91bnRzXG4gICAgbi0tO1xuICAgIG4gfD0gbiA+Pj4gMTtcbiAgICBuIHw9IG4gPj4+IDI7XG4gICAgbiB8PSBuID4+PiA0O1xuICAgIG4gfD0gbiA+Pj4gODtcbiAgICBuIHw9IG4gPj4+IDE2O1xuICAgIG4rKztcbiAgfVxuXG4gIHJldHVybiBuO1xufSAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cblxuXG5mdW5jdGlvbiBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKSB7XG4gIGlmIChuIDw9IDAgfHwgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSByZXR1cm4gMDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldHVybiAxO1xuXG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9IC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuXG5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobik7XG4gIGlmIChuIDw9IHN0YXRlLmxlbmd0aCkgcmV0dXJuIG47IC8vIERvbid0IGhhdmUgZW5vdWdoXG5cbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gc3RhdGUubGVuZ3RoO1xufSAvLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuXG5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcbiAgaWYgKG4gIT09IDApIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlOyAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUubmVlZFJlYWRhYmxlICYmICgoc3RhdGUuaGlnaFdhdGVyTWFyayAhPT0gMCA/IHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIDogc3RhdGUubGVuZ3RoID4gMCkgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO2Vsc2UgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpOyAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG5cblxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7IC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH0gLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuXG5cbiAgaWYgKHN0YXRlLmVuZGVkIHx8IHN0YXRlLnJlYWRpbmcpIHtcbiAgICBkb1JlYWQgPSBmYWxzZTtcbiAgICBkZWJ1ZygncmVhZGluZyBvciBlbmRlZCcsIGRvUmVhZCk7XG4gIH0gZWxzZSBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKTtcbiAgICBzdGF0ZS5yZWFkaW5nID0gdHJ1ZTtcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZTsgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cblxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7IC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcblxuICAgIHRoaXMuX3JlYWQoc3RhdGUuaGlnaFdhdGVyTWFyayk7XG5cbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7IC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgICBuID0gMDtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5sZW5ndGggLT0gbjtcbiAgICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgfVxuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTsgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuXG4gICAgaWYgKG5PcmlnICE9PSBuICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgfVxuXG4gIGlmIChyZXQgIT09IG51bGwpIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ29uRW9mQ2h1bmsnKTtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuXG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICBpZiAoc3RhdGUuc3luYykge1xuICAgIC8vIGlmIHdlIGFyZSBzeW5jLCB3YWl0IHVudGlsIG5leHQgdGljayB0byBlbWl0IHRoZSBkYXRhLlxuICAgIC8vIE90aGVyd2lzZSB3ZSByaXNrIGVtaXR0aW5nIGRhdGEgaW4gdGhlIGZsb3coKVxuICAgIC8vIHRoZSByZWFkYWJsZSBjb2RlIHRyaWdnZXJzIGR1cmluZyBhIHJlYWQoKSBjYWxsXG4gICAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZW1pdCAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgICB9XG4gIH1cbn0gLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cblxuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLm5lZWRSZWFkYWJsZSwgc3RhdGUuZW1pdHRlZFJlYWRhYmxlKTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW1pdFJlYWRhYmxlXycsIHN0YXRlLmRlc3Ryb3llZCwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG5cbiAgaWYgKCFzdGF0ZS5kZXN0cm95ZWQgJiYgKHN0YXRlLmxlbmd0aCB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKTtcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgfSAvLyBUaGUgc3RyZWFtIG5lZWRzIGFub3RoZXIgcmVhZGFibGUgZXZlbnQgaWZcbiAgLy8gMS4gSXQgaXMgbm90IGZsb3dpbmcsIGFzIHRoZSBmbG93IG1lY2hhbmlzbSB3aWxsIHRha2VcbiAgLy8gICAgY2FyZSBvZiBpdC5cbiAgLy8gMi4gSXQgaXMgbm90IGVuZGVkLlxuICAvLyAzLiBJdCBpcyBiZWxvdyB0aGUgaGlnaFdhdGVyTWFyaywgc28gd2UgY2FuIHNjaGVkdWxlXG4gIC8vICAgIGFub3RoZXIgcmVhZGFibGUgbGF0ZXIuXG5cblxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIGZsb3coc3RyZWFtKTtcbn0gLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5cblxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhtYXliZVJlYWRNb3JlXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICAvLyBBdHRlbXB0IHRvIHJlYWQgbW9yZSBkYXRhIGlmIHdlIHNob3VsZC5cbiAgLy9cbiAgLy8gVGhlIGNvbmRpdGlvbnMgZm9yIHJlYWRpbmcgbW9yZSBkYXRhIGFyZSAob25lIG9mKTpcbiAgLy8gLSBOb3QgZW5vdWdoIGRhdGEgYnVmZmVyZWQgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspLiBUaGUgbG9vcFxuICAvLyAgIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZSBidWZmZXIgd2l0aCBlbm91Z2ggZGF0YSBpZiBzdWNoIGRhdGFcbiAgLy8gICBpcyBhdmFpbGFibGUuIElmIGhpZ2hXYXRlck1hcmsgaXMgMCBhbmQgd2UgYXJlIG5vdCBpbiB0aGUgZmxvd2luZyBtb2RlXG4gIC8vICAgd2Ugc2hvdWxkIF9ub3RfIGF0dGVtcHQgdG8gYnVmZmVyIGFueSBleHRyYSBkYXRhLiBXZSdsbCBnZXQgbW9yZSBkYXRhXG4gIC8vICAgd2hlbiB0aGUgc3RyZWFtIGNvbnN1bWVyIGNhbGxzIHJlYWQoKSBpbnN0ZWFkLlxuICAvLyAtIE5vIGRhdGEgaW4gdGhlIGJ1ZmZlciwgYW5kIHRoZSBzdHJlYW0gaXMgaW4gZmxvd2luZyBtb2RlLiBJbiB0aGlzIG1vZGVcbiAgLy8gICB0aGUgbG9vcCBiZWxvdyBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgcmVhZCgpIGlzIGNhbGxlZC4gRmFpbGluZyB0b1xuICAvLyAgIGNhbGwgcmVhZCBoZXJlIHdvdWxkIGFib3J0IHRoZSBmbG93IGFuZCB0aGVyZSdzIG5vIG90aGVyIG1lY2hhbmlzbSBmb3JcbiAgLy8gICBjb250aW51aW5nIHRoZSBmbG93IGlmIHRoZSBzdHJlYW0gY29uc3VtZXIgaGFzIGp1c3Qgc3Vic2NyaWJlZCB0byB0aGVcbiAgLy8gICAnZGF0YScgZXZlbnQuXG4gIC8vXG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBjb25kaXRpb25zIHRvIGtlZXAgcmVhZGluZyBkYXRhLCB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgcHJldmVudCB0aGUgZGF0YSBmcm9tIGJlaW5nIHJlYWQ6XG4gIC8vIC0gVGhlIHN0cmVhbSBoYXMgZW5kZWQgKHN0YXRlLmVuZGVkKS5cbiAgLy8gLSBUaGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyAncmVhZCcgb3BlcmF0aW9uIChzdGF0ZS5yZWFkaW5nKS4gVGhpcyBpcyBhXG4gIC8vICAgY2FzZSB3aGVyZSB0aGUgdGhlIHN0cmVhbSBoYXMgY2FsbGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIF9yZWFkKClcbiAgLy8gICBtZXRob2QsIGJ1dCB0aGV5IGFyZSBwcm9jZXNzaW5nIHRoZSBjYWxsIGFzeW5jaHJvbm91c2x5IGFuZCBoYXZlIF9ub3RfXG4gIC8vICAgY2FsbGVkIHB1c2goKSB3aXRoIG5ldyBkYXRhLiBJbiB0aGlzIGNhc2Ugd2Ugc2tpcCBwZXJmb3JtaW5nIG1vcmVcbiAgLy8gICByZWFkKClzLiBUaGUgZXhlY3V0aW9uIGVuZHMgaW4gdGhpcyBtZXRob2QgYWdhaW4gYWZ0ZXIgdGhlIF9yZWFkKCkgZW5kc1xuICAvLyAgIHVwIGNhbGxpbmcgcHVzaCgpIHdpdGggbW9yZSBkYXRhLlxuICB3aGlsZSAoIXN0YXRlLnJlYWRpbmcgJiYgIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwKSkge1xuICAgIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKSAvLyBkaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWs7XG4gIH1cblxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufSAvLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblxuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICBlcnJvck9yRGVzdHJveSh0aGlzLCBuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ19yZWFkKCknKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTpcbiAgICAgIHN0YXRlLnBpcGVzID0gW3N0YXRlLnBpcGVzLCBkZXN0XTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcbiAgdmFyIGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IHVucGlwZTtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHByb2Nlc3MubmV4dFRpY2soZW5kRm4pO2Vsc2Ugc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuXG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG5cbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgaWYgKHVucGlwZUluZm8gJiYgdW5waXBlSW5mby5oYXNVbnBpcGVkID09PSBmYWxzZSkge1xuICAgICAgICB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfSAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cblxuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTsgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcbiAgICBjbGVhbmVkVXAgPSB0cnVlOyAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG5cbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcblxuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgdmFyIHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGRlYnVnKCdkZXN0LndyaXRlJywgcmV0KTtcblxuICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciB1bnBpcGVkIGR1cmluZyBgZGVzdC53cml0ZSgpYCwgaXQgaXMgcG9zc2libGVcbiAgICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgICAgLy8gPT4gQ2hlY2sgd2hldGhlciBgZGVzdGAgaXMgc3RpbGwgYSBwaXBpbmcgZGVzdGluYXRpb24uXG4gICAgICBpZiAoKHN0YXRlLnBpcGVzQ291bnQgPT09IDEgJiYgc3RhdGUucGlwZXMgPT09IGRlc3QgfHwgc3RhdGUucGlwZXNDb3VudCA+IDEgJiYgaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCkgIT09IC0xKSAmJiAhY2xlYW5lZFVwKSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbisrO1xuICAgICAgfVxuXG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH0gLy8gaWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIGhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cblxuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApIGVycm9yT3JEZXN0cm95KGRlc3QsIGVyKTtcbiAgfSAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG5cblxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7IC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cblxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG5cbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuXG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfSAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuXG5cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTsgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufTtcblxuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwaXBlT25EcmFpbkZ1bmN0aW9uUmVzdWx0KCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbikgc3RhdGUuYXdhaXREcmFpbi0tO1xuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHVucGlwZUluZm8gPSB7XG4gICAgaGFzVW5waXBlZDogZmFsc2VcbiAgfTsgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpczsgLy8ganVzdCBvbmUgZGVzdGluYXRpb24uICBtb3N0IGNvbW1vbiBjYXNlLlxuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuICAgIGlmICghZGVzdCkgZGVzdCA9IHN0YXRlLnBpcGVzOyAvLyBnb3QgYSBtYXRjaC5cblxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0gLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHtcbiAgICAgICAgaGFzVW5waXBlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9IC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG5cblxuICB2YXIgaW5kZXggPSBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KTtcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXM7XG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gIHJldHVybiB0aGlzO1xufTsgLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblxuXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIHVwZGF0ZSByZWFkYWJsZUxpc3RlbmluZyBzbyB0aGF0IHJlc3VtZSgpIG1heSBiZSBhIG5vLW9wXG4gICAgLy8gYSBmZXcgbGluZXMgZG93bi4gVGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScpLlxuICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gdGhpcy5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMDsgLy8gVHJ5IHN0YXJ0IGZsb3dpbmcgb24gbmV4dCB0aWNrIGlmIHN0cmVhbSBpc24ndCBleHBsaWNpdGx5IHBhdXNlZFxuXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBkZWJ1Zygnb24gcmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLnJlYWRpbmcpO1xuXG4gICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcyk7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIChldikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiB1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyhzZWxmKSB7XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3JlYWRhYmxlU3RhdGU7XG4gIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc2VsZi5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMDtcblxuICBpZiAoc3RhdGUucmVzdW1lU2NoZWR1bGVkICYmICFzdGF0ZS5wYXVzZWQpIHtcbiAgICAvLyBmbG93aW5nIG5lZWRzIHRvIGJlIHNldCB0byB0cnVlIG5vdywgb3RoZXJ3aXNlXG4gICAgLy8gdGhlIHVwY29taW5nIHJlc3VtZSB3aWxsIG5vdCBmbG93LlxuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlOyAvLyBjcnVkZSB3YXkgdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIHJlc3VtZVxuICB9IGVsc2UgaWYgKHNlbGYubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIHNlbGYucmVzdW1lKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKTtcbiAgc2VsZi5yZWFkKDApO1xufSAvLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5cblxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lJyk7IC8vIHdlIGZsb3cgb25seSBpZiB0aGVyZSBpcyBubyBvbmUgbGlzdGVuaW5nXG4gICAgLy8gZm9yIHJlYWRhYmxlLCBidXQgd2Ugc3RpbGwgaGF2ZSB0byBjYWxsXG4gICAgLy8gcmVzdW1lKClcblxuICAgIHN0YXRlLmZsb3dpbmcgPSAhc3RhdGUucmVhZGFibGVMaXN0ZW5pbmc7XG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKTtcbiAgfVxuXG4gIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1ZygncmVzdW1lJywgc3RhdGUucmVhZGluZyk7XG5cbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gIH1cblxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG5cbiAgd2hpbGUgKHN0YXRlLmZsb3dpbmcgJiYgc3RyZWFtLnJlYWQoKSAhPT0gbnVsbCkge1xuICAgIDtcbiAgfVxufSAvLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5cblxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcblxuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIF90aGlzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIF90aGlzLnB1c2gobnVsbCk7XG4gIH0pO1xuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7IC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuXG4gICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgJiYgKGNodW5rID09PSBudWxsIHx8IGNodW5rID09PSB1bmRlZmluZWQpKSByZXR1cm47ZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgKCFjaHVuayB8fCAhY2h1bmsubGVuZ3RoKSkgcmV0dXJuO1xuXG4gICAgdmFyIHJldCA9IF90aGlzLnB1c2goY2h1bmspO1xuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pOyAvLyBwcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuXG4gIC8vIGltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gbWV0aG9kV3JhcChtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1ldGhvZFdyYXBSZXR1cm5GdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfShpKTtcbiAgICB9XG4gIH0gLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuXG5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBrUHJveHlFdmVudHMubGVuZ3RoOyBuKyspIHtcbiAgICBzdHJlYW0ub24oa1Byb3h5RXZlbnRzW25dLCB0aGlzLmVtaXQuYmluZCh0aGlzLCBrUHJveHlFdmVudHNbbl0pKTtcbiAgfSAvLyB3aGVuIHdlIHRyeSB0byBjb25zdW1lIHNvbWUgbW9yZSBieXRlcywgc2ltcGx5IHVucGF1c2UgdGhlXG4gIC8vIHVuZGVybHlpbmcgc3RyZWFtLlxuXG5cbiAgdGhpcy5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcblxuICAgIGlmIChwYXVzZWQpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyOCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcih0aGlzKTtcbiAgfTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVCdWZmZXInLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlICYmIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUZsb3dpbmcnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHN0YXRlKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IHN0YXRlO1xuICAgIH1cbiAgfVxufSk7IC8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVMZW5ndGgnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aDtcbiAgfVxufSk7IC8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cblxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZFxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgdmFyIHJldDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldCA9IHN0YXRlLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYgKCFuIHx8IG4gPj0gc3RhdGUubGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBsaXN0XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKTtlbHNlIGlmIChzdGF0ZS5idWZmZXIubGVuZ3RoID09PSAxKSByZXQgPSBzdGF0ZS5idWZmZXIuZmlyc3QoKTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25zdW1lKG4sIHN0YXRlLmRlY29kZXIpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZScsIHN0YXRlLmVuZEVtaXR0ZWQpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVuZFJlYWRhYmxlTlQsIHN0YXRlLCBzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlTlQoc3RhdGUsIHN0cmVhbSkge1xuICBkZWJ1ZygnZW5kUmVhZGFibGVOVCcsIHN0YXRlLmVuZEVtaXR0ZWQsIHN0YXRlLmxlbmd0aCk7IC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG5cbiAgICBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAgIC8vIGlmIHRoZSB3cml0YWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsXG4gICAgICB2YXIgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuXG4gICAgICBpZiAoIXdTdGF0ZSB8fCB3U3RhdGUuYXV0b0Rlc3Ryb3kgJiYgd1N0YXRlLmZpbmlzaGVkKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlYWRhYmxlLmZyb20gPSBmdW5jdGlvbiAoaXRlcmFibGUsIG9wdHMpIHtcbiAgICBpZiAoZnJvbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcm9tID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjY1KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpbmRleE9mKHhzLCB4KSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKHhzW2ldID09PSB4KSByZXR1cm4gaTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDQ0NzM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxudmFyIF9yZXF1aXJlJGNvZGVzID0gKF9fd2VicGFja19yZXF1aXJlX18oODEwNikvKiAuY29kZXMgKi8gLnEpLFxuICAgIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEID0gX3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gICAgRVJSX01VTFRJUExFX0NBTExCQUNLID0gX3JlcXVpcmUkY29kZXMuRVJSX01VTFRJUExFX0NBTExCQUNLLFxuICAgIEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLFxuICAgIEVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMDtcblxudmFyIER1cGxleCA9IF9fd2VicGFja19yZXF1aXJlX18oODY1Nik7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTcxNykoVHJhbnNmb3JtLCBEdXBsZXgpO1xuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShlciwgZGF0YSkge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKGNiID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpO1xuICB9XG5cbiAgdHMud3JpdGVjaHVuayA9IG51bGw7XG4gIHRzLndyaXRlY2IgPSBudWxsO1xuICBpZiAoZGF0YSAhPSBudWxsKSAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICB0aGlzLnB1c2goZGF0YSk7XG4gIGNiKGVyKTtcbiAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcnMucmVhZGluZyA9IGZhbHNlO1xuXG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSB7XG4gICAgYWZ0ZXJUcmFuc2Zvcm06IGFmdGVyVHJhbnNmb3JtLmJpbmQodGhpcyksXG4gICAgbmVlZFRyYW5zZm9ybTogZmFsc2UsXG4gICAgdHJhbnNmb3JtaW5nOiBmYWxzZSxcbiAgICB3cml0ZWNiOiBudWxsLFxuICAgIHdyaXRlY2h1bms6IG51bGwsXG4gICAgd3JpdGVlbmNvZGluZzogbnVsbFxuICB9OyAvLyBzdGFydCBvdXQgYXNraW5nIGZvciBhIHJlYWRhYmxlIGV2ZW50IG9uY2UgZGF0YSBpcyB0cmFuc2Zvcm1lZC5cblxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7IC8vIHdlIGhhdmUgaW1wbGVtZW50ZWQgdGhlIF9yZWFkIG1ldGhvZCwgYW5kIGRvbmUgdGhlIG90aGVyIHRoaW5nc1xuICAvLyB0aGF0IFJlYWRhYmxlIHdhbnRzIGJlZm9yZSB0aGUgZmlyc3QgX3JlYWQgY2FsbCwgc28gdW5zZXQgdGhlXG4gIC8vIHN5bmMgZ3VhcmQgZmxhZy5cblxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoO1xuICB9IC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cblxuXG4gIHRoaXMub24oJ3ByZWZpbmlzaCcsIHByZWZpbmlzaCk7XG59XG5cbmZ1bmN0aW9uIHByZWZpbmlzaCgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICBpZiAodHlwZW9mIHRoaXMuX2ZsdXNoID09PSAnZnVuY3Rpb24nICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgICAgZG9uZShfdGhpcywgZXIsIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGRvbmUodGhpcywgbnVsbCwgbnVsbCk7XG4gIH1cbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHJldHVybiBEdXBsZXgucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcpO1xufTsgLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB5b3UgZG8gc3R1ZmYhXG4vLyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyAnY2h1bmsnIGlzIGFuIGlucHV0IGNodW5rLlxuLy9cbi8vIENhbGwgYHB1c2gobmV3Q2h1bmspYCB0byBwYXNzIGFsb25nIHRyYW5zZm9ybWVkIG91dHB1dFxuLy8gdG8gdGhlIHJlYWRhYmxlIHNpZGUuICBZb3UgbWF5IGNhbGwgJ3B1c2gnIHplcm8gb3IgbW9yZSB0aW1lcy5cbi8vXG4vLyBDYWxsIGBjYihlcnIpYCB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgY2h1bmsuICBJZiB5b3UgcGFzc1xuLy8gYW4gZXJyb3IsIHRoZW4gdGhhdCdsbCBwdXQgdGhlIGh1cnQgb24gdGhlIHdob2xlIG9wZXJhdGlvbi4gIElmIHlvdVxuLy8gbmV2ZXIgY2FsbCBjYigpLCB0aGVuIHlvdSdsbCBuZXZlciBnZXQgYW5vdGhlciBjaHVuay5cblxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ190cmFuc2Zvcm0oKScpKTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLndyaXRlY2IgPSBjYjtcbiAgdHMud3JpdGVjaHVuayA9IGNodW5rO1xuICB0cy53cml0ZWVuY29kaW5nID0gZW5jb2Rpbmc7XG5cbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59OyAvLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmICF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB0cy50cmFuc2Zvcm1pbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICBEdXBsZXgucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcywgZXJyLCBmdW5jdGlvbiAoZXJyMikge1xuICAgIGNiKGVycjIpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIGlmIChkYXRhICE9IG51bGwpIC8vIHNpbmdsZSBlcXVhbHMgY2hlY2sgZm9yIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICAgIHN0cmVhbS5wdXNoKGRhdGEpOyAvLyBUT0RPKEJyaWRnZUFSKTogV3JpdGUgYSB0ZXN0IGZvciB0aGVzZSB0d28gZXJyb3IgY2FzZXNcbiAgLy8gaWYgdGhlcmUncyBub3RoaW5nIGluIHRoZSB3cml0ZSBidWZmZXIsIHRoZW4gdGhhdCBtZWFuc1xuICAvLyB0aGF0IG5vdGhpbmcgbW9yZSB3aWxsIGV2ZXIgYmUgcHJvdmlkZWRcblxuICBpZiAoc3RyZWFtLl93cml0YWJsZVN0YXRlLmxlbmd0aCkgdGhyb3cgbmV3IEVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCgpO1xuICBpZiAoc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpIHRocm93IG5ldyBFUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HKCk7XG4gIHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDMyMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIHByb2Nlc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxNTUpO1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcbi8qIDxyZXBsYWNlbWVudD4gKi9cblxuZnVuY3Rpb24gV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLmNodW5rID0gY2h1bms7XG4gIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgdGhpcy5jYWxsYmFjayA9IGNiO1xuICB0aGlzLm5leHQgPSBudWxsO1xufSAvLyBJdCBzZWVtcyBhIGxpbmtlZCBsaXN0IGJ1dCBpdCBpcyBub3Rcbi8vIHRoZXJlIHdpbGwgYmUgb25seSAyIG9mIHRoZXNlIGZvciBlYWNoIHN0cmVhbVxuXG5cbmZ1bmN0aW9uIENvcmtlZFJlcXVlc3Qoc3RhdGUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLmVudHJ5ID0gbnVsbDtcblxuICB0aGlzLmZpbmlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBvbkNvcmtlZEZpbmlzaChfdGhpcywgc3RhdGUpO1xuICB9O1xufVxuLyogPC9yZXBsYWNlbWVudD4gKi9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxuXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIGludGVybmFsVXRpbCA9IHtcbiAgZGVwcmVjYXRlOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5MjcpXG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBTdHJlYW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxOTQpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxudmFyIEJ1ZmZlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDg4MjMpLkJ1ZmZlcik7XG5cbnZhciBPdXJVaW50OEFycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLlVpbnQ4QXJyYXkgfHwgZnVuY3Rpb24gKCkge307XG5cbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cblxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbnZhciBkZXN0cm95SW1wbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTAyOSk7XG5cbnZhciBfcmVxdWlyZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpLFxuICAgIGdldEhpZ2hXYXRlck1hcmsgPSBfcmVxdWlyZS5nZXRIaWdoV2F0ZXJNYXJrO1xuXG52YXIgX3JlcXVpcmUkY29kZXMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg4MTA2KS8qIC5jb2RlcyAqLyAucSksXG4gICAgRVJSX0lOVkFMSURfQVJHX1RZUEUgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICAgIEVSUl9NVUxUSVBMRV9DQUxMQkFDSyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxcbiAgICBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9DQU5OT1RfUElQRSxcbiAgICBFUlJfU1RSRUFNX0RFU1RST1lFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fREVTVFJPWUVELFxuICAgIEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX05VTExfVkFMVUVTLFxuICAgIEVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsXG4gICAgRVJSX1VOS05PV05fRU5DT0RJTkcgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVU5LTk9XTl9FTkNPRElORztcblxudmFyIGVycm9yT3JEZXN0cm95ID0gZGVzdHJveUltcGwuZXJyb3JPckRlc3Ryb3k7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTcxNykoV3JpdGFibGUsIFN0cmVhbSk7XG5cbmZ1bmN0aW9uIG5vcCgpIHt9XG5cbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgX193ZWJwYWNrX3JlcXVpcmVfXyg4NjU2KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307IC8vIER1cGxleCBzdHJlYW1zIGFyZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYnV0IHNoYXJlXG4gIC8vIHRoZSBzYW1lIG9wdGlvbnMgb2JqZWN0LlxuICAvLyBIb3dldmVyLCBzb21lIGNhc2VzIHJlcXVpcmUgc2V0dGluZyBvcHRpb25zIHRvIGRpZmZlcmVudFxuICAvLyB2YWx1ZXMgZm9yIHRoZSByZWFkYWJsZSBhbmQgdGhlIHdyaXRhYmxlIHNpZGVzIG9mIHRoZSBkdXBsZXggc3RyZWFtLFxuICAvLyBlLmcuIG9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlIHZzLiBvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZSwgZXRjLlxuXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7IC8vIG9iamVjdCBzdHJlYW0gZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGlzIHN0cmVhbVxuICAvLyBjb250YWlucyBidWZmZXJzIG9yIG9iamVjdHMuXG5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGU7IC8vIHRoZSBwb2ludCBhdCB3aGljaCB3cml0ZSgpIHN0YXJ0cyByZXR1cm5pbmcgZmFsc2VcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyB0aGF0IHdlIGFsd2F5cyByZXR1cm4gZmFsc2UgaWZcbiAgLy8gdGhlIGVudGlyZSBidWZmZXIgaXMgbm90IGZsdXNoZWQgaW1tZWRpYXRlbHkgb24gd3JpdGUoKVxuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KTsgLy8gaWYgX2ZpbmFsIGhhcyBiZWVuIGNhbGxlZFxuXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZTsgLy8gZHJhaW4gZXZlbnQgZmxhZy5cblxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlOyAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7IC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcblxuICB0aGlzLmVuZGVkID0gZmFsc2U7IC8vIHdoZW4gJ2ZpbmlzaCcgaXMgZW1pdHRlZFxuXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTsgLy8gaGFzIGl0IGJlZW4gZGVzdHJveWVkXG5cbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsgLy8gc2hvdWxkIHdlIGRlY29kZSBzdHJpbmdzIGludG8gYnVmZmVycyBiZWZvcmUgcGFzc2luZyB0byBfd3JpdGU/XG4gIC8vIHRoaXMgaXMgaGVyZSBzbyB0aGF0IHNvbWUgbm9kZS1jb3JlIHN0cmVhbXMgY2FuIG9wdGltaXplIHN0cmluZ1xuICAvLyBoYW5kbGluZyBhdCBhIGxvd2VyIGxldmVsLlxuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTsgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cblxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JzsgLy8gbm90IGFuIGFjdHVhbCBidWZmZXIgd2Uga2VlcCB0cmFjayBvZiwgYnV0IGEgbWVhc3VyZW1lbnRcbiAgLy8gb2YgaG93IG11Y2ggd2UncmUgd2FpdGluZyB0byBnZXQgcHVzaGVkIHRvIHNvbWUgdW5kZXJseWluZ1xuICAvLyBzb2NrZXQgb3IgZmlsZS5cblxuICB0aGlzLmxlbmd0aCA9IDA7IC8vIGEgZmxhZyB0byBzZWUgd2hlbiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd3JpdGUuXG5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7IC8vIHdoZW4gdHJ1ZSBhbGwgd3JpdGVzIHdpbGwgYmUgYnVmZmVyZWQgdW50aWwgLnVuY29yaygpIGNhbGxcblxuICB0aGlzLmNvcmtlZCA9IDA7IC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuXG4gIHRoaXMuc3luYyA9IHRydWU7IC8vIGEgZmxhZyB0byBrbm93IGlmIHdlJ3JlIHByb2Nlc3NpbmcgcHJldmlvdXNseSBidWZmZXJlZCBpdGVtcywgd2hpY2hcbiAgLy8gbWF5IGNhbGwgdGhlIF93cml0ZSgpIGNhbGxiYWNrIGluIHRoZSBzYW1lIHRpY2ssIHNvIHRoYXQgd2UgZG9uJ3RcbiAgLy8gZW5kIHVwIGluIGFuIG92ZXJsYXBwZWQgb253cml0ZSBzaXR1YXRpb24uXG5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7IC8vIHRoZSBjYWxsYmFjayB0aGF0J3MgcGFzc2VkIHRvIF93cml0ZShjaHVuayxjYilcblxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9OyAvLyB0aGUgY2FsbGJhY2sgdGhhdCB0aGUgdXNlciBzdXBwbGllcyB0byB3cml0ZShjaHVuayxlbmNvZGluZyxjYilcblxuXG4gIHRoaXMud3JpdGVjYiA9IG51bGw7IC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cblxuICB0aGlzLndyaXRlbGVuID0gMDtcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsOyAvLyBudW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWRcblxuICB0aGlzLnBlbmRpbmdjYiA9IDA7IC8vIGVtaXQgcHJlZmluaXNoIGlmIHRoZSBvbmx5IHRoaW5nIHdlJ3JlIHdhaXRpbmcgZm9yIGlzIF93cml0ZSBjYnNcbiAgLy8gVGhpcyBpcyByZWxldmFudCBmb3Igc3luY2hyb25vdXMgVHJhbnNmb3JtIHN0cmVhbXNcblxuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7IC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluXG5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTsgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cblxuICB0aGlzLmVtaXRDbG9zZSA9IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZTsgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdmaW5pc2gnIChhbmQgcG90ZW50aWFsbHkgJ2VuZCcpXG5cbiAgdGhpcy5hdXRvRGVzdHJveSA9ICEhb3B0aW9ucy5hdXRvRGVzdHJveTsgLy8gY291bnQgYnVmZmVyZWQgcmVxdWVzdHNcblxuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDsgLy8gYWxsb2NhdGUgdGhlIGZpcnN0IENvcmtlZFJlcXVlc3QsIHRoZXJlIGlzIGFsd2F5c1xuICAvLyBvbmUgYWxsb2NhdGVkIGFuZCBmcmVlIHRvIHVzZSwgYW5kIHdlIG1haW50YWluIGF0IG1vc3QgdHdvXG5cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cblxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuYnVmZmVyZWRSZXF1ZXN0O1xuICB2YXIgb3V0ID0gW107XG5cbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbihmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RhdGUucHJvdG90eXBlLCAnYnVmZmVyJywge1xuICAgICAgZ2V0OiBpbnRlcm5hbFV0aWwuZGVwcmVjYXRlKGZ1bmN0aW9uIHdyaXRhYmxlU3RhdGVCdWZmZXJHZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlcigpO1xuICAgICAgfSwgJ193cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyICcgKyAnaW5zdGVhZC4nLCAnREVQMDAwMycpXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG59KSgpOyAvLyBUZXN0IF93cml0YWJsZVN0YXRlIGZvciBpbmhlcml0YW5jZSB0byBhY2NvdW50IGZvciBEdXBsZXggc3RyZWFtcyxcbi8vIHdob3NlIHByb3RvdHlwZSBjaGFpbiBvbmx5IHBvaW50cyB0byBSZWFkYWJsZS5cblxuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaGFzSW5zdGFuY2UgJiYgdHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdID09PSAnZnVuY3Rpb24nKSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShvYmplY3QpIHtcbiAgICAgIGlmIChyZWFsSGFzSW5zdGFuY2UuY2FsbCh0aGlzLCBvYmplY3QpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICh0aGlzICE9PSBXcml0YWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICByZWFsSGFzSW5zdGFuY2UgPSBmdW5jdGlvbiByZWFsSGFzSW5zdGFuY2Uob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHRoaXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IF9fd2VicGFja19yZXF1aXJlX18oODY1Nik7IC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuICAvLyBUcnlpbmcgdG8gdXNlIHRoZSBjdXN0b20gYGluc3RhbmNlb2ZgIGZvciBXcml0YWJsZSBoZXJlIHdpbGwgYWxzbyBicmVhayB0aGVcbiAgLy8gTm9kZS5qcyBMYXp5VHJhbnNmb3JtIGltcGxlbWVudGF0aW9uLCB3aGljaCBoYXMgYSBub24tdHJpdmlhbCBnZXR0ZXIgZm9yXG4gIC8vIGBfd3JpdGFibGVTdGF0ZWAgdGhhdCB3b3VsZCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgLy8gQ2hlY2tpbmcgZm9yIGEgU3RyZWFtLkR1cGxleCBpbnN0YW5jZSBpcyBmYXN0ZXIgaGVyZSBpbnN0ZWFkIG9mIGluc2lkZVxuICAvLyB0aGUgV3JpdGFibGVTdGF0ZSBjb25zdHJ1Y3RvciwgYXQgbGVhc3Qgd2l0aCBWOCA2LjVcblxuICB2YXIgaXNEdXBsZXggPSB0aGlzIGluc3RhbmNlb2YgRHVwbGV4O1xuICBpZiAoIWlzRHVwbGV4ICYmICFyZWFsSGFzSW5zdGFuY2UuY2FsbChXcml0YWJsZSwgdGhpcykpIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleCk7IC8vIGxlZ2FjeS5cblxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsO1xuICB9XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59IC8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cblxuXG5Xcml0YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgZXJyb3JPckRlc3Ryb3kodGhpcywgbmV3IEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUoKSk7XG59O1xuXG5mdW5jdGlvbiB3cml0ZUFmdGVyRW5kKHN0cmVhbSwgY2IpIHtcbiAgdmFyIGVyID0gbmV3IEVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EKCk7IC8vIFRPRE86IGRlZmVyIGVycm9yIGV2ZW50cyBjb25zaXN0ZW50bHkgZXZlcnl3aGVyZSwgbm90IGp1c3QgdGhlIGNiXG5cbiAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gIHByb2Nlc3MubmV4dFRpY2soY2IsIGVyKTtcbn0gLy8gQ2hlY2tzIHRoYXQgYSB1c2VyLXN1cHBsaWVkIGNodW5rIGlzIHZhbGlkLCBlc3BlY2lhbGx5IGZvciB0aGUgcGFydGljdWxhclxuLy8gbW9kZSB0aGUgc3RyZWFtIGlzIGluLiBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IGBudWxsYCBpcyBuZXZlciBhY2NlcHRlZFxuLy8gYW5kIHVuZGVmaW5lZC9ub24tc3RyaW5nIHZhbHVlcyBhcmUgb25seSBhbGxvd2VkIGluIG9iamVjdCBtb2RlLlxuXG5cbmZ1bmN0aW9uIHZhbGlkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGNiKSB7XG4gIHZhciBlcjtcblxuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBlciA9IG5ldyBFUlJfU1RSRUFNX05VTExfVkFMVUVTKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdjaHVuaycsIFsnc3RyaW5nJywgJ0J1ZmZlciddLCBjaHVuayk7XG4gIH1cblxuICBpZiAoZXIpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcblxuICB2YXIgaXNCdWYgPSAhc3RhdGUub2JqZWN0TW9kZSAmJiBfaXNVaW50OEFycmF5KGNodW5rKTtcblxuICBpZiAoaXNCdWYgJiYgIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGlzQnVmKSBlbmNvZGluZyA9ICdidWZmZXInO2Vsc2UgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuICBpZiAoc3RhdGUuZW5kaW5nKSB3cml0ZUFmdGVyRW5kKHRoaXMsIGNiKTtlbHNlIGlmIChpc0J1ZiB8fCB2YWxpZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgY2IpKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgcmV0ID0gd3JpdGVPckJ1ZmZlcih0aGlzLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG4gIHJldHVybiByZXQ7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrKztcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nID0gZnVuY3Rpb24gc2V0RGVmYXVsdEVuY29kaW5nKGVuY29kaW5nKSB7XG4gIC8vIG5vZGU6OlBhcnNlRW5jb2RpbmcoKSByZXF1aXJlcyBsb3dlciBjYXNlLlxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykgZW5jb2RpbmcgPSBlbmNvZGluZy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIShbJ2hleCcsICd1dGY4JywgJ3V0Zi04JywgJ2FzY2lpJywgJ2JpbmFyeScsICdiYXNlNjQnLCAndWNzMicsICd1Y3MtMicsICd1dGYxNmxlJywgJ3V0Zi0xNmxlJywgJ3JhdyddLmluZGV4T2YoKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKCkpID4gLTEpKSB0aHJvdyBuZXcgRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpO1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nO1xuICByZXR1cm4gdGhpcztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUJ1ZmZlcicsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cblxuICByZXR1cm4gY2h1bms7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pOyAvLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICghaXNCdWYpIHtcbiAgICB2YXIgbmV3Q2h1bmsgPSBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKTtcblxuICAgIGlmIChjaHVuayAhPT0gbmV3Q2h1bmspIHtcbiAgICAgIGlzQnVmID0gdHJ1ZTtcbiAgICAgIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gICAgICBjaHVuayA9IG5ld0NodW5rO1xuICAgIH1cbiAgfVxuXG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgc3RhdGUubGVuZ3RoICs9IGxlbjtcbiAgdmFyIHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcms7IC8vIHdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlO1xuXG4gIGlmIChzdGF0ZS53cml0aW5nIHx8IHN0YXRlLmNvcmtlZCkge1xuICAgIHZhciBsYXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0ge1xuICAgICAgY2h1bms6IGNodW5rLFxuICAgICAgZW5jb2Rpbmc6IGVuY29kaW5nLFxuICAgICAgaXNCdWY6IGlzQnVmLFxuICAgICAgY2FsbGJhY2s6IGNiLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG5cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCArPSAxO1xuICB9IGVsc2Uge1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHdyaXRldiwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHN0YXRlLndyaXRlbGVuID0gbGVuO1xuICBzdGF0ZS53cml0ZWNiID0gY2I7XG4gIHN0YXRlLndyaXRpbmcgPSB0cnVlO1xuICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLmRlc3Ryb3llZCkgc3RhdGUub253cml0ZShuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3dyaXRlJykpO2Vsc2UgaWYgKHdyaXRldikgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpO2Vsc2Ugc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpO1xuICBzdGF0ZS5zeW5jID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2I7XG5cbiAgaWYgKHN5bmMpIHtcbiAgICAvLyBkZWZlciB0aGUgY2FsbGJhY2sgaWYgd2UgYXJlIGJlaW5nIGNhbGxlZCBzeW5jaHJvbm91c2x5XG4gICAgLy8gdG8gYXZvaWQgcGlsaW5nIHVwIHRoaW5ncyBvbiB0aGUgc3RhY2tcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcik7IC8vIHRoaXMgY2FuIGVtaXQgZmluaXNoLCBhbmQgaXQgd2lsbCBhbHdheXMgaGFwcGVuXG4gICAgLy8gYWZ0ZXIgZXJyb3JcblxuICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoTWF5YmUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXIpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjYWxsZXIgZXhwZWN0IHRoaXMgdG8gaGFwcGVuIGJlZm9yZSBpZlxuICAgIC8vIGl0IGlzIGFzeW5jXG4gICAgY2IoZXIpO1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXIpOyAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYnV0IGZpbmlzaCBtdXN0XG4gICAgLy8gYWx3YXlzIGZvbGxvdyBlcnJvclxuXG4gICAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKSB7XG4gIHN0YXRlLndyaXRpbmcgPSBmYWxzZTtcbiAgc3RhdGUud3JpdGVjYiA9IG51bGw7XG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlbjtcbiAgc3RhdGUud3JpdGVsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgc3luYyA9IHN0YXRlLnN5bmM7XG4gIHZhciBjYiA9IHN0YXRlLndyaXRlY2I7XG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKTtcbiAgb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKTtcbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpIHx8IHN0cmVhbS5kZXN0cm95ZWQ7XG5cbiAgICBpZiAoIWZpbmlzaGVkICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSB7XG4gICAgICBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3luYykge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhhZnRlcldyaXRlLCBzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKSB7XG4gIGlmICghZmluaXNoZWQpIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKTtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIGNiKCk7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xufSAvLyBNdXN0IGZvcmNlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBuZXh0VGljaywgc28gdGhhdCB3ZSBkb24ndFxuLy8gZW1pdCAnZHJhaW4nIGJlZm9yZSB0aGUgd3JpdGUoKSBjb25zdW1lciBnZXRzIHRoZSAnZmFsc2UnIHJldHVyblxuLy8gdmFsdWUsIGFuZCBoYXMgYSBjaGFuY2UgdG8gYXR0YWNoIGEgJ2RyYWluJyBsaXN0ZW5lci5cblxuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59IC8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5cblxuZnVuY3Rpb24gY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSkge1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgdmFyIGVudHJ5ID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0O1xuXG4gIGlmIChzdHJlYW0uX3dyaXRldiAmJiBlbnRyeSAmJiBlbnRyeS5uZXh0KSB7XG4gICAgLy8gRmFzdCBjYXNlLCB3cml0ZSBldmVyeXRoaW5nIHVzaW5nIF93cml0ZXYoKVxuICAgIHZhciBsID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsKTtcbiAgICB2YXIgaG9sZGVyID0gc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlO1xuICAgIGhvbGRlci5lbnRyeSA9IGVudHJ5O1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIGFsbEJ1ZmZlcnMgPSB0cnVlO1xuXG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBpZiAoIWVudHJ5LmlzQnVmKSBhbGxCdWZmZXJzID0gZmFsc2U7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cblxuICAgIGJ1ZmZlci5hbGxCdWZmZXJzID0gYWxsQnVmZmVycztcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHRydWUsIHN0YXRlLmxlbmd0aCwgYnVmZmVyLCAnJywgaG9sZGVyLmZpbmlzaCk7IC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG5cbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcblxuICAgIGlmIChob2xkZXIubmV4dCkge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gaG9sZGVyLm5leHQ7XG4gICAgICBob2xkZXIubmV4dCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IG5ldyBDb3JrZWRSZXF1ZXN0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS07IC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG5cbiAgICAgIGlmIChzdGF0ZS53cml0aW5nKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbnRyeSA9PT0gbnVsbCkgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIH1cblxuICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBlbnRyeTtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfd3JpdGUoKScpKTtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbDtcblxuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gY2h1bms7XG4gICAgY2h1bmsgPSBudWxsO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7IC8vIC5lbmQoKSBmdWxseSB1bmNvcmtzXG5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDE7XG4gICAgdGhpcy51bmNvcmsoKTtcbiAgfSAvLyBpZ25vcmUgdW5uZWNlc3NhcnkgZW5kKCkgY2FsbHMuXG5cblxuICBpZiAoIXN0YXRlLmVuZGluZykgZW5kV3JpdGFibGUodGhpcywgc3RhdGUsIGNiKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVMZW5ndGgnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aDtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmVuZGluZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID09PSBudWxsICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUud3JpdGluZztcbn1cblxuZnVuY3Rpb24gY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RyZWFtLl9maW5hbChmdW5jdGlvbiAoZXJyKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVycik7XG4gICAgfVxuXG4gICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nICYmICFzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgICAgc3RhdGUuZmluYWxDYWxsZWQgPSB0cnVlO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsRmluYWwsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcblxuICBpZiAobmVlZCkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcblxuICAgIGlmIChzdGF0ZS5wZW5kaW5nY2IgPT09IDApIHtcbiAgICAgIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdmaW5pc2gnKTtcblxuICAgICAgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAgICAgLy8gaWYgdGhlIHJlYWRhYmxlIHNpZGUgaXMgcmVhZHkgZm9yIGF1dG9EZXN0cm95IGFzIHdlbGxcbiAgICAgICAgdmFyIHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcblxuICAgICAgICBpZiAoIXJTdGF0ZSB8fCByU3RhdGUuYXV0b0Rlc3Ryb3kgJiYgclN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5lZWQ7XG59XG5cbmZ1bmN0aW9uIGVuZFdyaXRhYmxlKHN0cmVhbSwgc3RhdGUsIGNiKSB7XG4gIHN0YXRlLmVuZGluZyA9IHRydWU7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuXG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZCkgcHJvY2Vzcy5uZXh0VGljayhjYik7ZWxzZSBzdHJlYW0ub25jZSgnZmluaXNoJywgY2IpO1xuICB9XG5cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb25Db3JrZWRGaW5pc2goY29ya1JlcSwgc3RhdGUsIGVycikge1xuICB2YXIgZW50cnkgPSBjb3JrUmVxLmVudHJ5O1xuICBjb3JrUmVxLmVudHJ5ID0gbnVsbDtcblxuICB3aGlsZSAoZW50cnkpIHtcbiAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBjYihlcnIpO1xuICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgfSAvLyByZXVzZSB0aGUgZnJlZSBjb3JrUmVxLlxuXG5cbiAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQgPSBjb3JrUmVxO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcblxuXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5Xcml0YWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5Xcml0YWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcblxuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4Mjg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBwcm92aWRlZCBkZXBlbmRlbmN5ICovIHZhciBwcm9jZXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MTU1KTtcblxuXG52YXIgX09iamVjdCRzZXRQcm90b3R5cGVPO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgZmluaXNoZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwODYpO1xuXG52YXIga0xhc3RSZXNvbHZlID0gU3ltYm9sKCdsYXN0UmVzb2x2ZScpO1xudmFyIGtMYXN0UmVqZWN0ID0gU3ltYm9sKCdsYXN0UmVqZWN0Jyk7XG52YXIga0Vycm9yID0gU3ltYm9sKCdlcnJvcicpO1xudmFyIGtFbmRlZCA9IFN5bWJvbCgnZW5kZWQnKTtcbnZhciBrTGFzdFByb21pc2UgPSBTeW1ib2woJ2xhc3RQcm9taXNlJyk7XG52YXIga0hhbmRsZVByb21pc2UgPSBTeW1ib2woJ2hhbmRsZVByb21pc2UnKTtcbnZhciBrU3RyZWFtID0gU3ltYm9sKCdzdHJlYW0nKTtcblxuZnVuY3Rpb24gY3JlYXRlSXRlclJlc3VsdCh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBkb25lOiBkb25lXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlYWRBbmRSZXNvbHZlKGl0ZXIpIHtcbiAgdmFyIHJlc29sdmUgPSBpdGVyW2tMYXN0UmVzb2x2ZV07XG5cbiAgaWYgKHJlc29sdmUgIT09IG51bGwpIHtcbiAgICB2YXIgZGF0YSA9IGl0ZXJba1N0cmVhbV0ucmVhZCgpOyAvLyB3ZSBkZWZlciBpZiBkYXRhIGlzIG51bGxcbiAgICAvLyB3ZSBjYW4gYmUgZXhwZWN0aW5nIGVpdGhlciAnZW5kJyBvclxuICAgIC8vICdlcnJvcidcblxuICAgIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgICBpdGVyW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgaXRlcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgIGl0ZXJba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvblJlYWRhYmxlKGl0ZXIpIHtcbiAgLy8gd2Ugd2FpdCBmb3IgdGhlIG5leHQgdGljaywgYmVjYXVzZSBpdCBtaWdodFxuICAvLyBlbWl0IGFuIGVycm9yIHdpdGggcHJvY2Vzcy5uZXh0VGlja1xuICBwcm9jZXNzLm5leHRUaWNrKHJlYWRBbmRSZXNvbHZlLCBpdGVyKTtcbn1cblxuZnVuY3Rpb24gd3JhcEZvck5leHQobGFzdFByb21pc2UsIGl0ZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsYXN0UHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpdGVyW2tFbmRlZF0pIHtcbiAgICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGl0ZXJba0hhbmRsZVByb21pc2VdKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSwgcmVqZWN0KTtcbiAgfTtcbn1cblxudmFyIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24gKCkge30pO1xudmFyIFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZigoX09iamVjdCRzZXRQcm90b3R5cGVPID0ge1xuICBnZXQgc3RyZWFtKCkge1xuICAgIHJldHVybiB0aGlzW2tTdHJlYW1dO1xuICB9LFxuXG4gIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8vIGlmIHdlIGhhdmUgZGV0ZWN0ZWQgYW4gZXJyb3IgaW4gdGhlIG1lYW53aGlsZVxuICAgIC8vIHJlamVjdCBzdHJhaWdodCBhd2F5XG4gICAgdmFyIGVycm9yID0gdGhpc1trRXJyb3JdO1xuXG4gICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGlmICh0aGlzW2tFbmRlZF0pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc1trU3RyZWFtXS5kZXN0cm95ZWQpIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gZGVmZXIgdmlhIG5leHRUaWNrIGJlY2F1c2UgaWYgLmRlc3Ryb3koZXJyKSBpc1xuICAgICAgLy8gY2FsbGVkLCB0aGUgZXJyb3Igd2lsbCBiZSBlbWl0dGVkIHZpYSBuZXh0VGljaywgYW5kXG4gICAgICAvLyB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgdGhlcmUgaXMgbm8gZXJyb3IgbGluZ2VyaW5nIGFyb3VuZFxuICAgICAgLy8gd2FpdGluZyB0byBiZSBlbWl0dGVkLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzW2tFcnJvcl0pIHtcbiAgICAgICAgICAgIHJlamVjdChfdGhpc1trRXJyb3JdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IC8vIGlmIHdlIGhhdmUgbXVsdGlwbGUgbmV4dCgpIGNhbGxzXG4gICAgLy8gd2Ugd2lsbCB3YWl0IGZvciB0aGUgcHJldmlvdXMgUHJvbWlzZSB0byBmaW5pc2hcbiAgICAvLyB0aGlzIGxvZ2ljIGlzIG9wdGltaXplZCB0byBzdXBwb3J0IGZvciBhd2FpdCBsb29wcyxcbiAgICAvLyB3aGVyZSBuZXh0KCkgaXMgb25seSBjYWxsZWQgb25jZSBhdCBhIHRpbWVcblxuXG4gICAgdmFyIGxhc3RQcm9taXNlID0gdGhpc1trTGFzdFByb21pc2VdO1xuICAgIHZhciBwcm9taXNlO1xuXG4gICAgaWYgKGxhc3RQcm9taXNlKSB7XG4gICAgICBwcm9taXNlID0gbmV3IFByb21pc2Uod3JhcEZvck5leHQobGFzdFByb21pc2UsIHRoaXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFzdCBwYXRoIG5lZWRlZCB0byBzdXBwb3J0IG11bHRpcGxlIHRoaXMucHVzaCgpXG4gICAgICAvLyB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIG5leHQoKSBxdWV1ZVxuICAgICAgdmFyIGRhdGEgPSB0aGlzW2tTdHJlYW1dLnJlYWQoKTtcblxuICAgICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGRhdGEsIGZhbHNlKSk7XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UgPSBuZXcgUHJvbWlzZSh0aGlzW2tIYW5kbGVQcm9taXNlXSk7XG4gICAgfVxuXG4gICAgdGhpc1trTGFzdFByb21pc2VdID0gcHJvbWlzZTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3Qkc2V0UHJvdG90eXBlTywgU3ltYm9sLmFzeW5jSXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXM7XG59KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3Qkc2V0UHJvdG90eXBlTywgXCJyZXR1cm5cIiwgZnVuY3Rpb24gX3JldHVybigpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgLy8gZGVzdHJveShlcnIsIGNiKSBpcyBhIHByaXZhdGUgQVBJXG4gIC8vIHdlIGNhbiBndWFyYW50ZWUgd2UgaGF2ZSB0aGF0IGhlcmUsIGJlY2F1c2Ugd2UgY29udHJvbCB0aGVcbiAgLy8gUmVhZGFibGUgY2xhc3MgdGhpcyBpcyBhdHRhY2hlZCB0b1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIF90aGlzMltrU3RyZWFtXS5kZXN0cm95KG51bGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgIH0pO1xuICB9KTtcbn0pLCBfT2JqZWN0JHNldFByb3RvdHlwZU8pLCBBc3luY0l0ZXJhdG9yUHJvdG90eXBlKTtcblxudmFyIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9IGZ1bmN0aW9uIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcihzdHJlYW0pIHtcbiAgdmFyIF9PYmplY3QkY3JlYXRlO1xuXG4gIHZhciBpdGVyYXRvciA9IE9iamVjdC5jcmVhdGUoUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLCAoX09iamVjdCRjcmVhdGUgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrU3RyZWFtLCB7XG4gICAgdmFsdWU6IHN0cmVhbSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrTGFzdFJlc29sdmUsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrTGFzdFJlamVjdCwge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtFcnJvciwge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsIGtFbmRlZCwge1xuICAgIHZhbHVlOiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrSGFuZGxlUHJvbWlzZSwge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBkYXRhID0gaXRlcmF0b3Jba1N0cmVhbV0ucmVhZCgpO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IHJlc29sdmU7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IHJlamVjdDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pLCBfT2JqZWN0JGNyZWF0ZSkpO1xuICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgZmluaXNoZWQoc3RyZWFtLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVyciAmJiBlcnIuY29kZSAhPT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJykge1xuICAgICAgdmFyIHJlamVjdCA9IGl0ZXJhdG9yW2tMYXN0UmVqZWN0XTsgLy8gcmVqZWN0IGlmIHdlIGFyZSB3YWl0aW5nIGZvciBkYXRhIGluIHRoZSBQcm9taXNlXG4gICAgICAvLyByZXR1cm5lZCBieSBuZXh0KCkgYW5kIHN0b3JlIHRoZSBlcnJvclxuXG4gICAgICBpZiAocmVqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG5cbiAgICAgIGl0ZXJhdG9yW2tFcnJvcl0gPSBlcnI7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJlc29sdmUgPSBpdGVyYXRvcltrTGFzdFJlc29sdmVdO1xuXG4gICAgaWYgKHJlc29sdmUgIT09IG51bGwpIHtcbiAgICAgIGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICBpdGVyYXRvcltrTGFzdFJlamVjdF0gPSBudWxsO1xuICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGl0ZXJhdG9yW2tFbmRlZF0gPSB0cnVlO1xuICB9KTtcbiAgc3RyZWFtLm9uKCdyZWFkYWJsZScsIG9uUmVhZGFibGUuYmluZChudWxsLCBpdGVyYXRvcikpO1xuICByZXR1cm4gaXRlcmF0b3I7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcjtcblxuLyoqKi8gfSksXG5cbi8qKiovIDEwMjk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBwcm92aWRlZCBkZXBlbmRlbmN5ICovIHZhciBwcm9jZXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MTU1KTtcbiAvLyB1bmRvY3VtZW50ZWQgY2IoKSBBUEksIG5lZWRlZCBmb3IgY29yZSwgbm90IGZvciBwdWJsaWMgQVBJXG5cbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciByZWFkYWJsZURlc3Ryb3llZCA9IHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIHZhciB3cml0YWJsZURlc3Ryb3llZCA9IHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG5cbiAgaWYgKHJlYWRhYmxlRGVzdHJveWVkIHx8IHdyaXRhYmxlRGVzdHJveWVkKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSAvLyB3ZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfSAvLyBpZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG5cblxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHRoaXMuX2Rlc3Ryb3koZXJyIHx8IG51bGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoIWNiICYmIGVycikge1xuICAgICAgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckFuZENsb3NlTlQsIF90aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIF90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQW5kQ2xvc2VOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYikge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgX3RoaXMpO1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgX3RoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGVtaXRFcnJvckFuZENsb3NlTlQoc2VsZiwgZXJyKSB7XG4gIGVtaXRFcnJvck5UKHNlbGYsIGVycik7XG4gIGVtaXRDbG9zZU5UKHNlbGYpO1xufVxuXG5mdW5jdGlvbiBlbWl0Q2xvc2VOVChzZWxmKSB7XG4gIGlmIChzZWxmLl93cml0YWJsZVN0YXRlICYmICFzZWxmLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZSkgcmV0dXJuO1xuICBpZiAoc2VsZi5fcmVhZGFibGVTdGF0ZSAmJiAhc2VsZi5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2UpIHJldHVybjtcbiAgc2VsZi5lbWl0KCdjbG9zZScpO1xufVxuXG5mdW5jdGlvbiB1bmRlc3Ryb3koKSB7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLCBlcnIpIHtcbiAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG59XG5cbmZ1bmN0aW9uIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKSB7XG4gIC8vIFdlIGhhdmUgdGVzdHMgdGhhdCByZWx5IG9uIGVycm9ycyBiZWluZyBlbWl0dGVkXG4gIC8vIGluIHRoZSBzYW1lIHRpY2ssIHNvIGNoYW5naW5nIHRoaXMgaXMgc2VtdmVyIG1ham9yLlxuICAvLyBGb3Igbm93IHdoZW4geW91IG9wdC1pbiB0byBhdXRvRGVzdHJveSB3ZSBhbGxvd1xuICAvLyB0aGUgZXJyb3IgdG8gYmUgZW1pdHRlZCBuZXh0VGljay4gSW4gYSBmdXR1cmVcbiAgLy8gc2VtdmVyIG1ham9yIHVwZGF0ZSB3ZSBzaG91bGQgY2hhbmdlIHRoZSBkZWZhdWx0IHRvIHRoaXMuXG4gIHZhciByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIGlmIChyU3RhdGUgJiYgclN0YXRlLmF1dG9EZXN0cm95IHx8IHdTdGF0ZSAmJiB3U3RhdGUuYXV0b0Rlc3Ryb3kpIHN0cmVhbS5kZXN0cm95KGVycik7ZWxzZSBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVzdHJveTogZGVzdHJveSxcbiAgdW5kZXN0cm95OiB1bmRlc3Ryb3ksXG4gIGVycm9yT3JEZXN0cm95OiBlcnJvck9yRGVzdHJveVxufTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDEwODY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL2VuZC1vZi1zdHJlYW0gd2l0aFxuLy8gcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3IsIE1hdGhpYXMgQnV1cyAoQG1hZmludG9zaCkuXG5cblxudmFyIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFID0gKF9fd2VicGFja19yZXF1aXJlX18oODEwNikvKiAuY29kZXMuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UgKi8gLnEuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UpO1xuXG5mdW5jdGlvbiBvbmNlKGNhbGxiYWNrKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSByZXR1cm47XG4gICAgY2FsbGVkID0gdHJ1ZTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIHN0cmVhbS5zZXRIZWFkZXIgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gZW9zKHN0cmVhbSwgb3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW9zKHN0cmVhbSwgbnVsbCwgb3B0cyk7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gIHZhciByZWFkYWJsZSA9IG9wdHMucmVhZGFibGUgfHwgb3B0cy5yZWFkYWJsZSAhPT0gZmFsc2UgJiYgc3RyZWFtLnJlYWRhYmxlO1xuICB2YXIgd3JpdGFibGUgPSBvcHRzLndyaXRhYmxlIHx8IG9wdHMud3JpdGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS53cml0YWJsZTtcblxuICB2YXIgb25sZWdhY3lmaW5pc2ggPSBmdW5jdGlvbiBvbmxlZ2FjeWZpbmlzaCgpIHtcbiAgICBpZiAoIXN0cmVhbS53cml0YWJsZSkgb25maW5pc2goKTtcbiAgfTtcblxuICB2YXIgd3JpdGFibGVFbmRlZCA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ7XG5cbiAgdmFyIG9uZmluaXNoID0gZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgd3JpdGFibGUgPSBmYWxzZTtcbiAgICB3cml0YWJsZUVuZGVkID0gdHJ1ZTtcbiAgICBpZiAoIXJlYWRhYmxlKSBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG5cbiAgdmFyIHJlYWRhYmxlRW5kZWQgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ7XG5cbiAgdmFyIG9uZW5kID0gZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgcmVhZGFibGUgPSBmYWxzZTtcbiAgICByZWFkYWJsZUVuZGVkID0gdHJ1ZTtcbiAgICBpZiAoIXdyaXRhYmxlKSBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG5cbiAgdmFyIG9uZXJyb3IgPSBmdW5jdGlvbiBvbmVycm9yKGVycikge1xuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICB9O1xuXG4gIHZhciBvbmNsb3NlID0gZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICB2YXIgZXJyO1xuXG4gICAgaWYgKHJlYWRhYmxlICYmICFyZWFkYWJsZUVuZGVkKSB7XG4gICAgICBpZiAoIXN0cmVhbS5fcmVhZGFibGVTdGF0ZSB8fCAhc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSBlcnIgPSBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKTtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKTtcbiAgICB9XG5cbiAgICBpZiAod3JpdGFibGUgJiYgIXdyaXRhYmxlRW5kZWQpIHtcbiAgICAgIGlmICghc3RyZWFtLl93cml0YWJsZVN0YXRlIHx8ICFzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZW5kZWQpIGVyciA9IG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgb25yZXF1ZXN0ID0gZnVuY3Rpb24gb25yZXF1ZXN0KCkge1xuICAgIHN0cmVhbS5yZXEub24oJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgfTtcblxuICBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0ub24oJ2NvbXBsZXRlJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5vbignYWJvcnQnLCBvbmNsb3NlKTtcbiAgICBpZiAoc3RyZWFtLnJlcSkgb25yZXF1ZXN0KCk7ZWxzZSBzdHJlYW0ub24oJ3JlcXVlc3QnLCBvbnJlcXVlc3QpO1xuICB9IGVsc2UgaWYgKHdyaXRhYmxlICYmICFzdHJlYW0uX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAvLyBsZWdhY3kgc3RyZWFtc1xuICAgIHN0cmVhbS5vbignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5vbignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gIH1cblxuICBzdHJlYW0ub24oJ2VuZCcsIG9uZW5kKTtcbiAgc3RyZWFtLm9uKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gIGlmIChvcHRzLmVycm9yICE9PSBmYWxzZSkgc3RyZWFtLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBzdHJlYW0ub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjb21wbGV0ZScsIG9uZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgb25jbG9zZSk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KTtcbiAgICBpZiAoc3RyZWFtLnJlcSkgc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlb3M7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjY1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdSZWFkYWJsZS5mcm9tIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXInKVxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjQ3Mjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvcHVtcCB3aXRoXG4vLyBwZXJtaXNzaW9uIGZyb20gdGhlIGF1dGhvciwgTWF0aGlhcyBCdXVzIChAbWFmaW50b3NoKS5cblxuXG52YXIgZW9zO1xuXG5mdW5jdGlvbiBvbmNlKGNhbGxiYWNrKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSByZXR1cm47XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbnZhciBfcmVxdWlyZSRjb2RlcyA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDgxMDYpLyogLmNvZGVzICovIC5xKSxcbiAgICBFUlJfTUlTU0lOR19BUkdTID0gX3JlcXVpcmUkY29kZXMuRVJSX01JU1NJTkdfQVJHUyxcbiAgICBFUlJfU1RSRUFNX0RFU1RST1lFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fREVTVFJPWUVEO1xuXG5mdW5jdGlvbiBub29wKGVycikge1xuICAvLyBSZXRocm93IHRoZSBlcnJvciBpZiBpdCBleGlzdHMgdG8gYXZvaWQgc3dhbGxvd2luZyBpdFxuICBpZiAoZXJyKSB0aHJvdyBlcnI7XG59XG5cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIHN0cmVhbS5zZXRIZWFkZXIgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gZGVzdHJveWVyKHN0cmVhbSwgcmVhZGluZywgd3JpdGluZywgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgdmFyIGNsb3NlZCA9IGZhbHNlO1xuICBzdHJlYW0ub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gIH0pO1xuICBpZiAoZW9zID09PSB1bmRlZmluZWQpIGVvcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA4Nik7XG4gIGVvcyhzdHJlYW0sIHtcbiAgICByZWFkYWJsZTogcmVhZGluZyxcbiAgICB3cml0YWJsZTogd3JpdGluZ1xuICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjYWxsYmFjaygpO1xuICB9KTtcbiAgdmFyIGRlc3Ryb3llZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICBpZiAoZGVzdHJveWVkKSByZXR1cm47XG4gICAgZGVzdHJveWVkID0gdHJ1ZTsgLy8gcmVxdWVzdC5kZXN0cm95IGp1c3QgZG8gLmVuZCAtIC5hYm9ydCBpcyB3aGF0IHdlIHdhbnRcblxuICAgIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkgcmV0dXJuIHN0cmVhbS5hYm9ydCgpO1xuICAgIGlmICh0eXBlb2Ygc3RyZWFtLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHJldHVybiBzdHJlYW0uZGVzdHJveSgpO1xuICAgIGNhbGxiYWNrKGVyciB8fCBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3BpcGUnKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNhbGwoZm4pIHtcbiAgZm4oKTtcbn1cblxuZnVuY3Rpb24gcGlwZShmcm9tLCB0bykge1xuICByZXR1cm4gZnJvbS5waXBlKHRvKTtcbn1cblxuZnVuY3Rpb24gcG9wQ2FsbGJhY2soc3RyZWFtcykge1xuICBpZiAoIXN0cmVhbXMubGVuZ3RoKSByZXR1cm4gbm9vcDtcbiAgaWYgKHR5cGVvZiBzdHJlYW1zW3N0cmVhbXMubGVuZ3RoIC0gMV0gIT09ICdmdW5jdGlvbicpIHJldHVybiBub29wO1xuICByZXR1cm4gc3RyZWFtcy5wb3AoKTtcbn1cblxuZnVuY3Rpb24gcGlwZWxpbmUoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzdHJlYW1zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHN0cmVhbXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgY2FsbGJhY2sgPSBwb3BDYWxsYmFjayhzdHJlYW1zKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RyZWFtc1swXSkpIHN0cmVhbXMgPSBzdHJlYW1zWzBdO1xuXG4gIGlmIChzdHJlYW1zLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygnc3RyZWFtcycpO1xuICB9XG5cbiAgdmFyIGVycm9yO1xuICB2YXIgZGVzdHJveXMgPSBzdHJlYW1zLm1hcChmdW5jdGlvbiAoc3RyZWFtLCBpKSB7XG4gICAgdmFyIHJlYWRpbmcgPSBpIDwgc3RyZWFtcy5sZW5ndGggLSAxO1xuICAgIHZhciB3cml0aW5nID0gaSA+IDA7XG4gICAgcmV0dXJuIGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuICAgICAgaWYgKGVycikgZGVzdHJveXMuZm9yRWFjaChjYWxsKTtcbiAgICAgIGlmIChyZWFkaW5nKSByZXR1cm47XG4gICAgICBkZXN0cm95cy5mb3JFYWNoKGNhbGwpO1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHN0cmVhbXMucmVkdWNlKHBpcGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIEVSUl9JTlZBTElEX09QVF9WQUxVRSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDgxMDYpLyogLmNvZGVzLkVSUl9JTlZBTElEX09QVF9WQUxVRSAqLyAucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUUpO1xuXG5mdW5jdGlvbiBoaWdoV2F0ZXJNYXJrRnJvbShvcHRpb25zLCBpc0R1cGxleCwgZHVwbGV4S2V5KSB7XG4gIHJldHVybiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgIT0gbnVsbCA/IG9wdGlvbnMuaGlnaFdhdGVyTWFyayA6IGlzRHVwbGV4ID8gb3B0aW9uc1tkdXBsZXhLZXldIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0SGlnaFdhdGVyTWFyayhzdGF0ZSwgb3B0aW9ucywgZHVwbGV4S2V5LCBpc0R1cGxleCkge1xuICB2YXIgaHdtID0gaGlnaFdhdGVyTWFya0Zyb20ob3B0aW9ucywgaXNEdXBsZXgsIGR1cGxleEtleSk7XG5cbiAgaWYgKGh3bSAhPSBudWxsKSB7XG4gICAgaWYgKCEoaXNGaW5pdGUoaHdtKSAmJiBNYXRoLmZsb29yKGh3bSkgPT09IGh3bSkgfHwgaHdtIDwgMCkge1xuICAgICAgdmFyIG5hbWUgPSBpc0R1cGxleCA/IGR1cGxleEtleSA6ICdoaWdoV2F0ZXJNYXJrJztcbiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9PUFRfVkFMVUUobmFtZSwgaHdtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihod20pO1xuICB9IC8vIERlZmF1bHQgdmFsdWVcblxuXG4gIHJldHVybiBzdGF0ZS5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRIaWdoV2F0ZXJNYXJrOiBnZXRIaWdoV2F0ZXJNYXJrXG59O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzE5NDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNzE4NykuRXZlbnRFbWl0dGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NDg3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXzsoZnVuY3Rpb24oYSxiKXtpZih0cnVlKSEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18gPSAoYiksXG5cdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gPSAodHlwZW9mIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyA9PT0gJ2Z1bmN0aW9uJyA/XG5cdFx0KF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXy5hcHBseShleHBvcnRzLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fKSkgOiBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18pLFxuXHRcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtlbHNlIHt9fSkodGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSxiKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgYj9iPXthdXRvQm9tOiExfTpcIm9iamVjdFwiIT10eXBlb2YgYiYmKGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IEV4cGVjdGVkIHRoaXJkIGFyZ3VtZW50IHRvIGJlIGEgb2JqZWN0XCIpLGI9e2F1dG9Cb206IWJ9KSxiLmF1dG9Cb20mJi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1wiXFx1RkVGRlwiLGFdLHt0eXBlOmEudHlwZX0pOmF9ZnVuY3Rpb24gYyhhLGIsYyl7dmFyIGQ9bmV3IFhNTEh0dHBSZXF1ZXN0O2Qub3BlbihcIkdFVFwiLGEpLGQucmVzcG9uc2VUeXBlPVwiYmxvYlwiLGQub25sb2FkPWZ1bmN0aW9uKCl7ZyhkLnJlc3BvbnNlLGIsYyl9LGQub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJjb3VsZCBub3QgZG93bmxvYWQgZmlsZVwiKX0sZC5zZW5kKCl9ZnVuY3Rpb24gZChhKXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiSEVBRFwiLGEsITEpO3RyeXtiLnNlbmQoKX1jYXRjaChhKXt9cmV0dXJuIDIwMDw9Yi5zdGF0dXMmJjI5OT49Yi5zdGF0dXN9ZnVuY3Rpb24gZShhKXt0cnl7YS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIikpfWNhdGNoKGMpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIik7Yi5pbml0TW91c2VFdmVudChcImNsaWNrXCIsITAsITAsd2luZG93LDAsMCwwLDgwLDIwLCExLCExLCExLCExLDAsbnVsbCksYS5kaXNwYXRjaEV2ZW50KGIpfX12YXIgZj1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZi5zZWxmPT09c2VsZj9zZWxmOlwib2JqZWN0XCI9PXR5cGVvZiBfX3dlYnBhY2tfcmVxdWlyZV9fLmcmJl9fd2VicGFja19yZXF1aXJlX18uZy5nbG9iYWw9PT1fX3dlYnBhY2tfcmVxdWlyZV9fLmc/X193ZWJwYWNrX3JlcXVpcmVfXy5nOnZvaWQgMCxhPWYubmF2aWdhdG9yJiYvTWFjaW50b3NoLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGc9Zi5zYXZlQXN8fChcIm9iamVjdFwiIT10eXBlb2Ygd2luZG93fHx3aW5kb3chPT1mP2Z1bmN0aW9uKCl7fToodHlwZW9mIEhUTUxBbmNob3JFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIFwiZG93bmxvYWRcIiBpbiBIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUpJiYhYT9mdW5jdGlvbihiLGcsaCl7dmFyIGk9Zi5VUkx8fGYud2Via2l0VVJMLGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7Zz1nfHxiLm5hbWV8fFwiZG93bmxvYWRcIixqLmRvd25sb2FkPWcsai5yZWw9XCJub29wZW5lclwiLFwic3RyaW5nXCI9PXR5cGVvZiBiPyhqLmhyZWY9YixqLm9yaWdpbj09PWxvY2F0aW9uLm9yaWdpbj9lKGopOmQoai5ocmVmKT9jKGIsZyxoKTplKGosai50YXJnZXQ9XCJfYmxhbmtcIikpOihqLmhyZWY9aS5jcmVhdGVPYmplY3RVUkwoYiksc2V0VGltZW91dChmdW5jdGlvbigpe2kucmV2b2tlT2JqZWN0VVJMKGouaHJlZil9LDRFNCksc2V0VGltZW91dChmdW5jdGlvbigpe2Uoail9LDApKX06XCJtc1NhdmVPck9wZW5CbG9iXCJpbiBuYXZpZ2F0b3I/ZnVuY3Rpb24oZixnLGgpe2lmKGc9Z3x8Zi5uYW1lfHxcImRvd25sb2FkXCIsXCJzdHJpbmdcIiE9dHlwZW9mIGYpbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYihmLGgpLGcpO2Vsc2UgaWYoZChmKSljKGYsZyxoKTtlbHNle3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2kuaHJlZj1mLGkudGFyZ2V0PVwiX2JsYW5rXCIsc2V0VGltZW91dChmdW5jdGlvbigpe2UoaSl9KX19OmZ1bmN0aW9uKGIsZCxlLGcpe2lmKGc9Z3x8b3BlbihcIlwiLFwiX2JsYW5rXCIpLGcmJihnLmRvY3VtZW50LnRpdGxlPWcuZG9jdW1lbnQuYm9keS5pbm5lclRleHQ9XCJkb3dubG9hZGluZy4uLlwiKSxcInN0cmluZ1wiPT10eXBlb2YgYilyZXR1cm4gYyhiLGQsZSk7dmFyIGg9XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIj09PWIudHlwZSxpPS9jb25zdHJ1Y3Rvci9pLnRlc3QoZi5IVE1MRWxlbWVudCl8fGYuc2FmYXJpLGo9L0NyaU9TXFwvW1xcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2lmKChqfHxoJiZpfHxhKSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZpbGVSZWFkZXIpe3ZhciBrPW5ldyBGaWxlUmVhZGVyO2sub25sb2FkZW5kPWZ1bmN0aW9uKCl7dmFyIGE9ay5yZXN1bHQ7YT1qP2E6YS5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLFwiZGF0YTphdHRhY2htZW50L2ZpbGU7XCIpLGc/Zy5sb2NhdGlvbi5ocmVmPWE6bG9jYXRpb249YSxnPW51bGx9LGsucmVhZEFzRGF0YVVSTChiKX1lbHNle3ZhciBsPWYuVVJMfHxmLndlYmtpdFVSTCxtPWwuY3JlYXRlT2JqZWN0VVJMKGIpO2c/Zy5sb2NhdGlvbj1tOmxvY2F0aW9uLmhyZWY9bSxnPW51bGwsc2V0VGltZW91dChmdW5jdGlvbigpe2wucmV2b2tlT2JqZWN0VVJMKG0pfSw0RTQpfX0pO2Yuc2F2ZUFzPWcuc2F2ZUFzPWcsIHRydWUmJihtb2R1bGUuZXhwb3J0cz1nKX0pO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1GaWxlU2F2ZXIubWluLmpzLm1hcFxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjU1Mzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDE3NTApLkJ1ZmZlcik7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIGlzRW5jb2RpbmcgPSBCdWZmZXIuaXNFbmNvZGluZyB8fCBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgZW5jb2RpbmcgPSAnJyArIGVuY29kaW5nO1xuICBzd2l0Y2ggKGVuY29kaW5nICYmIGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOmNhc2UgJ3V0ZjgnOmNhc2UgJ3V0Zi04JzpjYXNlICdhc2NpaSc6Y2FzZSAnYmluYXJ5JzpjYXNlICdiYXNlNjQnOmNhc2UgJ3VjczInOmNhc2UgJ3Vjcy0yJzpjYXNlICd1dGYxNmxlJzpjYXNlICd1dGYtMTZsZSc6Y2FzZSAncmF3JzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgaWYgKCFlbmMpIHJldHVybiAndXRmOCc7XG4gIHZhciByZXRyaWVkO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jKSB7XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuICd1dGY4JztcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiAndXRmMTZsZSc7XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuICdsYXRpbjEnO1xuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBlbmM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAocmV0cmllZCkgcmV0dXJuOyAvLyB1bmRlZmluZWRcbiAgICAgICAgZW5jID0gKCcnICsgZW5jKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXRyaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIERvIG5vdCBjYWNoZSBgQnVmZmVyLmlzRW5jb2RpbmdgIHdoZW4gY2hlY2tpbmcgZW5jb2RpbmcgbmFtZXMgYXMgc29tZVxuLy8gbW9kdWxlcyBtb25rZXktcGF0Y2ggaXQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGVuY29kaW5nc1xuZnVuY3Rpb24gbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIHZhciBuZW5jID0gX25vcm1hbGl6ZUVuY29kaW5nKGVuYyk7XG4gIGlmICh0eXBlb2YgbmVuYyAhPT0gJ3N0cmluZycgJiYgKEJ1ZmZlci5pc0VuY29kaW5nID09PSBpc0VuY29kaW5nIHx8ICFpc0VuY29kaW5nKGVuYykpKSB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmMpO1xuICByZXR1cm4gbmVuYyB8fCBlbmM7XG59XG5cbi8vIFN0cmluZ0RlY29kZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBlZmZpY2llbnRseSBzcGxpdHRpbmcgYSBzZXJpZXMgb2Zcbi8vIGJ1ZmZlcnMgaW50byBhIHNlcmllcyBvZiBKUyBzdHJpbmdzIHdpdGhvdXQgYnJlYWtpbmcgYXBhcnQgbXVsdGktYnl0ZVxuLy8gY2hhcmFjdGVycy5cbmV4cG9ydHMucyA9IFN0cmluZ0RlY29kZXI7XG5mdW5jdGlvbiBTdHJpbmdEZWNvZGVyKGVuY29kaW5nKSB7XG4gIHRoaXMuZW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZyk7XG4gIHZhciBuYjtcbiAgc3dpdGNoICh0aGlzLmVuY29kaW5nKSB7XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICB0aGlzLnRleHQgPSB1dGYxNlRleHQ7XG4gICAgICB0aGlzLmVuZCA9IHV0ZjE2RW5kO1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXRmOCc6XG4gICAgICB0aGlzLmZpbGxMYXN0ID0gdXRmOEZpbGxMYXN0O1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHRoaXMudGV4dCA9IGJhc2U2NFRleHQ7XG4gICAgICB0aGlzLmVuZCA9IGJhc2U2NEVuZDtcbiAgICAgIG5iID0gMztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLndyaXRlID0gc2ltcGxlV3JpdGU7XG4gICAgICB0aGlzLmVuZCA9IHNpbXBsZUVuZDtcbiAgICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgdGhpcy5sYXN0VG90YWwgPSAwO1xuICB0aGlzLmxhc3RDaGFyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG5iKTtcbn1cblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmIChidWYubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIHZhciByO1xuICB2YXIgaTtcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICByID0gdGhpcy5maWxsTGFzdChidWYpO1xuICAgIGlmIChyID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpID0gdGhpcy5sYXN0TmVlZDtcbiAgICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgfSBlbHNlIHtcbiAgICBpID0gMDtcbiAgfVxuICBpZiAoaSA8IGJ1Zi5sZW5ndGgpIHJldHVybiByID8gciArIHRoaXMudGV4dChidWYsIGkpIDogdGhpcy50ZXh0KGJ1ZiwgaSk7XG4gIHJldHVybiByIHx8ICcnO1xufTtcblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gdXRmOEVuZDtcblxuLy8gUmV0dXJucyBvbmx5IGNvbXBsZXRlIGNoYXJhY3RlcnMgaW4gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLnRleHQgPSB1dGY4VGV4dDtcblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBwYXJ0aWFsIG5vbi1VVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZmlsbExhc3QgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59O1xuXG4vLyBDaGVja3MgdGhlIHR5cGUgb2YgYSBVVEYtOCBieXRlLCB3aGV0aGVyIGl0J3MgQVNDSUksIGEgbGVhZGluZyBieXRlLCBvciBhXG4vLyBjb250aW51YXRpb24gYnl0ZS4gSWYgYW4gaW52YWxpZCBieXRlIGlzIGRldGVjdGVkLCAtMiBpcyByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0J5dGUoYnl0ZSkge1xuICBpZiAoYnl0ZSA8PSAweDdGKSByZXR1cm4gMDtlbHNlIGlmIChieXRlID4+IDUgPT09IDB4MDYpIHJldHVybiAyO2Vsc2UgaWYgKGJ5dGUgPj4gNCA9PT0gMHgwRSkgcmV0dXJuIDM7ZWxzZSBpZiAoYnl0ZSA+PiAzID09PSAweDFFKSByZXR1cm4gNDtcbiAgcmV0dXJuIGJ5dGUgPj4gNiA9PT0gMHgwMiA/IC0xIDogLTI7XG59XG5cbi8vIENoZWNrcyBhdCBtb3N0IDMgYnl0ZXMgYXQgdGhlIGVuZCBvZiBhIEJ1ZmZlciBpbiBvcmRlciB0byBkZXRlY3QgYW5cbi8vIGluY29tcGxldGUgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIuIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgKDIsIDMsIG9yIDQpXG4vLyBuZWVkZWQgdG8gY29tcGxldGUgdGhlIFVURi04IGNoYXJhY3RlciAoaWYgYXBwbGljYWJsZSkgYXJlIHJldHVybmVkLlxuZnVuY3Rpb24gdXRmOENoZWNrSW5jb21wbGV0ZShzZWxmLCBidWYsIGkpIHtcbiAgdmFyIGogPSBidWYubGVuZ3RoIC0gMTtcbiAgaWYgKGogPCBpKSByZXR1cm4gMDtcbiAgdmFyIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDE7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpIHx8IG5iID09PSAtMikgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDI7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpIHx8IG5iID09PSAtMikgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHtcbiAgICAgIGlmIChuYiA9PT0gMikgbmIgPSAwO2Vsc2Ugc2VsZi5sYXN0TmVlZCA9IG5iIC0gMztcbiAgICB9XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vLyBWYWxpZGF0ZXMgYXMgbWFueSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgYXNcbi8vIG5lZWRlZCBvciBhcmUgYXZhaWxhYmxlLiBJZiB3ZSBzZWUgYSBub24tY29udGludWF0aW9uIGJ5dGUgd2hlcmUgd2UgZXhwZWN0XG4vLyBvbmUsIHdlIFwicmVwbGFjZVwiIHRoZSB2YWxpZGF0ZWQgY29udGludWF0aW9uIGJ5dGVzIHdlJ3ZlIHNlZW4gc28gZmFyIHdpdGhcbi8vIGEgc2luZ2xlIFVURi04IHJlcGxhY2VtZW50IGNoYXJhY3RlciAoJ1xcdWZmZmQnKSwgdG8gbWF0Y2ggdjgncyBVVEYtOCBkZWNvZGluZ1xuLy8gYmVoYXZpb3IuIFRoZSBjb250aW51YXRpb24gYnl0ZSBjaGVjayBpcyBpbmNsdWRlZCB0aHJlZSB0aW1lcyBpbiB0aGUgY2FzZVxuLy8gd2hlcmUgYWxsIG9mIHRoZSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgY2hhcmFjdGVyIGV4aXN0IGluIHRoZSBzYW1lIGJ1ZmZlci5cbi8vIEl0IGlzIGFsc28gZG9uZSB0aGlzIHdheSBhcyBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbmNyZWFzZSBpbnN0ZWFkIG9mIHVzaW5nIGFcbi8vIGxvb3AuXG5mdW5jdGlvbiB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHNlbGYsIGJ1ZiwgcCkge1xuICBpZiAoKGJ1ZlswXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgc2VsZi5sYXN0TmVlZCA9IDA7XG4gICAgcmV0dXJuICdcXHVmZmZkJztcbiAgfVxuICBpZiAoc2VsZi5sYXN0TmVlZCA+IDEgJiYgYnVmLmxlbmd0aCA+IDEpIHtcbiAgICBpZiAoKGJ1ZlsxXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgICBzZWxmLmxhc3ROZWVkID0gMTtcbiAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgfVxuICAgIGlmIChzZWxmLmxhc3ROZWVkID4gMiAmJiBidWYubGVuZ3RoID4gMikge1xuICAgICAgaWYgKChidWZbMl0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgICBzZWxmLmxhc3ROZWVkID0gMjtcbiAgICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyLlxuZnVuY3Rpb24gdXRmOEZpbGxMYXN0KGJ1Zikge1xuICB2YXIgcCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgdmFyIHIgPSB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHRoaXMsIGJ1ZiwgcCk7XG4gIGlmIChyICE9PSB1bmRlZmluZWQpIHJldHVybiByO1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59XG5cbi8vIFJldHVybnMgYWxsIGNvbXBsZXRlIFVURi04IGNoYXJhY3RlcnMgaW4gYSBCdWZmZXIuIElmIHRoZSBCdWZmZXIgZW5kZWQgb24gYVxuLy8gcGFydGlhbCBjaGFyYWN0ZXIsIHRoZSBjaGFyYWN0ZXIncyBieXRlcyBhcmUgYnVmZmVyZWQgdW50aWwgdGhlIHJlcXVpcmVkXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXJlIGF2YWlsYWJsZS5cbmZ1bmN0aW9uIHV0ZjhUZXh0KGJ1ZiwgaSkge1xuICB2YXIgdG90YWwgPSB1dGY4Q2hlY2tJbmNvbXBsZXRlKHRoaXMsIGJ1ZiwgaSk7XG4gIGlmICghdGhpcy5sYXN0TmVlZCkgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGkpO1xuICB0aGlzLmxhc3RUb3RhbCA9IHRvdGFsO1xuICB2YXIgZW5kID0gYnVmLmxlbmd0aCAtICh0b3RhbCAtIHRoaXMubGFzdE5lZWQpO1xuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCAwLCBlbmQpO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSwgZW5kKTtcbn1cblxuLy8gRm9yIFVURi04LCBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyBhZGRlZCB3aGVuIGVuZGluZyBvbiBhIHBhcnRpYWxcbi8vIGNoYXJhY3Rlci5cbmZ1bmN0aW9uIHV0ZjhFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgJ1xcdWZmZmQnO1xuICByZXR1cm4gcjtcbn1cblxuLy8gVVRGLTE2TEUgdHlwaWNhbGx5IG5lZWRzIHR3byBieXRlcyBwZXIgY2hhcmFjdGVyLCBidXQgZXZlbiBpZiB3ZSBoYXZlIGFuIGV2ZW5cbi8vIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgZW5kIG9uIGEgbGVhZGluZy9oaWdoXG4vLyBzdXJyb2dhdGUuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gb3JkZXIgdG9cbi8vIGRlY29kZSB0aGUgbGFzdCBjaGFyYWN0ZXIgcHJvcGVybHkuXG5mdW5jdGlvbiB1dGYxNlRleHQoYnVmLCBpKSB7XG4gIGlmICgoYnVmLmxlbmd0aCAtIGkpICUgMiA9PT0gMCkge1xuICAgIHZhciByID0gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSk7XG4gICAgaWYgKHIpIHtcbiAgICAgIHZhciBjID0gci5jaGFyQ29kZUF0KHIubGVuZ3RoIC0gMSk7XG4gICAgICBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERCRkYpIHtcbiAgICAgICAgdGhpcy5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHRoaXMubGFzdFRvdGFsID0gNDtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICAgICAgICByZXR1cm4gci5zbGljZSgwLCAtMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAxO1xuICB0aGlzLmxhc3RUb3RhbCA9IDI7XG4gIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSwgYnVmLmxlbmd0aCAtIDEpO1xufVxuXG4vLyBGb3IgVVRGLTE2TEUgd2UgZG8gbm90IGV4cGxpY2l0bHkgYXBwZW5kIHNwZWNpYWwgcmVwbGFjZW1lbnQgY2hhcmFjdGVycyBpZiB3ZVxuLy8gZW5kIG9uIGEgcGFydGlhbCBjaGFyYWN0ZXIsIHdlIHNpbXBseSBsZXQgdjggaGFuZGxlIHRoYXQuXG5mdW5jdGlvbiB1dGYxNkVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHZhciBlbmQgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gICAgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCd1dGYxNmxlJywgMCwgZW5kKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gYmFzZTY0VGV4dChidWYsIGkpIHtcbiAgdmFyIG4gPSAoYnVmLmxlbmd0aCAtIGkpICUgMztcbiAgaWYgKG4gPT09IDApIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGkpO1xuICB0aGlzLmxhc3ROZWVkID0gMyAtIG47XG4gIHRoaXMubGFzdFRvdGFsID0gMztcbiAgaWYgKG4gPT09IDEpIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfVxuICByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpLCBidWYubGVuZ3RoIC0gbik7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCdiYXNlNjQnLCAwLCAzIC0gdGhpcy5sYXN0TmVlZCk7XG4gIHJldHVybiByO1xufVxuXG4vLyBQYXNzIGJ5dGVzIG9uIHRocm91Z2ggZm9yIHNpbmdsZS1ieXRlIGVuY29kaW5ncyAoZS5nLiBhc2NpaSwgbGF0aW4xLCBoZXgpXG5mdW5jdGlvbiBzaW1wbGVXcml0ZShidWYpIHtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZyh0aGlzLmVuY29kaW5nKTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRW5kKGJ1Zikge1xuICByZXR1cm4gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDMxMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxudmFyIFRJTkZfT0sgPSAwO1xudmFyIFRJTkZfREFUQV9FUlJPUiA9IC0zO1xuXG5mdW5jdGlvbiBUcmVlKCkge1xuICB0aGlzLnRhYmxlID0gbmV3IFVpbnQxNkFycmF5KDE2KTsgICAvKiB0YWJsZSBvZiBjb2RlIGxlbmd0aCBjb3VudHMgKi9cbiAgdGhpcy50cmFucyA9IG5ldyBVaW50MTZBcnJheSgyODgpOyAgLyogY29kZSAtPiBzeW1ib2wgdHJhbnNsYXRpb24gdGFibGUgKi9cbn1cblxuZnVuY3Rpb24gRGF0YShzb3VyY2UsIGRlc3QpIHtcbiAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gIHRoaXMuc291cmNlSW5kZXggPSAwO1xuICB0aGlzLnRhZyA9IDA7XG4gIHRoaXMuYml0Y291bnQgPSAwO1xuICBcbiAgdGhpcy5kZXN0ID0gZGVzdDtcbiAgdGhpcy5kZXN0TGVuID0gMDtcbiAgXG4gIHRoaXMubHRyZWUgPSBuZXcgVHJlZSgpOyAgLyogZHluYW1pYyBsZW5ndGgvc3ltYm9sIHRyZWUgKi9cbiAgdGhpcy5kdHJlZSA9IG5ldyBUcmVlKCk7ICAvKiBkeW5hbWljIGRpc3RhbmNlIHRyZWUgKi9cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICpcbiAqIC0tIHVuaW5pdGlhbGl6ZWQgZ2xvYmFsIGRhdGEgKHN0YXRpYyBzdHJ1Y3R1cmVzKSAtLSAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxudmFyIHNsdHJlZSA9IG5ldyBUcmVlKCk7XG52YXIgc2R0cmVlID0gbmV3IFRyZWUoKTtcblxuLyogZXh0cmEgYml0cyBhbmQgYmFzZSB0YWJsZXMgZm9yIGxlbmd0aCBjb2RlcyAqL1xudmFyIGxlbmd0aF9iaXRzID0gbmV3IFVpbnQ4QXJyYXkoMzApO1xudmFyIGxlbmd0aF9iYXNlID0gbmV3IFVpbnQxNkFycmF5KDMwKTtcblxuLyogZXh0cmEgYml0cyBhbmQgYmFzZSB0YWJsZXMgZm9yIGRpc3RhbmNlIGNvZGVzICovXG52YXIgZGlzdF9iaXRzID0gbmV3IFVpbnQ4QXJyYXkoMzApO1xudmFyIGRpc3RfYmFzZSA9IG5ldyBVaW50MTZBcnJheSgzMCk7XG5cbi8qIHNwZWNpYWwgb3JkZXJpbmcgb2YgY29kZSBsZW5ndGggY29kZXMgKi9cbnZhciBjbGNpZHggPSBuZXcgVWludDhBcnJheShbXG4gIDE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsXG4gIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLFxuICAxNCwgMSwgMTVcbl0pO1xuXG4vKiB1c2VkIGJ5IHRpbmZfZGVjb2RlX3RyZWVzLCBhdm9pZHMgYWxsb2NhdGlvbnMgZXZlcnkgY2FsbCAqL1xudmFyIGNvZGVfdHJlZSA9IG5ldyBUcmVlKCk7XG52YXIgbGVuZ3RocyA9IG5ldyBVaW50OEFycmF5KDI4OCArIDMyKTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKlxuICogLS0gdXRpbGl0eSBmdW5jdGlvbnMgLS0gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyogYnVpbGQgZXh0cmEgYml0cyBhbmQgYmFzZSB0YWJsZXMgKi9cbmZ1bmN0aW9uIHRpbmZfYnVpbGRfYml0c19iYXNlKGJpdHMsIGJhc2UsIGRlbHRhLCBmaXJzdCkge1xuICB2YXIgaSwgc3VtO1xuXG4gIC8qIGJ1aWxkIGJpdHMgdGFibGUgKi9cbiAgZm9yIChpID0gMDsgaSA8IGRlbHRhOyArK2kpIGJpdHNbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgMzAgLSBkZWx0YTsgKytpKSBiaXRzW2kgKyBkZWx0YV0gPSBpIC8gZGVsdGEgfCAwO1xuXG4gIC8qIGJ1aWxkIGJhc2UgdGFibGUgKi9cbiAgZm9yIChzdW0gPSBmaXJzdCwgaSA9IDA7IGkgPCAzMDsgKytpKSB7XG4gICAgYmFzZVtpXSA9IHN1bTtcbiAgICBzdW0gKz0gMSA8PCBiaXRzW2ldO1xuICB9XG59XG5cbi8qIGJ1aWxkIHRoZSBmaXhlZCBodWZmbWFuIHRyZWVzICovXG5mdW5jdGlvbiB0aW5mX2J1aWxkX2ZpeGVkX3RyZWVzKGx0LCBkdCkge1xuICB2YXIgaTtcblxuICAvKiBidWlsZCBmaXhlZCBsZW5ndGggdHJlZSAqL1xuICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSBsdC50YWJsZVtpXSA9IDA7XG5cbiAgbHQudGFibGVbN10gPSAyNDtcbiAgbHQudGFibGVbOF0gPSAxNTI7XG4gIGx0LnRhYmxlWzldID0gMTEyO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAyNDsgKytpKSBsdC50cmFuc1tpXSA9IDI1NiArIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNDQ7ICsraSkgbHQudHJhbnNbMjQgKyBpXSA9IGk7XG4gIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpIGx0LnRyYW5zWzI0ICsgMTQ0ICsgaV0gPSAyODAgKyBpO1xuICBmb3IgKGkgPSAwOyBpIDwgMTEyOyArK2kpIGx0LnRyYW5zWzI0ICsgMTQ0ICsgOCArIGldID0gMTQ0ICsgaTtcblxuICAvKiBidWlsZCBmaXhlZCBkaXN0YW5jZSB0cmVlICovXG4gIGZvciAoaSA9IDA7IGkgPCA1OyArK2kpIGR0LnRhYmxlW2ldID0gMDtcblxuICBkdC50YWJsZVs1XSA9IDMyO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgKytpKSBkdC50cmFuc1tpXSA9IGk7XG59XG5cbi8qIGdpdmVuIGFuIGFycmF5IG9mIGNvZGUgbGVuZ3RocywgYnVpbGQgYSB0cmVlICovXG52YXIgb2ZmcyA9IG5ldyBVaW50MTZBcnJheSgxNik7XG5cbmZ1bmN0aW9uIHRpbmZfYnVpbGRfdHJlZSh0LCBsZW5ndGhzLCBvZmYsIG51bSkge1xuICB2YXIgaSwgc3VtO1xuXG4gIC8qIGNsZWFyIGNvZGUgbGVuZ3RoIGNvdW50IHRhYmxlICovXG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB0LnRhYmxlW2ldID0gMDtcblxuICAvKiBzY2FuIHN5bWJvbCBsZW5ndGhzLCBhbmQgc3VtIGNvZGUgbGVuZ3RoIGNvdW50cyAqL1xuICBmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHQudGFibGVbbGVuZ3Roc1tvZmYgKyBpXV0rKztcblxuICB0LnRhYmxlWzBdID0gMDtcblxuICAvKiBjb21wdXRlIG9mZnNldCB0YWJsZSBmb3IgZGlzdHJpYnV0aW9uIHNvcnQgKi9cbiAgZm9yIChzdW0gPSAwLCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICBvZmZzW2ldID0gc3VtO1xuICAgIHN1bSArPSB0LnRhYmxlW2ldO1xuICB9XG5cbiAgLyogY3JlYXRlIGNvZGUtPnN5bWJvbCB0cmFuc2xhdGlvbiB0YWJsZSAoc3ltYm9scyBzb3J0ZWQgYnkgY29kZSkgKi9cbiAgZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7XG4gICAgaWYgKGxlbmd0aHNbb2ZmICsgaV0pIHQudHJhbnNbb2Zmc1tsZW5ndGhzW29mZiArIGldXSsrXSA9IGk7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqXG4gKiAtLSBkZWNvZGUgZnVuY3Rpb25zIC0tICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyogZ2V0IG9uZSBiaXQgZnJvbSBzb3VyY2Ugc3RyZWFtICovXG5mdW5jdGlvbiB0aW5mX2dldGJpdChkKSB7XG4gIC8qIGNoZWNrIGlmIHRhZyBpcyBlbXB0eSAqL1xuICBpZiAoIWQuYml0Y291bnQtLSkge1xuICAgIC8qIGxvYWQgbmV4dCB0YWcgKi9cbiAgICBkLnRhZyA9IGQuc291cmNlW2Quc291cmNlSW5kZXgrK107XG4gICAgZC5iaXRjb3VudCA9IDc7XG4gIH1cblxuICAvKiBzaGlmdCBiaXQgb3V0IG9mIHRhZyAqL1xuICB2YXIgYml0ID0gZC50YWcgJiAxO1xuICBkLnRhZyA+Pj49IDE7XG5cbiAgcmV0dXJuIGJpdDtcbn1cblxuLyogcmVhZCBhIG51bSBiaXQgdmFsdWUgZnJvbSBhIHN0cmVhbSBhbmQgYWRkIGJhc2UgKi9cbmZ1bmN0aW9uIHRpbmZfcmVhZF9iaXRzKGQsIG51bSwgYmFzZSkge1xuICBpZiAoIW51bSlcbiAgICByZXR1cm4gYmFzZTtcblxuICB3aGlsZSAoZC5iaXRjb3VudCA8IDI0KSB7XG4gICAgZC50YWcgfD0gZC5zb3VyY2VbZC5zb3VyY2VJbmRleCsrXSA8PCBkLmJpdGNvdW50O1xuICAgIGQuYml0Y291bnQgKz0gODtcbiAgfVxuXG4gIHZhciB2YWwgPSBkLnRhZyAmICgweGZmZmYgPj4+ICgxNiAtIG51bSkpO1xuICBkLnRhZyA+Pj49IG51bTtcbiAgZC5iaXRjb3VudCAtPSBudW07XG4gIHJldHVybiB2YWwgKyBiYXNlO1xufVxuXG4vKiBnaXZlbiBhIGRhdGEgc3RyZWFtIGFuZCBhIHRyZWUsIGRlY29kZSBhIHN5bWJvbCAqL1xuZnVuY3Rpb24gdGluZl9kZWNvZGVfc3ltYm9sKGQsIHQpIHtcbiAgd2hpbGUgKGQuYml0Y291bnQgPCAyNCkge1xuICAgIGQudGFnIHw9IGQuc291cmNlW2Quc291cmNlSW5kZXgrK10gPDwgZC5iaXRjb3VudDtcbiAgICBkLmJpdGNvdW50ICs9IDg7XG4gIH1cbiAgXG4gIHZhciBzdW0gPSAwLCBjdXIgPSAwLCBsZW4gPSAwO1xuICB2YXIgdGFnID0gZC50YWc7XG5cbiAgLyogZ2V0IG1vcmUgYml0cyB3aGlsZSBjb2RlIHZhbHVlIGlzIGFib3ZlIHN1bSAqL1xuICBkbyB7XG4gICAgY3VyID0gMiAqIGN1ciArICh0YWcgJiAxKTtcbiAgICB0YWcgPj4+PSAxO1xuICAgICsrbGVuO1xuXG4gICAgc3VtICs9IHQudGFibGVbbGVuXTtcbiAgICBjdXIgLT0gdC50YWJsZVtsZW5dO1xuICB9IHdoaWxlIChjdXIgPj0gMCk7XG4gIFxuICBkLnRhZyA9IHRhZztcbiAgZC5iaXRjb3VudCAtPSBsZW47XG5cbiAgcmV0dXJuIHQudHJhbnNbc3VtICsgY3VyXTtcbn1cblxuLyogZ2l2ZW4gYSBkYXRhIHN0cmVhbSwgZGVjb2RlIGR5bmFtaWMgdHJlZXMgZnJvbSBpdCAqL1xuZnVuY3Rpb24gdGluZl9kZWNvZGVfdHJlZXMoZCwgbHQsIGR0KSB7XG4gIHZhciBobGl0LCBoZGlzdCwgaGNsZW47XG4gIHZhciBpLCBudW0sIGxlbmd0aDtcblxuICAvKiBnZXQgNSBiaXRzIEhMSVQgKDI1Ny0yODYpICovXG4gIGhsaXQgPSB0aW5mX3JlYWRfYml0cyhkLCA1LCAyNTcpO1xuXG4gIC8qIGdldCA1IGJpdHMgSERJU1QgKDEtMzIpICovXG4gIGhkaXN0ID0gdGluZl9yZWFkX2JpdHMoZCwgNSwgMSk7XG5cbiAgLyogZ2V0IDQgYml0cyBIQ0xFTiAoNC0xOSkgKi9cbiAgaGNsZW4gPSB0aW5mX3JlYWRfYml0cyhkLCA0LCA0KTtcblxuICBmb3IgKGkgPSAwOyBpIDwgMTk7ICsraSkgbGVuZ3Roc1tpXSA9IDA7XG5cbiAgLyogcmVhZCBjb2RlIGxlbmd0aHMgZm9yIGNvZGUgbGVuZ3RoIGFscGhhYmV0ICovXG4gIGZvciAoaSA9IDA7IGkgPCBoY2xlbjsgKytpKSB7XG4gICAgLyogZ2V0IDMgYml0cyBjb2RlIGxlbmd0aCAoMC03KSAqL1xuICAgIHZhciBjbGVuID0gdGluZl9yZWFkX2JpdHMoZCwgMywgMCk7XG4gICAgbGVuZ3Roc1tjbGNpZHhbaV1dID0gY2xlbjtcbiAgfVxuXG4gIC8qIGJ1aWxkIGNvZGUgbGVuZ3RoIHRyZWUgKi9cbiAgdGluZl9idWlsZF90cmVlKGNvZGVfdHJlZSwgbGVuZ3RocywgMCwgMTkpO1xuXG4gIC8qIGRlY29kZSBjb2RlIGxlbmd0aHMgZm9yIHRoZSBkeW5hbWljIHRyZWVzICovXG4gIGZvciAobnVtID0gMDsgbnVtIDwgaGxpdCArIGhkaXN0Oykge1xuICAgIHZhciBzeW0gPSB0aW5mX2RlY29kZV9zeW1ib2woZCwgY29kZV90cmVlKTtcblxuICAgIHN3aXRjaCAoc3ltKSB7XG4gICAgICBjYXNlIDE2OlxuICAgICAgICAvKiBjb3B5IHByZXZpb3VzIGNvZGUgbGVuZ3RoIDMtNiB0aW1lcyAocmVhZCAyIGJpdHMpICovXG4gICAgICAgIHZhciBwcmV2ID0gbGVuZ3Roc1tudW0gLSAxXTtcbiAgICAgICAgZm9yIChsZW5ndGggPSB0aW5mX3JlYWRfYml0cyhkLCAyLCAzKTsgbGVuZ3RoOyAtLWxlbmd0aCkge1xuICAgICAgICAgIGxlbmd0aHNbbnVtKytdID0gcHJldjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTc6XG4gICAgICAgIC8qIHJlcGVhdCBjb2RlIGxlbmd0aCAwIGZvciAzLTEwIHRpbWVzIChyZWFkIDMgYml0cykgKi9cbiAgICAgICAgZm9yIChsZW5ndGggPSB0aW5mX3JlYWRfYml0cyhkLCAzLCAzKTsgbGVuZ3RoOyAtLWxlbmd0aCkge1xuICAgICAgICAgIGxlbmd0aHNbbnVtKytdID0gMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTg6XG4gICAgICAgIC8qIHJlcGVhdCBjb2RlIGxlbmd0aCAwIGZvciAxMS0xMzggdGltZXMgKHJlYWQgNyBiaXRzKSAqL1xuICAgICAgICBmb3IgKGxlbmd0aCA9IHRpbmZfcmVhZF9iaXRzKGQsIDcsIDExKTsgbGVuZ3RoOyAtLWxlbmd0aCkge1xuICAgICAgICAgIGxlbmd0aHNbbnVtKytdID0gMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8qIHZhbHVlcyAwLTE1IHJlcHJlc2VudCB0aGUgYWN0dWFsIGNvZGUgbGVuZ3RocyAqL1xuICAgICAgICBsZW5ndGhzW251bSsrXSA9IHN5bTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyogYnVpbGQgZHluYW1pYyB0cmVlcyAqL1xuICB0aW5mX2J1aWxkX3RyZWUobHQsIGxlbmd0aHMsIDAsIGhsaXQpO1xuICB0aW5mX2J1aWxkX3RyZWUoZHQsIGxlbmd0aHMsIGhsaXQsIGhkaXN0KTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKlxuICogLS0gYmxvY2sgaW5mbGF0ZSBmdW5jdGlvbnMgLS0gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyogZ2l2ZW4gYSBzdHJlYW0gYW5kIHR3byB0cmVlcywgaW5mbGF0ZSBhIGJsb2NrIG9mIGRhdGEgKi9cbmZ1bmN0aW9uIHRpbmZfaW5mbGF0ZV9ibG9ja19kYXRhKGQsIGx0LCBkdCkge1xuICB3aGlsZSAoMSkge1xuICAgIHZhciBzeW0gPSB0aW5mX2RlY29kZV9zeW1ib2woZCwgbHQpO1xuXG4gICAgLyogY2hlY2sgZm9yIGVuZCBvZiBibG9jayAqL1xuICAgIGlmIChzeW0gPT09IDI1Nikge1xuICAgICAgcmV0dXJuIFRJTkZfT0s7XG4gICAgfVxuXG4gICAgaWYgKHN5bSA8IDI1Nikge1xuICAgICAgZC5kZXN0W2QuZGVzdExlbisrXSA9IHN5bTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGxlbmd0aCwgZGlzdCwgb2ZmcztcbiAgICAgIHZhciBpO1xuXG4gICAgICBzeW0gLT0gMjU3O1xuXG4gICAgICAvKiBwb3NzaWJseSBnZXQgbW9yZSBiaXRzIGZyb20gbGVuZ3RoIGNvZGUgKi9cbiAgICAgIGxlbmd0aCA9IHRpbmZfcmVhZF9iaXRzKGQsIGxlbmd0aF9iaXRzW3N5bV0sIGxlbmd0aF9iYXNlW3N5bV0pO1xuXG4gICAgICBkaXN0ID0gdGluZl9kZWNvZGVfc3ltYm9sKGQsIGR0KTtcblxuICAgICAgLyogcG9zc2libHkgZ2V0IG1vcmUgYml0cyBmcm9tIGRpc3RhbmNlIGNvZGUgKi9cbiAgICAgIG9mZnMgPSBkLmRlc3RMZW4gLSB0aW5mX3JlYWRfYml0cyhkLCBkaXN0X2JpdHNbZGlzdF0sIGRpc3RfYmFzZVtkaXN0XSk7XG5cbiAgICAgIC8qIGNvcHkgbWF0Y2ggKi9cbiAgICAgIGZvciAoaSA9IG9mZnM7IGkgPCBvZmZzICsgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZC5kZXN0W2QuZGVzdExlbisrXSA9IGQuZGVzdFtpXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyogaW5mbGF0ZSBhbiB1bmNvbXByZXNzZWQgYmxvY2sgb2YgZGF0YSAqL1xuZnVuY3Rpb24gdGluZl9pbmZsYXRlX3VuY29tcHJlc3NlZF9ibG9jayhkKSB7XG4gIHZhciBsZW5ndGgsIGludmxlbmd0aDtcbiAgdmFyIGk7XG4gIFxuICAvKiB1bnJlYWQgZnJvbSBiaXRidWZmZXIgKi9cbiAgd2hpbGUgKGQuYml0Y291bnQgPiA4KSB7XG4gICAgZC5zb3VyY2VJbmRleC0tO1xuICAgIGQuYml0Y291bnQgLT0gODtcbiAgfVxuXG4gIC8qIGdldCBsZW5ndGggKi9cbiAgbGVuZ3RoID0gZC5zb3VyY2VbZC5zb3VyY2VJbmRleCArIDFdO1xuICBsZW5ndGggPSAyNTYgKiBsZW5ndGggKyBkLnNvdXJjZVtkLnNvdXJjZUluZGV4XTtcblxuICAvKiBnZXQgb25lJ3MgY29tcGxlbWVudCBvZiBsZW5ndGggKi9cbiAgaW52bGVuZ3RoID0gZC5zb3VyY2VbZC5zb3VyY2VJbmRleCArIDNdO1xuICBpbnZsZW5ndGggPSAyNTYgKiBpbnZsZW5ndGggKyBkLnNvdXJjZVtkLnNvdXJjZUluZGV4ICsgMl07XG5cbiAgLyogY2hlY2sgbGVuZ3RoICovXG4gIGlmIChsZW5ndGggIT09ICh+aW52bGVuZ3RoICYgMHgwMDAwZmZmZikpXG4gICAgcmV0dXJuIFRJTkZfREFUQV9FUlJPUjtcblxuICBkLnNvdXJjZUluZGV4ICs9IDQ7XG5cbiAgLyogY29weSBibG9jayAqL1xuICBmb3IgKGkgPSBsZW5ndGg7IGk7IC0taSlcbiAgICBkLmRlc3RbZC5kZXN0TGVuKytdID0gZC5zb3VyY2VbZC5zb3VyY2VJbmRleCsrXTtcblxuICAvKiBtYWtlIHN1cmUgd2Ugc3RhcnQgbmV4dCBibG9jayBvbiBhIGJ5dGUgYm91bmRhcnkgKi9cbiAgZC5iaXRjb3VudCA9IDA7XG5cbiAgcmV0dXJuIFRJTkZfT0s7XG59XG5cbi8qIGluZmxhdGUgc3RyZWFtIGZyb20gc291cmNlIHRvIGRlc3QgKi9cbmZ1bmN0aW9uIHRpbmZfdW5jb21wcmVzcyhzb3VyY2UsIGRlc3QpIHtcbiAgdmFyIGQgPSBuZXcgRGF0YShzb3VyY2UsIGRlc3QpO1xuICB2YXIgYmZpbmFsLCBidHlwZSwgcmVzO1xuXG4gIGRvIHtcbiAgICAvKiByZWFkIGZpbmFsIGJsb2NrIGZsYWcgKi9cbiAgICBiZmluYWwgPSB0aW5mX2dldGJpdChkKTtcblxuICAgIC8qIHJlYWQgYmxvY2sgdHlwZSAoMiBiaXRzKSAqL1xuICAgIGJ0eXBlID0gdGluZl9yZWFkX2JpdHMoZCwgMiwgMCk7XG5cbiAgICAvKiBkZWNvbXByZXNzIGJsb2NrICovXG4gICAgc3dpdGNoIChidHlwZSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvKiBkZWNvbXByZXNzIHVuY29tcHJlc3NlZCBibG9jayAqL1xuICAgICAgICByZXMgPSB0aW5mX2luZmxhdGVfdW5jb21wcmVzc2VkX2Jsb2NrKGQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgLyogZGVjb21wcmVzcyBibG9jayB3aXRoIGZpeGVkIGh1ZmZtYW4gdHJlZXMgKi9cbiAgICAgICAgcmVzID0gdGluZl9pbmZsYXRlX2Jsb2NrX2RhdGEoZCwgc2x0cmVlLCBzZHRyZWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgLyogZGVjb21wcmVzcyBibG9jayB3aXRoIGR5bmFtaWMgaHVmZm1hbiB0cmVlcyAqL1xuICAgICAgICB0aW5mX2RlY29kZV90cmVlcyhkLCBkLmx0cmVlLCBkLmR0cmVlKTtcbiAgICAgICAgcmVzID0gdGluZl9pbmZsYXRlX2Jsb2NrX2RhdGEoZCwgZC5sdHJlZSwgZC5kdHJlZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVzID0gVElORl9EQVRBX0VSUk9SO1xuICAgIH1cblxuICAgIGlmIChyZXMgIT09IFRJTkZfT0spXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEgZXJyb3InKTtcblxuICB9IHdoaWxlICghYmZpbmFsKTtcblxuICBpZiAoZC5kZXN0TGVuIDwgZC5kZXN0Lmxlbmd0aCkge1xuICAgIGlmICh0eXBlb2YgZC5kZXN0LnNsaWNlID09PSAnZnVuY3Rpb24nKVxuICAgICAgcmV0dXJuIGQuZGVzdC5zbGljZSgwLCBkLmRlc3RMZW4pO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBkLmRlc3Quc3ViYXJyYXkoMCwgZC5kZXN0TGVuKTtcbiAgfVxuICBcbiAgcmV0dXJuIGQuZGVzdDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gKlxuICogLS0gaW5pdGlhbGl6YXRpb24gLS0gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyogYnVpbGQgZml4ZWQgaHVmZm1hbiB0cmVlcyAqL1xudGluZl9idWlsZF9maXhlZF90cmVlcyhzbHRyZWUsIHNkdHJlZSk7XG5cbi8qIGJ1aWxkIGV4dHJhIGJpdHMgYW5kIGJhc2UgdGFibGVzICovXG50aW5mX2J1aWxkX2JpdHNfYmFzZShsZW5ndGhfYml0cywgbGVuZ3RoX2Jhc2UsIDQsIDMpO1xudGluZl9idWlsZF9iaXRzX2Jhc2UoZGlzdF9iaXRzLCBkaXN0X2Jhc2UsIDIsIDEpO1xuXG4vKiBmaXggYSBzcGVjaWFsIGNhc2UgKi9cbmxlbmd0aF9iaXRzWzI4XSA9IDA7XG5sZW5ndGhfYmFzZVsyOF0gPSAyNTg7XG5cbm1vZHVsZS5leHBvcnRzID0gdGluZl91bmNvbXByZXNzO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOTE3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogcHJvdmlkZWQgZGVwZW5kZW5jeSAqLyB2YXIgQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODIzKVtcIkJ1ZmZlclwiXTtcblxuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI1MjYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4MTcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIxNjUpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ3NDcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc5NDEpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDcwNDIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDY5OTIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MzIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg3ODMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM5NDgpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIyMjIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk2NTMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDEyNDkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDIwODcpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDgzMDkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk2MDEpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ5NTMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg2NzQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDUwMDMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTYxKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNDgxKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyNzA3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0OTE2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NzIzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxMDM4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5NjAwKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMzcxKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMjkwKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMjk5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4MjU1KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyOTkwKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4OTI3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzMTA1KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MDM1KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0MzQ1KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MTc0KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyODQ2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NzMxKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3MjA5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2MzE5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg4ODY3KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3Nzg5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNzM5KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5MzY4KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NDgzKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygyMDU2KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygzNDYyKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg2NzgpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc0NjIpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDM4MjQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDUwMjEpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI5NzQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDUwMTYpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDUxMDkpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk3MTQpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDMyMTApO1xuXG52YXIgXztcblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogZmFsc2UgfSk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTsgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7IF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShvLCBhbGxvd0FycmF5TGlrZSkgeyB2YXIgaXQgPSB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSB8fCBvW1wiQEBpdGVyYXRvclwiXTsgaWYgKGl0KSByZXR1cm4gKGl0ID0gaXQuY2FsbChvKSkubmV4dC5iaW5kKGl0KTsgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyByZXR1cm4gZnVuY3Rpb24gKCkgeyBpZiAoaSA+PSBvLmxlbmd0aCkgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OyByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG9baSsrXSB9OyB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdChleCkge1xuICByZXR1cm4gZXggJiYgdHlwZW9mIGV4ID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZXggPyBleFsnZGVmYXVsdCddIDogZXg7XG59XG5cbnZhciByID0gX2ludGVyb3BEZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oNTEwNikpO1xuXG52YXIgdXRpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2MTApO1xuXG52YXIgaXNFcXVhbCA9IF9pbnRlcm9wRGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MSkpO1xuXG52YXIgdW5pY29kZSA9IF9pbnRlcm9wRGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDM2MzEpKTtcblxudmFyIFVuaWNvZGVUcmllID0gX2ludGVyb3BEZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oNDc4MSkpO1xuXG52YXIgU3RhdGVNYWNoaW5lID0gX2ludGVyb3BEZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oOTgxMSkpO1xuXG52YXIgY2xvbmVEZWVwID0gX2ludGVyb3BEZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oNjMxMykpO1xuXG52YXIgaW5mbGF0ZSA9IF9pbnRlcm9wRGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDMxMSkpO1xuXG52YXIgYnJvdGxpID0gX2ludGVyb3BEZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oNzcwOSkpO1xuXG52YXIgZnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4NTcpO1xuXG52YXIgZm9udGtpdCA9IHt9O1xuZm9udGtpdC5sb2dFcnJvcnMgPSBmYWxzZTtcbnZhciBmb3JtYXRzID0gW107XG5cbmZvbnRraXQucmVnaXN0ZXJGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gIGZvcm1hdHMucHVzaChmb3JtYXQpO1xufTtcblxuZm9udGtpdC5vcGVuU3luYyA9IGZ1bmN0aW9uIChmaWxlbmFtZSwgcG9zdHNjcmlwdE5hbWUpIHtcbiAgdmFyIGJ1ZmZlciA9IGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSk7XG4gIHJldHVybiBmb250a2l0LmNyZWF0ZShidWZmZXIsIHBvc3RzY3JpcHROYW1lKTtcbn07XG5cbmZvbnRraXQub3BlbiA9IGZ1bmN0aW9uIChmaWxlbmFtZSwgcG9zdHNjcmlwdE5hbWUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgcG9zdHNjcmlwdE5hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IHBvc3RzY3JpcHROYW1lO1xuICAgIHBvc3RzY3JpcHROYW1lID0gbnVsbDtcbiAgfVxuXG4gIGZzLnJlYWRGaWxlKGZpbGVuYW1lLCBmdW5jdGlvbiAoZXJyLCBidWZmZXIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdmFyIGZvbnQgPSBmb250a2l0LmNyZWF0ZShidWZmZXIsIHBvc3RzY3JpcHROYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIGZvbnQpO1xuICB9KTtcbiAgcmV0dXJuO1xufTtcblxuZm9udGtpdC5jcmVhdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCBwb3N0c2NyaXB0TmFtZSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1hdHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZm9ybWF0ID0gZm9ybWF0c1tpXTtcblxuICAgIGlmIChmb3JtYXQucHJvYmUoYnVmZmVyKSkge1xuICAgICAgdmFyIGZvbnQgPSBuZXcgZm9ybWF0KG5ldyByLkRlY29kZVN0cmVhbShidWZmZXIpKTtcblxuICAgICAgaWYgKHBvc3RzY3JpcHROYW1lKSB7XG4gICAgICAgIHJldHVybiBmb250LmdldEZvbnQocG9zdHNjcmlwdE5hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9udDtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZm9udCBmb3JtYXQnKTtcbn07XG5cbmZvbnRraXQuZGVmYXVsdExhbmd1YWdlID0gJ2VuJztcblxuZm9udGtpdC5zZXREZWZhdWx0TGFuZ3VhZ2UgPSBmdW5jdGlvbiAobGFuZykge1xuICBpZiAobGFuZyA9PT0gdm9pZCAwKSB7XG4gICAgbGFuZyA9ICdlbic7XG4gIH1cblxuICBmb250a2l0LmRlZmF1bHRMYW5ndWFnZSA9IGxhbmc7XG59O1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5LCBkZWNvcmF0b3JzLCBkZXNjcmlwdG9yLCBjb250ZXh0KSB7XG4gIHZhciBkZXNjID0ge307XG4gIE9iamVjdC5rZXlzKGRlc2NyaXB0b3IpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGRlc2Nba2V5XSA9IGRlc2NyaXB0b3Jba2V5XTtcbiAgfSk7XG4gIGRlc2MuZW51bWVyYWJsZSA9ICEhZGVzYy5lbnVtZXJhYmxlO1xuICBkZXNjLmNvbmZpZ3VyYWJsZSA9ICEhZGVzYy5jb25maWd1cmFibGU7XG5cbiAgaWYgKCd2YWx1ZScgaW4gZGVzYyB8fCBkZXNjLmluaXRpYWxpemVyKSB7XG4gICAgZGVzYy53cml0YWJsZSA9IHRydWU7XG4gIH1cblxuICBkZXNjID0gZGVjb3JhdG9ycy5zbGljZSgpLnJldmVyc2UoKS5yZWR1Y2UoZnVuY3Rpb24gKGRlc2MsIGRlY29yYXRvcikge1xuICAgIHJldHVybiBkZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzYykgfHwgZGVzYztcbiAgfSwgZGVzYyk7XG5cbiAgaWYgKGNvbnRleHQgJiYgZGVzYy5pbml0aWFsaXplciAhPT0gdm9pZCAwKSB7XG4gICAgZGVzYy52YWx1ZSA9IGRlc2MuaW5pdGlhbGl6ZXIgPyBkZXNjLmluaXRpYWxpemVyLmNhbGwoY29udGV4dCkgOiB2b2lkIDA7XG4gICAgZGVzYy5pbml0aWFsaXplciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChkZXNjLmluaXRpYWxpemVyID09PSB2b2lkIDApIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzYyk7XG4gICAgZGVzYyA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gZGVzYztcbn1cbi8qKlxyXG4gKiBUaGlzIGRlY29yYXRvciBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgYSBnZXR0ZXIgb3IgbWV0aG9kIHN1Y2ggdGhhdFxyXG4gKiB0aGUgcmVzdWx0cyBhcmUgbGF6aWx5IGNvbXB1dGVkIG9uY2UsIGFuZCB0aGVuIGNhY2hlZC5cclxuICogQHByaXZhdGVcclxuICovXG5cblxuZnVuY3Rpb24gY2FjaGUodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSB7XG4gICAgdmFyIGdldCA9IGRlc2NyaXB0b3IuZ2V0O1xuXG4gICAgZGVzY3JpcHRvci5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXQuY2FsbCh0aGlzKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGZuID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHZhciBjYWNoZSA9IG5ldyBNYXAoKTtcblxuICAgICAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGtleSA9IGFyZ3MubGVuZ3RoID4gMCA/IGFyZ3NbMF0gOiAndmFsdWUnO1xuXG4gICAgICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgIGNhY2hlLnNldChrZXksIHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgICB2YWx1ZTogbWVtb2l6ZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbnZhciBTdWJIZWFkZXIgPSBuZXcgci5TdHJ1Y3Qoe1xuICBmaXJzdENvZGU6IHIudWludDE2LFxuICBlbnRyeUNvdW50OiByLnVpbnQxNixcbiAgaWREZWx0YTogci5pbnQxNixcbiAgaWRSYW5nZU9mZnNldDogci51aW50MTZcbn0pO1xudmFyIENtYXBHcm91cCA9IG5ldyByLlN0cnVjdCh7XG4gIHN0YXJ0Q2hhckNvZGU6IHIudWludDMyLFxuICBlbmRDaGFyQ29kZTogci51aW50MzIsXG4gIGdseXBoSUQ6IHIudWludDMyXG59KTtcbnZhciBVbmljb2RlVmFsdWVSYW5nZSA9IG5ldyByLlN0cnVjdCh7XG4gIHN0YXJ0VW5pY29kZVZhbHVlOiByLnVpbnQyNCxcbiAgYWRkaXRpb25hbENvdW50OiByLnVpbnQ4XG59KTtcbnZhciBVVlNNYXBwaW5nID0gbmV3IHIuU3RydWN0KHtcbiAgdW5pY29kZVZhbHVlOiByLnVpbnQyNCxcbiAgZ2x5cGhJRDogci51aW50MTZcbn0pO1xudmFyIERlZmF1bHRVVlMgPSBuZXcgci5BcnJheShVbmljb2RlVmFsdWVSYW5nZSwgci51aW50MzIpO1xudmFyIE5vbkRlZmF1bHRVVlMgPSBuZXcgci5BcnJheShVVlNNYXBwaW5nLCByLnVpbnQzMik7XG52YXIgVmFyU2VsZWN0b3JSZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICB2YXJTZWxlY3Rvcjogci51aW50MjQsXG4gIGRlZmF1bHRVVlM6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIERlZmF1bHRVVlMsIHtcbiAgICB0eXBlOiAncGFyZW50J1xuICB9KSxcbiAgbm9uRGVmYXVsdFVWUzogbmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgTm9uRGVmYXVsdFVWUywge1xuICAgIHR5cGU6ICdwYXJlbnQnXG4gIH0pXG59KTtcbnZhciBDbWFwU3VidGFibGUgPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3Qoci51aW50MTYsIHtcbiAgMDoge1xuICAgIC8vIEJ5dGUgZW5jb2RpbmdcbiAgICBsZW5ndGg6IHIudWludDE2LFxuICAgIC8vIFRvdGFsIHRhYmxlIGxlbmd0aCBpbiBieXRlcyAoc2V0IHRvIDI2MiBmb3IgZm9ybWF0IDApXG4gICAgbGFuZ3VhZ2U6IHIudWludDE2LFxuICAgIC8vIExhbmd1YWdlIGNvZGUgZm9yIHRoaXMgZW5jb2Rpbmcgc3VidGFibGUsIG9yIHplcm8gaWYgbGFuZ3VhZ2UtaW5kZXBlbmRlbnRcbiAgICBjb2RlTWFwOiBuZXcgci5MYXp5QXJyYXkoci51aW50OCwgMjU2KVxuICB9LFxuICAyOiB7XG4gICAgLy8gSGlnaC1ieXRlIG1hcHBpbmcgKENKSylcbiAgICBsZW5ndGg6IHIudWludDE2LFxuICAgIGxhbmd1YWdlOiByLnVpbnQxNixcbiAgICBzdWJIZWFkZXJLZXlzOiBuZXcgci5BcnJheShyLnVpbnQxNiwgMjU2KSxcbiAgICBzdWJIZWFkZXJDb3VudDogZnVuY3Rpb24gc3ViSGVhZGVyQ291bnQodCkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KE1hdGgsIHQuc3ViSGVhZGVyS2V5cyk7XG4gICAgfSxcbiAgICBzdWJIZWFkZXJzOiBuZXcgci5MYXp5QXJyYXkoU3ViSGVhZGVyLCAnc3ViSGVhZGVyQ291bnQnKSxcbiAgICBnbHlwaEluZGV4QXJyYXk6IG5ldyByLkxhenlBcnJheShyLnVpbnQxNiwgJ3N1YkhlYWRlckNvdW50JylcbiAgfSxcbiAgNDoge1xuICAgIC8vIFNlZ21lbnQgbWFwcGluZyB0byBkZWx0YSB2YWx1ZXNcbiAgICBsZW5ndGg6IHIudWludDE2LFxuICAgIC8vIFRvdGFsIHRhYmxlIGxlbmd0aCBpbiBieXRlc1xuICAgIGxhbmd1YWdlOiByLnVpbnQxNixcbiAgICAvLyBMYW5ndWFnZSBjb2RlXG4gICAgc2VnQ291bnRYMjogci51aW50MTYsXG4gICAgc2VnQ291bnQ6IGZ1bmN0aW9uIHNlZ0NvdW50KHQpIHtcbiAgICAgIHJldHVybiB0LnNlZ0NvdW50WDIgPj4gMTtcbiAgICB9LFxuICAgIHNlYXJjaFJhbmdlOiByLnVpbnQxNixcbiAgICBlbnRyeVNlbGVjdG9yOiByLnVpbnQxNixcbiAgICByYW5nZVNoaWZ0OiByLnVpbnQxNixcbiAgICBlbmRDb2RlOiBuZXcgci5MYXp5QXJyYXkoci51aW50MTYsICdzZWdDb3VudCcpLFxuICAgIHJlc2VydmVkUGFkOiBuZXcgci5SZXNlcnZlZChyLnVpbnQxNiksXG4gICAgLy8gVGhpcyB2YWx1ZSBzaG91bGQgYmUgemVyb1xuICAgIHN0YXJ0Q29kZTogbmV3IHIuTGF6eUFycmF5KHIudWludDE2LCAnc2VnQ291bnQnKSxcbiAgICBpZERlbHRhOiBuZXcgci5MYXp5QXJyYXkoci5pbnQxNiwgJ3NlZ0NvdW50JyksXG4gICAgaWRSYW5nZU9mZnNldDogbmV3IHIuTGF6eUFycmF5KHIudWludDE2LCAnc2VnQ291bnQnKSxcbiAgICBnbHlwaEluZGV4QXJyYXk6IG5ldyByLkxhenlBcnJheShyLnVpbnQxNiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiAodC5sZW5ndGggLSB0Ll9jdXJyZW50T2Zmc2V0KSAvIDI7XG4gICAgfSlcbiAgfSxcbiAgNjoge1xuICAgIC8vIFRyaW1tZWQgdGFibGVcbiAgICBsZW5ndGg6IHIudWludDE2LFxuICAgIGxhbmd1YWdlOiByLnVpbnQxNixcbiAgICBmaXJzdENvZGU6IHIudWludDE2LFxuICAgIGVudHJ5Q291bnQ6IHIudWludDE2LFxuICAgIGdseXBoSW5kaWNlczogbmV3IHIuTGF6eUFycmF5KHIudWludDE2LCAnZW50cnlDb3VudCcpXG4gIH0sXG4gIDg6IHtcbiAgICAvLyBtaXhlZCAxNi1iaXQgYW5kIDMyLWJpdCBjb3ZlcmFnZVxuICAgIHJlc2VydmVkOiBuZXcgci5SZXNlcnZlZChyLnVpbnQxNiksXG4gICAgbGVuZ3RoOiByLnVpbnQzMixcbiAgICBsYW5ndWFnZTogci51aW50MTYsXG4gICAgaXMzMjogbmV3IHIuTGF6eUFycmF5KHIudWludDgsIDgxOTIpLFxuICAgIG5Hcm91cHM6IHIudWludDMyLFxuICAgIGdyb3VwczogbmV3IHIuTGF6eUFycmF5KENtYXBHcm91cCwgJ25Hcm91cHMnKVxuICB9LFxuICAxMDoge1xuICAgIC8vIFRyaW1tZWQgQXJyYXlcbiAgICByZXNlcnZlZDogbmV3IHIuUmVzZXJ2ZWQoci51aW50MTYpLFxuICAgIGxlbmd0aDogci51aW50MzIsXG4gICAgbGFuZ3VhZ2U6IHIudWludDMyLFxuICAgIGZpcnN0Q29kZTogci51aW50MzIsXG4gICAgZW50cnlDb3VudDogci51aW50MzIsXG4gICAgZ2x5cGhJbmRpY2VzOiBuZXcgci5MYXp5QXJyYXkoci51aW50MTYsICdudW1DaGFycycpXG4gIH0sXG4gIDEyOiB7XG4gICAgLy8gU2VnbWVudGVkIGNvdmVyYWdlXG4gICAgcmVzZXJ2ZWQ6IG5ldyByLlJlc2VydmVkKHIudWludDE2KSxcbiAgICBsZW5ndGg6IHIudWludDMyLFxuICAgIGxhbmd1YWdlOiByLnVpbnQzMixcbiAgICBuR3JvdXBzOiByLnVpbnQzMixcbiAgICBncm91cHM6IG5ldyByLkxhenlBcnJheShDbWFwR3JvdXAsICduR3JvdXBzJylcbiAgfSxcbiAgMTM6IHtcbiAgICAvLyBNYW55LXRvLW9uZSByYW5nZSBtYXBwaW5ncyAoc2FtZSBhcyAxMiBleGNlcHQgZm9yIGdyb3VwLnN0YXJ0R2x5cGhJRClcbiAgICByZXNlcnZlZDogbmV3IHIuUmVzZXJ2ZWQoci51aW50MTYpLFxuICAgIGxlbmd0aDogci51aW50MzIsXG4gICAgbGFuZ3VhZ2U6IHIudWludDMyLFxuICAgIG5Hcm91cHM6IHIudWludDMyLFxuICAgIGdyb3VwczogbmV3IHIuTGF6eUFycmF5KENtYXBHcm91cCwgJ25Hcm91cHMnKVxuICB9LFxuICAxNDoge1xuICAgIC8vIFVuaWNvZGUgVmFyaWF0aW9uIFNlcXVlbmNlc1xuICAgIGxlbmd0aDogci51aW50MzIsXG4gICAgbnVtUmVjb3Jkczogci51aW50MzIsXG4gICAgdmFyU2VsZWN0b3JzOiBuZXcgci5MYXp5QXJyYXkoVmFyU2VsZWN0b3JSZWNvcmQsICdudW1SZWNvcmRzJylcbiAgfVxufSk7XG52YXIgQ21hcEVudHJ5ID0gbmV3IHIuU3RydWN0KHtcbiAgcGxhdGZvcm1JRDogci51aW50MTYsXG4gIC8vIFBsYXRmb3JtIGlkZW50aWZpZXJcbiAgZW5jb2RpbmdJRDogci51aW50MTYsXG4gIC8vIFBsYXRmb3JtLXNwZWNpZmljIGVuY29kaW5nIGlkZW50aWZpZXJcbiAgdGFibGU6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIENtYXBTdWJ0YWJsZSwge1xuICAgIHR5cGU6ICdwYXJlbnQnLFxuICAgIGxhenk6IHRydWVcbiAgfSlcbn0pOyAvLyBjaGFyYWN0ZXIgdG8gZ2x5cGggbWFwcGluZ1xuXG52YXIgY21hcCA9IG5ldyByLlN0cnVjdCh7XG4gIHZlcnNpb246IHIudWludDE2LFxuICBudW1TdWJ0YWJsZXM6IHIudWludDE2LFxuICB0YWJsZXM6IG5ldyByLkFycmF5KENtYXBFbnRyeSwgJ251bVN1YnRhYmxlcycpXG59KTtcbnZhciBoZWFkID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci5pbnQzMixcbiAgLy8gMHgwMDAxMDAwMCAodmVyc2lvbiAxLjApXG4gIHJldmlzaW9uOiByLmludDMyLFxuICAvLyBzZXQgYnkgZm9udCBtYW51ZmFjdHVyZXJcbiAgY2hlY2tTdW1BZGp1c3RtZW50OiByLnVpbnQzMixcbiAgbWFnaWNOdW1iZXI6IHIudWludDMyLFxuICAvLyBzZXQgdG8gMHg1RjBGM0NGNVxuICBmbGFnczogci51aW50MTYsXG4gIHVuaXRzUGVyRW06IHIudWludDE2LFxuICAvLyByYW5nZSBmcm9tIDY0IHRvIDE2Mzg0XG4gIGNyZWF0ZWQ6IG5ldyByLkFycmF5KHIuaW50MzIsIDIpLFxuICBtb2RpZmllZDogbmV3IHIuQXJyYXkoci5pbnQzMiwgMiksXG4gIHhNaW46IHIuaW50MTYsXG4gIC8vIGZvciBhbGwgZ2x5cGggYm91bmRpbmcgYm94ZXNcbiAgeU1pbjogci5pbnQxNixcbiAgLy8gZm9yIGFsbCBnbHlwaCBib3VuZGluZyBib3hlc1xuICB4TWF4OiByLmludDE2LFxuICAvLyBmb3IgYWxsIGdseXBoIGJvdW5kaW5nIGJveGVzXG4gIHlNYXg6IHIuaW50MTYsXG4gIC8vIGZvciBhbGwgZ2x5cGggYm91bmRpbmcgYm94ZXNcbiAgbWFjU3R5bGU6IG5ldyByLkJpdGZpZWxkKHIudWludDE2LCBbJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZScsICdvdXRsaW5lJywgJ3NoYWRvdycsICdjb25kZW5zZWQnLCAnZXh0ZW5kZWQnXSksXG4gIGxvd2VzdFJlY1BQRU06IHIudWludDE2LFxuICAvLyBzbWFsbGVzdCByZWFkYWJsZSBzaXplIGluIHBpeGVsc1xuICBmb250RGlyZWN0aW9uSGludDogci5pbnQxNixcbiAgaW5kZXhUb0xvY0Zvcm1hdDogci5pbnQxNixcbiAgLy8gMCBmb3Igc2hvcnQgb2Zmc2V0cywgMSBmb3IgbG9uZ1xuICBnbHlwaERhdGFGb3JtYXQ6IHIuaW50MTYgLy8gMCBmb3IgY3VycmVudCBmb3JtYXRcblxufSk7XG52YXIgaGhlYSA9IG5ldyByLlN0cnVjdCh7XG4gIHZlcnNpb246IHIuaW50MzIsXG4gIGFzY2VudDogci5pbnQxNixcbiAgLy8gRGlzdGFuY2UgZnJvbSBiYXNlbGluZSBvZiBoaWdoZXN0IGFzY2VuZGVyXG4gIGRlc2NlbnQ6IHIuaW50MTYsXG4gIC8vIERpc3RhbmNlIGZyb20gYmFzZWxpbmUgb2YgbG93ZXN0IGRlc2NlbmRlclxuICBsaW5lR2FwOiByLmludDE2LFxuICAvLyBUeXBvZ3JhcGhpYyBsaW5lIGdhcFxuICBhZHZhbmNlV2lkdGhNYXg6IHIudWludDE2LFxuICAvLyBNYXhpbXVtIGFkdmFuY2Ugd2lkdGggdmFsdWUgaW4gJ2htdHgnIHRhYmxlXG4gIG1pbkxlZnRTaWRlQmVhcmluZzogci5pbnQxNixcbiAgLy8gTWF4aW11bSBhZHZhbmNlIHdpZHRoIHZhbHVlIGluICdobXR4JyB0YWJsZVxuICBtaW5SaWdodFNpZGVCZWFyaW5nOiByLmludDE2LFxuICAvLyBNaW5pbXVtIHJpZ2h0IHNpZGViZWFyaW5nIHZhbHVlXG4gIHhNYXhFeHRlbnQ6IHIuaW50MTYsXG4gIGNhcmV0U2xvcGVSaXNlOiByLmludDE2LFxuICAvLyBVc2VkIHRvIGNhbGN1bGF0ZSB0aGUgc2xvcGUgb2YgdGhlIGN1cnNvciAocmlzZS9ydW4pOyAxIGZvciB2ZXJ0aWNhbFxuICBjYXJldFNsb3BlUnVuOiByLmludDE2LFxuICAvLyAwIGZvciB2ZXJ0aWNhbFxuICBjYXJldE9mZnNldDogci5pbnQxNixcbiAgLy8gU2V0IHRvIDAgZm9yIG5vbi1zbGFudGVkIGZvbnRzXG4gIHJlc2VydmVkOiBuZXcgci5SZXNlcnZlZChyLmludDE2LCA0KSxcbiAgbWV0cmljRGF0YUZvcm1hdDogci5pbnQxNixcbiAgLy8gMCBmb3IgY3VycmVudCBmb3JtYXRcbiAgbnVtYmVyT2ZNZXRyaWNzOiByLnVpbnQxNiAvLyBOdW1iZXIgb2YgYWR2YW5jZSB3aWR0aHMgaW4gJ2htdHgnIHRhYmxlXG5cbn0pO1xudmFyIEhtdHhFbnRyeSA9IG5ldyByLlN0cnVjdCh7XG4gIGFkdmFuY2U6IHIudWludDE2LFxuICBiZWFyaW5nOiByLmludDE2XG59KTtcbnZhciBobXR4ID0gbmV3IHIuU3RydWN0KHtcbiAgbWV0cmljczogbmV3IHIuTGF6eUFycmF5KEhtdHhFbnRyeSwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5wYXJlbnQuaGhlYS5udW1iZXJPZk1ldHJpY3M7XG4gIH0pLFxuICBiZWFyaW5nczogbmV3IHIuTGF6eUFycmF5KHIuaW50MTYsIGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHQucGFyZW50Lm1heHAubnVtR2x5cGhzIC0gdC5wYXJlbnQuaGhlYS5udW1iZXJPZk1ldHJpY3M7XG4gIH0pXG59KTtcbnZhciBtYXhwID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci5pbnQzMixcbiAgbnVtR2x5cGhzOiByLnVpbnQxNixcbiAgLy8gVGhlIG51bWJlciBvZiBnbHlwaHMgaW4gdGhlIGZvbnRcbiAgbWF4UG9pbnRzOiByLnVpbnQxNixcbiAgLy8gTWF4aW11bSBwb2ludHMgaW4gYSBub24tY29tcG9zaXRlIGdseXBoXG4gIG1heENvbnRvdXJzOiByLnVpbnQxNixcbiAgLy8gTWF4aW11bSBjb250b3VycyBpbiBhIG5vbi1jb21wb3NpdGUgZ2x5cGhcbiAgbWF4Q29tcG9uZW50UG9pbnRzOiByLnVpbnQxNixcbiAgLy8gTWF4aW11bSBwb2ludHMgaW4gYSBjb21wb3NpdGUgZ2x5cGhcbiAgbWF4Q29tcG9uZW50Q29udG91cnM6IHIudWludDE2LFxuICAvLyBNYXhpbXVtIGNvbnRvdXJzIGluIGEgY29tcG9zaXRlIGdseXBoXG4gIG1heFpvbmVzOiByLnVpbnQxNixcbiAgLy8gMSBpZiBpbnN0cnVjdGlvbnMgZG8gbm90IHVzZSB0aGUgdHdpbGlnaHQgem9uZSwgMiBvdGhlcndpc2VcbiAgbWF4VHdpbGlnaHRQb2ludHM6IHIudWludDE2LFxuICAvLyBNYXhpbXVtIHBvaW50cyB1c2VkIGluIFowXG4gIG1heFN0b3JhZ2U6IHIudWludDE2LFxuICAvLyBOdW1iZXIgb2YgU3RvcmFnZSBBcmVhIGxvY2F0aW9uc1xuICBtYXhGdW5jdGlvbkRlZnM6IHIudWludDE2LFxuICAvLyBOdW1iZXIgb2YgRkRFRnNcbiAgbWF4SW5zdHJ1Y3Rpb25EZWZzOiByLnVpbnQxNixcbiAgLy8gTnVtYmVyIG9mIElERUZzXG4gIG1heFN0YWNrRWxlbWVudHM6IHIudWludDE2LFxuICAvLyBNYXhpbXVtIHN0YWNrIGRlcHRoXG4gIG1heFNpemVPZkluc3RydWN0aW9uczogci51aW50MTYsXG4gIC8vIE1heGltdW0gYnl0ZSBjb3VudCBmb3IgZ2x5cGggaW5zdHJ1Y3Rpb25zXG4gIG1heENvbXBvbmVudEVsZW1lbnRzOiByLnVpbnQxNixcbiAgLy8gTWF4aW11bSBudW1iZXIgb2YgY29tcG9uZW50cyByZWZlcmVuY2VkIGF0IOKAnHRvcCBsZXZlbOKAnSBmb3IgYW55IGNvbXBvc2l0ZSBnbHlwaFxuICBtYXhDb21wb25lbnREZXB0aDogci51aW50MTYgLy8gTWF4aW11bSBsZXZlbHMgb2YgcmVjdXJzaW9uOyAxIGZvciBzaW1wbGUgY29tcG9uZW50c1xuXG59KTtcbi8qKlxyXG4gKiBHZXRzIGFuIGVuY29kaW5nIG5hbWUgZnJvbSBwbGF0Zm9ybSwgZW5jb2RpbmcsIGFuZCBsYW5ndWFnZSBpZHMuXHJcbiAqIFJldHVybmVkIGVuY29kaW5nIG5hbWVzIGNhbiBiZSB1c2VkIGluIGljb252LWxpdGUgdG8gZGVjb2RlIHRleHQuXHJcbiAqL1xuXG5mdW5jdGlvbiBnZXRFbmNvZGluZyhwbGF0Zm9ybUlELCBlbmNvZGluZ0lELCBsYW5ndWFnZUlEKSB7XG4gIGlmIChsYW5ndWFnZUlEID09PSB2b2lkIDApIHtcbiAgICBsYW5ndWFnZUlEID0gMDtcbiAgfVxuXG4gIGlmIChwbGF0Zm9ybUlEID09PSAxICYmIE1BQ19MQU5HVUFHRV9FTkNPRElOR1NbbGFuZ3VhZ2VJRF0pIHtcbiAgICByZXR1cm4gTUFDX0xBTkdVQUdFX0VOQ09ESU5HU1tsYW5ndWFnZUlEXTtcbiAgfVxuXG4gIHJldHVybiBFTkNPRElOR1NbcGxhdGZvcm1JRF1bZW5jb2RpbmdJRF07XG59IC8vIE1hcCBvZiBwbGF0Zm9ybSBpZHMgdG8gZW5jb2RpbmcgaWRzLlxuXG5cbnZhciBFTkNPRElOR1MgPSBbLy8gdW5pY29kZVxuWyd1dGYxNmJlJywgJ3V0ZjE2YmUnLCAndXRmMTZiZScsICd1dGYxNmJlJywgJ3V0ZjE2YmUnLCAndXRmMTZiZSddLCAvLyBtYWNpbnRvc2hcbi8vIE1hcHBpbmdzIGF2YWlsYWJsZSBhdCBodHRwOi8vdW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvQVBQTEUvXG4vLyAwXHRSb21hbiAgICAgICAgICAgICAgICAgMTdcdE1hbGF5YWxhbVxuLy8gMVx0SmFwYW5lc2VcdCAgICAgICAgICAgIDE4XHRTaW5oYWxlc2Vcbi8vIDJcdFRyYWRpdGlvbmFsIENoaW5lc2VcdCAgMTlcdEJ1cm1lc2Vcbi8vIDNcdEtvcmVhblx0ICAgICAgICAgICAgICAyMFx0S2htZXJcbi8vIDRcdEFyYWJpY1x0ICAgICAgICAgICAgICAyMVx0VGhhaVxuLy8gNVx0SGVicmV3XHQgICAgICAgICAgICAgIDIyXHRMYW90aWFuXG4vLyA2XHRHcmVla1x0ICAgICAgICAgICAgICAgIDIzXHRHZW9yZ2lhblxuLy8gN1x0UnVzc2lhblx0ICAgICAgICAgICAgICAyNFx0QXJtZW5pYW5cbi8vIDhcdFJTeW1ib2xcdCAgICAgICAgICAgICAgMjVcdFNpbXBsaWZpZWQgQ2hpbmVzZVxuLy8gOVx0RGV2YW5hZ2FyaVx0ICAgICAgICAgIDI2XHRUaWJldGFuXG4vLyAxMFx0R3VybXVraGlcdCAgICAgICAgICAgIDI3XHRNb25nb2xpYW5cbi8vIDExXHRHdWphcmF0aVx0ICAgICAgICAgICAgMjhcdEdlZXpcbi8vIDEyXHRPcml5YVx0ICAgICAgICAgICAgICAgIDI5XHRTbGF2aWNcbi8vIDEzXHRCZW5nYWxpXHQgICAgICAgICAgICAgIDMwXHRWaWV0bmFtZXNlXG4vLyAxNFx0VGFtaWxcdCAgICAgICAgICAgICAgICAzMVx0U2luZGhpXG4vLyAxNVx0VGVsdWd1XHQgICAgICAgICAgICAgIDMyXHQoVW5pbnRlcnByZXRlZClcbi8vIDE2XHRLYW5uYWRhXG5bJ21hY3JvbWFuJywgJ3NoaWZ0LWppcycsICdiaWc1JywgJ2V1Yy1rcicsICdpc28tODg1OS02JywgJ2lzby04ODU5LTgnLCAnbWFjZ3JlZWsnLCAnbWFjY3lyaWxsaWMnLCAnc3ltYm9sJywgJ0RldmFuYWdhcmknLCAnR3VybXVraGknLCAnR3VqYXJhdGknLCAnT3JpeWEnLCAnQmVuZ2FsaScsICdUYW1pbCcsICdUZWx1Z3UnLCAnS2FubmFkYScsICdNYWxheWFsYW0nLCAnU2luaGFsZXNlJywgJ0J1cm1lc2UnLCAnS2htZXInLCAnbWFjdGhhaScsICdMYW90aWFuJywgJ0dlb3JnaWFuJywgJ0FybWVuaWFuJywgJ2diLTIzMTItODAnLCAnVGliZXRhbicsICdNb25nb2xpYW4nLCAnR2VleicsICdtYWNjZW50ZXVybycsICdWaWV0bmFtZXNlJywgJ1NpbmRoaSddLCAvLyBJU08gKGRlcHJlY2F0ZWQpXG5bJ2FzY2lpJ10sIC8vIHdpbmRvd3Ncbi8vIERvY3MgaGVyZTogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3N5c3RlbS50ZXh0LmVuY29kaW5nKHY9dnMuMTEwKS5hc3B4XG5bJ3N5bWJvbCcsICd1dGYxNmJlJywgJ3NoaWZ0LWppcycsICdnYjE4MDMwJywgJ2JpZzUnLCAnd2Fuc3VuZycsICdqb2hhYicsIG51bGwsIG51bGwsIG51bGwsICd1dGYxNmJlJ11dOyAvLyBPdmVycmlkZXMgZm9yIE1hYyBzY3JpcHRzIGJ5IGxhbmd1YWdlIGlkLlxuLy8gU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9BUFBMRS9SZWFkbWUudHh0XG5cbnZhciBNQUNfTEFOR1VBR0VfRU5DT0RJTkdTID0ge1xuICAxNTogJ21hY2ljZWxhbmQnLFxuICAxNzogJ21hY3R1cmtpc2gnLFxuICAxODogJ21hY2Nyb2F0aWFuJyxcbiAgMjQ6ICdtYWNjZW50ZXVybycsXG4gIDI1OiAnbWFjY2VudGV1cm8nLFxuICAyNjogJ21hY2NlbnRldXJvJyxcbiAgMjc6ICdtYWNjZW50ZXVybycsXG4gIDI4OiAnbWFjY2VudGV1cm8nLFxuICAzMDogJ21hY2ljZWxhbmQnLFxuICAzNzogJ21hY3JvbWFuaWEnLFxuICAzODogJ21hY2NlbnRldXJvJyxcbiAgMzk6ICdtYWNjZW50ZXVybycsXG4gIDQwOiAnbWFjY2VudGV1cm8nLFxuICAxNDM6ICdtYWNpbnVpdCcsXG4gIC8vIFVuc3VwcG9ydGVkIGJ5IGljb252LWxpdGVcbiAgMTQ2OiAnbWFjZ2FlbGljJyAvLyBVbnN1cHBvcnRlZCBieSBpY29udi1saXRlXG5cbn07IC8vIE1hcCBvZiBwbGF0Zm9ybSBpZHMgdG8gQkNQLTQ3IGxhbmd1YWdlIGNvZGVzLlxuXG52YXIgTEFOR1VBR0VTID0gWy8vIHVuaWNvZGVcbltdLCB7XG4gIC8vIG1hY2ludG9zaFxuICAwOiAnZW4nLFxuICAzMDogJ2ZvJyxcbiAgNjA6ICdrcycsXG4gIDkwOiAncncnLFxuICAxOiAnZnInLFxuICAzMTogJ2ZhJyxcbiAgNjE6ICdrdScsXG4gIDkxOiAncm4nLFxuICAyOiAnZGUnLFxuICAzMjogJ3J1JyxcbiAgNjI6ICdzZCcsXG4gIDkyOiAnbnknLFxuICAzOiAnaXQnLFxuICAzMzogJ3poJyxcbiAgNjM6ICdibycsXG4gIDkzOiAnbWcnLFxuICA0OiAnbmwnLFxuICAzNDogJ25sLUJFJyxcbiAgNjQ6ICduZScsXG4gIDk0OiAnZW8nLFxuICA1OiAnc3YnLFxuICAzNTogJ2dhJyxcbiAgNjU6ICdzYScsXG4gIDEyODogJ2N5JyxcbiAgNjogJ2VzJyxcbiAgMzY6ICdzcScsXG4gIDY2OiAnbXInLFxuICAxMjk6ICdldScsXG4gIDc6ICdkYScsXG4gIDM3OiAncm8nLFxuICA2NzogJ2JuJyxcbiAgMTMwOiAnY2EnLFxuICA4OiAncHQnLFxuICAzODogJ2N6JyxcbiAgNjg6ICdhcycsXG4gIDEzMTogJ2xhJyxcbiAgOTogJ25vJyxcbiAgMzk6ICdzaycsXG4gIDY5OiAnZ3UnLFxuICAxMzI6ICdxdScsXG4gIDEwOiAnaGUnLFxuICA0MDogJ3NpJyxcbiAgNzA6ICdwYScsXG4gIDEzMzogJ2duJyxcbiAgMTE6ICdqYScsXG4gIDQxOiAneWknLFxuICA3MTogJ29yJyxcbiAgMTM0OiAnYXknLFxuICAxMjogJ2FyJyxcbiAgNDI6ICdzcicsXG4gIDcyOiAnbWwnLFxuICAxMzU6ICd0dCcsXG4gIDEzOiAnZmknLFxuICA0MzogJ21rJyxcbiAgNzM6ICdrbicsXG4gIDEzNjogJ3VnJyxcbiAgMTQ6ICdlbCcsXG4gIDQ0OiAnYmcnLFxuICA3NDogJ3RhJyxcbiAgMTM3OiAnZHonLFxuICAxNTogJ2lzJyxcbiAgNDU6ICd1aycsXG4gIDc1OiAndGUnLFxuICAxMzg6ICdqdicsXG4gIDE2OiAnbXQnLFxuICA0NjogJ2JlJyxcbiAgNzY6ICdzaScsXG4gIDEzOTogJ3N1JyxcbiAgMTc6ICd0cicsXG4gIDQ3OiAndXonLFxuICA3NzogJ215JyxcbiAgMTQwOiAnZ2wnLFxuICAxODogJ2hyJyxcbiAgNDg6ICdraycsXG4gIDc4OiAna20nLFxuICAxNDE6ICdhZicsXG4gIDE5OiAnemgtSGFudCcsXG4gIDQ5OiAnYXotQ3lybCcsXG4gIDc5OiAnbG8nLFxuICAxNDI6ICdicicsXG4gIDIwOiAndXInLFxuICA1MDogJ2F6LUFyYWInLFxuICA4MDogJ3ZpJyxcbiAgMTQzOiAnaXUnLFxuICAyMTogJ2hpJyxcbiAgNTE6ICdoeScsXG4gIDgxOiAnaWQnLFxuICAxNDQ6ICdnZCcsXG4gIDIyOiAndGgnLFxuICA1MjogJ2thJyxcbiAgODI6ICd0bCcsXG4gIDE0NTogJ2d2JyxcbiAgMjM6ICdrbycsXG4gIDUzOiAnbW8nLFxuICA4MzogJ21zJyxcbiAgMTQ2OiAnZ2EnLFxuICAyNDogJ2x0JyxcbiAgNTQ6ICdreScsXG4gIDg0OiAnbXMtQXJhYicsXG4gIDE0NzogJ3RvJyxcbiAgMjU6ICdwbCcsXG4gIDU1OiAndGcnLFxuICA4NTogJ2FtJyxcbiAgMTQ4OiAnZWwtcG9seXRvbicsXG4gIDI2OiAnaHUnLFxuICA1NjogJ3RrJyxcbiAgODY6ICd0aScsXG4gIDE0OTogJ2tsJyxcbiAgMjc6ICdlcycsXG4gIDU3OiAnbW4tQ04nLFxuICA4NzogJ29tJyxcbiAgMTUwOiAnYXonLFxuICAyODogJ2x2JyxcbiAgNTg6ICdtbicsXG4gIDg4OiAnc28nLFxuICAxNTE6ICdubicsXG4gIDI5OiAnc2UnLFxuICA1OTogJ3BzJyxcbiAgODk6ICdzdydcbn0sIC8vIElTTyAoZGVwcmVjYXRlZClcbltdLCB7XG4gIC8vIHdpbmRvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIDB4MDQzNjogJ2FmJyxcbiAgMHg0MDA5OiAnZW4tSU4nLFxuICAweDA0ODc6ICdydycsXG4gIDB4MDQzMjogJ3RuJyxcbiAgMHgwNDFDOiAnc3EnLFxuICAweDE4MDk6ICdlbi1JRScsXG4gIDB4MDQ0MTogJ3N3JyxcbiAgMHgwNDVCOiAnc2knLFxuICAweDA0ODQ6ICdnc3cnLFxuICAweDIwMDk6ICdlbi1KTScsXG4gIDB4MDQ1NzogJ2tvaycsXG4gIDB4MDQxQjogJ3NrJyxcbiAgMHgwNDVFOiAnYW0nLFxuICAweDQ0MDk6ICdlbi1NWScsXG4gIDB4MDQxMjogJ2tvJyxcbiAgMHgwNDI0OiAnc2wnLFxuICAweDE0MDE6ICdhci1EWicsXG4gIDB4MTQwOTogJ2VuLU5aJyxcbiAgMHgwNDQwOiAna3knLFxuICAweDJDMEE6ICdlcy1BUicsXG4gIDB4M0MwMTogJ2FyLUJIJyxcbiAgMHgzNDA5OiAnZW4tUEgnLFxuICAweDA0NTQ6ICdsbycsXG4gIDB4NDAwQTogJ2VzLUJPJyxcbiAgMHgwQzAxOiAnYXInLFxuICAweDQ4MDk6ICdlbi1TRycsXG4gIDB4MDQyNjogJ2x2JyxcbiAgMHgzNDBBOiAnZXMtQ0wnLFxuICAweDA4MDE6ICdhci1JUScsXG4gIDB4MUMwOTogJ2VuLVpBJyxcbiAgMHgwNDI3OiAnbHQnLFxuICAweDI0MEE6ICdlcy1DTycsXG4gIDB4MkMwMTogJ2FyLUpPJyxcbiAgMHgyQzA5OiAnZW4tVFQnLFxuICAweDA4MkU6ICdkc2InLFxuICAweDE0MEE6ICdlcy1DUicsXG4gIDB4MzQwMTogJ2FyLUtXJyxcbiAgMHgwODA5OiAnZW4tR0InLFxuICAweDA0NkU6ICdsYicsXG4gIDB4MUMwQTogJ2VzLURPJyxcbiAgMHgzMDAxOiAnYXItTEInLFxuICAweDA0MDk6ICdlbicsXG4gIDB4MDQyRjogJ21rJyxcbiAgMHgzMDBBOiAnZXMtRUMnLFxuICAweDEwMDE6ICdhci1MWScsXG4gIDB4MzAwOTogJ2VuLVpXJyxcbiAgMHgwODNFOiAnbXMtQk4nLFxuICAweDQ0MEE6ICdlcy1TVicsXG4gIDB4MTgwMTogJ2FyeScsXG4gIDB4MDQyNTogJ2V0JyxcbiAgMHgwNDNFOiAnbXMnLFxuICAweDEwMEE6ICdlcy1HVCcsXG4gIDB4MjAwMTogJ2FyLU9NJyxcbiAgMHgwNDM4OiAnZm8nLFxuICAweDA0NEM6ICdtbCcsXG4gIDB4NDgwQTogJ2VzLUhOJyxcbiAgMHg0MDAxOiAnYXItUUEnLFxuICAweDA0NjQ6ICdmaWwnLFxuICAweDA0M0E6ICdtdCcsXG4gIDB4MDgwQTogJ2VzLU1YJyxcbiAgMHgwNDAxOiAnYXItU0EnLFxuICAweDA0MEI6ICdmaScsXG4gIDB4MDQ4MTogJ21pJyxcbiAgMHg0QzBBOiAnZXMtTkknLFxuICAweDI4MDE6ICdhci1TWScsXG4gIDB4MDgwQzogJ2ZyLUJFJyxcbiAgMHgwNDdBOiAnYXJuJyxcbiAgMHgxODBBOiAnZXMtUEEnLFxuICAweDFDMDE6ICdhZWInLFxuICAweDBDMEM6ICdmci1DQScsXG4gIDB4MDQ0RTogJ21yJyxcbiAgMHgzQzBBOiAnZXMtUFknLFxuICAweDM4MDE6ICdhci1BRScsXG4gIDB4MDQwQzogJ2ZyJyxcbiAgMHgwNDdDOiAnbW9oJyxcbiAgMHgyODBBOiAnZXMtUEUnLFxuICAweDI0MDE6ICdhci1ZRScsXG4gIDB4MTQwQzogJ2ZyLUxVJyxcbiAgMHgwNDUwOiAnbW4nLFxuICAweDUwMEE6ICdlcy1QUicsXG4gIDB4MDQyQjogJ2h5JyxcbiAgMHgxODBDOiAnZnItTUMnLFxuICAweDA4NTA6ICdtbi1DTicsXG4gIDB4MEMwQTogJ2VzJyxcbiAgMHgwNDREOiAnYXMnLFxuICAweDEwMEM6ICdmci1DSCcsXG4gIDB4MDQ2MTogJ25lJyxcbiAgMHgwNDBBOiAnZXMnLFxuICAweDA4MkM6ICdhei1DeXJsJyxcbiAgMHgwNDYyOiAnZnknLFxuICAweDA0MTQ6ICduYicsXG4gIDB4NTQwQTogJ2VzLVVTJyxcbiAgMHgwNDJDOiAnYXonLFxuICAweDA0NTY6ICdnbCcsXG4gIDB4MDgxNDogJ25uJyxcbiAgMHgzODBBOiAnZXMtVVknLFxuICAweDA0NkQ6ICdiYScsXG4gIDB4MDQzNzogJ2thJyxcbiAgMHgwNDgyOiAnb2MnLFxuICAweDIwMEE6ICdlcy1WRScsXG4gIDB4MDQyRDogJ2V1JyxcbiAgMHgwQzA3OiAnZGUtQVQnLFxuICAweDA0NDg6ICdvcicsXG4gIDB4MDgxRDogJ3N2LUZJJyxcbiAgMHgwNDIzOiAnYmUnLFxuICAweDA0MDc6ICdkZScsXG4gIDB4MDQ2MzogJ3BzJyxcbiAgMHgwNDFEOiAnc3YnLFxuICAweDA4NDU6ICdibicsXG4gIDB4MTQwNzogJ2RlLUxJJyxcbiAgMHgwNDE1OiAncGwnLFxuICAweDA0NUE6ICdzeXInLFxuICAweDA0NDU6ICdibi1JTicsXG4gIDB4MTAwNzogJ2RlLUxVJyxcbiAgMHgwNDE2OiAncHQnLFxuICAweDA0Mjg6ICd0ZycsXG4gIDB4MjAxQTogJ2JzLUN5cmwnLFxuICAweDA4MDc6ICdkZS1DSCcsXG4gIDB4MDgxNjogJ3B0LVBUJyxcbiAgMHgwODVGOiAndHptJyxcbiAgMHgxNDFBOiAnYnMnLFxuICAweDA0MDg6ICdlbCcsXG4gIDB4MDQ0NjogJ3BhJyxcbiAgMHgwNDQ5OiAndGEnLFxuICAweDA0N0U6ICdicicsXG4gIDB4MDQ2RjogJ2tsJyxcbiAgMHgwNDZCOiAncXUtQk8nLFxuICAweDA0NDQ6ICd0dCcsXG4gIDB4MDQwMjogJ2JnJyxcbiAgMHgwNDQ3OiAnZ3UnLFxuICAweDA4NkI6ICdxdS1FQycsXG4gIDB4MDQ0QTogJ3RlJyxcbiAgMHgwNDAzOiAnY2EnLFxuICAweDA0Njg6ICdoYScsXG4gIDB4MEM2QjogJ3F1JyxcbiAgMHgwNDFFOiAndGgnLFxuICAweDBDMDQ6ICd6aC1ISycsXG4gIDB4MDQwRDogJ2hlJyxcbiAgMHgwNDE4OiAncm8nLFxuICAweDA0NTE6ICdibycsXG4gIDB4MTQwNDogJ3poLU1PJyxcbiAgMHgwNDM5OiAnaGknLFxuICAweDA0MTc6ICdybScsXG4gIDB4MDQxRjogJ3RyJyxcbiAgMHgwODA0OiAnemgnLFxuICAweDA0MEU6ICdodScsXG4gIDB4MDQxOTogJ3J1JyxcbiAgMHgwNDQyOiAndGsnLFxuICAweDEwMDQ6ICd6aC1TRycsXG4gIDB4MDQwRjogJ2lzJyxcbiAgMHgyNDNCOiAnc21uJyxcbiAgMHgwNDgwOiAndWcnLFxuICAweDA0MDQ6ICd6aC1UVycsXG4gIDB4MDQ3MDogJ2lnJyxcbiAgMHgxMDNCOiAnc21qLU5PJyxcbiAgMHgwNDIyOiAndWsnLFxuICAweDA0ODM6ICdjbycsXG4gIDB4MDQyMTogJ2lkJyxcbiAgMHgxNDNCOiAnc21qJyxcbiAgMHgwNDJFOiAnaHNiJyxcbiAgMHgwNDFBOiAnaHInLFxuICAweDA0NUQ6ICdpdScsXG4gIDB4MEMzQjogJ3NlLUZJJyxcbiAgMHgwNDIwOiAndXInLFxuICAweDEwMUE6ICdoci1CQScsXG4gIDB4MDg1RDogJ2l1LUxhdG4nLFxuICAweDA0M0I6ICdzZScsXG4gIDB4MDg0MzogJ3V6LUN5cmwnLFxuICAweDA0MDU6ICdjcycsXG4gIDB4MDgzQzogJ2dhJyxcbiAgMHgwODNCOiAnc2UtU0UnLFxuICAweDA0NDM6ICd1eicsXG4gIDB4MDQwNjogJ2RhJyxcbiAgMHgwNDM0OiAneGgnLFxuICAweDIwM0I6ICdzbXMnLFxuICAweDA0MkE6ICd2aScsXG4gIDB4MDQ4QzogJ3BycycsXG4gIDB4MDQzNTogJ3p1JyxcbiAgMHgxODNCOiAnc21hLU5PJyxcbiAgMHgwNDUyOiAnY3knLFxuICAweDA0NjU6ICdkdicsXG4gIDB4MDQxMDogJ2l0JyxcbiAgMHgxQzNCOiAnc21zJyxcbiAgMHgwNDg4OiAnd28nLFxuICAweDA4MTM6ICdubC1CRScsXG4gIDB4MDgxMDogJ2l0LUNIJyxcbiAgMHgwNDRGOiAnc2EnLFxuICAweDA0ODU6ICdzYWgnLFxuICAweDA0MTM6ICdubCcsXG4gIDB4MDQxMTogJ2phJyxcbiAgMHgxQzFBOiAnc3ItQ3lybC1CQScsXG4gIDB4MDQ3ODogJ2lpJyxcbiAgMHgwQzA5OiAnZW4tQVUnLFxuICAweDA0NEI6ICdrbicsXG4gIDB4MEMxQTogJ3NyJyxcbiAgMHgwNDZBOiAneW8nLFxuICAweDI4MDk6ICdlbi1CWicsXG4gIDB4MDQzRjogJ2trJyxcbiAgMHgxODFBOiAnc3ItTGF0bi1CQScsXG4gIDB4MTAwOTogJ2VuLUNBJyxcbiAgMHgwNDUzOiAna20nLFxuICAweDA4MUE6ICdzci1MYXRuJyxcbiAgMHgyNDA5OiAnZW4tMDI5JyxcbiAgMHgwNDg2OiAncXVjJyxcbiAgMHgwNDZDOiAnbnNvJ1xufV07XG52YXIgTmFtZVJlY29yZCA9IG5ldyByLlN0cnVjdCh7XG4gIHBsYXRmb3JtSUQ6IHIudWludDE2LFxuICBlbmNvZGluZ0lEOiByLnVpbnQxNixcbiAgbGFuZ3VhZ2VJRDogci51aW50MTYsXG4gIG5hbWVJRDogci51aW50MTYsXG4gIGxlbmd0aDogci51aW50MTYsXG4gIHN0cmluZzogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgbmV3IHIuU3RyaW5nKCdsZW5ndGgnLCBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBnZXRFbmNvZGluZyh0LnBsYXRmb3JtSUQsIHQuZW5jb2RpbmdJRCwgdC5sYW5ndWFnZUlEKTtcbiAgfSksIHtcbiAgICB0eXBlOiAncGFyZW50JyxcbiAgICByZWxhdGl2ZVRvOiBmdW5jdGlvbiByZWxhdGl2ZVRvKGN0eCkge1xuICAgICAgcmV0dXJuIGN0eC5wYXJlbnQuc3RyaW5nT2Zmc2V0O1xuICAgIH0sXG4gICAgYWxsb3dOdWxsOiBmYWxzZVxuICB9KVxufSk7XG52YXIgTGFuZ1RhZ1JlY29yZCA9IG5ldyByLlN0cnVjdCh7XG4gIGxlbmd0aDogci51aW50MTYsXG4gIHRhZzogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgbmV3IHIuU3RyaW5nKCdsZW5ndGgnLCAndXRmMTZiZScpLCB7XG4gICAgdHlwZTogJ3BhcmVudCcsXG4gICAgcmVsYXRpdmVUbzogZnVuY3Rpb24gcmVsYXRpdmVUbyhjdHgpIHtcbiAgICAgIHJldHVybiBjdHguc3RyaW5nT2Zmc2V0O1xuICAgIH1cbiAgfSlcbn0pO1xudmFyIE5hbWVUYWJsZSA9IG5ldyByLlZlcnNpb25lZFN0cnVjdChyLnVpbnQxNiwge1xuICAwOiB7XG4gICAgY291bnQ6IHIudWludDE2LFxuICAgIHN0cmluZ09mZnNldDogci51aW50MTYsXG4gICAgcmVjb3JkczogbmV3IHIuQXJyYXkoTmFtZVJlY29yZCwgJ2NvdW50JylcbiAgfSxcbiAgMToge1xuICAgIGNvdW50OiByLnVpbnQxNixcbiAgICBzdHJpbmdPZmZzZXQ6IHIudWludDE2LFxuICAgIHJlY29yZHM6IG5ldyByLkFycmF5KE5hbWVSZWNvcmQsICdjb3VudCcpLFxuICAgIGxhbmdUYWdDb3VudDogci51aW50MTYsXG4gICAgbGFuZ1RhZ3M6IG5ldyByLkFycmF5KExhbmdUYWdSZWNvcmQsICdsYW5nVGFnQ291bnQnKVxuICB9XG59KTtcbnZhciBOQU1FUyA9IFsnY29weXJpZ2h0JywgJ2ZvbnRGYW1pbHknLCAnZm9udFN1YmZhbWlseScsICd1bmlxdWVTdWJmYW1pbHknLCAnZnVsbE5hbWUnLCAndmVyc2lvbicsICdwb3N0c2NyaXB0TmFtZScsIC8vIE5vdGU6IEEgZm9udCBtYXkgaGF2ZSBvbmx5IG9uZSBQb3N0U2NyaXB0IG5hbWUgYW5kIHRoYXQgbmFtZSBtdXN0IGJlIEFTQ0lJLlxuJ3RyYWRlbWFyaycsICdtYW51ZmFjdHVyZXInLCAnZGVzaWduZXInLCAnZGVzY3JpcHRpb24nLCAndmVuZG9yVVJMJywgJ2Rlc2lnbmVyVVJMJywgJ2xpY2Vuc2UnLCAnbGljZW5zZVVSTCcsIG51bGwsIC8vIHJlc2VydmVkXG4ncHJlZmVycmVkRmFtaWx5JywgJ3ByZWZlcnJlZFN1YmZhbWlseScsICdjb21wYXRpYmxlRnVsbCcsICdzYW1wbGVUZXh0JywgJ3Bvc3RzY3JpcHRDSURGb250TmFtZScsICd3d3NGYW1pbHlOYW1lJywgJ3d3c1N1YmZhbWlseU5hbWUnXTtcblxuTmFtZVRhYmxlLnByb2Nlc3MgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciByZWNvcmRzID0ge307XG5cbiAgZm9yICh2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLnJlY29yZHMpLCBfc3RlcDsgIShfc3RlcCA9IF9pdGVyYXRvcigpKS5kb25lOykge1xuICAgIHZhciByZWNvcmQgPSBfc3RlcC52YWx1ZTtcbiAgICAvLyBmaW5kIG91dCB3aGF0IGxhbmd1YWdlIHRoaXMgaXMgZm9yXG4gICAgdmFyIGxhbmd1YWdlID0gTEFOR1VBR0VTW3JlY29yZC5wbGF0Zm9ybUlEXVtyZWNvcmQubGFuZ3VhZ2VJRF07XG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gbnVsbCAmJiB0aGlzLmxhbmdUYWdzICE9IG51bGwgJiYgcmVjb3JkLmxhbmd1YWdlSUQgPj0gMHg4MDAwKSB7XG4gICAgICBsYW5ndWFnZSA9IHRoaXMubGFuZ1RhZ3NbcmVjb3JkLmxhbmd1YWdlSUQgLSAweDgwMDBdLnRhZztcbiAgICB9XG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gbnVsbCkge1xuICAgICAgbGFuZ3VhZ2UgPSByZWNvcmQucGxhdGZvcm1JRCArICctJyArIHJlY29yZC5sYW5ndWFnZUlEO1xuICAgIH0gLy8gaWYgdGhlIG5hbWVJRCBpcyA+PSAyNTYsIGl0IGlzIGEgZm9udCBmZWF0dXJlIHJlY29yZCAoQUFUKVxuXG5cbiAgICB2YXIga2V5ID0gcmVjb3JkLm5hbWVJRCA+PSAyNTYgPyAnZm9udEZlYXR1cmVzJyA6IE5BTUVTW3JlY29yZC5uYW1lSURdIHx8IHJlY29yZC5uYW1lSUQ7XG5cbiAgICBpZiAocmVjb3Jkc1trZXldID09IG51bGwpIHtcbiAgICAgIHJlY29yZHNba2V5XSA9IHt9O1xuICAgIH1cblxuICAgIHZhciBvYmogPSByZWNvcmRzW2tleV07XG5cbiAgICBpZiAocmVjb3JkLm5hbWVJRCA+PSAyNTYpIHtcbiAgICAgIG9iaiA9IG9ialtyZWNvcmQubmFtZUlEXSB8fCAob2JqW3JlY29yZC5uYW1lSURdID0ge30pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVjb3JkLnN0cmluZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9ialtsYW5ndWFnZV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICBvYmpbbGFuZ3VhZ2VdID0gcmVjb3JkLnN0cmluZztcbiAgICB9XG4gIH1cblxuICB0aGlzLnJlY29yZHMgPSByZWNvcmRzO1xufTtcblxuTmFtZVRhYmxlLnByZUVuY29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5yZWNvcmRzKSkgcmV0dXJuO1xuICB0aGlzLnZlcnNpb24gPSAwO1xuICB2YXIgcmVjb3JkcyA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiB0aGlzLnJlY29yZHMpIHtcbiAgICB2YXIgdmFsID0gdGhpcy5yZWNvcmRzW2tleV07XG4gICAgaWYgKGtleSA9PT0gJ2ZvbnRGZWF0dXJlcycpIGNvbnRpbnVlO1xuICAgIHJlY29yZHMucHVzaCh7XG4gICAgICBwbGF0Zm9ybUlEOiAzLFxuICAgICAgZW5jb2RpbmdJRDogMSxcbiAgICAgIGxhbmd1YWdlSUQ6IDB4NDA5LFxuICAgICAgbmFtZUlEOiBOQU1FUy5pbmRleE9mKGtleSksXG4gICAgICBsZW5ndGg6IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbC5lbiwgJ3V0ZjE2bGUnKSxcbiAgICAgIHN0cmluZzogdmFsLmVuXG4gICAgfSk7XG5cbiAgICBpZiAoa2V5ID09PSAncG9zdHNjcmlwdE5hbWUnKSB7XG4gICAgICByZWNvcmRzLnB1c2goe1xuICAgICAgICBwbGF0Zm9ybUlEOiAxLFxuICAgICAgICBlbmNvZGluZ0lEOiAwLFxuICAgICAgICBsYW5ndWFnZUlEOiAwLFxuICAgICAgICBuYW1lSUQ6IE5BTUVTLmluZGV4T2Yoa2V5KSxcbiAgICAgICAgbGVuZ3RoOiB2YWwuZW4ubGVuZ3RoLFxuICAgICAgICBzdHJpbmc6IHZhbC5lblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5yZWNvcmRzID0gcmVjb3JkcztcbiAgdGhpcy5jb3VudCA9IHJlY29yZHMubGVuZ3RoO1xuICB0aGlzLnN0cmluZ09mZnNldCA9IE5hbWVUYWJsZS5zaXplKHRoaXMsIG51bGwsIGZhbHNlKTtcbn07XG5cbnZhciBPUzIgPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3Qoci51aW50MTYsIHtcbiAgaGVhZGVyOiB7XG4gICAgeEF2Z0NoYXJXaWR0aDogci5pbnQxNixcbiAgICAvLyBhdmVyYWdlIHdlaWdodGVkIGFkdmFuY2Ugd2lkdGggb2YgbG93ZXIgY2FzZSBsZXR0ZXJzIGFuZCBzcGFjZVxuICAgIHVzV2VpZ2h0Q2xhc3M6IHIudWludDE2LFxuICAgIC8vIHZpc3VhbCB3ZWlnaHQgb2Ygc3Ryb2tlIGluIGdseXBoc1xuICAgIHVzV2lkdGhDbGFzczogci51aW50MTYsXG4gICAgLy8gcmVsYXRpdmUgY2hhbmdlIGZyb20gdGhlIG5vcm1hbCBhc3BlY3QgcmF0aW8gKHdpZHRoIHRvIGhlaWdodCByYXRpbylcbiAgICBmc1R5cGU6IG5ldyByLkJpdGZpZWxkKHIudWludDE2LCBbLy8gSW5kaWNhdGVzIGZvbnQgZW1iZWRkaW5nIGxpY2Vuc2luZyByaWdodHNcbiAgICBudWxsLCAnbm9FbWJlZGRpbmcnLCAndmlld09ubHknLCAnZWRpdGFibGUnLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAnbm9TdWJzZXR0aW5nJywgJ2JpdG1hcE9ubHknXSksXG4gICAgeVN1YnNjcmlwdFhTaXplOiByLmludDE2LFxuICAgIC8vIHJlY29tbWVuZGVkIGhvcml6b250YWwgc2l6ZSBpbiBwaXhlbHMgZm9yIHN1YnNjcmlwdHNcbiAgICB5U3Vic2NyaXB0WVNpemU6IHIuaW50MTYsXG4gICAgLy8gcmVjb21tZW5kZWQgdmVydGljYWwgc2l6ZSBpbiBwaXhlbHMgZm9yIHN1YnNjcmlwdHNcbiAgICB5U3Vic2NyaXB0WE9mZnNldDogci5pbnQxNixcbiAgICAvLyByZWNvbW1lbmRlZCBob3Jpem9udGFsIG9mZnNldCBmb3Igc3Vic2NyaXB0c1xuICAgIHlTdWJzY3JpcHRZT2Zmc2V0OiByLmludDE2LFxuICAgIC8vIHJlY29tbWVuZGVkIHZlcnRpY2FsIG9mZnNldCBmb3JtIHRoZSBiYXNlbGluZSBmb3Igc3Vic2NyaXB0c1xuICAgIHlTdXBlcnNjcmlwdFhTaXplOiByLmludDE2LFxuICAgIC8vIHJlY29tbWVuZGVkIGhvcml6b250YWwgc2l6ZSBpbiBwaXhlbHMgZm9yIHN1cGVyc2NyaXB0c1xuICAgIHlTdXBlcnNjcmlwdFlTaXplOiByLmludDE2LFxuICAgIC8vIHJlY29tbWVuZGVkIHZlcnRpY2FsIHNpemUgaW4gcGl4ZWxzIGZvciBzdXBlcnNjcmlwdHNcbiAgICB5U3VwZXJzY3JpcHRYT2Zmc2V0OiByLmludDE2LFxuICAgIC8vIHJlY29tbWVuZGVkIGhvcml6b250YWwgb2Zmc2V0IGZvciBzdXBlcnNjcmlwdHNcbiAgICB5U3VwZXJzY3JpcHRZT2Zmc2V0OiByLmludDE2LFxuICAgIC8vIHJlY29tbWVuZGVkIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSBiYXNlbGluZSBmb3Igc3VwZXJzY3JpcHRzXG4gICAgeVN0cmlrZW91dFNpemU6IHIuaW50MTYsXG4gICAgLy8gd2lkdGggb2YgdGhlIHN0cmlrZW91dCBzdHJva2VcbiAgICB5U3RyaWtlb3V0UG9zaXRpb246IHIuaW50MTYsXG4gICAgLy8gcG9zaXRpb24gb2YgdGhlIHN0cmlrZW91dCBzdHJva2UgcmVsYXRpdmUgdG8gdGhlIGJhc2VsaW5lXG4gICAgc0ZhbWlseUNsYXNzOiByLmludDE2LFxuICAgIC8vIGNsYXNzaWZpY2F0aW9uIG9mIGZvbnQtZmFtaWx5IGRlc2lnblxuICAgIHBhbm9zZTogbmV3IHIuQXJyYXkoci51aW50OCwgMTApLFxuICAgIC8vIGRlc2NyaWJlIHRoZSB2aXN1YWwgY2hhcmFjdGVyaXN0aWNzIG9mIGEgZ2l2ZW4gdHlwZWZhY2VcbiAgICB1bENoYXJSYW5nZTogbmV3IHIuQXJyYXkoci51aW50MzIsIDQpLFxuICAgIHZlbmRvcklEOiBuZXcgci5TdHJpbmcoNCksXG4gICAgLy8gZm91ciBjaGFyYWN0ZXIgaWRlbnRpZmllciBmb3IgdGhlIGZvbnQgdmVuZG9yXG4gICAgZnNTZWxlY3Rpb246IG5ldyByLkJpdGZpZWxkKHIudWludDE2LCBbLy8gYml0IGZpZWxkIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvbnRcbiAgICAnaXRhbGljJywgJ3VuZGVyc2NvcmUnLCAnbmVnYXRpdmUnLCAnb3V0bGluZWQnLCAnc3RyaWtlb3V0JywgJ2JvbGQnLCAncmVndWxhcicsICd1c2VUeXBvTWV0cmljcycsICd3d3MnLCAnb2JsaXF1ZSddKSxcbiAgICB1c0ZpcnN0Q2hhckluZGV4OiByLnVpbnQxNixcbiAgICAvLyBUaGUgbWluaW11bSBVbmljb2RlIGluZGV4IGluIHRoaXMgZm9udFxuICAgIHVzTGFzdENoYXJJbmRleDogci51aW50MTYgLy8gVGhlIG1heGltdW0gVW5pY29kZSBpbmRleCBpbiB0aGlzIGZvbnRcblxuICB9LFxuICAvLyBUaGUgQXBwbGUgdmVyc2lvbiBvZiB0aGlzIHRhYmxlIGVuZHMgaGVyZSwgYnV0IHRoZSBNaWNyb3NvZnQgb25lIGNvbnRpbnVlcyBvbi4uLlxuICAwOiB7fSxcbiAgMToge1xuICAgIHR5cG9Bc2NlbmRlcjogci5pbnQxNixcbiAgICB0eXBvRGVzY2VuZGVyOiByLmludDE2LFxuICAgIHR5cG9MaW5lR2FwOiByLmludDE2LFxuICAgIHdpbkFzY2VudDogci51aW50MTYsXG4gICAgd2luRGVzY2VudDogci51aW50MTYsXG4gICAgY29kZVBhZ2VSYW5nZTogbmV3IHIuQXJyYXkoci51aW50MzIsIDIpXG4gIH0sXG4gIDI6IHtcbiAgICAvLyB0aGVzZSBzaG91bGQgYmUgY29tbW9uIHdpdGggdmVyc2lvbiAxIHNvbWVob3dcbiAgICB0eXBvQXNjZW5kZXI6IHIuaW50MTYsXG4gICAgdHlwb0Rlc2NlbmRlcjogci5pbnQxNixcbiAgICB0eXBvTGluZUdhcDogci5pbnQxNixcbiAgICB3aW5Bc2NlbnQ6IHIudWludDE2LFxuICAgIHdpbkRlc2NlbnQ6IHIudWludDE2LFxuICAgIGNvZGVQYWdlUmFuZ2U6IG5ldyByLkFycmF5KHIudWludDMyLCAyKSxcbiAgICB4SGVpZ2h0OiByLmludDE2LFxuICAgIGNhcEhlaWdodDogci5pbnQxNixcbiAgICBkZWZhdWx0Q2hhcjogci51aW50MTYsXG4gICAgYnJlYWtDaGFyOiByLnVpbnQxNixcbiAgICBtYXhDb250ZW50OiByLnVpbnQxNlxuICB9LFxuICA1OiB7XG4gICAgdHlwb0FzY2VuZGVyOiByLmludDE2LFxuICAgIHR5cG9EZXNjZW5kZXI6IHIuaW50MTYsXG4gICAgdHlwb0xpbmVHYXA6IHIuaW50MTYsXG4gICAgd2luQXNjZW50OiByLnVpbnQxNixcbiAgICB3aW5EZXNjZW50OiByLnVpbnQxNixcbiAgICBjb2RlUGFnZVJhbmdlOiBuZXcgci5BcnJheShyLnVpbnQzMiwgMiksXG4gICAgeEhlaWdodDogci5pbnQxNixcbiAgICBjYXBIZWlnaHQ6IHIuaW50MTYsXG4gICAgZGVmYXVsdENoYXI6IHIudWludDE2LFxuICAgIGJyZWFrQ2hhcjogci51aW50MTYsXG4gICAgbWF4Q29udGVudDogci51aW50MTYsXG4gICAgdXNMb3dlck9wdGljYWxQb2ludFNpemU6IHIudWludDE2LFxuICAgIHVzVXBwZXJPcHRpY2FsUG9pbnRTaXplOiByLnVpbnQxNlxuICB9XG59KTtcbnZhciB2ZXJzaW9ucyA9IE9TMi52ZXJzaW9ucztcbnZlcnNpb25zWzNdID0gdmVyc2lvbnNbNF0gPSB2ZXJzaW9uc1syXTtcbnZhciBwb3N0ID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KHIuZml4ZWQzMiwge1xuICBoZWFkZXI6IHtcbiAgICAvLyB0aGVzZSBmaWVsZHMgZXhpc3QgYXQgdGhlIHRvcCBvZiBhbGwgdmVyc2lvbnNcbiAgICBpdGFsaWNBbmdsZTogci5maXhlZDMyLFxuICAgIC8vIEl0YWxpYyBhbmdsZSBpbiBjb3VudGVyLWNsb2Nrd2lzZSBkZWdyZWVzIGZyb20gdGhlIHZlcnRpY2FsLlxuICAgIHVuZGVybGluZVBvc2l0aW9uOiByLmludDE2LFxuICAgIC8vIFN1Z2dlc3RlZCBkaXN0YW5jZSBvZiB0aGUgdG9wIG9mIHRoZSB1bmRlcmxpbmUgZnJvbSB0aGUgYmFzZWxpbmVcbiAgICB1bmRlcmxpbmVUaGlja25lc3M6IHIuaW50MTYsXG4gICAgLy8gU3VnZ2VzdGVkIHZhbHVlcyBmb3IgdGhlIHVuZGVybGluZSB0aGlja25lc3NcbiAgICBpc0ZpeGVkUGl0Y2g6IHIudWludDMyLFxuICAgIC8vIFdoZXRoZXIgdGhlIGZvbnQgaXMgbW9ub3NwYWNlZFxuICAgIG1pbk1lbVR5cGU0Mjogci51aW50MzIsXG4gICAgLy8gTWluaW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgNDIgZm9udFxuICAgIG1heE1lbVR5cGU0Mjogci51aW50MzIsXG4gICAgLy8gTWF4aW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgNDIgZm9udFxuICAgIG1pbk1lbVR5cGUxOiByLnVpbnQzMixcbiAgICAvLyBNaW5pbXVtIG1lbW9yeSB1c2FnZSB3aGVuIGEgVHJ1ZVR5cGUgZm9udCBpcyBkb3dubG9hZGVkIGFzIGEgVHlwZSAxIGZvbnRcbiAgICBtYXhNZW1UeXBlMTogci51aW50MzIgLy8gTWF4aW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgMSBmb250XG5cbiAgfSxcbiAgMToge30sXG4gIC8vIHZlcnNpb24gMSBoYXMgbm8gYWRkaXRpb25hbCBmaWVsZHNcbiAgMjoge1xuICAgIG51bWJlck9mR2x5cGhzOiByLnVpbnQxNixcbiAgICBnbHlwaE5hbWVJbmRleDogbmV3IHIuQXJyYXkoci51aW50MTYsICdudW1iZXJPZkdseXBocycpLFxuICAgIG5hbWVzOiBuZXcgci5BcnJheShuZXcgci5TdHJpbmcoci51aW50OCkpXG4gIH0sXG4gIDIuNToge1xuICAgIG51bWJlck9mR2x5cGhzOiByLnVpbnQxNixcbiAgICBvZmZzZXRzOiBuZXcgci5BcnJheShyLnVpbnQ4LCAnbnVtYmVyT2ZHbHlwaHMnKVxuICB9LFxuICAzOiB7fSxcbiAgLy8gdmVyc2lvbiAzIGhhcyBubyBhZGRpdGlvbmFsIGZpZWxkc1xuICA0OiB7XG4gICAgbWFwOiBuZXcgci5BcnJheShyLnVpbnQzMiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LnBhcmVudC5tYXhwLm51bUdseXBocztcbiAgICB9KVxuICB9XG59KTtcbnZhciBjdnQgPSBuZXcgci5TdHJ1Y3Qoe1xuICBjb250cm9sVmFsdWVzOiBuZXcgci5BcnJheShyLmludDE2KVxufSk7IC8vIFRoZXNlIGluc3RydWN0aW9ucyBhcmUga25vd24gYXMgdGhlIGZvbnQgcHJvZ3JhbS4gVGhlIG1haW4gdXNlIG9mIHRoaXMgdGFibGVcbi8vIGlzIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBpbiBtYW55IGRpZmZlcmVudCBnbHlwaCBwcm9ncmFtcy5cblxudmFyIGZwZ20gPSBuZXcgci5TdHJ1Y3Qoe1xuICBpbnN0cnVjdGlvbnM6IG5ldyByLkFycmF5KHIudWludDgpXG59KTtcbnZhciBsb2NhID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KCdoZWFkLmluZGV4VG9Mb2NGb3JtYXQnLCB7XG4gIDA6IHtcbiAgICBvZmZzZXRzOiBuZXcgci5BcnJheShyLnVpbnQxNilcbiAgfSxcbiAgMToge1xuICAgIG9mZnNldHM6IG5ldyByLkFycmF5KHIudWludDMyKVxuICB9XG59KTtcblxubG9jYS5wcm9jZXNzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy52ZXJzaW9uID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9mZnNldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMub2Zmc2V0c1tpXSA8PD0gMTtcbiAgICB9XG4gIH1cbn07XG5cbmxvY2EucHJlRW5jb2RlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy52ZXJzaW9uID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9mZnNldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMub2Zmc2V0c1tpXSA+Pj49IDE7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcHJlcCA9IG5ldyByLlN0cnVjdCh7XG4gIGNvbnRyb2xWYWx1ZVByb2dyYW06IG5ldyByLkFycmF5KHIudWludDgpXG59KTtcbnZhciBnbHlmID0gbmV3IHIuQXJyYXkobmV3IHIuQnVmZmVyKCkpO1xuXG52YXIgQ0ZGSW5kZXggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDRkZJbmRleCh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBDRkZJbmRleC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldENGRlZlcnNpb24gPSBmdW5jdGlvbiBnZXRDRkZWZXJzaW9uKGN0eCkge1xuICAgIHdoaWxlIChjdHggJiYgIWN0eC5oZHJTaXplKSB7XG4gICAgICBjdHggPSBjdHgucGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBjdHggPyBjdHgudmVyc2lvbiA6IC0xO1xuICB9O1xuXG4gIF9wcm90by5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyZWFtLCBwYXJlbnQpIHtcbiAgICB2YXIgdmVyc2lvbiA9IHRoaXMuZ2V0Q0ZGVmVyc2lvbihwYXJlbnQpO1xuICAgIHZhciBjb3VudCA9IHZlcnNpb24gPj0gMiA/IHN0cmVhbS5yZWFkVUludDMyQkUoKSA6IHN0cmVhbS5yZWFkVUludDE2QkUoKTtcblxuICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHZhciBvZmZTaXplID0gc3RyZWFtLnJlYWRVSW50OCgpO1xuICAgIHZhciBvZmZzZXRUeXBlO1xuXG4gICAgaWYgKG9mZlNpemUgPT09IDEpIHtcbiAgICAgIG9mZnNldFR5cGUgPSByLnVpbnQ4O1xuICAgIH0gZWxzZSBpZiAob2ZmU2l6ZSA9PT0gMikge1xuICAgICAgb2Zmc2V0VHlwZSA9IHIudWludDE2O1xuICAgIH0gZWxzZSBpZiAob2ZmU2l6ZSA9PT0gMykge1xuICAgICAgb2Zmc2V0VHlwZSA9IHIudWludDI0O1xuICAgIH0gZWxzZSBpZiAob2ZmU2l6ZSA9PT0gNCkge1xuICAgICAgb2Zmc2V0VHlwZSA9IHIudWludDMyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgb2Zmc2V0IHNpemUgaW4gQ0ZGSW5kZXg6IFwiLmNvbmNhdChvZmZTaXplLCBcIiBcIikuY29uY2F0KHN0cmVhbS5wb3MpKTtcbiAgICB9XG5cbiAgICB2YXIgcmV0ID0gW107XG4gICAgdmFyIHN0YXJ0UG9zID0gc3RyZWFtLnBvcyArIChjb3VudCArIDEpICogb2ZmU2l6ZSAtIDE7XG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0VHlwZS5kZWNvZGUoc3RyZWFtKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgdmFyIGVuZCA9IG9mZnNldFR5cGUuZGVjb2RlKHN0cmVhbSk7XG5cbiAgICAgIGlmICh0aGlzLnR5cGUgIT0gbnVsbCkge1xuICAgICAgICB2YXIgcG9zID0gc3RyZWFtLnBvcztcbiAgICAgICAgc3RyZWFtLnBvcyA9IHN0YXJ0UG9zICsgc3RhcnQ7XG4gICAgICAgIHBhcmVudC5sZW5ndGggPSBlbmQgLSBzdGFydDtcbiAgICAgICAgcmV0LnB1c2godGhpcy50eXBlLmRlY29kZShzdHJlYW0sIHBhcmVudCkpO1xuICAgICAgICBzdHJlYW0ucG9zID0gcG9zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgIG9mZnNldDogc3RhcnRQb3MgKyBzdGFydCxcbiAgICAgICAgICBsZW5ndGg6IGVuZCAtIHN0YXJ0XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzdGFydCA9IGVuZDtcbiAgICB9XG5cbiAgICBzdHJlYW0ucG9zID0gc3RhcnRQb3MgKyBzdGFydDtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIF9wcm90by5zaXplID0gZnVuY3Rpb24gc2l6ZShhcnIsIHBhcmVudCkge1xuICAgIHZhciBzaXplID0gMjtcblxuICAgIGlmIChhcnIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gc2l6ZTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9IHRoaXMudHlwZSB8fCBuZXcgci5CdWZmZXIoKTsgLy8gZmluZCBtYXhpbXVtIG9mZnNldCB0byBkZXRtaW5pbmUgb2Zmc2V0IHR5cGVcblxuICAgIHZhciBvZmZzZXQgPSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gYXJyW2ldO1xuICAgICAgb2Zmc2V0ICs9IHR5cGUuc2l6ZShpdGVtLCBwYXJlbnQpO1xuICAgIH1cblxuICAgIHZhciBvZmZzZXRUeXBlO1xuXG4gICAgaWYgKG9mZnNldCA8PSAweGZmKSB7XG4gICAgICBvZmZzZXRUeXBlID0gci51aW50ODtcbiAgICB9IGVsc2UgaWYgKG9mZnNldCA8PSAweGZmZmYpIHtcbiAgICAgIG9mZnNldFR5cGUgPSByLnVpbnQxNjtcbiAgICB9IGVsc2UgaWYgKG9mZnNldCA8PSAweGZmZmZmZikge1xuICAgICAgb2Zmc2V0VHlwZSA9IHIudWludDI0O1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0IDw9IDB4ZmZmZmZmZmYpIHtcbiAgICAgIG9mZnNldFR5cGUgPSByLnVpbnQzMjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIG9mZnNldCBpbiBDRkZJbmRleFwiKTtcbiAgICB9XG5cbiAgICBzaXplICs9IDEgKyBvZmZzZXRUeXBlLnNpemUoKSAqIChhcnIubGVuZ3RoICsgMSk7XG4gICAgc2l6ZSArPSBvZmZzZXQgLSAxO1xuICAgIHJldHVybiBzaXplO1xuICB9O1xuXG4gIF9wcm90by5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyZWFtLCBhcnIsIHBhcmVudCkge1xuICAgIHN0cmVhbS53cml0ZVVJbnQxNkJFKGFyci5sZW5ndGgpO1xuXG4gICAgaWYgKGFyci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9IHRoaXMudHlwZSB8fCBuZXcgci5CdWZmZXIoKTsgLy8gZmluZCBtYXhpbXVtIG9mZnNldCB0byBkZXRtaW5pbmUgb2Zmc2V0IHR5cGVcblxuICAgIHZhciBzaXplcyA9IFtdO1xuICAgIHZhciBvZmZzZXQgPSAxO1xuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoYXJyKSwgX3N0ZXAyOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIoKSkuZG9uZTspIHtcbiAgICAgIHZhciBpdGVtID0gX3N0ZXAyLnZhbHVlO1xuICAgICAgdmFyIHMgPSB0eXBlLnNpemUoaXRlbSwgcGFyZW50KTtcbiAgICAgIHNpemVzLnB1c2gocyk7XG4gICAgICBvZmZzZXQgKz0gcztcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0VHlwZTtcblxuICAgIGlmIChvZmZzZXQgPD0gMHhmZikge1xuICAgICAgb2Zmc2V0VHlwZSA9IHIudWludDg7XG4gICAgfSBlbHNlIGlmIChvZmZzZXQgPD0gMHhmZmZmKSB7XG4gICAgICBvZmZzZXRUeXBlID0gci51aW50MTY7XG4gICAgfSBlbHNlIGlmIChvZmZzZXQgPD0gMHhmZmZmZmYpIHtcbiAgICAgIG9mZnNldFR5cGUgPSByLnVpbnQyNDtcbiAgICB9IGVsc2UgaWYgKG9mZnNldCA8PSAweGZmZmZmZmZmKSB7XG4gICAgICBvZmZzZXRUeXBlID0gci51aW50MzI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBvZmZzZXQgaW4gQ0ZGSW5kZXhcIik7XG4gICAgfSAvLyB3cml0ZSBvZmZzZXQgc2l6ZVxuXG5cbiAgICBzdHJlYW0ud3JpdGVVSW50OChvZmZzZXRUeXBlLnNpemUoKSk7IC8vIHdyaXRlIGVsZW1lbnRzXG5cbiAgICBvZmZzZXQgPSAxO1xuICAgIG9mZnNldFR5cGUuZW5jb2RlKHN0cmVhbSwgb2Zmc2V0KTtcblxuICAgIGZvciAodmFyIF9pMjIgPSAwLCBfc2l6ZXMgPSBzaXplczsgX2kyMiA8IF9zaXplcy5sZW5ndGg7IF9pMjIrKykge1xuICAgICAgdmFyIHNpemUgPSBfc2l6ZXNbX2kyMl07XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICAgIG9mZnNldFR5cGUuZW5jb2RlKHN0cmVhbSwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3IzID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShhcnIpLCBfc3RlcDM7ICEoX3N0ZXAzID0gX2l0ZXJhdG9yMygpKS5kb25lOykge1xuICAgICAgdmFyIF9pdGVtID0gX3N0ZXAzLnZhbHVlO1xuICAgICAgdHlwZS5lbmNvZGUoc3RyZWFtLCBfaXRlbSwgcGFyZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH07XG5cbiAgcmV0dXJuIENGRkluZGV4O1xufSgpO1xuXG52YXIgRkxPQVRfRU9GID0gMHhmO1xudmFyIEZMT0FUX0xPT0tVUCA9IFsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICcuJywgJ0UnLCAnRS0nLCBudWxsLCAnLSddO1xudmFyIEZMT0FUX0VOQ09ERV9MT09LVVAgPSB7XG4gICcuJzogMTAsXG4gICdFJzogMTEsXG4gICdFLSc6IDEyLFxuICAnLSc6IDE0XG59O1xuXG52YXIgQ0ZGT3BlcmFuZCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENGRk9wZXJhbmQoKSB7fVxuXG4gIENGRk9wZXJhbmQuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSwgdmFsdWUpIHtcbiAgICBpZiAoMzIgPD0gdmFsdWUgJiYgdmFsdWUgPD0gMjQ2KSB7XG4gICAgICByZXR1cm4gdmFsdWUgLSAxMzk7XG4gICAgfVxuXG4gICAgaWYgKDI0NyA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAyNTApIHtcbiAgICAgIHJldHVybiAodmFsdWUgLSAyNDcpICogMjU2ICsgc3RyZWFtLnJlYWRVSW50OCgpICsgMTA4O1xuICAgIH1cblxuICAgIGlmICgyNTEgPD0gdmFsdWUgJiYgdmFsdWUgPD0gMjU0KSB7XG4gICAgICByZXR1cm4gLSh2YWx1ZSAtIDI1MSkgKiAyNTYgLSBzdHJlYW0ucmVhZFVJbnQ4KCkgLSAxMDg7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAyOCkge1xuICAgICAgcmV0dXJuIHN0cmVhbS5yZWFkSW50MTZCRSgpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gMjkpIHtcbiAgICAgIHJldHVybiBzdHJlYW0ucmVhZEludDMyQkUoKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IDMwKSB7XG4gICAgICB2YXIgc3RyID0gJyc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBiID0gc3RyZWFtLnJlYWRVSW50OCgpO1xuICAgICAgICB2YXIgbjEgPSBiID4+IDQ7XG5cbiAgICAgICAgaWYgKG4xID09PSBGTE9BVF9FT0YpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciArPSBGTE9BVF9MT09LVVBbbjFdO1xuICAgICAgICB2YXIgbjIgPSBiICYgMTU7XG5cbiAgICAgICAgaWYgKG4yID09PSBGTE9BVF9FT0YpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciArPSBGTE9BVF9MT09LVVBbbjJdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIENGRk9wZXJhbmQuc2l6ZSA9IGZ1bmN0aW9uIHNpemUodmFsdWUpIHtcbiAgICAvLyBpZiB0aGUgdmFsdWUgbmVlZHMgdG8gYmUgZm9yY2VkIHRvIHRoZSBsYXJnZXN0IHNpemUgKDMyIGJpdClcbiAgICAvLyBlLmcuIGZvciB1bmtub3duIHBvaW50ZXJzLCBzZXQgdG8gMzI3NjhcbiAgICBpZiAodmFsdWUuZm9yY2VMYXJnZSkge1xuICAgICAgdmFsdWUgPSAzMjc2ODtcbiAgICB9XG5cbiAgICBpZiAoKHZhbHVlIHwgMCkgIT09IHZhbHVlKSB7XG4gICAgICAvLyBmbG9hdGluZyBwb2ludFxuICAgICAgdmFyIHN0ciA9ICcnICsgdmFsdWU7XG4gICAgICByZXR1cm4gMSArIE1hdGguY2VpbCgoc3RyLmxlbmd0aCArIDEpIC8gMik7XG4gICAgfSBlbHNlIGlmICgtMTA3IDw9IHZhbHVlICYmIHZhbHVlIDw9IDEwNykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmICgxMDggPD0gdmFsdWUgJiYgdmFsdWUgPD0gMTEzMSB8fCAtMTEzMSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAtMTA4KSB7XG4gICAgICByZXR1cm4gMjtcbiAgICB9IGVsc2UgaWYgKC0zMjc2OCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAzMjc2Nykge1xuICAgICAgcmV0dXJuIDM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA1O1xuICAgIH1cbiAgfTtcblxuICBDRkZPcGVyYW5kLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHJlYW0sIHZhbHVlKSB7XG4gICAgLy8gaWYgdGhlIHZhbHVlIG5lZWRzIHRvIGJlIGZvcmNlZCB0byB0aGUgbGFyZ2VzdCBzaXplICgzMiBiaXQpXG4gICAgLy8gZS5nLiBmb3IgdW5rbm93biBwb2ludGVycywgc2F2ZSB0aGUgb2xkIHZhbHVlIGFuZCBzZXQgdG8gMzI3NjhcbiAgICB2YXIgdmFsID0gTnVtYmVyKHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZS5mb3JjZUxhcmdlKSB7XG4gICAgICBzdHJlYW0ud3JpdGVVSW50OCgyOSk7XG4gICAgICByZXR1cm4gc3RyZWFtLndyaXRlSW50MzJCRSh2YWwpO1xuICAgIH0gZWxzZSBpZiAoKHZhbCB8IDApICE9PSB2YWwpIHtcbiAgICAgIC8vIGZsb2F0aW5nIHBvaW50XG4gICAgICBzdHJlYW0ud3JpdGVVSW50OCgzMCk7XG4gICAgICB2YXIgc3RyID0gJycgKyB2YWw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHZhciBjMSA9IHN0cltpXTtcbiAgICAgICAgdmFyIG4xID0gRkxPQVRfRU5DT0RFX0xPT0tVUFtjMV0gfHwgK2MxO1xuXG4gICAgICAgIGlmIChpID09PSBzdHIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHZhciBuMiA9IEZMT0FUX0VPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYzIgPSBzdHJbaSArIDFdO1xuICAgICAgICAgIHZhciBuMiA9IEZMT0FUX0VOQ09ERV9MT09LVVBbYzJdIHx8ICtjMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbS53cml0ZVVJbnQ4KG4xIDw8IDQgfCBuMiAmIDE1KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG4yICE9PSBGTE9BVF9FT0YpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS53cml0ZVVJbnQ4KEZMT0FUX0VPRiA8PCA0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKC0xMDcgPD0gdmFsICYmIHZhbCA8PSAxMDcpIHtcbiAgICAgIHJldHVybiBzdHJlYW0ud3JpdGVVSW50OCh2YWwgKyAxMzkpO1xuICAgIH0gZWxzZSBpZiAoMTA4IDw9IHZhbCAmJiB2YWwgPD0gMTEzMSkge1xuICAgICAgdmFsIC09IDEwODtcbiAgICAgIHN0cmVhbS53cml0ZVVJbnQ4KCh2YWwgPj4gOCkgKyAyNDcpO1xuICAgICAgcmV0dXJuIHN0cmVhbS53cml0ZVVJbnQ4KHZhbCAmIDB4ZmYpO1xuICAgIH0gZWxzZSBpZiAoLTExMzEgPD0gdmFsICYmIHZhbCA8PSAtMTA4KSB7XG4gICAgICB2YWwgPSAtdmFsIC0gMTA4O1xuICAgICAgc3RyZWFtLndyaXRlVUludDgoKHZhbCA+PiA4KSArIDI1MSk7XG4gICAgICByZXR1cm4gc3RyZWFtLndyaXRlVUludDgodmFsICYgMHhmZik7XG4gICAgfSBlbHNlIGlmICgtMzI3NjggPD0gdmFsICYmIHZhbCA8PSAzMjc2Nykge1xuICAgICAgc3RyZWFtLndyaXRlVUludDgoMjgpO1xuICAgICAgcmV0dXJuIHN0cmVhbS53cml0ZUludDE2QkUodmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLndyaXRlVUludDgoMjkpO1xuICAgICAgcmV0dXJuIHN0cmVhbS53cml0ZUludDMyQkUodmFsKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENGRk9wZXJhbmQ7XG59KCk7XG5cbnZhciBDRkZEaWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ0ZGRGljdChvcHMpIHtcbiAgICBpZiAob3BzID09PSB2b2lkIDApIHtcbiAgICAgIG9wcyA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMub3BzID0gb3BzO1xuICAgIHRoaXMuZmllbGRzID0ge307XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3I0ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShvcHMpLCBfc3RlcDQ7ICEoX3N0ZXA0ID0gX2l0ZXJhdG9yNCgpKS5kb25lOykge1xuICAgICAgdmFyIGZpZWxkID0gX3N0ZXA0LnZhbHVlO1xuICAgICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkoZmllbGRbMF0pID8gZmllbGRbMF1bMF0gPDwgOCB8IGZpZWxkWzBdWzFdIDogZmllbGRbMF07XG4gICAgICB0aGlzLmZpZWxkc1trZXldID0gZmllbGQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIF9wcm90bzIgPSBDRkZEaWN0LnByb3RvdHlwZTtcblxuICBfcHJvdG8yLmRlY29kZU9wZXJhbmRzID0gZnVuY3Rpb24gZGVjb2RlT3BlcmFuZHModHlwZSwgc3RyZWFtLCByZXQsIG9wZXJhbmRzKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICByZXR1cm4gb3BlcmFuZHMubWFwKGZ1bmN0aW9uIChvcCwgaSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZGVjb2RlT3BlcmFuZHModHlwZVtpXSwgc3RyZWFtLCByZXQsIFtvcF0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlLmRlY29kZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdHlwZS5kZWNvZGUoc3RyZWFtLCByZXQsIG9wZXJhbmRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIGNhc2UgJ29mZnNldCc6XG4gICAgICAgIGNhc2UgJ3NpZCc6XG4gICAgICAgICAgcmV0dXJuIG9wZXJhbmRzWzBdO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIHJldHVybiAhIW9wZXJhbmRzWzBdO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG9wZXJhbmRzO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8yLmVuY29kZU9wZXJhbmRzID0gZnVuY3Rpb24gZW5jb2RlT3BlcmFuZHModHlwZSwgc3RyZWFtLCBjdHgsIG9wZXJhbmRzKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgcmV0dXJuIG9wZXJhbmRzLm1hcChmdW5jdGlvbiAob3AsIGkpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5lbmNvZGVPcGVyYW5kcyh0eXBlW2ldLCBzdHJlYW0sIGN0eCwgb3ApWzBdO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlLmVuY29kZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdHlwZS5lbmNvZGUoc3RyZWFtLCBvcGVyYW5kcywgY3R4KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcGVyYW5kcyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBbb3BlcmFuZHNdO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wZXJhbmRzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBbK29wZXJhbmRzXTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3BlcmFuZHMpKSB7XG4gICAgICByZXR1cm4gb3BlcmFuZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbb3BlcmFuZHNdO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8yLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCkge1xuICAgIHZhciBlbmQgPSBzdHJlYW0ucG9zICsgcGFyZW50Lmxlbmd0aDtcbiAgICB2YXIgcmV0ID0ge307XG4gICAgdmFyIG9wZXJhbmRzID0gW107IC8vIGRlZmluZSBoaWRkZW4gcHJvcGVydGllc1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocmV0LCB7XG4gICAgICBwYXJlbnQ6IHtcbiAgICAgICAgdmFsdWU6IHBhcmVudFxuICAgICAgfSxcbiAgICAgIF9zdGFydE9mZnNldDoge1xuICAgICAgICB2YWx1ZTogc3RyZWFtLnBvc1xuICAgICAgfVxuICAgIH0pOyAvLyBmaWxsIGluIGRlZmF1bHRzXG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5maWVsZHMpIHtcbiAgICAgIHZhciBmaWVsZCA9IHRoaXMuZmllbGRzW2tleV07XG4gICAgICByZXRbZmllbGRbMV1dID0gZmllbGRbM107XG4gICAgfVxuXG4gICAgd2hpbGUgKHN0cmVhbS5wb3MgPCBlbmQpIHtcbiAgICAgIHZhciBiID0gc3RyZWFtLnJlYWRVSW50OCgpO1xuXG4gICAgICBpZiAoYiA8IDI4KSB7XG4gICAgICAgIGlmIChiID09PSAxMikge1xuICAgICAgICAgIGIgPSBiIDw8IDggfCBzdHJlYW0ucmVhZFVJbnQ4KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2ZpZWxkID0gdGhpcy5maWVsZHNbYl07XG5cbiAgICAgICAgaWYgKCFfZmllbGQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9wZXJhdG9yIFwiLmNvbmNhdChiKSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdmFsID0gdGhpcy5kZWNvZGVPcGVyYW5kcyhfZmllbGRbMl0sIHN0cmVhbSwgcmV0LCBvcGVyYW5kcyk7XG5cbiAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIHV0aWxzLlByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldCwgX2ZpZWxkWzFdLCB2YWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbX2ZpZWxkWzFdXSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvcGVyYW5kcyA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3BlcmFuZHMucHVzaChDRkZPcGVyYW5kLmRlY29kZShzdHJlYW0sIGIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIF9wcm90bzIuc2l6ZSA9IGZ1bmN0aW9uIHNpemUoZGljdCwgcGFyZW50LCBpbmNsdWRlUG9pbnRlcnMpIHtcbiAgICBpZiAoaW5jbHVkZVBvaW50ZXJzID09PSB2b2lkIDApIHtcbiAgICAgIGluY2x1ZGVQb2ludGVycyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGN0eCA9IHtcbiAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgdmFsOiBkaWN0LFxuICAgICAgcG9pbnRlclNpemU6IDAsXG4gICAgICBzdGFydE9mZnNldDogcGFyZW50LnN0YXJ0T2Zmc2V0IHx8IDBcbiAgICB9O1xuICAgIHZhciBsZW4gPSAwO1xuXG4gICAgZm9yICh2YXIgayBpbiB0aGlzLmZpZWxkcykge1xuICAgICAgdmFyIGZpZWxkID0gdGhpcy5maWVsZHNba107XG4gICAgICB2YXIgdmFsID0gZGljdFtmaWVsZFsxXV07XG5cbiAgICAgIGlmICh2YWwgPT0gbnVsbCB8fCBpc0VxdWFsKHZhbCwgZmllbGRbM10pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3BlcmFuZHMgPSB0aGlzLmVuY29kZU9wZXJhbmRzKGZpZWxkWzJdLCBudWxsLCBjdHgsIHZhbCk7XG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjUgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKG9wZXJhbmRzKSwgX3N0ZXA1OyAhKF9zdGVwNSA9IF9pdGVyYXRvcjUoKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIG9wID0gX3N0ZXA1LnZhbHVlO1xuICAgICAgICBsZW4gKz0gQ0ZGT3BlcmFuZC5zaXplKG9wKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkoZmllbGRbMF0pID8gZmllbGRbMF0gOiBbZmllbGRbMF1dO1xuICAgICAgbGVuICs9IGtleS5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVQb2ludGVycykge1xuICAgICAgbGVuICs9IGN0eC5wb2ludGVyU2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGVuO1xuICB9O1xuXG4gIF9wcm90bzIuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0cmVhbSwgZGljdCwgcGFyZW50KSB7XG4gICAgdmFyIGN0eCA9IHtcbiAgICAgIHBvaW50ZXJzOiBbXSxcbiAgICAgIHN0YXJ0T2Zmc2V0OiBzdHJlYW0ucG9zLFxuICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICB2YWw6IGRpY3QsXG4gICAgICBwb2ludGVyU2l6ZTogMFxuICAgIH07XG4gICAgY3R4LnBvaW50ZXJPZmZzZXQgPSBzdHJlYW0ucG9zICsgdGhpcy5zaXplKGRpY3QsIGN0eCwgZmFsc2UpO1xuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yNiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodGhpcy5vcHMpLCBfc3RlcDY7ICEoX3N0ZXA2ID0gX2l0ZXJhdG9yNigpKS5kb25lOykge1xuICAgICAgdmFyIGZpZWxkID0gX3N0ZXA2LnZhbHVlO1xuICAgICAgdmFyIHZhbCA9IGRpY3RbZmllbGRbMV1dO1xuXG4gICAgICBpZiAodmFsID09IG51bGwgfHwgaXNFcXVhbCh2YWwsIGZpZWxkWzNdKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wZXJhbmRzID0gdGhpcy5lbmNvZGVPcGVyYW5kcyhmaWVsZFsyXSwgc3RyZWFtLCBjdHgsIHZhbCk7XG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjcgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKG9wZXJhbmRzKSwgX3N0ZXA3OyAhKF9zdGVwNyA9IF9pdGVyYXRvcjcoKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIG9wID0gX3N0ZXA3LnZhbHVlO1xuICAgICAgICBDRkZPcGVyYW5kLmVuY29kZShzdHJlYW0sIG9wKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkoZmllbGRbMF0pID8gZmllbGRbMF0gOiBbZmllbGRbMF1dO1xuXG4gICAgICBmb3IgKHZhciBfaXRlcmF0b3I4ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShrZXkpLCBfc3RlcDg7ICEoX3N0ZXA4ID0gX2l0ZXJhdG9yOCgpKS5kb25lOykge1xuICAgICAgICB2YXIgX29wID0gX3N0ZXA4LnZhbHVlO1xuICAgICAgICBzdHJlYW0ud3JpdGVVSW50OChfb3ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgY3R4LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgICAgdmFyIHB0ciA9IGN0eC5wb2ludGVyc1tpKytdO1xuICAgICAgcHRyLnR5cGUuZW5jb2RlKHN0cmVhbSwgcHRyLnZhbCwgcHRyLnBhcmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9O1xuXG4gIHJldHVybiBDRkZEaWN0O1xufSgpO1xuXG52YXIgQ0ZGUG9pbnRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3IkUG9pbnRlcikge1xuICBfaW5oZXJpdHNMb29zZShDRkZQb2ludGVyLCBfciRQb2ludGVyKTtcblxuICBmdW5jdGlvbiBDRkZQb2ludGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudHlwZSA9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLnR5cGUgPSAnZ2xvYmFsJztcbiAgICB9XG5cbiAgICByZXR1cm4gX3IkUG9pbnRlci5jYWxsKHRoaXMsIG51bGwsIHR5cGUsIG9wdGlvbnMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvMyA9IENGRlBvaW50ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90bzMuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSwgcGFyZW50LCBvcGVyYW5kcykge1xuICAgIHRoaXMub2Zmc2V0VHlwZSA9IHtcbiAgICAgIGRlY29kZTogZnVuY3Rpb24gZGVjb2RlKCkge1xuICAgICAgICByZXR1cm4gb3BlcmFuZHNbMF07XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gX3IkUG9pbnRlci5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcywgc3RyZWFtLCBwYXJlbnQsIG9wZXJhbmRzKTtcbiAgfTtcblxuICBfcHJvdG8zLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHJlYW0sIHZhbHVlLCBjdHgpIHtcbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgLy8gY29tcHV0ZSB0aGUgc2l6ZSAoc28gY3R4LnBvaW50ZXJTaXplIGlzIGNvcnJlY3QpXG4gICAgICB0aGlzLm9mZnNldFR5cGUgPSB7XG4gICAgICAgIHNpemU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnNpemUodmFsdWUsIGN0eCk7XG4gICAgICByZXR1cm4gW25ldyBQdHIoMCldO1xuICAgIH1cblxuICAgIHZhciBwdHIgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0VHlwZSA9IHtcbiAgICAgIGVuY29kZTogZnVuY3Rpb24gZW5jb2RlKHN0cmVhbSwgdmFsKSB7XG4gICAgICAgIHJldHVybiBwdHIgPSB2YWw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yJFBvaW50ZXIucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsIHN0cmVhbSwgdmFsdWUsIGN0eCk7XG5cbiAgICByZXR1cm4gW25ldyBQdHIocHRyKV07XG4gIH07XG5cbiAgcmV0dXJuIENGRlBvaW50ZXI7XG59KHIuUG9pbnRlcik7XG5cbnZhciBQdHIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQdHIodmFsKSB7XG4gICAgdGhpcy52YWwgPSB2YWw7XG4gICAgdGhpcy5mb3JjZUxhcmdlID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBfcHJvdG80ID0gUHRyLnByb3RvdHlwZTtcblxuICBfcHJvdG80LnZhbHVlT2YgPSBmdW5jdGlvbiB2YWx1ZU9mKCkge1xuICAgIHJldHVybiB0aGlzLnZhbDtcbiAgfTtcblxuICByZXR1cm4gUHRyO1xufSgpO1xuXG52YXIgQ0ZGQmxlbmRPcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENGRkJsZW5kT3AoKSB7fVxuXG4gIENGRkJsZW5kT3AuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSwgcGFyZW50LCBvcGVyYW5kcykge1xuICAgIHZhciBudW1CbGVuZHMgPSBvcGVyYW5kcy5wb3AoKTsgLy8gVE9ETzogYWN0dWFsbHkgYmxlbmQuIEZvciBub3cganVzdCBjb25zdW1lIHRoZSBkZWx0YXNcbiAgICAvLyBzaW5jZSB3ZSBkb24ndCB1c2UgYW55IG9mIHRoZSB2YWx1ZXMgYW55d2F5LlxuXG4gICAgd2hpbGUgKG9wZXJhbmRzLmxlbmd0aCA+IG51bUJsZW5kcykge1xuICAgICAgb3BlcmFuZHMucG9wKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBDRkZCbGVuZE9wO1xufSgpO1xuXG52YXIgQ0ZGUHJpdmF0ZURpY3QgPSBuZXcgQ0ZGRGljdChbLy8ga2V5ICAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0XG5bNiwgJ0JsdWVWYWx1ZXMnLCAnZGVsdGEnLCBudWxsXSwgWzcsICdPdGhlckJsdWVzJywgJ2RlbHRhJywgbnVsbF0sIFs4LCAnRmFtaWx5Qmx1ZXMnLCAnZGVsdGEnLCBudWxsXSwgWzksICdGYW1pbHlPdGhlckJsdWVzJywgJ2RlbHRhJywgbnVsbF0sIFtbMTIsIDldLCAnQmx1ZVNjYWxlJywgJ251bWJlcicsIDAuMDM5NjI1XSwgW1sxMiwgMTBdLCAnQmx1ZVNoaWZ0JywgJ251bWJlcicsIDddLCBbWzEyLCAxMV0sICdCbHVlRnV6eicsICdudW1iZXInLCAxXSwgWzEwLCAnU3RkSFcnLCAnbnVtYmVyJywgbnVsbF0sIFsxMSwgJ1N0ZFZXJywgJ251bWJlcicsIG51bGxdLCBbWzEyLCAxMl0sICdTdGVtU25hcEgnLCAnZGVsdGEnLCBudWxsXSwgW1sxMiwgMTNdLCAnU3RlbVNuYXBWJywgJ2RlbHRhJywgbnVsbF0sIFtbMTIsIDE0XSwgJ0ZvcmNlQm9sZCcsICdib29sZWFuJywgZmFsc2VdLCBbWzEyLCAxN10sICdMYW5ndWFnZUdyb3VwJywgJ251bWJlcicsIDBdLCBbWzEyLCAxOF0sICdFeHBhbnNpb25GYWN0b3InLCAnbnVtYmVyJywgMC4wNl0sIFtbMTIsIDE5XSwgJ2luaXRpYWxSYW5kb21TZWVkJywgJ251bWJlcicsIDBdLCBbMjAsICdkZWZhdWx0V2lkdGhYJywgJ251bWJlcicsIDBdLCBbMjEsICdub21pbmFsV2lkdGhYJywgJ251bWJlcicsIDBdLCBbMjIsICd2c2luZGV4JywgJ251bWJlcicsIDBdLCBbMjMsICdibGVuZCcsIENGRkJsZW5kT3AsIG51bGxdLCBbMTksICdTdWJycycsIG5ldyBDRkZQb2ludGVyKG5ldyBDRkZJbmRleCgpLCB7XG4gIHR5cGU6ICdsb2NhbCdcbn0pLCBudWxsXV0pOyAvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEFwcGVuZGl4IEEgb2YgdGhlIENGRiBzcGVjaWZpY2F0aW9uOyBkb1xuLy8gbm90IGVkaXQuIExlbmd0aCBzaG91bGQgYmUgMzkxLlxuXG52YXIgc3RhbmRhcmRTdHJpbmdzID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJBRVwiLCBcIm9yZGZlbWluaW5lXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJhZVwiLCBcImRvdGxlc3NpXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwib25lc3VwZXJpb3JcIiwgXCJsb2dpY2Fsbm90XCIsIFwibXVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJFdGhcIiwgXCJvbmVoYWxmXCIsIFwicGx1c21pbnVzXCIsIFwiVGhvcm5cIiwgXCJvbmVxdWFydGVyXCIsIFwiZGl2aWRlXCIsIFwiYnJva2VuYmFyXCIsIFwiZGVncmVlXCIsIFwidGhvcm5cIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJyZWdpc3RlcmVkXCIsIFwibWludXNcIiwgXCJldGhcIiwgXCJtdWx0aXBseVwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJjb3B5cmlnaHRcIiwgXCJBYWN1dGVcIiwgXCJBY2lyY3VtZmxleFwiLCBcIkFkaWVyZXNpc1wiLCBcIkFncmF2ZVwiLCBcIkFyaW5nXCIsIFwiQXRpbGRlXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiTnRpbGRlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPZGllcmVzaXNcIiwgXCJPZ3JhdmVcIiwgXCJPdGlsZGVcIiwgXCJTY2Fyb25cIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIlVncmF2ZVwiLCBcIllhY3V0ZVwiLCBcIllkaWVyZXNpc1wiLCBcIlpjYXJvblwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYWdyYXZlXCIsIFwiYXJpbmdcIiwgXCJhdGlsZGVcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiZWdyYXZlXCIsIFwiaWFjdXRlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm9ncmF2ZVwiLCBcIm90aWxkZVwiLCBcInNjYXJvblwiLCBcInVhY3V0ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwidWdyYXZlXCIsIFwieWFjdXRlXCIsIFwieWRpZXJlc2lzXCIsIFwiemNhcm9uXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcImFzdXBlcmlvclwiLCBcImJzdXBlcmlvclwiLCBcImNlbnRzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcImVzdXBlcmlvclwiLCBcImlzdXBlcmlvclwiLCBcImxzdXBlcmlvclwiLCBcIm1zdXBlcmlvclwiLCBcIm5zdXBlcmlvclwiLCBcIm9zdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcImZmXCIsIFwiZmZpXCIsIFwiZmZsXCIsIFwicGFyZW5sZWZ0aW5mZXJpb3JcIiwgXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIiwgXCJDaXJjdW1mbGV4c21hbGxcIiwgXCJoeXBoZW5zdXBlcmlvclwiLCBcIkdyYXZlc21hbGxcIiwgXCJBc21hbGxcIiwgXCJCc21hbGxcIiwgXCJDc21hbGxcIiwgXCJEc21hbGxcIiwgXCJFc21hbGxcIiwgXCJGc21hbGxcIiwgXCJHc21hbGxcIiwgXCJIc21hbGxcIiwgXCJJc21hbGxcIiwgXCJKc21hbGxcIiwgXCJLc21hbGxcIiwgXCJMc21hbGxcIiwgXCJNc21hbGxcIiwgXCJOc21hbGxcIiwgXCJPc21hbGxcIiwgXCJQc21hbGxcIiwgXCJRc21hbGxcIiwgXCJSc21hbGxcIiwgXCJTc21hbGxcIiwgXCJUc21hbGxcIiwgXCJVc21hbGxcIiwgXCJWc21hbGxcIiwgXCJXc21hbGxcIiwgXCJYc21hbGxcIiwgXCJZc21hbGxcIiwgXCJac21hbGxcIiwgXCJjb2xvbm1vbmV0YXJ5XCIsIFwib25lZml0dGVkXCIsIFwicnVwaWFoXCIsIFwiVGlsZGVzbWFsbFwiLCBcImV4Y2xhbWRvd25zbWFsbFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcIkxzbGFzaHNtYWxsXCIsIFwiU2Nhcm9uc21hbGxcIiwgXCJaY2Fyb25zbWFsbFwiLCBcIkRpZXJlc2lzc21hbGxcIiwgXCJCcmV2ZXNtYWxsXCIsIFwiQ2Fyb25zbWFsbFwiLCBcIkRvdGFjY2VudHNtYWxsXCIsIFwiTWFjcm9uc21hbGxcIiwgXCJmaWd1cmVkYXNoXCIsIFwiaHlwaGVuaW5mZXJpb3JcIiwgXCJPZ29uZWtzbWFsbFwiLCBcIlJpbmdzbWFsbFwiLCBcIkNlZGlsbGFzbWFsbFwiLCBcInF1ZXN0aW9uZG93bnNtYWxsXCIsIFwib25lZWlnaHRoXCIsIFwidGhyZWVlaWdodGhzXCIsIFwiZml2ZWVpZ2h0aHNcIiwgXCJzZXZlbmVpZ2h0aHNcIiwgXCJvbmV0aGlyZFwiLCBcInR3b3RoaXJkc1wiLCBcInplcm9zdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBY2lyY3VtZmxleHNtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkFyaW5nc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWFjdXRlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIklhY3V0ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiRXRoc21hbGxcIiwgXCJOdGlsZGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPY2lyY3VtZmxleHNtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk9Fc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVY2lyY3VtZmxleHNtYWxsXCIsIFwiVWRpZXJlc2lzc21hbGxcIiwgXCJZYWN1dGVzbWFsbFwiLCBcIlRob3Juc21hbGxcIiwgXCJZZGllcmVzaXNzbWFsbFwiLCBcIjAwMS4wMDBcIiwgXCIwMDEuMDAxXCIsIFwiMDAxLjAwMlwiLCBcIjAwMS4wMDNcIiwgXCJCbGFja1wiLCBcIkJvbGRcIiwgXCJCb29rXCIsIFwiTGlnaHRcIiwgXCJNZWRpdW1cIiwgXCJSZWd1bGFyXCIsIFwiUm9tYW5cIiwgXCJTZW1pYm9sZFwiXTtcbnZhciBTdGFuZGFyZEVuY29kaW5nID0gWycnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NwYWNlJywgJ2V4Y2xhbScsICdxdW90ZWRibCcsICdudW1iZXJzaWduJywgJ2RvbGxhcicsICdwZXJjZW50JywgJ2FtcGVyc2FuZCcsICdxdW90ZXJpZ2h0JywgJ3BhcmVubGVmdCcsICdwYXJlbnJpZ2h0JywgJ2FzdGVyaXNrJywgJ3BsdXMnLCAnY29tbWEnLCAnaHlwaGVuJywgJ3BlcmlvZCcsICdzbGFzaCcsICd6ZXJvJywgJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91cicsICdmaXZlJywgJ3NpeCcsICdzZXZlbicsICdlaWdodCcsICduaW5lJywgJ2NvbG9uJywgJ3NlbWljb2xvbicsICdsZXNzJywgJ2VxdWFsJywgJ2dyZWF0ZXInLCAncXVlc3Rpb24nLCAnYXQnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsICdLJywgJ0wnLCAnTScsICdOJywgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICdUJywgJ1UnLCAnVicsICdXJywgJ1gnLCAnWScsICdaJywgJ2JyYWNrZXRsZWZ0JywgJ2JhY2tzbGFzaCcsICdicmFja2V0cmlnaHQnLCAnYXNjaWljaXJjdW0nLCAndW5kZXJzY29yZScsICdxdW90ZWxlZnQnLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICdoJywgJ2knLCAnaicsICdrJywgJ2wnLCAnbScsICduJywgJ28nLCAncCcsICdxJywgJ3InLCAncycsICd0JywgJ3UnLCAndicsICd3JywgJ3gnLCAneScsICd6JywgJ2JyYWNlbGVmdCcsICdiYXInLCAnYnJhY2VyaWdodCcsICdhc2NpaXRpbGRlJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICdleGNsYW1kb3duJywgJ2NlbnQnLCAnc3RlcmxpbmcnLCAnZnJhY3Rpb24nLCAneWVuJywgJ2Zsb3JpbicsICdzZWN0aW9uJywgJ2N1cnJlbmN5JywgJ3F1b3Rlc2luZ2xlJywgJ3F1b3RlZGJsbGVmdCcsICdndWlsbGVtb3RsZWZ0JywgJ2d1aWxzaW5nbGxlZnQnLCAnZ3VpbHNpbmdscmlnaHQnLCAnZmknLCAnZmwnLCAnJywgJ2VuZGFzaCcsICdkYWdnZXInLCAnZGFnZ2VyZGJsJywgJ3BlcmlvZGNlbnRlcmVkJywgJycsICdwYXJhZ3JhcGgnLCAnYnVsbGV0JywgJ3F1b3Rlc2luZ2xiYXNlJywgJ3F1b3RlZGJsYmFzZScsICdxdW90ZWRibHJpZ2h0JywgJ2d1aWxsZW1vdHJpZ2h0JywgJ2VsbGlwc2lzJywgJ3BlcnRob3VzYW5kJywgJycsICdxdWVzdGlvbmRvd24nLCAnJywgJ2dyYXZlJywgJ2FjdXRlJywgJ2NpcmN1bWZsZXgnLCAndGlsZGUnLCAnbWFjcm9uJywgJ2JyZXZlJywgJ2RvdGFjY2VudCcsICdkaWVyZXNpcycsICcnLCAncmluZycsICdjZWRpbGxhJywgJycsICdodW5nYXJ1bWxhdXQnLCAnb2dvbmVrJywgJ2Nhcm9uJywgJ2VtZGFzaCcsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnQUUnLCAnJywgJ29yZGZlbWluaW5lJywgJycsICcnLCAnJywgJycsICdMc2xhc2gnLCAnT3NsYXNoJywgJ09FJywgJ29yZG1hc2N1bGluZScsICcnLCAnJywgJycsICcnLCAnJywgJ2FlJywgJycsICcnLCAnJywgJ2RvdGxlc3NpJywgJycsICcnLCAnbHNsYXNoJywgJ29zbGFzaCcsICdvZScsICdnZXJtYW5kYmxzJ107XG52YXIgRXhwZXJ0RW5jb2RpbmcgPSBbJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnc3BhY2UnLCAnZXhjbGFtc21hbGwnLCAnSHVuZ2FydW1sYXV0c21hbGwnLCAnJywgJ2RvbGxhcm9sZHN0eWxlJywgJ2RvbGxhcnN1cGVyaW9yJywgJ2FtcGVyc2FuZHNtYWxsJywgJ0FjdXRlc21hbGwnLCAncGFyZW5sZWZ0c3VwZXJpb3InLCAncGFyZW5yaWdodHN1cGVyaW9yJywgJ3R3b2RvdGVubGVhZGVyJywgJ29uZWRvdGVubGVhZGVyJywgJ2NvbW1hJywgJ2h5cGhlbicsICdwZXJpb2QnLCAnZnJhY3Rpb24nLCAnemVyb29sZHN0eWxlJywgJ29uZW9sZHN0eWxlJywgJ3R3b29sZHN0eWxlJywgJ3RocmVlb2xkc3R5bGUnLCAnZm91cm9sZHN0eWxlJywgJ2ZpdmVvbGRzdHlsZScsICdzaXhvbGRzdHlsZScsICdzZXZlbm9sZHN0eWxlJywgJ2VpZ2h0b2xkc3R5bGUnLCAnbmluZW9sZHN0eWxlJywgJ2NvbG9uJywgJ3NlbWljb2xvbicsICdjb21tYXN1cGVyaW9yJywgJ3RocmVlcXVhcnRlcnNlbWRhc2gnLCAncGVyaW9kc3VwZXJpb3InLCAncXVlc3Rpb25zbWFsbCcsICcnLCAnYXN1cGVyaW9yJywgJ2JzdXBlcmlvcicsICdjZW50c3VwZXJpb3InLCAnZHN1cGVyaW9yJywgJ2VzdXBlcmlvcicsICcnLCAnJywgJ2lzdXBlcmlvcicsICcnLCAnJywgJ2xzdXBlcmlvcicsICdtc3VwZXJpb3InLCAnbnN1cGVyaW9yJywgJ29zdXBlcmlvcicsICcnLCAnJywgJ3JzdXBlcmlvcicsICdzc3VwZXJpb3InLCAndHN1cGVyaW9yJywgJycsICdmZicsICdmaScsICdmbCcsICdmZmknLCAnZmZsJywgJ3BhcmVubGVmdGluZmVyaW9yJywgJycsICdwYXJlbnJpZ2h0aW5mZXJpb3InLCAnQ2lyY3VtZmxleHNtYWxsJywgJ2h5cGhlbnN1cGVyaW9yJywgJ0dyYXZlc21hbGwnLCAnQXNtYWxsJywgJ0JzbWFsbCcsICdDc21hbGwnLCAnRHNtYWxsJywgJ0VzbWFsbCcsICdGc21hbGwnLCAnR3NtYWxsJywgJ0hzbWFsbCcsICdJc21hbGwnLCAnSnNtYWxsJywgJ0tzbWFsbCcsICdMc21hbGwnLCAnTXNtYWxsJywgJ05zbWFsbCcsICdPc21hbGwnLCAnUHNtYWxsJywgJ1FzbWFsbCcsICdSc21hbGwnLCAnU3NtYWxsJywgJ1RzbWFsbCcsICdVc21hbGwnLCAnVnNtYWxsJywgJ1dzbWFsbCcsICdYc21hbGwnLCAnWXNtYWxsJywgJ1pzbWFsbCcsICdjb2xvbm1vbmV0YXJ5JywgJ29uZWZpdHRlZCcsICdydXBpYWgnLCAnVGlsZGVzbWFsbCcsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnZXhjbGFtZG93bnNtYWxsJywgJ2NlbnRvbGRzdHlsZScsICdMc2xhc2hzbWFsbCcsICcnLCAnJywgJ1NjYXJvbnNtYWxsJywgJ1pjYXJvbnNtYWxsJywgJ0RpZXJlc2lzc21hbGwnLCAnQnJldmVzbWFsbCcsICdDYXJvbnNtYWxsJywgJycsICdEb3RhY2NlbnRzbWFsbCcsICcnLCAnJywgJ01hY3JvbnNtYWxsJywgJycsICcnLCAnZmlndXJlZGFzaCcsICdoeXBoZW5pbmZlcmlvcicsICcnLCAnJywgJ09nb25la3NtYWxsJywgJ1JpbmdzbWFsbCcsICdDZWRpbGxhc21hbGwnLCAnJywgJycsICcnLCAnb25lcXVhcnRlcicsICdvbmVoYWxmJywgJ3RocmVlcXVhcnRlcnMnLCAncXVlc3Rpb25kb3duc21hbGwnLCAnb25lZWlnaHRoJywgJ3RocmVlZWlnaHRocycsICdmaXZlZWlnaHRocycsICdzZXZlbmVpZ2h0aHMnLCAnb25ldGhpcmQnLCAndHdvdGhpcmRzJywgJycsICcnLCAnemVyb3N1cGVyaW9yJywgJ29uZXN1cGVyaW9yJywgJ3R3b3N1cGVyaW9yJywgJ3RocmVlc3VwZXJpb3InLCAnZm91cnN1cGVyaW9yJywgJ2ZpdmVzdXBlcmlvcicsICdzaXhzdXBlcmlvcicsICdzZXZlbnN1cGVyaW9yJywgJ2VpZ2h0c3VwZXJpb3InLCAnbmluZXN1cGVyaW9yJywgJ3plcm9pbmZlcmlvcicsICdvbmVpbmZlcmlvcicsICd0d29pbmZlcmlvcicsICd0aHJlZWluZmVyaW9yJywgJ2ZvdXJpbmZlcmlvcicsICdmaXZlaW5mZXJpb3InLCAnc2l4aW5mZXJpb3InLCAnc2V2ZW5pbmZlcmlvcicsICdlaWdodGluZmVyaW9yJywgJ25pbmVpbmZlcmlvcicsICdjZW50aW5mZXJpb3InLCAnZG9sbGFyaW5mZXJpb3InLCAncGVyaW9kaW5mZXJpb3InLCAnY29tbWFpbmZlcmlvcicsICdBZ3JhdmVzbWFsbCcsICdBYWN1dGVzbWFsbCcsICdBY2lyY3VtZmxleHNtYWxsJywgJ0F0aWxkZXNtYWxsJywgJ0FkaWVyZXNpc3NtYWxsJywgJ0FyaW5nc21hbGwnLCAnQUVzbWFsbCcsICdDY2VkaWxsYXNtYWxsJywgJ0VncmF2ZXNtYWxsJywgJ0VhY3V0ZXNtYWxsJywgJ0VjaXJjdW1mbGV4c21hbGwnLCAnRWRpZXJlc2lzc21hbGwnLCAnSWdyYXZlc21hbGwnLCAnSWFjdXRlc21hbGwnLCAnSWNpcmN1bWZsZXhzbWFsbCcsICdJZGllcmVzaXNzbWFsbCcsICdFdGhzbWFsbCcsICdOdGlsZGVzbWFsbCcsICdPZ3JhdmVzbWFsbCcsICdPYWN1dGVzbWFsbCcsICdPY2lyY3VtZmxleHNtYWxsJywgJ090aWxkZXNtYWxsJywgJ09kaWVyZXNpc3NtYWxsJywgJ09Fc21hbGwnLCAnT3NsYXNoc21hbGwnLCAnVWdyYXZlc21hbGwnLCAnVWFjdXRlc21hbGwnLCAnVWNpcmN1bWZsZXhzbWFsbCcsICdVZGllcmVzaXNzbWFsbCcsICdZYWN1dGVzbWFsbCcsICdUaG9ybnNtYWxsJywgJ1lkaWVyZXNpc3NtYWxsJ107XG52YXIgSVNPQWRvYmVDaGFyc2V0ID0gWycubm90ZGVmJywgJ3NwYWNlJywgJ2V4Y2xhbScsICdxdW90ZWRibCcsICdudW1iZXJzaWduJywgJ2RvbGxhcicsICdwZXJjZW50JywgJ2FtcGVyc2FuZCcsICdxdW90ZXJpZ2h0JywgJ3BhcmVubGVmdCcsICdwYXJlbnJpZ2h0JywgJ2FzdGVyaXNrJywgJ3BsdXMnLCAnY29tbWEnLCAnaHlwaGVuJywgJ3BlcmlvZCcsICdzbGFzaCcsICd6ZXJvJywgJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91cicsICdmaXZlJywgJ3NpeCcsICdzZXZlbicsICdlaWdodCcsICduaW5lJywgJ2NvbG9uJywgJ3NlbWljb2xvbicsICdsZXNzJywgJ2VxdWFsJywgJ2dyZWF0ZXInLCAncXVlc3Rpb24nLCAnYXQnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsICdLJywgJ0wnLCAnTScsICdOJywgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICdUJywgJ1UnLCAnVicsICdXJywgJ1gnLCAnWScsICdaJywgJ2JyYWNrZXRsZWZ0JywgJ2JhY2tzbGFzaCcsICdicmFja2V0cmlnaHQnLCAnYXNjaWljaXJjdW0nLCAndW5kZXJzY29yZScsICdxdW90ZWxlZnQnLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICdoJywgJ2knLCAnaicsICdrJywgJ2wnLCAnbScsICduJywgJ28nLCAncCcsICdxJywgJ3InLCAncycsICd0JywgJ3UnLCAndicsICd3JywgJ3gnLCAneScsICd6JywgJ2JyYWNlbGVmdCcsICdiYXInLCAnYnJhY2VyaWdodCcsICdhc2NpaXRpbGRlJywgJ2V4Y2xhbWRvd24nLCAnY2VudCcsICdzdGVybGluZycsICdmcmFjdGlvbicsICd5ZW4nLCAnZmxvcmluJywgJ3NlY3Rpb24nLCAnY3VycmVuY3knLCAncXVvdGVzaW5nbGUnLCAncXVvdGVkYmxsZWZ0JywgJ2d1aWxsZW1vdGxlZnQnLCAnZ3VpbHNpbmdsbGVmdCcsICdndWlsc2luZ2xyaWdodCcsICdmaScsICdmbCcsICdlbmRhc2gnLCAnZGFnZ2VyJywgJ2RhZ2dlcmRibCcsICdwZXJpb2RjZW50ZXJlZCcsICdwYXJhZ3JhcGgnLCAnYnVsbGV0JywgJ3F1b3Rlc2luZ2xiYXNlJywgJ3F1b3RlZGJsYmFzZScsICdxdW90ZWRibHJpZ2h0JywgJ2d1aWxsZW1vdHJpZ2h0JywgJ2VsbGlwc2lzJywgJ3BlcnRob3VzYW5kJywgJ3F1ZXN0aW9uZG93bicsICdncmF2ZScsICdhY3V0ZScsICdjaXJjdW1mbGV4JywgJ3RpbGRlJywgJ21hY3JvbicsICdicmV2ZScsICdkb3RhY2NlbnQnLCAnZGllcmVzaXMnLCAncmluZycsICdjZWRpbGxhJywgJ2h1bmdhcnVtbGF1dCcsICdvZ29uZWsnLCAnY2Fyb24nLCAnZW1kYXNoJywgJ0FFJywgJ29yZGZlbWluaW5lJywgJ0xzbGFzaCcsICdPc2xhc2gnLCAnT0UnLCAnb3JkbWFzY3VsaW5lJywgJ2FlJywgJ2RvdGxlc3NpJywgJ2xzbGFzaCcsICdvc2xhc2gnLCAnb2UnLCAnZ2VybWFuZGJscycsICdvbmVzdXBlcmlvcicsICdsb2dpY2Fsbm90JywgJ211JywgJ3RyYWRlbWFyaycsICdFdGgnLCAnb25laGFsZicsICdwbHVzbWludXMnLCAnVGhvcm4nLCAnb25lcXVhcnRlcicsICdkaXZpZGUnLCAnYnJva2VuYmFyJywgJ2RlZ3JlZScsICd0aG9ybicsICd0aHJlZXF1YXJ0ZXJzJywgJ3R3b3N1cGVyaW9yJywgJ3JlZ2lzdGVyZWQnLCAnbWludXMnLCAnZXRoJywgJ211bHRpcGx5JywgJ3RocmVlc3VwZXJpb3InLCAnY29weXJpZ2h0JywgJ0FhY3V0ZScsICdBY2lyY3VtZmxleCcsICdBZGllcmVzaXMnLCAnQWdyYXZlJywgJ0FyaW5nJywgJ0F0aWxkZScsICdDY2VkaWxsYScsICdFYWN1dGUnLCAnRWNpcmN1bWZsZXgnLCAnRWRpZXJlc2lzJywgJ0VncmF2ZScsICdJYWN1dGUnLCAnSWNpcmN1bWZsZXgnLCAnSWRpZXJlc2lzJywgJ0lncmF2ZScsICdOdGlsZGUnLCAnT2FjdXRlJywgJ09jaXJjdW1mbGV4JywgJ09kaWVyZXNpcycsICdPZ3JhdmUnLCAnT3RpbGRlJywgJ1NjYXJvbicsICdVYWN1dGUnLCAnVWNpcmN1bWZsZXgnLCAnVWRpZXJlc2lzJywgJ1VncmF2ZScsICdZYWN1dGUnLCAnWWRpZXJlc2lzJywgJ1pjYXJvbicsICdhYWN1dGUnLCAnYWNpcmN1bWZsZXgnLCAnYWRpZXJlc2lzJywgJ2FncmF2ZScsICdhcmluZycsICdhdGlsZGUnLCAnY2NlZGlsbGEnLCAnZWFjdXRlJywgJ2VjaXJjdW1mbGV4JywgJ2VkaWVyZXNpcycsICdlZ3JhdmUnLCAnaWFjdXRlJywgJ2ljaXJjdW1mbGV4JywgJ2lkaWVyZXNpcycsICdpZ3JhdmUnLCAnbnRpbGRlJywgJ29hY3V0ZScsICdvY2lyY3VtZmxleCcsICdvZGllcmVzaXMnLCAnb2dyYXZlJywgJ290aWxkZScsICdzY2Fyb24nLCAndWFjdXRlJywgJ3VjaXJjdW1mbGV4JywgJ3VkaWVyZXNpcycsICd1Z3JhdmUnLCAneWFjdXRlJywgJ3lkaWVyZXNpcycsICd6Y2Fyb24nXTtcbnZhciBFeHBlcnRDaGFyc2V0ID0gWycubm90ZGVmJywgJ3NwYWNlJywgJ2V4Y2xhbXNtYWxsJywgJ0h1bmdhcnVtbGF1dHNtYWxsJywgJ2RvbGxhcm9sZHN0eWxlJywgJ2RvbGxhcnN1cGVyaW9yJywgJ2FtcGVyc2FuZHNtYWxsJywgJ0FjdXRlc21hbGwnLCAncGFyZW5sZWZ0c3VwZXJpb3InLCAncGFyZW5yaWdodHN1cGVyaW9yJywgJ3R3b2RvdGVubGVhZGVyJywgJ29uZWRvdGVubGVhZGVyJywgJ2NvbW1hJywgJ2h5cGhlbicsICdwZXJpb2QnLCAnZnJhY3Rpb24nLCAnemVyb29sZHN0eWxlJywgJ29uZW9sZHN0eWxlJywgJ3R3b29sZHN0eWxlJywgJ3RocmVlb2xkc3R5bGUnLCAnZm91cm9sZHN0eWxlJywgJ2ZpdmVvbGRzdHlsZScsICdzaXhvbGRzdHlsZScsICdzZXZlbm9sZHN0eWxlJywgJ2VpZ2h0b2xkc3R5bGUnLCAnbmluZW9sZHN0eWxlJywgJ2NvbG9uJywgJ3NlbWljb2xvbicsICdjb21tYXN1cGVyaW9yJywgJ3RocmVlcXVhcnRlcnNlbWRhc2gnLCAncGVyaW9kc3VwZXJpb3InLCAncXVlc3Rpb25zbWFsbCcsICdhc3VwZXJpb3InLCAnYnN1cGVyaW9yJywgJ2NlbnRzdXBlcmlvcicsICdkc3VwZXJpb3InLCAnZXN1cGVyaW9yJywgJ2lzdXBlcmlvcicsICdsc3VwZXJpb3InLCAnbXN1cGVyaW9yJywgJ25zdXBlcmlvcicsICdvc3VwZXJpb3InLCAncnN1cGVyaW9yJywgJ3NzdXBlcmlvcicsICd0c3VwZXJpb3InLCAnZmYnLCAnZmknLCAnZmwnLCAnZmZpJywgJ2ZmbCcsICdwYXJlbmxlZnRpbmZlcmlvcicsICdwYXJlbnJpZ2h0aW5mZXJpb3InLCAnQ2lyY3VtZmxleHNtYWxsJywgJ2h5cGhlbnN1cGVyaW9yJywgJ0dyYXZlc21hbGwnLCAnQXNtYWxsJywgJ0JzbWFsbCcsICdDc21hbGwnLCAnRHNtYWxsJywgJ0VzbWFsbCcsICdGc21hbGwnLCAnR3NtYWxsJywgJ0hzbWFsbCcsICdJc21hbGwnLCAnSnNtYWxsJywgJ0tzbWFsbCcsICdMc21hbGwnLCAnTXNtYWxsJywgJ05zbWFsbCcsICdPc21hbGwnLCAnUHNtYWxsJywgJ1FzbWFsbCcsICdSc21hbGwnLCAnU3NtYWxsJywgJ1RzbWFsbCcsICdVc21hbGwnLCAnVnNtYWxsJywgJ1dzbWFsbCcsICdYc21hbGwnLCAnWXNtYWxsJywgJ1pzbWFsbCcsICdjb2xvbm1vbmV0YXJ5JywgJ29uZWZpdHRlZCcsICdydXBpYWgnLCAnVGlsZGVzbWFsbCcsICdleGNsYW1kb3duc21hbGwnLCAnY2VudG9sZHN0eWxlJywgJ0xzbGFzaHNtYWxsJywgJ1NjYXJvbnNtYWxsJywgJ1pjYXJvbnNtYWxsJywgJ0RpZXJlc2lzc21hbGwnLCAnQnJldmVzbWFsbCcsICdDYXJvbnNtYWxsJywgJ0RvdGFjY2VudHNtYWxsJywgJ01hY3JvbnNtYWxsJywgJ2ZpZ3VyZWRhc2gnLCAnaHlwaGVuaW5mZXJpb3InLCAnT2dvbmVrc21hbGwnLCAnUmluZ3NtYWxsJywgJ0NlZGlsbGFzbWFsbCcsICdvbmVxdWFydGVyJywgJ29uZWhhbGYnLCAndGhyZWVxdWFydGVycycsICdxdWVzdGlvbmRvd25zbWFsbCcsICdvbmVlaWdodGgnLCAndGhyZWVlaWdodGhzJywgJ2ZpdmVlaWdodGhzJywgJ3NldmVuZWlnaHRocycsICdvbmV0aGlyZCcsICd0d290aGlyZHMnLCAnemVyb3N1cGVyaW9yJywgJ29uZXN1cGVyaW9yJywgJ3R3b3N1cGVyaW9yJywgJ3RocmVlc3VwZXJpb3InLCAnZm91cnN1cGVyaW9yJywgJ2ZpdmVzdXBlcmlvcicsICdzaXhzdXBlcmlvcicsICdzZXZlbnN1cGVyaW9yJywgJ2VpZ2h0c3VwZXJpb3InLCAnbmluZXN1cGVyaW9yJywgJ3plcm9pbmZlcmlvcicsICdvbmVpbmZlcmlvcicsICd0d29pbmZlcmlvcicsICd0aHJlZWluZmVyaW9yJywgJ2ZvdXJpbmZlcmlvcicsICdmaXZlaW5mZXJpb3InLCAnc2l4aW5mZXJpb3InLCAnc2V2ZW5pbmZlcmlvcicsICdlaWdodGluZmVyaW9yJywgJ25pbmVpbmZlcmlvcicsICdjZW50aW5mZXJpb3InLCAnZG9sbGFyaW5mZXJpb3InLCAncGVyaW9kaW5mZXJpb3InLCAnY29tbWFpbmZlcmlvcicsICdBZ3JhdmVzbWFsbCcsICdBYWN1dGVzbWFsbCcsICdBY2lyY3VtZmxleHNtYWxsJywgJ0F0aWxkZXNtYWxsJywgJ0FkaWVyZXNpc3NtYWxsJywgJ0FyaW5nc21hbGwnLCAnQUVzbWFsbCcsICdDY2VkaWxsYXNtYWxsJywgJ0VncmF2ZXNtYWxsJywgJ0VhY3V0ZXNtYWxsJywgJ0VjaXJjdW1mbGV4c21hbGwnLCAnRWRpZXJlc2lzc21hbGwnLCAnSWdyYXZlc21hbGwnLCAnSWFjdXRlc21hbGwnLCAnSWNpcmN1bWZsZXhzbWFsbCcsICdJZGllcmVzaXNzbWFsbCcsICdFdGhzbWFsbCcsICdOdGlsZGVzbWFsbCcsICdPZ3JhdmVzbWFsbCcsICdPYWN1dGVzbWFsbCcsICdPY2lyY3VtZmxleHNtYWxsJywgJ090aWxkZXNtYWxsJywgJ09kaWVyZXNpc3NtYWxsJywgJ09Fc21hbGwnLCAnT3NsYXNoc21hbGwnLCAnVWdyYXZlc21hbGwnLCAnVWFjdXRlc21hbGwnLCAnVWNpcmN1bWZsZXhzbWFsbCcsICdVZGllcmVzaXNzbWFsbCcsICdZYWN1dGVzbWFsbCcsICdUaG9ybnNtYWxsJywgJ1lkaWVyZXNpc3NtYWxsJ107XG52YXIgRXhwZXJ0U3Vic2V0Q2hhcnNldCA9IFsnLm5vdGRlZicsICdzcGFjZScsICdkb2xsYXJvbGRzdHlsZScsICdkb2xsYXJzdXBlcmlvcicsICdwYXJlbmxlZnRzdXBlcmlvcicsICdwYXJlbnJpZ2h0c3VwZXJpb3InLCAndHdvZG90ZW5sZWFkZXInLCAnb25lZG90ZW5sZWFkZXInLCAnY29tbWEnLCAnaHlwaGVuJywgJ3BlcmlvZCcsICdmcmFjdGlvbicsICd6ZXJvb2xkc3R5bGUnLCAnb25lb2xkc3R5bGUnLCAndHdvb2xkc3R5bGUnLCAndGhyZWVvbGRzdHlsZScsICdmb3Vyb2xkc3R5bGUnLCAnZml2ZW9sZHN0eWxlJywgJ3NpeG9sZHN0eWxlJywgJ3NldmVub2xkc3R5bGUnLCAnZWlnaHRvbGRzdHlsZScsICduaW5lb2xkc3R5bGUnLCAnY29sb24nLCAnc2VtaWNvbG9uJywgJ2NvbW1hc3VwZXJpb3InLCAndGhyZWVxdWFydGVyc2VtZGFzaCcsICdwZXJpb2RzdXBlcmlvcicsICdhc3VwZXJpb3InLCAnYnN1cGVyaW9yJywgJ2NlbnRzdXBlcmlvcicsICdkc3VwZXJpb3InLCAnZXN1cGVyaW9yJywgJ2lzdXBlcmlvcicsICdsc3VwZXJpb3InLCAnbXN1cGVyaW9yJywgJ25zdXBlcmlvcicsICdvc3VwZXJpb3InLCAncnN1cGVyaW9yJywgJ3NzdXBlcmlvcicsICd0c3VwZXJpb3InLCAnZmYnLCAnZmknLCAnZmwnLCAnZmZpJywgJ2ZmbCcsICdwYXJlbmxlZnRpbmZlcmlvcicsICdwYXJlbnJpZ2h0aW5mZXJpb3InLCAnaHlwaGVuc3VwZXJpb3InLCAnY29sb25tb25ldGFyeScsICdvbmVmaXR0ZWQnLCAncnVwaWFoJywgJ2NlbnRvbGRzdHlsZScsICdmaWd1cmVkYXNoJywgJ2h5cGhlbmluZmVyaW9yJywgJ29uZXF1YXJ0ZXInLCAnb25laGFsZicsICd0aHJlZXF1YXJ0ZXJzJywgJ29uZWVpZ2h0aCcsICd0aHJlZWVpZ2h0aHMnLCAnZml2ZWVpZ2h0aHMnLCAnc2V2ZW5laWdodGhzJywgJ29uZXRoaXJkJywgJ3R3b3RoaXJkcycsICd6ZXJvc3VwZXJpb3InLCAnb25lc3VwZXJpb3InLCAndHdvc3VwZXJpb3InLCAndGhyZWVzdXBlcmlvcicsICdmb3Vyc3VwZXJpb3InLCAnZml2ZXN1cGVyaW9yJywgJ3NpeHN1cGVyaW9yJywgJ3NldmVuc3VwZXJpb3InLCAnZWlnaHRzdXBlcmlvcicsICduaW5lc3VwZXJpb3InLCAnemVyb2luZmVyaW9yJywgJ29uZWluZmVyaW9yJywgJ3R3b2luZmVyaW9yJywgJ3RocmVlaW5mZXJpb3InLCAnZm91cmluZmVyaW9yJywgJ2ZpdmVpbmZlcmlvcicsICdzaXhpbmZlcmlvcicsICdzZXZlbmluZmVyaW9yJywgJ2VpZ2h0aW5mZXJpb3InLCAnbmluZWluZmVyaW9yJywgJ2NlbnRpbmZlcmlvcicsICdkb2xsYXJpbmZlcmlvcicsICdwZXJpb2RpbmZlcmlvcicsICdjb21tYWluZmVyaW9yJ107IC8vIFNjcmlwdHMgYW5kIExhbmd1YWdlcyAjXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG52YXIgTGFuZ1N5c1RhYmxlID0gbmV3IHIuU3RydWN0KHtcbiAgcmVzZXJ2ZWQ6IG5ldyByLlJlc2VydmVkKHIudWludDE2KSxcbiAgcmVxRmVhdHVyZUluZGV4OiByLnVpbnQxNixcbiAgZmVhdHVyZUNvdW50OiByLnVpbnQxNixcbiAgZmVhdHVyZUluZGV4ZXM6IG5ldyByLkFycmF5KHIudWludDE2LCAnZmVhdHVyZUNvdW50Jylcbn0pO1xudmFyIExhbmdTeXNSZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICB0YWc6IG5ldyByLlN0cmluZyg0KSxcbiAgbGFuZ1N5czogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgTGFuZ1N5c1RhYmxlLCB7XG4gICAgdHlwZTogJ3BhcmVudCdcbiAgfSlcbn0pO1xudmFyIFNjcmlwdCA9IG5ldyByLlN0cnVjdCh7XG4gIGRlZmF1bHRMYW5nU3lzOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBMYW5nU3lzVGFibGUpLFxuICBjb3VudDogci51aW50MTYsXG4gIGxhbmdTeXNSZWNvcmRzOiBuZXcgci5BcnJheShMYW5nU3lzUmVjb3JkLCAnY291bnQnKVxufSk7XG52YXIgU2NyaXB0UmVjb3JkID0gbmV3IHIuU3RydWN0KHtcbiAgdGFnOiBuZXcgci5TdHJpbmcoNCksXG4gIHNjcmlwdDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgU2NyaXB0LCB7XG4gICAgdHlwZTogJ3BhcmVudCdcbiAgfSlcbn0pO1xudmFyIFNjcmlwdExpc3QgPSBuZXcgci5BcnJheShTY3JpcHRSZWNvcmQsIHIudWludDE2KTsgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gRmVhdHVyZXMgYW5kIExvb2t1cHMgI1xuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG52YXIgRmVhdHVyZSA9IG5ldyByLlN0cnVjdCh7XG4gIGZlYXR1cmVQYXJhbXM6IHIudWludDE2LFxuICAvLyBwb2ludGVyXG4gIGxvb2t1cENvdW50OiByLnVpbnQxNixcbiAgbG9va3VwTGlzdEluZGV4ZXM6IG5ldyByLkFycmF5KHIudWludDE2LCAnbG9va3VwQ291bnQnKVxufSk7XG52YXIgRmVhdHVyZVJlY29yZCA9IG5ldyByLlN0cnVjdCh7XG4gIHRhZzogbmV3IHIuU3RyaW5nKDQpLFxuICBmZWF0dXJlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBGZWF0dXJlLCB7XG4gICAgdHlwZTogJ3BhcmVudCdcbiAgfSlcbn0pO1xudmFyIEZlYXR1cmVMaXN0ID0gbmV3IHIuQXJyYXkoRmVhdHVyZVJlY29yZCwgci51aW50MTYpO1xudmFyIExvb2t1cEZsYWdzID0gbmV3IHIuU3RydWN0KHtcbiAgbWFya0F0dGFjaG1lbnRUeXBlOiByLnVpbnQ4LFxuICBmbGFnczogbmV3IHIuQml0ZmllbGQoci51aW50OCwgWydyaWdodFRvTGVmdCcsICdpZ25vcmVCYXNlR2x5cGhzJywgJ2lnbm9yZUxpZ2F0dXJlcycsICdpZ25vcmVNYXJrcycsICd1c2VNYXJrRmlsdGVyaW5nU2V0J10pXG59KTtcblxuZnVuY3Rpb24gTG9va3VwTGlzdChTdWJUYWJsZSkge1xuICB2YXIgTG9va3VwID0gbmV3IHIuU3RydWN0KHtcbiAgICBsb29rdXBUeXBlOiByLnVpbnQxNixcbiAgICBmbGFnczogTG9va3VwRmxhZ3MsXG4gICAgc3ViVGFibGVDb3VudDogci51aW50MTYsXG4gICAgc3ViVGFibGVzOiBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBTdWJUYWJsZSksICdzdWJUYWJsZUNvdW50JyksXG4gICAgbWFya0ZpbHRlcmluZ1NldDogbmV3IHIuT3B0aW9uYWwoci51aW50MTYsIGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5mbGFncy5mbGFncy51c2VNYXJrRmlsdGVyaW5nU2V0O1xuICAgIH0pXG4gIH0pO1xuICByZXR1cm4gbmV3IHIuTGF6eUFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MTYsIExvb2t1cCksIHIudWludDE2KTtcbn0gLy8jIyMjIyMjIyMjIyMjIyMjI1xuLy8gQ292ZXJhZ2UgVGFibGUgI1xuLy8jIyMjIyMjIyMjIyMjIyMjI1xuXG5cbnZhciBSYW5nZVJlY29yZCA9IG5ldyByLlN0cnVjdCh7XG4gIHN0YXJ0OiByLnVpbnQxNixcbiAgZW5kOiByLnVpbnQxNixcbiAgc3RhcnRDb3ZlcmFnZUluZGV4OiByLnVpbnQxNlxufSk7XG52YXIgQ292ZXJhZ2UgPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3Qoci51aW50MTYsIHtcbiAgMToge1xuICAgIGdseXBoQ291bnQ6IHIudWludDE2LFxuICAgIGdseXBoczogbmV3IHIuQXJyYXkoci51aW50MTYsICdnbHlwaENvdW50JylcbiAgfSxcbiAgMjoge1xuICAgIHJhbmdlQ291bnQ6IHIudWludDE2LFxuICAgIHJhbmdlUmVjb3JkczogbmV3IHIuQXJyYXkoUmFuZ2VSZWNvcmQsICdyYW5nZUNvdW50JylcbiAgfVxufSk7IC8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gQ2xhc3MgRGVmaW5pdGlvbiBUYWJsZSAjXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcblxudmFyIENsYXNzUmFuZ2VSZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICBzdGFydDogci51aW50MTYsXG4gIGVuZDogci51aW50MTYsXG4gIGNsYXNzOiByLnVpbnQxNlxufSk7XG52YXIgQ2xhc3NEZWYgPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3Qoci51aW50MTYsIHtcbiAgMToge1xuICAgIC8vIENsYXNzIGFycmF5XG4gICAgc3RhcnRHbHlwaDogci51aW50MTYsXG4gICAgZ2x5cGhDb3VudDogci51aW50MTYsXG4gICAgY2xhc3NWYWx1ZUFycmF5OiBuZXcgci5BcnJheShyLnVpbnQxNiwgJ2dseXBoQ291bnQnKVxuICB9LFxuICAyOiB7XG4gICAgLy8gQ2xhc3MgcmFuZ2VzXG4gICAgY2xhc3NSYW5nZUNvdW50OiByLnVpbnQxNixcbiAgICBjbGFzc1JhbmdlUmVjb3JkOiBuZXcgci5BcnJheShDbGFzc1JhbmdlUmVjb3JkLCAnY2xhc3NSYW5nZUNvdW50JylcbiAgfVxufSk7IC8vIyMjIyMjIyMjIyMjIyMjXG4vLyBEZXZpY2UgVGFibGUgI1xuLy8jIyMjIyMjIyMjIyMjIyNcblxudmFyIERldmljZSA9IG5ldyByLlN0cnVjdCh7XG4gIGE6IHIudWludDE2LFxuICAvLyBzdGFydFNpemUgZm9yIGhpbnRpbmcgRGV2aWNlLCBvdXRlckluZGV4IGZvciBWYXJpYXRpb25JbmRleFxuICBiOiByLnVpbnQxNixcbiAgLy8gZW5kU2l6ZSBmb3IgRGV2aWNlLCBpbm5lckluZGV4IGZvciBWYXJpYXRpb25JbmRleFxuICBkZWx0YUZvcm1hdDogci51aW50MTZcbn0pOyAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gQ29udGV4dHVhbCBTdWJzdGl0dXRpb24vUG9zaXRpb25pbmcgVGFibGVzICNcbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbnZhciBMb29rdXBSZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICBzZXF1ZW5jZUluZGV4OiByLnVpbnQxNixcbiAgbG9va3VwTGlzdEluZGV4OiByLnVpbnQxNlxufSk7XG52YXIgUnVsZSA9IG5ldyByLlN0cnVjdCh7XG4gIGdseXBoQ291bnQ6IHIudWludDE2LFxuICBsb29rdXBDb3VudDogci51aW50MTYsXG4gIGlucHV0OiBuZXcgci5BcnJheShyLnVpbnQxNiwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5nbHlwaENvdW50IC0gMTtcbiAgfSksXG4gIGxvb2t1cFJlY29yZHM6IG5ldyByLkFycmF5KExvb2t1cFJlY29yZCwgJ2xvb2t1cENvdW50Jylcbn0pO1xudmFyIFJ1bGVTZXQgPSBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBSdWxlKSwgci51aW50MTYpO1xudmFyIENsYXNzUnVsZSA9IG5ldyByLlN0cnVjdCh7XG4gIGdseXBoQ291bnQ6IHIudWludDE2LFxuICBsb29rdXBDb3VudDogci51aW50MTYsXG4gIGNsYXNzZXM6IG5ldyByLkFycmF5KHIudWludDE2LCBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0LmdseXBoQ291bnQgLSAxO1xuICB9KSxcbiAgbG9va3VwUmVjb3JkczogbmV3IHIuQXJyYXkoTG9va3VwUmVjb3JkLCAnbG9va3VwQ291bnQnKVxufSk7XG52YXIgQ2xhc3NTZXQgPSBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBDbGFzc1J1bGUpLCByLnVpbnQxNik7XG52YXIgQ29udGV4dCA9IG5ldyByLlZlcnNpb25lZFN0cnVjdChyLnVpbnQxNiwge1xuICAxOiB7XG4gICAgLy8gU2ltcGxlIGNvbnRleHRcbiAgICBjb3ZlcmFnZTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ292ZXJhZ2UpLFxuICAgIHJ1bGVTZXRDb3VudDogci51aW50MTYsXG4gICAgcnVsZVNldHM6IG5ldyByLkFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MTYsIFJ1bGVTZXQpLCAncnVsZVNldENvdW50JylcbiAgfSxcbiAgMjoge1xuICAgIC8vIENsYXNzLWJhc2VkIGNvbnRleHRcbiAgICBjb3ZlcmFnZTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ292ZXJhZ2UpLFxuICAgIGNsYXNzRGVmOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDbGFzc0RlZiksXG4gICAgY2xhc3NTZXRDbnQ6IHIudWludDE2LFxuICAgIGNsYXNzU2V0OiBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBDbGFzc1NldCksICdjbGFzc1NldENudCcpXG4gIH0sXG4gIDM6IHtcbiAgICBnbHlwaENvdW50OiByLnVpbnQxNixcbiAgICBsb29rdXBDb3VudDogci51aW50MTYsXG4gICAgY292ZXJhZ2VzOiBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksICdnbHlwaENvdW50JyksXG4gICAgbG9va3VwUmVjb3JkczogbmV3IHIuQXJyYXkoTG9va3VwUmVjb3JkLCAnbG9va3VwQ291bnQnKVxuICB9XG59KTsgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIENoYWluaW5nIENvbnRleHR1YWwgU3Vic3RpdHV0aW9uL1Bvc2l0aW9uaW5nIFRhYmxlcyAjXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG52YXIgQ2hhaW5SdWxlID0gbmV3IHIuU3RydWN0KHtcbiAgYmFja3RyYWNrR2x5cGhDb3VudDogci51aW50MTYsXG4gIGJhY2t0cmFjazogbmV3IHIuQXJyYXkoci51aW50MTYsICdiYWNrdHJhY2tHbHlwaENvdW50JyksXG4gIGlucHV0R2x5cGhDb3VudDogci51aW50MTYsXG4gIGlucHV0OiBuZXcgci5BcnJheShyLnVpbnQxNiwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5pbnB1dEdseXBoQ291bnQgLSAxO1xuICB9KSxcbiAgbG9va2FoZWFkR2x5cGhDb3VudDogci51aW50MTYsXG4gIGxvb2thaGVhZDogbmV3IHIuQXJyYXkoci51aW50MTYsICdsb29rYWhlYWRHbHlwaENvdW50JyksXG4gIGxvb2t1cENvdW50OiByLnVpbnQxNixcbiAgbG9va3VwUmVjb3JkczogbmV3IHIuQXJyYXkoTG9va3VwUmVjb3JkLCAnbG9va3VwQ291bnQnKVxufSk7XG52YXIgQ2hhaW5SdWxlU2V0ID0gbmV3IHIuQXJyYXkobmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ2hhaW5SdWxlKSwgci51aW50MTYpO1xudmFyIENoYWluaW5nQ29udGV4dCA9IG5ldyByLlZlcnNpb25lZFN0cnVjdChyLnVpbnQxNiwge1xuICAxOiB7XG4gICAgLy8gU2ltcGxlIGNvbnRleHQgZ2x5cGggc3Vic3RpdHV0aW9uXG4gICAgY292ZXJhZ2U6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENvdmVyYWdlKSxcbiAgICBjaGFpbkNvdW50OiByLnVpbnQxNixcbiAgICBjaGFpblJ1bGVTZXRzOiBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBDaGFpblJ1bGVTZXQpLCAnY2hhaW5Db3VudCcpXG4gIH0sXG4gIDI6IHtcbiAgICAvLyBDbGFzcy1iYXNlZCBjaGFpbmluZyBjb250ZXh0XG4gICAgY292ZXJhZ2U6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENvdmVyYWdlKSxcbiAgICBiYWNrdHJhY2tDbGFzc0RlZjogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ2xhc3NEZWYpLFxuICAgIGlucHV0Q2xhc3NEZWY6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENsYXNzRGVmKSxcbiAgICBsb29rYWhlYWRDbGFzc0RlZjogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ2xhc3NEZWYpLFxuICAgIGNoYWluQ291bnQ6IHIudWludDE2LFxuICAgIGNoYWluQ2xhc3NTZXQ6IG5ldyByLkFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MTYsIENoYWluUnVsZVNldCksICdjaGFpbkNvdW50JylcbiAgfSxcbiAgMzoge1xuICAgIC8vIENvdmVyYWdlLWJhc2VkIGNoYWluaW5nIGNvbnRleHRcbiAgICBiYWNrdHJhY2tHbHlwaENvdW50OiByLnVpbnQxNixcbiAgICBiYWNrdHJhY2tDb3ZlcmFnZTogbmV3IHIuQXJyYXkobmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ292ZXJhZ2UpLCAnYmFja3RyYWNrR2x5cGhDb3VudCcpLFxuICAgIGlucHV0R2x5cGhDb3VudDogci51aW50MTYsXG4gICAgaW5wdXRDb3ZlcmFnZTogbmV3IHIuQXJyYXkobmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ292ZXJhZ2UpLCAnaW5wdXRHbHlwaENvdW50JyksXG4gICAgbG9va2FoZWFkR2x5cGhDb3VudDogci51aW50MTYsXG4gICAgbG9va2FoZWFkQ292ZXJhZ2U6IG5ldyByLkFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MTYsIENvdmVyYWdlKSwgJ2xvb2thaGVhZEdseXBoQ291bnQnKSxcbiAgICBsb29rdXBDb3VudDogci51aW50MTYsXG4gICAgbG9va3VwUmVjb3JkczogbmV3IHIuQXJyYXkoTG9va3VwUmVjb3JkLCAnbG9va3VwQ291bnQnKVxuICB9XG59KTtcbi8qKioqKioqKioqKioqKioqKioqXHJcbiAqIFZhcmlhdGlvbiBTdG9yZSAqXHJcbiAqKioqKioqKioqKioqKioqKioqL1xuXG52YXIgRjJET1QxNCA9IG5ldyByLkZpeGVkKDE2LCAnQkUnLCAxNCk7XG52YXIgUmVnaW9uQXhpc0Nvb3JkaW5hdGVzID0gbmV3IHIuU3RydWN0KHtcbiAgc3RhcnRDb29yZDogRjJET1QxNCxcbiAgcGVha0Nvb3JkOiBGMkRPVDE0LFxuICBlbmRDb29yZDogRjJET1QxNFxufSk7XG52YXIgVmFyaWF0aW9uUmVnaW9uTGlzdCA9IG5ldyByLlN0cnVjdCh7XG4gIGF4aXNDb3VudDogci51aW50MTYsXG4gIHJlZ2lvbkNvdW50OiByLnVpbnQxNixcbiAgdmFyaWF0aW9uUmVnaW9uczogbmV3IHIuQXJyYXkobmV3IHIuQXJyYXkoUmVnaW9uQXhpc0Nvb3JkaW5hdGVzLCAnYXhpc0NvdW50JyksICdyZWdpb25Db3VudCcpXG59KTtcbnZhciBEZWx0YVNldCA9IG5ldyByLlN0cnVjdCh7XG4gIHNob3J0RGVsdGFzOiBuZXcgci5BcnJheShyLmludDE2LCBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0LnBhcmVudC5zaG9ydERlbHRhQ291bnQ7XG4gIH0pLFxuICByZWdpb25EZWx0YXM6IG5ldyByLkFycmF5KHIuaW50OCwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5wYXJlbnQucmVnaW9uSW5kZXhDb3VudCAtIHQucGFyZW50LnNob3J0RGVsdGFDb3VudDtcbiAgfSksXG4gIGRlbHRhczogZnVuY3Rpb24gZGVsdGFzKHQpIHtcbiAgICByZXR1cm4gdC5zaG9ydERlbHRhcy5jb25jYXQodC5yZWdpb25EZWx0YXMpO1xuICB9XG59KTtcbnZhciBJdGVtVmFyaWF0aW9uRGF0YSA9IG5ldyByLlN0cnVjdCh7XG4gIGl0ZW1Db3VudDogci51aW50MTYsXG4gIHNob3J0RGVsdGFDb3VudDogci51aW50MTYsXG4gIHJlZ2lvbkluZGV4Q291bnQ6IHIudWludDE2LFxuICByZWdpb25JbmRleGVzOiBuZXcgci5BcnJheShyLnVpbnQxNiwgJ3JlZ2lvbkluZGV4Q291bnQnKSxcbiAgZGVsdGFTZXRzOiBuZXcgci5BcnJheShEZWx0YVNldCwgJ2l0ZW1Db3VudCcpXG59KTtcbnZhciBJdGVtVmFyaWF0aW9uU3RvcmUgPSBuZXcgci5TdHJ1Y3Qoe1xuICBmb3JtYXQ6IHIudWludDE2LFxuICB2YXJpYXRpb25SZWdpb25MaXN0OiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBWYXJpYXRpb25SZWdpb25MaXN0KSxcbiAgdmFyaWF0aW9uRGF0YUNvdW50OiByLnVpbnQxNixcbiAgaXRlbVZhcmlhdGlvbkRhdGE6IG5ldyByLkFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MzIsIEl0ZW1WYXJpYXRpb25EYXRhKSwgJ3ZhcmlhdGlvbkRhdGFDb3VudCcpXG59KTtcbi8qKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIEZlYXR1cmUgVmFyaWF0aW9ucyAqXHJcbiAqKioqKioqKioqKioqKioqKioqKioqL1xuXG52YXIgQ29uZGl0aW9uVGFibGUgPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3Qoci51aW50MTYsIHtcbiAgMTogKF8gPSB7XG4gICAgYXhpc0luZGV4OiByLnVpbnQxNlxuICB9LCBfW1wiYXhpc0luZGV4XCJdID0gci51aW50MTYsIF8uZmlsdGVyUmFuZ2VNaW5WYWx1ZSA9IEYyRE9UMTQsIF8uZmlsdGVyUmFuZ2VNYXhWYWx1ZSA9IEYyRE9UMTQsIF8pXG59KTtcbnZhciBDb25kaXRpb25TZXQgPSBuZXcgci5TdHJ1Y3Qoe1xuICBjb25kaXRpb25Db3VudDogci51aW50MTYsXG4gIGNvbmRpdGlvblRhYmxlOiBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDMyLCBDb25kaXRpb25UYWJsZSksICdjb25kaXRpb25Db3VudCcpXG59KTtcbnZhciBGZWF0dXJlVGFibGVTdWJzdGl0dXRpb25SZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICBmZWF0dXJlSW5kZXg6IHIudWludDE2LFxuICBhbHRlcm5hdGVGZWF0dXJlVGFibGU6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIEZlYXR1cmUsIHtcbiAgICB0eXBlOiAncGFyZW50J1xuICB9KVxufSk7XG52YXIgRmVhdHVyZVRhYmxlU3Vic3RpdHV0aW9uID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci5maXhlZDMyLFxuICBzdWJzdGl0dXRpb25Db3VudDogci51aW50MTYsXG4gIHN1YnN0aXR1dGlvbnM6IG5ldyByLkFycmF5KEZlYXR1cmVUYWJsZVN1YnN0aXR1dGlvblJlY29yZCwgJ3N1YnN0aXR1dGlvbkNvdW50Jylcbn0pO1xudmFyIEZlYXR1cmVWYXJpYXRpb25SZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICBjb25kaXRpb25TZXQ6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIENvbmRpdGlvblNldCwge1xuICAgIHR5cGU6ICdwYXJlbnQnXG4gIH0pLFxuICBmZWF0dXJlVGFibGVTdWJzdGl0dXRpb246IG5ldyByLlBvaW50ZXIoci51aW50MzIsIEZlYXR1cmVUYWJsZVN1YnN0aXR1dGlvbiwge1xuICAgIHR5cGU6ICdwYXJlbnQnXG4gIH0pXG59KTtcbnZhciBGZWF0dXJlVmFyaWF0aW9ucyA9IG5ldyByLlN0cnVjdCh7XG4gIG1ham9yVmVyc2lvbjogci51aW50MTYsXG4gIG1pbm9yVmVyc2lvbjogci51aW50MTYsXG4gIGZlYXR1cmVWYXJpYXRpb25SZWNvcmRDb3VudDogci51aW50MzIsXG4gIGZlYXR1cmVWYXJpYXRpb25SZWNvcmRzOiBuZXcgci5BcnJheShGZWF0dXJlVmFyaWF0aW9uUmVjb3JkLCAnZmVhdHVyZVZhcmlhdGlvblJlY29yZENvdW50Jylcbn0pOyAvLyBvdGhlcndpc2UgZGVsZWdhdGVzIHRvIHRoZSBwcm92aWRlZCB0eXBlLlxuXG52YXIgUHJlZGVmaW5lZE9wID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUHJlZGVmaW5lZE9wKHByZWRlZmluZWRPcHMsIHR5cGUpIHtcbiAgICB0aGlzLnByZWRlZmluZWRPcHMgPSBwcmVkZWZpbmVkT3BzO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICB2YXIgX3Byb3RvNSA9IFByZWRlZmluZWRPcC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyZWFtLCBwYXJlbnQsIG9wZXJhbmRzKSB7XG4gICAgaWYgKHRoaXMucHJlZGVmaW5lZE9wc1tvcGVyYW5kc1swXV0pIHtcbiAgICAgIHJldHVybiB0aGlzLnByZWRlZmluZWRPcHNbb3BlcmFuZHNbMF1dO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnR5cGUuZGVjb2RlKHN0cmVhbSwgcGFyZW50LCBvcGVyYW5kcyk7XG4gIH07XG5cbiAgX3Byb3RvNS5zaXplID0gZnVuY3Rpb24gc2l6ZSh2YWx1ZSwgY3R4KSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZS5zaXplKHZhbHVlLCBjdHgpO1xuICB9O1xuXG4gIF9wcm90bzUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0cmVhbSwgdmFsdWUsIGN0eCkge1xuICAgIHZhciBpbmRleCA9IHRoaXMucHJlZGVmaW5lZE9wcy5pbmRleE9mKHZhbHVlKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50eXBlLmVuY29kZShzdHJlYW0sIHZhbHVlLCBjdHgpO1xuICB9O1xuXG4gIHJldHVybiBQcmVkZWZpbmVkT3A7XG59KCk7XG5cbnZhciBDRkZFbmNvZGluZ1ZlcnNpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yJE51bWJlcikge1xuICBfaW5oZXJpdHNMb29zZShDRkZFbmNvZGluZ1ZlcnNpb24sIF9yJE51bWJlcik7XG5cbiAgZnVuY3Rpb24gQ0ZGRW5jb2RpbmdWZXJzaW9uKCkge1xuICAgIHJldHVybiBfciROdW1iZXIuY2FsbCh0aGlzLCAnVUludDgnKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90bzYgPSBDRkZFbmNvZGluZ1ZlcnNpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90bzYuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSkge1xuICAgIHJldHVybiByLnVpbnQ4LmRlY29kZShzdHJlYW0pICYgMHg3ZjtcbiAgfTtcblxuICByZXR1cm4gQ0ZGRW5jb2RpbmdWZXJzaW9uO1xufShyLk51bWJlcik7XG5cbnZhciBSYW5nZTEgPSBuZXcgci5TdHJ1Y3Qoe1xuICBmaXJzdDogci51aW50MTYsXG4gIG5MZWZ0OiByLnVpbnQ4XG59KTtcbnZhciBSYW5nZTIgPSBuZXcgci5TdHJ1Y3Qoe1xuICBmaXJzdDogci51aW50MTYsXG4gIG5MZWZ0OiByLnVpbnQxNlxufSk7XG52YXIgQ0ZGQ3VzdG9tRW5jb2RpbmcgPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3QobmV3IENGRkVuY29kaW5nVmVyc2lvbigpLCB7XG4gIDA6IHtcbiAgICBuQ29kZXM6IHIudWludDgsXG4gICAgY29kZXM6IG5ldyByLkFycmF5KHIudWludDgsICduQ29kZXMnKVxuICB9LFxuICAxOiB7XG4gICAgblJhbmdlczogci51aW50OCxcbiAgICByYW5nZXM6IG5ldyByLkFycmF5KFJhbmdlMSwgJ25SYW5nZXMnKVxuICB9IC8vIFRPRE86IHN1cHBsZW1lbnQ/XG5cbn0pO1xudmFyIENGRkVuY29kaW5nID0gbmV3IFByZWRlZmluZWRPcChbU3RhbmRhcmRFbmNvZGluZywgRXhwZXJ0RW5jb2RpbmddLCBuZXcgQ0ZGUG9pbnRlcihDRkZDdXN0b21FbmNvZGluZywge1xuICBsYXp5OiB0cnVlXG59KSk7IC8vIERlY29kZXMgYW4gYXJyYXkgb2YgcmFuZ2VzIHVudGlsIHRoZSB0b3RhbFxuLy8gbGVuZ3RoIGlzIGVxdWFsIHRvIHRoZSBwcm92aWRlZCBsZW5ndGguXG5cbnZhciBSYW5nZUFycmF5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfciRBcnJheSkge1xuICBfaW5oZXJpdHNMb29zZShSYW5nZUFycmF5LCBfciRBcnJheSk7XG5cbiAgZnVuY3Rpb24gUmFuZ2VBcnJheSgpIHtcbiAgICByZXR1cm4gX3IkQXJyYXkuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90bzcgPSBSYW5nZUFycmF5LnByb3RvdHlwZTtcblxuICBfcHJvdG83LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCkge1xuICAgIHZhciBsZW5ndGggPSB1dGlscy5yZXNvbHZlTGVuZ3RoKHRoaXMubGVuZ3RoLCBzdHJlYW0sIHBhcmVudCk7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgcmVzID0gW107XG5cbiAgICB3aGlsZSAoY291bnQgPCBsZW5ndGgpIHtcbiAgICAgIHZhciByYW5nZSA9IHRoaXMudHlwZS5kZWNvZGUoc3RyZWFtLCBwYXJlbnQpO1xuICAgICAgcmFuZ2Uub2Zmc2V0ID0gY291bnQ7XG4gICAgICBjb3VudCArPSByYW5nZS5uTGVmdCArIDE7XG4gICAgICByZXMucHVzaChyYW5nZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICByZXR1cm4gUmFuZ2VBcnJheTtcbn0oci5BcnJheSk7XG5cbnZhciBDRkZDdXN0b21DaGFyc2V0ID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KHIudWludDgsIHtcbiAgMDoge1xuICAgIGdseXBoczogbmV3IHIuQXJyYXkoci51aW50MTYsIGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5wYXJlbnQuQ2hhclN0cmluZ3MubGVuZ3RoIC0gMTtcbiAgICB9KVxuICB9LFxuICAxOiB7XG4gICAgcmFuZ2VzOiBuZXcgUmFuZ2VBcnJheShSYW5nZTEsIGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5wYXJlbnQuQ2hhclN0cmluZ3MubGVuZ3RoIC0gMTtcbiAgICB9KVxuICB9LFxuICAyOiB7XG4gICAgcmFuZ2VzOiBuZXcgUmFuZ2VBcnJheShSYW5nZTIsIGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5wYXJlbnQuQ2hhclN0cmluZ3MubGVuZ3RoIC0gMTtcbiAgICB9KVxuICB9XG59KTtcbnZhciBDRkZDaGFyc2V0ID0gbmV3IFByZWRlZmluZWRPcChbSVNPQWRvYmVDaGFyc2V0LCBFeHBlcnRDaGFyc2V0LCBFeHBlcnRTdWJzZXRDaGFyc2V0XSwgbmV3IENGRlBvaW50ZXIoQ0ZGQ3VzdG9tQ2hhcnNldCwge1xuICBsYXp5OiB0cnVlXG59KSk7XG52YXIgRkRSYW5nZTMgPSBuZXcgci5TdHJ1Y3Qoe1xuICBmaXJzdDogci51aW50MTYsXG4gIGZkOiByLnVpbnQ4XG59KTtcbnZhciBGRFJhbmdlNCA9IG5ldyByLlN0cnVjdCh7XG4gIGZpcnN0OiByLnVpbnQzMixcbiAgZmQ6IHIudWludDE2XG59KTtcbnZhciBGRFNlbGVjdCA9IG5ldyByLlZlcnNpb25lZFN0cnVjdChyLnVpbnQ4LCB7XG4gIDA6IHtcbiAgICBmZHM6IG5ldyByLkFycmF5KHIudWludDgsIGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5wYXJlbnQuQ2hhclN0cmluZ3MubGVuZ3RoO1xuICAgIH0pXG4gIH0sXG4gIDM6IHtcbiAgICBuUmFuZ2VzOiByLnVpbnQxNixcbiAgICByYW5nZXM6IG5ldyByLkFycmF5KEZEUmFuZ2UzLCAnblJhbmdlcycpLFxuICAgIHNlbnRpbmVsOiByLnVpbnQxNlxuICB9LFxuICA0OiB7XG4gICAgblJhbmdlczogci51aW50MzIsXG4gICAgcmFuZ2VzOiBuZXcgci5BcnJheShGRFJhbmdlNCwgJ25SYW5nZXMnKSxcbiAgICBzZW50aW5lbDogci51aW50MzJcbiAgfVxufSk7XG52YXIgcHRyID0gbmV3IENGRlBvaW50ZXIoQ0ZGUHJpdmF0ZURpY3QpO1xuXG52YXIgQ0ZGUHJpdmF0ZU9wID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ0ZGUHJpdmF0ZU9wKCkge31cblxuICB2YXIgX3Byb3RvOCA9IENGRlByaXZhdGVPcC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvOC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyZWFtLCBwYXJlbnQsIG9wZXJhbmRzKSB7XG4gICAgcGFyZW50Lmxlbmd0aCA9IG9wZXJhbmRzWzBdO1xuICAgIHJldHVybiBwdHIuZGVjb2RlKHN0cmVhbSwgcGFyZW50LCBbb3BlcmFuZHNbMV1dKTtcbiAgfTtcblxuICBfcHJvdG84LnNpemUgPSBmdW5jdGlvbiBzaXplKGRpY3QsIGN0eCkge1xuICAgIHJldHVybiBbQ0ZGUHJpdmF0ZURpY3Quc2l6ZShkaWN0LCBjdHgsIGZhbHNlKSwgcHRyLnNpemUoZGljdCwgY3R4KVswXV07XG4gIH07XG5cbiAgX3Byb3RvOC5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyZWFtLCBkaWN0LCBjdHgpIHtcbiAgICByZXR1cm4gW0NGRlByaXZhdGVEaWN0LnNpemUoZGljdCwgY3R4LCBmYWxzZSksIHB0ci5lbmNvZGUoc3RyZWFtLCBkaWN0LCBjdHgpWzBdXTtcbiAgfTtcblxuICByZXR1cm4gQ0ZGUHJpdmF0ZU9wO1xufSgpO1xuXG52YXIgRm9udERpY3QgPSBuZXcgQ0ZGRGljdChbLy8ga2V5ICAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgdHlwZShzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRcblsxOCwgJ1ByaXZhdGUnLCBuZXcgQ0ZGUHJpdmF0ZU9wKCksIG51bGxdLCBbWzEyLCAzOF0sICdGb250TmFtZScsICdzaWQnLCBudWxsXSwgW1sxMiwgN10sICdGb250TWF0cml4JywgJ2FycmF5JywgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF1dLCBbWzEyLCA1XSwgJ1BhaW50VHlwZScsICdudW1iZXInLCAwXV0pO1xudmFyIENGRlRvcERpY3QgPSBuZXcgQ0ZGRGljdChbLy8ga2V5ICAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgdHlwZShzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRcbltbMTIsIDMwXSwgJ1JPUycsIFsnc2lkJywgJ3NpZCcsICdudW1iZXInXSwgbnVsbF0sIFswLCAndmVyc2lvbicsICdzaWQnLCBudWxsXSwgWzEsICdOb3RpY2UnLCAnc2lkJywgbnVsbF0sIFtbMTIsIDBdLCAnQ29weXJpZ2h0JywgJ3NpZCcsIG51bGxdLCBbMiwgJ0Z1bGxOYW1lJywgJ3NpZCcsIG51bGxdLCBbMywgJ0ZhbWlseU5hbWUnLCAnc2lkJywgbnVsbF0sIFs0LCAnV2VpZ2h0JywgJ3NpZCcsIG51bGxdLCBbWzEyLCAxXSwgJ2lzRml4ZWRQaXRjaCcsICdib29sZWFuJywgZmFsc2VdLCBbWzEyLCAyXSwgJ0l0YWxpY0FuZ2xlJywgJ251bWJlcicsIDBdLCBbWzEyLCAzXSwgJ1VuZGVybGluZVBvc2l0aW9uJywgJ251bWJlcicsIC0xMDBdLCBbWzEyLCA0XSwgJ1VuZGVybGluZVRoaWNrbmVzcycsICdudW1iZXInLCA1MF0sIFtbMTIsIDVdLCAnUGFpbnRUeXBlJywgJ251bWJlcicsIDBdLCBbWzEyLCA2XSwgJ0NoYXJzdHJpbmdUeXBlJywgJ251bWJlcicsIDJdLCBbWzEyLCA3XSwgJ0ZvbnRNYXRyaXgnLCAnYXJyYXknLCBbMC4wMDEsIDAsIDAsIDAuMDAxLCAwLCAwXV0sIFsxMywgJ1VuaXF1ZUlEJywgJ251bWJlcicsIG51bGxdLCBbNSwgJ0ZvbnRCQm94JywgJ2FycmF5JywgWzAsIDAsIDAsIDBdXSwgW1sxMiwgOF0sICdTdHJva2VXaWR0aCcsICdudW1iZXInLCAwXSwgWzE0LCAnWFVJRCcsICdhcnJheScsIG51bGxdLCBbMTUsICdjaGFyc2V0JywgQ0ZGQ2hhcnNldCwgSVNPQWRvYmVDaGFyc2V0XSwgWzE2LCAnRW5jb2RpbmcnLCBDRkZFbmNvZGluZywgU3RhbmRhcmRFbmNvZGluZ10sIFsxNywgJ0NoYXJTdHJpbmdzJywgbmV3IENGRlBvaW50ZXIobmV3IENGRkluZGV4KCkpLCBudWxsXSwgWzE4LCAnUHJpdmF0ZScsIG5ldyBDRkZQcml2YXRlT3AoKSwgbnVsbF0sIFtbMTIsIDIwXSwgJ1N5bnRoZXRpY0Jhc2UnLCAnbnVtYmVyJywgbnVsbF0sIFtbMTIsIDIxXSwgJ1Bvc3RTY3JpcHQnLCAnc2lkJywgbnVsbF0sIFtbMTIsIDIyXSwgJ0Jhc2VGb250TmFtZScsICdzaWQnLCBudWxsXSwgW1sxMiwgMjNdLCAnQmFzZUZvbnRCbGVuZCcsICdkZWx0YScsIG51bGxdLCAvLyBDSUQgZm9udCBzcGVjaWZpY1xuW1sxMiwgMzFdLCAnQ0lERm9udFZlcnNpb24nLCAnbnVtYmVyJywgMF0sIFtbMTIsIDMyXSwgJ0NJREZvbnRSZXZpc2lvbicsICdudW1iZXInLCAwXSwgW1sxMiwgMzNdLCAnQ0lERm9udFR5cGUnLCAnbnVtYmVyJywgMF0sIFtbMTIsIDM0XSwgJ0NJRENvdW50JywgJ251bWJlcicsIDg3MjBdLCBbWzEyLCAzNV0sICdVSURCYXNlJywgJ251bWJlcicsIG51bGxdLCBbWzEyLCAzN10sICdGRFNlbGVjdCcsIG5ldyBDRkZQb2ludGVyKEZEU2VsZWN0KSwgbnVsbF0sIFtbMTIsIDM2XSwgJ0ZEQXJyYXknLCBuZXcgQ0ZGUG9pbnRlcihuZXcgQ0ZGSW5kZXgoRm9udERpY3QpKSwgbnVsbF0sIFtbMTIsIDM4XSwgJ0ZvbnROYW1lJywgJ3NpZCcsIG51bGxdXSk7XG52YXIgVmFyaWF0aW9uU3RvcmUgPSBuZXcgci5TdHJ1Y3Qoe1xuICBsZW5ndGg6IHIudWludDE2LFxuICBpdGVtVmFyaWF0aW9uU3RvcmU6IEl0ZW1WYXJpYXRpb25TdG9yZVxufSk7XG52YXIgQ0ZGMlRvcERpY3QgPSBuZXcgQ0ZGRGljdChbW1sxMiwgN10sICdGb250TWF0cml4JywgJ2FycmF5JywgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF1dLCBbMTcsICdDaGFyU3RyaW5ncycsIG5ldyBDRkZQb2ludGVyKG5ldyBDRkZJbmRleCgpKSwgbnVsbF0sIFtbMTIsIDM3XSwgJ0ZEU2VsZWN0JywgbmV3IENGRlBvaW50ZXIoRkRTZWxlY3QpLCBudWxsXSwgW1sxMiwgMzZdLCAnRkRBcnJheScsIG5ldyBDRkZQb2ludGVyKG5ldyBDRkZJbmRleChGb250RGljdCkpLCBudWxsXSwgWzI0LCAndnN0b3JlJywgbmV3IENGRlBvaW50ZXIoVmFyaWF0aW9uU3RvcmUpLCBudWxsXSwgWzI1LCAnbWF4c3RhY2snLCAnbnVtYmVyJywgMTkzXV0pO1xudmFyIENGRlRvcCA9IG5ldyByLlZlcnNpb25lZFN0cnVjdChyLmZpeGVkMTYsIHtcbiAgMToge1xuICAgIGhkclNpemU6IHIudWludDgsXG4gICAgb2ZmU2l6ZTogci51aW50OCxcbiAgICBuYW1lSW5kZXg6IG5ldyBDRkZJbmRleChuZXcgci5TdHJpbmcoJ2xlbmd0aCcpKSxcbiAgICB0b3BEaWN0SW5kZXg6IG5ldyBDRkZJbmRleChDRkZUb3BEaWN0KSxcbiAgICBzdHJpbmdJbmRleDogbmV3IENGRkluZGV4KG5ldyByLlN0cmluZygnbGVuZ3RoJykpLFxuICAgIGdsb2JhbFN1YnJJbmRleDogbmV3IENGRkluZGV4KClcbiAgfSxcbiAgMjoge1xuICAgIGhkclNpemU6IHIudWludDgsXG4gICAgbGVuZ3RoOiByLnVpbnQxNixcbiAgICB0b3BEaWN0OiBDRkYyVG9wRGljdCxcbiAgICBnbG9iYWxTdWJySW5kZXg6IG5ldyBDRkZJbmRleCgpXG4gIH1cbn0pO1xuXG52YXIgQ0ZGRm9udCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENGRkZvbnQoc3RyZWFtKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5kZWNvZGUoKTtcbiAgfVxuXG4gIENGRkZvbnQuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSkge1xuICAgIHJldHVybiBuZXcgQ0ZGRm9udChzdHJlYW0pO1xuICB9O1xuXG4gIHZhciBfcHJvdG85ID0gQ0ZGRm9udC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvOS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoKSB7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5zdHJlYW0ucG9zO1xuICAgIHZhciB0b3AgPSBDRkZUb3AuZGVjb2RlKHRoaXMuc3RyZWFtKTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0b3ApIHtcbiAgICAgIHZhciB2YWwgPSB0b3Bba2V5XTtcbiAgICAgIHRoaXNba2V5XSA9IHZhbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52ZXJzaW9uIDwgMikge1xuICAgICAgaWYgKHRoaXMudG9wRGljdEluZGV4Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IGEgc2luZ2xlIGZvbnQgaXMgYWxsb3dlZCBpbiBDRkZcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudG9wRGljdCA9IHRoaXMudG9wRGljdEluZGV4WzBdO1xuICAgIH1cblxuICAgIHRoaXMuaXNDSURGb250ID0gdGhpcy50b3BEaWN0LlJPUyAhPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90bzkuc3RyaW5nID0gZnVuY3Rpb24gc3RyaW5nKHNpZCkge1xuICAgIGlmICh0aGlzLnZlcnNpb24gPj0gMikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNpZCA8IHN0YW5kYXJkU3RyaW5ncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBzdGFuZGFyZFN0cmluZ3Nbc2lkXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpbmdJbmRleFtzaWQgLSBzdGFuZGFyZFN0cmluZ3MubGVuZ3RoXTtcbiAgfTtcblxuICBfcHJvdG85LmdldENoYXJTdHJpbmcgPSBmdW5jdGlvbiBnZXRDaGFyU3RyaW5nKGdseXBoKSB7XG4gICAgdGhpcy5zdHJlYW0ucG9zID0gdGhpcy50b3BEaWN0LkNoYXJTdHJpbmdzW2dseXBoXS5vZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtLnJlYWRCdWZmZXIodGhpcy50b3BEaWN0LkNoYXJTdHJpbmdzW2dseXBoXS5sZW5ndGgpO1xuICB9O1xuXG4gIF9wcm90bzkuZ2V0R2x5cGhOYW1lID0gZnVuY3Rpb24gZ2V0R2x5cGhOYW1lKGdpZCkge1xuICAgIC8vIENGRjIgZ2x5cGggbmFtZXMgYXJlIGluIHRoZSBwb3N0IHRhYmxlLlxuICAgIGlmICh0aGlzLnZlcnNpb24gPj0gMikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBDSUQta2V5ZWQgZm9udHMgZG9uJ3QgaGF2ZSBnbHlwaCBuYW1lc1xuXG5cbiAgICBpZiAodGhpcy5pc0NJREZvbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBjaGFyc2V0ID0gdGhpcy50b3BEaWN0LmNoYXJzZXQ7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGFyc2V0KSkge1xuICAgICAgcmV0dXJuIGNoYXJzZXRbZ2lkXTtcbiAgICB9XG5cbiAgICBpZiAoZ2lkID09PSAwKSB7XG4gICAgICByZXR1cm4gJy5ub3RkZWYnO1xuICAgIH1cblxuICAgIGdpZCAtPSAxO1xuXG4gICAgc3dpdGNoIChjaGFyc2V0LnZlcnNpb24pIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKGNoYXJzZXQuZ2x5cGhzW2dpZF0pO1xuXG4gICAgICBjYXNlIDE6XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnNldC5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgcmFuZ2UgPSBjaGFyc2V0LnJhbmdlc1tpXTtcblxuICAgICAgICAgIGlmIChyYW5nZS5vZmZzZXQgPD0gZ2lkICYmIGdpZCA8PSByYW5nZS5vZmZzZXQgKyByYW5nZS5uTGVmdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKHJhbmdlLmZpcnN0ICsgKGdpZCAtIHJhbmdlLm9mZnNldCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIF9wcm90bzkuZmRGb3JHbHlwaCA9IGZ1bmN0aW9uIGZkRm9yR2x5cGgoZ2lkKSB7XG4gICAgaWYgKCF0aGlzLnRvcERpY3QuRkRTZWxlY3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy50b3BEaWN0LkZEU2VsZWN0LnZlcnNpb24pIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIHRoaXMudG9wRGljdC5GRFNlbGVjdC5mZHNbZ2lkXTtcblxuICAgICAgY2FzZSAzOlxuICAgICAgY2FzZSA0OlxuICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy50b3BEaWN0LkZEU2VsZWN0LnJhbmdlcztcbiAgICAgICAgdmFyIGxvdyA9IDA7XG4gICAgICAgIHZhciBoaWdoID0gcmFuZ2VzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgICAgICAgdmFyIG1pZCA9IGxvdyArIGhpZ2ggPj4gMTtcblxuICAgICAgICAgIGlmIChnaWQgPCByYW5nZXNbbWlkXS5maXJzdCkge1xuICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChtaWQgPCBoaWdoICYmIGdpZCA+PSByYW5nZXNbbWlkICsgMV0uZmlyc3QpIHtcbiAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByYW5nZXNbbWlkXS5mZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBGRFNlbGVjdCB2ZXJzaW9uOiBcIi5jb25jYXQodGhpcy50b3BEaWN0LkZEU2VsZWN0LnZlcnNpb24pKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvOS5wcml2YXRlRGljdEZvckdseXBoID0gZnVuY3Rpb24gcHJpdmF0ZURpY3RGb3JHbHlwaChnaWQpIHtcbiAgICBpZiAodGhpcy50b3BEaWN0LkZEU2VsZWN0KSB7XG4gICAgICB2YXIgZmQgPSB0aGlzLmZkRm9yR2x5cGgoZ2lkKTtcblxuICAgICAgaWYgKHRoaXMudG9wRGljdC5GREFycmF5W2ZkXSkge1xuICAgICAgICByZXR1cm4gdGhpcy50b3BEaWN0LkZEQXJyYXlbZmRdLlByaXZhdGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZlcnNpb24gPCAyKSB7XG4gICAgICByZXR1cm4gdGhpcy50b3BEaWN0LlByaXZhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudG9wRGljdC5GREFycmF5WzBdLlByaXZhdGU7XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKENGRkZvbnQsIFt7XG4gICAga2V5OiBcInBvc3RzY3JpcHROYW1lXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBpZiAodGhpcy52ZXJzaW9uIDwgMikge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lSW5kZXhbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmdWxsTmFtZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKHRoaXMudG9wRGljdC5GdWxsTmFtZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZhbWlseU5hbWVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZyh0aGlzLnRvcERpY3QuRmFtaWx5TmFtZSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENGRkZvbnQ7XG59KCk7XG5cbnZhciBWZXJ0aWNhbE9yaWdpbiA9IG5ldyByLlN0cnVjdCh7XG4gIGdseXBoSW5kZXg6IHIudWludDE2LFxuICB2ZXJ0T3JpZ2luWTogci5pbnQxNlxufSk7XG52YXIgVk9SRyA9IG5ldyByLlN0cnVjdCh7XG4gIG1ham9yVmVyc2lvbjogci51aW50MTYsXG4gIG1pbm9yVmVyc2lvbjogci51aW50MTYsXG4gIGRlZmF1bHRWZXJ0T3JpZ2luWTogci5pbnQxNixcbiAgbnVtVmVydE9yaWdpbllNZXRyaWNzOiByLnVpbnQxNixcbiAgbWV0cmljczogbmV3IHIuQXJyYXkoVmVydGljYWxPcmlnaW4sICdudW1WZXJ0T3JpZ2luWU1ldHJpY3MnKVxufSk7XG52YXIgQmlnTWV0cmljcyA9IG5ldyByLlN0cnVjdCh7XG4gIGhlaWdodDogci51aW50OCxcbiAgd2lkdGg6IHIudWludDgsXG4gIGhvcmlCZWFyaW5nWDogci5pbnQ4LFxuICBob3JpQmVhcmluZ1k6IHIuaW50OCxcbiAgaG9yaUFkdmFuY2U6IHIudWludDgsXG4gIHZlcnRCZWFyaW5nWDogci5pbnQ4LFxuICB2ZXJ0QmVhcmluZ1k6IHIuaW50OCxcbiAgdmVydEFkdmFuY2U6IHIudWludDhcbn0pO1xudmFyIFNtYWxsTWV0cmljcyA9IG5ldyByLlN0cnVjdCh7XG4gIGhlaWdodDogci51aW50OCxcbiAgd2lkdGg6IHIudWludDgsXG4gIGJlYXJpbmdYOiByLmludDgsXG4gIGJlYXJpbmdZOiByLmludDgsXG4gIGFkdmFuY2U6IHIudWludDhcbn0pO1xudmFyIEVCRFRDb21wb25lbnQgPSBuZXcgci5TdHJ1Y3Qoe1xuICBnbHlwaDogci51aW50MTYsXG4gIHhPZmZzZXQ6IHIuaW50OCxcbiAgeU9mZnNldDogci5pbnQ4XG59KTtcblxudmFyIEJ5dGVBbGlnbmVkID0gZnVuY3Rpb24gQnl0ZUFsaWduZWQoKSB7fTtcblxudmFyIEJpdEFsaWduZWQgPSBmdW5jdGlvbiBCaXRBbGlnbmVkKCkge307XG5cbnZhciBnbHlwaCA9IG5ldyByLlZlcnNpb25lZFN0cnVjdCgndmVyc2lvbicsIHtcbiAgMToge1xuICAgIG1ldHJpY3M6IFNtYWxsTWV0cmljcyxcbiAgICBkYXRhOiBCeXRlQWxpZ25lZFxuICB9LFxuICAyOiB7XG4gICAgbWV0cmljczogU21hbGxNZXRyaWNzLFxuICAgIGRhdGE6IEJpdEFsaWduZWRcbiAgfSxcbiAgLy8gZm9ybWF0IDMgaXMgZGVwcmVjYXRlZFxuICAvLyBmb3JtYXQgNCBpcyBub3Qgc3VwcG9ydGVkIGJ5IE1pY3Jvc29mdFxuICA1OiB7XG4gICAgZGF0YTogQml0QWxpZ25lZFxuICB9LFxuICA2OiB7XG4gICAgbWV0cmljczogQmlnTWV0cmljcyxcbiAgICBkYXRhOiBCeXRlQWxpZ25lZFxuICB9LFxuICA3OiB7XG4gICAgbWV0cmljczogQmlnTWV0cmljcyxcbiAgICBkYXRhOiBCaXRBbGlnbmVkXG4gIH0sXG4gIDg6IHtcbiAgICBtZXRyaWNzOiBTbWFsbE1ldHJpY3MsXG4gICAgcGFkOiBuZXcgci5SZXNlcnZlZChyLnVpbnQ4KSxcbiAgICBudW1Db21wb25lbnRzOiByLnVpbnQxNixcbiAgICBjb21wb25lbnRzOiBuZXcgci5BcnJheShFQkRUQ29tcG9uZW50LCAnbnVtQ29tcG9uZW50cycpXG4gIH0sXG4gIDk6IHtcbiAgICBtZXRyaWNzOiBCaWdNZXRyaWNzLFxuICAgIHBhZDogbmV3IHIuUmVzZXJ2ZWQoci51aW50OCksXG4gICAgbnVtQ29tcG9uZW50czogci51aW50MTYsXG4gICAgY29tcG9uZW50czogbmV3IHIuQXJyYXkoRUJEVENvbXBvbmVudCwgJ251bUNvbXBvbmVudHMnKVxuICB9LFxuICAxNzoge1xuICAgIG1ldHJpY3M6IFNtYWxsTWV0cmljcyxcbiAgICBkYXRhTGVuOiByLnVpbnQzMixcbiAgICBkYXRhOiBuZXcgci5CdWZmZXIoJ2RhdGFMZW4nKVxuICB9LFxuICAxODoge1xuICAgIG1ldHJpY3M6IEJpZ01ldHJpY3MsXG4gICAgZGF0YUxlbjogci51aW50MzIsXG4gICAgZGF0YTogbmV3IHIuQnVmZmVyKCdkYXRhTGVuJylcbiAgfSxcbiAgMTk6IHtcbiAgICBkYXRhTGVuOiByLnVpbnQzMixcbiAgICBkYXRhOiBuZXcgci5CdWZmZXIoJ2RhdGFMZW4nKVxuICB9XG59KTtcbnZhciBTQml0TGluZU1ldHJpY3MgPSBuZXcgci5TdHJ1Y3Qoe1xuICBhc2NlbmRlcjogci5pbnQ4LFxuICBkZXNjZW5kZXI6IHIuaW50OCxcbiAgd2lkdGhNYXg6IHIudWludDgsXG4gIGNhcmV0U2xvcGVOdW1lcmF0b3I6IHIuaW50OCxcbiAgY2FyZXRTbG9wZURlbm9taW5hdG9yOiByLmludDgsXG4gIGNhcmV0T2Zmc2V0OiByLmludDgsXG4gIG1pbk9yaWdpblNCOiByLmludDgsXG4gIG1pbkFkdmFuY2VTQjogci5pbnQ4LFxuICBtYXhCZWZvcmVCTDogci5pbnQ4LFxuICBtaW5BZnRlckJMOiByLmludDgsXG4gIHBhZDogbmV3IHIuUmVzZXJ2ZWQoci5pbnQ4LCAyKVxufSk7XG52YXIgQ29kZU9mZnNldFBhaXIgPSBuZXcgci5TdHJ1Y3Qoe1xuICBnbHlwaENvZGU6IHIudWludDE2LFxuICBvZmZzZXQ6IHIudWludDE2XG59KTtcbnZhciBJbmRleFN1YnRhYmxlID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KHIudWludDE2LCB7XG4gIGhlYWRlcjoge1xuICAgIGltYWdlRm9ybWF0OiByLnVpbnQxNixcbiAgICBpbWFnZURhdGFPZmZzZXQ6IHIudWludDMyXG4gIH0sXG4gIDE6IHtcbiAgICBvZmZzZXRBcnJheTogbmV3IHIuQXJyYXkoci51aW50MzIsIGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5wYXJlbnQubGFzdEdseXBoSW5kZXggLSB0LnBhcmVudC5maXJzdEdseXBoSW5kZXggKyAxO1xuICAgIH0pXG4gIH0sXG4gIDI6IHtcbiAgICBpbWFnZVNpemU6IHIudWludDMyLFxuICAgIGJpZ01ldHJpY3M6IEJpZ01ldHJpY3NcbiAgfSxcbiAgMzoge1xuICAgIG9mZnNldEFycmF5OiBuZXcgci5BcnJheShyLnVpbnQxNiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LnBhcmVudC5sYXN0R2x5cGhJbmRleCAtIHQucGFyZW50LmZpcnN0R2x5cGhJbmRleCArIDE7XG4gICAgfSlcbiAgfSxcbiAgNDoge1xuICAgIG51bUdseXBoczogci51aW50MzIsXG4gICAgZ2x5cGhBcnJheTogbmV3IHIuQXJyYXkoQ29kZU9mZnNldFBhaXIsIGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5udW1HbHlwaHMgKyAxO1xuICAgIH0pXG4gIH0sXG4gIDU6IHtcbiAgICBpbWFnZVNpemU6IHIudWludDMyLFxuICAgIGJpZ01ldHJpY3M6IEJpZ01ldHJpY3MsXG4gICAgbnVtR2x5cGhzOiByLnVpbnQzMixcbiAgICBnbHlwaENvZGVBcnJheTogbmV3IHIuQXJyYXkoci51aW50MTYsICdudW1HbHlwaHMnKVxuICB9XG59KTtcbnZhciBJbmRleFN1YnRhYmxlQXJyYXkgPSBuZXcgci5TdHJ1Y3Qoe1xuICBmaXJzdEdseXBoSW5kZXg6IHIudWludDE2LFxuICBsYXN0R2x5cGhJbmRleDogci51aW50MTYsXG4gIHN1YnRhYmxlOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBJbmRleFN1YnRhYmxlKVxufSk7XG52YXIgQml0bWFwU2l6ZVRhYmxlID0gbmV3IHIuU3RydWN0KHtcbiAgaW5kZXhTdWJUYWJsZUFycmF5OiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBuZXcgci5BcnJheShJbmRleFN1YnRhYmxlQXJyYXksIDEpLCB7XG4gICAgdHlwZTogJ3BhcmVudCdcbiAgfSksXG4gIGluZGV4VGFibGVzU2l6ZTogci51aW50MzIsXG4gIG51bWJlck9mSW5kZXhTdWJUYWJsZXM6IHIudWludDMyLFxuICBjb2xvclJlZjogci51aW50MzIsXG4gIGhvcmk6IFNCaXRMaW5lTWV0cmljcyxcbiAgdmVydDogU0JpdExpbmVNZXRyaWNzLFxuICBzdGFydEdseXBoSW5kZXg6IHIudWludDE2LFxuICBlbmRHbHlwaEluZGV4OiByLnVpbnQxNixcbiAgcHBlbVg6IHIudWludDgsXG4gIHBwZW1ZOiByLnVpbnQ4LFxuICBiaXREZXB0aDogci51aW50OCxcbiAgZmxhZ3M6IG5ldyByLkJpdGZpZWxkKHIudWludDgsIFsnaG9yaXpvbnRhbCcsICd2ZXJ0aWNhbCddKVxufSk7XG52YXIgRUJMQyA9IG5ldyByLlN0cnVjdCh7XG4gIHZlcnNpb246IHIudWludDMyLFxuICAvLyAweDAwMDIwMDAwXG4gIG51bVNpemVzOiByLnVpbnQzMixcbiAgc2l6ZXM6IG5ldyByLkFycmF5KEJpdG1hcFNpemVUYWJsZSwgJ251bVNpemVzJylcbn0pO1xudmFyIEltYWdlVGFibGUgPSBuZXcgci5TdHJ1Y3Qoe1xuICBwcGVtOiByLnVpbnQxNixcbiAgcmVzb2x1dGlvbjogci51aW50MTYsXG4gIGltYWdlT2Zmc2V0czogbmV3IHIuQXJyYXkobmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgJ3ZvaWQnKSwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5wYXJlbnQucGFyZW50Lm1heHAubnVtR2x5cGhzICsgMTtcbiAgfSlcbn0pOyAvLyBUaGlzIGlzIHRoZSBBcHBsZSBzYml4IHRhYmxlLCB1c2VkIGJ5IHRoZSBcIkFwcGxlIENvbG9yIEVtb2ppXCIgZm9udC5cbi8vIEl0IGluY2x1ZGVzIHNldmVyYWwgaW1hZ2UgdGFibGVzIHdpdGggaW1hZ2VzIGZvciBlYWNoIGJpdG1hcCBnbHlwaFxuLy8gb2Ygc2V2ZXJhbCBkaWZmZXJlbnQgc2l6ZXMuXG5cbnZhciBzYml4ID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci51aW50MTYsXG4gIGZsYWdzOiBuZXcgci5CaXRmaWVsZChyLnVpbnQxNiwgWydyZW5kZXJPdXRsaW5lcyddKSxcbiAgbnVtSW1nVGFibGVzOiByLnVpbnQzMixcbiAgaW1hZ2VUYWJsZXM6IG5ldyByLkFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MzIsIEltYWdlVGFibGUpLCAnbnVtSW1nVGFibGVzJylcbn0pO1xudmFyIExheWVyUmVjb3JkID0gbmV3IHIuU3RydWN0KHtcbiAgZ2lkOiByLnVpbnQxNixcbiAgLy8gR2x5cGggSUQgb2YgbGF5ZXIgZ2x5cGggKG11c3QgYmUgaW4gei1vcmRlciBmcm9tIGJvdHRvbSB0byB0b3ApLlxuICBwYWxldHRlSW5kZXg6IHIudWludDE2IC8vIEluZGV4IHZhbHVlIHRvIHVzZSBpbiB0aGUgYXBwcm9wcmlhdGUgcGFsZXR0ZS4gVGhpcyB2YWx1ZSBtdXN0XG5cbn0pOyAvLyBiZSBsZXNzIHRoYW4gbnVtUGFsZXR0ZUVudHJpZXMgaW4gdGhlIENQQUwgdGFibGUsIGV4Y2VwdCBmb3Jcbi8vIHRoZSBzcGVjaWFsIGNhc2Ugbm90ZWQgYmVsb3cuIEVhY2ggcGFsZXR0ZSBlbnRyeSBpcyAxNiBiaXRzLlxuLy8gQSBwYWxldHRlIGluZGV4IG9mIDB4RkZGRiBpcyBhIHNwZWNpYWwgY2FzZSBpbmRpY2F0aW5nIHRoYXRcbi8vIHRoZSB0ZXh0IGZvcmVncm91bmQgY29sb3Igc2hvdWxkIGJlIHVzZWQuXG5cbnZhciBCYXNlR2x5cGhSZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICBnaWQ6IHIudWludDE2LFxuICAvLyBHbHlwaCBJRCBvZiByZWZlcmVuY2UgZ2x5cGguIFRoaXMgZ2x5cGggaXMgZm9yIHJlZmVyZW5jZSBvbmx5XG4gIC8vIGFuZCBpcyBub3QgcmVuZGVyZWQgZm9yIGNvbG9yLlxuICBmaXJzdExheWVySW5kZXg6IHIudWludDE2LFxuICAvLyBJbmRleCAoZnJvbSBiZWdpbm5pbmcgb2YgdGhlIExheWVyIFJlY29yZHMpIHRvIHRoZSBsYXllciByZWNvcmQuXG4gIC8vIFRoZXJlIHdpbGwgYmUgbnVtTGF5ZXJzIGNvbnNlY3V0aXZlIGVudHJpZXMgZm9yIHRoaXMgYmFzZSBnbHlwaC5cbiAgbnVtTGF5ZXJzOiByLnVpbnQxNlxufSk7XG52YXIgQ09MUiA9IG5ldyByLlN0cnVjdCh7XG4gIHZlcnNpb246IHIudWludDE2LFxuICBudW1CYXNlR2x5cGhSZWNvcmRzOiByLnVpbnQxNixcbiAgYmFzZUdseXBoUmVjb3JkOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBuZXcgci5BcnJheShCYXNlR2x5cGhSZWNvcmQsICdudW1CYXNlR2x5cGhSZWNvcmRzJykpLFxuICBsYXllclJlY29yZHM6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIG5ldyByLkFycmF5KExheWVyUmVjb3JkLCAnbnVtTGF5ZXJSZWNvcmRzJyksIHtcbiAgICBsYXp5OiB0cnVlXG4gIH0pLFxuICBudW1MYXllclJlY29yZHM6IHIudWludDE2XG59KTtcbnZhciBDb2xvclJlY29yZCA9IG5ldyByLlN0cnVjdCh7XG4gIGJsdWU6IHIudWludDgsXG4gIGdyZWVuOiByLnVpbnQ4LFxuICByZWQ6IHIudWludDgsXG4gIGFscGhhOiByLnVpbnQ4XG59KTtcbnZhciBDUEFMID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KHIudWludDE2LCB7XG4gIGhlYWRlcjoge1xuICAgIG51bVBhbGV0dGVFbnRyaWVzOiByLnVpbnQxNixcbiAgICBudW1QYWxldHRlczogci51aW50MTYsXG4gICAgbnVtQ29sb3JSZWNvcmRzOiByLnVpbnQxNixcbiAgICBjb2xvclJlY29yZHM6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIG5ldyByLkFycmF5KENvbG9yUmVjb3JkLCAnbnVtQ29sb3JSZWNvcmRzJykpLFxuICAgIGNvbG9yUmVjb3JkSW5kaWNlczogbmV3IHIuQXJyYXkoci51aW50MTYsICdudW1QYWxldHRlcycpXG4gIH0sXG4gIDA6IHt9LFxuICAxOiB7XG4gICAgb2Zmc2V0UGFsZXR0ZVR5cGVBcnJheTogbmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgbmV3IHIuQXJyYXkoci51aW50MzIsICdudW1QYWxldHRlcycpKSxcbiAgICBvZmZzZXRQYWxldHRlTGFiZWxBcnJheTogbmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgbmV3IHIuQXJyYXkoci51aW50MTYsICdudW1QYWxldHRlcycpKSxcbiAgICBvZmZzZXRQYWxldHRlRW50cnlMYWJlbEFycmF5OiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBuZXcgci5BcnJheShyLnVpbnQxNiwgJ251bVBhbGV0dGVFbnRyaWVzJykpXG4gIH1cbn0pO1xudmFyIEJhc2VDb29yZCA9IG5ldyByLlZlcnNpb25lZFN0cnVjdChyLnVpbnQxNiwge1xuICAxOiB7XG4gICAgLy8gRGVzaWduIHVuaXRzIG9ubHlcbiAgICBjb29yZGluYXRlOiByLmludDE2IC8vIFggb3IgWSB2YWx1ZSwgaW4gZGVzaWduIHVuaXRzXG5cbiAgfSxcbiAgMjoge1xuICAgIC8vIERlc2lnbiB1bml0cyBwbHVzIGNvbnRvdXIgcG9pbnRcbiAgICBjb29yZGluYXRlOiByLmludDE2LFxuICAgIC8vIFggb3IgWSB2YWx1ZSwgaW4gZGVzaWduIHVuaXRzXG4gICAgcmVmZXJlbmNlR2x5cGg6IHIudWludDE2LFxuICAgIC8vIEdseXBoSUQgb2YgY29udHJvbCBnbHlwaFxuICAgIGJhc2VDb29yZFBvaW50OiByLnVpbnQxNiAvLyBJbmRleCBvZiBjb250b3VyIHBvaW50IG9uIHRoZSByZWZlcmVuY2VHbHlwaFxuXG4gIH0sXG4gIDM6IHtcbiAgICAvLyBEZXNpZ24gdW5pdHMgcGx1cyBEZXZpY2UgdGFibGVcbiAgICBjb29yZGluYXRlOiByLmludDE2LFxuICAgIC8vIFggb3IgWSB2YWx1ZSwgaW4gZGVzaWduIHVuaXRzXG4gICAgZGV2aWNlVGFibGU6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIERldmljZSkgLy8gRGV2aWNlIHRhYmxlIGZvciBYIG9yIFkgdmFsdWVcblxuICB9XG59KTtcbnZhciBCYXNlVmFsdWVzID0gbmV3IHIuU3RydWN0KHtcbiAgZGVmYXVsdEluZGV4OiByLnVpbnQxNixcbiAgLy8gSW5kZXggb2YgZGVmYXVsdCBiYXNlbGluZSBmb3IgdGhpcyBzY3JpcHQtc2FtZSBpbmRleCBpbiB0aGUgQmFzZVRhZ0xpc3RcbiAgYmFzZUNvb3JkQ291bnQ6IHIudWludDE2LFxuICBiYXNlQ29vcmRzOiBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBCYXNlQ29vcmQpLCAnYmFzZUNvb3JkQ291bnQnKVxufSk7XG52YXIgRmVhdE1pbk1heFJlY29yZCA9IG5ldyByLlN0cnVjdCh7XG4gIHRhZzogbmV3IHIuU3RyaW5nKDQpLFxuICAvLyA0LWJ5dGUgZmVhdHVyZSBpZGVudGlmaWNhdGlvbiB0YWctbXVzdCBtYXRjaCBGZWF0dXJlVGFnIGluIEZlYXR1cmVMaXN0XG4gIG1pbkNvb3JkOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBCYXNlQ29vcmQsIHtcbiAgICB0eXBlOiAncGFyZW50J1xuICB9KSxcbiAgLy8gTWF5IGJlIE5VTExcbiAgbWF4Q29vcmQ6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIEJhc2VDb29yZCwge1xuICAgIHR5cGU6ICdwYXJlbnQnXG4gIH0pIC8vIE1heSBiZSBOVUxMXG5cbn0pO1xudmFyIE1pbk1heCA9IG5ldyByLlN0cnVjdCh7XG4gIG1pbkNvb3JkOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBCYXNlQ29vcmQpLFxuICAvLyBNYXkgYmUgTlVMTFxuICBtYXhDb29yZDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQmFzZUNvb3JkKSxcbiAgLy8gTWF5IGJlIE5VTExcbiAgZmVhdE1pbk1heENvdW50OiByLnVpbnQxNixcbiAgLy8gTWF5IGJlIDBcbiAgZmVhdE1pbk1heFJlY29yZHM6IG5ldyByLkFycmF5KEZlYXRNaW5NYXhSZWNvcmQsICdmZWF0TWluTWF4Q291bnQnKSAvLyBJbiBhbHBoYWJldGljYWwgb3JkZXJcblxufSk7XG52YXIgQmFzZUxhbmdTeXNSZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICB0YWc6IG5ldyByLlN0cmluZyg0KSxcbiAgLy8gNC1ieXRlIGxhbmd1YWdlIHN5c3RlbSBpZGVudGlmaWNhdGlvbiB0YWdcbiAgbWluTWF4OiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBNaW5NYXgsIHtcbiAgICB0eXBlOiAncGFyZW50J1xuICB9KVxufSk7XG52YXIgQmFzZVNjcmlwdCA9IG5ldyByLlN0cnVjdCh7XG4gIGJhc2VWYWx1ZXM6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIEJhc2VWYWx1ZXMpLFxuICAvLyBNYXkgYmUgTlVMTFxuICBkZWZhdWx0TWluTWF4OiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBNaW5NYXgpLFxuICAvLyBNYXkgYmUgTlVMTFxuICBiYXNlTGFuZ1N5c0NvdW50OiByLnVpbnQxNixcbiAgLy8gTWF5IGJlIDBcbiAgYmFzZUxhbmdTeXNSZWNvcmRzOiBuZXcgci5BcnJheShCYXNlTGFuZ1N5c1JlY29yZCwgJ2Jhc2VMYW5nU3lzQ291bnQnKSAvLyBpbiBhbHBoYWJldGljYWwgb3JkZXIgYnkgQmFzZUxhbmdTeXNUYWdcblxufSk7XG52YXIgQmFzZVNjcmlwdFJlY29yZCA9IG5ldyByLlN0cnVjdCh7XG4gIHRhZzogbmV3IHIuU3RyaW5nKDQpLFxuICAvLyA0LWJ5dGUgc2NyaXB0IGlkZW50aWZpY2F0aW9uIHRhZ1xuICBzY3JpcHQ6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIEJhc2VTY3JpcHQsIHtcbiAgICB0eXBlOiAncGFyZW50J1xuICB9KVxufSk7XG52YXIgQmFzZVNjcmlwdExpc3QgPSBuZXcgci5BcnJheShCYXNlU2NyaXB0UmVjb3JkLCByLnVpbnQxNik7IC8vIEFycmF5IG9mIDQtYnl0ZSBiYXNlbGluZSBpZGVudGlmaWNhdGlvbiB0YWdzLW11c3QgYmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyXG5cbnZhciBCYXNlVGFnTGlzdCA9IG5ldyByLkFycmF5KG5ldyByLlN0cmluZyg0KSwgci51aW50MTYpO1xudmFyIEF4aXMgPSBuZXcgci5TdHJ1Y3Qoe1xuICBiYXNlVGFnTGlzdDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQmFzZVRhZ0xpc3QpLFxuICAvLyBNYXkgYmUgTlVMTFxuICBiYXNlU2NyaXB0TGlzdDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQmFzZVNjcmlwdExpc3QpXG59KTtcbnZhciBCQVNFID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KHIudWludDMyLCB7XG4gIGhlYWRlcjoge1xuICAgIGhvcml6QXhpczogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQXhpcyksXG4gICAgLy8gTWF5IGJlIE5VTExcbiAgICB2ZXJ0QXhpczogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQXhpcykgLy8gTWF5IGJlIE5VTExcblxuICB9LFxuICAweDAwMDEwMDAwOiB7fSxcbiAgMHgwMDAxMDAwMToge1xuICAgIGl0ZW1WYXJpYXRpb25TdG9yZTogbmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgSXRlbVZhcmlhdGlvblN0b3JlKVxuICB9XG59KTtcbnZhciBBdHRhY2hQb2ludCA9IG5ldyByLkFycmF5KHIudWludDE2LCByLnVpbnQxNik7XG52YXIgQXR0YWNoTGlzdCA9IG5ldyByLlN0cnVjdCh7XG4gIGNvdmVyYWdlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksXG4gIGdseXBoQ291bnQ6IHIudWludDE2LFxuICBhdHRhY2hQb2ludHM6IG5ldyByLkFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MTYsIEF0dGFjaFBvaW50KSwgJ2dseXBoQ291bnQnKVxufSk7XG52YXIgQ2FyZXRWYWx1ZSA9IG5ldyByLlZlcnNpb25lZFN0cnVjdChyLnVpbnQxNiwge1xuICAxOiB7XG4gICAgLy8gRGVzaWduIHVuaXRzIG9ubHlcbiAgICBjb29yZGluYXRlOiByLmludDE2XG4gIH0sXG4gIDI6IHtcbiAgICAvLyBDb250b3VyIHBvaW50XG4gICAgY2FyZXRWYWx1ZVBvaW50OiByLnVpbnQxNlxuICB9LFxuICAzOiB7XG4gICAgLy8gRGVzaWduIHVuaXRzIHBsdXMgRGV2aWNlIHRhYmxlXG4gICAgY29vcmRpbmF0ZTogci5pbnQxNixcbiAgICBkZXZpY2VUYWJsZTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgRGV2aWNlKVxuICB9XG59KTtcbnZhciBMaWdHbHlwaCA9IG5ldyByLkFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MTYsIENhcmV0VmFsdWUpLCByLnVpbnQxNik7XG52YXIgTGlnQ2FyZXRMaXN0ID0gbmV3IHIuU3RydWN0KHtcbiAgY292ZXJhZ2U6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENvdmVyYWdlKSxcbiAgbGlnR2x5cGhDb3VudDogci51aW50MTYsXG4gIGxpZ0dseXBoczogbmV3IHIuQXJyYXkobmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgTGlnR2x5cGgpLCAnbGlnR2x5cGhDb3VudCcpXG59KTtcbnZhciBNYXJrR2x5cGhTZXRzRGVmID0gbmV3IHIuU3RydWN0KHtcbiAgbWFya1NldFRhYmxlRm9ybWF0OiByLnVpbnQxNixcbiAgbWFya1NldENvdW50OiByLnVpbnQxNixcbiAgY292ZXJhZ2U6IG5ldyByLkFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MzIsIENvdmVyYWdlKSwgJ21hcmtTZXRDb3VudCcpXG59KTtcbnZhciBHREVGID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KHIudWludDMyLCB7XG4gIGhlYWRlcjoge1xuICAgIGdseXBoQ2xhc3NEZWY6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENsYXNzRGVmKSxcbiAgICBhdHRhY2hMaXN0OiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBBdHRhY2hMaXN0KSxcbiAgICBsaWdDYXJldExpc3Q6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIExpZ0NhcmV0TGlzdCksXG4gICAgbWFya0F0dGFjaENsYXNzRGVmOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDbGFzc0RlZilcbiAgfSxcbiAgMHgwMDAxMDAwMDoge30sXG4gIDB4MDAwMTAwMDI6IHtcbiAgICBtYXJrR2x5cGhTZXRzRGVmOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBNYXJrR2x5cGhTZXRzRGVmKVxuICB9LFxuICAweDAwMDEwMDAzOiB7XG4gICAgbWFya0dseXBoU2V0c0RlZjogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgTWFya0dseXBoU2V0c0RlZiksXG4gICAgaXRlbVZhcmlhdGlvblN0b3JlOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBJdGVtVmFyaWF0aW9uU3RvcmUpXG4gIH1cbn0pO1xudmFyIFZhbHVlRm9ybWF0ID0gbmV3IHIuQml0ZmllbGQoci51aW50MTYsIFsneFBsYWNlbWVudCcsICd5UGxhY2VtZW50JywgJ3hBZHZhbmNlJywgJ3lBZHZhbmNlJywgJ3hQbGFEZXZpY2UnLCAneVBsYURldmljZScsICd4QWR2RGV2aWNlJywgJ3lBZHZEZXZpY2UnXSk7XG52YXIgdHlwZXMgPSB7XG4gIHhQbGFjZW1lbnQ6IHIuaW50MTYsXG4gIHlQbGFjZW1lbnQ6IHIuaW50MTYsXG4gIHhBZHZhbmNlOiByLmludDE2LFxuICB5QWR2YW5jZTogci5pbnQxNixcbiAgeFBsYURldmljZTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgRGV2aWNlLCB7XG4gICAgdHlwZTogJ2dsb2JhbCcsXG4gICAgcmVsYXRpdmVUbzogZnVuY3Rpb24gcmVsYXRpdmVUbyhjdHgpIHtcbiAgICAgIHJldHVybiBjdHgucmVsO1xuICAgIH1cbiAgfSksXG4gIHlQbGFEZXZpY2U6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIERldmljZSwge1xuICAgIHR5cGU6ICdnbG9iYWwnLFxuICAgIHJlbGF0aXZlVG86IGZ1bmN0aW9uIHJlbGF0aXZlVG8oY3R4KSB7XG4gICAgICByZXR1cm4gY3R4LnJlbDtcbiAgICB9XG4gIH0pLFxuICB4QWR2RGV2aWNlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBEZXZpY2UsIHtcbiAgICB0eXBlOiAnZ2xvYmFsJyxcbiAgICByZWxhdGl2ZVRvOiBmdW5jdGlvbiByZWxhdGl2ZVRvKGN0eCkge1xuICAgICAgcmV0dXJuIGN0eC5yZWw7XG4gICAgfVxuICB9KSxcbiAgeUFkdkRldmljZTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgRGV2aWNlLCB7XG4gICAgdHlwZTogJ2dsb2JhbCcsXG4gICAgcmVsYXRpdmVUbzogZnVuY3Rpb24gcmVsYXRpdmVUbyhjdHgpIHtcbiAgICAgIHJldHVybiBjdHgucmVsO1xuICAgIH1cbiAgfSlcbn07XG5cbnZhciBWYWx1ZVJlY29yZCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFZhbHVlUmVjb3JkKGtleSkge1xuICAgIGlmIChrZXkgPT09IHZvaWQgMCkge1xuICAgICAga2V5ID0gJ3ZhbHVlRm9ybWF0JztcbiAgICB9XG5cbiAgICB0aGlzLmtleSA9IGtleTtcbiAgfVxuXG4gIHZhciBfcHJvdG8xMCA9IFZhbHVlUmVjb3JkLnByb3RvdHlwZTtcblxuICBfcHJvdG8xMC5idWlsZFN0cnVjdCA9IGZ1bmN0aW9uIGJ1aWxkU3RydWN0KHBhcmVudCkge1xuICAgIHZhciBzdHJ1Y3QgPSBwYXJlbnQ7XG5cbiAgICB3aGlsZSAoIXN0cnVjdFt0aGlzLmtleV0gJiYgc3RydWN0LnBhcmVudCkge1xuICAgICAgc3RydWN0ID0gc3RydWN0LnBhcmVudDtcbiAgICB9XG5cbiAgICBpZiAoIXN0cnVjdFt0aGlzLmtleV0pIHJldHVybjtcbiAgICB2YXIgZmllbGRzID0ge307XG5cbiAgICBmaWVsZHMucmVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHN0cnVjdC5fc3RhcnRPZmZzZXQ7XG4gICAgfTtcblxuICAgIHZhciBmb3JtYXQgPSBzdHJ1Y3RbdGhpcy5rZXldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIGZvcm1hdCkge1xuICAgICAgaWYgKGZvcm1hdFtrZXldKSB7XG4gICAgICAgIGZpZWxkc1trZXldID0gdHlwZXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IHIuU3RydWN0KGZpZWxkcyk7XG4gIH07XG5cbiAgX3Byb3RvMTAuc2l6ZSA9IGZ1bmN0aW9uIHNpemUodmFsLCBjdHgpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZFN0cnVjdChjdHgpLnNpemUodmFsLCBjdHgpO1xuICB9O1xuXG4gIF9wcm90bzEwLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCkge1xuICAgIHZhciByZXMgPSB0aGlzLmJ1aWxkU3RydWN0KHBhcmVudCkuZGVjb2RlKHN0cmVhbSwgcGFyZW50KTtcbiAgICBkZWxldGUgcmVzLnJlbDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIHJldHVybiBWYWx1ZVJlY29yZDtcbn0oKTtcblxudmFyIFBhaXJWYWx1ZVJlY29yZCA9IG5ldyByLlN0cnVjdCh7XG4gIHNlY29uZEdseXBoOiByLnVpbnQxNixcbiAgdmFsdWUxOiBuZXcgVmFsdWVSZWNvcmQoJ3ZhbHVlRm9ybWF0MScpLFxuICB2YWx1ZTI6IG5ldyBWYWx1ZVJlY29yZCgndmFsdWVGb3JtYXQyJylcbn0pO1xudmFyIFBhaXJTZXQgPSBuZXcgci5BcnJheShQYWlyVmFsdWVSZWNvcmQsIHIudWludDE2KTtcbnZhciBDbGFzczJSZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICB2YWx1ZTE6IG5ldyBWYWx1ZVJlY29yZCgndmFsdWVGb3JtYXQxJyksXG4gIHZhbHVlMjogbmV3IFZhbHVlUmVjb3JkKCd2YWx1ZUZvcm1hdDInKVxufSk7XG52YXIgQW5jaG9yID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KHIudWludDE2LCB7XG4gIDE6IHtcbiAgICAvLyBEZXNpZ24gdW5pdHMgb25seVxuICAgIHhDb29yZGluYXRlOiByLmludDE2LFxuICAgIHlDb29yZGluYXRlOiByLmludDE2XG4gIH0sXG4gIDI6IHtcbiAgICAvLyBEZXNpZ24gdW5pdHMgcGx1cyBjb250b3VyIHBvaW50XG4gICAgeENvb3JkaW5hdGU6IHIuaW50MTYsXG4gICAgeUNvb3JkaW5hdGU6IHIuaW50MTYsXG4gICAgYW5jaG9yUG9pbnQ6IHIudWludDE2XG4gIH0sXG4gIDM6IHtcbiAgICAvLyBEZXNpZ24gdW5pdHMgcGx1cyBEZXZpY2UgdGFibGVzXG4gICAgeENvb3JkaW5hdGU6IHIuaW50MTYsXG4gICAgeUNvb3JkaW5hdGU6IHIuaW50MTYsXG4gICAgeERldmljZVRhYmxlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBEZXZpY2UpLFxuICAgIHlEZXZpY2VUYWJsZTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgRGV2aWNlKVxuICB9XG59KTtcbnZhciBFbnRyeUV4aXRSZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICBlbnRyeUFuY2hvcjogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQW5jaG9yLCB7XG4gICAgdHlwZTogJ3BhcmVudCdcbiAgfSksXG4gIGV4aXRBbmNob3I6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIEFuY2hvciwge1xuICAgIHR5cGU6ICdwYXJlbnQnXG4gIH0pXG59KTtcbnZhciBNYXJrUmVjb3JkID0gbmV3IHIuU3RydWN0KHtcbiAgY2xhc3M6IHIudWludDE2LFxuICBtYXJrQW5jaG9yOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBBbmNob3IsIHtcbiAgICB0eXBlOiAncGFyZW50J1xuICB9KVxufSk7XG52YXIgTWFya0FycmF5ID0gbmV3IHIuQXJyYXkoTWFya1JlY29yZCwgci51aW50MTYpO1xudmFyIEJhc2VSZWNvcmQgPSBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBBbmNob3IpLCBmdW5jdGlvbiAodCkge1xuICByZXR1cm4gdC5wYXJlbnQuY2xhc3NDb3VudDtcbn0pO1xudmFyIEJhc2VBcnJheSA9IG5ldyByLkFycmF5KEJhc2VSZWNvcmQsIHIudWludDE2KTtcbnZhciBDb21wb25lbnRSZWNvcmQgPSBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBBbmNob3IpLCBmdW5jdGlvbiAodCkge1xuICByZXR1cm4gdC5wYXJlbnQucGFyZW50LmNsYXNzQ291bnQ7XG59KTtcbnZhciBMaWdhdHVyZUF0dGFjaCA9IG5ldyByLkFycmF5KENvbXBvbmVudFJlY29yZCwgci51aW50MTYpO1xudmFyIExpZ2F0dXJlQXJyYXkgPSBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBMaWdhdHVyZUF0dGFjaCksIHIudWludDE2KTtcbnZhciBHUE9TTG9va3VwID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KCdsb29rdXBUeXBlJywge1xuICAxOiBuZXcgci5WZXJzaW9uZWRTdHJ1Y3Qoci51aW50MTYsIHtcbiAgICAvLyBTaW5nbGUgQWRqdXN0bWVudFxuICAgIDE6IHtcbiAgICAgIC8vIFNpbmdsZSBwb3NpdGlvbmluZyB2YWx1ZVxuICAgICAgY292ZXJhZ2U6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENvdmVyYWdlKSxcbiAgICAgIHZhbHVlRm9ybWF0OiBWYWx1ZUZvcm1hdCxcbiAgICAgIHZhbHVlOiBuZXcgVmFsdWVSZWNvcmQoKVxuICAgIH0sXG4gICAgMjoge1xuICAgICAgY292ZXJhZ2U6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENvdmVyYWdlKSxcbiAgICAgIHZhbHVlRm9ybWF0OiBWYWx1ZUZvcm1hdCxcbiAgICAgIHZhbHVlQ291bnQ6IHIudWludDE2LFxuICAgICAgdmFsdWVzOiBuZXcgci5MYXp5QXJyYXkobmV3IFZhbHVlUmVjb3JkKCksICd2YWx1ZUNvdW50JylcbiAgICB9XG4gIH0pLFxuICAyOiBuZXcgci5WZXJzaW9uZWRTdHJ1Y3Qoci51aW50MTYsIHtcbiAgICAvLyBQYWlyIEFkanVzdG1lbnQgUG9zaXRpb25pbmdcbiAgICAxOiB7XG4gICAgICAvLyBBZGp1c3RtZW50cyBmb3IgZ2x5cGggcGFpcnNcbiAgICAgIGNvdmVyYWdlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksXG4gICAgICB2YWx1ZUZvcm1hdDE6IFZhbHVlRm9ybWF0LFxuICAgICAgdmFsdWVGb3JtYXQyOiBWYWx1ZUZvcm1hdCxcbiAgICAgIHBhaXJTZXRDb3VudDogci51aW50MTYsXG4gICAgICBwYWlyU2V0czogbmV3IHIuTGF6eUFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MTYsIFBhaXJTZXQpLCAncGFpclNldENvdW50JylcbiAgICB9LFxuICAgIDI6IHtcbiAgICAgIC8vIENsYXNzIHBhaXIgYWRqdXN0bWVudFxuICAgICAgY292ZXJhZ2U6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENvdmVyYWdlKSxcbiAgICAgIHZhbHVlRm9ybWF0MTogVmFsdWVGb3JtYXQsXG4gICAgICB2YWx1ZUZvcm1hdDI6IFZhbHVlRm9ybWF0LFxuICAgICAgY2xhc3NEZWYxOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDbGFzc0RlZiksXG4gICAgICBjbGFzc0RlZjI6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENsYXNzRGVmKSxcbiAgICAgIGNsYXNzMUNvdW50OiByLnVpbnQxNixcbiAgICAgIGNsYXNzMkNvdW50OiByLnVpbnQxNixcbiAgICAgIGNsYXNzUmVjb3JkczogbmV3IHIuTGF6eUFycmF5KG5ldyByLkxhenlBcnJheShDbGFzczJSZWNvcmQsICdjbGFzczJDb3VudCcpLCAnY2xhc3MxQ291bnQnKVxuICAgIH1cbiAgfSksXG4gIDM6IHtcbiAgICAvLyBDdXJzaXZlIEF0dGFjaG1lbnQgUG9zaXRpb25pbmdcbiAgICBmb3JtYXQ6IHIudWludDE2LFxuICAgIGNvdmVyYWdlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksXG4gICAgZW50cnlFeGl0Q291bnQ6IHIudWludDE2LFxuICAgIGVudHJ5RXhpdFJlY29yZHM6IG5ldyByLkFycmF5KEVudHJ5RXhpdFJlY29yZCwgJ2VudHJ5RXhpdENvdW50JylcbiAgfSxcbiAgNDoge1xuICAgIC8vIE1hcmtUb0Jhc2UgQXR0YWNobWVudCBQb3NpdGlvbmluZ1xuICAgIGZvcm1hdDogci51aW50MTYsXG4gICAgbWFya0NvdmVyYWdlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksXG4gICAgYmFzZUNvdmVyYWdlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksXG4gICAgY2xhc3NDb3VudDogci51aW50MTYsXG4gICAgbWFya0FycmF5OiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBNYXJrQXJyYXkpLFxuICAgIGJhc2VBcnJheTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQmFzZUFycmF5KVxuICB9LFxuICA1OiB7XG4gICAgLy8gTWFya1RvTGlnYXR1cmUgQXR0YWNobWVudCBQb3NpdGlvbmluZ1xuICAgIGZvcm1hdDogci51aW50MTYsXG4gICAgbWFya0NvdmVyYWdlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksXG4gICAgbGlnYXR1cmVDb3ZlcmFnZTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ292ZXJhZ2UpLFxuICAgIGNsYXNzQ291bnQ6IHIudWludDE2LFxuICAgIG1hcmtBcnJheTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgTWFya0FycmF5KSxcbiAgICBsaWdhdHVyZUFycmF5OiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBMaWdhdHVyZUFycmF5KVxuICB9LFxuICA2OiB7XG4gICAgLy8gTWFya1RvTWFyayBBdHRhY2htZW50IFBvc2l0aW9uaW5nXG4gICAgZm9ybWF0OiByLnVpbnQxNixcbiAgICBtYXJrMUNvdmVyYWdlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksXG4gICAgbWFyazJDb3ZlcmFnZTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ292ZXJhZ2UpLFxuICAgIGNsYXNzQ291bnQ6IHIudWludDE2LFxuICAgIG1hcmsxQXJyYXk6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIE1hcmtBcnJheSksXG4gICAgbWFyazJBcnJheTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQmFzZUFycmF5KVxuICB9LFxuICA3OiBDb250ZXh0LFxuICAvLyBDb250ZXh0dWFsIHBvc2l0aW9uaW5nXG4gIDg6IENoYWluaW5nQ29udGV4dCxcbiAgLy8gQ2hhaW5pbmcgY29udGV4dHVhbCBwb3NpdGlvbmluZ1xuICA5OiB7XG4gICAgLy8gRXh0ZW5zaW9uIFBvc2l0aW9uaW5nXG4gICAgcG9zRm9ybWF0OiByLnVpbnQxNixcbiAgICBsb29rdXBUeXBlOiByLnVpbnQxNixcbiAgICAvLyBjYW5ub3QgYWxzbyBiZSA5XG4gICAgZXh0ZW5zaW9uOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBHUE9TTG9va3VwKVxuICB9XG59KTsgLy8gRml4IGNpcmN1bGFyIHJlZmVyZW5jZVxuXG5HUE9TTG9va3VwLnZlcnNpb25zWzldLmV4dGVuc2lvbi50eXBlID0gR1BPU0xvb2t1cDtcbnZhciBHUE9TID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KHIudWludDMyLCB7XG4gIGhlYWRlcjoge1xuICAgIHNjcmlwdExpc3Q6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIFNjcmlwdExpc3QpLFxuICAgIGZlYXR1cmVMaXN0OiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBGZWF0dXJlTGlzdCksXG4gICAgbG9va3VwTGlzdDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgbmV3IExvb2t1cExpc3QoR1BPU0xvb2t1cCkpXG4gIH0sXG4gIDB4MDAwMTAwMDA6IHt9LFxuICAweDAwMDEwMDAxOiB7XG4gICAgZmVhdHVyZVZhcmlhdGlvbnM6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIEZlYXR1cmVWYXJpYXRpb25zKVxuICB9XG59KTsgLy8gZXhwb3J0IEdQT1NMb29rdXAgZm9yIEpTVEYgdGFibGVcblxudmFyIFNlcXVlbmNlID0gbmV3IHIuQXJyYXkoci51aW50MTYsIHIudWludDE2KTtcbnZhciBBbHRlcm5hdGVTZXQgPSBTZXF1ZW5jZTtcbnZhciBMaWdhdHVyZSA9IG5ldyByLlN0cnVjdCh7XG4gIGdseXBoOiByLnVpbnQxNixcbiAgY29tcENvdW50OiByLnVpbnQxNixcbiAgY29tcG9uZW50czogbmV3IHIuQXJyYXkoci51aW50MTYsIGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHQuY29tcENvdW50IC0gMTtcbiAgfSlcbn0pO1xudmFyIExpZ2F0dXJlU2V0ID0gbmV3IHIuQXJyYXkobmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgTGlnYXR1cmUpLCByLnVpbnQxNik7XG52YXIgR1NVQkxvb2t1cCA9IG5ldyByLlZlcnNpb25lZFN0cnVjdCgnbG9va3VwVHlwZScsIHtcbiAgMTogbmV3IHIuVmVyc2lvbmVkU3RydWN0KHIudWludDE2LCB7XG4gICAgLy8gU2luZ2xlIFN1YnN0aXR1dGlvblxuICAgIDE6IHtcbiAgICAgIGNvdmVyYWdlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksXG4gICAgICBkZWx0YUdseXBoSUQ6IHIuaW50MTZcbiAgICB9LFxuICAgIDI6IHtcbiAgICAgIGNvdmVyYWdlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksXG4gICAgICBnbHlwaENvdW50OiByLnVpbnQxNixcbiAgICAgIHN1YnN0aXR1dGU6IG5ldyByLkxhenlBcnJheShyLnVpbnQxNiwgJ2dseXBoQ291bnQnKVxuICAgIH1cbiAgfSksXG4gIDI6IHtcbiAgICAvLyBNdWx0aXBsZSBTdWJzdGl0dXRpb25cbiAgICBzdWJzdEZvcm1hdDogci51aW50MTYsXG4gICAgY292ZXJhZ2U6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENvdmVyYWdlKSxcbiAgICBjb3VudDogci51aW50MTYsXG4gICAgc2VxdWVuY2VzOiBuZXcgci5MYXp5QXJyYXkobmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgU2VxdWVuY2UpLCAnY291bnQnKVxuICB9LFxuICAzOiB7XG4gICAgLy8gQWx0ZXJuYXRlIFN1YnN0aXR1dGlvblxuICAgIHN1YnN0Rm9ybWF0OiByLnVpbnQxNixcbiAgICBjb3ZlcmFnZTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ292ZXJhZ2UpLFxuICAgIGNvdW50OiByLnVpbnQxNixcbiAgICBhbHRlcm5hdGVTZXQ6IG5ldyByLkxhenlBcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBBbHRlcm5hdGVTZXQpLCAnY291bnQnKVxuICB9LFxuICA0OiB7XG4gICAgLy8gTGlnYXR1cmUgU3Vic3RpdHV0aW9uXG4gICAgc3Vic3RGb3JtYXQ6IHIudWludDE2LFxuICAgIGNvdmVyYWdlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksXG4gICAgY291bnQ6IHIudWludDE2LFxuICAgIGxpZ2F0dXJlU2V0czogbmV3IHIuTGF6eUFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MTYsIExpZ2F0dXJlU2V0KSwgJ2NvdW50JylcbiAgfSxcbiAgNTogQ29udGV4dCxcbiAgLy8gQ29udGV4dHVhbCBTdWJzdGl0dXRpb25cbiAgNjogQ2hhaW5pbmdDb250ZXh0LFxuICAvLyBDaGFpbmluZyBDb250ZXh0dWFsIFN1YnN0aXR1dGlvblxuICA3OiB7XG4gICAgLy8gRXh0ZW5zaW9uIFN1YnN0aXR1dGlvblxuICAgIHN1YnN0Rm9ybWF0OiByLnVpbnQxNixcbiAgICBsb29rdXBUeXBlOiByLnVpbnQxNixcbiAgICAvLyBjYW5ub3QgYWxzbyBiZSA3XG4gICAgZXh0ZW5zaW9uOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBHU1VCTG9va3VwKVxuICB9LFxuICA4OiB7XG4gICAgLy8gUmV2ZXJzZSBDaGFpbmluZyBDb250ZXh0dWFsIFNpbmdsZSBTdWJzdGl0dXRpb25cbiAgICBzdWJzdEZvcm1hdDogci51aW50MTYsXG4gICAgY292ZXJhZ2U6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENvdmVyYWdlKSxcbiAgICBiYWNrdHJhY2tDb3ZlcmFnZTogbmV3IHIuQXJyYXkobmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ292ZXJhZ2UpLCAnYmFja3RyYWNrR2x5cGhDb3VudCcpLFxuICAgIGxvb2thaGVhZEdseXBoQ291bnQ6IHIudWludDE2LFxuICAgIGxvb2thaGVhZENvdmVyYWdlOiBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKHIudWludDE2LCBDb3ZlcmFnZSksICdsb29rYWhlYWRHbHlwaENvdW50JyksXG4gICAgZ2x5cGhDb3VudDogci51aW50MTYsXG4gICAgc3Vic3RpdHV0ZXM6IG5ldyByLkFycmF5KHIudWludDE2LCAnZ2x5cGhDb3VudCcpXG4gIH1cbn0pOyAvLyBGaXggY2lyY3VsYXIgcmVmZXJlbmNlXG5cbkdTVUJMb29rdXAudmVyc2lvbnNbN10uZXh0ZW5zaW9uLnR5cGUgPSBHU1VCTG9va3VwO1xudmFyIEdTVUIgPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3Qoci51aW50MzIsIHtcbiAgaGVhZGVyOiB7XG4gICAgc2NyaXB0TGlzdDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgU2NyaXB0TGlzdCksXG4gICAgZmVhdHVyZUxpc3Q6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIEZlYXR1cmVMaXN0KSxcbiAgICBsb29rdXBMaXN0OiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBuZXcgTG9va3VwTGlzdChHU1VCTG9va3VwKSlcbiAgfSxcbiAgMHgwMDAxMDAwMDoge30sXG4gIDB4MDAwMTAwMDE6IHtcbiAgICBmZWF0dXJlVmFyaWF0aW9uczogbmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgRmVhdHVyZVZhcmlhdGlvbnMpXG4gIH1cbn0pO1xudmFyIEpzdGZHU1VCTW9kTGlzdCA9IG5ldyByLkFycmF5KHIudWludDE2LCByLnVpbnQxNik7XG52YXIgSnN0ZlByaW9yaXR5ID0gbmV3IHIuU3RydWN0KHtcbiAgc2hyaW5rYWdlRW5hYmxlR1NVQjogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgSnN0ZkdTVUJNb2RMaXN0KSxcbiAgc2hyaW5rYWdlRGlzYWJsZUdTVUI6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIEpzdGZHU1VCTW9kTGlzdCksXG4gIHNocmlua2FnZUVuYWJsZUdQT1M6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIEpzdGZHU1VCTW9kTGlzdCksXG4gIHNocmlua2FnZURpc2FibGVHUE9TOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBKc3RmR1NVQk1vZExpc3QpLFxuICBzaHJpbmthZ2VKc3RmTWF4OiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBuZXcgTG9va3VwTGlzdChHUE9TTG9va3VwKSksXG4gIGV4dGVuc2lvbkVuYWJsZUdTVUI6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIEpzdGZHU1VCTW9kTGlzdCksXG4gIGV4dGVuc2lvbkRpc2FibGVHU1VCOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBKc3RmR1NVQk1vZExpc3QpLFxuICBleHRlbnNpb25FbmFibGVHUE9TOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBKc3RmR1NVQk1vZExpc3QpLFxuICBleHRlbnNpb25EaXNhYmxlR1BPUzogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgSnN0ZkdTVUJNb2RMaXN0KSxcbiAgZXh0ZW5zaW9uSnN0Zk1heDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgbmV3IExvb2t1cExpc3QoR1BPU0xvb2t1cCkpXG59KTtcbnZhciBKc3RmTGFuZ1N5cyA9IG5ldyByLkFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MTYsIEpzdGZQcmlvcml0eSksIHIudWludDE2KTtcbnZhciBKc3RmTGFuZ1N5c1JlY29yZCA9IG5ldyByLlN0cnVjdCh7XG4gIHRhZzogbmV3IHIuU3RyaW5nKDQpLFxuICBqc3RmTGFuZ1N5czogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgSnN0ZkxhbmdTeXMpXG59KTtcbnZhciBKc3RmU2NyaXB0ID0gbmV3IHIuU3RydWN0KHtcbiAgZXh0ZW5kZXJHbHlwaHM6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIG5ldyByLkFycmF5KHIudWludDE2LCByLnVpbnQxNikpLFxuICAvLyBhcnJheSBvZiBnbHlwaHMgdG8gZXh0ZW5kIGxpbmUgbGVuZ3RoXG4gIGRlZmF1bHRMYW5nU3lzOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBKc3RmTGFuZ1N5cyksXG4gIGxhbmdTeXNDb3VudDogci51aW50MTYsXG4gIGxhbmdTeXNSZWNvcmRzOiBuZXcgci5BcnJheShKc3RmTGFuZ1N5c1JlY29yZCwgJ2xhbmdTeXNDb3VudCcpXG59KTtcbnZhciBKc3RmU2NyaXB0UmVjb3JkID0gbmV3IHIuU3RydWN0KHtcbiAgdGFnOiBuZXcgci5TdHJpbmcoNCksXG4gIHNjcmlwdDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgSnN0ZlNjcmlwdCwge1xuICAgIHR5cGU6ICdwYXJlbnQnXG4gIH0pXG59KTtcbnZhciBKU1RGID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci51aW50MzIsXG4gIC8vIHNob3VsZCBiZSAweDAwMDEwMDAwXG4gIHNjcmlwdENvdW50OiByLnVpbnQxNixcbiAgc2NyaXB0TGlzdDogbmV3IHIuQXJyYXkoSnN0ZlNjcmlwdFJlY29yZCwgJ3NjcmlwdENvdW50Jylcbn0pO1xuXG52YXIgVmFyaWFibGVTaXplTnVtYmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVmFyaWFibGVTaXplTnVtYmVyKHNpemUpIHtcbiAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgfVxuXG4gIHZhciBfcHJvdG8xMSA9IFZhcmlhYmxlU2l6ZU51bWJlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMTEuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSwgcGFyZW50KSB7XG4gICAgc3dpdGNoICh0aGlzLnNpemUoMCwgcGFyZW50KSkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gc3RyZWFtLnJlYWRVSW50OCgpO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBzdHJlYW0ucmVhZFVJbnQxNkJFKCk7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWFkVUludDI0QkUoKTtcblxuICAgICAgY2FzZSA0OlxuICAgICAgICByZXR1cm4gc3RyZWFtLnJlYWRVSW50MzJCRSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8xMS5zaXplID0gZnVuY3Rpb24gc2l6ZSh2YWwsIHBhcmVudCkge1xuICAgIHJldHVybiB1dGlscy5yZXNvbHZlTGVuZ3RoKHRoaXMuX3NpemUsIG51bGwsIHBhcmVudCk7XG4gIH07XG5cbiAgcmV0dXJuIFZhcmlhYmxlU2l6ZU51bWJlcjtcbn0oKTtcblxudmFyIE1hcERhdGFFbnRyeSA9IG5ldyByLlN0cnVjdCh7XG4gIGVudHJ5OiBuZXcgVmFyaWFibGVTaXplTnVtYmVyKGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuICgodC5wYXJlbnQuZW50cnlGb3JtYXQgJiAweDAwMzApID4+IDQpICsgMTtcbiAgfSksXG4gIG91dGVySW5kZXg6IGZ1bmN0aW9uIG91dGVySW5kZXgodCkge1xuICAgIHJldHVybiB0LmVudHJ5ID4+ICh0LnBhcmVudC5lbnRyeUZvcm1hdCAmIDB4MDAwRikgKyAxO1xuICB9LFxuICBpbm5lckluZGV4OiBmdW5jdGlvbiBpbm5lckluZGV4KHQpIHtcbiAgICByZXR1cm4gdC5lbnRyeSAmICgxIDw8ICh0LnBhcmVudC5lbnRyeUZvcm1hdCAmIDB4MDAwRikgKyAxKSAtIDE7XG4gIH1cbn0pO1xudmFyIERlbHRhU2V0SW5kZXhNYXAgPSBuZXcgci5TdHJ1Y3Qoe1xuICBlbnRyeUZvcm1hdDogci51aW50MTYsXG4gIG1hcENvdW50OiByLnVpbnQxNixcbiAgbWFwRGF0YTogbmV3IHIuQXJyYXkoTWFwRGF0YUVudHJ5LCAnbWFwQ291bnQnKVxufSk7XG52YXIgSFZBUiA9IG5ldyByLlN0cnVjdCh7XG4gIG1ham9yVmVyc2lvbjogci51aW50MTYsXG4gIG1pbm9yVmVyc2lvbjogci51aW50MTYsXG4gIGl0ZW1WYXJpYXRpb25TdG9yZTogbmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgSXRlbVZhcmlhdGlvblN0b3JlKSxcbiAgYWR2YW5jZVdpZHRoTWFwcGluZzogbmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgRGVsdGFTZXRJbmRleE1hcCksXG4gIExTQk1hcHBpbmc6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIERlbHRhU2V0SW5kZXhNYXApLFxuICBSU0JNYXBwaW5nOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBEZWx0YVNldEluZGV4TWFwKVxufSk7XG52YXIgU2lnbmF0dXJlID0gbmV3IHIuU3RydWN0KHtcbiAgZm9ybWF0OiByLnVpbnQzMixcbiAgbGVuZ3RoOiByLnVpbnQzMixcbiAgb2Zmc2V0OiByLnVpbnQzMlxufSk7XG52YXIgU2lnbmF0dXJlQmxvY2sgPSBuZXcgci5TdHJ1Y3Qoe1xuICByZXNlcnZlZDogbmV3IHIuUmVzZXJ2ZWQoci51aW50MTYsIDIpLFxuICBjYlNpZ25hdHVyZTogci51aW50MzIsXG4gIC8vIExlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSBQS0NTIzcgcGFja2V0IGluIHBiU2lnbmF0dXJlXG4gIHNpZ25hdHVyZTogbmV3IHIuQnVmZmVyKCdjYlNpZ25hdHVyZScpXG59KTtcbnZhciBEU0lHID0gbmV3IHIuU3RydWN0KHtcbiAgdWxWZXJzaW9uOiByLnVpbnQzMixcbiAgLy8gVmVyc2lvbiBudW1iZXIgb2YgdGhlIERTSUcgdGFibGUgKDB4MDAwMDAwMDEpXG4gIHVzTnVtU2lnczogci51aW50MTYsXG4gIC8vIE51bWJlciBvZiBzaWduYXR1cmVzIGluIHRoZSB0YWJsZVxuICB1c0ZsYWc6IHIudWludDE2LFxuICAvLyBQZXJtaXNzaW9uIGZsYWdzXG4gIHNpZ25hdHVyZXM6IG5ldyByLkFycmF5KFNpZ25hdHVyZSwgJ3VzTnVtU2lncycpLFxuICBzaWduYXR1cmVCbG9ja3M6IG5ldyByLkFycmF5KFNpZ25hdHVyZUJsb2NrLCAndXNOdW1TaWdzJylcbn0pO1xudmFyIEdhc3BSYW5nZSA9IG5ldyByLlN0cnVjdCh7XG4gIHJhbmdlTWF4UFBFTTogci51aW50MTYsXG4gIC8vIFVwcGVyIGxpbWl0IG9mIHJhbmdlLCBpbiBwcGVtXG4gIHJhbmdlR2FzcEJlaGF2aW9yOiBuZXcgci5CaXRmaWVsZChyLnVpbnQxNiwgWy8vIEZsYWdzIGRlc2NyaWJpbmcgZGVzaXJlZCByYXN0ZXJpemVyIGJlaGF2aW9yXG4gICdncmF5c2NhbGUnLCAnZ3JpZGZpdCcsICdzeW1tZXRyaWNTbW9vdGhpbmcnLCAnc3ltbWV0cmljR3JpZGZpdCcgLy8gb25seSBpbiB2ZXJzaW9uIDEsIGZvciBDbGVhclR5cGVcbiAgXSlcbn0pO1xudmFyIGdhc3AgPSBuZXcgci5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiByLnVpbnQxNixcbiAgLy8gc2V0IHRvIDBcbiAgbnVtUmFuZ2VzOiByLnVpbnQxNixcbiAgZ2FzcFJhbmdlczogbmV3IHIuQXJyYXkoR2FzcFJhbmdlLCAnbnVtUmFuZ2VzJykgLy8gU29ydGVkIGJ5IHBwZW1cblxufSk7XG52YXIgRGV2aWNlUmVjb3JkID0gbmV3IHIuU3RydWN0KHtcbiAgcGl4ZWxTaXplOiByLnVpbnQ4LFxuICBtYXhpbXVtV2lkdGg6IHIudWludDgsXG4gIHdpZHRoczogbmV3IHIuQXJyYXkoci51aW50OCwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5wYXJlbnQucGFyZW50Lm1heHAubnVtR2x5cGhzO1xuICB9KVxufSk7IC8vIFRoZSBIb3Jpem9udGFsIERldmljZSBNZXRyaWNzIHRhYmxlIHN0b3JlcyBpbnRlZ2VyIGFkdmFuY2Ugd2lkdGhzIHNjYWxlZCB0byBwYXJ0aWN1bGFyIHBpeGVsIHNpemVzXG5cbnZhciBoZG14ID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci51aW50MTYsXG4gIG51bVJlY29yZHM6IHIuaW50MTYsXG4gIHNpemVEZXZpY2VSZWNvcmQ6IHIuaW50MzIsXG4gIHJlY29yZHM6IG5ldyByLkFycmF5KERldmljZVJlY29yZCwgJ251bVJlY29yZHMnKVxufSk7XG52YXIgS2VyblBhaXIgPSBuZXcgci5TdHJ1Y3Qoe1xuICBsZWZ0OiByLnVpbnQxNixcbiAgcmlnaHQ6IHIudWludDE2LFxuICB2YWx1ZTogci5pbnQxNlxufSk7XG52YXIgQ2xhc3NUYWJsZSA9IG5ldyByLlN0cnVjdCh7XG4gIGZpcnN0R2x5cGg6IHIudWludDE2LFxuICBuR2x5cGhzOiByLnVpbnQxNixcbiAgb2Zmc2V0czogbmV3IHIuQXJyYXkoci51aW50MTYsICduR2x5cGhzJyksXG4gIG1heDogZnVuY3Rpb24gbWF4KHQpIHtcbiAgICByZXR1cm4gdC5vZmZzZXRzLmxlbmd0aCAmJiBNYXRoLm1heC5hcHBseShNYXRoLCB0Lm9mZnNldHMpO1xuICB9XG59KTtcbnZhciBLZXJuMkFycmF5ID0gbmV3IHIuU3RydWN0KHtcbiAgb2ZmOiBmdW5jdGlvbiBvZmYodCkge1xuICAgIHJldHVybiB0Ll9zdGFydE9mZnNldCAtIHQucGFyZW50LnBhcmVudC5fc3RhcnRPZmZzZXQ7XG4gIH0sXG4gIGxlbjogZnVuY3Rpb24gbGVuKHQpIHtcbiAgICByZXR1cm4gKCh0LnBhcmVudC5sZWZ0VGFibGUubWF4IC0gdC5vZmYpIC8gdC5wYXJlbnQucm93V2lkdGggKyAxKSAqICh0LnBhcmVudC5yb3dXaWR0aCAvIDIpO1xuICB9LFxuICB2YWx1ZXM6IG5ldyByLkxhenlBcnJheShyLmludDE2LCAnbGVuJylcbn0pO1xudmFyIEtlcm5TdWJ0YWJsZSA9IG5ldyByLlZlcnNpb25lZFN0cnVjdCgnZm9ybWF0Jywge1xuICAwOiB7XG4gICAgblBhaXJzOiByLnVpbnQxNixcbiAgICBzZWFyY2hSYW5nZTogci51aW50MTYsXG4gICAgZW50cnlTZWxlY3Rvcjogci51aW50MTYsXG4gICAgcmFuZ2VTaGlmdDogci51aW50MTYsXG4gICAgcGFpcnM6IG5ldyByLkFycmF5KEtlcm5QYWlyLCAnblBhaXJzJylcbiAgfSxcbiAgMjoge1xuICAgIHJvd1dpZHRoOiByLnVpbnQxNixcbiAgICBsZWZ0VGFibGU6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENsYXNzVGFibGUsIHtcbiAgICAgIHR5cGU6ICdwYXJlbnQnXG4gICAgfSksXG4gICAgcmlnaHRUYWJsZTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgQ2xhc3NUYWJsZSwge1xuICAgICAgdHlwZTogJ3BhcmVudCdcbiAgICB9KSxcbiAgICBhcnJheTogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgS2VybjJBcnJheSwge1xuICAgICAgdHlwZTogJ3BhcmVudCdcbiAgICB9KVxuICB9LFxuICAzOiB7XG4gICAgZ2x5cGhDb3VudDogci51aW50MTYsXG4gICAga2VyblZhbHVlQ291bnQ6IHIudWludDgsXG4gICAgbGVmdENsYXNzQ291bnQ6IHIudWludDgsXG4gICAgcmlnaHRDbGFzc0NvdW50OiByLnVpbnQ4LFxuICAgIGZsYWdzOiByLnVpbnQ4LFxuICAgIGtlcm5WYWx1ZTogbmV3IHIuQXJyYXkoci5pbnQxNiwgJ2tlcm5WYWx1ZUNvdW50JyksXG4gICAgbGVmdENsYXNzOiBuZXcgci5BcnJheShyLnVpbnQ4LCAnZ2x5cGhDb3VudCcpLFxuICAgIHJpZ2h0Q2xhc3M6IG5ldyByLkFycmF5KHIudWludDgsICdnbHlwaENvdW50JyksXG4gICAga2VybkluZGV4OiBuZXcgci5BcnJheShyLnVpbnQ4LCBmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQubGVmdENsYXNzQ291bnQgKiB0LnJpZ2h0Q2xhc3NDb3VudDtcbiAgICB9KVxuICB9XG59KTtcbnZhciBLZXJuVGFibGUgPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3QoJ3ZlcnNpb24nLCB7XG4gIDA6IHtcbiAgICAvLyBNaWNyb3NvZnQgdXNlcyB0aGlzIGZvcm1hdFxuICAgIHN1YlZlcnNpb246IHIudWludDE2LFxuICAgIC8vIE1pY3Jvc29mdCBoYXMgYW4gZXh0cmEgc3ViLXRhYmxlIHZlcnNpb24gbnVtYmVyXG4gICAgbGVuZ3RoOiByLnVpbnQxNixcbiAgICAvLyBMZW5ndGggb2YgdGhlIHN1YnRhYmxlLCBpbiBieXRlc1xuICAgIGZvcm1hdDogci51aW50OCxcbiAgICAvLyBGb3JtYXQgb2Ygc3VidGFibGVcbiAgICBjb3ZlcmFnZTogbmV3IHIuQml0ZmllbGQoci51aW50OCwgWydob3Jpem9udGFsJywgLy8gMSBpZiB0YWJsZSBoYXMgaG9yaXpvbnRhbCBkYXRhLCAwIGlmIHZlcnRpY2FsXG4gICAgJ21pbmltdW0nLCAvLyBJZiBzZXQgdG8gMSwgdGhlIHRhYmxlIGhhcyBtaW5pbXVtIHZhbHVlcy4gSWYgc2V0IHRvIDAsIHRoZSB0YWJsZSBoYXMga2VybmluZyB2YWx1ZXMuXG4gICAgJ2Nyb3NzU3RyZWFtJywgLy8gSWYgc2V0IHRvIDEsIGtlcm5pbmcgaXMgcGVycGVuZGljdWxhciB0byB0aGUgZmxvdyBvZiB0aGUgdGV4dFxuICAgICdvdmVycmlkZScgLy8gSWYgc2V0IHRvIDEgdGhlIHZhbHVlIGluIHRoaXMgdGFibGUgcmVwbGFjZXMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlXG4gICAgXSksXG4gICAgc3VidGFibGU6IEtlcm5TdWJ0YWJsZSxcbiAgICBwYWRkaW5nOiBuZXcgci5SZXNlcnZlZChyLnVpbnQ4LCBmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQubGVuZ3RoIC0gdC5fY3VycmVudE9mZnNldDtcbiAgICB9KVxuICB9LFxuICAxOiB7XG4gICAgLy8gQXBwbGUgdXNlcyB0aGlzIGZvcm1hdFxuICAgIGxlbmd0aDogci51aW50MzIsXG4gICAgY292ZXJhZ2U6IG5ldyByLkJpdGZpZWxkKHIudWludDgsIFtudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAndmFyaWF0aW9uJywgLy8gU2V0IGlmIHRhYmxlIGhhcyB2YXJpYXRpb24ga2VybmluZyB2YWx1ZXNcbiAgICAnY3Jvc3NTdHJlYW0nLCAvLyBTZXQgaWYgdGFibGUgaGFzIGNyb3NzLXN0cmVhbSBrZXJuaW5nIHZhbHVlc1xuICAgICd2ZXJ0aWNhbCcgLy8gU2V0IGlmIHRhYmxlIGhhcyB2ZXJ0aWNhbCBrZXJuaW5nIHZhbHVlc1xuICAgIF0pLFxuICAgIGZvcm1hdDogci51aW50OCxcbiAgICB0dXBsZUluZGV4OiByLnVpbnQxNixcbiAgICBzdWJ0YWJsZTogS2VyblN1YnRhYmxlLFxuICAgIHBhZGRpbmc6IG5ldyByLlJlc2VydmVkKHIudWludDgsIGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5sZW5ndGggLSB0Ll9jdXJyZW50T2Zmc2V0O1xuICAgIH0pXG4gIH1cbn0pO1xudmFyIGtlcm4gPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3Qoci51aW50MTYsIHtcbiAgMDoge1xuICAgIC8vIE1pY3Jvc29mdCBWZXJzaW9uXG4gICAgblRhYmxlczogci51aW50MTYsXG4gICAgdGFibGVzOiBuZXcgci5BcnJheShLZXJuVGFibGUsICduVGFibGVzJylcbiAgfSxcbiAgMToge1xuICAgIC8vIEFwcGxlIFZlcnNpb25cbiAgICByZXNlcnZlZDogbmV3IHIuUmVzZXJ2ZWQoci51aW50MTYpLFxuICAgIC8vIHRoZSBvdGhlciBoYWxmIG9mIHRoZSB2ZXJzaW9uIG51bWJlclxuICAgIG5UYWJsZXM6IHIudWludDMyLFxuICAgIHRhYmxlczogbmV3IHIuQXJyYXkoS2VyblRhYmxlLCAnblRhYmxlcycpXG4gIH1cbn0pOyAvLyBSZWNvcmRzIHRoZSBwcGVtIGZvciBlYWNoIGdseXBoIGF0IHdoaWNoIHRoZSBzY2FsaW5nIGJlY29tZXMgbGluZWFyIGFnYWluLFxuLy8gZGVzcGl0ZSBpbnN0cnVjdGlvbnMgZWZmZWN0aW5nIHRoZSBhZHZhbmNlIHdpZHRoXG5cbnZhciBMVFNIID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci51aW50MTYsXG4gIG51bUdseXBoczogci51aW50MTYsXG4gIHlQZWxzOiBuZXcgci5BcnJheShyLnVpbnQ4LCAnbnVtR2x5cGhzJylcbn0pOyAvLyBOT1RFOiBUaGUgUENMVCB0YWJsZSBpcyBzdHJvbmdseSBkaXNjb3VyYWdlZCBmb3IgT3BlblR5cGUgZm9udHMgd2l0aCBUcnVlVHlwZSBvdXRsaW5lc1xuXG52YXIgUENMVCA9IG5ldyByLlN0cnVjdCh7XG4gIHZlcnNpb246IHIudWludDE2LFxuICBmb250TnVtYmVyOiByLnVpbnQzMixcbiAgcGl0Y2g6IHIudWludDE2LFxuICB4SGVpZ2h0OiByLnVpbnQxNixcbiAgc3R5bGU6IHIudWludDE2LFxuICB0eXBlRmFtaWx5OiByLnVpbnQxNixcbiAgY2FwSGVpZ2h0OiByLnVpbnQxNixcbiAgc3ltYm9sU2V0OiByLnVpbnQxNixcbiAgdHlwZWZhY2U6IG5ldyByLlN0cmluZygxNiksXG4gIGNoYXJhY3RlckNvbXBsZW1lbnQ6IG5ldyByLlN0cmluZyg4KSxcbiAgZmlsZU5hbWU6IG5ldyByLlN0cmluZyg2KSxcbiAgc3Ryb2tlV2VpZ2h0OiBuZXcgci5TdHJpbmcoMSksXG4gIHdpZHRoVHlwZTogbmV3IHIuU3RyaW5nKDEpLFxuICBzZXJpZlN0eWxlOiByLnVpbnQ4LFxuICByZXNlcnZlZDogbmV3IHIuUmVzZXJ2ZWQoci51aW50OClcbn0pOyAvLyBzaXplcy4gVGhpcyBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbWF0Y2ggZm9udCBtZXRyaWNzIG9uIFdpbmRvd3MuXG5cbnZhciBSYXRpbyA9IG5ldyByLlN0cnVjdCh7XG4gIGJDaGFyU2V0OiByLnVpbnQ4LFxuICAvLyBDaGFyYWN0ZXIgc2V0XG4gIHhSYXRpbzogci51aW50OCxcbiAgLy8gVmFsdWUgdG8gdXNlIGZvciB4LVJhdGlvXG4gIHlTdGFydFJhdGlvOiByLnVpbnQ4LFxuICAvLyBTdGFydGluZyB5LVJhdGlvIHZhbHVlXG4gIHlFbmRSYXRpbzogci51aW50OCAvLyBFbmRpbmcgeS1SYXRpbyB2YWx1ZVxuXG59KTtcbnZhciB2VGFibGUgPSBuZXcgci5TdHJ1Y3Qoe1xuICB5UGVsSGVpZ2h0OiByLnVpbnQxNixcbiAgLy8geVBlbEhlaWdodCB0byB3aGljaCB2YWx1ZXMgYXBwbHlcbiAgeU1heDogci5pbnQxNixcbiAgLy8gTWF4aW11bSB2YWx1ZSAoaW4gcGVscykgZm9yIHRoaXMgeVBlbEhlaWdodFxuICB5TWluOiByLmludDE2IC8vIE1pbmltdW0gdmFsdWUgKGluIHBlbHMpIGZvciB0aGlzIHlQZWxIZWlnaHRcblxufSk7XG52YXIgVmRteEdyb3VwID0gbmV3IHIuU3RydWN0KHtcbiAgcmVjczogci51aW50MTYsXG4gIC8vIE51bWJlciBvZiBoZWlnaHQgcmVjb3JkcyBpbiB0aGlzIGdyb3VwXG4gIHN0YXJ0c3o6IHIudWludDgsXG4gIC8vIFN0YXJ0aW5nIHlQZWxIZWlnaHRcbiAgZW5kc3o6IHIudWludDgsXG4gIC8vIEVuZGluZyB5UGVsSGVpZ2h0XG4gIGVudHJpZXM6IG5ldyByLkFycmF5KHZUYWJsZSwgJ3JlY3MnKSAvLyBUaGUgVkRNWCByZWNvcmRzXG5cbn0pO1xudmFyIFZETVggPSBuZXcgci5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiByLnVpbnQxNixcbiAgLy8gVmVyc2lvbiBudW1iZXIgKDAgb3IgMSlcbiAgbnVtUmVjczogci51aW50MTYsXG4gIC8vIE51bWJlciBvZiBWRE1YIGdyb3VwcyBwcmVzZW50XG4gIG51bVJhdGlvczogci51aW50MTYsXG4gIC8vIE51bWJlciBvZiBhc3BlY3QgcmF0aW8gZ3JvdXBpbmdzXG4gIHJhdGlvUmFuZ2VzOiBuZXcgci5BcnJheShSYXRpbywgJ251bVJhdGlvcycpLFxuICAvLyBSYXRpbyByYW5nZXNcbiAgb2Zmc2V0czogbmV3IHIuQXJyYXkoci51aW50MTYsICdudW1SYXRpb3MnKSxcbiAgLy8gT2Zmc2V0IHRvIHRoZSBWRE1YIGdyb3VwIGZvciB0aGlzIHJhdGlvIHJhbmdlXG4gIGdyb3VwczogbmV3IHIuQXJyYXkoVmRteEdyb3VwLCAnbnVtUmVjcycpIC8vIFRoZSBhY3R1YWwgVkRNWCBncm91cGluZ3NcblxufSk7XG52YXIgdmhlYSA9IG5ldyByLlN0cnVjdCh7XG4gIHZlcnNpb246IHIudWludDE2LFxuICAvLyBWZXJzaW9uIG51bWJlciBvZiB0aGUgVmVydGljYWwgSGVhZGVyIFRhYmxlXG4gIGFzY2VudDogci5pbnQxNixcbiAgLy8gVGhlIHZlcnRpY2FsIHR5cG9ncmFwaGljIGFzY2VuZGVyIGZvciB0aGlzIGZvbnRcbiAgZGVzY2VudDogci5pbnQxNixcbiAgLy8gVGhlIHZlcnRpY2FsIHR5cG9ncmFwaGljIGRlc2NlbmRlciBmb3IgdGhpcyBmb250XG4gIGxpbmVHYXA6IHIuaW50MTYsXG4gIC8vIFRoZSB2ZXJ0aWNhbCB0eXBvZ3JhcGhpYyBsaW5lIGdhcCBmb3IgdGhpcyBmb250XG4gIGFkdmFuY2VIZWlnaHRNYXg6IHIuaW50MTYsXG4gIC8vIFRoZSBtYXhpbXVtIGFkdmFuY2UgaGVpZ2h0IG1lYXN1cmVtZW50IGZvdW5kIGluIHRoZSBmb250XG4gIG1pblRvcFNpZGVCZWFyaW5nOiByLmludDE2LFxuICAvLyBUaGUgbWluaW11bSB0b3Agc2lkZSBiZWFyaW5nIG1lYXN1cmVtZW50IGZvdW5kIGluIHRoZSBmb250XG4gIG1pbkJvdHRvbVNpZGVCZWFyaW5nOiByLmludDE2LFxuICAvLyBUaGUgbWluaW11bSBib3R0b20gc2lkZSBiZWFyaW5nIG1lYXN1cmVtZW50IGZvdW5kIGluIHRoZSBmb250XG4gIHlNYXhFeHRlbnQ6IHIuaW50MTYsXG4gIGNhcmV0U2xvcGVSaXNlOiByLmludDE2LFxuICAvLyBDYXJldCBzbG9wZSAocmlzZS9ydW4pXG4gIGNhcmV0U2xvcGVSdW46IHIuaW50MTYsXG4gIGNhcmV0T2Zmc2V0OiByLmludDE2LFxuICAvLyBTZXQgdmFsdWUgZXF1YWwgdG8gMCBmb3Igbm9uc2xhbnRlZCBmb250c1xuICByZXNlcnZlZDogbmV3IHIuUmVzZXJ2ZWQoci5pbnQxNiwgNCksXG4gIG1ldHJpY0RhdGFGb3JtYXQ6IHIuaW50MTYsXG4gIC8vIFNldCB0byAwXG4gIG51bWJlck9mTWV0cmljczogci51aW50MTYgLy8gTnVtYmVyIG9mIGFkdmFuY2UgaGVpZ2h0cyBpbiB0aGUgVmVydGljYWwgTWV0cmljcyB0YWJsZVxuXG59KTtcbnZhciBWbXR4RW50cnkgPSBuZXcgci5TdHJ1Y3Qoe1xuICBhZHZhbmNlOiByLnVpbnQxNixcbiAgLy8gVGhlIGFkdmFuY2UgaGVpZ2h0IG9mIHRoZSBnbHlwaFxuICBiZWFyaW5nOiByLmludDE2IC8vIFRoZSB0b3Agc2lkZWJlYXJpbmcgb2YgdGhlIGdseXBoXG5cbn0pOyAvLyBWZXJ0aWNhbCBNZXRyaWNzIFRhYmxlXG5cbnZhciB2bXR4ID0gbmV3IHIuU3RydWN0KHtcbiAgbWV0cmljczogbmV3IHIuTGF6eUFycmF5KFZtdHhFbnRyeSwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5wYXJlbnQudmhlYS5udW1iZXJPZk1ldHJpY3M7XG4gIH0pLFxuICBiZWFyaW5nczogbmV3IHIuTGF6eUFycmF5KHIuaW50MTYsIGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHQucGFyZW50Lm1heHAubnVtR2x5cGhzIC0gdC5wYXJlbnQudmhlYS5udW1iZXJPZk1ldHJpY3M7XG4gIH0pXG59KTtcbnZhciBzaG9ydEZyYWMgPSBuZXcgci5GaXhlZCgxNiwgJ0JFJywgMTQpO1xudmFyIENvcnJlc3BvbmRlbmNlID0gbmV3IHIuU3RydWN0KHtcbiAgZnJvbUNvb3JkOiBzaG9ydEZyYWMsXG4gIHRvQ29vcmQ6IHNob3J0RnJhY1xufSk7XG52YXIgU2VnbWVudCA9IG5ldyByLlN0cnVjdCh7XG4gIHBhaXJDb3VudDogci51aW50MTYsXG4gIGNvcnJlc3BvbmRlbmNlOiBuZXcgci5BcnJheShDb3JyZXNwb25kZW5jZSwgJ3BhaXJDb3VudCcpXG59KTtcbnZhciBhdmFyID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci5maXhlZDMyLFxuICBheGlzQ291bnQ6IHIudWludDMyLFxuICBzZWdtZW50OiBuZXcgci5BcnJheShTZWdtZW50LCAnYXhpc0NvdW50Jylcbn0pO1xuXG52YXIgVW5ib3VuZGVkQXJyYXlBY2Nlc3NvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFVuYm91bmRlZEFycmF5QWNjZXNzb3IodHlwZSwgc3RyZWFtLCBwYXJlbnQpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMuYmFzZSA9IHRoaXMuc3RyZWFtLnBvcztcbiAgICB0aGlzLl9pdGVtcyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90bzEyID0gVW5ib3VuZGVkQXJyYXlBY2Nlc3Nvci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMTIuZ2V0SXRlbSA9IGZ1bmN0aW9uIGdldEl0ZW0oaW5kZXgpIHtcbiAgICBpZiAodGhpcy5faXRlbXNbaW5kZXhdID09IG51bGwpIHtcbiAgICAgIHZhciBwb3MgPSB0aGlzLnN0cmVhbS5wb3M7XG4gICAgICB0aGlzLnN0cmVhbS5wb3MgPSB0aGlzLmJhc2UgKyB0aGlzLnR5cGUuc2l6ZShudWxsLCB0aGlzLnBhcmVudCkgKiBpbmRleDtcbiAgICAgIHRoaXMuX2l0ZW1zW2luZGV4XSA9IHRoaXMudHlwZS5kZWNvZGUodGhpcy5zdHJlYW0sIHRoaXMucGFyZW50KTtcbiAgICAgIHRoaXMuc3RyZWFtLnBvcyA9IHBvcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faXRlbXNbaW5kZXhdO1xuICB9O1xuXG4gIF9wcm90bzEyLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICAgIHJldHVybiBcIltVbmJvdW5kZWRBcnJheSBcIi5jb25jYXQodGhpcy50eXBlLmNvbnN0cnVjdG9yLm5hbWUsIFwiXVwiKTtcbiAgfTtcblxuICByZXR1cm4gVW5ib3VuZGVkQXJyYXlBY2Nlc3Nvcjtcbn0oKTtcblxudmFyIFVuYm91bmRlZEFycmF5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfciRBcnJheTIpIHtcbiAgX2luaGVyaXRzTG9vc2UoVW5ib3VuZGVkQXJyYXksIF9yJEFycmF5Mik7XG5cbiAgZnVuY3Rpb24gVW5ib3VuZGVkQXJyYXkodHlwZSkge1xuICAgIHJldHVybiBfciRBcnJheTIuY2FsbCh0aGlzLCB0eXBlLCAwKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90bzEzID0gVW5ib3VuZGVkQXJyYXkucHJvdG90eXBlO1xuXG4gIF9wcm90bzEzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCkge1xuICAgIHJldHVybiBuZXcgVW5ib3VuZGVkQXJyYXlBY2Nlc3Nvcih0aGlzLnR5cGUsIHN0cmVhbSwgcGFyZW50KTtcbiAgfTtcblxuICByZXR1cm4gVW5ib3VuZGVkQXJyYXk7XG59KHIuQXJyYXkpO1xuXG52YXIgTG9va3VwVGFibGUgPSBmdW5jdGlvbiBMb29rdXBUYWJsZShWYWx1ZVR5cGUpIHtcbiAgaWYgKFZhbHVlVHlwZSA9PT0gdm9pZCAwKSB7XG4gICAgVmFsdWVUeXBlID0gci51aW50MTY7XG4gIH1cblxuICAvLyBIZWxwZXIgY2xhc3MgdGhhdCBtYWtlcyBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGludmlzaWJsZSB0byBwb2ludGVyc1xuICB2YXIgU2hhZG93ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTaGFkb3codHlwZSkge1xuICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgX3Byb3RvMTQgPSBTaGFkb3cucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvMTQuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSwgY3R4KSB7XG4gICAgICBjdHggPSBjdHgucGFyZW50LnBhcmVudDtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUuZGVjb2RlKHN0cmVhbSwgY3R4KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvMTQuc2l6ZSA9IGZ1bmN0aW9uIHNpemUodmFsLCBjdHgpIHtcbiAgICAgIGN0eCA9IGN0eC5wYXJlbnQucGFyZW50O1xuICAgICAgcmV0dXJuIHRoaXMudHlwZS5zaXplKHZhbCwgY3R4KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvMTQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0cmVhbSwgdmFsLCBjdHgpIHtcbiAgICAgIGN0eCA9IGN0eC5wYXJlbnQucGFyZW50O1xuICAgICAgcmV0dXJuIHRoaXMudHlwZS5lbmNvZGUoc3RyZWFtLCB2YWwsIGN0eCk7XG4gICAgfTtcblxuICAgIHJldHVybiBTaGFkb3c7XG4gIH0oKTtcblxuICBWYWx1ZVR5cGUgPSBuZXcgU2hhZG93KFZhbHVlVHlwZSk7XG4gIHZhciBCaW5hcnlTZWFyY2hIZWFkZXIgPSBuZXcgci5TdHJ1Y3Qoe1xuICAgIHVuaXRTaXplOiByLnVpbnQxNixcbiAgICBuVW5pdHM6IHIudWludDE2LFxuICAgIHNlYXJjaFJhbmdlOiByLnVpbnQxNixcbiAgICBlbnRyeVNlbGVjdG9yOiByLnVpbnQxNixcbiAgICByYW5nZVNoaWZ0OiByLnVpbnQxNlxuICB9KTtcbiAgdmFyIExvb2t1cFNlZ21lbnRTaW5nbGUgPSBuZXcgci5TdHJ1Y3Qoe1xuICAgIGxhc3RHbHlwaDogci51aW50MTYsXG4gICAgZmlyc3RHbHlwaDogci51aW50MTYsXG4gICAgdmFsdWU6IFZhbHVlVHlwZVxuICB9KTtcbiAgdmFyIExvb2t1cFNlZ21lbnRBcnJheSA9IG5ldyByLlN0cnVjdCh7XG4gICAgbGFzdEdseXBoOiByLnVpbnQxNixcbiAgICBmaXJzdEdseXBoOiByLnVpbnQxNixcbiAgICB2YWx1ZXM6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIG5ldyByLkFycmF5KFZhbHVlVHlwZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0Lmxhc3RHbHlwaCAtIHQuZmlyc3RHbHlwaCArIDE7XG4gICAgfSksIHtcbiAgICAgIHR5cGU6ICdwYXJlbnQnXG4gICAgfSlcbiAgfSk7XG4gIHZhciBMb29rdXBTaW5nbGUgPSBuZXcgci5TdHJ1Y3Qoe1xuICAgIGdseXBoOiByLnVpbnQxNixcbiAgICB2YWx1ZTogVmFsdWVUeXBlXG4gIH0pO1xuICByZXR1cm4gbmV3IHIuVmVyc2lvbmVkU3RydWN0KHIudWludDE2LCB7XG4gICAgMDoge1xuICAgICAgdmFsdWVzOiBuZXcgVW5ib3VuZGVkQXJyYXkoVmFsdWVUeXBlKSAvLyBsZW5ndGggPT0gbnVtYmVyIG9mIGdseXBocyBtYXliZT9cblxuICAgIH0sXG4gICAgMjoge1xuICAgICAgYmluYXJ5U2VhcmNoSGVhZGVyOiBCaW5hcnlTZWFyY2hIZWFkZXIsXG4gICAgICBzZWdtZW50czogbmV3IHIuQXJyYXkoTG9va3VwU2VnbWVudFNpbmdsZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQuYmluYXJ5U2VhcmNoSGVhZGVyLm5Vbml0cztcbiAgICAgIH0pXG4gICAgfSxcbiAgICA0OiB7XG4gICAgICBiaW5hcnlTZWFyY2hIZWFkZXI6IEJpbmFyeVNlYXJjaEhlYWRlcixcbiAgICAgIHNlZ21lbnRzOiBuZXcgci5BcnJheShMb29rdXBTZWdtZW50QXJyYXksIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0LmJpbmFyeVNlYXJjaEhlYWRlci5uVW5pdHM7XG4gICAgICB9KVxuICAgIH0sXG4gICAgNjoge1xuICAgICAgYmluYXJ5U2VhcmNoSGVhZGVyOiBCaW5hcnlTZWFyY2hIZWFkZXIsXG4gICAgICBzZWdtZW50czogbmV3IHIuQXJyYXkoTG9va3VwU2luZ2xlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdC5iaW5hcnlTZWFyY2hIZWFkZXIublVuaXRzO1xuICAgICAgfSlcbiAgICB9LFxuICAgIDg6IHtcbiAgICAgIGZpcnN0R2x5cGg6IHIudWludDE2LFxuICAgICAgY291bnQ6IHIudWludDE2LFxuICAgICAgdmFsdWVzOiBuZXcgci5BcnJheShWYWx1ZVR5cGUsICdjb3VudCcpXG4gICAgfVxuICB9KTtcbn07XG5cbmZ1bmN0aW9uIFN0YXRlVGFibGUoZW50cnlEYXRhLCBsb29rdXBUeXBlKSB7XG4gIGlmIChlbnRyeURhdGEgPT09IHZvaWQgMCkge1xuICAgIGVudHJ5RGF0YSA9IHt9O1xuICB9XG5cbiAgaWYgKGxvb2t1cFR5cGUgPT09IHZvaWQgMCkge1xuICAgIGxvb2t1cFR5cGUgPSByLnVpbnQxNjtcbiAgfVxuXG4gIHZhciBlbnRyeSA9IE9iamVjdC5hc3NpZ24oe1xuICAgIG5ld1N0YXRlOiByLnVpbnQxNixcbiAgICBmbGFnczogci51aW50MTZcbiAgfSwgZW50cnlEYXRhKTtcbiAgdmFyIEVudHJ5ID0gbmV3IHIuU3RydWN0KGVudHJ5KTtcbiAgdmFyIFN0YXRlQXJyYXkgPSBuZXcgVW5ib3VuZGVkQXJyYXkobmV3IHIuQXJyYXkoci51aW50MTYsIGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHQubkNsYXNzZXM7XG4gIH0pKTtcbiAgdmFyIFN0YXRlSGVhZGVyID0gbmV3IHIuU3RydWN0KHtcbiAgICBuQ2xhc3Nlczogci51aW50MzIsXG4gICAgY2xhc3NUYWJsZTogbmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgbmV3IExvb2t1cFRhYmxlKGxvb2t1cFR5cGUpKSxcbiAgICBzdGF0ZUFycmF5OiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBTdGF0ZUFycmF5KSxcbiAgICBlbnRyeVRhYmxlOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBuZXcgVW5ib3VuZGVkQXJyYXkoRW50cnkpKVxuICB9KTtcbiAgcmV0dXJuIFN0YXRlSGVhZGVyO1xufSAvLyBUaGlzIGlzIHRoZSBvbGQgdmVyc2lvbiBvZiB0aGUgU3RhdGVUYWJsZSBzdHJ1Y3R1cmVcblxuXG5mdW5jdGlvbiBTdGF0ZVRhYmxlMShlbnRyeURhdGEsIGxvb2t1cFR5cGUpIHtcbiAgaWYgKGVudHJ5RGF0YSA9PT0gdm9pZCAwKSB7XG4gICAgZW50cnlEYXRhID0ge307XG4gIH1cblxuICBpZiAobG9va3VwVHlwZSA9PT0gdm9pZCAwKSB7XG4gICAgbG9va3VwVHlwZSA9IHIudWludDE2O1xuICB9XG5cbiAgdmFyIENsYXNzTG9va3VwVGFibGUgPSBuZXcgci5TdHJ1Y3Qoe1xuICAgIHZlcnNpb246IGZ1bmN0aW9uIHZlcnNpb24oKSB7XG4gICAgICByZXR1cm4gODtcbiAgICB9LFxuICAgIC8vIHNpbXVsYXRlIExvb2t1cFRhYmxlXG4gICAgZmlyc3RHbHlwaDogci51aW50MTYsXG4gICAgdmFsdWVzOiBuZXcgci5BcnJheShyLnVpbnQ4LCByLnVpbnQxNilcbiAgfSk7XG4gIHZhciBlbnRyeSA9IE9iamVjdC5hc3NpZ24oe1xuICAgIG5ld1N0YXRlT2Zmc2V0OiByLnVpbnQxNixcbiAgICAvLyBjb252ZXJ0IG9mZnNldCB0byBzdGF0ZUFycmF5IGluZGV4XG4gICAgbmV3U3RhdGU6IGZ1bmN0aW9uIG5ld1N0YXRlKHQpIHtcbiAgICAgIHJldHVybiAodC5uZXdTdGF0ZU9mZnNldCAtICh0LnBhcmVudC5zdGF0ZUFycmF5LmJhc2UgLSB0LnBhcmVudC5fc3RhcnRPZmZzZXQpKSAvIHQucGFyZW50Lm5DbGFzc2VzO1xuICAgIH0sXG4gICAgZmxhZ3M6IHIudWludDE2XG4gIH0sIGVudHJ5RGF0YSk7XG4gIHZhciBFbnRyeSA9IG5ldyByLlN0cnVjdChlbnRyeSk7XG4gIHZhciBTdGF0ZUFycmF5ID0gbmV3IFVuYm91bmRlZEFycmF5KG5ldyByLkFycmF5KHIudWludDgsIGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHQubkNsYXNzZXM7XG4gIH0pKTtcbiAgdmFyIFN0YXRlSGVhZGVyMSA9IG5ldyByLlN0cnVjdCh7XG4gICAgbkNsYXNzZXM6IHIudWludDE2LFxuICAgIGNsYXNzVGFibGU6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIENsYXNzTG9va3VwVGFibGUpLFxuICAgIHN0YXRlQXJyYXk6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIFN0YXRlQXJyYXkpLFxuICAgIGVudHJ5VGFibGU6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIG5ldyBVbmJvdW5kZWRBcnJheShFbnRyeSkpXG4gIH0pO1xuICByZXR1cm4gU3RhdGVIZWFkZXIxO1xufVxuXG52YXIgQnNsblN1YnRhYmxlID0gbmV3IHIuVmVyc2lvbmVkU3RydWN0KCdmb3JtYXQnLCB7XG4gIDA6IHtcbiAgICAvLyBEaXN0YW5jZS1iYXNlZCwgbm8gbWFwcGluZ1xuICAgIGRlbHRhczogbmV3IHIuQXJyYXkoci5pbnQxNiwgMzIpXG4gIH0sXG4gIDE6IHtcbiAgICAvLyBEaXN0YW5jZS1iYXNlZCwgd2l0aCBtYXBwaW5nXG4gICAgZGVsdGFzOiBuZXcgci5BcnJheShyLmludDE2LCAzMiksXG4gICAgbWFwcGluZ0RhdGE6IG5ldyBMb29rdXBUYWJsZShyLnVpbnQxNilcbiAgfSxcbiAgMjoge1xuICAgIC8vIENvbnRyb2wgcG9pbnQtYmFzZWQsIG5vIG1hcHBpbmdcbiAgICBzdGFuZGFyZEdseXBoOiByLnVpbnQxNixcbiAgICBjb250cm9sUG9pbnRzOiBuZXcgci5BcnJheShyLnVpbnQxNiwgMzIpXG4gIH0sXG4gIDM6IHtcbiAgICAvLyBDb250cm9sIHBvaW50LWJhc2VkLCB3aXRoIG1hcHBpbmdcbiAgICBzdGFuZGFyZEdseXBoOiByLnVpbnQxNixcbiAgICBjb250cm9sUG9pbnRzOiBuZXcgci5BcnJheShyLnVpbnQxNiwgMzIpLFxuICAgIG1hcHBpbmdEYXRhOiBuZXcgTG9va3VwVGFibGUoci51aW50MTYpXG4gIH1cbn0pO1xudmFyIGJzbG4gPSBuZXcgci5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiByLmZpeGVkMzIsXG4gIGZvcm1hdDogci51aW50MTYsXG4gIGRlZmF1bHRCYXNlbGluZTogci51aW50MTYsXG4gIHN1YnRhYmxlOiBCc2xuU3VidGFibGVcbn0pO1xudmFyIFNldHRpbmcgPSBuZXcgci5TdHJ1Y3Qoe1xuICBzZXR0aW5nOiByLnVpbnQxNixcbiAgbmFtZUluZGV4OiByLmludDE2LFxuICBuYW1lOiBmdW5jdGlvbiBuYW1lKHQpIHtcbiAgICByZXR1cm4gdC5wYXJlbnQucGFyZW50LnBhcmVudC5uYW1lLnJlY29yZHMuZm9udEZlYXR1cmVzW3QubmFtZUluZGV4XTtcbiAgfVxufSk7XG52YXIgRmVhdHVyZU5hbWUgPSBuZXcgci5TdHJ1Y3Qoe1xuICBmZWF0dXJlOiByLnVpbnQxNixcbiAgblNldHRpbmdzOiByLnVpbnQxNixcbiAgc2V0dGluZ1RhYmxlOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBuZXcgci5BcnJheShTZXR0aW5nLCAnblNldHRpbmdzJyksIHtcbiAgICB0eXBlOiAncGFyZW50J1xuICB9KSxcbiAgZmVhdHVyZUZsYWdzOiBuZXcgci5CaXRmaWVsZChyLnVpbnQ4LCBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgJ2hhc0RlZmF1bHQnLCAnZXhjbHVzaXZlJ10pLFxuICBkZWZhdWx0U2V0dGluZzogci51aW50OCxcbiAgbmFtZUluZGV4OiByLmludDE2LFxuICBuYW1lOiBmdW5jdGlvbiBuYW1lKHQpIHtcbiAgICByZXR1cm4gdC5wYXJlbnQucGFyZW50Lm5hbWUucmVjb3Jkcy5mb250RmVhdHVyZXNbdC5uYW1lSW5kZXhdO1xuICB9XG59KTtcbnZhciBmZWF0ID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci5maXhlZDMyLFxuICBmZWF0dXJlTmFtZUNvdW50OiByLnVpbnQxNixcbiAgcmVzZXJ2ZWQxOiBuZXcgci5SZXNlcnZlZChyLnVpbnQxNiksXG4gIHJlc2VydmVkMjogbmV3IHIuUmVzZXJ2ZWQoci51aW50MzIpLFxuICBmZWF0dXJlTmFtZXM6IG5ldyByLkFycmF5KEZlYXR1cmVOYW1lLCAnZmVhdHVyZU5hbWVDb3VudCcpXG59KTtcbnZhciBBeGlzJDEgPSBuZXcgci5TdHJ1Y3Qoe1xuICBheGlzVGFnOiBuZXcgci5TdHJpbmcoNCksXG4gIG1pblZhbHVlOiByLmZpeGVkMzIsXG4gIGRlZmF1bHRWYWx1ZTogci5maXhlZDMyLFxuICBtYXhWYWx1ZTogci5maXhlZDMyLFxuICBmbGFnczogci51aW50MTYsXG4gIG5hbWVJRDogci51aW50MTYsXG4gIG5hbWU6IGZ1bmN0aW9uIG5hbWUodCkge1xuICAgIHJldHVybiB0LnBhcmVudC5wYXJlbnQubmFtZS5yZWNvcmRzLmZvbnRGZWF0dXJlc1t0Lm5hbWVJRF07XG4gIH1cbn0pO1xudmFyIEluc3RhbmNlID0gbmV3IHIuU3RydWN0KHtcbiAgbmFtZUlEOiByLnVpbnQxNixcbiAgbmFtZTogZnVuY3Rpb24gbmFtZSh0KSB7XG4gICAgcmV0dXJuIHQucGFyZW50LnBhcmVudC5uYW1lLnJlY29yZHMuZm9udEZlYXR1cmVzW3QubmFtZUlEXTtcbiAgfSxcbiAgZmxhZ3M6IHIudWludDE2LFxuICBjb29yZDogbmV3IHIuQXJyYXkoci5maXhlZDMyLCBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0LnBhcmVudC5heGlzQ291bnQ7XG4gIH0pLFxuICBwb3N0c2NyaXB0TmFtZUlEOiBuZXcgci5PcHRpb25hbChyLnVpbnQxNiwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5wYXJlbnQuaW5zdGFuY2VTaXplIC0gdC5fY3VycmVudE9mZnNldCA+IDA7XG4gIH0pXG59KTtcbnZhciBmdmFyID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci5maXhlZDMyLFxuICBvZmZzZXRUb0RhdGE6IHIudWludDE2LFxuICBjb3VudFNpemVQYWlyczogci51aW50MTYsXG4gIGF4aXNDb3VudDogci51aW50MTYsXG4gIGF4aXNTaXplOiByLnVpbnQxNixcbiAgaW5zdGFuY2VDb3VudDogci51aW50MTYsXG4gIGluc3RhbmNlU2l6ZTogci51aW50MTYsXG4gIGF4aXM6IG5ldyByLkFycmF5KEF4aXMkMSwgJ2F4aXNDb3VudCcpLFxuICBpbnN0YW5jZTogbmV3IHIuQXJyYXkoSW5zdGFuY2UsICdpbnN0YW5jZUNvdW50Jylcbn0pO1xudmFyIHNob3J0RnJhYyQxID0gbmV3IHIuRml4ZWQoMTYsICdCRScsIDE0KTtcblxudmFyIE9mZnNldCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE9mZnNldCgpIHt9XG5cbiAgT2Zmc2V0LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCkge1xuICAgIC8vIEluIHNob3J0IGZvcm1hdCwgb2Zmc2V0cyBhcmUgbXVsdGlwbGllZCBieSAyLlxuICAgIC8vIFRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIGRvY3VtZW50ZWQgYnkgQXBwbGUsIGJ1dCBpdFxuICAgIC8vIGlzIGltcGxlbWVudGVkIHRoaXMgd2F5IGluIEZyZWV0eXBlLlxuICAgIHJldHVybiBwYXJlbnQuZmxhZ3MgPyBzdHJlYW0ucmVhZFVJbnQzMkJFKCkgOiBzdHJlYW0ucmVhZFVJbnQxNkJFKCkgKiAyO1xuICB9O1xuXG4gIHJldHVybiBPZmZzZXQ7XG59KCk7XG5cbnZhciBndmFyID0gbmV3IHIuU3RydWN0KHtcbiAgdmVyc2lvbjogci51aW50MTYsXG4gIHJlc2VydmVkOiBuZXcgci5SZXNlcnZlZChyLnVpbnQxNiksXG4gIGF4aXNDb3VudDogci51aW50MTYsXG4gIGdsb2JhbENvb3JkQ291bnQ6IHIudWludDE2LFxuICBnbG9iYWxDb29yZHM6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIG5ldyByLkFycmF5KG5ldyByLkFycmF5KHNob3J0RnJhYyQxLCAnYXhpc0NvdW50JyksICdnbG9iYWxDb29yZENvdW50JykpLFxuICBnbHlwaENvdW50OiByLnVpbnQxNixcbiAgZmxhZ3M6IHIudWludDE2LFxuICBvZmZzZXRUb0RhdGE6IHIudWludDMyLFxuICBvZmZzZXRzOiBuZXcgci5BcnJheShuZXcgci5Qb2ludGVyKE9mZnNldCwgJ3ZvaWQnLCB7XG4gICAgcmVsYXRpdmVUbzogZnVuY3Rpb24gcmVsYXRpdmVUbyhjdHgpIHtcbiAgICAgIHJldHVybiBjdHgub2Zmc2V0VG9EYXRhO1xuICAgIH0sXG4gICAgYWxsb3dOdWxsOiBmYWxzZVxuICB9KSwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5nbHlwaENvdW50ICsgMTtcbiAgfSlcbn0pO1xudmFyIENsYXNzVGFibGUkMSA9IG5ldyByLlN0cnVjdCh7XG4gIGxlbmd0aDogci51aW50MTYsXG4gIGNvdmVyYWdlOiByLnVpbnQxNixcbiAgc3ViRmVhdHVyZUZsYWdzOiByLnVpbnQzMixcbiAgc3RhdGVUYWJsZTogbmV3IFN0YXRlVGFibGUxKClcbn0pO1xudmFyIFdpZHRoRGVsdGFSZWNvcmQgPSBuZXcgci5TdHJ1Y3Qoe1xuICBqdXN0Q2xhc3M6IHIudWludDMyLFxuICBiZWZvcmVHcm93TGltaXQ6IHIuZml4ZWQzMixcbiAgYmVmb3JlU2hyaW5rTGltaXQ6IHIuZml4ZWQzMixcbiAgYWZ0ZXJHcm93TGltaXQ6IHIuZml4ZWQzMixcbiAgYWZ0ZXJTaHJpbmtMaW1pdDogci5maXhlZDMyLFxuICBncm93RmxhZ3M6IHIudWludDE2LFxuICBzaHJpbmtGbGFnczogci51aW50MTZcbn0pO1xudmFyIFdpZHRoRGVsdGFDbHVzdGVyID0gbmV3IHIuQXJyYXkoV2lkdGhEZWx0YVJlY29yZCwgci51aW50MzIpO1xudmFyIEFjdGlvbkRhdGEgPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3QoJ2FjdGlvblR5cGUnLCB7XG4gIDA6IHtcbiAgICAvLyBEZWNvbXBvc2l0aW9uIGFjdGlvblxuICAgIGxvd2VyTGltaXQ6IHIuZml4ZWQzMixcbiAgICB1cHBlckxpbWl0OiByLmZpeGVkMzIsXG4gICAgb3JkZXI6IHIudWludDE2LFxuICAgIGdseXBoczogbmV3IHIuQXJyYXkoci51aW50MTYsIHIudWludDE2KVxuICB9LFxuICAxOiB7XG4gICAgLy8gVW5jb25kaXRpb25hbCBhZGQgZ2x5cGggYWN0aW9uXG4gICAgYWRkR2x5cGg6IHIudWludDE2XG4gIH0sXG4gIDI6IHtcbiAgICAvLyBDb25kaXRpb25hbCBhZGQgZ2x5cGggYWN0aW9uXG4gICAgc3Vic3RUaHJlc2hvbGQ6IHIuZml4ZWQzMixcbiAgICBhZGRHbHlwaDogci51aW50MTYsXG4gICAgc3Vic3RHbHlwaDogci51aW50MTZcbiAgfSxcbiAgMzoge30sXG4gIC8vIFN0cmV0Y2ggZ2x5cGggYWN0aW9uIChubyBkYXRhLCBub3Qgc3VwcG9ydGVkIGJ5IENvcmVUZXh0KVxuICA0OiB7XG4gICAgLy8gRHVjdGlsZSBnbHlwaCBhY3Rpb24gKG5vdCBzdXBwb3J0ZWQgYnkgQ29yZVRleHQpXG4gICAgdmFyaWF0aW9uQXhpczogci51aW50MzIsXG4gICAgbWluaW11bUxpbWl0OiByLmZpeGVkMzIsXG4gICAgbm9TdHJldGNoVmFsdWU6IHIuZml4ZWQzMixcbiAgICBtYXhpbXVtTGltaXQ6IHIuZml4ZWQzMlxuICB9LFxuICA1OiB7XG4gICAgLy8gUmVwZWF0ZWQgYWRkIGdseXBoIGFjdGlvblxuICAgIGZsYWdzOiByLnVpbnQxNixcbiAgICBnbHlwaDogci51aW50MTZcbiAgfVxufSk7XG52YXIgQWN0aW9uID0gbmV3IHIuU3RydWN0KHtcbiAgYWN0aW9uQ2xhc3M6IHIudWludDE2LFxuICBhY3Rpb25UeXBlOiByLnVpbnQxNixcbiAgYWN0aW9uTGVuZ3RoOiByLnVpbnQzMixcbiAgYWN0aW9uRGF0YTogQWN0aW9uRGF0YSxcbiAgcGFkZGluZzogbmV3IHIuUmVzZXJ2ZWQoci51aW50OCwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5hY3Rpb25MZW5ndGggLSB0Ll9jdXJyZW50T2Zmc2V0O1xuICB9KVxufSk7XG52YXIgUG9zdGNvbXBlbnNhdGlvbkFjdGlvbiA9IG5ldyByLkFycmF5KEFjdGlvbiwgci51aW50MzIpO1xudmFyIFBvc3RDb21wZW5zYXRpb25UYWJsZSA9IG5ldyByLlN0cnVjdCh7XG4gIGxvb2t1cFRhYmxlOiBuZXcgTG9va3VwVGFibGUobmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgUG9zdGNvbXBlbnNhdGlvbkFjdGlvbikpXG59KTtcbnZhciBKdXN0aWZpY2F0aW9uVGFibGUgPSBuZXcgci5TdHJ1Y3Qoe1xuICBjbGFzc1RhYmxlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBDbGFzc1RhYmxlJDEsIHtcbiAgICB0eXBlOiAncGFyZW50J1xuICB9KSxcbiAgd2RjT2Zmc2V0OiByLnVpbnQxNixcbiAgcG9zdENvbXBlbnNhdGlvblRhYmxlOiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBQb3N0Q29tcGVuc2F0aW9uVGFibGUsIHtcbiAgICB0eXBlOiAncGFyZW50J1xuICB9KSxcbiAgd2lkdGhEZWx0YUNsdXN0ZXJzOiBuZXcgTG9va3VwVGFibGUobmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgV2lkdGhEZWx0YUNsdXN0ZXIsIHtcbiAgICB0eXBlOiAncGFyZW50JyxcbiAgICByZWxhdGl2ZVRvOiBmdW5jdGlvbiByZWxhdGl2ZVRvKGN0eCkge1xuICAgICAgcmV0dXJuIGN0eC53ZGNPZmZzZXQ7XG4gICAgfVxuICB9KSlcbn0pO1xudmFyIGp1c3QgPSBuZXcgci5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiByLnVpbnQzMixcbiAgZm9ybWF0OiByLnVpbnQxNixcbiAgaG9yaXpvbnRhbDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgSnVzdGlmaWNhdGlvblRhYmxlKSxcbiAgdmVydGljYWw6IG5ldyByLlBvaW50ZXIoci51aW50MTYsIEp1c3RpZmljYXRpb25UYWJsZSlcbn0pO1xudmFyIExpZ2F0dXJlRGF0YSA9IHtcbiAgYWN0aW9uOiByLnVpbnQxNlxufTtcbnZhciBDb250ZXh0dWFsRGF0YSA9IHtcbiAgbWFya0luZGV4OiByLnVpbnQxNixcbiAgY3VycmVudEluZGV4OiByLnVpbnQxNlxufTtcbnZhciBJbnNlcnRpb25EYXRhID0ge1xuICBjdXJyZW50SW5zZXJ0SW5kZXg6IHIudWludDE2LFxuICBtYXJrZWRJbnNlcnRJbmRleDogci51aW50MTZcbn07XG52YXIgU3Vic3RpdHV0aW9uVGFibGUgPSBuZXcgci5TdHJ1Y3Qoe1xuICBpdGVtczogbmV3IFVuYm91bmRlZEFycmF5KG5ldyByLlBvaW50ZXIoci51aW50MzIsIG5ldyBMb29rdXBUYWJsZSgpKSlcbn0pO1xudmFyIFN1YnRhYmxlRGF0YSA9IG5ldyByLlZlcnNpb25lZFN0cnVjdCgndHlwZScsIHtcbiAgMDoge1xuICAgIC8vIEluZGljIFJlYXJyYW5nZW1lbnQgU3VidGFibGVcbiAgICBzdGF0ZVRhYmxlOiBuZXcgU3RhdGVUYWJsZSgpXG4gIH0sXG4gIDE6IHtcbiAgICAvLyBDb250ZXh0dWFsIEdseXBoIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZVxuICAgIHN0YXRlVGFibGU6IG5ldyBTdGF0ZVRhYmxlKENvbnRleHR1YWxEYXRhKSxcbiAgICBzdWJzdGl0dXRpb25UYWJsZTogbmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgU3Vic3RpdHV0aW9uVGFibGUpXG4gIH0sXG4gIDI6IHtcbiAgICAvLyBMaWdhdHVyZSBzdWJ0YWJsZVxuICAgIHN0YXRlVGFibGU6IG5ldyBTdGF0ZVRhYmxlKExpZ2F0dXJlRGF0YSksXG4gICAgbGlnYXR1cmVBY3Rpb25zOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBuZXcgVW5ib3VuZGVkQXJyYXkoci51aW50MzIpKSxcbiAgICBjb21wb25lbnRzOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBuZXcgVW5ib3VuZGVkQXJyYXkoci51aW50MTYpKSxcbiAgICBsaWdhdHVyZUxpc3Q6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIG5ldyBVbmJvdW5kZWRBcnJheShyLnVpbnQxNikpXG4gIH0sXG4gIDQ6IHtcbiAgICAvLyBOb24tY29udGV4dHVhbCBHbHlwaCBTdWJzdGl0dXRpb24gU3VidGFibGVcbiAgICBsb29rdXBUYWJsZTogbmV3IExvb2t1cFRhYmxlKClcbiAgfSxcbiAgNToge1xuICAgIC8vIEdseXBoIEluc2VydGlvbiBTdWJ0YWJsZVxuICAgIHN0YXRlVGFibGU6IG5ldyBTdGF0ZVRhYmxlKEluc2VydGlvbkRhdGEpLFxuICAgIGluc2VydGlvbkFjdGlvbnM6IG5ldyByLlBvaW50ZXIoci51aW50MzIsIG5ldyBVbmJvdW5kZWRBcnJheShyLnVpbnQxNikpXG4gIH1cbn0pO1xudmFyIFN1YnRhYmxlID0gbmV3IHIuU3RydWN0KHtcbiAgbGVuZ3RoOiByLnVpbnQzMixcbiAgY292ZXJhZ2U6IHIudWludDI0LFxuICB0eXBlOiByLnVpbnQ4LFxuICBzdWJGZWF0dXJlRmxhZ3M6IHIudWludDMyLFxuICB0YWJsZTogU3VidGFibGVEYXRhLFxuICBwYWRkaW5nOiBuZXcgci5SZXNlcnZlZChyLnVpbnQ4LCBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0Lmxlbmd0aCAtIHQuX2N1cnJlbnRPZmZzZXQ7XG4gIH0pXG59KTtcbnZhciBGZWF0dXJlRW50cnkgPSBuZXcgci5TdHJ1Y3Qoe1xuICBmZWF0dXJlVHlwZTogci51aW50MTYsXG4gIGZlYXR1cmVTZXR0aW5nOiByLnVpbnQxNixcbiAgZW5hYmxlRmxhZ3M6IHIudWludDMyLFxuICBkaXNhYmxlRmxhZ3M6IHIudWludDMyXG59KTtcbnZhciBNb3J4Q2hhaW4gPSBuZXcgci5TdHJ1Y3Qoe1xuICBkZWZhdWx0RmxhZ3M6IHIudWludDMyLFxuICBjaGFpbkxlbmd0aDogci51aW50MzIsXG4gIG5GZWF0dXJlRW50cmllczogci51aW50MzIsXG4gIG5TdWJ0YWJsZXM6IHIudWludDMyLFxuICBmZWF0dXJlczogbmV3IHIuQXJyYXkoRmVhdHVyZUVudHJ5LCAnbkZlYXR1cmVFbnRyaWVzJyksXG4gIHN1YnRhYmxlczogbmV3IHIuQXJyYXkoU3VidGFibGUsICduU3VidGFibGVzJylcbn0pO1xudmFyIG1vcnggPSBuZXcgci5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiByLnVpbnQxNixcbiAgdW51c2VkOiBuZXcgci5SZXNlcnZlZChyLnVpbnQxNiksXG4gIG5DaGFpbnM6IHIudWludDMyLFxuICBjaGFpbnM6IG5ldyByLkFycmF5KE1vcnhDaGFpbiwgJ25DaGFpbnMnKVxufSk7XG52YXIgT3B0aWNhbEJvdW5kcyA9IG5ldyByLlN0cnVjdCh7XG4gIGxlZnQ6IHIuaW50MTYsXG4gIHRvcDogci5pbnQxNixcbiAgcmlnaHQ6IHIuaW50MTYsXG4gIGJvdHRvbTogci5pbnQxNlxufSk7XG52YXIgb3BiZCA9IG5ldyByLlN0cnVjdCh7XG4gIHZlcnNpb246IHIuZml4ZWQzMixcbiAgZm9ybWF0OiByLnVpbnQxNixcbiAgbG9va3VwVGFibGU6IG5ldyBMb29rdXBUYWJsZShPcHRpY2FsQm91bmRzKVxufSk7XG52YXIgdGFibGVzID0ge307XG50YWJsZXMuY21hcCA9IGNtYXA7XG50YWJsZXMuaGVhZCA9IGhlYWQ7XG50YWJsZXMuaGhlYSA9IGhoZWE7XG50YWJsZXMuaG10eCA9IGhtdHg7XG50YWJsZXMubWF4cCA9IG1heHA7XG50YWJsZXMubmFtZSA9IE5hbWVUYWJsZTtcbnRhYmxlc1snT1MvMiddID0gT1MyO1xudGFibGVzLnBvc3QgPSBwb3N0OyAvLyBUcnVlVHlwZSBPdXRsaW5lc1xuXG50YWJsZXMuZnBnbSA9IGZwZ207XG50YWJsZXMubG9jYSA9IGxvY2E7XG50YWJsZXMucHJlcCA9IHByZXA7XG50YWJsZXNbJ2N2dCAnXSA9IGN2dDtcbnRhYmxlcy5nbHlmID0gZ2x5ZjsgLy8gUG9zdFNjcmlwdCBPdXRsaW5lc1xuXG50YWJsZXNbJ0NGRiAnXSA9IENGRkZvbnQ7XG50YWJsZXNbJ0NGRjInXSA9IENGRkZvbnQ7XG50YWJsZXMuVk9SRyA9IFZPUkc7IC8vIEJpdG1hcCBHbHlwaHNcblxudGFibGVzLkVCTEMgPSBFQkxDO1xudGFibGVzLkNCTEMgPSB0YWJsZXMuRUJMQztcbnRhYmxlcy5zYml4ID0gc2JpeDtcbnRhYmxlcy5DT0xSID0gQ09MUjtcbnRhYmxlcy5DUEFMID0gQ1BBTDsgLy8gQWR2YW5jZWQgT3BlblR5cGUgVGFibGVzXG5cbnRhYmxlcy5CQVNFID0gQkFTRTtcbnRhYmxlcy5HREVGID0gR0RFRjtcbnRhYmxlcy5HUE9TID0gR1BPUztcbnRhYmxlcy5HU1VCID0gR1NVQjtcbnRhYmxlcy5KU1RGID0gSlNURjsgLy8gT3BlblR5cGUgdmFyaWF0aW9ucyB0YWJsZXNcblxudGFibGVzLkhWQVIgPSBIVkFSOyAvLyBPdGhlciBPcGVuVHlwZSBUYWJsZXNcblxudGFibGVzLkRTSUcgPSBEU0lHO1xudGFibGVzLmdhc3AgPSBnYXNwO1xudGFibGVzLmhkbXggPSBoZG14O1xudGFibGVzLmtlcm4gPSBrZXJuO1xudGFibGVzLkxUU0ggPSBMVFNIO1xudGFibGVzLlBDTFQgPSBQQ0xUO1xudGFibGVzLlZETVggPSBWRE1YO1xudGFibGVzLnZoZWEgPSB2aGVhO1xudGFibGVzLnZtdHggPSB2bXR4OyAvLyBBcHBsZSBBZHZhbmNlZCBUeXBvZ3JhcGh5IFRhYmxlc1xuXG50YWJsZXMuYXZhciA9IGF2YXI7XG50YWJsZXMuYnNsbiA9IGJzbG47XG50YWJsZXMuZmVhdCA9IGZlYXQ7XG50YWJsZXMuZnZhciA9IGZ2YXI7XG50YWJsZXMuZ3ZhciA9IGd2YXI7XG50YWJsZXMuanVzdCA9IGp1c3Q7XG50YWJsZXMubW9yeCA9IG1vcng7XG50YWJsZXMub3BiZCA9IG9wYmQ7XG52YXIgVGFibGVFbnRyeSA9IG5ldyByLlN0cnVjdCh7XG4gIHRhZzogbmV3IHIuU3RyaW5nKDQpLFxuICBjaGVja1N1bTogci51aW50MzIsXG4gIG9mZnNldDogbmV3IHIuUG9pbnRlcihyLnVpbnQzMiwgJ3ZvaWQnLCB7XG4gICAgdHlwZTogJ2dsb2JhbCdcbiAgfSksXG4gIGxlbmd0aDogci51aW50MzJcbn0pO1xudmFyIERpcmVjdG9yeSA9IG5ldyByLlN0cnVjdCh7XG4gIHRhZzogbmV3IHIuU3RyaW5nKDQpLFxuICBudW1UYWJsZXM6IHIudWludDE2LFxuICBzZWFyY2hSYW5nZTogci51aW50MTYsXG4gIGVudHJ5U2VsZWN0b3I6IHIudWludDE2LFxuICByYW5nZVNoaWZ0OiByLnVpbnQxNixcbiAgdGFibGVzOiBuZXcgci5BcnJheShUYWJsZUVudHJ5LCAnbnVtVGFibGVzJylcbn0pO1xuXG5EaXJlY3RvcnkucHJvY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRhYmxlcyA9IHt9O1xuXG4gIGZvciAodmFyIF9pdGVyYXRvcjkgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMudGFibGVzKSwgX3N0ZXA5OyAhKF9zdGVwOSA9IF9pdGVyYXRvcjkoKSkuZG9uZTspIHtcbiAgICB2YXIgdGFibGUgPSBfc3RlcDkudmFsdWU7XG4gICAgdGFibGVzW3RhYmxlLnRhZ10gPSB0YWJsZTtcbiAgfVxuXG4gIHRoaXMudGFibGVzID0gdGFibGVzO1xufTtcblxuRGlyZWN0b3J5LnByZUVuY29kZSA9IGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgdmFyIHRhYmxlcyQxID0gW107XG5cbiAgZm9yICh2YXIgdGFnIGluIHRoaXMudGFibGVzKSB7XG4gICAgdmFyIHRhYmxlID0gdGhpcy50YWJsZXNbdGFnXTtcblxuICAgIGlmICh0YWJsZSkge1xuICAgICAgdGFibGVzJDEucHVzaCh7XG4gICAgICAgIHRhZzogdGFnLFxuICAgICAgICBjaGVja1N1bTogMCxcbiAgICAgICAgb2Zmc2V0OiBuZXcgci5Wb2lkUG9pbnRlcih0YWJsZXNbdGFnXSwgdGFibGUpLFxuICAgICAgICBsZW5ndGg6IHRhYmxlc1t0YWddLnNpemUodGFibGUpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnRhZyA9ICd0cnVlJztcbiAgdGhpcy5udW1UYWJsZXMgPSB0YWJsZXMkMS5sZW5ndGg7XG4gIHRoaXMudGFibGVzID0gdGFibGVzJDE7XG4gIHZhciBtYXhFeHBvbmVudEZvcjIgPSBNYXRoLmZsb29yKE1hdGgubG9nKHRoaXMubnVtVGFibGVzKSAvIE1hdGguTE4yKTtcbiAgdmFyIG1heFBvd2VyT2YyID0gTWF0aC5wb3coMiwgbWF4RXhwb25lbnRGb3IyKTtcbiAgdGhpcy5zZWFyY2hSYW5nZSA9IG1heFBvd2VyT2YyICogMTY7XG4gIHRoaXMuZW50cnlTZWxlY3RvciA9IE1hdGgubG9nKG1heFBvd2VyT2YyKSAvIE1hdGguTE4yO1xuICB0aGlzLnJhbmdlU2hpZnQgPSB0aGlzLm51bVRhYmxlcyAqIDE2IC0gdGhpcy5zZWFyY2hSYW5nZTtcbn07XG5cbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaChhcnIsIGNtcCkge1xuICB2YXIgbWluID0gMDtcbiAgdmFyIG1heCA9IGFyci5sZW5ndGggLSAxO1xuXG4gIHdoaWxlIChtaW4gPD0gbWF4KSB7XG4gICAgdmFyIG1pZCA9IG1pbiArIG1heCA+PiAxO1xuICAgIHZhciByZXMgPSBjbXAoYXJyW21pZF0pO1xuXG4gICAgaWYgKHJlcyA8IDApIHtcbiAgICAgIG1heCA9IG1pZCAtIDE7XG4gICAgfSBlbHNlIGlmIChyZXMgPiAwKSB7XG4gICAgICBtaW4gPSBtaWQgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gcmFuZ2UoaW5kZXgsIGVuZCkge1xuICB2YXIgcmFuZ2UgPSBbXTtcblxuICB3aGlsZSAoaW5kZXggPCBlbmQpIHtcbiAgICByYW5nZS5wdXNoKGluZGV4KyspO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufVxuXG52YXIgX2NsYXNzO1xuXG50cnkge1xuICB2YXIgaWNvbnYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5MTQpO1xufSBjYXRjaCAoZXJyKSB7fVxuXG52YXIgQ21hcFByb2Nlc3NvciA9IChfY2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDbWFwUHJvY2Vzc29yKGNtYXBUYWJsZSkge1xuICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhIFVuaWNvZGUgY21hcCBmaXJzdFxuICAgIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICAgIHRoaXMuY21hcCA9IHRoaXMuZmluZFN1YnRhYmxlKGNtYXBUYWJsZSwgWy8vIDMyLWJpdCBzdWJ0YWJsZXNcbiAgICBbMywgMTBdLCBbMCwgNl0sIFswLCA0XSwgLy8gMTYtYml0IHN1YnRhYmxlc1xuICAgIFszLCAxXSwgWzAsIDNdLCBbMCwgMl0sIFswLCAxXSwgWzAsIDBdXSk7IC8vIElmIG5vdCB1bmljb2RlIGNtYXAgd2FzIGZvdW5kLCBhbmQgaWNvbnYtbGl0ZSBpcyBpbnN0YWxsZWQsXG4gICAgLy8gdGFrZSB0aGUgZmlyc3QgdGFibGUgd2l0aCBhIHN1cHBvcnRlZCBlbmNvZGluZy5cblxuICAgIGlmICghdGhpcy5jbWFwICYmIGljb252KSB7XG4gICAgICBmb3IgKHZhciBfaXRlcmF0b3IxMCA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoY21hcFRhYmxlLnRhYmxlcyksIF9zdGVwMTA7ICEoX3N0ZXAxMCA9IF9pdGVyYXRvcjEwKCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBjbWFwID0gX3N0ZXAxMC52YWx1ZTtcbiAgICAgICAgdmFyIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoY21hcC5wbGF0Zm9ybUlELCBjbWFwLmVuY29kaW5nSUQsIGNtYXAudGFibGUubGFuZ3VhZ2UgLSAxKTtcblxuICAgICAgICBpZiAoaWNvbnYuZW5jb2RpbmdFeGlzdHMoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgdGhpcy5jbWFwID0gY21hcC50YWJsZTtcbiAgICAgICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY21hcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgYSBzdXBwb3J0ZWQgY21hcCB0YWJsZVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnV2cyA9IHRoaXMuZmluZFN1YnRhYmxlKGNtYXBUYWJsZSwgW1swLCA1XV0pO1xuXG4gICAgaWYgKHRoaXMudXZzICYmIHRoaXMudXZzLnZlcnNpb24gIT09IDE0KSB7XG4gICAgICB0aGlzLnV2cyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIF9wcm90bzE1ID0gQ21hcFByb2Nlc3Nvci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMTUuZmluZFN1YnRhYmxlID0gZnVuY3Rpb24gZmluZFN1YnRhYmxlKGNtYXBUYWJsZSwgcGFpcnMpIHtcbiAgICBmb3IgKHZhciBfaXRlcmF0b3IxMSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UocGFpcnMpLCBfc3RlcDExOyAhKF9zdGVwMTEgPSBfaXRlcmF0b3IxMSgpKS5kb25lOykge1xuICAgICAgdmFyIF9zdGVwMTEkdmFsdWUgPSBfc3RlcDExLnZhbHVlLFxuICAgICAgICAgIHBsYXRmb3JtSUQgPSBfc3RlcDExJHZhbHVlWzBdLFxuICAgICAgICAgIGVuY29kaW5nSUQgPSBfc3RlcDExJHZhbHVlWzFdO1xuXG4gICAgICBmb3IgKHZhciBfaXRlcmF0b3IxMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoY21hcFRhYmxlLnRhYmxlcyksIF9zdGVwMTI7ICEoX3N0ZXAxMiA9IF9pdGVyYXRvcjEyKCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBjbWFwID0gX3N0ZXAxMi52YWx1ZTtcblxuICAgICAgICBpZiAoY21hcC5wbGF0Zm9ybUlEID09PSBwbGF0Zm9ybUlEICYmIGNtYXAuZW5jb2RpbmdJRCA9PT0gZW5jb2RpbmdJRCkge1xuICAgICAgICAgIHJldHVybiBjbWFwLnRhYmxlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgX3Byb3RvMTUubG9va3VwID0gZnVuY3Rpb24gbG9va3VwKGNvZGVwb2ludCwgdmFyaWF0aW9uU2VsZWN0b3IpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBVbmljb2RlIGNtYXAgaW4gdGhpcyBmb250LCB3ZSBuZWVkIHRvIHJlLWVuY29kZVxuICAgIC8vIHRoZSBjb2RlcG9pbnQgaW4gdGhlIGVuY29kaW5nIHRoYXQgdGhlIGNtYXAgc3VwcG9ydHMuXG4gICAgaWYgKHRoaXMuZW5jb2RpbmcpIHtcbiAgICAgIHZhciBidWYgPSBpY29udi5lbmNvZGUoU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZXBvaW50KSwgdGhpcy5lbmNvZGluZyk7XG4gICAgICBjb2RlcG9pbnQgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb2RlcG9pbnQgPSBjb2RlcG9pbnQgPDwgOCB8IGJ1ZltpXTtcbiAgICAgIH0gLy8gT3RoZXJ3aXNlLCB0cnkgdG8gZ2V0IGEgVW5pY29kZSB2YXJpYXRpb24gc2VsZWN0b3IgZm9yIHRoaXMgY29kZXBvaW50IGlmIG9uZSBpcyBwcm92aWRlZC5cblxuICAgIH0gZWxzZSBpZiAodmFyaWF0aW9uU2VsZWN0b3IpIHtcbiAgICAgIHZhciBnaWQgPSB0aGlzLmdldFZhcmlhdGlvblNlbGVjdG9yKGNvZGVwb2ludCwgdmFyaWF0aW9uU2VsZWN0b3IpO1xuXG4gICAgICBpZiAoZ2lkKSB7XG4gICAgICAgIHJldHVybiBnaWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNtYXAgPSB0aGlzLmNtYXA7XG5cbiAgICBzd2l0Y2ggKGNtYXAudmVyc2lvbikge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gY21hcC5jb2RlTWFwLmdldChjb2RlcG9pbnQpIHx8IDA7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBtaW4gPSAwO1xuICAgICAgICAgIHZhciBtYXggPSBjbWFwLnNlZ0NvdW50IC0gMTtcblxuICAgICAgICAgIHdoaWxlIChtaW4gPD0gbWF4KSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gbWluICsgbWF4ID4+IDE7XG5cbiAgICAgICAgICAgIGlmIChjb2RlcG9pbnQgPCBjbWFwLnN0YXJ0Q29kZS5nZXQobWlkKSkge1xuICAgICAgICAgICAgICBtYXggPSBtaWQgLSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlcG9pbnQgPiBjbWFwLmVuZENvZGUuZ2V0KG1pZCkpIHtcbiAgICAgICAgICAgICAgbWluID0gbWlkICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciByYW5nZU9mZnNldCA9IGNtYXAuaWRSYW5nZU9mZnNldC5nZXQobWlkKTtcblxuICAgICAgICAgICAgICB2YXIgX2dpZCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICBpZiAocmFuZ2VPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBfZ2lkID0gY29kZXBvaW50ICsgY21hcC5pZERlbHRhLmdldChtaWQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHJhbmdlT2Zmc2V0IC8gMiArIChjb2RlcG9pbnQgLSBjbWFwLnN0YXJ0Q29kZS5nZXQobWlkKSkgLSAoY21hcC5zZWdDb3VudCAtIG1pZCk7XG4gICAgICAgICAgICAgICAgX2dpZCA9IGNtYXAuZ2x5cGhJbmRleEFycmF5LmdldChpbmRleCkgfHwgMDtcblxuICAgICAgICAgICAgICAgIGlmIChfZ2lkICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICBfZ2lkICs9IGNtYXAuaWREZWx0YS5nZXQobWlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gX2dpZCAmIDB4ZmZmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIDg6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVE9ETzogY21hcCBmb3JtYXQgOCcpO1xuXG4gICAgICBjYXNlIDY6XG4gICAgICBjYXNlIDEwOlxuICAgICAgICByZXR1cm4gY21hcC5nbHlwaEluZGljZXMuZ2V0KGNvZGVwb2ludCAtIGNtYXAuZmlyc3RDb2RlKSB8fCAwO1xuXG4gICAgICBjYXNlIDEyOlxuICAgICAgY2FzZSAxMzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfbWluID0gMDtcblxuICAgICAgICAgIHZhciBfbWF4ID0gY21hcC5uR3JvdXBzIC0gMTtcblxuICAgICAgICAgIHdoaWxlIChfbWluIDw9IF9tYXgpIHtcbiAgICAgICAgICAgIHZhciBfbWlkID0gX21pbiArIF9tYXggPj4gMTtcblxuICAgICAgICAgICAgdmFyIGdyb3VwID0gY21hcC5ncm91cHMuZ2V0KF9taWQpO1xuXG4gICAgICAgICAgICBpZiAoY29kZXBvaW50IDwgZ3JvdXAuc3RhcnRDaGFyQ29kZSkge1xuICAgICAgICAgICAgICBfbWF4ID0gX21pZCAtIDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVwb2ludCA+IGdyb3VwLmVuZENoYXJDb2RlKSB7XG4gICAgICAgICAgICAgIF9taW4gPSBfbWlkICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChjbWFwLnZlcnNpb24gPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwLmdseXBoSUQgKyAoY29kZXBvaW50IC0gZ3JvdXAuc3RhcnRDaGFyQ29kZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwLmdseXBoSUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIDE0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE86IGNtYXAgZm9ybWF0IDE0Jyk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gY21hcCBmb3JtYXQgXCIuY29uY2F0KGNtYXAudmVyc2lvbikpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8xNS5nZXRWYXJpYXRpb25TZWxlY3RvciA9IGZ1bmN0aW9uIGdldFZhcmlhdGlvblNlbGVjdG9yKGNvZGVwb2ludCwgdmFyaWF0aW9uU2VsZWN0b3IpIHtcbiAgICBpZiAoIXRoaXMudXZzKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICB2YXIgc2VsZWN0b3JzID0gdGhpcy51dnMudmFyU2VsZWN0b3JzLnRvQXJyYXkoKTtcbiAgICB2YXIgaSA9IGJpbmFyeVNlYXJjaChzZWxlY3RvcnMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gdmFyaWF0aW9uU2VsZWN0b3IgLSB4LnZhclNlbGVjdG9yO1xuICAgIH0pO1xuICAgIHZhciBzZWwgPSBzZWxlY3RvcnNbaV07XG5cbiAgICBpZiAoaSAhPT0gLTEgJiYgc2VsLmRlZmF1bHRVVlMpIHtcbiAgICAgIGkgPSBiaW5hcnlTZWFyY2goc2VsLmRlZmF1bHRVVlMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBjb2RlcG9pbnQgPCB4LnN0YXJ0VW5pY29kZVZhbHVlID8gLTEgOiBjb2RlcG9pbnQgPiB4LnN0YXJ0VW5pY29kZVZhbHVlICsgeC5hZGRpdGlvbmFsQ291bnQgPyArMSA6IDA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaSAhPT0gLTEgJiYgc2VsLm5vbkRlZmF1bHRVVlMpIHtcbiAgICAgIGkgPSBiaW5hcnlTZWFyY2goc2VsLm5vbkRlZmF1bHRVVlMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBjb2RlcG9pbnQgLSB4LnVuaWNvZGVWYWx1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHNlbC5ub25EZWZhdWx0VVZTW2ldLmdseXBoSUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgX3Byb3RvMTUuZ2V0Q2hhcmFjdGVyU2V0ID0gZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyU2V0KCkge1xuICAgIHZhciBjbWFwID0gdGhpcy5jbWFwO1xuXG4gICAgc3dpdGNoIChjbWFwLnZlcnNpb24pIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIHJhbmdlKDAsIGNtYXAuY29kZU1hcC5sZW5ndGgpO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgICAgdmFyIGVuZENvZGVzID0gY21hcC5lbmRDb2RlLnRvQXJyYXkoKTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kQ29kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB0YWlsID0gZW5kQ29kZXNbaV0gKyAxO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY21hcC5zdGFydENvZGUuZ2V0KGkpO1xuICAgICAgICAgICAgcmVzLnB1c2guYXBwbHkocmVzLCByYW5nZShzdGFydCwgdGFpbCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSA4OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE86IGNtYXAgZm9ybWF0IDgnKTtcblxuICAgICAgY2FzZSA2OlxuICAgICAgY2FzZSAxMDpcbiAgICAgICAgcmV0dXJuIHJhbmdlKGNtYXAuZmlyc3RDb2RlLCBjbWFwLmZpcnN0Q29kZSArIGNtYXAuZ2x5cGhJbmRpY2VzLmxlbmd0aCk7XG5cbiAgICAgIGNhc2UgMTI6XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9yZXMgPSBbXTtcblxuICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjEzID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShjbWFwLmdyb3Vwcy50b0FycmF5KCkpLCBfc3RlcDEzOyAhKF9zdGVwMTMgPSBfaXRlcmF0b3IxMygpKS5kb25lOykge1xuICAgICAgICAgICAgdmFyIGdyb3VwID0gX3N0ZXAxMy52YWx1ZTtcblxuICAgICAgICAgICAgX3Jlcy5wdXNoLmFwcGx5KF9yZXMsIHJhbmdlKGdyb3VwLnN0YXJ0Q2hhckNvZGUsIGdyb3VwLmVuZENoYXJDb2RlICsgMSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfcmVzO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgMTQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVE9ETzogY21hcCBmb3JtYXQgMTQnKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBjbWFwIGZvcm1hdCBcIi5jb25jYXQoY21hcC52ZXJzaW9uKSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzE1LmNvZGVQb2ludHNGb3JHbHlwaCA9IGZ1bmN0aW9uIGNvZGVQb2ludHNGb3JHbHlwaChnaWQpIHtcbiAgICB2YXIgY21hcCA9IHRoaXMuY21hcDtcblxuICAgIHN3aXRjaCAoY21hcC52ZXJzaW9uKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcmVzID0gW107XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY21hcC5jb2RlTWFwLmdldChpKSA9PT0gZ2lkKSB7XG4gICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSA0OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9yZXMyID0gW107XG5cbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgY21hcC5zZWdDb3VudDsgX2krKykge1xuICAgICAgICAgICAgdmFyIGVuZCA9IGNtYXAuZW5kQ29kZS5nZXQoX2kpO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY21hcC5zdGFydENvZGUuZ2V0KF9pKTtcbiAgICAgICAgICAgIHZhciByYW5nZU9mZnNldCA9IGNtYXAuaWRSYW5nZU9mZnNldC5nZXQoX2kpO1xuICAgICAgICAgICAgdmFyIGRlbHRhID0gY21hcC5pZERlbHRhLmdldChfaSk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGMgPSBzdGFydDsgYyA8PSBlbmQ7IGMrKykge1xuICAgICAgICAgICAgICB2YXIgZyA9IDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJhbmdlT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZyA9IGMgKyBkZWx0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSByYW5nZU9mZnNldCAvIDIgKyAoYyAtIHN0YXJ0KSAtIChjbWFwLnNlZ0NvdW50IC0gX2kpO1xuICAgICAgICAgICAgICAgIGcgPSBjbWFwLmdseXBoSW5kZXhBcnJheS5nZXQoaW5kZXgpIHx8IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAoZyAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgZyArPSBkZWx0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZyA9PT0gZ2lkKSB7XG4gICAgICAgICAgICAgICAgX3JlczIucHVzaChjKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfcmVzMjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIDEyOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9yZXMzID0gW107XG5cbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IxNCA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoY21hcC5ncm91cHMudG9BcnJheSgpKSwgX3N0ZXAxNDsgIShfc3RlcDE0ID0gX2l0ZXJhdG9yMTQoKSkuZG9uZTspIHtcbiAgICAgICAgICAgIHZhciBncm91cCA9IF9zdGVwMTQudmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChnaWQgPj0gZ3JvdXAuZ2x5cGhJRCAmJiBnaWQgPD0gZ3JvdXAuZ2x5cGhJRCArIChncm91cC5lbmRDaGFyQ29kZSAtIGdyb3VwLnN0YXJ0Q2hhckNvZGUpKSB7XG4gICAgICAgICAgICAgIF9yZXMzLnB1c2goZ3JvdXAuc3RhcnRDaGFyQ29kZSArIChnaWQgLSBncm91cC5nbHlwaElEKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF9yZXMzO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX3JlczQgPSBbXTtcblxuICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjE1ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShjbWFwLmdyb3Vwcy50b0FycmF5KCkpLCBfc3RlcDE1OyAhKF9zdGVwMTUgPSBfaXRlcmF0b3IxNSgpKS5kb25lOykge1xuICAgICAgICAgICAgdmFyIF9ncm91cCA9IF9zdGVwMTUudmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChnaWQgPT09IF9ncm91cC5nbHlwaElEKSB7XG4gICAgICAgICAgICAgIF9yZXM0LnB1c2guYXBwbHkoX3JlczQsIHJhbmdlKF9ncm91cC5zdGFydENoYXJDb2RlLCBfZ3JvdXAuZW5kQ2hhckNvZGUgKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF9yZXM0O1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gY21hcCBmb3JtYXQgXCIuY29uY2F0KGNtYXAudmVyc2lvbikpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQ21hcFByb2Nlc3Nvcjtcbn0oKSwgKF9hcHBseURlY29yYXRlZERlc2NyaXB0b3IoX2NsYXNzLnByb3RvdHlwZSwgXCJnZXRDaGFyYWN0ZXJTZXRcIiwgW2NhY2hlXSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihfY2xhc3MucHJvdG90eXBlLCBcImdldENoYXJhY3RlclNldFwiKSwgX2NsYXNzLnByb3RvdHlwZSksIF9hcHBseURlY29yYXRlZERlc2NyaXB0b3IoX2NsYXNzLnByb3RvdHlwZSwgXCJjb2RlUG9pbnRzRm9yR2x5cGhcIiwgW2NhY2hlXSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihfY2xhc3MucHJvdG90eXBlLCBcImNvZGVQb2ludHNGb3JHbHlwaFwiKSwgX2NsYXNzLnByb3RvdHlwZSkpLCBfY2xhc3MpO1xuXG52YXIgS2VyblByb2Nlc3NvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEtlcm5Qcm9jZXNzb3IoZm9udCkge1xuICAgIHRoaXMua2VybiA9IGZvbnQua2VybjtcbiAgfVxuXG4gIHZhciBfcHJvdG8xNiA9IEtlcm5Qcm9jZXNzb3IucHJvdG90eXBlO1xuXG4gIF9wcm90bzE2LnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGdseXBocywgcG9zaXRpb25zKSB7XG4gICAgZm9yICh2YXIgZ2x5cGhJbmRleCA9IDA7IGdseXBoSW5kZXggPCBnbHlwaHMubGVuZ3RoIC0gMTsgZ2x5cGhJbmRleCsrKSB7XG4gICAgICB2YXIgbGVmdCA9IGdseXBoc1tnbHlwaEluZGV4XS5pZDtcbiAgICAgIHZhciByaWdodCA9IGdseXBoc1tnbHlwaEluZGV4ICsgMV0uaWQ7XG4gICAgICBwb3NpdGlvbnNbZ2x5cGhJbmRleF0ueEFkdmFuY2UgKz0gdGhpcy5nZXRLZXJuaW5nKGxlZnQsIHJpZ2h0KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMTYuZ2V0S2VybmluZyA9IGZ1bmN0aW9uIGdldEtlcm5pbmcobGVmdCwgcmlnaHQpIHtcbiAgICB2YXIgcmVzID0gMDtcblxuICAgIGZvciAodmFyIF9pdGVyYXRvcjE2ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLmtlcm4udGFibGVzKSwgX3N0ZXAxNjsgIShfc3RlcDE2ID0gX2l0ZXJhdG9yMTYoKSkuZG9uZTspIHtcbiAgICAgIHZhciB0YWJsZSA9IF9zdGVwMTYudmFsdWU7XG5cbiAgICAgIGlmICh0YWJsZS5jb3ZlcmFnZS5jcm9zc1N0cmVhbSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0YWJsZS52ZXJzaW9uKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBpZiAoIXRhYmxlLmNvdmVyYWdlLmhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFibGUuY292ZXJhZ2UudmVydGljYWwgfHwgdGFibGUuY292ZXJhZ2UudmFyaWF0aW9uKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGtlcm5pbmcgdGFibGUgdmVyc2lvbiBcIi5jb25jYXQodGFibGUudmVyc2lvbikpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsID0gMDtcbiAgICAgIHZhciBzID0gdGFibGUuc3VidGFibGU7XG5cbiAgICAgIHN3aXRjaCAodGFibGUuZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICB2YXIgcGFpcklkeCA9IGJpbmFyeVNlYXJjaChzLnBhaXJzLCBmdW5jdGlvbiAocGFpcikge1xuICAgICAgICAgICAgcmV0dXJuIGxlZnQgLSBwYWlyLmxlZnQgfHwgcmlnaHQgLSBwYWlyLnJpZ2h0O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHBhaXJJZHggPj0gMCkge1xuICAgICAgICAgICAgdmFsID0gcy5wYWlyc1twYWlySWR4XS52YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdmFyIGxlZnRPZmZzZXQgPSAwLFxuICAgICAgICAgICAgICByaWdodE9mZnNldCA9IDA7XG5cbiAgICAgICAgICBpZiAobGVmdCA+PSBzLmxlZnRUYWJsZS5maXJzdEdseXBoICYmIGxlZnQgPCBzLmxlZnRUYWJsZS5maXJzdEdseXBoICsgcy5sZWZ0VGFibGUubkdseXBocykge1xuICAgICAgICAgICAgbGVmdE9mZnNldCA9IHMubGVmdFRhYmxlLm9mZnNldHNbbGVmdCAtIHMubGVmdFRhYmxlLmZpcnN0R2x5cGhdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZWZ0T2Zmc2V0ID0gcy5hcnJheS5vZmY7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJpZ2h0ID49IHMucmlnaHRUYWJsZS5maXJzdEdseXBoICYmIHJpZ2h0IDwgcy5yaWdodFRhYmxlLmZpcnN0R2x5cGggKyBzLnJpZ2h0VGFibGUubkdseXBocykge1xuICAgICAgICAgICAgcmlnaHRPZmZzZXQgPSBzLnJpZ2h0VGFibGUub2Zmc2V0c1tyaWdodCAtIHMucmlnaHRUYWJsZS5maXJzdEdseXBoXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgaW5kZXggPSAobGVmdE9mZnNldCArIHJpZ2h0T2Zmc2V0IC0gcy5hcnJheS5vZmYpIC8gMjtcbiAgICAgICAgICB2YWwgPSBzLmFycmF5LnZhbHVlcy5nZXQoaW5kZXgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAobGVmdCA+PSBzLmdseXBoQ291bnQgfHwgcmlnaHQgPj0gcy5nbHlwaENvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YWwgPSBzLmtlcm5WYWx1ZVtzLmtlcm5JbmRleFtzLmxlZnRDbGFzc1tsZWZ0XSAqIHMucmlnaHRDbGFzc0NvdW50ICsgcy5yaWdodENsYXNzW3JpZ2h0XV1dO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2VybmluZyBzdWItdGFibGUgZm9ybWF0IFwiLmNvbmNhdCh0YWJsZS5mb3JtYXQpKTtcbiAgICAgIH0gLy8gTWljcm9zb2Z0IHN1cHBvcnRzIHRoZSBvdmVycmlkZSBmbGFnLCB3aGljaCByZXNldHMgdGhlIHJlc3VsdFxuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgc3VtIG9mIHRoZSByZXN1bHRzIGZyb20gYWxsIHN1YnRhYmxlcyBpcyByZXR1cm5lZFxuXG5cbiAgICAgIGlmICh0YWJsZS5jb3ZlcmFnZS5vdmVycmlkZSkge1xuICAgICAgICByZXMgPSB2YWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMgKz0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgcmV0dXJuIEtlcm5Qcm9jZXNzb3I7XG59KCk7XG4vKipcclxuICogVGhpcyBjbGFzcyBpcyB1c2VkIHdoZW4gR1BPUyBkb2VzIG5vdCBkZWZpbmUgJ21hcmsnIG9yICdta21rJyBmZWF0dXJlc1xyXG4gKiBmb3IgcG9zaXRpb25pbmcgbWFya3MgcmVsYXRpdmUgdG8gYmFzZSBnbHlwaHMuIEl0IHVzZXMgdGhlIHVuaWNvZGVcclxuICogY29tYmluaW5nIGNsYXNzIHByb3BlcnR5IHRvIHBvc2l0aW9uIG1hcmtzLlxyXG4gKlxyXG4gKiBCYXNlZCBvbiBjb2RlIGZyb20gSGFyZmJ1enosIHRoYW5rcyFcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2JlaGRhZC9oYXJmYnV6ei9ibG9iL21hc3Rlci9zcmMvaGItb3Qtc2hhcGUtZmFsbGJhY2suY2NcclxuICovXG5cblxudmFyIFVuaWNvZGVMYXlvdXRFbmdpbmUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBVbmljb2RlTGF5b3V0RW5naW5lKGZvbnQpIHtcbiAgICB0aGlzLmZvbnQgPSBmb250O1xuICB9XG5cbiAgdmFyIF9wcm90bzE3ID0gVW5pY29kZUxheW91dEVuZ2luZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMTcucG9zaXRpb25HbHlwaHMgPSBmdW5jdGlvbiBwb3NpdGlvbkdseXBocyhnbHlwaHMsIHBvc2l0aW9ucykge1xuICAgIC8vIGZpbmQgZWFjaCBiYXNlICsgbWFyayBjbHVzdGVyLCBhbmQgcG9zaXRpb24gdGhlIG1hcmtzIHJlbGF0aXZlIHRvIHRoZSBiYXNlXG4gICAgdmFyIGNsdXN0ZXJTdGFydCA9IDA7XG4gICAgdmFyIGNsdXN0ZXJFbmQgPSAwO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGdseXBocy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpbmRleF07XG5cbiAgICAgIGlmIChnbHlwaC5pc01hcmspIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIGxpZ2F0dXJlc1xuICAgICAgICBjbHVzdGVyRW5kID0gaW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY2x1c3RlclN0YXJ0ICE9PSBjbHVzdGVyRW5kKSB7XG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkNsdXN0ZXIoZ2x5cGhzLCBwb3NpdGlvbnMsIGNsdXN0ZXJTdGFydCwgY2x1c3RlckVuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjbHVzdGVyU3RhcnQgPSBjbHVzdGVyRW5kID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsdXN0ZXJTdGFydCAhPT0gY2x1c3RlckVuZCkge1xuICAgICAgdGhpcy5wb3NpdGlvbkNsdXN0ZXIoZ2x5cGhzLCBwb3NpdGlvbnMsIGNsdXN0ZXJTdGFydCwgY2x1c3RlckVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9ucztcbiAgfTtcblxuICBfcHJvdG8xNy5wb3NpdGlvbkNsdXN0ZXIgPSBmdW5jdGlvbiBwb3NpdGlvbkNsdXN0ZXIoZ2x5cGhzLCBwb3NpdGlvbnMsIGNsdXN0ZXJTdGFydCwgY2x1c3RlckVuZCkge1xuICAgIHZhciBiYXNlID0gZ2x5cGhzW2NsdXN0ZXJTdGFydF07XG4gICAgdmFyIGJhc2VCb3ggPSBiYXNlLmNib3guY29weSgpOyAvLyBhZGp1c3QgYm91bmRpbmcgYm94IGZvciBsaWdhdHVyZSBnbHlwaHNcblxuICAgIGlmIChiYXNlLmNvZGVQb2ludHMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gTFRSLiBUT0RPOiBSVEwgc3VwcG9ydC5cbiAgICAgIGJhc2VCb3gubWluWCArPSAoYmFzZS5jb2RlUG9pbnRzLmxlbmd0aCAtIDEpICogYmFzZUJveC53aWR0aCAvIGJhc2UuY29kZVBvaW50cy5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIHhPZmZzZXQgPSAtcG9zaXRpb25zW2NsdXN0ZXJTdGFydF0ueEFkdmFuY2U7XG4gICAgdmFyIHlPZmZzZXQgPSAwO1xuICAgIHZhciB5R2FwID0gdGhpcy5mb250LnVuaXRzUGVyRW0gLyAxNjsgLy8gcG9zaXRpb24gZWFjaCBvZiB0aGUgbWFyayBnbHlwaHMgcmVsYXRpdmUgdG8gdGhlIGJhc2UgZ2x5cGhcblxuICAgIGZvciAodmFyIGluZGV4ID0gY2x1c3RlclN0YXJ0ICsgMTsgaW5kZXggPD0gY2x1c3RlckVuZDsgaW5kZXgrKykge1xuICAgICAgdmFyIG1hcmsgPSBnbHlwaHNbaW5kZXhdO1xuICAgICAgdmFyIG1hcmtCb3ggPSBtYXJrLmNib3g7XG4gICAgICB2YXIgcG9zaXRpb24gPSBwb3NpdGlvbnNbaW5kZXhdO1xuICAgICAgdmFyIGNvbWJpbmluZ0NsYXNzID0gdGhpcy5nZXRDb21iaW5pbmdDbGFzcyhtYXJrLmNvZGVQb2ludHNbMF0pO1xuXG4gICAgICBpZiAoY29tYmluaW5nQ2xhc3MgIT09ICdOb3RfUmVvcmRlcmVkJykge1xuICAgICAgICBwb3NpdGlvbi54T2Zmc2V0ID0gcG9zaXRpb24ueU9mZnNldCA9IDA7IC8vIHggcG9zaXRpb25pbmdcblxuICAgICAgICBzd2l0Y2ggKGNvbWJpbmluZ0NsYXNzKSB7XG4gICAgICAgICAgY2FzZSAnRG91YmxlX0Fib3ZlJzpcbiAgICAgICAgICBjYXNlICdEb3VibGVfQmVsb3cnOlxuICAgICAgICAgICAgLy8gTFRSLiBUT0RPOiBSVEwgc3VwcG9ydC5cbiAgICAgICAgICAgIHBvc2l0aW9uLnhPZmZzZXQgKz0gYmFzZUJveC5taW5YIC0gbWFya0JveC53aWR0aCAvIDIgLSBtYXJrQm94Lm1pblg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0F0dGFjaGVkX0JlbG93X0xlZnQnOlxuICAgICAgICAgIGNhc2UgJ0JlbG93X0xlZnQnOlxuICAgICAgICAgIGNhc2UgJ0Fib3ZlX0xlZnQnOlxuICAgICAgICAgICAgLy8gbGVmdCBhbGlnblxuICAgICAgICAgICAgcG9zaXRpb24ueE9mZnNldCArPSBiYXNlQm94Lm1pblggLSBtYXJrQm94Lm1pblg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0F0dGFjaGVkX0Fib3ZlX1JpZ2h0JzpcbiAgICAgICAgICBjYXNlICdCZWxvd19SaWdodCc6XG4gICAgICAgICAgY2FzZSAnQWJvdmVfUmlnaHQnOlxuICAgICAgICAgICAgLy8gcmlnaHQgYWxpZ25cbiAgICAgICAgICAgIHBvc2l0aW9uLnhPZmZzZXQgKz0gYmFzZUJveC5tYXhYIC0gbWFya0JveC53aWR0aCAtIG1hcmtCb3gubWluWDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEF0dGFjaGVkX0JlbG93LCBBdHRhY2hlZF9BYm92ZSwgQmVsb3csIEFib3ZlLCBvdGhlclxuICAgICAgICAgICAgLy8gY2VudGVyIGFsaWduXG4gICAgICAgICAgICBwb3NpdGlvbi54T2Zmc2V0ICs9IGJhc2VCb3gubWluWCArIChiYXNlQm94LndpZHRoIC0gbWFya0JveC53aWR0aCkgLyAyIC0gbWFya0JveC5taW5YO1xuICAgICAgICB9IC8vIHkgcG9zaXRpb25pbmdcblxuXG4gICAgICAgIHN3aXRjaCAoY29tYmluaW5nQ2xhc3MpIHtcbiAgICAgICAgICBjYXNlICdEb3VibGVfQmVsb3cnOlxuICAgICAgICAgIGNhc2UgJ0JlbG93X0xlZnQnOlxuICAgICAgICAgIGNhc2UgJ0JlbG93JzpcbiAgICAgICAgICBjYXNlICdCZWxvd19SaWdodCc6XG4gICAgICAgICAgY2FzZSAnQXR0YWNoZWRfQmVsb3dfTGVmdCc6XG4gICAgICAgICAgY2FzZSAnQXR0YWNoZWRfQmVsb3cnOlxuICAgICAgICAgICAgLy8gYWRkIGEgc21hbGwgZ2FwIGJldHdlZW4gdGhlIGdseXBocyBpZiB0aGV5IGFyZSBub3QgYXR0YWNoZWRcbiAgICAgICAgICAgIGlmIChjb21iaW5pbmdDbGFzcyA9PT0gJ0F0dGFjaGVkX0JlbG93X0xlZnQnIHx8IGNvbWJpbmluZ0NsYXNzID09PSAnQXR0YWNoZWRfQmVsb3cnKSB7XG4gICAgICAgICAgICAgIGJhc2VCb3gubWluWSArPSB5R2FwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvbi55T2Zmc2V0ID0gLWJhc2VCb3gubWluWSAtIG1hcmtCb3gubWF4WTtcbiAgICAgICAgICAgIGJhc2VCb3gubWluWSArPSBtYXJrQm94LmhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRG91YmxlX0Fib3ZlJzpcbiAgICAgICAgICBjYXNlICdBYm92ZV9MZWZ0JzpcbiAgICAgICAgICBjYXNlICdBYm92ZSc6XG4gICAgICAgICAgY2FzZSAnQWJvdmVfUmlnaHQnOlxuICAgICAgICAgIGNhc2UgJ0F0dGFjaGVkX0Fib3ZlJzpcbiAgICAgICAgICBjYXNlICdBdHRhY2hlZF9BYm92ZV9SaWdodCc6XG4gICAgICAgICAgICAvLyBhZGQgYSBzbWFsbCBnYXAgYmV0d2VlbiB0aGUgZ2x5cGhzIGlmIHRoZXkgYXJlIG5vdCBhdHRhY2hlZFxuICAgICAgICAgICAgaWYgKGNvbWJpbmluZ0NsYXNzID09PSAnQXR0YWNoZWRfQWJvdmUnIHx8IGNvbWJpbmluZ0NsYXNzID09PSAnQXR0YWNoZWRfQWJvdmVfUmlnaHQnKSB7XG4gICAgICAgICAgICAgIGJhc2VCb3gubWF4WSArPSB5R2FwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvbi55T2Zmc2V0ID0gYmFzZUJveC5tYXhZIC0gbWFya0JveC5taW5ZO1xuICAgICAgICAgICAgYmFzZUJveC5tYXhZICs9IG1hcmtCb3guaGVpZ2h0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBwb3NpdGlvbi54QWR2YW5jZSA9IHBvc2l0aW9uLnlBZHZhbmNlID0gMDtcbiAgICAgICAgcG9zaXRpb24ueE9mZnNldCArPSB4T2Zmc2V0O1xuICAgICAgICBwb3NpdGlvbi55T2Zmc2V0ICs9IHlPZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4T2Zmc2V0IC09IHBvc2l0aW9uLnhBZHZhbmNlO1xuICAgICAgICB5T2Zmc2V0IC09IHBvc2l0aW9uLnlBZHZhbmNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfTtcblxuICBfcHJvdG8xNy5nZXRDb21iaW5pbmdDbGFzcyA9IGZ1bmN0aW9uIGdldENvbWJpbmluZ0NsYXNzKGNvZGVQb2ludCkge1xuICAgIHZhciBjb21iaW5pbmdDbGFzcyA9IHVuaWNvZGUuZ2V0Q29tYmluaW5nQ2xhc3MoY29kZVBvaW50KTsgLy8gVGhhaSAvIExhbyBuZWVkIHNvbWUgcGVyLWNoYXJhY3RlciB3b3JrXG5cbiAgICBpZiAoKGNvZGVQb2ludCAmIH4weGZmKSA9PT0gMHgwZTAwKSB7XG4gICAgICBpZiAoY29tYmluaW5nQ2xhc3MgPT09ICdOb3RfUmVvcmRlcmVkJykge1xuICAgICAgICBzd2l0Y2ggKGNvZGVQb2ludCkge1xuICAgICAgICAgIGNhc2UgMHgwZTMxOlxuICAgICAgICAgIGNhc2UgMHgwZTM0OlxuICAgICAgICAgIGNhc2UgMHgwZTM1OlxuICAgICAgICAgIGNhc2UgMHgwZTM2OlxuICAgICAgICAgIGNhc2UgMHgwZTM3OlxuICAgICAgICAgIGNhc2UgMHgwZTQ3OlxuICAgICAgICAgIGNhc2UgMHgwZTRjOlxuICAgICAgICAgIGNhc2UgMHgwZTNkOlxuICAgICAgICAgIGNhc2UgMHgwZTRlOlxuICAgICAgICAgICAgcmV0dXJuICdBYm92ZV9SaWdodCc7XG5cbiAgICAgICAgICBjYXNlIDB4MGViMTpcbiAgICAgICAgICBjYXNlIDB4MGViNDpcbiAgICAgICAgICBjYXNlIDB4MGViNTpcbiAgICAgICAgICBjYXNlIDB4MGViNjpcbiAgICAgICAgICBjYXNlIDB4MGViNzpcbiAgICAgICAgICBjYXNlIDB4MGViYjpcbiAgICAgICAgICBjYXNlIDB4MGVjYzpcbiAgICAgICAgICBjYXNlIDB4MGVjZDpcbiAgICAgICAgICAgIHJldHVybiAnQWJvdmUnO1xuXG4gICAgICAgICAgY2FzZSAweDBlYmM6XG4gICAgICAgICAgICByZXR1cm4gJ0JlbG93JztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPT09IDB4MGUzYSkge1xuICAgICAgICAvLyB2aXJhbWFcbiAgICAgICAgcmV0dXJuICdCZWxvd19SaWdodCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb21iaW5pbmdDbGFzcykge1xuICAgICAgLy8gSGVicmV3XG4gICAgICBjYXNlICdDQ0MxMCc6IC8vIHNoZXZhXG5cbiAgICAgIGNhc2UgJ0NDQzExJzogLy8gaGF0YWYgc2Vnb2xcblxuICAgICAgY2FzZSAnQ0NDMTInOiAvLyBoYXRhZiBwYXRhaFxuXG4gICAgICBjYXNlICdDQ0MxMyc6IC8vIGhhdGFmIHFhbWF0c1xuXG4gICAgICBjYXNlICdDQ0MxNCc6IC8vIGhpcmlxXG5cbiAgICAgIGNhc2UgJ0NDQzE1JzogLy8gdHNlcmVcblxuICAgICAgY2FzZSAnQ0NDMTYnOiAvLyBzZWdvbFxuXG4gICAgICBjYXNlICdDQ0MxNyc6IC8vIHBhdGFoXG5cbiAgICAgIGNhc2UgJ0NDQzE4JzogLy8gcWFtYXRzXG5cbiAgICAgIGNhc2UgJ0NDQzIwJzogLy8gcXVidXRzXG5cbiAgICAgIGNhc2UgJ0NDQzIyJzpcbiAgICAgICAgLy8gbWV0ZWdcbiAgICAgICAgcmV0dXJuICdCZWxvdyc7XG5cbiAgICAgIGNhc2UgJ0NDQzIzJzpcbiAgICAgICAgLy8gcmFmZVxuICAgICAgICByZXR1cm4gJ0F0dGFjaGVkX0Fib3ZlJztcblxuICAgICAgY2FzZSAnQ0NDMjQnOlxuICAgICAgICAvLyBzaGluIGRvdFxuICAgICAgICByZXR1cm4gJ0Fib3ZlX1JpZ2h0JztcblxuICAgICAgY2FzZSAnQ0NDMjUnOiAvLyBzaW4gZG90XG5cbiAgICAgIGNhc2UgJ0NDQzE5JzpcbiAgICAgICAgLy8gaG9sYW1cbiAgICAgICAgcmV0dXJuICdBYm92ZV9MZWZ0JztcblxuICAgICAgY2FzZSAnQ0NDMjYnOlxuICAgICAgICAvLyBwb2ludCB2YXJpa2FcbiAgICAgICAgcmV0dXJuICdBYm92ZSc7XG5cbiAgICAgIGNhc2UgJ0NDQzIxJzpcbiAgICAgICAgLy8gZGFnZXNoXG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gQXJhYmljIGFuZCBTeXJpYWNcblxuICAgICAgY2FzZSAnQ0NDMjcnOiAvLyBmYXRoYXRhblxuXG4gICAgICBjYXNlICdDQ0MyOCc6IC8vIGRhbW1hdGFuXG5cbiAgICAgIGNhc2UgJ0NDQzMwJzogLy8gZmF0aGFcblxuICAgICAgY2FzZSAnQ0NDMzEnOiAvLyBkYW1tYVxuXG4gICAgICBjYXNlICdDQ0MzMyc6IC8vIHNoYWRkYVxuXG4gICAgICBjYXNlICdDQ0MzNCc6IC8vIHN1a3VuXG5cbiAgICAgIGNhc2UgJ0NDQzM1JzogLy8gc3VwZXJzY3JpcHQgYWxlZlxuXG4gICAgICBjYXNlICdDQ0MzNic6XG4gICAgICAgIC8vIHN1cGVyc2NyaXB0IGFsYXBoXG4gICAgICAgIHJldHVybiAnQWJvdmUnO1xuXG4gICAgICBjYXNlICdDQ0MyOSc6IC8vIGthc3JhdGFuXG5cbiAgICAgIGNhc2UgJ0NDQzMyJzpcbiAgICAgICAgLy8ga2FzcmFcbiAgICAgICAgcmV0dXJuICdCZWxvdyc7XG4gICAgICAvLyBUaGFpXG5cbiAgICAgIGNhc2UgJ0NDQzEwMyc6XG4gICAgICAgIC8vIHNhcmEgdSAvIHNhcmEgdXVcbiAgICAgICAgcmV0dXJuICdCZWxvd19SaWdodCc7XG5cbiAgICAgIGNhc2UgJ0NDQzEwNyc6XG4gICAgICAgIC8vIG1haVxuICAgICAgICByZXR1cm4gJ0Fib3ZlX1JpZ2h0JztcbiAgICAgIC8vIExhb1xuXG4gICAgICBjYXNlICdDQ0MxMTgnOlxuICAgICAgICAvLyBzaWduIHUgLyBzaWduIHV1XG4gICAgICAgIHJldHVybiAnQmVsb3cnO1xuXG4gICAgICBjYXNlICdDQ0MxMjInOlxuICAgICAgICAvLyBtYWlcbiAgICAgICAgcmV0dXJuICdBYm92ZSc7XG4gICAgICAvLyBUaWJldGFuXG5cbiAgICAgIGNhc2UgJ0NDQzEyOSc6IC8vIHNpZ24gYWFcblxuICAgICAgY2FzZSAnQ0NDMTMyJzpcbiAgICAgICAgLy8gc2lnbiB1XG4gICAgICAgIHJldHVybiAnQmVsb3cnO1xuXG4gICAgICBjYXNlICdDQ0MxMzAnOlxuICAgICAgICAvLyBzaWduIGlcbiAgICAgICAgcmV0dXJuICdBYm92ZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbWJpbmluZ0NsYXNzO1xuICB9O1xuXG4gIHJldHVybiBVbmljb2RlTGF5b3V0RW5naW5lO1xufSgpO1xuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBnbHlwaCBib3VuZGluZyBib3hcclxuICovXG5cblxudmFyIEJCb3ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBCQm94KG1pblgsIG1pblksIG1heFgsIG1heFkpIHtcbiAgICBpZiAobWluWCA9PT0gdm9pZCAwKSB7XG4gICAgICBtaW5YID0gSW5maW5pdHk7XG4gICAgfVxuXG4gICAgaWYgKG1pblkgPT09IHZvaWQgMCkge1xuICAgICAgbWluWSA9IEluZmluaXR5O1xuICAgIH1cblxuICAgIGlmIChtYXhYID09PSB2b2lkIDApIHtcbiAgICAgIG1heFggPSAtSW5maW5pdHk7XG4gICAgfVxuXG4gICAgaWYgKG1heFkgPT09IHZvaWQgMCkge1xuICAgICAgbWF4WSA9IC1JbmZpbml0eTtcbiAgICB9XG5cbiAgICAvKipcclxuICAgICAqIFRoZSBtaW5pbXVtIFggcG9zaXRpb24gaW4gdGhlIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xuICAgIHRoaXMubWluWCA9IG1pblg7XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWluaW11bSBZIHBvc2l0aW9uIGluIHRoZSBib3VuZGluZyBib3hcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cblxuICAgIHRoaXMubWluWSA9IG1pblk7XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWF4bWltdW0gWCBwb3NpdGlvbiBpbiB0aGUgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXG5cbiAgICB0aGlzLm1heFggPSBtYXhYO1xuICAgIC8qKlxyXG4gICAgICogVGhlIG1heG1pbXVtIFkgcG9zaXRpb24gaW4gdGhlIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xuXG4gICAgdGhpcy5tYXhZID0gbWF4WTtcbiAgfVxuICAvKipcclxuICAgKiBUaGUgd2lkdGggb2YgdGhlIGJvdW5kaW5nIGJveFxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXG5cblxuICB2YXIgX3Byb3RvMTggPSBCQm94LnByb3RvdHlwZTtcblxuICBfcHJvdG8xOC5hZGRQb2ludCA9IGZ1bmN0aW9uIGFkZFBvaW50KHgsIHkpIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgIT09IEluZmluaXR5KSB7XG4gICAgICBpZiAoeCA8IHRoaXMubWluWCkge1xuICAgICAgICB0aGlzLm1pblggPSB4O1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA+IHRoaXMubWF4WCkge1xuICAgICAgICB0aGlzLm1heFggPSB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChNYXRoLmFicyh5KSAhPT0gSW5maW5pdHkpIHtcbiAgICAgIGlmICh5IDwgdGhpcy5taW5ZKSB7XG4gICAgICAgIHRoaXMubWluWSA9IHk7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID4gdGhpcy5tYXhZKSB7XG4gICAgICAgIHRoaXMubWF4WSA9IHk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzE4LmNvcHkgPSBmdW5jdGlvbiBjb3B5KCkge1xuICAgIHJldHVybiBuZXcgQkJveCh0aGlzLm1pblgsIHRoaXMubWluWSwgdGhpcy5tYXhYLCB0aGlzLm1heFkpO1xuICB9O1xuXG4gIF9jcmVhdGVDbGFzcyhCQm94LCBbe1xuICAgIGtleTogXCJ3aWR0aFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWF4WCAtIHRoaXMubWluWDtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBib3VuZGluZyBib3hcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImhlaWdodFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWF4WSAtIHRoaXMubWluWTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQkJveDtcbn0oKTsgLy8gRGF0YSBmcm9tIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9zY3JpcHR0YWdzLmh0bVxuLy8gYW5kIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL1VOSURBVEEvUHJvcGVydHlWYWx1ZUFsaWFzZXMudHh0LlxuXG5cbnZhciBVTklDT0RFX1NDUklQVFMgPSB7XG4gIENhdWNhc2lhbl9BbGJhbmlhbjogJ2FnaGInLFxuICBBcmFiaWM6ICdhcmFiJyxcbiAgSW1wZXJpYWxfQXJhbWFpYzogJ2FybWknLFxuICBBcm1lbmlhbjogJ2FybW4nLFxuICBBdmVzdGFuOiAnYXZzdCcsXG4gIEJhbGluZXNlOiAnYmFsaScsXG4gIEJhbXVtOiAnYmFtdScsXG4gIEJhc3NhX1ZhaDogJ2Jhc3MnLFxuICBCYXRhazogJ2JhdGsnLFxuICBCZW5nYWxpOiBbJ2JuZzInLCAnYmVuZyddLFxuICBCb3BvbW9mbzogJ2JvcG8nLFxuICBCcmFobWk6ICdicmFoJyxcbiAgQnJhaWxsZTogJ2JyYWknLFxuICBCdWdpbmVzZTogJ2J1Z2knLFxuICBCdWhpZDogJ2J1aGQnLFxuICBDaGFrbWE6ICdjYWttJyxcbiAgQ2FuYWRpYW5fQWJvcmlnaW5hbDogJ2NhbnMnLFxuICBDYXJpYW46ICdjYXJpJyxcbiAgQ2hhbTogJ2NoYW0nLFxuICBDaGVyb2tlZTogJ2NoZXInLFxuICBDb3B0aWM6ICdjb3B0JyxcbiAgQ3lwcmlvdDogJ2NwcnQnLFxuICBDeXJpbGxpYzogJ2N5cmwnLFxuICBEZXZhbmFnYXJpOiBbJ2RldjInLCAnZGV2YSddLFxuICBEZXNlcmV0OiAnZHNydCcsXG4gIER1cGxveWFuOiAnZHVwbCcsXG4gIEVneXB0aWFuX0hpZXJvZ2x5cGhzOiAnZWd5cCcsXG4gIEVsYmFzYW46ICdlbGJhJyxcbiAgRXRoaW9waWM6ICdldGhpJyxcbiAgR2VvcmdpYW46ICdnZW9yJyxcbiAgR2xhZ29saXRpYzogJ2dsYWcnLFxuICBHb3RoaWM6ICdnb3RoJyxcbiAgR3JhbnRoYTogJ2dyYW4nLFxuICBHcmVlazogJ2dyZWsnLFxuICBHdWphcmF0aTogWydnanIyJywgJ2d1anInXSxcbiAgR3VybXVraGk6IFsnZ3VyMicsICdndXJ1J10sXG4gIEhhbmd1bDogJ2hhbmcnLFxuICBIYW46ICdoYW5pJyxcbiAgSGFudW5vbzogJ2hhbm8nLFxuICBIZWJyZXc6ICdoZWJyJyxcbiAgSGlyYWdhbmE6ICdoaXJhJyxcbiAgUGFoYXdoX0htb25nOiAnaG1uZycsXG4gIEthdGFrYW5hX09yX0hpcmFnYW5hOiAnaHJrdCcsXG4gIE9sZF9JdGFsaWM6ICdpdGFsJyxcbiAgSmF2YW5lc2U6ICdqYXZhJyxcbiAgS2F5YWhfTGk6ICdrYWxpJyxcbiAgS2F0YWthbmE6ICdrYW5hJyxcbiAgS2hhcm9zaHRoaTogJ2toYXInLFxuICBLaG1lcjogJ2tobXInLFxuICBLaG9qa2k6ICdraG9qJyxcbiAgS2FubmFkYTogWydrbmQyJywgJ2tuZGEnXSxcbiAgS2FpdGhpOiAna3RoaScsXG4gIFRhaV9UaGFtOiAnbGFuYScsXG4gIExhbzogJ2xhbyAnLFxuICBMYXRpbjogJ2xhdG4nLFxuICBMZXBjaGE6ICdsZXBjJyxcbiAgTGltYnU6ICdsaW1iJyxcbiAgTGluZWFyX0E6ICdsaW5hJyxcbiAgTGluZWFyX0I6ICdsaW5iJyxcbiAgTGlzdTogJ2xpc3UnLFxuICBMeWNpYW46ICdseWNpJyxcbiAgTHlkaWFuOiAnbHlkaScsXG4gIE1haGFqYW5pOiAnbWFoaicsXG4gIE1hbmRhaWM6ICdtYW5kJyxcbiAgTWFuaWNoYWVhbjogJ21hbmknLFxuICBNZW5kZV9LaWtha3VpOiAnbWVuZCcsXG4gIE1lcm9pdGljX0N1cnNpdmU6ICdtZXJjJyxcbiAgTWVyb2l0aWNfSGllcm9nbHlwaHM6ICdtZXJvJyxcbiAgTWFsYXlhbGFtOiBbJ21sbTInLCAnbWx5bSddLFxuICBNb2RpOiAnbW9kaScsXG4gIE1vbmdvbGlhbjogJ21vbmcnLFxuICBNcm86ICdtcm9vJyxcbiAgTWVldGVpX01heWVrOiAnbXRlaScsXG4gIE15YW5tYXI6IFsnbXltMicsICdteW1yJ10sXG4gIE9sZF9Ob3J0aF9BcmFiaWFuOiAnbmFyYicsXG4gIE5hYmF0YWVhbjogJ25iYXQnLFxuICBOa286ICdua28gJyxcbiAgT2doYW06ICdvZ2FtJyxcbiAgT2xfQ2hpa2k6ICdvbGNrJyxcbiAgT2xkX1R1cmtpYzogJ29ya2gnLFxuICBPcml5YTogWydvcnkyJywgJ29yeWEnXSxcbiAgT3NtYW55YTogJ29zbWEnLFxuICBQYWxteXJlbmU6ICdwYWxtJyxcbiAgUGF1X0Npbl9IYXU6ICdwYXVjJyxcbiAgT2xkX1Blcm1pYzogJ3Blcm0nLFxuICBQaGFnc19QYTogJ3BoYWcnLFxuICBJbnNjcmlwdGlvbmFsX1BhaGxhdmk6ICdwaGxpJyxcbiAgUHNhbHRlcl9QYWhsYXZpOiAncGhscCcsXG4gIFBob2VuaWNpYW46ICdwaG54JyxcbiAgTWlhbzogJ3BscmQnLFxuICBJbnNjcmlwdGlvbmFsX1BhcnRoaWFuOiAncHJ0aScsXG4gIFJlamFuZzogJ3JqbmcnLFxuICBSdW5pYzogJ3J1bnInLFxuICBTYW1hcml0YW46ICdzYW1yJyxcbiAgT2xkX1NvdXRoX0FyYWJpYW46ICdzYXJiJyxcbiAgU2F1cmFzaHRyYTogJ3NhdXInLFxuICBTaGF2aWFuOiAnc2hhdycsXG4gIFNoYXJhZGE6ICdzaHJkJyxcbiAgU2lkZGhhbTogJ3NpZGQnLFxuICBLaHVkYXdhZGk6ICdzaW5kJyxcbiAgU2luaGFsYTogJ3NpbmgnLFxuICBTb3JhX1NvbXBlbmc6ICdzb3JhJyxcbiAgU3VuZGFuZXNlOiAnc3VuZCcsXG4gIFN5bG90aV9OYWdyaTogJ3N5bG8nLFxuICBTeXJpYWM6ICdzeXJjJyxcbiAgVGFnYmFud2E6ICd0YWdiJyxcbiAgVGFrcmk6ICd0YWtyJyxcbiAgVGFpX0xlOiAndGFsZScsXG4gIE5ld19UYWlfTHVlOiAndGFsdScsXG4gIFRhbWlsOiBbJ3RtbDInLCAndGFtbCddLFxuICBUYWlfVmlldDogJ3RhdnQnLFxuICBUZWx1Z3U6IFsndGVsMicsICd0ZWx1J10sXG4gIFRpZmluYWdoOiAndGZuZycsXG4gIFRhZ2Fsb2c6ICd0Z2xnJyxcbiAgVGhhYW5hOiAndGhhYScsXG4gIFRoYWk6ICd0aGFpJyxcbiAgVGliZXRhbjogJ3RpYnQnLFxuICBUaXJodXRhOiAndGlyaCcsXG4gIFVnYXJpdGljOiAndWdhcicsXG4gIFZhaTogJ3ZhaSAnLFxuICBXYXJhbmdfQ2l0aTogJ3dhcmEnLFxuICBPbGRfUGVyc2lhbjogJ3hwZW8nLFxuICBDdW5laWZvcm06ICd4c3V4JyxcbiAgWWk6ICd5aSAgJyxcbiAgSW5oZXJpdGVkOiAnemluaCcsXG4gIENvbW1vbjogJ3p5eXknLFxuICBVbmtub3duOiAnenp6eidcbn07XG52YXIgT1BFTlRZUEVfU0NSSVBUUyA9IHt9O1xuXG5mb3IgKHZhciBzY3JpcHQgaW4gVU5JQ09ERV9TQ1JJUFRTKSB7XG4gIHZhciB0YWcgPSBVTklDT0RFX1NDUklQVFNbc2NyaXB0XTtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh0YWcpKSB7XG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yMTcgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRhZyksIF9zdGVwMTc7ICEoX3N0ZXAxNyA9IF9pdGVyYXRvcjE3KCkpLmRvbmU7KSB7XG4gICAgICB2YXIgdCA9IF9zdGVwMTcudmFsdWU7XG4gICAgICBPUEVOVFlQRV9TQ1JJUFRTW3RdID0gc2NyaXB0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBPUEVOVFlQRV9TQ1JJUFRTW3RhZ10gPSBzY3JpcHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZnJvbU9wZW5UeXBlKHRhZykge1xuICByZXR1cm4gT1BFTlRZUEVfU0NSSVBUU1t0YWddO1xufVxuXG5mdW5jdGlvbiBmb3JTdHJpbmcoc3RyaW5nKSB7XG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoO1xuICB2YXIgaWR4ID0gMDtcblxuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgdmFyIGNvZGUgPSBzdHJpbmcuY2hhckNvZGVBdChpZHgrKyk7IC8vIENoZWNrIGlmIHRoaXMgaXMgYSBoaWdoIHN1cnJvZ2F0ZVxuXG4gICAgaWYgKDB4ZDgwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHhkYmZmICYmIGlkeCA8IGxlbikge1xuICAgICAgdmFyIG5leHQgPSBzdHJpbmcuY2hhckNvZGVBdChpZHgpOyAvLyBDaGVjayBpZiB0aGlzIGlzIGEgbG93IHN1cnJvZ2F0ZVxuXG4gICAgICBpZiAoMHhkYzAwIDw9IG5leHQgJiYgbmV4dCA8PSAweGRmZmYpIHtcbiAgICAgICAgaWR4Kys7XG4gICAgICAgIGNvZGUgPSAoKGNvZGUgJiAweDNGRikgPDwgMTApICsgKG5leHQgJiAweDNGRikgKyAweDEwMDAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBfc2NyaXB0ID0gdW5pY29kZS5nZXRTY3JpcHQoY29kZSk7XG5cbiAgICBpZiAoX3NjcmlwdCAhPT0gJ0NvbW1vbicgJiYgX3NjcmlwdCAhPT0gJ0luaGVyaXRlZCcgJiYgX3NjcmlwdCAhPT0gJ1Vua25vd24nKSB7XG4gICAgICByZXR1cm4gVU5JQ09ERV9TQ1JJUFRTW19zY3JpcHRdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBVTklDT0RFX1NDUklQVFMuVW5rbm93bjtcbn1cblxuZnVuY3Rpb24gZm9yQ29kZVBvaW50cyhjb2RlUG9pbnRzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjb2RlUG9pbnQgPSBjb2RlUG9pbnRzW2ldO1xuXG4gICAgdmFyIF9zY3JpcHQyID0gdW5pY29kZS5nZXRTY3JpcHQoY29kZVBvaW50KTtcblxuICAgIGlmIChfc2NyaXB0MiAhPT0gJ0NvbW1vbicgJiYgX3NjcmlwdDIgIT09ICdJbmhlcml0ZWQnICYmIF9zY3JpcHQyICE9PSAnVW5rbm93bicpIHtcbiAgICAgIHJldHVybiBVTklDT0RFX1NDUklQVFNbX3NjcmlwdDJdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBVTklDT0RFX1NDUklQVFMuVW5rbm93bjtcbn0gLy8gVGhlIHNjcmlwdHMgaW4gdGhpcyBtYXAgYXJlIHdyaXR0ZW4gZnJvbSByaWdodCB0byBsZWZ0XG5cblxudmFyIFJUTCA9IHtcbiAgYXJhYjogdHJ1ZSxcbiAgLy8gQXJhYmljXG4gIGhlYnI6IHRydWUsXG4gIC8vIEhlYnJld1xuICBzeXJjOiB0cnVlLFxuICAvLyBTeXJpYWNcbiAgdGhhYTogdHJ1ZSxcbiAgLy8gVGhhYW5hXG4gIGNwcnQ6IHRydWUsXG4gIC8vIEN5cHJpb3QgU3lsbGFiYXJ5XG4gIGtoYXI6IHRydWUsXG4gIC8vIEtoYXJvc3RoaVxuICBwaG54OiB0cnVlLFxuICAvLyBQaG9lbmljaWFuXG4gICdua28gJzogdHJ1ZSxcbiAgLy8gTidLb1xuICBseWRpOiB0cnVlLFxuICAvLyBMeWRpYW5cbiAgYXZzdDogdHJ1ZSxcbiAgLy8gQXZlc3RhblxuICBhcm1pOiB0cnVlLFxuICAvLyBJbXBlcmlhbCBBcmFtYWljXG4gIHBobGk6IHRydWUsXG4gIC8vIEluc2NyaXB0aW9uYWwgUGFobGF2aVxuICBwcnRpOiB0cnVlLFxuICAvLyBJbnNjcmlwdGlvbmFsIFBhcnRoaWFuXG4gIHNhcmI6IHRydWUsXG4gIC8vIE9sZCBTb3V0aCBBcmFiaWFuXG4gIG9ya2g6IHRydWUsXG4gIC8vIE9sZCBUdXJraWMsIE9ya2hvbiBSdW5pY1xuICBzYW1yOiB0cnVlLFxuICAvLyBTYW1hcml0YW5cbiAgbWFuZDogdHJ1ZSxcbiAgLy8gTWFuZGFpYywgTWFuZGFlYW5cbiAgbWVyYzogdHJ1ZSxcbiAgLy8gTWVyb2l0aWMgQ3Vyc2l2ZVxuICBtZXJvOiB0cnVlLFxuICAvLyBNZXJvaXRpYyBIaWVyb2dseXBoc1xuICAvLyBVbmljb2RlIDcuMCAobm90IGxpc3RlZCBvbiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMvc2NyaXB0dGFncy5odG0pXG4gIG1hbmk6IHRydWUsXG4gIC8vIE1hbmljaGFlYW5cbiAgbWVuZDogdHJ1ZSxcbiAgLy8gTWVuZGUgS2lrYWt1aVxuICBuYmF0OiB0cnVlLFxuICAvLyBOYWJhdGFlYW5cbiAgbmFyYjogdHJ1ZSxcbiAgLy8gT2xkIE5vcnRoIEFyYWJpYW5cbiAgcGFsbTogdHJ1ZSxcbiAgLy8gUGFsbXlyZW5lXG4gIHBobHA6IHRydWUgLy8gUHNhbHRlciBQYWhsYXZpXG5cbn07XG5cbmZ1bmN0aW9uIGRpcmVjdGlvbihzY3JpcHQpIHtcbiAgaWYgKFJUTFtzY3JpcHRdKSB7XG4gICAgcmV0dXJuICdydGwnO1xuICB9XG5cbiAgcmV0dXJuICdsdHInO1xufVxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBydW4gb2YgR2x5cGggYW5kIEdseXBoUG9zaXRpb24gb2JqZWN0cy5cclxuICogUmV0dXJuZWQgYnkgdGhlIGZvbnQgbGF5b3V0IG1ldGhvZC5cclxuICovXG5cblxudmFyIEdseXBoUnVuID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gR2x5cGhSdW4oZ2x5cGhzLCBmZWF0dXJlcywgc2NyaXB0LCBsYW5ndWFnZSwgZGlyZWN0aW9uJDEpIHtcbiAgICAvKipcclxuICAgICAqIEFuIGFycmF5IG9mIEdseXBoIG9iamVjdHMgaW4gdGhlIHJ1blxyXG4gICAgICogQHR5cGUge0dseXBoW119XHJcbiAgICAgKi9cbiAgICB0aGlzLmdseXBocyA9IGdseXBocztcbiAgICAvKipcclxuICAgICAqIEFuIGFycmF5IG9mIEdseXBoUG9zaXRpb24gb2JqZWN0cyBmb3IgZWFjaCBnbHlwaCBpbiB0aGUgcnVuXHJcbiAgICAgKiBAdHlwZSB7R2x5cGhQb3NpdGlvbltdfVxyXG4gICAgICovXG5cbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2NyaXB0IHRoYXQgd2FzIHJlcXVlc3RlZCBmb3Igc2hhcGluZy4gVGhpcyB3YXMgZWl0aGVyIHBhc3NlZCBpbiBvciBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xuXG4gICAgdGhpcy5zY3JpcHQgPSBzY3JpcHQ7XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFuZ3VhZ2UgcmVxdWVzdGVkIGZvciBzaGFwaW5nLCBhcyBwYXNzZWQgaW4uIElmIGBudWxsYCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgZm9yIHRoZVxyXG4gICAgICogc2NyaXB0IHdhcyB1c2VkLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xuXG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlIHx8IG51bGw7XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGlyZWN0aW9uIHJlcXVlc3RlZCBmb3Igc2hhcGluZywgYXMgcGFzc2VkIGluIChlaXRoZXIgbHRyIG9yIHJ0bCkuXHJcbiAgICAgKiBJZiBgbnVsbGAsIHRoZSBkZWZhdWx0IGRpcmVjdGlvbiBvZiB0aGUgc2NyaXB0IGlzIHVzZWQuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXG5cbiAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbiQxIHx8IGRpcmVjdGlvbihzY3JpcHQpO1xuICAgIC8qKlxyXG4gICAgICogVGhlIGZlYXR1cmVzIHJlcXVlc3RlZCBkdXJpbmcgc2hhcGluZy4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHVzZXJcclxuICAgICAqIHNwZWNpZmllZCBmZWF0dXJlcyBhbmQgZmVhdHVyZXMgY2hvc2VuIGJ5IHRoZSBzaGFwZXIuXHJcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxyXG4gICAgICovXG5cbiAgICB0aGlzLmZlYXR1cmVzID0ge307IC8vIENvbnZlcnQgZmVhdHVyZXMgdG8gYW4gb2JqZWN0XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShmZWF0dXJlcykpIHtcbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjE4ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShmZWF0dXJlcyksIF9zdGVwMTg7ICEoX3N0ZXAxOCA9IF9pdGVyYXRvcjE4KCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciB0YWcgPSBfc3RlcDE4LnZhbHVlO1xuICAgICAgICB0aGlzLmZlYXR1cmVzW3RhZ10gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZlYXR1cmVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgIH1cbiAgfVxuICAvKipcclxuICAgKiBUaGUgdG90YWwgYWR2YW5jZSB3aWR0aCBvZiB0aGUgcnVuLlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoR2x5cGhSdW4sIFt7XG4gICAga2V5OiBcImFkdmFuY2VXaWR0aFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIHdpZHRoID0gMDtcblxuICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMTkgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMucG9zaXRpb25zKSwgX3N0ZXAxOTsgIShfc3RlcDE5ID0gX2l0ZXJhdG9yMTkoKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gX3N0ZXAxOS52YWx1ZTtcbiAgICAgICAgd2lkdGggKz0gcG9zaXRpb24ueEFkdmFuY2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG90YWwgYWR2YW5jZSBoZWlnaHQgb2YgdGhlIHJ1bi5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImFkdmFuY2VIZWlnaHRcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBoZWlnaHQgPSAwO1xuXG4gICAgICBmb3IgKHZhciBfaXRlcmF0b3IyMCA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodGhpcy5wb3NpdGlvbnMpLCBfc3RlcDIwOyAhKF9zdGVwMjAgPSBfaXRlcmF0b3IyMCgpKS5kb25lOykge1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBfc3RlcDIwLnZhbHVlO1xuICAgICAgICBoZWlnaHQgKz0gcG9zaXRpb24ueUFkdmFuY2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWlnaHQ7XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdW5kaW5nIGJveCBjb250YWluaW5nIGFsbCBnbHlwaHMgaW4gdGhlIHJ1bi5cclxuICAgICAqIEB0eXBlIHtCQm94fVxyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJiYm94XCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgYmJveCA9IG5ldyBCQm94KCk7XG4gICAgICB2YXIgeCA9IDA7XG4gICAgICB2YXIgeSA9IDA7XG5cbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmdseXBocy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIGdseXBoID0gdGhpcy5nbHlwaHNbaW5kZXhdO1xuICAgICAgICB2YXIgcCA9IHRoaXMucG9zaXRpb25zW2luZGV4XTtcbiAgICAgICAgdmFyIGIgPSBnbHlwaC5iYm94O1xuICAgICAgICBiYm94LmFkZFBvaW50KGIubWluWCArIHggKyBwLnhPZmZzZXQsIGIubWluWSArIHkgKyBwLnlPZmZzZXQpO1xuICAgICAgICBiYm94LmFkZFBvaW50KGIubWF4WCArIHggKyBwLnhPZmZzZXQsIGIubWF4WSArIHkgKyBwLnlPZmZzZXQpO1xuICAgICAgICB4ICs9IHAueEFkdmFuY2U7XG4gICAgICAgIHkgKz0gcC55QWR2YW5jZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJib3g7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEdseXBoUnVuO1xufSgpO1xuLyoqXHJcbiAqIFJlcHJlc2VudHMgcG9zaXRpb25pbmcgaW5mb3JtYXRpb24gZm9yIGEgZ2x5cGggaW4gYSBHbHlwaFJ1bi5cclxuICovXG5cblxudmFyIEdseXBoUG9zaXRpb24gPSBmdW5jdGlvbiBHbHlwaFBvc2l0aW9uKHhBZHZhbmNlLCB5QWR2YW5jZSwgeE9mZnNldCwgeU9mZnNldCkge1xuICBpZiAoeEFkdmFuY2UgPT09IHZvaWQgMCkge1xuICAgIHhBZHZhbmNlID0gMDtcbiAgfVxuXG4gIGlmICh5QWR2YW5jZSA9PT0gdm9pZCAwKSB7XG4gICAgeUFkdmFuY2UgPSAwO1xuICB9XG5cbiAgaWYgKHhPZmZzZXQgPT09IHZvaWQgMCkge1xuICAgIHhPZmZzZXQgPSAwO1xuICB9XG5cbiAgaWYgKHlPZmZzZXQgPT09IHZvaWQgMCkge1xuICAgIHlPZmZzZXQgPSAwO1xuICB9XG5cbiAgLyoqXHJcbiAgICogVGhlIGFtb3VudCB0byBtb3ZlIHRoZSB2aXJ0dWFsIHBlbiBpbiB0aGUgWCBkaXJlY3Rpb24gYWZ0ZXIgcmVuZGVyaW5nIHRoaXMgZ2x5cGguXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cbiAgdGhpcy54QWR2YW5jZSA9IHhBZHZhbmNlO1xuICAvKipcclxuICAgKiBUaGUgYW1vdW50IHRvIG1vdmUgdGhlIHZpcnR1YWwgcGVuIGluIHRoZSBZIGRpcmVjdGlvbiBhZnRlciByZW5kZXJpbmcgdGhpcyBnbHlwaC5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xuXG4gIHRoaXMueUFkdmFuY2UgPSB5QWR2YW5jZTtcbiAgLyoqXHJcbiAgICogVGhlIG9mZnNldCBmcm9tIHRoZSBwZW4gcG9zaXRpb24gaW4gdGhlIFggZGlyZWN0aW9uIGF0IHdoaWNoIHRvIHJlbmRlciB0aGlzIGdseXBoLlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXG5cbiAgdGhpcy54T2Zmc2V0ID0geE9mZnNldDtcbiAgLyoqXHJcbiAgICogVGhlIG9mZnNldCBmcm9tIHRoZSBwZW4gcG9zaXRpb24gaW4gdGhlIFkgZGlyZWN0aW9uIGF0IHdoaWNoIHRvIHJlbmRlciB0aGlzIGdseXBoLlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXG5cbiAgdGhpcy55T2Zmc2V0ID0geU9mZnNldDtcbn07IC8vIHNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZm9udHMvVHJ1ZVR5cGUtUmVmZXJlbmNlLU1hbnVhbC9STTA5L0FwcGVuZGl4Ri5odG1sXG4vLyBhbmQgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVRleHQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSGVhZGVycy9TRk5UTGF5b3V0VHlwZXMuaCBvbiBhIE1hY1xuXG5cbnZhciBmZWF0dXJlcyA9IHtcbiAgYWxsVHlwb2dyYXBoaWNGZWF0dXJlczoge1xuICAgIGNvZGU6IDAsXG4gICAgZXhjbHVzaXZlOiBmYWxzZSxcbiAgICBhbGxUeXBlRmVhdHVyZXM6IDBcbiAgfSxcbiAgbGlnYXR1cmVzOiB7XG4gICAgY29kZTogMSxcbiAgICBleGNsdXNpdmU6IGZhbHNlLFxuICAgIHJlcXVpcmVkTGlnYXR1cmVzOiAwLFxuICAgIGNvbW1vbkxpZ2F0dXJlczogMixcbiAgICByYXJlTGlnYXR1cmVzOiA0LFxuICAgIC8vIGxvZ29zOiA2XG4gICAgcmVidXNQaWN0dXJlczogOCxcbiAgICBkaXBodGhvbmdMaWdhdHVyZXM6IDEwLFxuICAgIHNxdWFyZWRMaWdhdHVyZXM6IDEyLFxuICAgIGFiYnJldlNxdWFyZWRMaWdhdHVyZXM6IDE0LFxuICAgIHN5bWJvbExpZ2F0dXJlczogMTYsXG4gICAgY29udGV4dHVhbExpZ2F0dXJlczogMTgsXG4gICAgaGlzdG9yaWNhbExpZ2F0dXJlczogMjBcbiAgfSxcbiAgY3Vyc2l2ZUNvbm5lY3Rpb246IHtcbiAgICBjb2RlOiAyLFxuICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICB1bmNvbm5lY3RlZDogMCxcbiAgICBwYXJ0aWFsbHlDb25uZWN0ZWQ6IDEsXG4gICAgY3Vyc2l2ZTogMlxuICB9LFxuICBsZXR0ZXJDYXNlOiB7XG4gICAgY29kZTogMyxcbiAgICBleGNsdXNpdmU6IHRydWVcbiAgfSxcbiAgLy8gdXBwZXJBbmRMb3dlckNhc2U6IDAgICAgICAgICAgIyBkZXByZWNhdGVkXG4gIC8vIGFsbENhcHM6IDEgICAgICAgICAgICAgICAgICAgICMgZGVwcmVjYXRlZFxuICAvLyBhbGxMb3dlckNhc2U6IDIgICAgICAgICAgICAgICAjIGRlcHJlY2F0ZWRcbiAgLy8gc21hbGxDYXBzOiAzICAgICAgICAgICAgICAgICAgIyBkZXByZWNhdGVkXG4gIC8vIGluaXRpYWxDYXBzOiA0ICAgICAgICAgICAgICAgICMgZGVwcmVjYXRlZFxuICAvLyBpbml0aWFsQ2Fwc0FuZFNtYWxsQ2FwczogNSAgICAjIGRlcHJlY2F0ZWRcbiAgdmVydGljYWxTdWJzdGl0dXRpb246IHtcbiAgICBjb2RlOiA0LFxuICAgIGV4Y2x1c2l2ZTogZmFsc2UsXG4gICAgc3Vic3RpdHV0ZVZlcnRpY2FsRm9ybXM6IDBcbiAgfSxcbiAgbGluZ3Vpc3RpY1JlYXJyYW5nZW1lbnQ6IHtcbiAgICBjb2RlOiA1LFxuICAgIGV4Y2x1c2l2ZTogZmFsc2UsXG4gICAgbGluZ3Vpc3RpY1JlYXJyYW5nZW1lbnQ6IDBcbiAgfSxcbiAgbnVtYmVyU3BhY2luZzoge1xuICAgIGNvZGU6IDYsXG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgIG1vbm9zcGFjZWROdW1iZXJzOiAwLFxuICAgIHByb3BvcnRpb25hbE51bWJlcnM6IDEsXG4gICAgdGhpcmRXaWR0aE51bWJlcnM6IDIsXG4gICAgcXVhcnRlcldpZHRoTnVtYmVyczogM1xuICB9LFxuICBzbWFydFN3YXNoOiB7XG4gICAgY29kZTogOCxcbiAgICBleGNsdXNpdmU6IGZhbHNlLFxuICAgIHdvcmRJbml0aWFsU3dhc2hlczogMCxcbiAgICB3b3JkRmluYWxTd2FzaGVzOiAyLFxuICAgIC8vIGxpbmVJbml0aWFsU3dhc2hlczogNFxuICAgIC8vIGxpbmVGaW5hbFN3YXNoZXM6IDZcbiAgICBub25GaW5hbFN3YXNoZXM6IDhcbiAgfSxcbiAgZGlhY3JpdGljczoge1xuICAgIGNvZGU6IDksXG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgIHNob3dEaWFjcml0aWNzOiAwLFxuICAgIGhpZGVEaWFjcml0aWNzOiAxLFxuICAgIGRlY29tcG9zZURpYWNyaXRpY3M6IDJcbiAgfSxcbiAgdmVydGljYWxQb3NpdGlvbjoge1xuICAgIGNvZGU6IDEwLFxuICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICBub3JtYWxQb3NpdGlvbjogMCxcbiAgICBzdXBlcmlvcnM6IDEsXG4gICAgaW5mZXJpb3JzOiAyLFxuICAgIG9yZGluYWxzOiAzLFxuICAgIHNjaWVudGlmaWNJbmZlcmlvcnM6IDRcbiAgfSxcbiAgZnJhY3Rpb25zOiB7XG4gICAgY29kZTogMTEsXG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgIG5vRnJhY3Rpb25zOiAwLFxuICAgIHZlcnRpY2FsRnJhY3Rpb25zOiAxLFxuICAgIGRpYWdvbmFsRnJhY3Rpb25zOiAyXG4gIH0sXG4gIG92ZXJsYXBwaW5nQ2hhcmFjdGVyczoge1xuICAgIGNvZGU6IDEzLFxuICAgIGV4Y2x1c2l2ZTogZmFsc2UsXG4gICAgcHJldmVudE92ZXJsYXA6IDBcbiAgfSxcbiAgdHlwb2dyYXBoaWNFeHRyYXM6IHtcbiAgICBjb2RlOiAxNCxcbiAgICBleGNsdXNpdmU6IGZhbHNlLFxuICAgIC8vIGh5cGhlbnNUb0VtRGFzaDogMFxuICAgIC8vIGh5cGhlblRvRW5EYXNoOiAyXG4gICAgc2xhc2hlZFplcm86IDRcbiAgfSxcbiAgLy8gZm9ybUludGVycm9iYW5nOiA2XG4gIC8vIHNtYXJ0UXVvdGVzOiA4XG4gIC8vIHBlcmlvZHNUb0VsbGlwc2lzOiAxMFxuICBtYXRoZW1hdGljYWxFeHRyYXM6IHtcbiAgICBjb2RlOiAxNSxcbiAgICBleGNsdXNpdmU6IGZhbHNlLFxuICAgIC8vIGh5cGhlblRvTWludXM6IDBcbiAgICAvLyBhc3RlcmlzdG9NdWx0aXBseTogMlxuICAgIC8vIHNsYXNoVG9EaXZpZGU6IDRcbiAgICAvLyBpbmVxdWFsaXR5TGlnYXR1cmVzOiA2XG4gICAgLy8gZXhwb25lbnRzOiA4XG4gICAgbWF0aGVtYXRpY2FsR3JlZWs6IDEwXG4gIH0sXG4gIG9ybmFtZW50U2V0czoge1xuICAgIGNvZGU6IDE2LFxuICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICBub09ybmFtZW50czogMCxcbiAgICBkaW5nYmF0czogMSxcbiAgICBwaUNoYXJhY3RlcnM6IDIsXG4gICAgZmxldXJvbnM6IDMsXG4gICAgZGVjb3JhdGl2ZUJvcmRlcnM6IDQsXG4gICAgaW50ZXJuYXRpb25hbFN5bWJvbHM6IDUsXG4gICAgbWF0aFN5bWJvbHM6IDZcbiAgfSxcbiAgY2hhcmFjdGVyQWx0ZXJuYXRpdmVzOiB7XG4gICAgY29kZTogMTcsXG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgIG5vQWx0ZXJuYXRlczogMFxuICB9LFxuICAvLyB1c2VyIGRlZmluZWQgb3B0aW9uc1xuICBkZXNpZ25Db21wbGV4aXR5OiB7XG4gICAgY29kZTogMTgsXG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgIGRlc2lnbkxldmVsMTogMCxcbiAgICBkZXNpZ25MZXZlbDI6IDEsXG4gICAgZGVzaWduTGV2ZWwzOiAyLFxuICAgIGRlc2lnbkxldmVsNDogMyxcbiAgICBkZXNpZ25MZXZlbDU6IDRcbiAgfSxcbiAgc3R5bGVPcHRpb25zOiB7XG4gICAgY29kZTogMTksXG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgIG5vU3R5bGVPcHRpb25zOiAwLFxuICAgIGRpc3BsYXlUZXh0OiAxLFxuICAgIGVuZ3JhdmVkVGV4dDogMixcbiAgICBpbGx1bWluYXRlZENhcHM6IDMsXG4gICAgdGl0bGluZ0NhcHM6IDQsXG4gICAgdGFsbENhcHM6IDVcbiAgfSxcbiAgY2hhcmFjdGVyU2hhcGU6IHtcbiAgICBjb2RlOiAyMCxcbiAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgdHJhZGl0aW9uYWxDaGFyYWN0ZXJzOiAwLFxuICAgIHNpbXBsaWZpZWRDaGFyYWN0ZXJzOiAxLFxuICAgIEpJUzE5NzhDaGFyYWN0ZXJzOiAyLFxuICAgIEpJUzE5ODNDaGFyYWN0ZXJzOiAzLFxuICAgIEpJUzE5OTBDaGFyYWN0ZXJzOiA0LFxuICAgIHRyYWRpdGlvbmFsQWx0T25lOiA1LFxuICAgIHRyYWRpdGlvbmFsQWx0VHdvOiA2LFxuICAgIHRyYWRpdGlvbmFsQWx0VGhyZWU6IDcsXG4gICAgdHJhZGl0aW9uYWxBbHRGb3VyOiA4LFxuICAgIHRyYWRpdGlvbmFsQWx0Rml2ZTogOSxcbiAgICBleHBlcnRDaGFyYWN0ZXJzOiAxMCxcbiAgICBKSVMyMDA0Q2hhcmFjdGVyczogMTEsXG4gICAgaG9qb0NoYXJhY3RlcnM6IDEyLFxuICAgIE5MQ0NoYXJhY3RlcnM6IDEzLFxuICAgIHRyYWRpdGlvbmFsTmFtZXNDaGFyYWN0ZXJzOiAxNFxuICB9LFxuICBudW1iZXJDYXNlOiB7XG4gICAgY29kZTogMjEsXG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgIGxvd2VyQ2FzZU51bWJlcnM6IDAsXG4gICAgdXBwZXJDYXNlTnVtYmVyczogMVxuICB9LFxuICB0ZXh0U3BhY2luZzoge1xuICAgIGNvZGU6IDIyLFxuICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICBwcm9wb3J0aW9uYWxUZXh0OiAwLFxuICAgIG1vbm9zcGFjZWRUZXh0OiAxLFxuICAgIGhhbGZXaWR0aFRleHQ6IDIsXG4gICAgdGhpcmRXaWR0aFRleHQ6IDMsXG4gICAgcXVhcnRlcldpZHRoVGV4dDogNCxcbiAgICBhbHRQcm9wb3J0aW9uYWxUZXh0OiA1LFxuICAgIGFsdEhhbGZXaWR0aFRleHQ6IDZcbiAgfSxcbiAgdHJhbnNsaXRlcmF0aW9uOiB7XG4gICAgY29kZTogMjMsXG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgIG5vVHJhbnNsaXRlcmF0aW9uOiAwXG4gIH0sXG4gIC8vIGhhbmphVG9IYW5ndWw6IDFcbiAgLy8gaGlyYWdhbmFUb0thdGFrYW5hOiAyXG4gIC8vIGthdGFrYW5hVG9IaXJhZ2FuYTogM1xuICAvLyBrYW5hVG9Sb21hbml6YXRpb246IDRcbiAgLy8gcm9tYW5pemF0aW9uVG9IaXJhZ2FuYTogNVxuICAvLyByb21hbml6YXRpb25Ub0thdGFrYW5hOiA2XG4gIC8vIGhhbmphVG9IYW5ndWxBbHRPbmU6IDdcbiAgLy8gaGFuamFUb0hhbmd1bEFsdFR3bzogOFxuICAvLyBoYW5qYVRvSGFuZ3VsQWx0VGhyZWU6IDlcbiAgYW5ub3RhdGlvbjoge1xuICAgIGNvZGU6IDI0LFxuICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICBub0Fubm90YXRpb246IDAsXG4gICAgYm94QW5ub3RhdGlvbjogMSxcbiAgICByb3VuZGVkQm94QW5ub3RhdGlvbjogMixcbiAgICBjaXJjbGVBbm5vdGF0aW9uOiAzLFxuICAgIGludmVydGVkQ2lyY2xlQW5ub3RhdGlvbjogNCxcbiAgICBwYXJlbnRoZXNpc0Fubm90YXRpb246IDUsXG4gICAgcGVyaW9kQW5ub3RhdGlvbjogNixcbiAgICByb21hbk51bWVyYWxBbm5vdGF0aW9uOiA3LFxuICAgIGRpYW1vbmRBbm5vdGF0aW9uOiA4LFxuICAgIGludmVydGVkQm94QW5ub3RhdGlvbjogOSxcbiAgICBpbnZlcnRlZFJvdW5kZWRCb3hBbm5vdGF0aW9uOiAxMFxuICB9LFxuICBrYW5hU3BhY2luZzoge1xuICAgIGNvZGU6IDI1LFxuICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICBmdWxsV2lkdGhLYW5hOiAwLFxuICAgIHByb3BvcnRpb25hbEthbmE6IDFcbiAgfSxcbiAgaWRlb2dyYXBoaWNTcGFjaW5nOiB7XG4gICAgY29kZTogMjYsXG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgIGZ1bGxXaWR0aElkZW9ncmFwaHM6IDAsXG4gICAgcHJvcG9ydGlvbmFsSWRlb2dyYXBoczogMSxcbiAgICBoYWxmV2lkdGhJZGVvZ3JhcGhzOiAyXG4gIH0sXG4gIHVuaWNvZGVEZWNvbXBvc2l0aW9uOiB7XG4gICAgY29kZTogMjcsXG4gICAgZXhjbHVzaXZlOiBmYWxzZSxcbiAgICBjYW5vbmljYWxDb21wb3NpdGlvbjogMCxcbiAgICBjb21wYXRpYmlsaXR5Q29tcG9zaXRpb246IDIsXG4gICAgdHJhbnNjb2RpbmdDb21wb3NpdGlvbjogNFxuICB9LFxuICBydWJ5S2FuYToge1xuICAgIGNvZGU6IDI4LFxuICAgIGV4Y2x1c2l2ZTogZmFsc2UsXG4gICAgLy8gbm9SdWJ5S2FuYTogMCAgICAgIyBkZXByZWNhdGVkIC0gdXNlIHJ1YnlLYW5hT2ZmIGluc3RlYWRcbiAgICAvLyBydWJ5S2FuYTogMSAgICAgIyBkZXByZWNhdGVkIC0gdXNlIHJ1YnlLYW5hT24gaW5zdGVhZFxuICAgIHJ1YnlLYW5hOiAyXG4gIH0sXG4gIENKS1N5bWJvbEFsdGVybmF0aXZlczoge1xuICAgIGNvZGU6IDI5LFxuICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICBub0NKS1N5bWJvbEFsdGVybmF0aXZlczogMCxcbiAgICBDSktTeW1ib2xBbHRPbmU6IDEsXG4gICAgQ0pLU3ltYm9sQWx0VHdvOiAyLFxuICAgIENKS1N5bWJvbEFsdFRocmVlOiAzLFxuICAgIENKS1N5bWJvbEFsdEZvdXI6IDQsXG4gICAgQ0pLU3ltYm9sQWx0Rml2ZTogNVxuICB9LFxuICBpZGVvZ3JhcGhpY0FsdGVybmF0aXZlczoge1xuICAgIGNvZGU6IDMwLFxuICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICBub0lkZW9ncmFwaGljQWx0ZXJuYXRpdmVzOiAwLFxuICAgIGlkZW9ncmFwaGljQWx0T25lOiAxLFxuICAgIGlkZW9ncmFwaGljQWx0VHdvOiAyLFxuICAgIGlkZW9ncmFwaGljQWx0VGhyZWU6IDMsXG4gICAgaWRlb2dyYXBoaWNBbHRGb3VyOiA0LFxuICAgIGlkZW9ncmFwaGljQWx0Rml2ZTogNVxuICB9LFxuICBDSktWZXJ0aWNhbFJvbWFuUGxhY2VtZW50OiB7XG4gICAgY29kZTogMzEsXG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgIENKS1ZlcnRpY2FsUm9tYW5DZW50ZXJlZDogMCxcbiAgICBDSktWZXJ0aWNhbFJvbWFuSEJhc2VsaW5lOiAxXG4gIH0sXG4gIGl0YWxpY0NKS1JvbWFuOiB7XG4gICAgY29kZTogMzIsXG4gICAgZXhjbHVzaXZlOiBmYWxzZSxcbiAgICAvLyBub0NKS0l0YWxpY1JvbWFuOiAwICAgICAjIGRlcHJlY2F0ZWQgLSB1c2UgQ0pLSXRhbGljUm9tYW5PZmYgaW5zdGVhZFxuICAgIC8vIENKS0l0YWxpY1JvbWFuOiAxICAgICAjIGRlcHJlY2F0ZWQgLSB1c2UgQ0pLSXRhbGljUm9tYW5PbiBpbnN0ZWFkXG4gICAgQ0pLSXRhbGljUm9tYW46IDJcbiAgfSxcbiAgY2FzZVNlbnNpdGl2ZUxheW91dDoge1xuICAgIGNvZGU6IDMzLFxuICAgIGV4Y2x1c2l2ZTogZmFsc2UsXG4gICAgY2FzZVNlbnNpdGl2ZUxheW91dDogMCxcbiAgICBjYXNlU2Vuc2l0aXZlU3BhY2luZzogMlxuICB9LFxuICBhbHRlcm5hdGVLYW5hOiB7XG4gICAgY29kZTogMzQsXG4gICAgZXhjbHVzaXZlOiBmYWxzZSxcbiAgICBhbHRlcm5hdGVIb3JpekthbmE6IDAsXG4gICAgYWx0ZXJuYXRlVmVydEthbmE6IDJcbiAgfSxcbiAgc3R5bGlzdGljQWx0ZXJuYXRpdmVzOiB7XG4gICAgY29kZTogMzUsXG4gICAgZXhjbHVzaXZlOiBmYWxzZSxcbiAgICBub1N0eWxpc3RpY0FsdGVybmF0ZXM6IDAsXG4gICAgc3R5bGlzdGljQWx0T25lOiAyLFxuICAgIHN0eWxpc3RpY0FsdFR3bzogNCxcbiAgICBzdHlsaXN0aWNBbHRUaHJlZTogNixcbiAgICBzdHlsaXN0aWNBbHRGb3VyOiA4LFxuICAgIHN0eWxpc3RpY0FsdEZpdmU6IDEwLFxuICAgIHN0eWxpc3RpY0FsdFNpeDogMTIsXG4gICAgc3R5bGlzdGljQWx0U2V2ZW46IDE0LFxuICAgIHN0eWxpc3RpY0FsdEVpZ2h0OiAxNixcbiAgICBzdHlsaXN0aWNBbHROaW5lOiAxOCxcbiAgICBzdHlsaXN0aWNBbHRUZW46IDIwLFxuICAgIHN0eWxpc3RpY0FsdEVsZXZlbjogMjIsXG4gICAgc3R5bGlzdGljQWx0VHdlbHZlOiAyNCxcbiAgICBzdHlsaXN0aWNBbHRUaGlydGVlbjogMjYsXG4gICAgc3R5bGlzdGljQWx0Rm91cnRlZW46IDI4LFxuICAgIHN0eWxpc3RpY0FsdEZpZnRlZW46IDMwLFxuICAgIHN0eWxpc3RpY0FsdFNpeHRlZW46IDMyLFxuICAgIHN0eWxpc3RpY0FsdFNldmVudGVlbjogMzQsXG4gICAgc3R5bGlzdGljQWx0RWlnaHRlZW46IDM2LFxuICAgIHN0eWxpc3RpY0FsdE5pbmV0ZWVuOiAzOCxcbiAgICBzdHlsaXN0aWNBbHRUd2VudHk6IDQwXG4gIH0sXG4gIGNvbnRleHR1YWxBbHRlcm5hdGVzOiB7XG4gICAgY29kZTogMzYsXG4gICAgZXhjbHVzaXZlOiBmYWxzZSxcbiAgICBjb250ZXh0dWFsQWx0ZXJuYXRlczogMCxcbiAgICBzd2FzaEFsdGVybmF0ZXM6IDIsXG4gICAgY29udGV4dHVhbFN3YXNoQWx0ZXJuYXRlczogNFxuICB9LFxuICBsb3dlckNhc2U6IHtcbiAgICBjb2RlOiAzNyxcbiAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgZGVmYXVsdExvd2VyQ2FzZTogMCxcbiAgICBsb3dlckNhc2VTbWFsbENhcHM6IDEsXG4gICAgbG93ZXJDYXNlUGV0aXRlQ2FwczogMlxuICB9LFxuICB1cHBlckNhc2U6IHtcbiAgICBjb2RlOiAzOCxcbiAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgZGVmYXVsdFVwcGVyQ2FzZTogMCxcbiAgICB1cHBlckNhc2VTbWFsbENhcHM6IDEsXG4gICAgdXBwZXJDYXNlUGV0aXRlQ2FwczogMlxuICB9LFxuICBsYW5ndWFnZVRhZzoge1xuICAgIC8vIGluZGljZXMgaW50byBsdGFnIHRhYmxlXG4gICAgY29kZTogMzksXG4gICAgZXhjbHVzaXZlOiB0cnVlXG4gIH0sXG4gIENKS1JvbWFuU3BhY2luZzoge1xuICAgIGNvZGU6IDEwMyxcbiAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgaGFsZldpZHRoQ0pLUm9tYW46IDAsXG4gICAgcHJvcG9ydGlvbmFsQ0pLUm9tYW46IDEsXG4gICAgZGVmYXVsdENKS1JvbWFuOiAyLFxuICAgIGZ1bGxXaWR0aENKS1JvbWFuOiAzXG4gIH1cbn07XG5cbnZhciBmZWF0dXJlID0gZnVuY3Rpb24gZmVhdHVyZShuYW1lLCBzZWxlY3Rvcikge1xuICByZXR1cm4gW2ZlYXR1cmVzW25hbWVdLmNvZGUsIGZlYXR1cmVzW25hbWVdW3NlbGVjdG9yXV07XG59O1xuXG52YXIgT1RNYXBwaW5nID0ge1xuICBybGlnOiBmZWF0dXJlKCdsaWdhdHVyZXMnLCAncmVxdWlyZWRMaWdhdHVyZXMnKSxcbiAgY2xpZzogZmVhdHVyZSgnbGlnYXR1cmVzJywgJ2NvbnRleHR1YWxMaWdhdHVyZXMnKSxcbiAgZGxpZzogZmVhdHVyZSgnbGlnYXR1cmVzJywgJ3JhcmVMaWdhdHVyZXMnKSxcbiAgaGxpZzogZmVhdHVyZSgnbGlnYXR1cmVzJywgJ2hpc3RvcmljYWxMaWdhdHVyZXMnKSxcbiAgbGlnYTogZmVhdHVyZSgnbGlnYXR1cmVzJywgJ2NvbW1vbkxpZ2F0dXJlcycpLFxuICBoaXN0OiBmZWF0dXJlKCdsaWdhdHVyZXMnLCAnaGlzdG9yaWNhbExpZ2F0dXJlcycpLFxuICAvLyA/P1xuICBzbWNwOiBmZWF0dXJlKCdsb3dlckNhc2UnLCAnbG93ZXJDYXNlU21hbGxDYXBzJyksXG4gIHBjYXA6IGZlYXR1cmUoJ2xvd2VyQ2FzZScsICdsb3dlckNhc2VQZXRpdGVDYXBzJyksXG4gIGZyYWM6IGZlYXR1cmUoJ2ZyYWN0aW9ucycsICdkaWFnb25hbEZyYWN0aW9ucycpLFxuICBkbm9tOiBmZWF0dXJlKCdmcmFjdGlvbnMnLCAnZGlhZ29uYWxGcmFjdGlvbnMnKSxcbiAgLy8gPz9cbiAgbnVtcjogZmVhdHVyZSgnZnJhY3Rpb25zJywgJ2RpYWdvbmFsRnJhY3Rpb25zJyksXG4gIC8vID8/XG4gIGFmcmM6IGZlYXR1cmUoJ2ZyYWN0aW9ucycsICd2ZXJ0aWNhbEZyYWN0aW9ucycpLFxuICAvLyBhYWx0XG4gIC8vIGFidmYsIGFidm0sIGFidnMsIGFraG4sIGJsd2YsIGJsd20sIGJsd3MsIGNmYXIsIGNqY3QsIGNwc3AsIGZhbHQsIGlzb2wsIGphbHQsIGxqbW8sIG1zZXQ/XG4gIC8vIGx0cmEsIGx0cm0sIG51a3QsIHByZWYsIHByZXMsIHBzdGYsIHBzdHMsIHJhbmQsIHJrcmYsIHJwaGYsIHJ0bGEsIHJ0bG0sIHNpemUsIHRqbW8sIHRudW0/XG4gIC8vIHVuaWMsIHZhdHUsIHZoYWwsIHZqbW8sIHZwYWwsIHZydDJcbiAgLy8gZGlzdCAtPiB0cmFrIHRhYmxlP1xuICAvLyBrZXJuLCB2a3JuIC0+IGtlcm4gdGFibGVcbiAgLy8gbGZiZCArIG9wYmQgKyBydGJkIC0+IG9wYmQgdGFibGU/XG4gIC8vIG1hcmssIG1rbWsgLT4gYWNudCB0YWJsZT9cbiAgLy8gbG9jbCAtPiBsYW5ndWFnZVRhZyArIGx0YWcgdGFibGVcbiAgY2FzZTogZmVhdHVyZSgnY2FzZVNlbnNpdGl2ZUxheW91dCcsICdjYXNlU2Vuc2l0aXZlTGF5b3V0JyksXG4gIC8vIGFsc28gY2FzZVNlbnNpdGl2ZVNwYWNpbmdcbiAgY2NtcDogZmVhdHVyZSgndW5pY29kZURlY29tcG9zaXRpb24nLCAnY2Fub25pY2FsQ29tcG9zaXRpb24nKSxcbiAgLy8gY29tcGF0aWJpbGl0eUNvbXBvc2l0aW9uP1xuICBjcGN0OiBmZWF0dXJlKCdDSktWZXJ0aWNhbFJvbWFuUGxhY2VtZW50JywgJ0NKS1ZlcnRpY2FsUm9tYW5DZW50ZXJlZCcpLFxuICAvLyBndWVzcy4uLiwgcHJvYmFibHkgbm90IGdpdmVuIGJlbG93XG4gIHZhbHQ6IGZlYXR1cmUoJ0NKS1ZlcnRpY2FsUm9tYW5QbGFjZW1lbnQnLCAnQ0pLVmVydGljYWxSb21hbkNlbnRlcmVkJyksXG4gIHN3c2g6IGZlYXR1cmUoJ2NvbnRleHR1YWxBbHRlcm5hdGVzJywgJ3N3YXNoQWx0ZXJuYXRlcycpLFxuICBjc3doOiBmZWF0dXJlKCdjb250ZXh0dWFsQWx0ZXJuYXRlcycsICdjb250ZXh0dWFsU3dhc2hBbHRlcm5hdGVzJyksXG4gIGN1cnM6IGZlYXR1cmUoJ2N1cnNpdmVDb25uZWN0aW9uJywgJ2N1cnNpdmUnKSxcbiAgLy8gPz9cbiAgYzJwYzogZmVhdHVyZSgndXBwZXJDYXNlJywgJ3VwcGVyQ2FzZVBldGl0ZUNhcHMnKSxcbiAgYzJzYzogZmVhdHVyZSgndXBwZXJDYXNlJywgJ3VwcGVyQ2FzZVNtYWxsQ2FwcycpLFxuICBpbml0OiBmZWF0dXJlKCdzbWFydFN3YXNoJywgJ3dvcmRJbml0aWFsU3dhc2hlcycpLFxuICAvLyA/P1xuICBmaW4yOiBmZWF0dXJlKCdzbWFydFN3YXNoJywgJ3dvcmRGaW5hbFN3YXNoZXMnKSxcbiAgLy8gPz9cbiAgbWVkaTogZmVhdHVyZSgnc21hcnRTd2FzaCcsICdub25GaW5hbFN3YXNoZXMnKSxcbiAgLy8gPz9cbiAgbWVkMjogZmVhdHVyZSgnc21hcnRTd2FzaCcsICdub25GaW5hbFN3YXNoZXMnKSxcbiAgLy8gPz9cbiAgZmluMzogZmVhdHVyZSgnc21hcnRTd2FzaCcsICd3b3JkRmluYWxTd2FzaGVzJyksXG4gIC8vID8/XG4gIGZpbmE6IGZlYXR1cmUoJ3NtYXJ0U3dhc2gnLCAnd29yZEZpbmFsU3dhc2hlcycpLFxuICAvLyA/P1xuICBwa25hOiBmZWF0dXJlKCdrYW5hU3BhY2luZycsICdwcm9wb3J0aW9uYWxLYW5hJyksXG4gIGhhbGY6IGZlYXR1cmUoJ3RleHRTcGFjaW5nJywgJ2hhbGZXaWR0aFRleHQnKSxcbiAgLy8gYWxzbyBIYWxmV2lkdGhDSktSb21hbiwgSGFsZldpZHRoSWRlb2dyYXBocz9cbiAgaGFsdDogZmVhdHVyZSgndGV4dFNwYWNpbmcnLCAnYWx0SGFsZldpZHRoVGV4dCcpLFxuICBoa25hOiBmZWF0dXJlKCdhbHRlcm5hdGVLYW5hJywgJ2FsdGVybmF0ZUhvcml6S2FuYScpLFxuICB2a25hOiBmZWF0dXJlKCdhbHRlcm5hdGVLYW5hJywgJ2FsdGVybmF0ZVZlcnRLYW5hJyksXG4gIC8vIGhuZ2w6IGZlYXR1cmUgJ3RyYW5zbGl0ZXJhdGlvbicsICdoYW5qYVRvSGFuZ3VsU2VsZWN0b3InICMgZGVwcmVjYXRlZFxuICBpdGFsOiBmZWF0dXJlKCdpdGFsaWNDSktSb21hbicsICdDSktJdGFsaWNSb21hbicpLFxuICBsbnVtOiBmZWF0dXJlKCdudW1iZXJDYXNlJywgJ3VwcGVyQ2FzZU51bWJlcnMnKSxcbiAgb251bTogZmVhdHVyZSgnbnVtYmVyQ2FzZScsICdsb3dlckNhc2VOdW1iZXJzJyksXG4gIG1ncms6IGZlYXR1cmUoJ21hdGhlbWF0aWNhbEV4dHJhcycsICdtYXRoZW1hdGljYWxHcmVlaycpLFxuICAvLyBuYWx0OiBub3QgZW5vdWdoIGluZm8uIHdoYXQgdHlwZSBvZiBhbm5vdGF0aW9uP1xuICAvLyBvcm5tOiBkaXR0bywgd2hpY2ggb3JuYW1lbnQgc3R5bGU/XG4gIGNhbHQ6IGZlYXR1cmUoJ2NvbnRleHR1YWxBbHRlcm5hdGVzJywgJ2NvbnRleHR1YWxBbHRlcm5hdGVzJyksXG4gIC8vIG9yIG1vcmU/XG4gIHZydDI6IGZlYXR1cmUoJ3ZlcnRpY2FsU3Vic3RpdHV0aW9uJywgJ3N1YnN0aXR1dGVWZXJ0aWNhbEZvcm1zJyksXG4gIC8vIG9oLi4uIGJlbG93P1xuICB2ZXJ0OiBmZWF0dXJlKCd2ZXJ0aWNhbFN1YnN0aXR1dGlvbicsICdzdWJzdGl0dXRlVmVydGljYWxGb3JtcycpLFxuICB0bnVtOiBmZWF0dXJlKCdudW1iZXJTcGFjaW5nJywgJ21vbm9zcGFjZWROdW1iZXJzJyksXG4gIHBudW06IGZlYXR1cmUoJ251bWJlclNwYWNpbmcnLCAncHJvcG9ydGlvbmFsTnVtYmVycycpLFxuICBzdXBzOiBmZWF0dXJlKCd2ZXJ0aWNhbFBvc2l0aW9uJywgJ3N1cGVyaW9ycycpLFxuICBzdWJzOiBmZWF0dXJlKCd2ZXJ0aWNhbFBvc2l0aW9uJywgJ2luZmVyaW9ycycpLFxuICBvcmRuOiBmZWF0dXJlKCd2ZXJ0aWNhbFBvc2l0aW9uJywgJ29yZGluYWxzJyksXG4gIHB3aWQ6IGZlYXR1cmUoJ3RleHRTcGFjaW5nJywgJ3Byb3BvcnRpb25hbFRleHQnKSxcbiAgaHdpZDogZmVhdHVyZSgndGV4dFNwYWNpbmcnLCAnaGFsZldpZHRoVGV4dCcpLFxuICBxd2lkOiBmZWF0dXJlKCd0ZXh0U3BhY2luZycsICdxdWFydGVyV2lkdGhUZXh0JyksXG4gIC8vIGFsc28gUXVhcnRlcldpZHRoTnVtYmVycz9cbiAgdHdpZDogZmVhdHVyZSgndGV4dFNwYWNpbmcnLCAndGhpcmRXaWR0aFRleHQnKSxcbiAgLy8gYWxzbyBUaGlyZFdpZHRoTnVtYmVycz9cbiAgZndpZDogZmVhdHVyZSgndGV4dFNwYWNpbmcnLCAncHJvcG9ydGlvbmFsVGV4dCcpLFxuICAvLz8/XG4gIHBhbHQ6IGZlYXR1cmUoJ3RleHRTcGFjaW5nJywgJ2FsdFByb3BvcnRpb25hbFRleHQnKSxcbiAgdHJhZDogZmVhdHVyZSgnY2hhcmFjdGVyU2hhcGUnLCAndHJhZGl0aW9uYWxDaGFyYWN0ZXJzJyksXG4gIHNtcGw6IGZlYXR1cmUoJ2NoYXJhY3RlclNoYXBlJywgJ3NpbXBsaWZpZWRDaGFyYWN0ZXJzJyksXG4gIGpwNzg6IGZlYXR1cmUoJ2NoYXJhY3RlclNoYXBlJywgJ0pJUzE5NzhDaGFyYWN0ZXJzJyksXG4gIGpwODM6IGZlYXR1cmUoJ2NoYXJhY3RlclNoYXBlJywgJ0pJUzE5ODNDaGFyYWN0ZXJzJyksXG4gIGpwOTA6IGZlYXR1cmUoJ2NoYXJhY3RlclNoYXBlJywgJ0pJUzE5OTBDaGFyYWN0ZXJzJyksXG4gIGpwMDQ6IGZlYXR1cmUoJ2NoYXJhY3RlclNoYXBlJywgJ0pJUzIwMDRDaGFyYWN0ZXJzJyksXG4gIGV4cHQ6IGZlYXR1cmUoJ2NoYXJhY3RlclNoYXBlJywgJ2V4cGVydENoYXJhY3RlcnMnKSxcbiAgaG9qbzogZmVhdHVyZSgnY2hhcmFjdGVyU2hhcGUnLCAnaG9qb0NoYXJhY3RlcnMnKSxcbiAgbmxjazogZmVhdHVyZSgnY2hhcmFjdGVyU2hhcGUnLCAnTkxDQ2hhcmFjdGVycycpLFxuICB0bmFtOiBmZWF0dXJlKCdjaGFyYWN0ZXJTaGFwZScsICd0cmFkaXRpb25hbE5hbWVzQ2hhcmFjdGVycycpLFxuICBydWJ5OiBmZWF0dXJlKCdydWJ5S2FuYScsICdydWJ5S2FuYScpLFxuICB0aXRsOiBmZWF0dXJlKCdzdHlsZU9wdGlvbnMnLCAndGl0bGluZ0NhcHMnKSxcbiAgemVybzogZmVhdHVyZSgndHlwb2dyYXBoaWNFeHRyYXMnLCAnc2xhc2hlZFplcm8nKSxcbiAgc3MwMTogZmVhdHVyZSgnc3R5bGlzdGljQWx0ZXJuYXRpdmVzJywgJ3N0eWxpc3RpY0FsdE9uZScpLFxuICBzczAyOiBmZWF0dXJlKCdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0VHdvJyksXG4gIHNzMDM6IGZlYXR1cmUoJ3N0eWxpc3RpY0FsdGVybmF0aXZlcycsICdzdHlsaXN0aWNBbHRUaHJlZScpLFxuICBzczA0OiBmZWF0dXJlKCdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0Rm91cicpLFxuICBzczA1OiBmZWF0dXJlKCdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0Rml2ZScpLFxuICBzczA2OiBmZWF0dXJlKCdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0U2l4JyksXG4gIHNzMDc6IGZlYXR1cmUoJ3N0eWxpc3RpY0FsdGVybmF0aXZlcycsICdzdHlsaXN0aWNBbHRTZXZlbicpLFxuICBzczA4OiBmZWF0dXJlKCdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0RWlnaHQnKSxcbiAgc3MwOTogZmVhdHVyZSgnc3R5bGlzdGljQWx0ZXJuYXRpdmVzJywgJ3N0eWxpc3RpY0FsdE5pbmUnKSxcbiAgc3MxMDogZmVhdHVyZSgnc3R5bGlzdGljQWx0ZXJuYXRpdmVzJywgJ3N0eWxpc3RpY0FsdFRlbicpLFxuICBzczExOiBmZWF0dXJlKCdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0RWxldmVuJyksXG4gIHNzMTI6IGZlYXR1cmUoJ3N0eWxpc3RpY0FsdGVybmF0aXZlcycsICdzdHlsaXN0aWNBbHRUd2VsdmUnKSxcbiAgc3MxMzogZmVhdHVyZSgnc3R5bGlzdGljQWx0ZXJuYXRpdmVzJywgJ3N0eWxpc3RpY0FsdFRoaXJ0ZWVuJyksXG4gIHNzMTQ6IGZlYXR1cmUoJ3N0eWxpc3RpY0FsdGVybmF0aXZlcycsICdzdHlsaXN0aWNBbHRGb3VydGVlbicpLFxuICBzczE1OiBmZWF0dXJlKCdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0RmlmdGVlbicpLFxuICBzczE2OiBmZWF0dXJlKCdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0U2l4dGVlbicpLFxuICBzczE3OiBmZWF0dXJlKCdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0U2V2ZW50ZWVuJyksXG4gIHNzMTg6IGZlYXR1cmUoJ3N0eWxpc3RpY0FsdGVybmF0aXZlcycsICdzdHlsaXN0aWNBbHRFaWdodGVlbicpLFxuICBzczE5OiBmZWF0dXJlKCdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0TmluZXRlZW4nKSxcbiAgc3MyMDogZmVhdHVyZSgnc3R5bGlzdGljQWx0ZXJuYXRpdmVzJywgJ3N0eWxpc3RpY0FsdFR3ZW50eScpXG59OyAvLyBzYWx0OiBmZWF0dXJlICdzdHlsaXN0aWNBbHRlcm5hdGl2ZXMnLCAnc3R5bGlzdGljQWx0T25lJyAjIGhtbSwgd2hpY2ggb25lIHRvIGNob29zZVxuLy8gQWRkIGN2MDEtY3Y5OSBmZWF0dXJlc1xuXG5mb3IgKHZhciBpID0gMTsgaSA8PSA5OTsgaSsrKSB7XG4gIE9UTWFwcGluZ1tcImN2XCIuY29uY2F0KFwiMDBcIi5jb25jYXQoaSkuc2xpY2UoLTIpKV0gPSBbZmVhdHVyZXMuY2hhcmFjdGVyQWx0ZXJuYXRpdmVzLmNvZGUsIGldO1xufSAvLyBjcmVhdGUgaW52ZXJzZSBtYXBwaW5nXG5cblxudmFyIEFBVE1hcHBpbmcgPSB7fTtcblxuZm9yICh2YXIgb3QgaW4gT1RNYXBwaW5nKSB7XG4gIHZhciBhYXQgPSBPVE1hcHBpbmdbb3RdO1xuXG4gIGlmIChBQVRNYXBwaW5nW2FhdFswXV0gPT0gbnVsbCkge1xuICAgIEFBVE1hcHBpbmdbYWF0WzBdXSA9IHt9O1xuICB9XG5cbiAgQUFUTWFwcGluZ1thYXRbMF1dW2FhdFsxXV0gPSBvdDtcbn0gLy8gTWFwcyBhbiBhcnJheSBvZiBPcGVuVHlwZSBmZWF0dXJlcyB0byBBQVQgZmVhdHVyZXNcbi8vIGluIHRoZSBmb3JtIG9mIHtmZWF0dXJlVHlwZTp7ZmVhdHVyZVNldHRpbmc6dHJ1ZX19XG5cblxuZnVuY3Rpb24gbWFwT1RUb0FBVChmZWF0dXJlcykge1xuICB2YXIgcmVzID0ge307XG5cbiAgZm9yICh2YXIgayBpbiBmZWF0dXJlcykge1xuICAgIHZhciByID0gdm9pZCAwO1xuXG4gICAgaWYgKHIgPSBPVE1hcHBpbmdba10pIHtcbiAgICAgIGlmIChyZXNbclswXV0gPT0gbnVsbCkge1xuICAgICAgICByZXNbclswXV0gPSB7fTtcbiAgICAgIH1cblxuICAgICAgcmVzW3JbMF1dW3JbMV1dID0gZmVhdHVyZXNba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn0gLy8gTWFwcyBzdHJpbmdzIGluIGEgW2ZlYXR1cmVUeXBlLCBmZWF0dXJlU2V0dGluZ11cbi8vIHRvIHRoZWlyIGVxdWl2YWxlbnQgbnVtYmVyIGNvZGVzXG5cblxuZnVuY3Rpb24gbWFwRmVhdHVyZVN0cmluZ3MoZikge1xuICB2YXIgdHlwZSA9IGZbMF0sXG4gICAgICBzZXR0aW5nID0gZlsxXTtcblxuICBpZiAoaXNOYU4odHlwZSkpIHtcbiAgICB2YXIgdHlwZUNvZGUgPSBmZWF0dXJlc1t0eXBlXSAmJiBmZWF0dXJlc1t0eXBlXS5jb2RlO1xuICB9IGVsc2Uge1xuICAgIHZhciB0eXBlQ29kZSA9IHR5cGU7XG4gIH1cblxuICBpZiAoaXNOYU4oc2V0dGluZykpIHtcbiAgICB2YXIgc2V0dGluZ0NvZGUgPSBmZWF0dXJlc1t0eXBlXSAmJiBmZWF0dXJlc1t0eXBlXVtzZXR0aW5nXTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2V0dGluZ0NvZGUgPSBzZXR0aW5nO1xuICB9XG5cbiAgcmV0dXJuIFt0eXBlQ29kZSwgc2V0dGluZ0NvZGVdO1xufSAvLyBNYXBzIEFBVCBmZWF0dXJlcyB0byBhbiBhcnJheSBvZiBPcGVuVHlwZSBmZWF0dXJlc1xuLy8gU3VwcG9ydHMgYm90aCBhcnJheXMgaW4gdGhlIGZvcm0gb2YgW1tmZWF0dXJlVHlwZSwgZmVhdHVyZVNldHRpbmddXVxuLy8gYW5kIG9iamVjdHMgaW4gdGhlIGZvcm0gb2Yge2ZlYXR1cmVUeXBlOntmZWF0dXJlU2V0dGluZzp0cnVlfX1cbi8vIGZlYXR1cmVUeXBlcyBhbmQgZmVhdHVyZVNldHRpbmdzIGNhbiBiZSBlaXRoZXIgc3RyaW5ncyBvciBudW1iZXIgY29kZXNcblxuXG5mdW5jdGlvbiBtYXBBQVRUb09UKGZlYXR1cmVzKSB7XG4gIHZhciByZXMgPSB7fTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShmZWF0dXJlcykpIHtcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IGZlYXR1cmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICB2YXIgciA9IHZvaWQgMDtcbiAgICAgIHZhciBmID0gbWFwRmVhdHVyZVN0cmluZ3MoZmVhdHVyZXNba10pO1xuXG4gICAgICBpZiAociA9IEFBVE1hcHBpbmdbZlswXV0gJiYgQUFUTWFwcGluZ1tmWzBdXVtmWzFdXSkge1xuICAgICAgICByZXNbcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZmVhdHVyZXMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yICh2YXIgdHlwZSBpbiBmZWF0dXJlcykge1xuICAgICAgdmFyIF9mZWF0dXJlID0gZmVhdHVyZXNbdHlwZV07XG5cbiAgICAgIGZvciAodmFyIHNldHRpbmcgaW4gX2ZlYXR1cmUpIHtcbiAgICAgICAgdmFyIF9yID0gdm9pZCAwO1xuXG4gICAgICAgIHZhciBfZiA9IG1hcEZlYXR1cmVTdHJpbmdzKFt0eXBlLCBzZXR0aW5nXSk7XG5cbiAgICAgICAgaWYgKF9mZWF0dXJlW3NldHRpbmddICYmIChfciA9IEFBVE1hcHBpbmdbX2ZbMF1dICYmIEFBVE1hcHBpbmdbX2ZbMF1dW19mWzFdXSkpIHtcbiAgICAgICAgICByZXNbX3JdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyhyZXMpO1xufVxuXG52YXIgX2NsYXNzJDE7XG5cbnZhciBBQVRMb29rdXBUYWJsZSA9IChfY2xhc3MkMSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEFBVExvb2t1cFRhYmxlKHRhYmxlKSB7XG4gICAgdGhpcy50YWJsZSA9IHRhYmxlO1xuICB9XG5cbiAgdmFyIF9wcm90bzE5ID0gQUFUTG9va3VwVGFibGUucHJvdG90eXBlO1xuXG4gIF9wcm90bzE5Lmxvb2t1cCA9IGZ1bmN0aW9uIGxvb2t1cChnbHlwaCkge1xuICAgIHN3aXRjaCAodGhpcy50YWJsZS52ZXJzaW9uKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIC8vIHNpbXBsZSBhcnJheSBmb3JtYXRcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUudmFsdWVzLmdldEl0ZW0oZ2x5cGgpO1xuXG4gICAgICBjYXNlIDI6IC8vIHNlZ21lbnQgZm9ybWF0XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBtaW4gPSAwO1xuICAgICAgICAgIHZhciBtYXggPSB0aGlzLnRhYmxlLmJpbmFyeVNlYXJjaEhlYWRlci5uVW5pdHMgLSAxO1xuXG4gICAgICAgICAgd2hpbGUgKG1pbiA8PSBtYXgpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBtaW4gKyBtYXggPj4gMTtcbiAgICAgICAgICAgIHZhciBzZWcgPSB0aGlzLnRhYmxlLnNlZ21lbnRzW21pZF07IC8vIHNwZWNpYWwgZW5kIG9mIHNlYXJjaCB2YWx1ZVxuXG4gICAgICAgICAgICBpZiAoc2VnLmZpcnN0R2x5cGggPT09IDB4ZmZmZikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGdseXBoIDwgc2VnLmZpcnN0R2x5cGgpIHtcbiAgICAgICAgICAgICAgbWF4ID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2x5cGggPiBzZWcubGFzdEdseXBoKSB7XG4gICAgICAgICAgICAgIG1pbiA9IG1pZCArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZS52ZXJzaW9uID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlZy52YWx1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VnLnZhbHVlc1tnbHlwaCAtIHNlZy5maXJzdEdseXBoXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgNjpcbiAgICAgICAge1xuICAgICAgICAgIC8vIGxvb2t1cCBzaW5nbGVcbiAgICAgICAgICB2YXIgX21pbiA9IDA7XG5cbiAgICAgICAgICB2YXIgX21heCA9IHRoaXMudGFibGUuYmluYXJ5U2VhcmNoSGVhZGVyLm5Vbml0cyAtIDE7XG5cbiAgICAgICAgICB3aGlsZSAoX21pbiA8PSBfbWF4KSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gX21pbiArIF9tYXggPj4gMTtcbiAgICAgICAgICAgIHZhciBzZWcgPSB0aGlzLnRhYmxlLnNlZ21lbnRzW21pZF07IC8vIHNwZWNpYWwgZW5kIG9mIHNlYXJjaCB2YWx1ZVxuXG4gICAgICAgICAgICBpZiAoc2VnLmdseXBoID09PSAweGZmZmYpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChnbHlwaCA8IHNlZy5nbHlwaCkge1xuICAgICAgICAgICAgICBfbWF4ID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2x5cGggPiBzZWcuZ2x5cGgpIHtcbiAgICAgICAgICAgICAgX21pbiA9IG1pZCArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gc2VnLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgODpcbiAgICAgICAgLy8gbG9va3VwIHRyaW1tZWRcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUudmFsdWVzW2dseXBoIC0gdGhpcy50YWJsZS5maXJzdEdseXBoXTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBsb29rdXAgdGFibGUgZm9ybWF0OiBcIi5jb25jYXQodGhpcy50YWJsZS52ZXJzaW9uKSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzE5LmdseXBoc0ZvclZhbHVlID0gZnVuY3Rpb24gZ2x5cGhzRm9yVmFsdWUoY2xhc3NWYWx1ZSkge1xuICAgIHZhciByZXMgPSBbXTtcblxuICAgIHN3aXRjaCAodGhpcy50YWJsZS52ZXJzaW9uKSB7XG4gICAgICBjYXNlIDI6IC8vIHNlZ21lbnQgZm9ybWF0XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAge1xuICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjIxID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLnRhYmxlLnNlZ21lbnRzKSwgX3N0ZXAyMTsgIShfc3RlcDIxID0gX2l0ZXJhdG9yMjEoKSkuZG9uZTspIHtcbiAgICAgICAgICAgIHZhciBzZWdtZW50ID0gX3N0ZXAyMS52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudGFibGUudmVyc2lvbiA9PT0gMiAmJiBzZWdtZW50LnZhbHVlID09PSBjbGFzc1ZhbHVlKSB7XG4gICAgICAgICAgICAgIHJlcy5wdXNoLmFwcGx5KHJlcywgcmFuZ2Uoc2VnbWVudC5maXJzdEdseXBoLCBzZWdtZW50Lmxhc3RHbHlwaCArIDEpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzZWdtZW50LnZhbHVlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC52YWx1ZXNbaW5kZXhdID09PSBjbGFzc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICByZXMucHVzaChzZWdtZW50LmZpcnN0R2x5cGggKyBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSA2OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gbG9va3VwIHNpbmdsZVxuICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjIyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLnRhYmxlLnNlZ21lbnRzKSwgX3N0ZXAyMjsgIShfc3RlcDIyID0gX2l0ZXJhdG9yMjIoKSkuZG9uZTspIHtcbiAgICAgICAgICAgIHZhciBfc2VnbWVudCA9IF9zdGVwMjIudmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChfc2VnbWVudC52YWx1ZSA9PT0gY2xhc3NWYWx1ZSkge1xuICAgICAgICAgICAgICByZXMucHVzaChfc2VnbWVudC5nbHlwaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSA4OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gbG9va3VwIHRyaW1tZWRcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGFibGUudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZS52YWx1ZXNbaV0gPT09IGNsYXNzVmFsdWUpIHtcbiAgICAgICAgICAgICAgcmVzLnB1c2godGhpcy50YWJsZS5maXJzdEdseXBoICsgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBsb29rdXAgdGFibGUgZm9ybWF0OiBcIi5jb25jYXQodGhpcy50YWJsZS52ZXJzaW9uKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICByZXR1cm4gQUFUTG9va3VwVGFibGU7XG59KCksIF9hcHBseURlY29yYXRlZERlc2NyaXB0b3IoX2NsYXNzJDEucHJvdG90eXBlLCBcImdseXBoc0ZvclZhbHVlXCIsIFtjYWNoZV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX2NsYXNzJDEucHJvdG90eXBlLCBcImdseXBoc0ZvclZhbHVlXCIpLCBfY2xhc3MkMS5wcm90b3R5cGUpLCBfY2xhc3MkMSk7XG52YXIgU1RBUlRfT0ZfVEVYVF9TVEFURSA9IDA7XG52YXIgRU5EX09GX1RFWFRfQ0xBU1MgPSAwO1xudmFyIE9VVF9PRl9CT1VORFNfQ0xBU1MgPSAxO1xudmFyIERFTEVURURfR0xZUEhfQ0xBU1MgPSAyO1xudmFyIERPTlRfQURWQU5DRSA9IDB4NDAwMDtcblxudmFyIEFBVFN0YXRlTWFjaGluZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEFBVFN0YXRlTWFjaGluZShzdGF0ZVRhYmxlKSB7XG4gICAgdGhpcy5zdGF0ZVRhYmxlID0gc3RhdGVUYWJsZTtcbiAgICB0aGlzLmxvb2t1cFRhYmxlID0gbmV3IEFBVExvb2t1cFRhYmxlKHN0YXRlVGFibGUuY2xhc3NUYWJsZSk7XG4gIH1cblxuICB2YXIgX3Byb3RvMjAgPSBBQVRTdGF0ZU1hY2hpbmUucHJvdG90eXBlO1xuXG4gIF9wcm90bzIwLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGdseXBocywgcmV2ZXJzZSwgcHJvY2Vzc0VudHJ5KSB7XG4gICAgdmFyIGN1cnJlbnRTdGF0ZSA9IFNUQVJUX09GX1RFWFRfU1RBVEU7IC8vIFNUQVJUX09GX0xJTkVfU1RBVEUgaXMgdXNlZCBmb3Iga2FzaGlkYSBnbHlwaCBpbnNlcnRpb25zIHNvbWV0aW1lcyBJIHRoaW5rP1xuXG4gICAgdmFyIGluZGV4ID0gcmV2ZXJzZSA/IGdseXBocy5sZW5ndGggLSAxIDogMDtcbiAgICB2YXIgZGlyID0gcmV2ZXJzZSA/IC0xIDogMTtcblxuICAgIHdoaWxlIChkaXIgPT09IDEgJiYgaW5kZXggPD0gZ2x5cGhzLmxlbmd0aCB8fCBkaXIgPT09IC0xICYmIGluZGV4ID49IC0xKSB7XG4gICAgICB2YXIgZ2x5cGggPSBudWxsO1xuICAgICAgdmFyIGNsYXNzQ29kZSA9IE9VVF9PRl9CT1VORFNfQ0xBU1M7XG4gICAgICB2YXIgc2hvdWxkQWR2YW5jZSA9IHRydWU7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gZ2x5cGhzLmxlbmd0aCB8fCBpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgY2xhc3NDb2RlID0gRU5EX09GX1RFWFRfQ0xBU1M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbHlwaCA9IGdseXBoc1tpbmRleF07XG5cbiAgICAgICAgaWYgKGdseXBoLmlkID09PSAweGZmZmYpIHtcbiAgICAgICAgICAvLyBkZWxldGVkIGdseXBoXG4gICAgICAgICAgY2xhc3NDb2RlID0gREVMRVRFRF9HTFlQSF9DTEFTUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc0NvZGUgPSB0aGlzLmxvb2t1cFRhYmxlLmxvb2t1cChnbHlwaC5pZCk7XG5cbiAgICAgICAgICBpZiAoY2xhc3NDb2RlID09IG51bGwpIHtcbiAgICAgICAgICAgIGNsYXNzQ29kZSA9IE9VVF9PRl9CT1VORFNfQ0xBU1M7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciByb3cgPSB0aGlzLnN0YXRlVGFibGUuc3RhdGVBcnJheS5nZXRJdGVtKGN1cnJlbnRTdGF0ZSk7XG4gICAgICB2YXIgZW50cnlJbmRleCA9IHJvd1tjbGFzc0NvZGVdO1xuICAgICAgdmFyIGVudHJ5ID0gdGhpcy5zdGF0ZVRhYmxlLmVudHJ5VGFibGUuZ2V0SXRlbShlbnRyeUluZGV4KTtcblxuICAgICAgaWYgKGNsYXNzQ29kZSAhPT0gRU5EX09GX1RFWFRfQ0xBU1MgJiYgY2xhc3NDb2RlICE9PSBERUxFVEVEX0dMWVBIX0NMQVNTKSB7XG4gICAgICAgIHByb2Nlc3NFbnRyeShnbHlwaCwgZW50cnksIGluZGV4KTtcbiAgICAgICAgc2hvdWxkQWR2YW5jZSA9ICEoZW50cnkuZmxhZ3MgJiBET05UX0FEVkFOQ0UpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50U3RhdGUgPSBlbnRyeS5uZXdTdGF0ZTtcblxuICAgICAgaWYgKHNob3VsZEFkdmFuY2UpIHtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBnbHlwaHM7XG4gIH1cbiAgLyoqXHJcbiAgICogUGVyZm9ybXMgYSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwgb2YgdGhlIGdseXBoIHN0cmluZ3NcclxuICAgKiByZXByZXNlbnRlZCBieSB0aGUgc3RhdGUgbWFjaGluZS5cclxuICAgKi9cbiAgO1xuXG4gIF9wcm90bzIwLnRyYXZlcnNlID0gZnVuY3Rpb24gdHJhdmVyc2Uob3B0cywgc3RhdGUsIHZpc2l0ZWQpIHtcbiAgICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgICAgc3RhdGUgPSAwO1xuICAgIH1cblxuICAgIGlmICh2aXNpdGVkID09PSB2b2lkIDApIHtcbiAgICAgIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgfVxuXG4gICAgaWYgKHZpc2l0ZWQuaGFzKHN0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZpc2l0ZWQuYWRkKHN0YXRlKTtcbiAgICB2YXIgX3RoaXMkc3RhdGVUYWJsZSA9IHRoaXMuc3RhdGVUYWJsZSxcbiAgICAgICAgbkNsYXNzZXMgPSBfdGhpcyRzdGF0ZVRhYmxlLm5DbGFzc2VzLFxuICAgICAgICBzdGF0ZUFycmF5ID0gX3RoaXMkc3RhdGVUYWJsZS5zdGF0ZUFycmF5LFxuICAgICAgICBlbnRyeVRhYmxlID0gX3RoaXMkc3RhdGVUYWJsZS5lbnRyeVRhYmxlO1xuICAgIHZhciByb3cgPSBzdGF0ZUFycmF5LmdldEl0ZW0oc3RhdGUpOyAvLyBTa2lwIHByZWRlZmluZWQgY2xhc3Nlc1xuXG4gICAgZm9yICh2YXIgY2xhc3NDb2RlID0gNDsgY2xhc3NDb2RlIDwgbkNsYXNzZXM7IGNsYXNzQ29kZSsrKSB7XG4gICAgICB2YXIgZW50cnlJbmRleCA9IHJvd1tjbGFzc0NvZGVdO1xuICAgICAgdmFyIGVudHJ5ID0gZW50cnlUYWJsZS5nZXRJdGVtKGVudHJ5SW5kZXgpOyAvLyBUcnkgYWxsIGdseXBocyBpbiB0aGUgY2xhc3NcblxuICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMubG9va3VwVGFibGUuZ2x5cGhzRm9yVmFsdWUoY2xhc3NDb2RlKSksIF9zdGVwMjM7ICEoX3N0ZXAyMyA9IF9pdGVyYXRvcjIzKCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBnbHlwaCA9IF9zdGVwMjMudmFsdWU7XG5cbiAgICAgICAgaWYgKG9wdHMuZW50ZXIpIHtcbiAgICAgICAgICBvcHRzLmVudGVyKGdseXBoLCBlbnRyeSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkubmV3U3RhdGUgIT09IDApIHtcbiAgICAgICAgICB0aGlzLnRyYXZlcnNlKG9wdHMsIGVudHJ5Lm5ld1N0YXRlLCB2aXNpdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmV4aXQpIHtcbiAgICAgICAgICBvcHRzLmV4aXQoZ2x5cGgsIGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQUFUU3RhdGVNYWNoaW5lO1xufSgpO1xuXG52YXIgX2NsYXNzJDI7XG5cbnZhciBNQVJLX0ZJUlNUID0gMHg4MDAwO1xudmFyIE1BUktfTEFTVCA9IDB4MjAwMDtcbnZhciBWRVJCID0gMHgwMDBGOyAvLyBjb250ZXh0dWFsIHN1YnN0aXR1dGlvbiBhbmQgZ2x5cGggaW5zZXJ0aW9uIGZsYWdcblxudmFyIFNFVF9NQVJLID0gMHg4MDAwOyAvLyBsaWdhdHVyZSBlbnRyeSBmbGFnc1xuXG52YXIgU0VUX0NPTVBPTkVOVCA9IDB4ODAwMDtcbnZhciBQRVJGT1JNX0FDVElPTiA9IDB4MjAwMDsgLy8gbGlnYXR1cmUgYWN0aW9uIG1hc2tzXG5cbnZhciBMQVNUX01BU0sgPSAweDgwMDAwMDAwO1xudmFyIFNUT1JFX01BU0sgPSAweDQwMDAwMDAwO1xudmFyIE9GRlNFVF9NQVNLID0gMHgzRkZGRkZGRjtcbnZhciBSRVZFUlNFX0RJUkVDVElPTiA9IDB4NDAwMDAwO1xudmFyIENVUlJFTlRfSU5TRVJUX0JFRk9SRSA9IDB4MDgwMDtcbnZhciBNQVJLRURfSU5TRVJUX0JFRk9SRSA9IDB4MDQwMDtcbnZhciBDVVJSRU5UX0lOU0VSVF9DT1VOVCA9IDB4MDNFMDtcbnZhciBNQVJLRURfSU5TRVJUX0NPVU5UID0gMHgwMDFGO1xudmFyIEFBVE1vcnhQcm9jZXNzb3IgPSAoX2NsYXNzJDIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBBQVRNb3J4UHJvY2Vzc29yKGZvbnQpIHtcbiAgICB0aGlzLnByb2Nlc3NJbmRpY1JlYXJyYWdlbWVudCA9IHRoaXMucHJvY2Vzc0luZGljUmVhcnJhZ2VtZW50LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzQ29udGV4dHVhbFN1YnN0aXR1dGlvbiA9IHRoaXMucHJvY2Vzc0NvbnRleHR1YWxTdWJzdGl0dXRpb24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NMaWdhdHVyZSA9IHRoaXMucHJvY2Vzc0xpZ2F0dXJlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTm9uY29udGV4dHVhbFN1YnN0aXR1dGlvbnMgPSB0aGlzLnByb2Nlc3NOb25jb250ZXh0dWFsU3Vic3RpdHV0aW9ucy5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc0dseXBoSW5zZXJ0aW9uID0gdGhpcy5wcm9jZXNzR2x5cGhJbnNlcnRpb24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmZvbnQgPSBmb250O1xuICAgIHRoaXMubW9yeCA9IGZvbnQubW9yeDtcbiAgICB0aGlzLmlucHV0Q2FjaGUgPSBudWxsO1xuICB9IC8vIFByb2Nlc3NlcyBhbiBhcnJheSBvZiBnbHlwaHMgYW5kIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBmZWF0dXJlc1xuICAvLyBGZWF0dXJlcyBzaG91bGQgYmUgaW4gdGhlIGZvcm0gb2Yge2ZlYXR1cmVUeXBlOntmZWF0dXJlU2V0dGluZzpib29sZWFufX1cblxuXG4gIHZhciBfcHJvdG8yMSA9IEFBVE1vcnhQcm9jZXNzb3IucHJvdG90eXBlO1xuXG4gIF9wcm90bzIxLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGdseXBocywgZmVhdHVyZXMpIHtcbiAgICBpZiAoZmVhdHVyZXMgPT09IHZvaWQgMCkge1xuICAgICAgZmVhdHVyZXMgPSB7fTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3IyNCA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodGhpcy5tb3J4LmNoYWlucyksIF9zdGVwMjQ7ICEoX3N0ZXAyNCA9IF9pdGVyYXRvcjI0KCkpLmRvbmU7KSB7XG4gICAgICB2YXIgY2hhaW4gPSBfc3RlcDI0LnZhbHVlO1xuICAgICAgdmFyIGZsYWdzID0gY2hhaW4uZGVmYXVsdEZsYWdzOyAvLyBlbmFibGUvZGlzYWJsZSB0aGUgcmVxdWVzdGVkIGZlYXR1cmVzXG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjI1ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShjaGFpbi5mZWF0dXJlcyksIF9zdGVwMjU7ICEoX3N0ZXAyNSA9IF9pdGVyYXRvcjI1KCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBmZWF0dXJlID0gX3N0ZXAyNS52YWx1ZTtcbiAgICAgICAgdmFyIGYgPSB2b2lkIDA7XG5cbiAgICAgICAgaWYgKGYgPSBmZWF0dXJlc1tmZWF0dXJlLmZlYXR1cmVUeXBlXSkge1xuICAgICAgICAgIGlmIChmW2ZlYXR1cmUuZmVhdHVyZVNldHRpbmddKSB7XG4gICAgICAgICAgICBmbGFncyAmPSBmZWF0dXJlLmRpc2FibGVGbGFncztcbiAgICAgICAgICAgIGZsYWdzIHw9IGZlYXR1cmUuZW5hYmxlRmxhZ3M7XG4gICAgICAgICAgfSBlbHNlIGlmIChmW2ZlYXR1cmUuZmVhdHVyZVNldHRpbmddID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZmxhZ3MgfD0gfmZlYXR1cmUuZGlzYWJsZUZsYWdzO1xuICAgICAgICAgICAgZmxhZ3MgJj0gfmZlYXR1cmUuZW5hYmxlRmxhZ3M7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjI2ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShjaGFpbi5zdWJ0YWJsZXMpLCBfc3RlcDI2OyAhKF9zdGVwMjYgPSBfaXRlcmF0b3IyNigpKS5kb25lOykge1xuICAgICAgICB2YXIgc3VidGFibGUgPSBfc3RlcDI2LnZhbHVlO1xuXG4gICAgICAgIGlmIChzdWJ0YWJsZS5zdWJGZWF0dXJlRmxhZ3MgJiBmbGFncykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N1YnRhYmxlKHN1YnRhYmxlLCBnbHlwaHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyByZW1vdmUgZGVsZXRlZCBnbHlwaHNcblxuXG4gICAgdmFyIGluZGV4ID0gZ2x5cGhzLmxlbmd0aCAtIDE7XG5cbiAgICB3aGlsZSAoaW5kZXggPj0gMCkge1xuICAgICAgaWYgKGdseXBoc1tpbmRleF0uaWQgPT09IDB4ZmZmZikge1xuICAgICAgICBnbHlwaHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgaW5kZXgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2x5cGhzO1xuICB9O1xuXG4gIF9wcm90bzIxLnByb2Nlc3NTdWJ0YWJsZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdWJ0YWJsZShzdWJ0YWJsZSwgZ2x5cGhzKSB7XG4gICAgdGhpcy5zdWJ0YWJsZSA9IHN1YnRhYmxlO1xuICAgIHRoaXMuZ2x5cGhzID0gZ2x5cGhzO1xuXG4gICAgaWYgKHRoaXMuc3VidGFibGUudHlwZSA9PT0gNCkge1xuICAgICAgdGhpcy5wcm9jZXNzTm9uY29udGV4dHVhbFN1YnN0aXR1dGlvbnModGhpcy5zdWJ0YWJsZSwgdGhpcy5nbHlwaHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubGlnYXR1cmVTdGFjayA9IFtdO1xuICAgIHRoaXMubWFya2VkR2x5cGggPSBudWxsO1xuICAgIHRoaXMuZmlyc3RHbHlwaCA9IG51bGw7XG4gICAgdGhpcy5sYXN0R2x5cGggPSBudWxsO1xuICAgIHRoaXMubWFya2VkSW5kZXggPSBudWxsO1xuICAgIHZhciBzdGF0ZU1hY2hpbmUgPSB0aGlzLmdldFN0YXRlTWFjaGluZShzdWJ0YWJsZSk7XG4gICAgdmFyIHByb2Nlc3MgPSB0aGlzLmdldFByb2Nlc3NvcigpO1xuICAgIHZhciByZXZlcnNlID0gISEodGhpcy5zdWJ0YWJsZS5jb3ZlcmFnZSAmIFJFVkVSU0VfRElSRUNUSU9OKTtcbiAgICByZXR1cm4gc3RhdGVNYWNoaW5lLnByb2Nlc3ModGhpcy5nbHlwaHMsIHJldmVyc2UsIHByb2Nlc3MpO1xuICB9O1xuXG4gIF9wcm90bzIxLmdldFN0YXRlTWFjaGluZSA9IGZ1bmN0aW9uIGdldFN0YXRlTWFjaGluZShzdWJ0YWJsZSkge1xuICAgIHJldHVybiBuZXcgQUFUU3RhdGVNYWNoaW5lKHN1YnRhYmxlLnRhYmxlLnN0YXRlVGFibGUpO1xuICB9O1xuXG4gIF9wcm90bzIxLmdldFByb2Nlc3NvciA9IGZ1bmN0aW9uIGdldFByb2Nlc3NvcigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc3VidGFibGUudHlwZSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSW5kaWNSZWFycmFnZW1lbnQ7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0NvbnRleHR1YWxTdWJzdGl0dXRpb247XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0xpZ2F0dXJlO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NOb25jb250ZXh0dWFsU3Vic3RpdHV0aW9ucztcblxuICAgICAgY2FzZSA1OlxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2x5cGhJbnNlcnRpb247XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbW9yeCBzdWJ0YWJsZSB0eXBlOiBcIi5jb25jYXQodGhpcy5zdWJ0YWJsZS50eXBlKSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzIxLnByb2Nlc3NJbmRpY1JlYXJyYWdlbWVudCA9IGZ1bmN0aW9uIHByb2Nlc3NJbmRpY1JlYXJyYWdlbWVudChnbHlwaCwgZW50cnksIGluZGV4KSB7XG4gICAgaWYgKGVudHJ5LmZsYWdzICYgTUFSS19GSVJTVCkge1xuICAgICAgdGhpcy5maXJzdEdseXBoID0gaW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5LmZsYWdzICYgTUFSS19MQVNUKSB7XG4gICAgICB0aGlzLmxhc3RHbHlwaCA9IGluZGV4O1xuICAgIH1cblxuICAgIHJlb3JkZXJHbHlwaHModGhpcy5nbHlwaHMsIGVudHJ5LmZsYWdzICYgVkVSQiwgdGhpcy5maXJzdEdseXBoLCB0aGlzLmxhc3RHbHlwaCk7XG4gIH07XG5cbiAgX3Byb3RvMjEucHJvY2Vzc0NvbnRleHR1YWxTdWJzdGl0dXRpb24gPSBmdW5jdGlvbiBwcm9jZXNzQ29udGV4dHVhbFN1YnN0aXR1dGlvbihnbHlwaCwgZW50cnksIGluZGV4KSB7XG4gICAgdmFyIHN1YnNpdHV0aW9ucyA9IHRoaXMuc3VidGFibGUudGFibGUuc3Vic3RpdHV0aW9uVGFibGUuaXRlbXM7XG5cbiAgICBpZiAoZW50cnkubWFya0luZGV4ICE9PSAweGZmZmYpIHtcbiAgICAgIHZhciBsb29rdXAgPSBzdWJzaXR1dGlvbnMuZ2V0SXRlbShlbnRyeS5tYXJrSW5kZXgpO1xuICAgICAgdmFyIGxvb2t1cFRhYmxlID0gbmV3IEFBVExvb2t1cFRhYmxlKGxvb2t1cCk7XG4gICAgICBnbHlwaCA9IHRoaXMuZ2x5cGhzW3RoaXMubWFya2VkR2x5cGhdO1xuICAgICAgdmFyIGdpZCA9IGxvb2t1cFRhYmxlLmxvb2t1cChnbHlwaC5pZCk7XG5cbiAgICAgIGlmIChnaWQpIHtcbiAgICAgICAgdGhpcy5nbHlwaHNbdGhpcy5tYXJrZWRHbHlwaF0gPSB0aGlzLmZvbnQuZ2V0R2x5cGgoZ2lkLCBnbHlwaC5jb2RlUG9pbnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkuY3VycmVudEluZGV4ICE9PSAweGZmZmYpIHtcbiAgICAgIHZhciBfbG9va3VwID0gc3Vic2l0dXRpb25zLmdldEl0ZW0oZW50cnkuY3VycmVudEluZGV4KTtcblxuICAgICAgdmFyIF9sb29rdXBUYWJsZSA9IG5ldyBBQVRMb29rdXBUYWJsZShfbG9va3VwKTtcblxuICAgICAgZ2x5cGggPSB0aGlzLmdseXBoc1tpbmRleF07XG5cbiAgICAgIHZhciBnaWQgPSBfbG9va3VwVGFibGUubG9va3VwKGdseXBoLmlkKTtcblxuICAgICAgaWYgKGdpZCkge1xuICAgICAgICB0aGlzLmdseXBoc1tpbmRleF0gPSB0aGlzLmZvbnQuZ2V0R2x5cGgoZ2lkLCBnbHlwaC5jb2RlUG9pbnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkuZmxhZ3MgJiBTRVRfTUFSSykge1xuICAgICAgdGhpcy5tYXJrZWRHbHlwaCA9IGluZGV4O1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8yMS5wcm9jZXNzTGlnYXR1cmUgPSBmdW5jdGlvbiBwcm9jZXNzTGlnYXR1cmUoZ2x5cGgsIGVudHJ5LCBpbmRleCkge1xuICAgIGlmIChlbnRyeS5mbGFncyAmIFNFVF9DT01QT05FTlQpIHtcbiAgICAgIHRoaXMubGlnYXR1cmVTdGFjay5wdXNoKGluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoZW50cnkuZmxhZ3MgJiBQRVJGT1JNX0FDVElPTikge1xuICAgICAgdmFyIF90aGlzJGxpZ2F0dXJlU3RhY2s7XG5cbiAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5zdWJ0YWJsZS50YWJsZS5saWdhdHVyZUFjdGlvbnM7XG4gICAgICB2YXIgY29tcG9uZW50cyA9IHRoaXMuc3VidGFibGUudGFibGUuY29tcG9uZW50cztcbiAgICAgIHZhciBsaWdhdHVyZUxpc3QgPSB0aGlzLnN1YnRhYmxlLnRhYmxlLmxpZ2F0dXJlTGlzdDtcbiAgICAgIHZhciBhY3Rpb25JbmRleCA9IGVudHJ5LmFjdGlvbjtcbiAgICAgIHZhciBsYXN0ID0gZmFsc2U7XG4gICAgICB2YXIgbGlnYXR1cmVJbmRleCA9IDA7XG4gICAgICB2YXIgY29kZVBvaW50cyA9IFtdO1xuICAgICAgdmFyIGxpZ2F0dXJlR2x5cGhzID0gW107XG5cbiAgICAgIHdoaWxlICghbGFzdCkge1xuICAgICAgICB2YXIgX2NvZGVQb2ludHM7XG5cbiAgICAgICAgdmFyIGNvbXBvbmVudEdseXBoID0gdGhpcy5saWdhdHVyZVN0YWNrLnBvcCgpO1xuXG4gICAgICAgIChfY29kZVBvaW50cyA9IGNvZGVQb2ludHMpLnVuc2hpZnQuYXBwbHkoX2NvZGVQb2ludHMsIHRoaXMuZ2x5cGhzW2NvbXBvbmVudEdseXBoXS5jb2RlUG9pbnRzKTtcblxuICAgICAgICB2YXIgYWN0aW9uID0gYWN0aW9ucy5nZXRJdGVtKGFjdGlvbkluZGV4KyspO1xuICAgICAgICBsYXN0ID0gISEoYWN0aW9uICYgTEFTVF9NQVNLKTtcbiAgICAgICAgdmFyIHN0b3JlID0gISEoYWN0aW9uICYgU1RPUkVfTUFTSyk7XG4gICAgICAgIHZhciBvZmZzZXQgPSAoYWN0aW9uICYgT0ZGU0VUX01BU0spIDw8IDIgPj4gMjsgLy8gc2lnbiBleHRlbmQgMzAgdG8gMzIgYml0c1xuXG4gICAgICAgIG9mZnNldCArPSB0aGlzLmdseXBoc1tjb21wb25lbnRHbHlwaF0uaWQ7XG4gICAgICAgIHZhciBjb21wb25lbnQgPSBjb21wb25lbnRzLmdldEl0ZW0ob2Zmc2V0KTtcbiAgICAgICAgbGlnYXR1cmVJbmRleCArPSBjb21wb25lbnQ7XG5cbiAgICAgICAgaWYgKGxhc3QgfHwgc3RvcmUpIHtcbiAgICAgICAgICB2YXIgbGlnYXR1cmVFbnRyeSA9IGxpZ2F0dXJlTGlzdC5nZXRJdGVtKGxpZ2F0dXJlSW5kZXgpO1xuICAgICAgICAgIHRoaXMuZ2x5cGhzW2NvbXBvbmVudEdseXBoXSA9IHRoaXMuZm9udC5nZXRHbHlwaChsaWdhdHVyZUVudHJ5LCBjb2RlUG9pbnRzKTtcbiAgICAgICAgICBsaWdhdHVyZUdseXBocy5wdXNoKGNvbXBvbmVudEdseXBoKTtcbiAgICAgICAgICBsaWdhdHVyZUluZGV4ID0gMDtcbiAgICAgICAgICBjb2RlUG9pbnRzID0gW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5nbHlwaHNbY29tcG9uZW50R2x5cGhdID0gdGhpcy5mb250LmdldEdseXBoKDB4ZmZmZik7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUHV0IGxpZ2F0dXJlIGdseXBoIGluZGV4ZXMgYmFjayBvbiB0aGUgc3RhY2tcblxuXG4gICAgICAoX3RoaXMkbGlnYXR1cmVTdGFjayA9IHRoaXMubGlnYXR1cmVTdGFjaykucHVzaC5hcHBseShfdGhpcyRsaWdhdHVyZVN0YWNrLCBsaWdhdHVyZUdseXBocyk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzIxLnByb2Nlc3NOb25jb250ZXh0dWFsU3Vic3RpdHV0aW9ucyA9IGZ1bmN0aW9uIHByb2Nlc3NOb25jb250ZXh0dWFsU3Vic3RpdHV0aW9ucyhzdWJ0YWJsZSwgZ2x5cGhzLCBpbmRleCkge1xuICAgIHZhciBsb29rdXBUYWJsZSA9IG5ldyBBQVRMb29rdXBUYWJsZShzdWJ0YWJsZS50YWJsZS5sb29rdXBUYWJsZSk7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBnbHlwaHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgZ2x5cGggPSBnbHlwaHNbaW5kZXhdO1xuXG4gICAgICBpZiAoZ2x5cGguaWQgIT09IDB4ZmZmZikge1xuICAgICAgICB2YXIgZ2lkID0gbG9va3VwVGFibGUubG9va3VwKGdseXBoLmlkKTtcblxuICAgICAgICBpZiAoZ2lkKSB7XG4gICAgICAgICAgLy8gMCBtZWFucyBkbyBub3RoaW5nXG4gICAgICAgICAgZ2x5cGhzW2luZGV4XSA9IHRoaXMuZm9udC5nZXRHbHlwaChnaWQsIGdseXBoLmNvZGVQb2ludHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzIxLl9pbnNlcnRHbHlwaHMgPSBmdW5jdGlvbiBfaW5zZXJ0R2x5cGhzKGdseXBoSW5kZXgsIGluc2VydGlvbkFjdGlvbkluZGV4LCBjb3VudCwgaXNCZWZvcmUpIHtcbiAgICB2YXIgX3RoaXMkZ2x5cGhzO1xuXG4gICAgdmFyIGluc2VydGlvbnMgPSBbXTtcblxuICAgIHdoaWxlIChjb3VudC0tKSB7XG4gICAgICB2YXIgZ2lkID0gdGhpcy5zdWJ0YWJsZS50YWJsZS5pbnNlcnRpb25BY3Rpb25zLmdldEl0ZW0oaW5zZXJ0aW9uQWN0aW9uSW5kZXgrKyk7XG4gICAgICBpbnNlcnRpb25zLnB1c2godGhpcy5mb250LmdldEdseXBoKGdpZCkpO1xuICAgIH1cblxuICAgIGlmICghaXNCZWZvcmUpIHtcbiAgICAgIGdseXBoSW5kZXgrKztcbiAgICB9XG5cbiAgICAoX3RoaXMkZ2x5cGhzID0gdGhpcy5nbHlwaHMpLnNwbGljZS5hcHBseShfdGhpcyRnbHlwaHMsIFtnbHlwaEluZGV4LCAwXS5jb25jYXQoaW5zZXJ0aW9ucykpO1xuICB9O1xuXG4gIF9wcm90bzIxLnByb2Nlc3NHbHlwaEluc2VydGlvbiA9IGZ1bmN0aW9uIHByb2Nlc3NHbHlwaEluc2VydGlvbihnbHlwaCwgZW50cnksIGluZGV4KSB7XG4gICAgaWYgKGVudHJ5LmZsYWdzICYgU0VUX01BUkspIHtcbiAgICAgIHRoaXMubWFya2VkSW5kZXggPSBpbmRleDtcbiAgICB9XG5cbiAgICBpZiAoZW50cnkubWFya2VkSW5zZXJ0SW5kZXggIT09IDB4ZmZmZikge1xuICAgICAgdmFyIGNvdW50ID0gKGVudHJ5LmZsYWdzICYgTUFSS0VEX0lOU0VSVF9DT1VOVCkgPj4+IDU7XG4gICAgICB2YXIgaXNCZWZvcmUgPSAhIShlbnRyeS5mbGFncyAmIE1BUktFRF9JTlNFUlRfQkVGT1JFKTtcblxuICAgICAgdGhpcy5faW5zZXJ0R2x5cGhzKHRoaXMubWFya2VkSW5kZXgsIGVudHJ5Lm1hcmtlZEluc2VydEluZGV4LCBjb3VudCwgaXNCZWZvcmUpO1xuICAgIH1cblxuICAgIGlmIChlbnRyeS5jdXJyZW50SW5zZXJ0SW5kZXggIT09IDB4ZmZmZikge1xuICAgICAgdmFyIF9jb3VudCA9IChlbnRyeS5mbGFncyAmIENVUlJFTlRfSU5TRVJUX0NPVU5UKSA+Pj4gNTtcblxuICAgICAgdmFyIF9pc0JlZm9yZSA9ICEhKGVudHJ5LmZsYWdzICYgQ1VSUkVOVF9JTlNFUlRfQkVGT1JFKTtcblxuICAgICAgdGhpcy5faW5zZXJ0R2x5cGhzKGluZGV4LCBlbnRyeS5jdXJyZW50SW5zZXJ0SW5kZXgsIF9jb3VudCwgX2lzQmVmb3JlKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMjEuZ2V0U3VwcG9ydGVkRmVhdHVyZXMgPSBmdW5jdGlvbiBnZXRTdXBwb3J0ZWRGZWF0dXJlcygpIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIF9pdGVyYXRvcjI3ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLm1vcnguY2hhaW5zKSwgX3N0ZXAyNzsgIShfc3RlcDI3ID0gX2l0ZXJhdG9yMjcoKSkuZG9uZTspIHtcbiAgICAgIHZhciBjaGFpbiA9IF9zdGVwMjcudmFsdWU7XG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjI4ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShjaGFpbi5mZWF0dXJlcyksIF9zdGVwMjg7ICEoX3N0ZXAyOCA9IF9pdGVyYXRvcjI4KCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBmZWF0dXJlID0gX3N0ZXAyOC52YWx1ZTtcbiAgICAgICAgZmVhdHVyZXMucHVzaChbZmVhdHVyZS5mZWF0dXJlVHlwZSwgZmVhdHVyZS5mZWF0dXJlU2V0dGluZ10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlcztcbiAgfTtcblxuICBfcHJvdG8yMS5nZW5lcmF0ZUlucHV0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlSW5wdXRzKGdpZCkge1xuICAgIGlmICghdGhpcy5pbnB1dENhY2hlKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlSW5wdXRDYWNoZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmlucHV0Q2FjaGVbZ2lkXSB8fCBbXTtcbiAgfTtcblxuICBfcHJvdG8yMS5nZW5lcmF0ZUlucHV0Q2FjaGUgPSBmdW5jdGlvbiBnZW5lcmF0ZUlucHV0Q2FjaGUoKSB7XG4gICAgdGhpcy5pbnB1dENhY2hlID0ge307XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3IyOSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodGhpcy5tb3J4LmNoYWlucyksIF9zdGVwMjk7ICEoX3N0ZXAyOSA9IF9pdGVyYXRvcjI5KCkpLmRvbmU7KSB7XG4gICAgICB2YXIgY2hhaW4gPSBfc3RlcDI5LnZhbHVlO1xuICAgICAgdmFyIGZsYWdzID0gY2hhaW4uZGVmYXVsdEZsYWdzO1xuXG4gICAgICBmb3IgKHZhciBfaXRlcmF0b3IzMCA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoY2hhaW4uc3VidGFibGVzKSwgX3N0ZXAzMDsgIShfc3RlcDMwID0gX2l0ZXJhdG9yMzAoKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIHN1YnRhYmxlID0gX3N0ZXAzMC52YWx1ZTtcblxuICAgICAgICBpZiAoc3VidGFibGUuc3ViRmVhdHVyZUZsYWdzICYgZmxhZ3MpIHtcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlSW5wdXRzRm9yU3VidGFibGUoc3VidGFibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzIxLmdlbmVyYXRlSW5wdXRzRm9yU3VidGFibGUgPSBmdW5jdGlvbiBnZW5lcmF0ZUlucHV0c0ZvclN1YnRhYmxlKHN1YnRhYmxlKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAvLyBDdXJyZW50bHksIG9ubHkgc3VwcG9ydGluZyBsaWdhdHVyZSBzdWJ0YWJsZXMuXG4gICAgaWYgKHN1YnRhYmxlLnR5cGUgIT09IDIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmV2ZXJzZSA9ICEhKHN1YnRhYmxlLmNvdmVyYWdlICYgUkVWRVJTRV9ESVJFQ1RJT04pO1xuXG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmV2ZXJzZSBzdWJ0YWJsZSwgbm90IHN1cHBvcnRlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLnN1YnRhYmxlID0gc3VidGFibGU7XG4gICAgdGhpcy5saWdhdHVyZVN0YWNrID0gW107XG4gICAgdmFyIHN0YXRlTWFjaGluZSA9IHRoaXMuZ2V0U3RhdGVNYWNoaW5lKHN1YnRhYmxlKTtcbiAgICB2YXIgcHJvY2VzcyA9IHRoaXMuZ2V0UHJvY2Vzc29yKCk7XG4gICAgdmFyIGlucHV0ID0gW107XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdGhpcy5nbHlwaHMgPSBbXTtcbiAgICBzdGF0ZU1hY2hpbmUudHJhdmVyc2Uoe1xuICAgICAgZW50ZXI6IGZ1bmN0aW9uIGVudGVyKGdseXBoLCBlbnRyeSkge1xuICAgICAgICB2YXIgZ2x5cGhzID0gX3RoaXMzLmdseXBocztcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgZ2x5cGhzOiBnbHlwaHMuc2xpY2UoKSxcbiAgICAgICAgICBsaWdhdHVyZVN0YWNrOiBfdGhpczMubGlnYXR1cmVTdGFjay5zbGljZSgpXG4gICAgICAgIH0pOyAvLyBBZGQgZ2x5cGggdG8gaW5wdXQgYW5kIGdseXBocyB0byBwcm9jZXNzLlxuXG4gICAgICAgIHZhciBnID0gX3RoaXMzLmZvbnQuZ2V0R2x5cGgoZ2x5cGgpO1xuXG4gICAgICAgIGlucHV0LnB1c2goZyk7XG4gICAgICAgIGdseXBocy5wdXNoKGlucHV0W2lucHV0Lmxlbmd0aCAtIDFdKTsgLy8gUHJvY2VzcyBsaWdhdHVyZSBzdWJzdGl0dXRpb25cblxuICAgICAgICBwcm9jZXNzKGdseXBoc1tnbHlwaHMubGVuZ3RoIC0gMV0sIGVudHJ5LCBnbHlwaHMubGVuZ3RoIC0gMSk7IC8vIEFkZCBpbnB1dCB0byByZXN1bHQgaWYgb25seSBvbmUgbWF0Y2hpbmcgKG5vbi1kZWxldGVkKSBnbHlwaCByZW1haW5zLlxuXG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgIHZhciBmb3VuZCA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoICYmIGNvdW50IDw9IDE7IGkrKykge1xuICAgICAgICAgIGlmIChnbHlwaHNbaV0uaWQgIT09IDB4ZmZmZikge1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgIGZvdW5kID0gZ2x5cGhzW2ldLmlkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnB1dC5tYXAoZnVuY3Rpb24gKGcpIHtcbiAgICAgICAgICAgIHJldHVybiBnLmlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhciBfY2FjaGUgPSBfdGhpczMuaW5wdXRDYWNoZVtmb3VuZF07XG5cbiAgICAgICAgICBpZiAoX2NhY2hlKSB7XG4gICAgICAgICAgICBfY2FjaGUucHVzaChyZXN1bHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczMuaW5wdXRDYWNoZVtmb3VuZF0gPSBbcmVzdWx0XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBleGl0OiBmdW5jdGlvbiBleGl0KCkge1xuICAgICAgICB2YXIgX3N0YWNrJHBvcCA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgIF90aGlzMy5nbHlwaHMgPSBfc3RhY2skcG9wLmdseXBocztcbiAgICAgICAgX3RoaXMzLmxpZ2F0dXJlU3RhY2sgPSBfc3RhY2skcG9wLmxpZ2F0dXJlU3RhY2s7XG4gICAgICAgIGlucHV0LnBvcCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBBQVRNb3J4UHJvY2Vzc29yO1xufSgpLCBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKF9jbGFzcyQyLnByb3RvdHlwZSwgXCJnZXRTdGF0ZU1hY2hpbmVcIiwgW2NhY2hlXSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihfY2xhc3MkMi5wcm90b3R5cGUsIFwiZ2V0U3RhdGVNYWNoaW5lXCIpLCBfY2xhc3MkMi5wcm90b3R5cGUpLCBfY2xhc3MkMik7IC8vIHJldmVyc2UgdGhlIGdseXBocyBpbnNpZGUgdGhvc2UgcmFuZ2VzIGlmIHNwZWNpZmllZFxuLy8gcmFuZ2VzIGFyZSBpbiBbb2Zmc2V0LCBsZW5ndGhdIGZvcm1hdFxuXG5mdW5jdGlvbiBzd2FwKGdseXBocywgcmFuZ2VBLCByYW5nZUIsIHJldmVyc2VBLCByZXZlcnNlQikge1xuICBpZiAocmV2ZXJzZUEgPT09IHZvaWQgMCkge1xuICAgIHJldmVyc2VBID0gZmFsc2U7XG4gIH1cblxuICBpZiAocmV2ZXJzZUIgPT09IHZvaWQgMCkge1xuICAgIHJldmVyc2VCID0gZmFsc2U7XG4gIH1cblxuICB2YXIgZW5kID0gZ2x5cGhzLnNwbGljZShyYW5nZUJbMF0gLSAocmFuZ2VCWzFdIC0gMSksIHJhbmdlQlsxXSk7XG5cbiAgaWYgKHJldmVyc2VCKSB7XG4gICAgZW5kLnJldmVyc2UoKTtcbiAgfVxuXG4gIHZhciBzdGFydCA9IGdseXBocy5zcGxpY2UuYXBwbHkoZ2x5cGhzLCBbcmFuZ2VBWzBdLCByYW5nZUFbMV1dLmNvbmNhdChlbmQpKTtcblxuICBpZiAocmV2ZXJzZUEpIHtcbiAgICBzdGFydC5yZXZlcnNlKCk7XG4gIH1cblxuICBnbHlwaHMuc3BsaWNlLmFwcGx5KGdseXBocywgW3JhbmdlQlswXSAtIChyYW5nZUFbMV0gLSAxKSwgMF0uY29uY2F0KHN0YXJ0KSk7XG4gIHJldHVybiBnbHlwaHM7XG59XG5cbmZ1bmN0aW9uIHJlb3JkZXJHbHlwaHMoZ2x5cGhzLCB2ZXJiLCBmaXJzdEdseXBoLCBsYXN0R2x5cGgpIHtcbiAgc3dpdGNoICh2ZXJiKSB7XG4gICAgY2FzZSAwOlxuICAgICAgLy8gbm8gY2hhbmdlXG4gICAgICByZXR1cm4gZ2x5cGhzO1xuXG4gICAgY2FzZSAxOlxuICAgICAgLy8gQXggPT4geEFcbiAgICAgIHJldHVybiBzd2FwKGdseXBocywgW2ZpcnN0R2x5cGgsIDFdLCBbbGFzdEdseXBoLCAwXSk7XG5cbiAgICBjYXNlIDI6XG4gICAgICAvLyB4RCA9PiBEeFxuICAgICAgcmV0dXJuIHN3YXAoZ2x5cGhzLCBbZmlyc3RHbHlwaCwgMF0sIFtsYXN0R2x5cGgsIDFdKTtcblxuICAgIGNhc2UgMzpcbiAgICAgIC8vIEF4RCA9PiBEeEFcbiAgICAgIHJldHVybiBzd2FwKGdseXBocywgW2ZpcnN0R2x5cGgsIDFdLCBbbGFzdEdseXBoLCAxXSk7XG5cbiAgICBjYXNlIDQ6XG4gICAgICAvLyBBQnggPT4geEFCXG4gICAgICByZXR1cm4gc3dhcChnbHlwaHMsIFtmaXJzdEdseXBoLCAyXSwgW2xhc3RHbHlwaCwgMF0pO1xuXG4gICAgY2FzZSA1OlxuICAgICAgLy8gQUJ4ID0+IHhCQVxuICAgICAgcmV0dXJuIHN3YXAoZ2x5cGhzLCBbZmlyc3RHbHlwaCwgMl0sIFtsYXN0R2x5cGgsIDBdLCB0cnVlLCBmYWxzZSk7XG5cbiAgICBjYXNlIDY6XG4gICAgICAvLyB4Q0QgPT4gQ0R4XG4gICAgICByZXR1cm4gc3dhcChnbHlwaHMsIFtmaXJzdEdseXBoLCAwXSwgW2xhc3RHbHlwaCwgMl0pO1xuXG4gICAgY2FzZSA3OlxuICAgICAgLy8geENEID0+IERDeFxuICAgICAgcmV0dXJuIHN3YXAoZ2x5cGhzLCBbZmlyc3RHbHlwaCwgMF0sIFtsYXN0R2x5cGgsIDJdLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgICBjYXNlIDg6XG4gICAgICAvLyBBeENEID0+IENEeEFcbiAgICAgIHJldHVybiBzd2FwKGdseXBocywgW2ZpcnN0R2x5cGgsIDFdLCBbbGFzdEdseXBoLCAyXSk7XG5cbiAgICBjYXNlIDk6XG4gICAgICAvLyBBeENEID0+IERDeEFcbiAgICAgIHJldHVybiBzd2FwKGdseXBocywgW2ZpcnN0R2x5cGgsIDFdLCBbbGFzdEdseXBoLCAyXSwgZmFsc2UsIHRydWUpO1xuXG4gICAgY2FzZSAxMDpcbiAgICAgIC8vIEFCeEQgPT4gRHhBQlxuICAgICAgcmV0dXJuIHN3YXAoZ2x5cGhzLCBbZmlyc3RHbHlwaCwgMl0sIFtsYXN0R2x5cGgsIDFdKTtcblxuICAgIGNhc2UgMTE6XG4gICAgICAvLyBBQnhEID0+IER4QkFcbiAgICAgIHJldHVybiBzd2FwKGdseXBocywgW2ZpcnN0R2x5cGgsIDJdLCBbbGFzdEdseXBoLCAxXSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgY2FzZSAxMjpcbiAgICAgIC8vIEFCeENEID0+IENEeEFCXG4gICAgICByZXR1cm4gc3dhcChnbHlwaHMsIFtmaXJzdEdseXBoLCAyXSwgW2xhc3RHbHlwaCwgMl0pO1xuXG4gICAgY2FzZSAxMzpcbiAgICAgIC8vIEFCeENEID0+IENEeEJBXG4gICAgICByZXR1cm4gc3dhcChnbHlwaHMsIFtmaXJzdEdseXBoLCAyXSwgW2xhc3RHbHlwaCwgMl0sIHRydWUsIGZhbHNlKTtcblxuICAgIGNhc2UgMTQ6XG4gICAgICAvLyBBQnhDRCA9PiBEQ3hBQlxuICAgICAgcmV0dXJuIHN3YXAoZ2x5cGhzLCBbZmlyc3RHbHlwaCwgMl0sIFtsYXN0R2x5cGgsIDJdLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgICBjYXNlIDE1OlxuICAgICAgLy8gQUJ4Q0QgPT4gREN4QkFcbiAgICAgIHJldHVybiBzd2FwKGdseXBocywgW2ZpcnN0R2x5cGgsIDJdLCBbbGFzdEdseXBoLCAyXSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biB2ZXJiOiBcIi5jb25jYXQodmVyYikpO1xuICB9XG59XG5cbnZhciBBQVRMYXlvdXRFbmdpbmUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBBQVRMYXlvdXRFbmdpbmUoZm9udCkge1xuICAgIHRoaXMuZm9udCA9IGZvbnQ7XG4gICAgdGhpcy5tb3J4UHJvY2Vzc29yID0gbmV3IEFBVE1vcnhQcm9jZXNzb3IoZm9udCk7XG4gICAgdGhpcy5mYWxsYmFja1Bvc2l0aW9uID0gZmFsc2U7XG4gIH1cblxuICB2YXIgX3Byb3RvMjIgPSBBQVRMYXlvdXRFbmdpbmUucHJvdG90eXBlO1xuXG4gIF9wcm90bzIyLnN1YnN0aXR1dGUgPSBmdW5jdGlvbiBzdWJzdGl0dXRlKGdseXBoUnVuKSB7XG4gICAgLy8gQUFUIGV4cGVjdHMgdGhlIGdseXBocyB0byBiZSBpbiB2aXN1YWwgb3JkZXIgcHJpb3IgdG8gbW9yeCBwcm9jZXNzaW5nLFxuICAgIC8vIHNvIHJldmVyc2UgdGhlIGdseXBocyBpZiB0aGUgc2NyaXB0IGlzIHJpZ2h0LXRvLWxlZnQuXG4gICAgaWYgKGdseXBoUnVuLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgIGdseXBoUnVuLmdseXBocy5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tb3J4UHJvY2Vzc29yLnByb2Nlc3MoZ2x5cGhSdW4uZ2x5cGhzLCBtYXBPVFRvQUFUKGdseXBoUnVuLmZlYXR1cmVzKSk7XG4gIH07XG5cbiAgX3Byb3RvMjIuZ2V0QXZhaWxhYmxlRmVhdHVyZXMgPSBmdW5jdGlvbiBnZXRBdmFpbGFibGVGZWF0dXJlcyhzY3JpcHQsIGxhbmd1YWdlKSB7XG4gICAgcmV0dXJuIG1hcEFBVFRvT1QodGhpcy5tb3J4UHJvY2Vzc29yLmdldFN1cHBvcnRlZEZlYXR1cmVzKCkpO1xuICB9O1xuXG4gIF9wcm90bzIyLnN0cmluZ3NGb3JHbHlwaCA9IGZ1bmN0aW9uIHN0cmluZ3NGb3JHbHlwaChnaWQpIHtcbiAgICB2YXIgZ2x5cGhTdHJpbmdzID0gdGhpcy5tb3J4UHJvY2Vzc29yLmdlbmVyYXRlSW5wdXRzKGdpZCk7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAodmFyIF9pdGVyYXRvcjMxID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShnbHlwaFN0cmluZ3MpLCBfc3RlcDMxOyAhKF9zdGVwMzEgPSBfaXRlcmF0b3IzMSgpKS5kb25lOykge1xuICAgICAgdmFyIGdseXBocyA9IF9zdGVwMzEudmFsdWU7XG5cbiAgICAgIHRoaXMuX2FkZFN0cmluZ3MoZ2x5cGhzLCAwLCByZXN1bHQsICcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIF9wcm90bzIyLl9hZGRTdHJpbmdzID0gZnVuY3Rpb24gX2FkZFN0cmluZ3MoZ2x5cGhzLCBpbmRleCwgc3RyaW5ncywgc3RyaW5nKSB7XG4gICAgdmFyIGNvZGVQb2ludHMgPSB0aGlzLmZvbnQuX2NtYXBQcm9jZXNzb3IuY29kZVBvaW50c0ZvckdseXBoKGdseXBoc1tpbmRleF0pO1xuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yMzIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKGNvZGVQb2ludHMpLCBfc3RlcDMyOyAhKF9zdGVwMzIgPSBfaXRlcmF0b3IzMigpKS5kb25lOykge1xuICAgICAgdmFyIGNvZGVQb2ludCA9IF9zdGVwMzIudmFsdWU7XG4gICAgICB2YXIgcyA9IHN0cmluZyArIFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG5cbiAgICAgIGlmIChpbmRleCA8IGdseXBocy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMuX2FkZFN0cmluZ3MoZ2x5cGhzLCBpbmRleCArIDEsIHN0cmluZ3MsIHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyaW5ncy5hZGQocyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBBQVRMYXlvdXRFbmdpbmU7XG59KCk7XG4vKipcclxuICogU2hhcGluZ1BsYW5zIGFyZSB1c2VkIGJ5IHRoZSBPcGVuVHlwZSBzaGFwZXJzIHRvIHN0b3JlIHdoaWNoXHJcbiAqIGZlYXR1cmVzIHNob3VsZCBieSBhcHBsaWVkLCBhbmQgaW4gd2hhdCBvcmRlciB0byBhcHBseSB0aGVtLlxyXG4gKiBUaGUgZmVhdHVyZXMgYXJlIGFwcGxpZWQgaW4gZ3JvdXBzIGNhbGxlZCBzdGFnZXMuIEEgZmVhdHVyZVxyXG4gKiBjYW4gYmUgYXBwbGllZCBnbG9iYWxseSB0byBhbGwgZ2x5cGhzLCBvciBsb2NhbGx5IHRvIG9ubHlcclxuICogc3BlY2lmaWMgZ2x5cGhzLlxyXG4gKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cblxuXG52YXIgU2hhcGluZ1BsYW4gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTaGFwaW5nUGxhbihmb250LCBzY3JpcHQsIGRpcmVjdGlvbikge1xuICAgIHRoaXMuZm9udCA9IGZvbnQ7XG4gICAgdGhpcy5zY3JpcHQgPSBzY3JpcHQ7XG4gICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgdGhpcy5zdGFnZXMgPSBbXTtcbiAgICB0aGlzLmdsb2JhbEZlYXR1cmVzID0ge307XG4gICAgdGhpcy5hbGxGZWF0dXJlcyA9IHt9O1xuICB9XG4gIC8qKlxyXG4gICAqIEFkZHMgdGhlIGdpdmVuIGZlYXR1cmVzIHRvIHRoZSBsYXN0IHN0YWdlLlxyXG4gICAqIElnbm9yZXMgZmVhdHVyZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhcHBsaWVkLlxyXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90bzIzID0gU2hhcGluZ1BsYW4ucHJvdG90eXBlO1xuXG4gIF9wcm90bzIzLl9hZGRGZWF0dXJlcyA9IGZ1bmN0aW9uIF9hZGRGZWF0dXJlcyhmZWF0dXJlcywgZ2xvYmFsKSB7XG4gICAgdmFyIHN0YWdlSW5kZXggPSB0aGlzLnN0YWdlcy5sZW5ndGggLSAxO1xuICAgIHZhciBzdGFnZSA9IHRoaXMuc3RhZ2VzW3N0YWdlSW5kZXhdO1xuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yMzMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKGZlYXR1cmVzKSwgX3N0ZXAzMzsgIShfc3RlcDMzID0gX2l0ZXJhdG9yMzMoKSkuZG9uZTspIHtcbiAgICAgIHZhciBmZWF0dXJlID0gX3N0ZXAzMy52YWx1ZTtcblxuICAgICAgaWYgKHRoaXMuYWxsRmVhdHVyZXNbZmVhdHVyZV0gPT0gbnVsbCkge1xuICAgICAgICBzdGFnZS5wdXNoKGZlYXR1cmUpO1xuICAgICAgICB0aGlzLmFsbEZlYXR1cmVzW2ZlYXR1cmVdID0gc3RhZ2VJbmRleDtcblxuICAgICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgICAgdGhpcy5nbG9iYWxGZWF0dXJlc1tmZWF0dXJlXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXHJcbiAgICogQWRkIGZlYXR1cmVzIHRvIHRoZSBsYXN0IHN0YWdlXHJcbiAgICovXG4gIDtcblxuICBfcHJvdG8yMy5hZGQgPSBmdW5jdGlvbiBhZGQoYXJnLCBnbG9iYWwpIHtcbiAgICBpZiAoZ2xvYmFsID09PSB2b2lkIDApIHtcbiAgICAgIGdsb2JhbCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zdGFnZXMucHVzaChbXSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBhcmcgPSBbYXJnXTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICB0aGlzLl9hZGRGZWF0dXJlcyhhcmcsIGdsb2JhbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5fYWRkRmVhdHVyZXMoYXJnLmdsb2JhbCB8fCBbXSwgdHJ1ZSk7XG5cbiAgICAgIHRoaXMuX2FkZEZlYXR1cmVzKGFyZy5sb2NhbCB8fCBbXSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhcmd1bWVudCB0byBTaGFwaW5nUGxhbiNhZGRcIik7XG4gICAgfVxuICB9XG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBzdGFnZVxyXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMjMuYWRkU3RhZ2UgPSBmdW5jdGlvbiBhZGRTdGFnZShhcmcsIGdsb2JhbCkge1xuICAgIGlmICh0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnN0YWdlcy5wdXNoKGFyZywgW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YWdlcy5wdXNoKFtdKTtcbiAgICAgIHRoaXMuYWRkKGFyZywgZ2xvYmFsKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMjMuc2V0RmVhdHVyZU92ZXJyaWRlcyA9IGZ1bmN0aW9uIHNldEZlYXR1cmVPdmVycmlkZXMoZmVhdHVyZXMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmZWF0dXJlcykpIHtcbiAgICAgIHRoaXMuYWRkKGZlYXR1cmVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmZWF0dXJlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvciAodmFyIHRhZyBpbiBmZWF0dXJlcykge1xuICAgICAgICBpZiAoZmVhdHVyZXNbdGFnXSkge1xuICAgICAgICAgIHRoaXMuYWRkKHRhZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hbGxGZWF0dXJlc1t0YWddICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgc3RhZ2UgPSB0aGlzLnN0YWdlc1t0aGlzLmFsbEZlYXR1cmVzW3RhZ11dO1xuICAgICAgICAgIHN0YWdlLnNwbGljZShzdGFnZS5pbmRleE9mKHRhZyksIDEpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmFsbEZlYXR1cmVzW3RhZ107XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZ2xvYmFsRmVhdHVyZXNbdGFnXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcclxuICAgKiBBc3NpZ25zIHRoZSBnbG9iYWwgZmVhdHVyZXMgdG8gdGhlIGdpdmVuIGdseXBoc1xyXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMjMuYXNzaWduR2xvYmFsRmVhdHVyZXMgPSBmdW5jdGlvbiBhc3NpZ25HbG9iYWxGZWF0dXJlcyhnbHlwaHMpIHtcbiAgICBmb3IgKHZhciBfaXRlcmF0b3IzNCA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoZ2x5cGhzKSwgX3N0ZXAzNDsgIShfc3RlcDM0ID0gX2l0ZXJhdG9yMzQoKSkuZG9uZTspIHtcbiAgICAgIHZhciBnbHlwaCA9IF9zdGVwMzQudmFsdWU7XG5cbiAgICAgIGZvciAodmFyIGZlYXR1cmUgaW4gdGhpcy5nbG9iYWxGZWF0dXJlcykge1xuICAgICAgICBnbHlwaC5mZWF0dXJlc1tmZWF0dXJlXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVzIHRoZSBwbGFubmVkIHN0YWdlcyB1c2luZyB0aGUgZ2l2ZW4gT1RQcm9jZXNzb3JcclxuICAgKi9cbiAgO1xuXG4gIF9wcm90bzIzLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKHByb2Nlc3NvciwgZ2x5cGhzLCBwb3NpdGlvbnMpIHtcbiAgICBmb3IgKHZhciBfaXRlcmF0b3IzNSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodGhpcy5zdGFnZXMpLCBfc3RlcDM1OyAhKF9zdGVwMzUgPSBfaXRlcmF0b3IzNSgpKS5kb25lOykge1xuICAgICAgdmFyIHN0YWdlID0gX3N0ZXAzNS52YWx1ZTtcblxuICAgICAgaWYgKHR5cGVvZiBzdGFnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoIXBvc2l0aW9ucykge1xuICAgICAgICAgIHN0YWdlKHRoaXMuZm9udCwgZ2x5cGhzLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGFnZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb2Nlc3Nvci5hcHBseUZlYXR1cmVzKHN0YWdlLCBnbHlwaHMsIHBvc2l0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTaGFwaW5nUGxhbjtcbn0oKTtcblxudmFyIFZBUklBVElPTl9GRUFUVVJFUyA9IFsncnZybiddO1xudmFyIENPTU1PTl9GRUFUVVJFUyA9IFsnY2NtcCcsICdsb2NsJywgJ3JsaWcnLCAnbWFyaycsICdta21rJ107XG52YXIgRlJBQ1RJT05BTF9GRUFUVVJFUyA9IFsnZnJhYycsICdudW1yJywgJ2Rub20nXTtcbnZhciBIT1JJWk9OVEFMX0ZFQVRVUkVTID0gWydjYWx0JywgJ2NsaWcnLCAnbGlnYScsICdyY2x0JywgJ2N1cnMnLCAna2VybiddO1xudmFyIERJUkVDVElPTkFMX0ZFQVRVUkVTID0ge1xuICBsdHI6IFsnbHRyYScsICdsdHJtJ10sXG4gIHJ0bDogWydydGxhJywgJ3J0bG0nXVxufTtcblxudmFyIERlZmF1bHRTaGFwZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEZWZhdWx0U2hhcGVyKCkge31cblxuICBEZWZhdWx0U2hhcGVyLnBsYW4gPSBmdW5jdGlvbiBwbGFuKF9wbGFuLCBnbHlwaHMsIGZlYXR1cmVzKSB7XG4gICAgLy8gUGxhbiB0aGUgZmVhdHVyZXMgd2Ugd2FudCB0byBhcHBseVxuICAgIHRoaXMucGxhblByZXByb2Nlc3NpbmcoX3BsYW4pO1xuICAgIHRoaXMucGxhbkZlYXR1cmVzKF9wbGFuKTtcbiAgICB0aGlzLnBsYW5Qb3N0cHJvY2Vzc2luZyhfcGxhbiwgZmVhdHVyZXMpOyAvLyBBc3NpZ24gdGhlIGdsb2JhbCBmZWF0dXJlcyB0byBhbGwgdGhlIGdseXBoc1xuXG4gICAgX3BsYW4uYXNzaWduR2xvYmFsRmVhdHVyZXMoZ2x5cGhzKTsgLy8gQXNzaWduIGxvY2FsIGZlYXR1cmVzIHRvIGdseXBoc1xuXG5cbiAgICB0aGlzLmFzc2lnbkZlYXR1cmVzKF9wbGFuLCBnbHlwaHMpO1xuICB9O1xuXG4gIERlZmF1bHRTaGFwZXIucGxhblByZXByb2Nlc3NpbmcgPSBmdW5jdGlvbiBwbGFuUHJlcHJvY2Vzc2luZyhwbGFuKSB7XG4gICAgcGxhbi5hZGQoe1xuICAgICAgZ2xvYmFsOiBbXS5jb25jYXQoVkFSSUFUSU9OX0ZFQVRVUkVTLCBESVJFQ1RJT05BTF9GRUFUVVJFU1twbGFuLmRpcmVjdGlvbl0pLFxuICAgICAgbG9jYWw6IEZSQUNUSU9OQUxfRkVBVFVSRVNcbiAgICB9KTtcbiAgfTtcblxuICBEZWZhdWx0U2hhcGVyLnBsYW5GZWF0dXJlcyA9IGZ1bmN0aW9uIHBsYW5GZWF0dXJlcyhwbGFuKSB7Ly8gRG8gbm90aGluZyBieSBkZWZhdWx0LiBMZXQgc3ViY2xhc3NlcyBvdmVycmlkZSB0aGlzLlxuICB9O1xuXG4gIERlZmF1bHRTaGFwZXIucGxhblBvc3Rwcm9jZXNzaW5nID0gZnVuY3Rpb24gcGxhblBvc3Rwcm9jZXNzaW5nKHBsYW4sIHVzZXJGZWF0dXJlcykge1xuICAgIHBsYW4uYWRkKFtdLmNvbmNhdChDT01NT05fRkVBVFVSRVMsIEhPUklaT05UQUxfRkVBVFVSRVMpKTtcbiAgICBwbGFuLnNldEZlYXR1cmVPdmVycmlkZXModXNlckZlYXR1cmVzKTtcbiAgfTtcblxuICBEZWZhdWx0U2hhcGVyLmFzc2lnbkZlYXR1cmVzID0gZnVuY3Rpb24gYXNzaWduRmVhdHVyZXMocGxhbiwgZ2x5cGhzKSB7XG4gICAgLy8gRW5hYmxlIGNvbnRleHR1YWwgZnJhY3Rpb25zXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcblxuICAgICAgaWYgKGdseXBoLmNvZGVQb2ludHNbMF0gPT09IDB4MjA0NCkge1xuICAgICAgICAvLyBmcmFjdGlvbiBzbGFzaFxuICAgICAgICB2YXIgc3RhcnQgPSBpO1xuICAgICAgICB2YXIgZW5kID0gaSArIDE7IC8vIEFwcGx5IG51bWVyYXRvclxuXG4gICAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgdW5pY29kZS5pc0RpZ2l0KGdseXBoc1tzdGFydCAtIDFdLmNvZGVQb2ludHNbMF0pKSB7XG4gICAgICAgICAgZ2x5cGhzW3N0YXJ0IC0gMV0uZmVhdHVyZXMubnVtciA9IHRydWU7XG4gICAgICAgICAgZ2x5cGhzW3N0YXJ0IC0gMV0uZmVhdHVyZXMuZnJhYyA9IHRydWU7XG4gICAgICAgICAgc3RhcnQtLTtcbiAgICAgICAgfSAvLyBBcHBseSBkZW5vbWluYXRvclxuXG5cbiAgICAgICAgd2hpbGUgKGVuZCA8IGdseXBocy5sZW5ndGggJiYgdW5pY29kZS5pc0RpZ2l0KGdseXBoc1tlbmRdLmNvZGVQb2ludHNbMF0pKSB7XG4gICAgICAgICAgZ2x5cGhzW2VuZF0uZmVhdHVyZXMuZG5vbSA9IHRydWU7XG4gICAgICAgICAgZ2x5cGhzW2VuZF0uZmVhdHVyZXMuZnJhYyA9IHRydWU7XG4gICAgICAgICAgZW5kKys7XG4gICAgICAgIH0gLy8gQXBwbHkgZnJhY3Rpb24gc2xhc2hcblxuXG4gICAgICAgIGdseXBoLmZlYXR1cmVzLmZyYWMgPSB0cnVlO1xuICAgICAgICBpID0gZW5kIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIERlZmF1bHRTaGFwZXI7XG59KCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShEZWZhdWx0U2hhcGVyLCBcInplcm9NYXJrV2lkdGhzXCIsICdBRlRFUl9HUE9TJyk7XG5cbnZhciB0cmllID0gbmV3IFVuaWNvZGVUcmllKEJ1ZmZlcihcIkFQQUJBQUFBQUFBQU9BQUFBZjBCQXY3dG1pMU14REFVeDd2dHZqaEFnY0Rna0VnRUFubVhFQklNQ1lhRWN5Z0VpcUJRNEZBa0NFNGlrVWdNaWlCSlNBZ1NpVVFTRE1uOUw5ZVNsNmJkZGRkdWc5dDd5Uy90cmV2cmUrM3IyN3BjTnhaaUcreUNmZENWdi85TGVReE93Um00QUplZ0QyN0FMYmdEOStBQlBKRit6K0JOL2g3eURqNWsvVk9XWDZTZG1VNSt3TFdrbmdneER4YVM4dTBxaWlYNHVpejlYYW1RM3d6RE1BekRNQXpETUF6RFZJL2g5NTlWL3Y3Qk1BekRNQXpETUxseU5UTmlNU2Rld1Z4YmlBNDRCNC9ndXoxcVc1OFZZbE1JMFdzSjBXK042a1h3MHNwdlB0ZHdodGt3bkdNNnVMYVY0WHl6ZzN2M1BNOURQZlEvc09nNHhQV2ppcHkzMVA4TFRxYlUzMDRjL2NMQ1VtV0pMTkIyVXoyVTFLVGVSS05tS0hWTWZiSkMrLzBsb1RaUkgvVzVjdkV2QkpQTWJSRWtXdDNGRDFOY3FYWkJTcHVFMkFkMFBCZWhQdE5yUHRJRWRZUCtoaVJ0L1YxaklpRTY5WDROVC91VlpJM1BVSEU5Ym01TTdlUEdkWld5OTUxdjdObjZqOHYxV1dLUDNtdDZ0dG5zaWd4NlZON1ZjMFZvbVNTR3FXMm1HTlAxbXVaUGw3TGZqTlVhS05GdERHVmYyZnZFOU83VmxCUzVqMzMzYzVwL2Vlb09xY3MxUi9oSXFEV0xKN1RUbGtzaXJWVDFTSTdsOGs0WXArZzNqYWZHY3JVMVJNNmw5dGg4MFhPcG5sTjk3YkROWTRpNHM2MUIwU2kvaXBhMHVITWw2enFFamxGZkNabS9UTThLbXpRRGptdVRBUT09XCIsXCJiYXNlNjRcIikpO1xudmFyIEZFQVRVUkVTID0gWydpc29sJywgJ2ZpbmEnLCAnZmluMicsICdmaW4zJywgJ21lZGknLCAnbWVkMicsICdpbml0J107XG52YXIgU2hhcGluZ0NsYXNzZXMgPSB7XG4gIE5vbl9Kb2luaW5nOiAwLFxuICBMZWZ0X0pvaW5pbmc6IDEsXG4gIFJpZ2h0X0pvaW5pbmc6IDIsXG4gIER1YWxfSm9pbmluZzogMyxcbiAgSm9pbl9DYXVzaW5nOiAzLFxuICBBTEFQSDogNCxcbiAgJ0RBTEFUSCBSSVNIJzogNSxcbiAgVHJhbnNwYXJlbnQ6IDZcbn07XG52YXIgSVNPTCA9ICdpc29sJztcbnZhciBGSU5BID0gJ2ZpbmEnO1xudmFyIEZJTjIgPSAnZmluMic7XG52YXIgRklOMyA9ICdmaW4zJztcbnZhciBNRURJID0gJ21lZGknO1xudmFyIE1FRDIgPSAnbWVkMic7XG52YXIgSU5JVCA9ICdpbml0JztcbnZhciBOT05FID0gbnVsbDsgLy8gRWFjaCBlbnRyeSBpcyBbcHJldkFjdGlvbiwgY3VyQWN0aW9uLCBuZXh0U3RhdGVdXG5cbnZhciBTVEFURV9UQUJMRSA9IFsvLyAgIE5vbl9Kb2luaW5nLCAgICAgICAgTGVmdF9Kb2luaW5nLCAgICAgICBSaWdodF9Kb2luaW5nLCAgICAgRHVhbF9Kb2luaW5nLCAgICAgICAgICAgQUxBUEgsICAgICAgICAgICAgREFMQVRIIFJJU0hcbi8vIFN0YXRlIDA6IHByZXYgd2FzIFUsICBub3Qgd2lsbGluZyB0byBqb2luLlxuW1tOT05FLCBOT05FLCAwXSwgW05PTkUsIElTT0wsIDJdLCBbTk9ORSwgSVNPTCwgMV0sIFtOT05FLCBJU09MLCAyXSwgW05PTkUsIElTT0wsIDFdLCBbTk9ORSwgSVNPTCwgNl1dLCAvLyBTdGF0ZSAxOiBwcmV2IHdhcyBSIG9yIElTT0wvQUxBUEgsICBub3Qgd2lsbGluZyB0byBqb2luLlxuW1tOT05FLCBOT05FLCAwXSwgW05PTkUsIElTT0wsIDJdLCBbTk9ORSwgSVNPTCwgMV0sIFtOT05FLCBJU09MLCAyXSwgW05PTkUsIEZJTjIsIDVdLCBbTk9ORSwgSVNPTCwgNl1dLCAvLyBTdGF0ZSAyOiBwcmV2IHdhcyBEL0wgaW4gSVNPTCBmb3JtLCAgd2lsbGluZyB0byBqb2luLlxuW1tOT05FLCBOT05FLCAwXSwgW05PTkUsIElTT0wsIDJdLCBbSU5JVCwgRklOQSwgMV0sIFtJTklULCBGSU5BLCAzXSwgW0lOSVQsIEZJTkEsIDRdLCBbSU5JVCwgRklOQSwgNl1dLCAvLyBTdGF0ZSAzOiBwcmV2IHdhcyBEIGluIEZJTkEgZm9ybSwgIHdpbGxpbmcgdG8gam9pbi5cbltbTk9ORSwgTk9ORSwgMF0sIFtOT05FLCBJU09MLCAyXSwgW01FREksIEZJTkEsIDFdLCBbTUVESSwgRklOQSwgM10sIFtNRURJLCBGSU5BLCA0XSwgW01FREksIEZJTkEsIDZdXSwgLy8gU3RhdGUgNDogcHJldiB3YXMgRklOQSBBTEFQSCwgIG5vdCB3aWxsaW5nIHRvIGpvaW4uXG5bW05PTkUsIE5PTkUsIDBdLCBbTk9ORSwgSVNPTCwgMl0sIFtNRUQyLCBJU09MLCAxXSwgW01FRDIsIElTT0wsIDJdLCBbTUVEMiwgRklOMiwgNV0sIFtNRUQyLCBJU09MLCA2XV0sIC8vIFN0YXRlIDU6IHByZXYgd2FzIEZJTjIvRklOMyBBTEFQSCwgIG5vdCB3aWxsaW5nIHRvIGpvaW4uXG5bW05PTkUsIE5PTkUsIDBdLCBbTk9ORSwgSVNPTCwgMl0sIFtJU09MLCBJU09MLCAxXSwgW0lTT0wsIElTT0wsIDJdLCBbSVNPTCwgRklOMiwgNV0sIFtJU09MLCBJU09MLCA2XV0sIC8vIFN0YXRlIDY6IHByZXYgd2FzIERBTEFUSC9SSVNILCAgbm90IHdpbGxpbmcgdG8gam9pbi5cbltbTk9ORSwgTk9ORSwgMF0sIFtOT05FLCBJU09MLCAyXSwgW05PTkUsIElTT0wsIDFdLCBbTk9ORSwgSVNPTCwgMl0sIFtOT05FLCBGSU4zLCA1XSwgW05PTkUsIElTT0wsIDZdXV07XG4vKipcclxuICogVGhpcyBpcyBhIHNoYXBlciBmb3IgQXJhYmljLCBhbmQgb3RoZXIgY3Vyc2l2ZSBzY3JpcHRzLlxyXG4gKiBJdCB1c2VzIGRhdGEgZnJvbSBBcmFiaWNTaGFwaW5nLnR4dCBpbiB0aGUgVW5pY29kZSBkYXRhYmFzZSxcclxuICogY29tcGlsZWQgdG8gYSBVbmljb2RlVHJpZSBieSBnZW5lcmF0ZS1kYXRhLmNvZmZlZS5cclxuICpcclxuICogVGhlIHNoYXBpbmcgc3RhdGUgbWFjaGluZSB3YXMgcG9ydGVkIGZyb20gSGFyZmJ1enouXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9iZWhkYWQvaGFyZmJ1enovYmxvYi9tYXN0ZXIvc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtYXJhYmljLmNjXHJcbiAqL1xuXG52YXIgQXJhYmljU2hhcGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRGVmYXVsdFNoYXBlcikge1xuICBfaW5oZXJpdHNMb29zZShBcmFiaWNTaGFwZXIsIF9EZWZhdWx0U2hhcGVyKTtcblxuICBmdW5jdGlvbiBBcmFiaWNTaGFwZXIoKSB7XG4gICAgcmV0dXJuIF9EZWZhdWx0U2hhcGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuXG4gIEFyYWJpY1NoYXBlci5wbGFuRmVhdHVyZXMgPSBmdW5jdGlvbiBwbGFuRmVhdHVyZXMocGxhbikge1xuICAgIHBsYW4uYWRkKFsnY2NtcCcsICdsb2NsJ10pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBGRUFUVVJFUy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGZlYXR1cmUgPSBGRUFUVVJFU1tpXTtcbiAgICAgIHBsYW4uYWRkU3RhZ2UoZmVhdHVyZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIHBsYW4uYWRkU3RhZ2UoJ21zZXQnKTtcbiAgfTtcblxuICBBcmFiaWNTaGFwZXIuYXNzaWduRmVhdHVyZXMgPSBmdW5jdGlvbiBhc3NpZ25GZWF0dXJlcyhwbGFuLCBnbHlwaHMpIHtcbiAgICBfRGVmYXVsdFNoYXBlci5hc3NpZ25GZWF0dXJlcy5jYWxsKHRoaXMsIHBsYW4sIGdseXBocyk7XG5cbiAgICB2YXIgcHJldiA9IC0xO1xuICAgIHZhciBzdGF0ZSA9IDA7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTsgLy8gQXBwbHkgdGhlIHN0YXRlIG1hY2hpbmUgdG8gbWFwIGdseXBocyB0byBmZWF0dXJlc1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjdXJBY3Rpb24gPSB2b2lkIDAsXG4gICAgICAgICAgcHJldkFjdGlvbiA9IHZvaWQgMDtcbiAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcbiAgICAgIHZhciB0eXBlID0gZ2V0U2hhcGluZ0NsYXNzKGdseXBoLmNvZGVQb2ludHNbMF0pO1xuXG4gICAgICBpZiAodHlwZSA9PT0gU2hhcGluZ0NsYXNzZXMuVHJhbnNwYXJlbnQpIHtcbiAgICAgICAgYWN0aW9uc1tpXSA9IE5PTkU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgX1NUQVRFX1RBQkxFJHN0YXRlJHR5ID0gU1RBVEVfVEFCTEVbc3RhdGVdW3R5cGVdO1xuICAgICAgcHJldkFjdGlvbiA9IF9TVEFURV9UQUJMRSRzdGF0ZSR0eVswXTtcbiAgICAgIGN1ckFjdGlvbiA9IF9TVEFURV9UQUJMRSRzdGF0ZSR0eVsxXTtcbiAgICAgIHN0YXRlID0gX1NUQVRFX1RBQkxFJHN0YXRlJHR5WzJdO1xuXG4gICAgICBpZiAocHJldkFjdGlvbiAhPT0gTk9ORSAmJiBwcmV2ICE9PSAtMSkge1xuICAgICAgICBhY3Rpb25zW3ByZXZdID0gcHJldkFjdGlvbjtcbiAgICAgIH1cblxuICAgICAgYWN0aW9uc1tpXSA9IGN1ckFjdGlvbjtcbiAgICAgIHByZXYgPSBpO1xuICAgIH0gLy8gQXBwbHkgdGhlIGNob3NlbiBmZWF0dXJlcyB0byB0aGVpciByZXNwZWN0aXZlIGdseXBoc1xuXG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZ2x5cGhzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGZlYXR1cmUgPSB2b2lkIDA7XG4gICAgICB2YXIgZ2x5cGggPSBnbHlwaHNbaW5kZXhdO1xuXG4gICAgICBpZiAoZmVhdHVyZSA9IGFjdGlvbnNbaW5kZXhdKSB7XG4gICAgICAgIGdseXBoLmZlYXR1cmVzW2ZlYXR1cmVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIEFyYWJpY1NoYXBlcjtcbn0oRGVmYXVsdFNoYXBlcik7XG5cbmZ1bmN0aW9uIGdldFNoYXBpbmdDbGFzcyhjb2RlUG9pbnQpIHtcbiAgdmFyIHJlcyA9IHRyaWUuZ2V0KGNvZGVQb2ludCk7XG5cbiAgaWYgKHJlcykge1xuICAgIHJldHVybiByZXMgLSAxO1xuICB9XG5cbiAgdmFyIGNhdGVnb3J5ID0gdW5pY29kZS5nZXRDYXRlZ29yeShjb2RlUG9pbnQpO1xuXG4gIGlmIChjYXRlZ29yeSA9PT0gJ01uJyB8fCBjYXRlZ29yeSA9PT0gJ01lJyB8fCBjYXRlZ29yeSA9PT0gJ0NmJykge1xuICAgIHJldHVybiBTaGFwaW5nQ2xhc3Nlcy5UcmFuc3BhcmVudDtcbiAgfVxuXG4gIHJldHVybiBTaGFwaW5nQ2xhc3Nlcy5Ob25fSm9pbmluZztcbn1cblxudmFyIEdseXBoSXRlcmF0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBHbHlwaEl0ZXJhdG9yKGdseXBocywgb3B0aW9ucykge1xuICAgIHRoaXMuZ2x5cGhzID0gZ2x5cGhzO1xuICAgIHRoaXMucmVzZXQob3B0aW9ucyk7XG4gIH1cblxuICB2YXIgX3Byb3RvMjQgPSBHbHlwaEl0ZXJhdG9yLnByb3RvdHlwZTtcblxuICBfcHJvdG8yNC5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KG9wdGlvbnMsIGluZGV4KSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7XG4gICAgICBpbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmZsYWdzID0gb3B0aW9ucy5mbGFncyB8fCB7fTtcbiAgICB0aGlzLm1hcmtBdHRhY2htZW50VHlwZSA9IG9wdGlvbnMubWFya0F0dGFjaG1lbnRUeXBlIHx8IDA7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9O1xuXG4gIF9wcm90bzI0LnNob3VsZElnbm9yZSA9IGZ1bmN0aW9uIHNob3VsZElnbm9yZShnbHlwaCkge1xuICAgIHJldHVybiB0aGlzLmZsYWdzLmlnbm9yZU1hcmtzICYmIGdseXBoLmlzTWFyayB8fCB0aGlzLmZsYWdzLmlnbm9yZUJhc2VHbHlwaHMgJiYgZ2x5cGguaXNCYXNlIHx8IHRoaXMuZmxhZ3MuaWdub3JlTGlnYXR1cmVzICYmIGdseXBoLmlzTGlnYXR1cmUgfHwgdGhpcy5tYXJrQXR0YWNobWVudFR5cGUgJiYgZ2x5cGguaXNNYXJrICYmIGdseXBoLm1hcmtBdHRhY2htZW50VHlwZSAhPT0gdGhpcy5tYXJrQXR0YWNobWVudFR5cGU7XG4gIH07XG5cbiAgX3Byb3RvMjQubW92ZSA9IGZ1bmN0aW9uIG1vdmUoZGlyKSB7XG4gICAgdGhpcy5pbmRleCArPSBkaXI7XG5cbiAgICB3aGlsZSAoMCA8PSB0aGlzLmluZGV4ICYmIHRoaXMuaW5kZXggPCB0aGlzLmdseXBocy5sZW5ndGggJiYgdGhpcy5zaG91bGRJZ25vcmUodGhpcy5nbHlwaHNbdGhpcy5pbmRleF0pKSB7XG4gICAgICB0aGlzLmluZGV4ICs9IGRpcjtcbiAgICB9XG5cbiAgICBpZiAoMCA+IHRoaXMuaW5kZXggfHwgdGhpcy5pbmRleCA+PSB0aGlzLmdseXBocy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdseXBoc1t0aGlzLmluZGV4XTtcbiAgfTtcblxuICBfcHJvdG8yNC5uZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlKCsxKTtcbiAgfTtcblxuICBfcHJvdG8yNC5wcmV2ID0gZnVuY3Rpb24gcHJldigpIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlKC0xKTtcbiAgfTtcblxuICBfcHJvdG8yNC5wZWVrID0gZnVuY3Rpb24gcGVlayhjb3VudCkge1xuICAgIGlmIChjb3VudCA9PT0gdm9pZCAwKSB7XG4gICAgICBjb3VudCA9IDE7XG4gICAgfVxuXG4gICAgdmFyIGlkeCA9IHRoaXMuaW5kZXg7XG4gICAgdmFyIHJlcyA9IHRoaXMuaW5jcmVtZW50KGNvdW50KTtcbiAgICB0aGlzLmluZGV4ID0gaWR4O1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgX3Byb3RvMjQucGVla0luZGV4ID0gZnVuY3Rpb24gcGVla0luZGV4KGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09PSB2b2lkIDApIHtcbiAgICAgIGNvdW50ID0gMTtcbiAgICB9XG5cbiAgICB2YXIgaWR4ID0gdGhpcy5pbmRleDtcbiAgICB0aGlzLmluY3JlbWVudChjb3VudCk7XG4gICAgdmFyIHJlcyA9IHRoaXMuaW5kZXg7XG4gICAgdGhpcy5pbmRleCA9IGlkeDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIF9wcm90bzI0LmluY3JlbWVudCA9IGZ1bmN0aW9uIGluY3JlbWVudChjb3VudCkge1xuICAgIGlmIChjb3VudCA9PT0gdm9pZCAwKSB7XG4gICAgICBjb3VudCA9IDE7XG4gICAgfVxuXG4gICAgdmFyIGRpciA9IGNvdW50IDwgMCA/IC0xIDogMTtcbiAgICBjb3VudCA9IE1hdGguYWJzKGNvdW50KTtcblxuICAgIHdoaWxlIChjb3VudC0tKSB7XG4gICAgICB0aGlzLm1vdmUoZGlyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nbHlwaHNbdGhpcy5pbmRleF07XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKEdseXBoSXRlcmF0b3IsIFt7XG4gICAga2V5OiBcImN1clwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2x5cGhzW3RoaXMuaW5kZXhdIHx8IG51bGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEdseXBoSXRlcmF0b3I7XG59KCk7XG5cbnZhciBERUZBVUxUX1NDUklQVFMgPSBbJ0RGTFQnLCAnZGZsdCcsICdsYXRuJ107XG5cbnZhciBPVFByb2Nlc3NvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE9UUHJvY2Vzc29yKGZvbnQsIHRhYmxlKSB7XG4gICAgdGhpcy5mb250ID0gZm9udDtcbiAgICB0aGlzLnRhYmxlID0gdGFibGU7XG4gICAgdGhpcy5zY3JpcHQgPSBudWxsO1xuICAgIHRoaXMuc2NyaXB0VGFnID0gbnVsbDtcbiAgICB0aGlzLmxhbmd1YWdlID0gbnVsbDtcbiAgICB0aGlzLmxhbmd1YWdlVGFnID0gbnVsbDtcbiAgICB0aGlzLmZlYXR1cmVzID0ge307XG4gICAgdGhpcy5sb29rdXBzID0ge307IC8vIFNldHVwIHZhcmlhdGlvbiBzdWJzdGl0dXRpb25zXG5cbiAgICB0aGlzLnZhcmlhdGlvbnNJbmRleCA9IGZvbnQuX3ZhcmlhdGlvblByb2Nlc3NvciA/IHRoaXMuZmluZFZhcmlhdGlvbnNJbmRleChmb250Ll92YXJpYXRpb25Qcm9jZXNzb3Iubm9ybWFsaXplZENvb3JkcykgOiAtMTsgLy8gaW5pdGlhbGl6ZSB0byBkZWZhdWx0IHNjcmlwdCArIGxhbmd1YWdlXG5cbiAgICB0aGlzLnNlbGVjdFNjcmlwdCgpOyAvLyBjdXJyZW50IGNvbnRleHQgKHNldCBieSBhcHBseUZlYXR1cmVzKVxuXG4gICAgdGhpcy5nbHlwaHMgPSBbXTtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IFtdOyAvLyBvbmx5IHVzZWQgYnkgR1BPU1xuXG4gICAgdGhpcy5saWdhdHVyZUlEID0gMTtcbiAgICB0aGlzLmN1cnJlbnRGZWF0dXJlID0gbnVsbDtcbiAgfVxuXG4gIHZhciBfcHJvdG8yNSA9IE9UUHJvY2Vzc29yLnByb3RvdHlwZTtcblxuICBfcHJvdG8yNS5maW5kU2NyaXB0ID0gZnVuY3Rpb24gZmluZFNjcmlwdChzY3JpcHQpIHtcbiAgICBpZiAodGhpcy50YWJsZS5zY3JpcHRMaXN0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShzY3JpcHQpKSB7XG4gICAgICBzY3JpcHQgPSBbc2NyaXB0XTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3IzNiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2Uoc2NyaXB0KSwgX3N0ZXAzNjsgIShfc3RlcDM2ID0gX2l0ZXJhdG9yMzYoKSkuZG9uZTspIHtcbiAgICAgIHZhciBzID0gX3N0ZXAzNi52YWx1ZTtcblxuICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMzcgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMudGFibGUuc2NyaXB0TGlzdCksIF9zdGVwMzc7ICEoX3N0ZXAzNyA9IF9pdGVyYXRvcjM3KCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IF9zdGVwMzcudmFsdWU7XG5cbiAgICAgICAgaWYgKGVudHJ5LnRhZyA9PT0gcykge1xuICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIF9wcm90bzI1LnNlbGVjdFNjcmlwdCA9IGZ1bmN0aW9uIHNlbGVjdFNjcmlwdChzY3JpcHQsIGxhbmd1YWdlLCBkaXJlY3Rpb24kMSkge1xuICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIGVudHJ5O1xuXG4gICAgaWYgKCF0aGlzLnNjcmlwdCB8fCBzY3JpcHQgIT09IHRoaXMuc2NyaXB0VGFnKSB7XG4gICAgICBlbnRyeSA9IHRoaXMuZmluZFNjcmlwdChzY3JpcHQpO1xuXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIGVudHJ5ID0gdGhpcy5maW5kU2NyaXB0KERFRkFVTFRfU0NSSVBUUyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyaXB0VGFnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcmlwdFRhZyA9IGVudHJ5LnRhZztcbiAgICAgIHRoaXMuc2NyaXB0ID0gZW50cnkuc2NyaXB0O1xuICAgICAgdGhpcy5sYW5ndWFnZSA9IG51bGw7XG4gICAgICB0aGlzLmxhbmd1YWdlVGFnID0gbnVsbDtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghZGlyZWN0aW9uJDEgfHwgZGlyZWN0aW9uJDEgIT09IHRoaXMuZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbiQxIHx8IGRpcmVjdGlvbihzY3JpcHQpO1xuICAgIH1cblxuICAgIGlmIChsYW5ndWFnZSAmJiBsYW5ndWFnZS5sZW5ndGggPCA0KSB7XG4gICAgICBsYW5ndWFnZSArPSAnICcucmVwZWF0KDQgLSBsYW5ndWFnZS5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlmICghbGFuZ3VhZ2UgfHwgbGFuZ3VhZ2UgIT09IHRoaXMubGFuZ3VhZ2VUYWcpIHtcbiAgICAgIHRoaXMubGFuZ3VhZ2UgPSBudWxsO1xuXG4gICAgICBmb3IgKHZhciBfaXRlcmF0b3IzOCA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodGhpcy5zY3JpcHQubGFuZ1N5c1JlY29yZHMpLCBfc3RlcDM4OyAhKF9zdGVwMzggPSBfaXRlcmF0b3IzOCgpKS5kb25lOykge1xuICAgICAgICB2YXIgbGFuZyA9IF9zdGVwMzgudmFsdWU7XG5cbiAgICAgICAgaWYgKGxhbmcudGFnID09PSBsYW5ndWFnZSkge1xuICAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5nLmxhbmdTeXM7XG4gICAgICAgICAgdGhpcy5sYW5ndWFnZVRhZyA9IGxhbmcudGFnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5sYW5ndWFnZSkge1xuICAgICAgICB0aGlzLmxhbmd1YWdlID0gdGhpcy5zY3JpcHQuZGVmYXVsdExhbmdTeXM7XG4gICAgICAgIHRoaXMubGFuZ3VhZ2VUYWcgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9IC8vIEJ1aWxkIGEgZmVhdHVyZSBsb29rdXAgdGFibGVcblxuXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuZmVhdHVyZXMgPSB7fTtcblxuICAgICAgaWYgKHRoaXMubGFuZ3VhZ2UpIHtcbiAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMzkgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMubGFuZ3VhZ2UuZmVhdHVyZUluZGV4ZXMpLCBfc3RlcDM5OyAhKF9zdGVwMzkgPSBfaXRlcmF0b3IzOSgpKS5kb25lOykge1xuICAgICAgICAgIHZhciBmZWF0dXJlSW5kZXggPSBfc3RlcDM5LnZhbHVlO1xuICAgICAgICAgIHZhciByZWNvcmQgPSB0aGlzLnRhYmxlLmZlYXR1cmVMaXN0W2ZlYXR1cmVJbmRleF07XG4gICAgICAgICAgdmFyIHN1YnN0aXR1dGVGZWF0dXJlID0gdGhpcy5zdWJzdGl0dXRlRmVhdHVyZUZvclZhcmlhdGlvbnMoZmVhdHVyZUluZGV4KTtcbiAgICAgICAgICB0aGlzLmZlYXR1cmVzW3JlY29yZC50YWddID0gc3Vic3RpdHV0ZUZlYXR1cmUgfHwgcmVjb3JkLmZlYXR1cmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zY3JpcHRUYWc7XG4gIH07XG5cbiAgX3Byb3RvMjUubG9va3Vwc0ZvckZlYXR1cmVzID0gZnVuY3Rpb24gbG9va3Vwc0ZvckZlYXR1cmVzKHVzZXJGZWF0dXJlcywgZXhjbHVkZSkge1xuICAgIGlmICh1c2VyRmVhdHVyZXMgPT09IHZvaWQgMCkge1xuICAgICAgdXNlckZlYXR1cmVzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGxvb2t1cHMgPSBbXTtcblxuICAgIGZvciAodmFyIF9pdGVyYXRvcjQwID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh1c2VyRmVhdHVyZXMpLCBfc3RlcDQwOyAhKF9zdGVwNDAgPSBfaXRlcmF0b3I0MCgpKS5kb25lOykge1xuICAgICAgdmFyIHRhZyA9IF9zdGVwNDAudmFsdWU7XG4gICAgICB2YXIgZmVhdHVyZSA9IHRoaXMuZmVhdHVyZXNbdGFnXTtcblxuICAgICAgaWYgKCFmZWF0dXJlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBfaXRlcmF0b3I0MSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoZmVhdHVyZS5sb29rdXBMaXN0SW5kZXhlcyksIF9zdGVwNDE7ICEoX3N0ZXA0MSA9IF9pdGVyYXRvcjQxKCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBsb29rdXBJbmRleCA9IF9zdGVwNDEudmFsdWU7XG5cbiAgICAgICAgaWYgKGV4Y2x1ZGUgJiYgZXhjbHVkZS5pbmRleE9mKGxvb2t1cEluZGV4KSAhPT0gLTEpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvb2t1cHMucHVzaCh7XG4gICAgICAgICAgZmVhdHVyZTogdGFnLFxuICAgICAgICAgIGluZGV4OiBsb29rdXBJbmRleCxcbiAgICAgICAgICBsb29rdXA6IHRoaXMudGFibGUubG9va3VwTGlzdC5nZXQobG9va3VwSW5kZXgpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvb2t1cHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgIH0pO1xuICAgIHJldHVybiBsb29rdXBzO1xuICB9O1xuXG4gIF9wcm90bzI1LnN1YnN0aXR1dGVGZWF0dXJlRm9yVmFyaWF0aW9ucyA9IGZ1bmN0aW9uIHN1YnN0aXR1dGVGZWF0dXJlRm9yVmFyaWF0aW9ucyhmZWF0dXJlSW5kZXgpIHtcbiAgICBpZiAodGhpcy52YXJpYXRpb25zSW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdGhpcy50YWJsZS5mZWF0dXJlVmFyaWF0aW9ucy5mZWF0dXJlVmFyaWF0aW9uUmVjb3Jkc1t0aGlzLnZhcmlhdGlvbnNJbmRleF07XG4gICAgdmFyIHN1YnN0aXR1dGlvbnMgPSByZWNvcmQuZmVhdHVyZVRhYmxlU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGlvbnM7XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3I0MiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2Uoc3Vic3RpdHV0aW9ucyksIF9zdGVwNDI7ICEoX3N0ZXA0MiA9IF9pdGVyYXRvcjQyKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgc3Vic3RpdHV0aW9uID0gX3N0ZXA0Mi52YWx1ZTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbi5mZWF0dXJlSW5kZXggPT09IGZlYXR1cmVJbmRleCkge1xuICAgICAgICByZXR1cm4gc3Vic3RpdHV0aW9uLmFsdGVybmF0ZUZlYXR1cmVUYWJsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBfcHJvdG8yNS5maW5kVmFyaWF0aW9uc0luZGV4ID0gZnVuY3Rpb24gZmluZFZhcmlhdGlvbnNJbmRleChjb29yZHMpIHtcbiAgICB2YXIgdmFyaWF0aW9ucyA9IHRoaXMudGFibGUuZmVhdHVyZVZhcmlhdGlvbnM7XG5cbiAgICBpZiAoIXZhcmlhdGlvbnMpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkcyA9IHZhcmlhdGlvbnMuZmVhdHVyZVZhcmlhdGlvblJlY29yZHM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb25kaXRpb25zID0gcmVjb3Jkc1tpXS5jb25kaXRpb25TZXQuY29uZGl0aW9uVGFibGU7XG5cbiAgICAgIGlmICh0aGlzLnZhcmlhdGlvbkNvbmRpdGlvbnNNYXRjaChjb25kaXRpb25zLCBjb29yZHMpKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfTtcblxuICBfcHJvdG8yNS52YXJpYXRpb25Db25kaXRpb25zTWF0Y2ggPSBmdW5jdGlvbiB2YXJpYXRpb25Db25kaXRpb25zTWF0Y2goY29uZGl0aW9ucywgY29vcmRzKSB7XG4gICAgcmV0dXJuIGNvbmRpdGlvbnMuZXZlcnkoZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgICAgdmFyIGNvb3JkID0gY29uZGl0aW9uLmF4aXNJbmRleCA8IGNvb3Jkcy5sZW5ndGggPyBjb29yZHNbY29uZGl0aW9uLmF4aXNJbmRleF0gOiAwO1xuICAgICAgcmV0dXJuIGNvbmRpdGlvbi5maWx0ZXJSYW5nZU1pblZhbHVlIDw9IGNvb3JkICYmIGNvb3JkIDw9IGNvbmRpdGlvbi5maWx0ZXJSYW5nZU1heFZhbHVlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzI1LmFwcGx5RmVhdHVyZXMgPSBmdW5jdGlvbiBhcHBseUZlYXR1cmVzKHVzZXJGZWF0dXJlcywgZ2x5cGhzLCBhZHZhbmNlcykge1xuICAgIHZhciBsb29rdXBzID0gdGhpcy5sb29rdXBzRm9yRmVhdHVyZXModXNlckZlYXR1cmVzKTtcbiAgICB0aGlzLmFwcGx5TG9va3Vwcyhsb29rdXBzLCBnbHlwaHMsIGFkdmFuY2VzKTtcbiAgfTtcblxuICBfcHJvdG8yNS5hcHBseUxvb2t1cHMgPSBmdW5jdGlvbiBhcHBseUxvb2t1cHMobG9va3VwcywgZ2x5cGhzLCBwb3NpdGlvbnMpIHtcbiAgICB0aGlzLmdseXBocyA9IGdseXBocztcbiAgICB0aGlzLnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICB0aGlzLmdseXBoSXRlcmF0b3IgPSBuZXcgR2x5cGhJdGVyYXRvcihnbHlwaHMpO1xuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yNDMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKGxvb2t1cHMpLCBfc3RlcDQzOyAhKF9zdGVwNDMgPSBfaXRlcmF0b3I0MygpKS5kb25lOykge1xuICAgICAgdmFyIF9zdGVwNDMkdmFsdWUgPSBfc3RlcDQzLnZhbHVlLFxuICAgICAgICAgIGZlYXR1cmUgPSBfc3RlcDQzJHZhbHVlLmZlYXR1cmUsXG4gICAgICAgICAgbG9va3VwID0gX3N0ZXA0MyR2YWx1ZS5sb29rdXA7XG4gICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlID0gZmVhdHVyZTtcbiAgICAgIHRoaXMuZ2x5cGhJdGVyYXRvci5yZXNldChsb29rdXAuZmxhZ3MpO1xuXG4gICAgICB3aGlsZSAodGhpcy5nbHlwaEl0ZXJhdG9yLmluZGV4IDwgZ2x5cGhzLmxlbmd0aCkge1xuICAgICAgICBpZiAoIShmZWF0dXJlIGluIHRoaXMuZ2x5cGhJdGVyYXRvci5jdXIuZmVhdHVyZXMpKSB7XG4gICAgICAgICAgdGhpcy5nbHlwaEl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjQ0ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShsb29rdXAuc3ViVGFibGVzKSwgX3N0ZXA0NDsgIShfc3RlcDQ0ID0gX2l0ZXJhdG9yNDQoKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgdGFibGUgPSBfc3RlcDQ0LnZhbHVlO1xuICAgICAgICAgIHZhciByZXMgPSB0aGlzLmFwcGx5TG9va3VwKGxvb2t1cC5sb29rdXBUeXBlLCB0YWJsZSk7XG5cbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdseXBoSXRlcmF0b3IubmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8yNS5hcHBseUxvb2t1cCA9IGZ1bmN0aW9uIGFwcGx5TG9va3VwKGxvb2t1cCwgdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJhcHBseUxvb2t1cCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXNcIik7XG4gIH07XG5cbiAgX3Byb3RvMjUuYXBwbHlMb29rdXBMaXN0ID0gZnVuY3Rpb24gYXBwbHlMb29rdXBMaXN0KGxvb2t1cFJlY29yZHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuZ2x5cGhJdGVyYXRvci5vcHRpb25zO1xuICAgIHZhciBnbHlwaEluZGV4ID0gdGhpcy5nbHlwaEl0ZXJhdG9yLmluZGV4O1xuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yNDUgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKGxvb2t1cFJlY29yZHMpLCBfc3RlcDQ1OyAhKF9zdGVwNDUgPSBfaXRlcmF0b3I0NSgpKS5kb25lOykge1xuICAgICAgdmFyIGxvb2t1cFJlY29yZCA9IF9zdGVwNDUudmFsdWU7XG4gICAgICAvLyBSZXNldCBmbGFncyBhbmQgZmluZCBnbHlwaCBpbmRleCBmb3IgdGhpcyBsb29rdXAgcmVjb3JkXG4gICAgICB0aGlzLmdseXBoSXRlcmF0b3IucmVzZXQob3B0aW9ucywgZ2x5cGhJbmRleCk7XG4gICAgICB0aGlzLmdseXBoSXRlcmF0b3IuaW5jcmVtZW50KGxvb2t1cFJlY29yZC5zZXF1ZW5jZUluZGV4KTsgLy8gR2V0IHRoZSBsb29rdXAgYW5kIHNldHVwIGZsYWdzIGZvciBzdWJ0YWJsZXNcblxuICAgICAgdmFyIGxvb2t1cCA9IHRoaXMudGFibGUubG9va3VwTGlzdC5nZXQobG9va3VwUmVjb3JkLmxvb2t1cExpc3RJbmRleCk7XG4gICAgICB0aGlzLmdseXBoSXRlcmF0b3IucmVzZXQobG9va3VwLmZsYWdzLCB0aGlzLmdseXBoSXRlcmF0b3IuaW5kZXgpOyAvLyBBcHBseSBsb29rdXAgc3VidGFibGVzIHVudGlsIG9uZSBtYXRjaGVzXG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjQ2ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShsb29rdXAuc3ViVGFibGVzKSwgX3N0ZXA0NjsgIShfc3RlcDQ2ID0gX2l0ZXJhdG9yNDYoKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIHRhYmxlID0gX3N0ZXA0Ni52YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5hcHBseUxvb2t1cChsb29rdXAubG9va3VwVHlwZSwgdGFibGUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdseXBoSXRlcmF0b3IucmVzZXQob3B0aW9ucywgZ2x5cGhJbmRleCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgX3Byb3RvMjUuY292ZXJhZ2VJbmRleCA9IGZ1bmN0aW9uIGNvdmVyYWdlSW5kZXgoY292ZXJhZ2UsIGdseXBoKSB7XG4gICAgaWYgKGdseXBoID09IG51bGwpIHtcbiAgICAgIGdseXBoID0gdGhpcy5nbHlwaEl0ZXJhdG9yLmN1ci5pZDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvdmVyYWdlLnZlcnNpb24pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIGNvdmVyYWdlLmdseXBocy5pbmRleE9mKGdseXBoKTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I0NyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoY292ZXJhZ2UucmFuZ2VSZWNvcmRzKSwgX3N0ZXA0NzsgIShfc3RlcDQ3ID0gX2l0ZXJhdG9yNDcoKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgcmFuZ2UgPSBfc3RlcDQ3LnZhbHVlO1xuXG4gICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0IDw9IGdseXBoICYmIGdseXBoIDw9IHJhbmdlLmVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0Q292ZXJhZ2VJbmRleCArIGdseXBoIC0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9O1xuXG4gIF9wcm90bzI1Lm1hdGNoID0gZnVuY3Rpb24gbWF0Y2goc2VxdWVuY2VJbmRleCwgc2VxdWVuY2UsIGZuLCBtYXRjaGVkKSB7XG4gICAgdmFyIHBvcyA9IHRoaXMuZ2x5cGhJdGVyYXRvci5pbmRleDtcbiAgICB2YXIgZ2x5cGggPSB0aGlzLmdseXBoSXRlcmF0b3IuaW5jcmVtZW50KHNlcXVlbmNlSW5kZXgpO1xuICAgIHZhciBpZHggPSAwO1xuXG4gICAgd2hpbGUgKGlkeCA8IHNlcXVlbmNlLmxlbmd0aCAmJiBnbHlwaCAmJiBmbihzZXF1ZW5jZVtpZHhdLCBnbHlwaCkpIHtcbiAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgIG1hdGNoZWQucHVzaCh0aGlzLmdseXBoSXRlcmF0b3IuaW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBpZHgrKztcbiAgICAgIGdseXBoID0gdGhpcy5nbHlwaEl0ZXJhdG9yLm5leHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmdseXBoSXRlcmF0b3IuaW5kZXggPSBwb3M7XG5cbiAgICBpZiAoaWR4IDwgc2VxdWVuY2UubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWQgfHwgdHJ1ZTtcbiAgfTtcblxuICBfcHJvdG8yNS5zZXF1ZW5jZU1hdGNoZXMgPSBmdW5jdGlvbiBzZXF1ZW5jZU1hdGNoZXMoc2VxdWVuY2VJbmRleCwgc2VxdWVuY2UpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaChzZXF1ZW5jZUluZGV4LCBzZXF1ZW5jZSwgZnVuY3Rpb24gKGNvbXBvbmVudCwgZ2x5cGgpIHtcbiAgICAgIHJldHVybiBjb21wb25lbnQgPT09IGdseXBoLmlkO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzI1LnNlcXVlbmNlTWF0Y2hJbmRpY2VzID0gZnVuY3Rpb24gc2VxdWVuY2VNYXRjaEluZGljZXMoc2VxdWVuY2VJbmRleCwgc2VxdWVuY2UpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLm1hdGNoKHNlcXVlbmNlSW5kZXgsIHNlcXVlbmNlLCBmdW5jdGlvbiAoY29tcG9uZW50LCBnbHlwaCkge1xuICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZmVhdHVyZSBkb2Vzbid0IGFwcGx5IHRvIHRoaXMgZ2x5cGgsXG4gICAgICBpZiAoIShfdGhpczQuY3VycmVudEZlYXR1cmUgaW4gZ2x5cGguZmVhdHVyZXMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBvbmVudCA9PT0gZ2x5cGguaWQ7XG4gICAgfSwgW10pO1xuICB9O1xuXG4gIF9wcm90bzI1LmNvdmVyYWdlU2VxdWVuY2VNYXRjaGVzID0gZnVuY3Rpb24gY292ZXJhZ2VTZXF1ZW5jZU1hdGNoZXMoc2VxdWVuY2VJbmRleCwgc2VxdWVuY2UpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLm1hdGNoKHNlcXVlbmNlSW5kZXgsIHNlcXVlbmNlLCBmdW5jdGlvbiAoY292ZXJhZ2UsIGdseXBoKSB7XG4gICAgICByZXR1cm4gX3RoaXM1LmNvdmVyYWdlSW5kZXgoY292ZXJhZ2UsIGdseXBoLmlkKSA+PSAwO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzI1LmdldENsYXNzSUQgPSBmdW5jdGlvbiBnZXRDbGFzc0lEKGdseXBoLCBjbGFzc0RlZikge1xuICAgIHN3aXRjaCAoY2xhc3NEZWYudmVyc2lvbikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyBDbGFzcyBhcnJheVxuICAgICAgICB2YXIgaSA9IGdseXBoIC0gY2xhc3NEZWYuc3RhcnRHbHlwaDtcblxuICAgICAgICBpZiAoaSA+PSAwICYmIGkgPCBjbGFzc0RlZi5jbGFzc1ZhbHVlQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGNsYXNzRGVmLmNsYXNzVmFsdWVBcnJheVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjQ4ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShjbGFzc0RlZi5jbGFzc1JhbmdlUmVjb3JkKSwgX3N0ZXA0ODsgIShfc3RlcDQ4ID0gX2l0ZXJhdG9yNDgoKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgcmFuZ2UgPSBfc3RlcDQ4LnZhbHVlO1xuXG4gICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0IDw9IGdseXBoICYmIGdseXBoIDw9IHJhbmdlLmVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmNsYXNzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIF9wcm90bzI1LmNsYXNzU2VxdWVuY2VNYXRjaGVzID0gZnVuY3Rpb24gY2xhc3NTZXF1ZW5jZU1hdGNoZXMoc2VxdWVuY2VJbmRleCwgc2VxdWVuY2UsIGNsYXNzRGVmKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5tYXRjaChzZXF1ZW5jZUluZGV4LCBzZXF1ZW5jZSwgZnVuY3Rpb24gKGNsYXNzSUQsIGdseXBoKSB7XG4gICAgICByZXR1cm4gY2xhc3NJRCA9PT0gX3RoaXM2LmdldENsYXNzSUQoZ2x5cGguaWQsIGNsYXNzRGVmKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8yNS5hcHBseUNvbnRleHQgPSBmdW5jdGlvbiBhcHBseUNvbnRleHQodGFibGUpIHtcbiAgICBzd2l0Y2ggKHRhYmxlLnZlcnNpb24pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jb3ZlcmFnZUluZGV4KHRhYmxlLmNvdmVyYWdlKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNldCA9IHRhYmxlLnJ1bGVTZXRzW2luZGV4XTtcblxuICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I0OSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2Uoc2V0KSwgX3N0ZXA0OTsgIShfc3RlcDQ5ID0gX2l0ZXJhdG9yNDkoKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgcnVsZSA9IF9zdGVwNDkudmFsdWU7XG5cbiAgICAgICAgICBpZiAodGhpcy5zZXF1ZW5jZU1hdGNoZXMoMSwgcnVsZS5pbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5TG9va3VwTGlzdChydWxlLmxvb2t1cFJlY29yZHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIGlmICh0aGlzLmNvdmVyYWdlSW5kZXgodGFibGUuY292ZXJhZ2UpID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ID0gdGhpcy5nZXRDbGFzc0lEKHRoaXMuZ2x5cGhJdGVyYXRvci5jdXIuaWQsIHRhYmxlLmNsYXNzRGVmKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0ID0gdGFibGUuY2xhc3NTZXRbaW5kZXhdO1xuXG4gICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjUwID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShzZXQpLCBfc3RlcDUwOyAhKF9zdGVwNTAgPSBfaXRlcmF0b3I1MCgpKS5kb25lOykge1xuICAgICAgICAgIHZhciBfcnVsZSA9IF9zdGVwNTAudmFsdWU7XG5cbiAgICAgICAgICBpZiAodGhpcy5jbGFzc1NlcXVlbmNlTWF0Y2hlcygxLCBfcnVsZS5jbGFzc2VzLCB0YWJsZS5jbGFzc0RlZikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5TG9va3VwTGlzdChfcnVsZS5sb29rdXBSZWNvcmRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzOlxuICAgICAgICBpZiAodGhpcy5jb3ZlcmFnZVNlcXVlbmNlTWF0Y2hlcygwLCB0YWJsZS5jb3ZlcmFnZXMpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlMb29rdXBMaXN0KHRhYmxlLmxvb2t1cFJlY29yZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIF9wcm90bzI1LmFwcGx5Q2hhaW5pbmdDb250ZXh0ID0gZnVuY3Rpb24gYXBwbHlDaGFpbmluZ0NvbnRleHQodGFibGUpIHtcbiAgICBzd2l0Y2ggKHRhYmxlLnZlcnNpb24pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jb3ZlcmFnZUluZGV4KHRhYmxlLmNvdmVyYWdlKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNldCA9IHRhYmxlLmNoYWluUnVsZVNldHNbaW5kZXhdO1xuXG4gICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjUxID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShzZXQpLCBfc3RlcDUxOyAhKF9zdGVwNTEgPSBfaXRlcmF0b3I1MSgpKS5kb25lOykge1xuICAgICAgICAgIHZhciBydWxlID0gX3N0ZXA1MS52YWx1ZTtcblxuICAgICAgICAgIGlmICh0aGlzLnNlcXVlbmNlTWF0Y2hlcygtcnVsZS5iYWNrdHJhY2subGVuZ3RoLCBydWxlLmJhY2t0cmFjaykgJiYgdGhpcy5zZXF1ZW5jZU1hdGNoZXMoMSwgcnVsZS5pbnB1dCkgJiYgdGhpcy5zZXF1ZW5jZU1hdGNoZXMoMSArIHJ1bGUuaW5wdXQubGVuZ3RoLCBydWxlLmxvb2thaGVhZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5TG9va3VwTGlzdChydWxlLmxvb2t1cFJlY29yZHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIGlmICh0aGlzLmNvdmVyYWdlSW5kZXgodGFibGUuY292ZXJhZ2UpID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ID0gdGhpcy5nZXRDbGFzc0lEKHRoaXMuZ2x5cGhJdGVyYXRvci5jdXIuaWQsIHRhYmxlLmlucHV0Q2xhc3NEZWYpO1xuICAgICAgICB2YXIgcnVsZXMgPSB0YWJsZS5jaGFpbkNsYXNzU2V0W2luZGV4XTtcblxuICAgICAgICBpZiAoIXJ1bGVzKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yNTIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHJ1bGVzKSwgX3N0ZXA1MjsgIShfc3RlcDUyID0gX2l0ZXJhdG9yNTIoKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgX3J1bGUyID0gX3N0ZXA1Mi52YWx1ZTtcblxuICAgICAgICAgIGlmICh0aGlzLmNsYXNzU2VxdWVuY2VNYXRjaGVzKC1fcnVsZTIuYmFja3RyYWNrLmxlbmd0aCwgX3J1bGUyLmJhY2t0cmFjaywgdGFibGUuYmFja3RyYWNrQ2xhc3NEZWYpICYmIHRoaXMuY2xhc3NTZXF1ZW5jZU1hdGNoZXMoMSwgX3J1bGUyLmlucHV0LCB0YWJsZS5pbnB1dENsYXNzRGVmKSAmJiB0aGlzLmNsYXNzU2VxdWVuY2VNYXRjaGVzKDEgKyBfcnVsZTIuaW5wdXQubGVuZ3RoLCBfcnVsZTIubG9va2FoZWFkLCB0YWJsZS5sb29rYWhlYWRDbGFzc0RlZikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5TG9va3VwTGlzdChfcnVsZTIubG9va3VwUmVjb3Jkcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaWYgKHRoaXMuY292ZXJhZ2VTZXF1ZW5jZU1hdGNoZXMoLXRhYmxlLmJhY2t0cmFja0dseXBoQ291bnQsIHRhYmxlLmJhY2t0cmFja0NvdmVyYWdlKSAmJiB0aGlzLmNvdmVyYWdlU2VxdWVuY2VNYXRjaGVzKDAsIHRhYmxlLmlucHV0Q292ZXJhZ2UpICYmIHRoaXMuY292ZXJhZ2VTZXF1ZW5jZU1hdGNoZXModGFibGUuaW5wdXRHbHlwaENvdW50LCB0YWJsZS5sb29rYWhlYWRDb3ZlcmFnZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUxvb2t1cExpc3QodGFibGUubG9va3VwUmVjb3Jkcyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgcmV0dXJuIE9UUHJvY2Vzc29yO1xufSgpO1xuXG52YXIgR2x5cGhJbmZvID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gR2x5cGhJbmZvKGZvbnQsIGlkLCBjb2RlUG9pbnRzLCBmZWF0dXJlcykge1xuICAgIGlmIChjb2RlUG9pbnRzID09PSB2b2lkIDApIHtcbiAgICAgIGNvZGVQb2ludHMgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLl9mb250ID0gZm9udDtcbiAgICB0aGlzLmNvZGVQb2ludHMgPSBjb2RlUG9pbnRzO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLmZlYXR1cmVzID0ge307XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShmZWF0dXJlcykpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5mZWF0dXJlc1tmZWF0dXJlXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmVhdHVyZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZmVhdHVyZXMsIGZlYXR1cmVzKTtcbiAgICB9XG5cbiAgICB0aGlzLmxpZ2F0dXJlSUQgPSBudWxsO1xuICAgIHRoaXMubGlnYXR1cmVDb21wb25lbnQgPSBudWxsO1xuICAgIHRoaXMuaXNMaWdhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5jdXJzaXZlQXR0YWNobWVudCA9IG51bGw7XG4gICAgdGhpcy5tYXJrQXR0YWNobWVudCA9IG51bGw7XG4gICAgdGhpcy5zaGFwZXJJbmZvID0gbnVsbDtcbiAgICB0aGlzLnN1YnN0aXR1dGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc011bHRpcGxpZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBfcHJvdG8yNiA9IEdseXBoSW5mby5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMjYuY29weSA9IGZ1bmN0aW9uIGNvcHkoKSB7XG4gICAgcmV0dXJuIG5ldyBHbHlwaEluZm8odGhpcy5fZm9udCwgdGhpcy5pZCwgdGhpcy5jb2RlUG9pbnRzLCB0aGlzLmZlYXR1cmVzKTtcbiAgfTtcblxuICBfY3JlYXRlQ2xhc3MoR2x5cGhJbmZvLCBbe1xuICAgIGtleTogXCJpZFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoaWQpIHtcbiAgICAgIHRoaXMuX2lkID0gaWQ7XG4gICAgICB0aGlzLnN1YnN0aXR1dGVkID0gdHJ1ZTtcbiAgICAgIHZhciBHREVGID0gdGhpcy5fZm9udC5HREVGO1xuXG4gICAgICBpZiAoR0RFRiAmJiBHREVGLmdseXBoQ2xhc3NEZWYpIHtcbiAgICAgICAgLy8gVE9ETzogY2xlYW4gdGhpcyB1cFxuICAgICAgICB2YXIgY2xhc3NJRCA9IE9UUHJvY2Vzc29yLnByb3RvdHlwZS5nZXRDbGFzc0lEKGlkLCBHREVGLmdseXBoQ2xhc3NEZWYpO1xuICAgICAgICB0aGlzLmlzQmFzZSA9IGNsYXNzSUQgPT09IDE7XG4gICAgICAgIHRoaXMuaXNMaWdhdHVyZSA9IGNsYXNzSUQgPT09IDI7XG4gICAgICAgIHRoaXMuaXNNYXJrID0gY2xhc3NJRCA9PT0gMztcbiAgICAgICAgdGhpcy5tYXJrQXR0YWNobWVudFR5cGUgPSBHREVGLm1hcmtBdHRhY2hDbGFzc0RlZiA/IE9UUHJvY2Vzc29yLnByb3RvdHlwZS5nZXRDbGFzc0lEKGlkLCBHREVGLm1hcmtBdHRhY2hDbGFzc0RlZikgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc01hcmsgPSB0aGlzLmNvZGVQb2ludHMubGVuZ3RoID4gMCAmJiB0aGlzLmNvZGVQb2ludHMuZXZlcnkodW5pY29kZS5pc01hcmspO1xuICAgICAgICB0aGlzLmlzQmFzZSA9ICF0aGlzLmlzTWFyaztcbiAgICAgICAgdGhpcy5pc0xpZ2F0dXJlID0gdGhpcy5jb2RlUG9pbnRzLmxlbmd0aCA+IDE7XG4gICAgICAgIHRoaXMubWFya0F0dGFjaG1lbnRUeXBlID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gR2x5cGhJbmZvO1xufSgpO1xuLyoqXHJcbiAqIFRoaXMgaXMgYSBzaGFwZXIgZm9yIHRoZSBIYW5ndWwgc2NyaXB0LCB1c2VkIGJ5IHRoZSBLb3JlYW4gbGFuZ3VhZ2UuXHJcbiAqIEl0IGRvZXMgdGhlIGZvbGxvd2luZzpcclxuICogICAtIGRlY29tcG9zZSBpZiB1bnN1cHBvcnRlZCBieSB0aGUgZm9udDpcclxuICogICAgIDxMVj4gICAtPiA8TCxWPlxyXG4gKiAgICAgPExWVD4gIC0+IDxMLFYsVD5cclxuICogICAgIDxMVixUPiAtPiA8TCxWLFQ+XHJcbiAqXHJcbiAqICAgLSBjb21wb3NlIGlmIHN1cHBvcnRlZCBieSB0aGUgZm9udDpcclxuICogICAgIDxMLFY+ICAgLT4gPExWPlxyXG4gKiAgICAgPEwsVixUPiAtPiA8TFZUPlxyXG4gKiAgICAgPExWLFQ+ICAtPiA8TFZUPlxyXG4gKlxyXG4gKiAgIC0gcmVvcmRlciB0b25lIG1hcmtzIChTIGlzIGFueSB2YWxpZCBzeWxsYWJsZSk6XHJcbiAqICAgICA8UywgTT4gLT4gPE0sIFM+XHJcbiAqXHJcbiAqICAgLSBhcHBseSBsam1vLCB2am1vLCBhbmQgdGptbyBPcGVuVHlwZSBmZWF0dXJlcyB0byBkZWNvbXBvc2VkIEphbW8gc2VxdWVuY2VzLlxyXG4gKlxyXG4gKiBUaGlzIGxvZ2ljIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzOlxyXG4gKiAgIC0gaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvT3BlblR5cGVEZXYvaGFuZ3VsL2ludHJvLmh0bVxyXG4gKiAgIC0gaHR0cDovL2t0dWcub3JnL35ub21vcy9oYXJmYnV6ei1oYW5ndWwvaGFuZ3Vsc2hhcGVyLnBkZlxyXG4gKi9cblxuXG52YXIgSGFuZ3VsU2hhcGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRGVmYXVsdFNoYXBlcjIpIHtcbiAgX2luaGVyaXRzTG9vc2UoSGFuZ3VsU2hhcGVyLCBfRGVmYXVsdFNoYXBlcjIpO1xuXG4gIGZ1bmN0aW9uIEhhbmd1bFNoYXBlcigpIHtcbiAgICByZXR1cm4gX0RlZmF1bHRTaGFwZXIyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuXG4gIEhhbmd1bFNoYXBlci5wbGFuRmVhdHVyZXMgPSBmdW5jdGlvbiBwbGFuRmVhdHVyZXMocGxhbikge1xuICAgIHBsYW4uYWRkKFsnbGptbycsICd2am1vJywgJ3RqbW8nXSwgZmFsc2UpO1xuICB9O1xuXG4gIEhhbmd1bFNoYXBlci5hc3NpZ25GZWF0dXJlcyA9IGZ1bmN0aW9uIGFzc2lnbkZlYXR1cmVzKHBsYW4sIGdseXBocykge1xuICAgIHZhciBzdGF0ZSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBnbHlwaHMubGVuZ3RoKSB7XG4gICAgICB2YXIgYWN0aW9uID0gdm9pZCAwO1xuICAgICAgdmFyIGdseXBoID0gZ2x5cGhzW2ldO1xuICAgICAgdmFyIGNvZGUgPSBnbHlwaC5jb2RlUG9pbnRzWzBdO1xuICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlKGNvZGUpO1xuICAgICAgdmFyIF9TVEFURV9UQUJMRSQxJHN0YXRlJCA9IFNUQVRFX1RBQkxFJDFbc3RhdGVdW3R5cGVdO1xuICAgICAgYWN0aW9uID0gX1NUQVRFX1RBQkxFJDEkc3RhdGUkWzBdO1xuICAgICAgc3RhdGUgPSBfU1RBVEVfVEFCTEUkMSRzdGF0ZSRbMV07XG5cbiAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgIGNhc2UgREVDT01QT1NFOlxuICAgICAgICAgIC8vIERlY29tcG9zZSB0aGUgY29tcG9zZWQgc3lsbGFibGUgaWYgaXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZm9udC5cbiAgICAgICAgICBpZiAoIXBsYW4uZm9udC5oYXNHbHlwaEZvckNvZGVQb2ludChjb2RlKSkge1xuICAgICAgICAgICAgaSA9IGRlY29tcG9zZShnbHlwaHMsIGksIHBsYW4uZm9udCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDT01QT1NFOlxuICAgICAgICAgIC8vIEZvdW5kIGEgZGVjb21wb3NlZCBzeWxsYWJsZS4gVHJ5IHRvIGNvbXBvc2UgaWYgc3VwcG9ydGVkIGJ5IHRoZSBmb250LlxuICAgICAgICAgIGkgPSBjb21wb3NlKGdseXBocywgaSwgcGxhbi5mb250KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRPTkVfTUFSSzpcbiAgICAgICAgICAvLyBHb3QgYSB2YWxpZCBzeWxsYWJsZSwgZm9sbG93ZWQgYnkgYSB0b25lIG1hcmsuIE1vdmUgdGhlIHRvbmUgbWFyayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzeWxsYWJsZS5cbiAgICAgICAgICByZW9yZGVyVG9uZU1hcmsoZ2x5cGhzLCBpLCBwbGFuLmZvbnQpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgSU5WQUxJRDpcbiAgICAgICAgICAvLyBUb25lIG1hcmsgaGFzIG5vIHZhbGlkIHN5bGxhYmxlIHRvIGF0dGFjaCB0bywgc28gaW5zZXJ0IGEgZG90dGVkIGNpcmNsZVxuICAgICAgICAgIGkgPSBpbnNlcnREb3R0ZWRDaXJjbGUoZ2x5cGhzLCBpLCBwbGFuLmZvbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBIYW5ndWxTaGFwZXI7XG59KERlZmF1bHRTaGFwZXIpO1xuXG5fZGVmaW5lUHJvcGVydHkoSGFuZ3VsU2hhcGVyLCBcInplcm9NYXJrV2lkdGhzXCIsICdOT05FJyk7XG5cbnZhciBIQU5HVUxfQkFTRSA9IDB4YWMwMDtcbnZhciBIQU5HVUxfRU5EID0gMHhkN2E0O1xudmFyIEhBTkdVTF9DT1VOVCA9IEhBTkdVTF9FTkQgLSBIQU5HVUxfQkFTRSArIDE7XG52YXIgTF9CQVNFID0gMHgxMTAwOyAvLyBsZWFkXG5cbnZhciBWX0JBU0UgPSAweDExNjE7IC8vIHZvd2VsXG5cbnZhciBUX0JBU0UgPSAweDExYTc7IC8vIHRyYWlsXG5cbnZhciBMX0NPVU5UID0gMTk7XG52YXIgVl9DT1VOVCA9IDIxO1xudmFyIFRfQ09VTlQgPSAyODtcbnZhciBMX0VORCA9IExfQkFTRSArIExfQ09VTlQgLSAxO1xudmFyIFZfRU5EID0gVl9CQVNFICsgVl9DT1VOVCAtIDE7XG52YXIgVF9FTkQgPSBUX0JBU0UgKyBUX0NPVU5UIC0gMTtcbnZhciBET1RURURfQ0lSQ0xFID0gMHgyNWNjO1xuXG52YXIgaXNMID0gZnVuY3Rpb24gaXNMKGNvZGUpIHtcbiAgcmV0dXJuIDB4MTEwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHgxMTVmIHx8IDB4YTk2MCA8PSBjb2RlICYmIGNvZGUgPD0gMHhhOTdjO1xufTtcblxudmFyIGlzViA9IGZ1bmN0aW9uIGlzVihjb2RlKSB7XG4gIHJldHVybiAweDExNjAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MTFhNyB8fCAweGQ3YjAgPD0gY29kZSAmJiBjb2RlIDw9IDB4ZDdjNjtcbn07XG5cbnZhciBpc1QgPSBmdW5jdGlvbiBpc1QoY29kZSkge1xuICByZXR1cm4gMHgxMWE4IDw9IGNvZGUgJiYgY29kZSA8PSAweDExZmYgfHwgMHhkN2NiIDw9IGNvZGUgJiYgY29kZSA8PSAweGQ3ZmI7XG59O1xuXG52YXIgaXNUb25lID0gZnVuY3Rpb24gaXNUb25lKGNvZGUpIHtcbiAgcmV0dXJuIDB4MzAyZSA8PSBjb2RlICYmIGNvZGUgPD0gMHgzMDJmO1xufTtcblxudmFyIGlzTFZUID0gZnVuY3Rpb24gaXNMVlQoY29kZSkge1xuICByZXR1cm4gSEFOR1VMX0JBU0UgPD0gY29kZSAmJiBjb2RlIDw9IEhBTkdVTF9FTkQ7XG59O1xuXG52YXIgaXNMViA9IGZ1bmN0aW9uIGlzTFYoY29kZSkge1xuICByZXR1cm4gY29kZSAtIEhBTkdVTF9CQVNFIDwgSEFOR1VMX0NPVU5UICYmIChjb2RlIC0gSEFOR1VMX0JBU0UpICUgVF9DT1VOVCA9PT0gMDtcbn07XG5cbnZhciBpc0NvbWJpbmluZ0wgPSBmdW5jdGlvbiBpc0NvbWJpbmluZ0woY29kZSkge1xuICByZXR1cm4gTF9CQVNFIDw9IGNvZGUgJiYgY29kZSA8PSBMX0VORDtcbn07XG5cbnZhciBpc0NvbWJpbmluZ1YgPSBmdW5jdGlvbiBpc0NvbWJpbmluZ1YoY29kZSkge1xuICByZXR1cm4gVl9CQVNFIDw9IGNvZGUgJiYgY29kZSA8PSBWX0VORDtcbn07XG5cbnZhciBpc0NvbWJpbmluZ1QgPSBmdW5jdGlvbiBpc0NvbWJpbmluZ1QoY29kZSkge1xuICByZXR1cm4gMSA8PSBjb2RlICYmIGNvZGUgPD0gVF9FTkQ7XG59OyAvLyBDaGFyYWN0ZXIgY2F0ZWdvcmllc1xuXG5cbnZhciBYID0gMDsgLy8gT3RoZXIgY2hhcmFjdGVyXG5cbnZhciBMID0gMTsgLy8gTGVhZGluZyBjb25zb25hbnRcblxudmFyIFYgPSAyOyAvLyBNZWRpYWwgdm93ZWxcblxudmFyIFQgPSAzOyAvLyBUcmFpbGluZyBjb25zb25hbnRcblxudmFyIExWID0gNDsgLy8gQ29tcG9zZWQgPExWPiBzeWxsYWJsZVxuXG52YXIgTFZUID0gNTsgLy8gQ29tcG9zZWQgPExWVD4gc3lsbGFibGVcblxudmFyIE0gPSA2OyAvLyBUb25lIG1hcmtcbi8vIFRoaXMgZnVuY3Rpb24gY2xhc3NpZmllcyBhIGNoYXJhY3RlciB1c2luZyB0aGUgYWJvdmUgY2F0ZWdvcmllcy5cblxuZnVuY3Rpb24gZ2V0VHlwZShjb2RlKSB7XG4gIGlmIChpc0woY29kZSkpIHtcbiAgICByZXR1cm4gTDtcbiAgfVxuXG4gIGlmIChpc1YoY29kZSkpIHtcbiAgICByZXR1cm4gVjtcbiAgfVxuXG4gIGlmIChpc1QoY29kZSkpIHtcbiAgICByZXR1cm4gVDtcbiAgfVxuXG4gIGlmIChpc0xWKGNvZGUpKSB7XG4gICAgcmV0dXJuIExWO1xuICB9XG5cbiAgaWYgKGlzTFZUKGNvZGUpKSB7XG4gICAgcmV0dXJuIExWVDtcbiAgfVxuXG4gIGlmIChpc1RvbmUoY29kZSkpIHtcbiAgICByZXR1cm4gTTtcbiAgfVxuXG4gIHJldHVybiBYO1xufSAvLyBTdGF0ZSBtYWNoaW5lIGFjdGlvbnNcblxuXG52YXIgTk9fQUNUSU9OID0gMDtcbnZhciBERUNPTVBPU0UgPSAxO1xudmFyIENPTVBPU0UgPSAyO1xudmFyIFRPTkVfTUFSSyA9IDQ7XG52YXIgSU5WQUxJRCA9IDU7IC8vIEJ1aWxkIGEgc3RhdGUgbWFjaGluZSB0aGF0IGFjY2VwdHMgdmFsaWQgc3lsbGFibGVzLCBhbmQgYXBwbGllcyBhY3Rpb25zIGFsb25nIHRoZSB3YXkuXG4vLyBUaGUgbG9naWMgdGhpcyBpcyBpbXBsZW1lbnRpbmcgaXMgZG9jdW1lbnRlZCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLlxuXG52YXIgU1RBVEVfVEFCTEUkMSA9IFsvLyAgICAgICBYICAgICAgICAgICAgICAgICBMICAgICAgICAgICAgICAgICBWICAgICAgICAgICAgICAgIFQgICAgICAgICAgICAgICAgICBMViAgICAgICAgICAgICAgICBMVlQgICAgICAgICAgICAgICBNXG4vLyBTdGF0ZSAwOiBzdGFydCBzdGF0ZVxuW1tOT19BQ1RJT04sIDBdLCBbTk9fQUNUSU9OLCAxXSwgW05PX0FDVElPTiwgMF0sIFtOT19BQ1RJT04sIDBdLCBbREVDT01QT1NFLCAyXSwgW0RFQ09NUE9TRSwgM10sIFtJTlZBTElELCAwXV0sIC8vIFN0YXRlIDE6IDxMPlxuW1tOT19BQ1RJT04sIDBdLCBbTk9fQUNUSU9OLCAxXSwgW0NPTVBPU0UsIDJdLCBbTk9fQUNUSU9OLCAwXSwgW0RFQ09NUE9TRSwgMl0sIFtERUNPTVBPU0UsIDNdLCBbSU5WQUxJRCwgMF1dLCAvLyBTdGF0ZSAyOiA8TCxWPiBvciA8TFY+XG5bW05PX0FDVElPTiwgMF0sIFtOT19BQ1RJT04sIDFdLCBbTk9fQUNUSU9OLCAwXSwgW0NPTVBPU0UsIDNdLCBbREVDT01QT1NFLCAyXSwgW0RFQ09NUE9TRSwgM10sIFtUT05FX01BUkssIDBdXSwgLy8gU3RhdGUgMzogPEwsVixUPiBvciA8TFZUPlxuW1tOT19BQ1RJT04sIDBdLCBbTk9fQUNUSU9OLCAxXSwgW05PX0FDVElPTiwgMF0sIFtOT19BQ1RJT04sIDBdLCBbREVDT01QT1NFLCAyXSwgW0RFQ09NUE9TRSwgM10sIFtUT05FX01BUkssIDBdXV07XG5cbmZ1bmN0aW9uIGdldEdseXBoKGZvbnQsIGNvZGUsIGZlYXR1cmVzKSB7XG4gIHJldHVybiBuZXcgR2x5cGhJbmZvKGZvbnQsIGZvbnQuZ2x5cGhGb3JDb2RlUG9pbnQoY29kZSkuaWQsIFtjb2RlXSwgZmVhdHVyZXMpO1xufVxuXG5mdW5jdGlvbiBkZWNvbXBvc2UoZ2x5cGhzLCBpLCBmb250KSB7XG4gIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcbiAgdmFyIGNvZGUgPSBnbHlwaC5jb2RlUG9pbnRzWzBdO1xuICB2YXIgcyA9IGNvZGUgLSBIQU5HVUxfQkFTRTtcbiAgdmFyIHQgPSBUX0JBU0UgKyBzICUgVF9DT1VOVDtcbiAgcyA9IHMgLyBUX0NPVU5UIHwgMDtcbiAgdmFyIGwgPSBMX0JBU0UgKyBzIC8gVl9DT1VOVCB8IDA7XG4gIHZhciB2ID0gVl9CQVNFICsgcyAlIFZfQ09VTlQ7IC8vIERvbid0IGRlY29tcG9zZSBpZiBhbGwgb2YgdGhlIGNvbXBvbmVudHMgYXJlIG5vdCBhdmFpbGFibGVcblxuICBpZiAoIWZvbnQuaGFzR2x5cGhGb3JDb2RlUG9pbnQobCkgfHwgIWZvbnQuaGFzR2x5cGhGb3JDb2RlUG9pbnQodikgfHwgdCAhPT0gVF9CQVNFICYmICFmb250Lmhhc0dseXBoRm9yQ29kZVBvaW50KHQpKSB7XG4gICAgcmV0dXJuIGk7XG4gIH0gLy8gUmVwbGFjZSB0aGUgY3VycmVudCBnbHlwaCB3aXRoIGRlY29tcG9zZWQgTCwgViwgYW5kIFQgZ2x5cGhzLFxuICAvLyBhbmQgYXBwbHkgdGhlIHByb3BlciBPcGVuVHlwZSBmZWF0dXJlcyB0byBlYWNoIGNvbXBvbmVudC5cblxuXG4gIHZhciBsam1vID0gZ2V0R2x5cGgoZm9udCwgbCwgZ2x5cGguZmVhdHVyZXMpO1xuICBsam1vLmZlYXR1cmVzLmxqbW8gPSB0cnVlO1xuICB2YXIgdmptbyA9IGdldEdseXBoKGZvbnQsIHYsIGdseXBoLmZlYXR1cmVzKTtcbiAgdmptby5mZWF0dXJlcy52am1vID0gdHJ1ZTtcbiAgdmFyIGluc2VydCA9IFtsam1vLCB2am1vXTtcblxuICBpZiAodCA+IFRfQkFTRSkge1xuICAgIHZhciB0am1vID0gZ2V0R2x5cGgoZm9udCwgdCwgZ2x5cGguZmVhdHVyZXMpO1xuICAgIHRqbW8uZmVhdHVyZXMudGptbyA9IHRydWU7XG4gICAgaW5zZXJ0LnB1c2godGptbyk7XG4gIH1cblxuICBnbHlwaHMuc3BsaWNlLmFwcGx5KGdseXBocywgW2ksIDFdLmNvbmNhdChpbnNlcnQpKTtcbiAgcmV0dXJuIGkgKyBpbnNlcnQubGVuZ3RoIC0gMTtcbn1cblxuZnVuY3Rpb24gY29tcG9zZShnbHlwaHMsIGksIGZvbnQpIHtcbiAgdmFyIGdseXBoID0gZ2x5cGhzW2ldO1xuICB2YXIgY29kZSA9IGdseXBoc1tpXS5jb2RlUG9pbnRzWzBdO1xuICB2YXIgdHlwZSA9IGdldFR5cGUoY29kZSk7XG4gIHZhciBwcmV2ID0gZ2x5cGhzW2kgLSAxXS5jb2RlUG9pbnRzWzBdO1xuICB2YXIgcHJldlR5cGUgPSBnZXRUeXBlKHByZXYpOyAvLyBGaWd1cmUgb3V0IHdoYXQgdHlwZSBvZiBzeWxsYWJsZSB3ZSdyZSBkZWFsaW5nIHdpdGhcblxuICB2YXIgbHYsIGxqbW8sIHZqbW8sIHRqbW87XG5cbiAgaWYgKHByZXZUeXBlID09PSBMViAmJiB0eXBlID09PSBUKSB7XG4gICAgLy8gPExWLFQ+XG4gICAgbHYgPSBwcmV2O1xuICAgIHRqbW8gPSBnbHlwaDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZSA9PT0gVikge1xuICAgICAgLy8gPEwsVj5cbiAgICAgIGxqbW8gPSBnbHlwaHNbaSAtIDFdO1xuICAgICAgdmptbyA9IGdseXBoO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA8TCxWLFQ+XG4gICAgICBsam1vID0gZ2x5cGhzW2kgLSAyXTtcbiAgICAgIHZqbW8gPSBnbHlwaHNbaSAtIDFdO1xuICAgICAgdGptbyA9IGdseXBoO1xuICAgIH1cblxuICAgIHZhciBsID0gbGptby5jb2RlUG9pbnRzWzBdO1xuICAgIHZhciB2ID0gdmptby5jb2RlUG9pbnRzWzBdOyAvLyBNYWtlIHN1cmUgTCBhbmQgViBhcmUgY29tYmluaW5nIGNoYXJhY3RlcnNcblxuICAgIGlmIChpc0NvbWJpbmluZ0wobCkgJiYgaXNDb21iaW5pbmdWKHYpKSB7XG4gICAgICBsdiA9IEhBTkdVTF9CQVNFICsgKChsIC0gTF9CQVNFKSAqIFZfQ09VTlQgKyAodiAtIFZfQkFTRSkpICogVF9DT1VOVDtcbiAgICB9XG4gIH1cblxuICB2YXIgdCA9IHRqbW8gJiYgdGptby5jb2RlUG9pbnRzWzBdIHx8IFRfQkFTRTtcblxuICBpZiAobHYgIT0gbnVsbCAmJiAodCA9PT0gVF9CQVNFIHx8IGlzQ29tYmluaW5nVCh0KSkpIHtcbiAgICB2YXIgcyA9IGx2ICsgKHQgLSBUX0JBU0UpOyAvLyBSZXBsYWNlIHdpdGggYSBjb21wb3NlZCBnbHlwaCBpZiBzdXBwb3J0ZWQgYnkgdGhlIGZvbnQsXG4gICAgLy8gb3RoZXJ3aXNlIGFwcGx5IHRoZSBwcm9wZXIgT3BlblR5cGUgZmVhdHVyZXMgdG8gZWFjaCBjb21wb25lbnQuXG5cbiAgICBpZiAoZm9udC5oYXNHbHlwaEZvckNvZGVQb2ludChzKSkge1xuICAgICAgdmFyIGRlbCA9IHByZXZUeXBlID09PSBWID8gMyA6IDI7XG4gICAgICBnbHlwaHMuc3BsaWNlKGkgLSBkZWwgKyAxLCBkZWwsIGdldEdseXBoKGZvbnQsIHMsIGdseXBoLmZlYXR1cmVzKSk7XG4gICAgICByZXR1cm4gaSAtIGRlbCArIDE7XG4gICAgfVxuICB9IC8vIERpZG4ndCBjb21wb3NlIChlaXRoZXIgYSBub24tY29tYmluaW5nIGNvbXBvbmVudCBvciB1bnN1cHBvcnRlZCBieSBmb250KS5cblxuXG4gIGlmIChsam1vKSB7XG4gICAgbGptby5mZWF0dXJlcy5sam1vID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICh2am1vKSB7XG4gICAgdmptby5mZWF0dXJlcy52am1vID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0am1vKSB7XG4gICAgdGptby5mZWF0dXJlcy50am1vID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcmV2VHlwZSA9PT0gTFYpIHtcbiAgICAvLyBTZXF1ZW5jZSB3YXMgb3JpZ2luYWxseSA8TCxWPiwgd2hpY2ggZ290IGNvbWJpbmVkIGVhcmxpZXIuXG4gICAgLy8gRWl0aGVyIHRoZSBUIHdhcyBub24tY29tYmluaW5nLCBvciB0aGUgTFZUIGdseXBoIHdhc24ndCBzdXBwb3J0ZWQuXG4gICAgLy8gRGVjb21wb3NlIHRoZSBnbHlwaCBhZ2FpbiBhbmQgYXBwbHkgT1QgZmVhdHVyZXMuXG4gICAgZGVjb21wb3NlKGdseXBocywgaSAtIDEsIGZvbnQpO1xuICAgIHJldHVybiBpICsgMTtcbiAgfVxuXG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiBnZXRMZW5ndGgoY29kZSkge1xuICBzd2l0Y2ggKGdldFR5cGUoY29kZSkpIHtcbiAgICBjYXNlIExWOlxuICAgIGNhc2UgTFZUOlxuICAgICAgcmV0dXJuIDE7XG5cbiAgICBjYXNlIFY6XG4gICAgICByZXR1cm4gMjtcblxuICAgIGNhc2UgVDpcbiAgICAgIHJldHVybiAzO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlb3JkZXJUb25lTWFyayhnbHlwaHMsIGksIGZvbnQpIHtcbiAgdmFyIGdseXBoID0gZ2x5cGhzW2ldO1xuICB2YXIgY29kZSA9IGdseXBoc1tpXS5jb2RlUG9pbnRzWzBdOyAvLyBNb3ZlIHRvbmUgbWFyayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmV2aW91cyBzeWxsYWJsZSwgdW5sZXNzIGl0IGlzIHplcm8gd2lkdGhcblxuICBpZiAoZm9udC5nbHlwaEZvckNvZGVQb2ludChjb2RlKS5hZHZhbmNlV2lkdGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcHJldiA9IGdseXBoc1tpIC0gMV0uY29kZVBvaW50c1swXTtcbiAgdmFyIGxlbiA9IGdldExlbmd0aChwcmV2KTtcbiAgZ2x5cGhzLnNwbGljZShpLCAxKTtcbiAgcmV0dXJuIGdseXBocy5zcGxpY2UoaSAtIGxlbiwgMCwgZ2x5cGgpO1xufVxuXG5mdW5jdGlvbiBpbnNlcnREb3R0ZWRDaXJjbGUoZ2x5cGhzLCBpLCBmb250KSB7XG4gIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcbiAgdmFyIGNvZGUgPSBnbHlwaHNbaV0uY29kZVBvaW50c1swXTtcblxuICBpZiAoZm9udC5oYXNHbHlwaEZvckNvZGVQb2ludChET1RURURfQ0lSQ0xFKSkge1xuICAgIHZhciBkb3R0ZWRDaXJjbGUgPSBnZXRHbHlwaChmb250LCBET1RURURfQ0lSQ0xFLCBnbHlwaC5mZWF0dXJlcyk7IC8vIElmIHRoZSB0b25lIG1hcmsgaXMgemVybyB3aWR0aCwgaW5zZXJ0IHRoZSBkb3R0ZWQgY2lyY2xlIGJlZm9yZSwgb3RoZXJ3aXNlIGFmdGVyXG5cbiAgICB2YXIgaWR4ID0gZm9udC5nbHlwaEZvckNvZGVQb2ludChjb2RlKS5hZHZhbmNlV2lkdGggPT09IDAgPyBpIDogaSArIDE7XG4gICAgZ2x5cGhzLnNwbGljZShpZHgsIDAsIGRvdHRlZENpcmNsZSk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIGk7XG59XG5cbnZhciBzdGF0ZVRhYmxlID0gW1swLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDAsIDEwLCAxMSwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTddLCBbMCwgMCwgMCwgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDI1LCAyNiwgMCwgMCwgMjcsIDBdLCBbMCwgMCwgMCwgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDM1LCAzNiwgMCwgMCwgMzcsIDBdLCBbMCwgMCwgMCwgMzgsIDUsIDcsIDcsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCAxMywgMCwgMCwgMTYsIDBdLCBbMCwgMzksIDAsIDAsIDAsIDQwLCA0MSwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAzOSwgMCwgMF0sIFswLCAwLCAwLCAwLCA0MywgNDQsIDQ0LCA4LCA5LCAwLCAwLCAwLCAwLCAxMiwgNDMsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDMsIDQ0LCA0NCwgOCwgOSwgMCwgMCwgMCwgMCwgMCwgNDMsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNTAsIDAsIDAsIDUxLCAwLCAxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgNjAsIDYxLCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCA0LCA1LCA3LCA3LCA4LCA5LCAwLCAxMCwgMCwgMCwgMCwgMTMsIDAsIDAsIDE2LCAwXSwgWzAsIDYzLCA2NCwgMCwgMCwgNDAsIDQxLCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDYzLCAwLCAwXSwgWzAsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDAsIDEwLCAxMSwgMTEsIDEyLCAxMywgMCwgMiwgMTYsIDBdLCBbMCwgMCwgMCwgMTgsIDY1LCAyMCwgMjEsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDI1LCAyNiwgMCwgMCwgMjcsIDBdLCBbMCwgMCwgMCwgMCwgNjYsIDY3LCA2NywgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDY4LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDY5LCAwLCA3MCwgNzAsIDAsIDcxLCAwLCA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA3MywgMTksIDc0LCA3NCwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgMjYsIDAsIDAsIDI3LCAwXSwgWzAsIDc1LCAwLCAwLCAwLCA3NiwgNzcsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDc1LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDc5LCA4MCwgODAsIDIyLCAyMywgMCwgMCwgMCwgMCwgMjUsIDc5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDE4LCAxOSwgMjAsIDc0LCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAyNSwgMjYsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDgxLCA4MiwgODMsIDg0LCA4NSwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA4NiwgMCwgMCwgODcsIDAsIDI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDE4LCAxOSwgNzQsIDc0LCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAwLCAyNiwgMCwgMCwgMjcsIDBdLCBbMCwgODksIDkwLCAwLCAwLCA3NiwgNzcsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDg5LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDkxLCA5MiwgOTIsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDAsIDkzLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDk0LCAyOSwgOTUsIDMxLCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAwLCAzNiwgMCwgMCwgMzcsIDBdLCBbMCwgOTYsIDAsIDAsIDAsIDk3LCA5OCwgMCwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgOTYsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMTAwLCAxMDEsIDEwMSwgMzIsIDMzLCAwLCAwLCAwLCAwLCAzNSwgMTAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDEwMCwgMTAxLCAxMDEsIDMyLCAzMywgMCwgMCwgMCwgMCwgMCwgMTAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDEwNywgMCwgMCwgMTA4LCAwLCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMjgsIDI5LCA5NSwgMzEsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDAsIDM2LCAwLCAwLCAzNywgMF0sIFswLCAxMTAsIDExMSwgMCwgMCwgOTcsIDk4LCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAxMTAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMTEyLCAxMTMsIDExMywgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgMTE0LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDUsIDcsIDcsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCAxMywgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMTE1LCAxMTYsIDExNywgMTE4LCA4LCA5LCAwLCAxMCwgMCwgMCwgMTE5LCAxMjAsIDAsIDAsIDE2LCAwXSwgWzAsIDAsIDAsIDAsIDAsIDEyMSwgMTIxLCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDBdLCBbMCwgMzksIDAsIDEyMiwgMCwgMTIzLCAxMjMsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgMzksIDAsIDBdLCBbMCwgMTI0LCA2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0LCAwLCAwXSwgWzAsIDM5LCAwLCAwLCAwLCAxMjEsIDEyNSwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAzOSwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAxMjYsIDEyNiwgOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCA0NiwgNDcsIDQ4LCA0OSwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDksIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAxMjcsIDEyNywgNDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMTI4LCAxMjcsIDEyNywgNDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA1MCwgMCwgMCwgMCwgMCwgMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDEzNSwgNTQsIDU2LCA1NiwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgNjEsIDAsIDAsIDYyLCAwXSwgWzAsIDEzNiwgMCwgMCwgMCwgMTM3LCAxMzgsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCAxMzYsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMTQwLCAxNDEsIDE0MSwgNTcsIDU4LCAwLCAwLCAwLCAwLCA2MCwgMTQwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDE0MCwgMTQxLCAxNDEsIDU3LCA1OCwgMCwgMCwgMCwgMCwgMCwgMTQwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDE0MiwgMTQzLCAxNDQsIDE0NSwgMTQ2LCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAxNDcsIDAsIDAsIDE0OCwgMCwgNTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDUzLCA1NCwgNTYsIDU2LCA1NywgNTgsIDAsIDU5LCAwLCAwLCAwLCA2MSwgMCwgMCwgNjIsIDBdLCBbMCwgMTUwLCAxNTEsIDAsIDAsIDEzNywgMTM4LCAwLCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMTUwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDE1MiwgMTUzLCAxNTMsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDAsIDE1NCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAxNTUsIDExNiwgMTU2LCAxNTcsIDgsIDksIDAsIDEwLCAwLCAwLCAxNTgsIDEyMCwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMTIxLCAxMjEsIDAsIDksIDAsIDEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDc1LCAzLCA0LCA1LCAxNTksIDE2MCwgOCwgMTYxLCAwLCAxNjIsIDAsIDExLCAxMiwgMTYzLCAwLCA3NSwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNDAsIDE2NCwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDE2NSwgNDQsIDQ0LCA4LCA5LCAwLCAwLCAwLCAwLCAwLCAxNjUsIDAsIDAsIDAsIDBdLCBbMCwgMTI0LCA2NCwgMCwgMCwgNDAsIDE2NCwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAxMjQsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNzAsIDcwLCAwLCA3MSwgMCwgNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMTY2LCAwLCAwLCAxNjcsIDAsIDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAxOSwgNzQsIDc0LCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAwLCAyNiwgMCwgMCwgMjcsIDBdLCBbMCwgMCwgMCwgMCwgNzksIDgwLCA4MCwgMjIsIDIzLCAwLCAwLCAwLCAwLCAwLCA3OSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAxNjksIDE3MCwgMTcxLCAxNzIsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDE3MywgMTc0LCAwLCAwLCAyNywgMF0sIFswLCAwLCAwLCAwLCAwLCAxNzUsIDE3NSwgMCwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgMCwgMCwgMF0sIFswLCA3NSwgMCwgMTc2LCAwLCAxNzcsIDE3NywgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDc1LCAwLCAwXSwgWzAsIDE3OCwgOTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3OCwgMCwgMF0sIFswLCA3NSwgMCwgMCwgMCwgMTc1LCAxNzksIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDc1LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDE4MCwgMTgwLCAyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCA4MiwgODMsIDg0LCA4NSwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA4MywgODMsIDg1LCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDE4MSwgMTgxLCA4NSwgMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMTgyLCAxODEsIDE4MSwgODUsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDg2LCAwLCAwLCAwLCAwLCAyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMTg5LCAxNzAsIDE5MCwgMTkxLCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAxOTIsIDE3NCwgMCwgMCwgMjcsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMTc1LCAxNzUsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA3NiwgMTkzLCAwLCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDE5NCwgODAsIDgwLCAyMiwgMjMsIDAsIDAsIDAsIDAsIDAsIDE5NCwgMCwgMCwgMCwgMF0sIFswLCAxNzgsIDkwLCAwLCAwLCA3NiwgMTkzLCAwLCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCAxNzgsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMjksIDk1LCAzMSwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgMzYsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDAsIDEwMCwgMTAxLCAxMDEsIDMyLCAzMywgMCwgMCwgMCwgMCwgMCwgMTAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMTk5LCAyMDAsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDAsIDAsIDIwMSwgMjAxLCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAwLCAwLCAwXSwgWzAsIDk2LCAwLCAyMDIsIDAsIDIwMywgMjAzLCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgOTYsIDAsIDBdLCBbMCwgMjA0LCAxMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwNCwgMCwgMF0sIFswLCA5NiwgMCwgMCwgMCwgMjAxLCAyMDUsIDAsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDk2LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDIwNiwgMjA2LCAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMTA0LCAxMDQsIDEwNiwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyMDcsIDIwNywgMTA2LCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAyMDgsIDIwNywgMjA3LCAxMDYsIDMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDEwNywgMCwgMCwgMCwgMCwgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDIxNSwgMTk2LCAyMTYsIDIxNywgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMjE4LCAyMDAsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDAsIDAsIDIwMSwgMjAxLCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgOTcsIDIxOSwgMCwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAyMjAsIDEwMSwgMTAxLCAzMiwgMzMsIDAsIDAsIDAsIDAsIDAsIDIyMCwgMCwgMCwgMCwgMF0sIFswLCAyMDQsIDExMSwgMCwgMCwgOTcsIDIxOSwgMCwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgMjA0LCAwLCAwXSwgWzAsIDAsIDAsIDIyMSwgMTE2LCAyMjIsIDIyMiwgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDEyMCwgMCwgMCwgMTYsIDBdLCBbMCwgMjIzLCAwLCAwLCAwLCA0MCwgMjI0LCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDIyMywgMCwgMF0sIFswLCAwLCAwLCAwLCAyMjUsIDQ0LCA0NCwgOCwgOSwgMCwgMCwgMCwgMCwgMTE5LCAyMjUsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMTE1LCAxMTYsIDExNywgMjIyLCA4LCA5LCAwLCAxMCwgMCwgMCwgMTE5LCAxMjAsIDAsIDAsIDE2LCAwXSwgWzAsIDAsIDAsIDExNSwgMTE2LCAyMjIsIDIyMiwgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDEyMCwgMCwgMCwgMTYsIDBdLCBbMCwgMjI2LCA2NCwgMCwgMCwgNDAsIDIyNCwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAyMjYsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAzOSwgMCwgMCwgMCwgMTIxLCAxMjEsIDAsIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgMzksIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA4LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDIyNywgMCwgMjI4LCAyMjksIDAsIDksIDAsIDEwLCAwLCAwLCAyMzAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMzksIDAsIDEyMiwgMCwgMTIxLCAxMjEsIDAsIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgMzksIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyMzEsIDIzMSwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMjMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDEzMCwgMTMxLCAxMzIsIDEzMywgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzMsIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyMzMsIDIzMywgMTMzLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDIzNCwgMjMzLCAyMzMsIDEzMywgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNTQsIDU2LCA1NiwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgNjEsIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDI0MCwgMjQxLCAyNDIsIDI0MywgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMjQ0LCAyNDUsIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDI0NiwgMjQ2LCAwLCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMF0sIFswLCAxMzYsIDAsIDI0NywgMCwgMjQ4LCAyNDgsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMTM2LCAwLCAwXSwgWzAsIDI0OSwgMTUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDksIDAsIDBdLCBbMCwgMTM2LCAwLCAwLCAwLCAyNDYsIDI1MCwgMCwgNTgsIDAsIDU5LCAwLCAwLCAwLCAxMzksIDAsIDEzNiwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyNTEsIDI1MSwgNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMTQzLCAxNDQsIDE0NSwgMTQ2LCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ2LCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyNTIsIDI1MiwgMTQ2LCA1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAyNTMsIDI1MiwgMjUyLCAxNDYsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDI1NCwgMjU1LCAyNTYsIDI1NywgMjU4LCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAxNDcsIDAsIDAsIDAsIDAsIDU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAyNjAsIDI0MSwgMjYxLCAyNjIsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDI2MywgMjQ1LCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCAwLCAwLCAyNDYsIDI0NiwgMCwgNTgsIDAsIDU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDEzNywgMjY0LCAwLCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAyNjUsIDE0MSwgMTQxLCA1NywgNTgsIDAsIDAsIDAsIDAsIDAsIDI2NSwgMCwgMCwgMCwgMF0sIFswLCAyNDksIDE1MSwgMCwgMCwgMTM3LCAyNjQsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCAyNDksIDAsIDBdLCBbMCwgMCwgMCwgMjIxLCAxMTYsIDIyMiwgMjIyLCA4LCA5LCAwLCAxMCwgMCwgMCwgMCwgMTIwLCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCAwLCAyMjUsIDQ0LCA0NCwgOCwgOSwgMCwgMCwgMCwgMCwgMTU4LCAyMjUsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMTU1LCAxMTYsIDE1NiwgMjIyLCA4LCA5LCAwLCAxMCwgMCwgMCwgMTU4LCAxMjAsIDAsIDAsIDE2LCAwXSwgWzAsIDAsIDAsIDE1NSwgMTE2LCAyMjIsIDIyMiwgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDEyMCwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgNDMsIDI2NiwgMjY2LCA4LCAxNjEsIDAsIDI0LCAwLCAwLCAxMiwgMjY3LCAwLCAwLCAwLCAwXSwgWzAsIDc1LCAwLCAxNzYsIDQzLCAyNjgsIDI2OCwgMjY5LCAxNjEsIDAsIDI0LCAwLCAwLCAwLCAyNjcsIDAsIDc1LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDI3MCwgMCwgMCwgMjcxLCAwLCAxNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDI3MywgMjc0LCAwLCAwLCA0MCwgNDEsIDAsIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgMjczLCAwLCAwXSwgWzAsIDAsIDAsIDQwLCAwLCAxMjMsIDEyMywgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDEyMSwgMjc1LCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMTY2LCAwLCAwLCAwLCAwLCA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMjc3LCAxNzAsIDI3OCwgMjc4LCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAwLCAxNzQsIDAsIDAsIDI3LCAwXSwgWzAsIDI3OSwgMCwgMCwgMCwgNzYsIDI4MCwgMCwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgMjc5LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDI4MSwgODAsIDgwLCAyMiwgMjMsIDAsIDAsIDAsIDAsIDE3MywgMjgxLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDE2OSwgMTcwLCAxNzEsIDI3OCwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMTczLCAxNzQsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDE2OSwgMTcwLCAyNzgsIDI3OCwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgMTc0LCAwLCAwLCAyNywgMF0sIFswLCAyODIsIDkwLCAwLCAwLCA3NiwgMjgwLCAwLCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCAyODIsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgNzUsIDAsIDAsIDAsIDE3NSwgMTc1LCAwLCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCA3NSwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA4MCwgODAsIDIyLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAyODMsIDAsIDI4NCwgMjg1LCAwLCAyMywgMCwgMjQsIDAsIDAsIDI4NiwgMCwgMCwgMCwgMCwgMF0sIFswLCA3NSwgMCwgMTc2LCAwLCAxNzUsIDE3NSwgMCwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgNzUsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMjg3LCAyODcsIDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDI4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAxODQsIDE4NSwgMTg2LCAxODcsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMTg1LCAxODUsIDE4NywgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyODksIDI4OSwgMTg3LCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAyOTAsIDI4OSwgMjg5LCAxODcsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDI5MSwgMjkyLCAyOTMsIDI5NCwgMjk1LCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMjc3LCAxNzAsIDI3OCwgMjc4LCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAwLCAxNzQsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDAsIDI4MSwgODAsIDgwLCAyMiwgMjMsIDAsIDAsIDAsIDAsIDE5MiwgMjgxLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDE4OSwgMTcwLCAxOTAsIDI3OCwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMTkyLCAxNzQsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDE4OSwgMTcwLCAyNzgsIDI3OCwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgMTc0LCAwLCAwLCAyNywgMF0sIFswLCAwLCAwLCA3NiwgMCwgMTc3LCAxNzcsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDE3NSwgMjk2LCAwLCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDI5NywgMTk2LCAyOTgsIDI5OCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgMjAwLCAwLCAwLCAzNywgMF0sIFswLCAyOTksIDAsIDAsIDAsIDk3LCAzMDAsIDAsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDI5OSwgMCwgMF0sIFswLCAwLCAwLCAwLCAzMDEsIDEwMSwgMTAxLCAzMiwgMzMsIDAsIDAsIDAsIDAsIDE5OSwgMzAxLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDE5NSwgMTk2LCAxOTcsIDI5OCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMTk5LCAyMDAsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDE5NSwgMTk2LCAyOTgsIDI5OCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgMjAwLCAwLCAwLCAzNywgMF0sIFswLCAzMDIsIDExMSwgMCwgMCwgOTcsIDMwMCwgMCwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgMzAyLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDk2LCAwLCAwLCAwLCAyMDEsIDIwMSwgMCwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgOTYsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMTAxLCAxMDEsIDMyLCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAzMDMsIDAsIDMwNCwgMzA1LCAwLCAzMywgMCwgMzQsIDAsIDAsIDMwNiwgMCwgMCwgMCwgMCwgMF0sIFswLCA5NiwgMCwgMjAyLCAwLCAyMDEsIDIwMSwgMCwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgOTYsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMzA3LCAzMDcsIDEwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAzMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMjEwLCAyMTEsIDIxMiwgMjEzLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDIxMSwgMjExLCAyMTMsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMzA5LCAzMDksIDIxMywgMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMzEwLCAzMDksIDMwOSwgMjEzLCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAzMTEsIDMxMiwgMzEzLCAzMTQsIDMxNSwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDI5NywgMTk2LCAyOTgsIDI5OCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgMjAwLCAwLCAwLCAzNywgMF0sIFswLCAwLCAwLCAwLCAzMDEsIDEwMSwgMTAxLCAzMiwgMzMsIDAsIDAsIDAsIDAsIDIxOCwgMzAxLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDIxNSwgMTk2LCAyMTYsIDI5OCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMjE4LCAyMDAsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDIxNSwgMTk2LCAyOTgsIDI5OCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgMjAwLCAwLCAwLCAzNywgMF0sIFswLCAwLCAwLCA5NywgMCwgMjAzLCAyMDMsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDIwMSwgMzE2LCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDExNiwgMjIyLCAyMjIsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCAxMjAsIDAsIDAsIDE2LCAwXSwgWzAsIDAsIDAsIDAsIDIyNSwgNDQsIDQ0LCA4LCA5LCAwLCAwLCAwLCAwLCAwLCAyMjUsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMzE3LCAzMTgsIDMxOSwgMzIwLCA4LCA5LCAwLCAxMCwgMCwgMCwgMzIxLCAzMjIsIDAsIDAsIDE2LCAwXSwgWzAsIDIyMywgMCwgMzIzLCAwLCAxMjMsIDEyMywgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAyMjMsIDAsIDBdLCBbMCwgMjIzLCAwLCAwLCAwLCAxMjEsIDMyNCwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAyMjMsIDAsIDBdLCBbMCwgMCwgMCwgMzI1LCAzMTgsIDMyNiwgMzI3LCA4LCA5LCAwLCAxMCwgMCwgMCwgMzI4LCAzMjIsIDAsIDAsIDE2LCAwXSwgWzAsIDAsIDAsIDY0LCAwLCAxMjEsIDEyMSwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMjMwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDIyNywgMCwgMjI4LCAxMjEsIDAsIDksIDAsIDEwLCAwLCAwLCAyMzAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMjI3LCAwLCAxMjEsIDEyMSwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMzI5LCAzMjksIDEzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMjM2LCAyMzcsIDIzOCwgMjM5LCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMjM3LCAyMzcsIDIzOSwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDMzMSwgMzMxLCAyMzksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMzMyLCAzMzEsIDMzMSwgMjM5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDMzMywgNDAsIDEyMSwgMzM0LCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMzM1LCAyNDEsIDMzNiwgMzM2LCA1NywgNTgsIDAsIDU5LCAwLCAwLCAwLCAyNDUsIDAsIDAsIDYyLCAwXSwgWzAsIDMzNywgMCwgMCwgMCwgMTM3LCAzMzgsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCAzMzcsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMzM5LCAxNDEsIDE0MSwgNTcsIDU4LCAwLCAwLCAwLCAwLCAyNDQsIDMzOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAyNDAsIDI0MSwgMjQyLCAzMzYsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDI0NCwgMjQ1LCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCAyNDAsIDI0MSwgMzM2LCAzMzYsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDAsIDI0NSwgMCwgMCwgNjIsIDBdLCBbMCwgMzQwLCAxNTEsIDAsIDAsIDEzNywgMzM4LCAwLCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMzQwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDEzNiwgMCwgMCwgMCwgMjQ2LCAyNDYsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCAxMzYsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMTQxLCAxNDEsIDU3LCA1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAzNDEsIDAsIDM0MiwgMzQzLCAwLCA1OCwgMCwgNTksIDAsIDAsIDM0NCwgMCwgMCwgMCwgMCwgMF0sIFswLCAxMzYsIDAsIDI0NywgMCwgMjQ2LCAyNDYsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCAxMzYsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMzQ1LCAzNDUsIDE0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAzNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMjU1LCAyNTYsIDI1NywgMjU4LCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyNTYsIDI1NiwgMjU4LCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAzNDcsIDM0NywgMjU4LCA1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAzNDgsIDM0NywgMzQ3LCAyNTgsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDM0OSwgMzUwLCAzNTEsIDM1MiwgMzUzLCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDMzNSwgMjQxLCAzMzYsIDMzNiwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMjQ1LCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCAwLCAzMzksIDE0MSwgMTQxLCA1NywgNTgsIDAsIDAsIDAsIDAsIDI2MywgMzM5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDI2MCwgMjQxLCAyNjEsIDMzNiwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMjYzLCAyNDUsIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDI2MCwgMjQxLCAzMzYsIDMzNiwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMjQ1LCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCAxMzcsIDAsIDI0OCwgMjQ4LCA1NywgNTgsIDAsIDU5LCAwLCAwLCAwLCAxMzksIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMjQ2LCAzNTQsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDEyNiwgMTI2LCA4LCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAzNTUsIDkwLCAwLCAwLCAxMjEsIDEyNSwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAzNTUsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMzU2LCAzNTYsIDI2OSwgMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMzU3LCAzNTgsIDM1OSwgMzYwLCAzNjEsIDE2MSwgMCwgMTYyLCAwLCAwLCAwLCAzNjIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDI3MCwgMCwgMCwgMCwgMCwgMTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAzNjQsIDExNiwgMzY1LCAzNjYsIDgsIDE2MSwgMCwgMTYyLCAwLCAwLCAzNjcsIDEyMCwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMzY4LCAzNjgsIDAsIDE2MSwgMCwgMTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDQwLCAwLCAxMjEsIDEyMSwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMTcwLCAyNzgsIDI3OCwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgMTc0LCAwLCAwLCAyNywgMF0sIFswLCAwLCAwLCAwLCAyODEsIDgwLCA4MCwgMjIsIDIzLCAwLCAwLCAwLCAwLCAwLCAyODEsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMzY5LCAzNzAsIDM3MSwgMzcyLCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAzNzMsIDM3NCwgMCwgMCwgMjcsIDBdLCBbMCwgMjc5LCAwLCAzNzUsIDAsIDE3NywgMTc3LCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgMjc5LCAwLCAwXSwgWzAsIDI3OSwgMCwgMCwgMCwgMTc1LCAzNzYsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDI3OSwgMCwgMF0sIFswLCAwLCAwLCAzNzcsIDM3MCwgMzc4LCAzNzksIDIyLCAyMywgMCwgMjQsIDAsIDAsIDM4MCwgMzc0LCAwLCAwLCAyNywgMF0sIFswLCAwLCAwLCA5MCwgMCwgMTc1LCAxNzUsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMywgMCwgMCwgMCwgMCwgMjg2LCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDI4MywgMCwgMjg0LCAxNzUsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMjg2LCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDI4MywgMCwgMTc1LCAxNzUsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCA4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MiwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAzODEsIDM4MSwgMTg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDM4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAyOTIsIDI5MywgMjk0LCAyOTUsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMjkzLCAyOTMsIDI5NSwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAzODMsIDM4MywgMjk1LCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAzODQsIDM4MywgMzgzLCAyOTUsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDM4NSwgNzYsIDE3NSwgMzg2LCAwLCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDc2LCAwLCAxNzUsIDE3NSwgMCwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAxOTYsIDI5OCwgMjk4LCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAwLCAyMDAsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDAsIDMwMSwgMTAxLCAxMDEsIDMyLCAzMywgMCwgMCwgMCwgMCwgMCwgMzAxLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDM4NywgMzg4LCAzODksIDM5MCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMzkxLCAzOTIsIDAsIDAsIDM3LCAwXSwgWzAsIDI5OSwgMCwgMzkzLCAwLCAyMDMsIDIwMywgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDI5OSwgMCwgMF0sIFswLCAyOTksIDAsIDAsIDAsIDIwMSwgMzk0LCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAyOTksIDAsIDBdLCBbMCwgMCwgMCwgMzk1LCAzODgsIDM5NiwgMzk3LCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAzOTgsIDM5MiwgMCwgMCwgMzcsIDBdLCBbMCwgMCwgMCwgMTExLCAwLCAyMDEsIDIwMSwgMCwgMzMsIDAsIDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzLCAwLCAwLCAwLCAwLCAzMDYsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMzAzLCAwLCAzMDQsIDIwMSwgMCwgMzMsIDAsIDM0LCAwLCAwLCAzMDYsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMzAzLCAwLCAyMDEsIDIwMSwgMCwgMzMsIDAsIDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDMsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMzk5LCAzOTksIDIxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCA0MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMzEyLCAzMTMsIDMxNCwgMzE1LCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDMxMywgMzEzLCAzMTUsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNDAxLCA0MDEsIDMxNSwgMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDAyLCA0MDEsIDQwMSwgMzE1LCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA0MDMsIDk3LCAyMDEsIDQwNCwgMCwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA5NywgMCwgMjAxLCAyMDEsIDAsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNDA1LCAzMTgsIDQwNiwgNDA2LCA4LCA5LCAwLCAxMCwgMCwgMCwgMCwgMzIyLCAwLCAwLCAxNiwgMF0sIFswLCA0MDcsIDAsIDAsIDAsIDQwLCA0MDgsIDAsIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgNDA3LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDQwOSwgNDQsIDQ0LCA4LCA5LCAwLCAwLCAwLCAwLCAzMjEsIDQwOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAzMTcsIDMxOCwgMzE5LCA0MDYsIDgsIDksIDAsIDEwLCAwLCAwLCAzMjEsIDMyMiwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMzE3LCAzMTgsIDQwNiwgNDA2LCA4LCA5LCAwLCAxMCwgMCwgMCwgMCwgMzIyLCAwLCAwLCAxNiwgMF0sIFswLCA0MTAsIDY0LCAwLCAwLCA0MCwgNDA4LCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDQxMCwgMCwgMF0sIFswLCAyMjMsIDAsIDAsIDAsIDEyMSwgMTIxLCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDIyMywgMCwgMF0sIFswLCAyMjMsIDAsIDMyMywgMCwgMTIxLCAxMjEsIDAsIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgMjIzLCAwLCAwXSwgWzAsIDAsIDAsIDQwNSwgMzE4LCA0MDYsIDQwNiwgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDMyMiwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgNDA5LCA0NCwgNDQsIDgsIDksIDAsIDAsIDAsIDAsIDMyOCwgNDA5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDMyNSwgMzE4LCAzMjYsIDQwNiwgOCwgOSwgMCwgMTAsIDAsIDAsIDMyOCwgMzIyLCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCAzMjUsIDMxOCwgNDA2LCA0MDYsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCAzMjIsIDAsIDAsIDE2LCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNDExLCA0MTEsIDIzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCA0MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDAsIDEyMSwgMzM0LCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDEzLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDI0MSwgMzM2LCAzMzYsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDAsIDI0NSwgMCwgMCwgNjIsIDBdLCBbMCwgMCwgMCwgMCwgMzM5LCAxNDEsIDE0MSwgNTcsIDU4LCAwLCAwLCAwLCAwLCAwLCAzMzksIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNDE0LCA0MTUsIDQxNiwgNDE3LCA1NywgNTgsIDAsIDU5LCAwLCAwLCA0MTgsIDQxOSwgMCwgMCwgNjIsIDBdLCBbMCwgMzM3LCAwLCA0MjAsIDAsIDI0OCwgMjQ4LCA1NywgNTgsIDAsIDU5LCAwLCAwLCAwLCAxMzksIDAsIDMzNywgMCwgMF0sIFswLCAzMzcsIDAsIDAsIDAsIDI0NiwgNDIxLCAwLCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMzM3LCAwLCAwXSwgWzAsIDAsIDAsIDQyMiwgNDE1LCA0MjMsIDQyNCwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgNDI1LCA0MTksIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDE1MSwgMCwgMjQ2LCAyNDYsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OCwgMCwgMCwgMCwgMCwgMzQ0LCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDM0MSwgMCwgMzQyLCAyNDYsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMzQ0LCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDM0MSwgMCwgMjQ2LCAyNDYsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQzLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDQyNiwgNDI2LCAyNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgNDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDM1MCwgMzUxLCAzNTIsIDM1MywgNTgsIDAsIDU5LCAwLCAwLCAwLCAxMzksIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMzUxLCAzNTEsIDM1MywgNTgsIDAsIDU5LCAwLCAwLCAwLCAxMzksIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNDI4LCA0MjgsIDM1MywgNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDI5LCA0MjgsIDQyOCwgMzUzLCA1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA0MzAsIDEzNywgMjQ2LCA0MzEsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDEzNywgMCwgMjQ2LCAyNDYsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDQzMiwgMTE2LCA0MzMsIDQzNCwgOCwgMTYxLCAwLCAxNjIsIDAsIDAsIDQzNSwgMTIwLCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCAwLCAwLCAxODAsIDE4MCwgMjY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDM1OCwgMzU5LCAzNjAsIDM2MSwgMTYxLCAwLCAxNjIsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAzNTksIDM1OSwgMzYxLCAxNjEsIDAsIDE2MiwgMCwgMCwgMCwgMzYyLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDQzNiwgNDM2LCAzNjEsIDE2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCA0MzcsIDQzNiwgNDM2LCAzNjEsIDE2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA0MzgsIDQzOSwgNDQwLCA0NDEsIDQ0MiwgMTYxLCAwLCAxNjIsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMCwgMF0sIFswLCA0NDMsIDI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQzLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNDQ0LCAxMTYsIDQ0NSwgNDQ1LCA4LCAxNjEsIDAsIDE2MiwgMCwgMCwgMCwgMTIwLCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCAwLCAyMjUsIDQ0LCA0NCwgOCwgMTYxLCAwLCAwLCAwLCAwLCAzNjcsIDIyNSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAzNjQsIDExNiwgMzY1LCA0NDUsIDgsIDE2MSwgMCwgMTYyLCAwLCAwLCAzNjcsIDEyMCwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMzY0LCAxMTYsIDQ0NSwgNDQ1LCA4LCAxNjEsIDAsIDE2MiwgMCwgMCwgMCwgMTIwLCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNDQ2LCAzNzAsIDQ0NywgNDQ3LCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAwLCAzNzQsIDAsIDAsIDI3LCAwXSwgWzAsIDQ0OCwgMCwgMCwgMCwgNzYsIDQ0OSwgMCwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgNDQ4LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDQ1MCwgODAsIDgwLCAyMiwgMjMsIDAsIDAsIDAsIDAsIDM3MywgNDUwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDM2OSwgMzcwLCAzNzEsIDQ0NywgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMzczLCAzNzQsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDM2OSwgMzcwLCA0NDcsIDQ0NywgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgMzc0LCAwLCAwLCAyNywgMF0sIFswLCA0NTEsIDkwLCAwLCAwLCA3NiwgNDQ5LCAwLCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCA0NTEsIDAsIDBdLCBbMCwgMjc5LCAwLCAwLCAwLCAxNzUsIDE3NSwgMCwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgMjc5LCAwLCAwXSwgWzAsIDI3OSwgMCwgMzc1LCAwLCAxNzUsIDE3NSwgMCwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgMjc5LCAwLCAwXSwgWzAsIDAsIDAsIDQ0NiwgMzcwLCA0NDcsIDQ0NywgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgMzc0LCAwLCAwLCAyNywgMF0sIFswLCAwLCAwLCAwLCA0NTAsIDgwLCA4MCwgMjIsIDIzLCAwLCAwLCAwLCAwLCAzODAsIDQ1MCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAzNzcsIDM3MCwgMzc4LCA0NDcsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDM4MCwgMzc0LCAwLCAwLCAyNywgMF0sIFswLCAwLCAwLCAzNzcsIDM3MCwgNDQ3LCA0NDcsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDAsIDM3NCwgMCwgMCwgMjcsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA0NTIsIDQ1MiwgMjk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDQ1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCA3NiwgMTc1LCAzODYsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDU0LCAwLCAwLCAwLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA0NTUsIDM4OCwgNDU2LCA0NTYsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDAsIDM5MiwgMCwgMCwgMzcsIDBdLCBbMCwgNDU3LCAwLCAwLCAwLCA5NywgNDU4LCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCA0NTcsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDU5LCAxMDEsIDEwMSwgMzIsIDMzLCAwLCAwLCAwLCAwLCAzOTEsIDQ1OSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAzODcsIDM4OCwgMzg5LCA0NTYsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDM5MSwgMzkyLCAwLCAwLCAzNywgMF0sIFswLCAwLCAwLCAzODcsIDM4OCwgNDU2LCA0NTYsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDAsIDM5MiwgMCwgMCwgMzcsIDBdLCBbMCwgNDYwLCAxMTEsIDAsIDAsIDk3LCA0NTgsIDAsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDQ2MCwgMCwgMF0sIFswLCAyOTksIDAsIDAsIDAsIDIwMSwgMjAxLCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAyOTksIDAsIDBdLCBbMCwgMjk5LCAwLCAzOTMsIDAsIDIwMSwgMjAxLCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAyOTksIDAsIDBdLCBbMCwgMCwgMCwgNDU1LCAzODgsIDQ1NiwgNDU2LCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAwLCAzOTIsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDAsIDQ1OSwgMTAxLCAxMDEsIDMyLCAzMywgMCwgMCwgMCwgMCwgMzk4LCA0NTksIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMzk1LCAzODgsIDM5NiwgNDU2LCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAzOTgsIDM5MiwgMCwgMCwgMzcsIDBdLCBbMCwgMCwgMCwgMzk1LCAzODgsIDQ1NiwgNDU2LCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAwLCAzOTIsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNDYxLCA0NjEsIDMxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCA0NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgOTcsIDIwMSwgNDA0LCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDQ2MywgMCwgMCwgMCwgMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMzE4LCA0MDYsIDQwNiwgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDMyMiwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgNDA5LCA0NCwgNDQsIDgsIDksIDAsIDAsIDAsIDAsIDAsIDQwOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA0NjQsIDQ2NSwgNDY2LCA0NjcsIDgsIDksIDAsIDEwLCAwLCAwLCA0NjgsIDQ2OSwgMCwgMCwgMTYsIDBdLCBbMCwgNDA3LCAwLCA0NzAsIDAsIDEyMywgMTIzLCA4LCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDQwNywgMCwgMF0sIFswLCA0MDcsIDAsIDAsIDAsIDEyMSwgNDcxLCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDQwNywgMCwgMF0sIFswLCAwLCAwLCA0NzIsIDQ2NSwgNDczLCA0NzQsIDgsIDksIDAsIDEwLCAwLCAwLCA0NzUsIDQ2OSwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNiwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCA0NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNDc3LCA0MTUsIDQ3OCwgNDc4LCA1NywgNTgsIDAsIDU5LCAwLCAwLCAwLCA0MTksIDAsIDAsIDYyLCAwXSwgWzAsIDQ3OSwgMCwgMCwgMCwgMTM3LCA0ODAsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCA0NzksIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDgxLCAxNDEsIDE0MSwgNTcsIDU4LCAwLCAwLCAwLCAwLCA0MTgsIDQ4MSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA0MTQsIDQxNSwgNDE2LCA0NzgsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDQxOCwgNDE5LCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCA0MTQsIDQxNSwgNDc4LCA0NzgsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDAsIDQxOSwgMCwgMCwgNjIsIDBdLCBbMCwgNDgyLCAxNTEsIDAsIDAsIDEzNywgNDgwLCAwLCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgNDgyLCAwLCAwXSwgWzAsIDMzNywgMCwgMCwgMCwgMjQ2LCAyNDYsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCAzMzcsIDAsIDBdLCBbMCwgMzM3LCAwLCA0MjAsIDAsIDI0NiwgMjQ2LCAwLCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgMzM3LCAwLCAwXSwgWzAsIDAsIDAsIDQ3NywgNDE1LCA0NzgsIDQ3OCwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgNDE5LCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCAwLCA0ODEsIDE0MSwgMTQxLCA1NywgNTgsIDAsIDAsIDAsIDAsIDQyNSwgNDgxLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDQyMiwgNDE1LCA0MjMsIDQ3OCwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgNDI1LCA0MTksIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDQyMiwgNDE1LCA0NzgsIDQ3OCwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgNDE5LCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAyNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU1LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDQ4MywgNDgzLCAzNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgNDg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDEzNywgMjQ2LCA0MzEsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDQ4NSwgMCwgMCwgMCwgNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNDQ0LCAxMTYsIDQ0NSwgNDQ1LCA4LCAxNjEsIDAsIDE2MiwgMCwgMCwgMCwgMTIwLCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCAwLCAyMjUsIDQ0LCA0NCwgOCwgMTYxLCAwLCAwLCAwLCAwLCA0MzUsIDIyNSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA0MzIsIDExNiwgNDMzLCA0NDUsIDgsIDE2MSwgMCwgMTYyLCAwLCAwLCA0MzUsIDEyMCwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgNDMyLCAxMTYsIDQ0NSwgNDQ1LCA4LCAxNjEsIDAsIDE2MiwgMCwgMCwgMCwgMTIwLCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCAwLCAwLCA0ODYsIDQ4NiwgMzYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDQ4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCA0MzksIDQ0MCwgNDQxLCA0NDIsIDE2MSwgMCwgMTYyLCAwLCAwLCAwLCAzNjIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNDQwLCA0NDAsIDQ0MiwgMTYxLCAwLCAxNjIsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA0ODgsIDQ4OCwgNDQyLCAxNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDg5LCA0ODgsIDQ4OCwgNDQyLCAxNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNDkwLCA0OTEsIDQ5MiwgNDkzLCA0OTQsIDE2MSwgMCwgMTYyLCAwLCAwLCAwLCAzNjIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNDk1LCAwLCA0OTYsIDQ5NywgMCwgMTYxLCAwLCAxNjIsIDAsIDAsIDQ5OCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAxMTYsIDQ0NSwgNDQ1LCA4LCAxNjEsIDAsIDE2MiwgMCwgMCwgMCwgMTIwLCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCAwLCAyMjUsIDQ0LCA0NCwgOCwgMTYxLCAwLCAwLCAwLCAwLCAwLCAyMjUsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMzcwLCA0NDcsIDQ0NywgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgMzc0LCAwLCAwLCAyNywgMF0sIFswLCAwLCAwLCAwLCA0NTAsIDgwLCA4MCwgMjIsIDIzLCAwLCAwLCAwLCAwLCAwLCA0NTAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNDk5LCA1MDAsIDUwMSwgNTAyLCAyMiwgMjMsIDAsIDI0LCAwLCAwLCA1MDMsIDUwNCwgMCwgMCwgMjcsIDBdLCBbMCwgNDQ4LCAwLCA1MDUsIDAsIDE3NywgMTc3LCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgNDQ4LCAwLCAwXSwgWzAsIDQ0OCwgMCwgMCwgMCwgMTc1LCA1MDYsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDQ0OCwgMCwgMF0sIFswLCAwLCAwLCA1MDcsIDUwMCwgNTA4LCA1MDksIDIyLCAyMywgMCwgMjQsIDAsIDAsIDUxMCwgNTA0LCAwLCAwLCAyNywgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkyLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDUxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAzODgsIDQ1NiwgNDU2LCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAwLCAzOTIsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDAsIDQ1OSwgMTAxLCAxMDEsIDMyLCAzMywgMCwgMCwgMCwgMCwgMCwgNDU5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDUxMiwgNTEzLCA1MTQsIDUxNSwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgNTE2LCA1MTcsIDAsIDAsIDM3LCAwXSwgWzAsIDQ1NywgMCwgNTE4LCAwLCAyMDMsIDIwMywgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDQ1NywgMCwgMF0sIFswLCA0NTcsIDAsIDAsIDAsIDIwMSwgNTE5LCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCA0NTcsIDAsIDBdLCBbMCwgMCwgMCwgNTIwLCA1MTMsIDUyMSwgNTIyLCAzMiwgMzMsIDAsIDM0LCAwLCAwLCA1MjMsIDUxNywgMCwgMCwgMzcsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMiwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCA1MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNTI1LCA0NjUsIDUyNiwgNTI2LCA4LCA5LCAwLCAxMCwgMCwgMCwgMCwgNDY5LCAwLCAwLCAxNiwgMF0sIFswLCA1MjcsIDAsIDAsIDAsIDQwLCA1MjgsIDAsIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgNTI3LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDUyOSwgNDQsIDQ0LCA4LCA5LCAwLCAwLCAwLCAwLCA0NjgsIDUyOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA0NjQsIDQ2NSwgNDY2LCA1MjYsIDgsIDksIDAsIDEwLCAwLCAwLCA0NjgsIDQ2OSwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgNDY0LCA0NjUsIDUyNiwgNTI2LCA4LCA5LCAwLCAxMCwgMCwgMCwgMCwgNDY5LCAwLCAwLCAxNiwgMF0sIFswLCA1MzAsIDY0LCAwLCAwLCA0MCwgNTI4LCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDUzMCwgMCwgMF0sIFswLCA0MDcsIDAsIDAsIDAsIDEyMSwgMTIxLCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDQwNywgMCwgMF0sIFswLCA0MDcsIDAsIDQ3MCwgMCwgMTIxLCAxMjEsIDAsIDksIDAsIDEwLCAwLCAwLCAwLCA0MiwgMCwgNDA3LCAwLCAwXSwgWzAsIDAsIDAsIDUyNSwgNDY1LCA1MjYsIDUyNiwgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQ2OSwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgNTI5LCA0NCwgNDQsIDgsIDksIDAsIDAsIDAsIDAsIDQ3NSwgNTI5LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDQ3MiwgNDY1LCA0NzMsIDUyNiwgOCwgOSwgMCwgMTAsIDAsIDAsIDQ3NSwgNDY5LCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCA0NzIsIDQ2NSwgNTI2LCA1MjYsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCA0NjksIDAsIDAsIDE2LCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDQxNSwgNDc4LCA0NzgsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDAsIDQxOSwgMCwgMCwgNjIsIDBdLCBbMCwgMCwgMCwgMCwgNDgxLCAxNDEsIDE0MSwgNTcsIDU4LCAwLCAwLCAwLCAwLCAwLCA0ODEsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNTMxLCA1MzIsIDUzMywgNTM0LCA1NywgNTgsIDAsIDU5LCAwLCAwLCA1MzUsIDUzNiwgMCwgMCwgNjIsIDBdLCBbMCwgNDc5LCAwLCA1MzcsIDAsIDI0OCwgMjQ4LCA1NywgNTgsIDAsIDU5LCAwLCAwLCAwLCAxMzksIDAsIDQ3OSwgMCwgMF0sIFswLCA0NzksIDAsIDAsIDAsIDI0NiwgNTM4LCAwLCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgNDc5LCAwLCAwXSwgWzAsIDAsIDAsIDUzOSwgNTMyLCA1NDAsIDU0MSwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgNTQyLCA1MzYsIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgNTQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTgsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNTQ0LCA1NDQsIDQ0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCA1NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDkxLCA0OTIsIDQ5MywgNDk0LCAxNjEsIDAsIDE2MiwgMCwgMCwgMCwgMzYyLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDQ5MiwgNDkyLCA0OTQsIDE2MSwgMCwgMTYyLCAwLCAwLCAwLCAzNjIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNTQ2LCA1NDYsIDQ5NCwgMTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDU0NywgNTQ2LCA1NDYsIDQ5NCwgMTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDU0OCwgNTQ5LCAzNjgsIDU1MCwgMCwgMTYxLCAwLCAxNjIsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAyNzQsIDAsIDM2OCwgMzY4LCAwLCAxNjEsIDAsIDE2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjEsIDAsIDAsIDAsIDAsIDQ5OCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA0OTUsIDAsIDQ5NiwgMzY4LCAwLCAxNjEsIDAsIDE2MiwgMCwgMCwgNDk4LCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDQ5NSwgMCwgMzY4LCAzNjgsIDAsIDE2MSwgMCwgMTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDU1MSwgNTAwLCA1NTIsIDU1MiwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNTA0LCAwLCAwLCAyNywgMF0sIFswLCA1NTMsIDAsIDAsIDAsIDc2LCA1NTQsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDU1MywgMCwgMF0sIFswLCAwLCAwLCAwLCA1NTUsIDgwLCA4MCwgMjIsIDIzLCAwLCAwLCAwLCAwLCA1MDMsIDU1NSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA0OTksIDUwMCwgNTAxLCA1NTIsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDUwMywgNTA0LCAwLCAwLCAyNywgMF0sIFswLCAwLCAwLCA0OTksIDUwMCwgNTUyLCA1NTIsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDAsIDUwNCwgMCwgMCwgMjcsIDBdLCBbMCwgNTU2LCA5MCwgMCwgMCwgNzYsIDU1NCwgMCwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgNTU2LCAwLCAwXSwgWzAsIDQ0OCwgMCwgMCwgMCwgMTc1LCAxNzUsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDQ0OCwgMCwgMF0sIFswLCA0NDgsIDAsIDUwNSwgMCwgMTc1LCAxNzUsIDAsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDQ0OCwgMCwgMF0sIFswLCAwLCAwLCA1NTEsIDUwMCwgNTUyLCA1NTIsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDAsIDUwNCwgMCwgMCwgMjcsIDBdLCBbMCwgMCwgMCwgMCwgNTU1LCA4MCwgODAsIDIyLCAyMywgMCwgMCwgMCwgMCwgNTEwLCA1NTUsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNTA3LCA1MDAsIDUwOCwgNTUyLCAyMiwgMjMsIDAsIDI0LCAwLCAwLCA1MTAsIDUwNCwgMCwgMCwgMjcsIDBdLCBbMCwgMCwgMCwgNTA3LCA1MDAsIDU1MiwgNTUyLCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAwLCA1MDQsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2LCAwLCAwXSwgWzAsIDAsIDAsIDU1NywgNTEzLCA1NTgsIDU1OCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgNTE3LCAwLCAwLCAzNywgMF0sIFswLCA1NTksIDAsIDAsIDAsIDk3LCA1NjAsIDAsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDU1OSwgMCwgMF0sIFswLCAwLCAwLCAwLCA1NjEsIDEwMSwgMTAxLCAzMiwgMzMsIDAsIDAsIDAsIDAsIDUxNiwgNTYxLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDUxMiwgNTEzLCA1MTQsIDU1OCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgNTE2LCA1MTcsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDUxMiwgNTEzLCA1NTgsIDU1OCwgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgNTE3LCAwLCAwLCAzNywgMF0sIFswLCA1NjIsIDExMSwgMCwgMCwgOTcsIDU2MCwgMCwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgNTYyLCAwLCAwXSwgWzAsIDQ1NywgMCwgMCwgMCwgMjAxLCAyMDEsIDAsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDQ1NywgMCwgMF0sIFswLCA0NTcsIDAsIDUxOCwgMCwgMjAxLCAyMDEsIDAsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDQ1NywgMCwgMF0sIFswLCAwLCAwLCA1NTcsIDUxMywgNTU4LCA1NTgsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDAsIDUxNywgMCwgMCwgMzcsIDBdLCBbMCwgMCwgMCwgMCwgNTYxLCAxMDEsIDEwMSwgMzIsIDMzLCAwLCAwLCAwLCAwLCA1MjMsIDU2MSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA1MjAsIDUxMywgNTIxLCA1NTgsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDUyMywgNTE3LCAwLCAwLCAzNywgMF0sIFswLCAwLCAwLCA1MjAsIDUxMywgNTU4LCA1NTgsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDAsIDUxNywgMCwgMCwgMzcsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDY1LCA1MjYsIDUyNiwgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQ2OSwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgNTI5LCA0NCwgNDQsIDgsIDksIDAsIDAsIDAsIDAsIDAsIDUyOSwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA1NjMsIDY2LCA1NjQsIDU2NSwgOCwgOSwgMCwgMTAsIDAsIDAsIDU2NiwgNjgsIDAsIDAsIDE2LCAwXSwgWzAsIDUyNywgMCwgNTY3LCAwLCAxMjMsIDEyMywgOCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCA1MjcsIDAsIDBdLCBbMCwgNTI3LCAwLCAwLCAwLCAxMjEsIDU2OCwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCA1MjcsIDAsIDBdLCBbMCwgMCwgMCwgNTY5LCA2NiwgNTcwLCA1NzEsIDgsIDksIDAsIDEwLCAwLCAwLCA1NzIsIDY4LCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCA1NzMsIDUzMiwgNTc0LCA1NzQsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDAsIDUzNiwgMCwgMCwgNjIsIDBdLCBbMCwgNTc1LCAwLCAwLCAwLCAxMzcsIDU3NiwgMCwgNTgsIDAsIDU5LCAwLCAwLCAwLCAxMzksIDAsIDU3NSwgMCwgMF0sIFswLCAwLCAwLCAwLCA1NzcsIDE0MSwgMTQxLCA1NywgNTgsIDAsIDAsIDAsIDAsIDUzNSwgNTc3LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDUzMSwgNTMyLCA1MzMsIDU3NCwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgNTM1LCA1MzYsIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDUzMSwgNTMyLCA1NzQsIDU3NCwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgNTM2LCAwLCAwLCA2MiwgMF0sIFswLCA1NzgsIDE1MSwgMCwgMCwgMTM3LCA1NzYsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCA1NzgsIDAsIDBdLCBbMCwgNDc5LCAwLCAwLCAwLCAyNDYsIDI0NiwgMCwgNTgsIDAsIDU5LCAwLCAwLCAwLCAxMzksIDAsIDQ3OSwgMCwgMF0sIFswLCA0NzksIDAsIDUzNywgMCwgMjQ2LCAyNDYsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCA0NzksIDAsIDBdLCBbMCwgMCwgMCwgNTczLCA1MzIsIDU3NCwgNTc0LCA1NywgNTgsIDAsIDU5LCAwLCAwLCAwLCA1MzYsIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDAsIDU3NywgMTQxLCAxNDEsIDU3LCA1OCwgMCwgMCwgMCwgMCwgNTQyLCA1NzcsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNTM5LCA1MzIsIDU0MCwgNTc0LCA1NywgNTgsIDAsIDU5LCAwLCAwLCA1NDIsIDUzNiwgMCwgMCwgNjIsIDBdLCBbMCwgMCwgMCwgNTM5LCA1MzIsIDU3NCwgNTc0LCA1NywgNTgsIDAsIDU5LCAwLCAwLCAwLCA1MzYsIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNywgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM5LCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDU3OSwgNTc5LCA0OTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgNTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDU0OSwgMzY4LCA1NTAsIDAsIDE2MSwgMCwgMTYyLCAwLCAwLCAwLCAzNjIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMzY4LCAzNjgsIDAsIDE2MSwgMCwgMTYyLCAwLCAwLCAwLCAzNjIsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNTgxLCAwLCAwLCAwLCAxNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNTAwLCA1NTIsIDU1MiwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNTA0LCAwLCAwLCAyNywgMF0sIFswLCAwLCAwLCAwLCA1NTUsIDgwLCA4MCwgMjIsIDIzLCAwLCAwLCAwLCAwLCAwLCA1NTUsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNTgyLCA5MSwgNTgzLCA1ODQsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDU4NSwgOTMsIDAsIDAsIDI3LCAwXSwgWzAsIDU1MywgMCwgNTg2LCAwLCAxNzcsIDE3NywgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgNzgsIDAsIDU1MywgMCwgMF0sIFswLCA1NTMsIDAsIDAsIDAsIDE3NSwgNTg3LCAwLCAyMywgMCwgMjQsIDAsIDAsIDAsIDc4LCAwLCA1NTMsIDAsIDBdLCBbMCwgMCwgMCwgNTg4LCA5MSwgNTg5LCA1OTAsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDU5MSwgOTMsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDAsIDUxMywgNTU4LCA1NTgsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDAsIDUxNywgMCwgMCwgMzcsIDBdLCBbMCwgMCwgMCwgMCwgNTYxLCAxMDEsIDEwMSwgMzIsIDMzLCAwLCAwLCAwLCAwLCAwLCA1NjEsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNTkyLCAxMTIsIDU5MywgNTk0LCAzMiwgMzMsIDAsIDM0LCAwLCAwLCA1OTUsIDExNCwgMCwgMCwgMzcsIDBdLCBbMCwgNTU5LCAwLCA1OTYsIDAsIDIwMywgMjAzLCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAwLCA5OSwgMCwgNTU5LCAwLCAwXSwgWzAsIDU1OSwgMCwgMCwgMCwgMjAxLCA1OTcsIDAsIDMzLCAwLCAzNCwgMCwgMCwgMCwgOTksIDAsIDU1OSwgMCwgMF0sIFswLCAwLCAwLCA1OTgsIDExMiwgNTk5LCA2MDAsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDYwMSwgMTE0LCAwLCAwLCAzNywgMF0sIFswLCAwLCAwLCA2MDIsIDY2LCA2NywgNjcsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCA2OCwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgMTY1LCA0NCwgNDQsIDgsIDksIDAsIDAsIDAsIDAsIDU2NiwgMTY1LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDU2MywgNjYsIDU2NCwgNjcsIDgsIDksIDAsIDEwLCAwLCAwLCA1NjYsIDY4LCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCA1NjMsIDY2LCA2NywgNjcsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCA2OCwgMCwgMCwgMTYsIDBdLCBbMCwgNTI3LCAwLCAwLCAwLCAxMjEsIDEyMSwgMCwgOSwgMCwgMTAsIDAsIDAsIDAsIDQyLCAwLCA1MjcsIDAsIDBdLCBbMCwgNTI3LCAwLCA1NjcsIDAsIDEyMSwgMTIxLCAwLCA5LCAwLCAxMCwgMCwgMCwgMCwgNDIsIDAsIDUyNywgMCwgMF0sIFswLCAwLCAwLCA2MDIsIDY2LCA2NywgNjcsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCA2OCwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgMTY1LCA0NCwgNDQsIDgsIDksIDAsIDAsIDAsIDAsIDU3MiwgMTY1LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDU2OSwgNjYsIDU3MCwgNjcsIDgsIDksIDAsIDEwLCAwLCAwLCA1NzIsIDY4LCAwLCAwLCAxNiwgMF0sIFswLCAwLCAwLCA1NjksIDY2LCA2NywgNjcsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCA2OCwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgMCwgNTMyLCA1NzQsIDU3NCwgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgNTM2LCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCAwLCA1NzcsIDE0MSwgMTQxLCA1NywgNTgsIDAsIDAsIDAsIDAsIDAsIDU3NywgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCA2MDMsIDE1MiwgNjA0LCA2MDUsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDYwNiwgMTU0LCAwLCAwLCA2MiwgMF0sIFswLCA1NzUsIDAsIDYwNywgMCwgMjQ4LCAyNDgsIDU3LCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgNTc1LCAwLCAwXSwgWzAsIDU3NSwgMCwgMCwgMCwgMjQ2LCA2MDgsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCA1NzUsIDAsIDBdLCBbMCwgMCwgMCwgNjA5LCAxNTIsIDYxMCwgNjExLCA1NywgNTgsIDAsIDU5LCAwLCAwLCA2MTIsIDE1NCwgMCwgMCwgNjIsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5MSwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCA2MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNjE0LCA5MSwgOTIsIDkyLCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAwLCA5MywgMCwgMCwgMjcsIDBdLCBbMCwgMCwgMCwgMCwgMTk0LCA4MCwgODAsIDIyLCAyMywgMCwgMCwgMCwgMCwgNTg1LCAxOTQsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNTgyLCA5MSwgNTgzLCA5MiwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgNTg1LCA5MywgMCwgMCwgMjcsIDBdLCBbMCwgMCwgMCwgNTgyLCA5MSwgOTIsIDkyLCAyMiwgMjMsIDAsIDI0LCAwLCAwLCAwLCA5MywgMCwgMCwgMjcsIDBdLCBbMCwgNTUzLCAwLCAwLCAwLCAxNzUsIDE3NSwgMCwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgNTUzLCAwLCAwXSwgWzAsIDU1MywgMCwgNTg2LCAwLCAxNzUsIDE3NSwgMCwgMjMsIDAsIDI0LCAwLCAwLCAwLCA3OCwgMCwgNTUzLCAwLCAwXSwgWzAsIDAsIDAsIDYxNCwgOTEsIDkyLCA5MiwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgOTMsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDAsIDE5NCwgODAsIDgwLCAyMiwgMjMsIDAsIDAsIDAsIDAsIDU5MSwgMTk0LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDU4OCwgOTEsIDU4OSwgOTIsIDIyLCAyMywgMCwgMjQsIDAsIDAsIDU5MSwgOTMsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDU4OCwgOTEsIDkyLCA5MiwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgOTMsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDYxNSwgMTEyLCAxMTMsIDExMywgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgMTE0LCAwLCAwLCAzNywgMF0sIFswLCAwLCAwLCAwLCAyMjAsIDEwMSwgMTAxLCAzMiwgMzMsIDAsIDAsIDAsIDAsIDU5NSwgMjIwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDU5MiwgMTEyLCA1OTMsIDExMywgMzIsIDMzLCAwLCAzNCwgMCwgMCwgNTk1LCAxMTQsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDU5MiwgMTEyLCAxMTMsIDExMywgMzIsIDMzLCAwLCAzNCwgMCwgMCwgMCwgMTE0LCAwLCAwLCAzNywgMF0sIFswLCA1NTksIDAsIDAsIDAsIDIwMSwgMjAxLCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCA1NTksIDAsIDBdLCBbMCwgNTU5LCAwLCA1OTYsIDAsIDIwMSwgMjAxLCAwLCAzMywgMCwgMzQsIDAsIDAsIDAsIDk5LCAwLCA1NTksIDAsIDBdLCBbMCwgMCwgMCwgNjE1LCAxMTIsIDExMywgMTEzLCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAwLCAxMTQsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDAsIDIyMCwgMTAxLCAxMDEsIDMyLCAzMywgMCwgMCwgMCwgMCwgNjAxLCAyMjAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNTk4LCAxMTIsIDU5OSwgMTEzLCAzMiwgMzMsIDAsIDM0LCAwLCAwLCA2MDEsIDExNCwgMCwgMCwgMzcsIDBdLCBbMCwgMCwgMCwgNTk4LCAxMTIsIDExMywgMTEzLCAzMiwgMzMsIDAsIDM0LCAwLCAwLCAwLCAxMTQsIDAsIDAsIDM3LCAwXSwgWzAsIDAsIDAsIDAsIDY2LCA2NywgNjcsIDgsIDksIDAsIDEwLCAwLCAwLCAwLCA2OCwgMCwgMCwgMTYsIDBdLCBbMCwgMCwgMCwgNjE2LCAxNTIsIDE1MywgMTUzLCA1NywgNTgsIDAsIDU5LCAwLCAwLCAwLCAxNTQsIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDAsIDI2NSwgMTQxLCAxNDEsIDU3LCA1OCwgMCwgMCwgMCwgMCwgNjA2LCAyNjUsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgNjAzLCAxNTIsIDYwNCwgMTUzLCA1NywgNTgsIDAsIDU5LCAwLCAwLCA2MDYsIDE1NCwgMCwgMCwgNjIsIDBdLCBbMCwgMCwgMCwgNjAzLCAxNTIsIDE1MywgMTUzLCA1NywgNTgsIDAsIDU5LCAwLCAwLCAwLCAxNTQsIDAsIDAsIDYyLCAwXSwgWzAsIDU3NSwgMCwgMCwgMCwgMjQ2LCAyNDYsIDAsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTM5LCAwLCA1NzUsIDAsIDBdLCBbMCwgNTc1LCAwLCA2MDcsIDAsIDI0NiwgMjQ2LCAwLCA1OCwgMCwgNTksIDAsIDAsIDAsIDEzOSwgMCwgNTc1LCAwLCAwXSwgWzAsIDAsIDAsIDYxNiwgMTUyLCAxNTMsIDE1MywgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTU0LCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCAwLCAyNjUsIDE0MSwgMTQxLCA1NywgNTgsIDAsIDAsIDAsIDAsIDYxMiwgMjY1LCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDYwOSwgMTUyLCA2MTAsIDE1MywgNTcsIDU4LCAwLCA1OSwgMCwgMCwgNjEyLCAxNTQsIDAsIDAsIDYyLCAwXSwgWzAsIDAsIDAsIDYwOSwgMTUyLCAxNTMsIDE1MywgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTU0LCAwLCAwLCA2MiwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDksIDAsIDBdLCBbMCwgMCwgMCwgMCwgOTEsIDkyLCA5MiwgMjIsIDIzLCAwLCAyNCwgMCwgMCwgMCwgOTMsIDAsIDAsIDI3LCAwXSwgWzAsIDAsIDAsIDAsIDExMiwgMTEzLCAxMTMsIDMyLCAzMywgMCwgMzQsIDAsIDAsIDAsIDExNCwgMCwgMCwgMzcsIDBdLCBbMCwgMCwgMCwgMCwgMTUyLCAxNTMsIDE1MywgNTcsIDU4LCAwLCA1OSwgMCwgMCwgMCwgMTU0LCAwLCAwLCA2MiwgMF1dO1xudmFyIGFjY2VwdGluZyA9IFtmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV07XG52YXIgdGFncyA9IFtbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcInN5bWJvbF9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCIsIFwiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcInN5bWJvbF9jbHVzdGVyXCJdLCBbXSwgW1wic3ltYm9sX2NsdXN0ZXJcIl0sIFtcInN5bWJvbF9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW10sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW10sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW10sIFtdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW10sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXSwgW10sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCIsIFwiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcInN5bWJvbF9jbHVzdGVyXCJdLCBbXCJzeW1ib2xfY2x1c3RlclwiXSwgW1wic3ltYm9sX2NsdXN0ZXJcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW10sIFtdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW10sIFtdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtdLCBbXSwgW10sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW10sIFtdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW10sIFtdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW10sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtdLCBbXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtdLCBbXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCIsIFwiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiLCBcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCIsIFwiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiLCBcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcInN5bWJvbF9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW10sIFtdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXSwgW10sIFtdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXSwgW10sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtdLCBbXSwgW10sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtdLCBbXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiLCBcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiLCBcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiLCBcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW10sIFtdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW10sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW10sIFtdLCBbXSwgW10sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtdLCBbXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtdLCBbXSwgW10sIFtdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiLCBcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCIsIFwiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCIsIFwiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiLCBcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW10sIFtdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW10sIFtdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtdLCBbXSwgW10sIFtdLCBbXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiLCBcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCIsIFwiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCIsIFwiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW10sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW10sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXSwgW10sIFtdLCBbXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiLCBcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIiwgXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW10sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtdLCBbXCJjb25zb25hbnRfc3lsbGFibGVcIl0sIFtcImNvbnNvbmFudF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcInZvd2VsX3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1widm93ZWxfc3lsbGFibGVcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXCJzdGFuZGFsb25lX2NsdXN0ZXJcIl0sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW10sIFtcInN0YW5kYWxvbmVfY2x1c3RlclwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdLCBbXSwgW1wiY29uc29uYW50X3N5bGxhYmxlXCJdLCBbXCJ2b3dlbF9zeWxsYWJsZVwiXSwgW1wic3RhbmRhbG9uZV9jbHVzdGVyXCJdXTtcbnZhciBpbmRpY01hY2hpbmUgPSB7XG4gIHN0YXRlVGFibGU6IHN0YXRlVGFibGUsXG4gIGFjY2VwdGluZzogYWNjZXB0aW5nLFxuICB0YWdzOiB0YWdzXG59O1xudmFyIGNhdGVnb3JpZXMgPSBbXCJPXCIsIFwiSU5EXCIsIFwiU1wiLCBcIkdCXCIsIFwiQlwiLCBcIkZNXCIsIFwiQ0dKXCIsIFwiVk1BYnZcIiwgXCJWTVBzdFwiLCBcIlZBYnZcIiwgXCJWUHN0XCIsIFwiQ01CbHdcIiwgXCJWUHJlXCIsIFwiVkJsd1wiLCBcIkhcIiwgXCJWTUJsd1wiLCBcIkNNQWJ2XCIsIFwiTUJsd1wiLCBcIkNTXCIsIFwiUlwiLCBcIlNVQlwiLCBcIk1Qc3RcIiwgXCJNUHJlXCIsIFwiRkFidlwiLCBcIkZQc3RcIiwgXCJGQmx3XCIsIFwibnVsbFwiLCBcIlNNQWJ2XCIsIFwiU01CbHdcIiwgXCJWTVByZVwiLCBcIlpXTkpcIiwgXCJaV0pcIiwgXCJXSlwiLCBcIk1cIiwgXCJWU1wiLCBcIk5cIiwgXCJITlwiLCBcIk1BYnZcIl07XG52YXIgZGVjb21wb3NpdGlvbnMgPSB7XG4gIFwiMjUwN1wiOiBbMjUwMywgMjQ5NF0sXG4gIFwiMjUwOFwiOiBbMjUwMywgMjUxOV0sXG4gIFwiMjg4OFwiOiBbMjg4NywgMjkwMl0sXG4gIFwiMjg5MVwiOiBbMjg4NywgMjg3OF0sXG4gIFwiMjg5MlwiOiBbMjg4NywgMjkwM10sXG4gIFwiMzAxOFwiOiBbMzAxNCwgMzAwNl0sXG4gIFwiMzAxOVwiOiBbMzAxNSwgMzAwNl0sXG4gIFwiMzAyMFwiOiBbMzAxNCwgMzAzMV0sXG4gIFwiMzE0NFwiOiBbMzE0MiwgMzE1OF0sXG4gIFwiMzI2NFwiOiBbMzI2MywgMzI4NV0sXG4gIFwiMzI3MVwiOiBbMzI3MCwgMzI4NV0sXG4gIFwiMzI3MlwiOiBbMzI3MCwgMzI4Nl0sXG4gIFwiMzI3NFwiOiBbMzI3MCwgMzI2Nl0sXG4gIFwiMzI3NVwiOiBbMzI3MCwgMzI2NiwgMzI4NV0sXG4gIFwiMzQwMlwiOiBbMzM5OCwgMzM5MF0sXG4gIFwiMzQwM1wiOiBbMzM5OSwgMzM5MF0sXG4gIFwiMzQwNFwiOiBbMzM5OCwgMzQxNV0sXG4gIFwiMzU0NlwiOiBbMzU0NSwgMzUzMF0sXG4gIFwiMzU0OFwiOiBbMzU0NSwgMzUzNV0sXG4gIFwiMzU0OVwiOiBbMzU0NSwgMzUzNSwgMzUzMF0sXG4gIFwiMzU1MFwiOiBbMzU0NSwgMzU1MV0sXG4gIFwiMzYzNVwiOiBbMzY2MSwgMzYzNF0sXG4gIFwiMzc2M1wiOiBbMzc4OSwgMzc2Ml0sXG4gIFwiMzk1NVwiOiBbMzk1MywgMzk1NF0sXG4gIFwiMzk1N1wiOiBbMzk1MywgMzk1Nl0sXG4gIFwiMzk1OFwiOiBbNDAxOCwgMzk2OF0sXG4gIFwiMzk1OVwiOiBbNDAxOCwgMzk1MywgMzk2OF0sXG4gIFwiMzk2MFwiOiBbNDAxOSwgMzk2OF0sXG4gIFwiMzk2MVwiOiBbNDAxOSwgMzk1MywgMzk2OF0sXG4gIFwiMzk2OVwiOiBbMzk1MywgMzk2OF0sXG4gIFwiNjk3MVwiOiBbNjk3MCwgNjk2NV0sXG4gIFwiNjk3M1wiOiBbNjk3MiwgNjk2NV0sXG4gIFwiNjk3NlwiOiBbNjk3NCwgNjk2NV0sXG4gIFwiNjk3N1wiOiBbNjk3NSwgNjk2NV0sXG4gIFwiNjk3OVwiOiBbNjk3OCwgNjk2NV0sXG4gIFwiNjk5MzRcIjogWzY5OTM3LCA2OTkyN10sXG4gIFwiNjk5MzVcIjogWzY5OTM4LCA2OTkyN10sXG4gIFwiNzA0NzVcIjogWzcwNDcxLCA3MDQ2Ml0sXG4gIFwiNzA0NzZcIjogWzcwNDcxLCA3MDQ4N10sXG4gIFwiNzA4NDNcIjogWzcwODQxLCA3MDg0Ml0sXG4gIFwiNzA4NDRcIjogWzcwODQxLCA3MDgzMl0sXG4gIFwiNzA4NDZcIjogWzcwODQxLCA3MDg0NV0sXG4gIFwiNzEwOThcIjogWzcxMDk2LCA3MTA4N10sXG4gIFwiNzEwOTlcIjogWzcxMDk3LCA3MTA4N11cbn07XG52YXIgc3RhdGVUYWJsZSQxID0gW1swLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzIsIDIsIDMsIDQsIDQsIDUsIDAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAxNywgMTgsIDExLCAxOSwgMjAsIDIxLCAyMiwgMCwgMCwgMCwgMjMsIDAsIDAsIDIsIDAsIDAsIDI0LCAwLCAyNV0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjgsIDAsIDAsIDAsIDAsIDAsIDI3LCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDI5LCAwLCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDAsIDAsIDQxLCAzNSwgNDIsIDQzLCA0NCwgNDUsIDAsIDAsIDAsIDQ2LCAwLCAwLCAwLCAwLCAzOSwgMCwgMCwgNDddLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA1LCAwLCA2LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjAsIDIxLCAyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA1LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMCwgMjEsIDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDUsIDAsIDYsIDcsIDgsIDksIDAsIDAsIDEyLCAwLCAxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjAsIDIxLCAyMiwgMCwgMCwgMCwgMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNSwgMCwgNiwgNywgMCwgOSwgMCwgMCwgMCwgMCwgMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwLCAyMSwgMjIsIDAsIDAsIDAsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDUsIDAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMCwgMTYsIDAsIDAsIDE4LCAxMSwgMTksIDIwLCAyMSwgMjIsIDAsIDAsIDAsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNV0sIFswLCAwLCAwLCAwLCAwLCA1LCAwLCA2LCA3LCA4LCA5LCAwLCAxMSwgMTIsIDAsIDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMCwgMjEsIDIyLCAwLCAwLCAwLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA1LCAwLCA2LCA3LCAwLCA5LCAwLCAwLCAxMiwgMCwgMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwLCAyMSwgMjIsIDAsIDAsIDAsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDUsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMCwgMjEsIDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDUsIDAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAxOCwgMTEsIDE5LCAyMCwgMjEsIDIyLCAwLCAwLCAwLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjVdLCBbMCwgMCwgMCwgMCwgMCwgNSwgMCwgNiwgNywgOCwgOSwgMCwgMTEsIDEyLCAwLCAxNCwgMCwgMCwgMCwgMCwgMCwgMTEsIDAsIDIwLCAyMSwgMjIsIDAsIDAsIDAsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDQsIDQsIDUsIDAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAxOCwgMTEsIDE5LCAyMCwgMjEsIDIyLCAwLCAwLCAwLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjVdLCBbMCwgMCwgMCwgMCwgMCwgNSwgMCwgNiwgNywgOCwgOSwgNDgsIDExLCAxMiwgMTMsIDE0LCA0OCwgMTYsIDAsIDAsIDE4LCAxMSwgMTksIDIwLCAyMSwgMjIsIDAsIDAsIDAsIDIzLCAwLCAwLCAwLCAwLCA0OSwgMCwgMCwgMjVdLCBbMCwgMCwgMCwgMCwgMCwgNSwgMCwgNiwgNywgOCwgOSwgMCwgMTEsIDEyLCAwLCAxNCwgMCwgMTYsIDAsIDAsIDAsIDExLCAwLCAyMCwgMjEsIDIyLCAwLCAwLCAwLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjVdLCBbMCwgMCwgMCwgMCwgMCwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjAsIDIxLCAyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNSwgMCwgNiwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwLCAyMSwgMjIsIDAsIDAsIDAsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCAwLCA1MSwgMF0sIFswLCAwLCAwLCAwLCAwLCA1LCAwLCA2LCA3LCA4LCA5LCAwLCAxMSwgMTIsIDAsIDE0LCAwLCAxNiwgMCwgMCwgMCwgMTEsIDAsIDIwLCAyMSwgMjIsIDAsIDAsIDAsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMjksIDAsIDMwLCAzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzLCA0NCwgNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMjksIDAsIDAsIDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MywgNDQsIDQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDI5LCAwLCAzMCwgMzEsIDMyLCAzMywgMCwgMCwgMzYsIDAsIDM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MywgNDQsIDQ1LCAwLCAwLCAwLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyOSwgMCwgMzAsIDMxLCAwLCAzMywgMCwgMCwgMCwgMCwgMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzLCA0NCwgNDUsIDAsIDAsIDAsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDI5LCAwLCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAwLCA0MCwgMCwgMCwgNDEsIDM1LCA0MiwgNDMsIDQ0LCA0NSwgMCwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3XSwgWzAsIDAsIDAsIDAsIDAsIDI5LCAwLCAzMCwgMzEsIDMyLCAzMywgMCwgMzUsIDM2LCAwLCAzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDQ0LCA0NSwgMCwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMjksIDAsIDMwLCAzMSwgMCwgMzMsIDAsIDAsIDM2LCAwLCAzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDQ0LCA0NSwgMCwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMjksIDAsIDAsIDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDQ0LCA0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyOSwgMCwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCAwLCAwLCA0MSwgMzUsIDQyLCA0MywgNDQsIDQ1LCAwLCAwLCAwLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDddLCBbMCwgMCwgMCwgMCwgMCwgMjksIDAsIDMwLCAzMSwgMzIsIDMzLCAwLCAzNSwgMzYsIDAsIDM4LCAwLCAwLCAwLCAwLCAwLCAzNSwgMCwgNDMsIDQ0LCA0NSwgMCwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMjksIDAsIDMwLCAzMSwgMzIsIDMzLCA1MiwgMzUsIDM2LCAzNywgMzgsIDUyLCA0MCwgMCwgMCwgNDEsIDM1LCA0MiwgNDMsIDQ0LCA0NSwgMCwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDUzLCAwLCAwLCA0N10sIFswLCAwLCAwLCAwLCAwLCAyOSwgMCwgMzAsIDMxLCAzMiwgMzMsIDAsIDM1LCAzNiwgMCwgMzgsIDAsIDQwLCAwLCAwLCAwLCAzNSwgMCwgNDMsIDQ0LCA0NSwgMCwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3XSwgWzAsIDAsIDAsIDAsIDAsIDI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MywgNDQsIDQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwgWzAsIDAsIDAsIDAsIDAsIDI5LCAwLCAzMCwgMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MywgNDQsIDQ1LCAwLCAwLCAwLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwLCAwLCAyOSwgMCwgMzAsIDMxLCAzMiwgMzMsIDAsIDM1LCAzNiwgMCwgMzgsIDAsIDQwLCAwLCAwLCAwLCAzNSwgMCwgNDMsIDQ0LCA0NSwgMCwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgNSwgMCwgNiwgNywgOCwgOSwgNDgsIDExLCAxMiwgMTMsIDE0LCAwLCAxNiwgMCwgMCwgMTgsIDExLCAxOSwgMjAsIDIxLCAyMiwgMCwgMCwgMCwgMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1XSwgWzAsIDAsIDAsIDAsIDAsIDUsIDAsIDYsIDcsIDgsIDksIDQ4LCAxMSwgMTIsIDEzLCAxNCwgNDgsIDE2LCAwLCAwLCAxOCwgMTEsIDE5LCAyMCwgMjEsIDIyLCAwLCAwLCAwLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjVdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDBdLCBbMCwgMCwgMCwgMCwgMCwgMjksIDAsIDMwLCAzMSwgMzIsIDMzLCA1MiwgMzUsIDM2LCAzNywgMzgsIDAsIDQwLCAwLCAwLCA0MSwgMzUsIDQyLCA0MywgNDQsIDQ1LCAwLCAwLCAwLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDddLCBbMCwgMCwgMCwgMCwgMCwgMjksIDAsIDMwLCAzMSwgMzIsIDMzLCA1MiwgMzUsIDM2LCAzNywgMzgsIDUyLCA0MCwgMCwgMCwgNDEsIDM1LCA0MiwgNDMsIDQ0LCA0NSwgMCwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3XSwgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCAwLCA1MSwgMF1dO1xudmFyIGFjY2VwdGluZyQxID0gW2ZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV07XG52YXIgdGFncyQxID0gW1tdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiaW5kZXBlbmRlbnRfY2x1c3RlclwiXSwgW1wic3ltYm9sX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW10sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wiYnJva2VuX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJudW1lcmFsX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJpbmRlcGVuZGVudF9jbHVzdGVyXCJdLCBbXCJzeW1ib2xfY2x1c3RlclwiXSwgW1wic3ltYm9sX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInZpcmFtYV90ZXJtaW5hdGVkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcInN0YW5kYXJkX2NsdXN0ZXJcIl0sIFtcImJyb2tlbl9jbHVzdGVyXCJdLCBbXCJicm9rZW5fY2x1c3RlclwiXSwgW1wibnVtZXJhbF9jbHVzdGVyXCJdLCBbXCJudW1iZXJfam9pbmVyX3Rlcm1pbmF0ZWRfY2x1c3RlclwiXSwgW1wic3RhbmRhcmRfY2x1c3RlclwiXSwgW1wic3RhbmRhcmRfY2x1c3RlclwiXSwgW1wibnVtZXJhbF9jbHVzdGVyXCJdXTtcbnZhciB1c2VEYXRhID0ge1xuICBjYXRlZ29yaWVzOiBjYXRlZ29yaWVzLFxuICBkZWNvbXBvc2l0aW9uczogZGVjb21wb3NpdGlvbnMsXG4gIHN0YXRlVGFibGU6IHN0YXRlVGFibGUkMSxcbiAgYWNjZXB0aW5nOiBhY2NlcHRpbmckMSxcbiAgdGFnczogdGFncyQxXG59OyAvLyBDYXRlb3JpZXMgdXNlZCBpbiB0aGUgT3BlblR5cGUgc3BlYzpcbi8vIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdGZudGRldi9kZXZhbm90L3NoYXBpbmcuYXNweFxuXG52YXIgQ0FURUdPUklFUyA9IHtcbiAgWDogMSA8PCAwLFxuICBDOiAxIDw8IDEsXG4gIFY6IDEgPDwgMixcbiAgTjogMSA8PCAzLFxuICBIOiAxIDw8IDQsXG4gIFpXTko6IDEgPDwgNSxcbiAgWldKOiAxIDw8IDYsXG4gIE06IDEgPDwgNyxcbiAgU006IDEgPDwgOCxcbiAgVkQ6IDEgPDwgOSxcbiAgQTogMSA8PCAxMCxcbiAgUGxhY2Vob2xkZXI6IDEgPDwgMTEsXG4gIERvdHRlZF9DaXJjbGU6IDEgPDwgMTIsXG4gIFJTOiAxIDw8IDEzLFxuICAvLyBSZWdpc3RlciBTaGlmdGVyLCB1c2VkIGluIEtobWVyIE9UIHNwZWMuXG4gIENvZW5nOiAxIDw8IDE0LFxuICAvLyBLaG1lci1zdHlsZSBWaXJhbWEuXG4gIFJlcGhhOiAxIDw8IDE1LFxuICAvLyBBdG9taWNhbGx5LWVuY29kZWQgbG9naWNhbCBvciB2aXN1YWwgcmVwaGEuXG4gIFJhOiAxIDw8IDE2LFxuICBDTTogMSA8PCAxNyxcbiAgLy8gQ29uc29uYW50LU1lZGlhbC5cbiAgU3ltYm9sOiAxIDw8IDE4IC8vIEF2YWdyYWhhLCBldGMgdGhhdCB0YWtlIG1hcmtzIChTTSxBLFZEKS5cblxufTsgLy8gVmlzdWFsIHBvc2l0aW9ucyBpbiBhIHN5bGxhYmxlIGZyb20gbGVmdCB0byByaWdodC5cblxudmFyIFBPU0lUSU9OUyA9IHtcbiAgU3RhcnQ6IDEgPDwgMCxcbiAgUmFfVG9fQmVjb21lX1JlcGg6IDEgPDwgMSxcbiAgUHJlX006IDEgPDwgMixcbiAgUHJlX0M6IDEgPDwgMyxcbiAgQmFzZV9DOiAxIDw8IDQsXG4gIEFmdGVyX01haW46IDEgPDwgNSxcbiAgQWJvdmVfQzogMSA8PCA2LFxuICBCZWZvcmVfU3ViOiAxIDw8IDcsXG4gIEJlbG93X0M6IDEgPDwgOCxcbiAgQWZ0ZXJfU3ViOiAxIDw8IDksXG4gIEJlZm9yZV9Qb3N0OiAxIDw8IDEwLFxuICBQb3N0X0M6IDEgPDwgMTEsXG4gIEFmdGVyX1Bvc3Q6IDEgPDwgMTIsXG4gIEZpbmFsX0M6IDEgPDwgMTMsXG4gIFNNVkQ6IDEgPDwgMTQsXG4gIEVuZDogMSA8PCAxNVxufTtcbnZhciBDT05TT05BTlRfRkxBR1MgPSBDQVRFR09SSUVTLkMgfCBDQVRFR09SSUVTLlJhIHwgQ0FURUdPUklFUy5DTSB8IENBVEVHT1JJRVMuViB8IENBVEVHT1JJRVMuUGxhY2Vob2xkZXIgfCBDQVRFR09SSUVTLkRvdHRlZF9DaXJjbGU7XG52YXIgSk9JTkVSX0ZMQUdTID0gQ0FURUdPUklFUy5aV0ogfCBDQVRFR09SSUVTLlpXTko7XG52YXIgSEFMQU5UX09SX0NPRU5HX0ZMQUdTID0gQ0FURUdPUklFUy5IIHwgQ0FURUdPUklFUy5Db2VuZztcbnZhciBJTkRJQ19DT05GSUdTID0ge1xuICBEZWZhdWx0OiB7XG4gICAgaGFzT2xkU3BlYzogZmFsc2UsXG4gICAgdmlyYW1hOiAwLFxuICAgIGJhc2VQb3M6ICdMYXN0JyxcbiAgICByZXBoUG9zOiBQT1NJVElPTlMuQmVmb3JlX1Bvc3QsXG4gICAgcmVwaE1vZGU6ICdJbXBsaWNpdCcsXG4gICAgYmx3Zk1vZGU6ICdQcmVfQW5kX1Bvc3QnXG4gIH0sXG4gIERldmFuYWdhcmk6IHtcbiAgICBoYXNPbGRTcGVjOiB0cnVlLFxuICAgIHZpcmFtYTogMHgwOTRELFxuICAgIGJhc2VQb3M6ICdMYXN0JyxcbiAgICByZXBoUG9zOiBQT1NJVElPTlMuQmVmb3JlX1Bvc3QsXG4gICAgcmVwaE1vZGU6ICdJbXBsaWNpdCcsXG4gICAgYmx3Zk1vZGU6ICdQcmVfQW5kX1Bvc3QnXG4gIH0sXG4gIEJlbmdhbGk6IHtcbiAgICBoYXNPbGRTcGVjOiB0cnVlLFxuICAgIHZpcmFtYTogMHgwOUNELFxuICAgIGJhc2VQb3M6ICdMYXN0JyxcbiAgICByZXBoUG9zOiBQT1NJVElPTlMuQWZ0ZXJfU3ViLFxuICAgIHJlcGhNb2RlOiAnSW1wbGljaXQnLFxuICAgIGJsd2ZNb2RlOiAnUHJlX0FuZF9Qb3N0J1xuICB9LFxuICBHdXJtdWtoaToge1xuICAgIGhhc09sZFNwZWM6IHRydWUsXG4gICAgdmlyYW1hOiAweDBBNEQsXG4gICAgYmFzZVBvczogJ0xhc3QnLFxuICAgIHJlcGhQb3M6IFBPU0lUSU9OUy5CZWZvcmVfU3ViLFxuICAgIHJlcGhNb2RlOiAnSW1wbGljaXQnLFxuICAgIGJsd2ZNb2RlOiAnUHJlX0FuZF9Qb3N0J1xuICB9LFxuICBHdWphcmF0aToge1xuICAgIGhhc09sZFNwZWM6IHRydWUsXG4gICAgdmlyYW1hOiAweDBBQ0QsXG4gICAgYmFzZVBvczogJ0xhc3QnLFxuICAgIHJlcGhQb3M6IFBPU0lUSU9OUy5CZWZvcmVfUG9zdCxcbiAgICByZXBoTW9kZTogJ0ltcGxpY2l0JyxcbiAgICBibHdmTW9kZTogJ1ByZV9BbmRfUG9zdCdcbiAgfSxcbiAgT3JpeWE6IHtcbiAgICBoYXNPbGRTcGVjOiB0cnVlLFxuICAgIHZpcmFtYTogMHgwQjRELFxuICAgIGJhc2VQb3M6ICdMYXN0JyxcbiAgICByZXBoUG9zOiBQT1NJVElPTlMuQWZ0ZXJfTWFpbixcbiAgICByZXBoTW9kZTogJ0ltcGxpY2l0JyxcbiAgICBibHdmTW9kZTogJ1ByZV9BbmRfUG9zdCdcbiAgfSxcbiAgVGFtaWw6IHtcbiAgICBoYXNPbGRTcGVjOiB0cnVlLFxuICAgIHZpcmFtYTogMHgwQkNELFxuICAgIGJhc2VQb3M6ICdMYXN0JyxcbiAgICByZXBoUG9zOiBQT1NJVElPTlMuQWZ0ZXJfUG9zdCxcbiAgICByZXBoTW9kZTogJ0ltcGxpY2l0JyxcbiAgICBibHdmTW9kZTogJ1ByZV9BbmRfUG9zdCdcbiAgfSxcbiAgVGVsdWd1OiB7XG4gICAgaGFzT2xkU3BlYzogdHJ1ZSxcbiAgICB2aXJhbWE6IDB4MEM0RCxcbiAgICBiYXNlUG9zOiAnTGFzdCcsXG4gICAgcmVwaFBvczogUE9TSVRJT05TLkFmdGVyX1Bvc3QsXG4gICAgcmVwaE1vZGU6ICdFeHBsaWNpdCcsXG4gICAgYmx3Zk1vZGU6ICdQb3N0X09ubHknXG4gIH0sXG4gIEthbm5hZGE6IHtcbiAgICBoYXNPbGRTcGVjOiB0cnVlLFxuICAgIHZpcmFtYTogMHgwQ0NELFxuICAgIGJhc2VQb3M6ICdMYXN0JyxcbiAgICByZXBoUG9zOiBQT1NJVElPTlMuQWZ0ZXJfUG9zdCxcbiAgICByZXBoTW9kZTogJ0ltcGxpY2l0JyxcbiAgICBibHdmTW9kZTogJ1Bvc3RfT25seSdcbiAgfSxcbiAgTWFsYXlhbGFtOiB7XG4gICAgaGFzT2xkU3BlYzogdHJ1ZSxcbiAgICB2aXJhbWE6IDB4MEQ0RCxcbiAgICBiYXNlUG9zOiAnTGFzdCcsXG4gICAgcmVwaFBvczogUE9TSVRJT05TLkFmdGVyX01haW4sXG4gICAgcmVwaE1vZGU6ICdMb2dfUmVwaGEnLFxuICAgIGJsd2ZNb2RlOiAnUHJlX0FuZF9Qb3N0J1xuICB9LFxuICAvLyBIYW5kbGVkIGJ5IFVuaXZlcnNhbFNoYXBlclxuICAvLyBTaW5oYWxhOiB7XG4gIC8vICAgaGFzT2xkU3BlYzogZmFsc2UsXG4gIC8vICAgdmlyYW1hOiAweDBEQ0EsXG4gIC8vICAgYmFzZVBvczogJ0xhc3RfU2luaGFsYScsXG4gIC8vICAgcmVwaFBvczogUE9TSVRJT05TLkFmdGVyX01haW4sXG4gIC8vICAgcmVwaE1vZGU6ICdFeHBsaWNpdCcsXG4gIC8vICAgYmx3Zk1vZGU6ICdQcmVfQW5kX1Bvc3QnXG4gIC8vIH0sXG4gIEtobWVyOiB7XG4gICAgaGFzT2xkU3BlYzogZmFsc2UsXG4gICAgdmlyYW1hOiAweDE3RDIsXG4gICAgYmFzZVBvczogJ0ZpcnN0JyxcbiAgICByZXBoUG9zOiBQT1NJVElPTlMuUmFfVG9fQmVjb21lX1JlcGgsXG4gICAgcmVwaE1vZGU6ICdWaXNfUmVwaGEnLFxuICAgIGJsd2ZNb2RlOiAnUHJlX0FuZF9Qb3N0J1xuICB9XG59OyAvLyBBZGRpdGlvbmFsIGRlY29tcG9zaXRpb25zIHRoYXQgYXJlbid0IGluIFVuaWNvZGVcblxudmFyIElORElDX0RFQ09NUE9TSVRJT05TID0ge1xuICAvLyBLaG1lclxuICAweDE3QkU6IFsweDE3QzEsIDB4MTdCRV0sXG4gIDB4MTdCRjogWzB4MTdDMSwgMHgxN0JGXSxcbiAgMHgxN0MwOiBbMHgxN0MxLCAweDE3QzBdLFxuICAweDE3QzQ6IFsweDE3QzEsIDB4MTdDNF0sXG4gIDB4MTdDNTogWzB4MTdDMSwgMHgxN0M1XVxufTtcbnZhciBkZWNvbXBvc2l0aW9ucyQxID0gdXNlRGF0YS5kZWNvbXBvc2l0aW9ucztcbnZhciB0cmllJDEgPSBuZXcgVW5pY29kZVRyaWUoQnVmZmVyKFwiQUFBUkFBQUFBQUJnMkFBQUFXWVBtZkR0blh1TVhGVWR4Ky91enM3TTdzenVkQXRFQ0dKUklNUlFiVUFpdGhRV2tHQUtpVmhOcEZWUlJBbUlRVkNEa0RZSUNHb3RJQTlCVEN6OEllVXZpdjdCUTJQQnRCSVJMQkJRSVdBVXNLZzFCS3hSQXFJZ2ZzL2NjK2FlT1hQZWozdG5aWDdKSi9keHpqM25kMzYvODc1M1o1ZlVzdXhnc0F3Y0FVNEdwNEJQZ00rQ2Q0UDNSamllRHM0R1h3THJISjViRHk0REc4QTE0THZnWnJBWmJBRjNnbnMwejE4QUxnWS9CNzhDOTROSHdCUGdhYkFFL0FYOERid001c0YvUVgweUQ1dkZjVS93Vm5BZ1dBb09BeXZBY2VCRThDR3dCcHdHemdKZkFGOEJYd1hmQUZlQzY4RW1zQmxzQVhlQ3JlQSs4Q0I0RER3Ri9naDJnZDNnRmZBR21LeG4yUXpZQyt3SERnUkx3ZUZnSlRnV3JLcm51cS9HY1EwNGpWNmZoZU41NEVKd0ViZ2NYQUcrUThPL2orTXQ0RFp3QjloYXo4dDlIejNhOGlDTi94aU92d1JQMGV2SDZmRTY4QXpPSCtLZTJlV1lodzNQY0dudXh2a3I0QTNRYUdSWkI3d0ZMQUVIZzJYZ2lFWi9mSEtjcC9jZUJoL0ErY25nRlBDcFJtNnZNM0U4bDhhNWdONjdHTWR2Z3FzYmVYMmFwOXlJNjAxZ003Z04zQUcyMG1mdW84Y2RPUDZHcHZkVWc5b0t4ejgzOUdWOTBSRE8yL2dseE4xQjc5ME5Yc04xclpsbDdXWVJkdytjNzB1dlR3SUhOQWZUTzBSeUw1VERtbm5iYzNsbVJRSTlVbk0wZEQ1ZW92Zno0RnBKL0JOcFhOWVdWK042TGZnMGhZOTdKSzF2bitQdXI5RG9RdXIyRjdtNDM2YkhEVUs4QzV0NS84dnJ1bzQrOTdXbVhHK0dMbXpFaUJGK1BEd0VPb3dZTVdMRWlCRWpSb3hZZUJ3NUJEcUlQRWZYdXQ5eVdOK3ZWTnhmcm5ubVdxUi9QZGdFTm9NdDRFNXdEOWdPSGdDUGdpZkJzMkJYTTk5YjJvM2pQOEYvd01SVWxyWEFITmdIdkgwcTM4OTVKNDZIZ3VYZ1dIQUdMY3RtTHY5VnVMOTZxbnA3anhneFlzU2JDYkp2dVJaOTcvdHF4VDU5VlZSdGl4RWpSc1RoQkc3T1N0NXp6b1BUME0rY0JjNFQ1bm9YT3M3OVRxTEhlWnJIVWVDU3FlSjk2Z2FjWHkya2VjTlU4VjZIaDd5WHVRbGh0dzdCL1BPMVJUa3I1MkFqOEpORlpqWWczZ09LdUMvZy92NkxzMndOdUFZOHVyZy8vUGNJYis2UlpYdUROZUNTNlN6YkJySldsaDBETGlGSGNvOGVkOUlqenp2YVdmYTlzWnpUY2Y2RDltQ2NuYmczUGxOY0g0ZnpTOEYyTURhTGRRRzRkTFpJSnhiYmFacXY0cmk4azU4ZjMrbVBzNjZUNi9UVHpxRGVJMGFNR0RHaUhQNWRjUjhjZS94eFljV2k2dk9mcjcyNXVSemNqbm5nWFZPRDYxSHluYys5dUwrTm15ZmVqL05IcHZMNTZBNUpldXo3dXlmbytwcWNQejJWZjFOSDB0dEowM3Bla3Q4U211WS9FUFl5OXp6Yk4zMTl5bS85VEw2Wkl0OU1IQ1hSZHhKdG9Ba1dUUmR6NDcybjg3RDljVHdZTEp2dXorK0k2V0llUG8vekU4QUhwNHY4V0x5UDBudWZuTTYvK3pvRHg4K0RMMDhQNnI5K3VyaGVSdE8rakQ2L2NkcnN4M21xdTh3K3hINFBTY0tJWGE1RDJqZUNtOEV0NERid0kvQmpjQy80QlhnSS9CYjhEdXdFdThCdThBcDRBOVJhUlpwdG5POEo5Z1VIZ0VQQW9XQTVPTFkxcU1POTBHRVY3cSttWVd0eFBCV2NJWW5MNHArRHNQTmJ4ZlZGT1A4NnVBcjhETmMzNEhnVERiOFZ4OXNWYVJGSS9MdGFnellqbkNxcGI5MDhFWDg3ZUJBOEJoNEhmMmpsZS85L3d2R0ZWdjc4N3JyWlp5OGg3cXRnRE91Rk9taUJ1WFlSdmcvTzl3TUhnWGVCOTdTTHNwazRzcTBPSS9xOXYxMytlaytzaDN6WVNScDlqcllvcnc5bGwxL0dSelIrS290WVpTSGY4bGFWUDJsdnBBLzhPR2RQTWs1OWhxdFhaK0w4bkhieHZXd3FPNjVyeXUrZlQzVlp6K2w0ZEVUN0wwUjA3Mmxqc015elRwYUpxUXhzYkw4TTlXYWpZNzg5RE84NVhNcC9EY3AzUXp0ZG4rOXFmL2E5N1pXSzhQWGMzRytUcEMvbnY4TW5jeTdadklDRjMwMlA1TythTmlPdExkVFhkK0Q0UTdEVndmY3ZXdng5elRFSi9vNWlHM1I4WUFqR05Gc2VoYTVQR3VaS3o3Yjd4eFhiT3JYTWN1NWVKU28vL3JYZEgvNzNFbno2TDFxL1grZnlJdTh3Wkd0TkJta2prek5aTmdQMkF2dUJnMmJ5c0tVemR1WG4vNjZKdE5lTjRQQ1p2TzAveDdVamRuNFZuWU92Ukp6alovSSs5c1FaZWZ0WDJUYzFSUGNQei9UZjQvc2kwZyt0NU1xK2tmWmpaTDM0TWM1dWwzUFBuRTdUT3h2SEsycURhWitMKytkYjJIeVlxTW8vcVZuYi9QOHVIOC9ybW5GeFIwazZEQ3UvcmpqL1J4VDdLR1VTV2diZCtMTVF1RWdZQjF6c2sycXR2SkQ4djVBaGRmZHR0YkV1blN4YmNKRDlaZjdjaHFwMUhsYmU3RksxL2FQVlRmcDdGZ3RDMXlHR2lTbmNGSy9EaFp2aStlcFp0YTBXV2psc2ZEWk15UFJkU1BycnlxU1NLblh4MWJrcS9ZZTlUbFJwazdMcmpxMVVyZmRDOVgrTXRLcXdQNiszYS80cEpGVVpGMHBaWnB2OTFNWWpNQmFSUlhieHBobzV6UW1VWTNGK1B0NG83cnZRckJYUGRtMDBUYUUyNHVNYWRhTTJtZUxTSTdpdTA3MXQzZXIzYjZaTGk4SkVkZTNxdys2ekd2K3ljRjVrYVJCaC9tMVQvN1lsL21NeVR1TXdhZFA0eEw5aWZqSnBOd2J2RFpSSjhHOHZucVYvV2YxMmFhL2t5T2RsNjkrQnNwVHNYekd1ZUU2RStKZlpudm1YSWZOUFcrRmZYa2piMVltcVBOcG5MUDNiNjFmSENqL1g1dHpHQU5mMnkzeXF2QzdKdjdidFY0VFZiZGFtbUk5bC9nMGRTNWxOeExyazJqOXI4eGpqeGhCUW55Z2cwbGdnL2JPcmZ5Y3QrdWRKaS9ZcmswbEZueEM3Zis1a1Jic05tY2V4ZnJ1YnQwWC9yR3ZMcXJHU25ZdjNaUEhFZThyN2x2TXZVZmkyTE91LzJkZzhMclJ0UXQyeWZjdjhyNUlVNzBWa0lzNm5iZWJVWGYwTS9vN1pubDM5U2RveitYMW9FYjVOOGZmRjY3cWhQZlBQNmVvVWJ4ZitHUmYvNnNSbnZhU2RtdytCZjFWeG1iRCsyc2EvL0RVN3QvR3YyUGZLcEtkckJQOTJPamsrSXZxWDE2a3MvMnF4Ykw4RVpuYzJIcXNnWXVxUHV6WlYrSTNSYnVqYkRtK1QwUG1XQ1ZPLzVqcWZ0cDF6eSt3U0E2czBKV3RwMno1ZTFvWlYreU1zakIzWlhvbHN2MFVscnYwMXYzL2lLckY5NFF0YnQ5c2lDbm1lYjZmampmNTlLbkxrMXhhRWJ2dHZGbkZpckd2RU9xbXljUXJibS9JTXNYZDNQMjh1aDRuTTNzd1hSRVI3MTdPaVg4a2M3SzJxcXluMnAzbWFGR1UvYXJ1UDVWQ3YrUHJhb1RZVTh5VW1tYkR3Y1lvNnB1c25NNDg2eGRvZ2E0ZGtQQ2IxcEs3U2ZjNmVidmtkNHFlQXRRY2QvTjYzYkIzbFUzZGxVblVmMzhWeXZxQ3FLN0p4bE5TZDdseWRyRGxtKy91cUhpUnZsMzBOcnAvbjl6cGtaUmpvSjNWMWRpeVAwNXJJWVhIWXMrdytENStXTVM4YjVnWnRLY3VYMEtUNWQvV3d0Qjk3Vm55dlk2cmpNdWtJNTZISTByRkpQd3Q4UGpULzFPWHpTYmNNZUVtZGgyOTRxdktLNHJOdTdqNG4zTE5aZzhUS1h3YWZ2MDI1VStYdktqSHNUOFE3LzdMR2FKdDlsQWg3QXN6M3V2MFhFWDZ0MGR1RG9XTi85M3dtaDkyWHBVSG1DS2I5R0FMYkcrclpQM0FmTmJRUEtLdi9qcEYvYlAwSlhmdVcxUVlrN2RobGpjeXZrNW13KzkzM0hwbzFnMjZQUTJaUDZ6Vm1USnQ0N1AyNWpuY0Q5dlB3R1MrcTlRUy9WNlJhWThqOEs4TG12VXI5SGZZQ3BINU9XTDlsWlkrU3Y2cGVzSENKSGJ0cmY5azZldFp2ZjBHMUwwamE0Y0FlMVVUL3MzemRDZTMvUTUvbjM3MndNYzk3L0UxUWgwVGJtZndoM20vVjlPbjcydE5uckNGMXNKa1ZlMUV5WE1kQmE3K2xITXNrNDR6TUY2U3Q5ZTJkak5uYm04eWJwSGtxK2diYmVtTWFIMFVabUQ4b2JLR3JrN3IrbnQrM2JFN284M1lacC92cU9LZHY2UHpKTk42bVRKc0kvNTFYUjdpMlpyR0E1QjZ6Rnduanp4bXFQamFHZlczdFpOcnoxZWxqcTI5bU9PcWVDZkYvaXJSdDg3UE53MHVYU1ZBdnJtT01OVDU2OU1wdHNZYVYwc2ljL3diWTEzZThoUHJiOUsyeVNVSjBqNkcvTHUwVTRxcFRyUjIzak1wNm01aFUrWVRhV0NlaDlhSXNtL3JxVUhWNGJGdjQya2duWmRmSDFQVWoxRDdEVkg5ZDhraFJOMXpGUmwvKy9UVy8vcXhMMXVIODMrbWszSCtTdlJ0UzJURFU5MG5YMlRwTTYvMXh6WnBadG9ZZEs3NjNkcWx6MGY2dU5lRmVoY3MrSC9uYkdQNzdNcFgwNm4vb2ZwelArdFZtVFV2UnRWdVgvY2pTNjdPRTVrUkJyeHlKK3cvZFBvN3IrOWNPMTE2MGUzZ3F1MFMydVc3UGpOL0w2bnMvVWZNZjEwTGFpODdmckorM0tuZEFmYzh5VGYxTTNUNHM2cW00L3loNy8yR1NrRzhVTXcvL0R2UkxnYllaU0VPeHIwTENXdlJkamZoOVhHemZxTjROaXZmWmQ3cnNtRnAwOHptYnNzcktKRXVUZlZNWm9wZHBidXdTcmhOdjMvTjJzKzBQREczS05CNlJNckZ2Skh2NkI4NUhYT2JBb1dzZDN6bTNpKzZ1Wll5dHYrNStwb2hicG82K3RwWkpGZm1HbHJjTWY0YzhiMVBlMk9VSXNhWEpyaW5DVGZheHRaT3QrTlluVTNoSWZRbE4yMFovMStkdDdKYXFMc2JJenljTldabXJsTmcyRGMyL0xKMVQrVDZXcnJZU21sNEt1N2lrN3lJeDJvcEpENTF2VTlVZlZSbXJxTDh1L29sWmowUHlDTFY1aXJ4Y2RLb2kvNnJLYjhxVHJIc25oVzlqeVpIL25TcGVXRHp4ZDk3Njl1UTAxNmxnVXVmMnBBZktQaHUyRnBmWkwyWWI5c25MTmwvZk5JZXBYYVVzajR2TlhDWFVaNzVweDhvak5QOFVQdkF0YTJnNmZiK0YxY2tadW5lc2h2MXZHWFhEZXlSUnJOL2JCUFMxSnVsK2wrN3pXODZSN1d2NjNXWHlEcHQvUnhyYVJqdkMrVEMzTzYxL1Nxai9wcmFnOHgzNzJ5UWl2bitYd3VkckkyWDJFMktkdEpFb3Y1MmUwTCt1djRGTzNwL3J2c3Nnc0w4RjRkL3o5UHpsV1M5NG04ZnFTMzM2MUZpKzZxYVZZSHdpOVl6NGlIMmZvYklqKzQ1Y3B6L1RVYWFyci80K3ordmFXdFZ0eUFYMmQxTEc4VzlDM2YrRjFtbmYzNi9rNHczWVByTHYrWEJWWENKczNjcituNE1LSnVMdi9mTjlHaE5kWFZQNXBKTU45dkZpM3JwdjMvcjhZd2czU1lwNjZ6Tk9zTzhRR2N4UHBubVJTLzFtdm1Kamp1M3Y3YWJzSTJ4c3BRcnZzMWROYmpPai93UDdoMVJsWnlLR3k4b2NjNDA4VUw4RW40djZ4ZkMvSzN6NTJYekpkNjJUOHZ1WkdHc3hvLzZPNDZudG1OcXFGYi9qcHMyL2hIVjRyUEtIMHN2VDRwc3RVN3QydFo5dS9aZHFiSkwxTXdQNk84NkZ5dDRqWWFJckd6OW1qRXQ4bEZMNFB0VkU2dm90RzJQNmZwZGYvR1pSc2U3czNiZjRCdFNsL0RJYktNY3R4KytaKzhvNks2ejlGUE93S3NSbVhpYU5sN0MrNk5ZUnBqbGJxRzFqNzJmNDlxc3VZNGJyZC9hbWI0WlZjOFRRK3NTSDk4NUxyRWU4aVBXSm5mUHJKUmJXYmIrZHduNHg2bytyL2FTMlM3dzNxV3QvL0xuWXoybnRFMHZIMXVEY3lLYXR4MXJIK0VpTVBFTjFTWkcvaXo2KzlvMDFSb2I2TzdRK3hMWjFqSG9iSzYxVStwV1Z2bzJFcHVXcXp6RDZQb2ErcHZobGkwd244WnEvNzJNem0yZDkwbzVWTjF4OVpLdXpiVGd2cVd3VUlpbjhGU3BsMUNYWHZGUnhVMGlvelZQWUpEUnRGM3VGcGhuNlhBeUpVVWREN1NqVEo4djZuOWZWYlZPYmtLV3AwMDFsYzlWUmxxZE9mNXYwWk0rYnltZGJmcDFOZkcwYnEyN1k1Sk15ZnhlSmtVNm8vaW5LSDhPMlpmZ2lkYjZoL2czVko3UWNWYldMMFB4dDZybHJQcWE0S2ZRMjVhMnpsNC9FOEdkTS80Zksvd0E9XCIsXCJiYXNlNjRcIikpO1xudmFyIHN0YXRlTWFjaGluZSA9IG5ldyBTdGF0ZU1hY2hpbmUoaW5kaWNNYWNoaW5lKTtcbi8qKlxyXG4gKiBUaGUgSW5kaWNTaGFwZXIgc3VwcG9ydHMgaW5kaWMgc2NyaXB0cyBlLmcuIERldmFuYWdhcmksIEthbm5hZGEsIGV0Yy5cclxuICogQmFzZWQgb24gY29kZSBmcm9tIEhhcmZidXp6OiBodHRwczovL2dpdGh1Yi5jb20vYmVoZGFkL2hhcmZidXp6L2Jsb2IvbWFzdGVyL3NyYy9oYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLmNjXHJcbiAqL1xuXG52YXIgSW5kaWNTaGFwZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9EZWZhdWx0U2hhcGVyMykge1xuICBfaW5oZXJpdHNMb29zZShJbmRpY1NoYXBlciwgX0RlZmF1bHRTaGFwZXIzKTtcblxuICBmdW5jdGlvbiBJbmRpY1NoYXBlcigpIHtcbiAgICByZXR1cm4gX0RlZmF1bHRTaGFwZXIzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuXG4gIEluZGljU2hhcGVyLnBsYW5GZWF0dXJlcyA9IGZ1bmN0aW9uIHBsYW5GZWF0dXJlcyhwbGFuKSB7XG4gICAgcGxhbi5hZGRTdGFnZShzZXR1cFN5bGxhYmxlcyk7XG4gICAgcGxhbi5hZGRTdGFnZShbJ2xvY2wnLCAnY2NtcCddKTtcbiAgICBwbGFuLmFkZFN0YWdlKGluaXRpYWxSZW9yZGVyaW5nKTtcbiAgICBwbGFuLmFkZFN0YWdlKCdudWt0Jyk7XG4gICAgcGxhbi5hZGRTdGFnZSgnYWtobicpO1xuICAgIHBsYW4uYWRkU3RhZ2UoJ3JwaGYnLCBmYWxzZSk7XG4gICAgcGxhbi5hZGRTdGFnZSgncmtyZicpO1xuICAgIHBsYW4uYWRkU3RhZ2UoJ3ByZWYnLCBmYWxzZSk7XG4gICAgcGxhbi5hZGRTdGFnZSgnYmx3ZicsIGZhbHNlKTtcbiAgICBwbGFuLmFkZFN0YWdlKCdhYnZmJywgZmFsc2UpO1xuICAgIHBsYW4uYWRkU3RhZ2UoJ2hhbGYnLCBmYWxzZSk7XG4gICAgcGxhbi5hZGRTdGFnZSgncHN0ZicsIGZhbHNlKTtcbiAgICBwbGFuLmFkZFN0YWdlKCd2YXR1Jyk7XG4gICAgcGxhbi5hZGRTdGFnZSgnY2pjdCcpO1xuICAgIHBsYW4uYWRkU3RhZ2UoJ2NmYXInLCBmYWxzZSk7XG4gICAgcGxhbi5hZGRTdGFnZShmaW5hbFJlb3JkZXJpbmcpO1xuICAgIHBsYW4uYWRkU3RhZ2Uoe1xuICAgICAgbG9jYWw6IFsnaW5pdCddLFxuICAgICAgZ2xvYmFsOiBbJ3ByZXMnLCAnYWJ2cycsICdibHdzJywgJ3BzdHMnLCAnaGFsbicsICdkaXN0JywgJ2Fidm0nLCAnYmx3bScsICdjYWx0JywgJ2NsaWcnXVxuICAgIH0pOyAvLyBTZXR1cCB0aGUgaW5kaWMgY29uZmlnIGZvciB0aGUgc2VsZWN0ZWQgc2NyaXB0XG5cbiAgICBwbGFuLnVuaWNvZGVTY3JpcHQgPSBmcm9tT3BlblR5cGUocGxhbi5zY3JpcHQpO1xuICAgIHBsYW4uaW5kaWNDb25maWcgPSBJTkRJQ19DT05GSUdTW3BsYW4udW5pY29kZVNjcmlwdF0gfHwgSU5ESUNfQ09ORklHUy5EZWZhdWx0O1xuICAgIHBsYW4uaXNPbGRTcGVjID0gcGxhbi5pbmRpY0NvbmZpZy5oYXNPbGRTcGVjICYmIHBsYW4uc2NyaXB0W3BsYW4uc2NyaXB0Lmxlbmd0aCAtIDFdICE9PSAnMic7IC8vIFRPRE86IHR1cm4gb2ZmIGtlcm4gKEtobWVyKSBhbmQgbGlnYSBmZWF0dXJlcy5cbiAgfTtcblxuICBJbmRpY1NoYXBlci5hc3NpZ25GZWF0dXJlcyA9IGZ1bmN0aW9uIGFzc2lnbkZlYXR1cmVzKHBsYW4sIGdseXBocykge1xuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcbiAgICAgIHZhciBjb2RlcG9pbnQgPSBnbHlwaHNbaV0uY29kZVBvaW50c1swXTtcbiAgICAgIHZhciBkID0gSU5ESUNfREVDT01QT1NJVElPTlNbY29kZXBvaW50XSB8fCBkZWNvbXBvc2l0aW9ucyQxW2NvZGVwb2ludF07XG5cbiAgICAgIGlmIChkKSB7XG4gICAgICAgIHZhciBkZWNvbXBvc2VkID0gZC5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICB2YXIgZyA9IHBsYW4uZm9udC5nbHlwaEZvckNvZGVQb2ludChjKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEdseXBoSW5mbyhwbGFuLmZvbnQsIGcuaWQsIFtjXSwgZ2x5cGhzW2ldLmZlYXR1cmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGdseXBocy5zcGxpY2UuYXBwbHkoZ2x5cGhzLCBbaSwgMV0uY29uY2F0KGRlY29tcG9zZWQpKTtcbiAgICAgIH1cbiAgICB9OyAvLyBEZWNvbXBvc2Ugc3BsaXQgbWF0cmFzXG4gICAgLy8gVE9ETzogZG8gdGhpcyBpbiBhIG1vcmUgZ2VuZXJhbCB1bmljb2RlIG5vcm1hbGl6ZXJcblxuXG4gICAgZm9yICh2YXIgaSA9IGdseXBocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgX2xvb3AoaSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBJbmRpY1NoYXBlcjtcbn0oRGVmYXVsdFNoYXBlcik7XG5cbl9kZWZpbmVQcm9wZXJ0eShJbmRpY1NoYXBlciwgXCJ6ZXJvTWFya1dpZHRoc1wiLCAnTk9ORScpO1xuXG5mdW5jdGlvbiBpbmRpY0NhdGVnb3J5KGdseXBoKSB7XG4gIHJldHVybiB0cmllJDEuZ2V0KGdseXBoLmNvZGVQb2ludHNbMF0pID4+IDg7XG59XG5cbmZ1bmN0aW9uIGluZGljUG9zaXRpb24oZ2x5cGgpIHtcbiAgcmV0dXJuIDEgPDwgKHRyaWUkMS5nZXQoZ2x5cGguY29kZVBvaW50c1swXSkgJiAweGZmKTtcbn1cblxudmFyIEluZGljSW5mbyA9IGZ1bmN0aW9uIEluZGljSW5mbyhjYXRlZ29yeSwgcG9zaXRpb24sIHN5bGxhYmxlVHlwZSwgc3lsbGFibGUpIHtcbiAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XG4gIHRoaXMuc3lsbGFibGVUeXBlID0gc3lsbGFibGVUeXBlO1xuICB0aGlzLnN5bGxhYmxlID0gc3lsbGFibGU7XG59O1xuXG5mdW5jdGlvbiBzZXR1cFN5bGxhYmxlcyhmb250LCBnbHlwaHMpIHtcbiAgdmFyIHN5bGxhYmxlID0gMDtcbiAgdmFyIGxhc3QgPSAwO1xuXG4gIGZvciAodmFyIF9pdGVyYXRvcjUzID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShzdGF0ZU1hY2hpbmUubWF0Y2goZ2x5cGhzLm1hcChpbmRpY0NhdGVnb3J5KSkpLCBfc3RlcDUzOyAhKF9zdGVwNTMgPSBfaXRlcmF0b3I1MygpKS5kb25lOykge1xuICAgIHZhciBfc3RlcDUzJHZhbHVlID0gX3N0ZXA1My52YWx1ZSxcbiAgICAgICAgc3RhcnQgPSBfc3RlcDUzJHZhbHVlWzBdLFxuICAgICAgICBlbmQgPSBfc3RlcDUzJHZhbHVlWzFdLFxuICAgICAgICB0YWdzID0gX3N0ZXA1MyR2YWx1ZVsyXTtcblxuICAgIGlmIChzdGFydCA+IGxhc3QpIHtcbiAgICAgICsrc3lsbGFibGU7XG5cbiAgICAgIGZvciAodmFyIGkgPSBsYXN0OyBpIDwgc3RhcnQ7IGkrKykge1xuICAgICAgICBnbHlwaHNbaV0uc2hhcGVySW5mbyA9IG5ldyBJbmRpY0luZm8oQ0FURUdPUklFUy5YLCBQT1NJVElPTlMuRW5kLCAnbm9uX2luZGljX2NsdXN0ZXInLCBzeWxsYWJsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgKytzeWxsYWJsZTsgLy8gQ3JlYXRlIHNoYXBlciBpbmZvXG5cbiAgICBmb3IgKHZhciBfaSA9IHN0YXJ0OyBfaSA8PSBlbmQ7IF9pKyspIHtcbiAgICAgIGdseXBoc1tfaV0uc2hhcGVySW5mbyA9IG5ldyBJbmRpY0luZm8oMSA8PCBpbmRpY0NhdGVnb3J5KGdseXBoc1tfaV0pLCBpbmRpY1Bvc2l0aW9uKGdseXBoc1tfaV0pLCB0YWdzWzBdLCBzeWxsYWJsZSk7XG4gICAgfVxuXG4gICAgbGFzdCA9IGVuZCArIDE7XG4gIH1cblxuICBpZiAobGFzdCA8IGdseXBocy5sZW5ndGgpIHtcbiAgICArK3N5bGxhYmxlO1xuXG4gICAgZm9yICh2YXIgX2kyID0gbGFzdDsgX2kyIDwgZ2x5cGhzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIGdseXBoc1tfaTJdLnNoYXBlckluZm8gPSBuZXcgSW5kaWNJbmZvKENBVEVHT1JJRVMuWCwgUE9TSVRJT05TLkVuZCwgJ25vbl9pbmRpY19jbHVzdGVyJywgc3lsbGFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbnNvbmFudChnbHlwaCkge1xuICByZXR1cm4gZ2x5cGguc2hhcGVySW5mby5jYXRlZ29yeSAmIENPTlNPTkFOVF9GTEFHUztcbn1cblxuZnVuY3Rpb24gaXNKb2luZXIoZ2x5cGgpIHtcbiAgcmV0dXJuIGdseXBoLnNoYXBlckluZm8uY2F0ZWdvcnkgJiBKT0lORVJfRkxBR1M7XG59XG5cbmZ1bmN0aW9uIGlzSGFsYW50T3JDb2VuZyhnbHlwaCkge1xuICByZXR1cm4gZ2x5cGguc2hhcGVySW5mby5jYXRlZ29yeSAmIEhBTEFOVF9PUl9DT0VOR19GTEFHUztcbn1cblxuZnVuY3Rpb24gd291bGRTdWJzdGl0dXRlKGdseXBocywgZmVhdHVyZSkge1xuICBmb3IgKHZhciBfaXRlcmF0b3I1NCA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoZ2x5cGhzKSwgX3N0ZXA1NDsgIShfc3RlcDU0ID0gX2l0ZXJhdG9yNTQoKSkuZG9uZTspIHtcbiAgICB2YXIgX2dseXBoJGZlYXR1cmVzO1xuXG4gICAgdmFyIGdseXBoID0gX3N0ZXA1NC52YWx1ZTtcbiAgICBnbHlwaC5mZWF0dXJlcyA9IChfZ2x5cGgkZmVhdHVyZXMgPSB7fSwgX2dseXBoJGZlYXR1cmVzW2ZlYXR1cmVdID0gdHJ1ZSwgX2dseXBoJGZlYXR1cmVzKTtcbiAgfVxuXG4gIHZhciBHU1VCID0gZ2x5cGhzWzBdLl9mb250Ll9sYXlvdXRFbmdpbmUuZW5naW5lLkdTVUJQcm9jZXNzb3I7XG4gIEdTVUIuYXBwbHlGZWF0dXJlcyhbZmVhdHVyZV0sIGdseXBocyk7XG4gIHJldHVybiBnbHlwaHMubGVuZ3RoID09PSAxO1xufVxuXG5mdW5jdGlvbiBjb25zb25hbnRQb3NpdGlvbihmb250LCBjb25zb25hbnQsIHZpcmFtYSkge1xuICB2YXIgZ2x5cGhzID0gW3ZpcmFtYSwgY29uc29uYW50LCB2aXJhbWFdO1xuXG4gIGlmICh3b3VsZFN1YnN0aXR1dGUoZ2x5cGhzLnNsaWNlKDAsIDIpLCAnYmx3ZicpIHx8IHdvdWxkU3Vic3RpdHV0ZShnbHlwaHMuc2xpY2UoMSwgMyksICdibHdmJykpIHtcbiAgICByZXR1cm4gUE9TSVRJT05TLkJlbG93X0M7XG4gIH0gZWxzZSBpZiAod291bGRTdWJzdGl0dXRlKGdseXBocy5zbGljZSgwLCAyKSwgJ3BzdGYnKSB8fCB3b3VsZFN1YnN0aXR1dGUoZ2x5cGhzLnNsaWNlKDEsIDMpLCAncHN0ZicpKSB7XG4gICAgcmV0dXJuIFBPU0lUSU9OUy5Qb3N0X0M7XG4gIH0gZWxzZSBpZiAod291bGRTdWJzdGl0dXRlKGdseXBocy5zbGljZSgwLCAyKSwgJ3ByZWYnKSB8fCB3b3VsZFN1YnN0aXR1dGUoZ2x5cGhzLnNsaWNlKDEsIDMpLCAncHJlZicpKSB7XG4gICAgcmV0dXJuIFBPU0lUSU9OUy5Qb3N0X0M7XG4gIH1cblxuICByZXR1cm4gUE9TSVRJT05TLkJhc2VfQztcbn1cblxuZnVuY3Rpb24gaW5pdGlhbFJlb3JkZXJpbmcoZm9udCwgZ2x5cGhzLCBwbGFuKSB7XG4gIHZhciBpbmRpY0NvbmZpZyA9IHBsYW4uaW5kaWNDb25maWc7XG4gIHZhciBmZWF0dXJlcyA9IGZvbnQuX2xheW91dEVuZ2luZS5lbmdpbmUuR1NVQlByb2Nlc3Nvci5mZWF0dXJlcztcbiAgdmFyIGRvdHRlZENpcmNsZSA9IGZvbnQuZ2x5cGhGb3JDb2RlUG9pbnQoMHgyNWNjKS5pZDtcbiAgdmFyIHZpcmFtYSA9IGZvbnQuZ2x5cGhGb3JDb2RlUG9pbnQoaW5kaWNDb25maWcudmlyYW1hKS5pZDtcblxuICBpZiAodmlyYW1hKSB7XG4gICAgdmFyIGluZm8gPSBuZXcgR2x5cGhJbmZvKGZvbnQsIHZpcmFtYSwgW2luZGljQ29uZmlnLnZpcmFtYV0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChnbHlwaHNbaV0uc2hhcGVySW5mby5wb3NpdGlvbiA9PT0gUE9TSVRJT05TLkJhc2VfQykge1xuICAgICAgICBnbHlwaHNbaV0uc2hhcGVySW5mby5wb3NpdGlvbiA9IGNvbnNvbmFudFBvc2l0aW9uKGZvbnQsIGdseXBoc1tpXS5jb3B5KCksIGluZm8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIHN0YXJ0ID0gMCwgZW5kID0gbmV4dFN5bGxhYmxlKGdseXBocywgMCk7IHN0YXJ0IDwgZ2x5cGhzLmxlbmd0aDsgc3RhcnQgPSBlbmQsIGVuZCA9IG5leHRTeWxsYWJsZShnbHlwaHMsIHN0YXJ0KSkge1xuICAgIHZhciBfZ2x5cGhzJHN0YXJ0JHNoYXBlckkgPSBnbHlwaHNbc3RhcnRdLnNoYXBlckluZm8sXG4gICAgICAgIGNhdGVnb3J5ID0gX2dseXBocyRzdGFydCRzaGFwZXJJLmNhdGVnb3J5LFxuICAgICAgICBzeWxsYWJsZVR5cGUgPSBfZ2x5cGhzJHN0YXJ0JHNoYXBlckkuc3lsbGFibGVUeXBlO1xuXG4gICAgaWYgKHN5bGxhYmxlVHlwZSA9PT0gJ3N5bWJvbF9jbHVzdGVyJyB8fCBzeWxsYWJsZVR5cGUgPT09ICdub25faW5kaWNfY2x1c3RlcicpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChzeWxsYWJsZVR5cGUgPT09ICdicm9rZW5fY2x1c3RlcicgJiYgZG90dGVkQ2lyY2xlKSB7XG4gICAgICB2YXIgZyA9IG5ldyBHbHlwaEluZm8oZm9udCwgZG90dGVkQ2lyY2xlLCBbMHgyNWNjXSk7XG4gICAgICBnLnNoYXBlckluZm8gPSBuZXcgSW5kaWNJbmZvKDEgPDwgaW5kaWNDYXRlZ29yeShnKSwgaW5kaWNQb3NpdGlvbihnKSwgZ2x5cGhzW3N0YXJ0XS5zaGFwZXJJbmZvLnN5bGxhYmxlVHlwZSwgZ2x5cGhzW3N0YXJ0XS5zaGFwZXJJbmZvLnN5bGxhYmxlKTsgLy8gSW5zZXJ0IGFmdGVyIHBvc3NpYmxlIFJlcGhhLlxuXG4gICAgICB2YXIgX2kzID0gc3RhcnQ7XG5cbiAgICAgIHdoaWxlIChfaTMgPCBlbmQgJiYgZ2x5cGhzW19pM10uc2hhcGVySW5mby5jYXRlZ29yeSA9PT0gQ0FURUdPUklFUy5SZXBoYSkge1xuICAgICAgICBfaTMrKztcbiAgICAgIH1cblxuICAgICAgZ2x5cGhzLnNwbGljZShfaTMrKywgMCwgZyk7XG4gICAgICBlbmQrKztcbiAgICB9IC8vIDEuIEZpbmQgYmFzZSBjb25zb25hbnQ6XG4gICAgLy9cbiAgICAvLyBUaGUgc2hhcGluZyBlbmdpbmUgZmluZHMgdGhlIGJhc2UgY29uc29uYW50IG9mIHRoZSBzeWxsYWJsZSwgdXNpbmcgdGhlXG4gICAgLy8gZm9sbG93aW5nIGFsZ29yaXRobTogc3RhcnRpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBzeWxsYWJsZSwgbW92ZSBiYWNrd2FyZHNcbiAgICAvLyB1bnRpbCBhIGNvbnNvbmFudCBpcyBmb3VuZCB0aGF0IGRvZXMgbm90IGhhdmUgYSBiZWxvdy1iYXNlIG9yIHBvc3QtYmFzZVxuICAgIC8vIGZvcm0gKHBvc3QtYmFzZSBmb3JtcyBoYXZlIHRvIGZvbGxvdyBiZWxvdy1iYXNlIGZvcm1zKSwgb3IgdGhhdCBpcyBub3QgYVxuICAgIC8vIHByZS1iYXNlIHJlb3JkZXJpbmcgUmEsIG9yIGFycml2ZSBhdCB0aGUgZmlyc3QgY29uc29uYW50LiBUaGUgY29uc29uYW50XG4gICAgLy8gc3RvcHBlZCBhdCB3aWxsIGJlIHRoZSBiYXNlLlxuXG5cbiAgICB2YXIgYmFzZSA9IGVuZDtcbiAgICB2YXIgbGltaXQgPSBzdGFydDtcbiAgICB2YXIgaGFzUmVwaCA9IGZhbHNlOyAvLyBJZiB0aGUgc3lsbGFibGUgc3RhcnRzIHdpdGggUmEgKyBIYWxhbnQgKGluIGEgc2NyaXB0IHRoYXQgaGFzIFJlcGgpXG4gICAgLy8gYW5kIGhhcyBtb3JlIHRoYW4gb25lIGNvbnNvbmFudCwgUmEgaXMgZXhjbHVkZWQgZnJvbSBjYW5kaWRhdGVzIGZvclxuICAgIC8vIGJhc2UgY29uc29uYW50cy5cblxuICAgIGlmIChpbmRpY0NvbmZpZy5yZXBoUG9zICE9PSBQT1NJVElPTlMuUmFfVG9fQmVjb21lX1JlcGggJiYgZmVhdHVyZXMucnBoZiAmJiBzdGFydCArIDMgPD0gZW5kICYmIChpbmRpY0NvbmZpZy5yZXBoTW9kZSA9PT0gJ0ltcGxpY2l0JyAmJiAhaXNKb2luZXIoZ2x5cGhzW3N0YXJ0ICsgMl0pIHx8IGluZGljQ29uZmlnLnJlcGhNb2RlID09PSAnRXhwbGljaXQnICYmIGdseXBoc1tzdGFydCArIDJdLnNoYXBlckluZm8uY2F0ZWdvcnkgPT09IENBVEVHT1JJRVMuWldKKSkge1xuICAgICAgLy8gU2VlIGlmIGl0IG1hdGNoZXMgdGhlICdycGhmJyBmZWF0dXJlLlxuICAgICAgdmFyIF9nID0gW2dseXBoc1tzdGFydF0uY29weSgpLCBnbHlwaHNbc3RhcnQgKyAxXS5jb3B5KCksIGdseXBoc1tzdGFydCArIDJdLmNvcHkoKV07XG5cbiAgICAgIGlmICh3b3VsZFN1YnN0aXR1dGUoX2cuc2xpY2UoMCwgMiksICdycGhmJykgfHwgaW5kaWNDb25maWcucmVwaE1vZGUgPT09ICdFeHBsaWNpdCcgJiYgd291bGRTdWJzdGl0dXRlKF9nLCAncnBoZicpKSB7XG4gICAgICAgIGxpbWl0ICs9IDI7XG5cbiAgICAgICAgd2hpbGUgKGxpbWl0IDwgZW5kICYmIGlzSm9pbmVyKGdseXBoc1tsaW1pdF0pKSB7XG4gICAgICAgICAgbGltaXQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2UgPSBzdGFydDtcbiAgICAgICAgaGFzUmVwaCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbmRpY0NvbmZpZy5yZXBoTW9kZSA9PT0gJ0xvZ19SZXBoYScgJiYgZ2x5cGhzW3N0YXJ0XS5zaGFwZXJJbmZvLmNhdGVnb3J5ID09PSBDQVRFR09SSUVTLlJlcGhhKSB7XG4gICAgICBsaW1pdCsrO1xuXG4gICAgICB3aGlsZSAobGltaXQgPCBlbmQgJiYgaXNKb2luZXIoZ2x5cGhzW2xpbWl0XSkpIHtcbiAgICAgICAgbGltaXQrKztcbiAgICAgIH1cblxuICAgICAgYmFzZSA9IHN0YXJ0O1xuICAgICAgaGFzUmVwaCA9IHRydWU7XG4gICAgfVxuXG4gICAgc3dpdGNoIChpbmRpY0NvbmZpZy5iYXNlUG9zKSB7XG4gICAgICBjYXNlICdMYXN0JzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIHN0YXJ0aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgc3lsbGFibGUsIG1vdmUgYmFja3dhcmRzXG4gICAgICAgICAgdmFyIF9pNCA9IGVuZDtcbiAgICAgICAgICB2YXIgc2VlbkJlbG93ID0gZmFsc2U7XG5cbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICB2YXIgX2luZm8gPSBnbHlwaHNbLS1faTRdLnNoYXBlckluZm87IC8vIHVudGlsIGEgY29uc29uYW50IGlzIGZvdW5kXG5cbiAgICAgICAgICAgIGlmIChpc0NvbnNvbmFudChnbHlwaHNbX2k0XSkpIHtcbiAgICAgICAgICAgICAgLy8gdGhhdCBkb2VzIG5vdCBoYXZlIGEgYmVsb3ctYmFzZSBvciBwb3N0LWJhc2UgZm9ybVxuICAgICAgICAgICAgICAvLyAocG9zdC1iYXNlIGZvcm1zIGhhdmUgdG8gZm9sbG93IGJlbG93LWJhc2UgZm9ybXMpLFxuICAgICAgICAgICAgICBpZiAoX2luZm8ucG9zaXRpb24gIT09IFBPU0lUSU9OUy5CZWxvd19DICYmIChfaW5mby5wb3NpdGlvbiAhPT0gUE9TSVRJT05TLlBvc3RfQyB8fCBzZWVuQmVsb3cpKSB7XG4gICAgICAgICAgICAgICAgYmFzZSA9IF9pNDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfSAvLyBvciB0aGF0IGlzIG5vdCBhIHByZS1iYXNlIHJlb3JkZXJpbmcgUmEsXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIElNUExFTUVOVEFUSU9OIE5PVEVTOlxuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAvLyBPdXIgcHJlLWJhc2UgcmVvcmRlcmluZyBSYSdzIGFyZSBtYXJrZWQgUE9TX1BPU1RfQywgc28gd2lsbCBiZSBza2lwcGVkXG4gICAgICAgICAgICAgIC8vIGJ5IHRoZSBsb2dpYyBhYm92ZSBhbHJlYWR5LlxuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAvLyBvciBhcnJpdmUgYXQgdGhlIGZpcnN0IGNvbnNvbmFudC4gVGhlIGNvbnNvbmFudCBzdG9wcGVkIGF0IHdpbGxcbiAgICAgICAgICAgICAgLy8gYmUgdGhlIGJhc2UuXG5cblxuICAgICAgICAgICAgICBpZiAoX2luZm8ucG9zaXRpb24gPT09IFBPU0lUSU9OUy5CZWxvd19DKSB7XG4gICAgICAgICAgICAgICAgc2VlbkJlbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJhc2UgPSBfaTQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgX2k0ICYmIF9pbmZvLmNhdGVnb3J5ID09PSBDQVRFR09SSUVTLlpXSiAmJiBnbHlwaHNbX2k0IC0gMV0uc2hhcGVySW5mby5jYXRlZ29yeSA9PT0gQ0FURUdPUklFUy5IKSB7XG4gICAgICAgICAgICAgIC8vIEEgWldKIGFmdGVyIGEgSGFsYW50IHN0b3BzIHRoZSBiYXNlIHNlYXJjaCwgYW5kIHJlcXVlc3RzIGFuIGV4cGxpY2l0XG4gICAgICAgICAgICAgIC8vIGhhbGYgZm9ybS5cbiAgICAgICAgICAgICAgLy8gQSBaV0ogYmVmb3JlIGEgSGFsYW50LCByZXF1ZXN0cyBhIHN1YmpvaW5lZCBmb3JtIGluc3RlYWQsIGFuZCBoZW5jZVxuICAgICAgICAgICAgICAvLyBzZWFyY2ggY29udGludWVzLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBCZW5nYWxpXG4gICAgICAgICAgICAgIC8vIHNlcXVlbmNlIFJhLEgsWWEgdGhhdCBzaG91bGQgZm9ybSBZYS1QaGFsYWEgYnkgc3Viam9pbmluZyBZYS5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAoX2k0ID4gbGltaXQpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnRmlyc3QnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gVGhlIGZpcnN0IGNvbnNvbmFudCBpcyBhbHdheXMgdGhlIGJhc2UuXG4gICAgICAgICAgYmFzZSA9IHN0YXJ0OyAvLyBNYXJrIGFsbCBzdWJzZXF1ZW50IGNvbnNvbmFudHMgYXMgYmVsb3cuXG5cbiAgICAgICAgICBmb3IgKHZhciBfaTUgPSBiYXNlICsgMTsgX2k1IDwgZW5kOyBfaTUrKykge1xuICAgICAgICAgICAgaWYgKGlzQ29uc29uYW50KGdseXBoc1tfaTVdKSkge1xuICAgICAgICAgICAgICBnbHlwaHNbX2k1XS5zaGFwZXJJbmZvLnBvc2l0aW9uID0gUE9TSVRJT05TLkJlbG93X0M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSAvLyBJZiB0aGUgc3lsbGFibGUgc3RhcnRzIHdpdGggUmEgKyBIYWxhbnQgKGluIGEgc2NyaXB0IHRoYXQgaGFzIFJlcGgpXG4gICAgLy8gYW5kIGhhcyBtb3JlIHRoYW4gb25lIGNvbnNvbmFudCwgUmEgaXMgZXhjbHVkZWQgZnJvbSBjYW5kaWRhdGVzIGZvclxuICAgIC8vIGJhc2UgY29uc29uYW50cy5cbiAgICAvL1xuICAgIC8vICBPbmx5IGRvIHRoaXMgZm9yIHVuZm9yY2VkIFJlcGguIChpZS4gbm90IGZvciBSYSxILFpXSilcblxuXG4gICAgaWYgKGhhc1JlcGggJiYgYmFzZSA9PT0gc3RhcnQgJiYgbGltaXQgLSBiYXNlIDw9IDIpIHtcbiAgICAgIGhhc1JlcGggPSBmYWxzZTtcbiAgICB9IC8vIDIuIERlY29tcG9zZSBhbmQgcmVvcmRlciBNYXRyYXM6XG4gICAgLy9cbiAgICAvLyBFYWNoIG1hdHJhIGFuZCBhbnkgc3lsbGFibGUgbW9kaWZpZXIgc2lnbiBpbiB0aGUgY2x1c3RlciBhcmUgbW92ZWQgdG8gdGhlXG4gICAgLy8gYXBwcm9wcmlhdGUgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGNvbnNvbmFudChzKSBpbiB0aGUgY2x1c3Rlci4gVGhlXG4gICAgLy8gc2hhcGluZyBlbmdpbmUgZGVjb21wb3NlcyB0d28tIG9yIHRocmVlLXBhcnQgbWF0cmFzIGludG8gdGhlaXIgY29uc3RpdHVlbnRcbiAgICAvLyBwYXJ0cyBiZWZvcmUgYW55IHJlcG9zaXRpb25pbmcuIE1hdHJhIGNoYXJhY3RlcnMgYXJlIGNsYXNzaWZpZWQgYnkgd2hpY2hcbiAgICAvLyBjb25zb25hbnQgaW4gYSBjb25qdW5jdCB0aGV5IGhhdmUgYWZmaW5pdHkgZm9yIGFuZCBhcmUgcmVvcmRlcmVkIHRvIHRoZVxuICAgIC8vIGZvbGxvd2luZyBwb3NpdGlvbnM6XG4gICAgLy9cbiAgICAvLyAgIG8gQmVmb3JlIGZpcnN0IGhhbGYgZm9ybSBpbiB0aGUgc3lsbGFibGVcbiAgICAvLyAgIG8gQWZ0ZXIgc3Viam9pbmVkIGNvbnNvbmFudHNcbiAgICAvLyAgIG8gQWZ0ZXIgcG9zdC1mb3JtIGNvbnNvbmFudFxuICAgIC8vICAgbyBBZnRlciBtYWluIGNvbnNvbmFudCAoZm9yIGFib3ZlIG1hcmtzKVxuICAgIC8vXG4gICAgLy8gSU1QTEVNRU5UQVRJT04gTk9URVM6XG4gICAgLy9cbiAgICAvLyBUaGUgbm9ybWFsaXplKCkgcm91dGluZSBoYXMgYWxyZWFkeSBkZWNvbXBvc2VkIG1hdHJhcyBmb3IgdXMsIHNvIHdlIGRvbid0XG4gICAgLy8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LlxuICAgIC8vIDMuICBSZW9yZGVyIG1hcmtzIHRvIGNhbm9uaWNhbCBvcmRlcjpcbiAgICAvL1xuICAgIC8vIEFkamFjZW50IG51a3RhIGFuZCBoYWxhbnQgb3IgbnVrdGEgYW5kIHZlZGljIHNpZ24gYXJlIGFsd2F5cyByZXBvc2l0aW9uZWRcbiAgICAvLyBpZiBuZWNlc3NhcnksIHNvIHRoYXQgdGhlIG51a3RhIGlzIGZpcnN0LlxuICAgIC8vXG4gICAgLy8gSU1QTEVNRU5UQVRJT04gTk9URVM6XG4gICAgLy9cbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIHRoaXM6IHRoZSBub3JtYWxpemUoKSByb3V0aW5lIGFscmVhZHkgZGlkIHRoaXMgZm9yIHVzLlxuICAgIC8vIFJlb3JkZXIgY2hhcmFjdGVyc1xuXG5cbiAgICBmb3IgKHZhciBfaTYgPSBzdGFydDsgX2k2IDwgYmFzZTsgX2k2KyspIHtcbiAgICAgIHZhciBfaW5mbzIgPSBnbHlwaHNbX2k2XS5zaGFwZXJJbmZvO1xuICAgICAgX2luZm8yLnBvc2l0aW9uID0gTWF0aC5taW4oUE9TSVRJT05TLlByZV9DLCBfaW5mbzIucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChiYXNlIDwgZW5kKSB7XG4gICAgICBnbHlwaHNbYmFzZV0uc2hhcGVySW5mby5wb3NpdGlvbiA9IFBPU0lUSU9OUy5CYXNlX0M7XG4gICAgfSAvLyBNYXJrIGZpbmFsIGNvbnNvbmFudHMuICBBIGZpbmFsIGNvbnNvbmFudCBpcyBvbmUgYXBwZWFyaW5nIGFmdGVyIGEgbWF0cmEsXG4gICAgLy8gbGlrZSBpbiBLaG1lci5cblxuXG4gICAgZm9yICh2YXIgX2k3ID0gYmFzZSArIDE7IF9pNyA8IGVuZDsgX2k3KyspIHtcbiAgICAgIGlmIChnbHlwaHNbX2k3XS5zaGFwZXJJbmZvLmNhdGVnb3J5ID09PSBDQVRFR09SSUVTLk0pIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IF9pNyArIDE7IGogPCBlbmQ7IGorKykge1xuICAgICAgICAgIGlmIChpc0NvbnNvbmFudChnbHlwaHNbal0pKSB7XG4gICAgICAgICAgICBnbHlwaHNbal0uc2hhcGVySW5mby5wb3NpdGlvbiA9IFBPU0lUSU9OUy5GaW5hbF9DO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSAvLyBIYW5kbGUgYmVnaW5uaW5nIFJhXG5cblxuICAgIGlmIChoYXNSZXBoKSB7XG4gICAgICBnbHlwaHNbc3RhcnRdLnNoYXBlckluZm8ucG9zaXRpb24gPSBQT1NJVElPTlMuUmFfVG9fQmVjb21lX1JlcGg7XG4gICAgfSAvLyBGb3Igb2xkLXN0eWxlIEluZGljIHNjcmlwdCB0YWdzLCBtb3ZlIHRoZSBmaXJzdCBwb3N0LWJhc2UgSGFsYW50IGFmdGVyXG4gICAgLy8gbGFzdCBjb25zb25hbnQuXG4gICAgLy9cbiAgICAvLyBSZXBvcnRzIHN1Z2dlc3QgdGhhdCBpbiBzb21lIHNjcmlwdHMgVW5pc2NyaWJlIGRvZXMgdGhpcyBvbmx5IGlmIHRoZXJlXG4gICAgLy8gaXMgKm5vdCogYSBIYWxhbnQgYWZ0ZXIgbGFzdCBjb25zb25hbnQgYWxyZWFkeSAoZWcuIEthbm5hZGEpLCB3aGlsZSBpdFxuICAgIC8vIGRvZXMgaXQgdW5jb25kaXRpb25hbGx5IGluIG90aGVyIHNjcmlwdHMgKGVnLiBNYWxheWFsYW0pLiAgV2UgZG9uJ3RcbiAgICAvLyBjdXJyZW50bHkga25vdyBhYm91dCBvdGhlciBzY3JpcHRzLCBzbyB3ZSBzaW5nbGUgb3V0IE1hbGF5YWxhbSBmb3Igbm93LlxuICAgIC8vXG4gICAgLy8gS2FubmFkYSB0ZXN0IGNhc2U6XG4gICAgLy8gVSswQzlBLFUrMENDRCxVKzBDOUEsVSswQ0NEXG4gICAgLy8gV2l0aCBzb21lIHZlcnNpb25zIG9mIExvaGl0IEthbm5hZGEuXG4gICAgLy8gaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkxMThcbiAgICAvL1xuICAgIC8vIE1hbGF5YWxhbSB0ZXN0IGNhc2U6XG4gICAgLy8gVSswRDM4LFUrMEQ0RCxVKzBEMzEsVSswRDRELFUrMEQzMSxVKzBENERcbiAgICAvLyBXaXRoIGxvaGl0LXR0Zi0yMDEyMTEyMi9Mb2hpdC1NYWxheWFsYW0udHRmXG5cblxuICAgIGlmIChwbGFuLmlzT2xkU3BlYykge1xuICAgICAgdmFyIGRpc2FsbG93RG91YmxlSGFsYW50cyA9IHBsYW4udW5pY29kZVNjcmlwdCAhPT0gJ01hbGF5YWxhbSc7XG5cbiAgICAgIGZvciAodmFyIF9pOCA9IGJhc2UgKyAxOyBfaTggPCBlbmQ7IF9pOCsrKSB7XG4gICAgICAgIGlmIChnbHlwaHNbX2k4XS5zaGFwZXJJbmZvLmNhdGVnb3J5ID09PSBDQVRFR09SSUVTLkgpIHtcbiAgICAgICAgICB2YXIgX2ogPSB2b2lkIDA7XG5cbiAgICAgICAgICBmb3IgKF9qID0gZW5kIC0gMTsgX2ogPiBfaTg7IF9qLS0pIHtcbiAgICAgICAgICAgIGlmIChpc0NvbnNvbmFudChnbHlwaHNbX2pdKSB8fCBkaXNhbGxvd0RvdWJsZUhhbGFudHMgJiYgZ2x5cGhzW19qXS5zaGFwZXJJbmZvLmNhdGVnb3J5ID09PSBDQVRFR09SSUVTLkgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGdseXBoc1tfal0uc2hhcGVySW5mby5jYXRlZ29yeSAhPT0gQ0FURUdPUklFUy5IICYmIF9qID4gX2k4KSB7XG4gICAgICAgICAgICAvLyBNb3ZlIEhhbGFudCB0byBhZnRlciBsYXN0IGNvbnNvbmFudC5cbiAgICAgICAgICAgIHZhciB0ID0gZ2x5cGhzW19pOF07XG4gICAgICAgICAgICBnbHlwaHMuc3BsaWNlLmFwcGx5KGdseXBocywgW19pOCwgMF0uY29uY2F0KGdseXBocy5zcGxpY2UoX2k4ICsgMSwgX2ogLSBfaTgpKSk7XG4gICAgICAgICAgICBnbHlwaHNbX2pdID0gdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gQXR0YWNoIG1pc2MgbWFya3MgdG8gcHJldmlvdXMgY2hhciB0byBtb3ZlIHdpdGggdGhlbS5cblxuXG4gICAgdmFyIGxhc3RQb3MgPSBQT1NJVElPTlMuU3RhcnQ7XG5cbiAgICBmb3IgKHZhciBfaTkgPSBzdGFydDsgX2k5IDwgZW5kOyBfaTkrKykge1xuICAgICAgdmFyIF9pbmZvMyA9IGdseXBoc1tfaTldLnNoYXBlckluZm87XG5cbiAgICAgIGlmIChfaW5mbzMuY2F0ZWdvcnkgJiAoSk9JTkVSX0ZMQUdTIHwgQ0FURUdPUklFUy5OIHwgQ0FURUdPUklFUy5SUyB8IENBVEVHT1JJRVMuQ00gfCBIQUxBTlRfT1JfQ09FTkdfRkxBR1MgJiBfaW5mbzMuY2F0ZWdvcnkpKSB7XG4gICAgICAgIF9pbmZvMy5wb3NpdGlvbiA9IGxhc3RQb3M7XG5cbiAgICAgICAgaWYgKF9pbmZvMy5jYXRlZ29yeSA9PT0gQ0FURUdPUklFUy5IICYmIF9pbmZvMy5wb3NpdGlvbiA9PT0gUE9TSVRJT05TLlByZV9NKSB7XG4gICAgICAgICAgLy8gVW5pc2NyaWJlIGRvZXNuJ3QgbW92ZSB0aGUgSGFsYW50IHdpdGggTGVmdCBNYXRyYS5cbiAgICAgICAgICAvLyBURVNUOiBVKzA5MkIsVSswOTNGLFUrMDk0REVcbiAgICAgICAgICAvLyBXZSBmb2xsb3cuICBUaGlzIGlzIGltcG9ydGFudCBmb3IgdGhlIFNpbmhhbGFcbiAgICAgICAgICAvLyBVKzBEREEgc3BsaXQgbWF0cmEgc2luY2UgaXQgZGVjb21wb3NlcyB0byBVKzBERDksVSswRENBXG4gICAgICAgICAgLy8gd2hlcmUgVSswREQ5IGlzIGEgbGVmdCBtYXRyYSBhbmQgVSswRENBIGlzIHRoZSB2aXJhbWEuXG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBtb3ZlIHRoZSB2aXJhbWEgd2l0aCB0aGUgbGVmdCBtYXRyYS5cbiAgICAgICAgICAvLyBURVNUOiBVKzBEOUEsVSswRERBXG4gICAgICAgICAgZm9yICh2YXIgX2oyID0gX2k5OyBfajIgPiBzdGFydDsgX2oyLS0pIHtcbiAgICAgICAgICAgIGlmIChnbHlwaHNbX2oyIC0gMV0uc2hhcGVySW5mby5wb3NpdGlvbiAhPT0gUE9TSVRJT05TLlByZV9NKSB7XG4gICAgICAgICAgICAgIF9pbmZvMy5wb3NpdGlvbiA9IGdseXBoc1tfajIgLSAxXS5zaGFwZXJJbmZvLnBvc2l0aW9uO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoX2luZm8zLnBvc2l0aW9uICE9PSBQT1NJVElPTlMuU01WRCkge1xuICAgICAgICBsYXN0UG9zID0gX2luZm8zLnBvc2l0aW9uO1xuICAgICAgfVxuICAgIH0gLy8gRm9yIHBvc3QtYmFzZSBjb25zb25hbnRzIGxldCB0aGVtIG93biBhbnl0aGluZyBiZWZvcmUgdGhlbVxuICAgIC8vIHNpbmNlIHRoZSBsYXN0IGNvbnNvbmFudCBvciBtYXRyYS5cblxuXG4gICAgdmFyIGxhc3QgPSBiYXNlO1xuXG4gICAgZm9yICh2YXIgX2kxMCA9IGJhc2UgKyAxOyBfaTEwIDwgZW5kOyBfaTEwKyspIHtcbiAgICAgIGlmIChpc0NvbnNvbmFudChnbHlwaHNbX2kxMF0pKSB7XG4gICAgICAgIGZvciAodmFyIF9qMyA9IGxhc3QgKyAxOyBfajMgPCBfaTEwOyBfajMrKykge1xuICAgICAgICAgIGlmIChnbHlwaHNbX2ozXS5zaGFwZXJJbmZvLnBvc2l0aW9uIDwgUE9TSVRJT05TLlNNVkQpIHtcbiAgICAgICAgICAgIGdseXBoc1tfajNdLnNoYXBlckluZm8ucG9zaXRpb24gPSBnbHlwaHNbX2kxMF0uc2hhcGVySW5mby5wb3NpdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0ID0gX2kxMDtcbiAgICAgIH0gZWxzZSBpZiAoZ2x5cGhzW19pMTBdLnNoYXBlckluZm8uY2F0ZWdvcnkgPT09IENBVEVHT1JJRVMuTSkge1xuICAgICAgICBsYXN0ID0gX2kxMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYXJyID0gZ2x5cGhzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIGFyci5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5zaGFwZXJJbmZvLnBvc2l0aW9uIC0gYi5zaGFwZXJJbmZvLnBvc2l0aW9uO1xuICAgIH0pO1xuICAgIGdseXBocy5zcGxpY2UuYXBwbHkoZ2x5cGhzLCBbc3RhcnQsIGFyci5sZW5ndGhdLmNvbmNhdChhcnIpKTsgLy8gRmluZCBiYXNlIGFnYWluXG5cbiAgICBmb3IgKHZhciBfaTExID0gc3RhcnQ7IF9pMTEgPCBlbmQ7IF9pMTErKykge1xuICAgICAgaWYgKGdseXBoc1tfaTExXS5zaGFwZXJJbmZvLnBvc2l0aW9uID09PSBQT1NJVElPTlMuQmFzZV9DKSB7XG4gICAgICAgIGJhc2UgPSBfaTExO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IC8vIFNldHVwIGZlYXR1cmVzIG5vd1xuICAgIC8vIFJlcGhcblxuXG4gICAgZm9yICh2YXIgX2kxMiA9IHN0YXJ0OyBfaTEyIDwgZW5kICYmIGdseXBoc1tfaTEyXS5zaGFwZXJJbmZvLnBvc2l0aW9uID09PSBQT1NJVElPTlMuUmFfVG9fQmVjb21lX1JlcGg7IF9pMTIrKykge1xuICAgICAgZ2x5cGhzW19pMTJdLmZlYXR1cmVzLnJwaGYgPSB0cnVlO1xuICAgIH0gLy8gUHJlLWJhc2VcblxuXG4gICAgdmFyIGJsd2YgPSAhcGxhbi5pc09sZFNwZWMgJiYgaW5kaWNDb25maWcuYmx3Zk1vZGUgPT09ICdQcmVfQW5kX1Bvc3QnO1xuXG4gICAgZm9yICh2YXIgX2kxMyA9IHN0YXJ0OyBfaTEzIDwgYmFzZTsgX2kxMysrKSB7XG4gICAgICBnbHlwaHNbX2kxM10uZmVhdHVyZXMuaGFsZiA9IHRydWU7XG5cbiAgICAgIGlmIChibHdmKSB7XG4gICAgICAgIGdseXBoc1tfaTEzXS5mZWF0dXJlcy5ibHdmID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IC8vIFBvc3QtYmFzZVxuXG5cbiAgICBmb3IgKHZhciBfaTE0ID0gYmFzZSArIDE7IF9pMTQgPCBlbmQ7IF9pMTQrKykge1xuICAgICAgZ2x5cGhzW19pMTRdLmZlYXR1cmVzLmFidmYgPSB0cnVlO1xuICAgICAgZ2x5cGhzW19pMTRdLmZlYXR1cmVzLnBzdGYgPSB0cnVlO1xuICAgICAgZ2x5cGhzW19pMTRdLmZlYXR1cmVzLmJsd2YgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwbGFuLmlzT2xkU3BlYyAmJiBwbGFuLnVuaWNvZGVTY3JpcHQgPT09ICdEZXZhbmFnYXJpJykge1xuICAgICAgLy8gT2xkLXNwZWMgZXllLWxhc2ggUmEgbmVlZHMgc3BlY2lhbCBoYW5kbGluZy4gIEZyb20gdGhlXG4gICAgICAvLyBzcGVjOlxuICAgICAgLy9cbiAgICAgIC8vIFwiVGhlIGZlYXR1cmUgJ2JlbG93LWJhc2UgZm9ybScgaXMgYXBwbGllZCB0byBjb25zb25hbnRzXG4gICAgICAvLyBoYXZpbmcgYmVsb3ctYmFzZSBmb3JtcyBhbmQgZm9sbG93aW5nIHRoZSBiYXNlIGNvbnNvbmFudC5cbiAgICAgIC8vIFRoZSBleGNlcHRpb24gaXMgdmF0dHUsIHdoaWNoIG1heSBhcHBlYXIgYmVsb3cgaGFsZiBmb3Jtc1xuICAgICAgLy8gYXMgd2VsbCBhcyBiZWxvdyB0aGUgYmFzZSBnbHlwaC4gVGhlIGZlYXR1cmUgJ2JlbG93LWJhc2VcbiAgICAgIC8vIGZvcm0nIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgc3VjaCBvY2N1cnJlbmNlcyBvZiBSYSBhcyB3ZWxsLlwiXG4gICAgICAvL1xuICAgICAgLy8gVGVzdCBjYXNlOiBVKzA5MjQsVSswOTRELFUrMDkzMCxVKzA5NGQsVSswOTE1XG4gICAgICAvLyB3aXRoIFNhbnNrcml0IDIwMDMgZm9udC5cbiAgICAgIC8vXG4gICAgICAvLyBIb3dldmVyLCBub3RlIHRoYXQgUmEsSGFsYW50LFpXSiBpcyB0aGUgY29ycmVjdCB3YXkgdG9cbiAgICAgIC8vIHJlcXVlc3QgZXllbGFzaCBmb3JtIG9mIFJhLCBzbyB3ZSB3b3VsZGJuJ3QgaW5oaWJpdCBpdFxuICAgICAgLy8gaW4gdGhhdCBzZXF1ZW5jZS5cbiAgICAgIC8vXG4gICAgICAvLyBUZXN0IGNhc2U6IFUrMDkyNCxVKzA5NEQsVSswOTMwLFUrMDk0ZCxVKzIwMEQsVSswOTE1XG4gICAgICBmb3IgKHZhciBfaTE1ID0gc3RhcnQ7IF9pMTUgKyAxIDwgYmFzZTsgX2kxNSsrKSB7XG4gICAgICAgIGlmIChnbHlwaHNbX2kxNV0uc2hhcGVySW5mby5jYXRlZ29yeSA9PT0gQ0FURUdPUklFUy5SYSAmJiBnbHlwaHNbX2kxNSArIDFdLnNoYXBlckluZm8uY2F0ZWdvcnkgPT09IENBVEVHT1JJRVMuSCAmJiAoX2kxNSArIDEgPT09IGJhc2UgfHwgZ2x5cGhzW19pMTUgKyAyXS5zaGFwZXJJbmZvLmNhdGVnb3J5ID09PSBDQVRFR09SSUVTLlpXSikpIHtcbiAgICAgICAgICBnbHlwaHNbX2kxNV0uZmVhdHVyZXMuYmx3ZiA9IHRydWU7XG4gICAgICAgICAgZ2x5cGhzW19pMTUgKyAxXS5mZWF0dXJlcy5ibHdmID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmVmTGVuID0gMjtcblxuICAgIGlmIChmZWF0dXJlcy5wcmVmICYmIGJhc2UgKyBwcmVmTGVuIDwgZW5kKSB7XG4gICAgICAvLyBGaW5kIGEgSGFsYW50LFJhIHNlcXVlbmNlIGFuZCBtYXJrIGl0IGZvciBwcmUtYmFzZSByZW9yZGVyaW5nIHByb2Nlc3NpbmcuXG4gICAgICBmb3IgKHZhciBfaTE2ID0gYmFzZSArIDE7IF9pMTYgKyBwcmVmTGVuIC0gMSA8IGVuZDsgX2kxNisrKSB7XG4gICAgICAgIHZhciBfZzIgPSBbZ2x5cGhzW19pMTZdLmNvcHkoKSwgZ2x5cGhzW19pMTYgKyAxXS5jb3B5KCldO1xuXG4gICAgICAgIGlmICh3b3VsZFN1YnN0aXR1dGUoX2cyLCAncHJlZicpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2o0ID0gMDsgX2o0IDwgcHJlZkxlbjsgX2o0KyspIHtcbiAgICAgICAgICAgIGdseXBoc1tfaTE2KytdLmZlYXR1cmVzLnByZWYgPSB0cnVlO1xuICAgICAgICAgIH0gLy8gTWFyayB0aGUgc3Vic2VxdWVudCBzdHVmZiB3aXRoICdjZmFyJy4gIFVzZWQgaW4gS2htZXIuXG4gICAgICAgICAgLy8gUmVhZCB0aGUgZmVhdHVyZSBzcGVjLlxuICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGRpc3Rpbmd1aXNoaW5nIHRoZSBmb2xsb3dpbmcgY2FzZXMgd2l0aCBNUyBLaG1lciBmb250czpcbiAgICAgICAgICAvLyBVKzE3ODQsVSsxN0QyLFUrMTc5QSxVKzE3RDIsVSsxNzgyXG4gICAgICAgICAgLy8gVSsxNzg0LFUrMTdEMixVKzE3ODIsVSsxN0QyLFUrMTc5QVxuXG5cbiAgICAgICAgICBpZiAoZmVhdHVyZXMuY2Zhcikge1xuICAgICAgICAgICAgZm9yICg7IF9pMTYgPCBlbmQ7IF9pMTYrKykge1xuICAgICAgICAgICAgICBnbHlwaHNbX2kxNl0uZmVhdHVyZXMuY2ZhciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEFwcGx5IFpXSi9aV05KIGVmZmVjdHNcblxuXG4gICAgZm9yICh2YXIgX2kxNyA9IHN0YXJ0ICsgMTsgX2kxNyA8IGVuZDsgX2kxNysrKSB7XG4gICAgICBpZiAoaXNKb2luZXIoZ2x5cGhzW19pMTddKSkge1xuICAgICAgICB2YXIgbm9uSm9pbmVyID0gZ2x5cGhzW19pMTddLnNoYXBlckluZm8uY2F0ZWdvcnkgPT09IENBVEVHT1JJRVMuWldOSjtcbiAgICAgICAgdmFyIF9qNSA9IF9pMTc7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIF9qNS0tOyAvLyBaV0ovWldOSiBzaG91bGQgZGlzYWJsZSBDSkNULiAgVGhleSBkbyB0aGF0IGJ5IHNpbXBseVxuICAgICAgICAgIC8vIGJlaW5nIHRoZXJlLCBzaW5jZSB3ZSBkb24ndCBza2lwIHRoZW0gZm9yIHRoZSBDSkNUXG4gICAgICAgICAgLy8gZmVhdHVyZSAoaWUuIEZfTUFOVUFMX1pXSilcbiAgICAgICAgICAvLyBBIFpXTkogZGlzYWJsZXMgSEFMRi5cblxuICAgICAgICAgIGlmIChub25Kb2luZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBnbHlwaHNbX2o1XS5mZWF0dXJlcy5oYWxmO1xuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoX2o1ID4gc3RhcnQgJiYgIWlzQ29uc29uYW50KGdseXBoc1tfajVdKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmFsUmVvcmRlcmluZyhmb250LCBnbHlwaHMsIHBsYW4pIHtcbiAgdmFyIGluZGljQ29uZmlnID0gcGxhbi5pbmRpY0NvbmZpZztcbiAgdmFyIGZlYXR1cmVzID0gZm9udC5fbGF5b3V0RW5naW5lLmVuZ2luZS5HU1VCUHJvY2Vzc29yLmZlYXR1cmVzO1xuXG4gIGZvciAodmFyIHN0YXJ0ID0gMCwgZW5kID0gbmV4dFN5bGxhYmxlKGdseXBocywgMCk7IHN0YXJ0IDwgZ2x5cGhzLmxlbmd0aDsgc3RhcnQgPSBlbmQsIGVuZCA9IG5leHRTeWxsYWJsZShnbHlwaHMsIHN0YXJ0KSkge1xuICAgIC8vIDQuIEZpbmFsIHJlb3JkZXJpbmc6XG4gICAgLy9cbiAgICAvLyBBZnRlciB0aGUgbG9jYWxpemVkIGZvcm1zIGFuZCBiYXNpYyBzaGFwaW5nIGZvcm1zIEdTVUIgZmVhdHVyZXMgaGF2ZSBiZWVuXG4gICAgLy8gYXBwbGllZCAoc2VlIGJlbG93KSwgdGhlIHNoYXBpbmcgZW5naW5lIHBlcmZvcm1zIHNvbWUgZmluYWwgZ2x5cGhcbiAgICAvLyByZW9yZGVyaW5nIGJlZm9yZSBhcHBseWluZyBhbGwgdGhlIHJlbWFpbmluZyBmb250IGZlYXR1cmVzIHRvIHRoZSBlbnRpcmVcbiAgICAvLyBjbHVzdGVyLlxuICAgIHZhciB0cnlQcmVmID0gISFmZWF0dXJlcy5wcmVmOyAvLyBGaW5kIGJhc2UgYWdhaW5cblxuICAgIHZhciBiYXNlID0gc3RhcnQ7XG5cbiAgICBmb3IgKDsgYmFzZSA8IGVuZDsgYmFzZSsrKSB7XG4gICAgICBpZiAoZ2x5cGhzW2Jhc2VdLnNoYXBlckluZm8ucG9zaXRpb24gPj0gUE9TSVRJT05TLkJhc2VfQykge1xuICAgICAgICBpZiAodHJ5UHJlZiAmJiBiYXNlICsgMSA8IGVuZCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSBiYXNlICsgMTsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZ2x5cGhzW2ldLmZlYXR1cmVzLnByZWYpIHtcbiAgICAgICAgICAgICAgaWYgKCEoZ2x5cGhzW2ldLnN1YnN0aXR1dGVkICYmIGdseXBoc1tpXS5pc0xpZ2F0ZWQgJiYgIWdseXBoc1tpXS5pc011bHRpcGxpZWQpKSB7XG4gICAgICAgICAgICAgICAgLy8gT2ssIHRoaXMgd2FzIGEgJ3ByZWYnIGNhbmRpZGF0ZSBidXQgZGlkbid0IGZvcm0gYW55LlxuICAgICAgICAgICAgICAgIC8vIEJhc2UgaXMgYXJvdW5kIGhlcmUuLi5cbiAgICAgICAgICAgICAgICBiYXNlID0gaTtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlIDwgZW5kICYmIGlzSGFsYW50T3JDb2VuZyhnbHlwaHNbYmFzZV0pKSB7XG4gICAgICAgICAgICAgICAgICBiYXNlKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2x5cGhzW2Jhc2VdLnNoYXBlckluZm8ucG9zaXRpb24gPSBQT1NJVElPTlMuQkFTRV9DO1xuICAgICAgICAgICAgICAgIHRyeVByZWYgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBGb3IgTWFsYXlhbGFtLCBza2lwIG92ZXIgdW5mb3JtZWQgYmVsb3ctIChidXQgTk9UIHBvc3QtKSBmb3Jtcy5cblxuXG4gICAgICAgIGlmIChwbGFuLnVuaWNvZGVTY3JpcHQgPT09ICdNYWxheWFsYW0nKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kxOCA9IGJhc2UgKyAxOyBfaTE4IDwgZW5kOyBfaTE4KyspIHtcbiAgICAgICAgICAgIHdoaWxlIChfaTE4IDwgZW5kICYmIGlzSm9pbmVyKGdseXBoc1tfaTE4XSkpIHtcbiAgICAgICAgICAgICAgX2kxOCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX2kxOCA9PT0gZW5kIHx8ICFpc0hhbGFudE9yQ29lbmcoZ2x5cGhzW19pMThdKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2kxOCsrOyAvLyBTa2lwIGhhbGFudC5cblxuICAgICAgICAgICAgd2hpbGUgKF9pMTggPCBlbmQgJiYgaXNKb2luZXIoZ2x5cGhzW19pMThdKSkge1xuICAgICAgICAgICAgICBfaTE4Kys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfaTE4IDwgZW5kICYmIGlzQ29uc29uYW50KGdseXBoc1tfaTE4XSkgJiYgZ2x5cGhzW19pMThdLnNoYXBlckluZm8ucG9zaXRpb24gPT09IFBPU0lUSU9OUy5CZWxvd19DKSB7XG4gICAgICAgICAgICAgIGJhc2UgPSBfaTE4O1xuICAgICAgICAgICAgICBnbHlwaHNbYmFzZV0uc2hhcGVySW5mby5wb3NpdGlvbiA9IFBPU0lUSU9OUy5CYXNlX0M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0IDwgYmFzZSAmJiBnbHlwaHNbYmFzZV0uc2hhcGVySW5mby5wb3NpdGlvbiA+IFBPU0lUSU9OUy5CYXNlX0MpIHtcbiAgICAgICAgICBiYXNlLS07XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmFzZSA9PT0gZW5kICYmIHN0YXJ0IDwgYmFzZSAmJiBnbHlwaHNbYmFzZSAtIDFdLnNoYXBlckluZm8uY2F0ZWdvcnkgPT09IENBVEVHT1JJRVMuWldKKSB7XG4gICAgICBiYXNlLS07XG4gICAgfVxuXG4gICAgaWYgKGJhc2UgPCBlbmQpIHtcbiAgICAgIHdoaWxlIChzdGFydCA8IGJhc2UgJiYgZ2x5cGhzW2Jhc2VdLnNoYXBlckluZm8uY2F0ZWdvcnkgJiAoQ0FURUdPUklFUy5OIHwgSEFMQU5UX09SX0NPRU5HX0ZMQUdTKSkge1xuICAgICAgICBiYXNlLS07XG4gICAgICB9XG4gICAgfSAvLyBvIFJlb3JkZXIgbWF0cmFzOlxuICAgIC8vXG4gICAgLy8gSWYgYSBwcmUtYmFzZSBtYXRyYSBjaGFyYWN0ZXIgaGFkIGJlZW4gcmVvcmRlcmVkIGJlZm9yZSBhcHBseWluZyBiYXNpY1xuICAgIC8vIGZlYXR1cmVzLCB0aGUgZ2x5cGggY2FuIGJlIG1vdmVkIGNsb3NlciB0byB0aGUgbWFpbiBjb25zb25hbnQgYmFzZWQgb25cbiAgICAvLyB3aGV0aGVyIGhhbGYtZm9ybXMgaGFkIGJlZW4gZm9ybWVkLiBBY3R1YWwgcG9zaXRpb24gZm9yIHRoZSBtYXRyYSBpc1xuICAgIC8vIGRlZmluZWQgYXMg4oCcYWZ0ZXIgbGFzdCBzdGFuZGFsb25lIGhhbGFudCBnbHlwaCwgYWZ0ZXIgaW5pdGlhbCBtYXRyYVxuICAgIC8vIHBvc2l0aW9uIGFuZCBiZWZvcmUgdGhlIG1haW4gY29uc29uYW504oCdLiBJZiBaV0ogb3IgWldOSiBmb2xsb3cgdGhpc1xuICAgIC8vIGhhbGFudCwgcG9zaXRpb24gaXMgbW92ZWQgYWZ0ZXIgaXQuXG4gICAgLy9cblxuXG4gICAgaWYgKHN0YXJ0ICsgMSA8IGVuZCAmJiBzdGFydCA8IGJhc2UpIHtcbiAgICAgIC8vIE90aGVyd2lzZSB0aGVyZSBjYW4ndCBiZSBhbnkgcHJlLWJhc2UgbWF0cmEgY2hhcmFjdGVycy5cbiAgICAgIC8vIElmIHdlIGxvc3QgdHJhY2sgb2YgYmFzZSwgYWxhcywgcG9zaXRpb24gYmVmb3JlIGxhc3QgdGhpbmd5LlxuICAgICAgdmFyIG5ld1BvcyA9IGJhc2UgPT09IGVuZCA/IGJhc2UgLSAyIDogYmFzZSAtIDE7IC8vIE1hbGF5YWxhbSAvIFRhbWlsIGRvIG5vdCBoYXZlIFwiaGFsZlwiIGZvcm1zIG9yIGV4cGxpY2l0IHZpcmFtYSBmb3Jtcy5cbiAgICAgIC8vIFRoZSBnbHlwaHMgZm9ybWVkIGJ5ICdoYWxmJyBhcmUgQ2hpbGx1cyBvciBsaWdhdGVkIGV4cGxpY2l0IHZpcmFtYXMuXG4gICAgICAvLyBXZSB3YW50IHRvIHBvc2l0aW9uIG1hdHJhIGFmdGVyIHRoZW0uXG5cbiAgICAgIGlmIChwbGFuLnVuaWNvZGVTY3JpcHQgIT09ICdNYWxheWFsYW0nICYmIHBsYW4udW5pY29kZVNjcmlwdCAhPT0gJ1RhbWlsJykge1xuICAgICAgICB3aGlsZSAobmV3UG9zID4gc3RhcnQgJiYgIShnbHlwaHNbbmV3UG9zXS5zaGFwZXJJbmZvLmNhdGVnb3J5ICYgKENBVEVHT1JJRVMuTSB8IEhBTEFOVF9PUl9DT0VOR19GTEFHUykpKSB7XG4gICAgICAgICAgbmV3UG9zLS07XG4gICAgICAgIH0gLy8gSWYgd2UgZm91bmQgbm8gSGFsYW50IHdlIGFyZSBkb25lLlxuICAgICAgICAvLyBPdGhlcndpc2Ugb25seSBwcm9jZWVkIGlmIHRoZSBIYWxhbnQgZG9lc1xuICAgICAgICAvLyBub3QgYmVsb25nIHRvIHRoZSBNYXRyYSBpdHNlbGYhXG5cblxuICAgICAgICBpZiAoaXNIYWxhbnRPckNvZW5nKGdseXBoc1tuZXdQb3NdKSAmJiBnbHlwaHNbbmV3UG9zXS5zaGFwZXJJbmZvLnBvc2l0aW9uICE9PSBQT1NJVElPTlMuUHJlX00pIHtcbiAgICAgICAgICAvLyBJZiBaV0ogb3IgWldOSiBmb2xsb3cgdGhpcyBoYWxhbnQsIHBvc2l0aW9uIGlzIG1vdmVkIGFmdGVyIGl0LlxuICAgICAgICAgIGlmIChuZXdQb3MgKyAxIDwgZW5kICYmIGlzSm9pbmVyKGdseXBoc1tuZXdQb3MgKyAxXSkpIHtcbiAgICAgICAgICAgIG5ld1BvcysrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdQb3MgPSBzdGFydDsgLy8gTm8gbW92ZS5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnQgPCBuZXdQb3MgJiYgZ2x5cGhzW25ld1Bvc10uc2hhcGVySW5mby5wb3NpdGlvbiAhPT0gUE9TSVRJT05TLlByZV9NKSB7XG4gICAgICAgIC8vIE5vdyBnbyBzZWUgaWYgdGhlcmUncyBhY3R1YWxseSBhbnkgbWF0cmFzLi4uXG4gICAgICAgIGZvciAodmFyIF9pMTkgPSBuZXdQb3M7IF9pMTkgPiBzdGFydDsgX2kxOS0tKSB7XG4gICAgICAgICAgaWYgKGdseXBoc1tfaTE5IC0gMV0uc2hhcGVySW5mby5wb3NpdGlvbiA9PT0gUE9TSVRJT05TLlByZV9NKSB7XG4gICAgICAgICAgICB2YXIgb2xkUG9zID0gX2kxOSAtIDE7XG5cbiAgICAgICAgICAgIGlmIChvbGRQb3MgPCBiYXNlICYmIGJhc2UgPD0gbmV3UG9zKSB7XG4gICAgICAgICAgICAgIC8vIFNob3VsZG4ndCBhY3R1YWxseSBoYXBwZW4uXG4gICAgICAgICAgICAgIGJhc2UtLTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHRtcCA9IGdseXBoc1tvbGRQb3NdO1xuICAgICAgICAgICAgZ2x5cGhzLnNwbGljZS5hcHBseShnbHlwaHMsIFtvbGRQb3MsIDBdLmNvbmNhdChnbHlwaHMuc3BsaWNlKG9sZFBvcyArIDEsIG5ld1BvcyAtIG9sZFBvcykpKTtcbiAgICAgICAgICAgIGdseXBoc1tuZXdQb3NdID0gdG1wO1xuICAgICAgICAgICAgbmV3UG9zLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBvIFJlb3JkZXIgcmVwaDpcbiAgICAvL1xuICAgIC8vIFJlcGjigJlzIG9yaWdpbmFsIHBvc2l0aW9uIGlzIGFsd2F5cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzeWxsYWJsZSxcbiAgICAvLyAoaS5lLiBpdCBpcyBub3QgcmVvcmRlcmVkIGF0IHRoZSBjaGFyYWN0ZXIgcmVvcmRlcmluZyBzdGFnZSkuIEhvd2V2ZXIsXG4gICAgLy8gaXQgd2lsbCBiZSByZW9yZGVyZWQgYWNjb3JkaW5nIHRvIHRoZSBiYXNpYy1mb3JtcyBzaGFwaW5nIHJlc3VsdHMuXG4gICAgLy8gUG9zc2libGUgcG9zaXRpb25zIGZvciByZXBoLCBkZXBlbmRpbmcgb24gdGhlIHNjcmlwdCwgYXJlOyBhZnRlciBtYWluLFxuICAgIC8vIGJlZm9yZSBwb3N0LWJhc2UgY29uc29uYW50IGZvcm1zLCBhbmQgYWZ0ZXIgcG9zdC1iYXNlIGNvbnNvbmFudCBmb3Jtcy5cbiAgICAvLyBUd28gY2FzZXM6XG4gICAgLy9cbiAgICAvLyAtIElmIHJlcGhhIGlzIGVuY29kZWQgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIChSYSxIIG9yIFJhLEgsWldKKSwgdGhlblxuICAgIC8vICAgd2Ugc2hvdWxkIG9ubHkgbW92ZSBpdCBpZiB0aGUgc2VxdWVuY2UgbGlnYXRlZCB0byB0aGUgcmVwaGEgZm9ybS5cbiAgICAvL1xuICAgIC8vIC0gSWYgcmVwaGEgaXMgZW5jb2RlZCBzZXBhcmF0ZWx5IGFuZCBpbiB0aGUgbG9naWNhbCBwb3NpdGlvbiwgd2Ugc2hvdWxkIG9ubHlcbiAgICAvLyAgIG1vdmUgaXQgaWYgaXQgZGlkIE5PVCBsaWdhdGUuICBJZiBpdCBsaWdhdGVkLCBpdCdzIHByb2JhYmx5IHRoZSBmb250IHRyeWluZ1xuICAgIC8vICAgdG8gbWFrZSBpdCB3b3JrIHdpdGhvdXQgdGhlIHJlb3JkZXJpbmcuXG5cblxuICAgIGlmIChzdGFydCArIDEgPCBlbmQgJiYgZ2x5cGhzW3N0YXJ0XS5zaGFwZXJJbmZvLnBvc2l0aW9uID09PSBQT1NJVElPTlMuUmFfVG9fQmVjb21lX1JlcGggJiYgZ2x5cGhzW3N0YXJ0XS5zaGFwZXJJbmZvLmNhdGVnb3J5ID09PSBDQVRFR09SSUVTLlJlcGhhICE9PSAoZ2x5cGhzW3N0YXJ0XS5pc0xpZ2F0ZWQgJiYgIWdseXBoc1tzdGFydF0uaXNNdWx0aXBsaWVkKSkge1xuICAgICAgdmFyIG5ld1JlcGhQb3MgPSB2b2lkIDA7XG4gICAgICB2YXIgcmVwaFBvcyA9IGluZGljQ29uZmlnLnJlcGhQb3M7XG4gICAgICB2YXIgZm91bmQgPSBmYWxzZTsgLy8gMS4gSWYgcmVwaCBzaG91bGQgYmUgcG9zaXRpb25lZCBhZnRlciBwb3N0LWJhc2UgY29uc29uYW50IGZvcm1zLFxuICAgICAgLy8gICAgcHJvY2VlZCB0byBzdGVwIDUuXG5cbiAgICAgIGlmIChyZXBoUG9zICE9PSBQT1NJVElPTlMuQWZ0ZXJfUG9zdCkge1xuICAgICAgICAvLyAgMi4gSWYgdGhlIHJlcGggcmVwb3NpdGlvbmluZyBjbGFzcyBpcyBub3QgYWZ0ZXIgcG9zdC1iYXNlOiB0YXJnZXRcbiAgICAgICAgLy8gICAgIHBvc2l0aW9uIGlzIGFmdGVyIHRoZSBmaXJzdCBleHBsaWNpdCBoYWxhbnQgZ2x5cGggYmV0d2VlbiB0aGVcbiAgICAgICAgLy8gICAgIGZpcnN0IHBvc3QtcmVwaCBjb25zb25hbnQgYW5kIGxhc3QgbWFpbiBjb25zb25hbnQuIElmIFpXSiBvciBaV05KXG4gICAgICAgIC8vICAgICBhcmUgZm9sbG93aW5nIHRoaXMgaGFsYW50LCBwb3NpdGlvbiBpcyBtb3ZlZCBhZnRlciBpdC4gSWYgc3VjaFxuICAgICAgICAvLyAgICAgcG9zaXRpb24gaXMgZm91bmQsIHRoaXMgaXMgdGhlIHRhcmdldCBwb3NpdGlvbi4gT3RoZXJ3aXNlLFxuICAgICAgICAvLyAgICAgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgTm90ZTogaW4gb2xkLWltcGxlbWVudGF0aW9uIGZvbnRzLCB3aGVyZSBjbGFzc2lmaWNhdGlvbnMgd2VyZVxuICAgICAgICAvLyAgICAgZml4ZWQgaW4gc2hhcGluZyBlbmdpbmUsIHRoZXJlIHdhcyBubyBjYXNlIHdoZXJlIHJlcGggcG9zaXRpb25cbiAgICAgICAgLy8gICAgIHdpbGwgYmUgZm91bmQgb24gdGhpcyBzdGVwLlxuICAgICAgICBuZXdSZXBoUG9zID0gc3RhcnQgKyAxO1xuXG4gICAgICAgIHdoaWxlIChuZXdSZXBoUG9zIDwgYmFzZSAmJiAhaXNIYWxhbnRPckNvZW5nKGdseXBoc1tuZXdSZXBoUG9zXSkpIHtcbiAgICAgICAgICBuZXdSZXBoUG9zKys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3UmVwaFBvcyA8IGJhc2UgJiYgaXNIYWxhbnRPckNvZW5nKGdseXBoc1tuZXdSZXBoUG9zXSkpIHtcbiAgICAgICAgICAvLyAtPklmIFpXSiBvciBaV05KIGFyZSBmb2xsb3dpbmcgdGhpcyBoYWxhbnQsIHBvc2l0aW9uIGlzIG1vdmVkIGFmdGVyIGl0LlxuICAgICAgICAgIGlmIChuZXdSZXBoUG9zICsgMSA8IGJhc2UgJiYgaXNKb2luZXIoZ2x5cGhzW25ld1JlcGhQb3MgKyAxXSkpIHtcbiAgICAgICAgICAgIG5ld1JlcGhQb3MrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIH0gLy8gMy4gSWYgcmVwaCBzaG91bGQgYmUgcmVwb3NpdGlvbmVkIGFmdGVyIHRoZSBtYWluIGNvbnNvbmFudDogZmluZCB0aGVcbiAgICAgICAgLy8gICAgZmlyc3QgY29uc29uYW50IG5vdCBsaWdhdGVkIHdpdGggbWFpbiwgb3IgZmluZCB0aGUgZmlyc3RcbiAgICAgICAgLy8gICAgY29uc29uYW50IHRoYXQgaXMgbm90IGEgcG90ZW50aWFsIHByZS1iYXNlIHJlb3JkZXJpbmcgUmEuXG5cblxuICAgICAgICBpZiAoIWZvdW5kICYmIHJlcGhQb3MgPT09IFBPU0lUSU9OUy5BZnRlcl9NYWluKSB7XG4gICAgICAgICAgbmV3UmVwaFBvcyA9IGJhc2U7XG5cbiAgICAgICAgICB3aGlsZSAobmV3UmVwaFBvcyArIDEgPCBlbmQgJiYgZ2x5cGhzW25ld1JlcGhQb3MgKyAxXS5zaGFwZXJJbmZvLnBvc2l0aW9uIDw9IFBPU0lUSU9OUy5BZnRlcl9NYWluKSB7XG4gICAgICAgICAgICBuZXdSZXBoUG9zKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm91bmQgPSBuZXdSZXBoUG9zIDwgZW5kO1xuICAgICAgICB9IC8vIDQuIElmIHJlcGggc2hvdWxkIGJlIHBvc2l0aW9uZWQgYmVmb3JlIHBvc3QtYmFzZSBjb25zb25hbnQsIGZpbmRcbiAgICAgICAgLy8gICAgZmlyc3QgcG9zdC1iYXNlIGNsYXNzaWZpZWQgY29uc29uYW50IG5vdCBsaWdhdGVkIHdpdGggbWFpbi4gSWYgbm9cbiAgICAgICAgLy8gICAgY29uc29uYW50IGlzIGZvdW5kLCB0aGUgdGFyZ2V0IHBvc2l0aW9uIHNob3VsZCBiZSBiZWZvcmUgdGhlXG4gICAgICAgIC8vICAgIGZpcnN0IG1hdHJhLCBzeWxsYWJsZSBtb2RpZmllciBzaWduIG9yIHZlZGljIHNpZ24uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgaXMgb3VyIHRha2Ugb24gd2hhdCBzdGVwIDQgaXMgdHJ5aW5nIHRvIHNheSAoYW5kIGZhaWxpbmcsIEJBRExZKS5cblxuXG4gICAgICAgIGlmICghZm91bmQgJiYgcmVwaFBvcyA9PT0gUE9TSVRJT05TLkFmdGVyX1N1Yikge1xuICAgICAgICAgIG5ld1JlcGhQb3MgPSBiYXNlO1xuXG4gICAgICAgICAgd2hpbGUgKG5ld1JlcGhQb3MgKyAxIDwgZW5kICYmICEoZ2x5cGhzW25ld1JlcGhQb3MgKyAxXS5zaGFwZXJJbmZvLnBvc2l0aW9uICYgKFBPU0lUSU9OUy5Qb3N0X0MgfCBQT1NJVElPTlMuQWZ0ZXJfUG9zdCB8IFBPU0lUSU9OUy5TTVZEKSkpIHtcbiAgICAgICAgICAgIG5ld1JlcGhQb3MrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3VuZCA9IG5ld1JlcGhQb3MgPCBlbmQ7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gIDUuIElmIG5vIGNvbnNvbmFudCBpcyBmb3VuZCBpbiBzdGVwcyAzIG9yIDQsIG1vdmUgcmVwaCB0byBhIHBvc2l0aW9uXG4gICAgICAvLyAgICAgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBmaXJzdCBwb3N0LWJhc2UgbWF0cmEsIHN5bGxhYmxlIG1vZGlmaWVyXG4gICAgICAvLyAgICAgc2lnbiBvciB2ZWRpYyBzaWduIHRoYXQgaGFzIGEgcmVvcmRlcmluZyBjbGFzcyBhZnRlciB0aGUgaW50ZW5kZWRcbiAgICAgIC8vICAgICByZXBoIHBvc2l0aW9uLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHJlb3JkZXJpbmcgcG9zaXRpb24gZm9yIHJlcGhcbiAgICAgIC8vICAgICBpcyBwb3N0LW1haW4sIGl0IHdpbGwgc2tpcCBhYm92ZS1iYXNlIG1hdHJhcyB0aGF0IGFsc28gaGF2ZSBhXG4gICAgICAvLyAgICAgcG9zdC1tYWluIHBvc2l0aW9uLlxuXG5cbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgLy8gQ29waWVkIGZyb20gc3RlcCAyLlxuICAgICAgICBuZXdSZXBoUG9zID0gc3RhcnQgKyAxO1xuXG4gICAgICAgIHdoaWxlIChuZXdSZXBoUG9zIDwgYmFzZSAmJiAhaXNIYWxhbnRPckNvZW5nKGdseXBoc1tuZXdSZXBoUG9zXSkpIHtcbiAgICAgICAgICBuZXdSZXBoUG9zKys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3UmVwaFBvcyA8IGJhc2UgJiYgaXNIYWxhbnRPckNvZW5nKGdseXBoc1tuZXdSZXBoUG9zXSkpIHtcbiAgICAgICAgICAvLyAtPklmIFpXSiBvciBaV05KIGFyZSBmb2xsb3dpbmcgdGhpcyBoYWxhbnQsIHBvc2l0aW9uIGlzIG1vdmVkIGFmdGVyIGl0LlxuICAgICAgICAgIGlmIChuZXdSZXBoUG9zICsgMSA8IGJhc2UgJiYgaXNKb2luZXIoZ2x5cGhzW25ld1JlcGhQb3MgKyAxXSkpIHtcbiAgICAgICAgICAgIG5ld1JlcGhQb3MrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gNi4gT3RoZXJ3aXNlLCByZW9yZGVyIHJlcGggdG8gdGhlIGVuZCBvZiB0aGUgc3lsbGFibGUuXG5cblxuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICBuZXdSZXBoUG9zID0gZW5kIC0gMTtcblxuICAgICAgICB3aGlsZSAobmV3UmVwaFBvcyA+IHN0YXJ0ICYmIGdseXBoc1tuZXdSZXBoUG9zXS5zaGFwZXJJbmZvLnBvc2l0aW9uID09PSBQT1NJVElPTlMuU01WRCkge1xuICAgICAgICAgIG5ld1JlcGhQb3MtLTtcbiAgICAgICAgfSAvLyBJZiB0aGUgUmVwaCBpcyB0byBiZSBlbmRpbmcgdXAgYWZ0ZXIgYSBNYXRyYSxIYWxhbnQgc2VxdWVuY2UsXG4gICAgICAgIC8vIHBvc2l0aW9uIGl0IGJlZm9yZSB0aGF0IEhhbGFudCBzbyBpdCBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgTWF0cmEuXG4gICAgICAgIC8vIEhvd2V2ZXIsIGlmIGl0J3MgYSBwbGFpbiBDb25zb25hbnQsSGFsYW50IHdlIHNob3VsZG4ndCBkbyB0aGF0LlxuICAgICAgICAvLyBVbmlzY3JpYmUgZG9lc24ndCBkbyB0aGlzLlxuICAgICAgICAvLyBURVNUOiBVKzA5MzAsVSswOTRELFUrMDkxNSxVKzA5NEIsVSswOTREXG5cblxuICAgICAgICBpZiAoaXNIYWxhbnRPckNvZW5nKGdseXBoc1tuZXdSZXBoUG9zXSkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaTIwID0gYmFzZSArIDE7IF9pMjAgPCBuZXdSZXBoUG9zOyBfaTIwKyspIHtcbiAgICAgICAgICAgIGlmIChnbHlwaHNbX2kyMF0uc2hhcGVySW5mby5jYXRlZ29yeSA9PT0gQ0FURUdPUklFUy5NKSB7XG4gICAgICAgICAgICAgIG5ld1JlcGhQb3MtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJlcGggPSBnbHlwaHNbc3RhcnRdO1xuICAgICAgZ2x5cGhzLnNwbGljZS5hcHBseShnbHlwaHMsIFtzdGFydCwgMF0uY29uY2F0KGdseXBocy5zcGxpY2Uoc3RhcnQgKyAxLCBuZXdSZXBoUG9zIC0gc3RhcnQpKSk7XG4gICAgICBnbHlwaHNbbmV3UmVwaFBvc10gPSByZXBoO1xuXG4gICAgICBpZiAoc3RhcnQgPCBiYXNlICYmIGJhc2UgPD0gbmV3UmVwaFBvcykge1xuICAgICAgICBiYXNlLS07XG4gICAgICB9XG4gICAgfSAvLyBvIFJlb3JkZXIgcHJlLWJhc2UgcmVvcmRlcmluZyBjb25zb25hbnRzOlxuICAgIC8vXG4gICAgLy8gSWYgYSBwcmUtYmFzZSByZW9yZGVyaW5nIGNvbnNvbmFudCBpcyBmb3VuZCwgcmVvcmRlciBpdCBhY2NvcmRpbmcgdG9cbiAgICAvLyB0aGUgZm9sbG93aW5nIHJ1bGVzOlxuXG5cbiAgICBpZiAodHJ5UHJlZiAmJiBiYXNlICsgMSA8IGVuZCkge1xuICAgICAgZm9yICh2YXIgX2kyMSA9IGJhc2UgKyAxOyBfaTIxIDwgZW5kOyBfaTIxKyspIHtcbiAgICAgICAgaWYgKGdseXBoc1tfaTIxXS5mZWF0dXJlcy5wcmVmKSB7XG4gICAgICAgICAgLy8gMS4gT25seSByZW9yZGVyIGEgZ2x5cGggcHJvZHVjZWQgYnkgc3Vic3RpdHV0aW9uIGR1cmluZyBhcHBsaWNhdGlvblxuICAgICAgICAgIC8vICAgIG9mIHRoZSA8cHJlZj4gZmVhdHVyZS4gKE5vdGUgdGhhdCBhIGZvbnQgbWF5IHNoYXBlIGEgUmEgY29uc29uYW50IHdpdGhcbiAgICAgICAgICAvLyAgICB0aGUgZmVhdHVyZSBnZW5lcmFsbHkgYnV0IGJsb2NrIGl0IGluIGNlcnRhaW4gY29udGV4dHMuKVxuICAgICAgICAgIC8vIE5vdGU6IFdlIGp1c3QgY2hlY2sgdGhhdCBzb21ldGhpbmcgZ290IHN1YnN0aXR1dGVkLiAgV2UgZG9uJ3QgY2hlY2sgdGhhdFxuICAgICAgICAgIC8vIHRoZSA8cHJlZj4gZmVhdHVyZSBhY3R1YWxseSBkaWQgaXQuLi5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFJlb3JkZXIgcHJlZiBvbmx5IGlmIGl0IGxpZ2F0ZWQuXG4gICAgICAgICAgaWYgKGdseXBoc1tfaTIxXS5pc0xpZ2F0ZWQgJiYgIWdseXBoc1tfaTIxXS5pc011bHRpcGxpZWQpIHtcbiAgICAgICAgICAgIC8vIDIuIFRyeSB0byBmaW5kIGEgdGFyZ2V0IHBvc2l0aW9uIHRoZSBzYW1lIHdheSBhcyBmb3IgcHJlLWJhc2UgbWF0cmEuXG4gICAgICAgICAgICAvLyAgICBJZiBpdCBpcyBmb3VuZCwgcmVvcmRlciBwcmUtYmFzZSBjb25zb25hbnQgZ2x5cGguXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gMy4gSWYgcG9zaXRpb24gaXMgbm90IGZvdW5kLCByZW9yZGVyIGltbWVkaWF0ZWx5IGJlZm9yZSBtYWluXG4gICAgICAgICAgICAvLyAgICBjb25zb25hbnQuXG4gICAgICAgICAgICB2YXIgX25ld1BvcyA9IGJhc2U7IC8vIE1hbGF5YWxhbSAvIFRhbWlsIGRvIG5vdCBoYXZlIFwiaGFsZlwiIGZvcm1zIG9yIGV4cGxpY2l0IHZpcmFtYSBmb3Jtcy5cbiAgICAgICAgICAgIC8vIFRoZSBnbHlwaHMgZm9ybWVkIGJ5ICdoYWxmJyBhcmUgQ2hpbGx1cyBvciBsaWdhdGVkIGV4cGxpY2l0IHZpcmFtYXMuXG4gICAgICAgICAgICAvLyBXZSB3YW50IHRvIHBvc2l0aW9uIG1hdHJhIGFmdGVyIHRoZW0uXG5cbiAgICAgICAgICAgIGlmIChwbGFuLnVuaWNvZGVTY3JpcHQgIT09ICdNYWxheWFsYW0nICYmIHBsYW4udW5pY29kZVNjcmlwdCAhPT0gJ1RhbWlsJykge1xuICAgICAgICAgICAgICB3aGlsZSAoX25ld1BvcyA+IHN0YXJ0ICYmICEoZ2x5cGhzW19uZXdQb3MgLSAxXS5zaGFwZXJJbmZvLmNhdGVnb3J5ICYgKENBVEVHT1JJRVMuTSB8IEhBTEFOVF9PUl9DT0VOR19GTEFHUykpKSB7XG4gICAgICAgICAgICAgICAgX25ld1Bvcy0tO1xuICAgICAgICAgICAgICB9IC8vIEluIEtobWVyIGNvZW5nIG1vZGVsLCBhIEgsUmEgY2FuIGdvICphZnRlciogbWF0cmFzLiAgSWYgaXQgZ29lcyBhZnRlciBhXG4gICAgICAgICAgICAgIC8vIHNwbGl0IG1hdHJhLCBpdCBzaG91bGQgYmUgcmVvcmRlcmVkIHRvICpiZWZvcmUqIHRoZSBsZWZ0IHBhcnQgb2Ygc3VjaCBtYXRyYS5cblxuXG4gICAgICAgICAgICAgIGlmIChfbmV3UG9zID4gc3RhcnQgJiYgZ2x5cGhzW19uZXdQb3MgLSAxXS5zaGFwZXJJbmZvLmNhdGVnb3J5ID09PSBDQVRFR09SSUVTLk0pIHtcbiAgICAgICAgICAgICAgICB2YXIgX29sZFBvczIgPSBfaTIxO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGJhc2UgKyAxOyBqIDwgX29sZFBvczI7IGorKykge1xuICAgICAgICAgICAgICAgICAgaWYgKGdseXBoc1tqXS5zaGFwZXJJbmZvLmNhdGVnb3J5ID09PSBDQVRFR09SSUVTLk0pIHtcbiAgICAgICAgICAgICAgICAgICAgX25ld1Bvcy0tO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF9uZXdQb3MgPiBzdGFydCAmJiBpc0hhbGFudE9yQ29lbmcoZ2x5cGhzW19uZXdQb3MgLSAxXSkpIHtcbiAgICAgICAgICAgICAgLy8gLT4gSWYgWldKIG9yIFpXTkogZm9sbG93IHRoaXMgaGFsYW50LCBwb3NpdGlvbiBpcyBtb3ZlZCBhZnRlciBpdC5cbiAgICAgICAgICAgICAgaWYgKF9uZXdQb3MgPCBlbmQgJiYgaXNKb2luZXIoZ2x5cGhzW19uZXdQb3NdKSkge1xuICAgICAgICAgICAgICAgIF9uZXdQb3MrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgX29sZFBvcyA9IF9pMjE7XG4gICAgICAgICAgICB2YXIgX3RtcCA9IGdseXBoc1tfb2xkUG9zXTtcbiAgICAgICAgICAgIGdseXBocy5zcGxpY2UuYXBwbHkoZ2x5cGhzLCBbX25ld1BvcyArIDEsIDBdLmNvbmNhdChnbHlwaHMuc3BsaWNlKF9uZXdQb3MsIF9vbGRQb3MgLSBfbmV3UG9zKSkpO1xuICAgICAgICAgICAgZ2x5cGhzW19uZXdQb3NdID0gX3RtcDtcblxuICAgICAgICAgICAgaWYgKF9uZXdQb3MgPD0gYmFzZSAmJiBiYXNlIDwgX29sZFBvcykge1xuICAgICAgICAgICAgICBiYXNlKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEFwcGx5ICdpbml0JyB0byB0aGUgTGVmdCBNYXRyYSBpZiBpdCdzIGEgd29yZCBzdGFydC5cblxuXG4gICAgaWYgKGdseXBoc1tzdGFydF0uc2hhcGVySW5mby5wb3NpdGlvbiA9PT0gUE9TSVRJT05TLlByZV9NICYmICghc3RhcnQgfHwgIS9DZnxNbi8udGVzdCh1bmljb2RlLmdldENhdGVnb3J5KGdseXBoc1tzdGFydCAtIDFdLmNvZGVQb2ludHNbMF0pKSkpIHtcbiAgICAgIGdseXBoc1tzdGFydF0uZmVhdHVyZXMuaW5pdCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5leHRTeWxsYWJsZShnbHlwaHMsIHN0YXJ0KSB7XG4gIGlmIChzdGFydCA+PSBnbHlwaHMubGVuZ3RoKSByZXR1cm4gc3RhcnQ7XG4gIHZhciBzeWxsYWJsZSA9IGdseXBoc1tzdGFydF0uc2hhcGVySW5mby5zeWxsYWJsZTtcblxuICB3aGlsZSAoKytzdGFydCA8IGdseXBocy5sZW5ndGggJiYgZ2x5cGhzW3N0YXJ0XS5zaGFwZXJJbmZvLnN5bGxhYmxlID09PSBzeWxsYWJsZSkge31cblxuICByZXR1cm4gc3RhcnQ7XG59XG5cbnZhciBjYXRlZ29yaWVzJDEgPSB1c2VEYXRhLmNhdGVnb3JpZXMsXG4gICAgZGVjb21wb3NpdGlvbnMkMiA9IHVzZURhdGEuZGVjb21wb3NpdGlvbnM7XG52YXIgdHJpZSQyID0gbmV3IFVuaWNvZGVUcmllKEJ1ZmZlcihcIkFBQUNBQUFBQUFBUXVnQUFBUVVPK3ZIdG5IdU1YMFVWeDJkM3UvdDdiWGU3RmxxZ3ZCK21wUWhGbWhpa01SQWcwWlFtYWtNVStjUFdCelppc0VHTmpVcG9pSVlDRWdtR1VHT0VHcU9WTlBVWlVHTkErUU5JQlUyS1JFRUZGU01CVVlSSVNNWEUrQjN2blB6T3pwNTUzdGNXZmlmNVpPNWpudWZNekoyWk8vZXVtbERxRkxBV25BTXVCQnZCWm5DNXVYWmVCZTRXc0Exc0J6czgvbmFDWGNMMUc4R3RZRGZZQTc0TnZnZnVBZmNaSG1UK2Z3RWVCYjhEVHd2eFBRV2VBYXZBQ3ladnE4ejlWWXhYd0NHZ2xpalZCY3ZBQ25BOGVDTTRFNndIRzhCRjRCTHdidkErOEFId1ViQWQ3QUE3d1M1d0M5Z043Z1I3d1g1d043Z1hQQUFlQnI4R3Z3ZC9BYytDRjhFaG9DYVY2b0Jac0JLY0FFNEZaMHdXZVY4UDl6eHdvVG5mQ0hjenVCeHNBZHZBeDhHbnpmMXI0WDRCM0F4dUExK2JISmI5bTVQemRWR1cvWWp2K3hYSHlmbXhGZmQ5T0g4US9BcjhCancxV1pUM0dmQUNlQVg4TjVDZnFTbWxac0FLc0dxcUNIOEszRFhnYkhDdXVYWUIzSGVBZDRITHBncmRhcmJpK0VQZ1krQ1Q0SFBnOHliTVRjYjlNdHl2Z2h0WXV0L0ErYjRwZjk1K0VMZ2Z3MDhReC8zZ0FEZ0luakRsMHZlZWhQdFg4QS93c3JuMkt0enhEdW9nV05vSngzOGsvQnpYS2VJOEVlNXFjQlpZRDlhWnREYmcrQXdUMTl1TVg4M0Y3Sml6Q2RjdkJaZFo5N2M2L0JNZk1XbWZ6ZlRtODgvOTVhTGorRERTdkFwY0RYWjA0dVBmYWVuM1RNSFBMdmk1QmV6dUZQVnRENHQvcVVjZmUzRnZQN2diM091d285VCtIK2dNeS9VSWpoOERmd0JQbTdUMDhkL004V01CZTFTaDN4RWpYbytNMnMrSUVTTkdqQmd4WXNTSTF3THJPc00xZ1JzaS9QK1R6VjMvWmMxanZ4Z1IvajhJTTlFdDFtRUdjSmVERmVBNGNKcTUvaWE0Njd1Ri93MXd6d2R2Qis4MDk5OExkd3ZZWnM2M3c5MEJkbmJkNldwL3V6ejNSNHdZTVdKRXZaelRNbTJYZjhTSUVmVlFkL3YrRXNhUHQzZUw5MEozd1AyV01KNzhUcmQ0dDYrUDc3SHUzN2NJeHA5L255NllYcXJVSmVDUjZUQTc0ZS9ubGw4MU16eGVqZU10WUE5NEhCd3k5MWJQWW93K08vUzNBOGQ3b0lNL2dSTjdDQVAyOUlxeC9CMVRoZnV3T2VjTSt2QTNObVJqZjZHZm0zQnRIN3YrUEk3WERwUzZFdXdEejRPMTArMC9mOW9tMUY0ZWhPNE9tSHA2RU83anhsNTZudmhzTi8xNXV0KzRaMGI2NTd5WWtaN1VKMGpoWDBiY3IzYm4rNlA4N3Zla040NzYyUU56dldIWnRMK2pjSDVzcnpnL3VUZjBmM3B2Zmo1aSs2dFlXN3JLOSthZWZPK3R1TDRCWEFRMmdzM2dQZUJKYy8vOU9MNENYQVd1TnZjL0E2NERONEpid2UwczdqdHh2QmZzQXo4RVB3WDNnd1Bnb0pBSFBROS9BdGYvYk83cC9UVFA0Zmdsd1MvNS96ZnVqZldINXowY3o0R2orOFg1U2YxaWI0bSt2d2JIWi9mZE90UCt6KzNMT25QcC9RTDR2eGhzQXBlQ3k4QldrL2EyZnRGbVl1MjJIZjQvQmE0QjE0SHJ3YzBzUDdmaCtDdmc2K0F1OEYxV3RoQS84cFQ3VWVUeFovMTJuamt1WFQ4VXlNOWk2aXVyMUVFYjZmK3lQei9lZzBiM3Y0WDd4MzY1Zk1hVzQybFB1N1BUdjZ2aThpL0crbFdGL2N2VWs3YkxsMXIrNS9yTjV0dTNqMnF2V1RkL3FWKzRoK0FxakRHbkJzWDU5R0RvOTRpQlhEYTZ2NllqbDZ2dStoOGl0SmNzWnEvWnlrSGhIZy8zdE1IaFVlOXMvWWZ1bnk3WU54VHZROExZZHJFUjIrL2MwR0JlemhyTXYzWk5SdjdQbVlpcmg3b092NFcxWTcyL2N3UE96eDhVN1g4ZDIyOTVzZkUzTVBuYkJQZlNRYkh2OW5LNEh4VHFpSy90ckk3WXk1bUx6dnVWZy9uWCtON1Y1MUEzcitnTXkvNEo0MzRXN2wyZFlmNVBaV0d1Tlg2dWgzdXpFUGV0dUxZN3NaMjB6VEVUWTJveHlCaGozRHJuZnNpZFlQZVhSR0xIcHh6WDZwYkZvZkdSa0ZCZEdoY2dXNDBMNGNZdGQ5SkFFbE8zNnE0TEV6WEhYN1ZNdFoyQkVoSmp5OWRUMjVmYXpPdEp4aHdzQnJIendmdTh3MTJrTVlOOWZMaElicDJSeGxJNTlyWDFkempwc0tsMkZ4dDNpdTZyYm9mYzlxNStLY1JyWFZ6ekRuNi9DcnZrNnAveTFHRmdHaHM5LzZtYUhqQkxndjgvMThmVHhsMXEwYlBvVzh5d3NGVEdXYWF6SG9zck5uL2tQMmVlcUVyb1pZTFpwaHNabDdMODJlZXBoTUlxTlQ4ZHlUOUpqSDFKcGczMnViWnZUQi9TRjY2NXltU25uYXFqVUh1bSsxUW4rTnlPdHo5ZjJyNnk1T1E1MWI2aFl5MEQ0MHIydFlYYXIzMCtZL21iVlg2SnFZK2hNQzYwWFphcG9oM1MvSGRPcFQzRFl1M3JzMGxLbnF1eWIyNzdKWnZ5UGxxcCtmMXpWVksyL2RKWU5wUUdmMDR1WXloMStQVFBxZmFsWjJ0Ty94d1N1KzNiT3JEem1XdmZjVFcvZkxtaWJSeDZsa3ZsY09sYzhxc0UveTUvcm5TazY3RjFpQXUxVlQ2KzRqS3Q1dHVmbjhlMmIrbjU3SktjY2tocnNLRzFDZDZXdStZOHRmMmw1RGVuUGFmcVFaLzd4c3RLTGV5citYbklualNlbHZSZ1M5bjI3SlBRTTVuNkFtN2ptTEc4Vks2bTdPdnlTMkwzMTNYWVYyci90dGg1TFdQZk54aHloSSsxVXA3SFZiZS9ITWdlWkU4YnJ0TlEvN3RjeVgwY24vL0gyTFRPOWtwaXI1Vkk2eVlwOXN6Slc5VzJqSTFUcWZsNWljMnYxR1o1WGFHNlJEWmJ5dnhNTy9EVmgxU2RVajV5MXZyYWFIcysyL1RZTlh2dFNSb1hrNHdyZjl3NmZFY3RuRnQwekwyeSt4RnNmU3JMemEyek9UcU1pWnY4eE9wYm44K3hzTDV5a2RqNlZzeE5LYi9MdnhiN25YOHU0OHkxeDZ5dU1XM1Y5dE54VGxvdXpYc2xpYlZ4bmRqQzE0eGRhOGcyTkliZzV4MDFYQVAybGZlSUJGU2kvenJRRXBvclRYcnU4ZkN1ZWl5MUNVbnFyaHNwU005U3piU1M2NHRlcDlSMVpzWmNPeEtzVUVVZk5aZVl0cjB2alk1RGVYVzkxNWhUOC9QUlY4TXhsUjFIVjRESFpaYzlSN2R6YWpnV29YaWtkTHRHcjB1RWZQaWdzR1MvTnZZalNIVzg3WGVqb1haZWhaNzRYcmNxcFE0ZDVUNWY3R3U4ZjZnN2ZRbWVmb3FPcWs0L1ZhclF2Mm80L1ZEZXRQRG5oalIyZGMzQkNCcC85TlZ3N0tHZndTdFZNZjZhWk5BYWpqNjIyNGo5SENaYnBaYS9MdkgxZ1UzMGkvcTVXblVkU05FcHJ4djJlSU93eDJwY2pqTE1zbU9ibzAwOGswSjR1NjlQM2Q5UWRic3BXL2R5MDgwTmI4UFhxY3JtajB2c2M3dHU2cXdEMUE1b0xZcjNVM1hXU3hxajYvYTEwbkNNa3VkSk15eHZydmJLNTVqVXJxVStYbHIvSWFpOThqWTdtVkFtbDVRTkh4cTMxajJtNVRyU2RtcDZ6NXArOWtwelFudGRRYkkxUGFmcjZJOUM2MGd4ckFMSEd0ZEY2dHloTFR0eGVCdVcraGhxeXpQTVg5MzF4bDZySjVmNm41aDNibHBzVzd2S2J2ZEJmTDFncFlmakRMcnZvYjFkcnJSVCttY3VNZjFPckpTZFcvUCtSZnVmZFVCK3BPdGRUemhwTDV0MGpmS3I0NlAzb2JRZlFkUEd0MWpTK0RFa3g0TVQyUG1FZzFqNzJPdGhxZlpOV1grSnVaNGF0LzJzVEFtbjVjU0lNcVpJamswcG5EMCthVUk2WVM5ZWtkYXNwV3NwOGNXRUM2MmRTNjZVVGtxK3lwYWp5dlhTbFB6NHhoUWhtL25zNndwWEJWSTU2MGpITjlhS2tkVDQ2c3B2V1Q5MTZyT05kSE5zR1NOdGw2SHA4b2FrVFZ1a3BGOW4zVTNKeDBUTmVmYnAzUjRqbHRWZkZmcHZRa0pwTmFIL3B1eWNvKytxYlpQejdzRTFMM0RGR1ZvdmM0WFBMVVBPM0VMeXJ6TGlTcG1QaGFUSmZxZUordDYwUGlUaDlzbk5XMjY1NnVwRFErV3R5ZzZ1ZUpxdUI3SFNWUHNwVzlhMjhsRFdKb3VoYjZpeXY3WGpUZlZMNjdqMnZqRHB2VWZNdDFWbDRHdmN0TWFlcS92WWNGV1hJZlY1S3UzWGF4Szk1MUg2ZHNXRnJoY3hhM3BVL3B6M0MxeGM3MXRUY2FYakdqdEpiWUlqN1VIbTd3eFN5eCtEL2Q3U2ZwZkozd1BwZlNRcDMydFMyZHQ4VjJ0RDcrQmNlM3JwUGEzZUM2RHI4VWxxK0srSjNIRnZibjMxMlp2MlJkU3RyOWcwcFAwUC9CMDRYYlAzUThjSVQyZGxSRjZvcmtyaFkvUnYyN0ZxSGZMMURQNDgwZmZvL1Y2VjdhVEhYTEtEYlRkWE9Pcm55RzFTY3ZTdjZ4cXZlMzBsUHpkcGozNk04UGlsYitMNXZyMHhFM2RkMzBuV0lmWjQ1dVNTeEs0eCtDUm1UVUs2Ri9MclNzZm5qK2FPZFl5dnBYeU1LNy9PcEhXamxEVHNhMHJKdW01SzdQcG5qN0Y5YyswcTBxdHI3cFFqaTJYOW9Nd2NWckpmbWJsd1UyVjJTVjNyRWszWXVPNDZYWGY4TWZyUXowNzdHMnpmdHlEa2ovWnFoY1pyOW5sZGtPZzV5a0F0M0d1bkpiUjNOR1lzVWZXYWZkM3RzODUzQzRkTEhwcE9NNldjZk01Qyt4U2JhQy8ySE1hMUg5djF2WGRvWG0vTEtTVnBZaDV3cW1yL1g2N1Nmd0h0UGM5YTk3cC9rOGJ0MGhwYlcwajFTdnIybSs3UmQ5OHFJUTFwdlNGMjczZEtPakhZTm1rNmZkOC9KWDN0V0lkZGJsQnFvVTVwN3pyWktuZDlUcHBqVnEwRFNpdFdxa3d6MTJiMmV4Yjd2d2phUnZTL1RGZC9TKzhBWXZJbytTdXJpNVR3dnZaUmRWMUlRZXZRMS84U0ErVWVINWV0bzduL1gxT2U4NnB0YWFmbDhrUGpjRjdQN1c5M2VEOWQ1bitvU3ZuN2ZGZTdJL0c5cTFJQmZ5bFNSNzFONmZmdDk0WlUxOGhPWEtSK0pxVU84ZjQrNWR2THNtV2xNUWIvVm92K0NVRGxwVEdVbmRlUWxHM2ZkWldkUlBvUGdsM21tRGxzTG5hZXkvNFgzdFZ1VStvNkwzL1B5bStxbExWL2prNnJsQlJkODM5NGhaNkpkbnVxSXYyeWtPaDNwZnE5NldrcS9FOHF1MnhsODgvdE9KNFIzdGZtcGJHaTNjNVQ4NTlienFyN01ic04wM2lJNWl0VU5qNWVhRUtXcUlYL0tKQ1EvaUZXTlpNbUhYczhvdldrNTNKekZxNXZQdWw2ekRqTFYzNnBYN2J6dk56QjBZbFFPWmVwaFd0UlM1VDdlZVNxODAzMFI3Ny9IdkMxZDd0TjgzWnQ5eWx0ckRkd1NSMFh4c1pkNWwrTXZ2dlUxL005alNuaitOaDZGUEpiQmxkL3c2WEhYSDVNWmVYck9mUy82NWc5UlRsMUpDYThjaHpYMlJaOS8zbFhTaDQvVnFXZkVCTnE0YjgyWXRwNm0rOVFxeGlyMWpYK3JmUGRUMXZ2c1doTTZiUGJtT042RTFMblBDWlc3TDBxcVhzd210cWYwTVFlbFpqNG15cnpZdHp2SVltVVJsdnRxYXB5eCtnelJmZDBYUGZhaFZTT3F1TW9HK2RpYkJkbDQ2aXlmZGJWMXF2VVc5bTgrS1R1ZE12a3paZS9wcVRKK3BXVGZsWDV6dzFmVmZveDZaVFZjOGh2SGZsT1NiK091RzFKc1owa3VmWEFKZjhEXCIsXCJiYXNlNjRcIikpO1xudmFyIHN0YXRlTWFjaGluZSQxID0gbmV3IFN0YXRlTWFjaGluZSh1c2VEYXRhKTtcbi8qKlxyXG4gKiBUaGlzIHNoYXBlciBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVW5pdmVyc2FsIFNoYXBpbmcgRW5naW5lLCB3aGljaFxyXG4gKiB1c2VzIFVuaWNvZGUgZGF0YSB0byBzaGFwZSBhIG51bWJlciBvZiBzY3JpcHRzIHdpdGhvdXQgYSBkZWRpY2F0ZWQgc2hhcGluZyBlbmdpbmUuXHJcbiAqIFNlZSBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvT3BlblR5cGVEZXYvVVNFL2ludHJvLmh0bS5cclxuICovXG5cbnZhciBVbml2ZXJzYWxTaGFwZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9EZWZhdWx0U2hhcGVyNCkge1xuICBfaW5oZXJpdHNMb29zZShVbml2ZXJzYWxTaGFwZXIsIF9EZWZhdWx0U2hhcGVyNCk7XG5cbiAgZnVuY3Rpb24gVW5pdmVyc2FsU2hhcGVyKCkge1xuICAgIHJldHVybiBfRGVmYXVsdFNoYXBlcjQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG5cbiAgVW5pdmVyc2FsU2hhcGVyLnBsYW5GZWF0dXJlcyA9IGZ1bmN0aW9uIHBsYW5GZWF0dXJlcyhwbGFuKSB7XG4gICAgcGxhbi5hZGRTdGFnZShzZXR1cFN5bGxhYmxlcyQxKTsgLy8gRGVmYXVsdCBnbHlwaCBwcmUtcHJvY2Vzc2luZyBncm91cFxuXG4gICAgcGxhbi5hZGRTdGFnZShbJ2xvY2wnLCAnY2NtcCcsICdudWt0JywgJ2FraG4nXSk7IC8vIFJlb3JkZXJpbmcgZ3JvdXBcblxuICAgIHBsYW4uYWRkU3RhZ2UoY2xlYXJTdWJzdGl0dXRpb25GbGFncyk7XG4gICAgcGxhbi5hZGRTdGFnZShbJ3JwaGYnXSwgZmFsc2UpO1xuICAgIHBsYW4uYWRkU3RhZ2UocmVjb3JkUnBoZik7XG4gICAgcGxhbi5hZGRTdGFnZShjbGVhclN1YnN0aXR1dGlvbkZsYWdzKTtcbiAgICBwbGFuLmFkZFN0YWdlKFsncHJlZiddKTtcbiAgICBwbGFuLmFkZFN0YWdlKHJlY29yZFByZWYpOyAvLyBPcnRob2dyYXBoaWMgdW5pdCBzaGFwaW5nIGdyb3VwXG5cbiAgICBwbGFuLmFkZFN0YWdlKFsncmtyZicsICdhYnZmJywgJ2Jsd2YnLCAnaGFsZicsICdwc3RmJywgJ3ZhdHUnLCAnY2pjdCddKTtcbiAgICBwbGFuLmFkZFN0YWdlKHJlb3JkZXIpOyAvLyBUb3BvZ3JhcGhpY2FsIGZlYXR1cmVzXG4gICAgLy8gU2NyaXB0cyB0aGF0IG5lZWQgdGhpcyBhcmUgaGFuZGxlZCBieSB0aGUgQXJhYmljIHNoYXBlciwgbm90IGltcGxlbWVudGVkIGhlcmUgZm9yIG5vdy5cbiAgICAvLyBwbGFuLmFkZFN0YWdlKFsnaXNvbCcsICdpbml0JywgJ21lZGknLCAnZmluYScsICdtZWQyJywgJ2ZpbjInLCAnZmluMyddLCBmYWxzZSk7XG4gICAgLy8gU3RhbmRhcmQgdG9wb2dyYXBoaWMgcHJlc2VudGF0aW9uIGFuZCBwb3NpdGlvbmFsIGZlYXR1cmUgYXBwbGljYXRpb25cblxuICAgIHBsYW4uYWRkU3RhZ2UoWydhYnZzJywgJ2Jsd3MnLCAncHJlcycsICdwc3RzJywgJ2Rpc3QnLCAnYWJ2bScsICdibHdtJ10pO1xuICB9O1xuXG4gIFVuaXZlcnNhbFNoYXBlci5hc3NpZ25GZWF0dXJlcyA9IGZ1bmN0aW9uIGFzc2lnbkZlYXR1cmVzKHBsYW4sIGdseXBocykge1xuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcbiAgICAgIHZhciBjb2RlcG9pbnQgPSBnbHlwaHNbaV0uY29kZVBvaW50c1swXTtcblxuICAgICAgaWYgKGRlY29tcG9zaXRpb25zJDJbY29kZXBvaW50XSkge1xuICAgICAgICB2YXIgZGVjb21wb3NlZCA9IGRlY29tcG9zaXRpb25zJDJbY29kZXBvaW50XS5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICB2YXIgZyA9IHBsYW4uZm9udC5nbHlwaEZvckNvZGVQb2ludChjKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEdseXBoSW5mbyhwbGFuLmZvbnQsIGcuaWQsIFtjXSwgZ2x5cGhzW2ldLmZlYXR1cmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGdseXBocy5zcGxpY2UuYXBwbHkoZ2x5cGhzLCBbaSwgMV0uY29uY2F0KGRlY29tcG9zZWQpKTtcbiAgICAgIH1cbiAgICB9OyAvLyBEZWNvbXBvc2Ugc3BsaXQgdm93ZWxzXG4gICAgLy8gVE9ETzogZG8gdGhpcyBpbiBhIG1vcmUgZ2VuZXJhbCB1bmljb2RlIG5vcm1hbGl6ZXJcblxuXG4gICAgZm9yICh2YXIgaSA9IGdseXBocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgX2xvb3AoaSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBVbml2ZXJzYWxTaGFwZXI7XG59KERlZmF1bHRTaGFwZXIpO1xuXG5fZGVmaW5lUHJvcGVydHkoVW5pdmVyc2FsU2hhcGVyLCBcInplcm9NYXJrV2lkdGhzXCIsICdCRUZPUkVfR1BPUycpO1xuXG5mdW5jdGlvbiB1c2VDYXRlZ29yeShnbHlwaCkge1xuICByZXR1cm4gdHJpZSQyLmdldChnbHlwaC5jb2RlUG9pbnRzWzBdKTtcbn1cblxudmFyIFVTRUluZm8gPSBmdW5jdGlvbiBVU0VJbmZvKGNhdGVnb3J5LCBzeWxsYWJsZVR5cGUsIHN5bGxhYmxlKSB7XG4gIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgdGhpcy5zeWxsYWJsZVR5cGUgPSBzeWxsYWJsZVR5cGU7XG4gIHRoaXMuc3lsbGFibGUgPSBzeWxsYWJsZTtcbn07XG5cbmZ1bmN0aW9uIHNldHVwU3lsbGFibGVzJDEoZm9udCwgZ2x5cGhzKSB7XG4gIHZhciBzeWxsYWJsZSA9IDA7XG5cbiAgZm9yICh2YXIgX2l0ZXJhdG9yNTUgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHN0YXRlTWFjaGluZSQxLm1hdGNoKGdseXBocy5tYXAodXNlQ2F0ZWdvcnkpKSksIF9zdGVwNTU7ICEoX3N0ZXA1NSA9IF9pdGVyYXRvcjU1KCkpLmRvbmU7KSB7XG4gICAgdmFyIF9zdGVwNTUkdmFsdWUgPSBfc3RlcDU1LnZhbHVlLFxuICAgICAgICBzdGFydCA9IF9zdGVwNTUkdmFsdWVbMF0sXG4gICAgICAgIGVuZCA9IF9zdGVwNTUkdmFsdWVbMV0sXG4gICAgICAgIHRhZ3MgPSBfc3RlcDU1JHZhbHVlWzJdO1xuICAgICsrc3lsbGFibGU7IC8vIENyZWF0ZSBzaGFwZXIgaW5mb1xuXG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICBnbHlwaHNbaV0uc2hhcGVySW5mbyA9IG5ldyBVU0VJbmZvKGNhdGVnb3JpZXMkMVt1c2VDYXRlZ29yeShnbHlwaHNbaV0pXSwgdGFnc1swXSwgc3lsbGFibGUpO1xuICAgIH0gLy8gQXNzaWduIHJwaGYgZmVhdHVyZVxuXG5cbiAgICB2YXIgbGltaXQgPSBnbHlwaHNbc3RhcnRdLnNoYXBlckluZm8uY2F0ZWdvcnkgPT09ICdSJyA/IDEgOiBNYXRoLm1pbigzLCBlbmQgLSBzdGFydCk7XG5cbiAgICBmb3IgKHZhciBfaSA9IHN0YXJ0OyBfaSA8IHN0YXJ0ICsgbGltaXQ7IF9pKyspIHtcbiAgICAgIGdseXBoc1tfaV0uZmVhdHVyZXMucnBoZiA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFyU3Vic3RpdHV0aW9uRmxhZ3MoZm9udCwgZ2x5cGhzKSB7XG4gIGZvciAodmFyIF9pdGVyYXRvcjU2ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShnbHlwaHMpLCBfc3RlcDU2OyAhKF9zdGVwNTYgPSBfaXRlcmF0b3I1NigpKS5kb25lOykge1xuICAgIHZhciBnbHlwaCA9IF9zdGVwNTYudmFsdWU7XG4gICAgZ2x5cGguc3Vic3RpdHV0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRScGhmKGZvbnQsIGdseXBocykge1xuICBmb3IgKHZhciBfaXRlcmF0b3I1NyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoZ2x5cGhzKSwgX3N0ZXA1NzsgIShfc3RlcDU3ID0gX2l0ZXJhdG9yNTcoKSkuZG9uZTspIHtcbiAgICB2YXIgZ2x5cGggPSBfc3RlcDU3LnZhbHVlO1xuXG4gICAgaWYgKGdseXBoLnN1YnN0aXR1dGVkICYmIGdseXBoLmZlYXR1cmVzLnJwaGYpIHtcbiAgICAgIC8vIE1hcmsgYSBzdWJzdGl0dXRlZCByZXBoYS5cbiAgICAgIGdseXBoLnNoYXBlckluZm8uY2F0ZWdvcnkgPSAnUic7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY29yZFByZWYoZm9udCwgZ2x5cGhzKSB7XG4gIGZvciAodmFyIF9pdGVyYXRvcjU4ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShnbHlwaHMpLCBfc3RlcDU4OyAhKF9zdGVwNTggPSBfaXRlcmF0b3I1OCgpKS5kb25lOykge1xuICAgIHZhciBnbHlwaCA9IF9zdGVwNTgudmFsdWU7XG5cbiAgICBpZiAoZ2x5cGguc3Vic3RpdHV0ZWQpIHtcbiAgICAgIC8vIE1hcmsgYSBzdWJzdGl0dXRlZCBwcmVmIGFzIFZQcmUsIGFzIHRoZXkgYmVoYXZlIHRoZSBzYW1lIHdheS5cbiAgICAgIGdseXBoLnNoYXBlckluZm8uY2F0ZWdvcnkgPSAnVlByZSc7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlb3JkZXIoZm9udCwgZ2x5cGhzKSB7XG4gIHZhciBkb3R0ZWRDaXJjbGUgPSBmb250LmdseXBoRm9yQ29kZVBvaW50KDB4MjVjYykuaWQ7XG5cbiAgZm9yICh2YXIgc3RhcnQgPSAwLCBlbmQgPSBuZXh0U3lsbGFibGUkMShnbHlwaHMsIDApOyBzdGFydCA8IGdseXBocy5sZW5ndGg7IHN0YXJ0ID0gZW5kLCBlbmQgPSBuZXh0U3lsbGFibGUkMShnbHlwaHMsIHN0YXJ0KSkge1xuICAgIHZhciBpID0gdm9pZCAwLFxuICAgICAgICBqID0gdm9pZCAwO1xuICAgIHZhciBpbmZvID0gZ2x5cGhzW3N0YXJ0XS5zaGFwZXJJbmZvO1xuICAgIHZhciB0eXBlID0gaW5mby5zeWxsYWJsZVR5cGU7IC8vIE9ubHkgYSBmZXcgc3lsbGFibGUgdHlwZXMgbmVlZCByZW9yZGVyaW5nLlxuXG4gICAgaWYgKHR5cGUgIT09ICd2aXJhbWFfdGVybWluYXRlZF9jbHVzdGVyJyAmJiB0eXBlICE9PSAnc3RhbmRhcmRfY2x1c3RlcicgJiYgdHlwZSAhPT0gJ2Jyb2tlbl9jbHVzdGVyJykge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBJbnNlcnQgYSBkb3R0ZWQgY2lyY2xlIGdseXBoIGluIGJyb2tlbiBjbHVzdGVycy5cblxuXG4gICAgaWYgKHR5cGUgPT09ICdicm9rZW5fY2x1c3RlcicgJiYgZG90dGVkQ2lyY2xlKSB7XG4gICAgICB2YXIgZyA9IG5ldyBHbHlwaEluZm8oZm9udCwgZG90dGVkQ2lyY2xlLCBbMHgyNWNjXSk7XG4gICAgICBnLnNoYXBlckluZm8gPSBpbmZvOyAvLyBJbnNlcnQgYWZ0ZXIgcG9zc2libGUgUmVwaGEuXG5cbiAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kICYmIGdseXBoc1tpXS5zaGFwZXJJbmZvLmNhdGVnb3J5ID09PSAnUic7IGkrKykge31cblxuICAgICAgZ2x5cGhzLnNwbGljZSgrK2ksIDAsIGcpO1xuICAgICAgZW5kKys7XG4gICAgfSAvLyBNb3ZlIHRoaW5ncyBmb3J3YXJkLlxuXG5cbiAgICBpZiAoaW5mby5jYXRlZ29yeSA9PT0gJ1InICYmIGVuZCAtIHN0YXJ0ID4gMSkge1xuICAgICAgLy8gR290IGEgcmVwaGEuIFJlb3JkZXIgaXQgdG8gYWZ0ZXIgZmlyc3QgYmFzZSwgYmVmb3JlIGZpcnN0IGhhbGFudC5cbiAgICAgIGZvciAoaSA9IHN0YXJ0ICsgMTsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgIGluZm8gPSBnbHlwaHNbaV0uc2hhcGVySW5mbztcblxuICAgICAgICBpZiAoaXNCYXNlKGluZm8pIHx8IGlzSGFsYW50KGdseXBoc1tpXSkpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoaXQgYSBoYWxhbnQsIG1vdmUgYmVmb3JlIGl0OyBvdGhlcndpc2UgaXQncyBhIGJhc2U6IG1vdmUgdG8gaXQnc1xuICAgICAgICAgIC8vIHBsYWNlLCBhbmQgc2hpZnQgdGhpbmdzIGluIGJldHdlZW4gYmFja3dhcmQuXG4gICAgICAgICAgaWYgKGlzSGFsYW50KGdseXBoc1tpXSkpIHtcbiAgICAgICAgICAgIGktLTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnbHlwaHMuc3BsaWNlLmFwcGx5KGdseXBocywgW3N0YXJ0LCAwXS5jb25jYXQoZ2x5cGhzLnNwbGljZShzdGFydCArIDEsIGkgLSBzdGFydCksIFtnbHlwaHNbaV1dKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIE1vdmUgdGhpbmdzIGJhY2suXG5cblxuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kOyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIGluZm8gPSBnbHlwaHNbaV0uc2hhcGVySW5mbztcblxuICAgICAgaWYgKGlzQmFzZShpbmZvKSB8fCBpc0hhbGFudChnbHlwaHNbaV0pKSB7XG4gICAgICAgIC8vIElmIHdlIGhpdCBhIGhhbGFudCwgbW92ZSBhZnRlciBpdDsgb3RoZXJ3aXNlIGl0J3MgYSBiYXNlOiBtb3ZlIHRvIGl0J3NcbiAgICAgICAgLy8gcGxhY2UsIGFuZCBzaGlmdCB0aGluZ3MgaW4gYmV0d2VlbiBiYWNrd2FyZC5cbiAgICAgICAgaiA9IGlzSGFsYW50KGdseXBoc1tpXSkgPyBpICsgMSA6IGk7XG4gICAgICB9IGVsc2UgaWYgKChpbmZvLmNhdGVnb3J5ID09PSAnVlByZScgfHwgaW5mby5jYXRlZ29yeSA9PT0gJ1ZNUHJlJykgJiYgaiA8IGkpIHtcbiAgICAgICAgZ2x5cGhzLnNwbGljZS5hcHBseShnbHlwaHMsIFtqLCAxLCBnbHlwaHNbaV1dLmNvbmNhdChnbHlwaHMuc3BsaWNlKGosIGkgLSBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBuZXh0U3lsbGFibGUkMShnbHlwaHMsIHN0YXJ0KSB7XG4gIGlmIChzdGFydCA+PSBnbHlwaHMubGVuZ3RoKSByZXR1cm4gc3RhcnQ7XG4gIHZhciBzeWxsYWJsZSA9IGdseXBoc1tzdGFydF0uc2hhcGVySW5mby5zeWxsYWJsZTtcblxuICB3aGlsZSAoKytzdGFydCA8IGdseXBocy5sZW5ndGggJiYgZ2x5cGhzW3N0YXJ0XS5zaGFwZXJJbmZvLnN5bGxhYmxlID09PSBzeWxsYWJsZSkge31cblxuICByZXR1cm4gc3RhcnQ7XG59XG5cbmZ1bmN0aW9uIGlzSGFsYW50KGdseXBoKSB7XG4gIHJldHVybiBnbHlwaC5zaGFwZXJJbmZvLmNhdGVnb3J5ID09PSAnSCcgJiYgIWdseXBoLmlzTGlnYXRlZDtcbn1cblxuZnVuY3Rpb24gaXNCYXNlKGluZm8pIHtcbiAgcmV0dXJuIGluZm8uY2F0ZWdvcnkgPT09ICdCJyB8fCBpbmZvLmNhdGVnb3J5ID09PSAnR0InO1xufVxuXG52YXIgU0hBUEVSUyA9IHtcbiAgYXJhYjogQXJhYmljU2hhcGVyLFxuICAvLyBBcmFiaWNcbiAgbW9uZzogQXJhYmljU2hhcGVyLFxuICAvLyBNb25nb2xpYW5cbiAgc3lyYzogQXJhYmljU2hhcGVyLFxuICAvLyBTeXJpYWNcbiAgJ25rbyAnOiBBcmFiaWNTaGFwZXIsXG4gIC8vIE4nS29cbiAgcGhhZzogQXJhYmljU2hhcGVyLFxuICAvLyBQaGFncyBQYVxuICBtYW5kOiBBcmFiaWNTaGFwZXIsXG4gIC8vIE1hbmRhaWNcbiAgbWFuaTogQXJhYmljU2hhcGVyLFxuICAvLyBNYW5pY2hhZWFuXG4gIHBobHA6IEFyYWJpY1NoYXBlcixcbiAgLy8gUHNhbHRlciBQYWhsYXZpXG4gIGhhbmc6IEhhbmd1bFNoYXBlcixcbiAgLy8gSGFuZ3VsXG4gIGJuZzI6IEluZGljU2hhcGVyLFxuICAvLyBCZW5nYWxpXG4gIGJlbmc6IEluZGljU2hhcGVyLFxuICAvLyBCZW5nYWxpXG4gIGRldjI6IEluZGljU2hhcGVyLFxuICAvLyBEZXZhbmFnYXJpXG4gIGRldmE6IEluZGljU2hhcGVyLFxuICAvLyBEZXZhbmFnYXJpXG4gIGdqcjI6IEluZGljU2hhcGVyLFxuICAvLyBHdWphcmF0aVxuICBndWpyOiBJbmRpY1NoYXBlcixcbiAgLy8gR3VqYXJhdGlcbiAgZ3VydTogSW5kaWNTaGFwZXIsXG4gIC8vIEd1cm11a2hpXG4gIGd1cjI6IEluZGljU2hhcGVyLFxuICAvLyBHdXJtdWtoaVxuICBrbmRhOiBJbmRpY1NoYXBlcixcbiAgLy8gS2FubmFkYVxuICBrbmQyOiBJbmRpY1NoYXBlcixcbiAgLy8gS2FubmFkYVxuICBtbG0yOiBJbmRpY1NoYXBlcixcbiAgLy8gTWFsYXlhbGFtXG4gIG1seW06IEluZGljU2hhcGVyLFxuICAvLyBNYWxheWFsYW1cbiAgb3J5MjogSW5kaWNTaGFwZXIsXG4gIC8vIE9yaXlhXG4gIG9yeWE6IEluZGljU2hhcGVyLFxuICAvLyBPcml5YVxuICB0YW1sOiBJbmRpY1NoYXBlcixcbiAgLy8gVGFtaWxcbiAgdG1sMjogSW5kaWNTaGFwZXIsXG4gIC8vIFRhbWlsXG4gIHRlbHU6IEluZGljU2hhcGVyLFxuICAvLyBUZWx1Z3VcbiAgdGVsMjogSW5kaWNTaGFwZXIsXG4gIC8vIFRlbHVndVxuICBraG1yOiBJbmRpY1NoYXBlcixcbiAgLy8gS2htZXJcbiAgYmFsaTogVW5pdmVyc2FsU2hhcGVyLFxuICAvLyBCYWxpbmVzZVxuICBiYXRrOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIEJhdGFrXG4gIGJyYWg6IFVuaXZlcnNhbFNoYXBlcixcbiAgLy8gQnJhaG1pXG4gIGJ1Z2k6IFVuaXZlcnNhbFNoYXBlcixcbiAgLy8gQnVnaW5lc2VcbiAgYnVoZDogVW5pdmVyc2FsU2hhcGVyLFxuICAvLyBCdWhpZFxuICBjYWttOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIENoYWttYVxuICBjaGFtOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIENoYW1cbiAgZHVwbDogVW5pdmVyc2FsU2hhcGVyLFxuICAvLyBEdXBsb3lhblxuICBlZ3lwOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIEVneXB0aWFuIEhpZXJvZ2x5cGhzXG4gIGdyYW46IFVuaXZlcnNhbFNoYXBlcixcbiAgLy8gR3JhbnRoYVxuICBoYW5vOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIEhhbnVub29cbiAgamF2YTogVW5pdmVyc2FsU2hhcGVyLFxuICAvLyBKYXZhbmVzZVxuICBrdGhpOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIEthaXRoaVxuICBrYWxpOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIEtheWFoIExpXG4gIGtoYXI6IFVuaXZlcnNhbFNoYXBlcixcbiAgLy8gS2hhcm9zaHRoaVxuICBraG9qOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIEtob2praVxuICBzaW5kOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIEtodWRhd2FkaVxuICBsZXBjOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIExlcGNoYVxuICBsaW1iOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIExpbWJ1XG4gIG1haGo6IFVuaXZlcnNhbFNoYXBlcixcbiAgLy8gTWFoYWphbmlcbiAgLy8gbWFuZDogVW5pdmVyc2FsU2hhcGVyLCAvLyBNYW5kYWljXG4gIC8vIG1hbmk6IFVuaXZlcnNhbFNoYXBlciwgLy8gTWFuaWNoYWVhblxuICBtdGVpOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIE1laXRlaSBNYXlla1xuICBtb2RpOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIE1vZGlcbiAgLy8gbW9uZzogVW5pdmVyc2FsU2hhcGVyLCAvLyBNb25nb2xpYW5cbiAgLy8gJ25rbyAnOiBVbml2ZXJzYWxTaGFwZXIsIC8vIE7igJlLb1xuICBobW5nOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIFBhaGF3aCBIbW9uZ1xuICAvLyBwaGFnOiBVbml2ZXJzYWxTaGFwZXIsIC8vIFBoYWdzLXBhXG4gIC8vIHBobHA6IFVuaXZlcnNhbFNoYXBlciwgLy8gUHNhbHRlciBQYWhsYXZpXG4gIHJqbmc6IFVuaXZlcnNhbFNoYXBlcixcbiAgLy8gUmVqYW5nXG4gIHNhdXI6IFVuaXZlcnNhbFNoYXBlcixcbiAgLy8gU2F1cmFzaHRyYVxuICBzaHJkOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIFNoYXJhZGFcbiAgc2lkZDogVW5pdmVyc2FsU2hhcGVyLFxuICAvLyBTaWRkaGFtXG4gIHNpbmg6IFVuaXZlcnNhbFNoYXBlcixcbiAgLy8gU2luaGFsYVxuICBzdW5kOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIFN1bmRhbmVzZVxuICBzeWxvOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIFN5bG90aSBOYWdyaVxuICB0Z2xnOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIFRhZ2Fsb2dcbiAgdGFnYjogVW5pdmVyc2FsU2hhcGVyLFxuICAvLyBUYWdiYW53YVxuICB0YWxlOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIFRhaSBMZVxuICBsYW5hOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIFRhaSBUaGFtXG4gIHRhdnQ6IFVuaXZlcnNhbFNoYXBlcixcbiAgLy8gVGFpIFZpZXRcbiAgdGFrcjogVW5pdmVyc2FsU2hhcGVyLFxuICAvLyBUYWtyaVxuICB0aWJ0OiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIFRpYmV0YW5cbiAgdGZuZzogVW5pdmVyc2FsU2hhcGVyLFxuICAvLyBUaWZpbmFnaFxuICB0aXJoOiBVbml2ZXJzYWxTaGFwZXIsXG4gIC8vIFRpcmh1dGFcbiAgbGF0bjogRGVmYXVsdFNoYXBlcixcbiAgLy8gTGF0aW5cbiAgREZMVDogRGVmYXVsdFNoYXBlciAvLyBEZWZhdWx0XG5cbn07XG5cbmZ1bmN0aW9uIGNob29zZShzY3JpcHQpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHNjcmlwdCkpIHtcbiAgICBzY3JpcHQgPSBbc2NyaXB0XTtcbiAgfVxuXG4gIGZvciAodmFyIF9pdGVyYXRvcjU5ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShzY3JpcHQpLCBfc3RlcDU5OyAhKF9zdGVwNTkgPSBfaXRlcmF0b3I1OSgpKS5kb25lOykge1xuICAgIHZhciBzID0gX3N0ZXA1OS52YWx1ZTtcbiAgICB2YXIgc2hhcGVyID0gU0hBUEVSU1tzXTtcblxuICAgIGlmIChzaGFwZXIpIHtcbiAgICAgIHJldHVybiBzaGFwZXI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIERlZmF1bHRTaGFwZXI7XG59XG5cbnZhciBHU1VCUHJvY2Vzc29yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfT1RQcm9jZXNzb3IpIHtcbiAgX2luaGVyaXRzTG9vc2UoR1NVQlByb2Nlc3NvciwgX09UUHJvY2Vzc29yKTtcblxuICBmdW5jdGlvbiBHU1VCUHJvY2Vzc29yKCkge1xuICAgIHJldHVybiBfT1RQcm9jZXNzb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90bzI3ID0gR1NVQlByb2Nlc3Nvci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMjcuYXBwbHlMb29rdXAgPSBmdW5jdGlvbiBhcHBseUxvb2t1cChsb29rdXBUeXBlLCB0YWJsZSkge1xuICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgc3dpdGNoIChsb29rdXBUeXBlKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBTaW5nbGUgU3Vic3RpdHV0aW9uXG4gICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jb3ZlcmFnZUluZGV4KHRhYmxlLmNvdmVyYWdlKTtcblxuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZ2x5cGggPSB0aGlzLmdseXBoSXRlcmF0b3IuY3VyO1xuXG4gICAgICAgICAgc3dpdGNoICh0YWJsZS52ZXJzaW9uKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGdseXBoLmlkID0gZ2x5cGguaWQgKyB0YWJsZS5kZWx0YUdseXBoSUQgJiAweGZmZmY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGdseXBoLmlkID0gdGFibGUuc3Vic3RpdHV0ZS5nZXQoaW5kZXgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBNdWx0aXBsZSBTdWJzdGl0dXRpb25cbiAgICAgICAgICB2YXIgX2luZGV4ID0gdGhpcy5jb3ZlcmFnZUluZGV4KHRhYmxlLmNvdmVyYWdlKTtcblxuICAgICAgICAgIGlmIChfaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkZ2x5cGhzMjtcblxuICAgICAgICAgICAgdmFyIHNlcXVlbmNlID0gdGFibGUuc2VxdWVuY2VzLmdldChfaW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAoc2VxdWVuY2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoZSBzZXF1ZW5jZSBsZW5ndGggaXMgemVybywgZGVsZXRlIHRoZSBnbHlwaC5cbiAgICAgICAgICAgICAgLy8gVGhlIE9wZW5UeXBlIHNwZWMgZGlzYWxsb3dzIHRoaXMsIGJ1dCBzZWVtcyBsaWtlIEhhcmZidXp6IGFuZCBVbmlzY3JpYmUgYWxsb3cgaXQuXG4gICAgICAgICAgICAgIHRoaXMuZ2x5cGhzLnNwbGljZSh0aGlzLmdseXBoSXRlcmF0b3IuaW5kZXgsIDEpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nbHlwaEl0ZXJhdG9yLmN1ci5pZCA9IHNlcXVlbmNlWzBdO1xuICAgICAgICAgICAgdGhpcy5nbHlwaEl0ZXJhdG9yLmN1ci5saWdhdHVyZUNvbXBvbmVudCA9IDA7XG4gICAgICAgICAgICB2YXIgZmVhdHVyZXMgPSB0aGlzLmdseXBoSXRlcmF0b3IuY3VyLmZlYXR1cmVzO1xuICAgICAgICAgICAgdmFyIGN1ckdseXBoID0gdGhpcy5nbHlwaEl0ZXJhdG9yLmN1cjtcbiAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IHNlcXVlbmNlLnNsaWNlKDEpLm1hcChmdW5jdGlvbiAoZ2lkLCBpKSB7XG4gICAgICAgICAgICAgIHZhciBnbHlwaCA9IG5ldyBHbHlwaEluZm8oX3RoaXM3LmZvbnQsIGdpZCwgdW5kZWZpbmVkLCBmZWF0dXJlcyk7XG4gICAgICAgICAgICAgIGdseXBoLnNoYXBlckluZm8gPSBjdXJHbHlwaC5zaGFwZXJJbmZvO1xuICAgICAgICAgICAgICBnbHlwaC5pc0xpZ2F0ZWQgPSBjdXJHbHlwaC5pc0xpZ2F0ZWQ7XG4gICAgICAgICAgICAgIGdseXBoLmxpZ2F0dXJlQ29tcG9uZW50ID0gaSArIDE7XG4gICAgICAgICAgICAgIGdseXBoLnN1YnN0aXR1dGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZ2x5cGguaXNNdWx0aXBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGdseXBoO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIChfdGhpcyRnbHlwaHMyID0gdGhpcy5nbHlwaHMpLnNwbGljZS5hcHBseShfdGhpcyRnbHlwaHMyLCBbdGhpcy5nbHlwaEl0ZXJhdG9yLmluZGV4ICsgMSwgMF0uY29uY2F0KHJlcGxhY2VtZW50KSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBBbHRlcm5hdGUgU3Vic3RpdHV0aW9uXG4gICAgICAgICAgdmFyIF9pbmRleDIgPSB0aGlzLmNvdmVyYWdlSW5kZXgodGFibGUuY292ZXJhZ2UpO1xuXG4gICAgICAgICAgaWYgKF9pbmRleDIgIT09IC0xKSB7XG4gICAgICAgICAgICB2YXIgVVNFUl9JTkRFWCA9IDA7IC8vIFRPRE9cblxuICAgICAgICAgICAgdGhpcy5nbHlwaEl0ZXJhdG9yLmN1ci5pZCA9IHRhYmxlLmFsdGVybmF0ZVNldC5nZXQoX2luZGV4MilbVVNFUl9JTkRFWF07XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSA0OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gTGlnYXR1cmUgU3Vic3RpdHV0aW9uXG4gICAgICAgICAgdmFyIF9pbmRleDMgPSB0aGlzLmNvdmVyYWdlSW5kZXgodGFibGUuY292ZXJhZ2UpO1xuXG4gICAgICAgICAgaWYgKF9pbmRleDMgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yNjAgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRhYmxlLmxpZ2F0dXJlU2V0cy5nZXQoX2luZGV4MykpLCBfc3RlcDYwOyAhKF9zdGVwNjAgPSBfaXRlcmF0b3I2MCgpKS5kb25lOykge1xuICAgICAgICAgICAgdmFyIGxpZ2F0dXJlID0gX3N0ZXA2MC52YWx1ZTtcbiAgICAgICAgICAgIHZhciBtYXRjaGVkID0gdGhpcy5zZXF1ZW5jZU1hdGNoSW5kaWNlcygxLCBsaWdhdHVyZS5jb21wb25lbnRzKTtcblxuICAgICAgICAgICAgaWYgKCFtYXRjaGVkKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgX2N1ckdseXBoID0gdGhpcy5nbHlwaEl0ZXJhdG9yLmN1cjsgLy8gQ29uY2F0ZW5hdGUgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIHRoZSBuZXcgbGlnYXR1cmUgd2lsbCByZXByZXNlbnRcblxuICAgICAgICAgICAgdmFyIGNoYXJhY3RlcnMgPSBfY3VyR2x5cGguY29kZVBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I2MSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UobWF0Y2hlZCksIF9zdGVwNjE7ICEoX3N0ZXA2MSA9IF9pdGVyYXRvcjYxKCkpLmRvbmU7KSB7XG4gICAgICAgICAgICAgIHZhciBfaW5kZXg0ID0gX3N0ZXA2MS52YWx1ZTtcbiAgICAgICAgICAgICAgY2hhcmFjdGVycy5wdXNoLmFwcGx5KGNoYXJhY3RlcnMsIHRoaXMuZ2x5cGhzW19pbmRleDRdLmNvZGVQb2ludHMpO1xuICAgICAgICAgICAgfSAvLyBDcmVhdGUgdGhlIHJlcGxhY2VtZW50IGxpZ2F0dXJlIGdseXBoXG5cblxuICAgICAgICAgICAgdmFyIGxpZ2F0dXJlR2x5cGggPSBuZXcgR2x5cGhJbmZvKHRoaXMuZm9udCwgbGlnYXR1cmUuZ2x5cGgsIGNoYXJhY3RlcnMsIF9jdXJHbHlwaC5mZWF0dXJlcyk7XG4gICAgICAgICAgICBsaWdhdHVyZUdseXBoLnNoYXBlckluZm8gPSBfY3VyR2x5cGguc2hhcGVySW5mbztcbiAgICAgICAgICAgIGxpZ2F0dXJlR2x5cGguaXNMaWdhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGxpZ2F0dXJlR2x5cGguc3Vic3RpdHV0ZWQgPSB0cnVlOyAvLyBGcm9tIEhhcmZidXp6OlxuICAgICAgICAgICAgLy8gLSBJZiBpdCAqaXMqIGEgbWFyayBsaWdhdHVyZSwgd2UgZG9uJ3QgYWxsb2NhdGUgYSBuZXcgbGlnYXR1cmUgaWQsIGFuZCBsZWF2ZVxuICAgICAgICAgICAgLy8gICB0aGUgbGlnYXR1cmUgdG8ga2VlcCBpdHMgb2xkIGxpZ2F0dXJlIGlkLiAgVGhpcyB3aWxsIGFsbG93IGl0IHRvIGF0dGFjaCB0b1xuICAgICAgICAgICAgLy8gICBhIGJhc2UgbGlnYXR1cmUgaW4gR1BPUy4gIEVnLiBpZiB0aGUgc2VxdWVuY2UgaXM6IExBTSxMQU0sU0hBRERBLEZBVEhBLEhFSCxcbiAgICAgICAgICAgIC8vICAgYW5kIExBTSxMQU0sSEVIIGZvciBhIGxpZ2F0dXJlLCB0aGV5IHdpbGwgbGVhdmUgU0hBRERBIGFuZCBGQVRIQSB3aXRoIGFcbiAgICAgICAgICAgIC8vICAgbGlnYXR1cmUgaWQgYW5kIGNvbXBvbmVudCB2YWx1ZSBvZiAyLiAgVGhlbiBpZiBTSEFEREEsRkFUSEEgZm9ybSBhIGxpZ2F0dXJlXG4gICAgICAgICAgICAvLyAgIGxhdGVyLCB3ZSBkb24ndCB3YW50IHRoZW0gdG8gbG9zZSB0aGVpciBsaWdhdHVyZSBpZC9jb21wb25lbnQsIG90aGVyd2lzZVxuICAgICAgICAgICAgLy8gICBHUE9TIHdpbGwgZmFpbCB0byBjb3JyZWN0bHkgcG9zaXRpb24gdGhlIG1hcmsgbGlnYXR1cmUgb24gdG9wIG9mIHRoZVxuICAgICAgICAgICAgLy8gICBMQU0sTEFNLEhFSCBsaWdhdHVyZS4gU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzYzNDNcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyAtIElmIGEgbGlnYXR1cmUgaXMgZm9ybWVkIG9mIGNvbXBvbmVudHMgdGhhdCBzb21lIG9mIHdoaWNoIGFyZSBhbHNvIGxpZ2F0dXJlc1xuICAgICAgICAgICAgLy8gICB0aGVtc2VsdmVzLCBhbmQgdGhvc2UgbGlnYXR1cmUgY29tcG9uZW50cyBoYWQgbWFya3MgYXR0YWNoZWQgdG8gKnRoZWlyKlxuICAgICAgICAgICAgLy8gICBjb21wb25lbnRzLCB3ZSBoYXZlIHRvIGF0dGFjaCB0aGUgbWFya3MgdG8gdGhlIG5ldyBsaWdhdHVyZSBjb21wb25lbnRcbiAgICAgICAgICAgIC8vICAgcG9zaXRpb25zISAgTm93ICp0aGF0KidzIHRyaWNreSEgIEFuZCB0aGVzZSBtYXJrcyBtYXkgYmUgZm9sbG93aW5nIHRoZVxuICAgICAgICAgICAgLy8gICBsYXN0IGNvbXBvbmVudCBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIHNvIHdlIHNob3VsZCBsb29wIGZvcndhcmQgbG9va2luZ1xuICAgICAgICAgICAgLy8gICBmb3IgdGhlbSBhbmQgdXBkYXRlIHRoZW0uXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gICBFZy4gdGhlIHNlcXVlbmNlIGlzIExBTSxMQU0sU0hBRERBLEZBVEhBLEhFSCwgYW5kIHRoZSBmb250IGZpcnN0IGZvcm1zIGFcbiAgICAgICAgICAgIC8vICAgJ2NhbHQnIGxpZ2F0dXJlIG9mIExBTSxIRUgsIGxlYXZpbmcgdGhlIFNIQUREQSBhbmQgRkFUSEEgd2l0aCBhIGxpZ2F0dXJlXG4gICAgICAgICAgICAvLyAgIGlkIGFuZCBjb21wb25lbnQgPT0gMS4gIE5vdywgZHVyaW5nICdsaWdhJywgdGhlIExBTSBhbmQgdGhlIExBTS1IRUggbGlnYXR1cmVcbiAgICAgICAgICAgIC8vICAgZm9ybSBhIExBTS1MQU0tSEVIIGxpZ2F0dXJlLiAgV2UgbmVlZCB0byByZWFzc2lnbiB0aGUgU0hBRERBIGFuZCBGQVRIQSB0b1xuICAgICAgICAgICAgLy8gICB0aGUgbmV3IGxpZ2F0dXJlIHdpdGggYSBjb21wb25lbnQgdmFsdWUgb2YgMi5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyAgIFRoaXMgaW4gZmFjdCBoYXBwZW5lZCB0byBhIGZvbnQuLi4gIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3NjMzXG5cbiAgICAgICAgICAgIHZhciBpc01hcmtMaWdhdHVyZSA9IF9jdXJHbHlwaC5pc01hcms7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hlZC5sZW5ndGggJiYgaXNNYXJrTGlnYXR1cmU7IGkrKykge1xuICAgICAgICAgICAgICBpc01hcmtMaWdhdHVyZSA9IHRoaXMuZ2x5cGhzW21hdGNoZWRbaV1dLmlzTWFyaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGlnYXR1cmVHbHlwaC5saWdhdHVyZUlEID0gaXNNYXJrTGlnYXR1cmUgPyBudWxsIDogdGhpcy5saWdhdHVyZUlEKys7XG4gICAgICAgICAgICB2YXIgbGFzdExpZ0lEID0gX2N1ckdseXBoLmxpZ2F0dXJlSUQ7XG4gICAgICAgICAgICB2YXIgbGFzdE51bUNvbXBzID0gX2N1ckdseXBoLmNvZGVQb2ludHMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGN1ckNvbXBzID0gbGFzdE51bUNvbXBzO1xuICAgICAgICAgICAgdmFyIGlkeCA9IHRoaXMuZ2x5cGhJdGVyYXRvci5pbmRleCArIDE7IC8vIFNldCBsaWdhdHVyZUlEIGFuZCBsaWdhdHVyZUNvbXBvbmVudCBvbiBnbHlwaHMgdGhhdCB3ZXJlIHNraXBwZWQgaW4gdGhlIG1hdGNoZWQgc2VxdWVuY2UuXG4gICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBHUE9TIHRvIGF0dGFjaCBtYXJrcyB0byB0aGUgY29ycmVjdCBsaWdhdHVyZSBjb21wb25lbnRzLlxuXG4gICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I2MiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UobWF0Y2hlZCksIF9zdGVwNjI7ICEoX3N0ZXA2MiA9IF9pdGVyYXRvcjYyKCkpLmRvbmU7KSB7XG4gICAgICAgICAgICAgIHZhciBtYXRjaEluZGV4ID0gX3N0ZXA2Mi52YWx1ZTtcblxuICAgICAgICAgICAgICAvLyBEb24ndCBhc3NpZ24gbmV3IGxpZ2F0dXJlIGNvbXBvbmVudHMgZm9yIG1hcmsgbGlnYXR1cmVzIChzZWUgYWJvdmUpXG4gICAgICAgICAgICAgIGlmIChpc01hcmtMaWdhdHVyZSkge1xuICAgICAgICAgICAgICAgIGlkeCA9IG1hdGNoSW5kZXg7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGlkeCA8IG1hdGNoSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBsaWdhdHVyZUNvbXBvbmVudCA9IGN1ckNvbXBzIC0gbGFzdE51bUNvbXBzICsgTWF0aC5taW4odGhpcy5nbHlwaHNbaWR4XS5saWdhdHVyZUNvbXBvbmVudCB8fCAxLCBsYXN0TnVtQ29tcHMpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5nbHlwaHNbaWR4XS5saWdhdHVyZUlEID0gbGlnYXR1cmVHbHlwaC5saWdhdHVyZUlEO1xuICAgICAgICAgICAgICAgICAgdGhpcy5nbHlwaHNbaWR4XS5saWdhdHVyZUNvbXBvbmVudCA9IGxpZ2F0dXJlQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgaWR4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGFzdExpZ0lEID0gdGhpcy5nbHlwaHNbaWR4XS5saWdhdHVyZUlEO1xuICAgICAgICAgICAgICBsYXN0TnVtQ29tcHMgPSB0aGlzLmdseXBoc1tpZHhdLmNvZGVQb2ludHMubGVuZ3RoO1xuICAgICAgICAgICAgICBjdXJDb21wcyArPSBsYXN0TnVtQ29tcHM7XG4gICAgICAgICAgICAgIGlkeCsrOyAvLyBza2lwIGJhc2UgZ2x5cGhcbiAgICAgICAgICAgIH0gLy8gQWRqdXN0IGxpZ2F0dXJlIGNvbXBvbmVudHMgZm9yIGFueSBtYXJrcyBmb2xsb3dpbmdcblxuXG4gICAgICAgICAgICBpZiAobGFzdExpZ0lEICYmICFpc01hcmtMaWdhdHVyZSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IGlkeDsgX2kgPCB0aGlzLmdseXBocy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nbHlwaHNbX2ldLmxpZ2F0dXJlSUQgPT09IGxhc3RMaWdJRCkge1xuICAgICAgICAgICAgICAgICAgdmFyIGxpZ2F0dXJlQ29tcG9uZW50ID0gY3VyQ29tcHMgLSBsYXN0TnVtQ29tcHMgKyBNYXRoLm1pbih0aGlzLmdseXBoc1tfaV0ubGlnYXR1cmVDb21wb25lbnQgfHwgMSwgbGFzdE51bUNvbXBzKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2x5cGhzW19pXS5saWdhdHVyZUNvbXBvbmVudCA9IGxpZ2F0dXJlQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gRGVsZXRlIHRoZSBtYXRjaGVkIGdseXBocywgYW5kIHJlcGxhY2UgdGhlIGN1cnJlbnQgZ2x5cGggd2l0aCB0aGUgbGlnYXR1cmUgZ2x5cGhcblxuXG4gICAgICAgICAgICBmb3IgKHZhciBfaTIgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IF9pMiA+PSAwOyBfaTItLSkge1xuICAgICAgICAgICAgICB0aGlzLmdseXBocy5zcGxpY2UobWF0Y2hlZFtfaTJdLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nbHlwaHNbdGhpcy5nbHlwaEl0ZXJhdG9yLmluZGV4XSA9IGxpZ2F0dXJlR2x5cGg7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSA1OlxuICAgICAgICAvLyBDb250ZXh0dWFsIFN1YnN0aXR1dGlvblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseUNvbnRleHQodGFibGUpO1xuXG4gICAgICBjYXNlIDY6XG4gICAgICAgIC8vIENoYWluaW5nIENvbnRleHR1YWwgU3Vic3RpdHV0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5Q2hhaW5pbmdDb250ZXh0KHRhYmxlKTtcblxuICAgICAgY2FzZSA3OlxuICAgICAgICAvLyBFeHRlbnNpb24gU3Vic3RpdHV0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5TG9va3VwKHRhYmxlLmxvb2t1cFR5cGUsIHRhYmxlLmV4dGVuc2lvbik7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdTVUIgbG9va3VwVHlwZSBcIi5jb25jYXQobG9va3VwVHlwZSwgXCIgaXMgbm90IHN1cHBvcnRlZFwiKSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBHU1VCUHJvY2Vzc29yO1xufShPVFByb2Nlc3Nvcik7XG5cbnZhciBHUE9TUHJvY2Vzc29yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfT1RQcm9jZXNzb3IyKSB7XG4gIF9pbmhlcml0c0xvb3NlKEdQT1NQcm9jZXNzb3IsIF9PVFByb2Nlc3NvcjIpO1xuXG4gIGZ1bmN0aW9uIEdQT1NQcm9jZXNzb3IoKSB7XG4gICAgcmV0dXJuIF9PVFByb2Nlc3NvcjIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90bzI4ID0gR1BPU1Byb2Nlc3Nvci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMjguYXBwbHlQb3NpdGlvblZhbHVlID0gZnVuY3Rpb24gYXBwbHlQb3NpdGlvblZhbHVlKHNlcXVlbmNlSW5kZXgsIHZhbHVlKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbnNbdGhpcy5nbHlwaEl0ZXJhdG9yLnBlZWtJbmRleChzZXF1ZW5jZUluZGV4KV07XG5cbiAgICBpZiAodmFsdWUueEFkdmFuY2UgIT0gbnVsbCkge1xuICAgICAgcG9zaXRpb24ueEFkdmFuY2UgKz0gdmFsdWUueEFkdmFuY2U7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLnlBZHZhbmNlICE9IG51bGwpIHtcbiAgICAgIHBvc2l0aW9uLnlBZHZhbmNlICs9IHZhbHVlLnlBZHZhbmNlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS54UGxhY2VtZW50ICE9IG51bGwpIHtcbiAgICAgIHBvc2l0aW9uLnhPZmZzZXQgKz0gdmFsdWUueFBsYWNlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUueVBsYWNlbWVudCAhPSBudWxsKSB7XG4gICAgICBwb3NpdGlvbi55T2Zmc2V0ICs9IHZhbHVlLnlQbGFjZW1lbnQ7XG4gICAgfSAvLyBBZGp1c3RtZW50cyBmb3IgZm9udCB2YXJpYXRpb25zXG5cblxuICAgIHZhciB2YXJpYXRpb25Qcm9jZXNzb3IgPSB0aGlzLmZvbnQuX3ZhcmlhdGlvblByb2Nlc3NvcjtcbiAgICB2YXIgdmFyaWF0aW9uU3RvcmUgPSB0aGlzLmZvbnQuR0RFRiAmJiB0aGlzLmZvbnQuR0RFRi5pdGVtVmFyaWF0aW9uU3RvcmU7XG5cbiAgICBpZiAodmFyaWF0aW9uUHJvY2Vzc29yICYmIHZhcmlhdGlvblN0b3JlKSB7XG4gICAgICBpZiAodmFsdWUueFBsYURldmljZSkge1xuICAgICAgICBwb3NpdGlvbi54T2Zmc2V0ICs9IHZhcmlhdGlvblByb2Nlc3Nvci5nZXREZWx0YSh2YXJpYXRpb25TdG9yZSwgdmFsdWUueFBsYURldmljZS5hLCB2YWx1ZS54UGxhRGV2aWNlLmIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUueVBsYURldmljZSkge1xuICAgICAgICBwb3NpdGlvbi55T2Zmc2V0ICs9IHZhcmlhdGlvblByb2Nlc3Nvci5nZXREZWx0YSh2YXJpYXRpb25TdG9yZSwgdmFsdWUueVBsYURldmljZS5hLCB2YWx1ZS55UGxhRGV2aWNlLmIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUueEFkdkRldmljZSkge1xuICAgICAgICBwb3NpdGlvbi54QWR2YW5jZSArPSB2YXJpYXRpb25Qcm9jZXNzb3IuZ2V0RGVsdGEodmFyaWF0aW9uU3RvcmUsIHZhbHVlLnhBZHZEZXZpY2UuYSwgdmFsdWUueEFkdkRldmljZS5iKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlLnlBZHZEZXZpY2UpIHtcbiAgICAgICAgcG9zaXRpb24ueUFkdmFuY2UgKz0gdmFyaWF0aW9uUHJvY2Vzc29yLmdldERlbHRhKHZhcmlhdGlvblN0b3JlLCB2YWx1ZS55QWR2RGV2aWNlLmEsIHZhbHVlLnlBZHZEZXZpY2UuYik7XG4gICAgICB9XG4gICAgfSAvLyBUT0RPOiBkZXZpY2UgdGFibGVzXG5cbiAgfTtcblxuICBfcHJvdG8yOC5hcHBseUxvb2t1cCA9IGZ1bmN0aW9uIGFwcGx5TG9va3VwKGxvb2t1cFR5cGUsIHRhYmxlKSB7XG4gICAgc3dpdGNoIChsb29rdXBUeXBlKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBTaW5nbGUgcG9zaXRpb25pbmcgdmFsdWVcbiAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvdmVyYWdlSW5kZXgodGFibGUuY292ZXJhZ2UpO1xuXG4gICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAodGFibGUudmVyc2lvbikge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICB0aGlzLmFwcGx5UG9zaXRpb25WYWx1ZSgwLCB0YWJsZS52YWx1ZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIHRoaXMuYXBwbHlQb3NpdGlvblZhbHVlKDAsIHRhYmxlLnZhbHVlcy5nZXQoaW5kZXgpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAyOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gUGFpciBBZGp1c3RtZW50IFBvc2l0aW9uaW5nXG4gICAgICAgICAgdmFyIG5leHRHbHlwaCA9IHRoaXMuZ2x5cGhJdGVyYXRvci5wZWVrKCk7XG5cbiAgICAgICAgICBpZiAoIW5leHRHbHlwaCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfaW5kZXggPSB0aGlzLmNvdmVyYWdlSW5kZXgodGFibGUuY292ZXJhZ2UpO1xuXG4gICAgICAgICAgaWYgKF9pbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzd2l0Y2ggKHRhYmxlLnZlcnNpb24pIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgLy8gQWRqdXN0bWVudHMgZm9yIGdseXBoIHBhaXJzXG4gICAgICAgICAgICAgIHZhciBzZXQgPSB0YWJsZS5wYWlyU2V0cy5nZXQoX2luZGV4KTtcblxuICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I2MyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2Uoc2V0KSwgX3N0ZXA2MzsgIShfc3RlcDYzID0gX2l0ZXJhdG9yNjMoKSkuZG9uZTspIHtcbiAgICAgICAgICAgICAgICB2YXIgX3BhaXIgPSBfc3RlcDYzLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKF9wYWlyLnNlY29uZEdseXBoID09PSBuZXh0R2x5cGguaWQpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlQb3NpdGlvblZhbHVlKDAsIF9wYWlyLnZhbHVlMSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5UG9zaXRpb25WYWx1ZSgxLCBfcGFpci52YWx1ZTIpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIC8vIENsYXNzIHBhaXIgYWRqdXN0bWVudFxuICAgICAgICAgICAgICB2YXIgY2xhc3MxID0gdGhpcy5nZXRDbGFzc0lEKHRoaXMuZ2x5cGhJdGVyYXRvci5jdXIuaWQsIHRhYmxlLmNsYXNzRGVmMSk7XG4gICAgICAgICAgICAgIHZhciBjbGFzczIgPSB0aGlzLmdldENsYXNzSUQobmV4dEdseXBoLmlkLCB0YWJsZS5jbGFzc0RlZjIpO1xuXG4gICAgICAgICAgICAgIGlmIChjbGFzczEgPT09IC0xIHx8IGNsYXNzMiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgcGFpciA9IHRhYmxlLmNsYXNzUmVjb3Jkcy5nZXQoY2xhc3MxKS5nZXQoY2xhc3MyKTtcbiAgICAgICAgICAgICAgdGhpcy5hcHBseVBvc2l0aW9uVmFsdWUoMCwgcGFpci52YWx1ZTEpO1xuICAgICAgICAgICAgICB0aGlzLmFwcGx5UG9zaXRpb25WYWx1ZSgxLCBwYWlyLnZhbHVlMik7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBDdXJzaXZlIEF0dGFjaG1lbnQgUG9zaXRpb25pbmdcbiAgICAgICAgICB2YXIgbmV4dEluZGV4ID0gdGhpcy5nbHlwaEl0ZXJhdG9yLnBlZWtJbmRleCgpO1xuICAgICAgICAgIHZhciBfbmV4dEdseXBoID0gdGhpcy5nbHlwaHNbbmV4dEluZGV4XTtcblxuICAgICAgICAgIGlmICghX25leHRHbHlwaCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdXJSZWNvcmQgPSB0YWJsZS5lbnRyeUV4aXRSZWNvcmRzW3RoaXMuY292ZXJhZ2VJbmRleCh0YWJsZS5jb3ZlcmFnZSldO1xuXG4gICAgICAgICAgaWYgKCFjdXJSZWNvcmQgfHwgIWN1clJlY29yZC5leGl0QW5jaG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5leHRSZWNvcmQgPSB0YWJsZS5lbnRyeUV4aXRSZWNvcmRzW3RoaXMuY292ZXJhZ2VJbmRleCh0YWJsZS5jb3ZlcmFnZSwgX25leHRHbHlwaC5pZCldO1xuXG4gICAgICAgICAgaWYgKCFuZXh0UmVjb3JkIHx8ICFuZXh0UmVjb3JkLmVudHJ5QW5jaG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5nZXRBbmNob3IobmV4dFJlY29yZC5lbnRyeUFuY2hvcik7XG4gICAgICAgICAgdmFyIGV4aXQgPSB0aGlzLmdldEFuY2hvcihjdXJSZWNvcmQuZXhpdEFuY2hvcik7XG4gICAgICAgICAgdmFyIGN1ciA9IHRoaXMucG9zaXRpb25zW3RoaXMuZ2x5cGhJdGVyYXRvci5pbmRleF07XG4gICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnBvc2l0aW9uc1tuZXh0SW5kZXhdO1xuXG4gICAgICAgICAgc3dpdGNoICh0aGlzLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnbHRyJzpcbiAgICAgICAgICAgICAgY3VyLnhBZHZhbmNlID0gZXhpdC54ICsgY3VyLnhPZmZzZXQ7XG4gICAgICAgICAgICAgIHZhciBkID0gZW50cnkueCArIG5leHQueE9mZnNldDtcbiAgICAgICAgICAgICAgbmV4dC54QWR2YW5jZSAtPSBkO1xuICAgICAgICAgICAgICBuZXh0LnhPZmZzZXQgLT0gZDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgICAgICAgIGQgPSBleGl0LnggKyBjdXIueE9mZnNldDtcbiAgICAgICAgICAgICAgY3VyLnhBZHZhbmNlIC09IGQ7XG4gICAgICAgICAgICAgIGN1ci54T2Zmc2V0IC09IGQ7XG4gICAgICAgICAgICAgIG5leHQueEFkdmFuY2UgPSBlbnRyeS54ICsgbmV4dC54T2Zmc2V0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5nbHlwaEl0ZXJhdG9yLmZsYWdzLnJpZ2h0VG9MZWZ0KSB7XG4gICAgICAgICAgICB0aGlzLmdseXBoSXRlcmF0b3IuY3VyLmN1cnNpdmVBdHRhY2htZW50ID0gbmV4dEluZGV4O1xuICAgICAgICAgICAgY3VyLnlPZmZzZXQgPSBlbnRyeS55IC0gZXhpdC55O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfbmV4dEdseXBoLmN1cnNpdmVBdHRhY2htZW50ID0gdGhpcy5nbHlwaEl0ZXJhdG9yLmluZGV4O1xuICAgICAgICAgICAgY3VyLnlPZmZzZXQgPSBleGl0LnkgLSBlbnRyeS55O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIE1hcmsgdG8gYmFzZSBwb3NpdGlvbmluZ1xuICAgICAgICAgIHZhciBtYXJrSW5kZXggPSB0aGlzLmNvdmVyYWdlSW5kZXgodGFibGUubWFya0NvdmVyYWdlKTtcblxuICAgICAgICAgIGlmIChtYXJrSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSAvLyBzZWFyY2ggYmFja3dhcmQgZm9yIGEgYmFzZSBnbHlwaFxuXG5cbiAgICAgICAgICB2YXIgYmFzZUdseXBoSW5kZXggPSB0aGlzLmdseXBoSXRlcmF0b3IuaW5kZXg7XG5cbiAgICAgICAgICB3aGlsZSAoLS1iYXNlR2x5cGhJbmRleCA+PSAwICYmICh0aGlzLmdseXBoc1tiYXNlR2x5cGhJbmRleF0uaXNNYXJrIHx8IHRoaXMuZ2x5cGhzW2Jhc2VHbHlwaEluZGV4XS5saWdhdHVyZUNvbXBvbmVudCA+IDApKSB7fVxuXG4gICAgICAgICAgaWYgKGJhc2VHbHlwaEluZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBiYXNlSW5kZXggPSB0aGlzLmNvdmVyYWdlSW5kZXgodGFibGUuYmFzZUNvdmVyYWdlLCB0aGlzLmdseXBoc1tiYXNlR2x5cGhJbmRleF0uaWQpO1xuXG4gICAgICAgICAgaWYgKGJhc2VJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbWFya1JlY29yZCA9IHRhYmxlLm1hcmtBcnJheVttYXJrSW5kZXhdO1xuICAgICAgICAgIHZhciBiYXNlQW5jaG9yID0gdGFibGUuYmFzZUFycmF5W2Jhc2VJbmRleF1bbWFya1JlY29yZC5jbGFzc107XG4gICAgICAgICAgdGhpcy5hcHBseUFuY2hvcihtYXJrUmVjb3JkLCBiYXNlQW5jaG9yLCBiYXNlR2x5cGhJbmRleCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSA1OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gTWFyayB0byBsaWdhdHVyZSBwb3NpdGlvbmluZ1xuICAgICAgICAgIHZhciBfbWFya0luZGV4ID0gdGhpcy5jb3ZlcmFnZUluZGV4KHRhYmxlLm1hcmtDb3ZlcmFnZSk7XG5cbiAgICAgICAgICBpZiAoX21hcmtJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9IC8vIHNlYXJjaCBiYWNrd2FyZCBmb3IgYSBiYXNlIGdseXBoXG5cblxuICAgICAgICAgIHZhciBfYmFzZUdseXBoSW5kZXggPSB0aGlzLmdseXBoSXRlcmF0b3IuaW5kZXg7XG5cbiAgICAgICAgICB3aGlsZSAoLS1fYmFzZUdseXBoSW5kZXggPj0gMCAmJiB0aGlzLmdseXBoc1tfYmFzZUdseXBoSW5kZXhdLmlzTWFyaykge31cblxuICAgICAgICAgIGlmIChfYmFzZUdseXBoSW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGxpZ0luZGV4ID0gdGhpcy5jb3ZlcmFnZUluZGV4KHRhYmxlLmxpZ2F0dXJlQ292ZXJhZ2UsIHRoaXMuZ2x5cGhzW19iYXNlR2x5cGhJbmRleF0uaWQpO1xuXG4gICAgICAgICAgaWYgKGxpZ0luZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBsaWdBdHRhY2ggPSB0YWJsZS5saWdhdHVyZUFycmF5W2xpZ0luZGV4XTtcbiAgICAgICAgICB2YXIgbWFya0dseXBoID0gdGhpcy5nbHlwaEl0ZXJhdG9yLmN1cjtcbiAgICAgICAgICB2YXIgbGlnR2x5cGggPSB0aGlzLmdseXBoc1tfYmFzZUdseXBoSW5kZXhdO1xuICAgICAgICAgIHZhciBjb21wSW5kZXggPSBsaWdHbHlwaC5saWdhdHVyZUlEICYmIGxpZ0dseXBoLmxpZ2F0dXJlSUQgPT09IG1hcmtHbHlwaC5saWdhdHVyZUlEICYmIG1hcmtHbHlwaC5saWdhdHVyZUNvbXBvbmVudCA+IDAgPyBNYXRoLm1pbihtYXJrR2x5cGgubGlnYXR1cmVDb21wb25lbnQsIGxpZ0dseXBoLmNvZGVQb2ludHMubGVuZ3RoKSAtIDEgOiBsaWdHbHlwaC5jb2RlUG9pbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgdmFyIF9tYXJrUmVjb3JkID0gdGFibGUubWFya0FycmF5W19tYXJrSW5kZXhdO1xuICAgICAgICAgIHZhciBfYmFzZUFuY2hvciA9IGxpZ0F0dGFjaFtjb21wSW5kZXhdW19tYXJrUmVjb3JkLmNsYXNzXTtcbiAgICAgICAgICB0aGlzLmFwcGx5QW5jaG9yKF9tYXJrUmVjb3JkLCBfYmFzZUFuY2hvciwgX2Jhc2VHbHlwaEluZGV4KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIDY6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBNYXJrIHRvIG1hcmsgcG9zaXRpb25pbmdcbiAgICAgICAgICB2YXIgbWFyazFJbmRleCA9IHRoaXMuY292ZXJhZ2VJbmRleCh0YWJsZS5tYXJrMUNvdmVyYWdlKTtcblxuICAgICAgICAgIGlmIChtYXJrMUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH0gLy8gZ2V0IHRoZSBwcmV2aW91cyBtYXJrIHRvIGF0dGFjaCB0b1xuXG5cbiAgICAgICAgICB2YXIgcHJldkluZGV4ID0gdGhpcy5nbHlwaEl0ZXJhdG9yLnBlZWtJbmRleCgtMSk7XG4gICAgICAgICAgdmFyIHByZXYgPSB0aGlzLmdseXBoc1twcmV2SW5kZXhdO1xuXG4gICAgICAgICAgaWYgKCFwcmV2IHx8ICFwcmV2LmlzTWFyaykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfY3VyID0gdGhpcy5nbHlwaEl0ZXJhdG9yLmN1cjsgLy8gVGhlIGZvbGxvd2luZyBsb2dpYyB3YXMgYm9ycm93ZWQgZnJvbSBIYXJmYnV6elxuXG4gICAgICAgICAgdmFyIGdvb2QgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChfY3VyLmxpZ2F0dXJlSUQgPT09IHByZXYubGlnYXR1cmVJRCkge1xuICAgICAgICAgICAgaWYgKCFfY3VyLmxpZ2F0dXJlSUQpIHtcbiAgICAgICAgICAgICAgLy8gTWFya3MgYmVsb25naW5nIHRvIHRoZSBzYW1lIGJhc2VcbiAgICAgICAgICAgICAgZ29vZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9jdXIubGlnYXR1cmVDb21wb25lbnQgPT09IHByZXYubGlnYXR1cmVDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gTWFya3MgYmVsb25naW5nIHRvIHRoZSBzYW1lIGxpZ2F0dXJlIGNvbXBvbmVudFxuICAgICAgICAgICAgICBnb29kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgbGlnYXR1cmUgaWRzIGRvbid0IG1hdGNoLCBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCBvbmUgb2YgdGhlIG1hcmtzXG4gICAgICAgICAgICAvLyBpdHNlbGYgaXMgYSBsaWdhdHVyZSwgaW4gd2hpY2ggY2FzZSBtYXRjaC5cbiAgICAgICAgICAgIGlmIChfY3VyLmxpZ2F0dXJlSUQgJiYgIV9jdXIubGlnYXR1cmVDb21wb25lbnQgfHwgcHJldi5saWdhdHVyZUlEICYmICFwcmV2LmxpZ2F0dXJlQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIGdvb2QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZ29vZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBtYXJrMkluZGV4ID0gdGhpcy5jb3ZlcmFnZUluZGV4KHRhYmxlLm1hcmsyQ292ZXJhZ2UsIHByZXYuaWQpO1xuXG4gICAgICAgICAgaWYgKG1hcmsySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9tYXJrUmVjb3JkMiA9IHRhYmxlLm1hcmsxQXJyYXlbbWFyazFJbmRleF07XG4gICAgICAgICAgdmFyIF9iYXNlQW5jaG9yMiA9IHRhYmxlLm1hcmsyQXJyYXlbbWFyazJJbmRleF1bX21hcmtSZWNvcmQyLmNsYXNzXTtcbiAgICAgICAgICB0aGlzLmFwcGx5QW5jaG9yKF9tYXJrUmVjb3JkMiwgX2Jhc2VBbmNob3IyLCBwcmV2SW5kZXgpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gQ29udGV4dHVhbCBwb3NpdGlvbmluZ1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBseUNvbnRleHQodGFibGUpO1xuXG4gICAgICBjYXNlIDg6XG4gICAgICAgIC8vIENoYWluaW5nIGNvbnRleHR1YWwgcG9zaXRpb25pbmdcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlDaGFpbmluZ0NvbnRleHQodGFibGUpO1xuXG4gICAgICBjYXNlIDk6XG4gICAgICAgIC8vIEV4dGVuc2lvbiBwb3NpdGlvbmluZ1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBseUxvb2t1cCh0YWJsZS5sb29rdXBUeXBlLCB0YWJsZS5leHRlbnNpb24pO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBHUE9TIHRhYmxlOiBcIi5jb25jYXQobG9va3VwVHlwZSkpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8yOC5hcHBseUFuY2hvciA9IGZ1bmN0aW9uIGFwcGx5QW5jaG9yKG1hcmtSZWNvcmQsIGJhc2VBbmNob3IsIGJhc2VHbHlwaEluZGV4KSB7XG4gICAgdmFyIGJhc2VDb29yZHMgPSB0aGlzLmdldEFuY2hvcihiYXNlQW5jaG9yKTtcbiAgICB2YXIgbWFya0Nvb3JkcyA9IHRoaXMuZ2V0QW5jaG9yKG1hcmtSZWNvcmQubWFya0FuY2hvcik7XG4gICAgdmFyIGJhc2VQb3MgPSB0aGlzLnBvc2l0aW9uc1tiYXNlR2x5cGhJbmRleF07XG4gICAgdmFyIG1hcmtQb3MgPSB0aGlzLnBvc2l0aW9uc1t0aGlzLmdseXBoSXRlcmF0b3IuaW5kZXhdO1xuICAgIG1hcmtQb3MueE9mZnNldCA9IGJhc2VDb29yZHMueCAtIG1hcmtDb29yZHMueDtcbiAgICBtYXJrUG9zLnlPZmZzZXQgPSBiYXNlQ29vcmRzLnkgLSBtYXJrQ29vcmRzLnk7XG4gICAgdGhpcy5nbHlwaEl0ZXJhdG9yLmN1ci5tYXJrQXR0YWNobWVudCA9IGJhc2VHbHlwaEluZGV4O1xuICB9O1xuXG4gIF9wcm90bzI4LmdldEFuY2hvciA9IGZ1bmN0aW9uIGdldEFuY2hvcihhbmNob3IpIHtcbiAgICAvLyBUT0RPOiBjb250b3VyIHBvaW50LCBkZXZpY2UgdGFibGVzXG4gICAgdmFyIHggPSBhbmNob3IueENvb3JkaW5hdGU7XG4gICAgdmFyIHkgPSBhbmNob3IueUNvb3JkaW5hdGU7IC8vIEFkanVzdG1lbnRzIGZvciBmb250IHZhcmlhdGlvbnNcblxuICAgIHZhciB2YXJpYXRpb25Qcm9jZXNzb3IgPSB0aGlzLmZvbnQuX3ZhcmlhdGlvblByb2Nlc3NvcjtcbiAgICB2YXIgdmFyaWF0aW9uU3RvcmUgPSB0aGlzLmZvbnQuR0RFRiAmJiB0aGlzLmZvbnQuR0RFRi5pdGVtVmFyaWF0aW9uU3RvcmU7XG5cbiAgICBpZiAodmFyaWF0aW9uUHJvY2Vzc29yICYmIHZhcmlhdGlvblN0b3JlKSB7XG4gICAgICBpZiAoYW5jaG9yLnhEZXZpY2VUYWJsZSkge1xuICAgICAgICB4ICs9IHZhcmlhdGlvblByb2Nlc3Nvci5nZXREZWx0YSh2YXJpYXRpb25TdG9yZSwgYW5jaG9yLnhEZXZpY2VUYWJsZS5hLCBhbmNob3IueERldmljZVRhYmxlLmIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYW5jaG9yLnlEZXZpY2VUYWJsZSkge1xuICAgICAgICB5ICs9IHZhcmlhdGlvblByb2Nlc3Nvci5nZXREZWx0YSh2YXJpYXRpb25TdG9yZSwgYW5jaG9yLnlEZXZpY2VUYWJsZS5hLCBhbmNob3IueURldmljZVRhYmxlLmIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB4OiB4LFxuICAgICAgeTogeVxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvMjguYXBwbHlGZWF0dXJlcyA9IGZ1bmN0aW9uIGFwcGx5RmVhdHVyZXModXNlckZlYXR1cmVzLCBnbHlwaHMsIGFkdmFuY2VzKSB7XG4gICAgX09UUHJvY2Vzc29yMi5wcm90b3R5cGUuYXBwbHlGZWF0dXJlcy5jYWxsKHRoaXMsIHVzZXJGZWF0dXJlcywgZ2x5cGhzLCBhZHZhbmNlcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2x5cGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmZpeEN1cnNpdmVBdHRhY2htZW50KGkpO1xuICAgIH1cblxuICAgIHRoaXMuZml4TWFya0F0dGFjaG1lbnQoKTtcbiAgfTtcblxuICBfcHJvdG8yOC5maXhDdXJzaXZlQXR0YWNobWVudCA9IGZ1bmN0aW9uIGZpeEN1cnNpdmVBdHRhY2htZW50KGkpIHtcbiAgICB2YXIgZ2x5cGggPSB0aGlzLmdseXBoc1tpXTtcblxuICAgIGlmIChnbHlwaC5jdXJzaXZlQXR0YWNobWVudCAhPSBudWxsKSB7XG4gICAgICB2YXIgaiA9IGdseXBoLmN1cnNpdmVBdHRhY2htZW50O1xuICAgICAgZ2x5cGguY3Vyc2l2ZUF0dGFjaG1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5maXhDdXJzaXZlQXR0YWNobWVudChqKTtcbiAgICAgIHRoaXMucG9zaXRpb25zW2ldLnlPZmZzZXQgKz0gdGhpcy5wb3NpdGlvbnNbal0ueU9mZnNldDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMjguZml4TWFya0F0dGFjaG1lbnQgPSBmdW5jdGlvbiBmaXhNYXJrQXR0YWNobWVudCgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2x5cGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZ2x5cGggPSB0aGlzLmdseXBoc1tpXTtcblxuICAgICAgaWYgKGdseXBoLm1hcmtBdHRhY2htZW50ICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGogPSBnbHlwaC5tYXJrQXR0YWNobWVudDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbaV0ueE9mZnNldCArPSB0aGlzLnBvc2l0aW9uc1tqXS54T2Zmc2V0O1xuICAgICAgICB0aGlzLnBvc2l0aW9uc1tpXS55T2Zmc2V0ICs9IHRoaXMucG9zaXRpb25zW2pdLnlPZmZzZXQ7XG5cbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAnbHRyJykge1xuICAgICAgICAgIGZvciAodmFyIGsgPSBqOyBrIDwgaTsgaysrKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tpXS54T2Zmc2V0IC09IHRoaXMucG9zaXRpb25zW2tdLnhBZHZhbmNlO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnNbaV0ueU9mZnNldCAtPSB0aGlzLnBvc2l0aW9uc1trXS55QWR2YW5jZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgX2sgPSBqICsgMTsgX2sgPCBpICsgMTsgX2srKykge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnNbaV0ueE9mZnNldCArPSB0aGlzLnBvc2l0aW9uc1tfa10ueEFkdmFuY2U7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tpXS55T2Zmc2V0ICs9IHRoaXMucG9zaXRpb25zW19rXS55QWR2YW5jZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIEdQT1NQcm9jZXNzb3I7XG59KE9UUHJvY2Vzc29yKTtcblxudmFyIE9UTGF5b3V0RW5naW5lID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gT1RMYXlvdXRFbmdpbmUoZm9udCkge1xuICAgIHRoaXMuZm9udCA9IGZvbnQ7XG4gICAgdGhpcy5nbHlwaEluZm9zID0gbnVsbDtcbiAgICB0aGlzLnBsYW4gPSBudWxsO1xuICAgIHRoaXMuR1NVQlByb2Nlc3NvciA9IG51bGw7XG4gICAgdGhpcy5HUE9TUHJvY2Vzc29yID0gbnVsbDtcbiAgICB0aGlzLmZhbGxiYWNrUG9zaXRpb24gPSB0cnVlO1xuXG4gICAgaWYgKGZvbnQuR1NVQikge1xuICAgICAgdGhpcy5HU1VCUHJvY2Vzc29yID0gbmV3IEdTVUJQcm9jZXNzb3IoZm9udCwgZm9udC5HU1VCKTtcbiAgICB9XG5cbiAgICBpZiAoZm9udC5HUE9TKSB7XG4gICAgICB0aGlzLkdQT1NQcm9jZXNzb3IgPSBuZXcgR1BPU1Byb2Nlc3Nvcihmb250LCBmb250LkdQT1MpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBfcHJvdG8yOSA9IE9UTGF5b3V0RW5naW5lLnByb3RvdHlwZTtcblxuICBfcHJvdG8yOS5zZXR1cCA9IGZ1bmN0aW9uIHNldHVwKGdseXBoUnVuKSB7XG4gICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICAvLyBNYXAgZ2x5cGhzIHRvIEdseXBoSW5mbyBvYmplY3RzIHNvIGRhdGEgY2FuIGJlIHBhc3NlZCBiZXR3ZWVuXG4gICAgLy8gR1NVQiBhbmQgR1BPUyB3aXRob3V0IG11dGF0aW5nIHRoZSByZWFsIChzaGFyZWQpIEdseXBoIG9iamVjdHMuXG4gICAgdGhpcy5nbHlwaEluZm9zID0gZ2x5cGhSdW4uZ2x5cGhzLm1hcChmdW5jdGlvbiAoZ2x5cGgpIHtcbiAgICAgIHJldHVybiBuZXcgR2x5cGhJbmZvKF90aGlzOC5mb250LCBnbHlwaC5pZCwgW10uY29uY2F0KGdseXBoLmNvZGVQb2ludHMpKTtcbiAgICB9KTsgLy8gU2VsZWN0IGEgc2NyaXB0IGJhc2VkIG9uIHdoYXQgaXMgYXZhaWxhYmxlIGluIEdTVUIvR1BPUy5cblxuICAgIHZhciBzY3JpcHQgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuR1BPU1Byb2Nlc3Nvcikge1xuICAgICAgc2NyaXB0ID0gdGhpcy5HUE9TUHJvY2Vzc29yLnNlbGVjdFNjcmlwdChnbHlwaFJ1bi5zY3JpcHQsIGdseXBoUnVuLmxhbmd1YWdlLCBnbHlwaFJ1bi5kaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLkdTVUJQcm9jZXNzb3IpIHtcbiAgICAgIHNjcmlwdCA9IHRoaXMuR1NVQlByb2Nlc3Nvci5zZWxlY3RTY3JpcHQoZ2x5cGhSdW4uc2NyaXB0LCBnbHlwaFJ1bi5sYW5ndWFnZSwgZ2x5cGhSdW4uZGlyZWN0aW9uKTtcbiAgICB9IC8vIENob29zZSBhIHNoYXBlciBiYXNlZCBvbiB0aGUgc2NyaXB0LCBhbmQgc2V0dXAgYSBzaGFwaW5nIHBsYW4uXG4gICAgLy8gVGhpcyBkZXRlcm1pbmVzIHdoaWNoIGZlYXR1cmVzIHRvIGFwcGx5IHRvIHdoaWNoIGdseXBocy5cblxuXG4gICAgdGhpcy5zaGFwZXIgPSBjaG9vc2Uoc2NyaXB0KTtcbiAgICB0aGlzLnBsYW4gPSBuZXcgU2hhcGluZ1BsYW4odGhpcy5mb250LCBzY3JpcHQsIGdseXBoUnVuLmRpcmVjdGlvbik7XG4gICAgdGhpcy5zaGFwZXIucGxhbih0aGlzLnBsYW4sIHRoaXMuZ2x5cGhJbmZvcywgZ2x5cGhSdW4uZmVhdHVyZXMpOyAvLyBBc3NpZ24gY2hvc2VuIGZlYXR1cmVzIHRvIG91dHB1dCBnbHlwaCBydW5cblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnBsYW4uYWxsRmVhdHVyZXMpIHtcbiAgICAgIGdseXBoUnVuLmZlYXR1cmVzW2tleV0gPSB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8yOS5zdWJzdGl0dXRlID0gZnVuY3Rpb24gc3Vic3RpdHV0ZShnbHlwaFJ1bikge1xuICAgIHZhciBfdGhpczkgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuR1NVQlByb2Nlc3Nvcikge1xuICAgICAgdGhpcy5wbGFuLnByb2Nlc3ModGhpcy5HU1VCUHJvY2Vzc29yLCB0aGlzLmdseXBoSW5mb3MpOyAvLyBNYXAgZ2x5cGggaW5mb3MgYmFjayB0byBub3JtYWwgR2x5cGggb2JqZWN0c1xuXG4gICAgICBnbHlwaFJ1bi5nbHlwaHMgPSB0aGlzLmdseXBoSW5mb3MubWFwKGZ1bmN0aW9uIChnbHlwaEluZm8pIHtcbiAgICAgICAgcmV0dXJuIF90aGlzOS5mb250LmdldEdseXBoKGdseXBoSW5mby5pZCwgZ2x5cGhJbmZvLmNvZGVQb2ludHMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzI5LnBvc2l0aW9uID0gZnVuY3Rpb24gcG9zaXRpb24oZ2x5cGhSdW4pIHtcbiAgICBpZiAodGhpcy5zaGFwZXIuemVyb01hcmtXaWR0aHMgPT09ICdCRUZPUkVfR1BPUycpIHtcbiAgICAgIHRoaXMuemVyb01hcmtBZHZhbmNlcyhnbHlwaFJ1bi5wb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLkdQT1NQcm9jZXNzb3IpIHtcbiAgICAgIHRoaXMucGxhbi5wcm9jZXNzKHRoaXMuR1BPU1Byb2Nlc3NvciwgdGhpcy5nbHlwaEluZm9zLCBnbHlwaFJ1bi5wb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNoYXBlci56ZXJvTWFya1dpZHRocyA9PT0gJ0FGVEVSX0dQT1MnKSB7XG4gICAgICB0aGlzLnplcm9NYXJrQWR2YW5jZXMoZ2x5cGhSdW4ucG9zaXRpb25zKTtcbiAgICB9IC8vIFJldmVyc2UgdGhlIGdseXBocyBhbmQgcG9zaXRpb25zIGlmIHRoZSBzY3JpcHQgaXMgcmlnaHQtdG8tbGVmdFxuXG5cbiAgICBpZiAoZ2x5cGhSdW4uZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgZ2x5cGhSdW4uZ2x5cGhzLnJldmVyc2UoKTtcbiAgICAgIGdseXBoUnVuLnBvc2l0aW9ucy5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuR1BPU1Byb2Nlc3NvciAmJiB0aGlzLkdQT1NQcm9jZXNzb3IuZmVhdHVyZXM7XG4gIH07XG5cbiAgX3Byb3RvMjkuemVyb01hcmtBZHZhbmNlcyA9IGZ1bmN0aW9uIHplcm9NYXJrQWR2YW5jZXMocG9zaXRpb25zKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdseXBoSW5mb3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdseXBoSW5mb3NbaV0uaXNNYXJrKSB7XG4gICAgICAgIHBvc2l0aW9uc1tpXS54QWR2YW5jZSA9IDA7XG4gICAgICAgIHBvc2l0aW9uc1tpXS55QWR2YW5jZSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzI5LmNsZWFudXAgPSBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHRoaXMuZ2x5cGhJbmZvcyA9IG51bGw7XG4gICAgdGhpcy5wbGFuID0gbnVsbDtcbiAgICB0aGlzLnNoYXBlciA9IG51bGw7XG4gIH07XG5cbiAgX3Byb3RvMjkuZ2V0QXZhaWxhYmxlRmVhdHVyZXMgPSBmdW5jdGlvbiBnZXRBdmFpbGFibGVGZWF0dXJlcyhzY3JpcHQsIGxhbmd1YWdlKSB7XG4gICAgdmFyIGZlYXR1cmVzID0gW107XG5cbiAgICBpZiAodGhpcy5HU1VCUHJvY2Vzc29yKSB7XG4gICAgICB0aGlzLkdTVUJQcm9jZXNzb3Iuc2VsZWN0U2NyaXB0KHNjcmlwdCwgbGFuZ3VhZ2UpO1xuICAgICAgZmVhdHVyZXMucHVzaC5hcHBseShmZWF0dXJlcywgT2JqZWN0LmtleXModGhpcy5HU1VCUHJvY2Vzc29yLmZlYXR1cmVzKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuR1BPU1Byb2Nlc3Nvcikge1xuICAgICAgdGhpcy5HUE9TUHJvY2Vzc29yLnNlbGVjdFNjcmlwdChzY3JpcHQsIGxhbmd1YWdlKTtcbiAgICAgIGZlYXR1cmVzLnB1c2guYXBwbHkoZmVhdHVyZXMsIE9iamVjdC5rZXlzKHRoaXMuR1BPU1Byb2Nlc3Nvci5mZWF0dXJlcykpO1xuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlcztcbiAgfTtcblxuICByZXR1cm4gT1RMYXlvdXRFbmdpbmU7XG59KCk7XG5cbnZhciBMYXlvdXRFbmdpbmUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMYXlvdXRFbmdpbmUoZm9udCkge1xuICAgIHRoaXMuZm9udCA9IGZvbnQ7XG4gICAgdGhpcy51bmljb2RlTGF5b3V0RW5naW5lID0gbnVsbDtcbiAgICB0aGlzLmtlcm5Qcm9jZXNzb3IgPSBudWxsOyAvLyBDaG9vc2UgYW4gYWR2YW5jZWQgbGF5b3V0IGVuZ2luZS4gV2UgdHJ5IHRoZSBBQVQgbW9yeCB0YWJsZSBmaXJzdCBzaW5jZSBtb3JlXG4gICAgLy8gc2NyaXB0cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCBiZWNhdXNlIHRoZSBzaGFwaW5nIGxvZ2ljIGlzIGJ1aWx0IGludG8gdGhlIGZvbnQuXG5cbiAgICBpZiAodGhpcy5mb250Lm1vcngpIHtcbiAgICAgIHRoaXMuZW5naW5lID0gbmV3IEFBVExheW91dEVuZ2luZSh0aGlzLmZvbnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mb250LkdTVUIgfHwgdGhpcy5mb250LkdQT1MpIHtcbiAgICAgIHRoaXMuZW5naW5lID0gbmV3IE9UTGF5b3V0RW5naW5lKHRoaXMuZm9udCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIF9wcm90bzMwID0gTGF5b3V0RW5naW5lLnByb3RvdHlwZTtcblxuICBfcHJvdG8zMC5sYXlvdXQgPSBmdW5jdGlvbiBsYXlvdXQoc3RyaW5nLCBmZWF0dXJlcywgc2NyaXB0LCBsYW5ndWFnZSwgZGlyZWN0aW9uKSB7XG4gICAgLy8gTWFrZSB0aGUgZmVhdHVyZXMgcGFyYW1ldGVyIG9wdGlvbmFsXG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRpcmVjdGlvbiA9IGxhbmd1YWdlO1xuICAgICAgbGFuZ3VhZ2UgPSBzY3JpcHQ7XG4gICAgICBzY3JpcHQgPSBmZWF0dXJlcztcbiAgICAgIGZlYXR1cmVzID0gW107XG4gICAgfSAvLyBNYXAgc3RyaW5nIHRvIGdseXBocyBpZiBuZWVkZWRcblxuXG4gICAgaWYgKHR5cGVvZiBzdHJpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBBdHRlbXB0IHRvIGRldGVjdCB0aGUgc2NyaXB0IGZyb20gdGhlIHN0cmluZyBpZiBub3QgcHJvdmlkZWQuXG4gICAgICBpZiAoc2NyaXB0ID09IG51bGwpIHtcbiAgICAgICAgc2NyaXB0ID0gZm9yU3RyaW5nKHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBnbHlwaHMgPSB0aGlzLmZvbnQuZ2x5cGhzRm9yU3RyaW5nKHN0cmluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEF0dGVtcHQgdG8gZGV0ZWN0IHRoZSBzY3JpcHQgZnJvbSB0aGUgZ2x5cGggY29kZSBwb2ludHMgaWYgbm90IHByb3ZpZGVkLlxuICAgICAgaWYgKHNjcmlwdCA9PSBudWxsKSB7XG4gICAgICAgIHZhciBjb2RlUG9pbnRzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yNjQgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHN0cmluZyksIF9zdGVwNjQ7ICEoX3N0ZXA2NCA9IF9pdGVyYXRvcjY0KCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIGdseXBoID0gX3N0ZXA2NC52YWx1ZTtcbiAgICAgICAgICBjb2RlUG9pbnRzLnB1c2guYXBwbHkoY29kZVBvaW50cywgZ2x5cGguY29kZVBvaW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBzY3JpcHQgPSBmb3JDb2RlUG9pbnRzKGNvZGVQb2ludHMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ2x5cGhzID0gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBnbHlwaFJ1biA9IG5ldyBHbHlwaFJ1bihnbHlwaHMsIGZlYXR1cmVzLCBzY3JpcHQsIGxhbmd1YWdlLCBkaXJlY3Rpb24pOyAvLyBSZXR1cm4gZWFybHkgaWYgdGhlcmUgYXJlIG5vIGdseXBoc1xuXG4gICAgaWYgKGdseXBocy5sZW5ndGggPT09IDApIHtcbiAgICAgIGdseXBoUnVuLnBvc2l0aW9ucyA9IFtdO1xuICAgICAgcmV0dXJuIGdseXBoUnVuO1xuICAgIH0gLy8gU2V0dXAgdGhlIGFkdmFuY2VkIGxheW91dCBlbmdpbmVcblxuXG4gICAgaWYgKHRoaXMuZW5naW5lICYmIHRoaXMuZW5naW5lLnNldHVwKSB7XG4gICAgICB0aGlzLmVuZ2luZS5zZXR1cChnbHlwaFJ1bik7XG4gICAgfSAvLyBTdWJzdGl0dXRlIGFuZCBwb3NpdGlvbiB0aGUgZ2x5cGhzXG5cblxuICAgIHRoaXMuc3Vic3RpdHV0ZShnbHlwaFJ1bik7XG4gICAgdGhpcy5wb3NpdGlvbihnbHlwaFJ1bik7XG4gICAgdGhpcy5oaWRlRGVmYXVsdElnbm9yYWJsZXMoZ2x5cGhSdW4uZ2x5cGhzLCBnbHlwaFJ1bi5wb3NpdGlvbnMpOyAvLyBMZXQgdGhlIGxheW91dCBlbmdpbmUgY2xlYW4gdXAgYW55IHN0YXRlIGl0IG1pZ2h0IGhhdmVcblxuICAgIGlmICh0aGlzLmVuZ2luZSAmJiB0aGlzLmVuZ2luZS5jbGVhbnVwKSB7XG4gICAgICB0aGlzLmVuZ2luZS5jbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdseXBoUnVuO1xuICB9O1xuXG4gIF9wcm90bzMwLnN1YnN0aXR1dGUgPSBmdW5jdGlvbiBzdWJzdGl0dXRlKGdseXBoUnVuKSB7XG4gICAgLy8gQ2FsbCB0aGUgYWR2YW5jZWQgbGF5b3V0IGVuZ2luZSB0byBtYWtlIHN1YnN0aXR1dGlvbnNcbiAgICBpZiAodGhpcy5lbmdpbmUgJiYgdGhpcy5lbmdpbmUuc3Vic3RpdHV0ZSkge1xuICAgICAgdGhpcy5lbmdpbmUuc3Vic3RpdHV0ZShnbHlwaFJ1bik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzMwLnBvc2l0aW9uID0gZnVuY3Rpb24gcG9zaXRpb24oZ2x5cGhSdW4pIHtcbiAgICAvLyBHZXQgaW5pdGlhbCBnbHlwaCBwb3NpdGlvbnNcbiAgICBnbHlwaFJ1bi5wb3NpdGlvbnMgPSBnbHlwaFJ1bi5nbHlwaHMubWFwKGZ1bmN0aW9uIChnbHlwaCkge1xuICAgICAgcmV0dXJuIG5ldyBHbHlwaFBvc2l0aW9uKGdseXBoLmFkdmFuY2VXaWR0aCk7XG4gICAgfSk7XG4gICAgdmFyIHBvc2l0aW9uZWQgPSBudWxsOyAvLyBDYWxsIHRoZSBhZHZhbmNlZCBsYXlvdXQgZW5naW5lLiBSZXR1cm5zIHRoZSBmZWF0dXJlcyBhcHBsaWVkLlxuXG4gICAgaWYgKHRoaXMuZW5naW5lICYmIHRoaXMuZW5naW5lLnBvc2l0aW9uKSB7XG4gICAgICBwb3NpdGlvbmVkID0gdGhpcy5lbmdpbmUucG9zaXRpb24oZ2x5cGhSdW4pO1xuICAgIH0gLy8gaWYgdGhlcmUgaXMgbm8gR1BPUyB0YWJsZSwgdXNlIHVuaWNvZGUgcHJvcGVydGllcyB0byBwb3NpdGlvbiBtYXJrcy5cblxuXG4gICAgaWYgKCFwb3NpdGlvbmVkICYmICghdGhpcy5lbmdpbmUgfHwgdGhpcy5lbmdpbmUuZmFsbGJhY2tQb3NpdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy51bmljb2RlTGF5b3V0RW5naW5lKSB7XG4gICAgICAgIHRoaXMudW5pY29kZUxheW91dEVuZ2luZSA9IG5ldyBVbmljb2RlTGF5b3V0RW5naW5lKHRoaXMuZm9udCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudW5pY29kZUxheW91dEVuZ2luZS5wb3NpdGlvbkdseXBocyhnbHlwaFJ1bi5nbHlwaHMsIGdseXBoUnVuLnBvc2l0aW9ucyk7XG4gICAgfSAvLyBpZiBrZXJuaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR1BPUywgZG8ga2VybmluZyB3aXRoIHRoZSBUcnVlVHlwZS9BQVQga2VybiB0YWJsZVxuXG5cbiAgICBpZiAoKCFwb3NpdGlvbmVkIHx8ICFwb3NpdGlvbmVkLmtlcm4pICYmIGdseXBoUnVuLmZlYXR1cmVzLmtlcm4gIT09IGZhbHNlICYmIHRoaXMuZm9udC5rZXJuKSB7XG4gICAgICBpZiAoIXRoaXMua2VyblByb2Nlc3Nvcikge1xuICAgICAgICB0aGlzLmtlcm5Qcm9jZXNzb3IgPSBuZXcgS2VyblByb2Nlc3Nvcih0aGlzLmZvbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmtlcm5Qcm9jZXNzb3IucHJvY2VzcyhnbHlwaFJ1bi5nbHlwaHMsIGdseXBoUnVuLnBvc2l0aW9ucyk7XG4gICAgICBnbHlwaFJ1bi5mZWF0dXJlcy5rZXJuID0gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMzAuaGlkZURlZmF1bHRJZ25vcmFibGVzID0gZnVuY3Rpb24gaGlkZURlZmF1bHRJZ25vcmFibGVzKGdseXBocywgcG9zaXRpb25zKSB7XG4gICAgdmFyIHNwYWNlID0gdGhpcy5mb250LmdseXBoRm9yQ29kZVBvaW50KDB4MjApO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmlzRGVmYXVsdElnbm9yYWJsZShnbHlwaHNbaV0uY29kZVBvaW50c1swXSkpIHtcbiAgICAgICAgZ2x5cGhzW2ldID0gc3BhY2U7XG4gICAgICAgIHBvc2l0aW9uc1tpXS54QWR2YW5jZSA9IDA7XG4gICAgICAgIHBvc2l0aW9uc1tpXS55QWR2YW5jZSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzMwLmlzRGVmYXVsdElnbm9yYWJsZSA9IGZ1bmN0aW9uIGlzRGVmYXVsdElnbm9yYWJsZShjaCkge1xuICAgIC8vIEZyb20gRGVyaXZlZENvcmVQcm9wZXJ0aWVzLnR4dCBpbiB0aGUgVW5pY29kZSBkYXRhYmFzZSxcbiAgICAvLyBtaW51cyBVKzExNUYsIFUrMTE2MCwgVSszMTY0IGFuZCBVK0ZGQTAsIHdoaWNoIGlzIHdoYXRcbiAgICAvLyBIYXJmYnV6eiBhbmQgVW5pc2NyaWJlIGRvLlxuICAgIHZhciBwbGFuZSA9IGNoID4+IDE2O1xuXG4gICAgaWYgKHBsYW5lID09PSAwKSB7XG4gICAgICAvLyBCTVBcbiAgICAgIHN3aXRjaCAoY2ggPj4gOCkge1xuICAgICAgICBjYXNlIDB4MDA6XG4gICAgICAgICAgcmV0dXJuIGNoID09PSAweDAwQUQ7XG5cbiAgICAgICAgY2FzZSAweDAzOlxuICAgICAgICAgIHJldHVybiBjaCA9PT0gMHgwMzRGO1xuXG4gICAgICAgIGNhc2UgMHgwNjpcbiAgICAgICAgICByZXR1cm4gY2ggPT09IDB4MDYxQztcblxuICAgICAgICBjYXNlIDB4MTc6XG4gICAgICAgICAgcmV0dXJuIDB4MTdCNCA8PSBjaCAmJiBjaCA8PSAweDE3QjU7XG5cbiAgICAgICAgY2FzZSAweDE4OlxuICAgICAgICAgIHJldHVybiAweDE4MEIgPD0gY2ggJiYgY2ggPD0gMHgxODBFO1xuXG4gICAgICAgIGNhc2UgMHgyMDpcbiAgICAgICAgICByZXR1cm4gMHgyMDBCIDw9IGNoICYmIGNoIDw9IDB4MjAwRiB8fCAweDIwMkEgPD0gY2ggJiYgY2ggPD0gMHgyMDJFIHx8IDB4MjA2MCA8PSBjaCAmJiBjaCA8PSAweDIwNkY7XG5cbiAgICAgICAgY2FzZSAweEZFOlxuICAgICAgICAgIHJldHVybiAweEZFMDAgPD0gY2ggJiYgY2ggPD0gMHhGRTBGIHx8IGNoID09PSAweEZFRkY7XG5cbiAgICAgICAgY2FzZSAweEZGOlxuICAgICAgICAgIHJldHVybiAweEZGRjAgPD0gY2ggJiYgY2ggPD0gMHhGRkY4O1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlciBwbGFuZXNcbiAgICAgIHN3aXRjaCAocGxhbmUpIHtcbiAgICAgICAgY2FzZSAweDAxOlxuICAgICAgICAgIHJldHVybiAweDFCQ0EwIDw9IGNoICYmIGNoIDw9IDB4MUJDQTMgfHwgMHgxRDE3MyA8PSBjaCAmJiBjaCA8PSAweDFEMTdBO1xuXG4gICAgICAgIGNhc2UgMHgwRTpcbiAgICAgICAgICByZXR1cm4gMHhFMDAwMCA8PSBjaCAmJiBjaCA8PSAweEUwRkZGO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8zMC5nZXRBdmFpbGFibGVGZWF0dXJlcyA9IGZ1bmN0aW9uIGdldEF2YWlsYWJsZUZlYXR1cmVzKHNjcmlwdCwgbGFuZ3VhZ2UpIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBbXTtcblxuICAgIGlmICh0aGlzLmVuZ2luZSkge1xuICAgICAgZmVhdHVyZXMucHVzaC5hcHBseShmZWF0dXJlcywgdGhpcy5lbmdpbmUuZ2V0QXZhaWxhYmxlRmVhdHVyZXMoc2NyaXB0LCBsYW5ndWFnZSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvbnQua2VybiAmJiBmZWF0dXJlcy5pbmRleE9mKCdrZXJuJykgPT09IC0xKSB7XG4gICAgICBmZWF0dXJlcy5wdXNoKCdrZXJuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZlYXR1cmVzO1xuICB9O1xuXG4gIF9wcm90bzMwLnN0cmluZ3NGb3JHbHlwaCA9IGZ1bmN0aW9uIHN0cmluZ3NGb3JHbHlwaChnaWQpIHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG4gICAgdmFyIGNvZGVQb2ludHMgPSB0aGlzLmZvbnQuX2NtYXBQcm9jZXNzb3IuY29kZVBvaW50c0ZvckdseXBoKGdpZCk7XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3I2NSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoY29kZVBvaW50cyksIF9zdGVwNjU7ICEoX3N0ZXA2NSA9IF9pdGVyYXRvcjY1KCkpLmRvbmU7KSB7XG4gICAgICB2YXIgY29kZVBvaW50ID0gX3N0ZXA2NS52YWx1ZTtcbiAgICAgIHJlc3VsdC5hZGQoU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5naW5lICYmIHRoaXMuZW5naW5lLnN0cmluZ3NGb3JHbHlwaCkge1xuICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yNjYgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMuZW5naW5lLnN0cmluZ3NGb3JHbHlwaChnaWQpKSwgX3N0ZXA2NjsgIShfc3RlcDY2ID0gX2l0ZXJhdG9yNjYoKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIHN0cmluZyA9IF9zdGVwNjYudmFsdWU7XG4gICAgICAgIHJlc3VsdC5hZGQoc3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShyZXN1bHQpO1xuICB9O1xuXG4gIHJldHVybiBMYXlvdXRFbmdpbmU7XG59KCk7XG5cbnZhciBTVkdfQ09NTUFORFMgPSB7XG4gIG1vdmVUbzogJ00nLFxuICBsaW5lVG86ICdMJyxcbiAgcXVhZHJhdGljQ3VydmVUbzogJ1EnLFxuICBiZXppZXJDdXJ2ZVRvOiAnQycsXG4gIGNsb3NlUGF0aDogJ1onXG59O1xuLyoqXHJcbiAqIFBhdGggb2JqZWN0cyBhcmUgcmV0dXJuZWQgYnkgZ2x5cGhzIGFuZCByZXByZXNlbnQgdGhlIGFjdHVhbFxyXG4gKiB2ZWN0b3Igb3V0bGluZXMgZm9yIGVhY2ggZ2x5cGggaW4gdGhlIGZvbnQuIFBhdGhzIGNhbiBiZSBjb252ZXJ0ZWRcclxuICogdG8gU1ZHIHBhdGggZGF0YSBzdHJpbmdzLCBvciB0byBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgYXBwbGllZCB0b1xyXG4gKiByZW5kZXIgdGhlIHBhdGggdG8gYSBncmFwaGljcyBjb250ZXh0LlxyXG4gKi9cblxudmFyIFBhdGggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQYXRoKCkge1xuICAgIHRoaXMuY29tbWFuZHMgPSBbXTtcbiAgICB0aGlzLl9iYm94ID0gbnVsbDtcbiAgICB0aGlzLl9jYm94ID0gbnVsbDtcbiAgfVxuICAvKipcclxuICAgKiBDb21waWxlcyB0aGUgcGF0aCB0byBhIEphdmFTY3JpcHQgZnVuY3Rpb24gdGhhdCBjYW4gYmUgYXBwbGllZCB3aXRoXHJcbiAgICogYSBncmFwaGljcyBjb250ZXh0IGluIG9yZGVyIHRvIHJlbmRlciB0aGUgcGF0aC5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICovXG5cblxuICB2YXIgX3Byb3RvMzEgPSBQYXRoLnByb3RvdHlwZTtcblxuICBfcHJvdG8zMS50b0Z1bmN0aW9uID0gZnVuY3Rpb24gdG9GdW5jdGlvbigpIHtcbiAgICB2YXIgX3RoaXMxMCA9IHRoaXM7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKGN0eCkge1xuICAgICAgX3RoaXMxMC5jb21tYW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjdHhbYy5jb21tYW5kXS5hcHBseShjdHgsIGMuYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIC8qKlxyXG4gICAqIENvbnZlcnRzIHRoZSBwYXRoIHRvIGFuIFNWRyBwYXRoIGRhdGEgc3RyaW5nXHJcbiAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMzEudG9TVkcgPSBmdW5jdGlvbiB0b1NWRygpIHtcbiAgICB2YXIgY21kcyA9IHRoaXMuY29tbWFuZHMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICB2YXIgYXJncyA9IGMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChhcmcgKiAxMDApIC8gMTAwO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQoU1ZHX0NPTU1BTkRTW2MuY29tbWFuZF0pLmNvbmNhdChhcmdzLmpvaW4oJyAnKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNtZHMuam9pbignJyk7XG4gIH1cbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgXCJjb250cm9sIGJveFwiIG9mIGEgcGF0aC5cclxuICAgKiBUaGlzIGlzIGxpa2UgdGhlIGJvdW5kaW5nIGJveCwgYnV0IGl0IGluY2x1ZGVzIGFsbCBwb2ludHMgaW5jbHVkaW5nXHJcbiAgICogY29udHJvbCBwb2ludHMgb2YgYmV6aWVyIHNlZ21lbnRzIGFuZCBpcyBtdWNoIGZhc3RlciB0byBjb21wdXRlIHRoYW5cclxuICAgKiB0aGUgcmVhbCBib3VuZGluZyBib3guXHJcbiAgICogQHR5cGUge0JCb3h9XHJcbiAgICovXG4gIDtcblxuICAvKipcclxuICAgKiBBcHBsaWVzIGEgbWFwcGluZyBmdW5jdGlvbiB0byBlYWNoIHBvaW50IGluIHRoZSBwYXRoLlxyXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuXHJcbiAgICogQHJldHVybiB7UGF0aH1cclxuICAgKi9cbiAgX3Byb3RvMzEubWFwUG9pbnRzID0gZnVuY3Rpb24gbWFwUG9pbnRzKGZuKSB7XG4gICAgdmFyIHBhdGggPSBuZXcgUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yNjcgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMuY29tbWFuZHMpLCBfc3RlcDY3OyAhKF9zdGVwNjcgPSBfaXRlcmF0b3I2NygpKS5kb25lOykge1xuICAgICAgdmFyIGMgPSBfc3RlcDY3LnZhbHVlO1xuICAgICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjLmFyZ3MubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIF9mbiA9IGZuKGMuYXJnc1tpXSwgYy5hcmdzW2kgKyAxXSksXG4gICAgICAgICAgICB4ID0gX2ZuWzBdLFxuICAgICAgICAgICAgeSA9IF9mblsxXTtcblxuICAgICAgICBhcmdzLnB1c2goeCwgeSk7XG4gICAgICB9XG5cbiAgICAgIHBhdGhbYy5jb21tYW5kXS5hcHBseShwYXRoLCBhcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuICAvKipcclxuICAgKiBUcmFuc2Zvcm1zIHRoZSBwYXRoIGJ5IHRoZSBnaXZlbiBtYXRyaXguXHJcbiAgICovXG4gIDtcblxuICBfcHJvdG8zMS50cmFuc2Zvcm0gPSBmdW5jdGlvbiB0cmFuc2Zvcm0obTAsIG0xLCBtMiwgbTMsIG00LCBtNSkge1xuICAgIHJldHVybiB0aGlzLm1hcFBvaW50cyhmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgeCA9IG0wICogeCArIG0yICogeSArIG00O1xuICAgICAgeSA9IG0xICogeCArIG0zICogeSArIG01O1xuICAgICAgcmV0dXJuIFt4LCB5XTtcbiAgICB9KTtcbiAgfVxuICAvKipcclxuICAgKiBUcmFuc2xhdGVzIHRoZSBwYXRoIGJ5IHRoZSBnaXZlbiBvZmZzZXQuXHJcbiAgICovXG4gIDtcblxuICBfcHJvdG8zMS50cmFuc2xhdGUgPSBmdW5jdGlvbiB0cmFuc2xhdGUoeCwgeSkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybSgxLCAwLCAwLCAxLCB4LCB5KTtcbiAgfVxuICAvKipcclxuICAgKiBSb3RhdGVzIHRoZSBwYXRoIGJ5IHRoZSBnaXZlbiBhbmdsZSAoaW4gcmFkaWFucykuXHJcbiAgICovXG4gIDtcblxuICBfcHJvdG8zMS5yb3RhdGUgPSBmdW5jdGlvbiByb3RhdGUoYW5nbGUpIHtcbiAgICB2YXIgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKGNvcywgc2luLCAtc2luLCBjb3MsIDAsIDApO1xuICB9XG4gIC8qKlxyXG4gICAqIFNjYWxlcyB0aGUgcGF0aC5cclxuICAgKi9cbiAgO1xuXG4gIF9wcm90bzMxLnNjYWxlID0gZnVuY3Rpb24gc2NhbGUoc2NhbGVYLCBzY2FsZVkpIHtcbiAgICBpZiAoc2NhbGVZID09PSB2b2lkIDApIHtcbiAgICAgIHNjYWxlWSA9IHNjYWxlWDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oc2NhbGVYLCAwLCAwLCBzY2FsZVksIDAsIDApO1xuICB9O1xuXG4gIF9jcmVhdGVDbGFzcyhQYXRoLCBbe1xuICAgIGtleTogXCJjYm94XCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBpZiAoIXRoaXMuX2Nib3gpIHtcbiAgICAgICAgdmFyIGNib3ggPSBuZXcgQkJveCgpO1xuXG4gICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjY4ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLmNvbW1hbmRzKSwgX3N0ZXA2ODsgIShfc3RlcDY4ID0gX2l0ZXJhdG9yNjgoKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgY29tbWFuZCA9IF9zdGVwNjgudmFsdWU7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1hbmQuYXJncy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY2JveC5hZGRQb2ludChjb21tYW5kLmFyZ3NbaV0sIGNvbW1hbmQuYXJnc1tpICsgMV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Nib3ggPSBPYmplY3QuZnJlZXplKGNib3gpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fY2JveDtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBleGFjdCBib3VuZGluZyBib3ggb2YgdGhlIHBhdGggYnkgZXZhbHVhdGluZyBjdXJ2ZSBzZWdtZW50cy5cclxuICAgICAqIFNsb3dlciB0byBjb21wdXRlIHRoYW4gdGhlIGNvbnRyb2wgYm94LCBidXQgbW9yZSBhY2N1cmF0ZS5cclxuICAgICAqIEB0eXBlIHtCQm94fVxyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJiYm94XCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBpZiAodGhpcy5fYmJveCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmJveDtcbiAgICAgIH1cblxuICAgICAgdmFyIGJib3ggPSBuZXcgQkJveCgpO1xuICAgICAgdmFyIGN4ID0gMCxcbiAgICAgICAgICBjeSA9IDA7XG5cbiAgICAgIHZhciBmID0gZnVuY3Rpb24gZih0KSB7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdygxIC0gdCwgMykgKiBwMFtpXSArIDMgKiBNYXRoLnBvdygxIC0gdCwgMikgKiB0ICogcDFbaV0gKyAzICogKDEgLSB0KSAqIE1hdGgucG93KHQsIDIpICogcDJbaV0gKyBNYXRoLnBvdyh0LCAzKSAqIHAzW2ldO1xuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yNjkgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMuY29tbWFuZHMpLCBfc3RlcDY5OyAhKF9zdGVwNjkgPSBfaXRlcmF0b3I2OSgpKS5kb25lOykge1xuICAgICAgICB2YXIgYyA9IF9zdGVwNjkudmFsdWU7XG5cbiAgICAgICAgc3dpdGNoIChjLmNvbW1hbmQpIHtcbiAgICAgICAgICBjYXNlICdtb3ZlVG8nOlxuICAgICAgICAgIGNhc2UgJ2xpbmVUbyc6XG4gICAgICAgICAgICB2YXIgX2MkYXJncyA9IGMuYXJncyxcbiAgICAgICAgICAgICAgICB4ID0gX2MkYXJnc1swXSxcbiAgICAgICAgICAgICAgICB5ID0gX2MkYXJnc1sxXTtcbiAgICAgICAgICAgIGJib3guYWRkUG9pbnQoeCwgeSk7XG4gICAgICAgICAgICBjeCA9IHg7XG4gICAgICAgICAgICBjeSA9IHk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3F1YWRyYXRpY0N1cnZlVG8nOlxuICAgICAgICAgIGNhc2UgJ2JlemllckN1cnZlVG8nOlxuICAgICAgICAgICAgaWYgKGMuY29tbWFuZCA9PT0gJ3F1YWRyYXRpY0N1cnZlVG8nKSB7XG4gICAgICAgICAgICAgIC8vIGh0dHA6Ly9mb250Zm9yZ2Uub3JnL2Jlemllci5odG1sXG4gICAgICAgICAgICAgIHZhciBfYyRhcmdzMiA9IGMuYXJncyxcbiAgICAgICAgICAgICAgICAgIHFwMXggPSBfYyRhcmdzMlswXSxcbiAgICAgICAgICAgICAgICAgIHFwMXkgPSBfYyRhcmdzMlsxXSxcbiAgICAgICAgICAgICAgICAgIHAzeCA9IF9jJGFyZ3MyWzJdLFxuICAgICAgICAgICAgICAgICAgcDN5ID0gX2MkYXJnczJbM107XG4gICAgICAgICAgICAgIHZhciBjcDF4ID0gY3ggKyAyIC8gMyAqIChxcDF4IC0gY3gpOyAvLyBDUDEgPSBRUDAgKyAyLzMgKiAoUVAxLVFQMClcblxuICAgICAgICAgICAgICB2YXIgY3AxeSA9IGN5ICsgMiAvIDMgKiAocXAxeSAtIGN5KTtcbiAgICAgICAgICAgICAgdmFyIGNwMnggPSBwM3ggKyAyIC8gMyAqIChxcDF4IC0gcDN4KTsgLy8gQ1AyID0gUVAyICsgMi8zICogKFFQMS1RUDIpXG5cbiAgICAgICAgICAgICAgdmFyIGNwMnkgPSBwM3kgKyAyIC8gMyAqIChxcDF5IC0gcDN5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBfYyRhcmdzMyA9IGMuYXJncyxcbiAgICAgICAgICAgICAgICAgIGNwMXggPSBfYyRhcmdzM1swXSxcbiAgICAgICAgICAgICAgICAgIGNwMXkgPSBfYyRhcmdzM1sxXSxcbiAgICAgICAgICAgICAgICAgIGNwMnggPSBfYyRhcmdzM1syXSxcbiAgICAgICAgICAgICAgICAgIGNwMnkgPSBfYyRhcmdzM1szXSxcbiAgICAgICAgICAgICAgICAgIHAzeCA9IF9jJGFyZ3MzWzRdLFxuICAgICAgICAgICAgICAgICAgcDN5ID0gX2MkYXJnczNbNV07XG4gICAgICAgICAgICB9IC8vIGh0dHA6Ly9ibG9nLmhhY2tlcnMtY2FmZS5uZXQvMjAwOS8wNi9ob3ctdG8tY2FsY3VsYXRlLWJlemllci1jdXJ2ZXMtYm91bmRpbmcuaHRtbFxuXG5cbiAgICAgICAgICAgIGJib3guYWRkUG9pbnQocDN4LCBwM3kpO1xuICAgICAgICAgICAgdmFyIHAwID0gW2N4LCBjeV07XG4gICAgICAgICAgICB2YXIgcDEgPSBbY3AxeCwgY3AxeV07XG4gICAgICAgICAgICB2YXIgcDIgPSBbY3AyeCwgY3AyeV07XG4gICAgICAgICAgICB2YXIgcDMgPSBbcDN4LCBwM3ldO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIGIgPSA2ICogcDBbaV0gLSAxMiAqIHAxW2ldICsgNiAqIHAyW2ldO1xuICAgICAgICAgICAgICB2YXIgYSA9IC0zICogcDBbaV0gKyA5ICogcDFbaV0gLSA5ICogcDJbaV0gKyAzICogcDNbaV07XG4gICAgICAgICAgICAgIGMgPSAzICogcDFbaV0gLSAzICogcDBbaV07XG5cbiAgICAgICAgICAgICAgaWYgKGEgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHQgPSAtYyAvIGI7XG5cbiAgICAgICAgICAgICAgICBpZiAoMCA8IHQgJiYgdCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJib3guYWRkUG9pbnQoZih0KSwgYmJveC5tYXhZKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBiYm94LmFkZFBvaW50KGJib3gubWF4WCwgZih0KSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgYjJhYyA9IE1hdGgucG93KGIsIDIpIC0gNCAqIGMgKiBhO1xuXG4gICAgICAgICAgICAgIGlmIChiMmFjIDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIHQxID0gKC1iICsgTWF0aC5zcXJ0KGIyYWMpKSAvICgyICogYSk7XG5cbiAgICAgICAgICAgICAgaWYgKDAgPCB0MSAmJiB0MSA8IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgYmJveC5hZGRQb2ludChmKHQxKSwgYmJveC5tYXhZKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgIGJib3guYWRkUG9pbnQoYmJveC5tYXhYLCBmKHQxKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIHQyID0gKC1iIC0gTWF0aC5zcXJ0KGIyYWMpKSAvICgyICogYSk7XG5cbiAgICAgICAgICAgICAgaWYgKDAgPCB0MiAmJiB0MiA8IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgYmJveC5hZGRQb2ludChmKHQyKSwgYmJveC5tYXhZKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgIGJib3guYWRkUG9pbnQoYmJveC5tYXhYLCBmKHQyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN4ID0gcDN4O1xuICAgICAgICAgICAgY3kgPSBwM3k7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fYmJveCA9IE9iamVjdC5mcmVlemUoYmJveCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBhdGg7XG59KCk7XG5cbnZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGNvbW1hbmQpIHtcbiAgUGF0aC5wcm90b3R5cGVbY29tbWFuZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fYmJveCA9IHRoaXMuX2Nib3ggPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgdGhpcy5jb21tYW5kcy5wdXNoKHtcbiAgICAgIGNvbW1hbmQ6IGNvbW1hbmQsXG4gICAgICBhcmdzOiBhcmdzXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59O1xuXG5mb3IgKHZhciBfaTIzID0gMCwgX2FyciA9IFsnbW92ZVRvJywgJ2xpbmVUbycsICdxdWFkcmF0aWNDdXJ2ZVRvJywgJ2JlemllckN1cnZlVG8nLCAnY2xvc2VQYXRoJ107IF9pMjMgPCBfYXJyLmxlbmd0aDsgX2kyMysrKSB7XG4gIHZhciBjb21tYW5kID0gX2FycltfaTIzXTtcblxuICBfbG9vcChjb21tYW5kKTtcbn1cblxudmFyIFN0YW5kYXJkTmFtZXMgPSBbJy5ub3RkZWYnLCAnLm51bGwnLCAnbm9ubWFya2luZ3JldHVybicsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVzaW5nbGUnLCAncGFyZW5sZWZ0JywgJ3BhcmVucmlnaHQnLCAnYXN0ZXJpc2snLCAncGx1cycsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ3NsYXNoJywgJ3plcm8nLCAnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJywgJ2ZpdmUnLCAnc2l4JywgJ3NldmVuJywgJ2VpZ2h0JywgJ25pbmUnLCAnY29sb24nLCAnc2VtaWNvbG9uJywgJ2xlc3MnLCAnZXF1YWwnLCAnZ3JlYXRlcicsICdxdWVzdGlvbicsICdhdCcsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSScsICdKJywgJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLCAnVScsICdWJywgJ1cnLCAnWCcsICdZJywgJ1onLCAnYnJhY2tldGxlZnQnLCAnYmFja3NsYXNoJywgJ2JyYWNrZXRyaWdodCcsICdhc2NpaWNpcmN1bScsICd1bmRlcnNjb3JlJywgJ2dyYXZlJywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICdBZGllcmVzaXMnLCAnQXJpbmcnLCAnQ2NlZGlsbGEnLCAnRWFjdXRlJywgJ050aWxkZScsICdPZGllcmVzaXMnLCAnVWRpZXJlc2lzJywgJ2FhY3V0ZScsICdhZ3JhdmUnLCAnYWNpcmN1bWZsZXgnLCAnYWRpZXJlc2lzJywgJ2F0aWxkZScsICdhcmluZycsICdjY2VkaWxsYScsICdlYWN1dGUnLCAnZWdyYXZlJywgJ2VjaXJjdW1mbGV4JywgJ2VkaWVyZXNpcycsICdpYWN1dGUnLCAnaWdyYXZlJywgJ2ljaXJjdW1mbGV4JywgJ2lkaWVyZXNpcycsICdudGlsZGUnLCAnb2FjdXRlJywgJ29ncmF2ZScsICdvY2lyY3VtZmxleCcsICdvZGllcmVzaXMnLCAnb3RpbGRlJywgJ3VhY3V0ZScsICd1Z3JhdmUnLCAndWNpcmN1bWZsZXgnLCAndWRpZXJlc2lzJywgJ2RhZ2dlcicsICdkZWdyZWUnLCAnY2VudCcsICdzdGVybGluZycsICdzZWN0aW9uJywgJ2J1bGxldCcsICdwYXJhZ3JhcGgnLCAnZ2VybWFuZGJscycsICdyZWdpc3RlcmVkJywgJ2NvcHlyaWdodCcsICd0cmFkZW1hcmsnLCAnYWN1dGUnLCAnZGllcmVzaXMnLCAnbm90ZXF1YWwnLCAnQUUnLCAnT3NsYXNoJywgJ2luZmluaXR5JywgJ3BsdXNtaW51cycsICdsZXNzZXF1YWwnLCAnZ3JlYXRlcmVxdWFsJywgJ3llbicsICdtdScsICdwYXJ0aWFsZGlmZicsICdzdW1tYXRpb24nLCAncHJvZHVjdCcsICdwaScsICdpbnRlZ3JhbCcsICdvcmRmZW1pbmluZScsICdvcmRtYXNjdWxpbmUnLCAnT21lZ2EnLCAnYWUnLCAnb3NsYXNoJywgJ3F1ZXN0aW9uZG93bicsICdleGNsYW1kb3duJywgJ2xvZ2ljYWxub3QnLCAncmFkaWNhbCcsICdmbG9yaW4nLCAnYXBwcm94ZXF1YWwnLCAnRGVsdGEnLCAnZ3VpbGxlbW90bGVmdCcsICdndWlsbGVtb3RyaWdodCcsICdlbGxpcHNpcycsICdub25icmVha2luZ3NwYWNlJywgJ0FncmF2ZScsICdBdGlsZGUnLCAnT3RpbGRlJywgJ09FJywgJ29lJywgJ2VuZGFzaCcsICdlbWRhc2gnLCAncXVvdGVkYmxsZWZ0JywgJ3F1b3RlZGJscmlnaHQnLCAncXVvdGVsZWZ0JywgJ3F1b3RlcmlnaHQnLCAnZGl2aWRlJywgJ2xvemVuZ2UnLCAneWRpZXJlc2lzJywgJ1lkaWVyZXNpcycsICdmcmFjdGlvbicsICdjdXJyZW5jeScsICdndWlsc2luZ2xsZWZ0JywgJ2d1aWxzaW5nbHJpZ2h0JywgJ2ZpJywgJ2ZsJywgJ2RhZ2dlcmRibCcsICdwZXJpb2RjZW50ZXJlZCcsICdxdW90ZXNpbmdsYmFzZScsICdxdW90ZWRibGJhc2UnLCAncGVydGhvdXNhbmQnLCAnQWNpcmN1bWZsZXgnLCAnRWNpcmN1bWZsZXgnLCAnQWFjdXRlJywgJ0VkaWVyZXNpcycsICdFZ3JhdmUnLCAnSWFjdXRlJywgJ0ljaXJjdW1mbGV4JywgJ0lkaWVyZXNpcycsICdJZ3JhdmUnLCAnT2FjdXRlJywgJ09jaXJjdW1mbGV4JywgJ2FwcGxlJywgJ09ncmF2ZScsICdVYWN1dGUnLCAnVWNpcmN1bWZsZXgnLCAnVWdyYXZlJywgJ2RvdGxlc3NpJywgJ2NpcmN1bWZsZXgnLCAndGlsZGUnLCAnbWFjcm9uJywgJ2JyZXZlJywgJ2RvdGFjY2VudCcsICdyaW5nJywgJ2NlZGlsbGEnLCAnaHVuZ2FydW1sYXV0JywgJ29nb25laycsICdjYXJvbicsICdMc2xhc2gnLCAnbHNsYXNoJywgJ1NjYXJvbicsICdzY2Fyb24nLCAnWmNhcm9uJywgJ3pjYXJvbicsICdicm9rZW5iYXInLCAnRXRoJywgJ2V0aCcsICdZYWN1dGUnLCAneWFjdXRlJywgJ1Rob3JuJywgJ3Rob3JuJywgJ21pbnVzJywgJ211bHRpcGx5JywgJ29uZXN1cGVyaW9yJywgJ3R3b3N1cGVyaW9yJywgJ3RocmVlc3VwZXJpb3InLCAnb25laGFsZicsICdvbmVxdWFydGVyJywgJ3RocmVlcXVhcnRlcnMnLCAnZnJhbmMnLCAnR2JyZXZlJywgJ2dicmV2ZScsICdJZG90YWNjZW50JywgJ1NjZWRpbGxhJywgJ3NjZWRpbGxhJywgJ0NhY3V0ZScsICdjYWN1dGUnLCAnQ2Nhcm9uJywgJ2NjYXJvbicsICdkY3JvYXQnXTtcblxudmFyIF9jbGFzcyQzO1xuLyoqXHJcbiAqIEdseXBoIG9iamVjdHMgcmVwcmVzZW50IGEgZ2x5cGggaW4gdGhlIGZvbnQuIFRoZXkgaGF2ZSB2YXJpb3VzIHByb3BlcnRpZXMgZm9yIGFjY2Vzc2luZyBtZXRyaWNzIGFuZFxyXG4gKiB0aGUgYWN0dWFsIHZlY3RvciBwYXRoIHRoZSBnbHlwaCByZXByZXNlbnRzLCBhbmQgbWV0aG9kcyBmb3IgcmVuZGVyaW5nIHRoZSBnbHlwaCB0byBhIGdyYXBoaWNzIGNvbnRleHQuXHJcbiAqXHJcbiAqIFlvdSBkbyBub3QgY3JlYXRlIGdseXBoIG9iamVjdHMgZGlyZWN0bHkuIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdmFyaW91cyBtZXRob2RzIG9uIHRoZSBmb250IG9iamVjdC5cclxuICogVGhlcmUgYXJlIHNldmVyYWwgc3ViY2xhc3NlcyBvZiB0aGUgYmFzZSBHbHlwaCBjbGFzcyBpbnRlcm5hbGx5IHRoYXQgbWF5IGJlIHJldHVybmVkIGRlcGVuZGluZ1xyXG4gKiBvbiB0aGUgZm9udCBmb3JtYXQsIGJ1dCB0aGV5IGFsbCBpbmhlcml0IGZyb20gdGhpcyBjbGFzcy5cclxuICovXG5cblxudmFyIEdseXBoID0gKF9jbGFzcyQzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gR2x5cGgoaWQsIGNvZGVQb2ludHMsIGZvbnQpIHtcbiAgICAvKipcclxuICAgICAqIFRoZSBnbHlwaCBpZCBpbiB0aGUgZm9udFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICAvKipcclxuICAgICAqIEFuIGFycmF5IG9mIHVuaWNvZGUgY29kZSBwb2ludHMgdGhhdCBhcmUgcmVwcmVzZW50ZWQgYnkgdGhpcyBnbHlwaC5cclxuICAgICAqIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBjb2RlIHBvaW50cyBpbiB0aGUgY2FzZSBvZiBsaWdhdHVyZXMgYW5kIG90aGVyIGdseXBoc1xyXG4gICAgICogdGhhdCByZXByZXNlbnQgbXVsdGlwbGUgdmlzdWFsIGNoYXJhY3RlcnMuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgKi9cblxuICAgIHRoaXMuY29kZVBvaW50cyA9IGNvZGVQb2ludHM7XG4gICAgdGhpcy5fZm9udCA9IGZvbnQ7IC8vIFRPRE86IGdldCB0aGlzIGluZm8gZnJvbSBHREVGIGlmIGF2YWlsYWJsZVxuXG4gICAgdGhpcy5pc01hcmsgPSB0aGlzLmNvZGVQb2ludHMubGVuZ3RoID4gMCAmJiB0aGlzLmNvZGVQb2ludHMuZXZlcnkodW5pY29kZS5pc01hcmspO1xuICAgIHRoaXMuaXNMaWdhdHVyZSA9IHRoaXMuY29kZVBvaW50cy5sZW5ndGggPiAxO1xuICB9XG5cbiAgdmFyIF9wcm90bzMyID0gR2x5cGgucHJvdG90eXBlO1xuXG4gIF9wcm90bzMyLl9nZXRQYXRoID0gZnVuY3Rpb24gX2dldFBhdGgoKSB7XG4gICAgcmV0dXJuIG5ldyBQYXRoKCk7XG4gIH07XG5cbiAgX3Byb3RvMzIuX2dldENCb3ggPSBmdW5jdGlvbiBfZ2V0Q0JveCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoLmNib3g7XG4gIH07XG5cbiAgX3Byb3RvMzIuX2dldEJCb3ggPSBmdW5jdGlvbiBfZ2V0QkJveCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoLmJib3g7XG4gIH07XG5cbiAgX3Byb3RvMzIuX2dldFRhYmxlTWV0cmljcyA9IGZ1bmN0aW9uIF9nZXRUYWJsZU1ldHJpY3ModGFibGUpIHtcbiAgICBpZiAodGhpcy5pZCA8IHRhYmxlLm1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGFibGUubWV0cmljcy5nZXQodGhpcy5pZCk7XG4gICAgfVxuXG4gICAgdmFyIG1ldHJpYyA9IHRhYmxlLm1ldHJpY3MuZ2V0KHRhYmxlLm1ldHJpY3MubGVuZ3RoIC0gMSk7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGFkdmFuY2U6IG1ldHJpYyA/IG1ldHJpYy5hZHZhbmNlIDogMCxcbiAgICAgIGJlYXJpbmc6IHRhYmxlLmJlYXJpbmdzLmdldCh0aGlzLmlkIC0gdGFibGUubWV0cmljcy5sZW5ndGgpIHx8IDBcbiAgICB9O1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgX3Byb3RvMzIuX2dldE1ldHJpY3MgPSBmdW5jdGlvbiBfZ2V0TWV0cmljcyhjYm94KSB7XG4gICAgaWYgKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tZXRyaWNzO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRfZ2V0VGFibGVNZXRyaWMgPSB0aGlzLl9nZXRUYWJsZU1ldHJpY3ModGhpcy5fZm9udC5obXR4KSxcbiAgICAgICAgYWR2YW5jZVdpZHRoID0gX3RoaXMkX2dldFRhYmxlTWV0cmljLmFkdmFuY2UsXG4gICAgICAgIGxlZnRCZWFyaW5nID0gX3RoaXMkX2dldFRhYmxlTWV0cmljLmJlYXJpbmc7IC8vIEZvciB2ZXJ0aWNhbCBtZXRyaWNzLCB1c2Ugdm10eCBpZiBhdmFpbGFibGUsIG9yIGZhbGwgYmFjayB0byBnbG9iYWwgZGF0YSBmcm9tIE9TLzIgb3IgaGhlYVxuXG5cbiAgICBpZiAodGhpcy5fZm9udC52bXR4KSB7XG4gICAgICB2YXIgX3RoaXMkX2dldFRhYmxlTWV0cmljMiA9IHRoaXMuX2dldFRhYmxlTWV0cmljcyh0aGlzLl9mb250LnZtdHgpLFxuICAgICAgICAgIGFkdmFuY2VIZWlnaHQgPSBfdGhpcyRfZ2V0VGFibGVNZXRyaWMyLmFkdmFuY2UsXG4gICAgICAgICAgdG9wQmVhcmluZyA9IF90aGlzJF9nZXRUYWJsZU1ldHJpYzIuYmVhcmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9zMjtcblxuICAgICAgaWYgKHR5cGVvZiBjYm94ID09PSAndW5kZWZpbmVkJyB8fCBjYm94ID09PSBudWxsKSB7XG4gICAgICAgIGNib3ggPSB0aGlzLmNib3g7XG4gICAgICB9XG5cbiAgICAgIGlmICgob3MyID0gdGhpcy5fZm9udFsnT1MvMiddKSAmJiBvczIudmVyc2lvbiA+IDApIHtcbiAgICAgICAgdmFyIGFkdmFuY2VIZWlnaHQgPSBNYXRoLmFicyhvczIudHlwb0FzY2VuZGVyIC0gb3MyLnR5cG9EZXNjZW5kZXIpO1xuICAgICAgICB2YXIgdG9wQmVhcmluZyA9IG9zMi50eXBvQXNjZW5kZXIgLSBjYm94Lm1heFk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaGhlYSA9IHRoaXMuX2ZvbnQuaGhlYTtcbiAgICAgICAgdmFyIGFkdmFuY2VIZWlnaHQgPSBNYXRoLmFicyhoaGVhLmFzY2VudCAtIGhoZWEuZGVzY2VudCk7XG4gICAgICAgIHZhciB0b3BCZWFyaW5nID0gaGhlYS5hc2NlbnQgLSBjYm94Lm1heFk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2ZvbnQuX3ZhcmlhdGlvblByb2Nlc3NvciAmJiB0aGlzLl9mb250LkhWQVIpIHtcbiAgICAgIGFkdmFuY2VXaWR0aCArPSB0aGlzLl9mb250Ll92YXJpYXRpb25Qcm9jZXNzb3IuZ2V0QWR2YW5jZUFkanVzdG1lbnQodGhpcy5pZCwgdGhpcy5fZm9udC5IVkFSKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWV0cmljcyA9IHtcbiAgICAgIGFkdmFuY2VXaWR0aDogYWR2YW5jZVdpZHRoLFxuICAgICAgYWR2YW5jZUhlaWdodDogYWR2YW5jZUhlaWdodCxcbiAgICAgIGxlZnRCZWFyaW5nOiBsZWZ0QmVhcmluZyxcbiAgICAgIHRvcEJlYXJpbmc6IHRvcEJlYXJpbmdcbiAgICB9O1xuICB9XG4gIC8qKlxyXG4gICAqIFRoZSBnbHlwaOKAmXMgY29udHJvbCBib3guXHJcbiAgICogVGhpcyBpcyBvZnRlbiB0aGUgc2FtZSBhcyB0aGUgYm91bmRpbmcgYm94LCBidXQgaXMgZmFzdGVyIHRvIGNvbXB1dGUuXHJcbiAgICogQmVjYXVzZSBvZiB0aGUgd2F5IGJlemllciBjdXJ2ZXMgYXJlIGRlZmluZWQsIHNvbWUgb2YgdGhlIGNvbnRyb2wgcG9pbnRzXHJcbiAgICogY2FuIGJlIG91dHNpZGUgb2YgdGhlIGJvdW5kaW5nIGJveC4gV2hlcmUgYGJib3hgIHRha2VzIHRoaXMgaW50byBhY2NvdW50LFxyXG4gICAqIGBjYm94YCBkb2VzIG5vdC4gVGh1cywgY2JveCBpcyBsZXNzIGFjY3VyYXRlLCBidXQgZmFzdGVyIHRvIGNvbXB1dGUuXHJcbiAgICogU2VlIFtoZXJlXShodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy9mcmVldHlwZTIvZG9jcy9nbHlwaHMvZ2x5cGhzLTYuaHRtbCNzZWN0aW9uLTIpXHJcbiAgICogZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtCQm94fVxyXG4gICAqL1xuICA7XG5cbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIHBhdGggc2NhbGVkIHRvIHRoZSBnaXZlbiBmb250IHNpemUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgKiBAcmV0dXJuIHtQYXRofVxyXG4gICAqL1xuICBfcHJvdG8zMi5nZXRTY2FsZWRQYXRoID0gZnVuY3Rpb24gZ2V0U2NhbGVkUGF0aChzaXplKSB7XG4gICAgdmFyIHNjYWxlID0gMSAvIHRoaXMuX2ZvbnQudW5pdHNQZXJFbSAqIHNpemU7XG4gICAgcmV0dXJuIHRoaXMucGF0aC5zY2FsZShzY2FsZSk7XG4gIH1cbiAgLyoqXHJcbiAgICogVGhlIGdseXBoJ3MgYWR2YW5jZSB3aWR0aC5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMzIuX2dldE5hbWUgPSBmdW5jdGlvbiBfZ2V0TmFtZSgpIHtcbiAgICB2YXIgcG9zdCA9IHRoaXMuX2ZvbnQucG9zdDtcblxuICAgIGlmICghcG9zdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3dpdGNoIChwb3N0LnZlcnNpb24pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIFN0YW5kYXJkTmFtZXNbdGhpcy5pZF07XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdmFyIGlkID0gcG9zdC5nbHlwaE5hbWVJbmRleFt0aGlzLmlkXTtcblxuICAgICAgICBpZiAoaWQgPCBTdGFuZGFyZE5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBTdGFuZGFyZE5hbWVzW2lkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwb3N0Lm5hbWVzW2lkIC0gU3RhbmRhcmROYW1lcy5sZW5ndGhdO1xuXG4gICAgICBjYXNlIDIuNTpcbiAgICAgICAgcmV0dXJuIFN0YW5kYXJkTmFtZXNbdGhpcy5pZCArIHBvc3Qub2Zmc2V0c1t0aGlzLmlkXV07XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocG9zdC5tYXBbdGhpcy5pZF0pO1xuICAgIH1cbiAgfVxuICAvKipcclxuICAgKiBUaGUgZ2x5cGgncyBuYW1lXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cbiAgO1xuXG4gIC8qKlxyXG4gICAqIFJlbmRlcnMgdGhlIGdseXBoIHRvIHRoZSBnaXZlbiBncmFwaGljcyBjb250ZXh0LCBhdCB0aGUgc3BlY2lmaWVkIGZvbnQgc2l6ZS5cclxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyZH0gY3R4XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgKi9cbiAgX3Byb3RvMzIucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKGN0eCwgc2l6ZSkge1xuICAgIGN0eC5zYXZlKCk7XG4gICAgdmFyIHNjYWxlID0gMSAvIHRoaXMuX2ZvbnQuaGVhZC51bml0c1BlckVtICogc2l6ZTtcbiAgICBjdHguc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICB2YXIgZm4gPSB0aGlzLnBhdGgudG9GdW5jdGlvbigpO1xuICAgIGZuKGN0eCk7XG4gICAgY3R4LmZpbGwoKTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICB9O1xuXG4gIF9jcmVhdGVDbGFzcyhHbHlwaCwgW3tcbiAgICBrZXk6IFwiY2JveFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENCb3goKTtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ2x5cGjigJlzIGJvdW5kaW5nIGJveCwgaS5lLiB0aGUgcmVjdGFuZ2xlIHRoYXQgZW5jbG9zZXMgdGhlXHJcbiAgICAgKiBnbHlwaCBvdXRsaW5lIGFzIHRpZ2h0bHkgYXMgcG9zc2libGUuXHJcbiAgICAgKiBAdHlwZSB7QkJveH1cclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiYmJveFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEJCb3goKTtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBBIHZlY3RvciBQYXRoIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdseXBoIG91dGxpbmUuXHJcbiAgICAgKiBAdHlwZSB7UGF0aH1cclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicGF0aFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgLy8gQ2FjaGUgdGhlIHBhdGggc28gd2Ugb25seSBkZWNvZGUgaXQgb25jZVxuICAgICAgLy8gRGVjb2RpbmcgaXMgYWN0dWFsbHkgcGVyZm9ybWVkIGJ5IHN1YmNsYXNzZXNcbiAgICAgIHJldHVybiB0aGlzLl9nZXRQYXRoKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkdmFuY2VXaWR0aFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldHJpY3MoKS5hZHZhbmNlV2lkdGg7XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogVGhlIGdseXBoJ3MgYWR2YW5jZSBoZWlnaHQuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJhZHZhbmNlSGVpZ2h0XCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0cmljcygpLmFkdmFuY2VIZWlnaHQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxpZ2F0dXJlQ2FyZXRQb3NpdGlvbnNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHt9XG4gIH0sIHtcbiAgICBrZXk6IFwibmFtZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldE5hbWUoKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gR2x5cGg7XG59KCksIChfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKF9jbGFzcyQzLnByb3RvdHlwZSwgXCJjYm94XCIsIFtjYWNoZV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX2NsYXNzJDMucHJvdG90eXBlLCBcImNib3hcIiksIF9jbGFzcyQzLnByb3RvdHlwZSksIF9hcHBseURlY29yYXRlZERlc2NyaXB0b3IoX2NsYXNzJDMucHJvdG90eXBlLCBcImJib3hcIiwgW2NhY2hlXSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihfY2xhc3MkMy5wcm90b3R5cGUsIFwiYmJveFwiKSwgX2NsYXNzJDMucHJvdG90eXBlKSwgX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcihfY2xhc3MkMy5wcm90b3R5cGUsIFwicGF0aFwiLCBbY2FjaGVdLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKF9jbGFzcyQzLnByb3RvdHlwZSwgXCJwYXRoXCIpLCBfY2xhc3MkMy5wcm90b3R5cGUpLCBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKF9jbGFzcyQzLnByb3RvdHlwZSwgXCJhZHZhbmNlV2lkdGhcIiwgW2NhY2hlXSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihfY2xhc3MkMy5wcm90b3R5cGUsIFwiYWR2YW5jZVdpZHRoXCIpLCBfY2xhc3MkMy5wcm90b3R5cGUpLCBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKF9jbGFzcyQzLnByb3RvdHlwZSwgXCJhZHZhbmNlSGVpZ2h0XCIsIFtjYWNoZV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX2NsYXNzJDMucHJvdG90eXBlLCBcImFkdmFuY2VIZWlnaHRcIiksIF9jbGFzcyQzLnByb3RvdHlwZSksIF9hcHBseURlY29yYXRlZERlc2NyaXB0b3IoX2NsYXNzJDMucHJvdG90eXBlLCBcIm5hbWVcIiwgW2NhY2hlXSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihfY2xhc3MkMy5wcm90b3R5cGUsIFwibmFtZVwiKSwgX2NsYXNzJDMucHJvdG90eXBlKSksIF9jbGFzcyQzKTtcbnZhciBHbHlmSGVhZGVyID0gbmV3IHIuU3RydWN0KHtcbiAgbnVtYmVyT2ZDb250b3Vyczogci5pbnQxNixcbiAgLy8gaWYgbmVnYXRpdmUsIHRoaXMgaXMgYSBjb21wb3NpdGUgZ2x5cGhcbiAgeE1pbjogci5pbnQxNixcbiAgeU1pbjogci5pbnQxNixcbiAgeE1heDogci5pbnQxNixcbiAgeU1heDogci5pbnQxNlxufSk7IC8vIEZsYWdzIGZvciBzaW1wbGUgZ2x5cGhzXG5cbnZhciBPTl9DVVJWRSA9IDEgPDwgMDtcbnZhciBYX1NIT1JUX1ZFQ1RPUiA9IDEgPDwgMTtcbnZhciBZX1NIT1JUX1ZFQ1RPUiA9IDEgPDwgMjtcbnZhciBSRVBFQVQgPSAxIDw8IDM7XG52YXIgU0FNRV9YID0gMSA8PCA0O1xudmFyIFNBTUVfWSA9IDEgPDwgNTsgLy8gRmxhZ3MgZm9yIGNvbXBvc2l0ZSBnbHlwaHNcblxudmFyIEFSR18xX0FORF8yX0FSRV9XT1JEUyA9IDEgPDwgMDtcbnZhciBXRV9IQVZFX0FfU0NBTEUgPSAxIDw8IDM7XG52YXIgTU9SRV9DT01QT05FTlRTID0gMSA8PCA1O1xudmFyIFdFX0hBVkVfQU5fWF9BTkRfWV9TQ0FMRSA9IDEgPDwgNjtcbnZhciBXRV9IQVZFX0FfVFdPX0JZX1RXTyA9IDEgPDwgNztcbnZhciBXRV9IQVZFX0lOU1RSVUNUSU9OUyA9IDEgPDwgODtcblxudmFyIFBvaW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUG9pbnQob25DdXJ2ZSwgZW5kQ29udG91ciwgeCwgeSkge1xuICAgIGlmICh4ID09PSB2b2lkIDApIHtcbiAgICAgIHggPSAwO1xuICAgIH1cblxuICAgIGlmICh5ID09PSB2b2lkIDApIHtcbiAgICAgIHkgPSAwO1xuICAgIH1cblxuICAgIHRoaXMub25DdXJ2ZSA9IG9uQ3VydmU7XG4gICAgdGhpcy5lbmRDb250b3VyID0gZW5kQ29udG91cjtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gIH1cblxuICB2YXIgX3Byb3RvMzMgPSBQb2ludC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMzMuY29weSA9IGZ1bmN0aW9uIGNvcHkoKSB7XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLm9uQ3VydmUsIHRoaXMuZW5kQ29udG91ciwgdGhpcy54LCB0aGlzLnkpO1xuICB9O1xuXG4gIHJldHVybiBQb2ludDtcbn0oKTsgLy8gUmVwcmVzZW50cyBhIGNvbXBvbmVudCBpbiBhIGNvbXBvc2l0ZSBnbHlwaFxuXG5cbnZhciBDb21wb25lbnQgPSBmdW5jdGlvbiBDb21wb25lbnQoZ2x5cGhJRCwgZHgsIGR5KSB7XG4gIHRoaXMuZ2x5cGhJRCA9IGdseXBoSUQ7XG4gIHRoaXMuZHggPSBkeDtcbiAgdGhpcy5keSA9IGR5O1xuICB0aGlzLnBvcyA9IDA7XG4gIHRoaXMuc2NhbGVYID0gdGhpcy5zY2FsZVkgPSAxO1xuICB0aGlzLnNjYWxlMDEgPSB0aGlzLnNjYWxlMTAgPSAwO1xufTtcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgVHJ1ZVR5cGUgZ2x5cGguXHJcbiAqL1xuXG5cbnZhciBUVEZHbHlwaCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0dseXBoKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRURkdseXBoLCBfR2x5cGgpO1xuXG4gIGZ1bmN0aW9uIFRURkdseXBoKCkge1xuICAgIHJldHVybiBfR2x5cGguYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90bzM0ID0gVFRGR2x5cGgucHJvdG90eXBlO1xuXG4gIC8vIFBhcnNlcyBqdXN0IHRoZSBnbHlwaCBoZWFkZXIgYW5kIHJldHVybnMgdGhlIGJvdW5kaW5nIGJveFxuICBfcHJvdG8zNC5fZ2V0Q0JveCA9IGZ1bmN0aW9uIF9nZXRDQm94KGludGVybmFsKSB7XG4gICAgLy8gV2UgbmVlZCB0byBkZWNvZGUgdGhlIGdseXBoIGlmIHZhcmlhdGlvbiBwcm9jZXNzaW5nIGlzIHJlcXVlc3RlZCxcbiAgICAvLyBzbyBpdCdzIGVhc2llciBqdXN0IHRvIHJlY29tcHV0ZSB0aGUgcGF0aCdzIGNib3ggYWZ0ZXIgZGVjb2RpbmcuXG4gICAgaWYgKHRoaXMuX2ZvbnQuX3ZhcmlhdGlvblByb2Nlc3NvciAmJiAhaW50ZXJuYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhdGguY2JveDtcbiAgICB9XG5cbiAgICB2YXIgc3RyZWFtID0gdGhpcy5fZm9udC5fZ2V0VGFibGVTdHJlYW0oJ2dseWYnKTtcblxuICAgIHN0cmVhbS5wb3MgKz0gdGhpcy5fZm9udC5sb2NhLm9mZnNldHNbdGhpcy5pZF07XG4gICAgdmFyIGdseXBoID0gR2x5ZkhlYWRlci5kZWNvZGUoc3RyZWFtKTtcbiAgICB2YXIgY2JveCA9IG5ldyBCQm94KGdseXBoLnhNaW4sIGdseXBoLnlNaW4sIGdseXBoLnhNYXgsIGdseXBoLnlNYXgpO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKGNib3gpO1xuICB9IC8vIFBhcnNlcyBhIHNpbmdsZSBnbHlwaCBjb29yZGluYXRlXG4gIDtcblxuICBfcHJvdG8zNC5fcGFyc2VHbHlwaENvb3JkID0gZnVuY3Rpb24gX3BhcnNlR2x5cGhDb29yZChzdHJlYW0sIHByZXYsIHNob3J0LCBzYW1lKSB7XG4gICAgaWYgKHNob3J0KSB7XG4gICAgICB2YXIgdmFsID0gc3RyZWFtLnJlYWRVSW50OCgpO1xuXG4gICAgICBpZiAoIXNhbWUpIHtcbiAgICAgICAgdmFsID0gLXZhbDtcbiAgICAgIH1cblxuICAgICAgdmFsICs9IHByZXY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzYW1lKSB7XG4gICAgICAgIHZhciB2YWwgPSBwcmV2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbCA9IHByZXYgKyBzdHJlYW0ucmVhZEludDE2QkUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9IC8vIERlY29kZXMgdGhlIGdseXBoIGRhdGEgaW50byBwb2ludHMgZm9yIHNpbXBsZSBnbHlwaHMsXG4gIC8vIG9yIGNvbXBvbmVudHMgZm9yIGNvbXBvc2l0ZSBnbHlwaHNcbiAgO1xuXG4gIF9wcm90bzM0Ll9kZWNvZGUgPSBmdW5jdGlvbiBfZGVjb2RlKCkge1xuICAgIHZhciBnbHlmUG9zID0gdGhpcy5fZm9udC5sb2NhLm9mZnNldHNbdGhpcy5pZF07XG4gICAgdmFyIG5leHRQb3MgPSB0aGlzLl9mb250LmxvY2Eub2Zmc2V0c1t0aGlzLmlkICsgMV07IC8vIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgaXMgbm8gZGF0YSBmb3IgdGhpcyBnbHlwaFxuXG4gICAgaWYgKGdseWZQb3MgPT09IG5leHRQb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBzdHJlYW0gPSB0aGlzLl9mb250Ll9nZXRUYWJsZVN0cmVhbSgnZ2x5ZicpO1xuXG4gICAgc3RyZWFtLnBvcyArPSBnbHlmUG9zO1xuICAgIHZhciBzdGFydFBvcyA9IHN0cmVhbS5wb3M7XG4gICAgdmFyIGdseXBoID0gR2x5ZkhlYWRlci5kZWNvZGUoc3RyZWFtKTtcblxuICAgIGlmIChnbHlwaC5udW1iZXJPZkNvbnRvdXJzID4gMCkge1xuICAgICAgdGhpcy5fZGVjb2RlU2ltcGxlKGdseXBoLCBzdHJlYW0pO1xuICAgIH0gZWxzZSBpZiAoZ2x5cGgubnVtYmVyT2ZDb250b3VycyA8IDApIHtcbiAgICAgIHRoaXMuX2RlY29kZUNvbXBvc2l0ZShnbHlwaCwgc3RyZWFtLCBzdGFydFBvcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdseXBoO1xuICB9O1xuXG4gIF9wcm90bzM0Ll9kZWNvZGVTaW1wbGUgPSBmdW5jdGlvbiBfZGVjb2RlU2ltcGxlKGdseXBoLCBzdHJlYW0pIHtcbiAgICAvLyB0aGlzIGlzIGEgc2ltcGxlIGdseXBoXG4gICAgZ2x5cGgucG9pbnRzID0gW107XG4gICAgdmFyIGVuZFB0c09mQ29udG91cnMgPSBuZXcgci5BcnJheShyLnVpbnQxNiwgZ2x5cGgubnVtYmVyT2ZDb250b3VycykuZGVjb2RlKHN0cmVhbSk7XG4gICAgZ2x5cGguaW5zdHJ1Y3Rpb25zID0gbmV3IHIuQXJyYXkoci51aW50OCwgci51aW50MTYpLmRlY29kZShzdHJlYW0pO1xuICAgIHZhciBmbGFncyA9IFtdO1xuICAgIHZhciBudW1Db29yZHMgPSBlbmRQdHNPZkNvbnRvdXJzW2VuZFB0c09mQ29udG91cnMubGVuZ3RoIC0gMV0gKyAxO1xuXG4gICAgd2hpbGUgKGZsYWdzLmxlbmd0aCA8IG51bUNvb3Jkcykge1xuICAgICAgdmFyIGZsYWcgPSBzdHJlYW0ucmVhZFVJbnQ4KCk7XG4gICAgICBmbGFncy5wdXNoKGZsYWcpOyAvLyBjaGVjayBmb3IgcmVwZWF0IGZsYWdcblxuICAgICAgaWYgKGZsYWcgJiBSRVBFQVQpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gc3RyZWFtLnJlYWRVSW50OCgpO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIGZsYWdzLnB1c2goZmxhZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZsYWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZmxhZyA9IGZsYWdzW2ldO1xuICAgICAgdmFyIHBvaW50ID0gbmV3IFBvaW50KCEhKGZsYWcgJiBPTl9DVVJWRSksIGVuZFB0c09mQ29udG91cnMuaW5kZXhPZihpKSA+PSAwLCAwLCAwKTtcbiAgICAgIGdseXBoLnBvaW50cy5wdXNoKHBvaW50KTtcbiAgICB9XG5cbiAgICB2YXIgcHggPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGZsYWcgPSBmbGFnc1tpXTtcbiAgICAgIGdseXBoLnBvaW50c1tpXS54ID0gcHggPSB0aGlzLl9wYXJzZUdseXBoQ29vcmQoc3RyZWFtLCBweCwgZmxhZyAmIFhfU0hPUlRfVkVDVE9SLCBmbGFnICYgU0FNRV9YKTtcbiAgICB9XG5cbiAgICB2YXIgcHkgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGZsYWcgPSBmbGFnc1tpXTtcbiAgICAgIGdseXBoLnBvaW50c1tpXS55ID0gcHkgPSB0aGlzLl9wYXJzZUdseXBoQ29vcmQoc3RyZWFtLCBweSwgZmxhZyAmIFlfU0hPUlRfVkVDVE9SLCBmbGFnICYgU0FNRV9ZKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZm9udC5fdmFyaWF0aW9uUHJvY2Vzc29yKSB7XG4gICAgICB2YXIgcG9pbnRzID0gZ2x5cGgucG9pbnRzLnNsaWNlKCk7XG4gICAgICBwb2ludHMucHVzaC5hcHBseShwb2ludHMsIHRoaXMuX2dldFBoYW50b21Qb2ludHMoZ2x5cGgpKTtcblxuICAgICAgdGhpcy5fZm9udC5fdmFyaWF0aW9uUHJvY2Vzc29yLnRyYW5zZm9ybVBvaW50cyh0aGlzLmlkLCBwb2ludHMpO1xuXG4gICAgICBnbHlwaC5waGFudG9tUG9pbnRzID0gcG9pbnRzLnNsaWNlKC00KTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH07XG5cbiAgX3Byb3RvMzQuX2RlY29kZUNvbXBvc2l0ZSA9IGZ1bmN0aW9uIF9kZWNvZGVDb21wb3NpdGUoZ2x5cGgsIHN0cmVhbSwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIC8vIHRoaXMgaXMgYSBjb21wb3NpdGUgZ2x5cGhcbiAgICBnbHlwaC5jb21wb25lbnRzID0gW107XG4gICAgdmFyIGhhdmVJbnN0cnVjdGlvbnMgPSBmYWxzZTtcbiAgICB2YXIgZmxhZ3MgPSBNT1JFX0NPTVBPTkVOVFM7XG5cbiAgICB3aGlsZSAoZmxhZ3MgJiBNT1JFX0NPTVBPTkVOVFMpIHtcbiAgICAgIGZsYWdzID0gc3RyZWFtLnJlYWRVSW50MTZCRSgpO1xuICAgICAgdmFyIGdQb3MgPSBzdHJlYW0ucG9zIC0gb2Zmc2V0O1xuICAgICAgdmFyIGdseXBoSUQgPSBzdHJlYW0ucmVhZFVJbnQxNkJFKCk7XG5cbiAgICAgIGlmICghaGF2ZUluc3RydWN0aW9ucykge1xuICAgICAgICBoYXZlSW5zdHJ1Y3Rpb25zID0gKGZsYWdzICYgV0VfSEFWRV9JTlNUUlVDVElPTlMpICE9PSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmxhZ3MgJiBBUkdfMV9BTkRfMl9BUkVfV09SRFMpIHtcbiAgICAgICAgdmFyIGR4ID0gc3RyZWFtLnJlYWRJbnQxNkJFKCk7XG4gICAgICAgIHZhciBkeSA9IHN0cmVhbS5yZWFkSW50MTZCRSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGR4ID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG4gICAgICAgIHZhciBkeSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudChnbHlwaElELCBkeCwgZHkpO1xuICAgICAgY29tcG9uZW50LnBvcyA9IGdQb3M7XG5cbiAgICAgIGlmIChmbGFncyAmIFdFX0hBVkVfQV9TQ0FMRSkge1xuICAgICAgICAvLyBmaXhlZCBudW1iZXIgd2l0aCAxNCBiaXRzIG9mIGZyYWN0aW9uXG4gICAgICAgIGNvbXBvbmVudC5zY2FsZVggPSBjb21wb25lbnQuc2NhbGVZID0gKHN0cmVhbS5yZWFkVUludDgoKSA8PCAyNCB8IHN0cmVhbS5yZWFkVUludDgoKSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgfSBlbHNlIGlmIChmbGFncyAmIFdFX0hBVkVfQU5fWF9BTkRfWV9TQ0FMRSkge1xuICAgICAgICBjb21wb25lbnQuc2NhbGVYID0gKHN0cmVhbS5yZWFkVUludDgoKSA8PCAyNCB8IHN0cmVhbS5yZWFkVUludDgoKSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICBjb21wb25lbnQuc2NhbGVZID0gKHN0cmVhbS5yZWFkVUludDgoKSA8PCAyNCB8IHN0cmVhbS5yZWFkVUludDgoKSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgfSBlbHNlIGlmIChmbGFncyAmIFdFX0hBVkVfQV9UV09fQllfVFdPKSB7XG4gICAgICAgIGNvbXBvbmVudC5zY2FsZVggPSAoc3RyZWFtLnJlYWRVSW50OCgpIDw8IDI0IHwgc3RyZWFtLnJlYWRVSW50OCgpIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgIGNvbXBvbmVudC5zY2FsZTAxID0gKHN0cmVhbS5yZWFkVUludDgoKSA8PCAyNCB8IHN0cmVhbS5yZWFkVUludDgoKSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICBjb21wb25lbnQuc2NhbGUxMCA9IChzdHJlYW0ucmVhZFVJbnQ4KCkgPDwgMjQgfCBzdHJlYW0ucmVhZFVJbnQ4KCkgPDwgMTYpIC8gMTA3Mzc0MTgyNDtcbiAgICAgICAgY29tcG9uZW50LnNjYWxlWSA9IChzdHJlYW0ucmVhZFVJbnQ4KCkgPDwgMjQgfCBzdHJlYW0ucmVhZFVJbnQ4KCkgPDwgMTYpIC8gMTA3Mzc0MTgyNDtcbiAgICAgIH1cblxuICAgICAgZ2x5cGguY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2ZvbnQuX3ZhcmlhdGlvblByb2Nlc3Nvcikge1xuICAgICAgdmFyIHBvaW50cyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdseXBoLmNvbXBvbmVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IGdseXBoLmNvbXBvbmVudHNbal07XG4gICAgICAgIHBvaW50cy5wdXNoKG5ldyBQb2ludCh0cnVlLCB0cnVlLCBjb21wb25lbnQuZHgsIGNvbXBvbmVudC5keSkpO1xuICAgICAgfVxuXG4gICAgICBwb2ludHMucHVzaC5hcHBseShwb2ludHMsIHRoaXMuX2dldFBoYW50b21Qb2ludHMoZ2x5cGgpKTtcblxuICAgICAgdGhpcy5fZm9udC5fdmFyaWF0aW9uUHJvY2Vzc29yLnRyYW5zZm9ybVBvaW50cyh0aGlzLmlkLCBwb2ludHMpO1xuXG4gICAgICBnbHlwaC5waGFudG9tUG9pbnRzID0gcG9pbnRzLnNwbGljZSgtNCwgNCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgZ2x5cGguY29tcG9uZW50c1tpXS5keCA9IHBvaW50Lng7XG4gICAgICAgIGdseXBoLmNvbXBvbmVudHNbaV0uZHkgPSBwb2ludC55O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXZlSW5zdHJ1Y3Rpb25zO1xuICB9O1xuXG4gIF9wcm90bzM0Ll9nZXRQaGFudG9tUG9pbnRzID0gZnVuY3Rpb24gX2dldFBoYW50b21Qb2ludHMoZ2x5cGgpIHtcbiAgICB2YXIgY2JveCA9IHRoaXMuX2dldENCb3godHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljcyA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9tZXRyaWNzID0gR2x5cGgucHJvdG90eXBlLl9nZXRNZXRyaWNzLmNhbGwodGhpcywgY2JveCk7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJF9tZXRyaWNzID0gdGhpcy5fbWV0cmljcyxcbiAgICAgICAgYWR2YW5jZVdpZHRoID0gX3RoaXMkX21ldHJpY3MuYWR2YW5jZVdpZHRoLFxuICAgICAgICBhZHZhbmNlSGVpZ2h0ID0gX3RoaXMkX21ldHJpY3MuYWR2YW5jZUhlaWdodCxcbiAgICAgICAgbGVmdEJlYXJpbmcgPSBfdGhpcyRfbWV0cmljcy5sZWZ0QmVhcmluZyxcbiAgICAgICAgdG9wQmVhcmluZyA9IF90aGlzJF9tZXRyaWNzLnRvcEJlYXJpbmc7XG4gICAgcmV0dXJuIFtuZXcgUG9pbnQoZmFsc2UsIHRydWUsIGdseXBoLnhNaW4gLSBsZWZ0QmVhcmluZywgMCksIG5ldyBQb2ludChmYWxzZSwgdHJ1ZSwgZ2x5cGgueE1pbiAtIGxlZnRCZWFyaW5nICsgYWR2YW5jZVdpZHRoLCAwKSwgbmV3IFBvaW50KGZhbHNlLCB0cnVlLCAwLCBnbHlwaC55TWF4ICsgdG9wQmVhcmluZyksIG5ldyBQb2ludChmYWxzZSwgdHJ1ZSwgMCwgZ2x5cGgueU1heCArIHRvcEJlYXJpbmcgKyBhZHZhbmNlSGVpZ2h0KV07XG4gIH0gLy8gRGVjb2RlcyBmb250IGRhdGEsIHJlc29sdmVzIGNvbXBvc2l0ZSBnbHlwaHMsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGNvbnRvdXJzXG4gIDtcblxuICBfcHJvdG8zNC5fZ2V0Q29udG91cnMgPSBmdW5jdGlvbiBfZ2V0Q29udG91cnMoKSB7XG4gICAgdmFyIGdseXBoID0gdGhpcy5fZGVjb2RlKCk7XG5cbiAgICBpZiAoIWdseXBoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IFtdO1xuXG4gICAgaWYgKGdseXBoLm51bWJlck9mQ29udG91cnMgPCAwKSB7XG4gICAgICAvLyByZXNvbHZlIGNvbXBvc2l0ZSBnbHlwaHNcbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjcwID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShnbHlwaC5jb21wb25lbnRzKSwgX3N0ZXA3MDsgIShfc3RlcDcwID0gX2l0ZXJhdG9yNzAoKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IF9zdGVwNzAudmFsdWU7XG5cbiAgICAgICAgdmFyIF9jb250b3VycyA9IHRoaXMuX2ZvbnQuZ2V0R2x5cGgoY29tcG9uZW50LmdseXBoSUQpLl9nZXRDb250b3VycygpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2NvbnRvdXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNvbnRvdXIgPSBfY29udG91cnNbaV07XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbnRvdXIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBfcG9pbnQgPSBjb250b3VyW2pdO1xuICAgICAgICAgICAgdmFyIHggPSBfcG9pbnQueCAqIGNvbXBvbmVudC5zY2FsZVggKyBfcG9pbnQueSAqIGNvbXBvbmVudC5zY2FsZTAxICsgY29tcG9uZW50LmR4O1xuICAgICAgICAgICAgdmFyIHkgPSBfcG9pbnQueSAqIGNvbXBvbmVudC5zY2FsZVkgKyBfcG9pbnQueCAqIGNvbXBvbmVudC5zY2FsZTEwICsgY29tcG9uZW50LmR5O1xuICAgICAgICAgICAgcG9pbnRzLnB1c2gobmV3IFBvaW50KF9wb2ludC5vbkN1cnZlLCBfcG9pbnQuZW5kQ29udG91ciwgeCwgeSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwb2ludHMgPSBnbHlwaC5wb2ludHMgfHwgW107XG4gICAgfSAvLyBSZWNvbXB1dGUgYW5kIGNhY2hlIG1ldHJpY3MgaWYgd2UgcGVyZm9ybWVkIHZhcmlhdGlvbiBwcm9jZXNzaW5nLCBhbmQgZG9uJ3QgaGF2ZSBhbiBIVkFSIHRhYmxlXG5cblxuICAgIGlmIChnbHlwaC5waGFudG9tUG9pbnRzICYmICF0aGlzLl9mb250LmRpcmVjdG9yeS50YWJsZXMuSFZBUikge1xuICAgICAgdGhpcy5fbWV0cmljcy5hZHZhbmNlV2lkdGggPSBnbHlwaC5waGFudG9tUG9pbnRzWzFdLnggLSBnbHlwaC5waGFudG9tUG9pbnRzWzBdLng7XG4gICAgICB0aGlzLl9tZXRyaWNzLmFkdmFuY2VIZWlnaHQgPSBnbHlwaC5waGFudG9tUG9pbnRzWzNdLnkgLSBnbHlwaC5waGFudG9tUG9pbnRzWzJdLnk7XG4gICAgICB0aGlzLl9tZXRyaWNzLmxlZnRCZWFyaW5nID0gZ2x5cGgueE1pbiAtIGdseXBoLnBoYW50b21Qb2ludHNbMF0ueDtcbiAgICAgIHRoaXMuX21ldHJpY3MudG9wQmVhcmluZyA9IGdseXBoLnBoYW50b21Qb2ludHNbMl0ueSAtIGdseXBoLnlNYXg7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRvdXJzID0gW107XG4gICAgdmFyIGN1ciA9IFtdO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBwb2ludHMubGVuZ3RoOyBrKyspIHtcbiAgICAgIHZhciBwb2ludCA9IHBvaW50c1trXTtcbiAgICAgIGN1ci5wdXNoKHBvaW50KTtcblxuICAgICAgaWYgKHBvaW50LmVuZENvbnRvdXIpIHtcbiAgICAgICAgY29udG91cnMucHVzaChjdXIpO1xuICAgICAgICBjdXIgPSBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udG91cnM7XG4gIH07XG5cbiAgX3Byb3RvMzQuX2dldE1ldHJpY3MgPSBmdW5jdGlvbiBfZ2V0TWV0cmljcygpIHtcbiAgICBpZiAodGhpcy5fbWV0cmljcykge1xuICAgICAgcmV0dXJuIHRoaXMuX21ldHJpY3M7XG4gICAgfVxuXG4gICAgdmFyIGNib3ggPSB0aGlzLl9nZXRDQm94KHRydWUpO1xuXG4gICAgX0dseXBoLnByb3RvdHlwZS5fZ2V0TWV0cmljcy5jYWxsKHRoaXMsIGNib3gpO1xuXG4gICAgaWYgKHRoaXMuX2ZvbnQuX3ZhcmlhdGlvblByb2Nlc3NvciAmJiAhdGhpcy5fZm9udC5IVkFSKSB7XG4gICAgICAvLyBObyBIVkFSIHRhYmxlLCBkZWNvZGUgdGhlIGdseXBoLiBUaGlzIHRyaWdnZXJzIHJlY29tcHV0YXRpb24gb2YgbWV0cmljcy5cbiAgICAgIHRoaXMucGF0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWV0cmljcztcbiAgfSAvLyBDb252ZXJ0cyBjb250b3VycyB0byBhIFBhdGggb2JqZWN0IHRoYXQgY2FuIGJlIHJlbmRlcmVkXG4gIDtcblxuICBfcHJvdG8zNC5fZ2V0UGF0aCA9IGZ1bmN0aW9uIF9nZXRQYXRoKCkge1xuICAgIHZhciBjb250b3VycyA9IHRoaXMuX2dldENvbnRvdXJzKCk7XG5cbiAgICB2YXIgcGF0aCA9IG5ldyBQYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRvdXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29udG91ciA9IGNvbnRvdXJzW2ldO1xuICAgICAgdmFyIGZpcnN0UHQgPSBjb250b3VyWzBdO1xuICAgICAgdmFyIGxhc3RQdCA9IGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXTtcbiAgICAgIHZhciBzdGFydCA9IDA7XG5cbiAgICAgIGlmIChmaXJzdFB0Lm9uQ3VydmUpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBvaW50IHdpbGwgYmUgY29uc3VtZWQgYnkgdGhlIG1vdmVUbyBjb21tYW5kLCBzbyBza2lwIGluIHRoZSBsb29wXG4gICAgICAgIHZhciBjdXJ2ZVB0ID0gbnVsbDtcbiAgICAgICAgc3RhcnQgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxhc3RQdC5vbkN1cnZlKSB7XG4gICAgICAgICAgLy8gU3RhcnQgYXQgdGhlIGxhc3QgcG9pbnQgaWYgdGhlIGZpcnN0IHBvaW50IGlzIG9mZiBjdXJ2ZSBhbmQgdGhlIGxhc3QgcG9pbnQgaXMgb24gY3VydmVcbiAgICAgICAgICBmaXJzdFB0ID0gbGFzdFB0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFN0YXJ0IGF0IHRoZSBtaWRkbGUgaWYgYm90aCB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnRzIGFyZSBvZmYgY3VydmVcbiAgICAgICAgICBmaXJzdFB0ID0gbmV3IFBvaW50KGZhbHNlLCBmYWxzZSwgKGZpcnN0UHQueCArIGxhc3RQdC54KSAvIDIsIChmaXJzdFB0LnkgKyBsYXN0UHQueSkgLyAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJ2ZVB0ID0gZmlyc3RQdDtcbiAgICAgIH1cblxuICAgICAgcGF0aC5tb3ZlVG8oZmlyc3RQdC54LCBmaXJzdFB0LnkpO1xuXG4gICAgICBmb3IgKHZhciBqID0gc3RhcnQ7IGogPCBjb250b3VyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBwdCA9IGNvbnRvdXJbal07XG4gICAgICAgIHZhciBwcmV2UHQgPSBqID09PSAwID8gZmlyc3RQdCA6IGNvbnRvdXJbaiAtIDFdO1xuXG4gICAgICAgIGlmIChwcmV2UHQub25DdXJ2ZSAmJiBwdC5vbkN1cnZlKSB7XG4gICAgICAgICAgcGF0aC5saW5lVG8ocHQueCwgcHQueSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldlB0Lm9uQ3VydmUgJiYgIXB0Lm9uQ3VydmUpIHtcbiAgICAgICAgICB2YXIgY3VydmVQdCA9IHB0O1xuICAgICAgICB9IGVsc2UgaWYgKCFwcmV2UHQub25DdXJ2ZSAmJiAhcHQub25DdXJ2ZSkge1xuICAgICAgICAgIHZhciBtaWRYID0gKHByZXZQdC54ICsgcHQueCkgLyAyO1xuICAgICAgICAgIHZhciBtaWRZID0gKHByZXZQdC55ICsgcHQueSkgLyAyO1xuICAgICAgICAgIHBhdGgucXVhZHJhdGljQ3VydmVUbyhwcmV2UHQueCwgcHJldlB0LnksIG1pZFgsIG1pZFkpO1xuICAgICAgICAgIHZhciBjdXJ2ZVB0ID0gcHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoIXByZXZQdC5vbkN1cnZlICYmIHB0Lm9uQ3VydmUpIHtcbiAgICAgICAgICBwYXRoLnF1YWRyYXRpY0N1cnZlVG8oY3VydmVQdC54LCBjdXJ2ZVB0LnksIHB0LngsIHB0LnkpO1xuICAgICAgICAgIHZhciBjdXJ2ZVB0ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIFRURiBwYXRoIHN0YXRlXCIpO1xuICAgICAgICB9XG4gICAgICB9IC8vIENvbm5lY3QgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50c1xuXG5cbiAgICAgIGlmIChjdXJ2ZVB0KSB7XG4gICAgICAgIHBhdGgucXVhZHJhdGljQ3VydmVUbyhjdXJ2ZVB0LngsIGN1cnZlUHQueSwgZmlyc3RQdC54LCBmaXJzdFB0LnkpO1xuICAgICAgfVxuXG4gICAgICBwYXRoLmNsb3NlUGF0aCgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9O1xuXG4gIHJldHVybiBUVEZHbHlwaDtcbn0oR2x5cGgpO1xuLyoqXHJcbiAqIFJlcHJlc2VudHMgYW4gT3BlblR5cGUgUG9zdFNjcmlwdCBnbHlwaCwgaW4gdGhlIENvbXBhY3QgRm9udCBGb3JtYXQuXHJcbiAqL1xuXG5cbnZhciBDRkZHbHlwaCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0dseXBoMikge1xuICBfaW5oZXJpdHNMb29zZShDRkZHbHlwaCwgX0dseXBoMik7XG5cbiAgZnVuY3Rpb24gQ0ZGR2x5cGgoKSB7XG4gICAgcmV0dXJuIF9HbHlwaDIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90bzM1ID0gQ0ZGR2x5cGgucHJvdG90eXBlO1xuXG4gIF9wcm90bzM1Ll9nZXROYW1lID0gZnVuY3Rpb24gX2dldE5hbWUoKSB7XG4gICAgaWYgKHRoaXMuX2ZvbnQuQ0ZGMikge1xuICAgICAgcmV0dXJuIF9HbHlwaDIucHJvdG90eXBlLl9nZXROYW1lLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZvbnRbJ0NGRiAnXS5nZXRHbHlwaE5hbWUodGhpcy5pZCk7XG4gIH07XG5cbiAgX3Byb3RvMzUuYmlhcyA9IGZ1bmN0aW9uIGJpYXMocykge1xuICAgIGlmIChzLmxlbmd0aCA8IDEyNDApIHtcbiAgICAgIHJldHVybiAxMDc7XG4gICAgfSBlbHNlIGlmIChzLmxlbmd0aCA8IDMzOTAwKSB7XG4gICAgICByZXR1cm4gMTEzMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDMyNzY4O1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8zNS5fZ2V0UGF0aCA9IGZ1bmN0aW9uIF9nZXRQYXRoKCkge1xuICAgIHZhciBjZmYgPSB0aGlzLl9mb250LkNGRjIgfHwgdGhpcy5fZm9udFsnQ0ZGICddO1xuICAgIHZhciBzdHJlYW0gPSBjZmYuc3RyZWFtO1xuICAgIHZhciBzdHIgPSBjZmYudG9wRGljdC5DaGFyU3RyaW5nc1t0aGlzLmlkXTtcbiAgICB2YXIgZW5kID0gc3RyLm9mZnNldCArIHN0ci5sZW5ndGg7XG4gICAgc3RyZWFtLnBvcyA9IHN0ci5vZmZzZXQ7XG4gICAgdmFyIHBhdGggPSBuZXcgUGF0aCgpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciB0cmFucyA9IFtdO1xuICAgIHZhciB3aWR0aCA9IG51bGw7XG4gICAgdmFyIG5TdGVtcyA9IDA7XG4gICAgdmFyIHggPSAwLFxuICAgICAgICB5ID0gMDtcbiAgICB2YXIgdXNlZEdzdWJycztcbiAgICB2YXIgdXNlZFN1YnJzO1xuICAgIHZhciBvcGVuID0gZmFsc2U7XG4gICAgdGhpcy5fdXNlZEdzdWJycyA9IHVzZWRHc3VicnMgPSB7fTtcbiAgICB0aGlzLl91c2VkU3VicnMgPSB1c2VkU3VicnMgPSB7fTtcbiAgICB2YXIgZ3N1YnJzID0gY2ZmLmdsb2JhbFN1YnJJbmRleCB8fCBbXTtcbiAgICB2YXIgZ3N1YnJzQmlhcyA9IHRoaXMuYmlhcyhnc3VicnMpO1xuICAgIHZhciBwcml2YXRlRGljdCA9IGNmZi5wcml2YXRlRGljdEZvckdseXBoKHRoaXMuaWQpIHx8IHt9O1xuICAgIHZhciBzdWJycyA9IHByaXZhdGVEaWN0LlN1YnJzIHx8IFtdO1xuICAgIHZhciBzdWJyc0JpYXMgPSB0aGlzLmJpYXMoc3VicnMpO1xuICAgIHZhciB2c3RvcmUgPSBjZmYudG9wRGljdC52c3RvcmUgJiYgY2ZmLnRvcERpY3QudnN0b3JlLml0ZW1WYXJpYXRpb25TdG9yZTtcbiAgICB2YXIgdnNpbmRleCA9IHByaXZhdGVEaWN0LnZzaW5kZXg7XG4gICAgdmFyIHZhcmlhdGlvblByb2Nlc3NvciA9IHRoaXMuX2ZvbnQuX3ZhcmlhdGlvblByb2Nlc3NvcjtcblxuICAgIGZ1bmN0aW9uIGNoZWNrV2lkdGgoKSB7XG4gICAgICBpZiAod2lkdGggPT0gbnVsbCkge1xuICAgICAgICB3aWR0aCA9IHN0YWNrLnNoaWZ0KCkgKyBwcml2YXRlRGljdC5ub21pbmFsV2lkdGhYO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlU3RlbXMoKSB7XG4gICAgICBpZiAoc3RhY2subGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICBjaGVja1dpZHRoKCk7XG4gICAgICB9XG5cbiAgICAgIG5TdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgIHJldHVybiBzdGFjay5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSB7XG4gICAgICBpZiAob3Blbikge1xuICAgICAgICBwYXRoLmNsb3NlUGF0aCgpO1xuICAgICAgfVxuXG4gICAgICBwYXRoLm1vdmVUbyh4LCB5KTtcbiAgICAgIG9wZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBwYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKCkge1xuICAgICAgd2hpbGUgKHN0cmVhbS5wb3MgPCBlbmQpIHtcbiAgICAgICAgdmFyIG9wID0gc3RyZWFtLnJlYWRVSW50OCgpO1xuXG4gICAgICAgIGlmIChvcCA8IDMyKSB7XG4gICAgICAgICAgc3dpdGNoIChvcCkge1xuICAgICAgICAgICAgY2FzZSAxOiAvLyBoc3RlbVxuXG4gICAgICAgICAgICBjYXNlIDM6IC8vIHZzdGVtXG5cbiAgICAgICAgICAgIGNhc2UgMTg6IC8vIGhzdGVtaG1cblxuICAgICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgICAgLy8gdnN0ZW1obVxuICAgICAgICAgICAgICBwYXJzZVN0ZW1zKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIC8vIHZtb3ZldG9cbiAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjaGVja1dpZHRoKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgLy8gcmxpbmV0b1xuICAgICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHBhdGgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNjogLy8gaGxpbmV0b1xuXG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgIC8vIHZsaW5ldG9cbiAgICAgICAgICAgICAgdmFyIHBoYXNlID0gb3AgPT09IDY7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBoYXNlKSB7XG4gICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICBwaGFzZSA9ICFwaGFzZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgIC8vIHJyY3VydmV0b1xuICAgICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBjMXggPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB2YXIgYzF5ID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgdmFyIGMyeCA9IGMxeCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgdmFyIGMyeSA9IGMxeSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeCA9IGMyeCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeSA9IGMyeSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgcGF0aC5iZXppZXJDdXJ2ZVRvKGMxeCwgYzF5LCBjMngsIGMyeSwgeCwgeSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgLy8gY2FsbHN1YnJcbiAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc3RhY2sucG9wKCkgKyBzdWJyc0JpYXM7XG4gICAgICAgICAgICAgIHZhciBzdWJyID0gc3VicnNbaW5kZXhdO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJyKSB7XG4gICAgICAgICAgICAgICAgdXNlZFN1YnJzW2luZGV4XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgIHZhciBlID0gZW5kO1xuICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSBzdWJyLm9mZnNldDtcbiAgICAgICAgICAgICAgICBlbmQgPSBzdWJyLm9mZnNldCArIHN1YnIubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHBhcnNlKCk7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IHA7XG4gICAgICAgICAgICAgICAgZW5kID0gZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAvLyByZXR1cm5cbiAgICAgICAgICAgICAgaWYgKGNmZi52ZXJzaW9uID49IDIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgLy8gZW5kY2hhclxuICAgICAgICAgICAgICBpZiAoY2ZmLnZlcnNpb24gPj0gMikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjaGVja1dpZHRoKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgICAgICAgIHBhdGguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgb3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB2c2luZGV4XG4gICAgICAgICAgICAgICAgaWYgKGNmZi52ZXJzaW9uIDwgMikge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2c2luZGV4IG9wZXJhdG9yIG5vdCBzdXBwb3J0ZWQgaW4gQ0ZGIHYxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdnNpbmRleCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBibGVuZFxuICAgICAgICAgICAgICAgIGlmIChjZmYudmVyc2lvbiA8IDIpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYmxlbmQgb3BlcmF0b3Igbm90IHN1cHBvcnRlZCBpbiBDRkYgdjEnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXZhcmlhdGlvblByb2Nlc3Nvcikge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdibGVuZCBvcGVyYXRvciBpbiBub24tdmFyaWF0aW9uIGZvbnQnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgYmxlbmRWZWN0b3IgPSB2YXJpYXRpb25Qcm9jZXNzb3IuZ2V0QmxlbmRWZWN0b3IodnN0b3JlLCB2c2luZGV4KTtcbiAgICAgICAgICAgICAgICB2YXIgbnVtQmxlbmRzID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgdmFyIG51bU9wZXJhbmRzID0gbnVtQmxlbmRzICogYmxlbmRWZWN0b3IubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHN0YWNrLmxlbmd0aCAtIG51bU9wZXJhbmRzO1xuICAgICAgICAgICAgICAgIHZhciBiYXNlID0gZGVsdGEgLSBudW1CbGVuZHM7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUJsZW5kczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgc3VtID0gc3RhY2tbYmFzZSArIGldO1xuXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJsZW5kVmVjdG9yLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSBibGVuZFZlY3RvcltqXSAqIHN0YWNrW2RlbHRhKytdO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBzdGFja1tiYXNlICsgaV0gPSBzdW07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKG51bU9wZXJhbmRzLS0pIHtcbiAgICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgMTk6IC8vIGhpbnRtYXNrXG5cbiAgICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICAgIC8vIGNudHJtYXNrXG4gICAgICAgICAgICAgIHBhcnNlU3RlbXMoKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnBvcyArPSBuU3RlbXMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgICAvLyBybW92ZXRvXG4gICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tXaWR0aCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICAgIC8vIGhtb3ZldG9cbiAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjaGVja1dpZHRoKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICAgIC8vIHJjdXJ2ZWxpbmVcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+PSA4KSB7XG4gICAgICAgICAgICAgICAgdmFyIGMxeCA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHZhciBjMXkgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB2YXIgYzJ4ID0gYzF4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB2YXIgYzJ5ID0gYzF5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB4ID0gYzJ4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5ID0gYzJ5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBwYXRoLmJlemllckN1cnZlVG8oYzF4LCBjMXksIGMyeCwgYzJ5LCB4LCB5KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBwYXRoLmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICAgIC8vIHJsaW5lY3VydmVcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+PSA4KSB7XG4gICAgICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBjMXggPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgdmFyIGMxeSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB2YXIgYzJ4ID0gYzF4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgdmFyIGMyeSA9IGMxeSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSBjMnggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5ID0gYzJ5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgcGF0aC5iZXppZXJDdXJ2ZVRvKGMxeCwgYzF5LCBjMngsIGMyeSwgeCwgeSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgICAvLyB2dmN1cnZldG9cbiAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID49IDQpIHtcbiAgICAgICAgICAgICAgICBjMXggPSB4O1xuICAgICAgICAgICAgICAgIGMxeSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGMyeCA9IGMxeCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgYzJ5ID0gYzF5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB4ID0gYzJ4O1xuICAgICAgICAgICAgICAgIHkgPSBjMnkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHBhdGguYmV6aWVyQ3VydmVUbyhjMXgsIGMxeSwgYzJ4LCBjMnksIHgsIHkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgIC8vIGhoY3VydmV0b1xuICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoICUgMikge1xuICAgICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPj0gNCkge1xuICAgICAgICAgICAgICAgIGMxeCA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGMxeSA9IHk7XG4gICAgICAgICAgICAgICAgYzJ4ID0gYzF4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBjMnkgPSBjMXkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHggPSBjMnggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHkgPSBjMnk7XG4gICAgICAgICAgICAgICAgcGF0aC5iZXppZXJDdXJ2ZVRvKGMxeCwgYzF5LCBjMngsIGMyeSwgeCwgeSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgICAgLy8gc2hvcnRpbnRcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChzdHJlYW0ucmVhZEludDE2QkUoKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgICAvLyBjYWxsZ3N1YnJcbiAgICAgICAgICAgICAgaW5kZXggPSBzdGFjay5wb3AoKSArIGdzdWJyc0JpYXM7XG4gICAgICAgICAgICAgIHN1YnIgPSBnc3VicnNbaW5kZXhdO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJyKSB7XG4gICAgICAgICAgICAgICAgdXNlZEdzdWJyc1tpbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBwID0gc3RyZWFtLnBvcztcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGVuZDtcbiAgICAgICAgICAgICAgICBzdHJlYW0ucG9zID0gc3Vici5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgZW5kID0gc3Vici5vZmZzZXQgKyBzdWJyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBwYXJzZSgpO1xuICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSBwO1xuICAgICAgICAgICAgICAgIGVuZCA9IGU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzMDogLy8gdmhjdXJ2ZXRvXG5cbiAgICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICAgIC8vIGh2Y3VydmV0b1xuICAgICAgICAgICAgICBwaGFzZSA9IG9wID09PSAzMTtcblxuICAgICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID49IDQpIHtcbiAgICAgICAgICAgICAgICBpZiAocGhhc2UpIHtcbiAgICAgICAgICAgICAgICAgIGMxeCA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgYzF5ID0geTtcbiAgICAgICAgICAgICAgICAgIGMyeCA9IGMxeCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICBjMnkgPSBjMXkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgeSA9IGMyeSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB4ID0gYzJ4ICsgKHN0YWNrLmxlbmd0aCA9PT0gMSA/IHN0YWNrLnNoaWZ0KCkgOiAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYzF4ID0geDtcbiAgICAgICAgICAgICAgICAgIGMxeSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgYzJ4ID0gYzF4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIGMyeSA9IGMxeSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB4ID0gYzJ4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHkgPSBjMnkgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhdGguYmV6aWVyQ3VydmVUbyhjMXgsIGMxeSwgYzJ4LCBjMnksIHgsIHkpO1xuICAgICAgICAgICAgICAgIHBoYXNlID0gIXBoYXNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgIG9wID0gc3RyZWFtLnJlYWRVSW50OCgpO1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAob3ApIHtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAvLyBhbmRcbiAgICAgICAgICAgICAgICAgIHZhciBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICB2YXIgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhICYmIGIgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgIC8vIG9yXG4gICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgfHwgYiA/IDEgOiAwKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgLy8gbm90XG4gICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgPyAwIDogMSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgIC8vIGFic1xuICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLmFicyhhKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAvLyBhZGRcbiAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSArIGIpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgLy8gc3ViXG4gICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgLSBiKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICAgIC8vIGRpdlxuICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhIC8gYik7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgICAvLyBuZWdcbiAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goLWEpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgICAgLy8gZXFcbiAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSA9PT0gYiA/IDEgOiAwKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgICAgICAgIC8vIGRyb3BcbiAgICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgICAgICAgLy8gcHV0XG4gICAgICAgICAgICAgICAgICB2YXIgdmFsID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICB2YXIgaWR4ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICB0cmFuc1tpZHhdID0gdmFsO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgICAgICAgLy8gZ2V0XG4gICAgICAgICAgICAgICAgICBpZHggPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godHJhbnNbaWR4XSB8fCAwKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgIC8vIGlmZWxzZVxuICAgICAgICAgICAgICAgICAgdmFyIHMxID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICB2YXIgczIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIHZhciB2MSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgdmFyIHYyID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHYxIDw9IHYyID8gczEgOiBzMik7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICAgICAgICAvLyByYW5kb21cbiAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5yYW5kb20oKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICAgICAgICAvLyBtdWxcbiAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSAqIGIpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgICAgICAgLy8gc3FydFxuICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLnNxcnQoYSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgLy8gZHVwXG4gICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEsIGEpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgICAgICAgLy8gZXhjaFxuICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChiLCBhKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICAgICAgICAgIC8vIGluZGV4XG4gICAgICAgICAgICAgICAgICBpZHggPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWR4ID0gMDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaWR4ID4gc3RhY2subGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZHggPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHN0YWNrW2lkeF0pO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgICAgICAgLy8gcm9sbFxuICAgICAgICAgICAgICAgICAgdmFyIG4gPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgdmFyIF9qID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChfaiA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChfaiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHN0YWNrW24gLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gbiAtIDI7IF9pID49IDA7IF9pLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW19pICsgMV0gPSBzdGFja1tfaV07XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgc3RhY2tbMF0gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgIF9qLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChfaiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHN0YWNrWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDw9IG47IF9pMisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tfaTJdID0gc3RhY2tbX2kyICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgc3RhY2tbbiAtIDFdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICBfaisrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICAgIC8vIGhmbGV4XG4gICAgICAgICAgICAgICAgICBjMXggPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIGMxeSA9IHk7XG4gICAgICAgICAgICAgICAgICBjMnggPSBjMXggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgYzJ5ID0gYzF5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHZhciBjM3ggPSBjMnggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgdmFyIGMzeSA9IGMyeTtcbiAgICAgICAgICAgICAgICAgIHZhciBjNHggPSBjM3ggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgdmFyIGM0eSA9IGMzeTtcbiAgICAgICAgICAgICAgICAgIHZhciBjNXggPSBjNHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgdmFyIGM1eSA9IGM0eTtcbiAgICAgICAgICAgICAgICAgIHZhciBjNnggPSBjNXggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgdmFyIGM2eSA9IGM1eTtcbiAgICAgICAgICAgICAgICAgIHggPSBjNng7XG4gICAgICAgICAgICAgICAgICB5ID0gYzZ5O1xuICAgICAgICAgICAgICAgICAgcGF0aC5iZXppZXJDdXJ2ZVRvKGMxeCwgYzF5LCBjMngsIGMyeSwgYzN4LCBjM3kpO1xuICAgICAgICAgICAgICAgICAgcGF0aC5iZXppZXJDdXJ2ZVRvKGM0eCwgYzR5LCBjNXgsIGM1eSwgYzZ4LCBjNnkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgICAgICAgLy8gZmxleFxuICAgICAgICAgICAgICAgICAgdmFyIHB0cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPD0gNTsgX2kzKyspIHtcbiAgICAgICAgICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIHB0cy5wdXNoKHgsIHkpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBwYXRoLmJlemllckN1cnZlVG8uYXBwbHkocGF0aCwgcHRzLnNsaWNlKDAsIDYpKTtcbiAgICAgICAgICAgICAgICAgIHBhdGguYmV6aWVyQ3VydmVUby5hcHBseShwYXRoLCBwdHMuc2xpY2UoNikpO1xuICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsgLy8gZmRcblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgICAgICAgLy8gaGZsZXgxXG4gICAgICAgICAgICAgICAgICBjMXggPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIGMxeSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgYzJ4ID0gYzF4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIGMyeSA9IGMxeSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICBjM3ggPSBjMnggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgYzN5ID0gYzJ5O1xuICAgICAgICAgICAgICAgICAgYzR4ID0gYzN4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIGM0eSA9IGMzeTtcbiAgICAgICAgICAgICAgICAgIGM1eCA9IGM0eCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICBjNXkgPSBjNHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgYzZ4ID0gYzV4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIGM2eSA9IGM1eTtcbiAgICAgICAgICAgICAgICAgIHggPSBjNng7XG4gICAgICAgICAgICAgICAgICB5ID0gYzZ5O1xuICAgICAgICAgICAgICAgICAgcGF0aC5iZXppZXJDdXJ2ZVRvKGMxeCwgYzF5LCBjMngsIGMyeSwgYzN4LCBjM3kpO1xuICAgICAgICAgICAgICAgICAgcGF0aC5iZXppZXJDdXJ2ZVRvKGM0eCwgYzR5LCBjNXgsIGM1eSwgYzZ4LCBjNnkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgLy8gZmxleDFcbiAgICAgICAgICAgICAgICAgIHZhciBzdGFydHggPSB4O1xuICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0eSA9IHk7XG4gICAgICAgICAgICAgICAgICBwdHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDw9IDQ7IF9pNCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBwdHMucHVzaCh4LCB5KTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHggLSBzdGFydHgpID4gTWF0aC5hYnMoeSAtIHN0YXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIHkgPSBzdGFydHk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4ID0gc3RhcnR4O1xuICAgICAgICAgICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHB0cy5wdXNoKHgsIHkpO1xuICAgICAgICAgICAgICAgICAgcGF0aC5iZXppZXJDdXJ2ZVRvLmFwcGx5KHBhdGgsIHB0cy5zbGljZSgwLCA2KSk7XG4gICAgICAgICAgICAgICAgICBwYXRoLmJlemllckN1cnZlVG8uYXBwbHkocGF0aCwgcHRzLnNsaWNlKDYpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3A6IDEyIFwiLmNvbmNhdChvcCkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3A6IFwiLmNvbmNhdChvcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcCA8IDI0Nykge1xuICAgICAgICAgIHN0YWNrLnB1c2gob3AgLSAxMzkpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wIDwgMjUxKSB7XG4gICAgICAgICAgdmFyIGIxID0gc3RyZWFtLnJlYWRVSW50OCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goKG9wIC0gMjQ3KSAqIDI1NiArIGIxICsgMTA4KTtcbiAgICAgICAgfSBlbHNlIGlmIChvcCA8IDI1NSkge1xuICAgICAgICAgIHZhciBiMSA9IHN0cmVhbS5yZWFkVUludDgoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKC0ob3AgLSAyNTEpICogMjU2IC0gYjEgLSAxMDgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YWNrLnB1c2goc3RyZWFtLnJlYWRJbnQzMkJFKCkgLyA2NTUzNik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcGFyc2UoKTtcblxuICAgIGlmIChvcGVuKSB7XG4gICAgICBwYXRoLmNsb3NlUGF0aCgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9O1xuXG4gIHJldHVybiBDRkZHbHlwaDtcbn0oR2x5cGgpO1xuXG52YXIgU0JJWEltYWdlID0gbmV3IHIuU3RydWN0KHtcbiAgb3JpZ2luWDogci51aW50MTYsXG4gIG9yaWdpblk6IHIudWludDE2LFxuICB0eXBlOiBuZXcgci5TdHJpbmcoNCksXG4gIGRhdGE6IG5ldyByLkJ1ZmZlcihmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0LnBhcmVudC5idWZsZW4gLSB0Ll9jdXJyZW50T2Zmc2V0O1xuICB9KVxufSk7XG4vKipcclxuICogUmVwcmVzZW50cyBhIGNvbG9yIChlLmcuIGVtb2ppKSBnbHlwaCBpbiBBcHBsZSdzIFNCSVggZm9ybWF0LlxyXG4gKi9cblxudmFyIFNCSVhHbHlwaCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1RURkdseXBoKSB7XG4gIF9pbmhlcml0c0xvb3NlKFNCSVhHbHlwaCwgX1RURkdseXBoKTtcblxuICBmdW5jdGlvbiBTQklYR2x5cGgoKSB7XG4gICAgcmV0dXJuIF9UVEZHbHlwaC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvMzYgPSBTQklYR2x5cGgucHJvdG90eXBlO1xuXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGdseXBoIGltYWdlIGF0IHRoZSBnaXZlbiBwb2ludCBzaXplLlxyXG4gICAqIFRoZSBvYmplY3QgaGFzIGEgZGF0YSBwcm9wZXJ0eSB3aXRoIGEgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBpbWFnZSBkYXRhLFxyXG4gICAqIGFsb25nIHdpdGggdGhlIGltYWdlIHR5cGUsIGFuZCBvcmlnaW4uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxyXG4gICAqIEByZXR1cm4ge29iamVjdH1cclxuICAgKi9cbiAgX3Byb3RvMzYuZ2V0SW1hZ2VGb3JTaXplID0gZnVuY3Rpb24gZ2V0SW1hZ2VGb3JTaXplKHNpemUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZvbnQuc2JpeC5pbWFnZVRhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRhYmxlID0gdGhpcy5fZm9udC5zYml4LmltYWdlVGFibGVzW2ldO1xuXG4gICAgICBpZiAodGFibGUucHBlbSA+PSBzaXplKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBvZmZzZXRzID0gdGFibGUuaW1hZ2VPZmZzZXRzO1xuICAgIHZhciBzdGFydCA9IG9mZnNldHNbdGhpcy5pZF07XG4gICAgdmFyIGVuZCA9IG9mZnNldHNbdGhpcy5pZCArIDFdO1xuXG4gICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2ZvbnQuc3RyZWFtLnBvcyA9IHN0YXJ0O1xuICAgIHJldHVybiBTQklYSW1hZ2UuZGVjb2RlKHRoaXMuX2ZvbnQuc3RyZWFtLCB7XG4gICAgICBidWZsZW46IGVuZCAtIHN0YXJ0XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvMzYucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKGN0eCwgc2l6ZSkge1xuICAgIHZhciBpbWcgPSB0aGlzLmdldEltYWdlRm9yU2l6ZShzaXplKTtcblxuICAgIGlmIChpbWcgIT0gbnVsbCkge1xuICAgICAgdmFyIHNjYWxlID0gc2l6ZSAvIHRoaXMuX2ZvbnQudW5pdHNQZXJFbTtcbiAgICAgIGN0eC5pbWFnZShpbWcuZGF0YSwge1xuICAgICAgICBoZWlnaHQ6IHNpemUsXG4gICAgICAgIHg6IGltZy5vcmlnaW5YLFxuICAgICAgICB5OiAodGhpcy5iYm94Lm1pblkgLSBpbWcub3JpZ2luWSkgKiBzY2FsZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2ZvbnQuc2JpeC5mbGFncy5yZW5kZXJPdXRsaW5lcykge1xuICAgICAgX1RURkdseXBoLnByb3RvdHlwZS5yZW5kZXIuY2FsbCh0aGlzLCBjdHgsIHNpemUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU0JJWEdseXBoO1xufShUVEZHbHlwaCk7XG5cbnZhciBDT0xSTGF5ZXIgPSBmdW5jdGlvbiBDT0xSTGF5ZXIoZ2x5cGgsIGNvbG9yKSB7XG4gIHRoaXMuZ2x5cGggPSBnbHlwaDtcbiAgdGhpcy5jb2xvciA9IGNvbG9yO1xufTtcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgY29sb3IgKGUuZy4gZW1vamkpIGdseXBoIGluIE1pY3Jvc29mdCdzIENPTFIgZm9ybWF0LlxyXG4gKiBFYWNoIGdseXBoIGluIHRoaXMgZm9ybWF0IGNvbnRhaW4gYSBsaXN0IG9mIGNvbG9yZWQgbGF5ZXJzLCBlYWNoXHJcbiAqIG9mIHdoaWNoICBpcyBhbm90aGVyIHZlY3RvciBnbHlwaC5cclxuICovXG5cblxudmFyIENPTFJHbHlwaCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0dseXBoMykge1xuICBfaW5oZXJpdHNMb29zZShDT0xSR2x5cGgsIF9HbHlwaDMpO1xuXG4gIGZ1bmN0aW9uIENPTFJHbHlwaCgpIHtcbiAgICByZXR1cm4gX0dseXBoMy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvMzcgPSBDT0xSR2x5cGgucHJvdG90eXBlO1xuXG4gIF9wcm90bzM3Ll9nZXRCQm94ID0gZnVuY3Rpb24gX2dldEJCb3goKSB7XG4gICAgdmFyIGJib3ggPSBuZXcgQkJveCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxheWVyID0gdGhpcy5sYXllcnNbaV07XG4gICAgICB2YXIgYiA9IGxheWVyLmdseXBoLmJib3g7XG4gICAgICBiYm94LmFkZFBvaW50KGIubWluWCwgYi5taW5ZKTtcbiAgICAgIGJib3guYWRkUG9pbnQoYi5tYXhYLCBiLm1heFkpO1xuICAgIH1cblxuICAgIHJldHVybiBiYm94O1xuICB9XG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIHRoZSBnbHlwaCBhbmQgY29sb3IgZm9yXHJcbiAgICogZWFjaCBsYXllciBpbiB0aGUgY29tcG9zaXRlIGNvbG9yIGdseXBoLlxyXG4gICAqIEB0eXBlIHtvYmplY3RbXX1cclxuICAgKi9cbiAgO1xuXG4gIF9wcm90bzM3LnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihjdHgsIHNpemUpIHtcbiAgICBmb3IgKHZhciBfaXRlcmF0b3I3MSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodGhpcy5sYXllcnMpLCBfc3RlcDcxOyAhKF9zdGVwNzEgPSBfaXRlcmF0b3I3MSgpKS5kb25lOykge1xuICAgICAgdmFyIF9zdGVwNzEkdmFsdWUgPSBfc3RlcDcxLnZhbHVlLFxuICAgICAgICAgIGdseXBoID0gX3N0ZXA3MSR2YWx1ZS5nbHlwaCxcbiAgICAgICAgICBjb2xvciA9IF9zdGVwNzEkdmFsdWUuY29sb3I7XG4gICAgICBjdHguZmlsbENvbG9yKFtjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlXSwgY29sb3IuYWxwaGEgLyAyNTUgKiAxMDApO1xuICAgICAgZ2x5cGgucmVuZGVyKGN0eCwgc2l6ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9O1xuXG4gIF9jcmVhdGVDbGFzcyhDT0xSR2x5cGgsIFt7XG4gICAga2V5OiBcImxheWVyc1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGNwYWwgPSB0aGlzLl9mb250LkNQQUw7XG4gICAgICB2YXIgY29sciA9IHRoaXMuX2ZvbnQuQ09MUjtcbiAgICAgIHZhciBsb3cgPSAwO1xuICAgICAgdmFyIGhpZ2ggPSBjb2xyLmJhc2VHbHlwaFJlY29yZC5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICAgICAgdmFyIG1pZCA9IGxvdyArIGhpZ2ggPj4gMTtcbiAgICAgICAgdmFyIHJlYyA9IGNvbHIuYmFzZUdseXBoUmVjb3JkW21pZF07XG5cbiAgICAgICAgaWYgKHRoaXMuaWQgPCByZWMuZ2lkKSB7XG4gICAgICAgICAgaGlnaCA9IG1pZCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pZCA+IHJlYy5naWQpIHtcbiAgICAgICAgICBsb3cgPSBtaWQgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBiYXNlTGF5ZXIgPSByZWM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gaWYgYmFzZSBnbHlwaCBub3QgZm91bmQgaW4gQ09MUiB0YWJsZSxcbiAgICAgIC8vIGRlZmF1bHQgdG8gbm9ybWFsIGdseXBoIGZyb20gZ2x5ZiBvciBDRkZcblxuXG4gICAgICBpZiAoYmFzZUxheWVyID09IG51bGwpIHtcbiAgICAgICAgdmFyIGcgPSB0aGlzLl9mb250Ll9nZXRCYXNlR2x5cGgodGhpcy5pZCk7XG5cbiAgICAgICAgdmFyIGNvbG9yID0ge1xuICAgICAgICAgIHJlZDogMCxcbiAgICAgICAgICBncmVlbjogMCxcbiAgICAgICAgICBibHVlOiAwLFxuICAgICAgICAgIGFscGhhOiAyNTVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFtuZXcgQ09MUkxheWVyKGcsIGNvbG9yKV07XG4gICAgICB9IC8vIG90aGVyd2lzZSwgcmV0dXJuIGFuIGFycmF5IG9mIGFsbCB0aGUgbGF5ZXJzXG5cblxuICAgICAgdmFyIGxheWVycyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gYmFzZUxheWVyLmZpcnN0TGF5ZXJJbmRleDsgaSA8IGJhc2VMYXllci5maXJzdExheWVySW5kZXggKyBiYXNlTGF5ZXIubnVtTGF5ZXJzOyBpKyspIHtcbiAgICAgICAgdmFyIHJlYyA9IGNvbHIubGF5ZXJSZWNvcmRzW2ldO1xuICAgICAgICB2YXIgY29sb3IgPSBjcGFsLmNvbG9yUmVjb3Jkc1tyZWMucGFsZXR0ZUluZGV4XTtcblxuICAgICAgICB2YXIgZyA9IHRoaXMuX2ZvbnQuX2dldEJhc2VHbHlwaChyZWMuZ2lkKTtcblxuICAgICAgICBsYXllcnMucHVzaChuZXcgQ09MUkxheWVyKGcsIGNvbG9yKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYXllcnM7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENPTFJHbHlwaDtcbn0oR2x5cGgpO1xuXG52YXIgVFVQTEVTX1NIQVJFX1BPSU5UX05VTUJFUlMgPSAweDgwMDA7XG52YXIgVFVQTEVfQ09VTlRfTUFTSyA9IDB4MGZmZjtcbnZhciBFTUJFRERFRF9UVVBMRV9DT09SRCA9IDB4ODAwMDtcbnZhciBJTlRFUk1FRElBVEVfVFVQTEUgPSAweDQwMDA7XG52YXIgUFJJVkFURV9QT0lOVF9OVU1CRVJTID0gMHgyMDAwO1xudmFyIFRVUExFX0lOREVYX01BU0sgPSAweDBmZmY7XG52YXIgUE9JTlRTX0FSRV9XT1JEUyA9IDB4ODA7XG52YXIgUE9JTlRfUlVOX0NPVU5UX01BU0sgPSAweDdmO1xudmFyIERFTFRBU19BUkVfWkVSTyA9IDB4ODA7XG52YXIgREVMVEFTX0FSRV9XT1JEUyA9IDB4NDA7XG52YXIgREVMVEFfUlVOX0NPVU5UX01BU0sgPSAweDNmO1xuLyoqXHJcbiAqIFRoaXMgY2xhc3MgaXMgdHJhbnNmb3JtcyBUcnVlVHlwZSBnbHlwaHMgYWNjb3JkaW5nIHRvIHRoZSBkYXRhIGZyb21cclxuICogdGhlIEFwcGxlIEFkdmFuY2VkIFR5cG9ncmFwaHkgdmFyaWF0aW9uIHRhYmxlcyAoZnZhciwgZ3ZhciwgYW5kIGF2YXIpLlxyXG4gKiBUaGVzZSB0YWJsZXMgYWxsb3cgaW5maW5pdGUgYWRqdXN0bWVudHMgdG8gZ2x5cGggd2VpZ2h0LCB3aWR0aCwgc2xhbnQsXHJcbiAqIGFuZCBvcHRpY2FsIHNpemUgd2l0aG91dCB0aGUgZGVzaWduZXIgbmVlZGluZyB0byBzcGVjaWZ5IGV2ZXJ5IGV4YWN0IHN0eWxlLlxyXG4gKlxyXG4gKiBBcHBsZSdzIGRvY3VtZW50YXRpb24gZm9yIHRoZXNlIHRhYmxlcyBpcyBub3QgZ3JlYXQsIHNvIHRoYW5rcyB0byB0aGVcclxuICogRnJlZXR5cGUgcHJvamVjdCBmb3IgZmlndXJpbmcgbXVjaCBvZiB0aGlzIG91dC5cclxuICpcclxuICogQHByaXZhdGVcclxuICovXG5cbnZhciBHbHlwaFZhcmlhdGlvblByb2Nlc3NvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEdseXBoVmFyaWF0aW9uUHJvY2Vzc29yKGZvbnQsIGNvb3Jkcykge1xuICAgIHRoaXMuZm9udCA9IGZvbnQ7XG4gICAgdGhpcy5ub3JtYWxpemVkQ29vcmRzID0gdGhpcy5ub3JtYWxpemVDb29yZHMoY29vcmRzKTtcbiAgICB0aGlzLmJsZW5kVmVjdG9ycyA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIHZhciBfcHJvdG8zOCA9IEdseXBoVmFyaWF0aW9uUHJvY2Vzc29yLnByb3RvdHlwZTtcblxuICBfcHJvdG8zOC5ub3JtYWxpemVDb29yZHMgPSBmdW5jdGlvbiBub3JtYWxpemVDb29yZHMoY29vcmRzKSB7XG4gICAgLy8gdGhlIGRlZmF1bHQgbWFwcGluZyBpcyBsaW5lYXIgYWxvbmcgZWFjaCBheGlzLCBpbiB0d28gc2VnbWVudHM6XG4gICAgLy8gZnJvbSB0aGUgbWluVmFsdWUgdG8gZGVmYXVsdFZhbHVlLCBhbmQgZnJvbSBkZWZhdWx0VmFsdWUgdG8gbWF4VmFsdWUuXG4gICAgdmFyIG5vcm1hbGl6ZWQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mb250LmZ2YXIuYXhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGF4aXMgPSB0aGlzLmZvbnQuZnZhci5heGlzW2ldO1xuXG4gICAgICBpZiAoY29vcmRzW2ldIDwgYXhpcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgbm9ybWFsaXplZC5wdXNoKChjb29yZHNbaV0gLSBheGlzLmRlZmF1bHRWYWx1ZSArIE51bWJlci5FUFNJTE9OKSAvIChheGlzLmRlZmF1bHRWYWx1ZSAtIGF4aXMubWluVmFsdWUgKyBOdW1iZXIuRVBTSUxPTikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9ybWFsaXplZC5wdXNoKChjb29yZHNbaV0gLSBheGlzLmRlZmF1bHRWYWx1ZSArIE51bWJlci5FUFNJTE9OKSAvIChheGlzLm1heFZhbHVlIC0gYXhpcy5kZWZhdWx0VmFsdWUgKyBOdW1iZXIuRVBTSUxPTikpO1xuICAgICAgfVxuICAgIH0gLy8gaWYgdGhlcmUgaXMgYW4gYXZhciB0YWJsZSwgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgaXMgY2FsY3VsYXRlZFxuICAgIC8vIGJ5IGludGVycG9sYXRpbmcgYmV0d2VlbiB0aGUgdHdvIG5lYXJlc3QgbWFwcGVkIHZhbHVlcy5cblxuXG4gICAgaWYgKHRoaXMuZm9udC5hdmFyKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZm9udC5hdmFyLnNlZ21lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNlZ21lbnQgPSB0aGlzLmZvbnQuYXZhci5zZWdtZW50W2ldO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VnbWVudC5jb3JyZXNwb25kZW5jZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHZhciBwYWlyID0gc2VnbWVudC5jb3JyZXNwb25kZW5jZVtqXTtcblxuICAgICAgICAgIGlmIChqID49IDEgJiYgbm9ybWFsaXplZFtpXSA8IHBhaXIuZnJvbUNvb3JkKSB7XG4gICAgICAgICAgICB2YXIgcHJldiA9IHNlZ21lbnQuY29ycmVzcG9uZGVuY2VbaiAtIDFdO1xuICAgICAgICAgICAgbm9ybWFsaXplZFtpXSA9ICgobm9ybWFsaXplZFtpXSAtIHByZXYuZnJvbUNvb3JkKSAqIChwYWlyLnRvQ29vcmQgLSBwcmV2LnRvQ29vcmQpICsgTnVtYmVyLkVQU0lMT04pIC8gKHBhaXIuZnJvbUNvb3JkIC0gcHJldi5mcm9tQ29vcmQgKyBOdW1iZXIuRVBTSUxPTikgKyBwcmV2LnRvQ29vcmQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfTtcblxuICBfcHJvdG8zOC50cmFuc2Zvcm1Qb2ludHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1Qb2ludHMoZ2lkLCBnbHlwaFBvaW50cykge1xuICAgIGlmICghdGhpcy5mb250LmZ2YXIgfHwgIXRoaXMuZm9udC5ndmFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGd2YXIgPSB0aGlzLmZvbnQuZ3ZhcjtcblxuICAgIGlmIChnaWQgPj0gZ3Zhci5nbHlwaENvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldCA9IGd2YXIub2Zmc2V0c1tnaWRdO1xuXG4gICAgaWYgKG9mZnNldCA9PT0gZ3Zhci5vZmZzZXRzW2dpZCArIDFdKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBSZWFkIHRoZSBndmFyIGRhdGEgZm9yIHRoaXMgZ2x5cGhcblxuXG4gICAgdmFyIHN0cmVhbSA9IHRoaXMuZm9udC5zdHJlYW07XG4gICAgc3RyZWFtLnBvcyA9IG9mZnNldDtcblxuICAgIGlmIChzdHJlYW0ucG9zID49IHN0cmVhbS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdHVwbGVDb3VudCA9IHN0cmVhbS5yZWFkVUludDE2QkUoKTtcbiAgICB2YXIgb2Zmc2V0VG9EYXRhID0gb2Zmc2V0ICsgc3RyZWFtLnJlYWRVSW50MTZCRSgpO1xuXG4gICAgaWYgKHR1cGxlQ291bnQgJiBUVVBMRVNfU0hBUkVfUE9JTlRfTlVNQkVSUykge1xuICAgICAgdmFyIGhlcmUgPSBzdHJlYW0ucG9zO1xuICAgICAgc3RyZWFtLnBvcyA9IG9mZnNldFRvRGF0YTtcbiAgICAgIHZhciBzaGFyZWRQb2ludHMgPSB0aGlzLmRlY29kZVBvaW50cygpO1xuICAgICAgb2Zmc2V0VG9EYXRhID0gc3RyZWFtLnBvcztcbiAgICAgIHN0cmVhbS5wb3MgPSBoZXJlO1xuICAgIH1cblxuICAgIHZhciBvcmlnUG9pbnRzID0gZ2x5cGhQb2ludHMubWFwKGZ1bmN0aW9uIChwdCkge1xuICAgICAgcmV0dXJuIHB0LmNvcHkoKTtcbiAgICB9KTtcbiAgICB0dXBsZUNvdW50ICY9IFRVUExFX0NPVU5UX01BU0s7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR1cGxlQ291bnQ7IGkrKykge1xuICAgICAgdmFyIHR1cGxlRGF0YVNpemUgPSBzdHJlYW0ucmVhZFVJbnQxNkJFKCk7XG4gICAgICB2YXIgdHVwbGVJbmRleCA9IHN0cmVhbS5yZWFkVUludDE2QkUoKTtcblxuICAgICAgaWYgKHR1cGxlSW5kZXggJiBFTUJFRERFRF9UVVBMRV9DT09SRCkge1xuICAgICAgICB2YXIgdHVwbGVDb29yZHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGd2YXIuYXhpc0NvdW50OyBhKyspIHtcbiAgICAgICAgICB0dXBsZUNvb3Jkcy5wdXNoKHN0cmVhbS5yZWFkSW50MTZCRSgpIC8gMTYzODQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoKHR1cGxlSW5kZXggJiBUVVBMRV9JTkRFWF9NQVNLKSA+PSBndmFyLmdsb2JhbENvb3JkQ291bnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ3ZhciB0YWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHR1cGxlQ29vcmRzID0gZ3Zhci5nbG9iYWxDb29yZHNbdHVwbGVJbmRleCAmIFRVUExFX0lOREVYX01BU0tdO1xuICAgICAgfVxuXG4gICAgICBpZiAodHVwbGVJbmRleCAmIElOVEVSTUVESUFURV9UVVBMRSkge1xuICAgICAgICB2YXIgc3RhcnRDb29yZHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBfYSA9IDA7IF9hIDwgZ3Zhci5heGlzQ291bnQ7IF9hKyspIHtcbiAgICAgICAgICBzdGFydENvb3Jkcy5wdXNoKHN0cmVhbS5yZWFkSW50MTZCRSgpIC8gMTYzODQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVuZENvb3JkcyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIF9hMiA9IDA7IF9hMiA8IGd2YXIuYXhpc0NvdW50OyBfYTIrKykge1xuICAgICAgICAgIGVuZENvb3Jkcy5wdXNoKHN0cmVhbS5yZWFkSW50MTZCRSgpIC8gMTYzODQpO1xuICAgICAgICB9XG4gICAgICB9IC8vIEdldCB0aGUgZmFjdG9yIGF0IHdoaWNoIHRvIGFwcGx5IHRoaXMgdHVwbGVcblxuXG4gICAgICB2YXIgZmFjdG9yID0gdGhpcy50dXBsZUZhY3Rvcih0dXBsZUluZGV4LCB0dXBsZUNvb3Jkcywgc3RhcnRDb29yZHMsIGVuZENvb3Jkcyk7XG5cbiAgICAgIGlmIChmYWN0b3IgPT09IDApIHtcbiAgICAgICAgb2Zmc2V0VG9EYXRhICs9IHR1cGxlRGF0YVNpemU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGVyZSA9IHN0cmVhbS5wb3M7XG4gICAgICBzdHJlYW0ucG9zID0gb2Zmc2V0VG9EYXRhO1xuXG4gICAgICBpZiAodHVwbGVJbmRleCAmIFBSSVZBVEVfUE9JTlRfTlVNQkVSUykge1xuICAgICAgICB2YXIgcG9pbnRzID0gdGhpcy5kZWNvZGVQb2ludHMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwb2ludHMgPSBzaGFyZWRQb2ludHM7XG4gICAgICB9IC8vIHBvaW50cy5sZW5ndGggPSAwIG1lYW5zIHRoZXJlIGFyZSBkZWx0YXMgZm9yIGFsbCBwb2ludHNcblxuXG4gICAgICB2YXIgblBvaW50cyA9IHBvaW50cy5sZW5ndGggPT09IDAgPyBnbHlwaFBvaW50cy5sZW5ndGggOiBwb2ludHMubGVuZ3RoO1xuICAgICAgdmFyIHhEZWx0YXMgPSB0aGlzLmRlY29kZURlbHRhcyhuUG9pbnRzKTtcbiAgICAgIHZhciB5RGVsdGFzID0gdGhpcy5kZWNvZGVEZWx0YXMoblBvaW50cyk7XG5cbiAgICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGFsbCBwb2ludHNcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGdseXBoUG9pbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIHZhciBwb2ludCA9IGdseXBoUG9pbnRzW19pXTtcbiAgICAgICAgICBwb2ludC54ICs9IE1hdGgucm91bmQoeERlbHRhc1tfaV0gKiBmYWN0b3IpO1xuICAgICAgICAgIHBvaW50LnkgKz0gTWF0aC5yb3VuZCh5RGVsdGFzW19pXSAqIGZhY3Rvcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvdXRQb2ludHMgPSBvcmlnUG9pbnRzLm1hcChmdW5jdGlvbiAocHQpIHtcbiAgICAgICAgICByZXR1cm4gcHQuY29weSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGhhc0RlbHRhID0gZ2x5cGhQb2ludHMubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHBvaW50cy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgICAgdmFyIGlkeCA9IHBvaW50c1tfaTJdO1xuXG4gICAgICAgICAgaWYgKGlkeCA8IGdseXBoUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIF9wb2ludCA9IG91dFBvaW50c1tpZHhdO1xuICAgICAgICAgICAgaGFzRGVsdGFbaWR4XSA9IHRydWU7XG4gICAgICAgICAgICBfcG9pbnQueCArPSBNYXRoLnJvdW5kKHhEZWx0YXNbX2kyXSAqIGZhY3Rvcik7XG4gICAgICAgICAgICBfcG9pbnQueSArPSBNYXRoLnJvdW5kKHlEZWx0YXNbX2kyXSAqIGZhY3Rvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcnBvbGF0ZU1pc3NpbmdEZWx0YXMob3V0UG9pbnRzLCBvcmlnUG9pbnRzLCBoYXNEZWx0YSk7XG5cbiAgICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgZ2x5cGhQb2ludHMubGVuZ3RoOyBfaTMrKykge1xuICAgICAgICAgIHZhciBkZWx0YVggPSBvdXRQb2ludHNbX2kzXS54IC0gb3JpZ1BvaW50c1tfaTNdLng7XG4gICAgICAgICAgdmFyIGRlbHRhWSA9IG91dFBvaW50c1tfaTNdLnkgLSBvcmlnUG9pbnRzW19pM10ueTtcbiAgICAgICAgICBnbHlwaFBvaW50c1tfaTNdLnggKz0gZGVsdGFYO1xuICAgICAgICAgIGdseXBoUG9pbnRzW19pM10ueSArPSBkZWx0YVk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb2Zmc2V0VG9EYXRhICs9IHR1cGxlRGF0YVNpemU7XG4gICAgICBzdHJlYW0ucG9zID0gaGVyZTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMzguZGVjb2RlUG9pbnRzID0gZnVuY3Rpb24gZGVjb2RlUG9pbnRzKCkge1xuICAgIHZhciBzdHJlYW0gPSB0aGlzLmZvbnQuc3RyZWFtO1xuICAgIHZhciBjb3VudCA9IHN0cmVhbS5yZWFkVUludDgoKTtcblxuICAgIGlmIChjb3VudCAmIFBPSU5UU19BUkVfV09SRFMpIHtcbiAgICAgIGNvdW50ID0gKGNvdW50ICYgUE9JTlRfUlVOX0NPVU5UX01BU0spIDw8IDggfCBzdHJlYW0ucmVhZFVJbnQ4KCk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IG5ldyBVaW50MTZBcnJheShjb3VudCk7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwb2ludCA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGNvdW50KSB7XG4gICAgICB2YXIgcnVuID0gc3RyZWFtLnJlYWRVSW50OCgpO1xuICAgICAgdmFyIHJ1bkNvdW50ID0gKHJ1biAmIFBPSU5UX1JVTl9DT1VOVF9NQVNLKSArIDE7XG4gICAgICB2YXIgZm4gPSBydW4gJiBQT0lOVFNfQVJFX1dPUkRTID8gc3RyZWFtLnJlYWRVSW50MTYgOiBzdHJlYW0ucmVhZFVJbnQ4O1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJ1bkNvdW50ICYmIGkgPCBjb3VudDsgaisrKSB7XG4gICAgICAgIHBvaW50ICs9IGZuLmNhbGwoc3RyZWFtKTtcbiAgICAgICAgcG9pbnRzW2krK10gPSBwb2ludDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xuICB9O1xuXG4gIF9wcm90bzM4LmRlY29kZURlbHRhcyA9IGZ1bmN0aW9uIGRlY29kZURlbHRhcyhjb3VudCkge1xuICAgIHZhciBzdHJlYW0gPSB0aGlzLmZvbnQuc3RyZWFtO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgZGVsdGFzID0gbmV3IEludDE2QXJyYXkoY291bnQpO1xuXG4gICAgd2hpbGUgKGkgPCBjb3VudCkge1xuICAgICAgdmFyIHJ1biA9IHN0cmVhbS5yZWFkVUludDgoKTtcbiAgICAgIHZhciBydW5Db3VudCA9IChydW4gJiBERUxUQV9SVU5fQ09VTlRfTUFTSykgKyAxO1xuXG4gICAgICBpZiAocnVuICYgREVMVEFTX0FSRV9aRVJPKSB7XG4gICAgICAgIGkgKz0gcnVuQ291bnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZm4gPSBydW4gJiBERUxUQVNfQVJFX1dPUkRTID8gc3RyZWFtLnJlYWRJbnQxNkJFIDogc3RyZWFtLnJlYWRJbnQ4O1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcnVuQ291bnQgJiYgaSA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgICBkZWx0YXNbaSsrXSA9IGZuLmNhbGwoc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWx0YXM7XG4gIH07XG5cbiAgX3Byb3RvMzgudHVwbGVGYWN0b3IgPSBmdW5jdGlvbiB0dXBsZUZhY3Rvcih0dXBsZUluZGV4LCB0dXBsZUNvb3Jkcywgc3RhcnRDb29yZHMsIGVuZENvb3Jkcykge1xuICAgIHZhciBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVkQ29vcmRzO1xuICAgIHZhciBndmFyID0gdGhpcy5mb250Lmd2YXI7XG4gICAgdmFyIGZhY3RvciA9IDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGd2YXIuYXhpc0NvdW50OyBpKyspIHtcbiAgICAgIGlmICh0dXBsZUNvb3Jkc1tpXSA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vcm1hbGl6ZWRbaV0gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIGlmICgodHVwbGVJbmRleCAmIElOVEVSTUVESUFURV9UVVBMRSkgPT09IDApIHtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRbaV0gPCBNYXRoLm1pbigwLCB0dXBsZUNvb3Jkc1tpXSkgfHwgbm9ybWFsaXplZFtpXSA+IE1hdGgubWF4KDAsIHR1cGxlQ29vcmRzW2ldKSkge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFjdG9yID0gKGZhY3RvciAqIG5vcm1hbGl6ZWRbaV0gKyBOdW1iZXIuRVBTSUxPTikgLyAodHVwbGVDb29yZHNbaV0gKyBOdW1iZXIuRVBTSUxPTik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobm9ybWFsaXplZFtpXSA8IHN0YXJ0Q29vcmRzW2ldIHx8IG5vcm1hbGl6ZWRbaV0gPiBlbmRDb29yZHNbaV0pIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkW2ldIDwgdHVwbGVDb29yZHNbaV0pIHtcbiAgICAgICAgICBmYWN0b3IgPSBmYWN0b3IgKiAobm9ybWFsaXplZFtpXSAtIHN0YXJ0Q29vcmRzW2ldICsgTnVtYmVyLkVQU0lMT04pIC8gKHR1cGxlQ29vcmRzW2ldIC0gc3RhcnRDb29yZHNbaV0gKyBOdW1iZXIuRVBTSUxPTik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFjdG9yID0gZmFjdG9yICogKGVuZENvb3Jkc1tpXSAtIG5vcm1hbGl6ZWRbaV0gKyBOdW1iZXIuRVBTSUxPTikgLyAoZW5kQ29vcmRzW2ldIC0gdHVwbGVDb29yZHNbaV0gKyBOdW1iZXIuRVBTSUxPTik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFjdG9yO1xuICB9IC8vIEludGVycG9sYXRlcyBwb2ludHMgd2l0aG91dCBkZWx0YSB2YWx1ZXMuXG4gIC8vIE5lZWRlZCBmb3IgdGhlIMOYIGFuZCBRIGdseXBocyBpbiBTa2lhLlxuICAvLyBBbGdvcml0aG0gZnJvbSBGcmVldHlwZS5cbiAgO1xuXG4gIF9wcm90bzM4LmludGVycG9sYXRlTWlzc2luZ0RlbHRhcyA9IGZ1bmN0aW9uIGludGVycG9sYXRlTWlzc2luZ0RlbHRhcyhwb2ludHMsIGluUG9pbnRzLCBoYXNEZWx0YSkge1xuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHBvaW50ID0gMDtcblxuICAgIHdoaWxlIChwb2ludCA8IHBvaW50cy5sZW5ndGgpIHtcbiAgICAgIHZhciBmaXJzdFBvaW50ID0gcG9pbnQ7IC8vIGZpbmQgdGhlIGVuZCBwb2ludCBvZiB0aGUgY29udG91clxuXG4gICAgICB2YXIgZW5kUG9pbnQgPSBwb2ludDtcbiAgICAgIHZhciBwdCA9IHBvaW50c1tlbmRQb2ludF07XG5cbiAgICAgIHdoaWxlICghcHQuZW5kQ29udG91cikge1xuICAgICAgICBwdCA9IHBvaW50c1srK2VuZFBvaW50XTtcbiAgICAgIH0gLy8gZmluZCB0aGUgZmlyc3QgcG9pbnQgdGhhdCBoYXMgYSBkZWx0YVxuXG5cbiAgICAgIHdoaWxlIChwb2ludCA8PSBlbmRQb2ludCAmJiAhaGFzRGVsdGFbcG9pbnRdKSB7XG4gICAgICAgIHBvaW50Kys7XG4gICAgICB9XG5cbiAgICAgIGlmIChwb2ludCA+IGVuZFBvaW50KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3REZWx0YSA9IHBvaW50O1xuICAgICAgdmFyIGN1ckRlbHRhID0gcG9pbnQ7XG4gICAgICBwb2ludCsrO1xuXG4gICAgICB3aGlsZSAocG9pbnQgPD0gZW5kUG9pbnQpIHtcbiAgICAgICAgLy8gZmluZCB0aGUgbmV4dCBwb2ludCB3aXRoIGEgZGVsdGEsIGFuZCBpbnRlcnBvbGF0ZSBpbnRlcm1lZGlhdGUgcG9pbnRzXG4gICAgICAgIGlmIChoYXNEZWx0YVtwb2ludF0pIHtcbiAgICAgICAgICB0aGlzLmRlbHRhSW50ZXJwb2xhdGUoY3VyRGVsdGEgKyAxLCBwb2ludCAtIDEsIGN1ckRlbHRhLCBwb2ludCwgaW5Qb2ludHMsIHBvaW50cyk7XG4gICAgICAgICAgY3VyRGVsdGEgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50Kys7XG4gICAgICB9IC8vIHNoaWZ0IGNvbnRvdXIgaWYgd2Ugb25seSBoYXZlIGEgc2luZ2xlIGRlbHRhXG5cblxuICAgICAgaWYgKGN1ckRlbHRhID09PSBmaXJzdERlbHRhKSB7XG4gICAgICAgIHRoaXMuZGVsdGFTaGlmdChmaXJzdFBvaW50LCBlbmRQb2ludCwgY3VyRGVsdGEsIGluUG9pbnRzLCBwb2ludHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBoYW5kbGUgdGhlIHJlbWFpbmluZyBwb2ludHMgYXQgdGhlIGVuZCBhbmQgYmVnaW5uaW5nIG9mIHRoZSBjb250b3VyXG4gICAgICAgIHRoaXMuZGVsdGFJbnRlcnBvbGF0ZShjdXJEZWx0YSArIDEsIGVuZFBvaW50LCBjdXJEZWx0YSwgZmlyc3REZWx0YSwgaW5Qb2ludHMsIHBvaW50cyk7XG5cbiAgICAgICAgaWYgKGZpcnN0RGVsdGEgPiAwKSB7XG4gICAgICAgICAgdGhpcy5kZWx0YUludGVycG9sYXRlKGZpcnN0UG9pbnQsIGZpcnN0RGVsdGEgLSAxLCBjdXJEZWx0YSwgZmlyc3REZWx0YSwgaW5Qb2ludHMsIHBvaW50cyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcG9pbnQgPSBlbmRQb2ludCArIDE7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzM4LmRlbHRhSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiBkZWx0YUludGVycG9sYXRlKHAxLCBwMiwgcmVmMSwgcmVmMiwgaW5Qb2ludHMsIG91dFBvaW50cykge1xuICAgIGlmIChwMSA+IHAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGl0ZXJhYmxlID0gWyd4JywgJ3knXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrID0gaXRlcmFibGVbaV07XG5cbiAgICAgIGlmIChpblBvaW50c1tyZWYxXVtrXSA+IGluUG9pbnRzW3JlZjJdW2tdKSB7XG4gICAgICAgIHZhciBwID0gcmVmMTtcbiAgICAgICAgcmVmMSA9IHJlZjI7XG4gICAgICAgIHJlZjIgPSBwO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW4xID0gaW5Qb2ludHNbcmVmMV1ba107XG4gICAgICB2YXIgaW4yID0gaW5Qb2ludHNbcmVmMl1ba107XG4gICAgICB2YXIgb3V0MSA9IG91dFBvaW50c1tyZWYxXVtrXTtcbiAgICAgIHZhciBvdXQyID0gb3V0UG9pbnRzW3JlZjJdW2tdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIHBvaW50cyBoYXZlIHRoZSBzYW1lIGNvb3JkaW5hdGUgYnV0IGRpZmZlcmVudFxuICAgICAgLy8gZGVsdGEsIGluZmVycmVkIGRlbHRhIGlzIHplcm8uICBPdGhlcndpc2UgaW50ZXJwb2xhdGUuXG5cbiAgICAgIGlmIChpbjEgIT09IGluMiB8fCBvdXQxID09PSBvdXQyKSB7XG4gICAgICAgIHZhciBzY2FsZSA9IGluMSA9PT0gaW4yID8gMCA6IChvdXQyIC0gb3V0MSkgLyAoaW4yIC0gaW4xKTtcblxuICAgICAgICBmb3IgKHZhciBfcCA9IHAxOyBfcCA8PSBwMjsgX3ArKykge1xuICAgICAgICAgIHZhciBvdXQgPSBpblBvaW50c1tfcF1ba107XG5cbiAgICAgICAgICBpZiAob3V0IDw9IGluMSkge1xuICAgICAgICAgICAgb3V0ICs9IG91dDEgLSBpbjE7XG4gICAgICAgICAgfSBlbHNlIGlmIChvdXQgPj0gaW4yKSB7XG4gICAgICAgICAgICBvdXQgKz0gb3V0MiAtIGluMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ID0gb3V0MSArIChvdXQgLSBpbjEpICogc2NhbGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb3V0UG9pbnRzW19wXVtrXSA9IG91dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8zOC5kZWx0YVNoaWZ0ID0gZnVuY3Rpb24gZGVsdGFTaGlmdChwMSwgcDIsIHJlZiwgaW5Qb2ludHMsIG91dFBvaW50cykge1xuICAgIHZhciBkZWx0YVggPSBvdXRQb2ludHNbcmVmXS54IC0gaW5Qb2ludHNbcmVmXS54O1xuICAgIHZhciBkZWx0YVkgPSBvdXRQb2ludHNbcmVmXS55IC0gaW5Qb2ludHNbcmVmXS55O1xuXG4gICAgaWYgKGRlbHRhWCA9PT0gMCAmJiBkZWx0YVkgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBwID0gcDE7IHAgPD0gcDI7IHArKykge1xuICAgICAgaWYgKHAgIT09IHJlZikge1xuICAgICAgICBvdXRQb2ludHNbcF0ueCArPSBkZWx0YVg7XG4gICAgICAgIG91dFBvaW50c1twXS55ICs9IGRlbHRhWTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMzguZ2V0QWR2YW5jZUFkanVzdG1lbnQgPSBmdW5jdGlvbiBnZXRBZHZhbmNlQWRqdXN0bWVudChnaWQsIHRhYmxlKSB7XG4gICAgdmFyIG91dGVySW5kZXgsIGlubmVySW5kZXg7XG5cbiAgICBpZiAodGFibGUuYWR2YW5jZVdpZHRoTWFwcGluZykge1xuICAgICAgdmFyIGlkeCA9IGdpZDtcblxuICAgICAgaWYgKGlkeCA+PSB0YWJsZS5hZHZhbmNlV2lkdGhNYXBwaW5nLm1hcENvdW50KSB7XG4gICAgICAgIGlkeCA9IHRhYmxlLmFkdmFuY2VXaWR0aE1hcHBpbmcubWFwQ291bnQgLSAxO1xuICAgICAgfVxuXG4gICAgICB2YXIgZW50cnlGb3JtYXQgPSB0YWJsZS5hZHZhbmNlV2lkdGhNYXBwaW5nLmVudHJ5Rm9ybWF0O1xuICAgICAgdmFyIF90YWJsZSRhZHZhbmNlV2lkdGhNYSA9IHRhYmxlLmFkdmFuY2VXaWR0aE1hcHBpbmcubWFwRGF0YVtpZHhdO1xuICAgICAgb3V0ZXJJbmRleCA9IF90YWJsZSRhZHZhbmNlV2lkdGhNYS5vdXRlckluZGV4O1xuICAgICAgaW5uZXJJbmRleCA9IF90YWJsZSRhZHZhbmNlV2lkdGhNYS5pbm5lckluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRlckluZGV4ID0gMDtcbiAgICAgIGlubmVySW5kZXggPSBnaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RGVsdGEodGFibGUuaXRlbVZhcmlhdGlvblN0b3JlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KTtcbiAgfSAvLyBTZWUgcHNldWRvIGNvZGUgZnJvbSBgRm9udCBWYXJpYXRpb25zIE92ZXJ2aWV3J1xuICAvLyBpbiB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbi5cbiAgO1xuXG4gIF9wcm90bzM4LmdldERlbHRhID0gZnVuY3Rpb24gZ2V0RGVsdGEoaXRlbVN0b3JlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KSB7XG4gICAgaWYgKG91dGVySW5kZXggPj0gaXRlbVN0b3JlLml0ZW1WYXJpYXRpb25EYXRhLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgdmFyIHZhckRhdGEgPSBpdGVtU3RvcmUuaXRlbVZhcmlhdGlvbkRhdGFbb3V0ZXJJbmRleF07XG5cbiAgICBpZiAoaW5uZXJJbmRleCA+PSB2YXJEYXRhLmRlbHRhU2V0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHZhciBkZWx0YVNldCA9IHZhckRhdGEuZGVsdGFTZXRzW2lubmVySW5kZXhdO1xuICAgIHZhciBibGVuZFZlY3RvciA9IHRoaXMuZ2V0QmxlbmRWZWN0b3IoaXRlbVN0b3JlLCBvdXRlckluZGV4KTtcbiAgICB2YXIgbmV0QWRqdXN0bWVudCA9IDA7XG5cbiAgICBmb3IgKHZhciBtYXN0ZXIgPSAwOyBtYXN0ZXIgPCB2YXJEYXRhLnJlZ2lvbkluZGV4Q291bnQ7IG1hc3RlcisrKSB7XG4gICAgICBuZXRBZGp1c3RtZW50ICs9IGRlbHRhU2V0LmRlbHRhc1ttYXN0ZXJdICogYmxlbmRWZWN0b3JbbWFzdGVyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV0QWRqdXN0bWVudDtcbiAgfTtcblxuICBfcHJvdG8zOC5nZXRCbGVuZFZlY3RvciA9IGZ1bmN0aW9uIGdldEJsZW5kVmVjdG9yKGl0ZW1TdG9yZSwgb3V0ZXJJbmRleCkge1xuICAgIHZhciB2YXJEYXRhID0gaXRlbVN0b3JlLml0ZW1WYXJpYXRpb25EYXRhW291dGVySW5kZXhdO1xuXG4gICAgaWYgKHRoaXMuYmxlbmRWZWN0b3JzLmhhcyh2YXJEYXRhKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYmxlbmRWZWN0b3JzLmdldCh2YXJEYXRhKTtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENvb3JkcyA9IHRoaXMubm9ybWFsaXplZENvb3JkcztcbiAgICB2YXIgYmxlbmRWZWN0b3IgPSBbXTsgLy8gb3V0ZXIgbG9vcCBzdGVwcyB0aHJvdWdoIG1hc3RlciBkZXNpZ25zIHRvIGJlIGJsZW5kZWRcblxuICAgIGZvciAodmFyIG1hc3RlciA9IDA7IG1hc3RlciA8IHZhckRhdGEucmVnaW9uSW5kZXhDb3VudDsgbWFzdGVyKyspIHtcbiAgICAgIHZhciBzY2FsYXIgPSAxO1xuICAgICAgdmFyIHJlZ2lvbkluZGV4ID0gdmFyRGF0YS5yZWdpb25JbmRleGVzW21hc3Rlcl07XG4gICAgICB2YXIgYXhlcyA9IGl0ZW1TdG9yZS52YXJpYXRpb25SZWdpb25MaXN0LnZhcmlhdGlvblJlZ2lvbnNbcmVnaW9uSW5kZXhdOyAvLyBpbm5lciBsb29wIHN0ZXBzIHRocm91Z2ggYXhlcyBpbiB0aGlzIHJlZ2lvblxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF4ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGF4aXMgPSBheGVzW2pdO1xuICAgICAgICB2YXIgYXhpc1NjYWxhciA9IHZvaWQgMDsgLy8gY29tcHV0ZSB0aGUgc2NhbGFyIGNvbnRyaWJ1dGlvbiBvZiB0aGlzIGF4aXNcbiAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2VzXG5cbiAgICAgICAgaWYgKGF4aXMuc3RhcnRDb29yZCA+IGF4aXMucGVha0Nvb3JkIHx8IGF4aXMucGVha0Nvb3JkID4gYXhpcy5lbmRDb29yZCkge1xuICAgICAgICAgIGF4aXNTY2FsYXIgPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGF4aXMuc3RhcnRDb29yZCA8IDAgJiYgYXhpcy5lbmRDb29yZCA+IDAgJiYgYXhpcy5wZWFrQ29vcmQgIT09IDApIHtcbiAgICAgICAgICBheGlzU2NhbGFyID0gMTsgLy8gcGVhayBvZiAwIG1lYW5zIGlnbm9yZSB0aGlzIGF4aXNcbiAgICAgICAgfSBlbHNlIGlmIChheGlzLnBlYWtDb29yZCA9PT0gMCkge1xuICAgICAgICAgIGF4aXNTY2FsYXIgPSAxOyAvLyBpZ25vcmUgdGhpcyByZWdpb24gaWYgY29vcmRzIGFyZSBvdXQgb2YgcmFuZ2VcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkQ29vcmRzW2pdIDwgYXhpcy5zdGFydENvb3JkIHx8IG5vcm1hbGl6ZWRDb29yZHNbal0gPiBheGlzLmVuZENvb3JkKSB7XG4gICAgICAgICAgYXhpc1NjYWxhciA9IDA7IC8vIGNhbGN1bGF0ZSBhIHByb3BvcnRpb25hbCBmYWN0b3JcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobm9ybWFsaXplZENvb3Jkc1tqXSA9PT0gYXhpcy5wZWFrQ29vcmQpIHtcbiAgICAgICAgICAgIGF4aXNTY2FsYXIgPSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZENvb3Jkc1tqXSA8IGF4aXMucGVha0Nvb3JkKSB7XG4gICAgICAgICAgICBheGlzU2NhbGFyID0gKG5vcm1hbGl6ZWRDb29yZHNbal0gLSBheGlzLnN0YXJ0Q29vcmQgKyBOdW1iZXIuRVBTSUxPTikgLyAoYXhpcy5wZWFrQ29vcmQgLSBheGlzLnN0YXJ0Q29vcmQgKyBOdW1iZXIuRVBTSUxPTik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF4aXNTY2FsYXIgPSAoYXhpcy5lbmRDb29yZCAtIG5vcm1hbGl6ZWRDb29yZHNbal0gKyBOdW1iZXIuRVBTSUxPTikgLyAoYXhpcy5lbmRDb29yZCAtIGF4aXMucGVha0Nvb3JkICsgTnVtYmVyLkVQU0lMT04pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyB0YWtlIHByb2R1Y3Qgb2YgYWxsIHRoZSBheGlzIHNjYWxhcnNcblxuXG4gICAgICAgIHNjYWxhciAqPSBheGlzU2NhbGFyO1xuICAgICAgfVxuXG4gICAgICBibGVuZFZlY3RvclttYXN0ZXJdID0gc2NhbGFyO1xuICAgIH1cblxuICAgIHRoaXMuYmxlbmRWZWN0b3JzLnNldCh2YXJEYXRhLCBibGVuZFZlY3Rvcik7XG4gICAgcmV0dXJuIGJsZW5kVmVjdG9yO1xuICB9O1xuXG4gIHJldHVybiBHbHlwaFZhcmlhdGlvblByb2Nlc3Nvcjtcbn0oKTtcblxudmFyIHJlc29sdmVkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbnZhciBTdWJzZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdWJzZXQoZm9udCkge1xuICAgIHRoaXMuZm9udCA9IGZvbnQ7XG4gICAgdGhpcy5nbHlwaHMgPSBbXTtcbiAgICB0aGlzLm1hcHBpbmcgPSB7fTsgLy8gYWx3YXlzIGluY2x1ZGUgdGhlIG1pc3NpbmcgZ2x5cGhcblxuICAgIHRoaXMuaW5jbHVkZUdseXBoKDApO1xuICB9XG5cbiAgdmFyIF9wcm90bzM5ID0gU3Vic2V0LnByb3RvdHlwZTtcblxuICBfcHJvdG8zOS5pbmNsdWRlR2x5cGggPSBmdW5jdGlvbiBpbmNsdWRlR2x5cGgoZ2x5cGgpIHtcbiAgICBpZiAodHlwZW9mIGdseXBoID09PSAnb2JqZWN0Jykge1xuICAgICAgZ2x5cGggPSBnbHlwaC5pZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXBwaW5nW2dseXBoXSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmdseXBocy5wdXNoKGdseXBoKTtcbiAgICAgIHRoaXMubWFwcGluZ1tnbHlwaF0gPSB0aGlzLmdseXBocy5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1hcHBpbmdbZ2x5cGhdO1xuICB9O1xuXG4gIF9wcm90bzM5LmVuY29kZVN0cmVhbSA9IGZ1bmN0aW9uIGVuY29kZVN0cmVhbSgpIHtcbiAgICB2YXIgX3RoaXMxMSA9IHRoaXM7XG5cbiAgICB2YXIgcyA9IG5ldyByLkVuY29kZVN0cmVhbSgpO1xuICAgIHJlc29sdmVkLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMxMS5lbmNvZGUocyk7XG5cbiAgICAgIHJldHVybiBzLmVuZCgpO1xuICAgIH0pO1xuICAgIHJldHVybiBzO1xuICB9O1xuXG4gIHJldHVybiBTdWJzZXQ7XG59KCk7XG5cbnZhciBPTl9DVVJWRSQxID0gMSA8PCAwO1xudmFyIFhfU0hPUlRfVkVDVE9SJDEgPSAxIDw8IDE7XG52YXIgWV9TSE9SVF9WRUNUT1IkMSA9IDEgPDwgMjtcbnZhciBSRVBFQVQkMSA9IDEgPDwgMztcbnZhciBTQU1FX1gkMSA9IDEgPDwgNDtcbnZhciBTQU1FX1kkMSA9IDEgPDwgNTtcblxudmFyIFBvaW50JDEgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQb2ludCQxKCkge31cblxuICBQb2ludCQxLnNpemUgPSBmdW5jdGlvbiBzaXplKHZhbCkge1xuICAgIHJldHVybiB2YWwgPj0gMCAmJiB2YWwgPD0gMjU1ID8gMSA6IDI7XG4gIH07XG5cbiAgUG9pbnQkMS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyZWFtLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDI1NSkge1xuICAgICAgc3RyZWFtLndyaXRlVUludDgodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0ud3JpdGVJbnQxNkJFKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBvaW50JDE7XG59KCk7XG5cbnZhciBHbHlmID0gbmV3IHIuU3RydWN0KHtcbiAgbnVtYmVyT2ZDb250b3Vyczogci5pbnQxNixcbiAgLy8gaWYgbmVnYXRpdmUsIHRoaXMgaXMgYSBjb21wb3NpdGUgZ2x5cGhcbiAgeE1pbjogci5pbnQxNixcbiAgeU1pbjogci5pbnQxNixcbiAgeE1heDogci5pbnQxNixcbiAgeU1heDogci5pbnQxNixcbiAgZW5kUHRzT2ZDb250b3VyczogbmV3IHIuQXJyYXkoci51aW50MTYsICdudW1iZXJPZkNvbnRvdXJzJyksXG4gIGluc3RydWN0aW9uczogbmV3IHIuQXJyYXkoci51aW50OCwgci51aW50MTYpLFxuICBmbGFnczogbmV3IHIuQXJyYXkoci51aW50OCwgMCksXG4gIHhQb2ludHM6IG5ldyByLkFycmF5KFBvaW50JDEsIDApLFxuICB5UG9pbnRzOiBuZXcgci5BcnJheShQb2ludCQxLCAwKVxufSk7XG4vKipcclxuICogRW5jb2RlcyBUcnVlVHlwZSBnbHlwaCBvdXRsaW5lc1xyXG4gKi9cblxudmFyIFRURkdseXBoRW5jb2RlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRURkdseXBoRW5jb2RlcigpIHt9XG5cbiAgdmFyIF9wcm90bzQwID0gVFRGR2x5cGhFbmNvZGVyLnByb3RvdHlwZTtcblxuICBfcHJvdG80MC5lbmNvZGVTaW1wbGUgPSBmdW5jdGlvbiBlbmNvZGVTaW1wbGUocGF0aCwgaW5zdHJ1Y3Rpb25zKSB7XG4gICAgaWYgKGluc3RydWN0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBpbnN0cnVjdGlvbnMgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgZW5kUHRzT2ZDb250b3VycyA9IFtdO1xuICAgIHZhciB4UG9pbnRzID0gW107XG4gICAgdmFyIHlQb2ludHMgPSBbXTtcbiAgICB2YXIgZmxhZ3MgPSBbXTtcbiAgICB2YXIgc2FtZSA9IDA7XG4gICAgdmFyIGxhc3RYID0gMCxcbiAgICAgICAgbGFzdFkgPSAwLFxuICAgICAgICBsYXN0RmxhZyA9IDA7XG4gICAgdmFyIHBvaW50Q291bnQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmNvbW1hbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHBhdGguY29tbWFuZHNbaV07XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYy5hcmdzLmxlbmd0aDsgaiArPSAyKSB7XG4gICAgICAgIHZhciB4ID0gYy5hcmdzW2pdO1xuICAgICAgICB2YXIgeSA9IGMuYXJnc1tqICsgMV07XG4gICAgICAgIHZhciBmbGFnID0gMDsgLy8gSWYgdGhlIGVuZGluZyBwb2ludCBvZiBhIHF1YWRyYXRpYyBjdXJ2ZSBpcyB0aGUgbWlkcG9pbnRcbiAgICAgICAgLy8gYmV0d2VlbiB0aGUgY29udHJvbCBwb2ludCBhbmQgdGhlIGNvbnRyb2wgcG9pbnQgb2YgdGhlIG5leHRcbiAgICAgICAgLy8gcXVhZHJhdGljIGN1cnZlLCB3ZSBjYW4gb21pdCB0aGUgZW5kaW5nIHBvaW50LlxuXG4gICAgICAgIGlmIChjLmNvbW1hbmQgPT09ICdxdWFkcmF0aWNDdXJ2ZVRvJyAmJiBqID09PSAyKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBwYXRoLmNvbW1hbmRzW2kgKyAxXTtcblxuICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQuY29tbWFuZCA9PT0gJ3F1YWRyYXRpY0N1cnZlVG8nKSB7XG4gICAgICAgICAgICB2YXIgbWlkWCA9IChsYXN0WCArIG5leHQuYXJnc1swXSkgLyAyO1xuICAgICAgICAgICAgdmFyIG1pZFkgPSAobGFzdFkgKyBuZXh0LmFyZ3NbMV0pIC8gMjtcblxuICAgICAgICAgICAgaWYgKHggPT09IG1pZFggJiYgeSA9PT0gbWlkWSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gQWxsIHBvaW50cyBleGNlcHQgY29udHJvbCBwb2ludHMgYXJlIG9uIGN1cnZlLlxuXG5cbiAgICAgICAgaWYgKCEoYy5jb21tYW5kID09PSAncXVhZHJhdGljQ3VydmVUbycgJiYgaiA9PT0gMCkpIHtcbiAgICAgICAgICBmbGFnIHw9IE9OX0NVUlZFJDE7XG4gICAgICAgIH1cblxuICAgICAgICBmbGFnID0gdGhpcy5fZW5jb2RlUG9pbnQoeCwgbGFzdFgsIHhQb2ludHMsIGZsYWcsIFhfU0hPUlRfVkVDVE9SJDEsIFNBTUVfWCQxKTtcbiAgICAgICAgZmxhZyA9IHRoaXMuX2VuY29kZVBvaW50KHksIGxhc3RZLCB5UG9pbnRzLCBmbGFnLCBZX1NIT1JUX1ZFQ1RPUiQxLCBTQU1FX1kkMSk7XG5cbiAgICAgICAgaWYgKGZsYWcgPT09IGxhc3RGbGFnICYmIHNhbWUgPCAyNTUpIHtcbiAgICAgICAgICBmbGFnc1tmbGFncy5sZW5ndGggLSAxXSB8PSBSRVBFQVQkMTtcbiAgICAgICAgICBzYW1lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHNhbWUgPiAwKSB7XG4gICAgICAgICAgICBmbGFncy5wdXNoKHNhbWUpO1xuICAgICAgICAgICAgc2FtZSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmxhZ3MucHVzaChmbGFnKTtcbiAgICAgICAgICBsYXN0RmxhZyA9IGZsYWc7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0WCA9IHg7XG4gICAgICAgIGxhc3RZID0geTtcbiAgICAgICAgcG9pbnRDb3VudCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAoYy5jb21tYW5kID09PSAnY2xvc2VQYXRoJykge1xuICAgICAgICBlbmRQdHNPZkNvbnRvdXJzLnB1c2gocG9pbnRDb3VudCAtIDEpO1xuICAgICAgfVxuICAgIH0gLy8gQ2xvc2UgdGhlIHBhdGggaWYgdGhlIGxhc3QgY29tbWFuZCBkaWRuJ3QgYWxyZWFkeVxuXG5cbiAgICBpZiAocGF0aC5jb21tYW5kcy5sZW5ndGggPiAxICYmIHBhdGguY29tbWFuZHNbcGF0aC5jb21tYW5kcy5sZW5ndGggLSAxXS5jb21tYW5kICE9PSAnY2xvc2VQYXRoJykge1xuICAgICAgZW5kUHRzT2ZDb250b3Vycy5wdXNoKHBvaW50Q291bnQgLSAxKTtcbiAgICB9XG5cbiAgICB2YXIgYmJveCA9IHBhdGguYmJveDtcbiAgICB2YXIgZ2x5ZiA9IHtcbiAgICAgIG51bWJlck9mQ29udG91cnM6IGVuZFB0c09mQ29udG91cnMubGVuZ3RoLFxuICAgICAgeE1pbjogYmJveC5taW5YLFxuICAgICAgeU1pbjogYmJveC5taW5ZLFxuICAgICAgeE1heDogYmJveC5tYXhYLFxuICAgICAgeU1heDogYmJveC5tYXhZLFxuICAgICAgZW5kUHRzT2ZDb250b3VyczogZW5kUHRzT2ZDb250b3VycyxcbiAgICAgIGluc3RydWN0aW9uczogaW5zdHJ1Y3Rpb25zLFxuICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgeFBvaW50czogeFBvaW50cyxcbiAgICAgIHlQb2ludHM6IHlQb2ludHNcbiAgICB9O1xuICAgIHZhciBzaXplID0gR2x5Zi5zaXplKGdseWYpO1xuICAgIHZhciB0YWlsID0gNCAtIHNpemUgJSA0O1xuICAgIHZhciBzdHJlYW0gPSBuZXcgci5FbmNvZGVTdHJlYW0oc2l6ZSArIHRhaWwpO1xuICAgIEdseWYuZW5jb2RlKHN0cmVhbSwgZ2x5Zik7IC8vIEFsaWduIHRvIDQtYnl0ZSBsZW5ndGhcblxuICAgIGlmICh0YWlsICE9PSAwKSB7XG4gICAgICBzdHJlYW0uZmlsbCgwLCB0YWlsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLmJ1ZmZlcjtcbiAgfTtcblxuICBfcHJvdG80MC5fZW5jb2RlUG9pbnQgPSBmdW5jdGlvbiBfZW5jb2RlUG9pbnQodmFsdWUsIGxhc3QsIHBvaW50cywgZmxhZywgc2hvcnRGbGFnLCBzYW1lRmxhZykge1xuICAgIHZhciBkaWZmID0gdmFsdWUgLSBsYXN0O1xuXG4gICAgaWYgKHZhbHVlID09PSBsYXN0KSB7XG4gICAgICBmbGFnIHw9IHNhbWVGbGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoLTI1NSA8PSBkaWZmICYmIGRpZmYgPD0gMjU1KSB7XG4gICAgICAgIGZsYWcgfD0gc2hvcnRGbGFnO1xuXG4gICAgICAgIGlmIChkaWZmIDwgMCkge1xuICAgICAgICAgIGRpZmYgPSAtZGlmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmbGFnIHw9IHNhbWVGbGFnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBvaW50cy5wdXNoKGRpZmYpO1xuICAgIH1cblxuICAgIHJldHVybiBmbGFnO1xuICB9O1xuXG4gIHJldHVybiBUVEZHbHlwaEVuY29kZXI7XG59KCk7XG5cbnZhciBUVEZTdWJzZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzZXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVFRGU3Vic2V0LCBfU3Vic2V0KTtcblxuICBmdW5jdGlvbiBUVEZTdWJzZXQoZm9udCkge1xuICAgIHZhciBfdGhpczEyO1xuXG4gICAgX3RoaXMxMiA9IF9TdWJzZXQuY2FsbCh0aGlzLCBmb250KSB8fCB0aGlzO1xuICAgIF90aGlzMTIuZ2x5cGhFbmNvZGVyID0gbmV3IFRURkdseXBoRW5jb2RlcigpO1xuICAgIHJldHVybiBfdGhpczEyO1xuICB9XG5cbiAgdmFyIF9wcm90bzQxID0gVFRGU3Vic2V0LnByb3RvdHlwZTtcblxuICBfcHJvdG80MS5fYWRkR2x5cGggPSBmdW5jdGlvbiBfYWRkR2x5cGgoZ2lkKSB7XG4gICAgdmFyIGdseXBoID0gdGhpcy5mb250LmdldEdseXBoKGdpZCk7XG5cbiAgICB2YXIgZ2x5ZiA9IGdseXBoLl9kZWNvZGUoKTsgLy8gZ2V0IHRoZSBvZmZzZXQgdG8gdGhlIGdseXBoIGZyb20gdGhlIGxvY2EgdGFibGVcblxuXG4gICAgdmFyIGN1ck9mZnNldCA9IHRoaXMuZm9udC5sb2NhLm9mZnNldHNbZ2lkXTtcbiAgICB2YXIgbmV4dE9mZnNldCA9IHRoaXMuZm9udC5sb2NhLm9mZnNldHNbZ2lkICsgMV07XG5cbiAgICB2YXIgc3RyZWFtID0gdGhpcy5mb250Ll9nZXRUYWJsZVN0cmVhbSgnZ2x5ZicpO1xuXG4gICAgc3RyZWFtLnBvcyArPSBjdXJPZmZzZXQ7XG4gICAgdmFyIGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKG5leHRPZmZzZXQgLSBjdXJPZmZzZXQpOyAvLyBpZiBpdCBpcyBhIGNvbXBvdW5kIGdseXBoLCBpbmNsdWRlIGl0cyBjb21wb25lbnRzXG5cbiAgICBpZiAoZ2x5ZiAmJiBnbHlmLm51bWJlck9mQ29udG91cnMgPCAwKSB7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShidWZmZXIpO1xuXG4gICAgICBmb3IgKHZhciBfaXRlcmF0b3I3MiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoZ2x5Zi5jb21wb25lbnRzKSwgX3N0ZXA3MjsgIShfc3RlcDcyID0gX2l0ZXJhdG9yNzIoKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IF9zdGVwNzIudmFsdWU7XG4gICAgICAgIGdpZCA9IHRoaXMuaW5jbHVkZUdseXBoKGNvbXBvbmVudC5nbHlwaElEKTtcbiAgICAgICAgYnVmZmVyLndyaXRlVUludDE2QkUoZ2lkLCBjb21wb25lbnQucG9zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGdseWYgJiYgdGhpcy5mb250Ll92YXJpYXRpb25Qcm9jZXNzb3IpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgYSBUcnVlVHlwZSB2YXJpYXRpb24gZ2x5cGgsIHJlLWVuY29kZSB0aGUgcGF0aFxuICAgICAgYnVmZmVyID0gdGhpcy5nbHlwaEVuY29kZXIuZW5jb2RlU2ltcGxlKGdseXBoLnBhdGgsIGdseWYuaW5zdHJ1Y3Rpb25zKTtcbiAgICB9XG5cbiAgICB0aGlzLmdseWYucHVzaChidWZmZXIpO1xuICAgIHRoaXMubG9jYS5vZmZzZXRzLnB1c2godGhpcy5vZmZzZXQpO1xuICAgIHRoaXMuaG10eC5tZXRyaWNzLnB1c2goe1xuICAgICAgYWR2YW5jZTogZ2x5cGguYWR2YW5jZVdpZHRoLFxuICAgICAgYmVhcmluZzogZ2x5cGguX2dldE1ldHJpY3MoKS5sZWZ0QmVhcmluZ1xuICAgIH0pO1xuICAgIHRoaXMub2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgcmV0dXJuIHRoaXMuZ2x5Zi5sZW5ndGggLSAxO1xuICB9O1xuXG4gIF9wcm90bzQxLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHJlYW0pIHtcbiAgICAvLyB0YWJsZXMgcmVxdWlyZWQgYnkgUERGIHNwZWM6XG4gICAgLy8gICBoZWFkLCBoaGVhLCBsb2NhLCBtYXhwLCBjdnQgLCBwcmVwLCBnbHlmLCBobXR4LCBmcGdtXG4gICAgLy9cbiAgICAvLyBhZGRpdGlvbmFsIHRhYmxlcyByZXF1aXJlZCBmb3Igc3RhbmRhbG9uZSBmb250czpcbiAgICAvLyAgIG5hbWUsIGNtYXAsIE9TLzIsIHBvc3RcbiAgICB0aGlzLmdseWYgPSBbXTtcbiAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgdGhpcy5sb2NhID0ge1xuICAgICAgb2Zmc2V0czogW10sXG4gICAgICB2ZXJzaW9uOiB0aGlzLmZvbnQubG9jYS52ZXJzaW9uXG4gICAgfTtcbiAgICB0aGlzLmhtdHggPSB7XG4gICAgICBtZXRyaWNzOiBbXSxcbiAgICAgIGJlYXJpbmdzOiBbXVxuICAgIH07IC8vIGluY2x1ZGUgYWxsIHRoZSBnbHlwaHNcbiAgICAvLyBub3QgdXNpbmcgYSBmb3IgbG9vcCBiZWNhdXNlIHdlIG5lZWQgdG8gc3VwcG9ydCBhZGRpbmcgbW9yZVxuICAgIC8vIGdseXBocyB0byB0aGUgYXJyYXkgYXMgd2UgZ28sIGFuZCBDb2ZmZWVTY3JpcHQgY2FjaGVzIHRoZSBsZW5ndGguXG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMuZ2x5cGhzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fYWRkR2x5cGgodGhpcy5nbHlwaHNbaSsrXSk7XG4gICAgfVxuXG4gICAgdmFyIG1heHAgPSBjbG9uZURlZXAodGhpcy5mb250Lm1heHApO1xuICAgIG1heHAubnVtR2x5cGhzID0gdGhpcy5nbHlmLmxlbmd0aDtcbiAgICB0aGlzLmxvY2Eub2Zmc2V0cy5wdXNoKHRoaXMub2Zmc2V0KTtcbiAgICB2YXIgaGVhZCA9IGNsb25lRGVlcCh0aGlzLmZvbnQuaGVhZCk7XG4gICAgaGVhZC5pbmRleFRvTG9jRm9ybWF0ID0gdGhpcy5sb2NhLnZlcnNpb247XG4gICAgdmFyIGhoZWEgPSBjbG9uZURlZXAodGhpcy5mb250LmhoZWEpO1xuICAgIGhoZWEubnVtYmVyT2ZNZXRyaWNzID0gdGhpcy5obXR4Lm1ldHJpY3MubGVuZ3RoOyAvLyBtYXAgPSBbXVxuICAgIC8vIGZvciBpbmRleCBpbiBbMC4uLjI1Nl1cbiAgICAvLyAgICAgaWYgaW5kZXggPCBAbnVtR2x5cGhzXG4gICAgLy8gICAgICAgICBtYXBbaW5kZXhdID0gaW5kZXhcbiAgICAvLyAgICAgZWxzZVxuICAgIC8vICAgICAgICAgbWFwW2luZGV4XSA9IDBcbiAgICAvL1xuICAgIC8vIGNtYXBUYWJsZSA9XG4gICAgLy8gICAgIHZlcnNpb246IDBcbiAgICAvLyAgICAgbGVuZ3RoOiAyNjJcbiAgICAvLyAgICAgbGFuZ3VhZ2U6IDBcbiAgICAvLyAgICAgY29kZU1hcDogbWFwXG4gICAgLy9cbiAgICAvLyBjbWFwID1cbiAgICAvLyAgICAgdmVyc2lvbjogMFxuICAgIC8vICAgICBudW1TdWJ0YWJsZXM6IDFcbiAgICAvLyAgICAgdGFibGVzOiBbXG4gICAgLy8gICAgICAgICBwbGF0Zm9ybUlEOiAxXG4gICAgLy8gICAgICAgICBlbmNvZGluZ0lEOiAwXG4gICAgLy8gICAgICAgICB0YWJsZTogY21hcFRhYmxlXG4gICAgLy8gICAgIF1cbiAgICAvLyBUT0RPOiBzdWJzZXQgcHJlcCwgY3Z0LCBmcGdtP1xuXG4gICAgRGlyZWN0b3J5LmVuY29kZShzdHJlYW0sIHtcbiAgICAgIHRhYmxlczoge1xuICAgICAgICBoZWFkOiBoZWFkLFxuICAgICAgICBoaGVhOiBoaGVhLFxuICAgICAgICBsb2NhOiB0aGlzLmxvY2EsXG4gICAgICAgIG1heHA6IG1heHAsXG4gICAgICAgICdjdnQgJzogdGhpcy5mb250WydjdnQgJ10sXG4gICAgICAgIHByZXA6IHRoaXMuZm9udC5wcmVwLFxuICAgICAgICBnbHlmOiB0aGlzLmdseWYsXG4gICAgICAgIGhtdHg6IHRoaXMuaG10eCxcbiAgICAgICAgZnBnbTogdGhpcy5mb250LmZwZ20gLy8gbmFtZTogY2xvbmUgQGZvbnQubmFtZVxuICAgICAgICAvLyAnT1MvMic6IGNsb25lIEBmb250WydPUy8yJ11cbiAgICAgICAgLy8gcG9zdDogY2xvbmUgQGZvbnQucG9zdFxuICAgICAgICAvLyBjbWFwOiBjbWFwXG5cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gVFRGU3Vic2V0O1xufShTdWJzZXQpO1xuXG52YXIgQ0ZGU3Vic2V0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2V0Mikge1xuICBfaW5oZXJpdHNMb29zZShDRkZTdWJzZXQsIF9TdWJzZXQyKTtcblxuICBmdW5jdGlvbiBDRkZTdWJzZXQoZm9udCkge1xuICAgIHZhciBfdGhpczEzO1xuXG4gICAgX3RoaXMxMyA9IF9TdWJzZXQyLmNhbGwodGhpcywgZm9udCkgfHwgdGhpcztcbiAgICBfdGhpczEzLmNmZiA9IF90aGlzMTMuZm9udFsnQ0ZGICddO1xuXG4gICAgaWYgKCFfdGhpczEzLmNmZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYSBDRkYgRm9udCcpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpczEzO1xuICB9XG5cbiAgdmFyIF9wcm90bzQyID0gQ0ZGU3Vic2V0LnByb3RvdHlwZTtcblxuICBfcHJvdG80Mi5zdWJzZXRDaGFyc3RyaW5ncyA9IGZ1bmN0aW9uIHN1YnNldENoYXJzdHJpbmdzKCkge1xuICAgIHRoaXMuY2hhcnN0cmluZ3MgPSBbXTtcbiAgICB2YXIgZ3N1YnJzID0ge307XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3I3MyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodGhpcy5nbHlwaHMpLCBfc3RlcDczOyAhKF9zdGVwNzMgPSBfaXRlcmF0b3I3MygpKS5kb25lOykge1xuICAgICAgdmFyIGdpZCA9IF9zdGVwNzMudmFsdWU7XG4gICAgICB0aGlzLmNoYXJzdHJpbmdzLnB1c2godGhpcy5jZmYuZ2V0Q2hhclN0cmluZyhnaWQpKTtcbiAgICAgIHZhciBnbHlwaCA9IHRoaXMuZm9udC5nZXRHbHlwaChnaWQpO1xuICAgICAgdmFyIHBhdGggPSBnbHlwaC5wYXRoOyAvLyB0aGlzIGNhdXNlcyB0aGUgZ2x5cGggdG8gYmUgcGFyc2VkXG5cbiAgICAgIGZvciAodmFyIHN1YnIgaW4gZ2x5cGguX3VzZWRHc3VicnMpIHtcbiAgICAgICAgZ3N1YnJzW3N1YnJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdzdWJycyA9IHRoaXMuc3Vic2V0U3VicnModGhpcy5jZmYuZ2xvYmFsU3VickluZGV4LCBnc3VicnMpO1xuICB9O1xuXG4gIF9wcm90bzQyLnN1YnNldFN1YnJzID0gZnVuY3Rpb24gc3Vic2V0U3VicnMoc3VicnMsIHVzZWQpIHtcbiAgICB2YXIgcmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3ViciA9IHN1YnJzW2ldO1xuXG4gICAgICBpZiAodXNlZFtpXSkge1xuICAgICAgICB0aGlzLmNmZi5zdHJlYW0ucG9zID0gc3Vici5vZmZzZXQ7XG4gICAgICAgIHJlcy5wdXNoKHRoaXMuY2ZmLnN0cmVhbS5yZWFkQnVmZmVyKHN1YnIubGVuZ3RoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMucHVzaChCdWZmZXIuZnJvbShbMTFdKSk7IC8vIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgX3Byb3RvNDIuc3Vic2V0Rm9udGRpY3QgPSBmdW5jdGlvbiBzdWJzZXRGb250ZGljdCh0b3BEaWN0KSB7XG4gICAgdG9wRGljdC5GREFycmF5ID0gW107XG4gICAgdG9wRGljdC5GRFNlbGVjdCA9IHtcbiAgICAgIHZlcnNpb246IDAsXG4gICAgICBmZHM6IFtdXG4gICAgfTtcbiAgICB2YXIgdXNlZF9mZHMgPSB7fTtcbiAgICB2YXIgdXNlZF9zdWJycyA9IFtdO1xuICAgIHZhciBmZF9zZWxlY3QgPSB7fTtcblxuICAgIGZvciAodmFyIF9pdGVyYXRvcjc0ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLmdseXBocyksIF9zdGVwNzQ7ICEoX3N0ZXA3NCA9IF9pdGVyYXRvcjc0KCkpLmRvbmU7KSB7XG4gICAgICB2YXIgZ2lkID0gX3N0ZXA3NC52YWx1ZTtcbiAgICAgIHZhciBmZCA9IHRoaXMuY2ZmLmZkRm9yR2x5cGgoZ2lkKTtcblxuICAgICAgaWYgKGZkID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdXNlZF9mZHNbZmRdKSB7XG4gICAgICAgIHRvcERpY3QuRkRBcnJheS5wdXNoKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY2ZmLnRvcERpY3QuRkRBcnJheVtmZF0pKTtcbiAgICAgICAgdXNlZF9zdWJycy5wdXNoKHt9KTtcbiAgICAgICAgZmRfc2VsZWN0W2ZkXSA9IHRvcERpY3QuRkRBcnJheS5sZW5ndGggLSAxO1xuICAgICAgfVxuXG4gICAgICB1c2VkX2Zkc1tmZF0gPSB0cnVlO1xuICAgICAgdG9wRGljdC5GRFNlbGVjdC5mZHMucHVzaChmZF9zZWxlY3RbZmRdKTtcbiAgICAgIHZhciBnbHlwaCA9IHRoaXMuZm9udC5nZXRHbHlwaChnaWQpO1xuICAgICAgdmFyIHBhdGggPSBnbHlwaC5wYXRoOyAvLyB0aGlzIGNhdXNlcyB0aGUgZ2x5cGggdG8gYmUgcGFyc2VkXG5cbiAgICAgIGZvciAodmFyIHN1YnIgaW4gZ2x5cGguX3VzZWRTdWJycykge1xuICAgICAgICB1c2VkX3N1YnJzW2ZkX3NlbGVjdFtmZF1dW3N1YnJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvcERpY3QuRkRBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRpY3QgPSB0b3BEaWN0LkZEQXJyYXlbaV07XG4gICAgICBkZWxldGUgZGljdC5Gb250TmFtZTtcblxuICAgICAgaWYgKGRpY3QuUHJpdmF0ZSAmJiBkaWN0LlByaXZhdGUuU3VicnMpIHtcbiAgICAgICAgZGljdC5Qcml2YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgZGljdC5Qcml2YXRlKTtcbiAgICAgICAgZGljdC5Qcml2YXRlLlN1YnJzID0gdGhpcy5zdWJzZXRTdWJycyhkaWN0LlByaXZhdGUuU3VicnMsIHVzZWRfc3VicnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfTtcblxuICBfcHJvdG80Mi5jcmVhdGVDSURGb250ZGljdCA9IGZ1bmN0aW9uIGNyZWF0ZUNJREZvbnRkaWN0KHRvcERpY3QpIHtcbiAgICB2YXIgdXNlZF9zdWJycyA9IHt9O1xuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yNzUgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMuZ2x5cGhzKSwgX3N0ZXA3NTsgIShfc3RlcDc1ID0gX2l0ZXJhdG9yNzUoKSkuZG9uZTspIHtcbiAgICAgIHZhciBnaWQgPSBfc3RlcDc1LnZhbHVlO1xuICAgICAgdmFyIGdseXBoID0gdGhpcy5mb250LmdldEdseXBoKGdpZCk7XG4gICAgICB2YXIgcGF0aCA9IGdseXBoLnBhdGg7IC8vIHRoaXMgY2F1c2VzIHRoZSBnbHlwaCB0byBiZSBwYXJzZWRcblxuICAgICAgZm9yICh2YXIgc3ViciBpbiBnbHlwaC5fdXNlZFN1YnJzKSB7XG4gICAgICAgIHVzZWRfc3VicnNbc3Vicl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcml2YXRlRGljdCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY2ZmLnRvcERpY3QuUHJpdmF0ZSk7XG5cbiAgICBpZiAodGhpcy5jZmYudG9wRGljdC5Qcml2YXRlICYmIHRoaXMuY2ZmLnRvcERpY3QuUHJpdmF0ZS5TdWJycykge1xuICAgICAgcHJpdmF0ZURpY3QuU3VicnMgPSB0aGlzLnN1YnNldFN1YnJzKHRoaXMuY2ZmLnRvcERpY3QuUHJpdmF0ZS5TdWJycywgdXNlZF9zdWJycyk7XG4gICAgfVxuXG4gICAgdG9wRGljdC5GREFycmF5ID0gW3tcbiAgICAgIFByaXZhdGU6IHByaXZhdGVEaWN0XG4gICAgfV07XG4gICAgcmV0dXJuIHRvcERpY3QuRkRTZWxlY3QgPSB7XG4gICAgICB2ZXJzaW9uOiAzLFxuICAgICAgblJhbmdlczogMSxcbiAgICAgIHJhbmdlczogW3tcbiAgICAgICAgZmlyc3Q6IDAsXG4gICAgICAgIGZkOiAwXG4gICAgICB9XSxcbiAgICAgIHNlbnRpbmVsOiB0aGlzLmNoYXJzdHJpbmdzLmxlbmd0aFxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvNDIuYWRkU3RyaW5nID0gZnVuY3Rpb24gYWRkU3RyaW5nKHN0cmluZykge1xuICAgIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RyaW5ncykge1xuICAgICAgdGhpcy5zdHJpbmdzID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5zdHJpbmdzLnB1c2goc3RyaW5nKTtcbiAgICByZXR1cm4gc3RhbmRhcmRTdHJpbmdzLmxlbmd0aCArIHRoaXMuc3RyaW5ncy5sZW5ndGggLSAxO1xuICB9O1xuXG4gIF9wcm90bzQyLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHJlYW0pIHtcbiAgICB0aGlzLnN1YnNldENoYXJzdHJpbmdzKCk7XG4gICAgdmFyIGNoYXJzZXQgPSB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLmNoYXJzdHJpbmdzLmxlbmd0aCA+IDI1NSA/IDIgOiAxLFxuICAgICAgcmFuZ2VzOiBbe1xuICAgICAgICBmaXJzdDogMSxcbiAgICAgICAgbkxlZnQ6IHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoIC0gMlxuICAgICAgfV1cbiAgICB9O1xuICAgIHZhciB0b3BEaWN0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jZmYudG9wRGljdCk7XG4gICAgdG9wRGljdC5Qcml2YXRlID0gbnVsbDtcbiAgICB0b3BEaWN0LmNoYXJzZXQgPSBjaGFyc2V0O1xuICAgIHRvcERpY3QuRW5jb2RpbmcgPSBudWxsO1xuICAgIHRvcERpY3QuQ2hhclN0cmluZ3MgPSB0aGlzLmNoYXJzdHJpbmdzO1xuXG4gICAgZm9yICh2YXIgX2kyNCA9IDAsIF9hcnIyID0gWyd2ZXJzaW9uJywgJ05vdGljZScsICdDb3B5cmlnaHQnLCAnRnVsbE5hbWUnLCAnRmFtaWx5TmFtZScsICdXZWlnaHQnLCAnUG9zdFNjcmlwdCcsICdCYXNlRm9udE5hbWUnLCAnRm9udE5hbWUnXTsgX2kyNCA8IF9hcnIyLmxlbmd0aDsgX2kyNCsrKSB7XG4gICAgICB2YXIga2V5ID0gX2FycjJbX2kyNF07XG4gICAgICB0b3BEaWN0W2tleV0gPSB0aGlzLmFkZFN0cmluZyh0aGlzLmNmZi5zdHJpbmcodG9wRGljdFtrZXldKSk7XG4gICAgfVxuXG4gICAgdG9wRGljdC5ST1MgPSBbdGhpcy5hZGRTdHJpbmcoJ0Fkb2JlJyksIHRoaXMuYWRkU3RyaW5nKCdJZGVudGl0eScpLCAwXTtcbiAgICB0b3BEaWN0LkNJRENvdW50ID0gdGhpcy5jaGFyc3RyaW5ncy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5jZmYuaXNDSURGb250KSB7XG4gICAgICB0aGlzLnN1YnNldEZvbnRkaWN0KHRvcERpY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyZWF0ZUNJREZvbnRkaWN0KHRvcERpY3QpO1xuICAgIH1cblxuICAgIHZhciB0b3AgPSB7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgaGRyU2l6ZTogdGhpcy5jZmYuaGRyU2l6ZSxcbiAgICAgIG9mZlNpemU6IDQsXG4gICAgICBoZWFkZXI6IHRoaXMuY2ZmLmhlYWRlcixcbiAgICAgIG5hbWVJbmRleDogW3RoaXMuY2ZmLnBvc3RzY3JpcHROYW1lXSxcbiAgICAgIHRvcERpY3RJbmRleDogW3RvcERpY3RdLFxuICAgICAgc3RyaW5nSW5kZXg6IHRoaXMuc3RyaW5ncyxcbiAgICAgIGdsb2JhbFN1YnJJbmRleDogdGhpcy5nc3VicnNcbiAgICB9O1xuICAgIENGRlRvcC5lbmNvZGUoc3RyZWFtLCB0b3ApO1xuICB9O1xuXG4gIHJldHVybiBDRkZTdWJzZXQ7XG59KFN1YnNldCk7XG5cbnZhciBfY2xhc3MkNDtcbi8qKlxyXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgU0ZOVC1iYXNlZCBmb250IGZvcm1hdHMgaW4gZm9udGtpdC5cclxuICogSXQgc3VwcG9ydHMgVHJ1ZVR5cGUsIGFuZCBQb3N0U2NyaXB0IGdseXBocywgYW5kIHNldmVyYWwgY29sb3IgZ2x5cGggZm9ybWF0cy5cclxuICovXG5cblxudmFyIFRURkZvbnQgPSAoX2NsYXNzJDQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBUVEZGb250LnByb2JlID0gZnVuY3Rpb24gcHJvYmUoYnVmZmVyKSB7XG4gICAgdmFyIGZvcm1hdCA9IGJ1ZmZlci50b1N0cmluZygnYXNjaWknLCAwLCA0KTtcbiAgICByZXR1cm4gZm9ybWF0ID09PSAndHJ1ZScgfHwgZm9ybWF0ID09PSAnT1RUTycgfHwgZm9ybWF0ID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDAsIDEsIDAsIDApO1xuICB9O1xuXG4gIGZ1bmN0aW9uIFRURkZvbnQoc3RyZWFtLCB2YXJpYXRpb25Db29yZHMpIHtcbiAgICBpZiAodmFyaWF0aW9uQ29vcmRzID09PSB2b2lkIDApIHtcbiAgICAgIHZhcmlhdGlvbkNvb3JkcyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0TGFuZ3VhZ2UgPSBudWxsO1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMudmFyaWF0aW9uQ29vcmRzID0gdmFyaWF0aW9uQ29vcmRzO1xuICAgIHRoaXMuX2RpcmVjdG9yeVBvcyA9IHRoaXMuc3RyZWFtLnBvcztcbiAgICB0aGlzLl90YWJsZXMgPSB7fTtcbiAgICB0aGlzLl9nbHlwaHMgPSB7fTtcblxuICAgIHRoaXMuX2RlY29kZURpcmVjdG9yeSgpOyAvLyBkZWZpbmUgcHJvcGVydGllcyBmb3IgZWFjaCB0YWJsZSB0byBsYXppbHkgcGFyc2VcblxuXG4gICAgZm9yICh2YXIgdGFnIGluIHRoaXMuZGlyZWN0b3J5LnRhYmxlcykge1xuICAgICAgdmFyIHRhYmxlID0gdGhpcy5kaXJlY3RvcnkudGFibGVzW3RhZ107XG5cbiAgICAgIGlmICh0YWJsZXNbdGFnXSAmJiB0YWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCB0YWcsIHtcbiAgICAgICAgICBnZXQ6IHRoaXMuX2dldFRhYmxlLmJpbmQodGhpcywgdGFibGUpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBfcHJvdG80MyA9IFRURkZvbnQucHJvdG90eXBlO1xuXG4gIF9wcm90bzQzLnNldERlZmF1bHRMYW5ndWFnZSA9IGZ1bmN0aW9uIHNldERlZmF1bHRMYW5ndWFnZShsYW5nKSB7XG4gICAgaWYgKGxhbmcgPT09IHZvaWQgMCkge1xuICAgICAgbGFuZyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0TGFuZ3VhZ2UgPSBsYW5nO1xuICB9O1xuXG4gIF9wcm90bzQzLl9nZXRUYWJsZSA9IGZ1bmN0aW9uIF9nZXRUYWJsZSh0YWJsZSkge1xuICAgIGlmICghKHRhYmxlLnRhZyBpbiB0aGlzLl90YWJsZXMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl90YWJsZXNbdGFibGUudGFnXSA9IHRoaXMuX2RlY29kZVRhYmxlKHRhYmxlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGZvbnRraXQubG9nRXJyb3JzKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGRlY29kaW5nIHRhYmxlIFwiLmNvbmNhdCh0YWJsZS50YWcpKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlc1t0YWJsZS50YWddO1xuICB9O1xuXG4gIF9wcm90bzQzLl9nZXRUYWJsZVN0cmVhbSA9IGZ1bmN0aW9uIF9nZXRUYWJsZVN0cmVhbSh0YWcpIHtcbiAgICB2YXIgdGFibGUgPSB0aGlzLmRpcmVjdG9yeS50YWJsZXNbdGFnXTtcblxuICAgIGlmICh0YWJsZSkge1xuICAgICAgdGhpcy5zdHJlYW0ucG9zID0gdGFibGUub2Zmc2V0O1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIF9wcm90bzQzLl9kZWNvZGVEaXJlY3RvcnkgPSBmdW5jdGlvbiBfZGVjb2RlRGlyZWN0b3J5KCkge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdG9yeSA9IERpcmVjdG9yeS5kZWNvZGUodGhpcy5zdHJlYW0sIHtcbiAgICAgIF9zdGFydE9mZnNldDogMFxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzQzLl9kZWNvZGVUYWJsZSA9IGZ1bmN0aW9uIF9kZWNvZGVUYWJsZSh0YWJsZSkge1xuICAgIHZhciBwb3MgPSB0aGlzLnN0cmVhbS5wb3M7XG5cbiAgICB2YXIgc3RyZWFtID0gdGhpcy5fZ2V0VGFibGVTdHJlYW0odGFibGUudGFnKTtcblxuICAgIHZhciByZXN1bHQgPSB0YWJsZXNbdGFibGUudGFnXS5kZWNvZGUoc3RyZWFtLCB0aGlzLCB0YWJsZS5sZW5ndGgpO1xuICAgIHRoaXMuc3RyZWFtLnBvcyA9IHBvcztcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxyXG4gICAqIEdldHMgYSBzdHJpbmcgZnJvbSB0aGUgZm9udCdzIGBuYW1lYCB0YWJsZVxyXG4gICAqIGBsYW5nYCBpcyBhIEJDUC00NyBsYW5ndWFnZSBjb2RlLlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgKi9cbiAgO1xuXG4gIF9wcm90bzQzLmdldE5hbWUgPSBmdW5jdGlvbiBnZXROYW1lKGtleSwgbGFuZykge1xuICAgIGlmIChsYW5nID09PSB2b2lkIDApIHtcbiAgICAgIGxhbmcgPSB0aGlzLmRlZmF1bHRMYW5ndWFnZSB8fCBmb250a2l0LmRlZmF1bHRMYW5ndWFnZTtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdGhpcy5uYW1lICYmIHRoaXMubmFtZS5yZWNvcmRzW2tleV07XG5cbiAgICBpZiAocmVjb3JkKSB7XG4gICAgICAvLyBBdHRlbXB0IHRvIHJldHJpZXZlIHRoZSBlbnRyeSwgZGVwZW5kaW5nIG9uIHdoaWNoIHRyYW5zbGF0aW9uIGlzIGF2YWlsYWJsZTpcbiAgICAgIHJldHVybiByZWNvcmRbbGFuZ10gfHwgcmVjb3JkW3RoaXMuZGVmYXVsdExhbmd1YWdlXSB8fCByZWNvcmRbZm9udGtpdC5kZWZhdWx0TGFuZ3VhZ2VdIHx8IHJlY29yZFsnZW4nXSB8fCByZWNvcmRbT2JqZWN0LmtleXMocmVjb3JkKVswXV0gLy8gU2VyaW91c2x5LCBBTlkgbGFuZ3VhZ2Ugd291bGQgYmUgZmluZVxuICAgICAgfHwgbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcclxuICAgKiBUaGUgdW5pcXVlIFBvc3RTY3JpcHQgbmFtZSBmb3IgdGhpcyBmb250LCBlLmcuIFwiSGVsdmV0aWNhLUJvbGRcIlxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXG4gIDtcblxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgaXMgZ2x5cGggaW4gdGhlIGZvbnQgZm9yIHRoZSBnaXZlbiB1bmljb2RlIGNvZGUgcG9pbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZVBvaW50XHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKi9cbiAgX3Byb3RvNDMuaGFzR2x5cGhGb3JDb2RlUG9pbnQgPSBmdW5jdGlvbiBoYXNHbHlwaEZvckNvZGVQb2ludChjb2RlUG9pbnQpIHtcbiAgICByZXR1cm4gISF0aGlzLl9jbWFwUHJvY2Vzc29yLmxvb2t1cChjb2RlUG9pbnQpO1xuICB9XG4gIC8qKlxyXG4gICAqIE1hcHMgYSBzaW5nbGUgdW5pY29kZSBjb2RlIHBvaW50IHRvIGEgR2x5cGggb2JqZWN0LlxyXG4gICAqIERvZXMgbm90IHBlcmZvcm0gYW55IGFkdmFuY2VkIHN1YnN0aXR1dGlvbnMgKHRoZXJlIGlzIG5vIGNvbnRleHQgdG8gZG8gc28pLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVQb2ludFxyXG4gICAqIEByZXR1cm4ge0dseXBofVxyXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvNDMuZ2x5cGhGb3JDb2RlUG9pbnQgPSBmdW5jdGlvbiBnbHlwaEZvckNvZGVQb2ludChjb2RlUG9pbnQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRHbHlwaCh0aGlzLl9jbWFwUHJvY2Vzc29yLmxvb2t1cChjb2RlUG9pbnQpLCBbY29kZVBvaW50XSk7XG4gIH1cbiAgLyoqXHJcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBHbHlwaCBvYmplY3RzIGZvciB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gICAqIFRoaXMgaXMgb25seSBhIG9uZS10by1vbmUgbWFwcGluZyBmcm9tIGNoYXJhY3RlcnMgdG8gZ2x5cGhzLlxyXG4gICAqIEZvciBtb3N0IHVzZXMsIHlvdSBzaG91bGQgdXNlIGZvbnQubGF5b3V0IChkZXNjcmliZWQgYmVsb3cpLCB3aGljaFxyXG4gICAqIHByb3ZpZGVzIGEgbXVjaCBtb3JlIGFkdmFuY2VkIG1hcHBpbmcgc3VwcG9ydGluZyBBQVQgYW5kIE9wZW5UeXBlIHNoYXBpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXHJcbiAgICogQHJldHVybiB7R2x5cGhbXX1cclxuICAgKi9cbiAgO1xuXG4gIF9wcm90bzQzLmdseXBoc0ZvclN0cmluZyA9IGZ1bmN0aW9uIGdseXBoc0ZvclN0cmluZyhzdHJpbmcpIHtcbiAgICB2YXIgZ2x5cGhzID0gW107XG4gICAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGg7XG4gICAgdmFyIGlkeCA9IDA7XG4gICAgdmFyIGxhc3QgPSAtMTtcbiAgICB2YXIgc3RhdGUgPSAtMTtcblxuICAgIHdoaWxlIChpZHggPD0gbGVuKSB7XG4gICAgICB2YXIgY29kZSA9IDA7XG4gICAgICB2YXIgbmV4dFN0YXRlID0gMDtcblxuICAgICAgaWYgKGlkeCA8IGxlbikge1xuICAgICAgICAvLyBEZWNvZGUgdGhlIG5leHQgY29kZXBvaW50IGZyb20gVVRGIDE2XG4gICAgICAgIGNvZGUgPSBzdHJpbmcuY2hhckNvZGVBdChpZHgrKyk7XG5cbiAgICAgICAgaWYgKDB4ZDgwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHhkYmZmICYmIGlkeCA8IGxlbikge1xuICAgICAgICAgIHZhciBuZXh0ID0gc3RyaW5nLmNoYXJDb2RlQXQoaWR4KTtcblxuICAgICAgICAgIGlmICgweGRjMDAgPD0gbmV4dCAmJiBuZXh0IDw9IDB4ZGZmZikge1xuICAgICAgICAgICAgaWR4Kys7XG4gICAgICAgICAgICBjb2RlID0gKChjb2RlICYgMHgzZmYpIDw8IDEwKSArIChuZXh0ICYgMHgzZmYpICsgMHgxMDAwMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gQ29tcHV0ZSB0aGUgbmV4dCBzdGF0ZTogMSBpZiB0aGUgbmV4dCBjb2RlcG9pbnQgaXMgYSB2YXJpYXRpb24gc2VsZWN0b3IsIDAgb3RoZXJ3aXNlLlxuXG5cbiAgICAgICAgbmV4dFN0YXRlID0gMHhmZTAwIDw9IGNvZGUgJiYgY29kZSA8PSAweGZlMGYgfHwgMHhlMDEwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHhlMDFlZiA/IDEgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWR4Kys7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gMCAmJiBuZXh0U3RhdGUgPT09IDEpIHtcbiAgICAgICAgLy8gVmFyaWF0aW9uIHNlbGVjdG9yIGZvbGxvd2luZyBub3JtYWwgY29kZXBvaW50LlxuICAgICAgICBnbHlwaHMucHVzaCh0aGlzLmdldEdseXBoKHRoaXMuX2NtYXBQcm9jZXNzb3IubG9va3VwKGxhc3QsIGNvZGUpLCBbbGFzdCwgY29kZV0pKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IDAgJiYgbmV4dFN0YXRlID09PSAwKSB7XG4gICAgICAgIC8vIE5vcm1hbCBjb2RlcG9pbnQgZm9sbG93aW5nIG5vcm1hbCBjb2RlcG9pbnQuXG4gICAgICAgIGdseXBocy5wdXNoKHRoaXMuZ2x5cGhGb3JDb2RlUG9pbnQobGFzdCkpO1xuICAgICAgfVxuXG4gICAgICBsYXN0ID0gY29kZTtcbiAgICAgIHN0YXRlID0gbmV4dFN0YXRlO1xuICAgIH1cblxuICAgIHJldHVybiBnbHlwaHM7XG4gIH07XG5cbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIEdseXBoUnVuIG9iamVjdCwgd2hpY2ggaW5jbHVkZXMgYW4gYXJyYXkgb2YgR2x5cGhzIGFuZCBHbHlwaFBvc2l0aW9ucyBmb3IgdGhlIGdpdmVuIHN0cmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbdXNlckZlYXR1cmVzXVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2NyaXB0XVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGFuZ3VhZ2VdXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkaXJlY3Rpb25dXHJcbiAgICogQHJldHVybiB7R2x5cGhSdW59XHJcbiAgICovXG4gIF9wcm90bzQzLmxheW91dCA9IGZ1bmN0aW9uIGxheW91dChzdHJpbmcsIHVzZXJGZWF0dXJlcywgc2NyaXB0LCBsYW5ndWFnZSwgZGlyZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xheW91dEVuZ2luZS5sYXlvdXQoc3RyaW5nLCB1c2VyRmVhdHVyZXMsIHNjcmlwdCwgbGFuZ3VhZ2UsIGRpcmVjdGlvbik7XG4gIH1cbiAgLyoqXHJcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgbWFwIHRvIHRoZSBnaXZlbiBnbHlwaCBpZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gZ2lkIC0gZ2x5cGggaWRcclxuICAgKi9cbiAgO1xuXG4gIF9wcm90bzQzLnN0cmluZ3NGb3JHbHlwaCA9IGZ1bmN0aW9uIHN0cmluZ3NGb3JHbHlwaChnaWQpIHtcbiAgICByZXR1cm4gdGhpcy5fbGF5b3V0RW5naW5lLnN0cmluZ3NGb3JHbHlwaChnaWQpO1xuICB9XG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGFsbCBbT3BlblR5cGUgZmVhdHVyZSB0YWdzXShodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2ZlYXR1cmV0YWdzLmh0bSlcclxuICAgKiAob3IgbWFwcGVkIEFBVCB0YWdzKSBzdXBwb3J0ZWQgYnkgdGhlIGZvbnQuXHJcbiAgICogVGhlIGZlYXR1cmVzIHBhcmFtZXRlciBpcyBhbiBhcnJheSBvZiBPcGVuVHlwZSBmZWF0dXJlIHRhZ3MgdG8gYmUgYXBwbGllZCBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBzZXQuXHJcbiAgICogSWYgdGhpcyBpcyBhbiBBQVQgZm9udCwgdGhlIE9wZW5UeXBlIGZlYXR1cmUgdGFncyBhcmUgbWFwcGVkIHRvIEFBVCBmZWF0dXJlcy5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cclxuICAgKi9cbiAgO1xuXG4gIF9wcm90bzQzLmdldEF2YWlsYWJsZUZlYXR1cmVzID0gZnVuY3Rpb24gZ2V0QXZhaWxhYmxlRmVhdHVyZXMoc2NyaXB0LCBsYW5ndWFnZSkge1xuICAgIHJldHVybiB0aGlzLl9sYXlvdXRFbmdpbmUuZ2V0QXZhaWxhYmxlRmVhdHVyZXMoc2NyaXB0LCBsYW5ndWFnZSk7XG4gIH07XG5cbiAgX3Byb3RvNDMuX2dldEJhc2VHbHlwaCA9IGZ1bmN0aW9uIF9nZXRCYXNlR2x5cGgoZ2x5cGgsIGNoYXJhY3RlcnMpIHtcbiAgICBpZiAoY2hhcmFjdGVycyA9PT0gdm9pZCAwKSB7XG4gICAgICBjaGFyYWN0ZXJzID0gW107XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9nbHlwaHNbZ2x5cGhdKSB7XG4gICAgICBpZiAodGhpcy5kaXJlY3RvcnkudGFibGVzLmdseWYpIHtcbiAgICAgICAgdGhpcy5fZ2x5cGhzW2dseXBoXSA9IG5ldyBUVEZHbHlwaChnbHlwaCwgY2hhcmFjdGVycywgdGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGlyZWN0b3J5LnRhYmxlc1snQ0ZGICddIHx8IHRoaXMuZGlyZWN0b3J5LnRhYmxlcy5DRkYyKSB7XG4gICAgICAgIHRoaXMuX2dseXBoc1tnbHlwaF0gPSBuZXcgQ0ZGR2x5cGgoZ2x5cGgsIGNoYXJhY3RlcnMsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nbHlwaHNbZ2x5cGhdIHx8IG51bGw7XG4gIH1cbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIGdseXBoIG9iamVjdCBmb3IgdGhlIGdpdmVuIGdseXBoIGlkLlxyXG4gICAqIFlvdSBjYW4gcGFzcyB0aGUgYXJyYXkgb2YgY29kZSBwb2ludHMgdGhpcyBnbHlwaCByZXByZXNlbnRzIGZvclxyXG4gICAqIHlvdXIgdXNlIGxhdGVyLCBhbmQgaXQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGdseXBoIG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBnbHlwaFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGNoYXJhY3RlcnNcclxuICAgKiBAcmV0dXJuIHtHbHlwaH1cclxuICAgKi9cbiAgO1xuXG4gIF9wcm90bzQzLmdldEdseXBoID0gZnVuY3Rpb24gZ2V0R2x5cGgoZ2x5cGgsIGNoYXJhY3RlcnMpIHtcbiAgICBpZiAoY2hhcmFjdGVycyA9PT0gdm9pZCAwKSB7XG4gICAgICBjaGFyYWN0ZXJzID0gW107XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9nbHlwaHNbZ2x5cGhdKSB7XG4gICAgICBpZiAodGhpcy5kaXJlY3RvcnkudGFibGVzLnNiaXgpIHtcbiAgICAgICAgdGhpcy5fZ2x5cGhzW2dseXBoXSA9IG5ldyBTQklYR2x5cGgoZ2x5cGgsIGNoYXJhY3RlcnMsIHRoaXMpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRpcmVjdG9yeS50YWJsZXMuQ09MUiAmJiB0aGlzLmRpcmVjdG9yeS50YWJsZXMuQ1BBTCkge1xuICAgICAgICB0aGlzLl9nbHlwaHNbZ2x5cGhdID0gbmV3IENPTFJHbHlwaChnbHlwaCwgY2hhcmFjdGVycywgdGhpcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9nZXRCYXNlR2x5cGgoZ2x5cGgsIGNoYXJhY3RlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nbHlwaHNbZ2x5cGhdIHx8IG51bGw7XG4gIH1cbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIFN1YnNldCBmb3IgdGhpcyBmb250LlxyXG4gICAqIEByZXR1cm4ge1N1YnNldH1cclxuICAgKi9cbiAgO1xuXG4gIF9wcm90bzQzLmNyZWF0ZVN1YnNldCA9IGZ1bmN0aW9uIGNyZWF0ZVN1YnNldCgpIHtcbiAgICBpZiAodGhpcy5kaXJlY3RvcnkudGFibGVzWydDRkYgJ10pIHtcbiAgICAgIHJldHVybiBuZXcgQ0ZGU3Vic2V0KHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVFRGU3Vic2V0KHRoaXMpO1xuICB9XG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIGF2YWlsYWJsZSB2YXJpYXRpb24gYXhlc1xyXG4gICAqIHRoYXQgdGhpcyBmb250IHN1cHBvcnRzLiBLZXlzIGFyZSBzZXR0aW5nIHRhZ3MsIGFuZCB2YWx1ZXNcclxuICAgKiBjb250YWluIHRoZSBheGlzIG5hbWUsIHJhbmdlLCBhbmQgZGVmYXVsdCB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICovXG4gIDtcblxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbmV3IGZvbnQgd2l0aCB0aGUgZ2l2ZW4gdmFyaWF0aW9uIHNldHRpbmdzIGFwcGxpZWQuXHJcbiAgICogU2V0dGluZ3MgY2FuIGVpdGhlciBiZSBhbiBpbnN0YW5jZSBuYW1lLCBvciBhbiBvYmplY3QgY29udGFpbmluZ1xyXG4gICAqIHZhcmlhdGlvbiB0YWdzIGFzIHNwZWNpZmllZCBieSB0aGUgYHZhcmlhdGlvbkF4ZXNgIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzXHJcbiAgICogQHJldHVybiB7VFRGRm9udH1cclxuICAgKi9cbiAgX3Byb3RvNDMuZ2V0VmFyaWF0aW9uID0gZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHNldHRpbmdzKSB7XG4gICAgaWYgKCEodGhpcy5kaXJlY3RvcnkudGFibGVzLmZ2YXIgJiYgKHRoaXMuZGlyZWN0b3J5LnRhYmxlcy5ndmFyICYmIHRoaXMuZGlyZWN0b3J5LnRhYmxlcy5nbHlmIHx8IHRoaXMuZGlyZWN0b3J5LnRhYmxlcy5DRkYyKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFyaWF0aW9ucyByZXF1aXJlIGEgZm9udCB3aXRoIHRoZSBmdmFyLCBndmFyIGFuZCBnbHlmLCBvciBDRkYyIHRhYmxlcy4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJykge1xuICAgICAgc2V0dGluZ3MgPSB0aGlzLm5hbWVkVmFyaWF0aW9uc1tzZXR0aW5nc107XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZXR0aW5ncyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFyaWF0aW9uIHNldHRpbmdzIG11c3QgYmUgZWl0aGVyIGEgdmFyaWF0aW9uIG5hbWUgb3Igc2V0dGluZ3Mgb2JqZWN0LicpO1xuICAgIH0gLy8gbm9ybWFsaXplIHRoZSBjb29yZGluYXRlc1xuXG5cbiAgICB2YXIgY29vcmRzID0gdGhpcy5mdmFyLmF4aXMubWFwKGZ1bmN0aW9uIChheGlzLCBpKSB7XG4gICAgICB2YXIgYXhpc1RhZyA9IGF4aXMuYXhpc1RhZy50cmltKCk7XG5cbiAgICAgIGlmIChheGlzVGFnIGluIHNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChheGlzLm1pblZhbHVlLCBNYXRoLm1pbihheGlzLm1heFZhbHVlLCBzZXR0aW5nc1theGlzVGFnXSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGF4aXMuZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBzdHJlYW0gPSBuZXcgci5EZWNvZGVTdHJlYW0odGhpcy5zdHJlYW0uYnVmZmVyKTtcbiAgICBzdHJlYW0ucG9zID0gdGhpcy5fZGlyZWN0b3J5UG9zO1xuICAgIHZhciBmb250ID0gbmV3IFRURkZvbnQoc3RyZWFtLCBjb29yZHMpO1xuICAgIGZvbnQuX3RhYmxlcyA9IHRoaXMuX3RhYmxlcztcbiAgICByZXR1cm4gZm9udDtcbiAgfTtcblxuICAvLyBTdGFuZGFyZGl6ZWQgZm9ybWF0IHBsdWdpbiBBUElcbiAgX3Byb3RvNDMuZ2V0Rm9udCA9IGZ1bmN0aW9uIGdldEZvbnQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLmdldFZhcmlhdGlvbihuYW1lKTtcbiAgfTtcblxuICBfY3JlYXRlQ2xhc3MoVFRGRm9udCwgW3tcbiAgICBrZXk6IFwicG9zdHNjcmlwdE5hbWVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE5hbWUoJ3Bvc3RzY3JpcHROYW1lJyk7XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogVGhlIGZvbnQncyBmdWxsIG5hbWUsIGUuZy4gXCJIZWx2ZXRpY2EgQm9sZFwiXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJmdWxsTmFtZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFtZSgnZnVsbE5hbWUnKTtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZm9udCdzIGZhbWlseSBuYW1lLCBlLmcuIFwiSGVsdmV0aWNhXCJcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImZhbWlseU5hbWVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE5hbWUoJ2ZvbnRGYW1pbHknKTtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZm9udCdzIHN1Yi1mYW1pbHksIGUuZy4gXCJCb2xkXCIuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJzdWJmYW1pbHlOYW1lXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXROYW1lKCdmb250U3ViZmFtaWx5Jyk7XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogVGhlIGZvbnQncyBjb3B5cmlnaHQgaW5mb3JtYXRpb25cclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImNvcHlyaWdodFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFtZSgnY29weXJpZ2h0Jyk7XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogVGhlIGZvbnQncyB2ZXJzaW9uIG51bWJlclxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwidmVyc2lvblwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFtZSgndmVyc2lvbicpO1xuICAgIH1cbiAgICAvKipcclxuICAgICAqIFRoZSBmb2504oCZcyBbYXNjZW5kZXJdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FzY2VuZGVyXyh0eXBvZ3JhcGh5KSlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImFzY2VudFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGhlYS5hc2NlbnQ7XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogVGhlIGZvbnTigJlzIFtkZXNjZW5kZXJdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Rlc2NlbmRlcilcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImRlc2NlbnRcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhoZWEuZGVzY2VudDtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYW1vdW50IG9mIHNwYWNlIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGJldHdlZW4gbGluZXNcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImxpbmVHYXBcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhoZWEubGluZUdhcDtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb2Zmc2V0IGZyb20gdGhlIG5vcm1hbCB1bmRlcmxpbmUgcG9zaXRpb24gdGhhdCBzaG91bGQgYmUgdXNlZFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwidW5kZXJsaW5lUG9zaXRpb25cIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvc3QudW5kZXJsaW5lUG9zaXRpb247XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogVGhlIHdlaWdodCBvZiB0aGUgdW5kZXJsaW5lIHRoYXQgc2hvdWxkIGJlIHVzZWRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInVuZGVybGluZVRoaWNrbmVzc1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMucG9zdC51bmRlcmxpbmVUaGlja25lc3M7XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogSWYgdGhpcyBpcyBhbiBpdGFsaWMgZm9udCwgdGhlIGFuZ2xlIHRoZSBjdXJzb3Igc2hvdWxkIGJlIGRyYXduIGF0IHRvIG1hdGNoIHRoZSBmb250IGRlc2lnblxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiaXRhbGljQW5nbGVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvc3QuaXRhbGljQW5nbGU7XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlaWdodCBvZiBjYXBpdGFsIGxldHRlcnMgYWJvdmUgdGhlIGJhc2VsaW5lLlxyXG4gICAgICogU2VlIFtoZXJlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYXBfaGVpZ2h0KSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiY2FwSGVpZ2h0XCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgb3MyID0gdGhpc1snT1MvMiddO1xuICAgICAgcmV0dXJuIG9zMiA/IG9zMi5jYXBIZWlnaHQgOiB0aGlzLmFzY2VudDtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIGxvd2VyIGNhc2UgbGV0dGVycyBpbiB0aGUgZm9udC5cclxuICAgICAqIFNlZSBbaGVyZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWC1oZWlnaHQpIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ4SGVpZ2h0XCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgb3MyID0gdGhpc1snT1MvMiddO1xuICAgICAgcmV0dXJuIG9zMiA/IG9zMi54SGVpZ2h0IDogMDtcbiAgICB9XG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZm9udC5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcIm51bUdseXBoc1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWF4cC5udW1HbHlwaHM7XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogVGhlIHNpemUgb2YgdGhlIGZvbnTigJlzIGludGVybmFsIGNvb3JkaW5hdGUgZ3JpZFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwidW5pdHNQZXJFbVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVhZC51bml0c1BlckVtO1xuICAgIH1cbiAgICAvKipcclxuICAgICAqIFRoZSBmb2504oCZcyBib3VuZGluZyBib3gsIGkuZS4gdGhlIGJveCB0aGF0IGVuY2xvc2VzIGFsbCBnbHlwaHMgaW4gdGhlIGZvbnQuXHJcbiAgICAgKiBAdHlwZSB7QkJveH1cclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiYmJveFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUobmV3IEJCb3godGhpcy5oZWFkLnhNaW4sIHRoaXMuaGVhZC55TWluLCB0aGlzLmhlYWQueE1heCwgdGhpcy5oZWFkLnlNYXgpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2NtYXBQcm9jZXNzb3JcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBuZXcgQ21hcFByb2Nlc3Nvcih0aGlzLmNtYXApO1xuICAgIH1cbiAgICAvKipcclxuICAgICAqIEFuIGFycmF5IG9mIGFsbCBvZiB0aGUgdW5pY29kZSBjb2RlIHBvaW50cyBzdXBwb3J0ZWQgYnkgdGhlIGZvbnQuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImNoYXJhY3RlclNldFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NtYXBQcm9jZXNzb3IuZ2V0Q2hhcmFjdGVyU2V0KCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9sYXlvdXRFbmdpbmVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBuZXcgTGF5b3V0RW5naW5lKHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhdmFpbGFibGVGZWF0dXJlc1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xheW91dEVuZ2luZS5nZXRBdmFpbGFibGVGZWF0dXJlcygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YXJpYXRpb25BeGVzXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgcmVzID0ge307XG5cbiAgICAgIGlmICghdGhpcy5mdmFyKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjc2ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLmZ2YXIuYXhpcyksIF9zdGVwNzY7ICEoX3N0ZXA3NiA9IF9pdGVyYXRvcjc2KCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBheGlzID0gX3N0ZXA3Ni52YWx1ZTtcbiAgICAgICAgcmVzW2F4aXMuYXhpc1RhZy50cmltKCldID0ge1xuICAgICAgICAgIG5hbWU6IGF4aXMubmFtZS5lbixcbiAgICAgICAgICBtaW46IGF4aXMubWluVmFsdWUsXG4gICAgICAgICAgZGVmYXVsdDogYXhpcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgbWF4OiBheGlzLm1heFZhbHVlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBvYmplY3QgZGVzY3JpYmluZyB0aGUgbmFtZWQgdmFyaWF0aW9uIGluc3RhbmNlc1xyXG4gICAgICogdGhhdCB0aGUgZm9udCBkZXNpZ25lciBoYXMgc3BlY2lmaWVkLiBLZXlzIGFyZSB2YXJpYXRpb24gbmFtZXNcclxuICAgICAqIGFuZCB2YWx1ZXMgYXJlIHRoZSB2YXJpYXRpb24gc2V0dGluZ3MgZm9yIHRoaXMgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge29iamVjdH1cclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwibmFtZWRWYXJpYXRpb25zXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgcmVzID0ge307XG5cbiAgICAgIGlmICghdGhpcy5mdmFyKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjc3ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLmZ2YXIuaW5zdGFuY2UpLCBfc3RlcDc3OyAhKF9zdGVwNzcgPSBfaXRlcmF0b3I3NygpKS5kb25lOykge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBfc3RlcDc3LnZhbHVlO1xuICAgICAgICB2YXIgc2V0dGluZ3MgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZnZhci5heGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGF4aXMgPSB0aGlzLmZ2YXIuYXhpc1tpXTtcbiAgICAgICAgICBzZXR0aW5nc1theGlzLmF4aXNUYWcudHJpbSgpXSA9IGluc3RhbmNlLmNvb3JkW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzW2luc3RhbmNlLm5hbWUuZW5dID0gc2V0dGluZ3M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl92YXJpYXRpb25Qcm9jZXNzb3JcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIGlmICghdGhpcy5mdmFyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFyaWF0aW9uQ29vcmRzID0gdGhpcy52YXJpYXRpb25Db29yZHM7IC8vIElnbm9yZSBpZiBubyB2YXJpYXRpb24gY29vcmRzIGFuZCBub3QgQ0ZGMlxuXG4gICAgICBpZiAoIXZhcmlhdGlvbkNvb3JkcyAmJiAhdGhpcy5DRkYyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXZhcmlhdGlvbkNvb3Jkcykge1xuICAgICAgICB2YXJpYXRpb25Db29yZHMgPSB0aGlzLmZ2YXIuYXhpcy5tYXAoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICByZXR1cm4gYXhpcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEdseXBoVmFyaWF0aW9uUHJvY2Vzc29yKHRoaXMsIHZhcmlhdGlvbkNvb3Jkcyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRURkZvbnQ7XG59KCksIChfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKF9jbGFzcyQ0LnByb3RvdHlwZSwgXCJiYm94XCIsIFtjYWNoZV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX2NsYXNzJDQucHJvdG90eXBlLCBcImJib3hcIiksIF9jbGFzcyQ0LnByb3RvdHlwZSksIF9hcHBseURlY29yYXRlZERlc2NyaXB0b3IoX2NsYXNzJDQucHJvdG90eXBlLCBcIl9jbWFwUHJvY2Vzc29yXCIsIFtjYWNoZV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX2NsYXNzJDQucHJvdG90eXBlLCBcIl9jbWFwUHJvY2Vzc29yXCIpLCBfY2xhc3MkNC5wcm90b3R5cGUpLCBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKF9jbGFzcyQ0LnByb3RvdHlwZSwgXCJjaGFyYWN0ZXJTZXRcIiwgW2NhY2hlXSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihfY2xhc3MkNC5wcm90b3R5cGUsIFwiY2hhcmFjdGVyU2V0XCIpLCBfY2xhc3MkNC5wcm90b3R5cGUpLCBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKF9jbGFzcyQ0LnByb3RvdHlwZSwgXCJfbGF5b3V0RW5naW5lXCIsIFtjYWNoZV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX2NsYXNzJDQucHJvdG90eXBlLCBcIl9sYXlvdXRFbmdpbmVcIiksIF9jbGFzcyQ0LnByb3RvdHlwZSksIF9hcHBseURlY29yYXRlZERlc2NyaXB0b3IoX2NsYXNzJDQucHJvdG90eXBlLCBcInZhcmlhdGlvbkF4ZXNcIiwgW2NhY2hlXSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihfY2xhc3MkNC5wcm90b3R5cGUsIFwidmFyaWF0aW9uQXhlc1wiKSwgX2NsYXNzJDQucHJvdG90eXBlKSwgX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcihfY2xhc3MkNC5wcm90b3R5cGUsIFwibmFtZWRWYXJpYXRpb25zXCIsIFtjYWNoZV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX2NsYXNzJDQucHJvdG90eXBlLCBcIm5hbWVkVmFyaWF0aW9uc1wiKSwgX2NsYXNzJDQucHJvdG90eXBlKSwgX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcihfY2xhc3MkNC5wcm90b3R5cGUsIFwiX3ZhcmlhdGlvblByb2Nlc3NvclwiLCBbY2FjaGVdLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKF9jbGFzcyQ0LnByb3RvdHlwZSwgXCJfdmFyaWF0aW9uUHJvY2Vzc29yXCIpLCBfY2xhc3MkNC5wcm90b3R5cGUpKSwgX2NsYXNzJDQpO1xudmFyIFdPRkZEaXJlY3RvcnlFbnRyeSA9IG5ldyByLlN0cnVjdCh7XG4gIHRhZzogbmV3IHIuU3RyaW5nKDQpLFxuICBvZmZzZXQ6IG5ldyByLlBvaW50ZXIoci51aW50MzIsICd2b2lkJywge1xuICAgIHR5cGU6ICdnbG9iYWwnXG4gIH0pLFxuICBjb21wTGVuZ3RoOiByLnVpbnQzMixcbiAgbGVuZ3RoOiByLnVpbnQzMixcbiAgb3JpZ0NoZWNrc3VtOiByLnVpbnQzMlxufSk7XG52YXIgV09GRkRpcmVjdG9yeSA9IG5ldyByLlN0cnVjdCh7XG4gIHRhZzogbmV3IHIuU3RyaW5nKDQpLFxuICAvLyBzaG91bGQgYmUgJ3dPRkYnXG4gIGZsYXZvcjogci51aW50MzIsXG4gIGxlbmd0aDogci51aW50MzIsXG4gIG51bVRhYmxlczogci51aW50MTYsXG4gIHJlc2VydmVkOiBuZXcgci5SZXNlcnZlZChyLnVpbnQxNiksXG4gIHRvdGFsU2ZudFNpemU6IHIudWludDMyLFxuICBtYWpvclZlcnNpb246IHIudWludDE2LFxuICBtaW5vclZlcnNpb246IHIudWludDE2LFxuICBtZXRhT2Zmc2V0OiByLnVpbnQzMixcbiAgbWV0YUxlbmd0aDogci51aW50MzIsXG4gIG1ldGFPcmlnTGVuZ3RoOiByLnVpbnQzMixcbiAgcHJpdk9mZnNldDogci51aW50MzIsXG4gIHByaXZMZW5ndGg6IHIudWludDMyLFxuICB0YWJsZXM6IG5ldyByLkFycmF5KFdPRkZEaXJlY3RvcnlFbnRyeSwgJ251bVRhYmxlcycpXG59KTtcblxuV09GRkRpcmVjdG9yeS5wcm9jZXNzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGFibGVzID0ge307XG5cbiAgZm9yICh2YXIgX2l0ZXJhdG9yNzggPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMudGFibGVzKSwgX3N0ZXA3ODsgIShfc3RlcDc4ID0gX2l0ZXJhdG9yNzgoKSkuZG9uZTspIHtcbiAgICB2YXIgdGFibGUgPSBfc3RlcDc4LnZhbHVlO1xuICAgIHRhYmxlc1t0YWJsZS50YWddID0gdGFibGU7XG4gIH1cblxuICB0aGlzLnRhYmxlcyA9IHRhYmxlcztcbn07XG5cbnZhciBXT0ZGRm9udCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1RURkZvbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoV09GRkZvbnQsIF9UVEZGb250KTtcblxuICBmdW5jdGlvbiBXT0ZGRm9udCgpIHtcbiAgICByZXR1cm4gX1RURkZvbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG5cbiAgV09GRkZvbnQucHJvYmUgPSBmdW5jdGlvbiBwcm9iZShidWZmZXIpIHtcbiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCdhc2NpaScsIDAsIDQpID09PSAnd09GRic7XG4gIH07XG5cbiAgdmFyIF9wcm90bzQ0ID0gV09GRkZvbnQucHJvdG90eXBlO1xuXG4gIF9wcm90bzQ0Ll9kZWNvZGVEaXJlY3RvcnkgPSBmdW5jdGlvbiBfZGVjb2RlRGlyZWN0b3J5KCkge1xuICAgIHRoaXMuZGlyZWN0b3J5ID0gV09GRkRpcmVjdG9yeS5kZWNvZGUodGhpcy5zdHJlYW0sIHtcbiAgICAgIF9zdGFydE9mZnNldDogMFxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzQ0Ll9nZXRUYWJsZVN0cmVhbSA9IGZ1bmN0aW9uIF9nZXRUYWJsZVN0cmVhbSh0YWcpIHtcbiAgICB2YXIgdGFibGUgPSB0aGlzLmRpcmVjdG9yeS50YWJsZXNbdGFnXTtcblxuICAgIGlmICh0YWJsZSkge1xuICAgICAgdGhpcy5zdHJlYW0ucG9zID0gdGFibGUub2Zmc2V0O1xuXG4gICAgICBpZiAodGFibGUuY29tcExlbmd0aCA8IHRhYmxlLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnN0cmVhbS5wb3MgKz0gMjsgLy8gc2tpcCBkZWZsYXRlIGhlYWRlclxuXG4gICAgICAgIHZhciBvdXRCdWZmZXIgPSBCdWZmZXIuYWxsb2ModGFibGUubGVuZ3RoKTtcbiAgICAgICAgdmFyIGJ1ZiA9IGluZmxhdGUodGhpcy5zdHJlYW0ucmVhZEJ1ZmZlcih0YWJsZS5jb21wTGVuZ3RoIC0gMiksIG91dEJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBuZXcgci5EZWNvZGVTdHJlYW0oYnVmKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gV09GRkZvbnQ7XG59KFRURkZvbnQpO1xuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBUcnVlVHlwZSBnbHlwaCBpbiB0aGUgV09GRjIgZm9ybWF0LCB3aGljaCBjb21wcmVzc2VzIGdseXBocyBkaWZmZXJlbnRseS5cclxuICovXG5cblxudmFyIFdPRkYyR2x5cGggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9UVEZHbHlwaDIpIHtcbiAgX2luaGVyaXRzTG9vc2UoV09GRjJHbHlwaCwgX1RURkdseXBoMik7XG5cbiAgZnVuY3Rpb24gV09GRjJHbHlwaCgpIHtcbiAgICByZXR1cm4gX1RURkdseXBoMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvNDUgPSBXT0ZGMkdseXBoLnByb3RvdHlwZTtcblxuICBfcHJvdG80NS5fZGVjb2RlID0gZnVuY3Rpb24gX2RlY29kZSgpIHtcbiAgICAvLyBXZSBoYXZlIHRvIGRlY29kZSBpbiBhZHZhbmNlIChpbiBXT0ZGMkZvbnQpLCBzbyBqdXN0IHJldHVybiB0aGUgcHJlLWRlY29kZWQgZGF0YS5cbiAgICByZXR1cm4gdGhpcy5fZm9udC5fdHJhbnNmb3JtZWRHbHlwaHNbdGhpcy5pZF07XG4gIH07XG5cbiAgX3Byb3RvNDUuX2dldENCb3ggPSBmdW5jdGlvbiBfZ2V0Q0JveCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoLmJib3g7XG4gIH07XG5cbiAgcmV0dXJuIFdPRkYyR2x5cGg7XG59KFRURkdseXBoKTtcblxudmFyIEJhc2UxMjggPSB7XG4gIGRlY29kZTogZnVuY3Rpb24gZGVjb2RlKHN0cmVhbSkge1xuICAgIHZhciByZXN1bHQgPSAwO1xuICAgIHZhciBpdGVyYWJsZSA9IFswLCAxLCAyLCAzLCA0XTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlcmFibGUubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBjb2RlID0gc3RyZWFtLnJlYWRVSW50OCgpOyAvLyBJZiBhbnkgb2YgdGhlIHRvcCBzZXZlbiBiaXRzIGFyZSBzZXQgdGhlbiB3ZSdyZSBhYm91dCB0byBvdmVyZmxvdy5cblxuICAgICAgaWYgKHJlc3VsdCAmIDB4ZTAwMDAwMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPdmVyZmxvdycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSByZXN1bHQgPDwgNyB8IGNvZGUgJiAweDdmO1xuXG4gICAgICBpZiAoKGNvZGUgJiAweDgwKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignQmFkIGJhc2UgMTI4IG51bWJlcicpO1xuICB9XG59O1xudmFyIGtub3duVGFncyA9IFsnY21hcCcsICdoZWFkJywgJ2hoZWEnLCAnaG10eCcsICdtYXhwJywgJ25hbWUnLCAnT1MvMicsICdwb3N0JywgJ2N2dCAnLCAnZnBnbScsICdnbHlmJywgJ2xvY2EnLCAncHJlcCcsICdDRkYgJywgJ1ZPUkcnLCAnRUJEVCcsICdFQkxDJywgJ2dhc3AnLCAnaGRteCcsICdrZXJuJywgJ0xUU0gnLCAnUENMVCcsICdWRE1YJywgJ3ZoZWEnLCAndm10eCcsICdCQVNFJywgJ0dERUYnLCAnR1BPUycsICdHU1VCJywgJ0VCU0MnLCAnSlNURicsICdNQVRIJywgJ0NCRFQnLCAnQ0JMQycsICdDT0xSJywgJ0NQQUwnLCAnU1ZHICcsICdzYml4JywgJ2FjbnQnLCAnYXZhcicsICdiZGF0JywgJ2Jsb2MnLCAnYnNsbicsICdjdmFyJywgJ2Zkc2MnLCAnZmVhdCcsICdmbXR4JywgJ2Z2YXInLCAnZ3ZhcicsICdoc3R5JywgJ2p1c3QnLCAnbGNhcicsICdtb3J0JywgJ21vcngnLCAnb3BiZCcsICdwcm9wJywgJ3RyYWsnLCAnWmFwZicsICdTaWxmJywgJ0dsYXQnLCAnR2xvYycsICdGZWF0JywgJ1NpbGwnXTtcbnZhciBXT0ZGMkRpcmVjdG9yeUVudHJ5ID0gbmV3IHIuU3RydWN0KHtcbiAgZmxhZ3M6IHIudWludDgsXG4gIGN1c3RvbVRhZzogbmV3IHIuT3B0aW9uYWwobmV3IHIuU3RyaW5nKDQpLCBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiAodC5mbGFncyAmIDB4M2YpID09PSAweDNmO1xuICB9KSxcbiAgdGFnOiBmdW5jdGlvbiB0YWcodCkge1xuICAgIHJldHVybiB0LmN1c3RvbVRhZyB8fCBrbm93blRhZ3NbdC5mbGFncyAmIDB4M2ZdO1xuICB9LFxuICAvLyB8fCAoKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEJhZCB0YWc6ICR7ZmxhZ3MgJiAweDNmfWApOyB9KSgpOyB9LFxuICBsZW5ndGg6IEJhc2UxMjgsXG4gIHRyYW5zZm9ybVZlcnNpb246IGZ1bmN0aW9uIHRyYW5zZm9ybVZlcnNpb24odCkge1xuICAgIHJldHVybiB0LmZsYWdzID4+PiA2ICYgMHgwMztcbiAgfSxcbiAgdHJhbnNmb3JtZWQ6IGZ1bmN0aW9uIHRyYW5zZm9ybWVkKHQpIHtcbiAgICByZXR1cm4gdC50YWcgPT09ICdnbHlmJyB8fCB0LnRhZyA9PT0gJ2xvY2EnID8gdC50cmFuc2Zvcm1WZXJzaW9uID09PSAwIDogdC50cmFuc2Zvcm1WZXJzaW9uICE9PSAwO1xuICB9LFxuICB0cmFuc2Zvcm1MZW5ndGg6IG5ldyByLk9wdGlvbmFsKEJhc2UxMjgsIGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHQudHJhbnNmb3JtZWQ7XG4gIH0pXG59KTtcbnZhciBXT0ZGMkRpcmVjdG9yeSA9IG5ldyByLlN0cnVjdCh7XG4gIHRhZzogbmV3IHIuU3RyaW5nKDQpLFxuICAvLyBzaG91bGQgYmUgJ3dPRjInXG4gIGZsYXZvcjogci51aW50MzIsXG4gIGxlbmd0aDogci51aW50MzIsXG4gIG51bVRhYmxlczogci51aW50MTYsXG4gIHJlc2VydmVkOiBuZXcgci5SZXNlcnZlZChyLnVpbnQxNiksXG4gIHRvdGFsU2ZudFNpemU6IHIudWludDMyLFxuICB0b3RhbENvbXByZXNzZWRTaXplOiByLnVpbnQzMixcbiAgbWFqb3JWZXJzaW9uOiByLnVpbnQxNixcbiAgbWlub3JWZXJzaW9uOiByLnVpbnQxNixcbiAgbWV0YU9mZnNldDogci51aW50MzIsXG4gIG1ldGFMZW5ndGg6IHIudWludDMyLFxuICBtZXRhT3JpZ0xlbmd0aDogci51aW50MzIsXG4gIHByaXZPZmZzZXQ6IHIudWludDMyLFxuICBwcml2TGVuZ3RoOiByLnVpbnQzMixcbiAgdGFibGVzOiBuZXcgci5BcnJheShXT0ZGMkRpcmVjdG9yeUVudHJ5LCAnbnVtVGFibGVzJylcbn0pO1xuXG5XT0ZGMkRpcmVjdG9yeS5wcm9jZXNzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGFibGVzID0ge307XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0YWJsZSA9IHRoaXMudGFibGVzW2ldO1xuICAgIHRhYmxlc1t0YWJsZS50YWddID0gdGFibGU7XG4gIH1cblxuICByZXR1cm4gdGhpcy50YWJsZXMgPSB0YWJsZXM7XG59O1xuLyoqXHJcbiAqIFN1YmNsYXNzIG9mIFRURkZvbnQgdGhhdCByZXByZXNlbnRzIGEgVFRGL09URiBmb250IGNvbXByZXNzZWQgYnkgV09GRjJcclxuICogU2VlIHNwZWMgaGVyZTogaHR0cDovL3d3dy53My5vcmcvVFIvV09GRjIvXHJcbiAqL1xuXG5cbnZhciBXT0ZGMkZvbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9UVEZGb250Mikge1xuICBfaW5oZXJpdHNMb29zZShXT0ZGMkZvbnQsIF9UVEZGb250Mik7XG5cbiAgZnVuY3Rpb24gV09GRjJGb250KCkge1xuICAgIHJldHVybiBfVFRGRm9udDIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG5cbiAgV09GRjJGb250LnByb2JlID0gZnVuY3Rpb24gcHJvYmUoYnVmZmVyKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygnYXNjaWknLCAwLCA0KSA9PT0gJ3dPRjInO1xuICB9O1xuXG4gIHZhciBfcHJvdG80NiA9IFdPRkYyRm9udC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNDYuX2RlY29kZURpcmVjdG9yeSA9IGZ1bmN0aW9uIF9kZWNvZGVEaXJlY3RvcnkoKSB7XG4gICAgdGhpcy5kaXJlY3RvcnkgPSBXT0ZGMkRpcmVjdG9yeS5kZWNvZGUodGhpcy5zdHJlYW0pO1xuICAgIHRoaXMuX2RhdGFQb3MgPSB0aGlzLnN0cmVhbS5wb3M7XG4gIH07XG5cbiAgX3Byb3RvNDYuX2RlY29tcHJlc3MgPSBmdW5jdGlvbiBfZGVjb21wcmVzcygpIHtcbiAgICAvLyBkZWNvbXByZXNzIGRhdGEgYW5kIHNldHVwIHRhYmxlIG9mZnNldHMgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5XG4gICAgaWYgKCF0aGlzLl9kZWNvbXByZXNzZWQpIHtcbiAgICAgIHRoaXMuc3RyZWFtLnBvcyA9IHRoaXMuX2RhdGFQb3M7XG4gICAgICB2YXIgYnVmZmVyID0gdGhpcy5zdHJlYW0ucmVhZEJ1ZmZlcih0aGlzLmRpcmVjdG9yeS50b3RhbENvbXByZXNzZWRTaXplKTtcbiAgICAgIHZhciBkZWNvbXByZXNzZWRTaXplID0gMDtcblxuICAgICAgZm9yICh2YXIgdGFnIGluIHRoaXMuZGlyZWN0b3J5LnRhYmxlcykge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmRpcmVjdG9yeS50YWJsZXNbdGFnXTtcbiAgICAgICAgZW50cnkub2Zmc2V0ID0gZGVjb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgZGVjb21wcmVzc2VkU2l6ZSArPSBlbnRyeS50cmFuc2Zvcm1MZW5ndGggIT0gbnVsbCA/IGVudHJ5LnRyYW5zZm9ybUxlbmd0aCA6IGVudHJ5Lmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgdmFyIGRlY29tcHJlc3NlZCA9IGJyb3RsaShidWZmZXIsIGRlY29tcHJlc3NlZFNpemUpO1xuXG4gICAgICBpZiAoIWRlY29tcHJlc3NlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGRlY29kaW5nIGNvbXByZXNzZWQgZGF0YSBpbiBXT0ZGMicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0cmVhbSA9IG5ldyByLkRlY29kZVN0cmVhbShCdWZmZXIuZnJvbShkZWNvbXByZXNzZWQpKTtcbiAgICAgIHRoaXMuX2RlY29tcHJlc3NlZCA9IHRydWU7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzQ2Ll9kZWNvZGVUYWJsZSA9IGZ1bmN0aW9uIF9kZWNvZGVUYWJsZSh0YWJsZSkge1xuICAgIHRoaXMuX2RlY29tcHJlc3MoKTtcblxuICAgIHJldHVybiBfVFRGRm9udDIucHJvdG90eXBlLl9kZWNvZGVUYWJsZS5jYWxsKHRoaXMsIHRhYmxlKTtcbiAgfSAvLyBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBnZXQgYSBnbHlwaCBhbmQgcmV0dXJuIG91clxuICAvLyBjdXN0b20gc3ViY2xhc3MgaWYgdGhlcmUgaXMgYSBnbHlmIHRhYmxlLlxuICA7XG5cbiAgX3Byb3RvNDYuX2dldEJhc2VHbHlwaCA9IGZ1bmN0aW9uIF9nZXRCYXNlR2x5cGgoZ2x5cGgsIGNoYXJhY3RlcnMpIHtcbiAgICBpZiAoY2hhcmFjdGVycyA9PT0gdm9pZCAwKSB7XG4gICAgICBjaGFyYWN0ZXJzID0gW107XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9nbHlwaHNbZ2x5cGhdKSB7XG4gICAgICBpZiAodGhpcy5kaXJlY3RvcnkudGFibGVzLmdseWYgJiYgdGhpcy5kaXJlY3RvcnkudGFibGVzLmdseWYudHJhbnNmb3JtZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl90cmFuc2Zvcm1lZEdseXBocykge1xuICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybUdseWZUYWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dseXBoc1tnbHlwaF0gPSBuZXcgV09GRjJHbHlwaChnbHlwaCwgY2hhcmFjdGVycywgdGhpcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX1RURkZvbnQyLnByb3RvdHlwZS5fZ2V0QmFzZUdseXBoLmNhbGwodGhpcywgZ2x5cGgsIGNoYXJhY3RlcnMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG80Ni5fdHJhbnNmb3JtR2x5ZlRhYmxlID0gZnVuY3Rpb24gX3RyYW5zZm9ybUdseWZUYWJsZSgpIHtcbiAgICB0aGlzLl9kZWNvbXByZXNzKCk7XG5cbiAgICB0aGlzLnN0cmVhbS5wb3MgPSB0aGlzLmRpcmVjdG9yeS50YWJsZXMuZ2x5Zi5vZmZzZXQ7XG4gICAgdmFyIHRhYmxlID0gR2x5ZlRhYmxlLmRlY29kZSh0aGlzLnN0cmVhbSk7XG4gICAgdmFyIGdseXBocyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRhYmxlLm51bUdseXBoczsgaW5kZXgrKykge1xuICAgICAgdmFyIGdseXBoID0ge307XG4gICAgICB2YXIgbkNvbnRvdXJzID0gdGFibGUubkNvbnRvdXJzLnJlYWRJbnQxNkJFKCk7XG4gICAgICBnbHlwaC5udW1iZXJPZkNvbnRvdXJzID0gbkNvbnRvdXJzO1xuXG4gICAgICBpZiAobkNvbnRvdXJzID4gMCkge1xuICAgICAgICAvLyBzaW1wbGUgZ2x5cGhcbiAgICAgICAgdmFyIG5Qb2ludHMgPSBbXTtcbiAgICAgICAgdmFyIHRvdGFsUG9pbnRzID0gMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5Db250b3VyczsgaSsrKSB7XG4gICAgICAgICAgdmFyIF9yID0gcmVhZDI1NVVJbnQxNih0YWJsZS5uUG9pbnRzKTtcblxuICAgICAgICAgIHRvdGFsUG9pbnRzICs9IF9yO1xuICAgICAgICAgIG5Qb2ludHMucHVzaCh0b3RhbFBvaW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBnbHlwaC5wb2ludHMgPSBkZWNvZGVUcmlwbGV0KHRhYmxlLmZsYWdzLCB0YWJsZS5nbHlwaHMsIHRvdGFsUG9pbnRzKTtcblxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbkNvbnRvdXJzOyBfaSsrKSB7XG4gICAgICAgICAgZ2x5cGgucG9pbnRzW25Qb2ludHNbX2ldIC0gMV0uZW5kQ29udG91ciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25TaXplID0gcmVhZDI1NVVJbnQxNih0YWJsZS5nbHlwaHMpO1xuICAgICAgfSBlbHNlIGlmIChuQ29udG91cnMgPCAwKSB7XG4gICAgICAgIC8vIGNvbXBvc2l0ZSBnbHlwaFxuICAgICAgICB2YXIgaGF2ZUluc3RydWN0aW9ucyA9IFRURkdseXBoLnByb3RvdHlwZS5fZGVjb2RlQ29tcG9zaXRlLmNhbGwoe1xuICAgICAgICAgIF9mb250OiB0aGlzXG4gICAgICAgIH0sIGdseXBoLCB0YWJsZS5jb21wb3NpdGVzKTtcblxuICAgICAgICBpZiAoaGF2ZUluc3RydWN0aW9ucykge1xuICAgICAgICAgIHZhciBpbnN0cnVjdGlvblNpemUgPSByZWFkMjU1VUludDE2KHRhYmxlLmdseXBocyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZ2x5cGhzLnB1c2goZ2x5cGgpO1xuICAgIH1cblxuICAgIHRoaXMuX3RyYW5zZm9ybWVkR2x5cGhzID0gZ2x5cGhzO1xuICB9O1xuXG4gIHJldHVybiBXT0ZGMkZvbnQ7XG59KFRURkZvbnQpOyAvLyBTcGVjaWFsIGNsYXNzIHRoYXQgYWNjZXB0cyBhIGxlbmd0aCBhbmQgcmV0dXJucyBhIHN1Yi1zdHJlYW0gZm9yIHRoYXQgZGF0YVxuXG5cbnZhciBTdWJzdHJlYW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdWJzdHJlYW0obGVuZ3RoKSB7XG4gICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgdGhpcy5fYnVmID0gbmV3IHIuQnVmZmVyKGxlbmd0aCk7XG4gIH1cblxuICB2YXIgX3Byb3RvNDcgPSBTdWJzdHJlYW0ucHJvdG90eXBlO1xuXG4gIF9wcm90bzQ3LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJlYW0sIHBhcmVudCkge1xuICAgIHJldHVybiBuZXcgci5EZWNvZGVTdHJlYW0odGhpcy5fYnVmLmRlY29kZShzdHJlYW0sIHBhcmVudCkpO1xuICB9O1xuXG4gIHJldHVybiBTdWJzdHJlYW07XG59KCk7IC8vIFRoaXMgc3RydWN0IHJlcHJlc2VudHMgdGhlIGVudGlyZSBnbHlmIHRhYmxlXG5cblxudmFyIEdseWZUYWJsZSA9IG5ldyByLlN0cnVjdCh7XG4gIHZlcnNpb246IHIudWludDMyLFxuICBudW1HbHlwaHM6IHIudWludDE2LFxuICBpbmRleEZvcm1hdDogci51aW50MTYsXG4gIG5Db250b3VyU3RyZWFtU2l6ZTogci51aW50MzIsXG4gIG5Qb2ludHNTdHJlYW1TaXplOiByLnVpbnQzMixcbiAgZmxhZ1N0cmVhbVNpemU6IHIudWludDMyLFxuICBnbHlwaFN0cmVhbVNpemU6IHIudWludDMyLFxuICBjb21wb3NpdGVTdHJlYW1TaXplOiByLnVpbnQzMixcbiAgYmJveFN0cmVhbVNpemU6IHIudWludDMyLFxuICBpbnN0cnVjdGlvblN0cmVhbVNpemU6IHIudWludDMyLFxuICBuQ29udG91cnM6IG5ldyBTdWJzdHJlYW0oJ25Db250b3VyU3RyZWFtU2l6ZScpLFxuICBuUG9pbnRzOiBuZXcgU3Vic3RyZWFtKCduUG9pbnRzU3RyZWFtU2l6ZScpLFxuICBmbGFnczogbmV3IFN1YnN0cmVhbSgnZmxhZ1N0cmVhbVNpemUnKSxcbiAgZ2x5cGhzOiBuZXcgU3Vic3RyZWFtKCdnbHlwaFN0cmVhbVNpemUnKSxcbiAgY29tcG9zaXRlczogbmV3IFN1YnN0cmVhbSgnY29tcG9zaXRlU3RyZWFtU2l6ZScpLFxuICBiYm94ZXM6IG5ldyBTdWJzdHJlYW0oJ2Jib3hTdHJlYW1TaXplJyksXG4gIGluc3RydWN0aW9uczogbmV3IFN1YnN0cmVhbSgnaW5zdHJ1Y3Rpb25TdHJlYW1TaXplJylcbn0pO1xudmFyIFdPUkRfQ09ERSA9IDI1MztcbnZhciBPTkVfTU9SRV9CWVRFX0NPREUyID0gMjU0O1xudmFyIE9ORV9NT1JFX0JZVEVfQ09ERTEgPSAyNTU7XG52YXIgTE9XRVNUX1VfQ09ERSA9IDI1MztcblxuZnVuY3Rpb24gcmVhZDI1NVVJbnQxNihzdHJlYW0pIHtcbiAgdmFyIGNvZGUgPSBzdHJlYW0ucmVhZFVJbnQ4KCk7XG5cbiAgaWYgKGNvZGUgPT09IFdPUkRfQ09ERSkge1xuICAgIHJldHVybiBzdHJlYW0ucmVhZFVJbnQxNkJFKCk7XG4gIH1cblxuICBpZiAoY29kZSA9PT0gT05FX01PUkVfQllURV9DT0RFMSkge1xuICAgIHJldHVybiBzdHJlYW0ucmVhZFVJbnQ4KCkgKyBMT1dFU1RfVV9DT0RFO1xuICB9XG5cbiAgaWYgKGNvZGUgPT09IE9ORV9NT1JFX0JZVEVfQ09ERTIpIHtcbiAgICByZXR1cm4gc3RyZWFtLnJlYWRVSW50OCgpICsgTE9XRVNUX1VfQ09ERSAqIDI7XG4gIH1cblxuICByZXR1cm4gY29kZTtcbn1cblxuZnVuY3Rpb24gd2l0aFNpZ24oZmxhZywgYmFzZXZhbCkge1xuICByZXR1cm4gZmxhZyAmIDEgPyBiYXNldmFsIDogLWJhc2V2YWw7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVRyaXBsZXQoZmxhZ3MsIGdseXBocywgblBvaW50cykge1xuICB2YXIgeTtcbiAgdmFyIHggPSB5ID0gMDtcbiAgdmFyIHJlcyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgblBvaW50czsgaSsrKSB7XG4gICAgdmFyIGR4ID0gMCxcbiAgICAgICAgZHkgPSAwO1xuICAgIHZhciBmbGFnID0gZmxhZ3MucmVhZFVJbnQ4KCk7XG4gICAgdmFyIG9uQ3VydmUgPSAhKGZsYWcgPj4gNyk7XG4gICAgZmxhZyAmPSAweDdmO1xuXG4gICAgaWYgKGZsYWcgPCAxMCkge1xuICAgICAgZHggPSAwO1xuICAgICAgZHkgPSB3aXRoU2lnbihmbGFnLCAoKGZsYWcgJiAxNCkgPDwgNykgKyBnbHlwaHMucmVhZFVJbnQ4KCkpO1xuICAgIH0gZWxzZSBpZiAoZmxhZyA8IDIwKSB7XG4gICAgICBkeCA9IHdpdGhTaWduKGZsYWcsICgoZmxhZyAtIDEwICYgMTQpIDw8IDcpICsgZ2x5cGhzLnJlYWRVSW50OCgpKTtcbiAgICAgIGR5ID0gMDtcbiAgICB9IGVsc2UgaWYgKGZsYWcgPCA4NCkge1xuICAgICAgdmFyIGIwID0gZmxhZyAtIDIwO1xuICAgICAgdmFyIGIxID0gZ2x5cGhzLnJlYWRVSW50OCgpO1xuICAgICAgZHggPSB3aXRoU2lnbihmbGFnLCAxICsgKGIwICYgMHgzMCkgKyAoYjEgPj4gNCkpO1xuICAgICAgZHkgPSB3aXRoU2lnbihmbGFnID4+IDEsIDEgKyAoKGIwICYgMHgwYykgPDwgMikgKyAoYjEgJiAweDBmKSk7XG4gICAgfSBlbHNlIGlmIChmbGFnIDwgMTIwKSB7XG4gICAgICB2YXIgYjAgPSBmbGFnIC0gODQ7XG4gICAgICBkeCA9IHdpdGhTaWduKGZsYWcsIDEgKyAoYjAgLyAxMiA8PCA4KSArIGdseXBocy5yZWFkVUludDgoKSk7XG4gICAgICBkeSA9IHdpdGhTaWduKGZsYWcgPj4gMSwgMSArIChiMCAlIDEyID4+IDIgPDwgOCkgKyBnbHlwaHMucmVhZFVJbnQ4KCkpO1xuICAgIH0gZWxzZSBpZiAoZmxhZyA8IDEyNCkge1xuICAgICAgdmFyIGIxID0gZ2x5cGhzLnJlYWRVSW50OCgpO1xuICAgICAgdmFyIGIyID0gZ2x5cGhzLnJlYWRVSW50OCgpO1xuICAgICAgZHggPSB3aXRoU2lnbihmbGFnLCAoYjEgPDwgNCkgKyAoYjIgPj4gNCkpO1xuICAgICAgZHkgPSB3aXRoU2lnbihmbGFnID4+IDEsICgoYjIgJiAweDBmKSA8PCA4KSArIGdseXBocy5yZWFkVUludDgoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGR4ID0gd2l0aFNpZ24oZmxhZywgZ2x5cGhzLnJlYWRVSW50MTZCRSgpKTtcbiAgICAgIGR5ID0gd2l0aFNpZ24oZmxhZyA+PiAxLCBnbHlwaHMucmVhZFVJbnQxNkJFKCkpO1xuICAgIH1cblxuICAgIHggKz0gZHg7XG4gICAgeSArPSBkeTtcbiAgICByZXMucHVzaChuZXcgUG9pbnQob25DdXJ2ZSwgZmFsc2UsIHgsIHkpKTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbnZhciBUVENIZWFkZXIgPSBuZXcgci5WZXJzaW9uZWRTdHJ1Y3Qoci51aW50MzIsIHtcbiAgMHgwMDAxMDAwMDoge1xuICAgIG51bUZvbnRzOiByLnVpbnQzMixcbiAgICBvZmZzZXRzOiBuZXcgci5BcnJheShyLnVpbnQzMiwgJ251bUZvbnRzJylcbiAgfSxcbiAgMHgwMDAyMDAwMDoge1xuICAgIG51bUZvbnRzOiByLnVpbnQzMixcbiAgICBvZmZzZXRzOiBuZXcgci5BcnJheShyLnVpbnQzMiwgJ251bUZvbnRzJyksXG4gICAgZHNpZ1RhZzogci51aW50MzIsXG4gICAgZHNpZ0xlbmd0aDogci51aW50MzIsXG4gICAgZHNpZ09mZnNldDogci51aW50MzJcbiAgfVxufSk7XG5cbnZhciBUcnVlVHlwZUNvbGxlY3Rpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBUcnVlVHlwZUNvbGxlY3Rpb24ucHJvYmUgPSBmdW5jdGlvbiBwcm9iZShidWZmZXIpIHtcbiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCdhc2NpaScsIDAsIDQpID09PSAndHRjZic7XG4gIH07XG5cbiAgZnVuY3Rpb24gVHJ1ZVR5cGVDb2xsZWN0aW9uKHN0cmVhbSkge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuXG4gICAgaWYgKHN0cmVhbS5yZWFkU3RyaW5nKDQpICE9PSAndHRjZicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGEgVHJ1ZVR5cGUgY29sbGVjdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyID0gVFRDSGVhZGVyLmRlY29kZShzdHJlYW0pO1xuICB9XG5cbiAgdmFyIF9wcm90bzQ4ID0gVHJ1ZVR5cGVDb2xsZWN0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG80OC5nZXRGb250ID0gZnVuY3Rpb24gZ2V0Rm9udChuYW1lKSB7XG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yNzkgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMuaGVhZGVyLm9mZnNldHMpLCBfc3RlcDc5OyAhKF9zdGVwNzkgPSBfaXRlcmF0b3I3OSgpKS5kb25lOykge1xuICAgICAgdmFyIG9mZnNldCA9IF9zdGVwNzkudmFsdWU7XG4gICAgICB2YXIgc3RyZWFtID0gbmV3IHIuRGVjb2RlU3RyZWFtKHRoaXMuc3RyZWFtLmJ1ZmZlcik7XG4gICAgICBzdHJlYW0ucG9zID0gb2Zmc2V0O1xuICAgICAgdmFyIGZvbnQgPSBuZXcgVFRGRm9udChzdHJlYW0pO1xuXG4gICAgICBpZiAoZm9udC5wb3N0c2NyaXB0TmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gZm9udDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBfY3JlYXRlQ2xhc3MoVHJ1ZVR5cGVDb2xsZWN0aW9uLCBbe1xuICAgIGtleTogXCJmb250c1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGZvbnRzID0gW107XG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjgwID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLmhlYWRlci5vZmZzZXRzKSwgX3N0ZXA4MDsgIShfc3RlcDgwID0gX2l0ZXJhdG9yODAoKSkuZG9uZTspIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IF9zdGVwODAudmFsdWU7XG4gICAgICAgIHZhciBzdHJlYW0gPSBuZXcgci5EZWNvZGVTdHJlYW0odGhpcy5zdHJlYW0uYnVmZmVyKTtcbiAgICAgICAgc3RyZWFtLnBvcyA9IG9mZnNldDtcbiAgICAgICAgZm9udHMucHVzaChuZXcgVFRGRm9udChzdHJlYW0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvbnRzO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUcnVlVHlwZUNvbGxlY3Rpb247XG59KCk7XG5cbnZhciBERm9udE5hbWUgPSBuZXcgci5TdHJpbmcoci51aW50OCk7XG52YXIgREZvbnREYXRhID0gbmV3IHIuU3RydWN0KHtcbiAgbGVuOiByLnVpbnQzMixcbiAgYnVmOiBuZXcgci5CdWZmZXIoJ2xlbicpXG59KTtcbnZhciBSZWYgPSBuZXcgci5TdHJ1Y3Qoe1xuICBpZDogci51aW50MTYsXG4gIG5hbWVPZmZzZXQ6IHIuaW50MTYsXG4gIGF0dHI6IHIudWludDgsXG4gIGRhdGFPZmZzZXQ6IHIudWludDI0LFxuICBoYW5kbGU6IHIudWludDMyXG59KTtcbnZhciBUeXBlID0gbmV3IHIuU3RydWN0KHtcbiAgbmFtZTogbmV3IHIuU3RyaW5nKDQpLFxuICBtYXhUeXBlSW5kZXg6IHIudWludDE2LFxuICByZWZMaXN0OiBuZXcgci5Qb2ludGVyKHIudWludDE2LCBuZXcgci5BcnJheShSZWYsIGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHQubWF4VHlwZUluZGV4ICsgMTtcbiAgfSksIHtcbiAgICB0eXBlOiAncGFyZW50J1xuICB9KVxufSk7XG52YXIgVHlwZUxpc3QgPSBuZXcgci5TdHJ1Y3Qoe1xuICBsZW5ndGg6IHIudWludDE2LFxuICB0eXBlczogbmV3IHIuQXJyYXkoVHlwZSwgZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5sZW5ndGggKyAxO1xuICB9KVxufSk7XG52YXIgREZvbnRNYXAgPSBuZXcgci5TdHJ1Y3Qoe1xuICByZXNlcnZlZDogbmV3IHIuUmVzZXJ2ZWQoci51aW50OCwgMjQpLFxuICB0eXBlTGlzdDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgVHlwZUxpc3QpLFxuICBuYW1lTGlzdE9mZnNldDogbmV3IHIuUG9pbnRlcihyLnVpbnQxNiwgJ3ZvaWQnKVxufSk7XG52YXIgREZvbnRIZWFkZXIgPSBuZXcgci5TdHJ1Y3Qoe1xuICBkYXRhT2Zmc2V0OiByLnVpbnQzMixcbiAgbWFwOiBuZXcgci5Qb2ludGVyKHIudWludDMyLCBERm9udE1hcCksXG4gIGRhdGFMZW5ndGg6IHIudWludDMyLFxuICBtYXBMZW5ndGg6IHIudWludDMyXG59KTtcblxudmFyIERGb250ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgREZvbnQucHJvYmUgPSBmdW5jdGlvbiBwcm9iZShidWZmZXIpIHtcbiAgICB2YXIgc3RyZWFtID0gbmV3IHIuRGVjb2RlU3RyZWFtKGJ1ZmZlcik7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIGhlYWRlciA9IERGb250SGVhZGVyLmRlY29kZShzdHJlYW0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3I4MSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UoaGVhZGVyLm1hcC50eXBlTGlzdC50eXBlcyksIF9zdGVwODE7ICEoX3N0ZXA4MSA9IF9pdGVyYXRvcjgxKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgdHlwZSA9IF9zdGVwODEudmFsdWU7XG5cbiAgICAgIGlmICh0eXBlLm5hbWUgPT09ICdzZm50Jykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgZnVuY3Rpb24gREZvbnQoc3RyZWFtKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5oZWFkZXIgPSBERm9udEhlYWRlci5kZWNvZGUodGhpcy5zdHJlYW0pO1xuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yODIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHRoaXMuaGVhZGVyLm1hcC50eXBlTGlzdC50eXBlcyksIF9zdGVwODI7ICEoX3N0ZXA4MiA9IF9pdGVyYXRvcjgyKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgdHlwZSA9IF9zdGVwODIudmFsdWU7XG5cbiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjgzID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0eXBlLnJlZkxpc3QpLCBfc3RlcDgzOyAhKF9zdGVwODMgPSBfaXRlcmF0b3I4MygpKS5kb25lOykge1xuICAgICAgICB2YXIgcmVmID0gX3N0ZXA4My52YWx1ZTtcblxuICAgICAgICBpZiAocmVmLm5hbWVPZmZzZXQgPj0gMCkge1xuICAgICAgICAgIHRoaXMuc3RyZWFtLnBvcyA9IHJlZi5uYW1lT2Zmc2V0ICsgdGhpcy5oZWFkZXIubWFwLm5hbWVMaXN0T2Zmc2V0O1xuICAgICAgICAgIHJlZi5uYW1lID0gREZvbnROYW1lLmRlY29kZSh0aGlzLnN0cmVhbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmLm5hbWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlLm5hbWUgPT09ICdzZm50Jykge1xuICAgICAgICB0aGlzLnNmbnQgPSB0eXBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBfcHJvdG80OSA9IERGb250LnByb3RvdHlwZTtcblxuICBfcHJvdG80OS5nZXRGb250ID0gZnVuY3Rpb24gZ2V0Rm9udChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLnNmbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pdGVyYXRvcjg0ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZSh0aGlzLnNmbnQucmVmTGlzdCksIF9zdGVwODQ7ICEoX3N0ZXA4NCA9IF9pdGVyYXRvcjg0KCkpLmRvbmU7KSB7XG4gICAgICB2YXIgcmVmID0gX3N0ZXA4NC52YWx1ZTtcbiAgICAgIHZhciBwb3MgPSB0aGlzLmhlYWRlci5kYXRhT2Zmc2V0ICsgcmVmLmRhdGFPZmZzZXQgKyA0O1xuICAgICAgdmFyIHN0cmVhbSA9IG5ldyByLkRlY29kZVN0cmVhbSh0aGlzLnN0cmVhbS5idWZmZXIuc2xpY2UocG9zKSk7XG4gICAgICB2YXIgZm9udCA9IG5ldyBUVEZGb250KHN0cmVhbSk7XG5cbiAgICAgIGlmIChmb250LnBvc3RzY3JpcHROYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmb250O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIF9jcmVhdGVDbGFzcyhERm9udCwgW3tcbiAgICBrZXk6IFwiZm9udHNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBmb250cyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBfaXRlcmF0b3I4NSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodGhpcy5zZm50LnJlZkxpc3QpLCBfc3RlcDg1OyAhKF9zdGVwODUgPSBfaXRlcmF0b3I4NSgpKS5kb25lOykge1xuICAgICAgICB2YXIgcmVmID0gX3N0ZXA4NS52YWx1ZTtcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMuaGVhZGVyLmRhdGFPZmZzZXQgKyByZWYuZGF0YU9mZnNldCArIDQ7XG4gICAgICAgIHZhciBzdHJlYW0gPSBuZXcgci5EZWNvZGVTdHJlYW0odGhpcy5zdHJlYW0uYnVmZmVyLnNsaWNlKHBvcykpO1xuICAgICAgICBmb250cy5wdXNoKG5ldyBUVEZGb250KHN0cmVhbSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9udHM7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERGb250O1xufSgpO1xuXG5mb250a2l0LnJlZ2lzdGVyRm9ybWF0KFRURkZvbnQpO1xuZm9udGtpdC5yZWdpc3RlckZvcm1hdChXT0ZGRm9udCk7XG5mb250a2l0LnJlZ2lzdGVyRm9ybWF0KFdPRkYyRm9udCk7XG5mb250a2l0LnJlZ2lzdGVyRm9ybWF0KFRydWVUeXBlQ29sbGVjdGlvbik7XG5mb250a2l0LnJlZ2lzdGVyRm9ybWF0KERGb250KTtcbm1vZHVsZS5leHBvcnRzID0gZm9udGtpdDtcblxuLyoqKi8gfSksXG5cbi8qKiovIDczMzc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIFVuaWNvZGVUcmllID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NzgxKTtcblxuXG5cbnZhciBiYXNlNjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3NDIpO1xuXG52YXIgX3JlcXVpcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNTUpLFxuICAgIEJLID0gX3JlcXVpcmUuQkssXG4gICAgQ1IgPSBfcmVxdWlyZS5DUixcbiAgICBMRiA9IF9yZXF1aXJlLkxGLFxuICAgIE5MID0gX3JlcXVpcmUuTkwsXG4gICAgU0cgPSBfcmVxdWlyZS5TRyxcbiAgICBXSiA9IF9yZXF1aXJlLldKLFxuICAgIFNQID0gX3JlcXVpcmUuU1AsXG4gICAgWldKID0gX3JlcXVpcmUuWldKLFxuICAgIEJBID0gX3JlcXVpcmUuQkEsXG4gICAgSFkgPSBfcmVxdWlyZS5IWSxcbiAgICBOUyA9IF9yZXF1aXJlLk5TLFxuICAgIEFJID0gX3JlcXVpcmUuQUksXG4gICAgQUwgPSBfcmVxdWlyZS5BTCxcbiAgICBDSiA9IF9yZXF1aXJlLkNKLFxuICAgIEhMID0gX3JlcXVpcmUuSEwsXG4gICAgUkkgPSBfcmVxdWlyZS5SSSxcbiAgICBTQSA9IF9yZXF1aXJlLlNBLFxuICAgIFhYID0gX3JlcXVpcmUuWFg7XG5cbnZhciBfcmVxdWlyZTIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzODMpLFxuICAgIERJX0JSSyA9IF9yZXF1aXJlMi5ESV9CUkssXG4gICAgSU5fQlJLID0gX3JlcXVpcmUyLklOX0JSSyxcbiAgICBDSV9CUksgPSBfcmVxdWlyZTIuQ0lfQlJLLFxuICAgIENQX0JSSyA9IF9yZXF1aXJlMi5DUF9CUkssXG4gICAgUFJfQlJLID0gX3JlcXVpcmUyLlBSX0JSSyxcbiAgICBwYWlyVGFibGUgPSBfcmVxdWlyZTIucGFpclRhYmxlO1xuXG52YXIgZGF0YSA9IGJhc2U2NC50b0J5dGVBcnJheShcIkFBZ09BQUFBQUFDQTNRQUFBZTBPRXZIdG5YdU1YVVVkeCtkMmQyLzMzcjIzN1YzWVNvRkMxMXI2SUdnYlJGQkVmRkY1S0NWQ01ZS0ZhS244QVlxbXdVZXFFQ0ZhYlVHUWlwVWlOQ2tnU1JFbFVrS3dKUld0d1NwSnJacENJNEUyTlFxaUJzRkd3V0w4VHU2TWQzWjIzbzl6YnVuZDVKTTVjK2IxbTkvODVubk91WHRUSHlGcndYcHdMOWdCbmdUUGdqK0R2NEg5QWU0QjBOOVBTQU1jRHFhQjBYNTd1cm1JczhBUTcyU0VuUTQrQUJhQnhXQUpXQXF1RU5KOUJ0ZGZBTmVDbGVCR2NDdjROdmdldUJ2OEFHd0NtOEZXbHBiek9Qdzd3Qzd3Rk5nRG5nTXZncGZBcTJEQ0FDRjEwQUNIZ2FQQXpJRjIrUEZ3VDJUaDFQOE91TzhGWjRNUGdndkF4V0FwK0E2VkhlNXlzSUxGdng3dTZvRjIrV3ZnM2c3dVl2bFQrVGJDL1RINENkZ0N0b0d0ZlczL0UyQW44KytHdTVlbGVSN3VQOEIrOEJvTGY0TEZINmkyM1ZwMXJCNWExUTdUR01lQ1VZWVkxOFJjeEYwZ3hUOEg1YjNkSXc4WDNpUGtkeGF1UHdRV2d5VmdXYlZUMzAvaCttcndaYW44cjhML0ZjRVdWc0ovRTFncnBLWGN3ZExkSTl5L0g5Y1BnVWVyYmJ1bjBQYWRDSGNialFkK0Q1NW1hZmN4OXk5d1h3S3ZDTEpVSmlMZFJIMDllZjR4dXBxRS9LZUNZOEJ4NE0zZ2JlQmRZQ0U0RzN3WVhBU1dnR1hnU2liVGN1YXVnSHM5V0EzV2dOdkJCaGEyRWU0RDRHRk5QVFlMOXgvRDlYYUpYd25YdndXN3dEUGdUelFkMkE5ZUF3T0RoRFRCQ0pnT1pvRVR3RW5ndEVGbUYzRFBBb3VZLzBLNFN3YjlkYmFNcGJrUzduS1A5Q3NDeXJwT1NyTks4SzlrTm5ZTDdxMERHd2JiL1huam9EdjNnUWZCWnZCejhHdndPL0FIZHIzUGt2NEY0ZnBsajNKNzlPZ1JCeDhIeXBhalI0OGVQWHIwNk5Hang4SEZ2N3BBQmhYL0hSeDdIcUtqcjlZK3k2UFhnN1gyV1JvUG0xS3pwejhDY1dhd2VMUGhIdC9mUHE5NUM2NVBabm1mRG5jaE9MZldQby83T0xnUTE1ZXdkSitFKytuYTJQTWh5dWR3NzJiREdjMDFDUDhhV0FtK0RyNEJWb0hWNElaZVdDK3NGOVlMNjRVbEQxc0Qxb0U3YXUwejB6SzVwMVl1WmRlL1I0OXVKbllkZXovNjJFUGdrVnI0YzdwSGtmWVhpdlRiY1c4bjJBMzJnT2VrT0grRi81L2dBT2l2RTlJQXJYcGJybWx3Uit2bGp6OWJKclY1NTJSQ3ZnUTJHWGdSeko5Q3lHVlR4b2ZkTGQxN0d2NmpXNFJjQUc1b3RlLzlGTzRCOE5aaFFzNERONE85a09GWTZPRlNzQjQ4Qy9xR0NGa0F5RVJDemg5cSswV3VBMnNxSFg0bStTbXY0dDZSalhZZWxJdHd2UTdzQnRPYWhId1UzTlljbis1UTRwRm1Sejg5ZXZUb2NhanhTdE04OTgvRmZMU2dyZzgvc1Q1K3pjTERUa1hZKzZTMEMrRS9sOTA3U1hPK1J0L0x1anJ4ZTFrbXp0UFU3MEpEdlNtWElMd0pXUzlUeEx1QzNWdHV5Y1BHQ29WK1ZmRDQxeXZLVzZXNGQxTzkvUzVZdForUXRiaStrL20vRC9lSFlCUHpiNEc3RGZ5Uytlblo0Mi9xblhQRnArcGpaZGdEL3lYMFhjVjYrOTNERitIK0c1QWh0Y3hQSXMvQm9ZNWNnMGc3UlJHWHgvOEV3bzhZNnZocC9Cbnd6MkY1eklkN0NndW5aNkR2MXVURjA1ODVwTlk3UDlOZGhQQ1BESTFOY3luOGw0T3J3SEt3Z3VWQjEyV3JOUG5wb1BXNUJXbHVBM2VDdXhSbDNjZnlmRkNvbTQzTkJqa2VROWgyVHpsenM3UEw1Q21EM1V3SGV3MjYrS01tN0FWSHU4aEphTDFmVHRqMjlMM0Uvd2k2b1B2V3ZrWTdiQWp1Y0tPWXRweW1LV2RHby8zZTVLeEdSOFlUR3ZtZlo0WFc0NlJHbW5NSUc2ZXhjczZBZTQ2blB1aDdwR1hidm0vZk9COTF2TGhSWHZrbWxrS3VLOEJuRlRiOHhZTDZUeXF1Z2J6WEpaQ1o5dGxWck85K0MrNTNHNTEzNEE4RzFodHNqZGJ2WG9UL0tFQlBtd3EwNGRTMnY2VXhObnhiQVhWNWd1bDRaNkordE10Qlp0djQrUXp5Mk5kb2YrZndQSFAvenNiZy9RRnowMnRJTTRCOVpSTzBtcDM3OU54eEJwZ0Q1Z3YzVDhIMTZlQU1jQ1pZeE1JV3cvMllFRzhwcmk5bi9xdmdmcjQ1Zm02N1Z0alB6bWJwVnJKN056TDNWcmp2Ri9KZGgrc04zTS9jQitBK0xPVi9iVk5kWDEzYjBHOUt0bXJTSENvOGp2cWZHakZ1N1dpV1AzN0U4czIreXY4WndWYllSZ3ZNQW05a3ZNa2hqU3R6QVpiSUJHSVIrbmdBeTJOU1o5ZjBIdjJiSUlTaENja1U1azVzYitPZEdHUTBCS3FTUHplRTFXRkNnV1hLNWRPMnJERC9DT245elR2RVVmWEo0elQzYzlEUDJvSDIrWm9BdGM5UkJyL21ZMFNMZEd5YXArTnhoNlcwSW4yU241QzgvVzAwYy83ZFhuNjN3ZTFEdEFIdWQ5V1piRk5pbW1GTDJpSW9xdDhlRFBRSHB0RVJJa05vTzhwckZWdmJsbTEzT2FHNm9HTStuN1A0L1JyUnoySGRUa3RvdHhIRmRaVzV0dm03MlVXRXRtOWRRRjZuKytoVTFGbVZGTCsrTDJOc2R0My8xSVZyV2FhY2RhNFNlOTF0K3BIRFZYRjVIRmQ5cEc3WDE0Tk55ZVByNndrZlBUUkkrSDZxRFB2THFSTTVEUjJiZVo4Vzk1RGl2cTBJV1hYeXkvZDE4WXEwOVpoeVkvZnlQamFmWTM3eXRhOHliRDlsM1cxNStjclhZaFE1cnNqMldrYjdpRGFkb24xYyt0S0k0cDVOUjZIalBsL3ZxdkxtOTJ1SzhsVGpXTm50a3dKVHU5aGtpSm1IVmYzUzFWNVVPaWk2UFdMMW5WcU9rUDVRSS9iMkwybytLcXIvaDlpMGJITmw5SHVkbktuMGJ0S0JiWnpJdFE3bjQ3RHJtdXRnNlArdWJaSzcvNXZhMFBVOFhaUzU2RFA0SXNjaTA3Z1VvMy9mc2NkbGZNeXA2eFI2ZHkwdnQvMjc1SzFiSjhxa0hJOTliZEszdjR2dDRHdHpzN3NFV2E1YVpINE5EejN5ZldHMzY4YlhMbFE2R1pZUTcvVUwxeTNtcnlyb1orbmtad0syOFNEMXZsdCs3c05kK2xjUjNKaTFSS3ExV2N2aGZ0RnpvdXNZeGZ0SDdOZ3UycFp1YmNHZkQ4ZU1penA1WS91aGEvbTY5Tk5LNXNpU09hcGtjcTJsVE9PR3ZFNHk5YVBjbEZsMjBlWFR2d29aTzM3NHltb2I5MEp4M1pmazJoL0k4NDlxN1ZORStXWHNqK1pGbEo5NlhjZDFQeUQ0dWUySjY5L1E5Vit1OXVQclFDNy9zSFJmdGpFK24rZVFQMlp0bDVLYyswVFgvV05EOHZQMmlGMjN4TzdsZk8zWHRLZkxoVW0vUEU2WmU3OFJELzNGa25yOGk5MDd5V3NvVXgrTTNTKzBTTmpjSHl1N3FnNithWXZxRjY3MVRMWGZUelUrMnVhVG5PT3piRmMrN3lIb1pFNTlucElMMTc1a2F5L1p4bEtNSDZhK05TSmRsOTBYS1h5dHBiTXBUci9rUDV6SmZxeFFEem5lWVdUc3R4aDlwUFBkWUovQ0w4YWxUQmFnK2ZGdkhGWHRRTXV0V3hCbG9PVU1NSFM2R1dTeVZZUzRwdmdtZXhYdFZqYy9URldrOVpublpMdDMrY2FJMTAvOFhrYitoc1lsZmVoK1FPeVBOUU4xUzdodjJucWl2RVZTai9FeCsxbHU3M0liMW9sYnU0anBmTjRkZGJXYkhOKy9tY3BXZlVlbStnN1JoSzQ4MzNTdWVwSGJOMGQ1UGpLRjFrVWxsM3hQRmM1ZCtidFRXOXVxZENIWHdhUTdrdzI1MkVOSVc5dktUZEVmVExveCtWUFlUNnI4WFhVV3E3dFl1WHlabkVBRytpYytwd3lWZFJMRHA4d2NPcDBrRVpOWHpMeXF3M2YreUVrak1JMXNGem5rOHVsREtjb0tsY0ZWbHo3NXFQeXU5K1U4WXV2bnFuZlhORG42dDZuZU5yM3hmSGo0SkVVNTAwbWE4U1NrampvZHB0QmxUTHVyYkk3clR4VW5oY3hGNmQ5Vzc2S1JiZDZHM0RkVk5qMnFpYS9xRDNLWTJPOTBlbExKb2NwSEpjOTBRN2txVkxxYUxsR1VqWWorUGcwMGpEOFhrK1duZjVVQU44YzhIR3J2WEtZaSs0aXJuc29vMDljdFUyOUZsbDJVcmFTeWF4blRPYXI4REZ3K3c2MFN0K2NSTmx6Zm05RTl5OUNOVVRaTTUvN2lPVFdSNmltT2dhS2YvcG42aEp3L2Y4ZERkUzZ1MHROaEROMVpPbEdVb2F1VHJxeVFOdkNkMjFNank4Ti9UN0FpeEJrUXJtM3RSS1MwdG5nRHdyV1l6b2J1TEZ3WFYzV2ZQNXVSOVRHVFhkdmMzQlJWanExOGwzcmJ3bWFTOGM5UUJ5UjRtM1NiL2xQVlgyVi9NNG5hRGtWNzlHRm1KRGFkMk5hTE9kcEJweHNidnMrL1l1YmdWUE81Ym4zaCs3NUJhaG5FT1UvRVZiK3lUTDd2UWVUUXAwNEdIL3R3ZlRZYUN2OWVoZThYWGRaMEljK0lZOTRIY2lrLzloMFprMzVjN01kV1hvNzM3SE0veTZkbGxQRU5qOXpldXZxN3ZNTVlhbTg4ZlpuZlU3bk9Iem5mNi9BZFArVzhmZlh2MnE2dWVsRGxFMU4vV3grUHJiL01HOEFSQlZKMGViN3J6NVRmNnNsNWwvRzluaXpEbkpMSnVkWm9hTnFVL2hic0NQSDczZGh1KzAzYVdQaVpoVzkveUxIZjhJR3ZUMU90endaSjU2eUcvN1l2WDVzU2RuK3lvZjZ4NWF2MmVieGNWMWRPWjlwRFZnU1h5cy8zNnVMekcxczVOdmo3cEtvOWF4bTJ6c3VleWx4ZVQxbFdsUTRya3V1eng1ZjMrVlhQUEdJaGdiTG5LcC9ydGlKZGN6MmxPdE1wQXRNWlYyN0Uva1J0dHlhRjgzZEZiZjNOZFl3WHg2c1pwSDB1VmtaL1ZzbG1PcnNwYTI0VjErTzU2dTNUZG1YcFFkYUp5MzZ3TFBtNExaVlI3anlwL0NMT21VTHR6ZVdab3FzdHVMUzlyaHpUbXF3SWUzTFZpYTBmMk9TUDNjLzcxRWM4VjBpdHY2SnRPTmJPWGRiM09jNVlkY1RhUVZGelJXZzcrejZIeWRuSHkrcVBvV08rajF5cThhbm9maWZXbDdyaTk3Y2hOaXEvejZLeU0zN3Q4MzMzc0pSL1NGLzNiVXZkK3orOG5WM0tOUFdmSXZ0M21mTlppakZBWlQ4eGZYU2VrTGZPdGwzckhDdVB6eHJFZFQ3VTlVdlJqbjNIS1Y1L1hUdW8yaTNuK0UzTDVMKzN5TitUa0grejA3WkdEbGt2aXVYTGNYM2FMN2IrOG0rZHVoQ3pKb25wL3lGOXdhYlBJdFpoSm1KL044cFZmdm4zMUZvazdQZWlZc2FsRk9ONGJQbnl1T083UnUyRytTNTJmcUI1REF0NTViSnRYZjJMdEpkUVBhckNWZXZIbHFjdWZkdXZLSnVRNXl4eHZBL1p3NlcwbDVEMytuejdhNHdkaWVYeGQrRlMyU2pQTjdaOVhYRFJwNjIvZE12NEdUTTIydXd4MS9pVGU3elRVU2ZqZjFNcWxkMzZFSHYyeHZQb3ByTW5HZkd2SWlESGsrL3grRVFUUDdmTU9qbDkyOGYwLzg1NU9UbmFKNVhlUXNldlZITm9qTzUxNDdlUFhMSDY4MW1EcU9CaHFlZi9JdnArN1BNRjFWeHMwMmtNSVRMSzMwenAvaytGYlgxUmRQL3cxYjJPTXQ5aGlSMWJLTEhmWitYV1QrNCthaHF6Vk04aVV1ZzgxcjV0ZlRmMytKQjZEUEZwazF6bGxMVXU5NTIzY3BQTGRsUjZ6VFZQK2JTaEdGZDFsaC9UZDMzclZkVDQ0V3FUdGpxa3RPdGM4N29zYzh4NWhNOXZ5THJLNDl2K1B2bXA3RGUwL3Z5dkxKdmsxQzMrMU9PeUx5Ry9hU1N1ZDFML1RsTHEvQm9aNU0yeE5qNjZJRlJsVDlmY1Q0R3FEWW9zUTNkZi9HMHpsUjVVNFVWempBSlpQcFc4TmxMSTVsT2VqendxK2VTNHJuV1pic2pUeDdaVXJxNHNYZHJRUG1BYTgyUGIwSFZ1eVpsM3Jyclo3TmFsL1VMemR5MHpCVVhyTWFRY1UxOHY2bmNteGQ5ZU0vMWZrZFEyNFR2dStwYVoycTVTNnoxMythbmxUeVZmcnY0YVd6L2Rlc2ZGZm4zV0VqNzI3ck5HS0hKZGxxc00xVm9tcGp6VCtzaFh2N0Y3NWRqM0ozSzNxWTdRTTdEY1oyTC9Bdz09XCIpO1xudmFyIGNsYXNzVHJpZSA9IG5ldyBVbmljb2RlVHJpZShkYXRhKTtcblxudmFyIG1hcENsYXNzID0gZnVuY3Rpb24gbWFwQ2xhc3MoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIEFJOlxuICAgICAgcmV0dXJuIEFMO1xuXG4gICAgY2FzZSBTQTpcbiAgICBjYXNlIFNHOlxuICAgIGNhc2UgWFg6XG4gICAgICByZXR1cm4gQUw7XG5cbiAgICBjYXNlIENKOlxuICAgICAgcmV0dXJuIE5TO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjO1xuICB9XG59O1xuXG52YXIgbWFwRmlyc3QgPSBmdW5jdGlvbiBtYXBGaXJzdChjKSB7XG4gIHN3aXRjaCAoYykge1xuICAgIGNhc2UgTEY6XG4gICAgY2FzZSBOTDpcbiAgICAgIHJldHVybiBCSztcblxuICAgIGNhc2UgU1A6XG4gICAgICByZXR1cm4gV0o7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGM7XG4gIH1cbn07XG5cbnZhciBCcmVhayA9IGZ1bmN0aW9uIEJyZWFrKHBvc2l0aW9uLCByZXF1aXJlZCkge1xuICBpZiAocmVxdWlyZWQgPT09IHZvaWQgMCkge1xuICAgIHJlcXVpcmVkID0gZmFsc2U7XG4gIH1cblxuICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XG4gIHRoaXMucmVxdWlyZWQgPSByZXF1aXJlZDtcbn07XG5cbnZhciBMaW5lQnJlYWtlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExpbmVCcmVha2VyKHN0cmluZykge1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMucG9zID0gMDtcbiAgICB0aGlzLmxhc3RQb3MgPSAwO1xuICAgIHRoaXMuY3VyQ2xhc3MgPSBudWxsO1xuICAgIHRoaXMubmV4dENsYXNzID0gbnVsbDtcbiAgICB0aGlzLkxCOGEgPSBmYWxzZTtcbiAgICB0aGlzLkxCMjFhID0gZmFsc2U7XG4gICAgdGhpcy5MQjMwYSA9IDA7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTGluZUJyZWFrZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5uZXh0Q29kZVBvaW50ID0gZnVuY3Rpb24gbmV4dENvZGVQb2ludCgpIHtcbiAgICB2YXIgY29kZSA9IHRoaXMuc3RyaW5nLmNoYXJDb2RlQXQodGhpcy5wb3MrKyk7XG4gICAgdmFyIG5leHQgPSB0aGlzLnN0cmluZy5jaGFyQ29kZUF0KHRoaXMucG9zKTsgLy8gSWYgYSBzdXJyb2dhdGUgcGFpclxuXG4gICAgaWYgKDB4ZDgwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHhkYmZmICYmIDB4ZGMwMCA8PSBuZXh0ICYmIG5leHQgPD0gMHhkZmZmKSB7XG4gICAgICB0aGlzLnBvcysrO1xuICAgICAgcmV0dXJuIChjb2RlIC0gMHhkODAwKSAqIDB4NDAwICsgKG5leHQgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29kZTtcbiAgfTtcblxuICBfcHJvdG8ubmV4dENoYXJDbGFzcyA9IGZ1bmN0aW9uIG5leHRDaGFyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIG1hcENsYXNzKGNsYXNzVHJpZS5nZXQodGhpcy5uZXh0Q29kZVBvaW50KCkpKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0U2ltcGxlQnJlYWsgPSBmdW5jdGlvbiBnZXRTaW1wbGVCcmVhaygpIHtcbiAgICAvLyBoYW5kbGUgY2xhc3NlcyBub3QgaGFuZGxlZCBieSB0aGUgcGFpciB0YWJsZVxuICAgIHN3aXRjaCAodGhpcy5uZXh0Q2xhc3MpIHtcbiAgICAgIGNhc2UgU1A6XG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgY2FzZSBCSzpcbiAgICAgIGNhc2UgTEY6XG4gICAgICBjYXNlIE5MOlxuICAgICAgICB0aGlzLmN1ckNsYXNzID0gQks7XG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgY2FzZSBDUjpcbiAgICAgICAgdGhpcy5jdXJDbGFzcyA9IENSO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgX3Byb3RvLmdldFBhaXJUYWJsZUJyZWFrID0gZnVuY3Rpb24gZ2V0UGFpclRhYmxlQnJlYWsobGFzdENsYXNzKSB7XG4gICAgLy8gaWYgbm90IGhhbmRsZWQgYWxyZWFkeSwgdXNlIHRoZSBwYWlyIHRhYmxlXG4gICAgdmFyIHNob3VsZEJyZWFrID0gZmFsc2U7XG5cbiAgICBzd2l0Y2ggKHBhaXJUYWJsZVt0aGlzLmN1ckNsYXNzXVt0aGlzLm5leHRDbGFzc10pIHtcbiAgICAgIGNhc2UgRElfQlJLOlxuICAgICAgICAvLyBEaXJlY3QgYnJlYWtcbiAgICAgICAgc2hvdWxkQnJlYWsgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBJTl9CUks6XG4gICAgICAgIC8vIHBvc3NpYmxlIGluZGlyZWN0IGJyZWFrXG4gICAgICAgIHNob3VsZEJyZWFrID0gbGFzdENsYXNzID09PSBTUDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ0lfQlJLOlxuICAgICAgICBzaG91bGRCcmVhayA9IGxhc3RDbGFzcyA9PT0gU1A7XG5cbiAgICAgICAgaWYgKCFzaG91bGRCcmVhaykge1xuICAgICAgICAgIHNob3VsZEJyZWFrID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHNob3VsZEJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ1BfQlJLOlxuICAgICAgICAvLyBwcm9oaWJpdGVkIGZvciBjb21iaW5pbmcgbWFya3NcbiAgICAgICAgaWYgKGxhc3RDbGFzcyAhPT0gU1ApIHtcbiAgICAgICAgICByZXR1cm4gc2hvdWxkQnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBQUl9CUks6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLkxCOGEpIHtcbiAgICAgIHNob3VsZEJyZWFrID0gZmFsc2U7XG4gICAgfSAvLyBSdWxlIExCMjFhXG5cblxuICAgIGlmICh0aGlzLkxCMjFhICYmICh0aGlzLmN1ckNsYXNzID09PSBIWSB8fCB0aGlzLmN1ckNsYXNzID09PSBCQSkpIHtcbiAgICAgIHNob3VsZEJyZWFrID0gZmFsc2U7XG4gICAgICB0aGlzLkxCMjFhID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuTEIyMWEgPSB0aGlzLmN1ckNsYXNzID09PSBITDtcbiAgICB9IC8vIFJ1bGUgTEIzMGFcblxuXG4gICAgaWYgKHRoaXMuY3VyQ2xhc3MgPT09IFJJKSB7XG4gICAgICB0aGlzLkxCMzBhKys7XG5cbiAgICAgIGlmICh0aGlzLkxCMzBhID09IDIgJiYgdGhpcy5uZXh0Q2xhc3MgPT09IFJJKSB7XG4gICAgICAgIHNob3VsZEJyZWFrID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5MQjMwYSA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuTEIzMGEgPSAwO1xuICAgIH1cblxuICAgIHRoaXMuY3VyQ2xhc3MgPSB0aGlzLm5leHRDbGFzcztcbiAgICByZXR1cm4gc2hvdWxkQnJlYWs7XG4gIH07XG5cbiAgX3Byb3RvLm5leHRCcmVhayA9IGZ1bmN0aW9uIG5leHRCcmVhaygpIHtcbiAgICAvLyBnZXQgdGhlIGZpcnN0IGNoYXIgaWYgd2UncmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nXG4gICAgaWYgKHRoaXMuY3VyQ2xhc3MgPT0gbnVsbCkge1xuICAgICAgdmFyIGZpcnN0Q2xhc3MgPSB0aGlzLm5leHRDaGFyQ2xhc3MoKTtcbiAgICAgIHRoaXMuY3VyQ2xhc3MgPSBtYXBGaXJzdChmaXJzdENsYXNzKTtcbiAgICAgIHRoaXMubmV4dENsYXNzID0gZmlyc3RDbGFzcztcbiAgICAgIHRoaXMuTEI4YSA9IGZpcnN0Q2xhc3MgPT09IFpXSjtcbiAgICAgIHRoaXMuTEIzMGEgPSAwO1xuICAgIH1cblxuICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuc3RyaW5nLmxlbmd0aCkge1xuICAgICAgdGhpcy5sYXN0UG9zID0gdGhpcy5wb3M7XG4gICAgICB2YXIgbGFzdENsYXNzID0gdGhpcy5uZXh0Q2xhc3M7XG4gICAgICB0aGlzLm5leHRDbGFzcyA9IHRoaXMubmV4dENoYXJDbGFzcygpOyAvLyBleHBsaWNpdCBuZXdsaW5lXG5cbiAgICAgIGlmICh0aGlzLmN1ckNsYXNzID09PSBCSyB8fCB0aGlzLmN1ckNsYXNzID09PSBDUiAmJiB0aGlzLm5leHRDbGFzcyAhPT0gTEYpIHtcbiAgICAgICAgdGhpcy5jdXJDbGFzcyA9IG1hcEZpcnN0KG1hcENsYXNzKHRoaXMubmV4dENsYXNzKSk7XG4gICAgICAgIHJldHVybiBuZXcgQnJlYWsodGhpcy5sYXN0UG9zLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNob3VsZEJyZWFrID0gdGhpcy5nZXRTaW1wbGVCcmVhaygpO1xuXG4gICAgICBpZiAoc2hvdWxkQnJlYWsgPT09IG51bGwpIHtcbiAgICAgICAgc2hvdWxkQnJlYWsgPSB0aGlzLmdldFBhaXJUYWJsZUJyZWFrKGxhc3RDbGFzcyk7XG4gICAgICB9IC8vIFJ1bGUgTEI4YVxuXG5cbiAgICAgIHRoaXMuTEI4YSA9IHRoaXMubmV4dENsYXNzID09PSBaV0o7XG5cbiAgICAgIGlmIChzaG91bGRCcmVhaykge1xuICAgICAgICByZXR1cm4gbmV3IEJyZWFrKHRoaXMubGFzdFBvcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGFzdFBvcyA8IHRoaXMuc3RyaW5nLmxlbmd0aCkge1xuICAgICAgdGhpcy5sYXN0UG9zID0gdGhpcy5zdHJpbmcubGVuZ3RoO1xuICAgICAgcmV0dXJuIG5ldyBCcmVhayh0aGlzLnN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJldHVybiBMaW5lQnJlYWtlcjtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaW5lQnJlYWtlcjtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQ5Mjc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZGVwcmVjYXRlO1xuXG4vKipcbiAqIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4gKiBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2Uubm9EZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudGhyb3dEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCB0aHJvdyBhbiBFcnJvciB3aGVuIGludm9rZWQuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS50cmFjZURlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGRlcHJlY2F0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIGludm9rZSBgY29uc29sZS50cmFjZSgpYCBpbnN0ZWFkIG9mIGBjb25zb2xlLmVycm9yKClgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gdGhlIGZ1bmN0aW9uIHRvIGRlcHJlY2F0ZVxuICogQHBhcmFtIHtTdHJpbmd9IG1zZyAtIHRoZSBzdHJpbmcgdG8gcHJpbnQgdG8gdGhlIGNvbnNvbGUgd2hlbiBgZm5gIGlzIGludm9rZWRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gYSBuZXcgXCJkZXByZWNhdGVkXCIgdmVyc2lvbiBvZiBgZm5gXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZSAoZm4sIG1zZykge1xuICBpZiAoY29uZmlnKCdub0RlcHJlY2F0aW9uJykpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChjb25maWcoJ3Rocm93RGVwcmVjYXRpb24nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnKCd0cmFjZURlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBgbG9jYWxTdG9yYWdlYCBmb3IgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBgbmFtZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29uZmlnIChuYW1lKSB7XG4gIC8vIGFjY2Vzc2luZyBnbG9iYWwubG9jYWxTdG9yYWdlIGNhbiB0cmlnZ2VyIGEgRE9NRXhjZXB0aW9uIGluIHNhbmRib3hlZCBpZnJhbWVzXG4gIHRyeSB7XG4gICAgaWYgKCFfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYWxTdG9yYWdlKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHZhbCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhbFN0b3JhZ2VbbmFtZV07XG4gIGlmIChudWxsID09IHZhbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzODQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNCdWZmZXIoYXJnKSB7XG4gIHJldHVybiBhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCdcbiAgICAmJiB0eXBlb2YgYXJnLmNvcHkgPT09ICdmdW5jdGlvbidcbiAgICAmJiB0eXBlb2YgYXJnLmZpbGwgPT09ICdmdW5jdGlvbidcbiAgICAmJiB0eXBlb2YgYXJnLnJlYWRVSW50OCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDU5NTU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDdXJyZW50bHkgaW4gc3luYyB3aXRoIE5vZGUuanMgbGliL2ludGVybmFsL3V0aWwvdHlwZXMuanNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9jb21taXQvMTEyY2M3YzI3NTUxMjU0YWEyYjE3MDk4ZmI3NzQ4NjdmMDVlZDBkOVxuXG5cblxudmFyIGlzQXJndW1lbnRzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTg0KTtcbnZhciBpc0dlbmVyYXRvckZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NjYyKTtcbnZhciB3aGljaFR5cGVkQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0MzApO1xudmFyIGlzVHlwZWRBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oNTY5Mik7XG5cbmZ1bmN0aW9uIHVuY3VycnlUaGlzKGYpIHtcbiAgcmV0dXJuIGYuY2FsbC5iaW5kKGYpO1xufVxuXG52YXIgQmlnSW50U3VwcG9ydGVkID0gdHlwZW9mIEJpZ0ludCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgU3ltYm9sU3VwcG9ydGVkID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCc7XG5cbnZhciBPYmplY3RUb1N0cmluZyA9IHVuY3VycnlUaGlzKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpO1xuXG52YXIgbnVtYmVyVmFsdWUgPSB1bmN1cnJ5VGhpcyhOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIHN0cmluZ1ZhbHVlID0gdW5jdXJyeVRoaXMoU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBib29sZWFuVmFsdWUgPSB1bmN1cnJ5VGhpcyhCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mKTtcblxuaWYgKEJpZ0ludFN1cHBvcnRlZCkge1xuICB2YXIgYmlnSW50VmFsdWUgPSB1bmN1cnJ5VGhpcyhCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YpO1xufVxuXG5pZiAoU3ltYm9sU3VwcG9ydGVkKSB7XG4gIHZhciBzeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQm94ZWRQcmltaXRpdmUodmFsdWUsIHByb3RvdHlwZVZhbHVlT2YpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBwcm90b3R5cGVWYWx1ZU9mKHZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydHMuaXNBcmd1bWVudHNPYmplY3QgPSBpc0FyZ3VtZW50c09iamVjdDtcbmV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGlzR2VuZXJhdG9yRnVuY3Rpb247XG5leHBvcnRzLmlzVHlwZWRBcnJheSA9IGlzVHlwZWRBcnJheTtcblxuLy8gVGFrZW4gZnJvbSBoZXJlIGFuZCBtb2RpZmllZCBmb3IgYmV0dGVyIGJyb3dzZXIgc3VwcG9ydFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9wLWlzLXByb21pc2UvYmxvYi9jZGEzNWE1MTNiZGEwM2Y5NzdhZDVjZGUzYTA3OWQyMzdlODJkN2VmL2luZGV4LmpzXG5mdW5jdGlvbiBpc1Byb21pc2UoaW5wdXQpIHtcblx0cmV0dXJuIChcblx0XHQoXG5cdFx0XHR0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiZcblx0XHRcdGlucHV0IGluc3RhbmNlb2YgUHJvbWlzZVxuXHRcdCkgfHxcblx0XHQoXG5cdFx0XHRpbnB1dCAhPT0gbnVsbCAmJlxuXHRcdFx0dHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJlxuXHRcdFx0dHlwZW9mIGlucHV0LnRoZW4gPT09ICdmdW5jdGlvbicgJiZcblx0XHRcdHR5cGVvZiBpbnB1dC5jYXRjaCA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdClcblx0KTtcbn1cbmV4cG9ydHMuaXNQcm9taXNlID0gaXNQcm9taXNlO1xuXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWx1ZSkge1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcpIHtcbiAgICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgaXNUeXBlZEFycmF5KHZhbHVlKSB8fFxuICAgIGlzRGF0YVZpZXcodmFsdWUpXG4gICk7XG59XG5leHBvcnRzLmlzQXJyYXlCdWZmZXJWaWV3ID0gaXNBcnJheUJ1ZmZlclZpZXc7XG5cblxuZnVuY3Rpb24gaXNVaW50OEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB3aGljaFR5cGVkQXJyYXkodmFsdWUpID09PSAnVWludDhBcnJheSc7XG59XG5leHBvcnRzLmlzVWludDhBcnJheSA9IGlzVWludDhBcnJheTtcblxuZnVuY3Rpb24gaXNVaW50OENsYW1wZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gd2hpY2hUeXBlZEFycmF5KHZhbHVlKSA9PT0gJ1VpbnQ4Q2xhbXBlZEFycmF5Jztcbn1cbmV4cG9ydHMuaXNVaW50OENsYW1wZWRBcnJheSA9IGlzVWludDhDbGFtcGVkQXJyYXk7XG5cbmZ1bmN0aW9uIGlzVWludDE2QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIHdoaWNoVHlwZWRBcnJheSh2YWx1ZSkgPT09ICdVaW50MTZBcnJheSc7XG59XG5leHBvcnRzLmlzVWludDE2QXJyYXkgPSBpc1VpbnQxNkFycmF5O1xuXG5mdW5jdGlvbiBpc1VpbnQzMkFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB3aGljaFR5cGVkQXJyYXkodmFsdWUpID09PSAnVWludDMyQXJyYXknO1xufVxuZXhwb3J0cy5pc1VpbnQzMkFycmF5ID0gaXNVaW50MzJBcnJheTtcblxuZnVuY3Rpb24gaXNJbnQ4QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIHdoaWNoVHlwZWRBcnJheSh2YWx1ZSkgPT09ICdJbnQ4QXJyYXknO1xufVxuZXhwb3J0cy5pc0ludDhBcnJheSA9IGlzSW50OEFycmF5O1xuXG5mdW5jdGlvbiBpc0ludDE2QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIHdoaWNoVHlwZWRBcnJheSh2YWx1ZSkgPT09ICdJbnQxNkFycmF5Jztcbn1cbmV4cG9ydHMuaXNJbnQxNkFycmF5ID0gaXNJbnQxNkFycmF5O1xuXG5mdW5jdGlvbiBpc0ludDMyQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIHdoaWNoVHlwZWRBcnJheSh2YWx1ZSkgPT09ICdJbnQzMkFycmF5Jztcbn1cbmV4cG9ydHMuaXNJbnQzMkFycmF5ID0gaXNJbnQzMkFycmF5O1xuXG5mdW5jdGlvbiBpc0Zsb2F0MzJBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gd2hpY2hUeXBlZEFycmF5KHZhbHVlKSA9PT0gJ0Zsb2F0MzJBcnJheSc7XG59XG5leHBvcnRzLmlzRmxvYXQzMkFycmF5ID0gaXNGbG9hdDMyQXJyYXk7XG5cbmZ1bmN0aW9uIGlzRmxvYXQ2NEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB3aGljaFR5cGVkQXJyYXkodmFsdWUpID09PSAnRmxvYXQ2NEFycmF5Jztcbn1cbmV4cG9ydHMuaXNGbG9hdDY0QXJyYXkgPSBpc0Zsb2F0NjRBcnJheTtcblxuZnVuY3Rpb24gaXNCaWdJbnQ2NEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB3aGljaFR5cGVkQXJyYXkodmFsdWUpID09PSAnQmlnSW50NjRBcnJheSc7XG59XG5leHBvcnRzLmlzQmlnSW50NjRBcnJheSA9IGlzQmlnSW50NjRBcnJheTtcblxuZnVuY3Rpb24gaXNCaWdVaW50NjRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gd2hpY2hUeXBlZEFycmF5KHZhbHVlKSA9PT0gJ0JpZ1VpbnQ2NEFycmF5Jztcbn1cbmV4cG9ydHMuaXNCaWdVaW50NjRBcnJheSA9IGlzQmlnVWludDY0QXJyYXk7XG5cbmZ1bmN0aW9uIGlzTWFwVG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIE9iamVjdFRvU3RyaW5nKHZhbHVlKSA9PT0gJ1tvYmplY3QgTWFwXSc7XG59XG5pc01hcFRvU3RyaW5nLndvcmtpbmcgPSAoXG4gIHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnICYmXG4gIGlzTWFwVG9TdHJpbmcobmV3IE1hcCgpKVxuKTtcblxuZnVuY3Rpb24gaXNNYXAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzTWFwVG9TdHJpbmcud29ya2luZ1xuICAgID8gaXNNYXBUb1N0cmluZyh2YWx1ZSlcbiAgICA6IHZhbHVlIGluc3RhbmNlb2YgTWFwO1xufVxuZXhwb3J0cy5pc01hcCA9IGlzTWFwO1xuXG5mdW5jdGlvbiBpc1NldFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3RUb1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IFNldF0nO1xufVxuaXNTZXRUb1N0cmluZy53b3JraW5nID0gKFxuICB0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJyAmJlxuICBpc1NldFRvU3RyaW5nKG5ldyBTZXQoKSlcbik7XG5mdW5jdGlvbiBpc1NldCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNTZXRUb1N0cmluZy53b3JraW5nXG4gICAgPyBpc1NldFRvU3RyaW5nKHZhbHVlKVxuICAgIDogdmFsdWUgaW5zdGFuY2VvZiBTZXQ7XG59XG5leHBvcnRzLmlzU2V0ID0gaXNTZXQ7XG5cbmZ1bmN0aW9uIGlzV2Vha01hcFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3RUb1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IFdlYWtNYXBdJztcbn1cbmlzV2Vha01hcFRvU3RyaW5nLndvcmtpbmcgPSAoXG4gIHR5cGVvZiBXZWFrTWFwICE9PSAndW5kZWZpbmVkJyAmJlxuICBpc1dlYWtNYXBUb1N0cmluZyhuZXcgV2Vha01hcCgpKVxuKTtcbmZ1bmN0aW9uIGlzV2Vha01hcCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzV2Vha01hcFRvU3RyaW5nLndvcmtpbmdcbiAgICA/IGlzV2Vha01hcFRvU3RyaW5nKHZhbHVlKVxuICAgIDogdmFsdWUgaW5zdGFuY2VvZiBXZWFrTWFwO1xufVxuZXhwb3J0cy5pc1dlYWtNYXAgPSBpc1dlYWtNYXA7XG5cbmZ1bmN0aW9uIGlzV2Vha1NldFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3RUb1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IFdlYWtTZXRdJztcbn1cbmlzV2Vha1NldFRvU3RyaW5nLndvcmtpbmcgPSAoXG4gIHR5cGVvZiBXZWFrU2V0ICE9PSAndW5kZWZpbmVkJyAmJlxuICBpc1dlYWtTZXRUb1N0cmluZyhuZXcgV2Vha1NldCgpKVxuKTtcbmZ1bmN0aW9uIGlzV2Vha1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNXZWFrU2V0VG9TdHJpbmcodmFsdWUpO1xufVxuZXhwb3J0cy5pc1dlYWtTZXQgPSBpc1dlYWtTZXQ7XG5cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gT2JqZWN0VG9TdHJpbmcodmFsdWUpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuaXNBcnJheUJ1ZmZlclRvU3RyaW5nLndvcmtpbmcgPSAoXG4gIHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgaXNBcnJheUJ1ZmZlclRvU3RyaW5nKG5ldyBBcnJheUJ1ZmZlcigpKVxuKTtcbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNBcnJheUJ1ZmZlclRvU3RyaW5nLndvcmtpbmdcbiAgICA/IGlzQXJyYXlCdWZmZXJUb1N0cmluZyh2YWx1ZSlcbiAgICA6IHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI7XG59XG5leHBvcnRzLmlzQXJyYXlCdWZmZXIgPSBpc0FycmF5QnVmZmVyO1xuXG5mdW5jdGlvbiBpc0RhdGFWaWV3VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIE9iamVjdFRvU3RyaW5nKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0YVZpZXddJztcbn1cbmlzRGF0YVZpZXdUb1N0cmluZy53b3JraW5nID0gKFxuICB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgaXNEYXRhVmlld1RvU3RyaW5nKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSksIDAsIDEpKVxuKTtcbmZ1bmN0aW9uIGlzRGF0YVZpZXcodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBEYXRhVmlldyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNEYXRhVmlld1RvU3RyaW5nLndvcmtpbmdcbiAgICA/IGlzRGF0YVZpZXdUb1N0cmluZyh2YWx1ZSlcbiAgICA6IHZhbHVlIGluc3RhbmNlb2YgRGF0YVZpZXc7XG59XG5leHBvcnRzLmlzRGF0YVZpZXcgPSBpc0RhdGFWaWV3O1xuXG4vLyBTdG9yZSBhIGNvcHkgb2YgU2hhcmVkQXJyYXlCdWZmZXIgaW4gY2FzZSBpdCdzIGRlbGV0ZWQgZWxzZXdoZXJlXG52YXIgU2hhcmVkQXJyYXlCdWZmZXJDb3B5ID0gdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyA/IFNoYXJlZEFycmF5QnVmZmVyIDogdW5kZWZpbmVkO1xuZnVuY3Rpb24gaXNTaGFyZWRBcnJheUJ1ZmZlclRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3RUb1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSc7XG59XG5mdW5jdGlvbiBpc1NoYXJlZEFycmF5QnVmZmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXJDb3B5ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaXNTaGFyZWRBcnJheUJ1ZmZlclRvU3RyaW5nLndvcmtpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgaXNTaGFyZWRBcnJheUJ1ZmZlclRvU3RyaW5nLndvcmtpbmcgPSBpc1NoYXJlZEFycmF5QnVmZmVyVG9TdHJpbmcobmV3IFNoYXJlZEFycmF5QnVmZmVyQ29weSgpKTtcbiAgfVxuXG4gIHJldHVybiBpc1NoYXJlZEFycmF5QnVmZmVyVG9TdHJpbmcud29ya2luZ1xuICAgID8gaXNTaGFyZWRBcnJheUJ1ZmZlclRvU3RyaW5nKHZhbHVlKVxuICAgIDogdmFsdWUgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlckNvcHk7XG59XG5leHBvcnRzLmlzU2hhcmVkQXJyYXlCdWZmZXIgPSBpc1NoYXJlZEFycmF5QnVmZmVyO1xuXG5mdW5jdGlvbiBpc0FzeW5jRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIE9iamVjdFRvU3RyaW5nKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nO1xufVxuZXhwb3J0cy5pc0FzeW5jRnVuY3Rpb24gPSBpc0FzeW5jRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzTWFwSXRlcmF0b3IodmFsdWUpIHtcbiAgcmV0dXJuIE9iamVjdFRvU3RyaW5nKHZhbHVlKSA9PT0gJ1tvYmplY3QgTWFwIEl0ZXJhdG9yXSc7XG59XG5leHBvcnRzLmlzTWFwSXRlcmF0b3IgPSBpc01hcEl0ZXJhdG9yO1xuXG5mdW5jdGlvbiBpc1NldEl0ZXJhdG9yKHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3RUb1N0cmluZyh2YWx1ZSkgPT09ICdbb2JqZWN0IFNldCBJdGVyYXRvcl0nO1xufVxuZXhwb3J0cy5pc1NldEl0ZXJhdG9yID0gaXNTZXRJdGVyYXRvcjtcblxuZnVuY3Rpb24gaXNHZW5lcmF0b3JPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIE9iamVjdFRvU3RyaW5nKHZhbHVlKSA9PT0gJ1tvYmplY3QgR2VuZXJhdG9yXSc7XG59XG5leHBvcnRzLmlzR2VuZXJhdG9yT2JqZWN0ID0gaXNHZW5lcmF0b3JPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzV2ViQXNzZW1ibHlDb21waWxlZE1vZHVsZSh2YWx1ZSkge1xuICByZXR1cm4gT2JqZWN0VG9TdHJpbmcodmFsdWUpID09PSAnW29iamVjdCBXZWJBc3NlbWJseS5Nb2R1bGVdJztcbn1cbmV4cG9ydHMuaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlID0gaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlO1xuXG5mdW5jdGlvbiBpc051bWJlck9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY2hlY2tCb3hlZFByaW1pdGl2ZSh2YWx1ZSwgbnVtYmVyVmFsdWUpO1xufVxuZXhwb3J0cy5pc051bWJlck9iamVjdCA9IGlzTnVtYmVyT2JqZWN0O1xuXG5mdW5jdGlvbiBpc1N0cmluZ09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY2hlY2tCb3hlZFByaW1pdGl2ZSh2YWx1ZSwgc3RyaW5nVmFsdWUpO1xufVxuZXhwb3J0cy5pc1N0cmluZ09iamVjdCA9IGlzU3RyaW5nT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGNoZWNrQm94ZWRQcmltaXRpdmUodmFsdWUsIGJvb2xlYW5WYWx1ZSk7XG59XG5leHBvcnRzLmlzQm9vbGVhbk9iamVjdCA9IGlzQm9vbGVhbk9iamVjdDtcblxuZnVuY3Rpb24gaXNCaWdJbnRPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIEJpZ0ludFN1cHBvcnRlZCAmJiBjaGVja0JveGVkUHJpbWl0aXZlKHZhbHVlLCBiaWdJbnRWYWx1ZSk7XG59XG5leHBvcnRzLmlzQmlnSW50T2JqZWN0ID0gaXNCaWdJbnRPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBTeW1ib2xTdXBwb3J0ZWQgJiYgY2hlY2tCb3hlZFByaW1pdGl2ZSh2YWx1ZSwgc3ltYm9sVmFsdWUpO1xufVxuZXhwb3J0cy5pc1N5bWJvbE9iamVjdCA9IGlzU3ltYm9sT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0JveGVkUHJpbWl0aXZlKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgaXNOdW1iZXJPYmplY3QodmFsdWUpIHx8XG4gICAgaXNTdHJpbmdPYmplY3QodmFsdWUpIHx8XG4gICAgaXNCb29sZWFuT2JqZWN0KHZhbHVlKSB8fFxuICAgIGlzQmlnSW50T2JqZWN0KHZhbHVlKSB8fFxuICAgIGlzU3ltYm9sT2JqZWN0KHZhbHVlKVxuICApO1xufVxuZXhwb3J0cy5pc0JveGVkUHJpbWl0aXZlID0gaXNCb3hlZFByaW1pdGl2ZTtcblxuZnVuY3Rpb24gaXNBbnlBcnJheUJ1ZmZlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIChcbiAgICBpc0FycmF5QnVmZmVyKHZhbHVlKSB8fFxuICAgIGlzU2hhcmVkQXJyYXlCdWZmZXIodmFsdWUpXG4gICk7XG59XG5leHBvcnRzLmlzQW55QXJyYXlCdWZmZXIgPSBpc0FueUFycmF5QnVmZmVyO1xuXG5bJ2lzUHJveHknLCAnaXNFeHRlcm5hbCcsICdpc01vZHVsZU5hbWVzcGFjZU9iamVjdCddLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBtZXRob2QsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWV0aG9kICsgJyBpcyBub3Qgc3VwcG9ydGVkIGluIHVzZXJsYW5kJyk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5NTM5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIHByb2Nlc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxNTUpO1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgfHxcbiAgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgdmFyIGRlc2NyaXB0b3JzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXNjcmlwdG9yc1trZXlzW2ldXSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXlzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlc2NyaXB0b3JzO1xuICB9O1xuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24oZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhciBpID0gMTtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG4gICAgc3dpdGNoICh4KSB7XG4gICAgICBjYXNlICclcyc6IHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudGhyb3dEZXByZWNhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy50cmFjZURlcHJlY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59O1xuXG5cbnZhciBkZWJ1Z3MgPSB7fTtcbnZhciBkZWJ1Z0VudlJlZ2V4ID0gL14kLztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfREVCVUcpIHtcbiAgdmFyIGRlYnVnRW52ID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRztcbiAgZGVidWdFbnYgPSBkZWJ1Z0Vudi5yZXBsYWNlKC9bfFxcXFx7fSgpW1xcXV4kKz8uXS9nLCAnXFxcXCQmJylcbiAgICAucmVwbGFjZSgvXFwqL2csICcuKicpXG4gICAgLnJlcGxhY2UoLywvZywgJyR8XicpXG4gICAgLnRvVXBwZXJDYXNlKCk7XG4gIGRlYnVnRW52UmVnZXggPSBuZXcgUmVnRXhwKCdeJyArIGRlYnVnRW52ICsgJyQnLCAnaScpO1xufVxuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChkZWJ1Z0VudlJlZ2V4LnRlc3Qoc2V0KSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5leHBvcnRzLnR5cGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OTU1KTtcblxuZnVuY3Rpb24gaXNBcnJheShhcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcbmV4cG9ydHMudHlwZXMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBpc09iamVjdChkKSAmJiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5leHBvcnRzLnR5cGVzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuZXhwb3J0cy50eXBlcy5pc05hdGl2ZUVycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oMzg0KTtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuXG5cbmZ1bmN0aW9uIHBhZChuKSB7XG4gIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuLnRvU3RyaW5nKDEwKSA6IG4udG9TdHJpbmcoMTApO1xufVxuXG5cbnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJyxcbiAgICAgICAgICAgICAgJ09jdCcsICdOb3YnLCAnRGVjJ107XG5cbi8vIDI2IEZlYiAxNjoxOTozNFxuZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKCk7XG4gIHZhciB0aW1lID0gW3BhZChkLmdldEhvdXJzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRNaW51dGVzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRTZWNvbmRzKCkpXS5qb2luKCc6Jyk7XG4gIHJldHVybiBbZC5nZXREYXRlKCksIG1vbnRoc1tkLmdldE1vbnRoKCldLCB0aW1lXS5qb2luKCcgJyk7XG59XG5cblxuLy8gbG9nIGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgdG8gY29uc29sZS5sb2cgdGhhdCBwcmVwZW5kcyBhIHRpbWVzdGFtcFxuZXhwb3J0cy5sb2cgPSBmdW5jdGlvbigpIHtcbiAgY29uc29sZS5sb2coJyVzIC0gJXMnLCB0aW1lc3RhbXAoKSwgZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKSk7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFRoZSBGdW5jdGlvbi5wcm90b3R5cGUuaW5oZXJpdHMgZnJvbSBsYW5nLmpzIHJld3JpdHRlbiBhcyBhIHN0YW5kYWxvbmVcbiAqIGZ1bmN0aW9uIChub3Qgb24gRnVuY3Rpb24ucHJvdG90eXBlKS4gTk9URTogSWYgdGhpcyBmaWxlIGlzIHRvIGJlIGxvYWRlZFxuICogZHVyaW5nIGJvb3RzdHJhcHBpbmcgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXdyaXR0ZW4gdXNpbmcgc29tZSBuYXRpdmVcbiAqIGZ1bmN0aW9ucyBhcyBwcm90b3R5cGUgc2V0dXAgdXNpbmcgbm9ybWFsIEphdmFTY3JpcHQgZG9lcyBub3Qgd29yayBhc1xuICogZXhwZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcgKHNlZSBtaXJyb3IuanMgaW4gcjExNDkwMykuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBpbmhlcml0IHRoZVxuICogICAgIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5leHBvcnRzLmluaGVyaXRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NzE3KTtcblxuZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luLCBhZGQpIHtcbiAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYWRkIGlzbid0IGFuIG9iamVjdFxuICBpZiAoIWFkZCB8fCAhaXNPYmplY3QoYWRkKSkgcmV0dXJuIG9yaWdpbjtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFkZCk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBvcmlnaW5ba2V5c1tpXV0gPSBhZGRba2V5c1tpXV07XG4gIH1cbiAgcmV0dXJuIG9yaWdpbjtcbn07XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbnZhciBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyA/IFN5bWJvbCgndXRpbC5wcm9taXNpZnkuY3VzdG9tJykgOiB1bmRlZmluZWQ7XG5cbmV4cG9ydHMucHJvbWlzaWZ5ID0gZnVuY3Rpb24gcHJvbWlzaWZ5KG9yaWdpbmFsKSB7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWwgIT09ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3JpZ2luYWxcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtcblxuICBpZiAoa0N1c3RvbVByb21pc2lmaWVkU3ltYm9sICYmIG9yaWdpbmFsW2tDdXN0b21Qcm9taXNpZmllZFN5bWJvbF0pIHtcbiAgICB2YXIgZm4gPSBvcmlnaW5hbFtrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2xdO1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInV0aWwucHJvbWlzaWZ5LmN1c3RvbVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCwge1xuICAgICAgdmFsdWU6IGZuLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBmdW5jdGlvbiBmbigpIHtcbiAgICB2YXIgcHJvbWlzZVJlc29sdmUsIHByb21pc2VSZWplY3Q7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBwcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBwcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoZXJyLCB2YWx1ZSkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBwcm9taXNlUmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBwcm9taXNlUmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZm4sIE9iamVjdC5nZXRQcm90b3R5cGVPZihvcmlnaW5hbCkpO1xuXG4gIGlmIChrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2wpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwga0N1c3RvbVByb21pc2lmaWVkU3ltYm9sLCB7XG4gICAgdmFsdWU6IGZuLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhcbiAgICBmbixcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9yaWdpbmFsKVxuICApO1xufVxuXG5leHBvcnRzLnByb21pc2lmeS5jdXN0b20gPSBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2xcblxuZnVuY3Rpb24gY2FsbGJhY2tpZnlPblJlamVjdGVkKHJlYXNvbiwgY2IpIHtcbiAgLy8gYCFyZWFzb25gIGd1YXJkIGluc3BpcmVkIGJ5IGJsdWViaXJkIChSZWY6IGh0dHBzOi8vZ29vLmdsL3Q1SVM2TSkuXG4gIC8vIEJlY2F1c2UgYG51bGxgIGlzIGEgc3BlY2lhbCBlcnJvciB2YWx1ZSBpbiBjYWxsYmFja3Mgd2hpY2ggbWVhbnMgXCJubyBlcnJvclxuICAvLyBvY2N1cnJlZFwiLCB3ZSBlcnJvci13cmFwIHNvIHRoZSBjYWxsYmFjayBjb25zdW1lciBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlblxuICAvLyBcInRoZSBwcm9taXNlIHJlamVjdGVkIHdpdGggbnVsbFwiIG9yIFwidGhlIHByb21pc2UgZnVsZmlsbGVkIHdpdGggdW5kZWZpbmVkXCIuXG4gIGlmICghcmVhc29uKSB7XG4gICAgdmFyIG5ld1JlYXNvbiA9IG5ldyBFcnJvcignUHJvbWlzZSB3YXMgcmVqZWN0ZWQgd2l0aCBhIGZhbHN5IHZhbHVlJyk7XG4gICAgbmV3UmVhc29uLnJlYXNvbiA9IHJlYXNvbjtcbiAgICByZWFzb24gPSBuZXdSZWFzb247XG4gIH1cbiAgcmV0dXJuIGNiKHJlYXNvbik7XG59XG5cbmZ1bmN0aW9uIGNhbGxiYWNraWZ5KG9yaWdpbmFsKSB7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcmlnaW5hbFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO1xuICB9XG5cbiAgLy8gV2UgRE8gTk9UIHJldHVybiB0aGUgcHJvbWlzZSBhcyBpdCBnaXZlcyB0aGUgdXNlciBhIGZhbHNlIHNlbnNlIHRoYXRcbiAgLy8gdGhlIHByb21pc2UgaXMgYWN0dWFsbHkgc29tZWhvdyByZWxhdGVkIHRvIHRoZSBjYWxsYmFjaydzIGV4ZWN1dGlvblxuICAvLyBhbmQgdGhhdCB0aGUgY2FsbGJhY2sgdGhyb3dpbmcgd2lsbCByZWplY3QgdGhlIHByb21pc2UuXG4gIGZ1bmN0aW9uIGNhbGxiYWNraWZpZWQoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgdmFyIG1heWJlQ2IgPSBhcmdzLnBvcCgpO1xuICAgIGlmICh0eXBlb2YgbWF5YmVDYiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBtYXliZUNiLmFwcGx5KHNlbGYsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICAvLyBJbiB0cnVlIG5vZGUgc3R5bGUgd2UgcHJvY2VzcyB0aGUgY2FsbGJhY2sgb24gYG5leHRUaWNrYCB3aXRoIGFsbCB0aGVcbiAgICAvLyBpbXBsaWNhdGlvbnMgKHN0YWNrLCBgdW5jYXVnaHRFeGNlcHRpb25gLCBgYXN5bmNfaG9va3NgKVxuICAgIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICAudGhlbihmdW5jdGlvbihyZXQpIHsgcHJvY2Vzcy5uZXh0VGljayhjYi5iaW5kKG51bGwsIG51bGwsIHJldCkpIH0sXG4gICAgICAgICAgICBmdW5jdGlvbihyZWopIHsgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFja2lmeU9uUmVqZWN0ZWQuYmluZChudWxsLCByZWosIGNiKSkgfSk7XG4gIH1cblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoY2FsbGJhY2tpZmllZCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG9yaWdpbmFsKSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNhbGxiYWNraWZpZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob3JpZ2luYWwpKTtcbiAgcmV0dXJuIGNhbGxiYWNraWZpZWQ7XG59XG5leHBvcnRzLmNhbGxiYWNraWZ5ID0gY2FsbGJhY2tpZnk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDY0MzA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGZvckVhY2ggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwMjkpO1xudmFyIGF2YWlsYWJsZVR5cGVkQXJyYXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMDgzKTtcbnZhciBjYWxsQm91bmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MjQpO1xuXG52YXIgJHRvU3RyaW5nID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nJyk7XG52YXIgaGFzVG9TdHJpbmdUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0MTApKCk7XG5cbnZhciBnID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICd1bmRlZmluZWQnID8gX193ZWJwYWNrX3JlcXVpcmVfXy5nIDogZ2xvYmFsVGhpcztcbnZhciB0eXBlZEFycmF5cyA9IGF2YWlsYWJsZVR5cGVkQXJyYXlzKCk7XG5cbnZhciAkc2xpY2UgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuc2xpY2UnKTtcbnZhciB0b1N0clRhZ3MgPSB7fTtcbnZhciBnT1BEID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODIpO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mOyAvLyByZXF1aXJlKCdnZXRwcm90b3R5cGVvZicpO1xuaWYgKGhhc1RvU3RyaW5nVGFnICYmIGdPUEQgJiYgZ2V0UHJvdG90eXBlT2YpIHtcblx0Zm9yRWFjaCh0eXBlZEFycmF5cywgZnVuY3Rpb24gKHR5cGVkQXJyYXkpIHtcblx0XHRpZiAodHlwZW9mIGdbdHlwZWRBcnJheV0gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHZhciBhcnIgPSBuZXcgZ1t0eXBlZEFycmF5XSgpO1xuXHRcdFx0aWYgKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBhcnIpIHtcblx0XHRcdFx0dmFyIHByb3RvID0gZ2V0UHJvdG90eXBlT2YoYXJyKTtcblx0XHRcdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHByb3RvLCBTeW1ib2wudG9TdHJpbmdUYWcpO1xuXHRcdFx0XHRpZiAoIWRlc2NyaXB0b3IpIHtcblx0XHRcdFx0XHR2YXIgc3VwZXJQcm90byA9IGdldFByb3RvdHlwZU9mKHByb3RvKTtcblx0XHRcdFx0XHRkZXNjcmlwdG9yID0gZ09QRChzdXBlclByb3RvLCBTeW1ib2wudG9TdHJpbmdUYWcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRvU3RyVGFnc1t0eXBlZEFycmF5XSA9IGRlc2NyaXB0b3IuZ2V0O1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbnZhciB0cnlUeXBlZEFycmF5cyA9IGZ1bmN0aW9uIHRyeUFsbFR5cGVkQXJyYXlzKHZhbHVlKSB7XG5cdHZhciBmb3VuZE5hbWUgPSBmYWxzZTtcblx0Zm9yRWFjaCh0b1N0clRhZ3MsIGZ1bmN0aW9uIChnZXR0ZXIsIHR5cGVkQXJyYXkpIHtcblx0XHRpZiAoIWZvdW5kTmFtZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG5hbWUgPSBnZXR0ZXIuY2FsbCh2YWx1ZSk7XG5cdFx0XHRcdGlmIChuYW1lID09PSB0eXBlZEFycmF5KSB7XG5cdFx0XHRcdFx0Zm91bmROYW1lID0gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge31cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZm91bmROYW1lO1xufTtcblxudmFyIGlzVHlwZWRBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oNTY5Mik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2hpY2hUeXBlZEFycmF5KHZhbHVlKSB7XG5cdGlmICghaXNUeXBlZEFycmF5KHZhbHVlKSkgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKCFoYXNUb1N0cmluZ1RhZyB8fCAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSkpIHsgcmV0dXJuICRzbGljZSgkdG9TdHJpbmcodmFsdWUpLCA4LCAtMSk7IH1cblx0cmV0dXJuIHRyeVR5cGVkQXJyYXlzKHZhbHVlKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDY1MTM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gVGhpcyBmaWxlIGlzIGp1c3QgYWRkZWQgZm9yIGNvbnZlbmllbmNlIHNvIHRoaXMgcmVwb3NpdG9yeSBjYW4gYmVcbi8vIGRpcmVjdGx5IGNoZWNrZWQgb3V0IGludG8gYSBwcm9qZWN0J3MgZGVwcyBmb2xkZXJcbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MDExKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTAxMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4oZnVuY3Rpb24gKCkge1xuICB2YXIgc2F4O1xuXG4gIGlmIChcbiAgICAgdHJ1ZSAmJlxuICAgIG1vZHVsZS5leHBvcnRzICYmXG4gICAgIV9fd2VicGFja19yZXF1aXJlX18uZy54bWxkb2NBc3N1bWVCcm93c2VyXG4gICkge1xuICAgIC8vIFdlJ3JlIGJlaW5nIHVzZWQgaW4gYSBOb2RlLWxpa2UgZW52aXJvbm1lbnRcbiAgICBzYXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwOTkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGFzc3VtZSBpdCdzIGF0dGFjaGVkIHRvIHRoZSBXaW5kb3cgb2JqZWN0IGluIGEgYnJvd3NlclxuICAgIHNheCA9IHRoaXMuc2F4O1xuXG4gICAgaWYgKCFzYXgpIHtcbiAgICAgIC8vIG5vIHNheCBmb3IgeW91IVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkV4cGVjdGVkIHNheCB0byBiZSBkZWZpbmVkLiBNYWtlIHN1cmUgeW91J3JlIGluY2x1ZGluZyBzYXguanMgYmVmb3JlIHRoaXMgZmlsZS5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogWG1sRWxlbWVudCBpcyBvdXIgYmFzaWMgYnVpbGRpbmcgYmxvY2suIEV2ZXJ5dGhpbmcgaXMgYW4gWG1sRWxlbWVudDsgZXZlbiBYbWxEb2N1bWVudFxuICAgKiBiZWhhdmVzIGxpa2UgYW4gWG1sRWxlbWVudCBieSBpbmhlcml0aW5nIGl0cyBhdHRyaWJ1dGVzIGFuZCBmdW5jdGlvbnMuXG4gICAqL1xuXG4gIGZ1bmN0aW9uIFhtbEVsZW1lbnQodGFnKSB7XG4gICAgLy8gQ2FwdHVyZSB0aGUgcGFyc2VyIG9iamVjdCBvZmYgb2YgdGhlIFhtbERvY3VtZW50IGRlbGVnYXRlXG4gICAgdmFyIHBhcnNlciA9IGRlbGVnYXRlc1tkZWxlZ2F0ZXMubGVuZ3RoIC0gMV0ucGFyc2VyO1xuXG4gICAgdGhpcy5uYW1lID0gdGFnLm5hbWU7XG4gICAgdGhpcy5hdHRyID0gdGFnLmF0dHJpYnV0ZXM7XG4gICAgdGhpcy52YWwgPSBcIlwiO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLmZpcnN0Q2hpbGQgPSBudWxsO1xuICAgIHRoaXMubGFzdENoaWxkID0gbnVsbDtcblxuICAgIC8vIEFzc2lnbiBwYXJzZSBpbmZvcm1hdGlvblxuICAgIHRoaXMubGluZSA9IHBhcnNlci5saW5lO1xuICAgIHRoaXMuY29sdW1uID0gcGFyc2VyLmNvbHVtbjtcbiAgICB0aGlzLnBvc2l0aW9uID0gcGFyc2VyLnBvc2l0aW9uO1xuICAgIHRoaXMuc3RhcnRUYWdQb3NpdGlvbiA9IHBhcnNlci5zdGFydFRhZ1Bvc2l0aW9uO1xuICB9XG5cbiAgLy8gUHJpdmF0ZSBtZXRob2RzXG5cbiAgWG1sRWxlbWVudC5wcm90b3R5cGUuX2FkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gYWRkIHRvIG91ciBjaGlsZHJlbiBhcnJheVxuICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAvLyB1cGRhdGUgZmlyc3QvbGFzdCBwb2ludGVyc1xuICAgIGlmICghdGhpcy5maXJzdENoaWxkKSB0aGlzLmZpcnN0Q2hpbGQgPSBjaGlsZDtcbiAgICB0aGlzLmxhc3RDaGlsZCA9IGNoaWxkO1xuICB9O1xuXG4gIC8vIFNheFBhcnNlciBoYW5kbGVyc1xuXG4gIFhtbEVsZW1lbnQucHJvdG90eXBlLl9vcGVudGFnID0gZnVuY3Rpb24gKHRhZykge1xuICAgIHZhciBjaGlsZCA9IG5ldyBYbWxFbGVtZW50KHRhZyk7XG5cbiAgICB0aGlzLl9hZGRDaGlsZChjaGlsZCk7XG5cbiAgICBkZWxlZ2F0ZXMudW5zaGlmdChjaGlsZCk7XG4gIH07XG5cbiAgWG1sRWxlbWVudC5wcm90b3R5cGUuX2Nsb3NldGFnID0gZnVuY3Rpb24gKCkge1xuICAgIGRlbGVnYXRlcy5zaGlmdCgpO1xuICB9O1xuXG4gIFhtbEVsZW1lbnQucHJvdG90eXBlLl90ZXh0ID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuY2hpbGRyZW4gPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblxuICAgIHRoaXMudmFsICs9IHRleHQ7XG5cbiAgICB0aGlzLl9hZGRDaGlsZChuZXcgWG1sVGV4dE5vZGUodGV4dCkpO1xuICB9O1xuXG4gIFhtbEVsZW1lbnQucHJvdG90eXBlLl9jZGF0YSA9IGZ1bmN0aW9uIChjZGF0YSkge1xuICAgIHRoaXMudmFsICs9IGNkYXRhO1xuXG4gICAgdGhpcy5fYWRkQ2hpbGQobmV3IFhtbENEYXRhTm9kZShjZGF0YSkpO1xuICB9O1xuXG4gIFhtbEVsZW1lbnQucHJvdG90eXBlLl9jb21tZW50ID0gZnVuY3Rpb24gKGNvbW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuY2hpbGRyZW4gPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblxuICAgIHRoaXMuX2FkZENoaWxkKG5ldyBYbWxDb21tZW50Tm9kZShjb21tZW50KSk7XG4gIH07XG5cbiAgWG1sRWxlbWVudC5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgIHRocm93IGVycjtcbiAgfTtcblxuICAvLyBVc2VmdWwgZnVuY3Rpb25zXG5cbiAgWG1sRWxlbWVudC5wcm90b3R5cGUuZWFjaENoaWxkID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKylcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLnR5cGUgPT09IFwiZWxlbWVudFwiKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCB0aGlzLmNoaWxkcmVuW2ldLCBpLCB0aGlzLmNoaWxkcmVuKSA9PT0gZmFsc2VcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybjtcbiAgfTtcblxuICBYbWxFbGVtZW50LnByb3RvdHlwZS5jaGlsZE5hbWVkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcblxuICBYbWxFbGVtZW50LnByb3RvdHlwZS5jaGlsZHJlbk5hbWVkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgbWF0Y2hlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKylcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpIG1hdGNoZXMucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9O1xuXG4gIFhtbEVsZW1lbnQucHJvdG90eXBlLmNoaWxkV2l0aEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkLnR5cGUgPT09IFwiZWxlbWVudFwiICYmXG4gICAgICAgICgodmFsdWUgJiYgY2hpbGQuYXR0cltuYW1lXSA9PT0gdmFsdWUpIHx8ICghdmFsdWUgJiYgY2hpbGQuYXR0cltuYW1lXSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcbiAgXG4gIFhtbEVsZW1lbnQucHJvdG90eXBlLmRlc2NlbmRhbnRzTmFtZWQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICB2YXIgbWF0Y2hlcyA9IFtdO1xuXG4gICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgIGlmIChjaGlsZC50eXBlID09PSBcImVsZW1lbnRcIikge1xuICAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIG1hdGNoZXMucHVzaChjaGlsZCk7XG4gICAgICAgICBtYXRjaGVzID0gbWF0Y2hlcy5jb25jYXQoY2hpbGQuZGVzY2VuZGFudHNOYW1lZChuYW1lKSk7XG4gICAgICAgfVxuICAgICB9XG5cbiAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICB9O1xuXG4gIFhtbEVsZW1lbnQucHJvdG90eXBlLmRlc2NlbmRhbnRXaXRoUGF0aCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgdmFyIGRlc2NlbmRhbnQgPSB0aGlzO1xuICAgIHZhciBjb21wb25lbnRzID0gcGF0aC5zcGxpdChcIi5cIik7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNvbXBvbmVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKVxuICAgICAgaWYgKGRlc2NlbmRhbnQgJiYgZGVzY2VuZGFudC50eXBlID09PSBcImVsZW1lbnRcIilcbiAgICAgICAgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQuY2hpbGROYW1lZChjb21wb25lbnRzW2ldKTtcbiAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBkZXNjZW5kYW50O1xuICB9O1xuXG4gIFhtbEVsZW1lbnQucHJvdG90eXBlLnZhbHVlV2l0aFBhdGggPSBmdW5jdGlvbiAocGF0aCkge1xuICAgIHZhciBjb21wb25lbnRzID0gcGF0aC5zcGxpdChcIkBcIik7XG4gICAgdmFyIGRlc2NlbmRhbnQgPSB0aGlzLmRlc2NlbmRhbnRXaXRoUGF0aChjb21wb25lbnRzWzBdKTtcbiAgICBpZiAoZGVzY2VuZGFudClcbiAgICAgIHJldHVybiBjb21wb25lbnRzLmxlbmd0aCA+IDFcbiAgICAgICAgPyBkZXNjZW5kYW50LmF0dHJbY29tcG9uZW50c1sxXV1cbiAgICAgICAgOiBkZXNjZW5kYW50LnZhbDtcbiAgICBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLy8gU3RyaW5nIGZvcm1hdHRpbmcgKGZvciBkZWJ1Z2dpbmcpXG5cbiAgWG1sRWxlbWVudC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLnRvU3RyaW5nV2l0aEluZGVudChcIlwiLCBvcHRpb25zKTtcbiAgfTtcblxuICBYbWxFbGVtZW50LnByb3RvdHlwZS50b1N0cmluZ1dpdGhJbmRlbnQgPSBmdW5jdGlvbiAoaW5kZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIHMgPSBpbmRlbnQgKyBcIjxcIiArIHRoaXMubmFtZTtcbiAgICB2YXIgbGluZWJyZWFrID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbXByZXNzZWQgPyBcIlwiIDogXCJcXG5cIjtcbiAgICB2YXIgcHJlc2VydmVXaGl0ZXNwYWNlID0gb3B0aW9ucyAmJiBvcHRpb25zLnByZXNlcnZlV2hpdGVzcGFjZTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5hdHRyKVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHIsIG5hbWUpKVxuICAgICAgICBzICs9IFwiIFwiICsgbmFtZSArICc9XCInICsgZXNjYXBlWE1MKHRoaXMuYXR0cltuYW1lXSkgKyAnXCInO1xuXG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIHRoaXMuY2hpbGRyZW5bMF0udHlwZSAhPT0gXCJlbGVtZW50XCIpIHtcbiAgICAgIHMgKz0gXCI+XCIgKyB0aGlzLmNoaWxkcmVuWzBdLnRvU3RyaW5nKG9wdGlvbnMpICsgXCI8L1wiICsgdGhpcy5uYW1lICsgXCI+XCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcyArPSBcIj5cIiArIGxpbmVicmVhaztcblxuICAgICAgdmFyIGNoaWxkSW5kZW50ID0gaW5kZW50ICsgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb21wcmVzc2VkID8gXCJcIiA6IFwiICBcIik7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgcyArPVxuICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0udG9TdHJpbmdXaXRoSW5kZW50KGNoaWxkSW5kZW50LCBvcHRpb25zKSArIGxpbmVicmVhaztcbiAgICAgIH1cblxuICAgICAgcyArPSBpbmRlbnQgKyBcIjwvXCIgKyB0aGlzLm5hbWUgKyBcIj5cIjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5odG1sKSB7XG4gICAgICB2YXIgd2hpdGVMaXN0ID0gW1xuICAgICAgICBcImFyZWFcIixcbiAgICAgICAgXCJiYXNlXCIsXG4gICAgICAgIFwiYnJcIixcbiAgICAgICAgXCJjb2xcIixcbiAgICAgICAgXCJlbWJlZFwiLFxuICAgICAgICBcImZyYW1lXCIsXG4gICAgICAgIFwiaHJcIixcbiAgICAgICAgXCJpbWdcIixcbiAgICAgICAgXCJpbnB1dFwiLFxuICAgICAgICBcImtleWdlblwiLFxuICAgICAgICBcImxpbmtcIixcbiAgICAgICAgXCJtZW51aXRlbVwiLFxuICAgICAgICBcIm1ldGFcIixcbiAgICAgICAgXCJwYXJhbVwiLFxuICAgICAgICBcInNvdXJjZVwiLFxuICAgICAgICBcInRyYWNrXCIsXG4gICAgICAgIFwid2JyXCIsXG4gICAgICBdO1xuICAgICAgaWYgKHdoaXRlTGlzdC5pbmRleE9mKHRoaXMubmFtZSkgIT09IC0xKSBzICs9IFwiLz5cIjtcbiAgICAgIGVsc2UgcyArPSBcIj48L1wiICsgdGhpcy5uYW1lICsgXCI+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgKz0gXCIvPlwiO1xuICAgIH1cblxuICAgIHJldHVybiBzO1xuICB9O1xuXG4gIC8vIEFsdGVybmF0aXZlIFhNTCBub2Rlc1xuXG4gIGZ1bmN0aW9uIFhtbFRleHROb2RlKHRleHQpIHtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICB9XG5cbiAgWG1sVGV4dE5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZm9ybWF0VGV4dChlc2NhcGVYTUwodGhpcy50ZXh0KSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgWG1sVGV4dE5vZGUucHJvdG90eXBlLnRvU3RyaW5nV2l0aEluZGVudCA9IGZ1bmN0aW9uIChpbmRlbnQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5kZW50ICsgdGhpcy50b1N0cmluZyhvcHRpb25zKTtcbiAgfTtcblxuICBmdW5jdGlvbiBYbWxDRGF0YU5vZGUoY2RhdGEpIHtcbiAgICB0aGlzLmNkYXRhID0gY2RhdGE7XG4gIH1cblxuICBYbWxDRGF0YU5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gXCI8IVtDREFUQVtcIiArIGZvcm1hdFRleHQodGhpcy5jZGF0YSwgb3B0aW9ucykgKyBcIl1dPlwiO1xuICB9O1xuXG4gIFhtbENEYXRhTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoSW5kZW50ID0gZnVuY3Rpb24gKGluZGVudCwgb3B0aW9ucykge1xuICAgIHJldHVybiBpbmRlbnQgKyB0aGlzLnRvU3RyaW5nKG9wdGlvbnMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIFhtbENvbW1lbnROb2RlKGNvbW1lbnQpIHtcbiAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50O1xuICB9XG5cbiAgWG1sQ29tbWVudE5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gXCI8IS0tXCIgKyBmb3JtYXRUZXh0KGVzY2FwZVhNTCh0aGlzLmNvbW1lbnQpLCBvcHRpb25zKSArIFwiLS0+XCI7XG4gIH07XG5cbiAgWG1sQ29tbWVudE5vZGUucHJvdG90eXBlLnRvU3RyaW5nV2l0aEluZGVudCA9IGZ1bmN0aW9uIChpbmRlbnQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5kZW50ICsgdGhpcy50b1N0cmluZyhvcHRpb25zKTtcbiAgfTtcblxuICAvLyBOb2RlIHR5cGUgdGFnXG5cbiAgWG1sRWxlbWVudC5wcm90b3R5cGUudHlwZSA9IFwiZWxlbWVudFwiO1xuICBYbWxUZXh0Tm9kZS5wcm90b3R5cGUudHlwZSA9IFwidGV4dFwiO1xuICBYbWxDRGF0YU5vZGUucHJvdG90eXBlLnR5cGUgPSBcImNkYXRhXCI7XG4gIFhtbENvbW1lbnROb2RlLnByb3RvdHlwZS50eXBlID0gXCJjb21tZW50XCI7XG5cbiAgLypcbiAgICogWG1sRG9jdW1lbnQgaXMgdGhlIGNsYXNzIHdlIGV4cG9zZSB0byB0aGUgdXNlcjsgaXQgdXNlcyB0aGUgc2F4IHBhcnNlciB0byBjcmVhdGUgYSBoaWVyYXJjaHlcbiAgICogb2YgWG1sRWxlbWVudHMuXG4gICAqL1xuXG4gIGZ1bmN0aW9uIFhtbERvY3VtZW50KHhtbCkge1xuICAgIHhtbCAmJiAoeG1sID0geG1sLnRvU3RyaW5nKCkudHJpbSgpKTtcblxuICAgIGlmICgheG1sKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBYTUwgdG8gcGFyc2UhXCIpO1xuXG4gICAgLy8gU3RvcmVzIGRvY3R5cGUgKGlmIGRlZmluZWQpXG4gICAgdGhpcy5kb2N0eXBlID0gXCJcIjtcblxuICAgIC8vIEV4cG9zZSB0aGUgcGFyc2VyIHRvIHRoZSBvdGhlciBkZWxlZ2F0ZXMgd2hpbGUgdGhlIHBhcnNlciBpcyBydW5uaW5nXG4gICAgdGhpcy5wYXJzZXIgPSBzYXgucGFyc2VyKHRydWUpOyAvLyBzdHJpY3RcbiAgICBhZGRQYXJzZXJFdmVudHModGhpcy5wYXJzZXIpO1xuXG4gICAgLy8gV2UnbGwgdXNlIHRoZSBmaWxlLXNjb3BlZCBcImRlbGVnYXRlc1wiIHZhciB0byByZW1lbWJlciB3aGF0IGVsZW1lbnRzIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIHBhcnNpbmc7IHRoZXkgd2lsbCBwdXNoIGFuZCBwb3Agb2ZmIHRoZSBzdGFjayBhcyB3ZSBnZXQgZGVlcGVyIGludG8gdGhlIFhNTCBoaWVyYXJjaHkuXG4gICAgLy8gSXQncyBzYWZlIHRvIHVzZSBhIGdsb2JhbCBiZWNhdXNlIEpTIGlzIHNpbmdsZS10aHJlYWRlZC5cbiAgICBkZWxlZ2F0ZXMgPSBbdGhpc107XG5cbiAgICB0aGlzLnBhcnNlci53cml0ZSh4bWwpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJzZXIgYXMgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhbmQgc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIGNsaWVudHNcbiAgICBkZWxldGUgdGhpcy5wYXJzZXI7XG4gIH1cblxuICAvLyBtYWtlIFhtbERvY3VtZW50IGluaGVyaXQgWG1sRWxlbWVudCdzIG1ldGhvZHNcbiAgZXh0ZW5kKFhtbERvY3VtZW50LnByb3RvdHlwZSwgWG1sRWxlbWVudC5wcm90b3R5cGUpO1xuXG4gIFhtbERvY3VtZW50LnByb3RvdHlwZS5fb3BlbnRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuY2hpbGRyZW4gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAvLyB0aGUgZmlyc3QgdGFnIHdlIGVuY291bnRlciBzaG91bGQgYmUgdGhlIHJvb3QgLSB3ZSdsbCBcImJlY29tZVwiIHRoZSByb290IFhtbEVsZW1lbnRcbiAgICAgIFhtbEVsZW1lbnQuY2FsbCh0aGlzLCB0YWcpO1xuICAgIC8vIGFsbCBvdGhlciB0YWdzIHdpbGwgYmUgdGhlIHJvb3QgZWxlbWVudCdzIGNoaWxkcmVuXG4gICAgZWxzZSBYbWxFbGVtZW50LnByb3RvdHlwZS5fb3BlbnRhZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIFhtbERvY3VtZW50LnByb3RvdHlwZS5fZG9jdHlwZSA9IGZ1bmN0aW9uIChkb2N0eXBlKSB7XG4gICAgdGhpcy5kb2N0eXBlICs9IGRvY3R5cGU7XG4gIH07XG5cbiAgLy8gZmlsZS1zY29wZWQgZ2xvYmFsIHN0YWNrIG9mIGRlbGVnYXRlc1xuICB2YXIgZGVsZWdhdGVzID0gbnVsbDtcblxuICAvKlxuICAgKiBIZWxwZXIgZnVuY3Rpb25zXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFkZFBhcnNlckV2ZW50cyhwYXJzZXIpIHtcbiAgICBwYXJzZXIub25vcGVudGFnID0gcGFyc2VyX29wZW50YWc7XG4gICAgcGFyc2VyLm9uY2xvc2V0YWcgPSBwYXJzZXJfY2xvc2V0YWc7XG4gICAgcGFyc2VyLm9udGV4dCA9IHBhcnNlcl90ZXh0O1xuICAgIHBhcnNlci5vbmNkYXRhID0gcGFyc2VyX2NkYXRhO1xuICAgIHBhcnNlci5vbmNvbW1lbnQgPSBwYXJzZXJfY29tbWVudDtcbiAgICBwYXJzZXIub25kb2N0eXBlID0gcGFyc2VyX2RvY3R5cGU7XG4gICAgcGFyc2VyLm9uZXJyb3IgPSBwYXJzZXJfZXJyb3I7XG4gIH1cblxuICAvLyBjcmVhdGUgdGhlc2UgY2xvc3VyZXMgYW5kIGNhY2hlIHRoZW0gYnkga2VlcGluZyB0aGVtIGZpbGUtc2NvcGVkXG4gIGZ1bmN0aW9uIHBhcnNlcl9vcGVudGFnKCkge1xuICAgIGRlbGVnYXRlc1swXSAmJiBkZWxlZ2F0ZXNbMF0uX29wZW50YWcuYXBwbHkoZGVsZWdhdGVzWzBdLCBhcmd1bWVudHMpO1xuICB9XG4gIGZ1bmN0aW9uIHBhcnNlcl9jbG9zZXRhZygpIHtcbiAgICBkZWxlZ2F0ZXNbMF0gJiYgZGVsZWdhdGVzWzBdLl9jbG9zZXRhZy5hcHBseShkZWxlZ2F0ZXNbMF0sIGFyZ3VtZW50cyk7XG4gIH1cbiAgZnVuY3Rpb24gcGFyc2VyX3RleHQoKSB7XG4gICAgZGVsZWdhdGVzWzBdICYmIGRlbGVnYXRlc1swXS5fdGV4dC5hcHBseShkZWxlZ2F0ZXNbMF0sIGFyZ3VtZW50cyk7XG4gIH1cbiAgZnVuY3Rpb24gcGFyc2VyX2NkYXRhKCkge1xuICAgIGRlbGVnYXRlc1swXSAmJiBkZWxlZ2F0ZXNbMF0uX2NkYXRhLmFwcGx5KGRlbGVnYXRlc1swXSwgYXJndW1lbnRzKTtcbiAgfVxuICBmdW5jdGlvbiBwYXJzZXJfY29tbWVudCgpIHtcbiAgICBkZWxlZ2F0ZXNbMF0gJiYgZGVsZWdhdGVzWzBdLl9jb21tZW50LmFwcGx5KGRlbGVnYXRlc1swXSwgYXJndW1lbnRzKTtcbiAgfVxuICBmdW5jdGlvbiBwYXJzZXJfZG9jdHlwZSgpIHtcbiAgICBkZWxlZ2F0ZXNbMF0gJiYgZGVsZWdhdGVzWzBdLl9kb2N0eXBlLmFwcGx5KGRlbGVnYXRlc1swXSwgYXJndW1lbnRzKTtcbiAgfVxuICBmdW5jdGlvbiBwYXJzZXJfZXJyb3IoKSB7XG4gICAgZGVsZWdhdGVzWzBdICYmIGRlbGVnYXRlc1swXS5fZXJyb3IuYXBwbHkoZGVsZWdhdGVzWzBdLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgLy8gYSByZWxhdGl2ZWx5IHN0YW5kYXJkIGV4dGVuZCBtZXRob2RcbiAgZnVuY3Rpb24gZXh0ZW5kKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSlcbiAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIGRlc3RpbmF0aW9uW3Byb3BdID0gc291cmNlW3Byb3BdO1xuICB9XG5cbiAgLy8gZXNjYXBlcyBYTUwgZW50aXRpZXMgbGlrZSBcIjxcIiwgXCImXCIsIGV0Yy5cbiAgZnVuY3Rpb24gZXNjYXBlWE1MKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuICAgICAgLnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpXG4gICAgICAucmVwbGFjZSgvPi9nLCBcIiZndDtcIilcbiAgICAgIC5yZXBsYWNlKC8nL2csIFwiJmFwb3M7XCIpXG4gICAgICAucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIik7XG4gIH1cblxuICAvLyBmb3JtYXRzIHNvbWUgdGV4dCBmb3IgZGVidWdnaW5nIGdpdmVuIGEgZmV3IG9wdGlvbnNcbiAgZnVuY3Rpb24gZm9ybWF0VGV4dCh0ZXh0LCBvcHRpb25zKSB7XG4gICAgdmFyIGZpbmFsVGV4dCA9IHRleHQ7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyaW1tZWQgJiYgdGV4dC5sZW5ndGggPiAyNSkge1xuICAgICAgZmluYWxUZXh0ID0gZmluYWxUZXh0LnN1YnN0cmluZygwLCAyNSkudHJpbSgpICsgXCLigKZcIjtcbiAgICB9XG5cbiAgICBpZiAoIShvcHRpb25zICYmIG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlKSkge1xuICAgICAgZmluYWxUZXh0ID0gZmluYWxUZXh0LnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmluYWxUZXh0O1xuICB9XG5cbiAgLy8gQXJlIHdlIGJlaW5nIHVzZWQgaW4gYSBOb2RlLWxpa2UgZW52aXJvbm1lbnQ/XG4gIGlmIChcbiAgICAgdHJ1ZSAmJlxuICAgIG1vZHVsZS5leHBvcnRzICYmXG4gICAgIV9fd2VicGFja19yZXF1aXJlX18uZy54bWxkb2NBc3N1bWVCcm93c2VyXG4gICkge1xuICAgIG1vZHVsZS5leHBvcnRzLlhtbERvY3VtZW50ID0gWG1sRG9jdW1lbnQ7XG4gICAgbW9kdWxlLmV4cG9ydHMuWG1sRWxlbWVudCA9IFhtbEVsZW1lbnQ7XG4gICAgbW9kdWxlLmV4cG9ydHMuWG1sVGV4dE5vZGUgPSBYbWxUZXh0Tm9kZTtcbiAgICBtb2R1bGUuZXhwb3J0cy5YbWxDRGF0YU5vZGUgPSBYbWxDRGF0YU5vZGU7XG4gICAgbW9kdWxlLmV4cG9ydHMuWG1sQ29tbWVudE5vZGUgPSBYbWxDb21tZW50Tm9kZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLlhtbERvY3VtZW50ID0gWG1sRG9jdW1lbnQ7XG4gICAgdGhpcy5YbWxFbGVtZW50ID0gWG1sRWxlbWVudDtcbiAgICB0aGlzLlhtbFRleHROb2RlID0gWG1sVGV4dE5vZGU7XG4gICAgdGhpcy5YbWxDRGF0YU5vZGUgPSBYbWxDRGF0YU5vZGU7XG4gICAgdGhpcy5YbWxDb21tZW50Tm9kZSA9IFhtbENvbW1lbnROb2RlO1xuICB9XG59KSgpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA2MjU1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXHJcblxyXG4vLyBJbnRlcm5ldCBFeHBsb3JlciBwb2x5ZmlsbHNcclxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICF3aW5kb3cuUHJvbWlzZSkge1xyXG5cdF9fd2VicGFja19yZXF1aXJlX18oMzg2Nyk7XHJcbn1cclxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NjY3KTtcclxuXHJcbnZhciBmZXRjaFVybCA9IGZ1bmN0aW9uICh1cmwsIGhlYWRlcnMpIHtcclxuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG5cdFx0dmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG5cdFx0eGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XHJcblx0XHRmb3IgKHZhciBoZWFkZXJOYW1lIGluIGhlYWRlcnMpIHtcclxuXHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyTmFtZSwgaGVhZGVyc1toZWFkZXJOYW1lXSk7XHJcblx0XHR9XHJcblx0XHR4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuXHJcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT09IDQpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBvayA9IHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDA7XHJcblx0XHRcdGlmICghb2spIHtcclxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdHJlamVjdChuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggKHVybDogXCInICsgdXJsICsgJ1wiKScpKTtcclxuXHRcdFx0XHR9LCAwKTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHR4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR2YXIgb2sgPSB4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwO1xyXG5cdFx0XHRpZiAob2spIHtcclxuXHRcdFx0XHRyZXNvbHZlKHhoci5yZXNwb25zZSk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0eGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkICh1cmw6IFwiJyArIHVybCArICdcIiknKSk7XHJcblx0XHRcdH0sIDApO1xyXG5cdFx0fTtcclxuXHJcblx0XHR4aHIub250aW1lb3V0ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRyZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCAodXJsOiBcIicgKyB1cmwgKyAnXCIpJykpO1xyXG5cdFx0XHR9LCAwKTtcclxuXHRcdH07XHJcblxyXG5cdFx0eGhyLnNlbmQoKTtcclxuXHR9KTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIFVSTEJyb3dzZXJSZXNvbHZlcihmcykge1xyXG5cdHRoaXMuZnMgPSBmcztcclxuXHR0aGlzLnJlc29sdmluZyA9IHt9O1xyXG59XHJcblxyXG5VUkxCcm93c2VyUmVzb2x2ZXIucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbiAodXJsLCBoZWFkZXJzKSB7XHJcblx0aWYgKCF0aGlzLnJlc29sdmluZ1t1cmxdKSB7XHJcblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xyXG5cdFx0dGhpcy5yZXNvbHZpbmdbdXJsXSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuXHRcdFx0aWYgKHVybC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2h0dHBzOi8vJykgPT09IDAgfHwgdXJsLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignaHR0cDovLycpID09PSAwKSB7XHJcblx0XHRcdFx0aWYgKF90aGlzLmZzLmV4aXN0c1N5bmModXJsKSkge1xyXG5cdFx0XHRcdFx0Ly8gdXJsIHdhcyBkb3dubG9hZGVkIGVhcmxpZXJcclxuXHRcdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0ZmV0Y2hVcmwodXJsLCBoZWFkZXJzKS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcclxuXHRcdFx0XHRcdFx0X3RoaXMuZnMud3JpdGVGaWxlU3luYyh1cmwsIGJ1ZmZlcik7XHJcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0XHRcdH0sIGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KHJlc3VsdCk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gY2Fubm90IGJlIHJlc29sdmVkXHJcblx0XHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0aGlzLnJlc29sdmluZ1t1cmxdO1xyXG59XHJcblxyXG5VUkxCcm93c2VyUmVzb2x2ZXIucHJvdG90eXBlLnJlc29sdmVkID0gZnVuY3Rpb24gKCkge1xyXG5cdHZhciBfdGhpcyA9IHRoaXM7XHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuXHRcdFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoX3RoaXMucmVzb2x2aW5nKSkudGhlbihmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHJlc29sdmUoKTtcclxuXHRcdH0sIGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuXHRcdFx0cmVqZWN0KHJlc3VsdCk7XHJcblx0XHR9KTtcclxuXHR9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBVUkxCcm93c2VyUmVzb2x2ZXI7XHJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNDI3NTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHByb3ZpZGVkIGRlcGVuZGVuY3kgKi8gdmFyIEJ1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oODgyMylbXCJCdWZmZXJcIl07XG5cclxuXHJcbnZhciBpc0Z1bmN0aW9uID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNGdW5jdGlvbik7XHJcbnZhciBpc1VuZGVmaW5lZCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzVW5kZWZpbmVkKTtcclxudmFyIGlzTnVsbCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzTnVsbCk7XHJcbnZhciBGaWxlU2F2ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0ODcpO1xyXG52YXIgc2F2ZUFzID0gRmlsZVNhdmVyLnNhdmVBcztcclxuXHJcbnZhciBkZWZhdWx0Q2xpZW50Rm9udHMgPSB7XHJcblx0Um9ib3RvOiB7XHJcblx0XHRub3JtYWw6ICdSb2JvdG8tUmVndWxhci50dGYnLFxyXG5cdFx0Ym9sZDogJ1JvYm90by1NZWRpdW0udHRmJyxcclxuXHRcdGl0YWxpY3M6ICdSb2JvdG8tSXRhbGljLnR0ZicsXHJcblx0XHRib2xkaXRhbGljczogJ1JvYm90by1NZWRpdW1JdGFsaWMudHRmJ1xyXG5cdH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIERvY3VtZW50KGRvY0RlZmluaXRpb24sIHRhYmxlTGF5b3V0cywgZm9udHMsIHZmcykge1xyXG5cdHRoaXMuZG9jRGVmaW5pdGlvbiA9IGRvY0RlZmluaXRpb247XHJcblx0dGhpcy50YWJsZUxheW91dHMgPSB0YWJsZUxheW91dHMgfHwgbnVsbDtcclxuXHR0aGlzLmZvbnRzID0gZm9udHMgfHwgZGVmYXVsdENsaWVudEZvbnRzO1xyXG5cdHRoaXMudmZzID0gdmZzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW5DcmVhdGVQZGYoKSB7XHJcblx0Ly8gRW5zdXJlIHRoZSBicm93c2VyIHByb3ZpZGVzIHRoZSBsZXZlbCBvZiBzdXBwb3J0IG5lZWRlZFxyXG5cdHRyeSB7XHJcblx0XHR2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcclxuXHRcdHZhciBwcm90byA9IHsgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9IH1cclxuXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXHJcblx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YoYXJyLCBwcm90bylcclxuXHRcdHJldHVybiBhcnIuZm9vKCkgPT09IDQyXHJcblx0fSBjYXRjaCAoZSkge1xyXG5cdFx0cmV0dXJuIGZhbHNlXHJcblx0fVxyXG59XHJcblxyXG5Eb2N1bWVudC5wcm90b3R5cGUuX2NyZWF0ZURvYyA9IGZ1bmN0aW9uIChvcHRpb25zLCBjYikge1xyXG5cdHZhciBnZXRFeHRlbmRlZFVybCA9IGZ1bmN0aW9uICh1cmwpIHtcclxuXHRcdGlmICh0eXBlb2YgdXJsID09PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRyZXR1cm4geyB1cmw6IHVybC51cmwsIGhlYWRlcnM6IHVybC5oZWFkZXJzIH07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHsgdXJsOiB1cmwsIGhlYWRlcnM6IHt9IH07XHJcblx0fTtcclxuXHJcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblx0aWYgKHRoaXMudGFibGVMYXlvdXRzKSB7XHJcblx0XHRvcHRpb25zLnRhYmxlTGF5b3V0cyA9IHRoaXMudGFibGVMYXlvdXRzO1xyXG5cdH1cclxuXHJcblx0dmFyIFBkZlByaW50ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2MTcpO1xyXG5cclxuXHR2YXIgcHJpbnRlciA9IG5ldyBQZGZQcmludGVyKHRoaXMuZm9udHMpO1xyXG5cdChfX3dlYnBhY2tfcmVxdWlyZV9fKDM4NTcpLmJpbmRGUykodGhpcy52ZnMpOyAvLyBiaW5kIHZpcnR1YWwgZmlsZSBzeXN0ZW0gdG8gZmlsZSBzeXN0ZW1cclxuXHJcblx0aWYgKCFpc0Z1bmN0aW9uKGNiKSkge1xyXG5cdFx0dmFyIGRvYyA9IHByaW50ZXIuY3JlYXRlUGRmS2l0RG9jdW1lbnQodGhpcy5kb2NEZWZpbml0aW9uLCBvcHRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4gZG9jO1xyXG5cdH1cclxuXHJcblx0dmFyIFVSTEJyb3dzZXJSZXNvbHZlciA9IF9fd2VicGFja19yZXF1aXJlX18oNjI1NSk7XHJcblx0dmFyIHVybFJlc29sdmVyID0gbmV3IFVSTEJyb3dzZXJSZXNvbHZlcihfX3dlYnBhY2tfcmVxdWlyZV9fKDM4NTcpKTtcclxuXHJcblx0Zm9yICh2YXIgZm9udCBpbiB0aGlzLmZvbnRzKSB7XHJcblx0XHRpZiAodGhpcy5mb250cy5oYXNPd25Qcm9wZXJ0eShmb250KSkge1xyXG5cdFx0XHRpZiAodGhpcy5mb250c1tmb250XS5ub3JtYWwpIHtcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvbnRzW2ZvbnRdLm5vcm1hbCkpIHsgLy8gVHJ1ZVR5cGUgQ29sbGVjdGlvblxyXG5cdFx0XHRcdFx0dmFyIHVybCA9IGdldEV4dGVuZGVkVXJsKHRoaXMuZm9udHNbZm9udF0ubm9ybWFsWzBdKTtcclxuXHRcdFx0XHRcdHVybFJlc29sdmVyLnJlc29sdmUodXJsLnVybCwgdXJsLmhlYWRlcnMpO1xyXG5cdFx0XHRcdFx0dGhpcy5mb250c1tmb250XS5ub3JtYWxbMF0gPSB1cmwudXJsO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YXIgdXJsID0gZ2V0RXh0ZW5kZWRVcmwodGhpcy5mb250c1tmb250XS5ub3JtYWwpO1xyXG5cdFx0XHRcdFx0dXJsUmVzb2x2ZXIucmVzb2x2ZSh1cmwudXJsLCB1cmwuaGVhZGVycyk7XHJcblx0XHRcdFx0XHR0aGlzLmZvbnRzW2ZvbnRdLm5vcm1hbCA9IHVybC51cmw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmZvbnRzW2ZvbnRdLmJvbGQpIHtcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvbnRzW2ZvbnRdLmJvbGQpKSB7IC8vIFRydWVUeXBlIENvbGxlY3Rpb25cclxuXHRcdFx0XHRcdHZhciB1cmwgPSBnZXRFeHRlbmRlZFVybCh0aGlzLmZvbnRzW2ZvbnRdLmJvbGRbMF0pO1xyXG5cdFx0XHRcdFx0dXJsUmVzb2x2ZXIucmVzb2x2ZSh1cmwudXJsLCB1cmwuaGVhZGVycyk7XHJcblx0XHRcdFx0XHR0aGlzLmZvbnRzW2ZvbnRdLmJvbGRbMF0gPSB1cmwudXJsO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YXIgdXJsID0gZ2V0RXh0ZW5kZWRVcmwodGhpcy5mb250c1tmb250XS5ib2xkKTtcclxuXHRcdFx0XHRcdHVybFJlc29sdmVyLnJlc29sdmUodXJsLnVybCwgdXJsLmhlYWRlcnMpO1xyXG5cdFx0XHRcdFx0dGhpcy5mb250c1tmb250XS5ib2xkID0gdXJsLnVybDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZm9udHNbZm9udF0uaXRhbGljcykge1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHRoaXMuZm9udHNbZm9udF0uaXRhbGljcykpIHsgLy8gVHJ1ZVR5cGUgQ29sbGVjdGlvblxyXG5cdFx0XHRcdFx0dmFyIHVybCA9IGdldEV4dGVuZGVkVXJsKHRoaXMuZm9udHNbZm9udF0uaXRhbGljc1swXSk7XHJcblx0XHRcdFx0XHR1cmxSZXNvbHZlci5yZXNvbHZlKHVybC51cmwsIHVybC5oZWFkZXJzKTtcclxuXHRcdFx0XHRcdHRoaXMuZm9udHNbZm9udF0uaXRhbGljc1swXSA9IHVybC51cmw7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHZhciB1cmwgPSBnZXRFeHRlbmRlZFVybCh0aGlzLmZvbnRzW2ZvbnRdLml0YWxpY3MpO1xyXG5cdFx0XHRcdFx0dXJsUmVzb2x2ZXIucmVzb2x2ZSh1cmwudXJsLCB1cmwuaGVhZGVycyk7XHJcblx0XHRcdFx0XHR0aGlzLmZvbnRzW2ZvbnRdLml0YWxpY3MgPSB1cmwudXJsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5mb250c1tmb250XS5ib2xkaXRhbGljcykge1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHRoaXMuZm9udHNbZm9udF0uYm9sZGl0YWxpY3MpKSB7IC8vIFRydWVUeXBlIENvbGxlY3Rpb25cclxuXHRcdFx0XHRcdHZhciB1cmwgPSBnZXRFeHRlbmRlZFVybCh0aGlzLmZvbnRzW2ZvbnRdLmJvbGRpdGFsaWNzWzBdKTtcclxuXHRcdFx0XHRcdHVybFJlc29sdmVyLnJlc29sdmUodXJsLnVybCwgdXJsLmhlYWRlcnMpO1xyXG5cdFx0XHRcdFx0dGhpcy5mb250c1tmb250XS5ib2xkaXRhbGljc1swXSA9IHVybC51cmw7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHZhciB1cmwgPSBnZXRFeHRlbmRlZFVybCh0aGlzLmZvbnRzW2ZvbnRdLmJvbGRpdGFsaWNzKTtcclxuXHRcdFx0XHRcdHVybFJlc29sdmVyLnJlc29sdmUodXJsLnVybCwgdXJsLmhlYWRlcnMpO1xyXG5cdFx0XHRcdFx0dGhpcy5mb250c1tmb250XS5ib2xkaXRhbGljcyA9IHVybC51cmw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAodGhpcy5kb2NEZWZpbml0aW9uLmltYWdlcykge1xyXG5cdFx0Zm9yICh2YXIgaW1hZ2UgaW4gdGhpcy5kb2NEZWZpbml0aW9uLmltYWdlcykge1xyXG5cdFx0XHRpZiAodGhpcy5kb2NEZWZpbml0aW9uLmltYWdlcy5oYXNPd25Qcm9wZXJ0eShpbWFnZSkpIHtcclxuXHRcdFx0XHR2YXIgdXJsID0gZ2V0RXh0ZW5kZWRVcmwodGhpcy5kb2NEZWZpbml0aW9uLmltYWdlc1tpbWFnZV0pO1xyXG5cdFx0XHRcdHVybFJlc29sdmVyLnJlc29sdmUodXJsLnVybCwgdXJsLmhlYWRlcnMpO1xyXG5cdFx0XHRcdHRoaXMuZG9jRGVmaW5pdGlvbi5pbWFnZXNbaW1hZ2VdID0gdXJsLnVybDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dmFyIF90aGlzID0gdGhpcztcclxuXHJcblx0dXJsUmVzb2x2ZXIucmVzb2x2ZWQoKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuXHRcdHZhciBkb2MgPSBwcmludGVyLmNyZWF0ZVBkZktpdERvY3VtZW50KF90aGlzLmRvY0RlZmluaXRpb24sIG9wdGlvbnMpO1xyXG5cclxuXHRcdGNiKGRvYyk7XHJcblx0fSwgZnVuY3Rpb24gKHJlc3VsdCkge1xyXG5cdFx0dGhyb3cgcmVzdWx0O1xyXG5cdH0pO1xyXG59O1xyXG5cclxuRG9jdW1lbnQucHJvdG90eXBlLl9mbHVzaERvYyA9IGZ1bmN0aW9uIChkb2MsIGNhbGxiYWNrKSB7XHJcblx0dmFyIGNodW5rcyA9IFtdO1xyXG5cdHZhciByZXN1bHQ7XHJcblxyXG5cdGRvYy5vbigncmVhZGFibGUnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHR2YXIgY2h1bms7XHJcblx0XHR3aGlsZSAoKGNodW5rID0gZG9jLnJlYWQoOTAwNzE5OTI1NDc0MDk5MSkpICE9PSBudWxsKSB7XHJcblx0XHRcdGNodW5rcy5wdXNoKGNodW5rKTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHRkb2Mub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcclxuXHRcdHJlc3VsdCA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcclxuXHRcdGNhbGxiYWNrKHJlc3VsdCwgZG9jLl9wZGZNYWtlUGFnZXMpO1xyXG5cdH0pO1xyXG5cdGRvYy5lbmQoKTtcclxufTtcclxuXHJcbkRvY3VtZW50LnByb3RvdHlwZS5fZ2V0UGFnZXMgPSBmdW5jdGlvbiAob3B0aW9ucywgY2IpIHtcclxuXHRpZiAoIWNiKSB7XHJcblx0XHR0aHJvdyAnX2dldFBhZ2VzIGlzIGFuIGFzeW5jIG1ldGhvZCBhbmQgbmVlZHMgYSBjYWxsYmFjayBhcmd1bWVudCc7XHJcblx0fVxyXG5cdHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG5cdHRoaXMuX2NyZWF0ZURvYyhvcHRpb25zLCBmdW5jdGlvbiAoZG9jKSB7XHJcblx0XHRfdGhpcy5fZmx1c2hEb2MoZG9jLCBmdW5jdGlvbiAoaWdub3JlQnVmZmVyLCBwYWdlcykge1xyXG5cdFx0XHRjYihwYWdlcyk7XHJcblx0XHR9KTtcclxuXHR9KTtcclxufTtcclxuXHJcbkRvY3VtZW50LnByb3RvdHlwZS5fYnVmZmVyVG9CbG9iID0gZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG5cdHZhciBibG9iO1xyXG5cdHRyeSB7XHJcblx0XHRibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XHJcblx0fSBjYXRjaCAoZSkge1xyXG5cdFx0Ly8gT2xkIGJyb3dzZXIgd2hpY2ggY2FuJ3QgaGFuZGxlIGl0IHdpdGhvdXQgbWFraW5nIGl0IGFuIGJ5dGUgYXJyYXkgKGllMTApXHJcblx0XHRpZiAoZS5uYW1lID09PSAnSW52YWxpZFN0YXRlRXJyb3InKSB7XHJcblx0XHRcdHZhciBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG5cdFx0XHRibG9iID0gbmV3IEJsb2IoW2J5dGVBcnJheS5idWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKCFibG9iKSB7XHJcblx0XHR0aHJvdyAnQ291bGQgbm90IGdlbmVyYXRlIGJsb2InO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGJsb2I7XHJcbn07XHJcblxyXG5Eb2N1bWVudC5wcm90b3R5cGUuX29wZW5XaW5kb3cgPSBmdW5jdGlvbiAoKSB7XHJcblx0Ly8gd2UgaGF2ZSB0byBvcGVuIHRoZSB3aW5kb3cgaW1tZWRpYXRlbHkgYW5kIHN0b3JlIHRoZSByZWZlcmVuY2VcclxuXHQvLyBvdGhlcndpc2UgcG9wdXAgYmxvY2tlcnMgd2lsbCBzdG9wIHVzXHJcblx0dmFyIHdpbiA9IHdpbmRvdy5vcGVuKCcnLCAnX2JsYW5rJyk7XHJcblx0aWYgKHdpbiA9PT0gbnVsbCkge1xyXG5cdFx0dGhyb3cgJ09wZW4gUERGIGluIG5ldyB3aW5kb3cgYmxvY2tlZCBieSBicm93c2VyJztcclxuXHR9XHJcblxyXG5cdHJldHVybiB3aW47XHJcbn07XHJcblxyXG5Eb2N1bWVudC5wcm90b3R5cGUuX29wZW5QZGYgPSBmdW5jdGlvbiAob3B0aW9ucywgd2luKSB7XHJcblx0aWYgKCF3aW4pIHtcclxuXHRcdHdpbiA9IHRoaXMuX29wZW5XaW5kb3coKTtcclxuXHR9XHJcblx0dHJ5IHtcclxuXHRcdHRoaXMuZ2V0QmxvYihmdW5jdGlvbiAocmVzdWx0KSB7XHJcblx0XHRcdHZhciB1cmxDcmVhdG9yID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xyXG5cdFx0XHR2YXIgcGRmVXJsID0gdXJsQ3JlYXRvci5jcmVhdGVPYmplY3RVUkwocmVzdWx0KTtcclxuXHRcdFx0d2luLmxvY2F0aW9uLmhyZWYgPSBwZGZVcmw7XHJcblxyXG5cdFx0XHQvKiB0ZW1wb3JhcmlseSBkaXNhYmxlZFxyXG5cdFx0XHRpZiAod2luICE9PSB3aW5kb3cpIHtcclxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdGlmIChpc051bGwod2luLndpbmRvdykpIHsgLy8gaXMgY2xvc2VkIGJ5IEFkQmxvY2tcclxuXHRcdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBwZGZVcmw7IC8vIG9wZW4gaW4gYWN0dWFsIHdpbmRvd1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sIDUwMCk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ki9cclxuXHRcdH0sIG9wdGlvbnMpO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdHdpbi5jbG9zZSgpO1xyXG5cdFx0dGhyb3cgZTtcclxuXHR9XHJcbn07XHJcblxyXG5Eb2N1bWVudC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uIChvcHRpb25zLCB3aW4pIHtcclxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHRvcHRpb25zLmF1dG9QcmludCA9IGZhbHNlO1xyXG5cdHdpbiA9IHdpbiB8fCBudWxsO1xyXG5cclxuXHR0aGlzLl9vcGVuUGRmKG9wdGlvbnMsIHdpbik7XHJcbn07XHJcblxyXG5cclxuRG9jdW1lbnQucHJvdG90eXBlLnByaW50ID0gZnVuY3Rpb24gKG9wdGlvbnMsIHdpbikge1xyXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cdG9wdGlvbnMuYXV0b1ByaW50ID0gdHJ1ZTtcclxuXHR3aW4gPSB3aW4gfHwgbnVsbDtcclxuXHJcblx0dGhpcy5fb3BlblBkZihvcHRpb25zLCB3aW4pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIGRvd25sb2FkKGRlZmF1bHRGaWxlTmFtZSA9ICdmaWxlLnBkZicsIGNiID0gbnVsbCwgb3B0aW9ucyA9IHt9KVxyXG4gKiBvclxyXG4gKiBkb3dubG9hZChjYiwgb3B0aW9ucyA9IHt9KVxyXG4gKi9cclxuRG9jdW1lbnQucHJvdG90eXBlLmRvd25sb2FkID0gZnVuY3Rpb24gKGRlZmF1bHRGaWxlTmFtZSwgY2IsIG9wdGlvbnMpIHtcclxuXHRpZiAoaXNGdW5jdGlvbihkZWZhdWx0RmlsZU5hbWUpKSB7XHJcblx0XHRpZiAoIWlzVW5kZWZpbmVkKGNiKSkge1xyXG5cdFx0XHRvcHRpb25zID0gY2I7XHJcblx0XHR9XHJcblx0XHRjYiA9IGRlZmF1bHRGaWxlTmFtZTtcclxuXHRcdGRlZmF1bHRGaWxlTmFtZSA9IG51bGw7XHJcblx0fVxyXG5cclxuXHRkZWZhdWx0RmlsZU5hbWUgPSBkZWZhdWx0RmlsZU5hbWUgfHwgJ2ZpbGUucGRmJztcclxuXHR0aGlzLmdldEJsb2IoZnVuY3Rpb24gKHJlc3VsdCkge1xyXG5cdFx0c2F2ZUFzKHJlc3VsdCwgZGVmYXVsdEZpbGVOYW1lKTtcclxuXHJcblx0XHRpZiAoaXNGdW5jdGlvbihjYikpIHtcclxuXHRcdFx0Y2IoKTtcclxuXHRcdH1cclxuXHR9LCBvcHRpb25zKTtcclxufTtcclxuXHJcbkRvY3VtZW50LnByb3RvdHlwZS5nZXRCYXNlNjQgPSBmdW5jdGlvbiAoY2IsIG9wdGlvbnMpIHtcclxuXHRpZiAoIWNiKSB7XHJcblx0XHR0aHJvdyAnZ2V0QmFzZTY0IGlzIGFuIGFzeW5jIG1ldGhvZCBhbmQgbmVlZHMgYSBjYWxsYmFjayBhcmd1bWVudCc7XHJcblx0fVxyXG5cdHRoaXMuZ2V0QnVmZmVyKGZ1bmN0aW9uIChidWZmZXIpIHtcclxuXHRcdGNiKGJ1ZmZlci50b1N0cmluZygnYmFzZTY0JykpO1xyXG5cdH0sIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuRG9jdW1lbnQucHJvdG90eXBlLmdldERhdGFVcmwgPSBmdW5jdGlvbiAoY2IsIG9wdGlvbnMpIHtcclxuXHRpZiAoIWNiKSB7XHJcblx0XHR0aHJvdyAnZ2V0RGF0YVVybCBpcyBhbiBhc3luYyBtZXRob2QgYW5kIG5lZWRzIGEgY2FsbGJhY2sgYXJndW1lbnQnO1xyXG5cdH1cclxuXHR0aGlzLmdldEJ1ZmZlcihmdW5jdGlvbiAoYnVmZmVyKSB7XHJcblx0XHRjYignZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0LCcgKyBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcclxuXHR9LCBvcHRpb25zKTtcclxufTtcclxuXHJcbkRvY3VtZW50LnByb3RvdHlwZS5nZXRCbG9iID0gZnVuY3Rpb24gKGNiLCBvcHRpb25zKSB7XHJcblx0aWYgKCFjYikge1xyXG5cdFx0dGhyb3cgJ2dldEJsb2IgaXMgYW4gYXN5bmMgbWV0aG9kIGFuZCBuZWVkcyBhIGNhbGxiYWNrIGFyZ3VtZW50JztcclxuXHR9XHJcblx0dmFyIHRoYXQgPSB0aGlzO1xyXG5cdHRoaXMuZ2V0QnVmZmVyKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuXHRcdHZhciBibG9iID0gdGhhdC5fYnVmZmVyVG9CbG9iKHJlc3VsdCk7XHJcblx0XHRjYihibG9iKTtcclxuXHR9LCBvcHRpb25zKTtcclxufTtcclxuXHJcbkRvY3VtZW50LnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbiAoY2IsIG9wdGlvbnMpIHtcclxuXHRpZiAoIWNiKSB7XHJcblx0XHR0aHJvdyAnZ2V0QnVmZmVyIGlzIGFuIGFzeW5jIG1ldGhvZCBhbmQgbmVlZHMgYSBjYWxsYmFjayBhcmd1bWVudCc7XHJcblx0fVxyXG5cclxuXHR2YXIgX3RoaXMgPSB0aGlzO1xyXG5cclxuXHR0aGlzLl9jcmVhdGVEb2Mob3B0aW9ucywgZnVuY3Rpb24gKGRvYykge1xyXG5cdFx0X3RoaXMuX2ZsdXNoRG9jKGRvYywgZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG5cdFx0XHRjYihidWZmZXIpO1xyXG5cdFx0fSk7XHJcblx0fSk7XHJcbn07XHJcblxyXG5Eb2N1bWVudC5wcm90b3R5cGUuZ2V0U3RyZWFtID0gZnVuY3Rpb24gKG9wdGlvbnMsIGNiKSB7XHJcblx0aWYgKCFpc0Z1bmN0aW9uKGNiKSkge1xyXG5cdFx0dmFyIGRvYyA9IHRoaXMuX2NyZWF0ZURvYyhvcHRpb25zKTtcclxuXHRcdHJldHVybiBkb2M7XHJcblx0fVxyXG5cclxuXHR0aGlzLl9jcmVhdGVEb2Mob3B0aW9ucywgZnVuY3Rpb24gKGRvYykge1xyXG5cdFx0Y2IoZG9jKTtcclxuXHR9KTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdGNyZWF0ZVBkZjogZnVuY3Rpb24gKGRvY0RlZmluaXRpb24sIHRhYmxlTGF5b3V0cywgZm9udHMsIHZmcykge1xyXG5cdFx0aWYgKCFjYW5DcmVhdGVQZGYoKSkge1xyXG5cdFx0XHR0aHJvdyAnWW91ciBicm93c2VyIGRvZXMgbm90IHByb3ZpZGUgdGhlIGxldmVsIG9mIHN1cHBvcnQgbmVlZGVkJztcclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXcgRG9jdW1lbnQoXHJcblx0XHRcdGRvY0RlZmluaXRpb24sXHJcblx0XHRcdHRhYmxlTGF5b3V0cyB8fCBfX3dlYnBhY2tfcmVxdWlyZV9fLmcucGRmTWFrZS50YWJsZUxheW91dHMsXHJcblx0XHRcdGZvbnRzIHx8IF9fd2VicGFja19yZXF1aXJlX18uZy5wZGZNYWtlLmZvbnRzLFxyXG5cdFx0XHR2ZnMgfHwgX193ZWJwYWNrX3JlcXVpcmVfXy5nLnBkZk1ha2UudmZzXHJcblx0XHQpO1xyXG5cdH1cclxufTtcclxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzODU3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xudmFyIF9fZGlybmFtZSA9IFwiL1wiO1xuLyogcHJvdmlkZWQgZGVwZW5kZW5jeSAqLyB2YXIgQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODIzKVtcIkJ1ZmZlclwiXTtcblxyXG5cclxuZnVuY3Rpb24gVmlydHVhbEZpbGVTeXN0ZW0oKSB7XHJcblx0dGhpcy5maWxlU3lzdGVtID0ge307XHJcblx0dGhpcy5kYXRhU3lzdGVtID0ge307XHJcbn1cclxuXHJcblZpcnR1YWxGaWxlU3lzdGVtLnByb3RvdHlwZS5leGlzdHNTeW5jID0gZnVuY3Rpb24gKGZpbGVuYW1lKSB7XHJcblx0ZmlsZW5hbWUgPSBmaXhGaWxlbmFtZShmaWxlbmFtZSk7XHJcblx0cmV0dXJuIHR5cGVvZiB0aGlzLmZpbGVTeXN0ZW1bZmlsZW5hbWVdICE9PSAndW5kZWZpbmVkJ1xyXG5cdFx0fHwgdHlwZW9mIHRoaXMuZGF0YVN5c3RlbVtmaWxlbmFtZV0gIT09ICd1bmRlZmluZWQnO1xyXG59XHJcblxyXG5WaXJ0dWFsRmlsZVN5c3RlbS5wcm90b3R5cGUucmVhZEZpbGVTeW5jID0gZnVuY3Rpb24gKGZpbGVuYW1lLCBvcHRpb25zKSB7XHJcblx0ZmlsZW5hbWUgPSBmaXhGaWxlbmFtZShmaWxlbmFtZSk7XHJcblxyXG5cdHZhciBkYXRhQ29udGVudCA9IHRoaXMuZGF0YVN5c3RlbVtmaWxlbmFtZV07XHJcblx0aWYgKHR5cGVvZiBkYXRhQ29udGVudCA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucyA9PT0gJ3V0ZjgnKSB7XHJcblx0XHRyZXR1cm4gZGF0YUNvbnRlbnQ7XHJcblx0fVxyXG5cclxuXHRpZiAoZGF0YUNvbnRlbnQpIHtcclxuXHRcdHJldHVybiBuZXcgQnVmZmVyKGRhdGFDb250ZW50LCB0eXBlb2YgZGF0YUNvbnRlbnQgPT09ICdzdHJpbmcnID8gJ2Jhc2U2NCcgOiB1bmRlZmluZWQpO1xyXG5cdH1cclxuXHJcblx0dmFyIGNvbnRlbnQgPSB0aGlzLmZpbGVTeXN0ZW1bZmlsZW5hbWVdO1xyXG5cdGlmIChjb250ZW50KSB7XHJcblx0XHRyZXR1cm4gY29udGVudDtcclxuXHR9XHJcblxyXG5cdHRocm93ICdGaWxlIFxcJycgKyBmaWxlbmFtZSArICdcXCcgbm90IGZvdW5kIGluIHZpcnR1YWwgZmlsZSBzeXN0ZW0nO1xyXG59O1xyXG5cclxuVmlydHVhbEZpbGVTeXN0ZW0ucHJvdG90eXBlLndyaXRlRmlsZVN5bmMgPSBmdW5jdGlvbiAoZmlsZW5hbWUsIGNvbnRlbnQpIHtcclxuXHR0aGlzLmZpbGVTeXN0ZW1bZml4RmlsZW5hbWUoZmlsZW5hbWUpXSA9IGNvbnRlbnQ7XHJcbn07XHJcblxyXG5WaXJ0dWFsRmlsZVN5c3RlbS5wcm90b3R5cGUuYmluZEZTID0gZnVuY3Rpb24gKGRhdGEpIHtcclxuXHR0aGlzLmRhdGFTeXN0ZW0gPSBkYXRhIHx8IHt9O1xyXG59O1xyXG5cclxuXHJcbmZ1bmN0aW9uIGZpeEZpbGVuYW1lKGZpbGVuYW1lKSB7XHJcblx0aWYgKGZpbGVuYW1lLmluZGV4T2YoX19kaXJuYW1lKSA9PT0gMCkge1xyXG5cdFx0ZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoX19kaXJuYW1lLmxlbmd0aCk7XHJcblx0fVxyXG5cclxuXHRpZiAoZmlsZW5hbWUuaW5kZXhPZignLycpID09PSAwKSB7XHJcblx0XHRmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZygxKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBmaWxlbmFtZTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBuZXcgVmlydHVhbEZpbGVTeXN0ZW0oKTtcclxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0NDk4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXHJcblxyXG52YXIgaXNTdHJpbmcgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc1N0cmluZyk7XHJcblxyXG5mdW5jdGlvbiBidWlsZENvbHVtbldpZHRocyhjb2x1bW5zLCBhdmFpbGFibGVXaWR0aCkge1xyXG5cdHZhciBhdXRvQ29sdW1ucyA9IFtdLFxyXG5cdFx0YXV0b01pbiA9IDAsIGF1dG9NYXggPSAwLFxyXG5cdFx0c3RhckNvbHVtbnMgPSBbXSxcclxuXHRcdHN0YXJNYXhNaW4gPSAwLFxyXG5cdFx0c3Rhck1heE1heCA9IDAsXHJcblx0XHRmaXhlZENvbHVtbnMgPSBbXSxcclxuXHRcdGluaXRpYWxfYXZhaWxhYmxlV2lkdGggPSBhdmFpbGFibGVXaWR0aDtcclxuXHJcblx0Y29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcclxuXHRcdGlmIChpc0F1dG9Db2x1bW4oY29sdW1uKSkge1xyXG5cdFx0XHRhdXRvQ29sdW1ucy5wdXNoKGNvbHVtbik7XHJcblx0XHRcdGF1dG9NaW4gKz0gY29sdW1uLl9taW5XaWR0aDtcclxuXHRcdFx0YXV0b01heCArPSBjb2x1bW4uX21heFdpZHRoO1xyXG5cdFx0fSBlbHNlIGlmIChpc1N0YXJDb2x1bW4oY29sdW1uKSkge1xyXG5cdFx0XHRzdGFyQ29sdW1ucy5wdXNoKGNvbHVtbik7XHJcblx0XHRcdHN0YXJNYXhNaW4gPSBNYXRoLm1heChzdGFyTWF4TWluLCBjb2x1bW4uX21pbldpZHRoKTtcclxuXHRcdFx0c3Rhck1heE1heCA9IE1hdGgubWF4KHN0YXJNYXhNYXgsIGNvbHVtbi5fbWF4V2lkdGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Zml4ZWRDb2x1bW5zLnB1c2goY29sdW1uKTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0Zml4ZWRDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbCkge1xyXG5cdFx0Ly8gd2lkdGggc3BlY2lmaWVkIGFzICVcclxuXHRcdGlmIChpc1N0cmluZyhjb2wud2lkdGgpICYmIC9cXGQrJS8udGVzdChjb2wud2lkdGgpKSB7XHJcblx0XHRcdGNvbC53aWR0aCA9IHBhcnNlRmxvYXQoY29sLndpZHRoKSAqIGluaXRpYWxfYXZhaWxhYmxlV2lkdGggLyAxMDA7XHJcblx0XHR9XHJcblx0XHRpZiAoY29sLndpZHRoIDwgKGNvbC5fbWluV2lkdGgpICYmIGNvbC5lbGFzdGljV2lkdGgpIHtcclxuXHRcdFx0Y29sLl9jYWxjV2lkdGggPSBjb2wuX21pbldpZHRoO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29sLl9jYWxjV2lkdGggPSBjb2wud2lkdGg7XHJcblx0XHR9XHJcblxyXG5cdFx0YXZhaWxhYmxlV2lkdGggLT0gY29sLl9jYWxjV2lkdGg7XHJcblx0fSk7XHJcblxyXG5cdC8vIGh0dHA6Ly93d3cuZnJlZXNvZnQub3JnL0NJRS9SRkMvMTk0Mi8xOC5odG1cclxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyL3RhYmxlcy5odG1sI3dpZHRoLWxheW91dFxyXG5cdC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtdGFibGVzLWFsZ29yaXRobXMvT3ZlcnZpZXcuc3JjLmh0bVxyXG5cdHZhciBtaW5XID0gYXV0b01pbiArIHN0YXJNYXhNaW4gKiBzdGFyQ29sdW1ucy5sZW5ndGg7XHJcblx0dmFyIG1heFcgPSBhdXRvTWF4ICsgc3Rhck1heE1heCAqIHN0YXJDb2x1bW5zLmxlbmd0aDtcclxuXHRpZiAobWluVyA+PSBhdmFpbGFibGVXaWR0aCkge1xyXG5cdFx0Ly8gY2FzZSAxIC0gdGhlcmUncyBubyB3YXkgdG8gZml0IGFsbCBjb2x1bW5zIHdpdGhpbiBhdmFpbGFibGUgd2lkdGhcclxuXHRcdC8vIHRoYXQncyBhY3R1YWxseSBwcmV0dHkgYmFkIHNpdHVhdGlvbiB3aXRoIFBERiBhcyB3ZSBoYXZlIG5vIGhvcml6b250YWwgc2Nyb2xsXHJcblx0XHQvLyBubyBlYXN5IHdvcmthcm91bmQgKHVubGVzcyB3ZSBkZWNpZGUsIGluIHRoZSBmdXR1cmUsIHRvIHNwbGl0IHNpbmdsZSB3b3JkcylcclxuXHRcdC8vIGN1cnJlbnRseSB3ZSBzaW1wbHkgdXNlIG1pbldpZHRocyBmb3IgYWxsIGNvbHVtbnNcclxuXHRcdGF1dG9Db2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbCkge1xyXG5cdFx0XHRjb2wuX2NhbGNXaWR0aCA9IGNvbC5fbWluV2lkdGg7XHJcblx0XHR9KTtcclxuXHJcblx0XHRzdGFyQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2wpIHtcclxuXHRcdFx0Y29sLl9jYWxjV2lkdGggPSBzdGFyTWF4TWluOyAvLyBzdGFyTWF4TWluIGFscmVhZHkgY29udGFpbnMgcGFkZGluZ1xyXG5cdFx0fSk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChtYXhXIDwgYXZhaWxhYmxlV2lkdGgpIHtcclxuXHRcdFx0Ly8gY2FzZSAyIC0gd2UgY2FuIGZpdCByZXN0IG9mIHRoZSB0YWJsZSB3aXRoaW4gYXZhaWxhYmxlIHNwYWNlXHJcblx0XHRcdGF1dG9Db2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbCkge1xyXG5cdFx0XHRcdGNvbC5fY2FsY1dpZHRoID0gY29sLl9tYXhXaWR0aDtcclxuXHRcdFx0XHRhdmFpbGFibGVXaWR0aCAtPSBjb2wuX2NhbGNXaWR0aDtcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBtYXhXIGlzIHRvbyBsYXJnZSwgYnV0IG1pblcgZml0cyB3aXRoaW4gYXZhaWxhYmxlIHdpZHRoXHJcblx0XHRcdHZhciBXID0gYXZhaWxhYmxlV2lkdGggLSBtaW5XO1xyXG5cdFx0XHR2YXIgRCA9IG1heFcgLSBtaW5XO1xyXG5cclxuXHRcdFx0YXV0b0NvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sKSB7XHJcblx0XHRcdFx0dmFyIGQgPSBjb2wuX21heFdpZHRoIC0gY29sLl9taW5XaWR0aDtcclxuXHRcdFx0XHRjb2wuX2NhbGNXaWR0aCA9IGNvbC5fbWluV2lkdGggKyBkICogVyAvIEQ7XHJcblx0XHRcdFx0YXZhaWxhYmxlV2lkdGggLT0gY29sLl9jYWxjV2lkdGg7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChzdGFyQ29sdW1ucy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdHZhciBzdGFyU2l6ZSA9IGF2YWlsYWJsZVdpZHRoIC8gc3RhckNvbHVtbnMubGVuZ3RoO1xyXG5cclxuXHRcdFx0c3RhckNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sKSB7XHJcblx0XHRcdFx0Y29sLl9jYWxjV2lkdGggPSBzdGFyU2l6ZTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0F1dG9Db2x1bW4oY29sdW1uKSB7XHJcblx0cmV0dXJuIGNvbHVtbi53aWR0aCA9PT0gJ2F1dG8nO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1N0YXJDb2x1bW4oY29sdW1uKSB7XHJcblx0cmV0dXJuIGNvbHVtbi53aWR0aCA9PT0gbnVsbCB8fCBjb2x1bW4ud2lkdGggPT09IHVuZGVmaW5lZCB8fCBjb2x1bW4ud2lkdGggPT09ICcqJyB8fCBjb2x1bW4ud2lkdGggPT09ICdzdGFyJztcclxufVxyXG5cclxuLy9UT0RPOiByZWZhY3RvciBhbmQgcmV1c2UgaW4gbWVhc3VyZVRhYmxlXHJcbmZ1bmN0aW9uIG1lYXN1cmVNaW5NYXgoY29sdW1ucykge1xyXG5cdHZhciByZXN1bHQgPSB7IG1pbjogMCwgbWF4OiAwIH07XHJcblxyXG5cdHZhciBtYXhTdGFyID0geyBtaW46IDAsIG1heDogMCB9O1xyXG5cdHZhciBzdGFyQ291bnQgPSAwO1xyXG5cclxuXHRmb3IgKHZhciBpID0gMCwgbCA9IGNvbHVtbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHR2YXIgYyA9IGNvbHVtbnNbaV07XHJcblxyXG5cdFx0aWYgKGlzU3RhckNvbHVtbihjKSkge1xyXG5cdFx0XHRtYXhTdGFyLm1pbiA9IE1hdGgubWF4KG1heFN0YXIubWluLCBjLl9taW5XaWR0aCk7XHJcblx0XHRcdG1heFN0YXIubWF4ID0gTWF0aC5tYXgobWF4U3Rhci5tYXgsIGMuX21heFdpZHRoKTtcclxuXHRcdFx0c3RhckNvdW50Kys7XHJcblx0XHR9IGVsc2UgaWYgKGlzQXV0b0NvbHVtbihjKSkge1xyXG5cdFx0XHRyZXN1bHQubWluICs9IGMuX21pbldpZHRoO1xyXG5cdFx0XHRyZXN1bHQubWF4ICs9IGMuX21heFdpZHRoO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmVzdWx0Lm1pbiArPSAoKGMud2lkdGggIT09IHVuZGVmaW5lZCAmJiBjLndpZHRoKSB8fCBjLl9taW5XaWR0aCk7XHJcblx0XHRcdHJlc3VsdC5tYXggKz0gKChjLndpZHRoICE9PSB1bmRlZmluZWQgJiYgYy53aWR0aCkgfHwgYy5fbWF4V2lkdGgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKHN0YXJDb3VudCkge1xyXG5cdFx0cmVzdWx0Lm1pbiArPSBzdGFyQ291bnQgKiBtYXhTdGFyLm1pbjtcclxuXHRcdHJlc3VsdC5tYXggKz0gc3RhckNvdW50ICogbWF4U3Rhci5tYXg7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBjb2x1bW4gd2lkdGhzXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRidWlsZENvbHVtbldpZHRoczogYnVpbGRDb2x1bW5XaWR0aHMsXHJcblx0bWVhc3VyZU1pbk1heDogbWVhc3VyZU1pbk1heCxcclxuXHRpc0F1dG9Db2x1bW46IGlzQXV0b0NvbHVtbixcclxuXHRpc1N0YXJDb2x1bW46IGlzU3RhckNvbHVtblxyXG59O1xyXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE3Mjg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKmVzbGludCBuby11bnVzZWQtdmFyczogW1wiZXJyb3JcIiwge1wiYXJnc1wiOiBcIm5vbmVcIn1dKi9cclxuXHJcblxyXG5cclxudmFyIFRleHRUb29scyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM1MCk7XHJcbnZhciBTdHlsZUNvbnRleHRTdGFjayA9IF9fd2VicGFja19yZXF1aXJlX18oNzU5Nyk7XHJcbnZhciBDb2x1bW5DYWxjdWxhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NDk4KTtcclxudmFyIGlzU3RyaW5nID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNTdHJpbmcpO1xyXG52YXIgaXNOdW1iZXIgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc051bWJlcik7XHJcbnZhciBpc09iamVjdCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzT2JqZWN0KTtcclxudmFyIGlzQXJyYXkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc0FycmF5KTtcclxudmFyIGZvbnRTdHJpbmdpZnkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5mb250U3RyaW5naWZ5KTtcclxudmFyIGdldE5vZGVJZCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmdldE5vZGVJZCk7XHJcbnZhciBwYWNrID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkucGFjayk7XHJcbnZhciBxckVuY29kZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0NSk7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIERvY01lYXN1cmUoZm9udFByb3ZpZGVyLCBzdHlsZURpY3Rpb25hcnksIGRlZmF1bHRTdHlsZSwgaW1hZ2VNZWFzdXJlLCBzdmdNZWFzdXJlLCB0YWJsZUxheW91dHMsIGltYWdlcykge1xyXG5cdHRoaXMudGV4dFRvb2xzID0gbmV3IFRleHRUb29scyhmb250UHJvdmlkZXIpO1xyXG5cdHRoaXMuc3R5bGVTdGFjayA9IG5ldyBTdHlsZUNvbnRleHRTdGFjayhzdHlsZURpY3Rpb25hcnksIGRlZmF1bHRTdHlsZSk7XHJcblx0dGhpcy5pbWFnZU1lYXN1cmUgPSBpbWFnZU1lYXN1cmU7XHJcblx0dGhpcy5zdmdNZWFzdXJlID0gc3ZnTWVhc3VyZTtcclxuXHR0aGlzLnRhYmxlTGF5b3V0cyA9IHRhYmxlTGF5b3V0cztcclxuXHR0aGlzLmltYWdlcyA9IGltYWdlcztcclxuXHR0aGlzLmF1dG9JbWFnZUluZGV4ID0gMTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1lYXN1cmVzIGFsbCBub2RlcyBhbmQgc2V0cyBtaW4vbWF4LXdpZHRoIHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIHRoZSBzZWNvbmRcclxuICogbGF5b3V0LXBhc3MuXHJcbiAqIEBwYXJhbSAge09iamVjdH0gZG9jU3RydWN0dXJlIGRvY3VtZW50LWRlZmluaXRpb24tb2JqZWN0XHJcbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICAgIGRvY3VtZW50LW1lYXN1cmVtZW50LW9iamVjdFxyXG4gKi9cclxuRG9jTWVhc3VyZS5wcm90b3R5cGUubWVhc3VyZURvY3VtZW50ID0gZnVuY3Rpb24gKGRvY1N0cnVjdHVyZSkge1xyXG5cdHJldHVybiB0aGlzLm1lYXN1cmVOb2RlKGRvY1N0cnVjdHVyZSk7XHJcbn07XHJcblxyXG5Eb2NNZWFzdXJlLnByb3RvdHlwZS5tZWFzdXJlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblxyXG5cdHZhciBzZWxmID0gdGhpcztcclxuXHJcblx0cmV0dXJuIHRoaXMuc3R5bGVTdGFjay5hdXRvKG5vZGUsIGZ1bmN0aW9uICgpIHtcclxuXHRcdC8vIFRPRE86IHJlZmFjdG9yICsgcmV0aGluayB3aGV0aGVyIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gaGFuZGxlIG1hcmdpbnNcclxuXHRcdG5vZGUuX21hcmdpbiA9IGdldE5vZGVNYXJnaW4obm9kZSk7XHJcblxyXG5cdFx0aWYgKG5vZGUuY29sdW1ucykge1xyXG5cdFx0XHRyZXR1cm4gZXh0ZW5kTWFyZ2lucyhzZWxmLm1lYXN1cmVDb2x1bW5zKG5vZGUpKTtcclxuXHRcdH0gZWxzZSBpZiAobm9kZS5zdGFjaykge1xyXG5cdFx0XHRyZXR1cm4gZXh0ZW5kTWFyZ2lucyhzZWxmLm1lYXN1cmVWZXJ0aWNhbENvbnRhaW5lcihub2RlKSk7XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUudWwpIHtcclxuXHRcdFx0cmV0dXJuIGV4dGVuZE1hcmdpbnMoc2VsZi5tZWFzdXJlVW5vcmRlcmVkTGlzdChub2RlKSk7XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUub2wpIHtcclxuXHRcdFx0cmV0dXJuIGV4dGVuZE1hcmdpbnMoc2VsZi5tZWFzdXJlT3JkZXJlZExpc3Qobm9kZSkpO1xyXG5cdFx0fSBlbHNlIGlmIChub2RlLnRhYmxlKSB7XHJcblx0XHRcdHJldHVybiBleHRlbmRNYXJnaW5zKHNlbGYubWVhc3VyZVRhYmxlKG5vZGUpKTtcclxuXHRcdH0gZWxzZSBpZiAobm9kZS50ZXh0ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuIGV4dGVuZE1hcmdpbnMoc2VsZi5tZWFzdXJlTGVhZihub2RlKSk7XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUudG9jKSB7XHJcblx0XHRcdHJldHVybiBleHRlbmRNYXJnaW5zKHNlbGYubWVhc3VyZVRvYyhub2RlKSk7XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUuaW1hZ2UpIHtcclxuXHRcdFx0cmV0dXJuIGV4dGVuZE1hcmdpbnMoc2VsZi5tZWFzdXJlSW1hZ2Uobm9kZSkpO1xyXG5cdFx0fSBlbHNlIGlmIChub2RlLnN2Zykge1xyXG5cdFx0XHRyZXR1cm4gZXh0ZW5kTWFyZ2lucyhzZWxmLm1lYXN1cmVTVkcobm9kZSkpO1xyXG5cdFx0fSBlbHNlIGlmIChub2RlLmNhbnZhcykge1xyXG5cdFx0XHRyZXR1cm4gZXh0ZW5kTWFyZ2lucyhzZWxmLm1lYXN1cmVDYW52YXMobm9kZSkpO1xyXG5cdFx0fSBlbHNlIGlmIChub2RlLnFyKSB7XHJcblx0XHRcdHJldHVybiBleHRlbmRNYXJnaW5zKHNlbGYubWVhc3VyZVFyKG5vZGUpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRocm93ICdVbnJlY29nbml6ZWQgZG9jdW1lbnQgc3RydWN0dXJlOiAnICsgSlNPTi5zdHJpbmdpZnkobm9kZSwgZm9udFN0cmluZ2lmeSk7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdGZ1bmN0aW9uIGV4dGVuZE1hcmdpbnMobm9kZSkge1xyXG5cdFx0dmFyIG1hcmdpbiA9IG5vZGUuX21hcmdpbjtcclxuXHJcblx0XHRpZiAobWFyZ2luKSB7XHJcblx0XHRcdG5vZGUuX21pbldpZHRoICs9IG1hcmdpblswXSArIG1hcmdpblsyXTtcclxuXHRcdFx0bm9kZS5fbWF4V2lkdGggKz0gbWFyZ2luWzBdICsgbWFyZ2luWzJdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBub2RlO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0Tm9kZU1hcmdpbigpIHtcclxuXHJcblx0XHRmdW5jdGlvbiBwcm9jZXNzU2luZ2xlTWFyZ2lucyhub2RlLCBjdXJyZW50TWFyZ2luKSB7XHJcblx0XHRcdGlmIChub2RlLm1hcmdpbkxlZnQgfHwgbm9kZS5tYXJnaW5Ub3AgfHwgbm9kZS5tYXJnaW5SaWdodCB8fCBub2RlLm1hcmdpbkJvdHRvbSkge1xyXG5cdFx0XHRcdHJldHVybiBbXHJcblx0XHRcdFx0XHRub2RlLm1hcmdpbkxlZnQgfHwgY3VycmVudE1hcmdpblswXSB8fCAwLFxyXG5cdFx0XHRcdFx0bm9kZS5tYXJnaW5Ub3AgfHwgY3VycmVudE1hcmdpblsxXSB8fCAwLFxyXG5cdFx0XHRcdFx0bm9kZS5tYXJnaW5SaWdodCB8fCBjdXJyZW50TWFyZ2luWzJdIHx8IDAsXHJcblx0XHRcdFx0XHRub2RlLm1hcmdpbkJvdHRvbSB8fCBjdXJyZW50TWFyZ2luWzNdIHx8IDBcclxuXHRcdFx0XHRdO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBjdXJyZW50TWFyZ2luO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIGZsYXR0ZW5TdHlsZUFycmF5KHN0eWxlQXJyYXkpIHtcclxuXHRcdFx0dmFyIGZsYXR0ZW5lZFN0eWxlcyA9IHt9O1xyXG5cdFx0XHRmb3IgKHZhciBpID0gc3R5bGVBcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG5cdFx0XHRcdHZhciBzdHlsZU5hbWUgPSBzdHlsZUFycmF5W2ldO1xyXG5cdFx0XHRcdHZhciBzdHlsZSA9IHNlbGYuc3R5bGVTdGFjay5zdHlsZURpY3Rpb25hcnlbc3R5bGVOYW1lXTtcclxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gc3R5bGUpIHtcclxuXHRcdFx0XHRcdGlmIChzdHlsZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0XHRcdGZsYXR0ZW5lZFN0eWxlc1trZXldID0gc3R5bGVba2V5XTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZsYXR0ZW5lZFN0eWxlcztcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBjb252ZXJ0TWFyZ2luKG1hcmdpbikge1xyXG5cdFx0XHRpZiAoaXNOdW1iZXIobWFyZ2luKSkge1xyXG5cdFx0XHRcdG1hcmdpbiA9IFttYXJnaW4sIG1hcmdpbiwgbWFyZ2luLCBtYXJnaW5dO1xyXG5cdFx0XHR9IGVsc2UgaWYgKGlzQXJyYXkobWFyZ2luKSkge1xyXG5cdFx0XHRcdGlmIChtYXJnaW4ubGVuZ3RoID09PSAyKSB7XHJcblx0XHRcdFx0XHRtYXJnaW4gPSBbbWFyZ2luWzBdLCBtYXJnaW5bMV0sIG1hcmdpblswXSwgbWFyZ2luWzFdXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG1hcmdpbjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgbWFyZ2luID0gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XHJcblxyXG5cdFx0aWYgKG5vZGUuc3R5bGUpIHtcclxuXHRcdFx0dmFyIHN0eWxlQXJyYXkgPSBpc0FycmF5KG5vZGUuc3R5bGUpID8gbm9kZS5zdHlsZSA6IFtub2RlLnN0eWxlXTtcclxuXHRcdFx0dmFyIGZsYXR0ZW5lZFN0eWxlQXJyYXkgPSBmbGF0dGVuU3R5bGVBcnJheShzdHlsZUFycmF5KTtcclxuXHJcblx0XHRcdGlmIChmbGF0dGVuZWRTdHlsZUFycmF5KSB7XHJcblx0XHRcdFx0bWFyZ2luID0gcHJvY2Vzc1NpbmdsZU1hcmdpbnMoZmxhdHRlbmVkU3R5bGVBcnJheSwgbWFyZ2luKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGZsYXR0ZW5lZFN0eWxlQXJyYXkubWFyZ2luKSB7XHJcblx0XHRcdFx0bWFyZ2luID0gY29udmVydE1hcmdpbihmbGF0dGVuZWRTdHlsZUFycmF5Lm1hcmdpbik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRtYXJnaW4gPSBwcm9jZXNzU2luZ2xlTWFyZ2lucyhub2RlLCBtYXJnaW4pO1xyXG5cclxuXHRcdGlmIChub2RlLm1hcmdpbikge1xyXG5cdFx0XHRtYXJnaW4gPSBjb252ZXJ0TWFyZ2luKG5vZGUubWFyZ2luKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobWFyZ2luWzBdID09PSB1bmRlZmluZWQgJiYgbWFyZ2luWzFdID09PSB1bmRlZmluZWQgJiYgbWFyZ2luWzJdID09PSB1bmRlZmluZWQgJiYgbWFyZ2luWzNdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gbWFyZ2luO1xyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcbkRvY01lYXN1cmUucHJvdG90eXBlLmNvbnZlcnRJZkJhc2U2NEltYWdlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHRpZiAoL15kYXRhOmltYWdlXFwvKGpwZWd8anBnfHBuZyk7YmFzZTY0LC8udGVzdChub2RlLmltYWdlKSkge1xyXG5cdFx0dmFyIGxhYmVsID0gJyQkcGRmbWFrZSQkJyArIHRoaXMuYXV0b0ltYWdlSW5kZXgrKztcclxuXHRcdHRoaXMuaW1hZ2VzW2xhYmVsXSA9IG5vZGUuaW1hZ2U7XHJcblx0XHRub2RlLmltYWdlID0gbGFiZWw7XHJcblx0fVxyXG59O1xyXG5cclxuRG9jTWVhc3VyZS5wcm90b3R5cGUubWVhc3VyZUltYWdlV2l0aERpbWVuc2lvbnMgPSBmdW5jdGlvbiAobm9kZSwgZGltZW5zaW9ucykge1xyXG5cdGlmIChub2RlLmZpdCkge1xyXG5cdFx0dmFyIGZhY3RvciA9IChkaW1lbnNpb25zLndpZHRoIC8gZGltZW5zaW9ucy5oZWlnaHQgPiBub2RlLmZpdFswXSAvIG5vZGUuZml0WzFdKSA/IG5vZGUuZml0WzBdIC8gZGltZW5zaW9ucy53aWR0aCA6IG5vZGUuZml0WzFdIC8gZGltZW5zaW9ucy5oZWlnaHQ7XHJcblx0XHRub2RlLl93aWR0aCA9IG5vZGUuX21pbldpZHRoID0gbm9kZS5fbWF4V2lkdGggPSBkaW1lbnNpb25zLndpZHRoICogZmFjdG9yO1xyXG5cdFx0bm9kZS5faGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQgKiBmYWN0b3I7XHJcblx0fSBlbHNlIHtcclxuXHRcdG5vZGUuX3dpZHRoID0gbm9kZS5fbWluV2lkdGggPSBub2RlLl9tYXhXaWR0aCA9IG5vZGUud2lkdGggfHwgZGltZW5zaW9ucy53aWR0aDtcclxuXHRcdG5vZGUuX2hlaWdodCA9IG5vZGUuaGVpZ2h0IHx8IChkaW1lbnNpb25zLmhlaWdodCAqIG5vZGUuX3dpZHRoIC8gZGltZW5zaW9ucy53aWR0aCk7XHJcblxyXG5cdFx0aWYgKGlzTnVtYmVyKG5vZGUubWF4V2lkdGgpICYmIG5vZGUubWF4V2lkdGggPCBub2RlLl93aWR0aCkge1xyXG5cdFx0XHRub2RlLl93aWR0aCA9IG5vZGUuX21pbldpZHRoID0gbm9kZS5fbWF4V2lkdGggPSBub2RlLm1heFdpZHRoO1xyXG5cdFx0XHRub2RlLl9oZWlnaHQgPSBub2RlLl93aWR0aCAqIGRpbWVuc2lvbnMuaGVpZ2h0IC8gZGltZW5zaW9ucy53aWR0aDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNOdW1iZXIobm9kZS5tYXhIZWlnaHQpICYmIG5vZGUubWF4SGVpZ2h0IDwgbm9kZS5faGVpZ2h0KSB7XHJcblx0XHRcdG5vZGUuX2hlaWdodCA9IG5vZGUubWF4SGVpZ2h0O1xyXG5cdFx0XHRub2RlLl93aWR0aCA9IG5vZGUuX21pbldpZHRoID0gbm9kZS5fbWF4V2lkdGggPSBub2RlLl9oZWlnaHQgKiBkaW1lbnNpb25zLndpZHRoIC8gZGltZW5zaW9ucy5oZWlnaHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzTnVtYmVyKG5vZGUubWluV2lkdGgpICYmIG5vZGUubWluV2lkdGggPiBub2RlLl93aWR0aCkge1xyXG5cdFx0XHRub2RlLl93aWR0aCA9IG5vZGUuX21pbldpZHRoID0gbm9kZS5fbWF4V2lkdGggPSBub2RlLm1pbldpZHRoO1xyXG5cdFx0XHRub2RlLl9oZWlnaHQgPSBub2RlLl93aWR0aCAqIGRpbWVuc2lvbnMuaGVpZ2h0IC8gZGltZW5zaW9ucy53aWR0aDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNOdW1iZXIobm9kZS5taW5IZWlnaHQpICYmIG5vZGUubWluSGVpZ2h0ID4gbm9kZS5faGVpZ2h0KSB7XHJcblx0XHRcdG5vZGUuX2hlaWdodCA9IG5vZGUubWluSGVpZ2h0O1xyXG5cdFx0XHRub2RlLl93aWR0aCA9IG5vZGUuX21pbldpZHRoID0gbm9kZS5fbWF4V2lkdGggPSBub2RlLl9oZWlnaHQgKiBkaW1lbnNpb25zLndpZHRoIC8gZGltZW5zaW9ucy5oZWlnaHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRub2RlLl9hbGlnbm1lbnQgPSB0aGlzLnN0eWxlU3RhY2suZ2V0UHJvcGVydHkoJ2FsaWdubWVudCcpO1xyXG59O1xyXG5cclxuRG9jTWVhc3VyZS5wcm90b3R5cGUubWVhc3VyZUltYWdlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHRpZiAodGhpcy5pbWFnZXMpIHtcclxuXHRcdHRoaXMuY29udmVydElmQmFzZTY0SW1hZ2Uobm9kZSk7XHJcblx0fVxyXG5cclxuXHR2YXIgZGltZW5zaW9ucyA9IHRoaXMuaW1hZ2VNZWFzdXJlLm1lYXN1cmVJbWFnZShub2RlLmltYWdlKTtcclxuXHJcblx0dGhpcy5tZWFzdXJlSW1hZ2VXaXRoRGltZW5zaW9ucyhub2RlLCBkaW1lbnNpb25zKTtcclxuXHJcblx0cmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG5Eb2NNZWFzdXJlLnByb3RvdHlwZS5tZWFzdXJlU1ZHID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHJcblx0dmFyIGRpbWVuc2lvbnMgPSB0aGlzLnN2Z01lYXN1cmUubWVhc3VyZVNWRyhub2RlLnN2Zyk7XHJcblxyXG5cdHRoaXMubWVhc3VyZUltYWdlV2l0aERpbWVuc2lvbnMobm9kZSwgZGltZW5zaW9ucyk7XHJcblxyXG5cdG5vZGUuZm9udCA9IHRoaXMuc3R5bGVTdGFjay5nZXRQcm9wZXJ0eSgnZm9udCcpO1xyXG5cclxuXHQvLyBzY2FsZSBTVkcgYmFzZWQgb24gZmluYWwgZGltZW5zaW9uXHJcblx0bm9kZS5zdmcgPSB0aGlzLnN2Z01lYXN1cmUud3JpdGVEaW1lbnNpb25zKG5vZGUuc3ZnLCB7XHJcblx0XHR3aWR0aDogbm9kZS5fd2lkdGgsXHJcblx0XHRoZWlnaHQ6IG5vZGUuX2hlaWdodFxyXG5cdH0pO1xyXG5cclxuXHRyZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbkRvY01lYXN1cmUucHJvdG90eXBlLm1lYXN1cmVMZWFmID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHJcblx0aWYgKG5vZGUuX3RleHRSZWYgJiYgbm9kZS5fdGV4dFJlZi5fdGV4dE5vZGVSZWYudGV4dCkge1xyXG5cdFx0bm9kZS50ZXh0ID0gbm9kZS5fdGV4dFJlZi5fdGV4dE5vZGVSZWYudGV4dDtcclxuXHR9XHJcblxyXG5cdC8vIE1ha2Ugc3VyZSBzdHlsZSBwcm9wZXJ0aWVzIG9mIHRoZSBub2RlIGl0c2VsZiBhcmUgY29uc2lkZXJlZCB3aGVuIGJ1aWxkaW5nIGlubGluZXMuXHJcblx0Ly8gV2UgY291bGQgYWxzbyBqdXN0IHBhc3MgW25vZGVdIHRvIGJ1aWxkSW5saW5lcywgYnV0IHRoYXQgZmFpbHMgZm9yIGJ1bGxldCBwb2ludHMuXHJcblx0dmFyIHN0eWxlU3RhY2sgPSB0aGlzLnN0eWxlU3RhY2suY2xvbmUoKTtcclxuXHRzdHlsZVN0YWNrLnB1c2gobm9kZSk7XHJcblxyXG5cdHZhciBkYXRhID0gdGhpcy50ZXh0VG9vbHMuYnVpbGRJbmxpbmVzKG5vZGUudGV4dCwgc3R5bGVTdGFjayk7XHJcblxyXG5cdG5vZGUuX2lubGluZXMgPSBkYXRhLml0ZW1zO1xyXG5cdG5vZGUuX21pbldpZHRoID0gZGF0YS5taW5XaWR0aDtcclxuXHRub2RlLl9tYXhXaWR0aCA9IGRhdGEubWF4V2lkdGg7XHJcblxyXG5cdHJldHVybiBub2RlO1xyXG59O1xyXG5cclxuRG9jTWVhc3VyZS5wcm90b3R5cGUubWVhc3VyZVRvYyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0aWYgKG5vZGUudG9jLnRpdGxlKSB7XHJcblx0XHRub2RlLnRvYy50aXRsZSA9IHRoaXMubWVhc3VyZU5vZGUobm9kZS50b2MudGl0bGUpO1xyXG5cdH1cclxuXHJcblx0aWYgKG5vZGUudG9jLl9pdGVtcy5sZW5ndGggPiAwKSB7XHJcblx0XHR2YXIgYm9keSA9IFtdO1xyXG5cdFx0dmFyIHRleHRTdHlsZSA9IG5vZGUudG9jLnRleHRTdHlsZSB8fCB7fTtcclxuXHRcdHZhciBudW1iZXJTdHlsZSA9IG5vZGUudG9jLm51bWJlclN0eWxlIHx8IHRleHRTdHlsZTtcclxuXHRcdHZhciB0ZXh0TWFyZ2luID0gbm9kZS50b2MudGV4dE1hcmdpbiB8fCBbMCwgMCwgMCwgMF07XHJcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUudG9jLl9pdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0dmFyIGl0ZW0gPSBub2RlLnRvYy5faXRlbXNbaV07XHJcblx0XHRcdHZhciBsaW5lU3R5bGUgPSBpdGVtLl90ZXh0Tm9kZVJlZi50b2NTdHlsZSB8fCB0ZXh0U3R5bGU7XHJcblx0XHRcdHZhciBsaW5lTWFyZ2luID0gaXRlbS5fdGV4dE5vZGVSZWYudG9jTWFyZ2luIHx8IHRleHRNYXJnaW47XHJcblx0XHRcdHZhciBsaW5lTnVtYmVyU3R5bGUgPSBpdGVtLl90ZXh0Tm9kZVJlZi50b2NOdW1iZXJTdHlsZSB8fCBudW1iZXJTdHlsZTtcclxuXHRcdFx0dmFyIGRlc3RpbmF0aW9uID0gZ2V0Tm9kZUlkKGl0ZW0uX25vZGVSZWYpO1xyXG5cdFx0XHRib2R5LnB1c2goW1xyXG5cdFx0XHRcdHsgdGV4dDogaXRlbS5fdGV4dE5vZGVSZWYudGV4dCwgbGlua1RvRGVzdGluYXRpb246IGRlc3RpbmF0aW9uLCBhbGlnbm1lbnQ6ICdsZWZ0Jywgc3R5bGU6IGxpbmVTdHlsZSwgbWFyZ2luOiBsaW5lTWFyZ2luIH0sXHJcblx0XHRcdFx0eyB0ZXh0OiAnMDAwMDAnLCBsaW5rVG9EZXN0aW5hdGlvbjogZGVzdGluYXRpb24sIGFsaWdubWVudDogJ3JpZ2h0JywgX3RvY0l0ZW1SZWY6IGl0ZW0uX25vZGVSZWYsIHN0eWxlOiBsaW5lTnVtYmVyU3R5bGUsIG1hcmdpbjogWzAsIGxpbmVNYXJnaW5bMV0sIDAsIGxpbmVNYXJnaW5bM11dIH1cclxuXHRcdFx0XSk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdG5vZGUudG9jLl90YWJsZSA9IHtcclxuXHRcdFx0dGFibGU6IHtcclxuXHRcdFx0XHRkb250QnJlYWtSb3dzOiB0cnVlLFxyXG5cdFx0XHRcdHdpZHRoczogWycqJywgJ2F1dG8nXSxcclxuXHRcdFx0XHRib2R5OiBib2R5XHJcblx0XHRcdH0sXHJcblx0XHRcdGxheW91dDogJ25vQm9yZGVycydcclxuXHRcdH07XHJcblxyXG5cdFx0bm9kZS50b2MuX3RhYmxlID0gdGhpcy5tZWFzdXJlTm9kZShub2RlLnRvYy5fdGFibGUpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG5Eb2NNZWFzdXJlLnByb3RvdHlwZS5tZWFzdXJlVmVydGljYWxDb250YWluZXIgPSBmdW5jdGlvbiAobm9kZSkge1xyXG5cdHZhciBpdGVtcyA9IG5vZGUuc3RhY2s7XHJcblxyXG5cdG5vZGUuX21pbldpZHRoID0gMDtcclxuXHRub2RlLl9tYXhXaWR0aCA9IDA7XHJcblxyXG5cdGZvciAodmFyIGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRpdGVtc1tpXSA9IHRoaXMubWVhc3VyZU5vZGUoaXRlbXNbaV0pO1xyXG5cclxuXHRcdG5vZGUuX21pbldpZHRoID0gTWF0aC5tYXgobm9kZS5fbWluV2lkdGgsIGl0ZW1zW2ldLl9taW5XaWR0aCk7XHJcblx0XHRub2RlLl9tYXhXaWR0aCA9IE1hdGgubWF4KG5vZGUuX21heFdpZHRoLCBpdGVtc1tpXS5fbWF4V2lkdGgpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG5Eb2NNZWFzdXJlLnByb3RvdHlwZS5nYXBTaXplRm9yTGlzdCA9IGZ1bmN0aW9uICgpIHtcclxuXHRyZXR1cm4gdGhpcy50ZXh0VG9vbHMuc2l6ZU9mU3RyaW5nKCc5LiAnLCB0aGlzLnN0eWxlU3RhY2spO1xyXG59O1xyXG5cclxuRG9jTWVhc3VyZS5wcm90b3R5cGUuYnVpbGRVbm9yZGVyZWRNYXJrZXIgPSBmdW5jdGlvbiAoc3R5bGVTdGFjaywgZ2FwU2l6ZSwgdHlwZSkge1xyXG5cdGZ1bmN0aW9uIGJ1aWxkRGlzYyhnYXBTaXplLCBjb2xvcikge1xyXG5cdFx0Ly8gVE9ETzogYXNjZW5kZXItYmFzZWQgY2FsY3VsYXRpb25zXHJcblx0XHR2YXIgcmFkaXVzID0gZ2FwU2l6ZS5mb250U2l6ZSAvIDY7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRjYW52YXM6IFt7XHJcblx0XHRcdFx0eDogcmFkaXVzLFxyXG5cdFx0XHRcdHk6IChnYXBTaXplLmhlaWdodCAvIGdhcFNpemUubGluZUhlaWdodCkgKyBnYXBTaXplLmRlc2NlbmRlciAtIGdhcFNpemUuZm9udFNpemUgLyAzLFxyXG5cdFx0XHRcdHIxOiByYWRpdXMsXHJcblx0XHRcdFx0cjI6IHJhZGl1cyxcclxuXHRcdFx0XHR0eXBlOiAnZWxsaXBzZScsXHJcblx0XHRcdFx0Y29sb3I6IGNvbG9yXHJcblx0XHRcdH1dXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYnVpbGRTcXVhcmUoZ2FwU2l6ZSwgY29sb3IpIHtcclxuXHRcdC8vIFRPRE86IGFzY2VuZGVyLWJhc2VkIGNhbGN1bGF0aW9uc1xyXG5cdFx0dmFyIHNpemUgPSBnYXBTaXplLmZvbnRTaXplIC8gMztcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGNhbnZhczogW3tcclxuXHRcdFx0XHR4OiAwLFxyXG5cdFx0XHRcdHk6IChnYXBTaXplLmhlaWdodCAvIGdhcFNpemUubGluZUhlaWdodCkgKyBnYXBTaXplLmRlc2NlbmRlciAtIChnYXBTaXplLmZvbnRTaXplIC8gMykgLSAoc2l6ZSAvIDIpLFxyXG5cdFx0XHRcdGg6IHNpemUsXHJcblx0XHRcdFx0dzogc2l6ZSxcclxuXHRcdFx0XHR0eXBlOiAncmVjdCcsXHJcblx0XHRcdFx0Y29sb3I6IGNvbG9yXHJcblx0XHRcdH1dXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYnVpbGRDaXJjbGUoZ2FwU2l6ZSwgY29sb3IpIHtcclxuXHRcdC8vIFRPRE86IGFzY2VuZGVyLWJhc2VkIGNhbGN1bGF0aW9uc1xyXG5cdFx0dmFyIHJhZGl1cyA9IGdhcFNpemUuZm9udFNpemUgLyA2O1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0Y2FudmFzOiBbe1xyXG5cdFx0XHRcdHg6IHJhZGl1cyxcclxuXHRcdFx0XHR5OiAoZ2FwU2l6ZS5oZWlnaHQgLyBnYXBTaXplLmxpbmVIZWlnaHQpICsgZ2FwU2l6ZS5kZXNjZW5kZXIgLSBnYXBTaXplLmZvbnRTaXplIC8gMyxcclxuXHRcdFx0XHRyMTogcmFkaXVzLFxyXG5cdFx0XHRcdHIyOiByYWRpdXMsXHJcblx0XHRcdFx0dHlwZTogJ2VsbGlwc2UnLFxyXG5cdFx0XHRcdGxpbmVDb2xvcjogY29sb3JcclxuXHRcdFx0fV1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHR2YXIgbWFya2VyO1xyXG5cdHZhciBjb2xvciA9IHN0eWxlU3RhY2suZ2V0UHJvcGVydHkoJ21hcmtlckNvbG9yJykgfHwgc3R5bGVTdGFjay5nZXRQcm9wZXJ0eSgnY29sb3InKSB8fCAnYmxhY2snO1xyXG5cclxuXHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdGNhc2UgJ2NpcmNsZSc6XHJcblx0XHRcdG1hcmtlciA9IGJ1aWxkQ2lyY2xlKGdhcFNpemUsIGNvbG9yKTtcclxuXHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0Y2FzZSAnc3F1YXJlJzpcclxuXHRcdFx0bWFya2VyID0gYnVpbGRTcXVhcmUoZ2FwU2l6ZSwgY29sb3IpO1xyXG5cdFx0XHRicmVhaztcclxuXHJcblx0XHRjYXNlICdub25lJzpcclxuXHRcdFx0bWFya2VyID0ge307XHJcblx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdGNhc2UgJ2Rpc2MnOlxyXG5cdFx0ZGVmYXVsdDpcclxuXHRcdFx0bWFya2VyID0gYnVpbGREaXNjKGdhcFNpemUsIGNvbG9yKTtcclxuXHRcdFx0YnJlYWs7XHJcblx0fVxyXG5cclxuXHRtYXJrZXIuX21pbldpZHRoID0gbWFya2VyLl9tYXhXaWR0aCA9IGdhcFNpemUud2lkdGg7XHJcblx0bWFya2VyLl9taW5IZWlnaHQgPSBtYXJrZXIuX21heEhlaWdodCA9IGdhcFNpemUuaGVpZ2h0O1xyXG5cclxuXHRyZXR1cm4gbWFya2VyO1xyXG59O1xyXG5cclxuRG9jTWVhc3VyZS5wcm90b3R5cGUuYnVpbGRPcmRlcmVkTWFya2VyID0gZnVuY3Rpb24gKGNvdW50ZXIsIHN0eWxlU3RhY2ssIHR5cGUsIHNlcGFyYXRvcikge1xyXG5cdGZ1bmN0aW9uIHByZXBhcmVBbHBoYShjb3VudGVyKSB7XHJcblx0XHRmdW5jdGlvbiB0b0FscGhhKG51bSkge1xyXG5cdFx0XHRyZXR1cm4gKG51bSA+PSAyNiA/IHRvQWxwaGEoKG51bSAvIDI2ID4+IDApIC0gMSkgOiAnJykgKyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonW251bSAlIDI2ID4+IDBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjb3VudGVyIDwgMSkge1xyXG5cdFx0XHRyZXR1cm4gY291bnRlci50b1N0cmluZygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0b0FscGhhKGNvdW50ZXIgLSAxKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHByZXBhcmVSb21hbihjb3VudGVyKSB7XHJcblx0XHRpZiAoY291bnRlciA8IDEgfHwgY291bnRlciA+IDQ5OTkpIHtcclxuXHRcdFx0cmV0dXJuIGNvdW50ZXIudG9TdHJpbmcoKTtcclxuXHRcdH1cclxuXHRcdHZhciBudW0gPSBjb3VudGVyO1xyXG5cdFx0dmFyIGxvb2t1cCA9IHsgTTogMTAwMCwgQ006IDkwMCwgRDogNTAwLCBDRDogNDAwLCBDOiAxMDAsIFhDOiA5MCwgTDogNTAsIFhMOiA0MCwgWDogMTAsIElYOiA5LCBWOiA1LCBJVjogNCwgSTogMSB9LCByb21hbiA9ICcnLCBpO1xyXG5cdFx0Zm9yIChpIGluIGxvb2t1cCkge1xyXG5cdFx0XHR3aGlsZSAobnVtID49IGxvb2t1cFtpXSkge1xyXG5cdFx0XHRcdHJvbWFuICs9IGk7XHJcblx0XHRcdFx0bnVtIC09IGxvb2t1cFtpXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJvbWFuO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcHJlcGFyZURlY2ltYWwoY291bnRlcikge1xyXG5cdFx0cmV0dXJuIGNvdW50ZXIudG9TdHJpbmcoKTtcclxuXHR9XHJcblxyXG5cdHZhciBjb3VudGVyVGV4dDtcclxuXHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdGNhc2UgJ25vbmUnOlxyXG5cdFx0XHRjb3VudGVyVGV4dCA9IG51bGw7XHJcblx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdGNhc2UgJ3VwcGVyLWFscGhhJzpcclxuXHRcdFx0Y291bnRlclRleHQgPSBwcmVwYXJlQWxwaGEoY291bnRlcikudG9VcHBlckNhc2UoKTtcclxuXHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0Y2FzZSAnbG93ZXItYWxwaGEnOlxyXG5cdFx0XHRjb3VudGVyVGV4dCA9IHByZXBhcmVBbHBoYShjb3VudGVyKTtcclxuXHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0Y2FzZSAndXBwZXItcm9tYW4nOlxyXG5cdFx0XHRjb3VudGVyVGV4dCA9IHByZXBhcmVSb21hbihjb3VudGVyKTtcclxuXHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0Y2FzZSAnbG93ZXItcm9tYW4nOlxyXG5cdFx0XHRjb3VudGVyVGV4dCA9IHByZXBhcmVSb21hbihjb3VudGVyKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRicmVhaztcclxuXHJcblx0XHRjYXNlICdkZWNpbWFsJzpcclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdGNvdW50ZXJUZXh0ID0gcHJlcGFyZURlY2ltYWwoY291bnRlcik7XHJcblx0XHRcdGJyZWFrO1xyXG5cdH1cclxuXHJcblx0aWYgKGNvdW50ZXJUZXh0ID09PSBudWxsKSB7XHJcblx0XHRyZXR1cm4ge307XHJcblx0fVxyXG5cclxuXHRpZiAoc2VwYXJhdG9yKSB7XHJcblx0XHRpZiAoaXNBcnJheShzZXBhcmF0b3IpKSB7XHJcblx0XHRcdGlmIChzZXBhcmF0b3JbMF0pIHtcclxuXHRcdFx0XHRjb3VudGVyVGV4dCA9IHNlcGFyYXRvclswXSArIGNvdW50ZXJUZXh0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoc2VwYXJhdG9yWzFdKSB7XHJcblx0XHRcdFx0Y291bnRlclRleHQgKz0gc2VwYXJhdG9yWzFdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvdW50ZXJUZXh0ICs9ICcgJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvdW50ZXJUZXh0ICs9IHNlcGFyYXRvciArICcgJztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHZhciB0ZXh0QXJyYXkgPSB7IHRleHQ6IGNvdW50ZXJUZXh0IH07XHJcblx0dmFyIG1hcmtlckNvbG9yID0gc3R5bGVTdGFjay5nZXRQcm9wZXJ0eSgnbWFya2VyQ29sb3InKTtcclxuXHRpZiAobWFya2VyQ29sb3IpIHtcclxuXHRcdHRleHRBcnJheS5jb2xvciA9IG1hcmtlckNvbG9yO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHsgX2lubGluZXM6IHRoaXMudGV4dFRvb2xzLmJ1aWxkSW5saW5lcyh0ZXh0QXJyYXksIHN0eWxlU3RhY2spLml0ZW1zIH07XHJcbn07XHJcblxyXG5Eb2NNZWFzdXJlLnByb3RvdHlwZS5tZWFzdXJlVW5vcmRlcmVkTGlzdCA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0dmFyIHN0eWxlID0gdGhpcy5zdHlsZVN0YWNrLmNsb25lKCk7XHJcblx0dmFyIGl0ZW1zID0gbm9kZS51bDtcclxuXHRub2RlLnR5cGUgPSBub2RlLnR5cGUgfHwgJ2Rpc2MnO1xyXG5cdG5vZGUuX2dhcFNpemUgPSB0aGlzLmdhcFNpemVGb3JMaXN0KCk7XHJcblx0bm9kZS5fbWluV2lkdGggPSAwO1xyXG5cdG5vZGUuX21heFdpZHRoID0gMDtcclxuXHJcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdHZhciBpdGVtID0gaXRlbXNbaV0gPSB0aGlzLm1lYXN1cmVOb2RlKGl0ZW1zW2ldKTtcclxuXHJcblx0XHRpZiAoIWl0ZW0ub2wgJiYgIWl0ZW0udWwpIHtcclxuXHRcdFx0aXRlbS5saXN0TWFya2VyID0gdGhpcy5idWlsZFVub3JkZXJlZE1hcmtlcihzdHlsZSwgbm9kZS5fZ2FwU2l6ZSwgaXRlbS5saXN0VHlwZSB8fCBub2RlLnR5cGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdG5vZGUuX21pbldpZHRoID0gTWF0aC5tYXgobm9kZS5fbWluV2lkdGgsIGl0ZW1zW2ldLl9taW5XaWR0aCArIG5vZGUuX2dhcFNpemUud2lkdGgpO1xyXG5cdFx0bm9kZS5fbWF4V2lkdGggPSBNYXRoLm1heChub2RlLl9tYXhXaWR0aCwgaXRlbXNbaV0uX21heFdpZHRoICsgbm9kZS5fZ2FwU2l6ZS53aWR0aCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbkRvY01lYXN1cmUucHJvdG90eXBlLm1lYXN1cmVPcmRlcmVkTGlzdCA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0dmFyIHN0eWxlID0gdGhpcy5zdHlsZVN0YWNrLmNsb25lKCk7XHJcblx0dmFyIGl0ZW1zID0gbm9kZS5vbDtcclxuXHRub2RlLnR5cGUgPSBub2RlLnR5cGUgfHwgJ2RlY2ltYWwnO1xyXG5cdG5vZGUuc2VwYXJhdG9yID0gbm9kZS5zZXBhcmF0b3IgfHwgJy4nO1xyXG5cdG5vZGUucmV2ZXJzZWQgPSBub2RlLnJldmVyc2VkIHx8IGZhbHNlO1xyXG5cdGlmICghaXNOdW1iZXIobm9kZS5zdGFydCkpIHtcclxuXHRcdG5vZGUuc3RhcnQgPSBub2RlLnJldmVyc2VkID8gaXRlbXMubGVuZ3RoIDogMTtcclxuXHR9XHJcblx0bm9kZS5fZ2FwU2l6ZSA9IHRoaXMuZ2FwU2l6ZUZvckxpc3QoKTtcclxuXHRub2RlLl9taW5XaWR0aCA9IDA7XHJcblx0bm9kZS5fbWF4V2lkdGggPSAwO1xyXG5cclxuXHR2YXIgY291bnRlciA9IG5vZGUuc3RhcnQ7XHJcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdHZhciBpdGVtID0gaXRlbXNbaV0gPSB0aGlzLm1lYXN1cmVOb2RlKGl0ZW1zW2ldKTtcclxuXHJcblx0XHRpZiAoIWl0ZW0ub2wgJiYgIWl0ZW0udWwpIHtcclxuXHRcdFx0dmFyIGNvdW50ZXJWYWx1ZSA9IGlzTnVtYmVyKGl0ZW0uY291bnRlcikgPyBpdGVtLmNvdW50ZXIgOiBjb3VudGVyO1xyXG5cdFx0XHRpdGVtLmxpc3RNYXJrZXIgPSB0aGlzLmJ1aWxkT3JkZXJlZE1hcmtlcihjb3VudGVyVmFsdWUsIHN0eWxlLCBpdGVtLmxpc3RUeXBlIHx8IG5vZGUudHlwZSwgbm9kZS5zZXBhcmF0b3IpO1xyXG5cdFx0XHRpZiAoaXRlbS5saXN0TWFya2VyLl9pbmxpbmVzKSB7XHJcblx0XHRcdFx0bm9kZS5fZ2FwU2l6ZS53aWR0aCA9IE1hdGgubWF4KG5vZGUuX2dhcFNpemUud2lkdGgsIGl0ZW0ubGlzdE1hcmtlci5faW5saW5lc1swXS53aWR0aCk7XHJcblx0XHRcdH1cclxuXHRcdH0gIC8vIFRPRE86IGVsc2UgLSBuZXN0ZWQgbGlzdHMgbnVtYmVyaW5nXHJcblxyXG5cdFx0bm9kZS5fbWluV2lkdGggPSBNYXRoLm1heChub2RlLl9taW5XaWR0aCwgaXRlbXNbaV0uX21pbldpZHRoKTtcclxuXHRcdG5vZGUuX21heFdpZHRoID0gTWF0aC5tYXgobm9kZS5fbWF4V2lkdGgsIGl0ZW1zW2ldLl9tYXhXaWR0aCk7XHJcblxyXG5cdFx0aWYgKG5vZGUucmV2ZXJzZWQpIHtcclxuXHRcdFx0Y291bnRlci0tO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y291bnRlcisrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bm9kZS5fbWluV2lkdGggKz0gbm9kZS5fZ2FwU2l6ZS53aWR0aDtcclxuXHRub2RlLl9tYXhXaWR0aCArPSBub2RlLl9nYXBTaXplLndpZHRoO1xyXG5cclxuXHRmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0dmFyIGl0ZW0gPSBpdGVtc1tpXTtcclxuXHRcdGlmICghaXRlbS5vbCAmJiAhaXRlbS51bCkge1xyXG5cdFx0XHRpdGVtLmxpc3RNYXJrZXIuX21pbldpZHRoID0gaXRlbS5saXN0TWFya2VyLl9tYXhXaWR0aCA9IG5vZGUuX2dhcFNpemUud2lkdGg7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbkRvY01lYXN1cmUucHJvdG90eXBlLm1lYXN1cmVDb2x1bW5zID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHR2YXIgY29sdW1ucyA9IG5vZGUuY29sdW1ucztcclxuXHRub2RlLl9nYXAgPSB0aGlzLnN0eWxlU3RhY2suZ2V0UHJvcGVydHkoJ2NvbHVtbkdhcCcpIHx8IDA7XHJcblxyXG5cdGZvciAodmFyIGkgPSAwLCBsID0gY29sdW1ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdGNvbHVtbnNbaV0gPSB0aGlzLm1lYXN1cmVOb2RlKGNvbHVtbnNbaV0pO1xyXG5cdH1cclxuXHJcblx0dmFyIG1lYXN1cmVzID0gQ29sdW1uQ2FsY3VsYXRvci5tZWFzdXJlTWluTWF4KGNvbHVtbnMpO1xyXG5cclxuXHR2YXIgbnVtR2FwcyA9IChjb2x1bW5zLmxlbmd0aCA+IDApID8gKGNvbHVtbnMubGVuZ3RoIC0gMSkgOiAwO1xyXG5cdG5vZGUuX21pbldpZHRoID0gbWVhc3VyZXMubWluICsgbm9kZS5fZ2FwICogbnVtR2FwcztcclxuXHRub2RlLl9tYXhXaWR0aCA9IG1lYXN1cmVzLm1heCArIG5vZGUuX2dhcCAqIG51bUdhcHM7XHJcblxyXG5cdHJldHVybiBub2RlO1xyXG59O1xyXG5cclxuRG9jTWVhc3VyZS5wcm90b3R5cGUubWVhc3VyZVRhYmxlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHRleHRlbmRUYWJsZVdpZHRocyhub2RlKTtcclxuXHRub2RlLl9sYXlvdXQgPSBnZXRMYXlvdXQodGhpcy50YWJsZUxheW91dHMpO1xyXG5cdG5vZGUuX29mZnNldHMgPSBnZXRPZmZzZXRzKG5vZGUuX2xheW91dCk7XHJcblxyXG5cdHZhciBjb2xTcGFucyA9IFtdO1xyXG5cdHZhciBjb2wsIHJvdywgY29scywgcm93cztcclxuXHJcblx0Zm9yIChjb2wgPSAwLCBjb2xzID0gbm9kZS50YWJsZS5ib2R5WzBdLmxlbmd0aDsgY29sIDwgY29sczsgY29sKyspIHtcclxuXHRcdHZhciBjID0gbm9kZS50YWJsZS53aWR0aHNbY29sXTtcclxuXHRcdGMuX21pbldpZHRoID0gMDtcclxuXHRcdGMuX21heFdpZHRoID0gMDtcclxuXHJcblx0XHRmb3IgKHJvdyA9IDAsIHJvd3MgPSBub2RlLnRhYmxlLmJvZHkubGVuZ3RoOyByb3cgPCByb3dzOyByb3crKykge1xyXG5cdFx0XHR2YXIgcm93RGF0YSA9IG5vZGUudGFibGUuYm9keVtyb3ddO1xyXG5cdFx0XHR2YXIgZGF0YSA9IHJvd0RhdGFbY29sXTtcclxuXHRcdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ01hbGZvcm1lZCB0YWJsZSByb3cgJywgcm93RGF0YSwgJ2luIG5vZGUgJywgbm9kZSk7XHJcblx0XHRcdFx0dGhyb3cgJ01hbGZvcm1lZCB0YWJsZSByb3csIGEgY2VsbCBpcyB1bmRlZmluZWQuJztcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZGF0YSA9PT0gbnVsbCkgeyAvLyB0cmFuc2Zvcm0gdG8gb2JqZWN0XHJcblx0XHRcdFx0ZGF0YSA9ICcnO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIWRhdGEuX3NwYW4pIHtcclxuXHRcdFx0XHRkYXRhID0gcm93RGF0YVtjb2xdID0gdGhpcy5zdHlsZVN0YWNrLmF1dG8oZGF0YSwgbWVhc3VyZUNiKHRoaXMsIGRhdGEpKTtcclxuXHJcblx0XHRcdFx0aWYgKGRhdGEuY29sU3BhbiAmJiBkYXRhLmNvbFNwYW4gPiAxKSB7XHJcblx0XHRcdFx0XHRtYXJrU3BhbnMocm93RGF0YSwgY29sLCBkYXRhLmNvbFNwYW4pO1xyXG5cdFx0XHRcdFx0Y29sU3BhbnMucHVzaCh7IGNvbDogY29sLCBzcGFuOiBkYXRhLmNvbFNwYW4sIG1pbldpZHRoOiBkYXRhLl9taW5XaWR0aCwgbWF4V2lkdGg6IGRhdGEuX21heFdpZHRoIH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjLl9taW5XaWR0aCA9IE1hdGgubWF4KGMuX21pbldpZHRoLCBkYXRhLl9taW5XaWR0aCk7XHJcblx0XHRcdFx0XHRjLl9tYXhXaWR0aCA9IE1hdGgubWF4KGMuX21heFdpZHRoLCBkYXRhLl9tYXhXaWR0aCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZGF0YS5yb3dTcGFuICYmIGRhdGEucm93U3BhbiA+IDEpIHtcclxuXHRcdFx0XHRtYXJrVlNwYW5zKG5vZGUudGFibGUsIHJvdywgY29sLCBkYXRhLnJvd1NwYW4pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRleHRlbmRXaWR0aHNGb3JDb2xTcGFucygpO1xyXG5cclxuXHR2YXIgbWVhc3VyZXMgPSBDb2x1bW5DYWxjdWxhdG9yLm1lYXN1cmVNaW5NYXgobm9kZS50YWJsZS53aWR0aHMpO1xyXG5cclxuXHRub2RlLl9taW5XaWR0aCA9IG1lYXN1cmVzLm1pbiArIG5vZGUuX29mZnNldHMudG90YWw7XHJcblx0bm9kZS5fbWF4V2lkdGggPSBtZWFzdXJlcy5tYXggKyBub2RlLl9vZmZzZXRzLnRvdGFsO1xyXG5cclxuXHRyZXR1cm4gbm9kZTtcclxuXHJcblx0ZnVuY3Rpb24gbWVhc3VyZUNiKF90aGlzLCBkYXRhKSB7XHJcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZiAoaXNPYmplY3QoZGF0YSkpIHtcclxuXHRcdFx0XHRkYXRhLmZpbGxDb2xvciA9IF90aGlzLnN0eWxlU3RhY2suZ2V0UHJvcGVydHkoJ2ZpbGxDb2xvcicpO1xyXG5cdFx0XHRcdGRhdGEuZmlsbE9wYWNpdHkgPSBfdGhpcy5zdHlsZVN0YWNrLmdldFByb3BlcnR5KCdmaWxsT3BhY2l0eScpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBfdGhpcy5tZWFzdXJlTm9kZShkYXRhKTtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRMYXlvdXQodGFibGVMYXlvdXRzKSB7XHJcblx0XHR2YXIgbGF5b3V0ID0gbm9kZS5sYXlvdXQ7XHJcblxyXG5cdFx0aWYgKGlzU3RyaW5nKGxheW91dCkpIHtcclxuXHRcdFx0bGF5b3V0ID0gdGFibGVMYXlvdXRzW2xheW91dF07XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGRlZmF1bHRMYXlvdXQgPSB7XHJcblx0XHRcdGhMaW5lV2lkdGg6IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdH0sXHJcblx0XHRcdHZMaW5lV2lkdGg6IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdH0sXHJcblx0XHRcdGhMaW5lQ29sb3I6IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuICdibGFjayc7XHJcblx0XHRcdH0sXHJcblx0XHRcdHZMaW5lQ29sb3I6IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuICdibGFjayc7XHJcblx0XHRcdH0sXHJcblx0XHRcdGhMaW5lU3R5bGU6IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH0sXHJcblx0XHRcdHZMaW5lU3R5bGU6IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH0sXHJcblx0XHRcdHBhZGRpbmdMZWZ0OiBmdW5jdGlvbiAoaSwgbm9kZSkge1xyXG5cdFx0XHRcdHJldHVybiA0O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRwYWRkaW5nUmlnaHQ6IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuIDQ7XHJcblx0XHRcdH0sXHJcblx0XHRcdHBhZGRpbmdUb3A6IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblx0XHRcdH0sXHJcblx0XHRcdHBhZGRpbmdCb3R0b206IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZpbGxDb2xvcjogZnVuY3Rpb24gKGksIG5vZGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmlsbE9wYWNpdHk6IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdH0sXHJcblx0XHRcdGRlZmF1bHRCb3JkZXI6IHRydWVcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHBhY2soZGVmYXVsdExheW91dCwgbGF5b3V0KTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldE9mZnNldHMobGF5b3V0KSB7XHJcblx0XHR2YXIgb2Zmc2V0cyA9IFtdO1xyXG5cdFx0dmFyIHRvdGFsT2Zmc2V0ID0gMDtcclxuXHRcdHZhciBwcmV2UmlnaHRQYWRkaW5nID0gMDtcclxuXHJcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUudGFibGUud2lkdGhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHR2YXIgbE9mZnNldCA9IHByZXZSaWdodFBhZGRpbmcgKyBsYXlvdXQudkxpbmVXaWR0aChpLCBub2RlKSArIGxheW91dC5wYWRkaW5nTGVmdChpLCBub2RlKTtcclxuXHRcdFx0b2Zmc2V0cy5wdXNoKGxPZmZzZXQpO1xyXG5cdFx0XHR0b3RhbE9mZnNldCArPSBsT2Zmc2V0O1xyXG5cdFx0XHRwcmV2UmlnaHRQYWRkaW5nID0gbGF5b3V0LnBhZGRpbmdSaWdodChpLCBub2RlKTtcclxuXHRcdH1cclxuXHJcblx0XHR0b3RhbE9mZnNldCArPSBwcmV2UmlnaHRQYWRkaW5nICsgbGF5b3V0LnZMaW5lV2lkdGgobm9kZS50YWJsZS53aWR0aHMubGVuZ3RoLCBub2RlKTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR0b3RhbDogdG90YWxPZmZzZXQsXHJcblx0XHRcdG9mZnNldHM6IG9mZnNldHNcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBleHRlbmRXaWR0aHNGb3JDb2xTcGFucygpIHtcclxuXHRcdHZhciBxLCBqO1xyXG5cclxuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY29sU3BhbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdHZhciBzcGFuID0gY29sU3BhbnNbaV07XHJcblxyXG5cdFx0XHR2YXIgY3VycmVudE1pbk1heCA9IGdldE1pbk1heChzcGFuLmNvbCwgc3Bhbi5zcGFuLCBub2RlLl9vZmZzZXRzKTtcclxuXHRcdFx0dmFyIG1pbkRpZmZlcmVuY2UgPSBzcGFuLm1pbldpZHRoIC0gY3VycmVudE1pbk1heC5taW5XaWR0aDtcclxuXHRcdFx0dmFyIG1heERpZmZlcmVuY2UgPSBzcGFuLm1heFdpZHRoIC0gY3VycmVudE1pbk1heC5tYXhXaWR0aDtcclxuXHJcblx0XHRcdGlmIChtaW5EaWZmZXJlbmNlID4gMCkge1xyXG5cdFx0XHRcdHEgPSBtaW5EaWZmZXJlbmNlIC8gc3Bhbi5zcGFuO1xyXG5cclxuXHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgc3Bhbi5zcGFuOyBqKyspIHtcclxuXHRcdFx0XHRcdG5vZGUudGFibGUud2lkdGhzW3NwYW4uY29sICsgal0uX21pbldpZHRoICs9IHE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAobWF4RGlmZmVyZW5jZSA+IDApIHtcclxuXHRcdFx0XHRxID0gbWF4RGlmZmVyZW5jZSAvIHNwYW4uc3BhbjtcclxuXHJcblx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IHNwYW4uc3BhbjsgaisrKSB7XHJcblx0XHRcdFx0XHRub2RlLnRhYmxlLndpZHRoc1tzcGFuLmNvbCArIGpdLl9tYXhXaWR0aCArPSBxO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0TWluTWF4KGNvbCwgc3Bhbiwgb2Zmc2V0cykge1xyXG5cdFx0dmFyIHJlc3VsdCA9IHsgbWluV2lkdGg6IDAsIG1heFdpZHRoOiAwIH07XHJcblxyXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzcGFuOyBpKyspIHtcclxuXHRcdFx0cmVzdWx0Lm1pbldpZHRoICs9IG5vZGUudGFibGUud2lkdGhzW2NvbCArIGldLl9taW5XaWR0aCArIChpID8gb2Zmc2V0cy5vZmZzZXRzW2NvbCArIGldIDogMCk7XHJcblx0XHRcdHJlc3VsdC5tYXhXaWR0aCArPSBub2RlLnRhYmxlLndpZHRoc1tjb2wgKyBpXS5fbWF4V2lkdGggKyAoaSA/IG9mZnNldHMub2Zmc2V0c1tjb2wgKyBpXSA6IDApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBtYXJrU3BhbnMocm93RGF0YSwgY29sLCBzcGFuKSB7XHJcblx0XHRmb3IgKHZhciBpID0gMTsgaSA8IHNwYW47IGkrKykge1xyXG5cdFx0XHRyb3dEYXRhW2NvbCArIGldID0ge1xyXG5cdFx0XHRcdF9zcGFuOiB0cnVlLFxyXG5cdFx0XHRcdF9taW5XaWR0aDogMCxcclxuXHRcdFx0XHRfbWF4V2lkdGg6IDAsXHJcblx0XHRcdFx0cm93U3Bhbjogcm93RGF0YVtjb2xdLnJvd1NwYW5cclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIG1hcmtWU3BhbnModGFibGUsIHJvdywgY29sLCBzcGFuKSB7XHJcblx0XHRmb3IgKHZhciBpID0gMTsgaSA8IHNwYW47IGkrKykge1xyXG5cdFx0XHR0YWJsZS5ib2R5W3JvdyArIGldW2NvbF0gPSB7XHJcblx0XHRcdFx0X3NwYW46IHRydWUsXHJcblx0XHRcdFx0X21pbldpZHRoOiAwLFxyXG5cdFx0XHRcdF9tYXhXaWR0aDogMCxcclxuXHRcdFx0XHRmaWxsQ29sb3I6IHRhYmxlLmJvZHlbcm93XVtjb2xdLmZpbGxDb2xvcixcclxuXHRcdFx0XHRmaWxsT3BhY2l0eTogdGFibGUuYm9keVtyb3ddW2NvbF0uZmlsbE9wYWNpdHlcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGV4dGVuZFRhYmxlV2lkdGhzKG5vZGUpIHtcclxuXHRcdGlmICghbm9kZS50YWJsZS53aWR0aHMpIHtcclxuXHRcdFx0bm9kZS50YWJsZS53aWR0aHMgPSAnYXV0byc7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzU3RyaW5nKG5vZGUudGFibGUud2lkdGhzKSkge1xyXG5cdFx0XHRub2RlLnRhYmxlLndpZHRocyA9IFtub2RlLnRhYmxlLndpZHRoc107XHJcblxyXG5cdFx0XHR3aGlsZSAobm9kZS50YWJsZS53aWR0aHMubGVuZ3RoIDwgbm9kZS50YWJsZS5ib2R5WzBdLmxlbmd0aCkge1xyXG5cdFx0XHRcdG5vZGUudGFibGUud2lkdGhzLnB1c2gobm9kZS50YWJsZS53aWR0aHNbbm9kZS50YWJsZS53aWR0aHMubGVuZ3RoIC0gMV0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBub2RlLnRhYmxlLndpZHRocy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0dmFyIHcgPSBub2RlLnRhYmxlLndpZHRoc1tpXTtcclxuXHRcdFx0aWYgKGlzTnVtYmVyKHcpIHx8IGlzU3RyaW5nKHcpKSB7XHJcblx0XHRcdFx0bm9kZS50YWJsZS53aWR0aHNbaV0gPSB7IHdpZHRoOiB3IH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG5Eb2NNZWFzdXJlLnByb3RvdHlwZS5tZWFzdXJlQ2FudmFzID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHR2YXIgdyA9IDAsIGggPSAwO1xyXG5cclxuXHRmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUuY2FudmFzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0dmFyIHZlY3RvciA9IG5vZGUuY2FudmFzW2ldO1xyXG5cclxuXHRcdHN3aXRjaCAodmVjdG9yLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZWxsaXBzZSc6XHJcblx0XHRcdFx0dyA9IE1hdGgubWF4KHcsIHZlY3Rvci54ICsgdmVjdG9yLnIxKTtcclxuXHRcdFx0XHRoID0gTWF0aC5tYXgoaCwgdmVjdG9yLnkgKyB2ZWN0b3IucjIpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdyZWN0JzpcclxuXHRcdFx0XHR3ID0gTWF0aC5tYXgodywgdmVjdG9yLnggKyB2ZWN0b3Iudyk7XHJcblx0XHRcdFx0aCA9IE1hdGgubWF4KGgsIHZlY3Rvci55ICsgdmVjdG9yLmgpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdsaW5lJzpcclxuXHRcdFx0XHR3ID0gTWF0aC5tYXgodywgdmVjdG9yLngxLCB2ZWN0b3IueDIpO1xyXG5cdFx0XHRcdGggPSBNYXRoLm1heChoLCB2ZWN0b3IueTEsIHZlY3Rvci55Mik7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ3BvbHlsaW5lJzpcclxuXHRcdFx0XHRmb3IgKHZhciBpMiA9IDAsIGwyID0gdmVjdG9yLnBvaW50cy5sZW5ndGg7IGkyIDwgbDI7IGkyKyspIHtcclxuXHRcdFx0XHRcdHcgPSBNYXRoLm1heCh3LCB2ZWN0b3IucG9pbnRzW2kyXS54KTtcclxuXHRcdFx0XHRcdGggPSBNYXRoLm1heChoLCB2ZWN0b3IucG9pbnRzW2kyXS55KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRub2RlLl9taW5XaWR0aCA9IG5vZGUuX21heFdpZHRoID0gdztcclxuXHRub2RlLl9taW5IZWlnaHQgPSBub2RlLl9tYXhIZWlnaHQgPSBoO1xyXG5cdG5vZGUuX2FsaWdubWVudCA9IHRoaXMuc3R5bGVTdGFjay5nZXRQcm9wZXJ0eSgnYWxpZ25tZW50Jyk7XHJcblxyXG5cdHJldHVybiBub2RlO1xyXG59O1xyXG5cclxuRG9jTWVhc3VyZS5wcm90b3R5cGUubWVhc3VyZVFyID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHRub2RlID0gcXJFbmNvZGVyLm1lYXN1cmUobm9kZSk7XHJcblx0bm9kZS5fYWxpZ25tZW50ID0gdGhpcy5zdHlsZVN0YWNrLmdldFByb3BlcnR5KCdhbGlnbm1lbnQnKTtcclxuXHRyZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRG9jTWVhc3VyZTtcclxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0ODg5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogcHJvdmlkZWQgZGVwZW5kZW5jeSAqLyB2YXIgQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODIzKVtcIkJ1ZmZlclwiXTtcblxyXG5cclxudmFyIGlzU3RyaW5nID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNTdHJpbmcpO1xyXG52YXIgaXNOdW1iZXIgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc051bWJlcik7XHJcbnZhciBpc0Jvb2xlYW4gPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc0Jvb2xlYW4pO1xyXG52YXIgaXNBcnJheSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzQXJyYXkpO1xyXG52YXIgaXNVbmRlZmluZWQgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc1VuZGVmaW5lZCk7XHJcbnZhciBmb250U3RyaW5naWZ5ID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuZm9udFN0cmluZ2lmeSk7XHJcblxyXG5mdW5jdGlvbiBEb2NQcmVwcm9jZXNzb3IoKSB7XHJcblxyXG59XHJcblxyXG5Eb2NQcmVwcm9jZXNzb3IucHJvdG90eXBlLnByZXByb2Nlc3NEb2N1bWVudCA9IGZ1bmN0aW9uIChkb2NTdHJ1Y3R1cmUpIHtcclxuXHR0aGlzLnBhcmVudE5vZGUgPSBudWxsO1xyXG5cdHRoaXMudG9jcyA9IFtdO1xyXG5cdHRoaXMubm9kZVJlZmVyZW5jZXMgPSBbXTtcclxuXHRyZXR1cm4gdGhpcy5wcmVwcm9jZXNzTm9kZShkb2NTdHJ1Y3R1cmUpO1xyXG59O1xyXG5cclxuRG9jUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5wcmVwcm9jZXNzTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0Ly8gZXhwYW5kIHNob3J0Y3V0cyBhbmQgY2FzdGluZyB2YWx1ZXNcclxuXHRpZiAoaXNBcnJheShub2RlKSkge1xyXG5cdFx0bm9kZSA9IHsgc3RhY2s6IG5vZGUgfTtcclxuXHR9IGVsc2UgaWYgKGlzU3RyaW5nKG5vZGUpKSB7XHJcblx0XHRub2RlID0geyB0ZXh0OiBub2RlIH07XHJcblx0fSBlbHNlIGlmIChpc051bWJlcihub2RlKSB8fCBpc0Jvb2xlYW4obm9kZSkpIHtcclxuXHRcdG5vZGUgPSB7IHRleHQ6IG5vZGUudG9TdHJpbmcoKSB9O1xyXG5cdH0gZWxzZSBpZiAobm9kZSA9PT0gdW5kZWZpbmVkIHx8IG5vZGUgPT09IG51bGwpIHtcclxuXHRcdG5vZGUgPSB7IHRleHQ6ICcnIH07XHJcblx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhub2RlKS5sZW5ndGggPT09IDApIHsgLy8gZW1wdHkgb2JqZWN0XHJcblx0XHRub2RlID0geyB0ZXh0OiAnJyB9O1xyXG5cdH0gZWxzZSBpZiAoJ3RleHQnIGluIG5vZGUgJiYgKG5vZGUudGV4dCA9PT0gdW5kZWZpbmVkIHx8IG5vZGUudGV4dCA9PT0gbnVsbCkpIHtcclxuXHRcdG5vZGUudGV4dCA9ICcnO1xyXG5cdH1cclxuXHJcblx0aWYgKG5vZGUuY29sdW1ucykge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJlcHJvY2Vzc0NvbHVtbnMobm9kZSk7XHJcblx0fSBlbHNlIGlmIChub2RlLnN0YWNrKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcmVwcm9jZXNzVmVydGljYWxDb250YWluZXIobm9kZSk7XHJcblx0fSBlbHNlIGlmIChub2RlLnVsKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcmVwcm9jZXNzTGlzdChub2RlKTtcclxuXHR9IGVsc2UgaWYgKG5vZGUub2wpIHtcclxuXHRcdHJldHVybiB0aGlzLnByZXByb2Nlc3NMaXN0KG5vZGUpO1xyXG5cdH0gZWxzZSBpZiAobm9kZS50YWJsZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJlcHJvY2Vzc1RhYmxlKG5vZGUpO1xyXG5cdH0gZWxzZSBpZiAobm9kZS50ZXh0ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdHJldHVybiB0aGlzLnByZXByb2Nlc3NUZXh0KG5vZGUpO1xyXG5cdH0gZWxzZSBpZiAobm9kZS50b2MpIHtcclxuXHRcdHJldHVybiB0aGlzLnByZXByb2Nlc3NUb2Mobm9kZSk7XHJcblx0fSBlbHNlIGlmIChub2RlLmltYWdlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcmVwcm9jZXNzSW1hZ2Uobm9kZSk7XHJcblx0fSBlbHNlIGlmIChub2RlLnN2Zykge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJlcHJvY2Vzc1NWRyhub2RlKTtcclxuXHR9IGVsc2UgaWYgKG5vZGUuY2FudmFzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcmVwcm9jZXNzQ2FudmFzKG5vZGUpO1xyXG5cdH0gZWxzZSBpZiAobm9kZS5xcikge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJlcHJvY2Vzc1FyKG5vZGUpO1xyXG5cdH0gZWxzZSBpZiAobm9kZS5wYWdlUmVmZXJlbmNlIHx8IG5vZGUudGV4dFJlZmVyZW5jZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJlcHJvY2Vzc1RleHQobm9kZSk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHRocm93ICdVbnJlY29nbml6ZWQgZG9jdW1lbnQgc3RydWN0dXJlOiAnICsgSlNPTi5zdHJpbmdpZnkobm9kZSwgZm9udFN0cmluZ2lmeSk7XHJcblx0fVxyXG59O1xyXG5cclxuRG9jUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5wcmVwcm9jZXNzQ29sdW1ucyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0dmFyIGNvbHVtbnMgPSBub2RlLmNvbHVtbnM7XHJcblxyXG5cdGZvciAodmFyIGkgPSAwLCBsID0gY29sdW1ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdGNvbHVtbnNbaV0gPSB0aGlzLnByZXByb2Nlc3NOb2RlKGNvbHVtbnNbaV0pO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG5Eb2NQcmVwcm9jZXNzb3IucHJvdG90eXBlLnByZXByb2Nlc3NWZXJ0aWNhbENvbnRhaW5lciA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0dmFyIGl0ZW1zID0gbm9kZS5zdGFjaztcclxuXHJcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdGl0ZW1zW2ldID0gdGhpcy5wcmVwcm9jZXNzTm9kZShpdGVtc1tpXSk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbkRvY1ByZXByb2Nlc3Nvci5wcm90b3R5cGUucHJlcHJvY2Vzc0xpc3QgPSBmdW5jdGlvbiAobm9kZSkge1xyXG5cdHZhciBpdGVtcyA9IG5vZGUudWwgfHwgbm9kZS5vbDtcclxuXHJcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdGl0ZW1zW2ldID0gdGhpcy5wcmVwcm9jZXNzTm9kZShpdGVtc1tpXSk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbkRvY1ByZXByb2Nlc3Nvci5wcm90b3R5cGUucHJlcHJvY2Vzc1RhYmxlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHR2YXIgY29sLCByb3csIGNvbHMsIHJvd3M7XHJcblxyXG5cdGZvciAoY29sID0gMCwgY29scyA9IG5vZGUudGFibGUuYm9keVswXS5sZW5ndGg7IGNvbCA8IGNvbHM7IGNvbCsrKSB7XHJcblx0XHRmb3IgKHJvdyA9IDAsIHJvd3MgPSBub2RlLnRhYmxlLmJvZHkubGVuZ3RoOyByb3cgPCByb3dzOyByb3crKykge1xyXG5cdFx0XHR2YXIgcm93RGF0YSA9IG5vZGUudGFibGUuYm9keVtyb3ddO1xyXG5cdFx0XHR2YXIgZGF0YSA9IHJvd0RhdGFbY29sXTtcclxuXHRcdFx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGlmIChkYXRhID09PSBudWxsKSB7IC8vIHRyYW5zZm9ybSB0byBvYmplY3RcclxuXHRcdFx0XHRcdGRhdGEgPSAnJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCFkYXRhLl9zcGFuKSB7XHJcblx0XHRcdFx0XHRyb3dEYXRhW2NvbF0gPSB0aGlzLnByZXByb2Nlc3NOb2RlKGRhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG5Eb2NQcmVwcm9jZXNzb3IucHJvdG90eXBlLnByZXByb2Nlc3NUZXh0ID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHRpZiAobm9kZS50b2NJdGVtKSB7XHJcblx0XHRpZiAoIWlzQXJyYXkobm9kZS50b2NJdGVtKSkge1xyXG5cdFx0XHRub2RlLnRvY0l0ZW0gPSBbbm9kZS50b2NJdGVtXTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUudG9jSXRlbS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0aWYgKCFpc1N0cmluZyhub2RlLnRvY0l0ZW1baV0pKSB7XHJcblx0XHRcdFx0bm9kZS50b2NJdGVtW2ldID0gJ19kZWZhdWx0Xyc7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciB0b2NJdGVtSWQgPSBub2RlLnRvY0l0ZW1baV07XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMudG9jc1t0b2NJdGVtSWRdKSB7XHJcblx0XHRcdFx0dGhpcy50b2NzW3RvY0l0ZW1JZF0gPSB7IHRvYzogeyBfaXRlbXM6IFtdLCBfcHNldWRvOiB0cnVlIH0gfTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFub2RlLmlkKSB7XHJcblx0XHRcdFx0bm9kZS5pZCA9ICd0b2MtJyArIHRvY0l0ZW1JZCArICctJyArIHRoaXMudG9jc1t0b2NJdGVtSWRdLnRvYy5faXRlbXMubGVuZ3RoO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgdG9jSXRlbVJlZiA9IHtcclxuXHRcdFx0XHRfbm9kZVJlZjogdGhpcy5fZ2V0Tm9kZUZvck5vZGVSZWYobm9kZSksXHJcblx0XHRcdFx0X3RleHROb2RlUmVmOiBub2RlXHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMudG9jc1t0b2NJdGVtSWRdLnRvYy5faXRlbXMucHVzaCh0b2NJdGVtUmVmKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmIChub2RlLmlkKSB7XHJcblx0XHRpZiAodGhpcy5ub2RlUmVmZXJlbmNlc1tub2RlLmlkXSkge1xyXG5cdFx0XHRpZiAoIXRoaXMubm9kZVJlZmVyZW5jZXNbbm9kZS5pZF0uX3BzZXVkbykge1xyXG5cdFx0XHRcdHRocm93IFwiTm9kZSBpZCAnXCIgKyBub2RlLmlkICsgXCInIGFscmVhZHkgZXhpc3RzXCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMubm9kZVJlZmVyZW5jZXNbbm9kZS5pZF0uX25vZGVSZWYgPSB0aGlzLl9nZXROb2RlRm9yTm9kZVJlZihub2RlKTtcclxuXHRcdFx0dGhpcy5ub2RlUmVmZXJlbmNlc1tub2RlLmlkXS5fdGV4dE5vZGVSZWYgPSBub2RlO1xyXG5cdFx0XHR0aGlzLm5vZGVSZWZlcmVuY2VzW25vZGUuaWRdLl9wc2V1ZG8gPSBmYWxzZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMubm9kZVJlZmVyZW5jZXNbbm9kZS5pZF0gPSB7XHJcblx0XHRcdFx0X25vZGVSZWY6IHRoaXMuX2dldE5vZGVGb3JOb2RlUmVmKG5vZGUpLFxyXG5cdFx0XHRcdF90ZXh0Tm9kZVJlZjogbm9kZVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKG5vZGUucGFnZVJlZmVyZW5jZSkge1xyXG5cdFx0aWYgKCF0aGlzLm5vZGVSZWZlcmVuY2VzW25vZGUucGFnZVJlZmVyZW5jZV0pIHtcclxuXHRcdFx0dGhpcy5ub2RlUmVmZXJlbmNlc1tub2RlLnBhZ2VSZWZlcmVuY2VdID0ge1xyXG5cdFx0XHRcdF9ub2RlUmVmOiB7fSxcclxuXHRcdFx0XHRfdGV4dE5vZGVSZWY6IHt9LFxyXG5cdFx0XHRcdF9wc2V1ZG86IHRydWVcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdG5vZGUudGV4dCA9ICcwMDAwMCc7XHJcblx0XHRub2RlLmxpbmtUb0Rlc3RpbmF0aW9uID0gbm9kZS5wYWdlUmVmZXJlbmNlO1xyXG5cdFx0bm9kZS5fcGFnZVJlZiA9IHRoaXMubm9kZVJlZmVyZW5jZXNbbm9kZS5wYWdlUmVmZXJlbmNlXTtcclxuXHR9XHJcblxyXG5cdGlmIChub2RlLnRleHRSZWZlcmVuY2UpIHtcclxuXHRcdGlmICghdGhpcy5ub2RlUmVmZXJlbmNlc1tub2RlLnRleHRSZWZlcmVuY2VdKSB7XHJcblx0XHRcdHRoaXMubm9kZVJlZmVyZW5jZXNbbm9kZS50ZXh0UmVmZXJlbmNlXSA9IHsgX25vZGVSZWY6IHt9LCBfcHNldWRvOiB0cnVlIH07XHJcblx0XHR9XHJcblxyXG5cdFx0bm9kZS50ZXh0ID0gJyc7XHJcblx0XHRub2RlLmxpbmtUb0Rlc3RpbmF0aW9uID0gbm9kZS50ZXh0UmVmZXJlbmNlO1xyXG5cdFx0bm9kZS5fdGV4dFJlZiA9IHRoaXMubm9kZVJlZmVyZW5jZXNbbm9kZS50ZXh0UmVmZXJlbmNlXTtcclxuXHR9XHJcblxyXG5cdGlmIChub2RlLnRleHQgJiYgbm9kZS50ZXh0LnRleHQpIHtcclxuXHRcdG5vZGUudGV4dCA9IFt0aGlzLnByZXByb2Nlc3NOb2RlKG5vZGUudGV4dCldO1xyXG5cdH0gZWxzZSBpZiAoaXNBcnJheShub2RlLnRleHQpKSB7XHJcblx0XHR2YXIgaXNTZXRQYXJlbnROb2RlID0gZmFsc2U7XHJcblx0XHRpZiAodGhpcy5wYXJlbnROb2RlID09PSBudWxsKSB7XHJcblx0XHRcdHRoaXMucGFyZW50Tm9kZSA9IG5vZGU7XHJcblx0XHRcdGlzU2V0UGFyZW50Tm9kZSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBub2RlLnRleHQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdG5vZGUudGV4dFtpXSA9IHRoaXMucHJlcHJvY2Vzc05vZGUobm9kZS50ZXh0W2ldKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNTZXRQYXJlbnROb2RlKSB7XHJcblx0XHRcdHRoaXMucGFyZW50Tm9kZSA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbkRvY1ByZXByb2Nlc3Nvci5wcm90b3R5cGUucHJlcHJvY2Vzc1RvYyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0aWYgKCFub2RlLnRvYy5pZCkge1xyXG5cdFx0bm9kZS50b2MuaWQgPSAnX2RlZmF1bHRfJztcclxuXHR9XHJcblxyXG5cdG5vZGUudG9jLnRpdGxlID0gbm9kZS50b2MudGl0bGUgPyB0aGlzLnByZXByb2Nlc3NOb2RlKG5vZGUudG9jLnRpdGxlKSA6IG51bGw7XHJcblx0bm9kZS50b2MuX2l0ZW1zID0gW107XHJcblxyXG5cdGlmICh0aGlzLnRvY3Nbbm9kZS50b2MuaWRdKSB7XHJcblx0XHRpZiAoIXRoaXMudG9jc1tub2RlLnRvYy5pZF0udG9jLl9wc2V1ZG8pIHtcclxuXHRcdFx0dGhyb3cgXCJUT0MgJ1wiICsgbm9kZS50b2MuaWQgKyBcIicgYWxyZWFkeSBleGlzdHNcIjtcclxuXHRcdH1cclxuXHJcblx0XHRub2RlLnRvYy5faXRlbXMgPSB0aGlzLnRvY3Nbbm9kZS50b2MuaWRdLnRvYy5faXRlbXM7XHJcblx0fVxyXG5cclxuXHR0aGlzLnRvY3Nbbm9kZS50b2MuaWRdID0gbm9kZTtcclxuXHJcblx0cmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG5Eb2NQcmVwcm9jZXNzb3IucHJvdG90eXBlLnByZXByb2Nlc3NJbWFnZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0aWYgKCFpc1VuZGVmaW5lZChub2RlLmltYWdlLnR5cGUpICYmICFpc1VuZGVmaW5lZChub2RlLmltYWdlLmRhdGEpICYmIChub2RlLmltYWdlLnR5cGUgPT09ICdCdWZmZXInKSAmJiBpc0FycmF5KG5vZGUuaW1hZ2UuZGF0YSkpIHtcclxuXHRcdG5vZGUuaW1hZ2UgPSBCdWZmZXIuZnJvbShub2RlLmltYWdlLmRhdGEpO1xyXG5cdH1cclxuXHRyZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbkRvY1ByZXByb2Nlc3Nvci5wcm90b3R5cGUucHJlcHJvY2Vzc1NWRyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0cmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG5Eb2NQcmVwcm9jZXNzb3IucHJvdG90eXBlLnByZXByb2Nlc3NDYW52YXMgPSBmdW5jdGlvbiAobm9kZSkge1xyXG5cdHJldHVybiBub2RlO1xyXG59O1xyXG5cclxuRG9jUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5wcmVwcm9jZXNzUXIgPSBmdW5jdGlvbiAobm9kZSkge1xyXG5cdHJldHVybiBub2RlO1xyXG59O1xyXG5cclxuRG9jUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5fZ2V0Tm9kZUZvck5vZGVSZWYgPSBmdW5jdGlvbiAobm9kZSkge1xyXG5cdGlmICh0aGlzLnBhcmVudE5vZGUpIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcmVudE5vZGU7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbm9kZTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEb2NQcmVwcm9jZXNzb3I7XHJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzg1ODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxyXG5cclxudmFyIFRyYXZlcnNhbFRyYWNrZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1MzcpO1xyXG52YXIgaXNTdHJpbmcgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc1N0cmluZyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBEb2N1bWVudENvbnRleHQgLSBhIHN0b3JlIGZvciBjdXJyZW50IHgsIHkgcG9zaXRpb25zIGFuZCBhdmFpbGFibGUgd2lkdGgvaGVpZ2h0LlxyXG4gKiBJdCBmYWNpbGl0YXRlcyBjb2x1bW4gZGl2aXNpb25zIGFuZCB2ZXJ0aWNhbCBzeW5jXHJcbiAqL1xyXG5mdW5jdGlvbiBEb2N1bWVudENvbnRleHQocGFnZVNpemUsIHBhZ2VNYXJnaW5zKSB7XHJcblx0dGhpcy5wYWdlcyA9IFtdO1xyXG5cclxuXHR0aGlzLnBhZ2VNYXJnaW5zID0gcGFnZU1hcmdpbnM7XHJcblxyXG5cdHRoaXMueCA9IHBhZ2VNYXJnaW5zLmxlZnQ7XHJcblx0dGhpcy5hdmFpbGFibGVXaWR0aCA9IHBhZ2VTaXplLndpZHRoIC0gcGFnZU1hcmdpbnMubGVmdCAtIHBhZ2VNYXJnaW5zLnJpZ2h0O1xyXG5cdHRoaXMuYXZhaWxhYmxlSGVpZ2h0ID0gMDtcclxuXHR0aGlzLnBhZ2UgPSAtMTtcclxuXHJcblx0dGhpcy5zbmFwc2hvdHMgPSBbXTtcclxuXHJcblx0dGhpcy5lbmRpbmdDZWxsID0gbnVsbDtcclxuXHJcblx0dGhpcy50cmFja2VyID0gbmV3IFRyYXZlcnNhbFRyYWNrZXIoKTtcclxuXHJcblx0dGhpcy5iYWNrZ3JvdW5kTGVuZ3RoID0gW107XHJcblxyXG5cdHRoaXMuYWRkUGFnZShwYWdlU2l6ZSk7XHJcbn1cclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUuYmVnaW5Db2x1bW5Hcm91cCA9IGZ1bmN0aW9uICgpIHtcclxuXHR0aGlzLnNuYXBzaG90cy5wdXNoKHtcclxuXHRcdHg6IHRoaXMueCxcclxuXHRcdHk6IHRoaXMueSxcclxuXHRcdGF2YWlsYWJsZUhlaWdodDogdGhpcy5hdmFpbGFibGVIZWlnaHQsXHJcblx0XHRhdmFpbGFibGVXaWR0aDogdGhpcy5hdmFpbGFibGVXaWR0aCxcclxuXHRcdHBhZ2U6IHRoaXMucGFnZSxcclxuXHRcdGJvdHRvbU1vc3Q6IHtcclxuXHRcdFx0eDogdGhpcy54LFxyXG5cdFx0XHR5OiB0aGlzLnksXHJcblx0XHRcdGF2YWlsYWJsZUhlaWdodDogdGhpcy5hdmFpbGFibGVIZWlnaHQsXHJcblx0XHRcdGF2YWlsYWJsZVdpZHRoOiB0aGlzLmF2YWlsYWJsZVdpZHRoLFxyXG5cdFx0XHRwYWdlOiB0aGlzLnBhZ2VcclxuXHRcdH0sXHJcblx0XHRlbmRpbmdDZWxsOiB0aGlzLmVuZGluZ0NlbGwsXHJcblx0XHRsYXN0Q29sdW1uV2lkdGg6IHRoaXMubGFzdENvbHVtbldpZHRoXHJcblx0fSk7XHJcblxyXG5cdHRoaXMubGFzdENvbHVtbldpZHRoID0gMDtcclxufTtcclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUuYmVnaW5Db2x1bW4gPSBmdW5jdGlvbiAod2lkdGgsIG9mZnNldCwgZW5kaW5nQ2VsbCkge1xyXG5cdHZhciBzYXZlZCA9IHRoaXMuc25hcHNob3RzW3RoaXMuc25hcHNob3RzLmxlbmd0aCAtIDFdO1xyXG5cclxuXHR0aGlzLmNhbGN1bGF0ZUJvdHRvbU1vc3Qoc2F2ZWQpO1xyXG5cclxuXHR0aGlzLmVuZGluZ0NlbGwgPSBlbmRpbmdDZWxsO1xyXG5cdHRoaXMucGFnZSA9IHNhdmVkLnBhZ2U7XHJcblx0dGhpcy54ID0gdGhpcy54ICsgdGhpcy5sYXN0Q29sdW1uV2lkdGggKyAob2Zmc2V0IHx8IDApO1xyXG5cdHRoaXMueSA9IHNhdmVkLnk7XHJcblx0dGhpcy5hdmFpbGFibGVXaWR0aCA9IHdpZHRoO1x0Ly9zYXZlZC5hdmFpbGFibGVXaWR0aCAtIG9mZnNldDtcclxuXHR0aGlzLmF2YWlsYWJsZUhlaWdodCA9IHNhdmVkLmF2YWlsYWJsZUhlaWdodDtcclxuXHJcblx0dGhpcy5sYXN0Q29sdW1uV2lkdGggPSB3aWR0aDtcclxufTtcclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUuY2FsY3VsYXRlQm90dG9tTW9zdCA9IGZ1bmN0aW9uIChkZXN0Q29udGV4dCkge1xyXG5cdGlmICh0aGlzLmVuZGluZ0NlbGwpIHtcclxuXHRcdHRoaXMuc2F2ZUNvbnRleHRJbkVuZGluZ0NlbGwodGhpcy5lbmRpbmdDZWxsKTtcclxuXHRcdHRoaXMuZW5kaW5nQ2VsbCA9IG51bGw7XHJcblx0fSBlbHNlIHtcclxuXHRcdGRlc3RDb250ZXh0LmJvdHRvbU1vc3QgPSBib3R0b21Nb3N0Q29udGV4dCh0aGlzLCBkZXN0Q29udGV4dC5ib3R0b21Nb3N0KTtcclxuXHR9XHJcbn07XHJcblxyXG5Eb2N1bWVudENvbnRleHQucHJvdG90eXBlLm1hcmtFbmRpbmcgPSBmdW5jdGlvbiAoZW5kaW5nQ2VsbCkge1xyXG5cdHRoaXMucGFnZSA9IGVuZGluZ0NlbGwuX2NvbHVtbkVuZGluZ0NvbnRleHQucGFnZTtcclxuXHR0aGlzLnggPSBlbmRpbmdDZWxsLl9jb2x1bW5FbmRpbmdDb250ZXh0Lng7XHJcblx0dGhpcy55ID0gZW5kaW5nQ2VsbC5fY29sdW1uRW5kaW5nQ29udGV4dC55O1xyXG5cdHRoaXMuYXZhaWxhYmxlV2lkdGggPSBlbmRpbmdDZWxsLl9jb2x1bW5FbmRpbmdDb250ZXh0LmF2YWlsYWJsZVdpZHRoO1xyXG5cdHRoaXMuYXZhaWxhYmxlSGVpZ2h0ID0gZW5kaW5nQ2VsbC5fY29sdW1uRW5kaW5nQ29udGV4dC5hdmFpbGFibGVIZWlnaHQ7XHJcblx0dGhpcy5sYXN0Q29sdW1uV2lkdGggPSBlbmRpbmdDZWxsLl9jb2x1bW5FbmRpbmdDb250ZXh0Lmxhc3RDb2x1bW5XaWR0aDtcclxufTtcclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUuc2F2ZUNvbnRleHRJbkVuZGluZ0NlbGwgPSBmdW5jdGlvbiAoZW5kaW5nQ2VsbCkge1xyXG5cdGVuZGluZ0NlbGwuX2NvbHVtbkVuZGluZ0NvbnRleHQgPSB7XHJcblx0XHRwYWdlOiB0aGlzLnBhZ2UsXHJcblx0XHR4OiB0aGlzLngsXHJcblx0XHR5OiB0aGlzLnksXHJcblx0XHRhdmFpbGFibGVIZWlnaHQ6IHRoaXMuYXZhaWxhYmxlSGVpZ2h0LFxyXG5cdFx0YXZhaWxhYmxlV2lkdGg6IHRoaXMuYXZhaWxhYmxlV2lkdGgsXHJcblx0XHRsYXN0Q29sdW1uV2lkdGg6IHRoaXMubGFzdENvbHVtbldpZHRoXHJcblx0fTtcclxufTtcclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUuY29tcGxldGVDb2x1bW5Hcm91cCA9IGZ1bmN0aW9uIChoZWlnaHQpIHtcclxuXHR2YXIgc2F2ZWQgPSB0aGlzLnNuYXBzaG90cy5wb3AoKTtcclxuXHJcblx0dGhpcy5jYWxjdWxhdGVCb3R0b21Nb3N0KHNhdmVkKTtcclxuXHJcblx0dGhpcy5lbmRpbmdDZWxsID0gbnVsbDtcclxuXHR0aGlzLnggPSBzYXZlZC54O1xyXG5cclxuXHR2YXIgeSA9IHNhdmVkLmJvdHRvbU1vc3QueTtcclxuXHRpZiAoaGVpZ2h0KSB7XHJcblx0XHRpZiAoc2F2ZWQucGFnZSA9PT0gc2F2ZWQuYm90dG9tTW9zdC5wYWdlKSB7XHJcblx0XHRcdGlmICgoc2F2ZWQueSArIGhlaWdodCkgPiB5KSB7XHJcblx0XHRcdFx0eSA9IHNhdmVkLnkgKyBoZWlnaHQ7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHkgKz0gaGVpZ2h0O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dGhpcy55ID0geTtcclxuXHR0aGlzLnBhZ2UgPSBzYXZlZC5ib3R0b21Nb3N0LnBhZ2U7XHJcblx0dGhpcy5hdmFpbGFibGVXaWR0aCA9IHNhdmVkLmF2YWlsYWJsZVdpZHRoO1xyXG5cdHRoaXMuYXZhaWxhYmxlSGVpZ2h0ID0gc2F2ZWQuYm90dG9tTW9zdC5hdmFpbGFibGVIZWlnaHQ7XHJcblx0aWYgKGhlaWdodCkge1xyXG5cdFx0dGhpcy5hdmFpbGFibGVIZWlnaHQgLT0gKHkgLSBzYXZlZC5ib3R0b21Nb3N0LnkpO1xyXG5cdH1cclxuXHR0aGlzLmxhc3RDb2x1bW5XaWR0aCA9IHNhdmVkLmxhc3RDb2x1bW5XaWR0aDtcclxufTtcclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUuYWRkTWFyZ2luID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XHJcblx0dGhpcy54ICs9IGxlZnQ7XHJcblx0dGhpcy5hdmFpbGFibGVXaWR0aCAtPSBsZWZ0ICsgKHJpZ2h0IHx8IDApO1xyXG59O1xyXG5cclxuRG9jdW1lbnRDb250ZXh0LnByb3RvdHlwZS5tb3ZlRG93biA9IGZ1bmN0aW9uIChvZmZzZXQpIHtcclxuXHR0aGlzLnkgKz0gb2Zmc2V0O1xyXG5cdHRoaXMuYXZhaWxhYmxlSGVpZ2h0IC09IG9mZnNldDtcclxuXHJcblx0cmV0dXJuIHRoaXMuYXZhaWxhYmxlSGVpZ2h0ID4gMDtcclxufTtcclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUuaW5pdGlhbGl6ZVBhZ2UgPSBmdW5jdGlvbiAoKSB7XHJcblx0dGhpcy55ID0gdGhpcy5wYWdlTWFyZ2lucy50b3A7XHJcblx0dGhpcy5hdmFpbGFibGVIZWlnaHQgPSB0aGlzLmdldEN1cnJlbnRQYWdlKCkucGFnZVNpemUuaGVpZ2h0IC0gdGhpcy5wYWdlTWFyZ2lucy50b3AgLSB0aGlzLnBhZ2VNYXJnaW5zLmJvdHRvbTtcclxuXHR0aGlzLnBhZ2VTbmFwc2hvdCgpLmF2YWlsYWJsZVdpZHRoID0gdGhpcy5nZXRDdXJyZW50UGFnZSgpLnBhZ2VTaXplLndpZHRoIC0gdGhpcy5wYWdlTWFyZ2lucy5sZWZ0IC0gdGhpcy5wYWdlTWFyZ2lucy5yaWdodDtcclxufTtcclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUucGFnZVNuYXBzaG90ID0gZnVuY3Rpb24gKCkge1xyXG5cdGlmICh0aGlzLnNuYXBzaG90c1swXSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc25hcHNob3RzWzBdO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcbn07XHJcblxyXG5Eb2N1bWVudENvbnRleHQucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KSB7XHJcblx0aWYgKHggIT09IHVuZGVmaW5lZCAmJiB4ICE9PSBudWxsKSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy5hdmFpbGFibGVXaWR0aCA9IHRoaXMuZ2V0Q3VycmVudFBhZ2UoKS5wYWdlU2l6ZS53aWR0aCAtIHRoaXMueCAtIHRoaXMucGFnZU1hcmdpbnMucmlnaHQ7XHJcblx0fVxyXG5cdGlmICh5ICE9PSB1bmRlZmluZWQgJiYgeSAhPT0gbnVsbCkge1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMuYXZhaWxhYmxlSGVpZ2h0ID0gdGhpcy5nZXRDdXJyZW50UGFnZSgpLnBhZ2VTaXplLmhlaWdodCAtIHRoaXMueSAtIHRoaXMucGFnZU1hcmdpbnMuYm90dG9tO1xyXG5cdH1cclxufTtcclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUubW92ZVRvUmVsYXRpdmUgPSBmdW5jdGlvbiAoeCwgeSkge1xyXG5cdGlmICh4ICE9PSB1bmRlZmluZWQgJiYgeCAhPT0gbnVsbCkge1xyXG5cdFx0dGhpcy54ID0gdGhpcy54ICsgeDtcclxuXHR9XHJcblx0aWYgKHkgIT09IHVuZGVmaW5lZCAmJiB5ICE9PSBudWxsKSB7XHJcblx0XHR0aGlzLnkgPSB0aGlzLnkgKyB5O1xyXG5cdH1cclxufTtcclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUuYmVnaW5EZXRhY2hlZEJsb2NrID0gZnVuY3Rpb24gKCkge1xyXG5cdHRoaXMuc25hcHNob3RzLnB1c2goe1xyXG5cdFx0eDogdGhpcy54LFxyXG5cdFx0eTogdGhpcy55LFxyXG5cdFx0YXZhaWxhYmxlSGVpZ2h0OiB0aGlzLmF2YWlsYWJsZUhlaWdodCxcclxuXHRcdGF2YWlsYWJsZVdpZHRoOiB0aGlzLmF2YWlsYWJsZVdpZHRoLFxyXG5cdFx0cGFnZTogdGhpcy5wYWdlLFxyXG5cdFx0ZW5kaW5nQ2VsbDogdGhpcy5lbmRpbmdDZWxsLFxyXG5cdFx0bGFzdENvbHVtbldpZHRoOiB0aGlzLmxhc3RDb2x1bW5XaWR0aFxyXG5cdH0pO1xyXG59O1xyXG5cclxuRG9jdW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbmREZXRhY2hlZEJsb2NrID0gZnVuY3Rpb24gKCkge1xyXG5cdHZhciBzYXZlZCA9IHRoaXMuc25hcHNob3RzLnBvcCgpO1xyXG5cclxuXHR0aGlzLnggPSBzYXZlZC54O1xyXG5cdHRoaXMueSA9IHNhdmVkLnk7XHJcblx0dGhpcy5hdmFpbGFibGVXaWR0aCA9IHNhdmVkLmF2YWlsYWJsZVdpZHRoO1xyXG5cdHRoaXMuYXZhaWxhYmxlSGVpZ2h0ID0gc2F2ZWQuYXZhaWxhYmxlSGVpZ2h0O1xyXG5cdHRoaXMucGFnZSA9IHNhdmVkLnBhZ2U7XHJcblx0dGhpcy5lbmRpbmdDZWxsID0gc2F2ZWQuZW5kaW5nQ2VsbDtcclxuXHR0aGlzLmxhc3RDb2x1bW5XaWR0aCA9IHNhdmVkLmxhc3RDb2x1bW5XaWR0aDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHBhZ2VPcmllbnRhdGlvbihwYWdlT3JpZW50YXRpb25TdHJpbmcsIGN1cnJlbnRQYWdlT3JpZW50YXRpb24pIHtcclxuXHRpZiAocGFnZU9yaWVudGF0aW9uU3RyaW5nID09PSB1bmRlZmluZWQpIHtcclxuXHRcdHJldHVybiBjdXJyZW50UGFnZU9yaWVudGF0aW9uO1xyXG5cdH0gZWxzZSBpZiAoaXNTdHJpbmcocGFnZU9yaWVudGF0aW9uU3RyaW5nKSAmJiAocGFnZU9yaWVudGF0aW9uU3RyaW5nLnRvTG93ZXJDYXNlKCkgPT09ICdsYW5kc2NhcGUnKSkge1xyXG5cdFx0cmV0dXJuICdsYW5kc2NhcGUnO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gJ3BvcnRyYWl0JztcclxuXHR9XHJcbn1cclxuXHJcbnZhciBnZXRQYWdlU2l6ZSA9IGZ1bmN0aW9uIChjdXJyZW50UGFnZSwgbmV3UGFnZU9yaWVudGF0aW9uKSB7XHJcblxyXG5cdG5ld1BhZ2VPcmllbnRhdGlvbiA9IHBhZ2VPcmllbnRhdGlvbihuZXdQYWdlT3JpZW50YXRpb24sIGN1cnJlbnRQYWdlLnBhZ2VTaXplLm9yaWVudGF0aW9uKTtcclxuXHJcblx0aWYgKG5ld1BhZ2VPcmllbnRhdGlvbiAhPT0gY3VycmVudFBhZ2UucGFnZVNpemUub3JpZW50YXRpb24pIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG9yaWVudGF0aW9uOiBuZXdQYWdlT3JpZW50YXRpb24sXHJcblx0XHRcdHdpZHRoOiBjdXJyZW50UGFnZS5wYWdlU2l6ZS5oZWlnaHQsXHJcblx0XHRcdGhlaWdodDogY3VycmVudFBhZ2UucGFnZVNpemUud2lkdGhcclxuXHRcdH07XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG9yaWVudGF0aW9uOiBjdXJyZW50UGFnZS5wYWdlU2l6ZS5vcmllbnRhdGlvbixcclxuXHRcdFx0d2lkdGg6IGN1cnJlbnRQYWdlLnBhZ2VTaXplLndpZHRoLFxyXG5cdFx0XHRoZWlnaHQ6IGN1cnJlbnRQYWdlLnBhZ2VTaXplLmhlaWdodFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG59O1xyXG5cclxuXHJcbkRvY3VtZW50Q29udGV4dC5wcm90b3R5cGUubW92ZVRvTmV4dFBhZ2UgPSBmdW5jdGlvbiAocGFnZU9yaWVudGF0aW9uKSB7XHJcblx0dmFyIG5leHRQYWdlSW5kZXggPSB0aGlzLnBhZ2UgKyAxO1xyXG5cclxuXHR2YXIgcHJldlBhZ2UgPSB0aGlzLnBhZ2U7XHJcblx0dmFyIHByZXZZID0gdGhpcy55O1xyXG5cclxuXHR2YXIgY3JlYXRlTmV3UGFnZSA9IG5leHRQYWdlSW5kZXggPj0gdGhpcy5wYWdlcy5sZW5ndGg7XHJcblx0aWYgKGNyZWF0ZU5ld1BhZ2UpIHtcclxuXHRcdHZhciBjdXJyZW50QXZhaWxhYmxlV2lkdGggPSB0aGlzLmF2YWlsYWJsZVdpZHRoO1xyXG5cdFx0dmFyIGN1cnJlbnRQYWdlT3JpZW50YXRpb24gPSB0aGlzLmdldEN1cnJlbnRQYWdlKCkucGFnZVNpemUub3JpZW50YXRpb247XHJcblxyXG5cdFx0dmFyIHBhZ2VTaXplID0gZ2V0UGFnZVNpemUodGhpcy5nZXRDdXJyZW50UGFnZSgpLCBwYWdlT3JpZW50YXRpb24pO1xyXG5cdFx0dGhpcy5hZGRQYWdlKHBhZ2VTaXplKTtcclxuXHJcblx0XHRpZiAoY3VycmVudFBhZ2VPcmllbnRhdGlvbiA9PT0gcGFnZVNpemUub3JpZW50YXRpb24pIHtcclxuXHRcdFx0dGhpcy5hdmFpbGFibGVXaWR0aCA9IGN1cnJlbnRBdmFpbGFibGVXaWR0aDtcclxuXHRcdH1cclxuXHR9IGVsc2Uge1xyXG5cdFx0dGhpcy5wYWdlID0gbmV4dFBhZ2VJbmRleDtcclxuXHRcdHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB7XHJcblx0XHRuZXdQYWdlQ3JlYXRlZDogY3JlYXRlTmV3UGFnZSxcclxuXHRcdHByZXZQYWdlOiBwcmV2UGFnZSxcclxuXHRcdHByZXZZOiBwcmV2WSxcclxuXHRcdHk6IHRoaXMueVxyXG5cdH07XHJcbn07XHJcblxyXG5cclxuRG9jdW1lbnRDb250ZXh0LnByb3RvdHlwZS5hZGRQYWdlID0gZnVuY3Rpb24gKHBhZ2VTaXplKSB7XHJcblx0dmFyIHBhZ2UgPSB7IGl0ZW1zOiBbXSwgcGFnZVNpemU6IHBhZ2VTaXplIH07XHJcblx0dGhpcy5wYWdlcy5wdXNoKHBhZ2UpO1xyXG5cdHRoaXMuYmFja2dyb3VuZExlbmd0aC5wdXNoKDApO1xyXG5cdHRoaXMucGFnZSA9IHRoaXMucGFnZXMubGVuZ3RoIC0gMTtcclxuXHR0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcblxyXG5cdHRoaXMudHJhY2tlci5lbWl0KCdwYWdlQWRkZWQnKTtcclxuXHJcblx0cmV0dXJuIHBhZ2U7XHJcbn07XHJcblxyXG5Eb2N1bWVudENvbnRleHQucHJvdG90eXBlLmdldEN1cnJlbnRQYWdlID0gZnVuY3Rpb24gKCkge1xyXG5cdGlmICh0aGlzLnBhZ2UgPCAwIHx8IHRoaXMucGFnZSA+PSB0aGlzLnBhZ2VzLmxlbmd0aCkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdGhpcy5wYWdlc1t0aGlzLnBhZ2VdO1xyXG59O1xyXG5cclxuRG9jdW1lbnRDb250ZXh0LnByb3RvdHlwZS5nZXRDdXJyZW50UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcblx0dmFyIHBhZ2VTaXplID0gdGhpcy5nZXRDdXJyZW50UGFnZSgpLnBhZ2VTaXplO1xyXG5cdHZhciBpbm5lckhlaWdodCA9IHBhZ2VTaXplLmhlaWdodCAtIHRoaXMucGFnZU1hcmdpbnMudG9wIC0gdGhpcy5wYWdlTWFyZ2lucy5ib3R0b207XHJcblx0dmFyIGlubmVyV2lkdGggPSBwYWdlU2l6ZS53aWR0aCAtIHRoaXMucGFnZU1hcmdpbnMubGVmdCAtIHRoaXMucGFnZU1hcmdpbnMucmlnaHQ7XHJcblxyXG5cdHJldHVybiB7XHJcblx0XHRwYWdlTnVtYmVyOiB0aGlzLnBhZ2UgKyAxLFxyXG5cdFx0cGFnZU9yaWVudGF0aW9uOiBwYWdlU2l6ZS5vcmllbnRhdGlvbixcclxuXHRcdHBhZ2VJbm5lckhlaWdodDogaW5uZXJIZWlnaHQsXHJcblx0XHRwYWdlSW5uZXJXaWR0aDogaW5uZXJXaWR0aCxcclxuXHRcdGxlZnQ6IHRoaXMueCxcclxuXHRcdHRvcDogdGhpcy55LFxyXG5cdFx0dmVydGljYWxSYXRpbzogKCh0aGlzLnkgLSB0aGlzLnBhZ2VNYXJnaW5zLnRvcCkgLyBpbm5lckhlaWdodCksXHJcblx0XHRob3Jpem9udGFsUmF0aW86ICgodGhpcy54IC0gdGhpcy5wYWdlTWFyZ2lucy5sZWZ0KSAvIGlubmVyV2lkdGgpXHJcblx0fTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGJvdHRvbU1vc3RDb250ZXh0KGMxLCBjMikge1xyXG5cdHZhciByO1xyXG5cclxuXHRpZiAoYzEucGFnZSA+IGMyLnBhZ2UpIHtcclxuXHRcdHIgPSBjMTtcclxuXHR9IGVsc2UgaWYgKGMyLnBhZ2UgPiBjMS5wYWdlKSB7XHJcblx0XHRyID0gYzI7XHJcblx0fSBlbHNlIHtcclxuXHRcdHIgPSAoYzEueSA+IGMyLnkpID8gYzEgOiBjMjtcclxuXHR9XHJcblxyXG5cdHJldHVybiB7XHJcblx0XHRwYWdlOiByLnBhZ2UsXHJcblx0XHR4OiByLngsXHJcblx0XHR5OiByLnksXHJcblx0XHRhdmFpbGFibGVIZWlnaHQ6IHIuYXZhaWxhYmxlSGVpZ2h0LFxyXG5cdFx0YXZhaWxhYmxlV2lkdGg6IHIuYXZhaWxhYmxlV2lkdGhcclxuXHR9O1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERvY3VtZW50Q29udGV4dDtcclxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTk2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXHJcblxyXG52YXIgTGluZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDc3NSk7XHJcbnZhciBpc051bWJlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzTnVtYmVyKTtcclxudmFyIHBhY2sgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5wYWNrKTtcclxudmFyIG9mZnNldFZlY3RvciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLm9mZnNldFZlY3Rvcik7XHJcbnZhciBEb2N1bWVudENvbnRleHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4NTgpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRWxlbWVudFdyaXRlciAtIGEgbGluZS92ZWN0b3Igd3JpdGVyLCB3aGljaCBhZGRzXHJcbiAqIGVsZW1lbnRzIHRvIGN1cnJlbnQgcGFnZSBhbmQgc2V0cyB0aGVpciBwb3NpdGlvbnMgYmFzZWQgb24gdGhlIGNvbnRleHRcclxuICovXHJcbmZ1bmN0aW9uIEVsZW1lbnRXcml0ZXIoY29udGV4dCwgdHJhY2tlcikge1xyXG5cdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcblx0dGhpcy5jb250ZXh0U3RhY2sgPSBbXTtcclxuXHR0aGlzLnRyYWNrZXIgPSB0cmFja2VyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRQYWdlSXRlbShwYWdlLCBpdGVtLCBpbmRleCkge1xyXG5cdGlmIChpbmRleCA9PT0gbnVsbCB8fCBpbmRleCA9PT0gdW5kZWZpbmVkIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+IHBhZ2UuaXRlbXMubGVuZ3RoKSB7XHJcblx0XHRwYWdlLml0ZW1zLnB1c2goaXRlbSk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHBhZ2UuaXRlbXMuc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcclxuXHR9XHJcbn1cclxuXHJcbkVsZW1lbnRXcml0ZXIucHJvdG90eXBlLmFkZExpbmUgPSBmdW5jdGlvbiAobGluZSwgZG9udFVwZGF0ZUNvbnRleHRQb3NpdGlvbiwgaW5kZXgpIHtcclxuXHR2YXIgaGVpZ2h0ID0gbGluZS5nZXRIZWlnaHQoKTtcclxuXHR2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcclxuXHR2YXIgcGFnZSA9IGNvbnRleHQuZ2V0Q3VycmVudFBhZ2UoKSxcclxuXHRcdHBvc2l0aW9uID0gdGhpcy5nZXRDdXJyZW50UG9zaXRpb25PblBhZ2UoKTtcclxuXHJcblx0aWYgKGNvbnRleHQuYXZhaWxhYmxlSGVpZ2h0IDwgaGVpZ2h0IHx8ICFwYWdlKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRsaW5lLnggPSBjb250ZXh0LnggKyAobGluZS54IHx8IDApO1xyXG5cdGxpbmUueSA9IGNvbnRleHQueSArIChsaW5lLnkgfHwgMCk7XHJcblxyXG5cdHRoaXMuYWxpZ25MaW5lKGxpbmUpO1xyXG5cclxuXHRhZGRQYWdlSXRlbShwYWdlLCB7XHJcblx0XHR0eXBlOiAnbGluZScsXHJcblx0XHRpdGVtOiBsaW5lXHJcblx0fSwgaW5kZXgpO1xyXG5cdHRoaXMudHJhY2tlci5lbWl0KCdsaW5lQWRkZWQnLCBsaW5lKTtcclxuXHJcblx0aWYgKCFkb250VXBkYXRlQ29udGV4dFBvc2l0aW9uKSB7XHJcblx0XHRjb250ZXh0Lm1vdmVEb3duKGhlaWdodCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcG9zaXRpb247XHJcbn07XHJcblxyXG5FbGVtZW50V3JpdGVyLnByb3RvdHlwZS5hbGlnbkxpbmUgPSBmdW5jdGlvbiAobGluZSkge1xyXG5cdHZhciB3aWR0aCA9IHRoaXMuY29udGV4dC5hdmFpbGFibGVXaWR0aDtcclxuXHR2YXIgbGluZVdpZHRoID0gbGluZS5nZXRXaWR0aCgpO1xyXG5cclxuXHR2YXIgYWxpZ25tZW50ID0gbGluZS5pbmxpbmVzICYmIGxpbmUuaW5saW5lcy5sZW5ndGggPiAwICYmIGxpbmUuaW5saW5lc1swXS5hbGlnbm1lbnQ7XHJcblxyXG5cdHZhciBvZmZzZXQgPSAwO1xyXG5cdHN3aXRjaCAoYWxpZ25tZW50KSB7XHJcblx0XHRjYXNlICdyaWdodCc6XHJcblx0XHRcdG9mZnNldCA9IHdpZHRoIC0gbGluZVdpZHRoO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgJ2NlbnRlcic6XHJcblx0XHRcdG9mZnNldCA9ICh3aWR0aCAtIGxpbmVXaWR0aCkgLyAyO1xyXG5cdFx0XHRicmVhaztcclxuXHR9XHJcblxyXG5cdGlmIChvZmZzZXQpIHtcclxuXHRcdGxpbmUueCA9IChsaW5lLnggfHwgMCkgKyBvZmZzZXQ7XHJcblx0fVxyXG5cclxuXHRpZiAoYWxpZ25tZW50ID09PSAnanVzdGlmeScgJiZcclxuXHRcdCFsaW5lLm5ld0xpbmVGb3JjZWQgJiZcclxuXHRcdCFsaW5lLmxhc3RMaW5lSW5QYXJhZ3JhcGggJiZcclxuXHRcdGxpbmUuaW5saW5lcy5sZW5ndGggPiAxKSB7XHJcblx0XHR2YXIgYWRkaXRpb25hbFNwYWNpbmcgPSAod2lkdGggLSBsaW5lV2lkdGgpIC8gKGxpbmUuaW5saW5lcy5sZW5ndGggLSAxKTtcclxuXHJcblx0XHRmb3IgKHZhciBpID0gMSwgbCA9IGxpbmUuaW5saW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0b2Zmc2V0ID0gaSAqIGFkZGl0aW9uYWxTcGFjaW5nO1xyXG5cclxuXHRcdFx0bGluZS5pbmxpbmVzW2ldLnggKz0gb2Zmc2V0O1xyXG5cdFx0XHRsaW5lLmlubGluZXNbaV0uanVzdGlmeVNoaWZ0ID0gYWRkaXRpb25hbFNwYWNpbmc7XHJcblx0XHR9XHJcblx0fVxyXG59O1xyXG5cclxuRWxlbWVudFdyaXRlci5wcm90b3R5cGUuYWRkSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2UsIGluZGV4LCB0eXBlKSB7XHJcblx0dmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XHJcblx0dmFyIHBhZ2UgPSBjb250ZXh0LmdldEN1cnJlbnRQYWdlKCksXHJcblx0XHRwb3NpdGlvbiA9IHRoaXMuZ2V0Q3VycmVudFBvc2l0aW9uT25QYWdlKCk7XHJcblxyXG5cdGlmICghcGFnZSB8fCAoaW1hZ2UuYWJzb2x1dGVQb3NpdGlvbiA9PT0gdW5kZWZpbmVkICYmIGNvbnRleHQuYXZhaWxhYmxlSGVpZ2h0IDwgaW1hZ2UuX2hlaWdodCAmJiBwYWdlLml0ZW1zLmxlbmd0aCA+IDApKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRpZiAoaW1hZ2UuX3ggPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0aW1hZ2UuX3ggPSBpbWFnZS54IHx8IDA7XHJcblx0fVxyXG5cclxuXHRpbWFnZS54ID0gY29udGV4dC54ICsgaW1hZ2UuX3g7XHJcblx0aW1hZ2UueSA9IGNvbnRleHQueTtcclxuXHJcblx0dGhpcy5hbGlnbkltYWdlKGltYWdlKTtcclxuXHJcblx0YWRkUGFnZUl0ZW0ocGFnZSwge1xyXG5cdFx0dHlwZTogdHlwZSB8fCAnaW1hZ2UnLFxyXG5cdFx0aXRlbTogaW1hZ2VcclxuXHR9LCBpbmRleCk7XHJcblxyXG5cdGNvbnRleHQubW92ZURvd24oaW1hZ2UuX2hlaWdodCk7XHJcblxyXG5cdHJldHVybiBwb3NpdGlvbjtcclxufTtcclxuXHJcbkVsZW1lbnRXcml0ZXIucHJvdG90eXBlLmFkZFNWRyA9IGZ1bmN0aW9uIChpbWFnZSwgaW5kZXgpIHtcclxuXHRyZXR1cm4gdGhpcy5hZGRJbWFnZShpbWFnZSwgaW5kZXgsICdzdmcnKVxyXG59O1xyXG5cclxuRWxlbWVudFdyaXRlci5wcm90b3R5cGUuYWRkUXIgPSBmdW5jdGlvbiAocXIsIGluZGV4KSB7XHJcblx0dmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XHJcblx0dmFyIHBhZ2UgPSBjb250ZXh0LmdldEN1cnJlbnRQYWdlKCksXHJcblx0XHRwb3NpdGlvbiA9IHRoaXMuZ2V0Q3VycmVudFBvc2l0aW9uT25QYWdlKCk7XHJcblxyXG5cdGlmICghcGFnZSB8fCAocXIuYWJzb2x1dGVQb3NpdGlvbiA9PT0gdW5kZWZpbmVkICYmIGNvbnRleHQuYXZhaWxhYmxlSGVpZ2h0IDwgcXIuX2hlaWdodCkpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGlmIChxci5feCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRxci5feCA9IHFyLnggfHwgMDtcclxuXHR9XHJcblxyXG5cdHFyLnggPSBjb250ZXh0LnggKyBxci5feDtcclxuXHRxci55ID0gY29udGV4dC55O1xyXG5cclxuXHR0aGlzLmFsaWduSW1hZ2UocXIpO1xyXG5cclxuXHRmb3IgKHZhciBpID0gMCwgbCA9IHFyLl9jYW52YXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHR2YXIgdmVjdG9yID0gcXIuX2NhbnZhc1tpXTtcclxuXHRcdHZlY3Rvci54ICs9IHFyLng7XHJcblx0XHR2ZWN0b3IueSArPSBxci55O1xyXG5cdFx0dGhpcy5hZGRWZWN0b3IodmVjdG9yLCB0cnVlLCB0cnVlLCBpbmRleCk7XHJcblx0fVxyXG5cclxuXHRjb250ZXh0Lm1vdmVEb3duKHFyLl9oZWlnaHQpO1xyXG5cclxuXHRyZXR1cm4gcG9zaXRpb247XHJcbn07XHJcblxyXG5FbGVtZW50V3JpdGVyLnByb3RvdHlwZS5hbGlnbkltYWdlID0gZnVuY3Rpb24gKGltYWdlKSB7XHJcblx0dmFyIHdpZHRoID0gdGhpcy5jb250ZXh0LmF2YWlsYWJsZVdpZHRoO1xyXG5cdHZhciBpbWFnZVdpZHRoID0gaW1hZ2UuX21pbldpZHRoO1xyXG5cdHZhciBvZmZzZXQgPSAwO1xyXG5cdHN3aXRjaCAoaW1hZ2UuX2FsaWdubWVudCkge1xyXG5cdFx0Y2FzZSAncmlnaHQnOlxyXG5cdFx0XHRvZmZzZXQgPSB3aWR0aCAtIGltYWdlV2lkdGg7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnY2VudGVyJzpcclxuXHRcdFx0b2Zmc2V0ID0gKHdpZHRoIC0gaW1hZ2VXaWR0aCkgLyAyO1xyXG5cdFx0XHRicmVhaztcclxuXHR9XHJcblxyXG5cdGlmIChvZmZzZXQpIHtcclxuXHRcdGltYWdlLnggPSAoaW1hZ2UueCB8fCAwKSArIG9mZnNldDtcclxuXHR9XHJcbn07XHJcblxyXG5FbGVtZW50V3JpdGVyLnByb3RvdHlwZS5hbGlnbkNhbnZhcyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0dmFyIHdpZHRoID0gdGhpcy5jb250ZXh0LmF2YWlsYWJsZVdpZHRoO1xyXG5cdHZhciBjYW52YXNXaWR0aCA9IG5vZGUuX21pbldpZHRoO1xyXG5cdHZhciBvZmZzZXQgPSAwO1xyXG5cdHN3aXRjaCAobm9kZS5fYWxpZ25tZW50KSB7XHJcblx0XHRjYXNlICdyaWdodCc6XHJcblx0XHRcdG9mZnNldCA9IHdpZHRoIC0gY2FudmFzV2lkdGg7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnY2VudGVyJzpcclxuXHRcdFx0b2Zmc2V0ID0gKHdpZHRoIC0gY2FudmFzV2lkdGgpIC8gMjtcclxuXHRcdFx0YnJlYWs7XHJcblx0fVxyXG5cdGlmIChvZmZzZXQpIHtcclxuXHRcdG5vZGUuY2FudmFzLmZvckVhY2goZnVuY3Rpb24gKHZlY3Rvcikge1xyXG5cdFx0XHRvZmZzZXRWZWN0b3IodmVjdG9yLCBvZmZzZXQsIDApO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59O1xyXG5cclxuRWxlbWVudFdyaXRlci5wcm90b3R5cGUuYWRkVmVjdG9yID0gZnVuY3Rpb24gKHZlY3RvciwgaWdub3JlQ29udGV4dFgsIGlnbm9yZUNvbnRleHRZLCBpbmRleCkge1xyXG5cdHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xyXG5cdHZhciBwYWdlID0gY29udGV4dC5nZXRDdXJyZW50UGFnZSgpLFxyXG5cdFx0cG9zaXRpb24gPSB0aGlzLmdldEN1cnJlbnRQb3NpdGlvbk9uUGFnZSgpO1xyXG5cclxuXHRpZiAocGFnZSkge1xyXG5cdFx0b2Zmc2V0VmVjdG9yKHZlY3RvciwgaWdub3JlQ29udGV4dFggPyAwIDogY29udGV4dC54LCBpZ25vcmVDb250ZXh0WSA/IDAgOiBjb250ZXh0LnkpO1xyXG5cdFx0YWRkUGFnZUl0ZW0ocGFnZSwge1xyXG5cdFx0XHR0eXBlOiAndmVjdG9yJyxcclxuXHRcdFx0aXRlbTogdmVjdG9yXHJcblx0XHR9LCBpbmRleCk7XHJcblx0XHRyZXR1cm4gcG9zaXRpb247XHJcblx0fVxyXG59O1xyXG5cclxuRWxlbWVudFdyaXRlci5wcm90b3R5cGUuYmVnaW5DbGlwID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcclxuXHR2YXIgY3R4ID0gdGhpcy5jb250ZXh0O1xyXG5cdHZhciBwYWdlID0gY3R4LmdldEN1cnJlbnRQYWdlKCk7XHJcblx0cGFnZS5pdGVtcy5wdXNoKHtcclxuXHRcdHR5cGU6ICdiZWdpbkNsaXAnLFxyXG5cdFx0aXRlbTogeyB4OiBjdHgueCwgeTogY3R4LnksIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfVxyXG5cdH0pO1xyXG5cdHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuRWxlbWVudFdyaXRlci5wcm90b3R5cGUuZW5kQ2xpcCA9IGZ1bmN0aW9uICgpIHtcclxuXHR2YXIgY3R4ID0gdGhpcy5jb250ZXh0O1xyXG5cdHZhciBwYWdlID0gY3R4LmdldEN1cnJlbnRQYWdlKCk7XHJcblx0cGFnZS5pdGVtcy5wdXNoKHtcclxuXHRcdHR5cGU6ICdlbmRDbGlwJ1xyXG5cdH0pO1xyXG5cdHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gY2xvbmVMaW5lKGxpbmUpIHtcclxuXHR2YXIgcmVzdWx0ID0gbmV3IExpbmUobGluZS5tYXhXaWR0aCk7XHJcblxyXG5cdGZvciAodmFyIGtleSBpbiBsaW5lKSB7XHJcblx0XHRpZiAobGluZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdHJlc3VsdFtrZXldID0gbGluZVtrZXldO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuRWxlbWVudFdyaXRlci5wcm90b3R5cGUuYWRkRnJhZ21lbnQgPSBmdW5jdGlvbiAoYmxvY2ssIHVzZUJsb2NrWE9mZnNldCwgdXNlQmxvY2tZT2Zmc2V0LCBkb250VXBkYXRlQ29udGV4dFBvc2l0aW9uKSB7XHJcblx0dmFyIGN0eCA9IHRoaXMuY29udGV4dDtcclxuXHR2YXIgcGFnZSA9IGN0eC5nZXRDdXJyZW50UGFnZSgpO1xyXG5cclxuXHRpZiAoIXVzZUJsb2NrWE9mZnNldCAmJiBibG9jay5oZWlnaHQgPiBjdHguYXZhaWxhYmxlSGVpZ2h0KSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRibG9jay5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcblx0XHRzd2l0Y2ggKGl0ZW0udHlwZSkge1xyXG5cdFx0XHRjYXNlICdsaW5lJzpcclxuXHRcdFx0XHR2YXIgbCA9IGNsb25lTGluZShpdGVtLml0ZW0pO1xyXG5cclxuXHRcdFx0XHRpZiAobC5fbm9kZSkge1xyXG5cdFx0XHRcdFx0bC5fbm9kZS5wb3NpdGlvbnNbMF0ucGFnZU51bWJlciA9IGN0eC5wYWdlICsgMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bC54ID0gKGwueCB8fCAwKSArICh1c2VCbG9ja1hPZmZzZXQgPyAoYmxvY2sueE9mZnNldCB8fCAwKSA6IGN0eC54KTtcclxuXHRcdFx0XHRsLnkgPSAobC55IHx8IDApICsgKHVzZUJsb2NrWU9mZnNldCA/IChibG9jay55T2Zmc2V0IHx8IDApIDogY3R4LnkpO1xyXG5cclxuXHRcdFx0XHRwYWdlLml0ZW1zLnB1c2goe1xyXG5cdFx0XHRcdFx0dHlwZTogJ2xpbmUnLFxyXG5cdFx0XHRcdFx0aXRlbTogbFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSAndmVjdG9yJzpcclxuXHRcdFx0XHR2YXIgdiA9IHBhY2soaXRlbS5pdGVtKTtcclxuXHJcblx0XHRcdFx0b2Zmc2V0VmVjdG9yKHYsIHVzZUJsb2NrWE9mZnNldCA/IChibG9jay54T2Zmc2V0IHx8IDApIDogY3R4LngsIHVzZUJsb2NrWU9mZnNldCA/IChibG9jay55T2Zmc2V0IHx8IDApIDogY3R4LnkpO1xyXG5cdFx0XHRcdHBhZ2UuaXRlbXMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiAndmVjdG9yJyxcclxuXHRcdFx0XHRcdGl0ZW06IHZcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgJ2ltYWdlJzpcclxuXHRcdFx0Y2FzZSAnc3ZnJzpcclxuXHRcdFx0XHR2YXIgaW1nID0gcGFjayhpdGVtLml0ZW0pO1xyXG5cclxuXHRcdFx0XHRpbWcueCA9IChpbWcueCB8fCAwKSArICh1c2VCbG9ja1hPZmZzZXQgPyAoYmxvY2sueE9mZnNldCB8fCAwKSA6IGN0eC54KTtcclxuXHRcdFx0XHRpbWcueSA9IChpbWcueSB8fCAwKSArICh1c2VCbG9ja1lPZmZzZXQgPyAoYmxvY2sueU9mZnNldCB8fCAwKSA6IGN0eC55KTtcclxuXHJcblx0XHRcdFx0cGFnZS5pdGVtcy5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6IGl0ZW0udHlwZSxcclxuXHRcdFx0XHRcdGl0ZW06IGltZ1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHRpZiAoIWRvbnRVcGRhdGVDb250ZXh0UG9zaXRpb24pIHtcclxuXHRcdGN0eC5tb3ZlRG93bihibG9jay5oZWlnaHQpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vKipcclxuICogUHVzaGVzIHRoZSBwcm92aWRlZCBjb250ZXh0IG9udG8gdGhlIHN0YWNrIG9yIGNyZWF0ZXMgYSBuZXcgb25lXHJcbiAqXHJcbiAqIHB1c2hDb250ZXh0KGNvbnRleHQpIC0gcHVzaGVzIHRoZSBwcm92aWRlZCBjb250ZXh0IGFuZCBtYWtlcyBpdCBjdXJyZW50XHJcbiAqIHB1c2hDb250ZXh0KHdpZHRoLCBoZWlnaHQpIC0gY3JlYXRlcyBhbmQgcHVzaGVzIGEgbmV3IGNvbnRleHQgd2l0aCB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcclxuICogcHVzaENvbnRleHQoKSAtIGNyZWF0ZXMgYSBuZXcgY29udGV4dCBmb3IgdW5icmVha2FibGUgYmxvY2tzICh3aXRoIGN1cnJlbnQgYXZhaWxhYmxlV2lkdGggYW5kIGZ1bGwtcGFnZS1oZWlnaHQpXHJcbiAqL1xyXG5FbGVtZW50V3JpdGVyLnByb3RvdHlwZS5wdXNoQ29udGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0T3JXaWR0aCwgaGVpZ2h0KSB7XHJcblx0aWYgKGNvbnRleHRPcldpZHRoID09PSB1bmRlZmluZWQpIHtcclxuXHRcdGhlaWdodCA9IHRoaXMuY29udGV4dC5nZXRDdXJyZW50UGFnZSgpLmhlaWdodCAtIHRoaXMuY29udGV4dC5wYWdlTWFyZ2lucy50b3AgLSB0aGlzLmNvbnRleHQucGFnZU1hcmdpbnMuYm90dG9tO1xyXG5cdFx0Y29udGV4dE9yV2lkdGggPSB0aGlzLmNvbnRleHQuYXZhaWxhYmxlV2lkdGg7XHJcblx0fVxyXG5cclxuXHRpZiAoaXNOdW1iZXIoY29udGV4dE9yV2lkdGgpKSB7XHJcblx0XHRjb250ZXh0T3JXaWR0aCA9IG5ldyBEb2N1bWVudENvbnRleHQoeyB3aWR0aDogY29udGV4dE9yV2lkdGgsIGhlaWdodDogaGVpZ2h0IH0sIHsgbGVmdDogMCwgcmlnaHQ6IDAsIHRvcDogMCwgYm90dG9tOiAwIH0pO1xyXG5cdH1cclxuXHJcblx0dGhpcy5jb250ZXh0U3RhY2sucHVzaCh0aGlzLmNvbnRleHQpO1xyXG5cdHRoaXMuY29udGV4dCA9IGNvbnRleHRPcldpZHRoO1xyXG59O1xyXG5cclxuRWxlbWVudFdyaXRlci5wcm90b3R5cGUucG9wQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuXHR0aGlzLmNvbnRleHQgPSB0aGlzLmNvbnRleHRTdGFjay5wb3AoKTtcclxufTtcclxuXHJcbkVsZW1lbnRXcml0ZXIucHJvdG90eXBlLmdldEN1cnJlbnRQb3NpdGlvbk9uUGFnZSA9IGZ1bmN0aW9uICgpIHtcclxuXHRyZXR1cm4gKHRoaXMuY29udGV4dFN0YWNrWzBdIHx8IHRoaXMuY29udGV4dCkuZ2V0Q3VycmVudFBvc2l0aW9uKCk7XHJcbn07XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbGVtZW50V3JpdGVyO1xyXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDIyNDk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cclxuXHJcbnZhciBpc0FycmF5ID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNBcnJheSk7XHJcblxyXG5mdW5jdGlvbiB0eXBlTmFtZShib2xkLCBpdGFsaWNzKSB7XHJcblx0dmFyIHR5cGUgPSAnbm9ybWFsJztcclxuXHRpZiAoYm9sZCAmJiBpdGFsaWNzKSB7XHJcblx0XHR0eXBlID0gJ2JvbGRpdGFsaWNzJztcclxuXHR9IGVsc2UgaWYgKGJvbGQpIHtcclxuXHRcdHR5cGUgPSAnYm9sZCc7XHJcblx0fSBlbHNlIGlmIChpdGFsaWNzKSB7XHJcblx0XHR0eXBlID0gJ2l0YWxpY3MnO1xyXG5cdH1cclxuXHRyZXR1cm4gdHlwZTtcclxufVxyXG5cclxuZnVuY3Rpb24gRm9udFByb3ZpZGVyKGZvbnREZXNjcmlwdG9ycywgcGRmS2l0RG9jKSB7XHJcblx0dGhpcy5mb250cyA9IHt9O1xyXG5cdHRoaXMucGRmS2l0RG9jID0gcGRmS2l0RG9jO1xyXG5cdHRoaXMuZm9udENhY2hlID0ge307XHJcblxyXG5cdGZvciAodmFyIGZvbnQgaW4gZm9udERlc2NyaXB0b3JzKSB7XHJcblx0XHRpZiAoZm9udERlc2NyaXB0b3JzLmhhc093blByb3BlcnR5KGZvbnQpKSB7XHJcblx0XHRcdHZhciBmb250RGVmID0gZm9udERlc2NyaXB0b3JzW2ZvbnRdO1xyXG5cclxuXHRcdFx0dGhpcy5mb250c1tmb250XSA9IHtcclxuXHRcdFx0XHRub3JtYWw6IGZvbnREZWYubm9ybWFsLFxyXG5cdFx0XHRcdGJvbGQ6IGZvbnREZWYuYm9sZCxcclxuXHRcdFx0XHRpdGFsaWNzOiBmb250RGVmLml0YWxpY3MsXHJcblx0XHRcdFx0Ym9sZGl0YWxpY3M6IGZvbnREZWYuYm9sZGl0YWxpY3NcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbkZvbnRQcm92aWRlci5wcm90b3R5cGUuZ2V0Rm9udFR5cGUgPSBmdW5jdGlvbiAoYm9sZCwgaXRhbGljcykge1xyXG5cdHJldHVybiB0eXBlTmFtZShib2xkLCBpdGFsaWNzKTtcclxufVxyXG5cclxuRm9udFByb3ZpZGVyLnByb3RvdHlwZS5nZXRGb250RmlsZSA9IGZ1bmN0aW9uIChmYW1pbHlOYW1lLCBib2xkLCBpdGFsaWNzKSB7XHJcblx0dmFyIHR5cGUgPSB0aGlzLmdldEZvbnRUeXBlKGJvbGQsIGl0YWxpY3MpO1xyXG5cdGlmICghdGhpcy5mb250c1tmYW1pbHlOYW1lXSB8fCAhdGhpcy5mb250c1tmYW1pbHlOYW1lXVt0eXBlXSkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdGhpcy5mb250c1tmYW1pbHlOYW1lXVt0eXBlXTtcclxufVxyXG5cclxuRm9udFByb3ZpZGVyLnByb3RvdHlwZS5wcm92aWRlRm9udCA9IGZ1bmN0aW9uIChmYW1pbHlOYW1lLCBib2xkLCBpdGFsaWNzKSB7XHJcblx0dmFyIHR5cGUgPSB0aGlzLmdldEZvbnRUeXBlKGJvbGQsIGl0YWxpY3MpO1xyXG5cdGlmICh0aGlzLmdldEZvbnRGaWxlKGZhbWlseU5hbWUsIGJvbGQsIGl0YWxpY3MpID09PSBudWxsKSB7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ZvbnQgXFwnJyArIGZhbWlseU5hbWUgKyAnXFwnIGluIHN0eWxlIFxcJycgKyB0eXBlICsgJ1xcJyBpcyBub3QgZGVmaW5lZCBpbiB0aGUgZm9udCBzZWN0aW9uIG9mIHRoZSBkb2N1bWVudCBkZWZpbml0aW9uLicpO1xyXG5cdH1cclxuXHJcblx0dGhpcy5mb250Q2FjaGVbZmFtaWx5TmFtZV0gPSB0aGlzLmZvbnRDYWNoZVtmYW1pbHlOYW1lXSB8fCB7fTtcclxuXHJcblx0aWYgKCF0aGlzLmZvbnRDYWNoZVtmYW1pbHlOYW1lXVt0eXBlXSkge1xyXG5cdFx0dmFyIGRlZiA9IHRoaXMuZm9udHNbZmFtaWx5TmFtZV1bdHlwZV07XHJcblx0XHRpZiAoIWlzQXJyYXkoZGVmKSkge1xyXG5cdFx0XHRkZWYgPSBbZGVmXTtcclxuXHRcdH1cclxuXHRcdHRoaXMuZm9udENhY2hlW2ZhbWlseU5hbWVdW3R5cGVdID0gdGhpcy5wZGZLaXREb2MuZm9udC5hcHBseSh0aGlzLnBkZktpdERvYywgZGVmKS5fZm9udDtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0aGlzLmZvbnRDYWNoZVtmYW1pbHlOYW1lXVt0eXBlXTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRm9udFByb3ZpZGVyO1xyXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDYyMjU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXHJcblxyXG5mdW5jdGlvbiBpc1N0cmluZyh2YXJpYWJsZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFyaWFibGUgPT09ICdzdHJpbmcnIHx8IHZhcmlhYmxlIGluc3RhbmNlb2YgU3RyaW5nO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc051bWJlcih2YXJpYWJsZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFyaWFibGUgPT09ICdudW1iZXInIHx8IHZhcmlhYmxlIGluc3RhbmNlb2YgTnVtYmVyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFyaWFibGUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09PSAnYm9vbGVhbic7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXkodmFyaWFibGUpIHtcclxuXHRyZXR1cm4gQXJyYXkuaXNBcnJheSh2YXJpYWJsZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09PSAnZnVuY3Rpb24nO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc09iamVjdCh2YXJpYWJsZSkge1xyXG5cdHJldHVybiB2YXJpYWJsZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFyaWFibGUgPT09ICdvYmplY3QnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc051bGwodmFyaWFibGUpIHtcclxuXHRyZXR1cm4gdmFyaWFibGUgPT09IG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhcmlhYmxlKSB7XHJcblx0cmV0dXJuIHZhcmlhYmxlID09PSB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhY2soKSB7XHJcblx0dmFyIHJlc3VsdCA9IHt9O1xyXG5cclxuXHRmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdHZhciBvYmogPSBhcmd1bWVudHNbaV07XHJcblxyXG5cdFx0aWYgKG9iaikge1xyXG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcblx0XHRcdFx0aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IG9ialtrZXldO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gb2Zmc2V0VmVjdG9yKHZlY3RvciwgeCwgeSkge1xyXG5cdHN3aXRjaCAodmVjdG9yLnR5cGUpIHtcclxuXHRcdGNhc2UgJ2VsbGlwc2UnOlxyXG5cdFx0Y2FzZSAncmVjdCc6XHJcblx0XHRcdHZlY3Rvci54ICs9IHg7XHJcblx0XHRcdHZlY3Rvci55ICs9IHk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnbGluZSc6XHJcblx0XHRcdHZlY3Rvci54MSArPSB4O1xyXG5cdFx0XHR2ZWN0b3IueDIgKz0geDtcclxuXHRcdFx0dmVjdG9yLnkxICs9IHk7XHJcblx0XHRcdHZlY3Rvci55MiArPSB5O1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgJ3BvbHlsaW5lJzpcclxuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB2ZWN0b3IucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRcdHZlY3Rvci5wb2ludHNbaV0ueCArPSB4O1xyXG5cdFx0XHRcdHZlY3Rvci5wb2ludHNbaV0ueSArPSB5O1xyXG5cdFx0XHR9XHJcblx0XHRcdGJyZWFrO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gZm9udFN0cmluZ2lmeShrZXksIHZhbCkge1xyXG5cdGlmIChrZXkgPT09ICdmb250Jykge1xyXG5cdFx0cmV0dXJuICdmb250JztcclxuXHR9XHJcblx0cmV0dXJuIHZhbDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Tm9kZUlkKG5vZGUpIHtcclxuXHRpZiAobm9kZS5pZCkge1xyXG5cdFx0cmV0dXJuIG5vZGUuaWQ7XHJcblx0fVxyXG5cclxuXHRpZiAoaXNBcnJheShub2RlLnRleHQpKSB7XHJcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUudGV4dC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0dmFyIG4gPSBub2RlLnRleHRbaV07XHJcblx0XHRcdHZhciBub2RlSWQgPSBnZXROb2RlSWQobik7XHJcblx0XHRcdGlmIChub2RlSWQpIHtcclxuXHRcdFx0XHRyZXR1cm4gbm9kZUlkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNQYXR0ZXJuKGNvbG9yKSB7XHJcblx0cmV0dXJuIGlzQXJyYXkoY29sb3IpICYmIGNvbG9yLmxlbmd0aCA9PT0gMjtcclxufVxyXG5cclxuLy8gY29udmVydHMgZnJvbSBhIFs8cGF0dGVybiBuYW1lPiwgPGNvbG9yPl0gYXMgdXNlZCBieSBwZGZtYWtlXHJcbi8vIGludG8gWzxwYXR0ZXJuIG9iamVjdD4sIDxjb2xvcj5dIGFzIHVzZWQgYnkgcGRma2l0XHJcbi8vICh0aGUgcGF0dGVybiBoYXMgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgZG9jIGRlZmluaXRpb24gb2YgY291cnNlKVxyXG5mdW5jdGlvbiBnZXRQYXR0ZXJuKGNvbG9yLCBwYXR0ZXJucykge1xyXG5cdHJldHVybiBbcGF0dGVybnNbY29sb3JbMF1dLCBjb2xvclsxXV07XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdGlzU3RyaW5nOiBpc1N0cmluZyxcclxuXHRpc051bWJlcjogaXNOdW1iZXIsXHJcblx0aXNCb29sZWFuOiBpc0Jvb2xlYW4sXHJcblx0aXNBcnJheTogaXNBcnJheSxcclxuXHRpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxyXG5cdGlzT2JqZWN0OiBpc09iamVjdCxcclxuXHRpc051bGw6IGlzTnVsbCxcclxuXHRpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXHJcblx0cGFjazogcGFjayxcclxuXHRmb250U3RyaW5naWZ5OiBmb250U3RyaW5naWZ5LFxyXG5cdG9mZnNldFZlY3Rvcjogb2Zmc2V0VmVjdG9yLFxyXG5cdGdldE5vZGVJZDogZ2V0Tm9kZUlkLFxyXG5cdGlzUGF0dGVybjogaXNQYXR0ZXJuLFxyXG5cdGdldFBhdHRlcm46IGdldFBhdHRlcm5cclxufTtcclxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMDkwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogcHJvdmlkZWQgZGVwZW5kZW5jeSAqLyB2YXIgQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODIzKVtcIkJ1ZmZlclwiXTtcblxyXG5cclxudmFyIGZzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzODU3KTtcclxuXHJcbmZ1bmN0aW9uIEltYWdlTWVhc3VyZShwZGZLaXREb2MsIGltYWdlRGljdGlvbmFyeSkge1xyXG5cdHRoaXMucGRmS2l0RG9jID0gcGRmS2l0RG9jO1xyXG5cdHRoaXMuaW1hZ2VEaWN0aW9uYXJ5ID0gaW1hZ2VEaWN0aW9uYXJ5IHx8IHt9O1xyXG59XHJcblxyXG5JbWFnZU1lYXN1cmUucHJvdG90eXBlLm1lYXN1cmVJbWFnZSA9IGZ1bmN0aW9uIChzcmMpIHtcclxuXHR2YXIgaW1hZ2U7XHJcblx0dmFyIHRoYXQgPSB0aGlzO1xyXG5cclxuXHRpZiAoIXRoaXMucGRmS2l0RG9jLl9pbWFnZVJlZ2lzdHJ5W3NyY10pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGltYWdlID0gdGhpcy5wZGZLaXREb2Mub3BlbkltYWdlKHJlYWxJbWFnZVNyYyhzcmMpKTtcclxuXHRcdFx0aWYgKCFpbWFnZSkge1xyXG5cdFx0XHRcdHRocm93ICdObyBpbWFnZSc7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdHRocm93ICdJbnZhbGlkIGltYWdlOiAnICsgZXJyb3IudG9TdHJpbmcoKSArICdcXG5JbWFnZXMgZGljdGlvbmFyeSBzaG91bGQgY29udGFpbiBkYXRhVVJMIGVudHJpZXMgKG9yIGxvY2FsIGZpbGUgcGF0aHMgaW4gbm9kZS5qcyknO1xyXG5cdFx0fVxyXG5cdFx0aW1hZ2UuZW1iZWQodGhpcy5wZGZLaXREb2MpO1xyXG5cdFx0dGhpcy5wZGZLaXREb2MuX2ltYWdlUmVnaXN0cnlbc3JjXSA9IGltYWdlO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRpbWFnZSA9IHRoaXMucGRmS2l0RG9jLl9pbWFnZVJlZ2lzdHJ5W3NyY107XHJcblx0fVxyXG5cclxuXHRyZXR1cm4geyB3aWR0aDogaW1hZ2Uud2lkdGgsIGhlaWdodDogaW1hZ2UuaGVpZ2h0IH07XHJcblxyXG5cdGZ1bmN0aW9uIHJlYWxJbWFnZVNyYyhzcmMpIHtcclxuXHRcdHZhciBpbWcgPSB0aGF0LmltYWdlRGljdGlvbmFyeVtzcmNdO1xyXG5cclxuXHRcdGlmICghaW1nKSB7XHJcblx0XHRcdHJldHVybiBzcmM7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGZzLmV4aXN0c1N5bmMoaW1nKSkge1xyXG5cdFx0XHRyZXR1cm4gZnMucmVhZEZpbGVTeW5jKGltZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGluZGV4ID0gaW1nLmluZGV4T2YoJ2Jhc2U2NCwnKTtcclxuXHRcdGlmIChpbmRleCA8IDApIHtcclxuXHRcdFx0cmV0dXJuIHRoYXQuaW1hZ2VEaWN0aW9uYXJ5W3NyY107XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIEJ1ZmZlci5mcm9tKGltZy5zdWJzdHJpbmcoaW5kZXggKyA3KSwgJ2Jhc2U2NCcpO1xyXG5cdH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW1hZ2VNZWFzdXJlO1xyXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI2Nzg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cclxuXHJcbnZhciBUcmF2ZXJzYWxUcmFja2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTM3KTtcclxudmFyIERvY1ByZXByb2Nlc3NvciA9IF9fd2VicGFja19yZXF1aXJlX18oNDg4OSk7XHJcbnZhciBEb2NNZWFzdXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzI4KTtcclxudmFyIERvY3VtZW50Q29udGV4dCA9IF9fd2VicGFja19yZXF1aXJlX18oMzg1OCk7XHJcbnZhciBQYWdlRWxlbWVudFdyaXRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjkxMik7XHJcbnZhciBDb2x1bW5DYWxjdWxhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NDk4KTtcclxudmFyIFRhYmxlUHJvY2Vzc29yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MzQyKTtcclxudmFyIExpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3NzUpO1xyXG52YXIgaXNTdHJpbmcgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc1N0cmluZyk7XHJcbnZhciBpc0FycmF5ID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNBcnJheSk7XHJcbnZhciBpc1VuZGVmaW5lZCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzVW5kZWZpbmVkKTtcclxudmFyIGlzTnVsbCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzTnVsbCk7XHJcbnZhciBwYWNrID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkucGFjayk7XHJcbnZhciBvZmZzZXRWZWN0b3IgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5vZmZzZXRWZWN0b3IpO1xyXG52YXIgZm9udFN0cmluZ2lmeSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmZvbnRTdHJpbmdpZnkpO1xyXG52YXIgZ2V0Tm9kZUlkID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuZ2V0Tm9kZUlkKTtcclxudmFyIGlzRnVuY3Rpb24gPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc0Z1bmN0aW9uKTtcclxudmFyIFRleHRUb29scyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM1MCk7XHJcbnZhciBTdHlsZUNvbnRleHRTdGFjayA9IF9fd2VicGFja19yZXF1aXJlX18oNzU5Nyk7XHJcbnZhciBpc051bWJlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzTnVtYmVyKTtcclxuXHJcbmZ1bmN0aW9uIGFkZEFsbCh0YXJnZXQsIG90aGVyQXJyYXkpIHtcclxuXHRvdGhlckFycmF5LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuXHRcdHRhcmdldC5wdXNoKGl0ZW0pO1xyXG5cdH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMYXlvdXRCdWlsZGVyIC0gbGF5b3V0IGVuZ2luZSB3aGljaCB0dXJucyBkb2N1bWVudC1kZWZpbml0aW9uLW9iamVjdFxyXG4gKiBpbnRvIGEgc2V0IG9mIHBhZ2VzLCBsaW5lcywgaW5saW5lcyBhbmQgdmVjdG9ycyByZWFkeSB0byBiZSByZW5kZXJlZCBpbnRvIGEgUERGXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYWdlU2l6ZSAtIGFuIG9iamVjdCBkZWZpbmluZyBwYWdlIHdpZHRoIGFuZCBoZWlnaHRcclxuICogQHBhcmFtIHtPYmplY3R9IHBhZ2VNYXJnaW5zIC0gYW4gb2JqZWN0IGRlZmluaW5nIHRvcCwgbGVmdCwgcmlnaHQgYW5kIGJvdHRvbSBtYXJnaW5zXHJcbiAqL1xyXG5mdW5jdGlvbiBMYXlvdXRCdWlsZGVyKHBhZ2VTaXplLCBwYWdlTWFyZ2lucywgaW1hZ2VNZWFzdXJlLCBzdmdNZWFzdXJlKSB7XHJcblx0dGhpcy5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xyXG5cdHRoaXMucGFnZU1hcmdpbnMgPSBwYWdlTWFyZ2lucztcclxuXHR0aGlzLnRyYWNrZXIgPSBuZXcgVHJhdmVyc2FsVHJhY2tlcigpO1xyXG5cdHRoaXMuaW1hZ2VNZWFzdXJlID0gaW1hZ2VNZWFzdXJlO1xyXG5cdHRoaXMuc3ZnTWVhc3VyZSA9IHN2Z01lYXN1cmU7XHJcblx0dGhpcy50YWJsZUxheW91dHMgPSB7fTtcclxufVxyXG5cclxuTGF5b3V0QnVpbGRlci5wcm90b3R5cGUucmVnaXN0ZXJUYWJsZUxheW91dHMgPSBmdW5jdGlvbiAodGFibGVMYXlvdXRzKSB7XHJcblx0dGhpcy50YWJsZUxheW91dHMgPSBwYWNrKHRoaXMudGFibGVMYXlvdXRzLCB0YWJsZUxheW91dHMpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEV4ZWN1dGVzIGxheW91dCBlbmdpbmUgb24gZG9jdW1lbnQtZGVmaW5pdGlvbi1vYmplY3QgYW5kIGNyZWF0ZXMgYW4gYXJyYXkgb2YgcGFnZXNcclxuICogY29udGFpbmluZyBwb3NpdGlvbmVkIEJsb2NrcywgTGluZXMgYW5kIGlubGluZXNcclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IGRvY1N0cnVjdHVyZSBkb2N1bWVudC1kZWZpbml0aW9uLW9iamVjdFxyXG4gKiBAcGFyYW0ge09iamVjdH0gZm9udFByb3ZpZGVyIGZvbnQgcHJvdmlkZXJcclxuICogQHBhcmFtIHtPYmplY3R9IHN0eWxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5IHdpdGggc3R5bGUgZGVmaW5pdGlvbnNcclxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRTdHlsZSBkZWZhdWx0IHN0eWxlIGRlZmluaXRpb25cclxuICogQHJldHVybiB7QXJyYXl9IGFuIGFycmF5IG9mIHBhZ2VzXHJcbiAqL1xyXG5MYXlvdXRCdWlsZGVyLnByb3RvdHlwZS5sYXlvdXREb2N1bWVudCA9IGZ1bmN0aW9uIChkb2NTdHJ1Y3R1cmUsIGZvbnRQcm92aWRlciwgc3R5bGVEaWN0aW9uYXJ5LCBkZWZhdWx0U3R5bGUsIGJhY2tncm91bmQsIGhlYWRlciwgZm9vdGVyLCBpbWFnZXMsIHdhdGVybWFyaywgcGFnZUJyZWFrQmVmb3JlRmN0KSB7XHJcblxyXG5cdGZ1bmN0aW9uIGFkZFBhZ2VCcmVha3NJZk5lY2Vzc2FyeShsaW5lYXJOb2RlTGlzdCwgcGFnZXMpIHtcclxuXHJcblx0XHRpZiAoIWlzRnVuY3Rpb24ocGFnZUJyZWFrQmVmb3JlRmN0KSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0bGluZWFyTm9kZUxpc3QgPSBsaW5lYXJOb2RlTGlzdC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcclxuXHRcdFx0cmV0dXJuIG5vZGUucG9zaXRpb25zLmxlbmd0aCA+IDA7XHJcblx0XHR9KTtcclxuXHJcblx0XHRsaW5lYXJOb2RlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XHJcblx0XHRcdHZhciBub2RlSW5mbyA9IHt9O1xyXG5cdFx0XHRbXHJcblx0XHRcdFx0J2lkJywgJ3RleHQnLCAndWwnLCAnb2wnLCAndGFibGUnLCAnaW1hZ2UnLCAncXInLCAnY2FudmFzJywgJ3N2ZycsICdjb2x1bW5zJyxcclxuXHRcdFx0XHQnaGVhZGxpbmVMZXZlbCcsICdzdHlsZScsICdwYWdlQnJlYWsnLCAncGFnZU9yaWVudGF0aW9uJyxcclxuXHRcdFx0XHQnd2lkdGgnLCAnaGVpZ2h0J1xyXG5cdFx0XHRdLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG5cdFx0XHRcdGlmIChub2RlW2tleV0gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0bm9kZUluZm9ba2V5XSA9IG5vZGVba2V5XTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRub2RlSW5mby5zdGFydFBvc2l0aW9uID0gbm9kZS5wb3NpdGlvbnNbMF07XHJcblx0XHRcdG5vZGVJbmZvLnBhZ2VOdW1iZXJzID0gQXJyYXkuZnJvbShuZXcgU2V0KG5vZGUucG9zaXRpb25zLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS5wYWdlTnVtYmVyOyB9KSkpO1xyXG5cdFx0XHRub2RlSW5mby5wYWdlcyA9IHBhZ2VzLmxlbmd0aDtcclxuXHRcdFx0bm9kZUluZm8uc3RhY2sgPSBpc0FycmF5KG5vZGUuc3RhY2spO1xyXG5cclxuXHRcdFx0bm9kZS5ub2RlSW5mbyA9IG5vZGVJbmZvO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Zm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVhck5vZGVMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG5cdFx0XHR2YXIgbm9kZSA9IGxpbmVhck5vZGVMaXN0W2luZGV4XTtcclxuXHRcdFx0aWYgKG5vZGUucGFnZUJyZWFrICE9PSAnYmVmb3JlJyAmJiAhbm9kZS5wYWdlQnJlYWtDYWxjdWxhdGVkKSB7XHJcblx0XHRcdFx0bm9kZS5wYWdlQnJlYWtDYWxjdWxhdGVkID0gdHJ1ZTtcclxuXHRcdFx0XHR2YXIgcGFnZU51bWJlciA9IG5vZGUubm9kZUluZm8ucGFnZU51bWJlcnNbMF07XHJcblx0XHRcdFx0dmFyIGZvbGxvd2luZ05vZGVzT25QYWdlID0gW107XHJcblx0XHRcdFx0dmFyIG5vZGVzT25OZXh0UGFnZSA9IFtdO1xyXG5cdFx0XHRcdHZhciBwcmV2aW91c05vZGVzT25QYWdlID0gW107XHJcblx0XHRcdFx0aWYgKHBhZ2VCcmVha0JlZm9yZUZjdC5sZW5ndGggPiAxKSB7XHJcblx0XHRcdFx0XHRmb3IgKHZhciBpaSA9IGluZGV4ICsgMSwgbCA9IGxpbmVhck5vZGVMaXN0Lmxlbmd0aDsgaWkgPCBsOyBpaSsrKSB7XHJcblx0XHRcdFx0XHRcdGlmIChsaW5lYXJOb2RlTGlzdFtpaV0ubm9kZUluZm8ucGFnZU51bWJlcnMuaW5kZXhPZihwYWdlTnVtYmVyKSA+IC0xKSB7XHJcblx0XHRcdFx0XHRcdFx0Zm9sbG93aW5nTm9kZXNPblBhZ2UucHVzaChsaW5lYXJOb2RlTGlzdFtpaV0ubm9kZUluZm8pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChwYWdlQnJlYWtCZWZvcmVGY3QubGVuZ3RoID4gMiAmJiBsaW5lYXJOb2RlTGlzdFtpaV0ubm9kZUluZm8ucGFnZU51bWJlcnMuaW5kZXhPZihwYWdlTnVtYmVyICsgMSkgPiAtMSkge1xyXG5cdFx0XHRcdFx0XHRcdG5vZGVzT25OZXh0UGFnZS5wdXNoKGxpbmVhck5vZGVMaXN0W2lpXS5ub2RlSW5mbyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHBhZ2VCcmVha0JlZm9yZUZjdC5sZW5ndGggPiAzKSB7XHJcblx0XHRcdFx0XHRmb3IgKHZhciBpaSA9IDA7IGlpIDwgaW5kZXg7IGlpKyspIHtcclxuXHRcdFx0XHRcdFx0aWYgKGxpbmVhck5vZGVMaXN0W2lpXS5ub2RlSW5mby5wYWdlTnVtYmVycy5pbmRleE9mKHBhZ2VOdW1iZXIpID4gLTEpIHtcclxuXHRcdFx0XHRcdFx0XHRwcmV2aW91c05vZGVzT25QYWdlLnB1c2gobGluZWFyTm9kZUxpc3RbaWldLm5vZGVJbmZvKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAocGFnZUJyZWFrQmVmb3JlRmN0KG5vZGUubm9kZUluZm8sIGZvbGxvd2luZ05vZGVzT25QYWdlLCBub2Rlc09uTmV4dFBhZ2UsIHByZXZpb3VzTm9kZXNPblBhZ2UpKSB7XHJcblx0XHRcdFx0XHRub2RlLnBhZ2VCcmVhayA9ICdiZWZvcmUnO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0dGhpcy5kb2NQcmVwcm9jZXNzb3IgPSBuZXcgRG9jUHJlcHJvY2Vzc29yKCk7XHJcblx0dGhpcy5kb2NNZWFzdXJlID0gbmV3IERvY01lYXN1cmUoZm9udFByb3ZpZGVyLCBzdHlsZURpY3Rpb25hcnksIGRlZmF1bHRTdHlsZSwgdGhpcy5pbWFnZU1lYXN1cmUsIHRoaXMuc3ZnTWVhc3VyZSwgdGhpcy50YWJsZUxheW91dHMsIGltYWdlcyk7XHJcblxyXG5cclxuXHRmdW5jdGlvbiByZXNldFhZcyhyZXN1bHQpIHtcclxuXHRcdHJlc3VsdC5saW5lYXJOb2RlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XHJcblx0XHRcdG5vZGUucmVzZXRYWSgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHR2YXIgcmVzdWx0ID0gdGhpcy50cnlMYXlvdXREb2N1bWVudChkb2NTdHJ1Y3R1cmUsIGZvbnRQcm92aWRlciwgc3R5bGVEaWN0aW9uYXJ5LCBkZWZhdWx0U3R5bGUsIGJhY2tncm91bmQsIGhlYWRlciwgZm9vdGVyLCBpbWFnZXMsIHdhdGVybWFyayk7XHJcblx0d2hpbGUgKGFkZFBhZ2VCcmVha3NJZk5lY2Vzc2FyeShyZXN1bHQubGluZWFyTm9kZUxpc3QsIHJlc3VsdC5wYWdlcykpIHtcclxuXHRcdHJlc2V0WFlzKHJlc3VsdCk7XHJcblx0XHRyZXN1bHQgPSB0aGlzLnRyeUxheW91dERvY3VtZW50KGRvY1N0cnVjdHVyZSwgZm9udFByb3ZpZGVyLCBzdHlsZURpY3Rpb25hcnksIGRlZmF1bHRTdHlsZSwgYmFja2dyb3VuZCwgaGVhZGVyLCBmb290ZXIsIGltYWdlcywgd2F0ZXJtYXJrKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiByZXN1bHQucGFnZXM7XHJcbn07XHJcblxyXG5MYXlvdXRCdWlsZGVyLnByb3RvdHlwZS50cnlMYXlvdXREb2N1bWVudCA9IGZ1bmN0aW9uIChkb2NTdHJ1Y3R1cmUsIGZvbnRQcm92aWRlciwgc3R5bGVEaWN0aW9uYXJ5LCBkZWZhdWx0U3R5bGUsIGJhY2tncm91bmQsIGhlYWRlciwgZm9vdGVyLCBpbWFnZXMsIHdhdGVybWFyaywgcGFnZUJyZWFrQmVmb3JlRmN0KSB7XHJcblxyXG5cdHRoaXMubGluZWFyTm9kZUxpc3QgPSBbXTtcclxuXHRkb2NTdHJ1Y3R1cmUgPSB0aGlzLmRvY1ByZXByb2Nlc3Nvci5wcmVwcm9jZXNzRG9jdW1lbnQoZG9jU3RydWN0dXJlKTtcclxuXHRkb2NTdHJ1Y3R1cmUgPSB0aGlzLmRvY01lYXN1cmUubWVhc3VyZURvY3VtZW50KGRvY1N0cnVjdHVyZSk7XHJcblxyXG5cdHRoaXMud3JpdGVyID0gbmV3IFBhZ2VFbGVtZW50V3JpdGVyKFxyXG5cdFx0bmV3IERvY3VtZW50Q29udGV4dCh0aGlzLnBhZ2VTaXplLCB0aGlzLnBhZ2VNYXJnaW5zKSwgdGhpcy50cmFja2VyKTtcclxuXHJcblx0dmFyIF90aGlzID0gdGhpcztcclxuXHR0aGlzLndyaXRlci5jb250ZXh0KCkudHJhY2tlci5zdGFydFRyYWNraW5nKCdwYWdlQWRkZWQnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRfdGhpcy5hZGRCYWNrZ3JvdW5kKGJhY2tncm91bmQpO1xyXG5cdH0pO1xyXG5cclxuXHR0aGlzLmFkZEJhY2tncm91bmQoYmFja2dyb3VuZCk7XHJcblx0dGhpcy5wcm9jZXNzTm9kZShkb2NTdHJ1Y3R1cmUpO1xyXG5cdHRoaXMuYWRkSGVhZGVyc0FuZEZvb3RlcnMoaGVhZGVyLCBmb290ZXIpO1xyXG5cdGlmICh3YXRlcm1hcmsgIT0gbnVsbCkge1xyXG5cdFx0dGhpcy5hZGRXYXRlcm1hcmsod2F0ZXJtYXJrLCBmb250UHJvdmlkZXIsIGRlZmF1bHRTdHlsZSk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4geyBwYWdlczogdGhpcy53cml0ZXIuY29udGV4dCgpLnBhZ2VzLCBsaW5lYXJOb2RlTGlzdDogdGhpcy5saW5lYXJOb2RlTGlzdCB9O1xyXG59O1xyXG5cclxuXHJcbkxheW91dEJ1aWxkZXIucHJvdG90eXBlLmFkZEJhY2tncm91bmQgPSBmdW5jdGlvbiAoYmFja2dyb3VuZCkge1xyXG5cdHZhciBiYWNrZ3JvdW5kR2V0dGVyID0gaXNGdW5jdGlvbihiYWNrZ3JvdW5kKSA/IGJhY2tncm91bmQgOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gYmFja2dyb3VuZDtcclxuXHR9O1xyXG5cclxuXHR2YXIgY29udGV4dCA9IHRoaXMud3JpdGVyLmNvbnRleHQoKTtcclxuXHR2YXIgcGFnZVNpemUgPSBjb250ZXh0LmdldEN1cnJlbnRQYWdlKCkucGFnZVNpemU7XHJcblxyXG5cdHZhciBwYWdlQmFja2dyb3VuZCA9IGJhY2tncm91bmRHZXR0ZXIoY29udGV4dC5wYWdlICsgMSwgcGFnZVNpemUpO1xyXG5cclxuXHRpZiAocGFnZUJhY2tncm91bmQpIHtcclxuXHRcdHRoaXMud3JpdGVyLmJlZ2luVW5icmVha2FibGVCbG9jayhwYWdlU2l6ZS53aWR0aCwgcGFnZVNpemUuaGVpZ2h0KTtcclxuXHRcdHBhZ2VCYWNrZ3JvdW5kID0gdGhpcy5kb2NQcmVwcm9jZXNzb3IucHJlcHJvY2Vzc0RvY3VtZW50KHBhZ2VCYWNrZ3JvdW5kKTtcclxuXHRcdHRoaXMucHJvY2Vzc05vZGUodGhpcy5kb2NNZWFzdXJlLm1lYXN1cmVEb2N1bWVudChwYWdlQmFja2dyb3VuZCkpO1xyXG5cdFx0dGhpcy53cml0ZXIuY29tbWl0VW5icmVha2FibGVCbG9jaygwLCAwKTtcclxuXHRcdGNvbnRleHQuYmFja2dyb3VuZExlbmd0aFtjb250ZXh0LnBhZ2VdICs9IHBhZ2VCYWNrZ3JvdW5kLnBvc2l0aW9ucy5sZW5ndGg7XHJcblx0fVxyXG59O1xyXG5cclxuTGF5b3V0QnVpbGRlci5wcm90b3R5cGUuYWRkU3RhdGljUmVwZWF0YWJsZSA9IGZ1bmN0aW9uIChoZWFkZXJPckZvb3Rlciwgc2l6ZUZ1bmN0aW9uKSB7XHJcblx0dGhpcy5hZGREeW5hbWljUmVwZWF0YWJsZShmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShoZWFkZXJPckZvb3RlcikpOyAvLyBjb3B5IHRvIG5ldyBvYmplY3RcclxuXHR9LCBzaXplRnVuY3Rpb24pO1xyXG59O1xyXG5cclxuTGF5b3V0QnVpbGRlci5wcm90b3R5cGUuYWRkRHluYW1pY1JlcGVhdGFibGUgPSBmdW5jdGlvbiAobm9kZUdldHRlciwgc2l6ZUZ1bmN0aW9uKSB7XHJcblx0dmFyIHBhZ2VzID0gdGhpcy53cml0ZXIuY29udGV4dCgpLnBhZ2VzO1xyXG5cclxuXHRmb3IgKHZhciBwYWdlSW5kZXggPSAwLCBsID0gcGFnZXMubGVuZ3RoOyBwYWdlSW5kZXggPCBsOyBwYWdlSW5kZXgrKykge1xyXG5cdFx0dGhpcy53cml0ZXIuY29udGV4dCgpLnBhZ2UgPSBwYWdlSW5kZXg7XHJcblxyXG5cdFx0dmFyIG5vZGUgPSBub2RlR2V0dGVyKHBhZ2VJbmRleCArIDEsIGwsIHRoaXMud3JpdGVyLmNvbnRleHQoKS5wYWdlc1twYWdlSW5kZXhdLnBhZ2VTaXplKTtcclxuXHJcblx0XHRpZiAobm9kZSkge1xyXG5cdFx0XHR2YXIgc2l6ZXMgPSBzaXplRnVuY3Rpb24odGhpcy53cml0ZXIuY29udGV4dCgpLmdldEN1cnJlbnRQYWdlKCkucGFnZVNpemUsIHRoaXMucGFnZU1hcmdpbnMpO1xyXG5cdFx0XHR0aGlzLndyaXRlci5iZWdpblVuYnJlYWthYmxlQmxvY2soc2l6ZXMud2lkdGgsIHNpemVzLmhlaWdodCk7XHJcblx0XHRcdG5vZGUgPSB0aGlzLmRvY1ByZXByb2Nlc3Nvci5wcmVwcm9jZXNzRG9jdW1lbnQobm9kZSk7XHJcblx0XHRcdHRoaXMucHJvY2Vzc05vZGUodGhpcy5kb2NNZWFzdXJlLm1lYXN1cmVEb2N1bWVudChub2RlKSk7XHJcblx0XHRcdHRoaXMud3JpdGVyLmNvbW1pdFVuYnJlYWthYmxlQmxvY2soc2l6ZXMueCwgc2l6ZXMueSk7XHJcblx0XHR9XHJcblx0fVxyXG59O1xyXG5cclxuTGF5b3V0QnVpbGRlci5wcm90b3R5cGUuYWRkSGVhZGVyc0FuZEZvb3RlcnMgPSBmdW5jdGlvbiAoaGVhZGVyLCBmb290ZXIpIHtcclxuXHR2YXIgaGVhZGVyU2l6ZUZjdCA9IGZ1bmN0aW9uIChwYWdlU2l6ZSwgcGFnZU1hcmdpbnMpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHg6IDAsXHJcblx0XHRcdHk6IDAsXHJcblx0XHRcdHdpZHRoOiBwYWdlU2l6ZS53aWR0aCxcclxuXHRcdFx0aGVpZ2h0OiBwYWdlTWFyZ2lucy50b3BcclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0dmFyIGZvb3RlclNpemVGY3QgPSBmdW5jdGlvbiAocGFnZVNpemUsIHBhZ2VNYXJnaW5zKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR4OiAwLFxyXG5cdFx0XHR5OiBwYWdlU2l6ZS5oZWlnaHQgLSBwYWdlTWFyZ2lucy5ib3R0b20sXHJcblx0XHRcdHdpZHRoOiBwYWdlU2l6ZS53aWR0aCxcclxuXHRcdFx0aGVpZ2h0OiBwYWdlTWFyZ2lucy5ib3R0b21cclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0aWYgKGlzRnVuY3Rpb24oaGVhZGVyKSkge1xyXG5cdFx0dGhpcy5hZGREeW5hbWljUmVwZWF0YWJsZShoZWFkZXIsIGhlYWRlclNpemVGY3QpO1xyXG5cdH0gZWxzZSBpZiAoaGVhZGVyKSB7XHJcblx0XHR0aGlzLmFkZFN0YXRpY1JlcGVhdGFibGUoaGVhZGVyLCBoZWFkZXJTaXplRmN0KTtcclxuXHR9XHJcblxyXG5cdGlmIChpc0Z1bmN0aW9uKGZvb3RlcikpIHtcclxuXHRcdHRoaXMuYWRkRHluYW1pY1JlcGVhdGFibGUoZm9vdGVyLCBmb290ZXJTaXplRmN0KTtcclxuXHR9IGVsc2UgaWYgKGZvb3Rlcikge1xyXG5cdFx0dGhpcy5hZGRTdGF0aWNSZXBlYXRhYmxlKGZvb3RlciwgZm9vdGVyU2l6ZUZjdCk7XHJcblx0fVxyXG59O1xyXG5cclxuTGF5b3V0QnVpbGRlci5wcm90b3R5cGUuYWRkV2F0ZXJtYXJrID0gZnVuY3Rpb24gKHdhdGVybWFyaywgZm9udFByb3ZpZGVyLCBkZWZhdWx0U3R5bGUpIHtcclxuXHRpZiAoaXNTdHJpbmcod2F0ZXJtYXJrKSkge1xyXG5cdFx0d2F0ZXJtYXJrID0geyAndGV4dCc6IHdhdGVybWFyayB9O1xyXG5cdH1cclxuXHJcblx0aWYgKCF3YXRlcm1hcmsudGV4dCkgeyAvLyBlbXB0eSB3YXRlcm1hcmsgdGV4dFxyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0d2F0ZXJtYXJrLmZvbnQgPSB3YXRlcm1hcmsuZm9udCB8fCBkZWZhdWx0U3R5bGUuZm9udCB8fCAnUm9ib3RvJztcclxuXHR3YXRlcm1hcmsuZm9udFNpemUgPSB3YXRlcm1hcmsuZm9udFNpemUgfHwgJ2F1dG8nO1xyXG5cdHdhdGVybWFyay5jb2xvciA9IHdhdGVybWFyay5jb2xvciB8fCAnYmxhY2snO1xyXG5cdHdhdGVybWFyay5vcGFjaXR5ID0gaXNOdW1iZXIod2F0ZXJtYXJrLm9wYWNpdHkpID8gd2F0ZXJtYXJrLm9wYWNpdHkgOiAwLjY7XHJcblx0d2F0ZXJtYXJrLmJvbGQgPSB3YXRlcm1hcmsuYm9sZCB8fCBmYWxzZTtcclxuXHR3YXRlcm1hcmsuaXRhbGljcyA9IHdhdGVybWFyay5pdGFsaWNzIHx8IGZhbHNlO1xyXG5cdHdhdGVybWFyay5hbmdsZSA9ICFpc1VuZGVmaW5lZCh3YXRlcm1hcmsuYW5nbGUpICYmICFpc051bGwod2F0ZXJtYXJrLmFuZ2xlKSA/IHdhdGVybWFyay5hbmdsZSA6IG51bGw7XHJcblxyXG5cdGlmICh3YXRlcm1hcmsuYW5nbGUgPT09IG51bGwpIHtcclxuXHRcdHdhdGVybWFyay5hbmdsZSA9IE1hdGguYXRhbjIodGhpcy5wYWdlU2l6ZS5oZWlnaHQsIHRoaXMucGFnZVNpemUud2lkdGgpICogLTE4MCAvIE1hdGguUEk7XHJcblx0fVxyXG5cclxuXHRpZiAod2F0ZXJtYXJrLmZvbnRTaXplID09PSAnYXV0bycpIHtcclxuXHRcdHdhdGVybWFyay5mb250U2l6ZSA9IGdldFdhdGVybWFya0ZvbnRTaXplKHRoaXMucGFnZVNpemUsIHdhdGVybWFyaywgZm9udFByb3ZpZGVyKTtcclxuXHR9XHJcblxyXG5cdHZhciB3YXRlcm1hcmtPYmplY3QgPSB7XHJcblx0XHR0ZXh0OiB3YXRlcm1hcmsudGV4dCxcclxuXHRcdGZvbnQ6IGZvbnRQcm92aWRlci5wcm92aWRlRm9udCh3YXRlcm1hcmsuZm9udCwgd2F0ZXJtYXJrLmJvbGQsIHdhdGVybWFyay5pdGFsaWNzKSxcclxuXHRcdGZvbnRTaXplOiB3YXRlcm1hcmsuZm9udFNpemUsXHJcblx0XHRjb2xvcjogd2F0ZXJtYXJrLmNvbG9yLFxyXG5cdFx0b3BhY2l0eTogd2F0ZXJtYXJrLm9wYWNpdHksXHJcblx0XHRhbmdsZTogd2F0ZXJtYXJrLmFuZ2xlXHJcblx0fTtcclxuXHJcblx0d2F0ZXJtYXJrT2JqZWN0Ll9zaXplID0gZ2V0V2F0ZXJtYXJrU2l6ZSh3YXRlcm1hcmssIGZvbnRQcm92aWRlcik7XHJcblxyXG5cdHZhciBwYWdlcyA9IHRoaXMud3JpdGVyLmNvbnRleHQoKS5wYWdlcztcclxuXHRmb3IgKHZhciBpID0gMCwgbCA9IHBhZ2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0cGFnZXNbaV0ud2F0ZXJtYXJrID0gd2F0ZXJtYXJrT2JqZWN0O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0V2F0ZXJtYXJrU2l6ZSh3YXRlcm1hcmssIGZvbnRQcm92aWRlcikge1xyXG5cdFx0dmFyIHRleHRUb29scyA9IG5ldyBUZXh0VG9vbHMoZm9udFByb3ZpZGVyKTtcclxuXHRcdHZhciBzdHlsZUNvbnRleHRTdGFjayA9IG5ldyBTdHlsZUNvbnRleHRTdGFjayhudWxsLCB7IGZvbnQ6IHdhdGVybWFyay5mb250LCBib2xkOiB3YXRlcm1hcmsuYm9sZCwgaXRhbGljczogd2F0ZXJtYXJrLml0YWxpY3MgfSk7XHJcblxyXG5cdFx0c3R5bGVDb250ZXh0U3RhY2sucHVzaCh7XHJcblx0XHRcdGZvbnRTaXplOiB3YXRlcm1hcmsuZm9udFNpemVcclxuXHRcdH0pO1xyXG5cclxuXHRcdHZhciBzaXplID0gdGV4dFRvb2xzLnNpemVPZlN0cmluZyh3YXRlcm1hcmsudGV4dCwgc3R5bGVDb250ZXh0U3RhY2spO1xyXG5cdFx0dmFyIHJvdGF0ZWRTaXplID0gdGV4dFRvb2xzLnNpemVPZlJvdGF0ZWRUZXh0KHdhdGVybWFyay50ZXh0LCB3YXRlcm1hcmsuYW5nbGUsIHN0eWxlQ29udGV4dFN0YWNrKTtcclxuXHJcblx0XHRyZXR1cm4geyBzaXplOiBzaXplLCByb3RhdGVkU2l6ZTogcm90YXRlZFNpemUgfTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldFdhdGVybWFya0ZvbnRTaXplKHBhZ2VTaXplLCB3YXRlcm1hcmssIGZvbnRQcm92aWRlcikge1xyXG5cdFx0dmFyIHRleHRUb29scyA9IG5ldyBUZXh0VG9vbHMoZm9udFByb3ZpZGVyKTtcclxuXHRcdHZhciBzdHlsZUNvbnRleHRTdGFjayA9IG5ldyBTdHlsZUNvbnRleHRTdGFjayhudWxsLCB7IGZvbnQ6IHdhdGVybWFyay5mb250LCBib2xkOiB3YXRlcm1hcmsuYm9sZCwgaXRhbGljczogd2F0ZXJtYXJrLml0YWxpY3MgfSk7XHJcblx0XHR2YXIgcm90YXRlZFNpemU7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCaW5hcnkgc2VhcmNoIHRoZSBiZXN0IGZvbnQgc2l6ZS5cclxuXHRcdCAqIEluaXRpYWwgYm91bmRzIFswLCAxMDAwXVxyXG5cdFx0ICogQnJlYWsgd2hlbiByYW5nZSA8IDFcclxuXHRcdCAqL1xyXG5cdFx0dmFyIGEgPSAwO1xyXG5cdFx0dmFyIGIgPSAxMDAwO1xyXG5cdFx0dmFyIGMgPSAoYSArIGIpIC8gMjtcclxuXHRcdHdoaWxlIChNYXRoLmFicyhhIC0gYikgPiAxKSB7XHJcblx0XHRcdHN0eWxlQ29udGV4dFN0YWNrLnB1c2goe1xyXG5cdFx0XHRcdGZvbnRTaXplOiBjXHJcblx0XHRcdH0pO1xyXG5cdFx0XHRyb3RhdGVkU2l6ZSA9IHRleHRUb29scy5zaXplT2ZSb3RhdGVkVGV4dCh3YXRlcm1hcmsudGV4dCwgd2F0ZXJtYXJrLmFuZ2xlLCBzdHlsZUNvbnRleHRTdGFjayk7XHJcblx0XHRcdGlmIChyb3RhdGVkU2l6ZS53aWR0aCA+IHBhZ2VTaXplLndpZHRoKSB7XHJcblx0XHRcdFx0YiA9IGM7XHJcblx0XHRcdFx0YyA9IChhICsgYikgLyAyO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHJvdGF0ZWRTaXplLndpZHRoIDwgcGFnZVNpemUud2lkdGgpIHtcclxuXHRcdFx0XHRpZiAocm90YXRlZFNpemUuaGVpZ2h0ID4gcGFnZVNpemUuaGVpZ2h0KSB7XHJcblx0XHRcdFx0XHRiID0gYztcclxuXHRcdFx0XHRcdGMgPSAoYSArIGIpIC8gMjtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YSA9IGM7XHJcblx0XHRcdFx0XHRjID0gKGEgKyBiKSAvIDI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHN0eWxlQ29udGV4dFN0YWNrLnBvcCgpO1xyXG5cdFx0fVxyXG5cdFx0LypcclxuXHRcdCBFbmQgYmluYXJ5IHNlYXJjaFxyXG5cdFx0ICovXHJcblx0XHRyZXR1cm4gYztcclxuXHR9XHJcbn07XHJcblxyXG5mdW5jdGlvbiBkZWNvcmF0ZU5vZGUobm9kZSkge1xyXG5cdHZhciB4ID0gbm9kZS54LCB5ID0gbm9kZS55O1xyXG5cdG5vZGUucG9zaXRpb25zID0gW107XHJcblxyXG5cdGlmIChpc0FycmF5KG5vZGUuY2FudmFzKSkge1xyXG5cdFx0bm9kZS5jYW52YXMuZm9yRWFjaChmdW5jdGlvbiAodmVjdG9yKSB7XHJcblx0XHRcdHZhciB4ID0gdmVjdG9yLngsIHkgPSB2ZWN0b3IueSwgeDEgPSB2ZWN0b3IueDEsIHkxID0gdmVjdG9yLnkxLCB4MiA9IHZlY3Rvci54MiwgeTIgPSB2ZWN0b3IueTI7XHJcblx0XHRcdHZlY3Rvci5yZXNldFhZID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHZlY3Rvci54ID0geDtcclxuXHRcdFx0XHR2ZWN0b3IueSA9IHk7XHJcblx0XHRcdFx0dmVjdG9yLngxID0geDE7XHJcblx0XHRcdFx0dmVjdG9yLnkxID0geTE7XHJcblx0XHRcdFx0dmVjdG9yLngyID0geDI7XHJcblx0XHRcdFx0dmVjdG9yLnkyID0geTI7XHJcblx0XHRcdH07XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG5vZGUucmVzZXRYWSA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdG5vZGUueCA9IHg7XHJcblx0XHRub2RlLnkgPSB5O1xyXG5cdFx0aWYgKGlzQXJyYXkobm9kZS5jYW52YXMpKSB7XHJcblx0XHRcdG5vZGUuY2FudmFzLmZvckVhY2goZnVuY3Rpb24gKHZlY3Rvcikge1xyXG5cdFx0XHRcdHZlY3Rvci5yZXNldFhZKCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH07XHJcbn1cclxuXHJcbkxheW91dEJ1aWxkZXIucHJvdG90eXBlLnByb2Nlc3NOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHR2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG5cdHRoaXMubGluZWFyTm9kZUxpc3QucHVzaChub2RlKTtcclxuXHRkZWNvcmF0ZU5vZGUobm9kZSk7XHJcblxyXG5cdGFwcGx5TWFyZ2lucyhmdW5jdGlvbiAoKSB7XHJcblx0XHR2YXIgdW5icmVha2FibGUgPSBub2RlLnVuYnJlYWthYmxlO1xyXG5cdFx0aWYgKHVuYnJlYWthYmxlKSB7XHJcblx0XHRcdHNlbGYud3JpdGVyLmJlZ2luVW5icmVha2FibGVCbG9jaygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBhYnNQb3NpdGlvbiA9IG5vZGUuYWJzb2x1dGVQb3NpdGlvbjtcclxuXHRcdGlmIChhYnNQb3NpdGlvbikge1xyXG5cdFx0XHRzZWxmLndyaXRlci5jb250ZXh0KCkuYmVnaW5EZXRhY2hlZEJsb2NrKCk7XHJcblx0XHRcdHNlbGYud3JpdGVyLmNvbnRleHQoKS5tb3ZlVG8oYWJzUG9zaXRpb24ueCB8fCAwLCBhYnNQb3NpdGlvbi55IHx8IDApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciByZWxQb3NpdGlvbiA9IG5vZGUucmVsYXRpdmVQb3NpdGlvbjtcclxuXHRcdGlmIChyZWxQb3NpdGlvbikge1xyXG5cdFx0XHRzZWxmLndyaXRlci5jb250ZXh0KCkuYmVnaW5EZXRhY2hlZEJsb2NrKCk7XHJcblx0XHRcdHNlbGYud3JpdGVyLmNvbnRleHQoKS5tb3ZlVG9SZWxhdGl2ZShyZWxQb3NpdGlvbi54IHx8IDAsIHJlbFBvc2l0aW9uLnkgfHwgMCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKG5vZGUuc3RhY2spIHtcclxuXHRcdFx0c2VsZi5wcm9jZXNzVmVydGljYWxDb250YWluZXIobm9kZSk7XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUuY29sdW1ucykge1xyXG5cdFx0XHRzZWxmLnByb2Nlc3NDb2x1bW5zKG5vZGUpO1xyXG5cdFx0fSBlbHNlIGlmIChub2RlLnVsKSB7XHJcblx0XHRcdHNlbGYucHJvY2Vzc0xpc3QoZmFsc2UsIG5vZGUpO1xyXG5cdFx0fSBlbHNlIGlmIChub2RlLm9sKSB7XHJcblx0XHRcdHNlbGYucHJvY2Vzc0xpc3QodHJ1ZSwgbm9kZSk7XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUudGFibGUpIHtcclxuXHRcdFx0c2VsZi5wcm9jZXNzVGFibGUobm9kZSk7XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUudGV4dCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHNlbGYucHJvY2Vzc0xlYWYobm9kZSk7XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUudG9jKSB7XHJcblx0XHRcdHNlbGYucHJvY2Vzc1RvYyhub2RlKTtcclxuXHRcdH0gZWxzZSBpZiAobm9kZS5pbWFnZSkge1xyXG5cdFx0XHRzZWxmLnByb2Nlc3NJbWFnZShub2RlKTtcclxuXHRcdH0gZWxzZSBpZiAobm9kZS5zdmcpIHtcclxuXHRcdFx0c2VsZi5wcm9jZXNzU1ZHKG5vZGUpO1xyXG5cdFx0fSBlbHNlIGlmIChub2RlLmNhbnZhcykge1xyXG5cdFx0XHRzZWxmLnByb2Nlc3NDYW52YXMobm9kZSk7XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUucXIpIHtcclxuXHRcdFx0c2VsZi5wcm9jZXNzUXIobm9kZSk7XHJcblx0XHR9IGVsc2UgaWYgKCFub2RlLl9zcGFuKSB7XHJcblx0XHRcdHRocm93ICdVbnJlY29nbml6ZWQgZG9jdW1lbnQgc3RydWN0dXJlOiAnICsgSlNPTi5zdHJpbmdpZnkobm9kZSwgZm9udFN0cmluZ2lmeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGFic1Bvc2l0aW9uIHx8IHJlbFBvc2l0aW9uKSB7XHJcblx0XHRcdHNlbGYud3JpdGVyLmNvbnRleHQoKS5lbmREZXRhY2hlZEJsb2NrKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHVuYnJlYWthYmxlKSB7XHJcblx0XHRcdHNlbGYud3JpdGVyLmNvbW1pdFVuYnJlYWthYmxlQmxvY2soKTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0ZnVuY3Rpb24gYXBwbHlNYXJnaW5zKGNhbGxiYWNrKSB7XHJcblx0XHR2YXIgbWFyZ2luID0gbm9kZS5fbWFyZ2luO1xyXG5cclxuXHRcdGlmIChub2RlLnBhZ2VCcmVhayA9PT0gJ2JlZm9yZScpIHtcclxuXHRcdFx0c2VsZi53cml0ZXIubW92ZVRvTmV4dFBhZ2Uobm9kZS5wYWdlT3JpZW50YXRpb24pO1xyXG5cdFx0fSBlbHNlIGlmIChub2RlLnBhZ2VCcmVhayA9PT0gJ2JlZm9yZU9kZCcpIHtcclxuXHRcdFx0c2VsZi53cml0ZXIubW92ZVRvTmV4dFBhZ2Uobm9kZS5wYWdlT3JpZW50YXRpb24pO1xyXG5cdFx0XHRpZiAoKHNlbGYud3JpdGVyLmNvbnRleHQoKS5wYWdlICsgMSkgJSAyID09PSAxKSB7XHJcblx0XHRcdFx0c2VsZi53cml0ZXIubW92ZVRvTmV4dFBhZ2Uobm9kZS5wYWdlT3JpZW50YXRpb24pO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUucGFnZUJyZWFrID09PSAnYmVmb3JlRXZlbicpIHtcclxuXHRcdFx0c2VsZi53cml0ZXIubW92ZVRvTmV4dFBhZ2Uobm9kZS5wYWdlT3JpZW50YXRpb24pO1xyXG5cdFx0XHRpZiAoKHNlbGYud3JpdGVyLmNvbnRleHQoKS5wYWdlICsgMSkgJSAyID09PSAwKSB7XHJcblx0XHRcdFx0c2VsZi53cml0ZXIubW92ZVRvTmV4dFBhZ2Uobm9kZS5wYWdlT3JpZW50YXRpb24pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKG1hcmdpbikge1xyXG5cdFx0XHRzZWxmLndyaXRlci5jb250ZXh0KCkubW92ZURvd24obWFyZ2luWzFdKTtcclxuXHRcdFx0c2VsZi53cml0ZXIuY29udGV4dCgpLmFkZE1hcmdpbihtYXJnaW5bMF0sIG1hcmdpblsyXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y2FsbGJhY2soKTtcclxuXHJcblx0XHRpZiAobWFyZ2luKSB7XHJcblx0XHRcdHNlbGYud3JpdGVyLmNvbnRleHQoKS5hZGRNYXJnaW4oLW1hcmdpblswXSwgLW1hcmdpblsyXSk7XHJcblx0XHRcdHNlbGYud3JpdGVyLmNvbnRleHQoKS5tb3ZlRG93bihtYXJnaW5bM10pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChub2RlLnBhZ2VCcmVhayA9PT0gJ2FmdGVyJykge1xyXG5cdFx0XHRzZWxmLndyaXRlci5tb3ZlVG9OZXh0UGFnZShub2RlLnBhZ2VPcmllbnRhdGlvbik7XHJcblx0XHR9IGVsc2UgaWYgKG5vZGUucGFnZUJyZWFrID09PSAnYWZ0ZXJPZGQnKSB7XHJcblx0XHRcdHNlbGYud3JpdGVyLm1vdmVUb05leHRQYWdlKG5vZGUucGFnZU9yaWVudGF0aW9uKTtcclxuXHRcdFx0aWYgKChzZWxmLndyaXRlci5jb250ZXh0KCkucGFnZSArIDEpICUgMiA9PT0gMSkge1xyXG5cdFx0XHRcdHNlbGYud3JpdGVyLm1vdmVUb05leHRQYWdlKG5vZGUucGFnZU9yaWVudGF0aW9uKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChub2RlLnBhZ2VCcmVhayA9PT0gJ2FmdGVyRXZlbicpIHtcclxuXHRcdFx0c2VsZi53cml0ZXIubW92ZVRvTmV4dFBhZ2Uobm9kZS5wYWdlT3JpZW50YXRpb24pO1xyXG5cdFx0XHRpZiAoKHNlbGYud3JpdGVyLmNvbnRleHQoKS5wYWdlICsgMSkgJSAyID09PSAwKSB7XHJcblx0XHRcdFx0c2VsZi53cml0ZXIubW92ZVRvTmV4dFBhZ2Uobm9kZS5wYWdlT3JpZW50YXRpb24pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59O1xyXG5cclxuLy8gdmVydGljYWwgY29udGFpbmVyXHJcbkxheW91dEJ1aWxkZXIucHJvdG90eXBlLnByb2Nlc3NWZXJ0aWNhbENvbnRhaW5lciA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0dmFyIHNlbGYgPSB0aGlzO1xyXG5cdG5vZGUuc3RhY2suZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG5cdFx0c2VsZi5wcm9jZXNzTm9kZShpdGVtKTtcclxuXHRcdGFkZEFsbChub2RlLnBvc2l0aW9ucywgaXRlbS5wb3NpdGlvbnMpO1xyXG5cclxuXHRcdC8vVE9ETzogcGFyYWdyYXBoIGdhcFxyXG5cdH0pO1xyXG59O1xyXG5cclxuLy8gY29sdW1uc1xyXG5MYXlvdXRCdWlsZGVyLnByb3RvdHlwZS5wcm9jZXNzQ29sdW1ucyA9IGZ1bmN0aW9uIChjb2x1bW5Ob2RlKSB7XHJcblx0dmFyIGNvbHVtbnMgPSBjb2x1bW5Ob2RlLmNvbHVtbnM7XHJcblx0dmFyIGF2YWlsYWJsZVdpZHRoID0gdGhpcy53cml0ZXIuY29udGV4dCgpLmF2YWlsYWJsZVdpZHRoO1xyXG5cdHZhciBnYXBzID0gZ2FwQXJyYXkoY29sdW1uTm9kZS5fZ2FwKTtcclxuXHJcblx0aWYgKGdhcHMpIHtcclxuXHRcdGF2YWlsYWJsZVdpZHRoIC09IChnYXBzLmxlbmd0aCAtIDEpICogY29sdW1uTm9kZS5fZ2FwO1xyXG5cdH1cclxuXHJcblx0Q29sdW1uQ2FsY3VsYXRvci5idWlsZENvbHVtbldpZHRocyhjb2x1bW5zLCBhdmFpbGFibGVXaWR0aCk7XHJcblx0dmFyIHJlc3VsdCA9IHRoaXMucHJvY2Vzc1Jvdyhjb2x1bW5zLCBjb2x1bW5zLCBnYXBzKTtcclxuXHRhZGRBbGwoY29sdW1uTm9kZS5wb3NpdGlvbnMsIHJlc3VsdC5wb3NpdGlvbnMpO1xyXG5cclxuXHJcblx0ZnVuY3Rpb24gZ2FwQXJyYXkoZ2FwKSB7XHJcblx0XHRpZiAoIWdhcCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgZ2FwcyA9IFtdO1xyXG5cdFx0Z2Fwcy5wdXNoKDApO1xyXG5cclxuXHRcdGZvciAodmFyIGkgPSBjb2x1bW5zLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcclxuXHRcdFx0Z2Fwcy5wdXNoKGdhcCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGdhcHM7XHJcblx0fVxyXG59O1xyXG5cclxuTGF5b3V0QnVpbGRlci5wcm90b3R5cGUucHJvY2Vzc1JvdyA9IGZ1bmN0aW9uIChjb2x1bW5zLCB3aWR0aHMsIGdhcHMsIHRhYmxlQm9keSwgdGFibGVSb3csIGhlaWdodCkge1xyXG5cdHZhciBzZWxmID0gdGhpcztcclxuXHR2YXIgcGFnZUJyZWFrcyA9IFtdLCBwb3NpdGlvbnMgPSBbXTtcclxuXHJcblx0dGhpcy50cmFja2VyLmF1dG8oJ3BhZ2VDaGFuZ2VkJywgc3RvcmVQYWdlQnJlYWtEYXRhLCBmdW5jdGlvbiAoKSB7XHJcblx0XHR3aWR0aHMgPSB3aWR0aHMgfHwgY29sdW1ucztcclxuXHJcblx0XHRzZWxmLndyaXRlci5jb250ZXh0KCkuYmVnaW5Db2x1bW5Hcm91cCgpO1xyXG5cclxuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gY29sdW1ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0dmFyIGNvbHVtbiA9IGNvbHVtbnNbaV07XHJcblx0XHRcdHZhciB3aWR0aCA9IHdpZHRoc1tpXS5fY2FsY1dpZHRoO1xyXG5cdFx0XHR2YXIgbGVmdE9mZnNldCA9IGNvbExlZnRPZmZzZXQoaSk7XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uLmNvbFNwYW4gJiYgY29sdW1uLmNvbFNwYW4gPiAxKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDE7IGogPCBjb2x1bW4uY29sU3BhbjsgaisrKSB7XHJcblx0XHRcdFx0XHR3aWR0aCArPSB3aWR0aHNbKytpXS5fY2FsY1dpZHRoICsgZ2Fwc1tpXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHNlbGYud3JpdGVyLmNvbnRleHQoKS5iZWdpbkNvbHVtbih3aWR0aCwgbGVmdE9mZnNldCwgZ2V0RW5kaW5nQ2VsbChjb2x1bW4sIGkpKTtcclxuXHRcdFx0aWYgKCFjb2x1bW4uX3NwYW4pIHtcclxuXHRcdFx0XHRzZWxmLnByb2Nlc3NOb2RlKGNvbHVtbik7XHJcblx0XHRcdFx0YWRkQWxsKHBvc2l0aW9ucywgY29sdW1uLnBvc2l0aW9ucyk7XHJcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uLl9jb2x1bW5FbmRpbmdDb250ZXh0KSB7XHJcblx0XHRcdFx0Ly8gcm93LXNwYW4gZW5kaW5nXHJcblx0XHRcdFx0c2VsZi53cml0ZXIuY29udGV4dCgpLm1hcmtFbmRpbmcoY29sdW1uKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHNlbGYud3JpdGVyLmNvbnRleHQoKS5jb21wbGV0ZUNvbHVtbkdyb3VwKGhlaWdodCk7XHJcblx0fSk7XHJcblxyXG5cdHJldHVybiB7IHBhZ2VCcmVha3M6IHBhZ2VCcmVha3MsIHBvc2l0aW9uczogcG9zaXRpb25zIH07XHJcblxyXG5cdGZ1bmN0aW9uIHN0b3JlUGFnZUJyZWFrRGF0YShkYXRhKSB7XHJcblx0XHR2YXIgcGFnZURlc2M7XHJcblxyXG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBwYWdlQnJlYWtzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHR2YXIgZGVzYyA9IHBhZ2VCcmVha3NbaV07XHJcblx0XHRcdGlmIChkZXNjLnByZXZQYWdlID09PSBkYXRhLnByZXZQYWdlKSB7XHJcblx0XHRcdFx0cGFnZURlc2MgPSBkZXNjO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFwYWdlRGVzYykge1xyXG5cdFx0XHRwYWdlRGVzYyA9IGRhdGE7XHJcblx0XHRcdHBhZ2VCcmVha3MucHVzaChwYWdlRGVzYyk7XHJcblx0XHR9XHJcblx0XHRwYWdlRGVzYy5wcmV2WSA9IE1hdGgubWF4KHBhZ2VEZXNjLnByZXZZLCBkYXRhLnByZXZZKTtcclxuXHRcdHBhZ2VEZXNjLnkgPSBNYXRoLm1pbihwYWdlRGVzYy55LCBkYXRhLnkpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29sTGVmdE9mZnNldChpKSB7XHJcblx0XHRpZiAoZ2FwcyAmJiBnYXBzLmxlbmd0aCA+IGkpIHtcclxuXHRcdFx0cmV0dXJuIGdhcHNbaV07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldEVuZGluZ0NlbGwoY29sdW1uLCBjb2x1bW5JbmRleCkge1xyXG5cdFx0aWYgKGNvbHVtbi5yb3dTcGFuICYmIGNvbHVtbi5yb3dTcGFuID4gMSkge1xyXG5cdFx0XHR2YXIgZW5kaW5nUm93ID0gdGFibGVSb3cgKyBjb2x1bW4ucm93U3BhbiAtIDE7XHJcblx0XHRcdGlmIChlbmRpbmdSb3cgPj0gdGFibGVCb2R5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdHRocm93ICdSb3cgc3BhbiBmb3IgY29sdW1uICcgKyBjb2x1bW5JbmRleCArICcgKHdpdGggaW5kZXhlcyBzdGFydGluZyBmcm9tIDApIGV4Y2VlZGVkIHJvdyBjb3VudCc7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRhYmxlQm9keVtlbmRpbmdSb3ddW2NvbHVtbkluZGV4XTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcbn07XHJcblxyXG4vLyBsaXN0c1xyXG5MYXlvdXRCdWlsZGVyLnByb3RvdHlwZS5wcm9jZXNzTGlzdCA9IGZ1bmN0aW9uIChvcmRlcmVkTGlzdCwgbm9kZSkge1xyXG5cdHZhciBzZWxmID0gdGhpcyxcclxuXHRcdGl0ZW1zID0gb3JkZXJlZExpc3QgPyBub2RlLm9sIDogbm9kZS51bCxcclxuXHRcdGdhcFNpemUgPSBub2RlLl9nYXBTaXplO1xyXG5cclxuXHR0aGlzLndyaXRlci5jb250ZXh0KCkuYWRkTWFyZ2luKGdhcFNpemUud2lkdGgpO1xyXG5cclxuXHR2YXIgbmV4dE1hcmtlcjtcclxuXHR0aGlzLnRyYWNrZXIuYXV0bygnbGluZUFkZGVkJywgYWRkTWFya2VyVG9GaXJzdExlYWYsIGZ1bmN0aW9uICgpIHtcclxuXHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuXHRcdFx0bmV4dE1hcmtlciA9IGl0ZW0ubGlzdE1hcmtlcjtcclxuXHRcdFx0c2VsZi5wcm9jZXNzTm9kZShpdGVtKTtcclxuXHRcdFx0YWRkQWxsKG5vZGUucG9zaXRpb25zLCBpdGVtLnBvc2l0aW9ucyk7XHJcblx0XHR9KTtcclxuXHR9KTtcclxuXHJcblx0dGhpcy53cml0ZXIuY29udGV4dCgpLmFkZE1hcmdpbigtZ2FwU2l6ZS53aWR0aCk7XHJcblxyXG5cdGZ1bmN0aW9uIGFkZE1hcmtlclRvRmlyc3RMZWFmKGxpbmUpIHtcclxuXHRcdC8vIEknbSBub3QgdmVyeSBoYXBweSB3aXRoIHRoZSB3YXkgbGlzdCBwcm9jZXNzaW5nIGlzIGltcGxlbWVudGVkXHJcblx0XHQvLyAoYm90aCBjb2RlIGFuZCBhbGdvcml0aG0gc2hvdWxkIGJlIHJldGhpbmtlZClcclxuXHRcdGlmIChuZXh0TWFya2VyKSB7XHJcblx0XHRcdHZhciBtYXJrZXIgPSBuZXh0TWFya2VyO1xyXG5cdFx0XHRuZXh0TWFya2VyID0gbnVsbDtcclxuXHJcblx0XHRcdGlmIChtYXJrZXIuY2FudmFzKSB7XHJcblx0XHRcdFx0dmFyIHZlY3RvciA9IG1hcmtlci5jYW52YXNbMF07XHJcblxyXG5cdFx0XHRcdG9mZnNldFZlY3Rvcih2ZWN0b3IsIC1tYXJrZXIuX21pbldpZHRoLCAwKTtcclxuXHRcdFx0XHRzZWxmLndyaXRlci5hZGRWZWN0b3IodmVjdG9yKTtcclxuXHRcdFx0fSBlbHNlIGlmIChtYXJrZXIuX2lubGluZXMpIHtcclxuXHRcdFx0XHR2YXIgbWFya2VyTGluZSA9IG5ldyBMaW5lKHNlbGYucGFnZVNpemUud2lkdGgpO1xyXG5cdFx0XHRcdG1hcmtlckxpbmUuYWRkSW5saW5lKG1hcmtlci5faW5saW5lc1swXSk7XHJcblx0XHRcdFx0bWFya2VyTGluZS54ID0gLW1hcmtlci5fbWluV2lkdGg7XHJcblx0XHRcdFx0bWFya2VyTGluZS55ID0gbGluZS5nZXRBc2NlbmRlckhlaWdodCgpIC0gbWFya2VyTGluZS5nZXRBc2NlbmRlckhlaWdodCgpO1xyXG5cdFx0XHRcdHNlbGYud3JpdGVyLmFkZExpbmUobWFya2VyTGluZSwgdHJ1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG4vLyB0YWJsZXNcclxuTGF5b3V0QnVpbGRlci5wcm90b3R5cGUucHJvY2Vzc1RhYmxlID0gZnVuY3Rpb24gKHRhYmxlTm9kZSkge1xyXG5cdHZhciBwcm9jZXNzb3IgPSBuZXcgVGFibGVQcm9jZXNzb3IodGFibGVOb2RlKTtcclxuXHJcblx0cHJvY2Vzc29yLmJlZ2luVGFibGUodGhpcy53cml0ZXIpO1xyXG5cclxuXHR2YXIgcm93SGVpZ2h0cyA9IHRhYmxlTm9kZS50YWJsZS5oZWlnaHRzO1xyXG5cdGZvciAodmFyIGkgPSAwLCBsID0gdGFibGVOb2RlLnRhYmxlLmJvZHkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRwcm9jZXNzb3IuYmVnaW5Sb3coaSwgdGhpcy53cml0ZXIpO1xyXG5cclxuXHRcdHZhciBoZWlnaHQ7XHJcblx0XHRpZiAoaXNGdW5jdGlvbihyb3dIZWlnaHRzKSkge1xyXG5cdFx0XHRoZWlnaHQgPSByb3dIZWlnaHRzKGkpO1xyXG5cdFx0fSBlbHNlIGlmIChpc0FycmF5KHJvd0hlaWdodHMpKSB7XHJcblx0XHRcdGhlaWdodCA9IHJvd0hlaWdodHNbaV07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRoZWlnaHQgPSByb3dIZWlnaHRzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChoZWlnaHQgPT09ICdhdXRvJykge1xyXG5cdFx0XHRoZWlnaHQgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIHJlc3VsdCA9IHRoaXMucHJvY2Vzc1Jvdyh0YWJsZU5vZGUudGFibGUuYm9keVtpXSwgdGFibGVOb2RlLnRhYmxlLndpZHRocywgdGFibGVOb2RlLl9vZmZzZXRzLm9mZnNldHMsIHRhYmxlTm9kZS50YWJsZS5ib2R5LCBpLCBoZWlnaHQpO1xyXG5cdFx0YWRkQWxsKHRhYmxlTm9kZS5wb3NpdGlvbnMsIHJlc3VsdC5wb3NpdGlvbnMpO1xyXG5cclxuXHRcdHByb2Nlc3Nvci5lbmRSb3coaSwgdGhpcy53cml0ZXIsIHJlc3VsdC5wYWdlQnJlYWtzKTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3Nvci5lbmRUYWJsZSh0aGlzLndyaXRlcik7XHJcbn07XHJcblxyXG4vLyBsZWFmcyAodGV4dHMpXHJcbkxheW91dEJ1aWxkZXIucHJvdG90eXBlLnByb2Nlc3NMZWFmID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHR2YXIgbGluZSA9IHRoaXMuYnVpbGROZXh0TGluZShub2RlKTtcclxuXHRpZiAobGluZSAmJiAobm9kZS50b2NJdGVtIHx8IG5vZGUuaWQpKSB7XHJcblx0XHRsaW5lLl9ub2RlID0gbm9kZTtcclxuXHR9XHJcblx0dmFyIGN1cnJlbnRIZWlnaHQgPSAobGluZSkgPyBsaW5lLmdldEhlaWdodCgpIDogMDtcclxuXHR2YXIgbWF4SGVpZ2h0ID0gbm9kZS5tYXhIZWlnaHQgfHwgLTE7XHJcblxyXG5cdGlmIChsaW5lKSB7XHJcblx0XHR2YXIgbm9kZUlkID0gZ2V0Tm9kZUlkKG5vZGUpO1xyXG5cdFx0aWYgKG5vZGVJZCkge1xyXG5cdFx0XHRsaW5lLmlkID0gbm9kZUlkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKG5vZGUuX3RvY0l0ZW1SZWYpIHtcclxuXHRcdGxpbmUuX3BhZ2VOb2RlUmVmID0gbm9kZS5fdG9jSXRlbVJlZjtcclxuXHR9XHJcblxyXG5cdGlmIChub2RlLl9wYWdlUmVmKSB7XHJcblx0XHRsaW5lLl9wYWdlTm9kZVJlZiA9IG5vZGUuX3BhZ2VSZWYuX25vZGVSZWY7XHJcblx0fVxyXG5cclxuXHRpZiAobGluZSAmJiBsaW5lLmlubGluZXMgJiYgaXNBcnJheShsaW5lLmlubGluZXMpKSB7XHJcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGxpbmUuaW5saW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0aWYgKGxpbmUuaW5saW5lc1tpXS5fdG9jSXRlbVJlZikge1xyXG5cdFx0XHRcdGxpbmUuaW5saW5lc1tpXS5fcGFnZU5vZGVSZWYgPSBsaW5lLmlubGluZXNbaV0uX3RvY0l0ZW1SZWY7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChsaW5lLmlubGluZXNbaV0uX3BhZ2VSZWYpIHtcclxuXHRcdFx0XHRsaW5lLmlubGluZXNbaV0uX3BhZ2VOb2RlUmVmID0gbGluZS5pbmxpbmVzW2ldLl9wYWdlUmVmLl9ub2RlUmVmO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR3aGlsZSAobGluZSAmJiAobWF4SGVpZ2h0ID09PSAtMSB8fCBjdXJyZW50SGVpZ2h0IDwgbWF4SGVpZ2h0KSkge1xyXG5cdFx0dmFyIHBvc2l0aW9ucyA9IHRoaXMud3JpdGVyLmFkZExpbmUobGluZSk7XHJcblx0XHRub2RlLnBvc2l0aW9ucy5wdXNoKHBvc2l0aW9ucyk7XHJcblx0XHRsaW5lID0gdGhpcy5idWlsZE5leHRMaW5lKG5vZGUpO1xyXG5cdFx0aWYgKGxpbmUpIHtcclxuXHRcdFx0Y3VycmVudEhlaWdodCArPSBsaW5lLmdldEhlaWdodCgpO1xyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcbkxheW91dEJ1aWxkZXIucHJvdG90eXBlLnByb2Nlc3NUb2MgPSBmdW5jdGlvbiAobm9kZSkge1xyXG5cdGlmIChub2RlLnRvYy50aXRsZSkge1xyXG5cdFx0dGhpcy5wcm9jZXNzTm9kZShub2RlLnRvYy50aXRsZSk7XHJcblx0fVxyXG5cdGlmIChub2RlLnRvYy5fdGFibGUpIHtcclxuXHRcdHRoaXMucHJvY2Vzc05vZGUobm9kZS50b2MuX3RhYmxlKTtcclxuXHR9XHJcbn07XHJcblxyXG5MYXlvdXRCdWlsZGVyLnByb3RvdHlwZS5idWlsZE5leHRMaW5lID0gZnVuY3Rpb24gKHRleHROb2RlKSB7XHJcblxyXG5cdGZ1bmN0aW9uIGNsb25lSW5saW5lKGlubGluZSkge1xyXG5cdFx0dmFyIG5ld0lubGluZSA9IGlubGluZS5jb25zdHJ1Y3RvcigpO1xyXG5cdFx0Zm9yICh2YXIga2V5IGluIGlubGluZSkge1xyXG5cdFx0XHRuZXdJbmxpbmVba2V5XSA9IGlubGluZVtrZXldO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5ld0lubGluZTtcclxuXHR9XHJcblxyXG5cdGlmICghdGV4dE5vZGUuX2lubGluZXMgfHwgdGV4dE5vZGUuX2lubGluZXMubGVuZ3RoID09PSAwKSB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHZhciBsaW5lID0gbmV3IExpbmUodGhpcy53cml0ZXIuY29udGV4dCgpLmF2YWlsYWJsZVdpZHRoKTtcclxuXHR2YXIgdGV4dFRvb2xzID0gbmV3IFRleHRUb29scyhudWxsKTtcclxuXHJcblx0dmFyIGlzRm9yY2VDb250aW51ZSA9IGZhbHNlO1xyXG5cdHdoaWxlICh0ZXh0Tm9kZS5faW5saW5lcyAmJiB0ZXh0Tm9kZS5faW5saW5lcy5sZW5ndGggPiAwICYmXHJcblx0XHQobGluZS5oYXNFbm91Z2hTcGFjZUZvcklubGluZSh0ZXh0Tm9kZS5faW5saW5lc1swXSwgdGV4dE5vZGUuX2lubGluZXMuc2xpY2UoMSkpIHx8IGlzRm9yY2VDb250aW51ZSkpIHtcclxuXHRcdHZhciBpc0hhcmRXcmFwID0gZmFsc2U7XHJcblx0XHR2YXIgaW5saW5lID0gdGV4dE5vZGUuX2lubGluZXMuc2hpZnQoKTtcclxuXHRcdGlzRm9yY2VDb250aW51ZSA9IGZhbHNlO1xyXG5cclxuXHRcdGlmICghaW5saW5lLm5vV3JhcCAmJiBpbmxpbmUudGV4dC5sZW5ndGggPiAxICYmIGlubGluZS53aWR0aCA+IGxpbmUuZ2V0QXZhaWxhYmxlV2lkdGgoKSkge1xyXG5cdFx0XHR2YXIgd2lkdGhQZXJDaGFyID0gaW5saW5lLndpZHRoIC8gaW5saW5lLnRleHQubGVuZ3RoO1xyXG5cdFx0XHR2YXIgbWF4Q2hhcnMgPSBNYXRoLmZsb29yKGxpbmUuZ2V0QXZhaWxhYmxlV2lkdGgoKSAvIHdpZHRoUGVyQ2hhcik7XHJcblx0XHRcdGlmIChtYXhDaGFycyA8IDEpIHtcclxuXHRcdFx0XHRtYXhDaGFycyA9IDE7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKG1heENoYXJzIDwgaW5saW5lLnRleHQubGVuZ3RoKSB7XHJcblx0XHRcdFx0dmFyIG5ld0lubGluZSA9IGNsb25lSW5saW5lKGlubGluZSk7XHJcblxyXG5cdFx0XHRcdG5ld0lubGluZS50ZXh0ID0gaW5saW5lLnRleHQuc3Vic3RyKG1heENoYXJzKTtcclxuXHRcdFx0XHRpbmxpbmUudGV4dCA9IGlubGluZS50ZXh0LnN1YnN0cigwLCBtYXhDaGFycyk7XHJcblxyXG5cdFx0XHRcdG5ld0lubGluZS53aWR0aCA9IHRleHRUb29scy53aWR0aE9mU3RyaW5nKG5ld0lubGluZS50ZXh0LCBuZXdJbmxpbmUuZm9udCwgbmV3SW5saW5lLmZvbnRTaXplLCBuZXdJbmxpbmUuY2hhcmFjdGVyU3BhY2luZywgbmV3SW5saW5lLmZvbnRGZWF0dXJlcyk7XHJcblx0XHRcdFx0aW5saW5lLndpZHRoID0gdGV4dFRvb2xzLndpZHRoT2ZTdHJpbmcoaW5saW5lLnRleHQsIGlubGluZS5mb250LCBpbmxpbmUuZm9udFNpemUsIGlubGluZS5jaGFyYWN0ZXJTcGFjaW5nLCBpbmxpbmUuZm9udEZlYXR1cmVzKTtcclxuXHJcblx0XHRcdFx0dGV4dE5vZGUuX2lubGluZXMudW5zaGlmdChuZXdJbmxpbmUpO1xyXG5cdFx0XHRcdGlzSGFyZFdyYXAgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0bGluZS5hZGRJbmxpbmUoaW5saW5lKTtcclxuXHJcblx0XHRpc0ZvcmNlQ29udGludWUgPSBpbmxpbmUubm9OZXdMaW5lICYmICFpc0hhcmRXcmFwO1xyXG5cdH1cclxuXHJcblx0bGluZS5sYXN0TGluZUluUGFyYWdyYXBoID0gdGV4dE5vZGUuX2lubGluZXMubGVuZ3RoID09PSAwO1xyXG5cclxuXHRyZXR1cm4gbGluZTtcclxufTtcclxuXHJcbi8vIGltYWdlc1xyXG5MYXlvdXRCdWlsZGVyLnByb3RvdHlwZS5wcm9jZXNzSW1hZ2UgPSBmdW5jdGlvbiAobm9kZSkge1xyXG5cdHZhciBwb3NpdGlvbiA9IHRoaXMud3JpdGVyLmFkZEltYWdlKG5vZGUpO1xyXG5cdG5vZGUucG9zaXRpb25zLnB1c2gocG9zaXRpb24pO1xyXG59O1xyXG5cclxuTGF5b3V0QnVpbGRlci5wcm90b3R5cGUucHJvY2Vzc1NWRyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0dmFyIHBvc2l0aW9uID0gdGhpcy53cml0ZXIuYWRkU1ZHKG5vZGUpO1xyXG5cdG5vZGUucG9zaXRpb25zLnB1c2gocG9zaXRpb24pO1xyXG59O1xyXG5cclxuTGF5b3V0QnVpbGRlci5wcm90b3R5cGUucHJvY2Vzc0NhbnZhcyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcblx0dmFyIGhlaWdodCA9IG5vZGUuX21pbkhlaWdodDtcclxuXHJcblx0aWYgKG5vZGUuYWJzb2x1dGVQb3NpdGlvbiA9PT0gdW5kZWZpbmVkICYmIHRoaXMud3JpdGVyLmNvbnRleHQoKS5hdmFpbGFibGVIZWlnaHQgPCBoZWlnaHQpIHtcclxuXHRcdC8vIFRPRE86IHN1cHBvcnQgZm9yIGNhbnZhcyBsYXJnZXIgdGhhbiBhIHBhZ2VcclxuXHRcdC8vIFRPRE86IHN1cHBvcnQgZm9yIG90aGVyIG92ZXJmbG93IG1ldGhvZHNcclxuXHJcblx0XHR0aGlzLndyaXRlci5tb3ZlVG9OZXh0UGFnZSgpO1xyXG5cdH1cclxuXHJcblx0dGhpcy53cml0ZXIuYWxpZ25DYW52YXMobm9kZSk7XHJcblxyXG5cdG5vZGUuY2FudmFzLmZvckVhY2goZnVuY3Rpb24gKHZlY3Rvcikge1xyXG5cdFx0dmFyIHBvc2l0aW9uID0gdGhpcy53cml0ZXIuYWRkVmVjdG9yKHZlY3Rvcik7XHJcblx0XHRub2RlLnBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uKTtcclxuXHR9LCB0aGlzKTtcclxuXHJcblx0dGhpcy53cml0ZXIuY29udGV4dCgpLm1vdmVEb3duKGhlaWdodCk7XHJcbn07XHJcblxyXG5MYXlvdXRCdWlsZGVyLnByb3RvdHlwZS5wcm9jZXNzUXIgPSBmdW5jdGlvbiAobm9kZSkge1xyXG5cdHZhciBwb3NpdGlvbiA9IHRoaXMud3JpdGVyLmFkZFFyKG5vZGUpO1xyXG5cdG5vZGUucG9zaXRpb25zLnB1c2gocG9zaXRpb24pO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMYXlvdXRCdWlsZGVyO1xyXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDQ3NzU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMaW5lXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAdGhpcyB7TGluZX1cclxuICogQHBhcmFtIHtOdW1iZXJ9IE1heGltdW0gd2lkdGggdGhpcyBsaW5lIGNhbiBoYXZlXHJcbiAqL1xyXG5mdW5jdGlvbiBMaW5lKG1heFdpZHRoKSB7XHJcblx0dGhpcy5tYXhXaWR0aCA9IG1heFdpZHRoO1xyXG5cdHRoaXMubGVhZGluZ0N1dCA9IDA7XHJcblx0dGhpcy50cmFpbGluZ0N1dCA9IDA7XHJcblx0dGhpcy5pbmxpbmVXaWR0aHMgPSAwO1xyXG5cdHRoaXMuaW5saW5lcyA9IFtdO1xyXG59XHJcblxyXG5MaW5lLnByb3RvdHlwZS5nZXRBc2NlbmRlckhlaWdodCA9IGZ1bmN0aW9uICgpIHtcclxuXHR2YXIgeSA9IDA7XHJcblxyXG5cdHRoaXMuaW5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChpbmxpbmUpIHtcclxuXHRcdHkgPSBNYXRoLm1heCh5LCBpbmxpbmUuZm9udC5hc2NlbmRlciAvIDEwMDAgKiBpbmxpbmUuZm9udFNpemUpO1xyXG5cdH0pO1xyXG5cdHJldHVybiB5O1xyXG59O1xyXG5cclxuTGluZS5wcm90b3R5cGUuaGFzRW5vdWdoU3BhY2VGb3JJbmxpbmUgPSBmdW5jdGlvbiAoaW5saW5lLCBuZXh0SW5saW5lcykge1xyXG5cdG5leHRJbmxpbmVzID0gbmV4dElubGluZXMgfHwgW107XHJcblxyXG5cdGlmICh0aGlzLmlubGluZXMubGVuZ3RoID09PSAwKSB7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblx0aWYgKHRoaXMubmV3TGluZUZvcmNlZCkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0dmFyIGlubGluZVdpZHRoID0gaW5saW5lLndpZHRoO1xyXG5cdHZhciBpbmxpbmVUcmFpbGluZ0N1dCA9IGlubGluZS50cmFpbGluZ0N1dCB8fCAwO1xyXG5cdGlmIChpbmxpbmUubm9OZXdMaW5lKSB7XHJcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IG5leHRJbmxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHR2YXIgbmV4dElubGluZSA9IG5leHRJbmxpbmVzW2ldO1xyXG5cdFx0XHRpbmxpbmVXaWR0aCArPSBuZXh0SW5saW5lLndpZHRoO1xyXG5cdFx0XHRpbmxpbmVUcmFpbGluZ0N1dCArPSBuZXh0SW5saW5lLnRyYWlsaW5nQ3V0IHx8IDA7XHJcblx0XHRcdGlmICghbmV4dElubGluZS5ub05ld0xpbmUpIHtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuICh0aGlzLmlubGluZVdpZHRocyArIGlubGluZVdpZHRoIC0gdGhpcy5sZWFkaW5nQ3V0IC0gaW5saW5lVHJhaWxpbmdDdXQpIDw9IHRoaXMubWF4V2lkdGg7XHJcbn07XHJcblxyXG5MaW5lLnByb3RvdHlwZS5hZGRJbmxpbmUgPSBmdW5jdGlvbiAoaW5saW5lKSB7XHJcblx0aWYgKHRoaXMuaW5saW5lcy5sZW5ndGggPT09IDApIHtcclxuXHRcdHRoaXMubGVhZGluZ0N1dCA9IGlubGluZS5sZWFkaW5nQ3V0IHx8IDA7XHJcblx0fVxyXG5cdHRoaXMudHJhaWxpbmdDdXQgPSBpbmxpbmUudHJhaWxpbmdDdXQgfHwgMDtcclxuXHJcblx0aW5saW5lLnggPSB0aGlzLmlubGluZVdpZHRocyAtIHRoaXMubGVhZGluZ0N1dDtcclxuXHJcblx0dGhpcy5pbmxpbmVzLnB1c2goaW5saW5lKTtcclxuXHR0aGlzLmlubGluZVdpZHRocyArPSBpbmxpbmUud2lkdGg7XHJcblxyXG5cdGlmIChpbmxpbmUubGluZUVuZCkge1xyXG5cdFx0dGhpcy5uZXdMaW5lRm9yY2VkID0gdHJ1ZTtcclxuXHR9XHJcbn07XHJcblxyXG5MaW5lLnByb3RvdHlwZS5nZXRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcclxuXHRyZXR1cm4gdGhpcy5pbmxpbmVXaWR0aHMgLSB0aGlzLmxlYWRpbmdDdXQgLSB0aGlzLnRyYWlsaW5nQ3V0O1xyXG59O1xyXG5cclxuTGluZS5wcm90b3R5cGUuZ2V0QXZhaWxhYmxlV2lkdGggPSBmdW5jdGlvbiAoKSB7XHJcblx0cmV0dXJuIHRoaXMubWF4V2lkdGggLSB0aGlzLmdldFdpZHRoKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyBsaW5lIGhlaWdodFxyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XHJcbiAqL1xyXG5MaW5lLnByb3RvdHlwZS5nZXRIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XHJcblx0dmFyIG1heCA9IDA7XHJcblxyXG5cdHRoaXMuaW5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcblx0XHRtYXggPSBNYXRoLm1heChtYXgsIGl0ZW0uaGVpZ2h0IHx8IDApO1xyXG5cdH0pO1xyXG5cclxuXHRyZXR1cm4gbWF4O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBMaW5lO1xyXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI5MTI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cclxuXHJcbnZhciBpc1VuZGVmaW5lZCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzVW5kZWZpbmVkKTtcclxudmFyIEVsZW1lbnRXcml0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOTYpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUGFnZUVsZW1lbnRXcml0ZXIgLSBhbiBleHRlbmRlZCBFbGVtZW50V3JpdGVyXHJcbiAqIHdoaWNoIGNhbiBoYW5kbGU6XHJcbiAqIC0gcGFnZS1icmVha3MgKGl0IGFkZHMgbmV3IHBhZ2VzIHdoZW4gdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIGxlZnQpLFxyXG4gKiAtIHJlcGVhdGFibGUgZnJhZ21lbnRzIChsaWtlIHRhYmxlLWhlYWRlcnMsIHdoaWNoIGFyZSByZXBlYXRlZCBldmVyeXRpbWVcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgYSBwYWdlLWJyZWFrIG9jY3VycylcclxuICogLSB0cmFuc2FjdGlvbnMgKHVzZWQgZm9yIHVuYnJlYWthYmxlLWJsb2NrcyB3aGVuIHdlIHdhbnQgdG8gbWFrZSBzdXJlXHJcbiAqICAgICAgICAgICAgICAgICB3aG9sZSBibG9jayB3aWxsIGJlIHJlbmRlcmVkIG9uIHRoZSBzYW1lIHBhZ2UpXHJcbiAqL1xyXG5mdW5jdGlvbiBQYWdlRWxlbWVudFdyaXRlcihjb250ZXh0LCB0cmFja2VyKSB7XHJcblx0dGhpcy50cmFuc2FjdGlvbkxldmVsID0gMDtcclxuXHR0aGlzLnJlcGVhdGFibGVzID0gW107XHJcblx0dGhpcy50cmFja2VyID0gdHJhY2tlcjtcclxuXHR0aGlzLndyaXRlciA9IG5ldyBFbGVtZW50V3JpdGVyKGNvbnRleHQsIHRyYWNrZXIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaXRPblBhZ2Uoc2VsZiwgYWRkRmN0KSB7XHJcblx0dmFyIHBvc2l0aW9uID0gYWRkRmN0KHNlbGYpO1xyXG5cdGlmICghcG9zaXRpb24pIHtcclxuXHRcdHNlbGYubW92ZVRvTmV4dFBhZ2UoKTtcclxuXHRcdHBvc2l0aW9uID0gYWRkRmN0KHNlbGYpO1xyXG5cdH1cclxuXHRyZXR1cm4gcG9zaXRpb247XHJcbn1cclxuXHJcblBhZ2VFbGVtZW50V3JpdGVyLnByb3RvdHlwZS5hZGRMaW5lID0gZnVuY3Rpb24gKGxpbmUsIGRvbnRVcGRhdGVDb250ZXh0UG9zaXRpb24sIGluZGV4KSB7XHJcblx0cmV0dXJuIGZpdE9uUGFnZSh0aGlzLCBmdW5jdGlvbiAoc2VsZikge1xyXG5cdFx0cmV0dXJuIHNlbGYud3JpdGVyLmFkZExpbmUobGluZSwgZG9udFVwZGF0ZUNvbnRleHRQb3NpdGlvbiwgaW5kZXgpO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuUGFnZUVsZW1lbnRXcml0ZXIucHJvdG90eXBlLmFkZEltYWdlID0gZnVuY3Rpb24gKGltYWdlLCBpbmRleCkge1xyXG5cdHJldHVybiBmaXRPblBhZ2UodGhpcywgZnVuY3Rpb24gKHNlbGYpIHtcclxuXHRcdHJldHVybiBzZWxmLndyaXRlci5hZGRJbWFnZShpbWFnZSwgaW5kZXgpO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuUGFnZUVsZW1lbnRXcml0ZXIucHJvdG90eXBlLmFkZFNWRyA9IGZ1bmN0aW9uIChpbWFnZSwgaW5kZXgpIHtcclxuXHRyZXR1cm4gZml0T25QYWdlKHRoaXMsIGZ1bmN0aW9uIChzZWxmKSB7XHJcblx0XHRyZXR1cm4gc2VsZi53cml0ZXIuYWRkU1ZHKGltYWdlLCBpbmRleCk7XHJcblx0fSk7XHJcbn07XHJcblxyXG5QYWdlRWxlbWVudFdyaXRlci5wcm90b3R5cGUuYWRkUXIgPSBmdW5jdGlvbiAocXIsIGluZGV4KSB7XHJcblx0cmV0dXJuIGZpdE9uUGFnZSh0aGlzLCBmdW5jdGlvbiAoc2VsZikge1xyXG5cdFx0cmV0dXJuIHNlbGYud3JpdGVyLmFkZFFyKHFyLCBpbmRleCk7XHJcblx0fSk7XHJcbn07XHJcblxyXG5QYWdlRWxlbWVudFdyaXRlci5wcm90b3R5cGUuYWRkVmVjdG9yID0gZnVuY3Rpb24gKHZlY3RvciwgaWdub3JlQ29udGV4dFgsIGlnbm9yZUNvbnRleHRZLCBpbmRleCkge1xyXG5cdHJldHVybiB0aGlzLndyaXRlci5hZGRWZWN0b3IodmVjdG9yLCBpZ25vcmVDb250ZXh0WCwgaWdub3JlQ29udGV4dFksIGluZGV4KTtcclxufTtcclxuXHJcblBhZ2VFbGVtZW50V3JpdGVyLnByb3RvdHlwZS5iZWdpbkNsaXAgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG5cdHJldHVybiB0aGlzLndyaXRlci5iZWdpbkNsaXAod2lkdGgsIGhlaWdodCk7XHJcbn07XHJcblxyXG5QYWdlRWxlbWVudFdyaXRlci5wcm90b3R5cGUuZW5kQ2xpcCA9IGZ1bmN0aW9uICgpIHtcclxuXHRyZXR1cm4gdGhpcy53cml0ZXIuZW5kQ2xpcCgpO1xyXG59O1xyXG5cclxuUGFnZUVsZW1lbnRXcml0ZXIucHJvdG90eXBlLmFsaWduQ2FudmFzID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuXHR0aGlzLndyaXRlci5hbGlnbkNhbnZhcyhub2RlKTtcclxufTtcclxuXHJcblBhZ2VFbGVtZW50V3JpdGVyLnByb3RvdHlwZS5hZGRGcmFnbWVudCA9IGZ1bmN0aW9uIChmcmFnbWVudCwgdXNlQmxvY2tYT2Zmc2V0LCB1c2VCbG9ja1lPZmZzZXQsIGRvbnRVcGRhdGVDb250ZXh0UG9zaXRpb24pIHtcclxuXHRpZiAoIXRoaXMud3JpdGVyLmFkZEZyYWdtZW50KGZyYWdtZW50LCB1c2VCbG9ja1hPZmZzZXQsIHVzZUJsb2NrWU9mZnNldCwgZG9udFVwZGF0ZUNvbnRleHRQb3NpdGlvbikpIHtcclxuXHRcdHRoaXMubW92ZVRvTmV4dFBhZ2UoKTtcclxuXHRcdHRoaXMud3JpdGVyLmFkZEZyYWdtZW50KGZyYWdtZW50LCB1c2VCbG9ja1hPZmZzZXQsIHVzZUJsb2NrWU9mZnNldCwgZG9udFVwZGF0ZUNvbnRleHRQb3NpdGlvbik7XHJcblx0fVxyXG59O1xyXG5cclxuUGFnZUVsZW1lbnRXcml0ZXIucHJvdG90eXBlLm1vdmVUb05leHRQYWdlID0gZnVuY3Rpb24gKHBhZ2VPcmllbnRhdGlvbikge1xyXG5cclxuXHR2YXIgbmV4dFBhZ2UgPSB0aGlzLndyaXRlci5jb250ZXh0Lm1vdmVUb05leHRQYWdlKHBhZ2VPcmllbnRhdGlvbik7XHJcblxyXG5cdC8vIG1vdmVUb05leHRQYWdlIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGFibGUsIGJlY2F1c2UgaXMgY2FsbGVkIGZvciBlYWNoIGNvbHVtblxyXG5cdC8vIGFuZCByZXBlYXRhYmxlcyBhcmUgaW5zZXJ0ZWQgb25seSBpbiB0aGUgZmlyc3QgdGltZS4gSWYgY29sdW1ucyBhcmUgdXNlZCwgaXMgbmVlZGVkXHJcblx0Ly8gY2FsbCBmb3IgdGFibGUgaW4gZmlyc3QgY29sdW1uIGFuZCB0aGVuIGZvciB0YWJsZSBpbiB0aGUgc2Vjb25kIGNvbHVtbiAoaXMgb3RoZXIgcmVwZWF0YWJsZXMpLlxyXG5cdHRoaXMucmVwZWF0YWJsZXMuZm9yRWFjaChmdW5jdGlvbiAocmVwKSB7XHJcblx0XHRpZiAoaXNVbmRlZmluZWQocmVwLmluc2VydGVkT25QYWdlc1t0aGlzLndyaXRlci5jb250ZXh0LnBhZ2VdKSkge1xyXG5cdFx0XHRyZXAuaW5zZXJ0ZWRPblBhZ2VzW3RoaXMud3JpdGVyLmNvbnRleHQucGFnZV0gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLndyaXRlci5hZGRGcmFnbWVudChyZXAsIHRydWUpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy53cml0ZXIuY29udGV4dC5tb3ZlRG93bihyZXAuaGVpZ2h0KTtcclxuXHRcdH1cclxuXHR9LCB0aGlzKTtcclxuXHJcblx0dGhpcy53cml0ZXIudHJhY2tlci5lbWl0KCdwYWdlQ2hhbmdlZCcsIHtcclxuXHRcdHByZXZQYWdlOiBuZXh0UGFnZS5wcmV2UGFnZSxcclxuXHRcdHByZXZZOiBuZXh0UGFnZS5wcmV2WSxcclxuXHRcdHk6IHRoaXMud3JpdGVyLmNvbnRleHQueVxyXG5cdH0pO1xyXG59O1xyXG5cclxuUGFnZUVsZW1lbnRXcml0ZXIucHJvdG90eXBlLmJlZ2luVW5icmVha2FibGVCbG9jayA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XHJcblx0aWYgKHRoaXMudHJhbnNhY3Rpb25MZXZlbCsrID09PSAwKSB7XHJcblx0XHR0aGlzLm9yaWdpbmFsWCA9IHRoaXMud3JpdGVyLmNvbnRleHQueDtcclxuXHRcdHRoaXMud3JpdGVyLnB1c2hDb250ZXh0KHdpZHRoLCBoZWlnaHQpO1xyXG5cdH1cclxufTtcclxuXHJcblBhZ2VFbGVtZW50V3JpdGVyLnByb3RvdHlwZS5jb21taXRVbmJyZWFrYWJsZUJsb2NrID0gZnVuY3Rpb24gKGZvcmNlZFgsIGZvcmNlZFkpIHtcclxuXHRpZiAoLS10aGlzLnRyYW5zYWN0aW9uTGV2ZWwgPT09IDApIHtcclxuXHRcdHZhciB1bmJyZWFrYWJsZUNvbnRleHQgPSB0aGlzLndyaXRlci5jb250ZXh0O1xyXG5cdFx0dGhpcy53cml0ZXIucG9wQ29udGV4dCgpO1xyXG5cclxuXHRcdHZhciBuYlBhZ2VzID0gdW5icmVha2FibGVDb250ZXh0LnBhZ2VzLmxlbmd0aDtcclxuXHRcdGlmIChuYlBhZ2VzID4gMCkge1xyXG5cdFx0XHQvLyBubyBzdXBwb3J0IGZvciBtdWx0aS1wYWdlIHVuYnJlYWthYmxlQmxvY2tzXHJcblx0XHRcdHZhciBmcmFnbWVudCA9IHVuYnJlYWthYmxlQ29udGV4dC5wYWdlc1swXTtcclxuXHRcdFx0ZnJhZ21lbnQueE9mZnNldCA9IGZvcmNlZFg7XHJcblx0XHRcdGZyYWdtZW50LnlPZmZzZXQgPSBmb3JjZWRZO1xyXG5cclxuXHRcdFx0Ly9UT0RPOiB2ZWN0b3JzIGNhbiBpbmZsdWVuY2UgaGVpZ2h0IGluIHNvbWUgc2l0dWF0aW9uc1xyXG5cdFx0XHRpZiAobmJQYWdlcyA+IDEpIHtcclxuXHRcdFx0XHQvLyBvbiBvdXQtb2YtY29udGV4dCBibG9jcyAoaGVhZGVycywgZm9vdGVycywgYmFja2dyb3VuZCkgaGVpZ2h0IHNob3VsZCBiZSB0aGUgd2hvbGUgRG9jdW1lbnRDb250ZXh0IGhlaWdodFxyXG5cdFx0XHRcdGlmIChmb3JjZWRYICE9PSB1bmRlZmluZWQgfHwgZm9yY2VkWSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRmcmFnbWVudC5oZWlnaHQgPSB1bmJyZWFrYWJsZUNvbnRleHQuZ2V0Q3VycmVudFBhZ2UoKS5wYWdlU2l6ZS5oZWlnaHQgLSB1bmJyZWFrYWJsZUNvbnRleHQucGFnZU1hcmdpbnMudG9wIC0gdW5icmVha2FibGVDb250ZXh0LnBhZ2VNYXJnaW5zLmJvdHRvbTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0ZnJhZ21lbnQuaGVpZ2h0ID0gdGhpcy53cml0ZXIuY29udGV4dC5nZXRDdXJyZW50UGFnZSgpLnBhZ2VTaXplLmhlaWdodCAtIHRoaXMud3JpdGVyLmNvbnRleHQucGFnZU1hcmdpbnMudG9wIC0gdGhpcy53cml0ZXIuY29udGV4dC5wYWdlTWFyZ2lucy5ib3R0b207XHJcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMucmVwZWF0YWJsZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdGZyYWdtZW50LmhlaWdodCAtPSB0aGlzLnJlcGVhdGFibGVzW2ldLmhlaWdodDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZnJhZ21lbnQuaGVpZ2h0ID0gdW5icmVha2FibGVDb250ZXh0Lnk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChmb3JjZWRYICE9PSB1bmRlZmluZWQgfHwgZm9yY2VkWSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0dGhpcy53cml0ZXIuYWRkRnJhZ21lbnQoZnJhZ21lbnQsIHRydWUsIHRydWUsIHRydWUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuYWRkRnJhZ21lbnQoZnJhZ21lbnQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59O1xyXG5cclxuUGFnZUVsZW1lbnRXcml0ZXIucHJvdG90eXBlLmN1cnJlbnRCbG9ja1RvUmVwZWF0YWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuXHR2YXIgdW5icmVha2FibGVDb250ZXh0ID0gdGhpcy53cml0ZXIuY29udGV4dDtcclxuXHR2YXIgcmVwID0geyBpdGVtczogW10gfTtcclxuXHJcblx0dW5icmVha2FibGVDb250ZXh0LnBhZ2VzWzBdLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuXHRcdHJlcC5pdGVtcy5wdXNoKGl0ZW0pO1xyXG5cdH0pO1xyXG5cclxuXHRyZXAueE9mZnNldCA9IHRoaXMub3JpZ2luYWxYO1xyXG5cclxuXHQvL1RPRE86IHZlY3RvcnMgY2FuIGluZmx1ZW5jZSBoZWlnaHQgaW4gc29tZSBzaXR1YXRpb25zXHJcblx0cmVwLmhlaWdodCA9IHVuYnJlYWthYmxlQ29udGV4dC55O1xyXG5cclxuXHRyZXAuaW5zZXJ0ZWRPblBhZ2VzID0gW107XHJcblxyXG5cdHJldHVybiByZXA7XHJcbn07XHJcblxyXG5QYWdlRWxlbWVudFdyaXRlci5wcm90b3R5cGUucHVzaFRvUmVwZWF0YWJsZXMgPSBmdW5jdGlvbiAocmVwKSB7XHJcblx0dGhpcy5yZXBlYXRhYmxlcy5wdXNoKHJlcCk7XHJcbn07XHJcblxyXG5QYWdlRWxlbWVudFdyaXRlci5wcm90b3R5cGUucG9wRnJvbVJlcGVhdGFibGVzID0gZnVuY3Rpb24gKCkge1xyXG5cdHRoaXMucmVwZWF0YWJsZXMucG9wKCk7XHJcbn07XHJcblxyXG5QYWdlRWxlbWVudFdyaXRlci5wcm90b3R5cGUuY29udGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuXHRyZXR1cm4gdGhpcy53cml0ZXIuY29udGV4dDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFnZUVsZW1lbnRXcml0ZXI7XHJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNjA3OTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxyXG5cclxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0KGV4KSB7XHJcblx0cmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDtcclxufVxyXG5cclxudmFyIFBkZktpdCA9IF9pbnRlcm9wRGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDIxNSkpO1xyXG5cclxuZnVuY3Rpb24gZ2V0RW5naW5lSW5zdGFuY2UoKSB7XHJcblx0cmV0dXJuIFBkZktpdDtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlUGRmRG9jdW1lbnQob3B0aW9ucykge1xyXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cdHJldHVybiBuZXcgUGRmS2l0KG9wdGlvbnMpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRnZXRFbmdpbmVJbnN0YW5jZTogZ2V0RW5naW5lSW5zdGFuY2UsXHJcblx0Y3JlYXRlUGRmRG9jdW1lbnQ6IGNyZWF0ZVBkZkRvY3VtZW50XHJcbn07XHJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODYxNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qZXNsaW50IG5vLXVudXNlZC12YXJzOiBbXCJlcnJvclwiLCB7XCJhcmdzXCI6IFwibm9uZVwifV0qL1xyXG5cclxuXHJcbnZhciBQZGZLaXRFbmdpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwNzkpO1xyXG52YXIgRm9udFByb3ZpZGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjQ5KTtcclxudmFyIExheW91dEJ1aWxkZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2NzgpO1xyXG52YXIgc2l6ZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3NjIpO1xyXG52YXIgSW1hZ2VNZWFzdXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMDkwKTtcclxudmFyIFNWR01lYXN1cmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2MDEpO1xyXG52YXIgdGV4dERlY29yYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oMzQ5Nyk7XHJcbnZhciBUZXh0VG9vbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNTApO1xyXG52YXIgaXNGdW5jdGlvbiA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzRnVuY3Rpb24pO1xyXG52YXIgaXNTdHJpbmcgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc1N0cmluZyk7XHJcbnZhciBpc051bWJlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzTnVtYmVyKTtcclxudmFyIGlzQm9vbGVhbiA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzQm9vbGVhbik7XHJcbnZhciBpc0FycmF5ID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNBcnJheSk7XHJcbnZhciBpc1VuZGVmaW5lZCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzVW5kZWZpbmVkKTtcclxudmFyIGlzUGF0dGVybiA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzUGF0dGVybik7XHJcbnZhciBnZXRQYXR0ZXJuID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuZ2V0UGF0dGVybik7XHJcbnZhciBTVkd0b1BERiA9IF9fd2VicGFja19yZXF1aXJlX18oODA3MSk7XHJcblxyXG52YXIgZmluZEZvbnQgPSBmdW5jdGlvbiAoZm9udHMsIHJlcXVpcmVkRm9udHMsIGRlZmF1bHRGb250KSB7XHJcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZXF1aXJlZEZvbnRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHR2YXIgcmVxdWlyZWRGb250ID0gcmVxdWlyZWRGb250c1tpXS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdGZvciAodmFyIGZvbnQgaW4gZm9udHMpIHtcclxuXHRcdFx0aWYgKGZvbnQudG9Mb3dlckNhc2UoKSA9PT0gcmVxdWlyZWRGb250KSB7XHJcblx0XHRcdFx0cmV0dXJuIGZvbnQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBkZWZhdWx0Rm9udDtcclxufTtcclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gUGRmUHJpbnRlclxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGEgUGRmUHJpbnRlciB3aGljaCB0dXJucyBkb2N1bWVudCBkZWZpbml0aW9uIGludG8gYSBwZGZcclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IGZvbnREZXNjcmlwdG9ycyBmb250IGRlZmluaXRpb24gZGljdGlvbmFyeVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgZm9udERlc2NyaXB0b3JzID0ge1xyXG4gKlx0Um9ib3RvOiB7XHJcbiAqXHRcdG5vcm1hbDogJ2ZvbnRzL1JvYm90by1SZWd1bGFyLnR0ZicsXHJcbiAqXHRcdGJvbGQ6ICdmb250cy9Sb2JvdG8tTWVkaXVtLnR0ZicsXHJcbiAqXHRcdGl0YWxpY3M6ICdmb250cy9Sb2JvdG8tSXRhbGljLnR0ZicsXHJcbiAqXHRcdGJvbGRpdGFsaWNzOiAnZm9udHMvUm9ib3RvLU1lZGl1bUl0YWxpYy50dGYnXHJcbiAqXHR9XHJcbiAqIH07XHJcbiAqXHJcbiAqIHZhciBwcmludGVyID0gbmV3IFBkZlByaW50ZXIoZm9udERlc2NyaXB0b3JzKTtcclxuICovXHJcbmZ1bmN0aW9uIFBkZlByaW50ZXIoZm9udERlc2NyaXB0b3JzKSB7XHJcblx0dGhpcy5mb250RGVzY3JpcHRvcnMgPSBmb250RGVzY3JpcHRvcnM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFeGVjdXRlcyBsYXlvdXQgZW5naW5lIGZvciB0aGUgc3BlY2lmaWVkIGRvY3VtZW50IGFuZCByZW5kZXJzIGl0IGludG8gYSBwZGZraXQgZG9jdW1lbnRcclxuICogcmVhZHkgdG8gYmUgc2F2ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBkb2NEZWZpbml0aW9uIGRvY3VtZW50IGRlZmluaXRpb25cclxuICogQHBhcmFtIHtPYmplY3R9IGRvY0RlZmluaXRpb24uY29udGVudCBhbiBhcnJheSBkZXNjcmliaW5nIHRoZSBwZGYgc3RydWN0dXJlIChmb3IgbW9yZSBpbmZvcm1hdGlvbiB0YWtlIGEgbG9vayBhdCB0aGUgZXhhbXBsZXMgaW4gdGhlIC9leGFtcGxlcyBmb2xkZXIpXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZG9jRGVmaW5pdGlvbi5kZWZhdWx0U3R5bGVdIGRlZmF1bHQgKGltcGxpY2l0KSBzdHlsZSBkZWZpbml0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZG9jRGVmaW5pdGlvbi5zdHlsZXNdIGRpY3Rpb25hcnkgZGVmaW5pbmcgYWxsIHN0eWxlcyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgZG9jdW1lbnRcclxuICogQHBhcmFtIHtPYmplY3R9IFtkb2NEZWZpbml0aW9uLnBhZ2VTaXplXSBwYWdlIHNpemUgKHBkZmtpdCB1bml0cywgQTQgZGltZW5zaW9ucyBieSBkZWZhdWx0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZG9jRGVmaW5pdGlvbi5wYWdlU2l6ZS53aWR0aCB3aWR0aFxyXG4gKiBAcGFyYW0ge051bWJlcn0gZG9jRGVmaW5pdGlvbi5wYWdlU2l6ZS5oZWlnaHQgaGVpZ2h0XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZG9jRGVmaW5pdGlvbi5wYWdlTWFyZ2luc10gcGFnZSBtYXJnaW5zIChwZGZraXQgdW5pdHMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBkb2NEZWZpbml0aW9uLm1heFBhZ2VzTnVtYmVyIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIHJlbmRlclxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiB2YXIgZG9jRGVmaW5pdGlvbiA9IHtcclxuICogXHRpbmZvOiB7XHJcbiAqXHRcdHRpdGxlOiAnYXdlc29tZSBEb2N1bWVudCcsXHJcbiAqXHRcdGF1dGhvcjogJ2pvaG4gZG9lJyxcclxuICpcdFx0c3ViamVjdDogJ3N1YmplY3Qgb2YgZG9jdW1lbnQnLFxyXG4gKlx0XHRrZXl3b3JkczogJ2tleXdvcmRzIGZvciBkb2N1bWVudCcsXHJcbiAqIFx0fSxcclxuICpcdGNvbnRlbnQ6IFtcclxuICpcdFx0J0ZpcnN0IHBhcmFncmFwaCcsXHJcbiAqXHRcdCdTZWNvbmQgcGFyYWdyYXBoLCB0aGlzIHRpbWUgYSBsaXR0bGUgYml0IGxvbmdlcicsXHJcbiAqXHRcdHsgdGV4dDogJ1RoaXJkIHBhcmFncmFwaCwgc2xpZ2h0bHkgYmlnZ2VyIGZvbnQgc2l6ZScsIGZvbnRTaXplOiAyMCB9LFxyXG4gKlx0XHR7IHRleHQ6ICdBbm90aGVyIHBhcmFncmFwaCB1c2luZyBhIG5hbWVkIHN0eWxlJywgc3R5bGU6ICdoZWFkZXInIH0sXHJcbiAqXHRcdHsgdGV4dDogWydwbGF5aW5nIHdpdGggJywgJ2lubGluZXMnIF0gfSxcclxuICpcdFx0eyB0ZXh0OiBbJ2FuZCAnLCB7IHRleHQ6ICdyZXN0eWxpbmcgJywgYm9sZDogdHJ1ZSB9LCAndGhlbSddIH0sXHJcbiAqXHRdLFxyXG4gKlx0c3R5bGVzOiB7XHJcbiAqXHRcdGhlYWRlcjogeyBmb250U2l6ZTogMzAsIGJvbGQ6IHRydWUgfVxyXG4gKlx0fSxcclxuICpcdHBhdHRlcm5zOiB7XHJcbiAqXHRcdHN0cmlwZTQ1ZDoge1xyXG4gKlx0XHRcdGJvdW5kaW5nQm94OiBbMSwgMSwgNCwgNF0sXHJcbiAqXHRcdFx0eFN0ZXA6IDMsXHJcbiAqXHRcdFx0eVN0ZXA6IDMsXHJcbiAqXHRcdFx0cGF0dGVybjogJzEgdyAwIDEgbSA0IDUgbCBzIDIgMCBtIDUgMyBsIHMnXHJcbiAqXHRcdH1cclxuICpcdH1cclxuICogfTtcclxuICpcclxuICogdmFyIHBkZktpdERvYyA9IHByaW50ZXIuY3JlYXRlUGRmS2l0RG9jdW1lbnQoZG9jRGVmaW5pdGlvbik7XHJcbiAqXHJcbiAqIHBkZktpdERvYy5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKCdzYW1wbGUucGRmJykpO1xyXG4gKiBwZGZLaXREb2MuZW5kKCk7XHJcbiAqXHJcbiAqIEByZXR1cm4ge09iamVjdH0gYSBwZGZLaXQgZG9jdW1lbnQgb2JqZWN0IHdoaWNoIGNhbiBiZSBzYXZlZCBvciBlbmNvZGUgdG8gZGF0YS11cmxcclxuICovXHJcblBkZlByaW50ZXIucHJvdG90eXBlLmNyZWF0ZVBkZktpdERvY3VtZW50ID0gZnVuY3Rpb24gKGRvY0RlZmluaXRpb24sIG9wdGlvbnMpIHtcclxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcblx0ZG9jRGVmaW5pdGlvbi52ZXJzaW9uID0gZG9jRGVmaW5pdGlvbi52ZXJzaW9uIHx8ICcxLjMnO1xyXG5cdGRvY0RlZmluaXRpb24uY29tcHJlc3MgPSBpc0Jvb2xlYW4oZG9jRGVmaW5pdGlvbi5jb21wcmVzcykgPyBkb2NEZWZpbml0aW9uLmNvbXByZXNzIDogdHJ1ZTtcclxuXHRkb2NEZWZpbml0aW9uLmltYWdlcyA9IGRvY0RlZmluaXRpb24uaW1hZ2VzIHx8IHt9O1xyXG5cdGRvY0RlZmluaXRpb24ucGFnZU1hcmdpbnMgPSAoKGRvY0RlZmluaXRpb24ucGFnZU1hcmdpbnMgIT09IHVuZGVmaW5lZCkgJiYgKGRvY0RlZmluaXRpb24ucGFnZU1hcmdpbnMgIT09IG51bGwpKSA/IGRvY0RlZmluaXRpb24ucGFnZU1hcmdpbnMgOiA0MDtcclxuXHJcblx0dmFyIHBhZ2VTaXplID0gZml4UGFnZVNpemUoZG9jRGVmaW5pdGlvbi5wYWdlU2l6ZSwgZG9jRGVmaW5pdGlvbi5wYWdlT3JpZW50YXRpb24pO1xyXG5cclxuXHR2YXIgcGRmT3B0aW9ucyA9IHtcclxuXHRcdHNpemU6IFtwYWdlU2l6ZS53aWR0aCwgcGFnZVNpemUuaGVpZ2h0XSxcclxuXHRcdHBkZlZlcnNpb246IGRvY0RlZmluaXRpb24udmVyc2lvbixcclxuXHRcdGNvbXByZXNzOiBkb2NEZWZpbml0aW9uLmNvbXByZXNzLFxyXG5cdFx0dXNlclBhc3N3b3JkOiBkb2NEZWZpbml0aW9uLnVzZXJQYXNzd29yZCxcclxuXHRcdG93bmVyUGFzc3dvcmQ6IGRvY0RlZmluaXRpb24ub3duZXJQYXNzd29yZCxcclxuXHRcdHBlcm1pc3Npb25zOiBkb2NEZWZpbml0aW9uLnBlcm1pc3Npb25zLFxyXG5cdFx0Zm9udExheW91dENhY2hlOiBpc0Jvb2xlYW4ob3B0aW9ucy5mb250TGF5b3V0Q2FjaGUpID8gb3B0aW9ucy5mb250TGF5b3V0Q2FjaGUgOiB0cnVlLFxyXG5cdFx0YnVmZmVyUGFnZXM6IG9wdGlvbnMuYnVmZmVyUGFnZXMgfHwgZmFsc2UsXHJcblx0XHRhdXRvRmlyc3RQYWdlOiBmYWxzZSxcclxuXHRcdGluZm86IGNyZWF0ZU1ldGFkYXRhKGRvY0RlZmluaXRpb24pLFxyXG5cdFx0Zm9udDogbnVsbFxyXG5cdH07XHJcblxyXG5cdHRoaXMucGRmS2l0RG9jID0gUGRmS2l0RW5naW5lLmNyZWF0ZVBkZkRvY3VtZW50KHBkZk9wdGlvbnMpO1xyXG5cclxuXHR0aGlzLmZvbnRQcm92aWRlciA9IG5ldyBGb250UHJvdmlkZXIodGhpcy5mb250RGVzY3JpcHRvcnMsIHRoaXMucGRmS2l0RG9jKTtcclxuXHJcblx0dmFyIGJ1aWxkZXIgPSBuZXcgTGF5b3V0QnVpbGRlcihwYWdlU2l6ZSwgZml4UGFnZU1hcmdpbnMoZG9jRGVmaW5pdGlvbi5wYWdlTWFyZ2lucyksIG5ldyBJbWFnZU1lYXN1cmUodGhpcy5wZGZLaXREb2MsIGRvY0RlZmluaXRpb24uaW1hZ2VzKSwgbmV3IFNWR01lYXN1cmUoKSk7XHJcblxyXG5cdHJlZ2lzdGVyRGVmYXVsdFRhYmxlTGF5b3V0cyhidWlsZGVyKTtcclxuXHRpZiAob3B0aW9ucy50YWJsZUxheW91dHMpIHtcclxuXHRcdGJ1aWxkZXIucmVnaXN0ZXJUYWJsZUxheW91dHMob3B0aW9ucy50YWJsZUxheW91dHMpO1xyXG5cdH1cclxuXHJcblx0dmFyIHBhZ2VzID0gYnVpbGRlci5sYXlvdXREb2N1bWVudChkb2NEZWZpbml0aW9uLmNvbnRlbnQsIHRoaXMuZm9udFByb3ZpZGVyLCBkb2NEZWZpbml0aW9uLnN0eWxlcyB8fCB7fSwgZG9jRGVmaW5pdGlvbi5kZWZhdWx0U3R5bGUgfHwge1xyXG5cdFx0Zm9udFNpemU6IDEyLFxyXG5cdFx0Zm9udDogJ1JvYm90bydcclxuXHR9LCBkb2NEZWZpbml0aW9uLmJhY2tncm91bmQsIGRvY0RlZmluaXRpb24uaGVhZGVyLCBkb2NEZWZpbml0aW9uLmZvb3RlciwgZG9jRGVmaW5pdGlvbi5pbWFnZXMsIGRvY0RlZmluaXRpb24ud2F0ZXJtYXJrLCBkb2NEZWZpbml0aW9uLnBhZ2VCcmVha0JlZm9yZSk7XHJcblx0dmFyIG1heE51bWJlclBhZ2VzID0gZG9jRGVmaW5pdGlvbi5tYXhQYWdlc051bWJlciB8fCAtMTtcclxuXHRpZiAoaXNOdW1iZXIobWF4TnVtYmVyUGFnZXMpICYmIG1heE51bWJlclBhZ2VzID4gLTEpIHtcclxuXHRcdHBhZ2VzID0gcGFnZXMuc2xpY2UoMCwgbWF4TnVtYmVyUGFnZXMpO1xyXG5cdH1cclxuXHJcblx0Ly8gaWYgcGFnZVNpemUuaGVpZ2h0IGlzIHNldCB0byBJbmZpbml0eSwgY2FsY3VsYXRlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBwYWdlIHRoYXRcclxuXHQvLyB3YXMgbGFpZCBvdXQgdXNpbmcgdGhlIGhlaWdodCBvZiBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgcGFnZS5cclxuXHRpZiAocGFnZVNpemUuaGVpZ2h0ID09PSBJbmZpbml0eSkge1xyXG5cdFx0dmFyIHBhZ2VIZWlnaHQgPSBjYWxjdWxhdGVQYWdlSGVpZ2h0KHBhZ2VzLCBkb2NEZWZpbml0aW9uLnBhZ2VNYXJnaW5zKTtcclxuXHRcdHRoaXMucGRmS2l0RG9jLm9wdGlvbnMuc2l6ZSA9IFtwYWdlU2l6ZS53aWR0aCwgcGFnZUhlaWdodF07XHJcblx0fVxyXG5cclxuXHR2YXIgcGF0dGVybnMgPSBjcmVhdGVQYXR0ZXJucyhkb2NEZWZpbml0aW9uLnBhdHRlcm5zIHx8IHt9LCB0aGlzLnBkZktpdERvYyk7XHJcblxyXG5cdHJlbmRlclBhZ2VzKHBhZ2VzLCB0aGlzLmZvbnRQcm92aWRlciwgdGhpcy5wZGZLaXREb2MsIHBhdHRlcm5zLCBvcHRpb25zLnByb2dyZXNzQ2FsbGJhY2spO1xyXG5cclxuXHRpZiAob3B0aW9ucy5hdXRvUHJpbnQpIHtcclxuXHRcdHZhciBwcmludEFjdGlvblJlZiA9IHRoaXMucGRmS2l0RG9jLnJlZih7XHJcblx0XHRcdFR5cGU6ICdBY3Rpb24nLFxyXG5cdFx0XHRTOiAnTmFtZWQnLFxyXG5cdFx0XHROOiAnUHJpbnQnXHJcblx0XHR9KTtcclxuXHRcdHRoaXMucGRmS2l0RG9jLl9yb290LmRhdGEuT3BlbkFjdGlvbiA9IHByaW50QWN0aW9uUmVmO1xyXG5cdFx0cHJpbnRBY3Rpb25SZWYuZW5kKCk7XHJcblx0fVxyXG5cdHJldHVybiB0aGlzLnBkZktpdERvYztcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZU1ldGFkYXRhKGRvY0RlZmluaXRpb24pIHtcclxuXHQvLyBQREYgc3RhbmRhcmQgaGFzIHRoZXNlIHByb3BlcnRpZXMgcmVzZXJ2ZWQ6IFRpdGxlLCBBdXRob3IsIFN1YmplY3QsIEtleXdvcmRzLFxyXG5cdC8vIENyZWF0b3IsIFByb2R1Y2VyLCBDcmVhdGlvbkRhdGUsIE1vZERhdGUsIFRyYXBwZWQuXHJcblx0Ly8gVG8ga2VlcCB0aGUgcGRmbWFrZSBhcGkgY29uc2lzdGVudCwgdGhlIGluZm8gZmllbGQgYXJlIGRlZmluZWQgbG93ZXJjYXNlLlxyXG5cdC8vIEN1c3RvbSBwcm9wZXJ0aWVzIGRvbid0IGNvbnRhaW4gYSBzcGFjZS5cclxuXHRmdW5jdGlvbiBzdGFuZGFyZGl6ZVByb3BlcnR5S2V5KGtleSkge1xyXG5cdFx0dmFyIHN0YW5kYXJkUHJvcGVydGllcyA9IFsnVGl0bGUnLCAnQXV0aG9yJywgJ1N1YmplY3QnLCAnS2V5d29yZHMnLFxyXG5cdFx0XHQnQ3JlYXRvcicsICdQcm9kdWNlcicsICdDcmVhdGlvbkRhdGUnLCAnTW9kRGF0ZScsICdUcmFwcGVkJ107XHJcblx0XHR2YXIgc3RhbmRhcmRpemVkS2V5ID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xyXG5cdFx0aWYgKHN0YW5kYXJkUHJvcGVydGllcy5pbmRleE9mKHN0YW5kYXJkaXplZEtleSkgIT09IC0xKSB7XHJcblx0XHRcdHJldHVybiBzdGFuZGFyZGl6ZWRLZXk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGtleS5yZXBsYWNlKC9cXHMrL2csICcnKTtcclxuXHR9XHJcblxyXG5cdHZhciBpbmZvID0ge1xyXG5cdFx0UHJvZHVjZXI6ICdwZGZtYWtlJyxcclxuXHRcdENyZWF0b3I6ICdwZGZtYWtlJ1xyXG5cdH07XHJcblxyXG5cdGlmIChkb2NEZWZpbml0aW9uLmluZm8pIHtcclxuXHRcdGZvciAodmFyIGtleSBpbiBkb2NEZWZpbml0aW9uLmluZm8pIHtcclxuXHRcdFx0dmFyIHZhbHVlID0gZG9jRGVmaW5pdGlvbi5pbmZvW2tleV07XHJcblx0XHRcdGlmICh2YWx1ZSkge1xyXG5cdFx0XHRcdGtleSA9IHN0YW5kYXJkaXplUHJvcGVydHlLZXkoa2V5KTtcclxuXHRcdFx0XHRpbmZvW2tleV0gPSB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gaW5mbztcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXRlUGFnZUhlaWdodChwYWdlcywgbWFyZ2lucykge1xyXG5cdGZ1bmN0aW9uIGdldEl0ZW1IZWlnaHQoaXRlbSkge1xyXG5cdFx0aWYgKGlzRnVuY3Rpb24oaXRlbS5pdGVtLmdldEhlaWdodCkpIHtcclxuXHRcdFx0cmV0dXJuIGl0ZW0uaXRlbS5nZXRIZWlnaHQoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXRlbS5pdGVtLl9oZWlnaHQpIHtcclxuXHRcdFx0cmV0dXJuIGl0ZW0uaXRlbS5faGVpZ2h0O1xyXG5cdFx0fSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICd2ZWN0b3InKSB7XHJcblx0XHRcdGlmICh0eXBlb2YgaXRlbS5pdGVtLnkxICE9PSAndW5kZWZpbmVkJykge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtLml0ZW0ueTEgPiBpdGVtLml0ZW0ueTIgPyBpdGVtLml0ZW0ueTEgOiBpdGVtLml0ZW0ueTI7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW0uaXRlbS5oO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgbmV4dCBpdGVtIHR5cGVzXHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0Qm90dG9tUG9zaXRpb24oaXRlbSkge1xyXG5cdFx0dmFyIHRvcCA9IGl0ZW0uaXRlbS55IHx8IDA7XHJcblx0XHR2YXIgaGVpZ2h0ID0gZ2V0SXRlbUhlaWdodChpdGVtKTtcclxuXHRcdHJldHVybiB0b3AgKyBoZWlnaHQ7XHJcblx0fVxyXG5cclxuXHR2YXIgZml4ZWRNYXJnaW5zID0gZml4UGFnZU1hcmdpbnMobWFyZ2lucyB8fCA0MCk7XHJcblx0dmFyIGhlaWdodCA9IGZpeGVkTWFyZ2lucy50b3A7XHJcblxyXG5cdHBhZ2VzLmZvckVhY2goZnVuY3Rpb24gKHBhZ2UpIHtcclxuXHRcdHBhZ2UuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG5cdFx0XHR2YXIgYm90dG9tUG9zaXRpb24gPSBnZXRCb3R0b21Qb3NpdGlvbihpdGVtKTtcclxuXHRcdFx0aWYgKGJvdHRvbVBvc2l0aW9uID4gaGVpZ2h0KSB7XHJcblx0XHRcdFx0aGVpZ2h0ID0gYm90dG9tUG9zaXRpb247XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0pO1xyXG5cclxuXHRoZWlnaHQgKz0gZml4ZWRNYXJnaW5zLmJvdHRvbTtcclxuXHJcblx0cmV0dXJuIGhlaWdodDtcclxufVxyXG5cclxuZnVuY3Rpb24gZml4UGFnZVNpemUocGFnZVNpemUsIHBhZ2VPcmllbnRhdGlvbikge1xyXG5cdGZ1bmN0aW9uIGlzTmVlZFN3YXBQYWdlU2l6ZXMocGFnZU9yaWVudGF0aW9uKSB7XHJcblx0XHRpZiAoaXNTdHJpbmcocGFnZU9yaWVudGF0aW9uKSkge1xyXG5cdFx0XHRwYWdlT3JpZW50YXRpb24gPSBwYWdlT3JpZW50YXRpb24udG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0cmV0dXJuICgocGFnZU9yaWVudGF0aW9uID09PSAncG9ydHJhaXQnKSAmJiAoc2l6ZS53aWR0aCA+IHNpemUuaGVpZ2h0KSkgfHxcclxuXHRcdFx0XHQoKHBhZ2VPcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZScpICYmIChzaXplLndpZHRoIDwgc2l6ZS5oZWlnaHQpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIGlmIHBhZ2VTaXplLmhlaWdodCBpcyBzZXQgdG8gYXV0bywgc2V0IHRoZSBoZWlnaHQgdG8gaW5maW5pdHkgc28gdGhlcmUgYXJlIG5vIHBhZ2UgYnJlYWtzLlxyXG5cdGlmIChwYWdlU2l6ZSAmJiBwYWdlU2l6ZS5oZWlnaHQgPT09ICdhdXRvJykge1xyXG5cdFx0cGFnZVNpemUuaGVpZ2h0ID0gSW5maW5pdHk7XHJcblx0fVxyXG5cclxuXHR2YXIgc2l6ZSA9IHBhZ2VTaXplMndpZHRoQW5kSGVpZ2h0KHBhZ2VTaXplIHx8ICdBNCcpO1xyXG5cdGlmIChpc05lZWRTd2FwUGFnZVNpemVzKHBhZ2VPcmllbnRhdGlvbikpIHsgLy8gc3dhcCBwYWdlIHNpemVzXHJcblx0XHRzaXplID0geyB3aWR0aDogc2l6ZS5oZWlnaHQsIGhlaWdodDogc2l6ZS53aWR0aCB9O1xyXG5cdH1cclxuXHRzaXplLm9yaWVudGF0aW9uID0gc2l6ZS53aWR0aCA+IHNpemUuaGVpZ2h0ID8gJ2xhbmRzY2FwZScgOiAncG9ydHJhaXQnO1xyXG5cdHJldHVybiBzaXplO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaXhQYWdlTWFyZ2lucyhtYXJnaW4pIHtcclxuXHRpZiAoaXNOdW1iZXIobWFyZ2luKSkge1xyXG5cdFx0bWFyZ2luID0geyBsZWZ0OiBtYXJnaW4sIHJpZ2h0OiBtYXJnaW4sIHRvcDogbWFyZ2luLCBib3R0b206IG1hcmdpbiB9O1xyXG5cdH0gZWxzZSBpZiAoaXNBcnJheShtYXJnaW4pKSB7XHJcblx0XHRpZiAobWFyZ2luLmxlbmd0aCA9PT0gMikge1xyXG5cdFx0XHRtYXJnaW4gPSB7IGxlZnQ6IG1hcmdpblswXSwgdG9wOiBtYXJnaW5bMV0sIHJpZ2h0OiBtYXJnaW5bMF0sIGJvdHRvbTogbWFyZ2luWzFdIH07XHJcblx0XHR9IGVsc2UgaWYgKG1hcmdpbi5sZW5ndGggPT09IDQpIHtcclxuXHRcdFx0bWFyZ2luID0geyBsZWZ0OiBtYXJnaW5bMF0sIHRvcDogbWFyZ2luWzFdLCByaWdodDogbWFyZ2luWzJdLCBib3R0b206IG1hcmdpblszXSB9O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhyb3cgJ0ludmFsaWQgcGFnZU1hcmdpbnMgZGVmaW5pdGlvbic7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbWFyZ2luO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWdpc3RlckRlZmF1bHRUYWJsZUxheW91dHMobGF5b3V0QnVpbGRlcikge1xyXG5cdGxheW91dEJ1aWxkZXIucmVnaXN0ZXJUYWJsZUxheW91dHMoe1xyXG5cdFx0bm9Cb3JkZXJzOiB7XHJcblx0XHRcdGhMaW5lV2lkdGg6IGZ1bmN0aW9uIChpKSB7XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdH0sXHJcblx0XHRcdHZMaW5lV2lkdGg6IGZ1bmN0aW9uIChpKSB7XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdH0sXHJcblx0XHRcdHBhZGRpbmdMZWZ0OiBmdW5jdGlvbiAoaSkge1xyXG5cdFx0XHRcdHJldHVybiBpICYmIDQgfHwgMDtcclxuXHRcdFx0fSxcclxuXHRcdFx0cGFkZGluZ1JpZ2h0OiBmdW5jdGlvbiAoaSwgbm9kZSkge1xyXG5cdFx0XHRcdHJldHVybiAoaSA8IG5vZGUudGFibGUud2lkdGhzLmxlbmd0aCAtIDEpID8gNCA6IDA7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRoZWFkZXJMaW5lT25seToge1xyXG5cdFx0XHRoTGluZVdpZHRoOiBmdW5jdGlvbiAoaSwgbm9kZSkge1xyXG5cdFx0XHRcdGlmIChpID09PSAwIHx8IGkgPT09IG5vZGUudGFibGUuYm9keS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gKGkgPT09IG5vZGUudGFibGUuaGVhZGVyUm93cykgPyAyIDogMDtcclxuXHRcdFx0fSxcclxuXHRcdFx0dkxpbmVXaWR0aDogZnVuY3Rpb24gKGkpIHtcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0fSxcclxuXHRcdFx0cGFkZGluZ0xlZnQ6IGZ1bmN0aW9uIChpKSB7XHJcblx0XHRcdFx0cmV0dXJuIGkgPT09IDAgPyAwIDogODtcclxuXHRcdFx0fSxcclxuXHRcdFx0cGFkZGluZ1JpZ2h0OiBmdW5jdGlvbiAoaSwgbm9kZSkge1xyXG5cdFx0XHRcdHJldHVybiAoaSA9PT0gbm9kZS50YWJsZS53aWR0aHMubGVuZ3RoIC0gMSkgPyAwIDogODtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGxpZ2h0SG9yaXpvbnRhbExpbmVzOiB7XHJcblx0XHRcdGhMaW5lV2lkdGg6IGZ1bmN0aW9uIChpLCBub2RlKSB7XHJcblx0XHRcdFx0aWYgKGkgPT09IDAgfHwgaSA9PT0gbm9kZS50YWJsZS5ib2R5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiAoaSA9PT0gbm9kZS50YWJsZS5oZWFkZXJSb3dzKSA/IDIgOiAxO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR2TGluZVdpZHRoOiBmdW5jdGlvbiAoaSkge1xyXG5cdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRoTGluZUNvbG9yOiBmdW5jdGlvbiAoaSkge1xyXG5cdFx0XHRcdHJldHVybiBpID09PSAxID8gJ2JsYWNrJyA6ICcjYWFhJztcclxuXHRcdFx0fSxcclxuXHRcdFx0cGFkZGluZ0xlZnQ6IGZ1bmN0aW9uIChpKSB7XHJcblx0XHRcdFx0cmV0dXJuIGkgPT09IDAgPyAwIDogODtcclxuXHRcdFx0fSxcclxuXHRcdFx0cGFkZGluZ1JpZ2h0OiBmdW5jdGlvbiAoaSwgbm9kZSkge1xyXG5cdFx0XHRcdHJldHVybiAoaSA9PT0gbm9kZS50YWJsZS53aWR0aHMubGVuZ3RoIC0gMSkgPyAwIDogODtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYWdlU2l6ZTJ3aWR0aEFuZEhlaWdodChwYWdlU2l6ZSkge1xyXG5cdGlmIChpc1N0cmluZyhwYWdlU2l6ZSkpIHtcclxuXHRcdHZhciBzaXplID0gc2l6ZXNbcGFnZVNpemUudG9VcHBlckNhc2UoKV07XHJcblx0XHRpZiAoIXNpemUpIHtcclxuXHRcdFx0dGhyb3cgJ1BhZ2Ugc2l6ZSAnICsgcGFnZVNpemUgKyAnIG5vdCByZWNvZ25pemVkJztcclxuXHRcdH1cclxuXHRcdHJldHVybiB7IHdpZHRoOiBzaXplWzBdLCBoZWlnaHQ6IHNpemVbMV0gfTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBwYWdlU2l6ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlUGFnZU9yaWVudGF0aW9uSW5PcHRpb25zKGN1cnJlbnRQYWdlLCBwZGZLaXREb2MpIHtcclxuXHR2YXIgcHJldmlvdXNQYWdlT3JpZW50YXRpb24gPSBwZGZLaXREb2Mub3B0aW9ucy5zaXplWzBdID4gcGRmS2l0RG9jLm9wdGlvbnMuc2l6ZVsxXSA/ICdsYW5kc2NhcGUnIDogJ3BvcnRyYWl0JztcclxuXHJcblx0aWYgKGN1cnJlbnRQYWdlLnBhZ2VTaXplLm9yaWVudGF0aW9uICE9PSBwcmV2aW91c1BhZ2VPcmllbnRhdGlvbikge1xyXG5cdFx0dmFyIHdpZHRoID0gcGRmS2l0RG9jLm9wdGlvbnMuc2l6ZVswXTtcclxuXHRcdHZhciBoZWlnaHQgPSBwZGZLaXREb2Mub3B0aW9ucy5zaXplWzFdO1xyXG5cdFx0cGRmS2l0RG9jLm9wdGlvbnMuc2l6ZSA9IFtoZWlnaHQsIHdpZHRoXTtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlclBhZ2VzKHBhZ2VzLCBmb250UHJvdmlkZXIsIHBkZktpdERvYywgcGF0dGVybnMsIHByb2dyZXNzQ2FsbGJhY2spIHtcclxuXHRwZGZLaXREb2MuX3BkZk1ha2VQYWdlcyA9IHBhZ2VzO1xyXG5cdHBkZktpdERvYy5hZGRQYWdlKCk7XHJcblxyXG5cdHZhciB0b3RhbEl0ZW1zID0gMDtcclxuXHRpZiAocHJvZ3Jlc3NDYWxsYmFjaykge1xyXG5cdFx0cGFnZXMuZm9yRWFjaChmdW5jdGlvbiAocGFnZSkge1xyXG5cdFx0XHR0b3RhbEl0ZW1zICs9IHBhZ2UuaXRlbXMubGVuZ3RoO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHR2YXIgcmVuZGVyZWRJdGVtcyA9IDA7XHJcblx0cHJvZ3Jlc3NDYWxsYmFjayA9IHByb2dyZXNzQ2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge1xyXG5cdH07XHJcblxyXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGlmIChpID4gMCkge1xyXG5cdFx0XHR1cGRhdGVQYWdlT3JpZW50YXRpb25Jbk9wdGlvbnMocGFnZXNbaV0sIHBkZktpdERvYyk7XHJcblx0XHRcdHBkZktpdERvYy5hZGRQYWdlKHBkZktpdERvYy5vcHRpb25zKTtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgcGFnZSA9IHBhZ2VzW2ldO1xyXG5cdFx0Zm9yICh2YXIgaWkgPSAwLCBpbCA9IHBhZ2UuaXRlbXMubGVuZ3RoOyBpaSA8IGlsOyBpaSsrKSB7XHJcblx0XHRcdHZhciBpdGVtID0gcGFnZS5pdGVtc1tpaV07XHJcblx0XHRcdHN3aXRjaCAoaXRlbS50eXBlKSB7XHJcblx0XHRcdFx0Y2FzZSAndmVjdG9yJzpcclxuXHRcdFx0XHRcdHJlbmRlclZlY3RvcihpdGVtLml0ZW0sIHBhdHRlcm5zLCBwZGZLaXREb2MpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAnbGluZSc6XHJcblx0XHRcdFx0XHRyZW5kZXJMaW5lKGl0ZW0uaXRlbSwgaXRlbS5pdGVtLngsIGl0ZW0uaXRlbS55LCBwYXR0ZXJucywgcGRmS2l0RG9jKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgJ2ltYWdlJzpcclxuXHRcdFx0XHRcdHJlbmRlckltYWdlKGl0ZW0uaXRlbSwgaXRlbS5pdGVtLngsIGl0ZW0uaXRlbS55LCBwZGZLaXREb2MpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAnc3ZnJzpcclxuXHRcdFx0XHRcdHJlbmRlclNWRyhpdGVtLml0ZW0sIGl0ZW0uaXRlbS54LCBpdGVtLml0ZW0ueSwgcGRmS2l0RG9jLCBmb250UHJvdmlkZXIpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAnYmVnaW5DbGlwJzpcclxuXHRcdFx0XHRcdGJlZ2luQ2xpcChpdGVtLml0ZW0sIHBkZktpdERvYyk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlICdlbmRDbGlwJzpcclxuXHRcdFx0XHRcdGVuZENsaXAocGRmS2l0RG9jKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJlbmRlcmVkSXRlbXMrKztcclxuXHRcdFx0cHJvZ3Jlc3NDYWxsYmFjayhyZW5kZXJlZEl0ZW1zIC8gdG90YWxJdGVtcyk7XHJcblx0XHR9XHJcblx0XHRpZiAocGFnZS53YXRlcm1hcmspIHtcclxuXHRcdFx0cmVuZGVyV2F0ZXJtYXJrKHBhZ2UsIHBkZktpdERvYyk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogU2hpZnQgdGhlIFwieVwiIGhlaWdodCBvZiB0aGUgdGV4dCBiYXNlbGluZSB1cCBvciBkb3duIChzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQsXHJcbiAqIHJlc3BlY3RpdmVseSkuIFRoZSBleGFjdCBzaGlmdCBjYW4gLyBzaG91bGQgYmUgY2hhbmdlZCBhY2NvcmRpbmcgdG8gc3RhbmRhcmRcclxuICogY29udmVudGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7YW55fSBpbmxpbmVcclxuICovXHJcbmZ1bmN0aW9uIG9mZnNldFRleHQoeSwgaW5saW5lKSB7XHJcblx0dmFyIG5ld1kgPSB5O1xyXG5cdGlmIChpbmxpbmUuc3VwKSB7XHJcblx0XHRuZXdZIC09IGlubGluZS5mb250U2l6ZSAqIDAuNzU7XHJcblx0fVxyXG5cdGlmIChpbmxpbmUuc3ViKSB7XHJcblx0XHRuZXdZICs9IGlubGluZS5mb250U2l6ZSAqIDAuMzU7XHJcblx0fVxyXG5cdHJldHVybiBuZXdZO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJMaW5lKGxpbmUsIHgsIHksIHBhdHRlcm5zLCBwZGZLaXREb2MpIHtcclxuXHRmdW5jdGlvbiBwcmVwYXJlUGFnZU5vZGVSZWZMaW5lKF9wYWdlTm9kZVJlZiwgaW5saW5lKSB7XHJcblx0XHR2YXIgbmV3V2lkdGg7XHJcblx0XHR2YXIgZGlmZldpZHRoO1xyXG5cdFx0dmFyIHRleHRUb29scyA9IG5ldyBUZXh0VG9vbHMobnVsbCk7XHJcblxyXG5cdFx0aWYgKGlzVW5kZWZpbmVkKF9wYWdlTm9kZVJlZi5wb3NpdGlvbnMpKSB7XHJcblx0XHRcdHRocm93ICdQYWdlIHJlZmVyZW5jZSBpZCBub3QgZm91bmQnO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBwYWdlTnVtYmVyID0gX3BhZ2VOb2RlUmVmLnBvc2l0aW9uc1swXS5wYWdlTnVtYmVyLnRvU3RyaW5nKCk7XHJcblxyXG5cdFx0aW5saW5lLnRleHQgPSBwYWdlTnVtYmVyO1xyXG5cdFx0bmV3V2lkdGggPSB0ZXh0VG9vbHMud2lkdGhPZlN0cmluZyhpbmxpbmUudGV4dCwgaW5saW5lLmZvbnQsIGlubGluZS5mb250U2l6ZSwgaW5saW5lLmNoYXJhY3RlclNwYWNpbmcsIGlubGluZS5mb250RmVhdHVyZXMpO1xyXG5cdFx0ZGlmZldpZHRoID0gaW5saW5lLndpZHRoIC0gbmV3V2lkdGg7XHJcblx0XHRpbmxpbmUud2lkdGggPSBuZXdXaWR0aDtcclxuXHJcblx0XHRzd2l0Y2ggKGlubGluZS5hbGlnbm1lbnQpIHtcclxuXHRcdFx0Y2FzZSAncmlnaHQnOlxyXG5cdFx0XHRcdGlubGluZS54ICs9IGRpZmZXaWR0aDtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnY2VudGVyJzpcclxuXHRcdFx0XHRpbmxpbmUueCArPSBkaWZmV2lkdGggLyAyO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKGxpbmUuX3BhZ2VOb2RlUmVmKSB7XHJcblx0XHRwcmVwYXJlUGFnZU5vZGVSZWZMaW5lKGxpbmUuX3BhZ2VOb2RlUmVmLCBsaW5lLmlubGluZXNbMF0pO1xyXG5cdH1cclxuXHJcblx0eCA9IHggfHwgMDtcclxuXHR5ID0geSB8fCAwO1xyXG5cclxuXHR2YXIgbGluZUhlaWdodCA9IGxpbmUuZ2V0SGVpZ2h0KCk7XHJcblx0dmFyIGFzY2VuZGVySGVpZ2h0ID0gbGluZS5nZXRBc2NlbmRlckhlaWdodCgpO1xyXG5cdHZhciBkZXNjZW50ID0gbGluZUhlaWdodCAtIGFzY2VuZGVySGVpZ2h0O1xyXG5cclxuXHR0ZXh0RGVjb3JhdG9yLmRyYXdCYWNrZ3JvdW5kKGxpbmUsIHgsIHksIHBhdHRlcm5zLCBwZGZLaXREb2MpO1xyXG5cclxuXHQvL1RPRE86IGxpbmUub3B0aW1pemVJbmxpbmVzKCk7XHJcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBsaW5lLmlubGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHR2YXIgaW5saW5lID0gbGluZS5pbmxpbmVzW2ldO1xyXG5cdFx0dmFyIHNoaWZ0VG9CYXNlbGluZSA9IGxpbmVIZWlnaHQgLSAoKGlubGluZS5mb250LmFzY2VuZGVyIC8gMTAwMCkgKiBpbmxpbmUuZm9udFNpemUpIC0gZGVzY2VudDtcclxuXHJcblx0XHRpZiAoaW5saW5lLl9wYWdlTm9kZVJlZikge1xyXG5cdFx0XHRwcmVwYXJlUGFnZU5vZGVSZWZMaW5lKGlubGluZS5fcGFnZU5vZGVSZWYsIGlubGluZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIG9wdGlvbnMgPSB7XHJcblx0XHRcdGxpbmVCcmVhazogZmFsc2UsXHJcblx0XHRcdHRleHRXaWR0aDogaW5saW5lLndpZHRoLFxyXG5cdFx0XHRjaGFyYWN0ZXJTcGFjaW5nOiBpbmxpbmUuY2hhcmFjdGVyU3BhY2luZyxcclxuXHRcdFx0d29yZENvdW50OiAxLFxyXG5cdFx0XHRsaW5rOiBpbmxpbmUubGlua1xyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoaW5saW5lLmxpbmtUb0Rlc3RpbmF0aW9uKSB7XHJcblx0XHRcdG9wdGlvbnMuZ29UbyA9IGlubGluZS5saW5rVG9EZXN0aW5hdGlvbjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGluZS5pZCAmJiBpID09PSAwKSB7XHJcblx0XHRcdG9wdGlvbnMuZGVzdGluYXRpb24gPSBsaW5lLmlkO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbmxpbmUuZm9udEZlYXR1cmVzKSB7XHJcblx0XHRcdG9wdGlvbnMuZmVhdHVyZXMgPSBpbmxpbmUuZm9udEZlYXR1cmVzO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBvcGFjaXR5ID0gaXNOdW1iZXIoaW5saW5lLm9wYWNpdHkpID8gaW5saW5lLm9wYWNpdHkgOiAxO1xyXG5cdFx0cGRmS2l0RG9jLm9wYWNpdHkob3BhY2l0eSk7XHJcblx0XHRwZGZLaXREb2MuZmlsbChpbmxpbmUuY29sb3IgfHwgJ2JsYWNrJyk7XHJcblxyXG5cdFx0cGRmS2l0RG9jLl9mb250ID0gaW5saW5lLmZvbnQ7XHJcblx0XHRwZGZLaXREb2MuZm9udFNpemUoaW5saW5lLmZvbnRTaXplKTtcclxuXHJcblx0XHR2YXIgc2hpZnRlZFkgPSBvZmZzZXRUZXh0KHkgKyBzaGlmdFRvQmFzZWxpbmUsIGlubGluZSk7XHJcblx0XHRwZGZLaXREb2MudGV4dChpbmxpbmUudGV4dCwgeCArIGlubGluZS54LCBzaGlmdGVkWSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0aWYgKGlubGluZS5saW5rVG9QYWdlKSB7XHJcblx0XHRcdHZhciBfcmVmID0gcGRmS2l0RG9jLnJlZih7IFR5cGU6ICdBY3Rpb24nLCBTOiAnR29UbycsIEQ6IFtpbmxpbmUubGlua1RvUGFnZSwgMCwgMF0gfSkuZW5kKCk7XHJcblx0XHRcdHBkZktpdERvYy5hbm5vdGF0ZSh4ICsgaW5saW5lLngsIHNoaWZ0ZWRZLCBpbmxpbmUud2lkdGgsIGlubGluZS5oZWlnaHQsIHtcclxuXHRcdFx0XHRTdWJ0eXBlOiAnTGluaycsXHJcblx0XHRcdFx0RGVzdDogW2lubGluZS5saW5rVG9QYWdlIC0gMSwgJ1hZWicsIG51bGwsIG51bGwsIG51bGxdXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblx0Ly8gRGVjb3JhdGlvbnMgd29uJ3QgZHJhdyBjb3JyZWN0bHkgZm9yIHN1cGVyc2NyaXB0XHJcblx0dGV4dERlY29yYXRvci5kcmF3RGVjb3JhdGlvbnMobGluZSwgeCwgeSwgcGRmS2l0RG9jKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyV2F0ZXJtYXJrKHBhZ2UsIHBkZktpdERvYykge1xyXG5cdHZhciB3YXRlcm1hcmsgPSBwYWdlLndhdGVybWFyaztcclxuXHJcblx0cGRmS2l0RG9jLmZpbGwod2F0ZXJtYXJrLmNvbG9yKTtcclxuXHRwZGZLaXREb2Mub3BhY2l0eSh3YXRlcm1hcmsub3BhY2l0eSk7XHJcblxyXG5cdHBkZktpdERvYy5zYXZlKCk7XHJcblxyXG5cdHBkZktpdERvYy5yb3RhdGUod2F0ZXJtYXJrLmFuZ2xlLCB7IG9yaWdpbjogW3BkZktpdERvYy5wYWdlLndpZHRoIC8gMiwgcGRmS2l0RG9jLnBhZ2UuaGVpZ2h0IC8gMl0gfSk7XHJcblxyXG5cdHZhciB4ID0gcGRmS2l0RG9jLnBhZ2Uud2lkdGggLyAyIC0gd2F0ZXJtYXJrLl9zaXplLnNpemUud2lkdGggLyAyO1xyXG5cdHZhciB5ID0gcGRmS2l0RG9jLnBhZ2UuaGVpZ2h0IC8gMiAtIHdhdGVybWFyay5fc2l6ZS5zaXplLmhlaWdodCAvIDI7XHJcblxyXG5cdHBkZktpdERvYy5fZm9udCA9IHdhdGVybWFyay5mb250O1xyXG5cdHBkZktpdERvYy5mb250U2l6ZSh3YXRlcm1hcmsuZm9udFNpemUpO1xyXG5cdHBkZktpdERvYy50ZXh0KHdhdGVybWFyay50ZXh0LCB4LCB5LCB7IGxpbmVCcmVhazogZmFsc2UgfSk7XHJcblxyXG5cdHBkZktpdERvYy5yZXN0b3JlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlclZlY3Rvcih2ZWN0b3IsIHBhdHRlcm5zLCBwZGZLaXREb2MpIHtcclxuXHQvL1RPRE86IHBkZiBvcHRpbWl6YXRpb24gKHRoZXJlJ3Mgbm8gbmVlZCB0byB3cml0ZSBhbGwgcHJvcGVydGllcyBldmVyeXRpbWUpXHJcblx0cGRmS2l0RG9jLmxpbmVXaWR0aCh2ZWN0b3IubGluZVdpZHRoIHx8IDEpO1xyXG5cdGlmICh2ZWN0b3IuZGFzaCkge1xyXG5cdFx0cGRmS2l0RG9jLmRhc2godmVjdG9yLmRhc2gubGVuZ3RoLCB7IHNwYWNlOiB2ZWN0b3IuZGFzaC5zcGFjZSB8fCB2ZWN0b3IuZGFzaC5sZW5ndGgsIHBoYXNlOiB2ZWN0b3IuZGFzaC5waGFzZSB8fCAwIH0pO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRwZGZLaXREb2MudW5kYXNoKCk7XHJcblx0fVxyXG5cdHBkZktpdERvYy5saW5lSm9pbih2ZWN0b3IubGluZUpvaW4gfHwgJ21pdGVyJyk7XHJcblx0cGRmS2l0RG9jLmxpbmVDYXAodmVjdG9yLmxpbmVDYXAgfHwgJ2J1dHQnKTtcclxuXHJcblx0Ly9UT0RPOiBjbGlwcGluZ1xyXG5cclxuXHR2YXIgZ3JhZGllbnQgPSBudWxsO1xyXG5cclxuXHRzd2l0Y2ggKHZlY3Rvci50eXBlKSB7XHJcblx0XHRjYXNlICdlbGxpcHNlJzpcclxuXHRcdFx0cGRmS2l0RG9jLmVsbGlwc2UodmVjdG9yLngsIHZlY3Rvci55LCB2ZWN0b3IucjEsIHZlY3Rvci5yMik7XHJcblxyXG5cdFx0XHRpZiAodmVjdG9yLmxpbmVhckdyYWRpZW50KSB7XHJcblx0XHRcdFx0Z3JhZGllbnQgPSBwZGZLaXREb2MubGluZWFyR3JhZGllbnQodmVjdG9yLnggLSB2ZWN0b3IucjEsIHZlY3Rvci55LCB2ZWN0b3IueCArIHZlY3Rvci5yMSwgdmVjdG9yLnkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAncmVjdCc6XHJcblx0XHRcdGlmICh2ZWN0b3Iucikge1xyXG5cdFx0XHRcdHBkZktpdERvYy5yb3VuZGVkUmVjdCh2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci53LCB2ZWN0b3IuaCwgdmVjdG9yLnIpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHBkZktpdERvYy5yZWN0KHZlY3Rvci54LCB2ZWN0b3IueSwgdmVjdG9yLncsIHZlY3Rvci5oKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHZlY3Rvci5saW5lYXJHcmFkaWVudCkge1xyXG5cdFx0XHRcdGdyYWRpZW50ID0gcGRmS2l0RG9jLmxpbmVhckdyYWRpZW50KHZlY3Rvci54LCB2ZWN0b3IueSwgdmVjdG9yLnggKyB2ZWN0b3IudywgdmVjdG9yLnkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnbGluZSc6XHJcblx0XHRcdHBkZktpdERvYy5tb3ZlVG8odmVjdG9yLngxLCB2ZWN0b3IueTEpO1xyXG5cdFx0XHRwZGZLaXREb2MubGluZVRvKHZlY3Rvci54MiwgdmVjdG9yLnkyKTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlICdwb2x5bGluZSc6XHJcblx0XHRcdGlmICh2ZWN0b3IucG9pbnRzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRwZGZLaXREb2MubW92ZVRvKHZlY3Rvci5wb2ludHNbMF0ueCwgdmVjdG9yLnBvaW50c1swXS55KTtcclxuXHRcdFx0Zm9yICh2YXIgaSA9IDEsIGwgPSB2ZWN0b3IucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRcdHBkZktpdERvYy5saW5lVG8odmVjdG9yLnBvaW50c1tpXS54LCB2ZWN0b3IucG9pbnRzW2ldLnkpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodmVjdG9yLnBvaW50cy5sZW5ndGggPiAxKSB7XHJcblx0XHRcdFx0dmFyIHAxID0gdmVjdG9yLnBvaW50c1swXTtcclxuXHRcdFx0XHR2YXIgcG4gPSB2ZWN0b3IucG9pbnRzW3ZlY3Rvci5wb2ludHMubGVuZ3RoIC0gMV07XHJcblxyXG5cdFx0XHRcdGlmICh2ZWN0b3IuY2xvc2VQYXRoIHx8IHAxLnggPT09IHBuLnggJiYgcDEueSA9PT0gcG4ueSkge1xyXG5cdFx0XHRcdFx0cGRmS2l0RG9jLmNsb3NlUGF0aCgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgJ3BhdGgnOlxyXG5cdFx0XHRwZGZLaXREb2MucGF0aCh2ZWN0b3IuZCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdH1cclxuXHJcblx0aWYgKHZlY3Rvci5saW5lYXJHcmFkaWVudCAmJiBncmFkaWVudCkge1xyXG5cdFx0dmFyIHN0ZXAgPSAxIC8gKHZlY3Rvci5saW5lYXJHcmFkaWVudC5sZW5ndGggLSAxKTtcclxuXHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZlY3Rvci5saW5lYXJHcmFkaWVudC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRncmFkaWVudC5zdG9wKGkgKiBzdGVwLCB2ZWN0b3IubGluZWFyR3JhZGllbnRbaV0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZlY3Rvci5jb2xvciA9IGdyYWRpZW50O1xyXG5cdH1cclxuXHJcblx0aWYgKGlzUGF0dGVybih2ZWN0b3IuY29sb3IpKSB7XHJcblx0XHR2ZWN0b3IuY29sb3IgPSBnZXRQYXR0ZXJuKHZlY3Rvci5jb2xvciwgcGF0dGVybnMpO1xyXG5cdH1cclxuXHJcblx0dmFyIGZpbGxPcGFjaXR5ID0gaXNOdW1iZXIodmVjdG9yLmZpbGxPcGFjaXR5KSA/IHZlY3Rvci5maWxsT3BhY2l0eSA6IDE7XHJcblx0dmFyIHN0cm9rZU9wYWNpdHkgPSBpc051bWJlcih2ZWN0b3Iuc3Ryb2tlT3BhY2l0eSkgPyB2ZWN0b3Iuc3Ryb2tlT3BhY2l0eSA6IDE7XHJcblxyXG5cdGlmICh2ZWN0b3IuY29sb3IgJiYgdmVjdG9yLmxpbmVDb2xvcikge1xyXG5cdFx0cGRmS2l0RG9jLmZpbGxDb2xvcih2ZWN0b3IuY29sb3IsIGZpbGxPcGFjaXR5KTtcclxuXHRcdHBkZktpdERvYy5zdHJva2VDb2xvcih2ZWN0b3IubGluZUNvbG9yLCBzdHJva2VPcGFjaXR5KTtcclxuXHRcdHBkZktpdERvYy5maWxsQW5kU3Ryb2tlKCk7XHJcblx0fSBlbHNlIGlmICh2ZWN0b3IuY29sb3IpIHtcclxuXHRcdHBkZktpdERvYy5maWxsQ29sb3IodmVjdG9yLmNvbG9yLCBmaWxsT3BhY2l0eSk7XHJcblx0XHRwZGZLaXREb2MuZmlsbCgpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRwZGZLaXREb2Muc3Ryb2tlQ29sb3IodmVjdG9yLmxpbmVDb2xvciB8fCAnYmxhY2snLCBzdHJva2VPcGFjaXR5KTtcclxuXHRcdHBkZktpdERvYy5zdHJva2UoKTtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlckltYWdlKGltYWdlLCB4LCB5LCBwZGZLaXREb2MpIHtcclxuXHR2YXIgb3BhY2l0eSA9IGlzTnVtYmVyKGltYWdlLm9wYWNpdHkpID8gaW1hZ2Uub3BhY2l0eSA6IDE7XHJcblx0cGRmS2l0RG9jLm9wYWNpdHkob3BhY2l0eSk7XHJcblx0aWYgKGltYWdlLmNvdmVyKSB7XHJcblx0XHR2YXIgYWxpZ24gPSBpbWFnZS5jb3Zlci5hbGlnbiB8fCAnY2VudGVyJztcclxuXHRcdHZhciB2YWxpZ24gPSBpbWFnZS5jb3Zlci52YWxpZ24gfHwgJ2NlbnRlcic7XHJcblx0XHR2YXIgd2lkdGggPSBpbWFnZS5jb3Zlci53aWR0aCA/IGltYWdlLmNvdmVyLndpZHRoIDogaW1hZ2Uud2lkdGg7XHJcblx0XHR2YXIgaGVpZ2h0ID0gaW1hZ2UuY292ZXIuaGVpZ2h0ID8gaW1hZ2UuY292ZXIuaGVpZ2h0IDogaW1hZ2UuaGVpZ2h0O1xyXG5cdFx0cGRmS2l0RG9jLnNhdmUoKTtcclxuXHRcdHBkZktpdERvYy5yZWN0KGltYWdlLngsIGltYWdlLnksIHdpZHRoLCBoZWlnaHQpLmNsaXAoKTtcclxuXHRcdHBkZktpdERvYy5pbWFnZShpbWFnZS5pbWFnZSwgaW1hZ2UueCwgaW1hZ2UueSwgeyBjb3ZlcjogW3dpZHRoLCBoZWlnaHRdLCBhbGlnbjogYWxpZ24sIHZhbGlnbjogdmFsaWduIH0pO1xyXG5cdFx0cGRmS2l0RG9jLnJlc3RvcmUoKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cGRmS2l0RG9jLmltYWdlKGltYWdlLmltYWdlLCBpbWFnZS54LCBpbWFnZS55LCB7IHdpZHRoOiBpbWFnZS5fd2lkdGgsIGhlaWdodDogaW1hZ2UuX2hlaWdodCB9KTtcclxuXHR9XHJcblx0aWYgKGltYWdlLmxpbmspIHtcclxuXHRcdHBkZktpdERvYy5saW5rKGltYWdlLngsIGltYWdlLnksIGltYWdlLl93aWR0aCwgaW1hZ2UuX2hlaWdodCwgaW1hZ2UubGluayk7XHJcblx0fVxyXG5cdGlmIChpbWFnZS5saW5rVG9QYWdlKSB7XHJcblx0XHRwZGZLaXREb2MucmVmKHsgVHlwZTogJ0FjdGlvbicsIFM6ICdHb1RvJywgRDogW2ltYWdlLmxpbmtUb1BhZ2UsIDAsIDBdIH0pLmVuZCgpO1xyXG5cdFx0cGRmS2l0RG9jLmFubm90YXRlKGltYWdlLngsIGltYWdlLnksIGltYWdlLl93aWR0aCwgaW1hZ2UuX2hlaWdodCwgeyBTdWJ0eXBlOiAnTGluaycsIERlc3Q6IFtpbWFnZS5saW5rVG9QYWdlIC0gMSwgJ1hZWicsIG51bGwsIG51bGwsIG51bGxdIH0pO1xyXG5cdH1cclxuXHRpZiAoaW1hZ2UubGlua1RvRGVzdGluYXRpb24pIHtcclxuXHRcdHBkZktpdERvYy5nb1RvKGltYWdlLngsIGltYWdlLnksIGltYWdlLl93aWR0aCwgaW1hZ2UuX2hlaWdodCwgaW1hZ2UubGlua1RvRGVzdGluYXRpb24pO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyU1ZHKHN2ZywgeCwgeSwgcGRmS2l0RG9jLCBmb250UHJvdmlkZXIpIHtcclxuXHR2YXIgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyB3aWR0aDogc3ZnLl93aWR0aCwgaGVpZ2h0OiBzdmcuX2hlaWdodCwgYXNzdW1lUHQ6IHRydWUgfSwgc3ZnLm9wdGlvbnMpO1xyXG5cdG9wdGlvbnMuZm9udENhbGxiYWNrID0gZnVuY3Rpb24gKGZhbWlseSwgYm9sZCwgaXRhbGljKSB7XHJcblx0XHR2YXIgZm9udHNGYW1pbHkgPSBmYW1pbHkuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGYudHJpbSgpLnJlcGxhY2UoLygnfFwiKS9nLCAnJyk7IH0pO1xyXG5cdFx0dmFyIGZvbnQgPSBmaW5kRm9udChmb250UHJvdmlkZXIuZm9udHMsIGZvbnRzRmFtaWx5LCBzdmcuZm9udCB8fCAnUm9ib3RvJyk7XHJcblxyXG5cdFx0dmFyIGZvbnRGaWxlID0gZm9udFByb3ZpZGVyLmdldEZvbnRGaWxlKGZvbnQsIGJvbGQsIGl0YWxpYyk7XHJcblx0XHRpZiAoZm9udEZpbGUgPT09IG51bGwpIHtcclxuXHRcdFx0dmFyIHR5cGUgPSBmb250UHJvdmlkZXIuZ2V0Rm9udFR5cGUoYm9sZCwgaXRhbGljKTtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdGb250IFxcJycgKyBmb250ICsgJ1xcJyBpbiBzdHlsZSBcXCcnICsgdHlwZSArICdcXCcgaXMgbm90IGRlZmluZWQgaW4gdGhlIGZvbnQgc2VjdGlvbiBvZiB0aGUgZG9jdW1lbnQgZGVmaW5pdGlvbi4nKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZm9udEZpbGU7XHJcblx0fTtcclxuXHJcblx0U1ZHdG9QREYocGRmS2l0RG9jLCBzdmcuc3ZnLCBzdmcueCwgc3ZnLnksIG9wdGlvbnMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBiZWdpbkNsaXAocmVjdCwgcGRmS2l0RG9jKSB7XHJcblx0cGRmS2l0RG9jLnNhdmUoKTtcclxuXHRwZGZLaXREb2MuYWRkQ29udGVudCgnJyArIHJlY3QueCArICcgJyArIHJlY3QueSArICcgJyArIHJlY3Qud2lkdGggKyAnICcgKyByZWN0LmhlaWdodCArICcgcmUnKTtcclxuXHRwZGZLaXREb2MuY2xpcCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRDbGlwKHBkZktpdERvYykge1xyXG5cdHBkZktpdERvYy5yZXN0b3JlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVBhdHRlcm5zKHBhdHRlcm5EZWZpbml0aW9ucywgcGRmS2l0RG9jKSB7XHJcblx0dmFyIHBhdHRlcm5zID0ge307XHJcblx0T2JqZWN0LmtleXMocGF0dGVybkRlZmluaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XHJcblx0XHR2YXIgcGF0dGVybiA9IHBhdHRlcm5EZWZpbml0aW9uc1twXTtcclxuXHRcdHBhdHRlcm5zW3BdID0gcGRmS2l0RG9jLnBhdHRlcm4ocGF0dGVybi5ib3VuZGluZ0JveCwgcGF0dGVybi54U3RlcCwgcGF0dGVybi55U3RlcCwgcGF0dGVybi5wYXR0ZXJuLCBwYXR0ZXJuLmNvbG9yZWQpO1xyXG5cdH0pO1xyXG5cdHJldHVybiBwYXR0ZXJucztcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQZGZQcmludGVyO1xyXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE0NTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKmVzbGludCBuby11bnVzZWQtdmFyczogW1wiZXJyb3JcIiwge1wiYXJnc1wiOiBcIm5vbmVcIn1dKi9cclxuLyplc2xpbnQgbm8tcmVkZWNsYXJlOiBcIm9mZlwiKi9cclxuXHJcblxyXG4vKiBxci5qcyAtLSBRUiBjb2RlIGdlbmVyYXRvciBpbiBKYXZhc2NyaXB0IChyZXZpc2lvbiAyMDExLTAxLTE5KVxyXG4gKiBXcml0dGVuIGJ5IEthbmcgU2Vvbmdob29uIDxwdWJsaWMrcXJqc0BtZWFyaWUub3JnPi5cclxuICpcclxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbjsgaWYgeW91ciBqdXJpc2RpY3Rpb24gZG9lcyBub3RcclxuICogcmVjb2duaXplIHRoZSBwdWJsaWMgZG9tYWluIHRoZSB0ZXJtcyBvZiBDcmVhdGl2ZSBDb21tb25zIENDMCBsaWNlbnNlXHJcbiAqIGFwcGx5LiBJbiB0aGUgb3RoZXIgd29yZHMsIHlvdSBjYW4gYWx3YXlzIGRvIHdoYXQgeW91IHdhbnQuXHJcbiAqL1xyXG5cclxuXHJcbi8vIHBlci12ZXJzaW9uIGluZm9ybWF0aW9uIChjZi4gSklTIFggMDUxMDoyMDA0IHBwLiAzMC0tMzYsIDcxKVxyXG4vL1xyXG4vLyBbMF06IHRoZSBkZWdyZWUgb2YgZ2VuZXJhdG9yIHBvbHlub21pYWwgYnkgRUNDIGxldmVsc1xyXG4vLyBbMV06ICMgb2YgY29kZSBibG9ja3MgYnkgRUNDIGxldmVsc1xyXG4vLyBbMl06IGxlZnQtdG9wIHBvc2l0aW9ucyBvZiBhbGlnbm1lbnQgcGF0dGVybnNcclxuLy9cclxuLy8gdGhlIG51bWJlciBpbiB0aGlzIHRhYmxlIChpbiBwYXJ0aWN1bGFyLCBbMF0pIGRvZXMgbm90IGV4YWN0bHkgbWF0Y2ggd2l0aFxyXG4vLyB0aGUgbnVtYmVycyBpbiB0aGUgc3BlY2ZpY2lhdGlvbi4gc2VlIGF1Z3VtZW50ZWNjcyBiZWxvdyBmb3IgdGhlIHJlYXNvbi5cclxudmFyIFZFUlNJT05TID0gW1xyXG5cdG51bGwsXHJcblx0W1sxMCwgNywgMTcsIDEzXSwgWzEsIDEsIDEsIDFdLCBbXV0sXHJcblx0W1sxNiwgMTAsIDI4LCAyMl0sIFsxLCAxLCAxLCAxXSwgWzQsIDE2XV0sXHJcblx0W1syNiwgMTUsIDIyLCAxOF0sIFsxLCAxLCAyLCAyXSwgWzQsIDIwXV0sXHJcblx0W1sxOCwgMjAsIDE2LCAyNl0sIFsyLCAxLCA0LCAyXSwgWzQsIDI0XV0sXHJcblx0W1syNCwgMjYsIDIyLCAxOF0sIFsyLCAxLCA0LCA0XSwgWzQsIDI4XV0sXHJcblx0W1sxNiwgMTgsIDI4LCAyNF0sIFs0LCAyLCA0LCA0XSwgWzQsIDMyXV0sXHJcblx0W1sxOCwgMjAsIDI2LCAxOF0sIFs0LCAyLCA1LCA2XSwgWzQsIDIwLCAzNl1dLFxyXG5cdFtbMjIsIDI0LCAyNiwgMjJdLCBbNCwgMiwgNiwgNl0sIFs0LCAyMiwgNDBdXSxcclxuXHRbWzIyLCAzMCwgMjQsIDIwXSwgWzUsIDIsIDgsIDhdLCBbNCwgMjQsIDQ0XV0sXHJcblx0W1syNiwgMTgsIDI4LCAyNF0sIFs1LCA0LCA4LCA4XSwgWzQsIDI2LCA0OF1dLFxyXG5cdFtbMzAsIDIwLCAyNCwgMjhdLCBbNSwgNCwgMTEsIDhdLCBbNCwgMjgsIDUyXV0sXHJcblx0W1syMiwgMjQsIDI4LCAyNl0sIFs4LCA0LCAxMSwgMTBdLCBbNCwgMzAsIDU2XV0sXHJcblx0W1syMiwgMjYsIDIyLCAyNF0sIFs5LCA0LCAxNiwgMTJdLCBbNCwgMzIsIDYwXV0sXHJcblx0W1syNCwgMzAsIDI0LCAyMF0sIFs5LCA0LCAxNiwgMTZdLCBbNCwgMjQsIDQ0LCA2NF1dLFxyXG5cdFtbMjQsIDIyLCAyNCwgMzBdLCBbMTAsIDYsIDE4LCAxMl0sIFs0LCAyNCwgNDYsIDY4XV0sXHJcblx0W1syOCwgMjQsIDMwLCAyNF0sIFsxMCwgNiwgMTYsIDE3XSwgWzQsIDI0LCA0OCwgNzJdXSxcclxuXHRbWzI4LCAyOCwgMjgsIDI4XSwgWzExLCA2LCAxOSwgMTZdLCBbNCwgMjgsIDUyLCA3Nl1dLFxyXG5cdFtbMjYsIDMwLCAyOCwgMjhdLCBbMTMsIDYsIDIxLCAxOF0sIFs0LCAyOCwgNTQsIDgwXV0sXHJcblx0W1syNiwgMjgsIDI2LCAyNl0sIFsxNCwgNywgMjUsIDIxXSwgWzQsIDI4LCA1NiwgODRdXSxcclxuXHRbWzI2LCAyOCwgMjgsIDMwXSwgWzE2LCA4LCAyNSwgMjBdLCBbNCwgMzIsIDYwLCA4OF1dLFxyXG5cdFtbMjYsIDI4LCAzMCwgMjhdLCBbMTcsIDgsIDI1LCAyM10sIFs0LCAyNiwgNDgsIDcwLCA5Ml1dLFxyXG5cdFtbMjgsIDI4LCAyNCwgMzBdLCBbMTcsIDksIDM0LCAyM10sIFs0LCAyNCwgNDgsIDcyLCA5Nl1dLFxyXG5cdFtbMjgsIDMwLCAzMCwgMzBdLCBbMTgsIDksIDMwLCAyNV0sIFs0LCAyOCwgNTIsIDc2LCAxMDBdXSxcclxuXHRbWzI4LCAzMCwgMzAsIDMwXSwgWzIwLCAxMCwgMzIsIDI3XSwgWzQsIDI2LCA1MiwgNzgsIDEwNF1dLFxyXG5cdFtbMjgsIDI2LCAzMCwgMzBdLCBbMjEsIDEyLCAzNSwgMjldLCBbNCwgMzAsIDU2LCA4MiwgMTA4XV0sXHJcblx0W1syOCwgMjgsIDMwLCAyOF0sIFsyMywgMTIsIDM3LCAzNF0sIFs0LCAyOCwgNTYsIDg0LCAxMTJdXSxcclxuXHRbWzI4LCAzMCwgMzAsIDMwXSwgWzI1LCAxMiwgNDAsIDM0XSwgWzQsIDMyLCA2MCwgODgsIDExNl1dLFxyXG5cdFtbMjgsIDMwLCAzMCwgMzBdLCBbMjYsIDEzLCA0MiwgMzVdLCBbNCwgMjQsIDQ4LCA3MiwgOTYsIDEyMF1dLFxyXG5cdFtbMjgsIDMwLCAzMCwgMzBdLCBbMjgsIDE0LCA0NSwgMzhdLCBbNCwgMjgsIDUyLCA3NiwgMTAwLCAxMjRdXSxcclxuXHRbWzI4LCAzMCwgMzAsIDMwXSwgWzI5LCAxNSwgNDgsIDQwXSwgWzQsIDI0LCA1MCwgNzYsIDEwMiwgMTI4XV0sXHJcblx0W1syOCwgMzAsIDMwLCAzMF0sIFszMSwgMTYsIDUxLCA0M10sIFs0LCAyOCwgNTQsIDgwLCAxMDYsIDEzMl1dLFxyXG5cdFtbMjgsIDMwLCAzMCwgMzBdLCBbMzMsIDE3LCA1NCwgNDVdLCBbNCwgMzIsIDU4LCA4NCwgMTEwLCAxMzZdXSxcclxuXHRbWzI4LCAzMCwgMzAsIDMwXSwgWzM1LCAxOCwgNTcsIDQ4XSwgWzQsIDI4LCA1NiwgODQsIDExMiwgMTQwXV0sXHJcblx0W1syOCwgMzAsIDMwLCAzMF0sIFszNywgMTksIDYwLCA1MV0sIFs0LCAzMiwgNjAsIDg4LCAxMTYsIDE0NF1dLFxyXG5cdFtbMjgsIDMwLCAzMCwgMzBdLCBbMzgsIDE5LCA2MywgNTNdLCBbNCwgMjgsIDUyLCA3NiwgMTAwLCAxMjQsIDE0OF1dLFxyXG5cdFtbMjgsIDMwLCAzMCwgMzBdLCBbNDAsIDIwLCA2NiwgNTZdLCBbNCwgMjIsIDQ4LCA3NCwgMTAwLCAxMjYsIDE1Ml1dLFxyXG5cdFtbMjgsIDMwLCAzMCwgMzBdLCBbNDMsIDIxLCA3MCwgNTldLCBbNCwgMjYsIDUyLCA3OCwgMTA0LCAxMzAsIDE1Nl1dLFxyXG5cdFtbMjgsIDMwLCAzMCwgMzBdLCBbNDUsIDIyLCA3NCwgNjJdLCBbNCwgMzAsIDU2LCA4MiwgMTA4LCAxMzQsIDE2MF1dLFxyXG5cdFtbMjgsIDMwLCAzMCwgMzBdLCBbNDcsIDI0LCA3NywgNjVdLCBbNCwgMjQsIDUyLCA4MCwgMTA4LCAxMzYsIDE2NF1dLFxyXG5cdFtbMjgsIDMwLCAzMCwgMzBdLCBbNDksIDI1LCA4MSwgNjhdLCBbNCwgMjgsIDU2LCA4NCwgMTEyLCAxNDAsIDE2OF1dXTtcclxuXHJcbi8vIG1vZGUgY29uc3RhbnRzIChjZi4gVGFibGUgMiBpbiBKSVMgWCAwNTEwOjIwMDQgcC4gMTYpXHJcbnZhciBNT0RFX1RFUk1JTkFUT1IgPSAwO1xyXG52YXIgTU9ERV9OVU1FUklDID0gMSwgTU9ERV9BTFBIQU5VTUVSSUMgPSAyLCBNT0RFX09DVEVUID0gNCwgTU9ERV9LQU5KSSA9IDg7XHJcblxyXG4vLyB2YWxpZGF0aW9uIHJlZ2V4cHNcclxudmFyIE5VTUVSSUNfUkVHRVhQID0gL15cXGQqJC87XHJcbnZhciBBTFBIQU5VTUVSSUNfUkVHRVhQID0gL15bQS1aYS16MC05ICQlKitcXC0uLzpdKiQvO1xyXG52YXIgQUxQSEFOVU1FUklDX09VVF9SRUdFWFAgPSAvXltBLVowLTkgJCUqK1xcLS4vOl0qJC87XHJcblxyXG4vLyBFQ0MgbGV2ZWxzIChjZi4gVGFibGUgMjIgaW4gSklTIFggMDUxMDoyMDA0IHAuIDQ1KVxyXG52YXIgRUNDTEVWRUxfTCA9IDEsIEVDQ0xFVkVMX00gPSAwLCBFQ0NMRVZFTF9RID0gMywgRUNDTEVWRUxfSCA9IDI7XHJcblxyXG4vLyBHRigyXjgpLXRvLWludGVnZXIgbWFwcGluZyB3aXRoIGEgcmVkdWNpbmcgcG9seW5vbWlhbCB4XjgreF40K3heMyt4XjIrMVxyXG4vLyBpbnZhcmlhbnQ6IEdGMjU2X01BUFtHRjI1Nl9JTlZNQVBbaV1dID09IGkgZm9yIGFsbCBpIGluIFsxLDI1NilcclxudmFyIEdGMjU2X01BUCA9IFtdLCBHRjI1Nl9JTlZNQVAgPSBbLTFdO1xyXG5mb3IgKHZhciBpID0gMCwgdiA9IDE7IGkgPCAyNTU7ICsraSkge1xyXG5cdEdGMjU2X01BUC5wdXNoKHYpO1xyXG5cdEdGMjU2X0lOVk1BUFt2XSA9IGk7XHJcblx0diA9ICh2ICogMikgXiAodiA+PSAxMjggPyAweDExZCA6IDApO1xyXG59XHJcblxyXG4vLyBnZW5lcmF0b3IgcG9seW5vbWlhbHMgdXAgdG8gZGVncmVlIDMwXHJcbi8vIChzaG91bGQgbWF0Y2ggd2l0aCBwb2x5bm9taWFscyBpbiBKSVMgWCAwNTEwOjIwMDQgQXBwZW5kaXggQSlcclxuLy9cclxuLy8gZ2VuZXJhdG9yIHBvbHlub21pYWwgb2YgZGVncmVlIEsgaXMgcHJvZHVjdCBvZiAoeC1cXGFscGhhXjApLCAoeC1cXGFscGhhXjEpLFxyXG4vLyAuLi4sICh4LVxcYWxwaGFeKEstMSkpLiBieSBjb252ZW50aW9uLCB3ZSBvbWl0IHRoZSBLLXRoIGNvZWZmaWNpZW50IChhbHdheXMgMSlcclxuLy8gZnJvbSB0aGUgcmVzdWx0OyBhbHNvIG90aGVyIGNvZWZmaWNpZW50cyBhcmUgd3JpdHRlbiBpbiB0ZXJtcyBvZiB0aGUgZXhwb25lbnRcclxuLy8gdG8gXFxhbHBoYSB0byBhdm9pZCB0aGUgcmVkdW5kYW50IGNhbGN1bGF0aW9uLiAoc2VlIGFsc28gY2FsY3VsYXRlZWNjIGJlbG93LilcclxudmFyIEdGMjU2X0dFTlBPTFkgPSBbW11dO1xyXG5mb3IgKHZhciBpID0gMDsgaSA8IDMwOyArK2kpIHtcclxuXHR2YXIgcHJldnBvbHkgPSBHRjI1Nl9HRU5QT0xZW2ldLCBwb2x5ID0gW107XHJcblx0Zm9yICh2YXIgaiA9IDA7IGogPD0gaTsgKytqKSB7XHJcblx0XHR2YXIgYSA9IChqIDwgaSA/IEdGMjU2X01BUFtwcmV2cG9seVtqXV0gOiAwKTtcclxuXHRcdHZhciBiID0gR0YyNTZfTUFQWyhpICsgKHByZXZwb2x5W2ogLSAxXSB8fCAwKSkgJSAyNTVdO1xyXG5cdFx0cG9seS5wdXNoKEdGMjU2X0lOVk1BUFthIF4gYl0pO1xyXG5cdH1cclxuXHRHRjI1Nl9HRU5QT0xZLnB1c2gocG9seSk7XHJcbn1cclxuXHJcbi8vIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXIgbWFwcGluZyAoY2YuIFRhYmxlIDUgaW4gSklTIFggMDUxMDoyMDA0IHAuIDE5KVxyXG52YXIgQUxQSEFOVU1FUklDX01BUCA9IHt9O1xyXG5mb3IgKHZhciBpID0gMDsgaSA8IDQ1OyArK2kpIHtcclxuXHRBTFBIQU5VTUVSSUNfTUFQWycwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogJCUqKy0uLzonLmNoYXJBdChpKV0gPSBpO1xyXG59XHJcblxyXG4vLyBtYXNrIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiByb3cgIyBhbmQgY29sdW1uICNcclxuLy8gKGNmLiBUYWJsZSAyMCBpbiBKSVMgWCAwNTEwOjIwMDQgcC4gNDIpXHJcbi8qanNoaW50IHVudXNlZDogZmFsc2UgKi9cclxudmFyIE1BU0tGVU5DUyA9IFtcclxuXHRmdW5jdGlvbiAoaSwgaikge1xyXG5cdFx0cmV0dXJuIChpICsgaikgJSAyID09PSAwO1xyXG5cdH0sXHJcblx0ZnVuY3Rpb24gKGksIGopIHtcclxuXHRcdHJldHVybiBpICUgMiA9PT0gMDtcclxuXHR9LFxyXG5cdGZ1bmN0aW9uIChpLCBqKSB7XHJcblx0XHRyZXR1cm4gaiAlIDMgPT09IDA7XHJcblx0fSxcclxuXHRmdW5jdGlvbiAoaSwgaikge1xyXG5cdFx0cmV0dXJuIChpICsgaikgJSAzID09PSAwO1xyXG5cdH0sXHJcblx0ZnVuY3Rpb24gKGksIGopIHtcclxuXHRcdHJldHVybiAoKChpIC8gMikgfCAwKSArICgoaiAvIDMpIHwgMCkpICUgMiA9PT0gMDtcclxuXHR9LFxyXG5cdGZ1bmN0aW9uIChpLCBqKSB7XHJcblx0XHRyZXR1cm4gKGkgKiBqKSAlIDIgKyAoaSAqIGopICUgMyA9PT0gMDtcclxuXHR9LFxyXG5cdGZ1bmN0aW9uIChpLCBqKSB7XHJcblx0XHRyZXR1cm4gKChpICogaikgJSAyICsgKGkgKiBqKSAlIDMpICUgMiA9PT0gMDtcclxuXHR9LFxyXG5cdGZ1bmN0aW9uIChpLCBqKSB7XHJcblx0XHRyZXR1cm4gKChpICsgaikgJSAyICsgKGkgKiBqKSAlIDMpICUgMiA9PT0gMDtcclxuXHR9XTtcclxuXHJcbi8vIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGhhcyB0byBiZSBlbWJlZGVkLlxyXG52YXIgbmVlZHN2ZXJpbmZvID0gZnVuY3Rpb24gKHZlcikge1xyXG5cdHJldHVybiB2ZXIgPiA2O1xyXG59O1xyXG5cclxuLy8gcmV0dXJucyB0aGUgc2l6ZSBvZiBlbnRpcmUgUVIgY29kZSBmb3IgZ2l2ZW4gdmVyc2lvbi5cclxudmFyIGdldHNpemVieXZlciA9IGZ1bmN0aW9uICh2ZXIpIHtcclxuXHRyZXR1cm4gNCAqIHZlciArIDE3O1xyXG59O1xyXG5cclxuLy8gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgYXZhaWxhYmxlIGZvciBjb2RlIHdvcmRzIGluIHRoaXMgdmVyc2lvbi5cclxudmFyIG5mdWxsYml0cyA9IGZ1bmN0aW9uICh2ZXIpIHtcclxuXHQvKlxyXG5cdCAqIHw8LS0tLS0tLS0tLS0tLS0tIG4gLS0tLS0tLS0tLS0tLS0tPnxcclxuXHQgKiB8ICAgICAgICB8PC0tLS0tIG4tMTcgLS0tLT58ICAgICAgICB8XHJcblx0ICogKy0tLS0tLS0rICAgICAgICAgICAgICAgIC8vLystLS0tLS0tKyAtLS0tXHJcblx0ICogfCAgICAgICB8ICAgICAgICAgICAgICAgIC8vL3wgICAgICAgfCAgICBeXHJcblx0ICogfCAgOXg5ICB8ICAgICAgIEBAQEBAICAgIC8vL3wgIDl4OCAgfCAgICB8XHJcblx0ICogfCAgICAgICB8ICMgIyAjIEA1eDVAICMgIyAjIHwgICAgICAgfCAgICB8XHJcblx0ICogKy0tLS0tLS0rICAgICAgIEBAQEBAICAgICAgICstLS0tLS0tKyAgICB8XHJcblx0ICogICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS18XHJcblx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiB8XHJcblx0ICogICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG5cdCAqICAgICBAQEBAQCAgICAgICBAQEBAQCAgICAgICBAQEBAQCAgICAgIHwgblxyXG5cdCAqICAgICBANXg1QCAgICAgICBANXg1QCAgICAgICBANXg1QCAgIG4tMTdcclxuXHQgKiAgICAgQEBAQEAgICAgICAgQEBAQEAgICAgICAgQEBAQEAgICAgICB8IHxcclxuXHQgKiAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHxcclxuXHQgKiAvLy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2IHxcclxuXHQgKiAvLy8vLy8jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLXxcclxuXHQgKiArLS0tLS0tLSsgICAgICAgQEBAQEAgICAgICAgQEBAQEAgICAgICAgIHxcclxuXHQgKiB8ICAgICAgIHwgICAgICAgQDV4NUAgICAgICAgQDV4NUAgICAgICAgIHxcclxuXHQgKiB8ICA4eDkgIHwgICAgICAgQEBAQEAgICAgICAgQEBAQEAgICAgICAgIHxcclxuXHQgKiB8ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcclxuXHQgKiArLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS1cclxuXHQgKlxyXG5cdCAqIHdoZW4gdGhlIGVudGlyZSBjb2RlIGhhcyBuXjIgbW9kdWxlcyBhbmQgdGhlcmUgYXJlIG1eMi0zIGFsaWdubWVudFxyXG5cdCAqIHBhdHRlcm5zLCB3ZSBoYXZlOlxyXG5cdCAqIC0gMjI1ICg9IDl4OSArIDl4OCArIDh4OSkgbW9kdWxlcyBmb3IgZmluZGVyIHBhdHRlcm5zIGFuZFxyXG5cdCAqICAgZm9ybWF0IGluZm9ybWF0aW9uO1xyXG5cdCAqIC0gMm4tMzQgKD0gMihuLTE3KSkgbW9kdWxlcyBmb3IgdGltaW5nIHBhdHRlcm5zO1xyXG5cdCAqIC0gMzYgKD0gM3g2ICsgNngzKSBtb2R1bGVzIGZvciB2ZXJzaW9uIGluZm9ybWF0aW9uLCBpZiBhbnk7XHJcblx0ICogLSAyNW1eMi03NSAoPSAobV4yLTMpKDV4NSkpIG1vZHVsZXMgZm9yIGFsaWdubWVudCBwYXR0ZXJuc1xyXG5cdCAqICAgaWYgYW55LCBidXQgMTBtLTIwICg9IDIobS0yKXg1KSBvZiB0aGVtIG92ZXJsYXBzIHdpdGhcclxuXHQgKiAgIHRpbWluZyBwYXR0ZXJucy5cclxuXHQgKi9cclxuXHR2YXIgdiA9IFZFUlNJT05TW3Zlcl07XHJcblx0dmFyIG5iaXRzID0gMTYgKiB2ZXIgKiB2ZXIgKyAxMjggKiB2ZXIgKyA2NDsgLy8gZmluZGVyLCB0aW1pbmcgYW5kIGZvcm1hdCBpbmZvLlxyXG5cdGlmIChuZWVkc3ZlcmluZm8odmVyKSlcclxuXHRcdG5iaXRzIC09IDM2OyAvLyB2ZXJzaW9uIGluZm9ybWF0aW9uXHJcblx0aWYgKHZbMl0ubGVuZ3RoKSB7IC8vIGFsaWdubWVudCBwYXR0ZXJuc1xyXG5cdFx0bmJpdHMgLT0gMjUgKiB2WzJdLmxlbmd0aCAqIHZbMl0ubGVuZ3RoIC0gMTAgKiB2WzJdLmxlbmd0aCAtIDU1O1xyXG5cdH1cclxuXHRyZXR1cm4gbmJpdHM7XHJcbn07XHJcblxyXG4vLyByZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBhdmFpbGFibGUgZm9yIGRhdGEgcG9ydGlvbnMgKGkuZS4gZXhjbHVkZXMgRUNDXHJcbi8vIGJpdHMgYnV0IGluY2x1ZGVzIG1vZGUgYW5kIGxlbmd0aCBiaXRzKSBpbiB0aGlzIHZlcnNpb24gYW5kIEVDQyBsZXZlbC5cclxudmFyIG5kYXRhYml0cyA9IGZ1bmN0aW9uICh2ZXIsIGVjY2xldmVsKSB7XHJcblx0dmFyIG5iaXRzID0gbmZ1bGxiaXRzKHZlcikgJiB+NzsgLy8gbm8gc3ViLW9jdGV0IGNvZGUgd29yZHNcclxuXHR2YXIgdiA9IFZFUlNJT05TW3Zlcl07XHJcblx0bmJpdHMgLT0gOCAqIHZbMF1bZWNjbGV2ZWxdICogdlsxXVtlY2NsZXZlbF07IC8vIGVjYyBiaXRzXHJcblx0cmV0dXJuIG5iaXRzO1xyXG59O1xyXG5cclxuLy8gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgcmVxdWlyZWQgZm9yIHRoZSBsZW5ndGggb2YgZGF0YS5cclxuLy8gKGNmLiBUYWJsZSAzIGluIEpJUyBYIDA1MTA6MjAwNCBwLiAxNilcclxudmFyIG5kYXRhbGVuYml0cyA9IGZ1bmN0aW9uICh2ZXIsIG1vZGUpIHtcclxuXHRzd2l0Y2ggKG1vZGUpIHtcclxuXHRcdGNhc2UgTU9ERV9OVU1FUklDOlxyXG5cdFx0XHRyZXR1cm4gKHZlciA8IDEwID8gMTAgOiB2ZXIgPCAyNyA/IDEyIDogMTQpO1xyXG5cdFx0Y2FzZSBNT0RFX0FMUEhBTlVNRVJJQzpcclxuXHRcdFx0cmV0dXJuICh2ZXIgPCAxMCA/IDkgOiB2ZXIgPCAyNyA/IDExIDogMTMpO1xyXG5cdFx0Y2FzZSBNT0RFX09DVEVUOlxyXG5cdFx0XHRyZXR1cm4gKHZlciA8IDEwID8gOCA6IDE2KTtcclxuXHRcdGNhc2UgTU9ERV9LQU5KSTpcclxuXHRcdFx0cmV0dXJuICh2ZXIgPCAxMCA/IDggOiB2ZXIgPCAyNyA/IDEwIDogMTIpO1xyXG5cdH1cclxufTtcclxuXHJcbi8vIHJldHVybnMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGRhdGEgcG9zc2libGUgaW4gZ2l2ZW4gY29uZmlndXJhdGlvbi5cclxudmFyIGdldG1heGRhdGFsZW4gPSBmdW5jdGlvbiAodmVyLCBtb2RlLCBlY2NsZXZlbCkge1xyXG5cdHZhciBuYml0cyA9IG5kYXRhYml0cyh2ZXIsIGVjY2xldmVsKSAtIDQgLSBuZGF0YWxlbmJpdHModmVyLCBtb2RlKTsgLy8gNCBmb3IgbW9kZSBiaXRzXHJcblx0c3dpdGNoIChtb2RlKSB7XHJcblx0XHRjYXNlIE1PREVfTlVNRVJJQzpcclxuXHRcdFx0cmV0dXJuICgobmJpdHMgLyAxMCkgfCAwKSAqIDMgKyAobmJpdHMgJSAxMCA8IDQgPyAwIDogbmJpdHMgJSAxMCA8IDcgPyAxIDogMik7XHJcblx0XHRjYXNlIE1PREVfQUxQSEFOVU1FUklDOlxyXG5cdFx0XHRyZXR1cm4gKChuYml0cyAvIDExKSB8IDApICogMiArIChuYml0cyAlIDExIDwgNiA/IDAgOiAxKTtcclxuXHRcdGNhc2UgTU9ERV9PQ1RFVDpcclxuXHRcdFx0cmV0dXJuIChuYml0cyAvIDgpIHwgMDtcclxuXHRcdGNhc2UgTU9ERV9LQU5KSTpcclxuXHRcdFx0cmV0dXJuIChuYml0cyAvIDEzKSB8IDA7XHJcblx0fVxyXG59O1xyXG5cclxuLy8gY2hlY2tzIGlmIHRoZSBnaXZlbiBkYXRhIGNhbiBiZSBlbmNvZGVkIGluIGdpdmVuIG1vZGUsIGFuZCByZXR1cm5zXHJcbi8vIHRoZSBjb252ZXJ0ZWQgZGF0YSBmb3IgdGhlIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBwb3NzaWJsZS4gb3RoZXJ3aXNlXHJcbi8vIHJldHVybnMgbnVsbC5cclxuLy9cclxuLy8gdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGUgbGVuZ3RoIG9mIGRhdGE7IGl0IGlzIGEgZHV0eSBvZlxyXG4vLyBlbmNvZGUgZnVuY3Rpb24gYmVsb3cgKGFzIGl0IGRlcGVuZHMgb24gdGhlIHZlcnNpb24gYW5kIEVDQyBsZXZlbCB0b28pLlxyXG52YXIgdmFsaWRhdGVkYXRhID0gZnVuY3Rpb24gKG1vZGUsIGRhdGEpIHtcclxuXHRzd2l0Y2ggKG1vZGUpIHtcclxuXHRcdGNhc2UgTU9ERV9OVU1FUklDOlxyXG5cdFx0XHRpZiAoIWRhdGEubWF0Y2goTlVNRVJJQ19SRUdFWFApKVxyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRyZXR1cm4gZGF0YTtcclxuXHJcblx0XHRjYXNlIE1PREVfQUxQSEFOVU1FUklDOlxyXG5cdFx0XHRpZiAoIWRhdGEubWF0Y2goQUxQSEFOVU1FUklDX1JFR0VYUCkpXHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdHJldHVybiBkYXRhLnRvVXBwZXJDYXNlKCk7XHJcblxyXG5cdFx0Y2FzZSBNT0RFX09DVEVUOlxyXG5cdFx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7IC8vIGVuY29kZSBhcyB1dGYtOCBzdHJpbmdcclxuXHRcdFx0XHR2YXIgbmV3ZGF0YSA9IFtdO1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkge1xyXG5cdFx0XHRcdFx0dmFyIGNoID0gZGF0YS5jaGFyQ29kZUF0KGkpO1xyXG5cdFx0XHRcdFx0aWYgKGNoIDwgMHg4MCkge1xyXG5cdFx0XHRcdFx0XHRuZXdkYXRhLnB1c2goY2gpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChjaCA8IDB4ODAwKSB7XHJcblx0XHRcdFx0XHRcdG5ld2RhdGEucHVzaCgweGMwIHwgKGNoID4+IDYpLFxyXG5cdFx0XHRcdFx0XHRcdDB4ODAgfCAoY2ggJiAweDNmKSk7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGNoIDwgMHgxMDAwMCkge1xyXG5cdFx0XHRcdFx0XHRuZXdkYXRhLnB1c2goMHhlMCB8IChjaCA+PiAxMiksXHJcblx0XHRcdFx0XHRcdFx0MHg4MCB8ICgoY2ggPj4gNikgJiAweDNmKSxcclxuXHRcdFx0XHRcdFx0XHQweDgwIHwgKGNoICYgMHgzZikpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0bmV3ZGF0YS5wdXNoKDB4ZjAgfCAoY2ggPj4gMTgpLFxyXG5cdFx0XHRcdFx0XHRcdDB4ODAgfCAoKGNoID4+IDEyKSAmIDB4M2YpLFxyXG5cdFx0XHRcdFx0XHRcdDB4ODAgfCAoKGNoID4+IDYpICYgMHgzZiksXHJcblx0XHRcdFx0XHRcdFx0MHg4MCB8IChjaCAmIDB4M2YpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIG5ld2RhdGE7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG4vLyByZXR1cm5zIHRoZSBjb2RlIHdvcmRzIChzYW5zIEVDQyBiaXRzKSBmb3IgZ2l2ZW4gZGF0YSBhbmQgY29uZmlndXJhdGlvbnMuXHJcbi8vIHJlcXVpcmVzIGRhdGEgdG8gYmUgcHJlcHJvY2Vzc2VkIGJ5IHZhbGlkYXRlZGF0YS4gbm8gbGVuZ3RoIGNoZWNrIGlzXHJcbi8vIHBlcmZvcm1lZCwgYW5kIGV2ZXJ5dGhpbmcgaGFzIHRvIGJlIGNoZWNrZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cclxudmFyIGVuY29kZSA9IGZ1bmN0aW9uICh2ZXIsIG1vZGUsIGRhdGEsIG1heGJ1Zmxlbikge1xyXG5cdHZhciBidWYgPSBbXTtcclxuXHR2YXIgYml0cyA9IDAsIHJlbWFpbmluZyA9IDg7XHJcblx0dmFyIGRhdGFsZW4gPSBkYXRhLmxlbmd0aDtcclxuXHJcblx0Ly8gdGhpcyBmdW5jdGlvbiBpcyBpbnRlbnRpb25hbGx5IG5vLW9wIHdoZW4gbj0wLlxyXG5cdHZhciBwYWNrID0gZnVuY3Rpb24gKHgsIG4pIHtcclxuXHRcdGlmIChuID49IHJlbWFpbmluZykge1xyXG5cdFx0XHRidWYucHVzaChiaXRzIHwgKHggPj4gKG4gLT0gcmVtYWluaW5nKSkpO1xyXG5cdFx0XHR3aGlsZSAobiA+PSA4KVxyXG5cdFx0XHRcdGJ1Zi5wdXNoKCh4ID4+IChuIC09IDgpKSAmIDI1NSk7XHJcblx0XHRcdGJpdHMgPSAwO1xyXG5cdFx0XHRyZW1haW5pbmcgPSA4O1xyXG5cdFx0fVxyXG5cdFx0aWYgKG4gPiAwKVxyXG5cdFx0XHRiaXRzIHw9ICh4ICYgKCgxIDw8IG4pIC0gMSkpIDw8IChyZW1haW5pbmcgLT0gbik7XHJcblx0fTtcclxuXHJcblx0dmFyIG5sZW5iaXRzID0gbmRhdGFsZW5iaXRzKHZlciwgbW9kZSk7XHJcblx0cGFjayhtb2RlLCA0KTtcclxuXHRwYWNrKGRhdGFsZW4sIG5sZW5iaXRzKTtcclxuXHJcblx0c3dpdGNoIChtb2RlKSB7XHJcblx0XHRjYXNlIE1PREVfTlVNRVJJQzpcclxuXHRcdFx0Zm9yICh2YXIgaSA9IDI7IGkgPCBkYXRhbGVuOyBpICs9IDMpIHtcclxuXHRcdFx0XHRwYWNrKHBhcnNlSW50KGRhdGEuc3Vic3RyaW5nKGkgLSAyLCBpICsgMSksIDEwKSwgMTApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHBhY2socGFyc2VJbnQoZGF0YS5zdWJzdHJpbmcoaSAtIDIpLCAxMCksIFswLCA0LCA3XVtkYXRhbGVuICUgM10pO1xyXG5cdFx0XHRicmVhaztcclxuXHJcblx0XHRjYXNlIE1PREVfQUxQSEFOVU1FUklDOlxyXG5cdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8IGRhdGFsZW47IGkgKz0gMikge1xyXG5cdFx0XHRcdHBhY2soQUxQSEFOVU1FUklDX01BUFtkYXRhLmNoYXJBdChpIC0gMSldICogNDUgK1xyXG5cdFx0XHRcdFx0QUxQSEFOVU1FUklDX01BUFtkYXRhLmNoYXJBdChpKV0sIDExKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZGF0YWxlbiAlIDIgPT0gMSkge1xyXG5cdFx0XHRcdHBhY2soQUxQSEFOVU1FUklDX01BUFtkYXRhLmNoYXJBdChpIC0gMSldLCA2KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRicmVhaztcclxuXHJcblx0XHRjYXNlIE1PREVfT0NURVQ6XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YWxlbjsgKytpKSB7XHJcblx0XHRcdFx0cGFjayhkYXRhW2ldLCA4KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRicmVhaztcclxuXHR9XHJcblxyXG5cdC8vIGZpbmFsIGJpdHMuIGl0IGlzIHBvc3NpYmxlIHRoYXQgYWRkaW5nIHRlcm1pbmF0b3IgY2F1c2VzIHRoZSBidWZmZXJcclxuXHQvLyB0byBvdmVyZmxvdywgYnV0IHRoZW4gdGhlIGJ1ZmZlciB0cnVuY2F0ZWQgdG8gdGhlIG1heGltdW0gc2l6ZSB3aWxsXHJcblx0Ly8gYmUgdmFsaWQgYXMgdGhlIHRydW5jYXRlZCB0ZXJtaW5hdG9yIG1vZGUgYml0cyBhbmQgcGFkZGluZyBpc1xyXG5cdC8vIGlkZW50aWNhbCBpbiBhcHBlYXJhbmNlIChjZi4gSklTIFggMDUxMDoyMDA0IHNlYyA4LjQuOCkuXHJcblx0cGFjayhNT0RFX1RFUk1JTkFUT1IsIDQpO1xyXG5cdGlmIChyZW1haW5pbmcgPCA4KVxyXG5cdFx0YnVmLnB1c2goYml0cyk7XHJcblxyXG5cdC8vIHRoZSBwYWRkaW5nIHRvIGZpbGwgdXAgdGhlIHJlbWFpbmluZyBzcGFjZS4gd2Ugc2hvdWxkIG5vdCBhZGQgYW55XHJcblx0Ly8gd29yZHMgd2hlbiB0aGUgb3ZlcmZsb3cgYWxyZWFkeSBvY2N1cnJlZC5cclxuXHR3aGlsZSAoYnVmLmxlbmd0aCArIDEgPCBtYXhidWZsZW4pXHJcblx0XHRidWYucHVzaCgweGVjLCAweDExKTtcclxuXHRpZiAoYnVmLmxlbmd0aCA8IG1heGJ1ZmxlbilcclxuXHRcdGJ1Zi5wdXNoKDB4ZWMpO1xyXG5cdHJldHVybiBidWY7XHJcbn07XHJcblxyXG4vLyBjYWxjdWxhdGVzIEVDQyBjb2RlIHdvcmRzIGZvciBnaXZlbiBjb2RlIHdvcmRzIGFuZCBnZW5lcmF0b3IgcG9seW5vbWlhbC5cclxuLy9cclxuLy8gdGhpcyBpcyBxdWl0ZSBzaW1pbGFyIHRvIENSQyBjYWxjdWxhdGlvbiBhcyBib3RoIFJlZWQtU29sb21vbiBhbmQgQ1JDIHVzZVxyXG4vLyB0aGUgY2VydGFpbiBraW5kIG9mIGN5Y2xpYyBjb2Rlcywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgdGhlIGRpdmlzaW9uIG9mXHJcbi8vIHplcm8tYXVndW1lbnRlZCBwb2x5bm9taWFsIGJ5IHRoZSBnZW5lcmF0b3IgcG9seW5vbWlhbC4gdGhlIG9ubHkgZGlmZmVyZW5jZVxyXG4vLyBpcyB0aGF0IFJlZWQtU29sb21vbiB1c2VzIEdGKDJeOCksIGluc3RlYWQgb2YgQ1JDJ3MgR0YoMiksIGFuZCBSZWVkLVNvbG9tb25cclxuLy8gdXNlcyB0aGUgZGlmZmVyZW50IGdlbmVyYXRvciBwb2x5bm9taWFsIHRoYW4gQ1JDJ3MuXHJcbnZhciBjYWxjdWxhdGVlY2MgPSBmdW5jdGlvbiAocG9seSwgZ2VucG9seSkge1xyXG5cdHZhciBtb2R1bHVzID0gcG9seS5zbGljZSgwKTtcclxuXHR2YXIgcG9seWxlbiA9IHBvbHkubGVuZ3RoLCBnZW5wb2x5bGVuID0gZ2VucG9seS5sZW5ndGg7XHJcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBnZW5wb2x5bGVuOyArK2kpXHJcblx0XHRtb2R1bHVzLnB1c2goMCk7XHJcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwb2x5bGVuOyApIHtcclxuXHRcdHZhciBxdW90aWVudCA9IEdGMjU2X0lOVk1BUFttb2R1bHVzW2krK11dO1xyXG5cdFx0aWYgKHF1b3RpZW50ID49IDApIHtcclxuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBnZW5wb2x5bGVuOyArK2opIHtcclxuXHRcdFx0XHRtb2R1bHVzW2kgKyBqXSBePSBHRjI1Nl9NQVBbKHF1b3RpZW50ICsgZ2VucG9seVtqXSkgJSAyNTVdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBtb2R1bHVzLnNsaWNlKHBvbHlsZW4pO1xyXG59O1xyXG5cclxuLy8gYXVndW1lbnRzIEVDQyBjb2RlIHdvcmRzIHRvIGdpdmVuIGNvZGUgd29yZHMuIHRoZSByZXN1bHRpbmcgd29yZHMgYXJlXHJcbi8vIHJlYWR5IHRvIGJlIGVuY29kZWQgaW4gdGhlIG1hdHJpeC5cclxuLy9cclxuLy8gdGhlIG11Y2ggb2YgYWN0dWFsIGF1Z3VtZW50aW5nIHByb2NlZHVyZSBmb2xsb3dzIEpJUyBYIDA1MTA6MjAwNCBzZWMgOC43LlxyXG4vLyB0aGUgY29kZSBpcyBzaW1wbGlmaWVkIHVzaW5nIHRoZSBmYWN0IHRoYXQgdGhlIHNpemUgb2YgZWFjaCBjb2RlICYgRUNDXHJcbi8vIGJsb2NrcyBpcyBhbG1vc3Qgc2FtZTsgZm9yIGV4YW1wbGUsIHdoZW4gd2UgaGF2ZSA0IGJsb2NrcyBhbmQgNDYgZGF0YSB3b3Jkc1xyXG4vLyB0aGUgbnVtYmVyIG9mIGNvZGUgd29yZHMgaW4gdGhvc2UgYmxvY2tzIGFyZSAxMSwgMTEsIDEyLCAxMiByZXNwZWN0aXZlbHkuXHJcbnZhciBhdWd1bWVudGVjY3MgPSBmdW5jdGlvbiAocG9seSwgbmJsb2NrcywgZ2VucG9seSkge1xyXG5cdHZhciBzdWJzaXplcyA9IFtdO1xyXG5cdHZhciBzdWJzaXplID0gKHBvbHkubGVuZ3RoIC8gbmJsb2NrcykgfCAwLCBzdWJzaXplMCA9IDA7XHJcblx0dmFyIHBpdm90ID0gbmJsb2NrcyAtIHBvbHkubGVuZ3RoICUgbmJsb2NrcztcclxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHBpdm90OyArK2kpIHtcclxuXHRcdHN1YnNpemVzLnB1c2goc3Vic2l6ZTApO1xyXG5cdFx0c3Vic2l6ZTAgKz0gc3Vic2l6ZTtcclxuXHR9XHJcblx0Zm9yICh2YXIgaSA9IHBpdm90OyBpIDwgbmJsb2NrczsgKytpKSB7XHJcblx0XHRzdWJzaXplcy5wdXNoKHN1YnNpemUwKTtcclxuXHRcdHN1YnNpemUwICs9IHN1YnNpemUgKyAxO1xyXG5cdH1cclxuXHRzdWJzaXplcy5wdXNoKHN1YnNpemUwKTtcclxuXHJcblx0dmFyIGVjY3MgPSBbXTtcclxuXHRmb3IgKHZhciBpID0gMDsgaSA8IG5ibG9ja3M7ICsraSkge1xyXG5cdFx0ZWNjcy5wdXNoKGNhbGN1bGF0ZWVjYyhwb2x5LnNsaWNlKHN1YnNpemVzW2ldLCBzdWJzaXplc1tpICsgMV0pLCBnZW5wb2x5KSk7XHJcblx0fVxyXG5cclxuXHR2YXIgcmVzdWx0ID0gW107XHJcblx0dmFyIG5pdGVtc3BlcmJsb2NrID0gKHBvbHkubGVuZ3RoIC8gbmJsb2NrcykgfCAwO1xyXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbml0ZW1zcGVyYmxvY2s7ICsraSkge1xyXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBuYmxvY2tzOyArK2opIHtcclxuXHRcdFx0cmVzdWx0LnB1c2gocG9seVtzdWJzaXplc1tqXSArIGldKTtcclxuXHRcdH1cclxuXHR9XHJcblx0Zm9yICh2YXIgaiA9IHBpdm90OyBqIDwgbmJsb2NrczsgKytqKSB7XHJcblx0XHRyZXN1bHQucHVzaChwb2x5W3N1YnNpemVzW2ogKyAxXSAtIDFdKTtcclxuXHR9XHJcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBnZW5wb2x5Lmxlbmd0aDsgKytpKSB7XHJcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG5ibG9ja3M7ICsraikge1xyXG5cdFx0XHRyZXN1bHQucHVzaChlY2NzW2pdW2ldKTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIHJlc3VsdDtcclxufTtcclxuXHJcbi8vIGF1Z3VtZW50cyBCQ0gocCtxLHEpIGNvZGUgdG8gdGhlIHBvbHlub21pYWwgb3ZlciBHRigyKSwgZ2l2ZW4gdGhlIHByb3BlclxyXG4vLyBnZW5wb2x5LiB0aGUgYm90aCBpbnB1dCBhbmQgb3V0cHV0IGFyZSBpbiBiaW5hcnkgbnVtYmVycywgYW5kIHVubGlrZVxyXG4vLyBjYWxjdWxhdGVlY2MgZ2VucG9seSBzaG91bGQgaW5jbHVkZSB0aGUgMSBiaXQgZm9yIHRoZSBoaWdoZXN0IGRlZ3JlZS5cclxuLy9cclxuLy8gYWN0dWFsIHBvbHlub21pYWxzIHVzZWQgZm9yIHRoaXMgcHJvY2VkdXJlIGFyZSBhcyBmb2xsb3dzOlxyXG4vLyAtIHA9MTAsIHE9NSwgZ2VucG9seT14XjEwK3heOCt4XjUreF40K3heMit4KzEgKEpJUyBYIDA1MTA6MjAwNCBBcHBlbmRpeCBDKVxyXG4vLyAtIHA9MTgsIHE9NiwgZ2VucG9seT14XjEyK3heMTEreF4xMCt4XjkreF44K3heNSt4XjIrMSAoaWJpZC4gQXBwZW5kaXggRClcclxudmFyIGF1Z3VtZW50YmNoID0gZnVuY3Rpb24gKHBvbHksIHAsIGdlbnBvbHksIHEpIHtcclxuXHR2YXIgbW9kdWx1cyA9IHBvbHkgPDwgcTtcclxuXHRmb3IgKHZhciBpID0gcCAtIDE7IGkgPj0gMDsgLS1pKSB7XHJcblx0XHRpZiAoKG1vZHVsdXMgPj4gKHEgKyBpKSkgJiAxKVxyXG5cdFx0XHRtb2R1bHVzIF49IGdlbnBvbHkgPDwgaTtcclxuXHR9XHJcblx0cmV0dXJuIChwb2x5IDw8IHEpIHwgbW9kdWx1cztcclxufTtcclxuXHJcbi8vIGNyZWF0ZXMgdGhlIGJhc2UgbWF0cml4IGZvciBnaXZlbiB2ZXJzaW9uLiBpdCByZXR1cm5zIHR3byBtYXRyaWNlcywgb25lIG9mXHJcbi8vIHRoZW0gaXMgdGhlIGFjdHVhbCBvbmUgYW5kIHRoZSBhbm90aGVyIHJlcHJlc2VudHMgdGhlIFwicmVzZXJ2ZWRcIiBwb3J0aW9uXHJcbi8vIChlLmcuIGZpbmRlciBhbmQgdGltaW5nIHBhdHRlcm5zKSBvZiB0aGUgbWF0cml4LlxyXG4vL1xyXG4vLyBzb21lIGVudHJpZXMgaW4gdGhlIG1hdHJpeCBtYXkgYmUgdW5kZWZpbmVkLCByYXRoZXIgdGhhbiAwIG9yIDEuIHRoaXMgaXNcclxuLy8gaW50ZW50aW9uYWwgKG5vIGluaXRpYWxpemF0aW9uIG5lZWRlZCEpLCBhbmQgcHV0ZGF0YSBiZWxvdyB3aWxsIGZpbGxcclxuLy8gdGhlIHJlbWFpbmluZyBvbmVzLlxyXG52YXIgbWFrZWJhc2VtYXRyaXggPSBmdW5jdGlvbiAodmVyKSB7XHJcblx0dmFyIHYgPSBWRVJTSU9OU1t2ZXJdLCBuID0gZ2V0c2l6ZWJ5dmVyKHZlcik7XHJcblx0dmFyIG1hdHJpeCA9IFtdLCByZXNlcnZlZCA9IFtdO1xyXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7XHJcblx0XHRtYXRyaXgucHVzaChbXSk7XHJcblx0XHRyZXNlcnZlZC5wdXNoKFtdKTtcclxuXHR9XHJcblxyXG5cdHZhciBibGl0ID0gZnVuY3Rpb24gKHksIHgsIGgsIHcsIGJpdHMpIHtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaDsgKytpKSB7XHJcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgdzsgKytqKSB7XHJcblx0XHRcdFx0bWF0cml4W3kgKyBpXVt4ICsgal0gPSAoYml0c1tpXSA+PiBqKSAmIDE7XHJcblx0XHRcdFx0cmVzZXJ2ZWRbeSArIGldW3ggKyBqXSA9IDE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvLyBmaW5kZXIgcGF0dGVybnMgYW5kIGEgcGFydCBvZiB0aW1pbmcgcGF0dGVybnNcclxuXHQvLyB3aWxsIGFsc28gbWFyayB0aGUgZm9ybWF0IGluZm9ybWF0aW9uIGFyZWEgKG5vdCB5ZXQgd3JpdHRlbikgYXMgcmVzZXJ2ZWQuXHJcblx0YmxpdCgwLCAwLCA5LCA5LCBbMHg3ZiwgMHg0MSwgMHg1ZCwgMHg1ZCwgMHg1ZCwgMHg0MSwgMHgxN2YsIDB4MDAsIDB4NDBdKTtcclxuXHRibGl0KG4gLSA4LCAwLCA4LCA5LCBbMHgxMDAsIDB4N2YsIDB4NDEsIDB4NWQsIDB4NWQsIDB4NWQsIDB4NDEsIDB4N2ZdKTtcclxuXHRibGl0KDAsIG4gLSA4LCA5LCA4LCBbMHhmZSwgMHg4MiwgMHhiYSwgMHhiYSwgMHhiYSwgMHg4MiwgMHhmZSwgMHgwMCwgMHgwMF0pO1xyXG5cclxuXHQvLyB0aGUgcmVzdCBvZiB0aW1pbmcgcGF0dGVybnNcclxuXHRmb3IgKHZhciBpID0gOTsgaSA8IG4gLSA4OyArK2kpIHtcclxuXHRcdG1hdHJpeFs2XVtpXSA9IG1hdHJpeFtpXVs2XSA9IH5pICYgMTtcclxuXHRcdHJlc2VydmVkWzZdW2ldID0gcmVzZXJ2ZWRbaV1bNl0gPSAxO1xyXG5cdH1cclxuXHJcblx0Ly8gYWxpZ25tZW50IHBhdHRlcm5zXHJcblx0dmFyIGFsaWducyA9IHZbMl0sIG0gPSBhbGlnbnMubGVuZ3RoO1xyXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbTsgKytpKSB7XHJcblx0XHR2YXIgbWluaiA9IChpID09PSAwIHx8IGkgPT09IG0gLSAxID8gMSA6IDApLCBtYXhqID0gKGkgPT09IDAgPyBtIC0gMSA6IG0pO1xyXG5cdFx0Zm9yICh2YXIgaiA9IG1pbmo7IGogPCBtYXhqOyArK2opIHtcclxuXHRcdFx0YmxpdChhbGlnbnNbaV0sIGFsaWduc1tqXSwgNSwgNSwgWzB4MWYsIDB4MTEsIDB4MTUsIDB4MTEsIDB4MWZdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIHZlcnNpb24gaW5mb3JtYXRpb25cclxuXHRpZiAobmVlZHN2ZXJpbmZvKHZlcikpIHtcclxuXHRcdHZhciBjb2RlID0gYXVndW1lbnRiY2godmVyLCA2LCAweDFmMjUsIDEyKTtcclxuXHRcdHZhciBrID0gMDtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgNjsgKytpKSB7XHJcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgMzsgKytqKSB7XHJcblx0XHRcdFx0bWF0cml4W2ldWyhuIC0gMTEpICsgal0gPSBtYXRyaXhbKG4gLSAxMSkgKyBqXVtpXSA9IChjb2RlID4+IGsrKykgJiAxO1xyXG5cdFx0XHRcdHJlc2VydmVkW2ldWyhuIC0gMTEpICsgal0gPSByZXNlcnZlZFsobiAtIDExKSArIGpdW2ldID0gMTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHttYXRyaXg6IG1hdHJpeCwgcmVzZXJ2ZWQ6IHJlc2VydmVkfTtcclxufTtcclxuXHJcbi8vIGZpbGxzIHRoZSBkYXRhIHBvcnRpb24gKGkuZS4gdW5tYXJrZWQgaW4gcmVzZXJ2ZWQpIG9mIHRoZSBtYXRyaXggd2l0aCBnaXZlblxyXG4vLyBjb2RlIHdvcmRzLiB0aGUgc2l6ZSBvZiBjb2RlIHdvcmRzIHNob3VsZCBiZSBubyBtb3JlIHRoYW4gYXZhaWxhYmxlIGJpdHMsXHJcbi8vIGFuZCByZW1haW5pbmcgYml0cyBhcmUgcGFkZGVkIHRvIDAgKGNmLiBKSVMgWCAwNTEwOjIwMDQgc2VjIDguNy4zKS5cclxudmFyIHB1dGRhdGEgPSBmdW5jdGlvbiAobWF0cml4LCByZXNlcnZlZCwgYnVmKSB7XHJcblx0dmFyIG4gPSBtYXRyaXgubGVuZ3RoO1xyXG5cdHZhciBrID0gMCwgZGlyID0gLTE7XHJcblx0Zm9yICh2YXIgaSA9IG4gLSAxOyBpID49IDA7IGkgLT0gMikge1xyXG5cdFx0aWYgKGkgPT0gNilcclxuXHRcdFx0LS1pOyAvLyBza2lwIHRoZSBlbnRpcmUgdGltaW5nIHBhdHRlcm4gY29sdW1uXHJcblx0XHR2YXIgamogPSAoZGlyIDwgMCA/IG4gLSAxIDogMCk7XHJcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG47ICsraikge1xyXG5cdFx0XHRmb3IgKHZhciBpaSA9IGk7IGlpID4gaSAtIDI7IC0taWkpIHtcclxuXHRcdFx0XHRpZiAoIXJlc2VydmVkW2pqXVtpaV0pIHtcclxuXHRcdFx0XHRcdC8vIG1heSBvdmVyZmxvdywgYnV0ICh1bmRlZmluZWQgPj4geClcclxuXHRcdFx0XHRcdC8vIGlzIDAgc28gaXQgd2lsbCBhdXRvLXBhZCB0byB6ZXJvLlxyXG5cdFx0XHRcdFx0bWF0cml4W2pqXVtpaV0gPSAoYnVmW2sgPj4gM10gPj4gKH5rICYgNykpICYgMTtcclxuXHRcdFx0XHRcdCsraztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0amogKz0gZGlyO1xyXG5cdFx0fVxyXG5cdFx0ZGlyID0gLWRpcjtcclxuXHR9XHJcblx0cmV0dXJuIG1hdHJpeDtcclxufTtcclxuXHJcbi8vIFhPUi1tYXNrcyB0aGUgZGF0YSBwb3J0aW9uIG9mIHRoZSBtYXRyaXguIHJlcGVhdGluZyB0aGUgY2FsbCB3aXRoIHRoZSBzYW1lXHJcbi8vIGFyZ3VtZW50cyB3aWxsIHJldmVydCB0aGUgcHJpb3IgY2FsbCAoY29udmVuaWVudCBpbiB0aGUgbWF0cml4IGV2YWx1YXRpb24pLlxyXG52YXIgbWFza2RhdGEgPSBmdW5jdGlvbiAobWF0cml4LCByZXNlcnZlZCwgbWFzaykge1xyXG5cdHZhciBtYXNrZiA9IE1BU0tGVU5DU1ttYXNrXTtcclxuXHR2YXIgbiA9IG1hdHJpeC5sZW5ndGg7XHJcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHtcclxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgbjsgKytqKSB7XHJcblx0XHRcdGlmICghcmVzZXJ2ZWRbaV1bal0pXHJcblx0XHRcdFx0bWF0cml4W2ldW2pdIF49IG1hc2tmKGksIGopO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gbWF0cml4O1xyXG59O1xyXG5cclxuLy8gcHV0cyB0aGUgZm9ybWF0IGluZm9ybWF0aW9uLlxyXG52YXIgcHV0Zm9ybWF0aW5mbyA9IGZ1bmN0aW9uIChtYXRyaXgsIHJlc2VydmVkLCBlY2NsZXZlbCwgbWFzaykge1xyXG5cdHZhciBuID0gbWF0cml4Lmxlbmd0aDtcclxuXHR2YXIgY29kZSA9IGF1Z3VtZW50YmNoKChlY2NsZXZlbCA8PCAzKSB8IG1hc2ssIDUsIDB4NTM3LCAxMCkgXiAweDU0MTI7XHJcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxNTsgKytpKSB7XHJcblx0XHR2YXIgciA9IFswLCAxLCAyLCAzLCA0LCA1LCA3LCA4LCBuIC0gNywgbiAtIDYsIG4gLSA1LCBuIC0gNCwgbiAtIDMsIG4gLSAyLCBuIC0gMV1baV07XHJcblx0XHR2YXIgYyA9IFtuIC0gMSwgbiAtIDIsIG4gLSAzLCBuIC0gNCwgbiAtIDUsIG4gLSA2LCBuIC0gNywgbiAtIDgsIDcsIDUsIDQsIDMsIDIsIDEsIDBdW2ldO1xyXG5cdFx0bWF0cml4W3JdWzhdID0gbWF0cml4WzhdW2NdID0gKGNvZGUgPj4gaSkgJiAxO1xyXG5cdFx0Ly8gd2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRob3NlIGJpdHMgcmVzZXJ2ZWQ7IGFsd2F5cyBkb25lXHJcblx0XHQvLyBpbiBtYWtlYmFzZW1hdHJpeCBhYm92ZS5cclxuXHR9XHJcblx0cmV0dXJuIG1hdHJpeDtcclxufTtcclxuXHJcbi8vIGV2YWx1YXRlcyB0aGUgcmVzdWx0aW5nIG1hdHJpeCBhbmQgcmV0dXJucyB0aGUgc2NvcmUgKGxvd2VyIGlzIGJldHRlcikuXHJcbi8vIChjZi4gSklTIFggMDUxMDoyMDA0IHNlYyA4LjguMilcclxuLy9cclxuLy8gdGhlIGV2YWx1YXRpb24gcHJvY2VkdXJlIHRyaWVzIHRvIGF2b2lkIHRoZSBwcm9ibGVtYXRpYyBwYXR0ZXJucyBuYXR1cmFsbHlcclxuLy8gb2NjdXJpbmcgZnJvbSB0aGUgb3JpZ2luYWwgbWF0cml4LiBmb3IgZXhhbXBsZSwgaXQgcGVuYWx0aXplcyB0aGUgcGF0dGVybnNcclxuLy8gd2hpY2gganVzdCBsb29rIGxpa2UgdGhlIGZpbmRlciBwYXR0ZXJuIHdoaWNoIHdpbGwgY29uZnVzZSB0aGUgZGVjb2Rlci5cclxuLy8gd2UgY2hvb3NlIHRoZSBtYXNrIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGxvd2VzdCBzY29yZSBhbW9uZyA4IHBvc3NpYmxlIG9uZXMuXHJcbi8vXHJcbi8vIG5vdGU6IHp4aW5nIHNlZW1zIHRvIHVzZSB0aGUgc2FtZSBwcm9jZWR1cmUgYW5kIGluIG1hbnkgY2FzZXMgaXRzIGNob2ljZVxyXG4vLyBhZ3JlZXMgdG8gb3VycywgYnV0IHNvbWV0aW1lcyBpdCBkb2VzIG5vdC4gcHJhY3RpY2FsbHkgaXQgZG9lc24ndCBtYXR0ZXIuXHJcbnZhciBldmFsdWF0ZW1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuXHQvLyBOMSsoay01KSBwb2ludHMgZm9yIGVhY2ggY29uc2VjdXRpdmUgcm93IG9mIGsgc2FtZS1jb2xvcmVkIG1vZHVsZXMsXHJcblx0Ly8gd2hlcmUgayA+PSA1LiBubyBvdmVybGFwcGluZyByb3cgY291bnRzLlxyXG5cdHZhciBQRU5BTFRZX0NPTlNFQ1VUSVZFID0gMztcclxuXHQvLyBOMiBwb2ludHMgZm9yIGVhY2ggMngyIGJsb2NrIG9mIHNhbWUtY29sb3JlZCBtb2R1bGVzLlxyXG5cdC8vIG92ZXJsYXBwaW5nIGJsb2NrIGRvZXMgY291bnQuXHJcblx0dmFyIFBFTkFMVFlfVFdPQllUV08gPSAzO1xyXG5cdC8vIE4zIHBvaW50cyBmb3IgZWFjaCBwYXR0ZXJuIHdpdGggPjRXOjFCOjFXOjNCOjFXOjFCIG9yXHJcblx0Ly8gMUI6MVc6M0I6MVc6MUI6PjRXLCBvciB0aGVpciBtdWx0aXBsZXMgKGUuZy4gaGlnaGx5IHVubGlrZWx5LFxyXG5cdC8vIGJ1dCAxM1c6M0I6M1c6OUI6M1c6M0IgY291bnRzKS5cclxuXHR2YXIgUEVOQUxUWV9GSU5ERVJMSUtFID0gNDA7XHJcblx0Ly8gTjQqayBwb2ludHMgZm9yIGV2ZXJ5ICg1KmspJSBkZXZpYXRpb24gZnJvbSA1MCUgYmxhY2sgZGVuc2l0eS5cclxuXHQvLyBpLmUuIGs9MSBmb3IgNTV+NjAlIGFuZCA0MH40NSUsIGs9MiBmb3IgNjB+NjUlIGFuZCAzNX40MCUsIGV0Yy5cclxuXHR2YXIgUEVOQUxUWV9ERU5TSVRZID0gMTA7XHJcblxyXG5cdHZhciBldmFsdWF0ZWdyb3VwID0gZnVuY3Rpb24gKGdyb3VwcykgeyAvLyBhc3N1bWVzIFtXLEIsVyxCLFcsLi4uLEIsV11cclxuXHRcdHZhciBzY29yZSA9IDA7XHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7ICsraSkge1xyXG5cdFx0XHRpZiAoZ3JvdXBzW2ldID49IDUpXHJcblx0XHRcdFx0c2NvcmUgKz0gUEVOQUxUWV9DT05TRUNVVElWRSArIChncm91cHNbaV0gLSA1KTtcclxuXHRcdH1cclxuXHRcdGZvciAodmFyIGkgPSA1OyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSArPSAyKSB7XHJcblx0XHRcdHZhciBwID0gZ3JvdXBzW2ldO1xyXG5cdFx0XHRpZiAoZ3JvdXBzW2kgLSAxXSA9PSBwICYmIGdyb3Vwc1tpIC0gMl0gPT0gMyAqIHAgJiYgZ3JvdXBzW2kgLSAzXSA9PSBwICYmXHJcblx0XHRcdFx0Z3JvdXBzW2kgLSA0XSA9PSBwICYmIChncm91cHNbaSAtIDVdID49IDQgKiBwIHx8IGdyb3Vwc1tpICsgMV0gPj0gNCAqIHApKSB7XHJcblx0XHRcdFx0Ly8gdGhpcyBwYXJ0IGRpZmZlcnMgZnJvbSB6eGluZy4uLlxyXG5cdFx0XHRcdHNjb3JlICs9IFBFTkFMVFlfRklOREVSTElLRTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHNjb3JlO1xyXG5cdH07XHJcblxyXG5cdHZhciBuID0gbWF0cml4Lmxlbmd0aDtcclxuXHR2YXIgc2NvcmUgPSAwLCBuYmxhY2tzID0gMDtcclxuXHRmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xyXG5cdFx0dmFyIHJvdyA9IG1hdHJpeFtpXTtcclxuXHRcdHZhciBncm91cHM7XHJcblxyXG5cdFx0Ly8gZXZhbHVhdGUgdGhlIGN1cnJlbnQgcm93XHJcblx0XHRncm91cHMgPSBbMF07IC8vIHRoZSBmaXJzdCBlbXB0eSBncm91cCBvZiB3aGl0ZVxyXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBuOyApIHtcclxuXHRcdFx0dmFyIGs7XHJcblx0XHRcdGZvciAoayA9IDA7IGogPCBuICYmIHJvd1tqXTsgKytrKVxyXG5cdFx0XHRcdCsrajtcclxuXHRcdFx0Z3JvdXBzLnB1c2goayk7XHJcblx0XHRcdGZvciAoayA9IDA7IGogPCBuICYmICFyb3dbal07ICsraylcclxuXHRcdFx0XHQrK2o7XHJcblx0XHRcdGdyb3Vwcy5wdXNoKGspO1xyXG5cdFx0fVxyXG5cdFx0c2NvcmUgKz0gZXZhbHVhdGVncm91cChncm91cHMpO1xyXG5cclxuXHRcdC8vIGV2YWx1YXRlIHRoZSBjdXJyZW50IGNvbHVtblxyXG5cdFx0Z3JvdXBzID0gWzBdO1xyXG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBuOyApIHtcclxuXHRcdFx0dmFyIGs7XHJcblx0XHRcdGZvciAoayA9IDA7IGogPCBuICYmIG1hdHJpeFtqXVtpXTsgKytrKVxyXG5cdFx0XHRcdCsrajtcclxuXHRcdFx0Z3JvdXBzLnB1c2goayk7XHJcblx0XHRcdGZvciAoayA9IDA7IGogPCBuICYmICFtYXRyaXhbal1baV07ICsraylcclxuXHRcdFx0XHQrK2o7XHJcblx0XHRcdGdyb3Vwcy5wdXNoKGspO1xyXG5cdFx0fVxyXG5cdFx0c2NvcmUgKz0gZXZhbHVhdGVncm91cChncm91cHMpO1xyXG5cclxuXHRcdC8vIGNoZWNrIHRoZSAyeDIgYm94IGFuZCBjYWxjdWxhdGUgdGhlIGRlbnNpdHlcclxuXHRcdHZhciBuZXh0cm93ID0gbWF0cml4W2kgKyAxXSB8fCBbXTtcclxuXHRcdG5ibGFja3MgKz0gcm93WzBdO1xyXG5cdFx0Zm9yICh2YXIgaiA9IDE7IGogPCBuOyArK2opIHtcclxuXHRcdFx0dmFyIHAgPSByb3dbal07XHJcblx0XHRcdG5ibGFja3MgKz0gcDtcclxuXHRcdFx0Ly8gYXQgbGVhc3QgY29tcGFyaXNvbiB3aXRoIG5leHQgcm93IHNob3VsZCBiZSBzdHJpY3QuLi5cclxuXHRcdFx0aWYgKHJvd1tqIC0gMV0gPT0gcCAmJiBuZXh0cm93W2pdID09PSBwICYmIG5leHRyb3dbaiAtIDFdID09PSBwKSB7XHJcblx0XHRcdFx0c2NvcmUgKz0gUEVOQUxUWV9UV09CWVRXTztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c2NvcmUgKz0gUEVOQUxUWV9ERU5TSVRZICogKChNYXRoLmFicyhuYmxhY2tzIC8gbiAvIG4gLSAwLjUpIC8gMC4wNSkgfCAwKTtcclxuXHRyZXR1cm4gc2NvcmU7XHJcbn07XHJcblxyXG4vLyByZXR1cm5zIHRoZSBmdWxseSBlbmNvZGVkIFFSIGNvZGUgbWF0cml4IHdoaWNoIGNvbnRhaW5zIGdpdmVuIGRhdGEuXHJcbi8vIGl0IGFsc28gY2hvb3NlcyB0aGUgYmVzdCBtYXNrIGF1dG9tYXRpY2FsbHkgd2hlbiBtYXNrIGlzIC0xLlxyXG52YXIgZ2VuZXJhdGUgPSBmdW5jdGlvbiAoZGF0YSwgdmVyLCBtb2RlLCBlY2NsZXZlbCwgbWFzaykge1xyXG5cdHZhciB2ID0gVkVSU0lPTlNbdmVyXTtcclxuXHR2YXIgYnVmID0gZW5jb2RlKHZlciwgbW9kZSwgZGF0YSwgbmRhdGFiaXRzKHZlciwgZWNjbGV2ZWwpID4+IDMpO1xyXG5cdGJ1ZiA9IGF1Z3VtZW50ZWNjcyhidWYsIHZbMV1bZWNjbGV2ZWxdLCBHRjI1Nl9HRU5QT0xZW3ZbMF1bZWNjbGV2ZWxdXSk7XHJcblxyXG5cdHZhciByZXN1bHQgPSBtYWtlYmFzZW1hdHJpeCh2ZXIpO1xyXG5cdHZhciBtYXRyaXggPSByZXN1bHQubWF0cml4LCByZXNlcnZlZCA9IHJlc3VsdC5yZXNlcnZlZDtcclxuXHRwdXRkYXRhKG1hdHJpeCwgcmVzZXJ2ZWQsIGJ1Zik7XHJcblxyXG5cdGlmIChtYXNrIDwgMCkge1xyXG5cdFx0Ly8gZmluZCB0aGUgYmVzdCBtYXNrXHJcblx0XHRtYXNrZGF0YShtYXRyaXgsIHJlc2VydmVkLCAwKTtcclxuXHRcdHB1dGZvcm1hdGluZm8obWF0cml4LCByZXNlcnZlZCwgZWNjbGV2ZWwsIDApO1xyXG5cdFx0dmFyIGJlc3RtYXNrID0gMCwgYmVzdHNjb3JlID0gZXZhbHVhdGVtYXRyaXgobWF0cml4KTtcclxuXHRcdG1hc2tkYXRhKG1hdHJpeCwgcmVzZXJ2ZWQsIDApO1xyXG5cdFx0Zm9yIChtYXNrID0gMTsgbWFzayA8IDg7ICsrbWFzaykge1xyXG5cdFx0XHRtYXNrZGF0YShtYXRyaXgsIHJlc2VydmVkLCBtYXNrKTtcclxuXHRcdFx0cHV0Zm9ybWF0aW5mbyhtYXRyaXgsIHJlc2VydmVkLCBlY2NsZXZlbCwgbWFzayk7XHJcblx0XHRcdHZhciBzY29yZSA9IGV2YWx1YXRlbWF0cml4KG1hdHJpeCk7XHJcblx0XHRcdGlmIChiZXN0c2NvcmUgPiBzY29yZSkge1xyXG5cdFx0XHRcdGJlc3RzY29yZSA9IHNjb3JlO1xyXG5cdFx0XHRcdGJlc3RtYXNrID0gbWFzaztcclxuXHRcdFx0fVxyXG5cdFx0XHRtYXNrZGF0YShtYXRyaXgsIHJlc2VydmVkLCBtYXNrKTtcclxuXHRcdH1cclxuXHRcdG1hc2sgPSBiZXN0bWFzaztcclxuXHR9XHJcblxyXG5cdG1hc2tkYXRhKG1hdHJpeCwgcmVzZXJ2ZWQsIG1hc2spO1xyXG5cdHB1dGZvcm1hdGluZm8obWF0cml4LCByZXNlcnZlZCwgZWNjbGV2ZWwsIG1hc2spO1xyXG5cdHJldHVybiBtYXRyaXg7XHJcbn07XHJcblxyXG4vLyB0aGUgcHVibGljIGludGVyZmFjZSBpcyB0cml2aWFsOyB0aGUgb3B0aW9ucyBhdmFpbGFibGUgYXJlIGFzIGZvbGxvd3M6XHJcbi8vXHJcbi8vIC0gdmVyc2lvbjogYW4gaW50ZWdlciBpbiBbMSw0MF0uIHdoZW4gb21pdHRlZCAob3IgLTEpIHRoZSBzbWFsbGVzdCBwb3NzaWJsZVxyXG4vLyAgIHZlcnNpb24gaXMgY2hvc2VuLlxyXG4vLyAtIG1vZGU6IG9uZSBvZiAnbnVtZXJpYycsICdhbHBoYW51bWVyaWMnLCAnb2N0ZXQnLiB3aGVuIG9taXR0ZWQgdGhlIHNtYWxsZXN0XHJcbi8vICAgcG9zc2libGUgbW9kZSBpcyBjaG9zZW4uXHJcbi8vIC0gZWNjTGV2ZWw6IG9uZSBvZiAnTCcsICdNJywgJ1EnLCAnSCcuIGRlZmF1bHRzIHRvICdMJy5cclxuLy8gLSBtYXNrOiBhbiBpbnRlZ2VyIGluIFswLDddLiB3aGVuIG9taXR0ZWQgKG9yIC0xKSB0aGUgYmVzdCBtYXNrIGlzIGNob3Nlbi5cclxuLy9cclxuXHJcbmZ1bmN0aW9uIGdlbmVyYXRlRnJhbWUoZGF0YSwgb3B0aW9ucykge1xyXG5cdHZhciBNT0RFUyA9IHsnbnVtZXJpYyc6IE1PREVfTlVNRVJJQywgJ2FscGhhbnVtZXJpYyc6IE1PREVfQUxQSEFOVU1FUklDLFxyXG5cdFx0J29jdGV0JzogTU9ERV9PQ1RFVH07XHJcblx0dmFyIEVDQ0xFVkVMUyA9IHsnTCc6IEVDQ0xFVkVMX0wsICdNJzogRUNDTEVWRUxfTSwgJ1EnOiBFQ0NMRVZFTF9RLFxyXG5cdFx0J0gnOiBFQ0NMRVZFTF9IfTtcclxuXHJcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblx0dmFyIHZlciA9IG9wdGlvbnMudmVyc2lvbiB8fCAtMTtcclxuXHR2YXIgZWNjbGV2ZWwgPSBFQ0NMRVZFTFNbKG9wdGlvbnMuZWNjTGV2ZWwgfHwgJ0wnKS50b1VwcGVyQ2FzZSgpXTtcclxuXHR2YXIgbW9kZSA9IG9wdGlvbnMubW9kZSA/IE1PREVTW29wdGlvbnMubW9kZS50b0xvd2VyQ2FzZSgpXSA6IC0xO1xyXG5cdHZhciBtYXNrID0gJ21hc2snIGluIG9wdGlvbnMgPyBvcHRpb25zLm1hc2sgOiAtMTtcclxuXHJcblx0aWYgKG1vZGUgPCAwKSB7XHJcblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdGlmIChkYXRhLm1hdGNoKE5VTUVSSUNfUkVHRVhQKSkge1xyXG5cdFx0XHRcdG1vZGUgPSBNT0RFX05VTUVSSUM7XHJcblx0XHRcdH0gZWxzZSBpZiAoZGF0YS5tYXRjaChBTFBIQU5VTUVSSUNfT1VUX1JFR0VYUCkpIHtcclxuXHRcdFx0XHQvLyB3aGlsZSBlbmNvZGUgc3VwcG9ydHMgY2FzZS1pbnNlbnNpdGl2ZSBlbmNvZGluZywgd2UgcmVzdHJpY3QgdGhlIGRhdGEgdG8gYmUgdXBwZXJjYXNlZCB3aGVuIGF1dG8tc2VsZWN0aW5nIHRoZSBtb2RlLlxyXG5cdFx0XHRcdG1vZGUgPSBNT0RFX0FMUEhBTlVNRVJJQztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRtb2RlID0gTU9ERV9PQ1RFVDtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bW9kZSA9IE1PREVfT0NURVQ7XHJcblx0XHR9XHJcblx0fSBlbHNlIGlmICghKG1vZGUgPT0gTU9ERV9OVU1FUklDIHx8IG1vZGUgPT0gTU9ERV9BTFBIQU5VTUVSSUMgfHxcclxuXHRcdG1vZGUgPT0gTU9ERV9PQ1RFVCkpIHtcclxuXHRcdHRocm93ICdpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIG1vZGUnO1xyXG5cdH1cclxuXHJcblx0ZGF0YSA9IHZhbGlkYXRlZGF0YShtb2RlLCBkYXRhKTtcclxuXHRpZiAoZGF0YSA9PT0gbnVsbClcclxuXHRcdHRocm93ICdpbnZhbGlkIGRhdGEgZm9ybWF0JztcclxuXHJcblx0aWYgKGVjY2xldmVsIDwgMCB8fCBlY2NsZXZlbCA+IDMpXHJcblx0XHR0aHJvdyAnaW52YWxpZCBFQ0MgbGV2ZWwnO1xyXG5cclxuXHRpZiAodmVyIDwgMCkge1xyXG5cdFx0Zm9yICh2ZXIgPSAxOyB2ZXIgPD0gNDA7ICsrdmVyKSB7XHJcblx0XHRcdGlmIChkYXRhLmxlbmd0aCA8PSBnZXRtYXhkYXRhbGVuKHZlciwgbW9kZSwgZWNjbGV2ZWwpKVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHZlciA+IDQwKVxyXG5cdFx0XHR0aHJvdyAndG9vIGxhcmdlIGRhdGEgZm9yIHRoZSBRciBmb3JtYXQnO1xyXG5cdH0gZWxzZSBpZiAodmVyIDwgMSB8fCB2ZXIgPiA0MCkge1xyXG5cdFx0dGhyb3cgJ2ludmFsaWQgUXIgdmVyc2lvbiEgc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgNDAnO1xyXG5cdH1cclxuXHJcblx0aWYgKG1hc2sgIT0gLTEgJiYgKG1hc2sgPCAwIHx8IG1hc2sgPiA4KSlcclxuXHRcdHRocm93ICdpbnZhbGlkIG1hc2snO1xyXG5cdC8vY29uc29sZS5sb2coJ3ZlcnNpb246JywgdmVyLCAnbW9kZTonLCBtb2RlLCAnRUNDOicsIGVjY2xldmVsLCAnbWFzazonLCBtYXNrIClcclxuXHRyZXR1cm4gZ2VuZXJhdGUoZGF0YSwgdmVyLCBtb2RlLCBlY2NsZXZlbCwgbWFzayk7XHJcbn1cclxuXHJcblxyXG4vLyBvcHRpb25zXHJcbi8vIC0gbW9kdWxlc2l6ZTogYSBudW1iZXIuIHRoaXMgaXMgYSBzaXplIG9mIGVhY2ggbW9kdWxlcyBpbiBwaXhlbHMsIGFuZFxyXG4vLyAgIGRlZmF1bHRzIHRvIDVweC5cclxuLy8gLSBtYXJnaW46IGEgbnVtYmVyLiB0aGlzIGlzIGEgc2l6ZSBvZiBtYXJnaW4gaW4gKm1vZHVsZXMqLCBhbmQgZGVmYXVsdHMgdG9cclxuLy8gICA0ICh3aGl0ZSBtb2R1bGVzKS4gdGhlIHNwZWNmaWNpYXRpb24gbWFuZGF0ZXMgdGhlIG1hcmdpbiBubyBsZXNzIHRoYW4gNFxyXG4vLyAgIG1vZHVsZXMsIHNvIGl0IGlzIGJldHRlciBub3QgdG8gYWx0ZXIgdGhpcyB2YWx1ZSB1bmxlc3MgeW91IGtub3cgd2hhdFxyXG4vLyAgIHlvdSdyZSBkb2luZy5cclxuZnVuY3Rpb24gYnVpbGRDYW52YXMoZGF0YSwgb3B0aW9ucykge1xyXG5cclxuXHR2YXIgY2FudmFzID0gW107XHJcblx0dmFyIGJhY2tncm91bmQgPSBvcHRpb25zLmJhY2tncm91bmQgfHwgJyNmZmYnO1xyXG5cdHZhciBmb3JlZ3JvdW5kID0gb3B0aW9ucy5mb3JlZ3JvdW5kIHx8ICcjMDAwJztcclxuXHQvL3ZhciBtYXJnaW4gPSBvcHRpb25zLm1hcmdpbiB8fCA0O1xyXG5cdHZhciBtYXRyaXggPSBnZW5lcmF0ZUZyYW1lKGRhdGEsIG9wdGlvbnMpO1xyXG5cdHZhciBuID0gbWF0cml4Lmxlbmd0aDtcclxuXHR2YXIgbW9kU2l6ZSA9IE1hdGguZmxvb3Iob3B0aW9ucy5maXQgPyBvcHRpb25zLmZpdCAvIG4gOiA1KTtcclxuXHR2YXIgc2l6ZSA9IG4gKiBtb2RTaXplO1xyXG5cclxuXHRjYW52YXMucHVzaCh7XHJcblx0XHR0eXBlOiAncmVjdCcsXHJcblx0XHR4OiAwLCB5OiAwLCB3OiBzaXplLCBoOiBzaXplLCBsaW5lV2lkdGg6IDAsIGNvbG9yOiBiYWNrZ3JvdW5kXHJcblx0fSk7XHJcblxyXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7XHJcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG47ICsraikge1xyXG5cdFx0XHRpZiAobWF0cml4W2ldW2pdKSB7XHJcblx0XHRcdFx0Y2FudmFzLnB1c2goe1xyXG5cdFx0XHRcdFx0dHlwZTogJ3JlY3QnLFxyXG5cdFx0XHRcdFx0eDogbW9kU2l6ZSAqIGosXHJcblx0XHRcdFx0XHR5OiBtb2RTaXplICogaSxcclxuXHRcdFx0XHRcdHc6IG1vZFNpemUsXHJcblx0XHRcdFx0XHRoOiBtb2RTaXplLFxyXG5cdFx0XHRcdFx0bGluZVdpZHRoOiAwLFxyXG5cdFx0XHRcdFx0Y29sb3I6IGZvcmVncm91bmRcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdGNhbnZhczogY2FudmFzLFxyXG5cdFx0c2l6ZTogc2l6ZVxyXG5cdH07XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBtZWFzdXJlKG5vZGUpIHtcclxuXHR2YXIgY2QgPSBidWlsZENhbnZhcyhub2RlLnFyLCBub2RlKTtcclxuXHRub2RlLl9jYW52YXMgPSBjZC5jYW52YXM7XHJcblx0bm9kZS5fd2lkdGggPSBub2RlLl9oZWlnaHQgPSBub2RlLl9taW5XaWR0aCA9IG5vZGUuX21heFdpZHRoID0gbm9kZS5fbWluSGVpZ2h0ID0gbm9kZS5fbWF4SGVpZ2h0ID0gY2Quc2l6ZTtcclxuXHRyZXR1cm4gbm9kZTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0bWVhc3VyZTogbWVhc3VyZVxyXG59O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDc2Mjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdCc0QTAnOiBbNDc2Ny44NywgNjc0MC43OV0sXHJcblx0JzJBMCc6IFszMzcwLjM5LCA0NzY3Ljg3XSxcclxuXHRBMDogWzIzODMuOTQsIDMzNzAuMzldLFxyXG5cdEExOiBbMTY4My43OCwgMjM4My45NF0sXHJcblx0QTI6IFsxMTkwLjU1LCAxNjgzLjc4XSxcclxuXHRBMzogWzg0MS44OSwgMTE5MC41NV0sXHJcblx0QTQ6IFs1OTUuMjgsIDg0MS44OV0sXHJcblx0QTU6IFs0MTkuNTMsIDU5NS4yOF0sXHJcblx0QTY6IFsyOTcuNjQsIDQxOS41M10sXHJcblx0QTc6IFsyMDkuNzYsIDI5Ny42NF0sXHJcblx0QTg6IFsxNDcuNDAsIDIwOS43Nl0sXHJcblx0QTk6IFsxMDQuODgsIDE0Ny40MF0sXHJcblx0QTEwOiBbNzMuNzAsIDEwNC44OF0sXHJcblx0QjA6IFsyODM0LjY1LCA0MDA4LjE5XSxcclxuXHRCMTogWzIwMDQuMDksIDI4MzQuNjVdLFxyXG5cdEIyOiBbMTQxNy4zMiwgMjAwNC4wOV0sXHJcblx0QjM6IFsxMDAwLjYzLCAxNDE3LjMyXSxcclxuXHRCNDogWzcwOC42NiwgMTAwMC42M10sXHJcblx0QjU6IFs0OTguOTAsIDcwOC42Nl0sXHJcblx0QjY6IFszNTQuMzMsIDQ5OC45MF0sXHJcblx0Qjc6IFsyNDkuNDUsIDM1NC4zM10sXHJcblx0Qjg6IFsxNzUuNzUsIDI0OS40NV0sXHJcblx0Qjk6IFsxMjQuNzIsIDE3NS43NV0sXHJcblx0QjEwOiBbODcuODcsIDEyNC43Ml0sXHJcblx0QzA6IFsyNTk5LjM3LCAzNjc2LjU0XSxcclxuXHRDMTogWzE4MzYuODUsIDI1OTkuMzddLFxyXG5cdEMyOiBbMTI5OC4yNywgMTgzNi44NV0sXHJcblx0QzM6IFs5MTguNDMsIDEyOTguMjddLFxyXG5cdEM0OiBbNjQ5LjEzLCA5MTguNDNdLFxyXG5cdEM1OiBbNDU5LjIxLCA2NDkuMTNdLFxyXG5cdEM2OiBbMzIzLjE1LCA0NTkuMjFdLFxyXG5cdEM3OiBbMjI5LjYxLCAzMjMuMTVdLFxyXG5cdEM4OiBbMTYxLjU3LCAyMjkuNjFdLFxyXG5cdEM5OiBbMTEzLjM5LCAxNjEuNTddLFxyXG5cdEMxMDogWzc5LjM3LCAxMTMuMzldLFxyXG5cdFJBMDogWzI0MzcuODAsIDM0NTguMjddLFxyXG5cdFJBMTogWzE3MjkuMTMsIDI0MzcuODBdLFxyXG5cdFJBMjogWzEyMTguOTAsIDE3MjkuMTNdLFxyXG5cdFJBMzogWzg2NC41NywgMTIxOC45MF0sXHJcblx0UkE0OiBbNjA5LjQ1LCA4NjQuNTddLFxyXG5cdFNSQTA6IFsyNTUxLjE4LCAzNjI4LjM1XSxcclxuXHRTUkExOiBbMTgxNC4xNywgMjU1MS4xOF0sXHJcblx0U1JBMjogWzEyNzUuNTksIDE4MTQuMTddLFxyXG5cdFNSQTM6IFs5MDcuMDksIDEyNzUuNTldLFxyXG5cdFNSQTQ6IFs2MzcuODAsIDkwNy4wOV0sXHJcblx0RVhFQ1VUSVZFOiBbNTIxLjg2LCA3NTYuMDBdLFxyXG5cdEZPTElPOiBbNjEyLjAwLCA5MzYuMDBdLFxyXG5cdExFR0FMOiBbNjEyLjAwLCAxMDA4LjAwXSxcclxuXHRMRVRURVI6IFs2MTIuMDAsIDc5Mi4wMF0sXHJcblx0VEFCTE9JRDogWzc5Mi4wMCwgMTIyNC4wMF1cclxufTtcclxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NTk3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXHJcblxyXG52YXIgaXNTdHJpbmcgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc1N0cmluZyk7XHJcbnZhciBpc0FycmF5ID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNBcnJheSk7XHJcbnZhciBpc1VuZGVmaW5lZCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzVW5kZWZpbmVkKTtcclxudmFyIGlzTnVsbCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzTnVsbCk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdHlsZUNvbnRleHRTdGFjayB1c2VkIGZvciBzdHlsZSBpbmhlcml0YW5jZSBhbmQgc3R5bGUgb3ZlcnJpZGVzXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAdGhpcyB7U3R5bGVDb250ZXh0U3RhY2t9XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lZCBzdHlsZXMgZGljdGlvbmFyeVxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uYWwgZGVmYXVsdCBzdHlsZSBkZWZpbml0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBTdHlsZUNvbnRleHRTdGFjayhzdHlsZURpY3Rpb25hcnksIGRlZmF1bHRTdHlsZSkge1xyXG5cdHRoaXMuZGVmYXVsdFN0eWxlID0gZGVmYXVsdFN0eWxlIHx8IHt9O1xyXG5cdHRoaXMuc3R5bGVEaWN0aW9uYXJ5ID0gc3R5bGVEaWN0aW9uYXJ5O1xyXG5cdHRoaXMuc3R5bGVPdmVycmlkZXMgPSBbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgY2xvbmVkIHZlcnNpb24gb2YgY3VycmVudCBzdGFja1xyXG4gKiBAcmV0dXJuIHtTdHlsZUNvbnRleHRTdGFja30gY3VycmVudCBzdGFjayBzbmFwc2hvdFxyXG4gKi9cclxuU3R5bGVDb250ZXh0U3RhY2sucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG5cdHZhciBzdGFjayA9IG5ldyBTdHlsZUNvbnRleHRTdGFjayh0aGlzLnN0eWxlRGljdGlvbmFyeSwgdGhpcy5kZWZhdWx0U3R5bGUpO1xyXG5cclxuXHR0aGlzLnN0eWxlT3ZlcnJpZGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuXHRcdHN0YWNrLnN0eWxlT3ZlcnJpZGVzLnB1c2goaXRlbSk7XHJcblx0fSk7XHJcblxyXG5cdHJldHVybiBzdGFjaztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQdXNoZXMgc3R5bGUtbmFtZSBvciBzdHlsZS1vdmVycmlkZXMtb2JqZWN0IG9udG8gdGhlIHN0YWNrIGZvciBmdXR1cmUgZXZhbHVhdGlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IHN0eWxlTmFtZU9yT3ZlcnJpZGUgc3R5bGUtbmFtZSAocmVmZXJyaW5nIHRvIHN0eWxlRGljdGlvbmFyeSkgb3JcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgbmV3IGRpY3Rpb25hcnkgZGVmaW5pbmcgb3ZlcnJpZGluZyBwcm9wZXJ0aWVzXHJcbiAqL1xyXG5TdHlsZUNvbnRleHRTdGFjay5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChzdHlsZU5hbWVPck92ZXJyaWRlKSB7XHJcblx0dGhpcy5zdHlsZU92ZXJyaWRlcy5wdXNoKHN0eWxlTmFtZU9yT3ZlcnJpZGUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZXMgbGFzdCBzdHlsZS1uYW1lIG9yIHN0eWxlLW92ZXJyaWRlcy1vYmplY3QgZnJvbSB0aGUgc3RhY2tcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IGhvd01hbnkgLSBvcHRpb25hbCBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgcG9wcGVkIChpZiBub3Qgc3BlY2lmaWVkLFxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBlbGVtZW50IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjaylcclxuICovXHJcblN0eWxlQ29udGV4dFN0YWNrLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbiAoaG93TWFueSkge1xyXG5cdGhvd01hbnkgPSBob3dNYW55IHx8IDE7XHJcblxyXG5cdHdoaWxlIChob3dNYW55LS0gPiAwKSB7XHJcblx0XHR0aGlzLnN0eWxlT3ZlcnJpZGVzLnBvcCgpO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgc2V0IG9mIG5hbWVkIHN0eWxlcyBvci9hbmQgYSBzdHlsZS1vdmVycmlkZXMtb2JqZWN0IGJhc2VkIG9uIHRoZSBpdGVtLFxyXG4gKiBwdXNoZXMgdGhvc2UgZWxlbWVudHMgb250byB0aGUgc3RhY2sgZm9yIGZ1dHVyZSBldmFsdWF0aW9uIGFuZCByZXR1cm5zIHRoZSBudW1iZXJcclxuICogb2YgZWxlbWVudHMgcHVzaGVkLCBzbyB0aGV5IGNhbiBiZSBlYXNpbHkgcG9wZWQgdGhlbi5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25hbCBzdHlsZSBwcm9wZXJ0eSBhbmQvb3Igc3R5bGUgb3ZlcnJpZGVzXHJcbiAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBwdXNoZWQgb250byB0aGUgc3RhY2tcclxuICovXHJcblN0eWxlQ29udGV4dFN0YWNrLnByb3RvdHlwZS5hdXRvcHVzaCA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcblx0aWYgKGlzU3RyaW5nKGl0ZW0pKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblxyXG5cdHZhciBzdHlsZU5hbWVzID0gW107XHJcblxyXG5cdGlmIChpdGVtLnN0eWxlKSB7XHJcblx0XHRpZiAoaXNBcnJheShpdGVtLnN0eWxlKSkge1xyXG5cdFx0XHRzdHlsZU5hbWVzID0gaXRlbS5zdHlsZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHN0eWxlTmFtZXMgPSBbaXRlbS5zdHlsZV07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3IgKHZhciBpID0gMCwgbCA9IHN0eWxlTmFtZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHR0aGlzLnB1c2goc3R5bGVOYW1lc1tpXSk7XHJcblx0fVxyXG5cclxuXHR2YXIgc3R5bGVQcm9wZXJ0aWVzID0gW1xyXG5cdFx0J2ZvbnQnLFxyXG5cdFx0J2ZvbnRTaXplJyxcclxuXHRcdCdmb250RmVhdHVyZXMnLFxyXG5cdFx0J2JvbGQnLFxyXG5cdFx0J2l0YWxpY3MnLFxyXG5cdFx0J2FsaWdubWVudCcsXHJcblx0XHQnY29sb3InLFxyXG5cdFx0J2NvbHVtbkdhcCcsXHJcblx0XHQnZmlsbENvbG9yJyxcclxuXHRcdCdmaWxsT3BhY2l0eScsXHJcblx0XHQnZGVjb3JhdGlvbicsXHJcblx0XHQnZGVjb3JhdGlvblN0eWxlJyxcclxuXHRcdCdkZWNvcmF0aW9uQ29sb3InLFxyXG5cdFx0J2JhY2tncm91bmQnLFxyXG5cdFx0J2xpbmVIZWlnaHQnLFxyXG5cdFx0J2NoYXJhY3RlclNwYWNpbmcnLFxyXG5cdFx0J25vV3JhcCcsXHJcblx0XHQnbWFya2VyQ29sb3InLFxyXG5cdFx0J2xlYWRpbmdJbmRlbnQnLFxyXG5cdFx0J3N1cCcsXHJcblx0XHQnc3ViJ1xyXG5cdFx0Ly8ndGFibGVDZWxsUGFkZGluZydcclxuXHRcdC8vICdjZWxsQm9yZGVyJyxcclxuXHRcdC8vICdoZWFkZXJDZWxsQm9yZGVyJyxcclxuXHRcdC8vICdvZGRSb3dDZWxsQm9yZGVyJyxcclxuXHRcdC8vICdldmVuUm93Q2VsbEJvcmRlcicsXHJcblx0XHQvLyAndGFibGVCb3JkZXInXHJcblx0XTtcclxuXHR2YXIgc3R5bGVPdmVycmlkZU9iamVjdCA9IHt9O1xyXG5cdHZhciBwdXNoU3R5bGVPdmVycmlkZU9iamVjdCA9IGZhbHNlO1xyXG5cclxuXHRzdHlsZVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcblx0XHRpZiAoIWlzVW5kZWZpbmVkKGl0ZW1ba2V5XSkgJiYgIWlzTnVsbChpdGVtW2tleV0pKSB7XHJcblx0XHRcdHN0eWxlT3ZlcnJpZGVPYmplY3Rba2V5XSA9IGl0ZW1ba2V5XTtcclxuXHRcdFx0cHVzaFN0eWxlT3ZlcnJpZGVPYmplY3QgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHRpZiAocHVzaFN0eWxlT3ZlcnJpZGVPYmplY3QpIHtcclxuXHRcdHRoaXMucHVzaChzdHlsZU92ZXJyaWRlT2JqZWN0KTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBzdHlsZU5hbWVzLmxlbmd0aCArIChwdXNoU3R5bGVPdmVycmlkZU9iamVjdCA/IDEgOiAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBdXRvbWF0aWNhbGx5IHB1c2hlcyBlbGVtZW50cyBvbnRvIHRoZSBzdGFjaywgdXNpbmcgYXV0b3B1c2ggYmFzZWQgb24gaXRlbSxcclxuICogZXhlY3V0ZXMgY2FsbGJhY2sgYW5kIHRoZW4gcG9wcyBlbGVtZW50cyBiYWNrLiBSZXR1cm5zIHZhbHVlIHJldHVybmVkIGJ5IGNhbGxiYWNrXHJcbiAqXHJcbiAqIEBwYXJhbSAge09iamVjdH0gICBpdGVtIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9uYWwgc3R5bGUgcHJvcGVydHkgYW5kL29yIHN0eWxlIG92ZXJyaWRlc1xyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJldHdlZW4gYXV0b3B1c2ggYW5kIHBvcFxyXG4gKiBAcmV0dXJuIHtPYmplY3R9IHZhbHVlIHJldHVybmVkIGJ5IGNhbGxiYWNrXHJcbiAqL1xyXG5TdHlsZUNvbnRleHRTdGFjay5wcm90b3R5cGUuYXV0byA9IGZ1bmN0aW9uIChpdGVtLCBjYWxsYmFjaykge1xyXG5cdHZhciBwdXNoZWRJdGVtcyA9IHRoaXMuYXV0b3B1c2goaXRlbSk7XHJcblx0dmFyIHJlc3VsdCA9IGNhbGxiYWNrKCk7XHJcblxyXG5cdGlmIChwdXNoZWRJdGVtcyA+IDApIHtcclxuXHRcdHRoaXMucG9wKHB1c2hlZEl0ZW1zKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogRXZhbHVhdGVzIHN0YWNrIGFuZCByZXR1cm5zIHZhbHVlIG9mIGEgbmFtZWQgcHJvcGVydHlcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IC0gcHJvcGVydHkgbmFtZVxyXG4gKiBAcmV0dXJuIHByb3BlcnR5IHZhbHVlIG9yIG51bGwgaWYgbm90IGZvdW5kXHJcbiAqL1xyXG5TdHlsZUNvbnRleHRTdGFjay5wcm90b3R5cGUuZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcclxuXHRpZiAodGhpcy5zdHlsZU92ZXJyaWRlcykge1xyXG5cdFx0Zm9yICh2YXIgaSA9IHRoaXMuc3R5bGVPdmVycmlkZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0dmFyIGl0ZW0gPSB0aGlzLnN0eWxlT3ZlcnJpZGVzW2ldO1xyXG5cclxuXHRcdFx0aWYgKGlzU3RyaW5nKGl0ZW0pKSB7XHJcblx0XHRcdFx0Ly8gbmFtZWQtc3R5bGUtb3ZlcnJpZGVcclxuXHRcdFx0XHR2YXIgc3R5bGUgPSB0aGlzLnN0eWxlRGljdGlvbmFyeVtpdGVtXTtcclxuXHRcdFx0XHRpZiAoc3R5bGUgJiYgIWlzVW5kZWZpbmVkKHN0eWxlW3Byb3BlcnR5XSkgJiYgIWlzTnVsbChzdHlsZVtwcm9wZXJ0eV0pKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gc3R5bGVbcHJvcGVydHldO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIGlmICghaXNVbmRlZmluZWQoaXRlbVtwcm9wZXJ0eV0pICYmICFpc051bGwoaXRlbVtwcm9wZXJ0eV0pKSB7XHJcblx0XHRcdFx0Ly8gc3R5bGUtb3ZlcnJpZGVzLW9iamVjdFxyXG5cdFx0XHRcdHJldHVybiBpdGVtW3Byb3BlcnR5XTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRoaXMuZGVmYXVsdFN0eWxlICYmIHRoaXMuZGVmYXVsdFN0eWxlW3Byb3BlcnR5XTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU3R5bGVDb250ZXh0U3RhY2s7XHJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzYwMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxyXG5cclxudmFyIHhtbGRvYyA9IF9fd2VicGFja19yZXF1aXJlX18oNjUxMyk7XHJcblxyXG4vKiogU3RyaXAgdW5pdCBwb3N0Zml4LCBwYXJzZSBudW1iZXIsIGJ1dCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgTmFOIGZvciBiYWQgaW5wdXQgKi9cclxuZnVuY3Rpb24gc3RyaXBVbml0cyh0ZXh0VmFsKSB7XHJcblx0dmFyIG4gPSBwYXJzZUZsb2F0KHRleHRWYWwpO1xyXG5cdGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgaXNOYU4obikpIHtcclxuXHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cdHJldHVybiBuO1xyXG59XHJcblxyXG4vKiogTWFrZSBzdXJlIGl0J3MgdmFsaWQgWE1MIGFuZCB0aGUgcm9vdCB0YWdlIGlzIDxzdmcvPiwgcmV0dXJucyB4bWxkb2MgRE9NICovXHJcbmZ1bmN0aW9uIHBhcnNlU1ZHKHN2Z1N0cmluZykge1xyXG5cdHZhciBkb2M7XHJcblxyXG5cdHRyeSB7XHJcblx0XHRkb2MgPSBuZXcgeG1sZG9jLlhtbERvY3VtZW50KHN2Z1N0cmluZyk7XHJcblx0fSBjYXRjaCAoZXJyKSB7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1NWR01lYXN1cmU6ICcgKyBlcnIpO1xyXG5cdH1cclxuXHJcblx0aWYgKGRvYy5uYW1lICE9PSBcInN2Z1wiKSB7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1NWR01lYXN1cmU6IGV4cGVjdGVkIDxzdmc+IGRvY3VtZW50Jyk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZG9jO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTVkdNZWFzdXJlKCkge1xyXG59XHJcblxyXG5TVkdNZWFzdXJlLnByb3RvdHlwZS5tZWFzdXJlU1ZHID0gZnVuY3Rpb24gKHN2Z1N0cmluZykge1xyXG5cclxuXHR2YXIgZG9jID0gcGFyc2VTVkcoc3ZnU3RyaW5nKTtcclxuXHJcblx0dmFyIGRvY1dpZHRoID0gc3RyaXBVbml0cyhkb2MuYXR0ci53aWR0aCk7XHJcblx0dmFyIGRvY0hlaWdodCA9IHN0cmlwVW5pdHMoZG9jLmF0dHIuaGVpZ2h0KTtcclxuXHJcblx0aWYgKChkb2NXaWR0aCA9PSB1bmRlZmluZWQgfHwgZG9jSGVpZ2h0ID09IHVuZGVmaW5lZCkgJiYgdHlwZW9mIGRvYy5hdHRyLnZpZXdCb3ggPT0gJ3N0cmluZycpIHtcclxuXHRcdHZhciB2aWV3Qm94UGFydHMgPSBkb2MuYXR0ci52aWV3Qm94LnNwbGl0KC9bLFxcc10rLyk7XHJcblx0XHRpZiAodmlld0JveFBhcnRzLmxlbmd0aCAhPT0gNCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHN2ZyB2aWV3Ym94IGZvcm1hdCwgc2hvdWxkIGhhdmUgNCBlbnRyaWVzIGJ1dCBmb3VuZDogJ1wiICsgZG9jLmF0dHIudmlld0JveCArIFwiJ1wiKTtcclxuXHRcdH1cclxuXHRcdGlmIChkb2NXaWR0aCA9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZG9jV2lkdGggPSBzdHJpcFVuaXRzKHZpZXdCb3hQYXJ0c1syXSk7XHJcblx0XHR9XHJcblx0XHRpZiAoZG9jSGVpZ2h0ID09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRkb2NIZWlnaHQgPSBzdHJpcFVuaXRzKHZpZXdCb3hQYXJ0c1szXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0d2lkdGg6IGRvY1dpZHRoLFxyXG5cdFx0aGVpZ2h0OiBkb2NIZWlnaHRcclxuXHR9O1xyXG59O1xyXG5cclxuU1ZHTWVhc3VyZS5wcm90b3R5cGUud3JpdGVEaW1lbnNpb25zID0gZnVuY3Rpb24gKHN2Z1N0cmluZywgZGltZW5zaW9ucykge1xyXG5cclxuXHR2YXIgZG9jID0gcGFyc2VTVkcoc3ZnU3RyaW5nKTtcclxuXHJcblx0ZG9jLmF0dHIud2lkdGggPSBcIlwiICsgZGltZW5zaW9ucy53aWR0aDtcclxuXHRkb2MuYXR0ci5oZWlnaHQgPSBcIlwiICsgZGltZW5zaW9ucy5oZWlnaHQ7XHJcblxyXG5cdHJldHVybiBkb2MudG9TdHJpbmcoKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU1ZHTWVhc3VyZTtcclxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5MzQyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXHJcblxyXG52YXIgQ29sdW1uQ2FsY3VsYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oNDQ5OCk7XHJcbnZhciBpc0Z1bmN0aW9uID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNGdW5jdGlvbik7XHJcbnZhciBpc051bWJlciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzTnVtYmVyKTtcclxuXHJcbmZ1bmN0aW9uIFRhYmxlUHJvY2Vzc29yKHRhYmxlTm9kZSkge1xyXG5cdHRoaXMudGFibGVOb2RlID0gdGFibGVOb2RlO1xyXG59XHJcblxyXG5UYWJsZVByb2Nlc3Nvci5wcm90b3R5cGUuYmVnaW5UYWJsZSA9IGZ1bmN0aW9uICh3cml0ZXIpIHtcclxuXHR2YXIgdGFibGVOb2RlO1xyXG5cdHZhciBhdmFpbGFibGVXaWR0aDtcclxuXHR2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG5cdHRhYmxlTm9kZSA9IHRoaXMudGFibGVOb2RlO1xyXG5cdHRoaXMub2Zmc2V0cyA9IHRhYmxlTm9kZS5fb2Zmc2V0cztcclxuXHR0aGlzLmxheW91dCA9IHRhYmxlTm9kZS5fbGF5b3V0O1xyXG5cclxuXHRhdmFpbGFibGVXaWR0aCA9IHdyaXRlci5jb250ZXh0KCkuYXZhaWxhYmxlV2lkdGggLSB0aGlzLm9mZnNldHMudG90YWw7XHJcblx0Q29sdW1uQ2FsY3VsYXRvci5idWlsZENvbHVtbldpZHRocyh0YWJsZU5vZGUudGFibGUud2lkdGhzLCBhdmFpbGFibGVXaWR0aCk7XHJcblxyXG5cdHRoaXMudGFibGVXaWR0aCA9IHRhYmxlTm9kZS5fb2Zmc2V0cy50b3RhbCArIGdldFRhYmxlSW5uZXJDb250ZW50V2lkdGgoKTtcclxuXHR0aGlzLnJvd1NwYW5EYXRhID0gcHJlcGFyZVJvd1NwYW5EYXRhKCk7XHJcblx0dGhpcy5jbGVhblVwUmVwZWF0YWJsZXMgPSBmYWxzZTtcclxuXHJcblx0dGhpcy5oZWFkZXJSb3dzID0gdGFibGVOb2RlLnRhYmxlLmhlYWRlclJvd3MgfHwgMDtcclxuXHR0aGlzLnJvd3NXaXRob3V0UGFnZUJyZWFrID0gdGhpcy5oZWFkZXJSb3dzICsgKHRhYmxlTm9kZS50YWJsZS5rZWVwV2l0aEhlYWRlclJvd3MgfHwgMCk7XHJcblx0dGhpcy5kb250QnJlYWtSb3dzID0gdGFibGVOb2RlLnRhYmxlLmRvbnRCcmVha1Jvd3MgfHwgZmFsc2U7XHJcblxyXG5cdGlmICh0aGlzLnJvd3NXaXRob3V0UGFnZUJyZWFrKSB7XHJcblx0XHR3cml0ZXIuYmVnaW5VbmJyZWFrYWJsZUJsb2NrKCk7XHJcblx0fVxyXG5cclxuXHQvLyB1cGRhdGUgdGhlIGJvcmRlciBwcm9wZXJ0aWVzIG9mIGFsbCBjZWxscyBiZWZvcmUgZHJhd2luZyBhbnkgbGluZXNcclxuXHRwcmVwYXJlQ2VsbEJvcmRlcnModGhpcy50YWJsZU5vZGUudGFibGUuYm9keSk7XHJcblxyXG5cdHRoaXMuZHJhd0hvcml6b250YWxMaW5lKDAsIHdyaXRlcik7XHJcblxyXG5cdGZ1bmN0aW9uIGdldFRhYmxlSW5uZXJDb250ZW50V2lkdGgoKSB7XHJcblx0XHR2YXIgd2lkdGggPSAwO1xyXG5cclxuXHRcdHRhYmxlTm9kZS50YWJsZS53aWR0aHMuZm9yRWFjaChmdW5jdGlvbiAodykge1xyXG5cdFx0XHR3aWR0aCArPSB3Ll9jYWxjV2lkdGg7XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gd2lkdGg7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwcmVwYXJlUm93U3BhbkRhdGEoKSB7XHJcblx0XHR2YXIgcnNkID0gW107XHJcblx0XHR2YXIgeCA9IDA7XHJcblx0XHR2YXIgbGFzdFdpZHRoID0gMDtcclxuXHJcblx0XHRyc2QucHVzaCh7IGxlZnQ6IDAsIHJvd1NwYW46IDAgfSk7XHJcblxyXG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBzZWxmLnRhYmxlTm9kZS50YWJsZS5ib2R5WzBdLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHR2YXIgcGFkZGluZ3MgPSBzZWxmLmxheW91dC5wYWRkaW5nTGVmdChpLCBzZWxmLnRhYmxlTm9kZSkgKyBzZWxmLmxheW91dC5wYWRkaW5nUmlnaHQoaSwgc2VsZi50YWJsZU5vZGUpO1xyXG5cdFx0XHR2YXIgbEJvcmRlciA9IHNlbGYubGF5b3V0LnZMaW5lV2lkdGgoaSwgc2VsZi50YWJsZU5vZGUpO1xyXG5cdFx0XHRsYXN0V2lkdGggPSBwYWRkaW5ncyArIGxCb3JkZXIgKyBzZWxmLnRhYmxlTm9kZS50YWJsZS53aWR0aHNbaV0uX2NhbGNXaWR0aDtcclxuXHRcdFx0cnNkW3JzZC5sZW5ndGggLSAxXS53aWR0aCA9IGxhc3RXaWR0aDtcclxuXHRcdFx0eCArPSBsYXN0V2lkdGg7XHJcblx0XHRcdHJzZC5wdXNoKHsgbGVmdDogeCwgcm93U3BhbjogMCwgd2lkdGg6IDAgfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJzZDtcclxuXHR9XHJcblxyXG5cdC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgY2VsbHMuIElmIHRoZSBjdXJyZW50IGNlbGwgaXMgdGhlIHN0YXJ0IG9mIGFcclxuXHQvLyByb3dTcGFuL2NvbFNwYW4sIHVwZGF0ZSB0aGUgYm9yZGVyIHByb3BlcnR5IG9mIHRoZSBjZWxscyBvbiBpdHNcclxuXHQvLyBib3R0b20vcmlnaHQgYWNjb3JkaW5nbHkuIFRoaXMgaXMgbmVlZGVkIHNpbmNlIGVhY2ggaXRlcmF0aW9uIG9mIHRoZVxyXG5cdC8vIGxpbmUtZHJhd2luZyBsb29wcyBkcmF3cyBsaW5lcyBmb3IgYSBzaW5nbGUgY2VsbCwgbm90IGZvciBhbiBlbnRpcmVcclxuXHQvLyByb3dTcGFuL2NvbFNwYW4uXHJcblx0ZnVuY3Rpb24gcHJlcGFyZUNlbGxCb3JkZXJzKGJvZHkpIHtcclxuXHRcdGZvciAodmFyIHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBib2R5Lmxlbmd0aDsgcm93SW5kZXgrKykge1xyXG5cdFx0XHR2YXIgcm93ID0gYm9keVtyb3dJbmRleF07XHJcblxyXG5cdFx0XHRmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgcm93Lmxlbmd0aDsgY29sSW5kZXgrKykge1xyXG5cdFx0XHRcdHZhciBjZWxsID0gcm93W2NvbEluZGV4XTtcclxuXHJcblx0XHRcdFx0aWYgKGNlbGwuYm9yZGVyKSB7XHJcblx0XHRcdFx0XHR2YXIgcm93U3BhbiA9IGNlbGwucm93U3BhbiB8fCAxO1xyXG5cdFx0XHRcdFx0dmFyIGNvbFNwYW4gPSBjZWxsLmNvbFNwYW4gfHwgMTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKHZhciByb3dPZmZzZXQgPSAwOyByb3dPZmZzZXQgPCByb3dTcGFuOyByb3dPZmZzZXQrKykge1xyXG5cdFx0XHRcdFx0XHQvLyBzZXQgbGVmdCBib3JkZXJcclxuXHRcdFx0XHRcdFx0aWYgKGNlbGwuYm9yZGVyWzBdICE9PSB1bmRlZmluZWQgJiYgcm93T2Zmc2V0ID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHNldEJvcmRlcihyb3dJbmRleCArIHJvd09mZnNldCwgY29sSW5kZXgsIDAsIGNlbGwuYm9yZGVyWzBdKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gc2V0IHJpZ2h0IGJvcmRlclxyXG5cdFx0XHRcdFx0XHRpZiAoY2VsbC5ib3JkZXJbMl0gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdHNldEJvcmRlcihyb3dJbmRleCArIHJvd09mZnNldCwgY29sSW5kZXggKyBjb2xTcGFuIC0gMSwgMiwgY2VsbC5ib3JkZXJbMl0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Zm9yICh2YXIgY29sT2Zmc2V0ID0gMDsgY29sT2Zmc2V0IDwgY29sU3BhbjsgY29sT2Zmc2V0KyspIHtcclxuXHRcdFx0XHRcdFx0Ly8gc2V0IHRvcCBib3JkZXJcclxuXHRcdFx0XHRcdFx0aWYgKGNlbGwuYm9yZGVyWzFdICE9PSB1bmRlZmluZWQgJiYgY29sT2Zmc2V0ID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHNldEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXggKyBjb2xPZmZzZXQsIDEsIGNlbGwuYm9yZGVyWzFdKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gc2V0IGJvdHRvbSBib3JkZXJcclxuXHRcdFx0XHRcdFx0aWYgKGNlbGwuYm9yZGVyWzNdICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRzZXRCb3JkZXIocm93SW5kZXggKyByb3dTcGFuIC0gMSwgY29sSW5kZXggKyBjb2xPZmZzZXQsIDMsIGNlbGwuYm9yZGVyWzNdKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGhlbHBlciBmdW5jdGlvbiB0byBzZXQgdGhlIGJvcmRlciBmb3IgYSBnaXZlbiBjZWxsXHJcblx0XHRmdW5jdGlvbiBzZXRCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBib3JkZXJJbmRleCwgYm9yZGVyVmFsdWUpIHtcclxuXHRcdFx0dmFyIGNlbGwgPSBib2R5W3Jvd0luZGV4XVtjb2xJbmRleF07XHJcblx0XHRcdGNlbGwuYm9yZGVyID0gY2VsbC5ib3JkZXIgfHwge307XHJcblx0XHRcdGNlbGwuYm9yZGVyW2JvcmRlckluZGV4XSA9IGJvcmRlclZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcblRhYmxlUHJvY2Vzc29yLnByb3RvdHlwZS5vblJvd0JyZWFrID0gZnVuY3Rpb24gKHJvd0luZGV4LCB3cml0ZXIpIHtcclxuXHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuXHRcdHZhciBvZmZzZXQgPSBzZWxmLnJvd1BhZGRpbmdUb3AgKyAoIXNlbGYuaGVhZGVyUm93cyA/IHNlbGYudG9wTGluZVdpZHRoIDogMCk7XHJcblx0XHR3cml0ZXIuY29udGV4dCgpLmF2YWlsYWJsZUhlaWdodCAtPSBzZWxmLnJlc2VydmVkQXRCb3R0b207XHJcblx0XHR3cml0ZXIuY29udGV4dCgpLm1vdmVEb3duKG9mZnNldCk7XHJcblx0fTtcclxufTtcclxuXHJcblRhYmxlUHJvY2Vzc29yLnByb3RvdHlwZS5iZWdpblJvdyA9IGZ1bmN0aW9uIChyb3dJbmRleCwgd3JpdGVyKSB7XHJcblx0dGhpcy50b3BMaW5lV2lkdGggPSB0aGlzLmxheW91dC5oTGluZVdpZHRoKHJvd0luZGV4LCB0aGlzLnRhYmxlTm9kZSk7XHJcblx0dGhpcy5yb3dQYWRkaW5nVG9wID0gdGhpcy5sYXlvdXQucGFkZGluZ1RvcChyb3dJbmRleCwgdGhpcy50YWJsZU5vZGUpO1xyXG5cdHRoaXMuYm90dG9tTGluZVdpZHRoID0gdGhpcy5sYXlvdXQuaExpbmVXaWR0aChyb3dJbmRleCArIDEsIHRoaXMudGFibGVOb2RlKTtcclxuXHR0aGlzLnJvd1BhZGRpbmdCb3R0b20gPSB0aGlzLmxheW91dC5wYWRkaW5nQm90dG9tKHJvd0luZGV4LCB0aGlzLnRhYmxlTm9kZSk7XHJcblxyXG5cdHRoaXMucm93Q2FsbGJhY2sgPSB0aGlzLm9uUm93QnJlYWsocm93SW5kZXgsIHdyaXRlcik7XHJcblx0d3JpdGVyLnRyYWNrZXIuc3RhcnRUcmFja2luZygncGFnZUNoYW5nZWQnLCB0aGlzLnJvd0NhbGxiYWNrKTtcclxuXHRpZiAodGhpcy5kb250QnJlYWtSb3dzKSB7XHJcblx0XHR3cml0ZXIuYmVnaW5VbmJyZWFrYWJsZUJsb2NrKCk7XHJcblx0fVxyXG5cdHRoaXMucm93VG9wWSA9IHdyaXRlci5jb250ZXh0KCkueTtcclxuXHR0aGlzLnJlc2VydmVkQXRCb3R0b20gPSB0aGlzLmJvdHRvbUxpbmVXaWR0aCArIHRoaXMucm93UGFkZGluZ0JvdHRvbTtcclxuXHJcblx0d3JpdGVyLmNvbnRleHQoKS5hdmFpbGFibGVIZWlnaHQgLT0gdGhpcy5yZXNlcnZlZEF0Qm90dG9tO1xyXG5cclxuXHR3cml0ZXIuY29udGV4dCgpLm1vdmVEb3duKHRoaXMucm93UGFkZGluZ1RvcCk7XHJcbn07XHJcblxyXG5UYWJsZVByb2Nlc3Nvci5wcm90b3R5cGUuZHJhd0hvcml6b250YWxMaW5lID0gZnVuY3Rpb24gKGxpbmVJbmRleCwgd3JpdGVyLCBvdmVycmlkZVkpIHtcclxuXHR2YXIgbGluZVdpZHRoID0gdGhpcy5sYXlvdXQuaExpbmVXaWR0aChsaW5lSW5kZXgsIHRoaXMudGFibGVOb2RlKTtcclxuXHRpZiAobGluZVdpZHRoKSB7XHJcblx0XHR2YXIgc3R5bGUgPSB0aGlzLmxheW91dC5oTGluZVN0eWxlKGxpbmVJbmRleCwgdGhpcy50YWJsZU5vZGUpO1xyXG5cdFx0dmFyIGRhc2g7XHJcblx0XHRpZiAoc3R5bGUgJiYgc3R5bGUuZGFzaCkge1xyXG5cdFx0XHRkYXNoID0gc3R5bGUuZGFzaDtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgb2Zmc2V0ID0gbGluZVdpZHRoIC8gMjtcclxuXHRcdHZhciBjdXJyZW50TGluZSA9IG51bGw7XHJcblx0XHR2YXIgYm9keSA9IHRoaXMudGFibGVOb2RlLnRhYmxlLmJvZHk7XHJcblx0XHR2YXIgY2VsbEFib3ZlO1xyXG5cdFx0dmFyIGN1cnJlbnRDZWxsO1xyXG5cdFx0dmFyIHJvd0NlbGxBYm92ZTtcclxuXHJcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMucm93U3BhbkRhdGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdHZhciBkYXRhID0gdGhpcy5yb3dTcGFuRGF0YVtpXTtcclxuXHRcdFx0dmFyIHNob3VsZERyYXdMaW5lID0gIWRhdGEucm93U3BhbjtcclxuXHRcdFx0dmFyIGJvcmRlckNvbG9yID0gbnVsbDtcclxuXHJcblx0XHRcdC8vIGRyYXcgb25seSBpZiB0aGUgY3VycmVudCBjZWxsIHJlcXVpcmVzIGEgdG9wIGJvcmRlciBvciB0aGUgY2VsbCBpbiB0aGVcclxuXHRcdFx0Ly8gcm93IGFib3ZlIHJlcXVpcmVzIGEgYm90dG9tIGJvcmRlclxyXG5cdFx0XHRpZiAoc2hvdWxkRHJhd0xpbmUgJiYgaSA8IGwgLSAxKSB7XHJcblx0XHRcdFx0dmFyIHRvcEJvcmRlciA9IGZhbHNlLCBib3R0b21Cb3JkZXIgPSBmYWxzZSwgcm93Qm90dG9tQm9yZGVyID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdC8vIHRoZSBjZWxsIGluIHRoZSByb3cgYWJvdmVcclxuXHRcdFx0XHRpZiAobGluZUluZGV4ID4gMCkge1xyXG5cdFx0XHRcdFx0Y2VsbEFib3ZlID0gYm9keVtsaW5lSW5kZXggLSAxXVtpXTtcclxuXHRcdFx0XHRcdGJvdHRvbUJvcmRlciA9IGNlbGxBYm92ZS5ib3JkZXIgPyBjZWxsQWJvdmUuYm9yZGVyWzNdIDogdGhpcy5sYXlvdXQuZGVmYXVsdEJvcmRlcjtcclxuXHRcdFx0XHRcdGlmIChib3R0b21Cb3JkZXIgJiYgY2VsbEFib3ZlLmJvcmRlckNvbG9yKSB7XHJcblx0XHRcdFx0XHRcdGJvcmRlckNvbG9yID0gY2VsbEFib3ZlLmJvcmRlckNvbG9yWzNdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gdGhlIGN1cnJlbnQgY2VsbFxyXG5cdFx0XHRcdGlmIChsaW5lSW5kZXggPCBib2R5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0Y3VycmVudENlbGwgPSBib2R5W2xpbmVJbmRleF1baV07XHJcblx0XHRcdFx0XHR0b3BCb3JkZXIgPSBjdXJyZW50Q2VsbC5ib3JkZXIgPyBjdXJyZW50Q2VsbC5ib3JkZXJbMV0gOiB0aGlzLmxheW91dC5kZWZhdWx0Qm9yZGVyO1xyXG5cdFx0XHRcdFx0aWYgKHRvcEJvcmRlciAmJiBib3JkZXJDb2xvciA9PSBudWxsICYmIGN1cnJlbnRDZWxsLmJvcmRlckNvbG9yKSB7XHJcblx0XHRcdFx0XHRcdGJvcmRlckNvbG9yID0gY3VycmVudENlbGwuYm9yZGVyQ29sb3JbMV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRzaG91bGREcmF3TGluZSA9IHRvcEJvcmRlciB8fCBib3R0b21Cb3JkZXI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjZWxsQWJvdmUgJiYgY2VsbEFib3ZlLl9yb3dTcGFuQ3VycmVudE9mZnNldCkge1xyXG5cdFx0XHRcdHJvd0NlbGxBYm92ZSA9IGJvZHlbbGluZUluZGV4IC0gMSAtIGNlbGxBYm92ZS5fcm93U3BhbkN1cnJlbnRPZmZzZXRdW2ldO1xyXG5cdFx0XHRcdHJvd0JvdHRvbUJvcmRlciA9IHJvd0NlbGxBYm92ZSAmJiByb3dDZWxsQWJvdmUuYm9yZGVyID8gcm93Q2VsbEFib3ZlLmJvcmRlclszXSA6IHRoaXMubGF5b3V0LmRlZmF1bHRCb3JkZXI7XHJcblx0XHRcdFx0aWYgKHJvd0JvdHRvbUJvcmRlciAmJiByb3dDZWxsQWJvdmUgJiYgcm93Q2VsbEFib3ZlLmJvcmRlckNvbG9yKSB7XHJcblx0XHRcdFx0XHRib3JkZXJDb2xvciA9IHJvd0NlbGxBYm92ZS5ib3JkZXJDb2xvclszXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChib3JkZXJDb2xvciA9PSBudWxsKSB7XHJcblx0XHRcdFx0Ym9yZGVyQ29sb3IgPSBpc0Z1bmN0aW9uKHRoaXMubGF5b3V0LmhMaW5lQ29sb3IpID8gdGhpcy5sYXlvdXQuaExpbmVDb2xvcihsaW5lSW5kZXgsIHRoaXMudGFibGVOb2RlLCBpKSA6IHRoaXMubGF5b3V0LmhMaW5lQ29sb3I7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICghY3VycmVudExpbmUgJiYgc2hvdWxkRHJhd0xpbmUpIHtcclxuXHRcdFx0XHRjdXJyZW50TGluZSA9IHsgbGVmdDogZGF0YS5sZWZ0LCB3aWR0aDogMCB9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoc2hvdWxkRHJhd0xpbmUpIHtcclxuXHRcdFx0XHR2YXIgY29sU3BhbkluZGV4ID0gMDtcclxuXHRcdFx0XHRpZiAocm93Q2VsbEFib3ZlICYmIHJvd0NlbGxBYm92ZS5jb2xTcGFuICYmIHJvd0JvdHRvbUJvcmRlcikge1xyXG5cdFx0XHRcdFx0d2hpbGUgKHJvd0NlbGxBYm92ZS5jb2xTcGFuID4gY29sU3BhbkluZGV4KSB7XHJcblx0XHRcdFx0XHRcdGN1cnJlbnRMaW5lLndpZHRoICs9ICh0aGlzLnJvd1NwYW5EYXRhW2kgKyBjb2xTcGFuSW5kZXgrK10ud2lkdGggfHwgMCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpICs9IGNvbFNwYW5JbmRleCAtIDE7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChjZWxsQWJvdmUgJiYgY2VsbEFib3ZlLmNvbFNwYW4gJiYgYm90dG9tQm9yZGVyKSB7XHJcblx0XHRcdFx0XHR3aGlsZSAoY2VsbEFib3ZlLmNvbFNwYW4gPiBjb2xTcGFuSW5kZXgpIHtcclxuXHRcdFx0XHRcdFx0Y3VycmVudExpbmUud2lkdGggKz0gKHRoaXMucm93U3BhbkRhdGFbaSArIGNvbFNwYW5JbmRleCsrXS53aWR0aCB8fCAwKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGkgKz0gY29sU3BhbkluZGV4IC0gMTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnRDZWxsICYmIGN1cnJlbnRDZWxsLmNvbFNwYW4gJiYgdG9wQm9yZGVyKSB7XHJcblx0XHRcdFx0XHR3aGlsZSAoY3VycmVudENlbGwuY29sU3BhbiA+IGNvbFNwYW5JbmRleCkge1xyXG5cdFx0XHRcdFx0XHRjdXJyZW50TGluZS53aWR0aCArPSAodGhpcy5yb3dTcGFuRGF0YVtpICsgY29sU3BhbkluZGV4KytdLndpZHRoIHx8IDApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aSArPSBjb2xTcGFuSW5kZXggLSAxO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjdXJyZW50TGluZS53aWR0aCArPSAodGhpcy5yb3dTcGFuRGF0YVtpXS53aWR0aCB8fCAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciB5ID0gKG92ZXJyaWRlWSB8fCAwKSArIG9mZnNldDtcclxuXHJcblxyXG5cdFx0XHRpZiAoc2hvdWxkRHJhd0xpbmUpIHtcclxuXHRcdFx0XHRpZiAoY3VycmVudExpbmUgJiYgY3VycmVudExpbmUud2lkdGgpIHtcclxuXHRcdFx0XHRcdHdyaXRlci5hZGRWZWN0b3Ioe1xyXG5cdFx0XHRcdFx0XHR0eXBlOiAnbGluZScsXHJcblx0XHRcdFx0XHRcdHgxOiBjdXJyZW50TGluZS5sZWZ0LFxyXG5cdFx0XHRcdFx0XHR4MjogY3VycmVudExpbmUubGVmdCArIGN1cnJlbnRMaW5lLndpZHRoLFxyXG5cdFx0XHRcdFx0XHR5MTogeSxcclxuXHRcdFx0XHRcdFx0eTI6IHksXHJcblx0XHRcdFx0XHRcdGxpbmVXaWR0aDogbGluZVdpZHRoLFxyXG5cdFx0XHRcdFx0XHRkYXNoOiBkYXNoLFxyXG5cdFx0XHRcdFx0XHRsaW5lQ29sb3I6IGJvcmRlckNvbG9yXHJcblx0XHRcdFx0XHR9LCBmYWxzZSwgb3ZlcnJpZGVZKTtcclxuXHRcdFx0XHRcdGN1cnJlbnRMaW5lID0gbnVsbDtcclxuXHRcdFx0XHRcdGJvcmRlckNvbG9yID0gbnVsbDtcclxuXHRcdFx0XHRcdGNlbGxBYm92ZSA9IG51bGw7XHJcblx0XHRcdFx0XHRjdXJyZW50Q2VsbCA9IG51bGw7XHJcblx0XHRcdFx0XHRyb3dDZWxsQWJvdmUgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHdyaXRlci5jb250ZXh0KCkubW92ZURvd24obGluZVdpZHRoKTtcclxuXHR9XHJcbn07XHJcblxyXG5UYWJsZVByb2Nlc3Nvci5wcm90b3R5cGUuZHJhd1ZlcnRpY2FsTGluZSA9IGZ1bmN0aW9uICh4LCB5MCwgeTEsIHZMaW5lQ29sSW5kZXgsIHdyaXRlciwgdkxpbmVSb3dJbmRleCwgYmVmb3JlVkxpbmVDb2xJbmRleCkge1xyXG5cdHZhciB3aWR0aCA9IHRoaXMubGF5b3V0LnZMaW5lV2lkdGgodkxpbmVDb2xJbmRleCwgdGhpcy50YWJsZU5vZGUpO1xyXG5cdGlmICh3aWR0aCA9PT0gMCkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHR2YXIgc3R5bGUgPSB0aGlzLmxheW91dC52TGluZVN0eWxlKHZMaW5lQ29sSW5kZXgsIHRoaXMudGFibGVOb2RlKTtcclxuXHR2YXIgZGFzaDtcclxuXHRpZiAoc3R5bGUgJiYgc3R5bGUuZGFzaCkge1xyXG5cdFx0ZGFzaCA9IHN0eWxlLmRhc2g7XHJcblx0fVxyXG5cclxuXHR2YXIgYm9keSA9IHRoaXMudGFibGVOb2RlLnRhYmxlLmJvZHk7XHJcblx0dmFyIGNlbGxCZWZvcmU7XHJcblx0dmFyIGN1cnJlbnRDZWxsO1xyXG5cdHZhciBib3JkZXJDb2xvcjtcclxuXHJcblx0Ly8gdGhlIGNlbGwgaW4gdGhlIGNvbCBiZWZvcmVcclxuXHRpZiAodkxpbmVDb2xJbmRleCA+IDApIHtcclxuXHRcdGNlbGxCZWZvcmUgPSBib2R5W3ZMaW5lUm93SW5kZXhdW2JlZm9yZVZMaW5lQ29sSW5kZXhdO1xyXG5cdFx0aWYgKGNlbGxCZWZvcmUgJiYgY2VsbEJlZm9yZS5ib3JkZXJDb2xvcikge1xyXG5cdFx0XHRpZiAoY2VsbEJlZm9yZS5ib3JkZXIgPyBjZWxsQmVmb3JlLmJvcmRlclsyXSA6IHRoaXMubGF5b3V0LmRlZmF1bHRCb3JkZXIpIHtcclxuXHRcdFx0XHRib3JkZXJDb2xvciA9IGNlbGxCZWZvcmUuYm9yZGVyQ29sb3JbMl07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIHRoZSBjdXJyZW50IGNlbGxcclxuXHRpZiAoYm9yZGVyQ29sb3IgPT0gbnVsbCAmJiB2TGluZUNvbEluZGV4IDwgYm9keS5sZW5ndGgpIHtcclxuXHRcdGN1cnJlbnRDZWxsID0gYm9keVt2TGluZVJvd0luZGV4XVt2TGluZUNvbEluZGV4XTtcclxuXHRcdGlmIChjdXJyZW50Q2VsbCAmJiBjdXJyZW50Q2VsbC5ib3JkZXJDb2xvcikge1xyXG5cdFx0XHRpZiAoY3VycmVudENlbGwuYm9yZGVyID8gY3VycmVudENlbGwuYm9yZGVyWzBdIDogdGhpcy5sYXlvdXQuZGVmYXVsdEJvcmRlcikge1xyXG5cdFx0XHRcdGJvcmRlckNvbG9yID0gY3VycmVudENlbGwuYm9yZGVyQ29sb3JbMF07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmIChib3JkZXJDb2xvciA9PSBudWxsICYmIGNlbGxCZWZvcmUgJiYgY2VsbEJlZm9yZS5fcm93U3BhbkN1cnJlbnRPZmZzZXQpIHtcclxuXHRcdHZhciByb3dDZWxsQmVmb3JlQWJvdmUgPSBib2R5W3ZMaW5lUm93SW5kZXggLSBjZWxsQmVmb3JlLl9yb3dTcGFuQ3VycmVudE9mZnNldF1bYmVmb3JlVkxpbmVDb2xJbmRleF07XHJcblx0XHRpZiAocm93Q2VsbEJlZm9yZUFib3ZlLmJvcmRlckNvbG9yKSB7XHJcblx0XHRcdGlmIChyb3dDZWxsQmVmb3JlQWJvdmUuYm9yZGVyID8gcm93Q2VsbEJlZm9yZUFib3ZlLmJvcmRlclsyXSA6IHRoaXMubGF5b3V0LmRlZmF1bHRCb3JkZXIpIHtcclxuXHRcdFx0XHRib3JkZXJDb2xvciA9IHJvd0NlbGxCZWZvcmVBYm92ZS5ib3JkZXJDb2xvclsyXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKGJvcmRlckNvbG9yID09IG51bGwgJiYgY3VycmVudENlbGwgJiYgY3VycmVudENlbGwuX3Jvd1NwYW5DdXJyZW50T2Zmc2V0KSB7XHJcblx0XHR2YXIgcm93Q3VycmVudENlbGxBYm92ZSA9IGJvZHlbdkxpbmVSb3dJbmRleCAtIGN1cnJlbnRDZWxsLl9yb3dTcGFuQ3VycmVudE9mZnNldF1bdkxpbmVDb2xJbmRleF07XHJcblx0XHRpZiAocm93Q3VycmVudENlbGxBYm92ZS5ib3JkZXJDb2xvcikge1xyXG5cdFx0XHRpZiAocm93Q3VycmVudENlbGxBYm92ZS5ib3JkZXIgPyByb3dDdXJyZW50Q2VsbEFib3ZlLmJvcmRlclsyXSA6IHRoaXMubGF5b3V0LmRlZmF1bHRCb3JkZXIpIHtcclxuXHRcdFx0XHRib3JkZXJDb2xvciA9IHJvd0N1cnJlbnRDZWxsQWJvdmUuYm9yZGVyQ29sb3JbMl07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmIChib3JkZXJDb2xvciA9PSBudWxsKSB7XHJcblx0XHRib3JkZXJDb2xvciA9IGlzRnVuY3Rpb24odGhpcy5sYXlvdXQudkxpbmVDb2xvcikgPyB0aGlzLmxheW91dC52TGluZUNvbG9yKHZMaW5lQ29sSW5kZXgsIHRoaXMudGFibGVOb2RlLCB2TGluZVJvd0luZGV4KSA6IHRoaXMubGF5b3V0LnZMaW5lQ29sb3I7XHJcblx0fVxyXG5cdHdyaXRlci5hZGRWZWN0b3Ioe1xyXG5cdFx0dHlwZTogJ2xpbmUnLFxyXG5cdFx0eDE6IHggKyB3aWR0aCAvIDIsXHJcblx0XHR4MjogeCArIHdpZHRoIC8gMixcclxuXHRcdHkxOiB5MCxcclxuXHRcdHkyOiB5MSxcclxuXHRcdGxpbmVXaWR0aDogd2lkdGgsXHJcblx0XHRkYXNoOiBkYXNoLFxyXG5cdFx0bGluZUNvbG9yOiBib3JkZXJDb2xvclxyXG5cdH0sIGZhbHNlLCB0cnVlKTtcclxuXHRjZWxsQmVmb3JlID0gbnVsbDtcclxuXHRjdXJyZW50Q2VsbCA9IG51bGw7XHJcblx0Ym9yZGVyQ29sb3IgPSBudWxsO1xyXG59O1xyXG5cclxuVGFibGVQcm9jZXNzb3IucHJvdG90eXBlLmVuZFRhYmxlID0gZnVuY3Rpb24gKHdyaXRlcikge1xyXG5cdGlmICh0aGlzLmNsZWFuVXBSZXBlYXRhYmxlcykge1xyXG5cdFx0d3JpdGVyLnBvcEZyb21SZXBlYXRhYmxlcygpO1xyXG5cdH1cclxufTtcclxuXHJcblRhYmxlUHJvY2Vzc29yLnByb3RvdHlwZS5lbmRSb3cgPSBmdW5jdGlvbiAocm93SW5kZXgsIHdyaXRlciwgcGFnZUJyZWFrcykge1xyXG5cdHZhciBsLCBpO1xyXG5cdHZhciBzZWxmID0gdGhpcztcclxuXHR3cml0ZXIudHJhY2tlci5zdG9wVHJhY2tpbmcoJ3BhZ2VDaGFuZ2VkJywgdGhpcy5yb3dDYWxsYmFjayk7XHJcblx0d3JpdGVyLmNvbnRleHQoKS5tb3ZlRG93bih0aGlzLmxheW91dC5wYWRkaW5nQm90dG9tKHJvd0luZGV4LCB0aGlzLnRhYmxlTm9kZSkpO1xyXG5cdHdyaXRlci5jb250ZXh0KCkuYXZhaWxhYmxlSGVpZ2h0ICs9IHRoaXMucmVzZXJ2ZWRBdEJvdHRvbTtcclxuXHJcblx0dmFyIGVuZGluZ1BhZ2UgPSB3cml0ZXIuY29udGV4dCgpLnBhZ2U7XHJcblx0dmFyIGVuZGluZ1kgPSB3cml0ZXIuY29udGV4dCgpLnk7XHJcblxyXG5cdHZhciB4cyA9IGdldExpbmVYcygpO1xyXG5cclxuXHR2YXIgeXMgPSBbXTtcclxuXHJcblx0dmFyIGhhc0JyZWFrcyA9IHBhZ2VCcmVha3MgJiYgcGFnZUJyZWFrcy5sZW5ndGggPiAwO1xyXG5cdHZhciBib2R5ID0gdGhpcy50YWJsZU5vZGUudGFibGUuYm9keTtcclxuXHJcblx0eXMucHVzaCh7XHJcblx0XHR5MDogdGhpcy5yb3dUb3BZLFxyXG5cdFx0cGFnZTogaGFzQnJlYWtzID8gcGFnZUJyZWFrc1swXS5wcmV2UGFnZSA6IGVuZGluZ1BhZ2VcclxuXHR9KTtcclxuXHJcblx0aWYgKGhhc0JyZWFrcykge1xyXG5cdFx0Zm9yIChpID0gMCwgbCA9IHBhZ2VCcmVha3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdHZhciBwYWdlQnJlYWsgPSBwYWdlQnJlYWtzW2ldO1xyXG5cdFx0XHR5c1t5cy5sZW5ndGggLSAxXS55MSA9IHBhZ2VCcmVhay5wcmV2WTtcclxuXHJcblx0XHRcdHlzLnB1c2goeyB5MDogcGFnZUJyZWFrLnksIHBhZ2U6IHBhZ2VCcmVhay5wcmV2UGFnZSArIDEgfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR5c1t5cy5sZW5ndGggLSAxXS55MSA9IGVuZGluZ1k7XHJcblxyXG5cdHZhciBza2lwT3JwaGFuZVBhZGRpbmcgPSAoeXNbMF0ueTEgLSB5c1swXS55MCA9PT0gdGhpcy5yb3dQYWRkaW5nVG9wKTtcclxuXHRmb3IgKHZhciB5aSA9IChza2lwT3JwaGFuZVBhZGRpbmcgPyAxIDogMCksIHlsID0geXMubGVuZ3RoOyB5aSA8IHlsOyB5aSsrKSB7XHJcblx0XHR2YXIgd2lsbEJyZWFrID0geWkgPCB5cy5sZW5ndGggLSAxO1xyXG5cdFx0dmFyIHJvd0JyZWFrV2l0aG91dEhlYWRlciA9ICh5aSA+IDAgJiYgIXRoaXMuaGVhZGVyUm93cyk7XHJcblx0XHR2YXIgaHpMaW5lT2Zmc2V0ID0gcm93QnJlYWtXaXRob3V0SGVhZGVyID8gMCA6IHRoaXMudG9wTGluZVdpZHRoO1xyXG5cdFx0dmFyIHkxID0geXNbeWldLnkwO1xyXG5cdFx0dmFyIHkyID0geXNbeWldLnkxO1xyXG5cclxuXHRcdGlmICh3aWxsQnJlYWspIHtcclxuXHRcdFx0eTIgPSB5MiArIHRoaXMucm93UGFkZGluZ0JvdHRvbTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAod3JpdGVyLmNvbnRleHQoKS5wYWdlICE9IHlzW3lpXS5wYWdlKSB7XHJcblx0XHRcdHdyaXRlci5jb250ZXh0KCkucGFnZSA9IHlzW3lpXS5wYWdlO1xyXG5cclxuXHRcdFx0Ly9UT0RPOiBidWdneSwgYXZhaWxhYmxlSGVpZ2h0IHNob3VsZCBiZSB1cGRhdGVkIG9uIGV2ZXJ5IHBhZ2VDaGFuZ2VkIGV2ZW50XHJcblx0XHRcdC8vIFRhYmxlUHJvY2Vzc29yIHNob3VsZCBiZSBwYWdlQ2hhbmdlZCBsaXN0ZW5lciwgaW5zdGVhZCBvZiBwcm9jZXNzUm93XHJcblx0XHRcdHRoaXMucmVzZXJ2ZWRBdEJvdHRvbSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHR2YXIgbGVmdENlbGxCb3JkZXIgPSBmYWxzZTtcclxuXHRcdFx0dmFyIHJpZ2h0Q2VsbEJvcmRlciA9IGZhbHNlO1xyXG5cdFx0XHR2YXIgY29sSW5kZXggPSB4c1tpXS5pbmRleDtcclxuXHJcblx0XHRcdC8vIGN1cnJlbnQgY2VsbFxyXG5cdFx0XHRpZiAoY29sSW5kZXggPCBib2R5W3Jvd0luZGV4XS5sZW5ndGgpIHtcclxuXHRcdFx0XHR2YXIgY2VsbCA9IGJvZHlbcm93SW5kZXhdW2NvbEluZGV4XTtcclxuXHRcdFx0XHRsZWZ0Q2VsbEJvcmRlciA9IGNlbGwuYm9yZGVyID8gY2VsbC5ib3JkZXJbMF0gOiB0aGlzLmxheW91dC5kZWZhdWx0Qm9yZGVyO1xyXG5cdFx0XHRcdHJpZ2h0Q2VsbEJvcmRlciA9IGNlbGwuYm9yZGVyID8gY2VsbC5ib3JkZXJbMl0gOiB0aGlzLmxheW91dC5kZWZhdWx0Qm9yZGVyO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBiZWZvcmUgY2VsbFxyXG5cdFx0XHRpZiAoY29sSW5kZXggPiAwICYmICFsZWZ0Q2VsbEJvcmRlcikge1xyXG5cdFx0XHRcdHZhciBjZWxsID0gYm9keVtyb3dJbmRleF1bY29sSW5kZXggLSAxXTtcclxuXHRcdFx0XHRsZWZ0Q2VsbEJvcmRlciA9IGNlbGwuYm9yZGVyID8gY2VsbC5ib3JkZXJbMl0gOiB0aGlzLmxheW91dC5kZWZhdWx0Qm9yZGVyO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBhZnRlciBjZWxsXHJcblx0XHRcdGlmIChjb2xJbmRleCArIDEgPCBib2R5W3Jvd0luZGV4XS5sZW5ndGggJiYgIXJpZ2h0Q2VsbEJvcmRlcikge1xyXG5cdFx0XHRcdHZhciBjZWxsID0gYm9keVtyb3dJbmRleF1bY29sSW5kZXggKyAxXTtcclxuXHRcdFx0XHRyaWdodENlbGxCb3JkZXIgPSBjZWxsLmJvcmRlciA/IGNlbGwuYm9yZGVyWzBdIDogdGhpcy5sYXlvdXQuZGVmYXVsdEJvcmRlcjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGxlZnRDZWxsQm9yZGVyKSB7XHJcblx0XHRcdFx0dGhpcy5kcmF3VmVydGljYWxMaW5lKHhzW2ldLngsIHkxIC0gaHpMaW5lT2Zmc2V0LCB5MiArIHRoaXMuYm90dG9tTGluZVdpZHRoLCB4c1tpXS5pbmRleCwgd3JpdGVyLCByb3dJbmRleCwgeHNbaSAtIDFdID8geHNbaSAtIDFdLmluZGV4IDogbnVsbCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChpIDwgbCAtIDEpIHtcclxuXHRcdFx0XHR2YXIgZmlsbENvbG9yID0gYm9keVtyb3dJbmRleF1bY29sSW5kZXhdLmZpbGxDb2xvcjtcclxuXHRcdFx0XHR2YXIgZmlsbE9wYWNpdHkgPSBib2R5W3Jvd0luZGV4XVtjb2xJbmRleF0uZmlsbE9wYWNpdHk7XHJcblx0XHRcdFx0aWYgKCFmaWxsQ29sb3IpIHtcclxuXHRcdFx0XHRcdGZpbGxDb2xvciA9IGlzRnVuY3Rpb24odGhpcy5sYXlvdXQuZmlsbENvbG9yKSA/IHRoaXMubGF5b3V0LmZpbGxDb2xvcihyb3dJbmRleCwgdGhpcy50YWJsZU5vZGUsIGNvbEluZGV4KSA6IHRoaXMubGF5b3V0LmZpbGxDb2xvcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCFpc051bWJlcihmaWxsT3BhY2l0eSkpIHtcclxuXHRcdFx0XHRcdGZpbGxPcGFjaXR5ID0gaXNGdW5jdGlvbih0aGlzLmxheW91dC5maWxsT3BhY2l0eSkgPyB0aGlzLmxheW91dC5maWxsT3BhY2l0eShyb3dJbmRleCwgdGhpcy50YWJsZU5vZGUsIGNvbEluZGV4KSA6IHRoaXMubGF5b3V0LmZpbGxPcGFjaXR5O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgb3ZlcmxheVBhdHRlcm4gPSBib2R5W3Jvd0luZGV4XVtjb2xJbmRleF0ub3ZlcmxheVBhdHRlcm47XHJcblx0XHRcdFx0dmFyIG92ZXJsYXlPcGFjaXR5ID0gYm9keVtyb3dJbmRleF1bY29sSW5kZXhdLm92ZXJsYXlPcGFjaXR5O1xyXG5cdFx0XHRcdGlmIChmaWxsQ29sb3IgfHwgb3ZlcmxheVBhdHRlcm4pIHtcclxuXHRcdFx0XHRcdHZhciB3aWR0aExlZnRCb3JkZXIgPSBsZWZ0Q2VsbEJvcmRlciA/IHRoaXMubGF5b3V0LnZMaW5lV2lkdGgoY29sSW5kZXgsIHRoaXMudGFibGVOb2RlKSA6IDA7XHJcblx0XHRcdFx0XHR2YXIgd2lkdGhSaWdodEJvcmRlcjtcclxuXHRcdFx0XHRcdGlmICgoY29sSW5kZXggPT09IDAgfHwgY29sSW5kZXggKyAxID09IGJvZHlbcm93SW5kZXhdLmxlbmd0aCkgJiYgIXJpZ2h0Q2VsbEJvcmRlcikge1xyXG5cdFx0XHRcdFx0XHR3aWR0aFJpZ2h0Qm9yZGVyID0gdGhpcy5sYXlvdXQudkxpbmVXaWR0aChjb2xJbmRleCArIDEsIHRoaXMudGFibGVOb2RlKTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAocmlnaHRDZWxsQm9yZGVyKSB7XHJcblx0XHRcdFx0XHRcdHdpZHRoUmlnaHRCb3JkZXIgPSB0aGlzLmxheW91dC52TGluZVdpZHRoKGNvbEluZGV4ICsgMSwgdGhpcy50YWJsZU5vZGUpIC8gMjtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHdpZHRoUmlnaHRCb3JkZXIgPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciB4MWYgPSB0aGlzLmRvbnRCcmVha1Jvd3MgPyB4c1tpXS54ICsgd2lkdGhMZWZ0Qm9yZGVyIDogeHNbaV0ueCArICh3aWR0aExlZnRCb3JkZXIgLyAyKTtcclxuXHRcdFx0XHRcdHZhciB5MWYgPSB0aGlzLmRvbnRCcmVha1Jvd3MgPyB5MSA6IHkxIC0gKGh6TGluZU9mZnNldCAvIDIpO1xyXG5cdFx0XHRcdFx0dmFyIHgyZiA9IHhzW2kgKyAxXS54ICsgd2lkdGhSaWdodEJvcmRlcjtcclxuXHRcdFx0XHRcdHZhciB5MmYgPSB0aGlzLmRvbnRCcmVha1Jvd3MgPyB5MiArIHRoaXMuYm90dG9tTGluZVdpZHRoIDogeTIgKyAodGhpcy5ib3R0b21MaW5lV2lkdGggLyAyKTtcclxuXHRcdFx0XHRcdHZhciBiZ1dpZHRoID0geDJmIC0geDFmO1xyXG5cdFx0XHRcdFx0dmFyIGJnSGVpZ2h0ID0geTJmIC0geTFmO1xyXG5cdFx0XHRcdFx0aWYgKGZpbGxDb2xvcikge1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIuYWRkVmVjdG9yKHtcclxuXHRcdFx0XHRcdFx0XHR0eXBlOiAncmVjdCcsXHJcblx0XHRcdFx0XHRcdFx0eDogeDFmLFxyXG5cdFx0XHRcdFx0XHRcdHk6IHkxZixcclxuXHRcdFx0XHRcdFx0XHR3OiBiZ1dpZHRoLFxyXG5cdFx0XHRcdFx0XHRcdGg6IGJnSGVpZ2h0LFxyXG5cdFx0XHRcdFx0XHRcdGxpbmVXaWR0aDogMCxcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogZmlsbENvbG9yLFxyXG5cdFx0XHRcdFx0XHRcdGZpbGxPcGFjaXR5OiBmaWxsT3BhY2l0eVxyXG5cdFx0XHRcdFx0XHR9LCBmYWxzZSwgdHJ1ZSwgd3JpdGVyLmNvbnRleHQoKS5iYWNrZ3JvdW5kTGVuZ3RoW3dyaXRlci5jb250ZXh0KCkucGFnZV0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChvdmVybGF5UGF0dGVybikge1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIuYWRkVmVjdG9yKHtcclxuXHRcdFx0XHRcdFx0XHR0eXBlOiAncmVjdCcsXHJcblx0XHRcdFx0XHRcdFx0eDogeDFmLFxyXG5cdFx0XHRcdFx0XHRcdHk6IHkxZixcclxuXHRcdFx0XHRcdFx0XHR3OiBiZ1dpZHRoLFxyXG5cdFx0XHRcdFx0XHRcdGg6IGJnSGVpZ2h0LFxyXG5cdFx0XHRcdFx0XHRcdGxpbmVXaWR0aDogMCxcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogb3ZlcmxheVBhdHRlcm4sXHJcblx0XHRcdFx0XHRcdFx0ZmlsbE9wYWNpdHk6IG92ZXJsYXlPcGFjaXR5XHJcblx0XHRcdFx0XHRcdH0sIGZhbHNlLCB0cnVlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAod2lsbEJyZWFrICYmIHRoaXMubGF5b3V0LmhMaW5lV2hlbkJyb2tlbiAhPT0gZmFsc2UpIHtcclxuXHRcdFx0dGhpcy5kcmF3SG9yaXpvbnRhbExpbmUocm93SW5kZXggKyAxLCB3cml0ZXIsIHkyKTtcclxuXHRcdH1cclxuXHRcdGlmIChyb3dCcmVha1dpdGhvdXRIZWFkZXIgJiYgdGhpcy5sYXlvdXQuaExpbmVXaGVuQnJva2VuICE9PSBmYWxzZSkge1xyXG5cdFx0XHR0aGlzLmRyYXdIb3Jpem9udGFsTGluZShyb3dJbmRleCwgd3JpdGVyLCB5MSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR3cml0ZXIuY29udGV4dCgpLnBhZ2UgPSBlbmRpbmdQYWdlO1xyXG5cdHdyaXRlci5jb250ZXh0KCkueSA9IGVuZGluZ1k7XHJcblxyXG5cdHZhciByb3cgPSB0aGlzLnRhYmxlTm9kZS50YWJsZS5ib2R5W3Jvd0luZGV4XTtcclxuXHRmb3IgKGkgPSAwLCBsID0gcm93Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0aWYgKHJvd1tpXS5yb3dTcGFuKSB7XHJcblx0XHRcdHRoaXMucm93U3BhbkRhdGFbaV0ucm93U3BhbiA9IHJvd1tpXS5yb3dTcGFuO1xyXG5cclxuXHRcdFx0Ly8gZml4IGNvbFNwYW5zXHJcblx0XHRcdGlmIChyb3dbaV0uY29sU3BhbiAmJiByb3dbaV0uY29sU3BhbiA+IDEpIHtcclxuXHRcdFx0XHRmb3IgKHZhciBqID0gMTsgaiA8IHJvd1tpXS5yb3dTcGFuOyBqKyspIHtcclxuXHRcdFx0XHRcdHRoaXMudGFibGVOb2RlLnRhYmxlLmJvZHlbcm93SW5kZXggKyBqXVtpXS5fY29sU3BhbiA9IHJvd1tpXS5jb2xTcGFuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBmaXggcm93U3BhbnNcclxuXHRcdFx0aWYgKHJvd1tpXS5yb3dTcGFuICYmIHJvd1tpXS5yb3dTcGFuID4gMSkge1xyXG5cdFx0XHRcdGZvciAodmFyIGogPSAxOyBqIDwgcm93W2ldLnJvd1NwYW47IGorKykge1xyXG5cdFx0XHRcdFx0dGhpcy50YWJsZU5vZGUudGFibGUuYm9keVtyb3dJbmRleCArIGpdW2ldLl9yb3dTcGFuQ3VycmVudE9mZnNldCA9IGo7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMucm93U3BhbkRhdGFbaV0ucm93U3BhbiA+IDApIHtcclxuXHRcdFx0dGhpcy5yb3dTcGFuRGF0YVtpXS5yb3dTcGFuLS07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR0aGlzLmRyYXdIb3Jpem9udGFsTGluZShyb3dJbmRleCArIDEsIHdyaXRlcik7XHJcblxyXG5cdGlmICh0aGlzLmhlYWRlclJvd3MgJiYgcm93SW5kZXggPT09IHRoaXMuaGVhZGVyUm93cyAtIDEpIHtcclxuXHRcdHRoaXMuaGVhZGVyUmVwZWF0YWJsZSA9IHdyaXRlci5jdXJyZW50QmxvY2tUb1JlcGVhdGFibGUoKTtcclxuXHR9XHJcblxyXG5cdGlmICh0aGlzLmRvbnRCcmVha1Jvd3MpIHtcclxuXHRcdHdyaXRlci50cmFja2VyLmF1dG8oJ3BhZ2VDaGFuZ2VkJyxcclxuXHRcdFx0ZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdGlmICghc2VsZi5oZWFkZXJSb3dzICYmIHNlbGYubGF5b3V0LmhMaW5lV2hlbkJyb2tlbiAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdHNlbGYuZHJhd0hvcml6b250YWxMaW5lKHJvd0luZGV4LCB3cml0ZXIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0ZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHdyaXRlci5jb21taXRVbmJyZWFrYWJsZUJsb2NrKCk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRpZiAodGhpcy5oZWFkZXJSZXBlYXRhYmxlICYmIChyb3dJbmRleCA9PT0gKHRoaXMucm93c1dpdGhvdXRQYWdlQnJlYWsgLSAxKSB8fCByb3dJbmRleCA9PT0gdGhpcy50YWJsZU5vZGUudGFibGUuYm9keS5sZW5ndGggLSAxKSkge1xyXG5cdFx0d3JpdGVyLmNvbW1pdFVuYnJlYWthYmxlQmxvY2soKTtcclxuXHRcdHdyaXRlci5wdXNoVG9SZXBlYXRhYmxlcyh0aGlzLmhlYWRlclJlcGVhdGFibGUpO1xyXG5cdFx0dGhpcy5jbGVhblVwUmVwZWF0YWJsZXMgPSB0cnVlO1xyXG5cdFx0dGhpcy5oZWFkZXJSZXBlYXRhYmxlID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldExpbmVYcygpIHtcclxuXHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdHZhciBjb2xzID0gMDtcclxuXHJcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHNlbGYudGFibGVOb2RlLnRhYmxlLmJvZHlbcm93SW5kZXhdLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRpZiAoIWNvbHMpIHtcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh7IHg6IHNlbGYucm93U3BhbkRhdGFbaV0ubGVmdCwgaW5kZXg6IGkgfSk7XHJcblxyXG5cdFx0XHRcdHZhciBpdGVtID0gc2VsZi50YWJsZU5vZGUudGFibGUuYm9keVtyb3dJbmRleF1baV07XHJcblx0XHRcdFx0Y29scyA9IChpdGVtLl9jb2xTcGFuIHx8IGl0ZW0uY29sU3BhbiB8fCAwKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoY29scyA+IDApIHtcclxuXHRcdFx0XHRjb2xzLS07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucHVzaCh7IHg6IHNlbGYucm93U3BhbkRhdGFbc2VsZi5yb3dTcGFuRGF0YS5sZW5ndGggLSAxXS5sZWZ0LCBpbmRleDogc2VsZi5yb3dTcGFuRGF0YS5sZW5ndGggLSAxIH0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUYWJsZVByb2Nlc3NvcjtcclxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNDk3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXHJcblxyXG52YXIgaXNBcnJheSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzQXJyYXkpO1xyXG52YXIgaXNQYXR0ZXJuID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNQYXR0ZXJuKTtcclxudmFyIGdldFBhdHRlcm4gPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5nZXRQYXR0ZXJuKTtcclxuXHJcbmZ1bmN0aW9uIGdyb3VwRGVjb3JhdGlvbnMobGluZSkge1xyXG5cdHZhciBncm91cHMgPSBbXSwgY3VycmVudEdyb3VwID0gbnVsbDtcclxuXHRmb3IgKHZhciBpID0gMCwgbCA9IGxpbmUuaW5saW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdHZhciBpbmxpbmUgPSBsaW5lLmlubGluZXNbaV07XHJcblx0XHR2YXIgZGVjb3JhdGlvbiA9IGlubGluZS5kZWNvcmF0aW9uO1xyXG5cdFx0aWYgKCFkZWNvcmF0aW9uKSB7XHJcblx0XHRcdGN1cnJlbnRHcm91cCA9IG51bGw7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFpc0FycmF5KGRlY29yYXRpb24pKSB7XHJcblx0XHRcdGRlY29yYXRpb24gPSBbZGVjb3JhdGlvbl07XHJcblx0XHR9XHJcblx0XHR2YXIgY29sb3IgPSBpbmxpbmUuZGVjb3JhdGlvbkNvbG9yIHx8IGlubGluZS5jb2xvciB8fCAnYmxhY2snO1xyXG5cdFx0dmFyIHN0eWxlID0gaW5saW5lLmRlY29yYXRpb25TdHlsZSB8fCAnc29saWQnO1xyXG5cdFx0Zm9yICh2YXIgaWkgPSAwLCBsbCA9IGRlY29yYXRpb24ubGVuZ3RoOyBpaSA8IGxsOyBpaSsrKSB7XHJcblx0XHRcdHZhciBkZWNvcmF0aW9uSXRlbSA9IGRlY29yYXRpb25baWldO1xyXG5cdFx0XHRpZiAoIWN1cnJlbnRHcm91cCB8fCBkZWNvcmF0aW9uSXRlbSAhPT0gY3VycmVudEdyb3VwLmRlY29yYXRpb24gfHxcclxuXHRcdFx0XHRzdHlsZSAhPT0gY3VycmVudEdyb3VwLmRlY29yYXRpb25TdHlsZSB8fCBjb2xvciAhPT0gY3VycmVudEdyb3VwLmRlY29yYXRpb25Db2xvcikge1xyXG5cclxuXHRcdFx0XHRjdXJyZW50R3JvdXAgPSB7XHJcblx0XHRcdFx0XHRsaW5lOiBsaW5lLFxyXG5cdFx0XHRcdFx0ZGVjb3JhdGlvbjogZGVjb3JhdGlvbkl0ZW0sXHJcblx0XHRcdFx0XHRkZWNvcmF0aW9uQ29sb3I6IGNvbG9yLFxyXG5cdFx0XHRcdFx0ZGVjb3JhdGlvblN0eWxlOiBzdHlsZSxcclxuXHRcdFx0XHRcdGlubGluZXM6IFtpbmxpbmVdXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRncm91cHMucHVzaChjdXJyZW50R3JvdXApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGN1cnJlbnRHcm91cC5pbmxpbmVzLnB1c2goaW5saW5lKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGdyb3VwcztcclxufVxyXG5cclxuZnVuY3Rpb24gZHJhd0RlY29yYXRpb24oZ3JvdXAsIHgsIHksIHBkZktpdERvYykge1xyXG5cdGZ1bmN0aW9uIG1heElubGluZSgpIHtcclxuXHRcdHZhciBtYXggPSAwO1xyXG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBncm91cC5pbmxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHR2YXIgaW5saW5lID0gZ3JvdXAuaW5saW5lc1tpXTtcclxuXHRcdFx0bWF4ID0gaW5saW5lLmZvbnRTaXplID4gbWF4ID8gaSA6IG1heDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBncm91cC5pbmxpbmVzW21heF07XHJcblx0fVxyXG5cdGZ1bmN0aW9uIHdpZHRoKCkge1xyXG5cdFx0dmFyIHN1bSA9IDA7XHJcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGdyb3VwLmlubGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdHZhciBqdXN0aWZ5U2hpZnQgPSAoZ3JvdXAuaW5saW5lc1tpXS5qdXN0aWZ5U2hpZnQgfHwgMCk7XHJcblx0XHRcdHN1bSArPSBncm91cC5pbmxpbmVzW2ldLndpZHRoICsganVzdGlmeVNoaWZ0O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHN1bTtcclxuXHR9XHJcblx0dmFyIGZpcnN0SW5saW5lID0gZ3JvdXAuaW5saW5lc1swXSxcclxuXHRcdGJpZ2dlcklubGluZSA9IG1heElubGluZSgpLFxyXG5cdFx0dG90YWxXaWR0aCA9IHdpZHRoKCksXHJcblx0XHRsaW5lQXNjZW50ID0gZ3JvdXAubGluZS5nZXRBc2NlbmRlckhlaWdodCgpLFxyXG5cdFx0YXNjZW50ID0gYmlnZ2VySW5saW5lLmZvbnQuYXNjZW5kZXIgLyAxMDAwICogYmlnZ2VySW5saW5lLmZvbnRTaXplLFxyXG5cdFx0aGVpZ2h0ID0gYmlnZ2VySW5saW5lLmhlaWdodCxcclxuXHRcdGRlc2NlbnQgPSBoZWlnaHQgLSBhc2NlbnQ7XHJcblxyXG5cdHZhciBsdyA9IDAuNSArIE1hdGguZmxvb3IoTWF0aC5tYXgoYmlnZ2VySW5saW5lLmZvbnRTaXplIC0gOCwgMCkgLyAyKSAqIDAuMTI7XHJcblxyXG5cdHN3aXRjaCAoZ3JvdXAuZGVjb3JhdGlvbikge1xyXG5cdFx0Y2FzZSAndW5kZXJsaW5lJzpcclxuXHRcdFx0eSArPSBsaW5lQXNjZW50ICsgZGVzY2VudCAqIDAuNDU7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnb3ZlcmxpbmUnOlxyXG5cdFx0XHR5ICs9IGxpbmVBc2NlbnQgLSAoYXNjZW50ICogMC44NSk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnbGluZVRocm91Z2gnOlxyXG5cdFx0XHR5ICs9IGxpbmVBc2NlbnQgLSAoYXNjZW50ICogMC4yNSk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0ZGVmYXVsdDpcclxuXHRcdFx0dGhyb3cgJ1Vua293biBkZWNvcmF0aW9uIDogJyArIGdyb3VwLmRlY29yYXRpb247XHJcblx0fVxyXG5cdHBkZktpdERvYy5zYXZlKCk7XHJcblxyXG5cdGlmIChncm91cC5kZWNvcmF0aW9uU3R5bGUgPT09ICdkb3VibGUnKSB7XHJcblx0XHR2YXIgZ2FwID0gTWF0aC5tYXgoMC41LCBsdyAqIDIpO1xyXG5cdFx0cGRmS2l0RG9jLmZpbGxDb2xvcihncm91cC5kZWNvcmF0aW9uQ29sb3IpXHJcblx0XHRcdC5yZWN0KHggKyBmaXJzdElubGluZS54LCB5IC0gbHcgLyAyLCB0b3RhbFdpZHRoLCBsdyAvIDIpLmZpbGwoKVxyXG5cdFx0XHQucmVjdCh4ICsgZmlyc3RJbmxpbmUueCwgeSArIGdhcCAtIGx3IC8gMiwgdG90YWxXaWR0aCwgbHcgLyAyKS5maWxsKCk7XHJcblx0fSBlbHNlIGlmIChncm91cC5kZWNvcmF0aW9uU3R5bGUgPT09ICdkYXNoZWQnKSB7XHJcblx0XHR2YXIgbmJEYXNoZXMgPSBNYXRoLmNlaWwodG90YWxXaWR0aCAvICgzLjk2ICsgMi44NCkpO1xyXG5cdFx0dmFyIHJkeCA9IHggKyBmaXJzdElubGluZS54O1xyXG5cdFx0cGRmS2l0RG9jLnJlY3QocmR4LCB5LCB0b3RhbFdpZHRoLCBsdykuY2xpcCgpO1xyXG5cdFx0cGRmS2l0RG9jLmZpbGxDb2xvcihncm91cC5kZWNvcmF0aW9uQ29sb3IpO1xyXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuYkRhc2hlczsgaSsrKSB7XHJcblx0XHRcdHBkZktpdERvYy5yZWN0KHJkeCwgeSAtIGx3IC8gMiwgMy45NiwgbHcpLmZpbGwoKTtcclxuXHRcdFx0cmR4ICs9IDMuOTYgKyAyLjg0O1xyXG5cdFx0fVxyXG5cdH0gZWxzZSBpZiAoZ3JvdXAuZGVjb3JhdGlvblN0eWxlID09PSAnZG90dGVkJykge1xyXG5cdFx0dmFyIG5iRG90cyA9IE1hdGguY2VpbCh0b3RhbFdpZHRoIC8gKGx3ICogMykpO1xyXG5cdFx0dmFyIHJ4ID0geCArIGZpcnN0SW5saW5lLng7XHJcblx0XHRwZGZLaXREb2MucmVjdChyeCwgeSwgdG90YWxXaWR0aCwgbHcpLmNsaXAoKTtcclxuXHRcdHBkZktpdERvYy5maWxsQ29sb3IoZ3JvdXAuZGVjb3JhdGlvbkNvbG9yKTtcclxuXHRcdGZvciAodmFyIGlpID0gMDsgaWkgPCBuYkRvdHM7IGlpKyspIHtcclxuXHRcdFx0cGRmS2l0RG9jLnJlY3QocngsIHkgLSBsdyAvIDIsIGx3LCBsdykuZmlsbCgpO1xyXG5cdFx0XHRyeCArPSAobHcgKiAzKTtcclxuXHRcdH1cclxuXHR9IGVsc2UgaWYgKGdyb3VwLmRlY29yYXRpb25TdHlsZSA9PT0gJ3dhdnknKSB7XHJcblx0XHR2YXIgc2ggPSAwLjcsIHN2ID0gMTtcclxuXHRcdHZhciBuYldhdmVzID0gTWF0aC5jZWlsKHRvdGFsV2lkdGggLyAoc2ggKiAyKSkgKyAxO1xyXG5cdFx0dmFyIHJ3eCA9IHggKyBmaXJzdElubGluZS54IC0gMTtcclxuXHRcdHBkZktpdERvYy5yZWN0KHggKyBmaXJzdElubGluZS54LCB5IC0gc3YsIHRvdGFsV2lkdGgsIHkgKyBzdikuY2xpcCgpO1xyXG5cdFx0cGRmS2l0RG9jLmxpbmVXaWR0aCgwLjI0KTtcclxuXHRcdHBkZktpdERvYy5tb3ZlVG8ocnd4LCB5KTtcclxuXHRcdGZvciAodmFyIGlpaSA9IDA7IGlpaSA8IG5iV2F2ZXM7IGlpaSsrKSB7XHJcblx0XHRcdHBkZktpdERvYy5iZXppZXJDdXJ2ZVRvKHJ3eCArIHNoLCB5IC0gc3YsIHJ3eCArIHNoICogMiwgeSAtIHN2LCByd3ggKyBzaCAqIDMsIHkpXHJcblx0XHRcdFx0LmJlemllckN1cnZlVG8ocnd4ICsgc2ggKiA0LCB5ICsgc3YsIHJ3eCArIHNoICogNSwgeSArIHN2LCByd3ggKyBzaCAqIDYsIHkpO1xyXG5cdFx0XHRyd3ggKz0gc2ggKiA2O1xyXG5cdFx0fVxyXG5cdFx0cGRmS2l0RG9jLnN0cm9rZShncm91cC5kZWNvcmF0aW9uQ29sb3IpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRwZGZLaXREb2MuZmlsbENvbG9yKGdyb3VwLmRlY29yYXRpb25Db2xvcilcclxuXHRcdFx0LnJlY3QoeCArIGZpcnN0SW5saW5lLngsIHkgLSBsdyAvIDIsIHRvdGFsV2lkdGgsIGx3KVxyXG5cdFx0XHQuZmlsbCgpO1xyXG5cdH1cclxuXHRwZGZLaXREb2MucmVzdG9yZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3RGVjb3JhdGlvbnMobGluZSwgeCwgeSwgcGRmS2l0RG9jKSB7XHJcblx0dmFyIGdyb3VwcyA9IGdyb3VwRGVjb3JhdGlvbnMobGluZSk7XHJcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBncm91cHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRkcmF3RGVjb3JhdGlvbihncm91cHNbaV0sIHgsIHksIHBkZktpdERvYyk7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBkcmF3QmFja2dyb3VuZChsaW5lLCB4LCB5LCBwYXR0ZXJucywgcGRmS2l0RG9jKSB7XHJcblx0dmFyIGhlaWdodCA9IGxpbmUuZ2V0SGVpZ2h0KCk7XHJcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBsaW5lLmlubGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHR2YXIgaW5saW5lID0gbGluZS5pbmxpbmVzW2ldO1xyXG5cdFx0aWYgKCFpbmxpbmUuYmFja2dyb3VuZCkge1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHRcdHZhciBjb2xvciA9IGlubGluZS5iYWNrZ3JvdW5kO1xyXG5cdFx0aWYgKGlzUGF0dGVybihpbmxpbmUuYmFja2dyb3VuZCkpIHtcclxuXHRcdFx0Y29sb3IgPSBnZXRQYXR0ZXJuKGlubGluZS5iYWNrZ3JvdW5kLCBwYXR0ZXJucyk7XHJcblx0XHR9XHJcblx0XHR2YXIganVzdGlmeVNoaWZ0ID0gKGlubGluZS5qdXN0aWZ5U2hpZnQgfHwgMCk7XHJcblx0XHRwZGZLaXREb2MuZmlsbENvbG9yKGNvbG9yKVxyXG5cdFx0XHQucmVjdCh4ICsgaW5saW5lLnggLSBqdXN0aWZ5U2hpZnQsIHksIGlubGluZS53aWR0aCArIGp1c3RpZnlTaGlmdCwgaGVpZ2h0KVxyXG5cdFx0XHQuZmlsbCgpO1xyXG5cdH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0ZHJhd0JhY2tncm91bmQ6IGRyYXdCYWNrZ3JvdW5kLFxyXG5cdGRyYXdEZWNvcmF0aW9uczogZHJhd0RlY29yYXRpb25zXHJcbn07XHJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTM1MDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxyXG5cclxudmFyIGlzU3RyaW5nID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNTdHJpbmcpO1xyXG52YXIgaXNOdW1iZXIgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc051bWJlcik7XHJcbnZhciBpc09iamVjdCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyMjUpLmlzT2JqZWN0KTtcclxudmFyIGlzQXJyYXkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MjI1KS5pc0FycmF5KTtcclxudmFyIGlzVW5kZWZpbmVkID0gKF9fd2VicGFja19yZXF1aXJlX18oNjIyNSkuaXNVbmRlZmluZWQpO1xyXG52YXIgTGluZUJyZWFrZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczMzcpO1xyXG5cclxudmFyIExFQURJTkcgPSAvXihcXHMpKy9nO1xyXG52YXIgVFJBSUxJTkcgPSAvKFxccykrJC9nO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVGV4dFRvb2xzIC0gdGV4dCBtZWFzdXJlbWVudCB1dGlsaXR5XHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAcGFyYW0ge0ZvbnRQcm92aWRlcn0gZm9udFByb3ZpZGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBUZXh0VG9vbHMoZm9udFByb3ZpZGVyKSB7XHJcblx0dGhpcy5mb250UHJvdmlkZXIgPSBmb250UHJvdmlkZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBzdHJpbmdzIChvciBpbmxpbmUtZGVmaW5pdGlvbi1vYmplY3RzKSBpbnRvIGEgY29sbGVjdGlvblxyXG4gKiBvZiBpbmxpbmVzIGFuZCBjYWxjdWxhdGVkIG1pbldpZHRoL21heFdpZHRoLlxyXG4gKiBhbmQgdGhlaXIgbWluL21heCB3aWR0aHNcclxuICogQHBhcmFtICB7T2JqZWN0fSB0ZXh0QXJyYXkgLSBhbiBhcnJheSBvZiBpbmxpbmUtZGVmaW5pdGlvbi1vYmplY3RzIChvciBzdHJpbmdzKVxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IHN0eWxlQ29udGV4dFN0YWNrIGN1cnJlbnQgc3R5bGUgc3RhY2tcclxuICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uIG9mIGlubGluZXMsIG1pbldpZHRoLCBtYXhXaWR0aFxyXG4gKi9cclxuVGV4dFRvb2xzLnByb3RvdHlwZS5idWlsZElubGluZXMgPSBmdW5jdGlvbiAodGV4dEFycmF5LCBzdHlsZUNvbnRleHRTdGFjaykge1xyXG5cdHZhciBtZWFzdXJlZCA9IG1lYXN1cmUodGhpcy5mb250UHJvdmlkZXIsIHRleHRBcnJheSwgc3R5bGVDb250ZXh0U3RhY2spO1xyXG5cclxuXHR2YXIgbWluV2lkdGggPSAwLFxyXG5cdFx0bWF4V2lkdGggPSAwLFxyXG5cdFx0Y3VycmVudExpbmVXaWR0aDtcclxuXHJcblx0bWVhc3VyZWQuZm9yRWFjaChmdW5jdGlvbiAoaW5saW5lKSB7XHJcblx0XHRtaW5XaWR0aCA9IE1hdGgubWF4KG1pbldpZHRoLCBpbmxpbmUud2lkdGggLSBpbmxpbmUubGVhZGluZ0N1dCAtIGlubGluZS50cmFpbGluZ0N1dCk7XHJcblxyXG5cdFx0aWYgKCFjdXJyZW50TGluZVdpZHRoKSB7XHJcblx0XHRcdGN1cnJlbnRMaW5lV2lkdGggPSB7IHdpZHRoOiAwLCBsZWFkaW5nQ3V0OiBpbmxpbmUubGVhZGluZ0N1dCwgdHJhaWxpbmdDdXQ6IDAgfTtcclxuXHRcdH1cclxuXHJcblx0XHRjdXJyZW50TGluZVdpZHRoLndpZHRoICs9IGlubGluZS53aWR0aDtcclxuXHRcdGN1cnJlbnRMaW5lV2lkdGgudHJhaWxpbmdDdXQgPSBpbmxpbmUudHJhaWxpbmdDdXQ7XHJcblxyXG5cdFx0bWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgZ2V0VHJpbW1lZFdpZHRoKGN1cnJlbnRMaW5lV2lkdGgpKTtcclxuXHJcblx0XHRpZiAoaW5saW5lLmxpbmVFbmQpIHtcclxuXHRcdFx0Y3VycmVudExpbmVXaWR0aCA9IG51bGw7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdGlmIChnZXRTdHlsZVByb3BlcnR5KHt9LCBzdHlsZUNvbnRleHRTdGFjaywgJ25vV3JhcCcsIGZhbHNlKSkge1xyXG5cdFx0bWluV2lkdGggPSBtYXhXaWR0aDtcclxuXHR9XHJcblxyXG5cdHJldHVybiB7XHJcblx0XHRpdGVtczogbWVhc3VyZWQsXHJcblx0XHRtaW5XaWR0aDogbWluV2lkdGgsXHJcblx0XHRtYXhXaWR0aDogbWF4V2lkdGhcclxuXHR9O1xyXG5cclxuXHRmdW5jdGlvbiBnZXRUcmltbWVkV2lkdGgoaXRlbSkge1xyXG5cdFx0cmV0dXJuIE1hdGgubWF4KDAsIGl0ZW0ud2lkdGggLSBpdGVtLmxlYWRpbmdDdXQgLSBpdGVtLnRyYWlsaW5nQ3V0KTtcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyBzaXplIG9mIHRoZSBzcGVjaWZpZWQgc3RyaW5nICh3aXRob3V0IGJyZWFraW5nIGl0KSB1c2luZyB0aGUgY3VycmVudCBzdHlsZVxyXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHRleHQgICAgICAgICAgICAgIHRleHQgdG8gYmUgbWVhc3VyZWRcclxuICogQHBhcmFtICB7T2JqZWN0fSBzdHlsZUNvbnRleHRTdGFjayBjdXJyZW50IHN0eWxlIHN0YWNrXHJcbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICAgICAgICAgc2l6ZSBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZ1xyXG4gKi9cclxuVGV4dFRvb2xzLnByb3RvdHlwZS5zaXplT2ZTdHJpbmcgPSBmdW5jdGlvbiAodGV4dCwgc3R5bGVDb250ZXh0U3RhY2spIHtcclxuXHR0ZXh0ID0gdGV4dCA/IHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHQvZywgJyAgICAnKSA6ICcnO1xyXG5cclxuXHQvL1RPRE86IHJlZmFjdG9yIC0gZXh0cmFjdCBmcm9tIG1lYXN1cmVcclxuXHR2YXIgZm9udE5hbWUgPSBnZXRTdHlsZVByb3BlcnR5KHt9LCBzdHlsZUNvbnRleHRTdGFjaywgJ2ZvbnQnLCAnUm9ib3RvJyk7XHJcblx0dmFyIGZvbnRTaXplID0gZ2V0U3R5bGVQcm9wZXJ0eSh7fSwgc3R5bGVDb250ZXh0U3RhY2ssICdmb250U2l6ZScsIDEyKTtcclxuXHR2YXIgZm9udEZlYXR1cmVzID0gZ2V0U3R5bGVQcm9wZXJ0eSh7fSwgc3R5bGVDb250ZXh0U3RhY2ssICdmb250RmVhdHVyZXMnLCBudWxsKTtcclxuXHR2YXIgYm9sZCA9IGdldFN0eWxlUHJvcGVydHkoe30sIHN0eWxlQ29udGV4dFN0YWNrLCAnYm9sZCcsIGZhbHNlKTtcclxuXHR2YXIgaXRhbGljcyA9IGdldFN0eWxlUHJvcGVydHkoe30sIHN0eWxlQ29udGV4dFN0YWNrLCAnaXRhbGljcycsIGZhbHNlKTtcclxuXHR2YXIgbGluZUhlaWdodCA9IGdldFN0eWxlUHJvcGVydHkoe30sIHN0eWxlQ29udGV4dFN0YWNrLCAnbGluZUhlaWdodCcsIDEpO1xyXG5cdHZhciBjaGFyYWN0ZXJTcGFjaW5nID0gZ2V0U3R5bGVQcm9wZXJ0eSh7fSwgc3R5bGVDb250ZXh0U3RhY2ssICdjaGFyYWN0ZXJTcGFjaW5nJywgMCk7XHJcblxyXG5cdHZhciBmb250ID0gdGhpcy5mb250UHJvdmlkZXIucHJvdmlkZUZvbnQoZm9udE5hbWUsIGJvbGQsIGl0YWxpY3MpO1xyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0d2lkdGg6IHdpZHRoT2ZTdHJpbmcodGV4dCwgZm9udCwgZm9udFNpemUsIGNoYXJhY3RlclNwYWNpbmcsIGZvbnRGZWF0dXJlcyksXHJcblx0XHRoZWlnaHQ6IGZvbnQubGluZUhlaWdodChmb250U2l6ZSkgKiBsaW5lSGVpZ2h0LFxyXG5cdFx0Zm9udFNpemU6IGZvbnRTaXplLFxyXG5cdFx0bGluZUhlaWdodDogbGluZUhlaWdodCxcclxuXHRcdGFzY2VuZGVyOiBmb250LmFzY2VuZGVyIC8gMTAwMCAqIGZvbnRTaXplLFxyXG5cdFx0ZGVzY2VuZGVyOiBmb250LmRlc2NlbmRlciAvIDEwMDAgKiBmb250U2l6ZVxyXG5cdH07XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyBzaXplIG9mIHRoZSBzcGVjaWZpZWQgcm90YXRlZCBzdHJpbmcgKHdpdGhvdXQgYnJlYWtpbmcgaXQpIHVzaW5nIHRoZSBjdXJyZW50IHN0eWxlXHJcbiAqXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gdGV4dCB0ZXh0IHRvIGJlIG1lYXN1cmVkXHJcbiAqIEBwYXJhbSAge251bWJlcn0gYW5nbGVcclxuICogQHBhcmFtICB7b2JqZWN0fSBzdHlsZUNvbnRleHRTdGFjayBjdXJyZW50IHN0eWxlIHN0YWNrXHJcbiAqIEByZXR1cm5zIHtvYmplY3R9IHNpemUgb2YgdGhlIHNwZWNpZmllZCBzdHJpbmdcclxuICovXHJcblRleHRUb29scy5wcm90b3R5cGUuc2l6ZU9mUm90YXRlZFRleHQgPSBmdW5jdGlvbiAodGV4dCwgYW5nbGUsIHN0eWxlQ29udGV4dFN0YWNrKSB7XHJcblx0dmFyIGFuZ2xlUmFkID0gYW5nbGUgKiBNYXRoLlBJIC8gLTE4MDtcclxuXHR2YXIgc2l6ZSA9IHRoaXMuc2l6ZU9mU3RyaW5nKHRleHQsIHN0eWxlQ29udGV4dFN0YWNrKTtcclxuXHRyZXR1cm4ge1xyXG5cdFx0d2lkdGg6IE1hdGguYWJzKHNpemUuaGVpZ2h0ICogTWF0aC5zaW4oYW5nbGVSYWQpKSArIE1hdGguYWJzKHNpemUud2lkdGggKiBNYXRoLmNvcyhhbmdsZVJhZCkpLFxyXG5cdFx0aGVpZ2h0OiBNYXRoLmFicyhzaXplLndpZHRoICogTWF0aC5zaW4oYW5nbGVSYWQpKSArIE1hdGguYWJzKHNpemUuaGVpZ2h0ICogTWF0aC5jb3MoYW5nbGVSYWQpKVxyXG5cdH07XHJcbn1cclxuXHJcblRleHRUb29scy5wcm90b3R5cGUud2lkdGhPZlN0cmluZyA9IGZ1bmN0aW9uICh0ZXh0LCBmb250LCBmb250U2l6ZSwgY2hhcmFjdGVyU3BhY2luZywgZm9udEZlYXR1cmVzKSB7XHJcblx0cmV0dXJuIHdpZHRoT2ZTdHJpbmcodGV4dCwgZm9udCwgZm9udFNpemUsIGNoYXJhY3RlclNwYWNpbmcsIGZvbnRGZWF0dXJlcyk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBzcGxpdFdvcmRzKHRleHQsIG5vV3JhcCkge1xyXG5cdHZhciByZXN1bHRzID0gW107XHJcblx0dGV4dCA9IHRleHQucmVwbGFjZSgvXFx0L2csICcgICAgJyk7XHJcblxyXG5cdGlmIChub1dyYXApIHtcclxuXHRcdHJlc3VsdHMucHVzaCh7IHRleHQ6IHRleHQgfSk7XHJcblx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHR9XHJcblxyXG5cdHZhciBicmVha2VyID0gbmV3IExpbmVCcmVha2VyKHRleHQpO1xyXG5cdHZhciBsYXN0ID0gMDtcclxuXHR2YXIgYms7XHJcblxyXG5cdHdoaWxlIChiayA9IGJyZWFrZXIubmV4dEJyZWFrKCkpIHtcclxuXHRcdHZhciB3b3JkID0gdGV4dC5zbGljZShsYXN0LCBiay5wb3NpdGlvbik7XHJcblxyXG5cdFx0aWYgKGJrLnJlcXVpcmVkIHx8IHdvcmQubWF0Y2goL1xccj9cXG4kfFxcciQvKSkgeyAvLyBuZXcgbGluZVxyXG5cdFx0XHR3b3JkID0gd29yZC5yZXBsYWNlKC9cXHI/XFxuJHxcXHIkLywgJycpO1xyXG5cdFx0XHRyZXN1bHRzLnB1c2goeyB0ZXh0OiB3b3JkLCBsaW5lRW5kOiB0cnVlIH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmVzdWx0cy5wdXNoKHsgdGV4dDogd29yZCB9KTtcclxuXHRcdH1cclxuXHJcblx0XHRsYXN0ID0gYmsucG9zaXRpb247XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmVzdWx0cztcclxufVxyXG5cclxuZnVuY3Rpb24gY29weVN0eWxlKHNvdXJjZSwgZGVzdGluYXRpb24pIHtcclxuXHRkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uIHx8IHt9O1xyXG5cdHNvdXJjZSA9IHNvdXJjZSB8fCB7fTsgLy9UT0RPOiBkZWZhdWx0IHN0eWxlXHJcblxyXG5cdGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcclxuXHRcdGlmIChrZXkgIT0gJ3RleHQnICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBzb3VyY2Vba2V5XTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBkZXN0aW5hdGlvbjtcclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplVGV4dEFycmF5KGFycmF5LCBzdHlsZUNvbnRleHRTdGFjaykge1xyXG5cdGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcclxuXHRcdHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cikge1xyXG5cdFx0XHR2YXIgY3VycmVudCA9IGlzQXJyYXkoY3VyLnRleHQpID8gZmxhdHRlbihjdXIudGV4dCkgOiBjdXI7XHJcblx0XHRcdHZhciBtb3JlID0gW10uY29uY2F0KGN1cnJlbnQpLnNvbWUoQXJyYXkuaXNBcnJheSk7XHJcblx0XHRcdHJldHVybiBwcmV2LmNvbmNhdChtb3JlID8gZmxhdHRlbihjdXJyZW50KSA6IGN1cnJlbnQpO1xyXG5cdFx0fSwgW10pO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0T25lV29yZChpbmRleCwgd29yZHMsIG5vV3JhcCkge1xyXG5cdFx0aWYgKGlzVW5kZWZpbmVkKHdvcmRzW2luZGV4XSkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHdvcmRzW2luZGV4XS5saW5lRW5kKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciB3b3JkID0gd29yZHNbaW5kZXhdLnRleHQ7XHJcblxyXG5cdFx0aWYgKG5vV3JhcCkge1xyXG5cdFx0XHR2YXIgdG1wV29yZHMgPSBzcGxpdFdvcmRzKG5vcm1hbGl6ZVN0cmluZyh3b3JkKSwgZmFsc2UpO1xyXG5cdFx0XHRpZiAoaXNVbmRlZmluZWQodG1wV29yZHNbdG1wV29yZHMubGVuZ3RoIC0gMV0pKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdFx0d29yZCA9IHRtcFdvcmRzW3RtcFdvcmRzLmxlbmd0aCAtIDFdLnRleHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHdvcmQ7XHJcblx0fVxyXG5cclxuXHR2YXIgcmVzdWx0cyA9IFtdO1xyXG5cclxuXHRpZiAoIWlzQXJyYXkoYXJyYXkpKSB7XHJcblx0XHRhcnJheSA9IFthcnJheV07XHJcblx0fVxyXG5cclxuXHRhcnJheSA9IGZsYXR0ZW4oYXJyYXkpO1xyXG5cclxuXHR2YXIgbGFzdFdvcmQgPSBudWxsO1xyXG5cdGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHR2YXIgaXRlbSA9IGFycmF5W2ldO1xyXG5cdFx0dmFyIHN0eWxlID0gbnVsbDtcclxuXHRcdHZhciB3b3JkcztcclxuXHJcblx0XHR2YXIgbm9XcmFwID0gZ2V0U3R5bGVQcm9wZXJ0eShpdGVtIHx8IHt9LCBzdHlsZUNvbnRleHRTdGFjaywgJ25vV3JhcCcsIGZhbHNlKTtcclxuXHRcdGlmIChpc09iamVjdChpdGVtKSkge1xyXG5cdFx0XHRpZiAoaXRlbS5fdGV4dFJlZiAmJiBpdGVtLl90ZXh0UmVmLl90ZXh0Tm9kZVJlZi50ZXh0KSB7XHJcblx0XHRcdFx0aXRlbS50ZXh0ID0gaXRlbS5fdGV4dFJlZi5fdGV4dE5vZGVSZWYudGV4dDtcclxuXHRcdFx0fVxyXG5cdFx0XHR3b3JkcyA9IHNwbGl0V29yZHMobm9ybWFsaXplU3RyaW5nKGl0ZW0udGV4dCksIG5vV3JhcCk7XHJcblx0XHRcdHN0eWxlID0gY29weVN0eWxlKGl0ZW0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0d29yZHMgPSBzcGxpdFdvcmRzKG5vcm1hbGl6ZVN0cmluZyhpdGVtKSwgbm9XcmFwKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGFzdFdvcmQgJiYgd29yZHMubGVuZ3RoKSB7XHJcblx0XHRcdHZhciBmaXJzdFdvcmQgPSBnZXRPbmVXb3JkKDAsIHdvcmRzLCBub1dyYXApO1xyXG5cclxuXHRcdFx0dmFyIHdyYXBXb3JkcyA9IHNwbGl0V29yZHMobm9ybWFsaXplU3RyaW5nKGxhc3RXb3JkICsgZmlyc3RXb3JkKSwgZmFsc2UpO1xyXG5cdFx0XHRpZiAod3JhcFdvcmRzLmxlbmd0aCA9PT0gMSkge1xyXG5cdFx0XHRcdHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5ub05ld0xpbmUgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yICh2YXIgaTIgPSAwLCBsMiA9IHdvcmRzLmxlbmd0aDsgaTIgPCBsMjsgaTIrKykge1xyXG5cdFx0XHR2YXIgcmVzdWx0ID0ge1xyXG5cdFx0XHRcdHRleHQ6IHdvcmRzW2kyXS50ZXh0XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpZiAod29yZHNbaTJdLmxpbmVFbmQpIHtcclxuXHRcdFx0XHRyZXN1bHQubGluZUVuZCA9IHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvcHlTdHlsZShzdHlsZSwgcmVzdWx0KTtcclxuXHJcblx0XHRcdHJlc3VsdHMucHVzaChyZXN1bHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxhc3RXb3JkID0gbnVsbDtcclxuXHRcdGlmIChpICsgMSA8IGwpIHtcclxuXHRcdFx0bGFzdFdvcmQgPSBnZXRPbmVXb3JkKHdvcmRzLmxlbmd0aCAtIDEsIHdvcmRzLCBub1dyYXApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJlc3VsdHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZyh2YWx1ZSkge1xyXG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XHJcblx0XHRyZXR1cm4gJyc7XHJcblx0fSBlbHNlIGlmIChpc051bWJlcih2YWx1ZSkpIHtcclxuXHRcdHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG5cdH0gZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U3R5bGVQcm9wZXJ0eShpdGVtLCBzdHlsZUNvbnRleHRTdGFjaywgcHJvcGVydHksIGRlZmF1bHRWYWx1ZSkge1xyXG5cdHZhciB2YWx1ZTtcclxuXHJcblx0aWYgKGl0ZW1bcHJvcGVydHldICE9PSB1bmRlZmluZWQgJiYgaXRlbVtwcm9wZXJ0eV0gIT09IG51bGwpIHtcclxuXHRcdC8vIGl0ZW0gZGVmaW5lcyB0aGlzIHByb3BlcnR5XHJcblx0XHRyZXR1cm4gaXRlbVtwcm9wZXJ0eV07XHJcblx0fVxyXG5cclxuXHRpZiAoIXN0eWxlQ29udGV4dFN0YWNrKSB7XHJcblx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG5cdH1cclxuXHJcblx0c3R5bGVDb250ZXh0U3RhY2suYXV0byhpdGVtLCBmdW5jdGlvbiAoKSB7XHJcblx0XHR2YWx1ZSA9IHN0eWxlQ29udGV4dFN0YWNrLmdldFByb3BlcnR5KHByb3BlcnR5KTtcclxuXHR9KTtcclxuXHJcblx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1lYXN1cmUoZm9udFByb3ZpZGVyLCB0ZXh0QXJyYXksIHN0eWxlQ29udGV4dFN0YWNrKSB7XHJcblx0dmFyIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVUZXh0QXJyYXkodGV4dEFycmF5LCBzdHlsZUNvbnRleHRTdGFjayk7XHJcblxyXG5cdGlmIChub3JtYWxpemVkLmxlbmd0aCkge1xyXG5cdFx0dmFyIGxlYWRpbmdJbmRlbnQgPSBnZXRTdHlsZVByb3BlcnR5KG5vcm1hbGl6ZWRbMF0sIHN0eWxlQ29udGV4dFN0YWNrLCAnbGVhZGluZ0luZGVudCcsIDApO1xyXG5cclxuXHRcdGlmIChsZWFkaW5nSW5kZW50KSB7XHJcblx0XHRcdG5vcm1hbGl6ZWRbMF0ubGVhZGluZ0N1dCA9IC1sZWFkaW5nSW5kZW50O1xyXG5cdFx0XHRub3JtYWxpemVkWzBdLmxlYWRpbmdJbmRlbnQgPSBsZWFkaW5nSW5kZW50O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bm9ybWFsaXplZC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcblx0XHR2YXIgZm9udE5hbWUgPSBnZXRTdHlsZVByb3BlcnR5KGl0ZW0sIHN0eWxlQ29udGV4dFN0YWNrLCAnZm9udCcsICdSb2JvdG8nKTtcclxuXHRcdHZhciBmb250U2l6ZSA9IGdldFN0eWxlUHJvcGVydHkoaXRlbSwgc3R5bGVDb250ZXh0U3RhY2ssICdmb250U2l6ZScsIDEyKTtcclxuXHRcdHZhciBmb250RmVhdHVyZXMgPSBnZXRTdHlsZVByb3BlcnR5KGl0ZW0sIHN0eWxlQ29udGV4dFN0YWNrLCAnZm9udEZlYXR1cmVzJywgbnVsbCk7XHJcblx0XHR2YXIgYm9sZCA9IGdldFN0eWxlUHJvcGVydHkoaXRlbSwgc3R5bGVDb250ZXh0U3RhY2ssICdib2xkJywgZmFsc2UpO1xyXG5cdFx0dmFyIGl0YWxpY3MgPSBnZXRTdHlsZVByb3BlcnR5KGl0ZW0sIHN0eWxlQ29udGV4dFN0YWNrLCAnaXRhbGljcycsIGZhbHNlKTtcclxuXHRcdHZhciBjb2xvciA9IGdldFN0eWxlUHJvcGVydHkoaXRlbSwgc3R5bGVDb250ZXh0U3RhY2ssICdjb2xvcicsICdibGFjaycpO1xyXG5cdFx0dmFyIGRlY29yYXRpb24gPSBnZXRTdHlsZVByb3BlcnR5KGl0ZW0sIHN0eWxlQ29udGV4dFN0YWNrLCAnZGVjb3JhdGlvbicsIG51bGwpO1xyXG5cdFx0dmFyIGRlY29yYXRpb25Db2xvciA9IGdldFN0eWxlUHJvcGVydHkoaXRlbSwgc3R5bGVDb250ZXh0U3RhY2ssICdkZWNvcmF0aW9uQ29sb3InLCBudWxsKTtcclxuXHRcdHZhciBkZWNvcmF0aW9uU3R5bGUgPSBnZXRTdHlsZVByb3BlcnR5KGl0ZW0sIHN0eWxlQ29udGV4dFN0YWNrLCAnZGVjb3JhdGlvblN0eWxlJywgbnVsbCk7XHJcblx0XHR2YXIgYmFja2dyb3VuZCA9IGdldFN0eWxlUHJvcGVydHkoaXRlbSwgc3R5bGVDb250ZXh0U3RhY2ssICdiYWNrZ3JvdW5kJywgbnVsbCk7XHJcblx0XHR2YXIgbGluZUhlaWdodCA9IGdldFN0eWxlUHJvcGVydHkoaXRlbSwgc3R5bGVDb250ZXh0U3RhY2ssICdsaW5lSGVpZ2h0JywgMSk7XHJcblx0XHR2YXIgY2hhcmFjdGVyU3BhY2luZyA9IGdldFN0eWxlUHJvcGVydHkoaXRlbSwgc3R5bGVDb250ZXh0U3RhY2ssICdjaGFyYWN0ZXJTcGFjaW5nJywgMCk7XHJcblx0XHR2YXIgbGluayA9IGdldFN0eWxlUHJvcGVydHkoaXRlbSwgc3R5bGVDb250ZXh0U3RhY2ssICdsaW5rJywgbnVsbCk7XHJcblx0XHR2YXIgbGlua1RvUGFnZSA9IGdldFN0eWxlUHJvcGVydHkoaXRlbSwgc3R5bGVDb250ZXh0U3RhY2ssICdsaW5rVG9QYWdlJywgbnVsbCk7XHJcblx0XHR2YXIgbGlua1RvRGVzdGluYXRpb24gPSBnZXRTdHlsZVByb3BlcnR5KGl0ZW0sIHN0eWxlQ29udGV4dFN0YWNrLCAnbGlua1RvRGVzdGluYXRpb24nLCBudWxsKTtcclxuXHRcdHZhciBub1dyYXAgPSBnZXRTdHlsZVByb3BlcnR5KGl0ZW0sIHN0eWxlQ29udGV4dFN0YWNrLCAnbm9XcmFwJywgbnVsbCk7XHJcblx0XHR2YXIgcHJlc2VydmVMZWFkaW5nU3BhY2VzID0gZ2V0U3R5bGVQcm9wZXJ0eShpdGVtLCBzdHlsZUNvbnRleHRTdGFjaywgJ3ByZXNlcnZlTGVhZGluZ1NwYWNlcycsIGZhbHNlKTtcclxuXHRcdHZhciBwcmVzZXJ2ZVRyYWlsaW5nU3BhY2VzID0gZ2V0U3R5bGVQcm9wZXJ0eShpdGVtLCBzdHlsZUNvbnRleHRTdGFjaywgJ3ByZXNlcnZlVHJhaWxpbmdTcGFjZXMnLCBmYWxzZSk7XHJcblx0XHR2YXIgb3BhY2l0eSA9IGdldFN0eWxlUHJvcGVydHkoaXRlbSwgc3R5bGVDb250ZXh0U3RhY2ssICdvcGFjaXR5JywgMSk7XHJcblx0XHR2YXIgc3VwID0gZ2V0U3R5bGVQcm9wZXJ0eShpdGVtLCBzdHlsZUNvbnRleHRTdGFjaywgJ3N1cCcsIGZhbHNlKTtcclxuXHRcdHZhciBzdWIgPSBnZXRTdHlsZVByb3BlcnR5KGl0ZW0sIHN0eWxlQ29udGV4dFN0YWNrLCAnc3ViJywgZmFsc2UpO1xyXG5cclxuXHRcdGlmICgoc3VwIHx8IHN1YikgJiYgaXRlbS5mb250U2l6ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdC8vIGZvbnQgc2l6ZSByZWR1Y3Rpb24gdGFrZW4gZnJvbSBoZXJlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdWJzY3JpcHRfYW5kX3N1cGVyc2NyaXB0I0Rlc2t0b3BfcHVibGlzaGluZ1xyXG5cdFx0XHRmb250U2l6ZSAqPSAwLjU4XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGZvbnQgPSBmb250UHJvdmlkZXIucHJvdmlkZUZvbnQoZm9udE5hbWUsIGJvbGQsIGl0YWxpY3MpO1xyXG5cclxuXHRcdGl0ZW0ud2lkdGggPSB3aWR0aE9mU3RyaW5nKGl0ZW0udGV4dCwgZm9udCwgZm9udFNpemUsIGNoYXJhY3RlclNwYWNpbmcsIGZvbnRGZWF0dXJlcyk7XHJcblx0XHRpdGVtLmhlaWdodCA9IGZvbnQubGluZUhlaWdodChmb250U2l6ZSkgKiBsaW5lSGVpZ2h0O1xyXG5cclxuXHRcdGlmICghaXRlbS5sZWFkaW5nQ3V0KSB7XHJcblx0XHRcdGl0ZW0ubGVhZGluZ0N1dCA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGxlYWRpbmdTcGFjZXM7XHJcblx0XHRpZiAoIXByZXNlcnZlTGVhZGluZ1NwYWNlcyAmJiAobGVhZGluZ1NwYWNlcyA9IGl0ZW0udGV4dC5tYXRjaChMRUFESU5HKSkpIHtcclxuXHRcdFx0aXRlbS5sZWFkaW5nQ3V0ICs9IHdpZHRoT2ZTdHJpbmcobGVhZGluZ1NwYWNlc1swXSwgZm9udCwgZm9udFNpemUsIGNoYXJhY3RlclNwYWNpbmcsIGZvbnRGZWF0dXJlcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIHRyYWlsaW5nU3BhY2VzO1xyXG5cdFx0aWYgKCFwcmVzZXJ2ZVRyYWlsaW5nU3BhY2VzICYmICh0cmFpbGluZ1NwYWNlcyA9IGl0ZW0udGV4dC5tYXRjaChUUkFJTElORykpKSB7XHJcblx0XHRcdGl0ZW0udHJhaWxpbmdDdXQgPSB3aWR0aE9mU3RyaW5nKHRyYWlsaW5nU3BhY2VzWzBdLCBmb250LCBmb250U2l6ZSwgY2hhcmFjdGVyU3BhY2luZywgZm9udEZlYXR1cmVzKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGl0ZW0udHJhaWxpbmdDdXQgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGl0ZW0uYWxpZ25tZW50ID0gZ2V0U3R5bGVQcm9wZXJ0eShpdGVtLCBzdHlsZUNvbnRleHRTdGFjaywgJ2FsaWdubWVudCcsICdsZWZ0Jyk7XHJcblx0XHRpdGVtLmZvbnQgPSBmb250O1xyXG5cdFx0aXRlbS5mb250U2l6ZSA9IGZvbnRTaXplO1xyXG5cdFx0aXRlbS5mb250RmVhdHVyZXMgPSBmb250RmVhdHVyZXM7XHJcblx0XHRpdGVtLmNoYXJhY3RlclNwYWNpbmcgPSBjaGFyYWN0ZXJTcGFjaW5nO1xyXG5cdFx0aXRlbS5jb2xvciA9IGNvbG9yO1xyXG5cdFx0aXRlbS5kZWNvcmF0aW9uID0gZGVjb3JhdGlvbjtcclxuXHRcdGl0ZW0uZGVjb3JhdGlvbkNvbG9yID0gZGVjb3JhdGlvbkNvbG9yO1xyXG5cdFx0aXRlbS5kZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9uU3R5bGU7XHJcblx0XHRpdGVtLmJhY2tncm91bmQgPSBiYWNrZ3JvdW5kO1xyXG5cdFx0aXRlbS5saW5rID0gbGluaztcclxuXHRcdGl0ZW0ubGlua1RvUGFnZSA9IGxpbmtUb1BhZ2U7XHJcblx0XHRpdGVtLmxpbmtUb0Rlc3RpbmF0aW9uID0gbGlua1RvRGVzdGluYXRpb247XHJcblx0XHRpdGVtLm5vV3JhcCA9IG5vV3JhcDtcclxuXHRcdGl0ZW0ub3BhY2l0eSA9IG9wYWNpdHk7XHJcblx0XHRpdGVtLnN1cCA9IHN1cDtcclxuXHRcdGl0ZW0uc3ViID0gc3ViO1xyXG5cdH0pO1xyXG5cclxuXHRyZXR1cm4gbm9ybWFsaXplZDtcclxufVxyXG5cclxuZnVuY3Rpb24gd2lkdGhPZlN0cmluZyh0ZXh0LCBmb250LCBmb250U2l6ZSwgY2hhcmFjdGVyU3BhY2luZywgZm9udEZlYXR1cmVzKSB7XHJcblx0cmV0dXJuIGZvbnQud2lkdGhPZlN0cmluZyh0ZXh0LCBmb250U2l6ZSwgZm9udEZlYXR1cmVzKSArICgoY2hhcmFjdGVyU3BhY2luZyB8fCAwKSAqICh0ZXh0Lmxlbmd0aCAtIDEpKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUZXh0VG9vbHM7XHJcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODUzNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cclxuXHJcbmZ1bmN0aW9uIFRyYXZlcnNhbFRyYWNrZXIoKSB7XHJcblx0dGhpcy5ldmVudHMgPSB7fTtcclxufVxyXG5cclxuVHJhdmVyc2FsVHJhY2tlci5wcm90b3R5cGUuc3RhcnRUcmFja2luZyA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcclxuXHR2YXIgY2FsbGJhY2tzID0gdGhpcy5ldmVudHNbZXZlbnRdIHx8ICh0aGlzLmV2ZW50c1tldmVudF0gPSBbXSk7XHJcblxyXG5cdGlmIChjYWxsYmFja3MuaW5kZXhPZihjYWxsYmFjaykgPCAwKSB7XHJcblx0XHRjYWxsYmFja3MucHVzaChjYWxsYmFjayk7XHJcblx0fVxyXG59O1xyXG5cclxuVHJhdmVyc2FsVHJhY2tlci5wcm90b3R5cGUuc3RvcFRyYWNraW5nID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xyXG5cdHZhciBjYWxsYmFja3MgPSB0aGlzLmV2ZW50c1tldmVudF07XHJcblxyXG5cdGlmICghY2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHR2YXIgaW5kZXggPSBjYWxsYmFja3MuaW5kZXhPZihjYWxsYmFjayk7XHJcblx0aWYgKGluZGV4ID49IDApIHtcclxuXHRcdGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdH1cclxufTtcclxuXHJcblRyYXZlcnNhbFRyYWNrZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuXHR2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XHJcblx0dmFyIGNhbGxiYWNrcyA9IHRoaXMuZXZlbnRzW2V2ZW50XTtcclxuXHJcblx0aWYgKCFjYWxsYmFja3MpIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG5cdFx0Y2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XHJcblx0fSk7XHJcbn07XHJcblxyXG5UcmF2ZXJzYWxUcmFja2VyLnByb3RvdHlwZS5hdXRvID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaywgaW5uZXJGdW5jdGlvbikge1xyXG5cdHRoaXMuc3RhcnRUcmFja2luZyhldmVudCwgY2FsbGJhY2spO1xyXG5cdGlubmVyRnVuY3Rpb24oKTtcclxuXHR0aGlzLnN0b3BUcmFja2luZyhldmVudCwgY2FsbGJhY2spO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUcmF2ZXJzYWxUcmFja2VyO1xyXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI0ODA6XG4vKioqLyAoZnVuY3Rpb24oKSB7XG5cbi8qIChpZ25vcmVkKSAqL1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTgzMjpcbi8qKiovIChmdW5jdGlvbigpIHtcblxuLyogKGlnbm9yZWQpICovXG5cbi8qKiovIH0pLFxuXG4vKioqLyA5ODYyOlxuLyoqKi8gKGZ1bmN0aW9uKCkge1xuXG4vKiAoaWdub3JlZCkgKi9cblxuLyoqKi8gfSksXG5cbi8qKiovIDk2NDpcbi8qKiovIChmdW5jdGlvbigpIHtcblxuLyogKGlnbm9yZWQpICovXG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMDgzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBwb3NzaWJsZU5hbWVzID0gW1xuXHQnQmlnSW50NjRBcnJheScsXG5cdCdCaWdVaW50NjRBcnJheScsXG5cdCdGbG9hdDMyQXJyYXknLFxuXHQnRmxvYXQ2NEFycmF5Jyxcblx0J0ludDE2QXJyYXknLFxuXHQnSW50MzJBcnJheScsXG5cdCdJbnQ4QXJyYXknLFxuXHQnVWludDE2QXJyYXknLFxuXHQnVWludDMyQXJyYXknLFxuXHQnVWludDhBcnJheScsXG5cdCdVaW50OENsYW1wZWRBcnJheSdcbl07XG5cbnZhciBnID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICd1bmRlZmluZWQnID8gX193ZWJwYWNrX3JlcXVpcmVfXy5nIDogZ2xvYmFsVGhpcztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhdmFpbGFibGVUeXBlZEFycmF5cygpIHtcblx0dmFyIG91dCA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHBvc3NpYmxlTmFtZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAodHlwZW9mIGdbcG9zc2libGVOYW1lc1tpXV0gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdG91dFtvdXQubGVuZ3RoXSA9IHBvc3NpYmxlTmFtZXNbaV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA4ODI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIEdldEludHJpbnNpYyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEwKTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKFtdLCAnbGVuZ3RoJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBnT1BEXG5cdFx0JGdPUEQgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gJGdPUEQ7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDM2MzE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRjNUwwaSRiYXNlNjRqcyA9IF9fd2VicGFja19yZXF1aXJlX18oOTc0Mik7XG52YXIgJGM1TDBpJHVuaWNvZGV0cmllID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NzgxKTtcblxuZnVuY3Rpb24gJHBhcmNlbCRpbnRlcm9wRGVmYXVsdChhKSB7XG4gIHJldHVybiBhICYmIGEuX19lc01vZHVsZSA/IGEuZGVmYXVsdCA6IGE7XG59XG5mdW5jdGlvbiAkcGFyY2VsJGRlZmluZUludGVyb3BGbGFnKGEpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsICdfX2VzTW9kdWxlJywge3ZhbHVlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9KTtcbn1cbmZ1bmN0aW9uICRwYXJjZWwkZXhwb3J0KGUsIG4sIHYsIHMpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIG4sIHtnZXQ6IHYsIHNldDogcywgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSk7XG59XG5cbiRwYXJjZWwkZGVmaW5lSW50ZXJvcEZsYWcobW9kdWxlLmV4cG9ydHMpO1xuXG4kcGFyY2VsJGV4cG9ydChtb2R1bGUuZXhwb3J0cywgXCJnZXRDYXRlZ29yeVwiLCAoKSA9PiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkNDEwMzY0YmJiNjczZGRiYyk7XG4kcGFyY2VsJGV4cG9ydChtb2R1bGUuZXhwb3J0cywgXCJnZXRDb21iaW5pbmdDbGFzc1wiLCAoKSA9PiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkYzAzYjkxOWM2NjUxZWQ1NSk7XG4kcGFyY2VsJGV4cG9ydChtb2R1bGUuZXhwb3J0cywgXCJnZXRTY3JpcHRcIiwgKCkgPT4gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDk0MTU2OTQ0OGQxMzY2NjUpO1xuJHBhcmNlbCRleHBvcnQobW9kdWxlLmV4cG9ydHMsIFwiZ2V0RWFzdEFzaWFuV2lkdGhcIiwgKCkgPT4gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDkyZjYxODdkYjhjYTZkMjYpO1xuJHBhcmNlbCRleHBvcnQobW9kdWxlLmV4cG9ydHMsIFwiZ2V0TnVtZXJpY1ZhbHVlXCIsICgpID0+ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ3ZDEyNThlYmI3NjI1YTBkKTtcbiRwYXJjZWwkZXhwb3J0KG1vZHVsZS5leHBvcnRzLCBcImlzQWxwaGFiZXRpY1wiLCAoKSA9PiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkNTJjOGVhNjNhYmQwNzU5NCk7XG4kcGFyY2VsJGV4cG9ydChtb2R1bGUuZXhwb3J0cywgXCJpc0RpZ2l0XCIsICgpID0+ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ3MjdkOWRiYzRmYmI5NDhmKTtcbiRwYXJjZWwkZXhwb3J0KG1vZHVsZS5leHBvcnRzLCBcImlzUHVuY3R1YXRpb25cIiwgKCkgPT4gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JGE1YjQ5ZjRkYzZhMDdkMmMpO1xuJHBhcmNlbCRleHBvcnQobW9kdWxlLmV4cG9ydHMsIFwiaXNMb3dlckNhc2VcIiwgKCkgPT4gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDdiNjgwNGU4ZGY2MWZjZjUpO1xuJHBhcmNlbCRleHBvcnQobW9kdWxlLmV4cG9ydHMsIFwiaXNVcHBlckNhc2VcIiwgKCkgPT4gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JGFlYmQ2MTc2NDA4MThjZGEpO1xuJHBhcmNlbCRleHBvcnQobW9kdWxlLmV4cG9ydHMsIFwiaXNUaXRsZUNhc2VcIiwgKCkgPT4gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JGRlOGI0ZWUyM2IyY2Y4MjMpO1xuJHBhcmNlbCRleHBvcnQobW9kdWxlLmV4cG9ydHMsIFwiaXNXaGl0ZVNwYWNlXCIsICgpID0+ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQzYzUyZGQ4NDAyNGFlNzJjKTtcbiRwYXJjZWwkZXhwb3J0KG1vZHVsZS5leHBvcnRzLCBcImlzQmFzZUZvcm1cIiwgKCkgPT4gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JGExMWJkY2ZmZTEwOWU3NGIpO1xuJHBhcmNlbCRleHBvcnQobW9kdWxlLmV4cG9ydHMsIFwiaXNNYXJrXCIsICgpID0+ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCRlMzNhZDY4NzFlNzYyMzM4KTtcbiRwYXJjZWwkZXhwb3J0KG1vZHVsZS5leHBvcnRzLCBcImRlZmF1bHRcIiwgKCkgPT4gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDJlMmJjZDg3MzlhZTAzOSk7XG5cblxudmFyICQyOTY2OGU2NWYyMDkxYzJjJGV4cG9ydHMgPSB7fTtcbiQyOTY2OGU2NWYyMDkxYzJjJGV4cG9ydHMgPSBKU09OLnBhcnNlKCd7XCJjYXRlZ29yaWVzXCI6W1wiQ2NcIixcIlpzXCIsXCJQb1wiLFwiU2NcIixcIlBzXCIsXCJQZVwiLFwiU21cIixcIlBkXCIsXCJOZFwiLFwiTHVcIixcIlNrXCIsXCJQY1wiLFwiTGxcIixcIlNvXCIsXCJMb1wiLFwiUGlcIixcIkNmXCIsXCJOb1wiLFwiUGZcIixcIkx0XCIsXCJMbVwiLFwiTW5cIixcIk1lXCIsXCJNY1wiLFwiTmxcIixcIlpsXCIsXCJacFwiLFwiQ3NcIixcIkNvXCJdLFwiY29tYmluaW5nQ2xhc3Nlc1wiOltcIk5vdF9SZW9yZGVyZWRcIixcIkFib3ZlXCIsXCJBYm92ZV9SaWdodFwiLFwiQmVsb3dcIixcIkF0dGFjaGVkX0Fib3ZlX1JpZ2h0XCIsXCJBdHRhY2hlZF9CZWxvd1wiLFwiT3ZlcmxheVwiLFwiSW90YV9TdWJzY3JpcHRcIixcIkRvdWJsZV9CZWxvd1wiLFwiRG91YmxlX0Fib3ZlXCIsXCJCZWxvd19SaWdodFwiLFwiQWJvdmVfTGVmdFwiLFwiQ0NDMTBcIixcIkNDQzExXCIsXCJDQ0MxMlwiLFwiQ0NDMTNcIixcIkNDQzE0XCIsXCJDQ0MxNVwiLFwiQ0NDMTZcIixcIkNDQzE3XCIsXCJDQ0MxOFwiLFwiQ0NDMTlcIixcIkNDQzIwXCIsXCJDQ0MyMVwiLFwiQ0NDMjJcIixcIkNDQzIzXCIsXCJDQ0MyNFwiLFwiQ0NDMjVcIixcIkNDQzMwXCIsXCJDQ0MzMVwiLFwiQ0NDMzJcIixcIkNDQzI3XCIsXCJDQ0MyOFwiLFwiQ0NDMjlcIixcIkNDQzMzXCIsXCJDQ0MzNFwiLFwiQ0NDMzVcIixcIkNDQzM2XCIsXCJOdWt0YVwiLFwiVmlyYW1hXCIsXCJDQ0M4NFwiLFwiQ0NDOTFcIixcIkNDQzEwM1wiLFwiQ0NDMTA3XCIsXCJDQ0MxMThcIixcIkNDQzEyMlwiLFwiQ0NDMTI5XCIsXCJDQ0MxMzBcIixcIkNDQzEzMlwiLFwiQXR0YWNoZWRfQWJvdmVcIixcIkJlbG93X0xlZnRcIixcIkxlZnRcIixcIkthbmFfVm9pY2luZ1wiLFwiQ0NDMjZcIixcIlJpZ2h0XCJdLFwic2NyaXB0c1wiOltcIkNvbW1vblwiLFwiTGF0aW5cIixcIkJvcG9tb2ZvXCIsXCJJbmhlcml0ZWRcIixcIkdyZWVrXCIsXCJDb3B0aWNcIixcIkN5cmlsbGljXCIsXCJBcm1lbmlhblwiLFwiSGVicmV3XCIsXCJBcmFiaWNcIixcIlN5cmlhY1wiLFwiVGhhYW5hXCIsXCJOa29cIixcIlNhbWFyaXRhblwiLFwiTWFuZGFpY1wiLFwiRGV2YW5hZ2FyaVwiLFwiQmVuZ2FsaVwiLFwiR3VybXVraGlcIixcIkd1amFyYXRpXCIsXCJPcml5YVwiLFwiVGFtaWxcIixcIlRlbHVndVwiLFwiS2FubmFkYVwiLFwiTWFsYXlhbGFtXCIsXCJTaW5oYWxhXCIsXCJUaGFpXCIsXCJMYW9cIixcIlRpYmV0YW5cIixcIk15YW5tYXJcIixcIkdlb3JnaWFuXCIsXCJIYW5ndWxcIixcIkV0aGlvcGljXCIsXCJDaGVyb2tlZVwiLFwiQ2FuYWRpYW5fQWJvcmlnaW5hbFwiLFwiT2doYW1cIixcIlJ1bmljXCIsXCJUYWdhbG9nXCIsXCJIYW51bm9vXCIsXCJCdWhpZFwiLFwiVGFnYmFud2FcIixcIktobWVyXCIsXCJNb25nb2xpYW5cIixcIkxpbWJ1XCIsXCJUYWlfTGVcIixcIk5ld19UYWlfTHVlXCIsXCJCdWdpbmVzZVwiLFwiVGFpX1RoYW1cIixcIkJhbGluZXNlXCIsXCJTdW5kYW5lc2VcIixcIkJhdGFrXCIsXCJMZXBjaGFcIixcIk9sX0NoaWtpXCIsXCJCcmFpbGxlXCIsXCJHbGFnb2xpdGljXCIsXCJUaWZpbmFnaFwiLFwiSGFuXCIsXCJIaXJhZ2FuYVwiLFwiS2F0YWthbmFcIixcIllpXCIsXCJMaXN1XCIsXCJWYWlcIixcIkJhbXVtXCIsXCJTeWxvdGlfTmFncmlcIixcIlBoYWdzX1BhXCIsXCJTYXVyYXNodHJhXCIsXCJLYXlhaF9MaVwiLFwiUmVqYW5nXCIsXCJKYXZhbmVzZVwiLFwiQ2hhbVwiLFwiVGFpX1ZpZXRcIixcIk1lZXRlaV9NYXlla1wiLFwibnVsbFwiLFwiTGluZWFyX0JcIixcIkx5Y2lhblwiLFwiQ2FyaWFuXCIsXCJPbGRfSXRhbGljXCIsXCJHb3RoaWNcIixcIk9sZF9QZXJtaWNcIixcIlVnYXJpdGljXCIsXCJPbGRfUGVyc2lhblwiLFwiRGVzZXJldFwiLFwiU2hhdmlhblwiLFwiT3NtYW55YVwiLFwiT3NhZ2VcIixcIkVsYmFzYW5cIixcIkNhdWNhc2lhbl9BbGJhbmlhblwiLFwiTGluZWFyX0FcIixcIkN5cHJpb3RcIixcIkltcGVyaWFsX0FyYW1haWNcIixcIlBhbG15cmVuZVwiLFwiTmFiYXRhZWFuXCIsXCJIYXRyYW5cIixcIlBob2VuaWNpYW5cIixcIkx5ZGlhblwiLFwiTWVyb2l0aWNfSGllcm9nbHlwaHNcIixcIk1lcm9pdGljX0N1cnNpdmVcIixcIktoYXJvc2h0aGlcIixcIk9sZF9Tb3V0aF9BcmFiaWFuXCIsXCJPbGRfTm9ydGhfQXJhYmlhblwiLFwiTWFuaWNoYWVhblwiLFwiQXZlc3RhblwiLFwiSW5zY3JpcHRpb25hbF9QYXJ0aGlhblwiLFwiSW5zY3JpcHRpb25hbF9QYWhsYXZpXCIsXCJQc2FsdGVyX1BhaGxhdmlcIixcIk9sZF9UdXJraWNcIixcIk9sZF9IdW5nYXJpYW5cIixcIkhhbmlmaV9Sb2hpbmd5YVwiLFwiT2xkX1NvZ2RpYW5cIixcIlNvZ2RpYW5cIixcIkVseW1haWNcIixcIkJyYWhtaVwiLFwiS2FpdGhpXCIsXCJTb3JhX1NvbXBlbmdcIixcIkNoYWttYVwiLFwiTWFoYWphbmlcIixcIlNoYXJhZGFcIixcIktob2praVwiLFwiTXVsdGFuaVwiLFwiS2h1ZGF3YWRpXCIsXCJHcmFudGhhXCIsXCJOZXdhXCIsXCJUaXJodXRhXCIsXCJTaWRkaGFtXCIsXCJNb2RpXCIsXCJUYWtyaVwiLFwiQWhvbVwiLFwiRG9ncmFcIixcIldhcmFuZ19DaXRpXCIsXCJOYW5kaW5hZ2FyaVwiLFwiWmFuYWJhemFyX1NxdWFyZVwiLFwiU295b21ib1wiLFwiUGF1X0Npbl9IYXVcIixcIkJoYWlrc3VraVwiLFwiTWFyY2hlblwiLFwiTWFzYXJhbV9Hb25kaVwiLFwiR3VuamFsYV9Hb25kaVwiLFwiTWFrYXNhclwiLFwiQ3VuZWlmb3JtXCIsXCJFZ3lwdGlhbl9IaWVyb2dseXBoc1wiLFwiQW5hdG9saWFuX0hpZXJvZ2x5cGhzXCIsXCJNcm9cIixcIkJhc3NhX1ZhaFwiLFwiUGFoYXdoX0htb25nXCIsXCJNZWRlZmFpZHJpblwiLFwiTWlhb1wiLFwiVGFuZ3V0XCIsXCJOdXNodVwiLFwiRHVwbG95YW5cIixcIlNpZ25Xcml0aW5nXCIsXCJOeWlha2VuZ19QdWFjaHVlX0htb25nXCIsXCJXYW5jaG9cIixcIk1lbmRlX0tpa2FrdWlcIixcIkFkbGFtXCJdLFwiZWF3XCI6W1wiTlwiLFwiTmFcIixcIkFcIixcIldcIixcIkhcIixcIkZcIl19Jyk7XG5cblxuY29uc3QgJDQzZDc5NjNlNTY0MDhiMjQkdmFyJHRyaWUgPSBuZXcgKDAsICgkcGFyY2VsJGludGVyb3BEZWZhdWx0KCRjNUwwaSR1bmljb2RldHJpZSkpKSgoMCwgKCRwYXJjZWwkaW50ZXJvcERlZmF1bHQoJGM1TDBpJGJhc2U2NGpzKSkpLnRvQnl0ZUFycmF5KFwiQUFBUkFBQUFBQUR3ZkFFQVpYbDVPTlJ0Ky81YlBWRlppbVJmS29UUUpObTM3Q0dFN0l3MGozVXNUV0tzb3lJN2t3eXlUaUVVelNEN05pRXpoV1lpakgwd01Wa0hFNE14NDlmemZvKzNudVA0L2ZkWmp2ditYTmQ1bi9kOW5lZjFXWnZtS2hUeGlabmR6RFFCU0VZUXF4cUt3bnNLdkdRdWNGaCs2dDZjSjc5MmVQUUJadjVTOXlYU3dreWpmL1A0VDdtVE5uSUF2MWRPVmhNbFI5bGZsYlVMOUplSmd1cXNqdkc5TlRqL3dMYjU2NlZBVVJuTG8ydnZSaTg5UzNnVy8zM2loaDJlWHBEbjQwQklXN1JFbC83Y29SS0loQUZsQWlPdGJMRFR0Nm1NYjRHek1GMWdObnZYL3NCeHRic0FJamZ6dENOY1FqY05EdExUaFJ2dVh1NU01Zy9DQmphTEJFNGxKbTRxeS9vWkQ5NytJSnJ5QXBjWGZnV1lsa3ZXYmhmWGd1ak9KS1Z1OEIrb3pxVExieHlKNWtOaVI3NUN4RHFmQk05ZU9sRE1tR2VvWjBpUWJiUzVWVXBsSXdJK1pOWEVLUVZKeGx3cWpoT1k3dzNYd1Blc2JMSzVKWkUrVHQ0WDhxOGttMGR6SW5zUFB6YnNjcmpCTVZqRjVtT0hTZVJkSlZnS1VqTFRIaUhxWFNQa2VwOE4vekZrODE2N0tMcDc1ZjZSbmRrdnpkZkI2VXozTW1xdlJBcnpkQ2JzMS9pUlpqWVBMTEYzVThRcytIK1JiOGlLNTFhNk5JVjJWOSswN3VKc1RHRldwUHo4SisrN2lSdTJCNmVBS2xLL2t1anJMdGh3YUQvN2E2SjV3OTBUdXNuSDFKTUFjK2dOcnFsNGFzcE9VRy9ScnN4VUttUHpoSGdQNEJsZXJ1KzZWZmMvTUJqZ1hWeDd3aG85NG5QbjdNUEZybndRUDdnMGswRHEwaDJHU0tPNmZUWjhuTG9kTjFTaU9Vai81RUwvWG8xREJ2Um0wd21yaDN4NnBoY0oyMC85Q3VNcjVoOFdQcVhNU2FzTG9MSG91ZlRtRTdtellyczZCMGRZN0tqdUNvZ0txc3Z4bnhBd1hXdmQ5UHVjOVBuRThET0hUMklOSHhSbEl5VkhycVphaHRmVjJFL0EyUERkdEEzZXdsUkhNdEZJQktPL1Q0SW96V1RRWittYitnZEt1ay9aSHJxbG91Y0tkc09TSm1sV1RTbnRXamN4Vk1qVW1yb1hMTTEwSTZUd0RMbkJxNExQNjlUeGdWZXlHc2Q4eUh2aEY4eWRQbHJOUlNOczlFUDdXbWV1U0U3THUxMEpiT3VRY0p3LzYzc0RwNjh3Qjlpd1A1QU8rbUJwVjBSNVZERGV5UVVGQ2VsMUcrNEtIQmdFVkZTMFlLK20yc1hMV0x1R1Rsa1ZBZDk3V3dLS2RhY2pXRWxSQ3VEUmF1ZjMzbC95VmNERjZzVlBLZVRlczk5RkMxTnBOV2NwaWVHU1YvSWJPOFBDVHk1cGJVUjFVOGx4emY0VCt5NmZaTXhPejNMc2hrUUxlZURTZDBXbVVyUWdham1ia3RyeHNiMkFaMEFDdzJWZ25pK2dWL20rS3ZDUldMZzA4Q2x4N3VocWwrdjlYeVNHY2pqT0hsc3A4dkJ3L2U4SFM3ZHRpcUY2VC9YY1NYdWFNVzY2R0YxZzRxOVl5QmFkSHF5M1k1amluMWM3eVpvczZCQnI2ZHNvbVNIeGlVSGFuWXRjWVF3bk1NWmhSaE9uYVlKZXlKemFSdXVreUNVaDQ4K2UvQlV2ay9hRWZEcDhhZytqRDY0Qkh4Tm5RNXYvRTdXUms3ZUxqR1YxM0kzb3F5NDVZTk9OaS8xb3Axb0RyN3JQamtoUHNUWGdVcFF0R0RQbElzNTVLaFFhaWM5a1NHcy9VcloyUUtRT2ZsQjhNVEVReFJGOXB1bGxUb1dPN0VwbGFuNm1jTVJGblV1MjQ0MXl4aTIzeCtLcUtscjdSV1dzaTlaWE1XbHI4dmZQM2xsazFtMlBSajB5dWRjY3hCdW9hN1ZmSWdSbW5GUEdYNlBtMVdJZk1tL1JtNG4veFRuOElHcUEwR1d1cWd1NDhwRVVPMFU5bk4rWmRJdkZwUGI3VkRQcGhJZlJaeHpubEhlVkZlYmtkOWwrcmFYeTlCcFRNY0lVSXZCZmdIRWI2bmRHbzhWVWt4cGllZjE0S2p6Rk9jYUFOZmd2RnB2eVk4bEU4bEU0cmFIaXpMcGx1UHpNa3MxaHgvZTFIb2s1eVYwcDdxUUg3R2FZZU16elpURnZScHY2azZpYUo0eU5xekJ2TjhKN0I0MzBoMndGbTFJQlBjcWJvdTMzRzcvTldQZ29wbDRNbGxsYTZlMjRMM1RPVFZOa3phMnp2M1FLdURXVGVEcENsQ0VZZ1RRKzV2RUJTUVpzL3JNRjUwK3NtNGpvZlRnV0xxZ1gxeDNUa3JERVZhUnFmWS94Wml6RlozWTgvREZFRkQzMVZTZkJRNXJhRUI2bkhuWmg2ZGRlaHRjbFFKOGZCcmxkeUloOTlMTm5WMzJIektFZWowNGhrNlNZamRhdUNhNGFZVzBydS9ReHZRUkd6TEtPQVFzemYzaXhKeXBUVzNXV0w2QkxTRjJFTUNNSXc3T1V2V0JDNkEvZ0RjMkQxanZCYXBNQ2M3enR4NmpZY3p3VEtzUkxMNmRNTlhiODNIUzhrZEQwcFRNTWoxNjF6YlZIa1UwbWhTSG85U2xCRERYZE42aER2Ukdpem1vaHRJeVIzb3Q4dEY1aVVHNEdMTmNYZUd2QnVkU0ZySHUrYlZaYjlqaXJOVkcrclFQSTUxQTdIdTgvYjBVZWFJYVo0VWdETzY4UGtZeDNQRTJIV3BLYXBKNzY0S3h0NVRGWXB5d015NERMUXFWUnkxMUk3U09MaHhVRm1xaUVLNTJOYWlqV0FySWZDZzZxRzhxNWVTaXdSQ0piMVI3R0RKRzc0VHJZZ3gvbFZxN3c5KytLaDkyOXhTSkVhb1NzZTVmVU9RZzluTUFuSVp2Kzdmd1ZSY052M2dPSEk0NlZiNWpZVUM2NlBZSE82bFMrVE9tdkVRanVZbXg0UmtmZllHeHFaSXAvRFBXTkhBaXhiUkJjK1hLRTNKRU9nczRqSXd1L2RTQXdoeWRydU9HRjM5Y285MWFUczg1SkozWi9McFhvRjQzaFV3SnNiL00xQ2h6ZG44SFg4dkxYbnFXVUt2UmhOTHBmQUY0UFRGcXZhMXNCUUcwSis1OUh5WWZtUTNvYTQvc3haZGFwVkxsby9mb294U1hpL2RPRVFXSVdxOEUwRmt0dEV5VEZYUjJhTk1QSU5NSXpad0NORWhlWVRWbHRzZGFMa015S29FVWx1UE5BWUNNMklHM2JyMERMeTBmVk5XS0h0YlNLYkJqZml3N0x1MDZnUUZhbEM3UkM5QndSTVNwTFlEVW85cER0RGZ6d1VpUEpLTEoyTEdjU3BoV0JhZE9JL2lKak5xVUhWN3VjRzh5QzYraU5NOVFZRWxxQlI3RUNGWHJjVGdXUTNlRy90Q1dhY1Q5YnhJa2ZteFBtaTN2T2QzNkt4aWhBSkE3M3ZXTkorWTlvYXBYTnNjVlNWcVM1ZzE1eE9XTkQvV3VVQ2NBOVlBQWc2V0ZiakhhbXJibFo1YzBMNlp4MVg1OFppdHRHY2ZES1U2OTdRUlNxVy9nK1JvZk5SeXZyV01yQm40NGNQdmtSZTJIZFR1L0NxMDFDNS9yaVdQSFp5WFBLSHVTRERkVzhjMVhQZ2Q2b2d2TGgyMHFFSXU4YzE5c3FyNHVmeUhyd2gzN1pONU1rdlkxZHNHbUV6OXBVQlR4V3J2dmhOeU9EeVgyUTFrL2ZiWC9UL3ZiSE5jQnJtamdEdHZCZHRaclZ0aUlnNWlYUXV6Ty9ERU12Ulg4TWkxenltU2x0OTJCR0lMZUtJdGpvU2hKWEUvSDd4d25mMElld2I4QkZpZUo5TWZsRUJDUVlFRG04ZVpuaWlFUGZHb2FZaWlFZGhReEhRTnIyQXVSZG1iTDltY2wxOEt1bWgrSEVaTHA2eitqMzVNTDl6VGJVd2FoVVpDeVFRT2dRckdmZGZRdGFSL09ZSi85ZFlYYjJUV1pGTWlqZkNBOE5vdjRzYTVGRkRVZTFUNjhoNHEwOFdERTdKYmJEaWVqNHV0Uk1SOW9udGV2eGxYdjZMdUpUWHQxWUV2OGJEekV0NjgzUHVTc0lOMGFmdnUwcmNCdTlBYlhaYmtPRzNLM0FodHFRMjhOMjNsWG03UzNZbjZLWG1BaEJoeitHZW9ySko0WHhPL2IzdlprMkxYcDQyK1F2c1Z4R1NOVnBmU2N0SUZNVFIxYkQ5dDcwaTZzZk5GM1dLei91S0RFRENwenp6dHdoTDQ1bHN3ODlIMklwV04xMHNYSFJsaERzZTlLQ2RwUDVxTk5wVTg0Y1RZK2FpcXN3cVI4WFo5ZWEwS2JWUndSdU9HUVUzY3NBdFYyZlNibnE0N1U2ZXM2cktsV0xXaGczcy9COUM5ZytvVHlwNlJ0SWxkUjUxT09rUDUvNm5TeTZpdFVWUGNNTk9wNE0vaERkS096M3VLNnNyYmR4T3JjMmNKZ3IxU2cwMm9CeHhTa3k2VjdKYUcremlOd2xmcW5qbnZoMi91cTFsS2ZicCtxcHdxL0QvNU9JNWdrRmw1Q2VqS0d4ZmMyWVZKZkdxYzRFMHg1ZTlQSEsydWtiSE5JNy9SWlY2TE5lNjVhcGJUR2pvQ2FRbHMwdHhQUGJtUWJDUW4rL3VwQ29YUlp5OXl6b3JXSnZaMEtXY2JYbEJ4VS9kNUk0RVJVVHhNdVZXaFNNbUY2NzdMTk43Tm5Md3NtS2F3WGtDZ2JycGNsdU9sMFdDaFIxcWh0U3J4R1hIdTI1MWRFSXRZaFlYM3Nudm4xZ1MydVh1emRUeENKalp0anNpcDBpVDJzREMwcU1TN0JrOXN1Mk55WGpGSzUvZjVab1d3b2ZnM0R0VHlqYUZxc3BuT09UU2g4eEsvQ0tVRlM1N2d1VkVrdzl4b1F1UkN3d0VPOUx1OXoydll4U2E5TkZWOER2U3h2MkM0V1lMWUY4TnJjNER6V2t6TnNrODFKSk9sWi9MWUpyR0NvajRNbVpwbmYzQVhtenhUNHJ0bDlqc3FsakV5ZWR6NDY4U0dLZEJpUXp5ei9xV0tFaEZnNDVaY3psWlozS0dMM2w2c24rM1RUYTN6TVZNaFBhMW9iR3AveitmdlkwUVhUckpUZjFYQVQzRXRRZFVmWVlsbVdaeXZQWi82cld3VTdVT1FlaTdwVkUwb3NnTjk0SXkrVDErb21FNno0UmgyTzIwRmpnQmVLMnkxbWNvRmlNRE9KdnVaUG41TW95OWZtRkgzd3lmS3ZuNCtUd2ZMdnQvbEhUVFZudnJ0b1VXUkJpUVhoaU5NOG5FNlpvV2V1eC9aMGIydW5SY2RVemREcG1MN0NBZ2QxVG9SWHdnbUhUWk9naUd0VlQreHIxUUg5T2JlYlJUVDROekwrWFNwTHV1V3A2MkdxUXZKVlRQb1pPZUpDYjZnSXdkOVhITWZ0UStLYzA4SUtLZEtRQU5TSjFhMmd2ZTNKZFJoTzArdE5pWXpXQVpmZDdpc29lQnU2N1c3eHVLOFdYN25oSlVSbGQ5OEluYjB0L2RXT1NhdS9rRHZWNERKby9jSW13OUFPMkd2cTBGMm4wTTd5SVpLTDhhbU1iallsZCtxRmxzN2hxOEFjdnE5N0syUHJDYW9tdVVpZXN1N3FOYW5HdXBFbDZKL2llbThseXIvTk1uc1RyNm80MVBPMHloUWgzaFBGTjB3SlA3UzgzMGplOWlUQkx6VU5nWUgrZ1VacFJPbzNyTjJxZ0NJKzZHZXdwWDh3OENIK3JvNlFyV2lTdHFtY016VmEzdkVlbCszL2REeE1wMHJEdjFRNndUTVMzSzY0elRUNlJXeksxeTY0M2ltMjVKYTdYMmVQQ1YybVRzd2QvNGpzaFpQbzRiTG5lcnFJb3NxL2h5MmJLVUFtVm45bjRvdW4xK2EwRElaNTZVaFZ3bVpIZFVOcExhOGdtUHZ4UzFlTnZDRjFUMHdvMXdLUGRDSmkwcU9yV3o3b1lSVHpnVHRrekV6Wm4zMDhYU0x3VW9nNE9XR0tKekNuLzNGZkY5aUEzMmRaSFN2MzBwUkNNM0tCWTlXWm9SaHRkSy9DaEhrNkRFUUJzZlY2dE4ybzFDbjBtTHRQQmZua1MrcXkxTDJ4ZkZlOVRRUHRERTFCZTQ0UlRsODJFOWhQVDJyUzIrOTNMRmJ6aFFRTzNDL2hEMmpSRkgzQldXYmFzQWZ1TWhSSkZjVHJpNzNlRTgzNXkwMTZzMjJEam9GSjg2Mld2TGo2OWZ1MlRnU0YzUkhpYTlENURTaXRsUUFYWUNuYmRxalBrUjI4N0xoNmRDSERhcG9zK2VGRHZjWlBQMmVkUG1URnh6bkpFL0VCTG9RUTBRbW45RWtaT3lKbUh4TWJ2S1liOG8yMVpIbXY1WUxxZ3NFUGs5Z1dad1lRWTl3THFHWHVheC84UWxWNXFEYVBicTlwTFBUMXlwK3pPV0ttcmFFeTFPVUpJN3pkRWNFbXZCcGJkd0xyRENnRWIyeFg4Uy9ueFpnaks0YlJpK3BiT21iaDhiRWVvUHZVL0w5bmR4OWtudGxEQUxiZEF2cDBPOFpDM3pTVW5GZzRjZVBzdzdqeGV3V3ZMN0hSU0JMVW42Sjd2VEg5dWxkNU43NkpGUGdCQ2RYR0YyMjFvRUprKytYZlJ3WHBsTFN5clZPN0hGV0JFczk5blRhekt2ZVczSHBiRDRkSC9ZbWRBbCtsd2JTdDhCUVd5VEc3akFzQUNJN2JQUFVVOWhJOVhVSFdxUU91ZXpIelVqbng1UXFzNlQxcU5IZlRUSGxlRHRtcUs3ZmxBOWEwZ3oybnljSXB6MUZIQnVXeEtOdFVlVGRxUDI5RmIzdHYrdGw1SnlCcVhvUit2Q3Nkelp3WlVoZjZMdThidmtCOXlRUDR4N0dHZWdCMHltMExwbDAzUTdlK0MwY0RzbTlHU0RlcENEamk3blVzbEx5WXlsdVBmdkx5S2FEU1g0eHBSK25WWVFqUVFuNUY4S2JZMWdiSVZMaUsxSjNtVzkwelR5UjFicUFwWDJCbFdoN0tHOExBWTkvUzluV0MwWFhoOXBaWm82eHVpcjEyVDQzcmthR2ZRc3NiUXlJc2xBN3VKblNIT1YyMk5obE50VW8wY3p4UEFzWGhoOHRJUVlhVE00bC95QWxabHlkVGNYaGxHMjJHcy9uM0J4S0JkLzNaall3ZzNOYVV1clZYaE5CK2FmVm5GZk5yOVRiQzlrc05kdndwTmZlSGFueUo4TTZHcklWZkxsWUFQdjBJTGU0ZG4wWitCSlNiSmtON2VaWS9jNis2dHREWWNJRGVVS0lEWHFVU0U0MlhkaDVuUmJ1YU9ib3pqaHQwSEo1SDFlK2VtK05KaS8rOGtRbHlqQ2JKcFBja3dUaFplSUY5L3U3bHJWSUtOZUpMQ04vVHBQQWVYeHZkMzEvQ1VEV0hLOU11UDFWMVRKZ25nemk0VjBxelMzU1czUXk1VWlHSHFnMDJ3UWE1dHNFbDlzL1g5bk5Nb3NnTGxVZ1pTZkNCajFEaXlwTGZocjkvcjBuUjBYWTJ0bWhET2NVUzRFN2NxYTRFSkJoenF2cGJaYTM1UTVJejVFcW1oWWlPR0RBWWs2MDZUdjc0K0tHZlBqS1Z1UDE1ckl6Z1cwSTcvbmlPdTllbC9zbjJiUnllMGdWK0dyZVBEUkRNSGp3TzFsRWRlWEg4TitVVE8zSW9OMThrcEkzdFB4eitmWStuMk1HTVNHRkhBeC84M3RLZUpPbCsyaStmMU85djZGZkVEQmJxcncrbHBNOEFuYXY3ekhOcjdoRTc4blhVdFBOb2RNYkNuSVRXQTdNYS9JSGxaNTBGOWhXZ2Uvd3pPdlNidHFGVkZ0a1M4T2YybnNzalp3YlNGZFUrVk84ejZ0Q0VjOVVBOUFDeFQ1eklVZVNya0JCL3Yxa3JPcG03YlZNckd4RUtmSTZMY25wQjREOGJ2bjJoREtHcUtySmFWQUp1RGFCRVkzRjdlWHlxbkZXbE9vRlYvOFpMc3BaaVpkN29yWExoZDRtaEhRZ2J1S2JIakpXVXpybm0wRHh3L0xKTHpYQ2toN3NsTXhLbzh1eFpJV1pmZEtIbGZJN3VqM0xQNkFSQXVXZEY3Wm1aN2RhT0txS0diejVMeE9nZ1RnUzM5b0Vpb1ltcnFrQ2VVRHZieGtCWUtlSGhjTG1NTjhkTUYwMVpNYjMySXBML2NIOFI3VkhRU0k1STBZZkwxNGc5ZDdQLzZjakIxSlhYeGJvekVEYnNyUGRtTDhwaDdRVzEwamlvK3Y3WXNxSEtRNnhyQmJPVnR4VTAvbkZmelVHWndJQkx3eVV2ZzQ5aWkrNTRudjlGeUVDQnBVUm5RSzRPeDZON2x3NWZzamRkNWwvMlN3QmNBSE1Kb3lqTzFQaWZ5ZTJkYWdhT3dDVk1xZEpXQW83N3B2QmUwemRKY1RXdTVmZHpQTmZWMnAxcGM3L0pLUTh6aEtrd3NPRUxVRGhYeWdQSjVvUjhWcGsybHNDZW4zRDNRT1FwMnpkclNaSGpWQnN0REYvd1dPOThycmtRNi83enQvRHJpcDdPSEl1ZzFsb21OZG1SYUhScmptcWVvZG4yMnNlc1FRUGd6aW1QT01xQzYwYTUraS9VWWg1MXVabStpaldra2FJMnhqckJPMjU1OERaTlpNaXVEUWxhVkF2Qnkyd0xuL2JSM0ZyTnpmbk8vOW9EenRZcXhacnI3Sk1JaHFtcm9jaGJxbVFuS293eFcyOWJwcVRhSnU3a1cxVm90QzcyUWtZWDhPb0REZE1Ed1Yxa0pSazNtdWZnSkJ6Zitpd0ZSSjdYV1F3TzV1alZnbGdGZ0h0eWNXaU1MeDVOKzZYVStUdWxMYWJXak96b2FvMDNmbmlVVzB4dklKTlBiazdDUWxGWmQvUkNPUHZnUWJMamg1SVRFOE5WSmVLdDNIR3I2SlRuRmRJemNWT2xFdHdxYklJWDBJTTdzYUMrNE41MDQ3TVRKOStXbjExRWh5RVBJbHdzSEU1dXRDZVhSalF6bHJSK1IxQ2YvcUR6Y05icUxYZGszSjdnUTM5VlVyckVrUy9WTVdqamcrdDJvWXJxQjB0VVpDbGNVRjYrTEJDM0VRN0tuR0l3bS9xalpYNEdLUHRqVFgxelFLVjZuUEFiMnQvUnphNUlxS1JmOGkyREZFaFYvWVNpZlgwWXdzaUY2VFFucDQ4R3I2NVRGcTB6VWU2TEdqaVk3ZnEwTFNHS0wxVm5DNkVTSTJ5eHZ0M1hxQng1M0IzZ1NsR0ZlSmNQYlVib25XMUU5RTltNE5mdXdQaCt0NVFqUnhYMzRsdkJQVnh3UWQ3YWVUZCtyOWR3NUNpUDFwdDh3TVpvTWRuaTdHYXBZZG82S1BnZVFLY21sRmZxNFVZaHZWMElCZ2VpUjNSblRNQmFxRHFwWnJUUnlMZHNwNGwwSVhaVGRFcmZIMHNOM2RxQkc1dlJJeDNWZ0NZY0htbWtxSjhIeXUzczlLOXVCRDFkOGNaVUV4M3FZY0Y1dnNxZVJwRjFHT2c4ZW1lV00yT21CbFdQZFo2cUFYd20zbkVORnloK2t2WGsxMzJQZldBbE4wa2I3eWg0ZnoyVDdWV1VZL2hFWFg1RHZ4R0FCQzAzWFJweU9HOHQvdTNHaDV0WmRwc1NWOUFXYXhKTjd6d2hWZ2xnSUkxZ1YyOHRVVml5cW40VU1kSWg1dCtFYTJ6bzdQTzQ4b2JhMFR3UWJpU1pPSDRZaEQ1NzhrUEYzcmV1YVA3THVqUE1zakhtYUR1SWQ5WEVhWkJDSmhiWEpiUmc1VkNrM0tKcHJ5SC8rOFMzd2RoUjQ3cGRGY21wWkcycDBCcGpwL1ZidmFsZ0laTWxsWVg1TDMxYU1QZHQxSjdyLzd3Yml4dDBNbnoyWnZOR1RBUkhQVkQrMk8xRDhTR3BXWGxWblAyZWtnb241NVlpaW5BRER5bnlhWHRaRFh1ZVZxYnVUaTh6OGNISEszMjVwZ3FNK21XWnd6SGVFcmVNdmhab3BBU2NYTTE0U0pIcEd3WnlSbGpNbER2Y01tOUZaLzFlOStyL3B1T25wWE90YzlJdTJmbWdCZkVQOWNHVzFGemIxckdsZkowOHBBQ3RxMVpXMThiZjJjZXZlYnpWZUhiYUE1MEc5cW9VcDM5SldkUEhiWWtQQ1JYanQ0Z3pscTNDeGdlMjhNa3k4TW9TLytPbjcya2MrWkkyeEJ0Z0p5dHBBUUhRMXpyRWRkTUlWeVI1dXJYNnlCTnU4djVsS0M4ZUxkR0tUSnRiZ0laM1p5VHpTZldteDlmK2N2Y0plOHlNMzlLL2Rqa3AyYVVURS85bTJMajVqZzdiOHZkUkFlcjdETzNTeUxOSHMxQ0FtNXg1aUFkaDJ5R0pZaXZBclpiQ0JOWTg4VHcrdytDMVRidDd3SzN6bDJyelRIby9EOC9nYjNjM21Zcm5FSUVpcFlxUFVjZFdqblRzU3c0NzFPM0VVTjdHdGc0Tk9BczlQSnJ4bTAzVnVaS2E1eHdYQVlDanQ3R3MwMUttNlQyRGhPWVVNb0ZjQ1N1N0hrMXAzeVAxZUcrTTN2M1E1bHVBemU2V3dCblpJWU8wVEN1Y1BXSytVSjM2S29KOFkrdnBhdmhMTzhnNWVkNzA0SWpsUWRmZW1yTXUvL0V2UFlYVFFTR0lQUGZpYWdKUzluTXFQNUl2a3hOOXB2dUp6N2g4Y2FyUFhUS01xOGpuVGVMMFNUYW42ZG5MVEFxd0lzd2NJd1dEUjJLd2JHZGRBVk44U1lXUkI3a2ZCZkJSa1NYenZIbElGOEQ2am82NGtVellrNW8vbjhvTGpLcWF0MHJkWHZRODZNa3dRR01ubmxjYXNxUFBUMittVnRVR2IzMkt1SDZjeVpRZW5yUkcxMVRBcmNBbDI3K252T01CRGUrK0VLSGY0WWR5R2Y3bXpuek96MzNjRkZHRWN2MzI5cDRxRzJob2FROFVMaU15Vno2RU5jeGhvcUduRklkdXBjbjdHSUNRV3V3M3lPM1c4UzMzbXpDY01ZSjh5d2M3VTdybWFRZi9XNUs2M0dyNGJWVHBYT3lPcDR0YmFQeUlhYXRCTnBYcWxtUVVUU1pYanhQcjE5KzczUFNhVCtRbkkzNVlzV242V3BmSmpSdEs4dmxKWm9UU2dqYVJVMzlBR0NrV09adGlmSnJuZWZDcnF3VEtERm11V1VDdWtFc1ljUnJNekNvaXQyOHdZcFA3a1NWak1EOFdKWVFpTmMyYmxNanVxWWVnbWY2U3NmQzFqcXo4WHpnaE1sT1grZ24vTUtabWdsanN6cm1laEVhNFY5OFZyZUpEeFl2SHIzajdJZUpCOS9zQlpWNDFCV1QvQVpBanVDNVhvcmxJUG5aZ0JBbmlCRWhhbnAwLzArcVptRVdEcHU4aWdlMWhVUEl5VG82VDZnREVjRmhXU29kdU5oOFlTdTY1S2dNT0dCdzdWbE5Zek5JZ3dIdHE5S1AyeXlUVnlzcVg1djEyc2Y3RCt2UVVkUjJkUkR2Q1Y0MHJJSW5YU0xXVC95ckM2RXhPUXhCSndJRGJlWmNsM3oxeVI1UmozbDhJR3B4c3BhcG52QkwrZnd1cEEzYjZma0ZjZUlEOXdnaU0xSUxCMGNIVmR2by9SNHhnOHlxS1hUOGVmbDBHbkdYMS8yN0ZVWWVVVzJML0dOUkdHV1ZHcDNpOTFvYUprYjRyeWJFTkhyZTlhMlA1dml6L3lxazhuZ1dVVVMrS3YrZnUrOUJMRm5mTGlMWE9GY0llQkpMaG5heUNpdURSU3FjeDBRdTY4Z1ZzR1ljNkVIRDUwMEZrdCtncERqNmd2cjg4NG44d1o1bzZxN3h0TDV3QTBiZVhRbmZmV1lrWnJzMk5HSVJnUWJzYzVOQjMwMlNWeCtSNFJPdm1nWmFSOHdCY2ppMTI4Qk1mSjlrY3ZKNERDK2JRNTdrUm12NXl4Z1U0bmdaZm4wL0pOWjhKQnd4alRxUytzOWtqSkZHMXVuR1VHTHdNaUl1WFVEOUVGaE5JSnV5Q0VBbVZaU0lHS0g0RzZ2MWdSUjFMeXpRS0gyWnFpSTFEbkhNb0RFWnNwYkRqVGVhRklBYlN2alNxM0ErbjQ2eTloaFZNOHdJcG5BUlNYeXptT0Q5NmQ5VVh2RnJvU1BnR3cxZHEydmRFcURxOWZKTjFFYkwyV3VsTm1Ia0ZEdnhTTzlaVC9SWC9CdzJnQS9CckY5MFhySkFDZXJlVmZiVi9ZWGFLZnA3N05teDVOakVJVWx4b2pzeTdpTjduQkhTWmlnZnNiRnlWT1gxWlRlQ0N4dnFuUlNFeFA0bGs1WmVZbFJ1OWNhYWE3NDNUV05kY2hSSWhFV3dhZHNCSWUyNDVDOGNscGFaNHpyUHNrK093WHp4V0N2UlJ1bXlOU0xXNUtXYVNKeUpVOTVjd2hlSzc2Z3I3MjI4c3BaM2htVHRMeXJmTTJRUkZxWkZNUjgvUTZ5V2ZWZ3dUZGZYMlJ5NHczK2VBTy81VlQ1bkZiNU5selhQdkJFQVdyTlo2UTNqYkgwUkY0dmNicCtmRG5nZi95d3BveU5RdGpyZnZjcTkzQVZiMVJEV1JnaHZ5cWdJMkJrTXIxcndZaThnaXpaMEc5R21QcE1lcVBlckFRMGRKYnp4K0tBRk00SUJxNmlTTHBaSFVyb2V5ZmQ5bzVvKzRmUjJFdHNaQm9KT1JRRUE0U1cwQ21lWFNuYmx4MmU5UWtDSElvZHlxVjYrZzVFVEVwWnNMcW5kL05hNjBFS1BYL3RRcFBFY08rQ09JQlBjUWRzekR6U2lIR3lRRlBseS83S2NpVWgxdSttRmZ4VENIR3Y5bm4yV3FuZEdnZUdqUS9rcjAycW1UQlg3SGMxcWlFdmdpU3oxVHovc3k3RXMyOXd2bjZGckRHUFA3YXNYbGhPYWlIeE9jdFB2VHB0RkExa0hGVWs4Yk1FN1NzVFNuR2JGYlVyc3N4cnE3MExob1NoNU93dlFuYSt3ODRYZFhoWmIyc2xvSjRac0NnM2orUHJqSkwwOC9KQmk1ekdkNnVkL1p4aG1jR0tMT1hQY051blFxNUVTVzkyaUp2ZnN1UnJOWXRhd1d3U21OaFBZb0ZqMlFxV05GMGZmTHBHdC9hZDI0Uko4dmtiNXNYa3B5S1htdkZHNVZjZHpmLzQ0azNQQkwvb2pKNTIra1dHek9Bcm55cDVmOTY5b1YzSjJjNExpMjdOa292YTlWd1JOVktxTjBWK2dWK21USGl0Z2tYVjMwYVdkM0ExUlNpbGRFbGVpTlBBKzVjcCszK1Q3WCt4ZkhpUlpYUTFzNEZBOVR4SWNudmVRczlKU1o1cjVxTm1ncWxXNHpNdFo2cllOdmdteVZjeXdLdHU4WnhuU2JTNXZYbEJWK05YZElmaTMreHpybkowVGtGTCtVbjh2MVBXT0MyUFBGQ2pWUHE3cVRIN21PcHpPWWovYjRoMGNlVCtlSGdyOTdKcWhiMXppVmZlQU56Zk44YkZVaFBLQmk3aEpCQ3VrUW5CMGFHakZUWUxKUFhMMjZsUTJiODB4ck9ENWNGV2dBOGh6M1N0MGU2OWt3Tm5EMytuWDNneTEyRmpyak8rZGRSdnZ2ZnlWM1NXYlhjeHFOSGZtc2I5dTFUVit3SFRiOUIwNy9MMnNCOFdVSEo5ZWVOb21EeXlzRVdaMGRlcUVoSC9vV0kyb2lFaDUyNmd2QUsxTngya0loTnZrWVIrdFBZSEVhOWorbmQxVkJwUVAxdXpTaklETytmRERCN3V5MDI5clJqREM1U2s2YUtjenl6MUQ1dUE5THUrUnJyYXBsOEpYTkwzVlJsbE5RSDJLMVpGeE9wWDhMcHJ0dGZxUTU2TWJQTTBJdHRVaGVYV0QvbVJPT2VGcUdVYkwra1VPVmxYTFRGWC81MjVnNGZhTEVGTzRxV1dkbU9YTU52VmpwSVZUV3Q2NTBIZlFqWDlvVDNEZzVBdTYrdjEvQ2k3OExhNlpPbmdZQ0ZQVDFBVXd4UXVaMHl0NXhLZE5YTGFEVElTTVRlQ2oxNlhUcnloTTM2SzJtZkdSSWdvdDcxdm9Xczh0VHBML2YxcnZjd3YzTFNEZisvRzhUSENUN05wZkhXY1crbHNGL29sOHE5Qmk2TWV6TlRxcDBycHAva0pSaVZmTnJYL3cyN2NSUlR1OFJJSXF0VWJsQk1reHk0andBVnFDalVKa2lQQmoyY0FvVmxvRzhCMi9ONWRlTGRNaERiN3hzNW5oZDNkdWJKaHVqOFdiYUZSeXUxTDY3OERIaGhBK3JNaW1ObzRDMWtHcHAwdEQvcW5DZkNGSGVqcGYwTEpYNDNPVHI1NzhQWTB0bklJcmxXeU5ZeXVSL2llNmoyeE5iMU9WNnUwZE9YLzFEdGNkNyt5YTlXK3JZMkxtbnlRTXRrOFNNTFRvbjhSQWR3T2FOMnROZzV6Vm5ES2xtVmVPeFBWMnZoSElvOVFFUFY3amMzZit6VkRxdWlOZzFPYUhYM2NaWEpEUlk1TUpwbytWYW5BY21xcDRvYXNZTEcrd3JYVUw1dkpVMGtxazJoR0Vza2hQK0pqaWdyejFsNlFuRXdwNm44UE1WZUpwNzBJaTZwcGVhSzlHaEY2ZkpFMDBjZUx5eHYwOHRLaVBhdDRRZHhaRmdTYlFrbm5FaUNMRDhRYzFyamF6VktNM3IzZ1hubk1lT05nZHoveUZWMXEraGFhTit3bkYzRm40dVlDSTlYc0tPdVZ3REQwTHNDTy9mMGdqNWNteENGY3I3c2NsSWNlZldqdm9yZSszYVNVNDc0Y3lxRFZ4SDd3MVJYM0NIc2Fxc01SWDE3WkxnanNEWHdzM2tMbTJYSmRNM0t1MzgzVVhxYUhxc3l3elBoeDdORmlyMEZxanltL3c2Y3hEMlU5eXBhM2R4N1oxMncvZmkzSnBzOHNxSjhmOEFoOGFaQXZrSFh2SVJ5cnN4SzdyckZhTk5kTnZqSTgrM0VtcmkxOTVEQ05hODU4YW5qMlFkbnk2Q3pzaGtuNE4yKzFtK2s1UzhzdW5YM0phN0krSnV0UnpnMW1jMmU5WWMwWnY5UFpuMVN3aHhJZFU5c1h3WlJUZC9KNUZvVW0wZStQWVJFZUhnM29jMllZekdmMnhmSnhYRXh0NHBUM1JmRFJIdk1YTFVtb1hPeTYzeHY1cEx1aE9FYXgwZFJnU3l3Wi9HSCtZQlhGZ0NlVFUwaFo4U1BFRnNuOHB1bnAxS3VyZDFLZ1h4VVorbGEzUjUrNGVQR1I0WkY1VVF0T2E4MytWajh6aDgwZGZ6Ymh4V0Nlb0puUTRka1pKTTRkcnprblpPT0t4Mm4zV3J2Sm56RklTOHAweGVpYytNM1pSVlhJcDEwdFYyRHlZS3dSeEx6dWxQd3pIY0xsWVR4bDRQRjd2OGwxMDZBenIrNndCRmVqYnEvM1A3MkMvMGo3OGNlcFk5OTkwL2Q0ZUF1cm4ybHFkR0tMVThGZmZuTXc3Y1k3cFZlWEpSTVU3M094d2kyZzJ2aC8rNGdYOGR2Ympmb2puL2VMVmhoWWw4R3Rod0NRNTBLY1pxNHoySmVXNWVlT25KV0ZRRW5WeERvRzQ1OVRhQzR6WHliRUNFb0owVjVxMXRYclFiRE10VXhlVFY2UGR0MS96SnVjN1RKb1YvOVlaRld4VXRDZjZPdTNWZC92Ui92RzAxMzhoSlFySGtOZW9lcDVkTGUrNnVtY1NxdUt2TWFGcG0zRVpIREJPdkNpMFhZeUlGSE1nWDdDcXAzSlZYbHhKRndRZkhTYUlVRWJJMnUxbEJWVWRsTnc0UWE5VXNMUEVLOTRRaWxuM3B5S3hRVkNlTmx4OHlkN0VlZ1ZOUUJrRkxhYkt2bmlldFlWQjRJUFoxZlNvcjgyYXJiZ1llYzhhU2RGTWFJbHVZVFl1TngzMlN4ZnJqS1VkUEdxK1VOcDVZcHlkb0VHM3hWTGl4dG1ITzl6WHhLQW5IblB1SDJmUEdyangwR2N1Q0RFVSt5WFV0WGg2bmZVTCtjeWt3czFnSjV2a2ZZRmFGQnI5UGRDWHZWZjM1T0pReHpVTW1XanYwVzZ1R0pLMTF1QUdEcVNwT3dDZjZyb3VTSWpQVmd3NTdjSkNPUTRiOXRrSS9ZNVdOb245U3dlNzJhWnJ5S284ZCtIeUhCRWRXSktya2FyeTBMSUdjekE0SXJxMzUzV2MwWmdhM29tN1VRaUFHQ3ZJbDhHR3lhcXo1ekgrMWdNUDVwaFdVQ3BLdHR0V0l5aWN6MDl2WGc3Nkd4a21pR1NNUTA2WjlYOEJVd3FPdGF1RGJQSWY0cnBLL3lZb2VBSHhKOXNvWFM5VkRlMUF3K2F3T094YU44Zm9McmlmMFRYQnZRNTVkdFJ0dWxScTllbUZEQnhsUWNxS0NhRDhOZVRTRTdGT0h2Y2pmLytvS2JidFJxejlnYm9mb2MyRXpRM3BMNlc1SmRmSnpBV21PazhvZW9FQ2U5MGxWTXJ1d2wvbHRNMDE1UC96SVBhenF2ZHZGbUxOVkhNSVpyd2lRMnRJS3RHaDZQRFZIKzg1ZXczY2FxVnQyQnNEdjVyT2N1M0c5c3JRV2Q3Tm1ndHpDUlVYTFlrbllSU3d0SDlvVXRrcXlOM0NmUDIweFExZmFYUWw0TUVtalFlaFdSNkdtR25rZHBZTlFZZUlHNDA4eUFYN3VDWm1ZVWljOWp1T2ZiK1JlMjgrT1ZPQitzY1lLNERhUGNCZSs1d21qaTlneW10a01wS280VUtxQ3o3eXh6dU44VklseDl5Tm96cFJKcE5hV0h0YVpWRXFQNDVuMkplbVRsWUJTbU5JSzFGdVNZQVVRMXlCTG5LeGV2cmpheWQraDJpOFBqZEIzWVk2YjBucjNKdU9YR3BQTXloNFYyZHNscFIzREZFdmdwc0JMcWhxTERPV1A0eUV2SUw2ZjIxUHBBNy84QlwiKSk7XG5jb25zdCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkbG9nMiA9IE1hdGgubG9nMiB8fCAoKG4pPT5NYXRoLmxvZyhuKSAvIE1hdGguTE4yKTtcbmNvbnN0ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRiaXRzID0gKG4pPT4kNDNkNzk2M2U1NjQwOGIyNCR2YXIkbG9nMihuKSArIDEgfCAwO1xuLy8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJpdHMgc3RvcmVkIGZvciBlYWNoIGZpZWxkXG5jb25zdCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkQ0FURUdPUllfQklUUyA9ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRiaXRzKCgwLCAoLypAX19QVVJFX18qLyRwYXJjZWwkaW50ZXJvcERlZmF1bHQoJDI5NjY4ZTY1ZjIwOTFjMmMkZXhwb3J0cykpKS5jYXRlZ29yaWVzLmxlbmd0aCAtIDEpO1xuY29uc3QgJDQzZDc5NjNlNTY0MDhiMjQkdmFyJENPTUJJTklOR19CSVRTID0gJDQzZDc5NjNlNTY0MDhiMjQkdmFyJGJpdHMoKDAsICgvKkBfX1BVUkVfXyovJHBhcmNlbCRpbnRlcm9wRGVmYXVsdCgkMjk2NjhlNjVmMjA5MWMyYyRleHBvcnRzKSkpLmNvbWJpbmluZ0NsYXNzZXMubGVuZ3RoIC0gMSk7XG5jb25zdCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkU0NSSVBUX0JJVFMgPSAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkYml0cygoMCwgKC8qQF9fUFVSRV9fKi8kcGFyY2VsJGludGVyb3BEZWZhdWx0KCQyOTY2OGU2NWYyMDkxYzJjJGV4cG9ydHMpKSkuc2NyaXB0cy5sZW5ndGggLSAxKTtcbmNvbnN0ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRFQVdfQklUUyA9ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRiaXRzKCgwLCAoLypAX19QVVJFX18qLyRwYXJjZWwkaW50ZXJvcERlZmF1bHQoJDI5NjY4ZTY1ZjIwOTFjMmMkZXhwb3J0cykpKS5lYXcubGVuZ3RoIC0gMSk7XG5jb25zdCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkTlVNQkVSX0JJVFMgPSAxMDtcbi8vIGNvbXB1dGUgc2hpZnQgYW5kIG1hc2sgdmFsdWVzIGZvciBlYWNoIGZpZWxkXG5jb25zdCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkQ0FURUdPUllfU0hJRlQgPSAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkQ09NQklOSU5HX0JJVFMgKyAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkU0NSSVBUX0JJVFMgKyAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkRUFXX0JJVFMgKyAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkTlVNQkVSX0JJVFM7XG5jb25zdCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkQ09NQklOSU5HX1NISUZUID0gJDQzZDc5NjNlNTY0MDhiMjQkdmFyJFNDUklQVF9CSVRTICsgJDQzZDc5NjNlNTY0MDhiMjQkdmFyJEVBV19CSVRTICsgJDQzZDc5NjNlNTY0MDhiMjQkdmFyJE5VTUJFUl9CSVRTO1xuY29uc3QgJDQzZDc5NjNlNTY0MDhiMjQkdmFyJFNDUklQVF9TSElGVCA9ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRFQVdfQklUUyArICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciROVU1CRVJfQklUUztcbmNvbnN0ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRFQVdfU0hJRlQgPSAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkTlVNQkVSX0JJVFM7XG5jb25zdCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkQ0FURUdPUllfTUFTSyA9ICgxIDw8ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRDQVRFR09SWV9CSVRTKSAtIDE7XG5jb25zdCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkQ09NQklOSU5HX01BU0sgPSAoMSA8PCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkQ09NQklOSU5HX0JJVFMpIC0gMTtcbmNvbnN0ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRTQ1JJUFRfTUFTSyA9ICgxIDw8ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRTQ1JJUFRfQklUUykgLSAxO1xuY29uc3QgJDQzZDc5NjNlNTY0MDhiMjQkdmFyJEVBV19NQVNLID0gKDEgPDwgJDQzZDc5NjNlNTY0MDhiMjQkdmFyJEVBV19CSVRTKSAtIDE7XG5jb25zdCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkTlVNQkVSX01BU0sgPSAoMSA8PCAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkTlVNQkVSX0JJVFMpIC0gMTtcbmZ1bmN0aW9uICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ0MTAzNjRiYmI2NzNkZGJjKGNvZGVQb2ludCkge1xuICAgIGNvbnN0IHZhbCA9ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciR0cmllLmdldChjb2RlUG9pbnQpO1xuICAgIHJldHVybiAoMCwgKC8qQF9fUFVSRV9fKi8kcGFyY2VsJGludGVyb3BEZWZhdWx0KCQyOTY2OGU2NWYyMDkxYzJjJGV4cG9ydHMpKSkuY2F0ZWdvcmllc1t2YWwgPj4gJDQzZDc5NjNlNTY0MDhiMjQkdmFyJENBVEVHT1JZX1NISUZUICYgJDQzZDc5NjNlNTY0MDhiMjQkdmFyJENBVEVHT1JZX01BU0tdO1xufVxuZnVuY3Rpb24gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JGMwM2I5MTljNjY1MWVkNTUoY29kZVBvaW50KSB7XG4gICAgY29uc3QgdmFsID0gJDQzZDc5NjNlNTY0MDhiMjQkdmFyJHRyaWUuZ2V0KGNvZGVQb2ludCk7XG4gICAgcmV0dXJuICgwLCAoLypAX19QVVJFX18qLyRwYXJjZWwkaW50ZXJvcERlZmF1bHQoJDI5NjY4ZTY1ZjIwOTFjMmMkZXhwb3J0cykpKS5jb21iaW5pbmdDbGFzc2VzW3ZhbCA+PiAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkQ09NQklOSU5HX1NISUZUICYgJDQzZDc5NjNlNTY0MDhiMjQkdmFyJENPTUJJTklOR19NQVNLXTtcbn1cbmZ1bmN0aW9uICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ5NDE1Njk0NDhkMTM2NjY1KGNvZGVQb2ludCkge1xuICAgIGNvbnN0IHZhbCA9ICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciR0cmllLmdldChjb2RlUG9pbnQpO1xuICAgIHJldHVybiAoMCwgKC8qQF9fUFVSRV9fKi8kcGFyY2VsJGludGVyb3BEZWZhdWx0KCQyOTY2OGU2NWYyMDkxYzJjJGV4cG9ydHMpKSkuc2NyaXB0c1t2YWwgPj4gJDQzZDc5NjNlNTY0MDhiMjQkdmFyJFNDUklQVF9TSElGVCAmICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRTQ1JJUFRfTUFTS107XG59XG5mdW5jdGlvbiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkOTJmNjE4N2RiOGNhNmQyNihjb2RlUG9pbnQpIHtcbiAgICBjb25zdCB2YWwgPSAkNDNkNzk2M2U1NjQwOGIyNCR2YXIkdHJpZS5nZXQoY29kZVBvaW50KTtcbiAgICByZXR1cm4gKDAsICgvKkBfX1BVUkVfXyovJHBhcmNlbCRpbnRlcm9wRGVmYXVsdCgkMjk2NjhlNjVmMjA5MWMyYyRleHBvcnRzKSkpLmVhd1t2YWwgPj4gJDQzZDc5NjNlNTY0MDhiMjQkdmFyJEVBV19TSElGVCAmICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciRFQVdfTUFTS107XG59XG5mdW5jdGlvbiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkN2QxMjU4ZWJiNzYyNWEwZChjb2RlUG9pbnQpIHtcbiAgICBsZXQgdmFsID0gJDQzZDc5NjNlNTY0MDhiMjQkdmFyJHRyaWUuZ2V0KGNvZGVQb2ludCk7XG4gICAgbGV0IG51bSA9IHZhbCAmICQ0M2Q3OTYzZTU2NDA4YjI0JHZhciROVU1CRVJfTUFTSztcbiAgICBpZiAobnVtID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBlbHNlIGlmIChudW0gPD0gNTApIHJldHVybiBudW0gLSAxO1xuICAgIGVsc2UgaWYgKG51bSA8IDB4MWUwKSB7XG4gICAgICAgIGNvbnN0IG51bWVyYXRvciA9IChudW0gPj4gNCkgLSAxMjtcbiAgICAgICAgY29uc3QgZGVub21pbmF0b3IgPSAobnVtICYgMHhmKSArIDE7XG4gICAgICAgIHJldHVybiBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjtcbiAgICB9IGVsc2UgaWYgKG51bSA8IDB4MzAwKSB7XG4gICAgICAgIHZhbCA9IChudW0gPj4gNSkgLSAxNDtcbiAgICAgICAgbGV0IGV4cCA9IChudW0gJiAweDFmKSArIDI7XG4gICAgICAgIHdoaWxlKGV4cCA+IDApe1xuICAgICAgICAgICAgdmFsICo9IDEwO1xuICAgICAgICAgICAgZXhwLS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSAobnVtID4+IDIpIC0gMHhiZjtcbiAgICAgICAgbGV0IGV4cCA9IChudW0gJiAzKSArIDE7XG4gICAgICAgIHdoaWxlKGV4cCA+IDApe1xuICAgICAgICAgICAgdmFsICo9IDYwO1xuICAgICAgICAgICAgZXhwLS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG59XG5mdW5jdGlvbiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkNTJjOGVhNjNhYmQwNzU5NChjb2RlUG9pbnQpIHtcbiAgICBjb25zdCBjYXRlZ29yeSA9ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ0MTAzNjRiYmI2NzNkZGJjKGNvZGVQb2ludCk7XG4gICAgcmV0dXJuIGNhdGVnb3J5ID09PSBcIkx1XCIgfHwgY2F0ZWdvcnkgPT09IFwiTGxcIiB8fCBjYXRlZ29yeSA9PT0gXCJMdFwiIHx8IGNhdGVnb3J5ID09PSBcIkxtXCIgfHwgY2F0ZWdvcnkgPT09IFwiTG9cIiB8fCBjYXRlZ29yeSA9PT0gXCJObFwiO1xufVxuZnVuY3Rpb24gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDcyN2Q5ZGJjNGZiYjk0OGYoY29kZVBvaW50KSB7XG4gICAgcmV0dXJuICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ0MTAzNjRiYmI2NzNkZGJjKGNvZGVQb2ludCkgPT09IFwiTmRcIjtcbn1cbmZ1bmN0aW9uICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCRhNWI0OWY0ZGM2YTA3ZDJjKGNvZGVQb2ludCkge1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDQxMDM2NGJiYjY3M2RkYmMoY29kZVBvaW50KTtcbiAgICByZXR1cm4gY2F0ZWdvcnkgPT09IFwiUGNcIiB8fCBjYXRlZ29yeSA9PT0gXCJQZFwiIHx8IGNhdGVnb3J5ID09PSBcIlBlXCIgfHwgY2F0ZWdvcnkgPT09IFwiUGZcIiB8fCBjYXRlZ29yeSA9PT0gXCJQaVwiIHx8IGNhdGVnb3J5ID09PSBcIlBvXCIgfHwgY2F0ZWdvcnkgPT09IFwiUHNcIjtcbn1cbmZ1bmN0aW9uICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ3YjY4MDRlOGRmNjFmY2Y1KGNvZGVQb2ludCkge1xuICAgIHJldHVybiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkNDEwMzY0YmJiNjczZGRiYyhjb2RlUG9pbnQpID09PSBcIkxsXCI7XG59XG5mdW5jdGlvbiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkYWViZDYxNzY0MDgxOGNkYShjb2RlUG9pbnQpIHtcbiAgICByZXR1cm4gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDQxMDM2NGJiYjY3M2RkYmMoY29kZVBvaW50KSA9PT0gXCJMdVwiO1xufVxuZnVuY3Rpb24gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JGRlOGI0ZWUyM2IyY2Y4MjMoY29kZVBvaW50KSB7XG4gICAgcmV0dXJuICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ0MTAzNjRiYmI2NzNkZGJjKGNvZGVQb2ludCkgPT09IFwiTHRcIjtcbn1cbmZ1bmN0aW9uICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQzYzUyZGQ4NDAyNGFlNzJjKGNvZGVQb2ludCkge1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDQxMDM2NGJiYjY3M2RkYmMoY29kZVBvaW50KTtcbiAgICByZXR1cm4gY2F0ZWdvcnkgPT09IFwiWnNcIiB8fCBjYXRlZ29yeSA9PT0gXCJabFwiIHx8IGNhdGVnb3J5ID09PSBcIlpwXCI7XG59XG5mdW5jdGlvbiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkYTExYmRjZmZlMTA5ZTc0Yihjb2RlUG9pbnQpIHtcbiAgICBjb25zdCBjYXRlZ29yeSA9ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ0MTAzNjRiYmI2NzNkZGJjKGNvZGVQb2ludCk7XG4gICAgcmV0dXJuIGNhdGVnb3J5ID09PSBcIk5kXCIgfHwgY2F0ZWdvcnkgPT09IFwiTm9cIiB8fCBjYXRlZ29yeSA9PT0gXCJObFwiIHx8IGNhdGVnb3J5ID09PSBcIkx1XCIgfHwgY2F0ZWdvcnkgPT09IFwiTGxcIiB8fCBjYXRlZ29yeSA9PT0gXCJMdFwiIHx8IGNhdGVnb3J5ID09PSBcIkxtXCIgfHwgY2F0ZWdvcnkgPT09IFwiTG9cIiB8fCBjYXRlZ29yeSA9PT0gXCJNZVwiIHx8IGNhdGVnb3J5ID09PSBcIk1jXCI7XG59XG5mdW5jdGlvbiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkZTMzYWQ2ODcxZTc2MjMzOChjb2RlUG9pbnQpIHtcbiAgICBjb25zdCBjYXRlZ29yeSA9ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ0MTAzNjRiYmI2NzNkZGJjKGNvZGVQb2ludCk7XG4gICAgcmV0dXJuIGNhdGVnb3J5ID09PSBcIk1uXCIgfHwgY2F0ZWdvcnkgPT09IFwiTWVcIiB8fCBjYXRlZ29yeSA9PT0gXCJNY1wiO1xufVxudmFyIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDJlMmJjZDg3MzlhZTAzOSA9IHtcbiAgICBnZXRDYXRlZ29yeTogJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDQxMDM2NGJiYjY3M2RkYmMsXG4gICAgZ2V0Q29tYmluaW5nQ2xhc3M6ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCRjMDNiOTE5YzY2NTFlZDU1LFxuICAgIGdldFNjcmlwdDogJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDk0MTU2OTQ0OGQxMzY2NjUsXG4gICAgZ2V0RWFzdEFzaWFuV2lkdGg6ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQ5MmY2MTg3ZGI4Y2E2ZDI2LFxuICAgIGdldE51bWVyaWNWYWx1ZTogJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDdkMTI1OGViYjc2MjVhMGQsXG4gICAgaXNBbHBoYWJldGljOiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkNTJjOGVhNjNhYmQwNzU5NCxcbiAgICBpc0RpZ2l0OiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkNzI3ZDlkYmM0ZmJiOTQ4ZixcbiAgICBpc1B1bmN0dWF0aW9uOiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkYTViNDlmNGRjNmEwN2QyYyxcbiAgICBpc0xvd2VyQ2FzZTogJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JDdiNjgwNGU4ZGY2MWZjZjUsXG4gICAgaXNVcHBlckNhc2U6ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCRhZWJkNjE3NjQwODE4Y2RhLFxuICAgIGlzVGl0bGVDYXNlOiAkNDNkNzk2M2U1NjQwOGIyNCRleHBvcnQkZGU4YjRlZTIzYjJjZjgyMyxcbiAgICBpc1doaXRlU3BhY2U6ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCQzYzUyZGQ4NDAyNGFlNzJjLFxuICAgIGlzQmFzZUZvcm06ICQ0M2Q3OTYzZTU2NDA4YjI0JGV4cG9ydCRhMTFiZGNmZmUxMDllNzRiLFxuICAgIGlzTWFyazogJDQzZDc5NjNlNTY0MDhiMjQkZXhwb3J0JGUzM2FkNjg3MWU3NjIzMzhcbn07XG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFpbi5janMubWFwXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDM0ODA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBKU09OLnBhcnNlKCdbW1wiODc0MFwiLFwi5I+w5LCy5JiD5Jam5JW48KeJp+S1t+SWs/CnsrHks6Lwp7OF466V5Jy25J2E5LGH5LGA8KSKv/CjmJfwp42S8Ka6i/Cng5LksZfwqo2R5J2P5Jea5LKF8KexrOS0h+SqpOSaofCmrKPniKXwpamU8KGpo/CjuIbwo72h5pmN5Zu7XCJdLFtcIjg3NjdcIixcIue2leWknfCorrnjt7TpnLTwp6+v5a+b8KG1nuWqpOOYpfCpurDlq5Hlrrfls7zmna7olpPwqaWF55Gh55Kd46G18KG1k/Cjmp7wpoCh47usXCJdLFtcIjg3YTFcIixcIvClo57jq7Xnq7zpvpfwpIWh8KikjfCjh6rwoKqK8KOJnuSMiuiShOm+lumQr+SksOiYk+WilumdiumImOenkOeosuaZoOaoqeiineeRjOevheaegueorOWJj+mBhuOTpuePhPCltrnnk4bpv4flnrPkpK/lkYzkhLHwo5qO5aCY56my8Ketpeiuj+SarvCmuojkhoHwpbaZ566u8KKSvOm/iPCik4HwopOJ8KKTjOm/ieiUhPCjlrvkgrTpv4rkk6Hwqre/5ouB54Gu6b+LXCJdLFtcIjg4NDBcIixcIuOHgFwiLDQsXCLwoISM44eF8KCDkfCgg43jh4bjh4fwoIOL8KG/qOOHiPCgg4rjh4njh4rjh4vjh4zwoISO44eN44eOxIDDgceNw4DEksOJxJrDiMWMw5PHkcOS4L+/w4rMhOG6vuC/v8OKzIzhu4DDisSBw6HHjsOgyZHEk8OpxJvDqMSrw63HkMOsxY3Ds8eSw7LFq8O6x5TDuceWx5jHmlwiXSxbXCI4OGExXCIsXCLHnMO84L+/w6rMhOG6v+C/v8OqzIzhu4HDqsmh4o+a4o+bXCJdLFtcIjg5NDBcIixcIvCqjqnwoYWFXCJdLFtcIjg5NDNcIixcIuaUilwiXSxbXCI4OTQ2XCIsXCLkuL3mu53ptY7ph59cIl0sW1wiODk0Y1wiLFwi8KecteaSkeS8muS8qOS+qOWFluWFtOWGnOWHpOWKoeWKqOWMu+WNjuWPkeWPmOWbouWjsOWkhOWkh+WksuWktOWtpuWunuWun+WymuW6huaAu+aWieafvuaghOahpea1jueCvOeUtee6pOe6rOe6uue7h+e7j+e7n+e8hue8t+iJuuiLj+iNr+inhuiuvuivoui9pui9p+i9rlwiXSxbXCI4OWExXCIsXCLnkJHns7znt43mpYbnq4nliKdcIl0sW1wiODlhYlwiLFwi6YaM56K46YWe6IK8XCJdLFtcIjg5YjBcIixcIui0i+iDtvCgp6dcIl0sW1wiODliNVwiLFwi6IKf6buH5LON6beJ6biM5LC+8Km3tvCngI7puIrwqoSz45eBXCJdLFtcIjg5YzFcIixcIua6muiIvueUmVwiXSxbXCI4OWM1XCIsXCLkpJHpqazpqo/pvpnnpofwqJGs8KG3ivCgl5Dwoqum5Lik5LqB5LqA5LqH5Lq/5Lur5Ly345GM5L6947mI5YCD5YKI45G945KT45Kl5YaG5aSF5Yeb5Ye85YiF5LqJ5Ym55YqQ5Yyn45eH5Y6p45WR5Y6w45WT5Y+C5ZCj45Wt45Wy45qB5ZKT5ZKj5ZK05ZK55ZOQ5ZOv5ZSY5ZSj5ZSo45aY5ZS/45al45a/5ZeX45eFXCJdLFtcIjhhNDBcIixcIvCntoTllKVcIl0sW1wiOGE0M1wiLFwi8KCxgvCgtJXwpYSr5ZaQ8KKzhuOnrPCgjYHouYbwpLa48KmTpeSBk/Cogr7nnbrworC446i05J+V8KiFnfCmp7LwpLeq5pOd8KC1vPCgvrTwoLOV8KGDtOaSjei5vvCgupbwoLCL8KC9pPCisqnwqImW8KSTk1wiXSxbXCI4YTY0XCIsXCLwoLWG8KmpjfCog6nkn7TwpLqn8KKzgumqsuOpp/Cpl7Tjv63jlIbwpYuH8KmflPCno4jworWE6bWu6aCVXCJdLFtcIjhhNzZcIixcIuSPmfCmgqXmkrTlk6PworWM8KKvivChgbfjp7vwoYGvXCJdLFtcIjhhYTFcIixcIvCmm5rwppyW8KemoOaTqvClgZLwoLGD6Lmo8KKGofCorYzwoJyxXCJdLFtcIjhhYWNcIixcIuSgi/Cghqnjv7rlobPworaNXCJdLFtcIjhhYjJcIixcIvCkl4jwoJO88KaCl/CgvYzwoLaW5ZW55IK75I66XCJdLFtcIjhhYmJcIixcIuSqtPCiqabwoYKd6Iaq6aO18KC2nOaNueOnvvCinbXot4DlmqHmkbzjuYNcIl0sW1wiOGFjOVwiLFwi8KqYgfCguInwoquP8KKziVwiXSxbXCI4YWNlXCIsXCLwoYOI8KOnguOmkuOohvCoipvjlbjwpbmJ8KKDh+WZkvCgvLHworKy8KmcoOOSvOawvfCkuLtcIl0sW1wiOGFkZlwiLFwi8KeVtPCiuovwooiI8KqZm/Cos43woLm68KCwtPCmoJznvpPwoYOP8KKgg/CipLnjl7vwpYej8KC6jPCgvo3woLqq476T8KC8sPCgtYfwoYWP8KC5jFwiXSxbXCI4YWY2XCIsXCLwoLqr8KCuqfCgtYjwoYOA8KGEveO/ufCimpbmkLLwoL6tXCJdLFtcIjhiNDBcIixcIvCjj7Twp5i58KKvjvCgtb7woLW/8KKxkfCisZXjqJjwoLqY8KGDh/CgvK7wqpiy8KatkPCos5LwqLaZ8KiziumWquWTjOiLhOWWuVwiXSxbXCI4YjU1XCIsXCLwqbuD6bCm6aq28KednvCit67nhYDoha3og6zlsJzwppWy6IS0456X5Y2f8KiCvemGtvCgu7rwoLiP8KC5t/Cgu7vjl53wpLer45iJ8KCzluWar/CinrXwoYOJ8KC4kPCgubjwoYG48KGFiPCoiIfwoZGV8KC5ufCkuZDworak5amU8KGAnfChgJ7woYO18KGDtuWenPCguJFcIl0sW1wiOGJhMVwiLFwi8KealPCoi43woL618KC5u/Clhb7jnIPwoL628KGGgPCli5jwqoq98KSnmvChoLrwpIW38KiJvOWimeWJqOOYmvClnL3nrrLlrajkoIDkrKzpvKfkp6fpsJ/pro3wpa208KOEveWXu+OXsuWaieS4qOWkgvChr4Hwr6G46Z2R8KCChuS5m+S6u+OUvuWwo+W9keW/hOOjuuaJjOaUteatuuawteawuueBrOeIq+S4rOeKrfCko6nnvZLnpLvns7nnvZPwpomq45OBXCJdLFtcIjhiZGVcIixcIvCmjYvogILogoDwppiS8KalkeWNneihpOingfCnorLorqDotJ3pkoXplbjplb/pl6jwqLiP6Z+m6aG16aOO6aOe6aWj8KmgkOmxvOm4n+m7hOatr++kh+S4t/CggofpmJ3miLfpkqJcIl0sW1wiOGM0MFwiLFwi5YC75re+8Kmxs+m+puO3ieiij/CkhY7ngbfls7XkrKDwpYeN45WZ8KW0sOaEovCoqLLovqfph7bnhpHmnJnnjrrwo4qB8KqEh+Oyi/ChpoDkrJDno6TnkILlhq7wqJyP5ICJ5qmj8KqKuuSIo+iYj/Cgqa/nqKrwqaWH8KirqumdleeBjeWMpPCigb7pj7Tnm5nwqKej6b6n55+d5Lqj5L+w5YK85Liv5LyX6b6o5ZC057aL5aKS5aOQ8KG2tuW6kuW6meW/gvCinJLmlotcIl0sW1wiOGNhMVwiLFwi8KOPueakmeapg/CjsaPms79cIl0sW1wiOGNhN1wiLFwi54iA8KSUheeOjOO7m/CkqJPlrJXnkrnoroPwpbKk8KWaleeqk+evrOezg+e5rOiLuOiWl+m+qeiikOm+qui6uem+q+i/j+iVn+mnoOmIoem+rPCotrnwoZC/5IGx5Iqi5aiaXCJdLFtcIjhjYzlcIixcIumhqOadq+SJtuWcvVwiXSxbXCI4Y2NlXCIsXCLol5bwpKW76Iq/8KeEjeSygfCmtbTltbvwpqyV8Ka+vum+rem+ruWulum+r+abp+e5m+a5l+eniuO2iOSTg/CjiZbwop6W5I6a5JS2XCJdLFtcIjhjZTZcIixcIuWzlfCjrJroq7nlsbjjtJLwo5WR5bW46b6y54WX5JWY8KSDrPChuKPksbfjpbjjkYrwoIak8KaxgeirjOS+tPCgiLnlpr/ohazpoZbwqaO65by7XCJdLFtcIjhkNDBcIixcIvCgrp9cIl0sW1wiOGQ0MlwiLFwi8KKHgfCopa3khILkmrvwqYG547yH6b6z8KqGteSDuOOfluSbt/CmsYbkhbzwqJqy8KePv+SVreOjlPClkprklaHklJvktonksbvktbbkl6rjv4jwpKyP45mh5JOe5JK95Iet5bS+5bWI5bWW47e846CP5bak5ba546Cg46C45bmC5bq95byl5b6D46SI46SU46S/46WN5oOX5oS95bOl46aJ5oa35oa55oeP46a45ois5oqQ5oul5oyY46e45ZqxXCJdLFtcIjhkYTFcIixcIuOog+aPouaPu+aQh+aRmuOpi+aTgOW0leWYoem+n+Oql+aWhuOqveaXv+aZk+OrsuaakuOsouacluOtguaepOaggOOtmOahiuaihOOtsuOtseOtu+akiealg+eJnOalpOamn+amheOuvOanluOvneappeaptOapseaqguOvrOaqmeOvsuaqq+aqtearlOartuaugeavgeavquaxteayquOzi+a0gua0hua0pua2geOzr+a2pOa2sea4lea4mOa4qea6hvCop4Dmurvmu6Lmu5rpvb/mu6jmu6nmvKTmvLTjtYbwo72B5r6B5r6+47Wq47W154a35bKZ47aK54Cs47aR54GQ54GU54Gv54G/54KJ8KCMpeSPgeOXsfCgu5hcIl0sW1wiOGU0MFwiLFwi8KO7l+WevvCmu5PnhL7wpZ+g45mO5qai8KivqeWttOepifClo6HwqZOZ56ml56m98KWmrOequ+eqsOerguerg+eHkfCmko3kh4rnq5rnq53nq6rkh6/lkrLwpbCB56yL562V56yp8KWMjvCls77nrqLnra/ojpzwpa608Kaxv+evkOiQoeeukueuuPCltKDjtq3wpbGl6JKS56+657CG57C18KWzgeexhOeyg/CkooLnsqbmmb3wpJW457OJ57OH57Om57G057Oz57O157OOXCJdLFtcIjhlYTFcIixcIue5p+SUnfCmuYTntZ3wpruW55KN57aJ57ar54S157az57eS8KSBl/CmgKnnt6TjtJPnt7XwoZ+557el8KiNree4nfCmhKHwpoWa57mu57qS5Iyr6ZGs57in572A572B572H56S28KaLkOmnoee+l/CmjZHnvqPwoZmh8KCBqOSVnPCjnabklIPwqIy657+68KaSieiAheiAiOiAneiAqOiAr/CqgofwprOD6IC76IC86IGh8KKclOSmifCmmKbwo7ej8KabqOacpeiCp/CoqYjohIfohJrlorDwopu25rG/8KaSmPCkvrjmk6fwoZKK6IiY8KGhnuapk/CkqaXwpKqV5JG66Iip8KCsjfCmqZLwo7W+5L+58KGTveiTouiNovCmrIrwpKan8KOUsPChnbPwo7e46Iqq5qSb8K+mlOSHm1wiXSxbXCI4ZjQwXCIsXCLolYvoi5DojJrwoLiW8KGetOObgfCjhb3wo5Wa6Im76Iui6IyY8KO6i/CmtqPwpqyF8Kaul/Cjl47jtr/ojJ3ll6zojoXklIvwpral6I6s6I+B6I+T45G+8Ka7lOapl+iVmuOSlvCmuYLworuv6JGY8KWvpOiRseO3k+STpOaqp+iRivCjsrXnpZjokqjwpq6W8Ka5t/CmuYPok57okI/ojpHkkqDokpPok6TwpbKR5ImA8KWzgOSVg+iUtOWrsvCmupnklKfolbPklJbmnr/omJZcIl0sW1wiOGZhMVwiLFwi8KiYpfComLvol4Hwp4KI6JiC8KGWgvCng43wr6ay5JWq6Jio45mI8KGiouWPt/Cnjpromb7onbHwqoO46J+u8KKwp+ieseifmuigj+WZoeiZrOahluSYj+ihheihhvCnl6Dwo7a58KeXpOihnuiinOSZm+iitOiiteaPgeijheedt/CnnI/opofoporopqbopqnopqfoprzwqKil6Ken8KekpPCnqr3oqpznnpPph77oqpDwp6mZ56up8KesuvCjvo/knJPwp6y454W86KyM6Kyf8KWQsPCllaXorL/orYzorY3oqqnwpKm66K6Q6K6b6Kqv8KGbn+SYleihj+iym/CntZTwp7aP8K+nlOOcpfCntZPos5bwp7aY8Ke2vei0kui0g/ChpJDos5vngZzotJHwpLOJ47uQ6LW3XCJdLFtcIjkwNDBcIixcIui2qfCogILwoYCU8KSmiuOtvPCohrzwp4SM56un6Lqt6Lq26LuD6YuU6LyZ6Lyt8KiNpfCokJLovqXpjIPwqoqf8KCpkOi+s+SkqvCop57wqJS98KO2u+W7uPCjiaLov7nwqoCU8KiavPColIHwooyl46aA8Ka7l+mAt/ColLzwp6q+6YGh8KiVrPComIvpgqjwqJyT6YOE8KibpumCrumDvemFp+OrsOmGqemHhOeyrPCopLPwobqJ6YiO5rKf6YmB6Ymi8KWWuemKufCoq4bwo7Kb8KisjPCll5tcIl0sW1wiOTBhMVwiLFwi8KC0semMrOmNq/Coq6HwqK+r54KP5auD8KirovCoq6XkpaXpiYTwqK+s8KiwufCor7/pjbPpkZvourzploXplqbpkKbplqDmv7bkirnwopm68KibmPChibzwo7iu5Kef5rCc6Zm76ZqW5IWs6Zqj8Ka7leaHmumatuejtfCoq6Dpmr3lj4zkpqHwprK48KCJtPCmkJDwqYKv8KmDpfCkq5HwoaSV8KOMiumcseiZgumctuSoj+SUveSWhfCkq6nngbXlrYHpnJvpnZzwqYeV6Z2X5a2K8KmHq+mdn+mQpeWDkPCjgrfwo4K86Z6J6Z6f6Z6x6Z6+6Z+A6Z+S6Z+g8KWRrOmfrueQnPCpkLPpn7/pn7XwqZCd8KeluuSrkemgtOmgs+mhi+mhpuOsjvCnhbXjtZHwoJiw8KSFnFwiXSxbXCI5MTQwXCIsXCLwpZyG6aOK6aK36aOI6aOH5Ku/8Ka0p/Chm5PllrDpo6Hpo6bpo6zpjbjppLnwpKip5K2y8Kmhl/CppIXpp7XpqIzpqLvpqJDpqZjwpZyl45uE8KmCsfCpr5Xpq6Dpq6LwqayF6au05LCO6ayU6ayt8KiYgOWAtOmstPCmpqjjo4Pwo4G96a2Q6a2A8Km0vuWphfChoaPpro7wpImL6bCC6a+/6bCM8Km5qOm3lPCpvrfwqoaS8KqGq/Cqg6HwqoSj8KqHn+m1vum2g/CqhLTpuI7moohcIl0sW1wiOTFhMVwiLFwi6beE8KKFm/CqhpPwqoig8KGku/CqiLPptLnwqoK58KqKtOm6kOm6lem6num6ouS0tOm6qum6r/CkjaTpu4HjraDjp6XjtJ3kvLLjnr7wqLCr6byC6byI5K6W6ZCk8Ka2oum8l+m8lum8ueWan+Waium9hemmuPCpgovpn7Lokb/pvaLpvannq5zpvo7niJbkrr7wpKW18KSmu+eFt/Ckp7jwpI2I8KSpkeeOnvCor5rwoaO656af8KilvvCouLbpjanpj7PwqKmE6Yus6Y6B6Y+L8KilrPCkkrnniJfju6vnnbLnqYPng5DwpJGz8KSPuOeFvvChn6/ngqPwoaK+8KOWmeO7h/ChooXwpZCv8KGfuOOcovChm7vwoaC545uh8KGdtPCho5Hwpb2L45yj8KGbgOWdm/CkqKXwoY++8KGKqFwiXSxbXCI5MjQwXCIsXCLwoY+G8KGStuiUg/CjmqbolIPokZXwpKaU8KeFpfCjuLHwpZWc8KO7u/CngZLkk7Two5uu8KmmnfCmvKbmn7njnLPjsJXjt6floazwoaSi5qCQ5IGX8KOcv/Ckg6HwpIKL8KSEj/CmsKHlk4vlmp7wppqx5ZqS8KC/n/CgrqjwoLiN6Y+G8Kisk+mOnOS7uOWEq+OgmfCkkLbkurzwoJGl8KCNv+S9i+S+ivClmZHlqajwoIar8KCPi+OmmfCgjIrwoJCU45C15Lyp8KCLgPCourPwoIm16Kua8KCIjOS6mFwiXSxbXCI5MmExXCIsXCLlg43lhI3kvqLkvIPwpKiO8KO6iuS9guWAruWBrOWCgeS/jOS/peWBmOWDvOWFmeWFm+WFneWFnua5tvCjlpXwo7i58KO6v+a1svChooTwo7qJ5Yao5YeD8KCXoOSTnfCgkqPwoJKS8KCSkei1uvCoqpzwoJyO5YmZ5Yqk8KChs+WLoemNruSZuueGjPCkjozwoLCg8KSmrPChg6Tmp5HwoLid55G547ue55KZ55CU55GW546Y5K6O8KSqvPCkgo3lj5DjloTniI/wpIOJ5Za08KCNheWTjfCgr4blnJ3piZ3pm7Tpjabln53lno3lnb/jmL7lo4vlqpnwqKmG8KGbuvChna/woZyQ5ais5aa46YqP5am+5auP5aiS8KWlhvChp7PwoaGh8KSKleObtea0heeRg+WoofCluoNcIl0sW1wiOTM0MFwiLFwi5aqB8Kivl/CgkJPpj6DnkozwoYyD54SF5KWy6ZCI8Kinu+mOveOeoOWwnuWynuW5nuW5iPChppbwoaW88KOrruW7jeWtj/ChpIPwoaSE45yB8KGioOObnfChm77jm5PohKrwqKmH8KG2uvCjkbLwqKao5byM5byO8KGkp/ChnqvlqavwoZy75a2E6JiU8KeXveihoOaBvvCioaDwopir5b+b47q48KKWr/Cilr7wqYKI8Ka9s+aHgPCggL7woIGG8KKYm+aGmeaGmOaBtfCispvworSH8KSblPCphY1cIl0sW1wiOTNhMVwiLFwi5pGx8KSZpfCirarjqKnwoqyi8KORkPCpo6rworm45oy38KqRm+aStuaMseaPkfCkp6PworWn5oqk8KKyoeaQu+aVq+alsuOvtPCjgo7wo4qt8KSmifCjiqvllI3wo4ug8KGjmfCpkL/mm47wo4qJ8KOGs+OroOSGkPClloTwqKyi8KWWj/Chm7zwpZWb8KWQpeejrvCjhIPwoaCq8KOItOORpPCjiI/wo4aC8KSLieaajvCmtKTmmavkrpPmmLDwp6Gw8KG3q+aZo/Cji5Lwo4uh5pie8KWhsuOjkfCjoLrwo568466Z8KOeovCjj77nk5Djrpbmno/wpJiq5qK25qCe46+E5qq+46Gj8KOflfCkkofmqLPmqZLmq4nmrIXwoaSS5pSR5qKY5qmM46+X5qm65q2X8KO/gPCjsprpjqDpi7LwqK+q8Kiri1wiXSxbXCI5NDQwXCIsXCLpionwqICe8KinnOmRp+a2pea8i/Ckp6zmtafwo72/47aP5riE8KSAvOWovea4iuWhh+a0pOehgueEu/CkjJrwpIm254Ox54mQ54qH54qU8KSej/CknKXlhbnwpKqk8KCXq+eRuvCju7jwo5mf8KSpivCkpJfwpb+h47yG47qx8KSrn/CosKPwo7y15oKn47uz55OM55C86Y6H55C35JKf8Ka3quSVkeeWg+O9o/Cks5nwpLSG472Y55WV55mz8KqXhuOsmeeRqPCoq4zwpKar8KSmjuOru1wiXSxbXCI5NGExXCIsXCLjt43wpKmO47u/8KSnhfCko7Pph7rlnLLpjYLwqKuj8KGhpOWDn/CliKHwpYen55248KOIsuecjuecj+edu/Ckmpfwo56B46me8KSjsOeQuOeSm+O6v/CkqrrwpKuH5IOI8KSqlvCmhq7pjIfwpZaB56Ce56KN56KI56OS54+Q56WZ8KedgfClm6PkhI7nppvokpbnpqXmqK3wo7u656i656e05IWu8KGbpuSEsumIteensfCgtYzwpKaM8KCKmfCjtrrwoZ2u45aX5ZWr45Ww45qq8KCHlPCgsI3nq6LlqZnwopu18KWqr/ClqpzlqI3woImb56Ow5aiq8KWvhuervuSHueexneexreSIkfClrrPwpbq88KW6puezjfCkp7nwoZ6w57KO57G857Ku5qqy57ec57iH57eT572O8KaJoVwiXSxbXCI5NTQwXCIsXCLwpoWc8KetiOe2l/CluoLkiarwpq218KCkluaflvCggY7wo5eP5Z+E8KaQkvCmj7jwpKWi57+d56yn8KCgrPClq6nwpbWD56yM8KW4jumnpuiZhempo+aonPCjkL/jp6LwpKe38KaWremon/CmlqDokoDwp4Sn8KazkeSTquiEt+SQguiDhuiEieiFgvCmnrTpo4PwpqmC6Imi6Iml8KapkeiRk/CmtqfomJDwp4ib5aqG5IW/8KGhgOWsq/ChoqHlq6TwoaOY6Jqg8K+mvPCjto/ooK3wp5Ci5aiCXCJdLFtcIjk1YTFcIixcIuihruS9heiih+iiv+ijpuilpeiljfClmoPopZTwp56F8KeehPCor7XwqK+Z8KiunPCop7njuq3okqPkm7Xkm4/jn7LoqL3oqJzwqZGI5b2N6Yir8KSKhOaXlOeEqeeDhPChoYXpta3osp/os6nwp7ec5aaa55+D5aew5I2u45uU6Liq6Lqn8KSwiei8sOi9iuSLtOaxmOa+u/CijKHkopvmvbnmuovwoZ+a6a+p45q18KSkr+mCu+mCl+WVseSkhumGu+mQhPCoqYvkgaLwqKu86ZCn8KiwnfCosLvok6XoqKvplpnplqfplpfplpbwqLS055GF47uC8KSjv/CkqYLwpI+q47un8KOIpemaj/Cou6fwqLmm8Ki5peO7jPCkp63wpKm48KO/rueQkueRq+O7vOmdgfCpgrBcIl0sW1wiOTY0MFwiLFwi5qGH5Kid8KmCk/Cln5/pnZ3pjajwqKaJ8KiwpvCorK/wpo6+6Yq65ayR6K2p5KS854+58KSIm+mem+mdsemkuPCgvKblt4HwqK+F8KSqsumgn/Cpk5rpi7bwqZeX6Yel5JOA8KitkPCkqafwqK2k6aOc8KipheO8gOmIquSkpeiQlOmku+mljfCnrIbjt73pppvkra/ppqrpqZzwqK2l8KWjiOaqj+mooeWrvumor/Cpo7HkrpDwqaWI6aa85K695K6X6Y295aGy8KGMguWgovCkprhcIl0sW1wiOTZhMVwiLFwi8KGTqOehhPCinJ/wo7a45qOF47W96ZGY46Sn5oWQ8KKegfCipavmhIfpsY/psZPpsbvpsLXpsJDprb/pr4/wqbit6a6f8KqHtfCqg77ptKHksq7wpISE6biY5LKw6bSM8KqGtPCqg63wqoOz8Kmkr+m2peiSvfCmuJLwpr+f8KauguiXvOSUs/CmtqTwprqE8Ka3sOiQoOiXrvCmuIDwo5+X8KaBpOenovCjlpzwo5mA5KSt8KSnnuO1oumPm+mKvumNiPCgir/nornpibfpkY3kv6TjkYDpgaTwpZWd56C956GU56K256GL8KGdl/Cjh4nwpKWB45qa5L2y5r+a5r+Z54Ce54Ce5ZCU8KSGteWeu+Wjs+Weium0luWfl+eEtOOSr/Ckhqznh6vwprGA8KS+l+WsqPChnrXwqKmJXCJdLFtcIjk3NDBcIixcIuaEjOWrjuWoi+SKvPCkkojjnKzkrbvwqKe86Y676Y648KGjlvCgvJ3okbLwprOA8KGQk/Cki7rworCm8KSPgeWmlPCjtrfwpp2B57ao8KaFm/CmgqTwpKa58KSmi/Cop7rpi6Xnj6Lju6nnkrTwqK2j8KGin+O7ofCkqrPmq5jnj7Pnj7vju5bwpKi+8KSqlPChn5nwpKmm8KCOp/ChkKTwpKel55GI8KSklueCpfCkpbbpioTnj6bpjZ/woJO+6Yyx8KirjvCoqJbpjobwqK+n8KWXleSktfCoqoLnhatcIl0sW1wiOTdhMVwiLFwi8KSlg/Cgs7/lmqTwoJia8KCvq/CgsrjllILnp4TwoZ+657e+8KGbgvCkqZDwoaGS5JSu6ZCB45yK8KirgPCkpq3lprDwoaK/8KGig/CnkoTlqqHjm6Lwo7Wb45qw6Ymf5am58KiqgfChoaLpjbTjs43woKq05KqW46aK5YO047Wp47WM8KGOnOeFteSLu/CoiJjmuI/wqYOk5JOr5rWX8Ke5j+eBp+ayr+OzlvCjv63wo7it5riC5ryM47Wv8KCPteeVkeOavOOTiOSagOO7muShseWnhOmJruSkvui9gfCosJzwpq+A5aCS5Z+I45uW8KGRkueDvvCkjaLwpKmx8KK/o/ChirDwoo695qK55qWn8KGOmPCjk6Xwp6+08KObn/CoqoPwo5+W8KOPuvCksp/mqJrwo5qt8Kayt+iQvuSTn+STjlwiXSxbXCI5ODQwXCIsXCLwprSm8Ka1kfCmsoLwpr+e5ryX8KeEieiMvfChnLroj63wprKA8KeBk/Chn5vlponlqoLwoZ6z5amh5amx8KGkhfCkh7zjnK3lp6/woZy845uH54aO6Y6Q5pqa8KSKpeWpruWoq/CkipPmqKvwo7u58KectvCkkZvwpIuK54Sd8KSJmfCop6HkvrDwprSo5bOC8KSTjvCnuY3wpI695qiM8KSJlvChjITngqbnhLPwpI+p47al5rOf8K+gpfCkqY/nuaXlp6vltK/jt7PlvZzwpKmd8KGfn+e2pOiQplwiXSxbXCI5OGExXCIsXCLlkoXwo6u68KOMgPCgiJTlnb7woKOV8KCYmeO/pfChvp7wqoq254CD8KmFm+W1sOeOj+ezk/CoqZnwqZCg5L+I57+n54uN54yQ8KertOeMuOeMufClm7bnjYHnjYjjuqnwp6yY6YGs54e18KSjsuePoeiHtuO7iuecjOO7keayouWbveeQmeeQnueQn+O7ouO7sOO7tOO7uueTk+O8juO9k+eVgueVreeVsueWjeO9vOeXiOeXnOO/gOeZjeO/l+eZtOO/nOeZuvCkvZznhojlmKPopoDloankgJ3nnYPkgLnmnaHkgYXjl5vnnpjkgarkga/lsZ7nnr7nn4vlo7LnoJjngrnnoJzkgqjnoLnnoYfnoZHnoabokYjwpZS156Sz5qCD56Sy5ISDXCJdLFtcIjk5NDBcIixcIuSEieemkeemmei+u+eohui+vOSFp+eqkeSGsueqvOiJueSHhOerj+erm+SHj+S4oeetouetrOetu+ewkuewm+SJoOSJuuexu+eynOSKjOeyuOSKlOezrei+k+eDgPCgs4/nt4/nt5Tnt5Dnt73nvq7nvrTnip/kjpfogKDogKXnrLnogK7ogLHogZTjt4zlnrTngqDogrfog6nkj63ohIznjKrohI7ohJLnlaDohJTkkIHjrLnohZbohZnohZpcIl0sW1wiOTlhMVwiLFwi5JCT5aC66IW86IaE5JCl6IaT5JCt6Ial5Z+v6IeB6Iek6ImU5JKP6Iqm6Im26IuK6IuY6Iu/5JKw6I2X6Zmp5qaK6JCF54O16JGk5oOj6JKI5JSE6JK+6JOh6JO46JSQ6JS46JWS5JS76JWv6JWw6Jeg5JW36Jmy6JqS6Jqy6Juv6ZmF6J6L5JiG5JiX6KKu6KO/6KSk6KWH6KaR8Kelp+ioqeiouOiqlOiqtOixkeizlOizsui0nOSemOWhn+i3g+SfreS7rui4uuWXmOWdlOi5seWXtei6sOSgt+i7jui7oui7pOi7rei7sui+t+i/gei/iui/jOmAs+mnhOSiremjoOmIk+SknumIqOmJmOmJq+mKsemKrumKv1wiXSxbXCI5YTQwXCIsXCLpi6Ppi6vpi7Ppi7Tpi73pjYPpjoTpjq3kpYXkpZHpur/pkJfljIHpkJ3pkK3pkL7kparpkZTpkbnplK3plqLkpqfpl7TpmLPkp6XmnqDkqKTpnYDkqLXpnrLpn4LlmZTkq6Tmg6jpornkrJnpo7HloYTppI7ppJnlhrTppJzppLfppYLppZ3ppaLkrbDpp4Xkrp3pqLzprI/nqoPpranproHpr53pr7Hpr7Tksa3psKDjna/woa+C6bWJ6bC6XCJdLFtcIjlhYTFcIixcIum7vuWZkOm2k+m2vem3gOm3vOmTtui+tum5u+m6rOm6sem6vem7humTnOm7oum7sem7uOeriOm9hPCggpTwoIq38KCOoOakmumTg+WmrPCgk5floYDpk4HjnrnwoJeV8KCYlfCgmbbwoZq65Z2X54Wz8KCrgvCgq43woK6/5ZGq8K+gu/Cgr4vlkp7woK+78KCwu/CgsZPwoLGl8KCxvOaDp/Cgso3lmbrwoLK18KCznfCgs63woLWv8KC2svCgt4jmpZXpsK/onqXwoLiE8KC4jvCgu5fwoL6Q8KC8rfCgubPlsKDwoL685biL8KGBnPChgY/woYG25pye8KGBu/ChgojwoYKW45mH8KGCv/Chg5PwoYSv8KGEu+WNpOiSrfChi6PwoY218KGMtuiugfChlbfwoZiZ8KGfg/Chn4fkubjngrvwoaCt8KGlqlwiXSxbXCI5YjQwXCIsXCLwoait8KGphfChsKrwobGw8KGyrPChu4jmi4PwobuV8KG8leeGmOahlfCigYXmp6njm4jwoom88KKPl/Cij7rwopyq8KKhsfCipY/oi73woqWn8KKmk/Ciq5XopqXwoquo6L6g8KKsjumeuPCirL/poYfpqr3worGMXCJdLFtcIjliNjJcIixcIvCisojworK38KWvqPCitIjworSS8KK2t/CitpXwormC8KK9tPCiv4zwo4Cz8KOBpvCjjJ/wo4+e5b6x5pmI5pq/8KepufCjlafwo5ez54iB8KSmuuefl/CjmJrwo5yW57qH8KCNhuWiteacjlwiXSxbXCI5YmExXCIsXCLmpJjwo6qn8KeZl/Clv6Lwo7iR8KO6ufCnl77wooKa5KOQ5Kq48KSEmfCoqprwpIuu8KSMjfCkgLvwpIy08KSOlvCkqYXwoJeK5YeS8KCYkeWmn/Chuqjjrr7wo7O/8KSQhPCkk5blnojwpJm046ab8KScr/Col6jwqaeJ452i8KKHg+itnvCorY7pp5bwpKCS8KSju/CkqJXniInwpKuA8KCxuOWlpfCkuqXwpL6G8KCduei7mvClgKzlio/lnL/nhbHwpYqZ8KWQmfCjvYrwpKqn5Za88KWRhvClka7wpq2S6YeU45Gz8KWUv/CnmLLwpZWe5JyY8KWVovCllabwpZ+H8KSkv/CloZ3lgabjk7vwo4+M5oOe8KWkg+SdvPCopYjwpaqu8KWuifClsIbwobaQ5Z6h54WR5r628KaEgvCnsJLpgZbwpoay8KS+muitovCmkILwppGKXCJdLFtcIjljNDBcIixcIuW1m/Cmr7fovLbwppKE8KGknOirqvCkp7bwppKI8KO/r/CmlJLkr4Dwppa/8KaatfCinJvpkaXwpZ+h5oaV5ain8K+jjeS+u+WaufCklKHwppu85Lmq8KSktOmZlua2j/Cmsr3jmJjopbfwpp6Z8KahrvCmkJHwpqGe54ef8Kajh+etgvCpg4DwoKiR8KakpumEhPCmpLnnqYXpt7Dwpqe66aim8KaoreOZn/CmkanwoICh56aD8KaotPCmrZvltKzwo5SZ6I+P8KauneSbkPCmsqTnlLvooaXwprau5aK2XCJdLFtcIjljYTFcIixcIuOcnPCilo3wp4GL8KeHjeOxlPCnioDwp4qF6YqB8KKFuvCniovpjLDwp4um8KSnkOawuemSn/CnkZDwoLu46KCn6KO18KKkpvCokbPwoZ6x5rq48KSoqvChoKDjpqTjmrnlsJDnp6PklL/mmrbwqbKt8KmipOilg/Cnn4zwp6GY5ZuW5IOf8KGYiuOmofCjnK/wqIOo8KGPheeGreiNpvCnp53wqYao5amn5LK38KeCr/Copqvwp6e98KeoivCnrIvwp7Wm8KSFuuetg+elvvCogInmvrXwqouf5qiD8KiMmOWOovCmuIfpjr/moLbpnZ3wqIWv8KiAo/CmprXwoY+t8KOIr/CogYjltoXwqLCw8KiCg+Wclemgo/CopYnltqvwpKaI5pa+5qeV5Y+S8KSqpfCjvoHjsJHmnLbwqIKQ8KiDtPCohK7wob6h8KiFj1wiXSxbXCI5ZDQwXCIsXCLwqIaJ8KiGr/CoiJrwqIyG8KiMr/Cojorjl4rwqJGo8KiaquSjuuaPpvCopZbnoIjpiZXwqKa45I+y8Kinp+SPn/Cop6jwqK2G8KivlOWnuPCosInovIvwqL+F8KmDrOetkfCphJDwqYS847e38KmFnvCkq4rov5Dnio/lmovwqZOn8KmXqfCplrDwqZa48KmcsvCpo5HwqaWJ8KmlqvCpp4Pwqaio8KmsjvCptZrwqbab57qf8Km7uPCpvKPksqTplYfwqoqT54ai8KqLv+S2kemAkvCql4vktpzwoLKc6L6+5ZeBXCJdLFtcIjlkYTFcIixcIui+uvCikrDovrnwpKqT5JSJ57m/5r2W5qqx5Luq45Ok8KisrPCnop3jnLrouoDwoZ+18KiApPCorazwqK6Z8KeovvCmmq/jt6vwp5mV8KOyt/ClmLXwpaWW5Lqa8KW6gfCmiZjlmr/woLmt6LiO5a2t8KO6iPCksp7mj57mi5DwoZ+28KGhu+aUsOWYrfClsYrlkJrwpYyR47eG8Km2mOSxveWYouWYnue9ifClu5jlpbXwo7WA6J2w5Lic8KC/qvCgtYnwo5q66ISX6bWe6LSY55i76bGF55mO55656Y2F5ZCy6IWI6Iu35Zil6ISy6JCY6IK95Zeq56Wi5ZmD5ZCW8KC6neOXjuWYheWXseabsfCoi6LjmK3nlLTll7DllrrlkpfllbLwoLGB8KCyluW7kPClhYjwoLm28KKxolwiXSxbXCI5ZTQwXCIsXCLwoLqi6bqr57Wa5Zee8KGBteaKnemdreWSlOizjeeHtumFtuaPvOaOueaPvuWVqfCirYPpsbLworqz5Yaa45Of8KC2p+WGp+WRjeWUnuWUk+eZpui4rfCmoornlrHogrbooITonoboo4fohrbokJzwoYOB5JOs54yE8KSchuWukOiMi/CmopPlmbvwopu08Ke0r/CkhqPwp7Wz8Ka7kPCnirbphbDwoYeZ6YiI8KOzvPCqmqnwoLqs8KC7ueeJpvChsqLknY7wpL+C8Ke/ufCgv6vkg7pcIl0sW1wiOWVhMVwiLFwi6bGd5pSf8KK2oOSjs/Ckn6DwqbW88KC/rPCguIrmgaLwp5aj8KC/rVwiXSxbXCI5ZWFkXCIsXCLwpoGI8KGGh+eGo+e6jum1kOS4muS4hOOVt+WsjeaysuWNp+OarOOnnOWNveOapfCkmJjloprwpK2u6Iit5ZGL5Z6q8KWqlfCgpblcIl0sW1wiOWVjNVwiLFwi46mS8KKRpeeNtPCpuqzktInpr63wo7O+8Km8sOSxm/CkvqnwqZae8Km/nuiRnPCjtrbwp4qy8Kaes/CjnKDmjK7ntKXwo7u38KO4rOOoqumAiOWLjOO5tOOZuuSXqfCgko7nmYDlq7DwoLq256G68Ke8ruWip+SCv+WZvOmui+W1tOeZlPCqkLTpuoXks6Hnl7njn7vmhJnwo4Oa8KSPslwiXSxbXCI5ZWY1XCIsXCLlmZ3woYqp5Z6n8KSlo/CpuIbliLTwp4Ku45at5rGK6bW8XCJdLFtcIjlmNDBcIixcIuexlumsueWfnvChnazlsZPmk5PwqZOQ8KaMtfCnhaTomq3woLSo8Ka0ovCkq6LwoLWxXCJdLFtcIjlmNGZcIixcIuWHvvChvI/lto7pnIPwobeR6bqB6YGM56yf6ayC5bOR566j5omo5oy16au/56+P6ayq57G+6ayu57GC57KG6bCV56+86ayJ6byX6bCb8KSkvum9muWVs+Wvg+S/vem6mOS/suWJoOO4huWLkeWdp+WBluWmt+W4kumfiOm2q+i9nOWRqemetOmlgOmeuuWMrOaEsFwiXSxbXCI5ZmExXCIsXCLmpKzlj5rpsIrptILksLvpmYHmpoDlgqbnlYbwoZ2t6aea5YmzXCJdLFtcIjlmYWVcIixcIumFmemagemFnFwiXSxbXCI5ZmIyXCIsXCLphZHwqLqX5o2/8Ka0o+ariuWYkemGjueVuuaKhfCgj7znjY/nsbDwpbCh8KOzvVwiXSxbXCI5ZmMxXCIsXCLwpKSZ55uW6a6d5Liq8KCzlOiOvuihglwiXSxbXCI5ZmM5XCIsXCLlsYrmp4Dlg63lnbrliJ/lt7Xku47msLHwoIey5Ly55ZKc5ZOa5Yqa6LaC45e+5byM45ezXCJdLFtcIjlmZGJcIixcIuatkumFvOm+pemul+mgrumitOmquum6qOm6hOeFuueslFwiXSxbXCI5ZmU3XCIsXCLmr7rooJjnvbhcIl0sW1wiOWZlYlwiLFwi5Zig8KqZiui5t+m9k1wiXSxbXCI5ZmYwXCIsXCLot5TouY/puJzouIHmioLwqI296Lio6Lm156uT8KSpt+eovuejmOazquipp+eYh1wiXSxbXCJhMDQwXCIsXCLwqKma6bym5rOO6J+W55eD8KqKsuehk/CvoYDotIzni6LnjbHorK3njILnk7Hos6vwpKq76Jiv5b666KKg5JK3XCJdLFtcImEwNTVcIixcIvChoLvwpriFXCJdLFtcImEwNThcIixcIuipvvCilJtcIl0sW1wiYTA1YlwiLFwi5oO955mn6auX6bWE6Y2u6a6P6J+1XCJdLFtcImEwNjNcIixcIuigj+izt+eMrOmcoemusOOXlueKsuSwh+exkemlivCmhZnmhZnksITpupbmhb1cIl0sW1wiYTA3M1wiLFwi5Z2f5oWv5oqm5oi55ouO46mc5oei5Y6q8KOPteaNpOagguOXklwiXSxbXCJhMGExXCIsXCLltZfwqK+C6L+a8Ki4uVwiXSxbXCJhMGE2XCIsXCLlg5nwobWG56SG5Yyy6Zi48KC8u+SBpVwiXSxbXCJhMGFlXCIsXCLnn75cIl0sW1wiYTBiMFwiLFwi57OC8KW8muezmueoreiBpuiBo+e1jeeUheeTsuimlOiImuacjOiBovCnkobogZvnk7DohIPnnKToponwpp+M55WT8Ka7keieqeifjuiHiOiejOipieiyreitg+ecq+eTuOiTmuOYteamsui2plwiXSxbXCJhMGQ0XCIsXCLopqnnkajmtrnon4HwpICR55On47eb54W25oKk5oac47OR54Wi5oG3XCJdLFtcImEwZTJcIixcIue9sfCorK3niZDmg6nkrb7liKDjsJjwo7OH8KW7l/CnmZbwpZSx8KGlhPChi77wqaSD8Ka3nPCngq3ls4Hwpoat8Kioj/CjmbfwoIOu8KahhvCkvI7klaLlrJ/wpo2M6b2Q6bqm8KaJq1wiXSxbXCJhM2MwXCIsXCLikIBcIiwzMSxcIuKQoVwiXSxbXCJjNmExXCIsXCLikaBcIiw5LFwi4pG0XCIsOSxcIuKFsFwiLDksXCLkuLbkuL/kuoXkuqDlhoLlhpblhqvli7nljLjljanljrblpIrlroDlt5vivLPlub/lu7TlvZDlvaHmlLTml6DnlpLnmbbovrXpmrbCqMuG44O944O+44Kd44Ke44CD5Lud44CF44CG44CH44O877y777y94py944GBXCIsMjNdLFtcImM3NDBcIixcIuOBmVwiLDU4LFwi44Kh44Ki44Kj44KkXCJdLFtcImM3YTFcIixcIuOCpVwiLDgxLFwi0JBcIiw1LFwi0IHQllwiLDRdLFtcImM4NDBcIixcItCbXCIsMjYsXCLRkdC2XCIsMjUsXCLih6fihrjihrnjh4/woIOM5Lma8KCCiuWIguSSkVwiXSxbXCJjOGExXCIsXCLpvrDlhojpvrHwp5iHXCJdLFtcImM4Y2RcIixcIu+/ou+/pO+8h++8guOIseKEluKEoeOCm+OCnOK6gOK6hOK6huK6h+K6iOK6iuK6jOK6jeK6leK6nOK6neK6peK6p+K6quK6rOK6ruK6tuK6vOK6vuK7huK7iuK7jOK7jeK7j+K7luK7l+K7nuK7o1wiXSxbXCJjOGY1XCIsXCLKg8mQyZvJlMm1xZPDuMWLyorJqlwiXSxbXCJmOWZlXCIsXCLvv61cIl0sW1wiZmE0MFwiLFwi8KCVh+mLm/Cgl5/wo7+F6JWM5Iq154+v5Ya145mJ8KSlgvCop6TpjYTwoaeb6Iuu8KOziOegvOadhOaLn/CkpLPwqKaq8KCKoPCmrrPwoYyF5L6r8KKTreWAiPCmtKnwp6qE8KOYgPCkqrHwopST5YCp8KCNvuW+pPCgjoDwoI2H5rub8KCQn+WBveWEgeORuuWEjumhrOOdg+iQlvCkpqTwoJKH5YWg8KOOtOWFqvCgr7/wooO88KCLpfCilLDwoJaO8KOIs/ChpoPlroLonb3woJaz8KOymeWGsuWGuFwiXSxbXCJmYWExXCIsXCLptLTlh4nlh4/lh5Hjs5zlh5PwpKqm5Yaz5Yei5Y2C5Yet6I+N5qS+8KOcreW9u+WIi+WIpuWIvOWKteWJl+WKlOWKueWLheewleiVguWLoOiYjfCmrJPljIXwqKue5ZWJ5ruZ8KO+gPCgpZTwo7+s5Yyz5Y2E8KCvouazi/ChnKbmoJvnj5XmgYrjuqrjo4zwoZuo54ed5JKi5Y2t5Y208Kiaq+WNvuWNv/ChlpbwoZiT55+m5Y6T8Kiqm+WOoOWOq+WOrueOp/ClnbLjvZnnjpzlj4Hlj4XmsYnkuYnln77lj5njqqvwoK6P5Y+g8KO/q/CitqPlj7bwoLG35ZCT54G55ZSr5pmX5rWb5ZGt8Katk/CgtbTllZ3lko/lkqTknqbwoZyN8KC7neO2tPCgtY1cIl0sW1wiZmI0MFwiLFwi8KimvPCimpjllYfks63lkK/nkJfllobllqnlmIXwoaOX8KSAuuSVkvCkkLXmmrPwoYK05Zi35puN8KOKiuaapOaareWZjeWZj+ejseWbsemeh+WPvuWcgOWbr+WbrfCorabjmKPwoYmP5Z2G8KSGpeaxrueCi+WdguOasfCmsb7ln6bwoZCW5aCD8KGRlPCkjaPloKbwpK+15aGc5aKq45Wh5aOg5aOc8KGIvOWju+Wvv+Wdg/CqhZDwpIm46Y+T45ah5aSf5qKm45uD5rmZXCJdLFtcImZiYTFcIixcIvChmL7lqKTllZPwoZqS6JSF5aeJ8KC1jvCmsoHwprSq8KGfnOWnmfChn7vwoZ6y8Ka2pua1sfChoKjwoZuV5ae58Ka5heWqq+Wpo+ObpvCkpqnlqbfjnIjlqpbnkaXlq5Pwpr6h8KKVlOO2hfChpJHjnLLwoZq45bqD5YuQ5a225paI5a288KeojuSAhOShnfCgiITlr5XmhaDwoai08KWnjPCglqXlr7Plrp3ktJDlsIXwoa2E5bCT54+O5bCU8KGypfCmrKjlsYnko53lsoXls6nls6/ltovwobe58KG4t+W0kOW0mOW1hvChuqTlsrrlt5foi7zjoK3wpKSB8KKBifCihbPoiofjoLbjr4LluK7mqorlubXlubrwpJK88KCzk+WOpuS6t+W7kOWOqPChnbHluInlu7TwqJKCXCJdLFtcImZjNDBcIixcIuW7ueW7u+OioOW7vOagvumQm+W8jfCgh4Hwr6KU46ue5KKu8KGMuuW8uvCmoojwoo+Q5b2Y8KKRseW9o+mevfCmua7lvbLpjYDwqKi25b6n5ba247Wf8KWJkPChvarwp4O48KKZqOmHlvCgip7wqKip5oCx5pqF8KGht+Olo+O3h+OYueWekPCinrTnpbHjuYDmgp7mgqTmgrPwpKaC8KSmj/CnqZPnkqTlg6HlqqDmhaTokKTmhYLwr6Km8Ka7kuaGgeWHtPCgmZbmhoflrqrwo763XCJdLFtcImZjYTFcIixcIvCioZ/mh5PwqK6d8KmlneaHkOOksvCipoDwoqOB5oCj5oWc5pSe5o6L8KCEmOaLhfChnbDmi5XworiN5o2s8KSnn+Ool+aQuOaPuPChjo7woZ+85pKQ5r6K8KK4tumglPCkgozwpZyd5pOh5pOl6ZG746mm5pC646mX5pWN5ryW8KSoqPCkqKPmloXmla3mlZ/wo4G+5pa18KSlgOSst+aXkeSDmPChoKnml6Dml6Plv5/wo5CA5piY8KOHt/Cjh7jmmYTwo4ak8KOGpeaZi/CgubXmmafwpYem5pmz5pm08KG4vfCjiLHwqJe08KOHiPCljJPnn4XwoqO36aak5pyC8KSOnPCkqKHjrKvmp7rwo5+C5p2e5p2n5p2i8KSHjfCpg63mn5fkk6nmoKLmuZDpiLzmoIHwo4+m8Ka2oOahnVwiXSxbXCJmZDQwXCIsXCLwo5Gv5qeh5qiL8Kirn+als+ajg/Cjl43mpIHmpIDjtLLjqIHwo5i8466A5p6s5qWh8KipiuSLvOaktuammOOuofCgj4nojaPlgpDmp7nwo5mZ8KKEquaphfCjnIPmqp3jr7PmnrHmq4jwqYac47CN5qyd8KCko+aDnuasteattPCin43murXwo6ub8KCOtfChpZjjnYDlkKHwo62a5q+h8KO7vOavnOawt/CikovwpKOx8KatkeaxmuiIpuaxufCjtrzkk4Xwo7a98KSGpPCkpIzwpKSAXCJdLFtcImZkYTFcIixcIvCjs4njm6Xjs6vwoLSy6a6D8KOHufCikpHnvo/moLfwprSl8Ka2ofCmt6vmtpbmtZzmubzmvITwpKW/8KSChfCmubLolLPwpr205YeH5rKc5rid6JCu8Kisoea4r/CjuK/nkZPwo76C56eM5rmP5aqR8KOBi+a/uOOcjea+nfCjuLDmu7rwoZKX8KSAveSVlemPsOa9hOa9nOO1jua9tPCphbDjtLvmvp/wpIWE5r+T8KSCkfCkhZXwpIC58KO/sPCjvrTwpIS/5Yef8KSFlvCkhZfwpIWA8KaHneeBi+eBvueCp+eCgeeDjOeDleeDlueDn+SEhOO3qOeGtOeGlvCkibfnhKvnhYXlqojnhYrnha7lspzwpI2l54WP6Y2i8KSLgeeErPCkkZrwpKin8KSooueGuvCor6jngr3niI5cIl0sW1wiZmU0MFwiLFwi6ZGC54iV5aSR6ZGD54ik6Y2B8KWYheeIrueJgPCkpbTmor3niZXniZfjuZXwo4GE5qCN5ry954qC54yq54yr8KSgo/CooKvko63wqKCE54yo54yu54+P546q8KCwuvCmqK7nj4nnkYnwpIei8KGbp/CkqKTmmKPjm4XwpKa38KSmjfCkp7vnj7fnkJXmpIPwpKim55C58KCXg+O7l+eRnPCioq3nkaDwqLqy55GH54+k55G26I6555Gs45yw55G06Y+x5qis55KC5KWT8KSqjFwiXSxbXCJmZWExXCIsXCLwpIWf8KSpufCoro/lrYbwqLCD8KGinueTiPChpojnlI7nk6nnlJ7wqLuZ8KGpi+Wvl/CouqzpjoXnlY3nlYrnlafnla7wpL6C47yE8KS0k+eWjueRneeWnueWtOeYgueYrOeZkeeZj+eZr+eZtvCmj7XnmpDoh6/jn7jwpqSR8Kakjueaoeeapeeat+ebjPCmvp/okaLwpYKd8KWFvfChuJznnJ7nnKbnnYDmkq/wpYig552Y8KOKrOeer/CopaTwqKWo8KGbgeeftOegifChjbbwpKiS5qOK56Kv56OH56OT6Zql56Su8KWXoOejl+ektOeisfCnmIzovrjoooTwqKyr8KaCg/CimJznpobopIDmpILnpoDwpaGX56ad8KesueekvOemqea4qvCnhKbjuqjnp4bwqYSN56eUXCJdXScpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzMzNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEpTT04ucGFyc2UoJ1tbXCIwXCIsXCJcXFxcdTAwMDBcIiwxMjcsXCLigqxcIl0sW1wiODE0MFwiLFwi5LiC5LiE5LiF5LiG5LiP5LiS5LiX5Lif5Lig5Lih5Lij5Lim5Lip5Liu5Liv5Lix5Liz5Li15Li35Li85LmA5LmB5LmC5LmE5LmG5LmK5LmR5LmV5LmX5Lma5Lmb5Lmi5Lmj5Lmk5Lml5Lmn5Lmo5LmqXCIsNSxcIuS5suS5tFwiLDksXCLkub9cIiw2LFwi5LqH5LqKXCJdLFtcIjgxODBcIixcIuS6kOS6luS6l+S6meS6nOS6neS6nuS6o+S6quS6r+S6sOS6seS6tOS6tuS6t+S6uOS6ueS6vOS6veS6vuS7iOS7jOS7j+S7kOS7kuS7muS7m+S7nOS7oOS7ouS7puS7p+S7qeS7reS7ruS7r+S7seS7tOS7uOS7ueS7uuS7vOS7vuS8gOS8glwiLDYsXCLkvIvkvIzkvJJcIiw0LFwi5Lyc5Lyd5Lyh5Lyj5Lyo5Lyp5Lys5Lyt5Lyu5Lyx5Lyz5Ly15Ly35Ly55Ly75Ly+XCIsNCxcIuS9hOS9heS9h1wiLDUsXCLkvZLkvZTkvZbkvaHkvaLkvabkvajkvarkvavkva3kva7kvbHkvbLkvbXkvbfkvbjkvbnkvbrkvb3kvoDkvoHkvoLkvoXkvobkvofkvorkvozkvo7kvpDkvpLkvpPkvpXkvpbkvpjkvpnkvprkvpzkvp7kvp/kvqHkvqJcIl0sW1wiODI0MFwiLFwi5L6k5L6r5L6t5L6wXCIsNCxcIuS+tlwiLDgsXCLkv4Dkv4Hkv4Lkv4bkv4fkv4jkv4nkv4vkv4zkv43kv5JcIiw0LFwi5L+Z5L+b5L+g5L+i5L+k5L+l5L+n5L+r5L+s5L+w5L+y5L+05L+15L+25L+35L+55L+75L+85L+95L+/XCIsMTFdLFtcIjgyODBcIixcIuWAi+WAjuWAkOWAkeWAk+WAleWAluWAl+WAm+WAneWAnuWAoOWAouWAo+WApOWAp+WAq+WAr1wiLDEwLFwi5YC75YC95YC/5YGA5YGB5YGC5YGE5YGF5YGG5YGJ5YGK5YGL5YGN5YGQXCIsNCxcIuWBluWBl+WBmOWBmeWBm+WBnVwiLDcsXCLlgaZcIiw1LFwi5YGtXCIsOCxcIuWBuOWBueWBuuWBvOWBveWCgeWCguWCg+WChOWChuWCh+WCieWCiuWCi+WCjOWCjlwiLDIwLFwi5YKk5YKm5YKq5YKr5YKtXCIsNCxcIuWCs1wiLDYsXCLlgrxcIl0sW1wiODM0MFwiLFwi5YK9XCIsMTcsXCLlg5BcIiw1LFwi5YOX5YOY5YOZ5YObXCIsMTAsXCLlg6jlg6nlg6rlg6vlg6/lg7Dlg7Hlg7Llg7Tlg7ZcIiw0LFwi5YO8XCIsOSxcIuWEiFwiXSxbXCI4MzgwXCIsXCLlhInlhIrlhIxcIiw1LFwi5YSTXCIsMTMsXCLlhKJcIiwyOCxcIuWFguWFh+WFiuWFjOWFjuWFj+WFkOWFkuWFk+WFl+WFmOWFmeWFm+WFnVwiLDQsXCLlhaPlhaTlhablhaflhanlharlha/lhbLlhbrlhb7lhb/lhoPlhoTlhoblhoflhorlhovlho7lho/lhpDlhpHlhpPlhpTlhpjlhprlhp3lhp7lhp/lhqHlhqPlhqZcIiw0LFwi5Yat5Yau5Ya05Ya45Ya55Ya65Ya+5Ya/5YeB5YeC5YeD5YeF5YeI5YeK5YeN5YeO5YeQ5YeSXCIsNV0sW1wiODQ0MFwiLFwi5YeY5YeZ5Yea5Yec5Yee5Yef5Yei5Yej5YelXCIsNSxcIuWHrOWHruWHseWHsuWHtOWHt+WHvuWIhOWIheWIieWIi+WIjOWIj+WIkOWIk+WIlOWIleWInOWInuWIn+WIoeWIouWIo+WIpeWIpuWIp+WIquWIrOWIr+WIseWIsuWItOWIteWIvOWIvuWJhFwiLDUsXCLliYvliY7liY/liZLliZPliZXliZfliZhcIl0sW1wiODQ4MFwiLFwi5YmZ5Yma5Ymb5Ymd5Ymf5Ymg5Ymi5Ymj5Ymk5Ymm5Ymo5Ymr5Yms5Ymt5Ymu5Ymw5Ymx5YmzXCIsOSxcIuWJvuWKgOWKg1wiLDQsXCLliolcIiw2LFwi5YqR5YqS5YqUXCIsNixcIuWKnOWKpOWKpeWKpuWKp+WKruWKr+WKsOWKtFwiLDksXCLli4Dli4Hli4Lli4Tli4Xli4bli4jli4rli4zli43li47li4/li5Hli5Pli5Tli5Xli5fli5lcIiw1LFwi5Yug5Yuh5Yui5Yuj5YulXCIsMTAsXCLli7FcIiw3LFwi5Yu75Yu85Yu95YyB5YyC5YyD5YyE5YyH5YyJ5YyK5YyL5YyM5YyOXCJdLFtcIjg1NDBcIixcIuWMkeWMkuWMk+WMlOWMmOWMm+WMnOWMnuWMn+WMouWMpOWMpeWMp+WMqOWMqeWMq+WMrOWMreWMr1wiLDksXCLljLzljL3ljYDljYLljYTljYbljYvljYzljY3ljZDljZTljZjljZnljZvljZ3ljaXljajljarljazlja3ljbLljbbljbnljbvljbzljb3ljb7ljoDljoHljoPljofljojljorljo7ljo9cIl0sW1wiODU4MFwiLFwi5Y6QXCIsNCxcIuWOluWOl+WOmeWOm+WOnOWOnuWOoOWOoeWOpOWOp+WOquWOq+WOrOWOreWOr1wiLDYsXCLljrfljrjljrnljrrljrzljr3ljr7lj4Dlj4NcIiw0LFwi5Y+O5Y+P5Y+Q5Y+S5Y+T5Y+V5Y+a5Y+c5Y+d5Y+e5Y+h5Y+i5Y+n5Y+05Y+65Y++5Y+/5ZCA5ZCC5ZCF5ZCH5ZCL5ZCU5ZCY5ZCZ5ZCa5ZCc5ZCi5ZCk5ZCl5ZCq5ZCw5ZCz5ZC25ZC35ZC65ZC95ZC/5ZGB5ZGC5ZGE5ZGF5ZGH5ZGJ5ZGM5ZGN5ZGO5ZGP5ZGR5ZGa5ZGdXCIsNCxcIuWRo+WRpeWRp+WRqVwiLDcsXCLlkbTlkbnlkbrlkb7lkb/lkoHlkoPlkoXlkoflkojlkonlkorlko3lkpHlkpPlkpflkpjlkpzlkp7lkp/lkqDlkqFcIl0sW1wiODY0MFwiLFwi5ZKi5ZKl5ZKu5ZKw5ZKy5ZK15ZK25ZK35ZK55ZK65ZK85ZK+5ZOD5ZOF5ZOK5ZOL5ZOW5ZOY5ZOb5ZOgXCIsNCxcIuWTq+WTrOWTr+WTsOWTseWTtFwiLDUsXCLlk7vlk77llIDllILllIPllITllIXllIjllIpcIiw0LFwi5ZSS5ZST5ZSVXCIsNSxcIuWUnOWUneWUnuWUn+WUoeWUpeWUplwiXSxbXCI4NjgwXCIsXCLllKjllKnllKvllK3llLLllLTllLXllLbllLjllLnllLrllLvllL3llYDllYLllYXllYfllYjllYtcIiw0LFwi5ZWR5ZWS5ZWT5ZWU5ZWXXCIsNCxcIuWVneWVnuWVn+WVoOWVouWVo+WVqOWVqeWVq+WVr1wiLDUsXCLllbnllbrllb3llb/lloXllobllozllo3llo7llpDllpLllpPllpXllpbllpfllprllpvllp7llqBcIiw2LFwi5ZaoXCIsOCxcIuWWsuWWtOWWtuWWuOWWuuWWvOWWv1wiLDQsXCLll4bll4fll4jll4rll4vll47ll4/ll5Dll5Xll5dcIiw0LFwi5Zee5Zeg5Zei5Zen5Zep5Zet5Zeu5Zew5Zex5Ze05Ze25Ze4XCIsNCxcIuWXv+WYguWYg+WYhOWYhVwiXSxbXCI4NzQwXCIsXCLlmIblmIflmIrlmIvlmI3lmJBcIiw3LFwi5ZiZ5Zia5Zic5Zid5Zig5Zih5Zii5Zil5Zim5Zio5Zip5Ziq5Zir5Ziu5Ziv5Ziw5Ziz5Zi15Zi35Zi45Zi65Zi85Zi95Zi+5ZmAXCIsMTEsXCLlmY9cIiw0LFwi5ZmV5ZmW5Zma5Zmb5ZmdXCIsNF0sW1wiODc4MFwiLFwi5Zmj5Zml5Zmm5Zmn5Zmt5Zmu5Zmv5Zmw5Zmy5Zmz5Zm05Zm15Zm35Zm45Zm55Zm65Zm9XCIsNyxcIuWah1wiLDYsXCLlmpDlmpHlmpLlmpRcIiwxNCxcIuWapFwiLDEwLFwi5ZqwXCIsNixcIuWauOWaueWauuWau+WavVwiLDEyLFwi5ZuLXCIsOCxcIuWbleWbluWbmOWbmeWbnOWbo+WbpVwiLDUsXCLlm6zlm67lm6/lm7Llm7Plm7blm7flm7jlm7vlm7zlnIDlnIHlnILlnIXlnIflnItcIiw2XSxbXCI4ODQwXCIsXCLlnJJcIiw5LFwi5Zyd5Zye5Zyg5Zyh5Zyi5Zyk5Zyl5Zym5Zyn5Zyr5Zyx5Zyy5Zy0XCIsNCxcIuWcvOWcveWcv+WdgeWdg+WdhOWdheWdhuWdiOWdieWdi+WdklwiLDQsXCLlnZjlnZnlnaLlnaPlnaXlnaflnazlna7lnbDlnbHlnbLlnbTlnbXlnbjlnbnlnbrlnb3lnb7lnb/lnoBcIl0sW1wiODg4MFwiLFwi5Z6B5Z6H5Z6I5Z6J5Z6K5Z6NXCIsNCxcIuWelFwiLDYsXCLlnpzlnp3lnp7lnp/lnqXlnqjlnqrlnqzlnq/lnrDlnrHlnrPlnrXlnrblnrflnrlcIiw4LFwi5Z+EXCIsNixcIuWfjOWfjeWfkOWfkeWfk+WfluWfl+Wfm+WfnOWfnuWfoeWfouWfo+WfpVwiLDcsXCLln67ln7Dln7Hln7Lln7Pln7Xln7bln7fln7vln7zln77ln7/loIHloIPloITloIXloIjloInloIrloIzloI7loI/loJDloJLloJPloJTloJbloJfloJjloJrloJvloJzloJ3loJ/loKLloKPloKVcIiw0LFwi5aCrXCIsNCxcIuWgseWgsuWgs+WgtOWgtlwiLDddLFtcIjg5NDBcIixcIuWgvlwiLDUsXCLloYVcIiw2LFwi5aGO5aGP5aGQ5aGS5aGT5aGV5aGW5aGX5aGZXCIsNCxcIuWhn1wiLDUsXCLloaZcIiw0LFwi5aGtXCIsMTYsXCLlob/looLlooTloobloofloojloorloovlooxcIl0sW1wiODk4MFwiLFwi5aKNXCIsNCxcIuWilFwiLDQsXCLlopvlopzlop3loqBcIiw3LFwi5aKqXCIsMTcsXCLlor3lor7lor/lo4Dlo4Llo4Plo4Tlo4ZcIiwxMCxcIuWjkuWjk+WjlOWjllwiLDEzLFwi5aOlXCIsNSxcIuWjreWjr+WjseWjsuWjtOWjteWjt+WjuOWjulwiLDcsXCLlpIPlpIXlpIblpIhcIiw0LFwi5aSO5aSQ5aSR5aSS5aST5aSX5aSY5aSb5aSd5aSe5aSg5aSh5aSi5aSj5aSm5aSo5aSs5aSw5aSy5aSz5aS15aS25aS7XCJdLFtcIjhhNDBcIixcIuWkveWkvuWkv+WlgOWlg+WlheWlhuWliuWljOWljeWlkOWlkuWlk+WlmeWlm1wiLDQsXCLlpaHlpaPlpaTlpaZcIiwxMixcIuWlteWlt+WluuWlu+WlvOWlvuWlv+WmgOWmheWmieWmi+WmjOWmjuWmj+WmkOWmkeWmlOWmleWmmOWmmuWmm+WmnOWmneWmn+WmoOWmoeWmouWmplwiXSxbXCI4YTgwXCIsXCLlpqflpqzlpq3lprDlprHlprNcIiw1LFwi5aa65aa85aa95aa/XCIsNixcIuWnh+WniOWnieWnjOWnjeWnjuWnj+WnleWnluWnmeWnm+WnnlwiLDQsXCLlp6Tlp6blp6flp6nlp6rlp6vlp61cIiwxMSxcIuWnuuWnvOWnveWnvuWogOWoguWoiuWoi+WojeWojuWoj+WokOWokuWolOWoleWoluWol+WomeWomuWom+WoneWonuWooeWoouWopOWopuWop+WoqOWoqlwiLDYsXCLlqLPlqLXlqLdcIiw0LFwi5ai95ai+5ai/5amBXCIsNCxcIuWph+WpiOWpi1wiLDksXCLlqZblqZflqZjlqZnlqZtcIiw1XSxbXCI4YjQwXCIsXCLlqaHlqaPlqaTlqaXlqablqajlqanlqatcIiw4LFwi5am45am55am75am85am95am+5aqAXCIsMTcsXCLlqpNcIiw2LFwi5aqcXCIsMTMsXCLlqqvlqqxcIl0sW1wiOGI4MFwiLFwi5aqtXCIsNCxcIuWqtOWqtuWqt+WquVwiLDQsXCLlqr/lq4Dlq4NcIiw1LFwi5auK5auL5auNXCIsNCxcIuWrk+WrleWrl+WrmeWrmuWrm+WrneWrnuWrn+WrouWrpOWrpeWrp+WrqOWrquWrrFwiLDQsXCLlq7JcIiwyMixcIuWsilwiLDExLFwi5ayYXCIsMjUsXCLlrLPlrLXlrLblrLhcIiw3LFwi5a2BXCIsNl0sW1wiOGM0MFwiLFwi5a2IXCIsNyxcIuWtkuWtluWtnuWtoOWtoeWtp+WtqOWtq+WtreWtruWtr+WtsuWttOWttuWtt+WtuOWtueWtu+WtvOWtvuWtv+WuguWuhuWuiuWujeWujuWukOWukeWukuWulOWuluWun+Wup+WuqOWuqeWurOWureWuruWur+WuseWusuWut+WuuuWuu+WuvOWvgOWvgeWvg+WviOWvieWviuWvi+WvjeWvjuWvj1wiXSxbXCI4YzgwXCIsXCLlr5Hlr5RcIiw4LFwi5a+g5a+i5a+j5a+m5a+n5a+pXCIsNCxcIuWvr+WvsVwiLDYsXCLlr73lr77lsIDlsILlsIPlsIXlsIflsIjlsIvlsIzlsI3lsI7lsJDlsJLlsJPlsJflsJnlsJvlsJ7lsJ/lsKDlsKHlsKPlsKblsKjlsKnlsKrlsKvlsK3lsK7lsK/lsLDlsLLlsLPlsLXlsLblsLflsYPlsYTlsYblsYflsYzlsY3lsZLlsZPlsZTlsZblsZflsZjlsZrlsZvlsZzlsZ3lsZ/lsaLlsaTlsadcIiw2LFwi5bGw5bGyXCIsNixcIuWxu+WxvOWxveWxvuWygOWyg1wiLDQsXCLlsonlsorlsovlso7lso/lspLlspPlspXlsp1cIiw0LFwi5bKkXCIsNF0sW1wiOGQ0MFwiLFwi5bKq5bKu5bKv5bKw5bKy5bK05bK25bK55bK65bK75bK85bK+5bOA5bOC5bOD5bOFXCIsNSxcIuWzjFwiLDUsXCLls5NcIiw1LFwi5bOaXCIsNixcIuWzouWzo+Wzp+WzqeWzq+WzrOWzruWzr+WzsVwiLDksXCLls7xcIiw0XSxbXCI4ZDgwXCIsXCLltIHltITltIXltIhcIiw1LFwi5bSPXCIsNCxcIuW0leW0l+W0mOW0meW0muW0nOW0neW0n1wiLDQsXCLltKXltKjltKrltKvltKzltK9cIiw0LFwi5bS1XCIsNyxcIuW0v1wiLDcsXCLltYjltYnltY1cIiwxMCxcIuW1meW1muW1nOW1nlwiLDEwLFwi5bWq5bWt5bWu5bWw5bWx5bWy5bWz5bW1XCIsMTIsXCLltoNcIiwyMSxcIuW2muW2m+W2nOW2nuW2n+W2oFwiXSxbXCI4ZTQwXCIsXCLltqFcIiwyMSxcIuW2uFwiLDEyLFwi5beGXCIsNixcIuW3jlwiLDEyLFwi5bec5bef5beg5bej5bek5beq5bes5betXCJdLFtcIjhlODBcIixcIuW3sOW3teW3tuW3uFwiLDQsXCLlt7/luIDluITluIfluInluIrluIvluI3luI7luJLluJPluJfluJ5cIiw3LFwi5bioXCIsNCxcIuW4r+W4sOW4slwiLDQsXCLluLnluLrluL7luL/luYDluYHluYPluYZcIiw1LFwi5bmNXCIsNixcIuW5llwiLDQsXCLluZzluZ3luZ/luaDluaNcIiwxNCxcIuW5teW5t+W5ueW5vuW6geW6guW6g+W6heW6iOW6ieW6jOW6jeW6juW6kuW6mOW6m+W6neW6oeW6ouW6o+W6pOW6qFwiLDQsXCLluq5cIiw0LFwi5bq05bq65bq75bq85bq95bq/XCIsNl0sW1wiOGY0MFwiLFwi5buG5buH5buI5buLXCIsNSxcIuW7lOW7leW7l+W7mOW7meW7muW7nFwiLDExLFwi5bup5burXCIsOCxcIuW7teW7uOW7ueW7u+W7vOW7veW8heW8huW8h+W8ieW8jOW8jeW8juW8kOW8kuW8lOW8luW8meW8muW8nOW8neW8nuW8oeW8ouW8o+W8pFwiXSxbXCI4ZjgwXCIsXCLlvKjlvKvlvKzlvK7lvLDlvLJcIiw2LFwi5by75by95by+5by/5b2BXCIsMTQsXCLlvZHlvZTlvZnlvZrlvZvlvZzlvZ7lvZ/lvaDlvaPlvaXlvaflvajlvavlva7lva/lvbLlvbTlvbXlvbblvbjlvbrlvb3lvb7lvb/lvoPlvoblvo3lvo7lvo/lvpHlvpPlvpTlvpblvprlvpvlvp3lvp7lvp/lvqDlvqJcIiw1LFwi5b6p5b6r5b6s5b6vXCIsNSxcIuW+tuW+uOW+ueW+uuW+u+W+vlwiLDQsXCLlv4flv4jlv4rlv4vlv47lv5Plv5Tlv5Xlv5rlv5vlv5zlv57lv5/lv6Llv6Plv6Xlv6blv6jlv6nlv6zlv6/lv7Dlv7Llv7Plv7Tlv7blv7flv7nlv7rlv7zmgIdcIl0sW1wiOTA0MFwiLFwi5oCI5oCJ5oCL5oCM5oCQ5oCR5oCT5oCX5oCY5oCa5oCe5oCf5oCi5oCj5oCk5oCs5oCt5oCu5oCwXCIsNCxcIuaAtlwiLDQsXCLmgL3mgL7mgYDmgYRcIiw2LFwi5oGM5oGO5oGP5oGR5oGT5oGU5oGW5oGX5oGY5oGb5oGc5oGe5oGf5oGg5oGh5oGl5oGm5oGu5oGx5oGy5oG05oG15oG35oG+5oKAXCJdLFtcIjkwODBcIixcIuaCgeaCguaCheaChuaCh+aCiOaCiuaCi+aCjuaCj+aCkOaCkeaCk+aCleaCl+aCmOaCmeaCnOaCnuaCoeaCouaCpOaCpeaCp+aCqeaCquaCruaCsOaCs+aCteaCtuaCt+aCueaCuuaCvVwiLDcsXCLmg4fmg4jmg4nmg4xcIiw0LFwi5oOS5oOT5oOU5oOW5oOX5oOZ5oOb5oOe5oOhXCIsNCxcIuaDquaDseaDsuaDteaDt+aDuOaDu1wiLDQsXCLmhILmhIPmhITmhIXmhIfmhIrmhIvmhIzmhJBcIiw0LFwi5oSW5oSX5oSY5oSZ5oSb5oSc5oSd5oSe5oSh5oSi5oSl5oSo5oSp5oSq5oSsXCIsMTgsXCLmhYBcIiw2XSxbXCI5MTQwXCIsXCLmhYfmhYnmhYvmhY3mhY/mhZDmhZLmhZPmhZTmhZZcIiw2LFwi5oWe5oWf5oWg5oWh5oWj5oWk5oWl5oWm5oWpXCIsNixcIuaFseaFsuaFs+aFtOaFtuaFuFwiLDE4LFwi5oaM5oaN5oaPXCIsNCxcIuaGlVwiXSxbXCI5MTgwXCIsXCLmhpZcIiw2LFwi5oaeXCIsOCxcIuaGquaGq+aGrVwiLDksXCLmhrhcIiw1LFwi5oa/5oeA5oeB5oeDXCIsNCxcIuaHieaHjFwiLDQsXCLmh5Pmh5VcIiwxNixcIuaHp1wiLDEzLFwi5oe2XCIsOCxcIuaIgFwiLDUsXCLmiIfmiInmiJPmiJTmiJnmiJzmiJ3miJ7miKDmiKPmiKbmiKfmiKjmiKnmiKvmiK3miK/miLDmiLHmiLLmiLXmiLbmiLhcIiw0LFwi5omC5omE5omF5omG5omKXCJdLFtcIjkyNDBcIixcIuaJj+aJkOaJleaJluaJl+aJmeaJmuaJnFwiLDYsXCLmiaTmiaXmiajmibHmibLmibTmibXmibfmibjmibrmibvmib3mioHmioLmioPmioXmiobmiofmiojmiotcIiw1LFwi5oqU5oqZ5oqc5oqd5oqe5oqj5oqm5oqn5oqp5oqq5oqt5oqu5oqv5oqw5oqy5oqz5oq05oq25oq35oq45oq65oq+5ouA5ouBXCJdLFtcIjkyODBcIixcIuaLg+aLi+aLj+aLkeaLleaLneaLnuaLoOaLoeaLpOaLquaLq+aLsOaLsuaLteaLuOaLueaLuuaLu+aMgOaMg+aMhOaMheaMhuaMiuaMi+aMjOaMjeaMj+aMkOaMkuaMk+aMlOaMleaMl+aMmOaMmeaMnOaMpuaMp+aMqeaMrOaMreaMruaMsOaMseaMs1wiLDUsXCLmjLvmjLzmjL7mjL/mjYDmjYHmjYTmjYfmjYjmjYrmjZHmjZLmjZPmjZTmjZZcIiw3LFwi5o2g5o2k5o2l5o2m5o2o5o2q5o2r5o2s5o2v5o2w5o2y5o2z5o205o215o245o255o285o295o2+5o2/5o6B5o6D5o6E5o6F5o6G5o6L5o6N5o6R5o6T5o6U5o6V5o6X5o6ZXCIsNixcIuaOoeaOpOaOpuaOq+aOr+aOseaOsuaOteaOtuaOueaOu+aOveaOv+aPgFwiXSxbXCI5MzQwXCIsXCLmj4Hmj4Lmj4Pmj4Xmj4fmj4jmj4rmj4vmj4zmj5Hmj5Pmj5Tmj5Xmj5dcIiw2LFwi5o+f5o+i5o+kXCIsNCxcIuaPq+aPrOaPruaPr+aPsOaPseaPs+aPteaPt+aPueaPuuaPu+aPvOaPvuaQg+aQhOaQhlwiLDQsXCLmkI3mkI7mkJHmkJLmkJVcIiw1LFwi5pCd5pCf5pCi5pCj5pCkXCJdLFtcIjkzODBcIixcIuaQpeaQp+aQqOaQqeaQq+aQrlwiLDUsXCLmkLVcIiw0LFwi5pC75pC85pC+5pGA5pGC5pGD5pGJ5pGLXCIsNixcIuaRk+aRleaRluaRl+aRmVwiLDQsXCLmkZ9cIiw3LFwi5pGo5pGq5pGr5pGs5pGuXCIsOSxcIuaRu1wiLDYsXCLmkoPmkobmkohcIiw4LFwi5pKT5pKU5pKX5pKY5pKa5pKb5pKc5pKd5pKfXCIsNCxcIuaSpeaSpuaSp+aSqOaSquaSq+aSr+aSseaSsuaSs+aStOaStuaSueaSu+aSveaSvuaSv+aTgeaTg+aThOaThlwiLDYsXCLmk4/mk5Hmk5Pmk5Tmk5Xmk5bmk5nmk5pcIl0sW1wiOTQ0MFwiLFwi5pOb5pOc5pOd5pOf5pOg5pOh5pOj5pOl5pOnXCIsMjQsXCLmlIFcIiw3LFwi5pSKXCIsNyxcIuaUk1wiLDQsXCLmlJlcIiw4XSxbXCI5NDgwXCIsXCLmlKLmlKPmlKTmlKZcIiw0LFwi5pSs5pSt5pSw5pSx5pSy5pSz5pS35pS65pS85pS95pWAXCIsNCxcIuaVhuaVh+aViuaVi+aVjeaVjuaVkOaVkuaVk+aVlOaVl+aVmOaVmuaVnOaVn+aVoOaVoeaVpOaVpeaVp+aVqOaVqeaVquaVreaVruaVr+aVseaVs+aVteaVtuaVuFwiLDE0LFwi5paI5paJ5paK5paN5paO5paP5paS5paU5paV5paW5paY5paa5pad5pae5pag5pai5paj5pam5pao5paq5pas5pau5paxXCIsNyxcIuaWuuaWu+aWvuaWv+aXgOaXguaXh+aXiOaXieaXiuaXjeaXkOaXkeaXk+aXlOaXleaXmFwiLDcsXCLml6Hml6Pml6Tml6rml6tcIl0sW1wiOTU0MFwiLFwi5pey5pez5pe05pe15pe45pe55pe7XCIsNCxcIuaYgeaYhOaYheaYh+aYiOaYieaYi+aYjeaYkOaYkeaYkuaYluaYl+aYmOaYmuaYm+aYnOaYnuaYoeaYouaYo+aYpOaYpuaYqeaYquaYq+aYrOaYruaYsOaYsuaYs+aYt1wiLDQsXCLmmL3mmL/mmYDmmYLmmYRcIiw2LFwi5pmN5pmO5pmQ5pmR5pmYXCJdLFtcIjk1ODBcIixcIuaZmeaZm+aZnOaZneaZnuaZoOaZouaZo+aZpeaZp+aZqVwiLDQsXCLmmbHmmbLmmbPmmbXmmbjmmbnmmbvmmbzmmb3mmb/mmoDmmoHmmoPmmoXmmobmmojmmonmmormmovmmo3mmo7mmo/mmpDmmpLmmpPmmpTmmpXmmphcIiw0LFwi5pqeXCIsOCxcIuaaqVwiLDQsXCLmmq9cIiw0LFwi5pq15pq25pq35pq45pq65pq75pq85pq95pq/XCIsMjUsXCLmm5rmm55cIiw3LFwi5pun5puo5puqXCIsNSxcIuabseabteabtuabuOabuuabu+abveacgeacguacg1wiXSxbXCI5NjQwXCIsXCLmnITmnIXmnIbmnIfmnIzmnI7mnI/mnJHmnJLmnJPmnJbmnJjmnJnmnJrmnJzmnJ7mnKBcIiw1LFwi5pyn5pyp5pyu5pyw5pyy5pyz5py25py35py45py55py75py85py+5py/5p2B5p2E5p2F5p2H5p2K5p2L5p2N5p2S5p2U5p2V5p2XXCIsNCxcIuadneadouado+adpOadpuadp+adq+adrOadruadseadtOadtlwiXSxbXCI5NjgwXCIsXCLmnbjmnbnmnbrmnbvmnb3mnoDmnoLmnoPmnoXmnobmnojmnormnozmno3mno7mno/mnpHmnpLmnpPmnpTmnpbmnpnmnpvmnp/mnqDmnqHmnqTmnqbmnqnmnqzmnq7mnrHmnrLmnrTmnrlcIiw3LFwi5p+C5p+FXCIsOSxcIuafleafluafl+afm+afn+afoeafo+afpOafpuafp+afqOafquafq+afreafruafsuaftVwiLDcsXCLmn77moIHmoILmoIPmoITmoIbmoI3moJDmoJLmoJTmoJXmoJhcIiw0LFwi5qCe5qCf5qCg5qCiXCIsNixcIuagq1wiLDYsXCLmoLTmoLXmoLbmoLrmoLvmoL/moYfmoYvmoY3moY/moZLmoZZcIiw1XSxbXCI5NzQwXCIsXCLmoZzmoZ3moZ7moZ/moarmoaxcIiw3LFwi5qG15qG4XCIsOCxcIuaiguaihOaih1wiLDcsXCLmopDmopHmopLmopTmopXmopbmophcIiw5LFwi5qKj5qKk5qKl5qKp5qKq5qKr5qKs5qKu5qKx5qKy5qK05qK25qK35qK4XCJdLFtcIjk3ODBcIixcIuaiuVwiLDYsXCLmo4Hmo4NcIiw1LFwi5qOK5qOM5qOO5qOP5qOQ5qOR5qOT5qOU5qOW5qOX5qOZ5qObXCIsNCxcIuajoeajouajpFwiLDksXCLmo6/mo7Lmo7Pmo7Tmo7bmo7fmo7jmo7vmo73mo77mo7/mpIDmpILmpIPmpITmpIZcIiw0LFwi5qSM5qSP5qSR5qSTXCIsMTEsXCLmpKHmpKLmpKPmpKVcIiw3LFwi5qSu5qSv5qSx5qSy5qSz5qS15qS25qS35qS45qS65qS75qS85qS+5qWA5qWB5qWDXCIsMTYsXCLmpZXmpZbmpZjmpZnmpZvmpZzmpZ9cIl0sW1wiOTg0MFwiLFwi5qWh5qWi5qWk5qWl5qWn5qWo5qWp5qWq5qWs5qWt5qWv5qWw5qWyXCIsNCxcIualuualu+alvealvualv+amgeamg+amheamiuami+amjOamjlwiLDUsXCLmppbmppfmppnmpprmpp1cIiw5LFwi5qap5qaq5qas5qau5qav5qaw5qay5qaz5qa15qa25qa45qa55qa65qa85qa9XCJdLFtcIjk4ODBcIixcIuamvuamv+angOanglwiLDcsXCLmp4vmp43mp4/mp5Hmp5Lmp5Pmp5VcIiw1LFwi5qec5qed5qee5qehXCIsMTEsXCLmp67mp6/mp7Dmp7Hmp7NcIiw5LFwi5qe+5qiAXCIsOSxcIuaoi1wiLDExLFwi5qiZXCIsNSxcIuaooOaoolwiLDUsXCLmqKnmqKvmqKzmqK3mqK7mqLDmqLLmqLPmqLTmqLZcIiw2LFwi5qi/XCIsNCxcIuapheaphuapiFwiLDcsXCLmqZFcIiw2LFwi5qmaXCJdLFtcIjk5NDBcIixcIuapnFwiLDQsXCLmqaLmqaPmqaTmqaZcIiwxMCxcIuapslwiLDYsXCLmqbrmqbvmqb3mqb7mqb/mqoHmqoLmqoPmqoVcIiw4LFwi5qqP5qqSXCIsNCxcIuaqmFwiLDcsXCLmqqFcIiw1XSxbXCI5OTgwXCIsXCLmqqfmqqjmqqrmqq1cIiwxMTQsXCLmrKXmrKbmrKhcIiw2XSxbXCI5YTQwXCIsXCLmrK/mrLDmrLHmrLPmrLTmrLXmrLbmrLjmrLvmrLzmrL3mrL/mrYDmrYHmrYLmrYTmrYXmrYjmrYrmrYvmrY1cIiwxMSxcIuatmlwiLDcsXCLmrajmranmratcIiwxMyxcIuatuuatveatvuatv+augOauheauiFwiXSxbXCI5YTgwXCIsXCLmrozmro7mro/mrpDmrpHmrpTmrpXmrpfmrpjmrpnmrpxcIiw0LFwi5q6iXCIsNyxcIuauq1wiLDcsXCLmrrbmrrhcIiw2LFwi5q+A5q+D5q+E5q+GXCIsNCxcIuavjOavjuavkOavkeavmOavmuavnFwiLDQsXCLmr6JcIiw3LFwi5q+s5q+t5q+u5q+w5q+x5q+y5q+05q+25q+35q+45q+65q+75q+85q++XCIsNixcIuawiFwiLDQsXCLmsI7msJLmsJfmsJzmsJ3msJ7msKDmsKPmsKXmsKvmsKzmsK3msLHmsLPmsLbmsLfmsLnmsLrmsLvmsLzmsL7msL/msYPmsYTmsYXmsYjmsYtcIiw0LFwi5rGR5rGS5rGT5rGW5rGYXCJdLFtcIjliNDBcIixcIuaxmeaxmuaxouaxo+axpeaxpuaxp+axq1wiLDQsXCLmsbHmsbPmsbXmsbfmsbjmsbrmsbvmsbzmsb/msoDmsoTmsofmsormsovmso3mso7mspHmspLmspXmspbmspfmspjmsprmspzmsp3msp7msqDmsqLmsqjmsqzmsq/msrDmsrTmsrXmsrbmsrfmsrrms4Dms4Hms4Lms4Pms4bms4fms4jms4vms43ms47ms4/ms5Hms5Lms5hcIl0sW1wiOWI4MFwiLFwi5rOZ5rOa5rOc5rOd5rOf5rOk5rOm5rOn5rOp5rOs5rOt5rOy5rO05rO55rO/5rSA5rSC5rSD5rSF5rSG5rSI5rSJ5rSK5rSN5rSP5rSQ5rSR5rST5rSU5rSV5rSW5rSY5rSc5rSd5rSfXCIsNSxcIua0pua0qOa0qea0rOa0rea0r+a0sOa0tOa0tua0t+a0uOa0uua0v+a1gOa1gua1hOa1iea1jOa1kOa1lea1lua1l+a1mOa1m+a1nea1n+a1oea1oua1pOa1pea1p+a1qOa1q+a1rOa1rea1sOa1sea1sua1s+a1tea1tua1uea1uua1u+a1vVwiLDQsXCLmtoPmtoTmtobmtofmtormtovmto3mto/mtpDmtpLmtpZcIiw0LFwi5rac5rai5ral5ras5rat5raw5rax5raz5ra05ra25ra35ra5XCIsNSxcIua3gea3gua3g+a3iOa3iea3ilwiXSxbXCI5YzQwXCIsXCLmt43mt47mt4/mt5Dmt5Lmt5Pmt5Tmt5Xmt5fmt5rmt5vmt5zmt5/mt6Lmt6Pmt6Xmt6fmt6jmt6nmt6rmt63mt6/mt7Dmt7Lmt7Tmt7Xmt7bmt7jmt7rmt71cIiw3LFwi5riG5riH5riI5riJ5riL5riP5riS5riT5riV5riY5riZ5rib5ric5rie5rif5rii5rim5rin5rio5riq5ris5riu5riw5rix5riz5ri1XCJdLFtcIjljODBcIixcIua4tua4t+a4uea4u1wiLDcsXCLmuYVcIiw3LFwi5rmP5rmQ5rmR5rmS5rmV5rmX5rmZ5rma5rmc5rmd5rme5rmgXCIsMTAsXCLmuazmua3mua9cIiwxNCxcIua6gOa6gea6gua6hOa6h+a6iOa6ilwiLDQsXCLmupFcIiw2LFwi5rqZ5rqa5rqb5rqd5rqe5rqg5rqh5rqj5rqk5rqm5rqo5rqp5rqr5rqs5rqt5rqu5rqw5rqz5rq15rq45rq55rq85rq+5rq/5ruA5ruD5ruE5ruF5ruG5ruI5ruJ5ruK5ruM5ruN5ruO5ruQ5ruS5ruW5ruY5ruZ5rub5ruc5rud5ruj5run5ruqXCIsNV0sW1wiOWQ0MFwiLFwi5ruw5rux5ruy5ruz5ru15ru25ru35ru45ru6XCIsNyxcIua8g+a8hOa8hea8h+a8iOa8ilwiLDQsXCLmvJDmvJHmvJLmvJZcIiw5LFwi5ryh5ryi5ryj5ryl5rym5ryn5ryo5rys5ryu5ryw5ryy5ry05ry15ry3XCIsNixcIua8v+a9gOa9gea9glwiXSxbXCI5ZDgwXCIsXCLmvYPmvYTmvYXmvYjmvYnmvYrmvYzmvY5cIiw5LFwi5r2Z5r2a5r2b5r2d5r2f5r2g5r2h5r2j5r2k5r2l5r2nXCIsNSxcIua9r+a9sOa9sea9s+a9tea9tua9t+a9uea9u+a9vVwiLDYsXCLmvoXmvobmvofmvormvovmvo9cIiwxMixcIua+nea+nua+n+a+oOa+olwiLDQsXCLmvqhcIiwxMCxcIua+tOa+tea+t+a+uOa+ulwiLDUsXCLmv4Hmv4NcIiw1LFwi5r+KXCIsNixcIua/k1wiLDEwLFwi5r+f5r+i5r+j5r+k5r+lXCJdLFtcIjllNDBcIixcIua/plwiLDcsXCLmv7BcIiwzMixcIueAklwiLDcsXCLngJxcIiw2LFwi54CkXCIsNl0sW1wiOWU4MFwiLFwi54CrXCIsOSxcIueAtueAt+eAuOeAulwiLDE3LFwi54GN54GO54GQXCIsMTMsXCLngZ9cIiwxMSxcIueBrueBseeBsueBs+eBtOeBt+eBueeBuueBu+eBveeCgeeCgueCg+eChOeChueCh+eCiOeCi+eCjOeCjeeCj+eCkOeCkeeCk+eCl+eCmOeCmueCm+eCnlwiLDEyLFwi54Kw54Ky54K054K154K254K654K+54K/54OE54OF54OG54OH54OJ54OLXCIsMTIsXCLng5pcIl0sW1wiOWY0MFwiLFwi54Oc54Od54Oe54Og54Oh54Oi54Oj54Ol54Oq54Ou54OwXCIsNixcIueDuOeDuueDu+eDvOeDvlwiLDEwLFwi54SLXCIsNCxcIueEkeeEkueElOeEl+eEm1wiLDEwLFwi54SnXCIsNyxcIueEsueEs+eEtFwiXSxbXCI5ZjgwXCIsXCLnhLXnhLdcIiwxMyxcIueFhueFh+eFiOeFieeFi+eFjeeFj1wiLDEyLFwi54Wd54WfXCIsNCxcIueFpeeFqVwiLDQsXCLnha/nhbDnhbHnhbTnhbXnhbbnhbfnhbnnhbvnhbznhb5cIiw1LFwi54aFXCIsNCxcIueGi+eGjOeGjeeGjueGkOeGkeeGkueGk+eGleeGlueGl+eGmlwiLDQsXCLnhqFcIiw2LFwi54ap54aq54ar54atXCIsNSxcIueGtOeGtueGt+eGuOeGulwiLDgsXCLnh4RcIiw5LFwi54ePXCIsNF0sW1wiYTA0MFwiLFwi54eWXCIsOSxcIueHoeeHoueHo+eHpOeHpueHqFwiLDUsXCLnh69cIiw5LFwi54e6XCIsMTEsXCLniIdcIiwxOV0sW1wiYTA4MFwiLFwi54ib54ic54ieXCIsOSxcIueIqeeIq+eIreeIrueIr+eIsueIs+eItOeIuueIvOeIvueJgFwiLDYsXCLniYnniYrniYvniY7niY/niZDniZHniZPniZTniZXniZfniZjniZrniZzniZ7niaDniaPniaTniaXniajniarniavniaznia3nibDnibHnibPnibTnibbnibfnibjnibvnibznib3nioLnioPnioVcIiw0LFwi54qM54qO54qQ54qR54qTXCIsMTEsXCLniqBcIiwxMSxcIueKrueKseeKsueKs+eKteeKulwiLDYsXCLni4Xni4bni4fni4nni4rni4vni4zni4/ni5Hni5Pni5Tni5Xni5bni5jni5rni5tcIl0sW1wiYTFhMVwiLFwi44CA44CB44CCwrfLicuHwqjjgIPjgIXigJTvvZ7igJbigKbigJjigJnigJzigJ3jgJTjgJXjgIhcIiw3LFwi44CW44CX44CQ44CRwrHDl8O34oi24oin4oio4oiR4oiP4oiq4oip4oiI4oi34oia4oql4oil4oig4oyS4oqZ4oir4oiu4omh4omM4omI4oi94oid4omg4omu4omv4omk4oml4oie4oi14oi04pmC4pmAwrDigLLigLPihIPvvITCpO+/oO+/oeKAsMKn4oSW4piG4piF4peL4peP4peO4peH4peG4pah4pag4paz4pay4oC74oaS4oaQ4oaR4oaT44CTXCJdLFtcImEyYTFcIixcIuKFsFwiLDldLFtcImEyYjFcIixcIuKSiFwiLDE5LFwi4pG0XCIsMTksXCLikaBcIiw5XSxbXCJhMmU1XCIsXCLjiKBcIiw5XSxbXCJhMmYxXCIsXCLihaBcIiwxMV0sW1wiYTNhMVwiLFwi77yB77yC77yD77+l77yFXCIsODgsXCLvv6NcIl0sW1wiYTRhMVwiLFwi44GBXCIsODJdLFtcImE1YTFcIixcIuOCoVwiLDg1XSxbXCJhNmExXCIsXCLOkVwiLDE2LFwizqNcIiw2XSxbXCJhNmMxXCIsXCLOsVwiLDE2LFwiz4NcIiw2XSxbXCJhNmUwXCIsXCLvuLXvuLbvuLnvuLrvuL/vuYDvuL3vuL7vuYHvuYLvuYPvuYRcIl0sW1wiYTZlZVwiLFwi77i777i877i377i477ixXCJdLFtcImE2ZjRcIixcIu+4s++4tFwiXSxbXCJhN2ExXCIsXCLQkFwiLDUsXCLQgdCWXCIsMjVdLFtcImE3ZDFcIixcItCwXCIsNSxcItGR0LZcIiwyNV0sW1wiYTg0MFwiLFwiy4rLi8uZ4oCT4oCV4oCl4oC14oSF4oSJ4oaW4oaX4oaY4oaZ4oiV4oif4oij4omS4omm4omn4oq/4pWQXCIsMzUsXCLiloFcIiw2XSxbXCJhODgwXCIsXCLilohcIiw3LFwi4paT4paU4paV4pa84pa94pei4pej4pek4pel4piJ4oqV44CS44Cd44CeXCJdLFtcImE4YTFcIixcIsSBw6HHjsOgxJPDqcSbw6jEq8Otx5DDrMWNw7PHksOyxavDuseUw7nHlseYx5rHnMO8w6rJkVwiXSxbXCJhOGJkXCIsXCLFhMWIXCJdLFtcImE4YzBcIixcIsmhXCJdLFtcImE4YzVcIixcIuOEhVwiLDM2XSxbXCJhOTQwXCIsXCLjgKFcIiw4LFwi44qj446O446P446c446d446e446h44+E44+O44+R44+S44+V77iw77+i77+kXCJdLFtcImE5NTlcIixcIuKEoeOIsVwiXSxbXCJhOTVjXCIsXCLigJBcIl0sW1wiYTk2MFwiLFwi44O844Kb44Kc44O944O+44CG44Kd44Ke77mJXCIsOSxcIu+5lO+5le+5lu+5l++5mVwiLDhdLFtcImE5ODBcIixcIu+5olwiLDQsXCLvuajvuanvuarvuatcIl0sW1wiYTk5NlwiLFwi44CHXCJdLFtcImE5YTRcIixcIuKUgFwiLDc1XSxbXCJhYTQwXCIsXCLni5zni53ni5/ni6JcIiw1LFwi54uq54ur54u154u254u554u954u+54u/54yA54yC54yEXCIsNSxcIueMi+eMjOeMjeeMj+eMkOeMkeeMkueMlOeMmOeMmeeMmueMn+eMoOeMo+eMpOeMpueMp+eMqOeMreeMr+eMsOeMsueMs+eMteeMtueMuueMu+eMvOeMveeNgFwiLDhdLFtcImFhODBcIixcIueNieeNiueNi+eNjOeNjueNj+eNkeeNk+eNlOeNleeNlueNmFwiLDcsXCLnjaFcIiwxMCxcIueNrueNsOeNsVwiXSxbXCJhYjQwXCIsXCLnjbJcIiwxMSxcIueNv1wiLDQsXCLnjoXnjobnjojnjornjoznjo3njo/njpDnjpLnjpPnjpTnjpXnjpfnjpjnjpnnjprnjpznjp3njp7njqDnjqHnjqNcIiw1LFwi546q546s546t546x5460546154625464546554685469546+546/54+B54+DXCIsNF0sW1wiYWI4MFwiLFwi54+L54+M54+O54+SXCIsNixcIuePmuePm+ePnOePneePn+ePoeePouePo+ePpOePpuePqOePquePq+ePrOePruePr+ePsOePseePs1wiLDRdLFtcImFjNDBcIixcIuePuFwiLDEwLFwi55CE55CH55CI55CL55CM55CN55CO55CRXCIsOCxcIueQnFwiLDUsXCLnkKPnkKTnkKfnkKnnkKvnkK3nkK/nkLHnkLLnkLdcIiw0LFwi55C955C+55C/55GA55GCXCIsMTFdLFtcImFjODBcIixcIueRjlwiLDYsXCLnkZbnkZjnkZ3nkaBcIiwxMixcIueRrueRr+eRsVwiLDQsXCLnkbjnkbnnkbpcIl0sW1wiYWQ0MFwiLFwi55G755G855G955G/55KC55KE55KF55KG55KI55KJ55KK55KM55KN55KP55KRXCIsMTAsXCLnkp3nkp9cIiw3LFwi55KqXCIsMTUsXCLnkrtcIiwxMl0sW1wiYWQ4MFwiLFwi55OIXCIsOSxcIueTk1wiLDgsXCLnk53nk5/nk6Hnk6Xnk6dcIiw2LFwi55Ow55Ox55OyXCJdLFtcImFlNDBcIixcIueTs+eTteeTuFwiLDYsXCLnlIDnlIHnlILnlIPnlIVcIiw3LFwi55SO55SQ55SS55SU55SV55SW55SX55Sb55Sd55Se55SgXCIsNCxcIueUpueUp+eUqueUrueUtOeUtueUueeUvOeUveeUv+eVgeeVgueVg+eVhOeVhueVh+eVieeViueVjeeVkOeVkeeVkueVk+eVleeVlueVl+eVmFwiXSxbXCJhZTgwXCIsXCLnlZ1cIiw3LFwi55Wn55Wo55Wp55WrXCIsNixcIueVs+eVteeVtueVt+eVulwiLDQsXCLnloDnloHnloLnloTnloXnlodcIl0sW1wiYWY0MFwiLFwi55aI55aJ55aK55aM55aN55aO55aQ55aT55aV55aY55ab55ac55ae55ai55amXCIsNCxcIueWreeWtueWt+eWuueWu+eWv+eXgOeXgeeXhueXi+eXjOeXjueXj+eXkOeXkeeXk+eXl+eXmeeXmueXnOeXneeXn+eXoOeXoeeXpeeXqeeXrOeXreeXrueXr+eXsueXs+eXteeXtueXt+eXuOeXuueXu+eXveeXvueYgueYhOeYhueYh1wiXSxbXCJhZjgwXCIsXCLnmIjnmInnmIvnmI3nmI7nmI/nmJHnmJLnmJPnmJTnmJbnmJrnmJznmJ3nmJ7nmKHnmKPnmKfnmKjnmKznmK7nmK/nmLHnmLLnmLbnmLfnmLnnmLrnmLvnmL3nmYHnmYLnmYRcIl0sW1wiYjA0MFwiLFwi55mFXCIsNixcIueZjlwiLDUsXCLnmZXnmZdcIiw0LFwi55md55mf55mg55mh55mi55mkXCIsNixcIueZrOeZreeZrueZsFwiLDcsXCLnmbnnmbrnmbznmb/nmoDnmoHnmoPnmoXnmonnmornmoznmo3nmo/nmpDnmpLnmpTnmpXnmpfnmpjnmprnmptcIl0sW1wiYjA4MFwiLFwi55qcXCIsNyxcIueapVwiLDgsXCLnmq/nmrDnmrPnmrVcIiw5LFwi55uA55uB55uD5ZWK6Zi/5Z+D5oyo5ZOO5ZSJ5ZOA55qR55mM6JS855+u6Im+56KN54ix6ZqY6Z6N5rCo5a6J5L+65oyJ5pqX5bK46IO65qGI6IKu5piC55uO5Ye55pWW54as57+x6KKE5YKy5aWl5oeK5r6z6Iqt5o2M5omS5Y+t5ZCn56yG5YWr55ak5be05ouU6LeL6Z225oqK6ICZ5Z2d6Zy4572i54i455m95p+P55m+5pGG5L2w6LSl5ouc56iX5paR54+t5pCs5omz6Iis6aKB5p2/54mI5omu5ouM5Ly055Oj5Y2K5Yqe57uK6YKm5biu5qKG5qac6IaA57uR5qOS56OF6JqM6ZWR5YKN6LCk6Iue6IOe5YyF6KSS5YmlXCJdLFtcImIxNDBcIixcIuebhOebh+ebieebi+ebjOebk+ebleebmeebmuebnOebneebnueboFwiLDQsXCLnm6ZcIiw3LFwi55uw55uz55u155u255u355u655u755u955u/55yA55yC55yD55yF55yG55yK55yM55yOXCIsMTAsXCLnnJvnnJznnJ3nnJ7nnKHnnKPnnKTnnKXnnKfnnKrnnKtcIl0sW1wiYjE4MFwiLFwi55ys55yu55ywXCIsNCxcIuecueecu+ecveecvuecv+edguedhOedheedhuediFwiLDcsXCLnnZJcIiw3LFwi552c6JaE6Zu55L+d5aCh6aWx5a6d5oqx5oql5pq06LG56bKN54iG5p2v56KR5oKy5Y2R5YyX6L6I6IOM6LSd6ZKh5YCN54uI5aSH5oOr54SZ6KKr5aWU6Iuv5pys56yo5bSp57u355St5rO16Lmm6L+46YC86by75q+U6YSZ56yU5b2856Kn6JOW6JS95q+V5q+Z5q+W5biB5bqH55e56Zet5pWd5byK5b+F6L6f5aOB6IeC6YG/6Zmb6Z6t6L6557yW6LSs5omB5L6/5Y+Y5Y2e6L6o6L6p6L6r6YGN5qCH5b2q6IaY6KGo6bOW5oaL5Yir55iq5b2s5paM5r+S5ruo5a6+5pGI5YW15Yaw5p+E5LiZ56eJ6aW854KzXCJdLFtcImIyNDBcIixcIuedneednuedn+edoOedpOedp+edqeedquedrVwiLDExLFwi552655275528556B556C556D556GXCIsNSxcIueej+eekOeek1wiLDExLFwi556h556j556k556m556o556r556t556u556v556x556y55605562XCIsNF0sW1wiYjI4MFwiLFwi5568556+55+AXCIsMTIsXCLnn45cIiw4LFwi55+Y55+Z55+a55+dXCIsNCxcIuefpOeXheW5tueOu+iPoOaSreaLqOmSteazouWNmuWLg+aQj+mTgueulOS8r+W4m+iItuiEluiGiua4pOaziumps+aNleWNnOWTuuihpeWfoOS4jeW4g+atpeewv+mDqOaAluaTpueMnOijgeadkOaJjei0ouedrOi4qemHh+W9qeiPnOiUoemkkOWPguialeaui+aDreaDqOeBv+iLjeiIseS7k+ayp+iXj+aTjeezmeanveabueiNieWOleetluS+p+WGjOa1i+Wxgui5reaPkuWPieiMrOiMtuafpeeitOaQveWvn+WylOW3ruivp+aLhuaftOixuuaQgOaOuuidiemmi+iwl+e8oOmTsuS6p+mYkOmipOaYjOeMllwiXSxbXCJiMzQwXCIsXCLnn6bnn6jnn6rnn6/nn7Dnn7Hnn7Lnn7Tnn7Xnn7fnn7nnn7rnn7vnn7znoINcIiw1LFwi56CK56CL56CO56CP56CQ56CT56CV56CZ56Cb56Ce56Cg56Ch56Ci56Ck56Co56Cq56Cr56Cu56Cv56Cx56Cy56Cz56C156C256C956C/56GB56GC56GD56GE56GG56GI56GJ56GK56GL56GN56GP56GR56GT56GU56GY56GZ56GaXCJdLFtcImIzODBcIixcIuehm+ehnOehnlwiLDExLFwi56GvXCIsNyxcIuehuOehueehuuehu+ehvVwiLDYsXCLlnLrlsJ3luLjplb/lgb/ogqDljoLmlZ7nlYXllLHlgKHotoXmioTpkp7mnJ3lmLLmva7lt6LlkLXngpLovabmia/mkqTmjqPlvbvmvojpg7Toh6PovrDlsJjmmajlv7HmsonpmYjotoHooazmkpHnp7Dln47mqZnmiJDlkYjkuZjnqIvmg6nmvoTor5rmib/pgJ7pqovnp6TlkIPnl7TmjIHljJnmsaDov5/lvJvpqbDogLvpvb/kvojlsLrotaTnv4XmlqXngr3lhYXlhrLomavltIflrqDmir3phaznlbTouIznqKDmhIHnrbnku4fnu7jnnoXkuJHoh63liJ3lh7rmqbHljqjouofplITpm4/mu4HpmaTmpZpcIl0sW1wiYjQ0MFwiLFwi56KE56KF56KG56KI56KK56KL56KP56KQ56KS56KU56KV56KW56KZ56Kd56Ke56Kg56Ki56Kk56Km56KoXCIsNyxcIueiteeitueit+eiuOeiuueiu+eivOeiveeiv+ejgOejguejg+ejhOejhuejh+ejiOejjOejjeejjuejj+ejkeejkuejk+ejluejl+ejmOejmlwiLDldLFtcImI0ODBcIixcIuejpOejpeejpuejp+ejqeejquejq+ejrVwiLDQsXCLno7Pno7Xno7bno7jno7nno7tcIiw1LFwi56SC56SD56SE56SGXCIsNixcIuehgOWCqOefl+aQkOinpuWkhOaPo+W3neepv+akveS8oOiIueWWmOS4sueWrueql+W5ouW6iumXr+WIm+WQueeCiuaNtumUpOWeguaYpeakv+mGh+WUh+a3s+e6r+igouaIs+e7sOeWteiMqOejgembjOi+nuaFiOeTt+ivjeatpOWIuui1kOasoeiBquiRseWbseWMhuS7juS4m+WHkeeyl+mGi+ewh+S/g+i5v+evoeeqnOaRp+W0lOWCrOiEhueYgeeyuea3rOe/oOadkeWtmOWvuOeji+aSruaQk+aOquaMq+mUmeaQrei+vuetlOeYqeaJk+Wkp+WRhuatueWCo+aItOW4puauhuS7o+i0t+iii+W+hemArlwiXSxbXCJiNTQwXCIsXCLnpI1cIiw1LFwi56SUXCIsOSxcIuekn1wiLDQsXCLnpKVcIiwxNCxcIuektVwiLDQsXCLnpL3npL/npYLnpYPnpYTnpYXnpYfnpYpcIiw4LFwi56WU56WV56WY56WZ56Wh56WjXCJdLFtcImI1ODBcIixcIuelpOelpuelqeelquelq+elrOelruelsFwiLDYsXCLnpbnnpbtcIiw0LFwi56aC56aD56aG56aH56aI56aJ56aL56aM56aN56aO56aQ56aR56aS5oCg6IC95ouF5Li55Y2V6YO45o646IOG5pem5rCu5L2G5oOu5reh6K+e5by56JuL5b2T5oyh5YWa6I2h5qGj5YiA5o2j6LmI5YCS5bKb56W35a+85Yiw56i75oK86YGT55uX5b635b6X55qE6Lms54Gv55m7562J556q5Yez6YKT5aCk5L2O5ru06L+q5pWM56yb54uE5rak57+f5auh5oq15bqV5Zyw6JKC56ys5bid5byf6YCS57yU6aKg5o6C5ruH56KY54K55YW46Z2b5Z6r55S15L2D55S45bqX5oOm5aWg5reA5q6/56KJ5Y+86ZuV5YeL5YiB5o6J5ZCK6ZKT6LCD6LeM54i556Kf6J226L+t6LCN5Y+gXCJdLFtcImI2NDBcIixcIuemk1wiLDYsXCLnpptcIiwxMSxcIuemqFwiLDEwLFwi56a0XCIsNCxcIuemvOemv+enguenhOenheenh+eniOeniuenjOenjuenj+enkOenk+enlOenluenl+enmVwiLDUsXCLnp6Dnp6Hnp6Lnp6Xnp6jnp6pcIl0sW1wiYjY4MFwiLFwi56es56eu56exXCIsNixcIuenueenuuenvOenvuenv+eogeeohOeoheeoh+eoiOeoieeoiueojOeoj1wiLDQsXCLnqJXnqJbnqJjnqJnnqJvnqJzkuIHnm6/lj67pkonpobbpvI7plK3lrprorqLkuKLkuJzlhqzokaPmh4LliqjmoIvkvpfmgavlhrvmtJ7lhZzmipbmlpfpmaHosYbpgJfnl5jpg73nnaPmr5Lniorni6zor7vloLXnnbnotYzmnZzplYDogprluqbmuKHlppLnq6/nn63plLvmrrXmlq3nvI7loIblhZHpmJ/lr7nloqnlkKjoubLmlabpob/lm6Tpkp3nm77pgYHmjoflk4blpJrlpLrlnpvourLmnLXot7roiLXliYHmg7DloJXom77ls6jpuYXkv4Tpop3orrnlqKXmgbbljoTmibzpgY/phILppb/mganogIzlhL/ogLPlsJTppbXmtLHkuoxcIl0sW1wiYjc0MFwiLFwi56id56if56ih56ii56ikXCIsMTQsXCLnqLTnqLXnqLbnqLjnqLrnqL7nqYBcIiw1LFwi56mHXCIsOSxcIuepklwiLDQsXCLnqZhcIiwxNl0sW1wiYjc4MFwiLFwi56mpXCIsNixcIuepseepsueps+epteepu+epvOepveepvueqgueqheeqh+eqieeqiueqi+eqjOeqjueqj+eqkOeqk+eqlOeqmeeqmueqm+eqnueqoeeqoui0sOWPkee9muetj+S8kOS5j+mYgOazleePkOiXqeW4hueVque/u+aoiuefvumSkue5geWHoeeDpuWPjei/lOiMg+i0qeeKr+mlreazm+WdiuiKs+aWueiCquaIv+mYsuWmqOS7v+iuv+e6uuaUvuiPsumdnuWVoemjnuiCpeWMquivveWQoOiCuuW6n+ayuOi0ueiKrOmFmuWQqeawm+WIhue6t+Wdn+eEmuaxvueyieWli+S7veW/v+aEpOeyquS4sOWwgeaeq+icguWzsOmUi+mjjueWr+eDvemAouWGr+e8neiuveWlieWHpOS9m+WQpuWkq+aVt+iCpOWtteaJtuaLgui+kOW5heawn+espuS8j+S/mOacjVwiXSxbXCJiODQwXCIsXCLnqqPnqqTnqqfnqqnnqqrnqqvnqq5cIiw0LFwi56q0XCIsMTAsXCLnq4BcIiwxMCxcIuerjFwiLDksXCLnq5fnq5jnq5rnq5vnq5znq53nq6Hnq6Lnq6Tnq6dcIiw1LFwi56uu56uw56ux56uy56uzXCJdLFtcImI4ODBcIixcIuertFwiLDQsXCLnq7vnq7znq77nrIDnrIHnrILnrIXnrIfnrInnrIznrI3nrI7nrJDnrJLnrJPnrJbnrJfnrJjnrJrnrJznrJ3nrJ/nrKHnrKLnrKPnrKfnrKnnrK3mta7mtqrnpo/oorHlvJfnlKvmiprovoXkv6/ph5zmlqfohK/ohZHlupzohZDotbTlia/opobotYvlpI3lgoXku5jpmJzniLbohbnotJ/lr4zorqPpmYTlpofnvJrlkpDlmbblmI7or6XmlLnmpoLpkpnnm5bmuonlubLnlJjmnYbmn5Hnq7/ogp3otbbmhJ/np4bmlaLotaPlhojliJrpkqLnvLjogpvnurLlspfmuK/mnaDnr5nnmovpq5joho/nvpTns5XmkJ7plZDnqL/lkYrlk6XmrYzmkIHmiIjpuL3og7PnlpnlibLpnanokZvmoLzom6TpmIHpmpTpk6zkuKrlkITnu5nmoLnot5/ogJXmm7TluprnvrlcIl0sW1wiYjk0MFwiLFwi56yv56yw56yy56y056y156y256y356y556y756y956y/XCIsNSxcIuethuetiOetiuetjeetjuetk+etleetl+etmeetnOetnuetn+etoeeto1wiLDEwLFwi562v562w562z562056225624562656285629562/566B566C566D566E566GXCIsNixcIueujueuj1wiXSxbXCJiOTgwXCIsXCLnrpHnrpLnrpPnrpbnrpjnrpnnrprnrpvnrp7nrp/nrqDnrqPnrqTnrqXnrq7nrq/nrrDnrrLnrrPnrrXnrrbnrrfnrrlcIiw3LFwi56+C56+D56+E5Z+C6IC/5qKX5bel5pS75Yqf5oGt6b6a5L6b6Lqs5YWs5a6r5byT5bep5rGe5oux6LSh5YWx6ZKp5Yu+5rKf6Iuf54uX5Z6i5p6E6LSt5aSf6L6c6I+H5ZKV566N5Lyw5rK95a2k5aeR6byT5Y+k6JuK6aqo6LC36IKh5pWF6aG+5Zu66ZuH5Yiu55Oc5YmQ5a+h5oyC6KSC5LmW5ouQ5oCq5qO65YWz5a6Y5Yag6KeC566h6aaG572Q5oOv54GM6LSv5YWJ5bm/6YCb55Gw6KeE5Zyt56GF5b2S6b6f6Ze66L2o6ay86K+h55m45qGC5p+c6Leq6LS15Yi96L6K5rua5qON6ZSF6YOt5Zu95p6c6KO56L+H5ZOIXCJdLFtcImJhNDBcIixcIuevheeviOevieeviuevi+evjeevjuevj+evkOevkuevlFwiLDQsXCLnr5vnr5znr57nr5/nr6Dnr6Lnr6Pnr6Tnr6fnr6jnr6nnr6vnr6znr63nr6/nr7Dnr7JcIiw0LFwi56+456+556+656+756+956+/XCIsNyxcIuewiOewieewiuewjeewjuewkFwiLDUsXCLnsJfnsJjnsJlcIl0sW1wiYmE4MFwiLFwi57CaXCIsNCxcIuewoFwiLDUsXCLnsKjnsKnnsKtcIiwxMixcIuewuVwiLDUsXCLnsYLpqrjlranmtbfmsKbkuqXlrrPpqofphaPmhqjpgq/pn6nlkKvmtrXlr5Llh73llornvZXnv7DmkrzmjY3ml7Hmhr7mgo3nhIrmsZfmsYnlpK/mna3oiKrlo5Xlmo7osarmr6vpg53lpb3ogJflj7fmtanlkbXllp3ojbfoj4/moLjnpr7lkozkvZXlkIjnm5LosonpmILmsrPmtrjotavopJDpuaTotLrlmL/pu5Hnl5Xlvojni6Dmgajlk7zkuqjmqKrooaHmgZLovbDlk4Tng5jombnpuL/mtKrlro/lvJjnuqLllonkvq/njLTlkLzljprlgJnlkI7lkbzkuY7lv73nkZrlo7bokavog6HonbTni5Dns4rmuZZcIl0sW1wiYmI0MFwiLFwi57GDXCIsOSxcIuexjlwiLDM2LFwi57G1XCIsNSxcIuexvlwiLDldLFtcImJiODBcIixcIueyiOeyilwiLDYsXCLnspPnspTnspbnspnnsprnspvnsqDnsqHnsqPnsqbnsqfnsqjnsqnnsqvnsqznsq3nsq/nsrDnsrRcIiw0LFwi57K657K75byn6JmO5ZSs5oqk5LqS5rKq5oi36Iqx5ZOX5Y2O54y+5ruR55S75YiS5YyW6K+d5qeQ5b6K5oCA5reu5Z2P5qyi546v5qGT6L+Y57yT5o2i5oKj5ZSk55eq6LGi54SV5raj5a6m5bm76I2S5oWM6buE56O66J2X57Cn55qH5Yew5oO254WM5pmD5bmM5oGN6LCO54Gw5oyl6L6J5b695oGi6JuU5Zue5q+B5oKU5oWn5Y2J5oOg5pmm6LS/56e95Lya54Op5rGH6K6z6K+y57uY6I2k5piP5ama6a2C5rWR5re36LGB5rS75LyZ54Gr6I635oiW5oOR6ZyN6LSn56W45Ye75Zy+5Z+65py655W456i956ev566VXCJdLFtcImJjNDBcIixcIueyv+ezgOezguezg+ezhOezhuezieezi+ezjlwiLDYsXCLns5jns5rns5vns53ns57ns6FcIiw2LFwi57OpXCIsNSxcIuezsFwiLDcsXCLns7nns7rns7xcIiwxMyxcIue0i1wiLDVdLFtcImJjODBcIixcIue0kVwiLDE0LFwi57Sh57Sj57Sk57Sl57Sm57So57Sp57Sq57Ss57St57Su57SwXCIsNixcIuiCjOmlpei/uea/gOiupem4oeWnrOe7qee8ieWQieaegeajmOi+keexjembhuWPiuaApeeWvuaxsuWNs+Wriee6p+aMpOWHoOiEiuW3seiTn+aKgOWGgOWto+S8juelreWJguaCuOa1juWvhOWvguiuoeiusOaXouW/jOmZheWmk+e7p+e6quWYieaet+WkueS9s+WutuWKoOiNmumiiui0vueUsumSvuWBh+eovOS7t+aetumpvuWrgeatvOebkeWdmuWwluesuumXtOeFjuWFvOiCqeiJsOWluOe8hOiMp+ajgOafrOeiseeht+aLo+aNoeeugOS/reWJquWHj+iNkOanm+mJtOi3tei0seingemUrueureS7tlwiXSxbXCJiZDQwXCIsXCLntLdcIiw1NCxcIue1r1wiLDddLFtcImJkODBcIixcIue1uFwiLDMyLFwi5YGl6Iiw5YmR6aWv5riQ5rqF5ran5bu65YO15aec5bCG5rWG5rGf55aG6JKL5qGo5aWW6K6y5Yyg6YWx6ZmN6JWJ5qSS56SB54Sm6IO25Lqk6YOK5rWH6aqE5aiH5Zq85pCF6ZOw55+r5L6l6ISa54uh6KeS6aW657y057ue5Ym/5pWZ6YW16L2/6L6D5Y+r56qW5o+t5o6l55qG56e46KGX6Zi25oiq5Yqr6IqC5qGU5p2w5o23552r56ut5rSB57uT6Kej5aeQ5oiS6JeJ6Iql55WM5YCf5LuL55al6K+r5bGK5be+562L5pak6YeR5LuK5rSl6KWf57Sn6ZSm5LuF6LCo6L+b6Z2z5pmL56aB6L+R54Os5rW4XCJdLFtcImJlNDBcIixcIue2mVwiLDEyLFwi57anXCIsNixcIue2r1wiLDQyXSxbXCJiZTgwXCIsXCLnt5pcIiwzMixcIuWwveWKsuiNhuWFouiMjuedm+aZtumyuOS6rOaDiueyvueys+e7j+S6leitpuaZr+miiOmdmeWig+aVrOmVnOW+hOeXiemdluern+ernuWHgOeCr+eqmOaPqueptue6oOeOlumfreS5heeBuOS5nemFkuWOqeaVkeaXp+iHvOiIheWSjuWwseeWmumeoOaLmOeLmeeWveWxhempueiPiuWxgOWSgOefqeS4vuayruiBmuaLkuaNruW3qOWFt+i3nei4numUr+S/seWPpeaDp+eCrOWJp+aNkOm5g+Won+WApuect+WNt+e7ouaSheaUq+aKieaOmOWAlOeIteinieWGs+ivgOe7neWdh+iPjOmSp+WGm+WQm+Wzu1wiXSxbXCJiZjQwXCIsXCLnt7tcIiw2Ml0sW1wiYmY4MFwiLFwi57i657i8XCIsNCxcIue5glwiLDQsXCLnuYhcIiwyMSxcIuS/iuero+a1mumDoemqj+WWgOWSluWNoeWSr+W8gOaPqealt+WHr+aFqOWIiuWgquWLmOWdjuegjeeci+W6t+aFt+ezoOaJm+aKl+S6oueCleiAg+aLt+eDpOmdoOWdt+iLm+afr+ajteejlemil+enkeWjs+WSs+WPr+a4tOWFi+WIu+WuouivvuiCr+WVg+WepuaBs+WdkeWQreepuuaBkOWtlOaOp+aKoOWPo+aJo+Wvh+aer+WTreeqn+iLpumFt+W6k+ijpOWkuOWeruaMjui3qOiDr+Wdl+ett+S+qeW/q+WuveasvuWMoeetkOeLguahhuefv+ectuaXt+WGteS6j+eblOWyv+eqpeiRteWljumtgeWCgFwiXSxbXCJjMDQwXCIsXCLnuZ5cIiwzNSxcIue6g1wiLDIzLFwi57qc57qd57qeXCJdLFtcImMwODBcIixcIue6rue6tOe6u+e6vOe7lue7pOe7rOe7uee8iue8kOe8nue8t+e8uee8u1wiLDYsXCLnvYPnvYZcIiw5LFwi572S572T6aaI5oSn5rqD5Z2k5piG5o2G5Zuw5ous5omp5buT6ZiU5Z6D5ouJ5ZaH6Jyh6IWK6L6j5ZWm6I6x5p2l6LWW6JOd5amq5qCP5oum56+u6ZiR5YWw5r6c6LCw5o+96KeI5oeS57yG54OC5rul55CF5qaU54u85buK6YOO5pyX5rWq5o2e5Yqz54mi6ICB5L2s5ael6YWq54OZ5rad5YuS5LmQ6Zu36ZWt6JW+56OK57Sv5YSh5Z6S5pOC6IKL57G75rOq5qOx5qWe5Ya35Y6Y5qKo54qB6buO56+x54u456a75ryT55CG5p2O6YeM6bKk56S86I6J6I2U5ZCP5qCX5Li95Y6J5Yqx56C+5Y6G5Yip5YKI5L6L5L+QXCJdLFtcImMxNDBcIixcIue9lue9mee9m+e9nOe9nee9nue9oOe9o1wiLDQsXCLnvavnvaznva3nva/nvbDnvbPnvbXnvbbnvbfnvbjnvbrnvbvnvbznvb3nvb/nvoDnvoJcIiw3LFwi576L576N576PXCIsNCxcIue+lVwiLDQsXCLnvpvnvpznvqDnvqLnvqPnvqXnvqbnvqhcIiw2LFwi576xXCJdLFtcImMxODBcIixcIue+s1wiLDQsXCLnvrrnvrvnvr7nv4Dnv4Lnv4Pnv4Tnv4bnv4fnv4jnv4nnv4vnv43nv49cIiw0LFwi57+W57+X57+ZXCIsNSxcIue/oue/o+eXoueri+eykuaypematuWKm+eSg+WTqeS/qeiBlOiOsui/numVsOW7ieaAnOa2n+W4mOaVm+iEuOmTvuaBi+eCvOe7g+eyruWHieaigeeyseiJr+S4pOi+humHj+aZvuS6ruiwheaSqeiBiuWDmueWl+eHjuWvpei+vea9puS6huaSgumVo+W7luaWmeWIl+ijgueDiOWKo+eMjueQs+ael+ejt+mcluS4tOmCu+mznua3i+WHm+i1geWQneaLjueOsuiPsembtum+hOmTg+S8tue+muWHjOeBtemZteWyremihuWPpuS7pOa6nOeQieamtOehq+mmj+eVmeWImOeYpOa1geafs+WFrem+meiBi+WSmeesvOeqv1wiXSxbXCJjMjQwXCIsXCLnv6Tnv6fnv6jnv6rnv6vnv6znv63nv6/nv7Lnv7RcIiw2LFwi57+957++57+/6ICC6ICH6ICI6ICJ6ICK6ICO6ICP6ICR6ICT6ICa6ICb6ICd6ICe6ICf6ICh6ICj6ICk6ICrXCIsNSxcIuiAsuiAtOiAueiAuuiAvOiAvuiBgOiBgeiBhOiBheiBh+iBiOiBieiBjuiBj+iBkOiBkeiBk+iBleiBluiBl1wiXSxbXCJjMjgwXCIsXCLogZnogZtcIiwxMyxcIuiBq1wiLDUsXCLogbJcIiwxMSxcIumahuWehOaLoumZh+alvOWohOaQguevk+a8j+mZi+iKpuWNoumiheW6kOeCieaOs+WNpOiZj+mygem6k+eijOmcsui3r+i1gum5v+a9nuemhOW9lemZhuaIrumptOWQlemTneS+o+aXheWxpeWxoee8leiZkeawr+W+i+eOh+a7pOe7v+WzpuaMm+Wtqua7puWNteS5seaOoOeVpeaKoei9ruS8puS7keaypue6tuiuuuiQneieuue9l+mAu+mUo+euqemqoeijuOiQvea0m+mqhue7nOWmiOm6u+eOm+eggeiagumprOmqguWYm+WQl+Wfi+S5sOm6puWNlui/iOiEieeekummkuibrua7oeiUk+abvOaFoua8q1wiXSxbXCJjMzQwXCIsXCLogb7ogoHogoLogoXogojogorogo1cIiw1LFwi6IKU6IKV6IKX6IKZ6IKe6IKj6IKm6IKn6IKo6IKs6IKw6IKz6IK16IK26IK46IK56IK76IOF6IOHXCIsNCxcIuiDj1wiLDYsXCLog5jog5/og6Dog6Log6Pog6bog67og7Xog7fog7nog7vog77og7/ohIDohIHohIPohITohIXohIfohIjohItcIl0sW1wiYzM4MFwiLFwi6ISM6ISV6ISX6ISZ6ISb6ISc6ISd6ISfXCIsMTIsXCLohK3ohK7ohLDohLPohLTohLXohLfohLlcIiw0LFwi6IS/6LCp6IqS6Iyr55uy5rCT5b+Z6I6954yr6IyF6ZSa5q+b55+b6ZOG5Y2v6IyC5YaS5bi96LKM6LS45LmI546r5p6a5qKF6YW26ZyJ54Wk5rKh55yJ5aqS6ZWB5q+P576O5pin5a+Q5aa55aqa6Zeo6Ze35Lus6JCM6JKZ5qqs55uf6ZSw54yb5qKm5a2f55yv6Yaa6Z2h57Oc6L+36LCc5byl57Gz56eY6KeF5rOM6Jyc5a+G5bmC5qOJ55yg57u15YaV5YWN5YuJ5aip57yF6Z2i6IuX5o+P556E6JeQ56eS5ri65bqZ5aaZ6JSR54Gt5rCR5oq/55q/5pWP5oKv6Ze95piO6J6f6bij6ZOt5ZCN5ZG96LCs5pG4XCJdLFtcImM0NDBcIixcIuiFgFwiLDUsXCLohYfohYnohY3ohY7ohY/ohZLohZbohZfohZjohZtcIiw0LFwi6IWh6IWi6IWj6IWk6IWm6IWo6IWq6IWr6IWs6IWv6IWy6IWz6IW16IW26IW36IW46IaB6IaDXCIsNCxcIuiGieiGi+iGjOiGjeiGjuiGkOiGklwiLDUsXCLohpnohprohp5cIiw0LFwi6Iak6IalXCJdLFtcImM0ODBcIixcIuiGp+iGqeiGq1wiLDcsXCLohrRcIiw1LFwi6Ia86Ia96Ia+6Ia/6IeE6IeF6IeH6IeI6IeJ6IeL6IeNXCIsNixcIuaRueiYkeaooeiGnOejqOaRqemtlOaKueacq+iOq+WiqOm7mOayq+a8oOWvnumZjOiwi+eJn+afkOaLh+eJoeS6qeWnhuavjeWik+aaruW5leWLn+aFleacqOebruedpueJp+ephuaLv+WTquWRkOmSoOmCo+WonOe6s+awluS5g+WltuiAkOWliOWNl+eUt+mavuWbiuaMoOiEkeaBvOmXuea3luWRoummgeWGheWrqeiDveWmrumck+WAquazpeWwvOaLn+S9oOWMv+iFu+mAhua6uuiUq+aLiOW5tOeivuaSteaNu+W/teWomOmFv+m4n+Wwv+aNj+iBguWtveWVrumViumVjea2heaCqOafoOeLnuWHneWugVwiXSxbXCJjNTQwXCIsXCLoh5RcIiwxNCxcIuiHpOiHpeiHpuiHqOiHqeiHq+iHrlwiLDQsXCLoh7VcIiw1LFwi6Ie96Ie/6IiD6IiHXCIsNCxcIuiIjuiIj+iIkeiIk+iIlVwiLDUsXCLoiJ3oiKDoiKToiKXoiKboiKfoiKnoiK7oiLLoiLroiLzoiL3oiL9cIl0sW1wiYzU4MFwiLFwi6ImA6ImB6ImC6ImD6ImF6ImG6ImI6ImK6ImM6ImN6ImO6ImQXCIsNyxcIuiJmeiJm+iJnOiJneiJnuiJoFwiLDcsXCLoianmi6fms57niZvmia3pkq7nur3ohJPmtZPlhpzlvITlpbTliqrmgJLlpbPmmpbomZDnlp/mjKrmh6bns6/or7rlk6bmrKfpuKXmrrTol5XlkZXlgbbmsqTllarotrTniKzluJXmgJXnkLbmi43mjpLniYzlvpjmuYPmtL7mlIDmvZjnm5jno5Dnm7znlZTliKTlj5vkuZPlup7ml4HogKrog5bmipvlkobliKjngq7ooo3ot5Hms6Hlkbjog5rln7noo7TotZTpmarphY3kvanmspvllrfnm4bnoLDmiqjng7nmvo7lva3ok6zmo5rnobznr7fohqjmnIvpuY/mjafnorDlna/noJLpnLnmibnmiqvliojnkLXmr5dcIl0sW1wiYzY0MFwiLFwi6Imq6Imr6Ims6Imt6Imx6Im16Im26Im36Im46Im76Im86IqA6IqB6IqD6IqF6IqG6IqH6IqJ6IqM6IqQ6IqT6IqU6IqV6IqW6Iqa6Iqb6Iqe6Iqg6Iqi6Iqj6Iqn6Iqy6Iq16Iq26Iq66Iq76Iq86Iq/6IuA6IuC6IuD6IuF6IuG6IuJ6IuQ6IuW6IuZ6Iua6Iud6Iui6Iun6Iuo6Iup6Iuq6Ius6Iut6Iuu6Iuw6Iuy6Iuz6Iu16Iu26Iu4XCJdLFtcImM2ODBcIixcIuiLuuiLvFwiLDQsXCLojIrojIvojI3ojJDojJLojJPojJbojJjojJnojJ1cIiw5LFwi6Iyp6Iyq6Iyu6Iyw6Iyy6Iy36Iy76Iy95ZWk6IS+55ay55qu5Yy555ee5YO75bGB6K2s56+H5YGP54mH6aqX6aOY5ryC55Oi56Wo5pKH556l5ou86aKR6LSr5ZOB6IGY5LmS5Z2q6Iu56JCN5bmz5Yet55O26K+E5bGP5Z2h5rO86aKH5amG56C06a2E6L+r57KV5YmW5omR6ZO65LuG6I6G6JGh6I+p6JKy5Z+U5py05ZyD5pmu5rWm6LCx5pud54CR5pyf5qy65qCW5oia5aa75LiD5YeE5ryG5p+S5rKP5YW25qOL5aWH5q2n55Wm5bSO6ISQ6b2Q5peX56WI56WB6aqR6LW35bKC5Lme5LyB5ZCv5aWR56CM5Zmo5rCU6L+E5byD5rG95rOj6K6r5o6QXCJdLFtcImM3NDBcIixcIuiMvuiMv+iNgeiNguiNhOiNheiNiOiNilwiLDQsXCLojZPojZVcIiw0LFwi6I2d6I2i6I2wXCIsNixcIuiNueiNuuiNvlwiLDYsXCLojofojojojorojovojozojo3ojo/ojpDojpHojpTojpXojpbojpfojpnojprojp3ojp/ojqFcIiw2LFwi6I6s6I6t6I6uXCJdLFtcImM3ODBcIixcIuiOr+iOteiOu+iOvuiOv+iPguiPg+iPhOiPhuiPiOiPieiPi+iPjeiPjuiPkOiPkeiPkuiPk+iPleiPl+iPmeiPmuiPm+iPnuiPouiPo+iPpOiPpuiPp+iPqOiPq+iPrOiPreaBsOa0veeJteaJpumSjumTheWNg+i/geetvuS7n+iwpuS5vum7lOmSsemSs+WJjea9nOmBo+a1heiwtOWgkeW1jOasoOatieaequWRm+iFlOe+jOWimeiUt+W8uuaKouaph+mUueaVsuaChOahpeeep+S5lOS+qOW3p+memOaSrOe/mOWzreS/j+eqjeWIh+iMhOS4lOaAr+eqg+mSpuS+teS6suenpueQtOWLpOiKueaTkuemveWvneaygemdkui9u+awouWAvuWNv+a4heaTjuaZtOawsOaDhemht+ivt+W6hueQvOept+eni+S4mOmCseeQg+axguWbmumFi+azhei2i+WMuuibhuabsui6r+WxiOmpsea4oFwiXSxbXCJjODQwXCIsXCLoj67oj6/oj7NcIiw0LFwi6I+66I+76I+86I++6I+/6JCA6JCC6JCF6JCH6JCI6JCJ6JCK6JCQ6JCSXCIsNSxcIuiQmeiQmuiQm+iQnlwiLDUsXCLokKlcIiw3LFwi6JCyXCIsNSxcIuiQueiQuuiQu+iQvlwiLDcsXCLokYfokYjokYlcIl0sW1wiYzg4MFwiLFwi6JGKXCIsNixcIuiRklwiLDQsXCLokZjokZ3okZ7okZ/okaDokaLokaRcIiw0LFwi6JGq6JGu6JGv6JGw6JGy6JG06JG36JG56JG76JG85Y+W5ai26b6L6Laj5Y675ZyI6aKn5p2D6Yab5rOJ5YWo55eK5ouz54qs5Yi45Yqd57y654KU55i45Y206bmK5qa356Gu6ZuA6KOZ576k54S254eD5YaJ5p+T55Ok5aOk5pSY5Zq36K6p6aW25omw57uV5oO554Ot5aOs5LuB5Lq65b+N6Z+n5Lu76K6k5YiD5aaK57qr5omU5LuN5pel5oiO6Iy46JOJ6I2j6J6N54aU5rq25a6557uS5YaX5o+J5p+U6IKJ6Iy56KCV5YSS5a265aaC6L6x5Lmz5rGd5YWl6KSl6L2v6Ziu6JWK55Ge6ZSQ6Zew5ram6Iul5byx5pKS5rSS6JCo6IWu6bOD5aGe6LWb5LiJ5Y+BXCJdLFtcImM5NDBcIixcIuiRvVwiLDQsXCLokoPokoTokoXokobokoroko3oko9cIiw3LFwi6JKY6JKa6JKb6JKd6JKe6JKf6JKg6JKiXCIsMTIsXCLokrDokrHokrPokrXokrbokrfokrvokrzokr7ok4Dok4Lok4Pok4Xok4bok4fok4jok4vok4zok47ok4/ok5Lok5Tok5Xok5dcIl0sW1wiYzk4MFwiLFwi6JOYXCIsNCxcIuiTnuiToeiTouiTpOiTp1wiLDQsXCLok63ok67ok6/ok7FcIiwxMCxcIuiTveiTvuiUgOiUgeiUguS8nuaVo+ahkeWXk+S4p+aQlOmqmuaJq+WrgueRn+iJsua2qeajruWDp+iOjuegguadgOWIueaymee6seWCu+WVpeeFnuetm+aZkuePiuiLq+adieWxseWIoOeFveihq+mXqumZleaThei1oeiGs+WWhOaxleaJh+e8ruWikuS8pOWVhui1j+aZjOS4iuWwmuijs+aiouaNjueojeeDp+iKjeWLuumftuWwkeWTqOmCtee7jeWloui1iuibh+iIjOiIjei1puaRhOWwhOaFkea2ieekvuiuvuegt+eUs+WRu+S8uOi6q+a3seWooOe7heelnuayiOWuoeWptueUmuiCvuaFjua4l+WjsOeUn+eUpeeJsuWNh+e7s1wiXSxbXCJjYTQwXCIsXCLolINcIiw4LFwi6JSN6JSO6JSP6JSQ6JSS6JSU6JSV6JSW6JSY6JSZ6JSb6JSc6JSd6JSe6JSg6JSiXCIsOCxcIuiUrVwiLDksXCLolL5cIiw0LFwi6JWE6JWF6JWG6JWH6JWLXCIsMTBdLFtcImNhODBcIixcIuiVl+iVmOiVmuiVm+iVnOiVneiVn1wiLDQsXCLolaXolabolafolalcIiw4LFwi6JWz6JW16JW26JW36JW46JW86JW96JW/6JaA6JaB55yB55ub5Ymp6IOc5Zyj5biI5aSx54uu5pa95rm/6K+X5bC46Jmx5Y2B55+z5ou+5pe25LuA6aOf6JqA5a6e6K+G5Y+y55+i5L2/5bGO6am25aeL5byP56S65aOr5LiW5p+/5LqL5out6KqT6YCd5Yq/5piv5Zec5Zms6YCC5LuV5L6N6YeK6aWw5rCP5biC5oGD5a6k6KeG6K+V5pS25omL6aaW5a6I5a+/5o6I5ZSu5Y+X55im5YW96JSs5p6i5qKz5q6K5oqS6L6T5Y+U6IiS5reR55aP5Lmm6LWO5a2w54af6Jav5pqR5puZ572y6JyA6buN6byg5bGe5pyv6L+w5qCR5p2f5oiN56uW5aKF5bq25pWw5ryxXCJdLFtcImNiNDBcIixcIuiWguiWg+iWhuiWiFwiLDYsXCLolpBcIiwxMCxcIuiWnVwiLDYsXCLolqXolqbolqfolqnolqvolqzolq3olrFcIiw1LFwi6Ja46Ja6XCIsNixcIuiXglwiLDYsXCLol4pcIiw0LFwi6JeR6JeSXCJdLFtcImNiODBcIixcIuiXlOiXllwiLDUsXCLol51cIiw2LFwi6Jel6Jem6Jen6Jeo6JeqXCIsMTQsXCLmgZXliLfogI3mkZToobDnlKnluIXmoJPmi7TpnJzlj4zniL3osIHmsLTnnaHnqI7lkK7nnqzpobroiJzor7TnoZXmnJTng4Hmlq/mkpXlmLbmgJ3np4Hlj7jkuJ3mrbvogoblr7rll6Plm5vkvLrkvLzppbLlt7Pmnb7ogLjmgILpooLpgIHlrovorrzor7XmkJzoiZjmk57ll73oi4/phaXkv5fntKDpgJ/nsp/lg7PloZHmuq/lrr/or4nogoPphbjokpznrpfomb3pmovpmo/nu6Xpq5Pnoo7lsoHnqZfpgYLpmqfnpZ/lrZnmjZ/nrIvok5Hmoq3llIbnvKnnkJDntKLplIHmiYDloYzku5blroPlpbnloZRcIl0sW1wiY2M0MFwiLFwi6Je56Je66Je86Je96Je+6JiAXCIsNCxcIuiYhlwiLDEwLFwi6JiS6JiT6JiU6JiV6JiXXCIsMTUsXCLomKjomKpcIiwxMyxcIuiYueiYuuiYu+iYveiYvuiYv+iZgFwiXSxbXCJjYzgwXCIsXCLomYFcIiwxMSxcIuiZkuiZk+iZlVwiLDQsXCLomZvomZzomZ3omZ/omaDomaHomaNcIiw3LFwi542t5oye6LmL6LiP6IOO6IuU5oqs5Y+w5rOw6YWe5aSq5oCB5rGw5Z2N5pGK6LSq55ir5rup5Z2b5qqA55ew5r2t6LCt6LCI5Z2m5q+v6KKS56Kz5o6i5Y+554Kt5rGk5aGY5pCq5aCC5qOg6Iab5ZSQ57OW5YCY6Lq65reM6Laf54Or5o6P5rab5ruU57um6JCE5qGD6YCD5reY6Zm26K6o5aWX54m56Jek6IW+55a86KqK5qKv5YmU6Lii6ZSR5o+Q6aKY6LmE5ZW85L2T5pu/5ZqP5oOV5raV5YmD5bGJ5aSp5re75aGr55Sw55Sc5oGs6IiU6IWG5oyR5p2h6L+i55y66Lez6LS06ZOB5biW5Y6F5ZCs54ODXCJdLFtcImNkNDBcIixcIuiZreiZr+iZsOiZslwiLDYsXCLomoNcIiw2LFwi6JqOXCIsNCxcIuialOiallwiLDUsXCLomp5cIiw0LFwi6Jql6Jqm6Jqr6Jqt6Jqu6Jqy6Jqz6Jq36Jq46Jq56Jq7XCIsNCxcIuibgeibguibg+ibheibiOibjOibjeibkuibk+ibleibluibl+ibmuibnFwiXSxbXCJjZDgwXCIsXCLom53om6Dom6Hom6Lom6Pom6Xom6bom6fom6jom6rom6vom6zom6/om7Xom7bom7fom7rom7vom7zom73om7/onIHonITonIXonIbonIvonIzonI7onI/onJDonJHonJTonJbmsYDlu7flgZzkuq3luq3mjLroiYfpgJrmoZDpha7nnrPlkIzpk5zlvaTnq6XmobbmjYXnrZLnu5/nl5vlgbfmipXlpLTpgI/lh7jnp4PnqoHlm77lvpLpgJTmtoLlsaDlnJ/lkJDlhZTmuY3lm6LmjqjpopPohb/onJXopKrpgIDlkJ7lsa/oh4Dmi5bmiZjohLHpuLXpmYDpqa7pqbzmpK3lpqXmi5PllL7mjJblk4fom5nmtLzlqIPnk6boopzmrarlpJbosYzlvK/mub7njqnpob3kuLjng7flroznopfmjL3mmZrnmpbmg4vlrpvlqYnkuIfohZXmsarnjovkuqHmnonnvZHlvoDml7rmnJvlv5jlpoTlqIFcIl0sW1wiY2U0MFwiLFwi6JyZ6Jyb6Jyd6Jyf6Jyg6Jyk6Jym6Jyn6Jyo6Jyq6Jyr6Jys6Jyt6Jyv6Jyw6Jyy6Jyz6Jy16Jy26Jy46Jy56Jy66Jy86Jy96J2AXCIsNixcIuidiuidi+idjeidj+idkOidkeidkuidlOidleidluidmOidmlwiLDUsXCLonaHonaLonaZcIiw3LFwi6J2v6J2x6J2y6J2z6J21XCJdLFtcImNlODBcIixcIuidt+iduOidueiduuidv+iegOiegeiehOiehuieh+ieieieiuiejOiejlwiLDQsXCLonpTonpXonpbonphcIiw2LFwi6J6gXCIsNCxcIuW3jeW+ruWNsemfpui/neahheWbtOWUr+aDn+S4uua9jee7tOiLh+iQjuWnlOS8n+S8quWwvue6rOacquiUmuWRs+eVj+iDg+WWgumtj+S9jea4reiwk+WwieaFsOWNq+eYn+a4qeiaiuaWh+mXu+e6ueWQu+eos+e0iumXruWXoee/geeTruaMneicl+a2oeeqneaIkeaWoeWNp+aPoeayg+W3q+WRnOmSqOS5jOaxoeivrOWxi+aXoOiKnOaip+WQvuWQtOavi+atpuS6lOaNguWNiOiInuS8jeS+ruWdnuaIiumbvuaZpOeJqeWLv+WKoeaCn+ivr+aYlOeGmeaekOilv+ehkuefveaZsOWYu+WQuOmUoeeJulwiXSxbXCJjZjQwXCIsXCLonqXonqbonqfonqnonqronq7onrDonrHonrLonrTonrbonrfonrjonrnonrvonrzonr7onr/on4FcIiw0LFwi6J+H6J+I6J+J6J+MXCIsNCxcIuiflFwiLDYsXCLon5zon53on57on5/on6Hon6Lon6Pon6Ton6bon6fon6jon6non6von6zon63on69cIiw5XSxbXCJjZjgwXCIsXCLon7ron7von7zon73on7/ooIDooIHooILooIRcIiw1LFwi6KCLXCIsNyxcIuiglOigl+igmOigmeigmuignFwiLDQsXCLooKPnqIDmga/luIzmgonohp3lpJXmg5znhoTng6/muqrmsZDnioDmqoTooq3luK3kuaDlqrPllpzpk6PmtJfns7vpmpnmiI/nu4bnno7omb7ljKPpnJ7ovpbmmofls6HkvqDni63kuIvljqblpI/lkJPmjoDplKjlhYjku5npspznuqTlkrjotKTooZToiLfpl7Lmto7lvKblq4zmmL7pmannjrDnjK7ljr/ohbrppoXnvqHlrqrpmbfpmZDnur/nm7jljqLplbbpppnnrrHopYTmuZjkuaHnv5TnpaXor6bmg7Plk43kuqvpobnlt7fmqaHlg4/lkJHosaHokKfnoZ3pnITliYrlk67lmqPplIDmtojlrrXmt4bmmZNcIl0sW1wiZDA0MFwiLFwi6KCkXCIsMTMsXCLooLNcIiw1LFwi6KC66KC76KC96KC+6KC/6KGB6KGC6KGD6KGGXCIsNSxcIuihjlwiLDUsXCLooZXooZbooZjooZpcIiw2LFwi6KGm6KGn6KGq6KGt6KGv6KGx6KGz6KG06KG16KG26KG46KG56KG6XCJdLFtcImQwODBcIixcIuihu+ihvOiigOiig+iihuiih+iiieiiiuiijOiijuiij+iikOiikeiik+iilOiileiil1wiLDQsXCLoop1cIiw0LFwi6KKj6KKlXCIsNSxcIuWwj+WtneagoeiCluWVuOeskeaViOallOS6m+ath+idjumei+WNj+aMn+aQuumCquaWnOiDgeiwkOWGmeaisOWNuOifueaHiOazhOazu+iwouWxkeiWquiKr+mUjOaso+i+m+aWsOW/u+W/g+S/oeihheaYn+iFpeeMqeaDuuWFtOWIkeWei+W9oumCouihjOmGkuW5uOadj+aAp+Wnk+WFhOWHtuiDuOWMiOaxuembhOeGiuS8keS/rue+nuacveWXhemUiOengOiilue7o+Win+aIjOmcgOiZmuWYmOmhu+W+kOiuuOiThOmFl+WPmeaXreW6j+eVnOaBpOe1ruWpv+e7que7rei9qeWWp+Wuo+aCrOaXi+eOhFwiXSxbXCJkMTQwXCIsXCLooqzooq7ooq/oorDoorJcIiw0LFwi6KK46KK56KK66KK76KK96KK+6KK/6KOA6KOD6KOE6KOH6KOI6KOK6KOL6KOM6KON6KOP6KOQ6KOR6KOT6KOW6KOX6KOaXCIsNCxcIuijoOijoeijpuijp+ijqVwiLDYsXCLoo7Loo7Xoo7boo7foo7roo7voo73oo7/opIDopIHopINcIiw1XSxbXCJkMTgwXCIsXCLopInopItcIiw0LFwi6KSR6KSUXCIsNCxcIuiknFwiLDQsXCLopKLopKPopKTopKbopKfopKjopKnopKzopK3opK7opK/opLHopLLopLPopLXopLfpgInnmaPnnKnnu5rpnbTolpvlrabnqbTpm6rooYDli4vnho/lvqrml6zor6Llr7vpqa/lt6HmronmsZvorq3orq/pgIrov4XljovmirzpuKbpuK3lkYDkuKvoir3niZnompzltJbooZnmtq/pm4Xlk5HkuprorrbnhInlkr3pmInng5/mt7nnm5DkuKXnoJTonJLlsqnlu7boqIDpopzpmI7ngo7msr/lpYTmjqnnnLzooY3mvJToibPloLDnh5XljoznoJrpm4HllIHlvabnhLDlrrTosJrpqozmroPlpK7puK/np6fmnajmiazkva/nlqHnvormtIvpmLPmsKfku7Dnl5LlhbvmoLfmvL7pgoDohbDlppbnkbZcIl0sW1wiZDI0MFwiLFwi6KS4XCIsOCxcIuilguilg+ilhVwiLDI0LFwi6KWgXCIsNSxcIuilp1wiLDE5LFwi6KW8XCJdLFtcImQyODBcIixcIuilveilvuimgOimguimhOimheimh1wiLDI2LFwi5pGH5bCn6YGl56qR6LCj5aea5ZKs6IiA6I2v6KaB6ICA5qSw5ZmO6IC254i36YeO5Ya25Lmf6aG15o6W5Lia5Y+25puz6IWL5aSc5ray5LiA5aO55Yy75o+W6ZOx5L6d5LyK6KGj6aKQ5aS36YGX56e75Luq6IOw55aR5rKC5a6c5aeo5b2d5qSF6JqB5YCa5bey5LmZ55+j5Lul6Im65oqR5piT6YKR5bG55Lq/5b256IeG6YC46IKE55ar5Lqm6KOU5oSP5q+F5b+G5LmJ55uK5rqi6K+j6K6u6LCK6K+R5byC57+857+M57uO6Iy16I2r5Zug5q636Z+z6Zi05ae75ZCf6ZO25rer5a+F6aWu5bC55byV6ZqQXCJdLFtcImQzNDBcIixcIuimolwiLDMwLFwi6KeD6KeN6KeT6KeU6KeV6KeX6KeY6KeZ6Keb6Ked6Kef6Keg6Keh6Kei6Kek6Ken6Keo6Kep6Keq6Kes6Ket6Keu6Kew6Kex6Key6Ke0XCIsNl0sW1wiZDM4MFwiLFwi6Ke7XCIsNCxcIuiogVwiLDUsXCLoqIhcIiwyMSxcIuWNsOiLseaoseWptOm5sOW6lOe8qOiOueiQpOiQpeiNp+idh+i/jui1ouebiOW9semiluehrOaYoOWTn+aLpeS9o+iHg+eXiOW6uOmbjei4iuibueWSj+azs+a2jOawuOaBv+WLh+eUqOW5veS8mOaCoOW/p+WwpOeUsemCrumTgOeKueayuea4uOmFieacieWPi+WPs+S9kemHieivseWPiOW5vOi/gua3pOS6juebguamhuiZnuaEmuiIhuS9meS/numAvumxvOaEiea4nea4lOmaheS6iOWosembqOS4juWxv+emueWuh+ivree+veeOieWfn+iKi+mDgeWQgemBh+WWu+WzquW+oeaEiOassueLseiCsuiqiVwiXSxbXCJkNDQwXCIsXCLoqJ5cIiwzMSxcIuiov1wiLDgsXCLoqYlcIiwyMV0sW1wiZDQ4MFwiLFwi6KmfXCIsMjUsXCLoqbpcIiw2LFwi5rW05a+T6KOV6aKE6LGr6amt6biz5riK5Yak5YWD5Z6j6KKB5Y6f5o+06L6V5Zut5ZGY5ZyG54y/5rqQ57yY6L+c6IuR5oS/5oCo6Zmi5puw57qm6LaK6LeD6ZKl5bKz57Kk5pyI5oKm6ZiF6ICY5LqR6YOn5YyA6Zmo5YWB6L+Q6JW06YWd5pmV6Z+15a2V5Yyd56C45p2C5qC95ZOJ54G+5a6w6L295YaN5Zyo5ZKx5pSS5pqC6LWe6LWD6ISP6JGs6YGt57Of5Ye/6Je75p6j5pep5r6h6Jqk6LqB5Zmq6YCg55qC54G254el6LSj5oup5YiZ5rO96LS85oCO5aKe5oaO5pu+6LWg5omO5Zaz5rij5pyt6L2nXCJdLFtcImQ1NDBcIixcIuiqgVwiLDcsXCLoqotcIiw3LFwi6KqUXCIsNDZdLFtcImQ1ODBcIixcIuirg1wiLDMyLFwi6ZOh6Ze455yo5qCF5qao5ZKL5LmN54K46K+I5pGY5paL5a6F56qE5YC65a+o55675q+h6Km557KY5rK+55uP5pap6L6X5bSt5bGV6Ji45qCI5Y2g5oiY56uZ5rmb57u95qif56ug5b2w5ryz5byg5o6M5rao5p2W5LiI5biQ6LSm5LuX6IOA55i06Zqc5oub5pit5om+5rK86LW154Wn572p5YWG6IKH5Y+s6YGu5oqY5ZOy6Juw6L6Z6ICF6ZSX6JSX6L+Z5rWZ54+N5paf55yf55SE56Cn6Ie76LSe6ZKI5L6m5p6V55a56K+K6ZyH5oyv6ZWH6Zi16JK45oyj552B5b6B54uw5LqJ5oCU5pW05ouv5q2j5pS/XCJdLFtcImQ2NDBcIixcIuirpFwiLDM0LFwi6KyIXCIsMjddLFtcImQ2ODBcIixcIuispOispeisp1wiLDMwLFwi5bin55eH6YOR6K+B6Iqd5p6d5pSv5ZCx6JyY55+l6IKi6ISC5rGB5LmL57uH6IGM55u05qSN5q6W5omn5YC85L6E5Z2A5oyH5q2i6La+5Y+q5peo57q45b+X5oya5o636Iez6Ie0572u5bic5bOZ5Yi25pm656ep56ia6LSo54KZ55eU5rue5rK756qS5Lit55uF5b+g6ZKf6KG357uI56eN6IK/6YeN5Luy5LyX6Iif5ZGo5bee5rSy6K+M57Kl6L206IKY5bia5ZKS55qx5a6Z5pi86aqk54+g5qCq6Jub5pyx54yq6K+46K+b6YCQ56u554Ob54Wu5ouE556p5Zix5Li76JGX5p+x5Yqp6JuA6LSu6ZO4562RXCJdLFtcImQ3NDBcIixcIuithlwiLDMxLFwi6K2nXCIsNCxcIuitrVwiLDI1XSxbXCJkNzgwXCIsXCLorodcIiwyNCxcIuiurOiuseiuu+ivh+ivkOivquiwieiwnuS9j+azqOelnempu+aKk+eIquaLveS4k+eglui9rOaSsOi1muevhuahqeW6hOijheWmhuaSnuWjrueKtuakjumUpei/vei1mOWdoOe8gOiwhuWHhuaNieaLmeWNk+ahjOeQouiMgemFjOWVhOedgOeBvOa1iuWFueWSqOi1hOWnv+a7i+a3hOWtnOe0q+S7lOexvea7k+WtkOiHqua4jeWtl+msg+ajlei4quWul+e7vOaAu+e6temCuei1sOWlj+aPjeenn+i2s+WNkuaXj+elluivhemYu+e7hOmSu+e6guWYtOmGieacgOe9quWwiumBteaYqOW3puS9kOafnuWBmuS9nOWdkOW6p1wiXSxbXCJkODQwXCIsXCLosLhcIiw4LFwi6LGC6LGD6LGE6LGF6LGI6LGK6LGL6LGNXCIsNyxcIuixluixl+ixmOixmeixm1wiLDUsXCLosaNcIiw2LFwi6LGsXCIsNixcIuixtOixteixtuixt+ixu1wiLDYsXCLosoPosoTosobosodcIl0sW1wiZDg4MFwiLFwi6LKI6LKL6LKNXCIsNixcIuiyleiyluiyl+iymVwiLDIwLFwi5LqN5LiM5YWA5LiQ5bu/5Y2F5LiV5LqY5Lie6ayy5a2s5Zmp5Lio56a65Li/5YyV5LmH5aSt54i75Y2u5rCQ5Zuf6IOk6aaX5q+T552+6byX5Li25Lqf6byQ5Lmc5Lmp5LqT6IqI5a2b5ZWs5ZiP5LuE5Y6N5Y6d5Y6j5Y6l5Y6u6Z2l6LWd5Yya5Y+15Yym5Yyu5Yy+6LWc5Y2m5Y2j5YiC5YiI5YiO5Yit5Yiz5Yi/5YmA5YmM5Yme5Ymh5Ymc6JKv5Ym95YqC5YqB5YqQ5YqT5YaC572U5Lq75LuD5LuJ5LuC5Luo5Luh5Lur5Lue5Lyb5Luz5Lyi5L2k5Lu15Lyl5Lyn5LyJ5Lyr5L2e5L2n5pS45L2a5L2dXCJdLFtcImQ5NDBcIixcIuiyrlwiLDYyXSxbXCJkOTgwXCIsXCLos61cIiwzMixcIuS9n+S9l+S8suS8veS9tuS9tOS+keS+ieS+g+S+j+S9vuS9u+S+quS9vOS+rOS+lOS/puS/qOS/quS/heS/muS/o+S/nOS/keS/n+S/uOWAqeWBjOS/s+WArOWAj+WAruWAreS/vuWAnOWAjOWApeWAqOWBvuWBg+WBleWBiOWBjuWBrOWBu+WCpeWCp+WCqeWCuuWDluWEhuWDreWDrOWDpuWDruWEh+WEi+S7neawveS9mOS9peS/jum+oOaxhuextOWFruW3vem7iemmmOWGgeWklOWLueWMjeioh+WMkOWHq+WkmeWFleS6oOWFluS6s+ihruiipOS6teiElOijkuemgOWstOigg+e+uOWGq+WGseWGveWGvFwiXSxbXCJkYTQwXCIsXCLotI5cIiwxNCxcIui0oOi1kei1kui1l+i1n+i1pei1qOi1qei1qui1rOi1rui1r+i1sei1sui1uFwiLDgsXCLotoLotoPotobotofotojotonotoxcIiw0LFwi6LaS6LaT6LaVXCIsOSxcIui2oOi2oVwiXSxbXCJkYTgwXCIsXCLotqLotqRcIiwxMixcIui2sui2tui2t+i2uei2u+i2vei3gOi3gei3gui3hei3h+i3iOi3iei3iui3jei3kOi3kui3k+i3lOWHh+WGluWGouWGpeiuoOiupuiup+iuquiutOiuteiut+ivguivg+ivi+ivj+ivjuivkuivk+ivlOivluivmOivmeivnOivn+ivoOivpOivqOivqeivruivsOivs+ivtuivueivvOivv+iwgOiwguiwhOiwh+iwjOiwj+iwkeiwkuiwlOiwleiwluiwmeiwm+iwmOiwneiwn+iwoOiwoeiwpeiwp+iwquiwq+iwruiwr+iwsuiws+iwteiwtuWNqeWNuumYnemYoumYoemYsemYqumYvemYvOmZgumZiemZlOmZn+mZp+mZrOmZsumZtOmaiOmajemal+masOmCl+mCm+mCnemCmemCrOmCoemCtOmCs+mCtumCulwiXSxbXCJkYjQwXCIsXCLot5Xot5jot5not5zot6Dot6Hot6Lot6Xot6bot6fot6not63ot67ot7Dot7Hot7Lot7Tot7bot7zot75cIiw2LFwi6LiG6LiH6LiI6LiL6LiN6LiO6LiQ6LiR6LiS6LiT6LiVXCIsNyxcIui4oOi4oei4pFwiLDQsXCLouKvouK3ouLDouLLouLPouLTouLbouLfouLjouLvouLzouL5cIl0sW1wiZGI4MFwiLFwi6Li/6LmD6LmF6LmG6LmMXCIsNCxcIui5k1wiLDUsXCLouZpcIiwxMSxcIui5p+i5qOi5qui5q+i5rui5semCuOmCsOmDj+mDhemCvumDkOmDhOmDh+mDk+mDpumDoumDnOmDl+mDm+mDq+mDr+mDvumEhOmEoumEnumEo+mEsemEr+mEuemFg+mFhuWIjeWlguWKouWKrOWKreWKvuWTv+WLkOWLluWLsOWPn+eHruefjeW7tOWHteWHvOmsr+WOtuW8geeVmuW3r+WdjOWeqeWeoeWhvuWivOWjheWjkeWcqeWcrOWcquWcs+WcueWcruWcr+WdnOWcu+WdguWdqeWeheWdq+WehuWdvOWdu+WdqOWdreWdtuWds+WereWepOWejOWesuWfj+Wep+WetOWek+WeoOWfleWfmOWfmuWfmeWfkuWeuOWftOWfr+WfuOWfpOWfnVwiXSxbXCJkYzQwXCIsXCLoubPoubXoubdcIiw0LFwi6Lm96Lm+6LqA6LqC6LqD6LqE6LqG6LqIXCIsNixcIui6kei6kui6k+i6lVwiLDYsXCLoup3oup9cIiwxMSxcIui6rei6rui6sOi6sei6s1wiLDYsXCLourtcIiw3XSxbXCJkYzgwXCIsXCLou4NcIiwxMCxcIui7j1wiLDIxLFwi5aCL5aCN5Z+95Z+t5aCA5aCe5aCZ5aGE5aCg5aGl5aGs5aKB5aKJ5aKa5aKA6aao6byZ5oe/6Im56Im96Im/6IqP6IqK6Iqo6IqE6IqO6IqR6IqX6IqZ6Iqr6Iq46Iq+6Iqw6IuI6IuK6Iuj6IqY6Iq36Iqu6IuL6IuM6IuB6Iqp6Iq06Iqh6Iqq6Iqf6IuE6IuO6Iqk6Iuh6IyJ6Iu36Iuk6IyP6IyH6Iuc6Iu06IuS6IuY6IyM6Iu76IuT6IyR6Iya6IyG6IyU6IyV6Iug6IuV6Iyc6I2R6I2b6I2c6IyI6I6S6Iy86Iy06Iyx6I6b6I2e6Iyv6I2P6I2H6I2D6I2f6I2A6IyX6I2g6Iyt6Iy66Iyz6I2m6I2lXCJdLFtcImRkNDBcIixcIui7pVwiLDYyXSxbXCJkZDgwXCIsXCLovKRcIiwzMixcIuiNqOiMm+iNqeiNrOiNquiNreiNruiOsOiNuOiOs+iOtOiOoOiOquiOk+iOnOiOheiNvOiOtuiOqeiNveiOuOiNu+iOmOiOnuiOqOiOuuiOvOiPgeiQgeiPpeiPmOWgh+iQmOiQi+iPneiPveiPluiQnOiQuOiQkeiQhuiPlOiPn+iQj+iQg+iPuOiPueiPquiPheiPgOiQpuiPsOiPoeiRnOiRkeiRmuiRmeiRs+iSh+iSiOiRuuiSieiRuOiQvOiRhuiRqeiRtuiSjOiSjuiQseiRreiTgeiTjeiTkOiTpuiSveiTk+iTiuiSv+iSuuiToOiSoeiSueiStOiSl+iTpeiTo+iUjOeUjeiUuOiTsOiUueiUn+iUulwiXSxbXCJkZTQwXCIsXCLovYVcIiwzMixcIui9qui+gOi+jOi+kui+nei+oOi+oei+oui+pOi+pei+pui+p+i+qui+rOi+rei+rui+r+i+sui+s+i+tOi+tei+t+i+uOi+uui+u+i+vOi+v+i/gOi/g+i/hlwiXSxbXCJkZTgwXCIsXCLov4lcIiw0LFwi6L+P6L+S6L+W6L+X6L+a6L+g6L+h6L+j6L+n6L+s6L+v6L+x6L+y6L+06L+16L+26L+66L+76L+86L++6L+/6YCH6YCI6YCM6YCO6YCT6YCV6YCY6JWW6JS76JO/6JO86JWZ6JWI6JWo6JWk6JWe6JW6556i6JWD6JWy6JW76Jak6Jao6JaH6JaP6JW56Jau6Jac6JaF6Ja56Ja36Jaw6JeT6JeB6Jec6Je/6Jin6JiF6Jip6JiW6Ji85bu+5byI5aS85aWB6IC35aWV5aWa5aWY5YyP5bCi5bCl5bCs5bC05omM5omq5oqf5oq75ouK5oua5ouX5ouu5oyi5ou25oy55o2L5o2D5o6t5o+25o2x5o265o6O5o605o2t5o6s5o6K5o2p5o6u5o685o+y5o+45o+g5o+/5o+E5o+e5o+O5pGS5o+G5o6+5pGF5pGB5pCL5pCb5pCg5pCM5pCm5pCh5pGe5pKE5pGt5pKWXCJdLFtcImRmNDBcIixcIumAmemAnOmAo+mApOmApemAp1wiLDUsXCLpgLBcIiw0LFwi6YC36YC56YC66YC96YC/6YGA6YGD6YGF6YGG6YGIXCIsNCxcIumBjumBlOmBlemBlumBmemBmumBnFwiLDUsXCLpgaTpgabpgafpganpgarpgavpgazpga9cIiw0LFwi6YG2XCIsNixcIumBvumCgVwiXSxbXCJkZjgwXCIsXCLpgoTpgoXpgobpgofpgonpgorpgoxcIiw0LFwi6YKS6YKU6YKW6YKY6YKa6YKc6YKe6YKf6YKg6YKk6YKl6YKn6YKo6YKp6YKr6YKt6YKy6YK36YK86YK96YK/6YOA5pG65pK35pK45pKZ5pK65pOA5pOQ5pOX5pOk5pOi5pSJ5pSl5pSu5byL5b+S55SZ5byR5Y2f5Y+x5Y+95Y+p5Y+o5Y+75ZCS5ZCW5ZCG5ZGL5ZGS5ZGT5ZGU5ZGW5ZGD5ZCh5ZGX5ZGZ5ZCj5ZCy5ZKC5ZKU5ZG35ZGx5ZGk5ZKa5ZKb5ZKE5ZG25ZGm5ZKd5ZOQ5ZKt5ZOC5ZK05ZOS5ZKn5ZKm5ZOT5ZOU5ZGy5ZKj5ZOV5ZK75ZK/5ZOM5ZOZ5ZOa5ZOc5ZKp5ZKq5ZKk5ZOd5ZOP5ZOe5ZSb5ZOn5ZSg5ZO95ZSU5ZOz5ZSi5ZSj5ZSP5ZSR5ZSn5ZSq5ZWn5ZaP5Za15ZWJ5ZWt5ZWB5ZWV5ZS/5ZWQ5ZS8XCJdLFtcImUwNDBcIixcIumDgumDg+mDhumDiOmDiemDi+mDjOmDjemDkumDlOmDlemDlumDmOmDmemDmumDnumDn+mDoOmDo+mDpOmDpemDqemDqumDrOmDrumDsOmDsemDsumDs+mDtemDtumDt+mDuemDuumDu+mDvOmDv+mEgOmEgemEg+mEhVwiLDE5LFwi6YSa6YSb6YScXCJdLFtcImUwODBcIixcIumEnemEn+mEoOmEoemEpFwiLDEwLFwi6YSw6YSyXCIsNixcIumEulwiLDgsXCLphYTllLfllZbllbXllbbllbfllLPllLDllZzllovll5LlloPllrHllrnllojlloHllp/llb7ll5bllpHllbvll5/llr3llr7llpTllpnll6rll7fll4nlmJ/ll5Hll6vll6zll5Tll6bll53ll4Tll6/ll6Xll7Lll7Pll4zll43ll6jll7Xll6TovpTlmJ7lmIjlmIzlmIHlmKTlmKPll77lmIDlmKflmK3lmZjlmLnlmZflmKzlmY3lmaLlmZnlmZzlmYzlmZTlmoblmaTlmbHlmavlmbvlmbzlmoXlmpPlmq/lm5Tlm5flm53lm6Hlm7Xlm6vlm7nlm7/lnITlnIrlnInlnJzluI/luJnluJTluJHluLHluLvluLxcIl0sW1wiZTE0MFwiLFwi6YWF6YWH6YWI6YWR6YWT6YWU6YWV6YWW6YWY6YWZ6YWb6YWc6YWf6YWg6YWm6YWn6YWo6YWr6YWt6YWz6YW66YW76YW86YaAXCIsNCxcIumGhumGiOmGiumGjumGj+mGk1wiLDYsXCLphpxcIiw1LFwi6YakXCIsNSxcIumGq+mGrOmGsOmGsemGsumGs+mGtumGt+mGuOmGuemGu1wiXSxbXCJlMTgwXCIsXCLphrxcIiwxMCxcIumHiOmHi+mHkOmHklwiLDksXCLph51cIiw4LFwi5bi35bmE5bmU5bmb5bme5bmh5bKM5bG65bKN5bKQ5bKW5bKI5bKY5bKZ5bKR5bKa5bKc5bK15bKi5bK95bKs5bKr5bKx5bKj5bOB5bK35bOE5bOS5bOk5bOL5bOl5bSC5bSD5bSn5bSm5bSu5bSk5bSe5bSG5bSb5bWY5bS+5bS05bS95bWs5bWb5bWv5bWd5bWr5bWL5bWK5bWp5bW05baC5baZ5bad6LGz5ba35beF5b2z5b235b6C5b6H5b6J5b6M5b6V5b6Z5b6c5b6o5b6t5b615b686KGi5b2h54qt54qw54q054q354q454uD54uB54uO54uN54uS54uo54uv54up54uy54u054u354yB54uz54yD54u6XCJdLFtcImUyNDBcIixcIumHplwiLDYyXSxbXCJlMjgwXCIsXCLpiKVcIiwzMixcIueLu+eMl+eMk+eMoeeMiueMnueMneeMleeMoueMueeMpeeMrOeMuOeMseeNkOeNjeeNl+eNoOeNrOeNr+eNvuiIm+Wkpemjp+WkpOWkgumlo+mlp1wiLDUsXCLppbTppbfppb3ppoDppoTppofpporppo3pppDpppHpppPpppTpppXluoDlupHluovlupbluqXluqDlurnlurXlur7lurPotZPlu5Llu5Hlu5vlu6jlu6rohrrlv4Tlv4nlv5blv4/mgIPlv67mgITlv6Hlv6Tlv77mgIXmgIblv6rlv63lv7jmgJnmgLXmgKbmgJvmgI/mgI3mgKnmgKvmgIrmgL/mgKHmgbjmgbnmgbvmgbrmgYJcIl0sW1wiZTM0MFwiLFwi6YmGXCIsNDUsXCLpibVcIiwxNl0sW1wiZTM4MFwiLFwi6YqGXCIsNyxcIumKj1wiLDI0LFwi5oGq5oG95oKW5oKa5oKt5oKd5oKD5oKS5oKM5oKb5oOs5oK75oKx5oOd5oOY5oOG5oOa5oK05oSg5oSm5oSV5oSj5oO05oSA5oSO5oSr5oWK5oW15oas5oaU5oan5oa35oeU5oe15b+d6Zqz6Zep6Zer6Zex6Zez6Ze16Ze26Ze86Ze+6ZiD6ZiE6ZiG6ZiI6ZiK6ZiL6ZiM6ZiN6ZiP6ZiS6ZiV6ZiW6ZiX6ZiZ6Zia5Lis54i/5oiV5rC15rGU5rGc5rGK5rKj5rKF5rKQ5rKU5rKM5rGo5rGp5rG05rG25rKG5rKp5rOQ5rOU5rKt5rO35rO45rOx5rOX5rKy5rOg5rOW5rO65rOr5rOu5rKx5rOT5rOv5rO+XCJdLFtcImU0NDBcIixcIumKqFwiLDUsXCLpiq9cIiwyNCxcIumLiVwiLDMxXSxbXCJlNDgwXCIsXCLpi6lcIiwzMixcIua0uea0p+a0jOa1g+a1iOa0h+a0hOa0mea0jua0q+a1jea0rua0tea0mua1j+a1kua1lOa0s+a2kea1r+a2nua2oOa1nua2k+a2lOa1nOa1oOa1vOa1o+a4mua3h+a3hea3nua4jua2v+a3oOa4kea3pua3nea3mea4lua2q+a4jOa2rua4q+a5rua5jua5q+a6sua5n+a6hua5k+a5lOa4sua4pea5hOa7n+a6sea6mOa7oOa8rea7oua6pea6p+a6vea6u+a6t+a7l+a6tOa7j+a6j+a7gua6n+a9oua9hua9h+a8pOa8lea7uea8r+a8tua9i+a9tOa8qua8iea8qea+iea+jea+jOa9uOa9sua9vOa9uua/kVwiXSxbXCJlNTQwXCIsXCLpjIpcIiw1MSxcIumMv1wiLDEwXSxbXCJlNTgwXCIsXCLpjYpcIiwzMSxcIumNq+a/iea+p+a+uea+tua/gua/oea/rua/nua/oOa/r+eAmueAo+eAm+eAueeAteeBj+eBnuWugOWuhOWuleWuk+WupeWuuOeUr+mqnuaQtOWvpOWvruiksOWvsOi5h+ish+i+tui/k+i/lei/pei/rui/pOi/qei/pui/s+i/qOmAhemAhOmAi+mApumAkemAjemAlumAoemAtemAtumAremAr+mBhOmBkemBkumBkOmBqOmBmOmBoumBm+aauemBtOmBvemCgumCiOmCg+mCi+W9kOW9l+W9luW9mOWwu+WSq+WxkOWxmeWtseWxo+Wxpue+vOW8quW8qeW8reiJtOW8vOmsu+WxruWmgeWmg+WmjeWmqeWmquWmo1wiXSxbXCJlNjQwXCIsXCLpjaxcIiwzNCxcIumOkFwiLDI3XSxbXCJlNjgwXCIsXCLpjqxcIiwyOSxcIumPi+mPjOmPjeWml+WniuWmq+WmnuWmpOWnkuWmsuWmr+Wnl+WmvuWoheWohuWnneWoiOWno+WnmOWnueWojOWoieWosuWotOWokeWoo+Wok+WpgOWpp+WpiuWpleWovOWpouWpteiDrOWqquWqm+Wpt+WpuuWqvuWrq+WqsuWrkuWrlOWquOWroOWro+WrseWrluWrpuWrmOWrnOWsieWsl+WsluWssuWst+WtgOWwleWwnOWtmuWtpeWts+WtkeWtk+Wtoumptempt+mpuOmpuumpv+mpvemqgOmqgemqhemqiOmqiumqkOmqkumqk+mqlumqmOmqm+mqnOmqnemqn+mqoOmqoumqo+mqpemqp+e6n+e6oee6o+e6pee6qOe6qVwiXSxbXCJlNzQwXCIsXCLpj45cIiw3LFwi6Y+XXCIsNTRdLFtcImU3ODBcIixcIumQjlwiLDMyLFwi57qt57qw57q+57uA57uB57uC57uJ57uL57uM57uQ57uU57uX57ub57ug57uh57uo57ur57uu57uv57ux57uy57yN57u257u657u757u+57yB57yC57yD57yH57yI57yL57yM57yP57yR57yS57yX57yZ57yc57yb57yf57yhXCIsNixcIue8que8q+e8rOe8ree8r1wiLDQsXCLnvLXlubrnlb/lt5vnlL7pgpXnjo7njpHnjq7njqLnjp/nj4/nj4Lnj5HnjrfnjrPnj4Dnj4nnj4jnj6Xnj5npobznkIrnj6nnj6fnj57njrrnj7LnkI/nkKrnkZvnkKbnkKXnkKjnkLDnkK7nkKxcIl0sW1wiZTg0MFwiLFwi6ZCvXCIsMTQsXCLpkL9cIiw0MyxcIumRrOmRremRrumRr1wiXSxbXCJlODgwXCIsXCLpkbBcIiwyMCxcIumSkemSlumSmOmTh+mTj+mTk+mTlOmTmumTpumTu+mUnOmUoOeQm+eQmueRgeeRnOeRl+eRleeRmeeRt+eRreeRvueSnOeSjueSgOeSgeeSh+eSi+eSnueSqOeSqeeSkOeSp+eTkueSuumfqumfq+mfrOadjOadk+adnuadiOadqeaepeaeh+adquads+aemOaep+adteaeqOaenuaereaei+adt+advOafsOagieafmOagiuafqeaesOagjOafmeaeteafmuaes+afneaggOafg+aeuOafouagjuafgeafveagsuags+ahoOahoeahjuahouahhOahpOaig+agneahleahpuahgeahp+ahgOagvuahiuahieagqeaiteaij+ahtOaht+aik+ahq+ajgualruajvOakn+akoOajuVwiXSxbXCJlOTQwXCIsXCLplKfplLPplL3plYPplYjplYvplZXplZrplaDpla7plbTplbXplbdcIiw3LFwi6ZaAXCIsNDJdLFtcImU5ODBcIixcIumWq1wiLDMyLFwi5qSk5qOw5qSL5qSB5qWX5qOj5qSQ5qWx5qS55qWg5qWC5qWd5qaE5qWr5qaA5qaY5qW45qS05qeM5qaH5qaI5qeO5qaJ5qWm5qWj5qW55qab5qan5qa75qar5qat5qeU5qax5qeB5qeK5qef5qaV5qeg5qaN5qe/5qiv5qet5qiX5qiY5qml5qey5qmE5qi+5qqg5qmQ5qmb5qi15qqO5qm55qi95qio5qmY5qm85qqR5qqQ5qqp5qqX5qqr54y3542S5q6B5q6C5q6H5q6E5q6S5q6T5q6N5q6a5q6b5q6h5q6q6L2r6L2t6L2x6L2y6L2z6L216L226L246L236L256L266L286L2+6L6B6L6C6L6E6L6H6L6LXCJdLFtcImVhNDBcIixcIumXjFwiLDI3LFwi6Zes6Ze/6ZiH6ZiT6ZiY6Zib6Zie6Zig6ZijXCIsNixcIumYq+mYrOmYremYr+mYsOmYt+mYuOmYuemYuumYvumZgemZg+mZiumZjumZj+mZkemZkumZk+mZlumZl1wiXSxbXCJlYTgwXCIsXCLpmZjpmZnpmZrpmZzpmZ3pmZ7pmaDpmaPpmaXpmabpmavpma1cIiw0LFwi6Zmz6Zm4XCIsMTIsXCLpmofpmonpmorovo3ovo7ovo/ovpjovprou47miIvmiJfmiJvmiJ/miKLmiKHmiKXmiKTmiKzoh6fnk6/nk7Tnk7/nlI/nlJHnlJPmlLTml67ml6/ml7DmmIrmmJnmnbLmmIPmmJXmmIDngoXmm7fmmJ3mmLTmmLHmmLbmmLXogIbmmZ/mmZTmmYHmmY/mmZbmmaHmmZfmmbfmmoTmmozmmqfmmp3mmr7mm5vmm5zmm6bmm6notLLotLPotLbotLvotL3otYDotYXotYbotYjotYnotYfotY3otZXotZnop4fop4rop4vop4zop47op4/op5Dop5Hnia7nip/niZ3niabnia/nib7nib/nioTniovnio3nio/nipLmjIjmjLLmjrBcIl0sW1wiZWI0MFwiLFwi6ZqM6ZqO6ZqR6ZqS6ZqT6ZqV6ZqW6Zqa6Zqb6ZqdXCIsOSxcIumaqFwiLDcsXCLpmrHpmrLpmrTpmrXpmrfpmrjpmrrpmrvpmr/pm4Lpm4Ppm4jpm4rpm4vpm5Dpm5Hpm5Ppm5Tpm5ZcIiw5LFwi6ZuhXCIsNixcIumbq1wiXSxbXCJlYjgwXCIsXCLpm6zpm63pm67pm7Dpm7Hpm7Lpm7Tpm7Xpm7jpm7rpm7vpm7zpm73pm7/pnILpnIPpnIXpnIrpnIvpnIzpnJDpnJHpnJLpnJTpnJXpnJdcIiw0LFwi6Zyd6Zyf6Zyg5pC/5pOY6ICE5q+q5q+z5q+95q+15q+55rCF5rCH5rCG5rCN5rCV5rCY5rCZ5rCa5rCh5rCp5rCk5rCq5rCy5pS15pWV5pWr54mN54mS54mW54iw6Jmi5YiW6IKf6IKc6IKT6IK85pyK6IK96IKx6IKr6IKt6IK06IK36IOn6IOo6IOp6IOq6IOb6IOC6IOE6IOZ6ION6IOX5pyQ6IOd6IOr6IOx6IO06IOt6ISN6ISO6IOy6IO85pyV6ISS6LGa6IS26ISe6ISs6ISY6ISy6IWI6IWM6IWT6IW06IWZ6IWa6IWx6IWg6IWp6IW86IW96IWt6IWn5aGN5aq16IaI6IaC6IaR5ruV6Iaj6Iaq6IeM5pym6IeK6Ia7XCJdLFtcImVjNDBcIixcIumcoVwiLDgsXCLpnKvpnKzpnK7pnK/pnLHpnLNcIiw0LFwi6Zy66Zy76Zy86Zy96Zy/XCIsMTgsXCLpnZTpnZXpnZfpnZjpnZrpnZzpnZ3pnZ/pnaPpnaTpnabpnafpnajpnapcIiw3XSxbXCJlYzgwXCIsXCLpnbLpnbXpnbdcIiw0LFwi6Z29XCIsNyxcIumehlwiLDQsXCLpnozpno7pno/pnpDpnpPpnpXpnpbpnpfpnplcIiw0LFwi6IeB6Iam5qyk5qy35qy55q2D5q2G5q2Z6aOR6aOS6aOT6aOV6aOZ6aOa5q6z5b2A5q+C6Kez5paQ6b2R5paT5pa85peG5peE5peD5peM5peO5peS5peW54KA54Kc54KW54Kd54K754OA54K354Kr54Kx54Oo54OK54SQ54ST54SW54Sv54Sx54Wz54Wc54Wo54WF54Wy54WK54W454W654aY54az54a154ao54ag54eg54eU54en54e554id54io54Gs54SY54Wm54a55oi+5oi95omD5omI5omJ56S756WA56WG56WJ56Wb56Wc56WT56Wa56Wi56WX56Wg56Wv56Wn56W656aF56aK56aa56an56az5b+R5b+QXCJdLFtcImVkNDBcIixcIumenumen+meoemeoumepFwiLDYsXCLpnqzpnq7pnrDpnrHpnrPpnrVcIiw0Nl0sW1wiZWQ4MFwiLFwi6Z+k6Z+l6Z+o6Z+uXCIsNCxcIumftOmft1wiLDIzLFwi5oC85oGd5oGa5oGn5oGB5oGZ5oGj5oKr5oSG5oSN5oWd5oap5oad5oeL5oeR5oiG6IKA6IG/5rKT5rO25re855+255+456CA56CJ56CX56CY56CR5par56Ct56Cc56Cd56C556C656C756Cf56C856Cl56Cs56Cj56Cp56GO56Gt56GW56GX56Cm56GQ56GH56GM56Gq56Kb56KT56Ka56KH56Kc56Kh56Kj56Ky56K556Kl56OU56OZ56OJ56Os56Oy56SF56O056ST56Sk56Se56S06b6b6bu56bu76bu855ux55yE55yN55u555yH55yI55ya55yi55yZ55yt55ym55y155y4552Q552R552H552D552a552oXCJdLFtcImVlNDBcIixcIumgj1wiLDYyXSxbXCJlZTgwXCIsXCLpoY5cIiwzMixcIuedouedpeedv+eejeedveeegOeejOeekeeen+eeoOeesOeeteeeveeUuueVgOeVjueVi+eViOeVm+eVsueVueeWg+e9mOe9oee9n+ipiOe9qOe9tOe9see9uee+gee9vuebjeebpeigsumShemShumSh+mSi+mSiumSjOmSjemSj+mSkOmSlOmSl+mSlemSmumSm+mSnOmSo+mSpOmSq+mSqumSremSrOmSr+mSsOmSsumStOmStlwiLDQsXCLpkrzpkr3pkr/pk4Tpk4hcIiw2LFwi6ZOQ6ZOR6ZOS6ZOV6ZOW6ZOX6ZOZ6ZOY6ZOb6ZOe6ZOf6ZOg6ZOi6ZOk6ZOl6ZOn6ZOo6ZOqXCJdLFtcImVmNDBcIixcIumhr1wiLDUsXCLpoovpoo7popLpopXpopnpoqPpoqhcIiwzNyxcIumjj+mjkOmjlOmjlumjl+mjm+mjnOmjnemjoFwiLDRdLFtcImVmODBcIixcIumjpemjpumjqVwiLDMwLFwi6ZOp6ZOr6ZOu6ZOv6ZOz6ZO06ZO16ZO36ZO56ZO86ZO96ZO/6ZSD6ZSC6ZSG6ZSH6ZSJ6ZSK6ZSN6ZSO6ZSP6ZSSXCIsNCxcIumUmOmUm+mUnemUnumUn+mUoumUqumUq+mUqemUrOmUsemUsumUtOmUtumUt+mUuOmUvOmUvumUv+mVgumUtemVhOmVhemVhumViemVjOmVjumVj+mVkumVk+mVlOmVlumVl+mVmOmVmemVm+mVnumVn+mVnemVoemVoumVpFwiLDgsXCLpla/plbHplbLplbPplLrnn6fnn6zpm4nnp5Xnp63np6Pnp6vnqIbltYfnqIPnqILnqJ7nqJRcIl0sW1wiZjA0MFwiLFwi6aSIXCIsNCxcIumkjumkj+mkkVwiLDI4LFwi6aSvXCIsMjZdLFtcImYwODBcIixcIumlilwiLDksXCLppZZcIiwxMixcIumlpOmlpumls+mluOmluemlu+mlvummgummg+mmieeoueeot+epkem7j+mmpeepsOeaiOeajueak+eameeapOeTnueToOeUrOm4oOm4oum4qFwiLDQsXCLpuLLpuLHpuLbpuLjpuLfpuLnpuLrpuL7puYHpuYLpuYTpuYbpuYfpuYjpuYnpuYvpuYzpuY7puZHpuZXpuZfpuZrpuZvpuZzpuZ7puaPpuaZcIiw2LFwi6bmx6bmt6bmz55aS55aU55aW55ag55ad55as55aj55az55a055a455eE55ax55aw55eD55eC55eW55eN55ej55eo55em55ek55er55en55iD55ex55e855e/55iQ55iA55iF55iM55iX55iK55il55iY55iV55iZXCJdLFtcImYxNDBcIixcIummjOmmjummmlwiLDEwLFwi6aam6aan6aapXCIsNDddLFtcImYxODBcIixcIumnmVwiLDMyLFwi55ib55i855ii55ig55mA55it55iw55i/55i155mD55i+55iz55mN55me55mU55mc55mW55mr55mv57+K56um56m456m556qA56qG56qI56qV56qm56qg56qs56qo56qt56qz6KGk6KGp6KGy6KG96KG/6KKC6KKi6KOG6KK36KK86KOJ6KOi6KOO6KOj6KOl6KOx6KSa6KO86KOo6KO+6KOw6KSh6KSZ6KST6KSb6KSK6KS06KSr6KS26KWB6KWm6KW755aL6IOl55qy55q055+c6ICS6ICU6ICW6ICc6ICg6ICi6ICl6ICm6ICn6ICp6ICo6ICx6ICL6IC16IGD6IGG6IGN6IGS6IGp6IGx6KaD6aG46aKA6aKDXCJdLFtcImYyNDBcIixcIumnulwiLDYyXSxbXCJmMjgwXCIsXCLpqLlcIiwzMixcIumiiemijOmijemij+milOmimumim+minumin+mioemioumipemipuiZjeiZlOiZrOiZruiZv+iZuuiZvOiZu+iaqOiajeiai+iarOianeiap+iao+iaquiak+iaqeiatuibhOiateibjuiasOiauuiaseiar+ibieibj+iatOibqeibseibsuibreibs+ibkOick+ibnuibtOibn+ibmOibkeicg+ich+ibuOiciOiciuicjeicieico+icu+icnuicpeicruicmuicvuidiOictOicseicqeict+icv+ieguicouidveidvuidu+idoOidsOidjOidruiei+idk+ido+idvOidpOidmeidpeiek+ier+ieqOifklwiXSxbXCJmMzQwXCIsXCLpqZpcIiwxNyxcIumpsumqg+mqiemqjemqjumqlOmqlemqmemqpumqqVwiLDYsXCLpqrLpqrPpqrTpqrXpqrnpqrvpqr3pqr7pqr/pq4Ppq4Tpq4ZcIiw0LFwi6auN6auO6auP6auQ6auS6auU6auV6auW6auX6auZ6aua6aub6aucXCJdLFtcImYzODBcIixcIumrnemrnumroOmroumro+mrpOmrpemrp+mrqOmrqemrqumrrOmrrumrsFwiLDgsXCLpq7rpq7xcIiw2LFwi6ayE6ayF6ayG6J+G6J6I6J6F6J6t6J6X6J6D6J6r6J+l6J6s6J616J6z6J+L6J+T6J696J+R6J+A6J+K6J+b6J+q6J+g6J+u6KCW6KCT6J++6KCK6KCb6KCh6KC56KC857y2572C572E572F6IiQ56u656u956yI56yD56yE56yV56yK56yr56yP562H56y456yq56yZ56yu56yx56yg56yl56yk56yz56y+56ye562Y562a562F5621562M562d562g562u5627562i562y562x566Q566m566n5664566s566d566o566F566q566c566i566r566056+R56+B56+M56+d56+a56+l56+m56+q57CM56++56+857CP57CW57CLXCJdLFtcImY0NDBcIixcIumsh+msiVwiLDUsXCLprJDprJHprJLprJRcIiwxMCxcIumsoOmsoemsoumspFwiLDEwLFwi6ayw6ayx6ayzXCIsNyxcIumsvemsvumsv+mtgOmthumtiumti+mtjOmtjumtkOmtkumtk+mtlVwiLDVdLFtcImY0ODBcIixcIumtm1wiLDMyLFwi57Cf57Cq57Cm57C457GB57GA6Ie+6IiB6IiC6IiE6Ies6KGE6Iih6Iii6Iij6Iit6Iiv6Iio6Iir6Ii46Ii76Iiz6Ii06Ii+6ImE6ImJ6ImL6ImP6Ima6Imf6Imo6KG+6KKF6KKI6KOY6KOf6KWe576d576f576n576v576w576y57G85pWJ57KR57Kd57Kc57Ke57Ki57Ky57K857K957OB57OH57OM57ON57OI57OF57OX57Oo6Imu5pqo576/57+O57+V57+l57+h57+m57+p57+u57+z57O457W357am57au57mH57qb6bq46bq06LWz6LaE6LaU6LaR6Lax6LWn6LWt6LGH6LGJ6YWK6YWQ6YWO6YWP6YWkXCJdLFtcImY1NDBcIixcIumtvFwiLDYyXSxbXCJmNTgwXCIsXCLprrtcIiwzMixcIumFoumFoemFsOmFqemFr+mFvemFvumFsumFtOmFuemGjOmGhemGkOmGjemGkemGoumGo+mGqumGremGrumGr+mGtemGtOmGuuixlem5vui2uOi3q+i4hei5mei5qei2tei2v+i2vOi2uui3hOi3lui3l+i3mui3nui3jui3j+i3m+i3hui3rOi3t+i3uOi3o+i3uei3u+i3pOi4iei3vei4lOi4nei4n+i4rOi4rui4o+i4r+i4uui5gOi4uei4tei4vei4sei5iei5gei5gui5kei5kui5iui5sOi5tui5vOi5r+i5tOi6hei6j+i6lOi6kOi6nOi6nuixuOiyguiyiuiyheiymOiylOaWm+inluinnuinmuinnFwiXSxbXCJmNjQwXCIsXCLpr5xcIiw2Ml0sW1wiZjY4MFwiLFwi6bCbXCIsMzIsXCLop6Xop6vop6/oqL7orKbpnZPpm6npm7Ppm6/pnIbpnIHpnIjpnI/pnI7pnKrpnK3pnLDpnL7pvoDpvoPpvoVcIiw1LFwi6b6M6bu+6byL6byN6Zq56Zq86Zq96ZuO6ZuS556/6Zug6YqO6Yqu6YuI6Yy+6Y2q6Y+K6Y6P6ZC+6ZGr6bG/6bKC6bKF6bKG6bKH6bKI56ij6bKL6bKO6bKQ6bKR6bKS6bKU6bKV6bKa6bKb6bKeXCIsNSxcIumypVwiLDQsXCLpsqvpsq3psq7psrBcIiw3LFwi6bK66bK76bK86bK96bOE6bOF6bOG6bOH6bOK6bOLXCJdLFtcImY3NDBcIixcIumwvFwiLDYyXSxbXCJmNzgwXCIsXCLpsbvpsb3psb7psoDpsoPpsoTpsonpsorpsozpso/pspPpspbpspfpspjpspnpsp3psqrpsqzpsq/psrnpsr5cIiw0LFwi6bOI6bOJ6bOR6bOS6bOa6bOb6bOg6bOh6bOMXCIsNCxcIumzk+mzlOmzlemzl+mzmOmzmemznOmznemzn+mzoumdvOmehemekemekumelOmer+meq+meo+mesumetOmqsemqsOmqt+m5mOmqtumquumqvOmrgemrgOmrhemrgumri+mrjOmrkemthemtg+mth+mtiemtiOmtjemtkemjqOmkjemkrumllemllOmrn+mroemrpumrr+mrq+mru+mrremruemsiOmsj+msk+msn+mso+m6vem6vue4u+m6gum6h+m6iOm6i+m6kumPlum6nem6n+m7m+m7nOm7nem7oOm7n+m7oum7qem7p+m7pem7qum7r+m8oum8rOm8r+m8uem8t+m8vem8vum9hFwiXSxbXCJmODQwXCIsXCLps6NcIiw2Ml0sW1wiZjg4MFwiLFwi6bSiXCIsMzJdLFtcImY5NDBcIixcIum1g1wiLDYyXSxbXCJmOTgwXCIsXCLptoJcIiwzMl0sW1wiZmE0MFwiLFwi6bajXCIsNjJdLFtcImZhODBcIixcIum3olwiLDMyXSxbXCJmYjQwXCIsXCLpuINcIiwyNyxcIum4pOm4p+m4rum4sOm4tOm4u+m4vOm5gOm5jem5kOm5kum5k+m5lOm5lum5mem5nem5n+m5oOm5oem5oum5pem5rum5r+m5sum5tFwiLDksXCLpuoBcIl0sW1wiZmI4MFwiLFwi6bqB6bqD6bqE6bqF6bqG6bqJ6bqK6bqMXCIsNSxcIum6lFwiLDgsXCLpup7puqBcIiw1LFwi6bqn6bqo6bqp6bqqXCJdLFtcImZjNDBcIixcIum6q1wiLDgsXCLpurXpurbpurfpurnpurrpurzpur9cIiw0LFwi6buF6buG6buH6buI6buK6buL6buM6buQ6buS6buT6buV6buW6buX6buZ6bua6bue6buh6buj6buk6bum6buo6bur6bus6but6buu6buwXCIsOCxcIum7uum7vem7v1wiLDZdLFtcImZjODBcIixcIum8hlwiLDQsXCLpvIzpvI/pvJHpvJLpvJTpvJXpvJbpvJjpvJpcIiw1LFwi6byh6byjXCIsOCxcIum8rem8rum8sOm8sVwiXSxbXCJmZDQwXCIsXCLpvLJcIiw0LFwi6by46by66by86by/XCIsNCxcIum9hVwiLDEwLFwi6b2SXCIsMzhdLFtcImZkODBcIixcIum9uVwiLDUsXCLpvoHpvoLpvo1cIiwxMSxcIum+nOm+nem+num+oVwiLDQsXCLvpKzvpbnvppXvp6fvp7FcIl0sW1wiZmU0MFwiLFwi76iM76iN76iO76iP76iR76iT76iU76iY76if76ig76ih76ij76ik76in76io76ipXCJdXScpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNzM0ODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEpTT04ucGFyc2UoJ1tbXCIwXCIsXCJcXFxcdTAwMDBcIiwxMjddLFtcIjgxNDFcIixcIuqwguqwg+qwheqwhuqwi1wiLDQsXCLqsJjqsJ7qsJ/qsKHqsKLqsKPqsKVcIiw2LFwi6rCu6rCy6rCz6rC0XCJdLFtcIjgxNjFcIixcIuqwteqwtuqwt+qwuuqwu+qwveqwvuqwv+qxgVwiLDksXCLqsYzqsY5cIiw1LFwi6rGVXCJdLFtcIjgxODFcIixcIuqxluqxl+qxmeqxmuqxm+qxnVwiLDE4LFwi6rGy6rGz6rG16rG26rG56rG7XCIsNCxcIuqyguqyh+qyiOqyjeqyjuqyj+qykeqykuqyk+qylVwiLDYsXCLqsp7qsqJcIiw1LFwi6rKr6rKt6rKu6rKxXCIsNixcIuqyuuqyvuqyv+qzgOqzguqzg+qzheqzhuqzh+qzieqziuqzi+qzjVwiLDcsXCLqs5bqs5hcIiw3LFwi6rOi6rOj6rOl6rOm6rOp6rOr6rOt6rOu6rOy6rO06rO3XCIsNCxcIuqzvuqzv+q0geq0guq0g+q0heq0h1wiLDQsXCLqtI7qtJDqtJLqtJNcIl0sW1wiODI0MVwiLFwi6rSU6rSV6rSW6rSX6rSZ6rSa6rSb6rSd6rSe6rSf6rShXCIsNyxcIuq0quq0q+q0rlwiLDVdLFtcIjgyNjFcIixcIuq0tuq0t+q0ueq0uuq0u+q0vVwiLDYsXCLqtYbqtYjqtYpcIiw1LFwi6rWR6rWS6rWT6rWV6rWW6rWXXCJdLFtcIjgyODFcIixcIuq1mVwiLDcsXCLqtaLqtaRcIiw3LFwi6rWu6rWv6rWx6rWy6rW36rW46rW56rW66rW+6raA6raDXCIsNCxcIuq2iuq2i+q2jeq2juq2j+q2kVwiLDEwLFwi6raeXCIsNSxcIuq2pVwiLDE3LFwi6ra4XCIsNyxcIuq3guq3g+q3heq3huq3h+q3iVwiLDYsXCLqt5Lqt5RcIiw3LFwi6red6ree6ref6reh6rei6rej6relXCIsMThdLFtcIjgzNDFcIixcIuq3uuq3u+q3veq3vuq4glwiLDUsXCLquIrquIzquI5cIiw1LFwi6riVXCIsN10sW1wiODM2MVwiLFwi6ridXCIsMTgsXCLquLLquLPquLXquLbquLnquLvquLxcIl0sW1wiODM4MVwiLFwi6ri96ri+6ri/6rmC6rmE6rmH6rmI6rmJ6rmL6rmP6rmR6rmS6rmT6rmV6rmXXCIsNCxcIuq5nuq5ouq5o+q5pOq5puq5p+q5quq5q+q5req5ruq5r+q5sVwiLDYsXCLqubrqub5cIiw1LFwi6rqGXCIsNSxcIuq6jVwiLDQ2LFwi6rq/6ruB6ruC6ruD6ruFXCIsNixcIuq7juq7klwiLDUsXCLqu5rqu5vqu51cIiw4XSxbXCI4NDQxXCIsXCLqu6bqu6fqu6nqu6rqu6zqu65cIiw1LFwi6ru16ru26ru36ru56ru66ru76ru9XCIsOF0sW1wiODQ2MVwiLFwi6ryG6ryJ6ryK6ryL6ryM6ryO6ryP6ryRXCIsMThdLFtcIjg0ODFcIixcIuq8pFwiLDcsXCLqvK7qvK/qvLHqvLPqvLVcIiw2LFwi6ry+6r2A6r2E6r2F6r2G6r2H6r2KXCIsNSxcIuq9kVwiLDEwLFwi6r2eXCIsNSxcIuq9plwiLDE4LFwi6r26XCIsNSxcIuq+geq+guq+g+q+heq+huq+h+q+iVwiLDYsXCLqvpLqvpPqvpTqvpZcIiw1LFwi6r6dXCIsMjYsXCLqvrrqvrvqvr3qvr5cIl0sW1wiODU0MVwiLFwi6r6/6r+BXCIsNSxcIuq/iuq/jOq/j1wiLDQsXCLqv5VcIiw2LFwi6r+dXCIsNF0sW1wiODU2MVwiLFwi6r+iXCIsNSxcIuq/qlwiLDUsXCLqv7Lqv7Pqv7Xqv7bqv7fqv7lcIiw2LFwi64CC64CDXCJdLFtcIjg1ODFcIixcIuuAhVwiLDYsXCLrgI3rgI7rgI/rgJHrgJLrgJPrgJVcIiw2LFwi64CeXCIsOSxcIuuAqVwiLDI2LFwi64GG64GH64GJ64GL64GN64GP64GQ64GR64GS64GW64GY64Ga64Gb64Gc64GeXCIsMjksXCLrgb7rgb/rgoHrgoLrgoPrgoVcIiw2LFwi64KO64KQ64KSXCIsNSxcIuuCm+uCneuCnuuCo+uCpFwiXSxbXCI4NjQxXCIsXCLrgqXrgqbrgqfrgqrrgrDrgrLrgrbrgrfrgrnrgrrrgrvrgr1cIiw2LFwi64OG64OKXCIsNSxcIuuDklwiXSxbXCI4NjYxXCIsXCLrg5Prg5Xrg5brg5frg5lcIiw2LFwi64Oh64Oi64Oj64Ok64OmXCIsMTBdLFtcIjg2ODFcIixcIuuDsVwiLDIyLFwi64SK64SN64SO64SP64SR64SU64SV64SW64SX64Sa64SeXCIsNCxcIuuEpuuEp+uEqeuEquuEq+uErVwiLDYsXCLrhLbrhLpcIiw1LFwi64WC64WD64WF64WG64WH64WJXCIsNixcIuuFkuuFk+uFluuFl+uFmeuFmuuFm+uFneuFnuuFn+uFoVwiLDIyLFwi64W664W764W964W+64W/64aB64aDXCIsNCxcIuuGiuuGjOuGjuuGj+uGkOuGkeuGleuGluuGl+uGmeuGmuuGm+uGnVwiXSxbXCI4NzQxXCIsXCLrhp5cIiw5LFwi64apXCIsMTVdLFtcIjg3NjFcIixcIuuGuVwiLDE4LFwi64eN64eO64eP64eR64eS64eT64eVXCJdLFtcIjg3ODFcIixcIuuHllwiLDUsXCLrh57rh6BcIiw3LFwi64eq64er64et64eu64ev64exXCIsNyxcIuuHuuuHvOuHvlwiLDUsXCLriIbriIfriInriIrriI1cIiw2LFwi64iW64iY64iaXCIsNSxcIuuIoVwiLDE4LFwi64i1XCIsNixcIuuIvVwiLDI2LFwi64mZ64ma64mb64md64me64mf64mhXCIsNixcIuuJqlwiLDRdLFtcIjg4NDFcIixcIuuJr1wiLDQsXCLribZcIiw1LFwi64m9XCIsNixcIuuKhuuKh+uKiOuKilwiLDRdLFtcIjg4NjFcIixcIuuKj+uKkuuKk+uKleuKluuKl+uKm1wiLDQsXCLriqLriqTriqfriqjriqnriqvriq3riq7riq/rirHrirLrirPrirXrirbrirdcIl0sW1wiODg4MVwiLFwi64q4XCIsMTUsXCLri4rri4vri43ri47ri4/ri5Hri5NcIiw0LFwi64ua64uc64ue64uf64ug64uh64uj64un64up64uq64uw64ux64uy64u264u864u964u+64yC64yD64yF64yG64yH64yJXCIsNixcIuuMkuuMllwiLDUsXCLrjJ1cIiw1NCxcIuuNl+uNmeuNmuuNneuNoOuNoeuNouuNo1wiXSxbXCI4OTQxXCIsXCLrjabrjajrjarrjazrja3rja/rjbLrjbPrjbXrjbbrjbfrjblcIiw2LFwi646C646GXCIsNSxcIuuOjVwiXSxbXCI4OTYxXCIsXCLrjo7rjo/rjpHrjpLrjpPrjpVcIiwxMCxcIuuOolwiLDUsXCLrjqnrjqrrjqvrjq1cIl0sW1wiODk4MVwiLFwi646uXCIsMjEsXCLrj4brj4frj4nrj4rrj43rj4/rj5Hrj5Lrj5Prj5brj5jrj5rrj5zrj57rj5/rj6Hrj6Lrj6Prj6Xrj6brj6frj6lcIiwxOCxcIuuPvVwiLDE4LFwi65CRXCIsNixcIuuQmeuQmuuQm+uQneuQnuuQn+uQoVwiLDYsXCLrkKrrkKxcIiw3LFwi65C1XCIsMTVdLFtcIjhhNDFcIixcIuuRhVwiLDEwLFwi65GS65GT65GV65GW65GX65GZXCIsNixcIuuRouuRpOuRplwiXSxbXCI4YTYxXCIsXCLrkadcIiw0LFwi65GtXCIsMTgsXCLrkoHrkoJcIl0sW1wiOGE4MVwiLFwi65KDXCIsNCxcIuuSiVwiLDE5LFwi65KeXCIsNSxcIuuSpeuSpuuSp+uSqeuSquuSq+uSrVwiLDcsXCLrkrbrkrjrkrpcIiw1LFwi65OB65OC65OD65OF65OG65OH65OJXCIsNixcIuuTkeuTkuuTk+uTlOuTllwiLDUsXCLrk57rk5/rk6Hrk6Lrk6Xrk6dcIiw0LFwi65Ou65Ow65OyXCIsNSxcIuuTuVwiLDI2LFwi65SW65SX65SZ65Sa65SdXCJdLFtcIjhiNDFcIixcIuuUnlwiLDUsXCLrlKbrlKtcIiw0LFwi65Sy65Sz65S165S265S365S5XCIsNixcIuuVguuVhlwiXSxbXCI4YjYxXCIsXCLrlYfrlYjrlYnrlYrrlY7rlY/rlZHrlZLrlZPrlZVcIiw2LFwi65We65WiXCIsOF0sW1wiOGI4MVwiLFwi65WrXCIsNTIsXCLrlqLrlqPrlqXrlqbrlqfrlqnrlqzrlq3rlq7rlq/rlrLrlrZcIiw0LFwi65a+65a/65eB65eC65eD65eFXCIsNixcIuuXjuuXklwiLDUsXCLrl5lcIiwxOCxcIuuXrVwiLDE4XSxbXCI4YzQxXCIsXCLrmIBcIiwxNSxcIuuYkuuYk+uYleuYluuYl+uYmVwiLDRdLFtcIjhjNjFcIixcIuuYnlwiLDYsXCLrmKZcIiw1LFwi65itXCIsNixcIuuYtVwiLDVdLFtcIjhjODFcIixcIuuYu1wiLDEyLFwi65mJXCIsMjYsXCLrmaXrmabrmafrmalcIiw1MCxcIuuanuuan+uaoeuaouuao+uapVwiLDUsXCLrmq3rmq7rmq/rmrDrmrJcIiwxNl0sW1wiOGQ0MVwiLFwi65uDXCIsMTYsXCLrm5VcIiw4XSxbXCI4ZDYxXCIsXCLrm55cIiwxNyxcIuubseubsuubs+ubteubtuubt+ubueubulwiXSxbXCI4ZDgxXCIsXCLrm7tcIiw0LFwi65yC65yD65yE65yGXCIsMzMsXCLrnKrrnKvrnK3rnK7rnLFcIiw2LFwi65y665y8XCIsNyxcIuudheudhuudh+udieudiuudi+udjVwiLDYsXCLrnZZcIiw5LFwi652h652i652j652l652m652n652pXCIsNixcIuudsuudtOudtlwiLDUsXCLrnb7rnb/rnoHrnoLrnoPrnoVcIiw2LFwi656O656T656U656V656a656b656d656eXCJdLFtcIjhlNDFcIixcIuuen+ueoVwiLDYsXCLrnqrrnq5cIiw1LFwi656265636565XCIsOF0sW1wiOGU2MVwiLFwi65+CXCIsNCxcIuufiOufilwiLDE5XSxbXCI4ZTgxXCIsXCLrn55cIiwxMyxcIuufruufr+ufseufsuufs+uftVwiLDYsXCLrn77roIJcIiw0LFwi66CK66CL66CN66CO66CP66CRXCIsNixcIuugmuugnOugnlwiLDUsXCLroKbroKfroKnroKrroKvroK1cIiw2LFwi66C266C6XCIsNSxcIuuhgeuhguuhg+uhhVwiLDExLFwi66GS66GUXCIsNyxcIuuhnuuhn+uhoeuhouuho+uhpVwiLDYsXCLroa7robDrobJcIiw1LFwi66G566G666G766G9XCIsN10sW1wiOGY0MVwiLFwi66KFXCIsNyxcIuuijlwiLDE3XSxbXCI4ZjYxXCIsXCLroqBcIiw3LFwi66KpXCIsNixcIuuiseuisuuis+uiteuituuit+uiuVwiLDRdLFtcIjhmODFcIixcIuuivuuiv+ujguujhOujhlwiLDUsXCLro43ro47ro4/ro5Hro5Lro5Pro5VcIiw3LFwi66Oe66Og66OiXCIsNSxcIuujquujq+ujreujruujr+ujsVwiLDYsXCLro7rro7zro75cIiw1LFwi66SFXCIsMTgsXCLrpJlcIiw2LFwi66ShXCIsMjYsXCLrpL7rpL/rpYHrpYLrpYPrpYVcIiw2LFwi66WN66WO66WQ66WSXCIsNV0sW1wiOTA0MVwiLFwi66Wa66Wb66Wd66We66Wf66WhXCIsNixcIuulquulrOulrlwiLDUsXCLrpbbrpbfrpbnrpbrrpbvrpb1cIl0sW1wiOTA2MVwiLFwi66W+XCIsNSxcIuumhuumiOumi+umjOumj1wiLDE1XSxbXCI5MDgxXCIsXCLrpp9cIiwxMixcIuumruumr+umseumsuums+umtVwiLDYsXCLrpr7rp4Drp4JcIiw1LFwi66eK66eL66eN66eTXCIsNCxcIuunmuunnOunn+unoOunouunpuunp+unqeunquunq+unrVwiLDYsXCLrp7brp7tcIiw0LFwi66iCXCIsNSxcIuuoiVwiLDExLFwi66iWXCIsMzMsXCLrqLrrqLvrqL3rqL7rqL/rqYHrqYPrqYTrqYXrqYZcIl0sW1wiOTE0MVwiLFwi66mH66mK66mM66mP66mQ66mR66mS66mW66mX66mZ66ma66mb66mdXCIsNixcIuuppuupqlwiLDVdLFtcIjkxNjFcIixcIuupsuups+upteuptuupt+upuVwiLDksXCLrqobrqojrqonrqorrqovrqo1cIiw1XSxbXCI5MTgxXCIsXCLrqpNcIiwyMCxcIuuqquuqreuqruuqr+uqseuqs1wiLDQsXCLrqrrrqrzrqr5cIiw1LFwi66uF66uG66uH66uJXCIsMTQsXCLrq5pcIiwzMyxcIuurveurvuurv+usgeusguusg+ushVwiLDcsXCLrrI7rrJDrrJJcIiw1LFwi66yZ66ya66yb66yd66ye66yf66yhXCIsNl0sW1wiOTI0MVwiLFwi66yo66yq66ysXCIsNyxcIuust+usueusuuusv1wiLDQsXCLrrYbrrYjrrYrrrYvrrYzrrY7rrZHrrZJcIl0sW1wiOTI2MVwiLFwi662T662V662W662X662ZXCIsNyxcIuutouutpFwiLDcsXCLrra1cIiw0XSxbXCI5MjgxXCIsXCLrrbJcIiwyMSxcIuuuieuuiuuui+uujeuujuuuj+uukVwiLDE4LFwi666l666m666n666p666q666r666tXCIsNixcIuuuteuutuuuuFwiLDcsXCLrr4Hrr4Lrr4Prr4Xrr4brr4frr4lcIiw2LFwi66+R66+S66+UXCIsMzUsXCLrr7rrr7vrr73rr77rsIFcIl0sW1wiOTM0MVwiLFwi67CDXCIsNCxcIuuwiuuwjuuwkOuwkuuwk+uwmeuwmuuwoOuwoeuwouuwo+uwpuuwqOuwquuwq+uwrOuwruuwr+uwsuuws+uwtVwiXSxbXCI5MzYxXCIsXCLrsLbrsLfrsLlcIiw2LFwi67GC67GG67GH67GI67GK67GL67GO67GP67GRXCIsOF0sW1wiOTM4MVwiLFwi67Ga67Gb67Gc67GeXCIsMzcsXCLrsobrsofrsonrsorrso3rso9cIiw0LFwi67KW67KY67KbXCIsNCxcIuuyouuyo+uypeuypuuyqVwiLDYsXCLrsrLrsrZcIiw1LFwi67K+67K/67OB67OC67OD67OFXCIsNyxcIuuzjuuzkuuzk+uzlOuzluuzl+uzmeuzmuuzm+uznVwiLDIyLFwi67O367O567O667O767O9XCJdLFtcIjk0NDFcIixcIuuzvlwiLDUsXCLrtIbrtIjrtIpcIiw1LFwi67SR67SS67ST67SVXCIsOF0sW1wiOTQ2MVwiLFwi67SeXCIsNSxcIuu0pVwiLDYsXCLrtK1cIiwxMl0sW1wiOTQ4MVwiLFwi67S6XCIsNSxcIuu1gVwiLDYsXCLrtYrrtYvrtY3rtY7rtY/rtZFcIiw2LFwi67WaXCIsOSxcIuu1peu1puu1p+u1qVwiLDIyLFwi67aC67aD67aF67aG67aLXCIsNCxcIuu2kuu2lOu2luu2l+u2mOu2m+u2nVwiLDYsXCLrtqVcIiwxMCxcIuu2sVwiLDYsXCLrtrlcIiwyNF0sW1wiOTU0MVwiLFwi67eS67eT67eW67eX67eZ67ea67eb67edXCIsMTEsXCLrt6pcIiw1LFwi67exXCJdLFtcIjk1NjFcIixcIuu3suu3s+u3teu3tuu3t+u3uVwiLDYsXCLruIHruILruITruIZcIiw1LFwi67iO67iP67iR67iS67iTXCJdLFtcIjk1ODFcIixcIuu4lVwiLDYsXCLruJ7ruKBcIiwzNSxcIuu5huu5h+u5ieu5iuu5i+u5jeu5j1wiLDQsXCLruZbruZjruZzruZ3ruZ7ruZ/ruaLruaPruaXruabruafruanruatcIiw0LFwi67my67m2XCIsNCxcIuu5vuu5v+u6geu6guu6g+u6hVwiLDYsXCLruo7rupJcIiw1LFwi67qaXCIsMTMsXCLruqlcIiwxNF0sW1wiOTY0MVwiLFwi67q4XCIsMjMsXCLru5Lru5NcIl0sW1wiOTY2MVwiLFwi67uV67uW67uZXCIsNixcIuu7oeu7ouu7plwiLDUsXCLru61cIiw4XSxbXCI5NjgxXCIsXCLru7ZcIiwxMCxcIuu8glwiLDUsXCLrvIpcIiwxMyxcIuu8muu8nlwiLDMzLFwi672C672D672F672G672H672JXCIsNixcIuu9kuu9k+u9lOu9llwiLDQ0XSxbXCI5NzQxXCIsXCLrvoNcIiwxNixcIuu+lVwiLDhdLFtcIjk3NjFcIixcIuu+nlwiLDE3LFwi676xXCIsN10sW1wiOTc4MVwiLFwi6765XCIsMTEsXCLrv4ZcIiw1LFwi67+O67+P67+R67+S67+T67+VXCIsNixcIuu/neu/nuu/oOu/olwiLDg5LFwi7IC97IC+7IC/XCJdLFtcIjk4NDFcIixcIuyBgFwiLDE2LFwi7IGSXCIsNSxcIuyBmeyBmuyBm1wiXSxbXCI5ODYxXCIsXCLsgZ3sgZ7sgZ/sgaFcIiw2LFwi7IGqXCIsMTVdLFtcIjk4ODFcIixcIuyBulwiLDIxLFwi7IKS7IKT7IKV7IKW7IKX7IKZXCIsNixcIuyCouyCpOyCplwiLDUsXCLsgq7sgrHsgrLsgrdcIiw0LFwi7IK+7IOC7IOD7IOE7IOG7IOH7IOK7IOL7ION7IOO7IOP7IORXCIsNixcIuyDmuyDnlwiLDUsXCLsg6bsg6fsg6nsg6rsg6vsg61cIiw2LFwi7IO27IO47IO6XCIsNSxcIuyEgeyEguyEg+yEheyEhuyEh+yEiVwiLDYsXCLshJHshJLshJPshJTshJZcIiw1LFwi7ISh7ISi7ISl7ISo7ISp7ISq7ISr7ISuXCJdLFtcIjk5NDFcIixcIuyEsuyEs+yEtOyEteyEt+yEuuyEu+yEveyEvuyEv+yFgVwiLDYsXCLshYrshY5cIiw1LFwi7IWW7IWXXCJdLFtcIjk5NjFcIixcIuyFmeyFmuyFm+yFnVwiLDYsXCLshabshapcIiw1LFwi7IWx7IWy7IWz7IW17IW27IW37IW57IW67IW7XCJdLFtcIjk5ODFcIixcIuyFvFwiLDgsXCLshoZcIiw1LFwi7IaP7IaR7IaS7IaT7IaV7IaXXCIsNCxcIuyGnuyGoOyGouyGo+yGpOyGpuyGp+yGquyGq+yGreyGruyGr+yGsVwiLDExLFwi7Ia+XCIsNSxcIuyHheyHhuyHh+yHieyHiuyHi+yHjVwiLDYsXCLsh5Xsh5bsh5lcIiw2LFwi7Ieh7Iei7Iej7Iel7Iem7Ien7IepXCIsNixcIuyHsuyHtFwiLDcsXCLsh77sh7/siIHsiILsiIPsiIVcIiw2LFwi7IiO7IiQ7IiSXCIsNSxcIuyImuyIm+yIneyInuyIoeyIouyIo1wiXSxbXCI5YTQxXCIsXCLsiKTsiKXsiKbsiKfsiKrsiKzsiK7siLDsiLPsiLVcIiwxNl0sW1wiOWE2MVwiLFwi7ImG7ImH7ImJXCIsNixcIuyJkuyJk+yJleyJluyJl+yJmVwiLDYsXCLsiaHsiaLsiaPsiaTsiaZcIl0sW1wiOWE4MVwiLFwi7ImnXCIsNCxcIuyJruyJr+yJseyJsuyJs+yJtVwiLDYsXCLsib7sioDsioJcIiw1LFwi7IqKXCIsNSxcIuyKkVwiLDYsXCLsipnsiprsipzsip5cIiw1LFwi7Iqm7Iqn7Iqp7Iqq7Iqr7IquXCIsNSxcIuyKtuyKuOyKulwiLDMzLFwi7Iue7Iuf7Iuh7Iui7IulXCIsNSxcIuyLruyLsOyLsuyLs+yLtOyLteyLt+yLuuyLveyLvuyLv+yMgVwiLDYsXCLsjIrsjIvsjI7sjI9cIl0sW1wiOWI0MVwiLFwi7IyQ7IyR7IyS7IyW7IyX7IyZ7Iya7Iyb7IydXCIsNixcIuyMpuyMp+yMqlwiLDhdLFtcIjliNjFcIixcIuyMs1wiLDE3LFwi7I2GXCIsN10sW1wiOWI4MVwiLFwi7I2OXCIsMjUsXCLsjarsjavsja3sja7sja/sjbHsjbNcIiw0LFwi7I267I277I2+XCIsNSxcIuyOheyOhuyOh+yOieyOiuyOi+yOjVwiLDUwLFwi7I+BXCIsMjIsXCLsj5pcIl0sW1wiOWM0MVwiLFwi7I+b7I+d7I+e7I+h7I+jXCIsNCxcIuyPquyPq+yPrOyPrlwiLDUsXCLsj7bsj7fsj7lcIiw1XSxbXCI5YzYxXCIsXCLsj79cIiw4LFwi7JCJXCIsNixcIuyQkVwiLDldLFtcIjljODFcIixcIuyQm1wiLDgsXCLskKVcIiw2LFwi7JCt7JCu7JCv7JCx7JCy7JCz7JC1XCIsNixcIuyQvlwiLDksXCLskYlcIiwyNixcIuyRpuyRp+yRqeyRquyRq+yRrVwiLDYsXCLskbbskbfskbjskbpcIiw1LFwi7JKBXCIsMTgsXCLskpVcIiw2LFwi7JKdXCIsMTJdLFtcIjlkNDFcIixcIuySqlwiLDEzLFwi7JK57JK67JK77JK9XCIsOF0sW1wiOWQ2MVwiLFwi7JOGXCIsMjVdLFtcIjlkODFcIixcIuyToFwiLDgsXCLsk6pcIiw1LFwi7JOy7JOz7JO17JO27JO37JO57JO77JO87JO97JO+7JSCXCIsOSxcIuyUjeyUjuyUj+yUkeyUkuyUk+yUlVwiLDYsXCLslJ1cIiwxMCxcIuyUquyUq+yUreyUruyUr+yUsVwiLDYsXCLslLrslLzslL5cIiw1LFwi7JWG7JWH7JWL7JWP7JWQ7JWR7JWS7JWW7JWa7JWb7JWc7JWf7JWi7JWj7JWl7JWm7JWn7JWpXCIsNixcIuyVsuyVtlwiLDUsXCLslb7slb/sloHsloLsloPsloXslobslojslonslorslovslo7slpDslpLslpPslpRcIl0sW1wiOWU0MVwiLFwi7JaW7JaZ7Jaa7Jab7Jad7Jae7Jaf7JahXCIsNyxcIuyWqlwiLDksXCLslrZcIl0sW1wiOWU2MVwiLFwi7Ja37Ja67Ja/XCIsNCxcIuyXi+yXjeyXj+yXkuyXk+yXleyXluyXl+yXmVwiLDYsXCLsl6Lsl6Tsl6bsl6dcIl0sW1wiOWU4MVwiLFwi7Jeo7Jep7Jeq7Jer7Jev7Jex7Jey7Jez7Je17Je47Je57Je67Je77JiC7JiD7JiE7JiJ7JiK7JiL7JiN7JiO7JiP7JiRXCIsNixcIuyYmuyYnVwiLDYsXCLsmKbsmKfsmKnsmKrsmKvsmK/smLHsmLLsmLbsmLjsmLrsmLzsmL3smL7smL/smYLsmYPsmYXsmYbsmYfsmYlcIiw2LFwi7JmS7JmWXCIsNSxcIuyZnuyZn+yZoVwiLDEwLFwi7Jmt7Jmu7Jmw7JmyXCIsNSxcIuyZuuyZu+yZveyZvuyZv+yagVwiLDYsXCLsmorsmozsmo5cIiw1LFwi7JqW7JqX7JqZ7Jqa7Jqb7JqdXCIsNixcIuyaplwiXSxbXCI5ZjQxXCIsXCLsmqjsmqpcIiw1LFwi7Jqy7Jqz7Jq17Jq27Jq37Jq7XCIsNCxcIuybguybhOybhlwiLDUsXCLsm45cIl0sW1wiOWY2MVwiLFwi7JuP7JuR7JuS7JuT7JuVXCIsNixcIuybnuybn+ybolwiLDUsXCLsm6rsm6vsm63sm67sm6/sm7Hsm7JcIl0sW1wiOWY4MVwiLFwi7JuzXCIsNCxcIuybuuybu+ybvOybvlwiLDUsXCLsnIbsnIfsnInsnIrsnIvsnI1cIiw2LFwi7JyW7JyY7JyaXCIsNSxcIuycouyco+ycpeycpuycp+ycqVwiLDYsXCLsnLLsnLTsnLbsnLjsnLnsnLrsnLvsnL7snL/snYHsnYLsnYPsnYVcIiw0LFwi7J2L7J2O7J2Q7J2Z7J2a7J2b7J2d7J2e7J2f7J2hXCIsNixcIuydqeydquydrFwiLDcsXCLsnbbsnbfsnbnsnbrsnbvsnb/snoDsnoHsnoLsnobsnovsnozsno3sno/snpLsnpPsnpXsnpnsnptcIiw0LFwi7J6i7J6nXCIsNCxcIuyeruyer+yeseyesuyes+yeteyetuyet1wiXSxbXCJhMDQxXCIsXCLsnrjsnrnsnrrsnrvsnr7sn4JcIiw1LFwi7J+K7J+L7J+N7J+P7J+RXCIsNixcIuyfmeyfmuyfm+yfnFwiXSxbXCJhMDYxXCIsXCLsn55cIiw1LFwi7J+l7J+m7J+n7J+p7J+q7J+r7J+tXCIsMTNdLFtcImEwODFcIixcIuyfu1wiLDQsXCLsoILsoIPsoIXsoIbsoIfsoInsoItcIiw0LFwi7KCS7KCU7KCXXCIsNCxcIuygnuygn+ygoeygouygo+ygpVwiLDYsXCLsoK7soLDsoLJcIiw1LFwi7KC57KC67KC77KC97KC+7KC/7KGBXCIsNixcIuyhiuyhi+yhjlwiLDUsXCLsoZVcIiwyNixcIuyhsuyhs+yhteyhtuyht+yhueyhu1wiLDQsXCLsooLsooTsoojsoonsoorsoo5cIiw1LFwi7KKVXCIsNyxcIuyinuyioOyiouyio+yipFwiXSxbXCJhMTQxXCIsXCLsoqXsoqbsoqfsoqlcIiwxOCxcIuyivuyiv+yjgOyjgVwiXSxbXCJhMTYxXCIsXCLso4Lso4Pso4Xso4bso4fso4nso4rso4vso41cIiw2LFwi7KOW7KOY7KOaXCIsNSxcIuyjouyjo+yjpVwiXSxbXCJhMTgxXCIsXCLso6ZcIiwxNCxcIuyjtlwiLDUsXCLso77so7/spIHspILspIPspIdcIiw0LFwi7KSO44CA44CB44CCwrfigKXigKbCqOOAg8Kt4oCV4oil77y84oi84oCY4oCZ4oCc4oCd44CU44CV44CIXCIsOSxcIsKxw5fDt+KJoOKJpOKJpeKInuKItMKw4oCy4oCz4oSD4oSr77+g77+h77+l4pmC4pmA4oig4oql4oyS4oiC4oiH4omh4omSwqfigLvimIbimIXil4vil4/il47il4fil4bilqHilqDilrPilrLilr3ilrzihpLihpDihpHihpPihpTjgJPiiariiaviiJriiL3iiJ3iiLXiiKviiKziiIjiiIviiobiiofiioLiioPiiKriiKniiKfiiKjvv6JcIl0sW1wiYTI0MVwiLFwi7KSQ7KSSXCIsNSxcIuykmVwiLDE4XSxbXCJhMjYxXCIsXCLspK1cIiw2LFwi7KS1XCIsMThdLFtcImEyODFcIixcIuyliFwiLDcsXCLspZLspZPspZXspZbspZfspZlcIiw2LFwi7KWi7KWkXCIsNyxcIuylreylruylr+KHkuKHlOKIgOKIg8K0772ey4fLmMudy5rLmcK4y5vCocK/y5DiiK7iiJHiiI/CpOKEieKAsOKXgeKXgOKWt+KWtuKZpOKZoOKZoeKZpeKZp+KZo+KKmeKXiOKWo+KXkOKXkeKWkuKWpOKWpeKWqOKWp+KWpuKWqeKZqOKYj+KYjuKYnOKYnsK24oCg4oCh4oaV4oaX4oaZ4oaW4oaY4pmt4pmp4pmq4pms44m/44ic4oSW44+H4oSi44+C44+Y4oSh4oKswq5cIl0sW1wiYTM0MVwiLFwi7KWx7KWy7KWz7KW1XCIsNixcIuylvVwiLDEwLFwi7KaK7KaL7KaN7KaO7KaPXCJdLFtcImEzNjFcIixcIuymkVwiLDYsXCLspprsppzspp5cIiwxNl0sW1wiYTM4MVwiLFwi7KavXCIsMTYsXCLsp4Lsp4Psp4Xsp4bsp4nsp4tcIiw0LFwi7KeS7KeU7KeX7KeY7Keb77yBXCIsNTgsXCLvv6bvvL1cIiwzMixcIu+/o1wiXSxbXCJhNDQxXCIsXCLsp57sp5/sp6Hsp6Psp6Xsp6bsp6jsp6nsp6rsp6vsp67sp7JcIiw1LFwi7Ke67Ke77Ke97Ke+7Ke/7KiB7KiC7KiD7KiEXCJdLFtcImE0NjFcIixcIuyoheyohuyoh+yoiuyojlwiLDUsXCLsqJXsqJbsqJfsqJlcIiwxMl0sW1wiYTQ4MVwiLFwi7Kim7Kin7Kio7KiqXCIsMjgsXCLjhLFcIiw5M10sW1wiYTU0MVwiLFwi7KmHXCIsNCxcIuypjuypj+ypkeypkuypk+yplVwiLDYsXCLsqZ7sqaJcIiw1LFwi7Kmp7KmqXCJdLFtcImE1NjFcIixcIuypq1wiLDE3LFwi7Km+XCIsNSxcIuyqheyqhlwiXSxbXCJhNTgxXCIsXCLsqodcIiwxNixcIuyqmVwiLDE0LFwi4oWwXCIsOV0sW1wiYTViMFwiLFwi4oWgXCIsOV0sW1wiYTVjMVwiLFwizpFcIiwxNixcIs6jXCIsNl0sW1wiYTVlMVwiLFwizrFcIiwxNixcIs+DXCIsNl0sW1wiYTY0MVwiLFwi7KqoXCIsMTksXCLsqr7sqr/sq4Hsq4Lsq4Psq4VcIl0sW1wiYTY2MVwiLFwi7KuGXCIsNSxcIuyrjuyrkOyrkuyrlOyrleyrluyrl+yrmlwiLDUsXCLsq6FcIiw2XSxbXCJhNjgxXCIsXCLsq6jsq6nsq6rsq6vsq61cIiw2LFwi7Ku1XCIsMTgsXCLsrInsrIrilIDilILilIzilJDilJjilJTilJzilKzilKTilLTilLzilIHilIPilI/ilJPilJvilJfilKPilLPilKvilLvilYvilKDilK/ilKjilLfilL/ilJ3ilLDilKXilLjilYLilJLilJHilJrilJnilJbilJXilI7ilI3ilJ7ilJ/ilKHilKLilKbilKfilKnilKrilK3ilK7ilLHilLLilLXilLbilLnilLrilL3ilL7ilYDilYHilYNcIiw3XSxbXCJhNzQxXCIsXCLsrItcIiw0LFwi7KyR7KyS7KyT7KyV7KyW7KyX7KyZXCIsNixcIuysolwiLDddLFtcImE3NjFcIixcIuysqlwiLDIyLFwi7K2C7K2D7K2EXCJdLFtcImE3ODFcIixcIuytheythuyth+ytiuyti+ytjeytjuytj+ytkVwiLDYsXCLsrZrsrZvsrZzsrZ5cIiw1LFwi7K2lXCIsNyxcIuOOleOOluOOl+KEk+OOmOOPhOOOo+OOpOOOpeOOpuOOmVwiLDksXCLjj4rjjo3jjo7jjo/jj4/jjojjjonjj4jjjqfjjqjjjrBcIiw5LFwi446AXCIsNCxcIuOOulwiLDUsXCLjjpBcIiw0LFwi4oSm44+A44+B446K446L446M44+W44+F446t446u446v44+b446p446q446r446s44+d44+Q44+T44+D44+J44+c44+GXCJdLFtcImE4NDFcIixcIuytrVwiLDEwLFwi7K26XCIsMTRdLFtcImE4NjFcIixcIuyuiVwiLDE4LFwi7K6dXCIsNl0sW1wiYTg4MVwiLFwi7K6kXCIsMTksXCLsrrlcIiwxMSxcIsOGw5DCqsSmXCJdLFtcImE4YTZcIixcIsSyXCJdLFtcImE4YThcIixcIsS/xYHDmMWSwrrDnsWmxYpcIl0sW1wiYThiMVwiLFwi44mgXCIsMjcsXCLik5BcIiwyNSxcIuKRoFwiLDE0LFwiwr3ihZPihZTCvMK+4oWb4oWc4oWd4oWeXCJdLFtcImE5NDFcIixcIuyvhVwiLDE0LFwi7K+VXCIsMTBdLFtcImE5NjFcIixcIuyvoOyvoeyvouyvo+yvpeyvpuyvqOyvqlwiLDE4XSxbXCJhOTgxXCIsXCLsr71cIiwxNCxcIuywjuywj+ywkeywkuywk+ywlVwiLDYsXCLssJ7ssJ/ssKDssKPssKTDpsSRw7DEp8SxxLPEuMWAxYLDuMWTw5/DvsWnxYvFieOIgFwiLDI3LFwi4pKcXCIsMjUsXCLikbRcIiwxNCxcIsK5wrLCs+KBtOKBv+KCgeKCguKCg+KChFwiXSxbXCJhYTQxXCIsXCLssKXssKbssKrssKvssK3ssK/ssLFcIiw2LFwi7LC67LC/XCIsNCxcIuyxhuyxh+yxieyxiuyxi+yxjeyxjlwiXSxbXCJhYTYxXCIsXCLssY9cIiw0LFwi7LGW7LGaXCIsNSxcIuyxoeyxouyxo+yxpeyxp+yxqVwiLDYsXCLssbHssbJcIl0sW1wiYWE4MVwiLFwi7LGz7LG07LG2XCIsMjksXCLjgYFcIiw4Ml0sW1wiYWI0MVwiLFwi7LKU7LKV7LKW7LKX7LKa7LKb7LKd7LKe7LKf7LKhXCIsNixcIuyyquyyrlwiLDUsXCLssrbssrfssrlcIl0sW1wiYWI2MVwiLFwi7LK67LK77LK9XCIsNixcIuyzhuyziOyzilwiLDUsXCLss5Hss5Lss5Pss5VcIiw1XSxbXCJhYjgxXCIsXCLss5tcIiw4LFwi7LOlXCIsNixcIuyzreyzruyzr+yzsVwiLDEyLFwi44KhXCIsODVdLFtcImFjNDFcIixcIuyzvuyzv+y0gOy0glwiLDUsXCLstIrstIvstI3stI7stI/stJFcIiw2LFwi7LSa7LSc7LSe7LSf7LSgXCJdLFtcImFjNjFcIixcIuy0oey0ouy0o+y0pey0puy0p+y0qey0quy0q+y0rVwiLDExLFwi7LS6XCIsNF0sW1wiYWM4MVwiLFwi7LS/XCIsMjgsXCLstZ3stZ7stZ/QkFwiLDUsXCLQgdCWXCIsMjVdLFtcImFjZDFcIixcItCwXCIsNSxcItGR0LZcIiwyNV0sW1wiYWQ0MVwiLFwi7LWh7LWi7LWj7LWlXCIsNixcIuy1ruy1sOy1slwiLDUsXCLstblcIiw3XSxbXCJhZDYxXCIsXCLstoFcIiw2LFwi7LaJXCIsMTAsXCLstpbstpfstpnstprstpvstp3stp7stp9cIl0sW1wiYWQ4MVwiLFwi7Lag7Lah7Lai7Laj7Lam7Lao7LaqXCIsNSxcIuy2sVwiLDE4LFwi7LeFXCJdLFtcImFlNDFcIixcIuy3hlwiLDUsXCLst43st47st4/st5FcIiwxNl0sW1wiYWU2MVwiLFwi7LeiXCIsNSxcIuy3qey3quy3q+y3rey3ruy3r+y3sVwiLDYsXCLst7rst7zst75cIiw0XSxbXCJhZTgxXCIsXCLsuIPsuIXsuIbsuIfsuInsuIrsuIvsuI1cIiw2LFwi7LiV7LiW7LiX7LiY7LiaXCIsNSxcIuy4ouy4o+y4pey4puy4p+y4qey4quy4q1wiXSxbXCJhZjQxXCIsXCLsuKzsuK3suK7suK/suLLsuLTsuLZcIiwxOV0sW1wiYWY2MVwiLFwi7LmKXCIsMTMsXCLsuZrsuZvsuZ3suZ7suaJcIiw1LFwi7Lmq7LmsXCJdLFtcImFmODFcIixcIuy5rlwiLDUsXCLsubbsubfsubnsubrsubvsub1cIiw2LFwi7LqG7LqI7LqKXCIsNSxcIuy6kuy6k+y6ley6luy6l+y6mVwiXSxbXCJiMDQxXCIsXCLsuppcIiw1LFwi7Lqi7LqmXCIsNSxcIuy6rlwiLDEyXSxbXCJiMDYxXCIsXCLsurtcIiw1LFwi7LuCXCIsMTldLFtcImIwODFcIixcIuy7llwiLDEzLFwi7Lum7Lun7Lup7Luq7LutXCIsNixcIuy7tuy7ulwiLDUsXCLqsIDqsIHqsITqsIfqsIjqsInqsIrqsJBcIiw3LFwi6rCZXCIsNCxcIuqwoOqwpOqwrOqwreqwr+qwsOqwseqwuOqwueqwvOqxgOqxi+qxjeqxlOqxmOqxnOqxsOqxseqxtOqxt+qxuOqxuuqygOqygeqyg+qyhOqyheqyhuqyieqyiuqyi+qyjOqykOqylOqynOqyneqyn+qyoOqyoeqyqOqyqeqyquqyrOqyr+qysOqyuOqyueqyu+qyvOqyveqzgeqzhOqziOqzjOqzleqzl+qzoOqzoeqzpOqzp+qzqOqzquqzrOqzr+qzsOqzseqzs+qzteqztuqzvOqzveq0gOq0hOq0hlwiXSxbXCJiMTQxXCIsXCLsvILsvIPsvIXsvIbsvIfsvIlcIiw2LFwi7LyS7LyU7LyWXCIsNSxcIuy8ney8nuy8n+y8oey8ouy8o1wiXSxbXCJiMTYxXCIsXCLsvKVcIiw2LFwi7Lyu7LyyXCIsNSxcIuy8uVwiLDExXSxbXCJiMTgxXCIsXCLsvYVcIiwxNCxcIuy9luy9l+y9mey9muy9m+y9nVwiLDYsXCLsvabsvajsvarsvavsvazqtIzqtI3qtI/qtJHqtJjqtJzqtKDqtKnqtKzqtK3qtLTqtLXqtLjqtLzqtYTqtYXqtYfqtYnqtZDqtZTqtZjqtaHqtaPqtazqta3qtbDqtbPqtbTqtbXqtbbqtbvqtbzqtb3qtb/qtoHqtoLqtojqtonqtozqtpDqtpzqtp3qtqTqtrfqt4Dqt4Hqt4Tqt4jqt5Dqt5Hqt5Pqt5zqt6Dqt6Tqt7jqt7nqt7zqt7/quIDquIHquIjquInquIvquI3quJTquLDquLHquLTquLfquLjquLrquYDquYHquYPquYXquYbquYrquYzquY3quY7quZDquZTquZbquZzquZ3quZ/quaDquaHquaXquajquanquazqubDqubhcIl0sW1wiYjI0MVwiLFwi7L2t7L2u7L2v7L2y7L2z7L217L227L237L25XCIsNixcIuy+gey+guy+g+y+hOy+hlwiLDUsXCLsvo1cIl0sW1wiYjI2MVwiLFwi7L6OXCIsMTgsXCLsvqJcIiw1LFwi7L6pXCJdLFtcImIyODFcIixcIuy+qlwiLDUsXCLsvrFcIiwxOCxcIuy/hVwiLDYsXCLqubnqubvqubzqub3quoTquoXquozqurzqur3qur7qu4Dqu4Tqu4zqu43qu4/qu5Dqu5Hqu5jqu5nqu5zqu6jqu6vqu63qu7Tqu7jqu7zqvIfqvIjqvI3qvJDqvKzqvK3qvLDqvLLqvLTqvLzqvL3qvL/qvYHqvYLqvYPqvYjqvYnqvZDqvZzqvZ3qvaTqvaXqvbnqvoDqvoTqvojqvpDqvpHqvpXqvpzqvrjqvrnqvrzqv4Dqv4fqv4jqv4nqv4vqv43qv47qv5Tqv5zqv6jqv6nqv7Dqv7Hqv7Tqv7jrgIDrgIHrgITrgIzrgJDrgJTrgJzrgJ3rgKjrgYTrgYXrgYjrgYrrgYzrgY7rgZPrgZTrgZXrgZfrgZlcIl0sW1wiYjM0MVwiLFwi7L+MXCIsMTksXCLsv6Lsv6Psv6Xsv6bsv6fsv6lcIl0sW1wiYjM2MVwiLFwi7L+qXCIsNSxcIuy/suy/tOy/tlwiLDUsXCLsv73sv77sv7/tgIHtgILtgIPtgIVcIiw1XSxbXCJiMzgxXCIsXCLtgItcIiw1LFwi7YCSXCIsNSxcIu2AmVwiLDE5LFwi64Gd64G864G964KA64KE64KM64KN64KP64KR64KY64KZ64Ka64Kc64Kf64Kg64Kh64Ki64Ko64Kp64KrXCIsNCxcIuuCseuCs+uCtOuCteuCuOuCvOuDhOuDheuDh+uDiOuDieuDkOuDkeuDlOuDmOuDoOuDpeuEiOuEieuEi+uEjOuEkOuEkuuEk+uEmOuEmeuEm+uEnOuEneuEo+uEpOuEpeuEqOuErOuEtOuEteuEt+uEuOuEueuFgOuFgeuFhOuFiOuFkOuFkeuFlOuFleuFmOuFnOuFoOuFuOuFueuFvOuGgOuGguuGiOuGieuGi+uGjeuGkuuGk+uGlOuGmOuGnOuGqOuHjOuHkOuHlOuHnOuHnVwiXSxbXCJiNDQxXCIsXCLtgK5cIiw1LFwi7YC27YC37YC57YC67YC77YC9XCIsNixcIu2Bhu2BiO2BilwiLDVdLFtcImI0NjFcIixcIu2Bke2Bku2Bk+2Ble2Blu2Bl+2BmVwiLDYsXCLtgaFcIiwxMCxcIu2Bru2Br1wiXSxbXCJiNDgxXCIsXCLtgbHtgbLtgbPtgbVcIiw2LFwi7YG+7YG/7YKA7YKCXCIsMTgsXCLrh5/rh6jrh6nrh6zrh7Drh7nrh7vrh73riITriIXriIjriIvriIzriJTriJXriJfriJnriKDriLTriLzriZjriZzriaDriajrianribTribXribzrioTrioXrionripDripHripTripjripnriprriqDriqHriqPriqXriqbriqrriqzrirDrirTri4jri4nri4zri5Dri5Lri5jri5nri5vri53ri6Lri6Tri6Xri6bri6jri6tcIiw0LFwi64uz64u064u164u3XCIsNCxcIuuLv+uMgOuMgeuMhOuMiOuMkOuMkeuMk+uMlOuMleuMnOuNlOuNleuNluuNmOuNm+uNnOuNnuuNn+uNpOuNpVwiXSxbXCJiNTQxXCIsXCLtgpVcIiwxNCxcIu2Cpu2Cp+2Cqe2Cqu2Cq+2CrVwiLDVdLFtcImI1NjFcIixcIu2Cs+2Ctu2CuO2CulwiLDUsXCLtg4Ltg4Ptg4Xtg4btg4ftg4pcIiw1LFwi7YOS7YOWXCIsNF0sW1wiYjU4MVwiLFwi7YOb7YOe7YOf7YOh7YOi7YOj7YOlXCIsNixcIu2Dru2DslwiLDUsXCLtg7lcIiwxMSxcIuuNp+uNqeuNq+uNruuNsOuNseuNtOuNuOuOgOuOgeuOg+uOhOuOheuOjOuOkOuOlOuOoOuOoeuOqOuOrOuPhOuPheuPiOuPi+uPjOuPjuuPkOuPlOuPleuPl+uPmeuPm+uPneuPoOuPpOuPqOuPvOuQkOuQmOuQnOuQoOuQqOuQqeuQq+uQtOuRkOuRkeuRlOuRmOuRoOuRoeuRo+uRpeuRrOuSgOuSiOuSneuSpOuSqOuSrOuSteuSt+uSueuTgOuThOuTiOuTkOuTleuTnOuTneuToOuTo+uTpOuTpuuTrOuTreuTr+uTseuTuOuUlOuUleuUmOuUm+uUnOuUpOuUpeuUp+uUqOuUqeuUquuUsOuUseuUtOuUuFwiXSxbXCJiNjQxXCIsXCLthIVcIiw3LFwi7YSOXCIsMTddLFtcImI2NjFcIixcIu2EoFwiLDE1LFwi7YSy7YSz7YS17YS27YS37YS57YS77YS87YS97YS+XCJdLFtcImI2ODFcIixcIu2Ev+2Fgu2FhlwiLDUsXCLthY7thY/thZHthZLthZPthZVcIiw2LFwi7YWe7YWg7YWiXCIsNSxcIu2Fqe2Fqu2Fq+2FreuVgOuVgeuVg+uVhOuVheuVi+uVjOuVjeuVkOuVlOuVnOuVneuVn+uVoOuVoeuWoOuWoeuWpOuWqOuWquuWq+uWsOuWseuWs+uWtOuWteuWu+uWvOuWveuXgOuXhOuXjOuXjeuXj+uXkOuXkeuXmOuXrOuYkOuYkeuYlOuYmOuYpeuYrOuYtOuZiOuZpOuZqOuanOuaneuaoOuapOuaq+uarOuaseublOubsOubtOubuOucgOucgeucheucqOucqeucrOucr+ucsOucuOucueucu+udhOudiOudjOudlOudleudoOudpOudqOudsOudseuds+udteudvOudveuegOuehOuejOuejeuej+uekOuekeuekuueluuel1wiXSxbXCJiNzQxXCIsXCLtha5cIiwxMyxcIu2FvVwiLDYsXCLthoXthobthofthonthopcIl0sW1wiYjc2MVwiLFwi7YaLXCIsMjAsXCLthqLthqPthqXthqbthqdcIl0sW1wiYjc4MVwiLFwi7YapXCIsNixcIu2Gsu2GtO2Gtu2Gt+2GuO2Gue2Gu+2Gve2Gvu2Gv+2HgVwiLDE0LFwi656Y656Z656c656g656o656p656r656s656t65606561656465+H65+J65+s65+t65+w65+065+865+965+/66CA66CB66CH66CI66CJ66CM66CQ66CY66CZ66Cb66Cd66Ck66Cl66Co66Cs66C066C166C366C466C566GA66GE66GR66GT66Gc66Gd66Gg66Gk66Gs66Gt66Gv66Gx66G466G866KN66Ko66Kw66K066K466OA66OB66OD66OF66OM66OQ66OU66Od66Of66Oh66Oo66Op66Os66Ow66O466O566O766O966SE66SY66Sg66S866S966WA66WE66WM66WP66WR66WY66WZ66Wc66Wg66Wo66WpXCJdLFtcImI4NDFcIixcIu2HkFwiLDcsXCLth5lcIiwxN10sW1wiYjg2MVwiLFwi7YerXCIsOCxcIu2Hte2Htu2Ht+2HuVwiLDEzXSxbXCJiODgxXCIsXCLtiIjtiIpcIiw1LFwi7YiRXCIsMjQsXCLrpavrpa3rpbTrpbXrpbjrpbzrpoTrpoXrpofrponrporrpo3rpo7rpqzrpq3rprDrprTrprzrpr3rpr/rp4Hrp4jrp4nrp4zrp45cIiw0LFwi66eY66eZ66eb66ed66ee66eh66ej66ek66el66eo66es66e066e166e366e466e566e666iA66iB66iI66iV66i466i566i866mA66mC66mI66mJ66mL66mN66mO66mT66mU66mV66mY66mc66mk66ml66mn66mo66mp66mw66mx66m066m466qD66qE66qF66qH66qM66qo66qp66qr66qs66qw66qy66q466q566q766q966uE66uI66uY66uZ66u8XCJdLFtcImI5NDFcIixcIu2Iqu2Iq+2Iru2Ir+2Ise2Isu2Is+2ItVwiLDYsXCLtiL7tiYDtiYJcIiw1LFwi7YmJ7YmK7YmL7YmMXCJdLFtcImI5NjFcIixcIu2JjVwiLDE0LFwi7YmdXCIsNixcIu2Jpe2Jpu2Jp+2JqFwiXSxbXCJiOTgxXCIsXCLtialcIiwyMixcIu2Kgu2Kg+2Khe2Khu2Kh+2Kie2Kiu2Ki+2KjOusgOushOusjeusj+uskeusmOusnOusoOusqeusq+ustOusteustuusuOusu+usvOusveusvuuthOutheuth+utieutjeutj+utkOutlOutmOutoeuto+utrOuuiOuujOuukOuupOuuqOuurOuutOuut+uvgOuvhOuviOuvkOuvk+uvuOuvueuvvOuvv+uwgOuwguuwiOuwieuwi+uwjOuwjeuwj+uwkeuwlFwiLDQsXCLrsJtcIiw0LFwi67Ck67Cl67Cn67Cp67Ct67Cw67Cx67C067C467GA67GB67GD67GE67GF67GJ67GM67GN67GQ67Gd67KE67KF67KI67KL67KM67KO67KU67KV67KXXCJdLFtcImJhNDFcIixcIu2Kje2Kju2Kj+2Kku2Kk+2KlO2KllwiLDUsXCLtip3tip7tip/tiqHtiqLtiqPtiqVcIiw2LFwi7YqtXCJdLFtcImJhNjFcIixcIu2Kru2Kr+2KsO2KslwiLDUsXCLtirrtirvtir3tir7ti4Hti4NcIiw0LFwi7YuK7YuMXCIsNV0sW1wiYmE4MVwiLFwi7YuS7YuT7YuV7YuW7YuX7YuZ7Yua7Yub7YudXCIsNixcIu2LplwiLDksXCLti7Lti7Pti7Xti7bti7fti7nti7rrspnrsprrsqDrsqHrsqTrsqfrsqjrsrDrsrHrsrPrsrTrsrXrsrzrsr3rs4Drs4Trs43rs4/rs5Drs5Hrs5Xrs5jrs5zrs7Trs7Xrs7brs7jrs7zrtITrtIXrtIfrtInrtJDrtJTrtKTrtKzrtYDrtYjrtYnrtYzrtZDrtZjrtZnrtaTrtajrtoDrtoHrtoTrtofrtojrtonrtorrtpDrtpHrtpPrtpXrtpnrtprrtpzrtqTrtrDrtrjrt5Trt5Xrt5jrt5zrt6nrt7Drt7Trt7jruIDruIPruIXruIzruI3ruJDruJTruJzruJ3ruJ/ruYTruYXruYjruYzruY7ruZTruZXruZfruZnruZrruZvruaDruaHruaRcIl0sW1wiYmI0MVwiLFwi7Yu7XCIsNCxcIu2Mgu2MhO2MhlwiLDUsXCLtjI/tjJHtjJLtjJPtjJXtjJdcIiw0LFwi7Yye7Yyi7YyjXCJdLFtcImJiNjFcIixcIu2MpO2Mpu2Mp+2Mqu2Mq+2Mre2Mru2Mr+2MsVwiLDYsXCLtjLrtjL5cIiw1LFwi7Y2G7Y2H7Y2I7Y2JXCJdLFtcImJiODFcIixcIu2NilwiLDMxLFwi67mo67mq67mw67mx67mz67m067m167m767m867m967qA67qE67qM67qN67qP67qQ67qR67qY67qZ67qo67uQ67uR67uU67uX67uY67ug67uj67uk67ul67us67yB67yI67yJ67yY67yZ67yb67yc67yd672A672B672E672I672Q672R672V676U676w67+F67+M67+N67+Q67+U67+c67+f67+h7IC87IGR7IGY7IGc7IGg7IGo7IGp7IKQ7IKR7IKU7IKY7IKg7IKh7IKj7IKl7IKs7IKt7IKv7IKw7IKz7IK07IK17IK27IK87IK97IK/7IOA7IOB7IOF7IOI7IOJ7IOM7IOQ7IOY7IOZ7IOb7IOc7IOd7IOkXCJdLFtcImJjNDFcIixcIu2NqlwiLDE3LFwi7Y2+7Y2/7Y6B7Y6C7Y6D7Y6F7Y6G7Y6HXCJdLFtcImJjNjFcIixcIu2OiO2Oie2Oiu2Oi+2Oju2OklwiLDUsXCLtjprtjpvtjp3tjp7tjp/tjqFcIiw2LFwi7Y6q7Y6s7Y6uXCJdLFtcImJjODFcIixcIu2Or1wiLDQsXCLtjrXtjrbtjrftjrntjrrtjrvtjr1cIiw2LFwi7Y+G7Y+H7Y+KXCIsNSxcIu2PkVwiLDUsXCLsg6Xsg6jsg6zsg7Tsg7Xsg7fsg7nshIDshITshIjshJDshJXshJxcIiw0LFwi7ISj7ISk7ISm7ISn7ISs7ISt7ISv7ISw7ISx7IS27IS47IS57IS87IWA7IWI7IWJ7IWL7IWM7IWN7IWU7IWV7IWY7IWc7IWk7IWl7IWn7IWo7IWp7IWw7IW07IW47IaF7IaM7IaN7IaO7IaQ7IaU7IaW7Iac7Iad7Iaf7Iah7Ial7Iao7Iap7Ias7Iaw7Ia97IeE7IeI7IeM7IeU7IeX7IeY7Ieg7Iek7Ieo7Iew7Iex7Iez7Ie87Ie97IiA7IiE7IiM7IiN7IiP7IiR7IiY7IiZ7Iic7Iif7Iig7Iio7Iip7Iir7IitXCJdLFtcImJkNDFcIixcIu2Pl+2PmVwiLDcsXCLtj6Ltj6RcIiw3LFwi7Y+u7Y+v7Y+x7Y+y7Y+z7Y+17Y+27Y+3XCJdLFtcImJkNjFcIixcIu2PuO2Pue2Puu2Pu+2Pvu2QgO2QglwiLDUsXCLtkIlcIiwxM10sW1wiYmQ4MVwiLFwi7ZCXXCIsNSxcIu2QnlwiLDI1LFwi7Iiv7Iix7Iiy7Ii07ImI7ImQ7ImR7ImU7ImY7Img7Iml7Ims7Imt7Imw7Im07Im87Im97Im/7IqB7IqI7IqJ7IqQ7IqY7Iqb7Iqd7Iqk7Iql7Iqo7Iqs7Iqt7Iq07Iq17Iq37Iq57Iuc7Iud7Iug7Iuj7Iuk7Iur7Ius7Iut7Iuv7Iux7Iu27Iu47Iu57Iu77Iu87IyA7IyI7IyJ7IyM7IyN7IyT7IyU7IyV7IyY7Iyc7Iyk7Iyl7Iyo7Iyp7I2F7I2o7I2p7I2s7I2w7I2y7I247I257I287I297I6E7I6I7I6M7I+A7I+Y7I+Z7I+c7I+f7I+g7I+i7I+o7I+p7I+t7I+07I+17I+47JCI7JCQ7JCk7JCs7JCwXCJdLFtcImJlNDFcIixcIu2QuFwiLDcsXCLtkYHtkYLtkYPtkYVcIiwxNF0sW1wiYmU2MVwiLFwi7ZGUXCIsNyxcIu2Rne2Rnu2Rn+2Roe2Rou2Ro+2RpVwiLDcsXCLtka7tkbDtkbHtkbJcIl0sW1wiYmU4MVwiLFwi7ZGzXCIsNCxcIu2Ruu2Ru+2Rve2Rvu2Sge2Sg1wiLDQsXCLtkortkoztko5cIiw1LFwi7ZKVXCIsOCxcIuyQtOyQvOyQveyRiOyRpOyRpeyRqOyRrOyRtOyRteyRueySgOySlOySnOySuOySvOyTqeyTsOyTseyTtOyTuOyTuuyTv+yUgOyUgeyUjOyUkOyUlOyUnOyUqOyUqeyUrOyUsOyUuOyUueyUu+yUveyVhOyVheyViOyVieyViuyVjOyVjeyVjuyVk+yVlOyVleyVl+yVmOyVmeyVneyVnuyVoOyVoeyVpOyVqOyVsOyVseyVs+yVtOyVteyVvOyVveyWgOyWhOyWh+yWjOyWjeyWj+yWkeyWleyWl+yWmOyWnOyWoOyWqeyWtOyWteyWuOyWueyWu+yWvOyWveyWvuyXhFwiLDYsXCLsl4zsl45cIl0sW1wiYmY0MVwiLFwi7ZKeXCIsMTAsXCLtkqpcIiwxNF0sW1wiYmY2MVwiLFwi7ZK5XCIsMTgsXCLtk43tk47tk4/tk5Htk5Ltk5Ptk5VcIl0sW1wiYmY4MVwiLFwi7ZOWXCIsNSxcIu2Tne2Tnu2ToFwiLDcsXCLtk6ntk6rtk6vtk63tk67tk6/tk7FcIiw2LFwi7ZO57ZO67ZO87JeQ7JeR7JeU7JeY7Jeg7Jeh7Jej7Jel7Jes7Jet7Jeu7Jew7Je07Je27Je37Je8XCIsNSxcIuyYheyYhuyYh+yYiOyYjOyYkOyYmOyYmeyYm+yYnOyYpOyYpeyYqOyYrOyYreyYruyYsOyYs+yYtOyYteyYt+yYueyYu+yZgOyZgeyZhOyZiOyZkOyZkeyZk+yZlOyZleyZnOyZneyZoOyZrOyZr+yZseyZuOyZueyZvOyagOyaiOyaieyai+yajeyalOyaleyamOyanOyapOyapeyap+yaqeyasOyaseyatOyauOyaueyauuybgOybgeybg+ybheybjOybjeybkOyblOybnOybneyboOyboeybqFwiXSxbXCJjMDQxXCIsXCLtk75cIiw1LFwi7ZSF7ZSG7ZSH7ZSJ7ZSK7ZSL7ZSNXCIsNixcIu2Ulu2UmFwiLDVdLFtcImMwNjFcIixcIu2UnlwiLDI1XSxbXCJjMDgxXCIsXCLtlLjtlLntlLrtlLvtlL7tlL/tlYHtlYLtlYPtlYVcIiw2LFwi7ZWO7ZWQ7ZWSXCIsNSxcIu2Vmu2Vm+2Vne2Vnu2Vn+2Voe2Vou2Vo+ybqeybrOybsOybuOybueybveychOycheyciOycjOyclOycleycl+ycmeycoOycoeycpOycqOycsOycseycs+ycteyct+ycvOycveydgOydhOydiuydjOydjeydj+ydkVwiLDcsXCLsnZzsnaDsnajsnavsnbTsnbXsnbjsnbzsnb3snb7snoPsnoTsnoXsnofsnojsnonsnorsno7snpDsnpHsnpTsnpbsnpfsnpjsnprsnqDsnqHsnqPsnqTsnqXsnqbsnqzsnq3snrDsnrTsnrzsnr3snr/sn4Dsn4Hsn4jsn4nsn4zsn47sn5Dsn5jsn53sn6Tsn6jsn6zsoIDsoIHsoITsoIjsoIpcIl0sW1wiYzE0MVwiLFwi7ZWk7ZWm7ZWn7ZWq7ZWs7ZWuXCIsNSxcIu2Vtu2Vt+2Vue2Vuu2Vu+2VvVwiLDYsXCLtlobtlortlotcIl0sW1wiYzE2MVwiLFwi7ZaM7ZaN7ZaO7ZaP7ZaRXCIsMTksXCLtlqbtlqdcIl0sW1wiYzE4MVwiLFwi7ZaoXCIsMzEsXCLsoJDsoJHsoJPsoJXsoJbsoJzsoJ3soKDsoKTsoKzsoK3soK/soLHsoLjsoLzsoYDsoYjsoYnsoYzsoY3soZTsobDsobHsobTsobjsobrsooDsooHsooPsooXsoobsoofsoovsoozsoo3sopTsop3sop/soqHsoqjsorzsor3so4Tso4jso4zso5Tso5Xso5fso5nso6Dso6Hso6Tso7Xso7zso73spIDspITspIXspIbspIzspI3spI/spJHspJjspKzspLTspZDspZHspZTspZjspaDspaHspaPspazspbDspbTspbzspojsponspozsppDsppjsppnsppvspp3sp4Dsp4Hsp4Tsp4fsp4jsp4rsp5Dsp5Hsp5NcIl0sW1wiYzI0MVwiLFwi7ZeK7ZeL7ZeN7ZeO7ZeP7ZeR7ZeTXCIsNCxcIu2Xmu2XnO2XnlwiLDUsXCLtl6btl6ftl6ntl6rtl6vtl63tl65cIl0sW1wiYzI2MVwiLFwi7ZevXCIsNCxcIu2Xtu2XuO2XulwiLDUsXCLtmILtmIPtmIXtmIbtmIftmIlcIiw2LFwi7ZiSXCJdLFtcImMyODFcIixcIu2YllwiLDUsXCLtmJ3tmJ7tmJ/tmKHtmKLtmKPtmKVcIiw3LFwi7ZiuXCIsOSxcIu2Yuu2Yu+ynleynluynmeynmuynnOynneynoOynouynpOynp+ynrOynreynr+ynsOynseynuOynueynvOyogOyoiOyoieyoi+yojOyojeyolOyomOyoqeypjOypjeypkOyplOypnOypneypn+ypoOypoeypqOypveyqhOyqmOyqvOyqveyrgOyrhOyrjOyrjeyrj+yrkeyrk+yrmOyrmeyroOyrrOyrtOysiOyskOyslOysmOysoOysoeytgeytiOytieytjOytkOytmOytmeytneytpOytuOytueyunOyuuOyvlOyvpOyvp+yvqeywjOywjeywkOywlOywnOywneywoeywouywp+ywqOywqeywrOywruywsOywuOywueywu1wiXSxbXCJjMzQxXCIsXCLtmL3tmL7tmL/tmYHtmYLtmYPtmYTtmYbtmYftmYrtmYztmY7tmY/tmZDtmZLtmZPtmZbtmZftmZntmZrtmZvtmZ1cIiw0XSxbXCJjMzYxXCIsXCLtmaJcIiw0LFwi7Zmo7ZmqXCIsNSxcIu2Zsu2Zs+2ZtVwiLDExXSxbXCJjMzgxXCIsXCLtmoHtmoLtmoTtmoZcIiw1LFwi7ZqO7ZqP7ZqR7ZqS7ZqT7ZqVXCIsNyxcIu2anu2aoO2aolwiLDUsXCLtmqntmqrssLzssL3ssL7ssYTssYXssYjssYzssZTssZXssZfssZjssZnssaDssaTssabssajssbDssbXsspjsspnsspzssqDssqjssqnssqvssqzssq3ssrTssrXssrjssrzss4Tss4Xss4fss4nss5Dss5Tss6Tss6zss7DstIHstIjstInstIzstJDstJjstJnstJvstJ3stKTstKjstKzstLnstZzstaDstaTstazsta3sta/stbHstbjstojstpTstpXstpjstpzstqTstqXstqfstqnstrDst4Tst4zst5Dst6jst6zst7Dst7jst7nst7vst73suITsuIjsuIzsuJTsuJnsuKDsuKHsuKTsuKjsuLDsuLHsuLPsuLVcIl0sW1wiYzQ0MVwiLFwi7Zqr7Zqt7Zqu7Zqv7ZqxXCIsNyxcIu2auu2avFwiLDcsXCLtm4btm4ftm4ntm4rtm4tcIl0sW1wiYzQ2MVwiLFwi7ZuN7ZuO7ZuP7ZuQ7ZuS7ZuT7ZuV7ZuW7ZuY7ZuaXCIsNSxcIu2boe2bou2bo+2bpe2bpu2bp+2bqVwiLDRdLFtcImM0ODFcIixcIu2bru2br+2bse2bsu2bs+2btO2btlwiLDUsXCLtm77tm7/tnIHtnILtnIPtnIVcIiwxMSxcIu2cku2ck+2clOy5mOy5mey5nOy5n+y5oOy5oey5qOy5qey5q+y5rey5tOy5tey5uOy5vOy6hOy6hey6h+y6iey6kOy6key6lOy6mOy6oOy6oey6o+y6pOy6pey6rOy6rey7gey7pOy7pey7qOy7q+y7rOy7tOy7tey7t+y7uOy7uey8gOy8gey8hOy8iOy8kOy8key8k+y8ley8nOy8oOy8pOy8rOy8rey8r+y8sOy8sey8uOy9lOy9ley9mOy9nOy9pOy9pey9p+y9qey9sOy9sey9tOy9uOy+gOy+hey+jOy+oey+qOy+sOy/hOy/oOy/oey/pOy/qOy/sOy/sey/s+y/tey/vO2AgO2AhO2Ake2AmO2Are2AtO2Ate2AuO2AvFwiXSxbXCJjNTQxXCIsXCLtnJXtnJbtnJftnJrtnJvtnJ3tnJ7tnJ/tnKFcIiw2LFwi7Zyq7Zys7ZyuXCIsNSxcIu2ctu2ct+2cuVwiXSxbXCJjNTYxXCIsXCLtnLrtnLvtnL1cIiw2LFwi7Z2F7Z2G7Z2I7Z2KXCIsNSxcIu2dku2dk+2dle2dmlwiLDRdLFtcImM1ODFcIixcIu2dn+2dou2dpO2dpu2dp+2dqO2dqu2dq+2dre2dru2dr+2dse2dsu2ds+2dtVwiLDYsXCLtnb7tnb/tnoDtnoJcIiw1LFwi7Z6K7Z6L7YGE7YGF7YGH7YGJ7YGQ7YGU7YGY7YGg7YGs7YGt7YGw7YG07YG87YG97YKB7YKk7YKl7YKo7YKs7YK07YK17YK37YK57YOA7YOB7YOE7YOI7YOJ7YOQ7YOR7YOT7YOU7YOV7YOc7YOd7YOg7YOk7YOs7YOt7YOv7YOw7YOx7YO47YSN7YSw7YSx7YS07YS47YS67YWA7YWB7YWD7YWE7YWF7YWM7YWN7YWQ7YWU7YWc7YWd7YWf7YWh7YWo7YWs7YW87YaE7YaI7Yag7Yah7Yak7Yao7Yaw7Yax7Yaz7Ya17Ya67Ya87YeA7YeY7Ye07Ye47YiH7YiJ7YiQ7Yis7Yit7Yiw7Yi07Yi87Yi97Yi/7YmB7YmI7YmcXCJdLFtcImM2NDFcIixcIu2eje2eju2ej+2ekVwiLDYsXCLtnprtnpztnp5cIiw1XSxbXCJjNmExXCIsXCLtiaTtioDtioHtioTtiojtipDtipHtipXtipztiqDtiqTtiqztirHtirjtirntirztir/ti4Dti4Lti4jti4nti4vti5Tti5jti5zti6Tti6Xti7Dti7Hti7Tti7jtjIDtjIHtjIPtjIXtjIztjI3tjI7tjJDtjJTtjJbtjJztjJ3tjJ/tjKDtjKHtjKXtjKjtjKntjKztjLDtjLjtjLntjLvtjLztjL3tjYTtjYXtjbztjb3tjoDtjoTtjoztjo3tjo/tjpDtjpHtjpjtjpntjpztjqDtjqjtjqntjqvtjq3tjrTtjrjtjrztj4Ttj4Xtj4jtj4ntj5Dtj5jtj6Htj6Ptj6ztj63tj7Dtj7Ttj7ztj73tj7/tkIFcIl0sW1wiYzdhMVwiLFwi7ZCI7ZCd7ZGA7ZGE7ZGc7ZGg7ZGk7ZGt7ZGv7ZG47ZG57ZG87ZG/7ZKA7ZKC7ZKI7ZKJ7ZKL7ZKN7ZKU7ZKp7ZOM7ZOQ7ZOU7ZOc7ZOf7ZOo7ZOs7ZOw7ZO47ZO77ZO97ZSE7ZSI7ZSM7ZSU7ZSV7ZSX7ZS87ZS97ZWA7ZWE7ZWM7ZWN7ZWP7ZWR7ZWY7ZWZ7ZWc7ZWg7ZWl7ZWo7ZWp7ZWr7ZWt7ZW07ZW17ZW47ZW87ZaE7ZaF7ZaH7ZaI7ZaJ7ZaQ7Zal7ZeI7ZeJ7ZeM7ZeQ7ZeS7ZeY7ZeZ7Zeb7Zed7Zek7Zel7Zeo7Zes7Ze07Ze17Ze37Ze57ZiA7ZiB7ZiE7ZiI7ZiQ7ZiR7ZiT7ZiU7ZiV7Zic7ZigXCJdLFtcImM4YTFcIixcIu2YpO2Yre2YuO2Yue2YvO2ZgO2Zhe2ZiO2Zie2Zi+2Zje2Zke2ZlO2Zle2ZmO2ZnO2Zp+2Zqe2ZsO2Zse2ZtO2ag+2ahe2ajO2aje2akO2alO2ane2an+2aoe2aqO2arO2asO2aue2au+2bhO2bhe2biO2bjO2bke2blO2bl+2bme2boO2bpO2bqO2bsO2bte2bvO2bve2cgO2chO2cke2cmO2cme2cnO2coO2cqO2cqe2cq+2cre2ctO2cte2cuO2cvO2dhO2dh+2die2dkO2dke2dlO2dlu2dl+2dmO2dme2doO2doe2do+2dpe2dqe2drO2dsO2dtO2dvO2dve2ege2eiO2eie2ejO2ekO2emO2eme2em+2enVwiXSxbXCJjYWExXCIsXCLkvL3kvbPlgYflg7nliqDlj6/lkbXlk6XlmInlq4Hlrrbmmofmnrbmnrfmn6/mrYznj4Lnl4LnqLzoi5vojITooZfooojoqLbos4jot4/ou7vov6bpp5XliLvljbTlkITmgarmhaTmrrznj4/ohJroprrop5LplqPkvoPliIrlor7lpbjlp6blubLlubnmh4fmj4DmnYbmn6zmob/mvpfnmY7nnIvno7XnqIjnq7/nsKHogp3oia7oibHoq6vplpPkuavllp3mm7fmuLTnoqPnq63okZvopJDonY7pnqjli5jlnY7loKrltYzmhJ/mhr7miKHmlaLmn5HmqYTmuJvnlJjnlrPnm6PnnrDntLrpgq/pkZHpkZLpvpVcIl0sW1wiY2JhMVwiLFwi5Yyj5bKs55Sy6IOb6YmA6ZaY5Ymb5aCI5aec5bKh5bSX5bq35by65b2K5oW35rGf55W655aG57Og57Wz57ax576M6IWU6Iih6JaR6KWB6Kyb6Yu86ZmN6bGH5LuL5Lu35YCL5Yex5aGP5oS35oS+5oWo5pS55qeq5ryR55al55qG55uW566H6Iql6JOL76SA6Y6n6ZaL5ZaA5a6i5Z2R76SB57Kz57656Ya15YCo5Y675bGF5beo5ouS5o2u5pOa5pOn5rig54Ks56Wb6Led6Lie76SC6YG96YmF6Yu45Lm+5Lu25YGl5be+5bu65oSG5qWX6IWx6JmU6LmH6Y216air5Lme5YKR5p2w5qGA5YSJ5YqN5YqS5qqiXCJdLFtcImNjYTFcIixcIueevOmIkOm7lOWKq+aAr+i/suWBiOaGqeaPreaTiuagvOaqhOa/gOiGiOimoemalOWgheeJveeKrOeUhOe1uee5reiCqeimi+ittOmBo+m1keaKieaxuua9lOe1kOe8uuioo+WFvOaFiueuneismemJl+mOjOS6rOS/k+WAnuWCvuWEhuWLgeWLjeWNv+WdsOWig+W6muW+keaFtuaGrOaTjuaVrOaZr+aau+abtOail+a2h+eCheeDseeSn+eSpeeTiueXmeehrOejrOern+ertue1hee2k+iAleiAv+iEm+iOluitpui8lemAlemPoemgg+mguOmpmumvqOS/guWVk+WguuWlkeWto+WxhuaCuOaIkuahguaisFwiXSxbXCJjZGExXCIsXCLmo6jmuqrnlYznmbjno47nqL3ns7vnuavnubzoqIjoqqHosL/pmo7pt4Tlj6Tlj6nlkYrlkbHlm7rlp5HlraTlsLvluqvmi7fmlLfmlYXmlbLmmqDmnq/mp4Hmsr3nl7znmpDnnb7nqL/nvpTogIPogqHoho/oi6boi73oj7Dol4HooLHoorToqqXvpIPovpzpjK7pm4fpoafpq5jpvJPlk63mlpvmm7Lmoo/nqYDosLfptaDlm7DlnaTltJHmmIbmorHmo43mu77nkKjoop7pr6TmsajvpITpqqjkvpvlhazlhbHlip/lrZTlt6XmgZDmga3mi7HmjqfmlLvnj5nnqbromqPosqLpno/kuLLlr6HmiIjmnpznk5xcIl0sW1wiY2VhMVwiLFwi56eR6I+T6KqH6Kqy6Leo6YGO6Y2L6aGG5buT5qeo6Je/6YOt76SF5Yag5a6Y5a+s5oWj5qO65qy+54GM55Cv55OY566h572Q6I+F6KeA6LKr6Zec6aSo5Yiu5oGd5ous6YCC5L6K5YWJ5Yyh5aOZ5buj5pug5rS454Ka54uC54+W562Q6IOx6ZGb5Y2m5o6b572r5LmW5YKA5aGK5aOe5oCq5oSn5ouQ5qeQ6a2B5a6P57SY6IKx6L2f5Lqk5YOR5ZKs5Zas5ayM5bag5ben5pSq5pWO5qCh5qmL54uh55qO55+v57We57+56Iag6JWO6Juf6LyD6L2O6YOK6aSD6amV6a6r5LiY5LmF5Lmd5LuH5L+x5YW35Yu+XCJdLFtcImNmYTFcIixcIuWNgOWPo+WPpeWSjuWYlOWdteWeouWvh+W2h+W7kOaHvOaLmOaVkeaeuOafqeani+atkOavhuavrOaxgua6neeBuOeLl+eOlueQg+eev+efqeeptue1v+iAieiHvOiIheiIiuiLn+ihouiss+izvOi7gOmAkemCsemJpOmKtumnkumphemzqem3l+m+nOWci+WxgOiPiumeoOmeq+m6tOWQm+eqmOe+pOijmei7jemDoeWggOWxiOaOmOeqn+WuruW8k+epueeqruiKjui6rOWApuWIuOWLuOWNt+WciOaLs+aNsuasiua3g+ect+WOpeeNl+iVqOi5tumXleacuuarg+a9sOiprei7jOmli++khuaZt+atuOiytFwiXSxbXCJkMGExXCIsXCLprLzvpIflj6vlnK3lpY7mj4bmp7vnj6rnoYXnqrrnq4Xns77okbXopo/otbPpgLXplqjli7vlnYfnlYfnraDoj4zpiJ7vpIjmqZjlhYvliYvliofmiJ/mo5jmpbXpmpnlg4XliqTli6Tmh4PmlqTmoLnmp7/nkb7nrYvoirnoj6voprLorLnov5HppYnvpInku4rlppfmk5LmmJHmqo7nkLTnpoHnpr3oiqnoob7oob/opZ/vpIrpjKbkvIvlj4rmgKXmibHmsbLntJrntabkupjlhaLnn5zogq/kvIHkvI7lhbblhoDll5zlmajlnLvln7rln7zlpJTlpYflppPlr4TlspDltI7lt7Hlub7lv4zmioDml5fml6NcIl0sW1wiZDFhMVwiLFwi5pye5pyf5p2e5qOL5qOE5qmf5qy65rCj5rG95rKC5reH546Y55Cm55Cq55KC55Kj55W455W/56KB56Ov56WB56WH56WI56W6566V57SA57a6576I6ICG6ICt6IKM6KiY6K2P6LGI6LW36Yyh6Yyk6aOi6aWR6aiO6aiP6aml6bqS57eK5L225ZCJ5ouu5qGU6YeR5Zar5YS676SL76SM5aic5oem76SN5ouP5ou/76SOXCIsNSxcIumCo++klFwiLDQsXCLoq77vpJnvpJrvpJvvpJzmmpbvpJ3nhZbvpJ7vpJ/pm6PvpKDmjY/mjbrljZfvpKHmno/mpaDmubPvpKLnlLfvpKPvpKTvpKVcIl0sW1wiZDJhMVwiLFwi57SN76Sm76Sn6KGy5ZuK5aiY76SoXCIsNCxcIuS5g++kreWFp+WliOafsOiAkO+kruWls+W5tOaSmueniuW/teaBrOaLiOaNu+Wvp+Wvl+WKqu+kr+WltOW8qeaAku+ksO+kse+ksueRme+ks1wiLDUsXCLpp5HvpLlcIiwxMCxcIua/g++lhO+lheiGv+i+suaDse+lhu+lh+iFpu+liO+lieWwv++lilwiLDcsXCLlq6noqKXmnbvntJDvpZJcIiw1LFwi6IO976WY76WZ5bC85rOl5Yy/5rq65aSa6Iy2XCJdLFtcImQzYTFcIixcIuS4ueS6tuS9huWWruWcmOWjh+W9luaWt+aXpuaqgOautea5jeefreerr+ewnue3nuibi+iikumEsumNm+aSu+a+vueNuueWuOmBlOWVluWdjeaGuuaTlOabh+a3oea5m+a9rea+ueeXsOiBg+iGveiVgeimg+irh+itmumMn+ayk+eVk+etlOi4j+mBneWUkOWgguWhmOW5ouaIh+aSnuajoOeVtuezluies+m7qOS7o+WeiOWdruWkp+WwjeWyseW4tuW+heaItOaToeeOs+iHuuiii+iyuOmaium7m+WuheW+t+aCs+WAkuWIgOWIsOWcluWgteWhl+WwjuWxoOWztuW2i+W6puW+kuaCvOaMkeaOieaQl+ahg1wiXSxbXCJkNGExXCIsXCLmo7nmq4Lmt5jmuKHmu5Tmv6Tnh77nm5znnbnnprHnqLvokITopqnos63ot7PouYjpgIPpgJTpgZPpg73pjY3pmbbpn5zmr5LngIbniZjniqLnjajnnaPnpr/nr6TnupvoroDloqnmg4fmlabml73mmr7msoznhJ7nh4nosZrpoJPkua3nqoHku53lhqzlh43li5XlkIzmhqfmnbHmoZDmo5/mtJ7mvbznlrznnrPnq6Xog7TokaPpioXlhZzmlpfmnZzmnpPnl5jnq4fojbPvpZrosYbpgJfpoK3lsa/oh4DoiprpgYHpga/piI3lvpfltp3mqZnnh4jnmbvnrYnol6TorITphKfpqLDllofmh7bvpZvnmannvoVcIl0sW1wiZDVhMVwiLFwi6Ji/6J666KO46YKP76Wc5rSb54OZ54+e57Wh6JC976Wd6YWq6aex76We5LqC5Y215qyE5qyS54C+54ib6Jit6bie5YmM6L6j5bWQ5pOl5pSs5qyW5r+r57GD57qc6JeN6KWk6Ka95ouJ6IeY6KCf5buK5pyX5rWq54u855CF55Gv6J6C6YOe5L6G5bSN5b6g6JCK5Ya35o6g55Wl5Lqu5YCG5YWp5YeJ5qKB5qiR57Ku57Kx57On6Imv6KuS6Lyb6YeP5L625YS35Yu15ZGC5bus5oWu5oi+5peF5qua5r++56Sq6Jec6KCj6Zat6ami6amq6bqX6buO5Yqb5puG5q2354Cd56Sr6L2i6Z2C5oaQ5oiA5pSj5ryjXCJdLFtcImQ2YTFcIixcIueFieeSiee3tOiBr+iTrui8pumAo+mNiuWGveWIl+WKo+a0jOeDiOijguW7ieaWguaurua/guewvueNteS7pOS8tuWbue+ln+WyuuW2uuaAnOeOsuesree+mue/juiBhumAnumItOmbtumdiOmgmOm9oeS+i+a+p+emrumGtOmat+WLnu+loOaSiOaThOark+a9nueAmOeIkOebp+iAgeiYhuiZnOi3r+i8hemcsumtr+m3uum5teeijOelv+e2oOiPiemMhOm5v+m6k+irluWjn+W8hOacp+eAp+eTj+exoOiBvuWEoeeAqOeJouejiuizguizmuiztOmbt+S6huWDmuWvruW7luaWmeeHjueZgueereiBiuiTvFwiXSxbXCJkN2ExXCIsXCLpgbzprKfpvo3lo5jlqYHlsaLmqJPmt5rmvI/nmLvntK/nuLfolJ7opLjpj6TpmYvlionml5Lmn7PmprTmtYHmupzngI/nkInnkaDnlZnnmKTnoavorKzpoZ7lha3miK7pmbjkvpblgKvltJnmt6rntrjovKrlvovmhYTmoJfvpaHpmobli5Logovlh5zlh4zmpZ7nqJzntr7oj7HpmbXkv5rliKnljpjlkI/llI7lsaXmgqfmnY7moqjmtaznioHni7jnkIbnkoPvpaLnl6Lnsaznvbnnvrjojonoo4/oo6Hph4zph5Dpm6Lpr4nlkJ3mvb7nh5Dnkpjol7rouqrpmqPpsZfpup/mnpfmt4vnkLPoh6jpnJbnoKxcIl0sW1wiZDhhMVwiLFwi56uL56yg57KS5pGp55Gq55ey56K856Oo6aas6a2U6bq75a+e5bmV5ryg6Iac6I6r6YKI5LiH5Y2N5aip5beS5b2O5oWi5oy95pmp5pu85ru/5ryr54Gj556e6JCs6JST6KC76LyT6aWF6bC75ZSc5oq55pyr5rKr6IyJ6KWq6Z265Lqh5aaE5b+Y5b+Z5pyb57ay572U6IqS6Iyr6I696Lye6YKZ5Z+L5aa55aqS5a+Q5pin5p6a5qKF5q+P54Wk57216LK36LOj6YKB6a2F6ISI6LKK6ZmM6amA6bql5a2f5rCT54yb55uy55uf6JCM5Yaq6KaT5YWN5YaV5YuJ5qOJ5rKU55yE55yg57a/57es6Z2i6bq15ruFXCJdLFtcImQ5YTFcIixcIuiUkeWGpeWQjeWRveaYjuaaneakp+a6n+eav+eekeiMl+iTguien+mFqemKmOmztOiiguS+ruWGkuWLn+WnhuW4veaFleaRuOaRueaaruafkOaooeavjeavm+eJn+eJoeeRgeecuOefm+iAl+iKvOiMheisgOisqOiyjOacqOaykOeJp+ebruedpuephum2qeatv+aykuWkouacpuiSmeWNr+Wik+WmmeW7n+aPj+aYtOads+a4uueMq+erl+iLl+mMqOWLmeW3q+aGruaHi+aIiuaLh+aSq+aXoOalmeatpuavi+eEoeePt+eVnee5huiInuiMguiVquiqo+iyv+mcp+m1oeWiqOm7mOWAkeWIjuWQu+WVj+aWh1wiXSxbXCJkYWExXCIsXCLmsbbntIrntIvogZ7omorploDpm6/li7/mspXnianlkbPlqprlsL7ltYvlvYzlvq7mnKrmorbmpaPmuLzmuYTnnInnsbPnvo7oloforI7ov7fpnaHpu7TlsrfmgrbmhI3mhqvmlY/ml7vml7zmsJHms6/njp/nj4nnt6HplpTlr4bonJzorJDliZ3ljZrmi43mkI/mkrLmnLTmqLjms4rnj4Dnkp7nrpTnspXnuJvohoroiLboloTov6vpm7npp4HkvLTljYrlj43lj5vmi4zmkKzmlIDmlpHmp4Pms67mvZjnj63nlZTnmKLnm6Tnm7zno5Dno7vnpKzntYboiKzon6Dov5TpoJLpo6/li4Pmi5TmkqXmuKTmvZFcIl0sW1wiZGJhMVwiLFwi55m86LeL6Yax6Ymi6auu6a2D5YCj5YKN5Z2K5aao5bCo5bmH5b235oi/5pS+5pa55peB5piJ5p6L5qac5ruC56OF57Sh6IKq6IaA6Iir6Iqz6JKh6JqM6Kiq6KyX6YKm6Ziy6b6Q5YCN5L+z76Wj5Z+55b6Y5ouc5o6S5p2v5rmD54SZ55uD6IOM6IOa6KO06KO16KSZ6LOg6Lyp6YWN6Zmq5Lyv5L2w5bib5p+P5qCi55m955m+6a2E5bmh5qiK54Wp54eU55Wq76Wk57mB6JWD6Jep6aOc5LyQ562P572w6Zal5Yeh5biG5qK15rC+5rGO5rOb54qv56+E6IyD5rOV55C65YO75YqI5aOB5pOY5qqX55Kn55mWXCJdLFtcImRjYTFcIixcIueip+iYl+mXoumcue+lpeWNnuW8geiuiui+qOi+r+mCiuWIpeeepemxiem8iOS4meWAguWFteWxm+W5t+aYnuaYuuafhOajheeCs+eUgeeXheenieernei8p+mkoOmoiOS/neWgoeWgseWvtuaZruatpea0kea5uua9veePpOeUq+iPqeijnOikk+itnOi8lOS8j+WDleWMkOWNnOWuk+W+qeacjeemj+iFueiMr+iUlOikh+imhui8uei8u+mmpemwkuacrOS5tuS/uOWlieWwgeWzr+WzsOaNp+ajkueDveeGoueQq+e4q+iTrOicgumAoumLkumzs+S4jeS7mOS/r+WCheWJluWJr+WQpuWSkOWfoOWkq+WpplwiXSxbXCJkZGExXCIsXCLlrZrlrbXlr4zlupzvpabmibbmlbfmlqfmta7muqXniLbnrKbnsL/nvLbohZDohZHohproiYDoipnojqnoqIPosqDos6bos7votbTotrrpg6jph5zpmJzpmYTpp5nps6fljJfliIblkKnlmbTlorPlpZTlpa7lv7/mhqTmia7mmJDmsb7nhJrnm4bnsonns57ntJvoiqzos4Hpm7DvpafkvZvlvJflvb/mi4LltKnmnIvmo5rnobznuYPptazkuJXlgpnljJXljKrljZHlpoPlqaLluofmgrLmhormiYnmibnmlpDmnofmpqfmr5Tmr5bmr5fmr5jmsrjvpajnkLXnl7rnoJLnopHnp5Xnp5jnsoPnt4vnv6HogqVcIl0sW1wiZGVhMVwiLFwi6IS+6IeC6I+y6Jya6KOo6Kq56K2s6LK76YSZ6Z2e6aOb6by75Zqs5ayq5b2s5paM5qqz5q6v5rWc5r+x54CV54md546t6LKn6LOT6aC75oaR5rC36IGY6aiB5LmN5LqL5Lqb5LuV5Ly65Ly85L2/5L+f5YO/5Y+y5Y+45ZSG5Zej5Zub5aOr5aWi5aiR5a+r5a+65bCE5bez5bir5b6Z5oCd5o2o5pac5pav5p+25p+75qKt5q275rKZ5rOX5rij54CJ542F56CC56S+56WA56Wg56eB56+p57SX57Wy6IKG6IiN6I6O6JOR6JuH6KOf6KmQ6Kme6Kyd6LOc6LWm6L6t6YKq6aO86aef6bqd5YmK76Wp5pyU76WqXCJdLFtcImRmYTFcIixcIuWCmOWIquWxseaVo+axleePiueUo+eWneeul+iSnOmFuOmcsOS5t+aSkuauuueFnuiWqeS4ie+lq+adieajrua4l+iKn+iUmOihq+aPt+a+gemIkumir+S4iuWCt+WDj+WEn+WVhuWWquWYl+WtgOWwmeWzoOW4uOW6iuW6oOW7guaDs+ahkeapoea5mOeIveeJgOeLgOebuOelpeeusee/lOijs+intOips+ixoeiznumcnOWhnueSveizveWXh++lrOepoee0ouiJsueJsueUn+eUpe+lreesmeWiheWju+W2vOW6j+W6tuW+kOaBleaKkuaNv+aVjeaakeabmeabuOagluajsueKgOeRnuetrue1rue3lue9slwiXSxbXCJlMGExXCIsXCLog6XoiJLolq/opb/oqpPpgJ3pi6Tpu43pvKDlpJXlpa3luK3mg5zmmJTmmbPmnpDmsZDmt4XmvZ/nn7Pnoqnok4bph4vpjKvku5nlg4rlhYjlloTlrIvlrqPmiYfmlb7ml4vmuLLnhb3nkIHnkYTnkofnkr/nmaznpqrnt5rnuZXnvqjohbrohrPoiLnomJron6zoqbXot6PpgbjpipHpkKXppY3prq7ljajlsZHmpZTms4TmtKnmuKvoiIzolpvopLvoqK3oqqrpm6rpvafliaHmmrnmrrLnupbon77otI3ploPpmZ3mlJ3mtonnh67vpa7ln47lp5PlrqzmgKfmg7rmiJDmmJ/mmZ/njKnnj7nnm5vnnIHnraxcIl0sW1wiZTFhMVwiLFwi6IGW6IGy6IWl6Kqg6YaS5LiW5Yui5q2y5rSX56iF56y557Sw76Wv6LKw5Y+s5Ziv5aGR5a615bCP5bCR5bei5omA5o6D5pCU5pit5qKz5rK85raI5rqv54Cf54Kk54eS55Sm55aP55aO55iZ56yR56+g57Cr57Sg57S56JSs6JWt6JiH6Ki06YCN6YGh6YK16Yq36Z+26ai35L+X5bGs5p2f5raR57Kf57qM6KyW6LSW6YCf5a2r5be95pCN6JOA6YGc6aOh546H5a6L5oKa5p2+5ree6Kif6Kqm6YCB6aCM5Yi376Ww54GR56KO6Y6W6KGw6YeX5L+u5Y+X5Ze95Zua5Z6C5aO95auC5a6I5bKr5bOA5bil5oSBXCJdLFtcImUyYTFcIixcIuaIjeaJi+aOiOaQnOaUtuaVuOaoueauiuawtOa0mea8seeHp+eLqeeNuOeQh+eSsueYpuedoeengOepl+erqueyuee2j+e2rOe5oee+nuiEqeiMseiSkOiTmuiXquiiluiqsOiukOi8uOmBgumCg+mFrOmKlumKuemai+map+maqOmblumcgOmgiOmmlumrk+msmuWPlOWhvuWkmeWtsOWuv+a3kea9mueGn+eQoeeSueiCheiPveW3oeW+h+W+quaBguaXrOagkualr+apk+auiea0tea3s+ePo+ebvueerOetjee0lOiEo+iInOiNgOiTtOiVo+ipouirhOmGh+mMnumghummtOaIjOihk+i/sOmJpeW0h+W0p1wiXSxbXCJlM2ExXCIsXCLltannkZ/ohp3onajmv5Xmi77nv5LopLbopbLkuJ7kuZjlg6fli53ljYfmib/mmIfnuanooIXpmZ7kvo3ljJnlmLblp4vlqqTlsLjlsY7lsY3luILlvJHmgYPmlr3mmK/mmYLmnr7mn7TnjJznn6LnpLrnv4XokpTok43oppboqaboqanoq6HosZXosbrln7Tlr5TlvI/mga/mi63mpI3mrpbmuZznhoTnr5LonZXorZjou77po5/po77kvLjkvoHkv6HlkbvlqKDlrrjmhLzmlrDmmajnh7znlLPnpZ7ntLPohY7oh6Pojpjolqrol47onIPoqIrouqvovpvvpbHov4XlpLHlrqTlr6bmgonlr6nlsIvlv4PmsoFcIl0sW1wiZTRhMVwiLFwi76Wy5rex54CL55Sa6Iqv6Ku25LuA5Y2B76Wz6ZuZ5rCP5Lqe5L+E5YWS5ZWe5ail5bOo5oiR54mZ6Iq96I6q6Ju+6KGZ6Kid6Zi/6ZuF6aST6bSJ6bWd5aCK5bKz5ba95bmE5oOh5oSV5o+h5qiC5ril6YSC6Y2U6aGO6bCQ6b235a6J5bK45oyJ5pmP5qGI55y86ZuB6Z6N6aGU6a6f5pah6KyB6LuL6Za85ZS15bKp5beW5bq15pqX55mM6I+06ZeH5aOT5oq854uO6bSo5Luw5aSu5oCP5pi75q6D56en6bSm5Y6T5ZOA5Z+D5bSW5oSb5puW5rav56KN6Im+6ZqY6Z2E5Y6E5om85o6W5ray57iK6IWL6aGNXCJdLFtcImU1YTFcIixcIuaru+e9jOm2r+m4muS5n+WAu+WGtuWknOaDueaPtuaksOeIuuiAtu+ltOmHjuW8se+lte+ltue0hOiLpeiRr+iSu+iXpei6je+lt+S9r++luO+lueWjpOWtg+aBmeaPmuaUmOaVreaamO+luualiuaoo+a0i+eAgeeFrOeXkueYjeems+epsO+lu+e+iu+lvOilhO+lveiuk+mHgOmZve+lvumkiuWchOW+oeaWvOa8geeYgOempuiqnummremtmum9rOWEhOaGtuaKkeaqjeiHhuWBg+WgsOW9pueEieiogOiruuWtvOiYluS/uuWEvOWatOWlhOaOqea3ueW2qualreWGhuS6iOS9me+lv++mgO+mgeWmgu+mglwiXSxbXCJlNmExXCIsXCLvpoPmrZ/msZ3vpoTnkrXnpJbvpoXoiIfoiYXojLnovL/ovZ3vpobppJjvpofvpojvponkuqbvporln5/lvbnmmJPvpovvpoznlqvnubnora/vpo3pgIbpqZvlmqXloKflp7jlqJ/lrrTvpo7lu7bvpo/vppDmjZDmjLvvppHmpL3msofmsr/mto7mtpPmt7XmvJTvppLng5/nhLbnhZnvppPnh4Pnh5XvppTnoY/noa/vppXnrbXnt6PvppbnuK/vppfooY3ou5/vppjvppnvpprpiZvvppvps7bvppzvpp3vpp7mgoXmtoXvpp/nhrHvpqDvpqHplrHljq3vpqLvpqPvpqTmn5PvpqXngo7nhLDnkLDoibboi5JcIl0sW1wiZTdhMVwiLFwi76am6Za76aul6bm95puE76an54eB6JGJ76ao76ap5aGL76aq76ar5ba45b2x76as5pig5pqO5qW55qau5rC45rOz5ri25r2B5r+a54Cb54Cv54WQ54ef542w76at55Gb76au55OU55uI56mO57qT76av76aw6Iux6Kmg6L+O76ax6Y2I76ay6ZyZ76az76a05LmC5YCq76a15YiI5Y+h5puz5rGt5r+K54yK552/56mi6Iqu6Jed6JiC76a26KOU6Kmj6K296LGr76a36Yqz76a46ZyT6aCQ5LqU5LyN5L+J5YKy5Y2I5ZC+5ZCz5Zea5aGi5aK65aWn5aib5a+k5oKf76a55oeK5pWW5pe/5pmk5qKn5rGa5r6zXCJdLFtcImU4YTFcIixcIueDj+eGrOeNkuetveiciOiqpOmwsum8h+Wxi+ayg+eNhOeOiemIuua6q+eRpeeYn+epqee4leiYiuWFgOWjheaTgeeTrueUleeZsOe/gemClembjemllOa4pueTpueqqeeqquiHpeibmeiduOiom+WpieWujOWum+aioeakgOa1o+eOqeeQk+eQrOeil+e3qee/q+iEmOiFleiOnuixjOmYrumgkeabsOW+gOaXuuaeieaxqueOi+WAreWog+atquefruWkluW1rOW3jeeMpeeVj++muu+mu+WDpeWHueWgr+WkreWmluWnmuWvpe+mvO+mveW2ouaLl+aQluaSk+aTvu+mvuabnO+mv+apiO+ngOeHv+eRpO+ngVwiXSxbXCJlOWExXCIsXCLnqojnqq/nuYfnuZ7ogIDohbDvp4Lon6/opoHorKDpgZnvp4PpgoDppZLmhb7mrLLmtbTnuJ/opKXovrHkv5Hlgq3lhpfli4fln4floonlrrnlurjmhYLmppXmtozmuafmurbnhpTnkaLnlKjnlKzogbPojLjok4nouIrpjpTpj57vp4Tkuo7kvZHlgbblhKrlj4jlj4vlj7Plroflr5PlsKTmhJrmhoLml7TniZvnjpfnkYDnm4LnpZDnppHnprnntIbnvr3oiovol5XomZ7ov4LpgYfpg7Xph6rpmoXpm6jpm6nli5blvafml63mmLHmoK/nhZznqLbpg4HpoIrkupHvp4XmqZLmrp7mvpDnhonogJjoirjolZNcIl0sW1wiZWFhMVwiLFwi6YGL6ZqV6Zuy6Z+76JSa6ayx5LqQ54aK6ZuE5YWD5Y6f5ZOh5ZyT5ZyS5Z6j5aqb5auE5a+D5oCo5oS/5o+05rKF5rS55rmy5rqQ54iw54y/55GX6IuR6KKB6L2F6YGg76eG6Zmi6aGY6bSb5pyI6LaK6Yme5L2N5YGJ5YOe5Y2x5ZyN5aeU5aiB5bCJ5oWw5pqQ5rit54iy55GL57ev6IOD6JCO6JGm6JS/6J2f6KGb6KSY6KyC6YGV6Z+L6a2P5Lmz5L6R5YSS5YWq76eH5ZSv5Zap5a265a6l5bm85bm95bq+5oKg5oOf5oSI5oSJ5o+E5pS45pyJ76eI5p+U5p+a76eJ5qWh5qWi5rK55rSn76eK5ri476eLXCJdLFtcImViYTFcIixcIua/oeeMtueMt++njOeRnOeUse+njeeZku+nju+nj+e2reiHvuiQuOijleiqmOirm+irrei4sOi5gumBiumAvumBuumFiemHiemNru+nkO+nkeWgie+nkuavk+iCieiCsu+nk++nlOWFgeWlq+Wwue+nle+nlua9pOeOp+iDpOi0h++nl+mIl+mWj++nmO+nme+nmu+nm+iBv+aIjueAnOe1qOieje+nnOWeoOaBqeaFh+aut+iqvumKgOmaseS5meWQn+a3q+iUremZsOmfs+mjruaPluazo+mCkeWHneaHieiGuum3ueS+neWAmuWEgOWunOaEj+aHv+aTrOakheavheeWkeefo+e+qeiJpOiWj+ifu+iho+iqvFwiXSxbXCJlY2ExXCIsXCLorbDphqvkuozku6XkvIrvp53vp57lpLflp6jvp5/lt7LlvJvlvZvmgKHvp6Dvp6Hvp6Lvp6PniL7nj6Xvp6TnlbDnl43vp6Xnp7vvp6bogIzogLPogoToi6HojZHvp6fvp6josr3osrPpgofvp6nvp6rpo7TppIzvp6vvp6zngLfnm4rnv4rnv4znv7zorJrkurrku4HliIPljbDvp63lkr3lm6Dlp7vlr4XlvJXlv43mua7vp67vp6/ntarojLXvp7DompPoqo3vp7Hpna3pnbfvp7Lvp7PkuIDkvZrkvb7lo7nml6XmuqLpgLjpjrDpprnku7vlo6zlporlp5nmgYHvp7Tvp7XnqJTvp7bojY/os4PlhaXljYRcIl0sW1wiZWRhMVwiLFwi76e376e476e55LuN5Ymp5a2V6Iq/5LuU5Yi65ZKo5aeJ5ae/5a2Q5a2X5a2c5oGj5oWI5ruL54KZ54Wu546G55O355a156OB57Sr6ICF6Ieq6Iyo6JSX6JeJ6Kuu6LOH6ZuM5L2c5Yu65Zq85par5pio54G854K454i157a96IqN6YWM6ZuA6bWy5a2x5qOn5q6Y5r2655ue5bKR5pqr5r2b566057Cq6KC26Zuc5LiI5LuX5Yyg5aC05aK75aOv5aWs5bCH5biz5bqE5by15o6M5pqy5p2W5qif5qqj5qyM5ry/54mG76e6542Q55KL56ug57Kn6IW46Ief6Ien6I6K6JGs6JSj6JaU6JeP6KOd6LST6Yas6ZW3XCJdLFtcImVlYTFcIixcIumanOWGjeWTieWcqOWusOaJjeadkOagveaik+a4vea7k+eBvee4oeijgeiyoei8iem9i+m9jueIreeuj+irjemMmuS9h+S9juWEsuWSgOWnkOW6leaKteadtealruaol+ayrua4mueLmeeMqueWveeuuOe0teiLp+iPueiRl+iXt+ipm+iyr+i6h+mAmemCuOmbjum9n+WLo+WQiuWroeWvguaRmOaVtea7tOeLhO+nu+eahOepjeesm+exjee4vue/n+iNu+isq+iziui1pOi3oei5n+i/qui/uemBqemPkeS9g+S9uuWCs+WFqOWFuOWJjeWJquWhoeWhvOWloOWwiOWxleW7m+aCm+aIsOagk+auv+awiOa+sVwiXSxbXCJlZmExXCIsXCLnhY7nkKDnlLDnlLjnlZHnmbLnrYznrovnrq3nr4bnuo/oqa7ovL7ovYnpiL/pipPpjKLpkKvpm7vpoZrpoavppJ7liIfmiKrmipjmtZnnmaTnq4rnr4DntbbljaDlsr7lupfmvLjngrnnspjpnJHpro7pu57mjqXmkbronbbkuIHkupXkuq3lgZzlgbXlkYjlp4PlrprluYDluq3lu7flvoHmg4XmjLrmlL/mlbTml4zmmbbmmbjmn77mpajmqonmraPmsYDmt4Dmt6jmuJ/muZ7ngJ7ngqHnjo7nj73nlLrnnZvnoofnpo7nqIvnqb3nsr7nto7oiYfoqILoq6rosp7phK3phYrph5jpiabpi4zpjKDpnIbpnZZcIl0sW1wiZjBhMVwiLFwi6Z2c6aCC6byO5Yi25YqR5ZW85aCk5bid5byf5oKM5o+Q5qKv5r+f56Wt56ys6IeN6Ja66KO96Ku46LmE6YaN6Zmk6Zqb6Zy96aGM6b2K5L+O5YWG5YeL5Yqp5Ziy5byU5b2r5o6q5pON5pep5pmB5pu65pu55pyd5qKd5qOX5qe95ryV5r2u54Wn54el54iq55Kq55y656WW56Wa56ef56ig56qV57KX57Of57WE57mw6IKH6Je76Jqk6KmU6Kq/6LaZ6LqB6YCg6YGt6Yej6Zi76ZuV6bOl5peP57CH6Laz6Y+D5a2Y5bCK5Y2S5ouZ54yd5YCn5a6X5b6e5oKw5oWr5qOV5reZ55Cu56iu57WC57ac57ix6IWrXCJdLFtcImYxYTFcIixcIui4qui4temNvumQmOS9kOWdkOW3puW6p+aMq+e9quS4u+S9j+S+j+WBmuWnneiDhOWRquWRqOWXvuWlj+WumeW3nuW7muaZneacseafseagquazqOa0sua5iua+jeeCt+ePoOeWh+exjOe0gue0rOe2ouiIn+ibm+iou+iqhei1sOi6iui8s+mAsemFjumFkumRhOmnkOerueeypeS/iuWEgeWHhuWfiOWvr+Wzu+aZmeaovea1mua6lua/rOeEjOeVr+ero+igoumAoemBtembi+mnv+iMgeS4reS7suihhumHjeWNvearm+alq+axgeiRuuWinuaGjuabvuaLr+eDneeUkeeXh+e5kuiSuOitiei0iOS5i+WPqlwiXSxbXCJmMmExXCIsXCLlkqvlnLDlnYDlv5fmjIHmjIfmka/mlK/ml6jmmbrmnp3mnrPmraLmsaDmsprmvKznn6XnoKXnpYnnpZfntJnogqLohILoh7Poip3oirfonJjoqozvp7zotITotr7pgbLnm7TnqJnnqLfnuZTogbfllIfll5TlobXmjK/mkKLmmYnmmYvmoa3mppvmroTmtKXmurHnj43nkajnkqHnlZvnlrnnm6HnnJ7nnovnp6bnuInnuJ3oh7volK/oopfoqLros5Hou6vovrDpgLLpjq3pmaPpmbPpnIfkvoTlj7Hlp6rlq4nluJnmoY7nk4bnlr7np6nnqpLohqPom63os6rot4zov63mlp/mnJXvp73ln7fmvZfnt53ovK9cIl0sW1wiZjNhMVwiLFwi6Y+26ZuG5b615oey5r6E5LiU5L6Y5YCf5Y+J5Zef5bWv5beu5qyh5q2k56OL566a76e+6LmJ6LuK6YGu5o2J5pC+552A56qE6Yyv6ZG/6b2q5pKw5r6v54em55Ko55Oa56uE57CS57qC57Ky57qY6K6a6LSK6ZG96aSQ6aWM5Yi55a+f5pOm5pyt57Su5YOt5Y+D5aG55oWY5oWZ5oe65pas56uZ6K6S6K6W5YCJ5YCh5Ym15ZSx5ai85bug5b2w5oS05pWe5piM5pi25pqi5qeN5ruE5ryy54yW55ih56qT6IS56ImZ6I+W6JK85YK15Z+w5a+A5a+o5b2p5o6h56Cm57a16I+c6JSh6YeH6Ye15YaK5p+1562WXCJdLFtcImY0YTFcIixcIuiyrOWHhOWmu+aCveiZleWAnO+nv+WJlOWwuuaFveaImuaLk+aTsuaWpea7jOeYoOiEiui5oOmZn+mau+S7n+WNg+WWmOWkqeW3neaTheaziea3uueOlOepv+iIm+iWpuizpOi4kOmBt+mHp+mXoemYoemfhuWHuOWTsuWWhuW+ueaSpOa+iOe2tOi8n+i9jemQteWDieWwluayvua3u+eUm+eeu+ewveexpOipueirguWgnuWmvuW4luaNt+eJkueWiuedq+irnOiyvOi8kuW7s+aZtOa3uOiBveiPgeiri+mdkemvlu+ogOWJg+abv+a2lea7r+e3oOirpumArumBnumrlOWIneWJv+WTqOaGlOaKhOaLm+aiolwiXSxbXCJmNWExXCIsXCLmpJLmpZrmqLXngpLnhKbnoZ3npIHnpI7np5LnqI3ogpboibjoi5XojYnolYnosoLotoXphaLphovphq7kv4Plm5Hnh63nn5fonIDop7jlr7jlv5bmnZHpgqjlj6LloZrlr7XmgqTmhoHmkaDnuL3ogbDolKXpioPmkq7lgqzltJTmnIDlopzmir3mjqjmpI7mpbjmqJ7muavnmrrnp4voirvokKnoq4/otqjov73phJLphYvphpzpjJDpjJjpjprpm5vpqLbpsI3kuJHnlZznpZ3nq7rnrZHnr4nnuK7ok4TouZnoubTou7jpgJDmmKXmpL/nkYPlh7rmnK7pu5zlhYXlv6Dmspbon7LooZ3oobfmgrTohrXokINcIl0sW1wiZjZhMVwiLFwi6LSF5Y+W5ZC55Zi05ai25bCx54KK57+g6IGa6ISG6Iet6Laj6YaJ6amf6bey5YG05LuE5Y6g5oO75ris5bGk5L6I5YCk5Zek5bOZ5bmf5oGl5qKU5rK75reE54a+55eU55e055mh56ia56mJ57eH57e7572u6Ie06Jqp6Lyc6ZuJ6aaz6b2S5YmH5YuF6aOt6Kaq5LiD5p+S5ryG5L615a+i5p6V5rKI5rW455Cb56Cn6Yed6Y286J+E56ek56ix5b+r5LuW5ZKk5ZS+5aKu5aal5oOw5omT5ouW5py25qWV6Ii16ZmA6aax6aed5YCs5Y2T5ZWE5Z2876iB5omY76iC5pOi5pmr5p+d5r+B5r+v55Ci55C46KiXXCJdLFtcImY3YTFcIixcIumQuOWRkeWYhuWdpuW9iOaGmuatjueBmOeCree2u+iqleWlquiEq+aOoueciOiAveiyquWhlOaQreamu+WuleW4kea5r++og+iVqeWFjOWPsOWkquaAoOaFi+auhuaxsOazsOesnuiDjuiLlOi3humCsOmise+ohOaTh+a+pOaSkeaUhOWFjuWQkOWcn+iojuaFn+ahtu+oheeXm+etkue1semAmuWghuanjOiFv+ikqumAgOmgueWBuOWll+WmrOaKlemAj+msquaFneeJuemXluWdoeWphuW3tOaKiuaSreaTuuadt+azoua0vueIrOeQtuegtOe9t+iKrei3m+mgl+WIpOWdguadv+eJiOeTo+iyqei+pumIkVwiXSxbXCJmOGExXCIsXCLpmKrlhavlj63mjYzkvanllITmgpbmlZfmspvmtb/niYzni73nqJfopofosp3lva3mvo7ng7nohqjmhI7kvr/lgY/miYHniYfnr4fnt6jnv6npgY3pnq3pqJnosrblnarlubPmnrDokI3oqZXlkKDlrJbluaPlu6LlvIrmloPogrrolL3plonpmZvkvYjljIXljI3ljI/lkoblk7rlnIPluIPmgJbmipvmirHmjZXvqIbms6HmtabnlrHnoLLog57ohK/oi57okaHokrLooo3opJLpgIvpi6rpo73prpHluYXmmrTmm53ngJHniIbvqIfkv7Xlib3lvarmhZPmnZPmqJnmvILnk6Lnpajooajosbnpo4fpo4TpqYNcIl0sW1wiZjlhMVwiLFwi5ZOB56if5qWT6Ku36LGK6aKo6aau5b285oqr55ay55qu6KKr6YG/6ZmC5Yy55by85b+F5rOM54+M55Wi55aL562G6Iu+6aad5LmP6YC85LiL5L2V5Y6m5aSP5buI5piw5rKz55GV6I236J2m6LOA6YGQ6Zye6bCV5aOR5a246JmQ6KyU6ba05a+S5oGo5oKN5pex5rGX5ryi5r6j54Ca572V57+w6ZaR6ZaS6ZmQ6Z+T5Ymy6L2E5Ye95ZCr5ZK45ZWj5ZaK5qq75ra157eY6Imm6Yqc6Zm36bm55ZCI5ZOI55uS6Juk6Zak6ZeU6Zmc5Lqi5LyJ5aeu5aum5be35oGS5oqX5p2t5qGB5rKG5riv57y46IKb6IiqXCJdLFtcImZhYTFcIixcIu+oiO+oiemgheS6peWBleWSs+Wek+WlmuWtqeWus+aHiOalt+a1t+eAo+ifueino+ipsuirp+mCgumnremquOWKvuaguOWAluW5uOadj+iNh+ihjOS6q+WQkeWaruePpumElemfv+mkiemll+mmmeWZk+Win+iZm+ioseaGsuartueNu+i7kuath+maqumpl+WlleeIgOi1q+mdqeS/lOWztOW8puaHuOaZm+azq+eCq+eOhOeOueePvuecqeedjee1g+e1oue4o+iIt+ihku+oiuizoumJiemhr+WtkeeptOihgOmggeWrjOS/oOWNlOWkvuWzveaMvua1ueeLueiEheiEh+iOoumLj+mgsOS6qOWFhOWIkeWei1wiXSxbXCJmYmExXCIsXCLlvaLms4Lmu47ngIXngZDngq/nhpLnj6nnkanojYronqLooaHpgIjpgqLpjqPppqjlha7lvZfmg6DmhafmmrPolZnouYrphq/pnovkuY7kupLlkbzlo5Xlo7rlpb3lsrXlvKfmiLbmiYjmmIrmmafmr6vmtanmt4/muZbmu7jmvpTmv6Dmv6nngZ3ni5DnkKXnkZrnk6DnmpPnpZzns4rnuJ7og6Hoiqbokavokr/omY7omZ/onbTorbfosarpjqzpoIDpoaXmg5HmiJbphbflqZrmmI/mt7fmuL7nkL/prYLlv73mg5rnrI/lk4TlvJjmsZ7ms5PmtKrng5jntIXombnoqIzptLvljJblkozlrIXmqLrngavnlbVcIl0sW1wiZmNhMVwiLFwi56aN56a+6Iqx6I+v6Kmx6K2B6LKo6Z2076iL5pO05pSr56K656K756mr5Li45Zaa5aWQ5a6m5bm75oKj5o+b5q2h5pml5qGT5riZ54Wl55Kw57SI6YKE6amp6bCl5rS75ruR54y+6LGB6ZeK5Yew5bmM5b6o5oGN5oO25oSw5oWM5pmD5pmE5qal5rOB5rmf5ruJ5r2i54WM55Kc55qH56+B57Cn6I2S6J2X6YGR6ZqN6buD5Yyv5Zue5bu75b6K5oGi5oKU5oe35pmm5pyD5qqc5reu5r6u54Gw542q57mq6Ia+6Iy06JuU6Kqo6LOE5YqD542y5a6W5qmr6ZCE5ZOu5ZqG5a2d5pWI5paF5puJ5qKf5raN5reGXCJdLFtcImZkYTFcIixcIueIu+iCtOmFtempjeS+r+WAmeWOmuWQjuWQvOWWieWXheW4v+W+jOacveeFpuePnemAheWLm+WLs+WhpOWjjueEhOeGj+eHu+iWsOiok+aaiOiWqOWWp+aahOeFiuiQseWNieWWmeavgeW9meW+veaPruaaieeFh+irsei8nem6vuS8keaQuueDi+eVpuiZp+aBpOitjum3uOWFh+WHtuWMiOa0tuiDuOm7keaYleaso+eCmOeXleWQg+Wxuee0h+ioluasoOasveathuWQuOaBsOa0vee/leiIiOWDluWHnuWWnOWZq+WbjeWnrOWsieW4jOaGmeaGmOaIseaZnuabpueGmeeGueeGuueKp+emp+eogOe+suipsFwiXV0nKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQyODQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBKU09OLnBhcnNlKCdbW1wiMFwiLFwiXFxcXHUwMDAwXCIsMTI3XSxbXCJhMTQwXCIsXCLjgIDvvIzjgIHjgILvvI7igKfvvJvvvJrvvJ/vvIHvuLDigKbigKXvuZDvuZHvuZLCt++5lO+5le+5lu+5l++9nOKAk++4seKAlO+4s+KVtO+4tO+5j++8iO+8ie+4te+4tu+9m++9ne+4t++4uOOAlOOAle+4ue+4uuOAkOOAke+4u++4vOOAiuOAi++4ve+4vuOAiOOAie+4v++5gOOAjOOAje+5ge+5guOAjuOAj++5g++5hO+5me+5mlwiXSxbXCJhMWExXCIsXCLvuZvvuZzvuZ3vuZ7igJjigJnigJzigJ3jgJ3jgJ7igLXigLLvvIPvvIbvvIrigLvCp+OAg+KXi+KXj+KWs+KWsuKXjuKYhuKYheKXh+KXhuKWoeKWoOKWveKWvOOKo+KEhcKv77+j77y/y43vuYnvuYrvuY3vuY7vuYvvuYzvuZ/vuaDvuaHvvIvvvI3Dl8O3wrHiiJrvvJzvvJ7vvJ3iiabiiafiiaDiiJ7iiZLiiaHvuaJcIiw0LFwi772e4oip4oiq4oql4oig4oif4oq/44+S44+R4oir4oiu4oi14oi04pmA4pmC4oqV4oqZ4oaR4oaT4oaQ4oaS4oaW4oaX4oaZ4oaY4oil4oij77yPXCJdLFtcImEyNDBcIixcIu+8vOKIle+5qO+8hO+/peOAku+/oO+/oe+8he+8oOKEg+KEie+5qe+5qu+5q+OPleOOnOOOneOOnuOPjuOOoeOOjuOOj+OPhMKw5YWZ5YWb5YWe5YWd5YWh5YWj5Zen55Op57OO4paBXCIsNyxcIuKWj+KWjuKWjeKWjOKWi+KWiuKWieKUvOKUtOKUrOKUpOKUnOKWlOKUgOKUguKWleKUjOKUkOKUlOKUmOKVrVwiXSxbXCJhMmExXCIsXCLila7ilbDila/ilZDilZ7ilarilaHil6Lil6Pil6Xil6TilbHilbLilbPvvJBcIiw5LFwi4oWgXCIsOSxcIuOAoVwiLDgsXCLljYHljYTljYXvvKFcIiwyNSxcIu+9gVwiLDIxXSxbXCJhMzQwXCIsXCLvvZfvvZjvvZnvvZrOkVwiLDE2LFwizqNcIiw2LFwizrFcIiwxNixcIs+DXCIsNixcIuOEhVwiLDEwXSxbXCJhM2ExXCIsXCLjhJBcIiwyNSxcIsuZy4nLisuHy4tcIl0sW1wiYTNlMVwiLFwi4oKsXCJdLFtcImE0NDBcIixcIuS4gOS5meS4geS4g+S5g+S5neS6huS6jOS6uuWEv+WFpeWFq+WHoOWIgOWIgeWKm+WMleWNgeWNnOWPiOS4ieS4i+S4iOS4iuS4q+S4uOWHoeS5heS5iOS5n+S5nuS6juS6oeWFgOWIg+WLuuWNg+WPieWPo+Wcn+Wjq+WkleWkp+Wls+WtkOWtkeWtk+WvuOWwj+WwouWwuOWxseW3neW3peW3seW3suW3s+W3vuW5suW7vuW8i+W8k+aJjVwiXSxbXCJhNGExXCIsXCLkuJHkuJDkuI3kuK3kuLDkuLnkuYvlsLnkuojkupHkupXkupLkupTkuqLku4Hku4Dku4Pku4bku4fku43ku4rku4vku4TlhYPlhYHlhaflha3lha7lhazlhpflh7bliIbliIfliIjli7vli77li7/ljJbljLnljYjljYfljYXljZ7ljoTlj4vlj4rlj43lo6zlpKnlpKvlpKrlpK3lrZTlsJHlsKTlsLrlsa/lt7Tlubvlu7/lvJTlvJXlv4PmiIjmiLbmiYvmiY7mlK/mlofmlpfmlqTmlrnml6Xmm7DmnIjmnKjmrKDmraLmrbnmr4vmr5Tmr5vmsI/msLTngavniKrniLbniLvniYfniZnniZvniqznjovkuJlcIl0sW1wiYTU0MFwiLFwi5LiW5LiV5LiU5LiY5Li75LmN5LmP5LmO5Lul5LuY5LuU5LuV5LuW5LuX5Luj5Luk5LuZ5Lue5YWF5YWE5YaJ5YaK5Yas5Ye55Ye65Ye45YiK5Yqg5Yqf5YyF5YyG5YyX5Yyd5Luf5Y2K5Y2J5Y2h5Y2g5Y2v5Y2u5Y675Y+v5Y+k5Y+z5Y+s5Y+u5Y+p5Y+o5Y+85Y+45Y+15Y+r5Y+m5Y+q5Y+y5Y+x5Y+w5Y+l5Y+t5Y+75Zub5Zua5aSWXCJdLFtcImE1YTFcIixcIuWkruWkseWltOWltuWtleWug+WwvOW3qOW3p+W3puW4guW4g+W5s+W5vOW8geW8mOW8l+W/heaIiuaJk+aJlOaJkuaJkeaWpeaXpuacruacrOacquacq+acreato+avjeawkeawkOawuOaxgeaxgOawvueKr+eOhOeOieeTnOeTpueUmOeUn+eUqOeUqeeUsOeUseeUsueUs+eWi+eZveearueav+ebruefm+efouefs+ekuuemvueptOeri+S4nuS4n+S5kuS5k+S5qeS6meS6pOS6puS6peS7v+S8ieS8meS8iuS8leS8jeS8kOS8keS8j+S7suS7tuS7u+S7sOS7s+S7veS8geS8i+WFieWFh+WFhuWFiOWFqFwiXSxbXCJhNjQwXCIsXCLlhbHlho3lhrDliJfliJHliJLliI7liJbliqPljIjljKHljKDljbDljbHlkInlkI/lkIzlkIrlkJDlkIHlkIvlkITlkJHlkI3lkIjlkIPlkI7lkIblkJLlm6Dlm57lm53lnLPlnLDlnKjlnK3lnKzlnK/lnKnlpJnlpJrlpLflpLjlpoTlpbjlpoPlpb3lpbnlpoLlpoHlrZflrZjlroflrojlroXlronlr7rlsJblsbnlt57luIblubblubRcIl0sW1wiYTZhMVwiLFwi5byP5byb5b+Z5b+W5oiO5oiM5oiN5oiQ5omj5omb5omY5pS25pep5peo5pes5pet5puy5puz5pyJ5py95py05pyx5py15qyh5q2k5q275rCW5rGd5rGX5rGZ5rGf5rGg5rGQ5rGV5rGh5rGb5rGN5rGO54Gw54mf54md55m+56u557Gz57O457y2576K57696ICB6ICD6ICM6ICS6ICz6IG/6IKJ6IKL6IKM6Iej6Ieq6Iez6Ie86IiM6Iib6Iif6Imu6Imy6Im+6Jmr6KGA6KGM6KGj6KW/6Zih5Liy5Lqo5L2N5L2P5L2H5L2X5L2e5Ly05L2b5L2V5Lyw5L2Q5L2R5Ly95Ly65Ly45L2D5L2U5Ly85L2G5L2jXCJdLFtcImE3NDBcIixcIuS9nOS9oOS8r+S9juS8tuS9meS9neS9iOS9muWFjOWFi+WFjeWFteWGtuWGt+WIpeWIpOWIqeWIquWIqOWKq+WKqeWKquWKrOWMo+WNs+WNteWQneWQreWQnuWQvuWQpuWRjuWQp+WRhuWRg+WQs+WRiOWRguWQm+WQqeWRiuWQueWQu+WQuOWQruWQteWQtuWQoOWQvOWRgOWQseWQq+WQn+WQrOWbquWbsOWbpOWbq+WdiuWdkeWdgOWdjVwiXSxbXCJhN2ExXCIsXCLlnYflnY7lnL7lnZDlnY/lnLvlo6/lpL7lpp3lppLlpqjlpp7lpqPlppnlppblpo3lpqTlppPlporlpqXlrZ3lrZzlrZrlrZvlrozlrovlro/lsKzlsYDlsYHlsL/lsL7lspDlspHlspTlsozlt6vluIzluo/luofluorlu7flvITlvJ/lvaTlvaLlvbflvbnlv5jlv4zlv5flv43lv7Hlv6vlv7jlv6rmiJLmiJHmioTmipfmipbmioDmibbmionmia3miormibzmib7mibnmibPmipLmia/mipjmia7mipXmipPmipHmiobmlLnmlLvmlLjml7Hmm7TmnZ/mnY7mnY/mnZDmnZHmnZzmnZbmnZ7mnYnmnYbmnaBcIl0sW1wiYTg0MFwiLFwi5p2T5p2X5q2l5q+P5rGC5rGe5rKZ5rKB5rKI5rKJ5rKF5rKb5rGq5rG65rKQ5rGw5rKM5rGo5rKW5rKS5rG95rKD5rGy5rG+5rG05rKG5rG25rKN5rKU5rKY5rKC54G254G854G954G454mi54mh54mg54uE54uC546W55Ss55Sr55S355S455qC55uv55+j56eB56eA56a/56m257O7572V6IKW6IKT6IKd6IKY6IKb6IKa6IKy6Imv6IqSXCJdLFtcImE4YTFcIixcIuiKi+iKjeimi+inkuiogOiwt+ixhuixleiynei1pOi1sOi2s+i6q+i7iui+m+i+sOi/gui/hui/hei/hOW3oemCkemCoumCqumCpumCo+mFiemHhumHjOmYsumYrumYsemYqumYrOS4puS5luS5s+S6i+S6m+S6nuS6q+S6rOS9r+S+neS+jeS9s+S9v+S9rOS+m+S+i+S+huS+g+S9sOS9teS+iOS9qeS9u+S+luS9vuS+j+S+keS9uuWFlOWFkuWFleWFqeWFt+WFtuWFuOWGveWHveWIu+WIuOWIt+WIuuWIsOWIruWItuWJgeWKvuWKu+WNkuWNlOWNk+WNkeWNpuWNt+WNuOWNueWPluWPlOWPl+WRs+WRtVwiXSxbXCJhOTQwXCIsXCLlkpblkbjlkpXlkoDlkbvlkbflkoTlkpLlkoblkbzlkpDlkbHlkbblkozlkprlkaLlkajlkovlkb3lko7lm7rlnoPlnbflnarlnanlnaHlnablnaTlnbzlpJzlpYnlpYflpYjlpYTlpZTlpr7lprvlp5Tlprnlpq7lp5Hlp4blp5Dlp43lp4vlp5Plp4rlpq/lprPlp5Llp4XlrZ/lraTlraPlrpflrprlrpjlrpzlrpnlrpvlsJrlsYjlsYVcIl0sW1wiYTlhMVwiLFwi5bGG5bK35bKh5bK45bKp5bKr5bKx5bKz5biY5bia5biW5biV5bib5biR5bm45bqa5bqX5bqc5bqV5bqW5bu25bym5byn5byp5b6A5b6B5b2/5b285b+d5b+g5b+95b+15b+/5oCP5oCU5oCv5oC15oCW5oCq5oCV5oCh5oCn5oCp5oCr5oCb5oiW5oiV5oi/5oi+5omA5om/5ouJ5ouM5ouE5oq/5ouC5oq55ouS5oub5oqr5ouT5ouU5ouL5ouI5oqo5oq95oq85ouQ5ouZ5ouH5ouN5oq15oua5oqx5ouY5ouW5ouX5ouG5oqs5ouO5pS+5pan5pa85pe65piU5piT5piM5piG5piC5piO5piA5piP5piV5piKXCJdLFtcImFhNDBcIixcIuaYh+acjeaci+adreaei+aeleadseaenOads+adt+aeh+aeneael+adr+adsOadv+aeieadvuaekOadteaemuaek+advOadquadsuaso+atpuatp+atv+awk+awm+azo+azqOazs+ayseazjOazpeays+ayveayvuayvOazouayq+azleazk+ayuOazhOayueazgeayruazl+azheazseayv+ayu+azoeazm+aziuayrOazr+aznOazluazoFwiXSxbXCJhYWExXCIsXCLngpXngo7ngpLngorngpnniKzniK3niLjniYjniafnianni4Dni47ni5nni5fni5Dnjqnnjqjnjp/njqvnjqXnlL3nlp3nlpnnlprnmoTnm4Lnm7Lnm7Tnn6Xnn73npL7npYDnpYHnp4nnp4jnqbrnqbnnq7rns77nvZTnvoznvovogIXogrrogqXogqLogrHogqHogqvogqnogrTogqrogq/oh6Xoh77oiI3oirPoip3oipnoiq3oir3oip/oirnoirHoiqzoiqXoiq/oirjoiqPoirDoir7oirfomY7ombHliJ3ooajou4vov47ov5Tov5HpgrXpgrjpgrHpgrbph4fph5HplbfploDpmJzpmYDpmL/pmLvpmYRcIl0sW1wiYWI0MFwiLFwi6ZmC6Zq56Zuo6Z2S6Z2e5Lqf5Lqt5Lqu5L+h5L615L6v5L6/5L+g5L+R5L+P5L+d5L+D5L625L+Y5L+f5L+K5L+X5L6u5L+Q5L+E5L+C5L+a5L+O5L+e5L635YWX5YaS5YaR5Yag5YmO5YmD5YmK5YmN5YmM5YmL5YmH5YuH5YuJ5YuD5YuB5YyN5Y2X5Y275Y6a5Y+b5ZKs5ZOA5ZKo5ZOO5ZOJ5ZK45ZKm5ZKz5ZOH5ZOC5ZK95ZKq5ZOBXCJdLFtcImFiYTFcIixcIuWThOWTiOWSr+WSq+WSseWSu+WSqeWSp+WSv+Wbv+WeguWei+WeoOWeo+WeouWfjuWeruWek+WlleWlkeWlj+WljuWlkOWnnOWnmOWnv+Wno+WnqOWog+WnpeWnquWnmuWnpuWogeWnu+WtqeWuo+WupuWupOWuouWupeWwgeWxjuWxj+WxjeWxi+WzmeWzkuW3t+W4neW4peW4n+W5veW6oOW6puW7uuW8iOW8reW9peW+iOW+heW+iuW+i+W+h+W+jOW+ieaAkuaAneaAoOaApeaAjuaAqOaBjeaBsOaBqOaBouaBhuaBg+aBrOaBq+aBquaBpOaJgeaLnOaMluaMieaLvOaLreaMgeaLruaLveaMh+aLseaLt1wiXSxbXCJhYzQwXCIsXCLmi6/mi6zmi77mi7TmjJHmjILmlL/mlYXmlqvmlr3ml6LmmKXmmK3mmKDmmKfmmK/mmJ/mmKjmmLHmmKTmm7fmn7/mn5Pmn7Hmn5Tmn5Dmn6zmnrbmnq/mn7Xmn6nmn6/mn4Tmn5HmnrTmn5rmn6Xmnrjmn4/mn57mn7PmnrDmn5nmn6Lmn53mn5LmrarmroPmrobmrrXmr5Lmr5fmsJ/ms4nmtIvmtLLmtKrmtYHmtKXmtIzmtLHmtJ7mtJdcIl0sW1wiYWNhMVwiLFwi5rS75rS95rS+5rS25rSb5rO15rS55rSn5rS45rSp5rSu5rS15rSO5rSr54Kr54K654Kz54Ks54Kv54Kt54K454Ku54Kk54iw54my54mv54m054up54ug54uh546354+K5467546y54+N54+A546z55Sa55St55WP55WM55WO55WL55ar55ak55al55ai55aj55m455qG55qH55qI55uI55uG55uD55uF55yB55u555u455yJ55yL55u+55u855yH55+c56CC56CU56CM56CN56WG56WJ56WI56WH56a556a656eR56eS56eL56m/56qB56u/56u957G957SC57SF57SA57SJ57SH57SE57SG57y4576O576/6ICEXCJdLFtcImFkNDBcIixcIuiAkOiAjeiAkeiAtuiDluiDpeiDmuiDg+iDhOiDjOiDoeiDm+iDjuiDnuiDpOiDneiHtOiIouiLp+iMg+iMheiLo+iLm+iLpuiMhOiLpeiMguiMieiLkuiLl+iLseiMgeiLnOiLlOiLkeiLnuiLk+iLn+iLr+iMhuiZkOiZueiZu+iZuuihjeihq+imgeinlOioiOioguiog+iynuiyoOi1tOi1s+i2tOi7jei7jOi/sOi/pui/oui/qui/pVwiXSxbXCJhZGExXCIsXCLov63ov6vov6Tov6jpg4rpg47pg4Hpg4PphYvphYrph43ploLpmZDpmYvpmYzpmY3pnaLpnanpn4vpn63pn7PpoIHpoqjpo5vpo5/pppbpppnkuZjkurPlgIzlgI3lgKPkv6/lgKblgKXkv7jlgKnlgJblgIblgLzlgJ/lgJrlgJLlgJHkv7rlgIDlgJTlgKjkv7HlgKHlgIvlgJnlgJjkv7Pkv67lgK3lgKrkv77lgKvlgInlhbzlhqTlhqXlhqLlh43lh4zlh4blh4vliZbliZzliZTliZvliZ3ljKrljb/ljp/ljp3lj5/lk6jllJDllIHllLflk7zlk6Xlk7LllIblk7rllJTlk6nlk63lk6HllInlk67lk6pcIl0sW1wiYWU0MFwiLFwi5ZOm5ZSn5ZSH5ZO95ZSP5ZyD5ZyE5Z+C5Z+U5Z+L5Z+D5aCJ5aSP5aWX5aWY5aWa5aiR5aiY5aic5aif5aib5aiT5aes5aig5aij5aip5ail5aiM5aiJ5a2r5bGY5a6w5a6z5a625a605a6u5a615a655a645bCE5bGR5bGV5bGQ5bOt5bO95bO75bOq5bOo5bOw5bO25bSB5bO05beu5bit5bir5bqr5bqt5bqn5byx5b6S5b6R5b6Q5oGZXCJdLFtcImFlYTFcIixcIuaBo+aBpeaBkOaBleaBreaBqeaBr+aChOaCn+aCmuaCjeaClOaCjOaCheaCluaJh+aLs+aMiOaLv+aNjuaMvuaMr+aNleaNguaNhuaNj+aNieaMuuaNkOaMveaMquaMq+aMqOaNjeaNjOaViOaVieaWmeaXgeaXheaZguaZieaZj+aZg+aZkuaZjOaZheaZgeabuOaclOacleacl+agoeaguOahiOahhuahk+agueahguahlOagqeais+agl+ahjOahkeagveaftOahkOahgOagvOahg+agquahheagk+agmOahgeauiuauieaut+awo+awp+awqOawpuawpOazsOa1qua2lea2iOa2h+a1pua1uOa1t+a1mea2k1wiXSxbXCJhZjQwXCIsXCLmtazmtonmta7mtZrmtbTmtanmtozmtormtbnmtoXmtaXmtpTng4rng5jng6Tng5nng4jng4/niLnnibnni7zni7nni73ni7jni7fnjobnj63nkInnj67nj6Dnj6rnj57nlZTnlZ3nlZznlZrnlZnnlr7nl4Xnl4fnlrLnlrPnlr3nlrznlrnnl4LnlrjnmovnmrDnm4rnm43nm47nnKnnnJ/nnKDnnKjnn6nnoLDnoKfnoLjnoJ3noLTnoLdcIl0sW1wiYWZhMVwiLFwi56Cl56Ct56Cg56Cf56Cy56WV56WQ56Wg56Wf56WW56We56Wd56WX56Wa56ek56ej56en56ef56em56ep56eY56qE56qI56uZ56yG56yR57KJ57Sh57SX57SL57SK57Sg57Si57SU57SQ57SV57Sa57Sc57SN57SZ57Sb57y6572f576U57+F57+B6ICG6ICY6ICV6ICZ6ICX6IC96IC/6IOx6ISC6IOw6ISF6IOt6IO06ISG6IO46IOz6ISI6IO96ISK6IO86IOv6Iet6Ies6IiA6IiQ6Iiq6Iir6Iio6Iis6Iq76Iyr6I2S6I2U6I2K6Iy46I2Q6I2J6Iy16Iy06I2P6Iyy6Iy56Iy26IyX6I2A6Iyx6Iyo6I2DXCJdLFtcImIwNDBcIixcIuiZlOiaiuiaquiak+iapOiaqeiajOiao+ianOihsOiht+iigeiiguihveihueiomOiokOiojuiojOioleioiuiol+iok+ioluioj+iokeixiOixuuixueiyoeiyoui1t+i6rOi7kui7lOi7j+i+semAgemAhui/t+mAgOi/uui/tOmAg+i/vemAhei/uOmClemDoemDnemDoumFkumFjemFjOmHmOmHnemHl+mHnOmHmemWg+mZoumZo+mZoVwiXSxbXCJiMGExXCIsXCLpmZvpmZ3pmaTpmZjpmZ7pmrvpo6Lppqzpqqjpq5jprKXprLLprLzkub7lgbrlgb3lgZzlgYflgYPlgYzlgZrlgYnlgaXlgbblgY7lgZXlgbXlgbTlgbflgY/lgI/lga/lga3lhZzlhpXlh7Dliarlia/li5Lli5nli5jli5XljJDljI/ljJnljL/ljYDljL7lj4Pmm7zllYbllarllabllYTllZ7llaHllYPllYrllLHllZbllY/llZXllK/llaTllLjllK7llZzllKzllaPllLPllYHllZflnIjlnIvlnInln5/loIXloIrloIbln6Dln6Tln7rloILloLXln7fln7nlpKDlpaLlqLblqYHlqYnlqablqarlqYBcIl0sW1wiYjE0MFwiLFwi5ai85ami5ama5amG5amK5a2w5a+H5a+F5a+E5a+C5a6/5a+G5bCJ5bCI5bCH5bGg5bGc5bGd5bSH5bSG5bSO5bSb5bSW5bSi5bSR5bSp5bSU5bSZ5bSk5bSn5bSX5bei5bi45bi25biz5bi35bq35bq45bq25bq15bq+5by15by35b2X5b2s5b2p5b2r5b6X5b6Z5b6e5b6Y5b6h5b6g5b6c5oG/5oKj5oKJ5oKg5oKo5oOL5oK05oOm5oK9XCJdLFtcImIxYTFcIixcIuaDheaCu+aCteaDnOaCvOaDmOaDleaDhuaDn+aCuOaDmuaDh+aImuaIm+aJiOaOoOaOp+aNsuaOluaOouaOpeaNt+aNp+aOmOaOquaNseaOqeaOieaOg+aOm+aNq+aOqOaOhOaOiOaOmeaOoeaOrOaOkuaOj+aOgOaNu+aNqeaNqOaNuuaVneaVluaVkeaVmeaVl+WVn+aVj+aVmOaVleaVlOaWnOaWm+aWrOaXj+aXi+aXjOaXjuaZneaZmuaZpOaZqOaZpuaZnuabueWLl+acm+aigeair+aiouaik+aiteahv+ahtuaiseaip+ail+aisOaig+ajhOaireaihuaiheailOaineaiqOain+aioeaiguassuauulwiXSxbXCJiMjQwXCIsXCLmr6vmr6zmsKvmto7mtrzmt7Pmt5nmtrLmt6Hmt4zmt6Tmt7vmt7rmuIXmt4fmt4vmtq/mt5Hmtq7mt57mt7nmtrjmt7fmt7Xmt4Xmt5LmuJrmtrXmt5rmt6vmt5jmt6rmt7Hmt67mt6jmt4bmt4Tmtqrmt6zmtr/mt6bng7nnhInnhIrng73ng6/niL3nib3nioHnjJznjJvnjJbnjJPnjJnnjofnkIXnkIrnkIPnkIbnj77nkI3nk6Dnk7ZcIl0sW1wiYjJhMVwiLFwi55O355Sc55Si55Wl55Wm55Wi55Ww55aP55eU55eV55a155eK55eN55qO55uU55uS55ub55y355y+55y855y255y455y656Gr56GD56GO56Wl56Wo56Wt56e756qS56qV56yg56yo56yb56ys56ym56yZ56ye56yu57KS57KX57KV57WG57WD57Wx57Su57S557S857WA57Sw57Sz57WE57Sv57WC57Sy57Sx57y9576e576a57+M57+O57+S6ICc6IGK6IGG6ISv6ISW6ISj6ISr6ISp6ISw6ISk6IiC6Ii16Ii36Ii26Ii56I6O6I6e6I6Y6I246I6i6I6W6I696I6r6I6S6I6K6I6T6I6J6I6g6I236I276I28XCJdLFtcImIzNDBcIixcIuiOhuiOp+iZleW9quibh+ibgOiatuibhOiateibhuibi+iaseiar+ibieihk+iinuiiiOiiq+iikuiiluiijeiii+imk+imj+ioquioneioo+iopeioseioreion+iom+ioouixieixmuiyqeiyrOiyq+iyqOiyquiyp+i1p+i1pui2vui2uui7m+i7n+mAmemAjemAmumAl+mAo+mAn+mAnemAkOmAlemAnumAoOmAj+mAoumAlumAm+mAlFwiXSxbXCJiM2ExXCIsXCLpg6jpg63pg73phZfph47ph7Xph6bph6Pph6fph63ph6nplonpmarpmbXpmbPpmbjpmbDpmbTpmbbpmbfpmazpm4Dpm6rpm6nnq6Dnq5/poILpoIPprZrps6XpubXpub/puqXpurvlgqLlgo3lgoXlgpnlgpHlgoDlgpblgpjlgprmnIDlh7HlibLlibTlibXlianli57li53li5vljZrljqXllbvlloDllqfllbzllorllp3llpjlloLllpzllqrllpTllofllovlloPllrPllq7llp/llL7llrLllprllrvllqzllrHllb7llonllqvllpnlnI3loK/loKrloLTloKTloLDloLHloKHloJ3loKDlo7nlo7rlpaBcIl0sW1wiYjQ0MFwiLFwi5am35aqa5am/5aqS5aqb5aqn5a2z5a2x5a+S5a+M5a+T5a+Q5bCK5bCL5bCx5bWM5bWQ5bS05bWH5be95bmF5bi95bmA5bmD5bm+5buK5buB5buC5buE5by85b2t5b6p5b6q5b6o5oOR5oOh5oKy5oK25oOg5oSc5oSj5oO65oSV5oOw5oO75oO05oWo5oOx5oSO5oO25oSJ5oSA5oSS5oif5omJ5o6j5o6M5o+P5o+A5o+p5o+J5o+G5o+NXCJdLFtcImI0YTFcIixcIuaPkuaPo+aPkOaPoeaPluaPreaPruaNtuaPtOaPquaPm+aRkuaPmuaPueaVnuaVpuaVouaVo+aWkeaWkOaWr+aZruaZsOaZtOaZtuaZr+aakeaZuuaZvuaZt+abvuabv+acn+acneajuuajleajoOajmOajl+akheajn+ajteajruajp+ajueajkuajsuajo+aji+ajjeakjeakkuakjuajieajmualruaju+asvuasuuasveaumOauluauvOavr+awruawr+awrOa4r+a4uOa5lOa4oea4sua5p+a5iua4oOa4pea4o+a4m+a5m+a5mOa4pOa5lua5rua4rea4pua5r+a4tOa5jea4uua4rOa5g+a4nea4vua7i1wiXSxbXCJiNTQwXCIsXCLmuonmuJnmuY7muaPmuYTmubLmuanmuZ/nhJnnhJrnhKbnhLDnhKHnhLbnha7nhJzniYznioTnioDnjLbnjKXnjLTnjKnnkLrnkKrnkLPnkKLnkKXnkLXnkLbnkLTnkK/nkJvnkKbnkKjnlKXnlKbnlavnlarnl6Lnl5vnl6Pnl5nnl5jnl57nl6DnmbvnmbznmpbnmpPnmrTnm5znnY/nn63noZ3noaznoa/nqI3nqIjnqIvnqIXnqIDnqphcIl0sW1wiYjVhMVwiLFwi56qX56qW56ul56uj562J562W562G562Q562S562U562N562L562P562R57Kf57Kl57We57WQ57Wo57WV57Sr57Wu57Wy57Wh57Wm57Wi57Ww57Wz5ZaE57+U57+V6ICL6IGS6IKF6IWV6IWU6IWL6IWR6IWO6IS56IWG6IS+6IWM6IWT6IW06IiS6Iic6I+p6JCD6I+46JCN6I+g6I+F6JCL6I+B6I+v6I+x6I+06JGX6JCK6I+w6JCM6I+M6I+96I+y6I+K6JC46JCO6JCE6I+c6JCH6I+U6I+f6Jmb6Juf6JuZ6Jut6JuU6Jub6Juk6JuQ6Jue6KGX6KOB6KOC6KKx6KaD6KaW6Ki76Kmg6KmV6Kme6Ki86KmBXCJdLFtcImI2NDBcIixcIuiplOipm+ipkOiphuiotOiouuiotuipluixoeiyguiyr+iyvOiys+iyveizgeiyu+izgOiytOiyt+iytuiyv+iyuOi2iui2hei2gei3jui3nei3i+i3mui3kei3jOi3m+i3hui7u+i7uOi7vOi+nOmArumAtemAsemAuOmAsumAtumEgumDtemEiemDvumFo+mFpemHj+mIlOmIlemIo+mIiemInumIjemIkOmIh+mIkemWlOmWj+mWi+mWkVwiXSxbXCJiNmExXCIsXCLplpPplpLplo7pmorpmo7pmovpmb3pmoXpmobpmo3pmbLpmoTpm4Hpm4Xpm4Tpm4bpm4fpm6/pm7Lpn4zpoIXpoIbpoIjpo6fpo6rpo6/po6npo7Lpo63ppq7ppq3pu4Ppu43pu5HkuoLlgq3lgrXlgrLlgrPlg4Xlgr7lgqzlgrflgrvlgq/lg4flib/libflib3li5/li6bli6Tli6Lli6PljK/ll5/ll6jll5Pll6bll47ll5zll4fll5Hll6Pll6Tll6/ll5rll6Hll4Xll4bll6Xll4nlnJLlnJPloZ7loZHloZjloZfloZrloZTloavloYzloa3loYrloaLloZLloYvlpaflq4Hlq4nlq4zlqr7lqr3lqrxcIl0sW1wiYjc0MFwiLFwi5aqz5auC5aqy5bWp5bWv5bmM5bm55buJ5buI5byS5b2Z5b6s5b6u5oSa5oSP5oWI5oSf5oOz5oSb5oO55oSB5oSI5oWO5oWM5oWE5oWN5oS+5oS05oSn5oSN5oSG5oS35oih5oii5pCT5pC+5pCe5pCq5pCt5pC95pCs5pCP5pCc5pCU5pCN5pC25pCW5pCX5pCG5pWs5paf5paw5pqX5pqJ5pqH5pqI5pqW5pqE5pqY5pqN5pyD5qaU5qWtXCJdLFtcImI3YTFcIixcIualmualt+aloOallOalteaksOamgualiualqOalq+alnualk+alueamhualnealo+alm+ath+atsuavgOauv+avk+avvea6oua6r+a7k+a6tua7gua6kOa6nea7h+a7hea6pea6mOa6vOa6uua6q+a7kea6lua6nOa7hOa7lOa6qua6p+a6tOeFjueFmeeFqeeFpOeFieeFp+eFnOeFrOeFpueFjOeFpeeFnueFhueFqOeFlueIuueJkueMt+eNheeMv+eMvueRr+eRmueRleeRn+eRnueRgeeQv+eRmeeRm+eRnOeVtueVuOeYgOeXsOeYgeeXsueXseeXuueXv+eXtOeXs+ebnuebn+edm+edq+edpuednuedo1wiXSxbXCJiODQwXCIsXCLnnbnnnarnnaznnZznnaXnnajnnaLnn67noo7norDnopfnopjnooznoonnobznopHnopPnob/npbrnpb/npoHokKznpr3nqJznqJrnqKDnqJTnqJ/nqJ7nqp/nqqDnrbfnr4DnraDnra7nrafnsrHnsrPnsrXntpPntbnntpHntoHnto/ntZvnva7nvannvarnvbLnvqnnvqjnvqTogZbogZjogobogoTohbHohbDohbjohaXoha7ohbPohatcIl0sW1wiYjhhMVwiLFwi6IW56IW66IWm6IiF6ImH6JKC6JG36JC96JCx6JG16JGm6JGr6JGJ6JGs6JGb6JC86JC16JGh6JGj6JGp6JGt6JGG6Jme6Jmc6Jmf6Ju56JyT6JyI6JyH6JyA6Ju+6Ju76JyC6JyD6JyG6JyK6KGZ6KOf6KOU6KOZ6KOc6KOY6KOd6KOh6KOK6KOV6KOS6Kac6Kej6Kmr6Kmy6Kmz6Kmm6Kmp6Kmw6KqH6Km86Kmj6Kqg6Kmx6KqF6Kmt6Kmi6Kmu6Kms6Km56Km76Ki+6Kmo6LGi6LKK6LKJ6LOK6LOH6LOI6LOE6LKy6LOD6LOC6LOF6Leh6Lef6Leo6Lev6Lez6Le66Leq6Lek6Lem6Lqy6LyD6LyJ6Lu+6LyKXCJdLFtcImI5NDBcIixcIui+n+i+sumBi+mBiumBk+mBgumBlOmAvOmBlemBkOmBh+mBj+mBjumBjemBkemAvumBgemEkumEl+mFrOmFqumFqemHiemIt+mJl+mIuOmIvemJgOmIvumJm+mJi+mJpOmJkemItOmJiemJjemJhemIuemIv+mJmumWmOmamOmalOmalembjembi+mbiembiumbt+mbu+mbuembtumdlumdtOmdtumgkOmgkemgk+mgiumgkumgjOmjvOmjtFwiXSxbXCJiOWExXCIsXCLpo73po77pprPpprHpprTpq6Hps6npuoLpvI7pvJPpvKDlg6flg67lg6Xlg5blg63lg5rlg5Xlg4/lg5Hlg7Hlg47lg6nlhaLlh7PlioPlioLljLHljq3ll77lmIDlmJvlmJfll73lmJTlmIblmInlmI3lmI7ll7flmJblmJ/lmIjlmJDll7blnJjlnJblobXlob7looPlopPloorlobnlooXlob3lo73lpKXlpKLlpKTlparlpanlq6Hlq6blq6nlq5flq5blq5jlq6PlrbXlr57lr6flr6Hlr6Xlr6blr6jlr6Llr6Tlr5/lsI3lsaLltoTltofluZvluaPluZXluZfluZTlu5Plu5blvIrlvYblvbDlvrnmhYdcIl0sW1wiYmE0MFwiLFwi5oS/5oWL5oW35oWi5oWj5oWf5oWa5oWY5oW15oiq5pKH5pGY5pGU5pKk5pG45pGf5pG65pGR5pGn5pC05pGt5pG75pWy5pah5peX5peW5pqi5pqo5pqd5qac5qao5qaV5qeB5qau5qeT5qeL5qab5qa35qa75qar5qa05qeQ5qeN5qat5qeM5qam5qeD5qaj5q2J5q2M5rCz5ryz5ryU5ru+5ryT5ru05ryp5ry+5ryg5rys5ryP5ryC5ryiXCJdLFtcImJhYTFcIixcIua7v+a7r+a8hua8sea8uOa8sua8o+a8lea8q+a8r+a+iOa8qua7rOa8gea7sua7jOa7t+eGlOeGmeeFveeGiueGhOeGkueIvueKkueKlueNhOeNkOeRpOeRo+eRqueRsOeRreeUhOeWkeeYp+eYjeeYi+eYieeYk+eboeebo+eehOedveedv+edoeejgeein+eip+eis+eiqeeio+emjuemj+emjeeorueoseeqqueqqeerreerr+euoeeuleeui+etteeul+euneeulOeuj+euuOeuh+euhOeyueeyveeyvue2u+e2sOe2nOe2vee2vue2oOe3iue2tOe2sue2see2uue2oue2v+e2tee2uOe2ree3kue3h+e2rFwiXSxbXCJiYjQwXCIsXCLnvbDnv6Dnv6Hnv5/ogZ7ogZrogofohZDohoDoho/ohojohorohb/ohoLoh6foh7roiIfoiJToiJ7oiYvok4nokr/ok4bok4Tokpnokp7okrLokpzok4vokrjok4Dok5PokpDokrzok5Hok4ronL/onJzonLvonKLonKXonLTonJjonZXonLfonKnoo7PopILoo7Too7noo7joo73oo6jopJroo6/oqqboqozoqp7oqqPoqo3oqqHoqpPoqqRcIl0sW1wiYmJhMVwiLFwi6Kqq6Kql6Kqo6KqY6KqR6Kqa6Kqn6LGq6LKN6LKM6LOT6LOR6LOS6LWr6LaZ6LaV6Le86LyU6LyS6LyV6LyT6L6j6YGg6YGY6YGc6YGj6YGZ6YGe6YGi6YGd6YGb6YSZ6YSY6YSe6YW16YW46YW36YW06Ym46YqA6YqF6YqY6YqW6Ym76YqT6Yqc6Yqo6Ym86YqR6Zah6Zao6Zap6Zaj6Zal6Zak6ZqZ6Zqc6Zqb6ZuM6ZuS6ZyA6Z286Z6F6Z+26aCX6aCY6aKv6aKx6aSD6aSF6aSM6aSJ6aeB6aqv6aqw6aum6a2B6a2C6bO06bO26bOz6bq86by76b2K5YSE5YSA5YO75YO15YO55YSC5YSI5YSJ5YSF5YecXCJdLFtcImJjNDBcIixcIuWKh+WKiOWKieWKjeWKiuWLsOWOsuWYruWYu+WYueWYsuWYv+WYtOWYqeWZk+WZjuWZl+WZtOWYtuWYr+WYsOWigOWin+WinuWis+WinOWiruWiqeWipuWlreWsieWru+Wsi+WrteWsjOWsiOWvruWvrOWvqeWvq+WxpOWxpeW2neW2lOW5ouW5n+W5oeW7ouW7muW7n+W7neW7o+W7oOW9iOW9seW+t+W+teaFtuaFp+aFruaFneaFleaGglwiXSxbXCJiY2ExXCIsXCLmhbzmhbDmhavmhb7mhqfmhpDmhqvmho7mhqzmhprmhqTmhpTmhq7miK7mkanmka/mkbnmkp7mkrLmkojmkpDmkrDmkqXmkpPmkpXmkqnmkpLmkq7mkq3mkqvmkprmkqzmkpnmkqLmkrPmlbXmlbfmlbjmmq7mmqvmmrTmmrHmqKPmqJ/mp6jmqIHmqJ7mqJnmp73mqKHmqJPmqIrmp7PmqILmqIXmp63mqJHmrZDmrY7mrqTmr4Xmr4bmvL/mvbzmvoTmvZHmvabmvZTmvobmva3mvZvmvbjmva7mvo7mvbrmvbDmvaTmvpfmvZjmu5Xmva/mvaDmvZ/nhp/nhqznhrHnhqjniZbnipvnjY7njZfnkannkovnkoNcIl0sW1wiYmQ0MFwiLFwi55G+55KA55W/55ig55ip55if55ik55im55ih55ii55qa55q655uk556O556H556M556R556L56OL56OF56K656OK56K+56OV56K856OQ56i/56i856mA56i956i356i756qv56qu566t566x56+E566056+G56+H56+B566g56+M57OK57eg57e057ev57e757eY57es57ed57eo57ej57ea57ee57ep57ae57eZ57ey57e557215723576vXCJdLFtcImJkYTFcIixcIue/qeiApuiGm+iGnOiGneiGoOiGmuiGmOiUl+iUveiUmuiTruiUrOiUreiUk+iUkeiUo+iUoeiUlOiTrOiUpeiTv+iUhuieguidtOidtuidoOidpuiduOidqOidmeidl+idjOidk+ihm+ihneikkOikh+ikkuikk+ikleikiuiqvOirkuirh+irhOiqleiri+iruOiqsuirieirguiqv+iqsOirluirjeiqtuiqueirm+ixjOixjuixrOizoOiznuizpuizpOizrOizreizouizo+iznOizquizoei1rei2n+i2o+i4q+i4kOi4nei4oui4j+i4qei4n+i4oei4nui6uui8nei8m+i8n+i8qei8pui8qui8nOi8nlwiXSxbXCJiZTQwXCIsXCLovKXpganpga7pgajpga3pgbfphLDphK3phKfphLHphofphonphovphoPpi4Xpirvpirfpi6rpiqzpi6Tpi4HpirPpirzpi5Lpi4fpi7DpirLplq3plrHpnITpnIbpnIfpnInpnaDpno3pnovpno/poKHpoKvpoJzporPppIrppJPppJLppJjpp53pp5Dpp5/pp5vpp5Hpp5Xpp5Lpp5npqrfpq67pq6/prKfprYXprYTprbfpra/ptIbptIlcIl0sW1wiYmVhMVwiLFwi6bSD6bqp6bq+6buO5aKo6b2S5YSS5YSY5YSU5YSQ5YSV5YaA5Yaq5Yed5YqR5YqT5Yuz5ZmZ5Zmr5Zm55Zmp5Zmk5Zm45Zmq5Zmo5Zml5Zmx5Zmv5Zms5Zmi5Zm25aOB5aK+5aOH5aOF5aWu5ayd5ay05a245a+w5bCO5b2K5oay5oaR5oap5oaK5oeN5oa25oa+5oeK5oeI5oiw5pOF5pOB5pOL5pK75pK85pOa5pOE5pOH5pOC5pON5pK/5pOS5pOU5pK+5pW05puG5puJ5pq55puE5puH5pq45qi95qi45qi65qmZ5qmr5qmY5qi55qmE5qmi5qmh5qmL5qmH5qi15qmf5qmI5q2Z5q235rCF5r+C5r6x5r6hXCJdLFtcImJmNDBcIixcIua/g+a+pOa/gea+p+a+s+a/gOa+uea+tua+pua+oOa+tOeGvueHieeHkOeHkueHiOeHleeGueeHjueHmeeHnOeHg+eHhOeNqOeSnOeSo+eSmOeSn+eSnueToueUjOeUjeeYtOeYuOeYuuebp+ebpeeeoOeenueen+eepeejqOejmuejrOejp+empuepjeepjuephuepjOepi+equuevmeewkeevieevpOevm+evoeevqeevpuezleezlue4ilwiXSxbXCJiZmExXCIsXCLnuJHnuIjnuJvnuKPnuJ7nuJ3nuInnuJDnvbnnvrLnv7Dnv7Hnv67ogKjohrPohqnohqjoh7voiIjoiZjoiZnolYrolZnolYjolajolanolYPolYnola3olarolZ7onoPonp/onp7onqLono3ooaHopKropLLopKXopKvopKHopqropqboq6boq7roq6voq7HorIDoq5zoq6foq67oq77orIHorILoq7foq63oq7Poq7boq7zosavosa3ospPos7TouYTouLHouLTouYLouLnouLXovLvovK/ovLjovLPovqjovqbpgbXpgbTpgbjpgbLpgbzpgbrphLTphpLpjKDpjLbpi7jpjLPpjK/pjKLpi7zpjKvpjITpjJpcIl0sW1wiYzA0MFwiLFwi6YyQ6Yym6Yyh6YyV6Yyu6YyZ6Za76Zqn6Zqo6Zqq6ZuV6ZyO6ZyR6ZyW6ZyN6ZyT6ZyP6Z2b6Z2c6Z2m6Z6Y6aCw6aC46aC76aC36aCt6aC56aCk6aSQ6aSo6aSe6aSb6aSh6aSa6aet6aei6aex6aq46aq86au76aut6ayo6a6R6bSV6bSj6bSm6bSo6bSS6bSb6buY6buU6b6N6b6c5YSq5YSf5YSh5YSy5Yu15ZqO5ZqA5ZqQ5ZqF5ZqHXCJdLFtcImMwYTFcIixcIuWaj+WjleWjk+WjkeWjjuWssOWsquWspOWtuuWwt+WxqOW2vOW2uuW2veW2uOW5q+W9jOW+veaHieaHguaHh+aHpuaHi+aIsuaItOaTjuaTiuaTmOaToOaTsOaTpuaTrOaTseaTouaTreaWguaWg+abmeabluaqgOaqlOaqhOaqouaqnOarm+aqo+apvuaql+aqkOaqoOatnOauruavmuawiOa/mOa/sea/n+a/oOa/m+a/pOa/q+a/r+a+gOa/rOa/oea/qea/lea/rua/sOeHp+eHn+eHrueHpueHpeeHreeHrOeHtOeHoOeIteeJhueNsOeNsueSqeeSsOeSpueSqOeZhueZgueZjOebquees+eequeesOeerFwiXSxbXCJjMTQwXCIsXCLnnqfnnq3nn6/no7fno7rno7Tno6/npIHnpqfnpqrnqZfnqr/nsIfnsI3nr77nr7fnsIznr6Dns6Dns5zns57ns6Lns5/ns5nns53nuK7nuL7nuYbnuLfnuLLnuYPnuKvnuL3nuLHnuYXnuYHnuLTnuLnnuYjnuLXnuL/nuK/nvYTnv7Pnv7zogbHogbLogbDoga/ogbPoh4boh4Pohrroh4Loh4Dohr/ohr3oh4nohr7oh6joiInoibHolqpcIl0sW1wiYzFhMVwiLFwi6JaE6JW+6Jac6JaR6JaU6Jav6Jab6JaH6Jao6JaK6Jmn6J+A6J+R6J6z6J+S6J+G6J6r6J676J666J+I6J+L6KS76KS26KWE6KS46KS96Kas6KyO6KyX6KyZ6Kyb6KyK6Kyg6Kyd6KyE6KyQ6LGB6LC/6LGz6LO66LO96LO86LO46LO76Lao6LmJ6LmL6LmI6LmK6L2E6Ly+6L2C6L2F6Ly/6YG/6YG96YKE6YKB6YKC6YKA6YS56Yaj6Yae6Yac6Y2N6Y6C6Yyo6Y216Y2K6Y2l6Y2L6YyY6Y2+6Y2s6Y2b6Y2w6Y2a6Y2U6ZeK6ZeL6ZeM6ZeI6ZeG6Zqx6Zq46ZuW6Zyc6Zye6Z6g6Z+T6aGG6aK26aS16aiBXCJdLFtcImMyNDBcIixcIumnv+murumuq+muqumurem0u+m0v+m6i+m7j+m7num7nOm7nem7m+m8vum9i+WPouWaleWaruWjmeWjmOWsuOW9neaHo+aIs+aTtOaTsuaTvuaUhuaTuuaTu+aTt+aWt+abnOacpuaqs+aqrOarg+aqu+aquOarguaqruaqr+atn+atuOaur+eAieeAi+a/vueAhua/uueAkeeAj+eHu+eHvOeHvueHuOeNt+eNteeSp+eSv+eUleeZlueZmFwiXSxbXCJjMmExXCIsXCLnmZLnnr3nnr/nnrvnnrznpI7npq7nqaHnqaLnqaDnq4Tnq4XnsKvnsKfnsKrnsJ7nsKPnsKHns6fnuZTnuZXnuZ7nuZrnuaHnuZLnuZnnvYjnv7nnv7vogbfogbboh43oh4/oiIrol4/olqnol43ol5Dol4nolrDolrrolrnolqbon6/on6zon7Lon6DopoboprLop7TorKjorLnorKzorKvosZDotIXouZnouaPouabouaTouZ/ouZXou4DovYnovY3pgofpgoPpgojphqvphqzph5DpjpTpjorpjpbpjqLpjrPpjq7pjqzpjrDpjpjpjprpjpfpl5Tpl5bpl5Dpl5Xpm6Lpm5zpm5npm5vpm57pnKTpnqPpnqZcIl0sW1wiYzM0MFwiLFwi6Z6t6Z+56aGN6aGP6aGM6aGO6aGT6aK66aS+6aS/6aS96aSu6aal6aiO6auB6ayD6ayG6a2P6a2O6a2N6a+K6a+J6a+96a+I6a+A6bWR6bWd6bWg6bug6byV6bys5YSz5Zql5aOe5aOf5aOi5a+16b6Q5bus5oey5oe35oe25oe15pSA5pSP5pug5pud5qul5qud5qua5quT54Cb54Cf54Co54Ca54Cd54CV54CY54iG54iN54mY54qi5424XCJdLFtcImMzYTFcIixcIueNuueSveeTiueTo+eWh+eWhueZn+eZoeefh+ekmeemseepq+epqeewvuewv+ewuOewveewt+exgOe5q+e5ree5uee5qee5que+hee5s+e+tue+uee+uOiHmOiXqeiXneiXquiXleiXpOiXpeiXt+ifu+igheigjeifueifvuiloOiln+illuilnuitgeitnOitmOitieitmuitjuitj+ithuitmei0iOi0iui5vOi5sui6h+i5tui5rOi5uui5tOi9lOi9jui+remCiumCi+mGsemGrumPoemPkemPn+mPg+mPiOmPnOmPnemPlumPoumPjemPmOmPpOmPl+mPqOmXnOmatOmbo+mcqumcp+mdoemfnOmfu+mhnlwiXSxbXCJjNDQwXCIsXCLpoZjpoZvporzppYXppYnpqJbpqJnprI3pr6jpr6fpr5bpr5vptonptaHptbLptarptazpupLpupfpupPpurTli7jlmqjlmrflmrblmrTlmrzlo6TlrYDlrYPlrb3lr7blt4nmh7jmh7rmlJjmlJTmlJnmm6bmnKfmq6zngL7ngLDngLLniJDnjbvnk4/nmaLnmaXnpKbnpKrnpKznpKvnq4fnq7bnsYznsYPnsY3ns6/ns7Dovq7nub3nubxcIl0sW1wiYzRhMVwiLFwi57qC572M6ICA6Iea6Imm6Je76Je56JiR6Je66JiG6JiL6JiH6JiK6KCU6KCV6KWk6Ka66Ke46K2w6K2s6K2m6K2v6K2f6K2r6LSP6LSN6LqJ6LqB6LqF6LqC6Ya06YeL6ZCY6ZCD6Y+96Zeh6Zyw6aOE6aWS6aWR6aao6air6aiw6ai36ai16bCT6bCN6bm56bq16buo6byv6b2f6b2j6b2h5YS35YS45ZuB5ZuA5ZuC5aSU5bGs5beN5oe85oe+5pSd5pSc5paV5pup5qu75qyE5qu65q6y54GM54ib54qn55OW55OU55mp55+T57GQ57qP57qM57686JiX6Jit6Jia6KCj6KCi6KCh6KCf6KWq6KWs6Ka96K20XCJdLFtcImM1NDBcIixcIuitt+itvei0k+i6iui6jei6i+i9n+i+r+mGuumQrumQs+mQtemQuumQuOmQsumQq+mXoumcuOmcuemcsumfv+mhp+mhpemll+mphempg+mpgOmovumrj+mtlOmtkemwremwpem2r+m2tOm3gum2uOm6nem7r+m8mem9nOm9pum9p+WEvOWEu+WbiOWbiuWbieWtv+W3lOW3kuW9juaHv+aUpOasiuatoeeBkeeBmOeOgOeTpOeWiueZrueZrFwiXSxbXCJjNWExXCIsXCLnprPnsaDnsZ/ogb7ogb3oh5/opbLopa/op7zoroDotJbotJfoupHoupPovaHphYjpkYTpkZHpkZLpnL3pnL7pn4Ppn4HpoavppZXpqZXpqY3pq5LprJrpsYnpsLHpsL7psLvpt5Ppt5fpvLTpvazpvarpvpTlm4zlt5bmiIDmlKPmlKvmlKrmm6zmrJDnk5rnq4rnsaTnsaPnsaXnupPnupbnupToh6LomLjomL/ooLHororpgpDpgo/pkaPpkaDpkaTpnajpoa/ppZzpqZrpqZvpqZfpq5Ppq5Tpq5HpsZTpsZfpsZbpt6Xpup/pu7Tlm5Hlo6nmlKzngZ7nmbHnmbLnn5fnvZDnvojooLbooLnooaLorpPorpJcIl0sW1wiYzY0MFwiLFwi6K6W6Im36LSb6YeA6ZGq6Z2C6Z2I6Z2E6Z+G6aGw6amf6ayi6a2Y6bGf6be56be66bm86bm96byH6b236b2y5buz5qyW54Gj57Gs57Gu6KC76KeA6Lqh6YeB6ZGy6ZGw6aGx6aWe6auW6ayj6buM54Gk55+a6K6a6ZG36Z+J6ami6aml57qc6K6c6Lqq6YeF6ZG96ZG+6ZG86bG36bG46bu36LGU6ZG/6bia54io6amq6ayx6bib6bie57GyXCJdLFtcImM5NDBcIixcIuS5guS5nOWHteWMmuWOguS4h+S4jOS5h+S6jeWbl++ojOWxruW9s+S4j+WGh+S4juS4ruS6k+S7guS7ieS7iOWGmOWLvOWNrOWOueWcoOWkg+WkrOWwkOW3v+aXoeaus+avjOawlOeIv+S4seS4vOS7qOS7nOS7qeS7oeS7neS7muWIjOWMnOWNjOWcouWco+Wkl+Wkr+WugeWuhOWwkuWwu+WxtOWxs+W4hOW6gOW6guW/ieaIieaJkOawlVwiXSxbXCJjOWExXCIsXCLmsLbmsYPmsL/msLvniq7nirDnjornprjogorpmJ7kvI7kvJjkvKzku7XkvJTku7HkvIDku7fkvIjkvJ3kvILkvIXkvKLkvJPkvITku7TkvJLlhrHliJPliInliJDliqbljKLljJ/ljY3ljorlkIflm6Hlm5/lnK7lnKrlnLTlpLzlpoDlpbzlpoXlpbvlpb7lpbflpb/lrZblsJXlsKXlsbzlsbrlsbvlsb7lt5/lubXluoTlvILlvJrlvbTlv5Xlv5Tlv4/miZzmiZ7miaTmiaHmiabmiaLmiZnmiaDmiZrmiaXml6/ml67mnL7mnLnmnLjmnLvmnLrmnL/mnLzmnLPmsJjmsYbmsZLmsZzmsY/msYrmsZTmsYtcIl0sW1wiY2E0MFwiLFwi5rGM54Gx54me54q054q1546O55Sq55m/56m1572R6Im46Im86IqA6Im96Im/6JmN6KW+6YKZ6YKX6YKY6YKb6YKU6Zii6Zik6Zig6Zij5L2W5Ly75L2i5L2J5L2T5L2k5Ly+5L2n5L2S5L2f5L2B5L2Y5Lyt5Lyz5Ly/5L2h5YaP5Ya55Yic5Yie5Yih5Yqt5Yqu5YyJ5Y2j5Y2y5Y6O5Y6P5ZCw5ZC35ZCq5ZGU5ZGF5ZCZ5ZCc5ZCl5ZCYXCJdLFtcImNhYTFcIixcIuWQveWRj+WRgeWQqOWQpOWRh+WbruWbp+WbpeWdgeWdheWdjOWdieWdi+WdkuWkhuWlgOWmpuWmmOWmoOWml+WmjuWmouWmkOWmj+Wmp+WmoeWujuWukuWwqOWwquWyjeWyj+WyiOWyi+WyieWykuWyiuWyhuWyk+WyleW3oOW4iuW4juW6i+W6ieW6jOW6iOW6jeW8heW8neW9uOW9tuW/kuW/keW/kOW/reW/qOW/ruW/s+W/oeW/pOW/o+W/uuW/r+W/t+W/u+aAgOW/tOaIuuaKg+aKjOaKjuaKj+aKlOaKh+aJseaJu+aJuuaJsOaKgeaKiOaJt+aJveaJsuaJtOaUt+aXsOaXtOaXs+aXsuaXteadheadh1wiXSxbXCJjYjQwXCIsXCLmnZnmnZXmnYzmnYjmnZ3mnY3mnZrmnYvmr5DmsJnmsJrmsbjmsafmsavmsoTmsovmso/msbHmsa/msanmsprmsa3msofmspXmspzmsabmsbPmsaXmsbvmso7ngbTngbrniaPnir/nir3ni4Pni4bni4Hnirrni4XnjpXnjpfnjpPnjpTnjpLnlLrnlLnnlpTnlpXnmoHnpL3ogLTogpXogpnogpDogpLogpzoipDoio/oioXoio7oipHoipNcIl0sW1wiY2JhMVwiLFwi6IqK6IqD6IqE6LG46L+J6L6/6YKf6YKh6YKl6YKe6YKn6YKg6Ziw6Zio6Ziv6Zit5Liz5L6Y5L285L6F5L295L6A5L6H5L225L205L6J5L6E5L235L2M5L6X5L2q5L6a5L255L6B5L245L6Q5L6c5L6U5L6e5L6S5L6C5L6V5L2r5L2u5Yae5Ya85Ya+5Yi15Yiy5Yiz5YmG5Yix5Yq85YyK5YyL5Yy85Y6S5Y6U5ZKH5ZG/5ZKB5ZKR5ZKC5ZKI5ZGr5ZG65ZG+5ZGl5ZGs5ZG05ZGm5ZKN5ZGv5ZGh5ZGg5ZKY5ZGj5ZGn5ZGk5Zu35Zu55Z2v5Z2y5Z2t5Z2r5Z2x5Z2w5Z225Z6A5Z215Z275Z2z5Z205Z2iXCJdLFtcImNjNDBcIixcIuWdqOWdveWkjOWlheWmteWmuuWnj+WnjuWmsuWnjOWngeWmtuWmvOWng+WnluWmseWmveWngOWniOWmtOWnh+WtouWtpeWuk+WuleWxhOWxh+WyruWypOWyoOWyteWyr+WyqOWyrOWyn+Wyo+WyreWyouWyquWyp+WyneWypeWytuWysOWypuW4l+W4lOW4meW8qOW8ouW8o+W8pOW9lOW+guW9vuW9veW/nuW/peaAreaApuaAmeaAsuaAi1wiXSxbXCJjY2ExXCIsXCLmgLTmgIrmgJfmgLPmgJrmgJ7mgKzmgKLmgI3mgJDmgK7mgJPmgJHmgIzmgInmgJzmiJTmiL3miq3mirTmi5Hmir7miqrmirbmi4rmiq7mirPmiq/mirvmiqnmirDmirjmlL3mlqjmlrvmmInml7zmmITmmJLmmIjml7vmmIPmmIvmmI3mmIXml73mmJHmmJDmm7bmnIrmnoXmnazmno7mnpLmnbbmnbvmnpjmnobmnoTmnbTmno3mnozmnbrmnp/mnpHmnpnmnoPmnb3mnoHmnbjmnbnmnpTmrKXmroDmrb7mr57msJ3mspPms6zms6vms67ms5nmsrbms5Tmsq3ms6fmsrfms5Dms4Lmsrrms4Pms4bms63ms7JcIl0sW1wiY2Q0MFwiLFwi5rOS5rOd5rK05rKK5rKd5rKA5rOe5rOA5rSw5rON5rOH5rKw5rO55rOP5rOp5rOR54KU54KY54KF54KT54KG54KE54KR54KW54KC54Ka54KD54mq54uW54uL54uY54uJ54uc54uS54uU54ua54uM54uR546k546h546t546m546i546g546s546d55Od55Oo55S/55WA55S+55aM55aY55qv55uz55ux55uw55u155+455+855+555+755+6XCJdLFtcImNkYTFcIixcIueft+elguekv+enheepuOepu+eru+exteezveiAteiCj+iCruiCo+iCuOiCteiCreiIoOiKoOiLgOiKq+iKmuiKmOiKm+iKteiKp+iKruiKvOiKnuiKuuiKtOiKqOiKoeiKqeiLguiKpOiLg+iKtuiKouiZsOiZr+iZreiZruixlui/kui/i+i/k+i/jei/lui/lei/l+mCsumCtOmCr+mCs+mCsOmYuemYvemYvOmYuumZg+S/jeS/heS/k+S+suS/ieS/i+S/geS/lOS/nOS/meS+u+S+s+S/m+S/h+S/luS+uuS/gOS+ueS/rOWJhOWJieWLgOWLguWMveWNvOWOl+WOluWOmeWOmOWSuuWSoeWSreWSpeWTj1wiXSxbXCJjZTQwXCIsXCLlk4PojI3lkrflkq7lk5blkrblk4Xlk4blkqDlkbDlkrzlkqLlkr7lkbLlk57lkrDlnrXlnp7lnp/lnqTlnozlnpflnp3lnpvlnpTlnpjlno/lnpnlnqXlnprlnpXlo7TlpI3lpZPlp6Hlp57lp67lqIDlp7Hlp53lp7rlp73lp7zlp7blp6Tlp7Llp7flp5vlp6nlp7Plp7Xlp6Dlp77lp7Tlp63lrqjlsYzls5Dls5jls4zls5fls4vls5tcIl0sW1wiY2VhMVwiLFwi5bOe5bOa5bOJ5bOH5bOK5bOW5bOT5bOU5bOP5bOI5bOG5bOO5bOf5bO45be55bih5bii5bij5big5bik5bqw5bqk5bqi5bqb5bqj5bql5byH5byu5b2W5b6G5oC35oC55oGU5oGy5oGe5oGF5oGT5oGH5oGJ5oGb5oGM5oGA5oGC5oGf5oCk5oGE5oGY5oGm5oGu5omC5omD5ouP5oyN5oyL5ou15oyO5oyD5our5ou55oyP5oyM5ou45ou25oyA5oyT5oyU5ou65oyV5ou75ouw5pWB5pWD5paq5pa/5pi25pih5piy5pi15pic5pim5pii5piz5pir5pi65pid5pi05pi55piu5pyP5pyQ5p+B5p+y5p+I5p66XCJdLFtcImNmNDBcIixcIuafnOaeu+afuOafmOafgOaet+afheafq+afpOafn+aeteafjeaes+aft+aftuafruafo+afguaeueafjuafp+afsOaesuafvOafhuafreafjOaeruafpuafm+afuuafieafiuafg+afquafi+asqOauguauhOautuavluavmOavoOawoOawoea0qOa0tOa0rea0n+a0vOa0v+a0kua0iuazmua0s+a0hOa0mea0uua0mua0kea0gOa0nea1glwiXSxbXCJjZmExXCIsXCLmtIHmtJjmtLfmtIPmtI/mtYDmtIfmtKDmtKzmtIjmtKLmtInmtJDngrfngp/ngr7ngrHngrDngqHngrTngrXngqnniYHniYnniYrniaznibDnibPnia7ni4rni6Tni6jni6vni5/ni6rni6bni6PnjoXnj4znj4Lnj4jnj4XnjrnnjrbnjrXnjrTnj6vnjr/nj4fnjr7nj4Pnj4bnjrjnj4vnk6znk67nlK7nlYfnlYjnlqfnlqrnmbnnm4TnnIjnnIPnnITnnIXnnIrnm7fnm7vnm7rnn6fnn6jnoIbnoJHnoJLnoIXnoJDnoI/noI7noInnoIPnoJPnpYrnpYznpYvnpYXnpYTnp5Xnp43np4/np5bnp47nqoBcIl0sW1wiZDA0MFwiLFwi56m+56uR56yA56yB57G657G457G557G/57KA57KB57SD57SI57SB572Y576R576N576+6ICH6ICO6ICP6ICU6IC36IOY6IOH6IOg6IOR6IOI6IOC6IOQ6IOF6IOj6IOZ6IOc6IOK6IOV6IOJ6IOP6IOX6IOm6ION6Ie/6Iih6IqU6IuZ6Iu+6Iu56IyH6Iuo6IyA6IuV6Iy66Iur6IuW6Iu06Ius6Iuh6Iuy6Iu16IyM6Iu76Iu26Iuw6IuqXCJdLFtcImQwYTFcIixcIuiLpOiLoOiLuuiLs+iLreiZt+iZtOiZvOiZs+ihgeihjuihp+ihquihqeink+iohOioh+i1sui/o+i/oei/rui/oOmDsemCvemCv+mDlemDhemCvumDh+mDi+mDiOmHlOmHk+mZlOmZj+mZkemZk+mZiumZjuWAnuWAheWAh+WAk+WAouWAsOWAm+S/teS/tOWAs+WAt+WArOS/tuS/t+WAl+WAnOWAoOWAp+WAteWAr+WAseWAjuWFmuWGlOWGk+WHiuWHhOWHheWHiOWHjuWJoeWJmuWJkuWJnuWJn+WJleWJouWLjeWMjuWOnuWUpuWTouWUl+WUkuWTp+WTs+WTpOWUmuWTv+WUhOWUiOWTq+WUkeWUheWTsVwiXSxbXCJkMTQwXCIsXCLllIrlk7vlk7flk7jlk6DllI7llIPllIvlnIHlnILln4zloLLln5Xln5Llnrrln4blnr3lnrzlnrjlnrblnr/ln4fln5Dlnrnln4HlpI7lpYrlqJnlqJblqK3lqK7lqJXlqI/lqJflqIrlqJ7lqLPlrazlrqflrq3lrqzlsIPlsZblsZTls6zls7/ls67ls7Hls7fltIDls7nluKnluKjluqjluq7luqrluqzlvLPlvLDlvafmgZ3mgZrmgadcIl0sW1wiZDFhMVwiLFwi5oGB5oKi5oKI5oKA5oKS5oKB5oKd5oKD5oKV5oKb5oKX5oKH5oKc5oKO5oiZ5omG5ouy5oyQ5o2W5oys5o2E5o2F5oy25o2D5o+k5oy55o2L5o2K5oy85oyp5o2B5oy05o2Y5o2U5o2Z5oyt5o2H5oyz5o2a5o2R5oy45o2X5o2A5o2I5pWK5pWG5peG5peD5peE5peC5pmK5pmf5pmH5pmR5pyS5pyT5qCf5qCa5qGJ5qCy5qCz5qC75qGL5qGP5qCW5qCx5qCc5qC15qCr5qCt5qCv5qGO5qGE5qC05qCd5qCS5qCU5qCm5qCo5qCu5qGN5qC65qCl5qCg5qys5qyv5qyt5qyx5qy05q2t6IKC5q6I5q+m5q+kXCJdLFtcImQyNDBcIixcIuavqOavo+avouavp+awpea1uua1o+a1pOa1tua0jea1oea2kua1mOa1oua1rea1r+a2kea2jea3r+a1v+a2hua1nua1p+a1oOa2l+a1sOa1vOa1n+a2gua2mOa0r+a1qOa2i+a1vua2gOa2hOa0lua2g+a1u+a1vea1tea2kOeDnOeDk+eDkeeDneeDi+e8ueeDoueDl+eDkueDnueDoOeDlOeDjeeDheeDhueDh+eDmueDjueDoeeJgueJuFwiXSxbXCJkMmExXCIsXCLnibfnibbnjIDni7rni7Tni77ni7bni7Pni7vnjIHnj5Pnj5nnj6Xnj5bnjrznj6fnj6Pnj6nnj5znj5Lnj5vnj5Tnj53nj5rnj5fnj5jnj6jnk57nk5/nk7Tnk7XnlKHnlZvnlZ/nlrDnl4Hnlrvnl4Tnl4Dnlr/nlrbnlrrnmornm4nnnJ3nnJvnnJDnnJPnnJLnnKPnnJHnnJXnnJnnnJrnnKLnnKfnoKPnoKznoKLnoLXnoK/noKjnoK7noKvnoKHnoKnnoLPnoKrnoLHnpZTnpZvnpY/npZznpZPnpZLnpZHnp6vnp6znp6Dnp67np63np6rnp5znp57np53nqobnqonnqoXnqovnqoznqornqofnq5jnrJBcIl0sW1wiZDM0MFwiLFwi56yE56yT56yF56yP56yI56yK56yO56yJ56yS57KE57KR57KK57KM57KI57KN57KF57Se57Sd57SR57SO57SY57SW57ST57Sf57SS57SP57SM572c572h572e572g572d572b576W576S57+D57+C57+A6ICW6IC+6IC56IO66IOy6IO56IO16ISB6IO76ISA6IiB6Iiv6Iil6Iyz6Iyt6I2E6IyZ6I2R6Iyl6I2W6Iy/6I2B6Iym6Iyc6IyiXCJdLFtcImQzYTFcIixcIuiNguiNjuiMm+iMquiMiOiMvOiNjeiMluiMpOiMoOiMt+iMr+iMqeiNh+iNheiNjOiNk+iMnuiMrOiNi+iMp+iNiOiZk+iZkuiaouiaqOialuiajeiakeianuiah+ial+iahuiai+iamuiaheiapeiameiaoeiap+ialeiamOiajuianeiakOialOihg+ihhOihreihteihtuihsuiigOihseihv+ihr+iig+ihvuihtOihvOiokuixh+ixl+ixu+iypOiyo+i1tui1uOi2tei2t+i2tui7kei7k+i/vui/temAgui/v+i/u+mAhOi/vOi/tumDlumDoOmDmemDmumDo+mDn+mDpemDmOmDm+mDl+mDnOmDpOmFkFwiXSxbXCJkNDQwXCIsXCLphY7phY/ph5Xph6Lph5rpmZzpmZ/pmrzpo6Ppq5/prK/kub/lgbDlgarlgaHlgZ7lgaDlgZPlgYvlgZ3lgbLlgYjlgY3lgYHlgZvlgYrlgaLlgJXlgYXlgZ/lganlgavlgaPlgaTlgYblgYDlga7lgbPlgZflgZHlh5Dliavlia3liazlia7li5bli5PljK3ljpzllbXllbbllLzllY3llZDllLTllKrllZHllaLllLbllLXllLDllZLllYVcIl0sW1wiZDRhMVwiLFwi5ZSM5ZSy5ZWl5ZWO5ZS55ZWI5ZSt5ZS75ZWA5ZWL5ZyK5ZyH5Z+75aCU5Z+i5Z+25Z+c5Z+05aCA5Z+t5Z+95aCI5Z+45aCL5Z+z5Z+P5aCH5Z+u5Z+j5Z+y5Z+l5Z+s5Z+h5aCO5Z+85aCQ5Z+n5aCB5aCM5Z+x5Z+p5Z+w5aCN5aCE5aWc5amg5amY5amV5amn5ame5ai45ai15amt5amQ5amf5aml5ams5amT5amk5amX5amD5amd5amS5amE5amb5amI5aqO5ai+5amN5ai55amM5amw5amp5amH5amR5amW5amC5amc5a2y5a2u5a+B5a+A5bGZ5bSe5bSL5bSd5bSa5bSg5bSM5bSo5bSN5bSm5bSl5bSPXCJdLFtcImQ1NDBcIixcIuW0sOW0kuW0o+W0n+W0ruW4vuW4tOW6seW6tOW6ueW6suW6s+W8tuW8uOW+m+W+luW+n+aCiuaCkOaChuaCvuaCsOaCuuaDk+aDlOaDj+aDpOaDmeaDneaDiOaCseaDm+aCt+aDiuaCv+aDg+aDjeaDgOaMsuaNpeaOiuaOguaNveaOveaOnuaOreaOneaOl+aOq+aOjuaNr+aOh+aOkOaNruaOr+aNteaOnOaNreaOruaNvOaOpOaMu+aOn1wiXSxbXCJkNWExXCIsXCLmjbjmjoXmjoHmjpHmjo3mjbDmlZPml43mmaXmmaHmmZvmmZnmmZzmmaLmnJjmobnmoofmopDmopzmoa3moa7moq7moqvmpZbmoa/moqPmoqzmoqnmobXmobTmorLmoo/mobfmopLmobzmoavmobLmoqrmooDmobHmob7mopvmopbmoovmoqDmoonmoqTmobjmobvmopHmoozmoormob3mrLbmrLPmrLfmrLjmrpHmro/mro3mro7mrozmsKrmt4DmtqvmtrTmtrPmubTmtqzmt6nmt6Lmtrfmt7bmt5TmuIDmt4jmt6Dmt5/mt5bmtr7mt6Xmt5zmt53mt5vmt7Tmt4rmtr3mt63mt7Dmtrrmt5Xmt4Lmt4/mt4lcIl0sW1wiZDY0MFwiLFwi5reQ5rey5reT5re95reX5reN5rej5ra754O654SN54O354SX54O054SM54Ow54SE54Oz54SQ54O854O/54SG54ST54SA54O454O254SL54SC54SO54m+54m754m854m/54yd54yX54yH54yR54yY54yK54yI54u/54yP54ye546I54+254+454+155CE55CB54+955CH55CA54+654+854+/55CM55CL54+055CI55Wk55Wj55eO55eS55ePXCJdLFtcImQ2YTFcIixcIueXi+eXjOeXkeeXkOeaj+eaieebk+ecueecr+ecreecseecsuectOecs+ecveecpeecu+ecteehiOehkuehieehjeehiuehjOegpuehheehkOelpOelp+elqeelquelo+elq+eloeemu+enuuenuOentuent+eqj+eqlOeqkOesteeth+estOespeessOesouespOess+esmOesquesneesseesq+esreesr+essuesuOesmueso+eylOeymOeylueyo+e0tee0vee0uOe0tue0uue1hee0rOe0qee1gee1h+e0vue0v+e1iue0u+e0qOe9o+e+lee+nOe+nee+m+e/iue/i+e/jee/kOe/kee/h+e/j+e/ieiAn1wiXSxbXCJkNzQwXCIsXCLogJ7ogJvogYfogYPogYjohJjohKXohJnohJvohK3ohJ/ohKzohJ7ohKHohJXohKfohJ3ohKLoiJHoiLjoiLPoiLroiLToiLLoibTojpDojqPojqjojo3ojbrojbPojqTojbTojo/ojoHojpXojpnojbXojpTojqnojb3ojoPojozojp3ojpvojqrojovojb7ojqXojq/ojojojpfojrDojb/ojqbojofojq7ojbbojpromZnomZbomr/omrdcIl0sW1wiZDdhMVwiLFwi6JuC6JuB6JuF6Jq66Jqw6JuI6Jq56Jqz6Jq46JuM6Jq06Jq76Jq86JuD6Jq96Jq+6KGS6KKJ6KKV6KKo6KKi6KKq6KKa6KKR6KKh6KKf6KKY6KKn6KKZ6KKb6KKX6KKk6KKs6KKM6KKT6KKO6KaC6KeW6KeZ6KeV6Kiw6Kin6Kis6Kie6LC56LC76LGc6LGd6LG96LKl6LW96LW76LW56La86LeC6La56La/6LeB6LuY6Lue6Lud6Luc6LuX6Lug6Luh6YCk6YCL6YCR6YCc6YCM6YCh6YOv6YOq6YOw6YO06YOy6YOz6YOU6YOr6YOs6YOp6YWW6YWY6YWa6YWT6YWV6Yes6Ye06Yex6Yez6Ye46Yek6Ye56YeqXCJdLFtcImQ4NDBcIixcIumHq+mHt+mHqOmHrumVuumWhumWiOmZvOmZremZq+mZsemZr+mav+mdqumghOmjpemml+WCm+WCleWClOWCnuWCi+WCo+WCg+WCjOWCjuWCneWBqOWCnOWCkuWCguWCh+WFn+WHlOWMkuWMkeWOpOWOp+WWkeWWqOWWpeWWreWVt+WZheWWouWWk+WWiOWWj+WWteWWgeWWo+WWkuWWpOWVveWWjOWWpuWVv+WWleWWoeWWjuWcjOWgqeWgt1wiXSxbXCJkOGExXCIsXCLloJnloJ7loKfloKPloKjln7XloYjloKXloJzloJvloLPloL/loLbloK7loLnloLjloK3loKzloLvlpaHlqq/lqpTlqp/lqbrlqqLlqp7lqbjlqqblqbzlqqXlqqzlqpXlqq7lqLflqoTlqorlqpflqoPlqovlqqnlqbvlqb3lqozlqpzlqo/lqpPlqp3lr6rlr43lr4vlr5Tlr5Hlr4rlr47lsIzlsLDltLfltYPltavltYHltYvltL/ltLXltZHltY7ltZXltLPltLrltZLltL3ltLHltZnltYLltLnltYnltLjltLzltLLltLbltYDltYXluYTluYHlvZjlvqblvqXlvqvmg4nmgrnmg4zmg6Lmg47mg4TmhJRcIl0sW1wiZDk0MFwiLFwi5oOy5oSK5oSW5oSF5oO15oST5oO45oO85oO+5oOB5oSD5oSY5oSd5oSQ5oO/5oSE5oSL5omK5o6U5o6x5o6w5o+O5o+l5o+o5o+v5o+D5pKd5o+z5o+K5o+g5o+25o+V5o+y5o+15pGh5o+f5o6+5o+d5o+c5o+E5o+Y5o+T5o+C5o+H5o+M5o+L5o+I5o+w5o+X5o+Z5pSy5pWn5pWq5pWk5pWc5pWo5pWl5paM5pad5pae5pau5peQ5peSXCJdLFtcImQ5YTFcIixcIuaZvOaZrOaZu+aagOaZseaZueaZquaZsuacgeakjOajk+akhOajnOakquajrOajquajseakj+ajluajt+ajq+ajpOajtuakk+akkOajs+ajoeakh+ajjOakiOalsOaitOakkeajr+ajhuaklOajuOajkOajveajvOajqOaki+akiuakl+ajjuajiOajneajnuajpuajtOajkeakhuajlOajqeakleakpeajh+asueasu+asv+asvOaulOaul+aumeauleauveavsOavsuavs+awsOa3vOa5hua5h+a4n+a5iea6iOa4vOa4vea5hea5oua4q+a4v+a5gea5nea5s+a4nOa4s+a5i+a5gOa5kea4u+a4g+a4rua5nlwiXSxbXCJkYTQwXCIsXCLmuajmuZzmuaHmuLHmuKjmuaDmubHmuavmuLnmuKLmuLDmuZPmuaXmuKfmubjmuaTmubfmuZXmubnmuZLmuabmuLXmuLbmuZrnhKDnhJ7nhK/ng7vnhK7nhLHnhKPnhKXnhKLnhLLnhJ/nhKjnhLrnhJvniYvniZrniojnionniobnioXniovnjJLnjIvnjLDnjKLnjLHnjLPnjKfnjLLnjK3njKbnjKPnjLXnjIznkK7nkKznkLDnkKvnkJZcIl0sW1wiZGFhMVwiLFwi55Ca55Ch55Ct55Cx55Ck55Cj55Cd55Cp55Cg55Cy55O755Sv55Wv55Ws55en55ea55eh55em55ed55ef55ek55eX55qV55qS55ua552G552H552E552N552F552K552O552L552M55+e55+s56Gg56Gk56Gl56Gc56Gt56Gx56Gq56Gu56Gw56Gp56Go56Ge56Gi56W056Wz56Wy56Ww56iC56iK56iD56iM56iE56qZ56um56uk562K56y7562E562I562M562O562A562Y562F57Ki57Ke57Ko57Kh57WY57Wv57Wj57WT57WW57Wn57Wq57WP57Wt57Wc57Wr57WS57WU57Wp57WR57Wf57WO57y+57y/572lXCJdLFtcImRiNDBcIixcIue9pue+oue+oOe+oee/l+iBkeiBj+iBkOiDvuiDlOiFg+iFiuiFkuiFj+iFh+iEveiFjeiEuuiHpuiHruiHt+iHuOiHueiIhOiIvOiIveiIv+iJteiMu+iPj+iPueiQo+iPgOiPqOiQkuiPp+iPpOiPvOiPtuiQkOiPhuiPiOiPq+iPo+iOv+iQgeiPneiPpeiPmOiPv+iPoeiPi+iPjuiPluiPteiPieiQieiQj+iPnuiQkeiQhuiPguiPs1wiXSxbXCJkYmExXCIsXCLoj5Xoj7roj4foj5Hoj6rokJPoj4Poj6zoj67oj4Toj7voj5foj6LokJvoj5voj77om5jom6Lom6bom5Pom6Pom5rom6rom53om6vom5zom6zom6nom5fom6jom5HooYjooZbooZXoorroo5foornoorjoo4Door7oorboorzoorfoor3oorLopIHoo4noppXoppjoppfop53op5rop5voqY7oqY3oqLnoqZnoqYDoqZfoqZjoqYToqYXoqZLoqYjoqZHoqYroqYzoqY/osZ/osoHosoDosrrosr7osrDosrnosrXotoTotoDotonot5jot5Pot43ot4fot5bot5zot4/ot5Xot5not4jot5fot4Xou6/ou7fou7pcIl0sW1wiZGM0MFwiLFwi6Lu56Lum6Luu6Lul6Lu16Lun6Luo6Lu26Lur6Lux6Lus6Lu06Lup6YCt6YC06YCv6YSG6YSs6YSE6YO/6YO86YSI6YO56YO76YSB6YSA6YSH6YSF6YSD6YWh6YWk6YWf6YWi6YWg6YiB6YiK6Yil6YiD6Yia6Yim6YiP6YiM6YiA6YiS6Ye/6Ye96YiG6YiE6Yin6YiC6Yic6Yik6YiZ6YiX6YiF6YiW6ZW76ZaN6ZaM6ZaQ6ZqH6Zm+6ZqIXCJdLFtcImRjYTFcIixcIumaiemag+magOmbgumbiOmbg+mbsembsOmdrOmdsOmdrumgh+miqemjq+mzpum7ueS6g+S6hOS6tuWCveWCv+WDhuWCruWDhOWDiuWCtOWDiOWDguWCsOWDgeWCuuWCseWDi+WDieWCtuWCuOWHl+WJuuWJuOWJu+WJvOWXg+WXm+WXjOWXkOWXi+WXiuWXneWXgOWXlOWXhOWXqeWWv+WXkuWWjeWXj+WXleWXouWXluWXiOWXsuWXjeWXmeWXguWclOWhk+WhqOWhpOWhj+WhjeWhieWhr+WhleWhjuWhneWhmeWhpeWhm+WgveWho+WhseWjvOWrh+WrhOWri+WquuWquOWqseWqteWqsOWqv+WriOWqu+WrhlwiXSxbXCJkZDQwXCIsXCLlqrflq4Dlq4rlqrTlqrblq43lqrnlqpDlr5blr5jlr5nlsJ/lsLPltbHltaPltYrltaXltbLltazltZ7ltajltafltaLlt7DluY/luY7luYrluY3luYvlu4Xlu4zlu4blu4vlu4flvYDlvq/lvq3mg7fmhYnmhYrmhKvmhYXmhLbmhLLmhK7mhYbmhK/mhY/mhKnmhYDmiKDphajmiKPmiKXmiKTmj4Xmj7Hmj6vmkJDmkJLmkInmkKDmkKRcIl0sW1wiZGRhMVwiLFwi5pCz5pGD5pCf5pCV5pCY5pC55pC35pCi5pCj5pCM5pCm5pCw5pCo5pGB5pC15pCv5pCK5pCa5pGA5pCl5pCn5pCL5o+n5pCb5pCu5pCh5pCO5pWv5paS5peT5pqG5pqM5pqV5pqQ5pqL5pqK5pqZ5pqU5pm45pyg5qWm5qWf5qS45qWO5qWi5qWx5qS/5qWF5qWq5qS55qWC5qWX5qWZ5qW65qWI5qWJ5qS15qWs5qSz5qS95qWl5qOw5qW45qS05qWp5qWA5qWv5qWE5qW25qWY5qWB5qW05qWM5qS75qWL5qS35qWc5qWP5qWR5qSy5qWS5qSv5qW75qS85q2G5q2F5q2D5q2C5q2I5q2B5q6b76iN5q+75q+8XCJdLFtcImRlNDBcIixcIuavueavt+avuOa6m+a7lua7iOa6j+a7gOa6n+a6k+a6lOa6oOa6sea6uea7hua7kua6vea7gea6nua7iea6t+a6sOa7jea6pua7j+a6sua6vua7g+a7nOa7mOa6mea6kua6jua6jea6pOa6oea6v+a6s+a7kOa7iua6l+a6rua6o+eFh+eFlOeFkueFo+eFoOeFgeeFneeFoueFsueFuOeFqueFoeeFgueFmOeFg+eFi+eFsOeFn+eFkOeFk1wiXSxbXCJkZWExXCIsXCLnhYTnhY3nhZrniY/nio3nioznipHnipDnio7njLznjYLnjLvnjLrnjYDnjYrnjYnnkYTnkYrnkYvnkZLnkZHnkZfnkYDnkY/nkZDnkY7nkYLnkYbnkY3nkZTnk6Hnk7/nk77nk73nlJ3nlbnnlbfmpoPnl6/nmI/nmIPnl7fnl77nl7znl7nnl7jnmJDnl7vnl7bnl63nl7Xnl73nmpnnmrXnm53nnZXnnZ/nnaDnnZLnnZbnnZrnnannnafnnZTnnZnnna3nn6DnoofnoprnopTnoo/nooTnopXnooXnoobnoqHnooPnobnnopnnooDnopbnobvnpbznpoLnpb3npbnnqJHnqJjnqJnnqJLnqJfnqJXnqKLnqJNcIl0sW1wiZGY0MFwiLFwi56ib56iQ56qj56qi56qe56ur562m562k562t5620562p562y562l562z562x562w562h56245622562j57Ky57K057Kv57aI57aG57aA57aN57W/57aF57W657aO57W757aD57W857aM57aU57aE57W957aS572t572r572n572o572s576m576l576n57+b57+c6ICh6IWk6IWg6IW36IWc6IWp6IWb6IWi6IWy5pyh6IWe6IW26IWn6IWvXCJdLFtcImRmYTFcIixcIuiFhOiFoeiIneiJieiJhOiJgOiJguiJheiTseiQv+iRluiRtuiRueiSj+iSjeiRpeiRkeiRgOiShuiRp+iQsOiRjeiRveiRmuiRmeiRtOiRs+iRneiUh+iRnuiQt+iQuuiQtOiRuuiRg+iRuOiQsuiRheiQqeiPmeiRi+iQr+iRguiQreiRn+iRsOiQueiRjuiRjOiRkuiRr+iTheiSjuiQu+iRh+iQtuiQs+iRqOiRvuiRhOiQq+iRoOiRlOiRruiRkOici+ichOibt+icjOibuuibluibteidjeibuOicjuicieicgeibtuicjeicheijluiji+ijjeijjuijnuijm+ijmuijjOijkOimheimm+inn+inpeinpFwiXSxbXCJlMDQwXCIsXCLop6Hop6Dop6Lop5zop6boqbboqoboqb/oqaHoqL/oqbfoqoLoqoToqbXoqoPoqoHoqbToqbrosLzosYvosYrosaXosaTosabosobosoTosoXos4zotajotanotpHotozoto7oto/oto3otpPotpTotpDotpLot7Dot6Dot6zot7Hot67ot5Dot6not6Pot6Lot6fot7Lot6vot7TovIbou7/ovIHovIDovIXovIfovIjovILovIvpgZLpgL9cIl0sW1wiZTBhMVwiLFwi6YGE6YGJ6YC96YSQ6YSN6YSP6YSR6YSW6YSU6YSL6YSO6YWu6YWv6YmI6YmS6Yiw6Yi66Ymm6Yiz6Yml6Yme6YqD6Yiu6YmK6YmG6Ymt6Yms6YmP6Ymg6Ymn6Ymv6Yi26Ymh6Ymw6Yix6YmU6Ymj6YmQ6Ymy6YmO6YmT6YmM6YmW6Yiy6Zaf6Zac6Zae6Zab6ZqS6ZqT6ZqR6ZqX6ZuO6Zu66Zu96Zu46Zu16Z2z6Z236Z246Z2y6aCP6aCN6aCO6aKs6aO26aO56aav6aay6aaw6aa16aqt6aqr6a2b6bOq6bOt6bOn6bqA6bu95YOm5YOU5YOX5YOo5YOz5YOb5YOq5YOd5YOk5YOT5YOs5YOw5YOv5YOj5YOgXCJdLFtcImUxNDBcIixcIuWHmOWKgOWKgeWLqeWLq+WMsOWOrOWYp+WYleWYjOWYkuWXvOWYj+WYnOWYgeWYk+WYguWXuuWYneWYhOWXv+WXueWiieWhvOWikOWimOWihuWigeWhv+WhtOWii+WhuuWih+WikeWijuWhtuWiguWiiOWhu+WilOWij+WjvuWlq+WrnOWrruWrpeWrleWrquWrmuWrreWrq+Wrs+WrouWroOWrm+WrrOWrnuWrneWrmeWrqOWrn+Wtt+WvoFwiXSxbXCJlMWExXCIsXCLlr6PlsaPltoLltoDltb3ltobltbrltoHltbfltorltonltojltb7ltbzlto3ltbnltb/luZjluZnluZPlu5jlu5Hlu5flu47lu5zlu5Xlu5nlu5Llu5TlvYTlvYPlva/lvrbmhKzmhKjmhYHmhZ7mhbHmhbPmhZLmhZPmhbLmhazmhoDmhbTmhZTmhbrmhZvmhaXmhLvmharmhaHmhZbmiKnmiKfmiKvmkKvmkY3mkZvmkZ3mkbTmkbbmkbLmkbPmkb3mkbXmkabmkqbmkY7mkoLmkZ7mkZzmkYvmkZPmkaDmkZDmkb/mkL/mkazmkavmkZnmkaXmkbfmlbPmlqDmmqHmmqDmmp/mnIXmnITmnKLmprHmprbmp4lcIl0sW1wiZTI0MFwiLFwi5qag5qeO5qaW5qaw5qas5qa85qaR5qaZ5qaO5qan5qaN5qap5qa+5qav5qa/5qeE5qa95qak5qeU5qa55qeK5qaa5qeP5qaz5qaT5qaq5qah5qae5qeZ5qaX5qaQ5qeC5qa15qal5qeG5q2K5q2N5q2L5q6e5q6f5q6g5q+D5q+E5q++5ruO5ru15rux5ryD5ryl5ru45ry35ru75ryu5ryJ5r2O5ryZ5rya5ryn5ryY5ry75ryS5rut5ryKXCJdLFtcImUyYTFcIixcIua8tua9s+a7uea7rua8rea9gOa8sOa8vOa8tea7q+a8h+a8jua9g+a8hea7vea7tua8uea8nOa7vOa8uua8n+a8jea8nua8iOa8oeeGh+eGkOeGieeGgOeGheeGgueGj+eFu+eGhueGgeeGl+eJhOeJk+eKl+eKleeKk+eNg+eNjeeNkeeNjOeRoueRs+eRseeRteeRsueRp+eRrueUgOeUgueUg+eVveeWkOeYlueYiOeYjOeYleeYkeeYiueYlOeauOeegeedvOeeheeeguedrueegOedr+edvueeg+eisueiqueitOeireeiqOehvueiq+einueipeeioOeirOeioueipOemmOemiuemi+emluemleemlOemk1wiXSxbXCJlMzQwXCIsXCLnppfnpojnppLnppDnqKvnqYrnqLDnqK/nqKjnqKbnqqjnqqvnqqznq67nrojnrpznrornrpHnrpDnrpbnro3nroznrpvnro7nroXnrpjlioTnrpnnrqTnroLnsrvnsr/nsrznsrrntqfntrfnt4LntqPntqrnt4Hnt4Dnt4Xntp3nt47nt4Tnt4bnt4vnt4zntq/ntrnntpbntrzntp/ntqbntq7ntqnntqHnt4nnvbPnv6Lnv6Pnv6Xnv55cIl0sW1wiZTNhMVwiLFwi6ICk6IGd6IGc6IaJ6IaG6IaD6IaH6IaN6IaM6IaL6IiV6JKX6JKk6JKh6JKf6JK66JOO6JOC6JKs6JKu6JKr6JK56JK06JOB6JON6JKq6JKa6JKx6JOQ6JKd6JKn6JK76JKi6JKU6JOH6JOM6JKb6JKp6JKv6JKo6JOW6JKY6JK26JOP6JKg6JOX6JOU6JOS6JOb6JKw6JKR6Jmh6Jyz6Jyj6Jyo6J2r6J2A6Jyu6Jye6Jyh6JyZ6Jyb6J2D6Jys6J2B6Jy+6J2G6Jyg6Jyy6Jyq6Jyt6Jy86JyS6Jy66Jyx6Jy16J2C6Jym6Jyn6Jy46Jyk6Jya6Jyw6JyR6KO36KOn6KOx6KOy6KO66KO+6KOu6KO86KO26KO7XCJdLFtcImU0NDBcIixcIuijsOijrOijq+imneimoeimn+imnuinqeinq+inqOiqq+iqmeiqi+iqkuiqj+iqluiwveixqOixqeizleizj+izl+i2lui4iei4gui3v+i4jei3vei4iui4g+i4h+i4hui4hei3vui4gOi4hOi8kOi8kei8jui8jemEo+mEnOmEoOmEoumEn+mEnemEmumEpOmEoemEm+mFuumFsumFuemFs+mKpemKpOmJtumKm+mJuumKoOmKlOmKqumKjVwiXSxbXCJlNGExXCIsXCLpiqbpiprpiqvpibnpipfpib/piqPpi67pio7pioLpipXpiqLpib3piojpiqHpiorpiobpiozpipnpiqfpib7piofpiqnpip3piovpiK3pmp7pmqHpm7/pnZjpnb3pnbrpnb7pnoPpnoDpnoLpnbvpnoTpnoHpnb/pn47pn43poJbpoq3poq7ppILppIDppIfppp3pppzpp4Ppprnpprvpprrpp4Lppr3pp4fpqrHpq6Ppq6fprL7prL/praDpraHprZ/ps7Hps7Lps7Xpuqflg7/lhIPlhLDlg7jlhIblhIflg7blg77lhIvlhIzlg73lhIrliovliozli7Hli6/lmYjlmYLlmYzlmLXlmYHlmYrlmYnlmYblmZhcIl0sW1wiZTU0MFwiLFwi5Zma5ZmA5Ziz5Zi95Zis5Zi+5Zi45Ziq5Zi65Zya5aKr5aKd5aKx5aKg5aKj5aKv5aKs5aKl5aKh5aO/5au/5au05au95au35au25ayD5au45ayC5au55ayB5ayH5ayF5ayP5bGn5baZ5baX5baf5baS5bai5baT5baV5bag5bac5bah5baa5bae5bmp5bmd5bmg5bmc57ez5bub5bue5buh5b2J5b6y5oaL5oaD5oW55oax5oaw5oai5oaJXCJdLFtcImU1YTFcIixcIuaGm+aGk+aGr+aGreaGn+aGkuaGquaGoeaGjeaFpuaGs+aIreaRruaRsOaSluaSoOaSheaSl+aSnOaSj+aSi+aSiuaSjOaSo+aSn+aRqOaSseaSmOaVtuaVuuaVueaVu+aWsuaWs+aateaasOaaqeaasuaat+aaquaar+aogOaohuaol+anpeanuOaoleanseanpOaooOanv+anrOanouaom+aoneanvuaop+ansuanruaolOant+anp+apgOaoiOanpuanu+aojeanvOanq+aoieaohOaomOaopeaoj+antuaopuaoh+antOaoluatkeaupeauo+auouaupuawgeawgOavv+awgua9gea8pua9vua+h+a/hua+klwiXSxbXCJlNjQwXCIsXCLmvo3mvonmvozmvaLmvY/mvoXmvZrmvpbmvbbmvazmvoLmvZXmvbLmvZLmvZDmvZfmvpTmvpPmvZ3mvIDmvaHmvavmvb3mvafmvpDmvZPmvovmvanmvb/mvpXmvaPmvbfmvarmvbvnhrLnhq/nhpvnhrDnhqDnhprnhqnnhrXnhp3nhqXnhp7nhqTnhqHnhqrnhpznhqfnhrPnipjniprnjZjnjZLnjZ7njZ/njaDnjZ3njZvnjaHnjZrnjZlcIl0sW1wiZTZhMVwiLFwi542i55KH55KJ55KK55KG55KB55G955KF55KI55G855G555SI55SH55W+55il55ie55iZ55id55ic55ij55ia55io55ib55qc55qd55qe55qb556N556P556J556I56ON56K756OP56OM56OR56OO56OU56OI56OD56OE56OJ56aa56ah56ag56ac56ai56ab5q2256i556qy56q056qz566356+L566+566s56+O566v566556+K566157OF57OI57OM57OL57e357eb57eq57en57eX57eh57iD57e657em57e257ex57ew57eu57ef5722576s576w576t57+t57+r57+q57+s57+m57+o6IGk6IGn6Iaj6IafXCJdLFtcImU3NDBcIixcIuiGnuiGleiGouiGmeiGl+iIluiJj+iJk+iJkuiJkOiJjuiJkeiUpOiUu+iUj+iUgOiUqeiUjuiUieiUjeiUn+iUiuiUp+iUnOiTu+iUq+iTuuiUiOiUjOiTtOiUquiTsuiUleiTt+iTq+iTs+iTvOiUkuiTquiTqeiUluiTvuiUqOiUneiUruiUguiTveiUnuiTtuiUseiUpuiTp+iTqOiTsOiTr+iTueiUmOiUoOiUsOiUi+iUmeiUr+iZolwiXSxbXCJlN2ExXCIsXCLonZbonaPonaTonbfon6HonbPonZjonZTonZvonZLonaHonZronZHonZ7ona3onaronZDonY7onZ/onZ3ona/onazonbrona7onZzonaXonY/onbvonbXonaLonafonanooZropIXopIzopJTopIvopJfopJjopJnopIbopJbopJHopI7opInopqLopqTopqPop63op7Dop6zoq4/oq4boqrjoq5Poq5Hoq5Toq5Xoqrvoq5foqr7oq4Doq4Xoq5joq4Poqrroqr3oq5nosL7osY3oso/os6Xos5/os5nos6jos5ros53os6fotqDotpzotqHotpvouKDouKPouKXouKTouK7ouJXouJvouJbouJHouJnouKbouKdcIl0sW1wiZTg0MFwiLFwi6LiU6LiS6LiY6LiT6Lic6LiX6Lia6Lys6Lyk6LyY6Lya6Lyg6Lyj6LyW6LyX6YGz6YGw6YGv6YGn6YGr6YSv6YSr6YSp6YSq6YSy6YSm6YSu6YaF6YaG6YaK6YaB6YaC6YaE6YaA6YuQ6YuD6YuE6YuA6YuZ6Yq26YuP6Yux6Yuf6YuY6Yup6YuX6Yud6YuM6Yuv6YuC6Yuo6YuK6YuI6YuO6Yum6YuN6YuV6YuJ6Yug6Yue6Yun6YuR6YuTXCJdLFtcImU4YTFcIixcIumKtemLoemLhumKtOmVvOmWrOmWq+mWrumWsOmapOmaoumbk+mchemciOmcgumdmumeiumejumeiOmfkOmfj+mgnumgnemgpumgqemgqOmgoOmgm+mgp+misumkiOmjuumkkemklOmklumkl+mklemnnOmnjemnj+mnk+mnlOmnjumniemnlumnmOmni+mnl+mnjOmqs+mrrOmrq+mrs+mrsumrsemthumtg+mtp+mttOmtsemtpumttumttemtsOmtqOmtpOmtrOmzvOmzuumzvemzv+mzt+m0h+m0gOmzuemzu+m0iOm0hem0hOm6g+m7k+m8j+m8kOWEnOWEk+WEl+WEmuWEkeWHnuWMtOWPoeWZsOWZoOWZrlwiXSxbXCJlOTQwXCIsXCLlmbPlmablmaPlma3lmbLlmZ7lmbflnJzlnJvlo4jlor3lo4nlor/lorrlo4Llorzlo4blrJflrJnlrJvlrKHlrJTlrJPlrJDlrJblrKjlrJrlrKDlrJ7lr6/ltqzltrHltqnltqfltrXltrDltq7ltqrltqjltrLltq3ltq/ltrTluafluajluablua/lu6nlu6flu6blu6jlu6XlvYvlvrzmhp3mhqjmhpbmh4XmhrTmh4bmh4Hmh4zmhrpcIl0sW1wiZTlhMVwiLFwi5oa/5oa45oaM5pOX5pOW5pOQ5pOP5pOJ5pK95pKJ5pOD5pOb5pOz5pOZ5pSz5pW/5pW85pai5puI5pq+5puA5puK5puL5puP5pq95pq75pq65puM5pyj5qi05qmm5qmJ5qmn5qiy5qmo5qi+5qmd5qmt5qm25qmb5qmR5qio5qma5qi75qi/5qmB5qmq5qmk5qmQ5qmP5qmU5qmv5qmp5qmg5qi85qme5qmW5qmV5qmN5qmO5qmG5q2V5q2U5q2W5q6n5q6q5q6r5q+I5q+H5rCE5rCD5rCG5r6t5r+L5r6j5r+H5r685r+O5r+I5r2e5r+E5r695r6e5r+K5r6o54CE5r6l5r6u5r665r6s5r6q5r+P5r6/5r64XCJdLFtcImVhNDBcIixcIua+oua/iea+q+a/jea+r+a+sua+sOeHheeHgueGv+eGuOeHlueHgOeHgeeHi+eHlOeHiueHh+eHj+eGveeHmOeGvOeHhueHmueHm+eKneeKnueNqeeNpueNp+eNrOeNpeeNq+eNqueRv+eSmueSoOeSlOeSkueSleeSoeeUi+eWgOeYr+eYreeYseeYveeYs+eYvOeYteeYsueYsOeau+ebpueemueeneeeoeeenOeem+eeoueeo+eeleeemVwiXSxbXCJlYWExXCIsXCLnnpfno53no6nno6Xno6rno57no6Pno5vno6Hno6Lno63no5/no6DnpqTnqYTnqYjnqYfnqrbnqrjnqrXnqrHnqrfnr57nr6Pnr6fnr53nr5Xnr6Xnr5rnr6jnr7nnr5Tnr6rnr6Lnr5znr6vnr5jnr5/ns5Lns5Tns5fns5Dns5HnuJLnuKHnuJfnuIznuJ/nuKDnuJPnuI7nuJznuJXnuJrnuKLnuIvnuI/nuJbnuI3nuJTnuKXnuKTnvYPnvbvnvbznvbrnvrHnv6/ogKrogKnogazohrHohqbohq7ohrnohrXohqvohrDohqzohrTohrLohrfohqfoh7LoiZXoiZboiZfolZbolYXolavolY3olZPolaHolZhcIl0sW1wiZWI0MFwiLFwi6JWA6JWG6JWk6JWB6JWi6JWE6JWR6JWH6JWj6JS+6JWb6JWx6JWO6JWu6JW16JWV6JWn6JWg6JaM6JWm6JWd6JWU6JWl6JWs6Jmj6Jml6Jmk6J6b6J6P6J6X6J6T6J6S6J6I6J6B6J6W6J6Y6J256J6H6J6j6J6F6J6Q6J6R6J6d6J6E6J6U6J6c6J6a6J6J6KSe6KSm6KSw6KSt6KSu6KSn6KSx6KSi6KSp6KSj6KSv6KSs6KSf6Kex6KugXCJdLFtcImViYTFcIixcIuirouirsuirtOirteirneislOirpOirn+irsOiriOirnuiroeirqOirv+irr+iru+iykeiykuiykOizteizruizseizsOizs+i1rOi1rui2pei2p+i4s+i4vui4uOi5gOi5hei4tui4vOi4vei5gei4sOi4v+i6vei8tui8rui8tei8sui8uei8t+i8tOmBtumBuemBu+mChumDuumEs+mEtemEtumGk+mGkOmGkemGjemGj+mMp+mMnumMiOmMn+mMhumMj+mNuumMuOmMvOmMm+mMo+mMkumMgemNhumMremMjumMjemLi+mMnemLuumMpemMk+mLuemLt+mMtOmMgumMpOmLv+mMqemMuemMtemMqumMlOmMjFwiXSxbXCJlYzQwXCIsXCLpjIvpi77pjInpjIDpi7vpjJbplrzpl43plr7plrnplrrplrbplr/plrXplr3pmqnpm5TpnIvpnJLpnJDpnpnpnpfpnpTpn7Dpn7jpoLXpoK/poLLppKTppJ/ppKfppKnppp7pp67pp6zpp6Xpp6Tpp7Dpp6Ppp6rpp6npp6fpqrnpqr/pqrTpqrvpq7bpq7rpq7npq7fprLPproDproXprofprbzprb7prbvproLprpPprpLprpDprbrprpVcIl0sW1wiZWNhMVwiLFwi6a296a6I6bSl6bSX6bSg6bSe6bSU6bSp6bSd6bSY6bSi6bSQ6bSZ6bSf6bqI6bqG6bqH6bqu6bqt6buV6buW6bu66byS6by95YSm5YSl5YSi5YSk5YSg5YSp5Yu05ZqT5ZqM5ZqN5ZqG5ZqE5ZqD5Zm+5ZqC5Zm/5ZqB5aOW5aOU5aOP5aOS5ayt5ayl5ayy5ayj5ays5ayn5aym5ayv5ayu5a275a+x5a+y5ba35bms5bmq5b6+5b675oeD5oa15oa85oen5oeg5oel5oek5oeo5oee5pOv5pOp5pOj5pOr5pOk5pOo5paB5paA5pa25pea5puS5qqN5qqW5qqB5qql5qqJ5qqf5qqb5qqh5qqe5qqH5qqT5qqOXCJdLFtcImVkNDBcIixcIuaqleaqg+aqqOaqpOaqkeapv+aqpuaqmuaqheaqjOaqkuatm+aureawiea/jOa+qea/tOa/lOa/o+a/nOa/rea/p+a/pua/nua/sua/nea/oua/qOeHoeeHseeHqOeHsueHpOeHsOeHoueNs+eNrueNr+eSl+eSsueSq+eSkOeSqueSreeSseeSpeeSr+eUkOeUkeeUkueUj+eWhOeZg+eZiOeZieeZh+eapOebqeeeteeeq+eesueet+eetlwiXSxbXCJlZGExXCIsXCLnnrTnnrHnnqjnn7Dno7Pno73npILno7vno7zno7LnpIXno7nno77npITnpqvnpqjnqZznqZvnqZbnqZjnqZTnqZrnqr7nq4Dnq4HnsIXnsI/nr7LnsIDnr7/nr7vnsI7nr7TnsIvnr7PnsILnsInnsIPnsIHnr7jnr73nsIbnr7Dnr7HnsJDnsIrns6jnuK3nuLznuYLnuLPpoYjnuLjnuKrnuYnnuYDnuYfnuKnnuYznuLDnuLvnuLbnuYTnuLrnvYXnvb/nvb7nvb3nv7Tnv7LogKzohrvoh4Toh4zoh4roh4Xoh4fohrzoh6noiZvoiZroiZzoloPoloDolo/olqfolpXolqDolovolqPolbvolqTolprolp5cIl0sW1wiZWU0MFwiLFwi6JW36JW86JaJ6Jah6JW66JW46JWX6JaO6JaW6JaG6JaN6JaZ6Jad6JaB6Jai6JaC6JaI6JaF6JW56JW26JaY6JaQ6Jaf6Jmo6J6+6J6q6J6t6J+F6J6w6J6s6J656J616J686J6u6J+J6J+D6J+C6J+M6J636J6v6J+E6J+K6J606J626J6/6J646J696J+e6J6y6KS16KSz6KS86KS+6KWB6KWS6KS36KWC6Kat6Kav6Kau6Key6Kez6KyeXCJdLFtcImVlYTFcIixcIuismOisluiskeisheisi+isouisj+iskuisleish+isjeisiOishuisnOisk+ismuixj+ixsOixsuixseixr+iyleiylOizuei1r+i5jui5jei5k+i5kOi5jOi5h+i9g+i9gOmChemBvumEuOmGmumGoumGm+mGmemGn+mGoemGnemGoOmOoemOg+mOr+mNpOmNlumNh+mNvOmNmOmNnOmNtumNiemNkOmNkemNoOmNremOj+mNjOmNqumNuemNl+mNlemNkumNj+mNsemNt+mNu+mNoemNnumNo+mNp+mOgOmNjumNmemXh+mXgOmXiemXg+mXhemWt+marumasOmarOmcoOmcn+mcmOmcnemcmememumeoemenFwiXSxbXCJlZjQwXCIsXCLpnp7pnp3pn5Xpn5Tpn7HpoYHpoYTpoYrpoYnpoYXpoYPppKXppKvppKzppKrppLPppLLppK/ppK3ppLHppLDpppjppqPppqHpqILpp7rpp7Tpp7fpp7npp7jpp7bpp7vpp73pp77pp7zpqIPpqr7pq77pq73prIHpq7zprYjprprprqjprp7prpvprqbprqHprqXprqTprobprqLprqDprq/ptLPptYHptafptLbptK7ptK/ptLHptLjptLBcIl0sW1wiZWZhMVwiLFwi6bWF6bWC6bWD6bS+6bS36bWA6bS957+16bSt6bqK6bqJ6bqN6bqw6buI6bua6bu76bu/6byk6byj6byi6b2U6b6g5YSx5YSt5YSu5ZqY5Zqc5ZqX5Zqa5Zqd5ZqZ5aWw5ay85bGp5bGq5beA5bmt5bmu5oeY5oef5oet5oeu5oex5oeq5oew5oer5oeW5oep5pO/5pSE5pO95pO45pSB5pSD5pO85paU5peb5pua5pub5puY5quF5qq55qq95quh5quG5qq65qq25qq35quH5qq05qqt5q2e5q+J5rCL54CH54CM54CN54CB54CF54CU54CO5r+/54CA5r+754Cm5r+85r+354CK54iB54e/54e554iD54e95422XCJdLFtcImYwNDBcIixcIueSuOeTgOeSteeTgeeSvueStueSu+eTgueUlOeUk+eZnOeZpOeZmeeZkOeZk+eZl+eZmueapueaveebrOefgueeuuejv+ekjOekk+eklOekieekkOekkuekkeemreemrOepn+ewnOewqeewmeewoOewn+ewreewneewpuewqOewouewpeewsOe5nOe5kOe5lue5o+e5mOe5oue5n+e5kee5oOe5l+e5k+e+tee+s+e/t+e/uOiBteiHkeiHklwiXSxbXCJmMGExXCIsXCLoh5DoiZ/oiZ7olrTol4bol4Dol4Pol4LolrPolrXolr3ol4fol4Tolr/ol4vol47ol4jol4XolrHolrbol5LomKTolrjolrfolr7omanon6fon6bon6Lon5von6von6ron6Xon5/on7Pon6Ton5Ton5zon5Pon63on5jon6PonqTon5fon5nooIHon7Ton6jon53opZPopYvopY/opYzopYbopZDopZHopYnorKrorKforKPorLPorLDorLXorYforK/orLzorL7orLHorKXorLforKborLborK7orKTorLvorL3orLrosYLosbXospnospjospfos77otITotILotIDouZzouaLouaDouZfouZbouZ7ouaXouadcIl0sW1wiZjE0MFwiLFwi6Lmb6Lma6Lmh6Lmd6Lmp6LmU6L2G6L2H6L2I6L2L6YSo6YS66YS76YS+6Yao6Yal6Yan6Yav6Yaq6Y616Y6M6Y6S6Y636Y6b6Y6d6Y6J6Y6n6Y6O6Y6q6Y6e6Y6m6Y6V6Y6I6Y6Z6Y6f6Y6N6Y6x6Y6R6Y6y6Y6k6Y6o6Y606Y6j6Y6l6ZeS6ZeT6ZeR6Zqz6ZuX6Zua5beC6Zuf6ZuY6Zud6Zyj6Zyi6Zyl6Z6s6Z6u6Z6o6Z6r6Z6k6Z6qXCJdLFtcImYxYTFcIixcIumeoumepemfl+mfmemflumfmOmfuumhkOmhkemhkumiuOmlgemkvOmkuumoj+moi+moiemojemohOmokemoiumohemoh+mohumrgOmrnOmsiOmshOmshemsqemstemtiumtjOmti+mvh+mvhumvg+muv+mvgemutemuuOmvk+mutumvhOmuuemuvem1nOm1k+m1j+m1ium1m+m1i+m1mem1lum1jOm1l+m1kum1lOm1n+m1mOm1mum6jum6jOm7n+m8gem8gOm8lum8pem8q+m8qum8qem8qOm9jOm9leWEtOWEteWKluWLt+WOtOWaq+WareWapuWap+WaquWarOWjmuWjneWjm+WkkuWsveWsvuWsv+W3g+W5sFwiXSxbXCJmMjQwXCIsXCLlvr/mh7vmlIfmlJDmlI3mlInmlIzmlI7mloTml57ml53mm57mq6fmq6Dmq4zmq5Hmq5nmq4vmq5/mq5zmq5Dmq6vmq4/mq43mq57mraDmrrDmsIzngJnngKfngKDngJbngKvngKHngKLngKPngKnngJfngKTngJzngKrniIzniIrniIfniILniIXniqXniqbniqTniqPniqHnk4vnk4Xnkrfnk4PnlJbnmaDnn4nnn4rnn4Tnn7HnpJ3npJtcIl0sW1wiZjJhMVwiLFwi56Sh56Sc56SX56Se56aw56mn56mo57Cz57C857C557Cs57C757Os57Oq57m257m157m457mw57m357mv57m657my57m057mo572L572K576D576G576357+957++6IG46IeX6IeV6Imk6Imh6Imj6Jer6Jex6Jet6JeZ6Jeh6Jeo6Jea6JeX6Jes6Jey6Je46JeY6Jef6Jej6Jec6JeR6Jew6Jem6Jev6Jee6Jei6KCA6J+66KCD6J+26J+36KCJ6KCM6KCL6KCG6J+86KCI6J+/6KCK6KCC6KWi6KWa6KWb6KWX6KWh6KWc6KWY6KWd6KWZ6KaI6Ka36Ka26Ke26K2Q6K2I6K2K6K2A6K2T6K2W6K2U6K2L6K2VXCJdLFtcImYzNDBcIixcIuitkeitguitkuitl+ixg+ixt+ixtuiymui0hui0h+i0iei2rOi2qui2rei2q+i5rei5uOi5s+i5qui5r+i5u+i7gui9kui9kei9j+i9kOi9k+i+tOmFgOmEv+mGsOmGremPnumPh+mPj+mPgumPmumPkOmPuemPrOmPjOmPmemOqemPpumPiumPlOmPrumPo+mPlemPhOmPjumPgOmPkumPp+mVvemXmumXm+mboemcqemcq+mcrOmcqOmcplwiXSxbXCJmM2ExXCIsXCLpnrPpnrfpnrbpn53pn57pn5/poZzpoZnpoZ3poZfpor/por3porvpor7ppYjppYfppYPppqbppqfpqJrpqJXpqKXpqJ3pqKTpqJvpqKLpqKDpqKfpqKPpqJ7pqJzpqJTpq4LprIvprIrprI7prIzprLfpr6rpr6vpr6Dpr57pr6Tpr6bpr6Lpr7Dpr5Tpr5fpr6zpr5zpr5npr6Xpr5Xpr6Hpr5rptbfptoHptorptoTptojptbHptoDptbjptobptovptozptb3ptavptbTptbXptbDptanptoXptbPptbvptoLpta/ptbnptb/ptofptajpupTpupHpu4Dpu7zpvK3pvYDpvYHpvY3pvZbpvZfpvZjljLflmrJcIl0sW1wiZjQ0MFwiLFwi5Zq15Zqz5aOj5a2F5beG5beH5buu5buv5b+A5b+B5oe55pSX5pSW5pSV5pST5pef5puo5puj5puk5quz5quw5quq5quo5qu55qux5quu5quv54C854C154Cv54C354C054Cx54GC54C454C/54C654C554GA54C754Cz54GB54iT54iU54qo5429542855K655qr55qq55q+55ut55+M55+O55+P55+N55+y56Sl56Sj56Sn56So56Sk56SpXCJdLFtcImY0YTFcIixcIuemsueprueprOepreert+exieexiOexiuexh+exheezrue5u+e5vue6gee6gOe+uue/v+iBueiHm+iHmeiIi+iJqOiJqeiYouiXv+iYgeiXvuiYm+iYgOiXtuiYhOiYieiYheiYjOiXveigmeigkOigkeigl+igk+igluilo+ilpuimueint+itoOitquitneitqOito+itpeitp+itrei2rui6hui6iOi6hOi9mei9lui9l+i9lei9mOi9mumCjemFg+mFgemGt+mGtemGsumGs+mQi+mQk+mPu+mQoOmQj+mQlOmPvumQlemQkOmQqOmQmemQjemPtemQgOmPt+mQh+mQjumQlumQkumPuumQiemPuOmQiumPv1wiXSxbXCJmNTQwXCIsXCLpj7zpkIzpj7bpkJHpkIbpl57pl6Dpl5/pnK7pnK/pnrnpnrvpn73pn77poaDpoaLpoaPpoZ/po4Hpo4LppZDppY7ppZnppYzppYvppZPpqLLpqLTpqLHpqKzpqKrpqLbpqKnpqK7pqLjpqK3pq4fpq4rpq4bprJDprJLprJHpsIvpsIjpr7fpsIXpsJLpr7jpsYDpsIfpsI7psIbpsJfpsJTpsInptp/ptpnptqTptp3ptpLptpjptpDptptcIl0sW1wiZjVhMVwiLFwi6bag6baU6bac6baq6baX6bah6baa6bai6bao6bae6baj6ba/6bap6baW6bam6ban6bqZ6bqb6bqa6bul6buk6bun6bum6byw6byu6b2b6b2g6b2e6b2d6b2Z6b6R5YS65YS55YqY5YqX5ZuD5Zq95Zq+5a2I5a2H5beL5beP5bux5oe95pSb5qyC5qu85qyD5qu45qyA54GD54GE54GK54GI54GJ54GF54GG54id54ia54iZ542+55SX55mq55+Q56St56Sx56Sv57GU57GT57Oy57qK57qH57qI57qL57qG57qN572N57676ICw6Ied6JiY6Jiq6Jim6Jif6Jij6Jic6JiZ6Jin6Jiu6Jih6Jig6Jip6Jie6JilXCJdLFtcImY2NDBcIixcIuigqeigneigm+igoOigpOignOigq+ihiuilreilqeilruilq+inuuitueituOitheituuitu+i0kOi0lOi2r+i6jui6jOi9nui9m+i9nemFhumFhOmFhemGuemQv+mQu+mQtumQqemQvemQvOmQsOmQuemQqumQt+mQrOmRgOmQsemXpemXpOmXo+mctemcuumev+mfoemhpOmjiemjhumjgOmlmOmllumouemovemphumphOmpgumpgemoulwiXSxbXCJmNmExXCIsXCLpqL/pq43prJXprJfprJjprJbprLrprZLpsKvpsJ3psJzpsKzpsKPpsKjpsKnpsKTpsKHptrfptrbptrzpt4Hpt4fpt4rpt4/ptr7pt4Xpt4PptrvptrXpt47ptrnptrrptqzpt4jptrHptq3pt4zptrPpt43ptrLpubrpupzpu6vpu67pu63pvJvpvJjpvJrpvLHpvY7pvaXpvaTpvpLkurnlm4blm4Xlm4vlpbHlrYvlrYzlt5Xlt5Hlu7LmlKHmlKDmlKbmlKLmrIvmrIjmrInmsI3ngZXngZbngZfngZLniJ7niJ/niqnnjb/nk5jnk5Xnk5nnk5fnma3nmq3npLXnprTnqbDnqbHnsZfnsZznsZnnsZvnsZpcIl0sW1wiZjc0MFwiLFwi57O057Ox57qR572P576H6Iee6Imr6Ji06Ji16Jiz6Jis6Jiy6Ji26KCs6KCo6KCm6KCq6KCl6KWx6Ka/6Ka+6Ke76K2+6K6E6K6C6K6G6K6F6K2/6LSV6LqV6LqU6Lqa6LqS6LqQ6LqW6LqX6L2g6L2i6YWH6ZGM6ZGQ6ZGK6ZGL6ZGP6ZGH6ZGF6ZGI6ZGJ6ZGG6Zy/6Z+j6aGq6aGp6aOL6aWU6aWb6amO6amT6amU6amM6amP6amI6amKXCJdLFtcImY3YTFcIixcIumpiempkumpkOmrkOmsmemsq+msu+mtlumtlemxhumxiOmwv+mxhOmwuemws+mxgemwvOmwt+mwtOmwsumwvemwtum3m+m3kum3num3mum3i+m3kOm3nOm3kem3n+m3qem3mem3mOm3lum3tem3lem3nem6tum7sOm8tem8s+m8sum9gum9q+m+lem+ouWEveWKmeWjqOWjp+WlsuWtjeW3mOigr+W9j+aIgeaIg+aIhOaUqeaUpeaWluabq+askeaskuasj+aviueBm+eBmueIoueOgueOgeeOg+eZsOeflOexp+expue6leiJrOiYuuiZgOiYueiYvOiYseiYu+iYvuigsOigsuigruigs+iltuiltOils+invlwiXSxbXCJmODQwXCIsXCLorozoro7orovorojosYXotJnoupjovaTovaPphrzpkaLpkZXpkZ3pkZfpkZ7pn4Tpn4XpoIDpqZbpqZnprJ7prJ/prKDpsZLpsZjpsZDpsYrpsY3psYvpsZXpsZnpsYzpsY7pt7vpt7fpt6/pt6Ppt6vpt7jpt6Tpt7bpt6Hpt67pt6bpt7Lpt7Dpt6Lpt6zpt7Tpt7Ppt6jpt63pu4Lpu5Dpu7Lpu7PpvIbpvJzpvLjpvLfpvLbpvYPpvY9cIl0sW1wiZjhhMVwiLFwi6b2x6b2w6b2u6b2v5ZuT5ZuN5a2O5bGt5pSt5put5puu5qyT54Gf54Gh54Gd54Gg54ij55Ob55Ol55+V56S456a356a257Gq57qX576J6Imt6JmD6KC46KC36KC16KGL6K6U6K6V6Lqe6Lqf6Lqg6Lqd6Ya+6Ya96YeC6ZGr6ZGo6ZGp6Zul6Z2G6Z2D6Z2H6Z+H6Z+l6ame6auV6a2Z6bGj6bGn6bGm6bGi6bGe6bGg6biC6be+6biH6biD6biG6biF6biA6biB6biJ6be/6be96biE6bqg6bye6b2G6b206b216b225ZuU5pSu5pa45qyY5qyZ5qyX5qya54Gi54im54qq55+Y55+Z56S557Gp57Gr57O257qaXCJdLFtcImY5NDBcIixcIue6mOe6m+e6meiHoOiHoeiZhuiZh+iZiOilueiluuilvOilu+inv+iumOiumei6pei6pOi6o+mRrumRremRr+mRsemRs+mdiemhsumln+mxqOmxrumxrem4i+m4jem4kOm4j+m4kum4kem6oem7tem8iem9h+m9uOm9u+m9uum9ueWcnueBpuexr+igvOi2sui6pumHg+mRtOmRuOmRtumRtempoOmxtOmxs+mxsemxtem4lOm4k+m7tum8ilwiXSxbXCJmOWExXCIsXCLpvqTngajngaXns7fomarooL7ooL3ooL/orp7ospzouqnou4npnYvpobPpobTpo4zppaHppqvpqaTpqabpqafprKTpuJXpuJfpvYjmiIfmrJ7niKfomYzouqjpkoLpkoDpkoHpqanpqajprK7puJnniKnomYvorp/pkoPpsbnpurfnmbXpqavpsbrpuJ3nganngarpuqTpvb7pvYnpvpjnooHpirnoo4/lorvmgZLnsqflq7rilZTilabilZfilaDilazilaPilZrilanilZ3ilZLilaTilZXilZ7ilarilaHilZjilafilZvilZPilaXilZbilZ/ilavilaLilZnilajilZzilZHilZDila3ila7ilbDila/ilpNcIl1dJyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1NjMzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gSlNPTi5wYXJzZSgnW1tcIjBcIixcIlxcXFx1MDAwMFwiLDEyN10sW1wiOGVhMVwiLFwi772hXCIsNjJdLFtcImExYTFcIixcIuOAgOOAgeOAgu+8jO+8juODu++8mu+8m++8n++8geOCm+OCnMK0772AwqjvvL7vv6PvvL/jg73jg77jgp3jgp7jgIPku53jgIXjgIbjgIfjg7zigJXigJDvvI/vvLzvvZ7iiKXvvZzigKbigKXigJjigJnigJzigJ3vvIjvvInjgJTjgJXvvLvvvL3vvZvvvZ3jgIhcIiw5LFwi77yL77yNwrHDl8O377yd4omg77yc77ye4omm4omn4oie4oi04pmC4pmAwrDigLLigLPihIPvv6XvvITvv6Dvv6HvvIXvvIPvvIbvvIrvvKDCp+KYhuKYheKXi+KXj+KXjuKXh1wiXSxbXCJhMmExXCIsXCLil4bilqHilqDilrPilrLilr3ilrzigLvjgJLihpLihpDihpHihpPjgJNcIl0sW1wiYTJiYVwiLFwi4oiI4oiL4oqG4oqH4oqC4oqD4oiq4oipXCJdLFtcImEyY2FcIixcIuKIp+KIqO+/ouKHkuKHlOKIgOKIg1wiXSxbXCJhMmRjXCIsXCLiiKDiiqXijJLiiILiiIfiiaHiiZLiiariiaviiJriiL3iiJ3iiLXiiKviiKxcIl0sW1wiYTJmMlwiLFwi4oSr4oCw4pmv4pmt4pmq4oCg4oChwrZcIl0sW1wiYTJmZVwiLFwi4pevXCJdLFtcImEzYjBcIixcIu+8kFwiLDldLFtcImEzYzFcIixcIu+8oVwiLDI1XSxbXCJhM2UxXCIsXCLvvYFcIiwyNV0sW1wiYTRhMVwiLFwi44GBXCIsODJdLFtcImE1YTFcIixcIuOCoVwiLDg1XSxbXCJhNmExXCIsXCLOkVwiLDE2LFwizqNcIiw2XSxbXCJhNmMxXCIsXCLOsVwiLDE2LFwiz4NcIiw2XSxbXCJhN2ExXCIsXCLQkFwiLDUsXCLQgdCWXCIsMjVdLFtcImE3ZDFcIixcItCwXCIsNSxcItGR0LZcIiwyNV0sW1wiYThhMVwiLFwi4pSA4pSC4pSM4pSQ4pSY4pSU4pSc4pSs4pSk4pS04pS84pSB4pSD4pSP4pST4pSb4pSX4pSj4pSz4pSr4pS74pWL4pSg4pSv4pSo4pS34pS/4pSd4pSw4pSl4pS44pWCXCJdLFtcImFkYTFcIixcIuKRoFwiLDE5LFwi4oWgXCIsOV0sW1wiYWRjMFwiLFwi442J44yU44yi442N44yY44yn44yD44y2442R442X44yN44ym44yj44yr442K44y7446c446d446e446O446P44+E446hXCJdLFtcImFkZGZcIixcIuONu+OAneOAn+KEluOPjeKEoeOKpFwiLDQsXCLjiLHjiLLjiLnjjb7jjb3jjbziiZLiiaHiiKviiK7iiJHiiJriiqXiiKDiiJ/iir/iiLXiiKniiKpcIl0sW1wiYjBhMVwiLFwi5Lqc5ZSW5aiD6Zi/5ZOA5oSb5oyo5ae26YCi6JG16Iyc56mQ5oKq5o+h5ril5pet6JGm6Iqm6a+15qKT5Zyn5pah5omx5a6b5aeQ6Jm76aO057Wi57a+6a6O5oiW57Kf6KK35a6J5bq15oyJ5pqX5qGI6ZeH6Z6N5p2P5Lul5LyK5L2N5L6d5YGJ5Zuy5aS35aeU5aiB5bCJ5oOf5oSP5oWw5piT5qSF54K655WP55Ww56e757at57ev6IOD6JCO6KGj6KyC6YGV6YG65Yy75LqV5Lql5Z+f6IKy6YOB56Ov5LiA5aOx5rqi6YC456iy6Iyo6IqL6bCv5YWB5Y2w5ZK95ZOh5Zug5ae75byV6aOy5rer6IOk6JStXCJdLFtcImIxYTFcIixcIumZoumZsOmaoOmfu+WQi+WPs+Wuh+eDj+e+vei/gumbqOWNr+m1nOequuS4keeik+iHvOa4puWYmOWUhOasneiUmumwu+WnpeWOqea1pueTnOmWj+WZguS6kemBi+mbsuiNj+mkjOWPoeWWtuWssOW9seaYoOabs+aghOawuOazs+a0qeeRm+ebiOepjumgtOiLseihm+ipoOmLrea2sueWq+ebiumnheaCpuisgei2iumWsuamjuWOreWGhuWckuWgsOWlhOWutOW7tuaAqOaOqeaPtOayv+a8lOeCjueElOeFmeeHleeMv+e4geiJtuiLkeiWl+mBoOmJm+m0m+WhqeaWvOaxmueUpeWHueWkruWlpeW+gOW/nFwiXSxbXCJiMmExXCIsXCLmirzml7rmqKrmrKfmrrTnjovnv4HopZbptKzptI7pu4TlsqHmspbojbvlhITlsYvmhrboh4bmobbniaHkuZnkv7rljbjmganmuKnnqY/pn7PkuIvljJbku67kvZXkvL3kvqHkvbPliqDlj6/lmInlpI/lq4Hlrrblr6Hnp5HmmofmnpzmnrbmrYzmsrPngavnj4Lnpo3npr7nqLznrofoirHoi5vojITojbfoj6/oj5PonaboqrLlmKnosqjov6bpgY7pnJ7omorkv4Tls6jmiJHniZnnlLvoh6Xoir3om77os4Dpm4XppJPpp5Xku4vkvJrop6Plm57loYrlo4rlu7vlv6vmgKrmgpTmgaLmh5DmiJLmi5DmlLlcIl0sW1wiYjNhMVwiLFwi6a2B5pmm5qKw5rW354Gw55WM55qG57W16Iql6J+56ZaL6ZqO6LKd5Yex5Yq+5aSW5ZKz5a6z5bSW5oWo5qaC5rav56KN6JOL6KGX6Kmy6Y6n6aq45rWs6aao6JuZ5Z6j5p+/6JuO6YiO5YqD5ZqH5ZCE5buT5ouh5pK55qC85qC45q67542y56K656mr6Kaa6KeS6LWr6LyD6YOt6Zaj6ZqU6Z2p5a2m5bKz5qW96aGN6aGO5o6b56yg5qir5qm/5qK26bCN5r2f5Ymy5Zad5oGw5ous5rS75riH5ruR6JGb6KSQ6L2E5LiU6bC55Y+25qSb5qi66Z6E5qCq5YWc56uD6JKy6Yec6Y6M5Zmb6bSo5qCi6IyF6JCxXCJdLFtcImI0YTFcIixcIueypeWIiOiLheeTpuS5vuS+g+WGoOWvkuWIiuWLmOWLp+W3u+WWmuWgquWnpuWujOWumOWvm+W5suW5ueaCo+aEn+aFo+aGvuaPm+aVouafkeahk+ajuuasvuatk+axl+a8oua+l+a9heeSsOeUmOebo+eci+erv+euoeewoee3qee8tue/sOiCneiJpuiOnuims+irjOiyq+mChOmRkemWk+mWkemWoumZpemfk+mkqOiImOS4uOWQq+WyuOW3jOeOqeeZjOecvOWyqee/q+i0i+mbgemgkemhlOmhmOS8geS8juWNseWWnOWZqOWfuuWlh+WsieWvhOWykOW4jOW5vuW/jOaPruacuuaXl+aXouacn+aji+ajhFwiXSxbXCJiNWExXCIsXCLmqZ/luLDmr4XmsJfmsb3nlb/npYjlraPnqIDntIDlvr3opo/oqJjosrTotbfou4zovJ3po6LpqI7prLzkuoDlgb3lhIDlppPlrpzmiK/mioDmk6zmrLrniqDnlpHnpYfnvqnon7voqrzorbDmjqzoj4rpnqDlkInlkIPllqvmoZTmqZjoqbDnoKfmnbXpu43ljbTlrqLohJromZDpgIbkuJjkuYXku4fkvJHlj4rlkLjlrq7lvJPmgKXmlZHmnL3msYLmsbLms6PngbjnkIPnqbbnqq7nrIjntJrns77ntabml6fniZvljrvlsYXlt6jmi5Lmi6DmjJnmuKDomZroqLHot53pi7jmvIHnpqbprZrkuqjkuqvkuqxcIl0sW1wiYjZhMVwiLFwi5L6b5L6g5YOR5YWH56u25YWx5Ye25Y2U5Yyh5Y2/5Y+r5Zas5aKD5bOh5by35b2K5oCv5oGQ5oGt5oyf5pWZ5qmL5rOB54uC54ut55+v6IO46ISF6IiI6JWO6YO36Y+h6Z+/6aWX6ama5Luw5Yed5bCt5pqB5qWt5bGA5puy5qW1546J5qGQ57KB5YOF5Yuk5Z2H5be+6Yym5pak5qyj5qy955C056aB56a9562L57eK6Iq56I+M6KG/6KWf6Ky56L+R6YeR5ZCf6YqA5Lmd5YC25Y+l5Yy654uX546W55+p6Ium6Lqv6aeG6aeI6aeS5YW35oSa6Jme5Zaw56m65YG25a+T6YGH6ZqF5Liy5qub6Yen5bGR5bGIXCJdLFtcImI3YTFcIixcIuaOmOeqn+ayk+mdtOi9oeeqqueGiumaiOeyguagl+e5sOahkemNrOWLsuWQm+iWq+iok+e+pOi7jemDoeWNpuiiiOelgeS/guWCvuWIkeWFhOWVk+WcreePquWei+WlkeW9ouW+hOaBteaFtuaFp+aGqeaOsuaQuuaVrOaZr+ahgua4k+eVpueoveezu+e1jOe2mee5i+e9q+iMjuiNiuibjeioiOipo+itpui7vemgmum2j+iKuOi/jumvqOWKh+aIn+aSg+a/gOmameahgeWCkeasoOaxuua9lOeptOe1kOihgOioo+aciOS7tuWAueWApuWBpeWFvOWIuOWJo+WWp+Wcj+WgheWrjOW7uuaGsuaHuOaLs+aNslwiXSxbXCJiOGExXCIsXCLmpJzmqKnnib3niqznjK7noJTnoa/ntbnnnIzogqnopovorJnos6Lou5LpgaPpjbXpmbrpoZXpqJPpubjlhYPljp/ljrPlubvlvKbmuJvmupDnjoTnj77ntYPoiLfoqIDoq7rpmZDkuY7lgIvlj6Tlkbzlm7rlp5HlraTlt7HluqvlvKfmiLjmlYXmnq/muZbni5Dns4roorTogqHog6Hoj7DomY7oqofot6jpiLfpm4fpoafpvJPkupTkupLkvI3ljYjlkYnlkL7lqK/lvozlvqHmgp/moqfmqo7nkZrnooHoqp7oqqTorbfphpDkuZ7pr4nkuqTkvbzkvq/lgJnlgJblhYnlhazlip/lirnli77ljprlj6PlkJFcIl0sW1wiYjlhMVwiLFwi5ZCO5ZaJ5Z2R5Z6i5aW95a2U5a2d5a6P5bel5ben5be35bm45bqD5bqa5bq35byY5oGS5oWM5oqX5ouY5o6n5pS75piC5pmD5pu05p2t5qCh5qKX5qeL5rGf5rSq5rWp5riv5rqd55Sy55qH56Gs56i/57Og57SF57SY57We57ax6ICV6ICD6IKv6IKx6IWU6IaP6Iiq6I2S6KGM6KGh6Kyb6LKi6LO86YOK6YW16Ymx56C/6Yu86Zak6ZmN6aCF6aaZ6auY6bS75Ymb5Yqr5Y+35ZCI5aOV5ou35r+g6LGq6L2f6bq55YWL5Yi75ZGK5Zu956mA6YW36bWg6buS542E5ryJ6IWw55SR5b+95oOa6aqo54ub6L68XCJdLFtcImJhYTFcIixcIuatpOmgg+S7iuWbsOWdpOWivuWpmuaBqOaHh+aYj+aYhuagueaisea3t+eXlee0uuiJrumtguS6m+S9kOWPieWUhuW1r+W3puW3ruafu+aymeeRs+egguipkOmOluijn+WdkOW6p+aMq+WCteWCrOWGjeacgOWTieWhnuWmu+WusOW9qeaJjeaOoeagveats+a4iOeBvemHh+eKgOegleegpuelreaWjue0sOiPnOijgei8iemam+WJpOWcqOadkOe9quiyoeWGtOWdgumYquWguuamiuiCtOWSsuW0juWfvOeilem3uuS9nOWJiuWSi+aQvuaYqOaclOafteeqhOetlue0oumMr+ahnOmureesueWMmeWGiuWIt1wiXSxbXCJiYmExXCIsXCLlr5/mi7bmkq7mk6bmnK3mrrrolqnpm5HnmpDpr5bmjYzpjIbprqvnmr/mmZLkuInlgpjlj4LlsbHmg6jmkpLmlaPmoZ/nh6bnj4rnlKPnrpfnuoLompXoroPos5vphbjppJDmlqzmmqvmrovku5Xku5TkvLrkvb/liLrlj7jlj7Lll6Plm5vlo6vlp4vlp4nlp7/lrZDlsY3luILluKvlv5fmgJ3mjIfmlK/lrZzmlq/mlr3ml6jmnp3mraLmrbvmsI/njYXnpYnnp4Hns7jntJnntKvogqLohILoh7PoppboqZ7oqanoqaboqozoq67os4fos5zpm4zpo7zmra/kuovkvLzkvo3lhZDlrZflr7rmhYjmjIHmmYJcIl0sW1wiYmNhMVwiLFwi5qyh5ruL5rK754i+55K955eU56OB56S66ICM6ICz6Ieq6JKU6L6e5rGQ6bm/5byP6K2Y6bSr56u66Lu45a6N6Zur5LiD5Y+x5Z+35aSx5auJ5a6k5oKJ5rm/5ryG55a+6LOq5a6f6JSA56+g5YGy5p+06Iqd5bGh6JWK57ie6IiO5YaZ5bCE5o2o6LWm5pac54Wu56S+57SX6ICF6Kyd6LuK6YGu6JuH6YKq5YCf5Yu65bC65p2T54G854i16YWM6YeI6Yyr6Iul5a+C5byx5oO55Li75Y+W5a6I5omL5pyx5q6K54up54+g56iu6IWr6Laj6YWS6aaW5YSS5Y+X5ZGq5a+/5o6I5qi557as6ZyA5Zua5Y+O5ZGoXCJdLFtcImJkYTFcIixcIuWul+WwseW3nuS/ruaEgeaLvua0suengOeni+e1gue5jee/kuiHreiIn+iSkOihhuilsuiukOi5tOi8r+mAsemFi+mFrOmbhumGnOS7gOS9j+WFheWNgeW+k+aIjuaflOaxgea4i+eNo+e4pumHjemKg+WPlOWkmeWuv+a3keelnee4rueym+WhvueGn+WHuuihk+i/sOS/iuWzu+aYpeeerOero+iInOmnv+WHhuW+quaXrOalr+auiea3s+a6lua9pOebvue0lOW3oemBtemGh+mghuWHpuWIneaJgOaakeabmea4muW6tue3kue9suabuOiWr+iXt+iruOWKqeWPmeWls+W6j+W+kOaBlemLpOmZpOWCt+WEn1wiXSxbXCJiZWExXCIsXCLli53ljKDljYflj6zlk6jllYbllLHlmJflpajlpr7lqLzlrrXlsIblsI/lsJHlsJrluoTluorlu6DlvbDmib/mioTmi5vmjozmjbfmmIfmmIzmmK3mmbbmnb7moqLmqJ/mqLXmsrzmtojmuInmuZjnhLznhKbnhafnl4fnnIHnoZ3npIHnpaXnp7Dnq6DnrJHnsqfntLnogpboj5bokovolYnooZ3oo7PoqJ/oqLzoqZToqbPosaHos57phqTpiabpjb7pkJjpmpzpnpjkuIrkuIjkuJ7kuZflhpflibDln47loLTlo4zlrKLluLjmg4Xmk77mnaHmnZbmtYTnirbnlbPnqaPokrjorbLphrjpjKDlmLHln7Tpo75cIl0sW1wiYmZhMVwiLFwi5out5qSN5q6W54et57mU6IG36Imy6Kem6aOf6J2V6L6x5bC75Ly45L+h5L615ZSH5aig5a+d5a+p5b+D5oWO5oyv5paw5pmL5qOu5qab5rW45rex55Sz55a555yf56We56em57Sz6Iej6Iqv6Jaq6Kaq6Ki66Lqr6L6b6YCy6Yed6ZyH5Lq65LuB5YiD5aG15aOs5bCL55Sa5bC96IWO6KiK6L+F6Zmj6Z2t56yl6KuP6aCI6YWi5Zuz5Y6o6YCX5ZC55Z6C5bil5o6o5rC054KK552h57KL57+g6KGw6YGC6YWU6YyQ6YyY6ZqP55Ge6auE5bSH5bWp5pWw5p6i6Lao6Zub5o2u5p2J5qSZ6I+F6aCX6ZuA6KO+XCJdLFtcImMwYTFcIixcIua+hOaRuuWvuOS4lueArOeVneaYr+WHhOWItuWLouWnk+W+geaAp+aIkOaUv+aVtOaYn+aZtOajsuagluato+a4heeJsueUn+ebm+eyvuiBluWjsOijveilv+iqoOiqk+iri+mAnemGkumdkumdmeaWieeojuiEhumau+W4reaDnOaImuaWpeaYlOaekOefs+epjeexjee4vuiEiuiyrOi1pOi3oei5n+eiqeWIh+aLmeaOpeaRguaKmOioreeqg+evgOiqrOmbque1tuiIjOidieS7meWFiOWNg+WNoOWuo+WwguWwluW3neaIpuaJh+aSsOagk+agtOaziea1hea0l+afk+a9nOeFjueFveaXi+epv+euree3mlwiXSxbXCJjMWExXCIsXCLnuYrnvqjohbroiJvoiLnolqboqa7os47ot7Xpgbjpgbfpiq3pipHploPprq7liY3lloTmvLjnhLblhajnpoXnuZXohrPns47lmYzloZHlsqjmjqrmm77mm73mpZrni5nnlo/nlo7npI7npZbnp5/nspfntKDntYTomIfoqLTpmLvpgaHpvKDlg6flibXlj4zlj6LlgInllqrlo67lpY/niL3lrovlsaTljJ3mg6Pmg7PmjZzmjoPmjL/mjrvmk43ml6nmm7nlt6Pmp43mp73mvJXnh6Xkuonnl6nnm7jnqpPns5/nt4/ntpzogaHojYnojZjokazokrzol7voo4XotbDpgIHpga3pjpfpnJzpqJLlg4/lopfmho5cIl0sW1wiYzJhMVwiLFwi6IeT6JS16LSI6YCg5L+D5YG05YmH5Y2z5oGv5o2J5p2f5ris6Laz6YCf5L+X5bGe6LOK5peP57aa5Y2S6KKW5YW25o+D5a2Y5a2r5bCK5pCN5p2R6YGc5LuW5aSa5aSq5rGw6KmR5ZS+5aCV5aal5oOw5omT5p+B6Ii15qWV6ZmA6aeE6aio5L2T5aCG5a++6ICQ5bKx5biv5b6F5oCg5oWL5oi05pu/5rOw5rue6IOO6IW/6IuU6KKL6LK46YCA6YCu6ZqK6bub6a+b5Luj5Y+w5aSn56ys6YaN6aGM6be55rud54Cn5Y2T5ZWE5a6F5omY5oqe5ouT5rKi5r+v55Ci6KiX6ZC45r+B6Ku+6Iy45Yen6Ju45Y+qXCJdLFtcImMzYTFcIixcIuWPqeS9humBlOi+sOWlquiEseW3veerqui+v+ajmuiwt+eLuOmxiOaoveiqsOS4ueWNmOWYhuWdpuaLheaOouaXpuatjua3oea5m+eCreefreerr+euque2u+iAveiDhuibi+iqlemNm+Wbo+Wjh+W8vuaWreaaluaqgOauteeUt+irh+WApOefpeWcsOW8m+aBpeaZuuaxoOeXtOeomue9ruiHtOicmOmBhemms+evieeVnOerueetkeiThOmAkOenqeeqkuiMtuWroeedgOS4reS7suWumeW/oOaKveaYvOafseazqOiZq+iht+iou+mFjumLs+mnkOaol+eApueMquiLp+iRl+iyr+S4geWFhuWHi+WWi+WvtVwiXSxbXCJjNGExXCIsXCLluJbluLPluoHlvJTlvLXlvavlvrTmh7LmjJHmmqLmnJ3mva7niZLnlLrnnLrogbTohLnohbjonbboqr/oq5zotoXot7PpiprplbfpoILps6Xli4XmjZfnm7TmnJXmsojnj43os4Ppjq7pmbPmtKXlopzmpI7mp4zov73pjprnl5vpgJrloZrmoILmjrTmp7vkvYPmvKzmn5jovrvolKbntrTpjZTmpL/mvbDlnarlo7flrKzntKzniKrlkIrph6PptrTkuq3kvY7lgZzlgbXliYPosp7lkYjloKTlrprluJ3lupXluq3lu7flvJ/mgozmirXmjLrmj5Dmoq/msYDnoofnpo7nqIvnt6DoiYfoqILoq6bouYTpgJNcIl0sW1wiYzVhMVwiLFwi6YK46YSt6YeY6byO5rOl5pGY5pOi5pW15ru055qE56yb6YGp6Y+R5rq65ZOy5b655pKk6L2N6L+t6YmE5YW45aGr5aSp5bGV5bqX5re757qP55Sc6LK86Lui6aGb54K55Lyd5q6/5r6x55Sw6Zu75YWO5ZCQ5aC15aGX5aas5bGg5b6S5paX5p2c5rih55m76I+f6LOt6YCU6YO96Y2N56Cl56C65Yqq5bqm5Zyf5aW05oCS5YCS5YWa5Yas5YeN5YiA5ZSQ5aGU5aGY5aWX5a6V5bO25baL5oK85oqV5pCt5p2x5qGD5qK85qOf55uX5reY5rmv5rab54Gv54eI5b2T55eY56W3562J562U562S57OW57Wx5YiwXCJdLFtcImM2YTFcIixcIuiRo+iVqeiXpOiojuishOixhui4j+mAg+mAj+mQmemZtumgremosOmXmOWDjeWLleWQjOWgguWwjuaGp+aSnua0nuees+erpeiDtOiQhOmBk+mKheWzoOm0h+WMv+W+l+W+s+a2nOeJueedo+emv+evpOavkueLrOiqreagg+apoeWHuOeqgeaktOWxiumztuiLq+WvhemFieeAnuWZuOWxr+aDh+aVpuayjOixmumBgemgk+WRkeabh+mIjeWliOmCo+WGheS5jeWHquiWmeisjueBmOaNuumNi+aloummtOe4hOeVt+WNl+aloOi7n+mbo+axneS6jOWwvOW8kOi/qeWMguizkeiCieiZueW7v+aXpeS5s+WFpVwiXSxbXCJjN2ExXCIsXCLlpoLlsL/pn67ku7vlporlv43oqo3mv6HnprDnpaLlr6fokbHnjKvnhrHlubTlv7Xmjbvmkprnh4PnspjkuYPlu7zkuYvln5zlmqLmgqnmv4PntI3og73ohLPohr/ovrLoppfomqTlt7Tmiormkq3opofmnbfms6LmtL7nkLbnoLTlqYbnvbXoiq3ppqzkv7Plu4Pmi53mjpLmlZfmna/nm4PniYzog4zogrrovKnphY3lgI3ln7nlqpLmooXmpbPnhaTni73osrflo7Los6DpmarpgJnonb/np6Tnn6fokKnkvK/liaXljZrmi43mn4/ms4rnmb3nrpTnspXoiLboloTov6vmm53mvKDniIbnuJvojqvpp4HpuqZcIl0sW1wiYzhhMVwiLFwi5Ye9566x56Gy56646IKH562I5quo5bmh6IKM55WR55Wg5YWr6Ymi5rqM55m66YaX6auq5LyQ572w5oqc562P6Zal6bOp5Zm65aGZ6Juk6Zq85Ly05Yik5Y2K5Y+N5Y+b5biG5pCs5paR5p2/5rC+5rGO54mI54qv54+t55WU57mB6Iis6Jep6LKp56+E6YeG54Wp6aCS6aOv5oy95pmp55Wq55uk56OQ6JWD6Juu5Yyq5Y2R5ZCm5aaD5bqH5b285oKy5omJ5om55oqr5paQ5q+U5rOM55ay55qu56KR56eY57eL57236IKl6KKr6Kq56LK76YG/6Z2e6aOb5qiL57C45YKZ5bC+5b6u5p6H5q+Y55C155yJ576OXCJdLFtcImM5YTFcIixcIum8u+afiueol+WMueeWi+mrreW9puiGneiPseiCmOW8vOW/heeVouethumAvOahp+Wnq+Wqm+e0kOeZvuisrOS/teW9quaomeawt+a8gueTouelqOihqOipleixueW7n+aPj+eXheenkuiLl+mMqOmLsuiSnOibremwreWTgeW9rOaWjOa1nOeAleiyp+izk+mgu+aVj+eTtuS4jeS7mOWfoOWkq+WppuWvjOWGqOW4g+W6nOaAluaJtuaVt+aWp+aZrua1rueItuespuiFkOiGmuiKmeitnOiyoOizpui1tOmYnOmZhOS+ruaSq+atpuiInuiRoeiVqumDqOWwgealk+miqOiRuuiVl+S8j+WJr+W+qeW5heacjVwiXSxbXCJjYWExXCIsXCLnpo/ohbnopIfopobmt7XlvJfmiZXmsrjku4/nianprpLliIblkLvlmbTlorPmhqTmia7nhJrlpa7nsonns57ntJvpm7DmlofogZ7kuJnkvbXlhbXloYDluaPlubPlvIrmn4TkuKbolL3plonpmZvnsbPpoIHlg7vlo4HnmZbnoqfliKXnnqXolJHnroblgY/lpInniYfnr4fnt6jovrrov5TpgY3kvr/li4nlqKnlvIHpnq3kv53oiJfpi6rlnIPmjZXmrannlKvoo5zovJTnqYLli5/lopPmhZXmiIrmmq7mr43nsL/oj6nlgKPkv7jljIXlkYbloLHlpYnlrp3ls7Dls6/ltKnlupbmirHmjafmlL7mlrnmnItcIl0sW1wiY2JhMVwiLFwi5rOV5rOh54O556Cy57ir6IOe6Iqz6JCM6JOs6JyC6KSS6Kiq6LGK6YKm6YuS6aO96bOz6bWs5LmP5Lqh5YKN5YmW5Z2K5aao5bi95b+Y5b+Z5oi/5pq05pyb5p+Q5qOS5YaS57Sh6IKq6Iao6KyA6LKM6LK/6Ym+6Ziy5ZCg6aCs5YyX5YOV5Y2c5aKo5pKy5py054mn552m56mG6Yem5YuD5rKh5q6G5aCA5bmM5aWU5pys57+75Yeh55uG5pGp56Oo6a2U6bq75Z+L5aa55pin5p6a5q+O5ZOp5qeZ5bmV6Iac5p6V6a6q5p++6bGS5qGd5Lqm5L+j5Y+I5oq55pyr5rKr6L+E5L6t57mt6bq/5LiH5oWi5rqAXCJdLFtcImNjYTFcIixcIua8q+iUk+WRs+acqumtheW3s+euleWyrOWvhuicnOa5iuiTkeeolOiEiOWmmeeyjeawkeecoOWLmeWkoueEoeeJn+efm+mcp+m1oeaki+Wpv+WomOWGpeWQjeWRveaYjuebn+i/t+mKmOmztOWnqueJnea7heWFjeajiee2v+e3rOmdoum6uuaRuOaooeiMguWmhOWtn+avm+eMm+ebsue2suiAl+iSmeWEsuacqOm7meebruadouWLv+mkheWwpOaIu+exvuiysOWVj+aCtue0i+mWgOWMgeS5n+WGtuWknOeIuuiAtumHjuW8peefouWOhOW9uee0hOiWrOios+i6jemdluafs+iWrumRk+aEieaEiOayueeZklwiXSxbXCJjZGExXCIsXCLoq63ovLjllK/kvZHlhKrli4flj4vlrqXlub3mgqDmhoLmj5bmnInmn5rmuafmtoznjLbnjLfnlLHnpZDoo5XoqpjpgYrpgpHpg7Xpm4Tono3lpJXkuojkvZnkuI7oqonovL/poJDlgq3lubzlppblrrnlurjmj5rmj7rmk4Hmm5zmpYrmp5jmtIvmurbnhpTnlKjnqq/nvorogIDokYnok4nopoHorKHouIrpgaXpmb3ppIrmhb7mipHmrLLmsoPmtbTnv4znv7zmt4DnvoXonrroo7jmnaXojrHpoLzpm7fmtJvntaHokL3pharkubHljbXltZDmrITmv6vol43omK3opqfliKnlkI/lsaXmnY7moqjnkIbnkoNcIl0sW1wiY2VhMVwiLFwi55ei6KOP6KOh6YeM6Zui6Zm45b6L546H56uL6JGO5o6g55Wl5YqJ5rWB5rqc55CJ55WZ56Gr57KS6ZqG56uc6b6N5L625oWu5peF6Jmc5LqG5Lqu5YOa5Lih5YeM5a+u5paZ5qKB5ra854yf55mC556t56ic57On6Imv6KuS6YG86YeP6Zm16aCY5Yqb57eR5YCr5Y6Y5p6X5reL54eQ55Cz6Ieo6Lyq6Zqj6bGX6bqf55Gg5aGB5raZ57Sv6aGe5Luk5Ly25L6L5Ya35Yqx5ba65oCc546y56S86IuT6Yi06Zq36Zu26ZyK6bqX6b2i5pqm5q205YiX5Yqj54OI6KOC5buJ5oGL5oaQ5ryj54WJ57C+57e06IGvXCJdLFtcImNmYTFcIixcIuiTrumAo+mMrOWRgumtr+ark+eCieizgui3r+mcsuWKtOWpgeW7iuW8hOacl+alvOamlOa1qua8j+eJoueLvOevreiAgeiBvuidi+mDjuWFrem6k+emhOiCi+mMsuirluWAreWSjOipseatquizhOiEh+aDkeaeoOm3suS6meS6mOmwkOipq+iXgeiVqOakgOa5vueil+iFlVwiXSxbXCJkMGExXCIsXCLlvIzkuJDkuJXkuKrkuLHkuLbkuLzkuL/kuYLkuZbkuZjkuoLkuoXosavkuoroiJLlvI3kuo7kup7kup/kuqDkuqLkurDkurPkurbku47ku43ku4Tku4bku4Lku5fku57ku63ku5/ku7fkvInkvZrkvLDkvZvkvZ3kvZfkvYfkvbbkvojkvo/kvpjkvbvkvankvbDkvpHkva/kvobkvpblhJjkv5Tkv5/kv47kv5jkv5vkv5Hkv5rkv5Dkv6Tkv6XlgJrlgKjlgJTlgKrlgKXlgIXkvJzkv7blgKHlgKnlgKzkv77kv6/lgJHlgIblgYPlgYfmnIPlgZXlgZDlgYjlgZrlgZblgazlgbjlgoDlgprlgoXlgrTlgrJcIl0sW1wiZDFhMVwiLFwi5YOJ5YOK5YKz5YOC5YOW5YOe5YOl5YOt5YOj5YOu5YO55YO15YSJ5YSB5YSC5YSW5YSV5YSU5YSa5YSh5YS65YS35YS85YS75YS/5YWA5YWS5YWM5YWU5YWi56u45YWp5YWq5YWu5YaA5YaC5ZuY5YaM5YaJ5YaP5YaR5YaT5YaV5YaW5Yak5Yam5Yai5Yap5Yaq5Yar5Yaz5Yax5Yay5Yaw5Ya15Ya95YeF5YeJ5Yeb5Yeg6JmV5Yep5Yet5Yew5Ye15Ye+5YiE5YiL5YiU5YiO5Yin5Yiq5Yiu5Yiz5Yi55YmP5YmE5YmL5YmM5Yme5YmU5Ymq5Ym05Ymp5Ymz5Ym/5Ym95YqN5YqU5YqS5Ymx5YqI5YqR6L6oXCJdLFtcImQyYTFcIixcIui+p+WKrOWKreWKvOWKteWLgeWLjeWLl+WLnuWLo+WLpumjreWLoOWLs+WLteWLuOWLueWMhuWMiOeUuOWMjeWMkOWMj+WMleWMmuWMo+WMr+WMseWMs+WMuOWNgOWNhuWNheS4l+WNieWNjeWHluWNnuWNqeWNruWkmOWNu+WNt+WOguWOluWOoOWOpuWOpeWOruWOsOWOtuWPg+ewkumbmeWPn+abvOeHruWPruWPqOWPreWPuuWQgeWQveWRgOWQrOWQreWQvOWQruWQtuWQqeWQneWRjuWSj+WRteWSjuWRn+WRseWRt+WRsOWSkuWRu+WSgOWRtuWShOWSkOWShuWTh+WSouWSuOWSpeWSrOWThOWTiOWSqFwiXSxbXCJkM2ExXCIsXCLlkqvlk4LlkqTlkr7lkrzlk5jlk6Xlk6bllI/llJTlk73lk67lk63lk7rlk6LllLnllYDllaPllYzllK7llZzllYXllZbllZfllLjllLPllZ3llpnlloDlkq/llorllp/llbvllb7llpjllp7llq7llbzlloPllqnllofllqjll5rll4Xll5/ll4Tll5zll6Tll5TlmJTll7flmJbll77ll73lmJvll7nlmY7lmZDnh5/lmLTlmLblmLLlmLjlmavlmaTlmK/lmazlmarlmoblmoDlmorlmqDlmpTlmo/lmqXlmq7lmrblmrTlm4Llmrzlm4Hlm4Plm4Dlm4jlm47lm5Hlm5Plm5flm67lm7nlnIDlm7/lnITlnIlcIl0sW1wiZDRhMVwiLFwi5ZyI5ZyL5ZyN5ZyT5ZyY5ZyW5ZeH5Zyc5Zym5Zy35Zy45Z2O5Zy75Z2A5Z2P5Z2p5Z+A5Z6I5Z2h5Z2/5Z6J5Z6T5Z6g5Z6z5Z6k5Z6q5Z6w5Z+D5Z+G5Z+U5Z+S5Z+T5aCK5Z+W5Z+j5aCL5aCZ5aCd5aGy5aCh5aGi5aGL5aGw5q+A5aGS5aC95aG55aKF5aK55aKf5aKr5aK65aOe5aK75aK45aKu5aOF5aOT5aOR5aOX5aOZ5aOY5aOl5aOc5aOk5aOf5aOv5aO65aO55aO75aO85aO95aSC5aSK5aSQ5aSb5qKm5aSl5aSs5aSt5aSy5aS45aS+56uS5aWV5aWQ5aWO5aWa5aWY5aWi5aWg5aWn5aWs5aWpXCJdLFtcImQ1YTFcIixcIuWluOWmgeWmneS9nuS+q+Wmo+WmsuWnhuWnqOWnnOWmjeWnmeWnmuWopeWon+WokeWonOWoieWomuWpgOWprOWpieWoteWotuWpouWpquWqmuWqvOWqvuWri+WrguWqveWro+Wrl+WrpuWrqeWrluWruuWru+WsjOWsi+WsluWssuWrkOWsquWstuWsvuWtg+WtheWtgOWtkeWtleWtmuWtm+WtpeWtqeWtsOWts+WtteWtuOaWiOWtuuWugOWug+WupuWuuOWvg+Wvh+WvieWvlOWvkOWvpOWvpuWvouWvnuWvpeWvq+WvsOWvtuWvs+WwheWwh+WwiOWwjeWwk+WwoOWwouWwqOWwuOWwueWxgeWxhuWxjuWxk1wiXSxbXCJkNmExXCIsXCLlsZDlsY/lrbHlsazlsa7kuaLlsbblsbnlsozlspHlspTlppvlsqvlsrvlsrblsrzlsrfls4Xlsr7ls4fls5nls6nls73ls7rls63ltozls6rltIvltJXltJfltZzltJ/ltJvltJHltJTltKLltJrltJnltJjltYzltZLltY7ltYvltazltbPltbbltofltoTltoLltqLltp3ltqzltq7ltr3ltpDltrfltrzlt4nlt43lt5Plt5Llt5blt5vlt6vlt7Llt7XluIvluJrluJnluJHluJvluLbluLfluYTluYPluYDluY7luZfluZTluZ/luaLluaTluYflubXlubblubrpurzlub/luqDlu4Hlu4Llu4jlu5Dlu49cIl0sW1wiZDdhMVwiLFwi5buW5buj5bud5bua5bub5bui5buh5buo5bup5bus5bux5buz5buw5bu05bu45bu+5byD5byJ5b2d5b2c5byL5byR5byW5byp5byt5by45b2B5b2I5b2M5b2O5byv5b2R5b2W5b2X5b2Z5b2h5b2t5b2z5b235b6D5b6C5b2/5b6K5b6I5b6R5b6H5b6e5b6Z5b6Y5b6g5b6o5b6t5b685b+W5b+75b+k5b+45b+x5b+d5oKz5b+/5oCh5oGg5oCZ5oCQ5oCp5oCO5oCx5oCb5oCV5oCr5oCm5oCP5oC65oGa5oGB5oGq5oG35oGf5oGK5oGG5oGN5oGj5oGD5oGk5oGC5oGs5oGr5oGZ5oKB5oKN5oOn5oKD5oKaXCJdLFtcImQ4YTFcIixcIuaChOaCm+aCluaCl+aCkuaCp+aCi+aDoeaCuOaDoOaDk+aCtOW/sOaCveaDhuaCteaDmOaFjeaEleaEhuaDtuaDt+aEgOaDtOaDuuaEg+aEoeaDu+aDseaEjeaEjuaFh+aEvuaEqOaEp+aFiuaEv+aEvOaErOaEtOaEveaFguaFhOaFs+aFt+aFmOaFmeaFmuaFq+aFtOaFr+aFpeaFseaFn+aFneaFk+aFteaGmeaGluaGh+aGrOaGlOaGmuaGiuaGkeaGq+aGruaHjOaHiuaHieaHt+aHiOaHg+aHhuaGuuaHi+e9ueaHjeaHpuaHo+aHtuaHuuaHtOaHv+aHveaHvOaHvuaIgOaIiOaIieaIjeaIjOaIlOaIm1wiXSxbXCJkOWExXCIsXCLmiJ7miKHmiKrmiK7miLDmiLLmiLPmiYHmiY7miZ7miaPmiZvmiaDmiajmibzmioLmionmib7mipLmipPmipbmi5TmioPmipTmi5fmi5Hmirvmi4/mi7/mi4bmk5Tmi4jmi5zmi4zmi4rmi4Lmi4fmipvmi4nmjIzmi67mi7HmjKfmjILmjIjmi6/mi7XmjZDmjL7mjY3mkJzmjY/mjpbmjo7mjoDmjqvmjbbmjqPmjo/mjonmjp/mjrXmjavmjanmjr7mj6nmj4Dmj4bmj6Pmj4nmj5Lmj7bmj4TmkJbmkLTmkIbmkJPmkKbmkLbmlJ3mkJfmkKjmkI/mkafmka/mkbbmkY7mlKrmkpXmkpPmkqXmkqnmkojmkrxcIl0sW1wiZGFhMVwiLFwi5pOa5pOS5pOF5pOH5pK75pOY5pOC5pOx5pOn6IiJ5pOg5pOh5oqs5pOj5pOv5pSs5pO25pO05pOy5pO65pSA5pO95pSY5pSc5pSF5pSk5pSj5pSr5pS05pS15pS35pS25pS455WL5pWI5pWW5pWV5pWN5pWY5pWe5pWd5pWy5pW45paC5paD6K6K5pab5paf5par5pa35peD5peG5peB5peE5peM5peS5peb5peZ5peg5peh5pex5p2y5piK5piD5pe75p2z5pi15pi25pi05pic5pmP5pmE5pmJ5pmB5pme5pmd5pmk5pmn5pmo5pmf5pmi5pmw5pqD5pqI5pqO5pqJ5pqE5pqY5pqd5puB5pq55puJ5pq+5pq8XCJdLFtcImRiYTFcIixcIuabhOaauOabluabmuaboOaYv+abpuabqeabsOabteabt+acj+acluacnuacpuacp+mcuOacruacv+actuadgeacuOact+adhuadnuadoOadmeado+adpOaeieadsOaeqeadvOadquaejOaei+aepuaeoeaeheaet+afr+aetOafrOaes+afqeaeuOafpOafnuafneafouafruaeueafjuafhuafp+aqnOagnuahhuagqeahgOahjeagsuahjuais+agq+ahmeaho+aht+ahv+ain+aij+aireailOaineaim+aig+aqruaiueahtOaiteaioOaiuuakj+aijeahvuakgeajiuakiOajmOakouakpuajoeakjOajjVwiXSxbXCJkY2ExXCIsXCLmo5Tmo6fmo5XmpLbmpJLmpITmo5fmo6PmpKXmo7nmo6Dmo6/mpKjmpKrmpJrmpKPmpKHmo4bmpbnmpbfmpZzmpbjmpavmpZTmpb7mpa7mpLnmpbTmpL3mpZnmpLDmpaHmpZ7mpZ3mpoHmparmprLmpq7mp5Dmpr/mp4Hmp5Pmpr7mp47lr6jmp4rmp53mprvmp4PmpqfmqK7mppHmpqDmppzmppXmprTmp57mp6jmqILmqJvmp7/mrIrmp7nmp7Lmp6fmqIXmprHmqJ7mp63mqJTmp6vmqIrmqJLmq4HmqKPmqJPmqYTmqIzmqbLmqLbmqbjmqYfmqaLmqZnmqabmqYjmqLjmqKLmqpDmqo3mqqDmqoTmqqLmqqNcIl0sW1wiZGRhMVwiLFwi5qqX6JiX5qq75quD5quC5qq45qqz5qqs5que5quR5quf5qqq5qua5quq5qu75qyF6JiW5qu65qyS5qyW6ayx5qyf5qy45qy355uc5qy56aOu5q2H5q2D5q2J5q2Q5q2Z5q2U5q2b5q2f5q2h5q245q255q2/5q6A5q6E5q6D5q6N5q6Y5q6V5q6e5q6k5q6q5q6r5q6v5q6y5q6x5q6z5q635q685q+G5q+L5q+T5q+f5q+s5q+r5q+z5q+v6bq+5rCI5rCT5rCU5rCb5rCk5rCj5rGe5rGV5rGi5rGq5rKC5rKN5rKa5rKB5rKb5rG+5rGo5rGz5rKS5rKQ5rOE5rOx5rOT5rK95rOX5rOF5rOd5rKu5rKx5rK+XCJdLFtcImRlYTFcIixcIuayuuazm+azr+azmeazqua0n+ihjea0tua0q+a0vea0uOa0mea0tea0s+a0kua0jOa1o+a2k+a1pOa1mua1uea1mea2jua2lea/pOa2hea3uea4lea4iua2tea3h+a3pua2uOa3hua3rOa3nua3jOa3qOa3kua3hea3uua3mea3pOa3lea3qua3rua4rea5rua4rua4mea5sua5n+a4vua4o+a5q+a4q+a5tua5jea4n+a5g+a4uua5jua4pOa7v+a4nea4uOa6gua6qua6mOa7iea6t+a7k+a6vea6r+a7hOa6sua7lOa7lea6j+a6pea7gua6n+a9gea8keeBjOa7rOa7uOa7vua8v+a7sua8sea7r+a8sua7jFwiXSxbXCJkZmExXCIsXCLmvL7mvJPmu7fmvobmvbrmvbjmvoHmvoDmva/mvZvmv7Pmva3mvoLmvbzmvZjmvo7mvpHmv4LmvabmvrPmvqPmvqHmvqTmvrnmv4bmvqrmv5/mv5Xmv6zmv5Tmv5jmv7Hmv67mv5vngInngIvmv7rngJHngIHngI/mv77ngJvngJrmvbTngJ3ngJjngJ/ngLDngL7ngLLngZHngaPngpnngpLngq/ng7HngqzngrjngrPngq7ng5/ng4vng53ng5nnhInng73nhJznhJnnhaXnhZXnhojnhabnhaLnhYznhZbnhaznho/nh7vnhoTnhpXnhqjnhqznh5fnhrnnhr7nh5Lnh4nnh5Tnh47nh6Dnh6znh6fnh7Xnh7xcIl0sW1wiZTBhMVwiLFwi54e554e/54iN54iQ54ib54io54it54is54iw54iy54i754i854i/54mA54mG54mL54mY54m054m+54qC54qB54qH54qS54qW54qi54qn54q554qy54uD54uG54uE54uO54uS54ui54ug54uh54u554u35YCP54yX54yK54yc54yW54yd54y054yv54yp54yl54y+542O542P6buY542X542q542o542w542454215427542654+I546z54+O546754+A54+l54+u54+e55Ki55CF55Gv55Cl54+455Cy55C655GV55C/55Gf55GZ55GB55Gc55Gp55Gw55Gj55Gq55G255G+55KL55Ke55Kn55OK55OP55OU54+xXCJdLFtcImUxYTFcIixcIueToOeTo+eTp+eTqeeTrueTsueTsOeTseeTuOeTt+eUhOeUg+eUheeUjOeUjueUjeeUleeUk+eUnueUpueUrOeUvOeVhOeVjeeViueVieeVm+eVhueVmueVqeeVpOeVp+eVq+eVreeVuOeVtueWhueWh+eVtOeWiueWieeWgueWlOeWmueWneeWpeeWo+eXgueWs+eXg+eWteeWveeWuOeWvOeWseeXjeeXiueXkueXmeeXo+eXnueXvueXv+eXvOeYgeeXsOeXuueXsueXs+eYi+eYjeeYieeYn+eYp+eYoOeYoeeYoueYpOeYtOeYsOeYu+eZh+eZiOeZhueZnOeZmOeZoeeZoueZqOeZqeeZqueZp+eZrOeZsFwiXSxbXCJlMmExXCIsXCLnmbLnmbbnmbjnmbznmoDnmoPnmojnmovnmo7nmpbnmpPnmpnnmprnmrDnmrTnmrjnmrnnmrrnm4Lnm43nm5bnm5Lnm57nm6Hnm6Xnm6fnm6romK/nm7vnnIjnnIfnnITnnKnnnKTnnJ7nnKXnnKbnnJvnnLfnnLjnnYfnnZrnnajnnavnnZvnnaXnnb/nnb7nnbnnno7nnovnnpHnnqDnnp7nnrDnnrbnnrnnnr/nnrznnr3nnrvnn4fnn43nn5fnn5rnn5znn6Pnn67nn7znoIznoJLnpKbnoKDnpKrnoYXnoo7nobTnoobnobznoprnooznoqPnorXnoqrnoq/no5Hno4bno4vno5Tnor7norzno4Xno4rno6xcIl0sW1wiZTNhMVwiLFwi56On56Oa56O956O056SH56SS56SR56SZ56Ss56Sr56WA56Wg56WX56Wf56Wa56WV56WT56W656W/56aK56ad56an6b2L56aq56au56az56a556a656eJ56eV56en56es56eh56ej56iI56iN56iY56iZ56ig56if56aA56ix56i756i+56i356mD56mX56mJ56mh56mi56mp6b6d56mw56m556m956qI56qX56qV56qY56qW56qp56uI56qw56q256uF56uE56q/6YKD56uH56uK56uN56uP56uV56uT56uZ56ua56ud56uh56ui56um56ut56uw56yC56yP56yK56yG56yz56yY56yZ56ye56y156yo56y2562QXCJdLFtcImU0YTFcIixcIuetuueshOetjeesi+etjOetheetteetpeettOetp+etsOetseetrOetrueuneeumOeun+eujeeunOeumueui+eukueuj+etneeumeevi+evgeevjOevj+eutOevhuevneevqeewkeewlOevpuevpeexoOewgOewh+ewk+evs+evt+ewl+ewjeevtuewo+ewp+ewquewn+ewt+ewq+ewveexjOexg+exlOexj+exgOexkOexmOexn+expOexluexpeexrOexteeyg+eykOeypOeyreeyoueyq+eyoeeyqOeys+eysueyseeyrueyueeyveezgOezheezguezmOezkueznOezoumsu+ezr+ezsueztOeztuezuue0hlwiXSxbXCJlNWExXCIsXCLntILntJzntJXntIrntYXntYvntK7ntLLntL/ntLXntYbntbPntZbntY7ntbLntajnta7ntY/ntaPntpPntonntZvnto/ntb3ntpvntrrntq7ntqPntrXnt4fntr3ntqvnuL3ntqLntq/nt5zntrjntp/ntrDnt5jnt53nt6Tnt57nt7vnt7Lnt6HnuIXnuIrnuKPnuKHnuJLnuLHnuJ/nuInnuIvnuKLnuYbnuabnuLvnuLXnuLnnuYPnuLfnuLLnuLrnuafnuZ3nuZbnuZ7nuZnnuZrnubnnuarnuannubznubvnuoPnt5Xnub3ovq7nub/nuojnuonnuoznupLnupDnupPnupTnupbnuo7nupvnupznvLjnvLpcIl0sW1wiZTZhMVwiLFwi572F572M572N572O572Q572R572V572U572Y572f572g572o572p572n5724576C576G576D576I576H576M576U576e576d576a576j576v576y5765576u576257646K2x57+F57+G57+K57+V57+U57+h57+m57+p57+z57+56aOc6ICG6ICE6ICL6ICS6ICY6ICZ6ICc6ICh6ICo6IC/6IC76IGK6IGG6IGS6IGY6IGa6IGf6IGi6IGo6IGz6IGy6IGw6IG26IG56IG96IG/6IKE6IKG6IKF6IKb6IKT6IKa6IKt5YaQ6IKs6IOb6IOl6IOZ6IOd6IOE6IOa6IOW6ISJ6IOv6IOx6ISb6ISp6ISj6ISv6IWLXCJdLFtcImU3YTFcIixcIumai+iFhuiEvuiFk+iFkeiDvOiFseiFruiFpeiFpuiFtOiGg+iGiOiGiuiGgOiGguiGoOiGleiGpOiGo+iFn+iGk+iGqeiGsOiGteiGvuiGuOiGveiHgOiHguiGuuiHieiHjeiHkeiHmeiHmOiHiOiHmuiHn+iHoOiHp+iHuuiHu+iHvuiIgeiIguiIheiIh+iIiuiIjeiIkOiIluiIqeiIq+iIuOiIs+iJgOiJmeiJmOiJneiJmuiJn+iJpOiJouiJqOiJquiJq+iIruiJseiJt+iJuOiJvuiKjeiKkuiKq+iKn+iKu+iKrOiLoeiLo+iLn+iLkuiLtOiLs+iLuuiOk+iMg+iLu+iLueiLnuiMhuiLnOiMieiLmVwiXSxbXCJlOGExXCIsXCLojLXojLTojJbojLLojLHojYDojLnojZDojYXojK/ojKvojJfojJjojoXojprojqrojp/ojqLojpbojKPojo7ojofojorojbzojrXojbPojbXojqDojonojqjoj7TokJPoj6voj47oj73okIPoj5jokIvoj4Hoj7fokIfoj6Doj7LokI3okKLokKDojr3okLjolIboj7voka3okKrokLzolZrokoTokbfokavokq3oka7okoLokanokYbokKzoka/okbnokLXok4rokaLokrnokr/okp/ok5nok43okrvok5rok5Dok4Hok4bok5bokqHolKHok7/ok7TolJfolJjolKzolJ/olJXolJTok7zolYDolaPolZjolYhcIl0sW1wiZTlhMVwiLFwi6JWB6JiC6JWL6JWV6JaA6Jak6JaI6JaR6JaK6Jao6JWt6JaU6Jab6Jeq6JaH6Jac6JW36JW+6JaQ6JeJ6Ja66JeP6Ja56JeQ6JeV6Jed6Jel6Jec6Je56JiK6JiT6JiL6Je+6Je66JiG6Jii6Jia6Jiw6Ji/6JmN5LmV6JmU6Jmf6Jmn6Jmx6JqT6Jqj6Jqp6Jqq6JqL6JqM6Jq26Jqv6JuE6JuG6Jqw6JuJ6KCj6Jqr6JuU6Jue6Jup6Jus6Juf6Jub6Juv6JyS6JyG6JyI6JyA6JyD6Ju76JyR6JyJ6JyN6Ju56JyK6Jy06Jy/6Jy36Jy76Jyl6Jyp6Jya6J2g6J2f6J246J2M6J2O6J206J2X6J2o6J2u6J2ZXCJdLFtcImVhYTFcIixcIuidk+ido+idquigheieouien+ieguier+ifi+ieveifgOifkOmbluieq+ifhOies+ifh+ifhuieu+ifr+ifsuifoOigj+igjeifvuiftuift+igjuifkuigkeigluigleigouigoeigseigtuigueigp+igu+ihhOihguihkuihmeihnuihouihq+iigeihvuiinuihteihveiiteihsuiiguiil+iikuiiruiimeiiouiijeiipOiisOiiv+iiseijg+ijhOijlOijmOijmeijneijueikguijvOijtOijqOijsuikhOikjOikiuikk+ilg+iknuikpeikquikq+ilgeilhOiku+iktuikuOiljOikneiloOilnlwiXSxbXCJlYmExXCIsXCLopabopaTopa3oparopa/opbTopbfopb7opoPopojoporoppPoppjopqHopqnopqbopqzopq/oprLoprropr3opr/op4Dop5rop5zop53op6fop7Top7joqIPoqJboqJDoqIzoqJvoqJ3oqKXoqLboqYHoqZvoqZLoqYboqYjoqbzoqa3oqazoqaLoqoXoqoLoqoToqqjoqqHoqpHoqqXoqqboqproqqPoq4Toq43oq4Loq5roq6voq7Poq6foq6Toq7HorJToq6Doq6Loq7foq57oq5vorIzorIforJroq6HorJborJDorJforKDorLPpnqvorKborKvorL7orKjorYHorYzorY/orY7orYnorZborZvorZroratcIl0sW1wiZWNhMVwiLFwi6K2f6K2s6K2v6K206K296K6A6K6M6K6O6K6S6K6T6K6W6K6Z6K6a6LC66LGB6LC/6LGI6LGM6LGO6LGQ6LGV6LGi6LGs6LG46LG66LKC6LKJ6LKF6LKK6LKN6LKO6LKU6LG86LKY5oid6LKt6LKq6LK96LKy6LKz6LKu6LK26LOI6LOB6LOk6LOj6LOa6LO96LO66LO76LSE6LSF6LSK6LSH6LSP6LSN6LSQ6b2O6LST6LON6LSU6LSW6LWn6LWt6LWx6LWz6LaB6LaZ6LeC6La+6La66LeP6Lea6LeW6LeM6Leb6LeL6Leq6Ler6Lef6Lej6Le86LiI6LiJ6Le/6Lid6Lie6LiQ6Lif6LmC6Li16Liw6Li06LmKXCJdLFtcImVkYTFcIixcIui5h+i5iei5jOi5kOi5iOi5mei5pOi5oOi4qui5o+i5lei5tui5sui5vOi6gei6h+i6hei6hOi6i+i6iui6k+i6kei6lOi6mei6qui6oei6rOi6sOi7hui6sei6vui7hei7iOi7i+i7m+i7o+i7vOi7u+i7q+i7vui8iui8hei8lei8kui8mei8k+i8nOi8n+i8m+i8jOi8pui8s+i8u+i8uei9hei9gui8vui9jOi9iei9hui9jui9l+i9nOi9oui9o+i9pOi+nOi+n+i+o+i+rei+r+i+t+i/mui/pei/oui/qui/r+mCh+i/tOmAhei/uei/uumAkemAlemAoemAjemAnumAlumAi+mAp+mAtumAtemAuei/uFwiXSxbXCJlZWExXCIsXCLpgY/pgZDpgZHpgZLpgI7pgYnpgL7pgZbpgZjpgZ7pgajpga/pgbbpmqjpgbLpgoLpgb3pgoHpgoDpgorpgonpgo/pgqjpgq/pgrHpgrXpg6Lpg6TmiYjpg5vphILphJLphJnphLLphLDphYrphZbphZjphaPphaXphanphbPphbLphovphonphoLphqLphqvphq/phqrphrXphrTphrrph4Dph4Hph4nph4vph5Dph5bph5/ph6Hph5vph7zph7Xph7bpiJ7ph7/piJTpiKzpiJXpiJHpiZ7piZfpiYXpiYnpiaTpiYjpipXpiL/piYvpiZDpipzpipbpipPpipvpiZrpi4/pirnpirfpi6npjI/pi7rpjYTpjK5cIl0sW1wiZWZhMVwiLFwi6YyZ6Yyi6Yya6Yyj6Yy66Yy16Yy76Y2c6Y2g6Y286Y2u6Y2W6Y6w6Y6s6Y6t6Y6U6Y656Y+W6Y+X6Y+o6Y+l6Y+Y6Y+D6Y+d6Y+Q6Y+I6Y+k6ZCa6ZCU6ZCT6ZCD6ZCH6ZCQ6ZC26ZCr6ZC16ZCh6ZC66ZGB6ZGS6ZGE6ZGb6ZGg6ZGi6ZGe6ZGq6Yip6ZGw6ZG16ZG36ZG96ZGa6ZG86ZG+6ZKB6ZG/6ZaC6ZaH6ZaK6ZaU6ZaW6ZaY6ZaZ6Zag6Zao6Zan6Zat6Za86Za76Za56Za+6ZeK5r+26ZeD6ZeN6ZeM6ZeV6ZeU6ZeW6Zec6Zeh6Zel6Zei6Zih6Zio6Ziu6Ziv6ZmC6ZmM6ZmP6ZmL6Zm36Zmc6ZmeXCJdLFtcImYwYTFcIixcIumZnemZn+mZpumZsumZrOmajemamOmalemal+maqumap+masemasumasOmatOmatumauOmauembjumbi+mbiembjeiljembnOmcjemblembuemchOmchumciOmck+mcjumckemcj+mclumcmemcpOmcqumcsOmcuemcvemcvumdhOmdhumdiOmdgumdiemdnOmdoOmdpOmdpumdqOWLkumdq+mdsemduemehemdvOmegemduumehumei+mej+mekOmenOmeqOmepumeo+mes+metOmfg+mfhumfiOmfi+mfnOmfrem9j+mfsuern+mftumftemgj+mgjOmguOmgpOmgoemgt+mgvemhhumhj+mhi+mhq+mhr+mhsFwiXSxbXCJmMWExXCIsXCLpobHpobTpobPpoqrpoq/porHporbpo4Tpo4Ppo4bpo6npo6vppIPppInppJLppJTppJjppKHppJ3ppJ7ppKTppKDppKzppK7ppL3ppL7ppYLppYnppYXppZDppYvppZHppZLppYzppZXpppfpppjppqXppq3ppq7pprzpp5/pp5vpp53pp5jpp5Hpp63pp67pp7Hpp7Lpp7vpp7jpqIHpqI/pqIXpp6LpqJnpqKvpqLfpqYXpqYLpqYDpqYPpqL7pqZXpqY3pqZvpqZfpqZ/pqaLpqaXpqaTpqanpqavpqarpqq3pqrDpqrzpq4Dpq4/pq5Hpq5Ppq5Tpq57pq5/pq6Lpq6Ppq6bpq6/pq6vpq67pq7Tpq7Hpq7dcIl0sW1wiZjJhMVwiLFwi6au76ayG6ayY6aya6ayf6ayi6ayj6ayl6ayn6ayo6ayp6ayq6ayu6ayv6ayy6a2E6a2D6a2P6a2N6a2O6a2R6a2Y6a206a6T6a6D6a6R6a6W6a6X6a6f6a6g6a6o6a606a+A6a+K6a656a+G6a+P6a+R6a+S6a+j6a+i6a+k6a+U6a+h6bC66a+y6a+x6a+w6bCV6bCU6bCJ6bCT6bCM6bCG6bCI6bCS6bCK6bCE6bCu6bCb6bCl6bCk6bCh6bCw6bGH6bCy6bGG6bC+6bGa6bGg6bGn6bG26bG46bOn6bOs6bOw6bSJ6bSI6bOr6bSD6bSG6bSq6bSm6bav6bSj6bSf6bWE6bSV6bSS6bWB6bS/6bS+6bWG6bWIXCJdLFtcImYzYTFcIixcIum1nem1num1pOm1kem1kOm1mem1sum2iem2h+m2q+m1r+m1uum2mum2pOm2qem2sum3hOm3gem2u+m2uOm2uum3hum3j+m3gum3mem3k+m3uOm3pum3rem3r+m3vem4mum4m+m4num5tem5uem5vem6gem6iOm6i+m6jOm6kum6lem6kem6nem6pem6qem6uOm6qum6remdoem7jOm7jum7j+m7kOm7lOm7nOm7num7nem7oOm7pem7qOm7r+m7tOm7tum7t+m7uem7u+m7vOm7vem8h+m8iOeat+m8lem8oem8rOm8vum9ium9kum9lOm9o+m9n+m9oOm9oem9pum9p+m9rOm9qum9t+m9sum9tum+lem+nOm+oFwiXSxbXCJmNGExXCIsXCLloK/mp4fpgZnnkaTlh5znhplcIl0sW1wiZjlhMVwiLFwi57qK6KSc6Y2I6YqI6JOc5L+J54K75pix5qOI6Yu55pu75b2F5Lio5Luh5Lu85LyA5LyD5Ly55L2W5L6S5L6K5L6a5L6U5L+N5YGA5YCi5L+/5YCe5YGG5YGw5YGC5YKU5YO05YOY5YWK5YWk5Yad5Ya+5Yes5YiV5Yqc5Yqm5YuA5Yub5YyA5YyH5Yyk5Y2y5Y6T5Y6y5Y+d76iO5ZKc5ZKK5ZKp5ZO/5ZaG5Z2Z5Z2l5Z6s5Z+I5Z+H76iP76iQ5aKe5aKy5aSL5aWT5aWb5aWd5aWj5aak5aa65a2W5a+A55Sv5a+Y5a+s5bCe5bKm5bK65bO15bSn5bWT76iR5bWC5bWt5ba45ba55beQ5byh5by05b2n5b63XCJdLFtcImZhYTFcIixcIuW/nuaBneaCheaCiuaDnuaDleaEoOaDsuaEkeaEt+aEsOaGmOaIk+aKpuaPteaRoOaSneaTjuaVjuaYgOaYleaYu+aYieaYruaYnuaYpOaZpeaZl+aZme+okuaZs+aameaaoOaasuaav+abuuacju+kqeadpuaeu+ahkuafgOaggeahhOajj++ok+alqO+olOammOanouaosOapq+aphuaps+apvuarouarpOavluawv+axnOayhuaxr+azmua0hOa2h+a1r+a2lua2rOa3j+a3uOa3sua3vOa4uea5nOa4p+a4vOa6v+a+iOa+tea/teeAheeAh+eAqOeCheeCq+eEj+eEhOeFnOeFhueFh++oleeHgeeHvueKsVwiXSxbXCJmYmExXCIsXCLnir7njKTvqJbnjbfnjr3nj4nnj5bnj6Pnj5LnkIfnj7XnkKbnkKrnkKnnkK7nkaLnkonnkp/nlIHnla/nmoLnmpznmp7nmpvnmqbvqJfnnYbliq/noKHnoY7noaTnobrnpLDvqJjvqJnvqJrnppTvqJvnppvnq5Hnq6fvqJznq6vnrp7vqJ3ntYjntZzntrfntqDnt5bnuZLnvYfnvqHvqJ7ojIHojaLojb/oj4foj7bokYjokrTolZPolZnolavvqJ/olrDvqKDvqKHooIfoo7XoqJLoqLfoqbnoqqfoqr7oq5/vqKLoq7borZPorb/os7Dos7TotJLotbbvqKPou4/vqKTvqKXpgafpg57vqKbphJXphKfph5pcIl0sW1wiZmNhMVwiLFwi6YeX6Yee6Yet6Yeu6Yek6Yel6YiG6YiQ6YiK6Yi66YmA6Yi86YmO6YmZ6YmR6Yi56Ymn6Yqn6Ym36Ym46Yun6YuX6YuZ6YuQ76in6YuV6Yug6YuT6Yyl6Yyh6Yu776io6Yye6Yu/6Yyd6YyC6Y2w6Y2X6Y6k6Y+G6Y+e6Y+46ZCx6ZGF6ZGI6ZaS76ec76ip6Zqd6Zqv6Zyz6Zy76Z2D6Z2N6Z2P6Z2R6Z2V6aGX6aGl76iq76ir6aSn76is6aae6amO6auZ6auc6a216a2y6a6P6a6x6a676bCA6bWw6bWr76it6biZ6buRXCJdLFtcImZjZjFcIixcIuKFsFwiLDksXCLvv6Lvv6TvvIfvvIJcIl0sW1wiOGZhMmFmXCIsXCLLmMuHwrjLmcudwq/Lm8ua772ezoTOhVwiXSxbXCI4ZmEyYzJcIixcIsKhwqbCv1wiXSxbXCI4ZmEyZWJcIixcIsK6wqrCqcKu4oSiwqTihJZcIl0sW1wiOGZhNmUxXCIsXCLOhs6IzonOis6qXCJdLFtcIjhmYTZlN1wiLFwizoxcIl0sW1wiOGZhNmU5XCIsXCLOjs6rXCJdLFtcIjhmYTZlY1wiLFwizo9cIl0sW1wiOGZhNmYxXCIsXCLOrM6tzq7Or8+KzpDPjM+Cz43Pi86wz45cIl0sW1wiOGZhN2MyXCIsXCLQglwiLDEwLFwi0I7Qj1wiXSxbXCI4ZmE3ZjJcIixcItGSXCIsMTAsXCLRntGfXCJdLFtcIjhmYTlhMVwiLFwiw4bEkFwiXSxbXCI4ZmE5YTRcIixcIsSmXCJdLFtcIjhmYTlhNlwiLFwixLJcIl0sW1wiOGZhOWE4XCIsXCLFgcS/XCJdLFtcIjhmYTlhYlwiLFwixYrDmMWSXCJdLFtcIjhmYTlhZlwiLFwixabDnlwiXSxbXCI4ZmE5YzFcIixcIsOmxJHDsMSnxLHEs8S4xYLFgMWJxYvDuMWTw5/Fp8O+XCJdLFtcIjhmYWFhMVwiLFwiw4HDgMOEw4LEgseNxIDEhMOFw4PEhsSIxIzDh8SKxI7DicOIw4vDisSaxJbEksSYXCJdLFtcIjhmYWFiYVwiLFwixJzEnsSixKDEpMONw4zDj8OOx4/EsMSqxK7EqMS0xLbEucS9xLvFg8WHxYXDkcOTw5LDlsOUx5HFkMWMw5XFlMWYxZbFmsWcxaDFnsWkxaLDmsOZw5zDm8Wsx5PFsMWqxbLFrsWox5fHm8eZx5XFtMOdxbjFtsW5xb3Fu1wiXSxbXCI4ZmFiYTFcIixcIsOhw6DDpMOixIPHjsSBxIXDpcOjxIfEicSNw6fEi8SPw6nDqMOrw6rEm8SXxJPEmce1xJ3En1wiXSxbXCI4ZmFiYmRcIixcIsShxKXDrcOsw6/DrseQXCJdLFtcIjhmYWJjNVwiLFwixKvEr8SpxLXEt8S6xL7EvMWExYjFhsOxw7PDssO2w7THksWRxY3DtcWVxZnFl8WbxZ3FocWfxaXFo8O6w7nDvMO7xa3HlMWxxavFs8WvxanHmMecx5rHlsW1w73Dv8W3xbrFvsW8XCJdLFtcIjhmYjBhMVwiLFwi5LiC5LiE5LiF5LiM5LiS5Lif5Lij5Lik5Lio5Lir5Liu5Liv5Liw5Li15LmA5LmB5LmE5LmH5LmR5Lma5Lmc5Lmj5Lmo5Lmp5Lm05Lm15Lm55Lm/5LqN5LqW5LqX5Lqd5Lqv5Lq55LuD5LuQ5Lua5Lub5Lug5Luh5Lui5Luo5Luv5Lux5Luz5Lu15Lu95Lu+5Lu/5LyA5LyC5LyD5LyI5LyL5LyM5LyS5LyV5LyW5LyX5LyZ5Lyu5Lyx5L2g5Lyz5Ly15Ly35Ly55Ly75Ly+5L2A5L2C5L2I5L2J5L2L5L2M5L2S5L2U5L2W5L2Y5L2f5L2j5L2q5L2s5L2u5L2x5L235L245L255L265L295L2+5L6B5L6C5L6EXCJdLFtcIjhmYjFhMVwiLFwi5L6F5L6J5L6K5L6M5L6O5L6Q5L6S5L6T5L6U5L6X5L6Z5L6a5L6e5L6f5L6y5L635L655L675L685L695L6+5L+A5L+B5L+F5L+G5L+I5L+J5L+L5L+M5L+N5L+P5L+S5L+c5L+g5L+i5L+w5L+y5L+85L+95L+/5YCA5YCB5YCE5YCH5YCK5YCM5YCO5YCQ5YCT5YCX5YCY5YCb5YCc5YCd5YCe5YCi5YCn5YCu5YCw5YCy5YCz5YC15YGA5YGB5YGC5YGF5YGG5YGK5YGM5YGO5YGR5YGS5YGT5YGX5YGZ5YGf5YGg5YGi5YGj5YGm5YGn5YGq5YGt5YGw5YGx5YC75YKB5YKD5YKE5YKG5YKK5YKO5YKP5YKQXCJdLFtcIjhmYjJhMVwiLFwi5YKS5YKT5YKU5YKW5YKb5YKc5YKeXCIsNCxcIuWCquWCr+WCsOWCueWCuuWCveWDgOWDg+WDhOWDh+WDjOWDjuWDkOWDk+WDlOWDmOWDnOWDneWDn+WDouWDpOWDpuWDqOWDqeWDr+WDseWDtuWDuuWDvuWEg+WEhuWEh+WEiOWEi+WEjOWEjeWEjuWDsuWEkOWEl+WEmeWEm+WEnOWEneWEnuWEo+WEp+WEqOWErOWEreWEr+WEseWEs+WEtOWEteWEuOWEueWFguWFiuWFj+WFk+WFleWFl+WFmOWFn+WFpOWFpuWFvuWGg+WGhOWGi+WGjuWGmOWGneWGoeWGo+WGreWGuOWGuuWGvOWGvuWGv+WHglwiXSxbXCI4ZmIzYTFcIixcIuWHiOWHj+WHkeWHkuWHk+WHleWHmOWHnuWHouWHpeWHruWHsuWHs+WHtOWHt+WIgeWIguWIheWIkuWIk+WIleWIluWImOWIouWIqOWIseWIsuWIteWIvOWJheWJieWJleWJl+WJmOWJmuWJnOWJn+WJoOWJoeWJpuWJruWJt+WJuOWJueWKgOWKguWKheWKiuWKjOWKk+WKleWKluWKl+WKmOWKmuWKnOWKpOWKpeWKpuWKp+WKr+WKsOWKtuWKt+WKuOWKuuWKu+WKveWLgOWLhOWLhuWLiOWLjOWLj+WLkeWLlOWLluWLm+WLnOWLoeWLpeWLqOWLqeWLquWLrOWLsOWLseWLtOWLtuWLt+WMgOWMg+WMiuWMi1wiXSxbXCI4ZmI0YTFcIixcIuWMjOWMkeWMk+WMmOWMm+WMnOWMnuWMn+WMpeWMp+WMqOWMqeWMq+WMrOWMreWMsOWMsuWMteWMvOWMveWMvuWNguWNjOWNi+WNmeWNm+WNoeWNo+WNpeWNrOWNreWNsuWNueWNvuWOg+WOh+WOiOWOjuWOk+WOlOWOmeWOneWOoeWOpOWOquWOq+WOr+WOsuWOtOWOteWOt+WOuOWOuuWOveWPgOWPheWPj+WPkuWPk+WPleWPmuWPneWPnuWPoOWPpuWPp+WPteWQguWQk+WQmuWQoeWQp+WQqOWQquWQr+WQseWQtOWQteWRg+WRhOWRh+WRjeWRj+WRnuWRouWRpOWRpuWRp+WRqeWRq+WRreWRruWRtOWRv1wiXSxbXCI4ZmI1YTFcIixcIuWSgeWSg+WSheWSiOWSieWSjeWSkeWSleWSluWSnOWSn+WSoeWSpuWSp+WSqeWSquWSreWSruWSseWSt+WSueWSuuWSu+WSv+WThuWTiuWTjeWTjuWToOWTquWTrOWTr+WTtuWTvOWTvuWTv+WUgOWUgeWUheWUiOWUieWUjOWUjeWUjuWUleWUquWUq+WUsuWUteWUtuWUu+WUvOWUveWVgeWVh+WVieWViuWVjeWVkOWVkeWVmOWVmuWVm+WVnuWVoOWVoeWVpOWVpuWVv+WWgeWWguWWhuWWiOWWjuWWj+WWkeWWkuWWk+WWlOWWl+WWo+WWpOWWreWWsuWWv+WXgeWXg+WXhuWXieWXi+WXjOWXjuWXkeWXklwiXSxbXCI4ZmI2YTFcIixcIuWXk+WXl+WXmOWXm+WXnuWXouWXqeWXtuWXv+WYheWYiOWYiuWYjVwiLDUsXCLlmJnlmKzlmLDlmLPlmLXlmLflmLnlmLvlmLzlmL3lmL/lmYDlmYHlmYPlmYTlmYblmYnlmYvlmY3lmY/lmZTlmZ7lmaDlmaHlmaLlmaPlmablmanlma3lma/lmbHlmbLlmbXlmoTlmoXlmojlmovlmozlmpXlmpnlmprlmp3lmp7lmp/lmqblmqflmqjlmqnlmqvlmqzlmq3lmrHlmrPlmrflmr7lm4Xlm4nlm4rlm4vlm4/lm5Dlm4zlm43lm5nlm5zlm53lm5/lm6Hlm6RcIiw0LFwi5Zux5Zur5ZutXCJdLFtcIjhmYjdhMVwiLFwi5Zu25Zu35ZyB5ZyC5ZyH5ZyK5ZyM5ZyR5ZyV5Zya5Zyb5Zyd5Zyg5Zyi5Zyj5Zyk5Zyl5Zyp5Zyq5Zys5Zyu5Zyv5Zyz5Zy05Zy95Zy+5Zy/5Z2F5Z2G5Z2M5Z2N5Z2S5Z2i5Z2l5Z2n5Z2o5Z2r5Z2tXCIsNCxcIuWds+WdtOWdteWdt+WdueWduuWdu+WdvOWdvuWegeWeg+WejOWelOWel+WemeWemuWenOWeneWenuWen+WeoeWeleWep+WeqOWeqeWerOWeuOWeveWfh+WfiOWfjOWfj+WfleWfneWfnuWfpOWfpuWfp+WfqeWfreWfsOWfteWftuWfuOWfveWfvuWfv+Wgg+WghOWgiOWgieWfoVwiXSxbXCI4ZmI4YTFcIixcIuWgjOWgjeWgm+WgnuWgn+WgoOWgpuWgp+WgreWgsuWgueWgv+WhieWhjOWhjeWhj+WhkOWhleWhn+WhoeWhpOWhp+WhqOWhuOWhvOWhv+WigOWigeWih+WiiOWiieWiiuWijOWijeWij+WikOWilOWiluWineWioOWioeWiouWipuWiqeWiseWisuWjhOWivOWjguWjiOWjjeWjjuWjkOWjkuWjlOWjluWjmuWjneWjoeWjouWjqeWjs+WkheWkhuWki+WkjOWkkuWkk+WklOiZgeWkneWkoeWko+WkpOWkqOWkr+WksOWks+WkteWktuWkv+Wlg+WlhuWlkuWlk+WlmeWlm+WlneWlnuWln+WloeWlo+Wlq+WlrVwiXSxbXCI4ZmI5YTFcIixcIuWlr+WlsuWlteWltuWlueWlu+WlvOWmi+WmjOWmjuWmkuWmleWml+Wmn+WmpOWmp+WmreWmruWmr+WmsOWms+Wmt+WmuuWmvOWngeWng+WnhOWniOWniuWnjeWnkuWnneWnnuWnn+Wno+WnpOWnp+WnruWnr+WnseWnsuWntOWnt+WogOWohOWojOWojeWojuWokuWok+WonuWoo+WopOWop+WoqOWoquWoreWosOWphOWpheWph+WpiOWpjOWpkOWpleWpnuWpo+WppeWpp+WpreWpt+WpuuWpu+WpvuWqi+WqkOWqk+WqluWqmeWqnOWqnuWqn+WqoOWqouWqp+WqrOWqseWqsuWqs+WqteWquOWquuWqu+Wqv1wiXSxbXCI4ZmJhYTFcIixcIuWrhOWrhuWriOWrj+WrmuWrnOWroOWrpeWrquWrruWrteWrtuWrveWsgOWsgeWsiOWsl+WstOWsmeWsm+WsneWsoeWspeWsreWsuOWtgeWti+WtjOWtkuWtluWtnuWtqOWtruWtr+WtvOWtveWtvuWtv+WugeWuhOWuhuWuiuWujuWukOWukeWuk+WulOWuluWuqOWuqeWurOWureWur+WuseWusuWut+WuuuWuvOWvgOWvgeWvjeWvj+WvllwiLDQsXCLlr6Dlr6/lr7Hlr7Tlr73lsIzlsJflsJ7lsJ/lsKPlsKblsKnlsKvlsKzlsK7lsLDlsLLlsLXlsLblsZnlsZrlsZzlsaLlsaPlsaflsajlsalcIl0sW1wiOGZiYmExXCIsXCLlsa3lsbDlsbTlsbXlsbrlsbvlsbzlsb3lsoflsojlsorlso/lspLlsp3lsp/lsqDlsqLlsqPlsqblsqrlsrLlsrTlsrXlsrrls4nls4vls5Lls53ls5fls67ls7Hls7Lls7TltIHltIbltI3ltJLltKvltKPltKTltKbltKfltLHltLTltLnltL3ltL/ltYLltYPltYbltYjltZXltZHltZnltYrltZ/ltaDltaHltaLltaTltarlta3ltbDltbnltbrltb7ltb/ltoHltoPltojltorltpLltpPltpTltpXltpnltpvltp/ltqDltqfltqvltrDltrTltrjltrnlt4Plt4flt4vlt5Dlt47lt5jlt5nlt6Dlt6RcIl0sW1wiOGZiY2ExXCIsXCLlt6nlt7jlt7nluIDluIfluI3luJLluJTluJXluJjluJ/luKDluK7luKjluLLluLXluL7luYvluZDluYnluZHluZbluZjluZvluZzluZ7luajluapcIiw0LFwi5bmw5bqA5bqL5bqO5bqi5bqk5bql5bqo5bqq5bqs5bqx5bqz5bq95bq+5bq/5buG5buM5buL5buO5buR5buS5buU5buV5buc5bue5bul5bur5byC5byG5byH5byI5byO5byZ5byc5byd5byh5byi5byj5byk5byo5byr5bys5byu5byw5by05by25by75by95by/5b2A5b2E5b2F5b2H5b2N5b2Q5b2U5b2Y5b2b5b2g5b2j5b2k5b2nXCJdLFtcIjhmYmRhMVwiLFwi5b2v5b2y5b205b215b245b265b295b2+5b6J5b6N5b6P5b6W5b6c5b6d5b6i5b6n5b6r5b6k5b6s5b6v5b6w5b6x5b645b+E5b+H5b+I5b+J5b+L5b+QXCIsNCxcIuW/nuW/oeW/ouW/qOW/qeW/quW/rOW/reW/ruW/r+W/suW/s+W/tuW/uuW/vOaAh+aAiuaAjeaAk+aAlOaAl+aAmOaAmuaAn+aApOaAreaAs+aAteaBgOaBh+aBiOaBieaBjOaBkeaBlOaBluaBl+aBneaBoeaBp+aBseaBvuaBv+aCguaChuaCiOaCiuaCjuaCkeaCk+aCleaCmOaCneaCnuaCouaCpOaCpeaCqOaCsOaCseaCt1wiXSxbXCI4ZmJlYTFcIixcIuaCu+aCvuaDguaDhOaDiOaDieaDiuaDi+aDjuaDj+aDlOaDleaDmeaDm+aDneaDnuaDouaDpeaDsuaDteaDuOaDvOaDveaEguaEh+aEiuaEjOaEkFwiLDQsXCLmhJbmhJfmhJnmhJzmhJ7mhKLmhKrmhKvmhLDmhLHmhLXmhLbmhLfmhLnmhYHmhYXmhYbmhYnmhZ7mhaDmhazmhbLmhbjmhbvmhbzmhb/mhoDmhoHmhoPmhoTmhovmho3mhpLmhpPmhpfmhpjmhpzmhp3mhp/mhqDmhqXmhqjmhqrmhq3mhrjmhrnmhrzmh4Dmh4Hmh4Lmh47mh4/mh5Xmh5zmh53mh57mh5/mh6Hmh6Lmh6fmh6nmh6VcIl0sW1wiOGZiZmExXCIsXCLmh6zmh63mh6/miIHmiIPmiITmiIfmiJPmiJXmiJzmiKDmiKLmiKPmiKfmiKnmiKvmiLnmiL3miYLmiYPmiYTmiYbmiYzmiZDmiZHmiZLmiZTmiZbmiZrmiZzmiaTmia3mia/mibPmibrmib3mio3mio7mio/mipDmiqbmiqjmirPmirbmirfmirrmir7mir/mi4Tmi47mi5Xmi5bmi5rmi6rmi7Lmi7Tmi7zmi73mjIPmjITmjIrmjIvmjI3mjJDmjJPmjJbmjJjmjKnmjKrmjK3mjLXmjLbmjLnmjLzmjYHmjYLmjYPmjYTmjYbmjYrmjYvmjY7mjZLmjZPmjZTmjZjmjZvmjaXmjabmjazmja3mjbHmjbTmjbVcIl0sW1wiOGZjMGExXCIsXCLmjbjmjbzmjb3mjb/mjoLmjoTmjofmjormjpDmjpTmjpXmjpnmjprmjp7mjqTmjqbmjq3mjq7mjq/mjr3mj4Hmj4Xmj4jmj47mj5Hmj5Pmj5Tmj5Xmj5zmj6Dmj6Xmj6rmj6zmj7Lmj7Pmj7Xmj7jmj7nmkInmkIrmkJDmkJLmkJTmkJjmkJ7mkKDmkKLmkKTmkKXmkKnmkKrmkK/mkLDmkLXmkL3mkL/mkYvmkY/mkZHmkZLmkZPmkZTmkZrmkZvmkZzmkZ3mkZ/mkaDmkaHmkaPmka3mkbPmkbTmkbvmkb3mkoXmkofmko/mkpDmkpHmkpjmkpnmkpvmkp3mkp/mkqHmkqPmkqbmkqjmkqzmkrPmkr3mkr7mkr9cIl0sW1wiOGZjMWExXCIsXCLmk4Tmk4nmk4rmk4vmk4zmk47mk5Dmk5Hmk5Xmk5fmk6Tmk6Xmk6nmk6rmk63mk7Dmk7Xmk7fmk7vmk7/mlIHmlITmlIjmlInmlIrmlI/mlJPmlJTmlJbmlJnmlJvmlJ7mlJ/mlKLmlKbmlKnmlK7mlLHmlLrmlLzmlL3mlYPmlYfmlYnmlZDmlZLmlZTmlZ/mlaDmlafmlavmlbrmlb3mloHmloXmlormlpLmlpXmlpjmlp3mlqDmlqPmlqbmlq7mlrLmlrPmlrTmlr/ml4Lml4jml4nml47ml5Dml5Tml5bml5jml5/ml7Dml7Lml7Tml7Xml7nml77ml7/mmIDmmITmmIjmmInmmI3mmJHmmJLmmJXmmJbmmJ1cIl0sW1wiOGZjMmExXCIsXCLmmJ7mmKHmmKLmmKPmmKTmmKbmmKnmmKrmmKvmmKzmmK7mmLDmmLHmmLPmmLnmmLfmmYDmmYXmmYbmmYrmmYzmmZHmmY7mmZfmmZjmmZnmmZvmmZzmmaDmmaHmm7vmmarmmavmmazmmb7mmbPmmbXmmb/mmbfmmbjmmbnmmbvmmoDmmbzmmovmmozmmo3mmpDmmpLmmpnmmprmmpvmmpzmmp/mmqDmmqTmmq3mmrHmmrLmmrXmmrvmmr/mm4Dmm4Lmm4Pmm4jmm4zmm47mm4/mm5Tmm5vmm5/mm6jmm6vmm6zmm67mm7rmnIXmnIfmnI7mnJPmnJnmnJzmnKDmnKLmnLPmnL7mnYXmnYfmnYjmnYzmnZTmnZXmnZ1cIl0sW1wiOGZjM2ExXCIsXCLmnabmnazmna7mnbTmnbbmnbvmnoHmnoTmno7mno/mnpHmnpPmnpbmnpjmnpnmnpvmnrDmnrHmnrLmnrXmnrvmnrzmnr3mn7nmn4Dmn4Lmn4Pmn4Xmn4jmn4nmn5Lmn5fmn5nmn5zmn6Hmn6bmn7Dmn7Lmn7bmn7fmoZLmoJTmoJnmoJ3moJ/moKjmoKfmoKzmoK3moK/moLDmoLHmoLPmoLvmoL/moYTmoYXmoYrmoYzmoZXmoZfmoZjmoZvmoavmoa5cIiw0LFwi5qG15qG55qG65qG75qG85qKC5qKE5qKG5qKI5qKW5qKY5qKa5qKc5qKh5qKj5qKl5qKp5qKq5qKu5qKy5qK75qOF5qOI5qOM5qOPXCJdLFtcIjhmYzRhMVwiLFwi5qOQ5qOR5qOT5qOW5qOZ5qOc5qOd5qOl5qOo5qOq5qOr5qOs5qOt5qOw5qOx5qO15qO25qO75qO85qO95qSG5qSJ5qSK5qSQ5qSR5qST5qSW5qSX5qSx5qSz5qS15qS45qS75qWC5qWF5qWJ5qWO5qWX5qWb5qWj5qWk5qWl5qWm5qWo5qWp5qWs5qWw5qWx5qWy5qW65qW75qW/5qaA5qaN5qaS5qaW5qaY5qah5qal5qam5qao5qar5qat5qav5qa35qa45qa65qa85qeF5qeI5qeR5qeW5qeX5qei5qel5qeu5qev5qex5qez5qe15qe+5qiA5qiB5qiD5qiP5qiR5qiV5qia5qid5qig5qik5qio5qiw5qiyXCJdLFtcIjhmYzVhMVwiLFwi5qi05qi35qi75qi+5qi/5qmF5qmG5qmJ5qmK5qmO5qmQ5qmR5qmS5qmV5qmW5qmb5qmk5qmn5qmq5qmx5qmz5qm+5qqB5qqD5qqG5qqH5qqJ5qqL5qqR5qqb5qqd5qqe5qqf5qql5qqr5qqv5qqw5qqx5qq05qq95qq+5qq/5quG5quJ5quI5quM5quQ5quU5quV5quW5quc5qud5quk5qun5qus5quw5qux5quy5qu85qu95qyC5qyD5qyG5qyH5qyJ5qyP5qyQ5qyR5qyX5qyb5qye5qyk5qyo5qyr5qys5qyv5qy15qy25qy75qy/5q2G5q2K5q2N5q2S5q2W5q2Y5q2d5q2g5q2n5q2r5q2u5q2w5q215q29XCJdLFtcIjhmYzZhMVwiLFwi5q2+5q6C5q6F5q6X5q6b5q6f5q6g5q6i5q6j5q6o5q6p5q6s5q6t5q6u5q6w5q645q655q695q6+5q+D5q+E5q+J5q+M5q+W5q+a5q+h5q+j5q+m5q+n5q+u5q+x5q+35q+55q+/5rCC5rCE5rCF5rCJ5rCN5rCO5rCQ5rCS5rCZ5rCf5rCm5rCn5rCo5rCs5rCu5rCz5rC15rC25rC65rC75rC/5rGK5rGL5rGN5rGP5rGS5rGU5rGZ5rGb5rGc5rGr5rGt5rGv5rG05rG25rG45rG55rG75rKF5rKG5rKH5rKJ5rKU5rKV5rKX5rKY5rKc5rKf5rKw5rKy5rK05rOC5rOG5rON5rOP5rOQ5rOR5rOS5rOU5rOWXCJdLFtcIjhmYzdhMVwiLFwi5rOa5rOc5rOg5rOn5rOp5rOr5rOs5rOu5rOy5rO05rSE5rSH5rSK5rSO5rSP5rSR5rST5rSa5rSm5rSn5rSo5rGn5rSu5rSv5rSx5rS55rS85rS/5rWX5rWe5rWf5rWh5rWl5rWn5rWv5rWw5rW85raC5raH5raR5raS5raU5raW5raX5raY5raq5ras5ra05ra35ra55ra95ra/5reE5reI5reK5reO5reP5reW5reb5red5ref5reg5rei5rel5rep5rev5rew5re05re25re85riA5riE5rie5rii5rin5riy5ri25ri55ri75ri85rmE5rmF5rmI5rmJ5rmL5rmP5rmR5rmS5rmT5rmU5rmX5rmc5rmd5rmeXCJdLFtcIjhmYzhhMVwiLFwi5rmi5rmj5rmo5rmz5rm75rm95rqN5rqT5rqZ5rqg5rqn5rqt5rqu5rqx5rqz5rq75rq/5ruA5ruB5ruD5ruH5ruI5ruK5ruN5ruO5ruP5rur5rut5ruu5ru55ru75ru95ryE5ryI5ryK5ryM5ryN5ryW5ryY5rya5ryb5rym5ryp5ryq5ryv5ryw5ryz5ry25ry75ry85ryt5r2P5r2R5r2S5r2T5r2X5r2Z5r2a5r2d5r2e5r2h5r2i5r2o5r2s5r295r2+5r6D5r6H5r6I5r6L5r6M5r6N5r6Q5r6S5r6T5r6U5r6W5r6a5r6f5r6g5r6l5r6m5r6n5r6o5r6u5r6v5r6w5r615r625r685r+F5r+H5r+I5r+KXCJdLFtcIjhmYzlhMVwiLFwi5r+a5r+e5r+o5r+p5r+w5r+15r+55r+85r+954CA54CF54CG54CH54CN54CX54Cg54Cj54Cv54C054C354C554C854GD54GE54GI54GJ54GK54GL54GU54GV54Gd54Ge54GO54Gk54Gl54Gs54Gu54G154G254G+54KB54KF54KG54KUXCIsNCxcIueCm+eCpOeCq+eCsOeCseeCtOeCt+eDiueDkeeDk+eDlOeDleeDlueDmOeDnOeDpOeDuueEg1wiLDQsXCLnhIvnhIznhI/nhJ7nhKDnhKvnhK3nhK/nhLDnhLHnhLjnhYHnhYXnhYbnhYfnhYrnhYvnhZDnhZLnhZfnhZrnhZznhZ7nhaBcIl0sW1wiOGZjYWExXCIsXCLnhajnhbnnhoDnhoXnhofnhoznhpLnhprnhpvnhqDnhqLnhq/nhrDnhrLnhrPnhrrnhr/nh4Dnh4Hnh4Tnh4vnh4znh5Pnh5bnh5nnh5rnh5znh7jnh77niIDniIfniIjniInniJPniJfniJrniJ3niJ/niKTniKvniK/niLTniLjniLnniYHniYLniYPniYXniY7niY/niZDniZPniZXniZbniZrniZzniZ7niaDniaPniajniavnia7nia/nibHnibfnibjnibvnibznib/nioTnionnio3nio7nipPnipvniqjniq3niq7nirHnirTnir7ni4Hni4fni4nni4zni5Xni5bni5jni5/ni6Xni7Pni7Tni7rni7tcIl0sW1wiOGZjYmExXCIsXCLni77njILnjITnjIXnjIfnjIvnjI3njJLnjJPnjJjnjJnnjJ7njKLnjKTnjKfnjKjnjKznjLHnjLLnjLXnjLrnjLvnjL3njYPnjY3njZDnjZLnjZbnjZjnjZ3njZ7njZ/njaDnjabnjafnjannjavnjaznja7nja/njbHnjbfnjbnnjbznjoDnjoHnjoPnjoXnjobnjo7njpDnjpPnjpXnjpfnjpjnjpznjp7njp/njqDnjqLnjqXnjqbnjqrnjqvnjq3njrXnjrfnjrnnjrznjr3njr/nj4Xnj4bnj4nnj4vnj4znj4/nj5Lnj5Pnj5bnj5nnj53nj6Hnj6Pnj6bnj6fnj6nnj7Tnj7Xnj7fnj7nnj7rnj7vnj71cIl0sW1wiOGZjY2ExXCIsXCLnj7/nkIDnkIHnkITnkIfnkIrnkJHnkJrnkJvnkKTnkKbnkKhcIiw5LFwi55C555GA55GD55GE55GG55GH55GL55GN55GR55GS55GX55Gd55Gi55Gm55Gn55Go55Gr55Gt55Gu55Gx55Gy55KA55KB55KF55KG55KH55KJ55KP55KQ55KR55KS55KY55KZ55Ka55Kc55Kf55Kg55Kh55Kj55Km55Ko55Kp55Kq55Kr55Ku55Kv55Kx55Ky55K155K555K755K/55OI55OJ55OM55OQ55OT55OY55Oa55Ob55Oe55Of55Ok55Oo55Oq55Or55Ov55O055O655O755O855O/55SGXCJdLFtcIjhmY2RhMVwiLFwi55SS55SW55SX55Sg55Sh55Sk55Sn55Sp55Sq55Sv55S255S555S955S+55S/55WA55WD55WH55WI55WO55WQ55WS55WX55We55Wf55Wh55Wv55Wx55W5XCIsNSxcIueWgeeWheeWkOeWkueWk+eWleeWmeeWnOeWoueWpOeWtOeWuueWv+eXgOeXgeeXhOeXhueXjOeXjueXj+eXl+eXnOeXn+eXoOeXoeeXpOeXp+eXrOeXrueXr+eXseeXueeYgOeYgueYg+eYhOeYh+eYiOeYiueYjOeYj+eYkueYk+eYleeYlueYmeeYm+eYnOeYneeYnueYo+eYpeeYpueYqeeYreeYsueYs+eYteeYuOeYuVwiXSxbXCI4ZmNlYTFcIixcIueYuueYvOeZiueZgOeZgeeZg+eZhOeZheeZieeZi+eZleeZmeeZn+eZpOeZpeeZreeZrueZr+eZseeZtOeageeaheeajOeajeealeeam+eanOeaneean+eaoOeaolwiLDYsXCLnmqrnmq3nmr3nm4Hnm4Xnm4nnm4vnm4znm47nm5Tnm5nnm6Dnm6bnm6jnm6znm7Dnm7Hnm7bnm7nnm7znnIDnnIbnnIrnnI7nnJLnnJTnnJXnnJfnnJnnnJrnnJznnKLnnKjnnK3nnK7nnK/nnLTnnLXnnLbnnLnnnL3nnL7nnYLnnYXnnYbnnYrnnY3nnY7nnY/nnZLnnZbnnZfnnZznnZ7nnZ/nnaDnnaJcIl0sW1wiOGZjZmExXCIsXCLnnaTnnafnnarnnaznnbDnnbLnnbPnnbTnnbrnnb3nnoDnnoTnnoznno3nnpTnnpXnnpbnnprnnp/nnqLnnqfnnqrnnq7nnq/nnrHnnrXnnr7nn4Pnn4nnn5Hnn5Lnn5Xnn5nnn57nn5/nn6Dnn6Tnn6bnn6rnn6znn7Dnn7Hnn7Tnn7jnn7vnoIXnoIbnoInnoI3noI7noJHnoJ3noKHnoKLnoKPnoK3noK7noLDnoLXnoLfnoYPnoYTnoYfnoYjnoYznoY7noZLnoZznoZ7noaDnoaHnoaPnoaTnoajnoarnoa7nobrnob7noornoo/nopTnopjnoqHnop3nop7nop/noqTnoqjnoqznoq3norDnorHnorLnorNcIl0sW1wiOGZkMGExXCIsXCLnorvnor3nor/no4fno4jno4nno4zno47no5Lno5Pno5Xno5bno6Tno5vno5/no6Dno6Hno6bno6rno7Lno7PnpIDno7bno7fno7rno7vno7/npIbnpIznpJDnpJrnpJznpJ7npJ/npKDnpKXnpKfnpKnnpK3npLHnpLTnpLXnpLvnpL3npL/npYTnpYXnpYbnpYrnpYvnpY/npZHnpZTnpZjnpZvnpZznpafnpannpavnpbLnpbnnpbvnpbznpb7npovnpoznppHnppPnppTnppXnppbnppjnppvnppznpqHnpqjnpqnnpqvnpq/nprHnprTnprjnprvnp4Lnp4Tnp4fnp4jnp4rnp4/np5Tnp5bnp5rnp53np55cIl0sW1wiOGZkMWExXCIsXCLnp6Dnp6Lnp6Xnp6rnp6vnp63np7Hnp7jnp7znqILnqIPnqIfnqInnqIrnqIznqJHnqJXnqJvnqJ7nqKHnqKfnqKvnqK3nqK/nqLDnqLTnqLXnqLjnqLnnqLrnqYTnqYXnqYfnqYjnqYznqZXnqZbnqZnnqZznqZ3nqZ/nqaDnqaXnqafnqarnqa3nqbXnqbjnqb7nqoDnqoLnqoXnqobnqornqovnqpDnqpHnqpTnqp7nqqDnqqPnqqznqrPnqrXnqrnnqrvnqrznq4bnq4nnq4znq47nq5Hnq5vnq6jnq6nnq6vnq6znq7Hnq7Tnq7vnq73nq77nrIfnrJTnrJ/nrKPnrKfnrKnnrKrnrKvnrK3nrK7nrK/nrLBcIl0sW1wiOGZkMmExXCIsXCLnrLHnrLTnrL3nrL/nrYDnrYHnrYfnrY7nrZXnraDnraTnrabnrannrarnra3nra/nrbLnrbPnrbfnroTnronnro7nrpDnrpHnrpbnrpvnrp7nrqDnrqXnrqznrq/nrrDnrrLnrrXnrrbnrrrnrrvnrrznrr3nr4Lnr4Xnr4jnr4rnr5Tnr5bnr5fnr5nnr5rnr5vnr6jnr6rnr7Lnr7Tnr7Xnr7jnr7nnr7rnr7znr77nsIHnsILnsIPnsITnsIbnsInnsIvnsIznsI7nsI/nsJnnsJvnsKDnsKXnsKbnsKjnsKznsLHnsLPnsLTnsLbnsLnnsLrnsYbnsYrnsZXnsZHnsZLnsZPnsZlcIiw1XSxbXCI4ZmQzYTFcIixcIuexoeexo+exp+exqeexreexruexsOexsuexueexvOexveeyhueyh+eyj+eylOeynueyoOeypueysOeytueyt+eyuueyu+eyvOeyv+ezhOezh+eziOezieezjeezj+ezk+ezlOezleezl+ezmeezmuezneezpuezqeezq+eztee0g+e0h+e0iOe0iee0j+e0kee0kue0k+e0lue0nee0nue0o+e0pue0que0ree0see0vOe0vee0vue1gOe1gee1h+e1iOe1jee1kee1k+e1l+e1mee1mue1nOe1nee1pee1p+e1que1sOe1uOe1uue1u+e1v+e2gee2gue2g+e2hee2hue2iOe2i+e2jOe2jee2kee2lue2l+e2nVwiXSxbXCI4ZmQ0YTFcIixcIue2nue2pue2p+e2que2s+e2tue2t+e2uee3glwiLDQsXCLnt4znt43nt47nt5fnt5nnuIDnt6Lnt6Xnt6bnt6rnt6vnt63nt7Hnt7Xnt7bnt7nnt7rnuIjnuJDnuJHnuJXnuJfnuJznuJ3nuKDnuKfnuKjnuKznuK3nuK/nuLPnuLbnuL/nuYTnuYXnuYfnuY7nuZDnuZLnuZjnuZ/nuaHnuaLnuaXnuavnua7nua/nubPnubjnub7nuoHnuobnuofnuornuo3nupHnupXnupjnuprnup3nup7nvLznvLvnvL3nvL7nvL/nvYPnvYTnvYfnvY/nvZLnvZPnvZvnvZznvZ3nvaHnvaPnvaTnvaXnvabnva1cIl0sW1wiOGZkNWExXCIsXCLnvbHnvb3nvb7nvb/nvoDnvovnvo3nvo/nvpDnvpHnvpbnvpfnvpznvqHnvqLnvqbnvqrnvq3nvrTnvrznvr/nv4Dnv4Pnv4jnv47nv4/nv5vnv5/nv6Pnv6Xnv6jnv6znv67nv6/nv7Lnv7rnv73nv77nv7/ogIfogIjogIrogI3ogI7ogI/ogJHogJPogJTogJbogJ3ogJ7ogJ/ogKDogKTogKbogKzogK7ogLDogLTogLXogLfogLnogLrogLzogL7ogYDogYTogaDogaTogaboga3ogbHogbXogoHogojogo7ogpzogp7ogqbogqfogqvogrjogrnog4jog43og4/og5Log5Tog5Xog5fog5jog6Dog63og65cIl0sW1wiOGZkNmExXCIsXCLog7Dog7Log7Pog7bog7nog7rog77ohIPohIvohJbohJfohJjohJzohJ7ohKDohKTohKfohKzohLDohLXohLrohLzohYXohYfohYrohYzohZLohZfohaDohaHohafohajohanoha3oha/ohbfohoHohpDohoTohoXohobohovoho7ohpbohpjohpvohp7ohqLohq7ohrLohrTohrvoh4voh4Poh4Xoh4roh47oh4/oh5Xoh5foh5voh53oh57oh6Hoh6Toh6voh6zoh7Doh7Hoh7Loh7Xoh7boh7joh7noh73oh7/oiIDoiIPoiI/oiJPoiJToiJnoiJroiJ3oiKHoiKLoiKjoiLLoiLToiLroiYPoiYToiYXoiYZcIl0sW1wiOGZkN2ExXCIsXCLoiYvoiY7oiY/oiZHoiZboiZzoiaDoiaPoiafoia3oibToibvoib3oib/oioDoioHoioPoioToiofoionoioroio7oipHoipToipboipjoiproipvoiqDoiqHoiqPoiqToiqfoiqjoiqnoiqroiq7oirDoirLoirToirfoirroirzoir7oir/oi4boi5Doi5Xoi5roi6Doi6Loi6Toi6joi6roi63oi6/oi7boi7foi73oi77ojIDojIHojIfojIjojIrojIvojZTojJvojJ3ojJ7ojJ/ojKHojKLojKzojK3ojK7ojLDojLPojLfojLrojLzojL3ojYLojYPojYTojYfojY3ojY7ojZHojZXojZbojZfojbDojbhcIl0sW1wiOGZkOGExXCIsXCLojb3ojb/ojoDojoLojoTojobojo3ojpLojpTojpXojpjojpnojpvojpzojp3ojqbojqfojqnojqzojr7ojr/oj4Doj4foj4noj4/oj5Doj5Hoj5Toj53ojZPoj6joj6roj7boj7joj7noj7zokIHokIbokIrokI/okJHokJXokJnojq3okK/okLnokYXokYfokYjokYrokY3okY/okZHokZLokZbokZjokZnokZrokZzokaDokaTokaXokafokarokbDokbPokbTokbbokbjokbzokb3okoHokoXokpLokpPokpXokp7okqbokqjokqnokqrokq/okrHokrTokrrokr3okr7ok4Dok4Lok4fok4jok4zok4/ok5NcIl0sW1wiOGZkOWExXCIsXCLok5zok6fok6rok6/ok7Dok7Hok7Lok7folLLok7rok7vok73olILolIPolIfolIzolI7olJDolJzolJ7olKLolKPolKTolKXolKfolKrolKvolK/olLPolLTolLbolL/olYbolY9cIiw0LFwi6JWW6JWZ6JWcXCIsNixcIuiVpOiVq+iVr+iVueiVuuiVu+iVveiVv+iWgeiWheiWhuiWieiWi+iWjOiWj+iWk+iWmOiWneiWn+iWoOiWouiWpeiWp+iWtOiWtuiWt+iWuOiWvOiWveiWvuiWv+iXguiXh+iXiuiXi+iXjuiWreiXmOiXmuiXn+iXoOiXpuiXqOiXreiXs+iXtuiXvFwiXSxbXCI4ZmRhYTFcIixcIuiXv+iYgOiYhOiYheiYjeiYjuiYkOiYkeiYkuiYmOiYmeiYm+iYnuiYoeiYp+iYqeiYtuiYuOiYuuiYvOiYveiZgOiZguiZhuiZkuiZk+iZluiZl+iZmOiZmeiZneiZoFwiLDQsXCLomanomazoma/ombXombbombfombromo3ompHompbompjomprompzomqHomqbomqfomqjomq3omrHomrPomrTomrXomrfomrjomrnomr/om4Dom4Hom4Pom4Xom5Hom5Lom5Xom5fom5rom5zom6Dom6Pom6Xom6fomojom7rom7zom73onITonIXonIfonIvonI7onI/onJDonJPonJTonJnonJ7onJ/onKHonKNcIl0sW1wiOGZkYmExXCIsXCLonKjonK7onK/onLHonLLonLnonLronLzonL3onL7onYDonYPonYXonY3onZjonZ3onaHonaTonaXona/onbHonbLonbvonoNcIiw2LFwi6J6L6J6M6J6Q6J6T6J6V6J6X6J6Y6J6Z6J6e6J6g6J6j6J6n6J6s6J6t6J6u6J6x6J616J6+6J6/6J+B6J+I6J+J6J+K6J+O6J+V6J+W6J+Z6J+a6J+c6J+f6J+i6J+j6J+k6J+q6J+r6J+t6J+x6J+z6J+46J+66J+/6KCB6KCD6KCG6KCJ6KCK6KCL6KCQ6KCZ6KCS6KCT6KCU6KCY6KCa6KCb6KCc6KCe6KCf6KCo6KCt6KCu6KCw6KCy6KC1XCJdLFtcIjhmZGNhMVwiLFwi6KC66KC86KGB6KGD6KGF6KGI6KGJ6KGK6KGL6KGO6KGR6KGV6KGW6KGY6KGa6KGc6KGf6KGg6KGk6KGp6KGx6KG56KG76KKA6KKY6KKa6KKb6KKc6KKf6KKg6KKo6KKq6KK66KK96KK+6KOA6KOKXCIsNCxcIuijkeijkuijk+ijm+ijnuijp+ijr+ijsOijseijteijt+ikgeikhuikjeikjuikj+ikleikluikmOikmeikmuiknOikoOikpuikp+ikqOiksOikseiksuikteikueikuuikvuilgOilguilheilhuilieilj+ilkuill+ilmuilm+ilnOiloeilouilo+ilq+ilruilsOils+ilteilulwiXSxbXCI4ZmRkYTFcIixcIuilu+ilvOilveimieimjeimkOimlOimleimm+imnOimn+imoOimpeimsOimtOimteimtuimt+imvOinlFwiLDQsXCLop6Xop6nop6vop63op7Hop7Pop7bop7nop73op7/oqIToqIXoqIfoqI/oqJHoqJLoqJToqJXoqJ7oqKDoqKLoqKToqKboqKvoqKzoqK/oqLXoqLfoqL3oqL7oqYDoqYPoqYXoqYfoqYnoqY3oqY7oqZPoqZboqZfoqZjoqZzoqZ3oqaHoqaXoqafoqbXoqbboqbfoqbnoqbroqbvoqb7oqb/oqoDoqoPoqoboqovoqo/oqpDoqpLoqpboqpfoqpnoqp/oqqfoqqnoqq7oqq/oqrNcIl0sW1wiOGZkZWExXCIsXCLoqrboqrfoqrvoqr7oq4Poq4boq4joq4noq4roq5Hoq5Poq5Toq5Xoq5foq53oq5/oq6zoq7Doq7Toq7Xoq7boq7zoq7/orIXorIborIvorJHorJzorJ7orJ/orIrorK3orLDorLforLzorYJcIiw0LFwi6K2I6K2S6K2T6K2U6K2Z6K2N6K2e6K2j6K2t6K226K246K256K286K2+6K6B6K6E6K6F6K6L6K6N6K6P6K6U6K6V6K6c6K6e6K6f6LC46LC56LC96LC+6LGF6LGH6LGJ6LGL6LGP6LGR6LGT6LGU6LGX6LGY6LGb6LGd6LGZ6LGj6LGk6LGm6LGo6LGp6LGt6LGz6LG16LG26LG76LG+6LKGXCJdLFtcIjhmZGZhMVwiLFwi6LKH6LKL6LKQ6LKS6LKT6LKZ6LKb6LKc6LKk6LK56LK66LOF6LOG6LOJ6LOL6LOP6LOW6LOV6LOZ6LOd6LOh6LOo6LOs6LOv6LOw6LOy6LO16LO36LO46LO+6LO/6LSB6LSD6LSJ6LSS6LSX6LSb6LWl6LWp6LWs6LWu6LW/6LaC6LaE6LaI6LaN6LaQ6LaR6LaV6Lae6Laf6Lag6Lam6Lar6Las6Lav6Lay6La16La36La56La76LeA6LeF6LeG6LeH6LeI6LeK6LeO6LeR6LeU6LeV6LeX6LeZ6Lek6Lel6Len6Les6Lew6La86Lex6Ley6Le06Le96LiB6LiE6LiF6LiG6LiL6LiR6LiU6LiW6Lig6Lih6LiiXCJdLFtcIjhmZTBhMVwiLFwi6Lij6Lim6Lin6Lix6Liz6Li26Li36Li46Li56Li96LmA6LmB6LmL6LmN6LmO6LmP6LmU6Lmb6Lmc6Lmd6Lme6Lmh6Lmi6Lmp6Lms6Lmt6Lmv6Lmw6Lmx6Lm56Lm66Lm76LqC6LqD6LqJ6LqQ6LqS6LqV6Lqa6Lqb6Lqd6Lqe6Lqi6Lqn6Lqp6Lqt6Lqu6Lqz6Lq16Lq66Lq76LuA6LuB6LuD6LuE6LuH6LuP6LuR6LuU6Luc6Luo6Luu6Luw6Lux6Lu36Lu56Lu66Lut6LyA6LyC6LyH6LyI6LyP6LyQ6LyW6LyX6LyY6Lye6Lyg6Lyh6Lyj6Lyl6Lyn6Lyo6Lys6Lyt6Lyu6Ly06Ly16Ly26Ly36Ly66L2A6L2BXCJdLFtcIjhmZTFhMVwiLFwi6L2D6L2H6L2P6L2RXCIsNCxcIui9mOi9nei9nui9pei+nei+oOi+oei+pOi+pei+pui+tei+tui+uOi+vui/gOi/gei/hui/iui/i+i/jei/kOi/kui/k+i/lei/oOi/o+i/pOi/qOi/rui/sei/tei/tui/u+i/vumAgumAhOmAiOmAjOmAmOmAm+mAqOmAqemAr+mAqumArOmAremAs+mAtOmAt+mAv+mBg+mBhOmBjOmBm+mBnemBoumBpumBp+mBrOmBsOmBtOmBuemChemCiOmCi+mCjOmCjumCkOmClemCl+mCmOmCmemCm+mCoOmCoemCoumCpemCsOmCsumCs+mCtOmCtumCvemDjOmCvumDg1wiXSxbXCI4ZmUyYTFcIixcIumDhOmDhemDh+mDiOmDlemDl+mDmOmDmemDnOmDnemDn+mDpemDkumDtumDq+mDr+mDsOmDtOmDvumDv+mEgOmEhOmEhemEhumEiOmEjemEkOmElOmElumEl+mEmOmEmumEnOmEnumEoOmEpemEoumEo+mEp+mEqemErumEr+mEsemEtOmEtumEt+mEuemEuumEvOmEvemFg+mFh+mFiOmFj+mFk+mFl+mFmemFmumFm+mFoemFpOmFp+mFremFtOmFuemFuumFu+mGgemGg+mGhemGhumGiumGjumGkemGk+mGlOmGlemGmOmGnumGoemGpumGqOmGrOmGremGrumGsOmGsemGsumGs+mGtumGu+mGvOmGvemGv1wiXSxbXCI4ZmUzYTFcIixcIumHgumHg+mHhemHk+mHlOmHl+mHmemHmumHnumHpOmHpemHqemHqumHrFwiLDUsXCLph7fph7nph7vph73piIDpiIHpiITpiIXpiIbpiIfpiInpiIrpiIzpiJDpiJLpiJPpiJbpiJjpiJzpiJ3piKPpiKTpiKXpiKbpiKjpiK7piK/piLDpiLPpiLXpiLbpiLjpiLnpiLrpiLzpiL7piYDpiYLpiYPpiYbpiYfpiYrpiY3piY7piY/piZHpiZjpiZnpiZzpiZ3piaDpiaHpiaXpiafpiajpianpia7pia/pibDpibVcIiw0LFwi6Ym76Ym86Ym96Ym/6YqI6YqJ6YqK6YqN6YqO6YqS6YqXXCJdLFtcIjhmZTRhMVwiLFwi6YqZ6Yqf6Yqg6Yqk6Yql6Yqn6Yqo6Yqr6Yqv6Yqy6Yq26Yq46Yq66Yq76Yq86Yq96Yq/XCIsNCxcIumLhemLhumLh+mLiOmLi+mLjOmLjemLjumLkOmLk+mLlemLl+mLmOmLmemLnOmLnemLn+mLoOmLoemLo+mLpemLp+mLqOmLrOmLrumLsOmLuemLu+mLv+mMgOmMgumMiOmMjemMkemMlOmMlemMnOmMnemMnumMn+mMoemMpOmMpemMp+mMqemMqumMs+mMtOmMtumMt+mNh+mNiOmNiemNkOmNkemNkumNlemNl+mNmOmNmumNnumNpOmNpemNp+mNqemNqumNremNr+mNsOmNsemNs+mNtOmNtlwiXSxbXCI4ZmU1YTFcIixcIumNuumNvemNv+mOgOmOgemOgumOiOmOiumOi+mOjemOj+mOkumOlemOmOmOm+mOnumOoemOo+mOpOmOpumOqOmOq+mOtOmOtemOtumOuumOqemPgemPhOmPhemPhumPh+mPiVwiLDQsXCLpj5Ppj5npj5zpj57pj5/pj6Lpj6bpj6fpj7npj7fpj7jpj7rpj7vpj73pkIHpkILpkITpkIjpkInpkI3pkI7pkI/pkJXpkJbpkJfpkJ/pkK7pkK/pkLHpkLLpkLPpkLTpkLvpkL/pkL3pkYPpkYXpkYjpkYrpkYzpkZXpkZnpkZzpkZ/pkaHpkaPpkajpkavpka3pka7pka/pkbHpkbLpkoTpkoPplbjplblcIl0sW1wiOGZlNmExXCIsXCLplb7ploTplojplozplo3plo7plp3plp7plp/plqHplqbplqnplqvplqzplrTplrbplrrplr3plr/pl4bpl4jpl4npl4vpl5Dpl5Hpl5Lpl5Ppl5npl5rpl53pl57pl5/pl6Dpl6Tpl6bpmJ3pmJ7pmKLpmKTpmKXpmKbpmKzpmLHpmLPpmLfpmLjpmLnpmLrpmLzpmL3pmYHpmZLpmZTpmZbpmZfpmZjpmaHpma7pmbTpmbvpmbzpmb7pmb/pmoHpmoLpmoPpmoTpmonpmpHpmpbpmprpmp3pmp/pmqTpmqXpmqbpmqnpmq7pmq/pmrPpmrrpm4rpm5LltrLpm5jpm5rpm53pm57pm5/pm6npm6/pm7Hpm7rpnIJcIl0sW1wiOGZlN2ExXCIsXCLpnIPpnIXpnInpnJrpnJvpnJ3pnKHpnKLpnKPpnKjpnLHpnLPpnYHpnYPpnYrpnY7pnY/pnZXpnZfpnZjpnZrpnZvpnaPpnafpnarpna7pnbPpnbbpnbfpnbjpnbvpnb3pnb/pnoDpnonpnpXpnpbpnpfpnpnpnprpnp7pnp/pnqLpnqzpnq7pnrHpnrLpnrXpnrbpnrjpnrnpnrrpnrzpnr7pnr/pn4Hpn4Tpn4Xpn4fpn4npn4rpn4zpn43pn47pn5Dpn5Hpn5Tpn5fpn5jpn5npn53pn57pn6Dpn5vpn6Hpn6Tpn6/pn7Hpn7Tpn7fpn7jpn7rpoIfpoIrpoJnpoI3poI7poJTpoJbpoJzpoJ7poKDpoKPpoKZcIl0sW1wiOGZlOGExXCIsXCLpoKvpoK7poK/poLDpoLLpoLPpoLXpoKXpoL7poYTpoYfpoYrpoZHpoZLpoZPpoZbpoZfpoZnpoZrpoaLpoaPpoaXpoabpoarpoazpoqvpoq3poq7porDporTporfporjporrporvpor/po4Lpo4Xpo4jpo4zpo6Hpo6Ppo6Xpo6bpo6fpo6rpo7Ppo7bppILppIfppIjppJHppJXppJbppJfppJrppJvppJzppJ/ppKLppKbppKfppKvppLFcIiw0LFwi6aS56aS66aS76aS86aWA6aWB6aWG6aWH6aWI6aWN6aWO6aWU6aWY6aWZ6aWb6aWc6aWe6aWf6aWg6aab6aad6aaf6aam6aaw6aax6aay6aa1XCJdLFtcIjhmZTlhMVwiLFwi6aa56aa66aa96aa/6aeD6aeJ6aeT6aeU6aeZ6aea6aec6aee6aen6aeq6aer6aes6aew6ae06ae16ae56ae96ae+6aiC6aiD6aiE6aiL6aiM6aiQ6aiR6aiW6aie6aig6aii6aij6aik6ain6ait6aiu6aiz6ai16ai26ai46amH6amB6amE6amK6amL6amM6amO6amR6amU6amW6amd6aqq6aqs6aqu6aqv6aqy6aq06aq16aq26aq56aq76aq+6aq/6auB6auD6auG6auI6auO6auQ6auS6auV6auW6auX6aub6auc6aug6auk6aul6aun6aup6aus6auy6auz6au16au56au66au96au/XCIsNF0sW1wiOGZlYWExXCIsXCLprITprIXprIjprInprIvprIzprI3prI7prJDprJLprJbprJnprJvprJzprKDprKbprKvprK3prLPprLTprLXprLfprLnprLrprL3prYjprYvprYzprZXprZbprZfprZvprZ7praHpraPpraXprabprajprapcIiw0LFwi6a2z6a216a236a246a256a2/6a6A6a6E6a6F6a6G6a6H6a6J6a6K6a6L6a6N6a6P6a6Q6a6U6a6a6a6d6a6e6a6m6a6n6a6p6a6s6a6w6a6x6a6y6a636a646a676a686a6+6a6/6a+B6a+H6a+I6a+O6a+Q6a+X6a+Y6a+d6a+f6a+l6a+n6a+q6a+r6a+v6a+z6a+36a+4XCJdLFtcIjhmZWJhMVwiLFwi6a+56a+66a+96a+/6bCA6bCC6bCL6bCP6bCR6bCW6bCY6bCZ6bCa6bCc6bCe6bCi6bCj6bCmXCIsNCxcIumwsemwtemwtumwt+mwvemxgemxg+mxhOmxhemxiemxiumxjumxj+mxkOmxk+mxlOmxlumxmOmxm+mxnemxnumxn+mxo+mxqemxqumxnOmxq+mxqOmxrumxsOmxsumxtemxt+mxu+mzpumzsumzt+mzuem0i+m0gum0kem0l+m0mOm0nOm0nem0num0r+m0sOm0sum0s+m0tOm0uum0vOm1hem0vem1gum1g+m1h+m1ium1k+m1lOm1n+m1o+m1oum1pem1qem1qum1q+m1sOm1tum1t+m1u1wiXSxbXCI4ZmVjYTFcIixcIum1vOm1vum2g+m2hOm2hum2ium2jem2jum2kum2k+m2lem2lum2l+m2mOm2oem2qum2rOm2rum2sem2tem2uem2vOm2v+m3g+m3h+m3iem3ium3lOm3lem3lum3l+m3mum3num3n+m3oOm3pem3p+m3qem3q+m3rum3sOm3s+m3tOm3vum4ium4gum4h+m4jum4kOm4kem4kum4lem4lum4mem4nOm4nem5uum5u+m5vOm6gOm6gum6g+m6hOm6hem6h+m6jum6j+m6lum6mOm6m+m6num6pOm6qOm6rOm6rum6r+m6sOm6s+m6tOm6tem7hum7iOm7i+m7lem7n+m7pOm7p+m7rOm7rem7rum7sOm7sem7sum7tVwiXSxbXCI4ZmVkYTFcIixcIum7uOm7v+m8gum8g+m8iem8j+m8kOm8kem8kum8lOm8lum8l+m8mem8mum8m+m8n+m8oum8pum8qum8q+m8r+m8sem8sum8tOm8t+m8uem8uum8vOm8vem8v+m9gem9g1wiLDQsXCLpvZPpvZXpvZbpvZfpvZjpvZrpvZ3pvZ7pvajpvanpva1cIiw0LFwi6b2z6b216b266b296b6P6b6Q6b6R6b6S6b6U6b6W6b6X6b6e6b6h6b6i6b6j6b6lXCJdXScpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjI1ODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEpTT04ucGFyc2UoJ3tcInVDaGFyc1wiOlsxMjgsMTY1LDE2OSwxNzgsMTg0LDIxNiwyMjYsMjM1LDIzOCwyNDQsMjQ4LDI1MSwyNTMsMjU4LDI3NiwyODQsMzAwLDMyNSwzMjksMzM0LDM2NCw0NjMsNDY1LDQ2Nyw0NjksNDcxLDQ3Myw0NzUsNDc3LDUwNiw1OTQsNjEwLDcxMiw3MTYsNzMwLDkzMCw5MzgsOTYyLDk3MCwxMDI2LDExMDQsMTEwNiw4MjA5LDgyMTUsODIxOCw4MjIyLDgyMzEsODI0MSw4MjQ0LDgyNDYsODI1Miw4MzY1LDg0NTIsODQ1NCw4NDU4LDg0NzEsODQ4Miw4NTU2LDg1NzAsODU5Niw4NjAyLDg3MTMsODcyMCw4NzIyLDg3MjYsODczMSw4NzM3LDg3NDAsODc0Miw4NzQ4LDg3NTEsODc2MCw4NzY2LDg3NzcsODc4MSw4Nzg3LDg4MDIsODgwOCw4ODE2LDg4NTQsODg1OCw4ODcwLDg4OTYsODk3OSw5MzIyLDkzNzIsOTU0OCw5NTg4LDk2MTYsOTYyMiw5NjM0LDk2NTIsOTY2Miw5NjcyLDk2NzYsOTY4MCw5NzAyLDk3MzUsOTczOCw5NzkzLDk3OTUsMTE5MDYsMTE5MDksMTE5MTMsMTE5MTcsMTE5MjgsMTE5NDQsMTE5NDcsMTE5NTEsMTE5NTYsMTE5NjAsMTE5NjQsMTE5NzksMTIyODQsMTIyOTIsMTIzMTIsMTIzMTksMTIzMzAsMTIzNTEsMTI0MzYsMTI0NDcsMTI1MzUsMTI1NDMsMTI1ODYsMTI4NDIsMTI4NTAsMTI5NjQsMTMyMDAsMTMyMTUsMTMyMTgsMTMyNTMsMTMyNjMsMTMyNjcsMTMyNzAsMTMzODQsMTM0MjgsMTM3MjcsMTM4MzksMTM4NTEsMTQ2MTcsMTQ3MDMsMTQ4MDEsMTQ4MTYsMTQ5NjQsMTUxODMsMTU0NzEsMTU1ODUsMTY0NzEsMTY3MzYsMTcyMDgsMTczMjUsMTczMzAsMTczNzQsMTc2MjMsMTc5OTcsMTgwMTgsMTgyMTIsMTgyMTgsMTgzMDEsMTgzMTgsMTg3NjAsMTg4MTEsMTg4MTQsMTg4MjAsMTg4MjMsMTg4NDQsMTg4NDgsMTg4NzIsMTk1NzYsMTk2MjAsMTk3MzgsMTk4ODcsNDA4NzAsNTkyNDQsNTkzMzYsNTkzNjcsNTk0MTMsNTk0MTcsNTk0MjMsNTk0MzEsNTk0MzcsNTk0NDMsNTk0NTIsNTk0NjAsNTk0NzgsNTk0OTMsNjM3ODksNjM4NjYsNjM4OTQsNjM5NzYsNjM5ODYsNjQwMTYsNjQwMTgsNjQwMjEsNjQwMjUsNjQwMzQsNjQwMzcsNjQwNDIsNjUwNzQsNjUwOTMsNjUxMDcsNjUxMTIsNjUxMjcsNjUxMzIsNjUzNzUsNjU1MTAsNjU1MzZdLFwiZ2JDaGFyc1wiOlswLDM2LDM4LDQ1LDUwLDgxLDg5LDk1LDk2LDEwMCwxMDMsMTA0LDEwNSwxMDksMTI2LDEzMywxNDgsMTcyLDE3NSwxNzksMjA4LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzQxLDQyOCw0NDMsNTQ0LDU0NSw1NTgsNzQxLDc0Miw3NDksNzUwLDgwNSw4MTksODIwLDc5MjIsNzkyNCw3OTI1LDc5MjcsNzkzNCw3OTQzLDc5NDQsNzk0NSw3OTUwLDgwNjIsODE0OCw4MTQ5LDgxNTIsODE2NCw4MTc0LDgyMzYsODI0MCw4MjYyLDgyNjQsODM3NCw4MzgwLDgzODEsODM4NCw4Mzg4LDgzOTAsODM5Miw4MzkzLDgzOTQsODM5Niw4NDAxLDg0MDYsODQxNiw4NDE5LDg0MjQsODQzNyw4NDM5LDg0NDUsODQ4Miw4NDg1LDg0OTYsODUyMSw4NjAzLDg5MzYsODk0Niw5MDQ2LDkwNTAsOTA2Myw5MDY2LDkwNzYsOTA5Miw5MTAwLDkxMDgsOTExMSw5MTEzLDkxMzEsOTE2Miw5MTY0LDkyMTgsOTIxOSwxMTMyOSwxMTMzMSwxMTMzNCwxMTMzNiwxMTM0NiwxMTM2MSwxMTM2MywxMTM2NiwxMTM3MCwxMTM3MiwxMTM3NSwxMTM4OSwxMTY4MiwxMTY4NiwxMTY4NywxMTY5MiwxMTY5NCwxMTcxNCwxMTcxNiwxMTcyMywxMTcyNSwxMTczMCwxMTczNiwxMTk4MiwxMTk4OSwxMjEwMiwxMjMzNiwxMjM0OCwxMjM1MCwxMjM4NCwxMjM5MywxMjM5NSwxMjM5NywxMjUxMCwxMjU1MywxMjg1MSwxMjk2MiwxMjk3MywxMzczOCwxMzgyMywxMzkxOSwxMzkzMywxNDA4MCwxNDI5OCwxNDU4NSwxNDY5OCwxNTU4MywxNTg0NywxNjMxOCwxNjQzNCwxNjQzOCwxNjQ4MSwxNjcyOSwxNzEwMiwxNzEyMiwxNzMxNSwxNzMyMCwxNzQwMiwxNzQxOCwxNzg1OSwxNzkwOSwxNzkxMSwxNzkxNSwxNzkxNiwxNzkzNiwxNzkzOSwxNzk2MSwxODY2NCwxODcwMywxODgxNCwxODk2MiwxOTA0MywzMzQ2OSwzMzQ3MCwzMzQ3MSwzMzQ4NCwzMzQ4NSwzMzQ5MCwzMzQ5NywzMzUwMSwzMzUwNSwzMzUxMywzMzUyMCwzMzUzNiwzMzU1MCwzNzg0NSwzNzkyMSwzNzk0OCwzODAyOSwzODAzOCwzODA2NCwzODA2NSwzODA2NiwzODA2OSwzODA3NSwzODA3NiwzODA3OCwzOTEwOCwzOTEwOSwzOTExMywzOTExNCwzOTExNSwzOTExNiwzOTI2NSwzOTM5NCwxODkwMDBdfScpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDM0Njpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEpTT04ucGFyc2UoJ1tbXCJhMTQwXCIsXCLuk4ZcIiw2Ml0sW1wiYTE4MFwiLFwi7pSFXCIsMzJdLFtcImEyNDBcIixcIu6UplwiLDYyXSxbXCJhMjgwXCIsXCLulaVcIiwzMl0sW1wiYTJhYlwiLFwi7p2mXCIsNV0sW1wiYTJlM1wiLFwi4oKs7p2tXCJdLFtcImEyZWZcIixcIu6dru6dr1wiXSxbXCJhMmZkXCIsXCLunbDunbFcIl0sW1wiYTM0MFwiLFwi7paGXCIsNjJdLFtcImEzODBcIixcIu6XhVwiLDMxLFwi44CAXCJdLFtcImE0NDBcIixcIu6XplwiLDYyXSxbXCJhNDgwXCIsXCLumKVcIiwzMl0sW1wiYTRmNFwiLFwi7p2yXCIsMTBdLFtcImE1NDBcIixcIu6ZhlwiLDYyXSxbXCJhNTgwXCIsXCLumoVcIiwzMl0sW1wiYTVmN1wiLFwi7p29XCIsN10sW1wiYTY0MFwiLFwi7pqmXCIsNjJdLFtcImE2ODBcIixcIu6bpVwiLDMyXSxbXCJhNmI5XCIsXCLunoVcIiw3XSxbXCJhNmQ5XCIsXCLuno1cIiw2XSxbXCJhNmVjXCIsXCLunpTunpVcIl0sW1wiYTZmM1wiLFwi7p6WXCJdLFtcImE2ZjZcIixcIu6el1wiLDhdLFtcImE3NDBcIixcIu6chlwiLDYyXSxbXCJhNzgwXCIsXCLunYVcIiwzMl0sW1wiYTdjMlwiLFwi7p6gXCIsMTRdLFtcImE3ZjJcIixcIu6er1wiLDEyXSxbXCJhODk2XCIsXCLunrxcIiwxMF0sW1wiYThiY1wiLFwi4bi/XCJdLFtcImE4YmZcIixcIse5XCJdLFtcImE4YzFcIixcIu6fie6fiu6fi+6fjFwiXSxbXCJhOGVhXCIsXCLun41cIiwyMF0sW1wiYTk1OFwiLFwi7p+iXCJdLFtcImE5NWJcIixcIu6fo1wiXSxbXCJhOTVkXCIsXCLun6Tun6Xun6ZcIl0sW1wiYTk4OVwiLFwi44C+4r+wXCIsMTFdLFtcImE5OTdcIixcIu6ftFwiLDEyXSxbXCJhOWYwXCIsXCLuoIFcIiwxNF0sW1wiYWFhMVwiLFwi7oCAXCIsOTNdLFtcImFiYTFcIixcIu6BnlwiLDkzXSxbXCJhY2ExXCIsXCLugrxcIiw5M10sW1wiYWRhMVwiLFwi7oSaXCIsOTNdLFtcImFlYTFcIixcIu6FuFwiLDkzXSxbXCJhZmExXCIsXCLuh5ZcIiw5M10sW1wiZDdmYVwiLFwi7qCQXCIsNF0sW1wiZjhhMVwiLFwi7oi0XCIsOTNdLFtcImY5YTFcIixcIu6KklwiLDkzXSxbXCJmYWExXCIsXCLui7BcIiw5M10sW1wiZmJhMVwiLFwi7o2OXCIsOTNdLFtcImZjYTFcIixcIu6OrFwiLDkzXSxbXCJmZGExXCIsXCLukIpcIiw5M10sW1wiZmU1MFwiLFwi4rqB7qCW7qCX7qCY4rqE45Gz45GH4rqI4rqL7qCe45ae45ia45iO4rqM4rqX46Wu46SY7qCm46eP46ef46mz46eQ7qCr7qCs462O47Gu47Og4rqn7qCx7qCy4rqq5IGW5IWf4rqu5Iy34rqz4rq24rq37qC75I6x5I6s4rq75I+d5JOW5Jmh5JmM7qGDXCJdLFtcImZlODBcIixcIuSco+ScqeSdvOSejeK7iuSlh+SluuSlveSmguSmg+SmheSmhuSmn+Smm+Smt+Smtu6hlO6hleSyo+Syn+SyoOSyoeSxt+SyouS0k1wiLDYsXCLktq7uoaTukahcIiw5M10sW1wiODEzNWY0MzdcIixcIu6fh1wiXV0nKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDcwMTQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBKU09OLnBhcnNlKCdbW1wiMFwiLFwiXFxcXHUwMDAwXCIsMTI4XSxbXCJhMVwiLFwi772hXCIsNjJdLFtcIjgxNDBcIixcIuOAgOOAgeOAgu+8jO+8juODu++8mu+8m++8n++8geOCm+OCnMK0772AwqjvvL7vv6PvvL/jg73jg77jgp3jgp7jgIPku53jgIXjgIbjgIfjg7zigJXigJDvvI/vvLzvvZ7iiKXvvZzigKbigKXigJjigJnigJzigJ3vvIjvvInjgJTjgJXvvLvvvL3vvZvvvZ3jgIhcIiw5LFwi77yL77yNwrHDl1wiXSxbXCI4MTgwXCIsXCLDt++8neKJoO+8nO+8nuKJpuKJp+KInuKItOKZguKZgMKw4oCy4oCz4oSD77+l77yE77+g77+h77yF77yD77yG77yK77ygwqfimIbimIXil4vil4/il47il4fil4bilqHilqDilrPilrLilr3ilrzigLvjgJLihpLihpDihpHihpPjgJNcIl0sW1wiODFiOFwiLFwi4oiI4oiL4oqG4oqH4oqC4oqD4oiq4oipXCJdLFtcIjgxYzhcIixcIuKIp+KIqO+/ouKHkuKHlOKIgOKIg1wiXSxbXCI4MWRhXCIsXCLiiKDiiqXijJLiiILiiIfiiaHiiZLiiariiaviiJriiL3iiJ3iiLXiiKviiKxcIl0sW1wiODFmMFwiLFwi4oSr4oCw4pmv4pmt4pmq4oCg4oChwrZcIl0sW1wiODFmY1wiLFwi4pevXCJdLFtcIjgyNGZcIixcIu+8kFwiLDldLFtcIjgyNjBcIixcIu+8oVwiLDI1XSxbXCI4MjgxXCIsXCLvvYFcIiwyNV0sW1wiODI5ZlwiLFwi44GBXCIsODJdLFtcIjgzNDBcIixcIuOCoVwiLDYyXSxbXCI4MzgwXCIsXCLjg6BcIiwyMl0sW1wiODM5ZlwiLFwizpFcIiwxNixcIs6jXCIsNl0sW1wiODNiZlwiLFwizrFcIiwxNixcIs+DXCIsNl0sW1wiODQ0MFwiLFwi0JBcIiw1LFwi0IHQllwiLDI1XSxbXCI4NDcwXCIsXCLQsFwiLDUsXCLRkdC2XCIsN10sW1wiODQ4MFwiLFwi0L5cIiwxN10sW1wiODQ5ZlwiLFwi4pSA4pSC4pSM4pSQ4pSY4pSU4pSc4pSs4pSk4pS04pS84pSB4pSD4pSP4pST4pSb4pSX4pSj4pSz4pSr4pS74pWL4pSg4pSv4pSo4pS34pS/4pSd4pSw4pSl4pS44pWCXCJdLFtcIjg3NDBcIixcIuKRoFwiLDE5LFwi4oWgXCIsOV0sW1wiODc1ZlwiLFwi442J44yU44yi442N44yY44yn44yD44y2442R442X44yN44ym44yj44yr442K44y7446c446d446e446O446P44+E446hXCJdLFtcIjg3N2VcIixcIuONu1wiXSxbXCI4NzgwXCIsXCLjgJ3jgJ/ihJbjj43ihKHjiqRcIiw0LFwi44ix44iy44i5442+442944284omS4omh4oir4oiu4oiR4oia4oql4oig4oif4oq/4oi14oip4oiqXCJdLFtcIjg4OWZcIixcIuS6nOWUluWog+mYv+WTgOaEm+aMqOWntumAouiRteiMnOepkOaCquaPoea4peaXreiRpuiKpumvteaik+Wcp+aWoeaJseWum+WnkOiZu+mjtOe1oue2vumujuaIlueyn+iit+WuieW6teaMieaal+ahiOmXh+mejeadj+S7peS8iuS9jeS+neWBieWbsuWkt+WnlOWogeWwieaDn+aEj+aFsOaYk+akheeCuueVj+eVsOenu+e2ree3r+iDg+iQjuiho+isgumBlemBuuWMu+S6leS6peWfn+iCsumDgeejr+S4gOWjsea6oumAuOeosuiMqOiKi+mwr+WFgeWNsOWSveWToeWboOWnu+W8lemjsua3q+iDpOiUrVwiXSxbXCI4OTQwXCIsXCLpmaLpmbDpmqDpn7vlkIvlj7Plrofng4/nvr3ov4Lpm6jlja/ptZznqrrkuJHnopPoh7zmuKblmJjllITmrJ3olJrpsLvlp6Xljqnmtabnk5zplo/lmYLkupHpgYvpm7LojY/ppIzlj6HllrblrLDlvbHmmKDmm7PmoITmsLjms7PmtKnnkZvnm4jnqY7poLToi7HooZvoqaDpi63mtrLnlqvnm4rpp4XmgqborIHotorplrLmpo7ljq3lhoZcIl0sW1wiODk4MFwiLFwi5ZyS5aCw5aWE5a605bu25oCo5o6p5o+05rK/5ryU54KO54SU54WZ54eV54y/57iB6Im26IuR6JaX6YGg6Ymb6bSb5aGp5pa85rGa55Sl5Ye55aSu5aWl5b6A5b+c5oq85pe65qiq5qyn5q60546L57+B6KWW6bSs6bSO6buE5bKh5rKW6I275YSE5bGL5oa26IeG5qG254mh5LmZ5L+65Y245oGp5rip56mP6Z+z5LiL5YyW5Luu5L2V5Ly95L6h5L2z5Yqg5Y+v5ZiJ5aSP5auB5a625a+h56eR5pqH5p6c5p625q2M5rKz54Gr54+C56aN56a+56i8566H6Iqx6Iub6IyE6I236I+v6I+T6J2m6Kqy5Zip6LKo6L+m6YGO6Zye6JqK5L+E5bOo5oiR54mZ55S76Iel6Iq96Ju+6LOA6ZuF6aST6aeV5LuL5Lya6Kej5Zue5aGK5aOK5bu75b+r5oCq5oKU5oGi5oeQ5oiS5ouQ5pS5XCJdLFtcIjhhNDBcIixcIumtgeaZpuaisOa1t+eBsOeVjOeahue1teiKpeifuemWi+majuiyneWHseWKvuWkluWSs+Wus+W0luaFqOamgua2r+eijeiTi+ihl+ipsumOp+mquOa1rOmmqOibmeWeo+afv+ibjumIjuWKg+Wah+WQhOW7k+aLoeaSueagvOaguOauu+eNsueiuuepq+immuinkui1q+i8g+mDremWo+malOmdqeWtpuWys+alvemhjemhjuaOm+esoOaoq1wiXSxbXCI4YTgwXCIsXCLmqb/morbpsI3mvZ/libLllp3mgbDmi6zmtLvmuIfmu5HokZvopJDovYTkuJTpsLnlj7bmpJvmqLrpnoTmoKrlhZznq4PokrLph5zpjozlmZvptKjmoKLojIXokLHnsqXliIjoi4Xnk6bkub7kvoPlhqDlr5LliIrli5jli6flt7vllprloKrlp6blrozlrpjlr5vlubLlubnmgqPmhJ/mhaPmhr7mj5vmlaLmn5HmoZPmo7rmrL7mrZPmsZfmvKLmvpfmvYXnkrDnlJjnm6PnnIvnq7/nrqHnsKHnt6nnvLbnv7Dogp3oiabojp7oprPoq4zosqvpgoTpkZHplpPplpHplqLpmaXpn5PppKjoiJjkuLjlkKvlsrjlt4znjqnnmYznnLzlsqnnv6votIvpm4HpoJHpoZTpoZjkvIHkvI7ljbHllpzlmajln7rlpYflrInlr4TlspDluIzlub7lv4zmj67mnLrml5fml6LmnJ/mo4vmo4RcIl0sW1wiOGI0MFwiLFwi5qmf5biw5q+F5rCX5rG955W/56WI5a2j56iA57SA5b696KaP6KiY6LK06LW36LuM6Lyd6aOi6aiO6ay85LqA5YG95YSA5aaT5a6c5oiv5oqA5pOs5qy654qg55aR56WH576p6J+76Kq86K2w5o6s6I+K6Z6g5ZCJ5ZCD5Zar5qGU5qmY6Kmw56Cn5p216buN5Y205a6i6ISa6JmQ6YCG5LiY5LmF5LuH5LyR5Y+K5ZC45a6u5byT5oCl5pWRXCJdLFtcIjhiODBcIixcIuacveaxguaxsuazo+eBuOeQg+eptueqruesiOe0muezvue1puaXp+eJm+WOu+WxheW3qOaLkuaLoOaMmea4oOiZmuiosei3nemLuOa8geempumtmuS6qOS6q+S6rOS+m+S+oOWDkeWFh+ertuWFseWHtuWNlOWMoeWNv+WPq+WWrOWig+WzoeW8t+W9iuaAr+aBkOaBreaMn+aVmeapi+azgeeLgueLreefr+iDuOiEheiIiOiVjumDt+mPoemfv+mll+mpmuS7sOWHneWwreaagealreWxgOabsualteeOieahkOeygeWDheWLpOWdh+W3vumMpuaWpOaso+asveeQtOemgeemveeti+e3iuiKueiPjOihv+iln+isuei/kemHkeWQn+mKgOS5neWAtuWPpeWMuueLl+eOluefqeiLpui6r+mnhumniOmnkuWFt+aEmuiZnuWWsOepuuWBtuWvk+mBh+maheS4suarm+mHp+WxkeWxiFwiXSxbXCI4YzQwXCIsXCLmjpjnqp/mspPpnbTovaHnqqrnhorpmojnsoLmoJfnubDmoZHpjazli7LlkJvolqvoqJPnvqTou43pg6HljabooojnpYHkv4Llgr7liJHlhYTllZPlnK3nj6rlnovlpZHlvaLlvoTmgbXmhbbmhafmhqnmjrLmkLrmlazmma/moYLmuJPnlabnqL3ns7vntYzntpnnuYvnvavojI7ojYrom43oqIjoqaPorabou73poJrpto/oirjov47pr6hcIl0sW1wiOGM4MFwiLFwi5YqH5oif5pKD5r+A6ZqZ5qGB5YKR5qyg5rG65r2U56m057WQ6KGA6Kij5pyI5Lu25YC55YCm5YGl5YW85Yi45Ymj5Zan5ZyP5aCF5auM5bu65oay5oe45ouz5o2y5qSc5qip54m954qs54yu56CU56Gv57W555yM6IKp6KaL6KyZ6LOi6LuS6YGj6Y216Zm66aGV6aiT6bm45YWD5Y6f5Y6z5bm75bym5rib5rqQ546E54++57WD6Ii36KiA6Ku66ZmQ5LmO5YCL5Y+k5ZG85Zu65aeR5a2k5bex5bqr5byn5oi45pWF5p6v5rmW54uQ57OK6KK06IKh6IOh6I+w6JmO6KqH6Leo6Yi36ZuH6aGn6byT5LqU5LqS5LyN5Y2I5ZGJ5ZC+5aiv5b6M5b6h5oKf5qKn5qqO55Ga56KB6Kqe6Kqk6K236YaQ5Lme6a+J5Lqk5L285L6v5YCZ5YCW5YWJ5YWs5Yqf5Yq55Yu+5Y6a5Y+j5ZCRXCJdLFtcIjhkNDBcIixcIuWQjuWWieWdkeWeouWlveWtlOWtneWuj+W3peW3p+W3t+W5uOW6g+W6muW6t+W8mOaBkuaFjOaKl+aLmOaOp+aUu+aYguaZg+abtOadreagoeail+ani+axn+a0qua1qea4r+a6neeUsueah+ehrOeov+ezoOe0hee0mOe1nue2seiAleiAg+iCr+iCseiFlOiGj+iIquiNkuihjOihoeism+iyouizvOmDiumFtemJseegv+mLvOmWpOmZjVwiXSxbXCI4ZDgwXCIsXCLpoIXpppnpq5jptLvliZvliqvlj7flkIjlo5Xmi7fmv6DosarovZ/purnlhYvliLvlkYrlm73nqYDphbfptaDpu5LnjYTmvInohbDnlJHlv73mg5rpqqjni5vovrzmraTpoIPku4rlm7DlnaTlor7lqZrmgajmh4fmmI/mmIbmoLnmorHmt7fnl5XntLroia7prYLkupvkvZDlj4nllIblta/lt6blt67mn7vmspnnkbPnoILoqZDpjpboo5/lnZDluqfmjKvlgrXlgqzlho3mnIDlk4nloZ7lprvlrrDlvanmiY3mjqHmoL3mrbPmuIjngb3ph4fnioDnoJXnoKbnpa3mlo7ntLDoj5zoo4HovInpmpvliaTlnKjmnZDnvarosqHlhrTlnYLpmKrloLrmporogrTlkrLltI7ln7znopXpt7rkvZzliYrlkovmkL7mmKjmnJTmn7XnqoTnrZbntKLpjK/moZzprq3nrLnljJnlhorliLdcIl0sW1wiOGU0MFwiLFwi5a+f5ou25pKu5pOm5pyt5q666Jap6ZuR55qQ6a+W5o2M6YyG6a6r55q/5pmS5LiJ5YKY5Y+C5bGx5oOo5pKS5pWj5qGf54em54+K55Sj566X57qC6JqV6K6D6LOb6YW46aSQ5pas5pqr5q6L5LuV5LuU5Ly65L2/5Yi65Y+45Y+y5Zej5Zub5aOr5aeL5aeJ5ae/5a2Q5bGN5biC5bir5b+X5oCd5oyH5pSv5a2c5pav5pa95peo5p6d5q2iXCJdLFtcIjhlODBcIixcIuatu+awj+eNheelieengeezuOe0mee0q+iCouiEguiHs+imluipnuipqeippuiqjOirruizh+iznOmbjOmjvOatr+S6i+S8vOS+jeWFkOWtl+WvuuaFiOaMgeaZguasoea7i+ayu+eIvueSveeXlOejgeekuuiAjOiAs+iHquiSlOi+nuaxkOm5v+W8j+itmOm0q+eruui7uOWujembq+S4g+WPseWft+WkseWrieWupOaCiea5v+a8hueWvuizquWun+iUgOevoOWBsuaftOiKneWxoeiViue4nuiIjuWGmeWwhOaNqOi1puaWnOeFruekvue0l+iAheisnei7iumBruibh+mCquWAn+WLuuWwuuadk+eBvOeItemFjOmHiOmMq+iLpeWvguW8seaDueS4u+WPluWuiOaJi+acseauiueLqeePoOeoruiFq+i2o+mFkummluWEkuWPl+WRquWvv+aOiOaouee2rOmcgOWbmuWPjuWRqFwiXSxbXCI4ZjQwXCIsXCLlrpflsLHlt57kv67mhIHmi77mtLLnp4Dnp4vntYLnuY3nv5Loh63oiJ/okpDooYbopbLorpDoubTovK/pgLHphYvphazpm4bphpzku4DkvY/lhYXljYHlvpPmiI7mn5TmsYHmuIvnjaPnuKbph43pioPlj5TlpJnlrr/mt5HnpZ3nuK7nspvlob7nhp/lh7rooZPov7Dkv4rls7vmmKXnnqznq6PoiJzpp7/lh4blvqrml6zmpa/mronmt7NcIl0sW1wiOGY4MFwiLFwi5rqW5r2k55u+57SU5beh6YG16YaH6aCG5Yem5Yid5omA5pqR5puZ5ria5bq257eS572y5pu46Jav6Je36Ku45Yqp5Y+Z5aWz5bqP5b6Q5oGV6Yuk6Zmk5YK35YSf5Yud5Yyg5Y2H5Y+s5ZOo5ZWG5ZSx5ZiX5aWo5aa+5ai85a615bCG5bCP5bCR5bCa5bqE5bqK5bug5b2w5om/5oqE5oub5o6M5o235piH5piM5pit5pm25p2+5qKi5qif5qi15rK85raI5riJ5rmY54S854Sm54Wn55eH55yB56Gd56SB56Wl56ew56ug56yR57Kn57S56IKW6I+W6JKL6JWJ6KGd6KOz6Kif6Ki86KmU6Kmz6LGh6LOe6Yak6Ymm6Y2+6ZCY6Zqc6Z6Y5LiK5LiI5Lie5LmX5YaX5Ymw5Z+O5aC05aOM5ayi5bi45oOF5pO+5p2h5p2W5rWE54q255Wz56mj6JK46K2y6Ya46Yyg5Zix5Z+06aO+XCJdLFtcIjkwNDBcIixcIuaLreakjeaulueHree5lOiBt+iJsuinpumjn+idlei+seWwu+S8uOS/oeS+teWUh+WooOWvneWvqeW/g+aFjuaMr+aWsOaZi+ajruamm+a1uOa3seeUs+eWueecn+elnuenpue0s+iHo+iKr+iWquimquiouui6q+i+m+mAsumHnemch+S6uuS7geWIg+WhteWjrOWwi+eUmuWwveiFjuioiui/hemZo+mdreespeirj+mgiOmFouWbs+WOqFwiXSxbXCI5MDgwXCIsXCLpgJflkLnlnoLluKXmjqjmsLTngornnaHnsovnv6DoobDpgYLphZTpjJDpjJjpmo/nkZ7pq4TltIfltanmlbDmnqLotqjpm5vmja7mnYnmpJnoj4XpoJfpm4Doo77mvoTmkbrlr7jkuJbngKznlZ3mmK/lh4TliLbli6Llp5PlvoHmgKfmiJDmlL/mlbTmmJ/mmbTmo7LmoJbmraPmuIXnibLnlJ/nm5vnsr7ogZblo7Doo73opb/oqqDoqpPoq4vpgJ3phpLpnZLpnZnmlonnqI7ohIbpmrvluK3mg5zmiJrmlqXmmJTmnpDnn7PnqY3nsY3nuL7ohIrosqzotaTot6HouZ/noqnliIfmi5nmjqXmkYLmipjoqK3nqoPnr4Doqqzpm6rntbboiIzonYnku5nlhYjljYPljaDlrqPlsILlsJblt53miKbmiYfmkrDmoJPmoLTms4nmtYXmtJfmn5PmvZznhY7nhb3ml4vnqb/nrq3nt5pcIl0sW1wiOTE0MFwiLFwi57mK576o6IW66Iib6Ii56Jam6Kmu6LOO6Le16YG46YG36Yqt6YqR6ZaD6a6u5YmN5ZaE5ry454S25YWo56aF57mV6Iaz57OO5ZmM5aGR5bKo5o6q5pu+5pu95qWa54uZ55aP55aO56SO56WW56ef57KX57Sg57WE6JiH6Ki06Zi76YGh6byg5YOn5Ym15Y+M5Y+i5YCJ5Zaq5aOu5aWP54i95a6L5bGk5Yyd5oOj5oOz5o2c5o6D5oy/5o67XCJdLFtcIjkxODBcIixcIuaTjeaXqeabueW3o+anjeanvea8leeHpeS6ieeXqeebuOeqk+ezn+e3j+e2nOiBoeiNieiNmOiRrOiSvOiXu+ijhei1sOmAgemBremOl+mcnOmokuWDj+Wil+aGjuiHk+iUtei0iOmAoOS/g+WBtOWJh+WNs+aBr+aNieadn+a4rOi2s+mAn+S/l+WxnuiziuaXj+e2muWNkuiiluWFtuaPg+WtmOWtq+WwiuaQjeadkemBnOS7luWkmuWkquaxsOipkeWUvuWgleWmpeaDsOaJk+afgeiIteallemZgOmnhOmoqOS9k+WghuWvvuiAkOWyseW4r+W+heaAoOaFi+aItOabv+azsOa7nuiDjuiFv+iLlOiii+iyuOmAgOmArumaium7m+mvm+S7o+WPsOWkp+esrOmGjemhjOm3uea7neeAp+WNk+WVhOWuheaJmOaKnuaLk+ayoua/r+eQouiol+mQuOa/geirvuiMuOWHp+ibuOWPqlwiXSxbXCI5MjQwXCIsXCLlj6nkvYbpgZTovrDlparohLHlt73nq6rovr/mo5rosLfni7jpsYjmqL3oqrDkuLnljZjlmIblnabmi4XmjqLml6bmrY7mt6HmuZvngq3nn63nq6/nrqrntrvogL3og4bom4voqpXpjZvlm6Plo4flvL7mlq3mmpbmqoDmrrXnlLfoq4flgKTnn6XlnLDlvJvmgaXmmbrmsaDnl7TnqJrnva7oh7TonJjpgYXpprPnr4nnlZznq7nnrZHok4RcIl0sW1wiOTI4MFwiLFwi6YCQ56ep56qS6Iy25auh552A5Lit5Luy5a6Z5b+g5oq95pi85p+x5rOo6Jmr6KG36Ki76YWO6Yuz6aeQ5qiX54Cm54yq6Iun6JGX6LKv5LiB5YWG5YeL5ZaL5a+15biW5biz5bqB5byU5by15b2r5b605oey5oyR5pqi5pyd5r2u54mS55S655y66IG06IS56IW46J226Kq/6Kuc6LaF6Lez6Yqa6ZW36aCC6bOl5YuF5o2X55u05pyV5rKI54+N6LOD6Y6u6Zmz5rSl5aKc5qSO5qeM6L+96Y6a55eb6YCa5aGa5qCC5o605qe75L2D5rys5p+Y6L676JSm57a06Y2U5qS/5r2w5Z2q5aO35ays57Ss54iq5ZCK6Yej6ba05Lqt5L2O5YGc5YG15YmD6LKe5ZGI5aCk5a6a5bid5bqV5bqt5bu35byf5oKM5oq15oy65o+Q5qKv5rGA56KH56aO56iL57eg6ImH6KiC6Kum6LmE6YCTXCJdLFtcIjkzNDBcIixcIumCuOmEremHmOm8juazpeaRmOaTouaVtea7tOeahOesm+mBqemPkea6uuWTsuW+ueaSpOi9jei/remJhOWFuOWhq+WkqeWxleW6l+a3u+e6j+eUnOiyvOi7oumhm+eCueS8neauv+a+seeUsOmbu+WFjuWQkOWgteWhl+WmrOWxoOW+kuaWl+adnOa4oeeZu+iPn+izremAlOmDvemNjeegpeeguuWKquW6puWcn+WltOaAkuWAkuWFmuWGrFwiXSxbXCI5MzgwXCIsXCLlh43liIDllJDloZTloZjlpZflrpXls7bltovmgrzmipXmkK3mnbHmoYPmorzmo5/nm5fmt5jmua/mtpvnga/nh4jlvZPnl5jnpbfnrYnnrZTnrZLns5bntbHliLDokaPolanol6ToqI7orITosYbouI/pgIPpgI/pkJnpmbbpoK3pqLDpl5jlg43li5XlkIzloILlsI7mhqfmkp7mtJ7nnrPnq6Xog7TokITpgZPpioXls6DptIfljL/lvpflvrPmtpznibnnnaPnpr/nr6Tmr5Lni6zoqq3moIPmqaHlh7jnqoHmpLTlsYrps7boi6vlr4XphYnngJ7lmbjlsa/mg4fmlabmsozosZrpgYHpoJPlkZHmm4fpiI3lpYjpgqPlhoXkuY3lh6rolpnorI7ngZjmjbrpjYvmpaLpprTnuITnlbfljZfmpaDou5/pm6PmsZ3kuozlsLzlvJDov6nljILos5Hogonombnlu7/ml6XkubPlhaVcIl0sW1wiOTQ0MFwiLFwi5aaC5bC/6Z+u5Lu75aaK5b+N6KqN5r+h56aw56Wi5a+n6JGx54yr54ax5bm05b+15o275pKa54eD57KY5LmD5bu85LmL5Z+c5Zqi5oKp5r+D57SN6IO96ISz6Ia/6L6y6KaX6Jqk5be05oqK5pKt6KaH5p235rOi5rS+55C256C05amG57216Iqt6aas5L+z5buD5oud5o6S5pWX5p2v55uD54mM6IOM6IK66Lyp6YWN5YCN5Z+55aqS5qKFXCJdLFtcIjk0ODBcIixcIuals+eFpOeLveiyt+WjsuizoOmZqumAmeidv+enpOefp+iQqeS8r+WJpeWNmuaLjeafj+aziueZveeulOeyleiItuiWhOi/q+abnea8oOeIhue4m+iOq+mngem6puWHveeuseehsueuuOiCh+etiOarqOW5oeiCjOeVkeeVoOWFq+mJoua6jOeZuumGl+mrquS8kOe9sOaKnOetj+mWpemzqeWZuuWhmeibpOmavOS8tOWIpOWNiuWPjeWPm+W4huaQrOaWkeadv+awvuaxjueJiOeKr+ePreeVlOe5geiIrOiXqeiyqeevhOmHhueFqemgkumjr+aMveaZqeeVquebpOejkOiVg+ibruWMquWNkeWQpuWmg+W6h+W9vOaCsuaJieaJueaKq+aWkOavlOazjOeWsuearueikeenmOe3i+e9t+iCpeiiq+iqueiyu+mBv+mdnumjm+aoi+ewuOWCmeWwvuW+ruaeh+avmOeQteeciee+jlwiXSxbXCI5NTQwXCIsXCLpvLvmn4rnqJfljLnnlovpq63lvabohp3oj7HogpjlvLzlv4XnlaLnrYbpgLzmoaflp6vlqpvntJDnmb7orKzkv7XlvarmqJnmsLfmvILnk6LnpajooajoqZXosbnlu5/mj4/nl4Xnp5Loi5fpjKjpi7Lokpzom63psK3lk4HlvazmlozmtZzngJXosqfos5PpoLvmlY/nk7bkuI3ku5jln6DlpKvlqablr4zlhqjluIPlupzmgJbmibbmlbdcIl0sW1wiOTU4MFwiLFwi5pan5pmu5rWu54i256ym6IWQ6Iaa6IqZ6K2c6LKg6LOm6LW06Zic6ZmE5L6u5pKr5q2m6Iie6JGh6JWq6YOo5bCB5qWT6aKo6JG66JWX5LyP5Ymv5b6p5bmF5pyN56aP6IW56KSH6KaG5re15byX5omV5rK45LuP54mp6a6S5YiG5ZC75Zm05aKz5oak5omu54Sa5aWu57KJ57Oe57Sb6Zuw5paH6IGe5LiZ5L215YW15aGA5bmj5bmz5byK5p+E5Lim6JS96ZaJ6Zmb57Gz6aCB5YO75aOB55mW56Kn5Yil556l6JSR566G5YGP5aSJ54mH56+H57eo6L666L+U6YGN5L6/5YuJ5aip5byB6Z6t5L+d6IiX6Yuq5ZyD5o2V5q2p55Sr6KOc6LyU56mC5Yuf5aKT5oWV5oiK5pqu5q+N57C/6I+p5YCj5L+45YyF5ZGG5aCx5aWJ5a6d5bOw5bOv5bSp5bqW5oqx5o2n5pS+5pa55pyLXCJdLFtcIjk2NDBcIixcIuazleazoeeDueegsue4q+iDnuiKs+iQjOiTrOicguikkuioquixiumCpumLkumjvemzs+m1rOS5j+S6oeWCjeWJluWdiuWmqOW4veW/mOW/meaIv+aatOacm+afkOajkuWGkue0oeiCquiGqOisgOiyjOiyv+mJvumYsuWQoOmgrOWMl+WDleWNnOWiqOaSsuactOeJp+edpuephumHpuWLg+ayoeauhuWggOW5jOWllOacrOe/u+WHoeebhlwiXSxbXCI5NjgwXCIsXCLmkanno6jprZTpurvln4vlprnmmKfmnprmr47lk6nmp5nluZXohpzmnpXprqrmn77psZLmoZ3kuqbkv6Plj4jmirnmnKvmsqvov4Tkvq3nua3pur/kuIfmhaLmuoDmvKvolJPlkbPmnKrprYXlt7PnrpXlsqzlr4bonJzmuYrok5HnqJTohIjlppnnso3msJHnnKDli5nlpKLnhKHniZ/nn5vpnKfptaHmpIvlqb/lqJjlhqXlkI3lkb3mmI7nm5/ov7fpipjps7Tlp6rniZ3mu4XlhY3mo4nntr/nt6zpnaLpurrmkbjmqKHojILlpoTlrZ/mr5vnjJvnm7LntrLogJfokpnlhLLmnKjpu5nnm67mnaLli7/ppIXlsKTmiLvnsb7osrDllY/mgrbntIvploDljIHkuZ/lhrblpJzniLrogLbph47lvKXnn6LljoTlvbnntITolqzoqLPouo3pnZbmn7Polq7pkZPmhInmhIjmsrnnmZJcIl0sW1wiOTc0MFwiLFwi6Kut6Ly45ZSv5L2R5YSq5YuH5Y+L5a6l5bm95oKg5oaC5o+W5pyJ5p+a5rmn5raM54y254y355Sx56WQ6KOV6KqY6YGK6YKR6YO16ZuE6J6N5aSV5LqI5L2Z5LiO6KqJ6Ly/6aCQ5YKt5bm85aaW5a655bq45o+a5o+65pOB5puc5qWK5qeY5rSL5rq254aU55So56qv576K6ICA6JGJ6JOJ6KaB6Kyh6LiK6YGl6Zm96aSK5oW+5oqR5qyyXCJdLFtcIjk3ODBcIixcIuayg+a1tOe/jOe/vOa3gOe+heieuuijuOadpeiOsemgvOmbt+a0m+e1oeiQvemFquS5seWNteW1kOashOa/q+iXjeiYreimp+WIqeWQj+WxpeadjuaiqOeQhueSg+eXouijj+ijoemHjOmboumZuOW+i+eOh+eri+iRjuaOoOeVpeWKiea1gea6nOeQieeVmeehq+eykumahuernOm+jeS+tuaFruaXheiZnOS6huS6ruWDmuS4oeWHjOWvruaWmeaigea2vOeMn+eZgueereeonOezp+iJr+irkumBvOmHj+mZtemgmOWKm+e3keWAq+WOmOael+a3i+eHkOeQs+iHqOi8qumao+mxl+m6n+eRoOWhgea2mee0r+mhnuS7pOS8tuS+i+WGt+WKseW2uuaAnOeOsuekvOiLk+mItOmat+mbtumcium6l+m9ouaapuattOWIl+WKo+eDiOijguW7ieaBi+aGkOa8o+eFieewvue3tOiBr1wiXSxbXCI5ODQwXCIsXCLok67pgKPpjKzlkYLpra/mq5Pngonos4Lot6/pnLLlirTlqYHlu4rlvITmnJfmpbzmppTmtarmvI/niaLni7znr63ogIHogb7onYvpg47lha3pupPnpoTogovpjLLoq5blgK3lkozoqbHmraros4TohIfmg5HmnqDpt7LkupnkupjpsJDoqavol4HolajmpIDmub7nopfohZVcIl0sW1wiOTg5ZlwiLFwi5byM5LiQ5LiV5Liq5Lix5Li25Li85Li/5LmC5LmW5LmY5LqC5LqF6LGr5LqK6IiS5byN5LqO5Lqe5Lqf5Lqg5Lqi5Lqw5Lqz5Lq25LuO5LuN5LuE5LuG5LuC5LuX5Lue5Lut5Luf5Lu35LyJ5L2a5Lyw5L2b5L2d5L2X5L2H5L225L6I5L6P5L6Y5L275L2p5L2w5L6R5L2v5L6G5L6W5YSY5L+U5L+f5L+O5L+Y5L+b5L+R5L+a5L+Q5L+k5L+l5YCa5YCo5YCU5YCq5YCl5YCF5Lyc5L+25YCh5YCp5YCs5L++5L+v5YCR5YCG5YGD5YGH5pyD5YGV5YGQ5YGI5YGa5YGW5YGs5YG45YKA5YKa5YKF5YK05YKyXCJdLFtcIjk5NDBcIixcIuWDieWDiuWCs+WDguWDluWDnuWDpeWDreWDo+WDruWDueWDteWEieWEgeWEguWEluWEleWElOWEmuWEoeWEuuWEt+WEvOWEu+WEv+WFgOWFkuWFjOWFlOWFoueruOWFqeWFquWFruWGgOWGguWbmOWGjOWGieWGj+WGkeWGk+WGleWGluWGpOWGpuWGouWGqeWGquWGq+WGs+WGseWGsuWGsOWGteWGveWHheWHieWHm+WHoOiZleWHqeWHrVwiXSxbXCI5OTgwXCIsXCLlh7Dlh7Xlh77liITliIvliJTliI7liKfliKrliK7liLPliLnliY/liYTliYvliYzliZ7liZTliarlibTlianlibPlib/lib3lio3lipTlipLlibHliojlipHovqjovqfliqzliq3lirzlirXli4Hli43li5fli57li6Pli6bpo63li6Dli7Pli7Xli7jli7nljIbljIjnlLjljI3ljJDljI/ljJXljJrljKPljK/ljLHljLPljLjljYDljYbljYXkuJfljYnljY3lh5bljZ7ljanlja7lpJjljbvljbfljoLljpbljqDljqbljqXljq7ljrDljrblj4PnsJLpm5nlj5/mm7znh67lj67lj6jlj63lj7rlkIHlkL3lkYDlkKzlkK3lkLzlkK7lkLblkKnlkJ3lkY7lko/lkbXlko7lkZ/lkbHlkbflkbDlkpLlkbvlkoDlkbblkoTlkpDlkoblk4flkqLlkrjlkqXlkqzlk4Tlk4jlkqhcIl0sW1wiOWE0MFwiLFwi5ZKr5ZOC5ZKk5ZK+5ZK85ZOY5ZOl5ZOm5ZSP5ZSU5ZO95ZOu5ZOt5ZO65ZOi5ZS55ZWA5ZWj5ZWM5ZSu5ZWc5ZWF5ZWW5ZWX5ZS45ZSz5ZWd5ZaZ5ZaA5ZKv5ZaK5Zaf5ZW75ZW+5ZaY5Zae5Zau5ZW85ZaD5Zap5ZaH5Zao5Zea5ZeF5Zef5ZeE5Zec5Zek5ZeU5ZiU5Ze35ZiW5Ze+5Ze95Zib5Ze55ZmO5ZmQ54ef5Zi05Zi25Ziy5Zi4XCJdLFtcIjlhODBcIixcIuWZq+WZpOWYr+WZrOWZquWahuWagOWaiuWaoOWalOWaj+WapeWaruWatuWatOWbguWavOWbgeWbg+WbgOWbiOWbjuWbkeWbk+Wbl+WbruWbueWcgOWbv+WchOWcieWciOWci+WcjeWck+WcmOWcluWXh+WcnOWcpuWct+WcuOWdjuWcu+WdgOWdj+WdqeWfgOWeiOWdoeWdv+WeieWek+WeoOWes+WepOWequWesOWfg+WfhuWflOWfkuWfk+WgiuWfluWfo+Wgi+WgmeWgneWhsuWgoeWhouWhi+WhsOavgOWhkuWgveWhueWiheWiueWin+Wiq+WiuuWjnuWiu+WiuOWiruWjheWjk+WjkeWjl+WjmeWjmOWjpeWjnOWjpOWjn+Wjr+WjuuWjueWju+WjvOWjveWkguWkiuWkkOWkm+aipuWkpeWkrOWkreWksuWkuOWkvuerkuWlleWlkOWljuWlmuWlmOWlouWloOWlp+WlrOWlqVwiXSxbXCI5YjQwXCIsXCLlpbjlpoHlpp3kvZ7kvqvlpqPlprLlp4blp6jlp5zlpo3lp5nlp5rlqKXlqJ/lqJHlqJzlqInlqJrlqYDlqazlqYnlqLXlqLblqaLlqarlqprlqrzlqr7lq4vlq4Llqr3lq6Plq5flq6blq6nlq5blq7rlq7vlrIzlrIvlrJblrLLlq5DlrKrlrLblrL7lrYPlrYXlrYDlrZHlrZXlrZrlrZvlraXlranlrbDlrbPlrbXlrbjmlojlrbrlroBcIl0sW1wiOWI4MFwiLFwi5a6D5a6m5a645a+D5a+H5a+J5a+U5a+Q5a+k5a+m5a+i5a+e5a+l5a+r5a+w5a+25a+z5bCF5bCH5bCI5bCN5bCT5bCg5bCi5bCo5bC45bC55bGB5bGG5bGO5bGT5bGQ5bGP5a2x5bGs5bGu5Lmi5bG25bG55bKM5bKR5bKU5aab5bKr5bK75bK25bK85bK35bOF5bK+5bOH5bOZ5bOp5bO95bO65bOt5baM5bOq5bSL5bSV5bSX5bWc5bSf5bSb5bSR5bSU5bSi5bSa5bSZ5bSY5bWM5bWS5bWO5bWL5bWs5bWz5bW25baH5baE5baC5bai5bad5bas5bau5ba95baQ5ba35ba85beJ5beN5beT5beS5beW5beb5ber5bey5be15biL5bia5biZ5biR5bib5bi25bi35bmE5bmD5bmA5bmO5bmX5bmU5bmf5bmi5bmk5bmH5bm15bm25bm66bq85bm/5bqg5buB5buC5buI5buQ5buPXCJdLFtcIjljNDBcIixcIuW7luW7o+W7neW7muW7m+W7ouW7oeW7qOW7qeW7rOW7seW7s+W7sOW7tOW7uOW7vuW8g+W8ieW9neW9nOW8i+W8keW8luW8qeW8reW8uOW9geW9iOW9jOW9juW8r+W9keW9luW9l+W9meW9oeW9reW9s+W9t+W+g+W+guW9v+W+iuW+iOW+keW+h+W+nuW+meW+mOW+oOW+qOW+reW+vOW/luW/u+W/pOW/uOW/seW/neaCs+W/v+aAoeaBoFwiXSxbXCI5YzgwXCIsXCLmgJnmgJDmgKnmgI7mgLHmgJvmgJXmgKvmgKbmgI/mgLrmgZrmgYHmgarmgbfmgZ/mgYrmgYbmgY3mgaPmgYPmgaTmgYLmgazmgavmgZnmgoHmgo3mg6fmgoPmgprmgoTmgpvmgpbmgpfmgpLmgqfmgovmg6Hmgrjmg6Dmg5PmgrTlv7Dmgr3mg4bmgrXmg5jmhY3mhJXmhIbmg7bmg7fmhIDmg7Tmg7rmhIPmhKHmg7vmg7HmhI3mhI7mhYfmhL7mhKjmhKfmhYrmhL/mhLzmhKzmhLTmhL3mhYLmhYTmhbPmhbfmhZjmhZnmhZrmhavmhbTmha/mhaXmhbHmhZ/mhZ3mhZPmhbXmhpnmhpbmhofmhqzmhpTmhprmhormhpHmhqvmhq7mh4zmh4rmh4nmh7fmh4jmh4Pmh4bmhrrmh4vnvbnmh43mh6bmh6Pmh7bmh7rmh7Tmh7/mh73mh7zmh77miIDmiIjmiInmiI3miIzmiJTmiJtcIl0sW1wiOWQ0MFwiLFwi5oie5oih5oiq5oiu5oiw5oiy5oiz5omB5omO5ome5omj5omb5omg5omo5om85oqC5oqJ5om+5oqS5oqT5oqW5ouU5oqD5oqU5ouX5ouR5oq75ouP5ou/5ouG5pOU5ouI5ouc5ouM5ouK5ouC5ouH5oqb5ouJ5oyM5ouu5oux5oyn5oyC5oyI5ouv5ou15o2Q5oy+5o2N5pCc5o2P5o6W5o6O5o6A5o6r5o225o6j5o6P5o6J5o6f5o615o2rXCJdLFtcIjlkODBcIixcIuaNqeaOvuaPqeaPgOaPhuaPo+aPieaPkuaPtuaPhOaQluaQtOaQhuaQk+aQpuaQtuaUneaQl+aQqOaQj+aRp+aRr+aRtuaRjuaUquaSleaSk+aSpeaSqeaSiOaSvOaTmuaTkuaTheaTh+aSu+aTmOaTguaTseaTp+iIieaToOaToeaKrOaTo+aTr+aUrOaTtuaTtOaTsuaTuuaUgOaTveaUmOaUnOaUheaUpOaUo+aUq+aUtOaUteaUt+aUtuaUuOeVi+aViOaVluaVleaVjeaVmOaVnuaVneaVsuaVuOaWguaWg+iuiuaWm+aWn+aWq+aWt+aXg+aXhuaXgeaXhOaXjOaXkuaXm+aXmeaXoOaXoeaXseadsuaYiuaYg+aXu+ads+aYteaYtuaYtOaYnOaZj+aZhOaZieaZgeaZnuaZneaZpOaZp+aZqOaZn+aZouaZsOaag+aaiOaajuaaieaahOaamOaaneabgeaaueabieaavuaavFwiXSxbXCI5ZTQwXCIsXCLmm4Tmmrjmm5bmm5rmm6DmmL/mm6bmm6nmm7Dmm7Xmm7fmnI/mnJbmnJ7mnKbmnKfpnLjmnK7mnL/mnLbmnYHmnLjmnLfmnYbmnZ7mnaDmnZnmnaPmnaTmnonmnbDmnqnmnbzmnarmnozmnovmnqbmnqHmnoXmnrfmn6/mnrTmn6zmnrPmn6nmnrjmn6Tmn57mn53mn6Lmn67mnrnmn47mn4bmn6fmqpzmoJ7moYbmoKnmoYDmoY3moLLmoY5cIl0sW1wiOWU4MFwiLFwi5qKz5qCr5qGZ5qGj5qG35qG/5qKf5qKP5qKt5qKU5qKd5qKb5qKD5qqu5qK55qG05qK15qKg5qK65qSP5qKN5qG+5qSB5qOK5qSI5qOY5qSi5qSm5qOh5qSM5qON5qOU5qOn5qOV5qS25qSS5qSE5qOX5qOj5qSl5qO55qOg5qOv5qSo5qSq5qSa5qSj5qSh5qOG5qW55qW35qWc5qW45qWr5qWU5qW+5qWu5qS55qW05qS95qWZ5qSw5qWh5qWe5qWd5qaB5qWq5qay5qau5qeQ5qa/5qeB5qeT5qa+5qeO5a+o5qeK5qed5qa75qeD5qan5qiu5qaR5qag5qac5qaV5qa05qee5qeo5qiC5qib5qe/5qyK5qe55qey5qen5qiF5qax5qie5qet5qiU5qer5qiK5qiS5quB5qij5qiT5qmE5qiM5qmy5qi25qm45qmH5qmi5qmZ5qmm5qmI5qi45qii5qqQ5qqN5qqg5qqE5qqi5qqjXCJdLFtcIjlmNDBcIixcIuaql+iYl+aqu+arg+arguaquOaqs+aqrOarnuarkearn+aqquarmuarquaru+asheiYluaruuaskuaslumsseasn+asuOast+ebnOasuemjruath+atg+atieatkOatmeatlOatm+atn+atoeatuOatueatv+augOauhOaug+aujeaumOauleaunuaupOauquauq+aur+ausuauseaus+aut+auvOavhuavi+avk+avn+avrOavq+avs+avr1wiXSxbXCI5ZjgwXCIsXCLpur7msIjmsJPmsJTmsJvmsKTmsKPmsZ7msZXmsaLmsarmsoLmso3msprmsoHmspvmsb7msajmsbPmspLmspDms4Tms7Hms5Pmsr3ms5fms4Xms53msq7msrHmsr7msrrms5vms6/ms5nms6rmtJ/ooY3mtLbmtKvmtL3mtLjmtJnmtLXmtLPmtJLmtIzmtaPmtpPmtaTmtZrmtbnmtZnmto7mtpXmv6TmtoXmt7nmuJXmuIrmtrXmt4fmt6bmtrjmt4bmt6zmt57mt4zmt6jmt5Lmt4Xmt7rmt5nmt6Tmt5Xmt6rmt67muK3mua7muK7muJnmubLmuZ/muL7muKPmuavmuKvmubbmuY3muJ/muYPmuLrmuY7muKTmu7/muJ3muLjmuoLmuqrmupjmu4nmurfmu5Pmur3muq/mu4TmurLmu5Tmu5Xmuo/muqXmu4Lmup/mvYHmvJHngYzmu6zmu7jmu77mvL/mu7LmvLHmu6/mvLLmu4xcIl0sW1wiZTA0MFwiLFwi5ry+5ryT5ru35r6G5r265r245r6B5r6A5r2v5r2b5r+z5r2t5r6C5r285r2Y5r6O5r6R5r+C5r2m5r6z5r6j5r6h5r6k5r655r+G5r6q5r+f5r+V5r+s5r+U5r+Y5r+x5r+u5r+b54CJ54CL5r+654CR54CB54CP5r++54Cb54Ca5r2054Cd54CY54Cf54Cw54C+54Cy54GR54Gj54KZ54KS54Kv54Ox54Ks54K454Kz54Ku54Of54OL54OdXCJdLFtcImUwODBcIixcIueDmeeEieeDveeEnOeEmeeFpeeFleeGiOeFpueFoueFjOeFlueFrOeGj+eHu+eGhOeGleeGqOeGrOeHl+eGueeGvueHkueHieeHlOeHjueHoOeHrOeHp+eHteeHvOeHueeHv+eIjeeIkOeIm+eIqOeIreeIrOeIsOeIsueIu+eIvOeIv+eJgOeJhueJi+eJmOeJtOeJvueKgueKgeeKh+eKkueKlueKoueKp+eKueeKsueLg+eLhueLhOeLjueLkueLoueLoOeLoeeLueeLt+WAj+eMl+eMiueMnOeMlueMneeMtOeMr+eMqeeMpeeMvueNjueNj+m7mOeNl+eNqueNqOeNsOeNuOeNteeNu+eNuuePiOeOs+ePjueOu+ePgOePpeePruePnueSoueQheeRr+eQpeePuOeQsueQuueRleeQv+eRn+eRmeeRgeeRnOeRqeeRsOeRo+eRqueRtueRvueSi+eSnueSp+eTiueTj+eTlOePsVwiXSxbXCJlMTQwXCIsXCLnk6Dnk6Pnk6fnk6nnk67nk7Lnk7Dnk7Hnk7jnk7fnlITnlIPnlIXnlIznlI7nlI3nlJXnlJPnlJ7nlKbnlKznlLznlYTnlY3nlYrnlYnnlZvnlYbnlZrnlannlaTnlafnlavnla3nlbjnlbbnlobnlofnlbTnlornlonnloLnlpTnlprnlp3nlqXnlqPnl4LnlrPnl4PnlrXnlr3nlrjnlrznlrHnl43nl4rnl5Lnl5nnl6Pnl57nl77nl79cIl0sW1wiZTE4MFwiLFwi55e855iB55ew55e655ey55ez55iL55iN55iJ55if55in55ig55ih55ii55ik55i055iw55i755mH55mI55mG55mc55mY55mh55mi55mo55mp55mq55mn55ms55mw55my55m255m455m855qA55qD55qI55qL55qO55qW55qT55qZ55qa55qw55q055q455q555q655uC55uN55uW55uS55ue55uh55ul55un55uq6Jiv55u755yI55yH55yE55yp55yk55ye55yl55ym55yb55y355y4552H552a552o552r552b552l552/552+5525556O556L556R556g556e556w55625565556/55685569556755+H55+N55+X55+a55+c55+j55+u55+856CM56CS56Sm56Cg56Sq56GF56KO56G056KG56G856Ka56KM56Kj56K156Kq56Kv56OR56OG56OL56OU56K+56K856OF56OK56OsXCJdLFtcImUyNDBcIixcIuejp+ejmuejveejtOekh+ekkuekkeekmeekrOekq+elgOeloOell+eln+elmuelleelk+eluuelv+emiuemneemp+m9i+emquemruems+emueemuuenieenleenp+enrOenoeeno+eoiOeojeeomOeomeeooOeon+emgOeoseeou+eovueot+epg+epl+epieepoeepouepqem+neepsOepueepveeqiOeql+eqleeqmOeqlueqqeeriOeqsFwiXSxbXCJlMjgwXCIsXCLnqrbnq4Xnq4Tnqr/pgoPnq4fnq4rnq43nq4/nq5Xnq5Pnq5nnq5rnq53nq6Hnq6Lnq6bnq63nq7DnrILnrI/nrIrnrIbnrLPnrJjnrJnnrJ7nrLXnrKjnrLbnrZDnrbrnrITnrY3nrIvnrYznrYXnrbXnraXnrbTnrafnrbDnrbHnraznra7nrp3nrpjnrp/nro3nrpznrprnrovnrpLnro/nrZ3nrpnnr4vnr4Hnr4znr4/nrrTnr4bnr53nr6nnsJHnsJTnr6bnr6XnsaDnsIDnsIfnsJPnr7Pnr7fnsJfnsI3nr7bnsKPnsKfnsKrnsJ/nsLfnsKvnsL3nsYznsYPnsZTnsY/nsYDnsZDnsZjnsZ/nsaTnsZbnsaXnsaznsbXnsoPnspDnsqTnsq3nsqLnsqvnsqHnsqjnsrPnsrLnsrHnsq7nsrnnsr3ns4Dns4Xns4Lns5jns5Lns5zns6LprLvns6/ns7Lns7Tns7bns7rntIZcIl0sW1wiZTM0MFwiLFwi57SC57Sc57SV57SK57WF57WL57Su57Sy57S/57S157WG57Wz57WW57WO57Wy57Wo57Wu57WP57Wj57aT57aJ57Wb57aP57W957ab57a657au57aj57a157eH57a957ar57i957ai57av57ec57a457af57aw57eY57ed57ek57ee57e757ey57eh57iF57iK57ij57ih57iS57ix57if57iJ57iL57ii57mG57mm57i757i157i557mD57i3XCJdLFtcImUzODBcIixcIue4sue4uue5p+e5nee5lue5nue5mee5mue5uee5que5qee5vOe5u+e6g+e3lee5vei+rue5v+e6iOe6iee6jOe6kue6kOe6k+e6lOe6lue6jue6m+e6nOe8uOe8uue9hee9jOe9jee9jue9kOe9kee9lee9lOe9mOe9n+e9oOe9qOe9qee9p+e9uOe+gue+hue+g+e+iOe+h+e+jOe+lOe+nue+nee+mue+o+e+r+e+sue+uee+rue+tue+uOitsee/hee/hue/iue/lee/lOe/oee/pue/qee/s+e/uemjnOiAhuiAhOiAi+iAkuiAmOiAmeiAnOiAoeiAqOiAv+iAu+iBiuiBhuiBkuiBmOiBmuiBn+iBouiBqOiBs+iBsuiBsOiBtuiBueiBveiBv+iChOiChuiCheiCm+iCk+iCmuiCreWGkOiCrOiDm+iDpeiDmeiDneiDhOiDmuiDluiEieiDr+iDseiEm+iEqeiEo+iEr+iFi1wiXSxbXCJlNDQwXCIsXCLpmovohYbohL7ohZPohZHog7zohbHoha7ohaXohabohbTohoPohojohorohoDohoLohqDohpXohqTohqPohZ/ohpPohqnohrDohrXohr7ohrjohr3oh4Doh4Lohrroh4noh43oh5Hoh5noh5joh4joh5roh5/oh6Doh6foh7roh7voh77oiIHoiILoiIXoiIfoiIroiI3oiJDoiJboiKnoiKvoiLjoiLPoiYDoiZnoiZjoiZ3oiZroiZ/oiaRcIl0sW1wiZTQ4MFwiLFwi6Imi6Imo6Imq6Imr6Iiu6Imx6Im36Im46Im+6IqN6IqS6Iqr6Iqf6Iq76Iqs6Iuh6Iuj6Iuf6IuS6Iu06Iuz6Iu66I6T6IyD6Iu76Iu56Iue6IyG6Iuc6IyJ6IuZ6Iy16Iy06IyW6Iyy6Iyx6I2A6Iy56I2Q6I2F6Iyv6Iyr6IyX6IyY6I6F6I6a6I6q6I6f6I6i6I6W6Iyj6I6O6I6H6I6K6I286I616I2z6I216I6g6I6J6I6o6I+06JCT6I+r6I+O6I+96JCD6I+Y6JCL6I+B6I+36JCH6I+g6I+y6JCN6JCi6JCg6I696JC46JSG6I+76JGt6JCq6JC86JWa6JKE6JG36JGr6JKt6JGu6JKC6JGp6JGG6JCs6JGv6JG56JC16JOK6JGi6JK56JK/6JKf6JOZ6JON6JK76JOa6JOQ6JOB6JOG6JOW6JKh6JSh6JO/6JO06JSX6JSY6JSs6JSf6JSV6JSU6JO86JWA6JWj6JWY6JWIXCJdLFtcImU1NDBcIixcIuiVgeiYguiVi+iVleiWgOiWpOiWiOiWkeiWiuiWqOiVreiWlOiWm+iXquiWh+iWnOiVt+iVvuiWkOiXieiWuuiXj+iWueiXkOiXleiXneiXpeiXnOiXueiYiuiYk+iYi+iXvuiXuuiYhuiYouiYmuiYsOiYv+iZjeS5leiZlOiZn+iZp+iZseiak+iao+iaqeiaquiai+iajOiatuiar+ibhOibhuiasOibieigo+iaq+iblOibnuibqeibrFwiXSxbXCJlNTgwXCIsXCLom5/om5vom6/onJLonIbonIjonIDonIPom7vonJHonInonI3om7nonIronLTonL/onLfonLvonKXonKnonJronaDonZ/onbjonYzonY7onbTonZfonajona7onZnonZPonaPonarooIXonqLonp/onoLonq/on4vonr3on4Don5Dpm5bonqvon4TonrPon4fon4bonrvon6/on7Lon6DooI/ooI3on77on7bon7fooI7on5LooJHooJbooJXooKLooKHooLHooLbooLnooKfooLvooYTooYLooZLooZnooZ7ooaLooavoooHoob7oop7oobXoob3oorXoobLoooLoopfoopLooq7oopnooqLooo3ooqToorDoor/oorHoo4Poo4Too5Too5joo5noo53oo7nopILoo7zoo7Too6joo7LopITopIzopIropJPopYPopJ7opKXopKropKvopYHopYTopLvopLbopLjopYzopJ3opaDopZ5cIl0sW1wiZTY0MFwiLFwi6KWm6KWk6KWt6KWq6KWv6KW06KW36KW+6KaD6KaI6KaK6KaT6KaY6Kah6Kap6Kam6Kas6Kav6Kay6Ka66Ka96Ka/6KeA6Kea6Kec6Ked6Ken6Ke06Ke46KiD6KiW6KiQ6KiM6Kib6Kid6Kil6Ki26KmB6Kmb6KmS6KmG6KmI6Km86Kmt6Kms6Kmi6KqF6KqC6KqE6Kqo6Kqh6KqR6Kql6Kqm6Kqa6Kqj6KuE6KuN6KuC6Kua6Kur6Kuz6KunXCJdLFtcImU2ODBcIixcIuirpOirseislOiroOirouirt+irnuirm+isjOish+ismuiroeisluiskOisl+isoOiss+meq+ispuisq+isvuisqOitgeitjOitj+itjuitieitluitm+itmuitq+itn+itrOitr+ittOitveiugOiujOiujuiukuiuk+iuluiumeiumuiwuuixgeiwv+ixiOixjOixjuixkOixleixouixrOixuOixuuiyguiyieiyheiyiuiyjeiyjuiylOixvOiymOaIneiyreiyquiyveiysuiys+iyruiytuiziOizgeizpOizo+izmuizveizuuizu+i0hOi0hei0iui0h+i0j+i0jei0kOm9jui0k+izjei0lOi0lui1p+i1rei1sei1s+i2gei2mei3gui2vui2uui3j+i3mui3lui3jOi3m+i3i+i3qui3q+i3n+i3o+i3vOi4iOi4iei3v+i4nei4nui4kOi4n+i5gui4tei4sOi4tOi5ilwiXSxbXCJlNzQwXCIsXCLouYfouYnouYzouZDouYjouZnouaTouaDouKrouaPouZXoubboubLoubzouoHouofouoXouoTouovouoroupPoupHoupToupnouqrouqHouqzourDou4bourHour7ou4Xou4jou4vou5vou6Pou7zou7vou6vou77ovIrovIXovJXovJLovJnovJPovJzovJ/ovJvovIzovKbovLPovLvovLnovYXovYLovL7ovYzovYnovYbovY7ovZfovZxcIl0sW1wiZTc4MFwiLFwi6L2i6L2j6L2k6L6c6L6f6L6j6L6t6L6v6L636L+a6L+l6L+i6L+q6L+v6YKH6L+06YCF6L+56L+66YCR6YCV6YCh6YCN6YCe6YCW6YCL6YCn6YC26YC16YC56L+46YGP6YGQ6YGR6YGS6YCO6YGJ6YC+6YGW6YGY6YGe6YGo6YGv6YG26Zqo6YGy6YKC6YG96YKB6YKA6YKK6YKJ6YKP6YKo6YKv6YKx6YK16YOi6YOk5omI6YOb6YSC6YSS6YSZ6YSy6YSw6YWK6YWW6YWY6YWj6YWl6YWp6YWz6YWy6YaL6YaJ6YaC6Yai6Yar6Yav6Yaq6Ya16Ya06Ya66YeA6YeB6YeJ6YeL6YeQ6YeW6Yef6Yeh6Yeb6Ye86Ye16Ye26Yie6Ye/6YiU6Yis6YiV6YiR6Yme6YmX6YmF6YmJ6Ymk6YmI6YqV6Yi/6YmL6YmQ6Yqc6YqW6YqT6Yqb6Yma6YuP6Yq56Yq36Yup6YyP6Yu66Y2E6YyuXCJdLFtcImU4NDBcIixcIumMmemMoumMmumMo+mMuumMtemMu+mNnOmNoOmNvOmNrumNlumOsOmOrOmOremOlOmOuemPlumPl+mPqOmPpemPmOmPg+mPnemPkOmPiOmPpOmQmumQlOmQk+mQg+mQh+mQkOmQtumQq+mQtemQoemQuumRgemRkumRhOmRm+mRoOmRoumRnumRqumIqemRsOmRtemRt+mRvemRmumRvOmRvumSgemRv+mWgumWh+mWiumWlOmWlumWmOmWmVwiXSxbXCJlODgwXCIsXCLplqDplqjplqfplq3plrzplrvplrnplr7pl4rmv7bpl4Ppl43pl4zpl5Xpl5Tpl5bpl5zpl6Hpl6Xpl6LpmKHpmKjpmK7pmK/pmYLpmYzpmY/pmYvpmbfpmZzpmZ7pmZ3pmZ/pmabpmbLpmazpmo3pmpjpmpXpmpfpmqrpmqfpmrHpmrLpmrDpmrTpmrbpmrjpmrnpm47pm4vpm4npm43opY3pm5zpnI3pm5Xpm7npnITpnIbpnIjpnJPpnI7pnJHpnI/pnJbpnJnpnKTpnKrpnLDpnLnpnL3pnL7pnYTpnYbpnYjpnYLpnYnpnZzpnaDpnaTpnabpnajli5LpnavpnbHpnbnpnoXpnbzpnoHpnbrpnobpnovpno/pnpDpnpzpnqjpnqbpnqPpnrPpnrTpn4Ppn4bpn4jpn4vpn5zpn63pvY/pn7Lnq5/pn7bpn7XpoI/poIzpoLjpoKTpoKHpoLfpoL3poYbpoY/poYvpoavpoa/pobBcIl0sW1wiZTk0MFwiLFwi6aGx6aG06aGz6aKq6aKv6aKx6aK26aOE6aOD6aOG6aOp6aOr6aSD6aSJ6aSS6aSU6aSY6aSh6aSd6aSe6aSk6aSg6aSs6aSu6aS96aS+6aWC6aWJ6aWF6aWQ6aWL6aWR6aWS6aWM6aWV6aaX6aaY6aal6aat6aau6aa86aef6aeb6aed6aeY6aeR6aet6aeu6aex6aey6ae76ae46aiB6aiP6aiF6aei6aiZ6air6ai36amF6amC6amA6amDXCJdLFtcImU5ODBcIixcIumovumplempjempm+mpl+mpn+mpoumppemppOmpqempq+mpqumqremqsOmqvOmrgOmrj+mrkemrk+mrlOmrnumrn+mroumro+mrpumrr+mrq+mrrumrtOmrsemrt+mru+mshumsmOmsmumsn+msoumso+mspemsp+msqOmsqemsqumsrumsr+mssumthOmtg+mtj+mtjemtjumtkemtmOmttOmuk+mug+mukemulumul+mun+muoOmuqOmutOmvgOmviumuuemvhumvj+mvkemvkumvo+mvoumvpOmvlOmvoemwuumvsumvsemvsOmwlemwlOmwiemwk+mwjOmwhumwiOmwkumwiumwhOmwrumwm+mwpemwpOmwoemwsOmxh+mwsumxhumwvumxmumxoOmxp+mxtumxuOmzp+mzrOmzsOm0iem0iOmzq+m0g+m0hum0qum0pum2r+m0o+m0n+m1hOm0lem0kum1gem0v+m0vum1hum1iFwiXSxbXCJlYTQwXCIsXCLptZ3ptZ7ptaTptZHptZDptZnptbLptonptofptqvpta/ptbrptprptqTptqnptrLpt4Tpt4Hptrvptrjptrrpt4bpt4/pt4Lpt5npt5Ppt7jpt6bpt63pt6/pt73puJrpuJvpuJ7pubXpubnpub3puoHpuojpuovpuozpupLpupXpupHpup3puqXpuqnpurjpuqrpuq3pnaHpu4zpu47pu4/pu5Dpu5Tpu5zpu57pu53pu6Dpu6Xpu6jpu69cIl0sW1wiZWE4MFwiLFwi6bu06bu26bu36bu56bu76bu86bu96byH6byI55q36byV6byh6bys6by+6b2K6b2S6b2U6b2j6b2f6b2g6b2h6b2m6b2n6b2s6b2q6b236b2y6b226b6V6b6c6b6g5aCv5qeH6YGZ55Gk5Yec54aZXCJdLFtcImVkNDBcIixcIue6iuiknOmNiOmKiOiTnOS/ieeCu+aYseajiOmLueabu+W9heS4qOS7oeS7vOS8gOS8g+S8ueS9luS+kuS+iuS+muS+lOS/jeWBgOWAouS/v+WAnuWBhuWBsOWBguWClOWDtOWDmOWFiuWFpOWGneWGvuWHrOWIleWKnOWKpuWLgOWLm+WMgOWMh+WMpOWNsuWOk+WOsuWPne+ojuWSnOWSiuWSqeWTv+WWhuWdmeWdpeWerOWfiOWfh++oj1wiXSxbXCJlZDgwXCIsXCLvqJDlop7lorLlpIvlpZPlpZvlpZ3lpaPlpqTlprrlrZblr4DnlK/lr5jlr6zlsJ7lsqblsrrls7XltKfltZPvqJHltYLlta3ltrjltrnlt5DlvKHlvLTlvaflvrflv57mgZ3mgoXmgormg57mg5XmhKDmg7LmhJHmhLfmhLDmhpjmiJPmiqbmj7XmkaDmkp3mk47mlY7mmIDmmJXmmLvmmInmmK7mmJ7mmKTmmaXmmZfmmZnvqJLmmbPmmpnmmqDmmrLmmr/mm7rmnI7vpKnmnabmnrvmoZLmn4DmoIHmoYTmo4/vqJPmpajvqJTmppjmp6LmqLDmqavmqYbmqbPmqb7mq6Lmq6Tmr5bmsL/msZzmsobmsa/ms5rmtITmtofmta/mtpbmtqzmt4/mt7jmt7Lmt7zmuLnmuZzmuKfmuLzmur/mvojmvrXmv7XngIXngIfngKjngoXngqvnhI/nhITnhZznhYbnhYfvqJXnh4Hnh77nirFcIl0sW1wiZWU0MFwiLFwi54q+54yk76iW5423546954+J54+W54+j54+S55CH54+155Cm55Cq55Cp55Cu55Gi55KJ55Kf55SB55Wv55qC55qc55qe55qb55qm76iX552G5Yqv56Ch56GO56Gk56G656Sw76iY76iZ76ia56aU76ib56ab56uR56un76ic56ur566e76id57WI57Wc57a357ag57eW57mS572H576h76ie6IyB6I2i6I2/6I+H6I+26JGI6JK06JWT6JWZXCJdLFtcImVlODBcIixcIuiVq++on+iWsO+ooO+ooeigh+ijteiokuiot+ipueiqp+iqvuirn++oouirtuitk+itv+izsOiztOi0kui1tu+oo+i7j++opO+opemBp+mDnu+opumElemEp+mHmumHl+mHnumHremHrumHpOmHpemIhumIkOmIiumIuumJgOmIvOmJjumJmemJkemIuemJp+mKp+mJt+mJuOmLp+mLl+mLmemLkO+op+mLlemLoOmLk+mMpemMoemLu++oqOmMnumLv+mMnemMgumNsOmNl+mOpOmPhumPnumPuOmQsemRhemRiOmWku+nnO+oqemanemar+mcs+mcu+mdg+mdjemdj+mdkemdlemhl+mhpe+oqu+oq+mkp++orOmmnumpjumrmemrnOmttemtsumuj+musemuu+mwgOm1sOm1q++orem4mem7kVwiXSxbXCJlZWVmXCIsXCLihbBcIiw5LFwi77+i77+k77yH77yCXCJdLFtcImYwNDBcIixcIu6AgFwiLDYyXSxbXCJmMDgwXCIsXCLugL9cIiwxMjRdLFtcImYxNDBcIixcIu6CvFwiLDYyXSxbXCJmMTgwXCIsXCLug7tcIiwxMjRdLFtcImYyNDBcIixcIu6FuFwiLDYyXSxbXCJmMjgwXCIsXCLuhrdcIiwxMjRdLFtcImYzNDBcIixcIu6ItFwiLDYyXSxbXCJmMzgwXCIsXCLuibNcIiwxMjRdLFtcImY0NDBcIixcIu6LsFwiLDYyXSxbXCJmNDgwXCIsXCLujK9cIiwxMjRdLFtcImY1NDBcIixcIu6OrFwiLDYyXSxbXCJmNTgwXCIsXCLuj6tcIiwxMjRdLFtcImY2NDBcIixcIu6RqFwiLDYyXSxbXCJmNjgwXCIsXCLukqdcIiwxMjRdLFtcImY3NDBcIixcIu6UpFwiLDYyXSxbXCJmNzgwXCIsXCLulaNcIiwxMjRdLFtcImY4NDBcIixcIu6XoFwiLDYyXSxbXCJmODgwXCIsXCLumJ9cIiwxMjRdLFtcImY5NDBcIixcIu6anFwiXSxbXCJmYTQwXCIsXCLihbBcIiw5LFwi4oWgXCIsOSxcIu+/ou+/pO+8h++8guOIseKEluKEoeKItee6iuiknOmNiOmKiOiTnOS/ieeCu+aYseajiOmLueabu+W9heS4qOS7oeS7vOS8gOS8g+S8ueS9luS+kuS+iuS+muS+lOS/jeWBgOWAouS/v+WAnuWBhuWBsOWBguWClOWDtOWDmOWFilwiXSxbXCJmYTgwXCIsXCLlhaTlhp3lhr7lh6zliJXlipzliqbli4Dli5vljIDljIfljKTljbLljpPljrLlj53vqI7lkpzlkorlkqnlk7/lloblnZnlnaXlnqzln4jln4fvqI/vqJDlop7lorLlpIvlpZPlpZvlpZ3lpaPlpqTlprrlrZblr4DnlK/lr5jlr6zlsJ7lsqblsrrls7XltKfltZPvqJHltYLlta3ltrjltrnlt5DlvKHlvLTlvaflvrflv57mgZ3mgoXmgormg57mg5XmhKDmg7LmhJHmhLfmhLDmhpjmiJPmiqbmj7XmkaDmkp3mk47mlY7mmIDmmJXmmLvmmInmmK7mmJ7mmKTmmaXmmZfmmZnvqJLmmbPmmpnmmqDmmrLmmr/mm7rmnI7vpKnmnabmnrvmoZLmn4DmoIHmoYTmo4/vqJPmpajvqJTmppjmp6LmqLDmqavmqYbmqbPmqb7mq6Lmq6Tmr5bmsL/msZzmsobmsa/ms5rmtITmtofmta9cIl0sW1wiZmI0MFwiLFwi5raW5ras5reP5re45rey5re85ri55rmc5rin5ri85rq/5r6I5r615r+154CF54CH54Co54KF54Kr54SP54SE54Wc54WG54WH76iV54eB54e+54qx54q+54yk76iW5423546954+J54+W54+j54+S55CH54+155Cm55Cq55Cp55Cu55Gi55KJ55Kf55SB55Wv55qC55qc55qe55qb55qm76iX552G5Yqv56Ch56GO56Gk56G656Sw76iY76iZXCJdLFtcImZiODBcIixcIu+omuemlO+om+emm+erkeerp++onOerq+eunu+onee1iOe1nOe2t+e2oOe3lue5kue9h+e+oe+onuiMgeiNouiNv+iPh+iPtuiRiOiStOiVk+iVmeiVq++on+iWsO+ooO+ooeigh+ijteiokuiot+ipueiqp+iqvuirn++oouirtuitk+itv+izsOiztOi0kui1tu+oo+i7j++opO+opemBp+mDnu+opumElemEp+mHmumHl+mHnumHremHrumHpOmHpemIhumIkOmIiumIuumJgOmIvOmJjumJmemJkemIuemJp+mKp+mJt+mJuOmLp+mLl+mLmemLkO+op+mLlemLoOmLk+mMpemMoemLu++oqOmMnumLv+mMnemMgumNsOmNl+mOpOmPhumPnumPuOmQsemRhemRiOmWku+nnO+oqemanemar+mcs+mcu+mdg+mdjemdj+mdkemdlemhl+mhpe+oqu+oq+mkp++orOmmnumpjumrmVwiXSxbXCJmYzQwXCIsXCLpq5zprbXprbLpro/prrHprrvpsIDptbDptavvqK3puJnpu5FcIl1dJyk7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIFx0fSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2dsb2JhbCAqL1xuLyoqKioqKi8gXHQhZnVuY3Rpb24oKSB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuLyoqKioqKi8gXHRcdFx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG4vKioqKioqLyBcdFx0XHR0cnkge1xuLyoqKioqKi8gXHRcdFx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbi8qKioqKiovIFx0XHRcdH0gY2F0Y2ggKGUpIHtcbi8qKioqKiovIFx0XHRcdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH0pKCk7XG4vKioqKioqLyBcdH0oKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IgKi9cbi8qKioqKiovIFx0IWZ1bmN0aW9uKCkge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubm1kID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0XHRtb2R1bGUucGF0aHMgPSBbXTtcbi8qKioqKiovIFx0XHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcbi8qKioqKiovIFx0XHRcdHJldHVybiBtb2R1bGU7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBzdGFydHVwXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHQvLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUzNik7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX2V4cG9ydHNfXztcbi8qKioqKiovIH0pKClcbjtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGRmbWFrZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/pdfmake/build/pdfmake.js\n"); /***/ }), /***/ "./node_modules/pdfmake/build/vfs_fonts.js": /*!*************************************************!*\ !*** ./node_modules/pdfmake/build/vfs_fonts.js ***! \*************************************************/ /***/ (function() { eval("this.pdfMake = this.pdfMake || {}; this.pdfMake.vfs = {\r\n \"Roboto-Italic.ttf\": \"AAEAAAARAQAABAAQR0RFRqWLoiAAAdT4AAACWEdQT1PInCKzAAHXUAAAZfhHU1VChRYO9AACPUgAABX2T1MvMpeDsUwAAAGYAAAAYGNtYXDOyFo6AAAWdAAABoJjdnQgO/gmfQAAL1AAAAD+ZnBnbagFhDIAABz4AAAPhmdhc3AACAAZAAHU7AAAAAxnbHlmJ9ZJigAAOpAAAZd6aGVhZAakHScAAAEcAAAANmhoZWEMnBKaAAABVAAAACRobXR4O9/cTQAAAfgAABR8bG9jYY3Y7xYAADBQAAAKQG1heHAIzxDGAAABeAAAACBuYW1lOSJt4gAB0gwAAALAcG9zdP9hAGQAAdTMAAAAIHByZXB5WM7TAAAsgAAAAs4AAQAAAAMBSDPLHDFfDzz1ABsIAAAAAADE8BEuAAAAAN8Gv2v6N/3VCUMIcwACAAkAAgAAAAAAAAABAAAHbP4MAAAJA/o3/mwJQwgAAbMAAAAAAAAAAAAAAAAFHwABAAAFHwCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAAQAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA5YAZAAAAAAAAAAAAfcAAAH3AAACAABEAnwAyQTHAFIEXABJBa8AugTUADkBWwCsAqgAbQK0/5ADWABrBGcATAGH/48CJQAaAgwANAM0/5AEXABqBFwA+gRcABgEXAA1BFwABQRcAHIEXABtBFwAnQRcAEAEXACUAesAKQGu/5sD8gBCBEIAcAQPADsDqwClBvgAQQUQ/68E1gA7BQ0AcAUYADsEaQA7BEoAOwVJAHQFiQA7AhwASQRIAAcE3gA7BC4AOwbGADsFiQA7BVcAcwTlADsFVwBrBMgAOwScACkEoQCpBQgAYwTxAKUG4gDDBN3/1ASpAKgEpv/sAg8AAAMwAMACD/97Az4ATwOA/4ECZgDQBDkAMQRcAB8EEABGBGAARwQdAEUCswB1BFwAAwRGACAB4wAvAdv/EwPvACAB4wAvBs4AHgRJACAEbQBGBFz/1wRpAEYCoQAgBAEALgKKAEMERwBbA8IAbgXVAIAD2v/FA6z/qgPa/+4CoAA3AeUAIgKg/40FRwBpAeX/8QQ/AFAEg//zBYkAEgQUAEMB3f/4BML/2gM/ANoGGQBeA3kAwwOuAFYETACBBhoAXQOPAPgC5gDoBCYAJgLiAF0C4gBvAm8A1QRm/+YDzAB4AgcApQHt/8gC4gDgA4gAvwOtABEFuQC6Bg8AtQYTAJ4Drf/RB0H/gwQkACgFVwAgBJYAOQSdAB8GjgATBI0AXARvAEQEZgA6BHn/4ASjAEYFcAA2AewALwRSAC4ELgAjAhkAJAVgADUEZgAlB2YAVQcMAEcB7QA0BV0AUgKl/0cFVQBmBHAAQwVlAGMEzQBbAfX/CQQYAD8DpwEYA3MBKAOZAPgDUQEHAeMBDgKZAQECGv+uA6kA3gLlAMMCSP/pAAD9agAA/eoAAP0LAAD99AAA/NsAAPy6Af4BIwPtAPQCEQClBFEARAV5/7IFSABnBRf/xARvAAwFiQBEBG//2wWPAFYFXgCFBSkACgRjAEgEmf/xA+QAhQRmAEUEMAApBAUAigRmACUEawB1AoQAhARN/7gDzgBABKAAYARm/90ELQBKBGUASAQMAIcEPABoBXgAQAVvAE4GZABnBH4AUgQiAGcGGABoBdIAogU8AHMIUP/NCGMARAZRALQFiABCBO4ANgXW/4wHC/+rBJwAJQWJAEQFf//LBOEAlAX+AFsFrQBBBVAAywdNAEIHhABCBeMAigbAAEQE3gA2BTwAdgb6AEkE8f/pBEsARwRwADEDQgAuBK//jQXy/6cD8QAgBHsAMAQyADAEfP/IBcEAMQR6ADAEewAwA7sAYAWhAEkEmgAwBDkAeQZHADAGbAAlBNEAVgYQADEENwAxBC0AMgZWADEEQv+/BEYAIAQtAE4Glf/DBq8AMARwACAEewAwBtMAbgX9AE8ENgAvBvUASgXLAC0Erv+6BCb/ogbWAFsF3gBPBp4AJgW1ACoIwABJB5UALwQE/80Dvf/JBUgAZwRpAEME5ACtA+UAhQVIAGcEZgBDBssAdAX1AFIG0wBuBf0ATwUKAGkEJwBMBNgAQAAA/OcAAP0KAAD+FgAA/jsAAPo3AAD6TgXlAEQE0QAwBDYALwT0ADsEZ//XBEIANQN2ACUEwABEA+cAJQdx/6sGOv+nBXkARASeADAE4wA2BFwALgZaALwFWgB2BdsAOwS+ADAHkwA7BYgAJQf8AEIGvwAlBcEAawSvAFwE+//UBBT/xQb2AKwFNABXBZoAywR9AHkFRgDKBEkAlAVGABwGAACIBJoABATjADYEOQAuBdr/ywTT/8gFhwBEBGYAJQXtADsE0AAwByEAOwYYADEFXQBSBIQAPASE//0Env/5A5n/6QUQ/9QEKf/FBNEALgZiADEGsABIBiYArQUEAGgEKQCwA+kAoAeG/+AGRP/aB74APAZvACME0QBlA/4ATQWCAJsE+gB9BTwAaAXe/8sE1//IAwkA8wP/AAAH9AAAA/8AAAf0AAACrgAAAgQAAAFcAAAEZgAAAikAAAGfAAABAgAAANUAAAAAAAACLQAaAi0AGgUiAKYGGQCYA4r/XgGOALABjgCJAYz/lwGOANICyAC4AtAAlQKt/5QESAB3BG3/9gKeAKEDsQA4BTsAOAF0AFIHbwCWAlUAXQJVAAQDh//wAuIAjwLiAGQC4gCKAuIAkALiAKIC4gB7AuIAqgNHAH4C4v/cAuIALQLi/6sC4v+8AuL/sgLi/9gC4v/eAuL/8ALi/8kC4v/4BIP/8wYlAAoGXwA5CD8AOwW+AAkF/AAfBFwAUQWtAEMEAwBKBFIACwUf//IFJv/lBbsAzAOxAEsH+wA1BNsA6wTxAH8GAQC2BqwAkgalAJAGQwC+BG0ATQVkACQEi/+tBHAAqwSgAEEH+wBLAf3/FQRfADMEQgBwA/z/0wQZABgD6QBCAkQAdwJ8AHEB9f/kBNcAdQRNAFkEaAB1BqAAdQagAHUEyAB1BmgAKAAAAAAH9f+rCDUAXALY/+oC2ABsAtgAHAPxAGkD8QAnA/EAcAPwAEsD8QBKA/H/9wPxABcD8f/9A/EAvQPxAEYEA//dBAsAdQQz/7cF5gCUBEYAeQRbAEIEBwBuBAAAEgQpAB0EmABGBDsAHgSYAEwEvQAeBdQAHgOZAB4ENAAeA7L/9gHaACsEvgAeBIgATAOvAB4EAAASBBQABgOFABkDkwAeBEb/sASYAEwERv+wA27/0wSqAB4D0v/WBT4AUgTwAH0EzQAOBUkAbQRaAEgHCv/DBxgAHgVKAG4EqQAeBDkAIAT9/4kF3f+vBB8AEgTGACAELQAfBJz/xAQAAFoFAQAeBEgAVgYgAB4GeQAeBPYAUQXNACAELgAgBFoAIAZFAB4EZP/gA/P/+gYY/68EVwAfBOMAHwUPAGoFlwBQBEcAdQSE/7cGMQBtBEgAVQRIAB4FmAAuBKYAQAQfABIEnABGBBQAAAPGAB8H5AAeBIf/3gLY//sC2P/xAtgAFwLYAB0C2AAvAtgACALYADcDewCTAqABCwPIAB4EGv+ZBJ8ASAUjAEQE/QBEA/UAJgUVAEQD8AAmBF0AHgRaAEgEMAAeBGP/pgHvAPwDiQESAAD9KgPSANMD1gAiA/AAzgPXAM0DkwAeA4QBEgODARMC4gCPAuIAZALiAIoC4gCQAuIAogLiAHsC4gCqBVgAgAWDAIEFaABEBbMAgwW2AIMDuAC8BF8AOQQ3/4EEqv/TBEn/1QQOACsDiQEUAYb/vgZxAEwElgA+Ae3/DwRm/6wEZv/jBGb/uARmACwEZgBWBGYAJARmAGYEZgAbBGYAQARmAQ0CAP8JAf//CQH2AC8B9v94AfYALwQwAB4E2gBkBAEAYgRcAB8EEwBEBHAAQwRpACMEfABCBGv/1wR5AEIEHQBGBFwANQRO/78DaACpBLEALAOZ/+kGCv+aA9oAHgSY//QEvQAeBL0AHgH3AAACJQAaBTYALwU2AC8EZAA+BKEAqQKK//QFEP+vBRD/rwUQ/68FEP+vBRD/rwUQ/68FEP+vBQ0AcARpADsEaQA7BGkAOwRpADsCHABJAhwASQIcAEkCHABJBYkAOwVXAHMFVwBzBVcAcwVXAHMFVwBzBQgAYwUIAGMFCABjBQgAYwSpAKgEOQAxBDkAMQQ5ADEEOQAxBDkAMQQ5ADEEOQAxBBAARgQdAEUEHQBFBB0ARQQdAEUB7AAvAewALwHsAC8B7AAvBEkAIARtAEYEbQBGBG0ARgRtAEYEbQBGBEcAWwRHAFsERwBbBEcAWwOs/6oDrP+qBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBQ0AcAQQAEYFDQBwBBAARgUNAHAEEABGBQ0AcAQQAEYFGAA7BPYARwRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUFSQB0BFwAAwVJAHQEXAADBUkAdARcAAMFSQB0BFwAAwWJADsERgAgAhwASQHsABECHABJAewALgIcAEkB7AAvAhz/iwHj/20CHABJBmQASQO+AC8ESAAHAfX/CQTeADsD7wAgBC4AOwHjAC8ELgA7AeP/ogQuADsCeQAvBC4AOwK/AC8FiQA7BEkAIAWJADsESQAgBYkAOwRJACAESQAgBVcAcwRtAEYFVwBzBG0ARgVXAHMEbQBGBMgAOwKhACAEyAA7AqH/nwTIADsCoQAgBJwAKQQBAC4EnAApBAEALgScACkEAQAuBJwAKQQBAC4EnAApBAEALgShAKkCigBDBKEAqQKKAEMEoQCpArIAQwUIAGMERwBbBQgAYwRHAFsFCABjBEcAWwUIAGMERwBbBQgAYwRHAFsFCABjBEcAWwbiAMMF1QCABKkAqAOs/6oEqQCoBKb/7APa/+4Epv/sA9r/7gSm/+wD2v/uB0H/gwaOABMFVwAgBGYAOgRd/68EXf+vBAcAbgRj/6YEY/+mBGP/pgRj/6YEY/+mBGP/pgRj/6YEWgBIA8gAHgPIAB4DyAAeA8gAHgHaACsB2gArAdoAKwHaACsEvQAeBJgATASYAEwEmABMBJgATASYAEwEWwBCBFsAQgRbAEIEWwBCBAsAdQRj/6YEY/+mBGP/pgRaAEgEWgBIBFoASARaAEgEXQAeA8gAHgPIAB4DyAAeA8gAHgPIAB4EiABMBIgATASIAEwEiABMBL4AHgHaAA4B2gArAdoAKwHk/4IB2gArA7L/9gQ0AB4DmQAeA5kAHgOZAB4DmQAeBL0AHgS9AB4EvQAeBJgATASYAEwEmABMBCkAHQQpAB0EKQAdBAAAEgQAABIEAAASBAAAEgQHAG4EBwBuBAcAbgRbAEIEWwBCBFsAQgRbAEIEWwBCBFsAQgXmAJQECwB1BAsAdQQD/90EA//dBAP/3QUQ/68EzQADBe0AEQKAABcFawBrBQ3/7QU9AB4ChAAgBRD/rwTWADsEaQA7BKb/7AWJADsCHABJBN4AOwbGADsFiQA7BVcAcwTlADsEoQCpBKkAqATd/9QCHABJBKkAqARjAEgEMAApBGYAJQKEAIQEPABoBFIALgRtAEYEZv/mA8IAbgRO/78ChABlBDwAaARtAEYEPABoBmQAZwRpADsEUQBEBJwAKQIcAEkCHABJBEgABwT9AEQE3gA7BOEAlAUQ/68E1gA7BFEARARpADsFiQBEBsYAOwWJADsFVwBzBYkARATlADsFDQBwBKEAqQTd/9QEOQAxBB0ARQR7ADAEbQBGBFz/1wQQAEYDrP+qA9r/xQQdAEUDQgAuBAEALgHjAC8B7AAvAdv/EwQyADADrP+qBuIAwwXVAIAG4gDDBdUAgAbiAMMF1QCABKkAqAOs/6oBWwCsAnwAyQQAAEQB9f8JAY4AiQbGADsGzgAeBRD/rwQ5ADEEaQA7BYkARAQdAEUEewAwBV4AhQVvAE4E5ACtA+UAhQgZAEYJAwBzBJwAJQPxACAFDQBwBBAARgSpAKgD5ACFAhwASQcL/6sF8v+nAhwASQUQ/68EOQAxBRD/rwQ5ADEHQf+DBo4AEwRpADsEHQBFBV0AUgQYAD8EGAA/Bwv/qwXy/6cEnAAlA/EAIAWJAEQEewAwBYkARAR7ADAFVwBzBG0ARgVIAGcEaQBDBUgAZwRpAEMFPAB2BC0AMgThAJQDrP+qBOEAlAOs/6oE4QCUA6z/qgVQAMsEOQB5BsAARAYQADEEYABHBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQIcAEkB7AAvAhwADQHj//AFVwBzBG0ARgVXAHMEbQBGBVcAcwRtAEYFVwBzBG0ARgVXAHMEbQBGBVcAcwRtAEYFVwBzBG0ARgVVAGYEcABDBVUAZgRwAEMFVQBmBHAAQwVVAGYEcABDBVUAZgRwAEMFCABjBEcAWwUIAGMERwBbBWUAYwTNAFsFZQBjBM0AWwVlAGMEzQBbBWUAYwTNAFsFZQBjBM0AWwSpAKgDrP+qBKkAqAOs/6oEqQCoA6z/qgR+AAAEoQCpA7sAYAVQAMsEOQB5BFEARANCAC4GAACIBJoABARGACAE3gAsBN4ALARRABEDQv/nBREAWAQJADoEqQCoA+QAXgTd/9QD2v/FBDAAKQRK/9cGGQCYBFwAGARcADUEXAAFBFwAcgRwAIEEhABUBHAAlASEAH4FSQB0BFwAAwWJADsESQAgBRD/rwQ5ADEEaQA7BB0ARQIc/+AB7P+NBVcAcwRtAEYEyAA7AqEAIAUIAGMERwBbBIb/sQTWADsEXAAfBRgAOwRgAEcFGAA7BGAARwWJADsERgAgBN4AOwPvACAE3gA7A+8AIAQuADsB4//wBsYAOwbOAB4FiQA7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AAD//wAr/+0FcQSNBCYB8wAAAAcB8gHaAAD///+aAAAGAAYABiYChAAAAQcAdQKXAAAAC7YGGQ8BAU1WACs0AP////T/xgSjBh4GJgKGAAABBwB1AYIAHgALtgMwEQEBW1YAKzQA//8AEv38A+sEngYmAekAAAAHAcoA4v6e//8AlAAABikGHgYmAeUAAAEHAEQBpQAeAAu2BBgKAQFrVgArNAD//wCUAAAGKQYeBiYB5QAAAQcAdQIxAB4AC7YEFgoBAWtWACs0AP//AJQAAAYpBeYGJgHlAAABBwBqAXEAHgANtwUEHwoBAYRWACs0NAD//wB1AAAEZQYeBiYB4wAAAAcARACwAB7///+v/k4EiwWwBiYAJQAAAQcApAFmAAAAC7YDDgUBATlWACs0AP//ADH+TgPHBFAGJgBFAAABBwCkALQAAAALtgI7MQAATVYAKzQA//8AO/5YBLEFsAYmACkAAAEHAKQBJwAKAAu2BBACAABDVgArNAD//wBF/k4D2gRRBiYASQAAAQcApAD+AAAAC7YBLAAAAE1WACs0AP///6b+TgPjBI0GJgJDAAAABwCkAQsAAP//AB7+VgPwBI0GJgI4AAAABwCkANcACP////D+qgGfBDoGJgCNAAABBwCtAzYACgAOtAEHAgEBuP9/sFYAKzQAAAAAAA8AugADAAEECQAAAF4AAAADAAEECQABAAwAXgADAAEECQACAAwAagADAAEECQADABoAdgADAAEECQAEABoAdgADAAEECQAFACYAkAADAAEECQAGABoAtgADAAEECQAHAEAA0AADAAEECQAIAAwBEAADAAEECQAJACYBHAADAAEECQALABQBQgADAAEECQAMABQBQgADAAEECQANAFwBVgADAAEECQAOAFQBsgADAAEECQAZAAwAXgBDAG8AcAB5AHIAaQBnAGgAdAAgADIAMAAxADEAIABHAG8AbwBnAGwAZQAgAEkAbgBjAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAC4AUgBvAGIAbwB0AG8ASQB0AGEAbABpAGMAUgBvAGIAbwB0AG8AIABJAHQAYQBsAGkAYwBWAGUAcgBzAGkAbwBuACAAMwAuADAAMAA1ADsAIAAyADAAMgAyAFIAbwBiAG8AdABvAC0ASQB0AGEAbABp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As//8wLR//MC0//zAuH/8wLj//MC5f/zAuf/8wMJ//MDC//zAw3/8wM+//MDm//zA6j/8wPO//MD0f/zA/7/8wQB//MEHP/zBB7/8wQg//MEW//zBF3/8wRf//MEYf/zBGP/8wRl//MEZ//zBGn/8wRr//MEbf/zBG//8wRx//MEsP/zBMn/8wBAAEf/7ABI/+wASf/sAEv/7ABV/+wAlP/sAJn/7AC7/+wAyP/sAMn/7AD3/+wBA//sAR7/7AEi/+wBQv/sAWD/7AFh/+wBa//sArL/7AKz/+wCtP/sArX/7AK2/+wCzv/sAtD/7ALS/+wC1P/sAtb/7ALY/+wC2v/sAtz/7ALe/+wC4P/sAuL/7ALk/+wC5v/sAuj/7AOv/+wD1f/sA9n/7APc/+wD9//sA/3/7AQC/+wEEP/sBBL/7AQT/+wEH//sBC7/7ARI/+wESv/sBEz/7ARO/+wEUP/sBFL/7ARU/+wEVv/sBGr/7ARs/+wEbv/sBHL/7ASt/+wEuv/sBLz/7ABAACf/5gAr/+YAM//mADX/5gCD/+YAk//mAJj/5gCz/+YAuP/CAMQAEADT/+YBCP/mARf/5gEb/+YBHf/mAR//5gEh/+YBQf/mAWr/5gJV/+YCVv/mAlj/5gJZ/+YCl//mAqH/5gKi/+YCo//mAqT/5gKl/+YCzf/mAs//5gLR/+YC0//mAuH/5gLj/+YC5f/mAuf/5gMJ/+YDC//mAw3/5gM+/+YDm//mA6j/5gPO/+YD0f/mA/7/5gQB/+YEHP/mBB7/5gQg/+YEW//mBF3/5gRf/+YEYf/mBGP/5gRl/+YEZ//mBGn/5gRr/+YEbf/mBG//5gRx/+YEsP/mBMn/5gBHABAAAAASAAAAR//nAEj/5wBJ/+cAS//nAFX/5wCU/+cAmf/nALv/5wDEAA8AyP/nAMn/5wD3/+cBA//nAR7/5wEi/+cBQv/nAWD/5wFh/+cBa//nAYYAAAGKAAABjgAAAY8AAAKy/+cCs//nArT/5wK1/+cCtv/nAs7/5wLQ/+cC0v/nAtT/5wLW/+cC2P/nAtr/5wLc/+cC3v/nAuD/5wLi/+cC5P/nAub/5wLo/+cDr//nA9X/5wPZ/+cD3P/nA/f/5wP9/+cEAv/nBBD/5wQS/+cEE//nBB//5wQu/+cESP/nBEr/5wRM/+cETv/nBFD/5wRS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/+sC4P/rAuL/6wLk/+sC5v/rAuj/6wL2/vgDCv/rAwz/6wMO/+sDHwAUAyEAFAMjABQDJv/qAyj/6gMq/+oDLP/qAy7/6gMw/+oDNP/oA0P/wANE/8ADRf/AA0b/wANH/8ADSP/AA0n/wANe/8ADX//AA2D/wAOX/1YDn/9WA6//6wOz/+oDtf/rA7f/6AO6/+oDu//rA7z/6gPD/vgDx/9WA9IAFAPU/94D1f/rA9f/6wPZ/+sD2v/oA9z/6wPj/+gD6//oA/P/VgP0/94D9//rA/z/6AP9/+sEAv/rBAT/6AQJ/1YECv/eBAv/VgQM/94EEP/rBBL/6wQT/+sEHf/rBB//6wQh/+sEJf/oBCf/6AQp/+gELv/rBC//VgQw/94EMf9WBDL/3gQz/1YENP/eBDX/VgQ2/94EN/9WBDj/3gQ5/1YEOv/eBDv/VgQ8/94EPf9WBD7/3gQ//1YEQP/eBEH/VgRC/94EQ/9WBET/3gRF/1YERv/eBEj/6wRK/+sETP/rBE7/6wRQ/+sEUv/rBFT/6wRW/+sEXP/rBF7/6wRg/+sEYv/rBGT/6wRm/+sEaP/rBGr/6wRs/+sEbv/rBHD/6wRy/+sEdP/qBHb/6gR4/+oEev/qBHz/6gR+/+oEgP/qBIL/6ASE/+gEhv/oBIgAFASq/1YEq//eBK3/6wSx/+sEtf/qBLr/6wS8/+sE0AAUBNT/6ATW/+gE3P/ABOP/wAT7/8AAAgCgAAQABAAAAAYABgABAAsADAACABMAEwAEACUAKgAFACwALQALAC8ANgANADgAOAAVADoAPwAWAEUARgAcAEkASgAeAEwATAAgAE8ATwAhAFEAVAAiAFYAVgAmAFgAWAAnAFoAXQAoAF8AXwAsAIoAigAtAJYAlgAuAJ0AnQAvALEAtQAwALcAuQA1ALsAuwA4AL0AvgA5AMAAwQA7AMMAxQA9AMcAzgBAANIA0gBIANQA3gBJAOAA7wBUAPEA8QBkAPYA+ABlAPsA/ABoAP4BAABqAQMBBQBtAQoBCgBwAQ0BDQBxARgBGgByASIBIgB1AS4BMAB2ATMBNQB5ATcBNwB8ATkBOQB9ATsBOwB+AUMBRAB/AVQBVACBAVYBVgCCAVgBWACDAVwBXgCEAYQBhQCHAYcBiQCJAegB6ACMAeoB6wCNAe0B7QCPAfAB8ACQAfsB/QCRAkACQACUAkMCQwCVAlUCVQCWAlcCWACXAosCjACZAo4CjgCbApACpQCcAqoCsQCyArMCtgC6ArsCwAC+AsUCzQDEAs8CzwDNAtEC0QDOAtMC0wDPAtUC1QDQAtcC4ADRAukC6wDbAu0C7QDeAu8C7wDfAvEC8QDgAvMC8wDhAvgC+ADiAvoC+gDjAvwC/ADkAv4C/gDlAwADAADmAwIDDgDnAxADEAD0AxIDEgD1AxQDFAD2Ax8DHwD3AyEDIQD4AyMDIwD5AzEDMQD6AzMDNgD7AzgDOAD/AzoDOgEAA0ADSQEBA1QDWAELA14DYAEQA2UDZQETA3cDegEUA34DgAEYA4kDiQEbA5cDnAEcA58DrgEiA7EDsQEyA7UDtQEzA7cDtwE0A7sDuwE1A74DvwE2A8EDwgE4A8QDygE6A8wDzgFBA9AD1QFEA9cD2AFKA9oD3QFMA+MD5AFQA+YD5gFSA+gD6AFTA+oD7QFUA/AD9QFYA/cD9wFeA/sD/AFfBAEEAQFhBAMEDAFiBA8EEAFsBBIEFQFuBBwEHQFyBCEEIQF0BCMEKQF1BC8EVwF8BFkEWQGlBFsEaAGmBHAEcAG0BIEEhgG1BIgEiAG7BIwEjQG8BJAEkAG+BJIEkwG/BJUElQHBBJcElwHCBKgErAHDBK4ErgHIBLAEsQHJBLMEswHLBLcEuQHMBLsEuwHPBL0EvwHQBMEEwQHTBMMEwwHUBMUEywHVBM0EzQHcBNAE0AHdBNME1wHeBNkE2QHjBNsE3AHkBOAE4AHmBOME4wHnBO4E7gHoBPsE+wHpBQIFAgHqBQYFBgHrAAIAmgAGAAYAAAALAAsAAQAQABAAAgASABIAAwAlACkABAAsADQACQA4AD4AEgBFAEcAGQBJAEkAHABMAEwAHQBRAFQAHgBWAFYAIgBaAFoAIwBcAF4AJACKAIoAJwCWAJYAKACxALQAKQC9AL0ALQDBAMEALgDHAMcALwDUANUAMADXANcAMgDaANoAMwDcAN4ANADgAOYANwDsAOwAPgDuAO4APwD3APcAQAD8APwAQQD+AP8AQgEEAQUARAEKAQoARgENAQ0ARwEYARoASAEuATAASwEzATUATgE3ATcAUQE5ATkAUgE7ATsAUwFDAUQAVAFUAVQAVgFWAVYAVwFYAVgAWAFcAV4AWQGEAYoAXAGOAY8AYwHoAegAZQHtAe0AZgHwAfEAZwH7Af0AaQIPAg8AbAIeAiAAbQJAAkAAcAJDAkMAcQJVAlUAcgJXAlgAcwKLAowAdQKOAo4AdwKQArYAeAK7AsAAnwLFAtUApQLXAuAAtgLpAusAwALtAu0AwwLvAu8AxALxAvEAxQLzAvMAxgL2AvYAxwL4AvgAyAL6AvoAyQL8AvwAygL+Av4AywMAAwAAzAMCAw4AzQMQAxAA2gMSAxIA2wMUAxQA3AMfAx8A3QMhAyEA3gMjAyMA3wMlAyUA4AMnAycA4QMpAykA4gMrAysA4wMtAy0A5AMvAy8A5QMxAzEA5gMzAzsA5wNAA0kA8ANUA1gA+gNeA2AA/wNlA2UBAgN2A3oBAwN+A4ABCAOJA4kBCwOXA5wBDAOfA64BEgOxA7EBIgO1A7UBIwO3A7cBJAO7A7sBJQO+A78BJgPBA8oBKAPMA84BMgPQA9UBNQPXA90BOwPjA+QBQgPmA+YBRAPoA+gBRQPqA+0BRgPwA/UBSgP3A/cBUAP7A/wBUQQBBAwBUwQPBBABXwQSBBUBYQQcBB0BZQQhBCEBZwQjBCkBaAQvBFcBbwRZBFkBmARbBGgBmQRwBHABpwRzBHMBqAR1BHUBqQSBBIYBqgSIBIgBsASMBI0BsQSQBJABswSSBJMBtASVBJUBtgSXBJcBtwSoBKwBuASuBK4BvQSwBLEBvgSzBLMBwAS3BLkBwQS7BLsBxAS9BL8BxQTBBMEByATDBMMByQTFBMsBygTNBM0B0QTQBNAB0gTSBNcB0wTZBNwB2QTgBOAB3QTjBOMB3gTpBOkB3wTuBO4B4AT5BPkB4QT7BPsB4gUCBQIB4wUGBQYB5AACAXQABgAGAA8ACwALAA8AEAAQABoAEgASABoAJQAlAAIAJgAmACQAJwAnABAAKAAoAAEAKQApAAQALgAuAAgALwAvAA0AMAAwABcAMwAzAAEANAA0ACUAOAA4ABIAOQA5AAgAOgA6ABwAOwA7ABgAPAA8ABEAPQA9AAwAPgA+ABkARQBFAAMARgBGAA4ARwBHABMASQBJAAUATABMAAkAUQBSAAkAUwBTAAYAVABUAA4AVgBWABsAWgBaAAcAXABcABUAXQBdAAcAXgBeAB8AigCKAA4AlgCWAAEAsQCxABYAsgCyAAIAswCzAAEAtAC0AAIAvQC9AAcAwQDBAAkAxwDHAA4A1ADVACAA2gDaABEA3gDeACEA5ADkACAA5gDmACAA7ADsACIA7gDuABUA9wD3AA4A/AD8ACMA/gD+ACMA/wD/AA4BBAEFACMBCgEKACMBDQENAAIBGAEYAAYBGQEZABwBGgEaAAcBLgEuAA4BLwEvABYBMAEwACIBMwEzABEBNAE0ABUBNQE1AA0BNwE3AA0BOQE5AA0BQwFDABEBRAFEABUBWAFYAAEBXAFcACIBXQFdABEBXgFeABUBhAGFAA8BhgGGABoBhwGJAA8BigGKABoBjgGPABoB6AHoAB0B7QHtAAoB8AHwAB4B8QHxABQB+wH7AAsB/AH8AAoB/QH9AAsCDwIPABQCHgIgABQCQAJAAAoCQwJDAAsCVQJVABACVwJYAAECiwKMAAECjgKOABICkAKWAAIClwKXABACmAKbAAQCoQKlAAECpgKpAAgCqgKqAAwCqwKxAAMCsgKyABMCswK2AAUCuwK7AAkCvALAAAYCxQLGAAcCxwLHAAICyALIAAMCyQLJAAICygLKAAMCywLLAAICzALMAAMCzQLNABACzgLOABMCzwLPABAC0ALQABMC0QLRABAC0gLSABMC0wLTABAC1ALUABMC1QLVAAEC1wLXAAQC2ALYAAUC2QLZAAQC2gLaAAUC2wLbAAQC3ALcAAUC3QLdAAQC3gLeAAUC3wLfAAQC4ALgAAUC6gLqAAkC9gL2AAgC+AL4AA0C+gL6ABcC/AL8ABcC/gL+ABcDAAMAABcDAwMDAAkDBQMFAAkDBwMIAAkDCQMJAAEDCgMKAAYDCwMLAAEDDAMMAAYDDQMNAAEDDgMOAAYDEAMQABsDEgMSABsDFAMUABsDHwMfABIDIQMhABIDIwMjABIDJQMlAAgDJwMnAAgDKQMpAAgDKwMrAAgDLQMtAAgDLwMvAAgDMQMxABgDMwMzAAwDNAM0AAcDNQM1AAwDNgM2ABkDNwM3AB8DOAM4ABkDOQM5AB8DOgM6ABkDOwM7AB8DQANBAAoDQgNCAB0DQwNJAAsDVANYAAoDXgNgAAsDZQNlAAoDdgN2ABQDdwN6AB4DfgOAAAoDiQOJAB0DlwOXAAIDmAOYAAQDmwObAAEDnAOcAAwDnwOfAAIDoAOgACQDoQOhAAQDogOiABkDpQOlAA0DqAOoAAEDqQOpACUDqgOqABIDqwOr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AAIAAQAAAAAAAAAeACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbABsAAAAPAA8AGAAPAA8ADwAYAAAAAAAAABgAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAZACQAAAAOABUAHAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAACgAFAAoAAAAAAAAAAAAAAAAAFQAFAAAAAAAVAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAVAAUAEgAZABUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAgAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAgACAAIACwALAAsACwAMAAYABgAGAAYABgAGAAYAAQABAAEAAQABAAAAAAAAAAAAAwAHAAcABwAHAAcACAAIAAgACAAJAAkABAAGAAQABgAEAAYAAgABAAIAAQACAAEAAgABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAIAAQACAAEAAgABAAIAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAMAAgAHAAIABwACAAcAAAAAAAAAAAAAAAAAFAARABQAEQAUABEAFAARABQAEQANAAAADQAAAA0AAAALAAgACwAIAAsACAALAAgACwAIAAsACAAWAAAADAAJAAwAFwAdABcAHQAXAB0AAAAAAAIAAAAAAAAAAAAKAAoACgAKAAoACgAKAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAA4ADgAOAA4AEgAKAAoACgAFAAUABQAFAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAHAAcABwAHAAAABUAAAAOAA4ADgAOAA4ADgAkABIAEgAAAAAAAAAEAAAAAAAAAAIADAAAAAAABAAAAAAAFwAAAAAAAAAAAAAAAgAAAAAADAAQAAAADAABAAAAAwAAAAgAAAAHAAAACQAAAAAACAAHAAgAAAAAAAAAAAAAAAAAIwAAAAAAHwAEAAAAAAAAAAAAAAAAAAIAAAAAAAIADQAQAAYAAQADAAcAAwABAAkAEwABAAMAEQAAAAAAAAADAAkAFgAAABYAAAAWAAAADAAJAA8ADwAAAAAADwAAAAMABAAGAAAAAAABAAMAAAAAABoACQABAAIAAAAAAAIAAQAMAAkAAAAQABMAAAAEAAYABAAGAAAAAAAAAAEAAAABAAEAEAATAAAAAAAAAAMAAAADAAIABwACAAEAAgAHAAAAAAAfAAkAHwAJAB8ACQAgACIAAAADAAEABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAIABwACAAcAAgAHAAIABwACAAcAAgAHAAIABwACAAEAAgABAAIAAQACAAcAAgABAAsACAALAAgAAAAIAAAACAAAAAgAAAAIAAAACAAMAAkADAAJAAwACQAAAA0AAAAgACIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABAAGAAAAAQAAAAAAAgAHAAAAAAAAAAgAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwACAAAAAAAAAAAAFAARAA0AAAALABoACQAaAAkAFgAAABcAHQAAAAoAAAAAAAAABQASAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAA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BOgB/QH+Af8E7QIAAgAE7gTvAgECAgIDAgoE/AT9AgsCDAINAg4CDwIQBQAFAQUDBQYFDwISAhMCFAIVAhYCFwIYAhkCGgIbAgQCBQIGAgcCCAIJAksCHQIeAh8CIAUJAiECIwIkAiUCJwIpAocDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQOTA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MFEAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgUTA4cDiAOKA4kDiwOMA40DjgOPA5ADkQOSA5QDlQOWBREFEgTcBN0E3gTfBOkE7ATqBOsE8ATxBPIE4AThBOIE+wT+BP8FAgUEBQUCEQUHBPME9AT1BPYE9wT4BPkE+gUUBRUFFgUXBQgFCgULAigFDQIqBQ4FDAImAhwCIgUcBR0AAgcAAPoB9wKCAeEB4AHfAd4B3QHcAdsB2gHZAdgCQwJCAkECQAI4AfYB9QH0AfMB8gHxAfAB7wHuAe0B7AHrAeoB6QHoAecB5gHlAeQB4wHiAfgB+QKEAoYChQKHAoMCiAJiAfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAhACEQUPAhICEwIUAhUCFgIXAhgCGQIaAhsCSwIdAh4CHwIgBQkCIQIjAiQCJQImAicCKAIpAisCLAIuAi0DQANBA0IDQwNEA0UDRgNHA0gDSQNKA0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwN0BRADdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YFEwOHA4gDigOJA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWBREFEgTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgCDwT5BPoE+wT8BP0E/gT/BQAFAQUCBQMFBAUFBQYFBwUUBRUFFgUXBQgFCgULBQ0CKgUOBQwCHAIiBRwFHQABAAEBewABAAEASwABAAEAuwABAAEANgABAAEAEwABAAIDGQMaAAIG5AbYAAIG5gbYAAEG7gABBvAAAQbyAAIAAQAUAB0AAAABAAIALwBPAAEAAwBJAEsCegACAAAAAQbeAAEABgLLAswC3QLeA2ADaQABAAYATQBOAvID3wPhBFoAAgADAZQBlAAAAdUB1wABAi8CNQAEAAIAAgCoAKwAAQEkAScAAQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAgACABQAHQAAAmUCbgAKAAIABgBNAE0ABgBOAE4ABALyAvIABQPfA98AAwPhA+EAAgRaBFoAAQACAAQAFAAdAAACdgJ2AAoCgQKBAAsEngSlAAwAAgAGABoAGgAAABwAHAABAloCXwACAmMCYwAIAmUCbgAJAnUCdQATAAEAFAAaABwCWgJbAlwCXQJeAl8CYwJ1AnYCgQSeBJ8EoAShBKIEowSkBKUAAQXeAAEF4AABBeIAAQXkAAEF5gABBegAAQXqAAEF7AABBe4AAQXwAAEF8gABBfQAAQX2AAEF+AABBfoAAgX8BgIAAgYCBggAAgYIBg4AAgYOBhQAAgYUBhoAAgYaBiAAAgYgBiYAAgYmBiwAAgYsBjIAAgYyBjgAAgY4Bj4AAwY+BkQGSgADBkgGTgZUAAMGUgZYBl4AAwZcBmIGaAADBmYGbAZyAAMGcAZ2BnwAAwZ6BoAGhgADBoQGigaQAAQGjgaUBpoGoAAEBpwGogaoBq4ABQaqBrAGtga8BsIABQa8BsIGyAbOBtQABQbOBtQG2gbgBuYABQbgBuYG7AbyBvgABQbyBvgG/gcEBwoABQcEBwoHEAcWBxwABQcWBxwHIgcoBy4ABQcoBy4HNAc6B0AABQc6B0AHRgdMB1IABgdMB1IHWAdeB2QHagAGB2IHaAduB3QHegeAAAYHeAd+B4QHigeQB5YABgeOB5QHmgegB6YHrAAGB6QHqgewB7YHvAfCAAYHugfAB8YHzAfSB9gABgfQB9YH3AfiB+gH7gAHCC4H5gfsB/IH+Af+CAQABwgmB/oIAAgGCAwIEggYAAEA6wAKAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCFAIYAhwCJAIoAiwCNAJAAkgCUALsAvAC9AL4AvwDAAMEAwgDDAMQAxQDGAMcAyADJAMoAywDMAM0AzgDqAOsA7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD/AQABAQECAQMBBAEFAQYBBwEwATQBNgE4AToBPAFCAUQBRgFKAU0BWgKNAo8CqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLIAsoCzALOAtAC0gLUAtYC2ALaAtwC3gLgAuIC5ALmAugC6gLsAu4C8ALyAvUC9wL5AvsC/QL/AwEDAwMFAwcDCgMMAw4DEAMSAxQDFgMYAxoDHAMeAyADIgMkAyYDKAMqAywDLgMwAzIDNAM3AzkDOwM9Az8DrwOwA7EDsgO0A7UDtgO3A7gDuQO6A7sDvAO9A9QD1QPWA9cD2APZA9oD2wPcA90D3gPfA+AD4QPiA+MD5QPnA+kD6wQABAIEBAQSBBkEHwQlBI8EkASUBJgFGQUbAAEA+gAIAAoAFAAVABYAFwAYABkAGgAbABwAHQAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AZQBnAIEAgwCEAIwAjwCRAJMAsQCyALMAtAC1ALYAtwC4ALkAugDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgA6QEvATMBNQE3ATkBOwFBAUMBRQFJAUsBTAFYAVkBpwGtAbIBtQKLAowCjgKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgLHAskCywLNAs8C0QLTAtUC1wLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvMC9AL2AvgC+gL8Av4DAAMCAwQDBgMJAwsDDQMPAxEDEwMVAxcDGQMbAx0DHwMhAyMDJQMnAykDKwMtAy8DMQMzAzUDNgM4AzoDPAM+A5cDmAOZA5oDmwOcA50DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgO+A78DwAPBA8IDwwPEA8UDxgPHA8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA+QD5gPoA+oD/wQBBAMEGAQeBCQEjgSTBJcFGAUaAcwAAgBNAc0AAgBQAc4AAwBKAE0BzwADAEoAUAABAAEASgHLAAIASgHRAAIAWAHQAAIAWAABAAMASgBXAJUAAAABAAEAAQABAAAAAwS3AAIArQLNAAIAqQS9AAIArQTKAAIAqQS4AAIArQLOAAIAqQSnAAIAqQS+AAIArQRaAAIArQTLAAIAqQM8AAIAqQM+AAIAqQM9AAIAqQM/AAIAqQS2AAIAqQS7AAIBygS5AAIArQSmAAIAqQLnAAIBygPxAAIAqQTFAAIArQMfAAIBygTQAAIArQTVAAIArQTTAAIAqgM2AAIAqQTZAAIArQS8AAIBygS6AAIArQPyAAIAqQTGAAIArQMgAAIBygTRAAIArQTWAAIArQTUAAIAqgM3AAIAqQTaAAIArQS/AAIAqQL4AAIBygTBAAIArQL6AAIAqQL8AAIBygTDAAIArQMVAAIAqQMbAAIBygTOAAIArQPmAAIAqQTXAAIArQPkAAIAqATAAAIAqQL5AAIBygTCAAIArQL7AAIAqQL9AAIBygTEAAIArQMWAAIAqQMcAAIBygTPAAIArQPnAAIAqQTYAAIArQPlAAIAqAMPAAIAqQMRAAIBygTMAAIArQSyAAIArAMQAAIAqQMSAAIBygTNAAIArQSzAAIArAMCAAIAqQMEAAIBygTHAAIArQSoAAIAqAKgAAIAqgKqAAIAqQSBAAIArQPqAAIAqASDAAIAqwSFAAIAqgMDAAIAqQMFAAIBygTIAAIArQSpAAIAqAK7AAIAqgLFAAIAqQSCAAIArQPrAAIAqASEAAIAqwSGAAIAqgK4AAIAqQK3AAIAqARYAAIAqwLsAAIAqgSvAAIArARpAAIAqQRxAAIArQRrAAIAqARtAAIAqwRvAAIAqgRqAAIAqQRyAAIArQRsAAIAqARuAAIAqwRwAAIAqgR3AAIAqQR/AAIArQR5AAIAqAR7AAIAqwR9AAIAqgR4AAIAqQSAAAIArQR6AAIAqAR8AAIAqwR+AAIAqgKRAAIAqQQvAAIArQKQAAIAqAQxAAIAqwKTAAIAqgSqAAIArAKZAAIAqQRHAAIArQKYAAIAqARJAAIAqwRLAAIAqgSsAAIArAKdAAIAqQRZAAIArQKcAAIAqARXAAIAqwLrAAIAqgSuAAIArAKsAAIAqQQwAAIArQKrAAIAqAQyAAIAqwKuAAIAqgSrAAIArAK0AAIAqQRIAAIArQKzAAIAqARKAAIAqwRMAAIAqgStAAIArAK9AAIAqQRcAAIArQK8AAIAqAReAAIAqwK/AAIAqgSxAAIArALCAAIAqQR0AAIArQLBAAIAqAR2AAIAqwMmAAIAqgS1AAIArAKiAAIAqQRbAAIArQKhAAIAqARdAAIAqwKkAAIAqgSwAAIArAKnAAIAqQRzAAIArQKmAAIAqAR1AAIAqwMlAAIAqgS0AAIArATJAAMAqgCpBNIAAwCqAKkAAgARACUAKQAAACsALQAFAC8ANAAIADYAOwAOAD0APgAUAEUASQAWAEsATQAbAE8AVAAeAFYAWwAkAF0AXgAqAIEAgQAsAIMAgwAtAIYAhgAuAIkAiQAvAI0AjQAwAJgAmwAxANAA0AA1AAA=\",\r\n \"Roboto-Medium.ttf\": \"AAEAAAARAQAABAAQR0RFRqWLoiAAAb9IAAACWEdQT1Pk1zcKAAHBoAAAZixHU1VChRYO9AACJ8wAABX2T1MvMpfnsYsAAAGYAAAAYGNtYXDOyFo6AAAWdAAABoJjdnQgO/gmfQAAL1AAAAD+ZnBnbagFhDIAABz4AAAPhmdhc3AACAAZAAG/PAAAAAxnbHlmoVpeAgAAOpAAAYGiaGVhZAatHSkAAAEcAAAANmhoZWEK9grYAAABVAAAACRobXR4JpFVzgAAAfgAABR8bG9jYSpiho0AADBQAAAKQG1heHAIzxDGAAABeAAAACBuYW1lQlx1PgABvDQAAALmcG9zdP9tAGQAAb8cAAAAIHByZXB5WM7TAAAsgAAAAs4AAQAAAAMBSOm9QH9fDzz1ABkIAAAAAADE8BEuAAAAAN8Gv236Jv3VCWEIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJbvom/j4JYQABAAAAAAAAAAAAAAAAAAAFHwABAAAFHwCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA4wAZAAAAAAAAAAAAf0AAAH9AAACHgCMAo4AYATTAFYEjABkBeQAZAUhAFUBVwBSAsUAgQLMACcDjAAcBHEAQgHKACICuABQAjkAhgMfAAEEjABoBIwAqgSMAFIEjABOBIwANwSMAH8EjABzBIwARASMAGcEjABdAhwAfwHrADMEEgA+BIAAjwQoAH4D5AA7By0AWwVOABEFDQCUBTkAZgU5AJQEhQCUBGgAlAVzAGsFrQCUAkQApQRyAC8FDgCUBFIAlAb/AJQFrQCUBYMAZQUbAJQFgwBgBQkAlATYAEsE4AAtBTwAgAUqABEHCwAvBQ0AJgTjAAgE0wBQAiwAhQNVABICLAALA24ANgOVAAICkAA4BFAAVgR/AH0ELQBOBIIAUARJAFEC0wArBIkAUgRyAHoCCgB8AgL/qwQsAH0CCgCMBvgAfAR0AHoEigBOBH8AfQSHAFAC1AB9BB4ASQKqAAoEcwB3A/gAFgXwACMEBgAfA+sADAQGAFECqwA4Af0ArwKrABwFTQB1Ah8AhQSCAGcEtQBfBZ4AXARAAA0B+ACJBPkAXAOSAGMGSQBaA5AAjgPjAFcEawB/BkoAWQPaAJ0DDwCBBEoAXAL1AD0C9QA3ApQAbwTBAJMD6gBJAkQAkAITAGwC9QCCA6cAeQPjAF4FygBfBiIAUwZcAGYD5QBGB37//ARCAEwFgQBpBM8AlQTrAIoGwgBIBKQAaASRAEMEhgBOBJEAgQTsAFAFsAAfAhcAkASaAI0EZAAgAlIAIAWXAJAEhgB9B7AAZQc+AFkCBwCJBY0AVQLQ/94FkQBbBJ0ATQWjAIAE5gB3AiX/rgQ5AFcD3gCQA6oAbgPaAJ0DfgB1AgoAgQKqAHgCTAApA84AdwMoAEsCcwCJAAD8kwAA/WIAAPx0AAD9OgAA/AgAAP0eAmsAzQQ7AG4CRACQBHQAmQXCABoFegBcBTUAIASMAGoFrgCZBIwARwX5AEwFsQBGBVkAbASEAFYEyACXBA0AHgSGAFEEZQBiBA8AWQSGAH0EpwB2AqUAowRoABUEGgBnBPwAMASGAIAEMwBQBI4AUAQqADwEXQB/BdEARgXMAFIGlABlBLQAeASH/+EGeQArBf0AJAVTAGcIgQAtCIwAmQZRAC0FpQCPBQcAkAX9ACYHqQAVBNsASQWmAJIFqAAsBQsAMgZfAE4F+ACOBYUAkQeaAJUH+gCVBiEAFQbwAJkFAgCQBUgAYwdiAKEE6AAXBIAAWgSLAI8DWwCDBPIAJwaHACAEFwBOBJIAhARsAI8ElAAgBgIAjwSRAIQEkgCEA/oAIwXUAFMEzwCEBGUAYAaNAIQG8QB9BSEAIAZvAI8EaQCPBDkAUAaCAJIEcAAuBHL/1wQ5AFIG1gAdBuQAhASG/+gEkgCEB1gAiAZqAHIEaP/hBygAmAYCAIYFFgAaBGMACwdLAKwGPQCaBuUAfgXdAIEJKgClB+4AkAQgACgD9QAyBXoAYASIAE0FGAAQBA0AHgV6AGAEhgBOB1QAiAZWAHUHWACIBmoAcgUQAGcERwBdBPsAcAAA/HAAAPx1AAD9gQAA/aYAAPomAAD6UQYgAJIFEwCEBGj/4QUQAJQEhgB9BGsAjwOjAH0E6gCZBCQAfQgjABUG4AAgBckAmQT7AI8FLgCRBKwAjQaUADQFoAA8BiAAlAUHAIQH3QCUBa0AfQhJAJcG7wB9BjcAZwUEAGAFOQAmBEEAHwcoACkFbwAnBfIAkQTcAGAFcACBBHQAdQWFAIkGGwAKBMT/ywUgAJEEeACNBh8ALAUUACAFrQCZBIYAfQYqAJQFEQCEB3UAlAZ0AI8FjQBVBKMAWwSkAF0EwwAsA6oAJAVpACYEcQAfBPkATwbzAGgG2wBfBlEAPQUoAC8EgwBKBEgAcwe8AEIGpAA/B/UAlAaeAHQFBgBcBC8AVQWoACEFHQBEBU4AfQZGACwFOwAgAxsAZAQUAAAIKQAABBQAAAgpAAACuQAAAgoAAAFcAAAEfwAAAjAAAAGiAAABAAAAANEAAAAAAAACtwBQArcAUAUjAJwGKgB7A5oACAG/AGUBugA3Ac4ANQGjAEsDCwBtAxMAQwMAADUEWwA/BJoAXQLMAIoD/QCNBaoAjQHPAF4HrgBQAnQAbAJpAFUDmQArAvUATAL1ADYC9QBQAvUATgL1ADcC9QBLAvUARwNcAGcC9QBMAvUAggL1AD0C9QA3AvUANgL1AFAC9QBOAvUANwL1AEsC9QBHBLUAYgZuACMGvwCZCJUAlAY7ACMGmwB9BIwAXAXqACMELQAqBJsAJAViAE8FfgArBeQAbgPjAEUIKQCQBQgAbwUUAJYGNwBcBt4AVgbQAF4GrABcBJMAYQWKAKYE3gA/BIAAnASdADsIUgBhAjL/pwSRAGUEgACPBBIAPQQoAH0EDgAlAlEAnAKOAGQB6QBHBRkAKwStABoEvQArBygAKwcoACsFDwArBrcASQAAAAAIMABZCDUAXAL1AD0C9QCCAvUATAQdAE8EHQBXBB0AOAQdAF8EHQBmBB0AMwQdAD0EHQBDBB0AmAQdAFgEKwBBBD4ABgRcABMGCQAnBHkACASIAGkEPwAlBDcAPwRkAHUEvQBNBGsAdgS9AE4E3AB2BgUAdgO3AHYEXgB2A9YAJgH+AIYE3QB2BKcAVgPIAHYENwA/BGgAOgOlAAoDvAB2BHkACAS9AE4EeQAIA50ARgTZAHYEHgBEBaYATwVYAE8E4ABeBZIAIwSAAE8HVgAkB1gAdgWZACUE2AB2BHIAdgVeACcGRQAbBEYAQwTiAHYEXQB2BMsAJARMAB8FYgB2BI0AQwaEAHYHDgB2BWEACQYWAHYEZwB2BIAAPQaPAHYEhABCBCgACwajABsEoAB2BQ0AdgV0ACEF+ABOBFYABgTEABMGlwAjBI0AQwSNAHYGAAAOBM4ATQRHAEMEvQBOBGgAOgP0AEUILQB2BPQAKAL1ADcC9QA2AvUAUAL1AE4C9QA3AvUASwL1AEcDtgCNAq4AmAPgAHYEOgAMBLYAVgVBAJkFKACZBDAAgQU1AJkEKACBBHoAdgSAAE8EYAB2BJoACAH+AJADoQB1AAD8ngP3AHoD+v9RBAsAeQP6AHkDvAB2A50AdQOdAHUC9QBMAvUANgL1AFAC9QBOAvUANwL1AEsC9QBHBXMAaQWeAGkFfwCZBdkAaQXaAGkEKACWBIIAawRYAA8EuwA0BGsAZwQuAEIDoQB2AboAYgaYAE4ErwBuAgz/pwSMADgEjABoBIwALASMAGIEjABfBIwANASMAGwEjABZBIwAZwSMAOYCJv+uAiX/rgIXAJACF//6AhcAkARgAHYE5gBgBDAAOQSIAH0EPgBPBJUATgSRAE4EnQBJBJIAfQSaAE4ESQBRBIkAUARZADQDrQBhBQwAXwPEAAUGRv/sBAcAdgS9AE4FDgA0BNwAdgH9AAACuABQBVcAFwVXABcEkP/1BOAALQKq/+sFTgARBU4AEQVOABEFTgARBU4AEQVOABEFTgARBTkAZgSFAJQEhQCUBIUAlASFAJQCRP/LAkQApQJE/8oCRP++Ba0AlAWDAGUFgwBlBYMAZQWDAGUFgwBlBTwAgAU8AIAFPACABTwAgATjAAgEUABWBFAAVgRQAFYEUABWBFAAVgRQAFYEUABWBC0ATgRJAFEESQBRBEkAUQRJAFECF/+1AhcAkAIX/7MCF/+oBHQAegSKAE4EigBOBIoATgSKAE4EigBOBHMAdwRzAHcEcwB3BHMAdwPrAAwD6wAMBU4AEQRQAFYFTgARBFAAVgVOABEEUABWBTkAZgQtAE4FOQBmBC0ATgU5AGYELQBOBTkAZgQtAE4FOQCUBRgAUASFAJQESQBRBIUAlARJAFEEhQCUBEkAUQSFAJQESQBRBIUAlARJAFEFcwBrBIkAUgVzAGsEiQBSBXMAawSJAFIFcwBrBIkAUgWtAJQEcgB6AkT/tAIX/50CRP/RAhf/uwJE/90CF//GAkQAGAIK//8CRACfBrUApQQLAHwEcgAvAiX/rgUOAJQELAB9BFIAlAIKAIwEUgCUAgoAWQRSAJQCoACMBFIAlALmAIwFrQCUBHQAegWtAJQEdAB6Ba0AlAR0AHoEdP+jBYMAZQSKAE4FgwBlBIoATgWDAGUEigBOBQkAlALUAH0FCQCUAtQAUgUJAJQC1AA3BNgASwQeAEkE2ABLBB4ASQTYAEsEHgBJBNgASwQeAEkE2ABLBB4ASQTgAC0CqgAKBOAALQKqAAoE4AAtAtIACgU8AIAEcwB3BTwAgARzAHcFPACABHMAdwU8AIAEcwB3BTwAgARzAHcFPACABHMAdwcLAC8F8AAjBOMACAPrAAwE4wAIBNMAUAQGAFEE0wBQBAYAUQTTAFAEBgBRB37//AbCAEgFgQBpBIYATgR6/6UEev+lBD8AJQSaAAgEmgAIBJoACASaAAgEmgAIBJoACASaAAgEgABPA+AAdgPgAHYD4AB2A+AAdgH+/6kB/gCGAf7/pwH+/5wE3AB2BL0ATgS9AE4EvQBOBL0ATgS9AE4EiABpBIgAaQSIAGkEiABpBD4ABgSaAAgEmgAIBJoACASAAE8EgABPBIAATwSAAE8EegBhA+AAdgPgAHYD4AB2A+AAdgPgAHYEpwBWBKcAVgSnAFYEpwBWBN0AdgH+/5EB/v+vAf7/ugH+ABcB/gB9A9YAJgReAHYDtwB2A7cAdgO3AHYDtwB2BNwAdgTcAHYE3AB2BL0ATgS9AE4EvQBOBGQAdQRkAHUEZAB1BDcAPwQ3AD8ENwA/BDcAPwQ/ACUEPwAlBD8AJQSIAGkEiABpBIgAaQSIAGkEiABpBIgAaQYJACcEPgAGBD4ABgQrAEEEKwBBBCsAQQVOABEE6f9CBhH/SgKo/04Fl/+0BUf/QQVt/8ICpf+FBU4AEQUNAJQEhQCUBNMAUAWtAJQCRAClBQ4AlAb/AJQFrQCUBYMAZQUbAJQE4AAtBOMACAUNACYCRP++BOMACASEAFYEZQBiBIYAfQKlAKMEXQB/BJoAjQSKAE4EwQCTA/gAFgRZADQCpf/DBF0AfwSKAE4EXQB/BpQAZQSFAJQEdACZBNgASwJEAKUCRP++BHIALwUoAJkFDgCUBQsAMgVOABEFDQCUBHQAmQSFAJQFpgCSBv8AlAWtAJQFgwBlBa4AmQUbAJQFOQBmBOAALQUNACYEUABWBEkAUQSSAIQEigBOBH8AfQQtAE4D6wAMBAYAHwRJAFEDWwCDBB4ASQIKAHwCF/+oAgL/qwRsAI8D6wAMBwsALwXwACMHCwAvBfAAIwcLAC8F8AAjBOMACAPrAAwBVwBSAo4AYAQ8AIwCJf+qAboANwb/AJQG+AB8BU4AEQRQAFYEhQCUBaYAkgRJAFEEkgCEBbEARgXMAFIFGAAQBA3/8wh1AE4JbgBlBNsASQQXAE4FOQBmBC0ATgTjAAgEDQAeAkQApQepABUGhwAgAkQApQVOABEEUABWBU4AEQRQAFYHfv/8BsIASASFAJQESQBRBY0AVQQ5AFcEOQBXB6kAFQaHACAE2wBJBBcATgWmAJIEkgCEBaYAkgSSAIQFgwBlBIoATgV6AGAEiABNBXoAYASIAE0FSABjBDkAUAULADID6wAMBQsAMgPrAAwFCwAyA+sADAWFAJEEZQBgBvAAmQZvAI8EggBQBU4AEQRQAFYFTgARBFAAVgVOABEEUABWBU4AEQRQ/58FTgARBFAAVgVOABEEUABWBU4AEQRQAFYFTgARBFAAVgVOABEEUABWBU4AEQRQAFYFTgARBFAAVgVOABEEUABWBIUAlARJAFEEhQCUBEkAUQSFAJQESQBRBIUAlARJAFEEhf/fBEn/lASFAJQESQBRBIUAlARJAFEEhQCUBEkAUQJEAKUCFwCQAkQAlQIKAHgFgwBlBIoATgWDAGUEigBOBYMAZQSKAE4FgwAsBIr/qgWDAGUEigBOBYMAZQSKAE4FgwBlBIoATgWRAFsEnQBNBZEAWwSdAE0FkQBbBJ0ATQWRAFsEnQBNBZEAWwSdAE0FPACABHMAdwU8AIAEcwB3BaMAgATmAHcFowCABOYAdwWjAIAE5gB3BaMAgATmAHcFowCABOYAdwTjAAgD6wAMBOMACAPrAAwE4wAIA+sADASgAFAE4AAtA/oAIwWFAJEEZQBgBHQAmQNbAIMGGwAKBMT/ywRyAHoFAv/XBQL/1wR0//QDW//fBTz/8wRE/8kE4wAIBA0AHgUNACYEBgAfBGUAYgRoAAEGKgB7BIwAUgSMAE4EjAA3BIwAfwSgAIcEtAB7BKAAXQS0AHwFcwBrBIkAUgWtAJQEdAB6BU4AEQRQAA4EhQBOBEkAAwJE/vsCF/7lBYMAZQSKABkFCQA1AtT/cwU8AHcEcwAUBOv/CwUNAJQEfwB9BTkAlASCAFAFOQCUBIIAUAWtAJQEcgB6BQ4AlAQsAH0FDgCUBCwAfQRSAJQCCgB4Bv8AlAb4AHwFrQCUBHQAegWDAGUFGwCUBH8AfQUJAJQC1ABxBNgASwQeAEkE4AAtAqoACgU8AIAFKgARA/gAFgUqABED+AAWBwsALwXwACME0wBQBAYAUQXJ/mwEmgAIBBz/YgUZ/2sCOv9uBMf/mAR6/yAE6v+rBJoACARgAHYD4AB2BCsAQQTdAHYB/gCGBF4AdgYFAHYE3AB2BL0ATgRrAHYEPwAlBD4ABgRcABMB/v+cBD4ABgPgAHYDvAB2BDcAPwH+AIYB/v+cA9YAJgReAHYETAAfBJoACARgAHYDvAB2A+AAdgTiAHYGBQB2BN0AdgS9AE4E2QB2BGsAdgSAAE8EPwAlBFwAEwRGAEME3QB2BIAATwQ+AAYGAAAOBOIAdgRMAB8FpgBPBdQAhgZG/+wEvQBOBDcAPwYJACcGCQAnBgkAJwQ+AAYFTgARBFAAVgSFAJQESQBRBJoACAPgAHYCFwB4AAAAAgAAAAMAAAAUAAMAAQAAABQABAZuAAAA9ACAAAYAdAAAAAIADQB+AKAArACtAL8AxgDPAOYA7wD+AQ8BEQElAScBMAFTAV8BZwF+AX8BjwGSAaEBsAHwAf8CGwI3AlkCvALHAskC3QLzAwEDAwMJAw8DIwOKA4wDkgOhA7ADuQPJA84D0gPWBCUELwRFBE8EYgRvBHkEhgSfBKkEsQS6BM4E1wThBPUFAQUQBRMeAR4/HoUe8R7zHvkfTSAJIAsgESAVIB4gIiAnIDAgMyA6IDwgRCB0IH8gpCCqIKwgsSC6IL0hBSETIRYhIiEmIS4hXiICIgYiDyISIhoiHiIrIkgiYCJlJcruAvbD+wT+///9//8AAAAAAAIADQAgAKAAoQCtAK4AwADHANAA5wDwAP8BEAESASYBKAExAVQBYAFoAX8BjwGSAaABrwHwAfoCGAI3AlkCvALGAskC2ALzAwADAwMJAw8DIwOEA4wDjgOTA6MDsQO6A8oD0QPWBAAEJgQwBEYEUARjBHAEegSIBKAEqgSyBLsEzwTYBOIE9gUCBREeAB4+HoAeoB7yHvQfTSAAIAogECATIBcgICAlIDAgMiA5IDwgRCB0IH8goyCmIKsgsSC5ILwhBSETIRYhIiEmIS4hWyICIgYiDyIRIhoiHiIrIkgiYCJkJcruAfbD+wH+///8//8AAQAA//b/5AHp/8IB3f/BAAAB0AAAAcsAAAHHAAABxQAAAcMAAAG7AAABvf8W/wf/Bf74/usB/wAAAAD+Zf5EATT92P3X/cn9tP2o/af9ov2d/YoAAAAPAA4AAAAA/QoAAP/v/P78+wAA/LoAAPyyAAD8pwAA/KEAAPyZAAD8kQAA/zkAAP82AAD8XgAA5fPls+Vk5Y/k+OWN5Y7hcuFz4W8AAOFs4WvhaeFh47rhWeOy4VDhIuEdAADhAgAA4P3g9uD14K7goeCf4JTflOCJ4F3fut6s367frd+m36Pfl99732TfYdv9E8cLBwbLAtMB1wABAAAAAAAAAAAAAAAAAAAAAADkAAAA7gAAARgAAAEyAAABMgAAATIAAAF0AAAAAAAAAAAAAAAAAAABdAF+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAXQBkAAAAagAAAAAAAABwAAAAggAAAIwAAACUgAAAmIAAAKOAAACmgAAAr4AAALOAAAC4gAAAAAAAAAAAAAAAAAAAAAAAAAAAtIAAAAAAAAAAAAAAAAAAAAAAAAAAALCAAACwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQApECkgKTApQClQCBAowCoAKhAqICowKkAqUAggCDAqYCpwKoAqkCqgCEAIUCqwKsAq0CrgKvArAAhgCHArsCvAK9Ar4CvwLAAIgAiQLBAsICwwLEAsUAigKLAIsAjAKNAI0C9AL1AvYC9wL4AvkAjgL6AvsC/AL9Av4C/wMAAwEAjwCQAwIDAwMEAwUDBgMHAwgAkQCSAwkDCgMLAwwDDQMOAJMAlAMdAx4DIQMiAyMDJAKOAo8ClgKxAzwDPQM+Az8DGwMcAx8DIACuAK8DlwCwA5gDmQOaALEAsgOhA6IDowCzA6QDpQC0A6YDpwC1A6gAtgOpALcDqgOrALgDrAC5ALoDrQOuA68DsAOxA7IDswO0AMQDtgO3AMUDtQDGAMcAyADJAMoAywDMA7gAzQDOA/UDvgDSA78A0wPAA8EDwgPDANQA1QDWA8UD9gPGANcDxwDYA8gDyQDZA8oA2gDbANwDywPEAN0DzAPNA84DzwPQA9ED0gDeAN8D0wPUAOoA6wDsAO0D1QDuAO8A8APWAPEA8gDzAPQD1wD1A9gD2QD2A9oA9wPbA/cD3AECA90BAwPeA98D4APhAQQBBQEGA+ID+APjAQcBCAEJBJID+QP6ARcBGAEZARoD+wP8A/4D/QEoASkBKgErBJEBLAEtAS4BLwEwBJMElAExATIBMwE0A/8EAAE1ATYBNwE4BJUElgQBBAIEiASJBAMEBASXBJgEkAFMAU0EjgSPBAUEBgQHAU4BTwFQAVEBUgFTAVQBVQSKBIsBVgFXAVgEEgQRBBMEFAQVBBYEFwFZAVoEjASNBCwELQFbAVwBXQFeBJkEmgFfBC4EmwFvAXABgQGCBJ0EnAGnBIcBrQAAQEqZmJeWh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNRUE9OTUxLSklIR0YoHxAKCSwBsQsKQyNDZQotLACxCgtDI0MLLSwBsAZDsAdDZQotLLBPKyCwQFFYIUtSWEVEGyEhWRsjIbBAsAQlRbAEJUVhZIpjUlhFRBshIVlZLSwAsAdDsAZDCy0sS1MjS1FaWCBFimBEGyEhWS0sS1RYIEWKYEQbISFZLSxLUyNLUVpYOBshIVktLEtUWDgbISFZLSywAkNUWLBGKxshISEhWS0ssAJDVFiwRysbISEhWS0ssAJDVFiwSCsbISEhIVktLLACQ1RYsEkrGyEhIVktLCMgsABQiopksQADJVRYsEAbsQEDJVRYsAVDi1mwTytZI7BiKyMhI1hlWS0ssQgADCFUYEMtLLEMAAwhVGBDLSwBIEewAkMguBAAYrgQAGNXI7gBAGK4EABjV1pYsCBgZllILSyxAAIlsAIlsAIlU7gANSN4sAIlsAIlYLAgYyAgsAYlI2JQWIohsAFgIxsgILAGJSNiUlgjIbABYRuKISMhIFlZuP/BHGCwIGMjIS0ssQIAQrEjAYhRsUABiFNaWLgQALAgiFRYsgIBAkNgQlmxJAGIUVi4IACwQIhUWLICAgJDYEKxJAGIVFiyAiACQ2BCAEsBS1JYsgIIAkNgQlkbuEAAsICIVFiyAgQCQ2BCWbhAALCAY7gBAIhUWLICCAJDYEJZuUAAAQBjuAIAiFRYsgIQAkNgQlmxJgGIUVi5QAACAGO4BACIVFiyAkACQ2BCWblAAAQAY7gIAIhUWLICgAJDYEJZsSgBiFFYuUAACABjuBAAiFRYuQACAQCwAkNgQllZWVlZWVmxAAJDVFhACgVACEAJQAwCDQIbsQECQ1RYsgVACLoBAAAJAQCzDAENARuxgAJDUliyBUAIuAGAsQlAG7gBALACQ1JYsgVACLoBgAAJAUAbuAGAsAJDUliyBUAIuAIAsQlAG7IFQAi6AQAACQEAWVlZuEAAsICIVblAAAIAY7gEAIhVWlizDAANARuzDAANAVlZWUJCQkJCLSxFsQJOKyOwTysgsEBRWCFLUViwAiVFsQFOK2BZGyNLUViwAyVFIGSKY7BAU1ixAk4rYBshWRshWVlELSwgsABQIFgjZRsjWbEUFIpwRbBPKyOxYQYmYCuKWLAFQ4tZI1hlWSMQOi0ssAMlSWMjRmCwTysjsAQlsAQlSbADJWNWIGCwYmArsAMlIBBGikZgsCBjYTotLLAAFrECAyWxAQQlAT4APrEBAgYMsAojZUKwCyNCsQIDJbEBBCUBPwA/sQECBgywBiNlQrAHI0KwARaxAAJDVFhFI0UgGGmKYyNiICCwQFBYZxtmWWGwIGOwQCNhsAQjQhuxBABCISFZGAEtLCBFsQBOK0QtLEtRsUBPK1BbWCBFsQFOKyCKikQgsUAEJmFjYbEBTitEIRsjIYpFsQFOKyCKI0REWS0sS1GxQE8rUFtYRSCKsEBhY2AbIyFFWbEBTitELSwjRSCKRSNhIGSwQFGwBCUgsABTI7BAUVpasUBPK1RaWIoMZCNkI1NYsUBAimEgY2EbIGNZG4pZY7ECTitgRC0sAS0sAC0sBbELCkMjQ2UKLSyxCgtDI0MLAi0ssAIlY2awAiW4IABiYCNiLSywAiVjsCBgZrACJbggAGJgI2ItLLACJWNnsAIluCAAYmAjYi0ssAIlY2awIGCwAiW4IABiYCNiLSwjSrECTistLCNKsQFOKy0sI4pKI0VksAIlZLACJWFksANDUlghIGRZsQJOKyOwAFBYZVktLCOKSiNFZLACJWSwAiVhZLADQ1JYISBkWbEBTisjsABQWGVZLSwgsAMlSrECTiuKEDstLCCwAyVKsQFOK4oQOy0ssAMlsAMlirBnK4oQOy0ssAMlsAMlirBoK4oQOy0ssAMlRrADJUZgsAQlLrAEJbAEJbAEJiCwAFBYIbBqG7BsWSuwAyVGsAMlRmBhsIBiIIogECM6IyAQIzotLLADJUewAyVHYLAFJUewgGNhsAIlsAYlSWMjsAUlSrCAYyBYYhshWbAEJkZgikaKRmCwIGNhLSywBCawBCWwBCWwBCawbisgiiAQIzojIBAjOi0sIyCwAVRYIbACJbECTiuwgFAgYFkgYGAgsAFRWCEhGyCwBVFYISBmYbBAI2GxAAMlULADJbADJVBaWCCwAyVhilNYIbAAWRshWRuwB1RYIGZhZSMhGyEhsABZWVmxAk4rLSywAiWwBCVKsABTWLAAG4qKI4qwAVmwBCVGIGZhILAFJrAGJkmwBSawBSawcCsjYWWwIGAgZmGwIGFlLSywAiVGIIogsABQWCGxAk4rG0UjIVlhZbACJRA7LSywBCYguAIAYiC4AgBjiiNhILBdYCuwBSURihKKIDmKWLkAXRAAsAQmY1ZgKyMhIBAgRiCxAk4rI2EbIyEgiiAQSbECTitZOy0suQBdEACwCSVjVmArsAUlsAUlsAUmsG0rsV0HJWArsAUlsAUlsAUlsAUlsG8ruQBdEACwCCZjVmArILAAUliwUCuwBSWwBSWwByWwByWwBSWwcSuwAhc4sABSsAIlsAFSWliwBCWwBiVJsAMlsAUlSWAgsEBSWCEbsABSWCCwAlRYsAQlsAQlsAclsAclSbACFzgbsAQlsAQlsAQlsAYlSbACFzhZWVlZWSEhISEhLSy5AF0QALALJWNWYCuwByWwByWwBiWwBiWwDCWwDCWwCSWwCCWwbiuwBBc4sAclsAclsAcmsG0rsAQlsAQlsAQmsG0rsFArsAYlsAYlsAMlsHErsAUlsAUlsAMlsAIXOCCwBiWwBiWwBSWwcStgsAYlsAYlsAQlZbACFziwAiWwAiVgILBAU1ghsEBhI7BAYSMbuP/AUFiwQGAjsEBgI1lZsAglsAglsAQmsAIXOLAFJbAFJYqwAhc4ILAAUliwBiWwCCVJsAMlsAUlSWAgsEBSWCEbsABSWLAGJbAGJbAGJbAGJbALJbALJUmwBBc4sAYlsAYlsAYlsAYlsAolsAolsAclsHErsAQXOLAEJbAEJbAFJbAHJbAFJbBxK7ACFzgbsAQlsAQluP/AsAIXOFlZWSEhISEhISEhLSywBCWwAyWHsAMlsAMliiCwAFBYIbBlG7BoWStksAQlsAQlBrAEJbAEJUkgIGOwAyUgY1GxAAMlVFtYISEjIQcbIGOwAiUgY2EgsFMrimOwBSWwBSWHsAQlsAQmSrAAUFhlWbAEJiABRiMARrAFJiABRiMARrAAFgCwACNIAbAAI0gAILABI0iwAiNIASCwASNIsAIjSCOyAgABCCM4sgIAAQkjOLECAQewARZZLSwjEA0MimMjimNgZLlAAAQAY1BYsAA4GzxZLSywBiWwCSWwCSWwByawdisjsABUWAUbBFmwBCWwBiawdyuwBSWwBSawBSWwBSawdiuwAFRYBRsEWbB3Ky0ssAclsAolsAolsAgmsHYrirAAVFgFGwRZsAUlsAcmsHcrsAYlsAYmsAYlsAYmsHYrCLB3Ky0ssAclsAolsAolsAgmsHYriooIsAQlsAYmsHcrsAUlsAUmsAUlsAUmsHYrsABUWAUbBFmwdystLLAIJbALJbALJbAJJrB2K7AEJrAEJgiwBSWwByawdyuwBiWwBiawBiWwBiawdisIsHcrLSwDsAMlsAMlSrAEJbADJUoCsAUlsAUmSrAFJrAFJkqwBCZjiopjYS0ssV0OJWArsAwmEbAFJhKwCiU5sAclObAKJbAKJbAJJbB8K7AAULALJbAIJbAKJbB8K7AAUFRYsAclsAslh7AEJbAEJQuwCiUQsAklwbACJbACJQuwByUQsAYlwRuwByWwCyWwCyW4//+wdiuwBCWwBCULsAclsAolsHcrsAolsAglsAgluP//sHYrsAIlsAIlC7AKJbAHJbB3K1mwCiVGsAolRmCwCCVGsAglRmCwBiWwBiULsAwlsAwlsAwmILAAUFghsGobsGxZK7AEJbAEJQuwCSWwCSWwCSYgsABQWCGwahuwbFkrI7AKJUawCiVGYGGwIGMjsAglRrAIJUZgYbAgY7EBDCVUWAQbBVmwCiYgELADJTqwBiawBiYLsAcmIBCKOrEBByZUWAQbBVmwBSYgELACJTqKigsjIBAjOi0sI7ABVFi5AABAABu4QACwAFmKsAFUWLkAAEAAG7hAALAAWbB9Ky0siooIDYqwAVRYuQAAQAAbuEAAsABZsH0rLSwIsAFUWLkAAEAAG7hAALAAWQ2wfSstLLAEJrAEJggNsAQmsAQmCA2wfSstLCABRiMARrAKQ7ALQ4pjI2JhLSywCSuwBiUusAUlfcWwBiWwBSWwBCUgsABQWCGwahuwbFkrsAUlsAQlsAMlILAAUFghsGobsGxZKxiwCCWwByWwBiWwCiWwbyuwBiWwBSWwBCYgsABQWCGwZhuwaFkrsAUlsAQlsAQmILAAUFghsGYbsGhZK1RYfbAEJRCwAyXFsAIlELABJcWwBSYhsAUmIRuwBiawBCWwAyWwCCawbytZsQACQ1RYfbACJbCCK7AFJbCCKyAgaWGwBEMBI2GwYGAgaWGwIGEgsAgmsAgmirACFziKimEgaWFhsAIXOBshISEhWRgtLEtSsQECQ1NaWCMQIAE8ADwbISFZLSwjsAIlsAIlU1ggsAQlWDwbOVmwAWC4/+kcWSEhIS0ssAIlR7ACJUdUiiAgEBGwAWCKIBKwAWGwhSstLLAEJUewAiVHVCMgErABYSMgsAYmICAQEbABYLAGJrCFK4qKsIUrLSywAkNUWAwCiktTsAQmS1FaWAo4GwohIVkbISEhIVktLLCYK1gMAopLU7AEJktRWlgKOBsKISFZGyEhISFZLSwgsAJDVLABI7gAaCN4IbEAAkO4AF4jeSGwAkMjsCAgXFghISGwALgATRxZioogiiCKI7gQAGNWWLgQAGNWWCEhIbABuAAwHFkbIVmwgGIgXFghISGwALgAHRxZI7CAYiBcWCEhIbAAuAAMHFmKsAFhuP+rHCMhLSwgsAJDVLABI7gAgSN4IbEAAkO4AHcjeSGxAAJDirAgIFxYISEhuABnHFmKiiCKIIojuBAAY1ZYuBAAY1ZYsAQmsAFbsAQmsAQmsAQmGyEhISG4ADiwACMcWRshWbAEJiOwgGIgXFiKXIpaIyEjIbgAHhxZirCAYiBcWCEhIyG4AA4cWbAEJrABYbj/kxwjIS0AAED/fjR9VXw+/x97O/8fej3/H3k7QB94PP8fdzw9H3Y1Bx91Ov8fdDpnH3M5Tx9yOf8fcTb/H3A4zR9vOP8fbjdeH203zR9sN/8fazctH2o3GB9pNP8faDL/H2cyzR9mM/8fZTH/H2Qw/x9jMKsfYjBnH2Eu/x9gLoAfXy//H14vkx9dLf8fXCz/H1sr/x9aKs0fWSr/H1gqDR9XKf8fVij/H1UnJB9UJy0fUyVeH1Il/x9RJasfUCb/H08mgB9OJP8fTSMrH0wjqx9LI/8fSiNWH0kjKx9IIv8fRyD/H0Ygch9FIf8fRCFyH0Mf/x9CHpMfQR7/H0Ad/x8/HP8fPTuTQOofPDs0Hzo1Dh85NnIfODZPHzc2Ih82NZMfMzJAHzEwch8vLkofKypAHycZBB8mJSgfJTMbGVwkGhIfIwUaGVwiGf8fISA9HyA4GBZcHxgtHx4X/x8dFv8fHBYHHxszGRxbGDQWHFsaMxkcWxc0FhxbFRk+FqZaEzESVRExEFUSWRBZDTQMVQU0BFUMWQRZHwRfBAIPBH8E7wQDD14OVQs0ClUHNAZVATEAVQ5ZClkGWX8GAS8GTwZvBgM/Bl8GfwYDAFkvAAEvAG8A7wADCTQIVQM0AlUIWQJZHwJfAgIPAn8C7wIDA0BABQG4AZCwVCtLuAf/UkuwCVBbsAGIsCVTsAGIsEBRWrAGiLAAVVpbWLEBAY5ZhY2NAB1CS7CQU1iyAwAAHUJZsQICQ1FYsQQDjllzdAArACsrK3N0ACtzdHUAKwArACsrKysrc3QAKwArKysAKwArKysBKwErASsBKwErASsrACsrASsrASsAKwArASsrKysrASsrACsrKysrKysBKysAKysrKysrKwErACsrKysrKysrKysrKysBKysAKysrKysrKysrKwErKysrKysrACsrKysrKysrKysrKysrKysrKysrKxgAAAYAABUFsAAUBbAAFAQ6ABQAAP/sAAD/7AAA/+z+YP/1BbAAFQAA/+sAAAC9AMAAnQCdALoAlwCXACcAwACdAIYAvACrALoAmgDTALMAmQHgAJYAugCaAKkBCwCCAK4AoACMAJUAuQCpABcAkwCaAHsAiwChAN4AoACMAJ0AtgAnAMAAnQCkAIYAogCrALYAvwC6AIIAjgCaAKIAsgDTAJEAmQCtALMAvgHJAf0AlgC6AEcAmACdAKkBCwCCAJkAnwCpALAAgQCFAIsAlACpALUAugAXAFAAYwB4AH0AgwCLAJAAmACiAK4A1ADeASYAewCJAJMAnQClALQEjQAQAAAAAAAyADIAMgAyADIAWgB5AK8BJAGlAhkCLgJeAo4CuwLYAvIDAwMeAzIDfwOYA9cEPgRqBLcFEQUuBZ0F9wYDBg8GNAZPBnQGxQdvB6cIBghKCIgIuAjhCTAJWAlsCZcJygnoChsKPgqKCr0LFQtaC7kL1wwFDC0MbwyeDMMM8A0JDR0NNg1bDWsNfw3nDjoOgA7TDyAPTw+3D+8QFRBOEIEQlRDxESsRcRHEEhgSTBKjEtMTChMwE3ITnxPbFAcUTRRfFKYU5RUJFWMVrhYPFlYWcBcCFy8Xpxf9GAkYJhi/GNAZAxkoGV8ZvRnRGhEaMBpKGnQaixrJGtUa5hr3GwgbWBulG8McHBxVHLIdUB2xHegePB6QHuwfHR8xH2MfjB+rH+cgNCCfISghTiGaIekiSiKhIuAjKyNRI5sjuyPaI+IkBCQfJE8keiS2JNQlACUUJSklMiVdJXollCWnJeIl6iYBJjEmiSaxJtgm9ScpJ3wnuSgYKIIo5CkRKXsp4SoyKmwqxyrtK0ArsCvpLDcsgizVLQUtPS2QLdEuOC6XLu0vXi+nL/cwUzCbMNow/jFBMZMx4DJHMmoyojLgMzIzWzORM7Yz5zQkNGM0mDToNUo1iTX4Nlw2cza4Nwc3azeON8A3+DgnOE84dTiROSU5TTmBOaY51zoVOlM6iDrWOzQ7dDvPPB08eDzBPQE9Jj17PdE+ED5pPsM+/z83P4o/2UA8QJ1BE0GKQghChELrQz1Dc0OrRBBEbkUSRbNGG0aERshHCUc5R1dHgkeXR61IRUiWSLJIzkkJSUxJsEnSSfRKL0pqSn1KkEqcSq9K7kssS2ZLoEuzS8ZL90woTGdMsE0aTYJNlU2oTdpODE4fTjJOdk64Tu5PTk+sT/VQO1BOUGFQmFDRUORQ91EKUR1Ra1G2UgFSEFIgUixSOFJqUsBTNVOqVB9UjFT3VVNVslX+Vk1WmVbjVyRXZVfNV9lX5VgNWA1YDVgNWA1YDVgNWA1YDVgNWA1YDVgNWA1YFVgdWC5YP1haWHRYj1iqWMRY0FjcWQlZKFlSWW5ZelmKWaRaWFp7Wptaslq7WsRazVrWWt9a6FrxWyZbL1s4W0FbSltTW1xbZVtuW3dbgFvSXAlcYVxtXMVdC11dXadd+F43XnNerl8sX3df2WASYFpgcGCBYJdgrWESYSxhX2FwYZtiKWJjYsFi7mMfY1FjhWOSY65jyGPUZAtkR2SjZQZlYWYHZgdm/WdDZ3hnnGfZaCtonGi2aQZpSWlxadNqDGokampqlmrHavJrMmtVa4FrnWv5bDlsjmzAbQZtJm1WbXFtoW3JbdtuAm5KbnNu5W8yb29vim+5cAlwLHBScHVwq3D3cTdxlnHdcilyfnLCcv5zLXNnc61z/nRidI10v3T2dTF1YnWUdcJ1/3Y3dkN2c3bAdxt3Y3eLd+Z4I3hheJt5A3kPeUh5gXnAefF6R3qQetp7OXuQe+F8RHyAfNR8+304fYN9nH4Cfk1+Xn6Yfsd/Zn/AgBaASYB7gKuA34EagVyBvIHtggmCNIJwgpSCuoL3gzyDZYOQg92D5oPvg/iEAYQKhBOEHIRjhLOE8YU9hZiFtYXzhjSGXIalhsCHEIchh5GH7IgQiBiIIIgoiDCIOIhAiEiIUIhYiGCIaIhwiHiIioiSiPOJOIlViaiJ7opBiqmK74tCi5aL34xGjJWMnY0JjTONgI2zjgiON452jnaOfo7HjxCPUI91j7GPxI/Xj+qP/ZARkCWQO5BOkGGQdJCHkJuQrpDBkNSQ6JD7kQ6RIZE0kUeRW5FukYGRlJGokbuRzpHhkfOSBZIYkiySQpJVkmiSe5KNkqCSs5LFktiS7JL+kxGTJJM2k0iTW5Nuk4GTk5Omk7mTzJPfk/GUBJQWlG2U9ZUIlRuVLpVAlVOVZpV5lYuVnpWxlcSV1pXplfuWDpYhlnaW5Jb3lwmXHJcul0GXU5dml3mXjZegl7OXxpfZl+yX/5gSmCWYOJhKmFyYb5h7mIeYmpitmMGY1ZjomPuZD5kjmTaZSZlVmWGZdJmHmZuZr5nCmdSZ55n6mgyaH5oymkaaWpptmoCalJqomruazZrgmvObBpsYmyubPptSm2abeZuLm5+bs5vGm9mb7JwAnBOcJZw4nEqcXZxwnIScmJysnMCdEJ1rnX6dkZ2knbadyp3dnfCeA54WnimeO55OnmGedJ6HnpOen56qnr2e0J7invSfCJ8cnyifNJ9Hn1qfbJ9/n5KfpJ+3n8uf3p/xoASgFqAooDygT6BioHSgh6CaoKygv6ERoSShNqFJoVuhbaF/oZGhpKH2ogiiGqItokCiVKJmonmijKKfoqqivKLPotui7aMBow2jGaMsozijS6Ndo3CjhKOXo6OjtaPIo9qj5qP4pAykHqQqpDykTqRhpHWkiaTYpOuk/aUQpSOlNqVIpVulb6V7pY+lo6W2pcql36Xnpe+l96X/pgemD6YXph+mJ6YvpjemP6ZHpk+mY6Z3poqmnaawpsKm1qbepuam7qb2pv6nEqclpzinS6dep3Knhafip+qn/qgGqA6oIag0qDyoRKhMqFSoZ6hvqHeof6iHqI+ol6ifqKeor6i3qMqo0qjaqR2pJaktqUCpU6lbqWOpd6l/qZKppKm3qcqp3anwqgSqGKorqj2qRapNqlmqbKp0qoeqmqqvqsSq16rqqv2rEKsYqyCrNKtIq1SrYKtzq4armausq7SrvKvEq9er6qvyrAWsF6wrrD6sRqxOrGGsc6yHrI+soqy2rMqs3qzxrQStFq0qrT6tUq1lrW2tda2JrZytsK3Drdat6K38rg+uI643rkuuXq5yroaujq6irrauya7crvCvA68XryqvPq9Rr2WveK+Vr7Gvxa/Yr+yv/7ATsCawOrBNsGqwhrCasK6wwbDUsOew+bENsSCxNLFHsVuxbrGCsZWxsrHOseGx9LIIshyyMLJEsleyarJ+spGypbK4ssyy37LzswazI7M/s1KzZbN4s4uznrOxs8Sz1rPqs/60ErQmtDm0TLRftHK0hbSYtKu0vrTRtOO097ULtR+1M7VGtVm1bLV+tZu1rrXBtdS157X6tg22ILYztju2eLa0tta2+Lc3t3i3p7fauBK4SLhQuGS4bLh0uHy4hLiMuJS4nLikuKy4v7jSuOW4+LkMuSC5NLlIuVy5cLmEuZi5rLnAudS56Ln0ugi6HLowukS6WLpsuoC6lLqnurq6zrriuva7CrseuzK7Rrtau267gbuUu6i7vLvQu+S7+LwMvCC8M7xFvFm8bbyBvJW8qby9vNG83bzpvPW9Ab0NvRm9Jb0tvTW9Pb1FvU29Vb1dvWW9bb11vX29hb2NvZW9qb28vc+94r3qvfK+Br4OviG+M747vkO+S75Tvma+br52vn6+hr6Ovpa+nr6mvxe/SL+Uv5y/qL+7v82/1b/hv/TAB8ATwCbAOcBNwFnAbMB/wJLApcCxwL3A0QAGAGQAAAMoBbAAAwAHAAsADwATABcAAEEVITUzESMRIREjERMVITUBASMBEQEzAQMJ/XYbNgLENhf9dgKK/a86AlH9rzoCUQWwNjb6UAWw+lAFsPqGNjYFXPqMBXT6jAV0+owAAgCM//IBoAWwAAMADwATQAkCAgcNC3IAAnIAKyvdzi8wMUEDIwMDNDYzMhYVFAYjIiYBkhjOGQdJQUBKSkBBSQWw+/0EA/rCN0tLNzVLSwACAGAD+AI6BgAABQALAAyzCQMLBQAvM80yMDFBFQMjETUhFQMjETUBDiOLAdojiwYAif6BAXSUif6BAXyMAAQAVgAABLIFsAADAAcACwAPACNAEQQABQ0ODgAKCQkAAgJyABJyACsrETkvMxE5LzMyETMwMXMBMwEzATMBASE1IQMhNSH0AQyk/vTiAQyk/vQBlPvwBBBL++8EEQWw+lAFsPpQA3Wb/YqbAAMAZP8sBCcGmQADAAcAPQA2QBwEBzo6CCsQIwQULzU1Bi8NcgECHx8UGhoDFAVyACvNMy8RMxI5OSvNMy8REhc5MxI5OTAxQREjERMRIxEBNCYmJy4CNTQ2NjMyHgIVIzQuAiMiBgYVFBYWFx4CFRQGBiMiLgI1MxQeAjMyNjYCsZqHmQEwL2pZgL9pccqHaKd2P/AdOE8yR1wrLGtegb1nd9WNWa+OVPIqSFktS2c1Bpn+1QEr+Z/+9AEMAUM6V0cfLXGnfXu0Yj54r3FAZUcmNVw7OVZFIy5xpX2BtF0vbLOCTmg8GjNdAAUAZP/rBYoFxQARACMANQBHAEsAI0ARSTJLBTtEKTIXDiAFBXIyDXIAKysyxDIQxDIzETMRMzAxUzU0NjYzMhYWFRUUBgYjIiYmNxUUFhYzMjY2NTU0JiYjIgYGATU0NjYzMhYWFRUUBgYjIiYmNxUUFhYzMjY2NTU0JiYjIgYGEwEnAWRIimFkiUhHiWNii0inH0AvMD0eHz4wLj8fAhdJimFkiUdHiGNii0moIUAtMz4bHz8wLz4fyP05ewLHBEtNU4hSUohTTVGIUlKInk0oSCwsSChNKUksLEn8Vk5SiFJSiFJOUohSUoigTihILS1HKU4pSCwsSANS+45HBHIAAAEAVf/sBRAFxABCACRAFCMSAA8iAQYaMDArERE7E3IHGgNyACsyKzIvMjIvERc5MDFBNzY2NTQmIyIGBhUUFhYXASEBLgI1NDY2MzIWFhUUBgYHBQ4CFRQWFjMyPgI1MxQGBgcGBgcGBiMiJiY1NDY2AXX7PzZQSTNGIy5QMgKw/un9zklwPl6sc2+hVzJYOv7PNTMQN2tNU5x8SdApWUgHEQhW1XiR1HNKgQMYqSpRPTRYL00vLV9nO/zUApVYk4tKcqRZWZJXRXJeKt4rT0IZQGg9S4rAdWq+okAHFQdPTWq6eFmHdQABAFID/gEJBgAABQAIsQMFAC/GMDFBFQMjEzUBCRqdAQYAgf5/AXGRAAABAIH+MQKeBl0AFwAIsQYTAC8vMDFTNTQSEjY3Fw4CAhUVFBIWFhcHJiYCAoFdlqtPMDpzXzk5X3M6ME+rll0CPxHWAV0BB60miiuY3f7ZuhW6/tnemy6EJ60BBwFdAAABACf+MQJNBl0AFwAIsRMGAC8vMDFBFRQCAgYHJz4CEjU1NAImJic3FhYSEgJNX5evUDE6c185O2JyNjFQr5dfAlAR0/6k/viwJ4QsmeEBKLoVugEp35orhCaw/vf+pAABABwCUAN5BbEADgAUQAoNAQcEBA4MBgJyACvEMhc5MDFTEyU3BQMzAyUXBRMHAwOA0v7KNQE0Dq4QAS81/sTNjbm2ArsBE1qkdgFb/p52p1v+82YBIv7mAAACAEIAkgQoBLYAAwAHABC1BwcDAwYCAC/GMxDGLzAxQRUhNQERIxEEKPwaAmjpAx7Z2QGY+9wEJAAAAQAi/rgBXgDoAAoACLEEAAAvzTAxZQcUBgcnPgI1NQFeAWZUgRwuHOisZthGSy1caD+1AAEAUAIOAmECzgADAAixAwIALzMwMUEVITUCYf3vAs7AwAABAIb/9AGgAP0ACwAKswMJC3IAKzIwMXc0NjMyFhUUBiMiJoZMQUJLS0JBTHg4TU04OExMAAABAAH/gwL1BbAAAwAJsgACAQAvPzAxQQEjAQL1/cm9AjgFsPnTBi0AAgBo/+wEIwXEABcALwATQAkrBh8SBXIGDXIAKysyETMwMUEVFA4CIyIuAzU1ND4CMzIeAwMRNC4DIyIOAhURFB4DMzI+AgQjQ36vbFaTdlMtRH6vbFeTdVMs8RQnOkouOFg8HxQoOUstOVg8HgNS7qvxlkYsXpXQie6s7ZVEK1yTz/5nATRXhV07GytemW3+zFiGXz0cLGGcAAEAqgAAAwAFtQAGAAy1BgRyAQxyACsrMDFBESMRBTUlAwDx/psCOQW1+ksEl3nH0AAAAQBSAAAEPgXEAB8AGUAMEBAMFQVyAx8fAgxyACsyETMrMjIvMDFlFSE1AT4CNTQmJiMiBgYVIzQ2NjMyFhYVFA4CBwEEPvwwAdpOWiUzYkZRbjjxdNybksxrLFFuQv7FwMClAgVYgGcxRWk9RntPf9N9YrR7RIaFhUT+pQAAAgBO/+wEGgXEABwAOwAqQBYbHB4fBAAAHR0SMy8vKQ1yDQ0JEgVyACsyMi8rMi8yETkvMxIXOTAxQTMyNjY1NCYmIyIGBhUjNDY2MzIWFhUUDgIjIxU1MzIeAhUUDgIjIi4CNTMUFhYzMjY2NTQmJiMBiZBUbzYxY0xAZzzyetOEjdN2OnKqcLW1gLVyNUmGs2lerIhP8T1vSExuO0J6UwNFOmZCRWM2M11AdLRnXbiIPoBpQTaEPGmGS2afbjg0Z5tmQWM4NmpLVWozAAACADcAAARZBbAABwALAB1ADgMHBwYCAgUJDHILBQRyACsyKxI5LzkzEjkwMUEVIScBMwMBAREjEQRZ++YIAnTB0f6XAnHxAgfAkQPY/pr9vQOp+lAFsAAAAQB//+wEOQWwACkAHUAOJwkJAh0ZGRMNcgUCBHIAKzIrMi8yETkvMzAxQScTIRUhAzY2MzIeAhUUDgIjIi4CJzMeAjMyPgI1NC4CIyIGAWvATwMR/bcoInhNZ6NyPDt2s3pbp4RQBuwJPWZDPVg7HSFBYkBWWwKlLwLczP6bFCdDf7VxZbCGSzVpm2VHYzQrUW5DQGpOKzIAAAEAc//sBDkFuQA2ABtADQ4sGCIiLAMABHIsDXIAKysyETkvMxEzMDFBMxUjIg4CFRUUHgIzMj4CNTQuAiMiBgYHJz4DMzIeAhUUDgIjIi4CNTU0EjYkA0YeEYG7eDsmRVo0Nlg+IB88WTpIdUcDXAhDbpFXapxnM0B7r291t39CVK8BEgW5xVCMu2nlV4VZLi1QbkE+bVMvRG09Hl2UaDdQia9fabWITFqeznNkpgEn4oEAAAEARAAABDUFsAAGABNACQEFBQYEcgMMcgArKzIRMzAxQRUBIwEhNQQ1/br+AkX9DgWwhPrUBPDAAAAEAGf/7AQmBcQAEAAgADAAQAAhQBANPT0lLRUVBDUtBXIdBA1yACsyKzISOS8SOTMSOTAxQRQGBiMiJiY1ND4CMzIWFgc0JiYjIgYGFRQWFjMyNjYTFAYGIyImJjU0NjYzMhYWBzQmJiMiBgYVFBYWMzI2NgQmftmIiNp+RoGvaIraffI8bEdIajs6bElJajrRc8qBgstzc8qCgspz8TNcPz9cMjJdPz9cMgGNiLpfX7qIWpNrOma0bEluPDxuSUprODhrAuJtqmFhqm2Cs15es4pBYzg2YkRDYzg4YwABAF3/9wQVBcQAOAAbQA0AOBYhITgMKwVyOAxyACsrMhE5LzMRMzAxZTMyPgI1NTQuAiMiDgIVFB4CMzI+AjcXFA4CIyIuAjU0PgIzMh4CFRUUDgMjIwEwFIq5bjAlQ1cyN1c7Hx06WDs4XkYoAlw/b5NWaJ9pNEB6r292sno+Lmen8aIWvkmCsGf7WYdbLjFVcUA8b1YyK0pcMBxMk3lIT4iwYWm4jU9cotZ7VYHvy5lVAP//AH//9AGaBFEEJgAS+QAABwAS//oDVP//ADP+uAGHBFEEJwAS/+cDVAAGABARAAACAD4ApwOJBEwABAAJABZADAEDBwYABAgFCAIJAgAvLxIXOTAxUwUVATUlAQc1AfQClfy1A0v9a7YDSwKR/e0BdJ2o/v8jnQFzAAIAjwFkA/MD0gADAAcADrUGBxIDAhAAPzM/MzAxQRUhNQEVITUD8/ycA2T8nAPSxsb+WMbGAAIAfgCoA94ETQAEAAkAFUALBQgEAAYDAQcCCQIALy8SFzkwMUElNQEVBQE3FQEDH/1fA2D8oAKjvfygAmn76f6NnqsBACid/owAAgA7//QDlwXEACAALAAbQA0BASQkKgtyERENFgNyACsyMi8rMhEzLzAxQSM+Ajc+AjU0JiYjIgYGByM+AjMyFhYVFAYGBwYGAzQ2MzIWFRQGIyImAj/fAR5HOy5KLCpRPDJYNgLxAnTEeYa+ZUZwQTgo9EpAQEpKQEBKAa1df2g6LE9ZOj9YLidRQn6sVluteliPez0zd/58NktLNjZLSwAAAgBb/jsG1gWPAEEAaAAnQBISBQVHUhNyYWRkC11dHR08KTAALzMvMxEzLzMzETMrMjIRMzAxQQ4DIyIuAjcTMwMGHgIzMj4CNzYuAyMiDgMHBh4DMzI2NxcGBiMiJCYmAjc2EjY2JDMyHgISAQYeAjMyPgI3Fw4DIyIuAjc+BDMyFhcHJiYjIg4CBs8EMmWeb0NoRR4HM68yBhEkLhc2Vj0jAwcoX5fSh3zSpndDBgctZpvNfVi1PiZG0l2b/v/Fgj4HB1aX0QEGmpz8v346/AAHDSU8KBk5ODIRTBdGWGY3SXFIHgkKOVVsfUJxgDleHV1AOV1GLwIIYcCeXi9YfU0CN/3JPU4qED1tkFSM7bqBREyPx/eNlPS8gUIoIYUtLFCb4AEir6QBIeyrXFKc3v7p/v1EakgmGThdRVdOd08pQHWjZWewimEzQCt4GzA0aZoAAAMAEQAABT8FsAAEAAkADQApQBQEBwcKDQ0GAAsMDAIIAwJyBQIIcgArMisyETkvMzk5MxEzMhEzMDFBASEBMwEBJzMBARUhNQLL/k3++QIkqAFa/kwTqQIm/uP86ATu+xIFsPpQBO7C+lACHMfHAAACAJQAAASlBbAAGQAwAClAFBkpJgInJwEmJg4MDwJyHBsbDghyACsyETMrMhE5LzMzETMSOTkwMUEhJyEyNjY1NCYmIyMRIxEhMh4CFRQGBgcDITchMjY2NTQmJiMhNyEXHgIVFAYGArb+jQIBRFJzPDhzWfP7Ae54vYVFVqh9W/5JcQFGVXI5MmxX/uYCAW85eJtMeeICkrcxXUJJXCr7GAWwLmGUZlqVXgn9L8c5ZURHaTm3RQRinFqLvGEAAQBm/+wE6wXEACcAFUAKGRUQA3IkAAUJcgArzDMrzDMwMUEzDgIjIi4CNTU0PgIzMhYWFyMuAiMiDgIVFRQeAjMyNjYD8PoMiPawh9iaUVOc24mu8IUP+gpDgmlWgFYrJ1F+WGuFRQHaj9+AYbP+nXmd/rVggOKSXoZHQHy1dHtus4BGRIMAAAIAlAAABNIFsAAaAB4AG0ANAgEBHQ4PDx4Cch0IcgArKzIRMxEzETMwMWEhNyEyNjY1NTQuAiMhNSEyHgIVFRQOAgERIxECO/7JAgE1h7ddNWeVYf66AUaR8K9eXrDz/r77x3bcmE92tnxAyGG2/p1Nnf61YQWw+lAFsAAEAJQAAARNBbAAAwAHAAsADwAdQA4LCgoGDw4HAnIDAgYIcgArMjIrMjIROS8zMDFlFSE1ExEjEQEVITUBFSE1BE38+0f7A1T9YAMA/QDHx8cE6fpQBbD9oMTEAmDIyAADAJQAAAQ0BbAAAwAHAAsAG0ANBwYGAgoLCwMCcgIIcgArKzIRMxE5LzMwMUERIxEBFSE1ARUhNQGP+wNN/W4C5f0bBbD6UAWw/YPHxwJ9yMgAAQBr/+wE8gXEACsAG0ANKyoqBRkVEANyJAUJcgArMivMMxI5LzMwMUERDgIjIiYmAjU1NBI2NjMyFhYXIy4CIyIOAhUVFB4CMzI2NjcRITUE8h+D2KGJ5KVaU5zdjLPrgBH2DEV/ZVeEVywzYYxYVm5BEv7RAuj91ClhRl20AQOmZaUBA7Rdd9KHTHhFQoC4dmd4uoBBHSkTASG7AAADAJQAAAUXBbAAAwAHAAsAG0ANCQYIAwICBgcCcgYIcgArKxE5LzMyETMwMUEVITUTESMRIREjEQRW/Ps++wSD+gNQx8cCYPpQBbD6UAWwAAEApQAAAaAFsAADAAy1AAJyAQhyACsrMDFBESMRAaD7BbD6UAWwAAABAC//7APlBbAAEwATQAkQDAwHCXICAnIAKysyLzIwMUERMxEUBgYjIiYmNTMUFhYzMjY2Auv6fNaIi9d6/DdlREFlOgG1A/v8BZHMbF7ClVZpLztzAAMAlAAABRYFsAADAAkADQAcQBAGBwsFDAgGAgQDAnIKAghyACsyKzISFzkwMUERIxEhAQEnEwETATcBAY/7BGb9sv6wLPABqCT+Ia0CXAWw+lAFsP1D/pz5ASgCAPpQArKr/KMAAAIAlAAABCQFsAADAAcAFUAKAwICBgcCcgYIcgArKxEzETMwMWUVITUTESMRBCT9JUb7x8fHBOn6UAWwAAMAlAAABmoFsAAGAAsAEAAbQA0CBw4FCwhyDAQABwJyACsyMjIrMjIROTAxUzMBATMBIwEzExEjATMRIxH64AGlAaTg/dSy/W/VJfoFANb7BbD7nQRj+lAFsPw0/hwFsPpQAeQAAAEAlAAABRcFsAAJABdACwMIBQkHAnICBQhyACsyKzISOTkwMUERIwERIxEzAREFF/v9c/v7Ao8FsPpQBBP77QWw++sEFQACAGX/7AUdBcQAFQArABNACScGHBEDcgYJcgArKzIRMzAxQRUUAgYGIyImJgI1NTQSNjYzMhYWEgc1NC4CIyIOAhUVFB4CMzI+AgUdVp/eh4bdollYod2Gh96gV/svW4RTU4JbMDBdglNUglovAwBQpf76uGFhuAEGpVClAQW5YWG5/vv1Unq7f0FBf7t6Unq8gUFBgbwAAAEAlAAABM8FsAAXABdACwIBAQ4MDwJyDghyACsrMhE5LzMwMUEhNSEyNjY1NCYmIyERIxEhMhYWFRQGBgK9/oUBe2N6OTl6Y/7S+wIpqe18fO0CH8dAcUlFeUr7GAWwd9GGjcpsAAMAYP8DBRkFxAADABkALwAZQAwgFQNyACsrAwoJcgIALysyMhEzKzIwMWUBBwEBFRQCBgYjIiYmAjU1NBI2NjMyFhYSBzU0LgIjIg4CFRUUHgIzMj4CA5cBf6P+iAIeVqDeh4bdollYod2Gh9+gV/wvW4NUUoJcMDBdg1JUglovwv7QjwEtAtBQpf76uGFhuAEGpVClAQW5YWG5/vv1Unq7f0FBf7t6Unq8gUFBgbwAAgCUAAAE3wWwABgAHQAjQBIbGgkDDAwLCwAcGRgIchYAAnIAKzIrMjISOS8zEhc5MDFTITIWFhUUBgYHByEnITI2NjU0JiYjIREjIQElARWUAgOm6n1QkmVM/jECAVtaeD07el7++PsDP/6qAQcBWwWwZMOPbaZxHyXHQG9GTHE9+xgCjgH9fg0AAQBL/+wEjgXEADkAH0APCiYPNjExKwlyGBQUDwNyACsyLzIrMi8yETk5MDFBNC4CJy4DNTQ+AjMyFhYVIzQmJiMiBgYVFB4CFx4DFRQOAiMiLgI1MxQeAjMyNjYDkhtEe19or4JIS4u+c6Lrf/k9e15ZdjomTnZQebR4PEqJv3Vpy6Zi+zFYdUNYdzwBdy1GOjcdIE9piVpZkms7eMp6SG9ANlw6KUM5MhckV26LWFyTZzc4c610R2Q/HjJaAAIALQAABLQFsAADAAcAFUAKAAMDBgcCcgEIcgArKzIyETMwMUERIxEhFSE1Auv5AsL7eQWw+lAFsMjIAAEAgP/sBL8FsAAVABNACQERBgsCcgYJcgArKxEzMjAxQTMRFAYGIyImJjURMxEUFhYzMjY2NQPF+pD3mJ32jfpIhFpag0gFsPwzpuBxceCmA838M2mHQECHaQAAAgARAAAFGwWwAAQACQAXQAsABggBCQJyAwgIcgArMisyEjk5MDFBASEBIwEBEyMBAocBfwEV/fa7/s8BfDS8/fgBCgSm+lAFsPta/vYFsAAEAC8AAAbmBbAABQAKAA8AFQAbQA0QDAEKAnITEg4ECQhyACsyMjIyKzIyMjAxQQEzAwEjAxMTIwEBEzMBIwMBEyMBAwIBASKYEf7Knq7rFaj+rwTV6Pr+r6j3AR8qnv7PEAFHBGn+3ftzBbD7oP6wBbD7owRd+lAFsPuU/rwEjQEjAAABACYAAATpBbAACwAaQA4HBAoBBAkDCwJyBgkIcgArMisyEhc5MDFBAQEhAQEhAQEhAQEBUwE1ATUBIf5IAcP+3P7D/sP+2wHE/kcFsP3tAhP9L/0hAh394wLfAtEAAQAIAAAE2QWwAAgAF0AMBAcBAwYDCAJyBghyACsrMhIXOTAxQQEBIQERIxEBAR8BUgFSARb+Fv3+FgWw/UkCt/xo/egCGAOYAAADAFAAAASOBbAAAwAJAA0AH0APBAwMCQ0CcgcDAwICBghyACsyETMRMysyMhEzMDFlFSE1AQEjNQEzIxUhNQSO/A0D3PyBqAOCpV38PMfHxwRO+uufBRHIyAABAIX+ugIaBo8ABwAOtAMGAgcGAC8vMxEzMDFBFSMRMxUhEQIapKT+awaPuvmguwfVAAEAEv+DA2MFsAADAAmyAQIAAC8/MDFFATMBAnL9oPECYH0GLfnTAAABAAv+ugGiBo8ABwAOtAUEAAEEAC8vMxEzMDFTNSERITUzEQsBl/5ppgXVuvgruwZgAAIANgLZAzgFsAAEAAkAFkAJCAcHBgAFAgMCAD/NMjk5MxEzMDFBAyMBMxMDJzMBAcHBygErjIHBLI0BKgTL/g4C1/0pAfLl/SkAAQAC/0QDkgAAAAMACLECAwAvMzAxYRUhNQOS/HC8vAABADgE0wIMBgAAAwAKsgOAAgAvGs0wMUETIwEBScPJ/vUGAP7TAS0AAgBW/+wD+QROABsAOgApQBUrLB4nHjo6DycxC3IYGQpyCQUPB3IAKzIyKzIrMhI5LzMREjk5MDFlETQmJiMiBgYVIzQ+AjMyFhYVERQWFxUjJiYTFyMiDgIVFBYWMzI2NjcXDgMjIiYmNTQ+AjMC3ipVQDtWMPA+dqRmer1tFRT3ERMjAq1DZkQiKE03Sm9AAk4MOl2BVGqmXkF/uHbZAgQ6VC4oRCtAeF42UqV8/h9KdSsQJ3kB8pUZMEQrK0coPVkoayleVTZVkVxWhVovAAMAff/sBDAGAAAEABoALwAZQA4hFgdyKwsLcgQKcgAAcgArKysyKzIwMVMzEQcjARUUDgIjIi4CJzU+AzMyHgIHNTQuAiMiDgIHFR4CMzI+An3xF9oDszVrnWdllmU+DQ0+ZZVkaJ9qNfEYN11FQFw+IwYJO2xVQ1w3GQYA+ufnAicVeMmUUUyMwnVDdsGNTFCTyo8VSYFiOSxMZDq1S31LNmGCAAABAE7/7APxBE4AJwAZQAwdGRkUB3IEBAAJC3IAKzIyLysyLzIwMWUyNjY3Mw4CIyIuAjU1ND4CMzIWFhcjLgIjIg4CFRUUHgICNjtfOwPjAnjGeHy4ej09erh7gsRxAuMDNV9CSWA2FxY3YKwvVDdprGVVlsRwI3DFllVnt3k8YTo7ZX1DI0N+YzsAAAMAUP/sBAIGAAAEABoALwAZQA0hBAQWC3IrCwdyAQByACsrMisyLzIwMWURMxEjATU0PgIzMh4CFxUOAyMiLgI3FRQeAjMyNjY3NS4DIyIOAgMQ8tv9KTpunmNilGg+DQ0+aJVjYp1uOvEbOl1BUmo9CwYlPls+Qlw7HOAFIPoAAhEVe8uTT0yNw3dDdMCMTFKUyYsVSoBhN0h7TLU7Zk0rOGKCAAABAFH/7AQKBE4AKwAfQBBnEwEGExISABkLB3IkAAtyACsyKzIROS8zX10wMUUiLgI1NTQ+AjMyHgIVFSE1ITUuAiMiDgIVFRQeAjMyNjcXDgICWXjBh0hKhLRpdK5zOfy8AlYCL2BQPF0+ISdMbEVXiDJ/I3ChFE+OwG8of86TTk6NwnVnrRNBckYzYIdUKEd5WjNGQHszXToAAgArAAAC1QYVABEAFQAVQAsUFQZyDQYBcgEKcgArKzIrMjAxYSMRNDY2MzIWFwcmJiMiBgYVFxUhNQHC8VuqdCRGIQYULxs3Tynf/YoEonmlVQkJugUEKU45aLCwAAMAUv5VBAwETgATACkAPgAbQA8wJQtyOhoHcg4GD3IABnIAKysyKzIrMjAxQTMRFAYGIyImJic3FhYzMjY2NREBNTQ+AjMyHgIXFQ4DIyIuAjcVFB4CMzI2Njc1LgMjIg4CAzHbfN6SPpeNL3E6jE1TdUD9NzxwoGVplWQ5Dg0+ZpVlY59xPPEdPV9BVW07DAYlPl5AQWA9HgQ6++SSzGskT0CORUA9dlUDLP7MFXvLk09MjcN3Q3TAjExSlMmLFUqAYTdIe0y1O2ZNKzhiggACAHoAAAP6BgAAAwAaABdADBECFgoHcgMAcgIKcgArKysyETMwMUERIxETJz4DMzIeAhURIxE0JiYjIg4CAWrwxk4BPW+cX1CBXjHyLVY+QWNCIQYA+gAGAPxFAXC+jU0sYZtv/UkCuU5cKTRadgAAAgB8AAABkAXWAAMADwAQtwcNAwZyAgpyACsrzjIwMUERIxEDNDYzMhYVFAYjIiYBfvIQSUFASkpAQUkEOvvGBDoBHDdJSTc2SEgAAAL/q/5LAYcF1gARAB0AE0AJDQYPchUbAAZyACvOMisyMDFTMxEUBgYjIiYnNxYWMzI2NjUDNDYzMhYVFAYjIiaI8kyUayBFHwEVLxUrOh4VSkBBSUlBQEoEOvtob5lPCQi8BAUeQDUFtDdJSTc2SEgAAAMAfQAABDcGAAADAAkADQAdQBEGBwsFDAgGAgkGAwByCgIKcgArMis/Ehc5MDFBESMRCQInNwETATcBAW/yA5L+Kf7+P8MBMjT+oZgB3gYA+gAGAP46/fb++MzxAVX7xgH8qf1bAAEAjAAAAX4GAAADAAy1AwByAgpyACsrMDFBESMRAX7yBgD6AAYAAAADAHwAAAZ8BE4ABAAbADIAIUARKRICLiIiFwsDBnILB3ICCnIAKysrETMzETMRMzMwMUERIxEzAyc0PgIzMh4CFREjETQmJiMiDgIFBzQ+AjMyHgIVESMRNCYmIyIOAgFt8eMZUjhsoWpKe1sx8S9XPERfPBwCn3E3a55mU4NcMPIvVjw4VTodA178ogQ6/gsBcL6NTStckGb9LwK8T1onNFp2Axlir4VMLWCZbP1EAr1SWiMpSV4AAgB6AAAD+gROAAQAGwAZQA0SAhcLAwZyCwdyAgpyACsrKxEzETMwMUERIxEzAyc+AzMyHgIVESMRNCYmIyIOAgFr8eMdTgE/cZ5hTn9bMPItVT8+YkMkA1P8rQQ6/gsBc8CKSytgmW/9RQK8TlsnNFp2AAACAE7/7AQ8BE4AFQArABC3HBELcicGB3IAKzIrMjAxUzU0PgIzMh4CFRUUDgIjIi4CNxUUHgIzMj4CNTU0LgIjIg4CTkSBu3Z3u4JERIK6dne7gkTxHkBkRUNjQB8fQWNERGNAHgIRF3XJlVNTlcl1F3XIlVNTlciMF0mCYjg4YoJJF0iBZDk5ZIEAAAMAff5gBC8ETgAEABoALwAZQA4hFgdyKwsLcgMGcgIOcgArKysyKzIwMUERIxEzARUUDgIjIi4CJzU+AzMyHgIHNTQuAiMiDgIHFR4CMzI+AgFu8d4C1DdrnGZll2g/DQ0/aJZkZp5sNvEcPF1BQFw+IgcMOmtUQVw7HANq+vYF2v3tFXbJlVJLirtwUXfCjExPkcuRFUuBYjcrTGU7wkh4RzhjggADAFD+YAQCBE4ABAAaAC8AGUAOIRYLcisLB3IEDnIDBnIAKysrMisyMDFBETczEQE1ND4CMzIeAhcVDgMjIi4CNxUUHgIzMjY2NzUuAyMiDgIDDxzX/E44bp5nZJVnPg4NPmiWZWWebTnxGzxcQVVtOwwHJD9dQEFeOxz+YAUD1/omA7IVe8uST0yNwndDdMCMTVKVyYsVSoFjOEp9TLU7Z00rOGOCAAACAH0AAAK5BE4ABAAWABlADQYJCQUUB3IDBnICCnIAKysrMjIRMzAxQREjETMlByYmIyIOAgcHND4CMzIWAW7x5gFWAhYzGT5ePyIDNyhRe1EWMwNs/JQEOgfgBAQjQVw5BGauhEoIAAEASf/sA8cETgA1ABdACxsADjIpC3IXDgdyACsyKzIROTkwMUE0JiYnLgM1ND4CMzIWFhUjNCYmIyIGBhUUHgIXHgIVFA4CIyImJjUzHgIzMjY2AtskZWJWj2Y4OmybYIjDaPErVkE+UScVMldCfLNgPXShZJPMaekEQ2U2QVguASUkOzAUEzVMaERCdlo0W5thK0svJz4lGysjHg4aUX9hSHdXMGmlWUNPIyM9AAIACv/sAnUFQwADABUAE0AJChELcgQCAwZyACsyLysyMDFBFSE1EzMRFBYWMzI2NxcGBiMiJiY1Amz9nrDxHTQjGS4OAR5PM1OASAQ6sLABCfvoMjUSBgO4CQ47hm8AAAIAd//sA/kEOgAEABsAFUAKAREGchgDAwsLcgArMi8yKzIwMWURMxEjEzcUDgIjIi4CNREzERQeAjMyNjYDB/LkFFEwZJxtT4RfNPEcMEAkZ3cz/wM7+8YB4AJtt4dLLmCaawK7/UM7TzAUUYoAAgAWAAAD3wQ6AAQACQAXQAsABggBCQZyAwgKcgArMisyEjk5MDFlATMBIwMBFyMBAdwBCfr+iJy6AQ4NnP6GvwN7+8YEOvyBuwQ6AAQAIwAABcgEOgAFAAoADwAVACRAFAcLABEDFAYJEAwBCgZyEg4ECQpyACsyMjIrMjIyEhc5MDFlEzMHAyMDExcjAQETMwEjAxMXIwMnAaL6mir8infDEJr+2wP9vev+3Jq69x+K/yrwA0r8/MIEOvyy7AQ6/LwDRPvGBDr8wPoDP/sAAAEAHwAAA+oEOgALABpADgcECgEECQMLBnIGCQpyACsyKzISFzkwMUETEyEBASEDAyEBAQE0ztIBCf64AVX+99zc/vYBVP65BDr+mQFn/e392QF2/ooCJwITAAIADP5LA94EOgATABgAGUANFxYVAwgCGAZyDwgPcgArMisyEhc5MDFlASEBDgMjIiYnJxYWMzI2NjcDARcHAQG2ASYBAv5ODzBNclEgOxoBCh0JPFAzElgBASun/nd2A8T7ISheVTULBrgBAh1ANgSW/Nb+KwRTAAMAUQAAA8EEOgADAAkADQAcQA0EDAwJDQZyBwMDBgISAD8zMxEzKzIyETMwMWUVITUBASM1ATMjFSE1A8H82gMQ/UKcArqgXf0PwMDAAuT8XJsDn8DAAAACADj+lAKOBj0AEQAlABlACh0JCgocHBITAQAALzIvMzkvMxI5OTAxQRcGBhUVFAYGIzUyNjU1NDY2EwcuAjU1NCYmIzUyFhYVFRQWFgJeMGdNVbiVZ1pBnLgwiJxBKFVElbhVIU8GPYkjsnPOZKRginhmzmm3i/kHiieLt2nMRWM3i2GjZsxNg2AAAAEAr/7yAVAFsAADAAmyAAIBAC8/MDFBESMRAVChBbD5Qga+AAIAHP6UAnMGPQATACYAG0ALHgsKCh8fARUUAAEALzMvMxI5LzMSOTkwMVM3HgIVFRQWFjMVIiYmNTU0JiYDJz4CNTU0NjYzFSIGFRUUBgYcMImcQChWRJS6VSBPFTBFTiFVupRmXECcBbSJJou3ac5DZDeEXaFkzk2EYPj3ihhgg03MZqBdhHlmzGm3iwABAHUBhgTXAy8AHwAbQAsMAAAWBoAcBhAQBgAvMy8RMxoQzTIvMjAxQTcUDgIjIiYnJiYjIgYGFSM0PgIzMhYXFhYzMjY2BB65MFd5SFSBSi5QLi1AJL4wV3hIVIdGME4sLUQmAxEBVpFqO0NELC8vVjlXj2c4RkEuLjNaAAACAIX+kwGZBE0AAwAPAAyzAQcNAAAvL93OMDFTEzMTExQGIyImNTQ2MzIWkhnOGQdJQUBKSkBBSf6TBAP7/QU6NktLNjZKSgADAGf/CwQLBSYAAwAHAC8AJUASAgElJSEDHAdyBwQICAwGEQ1yACvNzDMSOTkrzcwzEjk5MDFBESMRExEjETcyNjY3Mw4CIyIuAjU1ND4CMzIWFhcjLgIjIg4CFRUUHgICrb+/v2E7YDoD5AN5xXh8uXo8PHu4e4LEcQPkAzVfQklgNhcWN2AFJv7fASH7Bf7gASCBL1Q3aaxlVZbEcCNwxZZVZ7d5PGE6O2V9QyNDfmM7AAADAF8AAAR6BcQAAwAHACIAIUAQBgUFAR8WBXIMDQ0CAgEMcgArMhEzETMrMhE5LzMwMWEhNSEBITUhJRMWBgcnPgI1AzQ2NjMyFhYVIzQmJiMiBgYEevvpBBb+u/0rAtX+vBcBR1G2ISMNFXPKg4vCZvI4WzU2VzLHAZHD9P2UYJcrRghFXSkCdYrDaGa1eEtZKDZqAAAGAFz/5QVOBPEAEwAnACsALwAzADcADrUPGQUjDXIAKzIvMzAxQRQeAjMyPgI1NC4CIyIOAgc0PgIzMh4CFRQOAiMiLgIBByc3AQcnNwEnNxcBJzcXATBBc5dXV5dzQEBzl1dXl3NBsV2j2Ht72KRcXKTYe3vYo10Ez8qIyvzmyobKA6DKiMr72MqGygJgXaR6RUV6pF1eonpFRXqiXoXkql9fquSFheSrYGCr5AKKzozO+8POi83+p86LzQMmzovOAAUADQAABDIFsAADAAcADAARABUALUAWCxAQBgcSFRUIDgMDAgIRFAxyCREEcgArMisSOS8zEjk5MhEzzjIzETMwMUEVITUBFSE1JQEhASMDAQcjAQERIxEDy/ycA2T8nAF5AUgBCv5ekuQBSyKS/lwCjPoC45WV/t2UlPEC//yUA2z8+WUDbP1O/QIC/gACAIn+8gFqBbAAAwAHAA20AQIGBwIAP93ezTAxQSMRMxERIxEBauHh4f7yAxkDpf0KAvYAAgBc/iYEjAXFAC8AYQAeQBNTPwABBStdNTEwDyEMT0QdFBFyACsyLzMXOTAxZTUyNjY1NC4CJy4DNTQ+AjMyFhYVIzQmJiMiBgYVFB4CFx4DFRQOAgMVIgYGFRQeAhceAxUUDgIjIi4CNTcUHgIzMjY2NTQuAicuAzU0PgICr0xqOCBKfV1vrno/R4W5dJ3jevE9dVdcdDgcRHxgcrB6QER9sPBLYS4bRn5hcbB4P0eFuHNjvppb8TRVaDRUdT0fSHtcb7B6QUF4qnyCMFU1Kj81Mh0eR2CHXlWKYjVkv4pCa0AxUTIrPzEtGh5IX4ZcUHxULALvhDBTNS1BNC8cH0dfh15Yil8xK2GkeAJEWzQXLk8zKDwzMBseR2CGXE57VS4AAAIAYwTlAywFzQALABcADrQDCQkPFQAvMzMvMzAxUzQ2MzIWFRQGIyImJTQ2MzIWFRQGIyImY0Q4OUREOThEAc9EOThFRTg5RAVZMUNDMTBDQy8xQ0MxMENDAAMAWv/rBeUFxAAfADMARwAfQA4dBAQlJUMUDQ0vLzkDcgArMhEzETMvMxEzETMwMUEzFAYjIiYmNTU0NjYzMhYVIzQmIyIGBhUVFBYWMzI2JRQeAjMyPgI1NC4CIyIOAgc0EjYkMzIEFhIVFAIGBCMiJCYCA8mWs5prm1VVm2uatJZdW0FZLS1ZQVtc/QZco9d7eteiXFyj1np716NcdW7EAQGTkwEBw25uw/7/k5P+/8RuAlWdnWKuc3VzrmKdnWJVQXRKdkt0QVTnheWrX1+r5oSF5KpfX6rkhZ8BEMtxccv+8J+f/vDNcnLNARAAAAIAjgK0Aw4FxQAXADEAGrUxGhoNFiq4AQCyCA0DAD8zGtzEEjkvMzAxQRE0JiYjIgYVJzQ2NjMyFhYVERQWFyMmExcjIgYGFRQWMzI2NjUXDgIjIiY1NDY2MwJMGjYpQ02lTYtdV4FJDA6qGCkBkztNJTs/KlU6Eg8+Y0R4gUuXcgNeAVQqOx40Mw5EaTw+elz+xjFYLEkBcnEfNB8qMSY4GHEgRCx7Z0pnNv//AFcAiQOFA6cEJgGS6/4ABwGSAVX//gACAH8BdwO/AyIAAwAHABK2BgcDBgICAwAvMxEzEjkvMDFBFSE1BREjEQO//MADQL4DIqWlS/6gAWAABABZ/+sF5QXEAB4ALwBDAFcANUAbHxsYIAQCAgEBDykNDTU1UwwPD0lTE3I/SQNyACsyKxI5LzMRMxEzLzMSOX0vMxIXOTAxQSMnMz4CNTQmJiMjESMRITIWFhUUBgYHIgYjDgIjNzIWFRUUFhcVIyYmNTU0JiUUHgIzMj4CNTQuAiMiDgIHNBI2JDMyBBYSFRQCBgQjIiQmAgM42ALBLEwuIU9DhZEBFmORTzJhRgMHAxEJCR4VnHIHCpUKA0L9UVuk13p71qJcXKLWe3rXpFt2bsQBAZOTAQHDb2/D/v+Tk/7/xG4CjoIBGzUnMToZ/TEDUDlzVjZUPRMOCgkCY4doNiVDFxAaYBY0SURLheWrX1+r5oSF5KpfX6rkhZ8BEMtxccv+8J+f/vDNcnLNARAAAQCdBRADRAWqAAMACLEDAgAvMzAxQRUhNQNE/VkFqpqaAAIAgQOxAo4FxQAPABsAD7UTDMAZBAMAPzMazDIwMVM0NjYzMhYWFRQGBiMiJiY3FBYzMjY1NCYjIgaBSHlHSHZHR3ZIR3lIh0w1NUhINTVMBLlJeklJeklJeUZGeUk2SUg3OEpKAAMAXAABA/AE/QADAAcACwAStwsCAwMEChJyACsvOS8zMjAxQRUhNQERIxEBFSE1A/D8bAI81QIL/K0Dg8TEAXr8PAPE+8XBwQAAAQA9ApsCsAW7ABwAE7EcArgBALMLEwNyACsyGswyMDFBFSE1AT4CNTQmIyIGFSM0NjYzMhYWFRQGBgcHArD9nwEfKTEXODVAP7ZJh15fhUcwW0ONAyyRegEJJT80Eis3RzNJekg6bEw3XVw3dgACADcCkAKpBbsAGQAzACxADBwYAAAaGhAsKSkkELgBALULCwgQA3IAKzIyLxoQzDIvMhE5LzMSOTkwMUEzMjY2NTQmIyIGFSM0NjYzMhYWFRQGBiMjFTUzMhYWFRQGBiMiJiY1MxQWMzI2NTQmJiMBDlcrOB03QDFDtlCGT1uKTUd9VHV1XYRFVJFaS41bt0g9QT8jQCsEbBksHiQ3KSVHZDQzZEo5WDEpUitYRkpoNjFqVic4OSsmLhUAAAEAbwTTAkIGAAADAAqyAYAAAC8azTAxUxMhAW/DARD+8ATTAS3+0wADAJP+YAQkBDoABAAaAB4AGUAMHQUAFgsTcgMSchwAAC8yKysyETkvMDFBMxEjJzc3FA4CIyImJicDMxQeAjMyPgIBMxEjAzLy3xMjXytZiF1KdlYcH4keNkkrT2c7Gf0+8PAEOvvG+v0CcsCOTitcSgERWnI9GDFZeQKL+iYAAAEASQAAA1QFsAAMAA62AwsCcgAScgArK80wMWEjESMiJiY1NDY2MyEDVMlWn9tyctufAR8CCHnUh4bUegAAAQCQAkYBqgNOAAsACLEDCQAvMzAxUzQ2MzIWFRQGIyImkEtCQktLQkJLAsk4TU04OEtLAAEAbP4/AcoABAATABG2CwqAEwIAEgA/MjIazDIwMXczBxYWFRQOAiMnMjY2NTQmJieLsww5XypTe1EHJz4lIEM1BDgKTVYzUjsgiBMoIB8iEgQAAAEAggKbAgEFrwAGAAqzBgJyAQAvKzAxQREjEQc1JQIBtcoBbAWv/OwCQDGPdgACAHkCswMoBcUAEQAjABC2Fw4gBQNyDgAvKzIRMzAxUzU0NjYzMhYWFRUUBgYjIiYmNxUUFhYzMjY2NTU0JiYjIgYGeVWZamqaU1OZaWuaVagmUDw7TScoTTw7TyYEE1BnoFtboGdQZ59aWp+3UDxgNzdgPFA7YDc4XgD//wBeAIsDlwOoBCYBkwkAAAcBkwF9AAD//wBfAAAFfQWsBCcB1v/dApgAJwGUARwACAAHAjACvgAA//8AUwAABcUFrwQnAZQA8QAIACcB1v/RApsABwHVAxUAAP//AGYAAAYABbsEJwGUAa8ACAAnAjADQQAAAAcCLwAvApsAAgBG/n4DpwROACEALQAYQAoAACUlKxAREQ0WAC8zMy8/My8zLzAxQTMUBgYHDgIVFBYWMzI2NjczDgIjIiYmNTQ2Njc+AhMUBiMiJjU0NjMyFgGY3x1DPCxKLSxTOzRYNwHxAXTDeojBZkhxPyUnDvdJQEFKSkFASQKWXX1lPCxQXT4/VispVEB+rVhbrHtakn47I0hUAWo2S0s2NkpKAAb//AAAB04FsAAEAAgADAAQABQAGAAxQBgAFxcIBxQTBxMHEwINAxgCcgwLCw4CCHIAKzIyETMrMjIROTkvLxEzETMyETMwMUEBIQEzExUhNQEVITUTEyMDARUhNQEVITUD2P1D/uEDPJmA/RUF6P0jGD3xPQMn/YoCx/0kBRj66AWw/HrS0v6XwcEE7/pQBbD9ocHBAl/BwQACAEwAywPrBHcAAwAHAAyzBAYCAAAvLzMyMDF3JwEXAwE3Ad6SAwuSkPz1kgMLy5EDG5L85gMakvzlAAADAGn/ogUiBe0AAwAbADMAF0ALAQAvCiMWA3IKCXIAKysyETMyMzAxQQEjARMVFAIGBiMiLgM1NTQSNjYzMh4DBzU0LgMjIg4CFRUUHgMzMj4CBRD8MqcD0LdWoN6Ha7mWazlYod2GbLqVaTn8HjtWb0NTglswHzxXbkJUglovBe35tQZL/RNQpf76uGE/d63dhFClAQW5YT94rN3UUmGfeVIqQX+7elJin3pTKkGBvAAAAgCVAAAEgQWwAAMAGQAdQA4PDg4DGQQEAwACcgMIcgArKxE5LzMROS8zMDFTMxEjEyEyFhYVFAYGIyE1ITI2NjU0JiYjI5Xx8WABiqfkd3fkp/7eASJidzc3d2L6BbD6UASYccZ/fsZxv0ZwPkBxSAAAAQCK/+wEngYVADkAGUANIxs2CAIKcggBchsLcgArKysRMxEzMDFBESMRND4CMzIWFhUUDgIVFB4DFRQGBiMiJiYnNxYWMzI2NjU0LgM1ND4CNTQmJiMiBgYBevA+c6BkcbVrIy4jQWBgQWa8gTRyXxsxIXxHQFQqQWBhQSUwJS1OMjtVLgRR+68EU3CocDpOnHdNYklLNzBRT1tzTHSfURIdEb8ULClHLjVSTFdyT0BZS1M6OE8qNXMAAwBI/+sGhgRPABQAMgBeADdAHFczMzIXRkUUJQADKRdFF0UPHykLckw+PgUPB3IAKzIyETMrMhI5OS8vEhc5ETMRMzIRMzAxZRE0JiYjIgYGFSc0PgIzMhYWFREDFyMiBgYVFBYWMzI+AjcXDgIjIiYmNTQ+AjMBIi4CNTU0PgIXMh4CFRUhNSE1NCYmIyIOAhUVFB4CMzI2NxcOAgLhKlM7QF4y8UF2pmZ+umjAAedNaTUoUj8wY1QzAXUac7R9e6pYPXixdQLDfL6DQkJ+sW5rp3M7/M8CQipcS0BdPR4iR3FPb4o3Rx1tm7cCEj5YLypIKxJIeFoxV66C/hMBqaQwTi4qQyYkOD8clTBkQ1KWZE97VS39aE6OwXM5d8WQTwFDgLRwjKcdRGw/NV5+STlHeVw0PR+hFzkrAAIAaP/sBEIGLAA0ADgAGUALNiAWFgEqDAtyOAEALzMrMhI5LzMzMDFTNxYEFhIVFRQOAiMiLgI1ND4CMzIWFhcnNC4CIyIOAhUUHgIzMj4CNTU0LgIlAScB9UurARrOb0qFtWxttINGP3elZnG2bQRXIUJkQ0BiQyIiQV48PF1AIWKp2AJv/dlLAigFbb8lovH+ybxVf9SaU0uGsWZyuYVIZ6lkAh1BOCMsU3ZKOWpUMThkh09lp/u0dTD+lWsBagAAAwBDAJYEOgTJAAMADwAbABO3GRMCBw0DAhIAP93GMhDGMjAxQRUhNQE0NjMyFhUUBiMiJhE0NjMyFhUUBiMiJgQ6/AkBcktCQktLQkJLS0JCS0tCQksDGM7OAS44S0s4OEpK/Qo4S0s4N0tLAAADAE7/dQQ8BL0AAwAZAC8AGUAMIAEBFQtyKwAACgdyACsyLzIrMi8yMDFBASMBATU0PgIzMh4CFRUUDgIjIi4CNxUUHgIzMj4CNTU0LgIjIg4CA9z9aY8Cl/0BRIG7dne7gkREgrp2d7uCRPEeQGRFQ2NAHx9BY0REY0AeBL36uAVI/VQXdcmVU1OVyXUXdciVU1OVyIwXSYJiODhigkkXSIFkOTlkgQADAIH+YAQ0BgAAAwAZAC8AG0APKwogFQdyCgtyAwByAg5yACsrKysyETMwMUERIxEBFRQOAiMiLgInNT4DMzIeAgc1NC4CIyIOAgcVHgMzMj4CAXPyA7M3a5xmZZdoPw0NP2iVZGeeazfxHDxdQUBcPiMGCCU9W0BBXDscBgD4YAeg/CcVdsmVUkuKu3BRd8KMTE+Ry5EVS4FiNytMZTvCN19IKThjggAEAFD/7AStBgAABAAaAC8AMwAdQA8hBAQWC3IzMisLB3IBAHIAKysyzjIrMi8yMDFlETMRIwE1ND4CMzIeAhcVDgMjIi4CNxUUHgIzMjY2NzUuAyMiDgIBFSE1AxDy2/0pOm6eY2KUaD4NDT5olWNinW468Rs6XUFSaj0LBiU+Wz5CXDscA2z9YOAFIPoAAhEVe8uTT0yNw3dDdMCMTFKUyYsVSoBhN0h7TLU7Zk0rOGKCAwGnpwAABAAfAAAFnAWwAAMABwALAA8AH0APAwKABwYGCgwLAnINCghyACsyKzIROS8zGswyMDFBFSE1ARUhNRMRIxEhESMRBZz6gwQ8/Ps++gSD+wSrnp7+pcfHAmD6UAWw+lAFsAABAJAAAAGBBDoAAwAMtQMGcgIKcgArKzAxQREjEQGB8QQ6+8YEOgAAAwCNAAAEbQQ6AAMACQANAB9ADwwHBwsGBgIJAwZyCgIKcgArMisyETkvMzMRMzAxQREjESEBISczARMBNwEBfvEDxv3//vQfswFNE/6ZvwHbBDr7xgQ6/XXaAbH7xgHYif2fAAMAIAAABDYFsAADAAcACwAbQA0CCgAHBgYKCwJyCghyACsrETMRMzIRMzAxQRUFNQEVITUTESMRAo79kgQW/SVF+gOukLuQ/dTHxwTp+lAFsAACACAAAAIyBgAAAwAHABNACQIGAAcAcgYKcgArKzIRMzAxQRUFNQERIxECMv3uAXzxA7CQu5ADC/oABgAAAAMAkP5LBQwFsAADAAcAGQAdQA4VDgYHBwMIcgkFBAACcgArMjIyKzIRMy8zMDFTMxEjEzcBBxEzERQGBiMiJic3FhYzMjY2NZD7+0uwAzex+1ehcSM+JA4VNxcqOh4FsPpQBTt1+sV1BbD6GHuqWAcKwwYGKlE6AAIAff5LBAYETgAEACoAGUAOHBUPciYLB3IDBnICCnIAKysrMisyMDFBESMRMwMHND4CMzIeAhURFAYGIyImJzcWFjMyNjY1ETQuAiMiDgIBbvHeJyk5apZeUYNdM1aebyM+Ig4TOxYqOR8aM0kvSWtFIgNT/K0EOv4HAnLBjk4wZ6Vz/SN5qFYHCsEGBihPOgLbQ102GTRaeAAFAGX/6wc0BcUAIwAnACsALwAzADNAGi8uLiYyKDMCciknJghyFRISFhkJBAcHAwADAD8yMhEzPzMzETMrMjIrMjIROS8zMDFBMhYXFSYmIyIOAhURFB4CMzI2NxUGBiMiLgI1ETQ+AgEVITUTESMRARUhNQEVITUCqk2VQ0KUT05+Wi8wWn9OTpRBQ5NNgtacU1Ob1QUM/PtH+wNU/WADAP0ABcUNCMYMDzNmlmT+zmSXZjQPDMYHDlef24QBMITbn1f7AsfHBOn6UAWw/aDExAJgyMgAAwBZ/+sG9gRPACoAQABWACdAEyQAAEc8ExISPFIZCwsxB3I8C3IAKysyETMyETkvMxEzMxEzMDFFIi4CNTU0PgIXMh4CFRUhNSE1NCYmIyIOAhUVFB4CMzI2NxcGBgE1ND4CMzIeAhUVFA4CIyIuAjcVFB4CMzI+AjU1NC4CIyIOAgVNdLmDR0eArmdwqXE6/NUCPS1eSzhYPB4iRmhGbYw4TDfH+nxDgLh2eLmAQkJ/uXd3uYBD8h0+YUVEYT4dHT5iRURhPR0VUZDDcyp3x5RRAUaBsW2OrRpCaz83YoBJKkZ8XzY2J5swUgImF3XJlVNTlcl1F3XJlVNTlcmMF0mCYzg4Y4JJF0iBZDk5ZIEAAAEAiQAAApQGFQARAA62DQYBcgEKcgArKzIwMWEjETQ2NjMyFhcHJiYjIgYGFQF68VmmcyhKJxgTLR81SCYEonmlVQwJtQUFKlA5AAABAFX/7AUjBcQALAAbQA0PAAYJCQAaIgNyAAlyACsrMhE5LzMRMzAxRSIuAjU1IRUhFRQeAjMyPgI1NTQuAiMiBgcnPgIzMh4CFRUUDgICvZfnm08EIPzaJ1aMZViIXS8wZqV3hLw7MBh5tG+k/KtYX6ffFF2x+ZqPwyFPimc7SoOtYntjrYNLMhjCDSwhZbf9l3uX/LdjAAH/3v5LAtQGFQAnAClAFRQCAhUnBnIfIiIeGwFyCw4OCgcPcgArMjIRMysyMhEzKzIyETMwMUEVIxEUBgYjIiYnNxYWMzI2NjURIzUzNTQ2NjMyFhcHJiYjIgYGFRUCic9Tm2wkPCIPDz8QKzgbpqZZpnQnSyYXFDEfNEckBDqw/DF3pFUHCrsFBylPOAPPsGh5pVUMCbgFBShPOWgAAwBb/+wFrwYrAAkAIQA5AB1ADgUGBikpAAAcA3I1EAlyACsyKzIvMhE5ETMwMUEzFAYGIzUyNjYTFRQCBgYjIi4DNTU0EjY2MzIeAwc1NC4DIyIOAhUVFB4DMzI+AgT6tVGngEtVIxpWoN6HarqWazlYod6FbLuUajj8HjtWb0NSglwwHzxXb0FUg1ouBiuHvmORQ339LFCl/vq4YT93rd2EUKUBBblhP3is3dRSYZ95UipBf7t6UmKfelMqQYG8AAADAE3/7AS3BKgACQAfADUAFUAKJhsLcjEAABAHcgArMi8yKzIwMUEzFAYGIzUyNjYBNTQ+AjMyHgIVFRQOAiMiLgI3FRQeAjMyPgI1NTQuAiMiDgIEFqFDlXtLTBv8N0SBu3Z3vIFERIG6d3e7gkTxHkFjRURiPyAfQGNFRGJBHgSoc6ZYdz5w/bUXdcmVU1OVyXUXdciVU1OVyIwXSYJiODhigkkXSIFkOTlkgQACAID/7AY6BgIACQAfABlADAUKCgAAFQJyGxAJcgArMisyLzIRMzAxQTMUBgYjNTI2NiUzERQGBiMiJiY1ETMRFBYWMzI2NjUFi69PuJ5paiP+OvqQ95id9o36SIRaWoNIBgKRyGiSRogP/DOm4HFx4KYDzfwzaYdAQIdpAAADAHf/7AUkBJUACQAOACUAHUAOBQsLAAAbBnIiDg4VC3IAKzIvMisyLzIRMzAxQTMUBgYjNzI2NgERMxEjEzcUDgIjIi4CNREzERQeAjMyNjYEhp5BnYsBXlUX/oHy5BRRMGScbU+EXzTxHDBAJGd3MwSVdJ5QfTFl/LkDO/vGAeACbbeHSy5gmmsCu/1DO08wFFGKAAAB/67+SwGSBDoAEQAOtg0GD3IBBnIAKysyMDFTMxEUBgYjIiYnNxYWMzI2NjWh8VWfbiQ8Ig4TOhUqOh8EOvuIeahWBwq7BgYrUjoAAQBX/+wD9gRQACoAGUAMERQUABkLC3IkAAdyACsyKzISOS8zMDFBMh4CFRUUDgInIi4CNTUhFSEVFBYWMzI+AjU1NC4CIyIGByc2NgIAdLmDRkaArmdwqXE6Ayv9wy1fSjhXPB8jRWhGbIw5TDjHBFBRkMNzKnbIlFEBRoGxbY6uGUFsQDhhgUkqRnxfNjYnmzBSAAEAkAThA0QGAAAIABS3BwUFBAEDgAgALxrNMjkyETMwMUEBFSMnByM1AQIvARXDmZm/AREGAP7sC52dDQESAAABAG4E4AM1BgAACAAStgEGgAcEAgAALzIyMhrNOTAxQRc3MxUBIwE1ATuWlc/+6Jj+6QYAnZ0L/usBFgoA//8AnQUQA0QFqgYGAHAAAAABAHUEzQL/BecADgAQtQEBCYAMBQAvMxrMMi8wMUEzFAYGIyImNTMUFjMyNgJMs0+RZJevs0NQT0IF51N/SJ19OFVVAAEAgQTkAYYF1QALAAmyAwkQAD8zMDFTNDYzMhYVFAYjIiaBRT09RkY9PUUFXDNGRjM0REQAAAIAeASNAi0GJQANABkADrQXBIARCwAvMxrMMjAxUzQ2NjMyFhUUBgYjIiY3FBYzMjY1NCYjIgZ4OmI/XX05Yz5efWs+MjI9PTIyPgVXOV04eVU5XDV0VixDQi0uQ0MAAAEAKf5UAZ8AOgAVAA60CA+AAQAALzIazDIwMWUXDgIVFBYzMjY3FwYGIyImNTQ2NgEWcy5KKSAnHiwPFxlOPFh7Lmg6Oh49RSgeJxEHiw8dZmI0ZV0AAQB3BN4DUwXzABkAJ0ATAAABAQoSQA8aSBIFgA0NDg4XBQAvMzMvMy8aEM0rMjIvMy8wMUEXFAYGIyIuAiMiBhUnNDY2MzIeAjMyNgLAkzpkPzFEODsoJjWUOmQ/KUM9QCcmNgXzC0lzQhwkGzgvCEh0RBskHDoAAgBLBNEDWAX/AAMABwAOtAEFgAAEAC8zGs0yMDFBEzMBIRMzAwGL5On+9f3+tOThBNEBLv7SAS7+0gAAAgCJ/m4B8P+9AAsAFwAOtA8JgBUDAC8zGswyMDFXNDYzMhYVFAYjIiY3FBYzMjY1NCYjIgaJa0tJaGhJS2tlLyIgLCwgIi/sSWBgSUpcXUkhLi0iIy4uAAH8kwTT/mcGAAADAAqyA4ACAC8azTAxQRMjAf2jxMn+9QYA/tMBLQAB/WIE0/81BgAAAwAKsgGAAAAvGs0wMUETIQH9YsMBEP7wBNMBLf7TAP///HQE3v9QBfMEBwCl+/0AAAAB/ToE5v6bBn0AFAAQtRQCAIALDAAvMxrMMjIwMUEjJz4CNTQuAiM3Mh4CFRQGB/4CswkzPh0XKjghB1WBVy1gOQTmjwMPHRgUHBEHeRsyRixIRAgAAAL8CATk/zAF7gADAAcADrQHA4AEAAAvMhrNMjAxQSMBIQEjAzP+AM/+1wEAAijD9vYE5AEK/vYBCgAB/R7+l/4x/4oACwAIsQMJAC8zMDFFNDYzMhYVFAYjIib9HklAQEpKQEBJ8DRGRjQzRkYAAQDNBOwB7AZAAAMACrIAgAEALxrNMDFTEzMDzUHejwTsAVT+rAADAG4E5QO3BrAAAwAPABsAGUAKExkZDQGAAAAHDQAvMzMvGs0RMxEzMDFBEzMDBTQ2MzIWFRQGIyImJTQ2MzIWFRQGIyImAcMs44L+HkM5OEVFODlDAk9EOTlERDk5RAWHASn+1y4xQ0MxMENDLzFDQzEwQ0P//wCQAkYBqgNOBgYAeAAAAAEAmQAABDcFsAAFAA62AgUCcgQIcgArKzIwMUEVIREjEQQ3/Vz6BbDI+xgFsAADABoAAAWmBbAABAAJAA0AG0ANBgIHAwJyDQwMBQIScgArMjIRMysyEjkwMUEBIQEzAQE3MwEnFSE1Ayj9+P76AlORAaL+ByySAkHf/BoFL/rRBbD6UAU3efpQx8fHAAADAFz/7AUVBcQAAwAbADMAG0ANLwoDAgIKIxYDcgoJcgArKzIROS8zETMwMUEVITUFFRQCBgYjIi4DNTU0EjY2MzIeAwc1NC4DIyIOAhUVFB4DMzI+AgOf/kYDMFag3odruZZrOVih3YZsupVqOPwePFVvQ1KCXDAfPFduQlSCWi8DOb+/OVCl/vq4YT93rd2EUKUBBblhP3is3dRSYZ95UipBf7t6UmKfelMqQYG8AAIAIAAABQ8FsAAEAAkAF0ALBgACBwMCcgUCCHIAKzIrMhI5OTAxQQEhATMBASczAQLA/m7+8gH7sAE3/mwKsAH7BM/7MQWw+lAE0936UAAAAwBqAAAELgWwAAMABwALABtADQEABQQEAAgJAnIACHIAKysyETkvMxEzMDFzNSEVATUhFQE1IRVqA8T8owLx/LcDlMfHAofCwgJhyMgAAQCZAAAFFAWwAAcAE0AJAgYEBwJyBghyACsrMhEzMDFBESMRIREjEQUU+v15+gWw+lAE6PsYBbAAAAMARwAABEsFsAADAAcAEAAhQBAOBgYHBw8CcgwDAwICCwhyACsyETMRMysyETMRMzAxZRUhNQEVITUBFQEjNQEBNTMES/xcA4H8ggJx/eG1Acv+NbXHx8cE6cjI/TcU/S2SAksCQZIAAwBMAAAFtgWwABMAJwArACFAEBQVFQEAKQhyHx4eCgsoAnIAK80yMhEzK80yMhEzMDFlIyIuAjU0NiQzMzIeAhUUBgQlMzI2NjU0LgIjIyIGBhUUHgIBESMRA2bKhdmdVZUBCa/Pg9mdVZT+9v6EzHCYTy1Xf1LRbZlRLViCATf7q06Ry3un/YxPlcx+pfiK0VGZbFOBWi9TnW9Qf1gtBDT6UAWwAAIARgAABWQFsAAZAB0AGUAMFAcHDRwIch0BDQJyACsyMisROREzMDFBMxEUAgQjIyIuAjURMxEUHgIzMzI2NjUBESMRBGj8nP7ptlaG36FZ+zNghlNVcqBU/ur6BbD+Er3++YlOltyNAe7+EmCSYjJZrYAB7vpQBbAAAwBsAAAE2wXEAC0AMQA1ACVAEigSEi8pKTQRETMuMhJyBh0DcgArMisyMjIRMzMRMzIRMzAxQTU0LgIjIg4CFRUUHgIXFS4DNTU0PgIzMh4CFRUUDgIHNT4DAzUhFSE1IRUDzSlOb0VEbU0pI0BaNWa4j1RSl89+f9GXUlKOtmQ0Vz4j7AHu+6gB9gLvZmieazY2a55oZn6+hlEPjw13ve2DZIrlp1tbp+WKZILtvXcOjxBRhr79jsjIyMgAAAMAVv/rBHsETgAWACwAQQAaQA0uBjQ7Ox0SC3IoBgdyACsyKzIyETM/MDFTNTQ+AjMyHgMXFQ4DIyIuAjcVFB4CMzI+Ajc1LgMjIg4CATMRFB4CMzI2NxcGBiMiLgInEVY3a55nSndaPykKDDlgjF5lnWw38ho4XEFAWj0mCwkkPlw/QVw6GgHkzwsVHBEIDgUYIDshNVc/JQUB+xV+0ppUMl+EpWA+dL+MTE6OwYgVR3pcMzJYdUJHRn5gNzxpiwHc/QkrNiENBAGxEgsjS3ZSAjAAAgCX/nUEbgXEABwAOgAeQA41ACYnJxwcMB0DEwkLcgArMj8zOS8zEjk5LzAxQTMyFhYVFAYGIyIuAjU3FBYWMzI2NjU0JiYjIxMyFhYVFAYGIyM1MzI2NjU0JiYjIgYGFREjETQ2NgIbjZDKbHDKiE6fhVBbT45eUHE7NmlNdU6Jym9rwYFjSk1dKy5cRz9nO/GA0wMtZLF1jMRnLl+WaBo/aT5BcEdIdEYDH2CweWOiYIQ1YkE3Xzw6aUT6WAWoe79tAAMAHv5fA/UEOgADAAgADQAZQA4IDAMECgUBBQ0GcgEOcgArKzISFzkwMWURIxE3EzMBIwMBFyMBAoHxb/v7/oGivAEEJKL+gG398gIOlQM4+8YEOvzE/gQ6AAIAUf/sBDoGIQAsAEIAGUANFCg+AwQzHgtyCwQBcgArMisyEhc5MDFTNDY2MzIWFwcmJiMiBgYVFB4CFx4CFRUUDgIjIi4CNTU0NjY3Jy4CExUUHgIzMj4CNTU0LgInIg4CzWCxe092RgEqh0w2TisQKUs8lshlRIG5dXe7gUNZlFUCPFkvdR9AYkRCYT8fJEReOkJjQSAE7GCKSxkavQ4nHDUjEigpKxQ0n9mKFXPDklFQj8FxFnS+gBUFHE9m/XEWSH9hODhhf0gWOnFiQww4YX4AAgBi/+wEEgRNAB8APwAfQA8AIT4+AwMWNSsHcgwWC3IAKzIrMhI5LzMSOTkwMUEzFSMiBgYVFB4CMzI2NjUzFA4CIyIuAjU0PgIFIyIuAjU0PgIzMh4CFSM0JiYjIgYGFRQeAjMzAg3qwkdmNR07VjhJaDjwUIalVWevgkg6bp4BT+pbl2w6QnqqZ1uhfEfxOWE9SV4sGTJPNcICS3cfQzYeNysZLEgpWIFTKCxUeUxEaUglRipLYjdNdU8pLFV4TCpAJCpBJB4zJRQAAgBZ/n0DxQWwACgALAAVQAkVAiwsKSkAAnIAKzIvMxEzLzAxQTMVAQ4CFRQeAhcXHgIVFAYGByc+AjU0JiYnJy4DNTQ2NjcBIRUhAz2I/ppHYTIVKD4pZVF8RkJeL3wgKhUZOjBRWX5QJTt6Xf6yAwv89QWwjf5SVJOaXi9DMB8MHxYxV1I3emshYiI9NxkXJh4MFhdBWHZMXcHObwHYvgAAAgB9/mEEBgROAAQAHAAXQAwYCwMGcgIKcgsHchEALysrKxEzMDFBESMRMwMHND4CMzIeAhURIxE0LgIjIg4CAW7x3hxGO2+dYlGDXTPyGjNJL0ZnQyADU/ytBDr+BwJywY5OKl+dc/usBFI9VDMXNFx4AAADAHb/7AQwBcQAGQAnADYAHUAQDShqMCBqMDANABpqAA0LcgArLysSOS8rKzAxQTIeAxUVFA4DIyIuAzU1ND4DFyIOAhUVITU0LgMDMj4DNTUhFRQeAwJSV5N2UysrUnWTV1aTdVQsLFN0k1Y4WDwfAdgUJjpLLC5LOCcT/igUKDlLBcQwZJfPhNeDz5plMjJlms+D14TPl2QwvzNnmmc0NFKEY0Eh+6ciQ2WFUy4uU4VlQyIAAAEAo//0Al4EOgARAA62Bg0LcgAGcgArKzIwMVMzAxQWFjMyNjcVBgYjIiYmNaPyAR00IxkuDx5PM1OASAQ6/PozNRMHA7cKDjyFcAACABX/7gRNBfwABAAmAB5AEAAbBAMEAiAFAHIPFhYCCnIAKzIvMysyEhc5MDFBASEBFwEyHgIXAR4CMzI2MxcGBiMiJiYnAQMuAiMiBgcnNjYCIf77/vkBnKb+vTdVPywPAaQNHSUZCRMIAxEwHUlnRx3+4HMOIy8fCx0OBBlPAvD9EARSCAGyGC1BKPvKHy0YAb0EBileTwMGAREkKhMBAbIHCQAAAgBn/nYD2gXEAB4ARgAZQAsfEQ8PISEzBRsDcgArMi85LzMSOTkwMUEHLgIjIgYGFRQeAjMzFSMiLgI1ND4CMzIWFgMzFSMiBgYVFBYWFxceAgcUBgYHJz4CNTQmJicnLgM1ND4CA64jLklGKFlyNh9BaEmSlnO7h0lDf7BuOmJX0ZKOcZ5TSXdHZld7QwFCXy2CHy0YGzkvPWiodkBUm9kFl7kLEQgsSy4oRDEbjC1UdUpWhl4xCxT9xYg/f2FPa0ARGRU0WUs4eWohYyE5OB8YIxwMERtCYJVwaJ9sNwADADD/9ATYBDoAAwAHABkAGUANDhULcgYKcgkHAgMGcgArMjIyKysyMDFBFSE1IREjESEzERQWFjMyNjcXBgYjIiYmNQSz+30Bn/ECPvIdNCMZLg4BHk8zU4BJBDq6uvvGBDr8+jM1EwcDtwoOPIVwAAABAID+YAQwBE4ALwAXQAweKQYRC3IGB3IADnIAKysrETMyMDFTETQ+AjMyHgIVFRQOAiMiLgInHgIzHgIzMj4CNTU0LgIjIg4CFRGARX6taHWwdzw2a5tlZJRmPg0ELS0BCzxtVEFcOhoZOVtBPFQ2Gf5gA+N6wYhIVJrSfhVzwY5NSYe6cAEcHEh1RTNcekcVTotpPDtkfD78KwABAFD+igPpBE4ALQAOtRsJBQAHcgArzDMvMDFBMhYWFSM0JiYjIg4CFRUUFhYXHgIXFAYGByc+Aic0JiYnLgI1NTQ+AgI4fsRv5C1bRUReOhpChmRZgUcCQF4ufyAqFQEbOCyZ0WtAfLYETmC2gTxiOTtlfUMjWoFXHRgzWVM3emkhYiI5Nh8cJhoKJobOjyNwxZZVAAADAFD/7AR9BDoAGAAuADIAE0AJKgYyBnIfFAtyACsyKzIyMDFTNTQ+AjMeAhceAhUVFA4CIyIuAjcVFB4CMzI+AjU1NC4CIyIOAgEVITVQQoC4dhovQTdVh09BfrZ1drqAQvEdPmJEQl48HBw8X0JEYj0dAzz9wwIRF3HBkFAHMjcQJISsZRZouY1RU5TJjBdJgmI5OWKCSRdDel82Nl96Ac/AwAAAAgA8/+wD7gQ6AAMAFQAVQAoFChECAwZyEQtyACsrMhEzMjAxQRUhNSEzERQWFjMyNjcXBgYjIiYmNQPu/E4BVPEZLR0fLBUiL1YyWoBFBDq+vvzyMTcVDQiuGhBEkHIAAQB//+sEBAQ6AB4AE0AJEAcZAAZyGQtyACsrETMyMDFTMxEUHgIzMj4CNSYCJzMeAhUUDgIjIi4CNX/yGCw7Ij9gQSECPi/uHjQgOni4f16YbDoEOv1qRGE6GkRyjEaHAQV7Ppy9b3fUolw0bKhzAAEARv4iBYUEQgAvABlADCsFBRkYBnIiDwtyAAAvKzIrMjIRMzAxQRE0NjYzMh4CFRQGBgQjIiQmJjU0NjY3Fw4CBxQeAjMyNjY1NC4CIyIGFRECaEp+UHm/hkdInf7/u7r+/5xHOmxJmTJCIQIrY6V6o7tRI0BfPiEZ/iIFHE50QleXwmpvzaNeYqnYdm6+mzaOMXqEQFCTc0Nur2BGfWA3Jxb63QACAFL+JQV/BDoAHgAiABVACiEHGQtyIBAABnIAKzIyKzIvMDFTMxEUHgIzMj4CNSYmJzMeAhUUBgYEIyIuAjUBMxEjUvE/b5RWeqhkLQJCMeohOCNFm/8Au5XzrlwCEfDwBDr+FHWiYStDdJRQgvt3O5e2bHfZqWJHlemhAen56wAAAgBl/+sGMAQ6AB4APwAZQAwBFwoKKTYfBnI2C3IAKysRMzMRMzIwMUEzHgIVFA4CIyIuAjURMxEUHgIzMj4CNSYCJTMGAgcUHgMzMj4CNREzERQOAiMiLgM1NDY2BLPtJ0EoLGGhdFeKYjOwHDREKDRHLBQETPwF7jtNAwwaLD4pKUUzHLAzYopXXYtiPBwoQgQ6Pp28cHfTolxEhMB9ATf+u1Z2SiFAbY1OhwEEfHz+/Ic+dGJLKSFKdlYBRf7JfcCERDxsk65fcLydAAABAHj/6wSeBcYAOAAdQA0dHhc2BAQNIxcLci0NAC8zKzIROS8zEMwyMDFBFwYGIyIkJjU1NDY2MzIeAhURFAYGIyIuAjURNxEUFhYzMjY2NRE0LgIjIgYGFRUUFhYzMjYElAoxgDyy/u6bXaNpUoNdMXTRjGqsfEPpO21MQl0yDx0rHSI2H1Wmezx2Ax/DEBmH7ZYTdqdZNWaUXv2GktJwRH2raAEhAf7eUXlCPHhYAoktQiwUIEY5FliSVxMAA//hAAAEqwXEAAMAFgApAB5ADhAJCR8mA3IaGBYDAwISAD8zETMzMysyMhEzMDFBESMRNxM+AjMyFhcHJiYjIgYGBwEnAxMXBwEuAiMiBgcnNjYzMhYWAsL7ctYhUGM/J0MfJQQmDhcmHwz+z6ST2COm/tIMISYWDiYEIx5CJzxkVAK3/UkCtyoCClFeKg4MvgIEDyIb/VABAvn96uMBArAcIQ8EAr0NDiRcAAMAK//rBmAEOgADACQARQAhQBAmBQMcDy88C3I8DwIDBnIPAC8rMhE5KzIRMxEzMzAxQRUhNSEzHgIVFA4DIyIuAjU1MxUUHgIzMj4DNSYCJTMGAgcUHgMzMj4CNTUzFRQOAiMiLgM1NDY2BmD5ywRv7iZBKBs5XIRZWI1jNa8eNkcqJTcmGAsETPwh7jtOAwsYJjckKkg1HrA1Y45ZWINdORsoQgQ6srI+nbxwX66TbDxEhMB91OJWdkohKUpjdD6HAQR8fP78hz50YkspIUp2VuLUfcCERDxsk65fcLydAAADACT/8QW7BbAAGwAfACMAIUARHyMYBQUOIiMeCHIjAnIOCXIAKysrETMSOS8zETMwMUE1PgIzMhYWFRQOAiMnMj4CNzQmJiMiBgYTESMRIRUhNQI4NoCDOKHugzx+yY8BVm49FwFDgF5DeHIt+gLr+5MCbsoTHxNmy5ZepHxHvSpIXDFSdD4PHgMs+lAFsMjIAAIAZ//sBO4FxAADACwAHUAOAwICCR0ZFANyKQQJCXIAK8wzK8wzEjkvMzAxQRUhNQEzDgIjIi4CNTU0PgIzMhYWFyMuAiMiDgIVFRQeAzMyNjYDWf2uAur8DIn2sIfZmVJTnNyJr++GD/sKQ4FqVYFXLBozUG1Ga4VFA0DHx/6aj+B/YLT+nXid/rVhgOKTX4dHQX21dHpZlnlVLESEAAADAC0AAAg4BbAAEQAVAC4AJ0ATJCEhCS4WFgAKCQhyFBUVIwACcgArMjIRMysyEjkvMxEzETMwMUEzAw4EIyM1Nz4ENwEVITUBITIWFhUUDgIjIREzESEyNjY1NCYmIyEBZPojCCdFaJFhQCc1TTcjFQUDAP1MAyYBbqbrfUeHw3395fsBIF97Ojp7X/6SBbD9LZ/yrG0zxwMEK1WIxIMCk8jI/e540oVkqX1FBbD7F0x5RUN4SwAAAwCZAAAIQgWwAAMABwAgACNAEQggIAMCAgYVBwJyFhMTBghyACsyETMrMhE5LzMzLzMwMUEVITUTESMRASEyFhYVFA4CIyERMxEhMjY2NTQmJiMhBFT9AT76BC4BbabrfUeIwn395foBIV97Ojp7X/6TA0HGxgJv+lAFsP3UdMiDY6V6QwWw+xtHc0JBcEUAAwAtAAAFwwWwABUAGQAdAB1ADhkBGAYRERgcHQJyGAhyACsrMhE5LzMRMzIwMWEjETQmJiMiDgIHNT4DMzIWFhUBESMRIRUhNQXD+j9/Xy5maGAoKFxlaDOl8IL82/sC6vugAcRndDAIDxUNyAwVDwhfzaYD7PpQBbDIyAAAAgCP/pkFCwWwAAcACwAXQAsJBgECcgsDAwAIcgArMhI5KzIvMDFzETMRIREzESURIxGP+wKG+/5K+wWw+xcE6fpQu/3eAiIAAgCQAAAEugWwAAUAHgAhQBAGHh4EAhMTBQJyFBERBAhyACsyETMrMhEzETkvMzAxQRUhESMREyEyFhYVFA4CIyERMxEhMjY2NTQmJiMhBC/9W/quAW6m7HxGiMN9/eT8ASBfejs7el/+kgWwyPsYBbD90W/IhWSmeUIFsPsXR3RFQ25CAAAGACb+mgXUBbAAAwAHAAsADwATACUAJ0ATCxERIAMDBx4Icg4PDxAUAnIJBQAvMysyMhEzKzIyETMyETMwMWUVITUzESMDIQMjEQMVITUhESMRITMDDgUHIzUzPgM3BRL7zz7wCQWuD+x3/WADYPr9aPsjCCo7SlRXKoZBG0I/MAnHx8f90wIt/dQCLATpyMj6UAWw/bKM4LGHYkUXxxlfm+aiAAUAFQAAB6IFsAAFAAkADQATABcAJ0ATFhEJAwMAAA8PFAwICHIOCgECcgArMjIrMjIyLzMRMxEzMzMwMUEBIQEhBycBIQEBESMRIQEhJyEBEwE3AQJO/eUBMQFjAQYj3/6C/sgB+wJO+gQh/en+qSMBAQFeF/6IvAH0AnYDOv2f2SD9agNAAnD6UAWw/MbZAmH6UAKWqvzAAAACAEn/7ASCBcQAHgA+ACNAEQAgAgI+PhU0MCoJcg8LFQNyACsyzCvMMxI5LzMSOTkwMUEjNTMyNjY1NCYmIyIGBhUjND4CMzIeAhUUDgIlMzIeAhUUDgIjIi4CNTMUFhYzMjY2NTQuAiMjAofKrl10NTt6YEh2RftRjblneMKMSkWAs/7Jynm8gkRRlMl4Yb2ZXPxHfVNfhUclSGpFrgK6jzdjQjtiOzReQF+Xajk1aJtmS4RkOVcyYI1bZp9uODFnoHA+Zz08aEE+WzkcAAEAkgAABQ0FsAAJABdACwUABgIIAnIEBghyACsyKzISOTkwMUEBMxEjEQEjETMBjAKG+/v9evr6AZkEF/pQBBj76AWwAAADACwAAAUPBbAAAwAHABkAGUAMEgURCHICAwMECAJyACsyMhEzKzIyMDFBFSE1IREjESEzAw4EIyM1Nz4ENwRP/UYDevv9T/kjByhEaJFhQCc1TTYkFQUFsMjI+lAFsP0tn/KsbTPHAwQrVYjEgwAAAgAy/+sE4QWwABMAGAAaQA4XFgAVBAgCGAJyDwgJcgArMisyEhc5MDFBASEBDgMjIiYnNxYWMzI2NjcDARMHAQJaAXIBFf4GGD1WelcXQQ8CDDkNOkQpEMsBbkjD/fsB+wO1+1g3Z1AvBALFAgInQygEbPza/voHBDMAAAMATv/EBhgF7AAVACkALQAbQAwfDAwrFgAAKyoDcisALysROS8zETkvMzAxQSEyHgIVFA4CIyEiLgI1ND4CFyIGBhUUHgIzITI2NjU0LgIjAxEjEQKkAR6B2aJaWqLZgf7igNqjWVmj2oBwolcyXoZTASBvoFcxXYRUGPEFJ1ad24aE2p1UVJzZhIbbn1bIX7J9XJBkNl+weV2TZjYBjfnYBigAAgCO/qEFvQWwAAUADQAZQAwMBwJyBQQECQYIcgEALysyMhEzKzIwMWUDIxEjNQURMxEhETMRBb0T54L8TfwChfzJ/dgBX8nJBbD7FwTp+lAAAAIAkQAABO0FsAAVABkAF0ALFwYRERgAAnIYCHIAKysROS8zMjAxUzMRFBYWMzI+AjcVDgMjIiYmNQEzESOR+z5/Xy5mZ2AoJ11kaDOl8IIDYfv7BbD+PWd1MAgPFQ3HDBYPCF/OpgHD+lAAAAEAlQAABwUFsAALABlADAUJBgICCwACcgsIcgArKxEzETMyMjAxUzMRIREzESERMxEhlfwBwvoBvvr5kAWw+xcE6fsXBOn6UAAAAgCV/qEHsQWwAAUAEQAdQA4MBQgIBBEIcg8LBgJyAQAvKzIyKzIyETMzMDFlAyMRIzUBMxEhETMRIREzESEHsRPdgvpW/AHC+gG++vmQv/3iAV+/BPH7FwTp+xcE6fpQAAACABUAAAXWBbAAAwAcAB1ADhESDwQcHA8AAQJyDwhyACsrMhE5LzMRMzIwMVM1IRUTITIWFhUUDgIjIREzESEyNjY1NCYmIyEVAexYAW6m635IiMN8/eX7ASBfejs7el/+kgTwwMD+kW/IhWSmeUIFsPsXR3RFQ25CAAIAmQAABlQFsAAYABwAHUAOGhkOCwAYGAsMAnILCHIAKysROS8zETMyMzAxQSEyFhYVFA4CIyERMxEhMjY2NTQmJiMhAREjEQFGAW+m631HiMN8/eT7ASFfejs7el/+kQUO+wOBb8iFZKZ5QgWw+xdHdEVDbkIC9vpQBbAAAAEAkAAABLoFsAAYABlADA4LABgYCwwCcgsIcgArKxE5LzMRMzAxQSEyFhYVFA4CIyERMxEhMjY2NTQmJiMhAT4BbqbsfEaIw3395PwBIF96Ozt6X/6SA4FvyIVkpnlCBbD7F0d0RUNuQgACAGP/7AToBcQAAwAsAB1ADgMCAh4JBSkJchkVHgNyACsyzCvMMxI5LzMwMUEVITUBMx4CMzI+AjU1NC4DIyIGBgcjPgIzMh4CFRUUDgIjIiYmBFD9n/51+gtFhWxXf1IoHDlTbkRpgkIL+g+G766J25xTUZrYhrH1iAM7yMj+n2CEREaBs296XZl2USpHh1+T4oBhtf6deJ3+tGB/4AAABACh/+wHDAXEAAMABwAdADMAI0ATLwcGBg4kGQMCcgIIchkDcg4JcgArKysrETMSOS8zMjAxQREjEQEVITUFFRQCBgYjIiYmAjU1NBI2NjMyFhYSBzU0LgIjIg4CFRUUHgIzMj4CAZz7Aiv+igW2VqDdiIXeolhYoN6FiN6gV/swWoRUUoJbMDBdglJVglovBbD6UAWw/XHAwCFQpf76uGFhuAEGpVClAQW5YWG5/vv1Unq7f0FBf7t6Unq8gUFBgbwAAAIAFwAABFgFsAAWABoAH0APFxYWAAAJDAwZCHIOCQJyACsyKzIREjkvMxI5MDFBIScmJjU0NjYzIREjESMiBhUUFhYzIQUBIQEDqf5vY6WwgO2iAen87YyIPXlaAT7+zv6u/vIBVgIiKTTUoZDGZvpQBOiIeFJ1P1D9bgKSAAMAWv/rBD8GFAAWAC8ARAAZQAw6IjAXFyIAAXIiC3IAKysROS8zETMwMUEzFA4CBw4DFxUHNTQSNjY3PgIDMh4CFRUUDgIjIi4CNTUmNjY3PgIXIgYGFRUUHgIzMj4CNTU0LgIDI8MxX4tbVIdbKAi/RoGzbktkMalsqHQ9QoC5d3a6gEIBGSQOMoivPVpxNR49Y0RFYT0dHT5iBhRZc0ksEhJNidaaRBFEvwEcw3QWECE1/hdLhrZrFnC+jU9Sk8Z1FhUoLh5lmFa/VYxSFkN4WzQ0W3hDFj5uVTIAAAIAjwAABDgEOgAbADMALUAWAgEbKykpKAEoASgPDRAGch4dHQ8KcgArMhEzKzIROTkvLxEzEjk5ETMwMUEhJyEyNjY1NC4CIyMRIxEhMh4CFRQOAgcDITchMjY2NTQmJiMhNyEXHgIVFA4CAor+pgIBHEZbLBo1TzTF8QG2aKd2PytUek83/mBgAUBAVCkoU0L+7QIBR0VniEQ5b6ABz6ocOSkiMyEP/IQEOiRKcUwyWEQrBf3vviA9Kis+IapCB0pwQkx0TScAAQCDAAADTAQ6AAUADrYCBQZyBApyACsrMjAxQRUhESMRA0z+KPEEOsD8hgQ6AAMAJ/6+BMIEOgAPABUAHQAhQBAdGAkWFhsTCApyFRAQAAZyACsyETMrMjIyETMvMzAxQTMDDgMHIzU3PgM3EyERIxEhASERIxEhESMBQPEMBUJqhUlHIis/LBkETAKu8P5C/qgEmvH9S/UEOv6Dpu6jaB6+Ai5dcZhpAX37xgNu/VL9/gFC/r4AAAUAIAAABmsEOgAFAAkADQATABcAMEAXFRAQABYREQkDAwYAABQHDBITDQ0CBnIAKzIRMz8zMzkvMzMRMzMRMxEzETMwMUEBIRMzBycBIQEBESMRIQEhJzMTEwE3AQHj/lABKPzTH67+6/7YAYgCE/ADi/5Q/tcg1PwT/uq7AYYBtQKF/lbbI/4oAmEB2fvGBDr9e9sBqvvGAdiJ/Z8AAgBO/+wDxwRNAB0AOwAjQBEAHwICOzsUMi4pC3IPCxQHcgArMswrzDMSOS8zEjk5MDFBIzUzMjY2NTQmJiMiBgYVIzQ2NjMyHgIVFA4CJTMyHgIVFA4CIyImJjUzFBYWMzI2NjU0JiYjIwI80KhATSEhTkM3VzLxc8J0Y55vOzRii/7a0GCUZDNBd6RjbMuD8TJeQkRWKipWQagCBXoiPSkkQSokQCplkk4pT3VNN2JLKkYlSGlETHlULEiXdSlILStHKDZCHwABAIQAAAQPBDoACQAXQAsFAAYCCAZyBAYKcgArMisyEjk5MDFBATMRIxEBIxEzAXUBqfHx/lfx8QFgAtr7xgLb/SUEOgAAAwCPAAAEZQQ6AAMACQANAB9ADwwHBwsGBgIJAwZyCgIKcgArMisyETkvMzMRMzAxQREjESEBISczARMBNwEBgPEDs/4Z/u0gyQEkE/66vgHFBDr7xgQ6/XXaAbH7xgHYif2fAAMAIAAABBAEOgADAAcAGQAZQAwSBREKcgIDAwQIBnIAKzIyETMrMjIwMUEVITUhESMRITMDDgQjIyc3PgQ3A1P98ALN8f3p7h0GIzpUcEZLASYlNicZDwQEOsDA+8YEOv3pd7WBUCbGAwMhPmKGWQADAI8AAAVwBDoABgAKAA4AG0ANAAkMBgEKBnILAwkKcgArMjIrMjIyEjkwMUEBMwEjATMjESMRAREzEQL/AULR/j+k/kDRPvED7/IBJAMW+8YEOvvGBDr7xgQ6+8YAAwCEAAAEDQQ6AAMABwALABtADQkGCAMCAgYHBnIGCnIAKysROS8zMhEzMDFBFSE1ExEjESERIxEDX/3QRvEDifECdr6+AcT7xgQ6+8YEOgADAIQAAAQPBDoAAwAHAAsAGUAMCQYIAgMDBwZyBgpyACsrMhEzMhEzMDFBFSE1MxEjESERIxEDUv3qOfEDi/IEOsDA+8YEOvvGBDoAAgAjAAAD1QQ6AAMABwAQtwMGBwZyAgpyACsrMjIwMUERIxEhFSE1AnLyAlX8TgQ6+8YEOr6+AAAFAFP+YAWBBgAAFgArAEIAVgBaACdAFScGBkkeERFSMz4LcjMHclgAclcOcgArKysrETMzETMyMhEzMDFBFRQOAiMiLgInET4DMzIeAwc1NC4DIyIGBgcRHgIzMj4CJTU0PgMzMh4CFxEOAyMiLgI3FRQeAjMyNjY3ES4CIyIOAgERMxEFgTNkk2FVflY0DAwzV3xVTn5gQCHxECE0STBBVSsGBy1UQTxTNRj7wyBBYH5OVHpVMwwLNFR8VWCUZDPxFzJSPEJULQcGLFRCPFMzFwEo8gIQFXPBjk46aY9WATlcmXA9N2WNsHoVP3JfRycrTTL+VipAJTNcekcVZbCNZTc9cJlc/tNYlGw8To7BiBVHels0KEYtAZ4yTSs8aYv8Ageg+GAAAAIAhP6/BKIEOgAHAA0AG0ANBgEDDQwMAApyAQZyCQAvKysyETMyETMwMXMRMxEhETMRNwMjESM1hPEBqPKTE92CBDr8hgN6+8a//gABQb8AAgBgAAAD4QQ7AAMAFwAXQAsPFAkJAQAGcgEKcgArKxE5LzMyMDFBESMRExUOAiMiJiY1ETMRFBYWMzI2NgPh8YssbXg9j89v8DFiSj5ubAQ6+8YEOv4hvxMfE1i3jQFI/rhRYCoRHgABAIQAAAYGBDoACwAZQAwFCQYCAgsABnILCnIAKysRMxEzMjIwMVMzESERMxEhETMRIYTxAVfzAVbx+n4EOvyGA3r8hgN6+8YAAAIAff6/BrsEOgAFABEAHUAODAUICAQRCnIPCwYGcgEALysyMisyMhEzMzAxZQMjESM1ATMRIREzESERMxEhBrsT3YL7NPEBWPIBV/H6fb/+AAFBvwN7/IYDevyGA3r7xgAAAgAgAAAE8QQ6AAMAHAAdQA4REg8cBAQPAgMGcg8KcgArKzIROS8zETMyMDFBFSE1ASEyFhYVFA4CIyERMxEzMjY2NTQmJiMhAir99gHcAT6Nw2c6cKRp/iHy7UhWJydWSP7CBDrAwP6oXqdrT4dkOAQ6/IUyUC0uUjQAAAIAjwAABc8EOgAYABwAHUAOGhkOCxgAAAsMBnILCnIAKysROS8zETMyMzAxQSEyFhYVFA4CIyERMxEzMjY2NTQmJiMhAREjEQEvAT+MxGc6caNp/iHy7UhWJydWSP7BBKDxAuJep2tPh2Q4BDr8hTJQLS5SNAIY+8YEOgABAI8AAAQlBDoAGAAZQAwOCxgAAAsMBnILCnIAKysROS8zETMwMUEhMhYWFRQOAiMhETMRMzI2NjU0JiYjIQEvAT+MxGc6caNp/iHy7UhWJydWSP7BAuJep2tPh2Q4BDr8hTJQLS5SNAAAAgBQ/+sD6AROACcAKwAdQA4rKioJHRkUC3IEAAkHcgArMswrzDMSOS8zMDFBIgYGFSM0NjYzMh4CFRUUDgIjIiYmNTMUFhYzMj4CNTU0LgIBFSE1AgA4XTfkd8R1d7Z8P0B8tXZ+xG/kNFw9Q146Gho5XwEO/kkDji9TOGqrZVWWxXAjcMSXVWi3eT1iOTxkf0EjQ35kO/7oo6MABACS/+wGNgROAAMABwAdADMAI0ATJAMCAhkvDgcGcgYKcg4HchkLcgArKysrETMSOS8zMjAxQRUhNRMRIxEBNTQ+AjMyHgIVFRQOAiMiLgI3FRQeAjMyPgI1NTQuAiMiDgIC+f28zvEBtUSCunZ4u4JERIG7d3e6g0TyHkBkRERjQB8fQGRFQ2NAHgKFwMABtfvGBDr91xd1yZVTU5XJdRd1yJVTU5XIjBdJgmI4OGKCSRdIgWQ5OWSBAAACAC4AAAPgBDoAAwAdAB1ADgESEhMTAwkEBnIHAwpyACsyKzISOS8zEjkwMUEzASMBIREjESMiBgYVFBYWMyEVISIuAjU0PgIBYPr+zfkB4gHQ8OBEWConUz8BPv7CZJ5uOjxxowIR/e8EOvvGA3wvSycnSC6wM1t7SUt+XjMAAAT/1/5LA/oGAAARABUALAAwAB1AEDAvKBwHchUAchQKcg0GD3IAKzIrKysyzDIwMUEzERQGBiMiJic3FhYzMjY2NQERIxETJz4DMzIeAhURIxE0JiYjIg4CARUhNQMI8lWebyM+Ig4TOxYpOh7+YvDGTgE9b5xfUIFeMfItVj5BY0IhATf9YAHO/fR5qFYHCrsGBitSOgY++gAGAPxFAXC+jU0sYZtv/UkCuU5cKTRadgLOpqYAAgBS/+wD9QROAAMAKwAbQA0EDQMCAg0hGAdyDQtyACsrMhE5LzMRMzAxQRUhNQEyNjY3Mw4CIyIuAjU1ND4CMzIWFhcjLgIjIg4CFRUUHgICpf4oAW07XzsD4wN4xXh8uXo8PHu4e4HFcAPjAzVfQklhNhYWN2ACaKOj/kQvVDdprGVVlsRwI3DFllVnt3k8YTo7ZX1DI0N+YzsAAwAdAAAGnwQ6ABEAFQAuACVAEhYuLgAkISEKCQpyFBUVIwAGcgArMjIRMysyMhEzETkvMzAxQTMDDgQjIyc3PgQ3ARUhNQEhMhYWFRQOAiMhETMRMzI2NjU0JiYjIQEF7h0GIjtUb0dLASckNiYaEAMCTf3/Am0BPo3EZjpwo2r+IvHtSVYnJ1ZJ/sIEOv3pd7WBUCbGAwMhPmKGWQHOwMD+h1qeZkyCYDUEOvyEMUwqKUgsAAADAIQAAAayBDoAAwAHACAAJUASFRYTEwYIAyADAgIGBwZyBgpyACsrETkvMzMRMxEzETMyMDFBFSE1ExEjEQEhMhYWFRQOAiMhETMRMzI2NjU0JiYjIQNf/dBG8QM3AT+NxGc6caRp/iLx7UhXJydXSP7BApy+vgGe+8YEOv6HWp5mTIJgNQQ6/IQxTCopSCwAAAP/6AAAA/oGAAADABoAHgAZQA0eHRYKB3IDAHIRAgpyACsyKysyzDIwMUERIxETJz4DMzIeAhURIxE0JiYjIg4CARUhNQFq8MZOAT1vnF9QgV4x8i1WPkFjQiEBSP1gBgD6AAYA/EUBcL6NTSxhm2/9SQK5TlwpNFp2AtenpwAAAgCE/psEDwQ6AAMACwAXQAsABgYLCnIJBAZyAgAvKzIrMhI5MDFlMxEjATMRIREzESEB0vLy/rLxAajy/HXA/dsFn/yGA3r7xgACAIj/6wbPBbAAGAAwABtADiwfCXIUBwlyJhoOAAJyACsyMjIrMisyMDFBMxEUDgIjIi4CNREzERQeAjMyNjY1ATMRFAYGIyIuAjURMxEUHgIzMjY2NQMtyz9zml1ipntE+x42Sy1DYzgCp/t50IZZmXA/zB85Ti8/YDUFsPwAcKpyOTlyqnAEAPwAQWA/HjdwVwQA/ACVymY5cqpwBAD8AEFgPx43cFcAAAIAcv/rBgMEOgAYADEAG0AOLB8LchQHC3ImGg4ABnIAKzIyMisyKzIwMUEzERQOAiMiLgI1ETMRFB4CMzI2NjUBMxEUBgYjIi4CNREzERQeAjMyPgI1AsTEOWeOVFiUbDzyFys7JTlVMAJO8Wq7d1OJYzbEGC5CKSZALRgEOv1XaZ5qNTVqnmkCqf1XO1c4HDFmTwKp/VeMu181ap5pAqn9VztXOBwcOFc7AAAC/+EAAAQjBhcAFwAbACFAEA0KABcXChobGwoLAXIKCnIAKysROS8zETkvMxEzMDFBITIWFhUUBgYjIREzETMyNjY1NCYmIyEBFSE1AS4BPo3EZmbEjf4i8uxIVycnV0j+wgFv/UQDAGOrb2+vZQYX+qg2WDIwWTkCoKenAAADAJj/7QbTBcUAAwAsADAAIEARAwICLzACci8IHRQDcikJCXIAKzIrMj8rEjkvMzAxQRUhNQEzDgIjIi4CNTU0PgIzMhYWFyMuAiMiDgIVFRQeAzMyNjYBESMRBSj8EwSd+gyJ9bGH2JlSU5zciK7xhg77CUOCalSBVisZM05tRmuFRvvG+wNOwMD+jY/fgGGz/p15nf61YIDikl6GR0B8tXR7WJd3VC1EgwQ0+lAFsAAAAwCG/+wFugROAAMAKwAvACRAEwMCAi4vBnIuCiEdGAdyCAQNC3IAKzLMK8wzPysSOS8zMDFBFSE1ATI2NjczDgIjIi4CNTU0PgIzMhYWFyMuAiMiDgIVFRQeAgERIxEEgvyWAuc7YDoD4wN4xXh8uXo8PHu3fILEcAPjAzVfQklgNhcWN2D9wvECcaen/jsvVDdprGVVlsRwI3DFllVnt3k8YTo7ZX1DI0N+YzsDjvvGBDoABAAaAAAFGwWwAAQACQANABEAJEAREQ0MDAIABgYHAwJyDwUFAggAPzMRMysyMhEzETkvMzMwMUEBIQEzAQE3MwEBFSE1BREjEQLb/kT++wIGkwFj/kYskgIB/un9FgHq3QUj+t0FsPpQBSuF+lACZri4Sv3kAhwABAALAAAERwQ6AAQACQANABEAHkAOEQ0MDAEHAwZyEAUFAQoAPzMRMysyEjkvMzMwMUEBIwEzEwEDMwEDFSE1BREjEQIL/vf3Aam16P7yW7YBqcz9ZAGluQLN/TMEOvvGAs0BbfvGAcWpqUD+ewGFAAYArAAABzUFsAADAAgADQARABUAGQA0QBoJFBQGBhgVEREQEAMCAhgIFgJyBAoKCwcCcgArMjIRMys/OS8zMxEzETMRMxEzETMwMUEVITUBASEBMwEBNzMBARUhNQURIxEBESMRA4f9vwOv/kT++wIHkgFj/kYskgIB/un9FgHp3P1m+wJmt7cCvfrdBbD6UAUrhfpQAma4uEr95AIcA5T6UAWwAAAGAJoAAAYdBDoAAwAIAA0AEQAVABkALkAXFREREBADAgIYGQZyCRQUBgYYCgsHBnIAKzI/MxEzETMrEjkvMzMRMxEzMDFBFSE1AQEjATMTAQMzAQMVITUFESMRAREjEQMk/cMC+v739wGptej+8lq1AanL/WMBpbn96/IBxaioAQj9MwQ6+8YCzQFt+8YBxampQP57AYUCtfvGBDoAAAUAfgAABmcFsAAWABoAHwAkACgANEAZGRoaJBsfHyMjEygGBhMTARwkAnINJycBCAA/MxEzKzISOS8zETMRMxEzETMRMxEzMDFhIxE0NjYzITIWFhURIxE0JiYjISIGFQEVITUBASEBIwEBByMBAREjEQF5+3vmogHjoud6+jp1Wv4dhYMDk/zvAUIBnQEW/gCT/skBoCSS/f8C6voBYabGWFjGpv6fAWFibS1pkwRPycn9CgL2/JcDaf0DbANp/VH8/wMBAAUAgQAABV0EOwAXABsAIAAlACkAMEAXGhsbJSAkJBMpBgYTEwEdJQZyDSgoAQoAPzMRMysyEjkvMxEzETMRMxEzETMwMWEjNTQ2NjMhMhYWFRUjNTQmJiMhIgYGFQEVITUBASEBIwMBByMBAREjEQFy8W7QkQE+kM9w8jBiS/7CS2MwAvz9LwEgASwBCP5vh9cBMB+H/m4CcfGun79VVb+frq5hbSwsbWEDjaur/boCRf1aAqb9tVsCpv3s/doCJgAABwClAAAIrAWwAAMABwAeACIAJwAsADAAPEAeISIiJCwCcicrKxswDg4bGwMCAgUHAnIVLy8JCQUIAD8zETMRMysSOS8zMxEzETMRMxEzKzIyETMwMUEVITUTESMRASMRNDY2MyEyFhYVESMRNCYmIyEiBhUBFSE1AQEhASMBAQcjAQERIxEFAvxRTfsDGfp656EB5KLmevo6dVn+HIWDA5T87gFCAZ4BFv3+kf7IAaElkf3/Aun6AyfAwAKJ+lAFsPpQAWGmxlhYx6X+nwFhYm0taZMET8nJ/QoC9vyXA2n9A2wDaf1R/P8DAQAHAJAAAAduBDsAAwAHAB8AIwAoAC0AMQA+QB4lIiMjLS0HKCwsGzEODhsbAwICBgcGchUwMAkJBgoAPzMRMxEzKxI5LzMzETMRMxEzETMRMxEzETMzMDFBFSE1ExEjEQEjNTQ2NjMhMhYWFRUjNTQmJiMhIgYGFQEVITUBASEBIwMBByMBAREjEQTP/CGR8QLz8W7QkQE+kM9w8jBiS/7CS2MwAvz9LwEgASwBCP5vh9YBMCCH/m4CcfECYbW1Adn7xgQ6+8aun79VVb+frq5hbC0tbGEDjaur/boCRf1aAqb9tVsCpv3s/doCJgAAAwAo/kQDsQeHABcAQABJACtAFBgNDEBAACssCUVDQ0JIQYBHFwACAD8y3hrNMjkyETM/MxI5LzMzMzAxUyEyHgIVFA4CIyM1MzI2NjU0JiYjIRMzMh4CFRQOAiMjIgYVFBYWFwcuAic0NjYzMzI+AjU0LgIjIxMXNzMVASMBNX8BGXC4hUlIhLlxl5JfdDY3c1r+54KSgcmMSEmEtW05RT01SBxOVoVOAVWaajg9YkQjKExySo5tlZbP/ueX/ugFsDFhkV9Vh18zjDdhPjpcNf4kMmCNW2afbTk6LjFDKg2VGGCKV155OyI9VDE9XD4fBP6dnQv+6wEWCgAAAwAy/kwDiQYbABgAQQBKACZAEQ0ZDEFBAC1DSUZEQoBIGAAGAD8y3hrNMjIyOS8SOS8zMzMwMVMhMh4CFRQOAiMjNTMyNjY1NC4CIyETMzIeAhUUDgIjIyIGFRQWFhcHLgInNDY2MzMyPgI1NC4CIyMTFzczFQEjATV9ARZoq31EQnmpaJ+bUGIsGzdWOv7qf5t3uYBCQXmnYzFMPzJEGk1Jf1EBUZNkMjdYPSAiQ2E/l0KVls/+6Jj+6AQ6Jk1ySkFoSid9JUIrHTEjFP69JEZmQkx4VCw6LjFDKg2NGl6GU1lyOBYnNiAmOCYTBFGdnQv+6wEWCgADAGD/7AUZBcQAFwAoADkAH0ASDClqMiBqMjIMABhqAANyDAlyACsrKxI5LysrMDFBMh4DFRUUAgYGIyIuAzU1NBI2NhciDgIHBgYVISYmJy4DAzI+Ajc2NjUhFhYXHgMCvGy7lGo4VqDdiGq6lWw5WKHehUh5WTkJAQICwAEBAgk3WXlJTHpYNggBAf1BAQIBCjhaeQXEP3is3YRQpf76uGE/d63dhFClAQW5Yc00ZZZiDh8QDx8OY5VmNPvBNWqaZAsXCw8cDWKWZjQAAAMATf/sBDsETgAVACAAKwAfQBILIWonG2onJwsAFmoAB3ILC3IAKysrEjkvKyswMUEyHgIVFRQOAiMiLgI1NTQ+AhciDgIHIS4DAzI+AjchHgMCQ3e8gUREgbp3d7uCRESBu3Y7Wz8lBwIEBiZAWzo7Wz8mBv38BiVAXAROU5XJdRd1yJVTU5XIdRd1yZVTwCxOaDs7aE4s/R4rT2g9PWhPKwAAAgAQAAAE9QXDAA4AEwAZQA0OEggFEwJyBQNyEghyACsrKxEzETMwMUETPgIzFwcjIgYGBwEjAQETIwECk+ciWn5YKQEWHzEmDv6cvP7iAURavP4SAXwDBWyPRwHSHTks+5IFsPvO/oIFsAAAAgAeAAAEGgROABIAFwAVQAsXBnISFgpyDAUHcgArMisyKzAxQRM+AjMyFhcHJiYjIgYGBwEjAxMTIwECCnseVnJGHTQYFwQeDhcrIQr++qKmxkyi/pYBbAHCYn8/Bw68AgQZLB383wQ6/TL+lAQ6AAQAYP92BRkGLgADAAcAHwA3ACRAEAICJycDGgNyBwczMwYOCXIAK80zETN8LysYzTMRM30vMDFBESMRExEjEQEVFAIGBiMiLgM1NTQSNjYzMh4DBzU0LgMjIg4CFRUUHgMzMj4CAxu8vbwCuVag3YhqupVsOVih3oVsu5RqOPweO1VvRFKCWzEgPFZvQVWCWi4GLv5ZAaf6+P5QAbAB2lCl/vq4YT93rd2EUKUBBblhP3is3dRSYZ95UipBf7t6UmKfelMqQYG8AAAEAE7/hgQ8BLUAAwAHAB0AMwAkQBAHByQkBhkLcgICLy8DDgdyACvNMxEzfS8rGM0zETN8LzAxQREjERMRIxElNTQ+AjMyHgIVFRQOAiMiLgI3FRQeAjMyPgI1NTQuAiMiDgICm6yprP5iRIG7dne7gkREgrp2d7uCRPEeQGRFQ2NAHx9BY0REY0AeBLX+aAGY/HD+YQGf7Bd1yZVTU5XJdRd1yJVTU5XIjBdJgmI4OGKCSRdIgWQ5OWSBAAQAiP/rBsIHOwAVACAAQQBlADNAGVtOCXJUMTEsOAlyQkNDEQgIGxsWFiIhAnIAKzIyfC8zGC8zETMyETMrMjIvMysyMDFBMxUjIi4CIyIGFRUjNTQ2MzIeAgEnNjY1NTMVFAYGJRUiBgYVERQeAjMyNjY1ETMRFA4CIyIuAjURNDY2BTUyHgIVERQOAiMiLgI1ETMRFB4CMzI+AjURNC4CBUscHVaLcmAsMTyBfW46bW9//oBOISOiMUb+sTxbNR42Sy1DYzjLP3OaXWKme0R3zgMuYqd6RER6p2Jbm3M/yyA6UjEtSzYfHzZLBr+CJjAmNDYSJG9rJTIl/lc4KEgmX2YmT0CIyDt5Xv3uRmhDITdwVwGG/npwqnI5PHexdQISndJryMg8d7J1/e51sXc8OXKqcAGG/npBYD8eIUNoRgISRmhDIQAEAHX/6wXgBeIAFQAgAEIAZgAzQBlcTwtyVTIyLDkLckNERBEICBsbFhYiIQZyACsyMnwvMxgvMxEzMhEzKzIyLzMrMjAxQTMVIyIuAiMiBhUVIzU0NjMyHgIBJzY2NTUzFRQGBiUVIgYGFRUUHgIzMj4CNTUzFRQOAiMiLgI1NTQ2NgU1Mh4CFRUUDgIjIi4CNTUzFRQeAjMyPgI1NTQuAgTfHiBWi3FgLDA9gX1uO2tvf/6ETSEjoTFF/t8zTywXKjkjKEEvGrs2YoVQVpJrPGy8AqNamHA+O2ySV06FYza7Gi9BJyM7KhcZL0AFZoElMSUzNxIkb2slMiX+VTgoSSVfZiZOQXu/NW1V8T9dPR0cOFc7xcVpnmo1N26lbPGRw2K/vzdupG3xbKVuNzVqnmnFxTtXOBwdPV0/8UBdPB4AAwCI/+sGzwcQAAcAIAA4ACtAFTQnCXIFAgEBBwctIQgIFQJyHA8JcgArMisyETMzM3wvMxgvMzMrMjAxQSE1IRchFSMHMxEUDgIjIi4CNREzERQeAjMyNjY1ATMRFAYGIyIuAjURMxEUHgIzMjY2NQNP/rcDUQL+o60iyz9zml1ipntE+x42Sy1DYzgCp/t50IZZmXA/zB85Ti8/YDUGmHh4fmr8AHCqcjk5cqpwBAD8AEFgPx43cFcEAPwAlcpmOXKqcAQA/ABBYD8eN3BXAAMAcv/rBgMFsQAHACAAOQArQBU0JwtyBQIBAQcHLSEICBUGchwPC3IAKzIrMhEzMzN8LzMYLzMzKzIwMUEhNSEXIRUjBzMRFA4CIyIuAjURMxEUHgIzMjY2NQEzERQGBiMiLgI1ETMRFB4CMzI+AjUC3/7HAzAF/rGtG8Q5Z45UWJRsPPIXKzslOVUwAk7xart3U4ljNsQYLkIpJkAtGAU5eHh/gP1XaZ5qNTVqnmkCqf1XO1c4HDFmTwKp/VeMu181ap5pAqn9VztXOBwcOFc7AAIAZ/6OBLIFxQAhACUAGUAMFhINA3IlAAAkAQlyACvNMxEzK8wzMDFlFSIuAzURND4CMzIWFhcjLgIjIg4CFREUHgMzESMRApVlrYlgM0+Uzn6o8YIB+gE/f2NKdE4pGjNKYtr6ssc6bZi7awEQhuClWnTen2KEQz5wllf+7kZ+Z0so/dwCJAACAF3+iwP0BE4AHwAjABlADBURDAdyIAAAIgELcgArzTMRMyvMMzAxZRUiLgI1NTQ+AjMyFhYVIzQmJiMiDgIVFRQeAjMRIxECRXe2fD8/fLZ2fsRu4zNcPkReORsbOGDZ8avAVZbFcCNwxZZVZ7d5PGI5O2V9QyNDfmQ7/eACIAAAAQBwAAAEkAU+ABMACLEPBQAvLzAxQQMFByUDIxMlNwUTJTcFEzMDBQcDJs4BIUb+3bWr4f7fRQElzP7eRwEju6jmASVKAyr+lqx+qv7AAY6rfasBa6t/qwFJ/mqrfQAAAfxwBKX/NwX8AAcAFbcGBgQEAQICAQAvMy8RMxEzfC8wMUMhFSc3IScXyf3jqgECHgGpBSN+AepsAQAAAfx1BRf/awYVABUAErYBFBQPBoALAC8azDIzETMwMUEzMj4CMzIWFRUjNTQmIyIOAiMj/HUeUIFxbTtvf4M8Myxhc41XIAWZJTIla28kEjczJTElAAAB/YEFGf5zBmIABQAKsgCAAgAvGs0wMUEnNTMHF/4ko7gBOwUZw4aXcAAB/aYFGf6XBmIABQAKsgGABAAvGs0wMUEHJzcnM/6Xo046AbgF3MNCcJcAAAj6Jv7EAcIFrwANABsAKQA3AEUAUwBhAG8AAEEjNDYzMhYVIzQmIyIGASM0NjMyFhUjNCYjIgYTIzQ2MzIWFSM0JiMiBgMjNDYzMhYVIzQmIyIGASM0NjMyFhUjNCYjIgYBIzQ2MzIWFSM0JiMiBgMjNDYzMhYVIzQmIyIGEyM0NjMyFhUjNCYjIgb9hHFxYWJxcC02NSwCUHJxYWJycSw3NCy6cXFhYnFwLDc0LcVxcWFicXAsNzQt/cBxcWFicXAtNjQt/b9ycmFicXAtNjUssXFxYWJxcCw3NC2ncnFhYnJxLDc0LATzU2lpUyg9Pf7DU2lpUyg9Pf3hU2lpUyg9Pf3RU2lpUyg9Pf68U2lpUyg9PQTyU2lpUyg9Pf3hU2lpUyg9Pf3RU2lpUyg9PQAI+lH+YwGSBcYABAAJAA4AEwAYAB0AIgAnAABFMxcDIxMjJxMzATU3BRUlFQclNQEnNyUXARcHBScBBycDNwE3FxMH/cuJC3pglIgMemAB2Q0BTfoZDf6zBVdhAgFCRPtrYQL+wEUBXWIRlEEDxWIRlUI8Dv6tBgMOAVL8JosMfGKXiwx8YgEEYxCZRPwpYxGZRQQOYgIBRkX7VWMC/rtHAP//AJL+gAXXByUEJgDcAAAAJwChARkBPgEHABAEef/IABVADgIjBAAAmFYBDwEBAV5WACs0KzQA//8AhP6ABNoF2gQmAPAAAAAnAKEAkv/zAQcAEAN8/8gAFUAOAiMEAQCYVgEPAQEBfVYAKzQrNAAAAv/hAAAEIwZgABcAGwAaQAwaCxsCcgAXFw0NChIAPzMRMy8zK84zMDFBITIWFhUUBgYjIREzETMyNjY1NCYmIyEBFSE1AS4BPo3EZmbEjf4i8uxIVycnV0j+wgFv/UQDAGOrb2+vZQZg+l82WDIwWTkDb6amAAIAlAAABM8FsAADABsAI0ARAQIFAAMGBgUFEhATAnISCHIAKysyETkvMxEzMxEzMzAxQQEHAQMhNSEyNjY1NCYmIyERIxEhMhYWFRQGBgM3AZZp/mwT/oUBe2N6OTl6Y/7R+gIpqex9fO0D3v5BXwG+/qHHQHFJRXlK+xgFsHfRho3KbAAABAB9/mAELwROAAMACAAeADQAJUAUAAMwAQIwJRoPC3IHBnIaB3IGDnIAKysrKxEzMjIyETMzMDFBAQcBAxEjETMBFRQOAiMiLgInNT4DMzIeAgc1NC4CIyIOAgcVHgMzMj4CAr8BZ2n+mOfx3gLUN2ucZmWXaD8NDT9olmRmnmw28Rw8XUFAXD4iBwkkPVtAQVw7HAGq/l5fAaICH/r2Bdr97RV2yZVSS4q7cFF3woxMT5HLkRVLgWI3K0xlO8I3X0gpOGOCAAACAI8AAAQ3BxMAAwAJABVACgIGBgMJAnIICHIAKyvOMxEzMDFBESMRExUhESMRBDfx6f1b+wcT/d4CIv6dyPsYBbAAAAIAfQAAA2AFdwADAAkAFUAKAgYGAwkGcggKcgArK84zETMwMUERIxETFSERIxEDYPLZ/ifxBXf+AwH9/sPA/IYEOgAAAgCZ/sUEmgWwAAUAHQAZQAwGBwcTEgIFAnIECHIAKysyLzM5LzMwMUEVIREjERM1MzIeAhUUDgIjNTI+AjUuAyMEN/1c+qv+it2dVDp7w4lTajsYAS5ahlgFsMj7GAWw/M3GS5TZjnfOnFe3P2yHR2KSYzEAAAIAff7jA90EOgAUABoAG0ANAAEBCxcaBnIZCnIMCwAvMysrMhE5LzMwMVM1MzIWFhUUDgIHJz4CJzYmJiMBFSERIxHN8p71iylbj2ZZT2MvAQFMhlsBiP4n8QHKxm/VnjmJhWkbqRtTcERefkACcMD8hgQ6AP//ABX+mggMBbAEJgDaAAABBwJhBrkAAAALtgUbDAAAmlYAKzQA//8AIP6aBsQEOgQmAO4AAAEHAmEFcQAAAAu2BRsMAACaVgArNAD//wCZ/pgFfwWwBCYCPAAAAAcCYQQs//7//wCP/poEwQQ6BCYA8QAAAQcCYQNuAAAAC7YDEQIBAJpWACs0AAAEAJEAAAU4BbAAAwAHAA0AEQAvQBcPDg4LDAQEDAwLBwcLCwAQAwhyCAACcgArMisyEjkvMy8RMxEzLxESOREzMDFTMxEjATMRIwEhASEnIQc3ASGR+/sBV56eAfMBM/4e/hgiAZsItwHM/sIFsPpQBEv9OAQt/MDZs6r8wAAEAI0AAASsBDoAAwAHAA0AEQAtQBYPDg4LBAQMDAsHBwsLABADCnIJAAZyACsyKzISOS8zLxEzETMvETMRMzAxUzMRIwEzESMBIQEhJyEHNwEhjfHxAUyUlAGMASz+c/5CHwF0ELYBa/7LBDr7xgNT/aUDQv112rGJ/Z8ABAA0AAAGogWwAAMABwANABEAI0AREA8PCwoKAw4GCHINBwIDAnIAKzIyMisyEjkvMzMRMzAxQRUhNSERIxEhASEnMwETATcBAmD91ALV+gRn/a/+nSL6Aagz/iiiAmMFsMDA+lAFsPzC2gJk+lACmMH8pwAEADwAAAWkBDoAAwAHAA0AEQAjQBEQDw8LCgoDDgYKcg0HAgMGcgArMjIyKzISOS8zMxEzMDFBFSE1IREjESEBISczARMBNwECUP3sAoPxA7P+Gf7tIMkBJBP+u70BxQQ6wMD7xgQ6/XXaAbH7xgHYif2f//8AlP6aBdYFsAQmACwAAAEHAmEEgwAAAAu2Aw8KAACaVgArNAD//wCE/poEzQQ6BCYA9AAAAQcCYQN6AAAAC7YDDwoAAJpWACs0AAAEAJQAAAePBbAAAwAHAAsADwAfQA8HBgYKAgMDDAsCcg0KCHIAKzIrMjIRMxE5LzMwMUEVIScRFSE1ExEjESERIxEHj/2Auvz8PvsEg/sFsMDA/aDHxwJg+lAFsPpQBbAAAAQAfQAABWsEOgADAAcACwAPAB9ADwcGBgoCAwMMCwZyDQoKcgArMisyMhEzETkvMzAxQRUhNwMVITUTESMRIREjEQVr/kMCV/3PRvEDivIEOsDA/jy+vgHE+8YEOvvGBDoAAgCX/sQH9QWwAAcAHwAZQAwICQkUBAcCcgYIcgIALysrMi85LzMwMUERIxEhESMRATUzMh4CFRQOAiMnMj4CNTQuAiMFE/v9evsECP6K3Z5TOnvDiAFTajsYL1qGWAWw+lAE6PsYBbD8zMZLlNmOd86cV7c/bIdHYpJjMQAABAB9/ucGtgQ6ABQAGAAcACAAI0ARHhcYGAABAQsdHAZyGwpyDAsALzMrKzIROS8zMhEzLzAxQTUhMhYWFRQOAgcnPgI1NiYmIwEVITUzESMRIREjEQNlASCk/ZApWpFlWU9iLwFRj2D+x/3pOfEDjPIBzcZu1p05ioRpG6gbVHBEXX5AAm3AwPvGBDr7xgQ6AAABAGf/6wXgBcUAQwAdQA45DAwjIgNyAAEBLhcJcgArMjIRMysyMhEzMDFlFSIkJgI1NTQ+AjMyHgIVFRQCBgQjIi4CNTU0PgIzFSIOAhUVFB4CMzI+AjU1NC4CIyIOAhUVFB4CBeDE/sDnfDxum15joXU/Z8D+9qKW9q9fR4O3bjZXPCA3aZVfb696QBkxRi0qQi4ZU6Hrr8RrxQEOo9N1x5VTVJrTfs6Y/vzCbWm8+pHBg+GnXs8+bpVXw2ewgklOirls4liCWCstV35S13bFkU8AAAEAYP/rBMwETwBDAB1ADjkMDCMiB3IAAQEuFwtyACsyMi8zKzIyETMwMWUVIiQmJjU1ND4CMzIeAhUVFA4CIyIuAjU1ND4CMxUOAxUVFB4CMzI+AjU1NC4CIyIOAhUVFB4CBMyq/vqyXC9We0tNflkvUZbPf3jEjk05aZBZITUmFSdKakJLeFQsDx4qGxwrHQ9DgbuNoFac0HmBW5pyP0V8pmB/c8WUUlebz3lOZq2ASMYCKUlkO1BPh2U3NV6AS4E0WUQmIj1UMYVXlGw8AP//ACb+mgUiBbAEJgA8AAABBwJhA88AAAALtgEPBgAAmlYAKzQA//8AH/6aBCUEOgQmAFwAAAEHAmEC0gAAAAu2AQ8GAACaVgArNAAAAwAp/qEGuAWwAAMACQARAB1ADgkNDQgKCHIFEAwCAwJyACsyMjIvKzIyETMwMUEVITUBAyMRIzUFETMRIREzEQPn/EIGjxPngvxN/AKG+wWwwMD7Gf3YAV/JyQWw+xcE6fpQAAMAJ/6/BToEOwADAAsAEQAfQA8CAwMNCgUGcggHBxAECnIAKzIyETMrMi85LzMwMUEVITUTETMRIREzETcDIxEjNQLq/T318QGp8ZMS3oIEO8DA+8UEOvyGA3r7xr/+AAFBv///AJH+mgWpBbAEJgDhAAABBwJhBFYAAAALtgIdGQAAmlYAKzQA//8AYP6aBKIEOwQmAPkAAAEHAmEDTwAAAAu2AhsCAACaVgArNAAAAwCBAAAE3gWwAAMAGQAdACNAEQMDCgoVAgIVFQQcCHIbBAJyACsyKxE5LzMvETMRMy8wMUERIxEBMxEUFhYzMj4CNxUOAyMiJiY1ATMRIwMNnf4R+z9+Xy5mZ2AoJ1xlaDOl8IIDYvv7BBD9JALcAaD+PWd1MAgPFQ3HDBYPCF/OpgHD+lAAAAMAdQAAA/cEOwADAAcAGwAjQBAAABgYDQEBDQ0FCnISBAZyACsyKzIvM30vETMRMxgvMDFBESMRAREjERMVDgIjIiYmNREzERQWFjMyNjYCjZ0CB/GKK214PY/PcPEwYks9cGoDLP2gAmABDvvGBDr+Ib8THxNYt40BSP64UWAqER4AAAIAiQAABOYFsAAVABkAGUAMARcGEREXGAJyFwhyACsrETkvMxEzMDFhIxE0JiYjIg4CBzU+AzMyFhYVASMRMwTm+z9+YC1mZ2EnJl1laDKm74P8nvv7AcNodDAIDxUNxwwWDwhfzqb+PQWwAAIACv/pBbQFxAAJADYAJUASBR0BAR0dBhwcCiQVA3IvCglyACsyKzIROS8zMxEzLxEzMDFTMxQWFjMVIiYmASIuAjU1ND4CFzIeAhUVITUhNTQuAiMiDgIVFRQeAjMyNjcXDgIKsjFkToO1XQPFnvGjUlic0HmJ0I1G/EMCwyFIdVROeVIqK12Xa36yNzAXaqUEOUdpOq9kufwsXKjmif+I4qVaAV6x+pqJviBPimg6P3CSVP9WmHJBMRnCDioiAAL/y//sBJAETgAIADUAJUASBBwBARwcBRsbCSMUB3IuCQtyACsyKzISOS8zMxEzLxEzMDFDMxQWMxUiJiYBIi4CNTU0PgIzMh4CFRUhNSE1LgMjIg4CFRUUHgIzMjY3Fw4CNaZobXqpWAMTeMCIR0mFs2l1rXQ5/LsCVwIbNVQ8PF0/ICdMbEVYhzKAI3GhA1xkdqFcqv0FT47Abyh/zpNOTo3CdWetEzBaRygzYIdUKEd5WjNGQHszXToAAwCR/rwE7wWwAAMACQAhACFAEAoGBgsIBwcXFgkDAnICCHIAKysyLzM5LzMzMxEzMDFBESMRIQEhJzMBATUhMh4CFRQOAiMnMj4CNTQuAiMBjPsES/2S/tYi3gGq/ecBBojenlQ6fMaLAVNqOhYtWYNUBbD6UAWw/MPfAl78ws1KlNqQc86fW75BbIRDYZFiMAADAI3+5wRBBDoAAwAJAB4AIUAQFhUJBnIGCgoHCwsBAwZyAQAvKxI5LzMzETMrLzMwMUERIxEhASMnMwEBNSEyFhYVFA4CByc+AjU0JiYjAX7xA7T+A/4fswE6/dIBI6P9kCpZkGZZT2IwUI9gBDr7xgQ6/XXaAbH9dsVlzZ05hYBnGqgaUWpCXXU4//8ALP6ABdYFsAQmAN0AAAEHABAEeP/IAAu2AyQGAACYVgArNAD//wAg/oAE2wQ6BCYA8gAAAQcAEAN9/8gAC7YDJAYBAJhWACs0AAABAJn+SwUTBbAAGQAZQAwZCHIXAgIRCgUAAnIAKzIvMzkvMyswMVMzESERMxEUBgYjIiYnNxYWMzI2NjURIREjmfoChftXoXAkPSQOFDgXKToe/Xv6BbD9ggJ++hh7qlgHCsMGBipROgKj/ZUAAAEAff5LBAcEOgAZAB1ADxkKchcCAgARCg9yBQAGcgArMisyEjkvMyswMVMzESERMxEUBgYjIiYnNxYWMzI2NjURIREjffEBp/JVn28iPSIOEzsUKjoe/lnxBDr+PAHE+4h5qFYHCrsGBitSOgH2/kgA//8AlP6ABeEFsAQmACwAAAEHABAEg//IAAu2AxYKAQCYVgArNAD//wCE/oAE2QQ6BCYA9AAAAQcAEAN7/8gAC7YDFgoBAJhWACs0AP//AJT+gAcsBbAEJgAxAAABBwAQBc7/yAALtgMbDwAAmFYAKzQA//8Aj/6ABjsEOgQmAPMAAAEHABAE3f/IAAu2AxkLAQCYVgArNAAAAQBV/+sFIwXEACwAG0ANGgsRFBQLJQADcgsJcgArKzIROS8zETMwMUEyBBYWFRUUDgInIi4CNTUhFSEVFB4CMzI+AjU1NC4CIyIGByc+AgJ3qAEArFhfp9+Bl+ebTwQg/NonVoxlWIhdLzBmpXeEvDswGHCuBcRlt/2Xe5f9t2MBXbH5mo/DIU+KZztKg61ie2Otg0syGMINLCEAAgBb/+sESwWwAAcAJQAfQA8FCAgEJSUAHBIJcgcAAnIAKzIrMhE5ETMzETMwMVMhFwEjNQEhATcyFhYVFA4CIyIuAjUzFBYWMzI2NjU0JiYjI5EDlwH+HKcBaf2KAQ2lpeh7TIu8cFuvj1T7PGxKVHY/RIZgiQWwof3XdwGL/nIJa82UZqBtOTFnoXA+Zz08aEFlfjsAAgBd/nUERwQ6AAcAJQAfQA4IBQUEJSUAHBgSBwAGcgArMi/MMxI5LzMzETMwMVMhFwEjNQEhATcyFhYVFA4CIyIuAjUzFBYWMzI2NjU0JiYjI44DkwL+I6kBYv2PAQ+hpel7TIm8b1qvjVTyPXBLVnhARYhiiQQ6mv3OdwGV/mYIasuTZp9tOTFnoW9AaT89a0Nmfzr//wAs/ksEhQWwBCYAsU4AACYCNp8oAAcCZAEwAAD//wAj/kcDmgQ6BCYA7E4AACcCNv+W/3YABwJkAQL//P//ACb+SwVTBbAEJgA8AAAABwJkA8gAAP//AB/+SwRWBDoEJgBcAAAABwJkAssAAAABAE8AAAR5BbAAGAAStwMAAAsQDQJyACsvMzkvMzAxQSEVISIGBhUUFhYzIREzESEiJiY1ND4CAl4Bbf6TYHo6OnpgASD7/eWm7H1HiMMDmcdJdUNFeUwE6fpQeNGGZKd8QwAAAgBoAAAGrQWwABgALQAfQA4bCwsQJSUDAAAaEA0CcgArLzM5LzMzLxEzETMwMUEhFSEiBgYVFBYWMyERMxEhIiYmNTQ+AgEjNTc+Ajc2LgInMx4CBw4CAncBbf6TYHk6OnlgASH6/eWm7H1HiMMC54yMSVoqAgEIDxcP9BIfFAICcMwDmcdJdUNFeUwE6fpQeNGGZKd8Q/xnxgEBTHpFJ19mXyczhIU2j9JyAAMAX//pBnsGGAAWACsARwAdQBAzRAtyOy0Bch0SC3InBgdyACsyKzIrLysyMDFTNTQ+AjMyHgMXFQ4DIyIuAjcVFB4CMzI2Njc1LgMjIg4CBREzEQYWFjM+Azc2JiczFhYHDgMjBiYmXzdrnmdLeFxDKgoMPGOOX2WdbDfyGjlbQVJtPwsHJj9dPkFcORsBvvIBI0EsPFo/IQICIR7rGyoCAk+IrmJzqF8B+xV+0ppUMl6Eo2BDdL+LS06OwYgVR3lbMkd5TLU7aE0tO2mK9gSw+1A3VTABMl2DUmTLZGHLZ4vPiEQCTaoAAAIAPf/pBeQFsAAgAEYAIUAQKCcnAgEBDjJDCXI6DQ4CcgArMi8rMhE5LzMzETMwMUEjNTMyNjY1NC4CIyE1ITIeAhUUDgMHIgYGBwYGEzU1NCYmIzcyHgIVFRQWFjM+Azc2JiczFhYHDgMjBiYmAb/dqGh+Oh5BaEn+owFdf8OERCA+XHhLAgcHAygYzDZlRhKEsGktGjIiNFM4HwECIh71GisCAk+GrGBpmlYCZ8kzZkwwTTgdyTVpmWY4YVNBMRAWFQEJBP7NAkBHaTx3NF+BTUQnPCMBMV2AT2TLZGHLZ4rPiUQCQ5UAAAIAL//kBQEEOgAdAEIAJUASPj09GwIBAQ0qKiIzC3IMDQZyACsyKzIyLxE5LzMzMxEzMDFBISczMjY2NTQmJiMhJyEyFhYVFA4CBw4CBwYGBTUGFjM+Azc2JiczFhYHDgMjBi4CJzU0JiYjNzIWFhUBi/77ArpFVCgoV0X++gYBDIzEZiNFZUECBQUDIg8BXQEjMCxFMBoBAiEf6xosAgJFdZZTUHhSLQQkRjMli51BAaG4Ij4qK0Uov0yRZTJSQDARAR8gAggDugEoNgEnR2VATaVNTaJQcKhvNwEaOl1BTCg5HoRBcUkAAAMASv62BD4FsAAfADQAPwAfQA46OT8sDA0CciEgIAEBAgAvMxEzETMrMi8zLzMwMUEhNTMyNjY1NCYmIyEnITIWFhUUDgMHDgIHDgIHNzIWFhUVFBYWFxUjLgI1NTQmJgEVFAYHJz4CNTUBqf7uzmV7Ojh4Xv7cAwEnouV4HTlWcEUCCAYDGhUQMSyqwlANHhz4HhwGOm4CY2ZUgRwuHAJdwDZnSUhqO8BivIg5YFJCMREBExIBBgkFA4FgqGx4IlRMGRcbYWAYdExuO/6KrWbXR0wtW2g/tgAAAwBz/qgEHAQ6AB4AMwA+AB5ADjggHx8CAQE+KwoMDQZyACsyPzM5LzMzETMvMDFBITUzMjY2NTQmJiMhJyEyHgIVFA4CBwYGBw4CBzcyFhYVFRQWFhcVIy4CNTU0JiYFFRQGByc+AjU1Adz+1etHWywsW0f+2wQBKWmmdT0mTG9JBAgEFw4MRTqTpUUIFBL5ExADLVgCLmZUgRwuHAGdryRCLC1IKb4uV3tONldGNBEBIAIECAcBe0qBU1YROzgQEBBEQw5UNEomxK1m10dMLVtoP7YAAAMAQv/rB30FsAARABUAMgAdQA4mJh4vCXIXFAAVAnILCAAvMysyMjIrMjIvMDFBMwMOBCMjNTc+BDcBFSE1AREzERQeAjMyPgI3NiYnMxYWBw4DIyImJgF5+iMHKERpkGFBKDRNNyMVBQLo/YUCPvsTJTMhOVc9IQECIR71GisCAlCIr2F2r2IFsP0tn/KsbTPHAwQrVYjEgwKTycn7uwRF+7spRDEaMluBUGTLZGHLZ4vPiERNqgADAD//6wZYBDoAEQAVADMAH0AQJyceLwtyFxQAFQZyCwgKcgArMisyMjIrMjIvMDFBMwMOBCMjJzc+BDcBFSE1AREzERQeAjMyPgI3NiYnNxYWBw4DIyIuAgEn7h0GIjtUcEZLASYlNiYaDwQCRv4VAanxFSg3Iy9IMhsBAiEd6hosAgJIeZ1XWJBoOAQ6/el3tYFQJsYDAyE+YoZZAc7Cwv0uAtL9LilGMhssUnNIX8BeAV3AYX+/fj4rXJAAAwCU/+kHfAWwAAMABwAjACBAERYWDh8JcggCcgADAwYIBAJyACs/OS8zKysyMi8wMUEhFSEDMxEjATMRFBYWMz4DNzYmJzMWFgcOAyMGJiYnAVEC9v0Kvfv7A3b7IT4sOVc9IQICIh70GysCAlCIr2F1qmAHAzLHA0X6UAWw+7s2Uy8BMVuBUGTLZGHLZ4vPiEQCTquJAAADAHT/6gZXBDoAAwAHACUAIkASGRkQIQtyCQZyAwICBQcGcgUKAD8rEjkvMysrMjIvMDFBFSE1ExEjEQERMxEUHgIzPgM3NiYnNxYWBw4DIwYuAgNB/eNC8gKh8hQoOCMvSDIbAQIhHeoaLAICR3qdV1mMZTkCfL+/Ab77xgQ6/S4C0v0uKUYyGwEsUXNIX8BeAV3AYX+/fj4BKlySAAEAXP/rBL8FxQArABVAChILA3IlJR0ACXIAKzIyLysyMDFFIi4CNRE0PgIzMhYXByYmIyIOAhURFB4CMz4CNzYmJzMWFgcOAgK7h9+iV1ei34d0rkM8QZFXU4RdMDBdhFNUdD0CAh0X9BQnAgKQ6BVdp+GFAQaF4addLCy1ISNBcpdV/vhWmHNBAT5yTlezVlaxWZrKYwAAAQBV/+sD6wROACsAFUAKIRoHcgcHAA8LcgArMjIvKzIwMWU+AjU0JiczFhYHDgIjIi4CNTU0PgIzMhYXByYmIyIOAhUVFB4CAls8Qx4JCuoLEQECabNxfMKEREJ/uXhgjSwtLnhGRWE+HB9CaqwBJD8sNXM1NnA3cpZJV5fDbCpsw5ZXIh+6HB49ZXs+Kj58ZT0AAAIAIf/pBVcFsAADACAAF0ALFBQMHQlyBQIDAnIAKzIyKzIyLzAxQRUhNQERMxEUHgIzPgM3NiYnMxYWBw4DIwYmJgSh+4ABxPoTJDQgOlc9IAICIh30GysDAk+Ir2J1qmAFsMnJ+7sERfu7KUMxGwExW4FQZMtkYctni8+IRAJOqwACAET/6gTLBDoAAwAgABdACxMTCxwLcgUCAwZyACsyMisyMi8wMUEVITUBETMRFBYWMz4DNzYmJzMWFgcOAyMGLgIDz/x1AUXwJUUvL0gzGwECIR7qGiwCAkh5nVdYjWU6BDq/v/0uAtL9LjdVMAEjQl07S55LS5tOcKlvNwEqXJIAAgB9/+sE+wXFACAAPwAjQBEAIj8/AgIXNTEsA3IRDRcJcgArMswrzDMSOS8zEjk5MDFBMxUjIg4CFRQeAjMyNjY1MxQOAiMiLgI1ND4CBSMiLgI1ND4CMzIWFhUjNCYmIyIGBhUUHgIzMwKg3MBPeVIqLVd+UVyMTvphocdngdefV0mMzAFe3HbBi0tQltGBkvaU+02DUW2MQyJJclDAAxGMHDlbPjFTPyI9Zz5woWcxOW2gZluNYDJXOWSES2abaTVjt4BAXjQ7YjsyUDsf//8ALP5LBf0FsAQmAN0AAAAHAmQEcgAA//8AIP5LBQIEOgQmAPIAAAAHAmQDdwAAAAIAZARwAsYF1wAFAA8AErYFBQ0HAgIHAC8zLxDNMi8wMUE1EzMVAyU1MxUUFhcHJiYBi3LJ4v6AqCYqTU9cBIQUAT8V/sL5WlRCYidIKI3//wBQAg4CYQLOBAYAEQAA//8AUAIOAmECzgQGABEAAAABAJwCcASaAzEAAwAIsQMCAC8zMDFBFSE1BJr8AgMxwcEAAQB7AnAFzAMxAAMACLEDAgAvMzAxQRUhNQXM+q8DMcHBAAIACP5mA5cAAAADAAcADrQCA4AGBwAvMxrOMjAxQRUhNQEVITUDl/xxA4/8cf7+mJgBApiYAAEAZQQmAY8GGwAKAAixBQAAL80wMVM1NDY2NxcGBhUVZS1RNHgoMwQmiD+HeyxLP4tXiQABADcEBQFhBgAACgAIsQUAAC/NMDFBFRQGBgcnNjY1NQFhLVA0eSkzBgCNP4d7LUw+i1ePAAABADX+2wFhAM8ACgAIsQUAAC/NMDFlBxQGBgcnNjY1NQFhAS1QNHoqLs+GP4d7LUs/i1eIAAABAEsEBQF2BgAACgAIsQYAAC/NMDFTMxUUFhcHLgI1S88zKXkzUS4GAI9Xiz5MLXuHPwD//wBtBCYC3wYbBCYBhAgAAAcBhAFQAAD//wBEBAUCtQYABCYBhQ0AAAcBhQFUAAAAAgA1/sgCoQD+AAoAFQAMsxAFCwAALzLNMjAxZQcUBgYHJzY2NTUhBxQGBgcnNjY1NQFhAStONH4qLgIUAS1QNH4qMv61Qo+CLktElFy3tUKPgi5LRJRctwAAAgA/AAAEHQWwAAMABwAVQAoGBwcCAwJyAhJyACsrETkvMzAxQREjEQEVITUCpPECavwiBbD6UAWw/orExAADAF3+YAQ6BbAAAwAHAAsAHUAOCwoGBwcBAwoScgMCcgEALysrERI5LzMRMzAxQREjEQEVITUBFSE1AsHyAmv8IwPd/CMFsPiwB1D+isDA/IbAwAABAIoCBgJGA9cADQAIsQQLAC/NMDFTNTQ2MzIWFRUUBiMiJop3Zmd4d2dmeALaJ154eF4nXXd3//8Ajf/0A28A/QQmABIHAAAHABIBzwAA//8Ajf/0BSgA/QQmABIHAAAnABIBzwAAAAcAEgOIAAAAAQBeAfABcgLvAAsACLEDCQAvzTAxUzQ2MzIWFRQGIyImXklAQUpKQUBJAm83SUk3N0hIAAcAUP/rB2MFxQARACMANQBHAFkAawBvAClAE19WVjJoTU1EKSk7Mg0XDg4gBQUAPzMzLzM/MzMvMzMvMxEzLzMwMVM1NDY2MzIWFhUVFAYGIyImJjcVFBYWMzI2NjU1NCYmIyIGBgE1NDY2MzIWFhUVFAYGIyImJjcVFBYWMzI2NjU1NCYmIyIGBgU1NDY2MzIWFhUVFAYGIyImJjcVFBYWMzI2NjU1NCYmIyIGBgEBJwFQSIdcYopJSYlhXYdJnx9ALzA+Hh8/MC8+HwJDS4pfW39DQ39ZYItLqCFALTM9Gx8+MC8/HgE5RH9ZYYpJSYlgWoBEkCE/LjM9Gx8+MC8/Hv7p/Tl8AscES01TiFJSiFNNUYhSUoieTShILCxIKE0pSC0tSPxWTlKIUlKIUk5SiFJSiKBOKEgtLUcpTilILCxId05SiFJSiFJOUohSUoigTihILS1HKU4pSCwsSANS+45HBHIAAAIAbACLAjADqQAEAAkAEkAJAQUDCQIIBgYAAC8vFzkwMUEDJzUBAxMjATUCMPvJAR9W+6X+4QOp/m0BDQGF/nb+bAGGDQACAFUAiwIaA6gABAAJAA60AggIBQAALy85LzMwMXcTFxUBAzMBFQdV+8r+4aamAR/KiwGTAQ3+ewMd/nsNAQAAAQArAG4DbgUnAAMADrMAAwIBAHwvMxgvMzAxQQEnAQNu/Tl8AscE4PuORwRy//8ATAKQAqkFuwYHAdcAAAKb//8ANgKbAr8FsAYHAjAAAAKb//8AUAKQAq0FsAYHAjEAAAKb//8ATgKQArgFvQYHAjIAAAKb//8ANwKbAq0FsAYHAjMAAAKb//8ASwKQAqoFuwYHAjQAAAKb//8ARwKRAqMFuwYHAjUAAAKbAAIAZwKMAwAFugAEABkAE7cWCwQECwIRAgAvMz8zLxEzMDFBESMRMxMHND4CMzIWFhURIxE0JiYjIgYGASa/lRMvJkloQlF2QMAhPSs8SiIFAf2LAyH+iQFUjmk6P4hs/gUBy0hUJT1lAP//AEz+iAKpAbMGBwHXAAD+k///AIL+lAIBAagGBwHWAAD+lP//AD3+lAKwAbQGBwHVAAD+lP//ADf+iQKpAbQGBwIvAAD+lP//ADb+lAK/AakGBwIwAAD+lP//AFD+iQKtAakGBwIxAAD+lP//AE7+iQK4AbYGBwIyAAD+lP//ADf+lAKtAakGBwIzAAD+lP//AEv+iQKqAbQGBwI0AAD+lP//AEf+igKjAbQGBwI1AAD+lAAEAGIAAAR6BcQAAwAeACIAJgAiQBAiISUmJgEbFxIFcgkCAgEMAD8zETMrzDMSOS8zzjIwMWEhNSEBExYGByc+AjUDNDY2MzIWFhUjNCYmIyIGBgUVITUBFSE1BHr76QQW/XcXAUdRtiEjDRVzyoOLwmbyOFs1NlcyAUL9MALQ/TDHA0j9lGCXK0YIRV0pAnWKw2hmtXhLWSg2avGNjf73jo4AAAMAIwAABksFsAADAAcAEQAiQBADAgYLDhAHBw0RDgRyCg0MAD8zKzISOS85EjkzzjIwMUEVITUBFSE1AREjAREjETMBEQZL+dgGKPnYBVL6/XP7+wKPA8Sbm/7Jm5sDI/pQBBP77QWw++sEFQAAAwCZ/+wGQQWwABcAGwAtACNAEiIpDRwZGAZyAgEBDgwPBHIODAA/KzISOS8zKzLMPzMwMUEjNTMyNjY1NCYmIyMRIxEhMhYWFRQGBgEVITUTMxEUFhYzMjY3FwYGIyImJjUCI9vbY20qKm1jkPoBiqvdbGzdA2r9n6/xHTQiGS8OAR5PM1OASAIdyUp3QkF0SfsZBbB2zYKF0XgCHbCwAQn76DI1EgYDuAkOO4ZvAP//AJT/7Ag9BbAEJgA2AAAABwBXBHYAAAAGACMAAAYYBbAAAwAHAA0AEgAXAB0AKkAUHRUKChIGBwMCAhESBHITGxsIEQwAPzMzETMrEjkvM84yETMRMzMwMUEVITUBFSE1ARMTMwMDARMTIwEBExMzAQETEyMDAwYY+gsF9foLAcEYspMJvP7atRef/tkDuxix+v7Z/tm0FZu7BAQtmpr+wpqa/REBWwRV/qv7pQWw+6r+pgWw+lABXQRT+lAFsPuq/qYEXwFRAAIAfQAABh8EOgARACIAIEAPFhMTERQIFAgRChwPAAZyACsyMj85OS8vETMRMzAxUyEyHgIVESMRNC4CIyERIyEhETMRITI2NjURMxEUDgJ9Apddilos8hs0Si/+p/EDyv3U8QFaPlkx8UyEqgQ6LmKabf7CAT8/VDAT/IYC1/3pJF1VAqT9XWybYi4AAwBc/+wEMwXEACMAJwArAB1ADiorJyYmBxkSBXIABw1yACsyKzISOS8zzjIwMWUyNjcXBgYjIi4CNRE0PgIzMhYXByYmIyIOAhURFB4CExUhNQEVITUDTDZmLh06fkF7zZZTU5nRfz51Ox0sZzRNe1YtL1Z5aPzyAw788rIQEMgOEEiP1Y4BU5LblEoRDskPEi5dkmX+q2SNWSoC9YmJ/vSJiQADACMAAAXIBbAAAwAHAB8AKUATBgcDAgIUChQXCQoKFhcEchYMcgArKxI5fS8zETMREjkYLzPOMjAxQRUhNQUVITUBITUhMjY2NTQmJiMhESMRITIWFhUUBgYFyPpbBaX6WwLf/oUBe2J7OTl7Yv7S+wIpqO59fe4Eppub6pub/mPHQHFJRXlK+xgFsHfRho3KbAAAAwAqAAAEBAWwAAMAHAAgAC1AFR8gIBEDAgUGBhoCGgIaBBARBHIEDAA/KzISOTl9Ly8RMxEzETMRMxEzMDFBByE3AQEnMzI2NjU0JiYjITczMhYWFRQGBgcBFRMHITcEAzH8WDEB4/4JAe9deTw4emT++jbQsep1VsCfAcysMv0DMQRHsbH7uQJRlUNzR012Qshqyo99v3UO/d8NBbCxsQAABAAk/+0ESQWwAAMAFAAYABwAFUAJBAQDDwELDQMEAD8/MzMSOS8wMUERIxEBMxUUAgYGIyImJzcyPgI1AxUBNQUVATUB8PoCWPtXod6IRXo29VeEWi6D/VkCp/1ZBbD6UAWw/U9PpP76uGELCLlBfr17AnvC/vXCQML+9cEAAgBPAAAFEgQ6ABsAHwAYQAsIFRUeHwZyDgEeCgA/MzMrEjkvMzAxYSM1NC4DIyIOAhUVIzU0EjY2MzIeAxUBESMRBRLxIEBackVTh2E08luj3oVsu5ZsOf4X8rNjoXpTKkKAvXyzsaUBBrhhP3is3YQDifvGBDoAAgArAAAFMgWwABcAGwAaQAwZGAMAAA4MDwRyDgwAPysyEjkvM84yMDFBITUhMjY2NTQmJiMhESMRITIWFhUUBgYHFSE1AyD9CwLwZXw6Onpi/tL7Aimo7H5/7Y788wIfxz9yTER2S/sYBbB2z4aPy2xrx8cAAAQAbv/rBYoFxQAhADMARQBJACVAEkInMEdHOTANch8FDklJFg4FcgArMjIvEMwyKzIyLxDMMjAxQTMUBgYjIiYmNTU0NjYzMhYWFSM0JiMiBgYVFRQWFjMyNgE1NDY2MzIWFhUVFAYGIyImJjcVFBYWMzI2NjU1NCYmIyIGBhMBJwECB6hCgFxcgkVEgltdgEOoOz0pNhobNyk9OQEbSYphZIlHR4hjYotJqCFALTM+Gx8/MC8+H8D9OXwCxwQjRXZIUohRTVOIUkh3Ri1JLEkpTShILEz9HE5SiFJSiFJOUohSUoigTihILS1HKU4pSCwsSANS+45HBHIAAAEARf/rA48F9gAuABS3GRgYASQMAAEALzMvMxI5LzMwMWUVIi4CNRE0PgIzMh4CFRUUDgIEIzUyPgI1NTQuAiMiDgIVERQeAgLbdq9zOS5YfU5DcFMuSIzM/vehouqVRwsWHBEWIhcMFTJTwtdAd6dmAqZim2w4LVd6TSleyr2ZWbRnpr5WKyAyIREYMUgy/WE/YkYkAAQAkAAAB7wFwAADABUAJwAxACVAESswLioCAxsSJAkJMS4EKi0MAD8zPzMzLzPcMs4yERI5OTAxQRUhNQM1NDY2MzIWFhUVFAYGIyImJjcVFBYWMzI2NjU1NCYmIyIGBgERIQERIxEhAREHkv2jKVWaaWuZVFOZamqbVagmUDw7TiYnTjw7Tyb+zP73/gvyAQkB9gIvj48B3lNnn1pan2dTZ55aWp66Uz1eNjZePVM8Xjc3XgEU+lAEE/vtBbD76wQVAAACAG8DlQRdBbAADAAUACRAEQkEAQMGCgcHExQCAAMDBgYRAC8zETMRMz8zMxEzEhc5MDFBEQMjAxEjETMTEzMRARUjESMRIzUD7ntAfG+JgoaE/aCJeI0DlQF1/osBdv6KAhv+gQF//eUCG17+RAG8XgACAJb/7ASRBE4AHQAmABdACiIXFwQeDgcbBAsAPzM/MxI5LzMwMWUXBgYjIi4CNTQ+AjMyHgIVFBQVIREWFjMyNgEiBgcRIREmJgQSAlS8Ym2+kFFZlrtiZ7OITf0AN4xOXbv+6EuNOQIcNIrGaDQ+WJrMc3TLmlhRksV1AxIa/rgzOzsDaUI4/usBHjQ9AP//AFv/9QXMBZoEJwHW/9kChgAnAZQA/wAAAQcCNAMiAAAAB7EGBAA/MDEA//8AVv/1BmoFtAQnAi8AHwKUACcBlAGoAAAABwI0A8AAAP//AF7/9QZbBagEJwIxAA4CkwAnAZQBjgAAAQcCNAOxAAAAB7ECBAA/MDEA//8AXP/1BhsFpAQnAjMAJQKPACcBlAE3AAABBwI0A3EAAAAHsQYEAD8wMQAAAgBh/+sERgX3ACkAPwAZQAwqAAASNR8LcgkSAHIAKzIrMhE5LzMwMUEyFhcuBCMiBgYHJz4CMzIeAhIVFRQOAyMiLgI1NTQ+AhciDgIVFRQeAjMyPgI1NS4DAjlWmTsKLUFTYjc1U08uICRXck1ssohcMCpUeZ1fd7mAQj56r41FYj4dHT1iREViPh4JJj1ZBAVCQE+HakomDBkSshEiFkiLyv7+nDtwyKR5QVCPwXIVa7eHSr8zWHE/FkN4WzQ/bpNUWhg8NSQAAAEApv8WBOgFsAAHAA61BAcCcgIGAC8zKzIwMUERIxEhESMRBOjy/aPzBbD5ZgXd+iMGmgADAD/+8wTDBbAAAwAHABAAH0AODgYGBwcPAnIMAwMKAgsALzMzMxEzKzIRMxEzMDFFFSE1ARUhNQEVASM1AQE1MwTD+9gD8/wKAvD9W6QCSv22pE6/vwX+v7/8sR38r5ECzwLLkgABAJwCcAPvAzEAAwAIsQMCAC8zMDFBFSE1A+/8rQMxwcEAAwA7//8EfAWwAAQACQANABZACgkLCwoECAgBAnIAKz8zLzMRMzAxZQEzASMDExcjAQc1IRUCKwF/0v4onWuzIJL+5IYBU+kEx/pPAwP94eQDA8LCwgAEAGH/6wfqBE4AFwAvAEcAXwAdQA5bNjYeEwtyTkNDKwYHcgArMjIRMysyMhEzMDFTNTQ+AjMyHgMXFQ4EIyIuAjcVFB4CMzI+Azc1LgQjIg4CBRUUDgIjIi4DJzU+BDMyHgIHNTQuAiMiDgMHFR4EMzI+AmFHg7hyaqV6VDYODjZUeqRpc7mDR+0jRmZCQWZNNB4EBB4zTWhCQWZFIwacR4S5cmqkelQ2Dg42VXqka3G5hEbtJEVlQUNnTTQeBAQeNE1mQkFmRiQCERdwx5lWT36SizIjMoyVgVBXmMeHF0qAYjY6W2JUFSMUUmBaOThigUgXcMeYV1CBlYwyIzKLkn5PVpnHhxdIgWI4OVpgUhQjFVRiWzo2YoAAAAH/p/5LAqgGFQAfABC3GxQBcgsED3IAKzIrMjAxRRQGBiMiJic3FhYzMjY2NRE0NjYzMhYXByYmIyIGBhUBjlWebyNAIhESLBYvQCFapnQmSycYEywfNUolTXmgTwgKugQII0s6BPF4pVQMCbUFBipPOQAAAgBlAQYEGAP5ABkAMwAbQAsXBIAKEUAxHoAkKwAvMxrdMhreMhrNMjAxUzU2NjM2FhcWFjMyNjcXBgYjIiYnJiYHIgYDJzY2MzYWFxYWMzI2NxUGBiMiJicmJgciBmYvhUFQYz87XkpBdy8BL3RBSl07P2RQQYkvAS+BQVBjPzteSkF8Ly93QUpeOz9kUEGEArfUMzkCKyAeJ0M80zM5Jx4gKwJE/iLUMjoCKyAeJ0M81DI6Jx4gLAJEAAADAI8AfwPzBL8AAwAHAAsAH0ANAgEBCgoLAAMDBwcGCwAvzjIRMxEzETMRMxEzMDFBAScBFxUhNQEVITUDkv3CbAI+zfycA2T8nASD+/w8BATtxsb+WMbGAAADAD0AAQOQBEsABAAJAA0AIkAQAwcGAAQIBgUJCQECAg0NDAAvM3wQzi8yMhgvMxc5MDFTBRUBNSUFBzUBExUhNfQClfy1A0v9a7YDSwf8rQLK3swBRIeU4R2GAUT8bri4AAMAfQAAA94EWAAEAAkADQAiQBADBwYABAgGAQICBQkJDQ0MAC8zfBDOLzIyGC8zFzkwMUElNQEVBSU3FQEFFSE1Ax/9XwNg/KACo738oANS/K0Cs93I/ryHmOEih/67c7m5AAACACUAAAPrBbAABwAPAB1ADgUICA4HEnIDCgoLAQJyACsyMhEzKzIyETMwMVMBMwcBARcjNwEBJzMBASMlAX+uKP7uARcdpj8BE/7rHqYBgP6CpgLXAtm1/dz927KxAiYCJLX9J/0p//8AnACqAbYFBgQnABIAFgC2AAcAEgAWBAkAAgBkAoQCMgQ6AAMABwAQtgYCAgcDBnIAKzIyETMwMVMRIxEhESMR+5cBzpcEOv5KAbb+SgG2AAABAEf/ZAFUAQAACQAKsgSACQAvGs0wMUEVFAYHJzY2NTUBVE1DfSQnAQBLV7w+Szh4TVT//wArAAAFGwYVBCYASgAAAAcASgJGAAAAAwAaAAAEHQYVABAAFAAYABtADxgGFwpyExQGcg0GAXIBCgA/KzIrMis/MDFhIxE0NjYzMhYXByYmIyIGFRcVITUhESMRAbLyacWIUJVQJTN8UW1n2f2PBAPxBICDtF4iGsQRH2NiRrCw+8YEOgADACsAAAQuBhUAEgAWABoAG0APGRoGchQAcg4GAXITAQpyACsyKzIrKzIwMWEjETQ2NjMyFhYXByYmIyIGBhUBETMRARUhNQHC8WG4gjSdqkdoXaBBQFguAXvx/nP9igSbe6hXDhULuRETK1E7+2UF5/oZBDqwsAAFACsAAAaaBhUAEQAVACYAKgAuACVAFCMcAXIuKhQVBnINBgFyLRcXAQpyACsyETMrMisyMjIrMjAxYSMRNDY2MzIWFwcmJiMiBgYVFxUhNQEjETQ2NjMyFhcHJiYjIgYVFxUhNSERIxEBwvFbqnQkRiEGFC8bN08p5f2EBAPxaMWIUJZPJTJ9UG1o2v2PBAPyBKJ5pVUJCboFBClOOWiwsPvGBICDtF4iGsQRH2NiRrCw+8YEOgAABQArAAAGmgYVABEAFQAoACwAMAApQBcrAHIkHAFyLhQULRUGcg0GAXIpFwEKcgArMjIrMisyMhEzKzIrMDFhIxE0NjYzMhYXByYmIyIGBhUXFSE1ASMRNDY2MzIWFhcHJiYjIgYGFQERMxEBFSE1AcLxW6p0JEYhBhQvGzdPKeb9gwQD8WG3gzSdqkdpXKBBQFktAXry/nP9igSieaVVCQm6BQQpTjlosLD7xgSbe6hXDhULuRETK1E7+2UF5/oZBDqwsAAABAAr/+wE0wYVAAMAFwAbAC0AJUAUIikLchMKcgkcHA0NBAFyGAIDBnIAKzIyKzIRMxEzKysyMDFBFSE1ATIWFxUjNSYmIyIGBhURIxE0NjYBFSE1EzMRFBYWMzI2NxUGBiMiJiY1AYz+nwIZdvBf8RlmMzVJJvFZpgL6/Z+v8R00IxkuDx5PMlR/SQQ6sLAB2z0q0FcNEypQOfteBKJ5pVX+JbCwAQn76DI1EgYDuAkOO4ZvAAAEAEn/7AaCBhQAGwAfADEAZwAxQBs7MkBkYFsLcgFFSUAHciYtC3IeEB8GchQKAXIAKzIrMjIrMisyzDIrzDMSOTkwMUEjLgI1ND4CMzIeAhUjNCYmIyIGFRQeAiUVITU3MxEUFhYzMjY3FQYGIyImJjUFNCYmJy4DNTQ+AjMyFhYVIzQmJiMiBgYVFB4CFx4CFRQOAiMiJiY1Mx4CMzI2NgPBeCZYPjRlkFx7pF8o8ixSOldQHCMbArj9pKnyHTQiGS8PHk8zU4BJ/hUkZWJWj2Y4OmybYIjDaPErVkE+UScVMldCfLNgPXShZJPMaekEQ2U2QVguAvdrqpdNPWpQLURxiUVDWy9cPzxmZnf2sLBZ/Ks3PRgGA7gJDkSUeRgkOzAUEzVMaERCdlo0W5thK0svJz4lGysjHg4aUX9hSHdXMGmlWUNPIyM9ABUAWf5yB+wFrgAFAAsAEQAXABsAHwAjACcAKwAvADMANwA7AD8AQwBHAFcAcwCMAJoAqAAAUyMRIRUjISM1IREjASERMxUzBSE1MzUzASE1IQUhNSERITUhARUjNRMVIzUBITUhARUjNQEhNSEFITUhARUjNRMVIzUBFSM1BxEzERQGIyImNTMUFjMyNiUjJzMyNjU0JiMjESMRMzIWFhUUBgYHIgYHBhQHIzczMjY1NCYjIzczMhQXFBYxHgIVFAYBFRQGIyImNTU0NjMyFgc1NCYjIgYVFRQWMzI2ynEBNcQGs8cBNm/6Ef7LccQGXv7Kx2/+Uf7qARb84P7sART+7AEUBM9vb2/9MP7rARX8HXEEVP7rARUBkP7qARb6jXFxcQeTb+hca1BYbV04MCk2/cKWAXY7Ozs7XV+8Ql8zIkEvAQQCDA65MIk0MzM0dwGXDgwHKzoeaf6Ef2ZngYBmZ4BcSkFASktBQEkEkQEddHT+4/nhATvKcXHK/sVxcXEGV3T7dPn5AvL6+vpecQI/+fkEGHR0dPzu/PwBePr6/oj8/PMBev6GT1xRUy4tN3JGKScpHv4vAiUgQjQiOCQEEwEEAfRLLCcnL0YBBQETBCY5IkxPAUhwYXp6YXBhenrRcERPT0RwRU5OAAUAXP3VB9cIcwADAB4AIgAmACoAAFMJAgMzNDY3NjY1NCYjIgYHMzY2MzIWFRQGBw4CEzUjFRM1MxUDNTMVXAO8A7/8QXfKGSlEYqeVf7ECywI+Jzg5NSgvPR3Jyn8EBgQCgwPP/DH8MQLeMz4bJYFSgJd9jTcwQDQ0TRohOk7+u6qq/UgEBAqaBAQAAQA9AAACsAMgABwAELUDHBwLEwIAL8wyMxEzMDFlFSE1AT4CNTQmIyIGFSM0NjYzMhYWFRQGBgcHArD9nwEfKTEXODVAP7ZJh15fhUcwW0ONkZF6AQklPzQSKzdHM0l6SDpsTDddXDd2AAEAggAAAgEDFAAGACNAFQQFBQMDLwB/AAIPAF8ArwD/AAQAAQAvzV1xMhEzETMwMUERIxEHNSUCAbXKAWwDFPzsAkAxj3YAAAIATP/1AqkDIAARACMADLMXDiAFAC8zxDIwMUEVFAYGIyImJjU1NDY2MzIWFgM1NCYmIyIGBhUVFBYWMzI2NgKpTIhZW4hNTIhaWohNth02JiY1HR03JiY1HAHWmHCSR0eScJhwkkhIkv7urT1MJCRMPa0+TCMjTAAAAQBP//QDuASdADIAF0AKFB4eJgExCgwmfgA/Mz8zEjkvMzAxZTMyPgI1NTQuAiMiBgYVFBYWMzI+AjcXDgIjIiYmNTQ2NjMyHgIVFRQOAiMjARkTbJtkMR42SCo9WC4sWEMwTTcfAUcCWJdjfKpYasSFZqFzPFCh9KUVtCtYhVrYPVk8HTxlPTpgOB4xOh1EQ4BTY7BzcrtxQXuwcEmb76VVAAAEAFf/8APGBJ0AEgAiADQARAAdQA0oFxdBDg4FOTF+HwULAD8zPzMSOS8zMxEzMDFBFA4CIyImJjU0PgIzMh4CBzQmJiMiBgYVFBYWMzI2NhMUDgIjIi4CNTQ2NjMyFhYHNCYmIyIGBhUUFhYzMjY2A8ZDdqBefcd0QXefX1+hd0LyMlo7O1kxMVo8O1kx1T1ulVpalm49abp2eLlr8SpMNTRLKSlNNDVLKQE/U31UK0uWbkx3VS0tVXc5M0gnJ0gzM0knJ0kCOERvUSsrUW9EapFLS5F2LEMkJEEuLUQmJkQAAQA4AAADzgSNAAYADrUFAQZ9AwoAPz8zMzAxQRUBIwEhNQPO/f/+AgH9aASNhfv4A83AAAEAX//wA9gEmwAxABVACRYfHw4nCwMAfgA/Mj8zOS8zMDFBMxUjIg4CFRUUHgIzMjY2NTQmJiMiBgYHJz4CMzIWFhUUBgYjIi4CNTU0PgIC9CIQa6NvOR84TS09WjEvWUBAZTsCQQNYnmx9pVNqwoZoqHdAV6n2BJvEL2CSYqs+Xj8fN186PFozMUwqR0CDW2ixbHK1akF5q2tQmfGpWAABAGb/8APQBI0AIwAXQAohCQkCGRELBQJ9AD8zPzMSOS8zMDFBJxMhFSEHNjYzMhYWFRQGBiMiJiYnMxYWMzI2NjU0JiYjIgYBRcBKAsb+AiMbb0R9sl9ewZVvxH0G7ghsVEZWJzJiRlBRAg4uAlHD+gwgW6t5abVvTpZsS0Y3Xzw8XTQpAAIAMwAAA+0EjQAHAAsAFUAJAAEBCgQLfQoSAD8/MxI5LzMwMUEVIScBMwMBAREjEQPt/FAKAiq90P7bAi3xAbvAlwL7/q3+gQLS+3MEjQAAAgA9//ADwASdAB0APQAdQA0fAAAdHh4SNCoLCRJ+AD8zPzMSOS8zMxEzMDFBMzI2NjU0JiYjIgYGFSM0NjYzMh4CFRQOAiMjFTUzMh4CFRQOAiMiLgI1MxQWFjMyNjY1NC4CIwFrfkdcLSdTQzZVMvJzwXZhoHU+NmqYYKiobaJqNER9pmFUnX9L8jReQENcLiA7VTUCpylILytEKCA8KmWRTypUfFE7Z1AtN3MoTG9GUn9YLShVglosRigpSTEtQSkTAAEAQwAAA9YEnQAeABK3CxR+Ax4eAhIAPzMRMz8zMDFlFSE1AT4CNTQmIyIGBhUjNDY2MzIWFhUUDgIHBwPW/IcBqUJNIlxWR10s8mrHi4a/ZCdKakP4v7+jAY49YU8gRlozWDhqsGhUnWs7amRoO9YAAAEAmAAAAsUEjQAGAAqzBn0CCgA/PzAxQREjEQU1JQLF8f7EAhIEjftzA3VTvq0AAAIAWP/wA8QEnQAVACsADrUcEX4nBgsAPzM/MzAxQRUUDgIjIi4CNTU0PgIzMh4CAzU0LgIjIg4CFRUUHgIzMj4CA8Q/c6FiYqF0QD90oGJionQ/8hoySTAuSTIaGjNKLi9JMhkCrc1/u3o8PHq7f81/uns8PHu6/qH1SWtGISFGa0n1SmxGIiJGbAAAAwBBAAAD9QSNAAMACQANABxADAQMDA0NCH0HAwMGAgAvMzMRMz8zLzMRMzAxZRUhNQEBIzUBMyMVITUD9fyNA2P9BKgDAqJU/LK/v78DSPv5igQDwMAAAAMABgAABDgEjQAEAAkADQAbQBAIBwMEBgAKDQgBDApyBQF9AD8zKxEXOTAxQQEhASMDAQcjAQERIxEB5AFMAQj+UYjzAU4hhv5RAo7xAgECjPz3Awn9bncDCf2V/d4CIgAAAQATAAAESQSNAAsAFUAKBwoEAQQJBQMAfQA/Mi8zFzkwMUETEyEBASEBAyEBAQE08fQBGv6JAY3+4f7//P7mAYL+iASN/moBlv2+/bUBnv5iAksCQgAEACcAAAXlBI0ABQAKAA8AFQAgQA4SBBABDgQMAQgEBgF9BAAvPzMRMxEzETMRMxEzMDFlEzMXAyMDExcjAQETMwEjAxMXIwM3AavyiwT+kIzFA5j+5QQQxOr+5pfC8guP/gXIA8XE/DcEjfxG0wSN/EcDuftzBI38OcYDycQAAAIACAAABHEEjQAEAAkAD7UHAwUBfQMALz8zETMwMUEBMwEjAwETIwECTQEl//5Is/4BIkm0/kkBLgNf+3MEjfyj/tAEjQABAGn/8AQgBI0AFQAPtQwRBgB9BgAvPxEzMjAxQTMRFAYGIyImJjURMxEUFhYzMjY2NQMu8nzWiYvXevA5aklJaDgEjf0AhrleXrmGAwD9AE1jLi5jTQAAAgAlAAAEGQSNAAMABwARtgYHBwEAfQEALz8ROS8zMDFBESMRIRUhNQKV8QJ1/AwEjftzBI3AwAABAD//8APwBJ0AOQAYQAoKJg82MSsYFA9+AD/MMy/MMxI5OTAxQTQuAicuAzU0PgIzMhYWFSM0JiYjIgYGFRQeAhceAxUUDgIjIi4CNTMUHgIzMjY2AwYXN19IaJ9sN0B2omGN0HPxM2JKR1wtGzxgRWeeajVAd6ZmWrGOVfIlRWA6SV0rATEhNCsmERk/VHJMSXlZMFyhajJQMClBJh4wKCQRGEJZd0xNeVQtLFyPYTRLLxYnQAAAAgB1AAAEOwSNABkAHgAYQAobDQ0MDBoYFwB9AD8yLzM5LzMSOTAxUyEyHgIVFAYGBwchJyEyNjY1NCYmIyMRIyEBNwEVdQHLa6p3P0R8VE3+awIBMEheMC9hSdnyAsL+4P8BJQSNLlmDVl+HWBsqwCxPNDdRLPwzAgQC/gULAAADAE3/LwRsBJ0AAwAZAC8AHEAMAAMDKysKCgIgFX4CAC8/MxI5LzMSOREzMDFlBQclARUUDgIjIi4CNTU0PgIzMh4CBzU0LgIjIg4CFRUUHgIzMj4CAxcBT5v+uAHpS4zBd3TCjkxMjMJ1dsGNTPAnSmtERGpKJydLa0NEa0omr/yE+wI4OIXSlU5OldKFOIXSlk5OltK9OluMYDIyYIxbOlqNYTMzYY0AAAEAdgAABCgEjQAYABO3AgEBDQwPfQ0ALz8zEjkvMzAxQSE1ITI2NjU0JiYjIxEjESEyFhYVFA4CAlj+vgFCTmMvL2NO8fEB4pPQbT54rAGbwC5PMjRYN/wzBI1krXBUiGE0AAACAE7/8ARuBJ0AFQArABC2JwYcEX4GCwA/PzMRMzAxQRUUDgIjIi4CNTU0PgIzMh4CBzU0LgIjIg4CFRUUHgIzMj4CBG5Mi8J1dcKOTU2MwnV2wY1M8SZLakRDa0knJ0trQ0RpSiYCYjiF0pVOTpXShTiF0pZOTpbSvTpbjGAyMmCMWzpajWEzM2GNAAEAdgAABGcEjQAJABG2AwgFAQcAfQA/Mi8zOTkwMUERIwERIxEzAREEZ/L98vHxAg4EjftzAyP83QSN/N0DIwADAHYAAAWPBI0ABgALABAAFkAJAg4KBQwHBAB9AD8yMjIvMzM5MDFTMwEBMwEjATMTESMBMxEjEeHQAVEBUND+MqX9x8wl8QRMzfEEjfyvA1H7cwSN/LP+wASN+3MBQAACAHYAAAOSBI0AAwAHAA+1BgMCBH0CAC8/ETMzMDFlFSE1ExEjEQOS/YlM8b+/vwPO+3MEjQADAHYAAARnBI0AAwAJAA0AF0AMBgcLBQwIBgoBBAB9AD8yLzMXOTAxQREjESEBASc3ARMBNwEBZ/ED3P4Q/ug4xgFOIf5/sAHxBI37cwSN/b7+7+LyAX/7cwIZlf1SAAABACb/8ANlBI0AEwANtBAMBwF9AD8vzDMwMUERMxEUBgYjIiYmNTMUFhYzMjY2AnPybLdyfcBt8ixTOTNJJwFvAx784nmrW0+jfj5PJCxVAAEAhgAAAXgEjQADAAmyAH0BAC8/MDFBESMRAXjyBI37cwSNAAMAdgAABGcEjQADAAcACwAYQAoCAwMECQUIBH0FAC8/MxEzEjkvMzAxQRUhNRMRIxEhESMRA7f9bETxA/HxAp3AwAHw+3MEjftzBI0AAAEAVv/wBEsEnQAqABZACSkqKgUZEH4kBQAvMz8zEjkvMzAxQREOAiMiLgI1NTQ+AjMyFhYXIy4CIyIOAhUVFB4CMzI2NzUjNQRLHXa+injFkE1KicB2oM9uDusKOGdRRGtJJSlPc0pjZBX8AmL+MCFMNUuQ0YZJhtGQS2OucTxXMC9eiVtLW4teLykSy60AAAMAdgAAA6EEjQADAAcACwAaQAsHBgYBCgsLAQB9AQAvPxE5LzMROS8zMDFBESMRARUhNQEVITUBZ/EC6v3GAnv9hQSN+3MEjf4RwMAB78DAAAADAD//EwPwBXMAAwAHAEEAKUATBz4+JAgXMwYGMwsCICAXAAAXfgA/My8RMxEzPzMvERI5OTMRMzAxQREjERMRIxElNC4CJy4DNTQ+AjMyFhYVIzQmJiMiBgYVFB4CFx4DFRQOAiMiLgI1MxQeAjMyNjYCe5mZmQEkFzdfSGifbDdAdqJhjdBz8TNiSkdcLRs8YEVnnmo1QHemZlqxjlXyJUVgOkldKwVz/swBNPrU/swBNOohNCsmERk/VHJMSXlZMFyhajJQMClBJh4wKCQRGEJZd0xNeVQtLFyPYTRLLxYnQAADADoAAAQbBJ0AAwAHACYAHUANBAUFASIZfg4CAg0BCgA/MzMRMz8zEjkvMzAxYSE1IQMVITUlFxYGBgcnPgMnAyY+AjMyFhYVIzQmJiMiDgIEG/xiA57S/PEBjAoEJlVCkBwjEwYBCQM1apddirZa8SxMLyg+KRTAAbmQkGj6U5NzJFYHPFVeKgEBaqRyPGS1eE1bKSFAXQAABQAKAAADmgSNAAMABwAMABEAFQAbQAsGBwMCAhEUCgkRfQA/Mz8SOXwvMxjOMjAxQRUhNQUVITUlEzMBIwMBByMBAREjEQNW/PEDD/zxAVf//f6jiasBARuH/qICPfACRJGR2I+PlQKM/PcDCf1udwMJ/ZX93gIiAAACAHYAAAOZBI0AAwAHAA61BwYDfQIKAD8/MzMwMUERIxEhFSE1AWfxAyP9igSN+3MEjcDAAAADAAgAAARxBI0AAwAIAA0AG0AMCAx9AAUFCQIDAwkKAD8zETMRMxEzPzMwMWE1IRUBATMBIwMBEyMBA7D9GwGCASX//kiz/gEiSbT+ScDAA1/8oQSN+3MDXQEw+3MAAwBO//AEbgSdAAMAGQAvABdACgMCAgogFX4rCgsAPzM/MxI5LzMwMUEVITUFFRQOAiMiLgI1NTQ+AjMyHgIHNTQuAiMiDgIVFRQeAjMyPgIDN/5bAtxMi8J1dcKOTU2MwnV2wY1M8SZLakRDa0knJ0trQ0RpSiYCocDAPziF0pVOTpXShTiF0pZOTpbSvTpbjGAyMmCMWzpajWEzM2GNAAIACAAABHEEjQAEAAkADrUBCQoECH0APzM/MzAxQQEzASMDARMjAQJNASX//kiz/gEiSbT+SQNf/KEEjftzA10BMPtzAAADAEYAAANXBI0AAwAHAAsAF0AKBwYGAgoLfQMCCgA/Mz8zEjkvMzAxZRUhNQEVITUBFSE1A1f87wLG/YQCx/zvwMDAAf7BwQHPwMAAAwB2AAAEYwSNAAMABwALABO3CgULBwIAA30APzMzMzMvMzAxQRUhNTMRIxEhESMRA7T9bUbxA+3yBI3AwPtzBI37cwSNAAMARAABA+oEjQADAAcAEAAlQBINCAkDCgYQEA4HfQoCDAMDAgoAPzMRMxEzPzMzETMSFzkwMWUVITUBFSE1ARUBIzUBATUzA+r8uAMj/NkB8P5dpwFC/r6nwL+/A83AwP3OFf27kgG9AauSAAMATwAABVcEjQAVACcAKwAVQAkWAAArfR4MKgoAP80yPzMvMzAxQTMyHgIVFA4CIyMiLgI1ND4CFyIGBgcUFhYzMzI2NjU0JiYjExEjEQKUfXzVnVhYndV8fXzUnVhYndR0Z5RQAU+WZ49nlVBQlWcy8gQZOnWudHazdz08d7J2dLB0O7s5fGNmfzs8gGZjejkBL/tzBI0AAgBPAAAFCQSNABkAHQAfQA4VFBQGBwcNHA4AHR0NfQA/MxEzPxI5ETMzETMwMUEzERQCBCMjIi4CNREzERQeAjMzMjY2NQMRIxEEGPGH/wC1TIbQkEzyJU97V0x3jkDz8QSN/tK8/vqITZbajQEu/tJhk2QzWrCBAS77cwSNAAADAF4AAASBBJ0ALAAwADQAJ0ATLTQKLjMKKBISKRERMjIxCgYdfgA/Mz8zETMRMzMRMz8zPzMwMUE1NC4CIyIOAhUVFB4CFxUuAzU1ND4CMzIeAhUVFA4CBzU+AgM1IRUhNSEVA48hR2xNS2xGIR08VjhnrX9GR4fFfX7FiUdGfatmTmQw4gHN+/IBywJkKkp6WjExWnpKKlmKZkMSdQxYkcF0Imm5jVFRjbhpI3TAkVgNdRlnp/4TwcHBwQAAAwAj/+wFVASNAAMABwAjABxADRcWCyANDQMECgUCA30APzMzPxI5LzM/MzAxQRUhNQERMxEDNT4CMzIWFhUUDgIjNTI+AjU0JiYjIgYGA9X8TgFc81osdIdHi890QXytbTZVOx81alE9dnEEjcDA+3MEjftzAfu+EyATWbSLZJBcK7kULEo1TWAuER8AAAIAT//wBEMEnQADACsAF0AKAAEBCR0UfigJCwA/Mz8zEjkvMzAxQRUhNQEzDgIjIi4CNTU0PgIzMhYWFyMuAiMiDgIVFRQeAjMyNjYCw/43AlbyCXnYmXe9hUdIiL12m9R2DPEGNmxYRGZFIx9CZ0dVbDoCp8DA/t13tmdOkc+BToHPk01punhBYzgvXolaT1iJXjEvYAAAAwAkAAAHFwSNABEAKQAtACBADygpKRwsHQEtfR8cCgsICgA/Mz8zPzMzMxI5LzMwMUEzAw4EIyM1Nz4ENyUyFhYVFA4CIyERMxEzMjY1NCYmIyE1AxUhNQEb8hQFHztfiF0yJio9KhoQBAQ/kNBvP3isbP4c8vJxbTBiTP68bP3DBI3994fRmmIwyAMDIEFomWhgX6lxVIxnOASN/DN1TDJSM8ABlcDAAAADAHYAAAcaBI0AFwAbAB8AIUAPFxYWGxoaHgsffQ0KCh4KAD8zETM/MxI5LzMzLzMwMUEyFhYVFA4CIyERMxEzMjY1NCYmIyE1BxUhNRMRIxEFS5DPcEB4q2z+G/LzcWwwYUz+u1/9fETxAvhfqXFUjGc4BI38M3VMMlIzwFvAwAHw+3MEjQAAAwAlAAAFVQSNAAMABwAbABlACxgNDQMTBAoFAgN9AD8zMz8zEjkvMzAxQRUhNQERMxEDNT4CMzIWFhURIxE0JiYjIgYGA9b8TwFc8Vksc4dFjNF08jVrUD12cASNwMD7cwSN+3MB+74TIBNVu5n+qgFWVmYtER8ABAB2/qEEYgSNAAMABwALAA8AG0AMDwt9AwcHDgoCAgoKAD8zLxEzMxEzPzMwMWURIxElFSE1ExEjESERIxEC7PIBuv1tRvED7PGz/e4CEg3AwAPN+3MEjftzBI0AAAIAdgAABCkEjQAXABsAG0AMAgEBDQsOChsaGg19AD8zETM/MxI5LzMwMUEhFSEyFhYVFAYjIxEjESEyPgI1NCYmNzUhFQJa/rwBRExiMG1x8/EB5GyreEBwz8n9cQLpwC5OM1BqA837czVjilZzpVnmvr4AAwAn/q8FFASNABAAFgAeACNAEBodHQkXCgocFAkKFhERAH0APzIRMz8zMzMRMxEzLzMwMUEzAw4EByM1Mz4DNxMhESMRIQEhESMRIREjAULvCgQrSmBuOkcjKkEuGQNJAv7x/fP+qATs8fz28gSN/mKT4KVzTBi/LmB6rn4BmvtzA8388/3vAVH+sAAFABsAAAYqBI0AAwAJAA0AEwAXADVAGRQXFxEMCwsHBxERBg4ODwoCAhUKCQMDD30APzMRMz8zETMSOS8zMxEzETMRMxEzETMwMUERIxEhASEnMxMTATcJAiETMwcnASEBA5vxA1/+df7UEbT4E/7owAGC+5f+ewEd97QRlv7p/tUBhgSN+3MEjf1L1QHg+3MCAZj9ZwHYArX+INUp/f8CmQACAEP/8APqBJ0AHgA+AB1ADR8CAgE+PhU0KgsLFX4APzM/MxI5LzMzETMwMUEjNTMyNjY1NCYmIyIGBhUjND4CMzIeAhUUDgIlMzIeAhUUDgIjIi4CNTMeAjMyNjY1NC4CIyMCObmRTV4qLWBPNVk38UN4n11pqXhCP3CX/u+5bKJtNkeCrmhRoYVR8QQ6YDtRaDIeO1g6jQIsfSdFLypFKh08Lk55VCwoT3dPQ3FTLUYtUm9BVH9VKyRQhF81QyAqSTAsQSoVAAMAdgAABG0EjQADAAcACwAbQAwAAwoHCwoBAgUFCH0APzMRMzM/MzMzMzAxdwEXAQEzESMBMxEjtgLFsP08AhTy8vz78fFeBC9e+9EEjftzBI37cwAAAwB2AAAEQQSNAAMACQANAB9ADgwLCwcHBgYCCQN9CgIKAD8zPzMSOS8zETMRMzAxQREjESEBISczARMBNwEBaPIDqf4k/u0gwgEzEP6nqgHbBI37cwSN/UvVAeD7cwIBmf1mAAMAJAAABFYEjQADAAcAGQAYQAsTEAoHAgMDCH0GCgA/PzMRMzM/MzAxQRUhNSERIxEhMwMOBCMjNTc+BDcDmP3DAvvy/bfyFQYfPF6IWzImKjwqGhAEBI3AwPtzBI3994fRmmIwyAQFIEBol2gAAgAf/+wEQQSNABIAFwAXQAoBF30VFhYODgcLAD8zETMRMz8zMDFBASEBDgIjIiYnNxYWMzI2NjcDARMHAQIsAQ4BB/5qI1SEbRhBDQILOw40PykStwEJXK3+PQHYArX8eU2BTAMCvgICKEInA1H9sv7uSAOoAAQAdv6vBSUEjQAFAAkADQARAB1ADRENfQUJCRALCAICCAoAPzMvETMzMxEzPzMwMWUDIxEjNTMVITUTESMRIREjEQUlE96EBP1tRvED7fLA/e8BUcDAwAPN+3MEjftzBI0AAgBDAAAEGASNAAMAFwATtxQJCQIDDn0CAC8/MxI5LzMwMUERIxETFQ4CIyImJjURMxEUFhYzMjY2BBjyWStzfz2U2XXyNWtQPnVxBI37cwSN/f++Ex8UVbyYAVz+pFZlLhIeAAQAdgAABg8EjQADAAcACwAPABlACwsHBw8QCgYGAw59AD8zMxEzPzMRMzAxZRUhNQERIxEhESMRIREjEQVg+6UCtvIDRvL8SvHAwMADzftzBI37cwSN+3MEjQAABQB2/q8G0ASNAAUACQANABEAFQAnQBIRDQ0VfQQQAgIQEAwMExMJCAoAPzMzETMRMxEzLxEzPzMRMzAxZQMjESM1MxUhNQERIxEhESMRIREjEQbQEt2EA/ulArbyA0by/ErxwP3vAVHAwMADzftzBI37cwSN+3MEjQACAAkAAAUkBI0AAwAaABdACgYFBQ8SChEBAH0APzIyPzM5LzMwMVMVITUBIRUhMhYWFRQGIyMRIxEhMjY2NTQmJgkBywGA/rwBRExjMG1y8/EB5JDQcHDQBI3AwP5rwDNSMkx1A837c2KtcHGpXwD//wB2AAAFogSNBCYCGAAAAAcB8wQqAAAAAQB2AAAEKQSNABYAFUAJFRYWCgwJCgp9AD8/MxI5LzMwMUEyFhYVFAYGIyERMxEzMjY1NCYmIyE1AlqQz3Bwz5D+HPHzcW0wYkz+vAL4X6lxcK1iBI38M3VMMlIzwAAAAgA9//AEMQSdAAMAKwAXQAoCAQEcCCcLExx+AD8zPzMSOS8zMDFBITUhAR4CMzI+AjU1NC4CIyIGBgcjPgIzMh4CFRUUDgIjIiYmJwOG/jgByP2qBzltVUdmQh8jRWZEV2w2BvINddWadr6HSEeEvXeZ2HkKAefA/t1GYC8xXolYT1qJXi84Y0F4umlNk8+BToHPkU5ntncAAAQAdv/wBkAEnQADAAcAHQAzAB1ADiQZfi8OCwMCAgYHfQYKAD8/EjkvMz8zPzMwMUEVITUTESMRARUUDgIjIi4CNTU0PgIzMh4CBzU0LgIjIg4CFRUUHgIzMj4CApr+ikPxBcpMjMF2dcKNTUyMwnV2woxN8SdKa0REakonJ0xqRERqSScCpMDAAen7cwSN/dU4hdKVTk6V0oU4hdKWTk6W0r06W4xgMjJgjFs6Wo1hMzNhjQAAAgBCAAAEDwSNAAMAIwAZQAsjAAQEGRsWfRkBCgA/Mz8zEjkvMzMwMUEBIQEFIS4CJy4CJy4CNTQ+AjMhESMRIyIGFRQWFjMhAnX+0P79ATUB+P6RFg0MFgMKCgNhfz89daVpAc3y3GtjK1xHATACS/21AkuNAQcKBAEQEAEYW31MUYFaL/tzA81gSjJLKQAAAwALAAAEBQSNAAMABwALABtADAsKCgMCBgcHA30CCgA/PzMRMxESOS8zMDFBESMRIRUhNQEVITUB0/IDJP2KARv9YQSN+3MEjcDA/gGmpgAGABv+rwZ4BI0AAwAHAA0AEQAXABsAO0AcAg4BAQ4OBhsYGBUSEhAPDAkJEwYGGQoNBwcTfQA/MxEzPzMREjkvMzMzMxEzMxEzETMRMy8RMzAxQSMRMwERIxEhASEnMxMTATcJAiETMwcnASEBBnjOzv0j8QNf/nX+1BG0+BP+6MABgvuX/nsBHfe0EZb+6f7VAYb+rwIQA877cwSN/UvVAeD7cwIBmP1nAdgCtf4g1Sn9/wKZAAQAdv6vBH4EjQADAAcADQARACdAEhAPDwsKCgYNB30CDgEBDg4GCgA/MxEzLxEzPzMSOS8zMxEzMDFBIxEzAREjESEBISczARMBNwEEfszM/OryA6n+JP7tIMIBMxD+p6oB2/6vAhADzvtzBI39S9UB4PtzAgGZ/WYABAB2AAAE8QSNAAMABwANABEAKUATEA8PCgALCwoDAwoKBg0HfQ4GCgA/Mz8zEjkvMy8RMxEzETMRMzAxQTMRIwMRIxEhASEnIQETATcBAa6enkbyBFn+JP49IAFyATQP/qeqAdsDjf1+A4L7cwSN/UvVAeD7cwIBmf1mAAQAIQAABVMEjQADAAcADQARACFADxAPDwsKCg4GCg0HBwMAfQA/MjIRMz8zOS8zMxEzMDFTIRUhJREjESEBISczARMBNwEhAcv+NQJZ8QOp/iT+7B/CATMQ/qipAdoEjcDA+3MEjf1L1QHg+3MCAZn9ZgAAAQBO/+sFoASmAEQAG0AMAAEBLxgLJCMjOg1+AD8zMxEzPzMzLzMwMWUVIiQuAjU1ND4CMzIeAhUVFA4CIyIuAjU1ND4CMxUiDgIVFRQeAjMyPgI1NTQuAiMiDgIVFRQeAgWgm/7205RPOm2ZXmKcbzpnu/6YlO6oWkaCs246XEAhNWaXYGSlekMWLEMtLEUvGFKe6a6/Nmyf04Iod7qCREGAunhGjeqrXlGd45IugM2RTMcvXIZYJWWbajQ6cqhuNFJ1SiQmTXBLLX6zbzUA//8ABgAABDgEjQQmAeMAAAAHAjYAPv7TAAIAE/6vBIYEjQADAA8AIkARCw4IBQQKBg99AgoBAQoKDQoAPzMRMy8RMz8zEhc5MDFBIxEzARMTIQEBIQEDIQEBBIbNzfyu8fQBGv6JAY3+4f7//P7mAYL+iP6vAhADzv5qAZb9vv21AZ7+YgJLAkIAAAUAI/6vBjEEjQAFAAkADQARABUAIkAQEQ0NFBV9EBIMCQQIAgIIEgA/My8RMzMzPz8zMxEzMDFlAyMRIzUzFSE1ExEjESERIxEjFSE1BjET3YQD/WxH8gPt8bT8WsD97wFRwMDAA837cwSN+3MEjcDAAAMAQwAABBgEjQADAAcAGwAfQA4AGBgNAwMNDQYHEn0GCgA/PzMSOS8zLxEzETMwMUEzESMBESMRExUOAiMiJiY1ETMRFBYWMzI2NgHjnZ0CNfJZK3N/PZTZdfI1a1A+dXEDQv1+A837cwSN/f++Ex8UVbyYAVz+pFZlLhIeAAIAdgAABEoEjQADABcAFEAJDxIUCQkBfQASAD8/OS8zPzAxcxEzEQM1PgIzMhYWFREjETQmJiMiBgZ28Vkscn89ldh18TZqUT12cASN+3MCAr4TIBNVupn+ogFdVmYtER4AAQAO//AFrASkADQAG0AMGBgdHRERIgt+LQALAD8yPzM5LzMRMy8wMUUiLgI1NTQ+AjMyHgIVFSEiLgI1MxQWFjMhNTQmJiMiDgIVFRQeAjMyNjcXDgIDzoncnFNUlMNxfseJSPv2Z5hkMb8vXkgDGUSBX0ZvTignU4dhapUxQBdllhBMj8l+dHzHj0xHisqDmDxvml1FZjgXWoBFMVt+ToRLe1oxKxS2DSUdAAEATf/wBH8EpAArABVACREUFBkLCyQAfgA/Mj8zOS8zMDFBMh4CFRUUDgIjIi4CNTUhFSEVFBYWMzI+AjU1NC4CIyIGByc+AgI1htmZUlOVxHB/xolIA379dEKDXkZvTSknVIdgapUwQBdnmQSkTI/JfnR7yI9MSIrKgpnAF1mBRDBbf06CS3xaMSoVtg0mHAAAAgBD/+wD6gSNAAcAJgAbQAwIBQUEJiYdEwsHAH0APzI/MzkvMzMRMzAxUyEXASM1ASEBMzIeAhUUDgIjIi4CNTMeAjMyNjY1NCYmIyNsA1QB/mSdAQ791gEcsWyjbDZHgq5oUaGFUfEDOmJATWYyNWlNhQSNmv5cdAEK/ug5ZH5GWodaLSVRhWA1RiIrTzc5TyoAAAMATv/wBG4EnQAVACQANAAbQA4LJWotHWotLQsAFmoACwAvLysSOS8rKzAxQTIeAhUVFA4CIyIuAjU1ND4CFyIGBgcGBgchJiYnLgIDMjY2NzY2NyEWFhceAwJedsGNTEyLwnV1wo5NTYzCdU10SgwBAQICNgECAQxKc0xOc0gMAgEB/csBAgEJL0heBJ1OltKFOIXSlU5OldKFOIXSlk7AQX1aCA8JCRIIWXtB/NJBflkIDwgIEQhCaUYlAAAEADoAAAQbBJ0AAwAHAAsAKgAhQA8GBwMCAgkmHX4SCgoRCRIAPzMzETM/MxI5LzPOMjAxQRUhNQUVITUBITUhARcWBgYHJz4DJwMmPgIzMhYWFSM0JiYjIg4CA0n88QMP/PED4fxiA579qwoEJlVCkBwjEwYBCQM1apddirZa8SxMLyg+KRQCvJGR64+P/i/AAiH6U5NzJFYHPFVeKgEBaqRyPGKvdUlXJiFAXQADAEX/8AOuBJ4AIwAnACsAHUANJyYmKisrBxkSfgAHCwA/Mz8zEjkvMzMvMzAxZTI2NxcGBiMiLgI1NTQ+AjMyFhcHJiYjIg4CFRUUHgITFSE1BRUhNQLMO1szGThsPnW5gURDgLl1P2k8FTRgO0NgPx4fP2HE/PgDCPz4rw8NvA8QQn+5d8B5voNDEBC7EAwpUHZNwkxyTScCVJGR7pCQAAAEAHYAAAfCBJ4AAwAVACcAMQApQBIrMC4tJAkJMS59Ki0KGxISAgMALzMzfC8zGD8zPzMzLzMREjk5MDFBFSE1AzU0NjYzMhYWFRUUBgYjIiYmNxUUFhYzMjY2NTU0JiYjIgYGAREjAREjETMBEQeG/cY6VZlqappUU5ppa5pVqCZQPDtNJydOPDtPJv6t8v3y8fECDgFhkJABpUlil1ZWl2JJYZdWVpeqSTdYMjJYN0k3VzMzVwEH+3MDI/zdBI383QMjAAACACgAAASvBI0AGAAcABtACxscAgEBDgwPfQ4KAD8/MxI5fC8zGM4yMDFBITUhMjY2NTQmJiMjESMRITIWFhUUDgIHFSE1Auj9QALASV8uLl9J+/EB7I7MbT52qVH9JwGesjdXMTNWNfwzBI1hqm1UiWQ2TrKyAAACADf/9QKpAyAAGQAzABlAChsAABkaGggQLCQALzPMMjkvMzMRMzAxQTMyNjY1NCYjIgYVIzQ2NjMyFhYVFAYGIyMVNTMyFhYVFAYGIyImJjUzFBYzMjY1NCYmIwEOVys4HTdAMUO2UIZPW4pNR31UdXVdhEVUkVpLjVu3SD1BPyNAKwHRGSweJDcpJUdkNDNkSjlYMSlSK1hGSmg2MWpWJzg5KyYuFQACADYAAAK/AxUABwALABdACQMHBwEBBgUICgAvzDIyOS8zETMwMUEVIScBMwcHAREjEQK//YEKAW+PnbABdrYBOZR2Afr64gHc/OsDFQABAFD/9QKtAxUAIQASth8JCQQDGREALzPMMjkvMzAxUycTIRUhBzY2MzIWFhUUBgYjIiYmJzMWFjMyNjU0JiMiBvSRNAHs/qkWEUssV3hAQoVnTIlXA7YCQzRENEVCNTYBXSQBlJGaBhY9clFHfE43aEgtKEs1OUYcAAEATv/1ArgDIgAtABO2ExwcAwAMJAAvM8wyOX0vMzAxQTMVIyIGBhUVFBYWMzI2NjU0JiMiBgYHJz4CMzIWFhUUBgYjIiYmNTU0PgICFh0LWIRIIDsoJTcgQjwpPyQBMAE5bkxTcDlLh1tdj1FDe6YDIpQvb2F2MUIgIzkkOT4eLBYjLV9BRHdNTXxHSY1oNXCmbjYAAAEANwAAAq0DFQAGAAyzBQEGAgAvzDIyMDFBFQEjASE1Aq3+q8ABVf5KAxVm/VECg5IABABL//UCqgMgAA8AHwAvAD0AF0AKDCQ7AxQUNCwcBAAvM8wyOS8XMzAxZRQGBiMiJiY1NDY2MzIWFgc0JiYjIgYGFRQWFjMyNjYTFAYGIyImJjU0NjYzMhYWBzQmJiMiBhUUFhYzMjYCqk+JV1aKUFCJVleJULUgNyQkNh4eNyQkNx+iSX9UU4FJSYFSU4FJtxcuITA2GC8gMTTZTGUzM2VMRmI2NmI2HysXFysfHi0XFy0Bdz9dMzNdP0liMzNiVRwnFi8qGikXMgAAAQBH//YCowMgAC4AE7YSGxsKIwEtAC8zzDI5fC8zMDF3MzI2NjU1NCYmIyIGBhUUFhYzMjY2NRcUBgYjIiYmNTQ2NjMyFhYVFRQOAiMj1Q1ZdjwfNSUlNh0cOSkpOR43Pmg/UnY9S4haWYhOPnSlaA+HKWNWmDE+HiY/JiU5IB4rEx8yWjk/dlJOgU1HkGw1c6RpMgAAAQCNAosDLQMxAAMACLEDAgAvMzAxQRUhNQMt/WADMaamAAMAmARNAqYGmgADAA8AGwAZQAkTDQ0HAQMDGQcALzMzfC8YzREzETMwMUE3MwcFNDYzMhYVFAYjIiY3FBYzMjY1NCYjIgYBGarj9/7pbk5Na2tNTm5jNCUkMTEkJTQF18PD3U1kZE1MYWFMJTExJSczMwAABAB2AAADtgSNAAMABwALAA8AG0AMCwoKBg8OB30DAgYKAD8zMz8zMxI5LzMwMWUVITUTESMRARUhNQEVITUDtv1lTPEC6v27Apn9Z7+/vwPO+3MEjf4tv78B08DAAAQADP5KBBgETgASACQAWwBfADNAGl1fBnIlJhgYD0BBQS5TUw8PBUo3D3IhBQdyACsyKzIROS85ETMzETMRMxI5OSsyMDFTNTQ2NjMyFhYVFRQOAiMiJiY3FRQWFjMyNjY1NTQmJiMiBgYTFwYGFRQWFjMzMhYWFRQOAiMiLgI1NDY2NxcOAhUUHgIzMj4CNTQmJiMjIiYmNTQ2NgEXISdGcsuGiMtwQHelZYfMcvA0X0JAXjM0X0BAXzQcWhtAIjojs36xXkiNyoN1tHs+X4xFOSI7JB4+XUFNc0wmIU9FyEl6Sz9YAuoC/oALAs4WaqRcXKRqFkuEZDhipHsWLlIzM1IuFjFQMTFQ/rQyDjYxHyIOQoVjO3xoQCxOZDdWekkNVgUsQikdNSgYHjA4GyM3ICdUQ0NcPQKElZUAAAQAVv/rBFoETgAVACsALwAzABdADDAKLQYcEQtyJwYHcgArMisyPz8wMVM1ND4CMzIeAhcVDgMjIi4CNxUUHgIzMj4CNzUuAyMiDgIFEzMLAjMTVjhtoWlmlWc+DQ09aJZnZ6BuOPIaOFxBOlQ6IggGITpVOkFcOhoB403ba2lUvXIB+xV+0ppUT4/GeDh1wI1NTo7BiBVHelwzN194QjREfWQ6PGmLQgIe/eL95AIc/eQAAAIAmQAABPAFsAAZAC4AH0APJggbGhoCAQEODA8Ccg4IAD8rMhI5LzMzETM/MDFBISchMjY2NTQmJiMhESMRITIWFhUUBgYPAjceAhUVFBYWFxUhLgI1NTQmJgLi/mQBAWNheTk2c1z+3foCKKPgclikcRZzMau/TgwfHP7/HhsHNmsCWMY1ZEhGajn7GAWwYruIYZBgHC8XhQFhp210IVNMGBsaYmEYcExtOgADAJkAAAUsBbAAAwAJAA0AIEAQCggJAgwLCwcGBgIDAnICCAA/KxI5LzMzETM/PzAxQREjESEBISczARMBNwEBk/oEZv2w/p0i+gGoM/4pogJiBbD6UAWw/MLaAmT6UAKYwfynAAADAIEAAAQzBgAAAwAJAA0AHEAOCwcGBgIJBnIDAHIKAgoAPzMrKxI5LzMzMDFBESMRAQEhJzMBEwE3AQFx8AOH/kb+3EXxARgt/q6dAc0GAPoABgD+Ov2hvwGg+8YB+qr9XAAAAwCZAAAFCwWwAAMACQANABpADgYLBwgMBQIJAwJyCgIIAD8zKzISFzkwMUERIxEhASEnMwETATcBAZP6BE/9ff7OCm8CGCP9juICyAWw+lAFsP0GdgKE+lAC2Gb8wgAAAwCBAAAEHwYYAAMACQANACBAEAwLCwcGBgIJBnIDAXIKAgoAPzMrKxI5LzMzETMwMUERIxEBASEnMwETATcBAXHwA3P+Ev77HI0BXS3+UbYCHAYY+egGGP4i/cGeAaH7xgIXgP1pAAACAHYAAAQrBI0AGQAdABZACRsaDwIBDg99AQAvPzMRMxEzMjAxYSE3ITI2NjU1NC4CIyE1ITIeAhUVFAYEAREjEQHv/vACAQ5zkkUnUHtU/ucBGX3Rl1OR/v/+zvG/VaJ0OleHXC/AUJPMfDil+osEjftzBI0AAQBP//AEQwSdACcAEbYZFRB+JAAFAC/MMz/MMzAxQTMOAiMiLgI1NTQ+AjMyFhYXIy4CIyIOAhUVFB4CMzI2NgNQ8gl52Jl3vYVHSIi9dpvUdgzxBjZsWERmRSMfQmdHVWw6AYR3tmdOkc+BToHPk01punhBYzgvXolaT1iJXjEvYAAAAgB2AAAEDASNABkAMQAoQBMcGykZAgIBGyYBASYbAw0MD30NAC8/MxIXOS8vLxEzEjk5ETMwMUEhJyEyNjY1NCYmIyMRIxEhMh4CFRQGBgcDITchMjY2NTQmJiMjNyEXNhYWFRQOAgJY/r4CAR9BWi8uXETI8QGsbKl4P0eSdFT+hWIBGUZbLCdWRfYBATg3b4pBPHKmAf2mIkEvNUQf/DMEjSdOeVJHekwE/cS/KEUtMkkppkECUYBFVX1TKQAAAwAIAAAEkQSNAAQACQANABxADA0ABgMMDAEHA30FAQAvMz8zEjkvEjk5MzAxQQEjATMBASczAQEVITUCWv6i9AHVogEe/qAlpQHU/v39ZgOe/GIEjftzA6Dt+3MBsLW1AAABAJAEbQGeBikACgAKsgWAAAAvGs0wMVM1NDY2NxcGBhUHkChBJIEcJAEEbYVAeWIcUDV1SHoAAAIAdQTUAwMGfAAPABMAErUSEwoADQUALzN83DLWGM0wMUEzFAYGIyImJjUzFBYzMjYnJzMXAlatT5NkZZNQrEZWU0bJqrN3BbFBYzk5Y0EtRUU3wcEAAvyeBLz+2AaJABcAGwAdQAwAFRUFGRsbCRERDAUALzMzETMzLzMRMxEzMDFBFxQGBiMiJiYjIgYVJzQ2NjMyFhYzMjYlNzMH/nFnKkowNkU+Kx8raCpKMC1IRikeLf73gb60BZ0dMFIyJCQyJhwwUjMkIzI/0tIAAgB6BOcEewaKAAYACgAUtwgHBwUBgAQGAC8zGs05My/NMDFTJTMFIycHJRMzA3oBHp0BH82hoAHEmtfXBOf29o6OmwEI/vgAAv9RBNsDUwZ/AAYACgAXQAkHQAgIAwaAAgQALzMazTkzLxrNMDFBBSMnByMlJRMjAwI0AR/NoKDNAR7+kZqZ2AXR9o+P9q7++AEIAAIAeQToBAYGyAAGABoAH0ANERIIQBoJCAgDBoACBAAvMxrNOTMRMzMaEMwyMDFBBSMnByMlBSMnPgI1NCYmIzcyHgIVFAYHAj4BFb6vsL0BFAH2iAgrNRkjOyUHRGdHJFIxBd/3oKD3cnoDDBgTGRsMZxcrOyY+OgcAAgB5BOgDUwbNAAYAHgAlQBAIBwcQGAxAFBMTHAwMBoAEAC8azTIRMzMRMxoQzTIyETMwMUEFIycHIyU3FxQGBiMiJiYjIgYVJzQ2NjMyFhYzMjYCLgElvq+wvQEl8VolQiowQDonGydaJUIqKEJCJRooBdLqj4/q+x4nSC0iIiwdGChILyIhLgAAAwB2AAADmQXEAAMABwALABtADAIKCgsLBwMDB30GCgA/PzMvETMRMxEzMDFBESMRAREjESEVITUDmfH+v/EDI/2KBcT+CQH3/sn7cwSNwMAAAAIAdQTTAwMGfAAPABMAErUREwAKDQUALzN83DIY1s0wMUEzFAYGIyImJjUzFBYzMjYnNzMHAlatT5NkZZNQrEZWU0bgeLOqBbBBZDg4ZEEtRUU4wcEAAgB1BNUC/QcHAA8AJQAoQBEbHBwRJRISEREJDQUACQkFEAA/M3wvMxEzETMYLzMRMxEzLzMwMUEzFAYGIyImJjUzFBYzMjYnIyc+AjU0LgIjNzIeAhUUBgYHAlKrT5BlY5NOqkdTUkdKnAkxPB0XKTcgB094UCkrQyYFsEFjNzdjQS1CQkVzAgwWEhAWDQVeFSY3IiUwGAUA//8ATAKNAqkFuAYHAdcAAAKY//8ANgKYAr8FrQYHAjAAAAKY//8AUAKNAq0FrQYHAjEAAAKY//8ATgKNArgFugYHAjIAAAKY//8ANwKYAq0FrQYHAjMAAAKY//8ASwKNAqoFuAYHAjQAAAKY//8ARwKOAqMFuAYHAjUAAAKYAAEAaf/rBSEFxQApABVAChoWEQNyJgAFCXIAK8wzK8wzMDFBMw4CIyIuAzU1NBI2NjMyFhYXIy4CIyIOAhUVFB4DMzI2NgQl+w+M9a9vwZxwPFyo5omv+I8P+w5KiGpWimQ1I0JedUZohUoB2pXefEF9sOCDN6QBCr9lfeKWXodISYm/dzlfooBaL0aGAAABAGn/6wUiBcUALQAbQA0tLCwFGhYRA3ImBQlyACsyK8wzEjkvMzAxQREOAiMiLgM1NTQSNjYzMhYWFyMuAiMiDgIVFRQeAzMyNjY3ESE1BSIdiNmYdM2nekFdqueJt/OGEvcMS4doVo1nOChLaINLUHNIEP7cAuH92ihiRkJ8suKFJ6gBD8BleNKHTHhFSozEeClho4JbLxsoEgEfuwAAAgCZAAAFFAWwABsAHwAStxwPEAJyAh0AAC8yMisyMjAxYSE3ITI+AjU1NC4CIyE1ITIEFhIVFRQCBgQBESMRAkz+vAIBOHWwdjw8da1w/rcBU5oBAb1nZ73++v6p+sdKiblvLXK6hUjIZrz+/J0rnf78u2YFsPpQBbAAAAIAaf/rBW4FxQAZADEAELchFANyLQcJcgArMisyMDFBFRQOAyMiLgM1NTQ+AzMyHgMHNTQuAyMiDgIVFRQeAzMyPgIFbj5xn8RwbsOgdD4+c6DCbnDFn3I++SVEYXpHVpBoOiZFYnhFWpBnOALuLH3etIJGRoK03n0sfd21gkZGgrXdqS5an4JdMk6NvnEuW6CCXjJOjcAAAwBp/wQFbgXFAAMAHQA1ABtADSUYA3IAAwMxCwlyAQIALzMrMjIRMysyMDFlAQcBARUUDgMjIi4DNTU0PgMzMh4DBzU0LgMjIg4CFRUUHgMzMj4CA9EBdKP+lAI4PnGfxHBuw6B0Pj5zoMJucMWfcj75JURhekdWkGg6JkVieEVakGc4wv7RjwEtArcigOC1gUVFgbXggCKB4LWCRUWCteCjJF6ig1wxTIzCdiReooNdMU2MwwABAJYAAALqBI0ABgAVQAkDBAQFBQZ9AgoAPz8zLzMRMzAxQREjEQU1JQLq8f6dAjUEjftzA3B8yNEAAQBrAAAELwSfACAAF0AKEBAMFX4DICACEgA/MxEzPzMzLzAxZRUhNQE+AjU0JiYjIgYGFSM0NjYzMh4CFRQOAgcFBC/8WgHqPUEYJ1dJRGc78XjUi2ykbzgjQ2A//u2/v5wBqDVRSicqSzA1YkR0uW0yW3xKOWZfYDT7AAEAD/6jA/cEjQAfABpACwYAHh4DFg8FAgN9AD8zMy8zEjkvMzMwMUEBITUhFwEeAhUUDgIjIiYnNxYWMzI2NjU0JiYjIwFNAVD9uwN0Af6bbrVsWaDagWjEaDZKqllyo1dNnnpMAlQBecCN/n0Pdb6AgciJRjM0sygwVphgZYRAAAACADT+xASIBI0ABwALABZACQYEC30KAwcHAgAvMxEzLz8zMzAxZRUhJwEzAwEBESMRBIj7swcCqL3P/moCofG/wJID/P6S/aADzvo3BckAAAEAZ/6gBCEEjAAnABZACSQJCQIaEwUCfQA/My8zEjkvMzAxQScTIRUhAzY2NzYeAhUUDgIjIiYnNxYWMzI+AjU0LgIjIgYGAVLIVgMp/ZouKXdSaKRzO0SHzIhu0F1KOqRiT3hQKCJCYkE+UjQBaREDEsz+oBgfAQFDgLZxa76TUzo7ri02NFx4RUBtUi0bMwAAAQBC/sQEFgSNAAYAD7UBBQUGfQMALz8zETMwMUEVASMBITUEFv258wI8/SoEjYX6vAUJwAAAAgB2BM4C/AbaAA8AJwApQBEREBAZISEVHRwcJRUVAAkNBQAvM80yMnwvMzMRMxEzGC8zMxEzMDFBMxQGBiMiJiY1MxQWMzI2ExcUBgYjIiYmIyIGFSc0NjYzMhYWMzI2AlCsT5BkY5FPq0RUU0QiaCtJMTVFPiwfK2cpSjEsSEUrHiwFr0JmOTlmQi1ERAFYHjBSMiQkMiUbMFMzJCMyAAEAYv6aAVMAswADAAixAQAAL80wMWURIxEBU/Gz/ecCGQAFAE7/8AZuBJ0AKQAtADEANQA5ADFAGDg5OTF9Fi0tFzAKNTQ0JhsBBgYmfhEbCwA/Mz8zETMREjkvMz8zMxEzPzMRMzAxQQciLgIjIg4CFRUUHgIzMj4CMxciBgYjIi4CNTU0PgIzMhYWARUhNRMRIxEBFSE1ARUhNQPnGSBqcl8VQ2tJJydLa0MXYHRnHRpOlH0qdcKOTU2MwnUqf5UC0v1mS/EC6v28Apn9ZwSNwAQHBTJgjFs6Wo1hMwUFBb4ICE6V0oU4hdKWTggI/DK/vwPO+3MEjf4tv78B08DAAAEAbv60BFAEoQA7ABS3ABUfHzULKTUALy8zEjkvMzIwMUUyPgI1NTQuAiMiDgIVFB4CMzI+AjU3FAYGIyIuAjU0PgIzMh4CFRUUDgMjIiYnNxYWAepViWI0JUVhPTZaQiQgQVw8S3BKJWV3yHlppnU+SIGtZ3G8i006apKxZUiWRi8xaY1ChsuJ9VeDWCwuVnlKQXNYMitHUycKjMBiSIW5cHa+iEpIj9WNz5Ttsnc7Hh6yEh0AAf+n/ksBiwDOABEACrINBgAAL8wyMDF3MxEUBgYjIiYnNxYWMzI2NjWZ8laebiQ8Ig4TOhYpOh7O/vR5qFYHCsEGBihPOgD//wA4/qMEIASNBAYCXCkA//8AaP6gBCIEjAQGAl4BAP//ACz+xASABI0EBgJd+AD//wBiAAAEJgSfBAYCW/cA//8AX/7EBDMEjQQGAl8dAP//ADT/6wRXBKAEBgJ11AD//wBs/+wEMgW5BAYAGvkA//8AWf60BDsEoQQGAmPrAP//AGf/7AQmBcQGBgAcAAD//wDlAAADOQSNBAYCWk8A////rv5LAZIEOgQGAJwAAP///67+SwGSBDoGBgCcAAD//wCQAAABgQQ6BgYAjQAA////+v5eAYEEOgYmAI0AAAEGAKTRCgALtgEEAgAAQ1YAKzQA//8AkAAAAYEEOgYGAI0AAAADAHb/6wQZBJ0AAwAWADEAKUAUDyYmDSMjCRsvC3IEAAACEwl+AgoAPz8zEjkvMysyETkvMzMRMzAxQREjERcjNDY2MzIWFwEnNRMmJiMiBgYTNxYWMzI2NjU0JiYjIzU3Mh4CFRQGBiMiJgFi7OzsXbmLic5W/qiGzB1MNT5PJUZFGUovNk0pNm1QUm9pp3Y+Z7JvQ3QC7f0TAu0CkMFhdF/+ZANxAQIYJT5v/O62ESAvVDc7RyGdBypSek96qFYdAAIAYP/rBIMEoAAVACsADrUcEX4nBgsAPzM/MzAxQRUUDgIjIi4CNTU0PgIzMh4CBzU0LgIjIg4CFRUUHgIzMj4CBINQj8FwcMKQUVCQwXBwwZBR8SxOaj0+aE8rLE9pPj5pTSsCThGU35RLS5TflBGU35VKSpXftDFjkV8vL1+RYzFjkmAuLmCSAAEAOQAAA+oFsAAGABNACQEFBQYEcgMMcgArKzIRMzAxQRUBIwEhNQPq/dPyAi39QQWwhPrUBPDAAAADAH3/7AREBgAABAAaAC8AGUAOIRYHcisLC3IECnIAAHIAKysrMisyMDFTMxEHIwEVFA4CIyIuAic1PgMzMh4CBzU0LgIjIg4CBxUeAjMyPgJ98SDRA8c7c6NnZZZlPg0NPmWVZGilcjvxH0BiREBePyQGCT1uVUNiPx8GAPrn5wInFXbJlVJNi8B0Q3fDjUxPksuQFUyCYTYrTGc7tUl8SzhigAAAAQBP/+wEAAROACcAGUAMHRkZFAdyBAQACQtyACsyMi8rMi8yMDFlMjY2NzMOAiMiLgI1NTQ+AjMyFhYXIy4CIyIOAhUVFB4CAkE7YT0D4wR6xnh8vH4/QH66fILFcgTjAzdgQ0ljOxkZO2OrMFQ3aaxlVZbEcCNwxZZVZ7d5PGE6O2V9QyNDfmQ7AAADAE7/7AQVBgAABAAaAC8AGUANIQQEFgtyKwsHcgEAcgArKzIrMi8yMDFlETMRIwE1ND4CMzIeAhcVDgMjIi4CNxUUHgIzMjY2NzUuAyMiDgIDI/LS/QtBdqNkYpRnPg4NP2iUY2KjdkHyIUJiQVJtPwsGJkBdPkFjQyHgBSD6AAIRFXzLkk9MjcJ3RHPBi01SlMmLFUmBYTdIfEu2O2ZMKzZhggAAAwBO/lUEFQROABMAKQA+ABtADzAlC3I6GgdyDgYPcgAGcgArKzIrMisyMDFBMxEUDgIjIiYnNxYWMzI2NjURATU0PgIzMh4CFxUOAyMiLgI3FRQeAjMyNjY3NS4DIyIOAgNF0EOBunZLuUwxPIdKX3o7/Ss/dqNlaZZjOg4OPWaWZWOjdj/yIUJiQVVsPAwHJT5dQEJjQiEEOvwVebyCQysvqyEoR4toAvr+zRV7y5JPTI3Cd0N0wIxNUpXJixVKgGI3SXtMtTtmTCs2YYIAAAIASf/sBFMETgAVACsAELccEQtyJwYHcgArMisyMDFTNTQ+AjMyHgIVFRQOAiMiLgI3FRQeAjMyPgI1NTQuAiMiDgJJSYi+dXe/iEhIh792dr+ISfEkRWhEQ2dGIiNFaEREZkUkAhEXdcmVU1OVyXUXdciVU1OVyIwXSYJjODhjgkkXSIFkOTlkgQAAAwB9/mAEQwROAAQAGgAvABlADiEWB3IrCwtyAwZyAg5yACsrKzIrMjAxQREjETMBFRQOAiMiLgInNT4DMzIeAgc1NC4CIyIOAgcVHgIzMj4CAW7x2ALuPXOiZmWXaD8NDT9olmRmpHQ88SJEY0FAXUAkBgw8bVRBYkMiA2r69gXa/e0VdsmVUkuJu3BRd8KNTE+Sy5AVTIJhNitMZjvCSHhHOGSBAAMATv5gBBQETgAEABoALwAZQA4hFgtyKwsHcgQOcgMGcgArKysyKzIwMUERNzMRATU0PgIzMh4CFxUOAyMiLgI3FRQeAjMyNjY3NS4DIyIOAgMiIdH8Oj91pWZllWc+Dg0+aJZmZKV1P/IhQ2NBVW89CwYlQF9AQWRDIv5gBQPX+iYDsRV7y5NPTI3Cd0RzwYtNUpTJixVKgWM4Sn5LtjtmTis3YoMAAAEAUf/sBAoETgAqABlADBMSEgAZCwdyJAALcgArMisyETkvMzAxRSIuAjU1ND4CMzIeAhUVITUhNTQmJiMiDgIVFRQeAjMyNjcXBgYCcn3IkExKhLRpdK5zOfy8AlYtYlE8XT8hKlJ7UlOVNDcytxRQkMNzKn3Jj01Jh7pwf60aQm5CMlyDUSpJfV00MCGjJkcAAwBQ/lUEAwROABIAKAA9ABtADy8kC3I5GQdyDQYPcgAGcgArKzIrMisyMDFBMxEUBgYjIiYnNxYWMzI2NjURATU0PgIzMh4CFxUOAyMiLgI3FRQeAjMyNjY3NS4DIyIOAgMz0HffnUavRzI3e0VgeTv9PzptnmVplWQ5Dg49ZpVlZJ1tOvIaOlxBVWs6CwYjPV1AQV06GwQ6/Aqe3XQlKawdIUSHYwMG/swVfMuST0yNwndDdMCMTVKUyYsVSn9iN0l7TLU7ZkwrN2GCAAACADT+TQRbBEoAAwAlABlADA4VAQEVHwQHcgMGcgArKzIvMy8RMzAxQQEjASUyHgIXAR4CFxY2NwcGBicuAycBLgIjIgYHJzY2BCz9IvUC3/2CUGlFLBIBlhAmLx0OMQ4iFDsZPFpCNBf+fRAzQisMKg0EHUUEOvomBdoQNlRdJ/xnJjsmAwEBAcAHBgIDNFRpOAN2K0MnBAG2CAsA//8AYQAAArcFtQQGABW3AAABAF//7gS9BJ0AQQAXQAs4OBAifhkKMwALcgArMj8/MzkvMDFFIi4CNTQ2NjclNjY1NCYjIgYVFBYWFwEhAS4CNTQ2NjMyFhYVFAYGBwUOAhUUFhYzMj4CNTMUBgcGBgcGBgIBYZtsOjBZPQEHMydBOzs8JT8mAqD+9v3LOVgzUphoaZhUK0kt/uAhJAwrUz1hl2o30lhLDhgRUNESLlJwQERnVSmzIj4hKj5DKiA+QCf9TwJEOmJoQ018SUp/UDVdTh/GGC4rFClAIzxtlVqCzk4OGww/RgADAAUAAAOeBI0AAwAHAAsAHUANCAkJCwoKBgd9AwIGCgA/MzM/EjkvMzMvMzAxZRUhNRMRIxEBFQU1A579ikvxAfL9kb+/vwPO+3MEjf6hkbuRAAAG/+wAAAYEBI0AAwAHAAsAEAAUABgAM0AYCgsLGBgPBwYUEwYTBhMND30DAgIXFw0KAD8zETMRMz8SOTkvLxEzETMRMxEzETMwMWUVITUBFSE1ARUhNQcBIQEzExUhNQETIwMGBP2EAhL90QJu/YRf/fP++wJtoK79hwKQKu8rvr6+AgC+vgHPvr5y++UEjf03vLwCyftzBI0AAgB2AAAD0QSNAAMAGQAXQAoPEBABfQUEBAAKAD8yLzM/My8zMDFzETMRJzUzMjY2NTQmJiMjNTMyFhYVFAYGI3bxUetOYi8vYk7q6pLQbm7QkgSN+3PkwS5TNDJVNcBiqm5yqV0AAwBO/8cEbgS7ABUAKwAvABtACy8vHBF+LS0nBgtyACsyMnwvGD8zM3wvMDFBFRQOAiMiLgI1NTQ+AjMyHgIHNTQuAiMiDgIVFRQeAjMyPgITASMBBG5Mi8J1dcKOTU2MwnV2wY1M8SZLakRDa0knJ0trQ0RpSibs/I6fA3QCYjiF0pVOTpXShTiF0pZOTpbSvTpbjGAyMmCMWzpajWEzM2GNAuv7DAT0AAAEADQAAATaBI0AAwAHAAsADwAbQAwCA4AODw8LB30KBgoAPzM/MzMvMxrMMjAxQRUhNRMRIxEhESMRBRUhNQPQ/WxE8QPx8QFL+1oCncDAAfD7cwSN+3MEjZanpwAAAgB2/ksEZwSNAAkAGwAfQA8XEA9yCQMGfQgKCgICBQoAPzMRMxEzPzMzKzIwMUERIwERIxEzARERMxUUBgYjIiYnNxYWMzI2NjUEZ/L98vHxAg7yVZ9vIzwiDhM6FSo5HwSN+3MDI/zdBI383QMj+7iDeahWBwrBBgYoTzr//wBQAg4CYQLOBgYAEQAAAAMAFwAABPAFsAAaAB4AIgAjQBECAQEdIiEhHQ4PDx4Cch0IcgArKzIRMxE5LzMRMxEzMDFhITchMjY2NTU0LgIjITUhMh4CFRUUDgIBESMRARUhNQJZ/skCATWHt101Z5Vh/roBRpHwr15esPP+vvsCBf1gx3bcmE92tnxAyGG2/p1Nnf61YQWw+lAFsP2EpqYAAwAXAAAE8AWwABoAHgAiACNAEQIBAR0iISEdDg8PHgJyHQhyACsrMhEzETkvMxEzETMwMWEhNyEyNjY1NTQuAiMhNSEyHgIVFRQOAgERIxEBFSE1Aln+yQIBNYe3XTVnlWH+ugFGkfCvXl6w8/6++wIF/WDHdtyYT3a2fEDIYbb+nU2d/rVhBbD6UAWw/YSmpgAD//UAAAQYBgAAAwAaAB4AGUANHh0WCgdyAwByEQIKcgArMisrMsQyMDFBESMREyc+AzMyHgIVESMRNCYmIyIOAgEVITUBiPDGTgE9b5xfUIFeMfItVj5BY0IhATf9YAYA+gAGAPxFAXC+jU0sYZtv/UkCuU5cKTRadgLnpqYAAAMALQAABLQFsAADAAcACwAVQAoDCgsGBwJyAQhyACsrMi8zMjAxQREjESEVITUBFSE1Auv5AsL7eQOM/WAFsPpQBbDIyP4IpqYAA//r/+wCiwVDAAMAFQAZAB1ADgoRC3IYGRkCAgQEAwZyACsyLzIRMy8zKzIwMUEVITUTMxEUFhYzMjY3FwYGIyImJjUBFSE1Amz9nrDxHTQjGS4OAR5PM1OASAHR/WAEOrCwAQn76DI1EgYDuAkOO4ZvAcGmpgD//wARAAAFPwc3BiYAJQAAAQcARAEbATcAC7YDEAcBAWFWACs0AP//ABEAAAU/BzcGJgAlAAABBwB1AcIBNwALtgMOAwEBYVYAKzQA//8AEQAABT8HNwYmACUAAAEHAJ4AwgE3AAu2AxEHAQFsVgArNAD//wARAAAFPwcqBiYAJQAAAQcApQDFATcAC7YDHAMBAWtWACs0AP//ABEAAAU/BwQGJgAlAAABBwBqAOQBNwANtwQDIwcBAXhWACs0NAD//wARAAAFPweRBiYAJQAAAQcAowFYAWwADbcEAxkHAQFHVgArNDQA//8AEQAABT8HsQYmACUAAAEHAjcBWAEXABK2BQQDGwcBALj/srBWACs0NDT//wBm/jkE6wXEBiYAJwAAAQcAeQHL//oAC7YBKAUAAApWACs0AP//AJQAAARNBz4GJgApAAABBwBEAOUBPgALtgQSBwEBbFYAKzQA//8AlAAABE0HPgYmACkAAAEHAHUBjAE+AAu2BBAHAQFsVgArNAD//wCUAAAETQc+BiYAKQAAAQcAngCNAT4AC7YEEwcBAXdWACs0AP//AJQAAARNBwsGJgApAAABBwBqAK4BPgANtwUEJQcBAYNWACs0NAD////LAAABoAc+BiYALQAAAQcARP+TAT4AC7YBBgMBAWxWACs0AP//AKUAAAJ8Bz4GJgAtAAABBwB1ADoBPgALtgEEAwEBbFYAKzQA////ygAAAn4HPgYmAC0AAAEHAJ7/OgE+AAu2AQcDAQF3VgArNAD///++AAAChwcLBiYALQAAAQcAav9bAT4ADbcCARkDAQGDVgArNDQA//8AlAAABRcHKgYmADIAAAEHAKUA8QE3AAu2ARgGAQFrVgArNAD//wBl/+wFHQc4BiYAMwAAAQcARAEzATgAC7YCLhEBAU9WACs0AP//AGX/7AUdBzgGJgAzAAABBwB1AdoBOAALtgIsEQEBT1YAKzQA//8AZf/sBR0HOAYmADMAAAEHAJ4A2gE4AAu2Ai8RAQFaVgArNAD//wBl/+wFHQcsBiYAMwAAAQcApQDdATkAC7YCOhEBAVlWACs0AP//AGX/7AUdBwUGJgAzAAABBwBqAPwBOAANtwMCQREBAWZWACs0NAD//wCA/+wEvwc3BiYAOQAAAQcARAEPATcAC7YBGAABAWFWACs0AP//AID/7AS/BzcGJgA5AAABBwB1AbYBNwALtgEWCwEBYVYAKzQA//8AgP/sBL8HNwYmADkAAAEHAJ4AtgE3AAu2ARkAAQFsVgArNAD//wCA/+wEvwcEBiYAOQAAAQcAagDXATcADbcCASsAAQF4VgArNDQA//8ACAAABNkHNgYmAD0AAAEHAHUBjAE2AAu2AQkCAQFgVgArNAD//wBW/+wD+QYABiYARQAAAQcARACmAAAAC7YCPQ8BAYxWACs0AP//AFb/7AP5BgAGJgBFAAABBwB1AU0AAAALtgI7DwEBjFYAKzQA//8AVv/sA/kGAAYmAEUAAAEGAJ5NAAALtgI+DwEBl1YAKzQA//8AVv/sA/kF9AYmAEUAAAEGAKVQAQALtgJJDwEBllYAKzQA//8AVv/sA/kFzQYmAEUAAAEGAGpvAAANtwMCUA8BAaNWACs0NAD//wBW/+wD+QZaBiYARQAAAQcAowDjADUADbcDAkYPAQFyVgArNDQA//8AVv/sA/kGegYmAEUAAAEHAjcA4v/gABK2BAMCSA8AALj/3bBWACs0NDT//wBO/jkD8QROBiYARwAAAQcAeQFB//oAC7YBKAkAAApWACs0AP//AFH/7AQKBgAGJgBJAAABBwBEAJsAAAALtgEuCwEBjFYAKzQA//8AUf/sBAoGAAYmAEkAAAEHAHUBQgAAAAu2ASwLAQGMVgArNAD//wBR/+wECgYABiYASQAAAQYAnkIAAAu2AS8LAQGXVgArNAD//wBR/+wECgXNBiYASQAAAQYAamMAAA23AgFBCwEBo1YAKzQ0AP///7QAAAGIBfcGJgCNAAABBwBE/3z/9wALtgEGAwEBnlYAKzQA//8AkAAAAmUF9wYmAI0AAAEGAHUj9wALtgEEAwEBnlYAKzQA////tAAAAmgF9wYmAI0AAAEHAJ7/JP/3AAu2AQcDAQGpVgArNAD///+oAAACcQXEBiYAjQAAAQcAav9F//cADbcCARkDAQG1VgArNDQA//8AegAAA/oF9AYmAFIAAAEGAKVaAQALtgIqAwEBqlYAKzQA//8ATv/sBDwGAAYmAFMAAAEHAEQAsQAAAAu2Ai4GAQGMVgArNAD//wBO/+wEPAYABiYAUwAAAQcAdQFXAAAAC7YCLAYBAYxWACs0AP//AE7/7AQ8BgAGJgBTAAABBgCeWAAAC7YCLwYBAZdWACs0AP//AE7/7AQ8BfQGJgBTAAABBgClWwEAC7YCOgYBAZZWACs0AP//AE7/7AQ8Bc0GJgBTAAABBgBqeQAADbcDAkEGAQGjVgArNDQA//8Ad//sA/kGAAYmAFkAAAEHAEQArAAAAAu2Ah4RAQGgVgArNAD//wB3/+wD+QYABiYAWQAAAQcAdQFSAAAAC7YCHBEBAaBWACs0AP//AHf/7AP5BgAGJgBZAAABBgCeUwAAC7YCHxEBAatWACs0AP//AHf/7AP5Bc0GJgBZAAABBgBqdAAADbcDAjERAQG3VgArNDQA//8ADP5LA94GAAYmAF0AAAEHAHUBGwAAAAu2AhkBAQGgVgArNAD//wAM/ksD3gXNBiYAXQAAAQYAaj0AAA23AwIuAQEBt1YAKzQ0AP//ABEAAAU/BuMGJgAlAAABBwBwAL0BOQALtgMQAwEBplYAKzQA//8AVv/sA/kFrQYmAEUAAAEGAHBIAwALtgI9DwEB0VYAKzQA//8AEQAABT8HHgYmACUAAAEHAKEA8AE3AAu2AxMHAQFTVgArNAD//wBW/+wD+QXnBiYARQAAAQYAoXsAAAu2AkAPAQF+VgArNAAABAAR/lQFPwWwAAQACQANACMAK0AVDQwMAxYdBgACBwMCcg4PDwUFAghyACsyETMRMysyEjk5LzMSOS8zMDFBASEBMwEBJzMBARUhNQEXDgIVFBYzMjY3FwYGIyImNTQ2NgLL/k3++QIkqAFa/kwTqQIm/uP86AOCcy5KKSAnHiwPFxlOPFh7LmgE7vsSBbD6UATuwvpQAhzHx/4eOh49RSgeJxEHiw8dZmI0ZV0AAwBW/lQD+QROABsAOgBQACtAFx46Og9DSg9yJzELcjs8PBkKcgkFDwdyACsyMisyETMrMisyEjkvMzAxZRE0JiYjIgYGFSM0PgIzMhYWFREUFhcVIyYmExcjIg4CFRQWFjMyNjY3Fw4DIyImJjU0PgIzARcOAhUUFjMyNjcXBgYjIiY1NDY2At4qVUA7VjDwPnakZnq9bRUU9xETIwKtQ2ZEIihNN0pvQAJODDpdgVRqpl5Bf7h2ARlzL0kqICcfLA4XGU48WHouaNkCBDpULihEK0B4XjZSpXz+H0p1KxAneQHylRkwRCsrRyg9WShrKV5VNlWRXFaFWi/9qDoePUUoHicRB4sPHWZiNGVdAP//AGb/7ATrB0sGJgAnAAABBwB1AcQBSwALtgEoEAEBbVYAKzQA//8ATv/sA/EGAAYmAEcAAAEHAHUBLgAAAAu2ASgUAQGMVgArNAD//wBm/+wE6wdLBiYAJwAAAQcAngDFAUsAC7YBKxABAXhWACs0AP//AE7/7APxBgAGJgBHAAABBgCeLwAAC7YBKxQBAZdWACs0AP//AGb/7ATrBygGJgAnAAABBwCiAakBUwALtgExEAEBglYAKzQA//8ATv/sA/EF3QYmAEcAAAEHAKIBEwAIAAu2ATEUAQGhVgArNAD//wBm/+wE6wdLBiYAJwAAAQcAnwDbAUsAC7YBLhABAXZWACs0AP//AE7/7APxBgAGJgBHAAABBgCfRQAAC7YBLhQBAZVWACs0AP//AJQAAATSBz4GJgAoAAABBwCfAGEBPgALtgIlHgEBdVYAKzQA//8AUP/sBVgGAgQmAEgAAAEHAcoEBAUCAAu2AzkBAQAAVgArNAD//wCUAAAETQbqBiYAKQAAAQcAcACHAUAAC7YEEgcBAbFWACs0AP//AFH/7AQKBa0GJgBJAAABBgBwPAMAC7YBLgsBAdFWACs0AP//AJQAAARNByUGJgApAAABBwChALoBPgALtgQVBwEBXlYAKzQA//8AUf/sBAoF5wYmAEkAAAEGAKFwAAALtgExCwEBflYAKzQA//8AlAAABE0HGwYmACkAAAEHAKIBcQFGAAu2BBkHAQGBVgArNAD//wBR/+wECgXeBiYASQAAAQcAogEmAAkAC7YBNQsBAaFWACs0AAAFAJT+VARNBbAAAwAHAAsADwAlAClAFAoLCxgfDg8PBwJyEBERAwICBghyACsyETMyETMrMhEzLzM5LzMwMWUVITUTESMRARUhNQEVITUBFw4CFRQWMzI2NxcGBiMiJjU0NjYETfz7R/sDVP1gAwD9AAIdcy9JKiAoHiwOGBlPO1l6LmjHx8cE6fpQBbD9oMTEAmDIyPqKOh49RSgeJxEHiw8dZmI0ZV0AAAIAUf5yBAoETgArAEEAJUATEhMTCzQ7DnIZCwdyLC0kJAALcgArMhE5OSsyKzISOS8zMDFFIi4CNTU0PgIzMh4CFRUhNSE1LgIjIg4CFRUUHgIzMjY3Fw4CNxcOAhUUFjMyNjcXBgYjIiY1NDY2All4wYdISoS0aXSuczn8vAJWAi9gUDxdPiEnTGxFV4gyfyNwoQ9zLkopICceLA8XGU48WHsuaBRPjsBvKH/Ok05OjcJ1Z60TQXJGM2CHVChHeVozRkB7M106azoePkMoHyYQB4oPHWViNGVeAP//AJQAAARNBz4GJgApAAABBwCfAKMBPgALtgQWBwEBdVYAKzQA//8AUf/sBAoGAAYmAEkAAAEGAJ9YAAALtgEyCwEBlVYAKzQA//8Aa//sBPIHSwYmACsAAAEHAJ4AxgFLAAu2AS8QAQF4VgArNAD//wBS/lUEDAYABiYASwAAAQYAnkQAAAu2A0IaAQGXVgArNAD//wBr/+wE8gcyBiYAKwAAAQcAoQD0AUsAC7YBMRABAV9WACs0AP//AFL+VQQMBecGJgBLAAABBgChcQAAC7YDRBoBAX5WACs0AP//AGv/7ATyBygGJgArAAABBwCiAasBUwALtgE1EAEBglYAKzQA//8AUv5VBAwF3QQmAEsAAAEHAKIBKAAIAAu2A0gaAQGhVgArNAD//wBr/fYE8gXEBiYAKwAAAQcBygHm/pIADrQBNQUBAbj/mLBWACs0//8AUv5VBAwGpQQmAEsAAAEHAkQBMAB8AAu2Az8aAQGYVgArNAD//wCUAAAFFwc+BiYALAAAAQcAngDmAT4AC7YDDwsBAXdWACs0AP//AHoAAAP6B18GJgBMAAABBwCeABoBXwALtgIeAwEBJlYAKzQA////tAAAApAHMQYmAC0AAAEHAKX/PQE+AAu2ARIDAQF2VgArNAD///+dAAACeQXrBiYAjQAAAQcApf8m//gAC7YBEgMBAahWACs0AP///9EAAAJ4BuoGJgAtAAABBwBw/zQBQAALtgEGAwEBsVYAKzQA////uwAAAmIFpAYmAI0AAAEHAHD/Hv/6AAu2AQYDAQHjVgArNAD////dAAACZwclBiYALQAAAQcAof9oAT4AC7YBCQMBAV5WACs0AP///8YAAAJQBd4GJgCNAAABBwCh/1H/9wALtgEJAwEBkFYAKzQA//8AGP5aAaAFsAYmAC0AAAEGAKTvBgALtgEFAgAAAFYAKzQA//////5UAZAF1gYmAE0AAAEGAKTWAAALtgIRAgAAAFYAKzQA//8AnwAAAaQHGwYmAC0AAAEHAKIAHgFGAAu2AQ0DAQGBVgArNAD//wCl/+wGKQWwBCYALQAAAAcALgJEAAD//wB8/ksDkQXWBCYATQAAAAcATgIKAAD//wAv/+wEswc1BiYALgAAAQcAngFvATUAC7YBFwEBAWpWACs0AP///67+SwJqBd4GJgCcAAABBwCe/yb/3gALtgEVAAEBglYAKzQA//8AlP5JBRYFsAQmAC8AAAEHAcoBnP7lAA60AxcCAQC4/+ewVgArNP//AH3+NAQ3BgAGJgBPAAABBwHKATL+0AAOtAMXAgEBuP/UsFYAKzT//wCUAAAEJAczBiYAMAAAAQcAdQAsATMAC7YCCAcBAVxWACs0AP//AIwAAAJfB5AGJgBQAAABBwB1AB0BkAALtgEEAwEBcVYAKzQA//8AlP4GBCQFsAQmADAAAAEHAcoBb/6iAA60AhECAQG4/5ewVgArNP//AFn+BgF+BgAEJgBQAAABBwHKABL+ogAOtAENAgEBuP+XsFYAKzT//wCUAAAEJAWxBiYAMAAAAQcBygILBLEAC7YCEQcAAAFWACs0AP//AIwAAALgBgIEJgBQAAABBwHKAYwFAgALtgENAwAAAlYAKzQA//8AlAAABCQFsAYmADAAAAAHAKIBzf3Q//8AjAAAAusGAAQmAFAAAAAHAKIBZf2t//8AlAAABRcHNwYmADIAAAEHAHUB7gE3AAu2AQoGAQFhVgArNAD//wB6AAAD+gYABiYAUgAAAQcAdQFXAAAAC7YCHAMBAaBWACs0AP//AJT+AgUXBbAEJgAyAAABBwHKAeD+ngAOtAETBQEBuP+XsFYAKzT//wB6/gYD+gROBCYAUgAAAQcBygFG/qIADrQCJQIBAbj/l7BWACs0//8AlAAABRcHNwYmADIAAAEHAJ8BBQE3AAu2ARAJAQFqVgArNAD//wB6AAAD+gYABiYAUgAAAQYAn20AAAu2AiIDAQGpVgArNAD///+jAAAD+gYDBiYAUgAAAQcByv9cBQMAC7YCIAMBATpWACs0AP//AGX/7AUdBuUGJgAzAAABBwBwANUBOwALtgIuEQEBlFYAKzQA//8ATv/sBDwFrQYmAFMAAAEGAHBSAwALtgIuBgEB0VYAKzQA//8AZf/sBR0HHwYmADMAAAEHAKEBCAE4AAu2AjERAQFBVgArNAD//wBO/+wEPAXnBiYAUwAAAQcAoQCGAAAAC7YCMQYBAX5WACs0AP//AGX/7AUdBzcGJgAzAAABBwCmAWABOAANtwMCLBEBAUVWACs0NAD//wBO/+wEPAX/BiYAUwAAAQcApgDdAAAADbcDAiwGAQGCVgArNDQA//8AlAAABN8HNwYmADYAAAEHAHUBcwE3AAu2Ah4AAQFhVgArNAD//wB9AAAC9AYABiYAVgAAAQcAdQCyAAAAC7YCFwMBAaBWACs0AP//AJT+BgTfBbAEJgA2AAABBwHKAXH+ogAOtAInGAEBuP+XsFYAKzT//wBS/gcCuQROBCYAVgAAAQcBygAL/qMADrQCIAIBAbj/mLBWACs0//8AlAAABN8HNwYmADYAAAEHAJ8AigE3AAu2AiQAAQFqVgArNAD//wA2AAAC/QYABiYAVgAAAQYAn8gAAAu2Ah0DAQGpVgArNAD//wBL/+wEjgc4BiYANwAAAQcAdQGVATgAC7YBOg8BAU9WACs0AP//AEn/7APHBgAGJgBXAAABBwB1ATYAAAALtgE2DgEBjFYAKzQA//8AS//sBI4HOAYmADcAAAEHAJ4AlgE4AAu2AT0PAQFaVgArNAD//wBJ/+wDxwYABiYAVwAAAQYAnjcAAAu2ATkOAQGXVgArNAD//wBL/j4EjgXEBiYANwAAAQcAeQGg//8AC7YBOisAABNWACs0AP//AEn+NQPHBE4GJgBXAAABBwB5AT7/9gALtgE2KQAAClYAKzQA//8AS/37BI4FxAYmADcAAAEHAcoBjv6XAA60AUMrAQG4/6CwVgArNP//AEn98gPHBE4GJgBXAAABBwHKASv+jgAOtAE/KQEBuP+XsFYAKzT//wBL/+wEjgc4BiYANwAAAQcAnwCsATgAC7YBQA8BAVhWACs0AP//AEn/7APHBgAGJgBXAAABBgCfTQAAC7YBPA4BAZVWACs0AP//AC3+AAS0BbAGJgA4AAABBwHKAXz+nAAOtAIRAgEBuP+NsFYAKzT//wAK/fwCdQVDBiYAWAAAAQcBygDG/pgADrQCHxEBAbj/obBWACs0//8ALf5DBLQFsAYmADgAAAEHAHkBjgAEAAu2AggCAQAAVgArNAD//wAK/j8CowVDBiYAWAAAAQcAeQDZAAAAC7YCFhEAABRWACs0AP//AC0AAAS0BzYGJgA4AAABBwCfAJwBNgALtgIOAwEBaVYAKzQA//8ACv/sAyIGfgQmAFgAAAEHAcoBzgV+AA60AhoEAQC4/6iwVgArNP//AID/7AS/ByoGJgA5AAABBwClALkBNwALtgEkCwEBa1YAKzQA//8Ad//sA/kF9AYmAFkAAAEGAKVVAQALtgIqEQEBqlYAKzQA//8AgP/sBL8G4wYmADkAAAEHAHAAsAE5AAu2ARgLAQGmVgArNAD//wB3/+wD+QWtBiYAWQAAAQYAcE0DAAu2Ah4RAQHlVgArNAD//wCA/+wEvwceBiYAOQAAAQcAoQDkATcAC7YBGwABAVNWACs0AP//AHf/7AP5BecGJgBZAAABBwChAIAAAAALtgIhEQEBklYAKzQA//8AgP/sBL8HkQYmADkAAAEHAKMBTAFsAA23AgEhAAEBR1YAKzQ0AP//AHf/7AP5BloGJgBZAAABBwCjAOgANQANtwMCJxEBAYZWACs0NAD//wCA/+wEvwc2BiYAOQAAAQcApgE7ATcADbcCARYAAQFXVgArNDQA//8Ad//sBDAF/wYmAFkAAAEHAKYA2AAAAA23AwIcEQEBllYAKzQ0AAACAID+jAS/BbAAFQArABtADR4lAQsCchcWEREGCXIAKzISOTkrMi8zMDFBMxEUBgYjIiYmNREzERQWFjMyNjY1AxcOAhUUFjMyNjcXBgYjIiY1NDY2A8X6kPeYnfaN+kiEWlqDSGNzLkkqICceLA8XGU48WHsuaAWw/DOm4HFx4KYDzfwzaYdAQIdp/o86Hj5EKB4nEQeLDx1lYjVlXQAAAwB3/lQD+QQ6AAQAGwAxACFAESQrD3IBEQZyHB0dBAQYCwtyACsyMhEzETMrMisyMDFlETMRIxM3FA4CIyIuAjURMxEUHgIzMjY2ExcOAhUUFjMyNjcXBgYjIiY1NDY2Awfy5BRRMGScbU+EXzTxHDBAJGd3M0dzL0kqICgeLA4YGU87WXouaP8DO/vGAeACbbeHSy5gmmsCu/1DO08wFFGK/rA6Hj1FKB4nEQeLDx1mYjRlXf//AC8AAAbmBzcGJgA7AAABBwCeAakBNwALtgQZFQEBbFYAKzQA//8AIwAABcgGAAYmAFsAAAEHAJ4BDAAAAAu2BBkVAQGrVgArNAD//wAIAAAE2Qc2BiYAPQAAAQcAngCMATYAC7YBDAIBAWtWACs0AP//AAz+SwPeBgAGJgBdAAABBgCeHAAAC7YCHAEBAatWACs0AP//AAgAAATZBwMGJgA9AAABBwBqAK0BNgANtwIBHgIBAXdWACs0NAD//wBQAAAEjgc3BiYAPgAAAQcAdQGHATcAC7YDDg0BAWFWACs0AP//AFEAAAPBBgAGJgBeAAABBwB1AR8AAAALtgMODQEBoFYAKzQA//8AUAAABI4HFAYmAD4AAAEHAKIBbAE/AAu2AxcIAQF2VgArNAD//wBRAAADwQXdBiYAXgAAAQcAogEEAAgAC7YDFwgBAbVWACs0AP//AFAAAASOBzcGJgA+AAABBwCfAJ4BNwALtgMUCAEBalYAKzQA//8AUQAAA8EGAAYmAF4AAAEGAJ82AAALtgMUCAEBqVYAKzQA/////AAAB04HQgYmAIEAAAEHAHUCwQFCAAu2BhkDAQFsVgArNAD//wBI/+sGhgYBBiYAhgAAAQcAdQJ1AAEAC7YDXw8BAY1WACs0AP//AGn/ogUiB4AGJgCDAAABBwB1AeMBgAALtgM0FgEBllYAKzQA//8ATv91BDwF/QYmAIkAAAEHAHUBMv/9AAu2AzAKAQGLVgArNAD///+lAAAEKwSNBiYCQAAAAAcCNv8Y/2v///+lAAAEKwSNBiYCQAAAAAcCNv8Y/2v//wAlAAAEGQSNBiYB6AAAAAYCNjO6//8ACAAABJEGHgYmAkMAAAEHAEQAwAAeAAu2AxAHAQFrVgArNAD//wAIAAAEkQYeBiYCQwAAAQcAdQFnAB4AC7YDDgMBAWtWACs0AP//AAgAAASRBh4GJgJDAAABBgCeZx4AC7YDEwMBAWtWACs0AP//AAgAAASRBhIGJgJDAAABBgClah8AC7YDGwMBAWtWACs0AP//AAgAAASRBesGJgJDAAABBwBqAIgAHgANtwQDFwMBAWtWACs0NAD//wAIAAAEkQZ4BiYCQwAAAQcAowD9AFMADbcEAxkDAQFRVgArNDQA//8ACAAABJEGmAYmAkMAAAAHAjcA/P/+//8AT/4+BEMEnQYmAkEAAAAHAHkBbf////8AdgAAA7YGHgYmAjgAAAEHAEQAkwAeAAu2BBIHAQFsVgArNAD//wB2AAADtgYeBiYCOAAAAQcAdQE6AB4AC7YEEAcBAWxWACs0AP//AHYAAAO2Bh4GJgI4AAABBgCeOx4AC7YEFgcBAWxWACs0AP//AHYAAAO2BesGJgI4AAABBgBqXB4ADbcFBBkHAQGEVgArNDQA////qAAAAXwGHgYmAfMAAAEHAET/cAAeAAu2AQYDAQFrVgArNAD//wCGAAACWQYeBiYB8wAAAQYAdRceAAu2AQQDAQFrVgArNAD///+nAAACWwYeBiYB8wAAAQcAnv8XAB4AC7YBCQMBAXZWACs0AP///5wAAAJlBesGJgHzAAABBwBq/zkAHgANtwIBDQMBAYRWACs0NAD//wB2AAAEZwYSBiYB7gAAAQcApQCLAB8AC7YBGAYBAXZWACs0AP//AE7/8ARuBh4GJgHtAAABBwBEAM4AHgALtgIuEQEBW1YAKzQA//8ATv/wBG4GHgYmAe0AAAEHAHUBdQAeAAu2AiwRAQFbVgArNAD//wBO//AEbgYeBiYB7QAAAQYAnnUeAAu2AjERAQFbVgArNAD//wBO//AEbgYSBiYB7QAAAQYApXgfAAu2AjERAQFvVgArNAD//wBO//AEbgXrBiYB7QAAAQcAagCXAB4ADbcDAjURAQF0VgArNDQA//8Aaf/wBCAGHgYmAecAAAEHAEQAswAeAAu2ARgLAQFrVgArNAD//wBp//AEIAYeBiYB5wAAAQcAdQFaAB4AC7YBFgsBAWtWACs0AP//AGn/8AQgBh4GJgHnAAABBgCeWx4AC7YBGwsBAWtWACs0AP//AGn/8AQgBesGJgHnAAABBgBqfB4ADbcCAR8LAQGEVgArNDQA//8ABgAABDgGHgYmAeMAAAEHAHUBMQAeAAu2Aw4JAQFrVgArNAD//wAIAAAEkQXLBiYCQwAAAQYAcGEhAAu2AxADAQGwVgArNAD//wAIAAAEkQYFBiYCQwAAAQcAoQCVAB4AC7YDEwMBAV1WACs0AAAEAAj+VASRBI0ABAAJAA0AIwAhQA8NDAwDFh0IA30PDgUFARIAPzMRMzM/My8zEjkvMzAxQQEjATMBASczAQEVITUBFw4CFRQWMzI2NxcGBiMiJjU0NjYCWv6i9AHVogEe/qAlpQHU/v39ZgL1cy5KKSAnHiwPFxlOPFh7LmgDnvxiBI37cwOg7ftzAbC1tf6KOh49RSgeJxEHiw8dZmI0ZV0A//8AT//wBEMGHgYmAkEAAAEHAHUBZwAeAAu2ASgQAQFbVgArNAD//wBP//AEQwYeBiYCQQAAAQYAnmgeAAu2AS0QAQFbVgArNAD//wBP//AEQwX7BiYCQQAAAQcAogFMACYAC7YBMRABAXBWACs0AP//AE//8ARDBh4GJgJBAAABBgCffh4AC7YBLhABAWRWACs0AP//AGEAAAQrBh4GJgJAAAABBgCf8x4AC7YCJB0BAXRWACs0AP//AHYAAAO2BcsGJgI4AAABBgBwNSEAC7YEEgcBAbBWACs0AP//AHYAAAO2BgUGJgI4AAABBgChaB4AC7YEFQcBAV5WACs0AP//AHYAAAO2BfsGJgI4AAABBwCiAR8AJgALtgQZBwEBgFYAKzQAAAUAdv5UA7YEjQADAAcACwAPACUAI0AQGB8LCgoGDw4HfREQEAUGEgA/MzMRMz8zMxI5LzMvMzAxZRUhNRMRIxEBFSE1ARUhNQEXDgIVFBYzMjY3FwYGIyImNTQ2NgO2/WVM8QLq/bsCmf1nAcVzL0kqICgeLA4YGU87WXouaL+/vwPO+3MEjf4tv78B08DA+606Hj1FKB4nEQeLDx1mYjRlXQD//wB2AAADtgYeBiYCOAAAAQYAn1EeAAu2BBYHAQF0VgArNAD//wBW//AESwYeBiYB9QAAAQYAnm8eAAu2ATAQAQFmVgArNAD//wBW//AESwYFBiYB9QAAAQcAoQCdAB4AC7YBMBABAU1WACs0AP//AFb/8ARLBfsGJgH1AAABBwCiAVMAJgALtgE0EAEBcFYAKzQA//8AVv37BEsEnQYmAfUAAAEHAcoBc/6XAA60ATQFAQG4/5mwVgArNP//AHYAAARnBh4GJgH0AAABBgCefR4AC7YDEQcBAXZWACs0AP///5EAAAJtBhIGJgHzAAABBwCl/xoAHwALtgEJAwEBf1YAKzQA////rwAAAlYFywYmAfMAAAEHAHD/EgAhAAu2AQYDAQGwVgArNAD///+6AAACRAYFBiYB8wAAAQcAof9FAB4AC7YBCQMBAV1WACs0AP//ABf+VAGNBI0GJgHzAAAABgCk7gD//wB9AAABggX7BiYB8wAAAQYAovwmAAu2AQ0DAQGAVgArNAD//wAm//AEPgYeBiYB8gAAAQcAngD6AB4AC7YBGQEBAXZWACs0AP//AHb+AwRnBI0GJgHxAAAABwHKART+n///AHYAAAOSBh4GJgHwAAABBgB1DR4AC7YCCAcBAWtWACs0AP//AHb+BAOSBI0GJgHwAAABBwHKARL+oAAOtAIRBgEBuP+VsFYAKzT//wB2AAADkgSQBiYB8AAAAAcBygGSA5D//wB2AAADkgSNBiYB8AAAAAcAogF1/UH//wB2AAAEZwYeBiYB7gAAAQcAdQGIAB4AC7YBCgYBAWtWACs0AP//AHb9/QRnBI0GJgHuAAAABwHKAXz+mf//AHYAAARnBh4GJgHuAAABBwCfAJ8AHgALtgEQBgEBdFYAKzQA//8ATv/wBG4FywYmAe0AAAEGAHBwIQALtgIuEQEBoFYAKzQA//8ATv/wBG4GBQYmAe0AAAEHAKEAowAeAAu2AjERAQFNVgArNAD//wBO//AEbgYdBiYB7QAAAQcApgD7AB4ADbcDAjARAQFRVgArNDQA//8AdQAABDsGHgYmAeoAAAEHAHUBGgAeAAu2Ah8AAQFrVgArNAD//wB1/gQEOwSNBiYB6gAAAAcBygEb/qD//wB1AAAEOwYeBiYB6gAAAQYAnzAeAAu2AiUAAQF0VgArNAD//wA///AD8AYeBiYB6QAAAQcAdQFHAB4AC7YBOg8BAVtWACs0AP//AD//8APwBh4GJgHpAAABBgCeRx4AC7YBPw8BAWZWACs0AP//AD/+PwPwBJ0GJgHpAAAABwB5AVIAAP//AD//8APwBh4GJgHpAAABBgCfXR4AC7YBQA8BAWZWACs0AP//ACX+AwQZBI0GJgHoAAABBwHKASn+nwAOtAIRAgEBuP+QsFYAKzT//wAlAAAEGQYeBiYB6AAAAQYAn0oeAAu2Ag4HAQF0VgArNAD//wAl/kYEGQSNBiYB6AAAAAcAeQE8AAf//wBp//AEIAYSBiYB5wAAAQYApV0fAAu2ARsLAQF/VgArNAD//wBp//AEIAXLBiYB5wAAAQYAcFUhAAu2ARgLAQGwVgArNAD//wBp//AEIAYFBiYB5wAAAQcAoQCIAB4AC7YBGwsBAV1WACs0AP//AGn/8AQgBngGJgHnAAABBwCjAPAAUwANtwIBIQsBAVFWACs0NAD//wBp//AEOAYdBiYB5wAAAQcApgDgAB4ADbcCARoLAQFhVgArNDQAAAIAaf6EBCAEjQAVACsAGkAMHiUXFhYRBgtyDAB9AD8yKzIyETMvMzAxQTMRFAYGIyImJjURMxEUFhYzMjY2NQMXDgIVFBYzMjY3FwYGIyImNTQ2NgMu8nzWiYvXevA5aklJaDhTcy9JKiAnHywOFxlOPFh6LmgEjf0AhrleXrmGAwD9AE1jLi5jTf7dOh49RSgeJxEHiw8dZmI0ZV3//wAnAAAF5QYeBiYB5QAAAQcAngEaAB4AC7YEGwoBAXZWACs0AP//AAYAAAQ4Bh4GJgHjAAABBgCeMR4AC7YDEwkBAXZWACs0AP//AAYAAAQ4BesGJgHjAAABBgBqUh4ADbcEAxcJAQGEVgArNDQA//8AQQAAA/UGHgYmAeIAAAEHAHUBNAAeAAu2Aw4NAQFrVgArNAD//wBBAAAD9QX7BiYB4gAAAQcAogEZACYAC7YDFw0BAYBWACs0AP//AEEAAAP1Bh4GJgHiAAABBgCfSx4AC7YDFA0BAXRWACs0AP//ABEAAAU/Bj8GJgAlAAABBgCurf8ADrQDDgMAALj/PrBWACs0////QgAABLEGQQQmAClkAAEHAK7+dQABAA60BBAHAAC4/z+wVgArNP///0sAAAV7BkAEJgAsZAAABwCu/n4AAP///04AAAIEBkIEJgAtZAABBwCu/oEAAgAOtAEEAwAAuP9BsFYAKzT///+1/+wFMQY/BCYAMxQAAQcArv7o//8ADrQCLBEAALj/KrBWACs0////QQAABT0GPwQmAD1kAAEHAK7+dP//AAu2AQoIAACOVgArNAD////CAAAE7wY/BCYAuhQAAQcArv71//8ADrQDNh0AALj/KrBWACs0////hf/0As4GmwYmAMMAAAEHAK//F//rABBACQMCASsAAQGiVgArNDQ0//8AEQAABT8FsAYGACUAAP//AJQAAASlBbAGBgAmAAD//wCUAAAETQWwBgYAKQAA//8AUAAABI4FsAYGAD4AAP//AJQAAAUXBbAGBgAsAAD//wClAAABoAWwBgYALQAA//8AlAAABRYFsAYGAC8AAP//AJQAAAZqBbAGBgAxAAD//wCUAAAFFwWwBgYAMgAA//8AZf/sBR0FxAYGADMAAP//AJQAAATPBbAGBgA0AAD//wAtAAAEtAWwBgYAOAAA//8ACAAABNkFsAYGAD0AAP//ACYAAATpBbAGBgA8AAD///++AAAChwcLBiYALQAAAQcAav9bAT4ADbcCARkDAQGDVgArNDQA//8ACAAABNkHAwYmAD0AAAEHAGoArQE2AA23AgEeAgEBd1YAKzQ0AP//AFb/6wR7BjwGJgC7AAABBwCuAUn//AALtgNCBgEBmlYAKzQA//8AYv/sBBIGOwYmAL8AAAEHAK4BFf/7AAu2AkArAQGaVgArNAD//wB9/mEEBgY8BiYAwQAAAQcArgEd//wAC7YCHQMBAa5WACs0AP//AKP/9AJeBiYGJgDDAAABBgCuAeYAC7YBEgABAZlWACs0AP//AH//6wQEBqMGJgDLAAABBgCvHPMAEEAJAwIBOA8BAaJWACs0NDT//wCNAAAEbQQ6BgYAjgAA//8ATv/sBDwETgYGAFMAAP//AJP+YAQkBDoGBgB2AAD//wAWAAAD3wQ6BgYAWgAA//8ANP5NBFsESgYGAoAAAP///8P/9AKMBbgGJgDDAAABBwBq/2D/6wANtwIBJwABAaJWACs0NAD//wB//+sEBAXABiYAywAAAQYAamXzAA23AgE0DwEBolYAKzQ0AP//AE7/7AQ8BjwGJgBTAAABBwCuARv//AALtgIsBgEBmlYAKzQA//8Af//rBAQGLgYmAMsAAAEHAK4BBv/uAAu2AR8PAQGZVgArNAD//wBl/+sGMAYsBiYAzgAAAQcArgIn/+wAC7YCQB8BAZZWACs0AP//AJQAAARNBwsGJgApAAABBwBqAK4BPgANtwUEJQcBAYNWACs0NAD//wCZAAAENwc+BiYAsQAAAQcAdQGEAT4AC7YBBgUBAWxWACs0AAABAEv/7ASOBcQAOQAbQA0KJg82MSsJchgUDwNyACvMMyvMMxI5OTAxQTQuAicuAzU0PgIzMhYWFSM0JiYjIgYGFRQeAhceAxUUDgIjIi4CNTMUHgIzMjY2A5IbRHtfaK+CSEuLvnOi63/5PXteWXY6Jk52UHm0eDxKib91acumYvsxWHVDWHc8AXctRjo3HSBPaYlaWZJrO3jKekhvQDZcOilDOTIXJFdui1hck2c3OHOtdEdkPx4yWv//AKUAAAGgBbAGBgAtAAD///++AAAChwcLBiYALQAAAQcAav9bAT4ADbcCARkDAQGDVgArNDQA//8AL//sA+UFsAYGAC4AAP//AJkAAAUsBbAGBgI8AAD//wCUAAAFFgczBiYALwAAAQcAdQFxATMAC7YDDgMBAVtWACs0AP//ADL/6wThByUGJgDeAAABBwChANkBPgALtgIeAQEBXlYAKzQA//8AEQAABT8FsAYGACUAAP//AJQAAASlBbAGBgAmAAD//wCZAAAENwWwBgYAsQAA//8AlAAABE0FsAYGACkAAP//AJIAAAUNByUGJgDcAAABBwChARkBPgALtgEPAQEBXlYAKzQA//8AlAAABmoFsAYGADEAAP//AJQAAAUXBbAGBgAsAAD//wBl/+wFHQXEBgYAMwAA//8AmQAABRQFsAYGALYAAP//AJQAAATPBbAGBgA0AAD//wBm/+wE6wXEBgYAJwAA//8ALQAABLQFsAYGADgAAP//ACYAAATpBbAGBgA8AAD//wBW/+wD+QROBgYARQAA//8AUf/sBAoETgYGAEkAAP//AIQAAAQPBdoGJgDwAAABBwChAJL/8wALtgEPAQEBfVYAKzQA//8ATv/sBDwETgYGAFMAAP//AH3+YAQvBE4GBgBUAAAAAQBO/+wD8QROACcAE0AJAAkdFAdyCQtyACsrMhEzMDFlMjY2NzMOAiMiLgI1NTQ+AjMyFhYXIy4CIyIOAhUVFB4CAjY7XzsD4wJ4xnh8uHo9PXq4e4LEcQLjAzVfQklgNhcWN2CsL1Q3aaxlVZbEcCNwxZZVZ7d5PGE6O2V9QyNDfmM7AP//AAz+SwPeBDoGBgBdAAD//wAfAAAD6gQ6BgYAXAAA//8AUf/sBAoFzQYmAEkAAAEGAGpjAAANtwIBQQsBAaNWACs0NAD//wCDAAADTAXzBiYA7AAAAQcAdQDE//MAC7YBBgUBAYtWACs0AP//AEn/7APHBE4GBgBXAAD//wB8AAABkAXWBgYATQAA////qAAAAnEFxAYmAI0AAAEHAGr/Rf/3AA23AgEZAwEBtVYAKzQ0AP///6v+SwGHBdYGBgBOAAD//wCPAAAEZQXyBiYA8QAAAQcAdQFL//IAC7YDDgMBAYpWACs0AP//AAz+SwPeBecGJgBdAAABBgChSQAAC7YCHgEBAZJWACs0AP//AC8AAAbmBzcGJgA7AAABBwBEAgIBNwALtgQYFQEBYVYAKzQA//8AIwAABcgGAAYmAFsAAAEHAEQBZQAAAAu2BBgVAQGgVgArNAD//wAvAAAG5gc3BiYAOwAAAQcAdQKpATcAC7YEFgEBAWFWACs0AP//ACMAAAXIBgAGJgBbAAABBwB1AgwAAAALtgQWAQEBoFYAKzQA//8ALwAABuYHBAYmADsAAAEHAGoBygE3AA23BQQrFQEBeFYAKzQ0AP//ACMAAAXIBc0GJgBbAAABBwBqAS0AAAANtwUEKxUBAbdWACs0NAD//wAIAAAE2Qc2BiYAPQAAAQcARADlATYAC7YBCwIBAWBWACs0AP//AAz+SwPeBgAGJgBdAAABBgBEdQAAC7YCGwEBAaBWACs0AP//AFID/gEJBgAGBgALAAD//wBgA/gCOgYABgYABgAA//8AjP/yA74FsAQmAAUAAAAHAAUCHgAA////qv5LAnEF3gYmAJwAAAEHAJ//PP/eAAu2ARgAAQGAVgArNAD//wA3BAUBYQYABgYBhQAA//8AlAAABmoHNwYmADEAAAEHAHUCkwE3AAu2AxEAAQFhVgArNAD//wB8AAAGfAYABiYAUQAAAQcAdQKkAAAAC7YDMwMBAaBWACs0AP//ABH+cgU/BbAGJgAlAAABBwCnAXQABAAQtQQDEQUBAbj/tbBWACs0NP//AFb+dwP5BE4GJgBFAAABBwCnAKcACQAQtQMCPjEBAbj/ybBWACs0NP//AJQAAARNBz4GJgApAAABBwBEAOUBPgALtgQSBwEBbFYAKzQA//8AkgAABQ0HPgYmANwAAAEHAEQBRAE+AAu2AQwBAQFsVgArNAD//wBR/+wECgYABiYASQAAAQcARACbAAAAC7YBLgsBAYxWACs0AP//AIQAAAQPBfMGJgDwAAABBwBEAL3/8wALtgEMAQEBi1YAKzQA//8ARgAABWQFsAYGALkAAP//AFL+JQV/BDoGBgDNAAD//wAQAAAE9Qb9BiYBGQAAAQcArAROAQ8ADbcDAhUTAQEtVgArNDQA////8gAABBoF0AYmARoAAAEHAKwD6v/iAA23AwIZFwEBe1YAKzQ0AP//AE7+SwhoBE4EJgBTAAAABwBdBIoAAP//AGX+SwlhBcQEJgAzAAAABwBdBYMAAP//AEn+NwSCBcQGJgDbAAABBwJhAZD/nQALtgJCKgAAZFYAKzQA//8ATv44A8cETQYmAO8AAAEHAmEBNP+eAAu2Aj8pAABlVgArNAD//wBm/joE6wXEBiYAJwAAAQcCYQHR/6AAC7YBKwUAAGRWACs0AP//AE7+OgPxBE4GJgBHAAABBwJhAUj/oAALtgErCQAAZFYAKzQA//8ACAAABNkFsAYGAD0AAP//AB7+XwP1BDoGBgC9AAD//wClAAABoAWwBgYALQAA//8AFQAAB6IHJQYmANoAAAEHAKECHgE+AAu2BR0NAQFeVgArNAD//wAgAAAGawXaBiYA7gAAAQcAoQGO//MAC7YFHQ0BAX1WACs0AP//AKUAAAGgBbAGBgAtAAD//wARAAAFPwceBiYAJQAAAQcAoQDwATcAC7YDEwcBAVNWACs0AP//AFb/7AP5BecGJgBFAAABBgChewAAC7YCQA8BAX5WACs0AP//ABEAAAU/BwQGJgAlAAABBwBqAOQBNwANtwQDIwcBAXhWACs0NAD//wBW/+wD+QXNBiYARQAAAQYAam8AAA23AwJQDwEBo1YAKzQ0AP////wAAAdOBbAGBgCBAAD//wBI/+sGhgRPBgYAhgAA//8AlAAABE0HJQYmACkAAAEHAKEAugE+AAu2BBUHAQFeVgArNAD//wBR/+wECgXnBiYASQAAAQYAoXAAAAu2ATELAQF+VgArNAD//wBV/+sFIwbcBiYBWAAAAQcAagDCAQ8ADbcCAUIAAQFBVgArNDQA//8AV//sA/YEUAYGAJ0AAP//AFf/7AP2Bc4GJgCdAAABBgBqYgEADbcCAUAAAQGiVgArNDQA//8AFQAAB6IHCwYmANoAAAEHAGoCEQE+AA23BgUtDQEBg1YAKzQ0AP//ACAAAAZrBcAGJgDuAAABBwBqAYH/8wANtwYFLQ0BAaJWACs0NAD//wBJ/+wEggcYBiYA2wAAAQcAagCfAUsADbcDAlQVAQGEVgArNDQA//8ATv/sA8cFzAYmAO8AAAEGAGpI/wANtwMCURQBAaNWACs0NAD//wCSAAAFDQbqBiYA3AAAAQcAcADmAUAAC7YBDAgBAbFWACs0AP//AIQAAAQPBaAGJgDwAAABBgBwXvYAC7YBDAgBAdBWACs0AP//AJIAAAUNBwsGJgDcAAABBwBqAQwBPgANtwIBHwEBAYNWACs0NAD//wCEAAAEDwXABiYA8AAAAQcAagCF//MADbcCAR8BAQGiVgArNDQA//8AZf/sBR0HBQYmADMAAAEHAGoA/AE4AA23AwJBEQEBZlYAKzQ0AP//AE7/7AQ8Bc0GJgBTAAABBgBqeQAADbcDAkEGAQGjVgArNDQA//8AYP/sBRkFxAYGARcAAP//AE3/7AQ7BE4GBgEYAAD//wBg/+wFGQcHBiYBFwAAAQcAagEMAToADbcEA08AAQFqVgArNDQA//8ATf/sBDsFzgYmARgAAAEGAGptAQANtwQDQQABAaVWACs0NAD//wBj/+wE6AcZBiYA5wAAAQcAagDZAUwADbcDAkIeAQGFVgArNDQA//8AUP/rA+gFzQYmAP8AAAEGAGpQAAANtwMCQQkBAaNWACs0NAD//wAy/+sE4QbqBiYA3gAAAQcAcACmAUAAC7YCGxgBAbFWACs0AP//AAz+SwPeBa0GJgBdAAABBgBwFgMAC7YCGxgBAeVWACs0AP//ADL/6wThBwsGJgDeAAABBwBqAM0BPgANtwMCLgEBAYNWACs0NAD//wAM/ksD3gXNBiYAXQAAAQYAaj0AAA23AwIuAQEBt1YAKzQ0AP//ADL/6wThBz0GJgDeAAABBwCmATEBPgANtwMCGQEBAWJWACs0NAD//wAM/ksD+QX/BiYAXQAAAQcApgChAAAADbcDAhkBAQGWVgArNDQA//8AkQAABO0HCwYmAOEAAAEHAGoBDgE+AA23AwIvFgEBg1YAKzQ0AP//AGAAAAPhBcAGJgD5AAABBgBqYvMADbcDAi0DAQGiVgArNDQA//8AmQAABlQHCwYmAOUAAAEHAGoBugE+AA23AwIyHAEBg1YAKzQ0AP//AI8AAAXPBcAGJgD9AAABBwBqAXT/8wANtwMCMhwBAaJWACs0NAD//wBQ/+wEAgYABgYASAAA//8AEf6aBT8FsAYmACUAAAEHAK0FCgADAA60AxEFAQG4/3WwVgArNP//AFb+nwP5BE4GJgBFAAABBwCtBD0ACAAOtAI+MQEBuP+JsFYAKzT//wARAAAFPwe6BiYAJQAAAQcAqwUDAT0AC7YDDwcBAXFWACs0AP//AFb/7AP5BoQGJgBFAAABBwCrBI0ABwALtgI8DwEBnFYAKzQA//8AEQAABT8HqwYmACUAAAEHAkcAwgEhAA23BAMSBwEBYVYAKzQ0AP//AFb/7ATIBnQGJgBFAAABBgJHTeoADbcDAkEPAQGMVgArNDQA//8AEQAABT8HqQYmACUAAAEHAkgAwwEqAA23BAMQBwEBXFYAKzQ0AP///5//7AP5BnIGJgBFAAABBgJITvMADbcDAj0PAQGHVgArNDQA//8AEQAABT8H3QYmACUAAAEHAkkAwgEVAA23BAMTAwEBUFYAKzQ0AP//AFb/7ARTBqYGJgBFAAABBgJJTd4ADbcDAkAPAQF7VgArNDQA//8AEQAABT8H1AYmACUAAAEHAkoAxAEHAA23BAMQBwEBOlYAKzQ0AP//AFb/7AP5Bp0GJgBFAAABBgJKT9AADbcDAj0PAQFlVgArNDQA//8AEf6aBT8HNwYmACUAAAAnAJ4AwgE3AQcArQUKAAMAF7QEGgUBAbj/dbdWAxEHAQFsVgArNCs0AP//AFb+nwP5BgAGJgBFAAAAJgCeTQABBwCtBD0ACAAXtANHMQEBuP+Jt1YCPg8BAZdWACs0KzQA//8AEQAABT8HrgYmACUAAAEHAkwA6gEyAA23BAMTBwEBXFYAKzQ0AP//AFb/7AP5BngGJgBFAAABBgJMdfwADbcDAkAPAQGHVgArNDQA//8AEQAABT8HrgYmACUAAAEHAkUA6gEyAA23BAMTBwEBXFYAKzQ0AP//AFb/7AP5BngGJgBFAAABBgJFdfwADbcDAkAPAQGHVgArNDQA//8AEQAABT8IPQYmACUAAAEHAk0A6AE2AA23BAMTBwEBblYAKzQ0AP//AFb/7AP5BwYGJgBFAAABBgJNc/8ADbcDAkAPAQGZVgArNDQA//8AEQAABT8IFgYmACUAAAEHAmAA6wE8AA23BAMTBwEBb1YAKzQ0AP//AFb/7AP5Bt8GJgBFAAABBgJgdgUADbcDAkAPAQGaVgArNDQA//8AEf6aBT8HHgYmACUAAAAnAKEA8AE3AQcArQUKAAMAF7QEIAUBAbj/dbdWAxMHAQFTVgArNCs0AP//AFb+nwP5BecGJgBFAAAAJgChewABBwCtBD0ACAAXtANNMQEBuP+Jt1YCQA8BAX5WACs0KzQA//8AlP6hBE0FsAYmACkAAAEHAK0EywAKAA60BBMCAQG4/3+wVgArNP//AFH+lwQKBE4GJgBJAAABBwCtBI4AAAAOtAEvAAEBuP+JsFYAKzT//wCUAAAETQfBBiYAKQAAAQcAqwTNAUQAC7YEEQcBAXxWACs0AP//AFH/7AQKBoQGJgBJAAABBwCrBIIABwALtgEtCwEBnFYAKzQA//8AlAAABE0HMQYmACkAAAEHAKUAjwE+AAu2BB4HAQF2VgArNAD//wBR/+wECgX0BiYASQAAAQYApUUBAAu2AToLAQGWVgArNAD//wCUAAAFBweyBiYAKQAAAQcCRwCMASgADbcFBBQHAQFsVgArNDQA//8AUf/sBL0GdQYmAEkAAAEGAkdC6wANtwIBMAsBAYxWACs0NAD////eAAAETQewBiYAKQAAAQcCSACNATEADbcFBBIHAQFnVgArNDQA////lP/sBAoGcwYmAEkAAAEGAkhD9AANtwIBLgsBAYdWACs0NAD//wCUAAAEkgfkBiYAKQAAAQcCSQCMARwADbcFBBUHAQFbVgArNDQA//8AUf/sBEgGpwYmAEkAAAEGAklC3wANtwIBMQsBAXtWACs0NAD//wCUAAAETQfbBiYAKQAAAQcCSgCOAQ4ADbcFBBIHAQFFVgArNDQA//8AUf/sBAoGngYmAEkAAAEGAkpD0QANtwIBLgsBAWVWACs0NAD//wCU/qEETQc+BiYAKQAAACcAngCNAT4BBwCtBMsACgAXtAUcAgEBuP9/t1YEEwcBAXdWACs0KzQA//8AUf6XBAoGAAYmAEkAAAAmAJ5CAAEHAK0EjgAAABe0AjgAAQG4/4m3VgEvCwEBl1YAKzQrNAD//wClAAACFQfBBiYALQAAAQcAqwN6AUQAC7YBBQMBAXxWACs0AP//AJAAAAH/BnsGJgCNAAABBwCrA2T//gALtgEFAwEBrlYAKzQA//8Alv6dAakFsAYmAC0AAAEHAK0DeAAGAA60AQcCAQG4/36wVgArNP//AHj+oQGQBdYGJgBNAAABBwCtA1oACgAOtAITAgEBuP9/sFYAKzT//wBl/pcFHQXEBiYAMwAAAQcArQUbAAAADrQCLwYBAbj/ibBWACs0//8ATv6TBDwETgYmAFMAAAEHAK0Emv/8AA60Ai8RAQG4/4iwVgArNP//AGX/7AUdB7wGJgAzAAABBwCrBRsBPwALtgItEQEBX1YAKzQA//8ATv/sBDwGhAYmAFMAAAEHAKsEmAAHAAu2Ai0GAQGcVgArNAD//wBl/+wFVQesBiYAMwAAAQcCRwDaASIADbcDAjARAQFPVgArNDQA//8ATv/sBNIGdAYmAFMAAAEGAkdX6gANtwMCMAYBAYxWACs0NAD//wAs/+wFHQeqBiYAMwAAAQcCSADbASsADbcDAi4RAQFKVgArNDQA////qv/sBDwGcgYmAFMAAAEGAkhZ8wANtwMCLgYBAYdWACs0NAD//wBl/+wFHQfeBiYAMwAAAQcCSQDaARYADbcDAjERAQE+VgArNDQA//8ATv/sBF4GpgYmAFMAAAEGAklY3gANtwMCMQYBAXtWACs0NAD//wBl/+wFHQfVBiYAMwAAAQcCSgDcAQgADbcDAi4RAQEoVgArNDQA//8ATv/sBDwGnQYmAFMAAAEGAkpZ0AANtwMCLgYBAWVWACs0NAD//wBl/pcFHQc4BiYAMwAAACcAngDaATgBBwCtBRsAAAAXtAM4BgEBuP+Jt1YCLxEBAVpWACs0KzQA//8ATv6TBDwGAAYmAFMAAAAmAJ5YAAEHAK0Emv/8ABe0AzgRAQG4/4i3VgIvBgEBl1YAKzQrNAD//wBb/+wFrwc1BiYAmAAAAQcAdQHZATUAC7YDOhwBAUdWACs0AP//AE3/7AS3BgAGJgCZAAABBwB1AVsAAAALtgM2EAEBjFYAKzQA//8AW//sBa8HNQYmAJgAAAEHAEQBMgE1AAu2AzwcAQFHVgArNAD//wBN/+wEtwYABiYAmQAAAQcARAC1AAAAC7YDOBABAYxWACs0AP//AFv/7AWvB7kGJgCYAAABBwCrBRoBPAALtgM7HAEBV1YAKzQA//8ATf/sBLcGhAYmAJkAAAEHAKsEnAAHAAu2AzcQAQGcVgArNAD//wBb/+wFrwcpBiYAmAAAAQcApQDcATYAC7YDSBwBAVFWACs0AP//AE3/7AS3BfQGJgCZAAABBgClXwEAC7YDRBABAZZWACs0AP//AFv+lwWvBisGJgCYAAABBwCtBQUAAAAOtAM9EAEBuP+JsFYAKzT//wBN/o0EtwSoBiYAmQAAAQcArQSZ//YADrQDORsBAbj/f7BWACs0//8AgP6XBL8FsAYmADkAAAEHAK0E8wAAAA60ARkGAQG4/4mwVgArNP//AHf+lwP5BDoGJgBZAAABBwCtBD4AAAAOtAIfCwEBuP+JsFYAKzT//wCA/+wEvwe6BiYAOQAAAQcAqwT2AT0AC7YBFwABAXFWACs0AP//AHf/7AP5BoQGJgBZAAABBwCrBJMABwALtgIdEQEBsFYAKzQA//8AgP/sBjoHQgYmAJoAAAEHAHUB2gFCAAu2AiAKAQFsVgArNAD//wB3/+wFJAXrBiYAmwAAAQcAdQFa/+sAC7YDJhsBAYtWACs0AP//AID/7AY6B0IGJgCaAAABBwBEATMBQgALtgIiCgEBbFYAKzQA//8Ad//sBSQF6wYmAJsAAAEHAEQAs//rAAu2AygbAQGLVgArNAD//wCA/+wGOgfGBiYAmgAAAQcAqwUaAUkAC7YCIQoBAXxWACs0AP//AHf/7AUkBm8GJgCbAAABBwCrBJr/8gALtgMnGwEBm1YAKzQA//8AgP/sBjoHNgYmAJoAAAEHAKUA3QFDAAu2Ai4VAQF2VgArNAD//wB3/+wFJAXfBiYAmwAAAQYApV3sAAu2AzQbAQGVVgArNAD//wCA/o4GOgYCBiYAmgAAAQcArQUW//cADrQCIxABAbj/gLBWACs0//8Ad/6XBSQElQYmAJsAAAEHAK0EjgAAAA60AykVAQG4/4mwVgArNP//AAj+qQTZBbAGJgA9AAABBwCtBMYAEgAOtAEMBgEBuP92sFYAKzT//wAM/hED3gQ6BiYAXQAAAQcArQVN/3oADrQCIggAALj/ubBWACs0//8ACAAABNkHugYmAD0AAAEHAKsEzAE9AAu2AQoCAQFwVgArNAD//wAM/ksD3gaEBiYAXQAAAQcAqwRcAAcAC7YCGgEBAbBWACs0AP//AAgAAATZByoGJgA9AAABBwClAI8BNwALtgEXCAEBalYAKzQA//8ADP5LA94F9AYmAF0AAAEGAKUfAQALtgInGAEBqlYAKzQA//8AUP6wBK0GAAQmAEgAAAAnAjYBgAI/AQcAQwCZ/2wAF7QENxYBAbj/d7dWAzILAQGDVgArNCs0AP//AC3+mgS0BbAGJgA4AAABBwJhAkYAAAALtgILAgAAmlYAKzQA//8AI/6aA9UEOgYmAPYAAAEHAmEB3wAAAAu2AgsCAACaVgArNAD//wCR/poE7QWwBiYA4QAAAQcCYQLOAAAAC7YCHRkBAJpWACs0AP//AGD+mgPhBDsGJgD5AAABBwJhAccAAAALtgIbAgEAmlYAKzQA//8Amf6aBDcFsAYmALEAAAEHAmEA/AAAAAu2AQkEAACaVgArNAD//wCD/poDTAQ6BiYA7AAAAQcCYQDhAAAAC7YBCQQAAJpWACs0AP//AAr+PQW0BcQGJgFMAAABBwJhAt//owALtgI6CgAAa1YAKzQA////y/5EBJAETgYmAU0AAAEHAmEB7/+qAAu2AjkJAABrVgArNAD//wB6AAAD+gYABgYATAAAAAL/1wAABLoFsAAYABwAGkAMHBsYAAALDAJyDgsIAD8zKxI5LzPMMjAxQSEyFhYVFA4CIyERMxEhMjY2NTQmJiMhARUhNQE+AW6m7HxGiMN9/eT8ASBfejs7el/+kgE4/WEDgW/IhWSmeUIFsPsXR3RFQ25CAjWnpwAAAv/XAAAEugWwABgAHAAZQAscGxgAAAsMAg4LCAA/Mz8SOS8zzDIwMUEhMhYWFRQOAiMhETMRITI2NjU0JiYjIQEVITUBPgFupux8RojDff3k/AEgX3o7O3pf/pIBOP1hA4FvyIVkpnlCBbD7F0d0RUNuQgI1p6cAAv/0AAAENwWwAAUACQAWQAoGBwcEAgUCcgQIAD8rMhI5LzMwMUEVIREjEQEVITUEN/1c+gH6/WEFsMj7GAWw/ZempgAC/98AAANMBDoABQAJABZACgkICAQCBQZyBAoAPysyEjkvMzAxQRUhESMRARUhNQNM/ijxAfv9YQQ6wPyGBDr+P6enAAT/8wAABUAFsAADAAkADQARACtAFQwLCwcHBhARBhEGEQIJAwJyCgIIcgArMisyETk5Ly8RMxEzEjkRMzAxQREjESEBISczARMBNwEBFSE1Aaf6BGb9sP6dIvoBqDP+KaICYv1S/WEFsPpQBbD8wtoCZPpQApjB/KcE56enAAT/yQAABEcGAAADAAkADQARAC1AFwQGcgwLCwcHBhARBhEGEQIDAHIKAgpyACsyKxE5OS8vETMRMxI5ETMrMDFBESMRAQEhJzMBEwE3AQEVITUBhfADh/5G/txF8QEYLf6unQHN/iH9YQYA+gAGAP46/aG/AaD7xgH6qv1cBWOmpgACAAgAAATZBbAACAAMAB1ADwwBBAcDCwsGAwgCcgYIcgArKzIROS8XOTMwMUEBASEBESMRAQEVITUBHwFSAVIBFv4W/f4WA7/9YAWw/UkCt/xo/egCGAOY/PynpwAABAAe/l8D9QQ6AAMACAANABEAF0ALERAQAgUNBnICDnIAKysyEjkvMzAxZREjETcTMwEjAwEXIwEBFSE1AoHxb/v7/oGivAEEJKL+gANB/WFt/fICDpUDOPvGBDr8xP4EOvxspqYAAgAmAAAE6QWwAAsADwAfQA8PBwUBBAoDDg4JBQMAAnIAKzIvMzkvFzkSOTMwMUEBASEBASEBASEJAhUhNQFTATUBNQEh/kgBw/7c/sP+w/7bAcT+RwOq/WAFsP3tAhP9L/0hAh394wLfAtH9jaenAAIAHwAAA+oEOgALAA8AH0APDwcFAQoEAw4OCQUDAAZyACsyLzM5Lxc5EjkzMDFBExMhAQEhAwMhCQIVITUBNM7SAQn+uAFV/vfc3P72AVT+uQMt/WEEOv6ZAWf97f3ZAXb+igInAhP+Raam//8AYv/sBBIETQYGAL8AAP//AAEAAAQ0BbAGJgAqAAABBwI2/3T+ZQAOtAMOAgIAuAEIsFYAKzT//wB7AnAFzAMxBgYBggAA//8AUgAABD4FxAYGABYAAP//AE7/7AQaBcQGBgAXAAD//wA3AAAEWQWwBgYAGAAA//8Af//sBDkFsAYGABkAAP//AIf/7ARNBbkEBgAaFAD//wB7/+wEOgXEBAYAHBQA//8AXf/3BBUFxAQGAB0AAP//AHz/7AQ3BcQEBgAUFAD//wBr/+wE8gdLBiYAKwAAAQcAdQHGAUsAC7YBLBABAW1WACs0AP//AFL+VQQMBgAGJgBLAAABBwB1AUMAAAALtgM/GgEBjFYAKzQA//8AlAAABRcHNwYmADIAAAEHAEQBRwE3AAu2AQwJAQFhVgArNAD//wB6AAAD+gYABiYAUgAAAQcARACwAAAAC7YCHgMBAaBWACs0AP//ABEAAAU/ByEGJgAlAAABBwCsBHsBMwANtwQDDgMBAWZWACs0NAD//wAO/+wD+QXrBiYARQAAAQcArAQG//0ADbcDAjwPAQGRVgArNDQA//8ATgAABE0HKAYmACkAAAEHAKwERgE6AA23BQQRBwEBcVYAKzQ0AP//AAP/7AQKBesGJgBJAAABBwCsA/v//QANtwIBLQsBAZFWACs0NAD///77AAACIwcoBiYALQAAAQcArALzAToADbcCAQUDAQFxVgArNDQA///+5AAAAgwF4gYmAI0AAAEHAKwC3P/0AA23AgEFAwEBo1YAKzQ0AP//AGX/7AUdByMGJgAzAAABBwCsBJMBNQANtwMCLREBAVRWACs0NAD//wAZ/+wEPAXrBiYAUwAAAQcArAQR//0ADbcDAi0GAQGRVgArNDQA//8ANQAABN8HIQYmADYAAAEHAKwELQEzAA23AwIfAAEBZlYAKzQ0AP///3MAAAK5BesGJgBWAAABBwCsA2v//QANtwMCGAMBAaVWACs0NAD//wB3/+wEvwchBiYAOQAAAQcArARvATMADbcCARcLAQFmVgArNDQA//8AFP/sA/kF6wYmAFkAAAEHAKwEDP/9AA23AwIdEQEBpVYAKzQ0AP///wwAAAUPBj8EJgDQZAAABwCu/j//////AJT+oQSlBbAGJgAmAAABBwCtBLMACgAOtAI0GwEBuP9/sFYAKzT//wB9/o0EMAYABiYARgAAAQcArQTO//YADrQDMwQBAbj/a7BWACs0//8AlP6hBNIFsAYmACgAAAEHAK0EigAKAA60AiIdAQG4/3+wVgArNP//AFD+lwQCBgAGJgBIAAABBwCtBK8AAAAOtAMzFgEBuP+JsFYAKzT//wCU/gYE0gWwBiYAKAAAAQcBygFC/qIADrQCKB0BAbj/l7BWACs0//8AUP38BAIGAAYmAEgAAAEHAcoBZv6YAA60AzkWAQG4/6GwVgArNP//AJT+oQUXBbAGJgAsAAABBwCtBSYACgAOtAMPCgEBuP9/sFYAKzT//wB6/qED+gYABiYATAAAAQcArQSfAAoADrQCHgIBAbj/f7BWACs0//8AlAAABRYHMwYmAC8AAAEHAHUBcQEzAAu2Aw4DAQFbVgArNAD//wB9AAAENwc9BiYATwAAAQcAdQF3AT0AC7YDDgMBABtWACs0AP//AJT+4wUWBbAGJgAvAAABBwCtBOUATAAOtAMRAgEBuP/PsFYAKzT//wB9/s8ENwYABiYATwAAAQcArQR6ADgADrQDEQIBAbj/vLBWACs0//8AlP6hBCQFsAYmADAAAAEHAK0EtwAKAA60AgsCAQG4/3+wVgArNP//AHj+oQGLBgAGJgBQAAABBwCtA1oACgAOtAEHAgEBuP9/sFYAKzT//wCU/qEGagWwBiYAMQAAAQcArQXUAAoADrQDFAYBAbj/f7BWACs0//8AfP6hBnwETgYmAFEAAAEHAK0F2gAKAA60AzYCAQG4/3+wVgArNP//AJT+nQUXBbAGJgAyAAABBwCtBSgABgAOtAENAgEBuP9/sFYAKzT//wB6/qED+gROBiYAUgAAAQcArQSPAAoADrQCHwIBAbj/f7BWACs0//8AZf/sBR0H3gYmADMAAAEHAkYFAAFVAA23AwIxEQEBWlYAKzQ0AP//AJQAAATPB0IGJgA0AAABBwB1AXIBQgALtgEYDwEBbFYAKzQA//8Aff5gBC8F9gYmAFQAAAEHAHUBoP/2AAu2AzADAQGWVgArNAD//wCU/qEE3wWwBiYANgAAAQcArQS5AAoADrQCIRgBAbj/f7BWACs0//8Acf6iArkETgYmAFYAAAEHAK0DUwALAA60AhoCAQG4/4CwVgArNP//AEv+lgSOBcQGJgA3AAABBwCtBNb//wAOtAE9KwEBuP+IsFYAKzT//wBJ/o0DxwROBiYAVwAAAQcArQR0//YADrQBOSkBAbj/f7BWACs0//8ALf6bBLQFsAYmADgAAAEHAK0ExAAEAA60AgsCAQG4/3WwVgArNP//AAr+lwJ1BUMGJgBYAAABBwCtBA8AAAAOtAIZEQEBuP+JsFYAKzT//wCA/+wEvwfcBiYAOQAAAQcCRgTbAVMADbcCARsAAQFsVgArNDQA//8AEQAABRsHNgYmADoAAAEHAKUAsgFDAAu2AhgJAQF2VgArNAD//wAWAAAD3wXqBiYAWgAAAQYApR33AAu2AhgJAQGgVgArNAD//wAR/qEFGwWwBiYAOgAAAQcArQTsAAoADrQCDQQBAbj/f7BWACs0//8AFv6hA98EOgYmAFoAAAEHAK0EVgAKAA60Ag0EAQG4/3+wVgArNP//AC/+oQbmBbAGJgA7AAABBwCtBeMACgAOtAQZEwEBuP9/sFYAKzT//wAj/qEFyAQ6BiYAWwAAAQcArQVMAAoADrQEGRMBAbj/f7BWACs0//8AUP6hBI4FsAYmAD4AAAEHAK0ExAAKAA60AxECAQG4/3+wVgArNP//AFH+oQPBBDoGJgBeAAABBwCtBGQACgAOtAMRAgEBuP9/sFYAKzT///5s/+wFYwXWBCYAM0YAAQcBcf4I//8ADbcDAi4RAAASVgArNDQA//8ACAAABJEFHAYmAkMAAAAHAK7/X/7c////YwAAA/IFHwQmAjg8AAAHAK7+lv7f////awAABKMFGgQmAfQ8AAAHAK7+nv7a////bgAAAbQFHwQmAfM8AAAHAK7+of7f////mf/wBHgFHAQmAe0KAAAHAK7+zP7c////IAAABHQFHAQmAeM8AAAHAK7+U/7c////qwAABIsFHAQmAgMKAAAHAK7+3v7c//8ACAAABJEEjQYGAkMAAP//AHYAAAQMBI0GBgJCAAD//wB2AAADtgSNBgYCOAAA//8AQQAAA/UEjQYGAeIAAP//AHYAAARnBI0GBgH0AAD//wCGAAABeASNBgYB8wAA//8AdgAABGcEjQYGAfEAAP//AHYAAAWPBI0GBgHvAAD//wB2AAAEZwSNBgYB7gAA//8ATv/wBG4EnQYGAe0AAP//AHYAAAQoBI0GBgHsAAD//wAlAAAEGQSNBgYB6AAA//8ABgAABDgEjQYGAeMAAP//ABMAAARJBI0GBgHkAAD///+cAAACZQXrBiYB8wAAAQcAav85AB4ADbcCAQ0DAQGEVgArNDQA//8ABgAABDgF6wYmAeMAAAEGAGpSHgANtwQDFwkBAYNWACs0NAD//wB2AAADtgXrBiYCOAAAAQYAalweAA23BQQZBwEBg1YAKzQ0AP//AHYAAAOZBh4GJgH6AAABBwB1ASMAHgALtgIIAwEBg1YAKzQA//8AP//wA/AEnQYGAekAAP//AIYAAAF4BI0GBgHzAAD///+cAAACZQXrBiYB8wAAAQcAav85AB4ADbcCAQ0DAQGEVgArNDQA//8AJv/wA2UEjQYGAfIAAP//AHYAAARnBh4GJgHxAAABBwB1ARoAHgALtgMOAwEBhFYAKzQA//8AH//sBEEGBQYmAhEAAAEGAKF9HgALtgIdFwEBhFYAKzQA//8ACAAABJEEjQYGAkMAAP//AHYAAAQMBI0GBgJCAAD//wB2AAADmQSNBgYB+gAA//8AdgAAA7YEjQYGAjgAAP//AHYAAARtBgUGJgIOAAABBwChALYAHgALtgMRCAEBhFYAKzQA//8AdgAABY8EjQYGAe8AAP//AHYAAARnBI0GBgH0AAD//wBO//AEbgSdBgYB7QAA//8AdgAABGMEjQYGAf8AAP//AHYAAAQoBI0GBgHsAAD//wBP//AEQwSdBgYCQQAA//8AJQAABBkEjQYGAegAAP//ABMAAARJBI0GBgHkAAAAAwBD/jcD6gSdAB4APgBCAChAEx8BAgI+PhU/NDRAMCoLcg8LFX4APzPMK8zNMxI5EjkvMxI5OTAxQSM1MzI2NjU0JiYjIgYGFSM0PgIzMh4CFRQOAiUzMh4CFRQOAiMiLgI1Mx4CMzI2NjU0LgIjIwERIxECObmRTV4qLWBPNVk38UN4n11pqXhCP3CX/u+5bKJtNkeCrmhRoYVR8QQ6YDtRaDIeO1g6jQEC8QIsfSdFLypFKh08Lk55VCwoT3dPQ3FTLUYtUm9BVH9VKyRQhF81QyAqSTAsQSoV/lL95wIZAAQAdv6aBSgEjQADAAcACwAPAB1ADQMCAgYLB30PDgoKBhIAPzMQzjM/MxI5LzMwMUEVITUTESMRIREjEQERIxEDt/1sRPED8fEBsvECncDAAfD7cwSN+3MEjfwm/ecCGQAAAgBP/kAEQwSdACcAKwAYQAsZEH4oJCQqKgULcgArMi8yETM/MzAxQTMOAiMiLgI1NTQ+AjMyFhYXIy4CIyIOAhUVFB4CMzI2NgcRIxEDUPIJediZd72FR0iIvXab1HYM8QY2bFhEZkUjH0JnR1VsOoTxAYR3tmdOkc+BToHPk01punhBYzgvXolaT1iJXjEvYOX95wIZAP//AAYAAAQ4BI0GBgHjAAD//wAO/jcFrASkBiYCJwAAAAcCYQLm/53//wB2AAAEbQXLBiYCDgAAAQcAcACCACEAC7YDDggBAbBWACs0AP//AB//7ARBBcsGJgIRAAABBgBwSiEAC7YCGhcBAbBWACs0AP//AE8AAAVXBI0GBgIBAAD//wCG//AFYwSNBCYB8wAAAAcB8gH+AAD////sAAAGBAYABiYChAAAAQcAdQKBAAAAC7YGGQ8BAU1WACs0AP//AE7/xwRuBh4GJgKGAAABBwB1AXUAHgALtgMwEQEBW1YAKzQA//8AP/38A/AEnQYmAekAAAAHAcoBP/6Y//8AJwAABeUGHgYmAeUAAAEHAEQBcwAeAAu2BBgKAQFrVgArNAD//wAnAAAF5QYeBiYB5QAAAQcAdQIZAB4AC7YEFgoBAWtWACs0AP//ACcAAAXlBesGJgHlAAABBwBqATsAHgANtwUEHwoBAYRWACs0NAD//wAGAAAEOAYeBiYB4wAAAAcARACKAB7//wAR/lcFPwWwBiYAJQAAAQcApAGAAAMAC7YDDgUBATlWACs0AP//AFb+XAP5BE4GJgBFAAABBwCkALQACAALtgI7MQAATVYAKzQA//8AlP5eBE0FsAYmACkAAAEHAKQBQgAKAAu2BBACAABDVgArNAD//wBR/lQECgROBiYASQAAAQcApAEFAAAAC7YBLAAAAE1WACs0AP//AAj+VASRBI0GJgJDAAAABwCkASIAAP//AHb+XAO2BI0GJgI4AAAABwCkAPEACP//AHj+oQGLBDoGJgCNAAABBwCtA1oACgAOtAEHAgEBuP9/sFYAKzQAAAAAABEA0gADAAEECQAAAF4AAAADAAEECQABABoAXgADAAEECQACAA4AeAADAAEECQADABoAXgADAAEECQAEABoAXgADAAEECQAFACYAhgADAAEECQAGABoArAADAAEECQAHAEAAxgADAAEECQAIAAwBBgADAAEECQAJACYBEgADAAEECQALABQBOAADAAEECQAMABQBOAADAAEECQANAFwBTAADAAEECQAOAFQBqAADAAEECQAQAAwB/AADAAEECQARAAwCCAADAAEECQAZAAwB/ABDAG8AcAB5AHIAaQBnAGgAdAAgADIAMAAxADEAIABHAG8AbwBnAGwAZQAgAEkAbgBjAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAC4AUgBvAGIAbwB0AG8AIABNAGUAZABpAHUAbQBSAGUAZwB1AGwAYQByAFYAZQByAHMAaQBvAG4AIAAzAC4AMAAwADUAOwAgADIAMAAyADIAUgBvAGIAbwB0AG8ALQBNAGUAZABpAHUAbQBSAG8AYgBvAHQAbwAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEcAbwBvAGcAbABlAC4ARwBvAG8AZwBsAGUAQwBoAHIAaQBzAHQAaQBhAG4AIABSAG8AYgBlAHIAdABzAG8AbgBHAG8AbwBnAGwAZQAuAGMAbwBtAEwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAQQBwAGEAYwBoAGUAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMgAuADAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAUgBvAGIAbwB0AG8ATQBlAGQAaQB1AG0AAAADAAAAAAAA/2oAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAIAAj//wAPAAEAAgAOAAAAAAAAAigAAgBZACUAPgABAEQAXgABAGoAagABAHAAcAABAHUAdQABAIEAgQABAIMAgwABAIYAhgABAIkAiQABAIsAlgABAJgAnwABAKEAowABAKUApgABAKgArQADALEAsQABALoAuwABAL8AvwABAMEAwQABAMMAxAABAMcAxwABAMsAywABAM0AzgABANAA0QABANMA0wABANoA3gABAOEA4QABAOUA5QABAOcA6QABAOsA+wABAP0A/QABAP8BAQABAQMBAwABAQgBCQABARYBGgABARwBHAABASABIgABASQBJwADASoBKwABATMBNAABATYBNgABATsBPAABAUEBRAABAUcBSAABAUsBTQABAVEBUQABAVQBWAABAV0BXgABAWIBYgABAWQBZAABAWgBaAABAWoBbAABAW4BbgABAXABcAABAcsB0QACAeIB9gABAfoB+gABAgMCAwABAgUCBQABAgwCDgABAhACEQABAhMCEwABAhcCFwABAhkCGwABAiECIQABAiYCKAABAioCKgABAjgCOAABAjsCOwABAj0CPQABAkACQwABAm8CcwABAoMCiAABAosC8wABAvYDtQABA7cDtwABA7kDwwABA8UDzgABA9AD6wABA+8D7wABA/ED+AABA/oD/AABA/8EAwABBAUEkAABBJMElAABBJYElwABBJkEnAABBKYFAgABBQQFDgABBREFHgABAAEAAwAAABAAAAAWAAAAIAABAAEArQACAAEAqACsAAAAAgACAKgArAAAASQBJwAFAAEAAAAeABAACgACAC4ANgACY3BzcAA6a2VybgBAAARERkxUADhjeXJsADhncmVrADhsYXRuADgAAQAAAAEAIgACAAgAAgAuBBAAAAABAAAAAAABAAEADgAAAAEPAgAFACQASAAA//8AAgAAAAEAAUuMAAQAAAHsE9wRBBEEF7QQ5hdaEVQRkhJkEXZH7hKkEqQVxBG2EqQSpBJkEsYgkBlQH8YRpBHMFwAY3hHiFO4SghIsEUAp5BEiJsIRXhFeEw4SLBGEGHgSRhH4EQoSRhU0EiwSZBnGHwAXWhJkF1olxCfEIwodmBDsEkYRLD54EV438iTSKMYSEhDyEPhBYhD+FHYUChpIOeQtpjRCLFgSpDDqPBYXACFeEqQSpBV6EqQSpBKkMpQa0hKkE7IeOhx0GBYj7B0GEUoiNBEKEzQ2GERgEiwUsCsaG1wS6BIsG+YTXhaqFEAS6BdaEw4RpBJGE4gSLB8AEUoXABEKFcQVxBXEEqQXABEKEqQSpBJkEUoXABEKEQQvSBEEEQQRBBEcFg4WXBEWETYREBEWERARaBEQEZISZBJkEmQSZB/GF1oXWhdaF1oXWhdaF1oRkhF2EXYRdhF2EqQSpBKkEqQSpBJkEmQSZBJkEmQY3hKCEoISghKCEoISghKCEUARQBFAEUARXhMOEw4TDhMOEw4SRhJGF1oSghdaEoIXWhKCEZIRkhGSEZISZBF2EUARdhFAEXYRQBF2EUARdhFAEqQRXhKkEqQSpBKkEqQVxBG2EbYRthG2EqQRXhKkEV4SpBFeEV4SZBMOEmQTDhJkEw4RhBGEEYQfxh/GH8YRzBjeEkYY3hHiEeIR4hEWERYRHBEQERAREBEQERAREBEQERYRFhEWERYRFhEQERAREBEWETYRNhE2ETYRFhEWERYRHBdaEXYSpBKkEmQY3hdaEVQRdhHiEqQSpBXEEqQSpBJkEsYfxhjeFwASpBjeEV4TDhJGEw4Rdh8AEqQSpBXEFcQVehdaEVQfABF2EqQSpBJkEsYRkh/GFwASghFAEw4SLBJGEQoRQBFKEkYRzBHMEcwY3hJGEQQRBBEEEqQRXhdaEoIRdhFAEaQSRhGSGN4SRhKkFwARChKkF1oSghdaEoIRdhFAEUARQBcAEQoSZBMOEw4SLBV6EkYVehJGFXoSRhdaEoIXWhKCF1oSghdaEoIXWhKCF1oSghdaEoIXWhKCF1oSghdaEoIXWhKCF1oSghF2EUARdhFAEXYRQBF2EUARdhFAEXYRQBF2EUARdhFAEqQSpBJkEw4SZBMOEmQTDhJkEw4SZBMOEmQTDhJkEw4TDhje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BGX/8wRn//MEaf/zBGv/8wRt//MEb//zBHH/8wSw//MEyf/zAEAAR//sAEj/7ABJ/+wAS//sAFX/7ACU/+wAmf/sALv/7ADI/+wAyf/sAPf/7AED/+wBHv/sASL/7AFC/+wBYP/sAWH/7AFr/+wCsv/sArP/7AK0/+wCtf/sArb/7ALO/+wC0P/sAtL/7ALU/+wC1v/sAtj/7ALa/+wC3P/sAt7/7ALg/+wC4v/sAuT/7ALm/+wC6P/sA6//7APV/+wD2f/sA9z/7AP3/+wD/f/sBAL/7AQQ/+wEEv/sBBP/7AQf/+wELv/sBEj/7ARK/+wETP/sBE7/7ARQ/+wEUv/sBFT/7ARW/+wEav/sBGz/7ARu/+wEcv/sBK3/7AS6/+wEvP/sAEAAJ//mACv/5gAz/+YANf/mAIP/5gCT/+YAmP/mALP/5gC4/8IAxAAQANP/5gEI/+YBF//mARv/5gEd/+YBH//mASH/5gFB/+YBav/mAlX/5gJW/+YCWP/mAln/5gKX/+YCof/mAqL/5gKj/+YCpP/mAqX/5gLN/+YCz//mAtH/5gLT/+YC4f/mAuP/5gLl/+YC5//mAwn/5gML/+YDDf/mAz7/5gOb/+YDqP/mA87/5gPR/+YD/v/mBAH/5gQc/+YEHv/mBCD/5gRb/+YEXf/mBF//5gRh/+YEY//mBGX/5gRn/+YEaf/mBGv/5gRt/+YEb//mBHH/5gSw/+YEyf/mAEcAEAAEABIABABH/+cASP/nAEn/5wBL/+cAVf/nAJT/5wCZ/+cAu//nAMQADwDI/+cAyf/nAPf/5wED/+cBHv/nASL/5wFC/+cBYP/nAWH/5wFr/+cBhgAEAYoABAGOAAQBjwAEArL/5wKz/+cCtP/nArX/5wK2/+cCzv/nAtD/5wLS/+cC1P/nAtb/5wLY/+cC2v/nAtz/5wLe/+cC4P/nAuL/5wLk/+cC5v/nAuj/5wOv/+cD1f/nA9n/5wPc/+cD9//nA/3/5wQC/+cEEP/nBBL/5wQT/+cEH//nBC7/5wRI/+cESv/nBEz/5wRO/+cEUP/nBFL/5wRU/+cEVv/nBGr/5wRs/+cEbv/nBHL/5wSt/+cEuv/nBLz/5wBNAAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCU/+gAmf/oALv/6ADI/+gAyf/oAPf/6AED/+gBHv/oASL/6AFC/+gBYP/oAWH/6AFr/+gBhAAQAYUAEAGHABABiAAQAYkAEAKy/+gCs//oArT/6AK1/+gCtv/oAs7/6ALQ/+gC0v/oAtT/6ALW/+gC2P/oAtr/6ALc/+gC3v/oAuD/6ALi/+gC5P/oAub/6ALo/+gDr//oA9X/6APZ/+gD3P/oA+wAEAPtABAD8AAQA/f/6AP9/+gEAv/oBBD/6AQS/+gEE//oBB//6AQu/+gESP/oBEr/6ARM/+gETv/oBFD/6ARS/+gEVP/oBFb/6ARq/+gEbP/oBG7/6ARy/+gErf/oBLr/6AS8/+gATwBHAAEASAABAEkAAQBLAAEAVQABAJQAAQCZAAEAuwABAMgAAQDJAAEA7QArAPIAFAD2/+MA9wABAPn/8AD8/+YA/v/1AQMAAQEEABQBHgABASIAAQE6/9MBQgABAUj/8AFK/98BUQAUAWAAAQFhAAEBawABAW3/4wFwABQCsgABArMAAQK0AAECtQABArYAAQLOAAEC0AABAtIAAQLUAAEC1gABAtgAAQLaAAEC3AABAt4AAQLgAAEC4gABAuQAAQLmAAEC6AABA68AAQPVAAED2QABA9wAAQP3AAED/QABBAIAAQQQAAEEEgABBBMAAQQfAAEEK//wBC4AAQRIAAEESgABBEwAAQROAAEEUAABBFIAAQRUAAEEVgABBGoAAQRsAAEEbgABBHIAAQSL//AErQABBLoAAQS8AAEAUwA4/74AUf/1AFL/9QBU//UAWv/vAF3/7wC9/+8Awf/1ANL/vgDW/74A5v/JAOz/9QDw//UA8f/1APP/9QD0//UA9f/1APb/3wD4//UA+v/1APv/9QD+//UBAP/1AQX/9QEJ/+0BGv/vASD/6wEr//UBNv/1ATn/vgE6/98BPP/1AT7/9QFF/74BTP/pAVP/9QFV//UBV//1AVz/9QFj//UBbf/gArv/9QLF/+8Cxv/vAwP/9QMF//UDB//1Awj/9QMf/74DIf++AyP/vgM0/+8Dsf/1A7f/7wPS/74D1v/1A9j/9QPa/+8D3f/1A+L/9QPj/+8D6//vA/L/9QP4//UD/P/vBAT/7wQZ//UEG//1BCX/7wQn/+8EKf/vBC3/9QSC/+8EhP/vBIb/7wSI/74Ejf/1BKn/9QTG//UEyP/1BND/vgTU/+8E1v/vAGgAOP8zADr/yAA8//AAPf+sAFH/7wBS/+8AVP/vAMH/7wDS/zMA1P/1ANb/MwDa//AA3f/1AN7/6wDh/+YA5v/CAOz/7wDw/+8A8f/vAPP/7wD0/+8A9f/vAPb/zgD4/+8A+v/vAPv/7wD+/+8BAP/vAQX/7wEZ/8gBK//vATP/8AE2/+8BOf8zATr/zQE8/+8BPv/vAUP/8AFF/zMBR//mAUn/5gFM/98BUP/1AVP/7wFV/+8BV//vAVz/7wFd//ABYv/QAWT/6wFm//UBbP+fAW3/0AFv//UCqv+sArv/7wMD/+8DBf/vAwf/7wMI/+8DH/8zAyH/MwMj/zMDM/+sAzX/rAOc/6wDq/+sA6z/8AOu/6wDsf/vA8b/6wPS/zMD0//wA9b/7wPY/+8D3f/vA+L/7wPq/6wD8v/vA/j/7wP7/8gEA/+sBAb/8AQU//AEGf/vBBv/7wQk/+sEJv/rBCj/6wQq/+YELf/vBIH/rASD/6wEhf+sBIj/MwSK/+YEjf/vBJf/rASp/+8Exv/vBMj/7wTQ/zME0//IBNX/yABoAEf/tABI/7QASf+0AEv/tABMABQATwAUAFAAFABT/3oAVf+0AFf/ZABbAAsAlP+0AJn/tAC7/7QAyP+0AMn/tAD3/7QBA/+0ARj/egEe/7QBIv+0AUL/tAFg/7QBYf+0AWv/tAHR/2QCsv+0ArP/tAK0/7QCtf+0Arb/tAK8/3oCvf96Ar7/egK//3oCwP96As7/tALQ/7QC0v+0AtT/tALW/7QC2P+0Atr/tALc/7QC3v+0AuD/tALi/7QC5P+0Aub/tALo/7QDCv96Awz/egMO/3oDFv9kAxj/ZAMa/2QDHP9kAx7/ZAOv/7QDtf96A7v/egPV/7QD1/96A9n/tAPc/7QD3v9kA/f/tAP9/7QEAv+0BBD/tAQS/7QEE/+0BB3/egQf/7QEIf96BC7/tARI/7QESv+0BEz/tARO/7QEUP+0BFL/tARU/7QEVv+0BFz/egRe/3oEYP96BGL/egRk/3oEZv96BGj/egRq/7QEbP+0BG7/tARw/3oEcv+0BK3/tASx/3oEuv+0BLz/tAS+ABQEwAAUBMIAFATP/2QAagA4/+YAOv/nADz/8gA9/+cAUf/xAFL/8QBU//EAXP/xAMH/8QDS/+YA1v/mANr/8gDe/+4A4f/oAOb/5gDs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ASL/3AEr/+EBNv/hATz/4QE+/+EBQv/cAVP/4QFV/+EBV//hAVz/4QFg/9wBYf/cAWv/3AKy/9wCs//cArT/3AK1/9wCtv/cArv/4QK8/9YCvf/WAr7/1gK//9YCwP/WAsH/3QLC/90Cw//dAsT/3QLF/+ECxv/hAs7/3ALQ/9wC0v/cAtT/3ALW/9wC2P/cAtr/3ALc/9wC3v/cAuD/3ALi/9wC5P/cAub/3ALo/9wDA//hAwX/4QMH/+EDCP/hAwr/1gMM/9YDDv/WAyb/3QMo/90DKv/dAyz/3QMu/90DMP/dAzT/4QOv/9wDsf/hA7P/3QO1/9YDt//hA7r/3QO7/9YDvP/dA9X/3APW/+ED1//WA9j/4QPZ/9wD2v/hA9z/3APd/+ED4v/hA+P/4QPr/+ED8v/hA/f/3AP4/+ED/P/hA/3/3AQC/9wEBP/hBBD/3AQS/9wEE//cBBn/4QQb/+EEHf/WBB//3AQh/9YEJf/hBCf/4QQp/+EELf/hBC7/3ARI/9wESv/cBEz/3ARO/9wEUP/cBFL/3ARU/9wEVv/cBFz/1gRe/9YEYP/WBGL/1gRk/9YEZv/WBGj/1gRq/9wEbP/cBG7/3ARw/9YEcv/cBHT/3QR2/90EeP/dBHr/3QR8/90Efv/dBID/3QSC/+EEhP/hBIb/4QSN/+EEqf/hBK3/3ASx/9YEtf/dBLr/3AS8/9wExv/hBMj/4QTU/+EE1v/hAL8ABgAMAAsADABH/+gASP/oAEn/6ABKAAwAS//oAFP/6gBV/+gAWgALAF0ACwCU/+gAmf/oALv/6AC9AAsAvv/0AMT/1wDGAAsAyP/oAMn/6ADKAAwA9//oAQP/6AEY/+oBGgALAR7/6AEi/+gBQv/oAWD/6AFh/+gBa//oAYQADAGFAAwBhwAMAYgADAGJAAwB4wANAeYADQHoAA4B6f/1Aev/7AHt/+0B9f/sAfv/vwH8/+0B/f+/AgQADgIF/+0CCAAOAiAADgIh/+0CIgANAiQADgIq/+0CQf/uAkP/vwKy/+gCs//oArT/6AK1/+gCtv/oArz/6gK9/+oCvv/qAr//6gLA/+oCxQALAsYACwLO/+gC0P/oAtL/6ALU/+gC1v/oAtj/6ALa/+gC3P/oAt7/6ALg/+gC4v/oAuT/6ALm/+gC6P/oAwr/6gMM/+oDDv/qAzQACwND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/8ADSf/AA17/wANf/8ADYP/AA5f/TgOf/04Dr//rA7P/6gO1/+sDt//oA7r/6gO7/+sDvP/qA8P/DQPH/04D0gAUA9T/3gPV/+sD1//rA9n/6wPa/+gD3P/rA+P/6APr/+gD8/9OA/T/3gP3/+sD/P/oA/3/6wQC/+sEBP/oBAn/TgQK/94EC/9OBAz/3gQQ/+sEEv/rBBP/6wQd/+sEH//rBCH/6wQl/+gEJ//oBCn/6AQu/+sEL/9OBDD/3gQx/04EMv/eBDP/TgQ0/94ENf9OBDb/3gQ3/04EOP/eBDn/TgQ6/94EO/9OBDz/3gQ9/04EPv/eBD//TgRA/94EQf9OBEL/3gRD/04ERP/eBEX/TgRG/94ESP/rBEr/6wRM/+sETv/rBFD/6wRS/+sEVP/rBFb/6wRc/+sEXv/rBGD/6wRi/+sEZP/rBGb/6wRo/+sEav/rBGz/6wRu/+sEcP/rBHL/6wR0/+oEdv/qBHj/6gR6/+oEfP/qBH7/6gSA/+oEgv/oBIT/6ASG/+gEiAAUBKr/TgSr/94Erf/rBLH/6wS1/+oEuv/rBLz/6wTQABQE1P/oBNb/6ATc/8AE4//ABPv/wAACAKAABAAEAAAABgAGAAEACwAMAAIAEwATAAQAJQAqAAUALAAtAAsALwA2AA0AOAA4ABUAOgA/ABYARQBGABwASQBKAB4ATABMACAATwBPACEAUQBUACIAVgBWACYAWABYACcAWgBdACgAXwBfACwAigCKAC0AlgCWAC4AnQCdAC8AsQC1ADAAtwC5ADUAuwC7ADgAvQC+ADkAwADBADsAwwDFAD0AxwDOAEAA0gDSAEgA1ADeAEkA4ADvAFQA8QDxAGQA9gD4AGUA+wD8AGgA/gEAAGoBAwEFAG0BCgEKAHABDQENAHEBGAEaAHIBIgEiAHUBLgEwAHYBMwE1AHkBNwE3AHwBOQE5AH0BOwE7AH4BQwFEAH8BVAFUAIEBVgFWAIIBWAFYAIMBXAFeAIQBhAGFAIcBhwGJAIkB6AHoAIwB6gHrAI0B7QHtAI8B8AHwAJAB+wH9AJECQAJAAJQCQwJDAJUCVQJVAJYCVwJYAJcCiwKMAJkCjgKOAJsCkAKlAJwCqgKxALICswK2ALoCuwLAAL4CxQLNAMQCzwLPAM0C0QLRAM4C0wLTAM8C1QLVANAC1wLgANEC6QLrANsC7QLtAN4C7wLvAN8C8QLxAOAC8wLzAOEC+AL4AOIC+gL6AOMC/AL8AOQC/gL+AOUDAAMAAOYDAgMOAOcDEAMQAPQDEgMSAPUDFAMUAPYDHwMfAPcDIQMhAPgDIwMjAPkDMQMxAPoDMwM2APsDOAM4AP8DOgM6AQADQANJAQEDVANYAQsDXgNgARADZQNlARMDdwN6ARQDfgOAARgDiQOJARsDlwOcARwDnwOuASIDsQOxATIDtQO1ATMDtwO3ATQDuwO7ATUDvgO/ATYDwQPCATgDxAPKAToDzAPOAUED0APVAUQD1wPYAUoD2gPdAUwD4wPkAVAD5gPmAVID6APoAVMD6gPtAVQD8AP1AVgD9wP3AV4D+wP8AV8EAQQBAWEEAwQMAWIEDwQQAWwEEgQVAW4EHAQdAXIEIQQhAXQEIwQpAXUELwRXAXwEWQRZAaUEWwRoAaYEcARwAbQEgQSGAbUEiASIAbsEjASNAbwEkASQAb4EkgSTAb8ElQSVAcEElwSXAcIEqASsAcMErgSuAcgEsASxAckEswSzAcsEtwS5AcwEuwS7Ac8EvQS/AdAEwQTBAdMEwwTDAdQExQTLAdUEzQTNAdwE0ATQAd0E0wTXAd4E2QTZAeME2wTcAeQE4ATgAeYE4wTjAecE7gTuAegE+wT7AekFAgUCAeoFBgUGAesAAgCaAAYABgAAAAsACwABABAAEAACABIAEgADACUAKQAEACwANAAJADgAPgASAEUARwAZAEkASQAcAEwATAAdAFEAVAAeAFYAVgAiAFoAWgAjAFwAXgAkAIoAigAnAJYAlgAoALEAtAApAL0AvQAtAMEAwQAuAMcAxwAvANQA1QAwANcA1wAyANoA2gAzANwA3gA0AOAA5gA3AOwA7AA+AO4A7gA/APcA9wBAAPwA/ABBAP4A/wBCAQQBBQBEAQoBCgBGAQ0BDQBHARgBGgBIAS4BMABLATMBNQBOATcBNwBRATkBOQBSATsBOwBTAUMBRABUAVQBVABWAVYBVgBXAVgBWABYAVwBXgBZAYQBigBcAY4BjwBjAegB6ABlAe0B7QBmAfAB8QBnAfsB/QBpAg8CDwBsAh4CIABtAkACQABwAkMCQwBxAlUCVQByAlcCWABzAosCjAB1Ao4CjgB3ApACtgB4ArsCwACfAsUC1QClAtcC4AC2AukC6wDAAu0C7QDDAu8C7wDEAvEC8QDFAvMC8wDGAvYC9gDHAvgC+ADIAvoC+gDJAvwC/ADKAv4C/gDLAwADAADMAwIDDgDNAxADEADaAxIDEgDbAxQDFADcAx8DHwDdAyEDIQDeAyMDIwDfAyUDJQDgAycDJwDhAykDKQDiAysDKwDjAy0DLQDkAy8DLwDlAzEDMQDmAzMDOwDnA0ADSQDwA1QDWAD6A14DYAD/A2UDZQECA3YDegEDA34DgAEIA4kDiQELA5cDnAEMA58DrgESA7EDsQEiA7UDtQEjA7cDtwEkA7sDuwElA74DvwEmA8EDygEoA8wDzgEyA9AD1QE1A9cD3QE7A+MD5AFCA+YD5gFEA+gD6AFFA+oD7QFGA/AD9QFKA/cD9wFQA/sD/AFRBAEEDAFTBA8EEAFfBBIEFQFhBBwEHQFlBCEEIQFnBCMEKQFoBC8EVwFvBFkEWQGYBFsEaAGZBHAEcAGnBHMEcwGoBHUEdQGpBIEEhgGqBIgEiAGwBIwEjQGxBJAEkAGzBJIEkwG0BJUElQG2BJcElwG3BKgErAG4BK4ErgG9BLAEsQG+BLMEswHABLcEuQHBBLsEuwHEBL0EvwHFBMEEwQHIBMMEwwHJBMUEywHKBM0EzQHRBNAE0AHSBNIE1wHTBNkE3AHZBOAE4AHdBOME4wHeBOkE6QHfBO4E7gHgBPkE+QHhBPsE+wHiBQIFAgHjBQYFBgHkAAIBdAAGAAYADwALAAsADwAQABAAGgASABIAGgAlACUAAgAmACYAJAAnACcAEAAoACgAAQApACkABAAuAC4ACAAvAC8ADQAwADAAFwAzADMAAQA0ADQAJQA4ADgAEgA5ADkACAA6ADoAHAA7ADsAGAA8ADwAEQA9AD0ADAA+AD4AGQBFAEUAAwBGAEYADgBHAEcAEwBJAEkABQBMAEwACQBRAFIACQBTAFMABgBUAFQADgBWAFYAGwBaAFoABwBcAFwAFQBdAF0ABwBeAF4AHwCKAIoADgCWAJYAAQCxALEAFgCyALIAAgCzALMAAQC0ALQAAgC9AL0ABwDBAMEACQDHAMcADgDUANUAIADaANoAEQDeAN4AIQDkAOQAIADmAOYAIADsAOwAIgDuAO4AFQD3APcADgD8APwAIwD+AP4AIwD/AP8ADgEEAQUAIwEKAQoAIwENAQ0AAgEYARgABgEZARkAHAEaARoABwEuAS4ADgEvAS8AFgEwATAAIgEzATMAEQE0ATQAFQE1ATUADQE3ATcADQE5ATkADQFDAUMAEQFEAUQAFQFYAVgAAQFcAVwAIgFdAV0AEQFeAV4AFQGEAYUADwGGAYYAGgGHAYkADwGKAYoAGgGOAY8AGgHoAegAHQHtAe0ACgHwAfAAHgHxAfEAFAH7AfsACwH8AfwACgH9Af0ACwIPAg8AFAIeAiAAFAJAAkAACgJDAkMACwJVAlUAEAJXAlgAAQKLAowAAQKOAo4AEgKQApYAAgKXApcAEAKYApsABAKhAqUAAQKmAqkACAKqAqoADAKrArEAAwKyArIAEwKzArYABQK7ArsACQK8AsAABgLFAsYABwLHAscAAgLIAsgAAwLJAskAAgLKAsoAAwLLAssAAgLMAswAAwLNAs0AEALOAs4AEwLPAs8AEALQAtAAEwLRAtEAEALSAtIAEwLTAtMAEALUAtQAEwLVAtUAAQLXAtcABALYAtgABQLZAtkABALaAtoABQLbAtsABALcAtwABQLdAt0ABALeAt4ABQLfAt8ABALgAuAABQLqAuoACQL2AvYACAL4AvgADQL6AvoAFwL8AvwAFwL+Av4AFwMAAwAAFwMDAwMACQMFAwUACQMHAwgACQMJAwkAAQMKAwoABgMLAwsAAQMMAwwABgMNAw0AAQMOAw4ABgMQAxAAGwMSAxIAGwMUAxQAGwMfAx8AEgMhAyEAEgMjAyMAEgMlAyUACAMnAycACAMpAykACAMrAysACAMtAy0ACAMvAy8ACAMxAzEAGAMzAzMADAM0AzQABwM1AzUADAM2AzYAGQM3AzcAHwM4AzgAGQM5AzkAHwM6AzoAGQM7AzsAHwNAA0EACgNCA0IAHQNDA0kACwNUA1gACgNeA2AACwNlA2UACgN2A3YAFAN3A3oAHgN+A4AACgOJA4kAHQOXA5cAAgOYA5gABAObA5sAAQOcA5wADAOfA58AAgOgA6AAJAOhA6EABAOiA6IAGQOlA6UADQOoA6gAAQOpA6kAJQOqA6oAEgOrA6sADAOsA6wAEQOuA64ADAOxA7EACQO1A7UABgO3A7cABwO7A7sABgO+A74ABAO/A78AFgPDA8MACAPEA8UADQPGA8YAIQPHA8cAAgPIA8gAJAPJA8kAFgPKA8oABAPOA84AAQPQA9AAJQPRA9EAEAPSA9IAEgPTA9MAEQPUA9QAAwPVA9UABQPXA9cABgPYA9gADgPZA9kAEwPaA9oABwPbA9sAFQPcA9wABQPdA90AIgPjA+MABwPkA+QAGAPmA+YAGAPoA+gAGAPqA+oADAPrA+sABwPsA+0ADwPwA/AADwPyA/IACQPzA/MAAgP0A/QAAwP1A/UABAP3A/cABQP7A/sAHAP8A/wABwQBBAEAEAQCBAIAEwQDBAMADAQEBAQABwQGBAYAEQQHBAcAFQQJBAkAAgQKBAoAAwQLBAsAAgQMBAwAAwQPBA8ABAQQBBAABQQSBBMABQQUBBQAEQQVBBUAFQQcBBwAAQQdBB0ABgQhBCEABgQjBCMADgQkBCQAIQQlBCUABwQmBCYAIQQnBCcABwQoBCgAIQQpBCkABwQvBC8AAgQwBDAAAwQxBDEAAgQyBDIAAwQzBDMAAgQ0BDQAAwQ1BDUAAgQ2BDYAAwQ3BDcAAgQ4BDgAAwQ5BDkAAgQ6BDoAAwQ7BDsAAgQ8BDwAAwQ9BD0AAgQ+BD4AAwQ/BD8AAgRABEAAAwRBBEEAAgRCBEIAAwRDBEMAAgREBEQAAwRFBEUAAgRGBEYAAwRHBEcABARIBEgABQRJBEkABARKBEoABQRLBEsABARMBEwABQRNBE0ABAROBE4ABQRPBE8ABARQBFAABQRRBFEABARSBFIABQRTBFMABARUBFQABQRVBFUABARWBFYABQRbBFsAAQRcBFwABgRdBF0AAQReBF4ABgRfBF8AAQRgBGAABgRhBGEAAQRiBGIABgRjBGMAAQRkBGQABgRlBGUAAQRmBGYABgRnBGcAAQRoBGgABgRwBHAABgRzBHMACAR1BHUACASBBIEADASCBIIABwSDBIMADASEBIQABwSFBIUADASGBIYABwSIBIgAEgSMBIwAFgSNBI0AIgSQBJAACQSSBJIAIASTBJMAFgSVBJUADQSXBJcADASpBKkACQSqBKoAAgSrBKsAAwSsBKwABASwBLAAAQSxBLEABgSzBLMAGwS3BLcAJAS4BLgADgS5BLkAAQS7BLsAAQS+BL4ACQS/BL8ADQTBBMEADQTDBMMAFwTGBMYACQTIBMgACQTJBMkAAQTKBMoAJQTLBMsADgTNBM0AGwTQBNAAEgTSBNIACATTBNMAHATUBNQABwTVBNUAHATWBNYABwTXBNcAGATZBNkAGQTaBNoAHwTbBNsAAQTcBNwACwTgBOAACgTjBOMACwTpBOkAFATuBO4AHQT5BPkAFAT7BPsACwUCBQIACgUGBQYAHQABAAYFBgAPAAAAAAAAAAAADwAAAAAAAAAAABgAGwAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAACAAAAAAAAAAIAAAAAACMAAAAAAAAAAAACAAAAAgAAABQADQALABoAFgAQAAwAFwAAAAAAAAAAAAAAAAAGAAAAAQABAAEAAAABAAAAAAAAAAAAAAADAAMABwADAAEAAAARAAAACAAJAAAAEwAJAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAEAAAAAAAAAAgABAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAgAEAAAAAAAAAAAAAAAAAAEAAAAJAAAAAAAAAAMAAAAAAAAAAAAAAAAAAQABAAAACAAAAAAAAAAAAAAAAAANAAIAHgAAAA0AAAAAAAAAEAAAAAAAHgAfAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABMAAAADAAMAIQADAAMAAwAAAAEAAwAiAAMAAwAAAAAAAwAAAAMAAAAAAAEAIQADAAAAAAACAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAACAAcAGgAJAAIAAAACAAEAAgAAAAIAAQAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAABAAEwAAAAMAAAAAAA0AAAAAAAMAAAADAAAAAAACAAEAEAATAA0AAAAgACIAAAAAAAAAAAAAAAAAAAAeACEAAAADAAAAAwAAAAMAAAAAAAAAAAADABAAEwAAAAEAAQAAAAAAAAAAAB4AAAAAAAAAAgABAAAAAAAAAB4AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAGwAAAA8ADwAYAA8ADwAPABgAAAAAAAAAGAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASABkAJAAAAA4AFQAcAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAKAAUACgAAAAAAAAAAAAAAAAAVAAUAAAAAABUAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAABUABQASABkAFQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAAACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAAAAAAAAAAABAAEAAQABAAEAAQABAACAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgACAAIAAgALAAsACwALAAwABgAGAAYABgAGAAYABgABAAEAAQABAAEAAAAAAAAAAAADAAcABwAHAAcABwAIAAgACAAIAAkACQAEAAYABAAGAAQABgACAAEAAgABAAIAAQACAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAgABAAIAAQACAAEAAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMAAwACAAcAAgAHAAIABwAAAAAAAAAAAAAAAAAUABEAFAARABQAEQAUABEAFAARAA0AAAANAAAADQAAAAsACAALAAgACwAIAAsACAALAAgACwAIABYAAAAMAAkADAAXAB0AFwAdABcAHQAAAAAAAgAAAAAAAAAAAAoACgAKAAoACgAKAAoABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUADgAOAA4ADgAS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AiQCJQInAikChwNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA5MDXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwUQA3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGBRMDhwOIA4oDiQOLA4wDjQOOA48DkAORA5IDlAOVA5YFEQUSBNwE3QTeBN8E6QTsBOoE6wTwBPEE8gTgBOEE4gT7BP4E/wUCBQQFBQIRBQcE8wT0BPUE9gT3BPgE+QT6BRQFFQUWBRcFCAUKBQsCKAUNAioFDgUMAiYCHAIiBRwFHQACBwAA+gH3AoIB4QHgAd8B3gHdAdwB2wHaAdkB2AJDAkICQQJAAjgB9gH1AfQB8wHyAfEB8AHvAe4B7QHsAesB6gHpAegB5wHmAeUB5AHjAeIB+AH5AoQChgKFAocCgwKIAmIB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CEAIRBQ8CEgITAhQCFQIWAhcCGAIZAhoCGwJLAh0CHgIfAiAFCQIhAiMCJAIlAiYCJwIoAikCKwIsAi4CLQNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QFEAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgUTA4cDiAOKA4kDiwOMA40DjgOPA5ADkQOSA5MDlAOVA5YFEQUSBNwE3QTeBN8E4AThBOIE4wTkBOUE5gTnBOgE6QTqBOsE7ATtBO4E7wTwBPEE8gTzBPQE9QT2BPcE+AIPBPkE+gT7BPwE/QT+BP8FAAUBBQIFAwUEBQUFBgUHBRQFFQUWBRcFCAUKBQsFDQIqBQ4FDAIcAiIFHAUdAAEAAQF7AAEAAQBLAAEAAQC7AAEAAQA2AAEAAQATAAEAAgMZAxoAAgbkBtgAAgbmBtgAAQbuAAEG8AABBvIAAgABABQAHQAAAAEAAgAvAE8AAQADAEkASwJ6AAIAAAABBt4AAQAGAssCzALdAt4DYANpAAEABgBNAE4C8gPfA+EEWgACAAMBlAGUAAAB1QHXAAECLwI1AAQAAgACAKgArAABASQBJwABAAEADAAnACgAKwAzADUARgBHAEgASwBTAFQAVQACAAIAFAAdAAACZQJuAAoAAgAGAE0ATQAGAE4ATgAEAvIC8gAFA98D3wADA+ED4QACBFoEWgABAAIABAAUAB0AAAJ2AnYACgKBAoEACwSeBKUADAACAAYAGgAaAAAAHAAcAAECWgJfAAICYwJjAAgCZQJuAAkCdQJ1ABMAAQAUABoAHAJaAlsCXAJdAl4CXwJjAnUCdgKBBJ4EnwSgBKEEogSjBKQEpQABBd4AAQXgAAEF4gABBeQAAQXmAAEF6AABBeoAAQXsAAEF7gABBfAAAQXyAAEF9AABBfYAAQX4AAEF+gACBfwGAgACBgIGCAACBggGDgACBg4GFAACBhQGGgACBhoGIAACBiAGJgACBiYGLAACBiwGMgACBjIGOAACBjgGPgADBj4GRAZKAAMGSAZOBlQAAwZSBlgGXgADBlwGYgZoAAMGZgZsBnIAAwZwBnYGfAADBnoGgAaGAAMGhAaKBpAABAaOBpQGmgagAAQGnAaiBqgGrgAFBqoGsAa2BrwGwgAFBrwGwgbIBs4G1AAFBs4G1AbaBuAG5gAFBuAG5gbsBvIG+AAFBvIG+Ab+BwQHCgAFBwQHCgcQBxYHHAAFBxYHHAciBygHLgAFBygHLgc0BzoHQAAFBzoHQAdGB0wHUgAGB0wHUgdYB14HZAdqAAYHYgdoB24HdAd6B4AABgd4B34HhAeKB5AHlgAGB44HlAeaB6AHpgesAAYHpAeqB7AHtge8B8IABge6B8AHxgfMB9IH2AAGB9AH1gfcB+IH6AfuAAcILgfmB+wH8gf4B/4IBAAHCCYH+ggACAYIDAgSCBgAAQDrAAoARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAIUAhgCHAIkAigCLAI0AkACSAJQAuwC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEHATABNAE2ATgBOgE8AUIBRAFGAUoBTQFaAo0CjwKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAsgCygLMAs4C0ALSAtQC1gLYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvIC9QL3AvkC+wL9Av8DAQMDAwUDBwMKAwwDDgMQAxIDFAMWAxgDGgMcAx4DIAMiAyQDJgMoAyoDLAMuAzADMgM0AzcDOQM7Az0DPwOvA7ADsQOyA7QDtQO2A7cDuAO5A7oDuwO8A70D1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPlA+cD6QPrBAAEAgQEBBIEGQQfBCUEjwSQBJQEmAUZBRsAAQD6AAgACgAUABUAFgAXABgAGQAaABsAHAAdACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQGnAa0BsgG1AosCjAKOApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAscCyQLLAs0CzwLRAtMC1QLXAtkC2wLdAt8C4QLjAuUC5wLpAusC7QLvAvEC8wL0AvYC+AL6AvwC/gMAAwIDBAMGAwkDCwMNAw8DEQMTAxUDFwMZAxsDHQMfAyEDIwMlAycDKQMrAy0DLwMxAzMDNQM2AzgDOgM8Az4DlwOYA5kDmgObA5wDnQOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD5APmA+gD6gP/BAEEAwQYBB4EJASOBJMElwUYBRoBzAACAE0BzQACAFABzgADAEoATQHPAAMASgBQAAEAAQBKAcsAAgBKAdEAAgBYAdAAAgBYAAEAAwBKAFcAlQAAAAEAAQABAAEAAAADBLcAAgCtAs0AAgCpBL0AAgCtBMoAAgCpBLgAAgCtAs4AAgCpBKcAAgCpBL4AAgCtBFoAAgCtBMsAAgCpAzwAAgCpAz4AAgCpAz0AAgCpAz8AAgCpBLYAAgCpBLsAAgHKBLkAAgCtBKYAAgCpAucAAgHKA/EAAgCpBMUAAgCtAx8AAgHKBNAAAgCtBNUAAgCtBNMAAgCqAzYAAgCpBNkAAgCtBLwAAgHKBLoAAgCtA/IAAgCpBMYAAgCtAyAAAgHKBNEAAgCtBNYAAgCtBNQAAgCqAzcAAgCpBNoAAgCtBL8AAgCpAvgAAgHKBMEAAgCtAvoAAgCpAvwAAgHKBMMAAgCtAxUAAgCpAxsAAgHKBM4AAgCtA+YAAgCpBNcAAgCtA+QAAgCoBMAAAgCpAvkAAgHKBMIAAgCtAvsAAgCpAv0AAgHKBMQAAgCtAxYAAgCpAxwAAgHKBM8AAgCtA+cAAgCpBNgAAgCtA+UAAgCoAw8AAgCpAxEAAgHKBMwAAgCtBLIAAgCsAxAAAgCpAxIAAgHKBM0AAgCtBLMAAgCsAwIAAgCpAwQAAgHKBMcAAgCtBKgAAgCoAqAAAgCqAqoAAgCpBIEAAgCtA+oAAgCoBIMAAgCrBIUAAgCqAwMAAgCpAwUAAgHKBMgAAgCtBKkAAgCoArsAAgCqAsUAAgCpBIIAAgCtA+sAAgCoBIQAAgCrBIYAAgCqArgAAgCpArcAAgCoBFgAAgCrAuwAAgCqBK8AAgCsBGkAAgCpBHEAAgCtBGsAAgCoBG0AAgCrBG8AAgCqBGoAAgCpBHIAAgCtBGwAAgCoBG4AAgCrBHAAAgCqBHcAAgCpBH8AAgCtBHkAAgCoBHsAAgCrBH0AAgCqBHgAAgCpBIAAAgCtBHoAAgCoBHwAAgCrBH4AAgCqApEAAgCpBC8AAgCtApAAAgCoBDEAAgCrApMAAgCqBKoAAgCsApkAAgCpBEcAAgCtApgAAgCoBEkAAgCrBEsAAgCqBKwAAgCsAp0AAgCpBFkAAgCtApwAAgCoBFcAAgCrAusAAgCqBK4AAgCsAqwAAgCpBDAAAgCtAqsAAgCoBDIAAgCrAq4AAgCqBKsAAgCsArQAAgCpBEgAAgCtArMAAgCoBEoAAgCrBEwAAgCqBK0AAgCsAr0AAgCpBFwAAgCtArwAAgCoBF4AAgCrAr8AAgCqBLEAAgCsAsIAAgCpBHQAAgCtAsEAAgCoBHYAAgCrAyYAAgCqBLUAAgCsAqIAAgCpBFsAAgCtAqEAAgCoBF0AAgCrAqQAAgCqBLAAAgCsAqcAAgCpBHMAAgCtAqYAAgCoBHUAAgCrAyUAAgCqBLQAAgCsBMkAAwCqAKkE0gADAKoAqQACABEAJQApAAAAKwAtAAUALwA0AAgANgA7AA4APQA+ABQARQBJABYASwBNABsATwBUAB4AVgBbACQAXQBeACoAgQCBACwAgwCDAC0AhgCGAC4AiQCJAC8AjQCNADAAmACbADEA0ADQADUAAA==\",\r\n \"Roboto-MediumItalic.ttf\": \"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BGoAWwRqAAkF0gA7BKkAMgQmAA4EnAA0BEYABwPWAB4H7wAJBM7/2gLe//UC3v/zAt4ACwLeABYC3gAlAt4ABQLeADQDmQCRApoBCAPCAAkEGv+HBJIAOwUZACsFAAArBBAAFAUNACsECQAUBFcACQReADkEPwAJBHb/mgHvAOgDhQEEAAD9JwPZANwD2wAWA+wA3APcANsDnwAJA4EBBAOBAQUC6ACJAugAZgLoAH4C6ACJAugAmALoAHgC6ACnBUoAbAVzAGsFVQArBawAbgWuAG0ECQCrBF8AHAQ3/4EEl//RBEn/2AQOADEDhQEFAa3/uAZmADsEiwBFAfz/AARz/6kEc//ZBHP/yQRzABMEcwBMBHMAIgRzAFcEcwAxBHMANwRzAPgCH/8EAh//BAIRACMCEf98AhEAIwQ/AAkEwQBMBBAAVgRmABAEHgA2BHIANwRuAC0EegAyBG//yAR3ADYEKAA6BGYALgQ4/58DmwCrBOYAJAOn/+8GFf9+A+gACQSZ/9sE5wAiBLYACQH4AAACowBABS8AIAUvACAEbgArBLoAnQKW/+UFJf+jBSX/owUl/6MFJf+jBSX/owUl/6MFJf+jBREAXwRjACYEYwAmBGMAJgRjACYCMgA3AjIANwIyADcCMgA3BYEAJgVZAGIFWQBiBVkAYgVZAGIFWQBiBRQAWAUUAFgFFABYBRQAWAS9AKEELwAcBC8AHAQvABwELwAcBC8AHAQvABwELwAcBA0ANwQoADoEKAA6BCgAOgQoADoCBwAjAgcAIwIHACMCBwAjBFIADQRnADgEZwA4BGcAOARnADgEZwA4BFEASgRRAEoEUQBKBFEASgPN/7wDzf+8BSX/owQvABwFJf+jBC8AHAUl/6MELwAcBREAXwQNADcFEQBfBA0ANwURAF8EDQA3BREAXwQNADcFEQAmBPUAOARjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoFSQBmBGb/+QVJAGYEZv/5BUkAZgRm//kFSQBmBGb/+QWBACYEUAANAjIANwIHABMCMgA3AgcAIwIyADcCBwAjAjL/jgH6/3UCMgA3BoIANwPsACAETwAEAhX/BATnACYEDAARBDEAJgH6ACAEMQAmAfr/pgQxACYCkAAgBDEAJgLWACAFgQAmBFIADQWBACYEUgANBYEAJgRSAA0EUgANBVkAYgRnADgFWQBiBGcAOAVZAGIEZwA4BOIAJgK+ABEE4gAmAr7/nwTiACYCvgARBLQAJgP/ABsEtAAmA/8AGwS0ACYD/wAbBLQAJgP/ABsEtAAmA/8AGwS6AJ0ClgA/BLoAnQKWAD8EugCdAr4APwUUAFgEUQBKBRQAWARRAEoFFABYBFEASgUUAFgEUQBKBRQAWARRAEoFFABYBFEASgbVALUFwgB5BL0AoQPN/7wEvQChBK7/5QPo/+YErv/lA+j/5gSu/+UD6P/mB0X/jQaOAA4FVwAWBGMAKgRX/5YEV/+WBB4AYwR2/5oEdv+aBHb/mgR2/5oEdv+aBHb/mgR2/5oEXgA5A8IACQPCAAkDwgAJA8IACQHvABoB7wAaAe8AGgHvABoEtgAJBJkAOwSZADsEmQA7BJkAOwSZADsEZgA4BGYAOARmADgEZgA4BB4AbAR2/5oEdv+aBHb/mgReADkEXgA5BF4AOQReADkEVwAJA8IACQPCAAkDwgAJA8IACQPCAAkEgwA/BIMAPwSDAD8EgwA/BLcACQHvAA4B7wAaAe8AGgH5/5cB7wAaA7n/8wQ8AAkDmwAJA5sACQObAAkDmwAJBLYACQS2AAkEtgAJBJkAOwSZADsEmQA7BEMACQRDAAkEQwAJBBYADwQWAA8EFgAPBBYADwQeAGMEHgBjBB4AYwRmADgEZgA4BGYAOARmADgEZgA4BGYAOAXaAIsEHgBsBB4AbAQL/9YEC//WBAv/1gUl/6MEx/+6BeX/wgKW/8YFbQAmBSH/uAVEAB4CkAAJBSX/owTmACYEYwAmBK7/5QWBACYCMgA3BOcAJgbJACYFgQAmBVkAYgT0ACYEugCdBL0AoQTm/8ACMgA3BL0AoQRhADsEQwAoBGMAEQKQAGYEPABXBHcAIQRnADgEnf/eA9oAZAQ4/58CkABEBDwAVwRnADgEPABXBmEAUgRjACYEUgArBLQAJgIyADcCMgA3BE8ABAUAACsE5wAmBOQAmQUl/6ME5gAmBFIAKwRjACYFegAlBskAJgWBACYFWQBiBYIAKwT0ACYFEQBfBLoAnQTm/8AELwAcBCgAOgRvABcEZwA4BF3/yAQNADcDzf+8A+j/ugQoADoDQQAWA/8AGwH6ACACBwAjAfL/AgRKACIDzf+8BtUAtQXCAHkG1QC1BcIAeQbVALUFwgB5BL0AoQPN/7wBTACRAnoAnQQbADMCFf8EAa0AjQbJACYGwwAPBSX/owQvABwEYwAmBXoAJQQoADoEbwAXBYUAdgWfAD8E8QCoA+4AdQg0ADgJJgBiBLYAHwP4ABcFEQBfBA0ANwS9AKED7QB1AjIANwdu/6QGVf+wAjIANwUl/6MELwAcBSX/owQvABwHRf+NBo4ADgRjACYEKAA6BWIASwQZADQEGQA0B27/pAZV/7AEtgAfA/gAFwV6ACUEbwAXBXoAJQRvABcFWQBiBGcAOAVQAGEEZQA0BVAAYQRlADQFIABIBBkAIATkAJkDzf+8BOQAmQPN/7wE5ACZA83/vAVaAMQEQwBtBsUALAZIACMEXwA4BSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgIyADcCBwAjAjL//wH6/+MFWQBiBGcAOAVZAGIEZwA4BVkAYgRnADgFWQBiBGcAOAVZAGIEZwA4BVkAYgRnADgFWQBiBGcAOAVmAFwEegA0BWYAXAR6ADQFZgBcBHoANAVmAFwEegA0BWYAXAR6ADQFFABYBFEASgUUAFgEUQBKBXcAWATAAEoFdwBYBMAASgV3AFgEwABKBXcAWATAAEoFdwBYBMAASgS9AKEDzf+8BL0AoQPN/7wEvQChA83/vAR9//QEugCdA9sAVAVaAMQEQwBtBFIAKwNBABYF7ABVBKD/8gRQAA0E2wAkBNsAJARSAAADQf/HBRQAPwQkACgEvQChA+0AUgTm/8AD6P+6BEMAKARG/8IGBAB8BGkADQRpACYEaQANBGkAWAR9AHEEkQBLBH0AjASRAHMFSQBmBGb/+QWBACYEUgANBSX/owQvABwEYwAmBCgAOgIy/88CB/+ABVkAYgRnADgE4gAmAr4ADAUUAFgEUQBKBMj/hQTmACYEXQAQBREAJgRfADgFEQAmBF8AOAWBACYEUAANBOcAJgQMABEE5wAmBAwAEQQxACYB+v/jBskAJgbDAA8FgQAm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AGQAaQB1AG0AIABJAHQAYQBsAGkAYwBWAGUAcgBzAGkAbwBuACAAMwAuADAAMAA1ADsAIAAyADAAMgAyAFIAbwBiAG8AdABvAC0ATQBlAGQAaQB1AG0ASQB0AGEAbABpAGMAUgBvAGIAbwB0AG8AIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABHAG8AbwBnAGwAZQAuAEcAbwBvAGcAbABlAEMAaAByAGkAcwB0AGkAYQBuACAAUgBvAGIAZQByAHQAcwBvAG4ARwBvAG8AZwBsAGUALgBjAG8AbQBMAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAEEAcABhAGMAaABlACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADIALgAwAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAHAAYQBjAGgAZQAuAG8AcgBnAC8AbABpAGMAZQBuAHMAZQBzAC8ATABJAEMARQBOAFMARQAtADIALgAwAFIAbwBiAG8AdABvAE0AZQBkAGkAdQBtACAASQB0AGEAbABpAGMAAAADAAD/9AAA/2oAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAIAAj//wAPAAEAAgAOAAAAAAAAAigAAgBZACUAPgABAEQAXgABAGoAagABAHAAcAABAHUAdQABAIEAgQABAIMAgwABAIYAhgABAIkAiQABAIsAlgABAJgAnwABAKEAowABAKUApgABAKgArQADALEAsQABALoAuwABAL8AvwABAMEAwQABAMMAxAABAMcAxwABAMsAywABAM0AzgABANAA0QABANMA0wABANoA3gABAOEA4QABAOUA5QABAOcA6QABAOsA+wABAP0A/QABAP8BAQABAQMBAwABAQgBCQABARYBGgABARwBHAABASABIgABASQBJwADASoBKwABATMBNAABATYBNgABATsBPAABAUEBRAABAUcBSAABAUsBTQABAVEBUQABAVQBWAABAV0BXgABAWIBYgABAWQBZAABAWgBaAABAWoBbAABAW4BbgABAXABcAABAcsB0QACAeIB9gABAfoB+gABAgMCAwABAgUCBQABAgwCDgABAhACEQABAhMCEwABAhcCFwABAhkCGwABAiECIQABAiYCKAAB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/+gEX//oBGH/6ARj/+gEZf/oBGf/6ARp/+gEa//oBG3/6ARv/+gEcf/oBIH/3wSD/98Ehf/fBIj/4ASK/+EEi//gBJf/3wSqABAEsP/oBMn/6ATQ/+AE0//gBNX/4AC6AEf/3ABI/9wASf/cAEv/3ABR/+EAUv/hAFP/1gBU/+EAVf/cAFn/3QBa/+EAXf/hAJT/3ACZ/9wAm//dALv/3AC9/+EAvv/1AL//5gDB/+EAwv/rAMP/6QDF//AAxv/nAMj/3ADJ/9wAyv/jAMv/3QDM/84Azf/UAM7/2wDs/+EA8P/hAPH/4QDz/+EA9P/hAPX/4QD3/9wA+P/hAPr/4QD7/+EA/v/hAQD/4QED/9wBBf/hARj/1gEa/+EBHv/cASL/3AEr/+EBNv/hATz/4QE+/+EBQv/cAVP/4QFV/+EBV//hAVz/4QFg/9wBYf/cAWv/3AKy/9wCs//cArT/3AK1/9wCtv/cArv/4QK8/9YCvf/WAr7/1gK//9YCwP/WAsH/3QLC/90Cw//dAsT/3QLF/+ECxv/hAs7/3ALQ/9wC0v/cAtT/3ALW/9wC2P/cAtr/3ALc/9wC3v/cAuD/3ALi/9wC5P/cAub/3ALo/9wDA//hAwX/4QMH/+EDCP/hAwr/1gMM/9YDDv/WAyb/3QMo/90DKv/dAyz/3QMu/90DMP/dAzT/4QOv/9wDsf/hA7P/3QO1/9YDt//hA7r/3QO7/9YDvP/dA9X/3APW/+ED1//WA9j/4QPZ/9wD2v/hA9z/3APd/+ED4v/hA+P/4QPr/+ED8v/hA/f/3AP4/+ED/P/hA/3/3AQC/9wEBP/hBBD/3AQS/9wEE//cBBn/4QQb/+EEHf/WBB//3AQh/9YEJf/hBCf/4QQp/+EELf/hBC7/3ARI/9wESv/cBEz/3ARO/9wEUP/cBFL/3ARU/9wEVv/cBFz/1gRe/9YEYP/WBGL/1gRk/9YEZv/WBGj/1gRq/9wEbP/cBG7/3ARw/9YEcv/cBHT/3QR2/90EeP/dBHr/3QR8/90Efv/dBID/3QSC/+EEhP/hBIb/4QSN/+EEqf/hBK3/3ASx/9YEtf/dBLr/3AS8/9wExv/hBMj/4QTU/+EE1v/hAL8ABgAMAAsADABH/+gASP/oAEn/6ABKAAwAS//oAFP/6gBV/+gAWgALAF0ACwCU/+gAmf/oALv/6AC9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/8AB/f/AAkP/wAKQ/04Ckf9OApL/TgKT/04ClP9OApX/TgKW/04Cq//eAqz/3gKt/94Crv/eAq//3gKw/94Csf/eArL/6wKz/+sCtP/rArX/6wK2/+sCvP/rAr3/6wK+/+sCv//rAsD/6wLB/+oCwv/qAsP/6gLE/+oCxf/oAsb/6ALH/04CyP/eAsn/TgLK/94Cy/9OAsz/3gLO/+sC0P/rAtL/6wLU/+sC1v/rAtj/6wLa/+sC3P/rAt7/6wLg/+sC4v/rAuT/6wLm/+sC6P/rAvb/DQMK/+sDDP/rAw7/6wMfABQDIQAUAyMAFAMm/+oDKP/qAyr/6gMs/+oDLv/qAzD/6gM0/+gDQ//AA0T/wANF/8ADRv/AA0f/wANI/8ADSf/AA17/wANf/8ADYP/AA5f/TgOf/04Dr//rA7P/6gO1/+sDt//oA7r/6gO7/+sDvP/qA8P/DQPH/04D0gAUA9T/3gPV/+sD1//rA9n/6wPa/+gD3P/rA+P/6APr/+gD8/9OA/T/3gP3/+sD/P/oA/3/6wQC/+sEBP/oBAn/TgQK/94EC/9OBAz/3gQQ/+sEEv/rBBP/6wQd/+sEH//rBCH/6wQl/+gEJ//oBCn/6AQu/+sEL/9OBDD/3gQx/04EMv/eBDP/TgQ0/94ENf9OBDb/3gQ3/04EOP/eBDn/TgQ6/94EO/9OBDz/3gQ9/04EPv/eBD//TgRA/94EQf9OBEL/3gRD/04ERP/eBEX/TgRG/94ESP/rBEr/6wRM/+sETv/rBFD/6wRS/+sEVP/rBFb/6wRc/+sEXv/rBGD/6wRi/+sEZP/rBGb/6wRo/+sEav/rBGz/6wRu/+sEcP/rBHL/6wR0/+oEdv/qBHj/6gR6/+oEfP/qBH7/6gSA/+oEgv/oBIT/6ASG/+gEiAAUBKr/TgSr/94Erf/rBLH/6wS1/+oEuv/rBLz/6wTQABQE1P/oBNb/6ATc/8AE4//ABPv/wAACAKAABAAEAAAABgAGAAEACwAMAAIAEwATAAQAJQAqAAUALAAtAAsALwA2AA0AOAA4ABUAOgA/ABYARQBGABwASQBKAB4ATABMACAATwBPACEAUQBUACIAVgBWACYAWABYACcAWgBdACgAXwBfACwAigCKAC0AlgCWAC4AnQCdAC8AsQC1ADAAtwC5ADUAuwC7ADgAvQC+ADkAwADBADsAwwDFAD0AxwDOAEAA0gDSAEgA1ADeAEkA4ADvAFQA8QDxAGQA9gD4AGUA+wD8AGgA/gEAAGoBAwEFAG0BCgEKAHABDQENAHEBGAEaAHIBIgEiAHUBLgEwAHYBMwE1AHkBNwE3AHwBOQE5AH0BOwE7AH4BQwFEAH8BVAFUAIEBVgFWAIIBWAFYAIMBXAFeAIQBhAGFAIcBhwGJAIkB6AHoAIwB6gHrAI0B7QHtAI8B8AHwAJAB+wH9AJECQAJAAJQCQwJDAJUCVQJVAJYCVwJYAJcCiwKMAJkCjgKOAJsCkAKlAJwCqgKxALICswK2ALoCuwLAAL4CxQLNAMQCzwLPAM0C0QLRAM4C0wLTAM8C1QLVANAC1wLgANEC6QLrANsC7QLtAN4C7wLvAN8C8QLxAOAC8wLzAOEC+AL4AOIC+gL6AOMC/AL8AOQC/gL+AOUDAAMAAOYDAgMOAOcDEAMQAPQDEgMSAPUDFAMUAPYDHwMfAPcDIQMhAPgDIwMjAPkDMQMxAPoDMwM2APsDOAM4AP8DOgM6AQADQANJAQEDVANYAQsDXgNgARADZQNlARMDdwN6ARQDfgOAARgDiQOJARsDlwOcARwDnwOuASIDsQOxATIDtQO1ATMDtwO3ATQDuwO7ATUDvgO/ATYDwQPCATgDxAPKAToDzAPOAUED0APVAUQD1wPYAUoD2gPdAUwD4wPkAVAD5gPmAVID6APoAVMD6gPtAVQD8AP1AVgD9wP3AV4D+wP8AV8EAQQBAWEEAwQMAWIEDwQQAWwEEgQVAW4EHAQdAXIEIQQhAXQEIwQpAXUELwRXAXwEWQRZAaUEWwRoAaYEcARwAbQEgQSGAbUEiASIAbsEjASNAbwEkASQAb4EkgSTAb8ElQSVAcEElwSXAcIEqASsAcMErgSuAcgEsASxAckEswSzAcsEtwS5AcwEuwS7Ac8EvQS/AdAEwQTBAdMEwwTDAdQExQTLAdUEzQTNAdwE0ATQAd0E0wTXAd4E2QTZAeME2wTcAeQE4ATgAeYE4wTjAecE7gTuAegE+wT7AekFAgUCAeoFBgUGAesAAgCaAAYABgAAAAsACwABABAAEAACABIAEgADACUAKQAEACwANAAJADgAPgASAEUARwAZAEkASQAcAEwATAAdAFEAVAAeAFYAVgAiAFoAWgAjAFwAXgAkAIoAigAnAJYAlgAoALEAtAApAL0AvQAtAMEAwQAuAMcAxwAvANQA1QAwANcA1wAyANoA2gAzANwA3gA0AOAA5gA3AOwA7AA+AO4A7gA/APcA9wBAAPwA/ABBAP4A/wBCAQQBBQBEAQoBCgBGAQ0BDQBHARgBGgBIAS4BMABLATMBNQBOATcBNwBRATkBOQBSATsBOwBTAUMBRABUAVQBVABWAVYBVgBXAVgBWABYAVwBXgBZAYQBigBcAY4BjwBjAegB6ABlAe0B7QBmAfAB8QBnAfsB/QBpAg8CDwBsAh4CIABtAkACQABwAkMCQwBxAlUCVQByAlcCWABzAosCjAB1Ao4CjgB3ApACtgB4ArsCwACfAsUC1QClAtcC4AC2AukC6wDAAu0C7QDDAu8C7wDEAvEC8QDFAvMC8wDGAvYC9gDHAvgC+ADIAvoC+gDJAvwC/ADKAv4C/gDLAwADAADMAwIDDgDNAxADEADaAxIDEgDbAxQDFADcAx8DHwDdAyEDIQDeAyMDIwDfAyUDJQDgAycDJwDhAykDKQDiAysDKwDjAy0DLQDkAy8DLwDlAzEDMQDmAzMDOwDnA0ADSQDwA1QDWAD6A14DYAD/A2UDZQECA3YDegEDA34DgAEIA4kDiQELA5cDnAEMA58DrgESA7EDsQEiA7UDtQEjA7cDtwEkA7sDuwElA74DvwEmA8EDygEoA8wDzgEyA9AD1QE1A9cD3QE7A+MD5AFCA+YD5gFEA+gD6AFFA+oD7QFGA/AD9QFKA/cD9wFQA/sD/AFRBAEEDAFTBA8EEAFfBBIEFQFhBBwEHQFlBCEEIQFnBCMEKQFoBC8EVwFvBFkEWQGYBFsEaAGZBHAEcAGnBHMEcwGoBHUEdQGpBIEEhgGqBIgEiAGwBIwEjQGxBJAEkAGzBJIEkwG0BJUElQG2BJcElwG3BKgErAG4BK4ErgG9BLAEsQG+BLMEswHABLcEuQHBBLsEuwHEBL0EvwHFBMEEwQHIBMMEwwHJBMUEywHKBM0EzQHRBNAE0AHSBNIE1wHTBNkE3AHZBOAE4AHdBOME4wHeBOkE6QHfBO4E7gHgBPkE+QHhBPsE+wHiBQIFAgHjBQYFBgHkAAIBdAAGAAYADwALAAsADwAQABAAGgASABIAGgAlACUAAgAmACYAJAAnACcAEAAoACgAAQApACkABAAuAC4ACAAv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AAAABAAAAAAAAAAAAAAAAAAAAAAAAAACAAcAGgAJAAIAAAACAAEAAgAAAAIAAQAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAABAAEwAAAAMAAAAAAA0AAAAAAAMAAAADAAAAAAACAAEAEAATAA0AAAAgACIAAAAAAAAAAAAAAAAAAAAeACEAAAADAAAAAwAAAAMAAAAAAAAAAAADABAAEwAAAAEAAQAAAAAAAAAAAB4AAAAAAAAAAgABAAAAAAAAAB4AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAGwAAAA8ADwAYAA8ADwAPABgAAAAAAAAAGAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASABkAJAAAAA4AFQAcAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAKAAUACgAAAAAAAAAAAAAAAAAVAAUAAAAAABUAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAABUABQASABkAFQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAAACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAAAAAAAAAAABAAEAAQABAAEAAQABAACAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgACAAIAAgALAAsACwALAAwABgAGAAYABgAGAAYABgABAAEAAQABAAEAAAAAAAAAAAADAAcABwAHAAcABwAIAAgACAAIAAkACQAEAAYABAAGAAQABgACAAEAAgABAAIAAQACAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAgABAAIAAQACAAEAAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMAAwACAAcAAgAHAAIABwAAAAAAAAAAAAAAAAAUABEAFAARABQAEQAUABEAFAARAA0AAAANAAAADQAAAAsACAALAAgACwAIAAsACAALAAgACwAIABYAAAAMAAkADAAXAB0AFwAdABcAHQAAAAAAAgAAAAAAAAAAAAoACgAKAAoACgAKAAoABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUADgAOAA4ADgASAAoACgAKAAUABQAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAcABwAHAAcAAAAFQAAAA4ADgAOAA4ADgAOACQAEgASAAAAAAAAAAQAAAAAAAAAAgAMAAAAAAAEAAAAAAAXAAAAAAAAAAAAAAACAAAAAAAMABAAAAAMAAEAAAADAAAACAAAAAcAAAAJAAAAAAAIAAcACAAAAAAAAAAAAAAAAAAjAAAAAAAfAAQAAAAAAAAAAAAAAAAAAgAAAAAAAgANABAABgABAAMABwADAAEACQATAAEAAwARAAAAAAAAAAMACQAWAAAAFgAAABYAAAAMAAkADwAPAAAAAAAPAAAAAwAEAAYAAAAAAAEAAwAAAAAAGgAJAAEAAgAAAAAAAgABAAwACQAAABAAEwAAAAQABgAEAAYAAAAAAAAAAQAAAAEAAQAQABMAAAAAAAAAAwAAAAMAAgAHAAIAAQACAAcAAAAAAB8ACQAfAAkAHwAJACAAIgAAAAMAAQAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAgAHAAIABwACAAcAAgAHAAIABwACAAcAAgAHAAIAAQACAAEAAgABAAIABwACAAEACwAIAAsACAAAAAgAAAAIAAAACAAAAAgAAAAIAAwACQAMAAkADAAJAAAADQAAACAAIgAAAAMAAAAA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BjIGOgX8BoYHVAXABnIGQgYCB2QGCAZKBpIGDgccBcQFyAYUByoFzAXQBdQGUgZaBhoGngc4BdgGfAZiBiAHRgYmBmoGqgYsBdwF4AXkBegGtgbCBs4G2gbmBewAAgcCAOsCggJDAkICQQJAAjgB9gH1AfQB8wHyAfEB8AHvAe4B7QHsAesB6gHpAegB5wHmAeUB5AHjAeICdAKEA0EChgKFA0AB8wKDAogCYgTjBOQB+gH7BOUE5gTnAfwE6AH9Af4B/wTtAgACAATuBO8CAQICAgMCCgT8BP0CCwIMAg0CDgIPAhAFAAUBBQMFBgUPAhICEwIUAhUCFgIXAhgCGQIaAhsCBAIFAgYCBwIIAgkCSwIdAh4CHwIgBQkCIQIjAiQCJQInAikChwNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA5MDXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwUQA3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGBRMDhwOIA4oDiQOLA4wDjQOOA48DkAORA5IDlAOVA5YFEQUSBNwE3QTeBN8E6QTsBOoE6wTwBPEE8gTgBOEE4gT7BP4E/wUCBQQFBQIRBQcE8wT0BPUE9gT3BPgE+QT6BRQFFQUWBRcFCAUKBQsCKAUNAioFDgUMAiYCHAIiBRwFHQACBwAA+gH3AoIB4QHgAd8B3gHdAdwB2wHaAdkB2AJDAkICQQJAAjgB9gH1AfQB8wHyAfEB8AHvAe4B7QHsAesB6gHpAegB5wHmAeUB5AHjAeIB+AH5AoQChgKFAocCgwKIAmIB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CEAIRBQ8CEgITAhQCFQIWAhcCGAIZAhoCGwJLAh0CHgIfAiAFCQIhAiMCJAIlAiYCJwIoAikCKwIsAi4CLQNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QFEAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgUTA4cDiAOKA4kDiwOMA40DjgOPA5ADkQOSA5MDlAOVA5YFEQUSBNwE3QTeBN8E4AThBOIE4wTkBOUE5gTnBOgE6QTqBOsE7ATtBO4E7wTwBPEE8gTzBPQE9QT2BPcE+AIPBPkE+gT7BPwE/QT+BP8FAAUBBQIFAwUEBQUFBgUHBRQFFQUWBRcFCAUKBQsFDQIqBQ4FDAIcAiIFHAUdAAEAAQF7AAEAAQBLAAEAAQC7AAEAAQA2AAEAAQATAAEAAgMZAxoAAgbkBtgAAgbmBtgAAQbuAAEG8AABBvIAAgABABQAHQAAAAEAAgAvAE8AAQADAEkASwJ6AAIAAAABBt4AAQAGAssCzALdAt4DYANpAAEABgBNAE4C8gPfA+EEWgACAAMBlAGUAAAB1QHXAAECLwI1AAQAAgACAKgArAABASQBJwABAAEADAAnACgAKwAzADUARgBHAEgASwBTAFQAVQACAAIAFAAdAAACZQJuAAoAAgAGAE0ATQAGAE4ATgAEAvIC8gAFA98D3wADA+ED4QACBFoEWgABAAIABAAUAB0AAAJ2AnYACgKBAoEACwSeBKUADAACAAYAGgAaAAAAHAAcAAECWgJfAAICYwJjAAgCZQJuAAkCdQJ1ABMAAQAUABoAHAJaAlsCXAJdAl4CXwJjAnUCdgKBBJ4EnwSgBKEEogSjBKQEpQABBd4AAQXgAAEF4gABBeQAAQXmAAEF6AABBeoAAQXsAAEF7gABBfAAAQXyAAEF9AABBfYAAQX4AAEF+gACBfwGAgACBgIGCAACBggGDgACBg4GFAACBhQGGgACBhoGIAACBiAGJgACBiYGLAACBiwGMgACBjIGOAACBjgGPgADBj4GRAZKAAMGSAZOBlQAAwZSBlgGXgADBlwGYgZoAAMGZgZsBnIAAwZwBnYGfAADBnoGgAaGAAMGhAaKBpAABAaOBpQGmgagAAQGnAaiBqgGrgAFBqoGsAa2BrwGwgAFBrwGwgbIBs4G1AAFBs4G1AbaBuAG5gAFBuAG5gbsBvIG+AAFBvIG+Ab+BwQHCgAFBwQHCgcQBxYHHAAFBxYHHAciBygHLgAFBygHLgc0BzoHQAAFBzoHQAdGB0wHUgAGB0wHUgdYB14HZAdqAAYHYgdoB24HdAd6B4AABgd4B34HhAeKB5AHlgAGB44HlAeaB6AHpgesAAYHpAeqB7AHtge8B8IABge6B8AHxgfMB9IH2AAGB9AH1gfcB+IH6AfuAAcILgfmB+wH8gf4B/4IBAAHCCYH+ggACAYIDAgSCBgAAQDrAAoARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAIUAhgCHAIkAigCLAI0AkACSAJQAuwC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEHATABNAE2ATgBOgE8AUIBRAFGAUoBTQFaAo0CjwKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAsgCygLMAs4C0ALSAtQC1gLYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvIC9QL3AvkC+wL9Av8DAQMDAwUDBwMKAwwDDgMQAxIDFAMWAxgDGgMcAx4DIAMiAyQDJgMoAyoDLAMuAzADMgM0AzcDOQM7Az0DPwOvA7ADsQOyA7QDtQO2A7cDuAO5A7oDuwO8A70D1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPlA+cD6QPrBAAEAgQEBBIEGQQfBCUEjwSQBJQEmAUZBRsAAQD6AAgACgAUABUAFgAXABgAGQAaABsAHAAdACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQGnAa0BsgG1AosCjAKOApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAscCyQLLAs0CzwLRAtMC1QLXAtkC2wLdAt8C4QLjAuUC5wLpAusC7QLvAvEC8wL0AvYC+AL6AvwC/gMAAwIDBAMGAwkDCwMNAw8DEQMTAxUDFwMZAxsDHQMfAyEDIwMlAycDKQMrAy0DLwMxAzMDNQM2AzgDOgM8Az4DlwOYA5kDmgObA5wDnQOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD5APmA+gD6gP/BAEEAwQYBB4EJASOBJMElwUYBRoBzAACAE0BzQACAFABzgADAEoATQHPAAMASgBQAAEAAQBKAcsAAgBKAdEAAgBYAdAAAgBYAAEAAwBKAFcAlQAAAAEAAQABAAEAAAADBLcAAgCtAs0AAgCpBL0AAgCtBMoAAgCpBLgAAgCtAs4AAgCpBKcAAgCpBL4AAgCtBFoAAgCtBMsAAgCpAzwAAgCpAz4AAgCpAz0AAgCpAz8AAgCpBLYAAgCpBLsAAgHKBLkAAgCtBKYAAgCpAucAAgHKA/EAAgCpBMUAAgCtAx8AAgHKBNAAAgCtBNUAAgCtBNMAAgCqAzYAAgCpBNkAAgCtBLwAAgHKBLoAAgCtA/IAAgCpBMYAAgCtAyAAAgHKBNEAAgCtBNYAAgCtBNQAAgCqAzcAAgCpBNoAAgCtBL8AAgCpAvgAAgHKBMEAAgCtAvoAAgCpAvwAAgHKBMMAAgCtAxUAAgCpAxsAAgHKBM4AAgCtA+YAAgCpBNcAAgCtA+QAAgCoBMAAAgCpAvkAAgHKBMIAAgCtAvsAAgCpAv0AAgHKBMQAAgCtAxYAAgCpAxwAAgHKBM8AAgCtA+cAAgCpBNgAAgCtA+UAAgCoAw8AAgCpAxEAAgHKBMwAAgCtBLIAAgCsAxAAAgCpAxIAAgHKBM0AAgCtBLMAAgCsAwIAAgCpAwQAAgHKBMcAAgCtBKgAAgCoAqAAAgCqAqoAAgCpBIEAAgCtA+oAAgCoBIMAAgCrBIUAAgCqAwMAAgCpAwUAAgHKBMgAAgCtBKkAAgCoArsAAgCqAsUAAgCpBIIAAgCtA+sAAgCoBIQAAgCrBIYAAgCqArgAAgCpArcAAgCoBFgAAgCrAuwAAgCqBK8AAgCsBGkAAgCpBHEAAgCtBGsAAgCoBG0AAgCrBG8AAgCqBGoAAgCpBHIAAgCtBGwAAgCoBG4AAgCrBHAAAgCqBHcAAgCpBH8AAgCtBHkAAgCoBHsAAgCrBH0AAgCqBHgAAgCpBIAAAgCtBHoAAgCoBHwAAgCrBH4AAgCqApEAAgCpBC8AAgCtApAAAgCoBDEAAgCrApMAAgCqBKoAAgCsApkAAgCpBEcAAgCtApgAAgCoBEkAAgCrBEsAAgCqBKwAAgCsAp0AAgCpBFkAAgCtApwAAgCoBFcAAgCrAusAAgCqBK4AAgCsAqwAAgCpBDAAAgCtAqsAAgCoBDIAAgCrAq4AAgCqBKsAAgCsArQAAgCpBEgAAgCtArMAAgCoBEoAAgCrBEwAAgCqBK0AAgCsAr0AAgCpBFwAAgCtArwAAgCoBF4AAgCrAr8AAgCqBLEAAgCsAsIAAgCpBHQAAgCtAsEAAgCoBHYAAgCrAyYAAgCqBLUAAgCsAqIAAgCpBFsAAgCtAqEAAgCoBF0AAgCrAqQAAgCqBLAAAgCsAqcAAgCpBHMAAgCtAqYAAgCoBHUAAgCrAyUAAgCqBLQAAgCsBMkAAwCqAKkE0gADAKoAqQACABEAJQApAAAAKwAtAAUALwA0AAgANgA7AA4APQA+ABQARQBJABYASwBNABsATwBUAB4AVgBbACQAXQBeACoAgQCBACwAgwCDAC0AhgCGAC4AiQCJAC8AjQCNADAAmACbADEA0ADQADUAAA==\",\r\n \"Roboto-Regular.ttf\": \"AAEAAAARAQAABAAQR0RFRqWLoiAAAb8IAAACWEdQT1PInCKzAAHBYAAAZfhHU1VChRYO9AACJ1gAABX2T1MvMpeDsYsAAAGYAAAAYGNtYXDOyFo6AAAWdAAABoJjdnQgO/gmfQAAL1AAAAD+ZnBnbagFhDIAABz4AAAPhmdhc3AACAAZAAG+/AAAAAxnbHlmnLrJSwAAOpAAAYGgaGVhZAZzHSoAAAEcAAAANmhoZWEKugrAAAABVAAAACRobXR45eWbKgAAAfgAABR8bG9jYQ+pa9gAADBQAAAKQG1heHAIzxDGAAABeAAAACBuYW1lOEJpvQABvDAAAAKqcG9zdP9tAGQAAb7cAAAAIHByZXB5WM7TAAAsgAAAAs4AAQAAAAMBSPgkVmdfDzz1ABsIAAAAAADE8BEuAAAAAN8Gv276Gv3VCTEIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJSvoa/koJMQABAAAAAAAAAAAAAAAAAAAFHwABAAAFHwCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA4wAZAAAAAAAAAAAAfwAAAH8AAACEAChApAAiQTtAHcEfwBuBdwAaQT6AGYBZgBoAr0AhgLJACcDcgAcBIoATgGTAB0CNgAmAhwAkANNABMEfwBzBH8AqwR/AF4EfwBfBH8ANQR/AJoEfwCFBH8ATgR/AHEEfwBkAfAAhQGxACkEEQBIBGQAmAQvAIcDyABLBy8AbQU4AB0E/ACpBTUAeAVAAKkEjACpBGwAqQVzAHoFtQCpAi0AtwRqADUFBQCpBE8AqQb8AKkFtQCpBYEAdwUMAKkFgQBuBO4AqQTAAFEExgAyBTAAjAUYAB0HGQA9BQQAOgTOAA8EywBXAh8AkwNJACkCHwAKA1gAQAOcAAQCeQA5BFoAbQR+AIwEMABdBIMAXwQ+AF0CyAA9BH4AYQRoAI0B8gCOAer/vgQOAI0B8gCcBwQAiwRrAI0EkABcBH4AjASMAF8CtgCNBCEAXwKeAAkEaQCJA+AAIQYDACsD+AAqA8kAFgP4AFkCtQBAAfQAsAK1ABQFcQCDAfQAiwRhAGkEpwBbBbUAaQQ0AA8B7ACUBOgAWwNZAGUGSQBcA5QAkwPBAGUEbgB/BkoAWwOrAI8C/QCDBEcAYQLvAEIC7wA/AoIAewSJAJsD6gBEAhcAlAH8AHQC7wB7A6QAewPAAGcF3ABVBjUAUAY5AHADygBEB3r/8QRFAFkFgQB3BLoApwTCAIwGwgBPBLEAfgSSAEcEiQBcBJwAlQTIAF8FmwAeAfsAnAR0AJsETwAjAioAIwWLAKIEiQCSB6EAaQdEAGEB/AChBYcAXgK6/+MFfwBmBJMAXAWQAIwE8wCJAgT/tAQ4AGMDxACqA44AjgOrAI8DawCCAfIAjgKuAHkCKwAyA8YAewL8AF8CWgB/AAD8pwAA/W4AAPyKAAD9XQAA/CcAAP04Ag4AuAQMAHICFwCUBHMAsgWkACAFcgBnBT8AMgSSAHgFtQCyBJIARgW7AE4FiQBaBVIAcgSGAGQEvQChBAMALwSJAGEEUQBkBCUAbQSJAJIEjwB7ApgAwwRvACYD7ABmBMUAKQSJAJIETgBlBIgAYQQsAFEEXgCQBaMAWAWaAGAGlwB6BKIAegRD/9oGSABLBgAAKwVlAHsIkgAyCKUAsgaDAD4FtACwBQsAowYEADMHQwAbBMAAUAW1ALIFqgAwBQgATQYtAFQF2gCvBXoAlweHALAHwACwBhIAEQbrALIFBQCjBWUAlAcnALcFGABaBG0AYgSTAJ4DXACbBNQALgYhABYEEABYBJ4AnQRTAJ0EoAAsBe8AngSdAJ0EngCdA9kAKAXOAGQEvgCdBFoAaAZ5AJ0GnwCSBPcAHgY2AJ4EWACeBE4AZAaIAJ4EZAAvBGj/5wROAGcGyQAnBuQAnQSJ//0EngCdBwkAnAYsAIEEV//bBywAuAX5AJoE0wAoBEcADwcMAMoGDAC9BtIAkwXiAJcJBQC3B9EAnAQkAFAD2wBMBXIAZwSMAFwFCwAWBAQALwVyAGcEiQBcBwEAnAYkAH4HCQCcBiwAgQUyAHYESABkBP4AdAAA/GYAAPxwAAD9ZQAA/aQAAPoaAAD6KwYJALIE7QCdBFf/2wUbAKkEigCMBGQAogORAJIE2wCyBAYAkgeiABsGYQAWBZoAsgS4AJ0FCgCkBH4AmwaMAEUFhAA/Bf8AqQTZAJ0HzwCpBbQAkggxALAG9ACSBe8AcQTUAG4FGAA6BCoAKgctADQFXQAfBbwAlwSWAGgFcACXBGsAhAVwAIkGMAA/BL7/3QUKAKQEWgCbBf4AMATvACwFswCyBIkAkgYSAKkE7ACdB08AqQY+AJ4FhwBeBKgAaASoAGoEuAA5A6sAOgUuADoEQAAqBPcAVwaVAFoG5QBkBlcANgUsADEESgBTBAgAeQfCAEUGdgA/B/sAqgaiAJAE9wB2BB4AZgWuACQFIQBGBWUAlwYCADAE8wAsAyEAcAQUAAAIKQAABBQAAAgpAAACuQAAAgoAAAFcAAAEfwAAAjAAAAGiAAABAAAAANEAAAAAAAACNAAmAjQAJgVAAKIGPwCQA6YADQGaAGEBmgAwAZgAJAGaAE8C1ABpAtwAPALCACQEagBGBJAAVwKzAIsDxACUBVoAlAF/AFIHqgBEAmcAbAJnAFoDowA8Au8AUQLvADYC7wBcAu8AVgLvADsC7wBPAu8ASgNhAHoC7wBRAu8AewLvAEIC7wA/Au8ANgLvAFwC7wBWAu8AOwLvAE8C7wBKBKcAWwZWAB8GkQCnCHYAqQXrAB8GKwCMBH8AXwXaAB8EIwArBHQAIQVIAF0FTwAfBegAewPOAGgIOgCiBQEAaAUYAJgGJgBUBtcAZQbPAGQGagBaBJAAagWPAKkErwBGBJMAqATFAD8IOgBjAg3/rwSCAGUEZACYBBEAPQQvAIQECAAsAkwAtQKQAG8CBABdBPMAPQRvACAEiwA9BtQAPQbUAD0E7gA9BpsAXwAAAAAINABbCDUAXALvAEIC7wB7Au8AUQQQAFYEEABhBBAAQgQPAHIEEACBBBAAMQQQAE8EEABPBBAAmQQQAGMEIwBIBCsADgRUACcGFQAxBGgAFAR9AHUEJwApBCAARARKAIoEvABaBF0AiwS8AGAE4wCLBgIAiwO1AIsEVQCLA88ALAHpAJgE5ACLBKwAZAPMAIsEIABEBDQAMQOhAA4DrwCLBGgAFAS8AGAEaAAUA4kAPgTPAIsD8ABABWcAYQUXAGEE8wB2BXMAJwR8AGEHQgAoB1AAiwV0ACkEzgCLBFoAiwUlAC4GCwAfBEAASATsAIsETgCMBMEAKAQgACMFKQCLBGoAPQZRAIsGrACLBR0ACQXxAIsETwCLBHwASwZ3AIsEhwBQBBIACwZIAB8EeQCMBQoAjAU3ACQFwwBgBF8ADgSoACcGYgAnBGoAPQRqAIsFxAACBMsAXgRAAEgEvABgBDQAMQPkAEMIIgCLBKsAKALvAD8C7wA2Au8AXALvAFYC7wA7Au8ATwLvAEoDlwCPArUAnwPmAIsEOgAfBMQAZAVMALIFJACyBBQAkwU9ALIEDwCTBIAAiwR8AGEEUQCLBIYAFAH+AJ8DpQCCAAD8owPwAG8D9P9dBA8AaQP1AGkDrwCLA6AAggOfAIIC7wBRAu8ANgLvAFwC7wBWAu8AOwLvAE8C7wBKBYIAfgWvAH4FkwCyBeAAfgXjAH4D1QCgBIIAgwRYAA8EzwA+BGsAZQQuAEoDpQCEAZIAaAakAGAEugCCAfz/tgR/ADsEfwBzBH8AIgR/AHYEfwB2BH8ANgR/AH4EfwBeBH8AcQR/APQCBv+0AgT/tAH7AJwB+//5AfsAnARRAIsFAAB4BCEAOwR+AIwEMwBdBJMAWwSMAFsEnwBaBI4AjAScAFsEPgBdBH4AYQRwAFoDeQBXBNYAaAO1AAEGOgAJA/kAiwS8AGAE4wAwBOMAiwH8AAACNgAmBV4AJQVeACUEhgABBMYAMgKe//QFOAAdBTgAHQU4AB0FOAAdBTgAHQU4AB0FOAAdBTUAeASMAKkEjACpBIwAqQSMAKkCLf/fAi0AsQIt/+oCLf/VBbUAqQWBAHcFgQB3BYEAdwWBAHcFgQB3BTAAjAUwAIwFMACMBTAAjATOAA8EWgBtBFoAbQRaAG0EWgBtBFoAbQRaAG0EWgBtBDAAXQQ+AF0EPgBdBD4AXQQ+AF0B+//EAfsAlgH7/88B+/+6BGsAjQSQAFwEkABcBJAAXASQAFwEkABcBGkAiQRpAIkEaQCJBGkAiQPJABYDyQAWBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTUAeAQwAF0FNQB4BDAAXQU1AHgEMABdBTUAeAQwAF0FQACpBRkAXwSMAKkEPgBdBIwAqQQ+AF0EjACpBD4AXQSMAKkEPgBdBIwAqQQ+AF0FcwB6BH4AYQVzAHoEfgBhBXMAegR+AGEFcwB6BH4AYQW1AKkEaACNAi3/tgH7/5sCLf/NAfv/sgIt/+wB+//RAi0AFwHy//oCLQCqBpcAtwPcAI4EagA1AgT/tAUFAKkEDgCNBE8AogHyAJMETwCpAfIAVgRPAKkCiACcBE8AqQLOAJwFtQCpBGsAjQW1AKkEawCNBbUAqQRrAI0Ea/+7BYEAdwSQAFwFgQB3BJAAXAWBAHcEkABcBO4AqQK2AI0E7gCpArYAUwTuAKkCtgBkBMAAUQQhAF8EwABRBCEAXwTAAFEEIQBfBMAAUQQhAF8EwABRBCEAXwTGADICngAJBMYAMgKeAAkExgAyAsYACQUwAIwEaQCJBTAAjARpAIkFMACMBGkAiQUwAIwEaQCJBTAAjARpAIkFMACMBGkAiQcZAD0GAwArBM4ADwPJABYEzgAPBMsAVwP4AFkEywBXA/gAWQTLAFcD+ABZB3r/8QbCAE8FgQB3BIkAXASA/70EgP+9BCcAKQSGABQEhgAUBIYAFASGABQEhgAUBIYAFASGABQEfABhA+YAiwPmAIsD5gCLA+YAiwHp/7wB6QCOAen/xwHp/7IE4wCLBLwAYAS8AGAEvABgBLwAYAS8AGAEfQB1BH0AdQR9AHUEfQB1BCsADgSGABQEhgAUBIYAFAR8AGEEfABhBHwAYQR8AGEEgACLA+YAiwPmAIsD5gCLA+YAiwPmAIsErABkBKwAZASsAGQErABkBOQAiwHp/5MB6f+qAen/yQHpAAUB6QCHA88ALARVAIsDtQCDA7UAiwO1AIsDtQCLBOMAiwTjAIsE4wCLBLwAYAS8AGAEvABgBEoAigRKAIoESgCKBCAARAQgAEQEIABEBCAARAQnACkEJwApBCcAKQR9AHUEfQB1BH0AdQR9AHUEfQB1BH0AdQYVADEEKwAOBCsADgQjAEgEIwBIBCMASAU4AB0E8P+MBhn/mgKR/6AFlf/6BTL/dgVm//wCmP+bBTgAHQT8AKkEjACpBMsAVwW1AKkCLQC3BQUAqQb8AKkFtQCpBYEAdwUMAKkExgAyBM4ADwUEADoCLf/VBM4ADwSGAGQEUQBkBIkAkgKYAMMEXgCQBHQAmwSQAFwEiQCbA+AAIQRwAFoCmP/kBF4AkASQAFwEXgCQBpcAegSMAKkEcwCyBMAAUQItALcCLf/VBGoANQUkALIFBQCpBQgATQU4AB0E/ACpBHMAsgSMAKkFtQCyBvwAqQW1AKkFgQB3BbUAsgUMAKkFNQB4BMYAMgUEADoEWgBtBD4AXQSeAJ0EkABcBH4AjAQwAF0DyQAWA/gAKgQ+AF0DXACbBCEAXwHyAI4B+/+6Aer/vgRTAJ0DyQAWBxkAPQYDACsHGQA9BgMAKwcZAD0GAwArBM4ADwPJABYBZgBoApAAiQQgAKECBP+0AZoAMAb8AKkHBACLBTgAHQRaAG0EjACpBbUAsgQ+AF0EngCdBYkAWgWaAGAFCwAWBAT/+whZAFwJSgB3BMAAUAQQAFgFNQB4BDAAXQTOAA8EAwAvAi0AtwdDABsGIQAWAi0AtwU4AB0EWgBtBTgAHQRaAG0Hev/xBsIATwSMAKkEPgBdBYcAXgQ4AGMEOABjB0MAGwYhABYEwABQBBAAWAW1ALIEngCdBbUAsgSeAJ0FgQB3BJAAXAVyAGcEjABcBXIAZwSMAFwFZQCUBE4AZAUIAE0DyQAWBQgATQPJABYFCABNA8kAFgV6AJcEWgBoBusAsgY2AJ4EgwBfBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTgAHQRa/8kFOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBIwAqQQ+AF0EjACpBD4AXQSMAKkEPgBdBIwAqQQ+AF0EjP/uBD7/uASMAKkEPgBdBIwAqQQ+AF0EjACpBD4AXQItALcB+wCcAi0ApAHyAIYFgQB3BJAAXAWBAHcEkABcBYEAdwSQAFwFgQBGBJD/wgWBAHcEkABcBYEAdwSQAFwFgQB3BJAAXAV/AGYEkwBcBX8AZgSTAFwFfwBmBJMAXAV/AGYEkwBcBX8AZgSTAFwFMACMBGkAiQUwAIwEaQCJBZAAjATzAIkFkACMBPMAiQWQAIwE8wCJBZAAjATzAIkFkACMBPMAiQTOAA8DyQAWBM4ADwPJABYEzgAPA8kAFgShAF8ExgAyA9kAKAV6AJcEWgBoBHMAsgNcAJsGMAA/BL7/3QRoAI0FBf/UBQX/1ARzAAMDXP/9BTgACwQo/9MEzgAPBAMALwUEADoD+AAqBFEAZARsABIGPwCQBH8AXgR/AF8EfwA1BH8AmgSTAJkEpwCFBJMAZASnAIcFcwB6BH4AYQW1AKkEawCNBTgAHQRaADoEjABfBD4AKQIt/wsB+/7wBYEAdwSQADME7gBWArb/jAUwAIwEaQArBKf/OAT8AKkEfgCMBUAAqQSDAF8FQACpBIMAXwW1AKkEaACNBQUAqQQOAI0FBQCpBA4AjQRPAKkB8gCGBvwAqQcEAIsFtQCp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GRwfkhGaEcIWzBiqEdgUuhJ4EiIRNimwEVQmjhFUEVQTBBIiEXoYRBI8Ee4RChI8FQASIhJaGZIezBcmEloXJiWQJ5Ai1h1kEOwSPBEiPkQRVDe+JJ4okhIIEPIQ+EEuEP4UQhPWGhQ5sC1yNA4sJBKaMLY74hbMISoSmhKaFUYSmhKaEpoyYBqeEpoTfh4GHEAX4iO4HNIRQCIAEQoTVDXkRCwSIhR8KuYbKBLeEiIbshMqFnYUDBLeFyYTBBGaEjwTVBIiHswRQBbMEQoVkBWQFZASmhbMEQoSmhKaEloRQBbMEQoRBC8UEQQRBBEEERwV2hYoERYRLBEQERYREBFeERARiBJaEloSWhJaH5IXJhcmFyYXJhcmFyYXJhGIEWwRbBFsEWwSmhKaEpoSmhKaEloSWhJaEloSWhiqEngSeBJ4EngSeBJ4EngRNhE2ETYRNhFUEwQTBBMEEwQTBBI8EjwXJhJ4FyYSeBcmEngRiBGIEYgRiBJaEWwRNhFsETYRbBE2EWwRNhFsETYSmhFUEpoSmhKaEpoSmhWQEawRrBGsEawSmhFUEpoRVBKaEVQRVBJaEwQSWhMEEloTBBF6EXoReh+SH5IfkhHCGKoSPBiqEdgR2BHYERYRFhEcERAREBEQERAREBEQERARFhEWERYRFhEWERAREBEQERYRLBEsESwRLBEWERYRFhEcFyYRbBKaEpoSWhiqFyYRShFsEdgSmhKaFZASmhKaEloSvB+SGKoWzBKaGKoRVBMEEjwTBBFsHswSmhKaFZAVkBVGFyYRSh7MEWwSmhKaEloSvBGIH5IWzBJ4ETYTBBIiEjwRChE2EUASPBHCEcIRwhiqEjwRBBEEEQQSmhFUFyYSeBFsETYRmhI8EYgYqhI8EpoWzBEKEpoXJhJ4FyYSeBFsETYRNhE2FswRChJaEwQTBBIiFUYSPBVGEjwVRhI8FyYSeBcmEngXJhJ4FyYSeBcmEngXJhJ4FyYSeBcmEngXJhJ4FyYSeBcmEngXJhJ4EWwRNhFsETYRbBE2EWwRNhFsETYRbBE2EWwRNhFsETYSmhKaEloTBBJaEwQSWhMEEloTBBJaEwQSWhMEEloTBBMEGKoSPBiqEjwYqhI8H5IezBFAEVQTfh7MFZAYqhKaEVQXJhJ4EWwSmhJaEwQRehFKEiISWhJaEpoRVBWQFZARrBKa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/+wCtP/sArX/7AK2/+wCzv/sAtD/7ALS/+wC1P/sAtb/7ALY/+wC2v/sAtz/7ALe/+wC4P/sAuL/7ALk/+wC5v/sAuj/7AOv/+wD1f/sA9n/7APc/+wD9//sA/3/7AQC/+wEEP/sBBL/7AQT/+wEH//sBC7/7ARI/+wESv/sBEz/7ARO/+wEUP/sBFL/7ARU/+wEVv/sBGr/7ARs/+wEbv/sBHL/7ASt/+wEuv/sBLz/7ABAACf/5gAr/+YAM//mADX/5gCD/+YAk//mAJj/5gCz/+YAuP/CAMQAEADT/+YBCP/mARf/5gEb/+YBHf/mAR//5gEh/+YBQf/mAWr/5gJV/+YCVv/mAlj/5gJZ/+YCl//mAqH/5gKi/+YCo//mAqT/5gKl/+YCzf/mAs//5gLR/+YC0//mAuH/5gLj/+YC5f/mAuf/5gMJ/+YDC//mAw3/5gM+/+YDm//mA6j/5gPO/+YD0f/mA/7/5gQB/+YEHP/mBB7/5gQg/+YEW//mBF3/5gRf/+YEYf/mBGP/5gRl/+YEZ//mBGn/5gRr/+YEbf/mBG//5gRx/+YEsP/mBMn/5gBHABAAAAASAAAAR//nAEj/5wBJ/+cAS//nAFX/5wCU/+cAmf/nALv/5wDEAA8AyP/nAMn/5wD3/+cBA//nAR7/5wEi/+cBQv/nAWD/5wFh/+cBa//nAYYAAAGKAAABjgAAAY8AAAKy/+cCs//nArT/5wK1/+cCtv/nAs7/5wLQ/+cC0v/nAtT/5wLW/+cC2P/nAtr/5wLc/+cC3v/nAuD/5wLi/+cC5P/nAub/5wLo/+cDr//nA9X/5wPZ/+cD3P/nA/f/5wP9/+cEAv/nBBD/5wQS/+cEE//nBB//5wQu/+cESP/nBEr/5wRM/+cETv/nBFD/5wRS/+cEVP/nBFb/5wRq/+cEbP/nBG7/5wRy/+cErf/nBLr/5wS8/+cATQAGABAACwAQAA0AFABBABIAR//oAEj/6ABJ/+gAS//oAFX/6ABhABMAlP/oAJn/6AC7/+gAyP/oAMn/6AD3/+gBA//oAR7/6AEi/+gBQv/oAWD/6AFh/+gBa//oAYQAEAGFABABhwAQAYgAEAGJABACsv/oArP/6AK0/+gCtf/oArb/6ALO/+gC0P/oAtL/6ALU/+gC1v/oAtj/6ALa/+gC3P/oAt7/6ALg/+gC4v/o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A9z/sAPjAAsD6wALA+wADQPtAA0D8AANA/T/8AP3/7AD/AALA/3/sAQC/7AEBAALBAr/8AQM//AEEP+wBBL/sAQT/7AEHf/WBB//sAQh/9YEJQALBCcACwQpAAsELv+wBDD/8AQy//AENP/wBDb/8AQ4//AEOv/wBDz/8AQ+//AEQP/wBEL/8ARE//AERv/wBEj/sARK/7AETP+wBE7/sARQ/7AEUv+wBFT/sARW/7AEXP/WBF7/1gRg/9YEYv/WBGT/1gRm/9YEaP/WBGr/sARs/7AEbv+wBHD/1gRy/7AEggALBIQACwSGAAsEq//wBK3/sASx/9YEuv+wBLz/sATUAAsE1gALBNz/vwTg/+0E4QANBOP/vwTvAA0E8gANBPv/vwUC/+0FBf/tBQYADgUK/+0FCwANAOcAEP8WABL/FgAl/1YALv74ADgAFABF/94AR//rAEj/6wBJ/+sAS//rAFP/6wBV/+sAVv/mAFn/6gBa/+gAXf/oAJT/6wCZ/+sAm//qALL/VgC0/1YAu//rAL3/6ADI/+sAyf/rAMv/6gDSABQA1gAUAPf/6wED/+sBDf9WARj/6wEa/+gBHv/rASL/6wE5ABQBQv/rAUUAFAFg/+sBYf/rAWv/6wGG/xYBiv8WAY7/FgGP/xYB+//AAf3/wAJD/8ACkP9WApH/VgKS/1YCk/9WApT/VgKV/1YClv9WAqv/3gKs/94Crf/eAq7/3gKv/94CsP/eArH/3gKy/+sCs//rArT/6wK1/+sCtv/rArz/6wK9/+sCvv/rAr//6wLA/+sCwf/qAsL/6gLD/+oCxP/qAsX/6ALG/+gCx/9WAsj/3gLJ/1YCyv/eAsv/VgLM/94Czv/rAtD/6wLS/+sC1P/rAtb/6wLY/+sC2v/rAtz/6wLe/+sC4P/rAuL/6wLk/+sC5v/rAuj/6wL2/vgDCv/rAwz/6wMO/+sDHwAUAyEAFAMjABQDJv/qAyj/6gMq/+oDLP/qAy7/6gMw/+oDNP/oA0P/wANE/8ADRf/AA0b/wANH/8ADSP/AA0n/wANe/8ADX//AA2D/wAOX/1YDn/9WA6//6wOz/+oDtf/rA7f/6AO6/+oDu//rA7z/6gPD/vgDx/9WA9IAFAPU/94D1f/rA9f/6wPZ/+sD2v/oA9z/6wPj/+gD6//oA/P/VgP0/94D9//rA/z/6AP9/+sEAv/rBAT/6AQJ/1YECv/eBAv/VgQM/94EEP/rBBL/6wQT/+sEHf/rBB//6wQh/+sEJf/oBCf/6AQp/+gELv/rBC//VgQw/94EMf9WBDL/3gQz/1YENP/eBDX/VgQ2/94EN/9WBDj/3gQ5/1YEOv/eBDv/VgQ8/94EPf9WBD7/3gQ//1YEQP/eBEH/VgRC/94EQ/9WBET/3gRF/1YERv/eBEj/6wRK/+sETP/rBE7/6wRQ/+sEUv/rBFT/6wRW/+sEXP/rBF7/6wRg/+sEYv/rBGT/6wRm/+sEaP/rBGr/6wRs/+sEbv/rBHD/6wRy/+sEdP/qBHb/6gR4/+oEev/qBHz/6gR+/+oEgP/qBIL/6ASE/+gEhv/oBIgAFASq/1YEq//eBK3/6wSx/+sEtf/qBLr/6wS8/+sE0AAUBNT/6ATW/+gE3P/ABOP/wAT7/8AAAgCgAAQABAAAAAYABgABAAsADAACABMAEwAEACUAKgAFACwALQALAC8ANgANADgAOAAVADoAPwAWAEUARgAcAEkASgAeAEwATAAgAE8ATwAhAFEAVAAiAFYAVgAmAFgAWAAnAFoAXQAoAF8AXwAsAIoAigAtAJYAlgAuAJ0AnQAvALEAtQAwALcAuQA1ALsAuwA4AL0AvgA5AMAAwQA7AMMAxQA9AMcAzgBAANIA0gBIANQA3gBJAOAA7wBUAPEA8QBkAPYA+ABlAPsA/ABoAP4BAABqAQMBBQBtAQoBCgBwAQ0BDQBxARgBGgByASIBIgB1AS4BMAB2ATMBNQB5ATcBNwB8ATkBOQB9ATsBOwB+AUMBRAB/AVQBVACBAVYBVgCCAVgBWACDAVwBXgCEAYQBhQCHAYcBiQCJAegB6ACMAeoB6wCNAe0B7QCPAfAB8ACQAfsB/QCRAkACQACUAkMCQwCVAlUCVQCWAlcCWACXAosCjACZAo4CjgCbApACpQCcAqoCsQCyArMCtgC6ArsCwAC+AsUCzQDEAs8CzwDNAtEC0QDOAtMC0wDPAtUC1QDQAtcC4ADRAukC6wDbAu0C7QDeAu8C7wDfAvEC8QDgAvMC8wDhAvgC+ADiAvoC+gDjAvwC/ADkAv4C/gDlAwADAADmAwIDDgDnAxADEAD0AxIDEgD1AxQDFAD2Ax8DHwD3AyEDIQD4AyMDIwD5AzEDMQD6AzMDNgD7AzgDOAD/AzoDOgEAA0ADSQEBA1QDWAELA14DYAEQA2UDZQETA3cDegEUA34DgAEYA4kDiQEbA5cDnAEcA58DrgEiA7EDsQEyA7UDtQEzA7cDtwE0A7sDuwE1A74DvwE2A8EDwgE4A8QDygE6A8wDzgFBA9AD1QFEA9cD2AFKA9oD3QFMA+MD5AFQA+YD5gFSA+gD6AFTA+oD7QFUA/AD9QFYA/cD9wFeA/sD/AFfBAEEAQFhBAMEDAFiBA8EEAFsBBIEFQFuBBwEHQFyBCEEIQF0BCMEKQF1BC8EVwF8BFkEWQGlBFsEaAGmBHAEcAG0BIEEhgG1BIgEiAG7BIwEjQG8BJAEkAG+BJIEkwG/BJUElQHBBJcElwHCBKgErAHDBK4ErgHIBLAEsQHJBLMEswHLBLcEuQHMBLsEuwHPBL0EvwHQBMEEwQHTBMMEwwHUBMUEywHVBM0EzQHcBNAE0AHdBNME1wHeBNkE2QHjBNsE3AHkBOAE4AHmBOME4wHnBO4E7gHoBPsE+wHpBQIFAgHqBQYFBgHrAAIAmgAGAAYAAAALAAsAAQAQABAAAgASABIAAwAlACkABAAsADQACQA4AD4AEgBFAEcAGQBJAEkAHABMAEwAHQBRAFQAHgBWAFYAIgBaAFoAIwBcAF4AJACKAIoAJwCWAJYAKACxALQAKQC9AL0ALQDBAMEALgDHAMcALwDUANUAMADXANcAMgDaANoAMwDcAN4ANADgAOYANwDsAOwAPgDuAO4APwD3APcAQAD8APwAQQD+AP8AQgEEAQUARAEKAQoARgENAQ0ARwEYARoASAEuATAASwEzATUATgE3ATcAUQE5ATkAUgE7ATsAUwFDAUQAVAFUAVQAVgFWAVYAVwFYAVgAWAFcAV4AWQGEAYoAXAGOAY8AYwHoAegAZQHtAe0AZgHwAfEAZwH7Af0AaQIPAg8AbAIeAiAAbQJAAkAAcAJDAkMAcQJVAlUAcgJXAlgAcwKLAowAdQKOAo4AdwKQArYAeAK7AsAAnwLFAtUApQLXAuAAtgLpAusAwALtAu0AwwLvAu8AxALxAvEAxQLzAvMAxgL2AvYAxwL4AvgAyAL6AvoAyQL8AvwAygL+Av4AywMAAwAAzAMCAw4AzQMQAxAA2gMSAxIA2wMUAxQA3AMfAx8A3QMhAyEA3gMjAyMA3wMlAyUA4AMnAycA4QMp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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAgAAAAAAAAACAAAAAAAjAAAAAAAAAAAAAgAAAAIAAAAUAA0ACwAaABYAEAAMABcAAAAAAAAAAAAAAAAABgAAAAEAAQABAAAAAQAAAAAAAAAAAAAAAwADAAcAAwABAAAAEQAAAAgACQAAABMACQAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABAAAAAAAAAAIAAQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAIABAAAAAAAAAAAAAAAAAABAAAACQAAAAAAAAADAAAAAAAAAAAAAAAAAAEAAQAAAAgAAAAAAAAAAAAAAAAADQACAB4AAAANAAAAAAAAABAAAAAAAB4AHwAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAATAAAAAwADACEAAwADAAMAAAABAAMAIgADAAMAAAAAAAMAAAADAAAAAAABACEAAwAAAAAAAgAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAgAHABoACQACAAAAAgABAAIAAAACAAEAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAQABMAAAADAAAAAAANAAAAAAADAAAAAwAAAAAAAgABABAAEwANAAAAIAAiAAAAAAAAAAAAAAAAAAAAHgAhAAAAAwAAAAMAAAADAAAAAAAAAAAAAwAQABMAAAABAAEAAAAAAAAAAAAeAAAAAAAAAAIAAQAAAAAAAAAeACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbABsAAAAPAA8AGAAPAA8ADwAYAAAAAAAAABgAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAZACQAAAAOABUAHAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAACgAFAAoAAAAAAAAAAAAAAAAAFQAFAAAAAAAVAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAVAAUAEgAZABUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAgAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAgACAAIACwALAAsACwAMAAYABgAGAAYABgAGAAYAAQABAAEAAQABAAAAAAAAAAAAAwAHAAcABwAHAAcACAAIAAgACAAJAAkABAAGAAQABgAEAAYAAgABAAIAAQACAAEAAgABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAIAAQACAAEAAgABAAIAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAMAAgAHAAIABwACAAcAAAAAAAAAAAAAAAAAFAARABQAEQAUABEAFAARABQAEQANAAAADQAAAA0AAAALAAgACwAIAAsACAALAAgACwAIAAsACAAWAAAADAAJAAwAFwAdABcAHQAXAB0AAAAAAAIAAAAAAAAAAAAKAAoACgAKAAoACgAKAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAA4ADgAOAA4AEgAKAAoACgAFAAUABQAFAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAHAAcABwAHAAAABUAAAAOAA4ADgAOAA4ADgAkABIAEgAAAAAAAAAE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\"\r\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGRmbWFrZS9idWlsZC92ZnNfZm9udHMuanMuanMiLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSx1QkFBdUIsZ0JBQWdCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9WdWV4eS8uL25vZGVfbW9kdWxlcy9wZGZtYWtlL2J1aWxkL3Zmc19mb250cy5qcz80ZWJiIl0sInNvdXJjZXNDb250ZW50IjpbInRoaXMucGRmTWFrZSA9IHRoaXMucGRmTWFrZSB8fCB7fTsgdGhpcy5wZGZNYWtlLnZmcyA9IHtcclxuICBcIlJvYm90by1JdGFsaWMudHRmXCI6IFwiQUFFQUFBQVJBUUFBQkFBUVIwUkZScVdMb2lBQUFkVDRBQUFDV0VkUVQxUEluQ0t6QUFIWFVBQUFaZmhIVTFWQ2hSWU85QUFDUFVnQUFCWDJUMU12TXBlRHNVd0FBQUdZQUFBQVlHTnRZWERPeUZvNkFBQVdkQUFBQm9KamRuUWdPL2dtZlFBQUwxQUFBQUQrWm5CbmJhZ0ZoRElBQUJ6NEFBQVBobWRoYzNBQUNBQVpBQUhVN0FBQUFBeG5iSGxtSjlaSmlnQUFPcEFBQVpkNmFHVmhaQWFrSFNjQUFBRWNBQUFBTm1ob1pXRU1uQkthQUFBQlZBQUFBQ1JvYlhSNE85L2NUUUFBQWZnQUFCUjhiRzlqWVkzWTd4WUFBREJRQUFBS1FHMWhlSEFJenhER0FBQUJlQUFBQUNCdVlXMWxPU0p0NGdBQjBnd0FBQUxBY0c5emRQOWhBR1FBQWRUTUFBQUFJSEJ5WlhCNVdNN1RBQUFzZ0FBQUFzNEFBUUFBQUFNQlNEUExIREZmRHp6MUFCc0lBQUFBQUFERThCRXVBQUFBQU44R3YydjZOLzNWQ1VNSWN3QUNBQWtBQWdBQUFBQUFBQUFCQUFBSGJQNE1BQUFKQS9vMy9td0pRd2dBQWJNQUFBQUFBQUFBQUFBQUFBQUZId0FCQUFBRkh3Q3BBQlVBZGdBSEFBSUFFQUF2QUpvQUFBTG1EM1VBQXdBQkFBUUVpUUdRQUFVQUFBV2FCVE1BQUFFZkJab0ZNd0FBQTlFQVpnSUFBQUFDQUFBQUFBQUFBQUFBNEFBQy8xQUFJRnNBQUFBZ0FBQUFBRWRQVDBjQUFRQUEvLzBHQVA0QUFHWUhtZ0lBSUFBQm53QUFBQUFFT2dXd0FBQUFJQUFEQTVZQVpBQUFBQUFBQUFBQUFmY0FBQUgzQUFBQ0FBQkVBbndBeVFUSEFGSUVYQUJKQmE4QXVnVFVBRGtCV3dDc0FxZ0FiUUswLzVBRFdBQnJCR2NBVEFHSC80OENKUUFhQWd3QU5BTTAvNUFFWEFCcUJGd0ErZ1JjQUJnRVhBQTFCRndBQlFSY0FISUVYQUJ0QkZ3QW5RUmNBRUFFWEFDVUFlc0FLUUd1LzVzRDhnQkNCRUlBY0FRUEFEc0Rxd0NsQnZnQVFRVVEvNjhFMWdBN0JRMEFjQVVZQURzRWFRQTdCRW9BT3dWSkFIUUZpUUE3QWh3QVNRUklBQWNFM2dBN0JDNEFPd2JHQURzRmlRQTdCVmNBY3dUbEFEc0ZWd0JyQk1nQU93U2NBQ2tFb1FDcEJRZ0FZd1R4QUtVRzRnRERCTjMvMUFTcEFLZ0Vwdi9zQWc4QUFBTXdBTUFDRC85N0F6NEFUd09BLzRFQ1pnRFFCRGtBTVFSY0FCOEVFQUJHQkdBQVJ3UWRBRVVDc3dCMUJGd0FBd1JHQUNBQjR3QXZBZHYvRXdQdkFDQUI0d0F2QnM0QUhnUkpBQ0FFYlFCR0JGei8xd1JwQUVZQ29RQWdCQUVBTGdLS0FFTUVSd0JiQThJQWJnWFZBSUFEMnYvRkE2ei9xZ1BhLys0Q29BQTNBZVVBSWdLZy80MEZSd0JwQWVYLzhRUS9BRkFFZy8vekJZa0FFZ1FVQUVNQjNmLzRCTUwvMmdNL0FOb0dHUUJlQTNrQXd3T3VBRllFVEFDQkJob0FYUU9QQVBnQzVnRG9CQ1lBSmdMaUFGMEM0Z0J2QW04QTFRUm0vK1lEekFCNEFnY0FwUUh0LzhnQzRnRGdBNGdBdndPdEFCRUZ1UUM2Qmc4QXRRWVRBSjREcmYvUkIwSC9nd1FrQUNnRlZ3QWdCSllBT1FTZEFCOEdqZ0FUQkkwQVhBUnZBRVFFWmdBNkJIbi80QVNqQUVZRmNBQTJBZXdBTHdSU0FDNEVMZ0FqQWhrQUpBVmdBRFVFWmdBbEIyWUFWUWNNQUVjQjdRQTBCVjBBVWdLbC8wY0ZWUUJtQkhBQVF3VmxBR01FelFCYkFmWC9DUVFZQUQ4RHB3RVlBM01CS0FPWkFQZ0RVUUVIQWVNQkRnS1pBUUVDR3YrdUE2a0EzZ0xsQU1NQ1NQL3BBQUQ5YWdBQS9lb0FBUDBMQUFEOTlBQUEvTnNBQVB5NkFmNEJJd1B0QVBRQ0VRQ2xCRkVBUkFWNS83SUZTQUJuQlJmL3hBUnZBQXdGaVFCRUJHLy8yd1dQQUZZRlhnQ0ZCU2tBQ2dSakFFZ0VtZi94QStRQWhRUm1BRVVFTUFBcEJBVUFpZ1JtQUNVRWF3QjFBb1FBaEFSTi83Z0R6Z0JBQktBQVlBUm0vOTBFTFFCS0JHVUFTQVFNQUljRVBBQm9CWGdBUUFWdkFFNEdaQUJuQkg0QVVnUWlBR2NHR0FCb0JkSUFvZ1U4QUhNSVVQL05DR01BUkFaUkFMUUZpQUJDQk80QU5nWFcvNHdIQy8rckJKd0FKUVdKQUVRRmYvL0xCT0VBbEFYK0FGc0ZyUUJCQlZBQXl3ZE5BRUlIaEFCQ0JlTUFpZ2JBQUVRRTNnQTJCVHdBZGdiNkFFa0U4Zi9wQkVzQVJ3UndBREVEUWdBdUJLLy9qUVh5LzZjRDhRQWdCSHNBTUFReUFEQUVmUC9JQmNFQU1RUjZBREFFZXdBd0E3c0FZQVdoQUVrRW1nQXdCRGtBZVFaSEFEQUdiQUFsQk5FQVZnWVFBREVFTndBeEJDMEFNZ1pXQURFRVF2Ky9CRVlBSUFRdEFFNEdsZi9EQnE4QU1BUndBQ0FFZXdBd0J0TUFiZ1g5QUU4RU5nQXZCdlVBU2dYTEFDMEVydis2QkNiL29nYldBRnNGM2dCUEJwNEFKZ1cxQUNvSXdBQkpCNVVBTHdRRS84MER2Zi9KQlVnQVp3UnBBRU1FNUFDdEErVUFoUVZJQUdjRVpnQkRCc3NBZEFYMUFGSUcwd0J1QmYwQVR3VUtBR2tFSndCTUJOZ0FRQUFBL09jQUFQMEtBQUQrRmdBQS9qc0FBUG8zQUFENlRnWGxBRVFFMFFBd0JEWUFMd1QwQURzRVovL1hCRUlBTlFOMkFDVUV3QUJFQStjQUpRZHgvNnNHT3YrbkJYa0FSQVNlQURBRTR3QTJCRndBTGdaYUFMd0ZXZ0IyQmRzQU93UytBREFIa3dBN0JZZ0FKUWY4QUVJR3Z3QWxCY0VBYXdTdkFGd0UrLy9VQkJUL3hRYjJBS3dGTkFCWEJab0F5d1I5QUhrRlJnREtCRWtBbEFWR0FCd0dBQUNJQkpvQUJBVGpBRFlFT1FBdUJkci95d1RULzhnRmh3QkVCR1lBSlFYdEFEc0UwQUF3QnlFQU93WVlBREVGWFFCU0JJUUFQQVNFLy8wRW52LzVBNW4vNlFVUS85UUVLZi9GQk5FQUxnWmlBREVHc0FCSUJpWUFyUVVFQUdnRUtRQ3dBK2tBb0FlRy8rQUdSUC9hQjc0QVBBWnZBQ01FMFFCbEEvNEFUUVdDQUpzRStnQjlCVHdBYUFYZS84c0UxLy9JQXdrQTh3UC9BQUFIOUFBQUEvOEFBQWYwQUFBQ3JnQUFBZ1FBQUFGY0FBQUVaZ0FBQWlrQUFBR2ZBQUFCQWdBQUFOVUFBQUFBQUFBQ0xRQWFBaTBBR2dVaUFLWUdHUUNZQTRyL1hnR09BTEFCamdDSkFZei9sd0dPQU5JQ3lBQzRBdEFBbFFLdC81UUVTQUIzQkczLzlnS2VBS0VEc1FBNEJUc0FPQUYwQUZJSGJ3Q1dBbFVBWFFKVkFBUURoLy93QXVJQWp3TGlBR1FDNGdDS0F1SUFrQUxpQUtJQzRnQjdBdUlBcWdOSEFINEM0di9jQXVJQUxRTGkvNnNDNHYrOEF1TC9zZ0xpLzlnQzR2L2VBdUwvOEFMaS84a0M0di80QklQLzh3WWxBQW9HWHdBNUNEOEFPd1crQUFrRi9BQWZCRndBVVFXdEFFTUVBd0JLQkZJQUN3VWYvL0lGSnYvbEJic0F6QU94QUVzSCt3QTFCTnNBNndUeEFIOEdBUUMyQnF3QWtnYWxBSkFHUXdDK0JHMEFUUVZrQUNRRWkvK3RCSEFBcXdTZ0FFRUgrd0JMQWYzL0ZRUmZBRE1FUWdCd0Evei8wd1FaQUJnRDZRQkNBa1FBZHdKOEFIRUI5Zi9rQk5jQWRRUk5BRmtFYUFCMUJxQUFkUWFnQUhVRXlBQjFCbWdBS0FBQUFBQUg5ZityQ0RVQVhBTFkvK29DMkFCc0F0Z0FIQVB4QUdrRDhRQW5BL0VBY0FQd0FFc0Q4UUJLQS9ILzl3UHhBQmNEOGYvOUEvRUF2UVB4QUVZRUEvL2RCQXNBZFFRei83Y0Y1Z0NVQkVZQWVRUmJBRUlFQndCdUJBQUFFZ1FwQUIwRW1BQkdCRHNBSGdTWUFFd0V2UUFlQmRRQUhnT1pBQjRFTkFBZUE3TC85Z0hhQUNzRXZnQWVCSWdBVEFPdkFCNEVBQUFTQkJRQUJnT0ZBQmtEa3dBZUJFYi9zQVNZQUV3RVJ2K3dBMjcvMHdTcUFCNEQwdi9XQlQ0QVVnVHdBSDBFelFBT0JVa0FiUVJhQUVnSEN2L0RCeGdBSGdWS0FHNEVxUUFlQkRrQUlBVDkvNGtGM2YrdkJCOEFFZ1RHQUNBRUxRQWZCSnoveEFRQUFGb0ZBUUFlQkVnQVZnWWdBQjRHZVFBZUJQWUFVUVhOQUNBRUxnQWdCRm9BSUFaRkFCNEVaUC9nQS9QLytnWVkvNjhFVndBZkJPTUFId1VQQUdvRmx3QlFCRWNBZFFTRS83Y0dNUUJ0QkVnQVZRUklBQjRGbUFBdUJLWUFRQVFmQUJJRW5BQkdCQlFBQUFQR0FCOEg1QUFlQklmLzNnTFkvL3NDMlAveEF0Z0FGd0xZQUIwQzJBQXZBdGdBQ0FMWUFEY0Rld0NUQXFBQkN3UElBQjRFR3YrWkJKOEFTQVVqQUVRRS9RQkVBL1VBSmdVVkFFUUQ4QUFtQkYwQUhnUmFBRWdFTUFBZUJHUC9wZ0h2QVB3RGlRRVNBQUQ5S2dQU0FOTUQxZ0FpQS9BQXpnUFhBTTBEa3dBZUE0UUJFZ09EQVJNQzRnQ1BBdUlBWkFMaUFJb0M0Z0NRQXVJQW9nTGlBSHNDNGdDcUJWZ0FnQVdEQUlFRmFBQkVCYk1BZ3dXMkFJTUR1QUM4QkY4QU9RUTMvNEVFcXYvVEJFbi8xUVFPQUNzRGlRRVVBWWIvdmdaeEFFd0VsZ0ErQWUzL0R3Um0vNndFWnYvakJHYi91QVJtQUN3RVpnQldCR1lBSkFSbUFHWUVaZ0FiQkdZQVFBUm1BUTBDQVA4SkFmLy9DUUgyQUM4Qjl2OTRBZllBTHdRd0FCNEUyZ0JrQkFFQVlnUmNBQjhFRXdCRUJIQUFRd1JwQUNNRWZBQkNCR3YvMXdSNUFFSUVIUUJHQkZ3QU5RUk8vNzhEYUFDcEJMRUFMQU9aLytrR0N2K2FBOW9BSGdTWS8vUUV2UUFlQkwwQUhnSDNBQUFDSlFBYUJUWUFMd1UyQUM4RVpBQStCS0VBcVFLSy8vUUZFUCt2QlJEL3J3VVEvNjhGRVArdkJSRC9yd1VRLzY4RkVQK3ZCUTBBY0FScEFEc0VhUUE3QkdrQU93UnBBRHNDSEFCSkFod0FTUUljQUVrQ0hBQkpCWWtBT3dWWEFITUZWd0J6QlZjQWN3VlhBSE1GVndCekJRZ0FZd1VJQUdNRkNBQmpCUWdBWXdTcEFLZ0VPUUF4QkRrQU1RUTVBREVFT1FBeEJEa0FNUVE1QURFRU9RQXhCQkFBUmdRZEFFVUVIUUJGQkIwQVJRUWRBRVVCN0FBdkFld0FMd0hzQUM4QjdBQXZCRWtBSUFSdEFFWUViUUJHQkcwQVJnUnRBRVlFYlFCR0JFY0FXd1JIQUZzRVJ3QmJCRWNBV3dPcy82b0RyUCtxQlJEL3J3UTVBREVGRVArdkJEa0FNUVVRLzY4RU9RQXhCUTBBY0FRUUFFWUZEUUJ3QkJBQVJnVU5BSEFFRUFCR0JRMEFjQVFRQUVZRkdBQTdCUFlBUndScEFEc0VIUUJGQkdrQU93UWRBRVVFYVFBN0JCMEFSUVJwQURzRUhRQkZCR2tBT3dRZEFFVUZTUUIwQkZ3QUF3VkpBSFFFWEFBREJVa0FkQVJjQUFNRlNRQjBCRndBQXdXSkFEc0VSZ0FnQWh3QVNRSHNBQkVDSEFCSkFld0FMZ0ljQUVrQjdBQXZBaHovaXdIai8yMENIQUJKQm1RQVNRTytBQzhFU0FBSEFmWC9DUVRlQURzRDd3QWdCQzRBT3dIakFDOEVMZ0E3QWVQL29nUXVBRHNDZVFBdkJDNEFPd0svQUM4RmlRQTdCRWtBSUFXSkFEc0VTUUFnQllrQU93UkpBQ0FFU1FBZ0JWY0Fjd1J0QUVZRlZ3QnpCRzBBUmdWWEFITUViUUJHQk1nQU93S2hBQ0FFeUFBN0FxSC9ud1RJQURzQ29RQWdCSndBS1FRQkFDNEVuQUFwQkFFQUxnU2NBQ2tFQVFBdUJKd0FLUVFCQUM0RW5BQXBCQUVBTGdTaEFLa0NpZ0JEQktFQXFRS0tBRU1Fb1FDcEFySUFRd1VJQUdNRVJ3QmJCUWdBWXdSSEFGc0ZDQUJqQkVjQVd3VUlBR01FUndCYkJRZ0FZd1JIQUZzRkNBQmpCRWNBV3diaUFNTUYxUUNBQktrQXFBT3MvNm9FcVFDb0JLYi83QVBhLys0RXB2L3NBOXIvN2dTbS8rd0Qydi91QjBIL2d3YU9BQk1GVndBZ0JHWUFPZ1JkLzY4RVhmK3ZCQWNBYmdSai82WUVZLyttQkdQL3BnUmovNllFWS8rbUJHUC9wZ1JqLzZZRVdnQklBOGdBSGdQSUFCNER5QUFlQThnQUhnSGFBQ3NCMmdBckFkb0FLd0hhQUNzRXZRQWVCSmdBVEFTWUFFd0VtQUJNQkpnQVRBU1lBRXdFV3dCQ0JGc0FRZ1JiQUVJRVd3QkNCQXNBZFFSai82WUVZLyttQkdQL3BnUmFBRWdFV2dCSUJGb0FTQVJhQUVnRVhRQWVBOGdBSGdQSUFCNER5QUFlQThnQUhnUElBQjRFaUFCTUJJZ0FUQVNJQUV3RWlBQk1CTDRBSGdIYUFBNEIyZ0FyQWRvQUt3SGsvNElCMmdBckE3TC85Z1EwQUI0RG1RQWVBNWtBSGdPWkFCNERtUUFlQkwwQUhnUzlBQjRFdlFBZUJKZ0FUQVNZQUV3RW1BQk1CQ2tBSFFRcEFCMEVLUUFkQkFBQUVnUUFBQklFQUFBU0JBQUFFZ1FIQUc0RUJ3QnVCQWNBYmdSYkFFSUVXd0JDQkZzQVFnUmJBRUlFV3dCQ0JGc0FRZ1htQUpRRUN3QjFCQXNBZFFRRC85MEVBLy9kQkFQLzNRVVEvNjhFelFBREJlMEFFUUtBQUJjRmF3QnJCUTMvN1FVOUFCNENoQUFnQlJEL3J3VFdBRHNFYVFBN0JLYi83QVdKQURzQ0hBQkpCTjRBT3diR0FEc0ZpUUE3QlZjQWN3VGxBRHNFb1FDcEJLa0FxQVRkLzlRQ0hBQkpCS2tBcUFSakFFZ0VNQUFwQkdZQUpRS0VBSVFFUEFCb0JGSUFMZ1J0QUVZRVp2L21BOElBYmdSTy83OENoQUJsQkR3QWFBUnRBRVlFUEFCb0JtUUFad1JwQURzRVVRQkVCSndBS1FJY0FFa0NIQUJKQkVnQUJ3VDlBRVFFM2dBN0JPRUFsQVVRLzY4RTFnQTdCRkVBUkFScEFEc0ZpUUJFQnNZQU93V0pBRHNGVndCekJZa0FSQVRsQURzRkRRQndCS0VBcVFUZC85UUVPUUF4QkIwQVJRUjdBREFFYlFCR0JGei8xd1FRQUVZRHJQK3FBOXIveFFRZEFFVURRZ0F1QkFFQUxnSGpBQzhCN0FBdkFkdi9Fd1F5QURBRHJQK3FCdUlBd3dYVkFJQUc0Z0REQmRVQWdBYmlBTU1GMVFDQUJLa0FxQU9zLzZvQld3Q3NBbndBeVFRQUFFUUI5ZjhKQVk0QWlRYkdBRHNHemdBZUJSRC9yd1E1QURFRWFRQTdCWWtBUkFRZEFFVUVld0F3QlY0QWhRVnZBRTRFNUFDdEErVUFoUWdaQUVZSkF3QnpCSndBSlFQeEFDQUZEUUJ3QkJBQVJnU3BBS2dENUFDRkFod0FTUWNMLzZzRjh2K25BaHdBU1FVUS82OEVPUUF4QlJEL3J3UTVBREVIUWYrREJvNEFFd1JwQURzRUhRQkZCVjBBVWdRWUFEOEVHQUEvQnd2L3F3WHkvNmNFbkFBbEEvRUFJQVdKQUVRRWV3QXdCWWtBUkFSN0FEQUZWd0J6QkcwQVJnVklBR2NFYVFCREJVZ0Fad1JwQUVNRlBBQjJCQzBBTWdUaEFKUURyUCtxQk9FQWxBT3MvNm9FNFFDVUE2ei9xZ1ZRQU1zRU9RQjVCc0FBUkFZUUFERUVZQUJIQlJEL3J3UTVBREVGRVArdkJEa0FNUVVRLzY4RU9RQXhCUkQvcndRNUFERUZFUCt2QkRrQU1RVVEvNjhFT1FBeEJSRC9yd1E1QURFRkVQK3ZCRGtBTVFVUS82OEVPUUF4QlJEL3J3UTVBREVGRVArdkJEa0FNUVVRLzY4RU9RQXhCR2tBT3dRZEFFVUVhUUE3QkIwQVJRUnBBRHNFSFFCRkJHa0FPd1FkQUVVRWFRQTdCQjBBUlFScEFEc0VIUUJGQkdrQU93UWRBRVVFYVFBN0JCMEFSUUljQUVrQjdBQXZBaHdBRFFIai8vQUZWd0J6QkcwQVJnVlhBSE1FYlFCR0JWY0Fjd1J0QUVZRlZ3QnpCRzBBUmdWWEFITUViUUJHQlZjQWN3UnRBRVlGVndCekJHMEFSZ1ZWQUdZRWNBQkRCVlVBWmdSd0FFTUZWUUJtQkhBQVF3VlZBR1lFY0FCREJWVUFaZ1J3QUVNRkNBQmpCRWNBV3dVSUFHTUVSd0JiQldVQVl3VE5BRnNGWlFCakJNMEFXd1ZsQUdNRXpRQmJCV1VBWXdUTkFGc0ZaUUJqQk0wQVd3U3BBS2dEclArcUJLa0FxQU9zLzZvRXFRQ29BNnovcWdSK0FBQUVvUUNwQTdzQVlBVlFBTXNFT1FCNUJGRUFSQU5DQUM0R0FBQ0lCSm9BQkFSR0FDQUUzZ0FzQk40QUxBUlJBQkVEUXYvbkJSRUFXQVFKQURvRXFRQ29BK1FBWGdUZC85UUQydi9GQkRBQUtRUksvOWNHR1FDWUJGd0FHQVJjQURVRVhBQUZCRndBY2dSd0FJRUVoQUJVQkhBQWxBU0VBSDRGU1FCMEJGd0FBd1dKQURzRVNRQWdCUkQvcndRNUFERUVhUUE3QkIwQVJRSWMvK0FCN1ArTkJWY0Fjd1J0QUVZRXlBQTdBcUVBSUFVSUFHTUVSd0JiQkliL3NRVFdBRHNFWEFBZkJSZ0FPd1JnQUVjRkdBQTdCR0FBUndXSkFEc0VSZ0FnQk40QU93UHZBQ0FFM2dBN0ErOEFJQVF1QURzQjQvL3dCc1lBT3diT0FCNEZpUUE3QkVrQUlBVlhBSE1FNVFBN0JGei8xd1RJQURzQ29mL3VCSndBS1FRQkFDNEVvUUNwQW9vQVF3VUlBR01FOFFDbEE4SUFiZ1R4QUtVRHdnQnVCdUlBd3dYVkFJQUVwdi9zQTlyLzdnV2Qvd3dFWS8rbUJBVC80Z1Q2Ly8wQ0ZnQUNCS0lBSGdSSC81b0Uxd0FZQkdQL3BnUXdBQjREeUFBZUJBUC8zUVMrQUI0QjJnQXJCRFFBSGdYVUFCNEV2UUFlQkpnQVRBUTdBQjRFQndCdUJBc0FkUVF6LzdjQjJnQXJCQXNBZFFQSUFCNERrd0FlQkFBQUVnSGFBQ3NCMmdBckE3TC85Z1EwQUI0RUFBQmFCR1AvcGdRd0FCNERrd0FlQThnQUhnVEdBQ0FGMUFBZUJMNEFIZ1NZQUV3RXFnQWVCRHNBSGdSYUFFZ0VCd0J1QkRQL3R3UWZBQklFdmdBZUJGb0FTQVFMQUhVRm1BQXVCTVlBSUFRQUFGb0ZQZ0JTQll3QUt3WUsvNW9FbVAvMEJBQUFFZ1htQUpRRjVnQ1VCZVlBbEFRTEFIVUZFUCt2QkRrQU1RUnBBRHNFSFFCRkJHUC9wZ1BJQUI0QjdQL3dBQUFBQWdBQUFBTUFBQUFVQUFNQUFRQUFBQlFBQkFadUFBQUE5QUNBQUFZQWRBQUFBQUlBRFFCK0FLQUFyQUN0QUw4QXhnRFBBT1lBN3dEK0FROEJFUUVsQVNjQk1BRlRBVjhCWndGK0FYOEJqd0dTQWFFQnNBSHdBZjhDR3dJM0Fsa0N2QUxIQXNrQzNRTHpBd0VEQXdNSkF3OERJd09LQTR3RGtnT2hBN0FEdVFQSkE4NEQwZ1BXQkNVRUx3UkZCRThFWWdSdkJIa0VoZ1NmQktrRXNRUzZCTTRFMXdUaEJQVUZBUVVRQlJNZUFSNC9Ib1VlOFI3ekh2a2ZUU0FKSUFzZ0VTQVZJQjRnSWlBbklEQWdNeUE2SUR3Z1JDQjBJSDhncENDcUlLd2dzU0M2SUwwaEJTRVRJUlloSWlFbUlTNGhYaUlDSWdZaUR5SVNJaG9pSGlJcklrZ2lZQ0psSmNydUF2YkQrd1QrLy8vOS8vOEFBQUFBQUFJQURRQWdBS0FBb1FDdEFLNEF3QURIQU5BQTV3RHdBUDhCRUFFU0FTWUJLQUV4QVZRQllBRm9BWDhCandHU0FhQUJyd0h3QWZvQ0dBSTNBbGtDdkFMR0Fza0MyQUx6QXdBREF3TUpBdzhESXdPRUE0d0RqZ09UQTZNRHNRTzZBOG9EMFFQV0JBQUVKZ1F3QkVZRVVBUmpCSEFFZWdTSUJLQUVxZ1N5QkxzRXp3VFlCT0lFOWdVQ0JSRWVBQjQrSG9BZW9CN3lIdlFmVFNBQUlBb2dFQ0FUSUJjZ0lDQWxJREFnTWlBNUlEd2dSQ0IwSUg4Z295Q21JS3Nnc1NDNUlMd2hCU0VUSVJZaElpRW1JUzRoV3lJQ0lnWWlEeUlSSWhvaUhpSXJJa2dpWUNKa0pjcnVBZmJEK3dIKy8vLzgvLzhBQVFBQS8vYi81QUhwLzhJQjNmL0JBQUFCMEFBQUFjc0FBQUhIQUFBQnhRQUFBY01BQUFHN0FBQUJ2ZjhXL3dmL0JmNzQvdXNCL3dBQUFBRCtaZjVFQVRUOTJQM1gvY245dFAyby9hZjlvdjJkL1lvQUFBQVBBQTRBQUFBQS9Rb0FBUC92L1A3OCt3QUEvTG9BQVB5eUFBRDhwd0FBL0tFQUFQeVpBQUQ4a1FBQS96a0FBUDgyQUFEOFhnQUE1ZlBscytWazVZL2srT1dONVk3aGN1Rno0VzhBQU9GczRXdmhhZUZoNDdyaFdlT3k0VkRoSXVFZEFBRGhBZ0FBNFAzZzl1RDE0Szdnb2VDZjRKVGZsT0NKNEYzZnV0NnMzNjdmcmQrbTM2UGZsOTk3MzJUZllkdjlFOGNMQndiTEF0TUIxd0FCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURrQUFBQTdnQUFBUmdBQUFFeUFBQUJNZ0FBQVRJQUFBRjBBQUFBQUFBQUFBQUFBQUFBQUFBQmRBRitBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFXd0FBQUFBQVhRQmtBQUFBYWdBQUFBQUFBQUJ3QUFBQWdnQUFBSXdBQUFDVWdBQUFtSUFBQUtPQUFBQ21nQUFBcjRBQUFMT0FBQUM0Z0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXRJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTENBQUFDd2dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLUUFwRUNrZ0tUQXBRQ2xRQ0JBb3dDb0FLaEFxSUNvd0trQXFVQWdnQ0RBcVlDcHdLb0Fxa0NxZ0NFQUlVQ3F3S3NBcTBDcmdLdkFyQUFoZ0NIQXJzQ3ZBSzlBcjRDdndMQUFJZ0FpUUxCQXNJQ3d3TEVBc1VBaWdLTEFJc0FqQUtOQUkwQzlBTDFBdllDOXdMNEF2a0FqZ0w2QXZzQy9BTDlBdjRDL3dNQUF3RUFqd0NRQXdJREF3TUVBd1VEQmdNSEF3Z0FrUUNTQXdrRENnTUxBd3dERFFNT0FKTUFsQU1kQXg0RElRTWlBeU1ESkFLT0FvOENsZ0t4QXp3RFBRTStBejhER3dNY0F4OERJQUN1QUs4RGx3Q3dBNWdEbVFPYUFMRUFzZ09oQTZJRG93Q3pBNlFEcFFDMEE2WURwd0MxQTZnQXRnT3BBTGNEcWdPckFMZ0RyQUM1QUxvRHJRT3VBNjhEc0FPeEE3SURzd08wQU1RRHRnTzNBTVVEdFFER0FNY0F5QURKQU1vQXl3RE1BN2dBelFET0EvVUR2Z0RTQTc4QTB3UEFBOEVEd2dQREFOUUExUURXQThVRDlnUEdBTmNEeHdEWUE4Z0R5UURaQThvQTJnRGJBTndEeXdQRUFOMER6QVBOQTg0RHp3UFFBOUVEMGdEZUFOOEQwd1BVQU9vQTZ3RHNBTzBEMVFEdUFPOEE4QVBXQVBFQThnRHpBUFFEMXdEMUE5Z0QyUUQyQTlvQTl3UGJBL2NEM0FFQ0E5MEJBd1BlQTk4RDRBUGhBUVFCQlFFR0ErSUQrQVBqQVFjQkNBRUpCSklEK1FQNkFSY0JHQUVaQVJvRCt3UDhBLzREL1FFb0FTa0JLZ0VyQkpFQkxBRXRBUzRCTHdFd0JKTUVsQUV4QVRJQk13RTBBLzhFQUFFMUFUWUJOd0U0QkpVRWxnUUJCQUlFaUFTSkJBTUVCQVNYQkpnRWtBRk1BVTBFamdTUEJBVUVCZ1FIQVU0QlR3RlFBVkVCVWdGVEFWUUJWUVNLQklzQlZnRlhBVmdFRWdRUkJCTUVGQVFWQkJZRUZ3RlpBVm9FakFTTkJDd0VMUUZiQVZ3QlhRRmVCSmtFbWdGZkJDNEVtd0Z2QVhBQmdRR0NCSjBFbkFHbkJJY0JyUUFBUUVxWm1KZVdoNGFGaElPQ2dZQi9mbjE4ZTNwNWVIZDJkWFJ6Y25Gd2IyNXRiR3RxYVdoblptVmtZMkpoWUY5ZVhWeGJXbGxZVjFaVlZGTlJVRTlPVFV4TFNrbElSMFlvSHhBS0NTd0JzUXNLUXlORFpRb3RMQUN4Q2d0REkwTUxMU3dCc0FaRHNBZERaUW90TExCUEt5Q3dRRkZZSVV0U1dFVkVHeUVoV1JzakliQkFzQVFsUmJBRUpVVmhaSXBqVWxoRlJCc2hJVmxaTFN3QXNBZERzQVpEQ3kwc1MxTWpTMUZhV0NCRmltQkVHeUVoV1Mwc1MxUllJRVdLWUVRYklTRlpMU3hMVXlOTFVWcFlPQnNoSVZrdExFdFVXRGdiSVNGWkxTeXdBa05VV0xCR0t4c2hJU0VoV1Mwc3NBSkRWRml3UnlzYklTRWhXUzBzc0FKRFZGaXdTQ3NiSVNFaElWa3RMTEFDUTFSWXNFa3JHeUVoSVZrdExDTWdzQUJRaW9wa3NRQURKVlJZc0VBYnNRRURKVlJZc0FWRGkxbXdUeXRaSTdCaUt5TWhJMWhsV1Mwc3NRZ0FEQ0ZVWUVNdExMRU1BQXdoVkdCRExTd0JJRWV3QWtNZ3VCQUFZcmdRQUdOWEk3Z0JBR0s0RUFCalYxcFlzQ0JnWmxsSUxTeXhBQUlsc0FJbHNBSWxVN2dBTlNONHNBSWxzQUlsWUxBZ1l5QWdzQVlsSTJKUVdJb2hzQUZnSXhzZ0lMQUdKU05pVWxnakliQUJZUnVLSVNNaElGbFp1UC9CSEdDd0lHTWpJUzBzc1FJQVFyRWpBWWhSc1VBQmlGTmFXTGdRQUxBZ2lGUllzZ0lCQWtOZ1FsbXhKQUdJVVZpNElBQ3dRSWhVV0xJQ0FnSkRZRUt4SkFHSVZGaXlBaUFDUTJCQ0FFc0JTMUpZc2dJSUFrTmdRbGtidUVBQXNJQ0lWRml5QWdRQ1EyQkNXYmhBQUxDQVk3Z0JBSWhVV0xJQ0NBSkRZRUpadVVBQUFRQmp1QUlBaUZSWXNnSVFBa05nUWxteEpnR0lVVmk1UUFBQ0FHTzRCQUNJVkZpeUFrQUNRMkJDV2JsQUFBUUFZN2dJQUloVVdMSUNnQUpEWUVKWnNTZ0JpRkZZdVVBQUNBQmp1QkFBaUZSWXVRQUNBUUN3QWtOZ1FsbFpXVmxaV1ZteEFBSkRWRmhBQ2dWQUNFQUpRQXdDRFFJYnNRRUNRMVJZc2dWQUNMb0JBQUFKQVFDekRBRU5BUnV4Z0FKRFVsaXlCVUFJdUFHQXNRbEFHN2dCQUxBQ1ExSllzZ1ZBQ0xvQmdBQUpBVUFidUFHQXNBSkRVbGl5QlVBSXVBSUFzUWxBRzdJRlFBaTZBUUFBQ1FFQVdWbFp1RUFBc0lDSVZibEFBQUlBWTdnRUFJaFZXbGl6REFBTkFSdXpEQUFOQVZsWldVSkNRa0pDTFN4RnNRSk9LeU93VHlzZ3NFQlJXQ0ZMVVZpd0FpVkZzUUZPSzJCWkd5TkxVVml3QXlWRklHU0tZN0JBVTFpeEFrNHJZQnNoV1JzaFdWbEVMU3dnc0FCUUlGZ2paUnNqV2JFVUZJcHdSYkJQS3lPeFlRWW1ZQ3VLV0xBRlE0dFpJMWhsV1NNUU9pMHNzQU1sU1dNalJtQ3dUeXNqc0FRbHNBUWxTYkFESldOV0lHQ3dZbUFyc0FNbElCQkdpa1pnc0NCallUb3RMTEFBRnJFQ0F5V3hBUVFsQVQ0QVByRUJBZ1lNc0FvalpVS3dDeU5Dc1FJREpiRUJCQ1VCUHdBL3NRRUNCZ3l3QmlObFFyQUhJMEt3QVJheEFBSkRWRmhGSTBVZ0dHbUtZeU5pSUNDd1FGQllaeHRtV1dHd0lHT3dRQ05oc0FRalFodXhCQUJDSVNGWkdBRXRMQ0JGc1FCT0swUXRMRXRSc1VCUEsxQmJXQ0JGc1FGT0t5Q0tpa1Fnc1VBRUptRmpZYkVCVGl0RUlSc2pJWXBGc1FGT0t5Q0tJMFJFV1Mwc1MxR3hRRThyVUZ0WVJTQ0tzRUJoWTJBYkl5RkZXYkVCVGl0RUxTd2pSU0NLUlNOaElHU3dRRkd3QkNVZ3NBQlRJN0JBVVZwYXNVQlBLMVJhV0lvTVpDTmtJMU5Zc1VCQWltRWdZMkViSUdOWkc0cFpZN0VDVGl0Z1JDMHNBUzBzQUMwc0JiRUxDa01qUTJVS0xTeXhDZ3RESTBNTEFpMHNzQUlsWTJhd0FpVzRJQUJpWUNOaUxTeXdBaVZqc0NCZ1pyQUNKYmdnQUdKZ0kySXRMTEFDSldObnNBSWx1Q0FBWW1BallpMHNzQUlsWTJhd0lHQ3dBaVc0SUFCaVlDTmlMU3dqU3JFQ1Rpc3RMQ05Lc1FGT0t5MHNJNHBLSTBWa3NBSWxaTEFDSldGa3NBTkRVbGdoSUdSWnNRSk9LeU93QUZCWVpWa3RMQ09LU2lORlpMQUNKV1N3QWlWaFpMQURRMUpZSVNCa1diRUJUaXNqc0FCUVdHVlpMU3dnc0FNbFNyRUNUaXVLRURzdExDQ3dBeVZLc1FGT0s0b1FPeTBzc0FNbHNBTWxpckJuSzRvUU95MHNzQU1sc0FNbGlyQm9LNG9RT3kwc3NBTWxSckFESlVaZ3NBUWxMckFFSmJBRUpiQUVKaUN3QUZCWUliQnFHN0JzV1N1d0F5VkdzQU1sUm1CaHNJQmlJSW9nRUNNNkl5QVFJem90TExBREpVZXdBeVZIWUxBRkpVZXdnR05oc0FJbHNBWWxTV01qc0FVbFNyQ0FZeUJZWWhzaFdiQUVKa1pnaWthS1JtQ3dJR05oTFN5d0JDYXdCQ1d3QkNXd0JDYXdiaXNnaWlBUUl6b2pJQkFqT2kwc0l5Q3dBVlJZSWJBQ0piRUNUaXV3Z0ZBZ1lGa2dZR0Fnc0FGUldDRWhHeUN3QlZGWUlTQm1ZYkJBSTJHeEFBTWxVTEFESmJBREpWQmFXQ0N3QXlWaGlsTllJYkFBV1JzaFdSdXdCMVJZSUdaaFpTTWhHeUVoc0FCWldWbXhBazRyTFN5d0FpV3dCQ1ZLc0FCVFdMQUFHNHFLSTRxd0FWbXdCQ1ZHSUdaaElMQUZKckFHSmttd0JTYXdCU2F3Y0NzallXV3dJR0FnWm1Hd0lHRmxMU3l3QWlWR0lJb2dzQUJRV0NHeEFrNHJHMFVqSVZsaFpiQUNKUkE3TFN5d0JDWWd1QUlBWWlDNEFnQmppaU5oSUxCZFlDdXdCU1VSaWhLS0lEbUtXTGtBWFJBQXNBUW1ZMVpnS3lNaElCQWdSaUN4QWs0ckkyRWJJeUVnaWlBUVNiRUNUaXRaT3kwc3VRQmRFQUN3Q1NWalZtQXJzQVVsc0FVbHNBVW1zRzByc1YwSEpXQXJzQVVsc0FVbHNBVWxzQVVsc0c4cnVRQmRFQUN3Q0NaalZtQXJJTEFBVWxpd1VDdXdCU1d3QlNXd0J5V3dCeVd3QlNXd2NTdXdBaGM0c0FCU3NBSWxzQUZTV2xpd0JDV3dCaVZKc0FNbHNBVWxTV0Fnc0VCU1dDRWJzQUJTV0NDd0FsUllzQVFsc0FRbHNBY2xzQWNsU2JBQ0Z6Z2JzQVFsc0FRbHNBUWxzQVlsU2JBQ0Z6aFpXVmxaV1NFaElTRWhMU3k1QUYwUUFMQUxKV05XWUN1d0J5V3dCeVd3QmlXd0JpV3dEQ1d3RENXd0NTV3dDQ1d3Yml1d0JCYzRzQWNsc0FjbHNBY21zRzByc0FRbHNBUWxzQVFtc0cwcnNGQXJzQVlsc0FZbHNBTWxzSEVyc0FVbHNBVWxzQU1sc0FJWE9DQ3dCaVd3QmlXd0JTV3djU3Rnc0FZbHNBWWxzQVFsWmJBQ0Z6aXdBaVd3QWlWZ0lMQkFVMWdoc0VCaEk3QkFZU01idVAvQVVGaXdRR0Fqc0VCZ0kxbFpzQWdsc0FnbHNBUW1zQUlYT0xBRkpiQUZKWXF3QWhjNElMQUFVbGl3QmlXd0NDVkpzQU1sc0FVbFNXQWdzRUJTV0NFYnNBQlNXTEFHSmJBR0piQUdKYkFHSmJBTEpiQUxKVW13QkJjNHNBWWxzQVlsc0FZbHNBWWxzQW9sc0FvbHNBY2xzSEVyc0FRWE9MQUVKYkFFSmJBRkpiQUhKYkFGSmJCeEs3QUNGemdic0FRbHNBUWx1UC9Bc0FJWE9GbFpXU0VoSVNFaElTRWhMU3l3QkNXd0F5V0hzQU1sc0FNbGlpQ3dBRkJZSWJCbEc3Qm9XU3Rrc0FRbHNBUWxCckFFSmJBRUpVa2dJR093QXlVZ1kxR3hBQU1sVkZ0WUlTRWpJUWNiSUdPd0FpVWdZMkVnc0ZNcmltT3dCU1d3QlNXSHNBUWxzQVFtU3JBQVVGaGxXYkFFSmlBQlJpTUFSckFGSmlBQlJpTUFSckFBRmdDd0FDTklBYkFBSTBnQUlMQUJJMGl3QWlOSUFTQ3dBU05Jc0FJalNDT3lBZ0FCQ0NNNHNnSUFBUWtqT0xFQ0FRZXdBUlpaTFN3akVBME1pbU1qaW1OZ1pMbEFBQVFBWTFCWXNBQTRHenhaTFN5d0JpV3dDU1d3Q1NXd0J5YXdkaXNqc0FCVVdBVWJCRm13QkNXd0JpYXdkeXV3QlNXd0JTYXdCU1d3QlNhd2RpdXdBRlJZQlJzRVdiQjNLeTBzc0FjbHNBb2xzQW9sc0FnbXNIWXJpckFBVkZnRkd3UlpzQVVsc0FjbXNIY3JzQVlsc0FZbXNBWWxzQVltc0hZckNMQjNLeTBzc0FjbHNBb2xzQW9sc0FnbXNIWXJpb29Jc0FRbHNBWW1zSGNyc0FVbHNBVW1zQVVsc0FVbXNIWXJzQUJVV0FVYkJGbXdkeXN0TExBSUpiQUxKYkFMSmJBSkpyQjJLN0FFSnJBRUpnaXdCU1d3Qnlhd2R5dXdCaVd3Qmlhd0JpV3dCaWF3ZGlzSXNIY3JMU3dEc0FNbHNBTWxTckFFSmJBREpVb0NzQVVsc0FVbVNyQUZKckFGSmtxd0JDWmppb3BqWVMwc3NWME9KV0Fyc0F3bUViQUZKaEt3Q2lVNXNBY2xPYkFLSmJBS0piQUpKYkI4SzdBQVVMQUxKYkFJSmJBS0piQjhLN0FBVUZSWXNBY2xzQXNsaDdBRUpiQUVKUXV3Q2lVUXNBa2x3YkFDSmJBQ0pRdXdCeVVRc0FZbHdSdXdCeVd3Q3lXd0N5VzQvLyt3ZGl1d0JDV3dCQ1VMc0FjbHNBb2xzSGNyc0FvbHNBZ2xzQWdsdVAvL3NIWXJzQUlsc0FJbEM3QUtKYkFISmJCM0sxbXdDaVZHc0FvbFJtQ3dDQ1ZHc0FnbFJtQ3dCaVd3QmlVTHNBd2xzQXdsc0F3bUlMQUFVRmdoc0dvYnNHeFpLN0FFSmJBRUpRdXdDU1d3Q1NXd0NTWWdzQUJRV0NHd2FodXdiRmtySTdBS0pVYXdDaVZHWUdHd0lHTWpzQWdsUnJBSUpVWmdZYkFnWTdFQkRDVlVXQVFiQlZtd0NpWWdFTEFESlRxd0JpYXdCaVlMc0FjbUlCQ0tPckVCQnlaVVdBUWJCVm13QlNZZ0VMQUNKVHFLaWdzaklCQWpPaTBzSTdBQlZGaTVBQUJBQUJ1NFFBQ3dBRm1Lc0FGVVdMa0FBRUFBRzdoQUFMQUFXYkI5S3kwc2lvb0lEWXF3QVZSWXVRQUFRQUFidUVBQXNBQlpzSDByTFN3SXNBRlVXTGtBQUVBQUc3aEFBTEFBV1Eyd2ZTc3RMTEFFSnJBRUpnZ05zQVFtc0FRbUNBMndmU3N0TENBQlJpTUFSckFLUTdBTFE0cGpJMkpoTFN5d0NTdXdCaVV1c0FVbGZjV3dCaVd3QlNXd0JDVWdzQUJRV0NHd2FodXdiRmtyc0FVbHNBUWxzQU1sSUxBQVVGZ2hzR29ic0d4Wkt4aXdDQ1d3QnlXd0JpV3dDaVd3Ynl1d0JpV3dCU1d3QkNZZ3NBQlFXQ0d3Wmh1d2FGa3JzQVVsc0FRbHNBUW1JTEFBVUZnaHNHWWJzR2haSzFSWWZiQUVKUkN3QXlYRnNBSWxFTEFCSmNXd0JTWWhzQVVtSVJ1d0JpYXdCQ1d3QXlXd0NDYXdieXRac1FBQ1ExUllmYkFDSmJDQ0s3QUZKYkNDS3lBZ2FXR3dCRU1CSTJHd1lHQWdhV0d3SUdFZ3NBZ21zQWdtaXJBQ0Z6aUtpbUVnYVdGaHNBSVhPQnNoSVNFaFdSZ3RMRXRTc1FFQ1ExTmFXQ01RSUFFOEFEd2JJU0ZaTFN3anNBSWxzQUlsVTFnZ3NBUWxXRHdiT1Ztd0FXQzQvK2tjV1NFaElTMHNzQUlsUjdBQ0pVZFVpaUFnRUJHd0FXQ0tJQkt3QVdHd2hTc3RMTEFFSlVld0FpVkhWQ01nRXJBQllTTWdzQVltSUNBUUViQUJZTEFHSnJDRks0cUtzSVVyTFN5d0FrTlVXQXdDaWt0VHNBUW1TMUZhV0FvNEd3b2hJVmtiSVNFaElWa3RMTENZSzFnTUFvcExVN0FFSmt0UldsZ0tPQnNLSVNGWkd5RWhJU0ZaTFN3Z3NBSkRWTEFCSTdnQWFDTjRJYkVBQWtPNEFGNGplU0d3QWtNanNDQWdYRmdoSVNHd0FMZ0FUUnhaaW9vZ2lpQ0tJN2dRQUdOV1dMZ1FBR05XV0NFaEliQUJ1QUF3SEZrYklWbXdnR0lnWEZnaElTR3dBTGdBSFJ4Wkk3Q0FZaUJjV0NFaEliQUF1QUFNSEZtS3NBRmh1UCtySENNaExTd2dzQUpEVkxBQkk3Z0FnU040SWJFQUFrTzRBSGNqZVNHeEFBSkRpckFnSUZ4WUlTRWh1QUJuSEZtS2lpQ0tJSW9qdUJBQVkxWll1QkFBWTFaWXNBUW1zQUZic0FRbXNBUW1zQVFtR3lFaElTRzRBRGl3QUNNY1dSc2hXYkFFSmlPd2dHSWdYRmlLWElwYUl5RWpJYmdBSGh4WmlyQ0FZaUJjV0NFaEl5RzRBQTRjV2JBRUpyQUJZYmova3h3aklTMEFBRUQvZmpSOVZYdysveDk3Ty84ZmVqMy9IM2s3UUI5NFBQOGZkenc5SDNZMUJ4OTFPdjhmZERwbkgzTTVUeDl5T2Y4ZmNUYi9IM0E0elI5dk9QOGZiamRlSDIwM3pSOXNOLzhmYXpjdEgybzNHQjlwTlA4ZmFETC9IMmN5elI5bU0vOGZaVEgvSDJRdy94OWpNS3NmWWpCbkgyRXUveDlnTG9BZlh5Ly9IMTR2a3g5ZExmOGZYQ3ovSDFzci94OWFLczBmV1NyL0gxZ3FEUjlYS2Y4ZlZpai9IMVVuSkI5VUp5MGZVeVZlSDFJbC94OVJKYXNmVUNiL0gwOG1nQjlPSlA4ZlRTTXJIMHdqcXg5TEkvOGZTaU5XSDBrakt4OUlJdjhmUnlEL0gwWWdjaDlGSWY4ZlJDRnlIME1mL3g5Q0hwTWZRUjcvSDBBZC94OC9IUDhmUFR1VFFPb2ZQRHMwSHpvMURoODVObklmT0RaUEh6YzJJaDgyTlpNZk16SkFIekV3Y2g4dkxrb2ZLeXBBSHljWkJCOG1KU2dmSlRNYkdWd2tHaElmSXdVYUdWd2lHZjhmSVNBOUh5QTRHQlpjSHhndEh4NFgveDhkRnY4ZkhCWUhIeHN6R1J4YkdEUVdIRnNhTXhrY1d4YzBGaHhiRlJrK0ZxWmFFekVTVlJFeEVGVVNXUkJaRFRRTVZRVTBCRlVNV1FSWkh3UmZCQUlQQkg4RTd3UUREMTRPVlFzMENsVUhOQVpWQVRFQVZRNVpDbGtHV1g4R0FTOEdUd1p2QmdNL0JsOEdmd1lEQUZrdkFBRXZBRzhBN3dBRENUUUlWUU0wQWxVSVdRSlpId0pmQWdJUEFuOEM3d0lEQTBCQUJRRzRBWkN3VkN0THVBZi9Va3V3Q1ZCYnNBR0lzQ1ZUc0FHSXNFQlJXckFHaUxBQVZWcGJXTEVCQVk1WmhZMk5BQjFDUzdDUVUxaXlBd0FBSFVKWnNRSUNRMUZZc1FRRGpsbHpkQUFyQUNzckszTjBBQ3R6ZEhVQUt3QXJBQ3NyS3lzcmMzUUFLd0FyS3lzQUt3QXJLeXNCS3dFckFTc0JLd0VyQVNzckFDc3JBU3NyQVNzQUt3QXJBU3NyS3lzckFTc3JBQ3NyS3lzckt5c0JLeXNBS3lzckt5c3JLd0VyQUNzckt5c3JLeXNyS3lzckt5c0JLeXNBS3lzckt5c3JLeXNyS3dFckt5c3JLeXNyQUNzckt5c3JLeXNyS3lzckt5c3JLeXNyS3lzckt4Z0FBQVlBQUJVRnNBQVVCYkFBRkFRNkFCUUFBUC9zQUFELzdBQUEvK3orWVAvMUJiQUFGUUFBLytzQUFBQzlBTUFBblFDZEFMb0Fsd0NYQUNjQXdBQ2RBSVlBdkFDckFMb0FtZ0RUQUxNQW1RSGdBSllBdWdDYUFLa0JDd0NDQUs0QW9BQ01BSlVBdVFDcEFCY0Frd0NhQUhzQWl3Q2hBTjRBb0FDTUFKMEF0Z0FuQU1BQW5RQ2tBSVlBb2dDckFMWUF2d0M2QUlJQWpnQ2FBS0lBc2dEVEFKRUFtUUN0QUxNQXZnSEpBZjBBbGdDNkFFY0FtQUNkQUtrQkN3Q0NBSmtBbndDcEFMQUFnUUNGQUlzQWxBQ3BBTFVBdWdBWEFGQUFZd0I0QUgwQWd3Q0xBSkFBbUFDaUFLNEExQURlQVNZQWV3Q0pBSk1BblFDbEFMUUVqUUFRQUFBQUFBQXlBRElBTWdBeUFESUFYUUIvQUxZQk5RSEVBajhDVlFLSUFyc0M2QU1IQXlJRE5BTlJBMlVEdXdQVkJCa0Vpd1M0QlFvRmJBV0tCZ1FHWlFaeEJuMEdwQWJCQnVnSFFBZnpDQ29Ja2dqY0NTRUpWZ21DQ2RZS0FRb1dDa1VLZVFxYUNzOEs5QXREQzN3TDF3d2dESWdNcUF6YURRQU5RUTF1RFpNTnd3M2ZEZk1PRHc0MERrVU9XUTdMRHlVUGNBL0tFQjhRVWhEREVRQVJLUkZtRVpzUnNSSVZFbE1Tb0JMN0UxWVRqQlByRkI0VVdoUi9GTUlVN2hVcUZWZ1ZwUlc1RmdnV1N4WnlGdE1YSXhlSkY5TVg3eGlOR01BWlJSbWlHYTRaelJwMUdvY2F2aHJtR3lJYmlCdWNHK0FjQVJ3ZUhFa2NZaHluSExNY3hCelZIT1lkUFIyT0hhd2VDaDVKSHE4Zld4L0RJQUlnWFNDNklSNGhVeUZvSVpzaHlDSHFJaW9pZlNMeUk0a2pzU1FGSkZra3dTVWhKV1lsdGlYZUpqQW1VU1p3Sm5nbW5pYThKdTRuR3lkYUoza25xU2U5SjlJbjJ5Z0pLQ1VvUWloV0tKY29ueWk0S09ncFJ5bHRLWmNwdGludUtra3FqU3IySzJvcjFpd0VMSGNzNlMwK0xYd3Q0QzRKTGx3dTFTOFJMMmN2dHpBU01FVXdnakRhTVNBeGtUSDdNbFF5MFRNZ00zY3oyalFwTkcwMGxEVGROVFExZ0RYeU5oWTJVVGFPTnVjM0V6ZE5OM1UzcVRmc09ERTRhempDT1NrNWJUbmtPbEE2YVRxd092ODdienVUTzhZOEFUd3lQRjA4aGp5a1BVUTliejJvUGM4K0F6NUhQb3creGo4Y1A0TS95RUFyUUlCQTRrRXlRWGhCbjBIOVFseENva01EUTJWRG9VUGFSQzVFZ0VUb1JVNUZ6RVpLUnROSFdFZkNTQmhJVGtpR1NQSkpXa29SU3NkTE9VdXNTL1pNUGt4c1RJcE11a3pRVE9WTm1FM3NUZ2hPSkU1blRxOVBHMDgvVDJOUG8wL2hUL1JRQjFBVFVDWlFaVkNqVU45UkcxRXVVVUZSZGxHclVlOVNQRkt6VXlaVE9WTk1VNEpUdUZQTFU5NVVKMVJ2VktsVkVsVjZWY2RXRVZZa1ZqZFdjbGF2VnNKVzFWYm9WdnRYVDFlZlYrOVgvbGdOV0JsWUpWaGNXTGxaTmxtMFdqQmFwbHNiVzN4YjRGd3ZYSU5jMUYwa1hXbGRybDRpWGk1ZU9sNWxYbVZlWlY1bFhtVmVaVjVsWG1WZVpWNWxYbVZlWlY1bFhtVmViVjUxWG9kZW1WNjFYdEZlN1Y4SVh5TmZMMTg3WDJsZmlsKzRYOWRmNDEvellCQmcyR0Q3WVJ0aE1tRTdZVVJoVFdGV1lWOWhhR0Z4WWFwaHMyRzhZY1Zoem1IWFllQmg2V0h5WWZ0aUJHSmNZcGRpK0dNRVkxNWpxMlFGWkZaa3EyVHVaUzlsY0dYN1prNW11V2IzWjBWblcyZHNaNEpubUdnR2FDTm9XbWhzYUpocE1tbHZhYzVwL1dveGFtWnFtV3FtYXNScTRHcnNheWhyYUd2TGJEVnNtRzFRYlZCdWJtNjBidTV2RTI5V2I2OXdLbkJGY0oxdzVuRVBjWDF4dkhIVmNpSnlVSEtCY3F0eTduTVFjMEJ6WG5QQmRBUjBZSFNZZE9WMUIzVTVkVloxaDNXemRjWjE4SFpBZG14MjZIYzVkM2gzbFhmRmVCMTRQM2hvZUk1NHgza2FlV0I1eVhvV2VtbDZ4WHNSZTFON2hudkpmQk44Wkh6U2ZQNTlNWDFyZmFWOTJuNFJma04raFg3RmZ0Ri9CMzlhZjc2QUM0QTJnSktBMElFUWdVdUJ2b0hLZ2dLQ1FJS0ZncnVERzROc2c3dUVIWVI1aE5HRlBvV0JoZDJHQm9aSGhwbUdzNGNmaDNHSGc0ZkFoL09Jb0lrQWlWNkprb25GaWZhS0s0cHNpclNMRzR0TGkyaUxsb3ZWaS9xTUlZeGlqS3FNMW8wRmpWYU5YNDFvalhHTmVvMkRqWXlObFkzaWpqbU9lNDdPanpDUFQ0K1RqOW1RQTVCUWtHeVF3cERVa1U2UnM1SFlrZUNSNkpId2tmaVNBSklJa2hDU0dKSWdraWlTTUpJNGtrQ1NVcEpha3NPVEQ1TXRrNGVUMHBRc2xKMlU2cFZGbGFDVjhaWmhsckNXdUpjc2wxbVhxcGZqbUQrWWNaaTFtTFdZdlprT21WK1pwWm5ObWcyYUlKb3pta2FhV1pwdG1vR2FsNXFxbXIyYTBKcmptdmViQ3BzZG16Q2JSSnRYbTJxYmZadVFtNk9idDV2S205MmI4SndFbkJlY0twdzluRStjWVp4MW5JbWNuNXl5bk1XYzJKenFuUDZkRUowaW5UV2RTWjFiblc2ZGdaMlRuYVdkdVozTW5kK2Q4WjRGbmhpZUs1NCtubENlWTU1Mm5zK2ZZcDkxbjRpZm01K3RuOENmMDUvbW4vaWdDNkFlb0RHZ1E2QldvR21nZktDUG9PdWhZNkYyb1lpaG02R3RvY0NoMDZIbW9mbWlEYUlnb2pPaVJxSlpvbXlpZjZLU29xV2l1S0xLb3R5aTc2TDdvd2VqR3FNdG8wR2pWYU5vbzN1amo2T2pvN2FqeWFQVm8rR2o5S1FIcEJ1a0w2UkNwRlNrWjZSNnBJeWtuNlN5cE1hazJxVHRwUUNsRktVb3BUdWxUYVZncFhPbGhxV1lwYXVsdnFYU3BlYWwrYVlMcGgrbU02WkdwbG1tYkthQXBwT21wYWE0cHNxbTNhYndwd1NuR0tjc3AwQ25sNmY2cUEyb0lLZ3pxRVdvV2Foc3FIK29rcWlscUxpb3lxamRxUENwQTZrV3FTS3BMcWs1cVV5cFg2bHhxWU9wbDZtcnFiZXB3Nm5XcWVtcCs2b09xaUNxTXFwRnFsbXFiS3AvcXBLcXBhcTRxc3lxMzZyeXF3U3JHS3NycXoyclVLdWtxN2VyeWF2Y3ErK3NBYXdUckNXc09LeVFyS0tzdEt6SHJOcXM3cTBCclJTdEo2MDZyVVd0VjYxcXJYYXRpSzJjcmFpdHRLM0hyZE90NXEzNXJneXVJSzR6cmordVVhNWtybmF1Z3E2VXJxaXV1cTdHcnRpdTZxNzlyeEd2SmE5N3I0NnZvSyt6cjhhdjJhL3JyLzZ3RXJBZXNES3dSckJac0cyd2dyQ0tzSkt3bXJDaXNLcXdzckM2c01Ld3lyRFNzTnF3NHJEcXNQS3hCckVhc1MyeFFMRlRzV1d4ZWJHQnNZbXhrYkdac2FHeHRMSEhzZHF4N2JJQXNoU3lKN0tOc3BXeXFiS3hzcm15ekxMZnN1ZXk3N0wzc3YrekVyTWFzeUt6S3JNeXN6cXpRck5LczFLeldyTmlzM1d6ZmJPRnM4MnoxYlBkcy9HMEJMUU10QlMwS0xRd3RFTzBWYlJvdEh1MGpyU2h0TFcweWJUY3RPKzA5N1QvdFF1MUhyVW10VG0xVExWaHRYYTFpYldjdGErMXdyWEt0ZEsxNXJYNnRnYTJFcllsdGppMlM3WmV0bWEyYnJaMnRvbTJuTGFrdHJlMnlyYmV0dksyK3JjQ3R4VzNLTGM4dDBTM1dMZHN0NEMzbExlbnQ3cTN6TGZndC9TNENMZ2N1Q1M0TExoQXVGUzRhTGg4dUkrNG9iaTF1TWk0M0xqd3VRUzVGN2tydVQrNVI3bGJ1Vys1Z3JtVnVhbTV2TG5RdWVPNTk3b0t1aDY2TWJwT3VtcTZmcnFTdXFhNnVyck91dUs2OXJzS3V5ZTdSTHRZdTJ5N2Y3dVN1Nlc3dDd2THU5Njc4cndGdkJtOExMeEF2Rk84Y0x5TXZKKzhzcnpHdk5xODdyMEN2Ulc5S0wwOHZVKzlZNzEydllxOW5iMnh2Y1M5NGIzOXZoQytJNzQydmttK1hMNXZ2b0srbEw2b3ZyeSswTDdrdnZlL0NyOGR2ekMvUTc5V3YybS9mTCtQdjZHL3RiL0p2OTIvOGNBRXdCZkFLc0E4d0ZuQWJNQi93SkxBcGNDNHdNdkEzc0R4d1BuQlBNRit3YVBCeU1JSndrekNmTUt4d3VqREg4TW53enZEUThOTHcxUERXOE5qdzJ2RGM4Tjd3NFBEbHNPcHc3ekR6OFBqdy9mRUM4UWZ4RFBFUjhSYnhHL0VnOFNYeEt2RXY4VEx4Ti9FODhVSHhSdkZMOFZEeFZmRmE4Vit4WkhGcGNXNXhjM0Y0Y1gxeGduR0hjWXh4a1hHV01acnhuL0drOGFueHJ2R3o4Ymp4dmZIQ3NjY3h6REhSTWRZeDJ6SGdNZVV4NmpIdE1mQXg4ekgyTWZreC9ESC9NZ0V5QXpJRk1nY3lDVElMTWcweUR6SVJNaE15RlRJWE1oa3lHeklnTWlUeUtiSXVjakJ5TW5JM2NqbHlQakpDc2tTeVJySklza3F5VDNKUmNsTnlWWEpYY2xseVczSmRjbDl5Zm5LTGNxQXlvaktsTXFueXJuS3djck55dURLODhyL3l4TExKY3M1eTBYTFdNdHJ5MzdMa2N1ZHk2bkx2UUFHQUdRQUFBTW9CYkFBQXdBSEFBc0FEd0FUQUJjQUFFRVZJVFV6RVNNUklSRWpFUk1WSVRVQkFTTUJFUUV6QVFNSi9YWWJOZ0xFTmhmOWRnS0svYTg2QWxIOXJ6b0NVUVd3TmpiNlVBV3crbEFGc1BxR05qWUZYUHFNQlhUNmpBVjArb3dBQWdCRS8vSUI5QVd3QUFNQUR3QVRRQWtDQWdjTkMzSUFBbklBS3l2ZHppOHdNVUVESXhNRE5qWTNOaFlIRkFZSEJpWUI5TUtrcVBJQk95OHVQUUU5TGk0OEJiRDc2d1FWK3FvdlB3RUJQQzR1UGdFQk9nQUNBTWtFRXdLbkJnQUFCUUFMQUF5ekNRTUxCUUF2TTgweU1ERkJCd01qRXpjaEJ3TWpFemNCb1JkVGJqY1hBWkFYVTI0NEZnWUFrdjZsQVZ5Umt2NmxBV09LQUFRQVVnQUFCUHNGc0FBREFBY0FDd0FQQUNOQUVRUUFCUTBPRGdBS0NRa0FBZ0p5QUJKeUFDc3JFVGt2TXhFNUx6TXlFVE13TVhNQk13RXpBVE1CQVNFM0lRTWhOeUdrQWcrUy9lLzdBaENRL2ZBQ0pQd09HQVB5dHZ3TkdBUHpCYkQ2VUFXdytsQURoWXY5aW9vQUF3QkovekFFTGdhY0FBTUFCd0E5QURaQUhBUUhPam9JS3hBakJCUXZOVFVHTHcxeUFRSWZIeFFhR2dNVUJYSUFLODB6THhFekVqazVLODB6THhFU0Z6a3pFams1TURGQkF5TVRBd01qRXdFMkppWW5MZ0kzUGdJWEhnTUhJell1QWljbUJnWUhCaFlXRng0Q0J3NENKeTRETnpNR0hnSVhGalkyQXpveGt6RitLcElxQVlRSlBtdzhaSjlYQ0FtQXpIeG5rVmNpQnJRRURTcFFQMHQxU0FrSVBXNC9ZNTFWQ0FxTzNZQmxtV1V2QnJZRUZUVlpRRTJIV2dhYy9zOEJNZm1mL3ZVQkN3RkRTV1JERnladW9uVit1R0lEQWt5QnFGNDBhMW80QWdJNmJFcE5aRUlaSjIyaGRJZTJXd0lDUTNtallqdG5UeTBDQVRWdEFBQUZBTHIvNkFVeEJjZ0FFUUFqQURVQVJ3QkxBQ05BRVVreVN3VTdSQ2t5Rnc0Z0JRVnlNZzF5QUNzck1zUXlFTVF5TXhFekVUTXdNVk0zUGdJWEhnSUhCdzRDSnk0Q053Y0dGaFlYRmpZMk56YzJKaVluSmdZR0FUYytBaGNlQWdjSERnSW5MZ0kzQndZV0ZoY1dOalkzTnpZbUppY21CZ1lCQVNjQnZ3Y0pWb3RaVlhjN0JnWUpWb3RZVkhnOGxna0RGam95TkV3dEJ3a0RGVGt6TkUwdUFZc0hDRmVMV0ZWM093VUhDVldMV0ZWM1BKWUhBeFU1TWpWTUxRY0pBeFk2TWpWTUxnRmQvSkJqQTNFRVMweFZpMUVDQWxPSVVVMVZpVkFDQWxLSG5rOHJVVFFDQVROVEwwNHNVallCQVROVS9FOU5WWXRRQWdKVGgxRk9WWXBRQWdKVGg1OVJLMUUxQVFJelZEQlBMRkkxQVFFelV3TkYrNWRJQkdnQUFRQTUvK29FZ1FYSEFFSUFKRUFVSXhJQUR5SUJCaG93TUNzUkVUc1RjZ2NhQTNJQUt6SXJNaTh5TWk4UkZ6a3dNVUUzTmpZM05pWW5JZ1lHQndZV0ZoY0JJd0V1QWpjK0FoY2VBZ2NPQWdjRkRnSUhCaFlXRnhZK0FqY3pEZ0lIQmdZSEJnWW5MZ0kzUGdJQnBldzlYZ2dIVmtFNVZ6VUdCeVE4SEFJYnkvNUdMRnc3QlFobnJHNVZqbEVGQkVObU9mN0ZLMVE5QndvMmJrdHNzWVZTRHFBTFBHSkNDUThKU3VkdGRyNXFDUWh2bmdNb215aGlUVUpTQVRwZU5qWm5YeXY4eGdLa1FZdVlVMjJsV2dNQ1NvVmFTblplS05jZVMxdzNUSEEvQWdOZm9jRmZaS2VWU1FvWENsTlBBZ05pczN4bm1YWUFBUUNzQkNJQmlnWUFBQVVBQ0xFREJRQXZ4akF4UVFjREl4TTNBWW9UVEg4OEVBWUFkZjZYQVhobUFBQUJBRzMrS2dNVUJtd0FGd0FJc1FZVEFDOHZNREZUTnpZU0VqWTNGdzRDQWdjSEJnSVNGaGNISmlZQ0FuOENGbUNiMlkwY2JxSnhTQlFDRUF3ZVhWb3VkNUJFQ0FKQkM1TUJPQUVqN0VaOFVkVHovdnVDRDJ2Ky92Nzg1MUZ2VXZnQkl3RW9BQUFCLzVEK0tRSTNCbXNBRndBSXNSTUdBQzh2TURGQkJ3WUNBZ1lISno0Q0VqYzNOaElDSmljM0ZoWVNFZ0lsQWhWaG10bU9IRzJpY2tnVUF3OExJRnhZTDNhUFJRZ0NWUXVUL3NmKzNleEdjbFBXOXdFSGd3OXFBUUFCQnVkUWNGUDQvdDcrMlFBQkFHc0NZQU9MQmJFQURnQVVRQW9OQVFjRUJBNE1CZ0p5QUN2RU1oYzVNREZURXlVM0JSTXpBeVVYQlJNSEF3T1A4ZjdyUlFFV001VkdBVEFUL3NXU2dJTGZBc3dCRUZxUGNBRmMvcWR0b0Z2KzdWY0JJZjdxQUFBQ0FFd0FrZ1EwQkxZQUF3QUhBQkMxQndjREF3WUNBQy9HTXhER0x6QXhRUWNoTndFREl4TUVOQjc4Tmg4Q2liaTF1QU1OcnE0QnFmdmNCQ1FBQUFIL2ovN2RBT3NBM0FBS0FBaXhCQUFBTDgwd01YY0hCZ1lISno0Q056ZnJHQkY0VjJRak9pa0xHdHlVYmJ4Q1N5dFpZamFZQUFFQUdnSWZBaEFDdHdBREFBaXhBd0lBTHpNd01VRUhJVGNDRUJ2K0pSc0N0NWlZQUFFQU5QL3lBUlVBMUFBTEFBcXpBd2tMY2dBck1qQXhkelEyTnpZV0J4UUdCd1ltTlQ4eE1UOEJQekV3UUY4eFFnRUJQakV4UUFFQlBBQUIvNUQvZ3dPVEJiQUFBd0FKc2dBQ0FRQXZQekF4UVFFakFRT1QvS0drQTJBRnNQblRCaTBBQWdCcS8rZ0VJQVhJQUJjQUx3QVRRQWtyQmg4U0JYSUdEWElBS3lzeUVUTXdNVUVIRGdNbkxnTTJOemMrQXhjZUF3WURFelkyTGdJbkpnNENCd01HQmg0Q0Z4WStBZ1FVSWhKRmU4R01hNHhSSVFFTElSRkhlOEdLYTQxUklnSG1Ld1lKQ1NkU1JWMThUU29MS2dZSkNTWlJSVjU5VENvRFROMTI1N3h1QkFKUGhLU3pWdDUyNUxkckJBSk1nS0t4L3EwQkhUSjJkV00rQXdSVGlhQkwvdVF3ZUhsblFRTUVWbzJrQUFFQStnQUFBMVFGdUFBR0FBeTFCZ1J5QVF4eUFDc3JNREZCQXlNVEJUY2xBMVQ0dGRiK2ZTQUNHZ1c0K2tnRXpJZXZ4QUFCQUJnQUFBUW5CY2NBSHdBWlFBd1FFQXdWQlhJREh4OENESElBS3pJUk15c3lNaTh3TVdVSElUY0JQZ0kzTmlZbUp5WUdCZ2NIUGdJWEhnSUhEZ01IQVFQT0dQeGlGZ0lhTjN4ZUN3Z3FZRWhkaUZNTnNnMkwzb2h4dEdFTEJrSmhjRGIrUTVpWWpRSU1OMzZRVTBSeFJRSURUSWhYQVlqTWJ3TUNXNnAzVG8rRGREUCtXUUFBQWdBMS8rb0VHZ1hIQUJ3QU93QXFRQlliSEI0ZkJBQUFIUjBTTXk4dktRMXlEUTBKRWdWeUFDc3lNaThyTWk4eUVUa3ZNeElYT1RBeFFSYytBamMySmlZbkpnWUdCd2MrQWhjZUFnY09BeU1uQnpjWEhnTUhEZ01uTGdNM0Z3WVdGaGNXTmpZM05pWW1Kd0dkZVZHTlhRa0lLR0JOVG50UERMTU1pZEo1ZUxKYUNRZGFpNlJScFFZU2psYVpjendIQ0ZPSHJXTmFsbTA0QkxRRk5HbE5Wb1pSQ0FrN2RWQURNd0lCT1hKV1NtOUFBZ0UrY2tzQmU3WmpBZ0psdFhwYmlGd3VBU2h2QVFJc1Y0aGZaS0p5T3dJQ09tbVZYQUZMY0VBQ0FrUitWbFJ3T2dJQUFnQUZBQUFFSGdXd0FBY0FDd0FkUUE0REJ3Y0dBZ0lGQ1F4eUN3VUVjZ0FyTWlzU09TODVNeEk1TURGQkJ5RTNBVE1EQVFFREl4TUVIaHY4QWhVRElKL1UvZTRERGZ5MS9RSHFtSGNENS83Vi9XVUR4dnBRQmJBQUFRQnkvK2dFYXdXd0FDa0FIVUFPSndrSkFoMFpHUk1OY2dVQ0JISUFLeklyTWk4eUVUa3ZNekF4UVNjVElRY2hBelkyRng0REJ3NERKeTRESnpNZUFoY1dQZ0kzTmk0Q0p5WUdBWEdWdUFMWEcvM0ZjRFo1UDJXUFdDSUlDVTZEdEc1YmoyVTRCS29GTTJSTlNYQlFMZ2NHRkRaY1FraHhBcllvQXRLci9uTWdJQUVCVVlpclcycTFoa29EQVQxc2sxaEljVUlDQVRkZ2UwSTdiMWsyQWdJeEFBQUJBRzMvNlFQeUJiTUFOZ0FiUUEwT0xCZ2lJaXdEQUFSeUxBMXlBQ3NyTWhFNUx6TVJNekF4UVRNSEl5WU9BZ2NIQmg0Q0Z4WStBamMyTGdJbkpnWUdCeWMrQXhjZUF3Y09BeWN1QXpjM05oSTJKQU9qRlJBTWY4cVdYaEllQndrcldFcEhiMDR0QndZTkxsUkJUNGxoRkdBVVRuT2FZbUtLVlNFSUNreUJzRzF2bkYwaERBc1pjOEVCRndXem5RRlRsOHQzMXppSGZGSUNBenBqZXo4MmNtSStBZ0pKZTBrQldKcDBQd01EVVllbVdHYTNqVThEQW1Xa3cyRlhxZ0V0NW9RQUFRQ2RBQUFFalFXd0FBWUFFMEFKQVFVRkJnUnlBd3h5QUNzck1oRXpNREZCQndFakFTRTNCSTBTL09uSEF4VDlDQmdGc0hMNndnVVltQUFBQkFCQS8ra0VLd1hIQUJBQUlBQXdBRUFBSVVBUURUMDlKUzBWRlFRMUxRVnlIUVFOY2dBck1pc3lFamt2RWprekVqa3dNVUVPQWljdUFqYytBeGNlQWdjMkppWW5KZ1lHQndZV0ZoY1dOallCRGdJbkxnSTNQZ0lYSGdJSE5pWW1KeVlHQmdjR0ZoWVhGalkyQThzS2p0NkJkN2xrQ2dkWmpLMWJjTHRydkFjd2FFeFVpRllKQ0M5b1RsU0lWUUVWQ1luT2NXaXRZZ2NKZ2M1N2NxdFp2Z1lwVzBSTWVFa0lCeWhiUlV4M1N3R1Roc0JrQXdKa3RIeGdtV28yQWdKZ3JuSkplRWtDQWt1RFVVeHpRZ0lDUkg0QytuYXRYZ01DVzZOdGZycGpBd0ppcjNaQWJVUUJBa1Y0U1VGdFFnRUNSWGNBQUFFQWxQLzlCQkFGeHdBNEFCdEFEUUE0RmlFaE9Bd3JCWEk0REhJQUt5c3lFVGt2TXhFek1ERjNNeFkrQWpjM05pNENKeVlPQWdjR0hnSVhGajRDTnpjT0F5Y3VBemMrQXhjZUF3Y0hEZ1FqSTk0UGdzbVJXaElmQndjcFdFdEhiMDh1QmdZTkxWTkNRSEpiUHc1V0MwNStvVjFpaWxNZ0NBbE5nTEZ1ZDV4VUdBd0lFazUrcys2WUY1b0JTNHpHZStBM2k0QldBZ004Wm4wL05uTmxRQUlDTVZadE93RlhwSU5NQWdOVWlxaFhacnFRVVFNRGE2ek1aRVdLK00yV1V3RC8vd0FwLy9JQnBBUkhCQ1lBRXZVQUFBY0FFZ0NQQTNQLy8vK2IvdDBCalFSSEJDY0FFZ0I0QTNNQUJnQVFEQUFBQWdCQ0FNa0R1QVJQQUFRQUNRQVdRQXdCQXdjR0FBUUlCUWdDQ1FJQUx5OFNGemt3TVZNQkJ3RTNKUUVITndIRUFuZ2gvU2NUQXovOVBJb1ZBMTBDb1A3a3V3RjdiTkwrNkE5NkFYb0FBZ0J3QVk4RC93UFBBQU1BQndBT3RRWUhFZ01DRUFBL016OHpNREZCQnlFM0FRY2hOd1AvSGZ6V0hBTGpIZnpXSEFQUG9hSCtZYUdoQUFJQU93REFBOVVFU0FBRUFBa0FGVUFMQlFnRUFBWURBUWNDQ1FJQUx5OFNGemt3TVVFQk53RUhCUUUzQndFRFJQMTBJUUw4RlB5ZUF0bVpGdnlBQW5nQkdiZitoVzdYQVJjWGUvNkZBQUlBcGYveUE3d0Z4d0FnQUN3QUcwQU5BUUVrSkNvTGNoRVJEUllEY2dBck1qSXZLeklSTXk4d01VRUhQZ0kzUGdJM05pWW1KeVlHQmdjSFBnSVhIZ0lIRGdJSEJnWUJOalkzTmhZSEZBWUhCaVlCODdJSk4xcEFNRjlGQ1FjZVRqOUJhRVVOdEE1OHYzRnZuMDhLQ1YrSlJqMC8vdnNCT3k4dlBBRThMeTQ4QVpvQlZvUndPU3RZYVVVN1lEb0NBakJiUHdGenBGVUNBMTJtYjJHY2dqb3lmdjV6THo4QkFUd3ZMajBCQVRvQUFnQkIvam9Hb0FXWkFFRUFhQUFuUUJJU0JRVkhVaE55WVdSa0MxMWRIUjA4S1RBQUx6TXZNeEV6THpNekVUTXJNaklSTXpBeFFRNERKeTRETnhNekF3WUdGaFlYRmo0Q056WTJMZ0luSmc0REJ3WUdIZ0lYRmpZM0Z3WUdKeTREQWpjMkVqWTJKQmNlQXhJRkJnWVdGaGNXUGdJM0Z3NERKeTRDTmpjK0JCY1dGaGNISmlZbkpnNENCb2dQUjNPaWEwcGJMUVlMalpLTEJnZ0tLaXROYjB3dEN4UUNOSFhBakl2c3dKSmhHQlVDTTNLOGlGaXJUeHhRdzEyZjU1aFBDeGdiZEs3a0FSV2dudWFWVFF2Nzl3Y0tEREkyTWxFL0x4RTVGMFZiYzBkVlh5WUNDdzA0Vm5PUldGS0RQMW9qVmpOVWZGVTBBZnhidlo1ZkF3SS9abm85QWl6OTFCNU5TVElDQTFHRGtEdDI1Y2lhV1FJQ1dxSFU4bjF3NHMyaFhnRUJLQ1owTWlZQkFtaTA2d0VMaXBFQkdmVzZad0lDYUxUcS92YnJKR0JjUUFJQ05GSmNKa2c1ZDJNN0FnTldoSlEvU2FHWmZFZ0NBVHN6WHlRb0FRTlpqcDRBQUFQL3J3QUFCSXNGc0FBRUFBa0FEUUFwUUJRRUJ3Y0tEUTBHQUFzTURBSUlBd0p5QlFJSWNnQXJNaXN5RVRrdk16azVNeEV6TWhFek1ERkJBU01CTXhNRE56TUJBd2NoTndNcy9VekpBeGlCaXZFVGVBRWZkaHo4NVJ3RkpQcmNCYkQ2VUFVNmR2cFFBaHVlbmdBQUFnQTcvLzhFbWdXd0FCa0FNQUFwUUJRWktTWUNKeWNCSmlZT0RBOENjaHdiR3c0SWNnQXJNaEV6S3pJUk9TOHpNeEV6RWprNU1ERkJJVGNGTWpZMk56WW1KaWNsQXlNVEJSNERCdzRDQndNaE53VXlOalkzTmlZbUp5VTNCUmNlQWdjT0FnSzAvbzhaQVR0TmlWMEtDalJyU1A3aTRiMzlBY05ibTNBNUNBaDNzMkRKL2thRkFUcFZrRjhMQ1NwbVQvN3BIUUZqSDFwN09RWUxsZWdDcVpzQk5teFNUbDhyQWdINjdnV3dBUUl0VzQ1amE1SlREZjBwblFFK2VGaE9jRDBEQVpzQk9BNWpsVm1QdjE4QUFBRUFjUC9vQlBrRnh3QW5BQlZBQ2hrVkVBTnlKQUFGQ1hJQUs4d3pLOHd6TURGQk53NENKeTRETnpjK0F4Y2VBaGNqTGdJbkpnNENCd2NHSGdJWEZqWTJBOXk1SHFYNW1vcTdhU0VRRlJScHFlZVRrOFpuQkxvRE5IWmxicVYwUmc4V0N3WTFkMlp3bm1nQnpnS1czSFlFQTNqRTdIaVJoUFhBYmdNRGZ0cU5YSlJZQXdOWWw3cGZsRSt4bldVREJFNlZBQUFDQURzQUFBVFBCYkFBR2dBZUFCdEFEUUlCQVIwT0R3OGVBbklkQ0hJQUt5c3lFVE1STXhFek1ERmhJVGNGTWpZMk56YzJMZ0luSlRjRkhnTUhCdzRDQkFNREl4TUJ4djdOSFFFYm4rbU9GdzBNRVVxT2NQNjJIQUV5a3RHQkx4QU1GWHpDL3dCci9iMzluUUdMNzVaYVlMaVZXd01CbmdFRGNiNzBobGVVKzdobEJiRDZVQVd3QUFBRUFEc0FBQVN4QmJBQUF3QUhBQXNBRHdBZFFBNExDZ29HRHc0SEFuSURBZ1lJY2dBck1qSXJNaklST1M4ek1ERmxCeUUzQVFNakV3RUhJVGNCQnlFM0E5b2MvUk1iQVFuOXZmMENzeHY5ZFJ3RFVCejlIUnlkblowRkUvcFFCYkQ5anAyZEFuS2VuZ0FBQXdBN0FBQUVwQVd3QUFNQUJ3QUxBQnRBRFFjR0JnSUtDd3NEQW5JQ0NISUFLeXN5RVRNUk9TOHpNREZCQXlNVEFRY2hOd0VISVRjQjlmMjkvUUtiSFAyR0hBTkxIUDBuSEFXdytsQUZzUDF4bnA0Q2o1NmVBQUVBZFAvckJRVUZ4d0FyQUJ0QURTc3FLZ1VaRlJBRGNpUUZDWElBS3pJcnpETVNPUzh6TURGQkF3NENKeTRETnpjK0F4Y2VBaGNqTGdJbkpnNENCd2NHSGdJWEZqWTJOeE1oTndUT1ZqdXZ5RitSeDNRbkVSQVVaYWZxbVl2SGNRcTZCMEY1V25LbmNVUVBFUXNMUDRKclBYZHNMenYrdUJ3QzFmM3JVbDBtQVFKNHh2U0FjWW43dzI4REEyN0dpRmFBU0FNRVc1dS9ZblJWdWFCbEFnRVNMaW9CUnB3QUFBTUFPd0FBQlhjRnNBQURBQWNBQ3dBYlFBMEpCZ2dEQWdJR0J3SnlCZ2h5QUNzckVUa3ZNeklSTXpBeFFRY2hOeE1ESXhNaEF5TVRCR2djL1FJY2kvMjkvUVEvL2J2OEF6NmRuUUp5K2xBRnNQcFFCYkFBQVFCSkFBQUNBZ1d3QUFNQURMVUFBbklCQ0hJQUt5c3dNVUVESXhNQ0F2MjgvUVd3K2xBRnNBQUFBUUFILytnRVJBV3dBQk1BRTBBSkVBd01Cd2x5QWdKeUFDc3JNaTh5TURGQkV6TUREZ0luTGdJM013WVdGaGNXTmpZQzJiQzdyeE9JMkl1QnRWb0p2QVlvWWxGWGcxRUJxQVFJKy9tSHkyOENBMmk5Z1V4MlJnSURUWVFBQUFNQU93QUFCVkVGc0FBREFBa0FEUUFjUUJBR0J3c0ZEQWdHQWdRREFuSUtBZ2h5QUNzeUt6SVNGemt3TVVFREl4TWhBUUUzQVFFREFUY0JBZlg5dmYwRUdmMDkvbk1HQVNZQ01zRCthWU1CNVFXdytsQUZzUDFYL3B2ZEFSY0NHdnBRQXMrUS9LRUFBZ0E3QUFBRHNRV3dBQU1BQndBVlFBb0RBZ0lHQndKeUJnaHlBQ3NyRVRNUk16QXhaUWNoTndFREl4TURzUno5UFJzQkNQMjkvWjJkblFVVCtsQUZzQUFBQXdBN0FBQUd0d1d3QUFZQUN3QVFBQnRBRFFJSERnVUxDSElNQkFBSEFuSUFLekl5TWlzeU1oRTVNREZCTXdFQk13RWpBVE1EQXlNQk13TWpFd0YzcmdFQkFwdkEvTVdQL29HaGdHSzhCZHFpL2J0a0JiRDdYd1NoK2xBRnNQeUMvYzRGc1BwUUFrSUFBQUVBT3dBQUJYZ0ZzQUFKQUJkQUN3TUlCUWtIQW5JQ0JRaHlBQ3N5S3pJU09Ua3dNVUVESXdFREl4TXpBUk1GZVAyMy9makV2ZjIyQWdyRkJiRDZVQVJyKzVVRnNQdVNCRzRBQWdCei8ra0ZFQVhIQUJVQUt3QVRRQWtuQmh3UkEzSUdDWElBS3lzeUVUTXdNVUVIRGdNbkxnTTNOejRERng0REJ6YzJMZ0luSmc0Q0J3Y0dIZ0lYRmo0Q0JRQU1GR2VvNnBlUXdXc2hFQTBUYWFucWxaTEJhaC9YRFFzR04zeHRiNmgxUmc0TkN3YzRmR3R5cUhORkF3WmJodjdLZEFNRGZjejJmRnVHL2NwMUF3Tjh6UGJaWDFXNG9XWUVBMTJmd0dCZlU3bWlhUVFEWFo3Q0FBQUJBRHNBQUFUdkJiQUFGd0FYUUFzQ0FRRU9EQThDY2c0SWNnQXJLeklST1M4ek1ERkJKVGNGTWpZMk56WW1KaWNsQXlNVEJSNENCdzRDQXJUK2Vod0JiMTZkWnd3TE4zWlUvcWpodmYwQi9vTExiQXdObmZVQ09nR2RBVUNBWTFWN1JBTUIrdTRGc0FFRFo4Q0ptc2hnQUFBREFHdi9DZ1VJQmNjQUF3QVpBQzhBR1VBTUlCVURjZ0FyS3dNS0NYSUNBQzhyTWpJUk15c3lNREZsQVFjQkFRY09BeWN1QXpjM1BnTVhIZ01ITnpZdUFpY21EZ0lIQndZZUFoY1dQZ0lESlFFOWl2N0lBbGdORTJpbzZwYVJ3V3NnRHcwVGFhbnJsWkhCYXgvWURRc0ZOMzFzY0tkMVJ3NE5DZ1k1Zkd0eXFITkVwLzdUY0FFcEF0TmJoLzdKZEFNRGZjejJmRnlGL2NwMUF3Tjh5L2ZaWDFXNG9XWUVBMTJmd0dCZlU3bWlhUVFEWFovQkFBSUFPd0FBQkx3RnNBQVlBQjBBSTBBU0d4b0pBd3dNQ3dzQUhCa1lDSElXQUFKeUFDc3lLekl5RWprdk14SVhPVEF4UVFVZUFnY09BZ2NISVRjRk1qWTJOelltSmljbEF5TWhBemNUQndFNEFjaUZ6R3NNQ211b1pqaitQQm9CUVZpYmFRd0xPSGRVL3QzaHZRTS81YnIwQVFXd0FRTmd1NDV4bzIwZ0ZKMEJRSDFjV0hZK0FnSDY3Z0tVQWYxNERRQUFBUUFwLytvRW93WEdBRGtBSDBBUENpWVBOakV4S3dseUdCUVVEd055QUNzeUx6SXJNaTh5RVRrNU1ERkJOaTRDSnk0RE56NERGeDRDQnljMkppWW5KZ1lHQndZZUFoY2VBd2NPQXljdUF6Y1hCaDRDRnhZMk5nTnNDU3hVYURSTGtYUkJCd2hpbUxaZGdjeHlCN3dIT25sWVVKRmtDd2d3VldVdVVKVnpQUWdKWkp5NlhtS3Zoa2dGdXdVb1VYQkRUNWRxQVhkQ1dUMHBFaHBHWTRoYlpabG1NZ0lEYmNTRkFWZDlSQUlDTkcxVk8xUTZLQThiU1dlT1lHaVlZUzRDQVQxeW8yZ0JSbXBISlFFQ01Hb0FBQUlBcVFBQUJRa0ZzQUFEQUFjQUZVQUtBQU1EQmdjQ2NnRUljZ0FyS3pJeUVUTXdNVUVESXhNaEJ5RTNBMFA4dXYwQ2Z4ejd2QndGc1BwUUJiQ2VuZ0FCQUdQLzZBVWNCYkFBRlFBVFFBa0JFUVlMQW5JR0NYSUFLeXNSTXpJd01VRXpBdzRDSnk0Q054TXpBd1lXRmhjV05qWTNCR0M4cUJhaStabVIwV1VScUxxbkN6RjdaR3FqWnhBRnNQd3BtT0I1QXdOODI1SUQyZndtWDVSWEF3TlJtR2dBQWdDbEFBQUZZUVd3QUFRQUNRQVhRQXNBQmdnQkNRSnlBd2dJY2dBck1pc3lFams1TURGbEFUTUJJd01URnlNQkFqRUNYZFA5RVpkeDNSQ00vdHJtQk1yNlVBV3creVhWQmJBQUFBUUF3d0FBQjBFRnNBQUZBQW9BRHdBVkFCdEFEUkFNQVFvQ2NoTVNEZ1FKQ0hJQUt6SXlNaklyTWpJeU1ERkJBVE1EQVNNVEV3TWpBd0VCTXdFakF4TVRJd01EQWY4QnRJNlEvakNOSmtRRmczTUVTZ0Z6d2YzSGpDeHpIWU4rRVFIQkErLytiZnZqQmJEOEV2NCtCYkQ4SmdQYStsQUZzUHYvL2xFRUxnR0NBQUFCLzlRQUFBVXJCYkFBQ3dBYVFBNEhCQW9CQkFrREN3SnlCZ2tJY2dBck1pc3lFaGM1TURGQkV3RXpBUUVqQVFFakFRRUJudndCcXVmOXlRRlQwdjc5L2t2cEFrVCt0Z1d3L2RNQ0xmMG0vU29DT1AzSUF1Z0N5QUFCQUtnQUFBVXpCYkFBQ0FBWFFBd0VCd0VEQmdNSUFuSUdDSElBS3lzeUVoYzVNREZCRXdFekFRTWpFd0VCZGU4Qjd1SDljMTI4WWY2NkJiRDlKZ0xhL0diOTZnSXJBNFVBQUFQLzdBQUFCTTRGc0FBREFBa0FEUUFmUUE4RURBd0pEUUp5QndNREFnSUdDSElBS3pJUk14RXpLekl5RVRNd01XVUhJVGNCQVNNM0FUTWpCeUUzQkF3Yy9FTWJCR2I3czNzYkJFdDhUeHo4ZGh5ZG5aMEVmdnJsbWdVV25wNEFBQUVBQVA3SUFxTUdnQUFIQUE2MEF3WUNCd1lBTHk4ekVUTXdNVUVISXdFekJ5RUJBcU1adWY3N3VoaitrZ0UwQm9DWStYaVlCN2dBQVFEQS80TUNud1d3QUFNQUNiSUJBZ0FBTHo4d01VVUJNd0VCL1A3RXBBRTdmUVl0K2RNQUFBSC9lLzdJQWlBR2dBQUhBQTYwQlFRQUFRUUFMeTh6RVRNd01WTTNJUUVoTnpNQmx4a0JjUDdML3BBWXVnRUZCZWlZK0VpWUJvZ0FBZ0JQQXRrREVBV3dBQVFBQ1FBV1FBa0lCd2NHQUFVQ0F3SUFQODB5T1RrekVUTXdNVUVCSXdFekV3TTNNeE1DR1A3b3NRR2hkQTF1QW1pakJORCtDUUxYL1NrQ0M4ejlLUUFCLzRIL2FBTVhBQUFBQXdBSXNRSURBQzh6TURGaEJ5RTNBeGNiL0lVYm1KZ0FBUURRQk5vQ0t3WUFBQU1BQ3JJRGdBSUFMeHJOTURGQkV5TURBWjZOanMwR0FQN2FBU1lBQUFJQU1mL3BBOGNFVUFBYkFEb0FLVUFWS3l3ZUp4NDZPZzhuTVF0eUdCa0tjZ2tGRHdkeUFDc3lNaXN5S3pJU09TOHpFUkk1T1RBeFpSTTJKaVluSmdZR0J3YytBeGNlQWdjREJnWVhCd2NtTmhNSEp5SU9BZ2NHRmhZWEZqWTJOeGNPQXljdUFqYytBek1DcmxvSEpWVkFPR3RPRExRSFdJU1lTRzJoVWd0VENRTU9BcmNMQVhVVnF6WjRiRW9JQmlkUU5VV0daQk5DRTFaMWhrTmJrMVVHQm1DWHRGaTVBaTgrWGpRQ0FTWk1PZ0ZSZVZFbkFRSlpvSEQrQ0Rkdk5SRUJMbDRDQllJQkVDeFRRalpQTEFFQk9HaEVXVUp2VUN3QkFrNk5YbWVNVkNVQUFBTUFILy9vQkFJR0FBQUVBQm9BTHdBWlFBNGhGZ2R5S3dzTGNnUUtjZ0FBY2dBckt5c3lLekl3TVVFekF3Y2pBUWNPQXljdUF6YzNQZ01YSGdNSE56WXVBaWNtRGdJSEJ3WVdGaGNXUGdJQktyYm9NcWNEMlFJTlJYZXJjMmlPVWg0R0N4Rk9mS3B1YjR0SUU4SURCd1FuV1U4L2Ixby9FQ2NDUEc5S1UzaFJMd1lBK3NmSEFpd1ZZOGFrWWdNQ1hKVzFXMXhodXBaWEF3Tm1vYjV2Rmp5R2Rrc0NBaTFSYVRyelNIOVBBd05IZDVBQUFBRUFSdi9xQStJRVVRQW5BQmxBREIwWkdSUUhjZ1FFQUFrTGNnQXJNakl2S3pJdk1qQXhaUlkyTmpjM0RnSW5MZ00zTno0REZ4NENGU2N1QWljbURnSUhCd1llQWdIalFuSlFFYXdRaWNWcmNwOWdKQW9FREZLSnZIVnlxRnlxQVRCZVJWTjdWVEVKQlFZSkxtQ0RBVFJnUHdGdHBGc0NBbHVZdjJVcmJjV1pWZ01DWjdCd0FVQnNRZ01DUW5PTVNDcEFobk5JQUFNQVIvL29CSFlHQUFBRUFCb0FMd0FaUUEwaEJBUVdDM0lyQ3dkeUFRQnlBQ3NyTWlzeUx6SXdNV1VUTXdFakFUYytBeGNlQXdjSERnTW5MZ00zQndZZUFoY1dOalkzTnpZdUFpY21EZ0lDM09TMi92V2wvWW9DRFVkNnJuUm9qRkVkQmdzUlRudXJibXFMVFJmREFnY0ZLRnBOVW94a0ZpY0RJRDliT0ZSNlV6RGRCU1A2QUFJSkZXVElwbUlEQTF5WHRGdGNZYnFWVmdNRVpxRzdieFU4aFhWTEF3Sk9na3p6TjJWUU1RRURSM2VRQUFFQVJmL3JBOW9FVVFBckFCOUFFR2NUQVFZVEVoSUFHUXNIY2lRQUMzSUFLeklyTWhFNUx6TmZYVEF4UlM0RE56YytBeGNlQXdjSElUY0ZOelltSmljbURnSUhCd1llQWhjV05qY1hEZ0lCNm0ralp5d0pCQXBTaWJ0eWNaWlZHZ3NML084WUFsY0RDaVJmVUZONlVpOEpCQVlVT1daTFc1RThaeStDbWhRQ1ZaRzZaaXRveWFKZkF3SmNsN3RpVTVjQkVFaUdWd0lEU1h1UlJTcEFnbXREQWdKVFFGaEZYaTRBQWdCMUFBQURVUVlaQUJFQUZRQVZRQXNVRlFaeURRWUJjZ0VLY2dBckt6SXJNakF4WVNNVFBnSVhGaFlYQnlZbUp5SUdCZ2NYQnlFM0FTMjF6QTVrcG5JaFFpQVdGekVZUUY0NUNzNFovY1lhQkt0dHBWd0JBUWtIbUFVR0FUVmRQWEtPamdBQUF3QUQvbEVFS1FSUkFCTUFLUUErQUJ0QUR6QWxDM0k2R2dkeURnWVBjZ0FHY2dBckt6SXJNaXN5TURGQk13TU9BaWN1QWljM0ZoWVhGalkyTnhNQk56NERGeDREQndjT0F5Y3VBemNIQmg0Q0Z4WTJOamMzTmk0Q0p5WU9BZ09EcHJVVGg5bUxTWXgyS0dndmdWTmJqVmtPanYwSEF3eEhlSzUwYVl4UkhRWUxFVTU4cTIxcmkwd1d3Z01IQmloWlRWS01aQlluQXlBL1dqbFVlbE13QkRyNzNvZk9jZ01DTGxROWJFTlBBd0pIaEZrRFIvNjBGbVRJcFdFQ0ExeVh0RnRjWWJxVlZnTUVacUc3YnhZOGhIVkxBZ05PZ2t6ek4yWlFNQUVEUjNpUUFBSUFJQUFBQTlvR0FBQURBQm9BRjBBTUVRSVdDZ2R5QXdCeUFncHlBQ3NyS3pJUk16QXhRUUVqQVFNblBnTVhIZ01IQXlNVE5pWW1KeVlPQWdIZy92VzFBUXNZU2c1TGU2dHVWM1ZDRmdsMnRuZ0hGMDFJVEhwYk9RWUErZ0FHQVB4R0FtRzdsbGNEQWo5c2pVLzlPd0xJUVdrL0FnSSthNE1BQWdBdkFBQUI1UVhHQUFNQUR3QVF0d2NOQXdaeUFncHlBQ3NyempJd01VRURJeE1UTkRZM05oWUhGQVlIQmlZQm9MeTF2Q1E3THk4OUFUMHVMandFT3Z2R0JEb0JIQzgvQVFFOExpNDlBUUU1QUFML0UvNUdBZFlGeGdBUkFCMEFFMEFKRFFZUGNoVWJBQVp5QUN2T01pc3lNREZUTXdNT0FpY21KaWMzRmhZek1qWTJOeE0wTmpjMkZoVUdCZ2NHSnVHMnpReExoV0lmUEI0UkZTb1ZNRDhrQis4N0x5ODhBVHd1TGowRU92dEZXNDVRQWdFS0NKVUZCeWxHTEFYWEx6OEJBVHd1THp3QkFUa0FBd0FnQUFBRUd3WUFBQU1BQ1FBTkFCMUFFUVlIQ3dVTUNBWUNDUVlEQUhJS0FncHlBQ3N5S3o4U0Z6a3dNVUVCSXdrRE56Y0JBd0UzQVFIaC92VzJBUXNDOFAzby9yMFcyQUdCZGY3Y2N3RjNCZ0Q2QUFZQS9qcitFUDdkMXR3QllmdkdBZzZiL1ZjQUFBRUFMd0FBQWU4R0FBQURBQXkxQXdCeUFncHlBQ3NyTURGQkFTTUJBZS8rOWJVQkNnWUErZ0FHQUFBQUF3QWVBQUFHWUFSUkFBUUFHd0F5QUNGQUVTa1NBaTRpSWhjTEF3WnlDd2R5QWdweUFDc3JLeEV6TXhFekVUTXpNREZCQXlNVE13TW5QZ01YSGdNSEF5TVROaVltSnlZT0FpVUhQZ01YSGdNSEF5TVROaVltSnlZT0FnRm9sTGE4ckc5U0RraDVySEZVZEVjWkIzbTFlQWdmVkVoUmQwOHdBckNDREUxOHBHTllla2taQ1hlMmVBZ2RWRW83WWtndkExajhxQVE2L2d3Q1pieVVWQU1DUFdtSVRmMHZBc2xFYUQwQ0FqeHBoU0FtWGFhQVNBSUNQV3FOVXYwNUFzcEZhRHNCQWloSllBQUNBQ0FBQUFQYUJGRUFCQUFiQUJsQURSSUNGd3NEQm5JTEIzSUNDbklBS3lzckVUTVJNekF4UVFNakV6TURKejRERng0REJ3TWpFelltSmljbURnSUJaNUsxdkt0MFNnNUxlNnR1VjNWQ0ZnbDJ0bmdIRjAxSVRIcGJPUU5JL0xnRU92NE1BbUc3bGxjREFqOXNqVS85T3dMSVFXay9BZ0krYTRNQUFnQkcvK2tFRndSUkFCVUFLd0FRdHh3UkMzSW5CZ2R5QUNzeUt6SXdNVk0zUGdNWEhnTUhCdzRESnk0RE53Y0dIZ0lYRmo0Q056YzJMZ0luSmc0Q1R3TU1WWXpBZG5LalpTZ0tBZzFXamNCMWNhTmtLTUFDQncwellrNVRmbGsxQ1FJSERUTmlUbE4vV0RVQ0N4ZHR5cDVhQXdKZW04Sm5GMjNJbkZrREFsMmF3SDBZUDRoMFNnSUNSWGFRUnhjL2lYZExBZ05IZUpFQUFBUC8xLzVnQkFBRVVRQUVBQm9BTHdBWlFBNGhGZ2R5S3dzTGNnTUdjZ0lPY2dBckt5c3lLekl3TVVFREl3RXpBUWNPQXljdUF6YzNQZ01YSGdNSE56WXVBaWNtRGdJSEF3WVdGaGNXUGdJQmE5NjJBUVNtQW5VQ0RVVjJxM05sa0ZnbEJnNFJVWDZ0Ym0rTFNSTENBd2NISzF0T1BtOWFRQThyQVVCdlIxTjdWRElEWC9zQkJkcjk4aFZpeDZSaUF3SlZqYTljYjJLN2xsVURBMldodlhBV1BJWjFUQUlDTFZGcE92NzdSM2xLQWdKSGVaRUFBd0JHL21BRUp3UlJBQVFBR2dBdkFCbEFEaUVXQzNJckN3ZHlCQTV5QXdaeUFDc3JLeklyTWpBeFFSTTNNd0VCTno0REZ4NERCd2NPQXljdUF6Y0hCaDRDRnhZMk5qYzNOaTRDSnlZT0FnSnQ0VEdvL3Z2OUxnTU1TSG13ZFdpT1V4OEdDeEZRZnF4dWJJMU5GOFFEQndZcVdrMVRqMllYSndJaFFWdzVWSHRVTXY1Z0JSWEYraVlEcWhWbHlhUmdBZ05jbHJWYlhHSzZsVlVEQkdXZ3ZHOFZQSVoyVFFNQ1VJVk04emRuVVRJQkEwaDVrZ0FDQUNBQUFBTFJCRlFBQkFBV0FCbEFEUVlKQ1FVVUIzSURCbklDQ25JQUt5c3JNaklSTXpBeFFRTWpFek1sQnlZbUl5WU9BZ2NIUGdNWE1oWUJjcDIxdkxBQlJSRVZLeFZCWjA4M0VEa0xNMXVMWWhZckE0ajhlQVE2Q2E0RUJnRXBTbVE2SGxHcWtGZ0RDQUFCQUM3LzZ3T3pCRThBTlFBWFFBc2JBQTR5S1F0eUZ3NEhjZ0FyTWlzeUVUazVNREZCTmlZbUp5NEROejRERng0Q0J5YzJKaVluSmdZR0J3WWVBaGNlQWdjT0F5Y3VBamNYRkJZV0Z4WTJOZ0s4Q1Q5bE1EeDZaVHNEQkUxN2traG1wMklEc3dJeVdEZzFaa2dJQmlaRFN4OVNvR1FGQkZGL21FeHB0V3dEdFRkaVB6VnZVUUVsUGtZbERBOHNSV2RLVUhwU0tBRUNVSlpyQVRsU0xRRUJJMGs2S3pjaEZRZ1hSbnRrVlgxUkpnRUNVNTF4QVVGWkxnRUJIa2NBQWdCRC8rMENsUVZCQUFNQUZRQVRRQWtLRVF0eUJBSURCbklBS3pJdkt6SXdNVUVISVRjVE13TUdGaFlYTWpZM0J3WUdKeTRDTndLVkdmM0hHZTYwdHdNS0ppY1dLeFlOSUVNaFUxNGlCd1E2am80QkIvdkpJemdoQVFjRG1Ba0pBUUZTZ2tvQUFnQmIvK2dFRkFRNkFBUUFHd0FWUUFvQkVRWnlHQU1EQ3d0eUFDc3lMeklyTWpBeFFSTXpBeU1UTnc0REp5NEROeE16QXdZZUFoY1dOallDMEk2MnZLMXBTZzFDY2FkeVdYZEVGZ2gxdFhVRUJoNC9OR3lXV0FFRUF6Yjd4Z0hlQTJhM2pVOERBMEp3a0ZBQ3V2MURMRlZHS3dJRVdaNEFBZ0J1QUFBRDdnUTZBQVFBQ1FBWFFBc0FCZ2dCQ1FaeUF3Z0tjZ0FyTWlzeUVqazVNREZsQVRNQkl3TVRCeU1EQVlVQnFyLzkzWDhybWdWMDFMQURpdnZHQkRyOFg1a0VPZ0FFQUlBQUFBWCtCRG9BQlFBS0FBOEFGUUFrUUJRSEN3QVJBeFFHQ1JBTUFRb0djaElPQkFrS2NnQXJNakl5S3pJeU1oSVhPVEF4WlFFekJ3RWpFeE1ISXdNQkFUTUJJd01UQnlNRE53Rk1BYVI5T3Y1V2VpQkxEM1oxQTFNQmNicitGSDhSY2dadmZnZkpBM0c3L0lFRU92eHhxd1E2L0kwRGMvdkdCRHI4aXNRRGxxUUFBQUgveFFBQUEvVUVPZ0FMQUJwQURnY0VDZ0VFQ1FNTEJuSUdDUXB5QUNzeUt6SVNGemt3TVVFVEFUTUJBU01EQVNNQkF3Rkpwd0VtMy81T0FRakZzLzdQM1FHKy93UTYvbmNCaWYzaC9lVUJsZjVyQWkwQ0RRQUMvNnIrUndQc0JEb0FFd0FZQUJsQURSY1dGUU1JQWhnR2NnOElEM0lBS3pJck1oSVhPVEF4WlFFekFRNERJeVltSnpjV0ZoY1dOalkzRXhNWEJ3TUJYQUhJeVAyRkdVTlZha0FiTnhvTERCZ0xRMkZISEQrQkRJZkVld08vK3g0MVlrNHNBUW9HbUFJREFRSXFVamtFbmZ5dXYwSUVVd0FELys0QUFBUFBCRG9BQXdBSkFBMEFIRUFOQkF3TUNRMEdjZ2NEQXdZQ0VnQS9Nek1STXlzeU1oRXpNREZsQnlFM0FRRWpOd0V6SXdjaE53TktHLzBFR3dOcC9LeDFHUU5PZWs4Yi9URWNtSmlZQXhiOFVwRURxWm1aQUFJQU4vNlRBeFlHUHdBUkFDVUFHVUFLSFFrS0Nod2NFaE1CQUFBdk1pOHpPUzh6RWprNU1ERkJGd1lHQndjT0FnYzNOalkzTno0Q0F3Y3VBamMzTmlZbUp6Y2VBZ2NIQmhZV0F2b2NlbmdSSEE5NHZYWUxiM29QSEJGcHJYc3FiSWczREJ3SEdFeEhDbXllVUFzYkNReEZCajkwS2J4NnozdWRUZ042QklCcnozeTRmZmpuY1NTRnVHL1BRbWMrQlhvRVZaNXd6MGlLYmdBQkFDTCs4Z0hDQmJBQUF3QUpzZ0FDQVFBdlB6QXhRUUVqQVFIQy92S1NBUTRGc1BsQ0JyNEFBditOL3BBQ2JBWThBQk1BSmdBYlFBc2VDd29LSHg4QkZSUUFBUUF2TXk4ekVqa3ZNeEk1T1RBeFV6Y2VBZ2NIQmhZV0Z3Y3VBamMzTmlZbUFTYytBamMzUGdJM0J3WUdCd2NPQXB3cWJJYzREUnNJR0UxR0NXcWZVUXNiQ1ExRS9zSWNVV3M4REJzUWVMeDFDbTk1RUJ3UWFhMEZ6SEFqaHJodjBFSm1QZ1J5QkZHWmI5QklpMjc0NG5VYlo0dFJ6bnVaU1FOd0JJRnJ6bnk0ZlFBQkFHa0JrQVRkQXlZQUh3QWJRQXNNQUFBV0JvQWNCaEFRQmdBdk15OFJNeG9RelRJdk1qQXhRVGNPQXljbUppY21KaWNtQmdZSEJ6NERGeFlXRnhZV0Z6STJOZ1JQamdZMFdIeFBWSVk2SkZFMk8wNHJDSndITlZsOFQxU0dPU1JTTmoxUk1BTUlBMGVJYlQ4QkFsRTVKRDhCQVRwZU13TkhoV284QVFKU09TUkFBVDVqQUFMLzhmNlhBYUVFVHdBREFBOEFETE1CQncwQUFDOHYzYzR3TVVNVE13TVRGQVlIQmlZMU5qWTNOaFlQdzZPbjhEc3ZMajBCUEM4dVBQNlhCQlg3NndWUUx6NEJBVHN1THowQkFUb0FBQU1BVVA4TEEvSUZKZ0FEQUFjQUx3QWxRQklDQVNVbElRTWNCM0lIQkFnSURBWVJEWElBSzgzTU14STVPU3ZOekRNU09Ua3dNVUVESXhNREF5TVROeFkyTmpjM0RnSW5MZ00zTno0REZ4NENCeU0wSmlZbkpnNENCd2NHSGdJRENETzJNeWN6dGpOeVEzTlNFYXdSaXNkcmNwNWRJZ29GRFZXTHZuVnlwMW9CcXk1Y1JWTjlWek1LQlFnSUxGNEZKdjdnQVNEN0JQN2hBUjlaQWpWZ1B3RnRwVnNDQTF1WXYyVXJiY2FZVmdNRFo2OXdRV3hEQWdKQ2NvMUlLaitHYzBrQUEvL3pBQUFFaUFYSEFBTUFCd0FpQUNGQUVBWUZCUUVmRmdWeURBME5BZ0lCREhJQUt6SVJNeEV6S3pJUk9TOHpNREZoSVRjaEFTRTNJUUVEQmdZSEp6NENOeE0rQWhjZUFnY25OaVltSnlZR0JnUGYvQlFjQSt6Kzd2MXpHd0tPL3VwU0NrRkdzU3cySEFaVkVJWFVoSFNpVVFhOEJTWlhSbEYyUjUwQjBwMEJCUDJFVmFNMk54RlVaU29DZm9ISWJ3TURZNjV5QVVKb1BnSUNVSUlBQUFZQUV2L2xCWTBFOFFBVEFDY0FLd0F2QURNQU53QU90UThaQlNNTmNnQXJNaTh6TURGQkJoNENGeFkrQWpjMkxnSW5KZzRDQno0REZ4NERCdzRESnk0REFRY25Od0VISnpjQkp6Y1hBU2MzRndFeUN5RlRoRmhmcUlSVURBc2dWSU5ZWUtlRVZiVU9jclhuZzMzQWZqWU5EbkswNklOOXYzODJCUkhmY09EOFF1QnUzd05kcVpDby9JMm9qcWdDVjFDZGdVOENBMHlGcVZwUW5JQlBBZ05NaEtoWmZ1YXpaZ0lEYWJEYmRIN250R2NEQTJxeDJ3Sjd4WkxGKzdyRmtjVCtxdGFBMWdNMTEzL1hBQVVBUXdBQUJKOEZzUUFEQUFjQURBQVJBQlVBTFVBV0N4QVFCZ2NTRlJVSURnTURBZ0lSRkF4eUNSRUVjZ0FyTWlzU09TOHpFams1TWhFenpqSXpFVE13TVVFSElUY0JCeUUzSlFFekFRY0RFd2NIQVFFREl4TUR0eGI4MVJZQytSYjgxQmNCaEFIbjJ2M0dkb0htSVhyKzd3SGFocnlIQXVGOWZmN2RmSHpkQXhYOHJBRURWdnpnTkFFRFZQMVcvUG9EQmdBQy8vais4Z0haQmJBQUF3QUhBQTIwQVFJR0J3SUFQOTNlelRBeFV5TVRNeE1ESXhPdHRZcTFvb1MxaFA3eUF4Z0RwdjBLQXZZQUFBTC8ydjRQQkprRnh3QXZBR0VBSGtBVFV6OEFBUVVyWFRVeE1BOGhERTlFSFJRUmNnQXJNaTh6Rnprd01XVTNQZ0kzTmk0Q0p5NEROejRERng0Q0J5TTJKaVluSmdZR0J3WWVBaGNlQXdjT0F3TUhEZ0lIQmg0Q0Z4NERCdzRESnk0RE56Y0dIZ0lYRmpZMk56WXVBaWN1QXpjK0F3SlZERUorV0FzSU0xMXFMazZRY0RzSEIyS1dzMW1GdzJRSnRBWTNjbFJJa21nTUNUQllhakZQazNJOUJ3ZGJqYVo5REVOMVR3b0pNRmxyTWs2UmNEd0hCMkNWczFwa3FueEFCYm9GSTBscVFVZVNhUXNKTTF4cExVNlNjandIQmxlSG9HdDJBaXhjU1QxVU9TWVBHa0ZkaFY5a2oxc3FBZ0ptdjRoUmZFZ0NBU3BoVVVCVE5TUVBHa0ZmaDJCZmYwc2hBdjk0QXl4YlNFQlZOaVFRR2tCZGhsNW1qMW9wQVFJNGJLQnFBa05vUnlZQkFTdGlUejFTTnlVUEdrSmZoMkJjZmswakFBQUNBTm9FN3dOU0JjZ0FDd0FYQUE2MEF3a0pEeFVBTHpNekx6TXdNVk0yTmpjMkZoVUdCZ2NHSmlVME5qYzJGZ2NVQmdjR0p0b0JPeTh2UEFFOUxpMDlBYUk3THk4OUFUMHVMandGV1M0L0FRRThMeTQ4QVFFNkxDNC9BUUU4THk0OEFRRTVBQUFEQUY3LzZBWGVCY2NBSHdBekFFY0FIMEFPSFFRRUpTVkRGQTBOTHk4NUEzSUFLeklSTXhFekx6TVJNeEV6TURGQk53WUdKeTRDTnpjK0FoY1dGZ2NuTmlZbkpnWUdCd2NHRmhZWEZqWWxCaDRDRnhZK0FqYzJMZ0luSmc0Q0J6WVNOaVFYSGdJU0J3WUNCZ1FuTGdJQ0E2K01EcmlZYklZNUNBd01YNkp4a1pvSGpnVkZXMGxpTndrTkJSTkdSbDVoL1Q0UE1YcTlmWVRvdDNVUUR6QjZ2SDJFNmJkMWdoR0cxZ0VSbkpYbm1VSVFFWVhXL3UrY2xlZVpRZ0pWQVpXcUJRTnZyMkp6YUxKc0FnT3Bqd0ZWWkFFQ1RIaEJkVGwxVWdJRVp0UjAzTEpzQWdObnR1ZDljOXV5YXdJRFpyVG5mWlVCRWRWNkF3SiswLzc2akpUKzd0WjdBd0ovMUFFSEFBSUF3d0t5QTBvRnlBQVhBREVBR3JVeEdob05GaXE0QVFDeUNBMERBRDh6R3R6RUVqa3ZNekF4UVJNMkppWW5KZ1lISno0Q0Z4NENCd01HQmhjakpoTUhJdzRDQndZV016STJOamNYRGdJakppWTNQZ0l6QW5FMEF3MHFLRGxXRDV3SVg0dE1VM0k0QnpFSEF3ZWJEV0VUaGloWVFRWUhRQ3NtVTBNUEJobE5YalZqZmdNRGNLSlFBMTRCVmlRN0pBRUNNamdNVW1neUFnRkhlMUwreGk1YUxsQUJiRzhCRnpVdk1TY2ZOaVZ4TGtFaUFYVm1ZR2dvLy84QVZnQ1dBNDBEc2dRbUFaTDUvUUFIQVpJQk92LzlBQUlBZ1FGNEE4VURJUUFEQUFjQUVyWUdCd01HQWdJREFDOHpFVE1TT1M4d01VRUhJVGNGQXlNVEE4VWMvTmdkQXhvOXRUNERJYUtpUy82aUFWNEFCQUJkLytnRjNRWEhBQjRBTHdCREFGY0FOVUFiSHhzWUlBUUNBZ0VCRHlrTkRUVTFVd3dQRDBsVEUzSS9TUU55QUNzeUt4STVMek1STXhFekx6TVNPWDB2TXhJWE9UQXhRU00zRno0Q056WW1KaWNqQXlNVEJSNENCdzRDQndZR0J3NENCemNXRmdjSEJoWVhCeU1tTmpjM05pWWxCaDRDRnhZK0FqYzJMZ0luSmc0Q0J6WVNOaVFYSGdJU0J3WUNCZ1FuTGdJQ0F6WGVFcndvVHpvSENDVkhMWTF4aW9VQkFrMkVUZ1VEU0drMUJBY0VDaEFTSHhkdmZnZ0dBd01DQVlzRkJRUUdCemY5ZFE4eGVyMTloT20yZFJBUE1IcThmWVRwdDNXQ0VZYldBUkdjbGVlWlFoQVFodGIrNzV5VjU1bENBbytBQVFJYk55dzBOaFFDL1M4RFVBRUNNMnhXUzAwd0hRSUlBd2NJQlFGYUEyNTBOeUU5SVJFbFNDVTFSejVLZE55eWJBTUNaN2JuZlhQY3NXc0NBMmEwNTMyVkFSSFZlZ01DZnRQKytveVUvdTdXZXdJRGY5TUJDQUFBQVFENEJSY0Rtd1dsQUFNQUNMRURBZ0F2TXpBeFFRY2hOd09iRi8xMEZ3V2xqbzRBQWdEb0E3NEMxd1hIQUE4QUd3QVB0Uk1Nd0JrRUF3QS9NeHJNTWpBeFV6NENGeDRDQnc0Q0p5NENOd1lXTXpJMk56WW1KeUlHNndKS2VFbERaVGNDQTBkMlNVTm5PbnNGT3pNNFVnWUdOelE0VmdTNFIzeE1BUUZKY2tCSGVrc0JBVVp4UXpGS1V6WXdUUUZWQUFBREFDWUFBUVFBQlBNQUF3QUhBQXNBRXJjTEFnTURCQW9TY2dBckx6a3ZNekl3TVVFSElUY0JBeU1UQVFjaE53UUFHZnlHR1FKYW1hU1pBUzBZL05VWUExZVltQUdjL0M0RDB2dWxsNWNBQUFFQVhRS2JBdVlGdmdBY0FCT3hIQUs0QVFDekN4TURjZ0FyTWhyTU1qQXhRUWNoTndFK0FqYzJKaWNpQmdjSFBnSVhIZ0lIRGdJSEJ3SzVGLzI3RkFFOEhFRXlCZ2MxTDBKUURwc0pWNGhTUm5aR0JBUklaQy9FQXh1QWRBRUpHRHRGS0M4M0FVczlBVk4yUHdFQk0yVk1RV3haSlpJQUFBSUFid0tPQXV3RnZnQVpBRE1BTEVBTUhCZ0FBQm9hRUN3cEtTUVF1QUVBdFFzTENCQURjZ0FyTWpJdkdoRE1NaTh5RVRrdk14STVPVEF4UVRNK0FqYzJKaU1tQmdjalBnSVhIZ0lIRGdJSEl3YzNGeDRDQnc0Q0p5NENOVE1HRmhjeU5qYzJKaVluQVZ4SkpVZzBCZ2RDTGpKTkQ1d0lWb0ZJUTN4TkF3SmRoVDU0Qnc1ZlFIbE5Bd0poa0VwSmVrbVhBVWcxTjJJSUJpSTlKQVJsQWhjeUtqTXZBUzR3UzJRd0FRRXVZRXhLV1NjQkpFNEJBaUZUVEZScU1nSUJOV2RPTnpJQk9Ud3FMaE1CQUFFQTFRVGFBcVlHQUFBREFBcXlBWUFBQUM4YXpUQXhVeE16QWRYcjV2N09CTm9CSnY3YUFBQUQvK2IrWUFRbEJEb0FCQUFhQUI0QUdVQU1IUVVBRmdzVGNnTVNjaHdBQUM4eUt5c3lFVGt2TURGQk13TWpFemMzRGdNbkxnSW5Fek1HRkJZV0Z4WStBZ0V6QVNNRGNMVzhveHRFUEF3dldKSnRQSGRYREF0dEJCdEdRbGg2VGl6OXpyVCsrN01FT3Z2R0FRWDJBbGk4b0dJREFTbFVRZ0VpTTNGalFRSURPMnVLQW92NkpnQUFBUUI0QUFBRHZRV3hBQXdBRHJZREN3SnlBQkp5QUNzcnpUQXhZU01USnk0Q056NENNd1VDd2JaYlNJakFYZzRQbHV5UkFSVUNDQUVEZGN5SGxOVjBBUUFBQVFDbEFtb0JoUU5MQUFzQUNMRURDUUF2TXpBeFV6WTJOellXRlFZR0J3WW1wZ0U5TWpFK0FUOHhNRDhDMWpGQ0FRRStNVEUvQVFFOEFBSC95UDVMQVJFQUFBQVRBQkcyQ3dxQUV3SUFFZ0EvTWpJYXpESXdNWE16QnhZV0J3NERCemMrQWpjMkppWW5Kb0VWUDBBQ0FqNWhjVFVFSkU4OEJ3WXVSaHM0RGxWQVFWUXZGQUpzQWhFdEt5Y2pDZ1FBQVFEZ0Fwc0NjQVd3QUFZQUNyTUdBbklCQUM4ck1ERkJBeU1UQnpjbEFuQ0VtV25jR0FGaUJiRDg2d0pWT0lod0FBQUNBTDhDc0FOdkJjZ0FFUUFqQUJDMkZ3NGdCUU55RGdBdkt6SVJNekF4VXpjK0FoY2VBZ2NIRGdJbkxnSTNCd1lXRmhjV05qWTNOelltSmljbUJnYkhCd3Rqb1dwa2hqNElDQXRob0dwa2h6K3hDUVVVUUR3K1ZqSUlDUVVWUHpzK1Z6TUVFMUJrbzE0Q0EyR2ZYMUZrb2wwQ0EyR2VzRk16WUVBQkFqMWpPRkl5WVQ4Q0FqeGpBUC8vQUJFQW1RTmFBN1VFSmdHVERRQUFCd0dUQVY4QUFQLy9BTG9BQUFVMEJhMEVKd0hXQUU0Q21BQW5BWlFCRVFBSUFBY0NNQUxBQUFELy93QzFBQUFGZVFXdEJDY0JsQURtQUFnQUp3SFdBRWtDbUFBSEFkVURCZ0FBLy84QW5nQUFCWTBGdmdRbkFaUUJqQUFJQUNjQ01BTVpBQUFBQndJdkFLTUNtd0FDLzlIK2V3THdCRkFBSVFBdEFCaEFDZ0FBSlNVckVCRVJEUllBTHpNekx6OHpMek12TURGQk53NENCdzRDQndZV0ZoY1dOalkzTnc0Q0p5NENOejRDTno0Q0FSUUdCd1ltTlRZMk56WVdBWkN5Q1RaWlBpOWRRd2dJSVZKQ1FXaEZETFFOZkw5eWI2UlNDZ2hkaDBVb05SOEJBRHN2TGowQlBDNHZQQUtvQVZXQ2Jqb3NXV3BGUG1FNEFRSXpYVDhCYzZaWUFnTmFwWEpobm9RN0lreFpBWEl2UGdFQk95NHZQUUVCT2dBRy80TUFBQWQ1QmJBQUJBQUlBQXdBRUFBVUFCZ0FNVUFZQUJjWENBY1VFd2NUQnhNQ0RRTVlBbklNQ3dzT0FnaHlBQ3N5TWhFekt6SXlFVGs1THk4Uk14RXpNaEV6TURGQkFTTUJNd01ISVRjQkJ5RTNFd01qRXdFSElUY0JCeUUzQkNmOFJla0VWSHNrSC8wdUh3VjNHLzA0RzhuQnRjSUNueHY5bXhzREh4djlPUnNGRWZydkJiRDhZSyt2L29pWW1BVVkrbEFGc1AyU21KZ0NicGlZQUFBQ0FDZ0F6UVFDQkdRQUF3QUhBQXl6QkFZQ0FBQXZMek15TURGM0p3RVhBd0UzQVk1bUEzVmw4ZjJPZ1FKeHpvUURFb1g4N2dNa2MvemNBQUFEQUNEL293V2NCZXdBQXdBYkFETUFGMEFMQVFBdkNpTVdBM0lLQ1hJQUt5c3lFVE15TXpBeFFRRWpBUU1IRGdNbkxnUTNOejRERng0RUJ6YzJOaTRDSnlZT0FnY0hCaFFlQWhjV1BnSUZuUHNjbUFUbkJ3d1VaNmpxbDNPcWNEMFFEUTBUYWFucWxYV3BjRDBPMUEwSkFSdEJjbFp3cUhWR0RnMEpIRUp4VlhLb2MwVUY3UG0zQmtuOUdsdUcvc3AwQXdKVGpMTEhaRnlGL2NwMUF3SlRpN1BId0Y5RWs0cHdSUU1EWHA3QllGOURrb3R5UlFNRVhaL0JBQUlBT1FBQUJGNEZzQUFEQUJrQUhVQU9EdzRPQXhrRUJBTUFBbklEQ0hJQUt5c1JPUzh6RVRrdk16QXhRVE1ESXdFRkhnSUhEZ0lqSlRjRk1qWTJOelltSmljbEFUYTEvYlVCS2dGV2ZNRm9Dd3laNm9iK3ZSc0JLMWVYWkF3S05IQlAvdXNGc1BwUUJJc0JBMk80Z28vQllRR1hBVUY5V2xCMlFnTUJBQUVBSC8vcEJCb0dGUUE1QUJsQURTTWJOZ2dDQ25JSUFYSWJDM0lBS3lzckVUTVJNekF4UVFNakV6NERGeDRDQnc0REJ3WWVBd2NPQWljdUFpYzNGaFlYRmpZMk56WXVBemMrQXpjMkppWW5KZ1lHQVpDOXRMNE1RMjZhWkdTV1RnZ0dNa0EyQ2drdVRsRTJCQVowdUcwd1pXRXFOeTl5T3p4c1NRa0lNVkJSTkFVRk5VUTRDQWNjUlRoV2JEb0VXZnVuQkZoYm9ueEVBZ05Oa21jL1psNWlPamxkVlZka1AzS2RUZ0VCRHlBWm5DRXJBUUVwVXo4N1hsWllaMEk2WVZ0Zk9qUlhOZ0lEVm9rQUFBTUFFLy9xQmxjRVVRQVVBRElBWGdBM1FCeFhNek15RjBaRkZDVUFBeWtYUlJkRkR4OHBDM0pNUGo0RkR3ZHlBQ3N5TWhFekt6SVNPVGt2THhJWE9SRXpFVE15RVRNd01XVVROaVltSnlZR0JnY25QZ01YSGdJSEF3TUhKeUlHQmdjR0ZoWXpGajRDTnhjT0FpY3VBamMrQXpNQkxnTTNOejRERng0REJ3Y2hOeUUzTmlZbUp5WU9BZ2NIQmg0Q0Z4WTJOeGNPQWdLTldnWWJURU05Y0U4TXNRbFVnSmxOY3B0SURGTTlHZlJBZzE0SkJ5dFFNUzVzWjB3TlRDNlpzMVpmamtvR0JsaUpwbFFDY25Xa1l5WUtCUXhTaHJkd2FaUllIZ3NTL1BNWkFsSUdDeDlkVWs1NVZqTUpCZ2NPTm1oUlc1eExNekovaUxVQ0hUeG1RQUlDSzFZK0VWUjhVU1VCQTJPcmNQNEtBYVNNQVNwYVNUWklKUUVlT0U0dmtVMWdLd0VDVFkxaFlZTlBJdjF2QVZpV3dHb3Rac09jV2dNQ1VJZXRZSGFPSUVwOVRnSURSWFdMUXl4RmgyOUZBZ0krTG9vck5oZ0FBZ0JjLytnRVNnWXRBRFFBT0FBWlFBczJJQllXQVNvTUMzSTRBUUF2TXlzeUVqa3ZNek13TVVFM0hnSVNCd2NPQXljdUF6YytBeGNlQWdjbk5pNENKeVlPQWdjR0hnSVhGajRDTnpjMkxnSWxBU2NCQVlsRXB2R1NOQllPRDFTSXVYVmptbVl1Q1FsT2c3RnRZNkJkQkVrRkprZFpMbEIrV2pZSUJ4UTNXMEZRZDFJeUNnNFVKWFBGQWpYOXdUc0NQd1dOb0N5Mi9mN1FwV0pveUtGZUF3TlBoYXRlWkwyVVZRTUVZNk5qQVRST05Sd0JBanBvaFVvNWNtQTdBd0pLZkk5Q1pZdjZ6NVVjL3BsdEFXWUFBQU1BUkFDcUJDNEV2QUFEQUE4QUd3QVR0eGtUQWdjTkF3SVNBRC9keGpJUXhqSXdNVUVISVRjQk5qWTNOaFlIQmdZSEJpWUROalkzTmhZSEJnWUhCaVlFTGlEOE5pRUJzUUUrTVRFL0FRRS9NREEvalFFOU1qRS9BUUUvTVRBL0F4QzR1QUUzTVVJQkFUNHhNVDhCQVR6OUFERkNBUUUrTVRGQUFRRTlBQU1BT3Y5NUJDa0V1UUFEQUJrQUx3QVpRQXdnQVFFVkMzSXJBQUFLQjNJQUt6SXZNaXN5THpJd01VRUJJd0VCTno0REZ4NERCd2NPQXljdUF6Y0hCaDRDRnhZK0FqYzNOaTRDSnlZT0FnUXAvSlNEQTIzOHBnTU9WNC9CZUhHaFlpVUxBZzVZajhGMmNhRmpKY01EQndvd1lVNVRnRm8zQ3dJSUN6QmhUbFNBV2pZRXVmckFCVUQ5VUJodHk1OWFBd05lbk1GbUdHM0puRmtEQTEyWndIMFhQNGQxU2dJRFJYZVFSeGMvaUhkTUF3SkdlSklBQS8vZy9tQUVDUVlBQUFNQUdRQXZBQnRBRHlzS0lCVUhjZ29MY2dNQWNnSU9jZ0FyS3lzck1oRXpNREZCQVNNQkFRY09BeWN1QXpjM1BnTVhIZ01ITnpZdUFpY21EZ0lIQXdZZUFoY1dQZ0lCNlA2dXRnRlRBc3dDRFVWMnEzTm1rRmdrQmc0UlVYNnRibStMU0JQQ0F3Y0hLMXRPUG05YlB3OHJBU1JDV2paVGUxUXlCZ0Q0WUFlZy9Dd1ZZOGFrWWdNQ1ZZMnZYRzlpdTVaV0F3Tm1vYjV1RlQyRmRrc0NBaTFSYVRyKyt6WmZTaXdCQTBoNWtRQUFCQUJHLytnRkVnWUFBQVFBR2dBdkFETUFIVUFQSVFRRUZndHlNeklyQ3dkeUFRQnlBQ3NyTXM0eUt6SXZNakF4WlJNekFTTUJOejRERng0REJ3Y09BeWN1QXpjSEJoNENGeFkyTmpjM05pNENKeVlPQWdFSElUY0MzT1MyL3ZXbC9Zb0NERWg2cm5Sb2pGRWRCZ3NSVFh5cmJtcUxUUmpFQWdjRktGcE5Vb3hrRmljQ0h6OWJPRlI2VXpBRC9odjlsUnZkQlNQNkFBSUlGbVBKcG1NREExMlh0RnRjWWJxV1ZRTUVacUM3Y1JZOGhYVk1BZ05PZzB6ek4yVlFNUUVEUm5pUUF3S1ltQUFFQURZQUFBWENCYkFBQXdBSEFBc0FEd0FmUUE4REFvQUhCZ1lLREFzQ2NnMEtDSElBS3pJck1oRTVMek1hekRJd01VRUhJVGNCQnlFM0V3TWpFeUVESXhNRndobjZ2UmtENHh6OUFoeUwvYno5QkQvOXZQd0VqNCtQL3ErZG5RSnkrbEFGc1BwUUJiQUFBUUF2QUFBQm53UTZBQU1BRExVREJuSUNDbklBS3lzd01VRURJeE1Cbjd5MHZBUTYrOFlFT2dBQUF3QXVBQUFFV1FRNkFBTUFDUUFOQUI5QUR3d0hCd3NHQmdJSkF3WnlDZ0lLY2dBck1pc3lFVGt2TXpNUk16QXhRUU1qRXlFQkl6Y3pBUU1CTndFQm43eTF2QU52L1kzdkFhY0IwSlArcklNQnBnUTYrOFlFT3YyVW9nSEsrOFlCODMzOWtBQUFBd0FqQUFBRHNRV3dBQU1BQndBTEFCdEFEUUlLQUFjR0Jnb0xBbklLQ0hJQUt5c1JNeEV6TWhFek1ERkJCd1UzQVFjaE53RURJeE1DbUJmOW9oZ0RkaHo5UEJ3QkIvMjgvUU9qZzd5Ri9iU2RuUVVUK2xBRnNBQUFBZ0FrQUFBQ053WUFBQU1BQndBVFFBa0NCZ0FIQUhJR0NuSUFLeXN5RVRNd01VRUhCVGNCQVNNQkFqY1gvZ1FYQWNuKzlyVUJDd09tZ3J1Q0F4WDZBQVlBQUFBREFEWCtSd1ZoQmJNQUF3QUhBQmtBSFVBT0ZRNEdCd2NEQ0hJSkJRUUFBbklBS3pJeU1pc3lFVE12TXpBeFFUTURJd0UzQVFjVE13RU9BaWNpSmljM0ZoWXpNalkyTndFeHZmMjhBU09PQWxlTzliMysrUTVhbTI0Zk94NGVHREFaTjBjbkJ3V3crbEFGUm0zNnQyb0ZzUG45WjZKZEFnb0ptUWNKUEZ3dkFBSUFKZjVJQStjRVVRQUVBQ29BR1VBT0hCVVBjaVlMQjNJREJuSUNDbklBS3lzck1pc3lNREZCQXlNVE13TUhQZ01YSGdNSEF3NENKeUltSnpjV0ZqTVdOalkzRXpZdUFpY21EZ0lCYTVHMXZLRjlKQTFEY0tSdlhIeEZGZ2w5RGxtWmJCODdIUjRZTXhnM1J5WUlmUWNKSmt3OVUzOVpPUU5JL0xnRU92NEdBbDYrbTF3Q0FrVjFsbFA4L1dhZldnRUtDWndIQ0FFNFZ6QURBVFpmU2lzQ0FqeHFod0FGQUZYLzdBZGZCY2NBSXdBbkFDc0FMd0F6QUROQUdpOHVMaVl5S0RNQ2Npa25KZ2h5RlJJU0Zoa0pCQWNIQXdBREFEOHlNaEV6UHpNekVUTXJNaklyTWpJUk9TOHpNREZCTWhZWEJ5WW1JeVlPQWdjREJoNENGeFkyTndjR0JpY3VBemNUUGdNQkJ5RTNBUU1qRXdFSElUY0JCeUUzQXdwSmtra1JSWXhHWTVsdFJROHdDZzA4ZEYxSmtrZ09SbzVHZkxaeUt3OHZFMmVpMkFRQUcvMFNIQUVJL0wzOUFyTWMvWFljQTFBYy9Sd2NCY1lPQ0o0T0VBRkhmS0phL3MxT20zOVBBZ0lPREo4SUN3RURZNmZUY3dFd2U5bW1YZnJXblowRkUvcFFCYkQ5anAyZEFuS2VuZ0FEQUVmLzZBYllCRklBS2dCQUFGWUFKMEFUSkFBQVJ6d1RFaEk4VWhrTEN6RUhjandMY2dBckt6SVJNeklST1M4ekVUTXpFVE13TVVVdUF6YzNQZ01YSGdNSEJ5RTNCVGMySmlZbkpnNENCd2NHSGdJWEZqWTNGd1lHQVRjK0F4Y2VBd2NIRGdNbkxnTTNCd1llQWhjV1BnSTNOell1QWljbURnSUUzWEdlWUNRS0JBeFVpYlp1YUpOWUlBd1QvUDRhQWtrRkN5TmZUVXgxVkRJSkJRY0xMbDVOV0o5RlBVdk8rdzhERFZXTXZuZHluMThpQ2dNT1ZveStkbkdmWHlQRkF3Y0lMVjFPVTM1WE5Bb0RCd2t1WGs5VGZWWXpGQUpibWI1bExXVENubHdEQTArRnJHQjZsd0VjUjN4T0FnTklkNHBBS3o2RmMwa0NBemcwZjBnOUFpQVhiY3FmV2dNQ1g1ekJaUmh0eUoxWkFnTmVtNzk4Rno2SGRVd0NBMFoza0VnV1BvbDNUQU1DUjNtUkFBRUFOQUFBQXdzR0dRQVJBQTYyRFFZQmNnRUtjZ0FyS3pJd01YTWpFejRDRnhZV0Z3Y21KaWNpQmdZSDZMVExEVjZmY0NWSkpDSVdMQmRBV3pZS0JLeHBwbDRCQVEwSWp3WUhBVGxoT3dBQUFRQlMvK2tGR2dYRUFDd0FHMEFORHdBR0NRa0FHaUlEY2dBSmNnQXJLeklST1M4ekVUTXdNVVV1QXpjM0lRY2hCd1llQWhjV1BnSTNOell1QWljbUJnY25QZ0lYSGdNSEJ3NERBa2VReVhVbkVoUUVIeHY4b3djUEZVcUZZMjZyZTB3UERnNFNUWlYwWWJkWUl6aU1ra09YMllNdUVnMFRjTEx1RkFKc3VPMkVmSlVqV1o5NlNBTUNYNkRDWDE5anZwdGVBZ0V0SjVFb0t4QUJBWExFKzR0ZWcvdkxkZ0FBQWY5SC9rWURPQVlaQUNjQUtVQVZGQUlDRlNjR2NoOGlJaDRiQVhJTERnNEtCdzl5QUNzeU1oRXpLekl5RVRNck1qSVJNekF4UVFjakF3NENKeUltSnpjV0ZqTXlOalkzRXlNM016YytBaGN5RmhjSEppWWpJZ1lHQndjQ21oYkZuUXhXbDJ3Zk9oMGRGekFaTjBVbUJwNm1GcVlPRFZ5ZWNDWkpKQ1FZTUJoQVZqRUpEd1E2anZ2N1pxQmJBZ3NKa3djSlBWd3ZCQVdPY21tbVhnSU9DWkVHQmpkZE8zSUFBd0JtLytrR0ZBWTZBQWtBSVFBNUFCMUFEZ1VHQmlrcEFBQWNBM0kxRUFseUFDc3lLekl2TWhFNUVUTXdNVUUzRGdJSE56NENBd2NPQXljdUJEYzNQZ01YSGdRSE56WTJMZ0luSmc0Q0J3Y0dGQjRDRnhZK0FnVjVtd3hsdFlJT1ZHYzRmUTBUWjZucWxuU3BjRDRQRFF3VWFLcnFsWFNxY0QwTzFRNElBUnRCY1Zkd3AzVkdEZzBKSEVGeFZuS29jMFFHT0FLQnRXRURod0pKZXYwYVc0Zit5WFFEQWxPTXM4ZGpYSVg5eW5VREFsT0xzc2pBWDBTVGluQkVBd1JlbjhCZ1gwT1NpM0pHQWdSZG5zSUFBQU1BUS8vcEJQVUVzZ0FKQUI4QU5RQVZRQW9tR3d0eU1RQUFFQWR5QUNzeUx6SXJNakF4UVRjT0FnYzNQZ0lCTno0REZ4NERCd2NPQXljdUF6Y0hCaDRDRnhZK0FqYzNOaTRDSnlZT0FnUnJpZ3BRbDNZTVMxUW8rKzBDRGxlUHdYZHlvV0lsQ3dJT1dJL0JkbkdoWWliREF3Y0tNR0ZPVTRCYU53b0RDQXN3WVU1VWdGbzJCTEVCY1o1VUEzUURRV3Y5bXhkdHk1NWFBd0plbk1GbUdHM0puRmdDQTEyYXYzMFhQNGQxU2dJRFJYZVFSeGMvaUhkTUF3SkdlSklBQUFJQVkvL3BCb29HQXdBSkFCOEFHVUFNQlFvS0FBQVZBbkliRUFseUFDc3lLekl2TWhFek1ERkJOdzRDQnpjK0FpVXpBdzRDSnk0Q054TXpBd1lXRmhjV05qWTNCZldWRG0vR2tRNWpmRVQrZWJ5b0Y2SDVtWkhSWlJHb3VxY0xNWHhrYXFObUVBWUNBWkMrWVFPSEFrZUVDL3dvbCtCNEF3SjgyNUlEMmZ3bVg1VlhBd05TbVdjQUFBTUFXLy9vQlVjRWtRQUpBQTRBSlFBZFFBNEZDd3NBQUJzR2NpSU9EaFVMY2dBck1pOHlLekl2TWhFek1ERkJNdzRDQnpjK0FnRVRNd01qRXpjT0F5Y3VBemNUTXdNR0hnSVhGalkyQk1DSEMxU2FkZ3hRVnlyK0c0NjJ2SzFwU2cxQmNxZHpXWGRERmdoMXRYVUZCeDgvTkd1WFdBU1JkSkZHQW5JQ0wyRDh2UU0yKzhZQjNnTm11SXhQQXdKRGNKQlFBcnI5UXl4VlJpc0NCRm1kQUFBQi93bitSd0d3QkRvQUVRQU90ZzBHRDNJQkJuSUFLeXN5TURGVE13TU9BaWNtSmljM0ZoWXpNalkyTi91MXh3MVltVzBlT2gwZUZ6QVpOMGNuQndRNisyNW1vRnNCQVFvSmt3Y0pQRjB2QUFFQVAvL3FBODBFVVFBcUFCbEFEQkVVRkFBWkN3dHlKQUFIY2dBck1pc3lFamt2TXpBeFFSNERCd2NPQXljdUF6YzNJUWNsQndZV0ZoY1dQZ0kzTnpZdUFpY21CZ2NuTmpZQ09uR2VZQ1FLQlF0VWliZHRhSlJZSHd3U0F3TWIvYmdGRENSZVRVeDFWRElKQlFjS0wxNU1XSjlHUEV2T0JFOENYSmkrWlMxa3dwMWNBd0pQaGF4Z2VwZ0JHMGQ4VHdJQ1NIZUtQeXcraEhOS0FnTTROSDlJUFFBQUFRRVlCT01EWlFZQUFBZ0FGTGNIQlFVRUFRT0FDQUF2R3MweU9USVJNekF4UVJNVkp5Y0hCeWNCQXBmT2szS3dsd0VCRlFZQS92RU9BcWluQXc4QkRnQUFBUUVvQk9NRGdnWUJBQWdBRXJZQkJvQUhCQUlBQUM4eU1qSWF6VGt3TVVFWE56Y1hBU01ETlFHOWM3R2dBZjdpYjgwRi82bW9BdzMrN3dFUUR2Ly9BUGdGRndPYkJhVUdCZ0J3QUFBQUFRRUhCTW9EU3dYWUFBNEFFTFVCQVFtQURBVUFMek1hekRJdk1ERkJOdzRDSnlZbU54Y0dGaGNXTmdLNmtRaFRoMVI1bFFLU0F6aEdSMUVGMWdGVWVVQUNBcEI2QVVCVkFRRlZBQUVCRGdUdEFlUUZ4QUFMQUFteUF3a1FBRDh6TURGQk5EWTNOaFlWQmdZSEJpWUJEenN2TGowQlBDNHZQQVZWTHo0QkFUc3VMejBCQVRvQUFBSUJBUVMwQXFRR1VnQU5BQmtBRHJRWEJJQVJDd0F2TXhyTU1qQXhRVDRDTXpJV0J3NENJeUltTndZV016STJOelltSXlJR0FRSUJQR1E3VkhJQkFUeGtPMVJ5WVFRMExURk5CUVkwTGpKTUJYazhZanQyVXp4aE9IRldLMEpKTUN4RVRBQUIvNjcrVGdFVkFEb0FGUUFPdEFnUGdBRUFBQzh5R3N3eU1ERjNGdzRDQndZV0Z6STJOeGNHQmlNbUpqYytBc3BMSlZkQ0JnUWRJQm95R0FRalRDbFJXd0lDV1lFNlBSdENVeklnSVFFUUNuc1ZGUUZuVUU1MVZBQUJBTjRFMndPd0JlY0FHUUFuUUJNQUFBRUJDaEpBRHhwSUVnV0FEUTBPRGhjRkFDOHpNeTh6THhvUXpTc3lNaTh6THpBeFFSY09BaWN1QXdjR0JnY25QZ0lYSGdNek5qWURPSGdHTjJKR0pqNDdQQ1F4Tnd4NkJ6ZGlSeVErT3owbE1UZ0Y1d28vY2tZQkFSOG9IUUlCUXlzRlAzUklBUUVmSngwQ1JBQUNBTU1FMEFPK0JmOEFBd0FIQUE2MEFRV0FBQVFBTHpNYXpUSXdNVUVCTXdFaEV6TUJBZElCRk5qK3gvNCsyczcrOXdUUUFTLyswUUV2L3RFQUFBTC82ZjVvQVRmL3RnQUxBQmNBRHJRUENZQVZBd0F2TXhyTU1qQXhSelEyTXpZV0J4UUdCd1ltTndZV016STJOelltSXlJR0ZtWklRMXdCWWtkRFlWVUVLQ0FpT2dVRUl5RWtQUHBJWndGZ1EwWmpBUUZhUmg4dk5pSWVORGdBQUFIOWFnVGEvcjRHQUFBREFBcXlBNEFDQUM4YXpUQXhRUk1qQS80MmlJeklCZ0QrMmdFbUFBQUIvZW9FMnYvQkJnQUFBd0FLc2dHQUFBQXZHczB3TVVFVEZ3SDk2dkRuL3NrRTJnRW1BZjdiQVAvLy9Rc0UyLy9kQmVjRUJ3Q2wvQzBBQUFBQi9mUUUyZjgwQm5NQUZBQVF0UlFDQUlBTERBQXZNeHJNTWpJd01VRW5OejRDTnpZdUFpYzNIZ01IQmdZSC9uK0xGaHhHTndVRUh6SXpFUThxWGxNekFnTmpRZ1RaQVpnQ0N5QWtHaDBNQXdGcEFSQW5SVFpLU2d3QUFBTDgyd1RrLzRVRjdnQURBQWNBRHJRSEE0QUVBQUF2TWhyTk1qQXhRU01ETXdFakF6UCtpYlA3NmdIQW44SFhCT1FCQ3Y3MkFRb0FBZnk2L3FEOWtmOTNBQXNBQ0xFRENRQXZNekF4UlRRMk56WVdCd1lHQndZbS9MczdMeTg5QVFFOExpNDkrUzgvQVFFOExpODhBUUU1QUFFQkl3VHZBa0lHUHdBREFBcXlBSUFCQUM4YXpUQXhRUk16QXdFamI3Q3NCTzhCVVA2d0FBQURBUFFFN3dQdkJva0FBd0FQQUJzQUdVQUtFeGtaRFFHQUFBQUhEUUF2TXpNdkdzMFJNeEV6TURGQkV6TURCVFkyTnpZV0J4UUdCd1ltSlRRMk56WVdCd1lHQndZbUFpMWV2WS8rT3dFNk1DNDlBVDB1TGp3Q0pUc3ZMejBCQVR3dUxqMEZnUUVJL3ZncEx6OEJBVHd1THp3QkFUa3NMejhCQVRzdkx6d0JBVG4vL3dDbEFtb0JoUU5MQmdZQWVBQUFBQUVBUkFBQUJLVUZzQUFGQUE2MkFnVUNjZ1FJY2dBckt6SXdNVUVISVFNakV3U2xIUDFZNGJ6OUJiQ2UrdTRGc0FBQUEvK3lBQUFFM3dXd0FBUUFDUUFOQUJ0QURRWUNCd01DY2cwTURBVUNFbklBS3pJeUVUTXJNaEk1TURGQkFTTUJNeE1CTnpNQkp3Y2hOd05uL1JYS0ExRjZxZjcxR25RQk5uUWMrL1VjQlIzNjR3V3crbEFGTzNYNlVKMmRuUUFBQXdCbi8ra0UvZ1hIQUFNQUd3QXpBQnRBRFM4S0F3SUNDaU1XQTNJS0NYSUFLeXN5RVRrdk14RXpNREZCQnlFM0JRY09BeWN1QkRjM1BnTVhIZ1FITnpZMkxnSW5KZzRDQndjR0ZCNENGeFkrQWdQSkcvNEtHd01lRFJObnFlcVdkS2x3UGc4TkRCUm9xdXFWZEtwd1BBL1ZEUWtCRzBGeFYzQ25kVVlPRGdnY1FuQldjcWh6UkFNcmw1Y2xXNGYreVhRREFsT01zOGRqWElYOXluVURBbEtNczhmQVgwU1RpbkJFQXdOZG44QmdYME9TaTNKR0F3TmRuc0lBQUFML3hBQUFCSElGc0FBRUFBa0FGMEFMQmdBQ0J3TUNjZ1VDQ0hJQUt6SXJNaEk1T1RBeFFRRWpBVE1UQXpjekFRTXQvV25TQXdCL2JkOGllUUVHQlFqNitBV3crbEFGSW83NlVBQURBQXdBQUFTSEJiQUFBd0FIQUFzQUcwQU5BUUFGQkFRQUNBa0NjZ0FJY2dBckt6SVJPUzh6RVRNd01YTTNJUWNCTnlFSEFUY2hCd3djQTQ4Yy9Ub2NBdHdiL1Q0ZEEzb2NuWjBDb3AyZEFuQ2VuZ0FCQUVRQUFBVndCYkFBQndBVFFBa0NCZ1FIQW5JR0NISUFLeXN5RVRNd01VRURJeE1oQXlNVEJYRDl1K0g5U2VHOS9RV3crbEFGRXZydUJiQUFBQVAvMndBQUJJb0ZzQUFEQUFjQUVBQWhRQkFPQmdZSEJ3OENjZ3dEQXdJQ0N3aHlBQ3N5RVRNUk15c3lFVE1STXpBeFpRY2hOd0VISVRjQkJ3RWpOd0VCTnpNRDJCejhhQndFU2h6OGV4d0I4QVA5WW5rYkFqbitrUmhybnA2ZUJSS2VudjAzR2YweW1BSkxBa2VHQUFBREFGWUFBQVZyQmJBQUV3QW5BQ3NBSVVBUUZCVVZBUUFwQ0hJZkhoNEtDeWdDY2dBcnpUSXlFVE1yelRJeUVUTXdNV1VuTGdNM05qWWtNeGNlQXdjR0JnUWxGekkyTmpjMkxnSW5KeVlHQmdjR0hnSUJBeU1UQXR5ZWRMdC9PZ3dSc2dFV3BhWnp1WDg2REJHMC91ait3YUY4d0hZUUNSaElkMVNwZkw5MkR3b2FTWGtCMHYyOS9hOENBMUNQdzNTbi9Jd0NBMUtSdzNLcCs0bWhBbUN6ZTFDSVpqc0RBZ0ZqdEhwUmlHUTZCRjM2VUFXd0FBSUFoUUFBQlpBRnNBQVpBQjBBR1VBTUZBY0hEUndJY2gwQkRRSnlBQ3N5TWlzUk9SRXpNREZCTXdNR0FnUW5KeTRETnhNekF3WWVBaGNYRmpZMk53TURJeE1FMDcxWkc3bis0ckllZk1CL05RNVl2RmtLR2twOVZ4eUF5NElVNVAyOS9RV3cvZkt3L3Y2TEFnRUVWcGZPZXdJTy9mRlNrWEZEQkFFQ1o3dDlBZzc2VUFXd0FBQURBQW9BQUFUZUJjY0FMUUF4QURVQUpVQVNLQklTTHlrcE5CRVJNeTR5RW5JR0hRTnlBQ3N5S3pJeU1oRXpNeEV6TWhFek1ERkJOell1QWljbURnSUhCd1lHRmhZWEJ5NEROemMrQXhjZUF3Y0hEZ01ITno0REFUY2hCeUUzSVFjRUFCRUtDRFZ6WVdhWWFrQU5FUWtJSGxsWURYU2FWaGtPRUJKbG9kdUpncmR0Smc4UUVsK1d6SDhQWVloYU5mNXZIQUhXSFB2UkhBSGVIQUxXZGs2a2pWb0RBMUdMclZoMVJhK3BmaGFORnBQUDRtVnllK2UxYUFNRGI3YmdkSEoxNjhtSEVvNFZjNkMxL1lHZG5aMmRBQUFEQUVqLzV3UW1CRklBRmdBc0FFRUFHa0FOTGdZME96c2RFZ3R5S0FZSGNnQXJNaXN5TWhFelB6QXhVemMrQXhjZUJBY0hEZ01uTGdNM0J3WWVBaGNXUGdJM056WXVBaWNtRGdJQk13TUdCaFlXRnhZMk54Y0dCaWN1QXpjVFVnSU5RM2F2ZUZKM1Rpc09CUW9RU1hhbWJXbUxUQmpEQWdjR0tsaExTWGxlUHhBSkF4UTFYVVZYZkZBdUFuZWJoZ0VGQkJVWkNCRUlDaG8zSUQxREhBRUVYQUh0Rm1UU3NHa0RBMEJyaFpGR1UxNjdtVmtEQTEyV3RIQVdPMzV0UkFNQ1FuQ0VRRUE2ZzNWTkFnUlJoWm9COFB6ckR6QXZJZ0VCQkFHTUVROEJBVDloYXk0Q05BQUFBdi94L29BRVNBWEhBQndBT2dBZVFBNDFBQ1luSnh3Y01CMERFd2tMY2dBck1qOHpPUzh6RWprNUx6QXhRUmNlQWdjT0FpY3VBemMzQmhZV0Z4WTJOamMySmlZbkp4TWVBZ2NPQWlNak56TXlOalkzTmlZbUp5WUdCZ2NESXhNK0FnSWNnM0tzV1FrTGh0cUlWSXhsTkFaT0IweUZUMXFPV1FvSUlsaEpsOHh3cWxzSkNJN09hMk1WU1V4N1Rna0hLMXRCU241VkRQcTErUkdQMHdNNEFRUmdyWFdIejNNREFqWmppbFVxVkhkQUFnSk9pRmRDZTFNRUFRTUNBbUdzY1hlZFQzZzNhazgvWnowQ0FrTjBSL3BPQmJGMnVHZ0FBd0NGL2w4RUd3UTZBQU1BQ0FBTkFCbEFEZ2dNQXdRS0JRRUZEUVp5QVE1eUFDc3JNaElYT1RBeFpRTWpFemNCTXdFakF4TUhJd01DQW1DMVlHb0JvOEg5djM4bGtRUnp5NFQ5MndJbGdRTTErOFlFT3Z5MTd3UTZBQUFDQUVYLzZRUUpCaUFBTEFCQ0FCbEFEUlFvUGdNRU14NExjZ3NFQVhJQUt6SXJNaElYT1RBeFFUNENGeklXRndjbUpnY2lCZ1lIQmg0Q0Z4NENCd2NPQXljdUF6YzNQZ0kzTnk0Q0F3Y0dIZ0lYRmo0Q056YzJMZ0luSmc0Q0FVc0dlTFJoUllGQUR6dURRaTViUWdrR0lqeERHM2VhUVEwRERWYU12WE52bjJFbUNRTU5hYXR5QWpOSEpFQURCd3N3WGt4UWUxWTBDd0lIRXpSWVFGQjlXalVFN1d1SVFBRWZHYUliSXdFZVB6SW1PU3NmRERLZzFvQVhiTUdXVXdNQ1daUzZaUmR3dzRjVkRSaE5ZdjFZRmorQWJrVUNBMEZ3aVVjVk5udHlUZ2tLUkhtUEFBSUFLZi9xQStBRVR3QWZBRDhBSDBBUEFDRStQZ01ERmpVckIzSU1GZ3R5QUNzeUt6SVNPUzh6RWprNU1ERkJGd2NuSWdZR0J3WWVBaGNXTmpZM053NERKeTRETno0REJTY3VBemMrQXhjZUF3Y25OaVltSnlZR0JnY0dIZ0lYRndIdzRoUzhQMzFaQ0FZb1JWSWxQbnhjRHJRSldZaWlVMGlRZDBRRUJWYUdtUUVleVRwL2JVSURBMVNGbmsxSmltOUFBcklDUDJNME4zaFpDUVllT1VrazB3Sk1BV3dCSDA5S0xrQW5FZ0VCS1ZWQ0FWdUNVeVlDQVNWTGVGUlljVUFhUndFQ0hUeGpSMXA4VENJQ0FpaFBkMUVCT2tza0FRRWhURDh0T2lJUEFRRUFBQUlBaXY1L0JEMEZzQUFvQUN3QUZVQUpGUUlzTENrcEFBSnlBQ3N5THpNUk15OHdNVUV6QndFT0FnY0dIZ0lYRng0Q0J3NENCeWMrQWpjMkppWW5KeTRETno0Q053RWhCeUVENDFvWC9tcEtpbUlQQlFRV0xTUjNPbWM5QkFVL1hDOWNHRFFvQlFVbk9SZFJSV1ZBR1FnTmNxQk8vdjhEQmhyOCtRV3dnZjVmVEtHNGJpVS9OU2dPSnhNcVRraytjVjhrV2hvNlFpVWZKaFlIR1JVL1YzTkpjOS9GVHdIVWx3QUFBZ0FsL21FRDZBUlJBQVFBSEFBWFFBd1lDd01HY2dJS2Nnc0hjaEVBTHlzckt4RXpNREZCQXlNVE13TUhQZ01YSGdNSEF5TVROaTRDSnlZT0FnRnNrclc4b1doRUMwUjJxWEJkZkVVV0NidTF1d2NLSjB3OFVubFVNd05JL0xnRU92NEdCR08rbWxvQ0FrQnVrMWI3cXdSVE4xMUdLQUVEUDIySUFBTUFkZi9wQkNNRnh3QVpBQ2NBTmdBZFFCQU5LR293SUdvd01BMEFHbW9BRFF0eUFDc3ZLeEk1THlzck1ERkJIZ01VQndjT0JDY3VBelkzTno0RUZ5WU9BZ2NISVRjMk5pNENBUlkrQXpjM0lRY0dCaDRDQXJ4cGkxRWlDeHdPTTFONXBtNXBpMUFpQVFzYkRqTlRlYVprVzMxUEt3c0lBaElKQmdnSkoxRCs3a2x0VFRRZkNBYjk3UVlHQ0FrbVVRWEVBMUtJcUxOVHVGdTlyWWRNQXdOVWpLdTBVcmxidTZxRVNwa0VXNU9sUnpjNUwzaDhhMFA3V0FNOGFZR0ZPQ2NvTG5tQWJrY0FBUUNFLy9RQjZBUTZBQkVBRHJZR0RRdHlBQVp5QUNzck1qQXhRVE1EQmhZV0Z6STJOd2NHQmljdUFqY0JFYldJQkFvbkp4VXNGUXdnUXlKVFhpSUhCRHI4MkNNNElnRUhBNWNLQ1FFQlVvTktBQUwvdVAveEE4QUY3QUFFQUNZQUhrQVFBQnNFQXdRQ0lBVUFjZzhXRmdJS2NnQXJNaTh6S3pJU0Z6a3dNVUVCSXdFWEFUSWVBaGNUSGdJWEZqWTNCd1lHSXlJbUppY0RBeTRDSnlZR0l6YzJOZ0l1L2xyUUFsaUQvdnN0U0RjbkMrTUdFUjBaQ1JJSkJoRWlFa0pTTUJDblFBY1ZKUjRNR0EwTUZpd0RIZnpqQkUwTUFhc1dMRUVxKzZvV0pSZ0NBUUVCbWdVRk5GczdBeU1CRXhzckd3RUJBWThFQmdBQ0FFRCtkZ1FBQmNZQUhnQkdBQmxBQ3g4UkR3OGhJVE1GR3dOeUFDc3lMemt2TXhJNU9UQXhRUWN1QWlNaUJnWUhCaDRDRnhjSEp5NEROejRERnpJV0ZnRVhCeWNpQmdZSEJoWVdGeGNlQWdjT0FnY25QZ0kzTmlZbUp5Y3VBemMrQXdRQUtTSklTQ1ZCazI0TENTcFJaak9WRllGSW5vcFNCUVpobHJGVksxVlUvdHlaRkg5dXdJQU5DVEJqUldZNGFVQUZCRUJjTFdRYU9Db0dCU2M2R0RWWWptTXVDQXB6c2RNRm5KTUxFUW9pVmswK1VTOFVBUUYwQVFFalMzcFpZNGhTSkFFS0V2M0dBWEFCUXBOM1NuVlJGQnNRSzFCRlBXOWZJMWNjT2tJb0lTTVNCdzhZU1dtVFluaW9aekFBQUFNQVlQLzBCS1FFT2dBREFBY0FHUUFaUUEwT0ZRdHlCZ3B5Q1FjQ0F3WnlBQ3N5TWpJckt6SXdNVUVISVRjaEF5TVRJVE1EQmhZV016STJOd2NHQmlNdUFqY0VwQnY3MXhzQldyeTJ2QUk1dFlnRUN5WW5GU3NVQ1NGRElWUmVJZ1lFT3BtWis4WUVPdnpZSXpnaUJnU1lDZ2tDVW9OS0FBSC8zZjVnQS84RVVRQXZBQmRBREI0cEJoRUxjZ1lIY2dBT2NnQXJLeXNSTXpJd01VTVRQZ01YSGdNSEJ3NERKeTRETlI0Q0Z4NENGeFkrQWpjM05qWW1KaWNtRGdJSEF5T3FEMDUvc1hGNG1WSVhDd01NUm5XbmIycU9WQ1VNR1JvTkNqZG1VRTk0VXpFS0FnY0JJbGhSU1c1Tkx3cXIvbUFENG1XK2xsWURBMmlveW1VV1lieVlXQUlEVlkydlhRMGFHUXhIZVVvREFqNXNoMFVWTzVDR1dBTUNSbk9FUGZ3Z0FBQUJBRXIraVFQZkJGRUFMUUFPdFJzSkJRQUhjZ0FyekRNdk1ERkJIZ0lISnpZbUppY21EZ0lIQndZV0ZoY2VBZ2NPQWdjblBnSTNOaVltSnk0Q056YytBd0p6ZEtWVEJxc0ZLRnBJVDNoV013a0dDeitCV0R0dlJRVUVRRnN1WEJvekpRVUZKRG9hZ3JkWkRnUU1WSXE2QkU0Q1phOXpBVU5yUVFJQ1JYV01ReXBoajJJZEV5NVRURHh3WHlOWkd6bEJLQ0lsRXdja2ljMkxLMm5FbTFrQUF3QkkvK2tFcmdSSUFCZ0FMZ0F5QUJOQUNTb0dNZ1p5SHhRTGNnQXJNaXN5TWpBeFV6YytBeGNlQWhjZUFnY0hEZ01uTGdNM0J3WWVBaGNXUGdJM056WXVBaWNtRGdJQkJ5RTNVZ01OVm82K2RCMDhPaHBXWXlRSkF3eGFqcnR1Y1o5ZklzSURCd2t0WGs5VGZWY3pDZ01IQ3k5ZlRGRjhWelVEbXh2OTFoc0NDaGRseWFKWERRTW5MZzBxbUxkWUYyaThrRkVDQWw2YnYzd1hQb2QxU3dNQ1JuYVFSeGMrZ205SEFnSkJjWW9CMHBtWkFBQUNBSWYvNndRUkJEb0FBd0FWQUJWQUNnVUtFUUlEQm5JUkMzSUFLeXN5RVRNeU1ERkJCeUUzSVRNREJoWVdNekkyTnhjR0JpY3VBamNFRVJyOGtCc0JVclNKQXdVZ0pSZ3NGaDRuVkRCV1dod0hCRHFXbHZ6U0hqc25EZ21HR2hnQkFsZUlTd0FCQUdqLzV3UGlCRHdBSGdBVFFBa1FCeGtBQm5JWkMzSUFLeXNSTXpJd01WTXpBd1llQWhjV1BnSTNOZ0luRnhZV0JnY09BeWN1QXpmZnRXMEZBUmsvT2xKL1dUVUtFeEVqdHhrVkF3d09VWWkvZTJPRVN4Z0pCRHI5YlN0a1dqc0JBMU9JbWtTQUFRZDlBbEtzcjFWdDFLeGtBd0pLZmFCWkFBRUFRUDRpQlNVRVBRQXZBQmxBRENzRkJSa1lCbklpRHd0eUFBQXZLeklyTWpJUk16QXhRUk0rQWhjZUF3Y09BeWN1QXpjK0FqY1hEZ0lIQmg0Q0Z4WTJOamMyTGdJbkJnWUhBd0dmNFFoS2RFaHBubVlxQ2c5N3d2S0hnODZLT3hBTlVvZGRXVHhlUHcwUUlsdU9YSUhobHhBSERqSmVSeDhtQ2ViK0lnVTFTR2MzQVFKZW1yeGZpOWlTU2dJQ1U1alRoRzdDb1QySU1udU9UVnFhY2tFQ0EyVytoVDJCYjBrRkNCd2grc1FBQWdCTy9pY0ZKQVE4QUI0QUlnQVZRQW9oQnhrTGNpQVFBQVp5QUNzeU1pc3lMekF4VXpNREJoNENGeFkrQWpjMkFpY1hGaFlHQnc0REp5NEROd0V6QVNPd3RWSU1GVXFJWm1heWpGd1FFeFlsdGhzWEFRc1RkcnJ5alkzTmZ5OFJBa2ExL3ZLMUJEcitGbHlsZ0VzQ0FqNTJwV1YrQVFaNkFsR3JyRldOM3B0UEFnSmJwT0dJQWViNTdRQUNBR2YvNXdYdkJEd0FIZ0EvQUJsQURBRVhDZ29wTmg4R2NqWUxjZ0FyS3hFek14RXpNakF4UVJjZUFnY09BeWN1QXpjVE13TUdCaFlXRnhZK0FqYzJBaVVYQmdJSEJnWWVBaGNXUGdJM0V6TUREZ01uTGdNME56NENCUHUwSUI0Q0N3dzliYVoyWkhnN0N3b3dnREFHQVJwR1FVNW5QaUVJRVJyOEhzTkdoUllHQ1FRZVFEZEdZajhrQ0RCL01RdzVZWlZwV25oR0h3Z05PVmNFUEFKU3JLOVdZZEN6YkFNQ1hwU3JVQUVwL3RRdmMycEdBZ05ialpZNmdnRUhlZ0Y4L3YyUEpHcHlaVUVEQkQ1b2VqZ0JMUDdYV0xHVFZnTUNUSHVXbkVaaHRhb0FBUUJTLytjRWF3WExBRGdBSFVBTkhSNFhOZ1FFRFNNWEMzSXREUUF2TXlzeUVUa3ZNeERNTWpBeFFRY0dCaWN1QWpjM1BnSVhIZ01IQXc0Q0p5NEROeE0zQXdZV0ZoY1dOalkzRXpZdUFpY21CZ1lIQndZV0ZoY3lOZ1JyQWpCbk01dnlnd3dCQ2wrZGFGQnhSQmtJYlJKN3k0eGhsR0FvQ3phMU5na2dYbFZhZVVVTWF3UUNGRElzTjBrbkJnRUlVWjl1TW1RRENaWVNFUUVCZ09pZ0VXT2dYUU1DUG1pRlNmMWlndEo1QkFKSmZhUmRBVTBDL3JCTGhsY0RBMU9MVUFLZ0kwcEFLUUVDT0Zvd0VtNmdXQUlQQUFBREFHY0FBQVRkQmNFQUF3QVdBQ2tBSGtBT0VBa0pIeVlEY2hvWUZnTURBaElBUHpNUk16TXpLekl5RVRNd01VRURJeE0zQVQ0Q0Z6SVdGd2NtSmlNaUJnWUhBU2NERXhjSEF5NENKeVlHQnljMk5qTWVBZ0tCZUx0M1p3RXVIVVZlUVNNL0lEUU1HQTBjS3lNTy9sK0xLSW9GZmJnSEZpQVhEaHNPRkJ3Nkh6cFJOQUt2L1ZFQ3IxTUNBVFZYTWdJUURwVUVCaFltRmYxWkFnTGgvZWZJQWdLbUZTSVVBUUVGQkpvTURRRXlVd0FBQXdCby8rWUdRUVE4QUFNQUpBQkZBQ0ZBRUNZRkF4d1BMendMY2p3UEFnTUdjZzhBTHlzeUVUa3JNaEV6RVRNek1ERkJCeUUzSlJjZUFnY09CQ2N1QXpjM013Y0dCaFlXRnhZK0F6YzJBaVVYQmdJSERnSVdGaGNXUGdJM056TUhEZ01uTGdNMk56NENCa0ViK2xzYkJCcTFJQjRCQ3drbVAxK0hXbU41T2dzS0tIOG5CZ0ViUmtFNVVEVWlFZ1VSRy94bXhFYUdGZ1FMQVJVME1VVmhQeU1JSjRBcEREaGlsV2hXYmp3WEFnZ05PbGNFT3BpWUFnSlNySzlXU0tLZGYwc0RBbCtVcTFENS9DOTBhMFlCQVQ5b2VIQW9nZ0VIZWdGOC92MlBIV1p6YWtZREJqOXFlemI4K1ZleWsxY0RBMUNBbUpnL1liV3FBQU1Bb3YveEJYWUZzQUFiQUI4QUl3QWhRQkVmSXhnRkJRNGlJeDRJY2lNQ2NnNEpjZ0FyS3lzUk14STVMek1STXpBeFFUYytBaGNlQWdjT0F3YzNQZ00zTmlZbUp5WUdCaE1ESXhNaEJ5RTNBam9MT1hwK1BZclBhZ3dMWEpTL2JndEplbHM1Q0FvM2VsbEFmWHFYL2J2OEFyY2MrN2NjQW9xb0Z5RVNBUUpxeUpCMHFtNDRBcGtCSjB4eFNscDlRZ0VDRXlJREVQcFFCYkNlbmdBQUFnQnovK2tFL2dYSEFBTUFMQUFkUUE0REFnSUpIUmtVQTNJcEJBa0pjZ0FyekRNcnpETVNPUzh6TURGQkJ5RTNBVGNPQWljdUF6YzNQZ01YSGdJWEl5NENKeVlPQWdjSEJoUWVBaGNXTmpZRGdoejl1eHdDb3JzZXB2aWFpN3RxSVJBVkZHbXA2Sk9VeG1jRXV3UTBkV1Z1cFhOR0R4WUpHajVzVW0rZlp3TXVuWjMrb0FLVzNIVURBM2ZFN1hpUWhmWEJiUU1EZjlxTVhKTllBd1JZbUxwZmt6K01obTVFQWdST2xRQUFBLy9OLy84SDdRV3dBQkVBRlFBdUFDZEFFeVFoSVFrdUZoWUFDZ2tJY2hRVkZTTUFBbklBS3pJeUVUTXJNaEk1THpNUk14RXpNREZCTXdNT0JDY2pOemMrQkRjQkJ5RTNBUVVlQWdjT0F5Y2hFek1EQlRJMk5qYzJKaVluSlFJQnU1c1RMMGR4cVhrNEVpUlhkVW90SEF3RFVCejlnaHdDandGMWdzSmxEQXBjbGJ4by9lUDl2ZUlCU2x1WFlnd0tNVzVTL25NRnNQMDNYOC9DbkZ3Qm5BSUdXSWlob0VJQ3FaNmUvY3dCQkd2Q2hXNnBkRHNCQmJENjdRRkpobDFRZTBjREFRQUFBd0JFLy84SCtnV3dBQU1BQndBZ0FDTkFFUWdnSUFNQ0FnWVZCd0p5RmhNVEJnaHlBQ3N5RVRNck1oRTVMek16THpNd01VRUhJVGNUQXlNVEFRVWVBZ2NPQXljaEV6TURCVDRDTnpZbUppY2xCR0ljL1E4Y2pQeTkvUU9ZQVhWN3htc0xDRjZWdTJiOTVQMjg0QUZKVnBabERBbzVjVXorY3dNNW5aMENkL3BRQmJEOW53RUVYclNFYktWdU5nRUZzUHIyQVFFOWVscFBiam9EQVFBREFMUUFBQVdjQmJBQUZRQVpBQjBBSFVBT0dRRVlCaEVSR0J3ZEFuSVlDSElBS3lzeUVUa3ZNeEV6TWpBeFlTTVROaVltSnlZT0FnYzNQZ01YSGdJSEFRTWpFeUVISVRjRlFMeE1DeVpzWHpsdWJtdzJFRFJxYTIwM2pzTmJFZjJPL2IzOUFyMGMrN2NjQWNwY2dFTUNBUW9TR2crZ0VCb1FDQUVDWnNhU0ErajZVQVd3bnA0QUFnQkMvcGtGYndXd0FBY0FDd0FYUUFzSkJnRUNjZ3NEQXdBSWNnQXJNaEk1S3pJdk1ERnpFek1ESVJNekF5VURJeE5DL2IzaEFyYml2UDMrWlZhOFZ3V3crdTBGRS9wUWl2NFBBZkVBQWdBMi8vOEVsd1d3QUFVQUhnQWhRQkFHSGg0RUFoTVRCUUp5RkJFUkJBaHlBQ3N5RVRNck1oRXpFVGt2TXpBeFFRY2hBeU1URXdVZUFnY09BeWNoRXpNREJUSTJOamMySmlZbkpRU1hIUDFYNGJ2OEtBRjFmOFZwREFsZGxidG8vZVQ4dmVJQlNsbVhZZ3dLTlhCUC9uTUZzSjc2N2dXdy9hOEJBMks0aG02bWNEZ0JCYkQ2N1FGRWdWeFJjajBEQVFBRy80eittZ1Y2QmJBQUF3QUhBQXNBRHdBVEFDVUFKMEFUQ3hFUklBTURCeDRJY2c0UER4QVVBbklKQlFBdk15c3lNaEV6S3pJeUVUTXlFVE13TVdVSElUY3pBeU1USVFNakV4TUhJVGNoQXlNVElUTUREZ1VISXpjWFBnTTNCSzhjKzlJY0gxcTZXQVZ1Vzd0WlJCejlsQndERGYyOC9mMXV2NFVOS1R4UWFvWlNZaFk5VEhCUU54U2RuWjM5L1FJRC9mNENBZ1VUbnA3NlVBV3cvYmM5cWI2NW5HVUpuUUpEcDd2RllRQUYvNnNBQUFkMUJiQUFCUUFKQUEwQUV3QVhBQ2RBRXhZUkNRTURBQUFQRHhRTUNBaHlEZ29CQW5JQUt6SXlLekl5TWk4ekVUTVJNek16TURGQkFUTUJJUWNuQVNNQkFRTWpFeUVCSVNjekFRTUJOd0VDU3Y2UTBBRUxBUkk3NGYzMzl3S2hBamI4dS8wRHJmMTkvcjRCK0FIbDJQN1lqUUY0QXBrREYvMkpvQVg5WWdOT0FtTDZVQVd3L09tZ0FuZjZVQUt5bmZ5eEFBSUFKZi9xQkk0RnhnQWVBRDRBSTBBUkFDQUNBajQrRlRRd0tnbHlEd3NWQTNJQUt6TE1LOHd6RWprdk14STVPVEF4UVNjM0Z6STJOamMySmlZbkpnWUdCd2MrQXhjZUF3Y09BeWNYSGdNSERnTW5MZ00zRndZV0ZoY1dOalkzTmk0Q0p5Y0NjclVXbDFTWVp3c0tSb0JNVG8xakRyc0tZSlMwWGw2bmYwRUlDR2FkdFBxY1Y2YUJSd2dJYWFUSFptQ2xla0FGdXdWRGVrOVhwM1lMQ0NGSmFEMnRBcm9CZXdFeWIxeFViRFVDQVRsd1R3RmttR1l6QVFJeVk1aG9ZbzFhSzFZQkFpaFdqR1Z3cG1zekFnSTViSjFsQVZGMlFnTUNPM3RlUTE4OEhRRUJBQUVBUkFBQUJXOEZzQUFKQUJkQUN3VUFCZ0lJQW5JRUJnaHlBQ3N5S3pJU09Ua3dNVUVCTXdNakV3RWpFek1CT3dOeHcvMjh3ZnlQd3YyN0FWb0VWdnBRQkZmN3FRV3dBQVAveS8vK0JXWUZzQUFEQUFjQUdRQVpRQXdTQlJFSWNnSURBd1FJQW5JQUt6SXlFVE1yTWpJd01VRUhJVGNoQXlNVElUTUREZ1FuSXpjM1BnUTNCTVVjL1hrY0F5ajh2ZjM5VmJ1YkZDNUhjYWw1T0JJa1dIVktMQndOQmJDZW52cFFCYkQ5TjE3UXc1MWJBcDBDQmxlSW9LQkRBQUFDQUpULzZBVkFCYkFBRXdBWUFCcEFEaGNXQUJVRUNBSVlBbklQQ0FseUFDc3lLeklTRnprd01VRUJNd0VPQXlNbUppYzNGaFl6UGdJM0F4TVhCd0VDUmdJWjRmMDlJRXBhY2trYU5ob1hGU3dXTkVrM0dDSHVENW4rMHdIdEE4UDdRVHRpUnlVQkJRU2FBd1FCSzBjcEJJLzhiS3NNQkVzQUFBTUFXLy9FQmRnRjdBQVZBQ2tBTFFBYlFBd2ZEQXdyRmdBQUt5b0RjaXNBTHlzUk9TOHpFVGt2TXpBeFFSY2VBd2NPQXlNbkxnTTNQZ01YSmdZR0J3WWVBaGNYTWpZMk56WXVBaWNUQVNNQkF2N3BlTCtBT2cwTmNiVGtndWw2dllBNERRMXhzK1I5aHN4OUVRb1lTbjljN0liTGZoQUxHVXArWEJmKzc3VUJFUVVnQWdOY25zOTFnZHFoV1FJQ1hKL1BkWUhab2xtWUFYUEpnbFNYZGtZREFuUEtnVlNYZFVZREFXYjUyQVlvQUFBQ0FFSCtvUVZ1QmJBQUJRQU5BQmxBREF3SEFuSUZCQVFKQmdoeUFRQXZLekl5RVRNck1qQXhaUU1qRXlNM0JSTXpBeUVUTXdNRkkydXFQb3NjL0dUOXZlRUN0dUs4L2FMOS93RmZvcUlGc1BydEJSUDZVQUFBQWdETEFBQUZPZ1d3QUJVQUdRQVhRQXNYQmhFUkdBQUNjaGdJY2dBckt4RTVMek15TURGQk13TUdGaFlYRmo0Q053Y09BeWN1QWpjQk13TWpBU2U4U3dva2JHQTNiMjFzTlE0MWFteHRONDdEV1JBRG9yMzl2UVd3L2poZGYwUUNBUW9TR2c2ZkVSb1JDQUVDWjhlU0FjZjZVQUFCQUVJQUFBYzVCYkFBQ3dBWlFBd0ZDUVlDQWdzQUFuSUxDSElBS3lzUk14RXpNakl3TVVFekF5RVRNd01oRXpNRElRRS92ZUVCNU9HODRnSGg0YjM5K2dZRnNQcnRCUlA2N1FVVCtsQUFBQUlBUXY2aEJ6a0ZzQUFGQUJFQUhVQU9EQVVJQ0FRUkNISVBDd1lDY2dFQUx5c3lNaXN5TWhFek16QXhaUU1qRXlNM0FUTURJUk16QXlFVE13TWhCdVpwb3oySkcvdVd2ZUVCNU9HODRnSGg0YjM5K2dhWS9na0JYNWdGR1BydEJSUDY3UVVUK2xBQUFnQ0svLzhGZkFXd0FBTUFIQUFkUUE0UkVnOEVIQndQQUFFQ2NnOEljZ0FyS3pJUk9TOHpFVE15TURGVE55RUhFd1VlQWdjT0F5Y2hFek1EQlRJMk5qYzJKaVluSllvYkFid2JGQUYwZjhacERBbGRsYnhvL2VYOHZPSUJTbHFXWWd3S05IRk8vbk1GR0ppWS9rY0JBMkc1aG02bWNEZ0JCYkQ2N1FGRmdGMVFjajBEQVFBQ0FFVC8vd2FYQmJBQUdBQWNBQjFBRGhvWkRnc0FHQmdMREFKeUN3aHlBQ3NyRVRrdk14RXpNak13TVVFRkhnSUhEZ01uSVJNekF3VXlOalkzTmlZbUp5VUJBeU1UQVdrQmRYL0ZhQXNLWFpTOGFQM2svYnpoQVVsYWxtTUxDelZ3VC81ekJVcjl2UHdEWHdFRFlyaUdicVp3T0FFRnNQcnRBVVNCWEZGeVBRTUJBdS82VUFXd0FBQUJBRGIvL3dSOEJiQUFHQUFaUUF3T0N3QVlHQXNNQW5JTENISUFLeXNST1M4ekVUTXdNVUVGSGdJSERnTW5JUk16QXdVeU5qWTNOaVltSnlVQldnRjFmOFZwREFsZGxidG8vZVQ4dmVJQlNsbVhZZ3dLTlhCUC9uTURYd0VEWXJpR2JxWndPQUVGc1BydEFVU0JYRkZ5UFFNQkFBSUFkdi9wQlA4Rnh3QURBQ3dBSFVBT0F3SUNIZ2tGS1FseUdSVWVBM0lBS3pMTUs4d3pFamt2TXpBeFFRY2hOd0V6SGdJWEZqNENOemMyTGdNbkpnWUdCd2MrQWhjZUF3Y0hEZ01uTGdJRVVCejl1eHorYTdvRk9YeHFhNTl2UXc0V0NRRWVRbkZVYkpwakhMc2VuL0taamNGdkl4QVZFMmFrNDQrVnptNERKWjZlL3F0aWtWSURBMXlhdVZ1VFE0NkZhMEVEQkZTWFlnR1QzbmtEQW5iQzczeVFnZlBDY0FNRGVkZ0FBQVFBU2YvcEJ0TUZ4d0FEQUFjQUhRQXpBQ05BRXk4SEJnWU9KQmtEQW5JQ0NISVpBM0lPQ1hJQUt5c3JLeEV6RWprdk16SXdNVUVESXhNQkJ5RTNCUWNPQXljdUF6YzNQZ01YSGdNSE56WXVBaWNtRGdJSEJ3WWVBaGNXUGdJQ0F2MjgvUUdJRS82dkV3VkdEQlJucU9xWGtNRnJJUkFORTJtcDZwV1N3V29mMXcwTEJqZDhiSENvZFVZT0RRc0hPSHhyY3FoelJRV3crbEFGc1AxbG1KZ1BXNGIreW5RREEzM005bnhiaHYzS2RRTURmTXoyMlY5VnVLRm1CQU5kbjhCZ1gxTzVvbWtFQTEyZXdnQUFBdi9wQUFBRTJRV3hBQllBR2dBZlFBOFhGaFlBQUFrTURCa0ljZzRKQW5JQUt6SXJNaEVTT1M4ekVqa3dNVUVoSnlZbU56NENNd1VESXhNbkJnWUhCaFlXRndVRkFTTUJBNi8rZlZXRGl3ME5vUGVPQWRIOXZlTCtqTk1TQ2pWelZBRkkvcnorTk5NQjFRSTNLRGpHbEpqR1lnSDZVQVVTQWdHT2sxUjlTQU1CT3YxbEFwc0FBQU1BUi8vb0JFd0dFZ0FXQUM4QVJBQVpRQXc2SWpBWEZ5SUFBWElpQzNJQUt5c1JPUzh6RVRNd01VRTNEZ01IRGdNSEJ5TTNOaEkyTmpjK0FnRWVBd2NIRGdNbkxnTTNOejRDTno0Q0Z5WUdCZ2NIQmg0Q0Z4WStBamMzTmk0Q0E3dVJDRDluaFU1OXFXczZEUTJWRFJOUWljK1JOblJaL3R0bmxGMG1DQU1MVllxOGNtK2daQ2tLQWdRWkh3MHlrYmxHWTVGV0RBSUhEakZnVFZCNlZUTUpBZ1lTTjJBR0VRRlpjVU1tRHhoeXBjMTFYRnlFQVFIYWx4b0tHajcrS3dKU2lhMWVGbXpCbFZRREFsaVZ1bVVYSFRNeEdWMmNXNWdDWDU1YkZqK0NiMFlDQWtGdmlFWVdQbmRnT3dBQ0FESC8vd1FLQkRvQUd3QXpBQzFBRmdJQkd5c3BLU2dCS0FFb0R3MFFCbkllSFIwUENuSUFLeklSTXlzeUVUazVMeThSTXhJNU9SRXpNREZCSVRjRlBnSTNOaTRDSXljREl4TUZIZ01IRGdNSEF5RTNCVDRDTnpZbUppY2xOd1VYSGdJSERnTUNhdjZkR0FFUE9IOWdDZ1lsUkZBazhhSzB2QUdOUm85MlJRVUVQR0J4T2FIK1ZITUJQRHB4VVFrSU0xb3gvdU1jQVV3MlEydzhBd1JRZ0pvQjNKUUJBUlpFUlRBNkhnd0IvRndFT2dFQkhEOXZWVUplUGlNRy9lNldBUUVlU2tJN1FoMEJBWlFCT0FsQWFraGFla2tnQUFBQkFDNEFBQU9FQkRvQUJRQU90Z0lGQm5JRUNuSUFLeXN5TURGQkJ5RURJeE1EaEJ6K0hLRzF2QVE2bWZ4ZkJEb0FBQVAvamY3QkJEOEVPZ0FQQUJVQUhRQWhRQkFkR0FrV0Zoc1RDQXB5RlJBUUFBWnlBQ3N5RVRNck1qSXlFVE12TXpBeFFUTUREZ01ISXpjelBnTTNFeUVESXhNaEFTRURJeE1oQXlNQm1iWldGRUJpaldObUhDUTdXME12RDRJQ2VieTFudjQ4L2pnRVJGSzFPUDBsT0xVRU92NXNhTWV5a2pPV09YWi9qMUlCbGZ2R0E0LzlDZjRwQVQvK3dRQUYvNmNBQUFZT0JEb0FCUUFKQUEwQUV3QVhBREJBRnhVUUVBQVdFUkVKQXdNR0FBQVVCd3dTRXcwTkFnWnlBQ3N5RVRNL016TTVMek16RVRNekVUTVJNeEV6TURGQkFUTVRNd2NuQVNNQkFRTWpFeUVCSVRVekFRTUROd0VCdC83Y3pjTGFONi8rZ2ZBQ0RnSHZ2TFc4QXgvK0NQN3B5Z0ZlbHVLRUFUVUIxd0pqL2tDakN2NGZBbkFCeXZ2R0JEcjluYU1Cd1B2R0FmTisvWThBQUFJQUlQL3FBNlFFVUFBZEFEc0FJMEFSQUI4Q0FqczdGREl1S1F0eUR3c1VCM0lBS3pMTUs4d3pFamt2TXhJNU9UQXhRU2MzRno0Q056WW1KaWNtQmdZSEJ6NENGeDREQnc0REpSY2VBd2NPQXljdUFqY1hCaFlXRnhZMk5qYzJKaVluSndJT3pSU29PR1pGQndjeFZqRTRhRXdOdEF1RXdHWkhnMlUzQkFWTmRvbisvclZDZjJVNUJBVlJnWnRPWjY5bkJMSUNPRjg2T1hKUkNBZ3NWemEvQWdRQmNnRUJIa2MrT0VVaEFRRW5URGtCYm85R0FnRWxTbk5RVEdwQ0gwY0JBUjArYUUxWWYxSW1BZ0pPbG04QlBGUXRBUUVtVVQ4K1JoMEJBUUFBQVFBd0FBQUVPQVE2QUFrQUYwQUxCUUFHQWdnR2NnUUdDbklBS3pJck1oSTVPVEF4UVFFekF5TVRBU01UTXdFWUFtUzh2TGFJL1p5NnZMTUJNUU1KKzhZRENmejNCRG9BQXdBd0FBQUVXQVE2QUFNQUNRQU5BQjlBRHd3SEJ3c0dCZ0lKQXdaeUNnSUtjZ0FyTWlzeUVUa3ZNek1STXpBeFFRTWpFeUVCSVRjekFRTUJOd0VCb0x5MHZBTnMvYVArL2dIRkFhK1Qvc3lEQVljRU92dkdCRHI5bEtJQnl2dkdBZk4rL1k4QUEvL0kvLzhFT1FRNkFBTUFCd0FaQUJsQURCSUZFUXB5QWdNREJBZ0djZ0FyTWpJUk15c3lNakF4UVFjaE55RURJeE1oTXdNT0JDY2pOemMrQkRjRG14ditBeHNDbTd5MXZQM3V0M1FQSnpwYmhsODlFaVZDV0RraUZRa0VPcG1aKzhZRU92MzJUSitTYzBFQm9nSUVRR04yZHpJQUFBTUFNUUFBQlg4RU9nQUdBQW9BRGdBYlFBMEFDUXdHQVFvR2Nnc0RDUXB5QUNzeU1pc3lNaklTT1RBeFpRRXpBU01CTXlNREl4TUJFek1EQXFJQjlyZjljWDcrNnFVd3ZMUzhBeUM4dHJ6M0EwUDd4Z1E2KzhZRU92dkdCRHI3eGdBQUF3QXdBQUFFTndRNkFBTUFCd0FMQUJ0QURRa0dDQU1DQWdZSEJuSUdDbklBS3lzUk9TOHpNaEV6TURGQkJ5RTNFd01qRXlFREl4TURWQnI5MHh0NHZMUzhBMHU4dHJ3Q1paYVdBZFg3eGdRNis4WUVPZ0FEQURBQUFBUTRCRG9BQXdBSEFBc0FHVUFNQ1FZSUFnTURCd1p5QmdweUFDc3JNaEV6TWhFek1ERkJCeUUzTXdNakV5RURJeE1EbVJ2OTdCc2J2TFM4QTB5OHRyd0VPcG1aKzhZRU92dkdCRG9BQWdCZ0FBQUQ2UVE2QUFNQUJ3QVF0d01HQndaeUFncHlBQ3NyTWpJd01VRURJeE1oQnlFM0FvbTh0YndDRlJyOGtSb0VPdnZHQkRxV2xnQUFCUUJKL21BRk9nWUFBQllBS3dCQ0FGWUFXZ0FuUUJVbkJnWkpIaEVSVWpNK0MzSXpCM0pZQUhKWERuSUFLeXNyS3hFek14RXpNaklSTXpBeFFRY09BeWN1QXpjVFBnTVhIZ1FITnpZMkxnSW5KZ1lHQndNZUFqTVdQZ0lsTno0RUZ4NERCd01PQXljdUF6Y0hCaFFXRmhjV05qWTNFeTRDSnlZT0FoTUJNd0VGTWdJTVAyeWdia050VGljRFNnMCtYMzFNV1haRkhnSytBd1VFRENkTFBpeE5RQlp1RHpkRUkwNXhUQzM3M2dJS0trZG9qMTFGYTBjaUEwWU5QVjE3VEdpQlF4RENBZ1lmVGtnc1REOFphZ3N6UkNkVWMwZ25xd0ZUdHY2dEFnOFZYYjJjWFFNQ0wxTnhSQUhnU0h0Yk1BSUNUSHlXbTFrV0syMXhYendCQVJVd0pmMkxJeVFQQWtOd2hqVVZUS1diZTBjREFqVmJka1ArTTBkN1d6SUNBMkdhc21zV05IMXdTUUVCRmk0a0FtTW9MUlFCQWxTR21md2FCNkQ0WUFBQ0FERCt2d1E0QkRvQUJ3QU5BQnRBRFFZQkF3ME1EQUFLY2dFR2Nna0FMeXNyTWhFek1oRXpNREZ6RXpNRElSTXpBemNESXhNak56Qzh0S0VCNHFHMnZKZGtvVGlKR2dRNi9GNERvdnZHbVA0bkFVR1lBQUlBZVFBQUEvVUVQQUFEQUJjQUYwQUxEeFFKQ1FFQUJuSUJDbklBS3lzUk9TOHpNakF4UVFNakV4TUhEZ0luTGdJM0V6TURCaFlXRnhZMk5nUDF2TFc4SEEwN2VueEFlcU5JRFRLMU13Z1pVRTFBZlhvRU92dkdCRHIrRDVrWElCQUJBbWUxZUFFOC9zTkZjRVFDQWhJaEFBRUFNQUFBQmdnRU9nQUxBQmxBREFVSkJnSUNDd0FHY2dzS2NnQXJLeEV6RVRNeU1qQXhVek1ESVJNekF5RVRNd01oN0xTaEFYK2h0cUlCZnFLMXZQcmtCRHI4WGdPaS9GNERvdnZHQUFJQUpmNi9CZjBFT2dBRkFCRUFIVUFPREFVSUNBUVJDbklQQ3dZR2NnRUFMeXN5TWlzeU1oRXpNekF4WlFNakV5TTNBVE1ESVJNekF5RVRNd01oQmZCa29qaUpHL3d0dGFJQmY2SzFvUUYrb2JXOCt1U1kvaWNCUVpnRG92eGVBNkw4WGdPaSs4WUFBZ0JXLy84RWVRUTZBQU1BSEFBZFFBNFJFZzhjQkFRUEFnTUdjZzhLY2dBckt6SVJPUzh6RVRNeU1ERkJCeUUzQVFVZUFnY09BeWNoRXpNREJUNENOelltSmljbEFqOGIvakliQVhvQk1HV2hXQWdHUzNxYVZQNDB2TGFpQVFCQmJVZ0pCeU5PT2Y2NEJEcVltUDZNQVFSUWxteFppbDR2QVFRNi9GNEJBVEJkUkRsV01nTUJBQUlBTWYvL0Jhb0VPZ0FZQUJ3QUhVQU9HaGtPQ3hnQUFBc01CbklMQ25JQUt5c1JPUzh6RVRNeU16QXhRUVVlQWdjT0F5Y2hFek1EQlQ0Q056WW1KaWNsQVFNakV3RXZBUzltb1ZnSUJrdDZtbFQrTmJ5MG9RRUFRVzFKQ1FjalR6bit1QVNXdkxXOEFzWUJBMUdXYkZtS1hpOEJCRHI4WGdFQk1GMURPbFl5QXdFQ0RQdkdCRG9BQUFFQU1mLy9BNzBFT2dBWUFCbEFEQTRMR0FBQUN3d0djZ3NLY2dBckt4RTVMek1STXpBeFFRVWVBZ2NPQXljaEV6TURCVDRDTnpZbUppY2xBUzhCTDJhaFdBZ0dTM3FhVlA0MXZMU2hBUUJCYlVrSkJ5TlBPZjY0QXNZQkExR1diRm1LWGk4QkJEcjhYZ0VCTUYxRE9sWXlBd0VBQWdBeS8rZ0R4QVJSQUNjQUt3QWRRQTRyS2lvSkhSa1VDM0lFQUFrSGNnQXJNc3dyekRNU09TOHpNREZCSmdZR0J3YytBaGNlQXdjSERnTW5MZ0kzRndZV0ZoY1dQZ0kzTnpZdUFoTUhJVGNDTmtCeFR3MnNDNGpHYVc2YVhDRUpCUTFVaWJwemI2WllCYTBFSzF0RFQzbFdNd2tHQmdnclcrd2IvaHNiQTdjQ05tQS9BV3lsWFFNQ1hwdTlZU3RweFp0WkF3SnBzRzRCUDJ4REF3SkdkWXhES2p1RWRreit2cGVYQUFRQU1mL29CZ01FVWdBREFBY0FIUUF6QUNOQUV5UURBZ0laTHc0SEJuSUdDbklPQjNJWkMzSUFLeXNyS3hFekVqa3ZNekl3TVVFSElUY1RBeU1UQVRjK0F4Y2VBd2NIRGdNbkxnTTNCd1llQWhjV1BnSTNOell1QWljbURnSUM1QnY5MFJydHZMUzhBVXdERGxlUHdYZHlvbUlsQ3dNTldZL0JkbkdoWWliRUF3Y0tNR0JPVTRCYk53b0RDQXN4WVU5VGYxbzJBbStYbHdITCs4WUVPdjNQR0czTG5sc0RBMTZjd1dZWWJzaWNXUU1EWFpxL2ZSYy9oM1JMQWdORmRwQklGeitKZGt3REFrWjVrUUFBQXYrL0FBQUQvd1E3QUFNQUhRQWRRQTRCRWhJVEV3TUpCQVp5QndNS2NnQXJNaXN5RWprdk14STVNREZCTXdFakFRVURJeE1uRGdJSEJoWVdGd1VISlM0RE56NERBVW5QL25iUEFuMEJ3N3kxb3ZnOGNFOEpCeVZMTWdGVkcvN0RTSDFjTUFVRlVINmFBZ1Q5L0FRN0FmdkdBNlFCQVNsVVFUUktLQUlCbUFFQ0xGRjNURmlBVXlnQUJBQWcva2NEMlFZQUFCRUFGUUFzQURBQUhVQVFNQzhvSEFkeUZRQnlGQXB5RFFZUGNnQXJNaXNyS3pMTU1qQXhRVE1ERGdJbklpWW5OeFlXTXpJMk5qY0RBU01CQXljK0F4Y2VBd2NESXhNMkppWW5KZzRDQVFjaE53TDB0bG9OV1psc0h6c2VIaGd6R1RoR0pRaTYvdlcxQVFzWVNnNUxlNnR1VjNWQ0ZRaDJ0bmdIRjB4SVRYcGJPUUc1Ry8yVkd3SEcvZUpsb0Z3Q0NnbVRDQWs5WFM4R1dmb0FCZ0Q4UmdKaHU1WlhBd0kvYll4UC9Uc0N5RUZwUUFJQ1BtdUVBc2lZbUFBQUFnQk8vK2tEN3dSUkFBTUFLd0FiUUEwRURRTUNBZzBoR0FkeURRdHlBQ3NyTWhFNUx6TVJNekF4UVFjaE53RVdOalkzTnc0Q0p5NEROemMrQXhjZUFnY2pMZ0luSmc0Q0J3Y0dIZ0lDcGh2OTVob0JXa056VWhHckVJckhhM0tlWFNJS0JRMVZpNzExYzZaYUFha0JMbDFGVTMxWE13b0ZCd2NzWHdKb21KaitHd0kxWUQ4QmJhVmJBZ05ibUw5bEsyM0ZtVllEQW1pdmNFRnNRZ01DUW5LTlNDby9obk5KQUFBRC84UC8vd1l0QkRvQUVRQVZBQzRBSlVBU0ZpNHVBQ1FoSVFvSkNuSVVGUlVqQUFaeUFDc3lNaEV6S3pJeUVUTVJPUzh6TURGQk13TU9CQ2NqTnpjK0JEY0JCeUUzQVFVZUFnY09BeWNoRXpNREJUNENOelltSmljbEFXNjJjdzhtTzF1R1h6NFRKVUZZT1NNVkNRSnFHLzRjSEFJSUFTOWhvMTBIQlUxN21GSCtOYnkxb2dFQVBtMUpDUWdxVWpUK3VRUTYvZlpNbjVKelFRR2lBZ1EvWlhaM01RSFFtWm4rWkFFRFNJMXFXSU5XS3dFRU92eGNBUUV1V0VFNFNpVUNBUUFBQXdBdy8vOEdUZ1E2QUFNQUJ3QWdBQ1ZBRWhVV0V4TUdDQU1nQXdJQ0JnY0djZ1lLY2dBckt4RTVMek16RVRNUk14RXpNakF4UVFjaE54TURJeE1CQlI0Q0J3NERKeUVUTXdNRlBnSTNOaVltSnlVRFh4djkxQnB1dkxTOEF0RUJNR0dpWGdjRlRYdVpVUDQwdkxhaUFRQStiRW9JQ0NwUk5QNjRBcUdXbGdHWis4WUVPdjVrQVFOSWpXcFhnMWNyQVFRNi9Gd0JBUzVZUVRoS0pRSUJBQU1BSUFBQUE5b0dBQUFEQUJvQUhnQVpRQTBlSFJZS0IzSURBSElSQWdweUFDc3lLeXN5ekRJd01VRUJJd0VESno0REZ4NERCd01qRXpZbUppY21EZ0lCQnlFM0FlRCs5YlVCQ3hoS0RrdDdxMjVYZFVJV0NYYTJlQWNYVFVoTWVsczVBYzhiL1pRYkJnRDZBQVlBL0VZQ1lidVdWd01DUDJ5TlQvMDdBc2hCYVQ4Q0FqNXJnd0xObUpnQUFnQXcvcHdFT0FRNkFBTUFDd0FYUUFzQUJnWUxDbklKQkFaeUFnQXZLeklyTWhJNU1ERmxNd01qQXpNRElSTXpBeUVCbUxaWnRWUzBvUUhpb2JhOC9MU1kvZ1FGbnZ4ZUE2TDd4Z0FBQWdCdS8rVUcyZ1d3QUJnQU1BQWJRQTRzSHdseUZBY0pjaVlhRGdBQ2NnQXJNakl5S3pJck1qQXhRVE1ERGdNbkxnTTNFek1EQmg0Q0Z4WTJOamNCTXdNT0FpY3VBemNUTXdNR0hnSVhGalkyTndPaW1iUU1SM0diWVZ1R1ZTTUt0TDIwQlFnaVFqWlFkMGtNQXkrOXRCRjV4b05aZ0U0ZENiU1lzd1lNS0VrM1RtOURDZ1d3Kzk1Ym0zUStBd0pEYzVaWEJDTDczUzFhVERBQ0EwVjVTZ1FqKzk5K3dHd0VBa1oxbFZNRUl2dmRNRnhLTFFJRFNIcEdBQUFDQUUvLzV3WFhCRG9BR0FBeEFCdEFEaXdmQzNJVUJ3dHlKaG9PQUFaeUFDc3lNaklyTWlzeU1ERkJNd01PQXljdUF6Y1RNd01HSGdJWEZqWTJOd0V6QXc0Q0p5NEROeE16QXdZZUFoY1dQZ0kzQXZpVGVncytaWXBYVVhoTEh3aDZ0WG9FQmhzM0xVUmxQZ29DcExWNkQyeXdkbEJ5UlJzSWVwTjZCQWtoUGk4eVRUZ2lCd1E2L1NsU2kyYzNBZ003Wm9kTkF0ajlKeVZOUVNvQ0F6eG5Qd0xaL1NseHJGOEVBajVvaFVvQzJQMG5LVTVBSndJQkkwQlJMUUFBQWdBdi8vNER2d1lXQUJjQUd3QWhRQkFOQ2dBWEZ3b2FHeHNLQ3dGeUNncHlBQ3NyRVRrdk14RTVMek1STXpBeFFRVWVBZ2NPQWljaEFUTURCVDRDTnpZbUppY2xBUWNoTndFMEFTOXFuMU1JQ1h6RGRmNDFBUTYxOUFFQVJXOUdDUWNmVEQzK3VRSFpHLzFZR3dMcUFRUlluMjE0cmwwQ0JoYjZnZ0VCT0dWR09sODdBd0VDZjVpWUFBQURBRXIvNmdhMEJjZ0FBd0FzQURBQUlFQVJBd0lDTHpBQ2NpOElIUlFEY2lrSkNYSUFLeklyTWo4ckVqa3ZNekF4UVFjaE53RTNEZ0luTGdNM056NERGeDRDRnlNdUFpY21EZ0lIQndZR0hnSVhGalkyQVFNakV3VWdHL3d1R3dSSnVSNm0rSnVLdTJraEVCVVVhYW5va3BQSFp3UzdBelIxWlc2bGMwWVBGZ2dCR2o1clVuQ2VhUHlLL2J6OUEwR1ltUDZPQVpiYmRRTURlTVB0ZUpHRTljQnVBd04vMlkxY2xGZ0RBMWlYdWwrVVA0eUdia1FDQkUrVUJFZjZVQVd3QUFNQUxmL3BCWXdFVVFBREFDc0FMd0FrUUJNREFnSXVMd1p5TGdvaEhSZ0hjZ2dFRFF0eUFDc3l6Q3ZNTXo4ckVqa3ZNekF4UVFjaE53RVdOalkzTnc0Q0p5NEROemMrQXhjZUFnY2pOQ1ltSnlZT0FnY0hCaDRDQVFNakV3UmpHL3lwR3dKM1FuTlNFYXNRaXNkcmNwNWRJZ3NFRFZXTHZuVnlwMWtCcVM1ZFJWTjlWalFLQlFjSExGNythN3kxdkFKb21KaitHd0kxWUQ4QmJhVmJBZ05ibWI1bEsyM0ZtVllEQTJldmNFRnNRd0lDUW5LTlNDby9obk5KQTdYN3hnUTZBQUFFLzdvQUFBUlVCYkFBQkFBSkFBMEFFUUFrUUJFUkRRd01BZ0FHQmdjREFuSVBCUVVDQ0FBL014RXpLekl5RVRNUk9TOHpNekF4UVFFakFUTVRBemN6RXdNSElUY0ZBeU1UQXhiOWJja0MrM3hxenh4MTk0b2QvVklkQWFkZ3VXQUZDZnIzQmJENlVBVW5pZnBRQWxxam96UDkyUUluQUFBRS82SUFBQU9hQkRvQUJBQUpBQTBBRVFBZVFBNFJEUXdNQVFjREJuSVFCUVVCQ2dBL014RXpLeklTT1M4ek16QXhRUUVqQVRNVEF3TXpFd01ISVRjRkF5TVRBZ3orV01JQ2FaSk5yUnFFODRNYi9iMGJBWEpJdEVnQzlQME1CRHI3eGdNR0FUVDd4Z0hCbUpnbS9tVUJtd0FHQUZzQUFBWldCYkFBQXdBSUFBMEFFUUFWQUJrQU5FQWFDUlFVQmdZWUZSRVJFQkFEQWdJWUNCWUNjZ1FLQ2dzSEFuSUFLekl5RVRNclB6a3ZNek1STXhFekVUTVJNeEV6TURGQkJ5RTNBUUVqQVRNVEF6Y3pFd01ISVRjRkF5TVRBUU1qRXdOREhmM3NIUVBvL1czSkF2dDhhczhjZGZpTEhmMVNIUUduWUxsZy9ncjl2ZjBDV3FHaEFyRDY5Z1d3K2xBRko0bjZVQUphbzZNei9ka0NKd09KK2xBRnNBQUdBRThBQUFWTEJEb0FBd0FJQUEwQUVRQVZBQmtBTGtBWEZSRVJFQkFEQWdJWUdRWnlDUlFVQmdZWUNnc0hCbklBS3pJL014RXpFVE1yRWprdk16TVJNeEV6TURGQkJ5RTNBUUVqQVRNVEF3TXpFd01ISVRjRkF5TVRBUU1qRXdLNEcvNDVHd0xOL2xmQ0FtcVNUYTRhaFBPREcvMitHd0Z4U0xOSC9uMjh0YndCd1ppWUFUUDlEQVE2KzhZREJnRTArOFlCd1ppWUp2NWxBWnNDbi92R0JEb0FBQVVBSmdBQUJqa0ZzUUFXQUJvQUh3QWtBQ2dBTkVBWkdSb2FKQnNmSHlNakV5Z0dCaE1UQVJ3a0FuSU5KeWNCQ0FBL014RXpLeklTT1M4ekVUTVJNeEV6RVRNUk14RXpNREZ6SXhNK0FqTUZIZ0lIQXlNVE5pWW1KeVVtQmdjQkJ5RTNFd0V6QVNNREFRY2pBUUVESXhQanZUMFdqT09XQWRTTXYxZ1FQTDA5Q3lKb1hmNHNscTBXQkZRYy9QY2N2Z0l1NHYxN2Vjc0JOeXAxL3FFQ0o0ZThpQUZ5bWNOZEFRTmp3WkgramdGeldudENBZ01CaHBnRVBwNmUvUW9DOXZ5eUEwLzg5MFlEVHYxZC9QTUREUUFGQUNvQUFBVUxCRHNBRndBYkFDQUFKUUFwQURCQUZ4b2JHeVVnSkNRVEtRWUdFeE1CSFNVR2NnMG9LQUVLQUQ4ekVUTXJNaEk1THpNUk14RXpFVE1STXhFek1ERnpJemMrQWpNRkhnSUhCeU0zTmlZbUp5VW1CZ1lIQVFjaE54TUJNd0VqQXhNSEl3RUJBeU1UMzdVWkZYdlJrd0V4aUt4SER4bTFHUW9VVmxyK3ptS0NTUTREbXh2OVlodW5BWm5XL2c1dmhlSW1hLzd6QWN4bHRXYWprY1ZrQWdOcnc0YWtwVkYvVEFNREFVT0NYd09YbVpuOXhBSTcvVzBDbFAyMVNRS1QvZ3Y5dXdKRkFBQUhBRWtBQUFoYkJiRUFBd0FIQUI0QUlnQW5BQ3dBTUFBOFFCNGhJaUlrTEFKeUp5c3JHekFPRGhzYkF3SUNCUWNDY2hVdkx3a0pCUWdBUHpNUk14RXpLeEk1THpNekVUTVJNeEV6RVRNck1qSVJNekF4UVFjaE54TURJeE1CSXhNK0FqY0ZIZ0lIQXlNVE5pWW1KeVVtQmdjQkJ5RTNFd0V6QVNNREFRY2pBUUVESXhNRThCdjhpUnVKL2J6OUFiKzlQUldNNDVZQjFZMi9WaEE4dkQwTEltZGUvaXVXckJZRVZCejg5eHkrQWkvaC9YcDR5d0UzS25YK29RSW5oNzJJQXl5WGx3S0UrbEFGc1BwUUFYR2F3MXdCQVFOandaSCtqZ0Z6V250Q0FnTUJoNWNFUHA2ZS9Rb0M5dnl5QTAvOCtVZ0RUdjFkL1BNRERRQUhBQzhBQUFic0JEc0FBd0FIQUI4QUl3QW9BQzBBTVFBK1FCNGxJaU1qTFMwSEtDd3NHekVPRGhzYkF3SUNCZ2NHY2hVd01Ba0pCZ29BUHpNUk14RXpLeEk1THpNekVUTVJNeEV6RVRNUk14RXpFVE16TURGQkJ5RTNFd01qRXdFak56NENNd1VlQWdjSEl6YzJKaVluSlNZR0JnY0JCeUUzRXdFekFTTURFd2NqQVFFREl4TUV2QnY4T2h1cHZMUzhBZFcxR2hSODBKTUJNWW1yUnc4WnRSa0tGRlphL3M1aWdra09BNXNiL1dJYnB3R1oxdjRQY0lYaUpXeis4d0hOWnJSbEFseVhsd0hlKzhZRU92dkdwSkhFWkFJRGE4T0dwS1ZSZjB3REF3RkRnbDhEbDVtWi9jUUNPLzF0QXBUOXMwY0NrLzRML2JzQ1JRQUQvODMrU0FRaEI0Z0FGd0JBQUVrQUswQVVHQTBNUUVBQUt5d0pSVU5EUWtoQmdFY1hBQUlBUHpMZUdzMHlPVElSTXo4ekVqa3ZNek16TURGQkJSNERCdzRESXljM0Z6STJOamMySmlZbkpSTVhIZ01IRGdNakp3WUdCd1lXRmhjSExnSTNQZ0l6Rno0RE56WXVBaWNuQVJjM054VUJJd00xQVJRQkhWYVpkRDBHQ0dhZHRGU1pGSDlVbW1nTUNUcHZSdjdMTklGWHBZSkdDQWhha2Jaa05UeHFDUWNqUGlSU08yTTZBd1Jwb0ZjdFFIUmRQQWtJSVVscFA1VUJSWFN3b1A3amI4NEZzQUVDTTJDT1hXS0xWeWdCY3dFeWIxeE1Zek1DQWYzNEFRRXBWb3hsYWFOdU9BRUJOVU11UWpFVGVCNWFka1prY3pFQkFTVkhhRUpGWVQ4ZkFRRUU1cW1vQXczKzd3RVFEZ0FBQS8vSi9rZ0RtQVl6QUJnQVFRQktBQ1pBRVEwWkRFRkJBQzFEU1VaRVFvQklHQUFHQUQ4eTNock5Nakl5T1M4U09TOHpNek13TVZNRkhnTUhEZ01qSnpjWFBnSTNOaTRDSXlVVEZ4NERCdzRESXljR0JnY0dGaFlYQnk0Q056NENNek15UGdJM05pNENKeU1URnpjM0ZRRWpBelhSQVJkRWluTkNCQVJqazU5Q21SVitPb1JqQ1FZa1FFc2gvczlNZ1QrVmhGRUVCRmVKb0U0eFBHb0tCaUkvSkZJN1l6b0RCR21oVmlrclhWSTVCd2dzVGxrbWxlZHpzYUQrNG0vT0JEb0JBaUpIY1ZGVGJUNFpBWE1CQVJoSVJ5dzRIdzBCL3FFQkFSVTRhRk5hZjA4a0FRSTBReTVDTVJONEhscDJSbU4wTVJJb1JESTBQaUFMQVFSZnFhZ0REdjd2QVJFT0FBQURBR2YvNlFUK0JjY0FGd0FvQURrQUgwQVNEQ2xxTWlCcU1qSU1BQmhxQUFOeURBbHlBQ3NyS3hJNUx5c3JNREZCSGdRSEJ3NERKeTRFTnpjK0F4Y21EZ0lIQmdZSElUWTJOell1QWdFV1BnSTNOalkzSVFZVUJ3WWVBZ01sZEtwd1BRNE5EUk5vcU9xV2RLbHhQUThOREJSb3F1cU1hYUYwU1JFQkF3RUMrUUVCQVFnTk8zcit5V21nY1VrU0FRSUIvUWNCQVFZUlBYa0Z4QUpUaTdQSFpGdUgvY3AwQXdKVGpMUEhZMXlGL2NwMXBnTlRqN0piQnd3SEJ3d0hVNnFRWFB0eEJFK0xybHNGQ3dVRkN3WlFwWTFaQUFNQVEvL29CQllFVWdBVkFDQUFLd0FmUUJJTElXb25HMm9uSndzQUZtb0FCM0lMQzNJQUt5c3JFamt2S3lzd01VRWVBd2NIRGdNbkxnTTNOejRERnlZT0FnY2hOaTRDQXhZK0FqY2hCaDRDQW4xeW9XRWxDd0lPV0kvQmRuQ2lZaVlMQWc1WGo4RnZTWE5YT3hFQ1JnRVZOVnJUU25aWk94RDl0Z01UTkZ3RVR3TmVuTUZtR0czSm5Ga0RBMTJhdjJVWWJzcWVXNXNDTmw1NFB6cHlZRHY4emdNNFlueEJPM2RqUFFBQ0FLMEFBQVZMQmNZQURnQVRBQmxBRFE0U0NBVVRBbklGQTNJU0NISUFLeXNyRVRNUk16QXhRUUUrQWhjWEJ5Y2lCZ1lIQVNNREV4TWpBd0pNQVg0aFZYeGNNeFFLTFVBdUV2M0JtRGVYSG92dkFYMERJMHlIVXdFQnFnRXFReVg3ZHdXdys4RCtrQVd3QUFBQ0FJVUFBQVE5QkZJQUVnQVhBQlZBQ3hjR2NoSVdDbklNQlFkeUFDc3lLeklyTURGQkV6NENGeklXRndjbUppTU9BZ2NCSXdNVEV5TURBY2Z4R0V0cFNDQTJHeVFLRlFzY0x5UU0vazkrRDJVUmNyVUJPUUlqUEhGSkFRNE9rZ1FHQVJ3c0YveXpCRHI4K2Y3TkJEb0FCQUJuLzNNRS9nWTFBQU1BQndBZkFEY0FKRUFRQWdJbkp3TWFBM0lIQnpNekJnNEpjZ0FyelRNUk0zd3ZLeGpOTXhFemZTOHdNVUVESXhNREF5TVRBUWNPQXljdUJEYzNQZ01YSGdRSE56WTJMZ0luSmc0Q0J3Y0dGQjRDRnhZK0FnT3JSTFJETWtXMVJRTGlEUk5ucU91V2RLbHhQUThOREJSb3F1cVZkS3B3UEEvVkRRa0JHMEZ4VjNDbmRVWU9EZ2djUW5CV2NxaHpSQVkxL240Qmd2ckovblVCaXdJSVc0Zit5WFFEQTFLTXM4WmtYSVg5eW5VREFsT0xzOGZBWDBTVGluQkZBd05lbjhCZ1gwT1NpM0pGQXdSZG44RUFCQUJELzRrRUZnUzJBQU1BQndBZEFETUFKRUFRQndja0pBWVpDM0lDQWk4dkF3NEhjZ0FyelRNUk0zMHZLeGpOTXhFemZDOHdNVUVESXhNVEF5TVRBVGMrQXhjZUF3Y0hEZ01uTGdNM0J3WWVBaGNXUGdJM056WXVBaWNtRGdJQytFQzJRQkJBdGtEK3NnSU9WNC9CZUhHaFlpVUxBZzVZajhGMmNhRmlKc01EQndvd1lVNVRnRm8zQ3dJSUN6QmhUbFNBV2pZRXR2NlFBWEQ4UXY2UkFXOEJFUmh0eTU5YUF3TmVuTUZtR0czSm5Ga0RBMTJad0gwWFA0ZDFTZ0lEUlhlUVJ4Yy9pSGRNQXdKR2VKSUFBQVFBZFAvbkJvb0hWd0FWQUNBQVFRQmxBRE5BR1Z0T0NYSlVNVEVzT0FseVFrTkRFUWdJR3hzV0ZpSWhBbklBS3pJeWZDOHpHQzh6RVRNeUVUTXJNakl2TXlzeU1ERkJNd2NuTGdNaklnWUhCeWMzTmpZWEhnTUJKelkyTnpjWEJ3NENKUWNPQWdjREJoNENGeFkyTmpjVE13TU9BeWN1QXpjVFBnSUZOeDREQndNT0F5Y3VBemNUTXdNR0hnSVhGajRDTnhNMkxnSUZzeXNLSnp4dWEyczVORVlLQW4wRENZWnNQRzVzY1A1Z1RSNHpDaEdhRFFnMVNmNjFFbE5zUEF4YkJRTWRRanBRZDBnTVI1aEdEVVp5bTJCZ2gxQWNDbHNUZE1VRERRdGZoRThiQ2xzT1JYR2ZabHVFVkNBSlI1aEdCZzh1VGprK1dqMGtDRndHQXh4Q0J0V0JBUUVuTWlZN05CSUJKR3R6QWdFbU1pYitWRHdoUml4ZkFXVXRTenR6bmdKWGgwcjl4UzFrV2pvREJFWjZTZ0d0L2xSYm0zTStBd0pOZjZGWEFqcUZ6SFNmb0FSTmZxQlgvY1pkcG45SEF3SkRjNVpXQWF6K1V6UmRTU3NDQWpSWmFqUUNQREJqVlRrQUFBUUFVdi9uQlpFRjlnQVZBQ0FBUWdCbUFETkFHVnhQQzNKVk1qSXNPUXR5UTBSRUVRZ0lHeHNXRmlJaEJuSUFLekl5ZkM4ekdDOHpFVE15RVRNck1qSXZNeXN5TURGQk13Y25MZ01qSWdZSEJ5YzNOallYSGdNQkp6WTJOemNYQnc0Q0pRY09BZ2NEQmg0Q0Z4WStBamMzTXdjT0F5Y3VBemNUUGdJRk54NERCd01PQXljdUF6YzNNd2NHSGdJWEZqNENOeE0yTmlZbUJTQXRDaWs3YjJwck9EVkhDUUo5QWdxSGJEeHVhM0QrV2trZU13a1NtZzhITjByK3hSQklXekVLS2dRQkZ6WXhNMUk5SndnbGtTUUxQbVNMVmxkNFJoa0lLaEJtc0FLMUNsVjJSUmdJS2dzOFpZMWRVWGRMSGdna2tTUUZEaWhDTVRWTU1oMEdLd1FCRlRZRmRJRUJBU2N6SlRvMUVnRWtiSElDQVNZeUp2NU1PeUJITEY4QlpTNUtPbkNYQWs1M1AvN2RKRmhRTmdJRElqNVRMK3ZxVW90bk53TUNSM1NTVGdFaWViaHBtSmtFUjNPUFR2N2VVNWgwUVFNQ1BHZUdUZXJyTEU4L0pRRUNNRTVkTEFFbEoxWk1Nd0FEQUc3LzVRYmFCd1FBQndBZ0FEZ0FLMEFWTkNjSmNnVUNBUUVIQnkwaENBZ1ZBbkljRHdseUFDc3lLeklSTXpNemZDOHpHQzh6TXlzeU1ERkJJVGNoQnlFSEl3Y3pBdzRESnk0RE54TXpBd1llQWhjV05qWTNBVE1ERGdJbkxnTTNFek1EQmg0Q0Z4WTJOamNEMWY3UUV3TVVFdjYvRnFRZG1iUU1SM0diWVZ1R1ZpSUt0TDIwQlFnaVF6VlFkMGtNQXkrOXRCRjV4b0phZ0U0ZENiU1lzd1lNS0VrM1RtOURDZ2FZYkd4OWEvdmVXNXQwUGdJQ1EzU1hWZ1FpKzkwdFdrd3dBZ05GZVVvRUkvdmZmY0ZzQXdKR2RaWlRCQ0w3M1RCY1NpMENBMGw1UmdBREFFLy81d1hYQmJFQUJ3QWdBRGtBSzBBVk5DY0xjZ1VDQVFFSEJ5MGhDQWdWQm5JY0R3dHlBQ3N5S3pJUk16TXpmQzh6R0M4ek15c3lNREZCSVRjaEJ5RUhJd2N6QXc0REp5NEROeE16QXdZZUFoY1dOalkzQVRNRERnSW5MZ00zRXpNREJoNENGeFkrQWpjREx2N1BGQU1URVA2K0Y2UWZrM29MUFdXS1YxSjRUQjRIZTdWNkJBWWJOeTFFWlQ0S0FxUzFlZzlzc0haUWNrWWFDSHFUZWdRSklUMHdNVTQ0SWdjRlJXeHNmNHo5S1ZLTVpqZ0RBanhtaDAwQzJQMG5KVTFCS2dJQ08yYy9BdG45S1hHc1h3TUNQbWlHU2dMWS9TY3BUajhuQWdJalAxSXRBQUlBYWY2RUJPY0Z5QUFoQUNVQUdVQU1GaElOQTNJbEFBQWtBUWx5QUN2Tk14RXpLOHd6TURGbEJ5NEVOemMrQXhjZUFnY2pOaVltSnlZT0FnY0hCaDRERndNakV3STZDbVdjYjBJVkRDY1RaNlBhaFpQU2FnbTdCemQrWldDWGJVVU5LUWtFSDBCbXZWcTdXb21mQlVoNm5MSmMrbnJpc1dZREFuclprbCtUVmdJRFVZaW5WUDA5Z0haZk93WDkvQUlFQUFBQ0FFeitnZ1BlQkZFQUh3QWpBQmxBREJVUkRBZHlJQUFBSWdFTGNnQXJ6VE1STXl2TU16QXhaUWN1QXpjM1BnTVhIZ0lISnpZbUppY21EZ0lIQndZZUFoY0RJeE1CMXcxc21Gb2dDZ1FOVklxNmNuQ2xXQWFxQkN0YlEwOTVWalFKQmdjSEtscXpXclZhaFpvR1g1bTdZU3RweEp0WkF3Tm9zRzRCUDJ4REF3TkdkWXhES2o2RGNVb0gvZjhDQVFBQkFFQUFBQVM0QlQ0QUV3QUlzUThGQUM4dk1ERkJBUmNISndNakFTYzNGd0VuTnhjVE13RVhCd004L3ZIOFUvenFzQUVsKzFMK0FRMzlWUHp5clA3Vi8xWURMUDZNckhPcC9yNEJsYXR5cWdGMXEzU3FBVXorWXF0eUFBSDg1d1NtLzlBRi9BQUhBQlczQmdZRUJBRUNBZ0VBTHpNdkVUTVJNM3d2TURGRElRY25OeUUzRjFiOTloZWlLZ0lNRXFFRkpINEI2V3dCQUFIOUNnVVcvK3NHRkFBVkFCSzJBUlFVRHdhQUN3QXZHc3d5TXhFek1ERkJGejRERnhZV0J3Y25OelltSnlZT0FnY2ovUllsUUhaeWRUNWtjUVlEZWdJREtUSTdkSFIzUGpBRmx3RUJKekVsQVFGd1pTY0JGQzg0QVFJa01pY0JBQUgrRmdVVy91UUdXQUFGQUFxeUFJQUNBQzhhelRBeFFTYzNNd2NYL3BlQkZMQWNKZ1VXejNPWGNnQUFBZjQ3QlJqL1VBWllBQVVBQ3JJQmdBUUFMeHJOTURGREJ5YzNOelBJdGtkT0ZyRUYwN3RKZFlJQUNQbzMvc0lCbEFXeEFBMEFHd0FwQURjQVJRQlRBR0VBYndBQVFRYzJOaGNXRmhVbk5pWWpKZ1lCQnpZMkZ4WVdGU2MySmlNbUJoTUhOallYRmhZVkp6WW1JeUlHQVFjMk5oY1dGaFVuTmlZaklnWUJCelkyRnhZV0ZTYzJKaU1tQmdFSE5qWVhGaFlWSnpZbUl5WUdBUWMyTmhjV0ZoVW5OaVlqSWdZVEJ6WTJGeFlXRlNjMkppTWlCdjRDY0FweVdsaHBiQU1mTURBMEFnTndDWE5aV0dwc0FoNHhMelJTYlFseFdsaG9hd0llTURBMC90dHRDWEZhVjJsckFoNHdNRFQ5bEc4SmMxcFhhV3NDSGpBd05QNm5jQWx6V2xocGJBTWVNVEEwL3ZKdENYRmFWMmxyQWg0eEx6UThiZ2x4V2xkcWJBSWVNUzgwQlBRQldHWUJBV2RYQVNvOEFUdit3UUZZWmdFQloxY0JLandCUFAzZ0FWZG1BUUZtVndFcVBEdjkwQUZYWmdFQlpsY0JLanc3L3JzQldHWUJBV2RYQVNvOEFUc0U4QUZZWmdFQloxY0JLandCTy8zZkFWZG1BUUZtVndFcVBEdjkwQUZYWmdFQlpsY0JLanc3QUFqNlR2NWpBVk1GeGdBRUFBa0FEZ0FUQUJnQUhRQWlBQ2NBQUVVM0Z3TWpBUWNuRXpNQk56Y0ZCeVVIQnlVM0FTYzNKUmNCRndjRkp3RUhKd00zQVRjWEV3ZjlQNFVOckdRQm80UU5xMlVCSHc4TEFUY1IrbDBRQ3Y3SkVRVm1XUU1CVFQzNjNGZ0QvclUrQWdacEVWMURBdDVvRTExRlBRTVMvcThHQkFJUUFWSDhKb3dLZjF5VmpBcC9Xd0VJWWhHWlRmd3dZaEtaVGdRRFh3SUJUejM3VjJBQy9yRSsvLzhBUlA2WkJXOEhHZ1FtQU53QUFBQW5BS0VCWHdGQ0FRY0FFQVJSLzd3QUZVQU9BaU1FQUFDWVZnRVBBUUVCWGxZQUt6UXJOQUQvL3dBdy9wa0VSZ1hEQkNZQThBQUFBQ2NBb1FDWi8rc0JCd0FRQTF2L3ZBQVZRQTRDSXdRQkFKaFdBUThCQVFGOVZnQXJOQ3MwQUFBQ0FDLy8vZ08vQm5JQUZ3QWJBQnBBREJvTEd3SnlBQmNYRFEwS0VnQS9NeEV6THpNcnpqTXdNVUVGSGdJSERnSW5JUUV6QVFVK0FqYzJKaVluSlFFSElUY0JOQUV2YXA5VENBbDh3M1grTlFFZXRmNzhBUUJGYjBZSUNCOU1QZjY1QWdBYi9WY2JBdW9CQkZpZWJubXVYQUlHY3ZvbUFRRTRaa1U2WHpzREFRTmRtSmdBQUFJQU93QUFCTzRGc0FBREFCc0FJMEFSQVFJRkFBTUdCZ1VGRWhBVEFuSVNDSElBS3lzeUVUa3ZNeEV6TXhFek16QXhRUUVIQVFNbE53VXlOalkzTmlZbUp5VURJeE1GSGdJSERnSURpQUVtZFA3Y1l2NTZIQUZ2WHAxbkRBczNkbFQrcCtHOC9RSDlnOHBzREEyYzlRUFYvbUplQVp6K3hRR2RBVUNCWWxWN1JBTUIrdTRGc0FFRFo4R0ltc2hnQUFULzEvNWdCQUFFVWdBREFBZ0FIZ0EwQUNWQUZBQURNQUVDTUNVYUR3dHlCd1p5R2dkeUJnNXlBQ3NyS3lzUk16SXlNaEV6TXpBeFFRRUhBUU1ESXdFekFRY09BeWN1QXpjM1BnTVhIZ01ITnpZdUFpY21EZ0lIQXdZZUFoY1dQZ0lDbHdFR2MvNzV1TjYyQVFTbUFuVUNEVVYycTNObWoxa2tCZzRSVVg2dGJtK0xTUkxCQWdjSEsxdE9QbTlhUUE4ckFTUkRXVFpUZTFVeEFZYitnRjRCZndJNCt3RUYydjN5RldMSHBHSURBbFdOcjF4dllydVdWZ1FEWmFHOWNCWThoblZNQWdJdFVXazYvdnMyWDBvckFnSkhlWkVBQUFJQU5RQUFCTlFIQUFBREFBa0FGVUFLQWdZR0F3a0NjZ2dJY2dBcks4NHpFVE13TVVFREl4TVRCeUVESXhNRTFGVzJWWGtjL1ZmaHZQd0hBUDRZQWVqK3NKNzY3Z1d3QUFJQUpRQUFBN1lGZHdBREFBa0FGVUFLQWdZR0F3a0djZ2dLY2dBcks4NHpFVE13TVVFREl4TVRCeUVESXhNRHRsSzJVbnNiL2h1aHRid0ZkLzRxQWRiK3c1bjhYd1E2QUFJQVJQN2RCS1VGc0FBRkFCMEFHVUFNQmdjSEV4SUNCUUp5QkFoeUFDc3JNaTh6T1M4ek1ERkJCeUVESXhNVE54Y2VBd2NPQXdjM1BnTTNOaTRDSndTbEhQMVk0Yno5RWh6RWdNTi9OUTBOVUlqQmZnOVlmbE11Q1FvWlRJRmRCYkNlK3U0RnNQendvUUVDVkpiUGZuakpsVk1Ca2dKRWM1RlBXSk5zUGdJQUFnQWwvdUVEZXdRNkFCUUFHZ0FiUUEwQUFRRUxGeG9HY2hrS2Nnd0xBQzh6S3lzeUVUa3ZNekF4VXpjWEhnSUhEZ01ISno0Q056WW1KaWNCQnlFREl4T2RIUFdHekdnUENVMTVtVlVoVUg1UENnbzBkbGtCMGh2K0c2RzF2QUhrb2dFRGQ5Q0tXWnA1VWhLVkZsUitWVmVIVHdNQ1Y1bjhYd1E2Ly8vL3EvNlpCM1VGc0FRbUFOb0FBQUVIQW1FR01BQUFBQXUyQlJzTUFBQ2FWZ0FyTkFELy8vK24vcGtHRGdRNkJDWUE3Z0FBQVFjQ1lRVDFBQUFBQzdZRkd3d0FBSnBXQUNzMEFQLy9BRVQrbGdWcUJiQUVKZ0k4QUFBQUJ3SmhCQVAvL2YvL0FERCttUVJZQkRvRUpnRHhBQUFCQndKaEEwWUFBQUFMdGdNUkFnRUFtbFlBS3pRQUFBUUFOZ0FBQlVrRnNBQURBQWNBRFFBUkFDOUFGdzhPRGdzTUJBUU1EQXNIQndzTEFCQURDSElJQUFKeUFDc3lLeklTT1M4ekx4RXpFVE12RVJJNUVUTXdNVUV6QXlNQk13TWpBVE1CSVRVaEJ6Y0JJd0V6dlAyOEFkcVNjNUlDeE9qOXNmNGdBWjRaaEFGSjRBV3crbEFFTVAxckJCWDgzNkI5bmZ5eEFBUUFMZ0FBQkpRRU9nQURBQWNBRFFBUkFDMUFGZzhPRGdzRUJBd01Dd2NIQ3dzQUVBTUtjZ2tBQm5JQUt6SXJNaEk1THpNdkVUTVJNeThSTXhFek1ERlRNd01qQVRNREl3RXpBU0UzSVFjM0FTUHF0YnkxQWFlU1pKSUNQZWIrQ1A1YkFRRnJHWU1CSTlrRU92dkdBMFg5eGdNdi9aU2lmSDM5andBRUFMd0FBQWJOQmJBQUF3QUhBQTBBRVFBalFCRVFEdzhMQ2dvRERnWUljZzBIQWdNQ2NnQXJNakl5S3pJU09TOHpNeEV6TURGQkJ5RTNJUU1qRXlFQklUVXpBUU1CTndFQzNSdjkraHNDaVB5OC9RUXAvUS8rcnU4Q1hNTCtYWDhCL0FXd21KajZVQVd3L04rZ0FvSDZVQUt5bi95dkFBQUVBSFlBQUFXTUJEb0FBd0FIQUEwQUVRQWpRQkVRRHc4TENnb0REZ1lLY2cwSEFnTUdjZ0FyTWpJeUt6SVNPUzh6TXhFek1ERkJCeUUzSVFNakV5RUJJVGN6QVFNQk53RUNmaHYrRXhzQ1JMeTJ2QU50L2FQKy9nSEVBYkNUL3MyQ0FZWUVPcGlZKzhZRU92MlVvZ0hLKzhZQjgzNzlqLy8vQUR2K21RVjNCYkFFSmdBc0FBQUJCd0poQkdVQUFBQUx0Z01QQ2dBQW1sWUFLelFBLy84QU1QNlpCRGNFT2dRbUFQUUFBQUVIQW1FRFpnQUFBQXUyQXc4S0FBQ2FWZ0FyTkFBQUJBQTdBQUFINEFXd0FBTUFCd0FMQUE4QUgwQVBCd1lHQ2dJREF3d0xBbklOQ2doeUFDc3lLekl5RVRNUk9TOHpNREZCQnlFbkF3Y2hOeE1ESXhNaEF5TVRCK0FiL1pCWmxSejlBeHlML2IzOUJELzl2UHdGc0ppWS9ZNmRuUUp5K2xBRnNQcFFCYkFBQUFRQUpRQUFCWlVFT2dBREFBY0FDd0FQQUI5QUR3Y0dCZ29DQXdNTUN3WnlEUW9LY2dBck1pc3lNaEV6RVRrdk16QXhRUWNoTndNSElUY1RBeU1USVFNakV3V1ZHLzQ3RzRVYi9kTWFlYnkxdkFOTHZMVzhCRHFabWY0cmxwWUIxZnZHQkRyN3hnUTZBQUFDQUVMKzNRZGlCYkFBQndBZkFCbEFEQWdKQ1JRRUJ3SnlCZ2h5QWdBdkt5c3lMemt2TXpBeFFRTWpFeUVESXhNQk54Y2VBd2NPQXdjM1BnTTNOaTRDSndWdS9idmgvVW5odmYwRFN4M0VnTU4rTmc0TVVJakJmZzVZZmxNdkNRb2FTNEZlQmJENlVBVVMrdTRGc1B6d29RRUNWSmJQZm5qSmxWTUJrZ0pFYzVGUFdKTnNQZ0lBQkFBbC91QUdRUVE2QUJRQUdBQWNBQ0FBSTBBUkhoY1lHQUFCQVFzZEhBWnlHd3B5REFzQUx6TXJLeklST1M4ek1oRXpMekF4UVRjWEhnSUhEZ01ISno0Q056WW1KaWNEQnlFM013TWpFeUVESXhNRFhSMzlpTk52RGdoTWVKZFZKRkI5VHdvTFBJQmE1QnY5N0JzY3ZMVzhBMHk4dGJ3QjVLSUJBM1BRamxtYWVWTVNsaFpVZjFSYmgwc0RBbGVabWZ2R0JEcjd4Z1E2QUFFQWEvL2pCYTBGeHdCREFCMUFEamtNRENNaUEzSUFBUUV1RndseUFDc3lNaEV6S3pJeUVUTXdNV1VISmlRbUFqYzNQZ01YSGdNSEJ3WUNCZ1FuTGdNM056NEROd2NPQXdjSEJoNENGeFkrQWpjM05qWW1KaWNtRGdJSEJ3WWVBZ1VqRHA3KzhjTmJGeU1PUm5XbWJtdUhSeE1MSmhlSHovNzJtbzdMZXl3UkdoRlNoOEIvRWxaNVVDNExHZ3dRUllWcWRzZVpaQkluQlFRWFEwSkdZa0FrQ0NRVFBJN1FocU1GWjdzQkNhampYTU9sWkFRRGE2YStWdk9UL3YvQmFnTURlY2oxZjZ4dzNiaHdBNlFDWFkrZlJhOVd1SjVsQXdSVGxzVnYrU3gvZlZZREEwNTZoalhwaHMrUFRBQUJBRnovNXdSYUJGUUFRd0FkUUE0NURBd2pJZ2R5QUFFQkxoY0xjZ0FyTWpJdk15c3lNaEV6TURGbEJ5NEROemMrQXhjZUF3Y0hEZ01uTGdNM056NEROd2NPQXdjSEJoNENGeFkrQWpjM05qWW1KaWNtRGdJSEJ3WWVBZ1FuQ24vZG9rOFFEUW96VjRGWFZXazJEUWNPRUdPZHpudDFvRndmQ3djTFBXZVVZaEk1VHpNZEJ3Y0hCaXhmVVZlTmFFRUxEZ01GQ3ljckxqMGtFd1FORFRKdW41S2ZCRktYMVloblNabUJUUU1EV1lxWlEybHkwYUZiQkFOcnJNMWxPMWlvaUZNRG5RTkJZMnd1T2o2U2hWY0VBMFY0bGs1dEdWNWpSZ0lET2xwZElHMW1uR3M0Ly8vLzFQNlpCU3NGc0FRbUFEd0FBQUVIQW1FRHVnQUFBQXUyQVE4R0FBQ2FWZ0FyTkFELy8vL0YvcGtEOVFRNkJDWUFYQUFBQVFjQ1lRTFBBQUFBQzdZQkR3WUFBSnBXQUNzMEFBQURBS3orb1FaakJiQUFBd0FKQUJFQUhVQU9DUTBOQ0FvSWNnVVFEQUlEQW5JQUt6SXlNaThyTWpJUk16QXhRUWNoTndFREl4TWpOd1VUTXdNaEV6TURCR1FiL0dNYkJWQnJxVDJMSGZ4ay9MN2lBcmpodlAwRnNKaVkrdkw5L3dGZm9xSUZzUHJ0QlJQNlVBQURBRmYrdndUSUJEc0FBd0FMQUJFQUgwQVBBZ01ERFFvRkJuSUlCd2NRQkFweUFDc3lNaEV6S3pJdk9TOHpNREZCQnlFM0V4TXpBeUVUTXdNM0F5TVRJemNESWh2OVVCdE52TGFpQWVLaXRieVlaS000aVJzRU81aVkrOFVFT3Z4ZUE2TDd4cGorSndGQm1QLy9BTXYrbVFVNkJiQUVKZ0RoQUFBQkJ3SmhCQ1VBQUFBTHRnSWRHUUFBbWxZQUt6UUEvLzhBZWY2WkEvVUVQQVFtQVBrQUFBRUhBbUVESlFBQUFBdTJBaHNDQUFDYVZnQXJOQUFBQXdES0FBQUZPZ1d3QUFNQUdRQWRBQ05BRVFNRENnb1ZBZ0lWRlFRY0NISWJCQUp5QUNzeUt4RTVMek12RVRNUk15OHdNVUVESXhNQk13TUdGaFlYRmo0Q053Y09BeWN1QWpjQk13TWpBMGw2a25yK2NMeEtDeVZyWURodWJXdzFEalZxYkcwM2pzUlpFUU9pdmYyOUEvdjlRd0s5QWJYK09GMS9SQUlCQ2hJYURwOFJHaEVJQVFKbng1SUJ4L3BRQUFBREFKUUFBQVFRQkR3QUF3QUhBQnNBSTBBUUFBQVlHQTBCQVEwTkJRcHlFZ1FHY2dBck1pc3lMek45THhFekVUTVlMekF4UVFNakV3RURJeE1UQnc0Q0p5NENOeE16QXdZV0ZoY1dOallDbG1PU1l3SU12TFc4SEEwN2VYMC9lNkpKRFRPME1nZ1lVRTFBZlhzREcvM0tBallCSC92R0JEcitENW9YSUE4QkFtZTFlQUU4L3NORmNFUUNBaEloQUFBQ0FCd0FBQVNMQmJBQUZRQVpBQmxBREFFWEJoRVJGeGdDY2hjSWNnQXJLeEU1THpNUk16QXhZU01UTmlZbUp5WU9BZ2MzUGdNWEhnSUhBU01UTXdRdnZFc0xKR3RnT0c5dGJUVVBOR3ByYlRlT3hGa1EvRjY5L2IwQnlWeUFRd0lCQ1JNWkQ1OFJHUkVJQVFKbXg1TCtPUVd3QUFJQWlQL3BCY1VGeGdBSkFEWUFKVUFTQlIwQkFSMGRCaHdjQ2lRVkEzSXZDZ2x5QUNzeUt6SVJPUzh6TXhFekx4RXpNREZURndZV0ZoY0hMZ0lCTGdNM056NERGeDREQndjaE55RTNOaTRDSnlZT0FnY0hCaDRDRnhZMk54Y09BbytVQnlWYlN3eHptVWNDNVlqTGdqTVJKeEpsb05XRGk3VmdHUkFSL0ZFWkF1MEdEUWcxY1Y1ZmttbEJEaWdNRlV1SVpsMnRVeUkwaFkwRU9nRkthVG9GakFSaHFmd2hBV0tyNG9INWR1R3phQU1EZGNEcGVIR0xJazJiZ2xJQ0ExR0twbEw2V3FXQ1RRSUNMaWFRS0NzUUFBSUFCUC9xQkVrRVVRQUlBRFVBSlVBU0JCd0JBUndjQlJzYkNTTVVCM0l1Q1F0eUFDc3lLeklTT1M4ek14RXpMeEV6TURGVEZ3WVdGd2N1QWdFdUF6YzNQZ01YSGdNSEJ5RTNCVGMyTGdJbkpnNENCd2NHSGdJWEZqWTNGdzRDQ3BFSlIyUU5hWVk5QWtsdW9XVXBDUVVMVll1OGMzQ1ZVeGtORFB6dUdnSlhCQWdPTUZNOFUzdFZNUWtGQnhJM1pFdGNranhvTUlPYkExb0JZRzhIaUFSYm0vejNBbGFSdVdZcmFNcWlYZ01EVzVlN1lsT1hBaEkxWjFVekF3TkplNUpHS1VDQmJFTUNBbE5BV1VSZUx3QURBRGIrMHdWRkJiQUFBd0FKQUNFQUlVQVFDZ1lHQ3dnSEJ4Y1dDUU1DY2dJSWNnQXJLekl2TXprdk16TXpFVE13TVVFREl4TWhBU0UzTXdFQk54Y2VBd2NPQXdjM1BnTTNOaTRDSndIdi9iejlCQkw4K2Y3ZEFlQUNYdjA4SGNxQXczODFEUXhSaWNKOUMxZDlVakFJQ2hoS2YxMEZzUHBRQmJEODVhb0NjZnpscHdFQ1ZKZlBmbmpLbFZRRG1nRkVjbzlPVnBGc1BnSUFBd0F1L3ZvRVZ3UTZBQU1BQ1FBZUFDRkFFQllWQ1FaeUJnb0tCd3NMQVFNR2NnRUFMeXNTT1M4ek14RXpLeTh6TURGQkF5TVRJUUVqTnpNQkFUY0ZIZ0lIRGdNSEp6NENOelltSmljQm43eTF2QU50L1libUFhY0J6ZjFmSFFFQmhOWjFEZ2xOZXBkU0lVeDlVUWtMUVlKWEJEcjd4Z1E2L1pTaUFjcjlsS0VCQTJUQmoxaVVjMDBSbFJSTmQxSmRlRDBDLy8vL3kvNlpCV1lGc0FRbUFOMEFBQUVIQUJBRVJ2KzhBQXUyQXlRR0FBQ1lWZ0FyTkFELy8vL0kvcGtFUndRNkJDWUE4Z0FBQVFjQUVBTmMvN3dBQzdZREpBWUJBSmhXQUNzMEFBQUJBRVQrU0FWdUJiQUFHUUFaUUF3WkNISVhBZ0lSQ2dVQUFuSUFLekl2TXprdk15c3dNVUV6QXlFVE13RU9BaWNpSmljM0ZoWXpNalkyTnhNaEF5TUJRYnh5QXJSenZQNzVEbHFhYmg4N0hSNFhNUmc0UmljSGV2MU1iNzBGc1AxdkFwSDUvR2VpV3dFTENKa0hDVHhjTHdMVy9YNEFBUUFsL2tnRUxBUTZBQmtBSFVBUEdRcHlGd0lDQUJFS0QzSUZBQVp5QUNzeUt6SVNPUzh6S3pBeFV6TURJUk16QXc0Q0p5SW1KemNXRmpNV05qWTNFeUVESStHMVVnSGhVclhIRFZtWWJCODZIaDhYTUJrM1J5WUlYUDRmVUxVRU92NHJBZFg3YldhZldnRUtDWk1IQ1FFOVhEQUNLUDR4QVAvL0FEdittUVYzQmJBRUpnQXNBQUFCQndBUUJGbi92QUFMdGdNV0NnRUFtRllBS3pRQS8vOEFNUDZaQkVVRU9nUW1BUFFBQUFFSEFCQURXdis4QUF1MkF4WUtBUUNZVmdBck5BRC8vd0E3L3BrR3R3V3dCQ1lBTVFBQUFRY0FFQVdOLzd3QUM3WURHdzhBQUpoV0FDczBBUC8vQURIK21RV05CRG9FSmdEekFBQUJCd0FRQktML3ZBQUx0Z01aQ3dFQW1GWUFLelFBQUFFQVV2L3BCUm9GeEFBc0FCdEFEUm9MRVJRVUN5VUFBM0lMQ1hJQUt5c3lFVGt2TXhFek1ERkJIZ01IQnc0REp5NEROemNoQnlFSEJoNENGeFkrQWpjM05pNENKeVlHQnljK0FnTDVsOW1ETGhJTkUzQ3k3cEdReVhVbkVoUUVIeHY4b3djUEZVcUZZMjZyZTB3UERnNFNUWlYwWWJkWUl6aU1rZ1hEQVhMRSs0dGVnL3pLZGdNRGE3anRoSHlWSTFtZmVrZ0RBbCtnd2w5Zlk3NmJYZ0lCTFNlUktDc1FBQUlBUFAvb0JIWUZzQUFIQUNVQUgwQVBCUWdJQkNVbEFCd1NDWElIQUFKeUFDc3lLeklST1JFek14RXpNREZCSVFjQkl6Y0JJUk16SGdJSERnTW5MZ00zTXdZV0ZoY1dOalkzTmlZbUp5Y0JKQU5TRi8yOGR4Y0J1LzJTc1lhR3ltZ01DVjJVdVdWZm1HczFCcnNGTVdoTlZKSmlDZ3N6ZUZ1V0JiQ0YvYlY5QWJYK1FRSm13WXhxcEhBNEFnSStjWnRlU1hkSkFnTkNmRlpjZ0VRREFRQUMvLzMrY3dRdkJEb0FCd0FsQUI5QURnZ0ZCUVFsSlFBY0dCSUhBQVp5QUNzeUw4d3pFamt2TXpNUk16QXhVeUVIQVNNM0FTRVRGeDRDQnc0REp5NEROek1HRmhZWEZqWTJOelltSmljbjR3Tk1GUDNJZ0JZQnJmMmlyNENGeTJzTENWeVV1V1JlbUdvMEJyTUZNbXBPVnBSakNnczFlbDJWQkRwLy9hNTlBYnYrTndFRFlyMk5hYVJ3T0FJQ1BuQ2JYVXA2U1FJRFFuNVlYbjlEQWdILy8vLzUva2NFNXdXd0JDWUFzVUlBQUNZQ05yaEFBQWNDWkFEcUFBRC8vLy9wL2tjRDBRUTZCQ1lBN0UwQUFDWUNOcHFOQUFjQ1pBRGFBQUQvLy8vVS9rY0ZLd1d3QkNZQVBBQUFBQWNDWkFPTEFBRC8vLy9GL2tjRDlRUTZCQ1lBWEFBQUFBY0NaQUtnQUFBQUFRQXVBQUFFMlFXd0FCZ0FFcmNEQUFBTEVBMENjZ0FyTHpNNUx6TXdNVUVGQnlVaUJnWUhCaFlXRndVVE13TWxMZ0kzUGdNQ1dRR05IUDZLV1paakN3c3hiVklCWCtHOS9mMzhnY1JsREFsZGxid0RkQUdlQVVOL1hGQjlTUVFCQlJQNlVBRUVhcitIYnFkeE9RQUNBREgvL3dZZ0JiQUFHQUF0QUI5QURoc0xDeEFsSlFNQUFCb1FEUUp5QUNzdk16a3ZNek12RVRNUk16QXhRUVVISlNJR0JnY0dGaFlYQlJNekF5VXVBamMrQXdFak54YytBamMyTmlZbUp4Y2VBZ2NPQWdKY0FZNGMvb2xabG1JTUNqQnRVZ0ZnNGJ6OS9meUN3MlVMQ2wyVnZBSk1sUnlBVVhSR0RRY0dBZ29LcndvT0F3Y1JmTWtEZEFHZUFVTi9YRkI5U2dNQkJSUDZVQUVFYWNDSGJxZHhPZnlNbkFFQlRIMU1LRkpTVWlnQk5teHNObi9GYndBREFFai81d1krQmhnQUZnQXJBRWNBSFVBUU0wUUxjanN0QVhJZEVndHlKd1lIY2dBck1pc3lLeThyTWpBeFV6YytBeGNlQkFjSERnTW5MZ00zQndZZUFoY1dOalkzTnpZdUFpY21EZ0lGRXpNREJoWVdGeFkrQWpjMk5pY3pGaFlIRGdNbkxnSlNBZzFEZHE5M1UzWk9MQTRFQ3hCS2Q2VnNhWXRNR01NQ0J3Y3BXRXRTakdRV0p3SWZQMXM0VjN0UkxnSFh6cmJQQlJFNk9sTjZVeklMRUFVUXFRMEdEaEJTaUx0NGJvazZBZTBXWk5Hd2FnTURQMm1Fa0VaYlg3cVhXQU1EWFphMGNCWThmR3REQWdKT2cwenpOMlZRTVFJQ1Q0S1o4Z1MvKzBBd1lFSURCRWg2a1VSa3lHTmt4Mk50eVoxYkFnRmdwQUFBQWdDdC8ra0Zwd1d3QUNBQVJnQWhRQkFvSnljQ0FRRU9Na01KY2pvTkRnSnlBQ3N5THlzeUVUa3ZNek1STXpBeFFTTTNGekkyTmpjMkxnSW5KVGNGSGdNSERnUUhEZ0lIQmdZVEp6YzJKaVluTng0REJ3Y0dGaFlYRmo0Q056WTJKek1XRmdjT0F5Y3VBZ0hHeWh5Q1c1eG1EQWNkUUY0Ni9wZ2NBVkJmb1hVNkNBY3lUMk50TndRSEJ3VU9OYU1CQ0FjbFhFc2FXSTFmTEFrSEF4TTFMazF1U0NzSkVBVVFzQXdHRGc1TWZySjFab0k3QW5tZUFUSjBZejVhT3gwQ0FaNEJBakZqbG1aUFowUXdMeDhEQ2dvRENBbit0d0pEU1hGREJXd0JMMXFJWEVZcFN6SUNCRTE4alR4anlXTmt4Mk5ueDZKZUFRSlJrZ0FBQWdCby8rTUVyZ1E2QUIwQVFnQWxRQkkrUFQwYkFnRUJEU29xSWpNTGNnd05CbklBS3pJck1qSXZFVGt2TXpNekVUTXdNVUVuTnhjK0FqYzJKaVluSlRjWEhnSUhEZ01IRGdJSEJnWUZOd1lXRnhZK0FqYzJKaWNYRmhZSERnTW5MZ00zTnpZbUppYzNIZ0lIQVZqd0dhdzZkRlFKQ1RWZU5mNzJGUGhpc0dvR0JVRmZhUzBHQlFRR0NUUUJLUVVFSERGQVlVUXFDUXdHRktrUEVRb01TbmFoWkR0ZFFCOERDUVF3VkRJcVZwVldDUUc1QVpZQkFSMUtRejVKSVFJQmxRRUNQNGR3VUU4bkpDUUZFUkVFQndmdUZDd3pBd1V5V200MlRxQk5BVTZkVGw2bGZVY0NBUjA3V3oxT09qNGJBMmtCTDNCakFBQURBTEQrMWdPV0JiQUFId0EwQUQ4QUgwQU9PamsvTEF3TkFuSWhJQ0FCQVFJQUx6TVJNeEV6S3pJdk15OHpNREZCSXpjWE1qWTJOelltSmljbE54Y2VBZ2NPQkFjT0FnY09BZ2MzSGdJSEJ3WUdGaGNISXlZbU5qYzNOaVltQVFjR0JnY25QZ0kzTndHUjRSdVRYS0JxREFvM2NsRCs2UnYvZjhScEN3Y3hUV0Z0TndVSENBVUpIaDhXR0hhdFZRNFRCZ0lRRndPeEdSQUZCUk1LS1dJQnd4Z1JlVmRqSWpvcUNoc0NlWmdCTW5aa1ZHNDNBZ0dZQVFOWnNvaE1aMFV6TGgwRENRa0NCZ2NGQW0wRFVhSjhpU1JKUlI0YUlWQlZKNFpNY1VQK1lwUnR2RUpMSzFsaU5wZ0FBQU1Bb1A3RkEzY0VPZ0FlQURNQVBnQWVRQTQ0SUI4ZkFnRUJQaXNLREEwR2NnQXJNajh6T1M4ek14RXpMekF4UVNVM0Z6NENOelltSmljbE53VWVBd2NPQXdjR0JnY09BaU0zSGdJSEJ3WVdGaGNISXlZbU5qYzNOaVltQlFjR0JnY25QZ0kzTndHdC92TWJ3enQzVkFvSU5GMDIvdDhjQVFoSmlXczdCUVZBWG1vdkNRVUlCaHNjTENoYWxsSUtEUVFCRVJRQ3N4VVFBUVFOQmlwU0FiWVlFWFZXYUNNNktRb2JBYmdCbGdFQkhVcEZQa2tnQVFHV0FRSWpTblpUVDFBcEpDTUhIQWNGQmdScUFUZDVaV0ljTlRBV0ZCYzZQaDVoUEVnajhKUnR2RU5NSzFsaU5wZ0FBQVAvNFAvbUJ6Y0ZzQUFSQUJVQU1nQWRRQTRtSmg0dkNYSVhGQUFWQW5JTENBQXZNeXN5TWpJck1qSXZNREZCTXdNT0JDTWpOemMrQkRjQkJ5RTNBUk16QXdZZUFoY1dQZ0kzTmpZbk14WVdCdzRESnk0Q0FoTzdteE12UjNDcGVqY1JKVloxU2kwY0RRTkJIUDJUSEFHTHZMMjhCQWNjTkN0UmVGRXhDeEFGRWJFTUJRMFBWSWk4ZUhDTU9nV3cvVGRnenNLYlhKMENCVmlKb0tCQ0FxbWVudnVyQkZYN3FpTklQaWNDQkVoNGowTmp5V05qeUdOc3k1OWJBd05mcEFBQUEvL2EvK1lHQWdRNkFCRUFGUUF6QUI5QUVDY25IaThMY2hjVUFCVUdjZ3NJQ25JQUt6SXJNakl5S3pJeUx6QXhRVE1ERGdRbkl6YzNQZ1EzQVFjaE53RVRNd01HSGdJWEZqNENOelkySnpjV0ZnY09BeWN1QXdHRnRuUVBKanRiaGw4OUV5WkJXRGtpRlFrQ1p4ditJaHNCUTN1MWV3TUhHellxUjJWQ0p3a09BeENvREFvTkRVZDJwbXhUZUVrZEJEcjk5a3lma25OQkFhSUNCRDlrZDNjeEFkQ1ptZjBmQXVIOUhpUkpQeWdCQTBOdmZ6aGV2bDBCWHIxZVg3bVZWd01DTjJPRUFBQURBRHovNXdjNEJiQUFBd0FIQUNNQUlFQVJGaFlPSHdseUNBSnlBQU1EQmdnRUFuSUFLejg1THpNckt6SXlMekF4UVNFSElRTXpBeU1CTXdNR0ZoWVhGajRDTnpZMkp6TVdGZ2NPQXljdUFqY0JaUUxqSFAwZEVMejl2QVJodTdvRUVEazRVWGhTTVFzUUJCR3dEQWNPRUZPSXZIaHVpam9JQXgrZUF5LzZVQVd3KzZndVgwRURBMGg1amtOanlXTmp5R050eVo5YkFnSmhwV29BQUFNQUkvL29CaFFFT2dBREFBY0FKUUFpUUJJWkdSQWhDM0lKQm5JREFnSUZCd1p5QlFvQVB5c1NPUzh6S3lzeU1pOHdNVUVISVRjVEF5TVRBUk16QXdZZUFoY1dQZ0kzTmpZbk54WVdCdzRESnk0REEwY2IvZFVhZXJ5MnZBSWplN1o3QkFjYk5pdEhaVUluQ1E4QkVLZ05DZzBOUjNhbWJWSjJTUjBDWkphV0FkYjd4Z1E2L1I4QzRmMGVKRWsvSndJRFEyOS9PRjYrWFFGZXZWNWd1SlJXQVFFNFk0WUFBQUVBWmYvb0JJSUZ5QUFyQUJWQUNoSUxBM0lsSlIwQUNYSUFLekl5THlzeU1ERkZMZ00zRXo0REZ6SVdGd2NtSmljbURnSUhBd1llQWhjV05qWTNOalluTXhZV0J3NENBa2lBdlhndUR5a1ViYXJmaDF1clRrVkFqRWxobm5WTER5b0xFME42WEZ5UVhBOFBBUXV6QndjTUVwYm1GUU5ucnR4MkFRWis0YXhpQWlndmpDUWlBUUZNaEtWWi92ZE9vSWhWQWdKTGhsbFl0Rmhac2xpTXptNEFBQUVBVGYvb0E0WUVVUUFyQUJWQUNpRWFCM0lIQndBUEMzSUFLekl5THlzeU1ERmxGalkyTnpZMkp6TVdGZ2NPQWljdUF6YzNQZ01YRmhZWEJ5WW1JeVlPQWdjSEJoNENBZkU2WERzSkNRTUVxUVFEQncxeXIybHdvR0ltQ3dVTVZJcTZja2lOUGpveWN6cFFlbFkwQ2dVSERUSmhnd0VtVGpvNmRqbzZkVGxzbEVvQ0ExeVp2bVVyYXNTYVdRRUJIQ2lPSHgwQlJuU0xSU28vaG5SSkFBQUNBSnYvNWdVZkJiQUFBd0FnQUJkQUN4UVVEQjBKY2dVQ0F3SnlBQ3N5TWlzeU1pOHdNVUVISVRjQkV6TURCaDRDRnhZK0FqYzJOaWN6RmhZSERnTW5MZ0lGRmh6N29Sd0JFYnk4dkFNR0d6VXFVbmRTTVFzUUJCQ3dEUVlQRDFPSHZIbHVpanNGc0o2ZSs2c0VWZnVxSTBrK0p3SURTSG1PUTJQSlkyVEhZMjNLbjFzREFtR2xBQUFDQUgzLzZBU0FCRG9BQXdBZ0FCZEFDeE1UQ3h3TGNnVUNBd1p5QUNzeU1pc3lNaTh3TVVFSElUY1RFek1EQmhZV0Z4WStBamMySmljWEZoWUhEZ01uTGdNRUNCcjhqeHJoZkxSN0JSRThPVUJnUlNrSkRRWVNwdzRSQ2cxSmQ2SmxVbmRKSGdRNmxwYjlId0xoL1I0d1lFSURBak5aYlRkUW9rOEJUNkJRWHFaL1J3RUJPR09GQUFBQ0FHai82UVVmQmNjQUlBQS9BQ05BRVFBaVB6OENBaGMxTVN3RGNoRU5Gd2x5QUNzeXpDdk1NeEk1THpNU09Ua3dNVUVYQnljaURnSUhCaDRDRnhZMk5qYzNEZ01uTGdNM1BnTUZKeTRETno0REZ4NENCeWMySmlZbkpnWUdCd1llQWhjWEFzTEdGYWxHaW5WT0NRZzBZSGM3VjZsOEVMc01iYWZJWjErNWsxRUlDSEt1eWdFWHJrMm9qbFFHQ0cycXkyZDUySU1GdWdSUmhrcFZyMzBNQ1NwVWF6bkFBeEVCZVFFWlBHbFFSbU05SEFFQ09uaGNBWENpYURFQ0FUSmxuVzV6bGxZa1ZnRUNLRlNHWG5TalpTMENBMXV5aFFGU2JEWUNBakowWUVOYU5Sa0JBUUQvLy8vTC9rY0ZaZ1d3QkNZQTNRQUFBQWNDWkFRa0FBRC8vLy9JL2tjRVNnUTZCQ1lBOGdBQUFBY0NaQU02QUFBQUFnRHpCSE1EVEFYWEFBVUFEd0FTdGdVRkRRY0NBZ2NBTHpNdkVNMHlMekF4UVRjVE13Y0JKVGN6QndZV0Z3Y21KZ0hxQWFPK0FmNzEvcndNcEE0S0VpUkdTRWtFZ3hNQlFSYit3LzVWVUQ1dE5EVXRqUC8vQUJvQ0h3SVFBcmNFQmdBUkFBRC8vd0FhQWg4Q0VBSzNCQVlBRVFBQUFBRUFwZ0tMQkpRREl3QURBQWl4QXdJQUx6TXdNVUVISVRjRWxDRDhNaUVESTVpWUFBRUFtQUtMQmRZREl3QURBQWl4QXdJQUx6TXdNVUVISVRjRjFpdjY3U3dESTVpWUFBTC9YdjVxQXg0QUFBQURBQWNBRHJRQ0E0QUdCd0F2TXhyT01qQXhSUWNoTnlVSElUY0M4aHY4aHhzRHBSdjhoeHYrbUpqK21KZ0FBUUN3QkRFQ0JRWVZBQW9BQ0xFRkFBQXZ6VEF4VXpjK0FqY1hCZ1lIQjdBU0N6MWJPV2N6U3c4V0JERjRTWVJ5TFV4QWkxRjhBQUFCQUlrRUZRSGhCZ0FBQ2dBSXNRVUFBQy9OTURGQkJ3NENCeWMyTmpjM0FlRVVDejFiT0drMFN3OFhCZ0IvU1lSeUxVeEFpMUdEQUFIL2wvN2tBT3NBdGdBS0FBaXhCUUFBTDgwd01YY0hEZ0lISnpZMk56ZnJFQXM5V2pscE5Fb1BFN1ptU1lSeUxVdEFqRkZxQUFFQTBnUVhBYmtHQUFBS0FBaXhCZ0FBTDgwd01WTXpCd1lXRndjdUFqZnZ0QmNNRkNWb0xUc1hDQVlBaEUyT1JVVXZkb05CLy84QXVBUXhBejRHRlFRbUFZUUlBQUFIQVlRQk9RQUEvLzhBbFFRVkF4WUdBQVFtQVlVTUFBQUhBWVVCTlFBQUFBTC9sUDdTQWhVQTlnQUtBQlVBRExNUUJRc0FBQzh5elRJd01YY0hEZ0lISnpZMk56Y2hCdzRDQnljMk5qYzM5aHNNUGwwN1pUVkxFQjRCMHhzTVBsMDdaRFJMRUI3MnBreUtlREJMUlpSV3FxWk1pbmd3UzBXVVZxb0FBZ0IzQUFBRVVRV3dBQU1BQndBVlFBb0dCd2NDQXdKeUFoSnlBQ3NyRVRrdk16QXhRUU1qRXdFSElUY0RBK1MxNUFJREdmdy9HQVd3K2xBRnNQNkttWmtBQS8vMi9tQUVZQVd3QUFNQUJ3QUxBQjFBRGdzS0JnY0hBUU1LRW5JREFuSUJBQzhyS3hFU09TOHpFVE13TVVFQkl3RUJCeUUzQVFjaE53TVIvdHUxQVNVQ0JCajhQeGdETUJqOFB4Z0ZzUGl3QjFEK2lwbVovRjZZbUFBQkFLRUNGUUl0QTh3QURRQUlzUVFMQUMvTk1ERlROelkyTXhZV0ZRY0dCaWNpSnFFQ0JYQmJWMk1DQlhKYVZHVUMxQ3BaZFFGdlZDdFljQUZyLy84QU9QL3lBc0VBMUFRbUFCSUVBQUFIQUJJQnJBQUEvLzhBT1AveUJGTUExQVFtQUJJRUFBQW5BQklCckFBQUFBY0FFZ00rQUFBQUFRQlNBZ0FCS1FMWUFBc0FDTEVEQ1FBdnpUQXhVelEyTnpZV0J3WUdCd1ltVXpzdkx6MEJBVHd1TGowQ2FDOC9BUUU3THk4OUFRRTZBQWNBbHYvb0J2Y0Z5QUFSQUNNQU5RQkhBRmtBYXdCdkFDbEFFMTlXVmpKb1RVMUVLU2s3TWcwWERnNGdCUVVBUHpNekx6TS9Nek12TXpNdk14RXpMek13TVZNM1BnSVhIZ0lIQnc0Q0p5NENOd2NHRmhZWEZqWTJOemMySmlZbkpnWUdBVGMrQWhjZUFnY0hEZ0luTGdJM0J3WVdGaGNXTmpZM056WW1KaWNtQmdZRk56NENGeDRDQndjT0FpY3VBamNIQmhZV0Z4WTJOamMzTmlZbUp5WUdCZ01CSndHYkJ3bFdpMWxWZHpzR0JnbFdpMWhVZUR5V0NBUVdPakkwVEM0SENBUVZPak0wVFMwQnR3WUpWb3RaVTI0MEJRY0pUb0pXVlhnOGx3Z0RGamt5TlV3dEJ3Z0VGam96TkV3dUFUY0hDRStEVjFWM093VUhDVldMV0ZOdk5ZUUpBeFk2TWpSTUxnY0pBeFk2TWpWTUxuajhqMk1EY1FSTFRGV0xVUUlDVTRoUlRWV0pVQUlDVW9lZVR5dFJOUUVCTWxNd1RpeFNOZ0VCTTFUOFQwMVZpMUFDQWxhSVRVNVJpMU1DQWxPSG4xRXJVVFVCQWpOVU1FOHNValVCQVROVGZrMVNpbFFDQWxPSFVVNVZpbEFDQWxhSW0xQXJValVCQWpSVE1FOHNValVCQVROVEEwWDdsMGdFYUFBQ0FGMEFtUUpUQTdVQUJBQUpBQkpBQ1FFRkF3a0NDQVlHQUFBdkx4YzVNREZCQVFjMUFRTVRJd00xQWxQK3Y2OEJXclcyZnVNRHRQNXdBaEFCZy81My9tMEJoQkFBQWdBRUFKa0Ird08xQUFRQUNRQU90QUlJQ0FVQUFDOHZPUzh6TURGM0FUY1ZBUU16RXdjbkJBRkNyLzZtQVgza0FhcWFBWkFDRVA1OUF4eitmQkFCQUFILzhBQnhBOE1GSVFBREFBNnpBQU1DQVFCOEx6TVlMek13TVVFQkp3RUR3L3lQWWdOeEJObjdtRWdFYVAvL0FJOENqQUxwQmI4R0J3SFhBSE1DbS8vL0FHUUNtd0xuQmJBR0J3SXdBSE1DbS8vL0FJb0NqZ01EQmJBR0J3SXhBSE1DbS8vL0FKQUNqZ0xUQmJ3R0J3SXlBSE1DbS8vL0FLSUNtd01uQmJBR0J3SXpBSE1DbS8vL0FIc0NqZ0xyQmIwR0J3STBBSE1DbS8vL0FLb0NrZ0xqQmIwR0J3STFBSE1DbXdBQ0FINENpd05HQmIwQUJBQVpBQk8zRmdzRUJBc0NFUUlBTHpNL015OFJNekF4UVFNakV6TURCejRERng0Q0J3TWpFelltSmljbUJnWUJrR3Vuakhzd0tBa3FTRzlQV0dRa0NGS21UUVVKTURaRlZTNEU5UDJYQXlEK2l3RkFpblpJQWdKWWkwLytCQUhkTEZrOUFnRk1jLy8vLzl6K2dRSTJBYlFHQndIWC84RCtrUC8vQUMzK2tRRzlBYVlHQndIVy84SCtrZi8vLzZ2K2tRSTBBYlFHQndIVi84SCtrZi8vLzd6K2hBSTVBYlFHQndJdi84SCtrZi8vLzdMK2tRSTFBYVlHQndJdy84SCtrZi8vLzlqK2hBSlJBYVlHQndJeC84SCtrZi8vLzk3K2hBSWhBYklHQndJeS84SCtrZi8vLy9EK2tRSjFBYVlHQndJei84SCtrZi8vLzhuK2hBSTVBYk1HQndJMC84SCtrZi8vLy9qK2lBSXhBYk1HQndJMS84SCtrUUFFLy9NQUFBU0lCY2NBQXdBZUFDSUFKZ0FpUUJBaUlTVW1KZ0ViRnhJRmNna0NBZ0VNQUQ4ekVUTXJ6RE1TT1M4enpqSXdNV0VoTnlFQkF3WUdCeWMrQWpjVFBnSVhIZ0lISnpZbUppY21CZ1lCQnlFM0FRY2hOd1BmL0JRY0Erejk5RklLUVVheExEWWNCbFVRaGRTRWRLSlJCcndGSmxkR1VYWkhBVElXL1ZnWEFub1gvVmtXblFOei9ZUlZvelk0RUZSbEtnSitnY2h2QXdOanJYTUJRbWcrQWdKUWd2OEFmWDMrK24xOUFBTUFDZ0FBQmtRRnNBQURBQWNBRVFBaVFCQURBZ1lMRGhBSEJ3MFJEZ1J5Q2cwTUFEOHpLeklTT1M4NUVqa3p6akl3TVVFSElUY0JCeUUzQVFNakFRTWpFek1CRXdaRUcvb1ZHd1czRy9vVkd3V2YvYmI5K01TOS9iWUNDc1VEclppWS90U1ltQU12K2xBRWEvdVZCYkQ3a2dSdUFBQURBRG4vN1FZbEJiQUFGd0FiQUMwQUkwQVNJaWtOSEJrWUJuSUNBUUVPREE4RWNnNE1BRDhyTWhJNUx6TXJNc3cvTXpBeFFTYzNGekkyTmpjMkppWW5Kd01qRXdVZUFnY09BZ0VISVRjVE13TUdGaFl6RmpZM0J3WUdKeTRDTndJWDhCdlpZWXRSREFvZFlWckY0N1g5QVdPR3MxSU1Eb2ZkQTM4YS9ja1o3YlMzQkFvbkp4VXJGUXdnUXlGVFhpRUhBalFCbUFGSWhsNVNmMHNEQWZyb0JiQUJCR3pCaEpITGF3SUhqbzRCQi92Skl6Z2hBUWNFbVFrSkFRRlNna29BLy84QU8vL3JCK2NGc0FRbUFEWUFBQUFIQUZjRU5BQUFBQVlBQ1FBQUJoY0ZzQUFEQUFjQURRQVNBQmNBSFFBcVFCUWRGUW9LRWdZSEF3SUNFUklFY2hNYkd3Z1JEQUEvTXpNUk15c1NPUzh6empJUk14RXpNekF4UVFjaE53RUhJVGNCRXdFekF3RURFd01qQXdFVEFUTUJBeE1ESXhNVEJlTWIrbjBiQlVjYituMGJBUStWQVZTRWxmNnBLd3NlZFM4Q3BZZ0JWOEg5MXlJQ0ZYOENGQVBVbDVmK3BwZVgvWVlCNEFQUS9oLzhNUVd3L0NMK0xnV3crbEFCNWdQSytsQUZzUHdnL2pBRDBnSGVBQUlBSC8vK0Jja0VPZ0FSQUNJQUlFQVBGaE1URVJRSUZBZ1JDaHdQQUFaeUFDc3lNajg1T1M4dkVUTVJNekF4VXdVZUF3Y0RJeE0yTGdJbkpRTWpJU0VUTXdNRk1qWTJOeE16QXc0RDJ3SVJXWE0vRWdnMXRqWUdCUjlDTi83Q29yWURxUDNXZ0xWbEFTbFNiajhNYzdWeUN6aGdqUVE2QWdKQ2I0OVEvcmNCVERCWFJTa0NBdnhlQXQ3OXVnSTljVTRDcVAxYVdaVnRPd0FEQUZILzdRU0pCY1lBSXdBbkFDc0FIVUFPS2lzbkppWUhHUklGY2dBSERYSUFLeklyTWhJNUx6UE9NakF4WlJZMk54Y0dCaWN1QXpjVFBnTVhNaFlYQnlZbUp5WU9BZ2NEQmg0Q0FRY2hOd0VISVRjQ3Z6aHROZ1U1ZFRwK3Ntb21EalFUWDVyU2hUeDJPeUV5YURSZ2tXYy9EVFVKQ3padEFRd1cvU0lYQXJBVy9TSVhpZ0VTRDZFT0RnRUNYYURQZEFGTmZOYWZXQUVTREtNUkZBRUJRM2ViVi82d1NwTjZUQU1UZlgzKyszeDhBQUFEQUVNQUFBWDdCYkFBQXdBSEFCOEFLVUFUQmdjREFnSVVDaFFYQ1FvS0ZoY0VjaFlNY2dBckt4STVmUzh6RVRNUkVqa1lMelBPTWpBeFFRY2hOd1VISVRjQkpUY0ZNalkyTnpZbUppY2xBeU1UQlI0Q0J3NENCZnNiK28wYkJVa2IrbzBiQXBEK2Vod0JiMTZkWnd3TE4zVlYvcWpodlB3Qi9vTExiQXdObmZRRXZaaVk5WmlZL25JQm5RRkFnR05WZTBRREFmcnVCYkFCQTJmQmlackhZUUFEQUVvQUFBUnpCYkFBQXdBY0FDQUFMVUFWSHlBZ0VRTUNCUVlHR2dJYUFob0VFQkVFY2dRTUFEOHJNaEk1T1gwdkx4RXpFVE1STXhFekVUTXdNVUVISVRjQkFUY1hNalkyTnpZbUppY2xOeGNlQWdjT0FnY0JCd0VISVRjRU5rbjhkRWtCUFA1a0ZPSlluR29NQ3paNFYvN3hTY3FMekdZTkRaYnNrQUY3QVFHMFNQMGlTUVJNbnA3N3RBSnpjd0UrZTExWmVrRUNBWjRCQTJMQ2tKcTlXQVA5eUE0RnNKNmVBQVFBQy8vbkJCVUZzQUFEQUJRQUdBQWNBQlZBQ1FRRUF3OEJDdzBEQkFBL1B6TXpFamt2TURGQkF5TVRBVE1IRGdNbkppWW5OejRETndNSEFUY0ZCd0UzQWx6OHZQMEJ1cm9MRW1pcDY1Y3dYekRFYzZ0MVJRNFhJdjB1SVFLWklmMHRJZ1d3K2xBRnNQMVRWNGYreTNVREFROEdqd05hbDhCb0FuMjgvc2E4RXJ2K3hyc0FBdi95QUFBRWlnUTZBQnNBSHdBWVFBc0lGUlVlSHdaeURnRWVDZ0EvTXpNckVqa3ZNekF4WVNNM05qWXVBaWNtRGdJSEJ5TTNQZ01YSGdRSEFRTWpFd1JldFI4S0FSeERjMWR4cUhWSER4NjJIeFJvcCttV2RLbHdQQTRPL3NLOHRyeStSWk9LY0VRQ0JGNmV3V0c4dW9UOXkzWUVBbEtNczhka0E0RDd4Z1E2QUFMLzVRQUFCVEFGc0FBWEFCc0FHa0FNR1JnREFBQU9EQThFY2c0TUFEOHJNaEk1THpQT01qQXhRU1UzQlRJMk5qYzJKaVluSlFNakV3VWVBZ2NPQWdjSElUY0MrUDBnSEFMSVlKeGxEQXM0ZFZMK3B1RzgvUUgrZ3NwckN3NmI4NzhjL1RjY0Fqb0JuUUZCZ21OVGVrUURBZnJ1QmJBQkEyYS9pWm5KWW9pZW5nQUVBTXovNkFVeEJja0FJUUF6QUVVQVNRQWxRQkpDSnpCSFJ6a3dEWElmQlE1SlNSWU9CWElBS3pJeUx4RE1NaXN5TWk4UXpESXdNVUUzRGdJbkxnSTNOejRDRng0Q0J5TTJKaWNtQmdZSEJ3WVdGaGN5TmhNM1BnSVhIZ0lIQnc0Q0p5NENOd2NHRmhZWEZqWTJOemMySmlZbkpnWUdBUUVuQVFKYWhBZE1mRTVUYmpRRkJ3aFBnMWRNY1R3QmlBTTJQek5GS0FZSkF3NHhMejFObEFZSlY0dFlWWGM3QlFjSlZZdFlWWGc3bGdjREZUa3lOVXd0QndnRUZqb3lOVXd1QVZ6OGtHTURjUVFkQWsxMVFBSUNWb2hNVFZHTVZBSUNRM1JLT2s4QkFUWlZMRTRtVWpvQlR2MHlUVmFLVUFNQlU0ZFJUbFdLVUFJQ1U0ZWZVU3RTTkFJQk0xUXdUeXhTTmdFQk0xUURSZnVYU0FSb0FBRUFTLy9yQTc0R0Z3QXVBQlMzR1JnWUFTUU1BQUVBTHpNdk14STVMek13TVdVSExnTTNFejRERng0REJ3Y09CQWMzUGdNM056WTJKaVluSmc0Q0J3TUdGQllXQW1RTFlJWlBHZ3A2Q1M1UGRWQkFXallWQkFVT2E2alc5SDhVZk9TNWVBOEdBUUlJR3h3bk1oME9BM2dISEVhTG9BUkxmWjlaQXVsRmlIQkNBd0kzV200NUtvTHB3bzVRQXJBQ1hxWGFmU29TTlRNakFnSXZTa3djL1JVMVpGSTBBQUFFQURVQUFBZnJCY01BQXdBVkFDY0FNUUFsUUJFck1DNHFBZ01iRWlRSkNURXVCQ290REFBL016OHpNeTh6M0RMT01oRVNPVGt3TVVFSElUY1ROejRDRng0Q0J3Y09BaWN1QWpjSEJoWVdGeFkyTmpjM05pWW1KeVlHQmdFREl3RURJeE16QVJNSFpCcjlxaGt6Q1F0a29taGpoa0FJQ2d0aW9HaGppRUd6Q3dRV1FUcytWVEVJQ3dVWFFEcytWakwrK3YzQi9vUEh0ZnpDQVg3SEFpdU9qZ0hhWTJTZVdRSURYWnBmWTJTZVdBSURYSnJDWlRSYk93RUNPRjg0WkRSY093RUNPRjhCRVBwUUJIYjdpZ1d3KzRjRWVRQUFBZ0RyQTVZRXJRV3dBQXdBRkFBa1FCRUpCQUVEQmdvSEJ4TVVBZ0FEQXdZR0VRQXZNeEV6RVRNL016TVJNeElYT1RBeFFSTURCd01ESXhNekV4TXpBd0VISXdNakV5TTNBL2REd2pSR1IxbGVha2JRY1Y3K0lnK1BVRmxQamc0RGx3Rjgvb1VDQVpMK2J3SVovblFCalAzbkFobFIvamdCeUZFQUFBSUFmLy9yQkhFRVVRQWRBQ1lBRjBBS0loY1hCQjRPQnhzRUN3QS9Nejh6RWprdk16QXhaUWNHQmljdUF6YytBeGNlQXdjR0JnY2hBeFlXRnhZMkF5WUdCd01oRXlZbUE2d0RVNzlrYmFodk1Bb0xaYUxMY1crZllpb0dBUUlCL1JJN0wzbEdhTDkxVTVFK013SUxNeXg0eFdnMVBRSUNZSjdDWld2TnBsOERBMTZidjJJTUZ3eit0akkzQWdOSUExNENTVEwrNmdFZk5Ec0EvLzhBdHYvekJYUUZtd1FuQWRZQVNnS0dBQ2NCbEFEZkFBQUJCd0kwQXZ3QUFBQUhzUVlFQUQ4d01RRC8vd0NTLy9NR0VBVzNCQ2NDTHdDWEFwUUFKd0dVQVpnQUFBQUhBalFEbUFBQS8vOEFrUC96QmdZRnBBUW5BakVBZVFLUEFDY0JsQUYzQUFBQkJ3STBBNDRBQUFBSHNRSUVBRDh3TVFELy93QysvL01GdkFXa0JDY0NNd0NQQW84QUp3R1VBUmNBQUFFSEFqUURSQUFBQUFleEJnUUFQekF4QUFBQ0FFMy82QVEwQmV3QUtRQS9BQmxBRENvQUFCSTFId3R5Q1JJQWNnQXJNaXN5RVRrdk16QXhRUllXRnpZdUF5Y21CZ1lISno0Q0Z4NERCZ2NIRGdRbkxnTTNOejRERnlZT0FnY0hCaDRDRnhZK0FqYzNOaTRDQW1aVm1ETUZDQ0kvWTBZeVlWOHZBVEZtYWplQnBsc2pCUTBJRFR0ZGdxbHFicDlnSmdvRERGV0l0blZMZVZrNENRTUhDeTlkVEZ5RVZ6TU1DZ0V0UzFrRC9nSktSVGgvZkdjL0F3RVBHaENYRng4T0FRSnVzOW5lWUR0WnVxcUZUQU1DV1pTN1pCZG90WWxMbWdJMllYMUZGajZDYjBZREExYU9wRXBFTWt3MkhBQUFBUUFrL3lzRlJ3V3dBQWNBRHJVRUJ3SnlBZ1lBTHpNck1qQXhRUUVqRXlFREl3RUZSLzc3dHU3OVRlMjJBUVVGc1BsN0JlMzZFd2FGQUFQL3JmN3pCTk1Gc0FBREFBY0FFQUFmUUE0T0JnWUhCdzhDY2d3REF3b0NDd0F2TXpNekVUTXJNaEV6RVRNd01VVUhJVGNCQnlFM0FRY0JJemNCQVRjekJBMGIvQUViQk1VYi9Dc2JBbE1EL01abkdnTEsvaThZV1hhWGx3WW1sNWY4cXhyOHNwWUN6Z0xUaGdBQUFRQ3JBb3NEOFFNakFBTUFDTEVEQWdBdk16QXhRUWNoTndQeEcvelZHd01qbUpnQUF3QkIvLzhGRHdXd0FBUUFDUUFOQUJaQUNna0xDd29FQ0FnQkFuSUFLejh6THpNUk16QXhRUUV6QVNNVEV3Y2pBd2MzSVFjQjFnSjR3ZnoxZmdWa0EzR2dtaHdCS3hzQkFBU3crazhERC8zZTdRTVBtWm1aQUFRQVMvL29CNUVFVVFBWEFDOEFSd0JmQUIxQURsczJOaDRUQzNKT1EwTXJCZ2R5QUNzeU1oRXpLekl5RVRNd01WTTNQZ01YSGdRWEJ3NEVKeTRETndjR0hnSVhGajRETnpjMkxnTW5KZzRDQlFjT0F5Y3VCQ2MzUGdRWEhnTUhOell1QWljbURnTUhCd1llQXhjV1BnSlZBdzFZanI1eldJUmVRQ3NRQmhSUWNZcWNVbTJkWWlmQ0JBWUtMMTVNTzI1aFVEc1FCd01aTWtoYk5GSjlXVFVHY1FNTldJKy9jMWlEWGtBckR3WVVVSEtLbkZOdG5HSW13Z1FHQ2k5Y1REdHVZbEU3RVFjREdUSklXalJTZmxrMkFnZ2JhTW1nWFFNRFFtMklsVWtyVEp5TmJ6OENBbUNkdm5zYlBJWjJUQUlCTDFObmJ6TXFNR2xrVURJQ0EwZDVrVGNiYWNpaFhBTURRbTJKbFVrclRKeU5iajhDQW1HZHZub2JPNFoyVFFJQkwxSm5ielFwTUdsa1VUSUNBMGQ1a0FBQUFmOFYva1lEQndZWkFCOEFFTGNiRkFGeUN3UVBjZ0FyTWlzeU1ERlhEZ0luSmlZbk54WVdNeFkyTmpjVFBnSVhNaFlYQnlZbUl5SUdCZ2Z5REZlV2FpQThIaUVUSnhRM1RTc0l4UTFibm5BbFNDUWhGaXNYUUZrMUNXdG1sMUlDQVF3SmtRWUpBakZUTXdVWmFhUmVBUTRJandZSE4yQTdBQUFDQURNQkZnUXRBL1VBR1FBekFCdEFDeGNFZ0FvUlFERWVnQ1FyQUM4ekd0MHlHdDR5R3MweU1ERlROelkyTXpZV0Z4WVdNekkyTndjR0JpY2lKaWNtSmlNaUJnTTNOall6TmhZWEZoWXpNalkzQndZR0p5SW1KeVltSXdZR2ZCQXpnVWxBWmpVeFhqcE1melVVTVhwR08yQXhOV1JBVFlSL0VET0JTRUJtTmpGZU9reC9OQlF3ZTBZN1h6STFaRDlOaEFMS3ZESThBU3dmSEN0Tk1yd3hQUUVwSFI4clRQNHN2REk3QVN3ZkhDcE5NcjB4UFFFcEhSOHNBVXNBQXdCd0FKNEQvd1RUQUFNQUJ3QUxBQjlBRFFJQkFRb0tDd0FEQXdjSEJnc0FMODR5RVRNUk14RXpFVE1STXpBeFFRRW5BUk1ISVRjQkJ5RTNBOXI5RVZvQzdvQWQvTlljQXVNZC9OWWNCSkw4REVFRDlQNzhvYUgrWWFHaEFBUC8wd0FCQThrRVN3QUVBQWtBRFFBaVFCQURCd1lBQkFnR0JRa0pBUUlDRFEwTUFDOHpmQkRPTHpJeUdDOHpGemt3TVZNQkJ3RTNKUVVITndFREJ5RTMxUUo0SWYwbUZBTSsvVDJMRmdOZHNCdjgxUnNDdy83K3FnRlpZcjcrRFc0QldQeE9tSmdBQXdBWUFBQUQ2UVJXQUFRQUNRQU5BQ0pBRUFNSEJnQUVDQVlCQWdJRkNRa05EUXdBTHpOOEVNNHZNaklZTHpNWE9UQXhRUUUzQVFjRkpUY0hBUVVISVRjRFdQMTBJUUw4RlB5ZUF0bVpGdnlBQXc4Yi9OVWJBckVCQUtYK3FHUEUvUlZ2L3FpS21KZ0FBQUlBUWdBQUE5VUZzQUFIQUE4QUhVQU9CUWdJRGdjU2NnTUtDZ3NCQW5JQUt6SXlFVE1yTWpJUk16QXhVd0V6QndFVEJ5TTNBUU0zTXdFQkkwSUIrNEFyL21iU0NYRXpBWnZTQ25FQkR2NEVmd0xoQXMrTy9hdjlyWHFOQWxRQ1ZYcjlIZjB6Ly84QWR3Q2tBZkFFK0FRbkFCSUFRd0N5QUFjQUVnRGJCQ1FBQWdCeEFua0Nkd1E2QUFNQUJ3QVF0Z1lDQWdjREJuSUFLekl5RVRNd01VRURJeE1oQXlNVEFVaE9pVTRCdUUrSlR3UTYvajhCd2Y0L0FjRUFBZi9rLzE0QkR3RHZBQWtBQ3JJRWdBa0FMeHJOTURGbEJ3WUdCeWMyTmpjM0FROE1EMkZNWXlrN0RRN3ZUbUNuUEVzNGVFVlJBUC8vQUhVQUFBVnNCaGtFSmdCS0FBQUFCd0JLQWhzQUFBQURBRmtBQUFRRkJoa0FFQUFVQUJnQUcwQVBHQVlYQ25JVEZBWnlEUVlCY2dFS0FEOHJNaXN5S3o4d01XRWpFejRDRnhZV0Z3Y21KaU1tQmdjWEJ5RTNJUU1qRXdFUnRja1Fjcmw2UjRsRExEVnhPbStIRWNvYS9jOGFBNUs4dGJ3RWwzZXVYUUlDSlJhZUdCNENiMjFlam83N3hnUTZBQUFEQUhVQUFBUm9CaG9BRWdBV0FCb0FHMEFQR1JvR2NoUUFjZzRHQVhJVEFRcHlBQ3N5S3pJckt6SXdNV0VqRXo0Q0Z4NENGd2NtSmlNaUJnWUhFd0V6QVFNSElUY0JMYlhNRDJtdGRVR0ZnejlnUjVKSVFtSTlDcllCQkxUKy9aMFovY1lhQktweHBsa0RBUlVkRG9NT0dqSmRQL3RUQmRqNktBUTZqbzRBQUFVQWRRQUFCbGdHR2dBUkFCVUFKZ0FxQUM0QUpVQVVJeHdCY2k0cUZCVUdjZzBHQVhJdEZ4Y0JDbklBS3pJUk15c3lLekl5TWlzeU1ERmhJeE0rQWhjV0ZoY0hKaVlqSWdZR0J4Y0hJVGNCSXhNK0FoY1dGaGNISmlZakpnWUhGd2NoTnlFREl4TUJMYlhNRG1TbmNpRkJJQllZTUJsQVhUa0syQm45dkJvQzFyWElFSEs1ZWtpSVJDMDFjVHR1aGhISkdmM1BHUU9TdkxXOEJLdHRwbHdCQVFvR21RVUhOVjA5Y282Tys4WUVsbml0WGdJQkpoZWRHQjBDYm0xZWpvNzd4Z1E2QUFVQWRRQUFCcUFHR2dBUkFCVUFLQUFzQURBQUtVQVhLd0J5SkJ3QmNpNFVGQzBWQm5JTkJnRnlLUmNCQ25JQUt6SXlLeklyTWpJUk15c3lLekF4WVNNVFBnSVhGaFlYQnlZbUl5SUdCZ2NYQnlFM0FTTVRQZ0lYSGdJWEJ5WW1JeVlHQmdjVEFUTUJBd2NoTndFdHRNc09aS2R5SVVFZ0ZoZ3hHVUJkT1FuWkdmMjdHZ0xXdGN3UWFLeDBRb1dEUUdCSGtraENZajRLdGdFRXRmNzhuQm45eGhrRXEyMm1YQUVCQ2dlWUJRWTBYVDF5am83N3hnU3NjYU5ZQVFFVkhRNkREUm9CTWwwLysxTUYyUG9vQkRxT2pnQUFCQUIxLyswRXlBWWFBQU1BRndBYkFDMEFKVUFVSWlrTGNoTUtjZ2tjSEEwTkJBRnlHQUlEQm5JQUt6SXlLeklSTXhFekt5c3lNREZCQnlFM0FSWVdGd2NuTnlZbUl5SUdCZ2NESXhNK0FnRUhJVGNUTXdNR0ZoWVhNalkzQndZR0p5NENOd0hMR2Y3REdnSXZaTVJhSUxRV0oxMHNRRm8xQ3N5MXpBNWRud0o2R3YzSEd1MjF0d1FMSmljVkt4UUxJRUVoVTE0akJ3UTZqbzRCM2dJN0s5QUJlaFFTT1dBNysxTUVyR21tWC80Z2pvNEJCL3ZKSWpnaEFRWUVtUWtKQVFGU2drb0FCQUFvLytvR2N3WVRBQnNBSHdBeEFHY0FNVUFiT3pKQVpHQmJDM0lCUlVsQUIzSW1MUXR5SGhBZkJuSVVDZ0Z5QUNzeUt6SXlLeklyTXN3eUs4d3pFams1TURGQkJ5NENOejRERng0REJ5TTJKaVluSmdZSEJoNENBUWNoTnpjekF3WVdGaGNXTmpjSEJnWW5MZ0kzQlRZbUppY3VBemMrQXhjZUFnY25OaVltSnlZR0JnY0dIZ0lYSGdJSERnTW5MZ0kzRnhRV0ZoY1dOallEdG1FT015TUlDRVZyZ2tSWmdWSWpCYllFRmtkRlRYWU1DUWdTREFLNEdmM1JHY2Ewa2dRR0pDa1ZLeFFNSUVNaVYxb2NCLzQvQ2oxa01EdDZaRG9FQlU1N2swbGxwMkFEdEFJd1Z6YzJaa29JQnlWQlNpQlNuV0lHQlZHQW1VMXBzMm9FdFRWaFFEVnZVd0w4QVZHbHBsTkpiMHdsQVFJNlo0eFRPbWxEQVFGV1RqdDFkbmNCQTQ2T1dQeVVJVVV4QVFFSEJKa0pDUUVDWVpCSkJEMUdKUXdQTEVWbVNsQjdVaWdCQWxDV2F3RTRVeTBCQVNOS09TczNJUlVJRjBaN1kxWjlVU2NDQWxPZGNRRkJXUzRCQVI1SEFBQVYvNnYrY2doR0JhNEFCUUFMQUJFQUZ3QWJBQjhBSXdBbkFDc0FMd0F6QURjQU93QS9BRU1BUndCWEFITUFqQUNhQUtnQUFFRWpFeUVISXlFak55RURJd0VoRXpNSE13VWhOek0zTXdFaE55RUZJVGNoQVNFM0lRRUhJemNUQnlNM0FTRTNJUUVISXpjQklUY2hCU0UzSVFFSEl6Y1RCeU0zQVFjak53VVRNd01HQmlNaUppY1hCaFkzTWpZbEl6Y1hOalkzTmlZbkp3TWpFeGNlQWdjT0FnY0dCZ2NHSWdjbk56TTJOamMySmljbk56Y3lGaGNXQmhjZUFnY0dCZ0VIQmdZbkppWTNOelkyRnhZV0J6YzJKaWNtQmdjSEJoWVhGallCS1c4eUFTMFV2Z1ord1JRQkxqSnQrVEgrMHpkdkpMOEdHZjdTRk1Ba2JmNG4vdkVVQVEvODVQN3pGQUVOQVJqKzh4VUJEUVBoTEcwczhDMXRMZnhNL3ZJVUFRNzhueTF2TFFUby92SVZBUTRCYi83eEZRRVAraTh0Ynkyd0xHOHNCeGtzYlN6Kzl6cGhPd2xwVUZGbkFWa0NKakFzT2Yzd21RWnRMRlVJQ0VFaVpGRmVZS3N0V1RrQ0F6SkdJQVFDQXdRUUxydzFnQ3RKQ0FZdUpIb0hqQVVUQkFJQ0JCZzBJd0VDZ2Y3R0NRbUhaR0J5QkFrS2htTmZjMm9OQlRKQVExQUtEZ1V5UVVSUEJKRUJIWFIwL3VQNTRRRTd5bkZ4eXY3RmNYRnhCbGQwKzNUNStRTHkrdnI2WG5FQ1AvbjVCQmgwZEhUODd2ejhBWGo2K3Y2SS9QejBBWHYraFU1Y1VsVUNLek1CT25CR0FRSWlNaXdVQVFIK0x3SWxBUUVaUGpjNEp4RVlBdzhEQlBVRFNBTW9MeWtqQXdGR0FRSUZBdzhER0JJaU1sZEpBVWR3WVg0Q0FueGZjR0o4QWdKOHpuSTZWd0lCV0QxeU8xY0NBVmdBQUFVQVhQM1ZCOWNJY3dBREFCNEFJZ0FtQUNvQUFGTUpBZ016TkRZM05qWTFOQ1lqSWdZSE16WTJNeklXRlJRR0J3NENFelVqRlJNMU14VUROVE1WWEFPOEE3LzhRWGZLR1NsRVlxZVZmN0VDeXdJK0p6ZzVOU2d2UFIzSnluOEVCZ1FDZ3dQUC9ESDhNUUxlTXo0YkpZRlNnSmQ5alRjd1FEUTBUUm9oT2s3K3U2cXEvVWdFQkFxYUJBUUFBZi9xQUFBQ2N3TWpBQndBRUxVREhCd0xFd0lBTDh3eU14RXpNREZsQnlFM0FUNENOelltSnlJR0J3YytBaGNlQWdjT0FnY0hBa1lYL2JzVUFUd2NRVElHQmpRdlFsQU9td2xYaUZKRmQwWUVCRWhsTDhPQWdIUUJDUmc3UlNndk53RkxQUUZUZGo4QkFUTmxURUZzV1NXU0FBQUJBR3dBQUFIOEF4VUFCZ0FqUUJVRUJRVURBeThBZndBQ0R3QmZBSzhBL3dBRUFBRUFMODFkY1RJUk14RXpNREZCQXlNVEJ6Y2xBZnlEbVdqY0dBRmpBeFg4NndKVk9JaHdBQUlBSFAveEFuWURKQUFSQUNNQURMTVhEaUFGQUM4enhESXdNVUVIRGdJbkxnSTNOejRDRng0Q0J6YzJKaVluSmdZR0J3Y0dGaFlYRmpZMkFtOFBDazJKWm1GeExBY1BDMHlLWm1CeExMUVNCQWN0TkRkRElnWVRCQWd1TlRoQ0lRSFFpMXljWEFNRFg1ZFlpMTJiWEFNRFg1andxaWhZUHdFQ08xc3VxQ2xhUHdJQ1BGMEFBUUJwLy9nRG1BU2dBRElBRjBBS0ZCNGVKZ0V4Q2d3bWZnQS9Nejh6RWprdk16QXhkek1XUGdJM056WXVBaWNtQmdZSEJoWVdGeFkrQWpjWERnSW5MZ0kzUGdJWEhnTUhCdzRESXlPMkQyS3NobGtRSGdVTEowczVTbkpHQ0FZaFUwTXlXMHczRFNjVGJwZFNiNU5GQ1FwOHhudGxqRkljQ2dnVGNMWDNteGlTQVM1aGxHWExNR1JWTmdFQ1NIaEdQRzFHQVFJZk8wOHZaRk4yUFFFQ2FhNW9lYjVyQXdKUGhLZGJScGJ3cVZrQUFBUUFKLy91QTZnRW9BQVNBQ0lBTkFCRUFCMUFEU2dYRjBFT0RnVTVNWDRmQlFzQVB6TS9NeEk1THpNekVUTXdNVUVPQXljdUFqYytBeGNlQXdjMkppWW5KZ1lHQndZV0ZoY1dOallURGdNbkxnTTNQZ0lYSGdJSE5pWW1KeVlHQmdjR0ZoWVhNalkyQTJBRlVJR2NUMkt1YUFZRlU0S2FURVdIYlQ2M0J6UmVOejl6VGdjSE0xNDVQbk5PL1FWTmVJOUhRSDVsT1FNRmVydG1YcUZmdkFZdVVqRTVZMElHQml0Uk16aGxRd0ZGV0lKVktBSUJTSTl0VlgxU0p3SUJKMDExUlR4VUt3RUJMMXREUGxFcEFRRXRXZ0pYVDNWT0pRRUNKVWx0U1crVVNnSUNTSXB1TlV3b0FRRXRVenMyVENnQkxGVUFBQUVBY0FBQUJBWUVqUUFHQUE2MUJRRUdmUU1LQUQ4L016TXdNVUVIQVNNQklUY0VCaFQ5U01vQ3QvMWdHd1NOYy92bUEvU1pBQUVBUy8vc0E0RUVsUUF4QUJWQUNSWWZIdzRuQ3dNQWZnQS9Najh6T1M4ek1ERkJNd2NqSmc0Q0J3Y0dIZ0lYRmpZMk56WW1KaWNtQmdZSEp6NENGeDRDQnc0Q0p5NEROemMrQXdNd0dSRU5aYStKV3hBWUJnc25TenhKY2tZSUJpTlVSRUYyVlJJbkZYT2FVRzJTUXdnS2VzVjZYNDVhSkFvTEZYSzIrQVNWblFFemFKcG1xVEJvV2prQ0FrTnpSVDlxUWdJQk5WOC9aazkxUHdFQ2FheG5lYnBuQXdOS2Y2RmFWSmJ3cWxzQUFRQksvK3NEMlFTTkFDTUFGMEFLSVFrSkFoa1JDd1VDZlFBL016OHpFamt2TXpBeFFTY1RJUWNoQXpZMkZ6SVdGZ2NPQWljdUFpY3pGaFlYRmpZMk56WW1KaWNtQmdFeGxxY0NseDMrQjE4d2FUZHZtMHNJQ1h6SWUyU2pZd1dzQjI1WFMzTkdCd2N1WDBNOVpBSWZKd0pIb3Y3ZUdCa0JaS3hzZkxWaEF3SlBrMmRaVndFQlFYSkpRbVE1QVFFa0FBQUMvL2NBQUFPb0JJMEFCd0FMQUJWQUNRQUJBUW9FQzMwS0VnQS9Qek1TT1M4ek1ERkJCeUUzQVRNREFRRURJeE1EcUJ2OGFoTUNzWnJVL2xZQ3FNcTF5d0dlbUh3REMvN1gvam9DNy90ekJJMEFBZ0FYLys0RG9nU2dBQjBBUFFBZFFBMGZBQUFkSGg0U05Db0xDUkorQUQ4elB6TVNPUzh6TXhFek1ERkJGekkyTmpjMkppWW5KZ1lHQndjK0FoY2VBd2NPQXlNbkJ6Y1hIZ01IRGdNbkxnTTNGd1lXRmhjV05qWTNOaTRDSndGaGJqNTZWUWtITFZVM09HZEpETFlMZ3I5bFNvUmtOZ1VGVVg2UlJhVUhFNHRIaDJzN0JnVlJnWjFTVElob09nT3pBelpjT1Q5MFR3Z0hIejVTTFFLY0FTVlVSanRNSlFFQkpFczZBVzJQUmdJQ0tGQjRVVkZ4UmlFQkxHa0JBaDFDYjFKWmhWY3FBZ0VxVTN0U0FUeFBKZ0VDS2xoRU5FY3FGQUVBQUFILy9RQUFBNmdFb0FBZUFCSzNDeFIrQXg0ZUFoSUFQek1STXo4ek1ERmxCeUUzQVQ0Q056WW1KeVlHQmdjSFBnSVhIZ0lIRGdNSEFRTmlHL3kyR1FIY0xteFRDUXRpVUVwMVRBeTFESWpOZEdDaVhBZ0ZQVnBtTHY2Tm1KaUxBWlluWEc5QVUxOENBakZrU1FGNXFGVUNBa3lRYUVGNGJGMG4vdWtBQUFFQXZRQUFBdWdFa0FBR0FBcXpCbjBDQ2dBL1B6QXhRUU1qRXdVM0pRTG94YmFqL3EwZUFlOEVrUHR3QTZ0aHBhRUFBZ0JHLyswRG93U2dBQlVBS3dBT3RSd1JmaWNHQ3dBL016OHpNREZCQnc0REp5NEROemMrQXhjZUF3TTNOaTRDSnlZT0FnY0hCaDRDRnhZK0FnT1lGdzVGZEtseWJJeE1GUXNZRGtWMHFYRnRqRXdVM0NBSEFoOUxRa2RsUWlZSklBWUJJRXBDU0dWQ0pnS2ZyV1c3azFJREFscVR0RjZ1WmJtUlVnTUNXWkcwL3RybU0zRmpRQUlET1dKM1BPVXpjMlZEQWdNN1pIa0FBQVAvM1FBQUJBNEVqUUFEQUFrQURRQWNRQXdFREF3TkRRaDlCd01EQmdJQUx6TXpFVE0vTXk4ekVUTXdNV1VISVRjQkFTTTNBVE1qQnlFM0EzY2IvTDRiQThMOFkzMFlBNTk2Unh2ODZSdVltSmdEZFB2MGhRUUltSmdBQXdCMUFBQUVaUVNPQUFRQUNRQU5BQnRBRUFnSEF3UUdBQW9OQ0FFTUNuSUZBWDBBUHpNckVSYzVNREZCQVRNQkl3TVRCeU1CQVFNakV3RzhBZFBXL2RWeG1ma3BhdjdmQWQ1ZnRGOEI4QUtkL1FBREFmMVRWQU1BL1pMOTRRSWZBQUFCLzdjQUFBUnVCSTBBQ3dBVlFBb0hDZ1FCQkFrRkF3QjlBRDh5THpNWE9UQXhRUk1CTXdFQkl3TUJJd0VCQVYvSkFXSGwvaFFCSXNyVS9wVGpBZmorNkFTTi9rNEJzdjIwL2I4QnV2NUdBbFVDT0FBRUFKUUFBQVlwQkkwQUJRQUtBQThBRlFBZ1FBNFNCQkFCRGdRTUFRZ0VCZ0Y5QkFBdlB6TVJNeEV6RVRNUk14RXpNREZCQVRNREFTTVRFd01qQXdFQk13RWpBeE1USXdNbkFZVUJob05iL21HQkx5c0tlRmNEaXdGUnVmNFZnUkZUREhaZUFnRWdBMjMvQVB4ekJJMzhqLzdrQkkzOHBnTmErM01FamZ4Ky92VURvTzBBQUFJQWVRQUFCSm9FalFBRUFBa0FEN1VIQXdVQmZRTUFMejh6RVRNd01VRUJNd0VqQXhNVEl3TUNDQUhKeWYxNmtrNmZHNFB5QVN3RFlmdHpCSTM4amY3bUJJMEFBUUJDLytzRVR3U05BQlVBRDdVTUVRWUFmUVlBTHo4Uk16SXdNVUV6QXc0Q0p5NENOeE16QXdZV0ZoY1dOalkzQTVtMmd4S1AySDk0dVdFT2c3T0VDUzlvVFZLRVZRMEVqZnowZ2JaZkF3SmhzMzBERFB6elRXNDhBZ0k0Y1ZJQUFnQnVBQUFFUWdTTkFBTUFCd0FSdGdZSEJ3RUFmUUVBTHo4Uk9TOHpNREZCQXlNVElRY2hOd0sreXJUTEFqY2MvRWdjQkkzN2N3U05tWmtBQVFBUy8rNEQ2d1NlQURrQUdFQUtDaVlQTmpFckdCUVBmZ0EvekRNdnpETVNPVGt3TVVFMkxnSW5MZ00zUGdNWEhnSUhKelltSmljaUJnWUhCaDRDRng0REJ3NERKeTRETnhjR0hnSVhNalkyQXRjSUpVUlNKa0dEYXowRkJWYUdua3hydEdvRXRRVTNaVUk2ZGxZSkJ5OU9WeUpDZldNM0JRWllpYUJOVTVsNFF3TzFCQ1JGWERRNmVsb0JNVEpDTEJ3TEV6ZFJjMDlYZmxBa0FRSlRuWElCUlZvc0FTRk5RVEJBS2hzTEV6cFRkVTVaZlUwakFnRXZXNGhiQVRsUk14a0JIa3NBQWdBZEFBQUQvUVNOQUJrQUhnQVlRQW9iRFEwTURCb1lGd0I5QUQ4eUx6TTVMek1TT1RBeFV3VWVBd2NPQWdjSElUY0ZNalkyTnpZbUppY25BeU1oQXpjVEZlZ0JrVkdQYkRnR0IxdU9WVG4rZFJrQkYwTitXQW9JTW1JLzg3QzJBc1RJczljRWpRRUNLbE9CV1dTQlZCOGFtQUVzWFVwRVdDb0NBZndNQWdjQi9nUU1BQUFEQUViL05nUkNCS0FBQXdBWkFDOEFIRUFNQUFNREt5c0tDZ0lnRlg0Q0FDOC9NeEk1THpNU09SRXpNREZsQlFjbEFRY09BeWN1QXpjM1BnTVhIZ01ITnpZdUFpY21EZ0lIQndZZUFoY1dQZ0lDcGdFWmcvN3ZBZ3NIRDF1VXlIMTNwbVVrQ3dnT1c1VEpmSGlvWXlUSUNBY0xNbWRVV1lkZ09nb0pDQXN5WjFWYWlWODRsUGhtK0FJNVFYVFBubGdEQWwrZXgydEVjOUNmV1FNQ1lKL0pwMFJHakhWSkF3TkVkcFZPUlVXT2VVd0RBMFY1bUFBQUFRQWVBQUFFSmdTTkFCZ0FFN2NDQVFFTkRBOTlEUUF2UHpNU09TOHpNREZCSlRjRk1qWTJOelltSmljbEF5TVRCUjRDQnc0REFqeitzUnNCT0VhQldRb0lNMkkrL3VTd3Rjc0J1V3l5WmdnSFZZZW1BYlVCbVFFclhrMURXeThDQWZ3TUJJMEJBMUdkZFdLTVdTb0FBQUlBVFAvdEJFWUVvQUFWQUNzQUVMWW5CaHdSZmdZTEFEOC9NeEV6TURGQkJ3NERKeTRETnpjK0F4Y2VBd2MzTmk0Q0p5WU9BZ2NIQmg0Q0Z4WStBZ1E2Qnc5Wms4bDlkNmRrSkFzSURsdVV5SHgzcDJRa3hnZ0hDekpuVkZtSFlEb0tDUWdMTTJkVVc0aGZPQUp1UTNUUm9Ga0RBbCtleDJ0RWM4K2dXUU1DWHAzSHJVUkdqSFZKQXdORWRwVk9SVVdPZVV3REEwVjVtQUFCQUI0QUFBU2JCSTBBQ1FBUnRnTUlCUUVIQUgwQVB6SXZNems1TURGQkF5TUJBeU1UTXdFVEJKdkxydjVMbXJYTHJRRzJtZ1NOKzNNRGRQeU1CSTM4akFOMEFBTUFIZ0FBQmJFRWpRQUdBQXNBRUFBV1FBa0NEZ29GREFjRUFIMEFQekl5TWk4ek16a3dNVUV6RXdFekFTTUJNd01ESXdFekF5TVRBU3loM1FJWXMvMVRnLzZrbVd4RXRBVDRtOHExUndTTi9ITURqZnR6QkkzOCsvNTRCSTM3Y3dHWUFBQUNBQjRBQUFNakJJMEFBd0FIQUErMUJnTUNCSDBDQUM4L0VUTXpNREZsQnlFM0V3TWpFd01qRy8yZUc5ekt0Y3VZbUpnRDlmdHpCSTBBQXdBZUFBQUVnQVNOQUFNQUNRQU5BQmRBREFZSEN3VU1DQVlLQVFRQWZRQS9NaTh6Rnprd01VRURJeE1oQVFFbk53RURBVGNCQVozS3Rjc0RsLzJvL3JVQzh3SEVsLzZzaHdHWkJJMzdjd1NOL2MvKzZNdm1BWmo3Y3dJMWZQMVBBQUFCLy9iLzdRT1hCSTBBRXdBTnRCQU1Cd0Y5QUQ4dnpETXdNVUVUTXdNT0FpY3VBamNYQmhZV0Z4WTJOZ0pWakxhTUQzVzJiMnVuV2dXMUJDbFhRRDlpUGdGU0F6djh4bStoVmdJRFVKbHhBVUJYTFFFQ05WMEFBUUFyQUFBQnFnU05BQU1BQ2JJQWZRRUFMejh3TVVFREl4TUJxc3ExeWdTTiszTUVqUUFEQUI0QUFBU2JCSTBBQXdBSEFBc0FHRUFLQWdNREJBa0ZDQVI5QlFBdlB6TVJNeEk1THpNd01VRUhJVGNUQXlNVElRTWpFd090Ry8xeUczN0t0Y3NEc3N1MHlnS0xtWmtDQXZ0ekJJMzdjd1NOQUFBQkFFei83d1E4QktBQUtnQVdRQWtwS2lvRkdSQitKQVVBTHpNL014STVMek13TVVFRERnSW5MZ00zTno0REZ4NENGeWN1QWljbURnSUhCd1llQWhjV05qYzNJVGNFRlVVMW02eFFkNnhyS2cwS0VGbVJ5SDUxc1drS3NBYzdaa2RhaDE0NUN3d0lEamxzVkVtS095Mys3eGtDVVA1R1EwZ2NBZ0ZibThkdVZIWE1tVlVEQTFXamR3RkdZREVEQWtCeWsxQlhSNDUxU0FJQkh5enVrQUFBQXdBZUFBQUQ0Z1NOQUFNQUJ3QUxBQnBBQ3djR0JnRUtDd3NCQUgwQkFDOC9FVGt2TXhFNUx6TXdNVUVESXhNQkJ5RTNBUWNoTndHZHlyWExBbFFiL2R3YkFza2IvWThiQkkzN2N3U04vZitZbUFJQm1aa0FBQU1BRXY4VEErc0Zjd0FEQUFjQVFRQXBRQk1IUGo0a0NCY3pCZ1l6Q3dJZ0lCY0FBQmQrQUQ4ekx4RXpFVE0vTXk4UkVqazVNeEV6TURGQkF5TVRBd01qRXlVMkxnSW5MZ00zUGdNWEhnSUhKelltSmljbUJnWUhCaDRDRng0REJ3NERKeTRETnhjR0hnSVhNalkyQXVrMWtqWlZOWkkyQVdVSUpVUlNKa0dEYXowRkJWYUduVTFydEdvRXRRVTNaVUk2ZGxVS0J5OU9WeUpDZldNM0JRWllpYUJOVTVsNFF3TzFCQ1JGWERVNWVsc0ZjLzdQQVRINjBmN1BBVEh0TWtJc0hBc1ROMUIwVDFkK1R5VUJBbE9kY2dGRldpd0JBU0pOUVM5Qktoc0xFenBUZFU1WmZVMGpBUUl2VzRoYkFUbFJNeGtCSGtzQUF3QUdBQUFEMVFTZ0FBTUFCd0FtQUIxQURRUUZCUUVpR1g0T0FnSU5BUW9BUHpNekVUTS9NeEk1THpNd01XRWhOeUVEQnlFM0pRTU9BZ2NuUGdNM0V6NERGeDRDQnljMkppWW5KZzRDQTJuOG5Sc0RZM29WL1NrVkFWMGtDUjQ5TnFZb014NFFCU0lLUG11V1luU1dSQWEyQlJoSFJEdFVOeCtZQWRaNWVYdis2a1NOZ0RCSEQwbGVYeVFCRmxtZ2VrVURBbWF0YndFNmFrUUNBakpVWmdBQUJRQVpBQUFEM3dTT0FBTUFCd0FNQUJFQUZRQWJRQXNHQndNQ0FoRVVDZ2tSZlFBL016OFNPWHd2TXhqT01qQXhRUWNoTndVSElUY2xBVE1CSXdNVEJ5TURBUU1qRXdNWkZ2MDRGUUtuRnYwNEZRRlhBWkxJL2hkeVhMVWhhdDRCbkYrMFh3SWFlbnJFZUhpYUFwMzlBQU1CL1ZSVkF3RDlrdjNoQWg4QUFnQWVBQUFEelFTTkFBTUFCd0FPdFFjR0EzMENDZ0EvUHpNek1ERkJBeU1USVFjaE53R2R5clhMQXVRYi9hUWJCSTM3Y3dTTm1aa0FBQVAvc0FBQUE4OEVqUUFEQUFnQURRQWJRQXdJREgwQUJRVUpBZ01EQ1FvQVB6TVJNeEV6RVRNL016QXhZVGNoQndFVE13TWpBUUVUSXdFRE54djlCeHNDTFozSDhvLytHd0hSZllIOWVwaVlBMS84b1FTTiszTURkQUVaKzNNQUFBTUFUUC90QkVZRW9BQURBQmtBTHdBWFFBb0RBZ0lLSUJWK0t3b0xBRDh6UHpNU09TOHpNREZCQnlFM0JRY09BeWN1QXpjM1BnTVhIZ01ITnpZdUFpY21EZ0lIQndZZUFoY1dQZ0lEUnh2K0xSc0N4Z2NQV1pQSmZYZW5aQ1FMQ0E1YmxNaDhkNmRrSk1ZSUJ3c3laMVJaaDJBNkNna0lDek5uVkZ1Slh6Z0NrcGlZSlVKMDBhQlpBd0pmbnNkclJIUFFuMWtDQTE2ZHg2MUZSWXgxU1FNRFJIYVZUa1ZGam5sTUF3TkZlWmdBQXYrd0FBQUR6d1NOQUFRQUNRQU90UUVKQ2dRSWZRQS9Nejh6TURGQkV6TURJd0VCRXlNQkFtdWR4L0tQL2hzQjBYMkIvWG9EWC95aEJJMzdjd04wQVJuN2N3QUQvOU1BQUFPVkJJMEFBd0FIQUFzQUYwQUtCd1lHQWdvTGZRTUNDZ0EvTXo4ekVqa3ZNekF4WlFjaE53RUhJVGNCQnlFM0F1VWIvUWtiQXhNYy9Zb2JBd3NiL1FrYm1KaVlBaFNabVFIaG1KZ0FBd0FlQUFBRWhnU05BQU1BQndBTEFCTzNDZ1VMQndJQUEzMEFQek16TXpNdk16QXhRUWNoTnpNREl4TWhBeU1UQS9VYi9ZRWJKOHExeXdPZHlyYkxCSTJZbVB0ekJJMzdjd1NOQUFQLzFnQUJBOThFalFBREFBY0FFQUFsUUJJTkNBa0RDZ1lRRUE0SGZRb0NEQU1EQWdvQVB6TVJNeEV6UHpNekVUTVNGemt3TVdVSElUY0JCeUUzQVFjQkl6Y0JBemN6QTJBYi9OZ2JBNmNiL09jYkFaY0MvZXh4R2dHVCt4aGltWmlZQS9TWW1QM0pHdjNGbHdHNUFiYUdBQU1BVWdBQUJPVUVqUUFWQUNjQUt3QVZRQWtXQUFBcmZSNE1LZ29BUDgweVB6TXZNekF4UVJjZUF3Y09BeU1uTGdNM1BnTVhKZ1lHQndZV0ZoY1hGalkyTnpZbUppY1RBeU1UQXJWV1pyR0NRUWtLYTZqUWIxWm5zWUJBQ1FwcXFNOXJiTFIxRGdzL2lXSlpiYlIxRFF4QWltSlV5N2JMQkJnQkFqNTBxRzUzdEhrOUFnSStkcWx0ZDdSNFBKc0JRbzl6Wm9aRUF3RUJSSkJ6WjRSQ0F3RVErM01FalFBQ0FIMEFBQVQxQkkwQUdRQWRBQjlBRGhVVUZBWUhCdzBjRGdBZEhRMTlBRDh6RVRNL0Vqa1JNek1STXpBeFFUTURCZ0lFSnlNdUF6Y1RNd01HSGdJWEZ4WTJOamNEQXlNVEJFQzFOUm1mL3Z1eUZYeXhheWNQTkxRekNndzNiMWdVZ3Jac0U5Zkx0TW9FamY3SnF2Ny9rQUlFV3ByTGRRRTQvc2ROa1hWSUJBRURiYjU1QVRqN2N3U05BQU1BRGdBQUJHb0VvQUFzQURBQU5BQW5RQk10TkFvdU13b29FaElwRVJFeU1qRUtCaDErQUQ4elB6TVJNeEV6TXhFelB6TS9NekF4UVRjMkxnSW5KZzRDQndjR0JoWVdGd2N1QXpjM1BnTVhIZ01IQnc0REJ6YytBZ0UzSVFjaE55RUhBNlVGQnhBNGFGQlZobUk4Q2dVSEFTQlJTZ3hza0U4WkN3UU5YNWZHZG5Hb2F5d0tCQTVSaGJoMkRYR0pSdjZuR3dHMkcvd2FHd0cxR3dKdkprZUJaajRDQWpsb2lrNG1RWXlDWWhkNkUyNmd2bUlsY3NPUlVBTUNWSkc5YWlWeXg1eGtFSG9kak1EOS9KaVltSmdBQUFNQWJmL3JCT1lFalFBREFBY0FJd0FjUUEwWEZnc2dEUTBEQkFvRkFnTjlBRDh6TXo4U09TOHpQek13TVVFSElUY1RFek1ERXpjK0FoY2VBZ2NPQXdjM1BnTTNOaVltSnlZR0JnUDNHL3lSRzQ3S3Rzc2lDanQ3ZlVCN3JGVUtDRldKcm1FUVBHbFFNd2dJSTF0TVFYNThCSTJZbVB0ekJJMzdjd0ljbWhjZ0VBSUNYckI4YTVSYktRR1lBUm80V2tCS2F6d0JBaE1oQUFBQ0FFai83UVF6QktBQUF3QXJBQmRBQ2dBQkFRa2RGSDRvQ1FzQVB6TS9NeEk1THpNd01VRUhJVGNCTnc0Q0p5NEROemMrQXhjZUFoY2pMZ0luSmc0Q0J3Y0dIZ0lYRmpZMkFzOGIvZ1FiQWw2MEdaSFhnSFNpWWlRTURnOWJrc1Y1ZTdOakJyUURNbVZRVjRaZU9Rc09DUWt2WWxOV2dWWUNsSm1aL3VRQmdMSmFBd0pjbThKb1puSEptRlVEQTJHeWVVMXRPd01DUDNDUlRtaERpWFJKQXdNMmJnQUFBLy9ELy84R3BRU05BQkVBS1FBdEFDQkFEeWdwS1J3c0hRRXRmUjhjQ2dzSUNnQS9Nejh6UHpNek14STVMek13TVVFekF3NEVKeU0zTXo0RU55VWVBZ2NPQXljaEV6TURCVFkyTnpZbUppY2xOd01ISVRjQmdMaHlEeVk4WUpCb09oWW1RbG81SWhVSUJCdHFyR0VJQjFLQ28xaitNOHEyc0FFQmFxWU9DQzljUFA2Mkd5QWIvZE1iQkkzOTUxR3dwSU5OQWFRQlFXaDdlVEZrQTFDYmNsK05YaTRCQkkzOEN3RUJjMjlBVlMwQ0Faa0J0WmlZQUFNQUh2Ly9Cck1FalFBWEFCc0FId0FoUUE4WEZoWWJHaG9lQ3g5OURRb0tIZ29BUHpNUk16OHpFamt2TXpNdk16QXhRUjRDQnc0REp5RVRNd01GTmpZM05pWW1KeVUzQndjaE54TURJeE1GTzJxdFlRZ0dVb09qV1A0eXk3V3dBUUpxcFE0SUxsdzgvclliYnh2OWhSdCt5clhMQXRjRFVKdHlYbzVlTGdFRWpmd0xBUUZ6YjBCVkxRSUJtVTJabVFJQyszTUVqUUFBQXdCdUFBQUU1Z1NOQUFNQUJ3QWJBQmxBQ3hnTkRRTVRCQW9GQWdOOUFEOHpNejh6RWprdk16QXhRUWNoTnhNVE13TVROejRDRng0Q0J3TWpFelltSmljbUJnWUQrQnY4a1J5T3lyWExJd283ZTMxQWZLMVJEVHExT3drZldWQkFmbndFalptWiszTUVqZnR6QWh5YUZ5QVBBUUppdEg3K213Rm1TM0EvQWdJVElRQUFCQUFlL3BvRWhRU05BQU1BQndBTEFBOEFHMEFNRHd0OUF3Y0hEZ29DQWdvS0FEOHpMeEV6TXhFelB6TXdNV1VESXhNbEJ5RTNFd01qRXlFREl4TUNZRmExVlFHYkcvMkNHOWJLdGNzRG5NcTF5NFQrRmdIcUZKaVlBL1g3Y3dTTiszTUVqUUFBQWdBZy8vd0Qyd1NOQUJjQUd3QWJRQXdDQVFFTkN3NEtHeG9hRFgwQVB6TVJNejh6RWprdk16QXhRU1VIQlI0Q0J3WUdCeVVUSXdNRkZqNENOelltSmhNM0lRY0NhZjY0R3dFeFBHTTVBZ1NjYVA3bnNMTEtBYlJacG9oWkRBNVZwdTRhL1pnYkF0Y0JtUUVDSzFaQ2JuTUJBUVAxKzNNQ0FqQmdqMXh4bTFFQkk1YVdBQUFELzRuK3JBU2JCSTBBRUFBV0FCNEFJMEFRR2gwZENSY0tDaHdVQ1FvV0VSRUFmUUEvTWhFelB6TXpNeEV6RVRNdk16QXhRVE1ERGdRSEl6Y1hQZ00zRXlFREl4TWhBU0VESXhNaEF5TUJxYlZkRVMxQ1hINVVaaHdtUUY5RUxoQ0VBc2ZMdExEOTdmNG5CSlpXdGp6ODFUdTNCSTMrUzFlc29wQjRLNWNCUG9LT25Ga0J0UHR6QS9YOG8vNFVBVlQrclFBQUJmK3ZBQUFHQlFTTkFBTUFDUUFOQUJNQUZ3QTFRQmtVRnhjUkRBc0xCd2NSRVFZT0RnOEtBZ0lWQ2drREF3OTlBRDh6RVRNL014RXpFamt2TXpNUk14RXpFVE1STXhFek1ERkJBeU1USVFFaEp6TUJBd00zQ1FJekV6TUhKd0VqQVFPcnlyWEtBdy85OXY3bUFjTUJlNlR0a3dFeC9IWCs0OC9LMHphbi9tbnlBaHNFamZ0ekJJMzlhcGtCL2Z0ekFoeCsvV1lCOXdLVy9nT1pFLzMyQXBnQUFnQVMvKzREMkFTZkFCNEFQZ0FkUUEwZkFnSUJQajRWTkNvTEN4VitBRDh6UHpNU09TOHpNeEV6TURGQkp6Y1hNalkyTnpZbUppY21CZ1lIQno0REZ4NERCdzRESnhjZUF3Y09BeWN1QXpjekhnSVhGalkyTnpZdUFpY25BZ1NhRllBL2ZGZ0pDRU5yTmp4c1R3MjFDVk4vbUU1SmtIVkRCUVJhaXA3V2drV1BlRVlGQlYyUXFsUk9qbXc4QTdJQk9XRTlRSWhqQ2djZlAxVXVsZ0lyQVhRQklGQkpRVXNmQVFFaFN6NEJWWHRRSlFFQklraDJWbFo1U2lOR0FRRWVRM0JVWUlWU0pRSUJLbEorVmtKUEpBRUNJbFJLTmtrckZBRUJBQU1BSUFBQUJLSUVqUUFEQUFjQUN3QWJRQXdBQXdvSEN3b0JBZ1VGQ0gwQVB6TVJNek0vTXpNek16QXhkd0VYQVFFekF5TUJNd01qWWdPVVoveHVBeVN6eXJQOXhiTEtzbFFFT1ZUN3h3U04rM01FamZ0ekFBQURBQjhBQUFSWUJJMEFBd0FKQUEwQUgwQU9EQXNMQndjR0JnSUpBMzBLQWdvQVB6TS9NeEk1THpNUk14RXpNREZCQXlNVElRRWpKek1CQXdFM0FRR2V5clhMQTI3OWgrOEJzQUhRclA2K2VnR2pCSTM3Y3dTTi9XcVpBZjM3Y3dJY2ZmMW5BQUFELzhULy93UjZCSTBBQXdBSEFCa0FHRUFMRXhBS0J3SURBd2g5QmdvQVB6OHpFVE16UHpNd01VRUhJVGNoQXlNVElUTUREZ1FuSXpjM1BnUTNBOXNiL2RNYkFzekx0Y3I5dkxaeUR5YzlYNDVuT1JZbVFWazVJaFFKQkkyWW1QdHpCSTM5NWxDdXBZUk5BYVFDQkVGbGVIZ3lBQUlBV3YvcEJGUUVqUUFTQUJjQUYwQUtBUmQ5RlJZV0RnNEhDd0EvTXhFekVUTS9NekF4UVFFekFRNENJeUltSnpjV0ZqY3lOalkzQXhNVEJ3TUI5Z0dHMlAzYksyQ0NYeHMwR2hFV0xSWXhTRFlYTzQ4NG0vTUJ3UUxNL0dSTmVFTURCSllEQkFFc1JpWURkZjJiL3Q4dEE3TUFCQUFlL3F3RWhnU05BQVVBQ1FBTkFCRUFIVUFORVExOUJRa0pFQXNJQWdJSUNnQS9NeThSTXpNekVUTS9NekF4WlFNakV5TTNNd2NoTnhNREl4TWhBeU1UQklCbm96dU1Hd1ViL1lJYjFzcTF5d09keXJiTG1QNFVBVlNZbUpnRDlmdHpCSTM3Y3dTTkFBSUFWZ0FBQkNVRWpRQURBQmNBRTdjVUNRa0NBdzU5QWdBdlB6TVNPUzh6TURGQkF5TVRBd2NPQWljdUFqY1RNd01HRmhZWEZqWTJCQ1hLdHNzaUNqeDdmVUI5ckZFTk9yWTdDQjVhVUVCK2V3U04rM01FamYzbW1oY2dFQUlDWXJSK0FXUCtuRXR2UHdNQkVpRUFCQUFlQUFBRi9nU05BQU1BQndBTEFBOEFHVUFMQ3djSER4QUtCZ1lERG4wQVB6TXpFVE0vTXhFek1ERmxCeUUzQVFNakV5RURJeE1oQXlNVEJMMGIrK1ViQXl2S3Rjb0M1c3UxeXZ4VnlyWExtSmlZQS9YN2N3U04rM01FamZ0ekJJMEFBQVVBSHY2c0JmOEVqUUFGQUFrQURRQVJBQlVBSjBBU0VRME5GWDBFRUFJQ0VCQU1EQk1UQ1FnS0FEOHpNeEV6RVRNUk15OFJNejh6RVRNd01XVURJeE1qTnpNSElUY0JBeU1USVFNakV5RURJeE1GOTJlaVBJd2JCQnY3NVJzREs4cTF5Z0xueTdiSy9GWEt0Y3VZL2hRQlZKaVltQVAxKzNNRWpmdHpCSTM3Y3dTTkFBSUFVZi84QkpZRWpRQURBQm9BRjBBS0JnVUZEeElLRVFFQWZRQS9NakkvTXprdk16QXhVd2NoTndFbEJ3VWVBZ2NHQmdjbEV5TURCUlkyTmpjMkppWnNHd0dtR3dFZi9yZ2JBVEE5WXpvQ0JKNW4vdWV3c3NzQnRYYlZrUkFPVmFZRWpaaVkva29CbVFFQ0sxWkNiM0lCQVFQMSszTUNBbGFxZTNHYlVRRC8vd0FnLy93Rm9RU05CQ1lDR0FBQUFBY0I4d1AzQUFBQUFRQWcvL3dEendTTkFCWUFGVUFKRlJZV0Nnd0pDZ3A5QUQ4L014STVMek13TVVFZUFnY09BaWNsRXpNREJUWTJOelltSmljbE53SnBhcVpXRHhDUjFYYitUTXF5c0FFWmFKd0VBamxqUFA3UEd3TFhBMUdiY1h1cVZnTUJCSTM4Q3dFQmNtOUNWU3dDQVprQUFnQWcvKzBFREFTZ0FBTUFLd0FYUUFvQ0FRRWNDQ2NMRXh4K0FEOHpQek1TT1M4ek1ERkJJVGNoQVI0Q0Z4WStBamMzTmk0Q0p5WUdCZ2NIUGdJWEhnTUhCdzRESnk0Q0p3T0IvZ1liQWZyOU9BVTJhbEZYZ1ZzMkN3NEpDekptVTFWK1ZCYTJHWTdUZ0hXbVpTWU1EZzlaanNGNWU3ZHBCd0g3bWY3bVQyczRBZ0pCY3BCTWFFV0pjMGNEQXpwd1R3Ri90RjREQWx1YXdtdG1iOGlaVmdNRFhxNTdBQVFBSHYvdEJmTUVvQUFEQUFjQUhRQXpBQjFBRGlRWmZpOE9Dd01DQWdZSGZRWUtBRDgvRWprdk16OHpQek13TVVFSElUY1RBeU1UQVFjT0F5Y3VBemMzUGdNWEhnTUhOell1QWljbURnSUhCd1llQWhjV1BnSUNmaHYrZVJ5bHlyWExCUDhJRGxtVHlYMTNxR1FsREFnUFc1VElmSGVuWXlUSENRY0tNbWRWV0lsZ09nc0lDQXd6WjFSYWlGODRBcGVabVFIMiszTUVqZjNnUW5YUW9Ga0RBbUNmeUd4Q2NzK2ZXUUlEWHAzSHRFWkZqbmRMQXdORWQ1Wk9SRVdPZUV3REEwTjNsZ0FBQXYvZ0FBQUVRUVNPQUFNQUl3QVpRQXNqQUFRRUdSc1dmUmtCQ2dBL016OHpFamt2TXpNd01VRUJJd0VGSlM0Q0p5NENKeTRDTno0RE13VURJeE1uQmdZSEJoWVdGd1VDUGY1dXl3R2NBZEgrbEFvVkZnZ0dDUW9GUkdZMUJRWlFncDlWQWNuS3RyRDlacUFPQ0M5Yk9nRklBa2I5dWdKR1pnRUJCZ2dFQWdjSEFpQktiVk5laFZRbkFmdHpBL1VCQVYxdFFVd2pBZ0VBQUFQLytnQUFCQzBFalFBREFBY0FDd0FiUUF3TENnb0RBZ1lIQndOOUFnb0FQejh6RVRNUkVqa3ZNekF4UVFNakV5RUhJVGNUQnlFM0Fmekt0Y3NDNVJ2OW94dXdHLzJWR3dTTiszTUVqWm1aL2dpWW1BQUFCdit2L3F3R0JRU05BQU1BQndBTkFCRUFGd0FiQUR0QUhBSU9BUUVPRGdZYkdCZ1ZFaElRRHd3SkNSTUdCaGtLRFFjSEUzMEFQek1STXo4ekVSSTVMek16TXpNUk16TVJNeEV6RVRNdkVUTXdNVUVqRXpNQkF5TVRJUUVoSnpNQkF3TTNDUUl6RXpNSEp3RWpBUVZTcFZhay9nVEt0Y29ERC8zMi91WUJ3d0Y3cE8yVEFUSDhkZjdqejhyVE5xZithZklDRy82c0Flc0Q5dnR6QkkzOWFwa0IvZnR6QWh4Ky9XWUI5d0tXL2dPWkUvMzJBcGdBQUFRQUgvNnNCRmdFalFBREFBY0FEUUFSQUNkQUVoQVBEd3NLQ2dZTkIzMENEZ0VCRGc0R0NnQS9NeEV6THhFelB6TVNPUzh6TXhFek1ERkJJeE16QVFNakV5RUJJeWN6QVFNQk53RURpNlJXby8yK3lyWExBMjc5aCs4QnNBSFFyUDYrZWdHai9xd0I2d1AyKzNNRWpmMXFtUUg5KzNNQ0hIMzlad0FFQUI4QUFBVU9CSTBBQXdBSEFBMEFFUUFwUUJNUUR3OEtBQXNMQ2dNRENnb0dEUWQ5RGdZS0FEOHpQek1TT1M4ekx4RXpFVE1STXhFek1ERkJNd01qRXdNakV5RUJJU2NoQVFNQk53RUJ1Wkpta2t2S3Rjc0VKUDJIL2xzQkFXVUIwcXordlhvQm93TjEvYlFEWlB0ekJJMzlhcGtCL2Z0ekFoeDkvV2NBQUFRQWFnQUFCVG9FalFBREFBY0FEUUFSQUNGQUR4QVBEd3NLQ2c0R0NnMEhCd01BZlFBL01qSVJNejh6T1M4ek14RXpNREZUSVFjaEpRTWpFeUVCSXljekFRTUJOd0dGQWFrYi9sY0NGc3ExeXdOdS9ZZnZBYkFCMEt6K3Yza0Jvd1NObUpqN2N3U04vV3FaQWYzN2N3SWNmZjFuQUFBQkFGRC82QVVzQktFQVJBQWJRQXdBQVFFdkdBc2tJeU02RFg0QVB6TXpFVE0vTXpNdk16QXhaUWN1QkRjM1BnTVhIZ01IQnc0REp5NEROemMrQXpjSElnNENCd2NHSGdJWEZqNENOemMyTmlZbUp5WU9BZ2NIQmg0Q0JOOE9mTnF2ZHpVTkJRby9iSjVxWjRGREVna0hFM3pEK3BHSnczWXREZ01PVDRTN2VoRlVkMDh0Q1FRS0VrU0NabkM2alZrUEJ3VUZGVUJBUkZ3NEhnY0ZEajJKeVl1Z0F6aHFuZE9GSjEyMGtGTUNBMW1QckZZN2p2Q3dZQU1DWWFmZWZ5Qnl5WmxaQXA1R2RJMUlJVm1qZ0V3Q0EwaUd0V3MrTFhGcFJnTUNQMmg0Tml1R3ZuazYvLzhBZFFBQUJHVUVqZ1FtQWVNQUFBQUhBallBRVA3ZEFBTC90LzZzQkc0RWpRQURBQThBSWtBUkN3NElCUVFLQmc5OUFnb0JBUW9LRFFvQVB6TVJNeThSTXo4ekVoYzVNREZCSXhNekFSTUJNd0VCSXdNQkl3RUJBNjJrVnFQOVhja0JZZVgrRkFFaXl0VCtsT01CK1A3by9xd0I2d1AyL2s0QnN2MjAvYjhCdXY1R0FsVUNPQUFGQUczK3JBVi9CSTBBQlFBSkFBMEFFUUFWQUNKQUVCRU5EUlFWZlJBU0RBa0VDQUlDQ0JJQVB6TXZFVE16TXo4L016TVJNekF4WlFNakV5TTNNd2NoTnhNREl4TWhBeU1USXdjaE53VjVaNk04akJvR0cvMkFHOWpMdGNvRG5zdTB5dE1iL0pFYm1QNFVBVlNZbUpnRDlmdHpCSTM3Y3dTTm1KZ0FBd0JWQUFBRUpRU05BQU1BQndBYkFCOUFEZ0FZR0EwREF3ME5CZ2NTZlFZS0FEOC9NeEk1THpNdkVUTVJNekF4UVRNREl3RURJeE1EQnc0Q0p5NENOeE16QXdZV0ZoY1dOallCMnBGbWtRS3h5cmJMSWdvOGUzNC9mYTFSRGpxMk9na2ZXVkJBZm5zREhQMjBBNzM3Y3dTTi9lYWFGeUFRQWdKaXRINEJZLzZjUzI4L0F3RVNJUUFBQWdBZUFBQUQ3UVNOQUFNQUZ3QVVRQWtQRWhRSkNRRjlBQklBUHo4NUx6TS9NREZ6RXpNREV6YytBaGNlQWdjREl4TTJKaVluSmdZR0hzdTB5aU1LTzN0OVAzMnRVUTA2dFRzSkgxbFFRWDU3QkkzN2N3SWNtaGNnRHdFQ1lyUisvcHNCWmt0dlFBSUNFeUVBQVFBdS8vQUZWd1NmQURRQUcwQU1HQmdkSFJFUklndCtMUUFMQUQ4eVB6TTVMek1STXk4d01VVXVBemMzUGdNWEhnTUhCeVV1QXpjWEJoWVdGd1UzTmlZbUp5WU9BZ2NIQmg0Q0Z4WTJOeGNPQWdNYWRMaDdOdzBTRDJHWXgzVjJyV3dwRGhUOFQxYURWaWNGbFFVbFdFY0REZ1VQTVg1alVvWmpQd3dUQ2hsSGVGUk9rVVl0TW5ONUR3RlBqc0Z6ZzIvRWxGSUNBbEtQdjNHR0FRTTJZNGxWQVVWak53TUNIVitVVndJQ1BXeUtUSVJQaFdJM0FRSW9INU1oSlJBQUFRQkEvKzBFWEFTY0FDc0FGVUFKRVJRVUdRc0xKQUIrQUQ4eVB6TTVMek13TVVFZUF3Y0hEZ01uTGdNM055RUhKUWNHRmhZWEZqNENOemMyTGdJbkpnWUhKejRDQW81enMzWXlEUklRWVpmR2RuYXRiQ29QRkFOMUcvMUhCUTh5ZldOVGhXTStEQk1LR1VkNFZFK1FSeW8wZUg0RW5BSlJrTUJ3Z20vRWxGTURBbEdQd0hHR21BRWNYNVJXQXdJOWJJcE1nMCtHWWpnQkFTZ2dsQ0VsRHdBQUFnQVMvK2dEN3dTTkFBY0FKZ0FiUUF3SUJRVUVKaVlkRXdzSEFIMEFQekkvTXprdk16TVJNekF4VXlFSEFTTTNBU0VURng0REJ3NERKeTRETnpNZUFoY1dOalkzTmlZbUp5Zk9BeUVWL2hGdUZnRk0vZFRjZFV5UWNUNEZCMXFPclZoUGpXMDdBN0lCT0dFOVNJaGZDUWc2YVQyS0JJMSsva0Y4QVNuK3dBSUNMRlNBVm1LT1dpa0NBaXRWZjFaQlVpY0JBaWxnVUVaVEpRSUJBQUFEQUViLzdRUS9CS0VBRlFBa0FEUUFHMEFPQ3lWcUxSMXFMUzBMQUJacUFBc0FMeThyRWprdkt5c3dNVUVlQXdjSERnTW5MZ00zTno0REZ5WUdCZ2NHQmdjaE5qUTFOaVltQVJZMk5qYzJOamNoRkFZVkJoNENBcHAzcDJNa0N3Y1BXWlBJZm5lblpDUUxDQTVibE1oemFaaGdGZ0VEQWdKeEFRUW5iZjcvYTVoZkZRSURBZjJPQVFJVU4ySUVuZ05lbmNkc1FuVFJvRmtEQWwrZXgydEVjOCtnV3A0RVlKOWNCd3dIQmd3R1ZadG0vSWtEWDU5ZEJ3d0hCUW9GUDN0a1BnQUFCQUFBQUFBRDFRU2dBQU1BQndBTEFDb0FJVUFQQmdjREFnSUpKaDErRWdvS0VRa1NBRDh6TXhFelB6TVNPUzh6empJd01VRUhJVGNGQnlFM0FTRTNJUUVERGdJSEp6NEROeE0rQXhjZUFnY25OaVltSnlZT0FnTVVGZjBwRmdLdUZmMHBGZ05UL0owYkEyUCtEQ1FKSGowMnBpZ3pIaEFGSWdvK2E1WmlkSlpFQnJZRkdFZEVPMVEzSHdLcGVucm5lWG4rUHBnQ1VmN3FSSTJBTUVjUFNWNWZKQUVXV2FCNlJRTUNacTF2QVRwcVJBSUNNbFJtQUFNQUgvL3hBK0FFbndBakFDY0FLd0FkUUEwbkppWXFLeXNIR1JKK0FBY0xBRDh6UHpNU09TOHpNeTh6TURGbEZqWTNGd1lHSnk0RE56YytBeGN5RmhjSEppWWpKZzRDQndjR0hnSUJCeUUzQlFjaE53Sk9OR1F5RFRkdU9HK2ZZQ01NR2hCVWlMcDNPbk01SkRGa00xSjdWalFMR3dnSkxWMEJNaGI5S0JZQ3NCYjlLUldKQVJBTmx3NFBBUUpPaDdScHZIQzdpVWtCRkEyVEVBNEJObUdDVEw5QmVtTThBbXA1ZWVaNWVRQUFCQUFlQUFBSG9nU2dBQU1BRlFBbkFERUFLVUFTS3pBdUxTUUpDVEV1ZlNvdENoc1NFZ0lEQUM4ek0zd3ZNeGcvTXo4ek15OHpFUkk1T1RBeFFRY2hOeE0zUGdJWEhnSUhCdzRDSnk0Q053Y0dGaFlYRmpZMk56YzJKaVluSmdZR0FRTWpBUU1qRXpNQkV3Y0pHdjNqR1E0SUMyV2haV0dIUXdnSUMyT2daV0dJUkxBSkJCbEJPVHRXTXdjSkJSbEJPRHRYTS83eHk2NytTNXExeTYwQnRwb0JTNDZPQWJCU1k1cFdBZ05abGw1VFlwcFZBZ05ZbHJGVk0xZzNBUUkxV3pkVU1sZzRBUUkxV2dFSSszTURkUHlNQkkzOGpBTjBBQUFDLzk0QUFBUnZCSTBBR0FBY0FCdEFDeHNjQWdFQkRnd1BmUTRLQUQ4L014STVmQzh6R000eU1ERkJKVGNGTWpZMk56WW1KaWNsQXlNVEJSNENCdzREQndjaE53S1AvWGdiQW5GR2ZGTUpDQ3RhUC83cHNMWExBYlJyckdBSkJsS0VvNE1iL1pVYUFhUUJtQUUxWlVsQlhUVUNBZndMQkkwQkExYWdjbDZQWURCWWw1Y0FBQUwvKy8vekFuZ0RJd0FaQURNQUdVQUtHd0FBR1JvYUNCQXNKQUF2TTh3eU9TOHpNeEV6TURGVE16NENOelltSXlZR0J5TStBaGNlQWdjT0FnY2pCemNYSGdJSERnSW5MZ0kzTXhRV0Z6STJOelltSmlmcFNDWklOQVlIUWk4eFRSQ2NDVmFCUjBSN1RRSUNYWVUrZVFZT1gwQjVUQUlEWUpCTFNYcEpBWlpJTlRkaUNBWWlQaU1CeWdJWE1pb3pMd0V1TUV0a01BRUJMbUJNU2xrbkFTUk9BUUloVTB4VWFqSUNBVFZuVGpjeUFUazhLaTRUQVFBQy8vRUFBQUowQXhVQUJ3QUxBQmRBQ1FNSEJ3RUJCZ1VJQ2dBdnpESXlPUzh6RVRNd01VRUhJVGNCTXdjSEFRTWpFd0owRi8yVURBSEFockh4QWIrSm1vb0JMSUp3QWZ2ci9nSHAvT3NERlFBQUFRQVgvL01Da0FNVkFDRUFFcllmQ1FrRUF4a1JBQzh6ekRJNUx6TXdNVk1uRXlFSElRYzJOak15RmhZSERnSW5MZ0luRnhZV056STJOelltSnlJR3lJRjFBZFFZL3JBOEgwSWlTMnMzQXdSVmlsUkdkMHNEbEFVK05VTlRDQVpBUENVL0FXVWlBWTZEckEwUVAzRkpWbjFFQWdFMVpra0JOUzhCVlVFN1NBRVhBQUVBSGYvekFtQURJUUF0QUJPMkV4d2NBd0FNSkFBdk04d3lPWDB2TXpBeFFSY0hKeVlHQmdjSEJoWVdOekkyTmpjMkppTWlCZ1lISno0Q016SVdGZ2NPQWljdUFqYzNQZ01DSEJzTkNGcVNYdzRPQkJFek1DbERLZ1FIT3pvbVJEUU9KZ3hLYVRwS1pqSURCRldKVTF0NE9BWUZERkNDclFNaEFZTUJBamw0WEhVb1RUTUJLVU1vT1VvY015TXZPbGd3Um5SSFZIOUdBUUpWamxZM2FhUnlPd0FBQVFBdkFBQUN0QU1WQUFZQURMTUZBUVlDQUMvTU1qSXdNVUVIQVNNQklUY0N0QkwrT3EwQngvNU5Gd01WWlAxUEFwU0JBQVFBQ1AvekFuZ0RJZ0FQQUI4QUx3QTlBQmRBQ2d3a093TVVGRFFzSEFRQUx6UE1Namt2RnpNd01XVU9BaWN1QWpjK0FoY2VBZ2MySmlZakpnWUdCd1lXRmpNeU5qWVREZ0lqTGdJM1BnSVhIZ0lITmlZbUl5SUdCd1lXRmpNeU5nSklBbHVMU1VOOVR3SUNYb3hHUUh4UmxnUWZPQ0FrUXk0RkJCODNJQ1JETDhnQ1Y0RkNQSFZNQVFGVWdrWkJkRWllQkJrdUhURlBCZ1FaTHgwd1R1QlRhVEVCQVM1aFRGQm1NQUVCTFY0L0pDNFhBUnMxSmlRdkZobzFBWWRLWHkwQktsaEVUbVl5QVFFdlhsTWVMQlk1TXg4ckZqb0FBQUVBTi8vM0FuQURJZ0F1QUJPMkVoc2JDaU1CTFFBdk04d3lPWHd2TXpBeGR4Y1dOalkzTnpZbUppTWlCZ1lIQmhZV0Z6STJOamNYRGdJakxnSTNQZ0lYSGdJSEJ3NERJeWR6QzFXSldRMFRCQkF3TGl0Q0tRUURGak1uSlVFeERDd01SV1U1VEdjMEJBTlZpbFJkY2pBR0JRdE5mcXRwRlhjQkFUQnRXSk1tU2pFdVNTZ2xQaVFCSERJakxqaFZNQUZFZFVoVWhFc0NBVnFTVlROcW9tODVBUUFBQVFDVEFvc0RHUU1qQUFNQUNMRURBZ0F2TXpBeFFRY2hOd01aRy8yVkd3TWptSmdBQXdFTEJENERIQVp4QUFNQUR3QWJBQmxBQ1JNTkRRY0JBd01aQndBdk16TjhMeGpORVRNUk16QXhRVGN6QndVME5qYzJGZ2NVQmlNR0pqY1dGak15TmpjMkppTWlCZ0dtcnNqMi91WmpTRU5iQVdGSFExNVNBaDBrSkRrRkJTTWlLVEFGdkxXMTMwZG1BUUZmUTBabEFWdEZIekEySXg4ME9nQUVBQjRBQUFQd0JJMEFBd0FIQUFzQUR3QWJRQXdMQ2dvR0R3NEhmUU1DQmdvQVB6TXpQek16RWprdk16QXhaUWNoTnhNREl4TUJCeUUzQVFjaE53TkdHLzE3Rzl6S3Rjc0NaQnY5enhzQzFCdjlnQnVZbUpnRDlmdHpCSTMrR1plWEFlZVptUUFFLzVuK1NRUkVCRkVBRWdBa0FGc0FYd0F6UUJwZFh3WnlKU1lZR0E5QVFVRXVVMU1QRHdWS053OXlJUVVIY2dBck1pc3lFVGt2T1JFek14RXpFVE1TT1Rrck1qQXhVemMrQWhjZUFnY0hEZ01uTGdJM0J3WVdGaGNXTmpZM056WW1KaWNtQmdZREZ3WUdCd1lXRmhjWEhnSUhEZ01uTGdNM1BnSTNGdzRDQndZZUFqTXlQZ0kzTmlZbUp5Y3VBamMrQWdFSElUZHhBZ3FJeTNCb3JXTUhBUWhVZ3AxUlphMW12QU1FTlY0NVBuVlNDZ0lGTTE0N1FIVlJJRjRuUHdjRUd5OFpwbHlyYUFjRmRyQzlURHlSZzFJRUJGK1FUekV1VGpRSEJpdExWU1F1ZUhWVUNnazNXeTdKTldwR0FnSTBVd05qR1A2UER3TEtGbmFtVlFNQ1ZaMXZGMWFJWFRBQ0FsYWJnaFk4V1RJQkFUUmdRQlU5V3pNQkFUUmgvcTAyRjBNd0hpQU1BUUVDTkh0dFg0WlNKUUVCR1R4blQxbC9VQkpTQ3pkUU1UQThJUTRTTFV3Nk9qa1RBZ0VCSUVrL1BGdEdBb2FTa2dBQUJBQkkvK2NFaUFSU0FCVUFLd0F2QURNQUYwQU1NQW90Qmh3UkMzSW5CZ2R5QUNzeUt6SS9QekF4VXpjK0F4Y2VBd2NIRGdNbkxnTTNCd1llQWhjV1BnSTNOell1QWljbURnSUZFek1EQXhNekUxRURERVIycjNocWkwOGNCZ2tSVFh1cWIybUxUUmZEQWdjSEtWbExTSEpWT0E0RkF3NHNVMEpYZTFBdUFobXFzY1dlREkwUUFlMFdaZEd3YVFNRFg1cTNXa3BpdlpsWkF3TmRsclJ3Rmp0K2JVVUNBazE3aWpza000TjdVZ01FVUlhYUxnSWUvZUw5NUFJYy9lUUFBZ0JFQUFBRTRBV3dBQmtBTGdBZlFBOG1DQnNhR2dJQkFRNE1Ed0p5RGdnQVB5c3lFamt2TXpNUk16OHdNVUVoTndVeU5qWTNOaVltSnlVREl4TUZIZ0lIRGdJUEFqY2VBZ2NIQmdZV0Z3Y2pKaVkyTnpjMkppWUMyZjVuR1FGVFc1NW9EQWsyY1UvK3R1RzkvUUh5ZnNacEN3bDFzV0ljWHgxMnJsWU9GQVVERUJnRHVSa1BCUVVUQ1NoaEFuV2RBVEowWTFKc053SUIrdTRGc0FFRFdiS0licFpjRnhzVGJ3SlNvbnlHSkVwRkhob2hVVlVuZzB4eFFRQURBRVFBQUFWcUJiQUFBd0FKQUEwQUlFQVFDZ2dKQWd3TEN3Y0dCZ0lEQW5JQ0NBQS9LeEk1THpNekVUTS9QekF4UVFNakV5RUJJU2N6QVFNQk53RUIvZnk5L1FRcC9SRCtyZ0h3QWx6Qy9sMS9BZnNGc1BwUUJiRDgzNkFDZ2ZwUUFyS2YvSzhBQUFNQUpnQUFCQjhHQUFBREFBa0FEUUFjUUE0TEJ3WUdBZ2tHY2dNQWNnb0NDZ0EvTXlzckVqa3ZNek13TVVFQkl3a0NJVGN6QVFNQk53RUI1ZjcydFFFTEF1Nzk2LzdvQnNjQmUzdis2bllCYVFZQStnQUdBUDQ2L2J1YUFhdjd4Z0lNbS8xWkFBTUFSQUFBQlVvRnNBQURBQWtBRFFBYVFBNEdDd2NJREFVQ0NRTUNjZ29DQ0FBL015c3lFaGM1TURGQkF5TVRJUUVoTnpNQkF3RTNBUUg5L0wzOUJBbjg1djd2QldzQ3djTDl4YVFDYndXdytsQUZzUDBmV3dLRytsQUM3MS84c2dBQUF3QW1BQUFFQndZWUFBTUFDUUFOQUNCQUVBd0xDd2NHQmdJSkJuSURBWElLQWdvQVB6TXJLeEk1THpNekVUTXdNVUVCSXdrQ0l6Y3pBUU1CTndFQjZ2N3h0UUVQQXRMOWg1d0ZUUUhKZVA2WmVnRzlCaGo1NkFZWS9pTDl1cGtCcmZ2R0FnbUsvVzBBQUFJQUh2Ly9CQXdFalFBWkFCMEFGa0FKR3hvUEFnRU9EMzBCQUM4L014RXpFVE15TURGaElUY1hGalkyTnpjMkxnSW5KVGNGSGdNSEJ3WUdCQU1ESXhNQmZQNzBIUFIrdm5jUkNRa1RRSFJZL3VJYkFRWjNzM1l5REFjVnJ2N3ZpTXExeTVnQkFXS3plME5QakcwL0F3R1pBUU5WbE1SeVFxbjRpQVNPKzNNRWpRQUJBRWovN1FRekJLQUFKd0FSdGhrVkVINGtBQVVBTDh3elA4d3pNREZCTnc0Q0p5NEROemMrQXhjZUFoY2pMZ0luSmc0Q0J3Y0dIZ0lYRmpZMkF6RzBHWkhYZ0hPallpUU1EZzlia3NWNmU3SmpCclFETW1WUVY0WmVPUXNPQ1FrdllsTldnVllCZUFHQXNsb0RBbHlid21obWNjbVlWUU1EWWJKNVRXMDdBd0kvY1pCT2FFT0pkRWtEQXpadUFBQUNBQjcvL3dQakJJMEFHUUF4QUNoQUV4d2JLUmtDQWdFYkpnRUJKaHNERFF3UGZRMEFMejh6RWhjNUx5OHZFVE1TT1RrUk16QXhRU0UzQlQ0Q056WW1KaWNuQXlNVEJSNERCdzRDQndNaE53VStBamMySmlZbkp6Y0ZGeDRDQnc0REFqNyt3QmNCQ2pwelVna0lObDgyNGJDMXl3RitTWXRzUEFVR2FadFFxZjZCZHdFTlAzVlNDZ2dwVlRyMEdnRXRIa3R3T3dVRlVJR2VBaE9NQVFFaFRVSkFSaDBCQWZ3TUJJMEJBaUZJZFZWY2REMEkvYjZZQVFFbVZFVStVU29DQVl3Qk5RaElkazFkZzFFbUFBUC9wZ0FBQStNRWpRQUVBQWtBRFFBY1FBd05BQVlEREF3QkJ3TjlCUUVBTHpNL014STVMeEk1T1RNd01VRUJJd0V6RXdNM013RURCeUUzQXBIOTE4SUNuSHgyMGc1ekFRQ0JHLzFnR3dQaC9COEVqZnR6QS9tVSszTUJyNWlZQUFFQS9BU1BBaWNHUFFBS0FBcXlCWUFBQUM4YXpUQXhVemMrQWpjWEJnWUhCL3dUQ1RKSkxXY2pNZ3NXQkkrQU8yMWdKbFkxYlQ1NEFBQUNBUklFM1FOY0Jvc0FEd0FUQUJLMUVoTUtBQTBGQUM4emZOd3kxaGpOTURGQk53NENKeTRDSnhjR0ZoY3lOaWNuTXhjQ3hwWUlYb2hHUTM5VEFaSUNSanM5V0pOOWlVc0Zyd0ZPWFNnQ0FTcGNUQUk5TmdFNFVNZkhBQUw5S2dTLy8yWUdsQUFYQUJzQUhVQU1BQlVWQlJrYkd3a1JFUXdGQUM4ek14RXpNeTh6RVRNUk16QXhReGNPQWdjR0ppWUhCZ1lISno0Q016SVdGamMyTmljM0Z3ZnpUUVlwUnpRcFFVQW5LQzROVWdZc1NqUW9RVUluS0MzMnA3VFpCWmNYTGxNMUFRRXBLQUlDTkNJVUxsVTFLU2dDQWpZLzRRSGdBQUlBMHdUaUJQc0dsUUFHQUFvQUZMY0lCd2NGQVlBRUJnQXZNeHJOT1RNdnpUQXhVd0V6RXlNbkJ5VVRNd1BUQVVpVTdxK0t3QUhSdHREeEJPSUJCdjc2bloyeEFRTCsvZ0FBQWdBaUJNOERrd2FEQUFZQUNnQVhRQWtIUUFnSUF3YUFBZ1FBTHpNYXpUa3pMeHJOTURGQkV5TW5CeU1CSlJNakF3S203YStLdjlFQlNQN0dYWDJXQmRiKytaNmVBUWV0L3Y0QkFnQUFBZ0RPQk9RRWVRYlBBQVlBR2dBZlFBMFJFZ2hBR2drSUNBTUdnQUlFQUM4ekdzMDVNeEV6TXhvUXpESXdNVUVUSXljSEJ3RUZKemMrQWpjMkppWW5OeDREQndZR0J3SzczSldnM2JjQk5nSFllUlFYUEM4RkJDOCtFdzhqVVVnc0FnTlZPUVhyL3ZtNXVBRUJCMzRCaEFJSUd4OGVHUVVCWEFFT0lqc3VRRDhMQUFJQXpRVGtBNWNHMUFBR0FCNEFKVUFRQ0FjSEVCZ01RQlFURXh3TURBYUFCQUF2R3MweUVUTXpFVE1hRU0weU1oRXpNREZCRnlNbkJ3Y2xKUmNPQWlNaUppWUhCZ1lISno0Q0Z6SVdGamMyTmdLYys1U2wyTGtCVHdFZ1RnY3NSaTBtUFRvbElqRU5Ud2NzUnk0bFBEd2tJekFGMlBTZG5BSDAreFVyU0N3bUpnSUJMQjBUS2tvdUFTWWtBZ0VxQUFNQUhnQUFCQU1GeEFBREFBY0FDd0FiUUF3Q0Nnb0xDd2NEQXdkOUJnb0FQejh6THhFekVUTVJNekF4UVFNakV3RURJeE1oQnlFM0JBTlJ0VkgrVDhxMXl3TGtHLzJrR3dYRS9qQUIwUDdKKzNNRWpabVpBQUFDQVJJRTNRTmNCb3NBRHdBVEFCSzFFUk1BQ2cwRkFDOHpmTnd5R05iTk1ERkJOdzRDSnk0Q0p4Y0dGaGN5TmljM0Z3Y0N4cFlJWG9oR1EzOVRBWklDUmpzOVdMdVJvOE1GcndGT1hTZ0NBU3BjVEFJOU5nRTRVY1lCeFFBQUFnRVRCTjhEUmdjRUFBOEFKUUFvUUJFYkhCd1JKUklTRVJFSkRRVUFDUWtGRUFBL00zd3ZNeEV6RVRNWUx6TVJNeEV6THpNd01VRTNEZ0luTGdJMUZ3WVdGekkySnljM1BnSTNOaTRDSXpjZUF3Y09BZ2NDdUk0SFdZTkZRM3BPakFOQ096dFdLNFlTRmtRNUJBSWlNekFNREI5YVZ6a0JBakZJSXdXdkFreGRLUUVCSzF0TEFqczRBVGxMQVgwQkJoa2VGaFlJQVZNQkNSdzJMaXN4R0FiLy93Q1BBb2tDNlFXOEJnY0Ixd0J6QXBqLy93QmtBcGdDNXdXdEJnY0NNQUJ6QXBqLy93Q0tBb3NEQXdXdEJnY0NNUUJ6QXBqLy93Q1FBb3NDMHdXNUJnY0NNZ0J6QXBqLy93Q2lBcGdESndXdEJnY0NNd0J6QXBqLy93QjdBb3NDNndXNkJnY0NOQUJ6QXBqLy93Q3FBbzhDNHdXNkJnY0NOUUJ6QXBnQUFRQ0EvK2dGUFFYSUFDa0FGVUFLR2hZUkEzSW1BQVVKY2dBcnpETXJ6RE13TVVFM0RnSW5MZ1EzTnpZU05qWVhIZ0lYSXk0Q0p5WU9BZ2NIQmg0REZ4WTJOZ1FldWg2bys1aDFzWHhIRmcwSUUzRzE5cGlUMUhVRnZBUkNnV1Z6c29CUER3a0pCU1ZNZVZkdm9Hc0J6Z0tWM0hjREFsT090c3RuUG9zQkJNNTNBd044MnBCZmsxWURCR0tseVdOQVJwbVJka2dEQTFDV0FBRUFnZi9xQlVVRnlBQXRBQnRBRFMwc0xBVWFGaEVEY2lZRkNYSUFLeklyekRNU09TOHpNREZCQXc0Q0p5NEVOemMyRWpZMkZ4NENGeU11QWljbURnSUhCd1llQXhjV05qWTNFeUUzQlE1V09yalBYWHE2Z1V3WURnTVRjTFg0bTQvU2V3eTZDVXFFWG5XMGdVNE9CQW9IS1ZHQVhEMStkQzQ4L3JrY0F0UDk3RkZlSmdFQ1U0KzYwbXdjalFFSjFIc0RBMm5IalZ5QVJBSUVaNjNPWkIxTG41UjNTQUlCRWk4cUFVV2JBQUlBUkFBQUJSSUZzQUFiQUI4QUVyY2NEeEFDY2dJZEFBQXZNaklyTWpJd01XRWhOd1V5UGdJM056WXVBaWNsTndVZUF3Y0hCZ0lHQkFNREl4TUI1ZjYxSGdFeGVzMmRZeEVHRFJwV20zVCtvQndCU3BYZGpEa1FCUlNHMHY3eGhmeTkvWjBCVTViSmR5eG13SnBkQXdHZUFRTnp3L3VMTFpyKy9iNW9CYkQ2VUFXd0FBSUFnLy9vQlZvRnlBQVpBREVBRUxjaEZBTnlMUWNKY2dBck1pc3lNREZCQnc0RUp5NEVOemMrQkJjZUJBYzNOaTRESnlZT0FnY0hCaDRERnhZK0FnVlBCZzVQZnFuUGVuU3ZlVWNXREFVUFVJQ3B6bmQxc0hsR0Zjc0dDUVlsUzNoWGNMV0dVdzRHQ0FZbVMzaFhjN2FEVUFMMUxXN1d2WTlRQXdKWGtybk1aQzF0MUx5UFVBTUNWWkczekpFdVJwZVBkVWNEQTJTcHlXRXVSSm1SZUVvQ0JHU3F6UUFEQUlQL0JBVmFCY2dBQXdBZEFEVUFHMEFOSlJnRGNnQURBekVMQ1hJQkFnQXZNeXN5TWhFekt6SXdNV1VCQndFQkJ3NEVKeTRFTnpjK0JCY2VCQWMzTmk0REp5WU9BZ2NIQmg0REZ4WStBZ000QVQrTC9zY0Ntd1VPVUg2bzBIbDBzSGxHRmd3RkRsRi9xYzkzZGJCNVJoWExCZ2tHSkV0NFYzRzFobE1PQmdnR0prdDRWM1MxZzFDZi90VndBU2tDeGl0dTFyMlBVQU1DVjVLNHpXUXJiZFc4a0ZBREFsYVF1Y3lQTEVhWWozVklBd05scWNwaUswV1lrbmRLQWdSa3FzMEFBUUM4QUFBREVRU05BQVlBRlVBSkF3UUVCUVVHZlFJS0FEOC9NeTh6RVRNd01VRURJeE1GTnlVREVjVzBvZjZESHdJVUJJMzdjd09paXEvR0FBQUJBRGtBQUFQNEJLTUFJQUFYUUFvUUVBd1ZmZ01nSUFJU0FEOHpFVE0vTXpNdk1ERmxCeUUzQVQ0Q056WW1KaWNtQmdZSEJ6NENGeDREQnc0REJ3RUR0QnY4b0JrQ0hpMVhQZ2dITGxjNFVYOVNEcklOanRkNlNZVm1OZ2NFTGtaVksvNWZtSmlNQWJFbFVXRTlPMUVzQVFORGQwMEJmTHRuQWdJclVubFJPbWxjVVNQK3N3QUFBZitCL3FFRUVRU05BQjhBR2tBTEJnQWVIZ01XRHdVQ0EzMEFQek16THpNU09TOHpNekF4UVFFaE55RUhBUjRDQnc0REp5WW1KemNXRmhjV05qWTNOaVltSnljQmFBR20vWTRiQTFvVy9rUnJra1VKQzJpbzJYMW93VjAvU0tGVWM4T0FEZzQvajJrL0Ftc0JpcGg5L25BVWY3aHFmc3lTVGdJQk9TeU1LeThCQWwycmRHeVBTZ0lCQUFBQy85UCt0Z1F3QkkwQUJ3QUxBQlpBQ1FZRUMzMEtBd2NIQWdBdk14RXpMejh6TXpBeFpRY2hOd0V6QXdrQ0l3RUVNQnY3dmhVRGNablUvYXNEVi83OXRRRUVsNWgzQkJmK3lmMUJBL2I2S1FYWEFBQUIvOVgrblFSRUJJd0FKd0FXUUFra0NRa0NHaE1GQW4wQVB6TXZNeEk1THpNd01WTW5FeUVISVFNMk5oY3lIZ0lIRGdNbkppWW5OeFlXRnhZK0FqYzJMZ0luSmdZRzk1L3RBdjhlL1pXRE9vSkRacEZYSWdrTVlaN05kMmU5VmtWQXBsUlRpMnBDQ2djVk9WNUJQV1JQQVdRU0F4YXIvblFpSHdGUWlLeGNkc1dRVFFFQ096YUxPQzRCQVR4cWkxQTdjRmsyQWdJYVB3QUFBUUFyL3JZRU53U05BQVlBRDdVQkJRVUdmUU1BTHo4ekVUTXdNVUVIQVNNQklUY0VOeFQ4eU1BREx2MDJHd1NOYy9xY0JUK1lBQUFDQVJRRTF3TjBCczhBRHdBbkFDbEFFUkVRRUJraElSVWRIQndsRlJVQUNRMEZBQzh6elRJeWZDOHpNeEV6RVRNWUx6TXpFVE13TVVFM0RnSW5MZ0kxRndZV0Z6STJFeGNPQWlNR0ppWUhCZ1lISno0Q016SVdGamMyTmdLOGtRZGFoVWREZTA2UUF6ODhQVlY1VFFVclNUUXBRVUVuS0M0TlVnWXNTalFvUWtJbktDOEZyUUpPWHlzQ0FTeGZTd0k3T3dFN0FWMFZMMVEwQVNvb0FnSTBJeFV1VlRVcEtBSUNOQUFBQWYrKy9wa0F6QUNhQUFNQUNMRUJBQUF2elRBeGR3TWpFOHhadFZxYS9mOENBUUFBQlFCTS8vQUdtUVNmQUNrQUxRQXhBRFVBT1FBeFFCZzRPVGt4ZlJZdExSY3dDalUwTkNZYkFRWUdKbjRSR3dzQVB6TS9NeEV6RVJJNUx6TS9Nek1STXo4ekVUTXdNVUVITGdNbkpnNENCd2NHSGdJWEZqNENOeGNPQWljdUF6YzNQZ016SGdJQkJ5RTNFd01qRXdFSElUY0JCeUUzQkRNekxGbFpXUzFaaVdFN0N3a0lDakZsVXl4WldWZ3RIRUNEZ2tCM3BXTWtDd2dQVzVUSWZVT0ZoZ0gvRy8xN0c5ekt0Y3NDWkJ2OXp4c0MxQnY5Z0JzRWpKb0JCUWNHQVFGRWRaVlFSVVNOZDB3REFnSUVCUUdYQkFjRkFnTmVuY1pyUkhYT25sa0JDQW44QzVpWUEvWDdjd1NOL2htWGx3SG5tWmtBQUFFQVB2Nm1CQzRFcEFBN0FCUzNBQlVmSHpVTEtUVUFMeTh6RWprdk16SXdNVVVXUGdJM0V6WXVBaWNtRGdJSEJoNENGeFkrQWpjM0RnSW5MZ00zUGdNWEhnTUhCdzRFSnlZbUp6Y1dGZ0ZBZUxOK1RCRW9DQWN1WWxGT2RsSXZDQVlQTWxsRFAzUmdRUXhsRG4zSmdXbVlYeVlKQ2xDR3RuRjVwbDhlRFNZUVNuS2R5WHRIaVVBME1tYkNBbUtuekdjQkNVT0lkRWdEQWtGdWgwUTRkMlZCQWdJa1JtUS9BbjNBYWdNRFVvcXZZV20vbEZRQ0ExNmZ5VzN5YmRPNWpFOENBUjhlakJZZEFBQUIvdy8rUndFUUFKa0FFUUFLc2cwR0FBQXZ6REl3TVhjekJ3NENJeVltSnpjV0ZqTXlOalkzVzdVa0RWaVliQjQ1SFJzWE1SZzJSaWNIbWZGbG9Gd0JDUWlmQmdrM1dDOEEvLy8vclA2aEJEd0VqUVFHQWx3ckFQLy8vK1ArblFSU0JJd0VCZ0plRGdELy8vKzQvcllFRlFTTkJBWUNYZVVBLy84QUxBQUFBK3NFb3dRR0FsdnpBUC8vQUZiK3RnUmlCSTBFQmdKZkt3RC8vd0FrLytnRU1BU2tCQVlDZGNBQS8vOEFadi9wQStzRnN3UUdBQnI1QVAvL0FCditwZ1FMQktRRUJnSmozUUQvL3dCQS8ra0VLd1hIQmdZQUhBQUEvLzhCRFFBQUEySUVqUVFHQWxwUkFQLy8vd24rUndHd0JEb0VCZ0NjQUFELy8vOEova2NCc0FRNkJnWUFuQUFBLy84QUx3QUFBWjhFT2dZR0FJMEFBUC8vLzNqK1dBR2ZCRG9HSmdDTkFBQUJCZ0NreWdvQUM3WUJCQUlBQUVOV0FDczBBUC8vQUM4QUFBR2ZCRG9HQmdDTkFBQUFBd0FlLytZRDFRU2hBQU1BRmdBeEFDbEFGQThtSmcwakl3a2JMd3R5QkFBQUFoTUpmZ0lLQUQ4L014STVMek1yTWhFNUx6TXpFVE13TVVFREl4TVhCejRDRnhZV0Z3RWpOd0VtSmljbUJnWUROeFlXTXpJMk5qYzJKaVluSnpjWEhnTUhEZ0luSWlZQlZZTzBnN2FyQzJXNWluTzFUdjVoYmhRQkdDRlBMVlJwT0QxQkpGQXJSR2xCQndnOWFqdGRHR1pJaDJvNkJRaDB2blE2YlFMeC9ROEM4UUlDZ3NWdEF3TnBULzVUY2dFa0hoNEJBbEdDL09XWkdSdythVUZIU2hzQkFZb0JBU1JJZEZOMnNHQUNIUUFBQWdCay8rZ0VjQVNrQUJVQUt3QU90UndSZmljR0N3QS9Nejh6TURGQkJ3NERKeTRETnpjK0F4Y2VBd2MzTmk0Q0p5WU9BZ2NIQmg0Q0Z4WStBZ1JrQWc5YWxNK0RmYXRrSXd3Q0QxeVd6b0o5cTJNaXhBVUhDek5wVmx5Tll6d0tCZ2NMTkdwV1hZMWpPUUpYRkhuYXFWOERBMlNvMEc4VmVObW5YZ01DWktYUWp5OUdrbnRPQXdOSWZaeFFMa2FVZmxFREEwbUFuZ0FCQUdJQUFBUkxCYkFBQmdBVFFBa0JCUVVHQkhJRERISUFLeXN5RVRNd01VRUhBU01CSVRjRVN4VDg2OEFERXYwK0d3V3djL3JEQlJpWUFBQURBQi8vNkFRV0JnQUFCQUFhQUM4QUdVQU9JUllIY2lzTEMzSUVDbklBQUhJQUt5c3JNaXN5TURGQk13TUhJd0VIRGdNbkxnTTNOejRERng0REJ6YzJMZ0luSmc0Q0J3Y0dGaFlYRmo0Q0FTcTI2RHFmQSswRERFeCtzWE5walZJZUJnc1JUbnlyYlcrUlVCbkNBZ2NLTGw5UFBtOWJQdzhvQWp4dlNWUitXRFVHQVBySHh3SXRGV1RJbzJFREExdVZ0VnRjWWJ1VlZ3TURaSisrY1JVL2huUkpBZ0l0VVdrNjgwaC9Ud01EUm5lUUFBQUJBRVQvNlFQbkJGRUFKd0FaUUF3ZEdSa1VCM0lFQkFBSkMzSUFLekl5THlzeUx6SXdNV1VXTmpZM053NENKeTRETnpjK0F4Y2VBZ2NqTkNZbUp5WU9BZ2NIQmg0Q0FkMUNjMUlTcXhDTHgydHlubDRpQ3dVTlZZdStkbkttV2dHcEwxeEdVMzFZTkFvRkJ3Y3RYNElDTldFL0FXMmxXd0lEVzVpL1pTdHR4cGhXQXdObnIzQkJiRUlEQTBOeWpVZ3FQNGR6U1FBREFFUC82QVNHQmdBQUJBQWFBQzhBR1VBTklRUUVGZ3R5S3dzSGNnRUFjZ0FyS3pJck1pOHlNREZsRXpNQkl3RTNQZ01YSGdNSEJ3NERKeTRETndjR0hnSVhGalkyTnpjMkxnSW5KZzRDQXV6a3R2NzFuUDF0QXd4T2diUnphWXhRSGdZTEVVNThxMjVxa1ZRZHd3TUhDekZmVFZLTVpCWW9BaDgvV2psVWdWbzIzUVVqK2dBQ0NSVmx5cVJoQXdOZGxyUmJYR0c3bFZVREJHU2d1M0lWUDRWMFNRTUNUb0pNOHpkbFVEQUNBMFYya1FBREFDUCtVUVEzQkZFQUV3QXBBRDRBRzBBUE1DVUxjam9hQjNJT0JnOXlBQVp5QUNzck1pc3lLekl3TVVFekF3NERKeVltSnpjV0ZoY1dOalkzRXdFM1BnTVhIZ01IQnc0REp5NEROd2NHSGdJWEZqWTJOemMyTGdJbkpnNENBNXlickJCU2hMaDJXcTVNUWp5UVNtdVBVUTZHL1BNQ0RVeUF0SFJwakZFZUJnc1JUM3lzYld1UlV4ekRBd2NMTUY5TlU0dGtGaWdDSHo5YU9WU0FXallFT3Z3VmJydUtTd0lDT0RDTExEQUJBMTJlWWdNVC9yRVdac21qWUFNQ1haYTBXMXRpdXBWV0F3TmxvTHh3RlQ2RmRFa0NBMDZDVFBNM1pWQXdBZ05GZDVFQUFnQkMvK2tFSmdSUkFCVUFLd0FRdHh3UkMzSW5CZ2R5QUNzeUt6SXdNVk0zUGdNWEhnTUhCdzRESnk0RE53Y0dIZ0lYRmo0Q056YzJMZ0luSmc0Q1RBTU9XcExEZDNLalppZ0tBdzViazhSMmNLTm1LTUlEQ0E0MFkwNVRnbDQ2Q2dNSERUUmpUbFNDWGprQ0NoZHV5NTVaQXdKZW04Rm5HRzdKbTFnREFsMlp3SDBZUDRoMFNRTURSWGVRU1JaQWlYWkxBd0pHZUpJQUFBUC8xLzVnQkJRRVVnQUVBQm9BTHdBWlFBNGhGZ2R5S3dzTGNnTUdjZ0lPY2dBckt5c3lLekl3TVVFREl3RXpBUWNPQXljdUF6YzNQZ01YSGdNSE56WXVBaWNtRGdJSEF3WVdGaGNXUGdJQmE5NjJBUVNhQXBVRERFdCtzWE5tajFra0JnNFJVWCt0YlcrU1R4bkRBd2NMTW1GUFBuQmFRQThyQVQ5dlIxT0JYRGNEWC9zQkJkcjk4aFZreDZOaEF3TlZqSzljYjJLN2xsWURBMlNndm5FVlFJWjBTUUlDTFZGcE92NzdSM2xLQXdKSGVKRUFBd0JDL21BRU5nUlNBQVFBR2dBdkFCbEFEaUVXQzNJckN3ZHlCQTV5QXdaeUFDc3JLeklyTWpBeFFSTTNNd0VCTno0REZ4NERCd2NPQXljdUF6Y0hCaDRDRnhZMk5qYzNOaTRDSnlZT0FnSjg0am1mL3Z6OUdnTU1UWUcyZFdtT1VoOEZEQkJRZnExdWJKTlVIY1FEQndzeFlFNVRqMmNXS0FJaFFWdzRWWUpiTi81Z0JSWEYraVlEcUJabnlxTmdBd05jbHJWYlhHSzdsRlVEQTJPZnZISVZQb2QxU3dNQ1VJVk44emRuVVRFQ0EwWjVrd0FCQUViLzdBUGhCRkVBS2dBWlFBd1RFaElBR1FzSGNpUUFDM0lBS3pJck1oRTVMek13TVVVdUF6YzNQZ01YSGdNSEJ5RTNCVGMySmlZbkpnNENCd2NHSGdJWEZqWTNGd1lHQWdKenJHOHVDUVVNVll1NmNXdVZXQjRNRS96dkd3SlhCUXdpWDFGUmVWVXpDUVVJRmtGdVVVMlFRQzFGdUJNQlZwVEJiQzFvdzV0WkF3SlJpSzlpZVpjQkhFcC9VQU1EUkhPTVJTeEhpRzVEQWdFd0tvRStNZ0FEQURYK1VRUXBCRkVBRWdBb0FEMEFHMEFQTHlRTGNqa1pCM0lOQmc5eUFBWnlBQ3NyTWlzeUt6SXdNVUV6QXc0Q0p5WW1KemNXRmhjV05qWTNFd0UzUGdNWEhnTUhCdzRESnk0RE53Y0dIZ0lYRmpZMk56YzJMZ0luSmc0Q0E0NmJyeFdGM3BsUW5rWkNOMzVCWjQ1VEQ0ajlCZ01NUjNpdWRHbU1VUjBHQ3hGT2ZLdHRhNHRNRnNJREJ3WW9XVTFTakdRV0p3TWdQMW81VlhwU01BUTYvQU9RNEh3Q0FpMG9qQ1FtQVFKVWxtQURKZjZ3Rm1USXBtRUNBMXlYdEZ0Y1licVZWZ01FWmFHN2JoVThoSFJMQWdOT2drenpOMlpRTUFFRFIzaVFBQUwvdi81TEJGRUVSd0FEQUNVQUdVQU1EaFVCQVJVZkJBZHlBd1p5QUNzck1pOHpMeEV6TURGQkFTTUJKUjRERnhNZUFoY1dOamNIQmdZSEJpNENKd011QWljbUJnYzNOallFVWZ3NHlnUFIvWE03VWprbkR2SUlHU2tqRnpBWFBnNGFEenBSTnlVTzZ3b2VOUzRRSVJBTEZ5OEVPdm9tQmRvTkFpNUxYakQ4VEJ4Q01RUUNBZ0tlQmdjQkFqRlJZQzREbVNSU093SUJBd0dYQlFmLy93Q3BBQUFEQXdXNEJBWUFGYThBQUFFQUxQL3VCQ01FbndCQkFCZEFDemc0RUNKK0dRb3pBQXR5QUNzeVB6OHpPUzh3TVVVdUF6YytBamNsTmpZM05pWUhCZ1lIQmhZV0Z3RWpBUzRDTno0Q0Z4NENCdzRDQndVT0FnY0dGaFlYRmo0Q056Y0dCZ2NHQmdjR0JnRitQM3BpTndRRVBtQTRBU1VrUUFjSFFUTTNWZ2NHSWpZV0FmKysva0FrUmkwRUJtR1dVMGlBVGdVREwwb3IvcmNjTXlJRkNEQlZNV2FvZmxBT29ROW9VQXNVREZUdER3RWtSV3BJU0c1WUpyOGFTUzgxUGdFQlNqWXBTRUVlL1UwQ1ZpOWdhajlaZWo0QkFqMXdUemRkVFIzWkZEQTdKRGhFSUFFRFNJS3BYd0Y3eWx3TUdndFNSd0FELytrQUFBTWpCSTBBQXdBSEFBc0FIVUFOQ0FrSkN3b0tCZ2Q5QXdJR0NnQS9Nek0vRWprdk16TXZNekF4WlFjaE54TURJeE1CQndVM0F5TWIvWjRiM01xMXl3RjFHUDJqR0ppWW1BUDErM01FamY2RmhMcUVBQUFHLzVvQUFBWUFCSTBBQXdBSEFBc0FFQUFVQUJnQU0wQVlDZ3NMR0JnUEJ3WVVFd1lUQmhNTkQzMERBZ0lYRncwS0FEOHpFVE1STXo4U09Ua3ZMeEV6RVRNUk14RXpFVE13TVdVSElUY0JCeUUzQVFjaE53Y0JJd0V6RXdjaE53RURJeE1GZUJ2OTFCb0NJeHIrSHhzQ2NodjkxQnVVL1NqT0EwNTZDeHY5dGhzQ3pLU3pvNWFXbGdJVmxaVUI0cGFXZXZ2dEJJMzlONWFXQXNuN2N3U05BQUFDQUI0QUFBT2lCSTBBQXdBWkFCZEFDZzhRRUFGOUJRUUVBQW9BUHpJdk16OHpMek13TVhNVE13TW5OeGN5TmpZM05pWW1KeWMzRng0Q0J3NENKeDdMdE1vSkc5aEdnVmdLQ0ROaVB1d2MwMnl5WmdnS2pOVjNCSTM3Yyt5WkFTdGVUVVJhTHdJQm1RRURVWjExZzZOTUFRQUQvL1QveGdTakJMY0FGUUFyQUM4QUcwQUxMeThjRVg0dExTY0dDM0lBS3pJeWZDOFlQek16ZkM4d01VRUhEZ01uTGdNM056NERGeDREQnpjMkxnSW5KZzRDQndjR0hnSVhGajRDQVFFakFRUTZCdzlaazhsOWQ2ZGtKQXNJRGx1VXlIeDNwMlFreGdnSENqTm5WRm1IWURvS0NRZ0xNMmRVVzRsZk9BRXQrL0NmQkJBQ2JVSjEwS0JaQXdKZm5zZHJSSFBRbjFrQ0ExNmV4cTFGUm94MFNRTURSSGFWVGtWRmpubE1Bd05GZVpnQzIvc1BCUEVBQkFBZUFBQUUxUVNOQUFNQUJ3QUxBQThBRzBBTUFnT0FEZzhQQ3dkOUNnWUtBRDh6UHpNekx6TWF6REl3TVVFSElUY1RBeU1USVFNakV4Y0hJVGNEclJ2OWNodCt5clhMQTdMTHRNcnZHL3VmR3dLTG1aa0NBdnR6QkkzN2N3U05wcGlZQUFJQUh2NUhCSnNFalFBSkFCc0FIMEFQRnhBUGNna0RCbjBJQ2dvQ0FnVUtBRDh6RVRNUk16OHpNeXN5TURGQkF5TUJBeU1UTXdFVEF6TUhEZ0luSmlZbk54WVdNekkyTmpjRW04dXUva3VhdGN1dEFiYWF3TFFVRFZtWWJSODVIaDhZTUJnM1JpY0lCSTM3Y3dOMC9Jd0VqZnlNQTNUN3FJMW1vRnNCQVFvSm5BWUpOMWN3QVAvL0FCb0NId0lRQXJjR0JnQVJBQUFBQXdBdkFBQUU3UVd3QUJvQUhnQWlBQ05BRVFJQkFSMGlJU0VkRGc4UEhnSnlIUWh5QUNzck1oRXpFVGt2TXhFekVUTXdNV0VoTndVeU5qWTNOell1QWljbE53VWVBd2NIRGdJRUF3TWpFd0VISVRjQjVQN05IUUVibittT0Z3ME1FVXFPY1A2MkhBRXlrdEdCTHhBTUZYekMvd0JyL2IzOUFXQWIvWlFiblFHTDc1WmFZTGlWV3dNQm5nRURjYjcwaGxlVSs3aGxCYkQ2VUFXdy9ZR1ltQUFBQXdBdkFBQUU3UVd3QUJvQUhnQWlBQ05BRVFJQkFSMGlJU0VkRGc4UEhnSnlIUWh5QUNzck1oRXpFVGt2TXhFekVUTXdNV0VoTndVeU5qWTNOell1QWljbE53VWVBd2NIRGdJRUF3TWpFd0VISVRjQjVQN05IUUVibittT0Z3ME1FVXFPY1A2MkhBRXlrdEdCTHhBTUZYekMvd0JyL2IzOUFXQWIvWlFiblFHTDc1WmFZTGlWV3dNQm5nRURjYjcwaGxlVSs3aGxCYkQ2VUFXdy9ZR1ltQUFBQXdBK0FBQUQrQVlBQUFNQUdnQWVBQmxBRFI0ZEZnb0hjZ01BY2hFQ0NuSUFLeklyS3pMRU1qQXhRUUVqQVFNblBnTVhIZ01IQXlNVE5pWW1KeVlPQWdFSElUY0IvdjcxdFFFTEdFb09TM3VyYmxkMVFoWUpkclo0QnhkTlNFeDZXemtCdVJ2OWxSc0dBUG9BQmdEOFJnSmh1NVpYQXdJL2JJMVAvVHNDeUVGcFB3SUNQbXVEQXVDWW1BQURBS2tBQUFVSkJiQUFBd0FIQUFzQUZVQUtBd29MQmdjQ2NnRUljZ0FyS3pJdk16SXdNVUVESXhNaEJ5RTNBUWNoTndORC9McjlBbjhjKzd3Y0F3d2IvWlViQmJENlVBV3ducDcrSHBpWUFBUC85UC90QXBVRlFRQURBQlVBR1FBZFFBNEtFUXR5R0JrWkFnSUVCQU1HY2dBck1pOHlFVE12TXlzeU1ERkJCeUUzRXpNREJoWVdGekkyTndjR0JpY3VBamNCQnlFM0FwVVovY2NaN3JTM0F3b21KeFlyRmcwZ1F5RlRYaUlIQWVVYi9aVWJCRHFPamdFSCs4a2pPQ0VCQndPWUNRa0JBVktDU2dIbG1Kai8vLyt2QUFBRWl3YzNCaVlBSlFBQUFRY0FSQUZuQVRjQUM3WURFQWNCQVdGV0FDczBBUC8vLzY4QUFBU1pCemNHSmdBbEFBQUJCd0IxQWZNQk53QUx0Z01PQXdFQllWWUFLelFBLy8vL3J3QUFCSXNITndZbUFDVUFBQUVIQUo0QStRRTNBQXUyQXhFSEFRRnNWZ0FyTkFELy8vK3ZBQUFFc0FjaUJpWUFKUUFBQVFjQXBRRUFBVHNBQzdZREhBTUJBV3RXQUNzMEFQLy8vNjhBQUFTTEJ2OEdKZ0FsQUFBQkJ3QnFBVE1CTndBTnR3UURJd2NCQVhoV0FDczBOQUQvLy8rdkFBQUVpd2VVQmlZQUpRQUFBUWNBb3dGK0FVSUFEYmNFQXhrSEFRRkhWZ0FyTkRRQS8vLy9yd0FBQkowSGt3WW1BQ1VBQUFFSEFqY0JnUUVpQUJLMkJRUURHd2NCQUxqL3NyQldBQ3MwTkRULy93Qncva0VFK1FYSEJpWUFKd0FBQVFjQWVRSEQvL1lBQzdZQktBVUFBQXBXQUNzMEFQLy9BRHNBQUFTeEIwSUdKZ0FwQUFBQkJ3QkVBVFlCUWdBTHRnUVNCd0VCYkZZQUt6UUEvLzhBT3dBQUJMRUhRZ1ltQUNrQUFBRUhBSFVCd2dGQ0FBdTJCQkFIQVFGc1ZnQXJOQUQvL3dBN0FBQUVzUWRDQmlZQUtRQUFBUWNBbmdESEFVSUFDN1lFRXdjQkFYZFdBQ3MwQVAvL0FEc0FBQVN4QndvR0pnQXBBQUFCQndCcUFRRUJRZ0FOdHdVRUpRY0JBWU5XQUNzME5BRC8vd0JKQUFBQ0Z3ZENCaVlBTFFBQUFRY0FSUC9zQVVJQUM3WUJCZ01CQVd4V0FDczBBUC8vQUVrQUFBTWVCMElHSmdBdEFBQUJCd0IxQUhnQlFnQUx0Z0VFQXdFQmJGWUFLelFBLy84QVNRQUFBdUlIUWdZbUFDMEFBQUVIQUo3L2ZRRkNBQXUyQVFjREFRRjNWZ0FyTkFELy93QkpBQUFEQ2djS0JpWUFMUUFBQVFjQWF2KzRBVUlBRGJjQ0FSa0RBUUdEVmdBck5EUUEvLzhBT3dBQUJYZ0hJZ1ltQURJQUFBRUhBS1VCTlFFN0FBdTJBUmdHQVFGclZnQXJOQUQvL3dCei8ra0ZFQWM1QmlZQU13QUFBUWNBUkFHS0FUa0FDN1lDTGhFQkFVOVdBQ3MwQVAvL0FIUC82UVVRQnprR0pnQXpBQUFCQndCMUFoVUJPUUFMdGdJc0VRRUJUMVlBS3pRQS8vOEFjLy9wQlJBSE9RWW1BRE1BQUFFSEFKNEJHd0U1QUF1MkFpOFJBUUZhVmdBck5BRC8vd0J6LytrRkVBY2tCaVlBTXdBQUFRY0FwUUVpQVQwQUM3WUNPaEVCQVZsV0FDczBBUC8vQUhQLzZRVVFCd0VHSmdBekFBQUJCd0JxQVZVQk9RQU50d01DUVJFQkFXWldBQ3MwTkFELy93QmovK2dGSEFjM0JpWUFPUUFBQVFjQVJBRmpBVGNBQzdZQkdBQUJBV0ZXQUNzMEFQLy9BR1AvNkFVY0J6Y0dKZ0E1QUFBQkJ3QjFBZTRCTndBTHRnRVdDd0VCWVZZQUt6UUEvLzhBWS8vb0JSd0hOd1ltQURrQUFBRUhBSjRBOUFFM0FBdTJBUmtBQVFGc1ZnQXJOQUQvL3dCai8rZ0ZIQWIvQmlZQU9RQUFBUWNBYWdFdUFUY0FEYmNDQVNzQUFRRjRWZ0FyTkRRQS8vOEFxQUFBQlRNSE5nWW1BRDBBQUFFSEFIVUJ2Z0UyQUF1MkFRa0NBUUZnVmdBck5BRC8vd0F4LytrRHh3WUFCaVlBUlFBQUFRY0FSQURhQUFBQUM3WUNQUThCQVl4V0FDczBBUC8vQURILzZRUU1CZ0FHSmdCRkFBQUJCd0IxQVdZQUFBQUx0Z0k3RHdFQmpGWUFLelFBLy84QU1mL3BBOUVHQUFZbUFFVUFBQUVHQUo1c0FBQUx0Z0krRHdFQmwxWUFLelFBLy84QU1mL3BCQ01GNndZbUFFVUFBQUVHQUtWekJBQUx0Z0pKRHdFQmxsWUFLelFBLy84QU1mL3BBL2dGeUFZbUFFVUFBQUVIQUdvQXBnQUFBQTIzQXdKUUR3RUJvMVlBS3pRMEFQLy9BREgvNlFQSEJsMEdKZ0JGQUFBQkJ3Q2pBUEVBQ3dBTnR3TUNSZzhCQVhKV0FDczBOQUQvL3dBeC8ra0VFQVpjQmlZQVJRQUFBUWNDTndEMC8rc0FFcllFQXdKSUR3QUF1UC9kc0ZZQUt6UTBOUC8vQUViK1FRUGlCRkVHSmdCSEFBQUJCd0I1QVQvLzlnQUx0Z0VvQ1FBQUNsWUFLelFBLy84QVJmL3JBOW9HQUFZbUFFa0FBQUVIQUVRQXZnQUFBQXUyQVM0TEFRR01WZ0FyTkFELy93QkYvK3NEOEFZQUJpWUFTUUFBQVFjQWRRRktBQUFBQzdZQkxBc0JBWXhXQUNzMEFQLy9BRVgvNndQYUJnQUdKZ0JKQUFBQkJnQ2VUd0FBQzdZQkx3c0JBWmRXQUNzMEFQLy9BRVgvNndQY0JjZ0dKZ0JKQUFBQkJ3QnFBSW9BQUFBTnR3SUJRUXNCQWFOV0FDczBOQUQvL3dBdkFBQUJ4UVgrQmlZQWpRQUFBUVlBUkpyK0FBdTJBUVlEQVFHZVZnQXJOQUQvL3dBdkFBQUN6QVgrQmlZQWpRQUFBUVlBZFNiK0FBdTJBUVFEQVFHZVZnQXJOQUQvL3dBdkFBQUNrQVgrQmlZQWpRQUFBUWNBbnY4ci8vNEFDN1lCQndNQkFhbFdBQ3MwQVAvL0FDOEFBQUs0QmNZR0pnQ05BQUFCQndCcS8yYi8vZ0FOdHdJQkdRTUJBYlZXQUNzME5BRC8vd0FnQUFBRUdnWHJCaVlBVWdBQUFRWUFwV29FQUF1MkFpb0RBUUdxVmdBck5BRC8vd0JHLytrRUZ3WUFCaVlBVXdBQUFRY0FSQURJQUFBQUM3WUNMZ1lCQVl4V0FDczBBUC8vQUViLzZRUVhCZ0FHSmdCVEFBQUJCd0IxQVZRQUFBQUx0Z0lzQmdFQmpGWUFLelFBLy84QVJ2L3BCQmNHQUFZbUFGTUFBQUVHQUo1WkFBQUx0Z0l2QmdFQmwxWUFLelFBLy84QVJ2L3BCQmNGNndZbUFGTUFBQUVHQUtWaEJBQUx0Z0k2QmdFQmxsWUFLelFBLy84QVJ2L3BCQmNGeUFZbUFGTUFBQUVIQUdvQWt3QUFBQTIzQXdKQkJnRUJvMVlBS3pRMEFQLy9BRnYvNkFRVUJnQUdKZ0JaQUFBQkJ3QkVBTXdBQUFBTHRnSWVFUUVCb0ZZQUt6UUEvLzhBVy8vb0JCUUdBQVltQUZrQUFBRUhBSFVCVndBQUFBdTJBaHdSQVFHZ1ZnQXJOQUQvL3dCYi8rZ0VGQVlBQmlZQVdRQUFBUVlBbmwwQUFBdTJBaDhSQVFHclZnQXJOQUQvL3dCYi8rZ0VGQVhJQmlZQVdRQUFBUWNBYWdDWEFBQUFEYmNEQWpFUkFRRzNWZ0FyTkRRQS8vLy9xdjVIQSt3R0FBWW1BRjBBQUFFSEFIVUJIZ0FBQUF1MkFoa0JBUUdnVmdBck5BRC8vLytxL2tjRDdBWElCaVlBWFFBQUFRWUFhbDRBQUEyM0F3SXVBUUVCdDFZQUt6UTBBUC8vLzY4QUFBU2ZCdVFHSmdBbEFBQUJCd0J3QVFRQlB3QUx0Z01RQXdFQnBsWUFLelFBLy84QU1mL3BCQklGclFZbUFFVUFBQUVHQUhCM0NBQUx0Z0k5RHdFQjBWWUFLelFBLy8vL3J3QUFCSXNIRHdZbUFDVUFBQUVIQUtFQkxRRTNBQXUyQXhNSEFRRlRWZ0FyTkFELy93QXgvK2tENndYWUJpWUFSUUFBQVFjQW9RQ2dBQUFBQzdZQ1FBOEJBWDVXQUNzMEFBQUUvNi8rVGdTTEJiQUFCQUFKQUEwQUl3QXJRQlVOREF3REZoMEdBQUlIQXdKeURnOFBCUVVDQ0hJQUt6SVJNeEV6S3pJU09Ua3ZNeEk1THpNd01VRUJJd0V6RXdNM013RURCeUUzQVJjT0FnY0dGaGN5TmpjWEJnWWpKaVkzUGdJRExQMU15UU1ZZ1lyeEUzZ0JIM1ljL09VY0F5VkxKVmRDQmdNY0lCb3pGd1FpVFNsUld3SUNXWUVGSlByY0JiRDZVQVU2ZHZwUUFodWVudjRmUFJ0Q1V6SWdJUUVRQ25zVkZRRm5VRTUxVkFBQUF3QXgvazREeHdSUUFCc0FPZ0JRQUN0QUZ4NDZPZzlEU2c5eUp6RUxjanM4UEJrS2Nna0ZEd2R5QUNzeU1pc3lFVE1yTWlzeUVqa3ZNekF4WlJNMkppWW5KZ1lHQndjK0F4Y2VBZ2NEQmdZWEJ3Y21OaE1ISnlJT0FnY0dGaFlYRmpZMk54Y09BeWN1QWpjK0F6TVRGdzRDQndZV0Z6STJOeGNHQmlNbUpqYytBZ0t1V2djbFZVQTRhMDRNdEFkWWhKaEliYUZTQzFNSkF3NEN0d3NCZFJXck5uaHNTZ2dHSjFBMVJZWmtFMElUVm5XR1ExdVRWUVlHWUplMFdMdEtKVmRDQmdNY0lSb3lGd1FpVFNsUld3SUNXWUc1QWk4K1hqUUNBU1pNT2dGUmVWRW5BUUpab0hEK0NEZHZOUkVCTGw0Q0JZSUJFQ3hUUWpaUExBRUJPR2hFV1VKdlVDd0JBazZOWG1lTVZDWDlxVDBiUWxNeUlDRUJFQXA3RlJVQloxQk9kVlQvL3dCdy8rZ0UrUWRYQmlZQUp3QUFBUWNBZFFJQUFWY0FDN1lCS0JBQkFXMVdBQ3MwQVAvL0FFYi82Z1BpQmdBR0pnQkhBQUFCQndCMUFTc0FBQUFMdGdFb0ZBRUJqRllBS3pRQS8vOEFjUC9vQlBrSFZ3WW1BQ2NBQUFFSEFKNEJCZ0ZYQUF1MkFTc1FBUUY0VmdBck5BRC8vd0JHLytvRDRnWUFCaVlBUndBQUFRWUFuakFBQUF1MkFTc1VBUUdYVmdBck5BRC8vd0J3LytnRStRY2JCaVlBSndBQUFRY0FvZ0hiQVZjQUM3WUJNUkFCQVlKV0FDczBBUC8vQUViLzZnUGlCY1FHSmdCSEFBQUJCd0NpQVFZQUFBQUx0Z0V4RkFFQm9WWUFLelFBLy84QWNQL29CUGtIV0FZbUFDY0FBQUVIQUo4QkdnRlhBQXUyQVM0UUFRRjJWZ0FyTkFELy93QkcvK29ENGdZQkJpWUFSd0FBQVFZQW4wVUFBQXUyQVM0VUFRR1ZWZ0FyTkFELy93QTdBQUFFendkREJpWUFLQUFBQVFjQW53RFNBVUlBQzdZQ0pSNEJBWFZXQUNzMEFQLy9BRWYvNkFXbkJnSUVKZ0JJQUFBQkJ3SEtCSmdGRXdBTHRnTTVBUUVBQUZZQUt6UUEvLzhBT3dBQUJMRUc3d1ltQUNrQUFBRUhBSEFBMGdGS0FBdTJCQklIQVFHeFZnQXJOQUQvL3dCRi8rc0Q5UVd0QmlZQVNRQUFBUVlBY0ZvSUFBdTJBUzRMQVFIUlZnQXJOQUQvL3dBN0FBQUVzUWNhQmlZQUtRQUFBUWNBb1FEOEFVSUFDN1lFRlFjQkFWNVdBQ3MwQVAvL0FFWC82d1BhQmRnR0pnQkpBQUFCQndDaEFJUUFBQUFMdGdFeEN3RUJmbFlBS3pRQS8vOEFPd0FBQkxFSEJnWW1BQ2tBQUFFSEFLSUJuUUZDQUF1MkJCa0hBUUdCVmdBck5BRC8vd0JGLytzRDJnWEVCaVlBU1FBQUFRY0FvZ0VsQUFBQUM3WUJOUXNCQWFGV0FDczBBQUFGQUR2K1RnU3hCYkFBQXdBSEFBc0FEd0FsQUNsQUZBb0xDeGdmRGc4UEJ3SnlFQkVSQXdJQ0JnaHlBQ3N5RVRNeUVUTXJNaEV6THpNNUx6TXdNV1VISVRjQkF5TVRBUWNoTndFSElUY0JGdzRDQndZV0Z6STJOeGNHQmlNbUpqYytBZ1BhSFAwVEd3RUovYjM5QXJNYi9YVWNBMUFjL1IwY0FWOUxKbGRDQlFRZElCb3lGd1FpVFNoUld3SUNXSUdkblowRkUvcFFCYkQ5anAyZEFuS2VudnFLUFJ0Q1V6SWdJUUVRQ25zVkZRRm5VRTUxVkFBQUFnQkYvbWdEMmdSUkFDc0FRUUFsUUJNU0V4TUxORHNPY2hrTEIzSXNMU1FrQUF0eUFDc3lFVGs1S3pJck1oSTVMek13TVVVdUF6YzNQZ01YSGdNSEJ5RTNCVGMySmlZbkpnNENCd2NHSGdJWEZqWTNGdzRDTnhjT0FnY0dGaGN5TmpjWEJnWWpKaVkzUGdJQjZtK2paeXdKQkFwU2lidHljWlpWR2dzTC9POFlBbGNEQ2lSZlVGTjZVaThKQkFZVU9XWkxXNUU4WnkrQ21qTktKVmRDQmdNY0lSa3pGd1FpVFNsUld3SUNXWUVVQWxXUnVtWXJhTW1pWHdNQ1hKZTdZbE9YQVJCSWhsY0NBMGw3a1VVcVFJSnJRd0lDVTBCWVJWNHVhVDBiUWxNeUlDRUJFQXA3RlJVQloxQk9kVlQvL3dBN0FBQUVzUWREQmlZQUtRQUFBUWNBbndEY0FVSUFDN1lFRmdjQkFYVldBQ3MwQVAvL0FFWC82d1BtQmdFR0pnQkpBQUFCQmdDZlpBQUFDN1lCTWdzQkFaVldBQ3MwQVAvL0FIVC82d1VGQjFjR0pnQXJBQUFCQndDZUFQNEJWd0FMdGdFdkVBRUJlRllBS3pRQS8vOEFBLzVSQkNrR0FBWW1BRXNBQUFFR0FKNVNBQUFMdGdOQ0dnRUJsMVlBS3pRQS8vOEFkUC9yQlFVSEx3WW1BQ3NBQUFFSEFLRUJNd0ZYQUF1MkFURVFBUUZmVmdBck5BRC8vd0FEL2xFRUtRWFlCaVlBU3dBQUFRY0FvUUNIQUFBQUM3WURSQm9CQVg1V0FDczBBUC8vQUhULzZ3VUZCeHNHSmdBckFBQUJCd0NpQWRRQlZ3QUx0Z0UxRUFFQmdsWUFLelFBLy84QUEvNVJCQ2tGeEFRbUFFc0FBQUVIQUtJQktBQUFBQXUyQTBnYUFRR2hWZ0FyTkFELy93QjAvZk1GQlFYSEJpWUFLd0FBQVFjQnlnR04vcFVBRHJRQk5RVUJBYmovbUxCV0FDczAvLzhBQS81UkJDa0dsQVFtQUVzQUFBRUhBa1FCTVFCWEFBdTJBejhhQVFHWVZnQXJOQUQvL3dBN0FBQUZkd2RDQmlZQUxBQUFBUWNBbmdFaEFVSUFDN1lERHdzQkFYZFdBQ3MwQVAvL0FDQUFBQVBhQjBFR0pnQk1BQUFCQndDZUFGVUJRUUFMdGdJZUF3RUJKbFlBS3pRQS8vOEFTUUFBQXpVSExRWW1BQzBBQUFFSEFLWC9oUUZHQUF1MkFSSURBUUYyVmdBck5BRC8vd0FSQUFBQzR3WHBCaVlBalFBQUFRY0FwZjh6QUFJQUM3WUJFZ01CQWFoV0FDczBBUC8vQUVrQUFBTWpCdThHSmdBdEFBQUJCd0J3LzRnQlNnQUx0Z0VHQXdFQnNWWUFLelFBLy84QUxnQUFBdEVGcXdZbUFJMEFBQUVIQUhEL05nQUdBQXUyQVFZREFRSGpWZ0FyTkFELy93QkpBQUFDL1FjYUJpWUFMUUFBQVFjQW9mK3lBVUlBQzdZQkNRTUJBVjVXQUNzMEFQLy9BQzhBQUFLckJkWUdKZ0NOQUFBQkJ3Q2gvMkQvL2dBTHRnRUpBd0VCa0ZZQUt6UUEvLy8vaS81WEFnSUZzQVltQUMwQUFBRUdBS1RkQ1FBTHRnRUZBZ0FBQUZZQUt6UUEvLy8vYmY1T0FlVUZ4Z1ltQUUwQUFBRUdBS1MvQUFBTHRnSVJBZ0FBQUZZQUt6UUEvLzhBU1FBQUFqY0hCZ1ltQUMwQUFBRUhBS0lBVXdGQ0FBdTJBUTBEQVFHQlZnQXJOQUQvL3dCSi8rZ0dZQVd3QkNZQUxRQUFBQWNBTGdJY0FBRC8vd0F2L2tZRHVRWEdCQ1lBVFFBQUFBY0FUZ0hqQUFELy93QUgvK2dGREFjMUJpWUFMZ0FBQVFjQW5nR25BVFVBQzdZQkZ3RUJBV3BXQUNzMEFQLy8vd24rUndLWEJkY0dKZ0NjQUFBQkJ3Q2UvekwvMXdBTHRnRVZBQUVCZ2xZQUt6UUEvLzhBTy81V0JWRUZzQVFtQUM4QUFBRUhBY29CV3Y3NEFBNjBBeGNDQVFDNC8rZXdWZ0FyTlAvL0FDRCtRd1FiQmdBR0pnQlBBQUFCQndIS0FOais1UUFPdEFNWEFnRUJ1UC9Vc0ZZQUt6VC8vd0E3QUFBRHNRY3lCaVlBTUFBQUFRY0FkUUJtQVRJQUM3WUNDQWNCQVZ4V0FDczBBUC8vQUM4QUFBTVBCNWNHSmdCUUFBQUJCd0IxQUdrQmx3QUx0Z0VFQXdFQmNWWUFLelFBLy84QU8vNEdBN0VGc0FRbUFEQUFBQUVIQWNvQkp2Nm9BQTYwQWhFQ0FRRzQvNWV3VmdBck5QLy8vNkwrQmdIdkJnQUVKZ0JRQUFBQkJ3SEsvNzcrcUFBT3RBRU5BZ0VCdVArWHNGWUFLelQvL3dBN0FBQURzUVd4QmlZQU1BQUFBUWNCeWdLYUJNSUFDN1lDRVFjQUFBRldBQ3MwQVAvL0FDOEFBQU03QmdJRUpnQlFBQUFCQndIS0Fpd0ZFd0FMdGdFTkF3QUFBbFlBS3pRQS8vOEFPd0FBQTdFRnNBWW1BREFBQUFBSEFLSUJUUDNFLy84QUx3QUFBcTRHQUFRbUFGQUFBQUFIQUtJQXl2MjEvLzhBT3dBQUJYZ0hOd1ltQURJQUFBRUhBSFVDSndFM0FBdTJBUW9HQVFGaFZnQXJOQUQvL3dBZ0FBQUVBd1lBQmlZQVVnQUFBUWNBZFFGZEFBQUFDN1lDSEFNQkFhQldBQ3MwQVAvL0FEditCZ1Y0QmJBRUpnQXlBQUFCQndIS0FZZitxQUFPdEFFVEJRRUJ1UCtYc0ZZQUt6VC8vd0FnL2dZRDJnUlJCQ1lBVWdBQUFRY0J5Z0R1L3FnQURyUUNKUUlCQWJqL2w3QldBQ3MwLy84QU93QUFCWGdIT0FZbUFESUFBQUVIQUo4QlFRRTNBQXUyQVJBSkFRRnFWZ0FyTkFELy93QWdBQUFEK1FZQkJpWUFVZ0FBQVFZQW4zY0FBQXUyQWlJREFRR3BWZ0FyTkFELy93QWdBQUFEMmdZRkJpWUFVZ0FBQVFjQnlnQkVCUllBQzdZQ0lBTUJBVHBXQUNzMEFQLy9BSFAvNlFVUUJ1WUdKZ0F6QUFBQkJ3QndBU1lCUVFBTHRnSXVFUUVCbEZZQUt6UUEvLzhBUnYvcEJCY0ZyUVltQUZNQUFBRUdBSEJrQ0FBTHRnSXVCZ0VCMFZZQUt6UUEvLzhBYy8vcEJSQUhFUVltQURNQUFBRUhBS0VCVHdFNUFBdTJBakVSQVFGQlZnQXJOQUQvL3dCRy8ra0VGd1hZQmlZQVV3QUFBUWNBb1FDT0FBQUFDN1lDTVFZQkFYNVdBQ3MwQVAvL0FIUC82UVZVQnpnR0pnQXpBQUFCQndDbUFaWUJPUUFOdHdNQ0xCRUJBVVZXQUNzME5BRC8vd0JHLytrRWtnWC9CaVlBVXdBQUFRY0FwZ0RVQUFBQURiY0RBaXdHQVFHQ1ZnQXJORFFBLy84QU93QUFCTHdITndZbUFEWUFBQUVIQUhVQnR3RTNBQXUyQWg0QUFRRmhWZ0FyTkFELy93QWdBQUFEWXdZQUJpWUFWZ0FBQVFjQWRRQzlBQUFBQzdZQ0Z3TUJBYUJXQUNzMEFQLy9BRHYrQmdTOEJiQUVKZ0EyQUFBQkJ3SEtBUjMrcUFBT3RBSW5HQUVCdVArWHNGWUFLelQvLy8rZi9nY0MwUVJVQkNZQVZnQUFBUWNCeXYrNy9xa0FEclFDSUFJQkFiai9tTEJXQUNzMC8vOEFPd0FBQkx3SE9BWW1BRFlBQUFFSEFKOEEwUUUzQUF1MkFpUUFBUUZxVmdBck5BRC8vd0FnQUFBRFdRWUJCaVlBVmdBQUFRWUFuOWNBQUF1MkFoMERBUUdwVmdBck5BRC8vd0FwLytvRW93YzVCaVlBTndBQUFRY0FkUUhEQVRrQUM3WUJPZzhCQVU5V0FDczBBUC8vQUM3LzZ3UHRCZ0FHSmdCWEFBQUJCd0IxQVVjQUFBQUx0Z0UyRGdFQmpGWUFLelFBLy84QUtmL3FCS01IT1FZbUFEY0FBQUVIQUo0QXlRRTVBQXUyQVQwUEFRRmFWZ0FyTkFELy93QXUvK3NEc3dZQUJpWUFWd0FBQVFZQW5rMEFBQXUyQVRrT0FRR1hWZ0FyTkFELy93QXAva29Fb3dYR0JpWUFOd0FBQVFjQWVRR1MvLzhBQzdZQk9pc0FBQk5XQUNzMEFQLy9BQzcrUVFPekJFOEdKZ0JYQUFBQkJ3QjVBVnYvOWdBTHRnRTJLUUFBQ2xZQUt6UUEvLzhBS2YzN0JLTUZ4Z1ltQURjQUFBRUhBY29CTFA2ZEFBNjBBVU1yQVFHNC82Q3dWZ0FyTlAvL0FDNzk4Z096QkU4R0pnQlhBQUFCQndIS0FQVCtsQUFPdEFFL0tRRUJ1UCtYc0ZZQUt6VC8vd0FwLytvRW93YzZCaVlBTndBQUFRY0Fud0RkQVRrQUM3WUJRQThCQVZoV0FDczBBUC8vQUM3LzZ3UGpCZ0VHSmdCWEFBQUJCZ0NmWVFBQUM3WUJQQTRCQVpWV0FDczBBUC8vQUtuOS9BVUpCYkFHSmdBNEFBQUJCd0hLQVI3K25nQU90QUlSQWdFQnVQK05zRllBS3pULy93QkQvZndDbFFWQkJpWUFXQUFBQVFjQnlnQ0MvcDRBRHJRQ0h4RUJBYmovb2JCV0FDczAvLzhBcWY1TEJRa0ZzQVltQURnQUFBRUhBSGtCaFFBQUFBdTJBZ2dDQVFBQVZnQXJOQUQvL3dCRC9rc0NsUVZCQmlZQVdBQUFBUWNBZVFEcEFBQUFDN1lDRmhFQUFCUldBQ3MwQVAvL0FLa0FBQVVKQnpjR0pnQTRBQUFCQndDZkFOTUJOZ0FMdGdJT0F3RUJhVllBS3pRQS8vOEFRLy90QTQwR2VnUW1BRmdBQUFFSEFjb0NmZ1dMQUE2MEFob0VBUUM0LzZpd1ZnQXJOUC8vQUdQLzZBVWNCeUlHSmdBNUFBQUJCd0NsQVBzQk93QUx0Z0VrQ3dFQmExWUFLelFBLy84QVcvL29CQlVGNndZbUFGa0FBQUVHQUtWbEJBQUx0Z0lxRVFFQnFsWUFLelFBLy84QVkvL29CUndHNUFZbUFEa0FBQUVIQUhBQS93RS9BQXUyQVJnTEFRR21WZ0FyTkFELy93QmIvK2dFRkFXdEJpWUFXUUFBQVFZQWNHZ0lBQXUyQWg0UkFRSGxWZ0FyTkFELy93QmovK2dGSEFjUEJpWUFPUUFBQVFjQW9RRW9BVGNBQzdZQkd3QUJBVk5XQUNzMEFQLy9BRnYvNkFRVUJkZ0dKZ0JaQUFBQkJ3Q2hBSklBQUFBTHRnSWhFUUVCa2xZQUt6UUEvLzhBWS8vb0JSd0hsQVltQURrQUFBRUhBS01CZVFGQ0FBMjNBZ0VoQUFFQlIxWUFLelEwQVAvL0FGdi82QVFVQmwwR0pnQlpBQUFCQndDakFPSUFDd0FOdHdNQ0p4RUJBWVpXQUNzME5BRC8vd0JqLytnRkxRYzJCaVlBT1FBQUFRY0FwZ0Z2QVRjQURiY0NBUllBQVFGWFZnQXJORFFBLy84QVcvL29CSllGL3dZbUFGa0FBQUVIQUtZQTJBQUFBQTIzQXdJY0VRRUJsbFlBS3pRMEFBQUNBR1ArZWdVY0JiQUFGUUFyQUJ0QURSNGxBUXNDY2hjV0VSRUdDWElBS3pJU09Ua3JNaTh6TURGQk13TU9BaWN1QWpjVE13TUdGaFlYRmpZMk53TVhEZ0lIQmhZWE1qWTNGd1lHSXlZbU56NENCR0M4cUJhaStabVIwV1VScUxxbkN6RjdaR3FqWnhEU1N5WlhRZ1VFSFNBYU1oY0VJazBvVVZzQ0FsaUJCYkQ4S1pqZ2VRTURmTnVTQTluOEpsK1VWd01EVVpoby9vODlHMEpUTWlBaEFSQUtleFVWQVdkUVRuVlVBQUFEQUZ2K1RnUVVCRG9BQkFBYkFERUFJVUFSSkNzUGNnRVJCbkljSFIwRUJCZ0xDM0lBS3pJeUVUTVJNeXN5S3pJd01VRVRNd01qRXpjT0F5Y3VBemNUTXdNR0hnSVhGalkyQXhjT0FnY0dGaGN5TmpjWEJnWWpKaVkzUGdJQzBJNjJ2SzFwU2cxQ2NhZHlXWGRFRmdoMXRYVUVCaDQvTkd5V1dBSkxKVmRDQmdRZElCb3lHQVFqVENsUld3SUNXWUVCQkFNMis4WUIzZ05tdDQxUEF3TkNjSkJRQXJyOVF5eFZSaXNDQkZtZS9yNDlHMEpUTWlBaEFSQUtleFVWQVdkUVRuVlVBUC8vQU1NQUFBZEJCemNHSmdBN0FBQUJCd0NlQWR3Qk53QUx0Z1FaRlFFQmJGWUFLelFBLy84QWdBQUFCZjRHQUFZbUFGc0FBQUVIQUo0Qkd3QUFBQXUyQkJrVkFRR3JWZ0FyTkFELy93Q29BQUFGTXdjMkJpWUFQUUFBQVFjQW5nREVBVFlBQzdZQkRBSUJBV3RXQUNzMEFQLy8vNnIrUndQc0JnQUdKZ0JkQUFBQkJnQ2VKQUFBQzdZQ0hBRUJBYXRXQUNzMEFQLy9BS2dBQUFVekJ2NEdKZ0E5QUFBQkJ3QnFBUDRCTmdBTnR3SUJIZ0lCQVhkV0FDczBOQUQvLy8vc0FBQUV6Z2MzQmlZQVBnQUFBUWNBZFFHOUFUY0FDN1lERGcwQkFXRldBQ3MwQVAvLy8rNEFBQVBQQmdBR0pnQmVBQUFCQndCMUFTVUFBQUFMdGdNT0RRRUJvRllBS3pRQS8vLy83QUFBQk00Ryt3WW1BRDRBQUFFSEFLSUJtQUUzQUF1MkF4Y0lBUUYyVmdBck5BRC8vLy91QUFBRHp3WEVCaVlBWGdBQUFRY0FvZ0VBQUFBQUM3WURGd2dCQWJWV0FDczBBUC8vLyt3QUFBVE9CemdHSmdBK0FBQUJCd0NmQU5jQk53QUx0Z01VQ0FFQmFsWUFLelFBLy8vLzdnQUFBODhHQVFZbUFGNEFBQUVHQUo4L0FBQUx0Z01VQ0FFQnFWWUFLelFBLy8vL2d3QUFCM2tIUWdZbUFJRUFBQUVIQUhVQytBRkNBQXUyQmhrREFRRnNWZ0FyTkFELy93QVQvK29HVndZQkJpWUFoZ0FBQVFjQWRRSnpBQUVBQzdZRFh3OEJBWTFXQUNzMEFQLy9BQ0Qvb3dXY0I0QUdKZ0NEQUFBQkJ3QjFBaWtCZ0FBTHRnTTBGZ0VCbGxZQUt6UUEvLzhBT3Y5NUJDa0Yvd1ltQUlrQUFBRUhBSFVCT3YvL0FBdTJBekFLQVFHTFZnQXJOQUQvLy8rdi8vOEVEQVNOQmlZQ1FBQUFBQWNDTnY4Yy8zYi8vLyt2Ly84RURBU05CaVlDUUFBQUFBY0NOdjhjLzNiLy93QnVBQUFFUWdTTkJpWUI2QUFBQUFZQ05qN2YvLy8vcGdBQUErTUdIZ1ltQWtNQUFBRUhBRVFBM3dBZUFBdTJBeEFIQVFGclZnQXJOQUQvLy8rbUFBQUVFQVllQmlZQ1F3QUFBUWNBZFFGcUFCNEFDN1lERGdNQkFXdFdBQ3MwQVAvLy82WUFBQVBqQmg0R0pnSkRBQUFCQmdDZWNCNEFDN1lERXdNQkFXdFdBQ3MwQVAvLy82WUFBQVFuQmdrR0pnSkRBQUFCQmdDbGR5SUFDN1lER3dNQkFXdFdBQ3MwQVAvLy82WUFBQVA4QmVZR0pnSkRBQUFCQndCcUFLb0FIZ0FOdHdRREZ3TUJBV3RXQUNzME5BRC8vLyttQUFBRDR3WjdCaVlDUXdBQUFRY0Fvd0QxQUNrQURiY0VBeGtEQVFGUlZnQXJORFFBLy8vL3BnQUFCQlFHZWdZbUFrTUFBQUFIQWpjQStBQUovLzhBU1A1SEJETUVvQVltQWtFQUFBQUhBSGtCYWYvOC8vOEFIZ0FBQS9BR0hnWW1BamdBQUFFSEFFUUF0QUFlQUF1MkJCSUhBUUZzVmdBck5BRC8vd0FlQUFBRDhBWWVCaVlDT0FBQUFRY0FkUUZBQUI0QUM3WUVFQWNCQVd4V0FDczBBUC8vQUI0QUFBUHdCaDRHSmdJNEFBQUJCZ0NlUlI0QUM3WUVGZ2NCQVd4V0FDczBBUC8vQUI0QUFBUHdCZVlHSmdJNEFBQUJCZ0JxZng0QURiY0ZCQmtIQVFHRVZnQXJORFFBLy84QUt3QUFBY01HSGdZbUFmTUFBQUVHQUVTWUhnQUx0Z0VHQXdFQmExWUFLelFBLy84QUt3QUFBc2tHSGdZbUFmTUFBQUVHQUhVakhnQUx0Z0VFQXdFQmExWUFLelFBLy84QUt3QUFBbzRHSGdZbUFmTUFBQUVIQUo3L0tRQWVBQXUyQVFrREFRRjJWZ0FyTkFELy93QXJBQUFDdFFYbUJpWUI4d0FBQVFjQWF2OWpBQjRBRGJjQ0FRMERBUUdFVmdBck5EUUEvLzhBSGdBQUJKc0dDUVltQWU0QUFBRUhBS1VBb1FBaUFBdTJBUmdHQVFGMlZnQXJOQUQvL3dCTS8rMEVSZ1llQmlZQjdRQUFBUWNBUkFEM0FCNEFDN1lDTGhFQkFWdFdBQ3MwQVAvL0FFei83UVJHQmg0R0pnSHRBQUFCQndCMUFZSUFIZ0FMdGdJc0VRRUJXMVlBS3pRQS8vOEFUUC90QkVZR0hnWW1BZTBBQUFFSEFKNEFpQUFlQUF1MkFqRVJBUUZiVmdBck5BRC8vd0JNLyswRVJnWUpCaVlCN1FBQUFRY0FwUUNRQUNJQUM3WUNNUkVCQVc5V0FDczBBUC8vQUV6LzdRUkdCZVlHSmdIdEFBQUJCd0JxQU1JQUhnQU50d01DTlJFQkFYUldBQ3MwTkFELy93QkMvK3NFVHdZZUJpWUI1d0FBQVFjQVJBRGFBQjRBQzdZQkdBc0JBV3RXQUNzMEFQLy9BRUwvNndSUEJoNEdKZ0huQUFBQkJ3QjFBV1VBSGdBTHRnRVdDd0VCYTFZQUt6UUEvLzhBUXYvckJFOEdIZ1ltQWVjQUFBRUdBSjVySGdBTHRnRWJDd0VCYTFZQUt6UUEvLzhBUXYvckJFOEY1Z1ltQWVjQUFBRUhBR29BcFFBZUFBMjNBZ0VmQ3dFQmhGWUFLelEwQVAvL0FIVUFBQVJsQmg0R0pnSGpBQUFCQndCMUFUd0FIZ0FMdGdNT0NRRUJhMVlBS3pRQS8vLy9wZ0FBQkJZRnl3WW1Ba01BQUFFR0FIQjdKZ0FMdGdNUUF3RUJzRllBS3pRQS8vLy9wZ0FBQSs4RjlnWW1Ba01BQUFFSEFLRUFwQUFlQUF1MkF4TURBUUZkVmdBck5BQUFCUCttL2s0RDR3U05BQVFBQ1FBTkFDTUFJVUFQRFF3TUF4WWRDQU45RHc0RkJRRVNBRDh6RVRNelB6TXZNeEk1THpNd01VRUJJd0V6RXdNM013RURCeUUzQVJjT0FnY0dGaGN5TmpjWEJnWWpKaVkzUGdJQ2tmM1h3Z0tjZkhiU0RuTUJBSUViL1dBYkFyVkxKbGRDQmdNZElCb3lGd1FpVFNoU1d3SUNXWUVENGZ3ZkJJMzdjd1A1bFB0ekFhK1ltUDZMUFJ0Q1V6SWdJUUVRQ25zVkZRRm5VRTUxVkFELy93QkkvKzBFTXdZZUJpWUNRUUFBQVFjQWRRRndBQjRBQzdZQktCQUJBVnRXQUNzMEFQLy9BRWovN1FRekJoNEdKZ0pCQUFBQkJnQ2VkaDRBQzdZQkxSQUJBVnRXQUNzMEFQLy9BRWovN1FRekJlSUdKZ0pCQUFBQkJ3Q2lBVXNBSGdBTHRnRXhFQUVCY0ZZQUt6UUEvLzhBU1AvdEJETUdId1ltQWtFQUFBRUhBSjhBaWdBZUFBdTJBUzRRQVFGa1ZnQXJOQUQvL3dBZS8vOEVEQVlmQmlZQ1FBQUFBUVlBbnpZZUFBdTJBaVFkQVFGMFZnQXJOQUQvL3dBZUFBQUQ4QVhMQmlZQ09BQUFBUVlBY0ZBbUFBdTJCQklIQVFHd1ZnQXJOQUQvL3dBZUFBQUQ4QVgyQmlZQ09BQUFBUVlBb1hvZUFBdTJCQlVIQVFGZVZnQXJOQUQvL3dBZUFBQUQ4QVhpQmlZQ09BQUFBUWNBb2dFYkFCNEFDN1lFR1FjQkFZQldBQ3MwQUFBRkFCNytUZ1B3QkkwQUF3QUhBQXNBRHdBbEFDTkFFQmdmQ3dvS0JnOE9CMzBSRUJBRkJoSUFQek16RVRNL016TVNPUzh6THpNd01XVUhJVGNUQXlNVEFRY2hOd0VISVRjQkZ3NENCd1lXRnpJMk54Y0dCaU1tSmpjK0FnTkdHLzE3Rzl6S3Rjc0NaQnY5enhzQzFCdjlnQnNCTlVzbFdFSUZCQjBnR2pJWUJDTk1LVkZiQWdKWmdaaVltQVAxKzNNRWpmNFpsNWNCNTVtWis2MDlHMEpUTWlBaEFSQUtleFVWQVdkUVRuVlUvLzhBSGdBQUEvQUdId1ltQWpnQUFBRUdBSjlhSGdBTHRnUVdCd0VCZEZZQUt6UUEvLzhBVFAvdkJEd0dIZ1ltQWZVQUFBRUdBSjV6SGdBTHRnRXdFQUVCWmxZQUt6UUEvLzhBVFAvdkJEd0Y5Z1ltQWZVQUFBRUhBS0VBcHdBZUFBdTJBVEFRQVFGTlZnQXJOQUQvL3dCTS8rOEVQQVhpQmlZQjlRQUFBUWNBb2dGSUFCNEFDN1lCTkJBQkFYQldBQ3MwQVAvL0FFejkrQVE4QktBR0pnSDFBQUFCQndIS0FRZittZ0FPdEFFMEJRRUJ1UCtac0ZZQUt6VC8vd0FlQUFBRW13WWVCaVlCOUFBQUFRY0FuZ0NSQUI0QUM3WURFUWNCQVhaV0FDczBBUC8vQUE0QUFBTGdCZ2tHSmdIekFBQUJCd0NsL3pBQUlnQUx0Z0VKQXdFQmYxWUFLelFBLy84QUt3QUFBczhGeXdZbUFmTUFBQUVIQUhEL05BQW1BQXUyQVFZREFRR3dWZ0FyTkFELy93QXJBQUFDcUFYMkJpWUI4d0FBQVFjQW9mOWRBQjRBQzdZQkNRTUJBVjFXQUNzMEFQLy8vNEwrVGdHcUJJMEdKZ0h6QUFBQUJnQ2sxQUQvL3dBckFBQUI0Z1hpQmlZQjh3QUFBUVlBb3Y0ZUFBdTJBUTBEQVFHQVZnQXJOQUQvLy8vMi8rMEVhUVllQmlZQjhnQUFBUWNBbmdFRUFCNEFDN1lCR1FFQkFYWldBQ3MwQVAvL0FCNytBZ1NBQkkwR0pnSHhBQUFBQndIS0FORCtwUC8vQUI0QUFBTWpCaDRHSmdId0FBQUJCZ0IxR1I0QUM3WUNDQWNCQVd0V0FDczBBUC8vQUI3K0JBTWpCSTBHSmdId0FBQUJCd0hLQU12K3BnQU90QUlSQmdFQnVQK1ZzRllBS3pULy93QWVBQUFESXdTUEJpWUI4QUFBQUFjQnlnSVRBNkQvL3dBZUFBQURJd1NOQmlZQjhBQUFBQWNBb2dEZy9UWC8vd0FlQUFBRW13WWVCaVlCN2dBQUFRY0FkUUdVQUI0QUM3WUJDZ1lCQVd0V0FDczBBUC8vQUI3K0FBU2JCSTBHSmdIdUFBQUFCd0hLQVNUK292Ly9BQjRBQUFTYkJoOEdKZ0h1QUFBQkJ3Q2ZBSzRBSGdBTHRnRVFCZ0VCZEZZQUt6UUEvLzhBVFAvdEJFWUZ5d1ltQWUwQUFBRUhBSEFBa3dBbUFBdTJBaTRSQVFHZ1ZnQXJOQUQvL3dCTS8rMEVSZ1gyQmlZQjdRQUFBUWNBb1FDOUFCNEFDN1lDTVJFQkFVMVdBQ3MwQVAvL0FFei83UVRCQmgwR0pnSHRBQUFCQndDbUFRTUFIZ0FOdHdNQ01CRUJBVkZXQUNzME5BRC8vd0FkQUFBRC9RWWVCaVlCNmdBQUFRY0FkUUV2QUI0QUM3WUNId0FCQVd0V0FDczBBUC8vQUIzK0JBUDlCSTBHSmdIcUFBQUFCd0hLQU1uK3B2Ly9BQjBBQUFQOUJoOEdKZ0hxQUFBQkJnQ2ZTUjRBQzdZQ0pRQUJBWFJXQUNzMEFQLy9BQkwvN2dQckJoNEdKZ0hwQUFBQkJ3QjFBVVVBSGdBTHRnRTZEd0VCVzFZQUt6UUEvLzhBRXYvdUErc0dIZ1ltQWVrQUFBRUdBSjVMSGdBTHRnRS9Ed0VCWmxZQUt6UUEvLzhBRXY1TEErc0VuZ1ltQWVrQUFBQUhBSGtCU1FBQS8vOEFFdi91QStzR0h3WW1BZWtBQUFFR0FKOWZIZ0FMdGdGQUR3RUJabFlBS3pRQS8vOEFidjMvQkVJRWpRWW1BZWdBQUFFSEFjb0F6djZoQUE2MEFoRUNBUUc0LzVDd1ZnQXJOUC8vQUc0QUFBUkNCaDhHSmdIb0FBQUJCZ0NmVXg0QUM3WUNEZ2NCQVhSV0FDczBBUC8vQUc3K1RnUkNCSTBHSmdIb0FBQUFCd0I1QVRVQUEvLy9BRUwvNndSUEJna0dKZ0huQUFBQkJnQ2xjeUlBQzdZQkd3c0JBWDlXQUNzMEFQLy9BRUwvNndSUEJjc0dKZ0huQUFBQkJnQndkaVlBQzdZQkdBc0JBYkJXQUNzMEFQLy9BRUwvNndSUEJmWUdKZ0huQUFBQkJ3Q2hBSjhBSGdBTHRnRWJDd0VCWFZZQUt6UUEvLzhBUXYvckJFOEdld1ltQWVjQUFBRUhBS01BOEFBcEFBMjNBZ0VoQ3dFQlVWWUFLelEwQVAvL0FFTC82d1NrQmgwR0pnSG5BQUFCQndDbUFPWUFIZ0FOdHdJQkdnc0JBV0ZXQUNzME5BQUFBZ0JDL25NRVR3U05BQlVBS3dBYVFBd2VKUmNXRmhFR0MzSU1BSDBBUHpJck1qSVJNeTh6TURGQk13TU9BaWN1QWpjVE13TUdGaFlYRmpZMk53TVhEZ0lIQmhZWE1qWTNGd1lHSXlZbU56NENBNW0yZ3hLUDJIOTR1V0VPZzdPRUNTOW9UVktFVlEycFNpVlhRZ1lESENFYU1oY0VJazBvVWxzQ0FsbUJCSTM4OUlHMlh3TUNZYk45QXd6ODgwMXVQQUlDT0hGUy90ODlHMEpUTWlBaEFSQUtleFVWQVdkUVRuVlUvLzhBbEFBQUJpa0dIZ1ltQWVVQUFBRUhBSjRCTndBZUFBdTJCQnNLQVFGMlZnQXJOQUQvL3dCMUFBQUVaUVllQmlZQjR3QUFBUVlBbmtFZUFBdTJBeE1KQVFGMlZnQXJOQUQvL3dCMUFBQUVaUVhtQmlZQjR3QUFBUVlBYW53ZUFBMjNCQU1YQ1FFQmhGWUFLelEwQVAvLy85MEFBQVFPQmg0R0pnSGlBQUFCQndCMUFUd0FIZ0FMdGdNT0RRRUJhMVlBS3pRQS8vLy8zUUFBQkE0RjRnWW1BZUlBQUFFSEFLSUJGd0FlQUF1MkF4Y05BUUdBVmdBck5BRC8vLy9kQUFBRURnWWZCaVlCNGdBQUFRWUFuMVllQUF1MkF4UU5BUUYwVmdBck5BRC8vLyt2QUFBRWl3WStCaVlBSlFBQUFRWUFyZ1AvQUE2MEF3NERBQUM0L3o2d1ZnQXJOUC8vQUFNQUFBVVZCajhFSmdBcFpBQUJCd0N1L3VBQUFBQU90QVFRQndBQXVQOC9zRllBS3pULy93QVJBQUFGMndaQkJDWUFMR1FBQUFjQXJ2N3VBQUwvL3dBWEFBQUNaZ1pCQkNZQUxXUUFBUWNBcnY3MEFBSUFEclFCQkFNQUFMai9RYkJXQUNzMC8vOEFhLy9wQlNRR1BnUW1BRE1VQUFFSEFLNy9TUC8vQUE2MEFpd1JBQUM0L3lxd1ZnQXJOUC8vLyswQUFBV1hCajRFSmdBOVpBQUJCd0N1L3NyLy93QUx0Z0VLQ0FBQWpsWUFLelFBLy84QUhnQUFCUElHUGdRbUFMb1VBQUVIQUs3L1N2Ly9BQTYwQXpZZEFBQzQveXF3VmdBck5QLy9BQ0QvOUFNYkJuUUdKZ0REQUFBQkJ3Q3YveXovNndBUVFBa0RBZ0VyQUFFQm9sWUFLelEwTlAvLy82OEFBQVNMQmJBR0JnQWxBQUQvL3dBNy8vOEVtZ1d3QmdZQUpnQUEvLzhBT3dBQUJMRUZzQVlHQUNrQUFQLy8vK3dBQUFUT0JiQUdCZ0ErQUFELy93QTdBQUFGZHdXd0JnWUFMQUFBLy84QVNRQUFBZ0lGc0FZR0FDMEFBUC8vQURzQUFBVlJCYkFHQmdBdkFBRC8vd0E3QUFBR3R3V3dCZ1lBTVFBQS8vOEFPd0FBQlhnRnNBWUdBRElBQVAvL0FIUC82UVVRQmNjR0JnQXpBQUQvL3dBN0FBQUU3d1d3QmdZQU5BQUEvLzhBcVFBQUJRa0ZzQVlHQURnQUFQLy9BS2dBQUFVekJiQUdCZ0E5QUFELy8vL1VBQUFGS3dXd0JnWUFQQUFBLy84QVNRQUFBd29IQ2dZbUFDMEFBQUVIQUdyL3VBRkNBQTIzQWdFWkF3RUJnMVlBS3pRMEFQLy9BS2dBQUFVekJ2NEdKZ0E5QUFBQkJ3QnFBUDRCTmdBTnR3SUJIZ0lCQVhkV0FDczBOQUQvL3dCSS8rY0VKZ1k0QmlZQXV3QUFBUWNBcmdGcC8va0FDN1lEUWdZQkFacFdBQ3MwQVAvL0FDbi82Z1BnQmpjR0pnQy9BQUFCQndDdUFTSC8rQUFMdGdKQUt3RUJtbFlBS3pRQS8vOEFKZjVoQStnR09BWW1BTUVBQUFFSEFLNEJPLy81QUF1MkFoMERBUUd1VmdBck5BRC8vd0NFLy9RQ1pnWWpCaVlBd3dBQUFRWUFyaVRrQUF1MkFSSUFBUUdaVmdBck5BRC8vd0JvLytjRURBWjBCaVlBeXdBQUFRWUFyeDNyQUJCQUNRTUNBVGdQQVFHaVZnQXJORFEwLy84QUxnQUFCRmtFT2dZR0FJNEFBUC8vQUViLzZRUVhCRkVHQmdCVEFBRC8vLy9tL21BRUpRUTZCZ1lBZGdBQS8vOEFiZ0FBQSs0RU9nWUdBRm9BQVAvLy83LytTd1JSQkVjR0JnS0FBQUQvL3dCbC8vUUMzUVd6QmlZQXd3QUFBUVlBYW92ckFBMjNBZ0VuQUFFQm9sWUFLelEwQVAvL0FHai81d1BpQmJNR0pnRExBQUFCQmdCcWZPc0FEYmNDQVRRUEFRR2lWZ0FyTkRRQS8vOEFSdi9wQkJjR09BWW1BRk1BQUFFSEFLNEJMUC81QUF1MkFpd0dBUUdhVmdBck5BRC8vd0JvLytjRDRnWWpCaVlBeXdBQUFRY0FyZ0VWLytRQUM3WUJIdzhCQVpsV0FDczBBUC8vQUdmLzV3WHZCaUFHSmdET0FBQUJCd0N1QWozLzRRQUx0Z0pBSHdFQmxsWUFLelFBLy84QU93QUFCTEVIQ2dZbUFDa0FBQUVIQUdvQkFRRkNBQTIzQlFRbEJ3RUJnMVlBS3pRMEFQLy9BRVFBQUFTbEIwSUdKZ0N4QUFBQkJ3QjFBY2NCUWdBTHRnRUdCUUVCYkZZQUt6UUFBQUVBS2YvcUJLTUZ4Z0E1QUJ0QURRb21Eell4S3dseUdCUVBBM0lBSzh3eks4d3pFams1TURGQk5pNENKeTRETno0REZ4NENCeWMySmlZbkpnWUdCd1llQWhjZUF3Y09BeWN1QXpjWEJoNENGeFkyTmdOc0NTeFVhRFJMa1hSQkJ3aGltTFpkZ2N4eUI3d0hPbmxZVUpGa0N3Z3dWV1V1VUpWelBRZ0paSnk2WG1LdmhrZ0Z1d1VvVVhCRFQ1ZHFBWGRDV1QwcEVocEdZNGhiWlpsbU1nSURiY1NGQVZkOVJBSUNORzFWTzFRNktBOGJTV2VPWUdpWVlTNENBVDF5bzJnQlJtcEhKUUVDTUdvQS8vOEFTUUFBQWdJRnNBWUdBQzBBQVAvL0FFa0FBQU1LQndvR0pnQXRBQUFCQndCcS83Z0JRZ0FOdHdJQkdRTUJBWU5XQUNzME5BRC8vd0FILytnRVJBV3dCZ1lBTGdBQS8vOEFSQUFBQldvRnNBWUdBandBQVAvL0FEc0FBQVZSQnpFR0pnQXZBQUFCQndCMUFiRUJNUUFMdGdNT0F3RUJXMVlBS3pRQS8vOEFsUC9vQlVBSEdnWW1BTjRBQUFFSEFLRUJGZ0ZDQUF1MkFoNEJBUUZlVmdBck5BRC8vLyt2QUFBRWl3V3dCZ1lBSlFBQS8vOEFPLy8vQkpvRnNBWUdBQ1lBQVAvL0FFUUFBQVNsQmJBR0JnQ3hBQUQvL3dBN0FBQUVzUVd3QmdZQUtRQUEvLzhBUkFBQUJXOEhHZ1ltQU53QUFBRUhBS0VCYWdGQ0FBdTJBUThCQVFGZVZnQXJOQUQvL3dBN0FBQUd0d1d3QmdZQU1RQUEvLzhBT3dBQUJYY0ZzQVlHQUN3QUFQLy9BSFAvNlFVUUJjY0dCZ0F6QUFELy93QkVBQUFGY0FXd0JnWUF0Z0FBLy84QU93QUFCTzhGc0FZR0FEUUFBUC8vQUhELzZBVDVCY2NHQmdBbkFBRC8vd0NwQUFBRkNRV3dCZ1lBT0FBQS8vLy8xQUFBQlNzRnNBWUdBRHdBQVAvL0FESC82UVBIQkZBR0JnQkZBQUQvL3dCRi8rc0QyZ1JSQmdZQVNRQUEvLzhBTUFBQUJEZ0Z3d1ltQVBBQUFBRUhBS0VBcFAvckFBdTJBUThCQVFGOVZnQXJOQUQvL3dCRy8ra0VGd1JSQmdZQVV3QUEvLy8vMS81Z0JBQUVVUVlHQUZRQUFBQUJBRWIvNmdQaUJGRUFKd0FUUUFrQUNSMFVCM0lKQzNJQUt5c3lFVE13TVdVV05qWTNOdzRDSnk0RE56YytBeGNlQWhVbkxnSW5KZzRDQndjR0hnSUI0MEp5VUJHc0VJbkZhM0tmWUNRS0JBeFNpYngxY3FoY3FnRXdYa1ZUZTFVeENRVUdDUzVnZ3dFMFlEOEJiYVJiQWdKYm1MOWxLMjNGbVZZREFtZXdjQUZBYkVJREFrSnpqRWdxUUlaelNQLy8vNnIrUndQc0JEb0dCZ0JkQUFELy8vL0ZBQUFEOVFRNkJnWUFYQUFBLy84QVJmL3JBOXdGeUFZbUFFa0FBQUVIQUdvQWlnQUFBQTIzQWdGQkN3RUJvMVlBS3pRMEFQLy9BQzRBQUFPRUJlc0dKZ0RzQUFBQkJ3QjFBTkQvNndBTHRnRUdCUUVCaTFZQUt6UUEvLzhBTHYvckE3TUVUd1lHQUZjQUFQLy9BQzhBQUFIbEJjWUdCZ0JOQUFELy93QXZBQUFDdUFYR0JpWUFqUUFBQVFjQWF2OW0vLzRBRGJjQ0FSa0RBUUcxVmdBck5EUUEvLy8vRS81R0FkWUZ4Z1lHQUU0QUFQLy9BREFBQUFSWUJlb0dKZ0R4QUFBQkJ3QjFBVHIvNmdBTHRnTU9Bd0VCaWxZQUt6UUEvLy8vcXY1SEErd0YyQVltQUYwQUFBRUdBS0ZZQUFBTHRnSWVBUUVCa2xZQUt6UUEvLzhBd3dBQUIwRUhOd1ltQURzQUFBRUhBRVFDU3dFM0FBdTJCQmdWQVFGaFZnQXJOQUQvL3dDQUFBQUYvZ1lBQmlZQVd3QUFBUWNBUkFHS0FBQUFDN1lFR0JVQkFhQldBQ3MwQVAvL0FNTUFBQWRCQnpjR0pnQTdBQUFCQndCMUF0WUJOd0FMdGdRV0FRRUJZVllBS3pRQS8vOEFnQUFBQmY0R0FBWW1BRnNBQUFFSEFIVUNGZ0FBQUF1MkJCWUJBUUdnVmdBck5BRC8vd0REQUFBSFFRYi9CaVlBT3dBQUFRY0FhZ0lXQVRjQURiY0ZCQ3NWQVFGNFZnQXJORFFBLy84QWdBQUFCZjRGeUFZbUFGc0FBQUVIQUdvQlZnQUFBQTIzQlFRckZRRUJ0MVlBS3pRMEFQLy9BS2dBQUFVekJ6WUdKZ0E5QUFBQkJ3QkVBVE1CTmdBTHRnRUxBZ0VCWUZZQUt6UUEvLy8vcXY1SEErd0dBQVltQUYwQUFBRUhBRVFBa3dBQUFBdTJBaHNCQVFHZ1ZnQXJOQUQvL3dDc0JDSUJpZ1lBQmdZQUN3QUEvLzhBeVFRVEFxY0dBQVlHQUFZQUFQLy9BRVQvOGdQMEJiQUVKZ0FGQUFBQUJ3QUZBZ0FBQVAvLy93bitSd0xJQmRnR0pnQ2NBQUFCQndDZi8wYi8xd0FMdGdFWUFBRUJnRllBS3pRQS8vOEFpUVFWQWVFR0FBWUdBWVVBQVAvL0FEc0FBQWEzQnpjR0pnQXhBQUFCQndCMUFzY0JOd0FMdGdNUkFBRUJZVllBS3pRQS8vOEFIZ0FBQm1BR0FBWW1BRkVBQUFFSEFIVUNwUUFBQUF1MkF6TURBUUdnVmdBck5BRC8vLyt2L21rRWl3V3dCaVlBSlFBQUFRY0Fwd0YxQUFFQUVMVUVBeEVGQVFHNC83V3dWZ0FyTkRULy93QXgvbWtEeHdSUUJpWUFSUUFBQVFjQXB3RENBQUVBRUxVREFqNHhBUUc0Lzhtd1ZnQXJORFQvL3dBN0FBQUVzUWRDQmlZQUtRQUFBUWNBUkFFMkFVSUFDN1lFRWdjQkFXeFdBQ3MwQVAvL0FFUUFBQVZ2QjBJR0pnRGNBQUFCQndCRUFhUUJRZ0FMdGdFTUFRRUJiRllBS3pRQS8vOEFSZi9yQTlvR0FBWW1BRWtBQUFFSEFFUUF2Z0FBQUF1MkFTNExBUUdNVmdBck5BRC8vd0F3QUFBRU9BWHJCaVlBOEFBQUFRY0FSQURlLytzQUM3WUJEQUVCQVl0V0FDczBBUC8vQUlVQUFBV1FCYkFHQmdDNUFBRC8vd0JPL2ljRkpBUThCZ1lBelFBQS8vOEFyUUFBQlVzRzV3WW1BUmtBQUFFSEFLd0VSUUQ1QUEyM0F3SVZFd0VCTFZZQUt6UTBBUC8vQUlVQUFBUTlCYjhHSmdFYUFBQUJCd0NzQTY3LzBRQU50d01DR1JjQkFYdFdBQ3MwTkFELy93Qkcva2NJV1FSUkJDWUFVd0FBQUFjQVhRUnRBQUQvL3dCei9rY0pRd1hIQkNZQU13QUFBQWNBWFFWWEFBRC8vd0FsL2s4RWpnWEdCaVlBMndBQUFRY0NZUUdDLzdZQUM3WUNRaW9BQUdSV0FDczBBUC8vQUNEK1VBT2tCRkFHSmdEdkFBQUJCd0poQVMzL3R3QUx0Z0kvS1FBQVpWWUFLelFBLy84QWNQNVBCUGtGeHdZbUFDY0FBQUVIQW1FQnl2KzJBQXUyQVNzRkFBQmtWZ0FyTkFELy93QkcvazhENGdSUkJpWUFSd0FBQVFjQ1lRRkYvN1lBQzdZQkt3a0FBR1JXQUNzMEFQLy9BS2dBQUFVekJiQUdCZ0E5QUFELy93Q0YvbDhFR3dRNkJnWUF2UUFBLy84QVNRQUFBZ0lGc0FZR0FDMEFBUC8vLzZzQUFBZDFCeG9HSmdEYUFBQUJCd0NoQWl3QlFnQUx0Z1VkRFFFQlhsWUFLelFBLy8vL3B3QUFCZzRGd3dZbUFPNEFBQUVIQUtFQlhmL3JBQXUyQlIwTkFRRjlWZ0FyTkFELy93QkpBQUFDQWdXd0JnWUFMUUFBLy8vL3J3QUFCSXNIRHdZbUFDVUFBQUVIQUtFQkxRRTNBQXUyQXhNSEFRRlRWZ0FyTkFELy93QXgvK2tENndYWUJpWUFSUUFBQVFjQW9RQ2dBQUFBQzdZQ1FBOEJBWDVXQUNzMEFQLy8vNjhBQUFTTEJ2OEdKZ0FsQUFBQkJ3QnFBVE1CTndBTnR3UURJd2NCQVhoV0FDczBOQUQvL3dBeC8ra0QrQVhJQmlZQVJRQUFBUWNBYWdDbUFBQUFEYmNEQWxBUEFRR2pWZ0FyTkRRQS8vLy9nd0FBQjNrRnNBWUdBSUVBQVAvL0FCUC82Z1pYQkZFR0JnQ0dBQUQvL3dBN0FBQUVzUWNhQmlZQUtRQUFBUWNBb1FEOEFVSUFDN1lFRlFjQkFWNVdBQ3MwQVAvL0FFWC82d1BhQmRnR0pnQkpBQUFCQndDaEFJUUFBQUFMdGdFeEN3RUJmbFlBS3pRQS8vOEFVdi9wQlJvRzNBWW1BVmdBQUFFSEFHb0JDUUVVQUEyM0FnRkNBQUVCUVZZQUt6UTBBUC8vQUQvLzZnUE5CRkVHQmdDZEFBRC8vd0EvLytvRDRnWEpCaVlBblFBQUFRY0FhZ0NRQUFFQURiY0NBVUFBQVFHaVZnQXJORFFBLy8vL3F3QUFCM1VIQ2dZbUFOb0FBQUVIQUdvQ01nRkNBQTIzQmdVdERRRUJnMVlBS3pRMEFQLy8vNmNBQUFZT0JiTUdKZ0R1QUFBQkJ3QnFBV0wvNndBTnR3WUZMUTBCQWFKV0FDczBOQUQvL3dBbC8rb0VqZ2NmQmlZQTJ3QUFBUWNBYWdENEFWY0FEYmNEQWxRVkFRR0VWZ0FyTkRRQS8vOEFJUC9xQTdvRnh3WW1BTzhBQUFFR0FHcG8vd0FOdHdNQ1VSUUJBYU5XQUNzME5BRC8vd0JFQUFBRmJ3YnZCaVlBM0FBQUFRY0FjQUZCQVVvQUM3WUJEQWdCQWJGV0FDczBBUC8vQURBQUFBUTRCWmdHSmdEd0FBQUJCZ0J3ZS9NQUM3WUJEQWdCQWRCV0FDczBBUC8vQUVRQUFBVnZCd29HSmdEY0FBQUJCd0JxQVhBQlFnQU50d0lCSHdFQkFZTldBQ3MwTkFELy93QXdBQUFFT0FXekJpWUE4QUFBQVFjQWFnQ3EvK3NBRGJjQ0FSOEJBUUdpVmdBck5EUUEvLzhBYy8vcEJSQUhBUVltQURNQUFBRUhBR29CVlFFNUFBMjNBd0pCRVFFQlpsWUFLelEwQVAvL0FFYi82UVFYQmNnR0pnQlRBQUFCQndCcUFKTUFBQUFOdHdNQ1FRWUJBYU5XQUNzME5BRC8vd0JuLytrRS9nWEhCZ1lCRndBQS8vOEFRLy9vQkJZRVVnWUdBUmdBQVAvL0FHZi82UVQrQndVR0pnRVhBQUFCQndCcUFXSUJQUUFOdHdRRFR3QUJBV3BXQUNzME5BRC8vd0JELytnRUZnWEtCaVlCR0FBQUFRY0FhZ0NRQUFJQURiY0VBMEVBQVFHbFZnQXJORFFBLy84QWR2L3BCUDhISUFZbUFPY0FBQUVIQUdvQlRBRllBQTIzQXdKQ0hnRUJoVllBS3pRMEFQLy9BREwvNkFQV0JjZ0dKZ0QvQUFBQkJ3QnFBSVFBQUFBTnR3TUNRUWtCQWFOV0FDczBOQUQvL3dDVS8rZ0ZRQWJ2QmlZQTNnQUFBUWNBY0FEc0FVb0FDN1lDR3hnQkFiRldBQ3MwQVAvLy82citSd1BzQmEwR0pnQmRBQUFCQmdCd0x3Z0FDN1lDR3hnQkFlVldBQ3MwQVAvL0FKVC82QVZBQndvR0pnRGVBQUFCQndCcUFSd0JRZ0FOdHdNQ0xnRUJBWU5XQUNzME5BRC8vLytxL2tjRDdBWElCaVlBWFFBQUFRWUFhbDRBQUEyM0F3SXVBUUVCdDFZQUt6UTBBUC8vQUpULzZBVkFCMEVHSmdEZUFBQUJCd0NtQVYwQlFnQU50d01DR1FFQkFXSldBQ3MwTkFELy8vK3Eva2NFWFFYL0JpWUFYUUFBQVFjQXBnQ2ZBQUFBRGJjREFoa0JBUUdXVmdBck5EUUEvLzhBeXdBQUJUb0hDZ1ltQU9FQUFBRUhBR29CUkFGQ0FBMjNBd0l2RmdFQmcxWUFLelEwQVAvL0FIa0FBQVAxQmJNR0pnRDVBQUFCQmdCcWF1c0FEYmNEQWkwREFRR2lWZ0FyTkRRQS8vOEFSUC8vQnBjSENnWW1BT1VBQUFFSEFHb0NDQUZDQUEyM0F3SXlIQUVCZzFZQUt6UTBBUC8vQURILy93V3FCYk1HSmdEOUFBQUJCd0JxQVdyLzZ3QU50d01DTWh3QkFhSldBQ3MwTkFELy93QkgvK2dFZGdZQUJnWUFTQUFBLy8vL3IvNmdCSXNGc0FZbUFDVUFBQUVIQUswRTNRQUFBQTYwQXhFRkFRRzQvM1d3VmdBck5QLy9BREgrb0FQSEJGQUdKZ0JGQUFBQkJ3Q3RCQ29BQUFBT3RBSStNUUVCdVArSnNGWUFLelQvLy8rdkFBQUVpd2U2QmlZQUpRQUFBUWNBcXdVQkFVY0FDN1lERHdjQkFYRldBQ3MwQVAvL0FESC82UVBIQm9NR0pnQkZBQUFCQndDckJIUUFFQUFMdGdJOER3RUJuRllBS3pRQS8vLy9yd0FBQmV3SHhBWW1BQ1VBQUFFSEFrY0E4UUV2QUEyM0JBTVNCd0VCWVZZQUt6UTBBUC8vQURILzZRVmVCbzBHSmdCRkFBQUJCZ0pIWS9nQURiY0RBa0VQQVFHTVZnQXJORFFBLy8vL3J3QUFCSXNId0FZbUFDVUFBQUVIQWtnQTl3RTlBQTIzQkFNUUJ3RUJYRllBS3pRMEFQLy9BREgvNlFQOUJva0dKZ0JGQUFBQkJnSklhZ1lBRGJjREFqMFBBUUdIVmdBck5EUUEvLy8vcndBQUJXc0g2d1ltQUNVQUFBRUhBa2tBOGdFY0FBMjNCQU1UQXdFQlVGWUFLelEwQVAvL0FESC82UVRlQnJRR0pnQkZBQUFCQmdKSlplVUFEYmNEQWtBUEFRRjdWZ0FyTkRRQS8vLy9yd0FBQklzSDJnWW1BQ1VBQUFFSEFrb0E3Z0VHQUEyM0JBTVFCd0VCT2xZQUt6UTBBUC8vQURILzZRUDRCcU1HSmdCRkFBQUJCZ0pLWWM4QURiY0RBajBQQVFGbFZnQXJORFFBLy8vL3IvNmdCSXNITndZbUFDVUFBQUFuQUo0QStRRTNBUWNBclFUZEFBQUFGN1FFR2dVQkFiai9kYmRXQXhFSEFRRnNWZ0FyTkNzMEFQLy9BREgrb0FQUkJnQUdKZ0JGQUFBQUpnQ2ViQUFCQndDdEJDb0FBQUFYdEFOSE1RRUJ1UCtKdDFZQ1BnOEJBWmRXQUNzMEt6UUEvLy8vcndBQUJJc0h1QVltQUNVQUFBRUhBa3dCRndFdEFBMjNCQU1UQndFQlhGWUFLelEwQVAvL0FESC82UVBtQm9FR0pnQkZBQUFCQndKTUFJci85Z0FOdHdNQ1FBOEJBWWRXQUNzME5BRC8vLyt2QUFBRWl3ZTRCaVlBSlFBQUFRY0NSUUVYQVMwQURiY0VBeE1IQVFGY1ZnQXJORFFBLy84QU1mL3BBK1lHZ1FZbUFFVUFBQUVIQWtVQWl2LzJBQTIzQXdKQUR3RUJoMVlBS3pRMEFQLy8vNjhBQUFTTENFSUdKZ0FsQUFBQkJ3Sk5BUjRCUGdBTnR3UURFd2NCQVc1V0FDczBOQUQvL3dBeC8ra0Qxd2NMQmlZQVJRQUFBUWNDVFFDUkFBY0FEYmNEQWtBUEFRR1pWZ0FyTkRRQS8vLy9yd0FBQkpNSUZRWW1BQ1VBQUFFSEFtQUJId0ZHQUEyM0JBTVRCd0VCYjFZQUt6UTBBUC8vQURILzZRUUdCdDRHSmdCRkFBQUJCd0pnQUpJQUR3QU50d01DUUE4QkFacFdBQ3MwTkFELy8vK3YvcUFFaXdjUEJpWUFKUUFBQUNjQW9RRXRBVGNCQndDdEJOMEFBQUFYdEFRZ0JRRUJ1UDkxdDFZREV3Y0JBVk5XQUNzMEt6UUEvLzhBTWY2Z0Erc0YyQVltQUVVQUFBQW5BS0VBb0FBQUFRY0FyUVFxQUFBQUY3UURUVEVCQWJqL2liZFdBa0FQQVFGK1ZnQXJOQ3MwQVAvL0FEditxZ1N4QmJBR0pnQXBBQUFCQndDdEJKMEFDZ0FPdEFRVEFnRUJ1UDkvc0ZZQUt6VC8vd0JGL3FBRDJnUlJCaVlBU1FBQUFRY0FyUVIwQUFBQURyUUJMd0FCQWJqL2liQldBQ3MwLy84QU93QUFCTEVIeFFZbUFDa0FBQUVIQUtzRXp3RlNBQXUyQkJFSEFRRjhWZ0FyTkFELy93QkYvK3NEMmdhREJpWUFTUUFBQVFjQXF3UlhBQkFBQzdZQkxRc0JBWnhXQUNzMEFQLy9BRHNBQUFTeEJ5MEdKZ0FwQUFBQkJ3Q2xBTThCUmdBTHRnUWVCd0VCZGxZQUt6UUEvLzhBUmYvckJBY0Y2d1ltQUVrQUFBRUdBS1ZYQkFBTHRnRTZDd0VCbGxZQUt6UUEvLzhBT3dBQUJib0h6d1ltQUNrQUFBRUhBa2NBdndFNkFBMjNCUVFVQndFQmJGWUFLelEwQVAvL0FFWC82d1ZDQm8wR0pnQkpBQUFCQmdKSFIvZ0FEYmNDQVRBTEFRR01WZ0FyTkRRQS8vOEFPd0FBQkxFSHl3WW1BQ2tBQUFFSEFrZ0F4UUZJQUEyM0JRUVNCd0VCWjFZQUt6UTBBUC8vQUVYLzZ3UGhCb2tHSmdCSkFBQUJCZ0pJVGdZQURiY0NBUzRMQVFHSFZnQXJORFFBLy84QU93QUFCVG9IOWdZbUFDa0FBQUVIQWtrQXdRRW5BQTIzQlFRVkJ3RUJXMVlBS3pRMEFQLy9BRVgvNndUQ0JyUUdKZ0JKQUFBQkJnSkpTZVVBRGJjQ0FURUxBUUY3VmdBck5EUUEvLzhBT3dBQUJMRUg1UVltQUNrQUFBRUhBa29BdlFFUkFBMjNCUVFTQndFQlJWWUFLelEwQVAvL0FFWC82d1BjQnFNR0pnQkpBQUFCQmdKS1JjOEFEYmNDQVM0TEFRRmxWZ0FyTkRRQS8vOEFPLzZxQkxFSFFnWW1BQ2tBQUFBbkFKNEF4d0ZDQVFjQXJRU2RBQW9BRjdRRkhBSUJBYmovZjdkV0JCTUhBUUYzVmdBck5DczBBUC8vQUVYK29BUGFCZ0FHSmdCSkFBQUFKZ0NlVHdBQkJ3Q3RCSFFBQUFBWHRBSTRBQUVCdVArSnQxWUJMd3NCQVpkV0FDczBLelFBLy84QVNRQUFBcmtIeFFZbUFDMEFBQUVIQUtzRGhRRlNBQXUyQVFVREFRRjhWZ0FyTkFELy93QXZBQUFDWndhQkJpWUFqUUFBQVFjQXF3TXpBQTRBQzdZQkJRTUJBYTVXQUNzMEFQLy9BQTMrcVFJQ0JiQUdKZ0F0QUFBQkJ3Q3RBMU1BQ1FBT3RBRUhBZ0VCdVA5K3NGWUFLelQvLy8vdy9xb0I1UVhHQmlZQVRRQUFBUWNBclFNMkFBb0FEclFDRXdJQkFiai9mN0JXQUNzMC8vOEFjLzZnQlJBRnh3WW1BRE1BQUFFSEFLMEU4UUFBQUE2MEFpOEdBUUc0LzRtd1ZnQXJOUC8vQUViK253UVhCRkVHSmdCVEFBQUJCd0N0QklULy93QU90QUl2RVFFQnVQK0lzRllBS3pULy93QnovK2tGRUFlOEJpWUFNd0FBQVFjQXF3VWpBVWtBQzdZQ0xSRUJBVjlXQUNzMEFQLy9BRWIvNlFRWEJvTUdKZ0JUQUFBQkJ3Q3JCR0VBRUFBTHRnSXRCZ0VCbkZZQUt6UUEvLzhBYy8vcEJnNEh4Z1ltQURNQUFBRUhBa2NCRXdFeEFBMjNBd0l3RVFFQlQxWUFLelEwQVAvL0FFYi82UVZNQm8wR0pnQlRBQUFCQmdKSFVmZ0FEYmNEQWpBR0FRR01WZ0FyTkRRQS8vOEFjLy9wQlJBSHdnWW1BRE1BQUFFSEFrZ0JHUUUvQUEyM0F3SXVFUUVCU2xZQUt6UTBBUC8vQUViLzZRUVhCb2tHSmdCVEFBQUJCZ0pJVndZQURiY0RBaTRHQVFHSFZnQXJORFFBLy84QWMvL3BCWTBIN1FZbUFETUFBQUVIQWtrQkZBRWVBQTIzQXdJeEVRRUJQbFlBS3pRMEFQLy9BRWIvNlFUTUJyUUdKZ0JUQUFBQkJnSkpVK1VBRGJjREFqRUdBUUY3VmdBck5EUUEvLzhBYy8vcEJSQUgzQVltQURNQUFBRUhBa29CRVFFSUFBMjNBd0l1RVFFQktGWUFLelEwQVAvL0FFYi82UVFYQnFNR0pnQlRBQUFCQmdKS1Q4OEFEYmNEQWk0R0FRRmxWZ0FyTkRRQS8vOEFjLzZnQlJBSE9RWW1BRE1BQUFBbkFKNEJHd0U1QVFjQXJRVHhBQUFBRjdRRE9BWUJBYmovaWJkV0FpOFJBUUZhVmdBck5DczBBUC8vQUViK253UVhCZ0FHSmdCVEFBQUFKZ0NlV1FBQkJ3Q3RCSVQvL3dBWHRBTTRFUUVCdVArSXQxWUNMd1lCQVpkV0FDczBLelFBLy84QVp2L3BCaFFITVFZbUFKZ0FBQUVIQUhVQ0VBRXhBQXUyQXpvY0FRRkhWZ0FyTkFELy93QkQvK2tFOVFZQUJpWUFtUUFBQVFjQWRRRm1BQUFBQzdZRE5oQUJBWXhXQUNzMEFQLy9BR2IvNlFZVUJ6RUdKZ0NZQUFBQkJ3QkVBWVFCTVFBTHRnTThIQUVCUjFZQUt6UUEvLzhBUS8vcEJQVUdBQVltQUprQUFBRUhBRVFBMmdBQUFBdTJBemdRQVFHTVZnQXJOQUQvL3dCbS8ra0dGQWUwQmlZQW1BQUFBUWNBcXdVZUFVRUFDN1lET3h3QkFWZFdBQ3MwQVAvL0FFUC82UVQxQm9NR0pnQ1pBQUFCQndDckJIUUFFQUFMdGdNM0VBRUJuRllBS3pRQS8vOEFadi9wQmhRSEhBWW1BSmdBQUFFSEFLVUJIUUUxQUF1MkEwZ2NBUUZSVmdBck5BRC8vd0JELytrRTlRWHJCaVlBbVFBQUFRWUFwWE1FQUF1MkEwUVFBUUdXVmdBck5BRC8vd0JtL3FBR0ZBWTZCaVlBbUFBQUFRY0FyUVRpQUFBQURyUURQUkFCQWJqL2liQldBQ3MwLy84QVEvNldCUFVFc2dZbUFKa0FBQUVIQUswRWR2LzJBQTYwQXprYkFRRzQvMyt3VmdBck5QLy9BR1Arb0FVY0JiQUdKZ0E1QUFBQkJ3Q3RCTWtBQUFBT3RBRVpCZ0VCdVArSnNGWUFLelQvL3dCYi9xQUVGQVE2QmlZQVdRQUFBUWNBclFReEFBQUFEclFDSHdzQkFiai9pYkJXQUNzMC8vOEFZLy9vQlJ3SHVnWW1BRGtBQUFFSEFLc0UvQUZIQUF1MkFSY0FBUUZ4VmdBck5BRC8vd0JiLytnRUZBYURCaVlBV1FBQUFRY0Fxd1JsQUJBQUM3WUNIUkVCQWJCV0FDczBBUC8vQUdQLzZRYUtCMElHSmdDYUFBQUJCd0IxQWdvQlFnQUx0Z0lnQ2dFQmJGWUFLelFBLy84QVcvL29CVWNGNndZbUFKc0FBQUVIQUhVQllQL3JBQXUyQXlZYkFRR0xWZ0FyTkFELy93QmovK2tHaWdkQ0JpWUFtZ0FBQVFjQVJBRi9BVUlBQzdZQ0lnb0JBV3hXQUNzMEFQLy9BRnYvNkFWSEJlc0dKZ0NiQUFBQkJ3QkVBTlgvNndBTHRnTW9Hd0VCaTFZQUt6UUEvLzhBWS8vcEJvb0h4UVltQUpvQUFBRUhBS3NGR0FGU0FBdTJBaUVLQVFGOFZnQXJOQUQvL3dCYi8rZ0ZSd1p1QmlZQW13QUFBUWNBcXdSdS8vc0FDN1lESnhzQkFadFdBQ3MwQVAvL0FHUC82UWFLQnkwR0pnQ2FBQUFCQndDbEFSY0JSZ0FMdGdJdUZRRUJkbFlBS3pRQS8vOEFXLy9vQlVjRjFnWW1BSnNBQUFFR0FLVnU3d0FMdGdNMEd3RUJsVllBS3pRQS8vOEFZLzZYQm9vR0F3WW1BSm9BQUFFSEFLMEU0Zi8zQUE2MEFpTVFBUUc0LzRDd1ZnQXJOUC8vQUZ2K29BVkhCSkVHSmdDYkFBQUJCd0N0QkdVQUFBQU90QU1wRlFFQnVQK0pzRllBS3pULy93Q28vcUVGTXdXd0JpWUFQUUFBQVFjQXJRU1lBQUVBRHJRQkRBWUJBYmovZHJCV0FDczAvLy8vcXY0Q0Erd0VPZ1ltQUYwQUFBRUhBSzBFMnY5aUFBNjBBaUlJQUFDNC83bXdWZ0FyTlAvL0FLZ0FBQVV6QjdrR0pnQTlBQUFCQndDckJNd0JSZ0FMdGdFS0FnRUJjRllBS3pRQS8vLy9xdjVIQSt3R2d3WW1BRjBBQUFFSEFLc0VMQUFRQUF1MkFob0JBUUd3VmdBck5BRC8vd0NvQUFBRk13Y2hCaVlBUFFBQUFRY0FwUURNQVRvQUM3WUJGd2dCQVdwV0FDczBBUC8vLzZyK1J3UHNCZXNHSmdCZEFBQUJCZ0NsS3dRQUM3WUNKeGdCQWFwV0FDczBBUC8vQUFEK3l3VVNCZ0FFSmdCSUFBQUFKd0kyQWZrQ1JnRUhBRU1BZi85akFCZTBCRGNXQVFHNC8zZTNWZ015Q3dFQmcxWUFLelFyTkFELy93Q3AvcGtGQ1FXd0JpWUFPQUFBQVFjQ1lRSXZBQUFBQzdZQ0N3SUFBSnBXQUNzMEFQLy9BR0QrbVFQcEJEb0dKZ0QyQUFBQkJ3SmhBYmtBQUFBTHRnSUxBZ0FBbWxZQUt6UUEvLzhBeS82WkJUb0ZzQVltQU9FQUFBRUhBbUVDNXdBQUFBdTJBaDBaQVFDYVZnQXJOQUQvL3dCNS9wa0Q5UVE4QmlZQStRQUFBUWNDWVFIbkFBQUFDN1lDR3dJQkFKcFdBQ3MwQVAvL0FFVCttUVNsQmJBR0pnQ3hBQUFCQndKaEFPa0FBQUFMdGdFSkJBQUFtbFlBS3pRQS8vOEFMdjZaQTRRRU9nWW1BT3dBQUFFSEFtRUF6d0FBQUF1MkFRa0VBQUNhVmdBck5BRC8vd0NJL2xNRnhRWEdCaVlCVEFBQUFRY0NZUUxqLzdvQUM3WUNPZ29BQUd0V0FDczBBUC8vQUFUK1ZnUkpCRkVHSmdGTkFBQUJCd0poQWVYL3ZRQUx0Z0k1Q1FBQWExWUFLelFBLy84QUlBQUFBOW9HQUFZR0FFd0FBQUFDQUN6Ly93UjhCYkFBR0FBY0FCcEFEQndiR0FBQUN3d0NjZzRMQ0FBL015c1NPUzh6ekRJd01VRUZIZ0lIRGdNbklSTXpBd1V5TmpZM05pWW1KeVVCQnlFM0FWb0JkWC9GYVF3SlhaVzdhUDNrL0wzaUFVcFpsMklNQ2pWd1QvNXpBWFFiL1pVYkExOEJBMks0aG02bWNEZ0JCYkQ2N1FGRWdWeFJjajBEQVFJbW1KZ0FBQUlBTFAvL0JId0ZzQUFZQUJ3QUdVQUxIQnNZQUFBTERBSU9Dd2dBUHpNL0Vqa3ZNOHd5TURGQkJSNENCdzRESnlFVE13TUZNalkyTnpZbUppY2xBUWNoTndGYUFYVi94V2tNQ1YyVnUyajk1UHk5NGdGS1daZGlEQW8xY0UvK2N3RjBHLzJWR3dOZkFRTml1SVp1cG5BNEFRV3crdTBCUklGY1VYSTlBd0VDSnBpWUFBSUFFUUFBQktVRnNBQUZBQWtBRmtBS0JnY0hCQUlGQW5JRUNBQS9LeklTT1M4ek1ERkJCeUVESXhNQkJ5RTNCS1VjL1ZqaHZQMEJWaHY5bFJzRnNKNzY3Z1d3L1pPWW1BQUFBdi9uQUFBRGhBUTZBQVVBQ1FBV1FBb0pDQWdFQWdVR2NnUUtBRDhyTWhJNUx6TXdNVUVISVFNakV3RUhJVGNEaEJ6K0hLRzF2QUdFRy8yVUd3UTZtZnhmQkRyK1BKaVlBQUFFQUZnQUFBVitCYkFBQXdBSkFBMEFFUUFyUUJVTUN3c0hCd1lRRVFZUkJoRUNDUU1DY2dvQ0NISUFLeklyTWhFNU9TOHZFVE1STXhJNUVUTXdNVUVESXhNaEFTRW5Nd0VEQVRjQkFRY2hOd0lSL0wzOUJDbjlFUDZ1QWZBQ1hNTCtYWDhCKy81SEcvMlZHd1d3K2xBRnNQemZvQUtCK2xBQ3NwLzhyd1RPbUpnQUJBQTZBQUFFTXdZQUFBTUFDUUFOQUJFQUxVQVhCQVp5REFzTEJ3Y0dFQkVHRVFZUkFnTUFjZ29DQ25JQUt6SXJFVGs1THk4Uk14RXpFamtSTXlzd01VRUJJd2tDSVRjekFRTUJOd0VEQnlFM0Fmbis5clVCQ3dMdS9ldis2QWJIQVh0Ny91cDJBV25YRy8yVkd3WUErZ0FHQVA0Ni9idWFBYXY3eGdJTW0vMVpCVmlZbUFBQ0FLZ0FBQVV6QmJBQUNBQU1BQjFBRHd3QkJBY0RDd3NHQXdnQ2NnWUljZ0FyS3pJUk9TOFhPVE13TVVFVEFUTUJBeU1UQVFFSElUY0JkZThCN3VIOWMxMjhZZjY2QXZJYi9aVWJCYkQ5SmdMYS9HYjk2Z0lyQTRYODhKaVlBQUFFQUY3K1h3UWJCRG9BQXdBSUFBMEFFUUFYUUFzUkVCQUNCUTBHY2dJT2NnQXJLeklTT1M4ek1ERmxBeU1UTndFekFTTURFd2NqQXdFSElUY0NBbUMxWUdvQm84SDl2Mzhsa1FSenl3SmdHLzJVRzRUOTJ3SWxnUU0xKzhZRU92eTE3d1E2L0ZLWW1BQUFBdi9VQUFBRkt3V3dBQXNBRHdBZlFBOFBCd1VCQkFvRERnNEpCUU1BQW5JQUt6SXZNemt2RnprU09UTXdNVUVUQVRNQkFTTUJBU01KQWdjaE53R2UvQUdxNS8zSkFWUFMvdjMrUytrQ1JQNjJBd0FiL1pVYkJiRDkwd0l0L1NiOUtnSTQvY2dDNkFMSS9ZV1ltQUFDLzhVQUFBUDFCRG9BQ3dBUEFCOUFEdzhIQlFFS0JBTU9EZ2tGQXdBR2NnQXJNaTh6T1M4WE9SSTVNekF4UVJNQk13RUJJd01CSXdFREFRY2hOd0ZKcHdFbTMvNU9BUWpGcy83UDNRRysvd0tvRy8yVkd3UTYvbmNCaWYzaC9lVUJsZjVyQWkwQ0RmNCttSmdBLy84QUtmL3FBK0FFVHdZR0FMOEFBUC8vLzljQUFBU2tCYkFHSmdBcUFBQUJCd0kyLzBUK2ZRQU90QU1PQWdJQXVBRUlzRllBS3pULy93Q1lBb3NGMWdNakJnWUJnZ0FBLy84QUdBQUFCQ2NGeHdZR0FCWUFBUC8vQURYLzZnUWFCY2NHQmdBWEFBRC8vd0FGQUFBRUhnV3dCZ1lBR0FBQS8vOEFjdi9vQkdzRnNBWUdBQmtBQVAvL0FJSC82UVFHQmJNRUJnQWFGQUQvL3dCVS8ra0VQd1hIQkFZQUhCUUEvLzhBbFAvOUJCQUZ4d1FHQUIwQUFQLy9BSDcvNkFRMEJjZ0VCZ0FVRkFELy93QjAvK3NGQlFkWEJpWUFLd0FBQVFjQWRRSDVBVmNBQzdZQkxCQUJBVzFXQUNzMEFQLy9BQVArVVFRcEJnQUdKZ0JMQUFBQkJ3QjFBVTBBQUFBTHRnTS9HZ0VCakZZQUt6UUEvLzhBT3dBQUJYZ0hOd1ltQURJQUFBRUhBRVFCbkFFM0FBdTJBUXdKQVFGaFZnQXJOQUQvL3dBZ0FBQUQyZ1lBQmlZQVVnQUFBUWNBUkFEU0FBQUFDN1lDSGdNQkFhQldBQ3MwQVAvLy82OEFBQVNMQnlBR0pnQWxBQUFCQndDc0JJQUJNZ0FOdHdRRERnTUJBV1pXQUNzME5BRC8vd0F4LytrRHh3WHBCaVlBUlFBQUFRY0FyQVB6Ly9zQURiY0RBandQQVFHUlZnQXJORFFBLy84QU93QUFCTEVIS3dZbUFDa0FBQUVIQUt3RVRnRTlBQTIzQlFRUkJ3RUJjVllBS3pRMEFQLy9BRVgvNndQYUJla0dKZ0JKQUFBQkJ3Q3NBOWYvK3dBTnR3SUJMUXNCQVpGV0FDczBOQUQvLy8vZ0FBQUNpZ2NyQmlZQUxRQUFBUWNBckFNRkFUMEFEYmNDQVFVREFRRnhWZ0FyTkRRQS8vLy9qUUFBQWpjRjV3WW1BSTBBQUFFSEFLd0Nzdi81QUEyM0FnRUZBd0VCbzFZQUt6UTBBUC8vQUhQLzZRVVFCeUlHSmdBekFBQUJCd0NzQktJQk5BQU50d01DTFJFQkFWUldBQ3MwTkFELy93QkcvK2tFRndYcEJpWUFVd0FBQVFjQXJBUGcvL3NBRGJjREFpMEdBUUdSVmdBck5EUUEvLzhBT3dBQUJMd0hJQVltQURZQUFBRUhBS3dFUkFFeUFBMjNBd0lmQUFFQlpsWUFLelEwQVAvL0FDQUFBQUxSQmVrR0pnQldBQUFCQndDc0Ewci8rd0FOdHdNQ0dBTUJBYVZXQUNzME5BRC8vd0JqLytnRkhBY2dCaVlBT1FBQUFRY0FyQVI3QVRJQURiY0NBUmNMQVFGbVZnQXJORFFBLy84QVcvL29CQlFGNlFZbUFGa0FBQUVIQUt3RDVQLzdBQTIzQXdJZEVRRUJwVllBS3pRMEFQLy8vN0VBQUFWQkJqNEVKZ0RRWkFBQUJ3Q3UvbzcvLy8vL0FEditxZ1NhQmJBR0pnQW1BQUFCQndDdEJKY0FDZ0FPdEFJMEd3RUJ1UDkvc0ZZQUt6VC8vd0FmL3BZRUFnWUFCaVlBUmdBQUFRY0FyUVNGLy9ZQURyUURNd1FCQWJqL2E3QldBQ3MwLy84QU8vNnFCTThGc0FZbUFDZ0FBQUVIQUswRWx3QUtBQTYwQWlJZEFRRzQvMyt3VmdBck5QLy9BRWYrb0FSMkJnQUdKZ0JJQUFBQkJ3Q3RCSm9BQUFBT3RBTXpGZ0VCdVArSnNGWUFLelQvL3dBNy9nWUV6d1d3QmlZQUtBQUFBUWNCeWdFZi9xZ0FEclFDS0IwQkFiai9sN0JXQUNzMC8vOEFSLzM4QkhZR0FBWW1BRWdBQUFFSEFjb0JJZjZlQUE2MEF6a1dBUUc0LzZHd1ZnQXJOUC8vQUR2K3FnVjNCYkFHSmdBc0FBQUJCd0N0QlBrQUNnQU90QU1QQ2dFQnVQOS9zRllBS3pULy93QWcvcW9EMmdZQUJpWUFUQUFBQVFjQXJRUi9BQW9BRHJRQ0hnSUJBYmovZjdCV0FDczAvLzhBT3dBQUJWRUhNUVltQUM4QUFBRUhBSFVCc1FFeEFBdTJBdzREQVFGYlZnQXJOQUQvL3dBZ0FBQUVJd2RCQmlZQVR3QUFBUWNBZFFGOUFVRUFDN1lERGdNQkFCdFdBQ3MwQVAvL0FEdisrZ1ZSQmJBR0pnQXZBQUFCQndDdEJOTUFXZ0FPdEFNUkFnRUJ1UC9Qc0ZZQUt6VC8vd0FnL3VjRUd3WUFCaVlBVHdBQUFRY0FyUVJRQUVjQURyUURFUUlCQWJqL3ZMQldBQ3MwLy84QU8vNnFBN0VGc0FZbUFEQUFBQUVIQUswRW5nQUtBQTYwQWdzQ0FRRzQvMyt3VmdBck5QLy8vL0QrcWdIdkJnQUdKZ0JRQUFBQkJ3Q3RBellBQ2dBT3RBRUhBZ0VCdVA5L3NGWUFLelQvL3dBNy9xb0d0d1d3QmlZQU1RQUFBUWNBclFXbkFBb0FEclFERkFZQkFiai9mN0JXQUNzMC8vOEFIdjZxQm1BRVVRWW1BRkVBQUFFSEFLMEZxd0FLQUE2MEF6WUNBUUc0LzMrd1ZnQXJOUC8vQUR2K3FnVjRCYkFHSmdBeUFBQUJCd0N0QlA4QUNnQU90QUVOQWdFQnVQOS9zRllBS3pULy93QWcvcW9EMmdSUkJpWUFVZ0FBQVFjQXJRUm5BQW9BRHJRQ0h3SUJBYmovZjdCV0FDczAvLzhBYy8vcEJSQUg2QVltQURNQUFBRUhBa1lGSUFGVUFBMjNBd0l4RVFFQldsWUFLelEwQVAvL0FEc0FBQVR2QjBJR0pnQTBBQUFCQndCMUFiVUJRZ0FMdGdFWUR3RUJiRllBS3pRQS8vLy8xLzVnQkRnRjlnWW1BRlFBQUFFSEFIVUJrdi8yQUF1MkF6QURBUUdXVmdBck5BRC8vd0E3L3FvRXZBV3dCaVlBTmdBQUFRY0FyUVNWQUFvQURyUUNJUmdCQWJqL2Y3QldBQ3MwLy8vLzd2NnJBdEVFVkFZbUFGWUFBQUVIQUswRE5BQUxBQTYwQWhvQ0FRRzQvNEN3VmdBck5QLy9BQ24rbndTakJjWUdKZ0EzQUFBQkJ3Q3RCS1QvL3dBT3RBRTlLd0VCdVArSXNGWUFLelQvL3dBdS9wWURzd1JQQmlZQVZ3QUFBUWNBclFSdC8vWUFEclFCT1NrQkFiai9mN0JXQUNzMC8vOEFxZjZnQlFrRnNBWW1BRGdBQUFFSEFLMEVsd0FBQUE2MEFnc0NBUUc0LzNXd1ZnQXJOUC8vQUVQK29BS1ZCVUVHSmdCWUFBQUJCd0N0QS9zQUFBQU90QUlaRVFFQnVQK0pzRllBS3pULy93QmovK2dGSEFmbUJpWUFPUUFBQVFjQ1JnVDVBVklBRGJjQ0FSc0FBUUZzVmdBck5EUUEvLzhBcFFBQUJXRUhMUVltQURvQUFBRUhBS1VBNEFGR0FBdTJBaGdKQVFGMlZnQXJOQUQvL3dCdUFBQUQ3Z1hoQmlZQVdnQUFBUVlBcFJ2NkFBdTJBaGdKQVFHZ1ZnQXJOQUQvL3dDbC9xb0ZZUVd3QmlZQU9nQUFBUWNBclFUS0FBb0FEclFDRFFRQkFiai9mN0JXQUNzMC8vOEFidjZxQSs0RU9nWW1BRm9BQUFFSEFLMEVPQUFLQUE2MEFnMEVBUUc0LzMrd1ZnQXJOUC8vQU1QK3FnZEJCYkFHSmdBN0FBQUJCd0N0QmMwQUNnQU90QVFaRXdFQnVQOS9zRllBS3pULy93Q0EvcW9GL2dRNkJpWUFXd0FBQVFjQXJRVXNBQW9BRHJRRUdSTUJBYmovZjdCV0FDczAvLy8vN1A2cUJNNEZzQVltQUQ0QUFBRUhBSzBFbHdBS0FBNjBBeEVDQVFHNC8zK3dWZ0FyTlAvLy8rNytxZ1BQQkRvR0pnQmVBQUFCQndDdEJFTUFDZ0FPdEFNUkFnRUJ1UDkvc0ZZQUt6VC8vLzhNLytrRlZnWFdCQ1lBTTBZQUFRY0JjZjRaLy84QURiY0RBaTRSQUFBU1ZnQXJORFFBLy8vL3BnQUFBK01GR3dZbUFrTUFBQUFIQUs3L3F2N2MvLy8vNGdBQUJDd0ZIZ1FtQWpnOEFBQUhBSzcrdi83Zi8vLy8vUUFBQk5jRkd3UW1BZlE4QUFBSEFLNysydjdjLy84QUFnQUFBZVlGSGdRbUFmTThBQUFIQUs3KzMvN2YvLzhBSHYvdEJGQUZHd1FtQWUwS0FBQUhBSzcrKy83Yy8vLy9tZ0FBQktFRkd3UW1BZU04QUFBSEFLNytkLzdjLy84QUdBQUFCSFFGR2dRbUFnTUtBQUFIQUs3L0V2N2IvLy8vcGdBQUErTUVqUVlHQWtNQUFQLy9BQjcvL3dQakJJMEdCZ0pDQUFELy93QWVBQUFEOEFTTkJnWUNPQUFBLy8vLzNRQUFCQTRFalFZR0FlSUFBUC8vQUI0QUFBU2JCSTBHQmdIMEFBRC8vd0FyQUFBQnFnU05CZ1lCOHdBQS8vOEFIZ0FBQklBRWpRWUdBZkVBQVAvL0FCNEFBQVd4QkkwR0JnSHZBQUQvL3dBZUFBQUVtd1NOQmdZQjdnQUEvLzhBVFAvdEJFWUVvQVlHQWUwQUFQLy9BQjRBQUFRbUJJMEdCZ0hzQUFELy93QnVBQUFFUWdTTkJnWUI2QUFBLy84QWRRQUFCR1VFamdZR0FlTUFBUC8vLzdjQUFBUnVCSTBHQmdIa0FBRC8vd0FyQUFBQ3RRWG1CaVlCOHdBQUFRY0FhdjlqQUI0QURiY0NBUTBEQVFHRVZnQXJORFFBLy84QWRRQUFCR1VGNWdZbUFlTUFBQUVHQUdwOEhnQU50d1FERndrQkFZTldBQ3MwTkFELy93QWVBQUFEOEFYbUJpWUNPQUFBQVFZQWFuOGVBQTIzQlFRWkJ3RUJnMVlBS3pRMEFQLy9BQjRBQUFQakJoNEdKZ0g2QUFBQkJ3QjFBVDBBSGdBTHRnSUlBd0VCZzFZQUt6UUEvLzhBRXYvdUErc0VuZ1lHQWVrQUFQLy9BQ3NBQUFHcUJJMEdCZ0h6QUFELy93QXJBQUFDdFFYbUJpWUI4d0FBQVFjQWF2OWpBQjRBRGJjQ0FRMERBUUdFVmdBck5EUUEvLy8vOXYvdEE1Y0VqUVlHQWZJQUFQLy9BQjRBQUFTQUJoNEdKZ0h4QUFBQkJ3QjFBUzBBSGdBTHRnTU9Bd0VCaEZZQUt6UUEvLzhBV3YvcEJGUUY5Z1ltQWhFQUFBRUdBS0YxSGdBTHRnSWRGd0VCaEZZQUt6UUEvLy8vcGdBQUErTUVqUVlHQWtNQUFQLy9BQjcvL3dQakJJMEdCZ0pDQUFELy93QWVBQUFEelFTTkJnWUIrZ0FBLy84QUhnQUFBL0FFalFZR0FqZ0FBUC8vQUNBQUFBU2lCZllHSmdJT0FBQUJCd0NoQU5RQUhnQUx0Z01SQ0FFQmhGWUFLelFBLy84QUhnQUFCYkVFalFZR0FlOEFBUC8vQUI0QUFBU2JCSTBHQmdIMEFBRC8vd0JNLyswRVJnU2dCZ1lCN1FBQS8vOEFIZ0FBQklZRWpRWUdBZjhBQVAvL0FCNEFBQVFtQkkwR0JnSHNBQUQvL3dCSS8rMEVNd1NnQmdZQ1FRQUEvLzhBYmdBQUJFSUVqUVlHQWVnQUFQLy8vN2NBQUFSdUJJMEdCZ0hrQUFBQUF3QVMvazhEMkFTZkFCNEFQZ0JDQUNoQUV4OEJBZ0krUGhVL05EUkFNQ29MY2c4TEZYNEFQelBNSzh6Tk14STVFamt2TXhJNU9UQXhRU2MzRnpJMk5qYzJKaVluSmdZR0J3YytBeGNlQXdjT0F5Y1hIZ01IRGdNbkxnTTNNeDRDRnhZMk5qYzJMZ0luSnhNREl4TUNCSm9WZ0Q5OFdBa0lRMnMyUEd4UERiVUpVMytZVGttUWRVTUZCRnFLbnRhQ1JZOTRSZ1VGWFpDcVZFNk9iRHdEc2dFNVlUMUFpR01LQng4L1ZTNldpMW0xV1FJckFYUUJJRkJKUVVzZkFRRWhTejRCVlh0UUpRRUJJa2gyVmxaNVNpTkdBUUVlUTNCVVlJVlNKUUlCS2xKK1ZrSlBKQUVDSWxSS05ra3JGQUVCL2tmOS93SUJBQUFFQUI3K21RU2JCSTBBQXdBSEFBc0FEd0FkUUEwREFnSUdDd2Q5RHc0S0NnWVNBRDh6RU00elB6TVNPUzh6TURGQkJ5RTNFd01qRXlFREl4TVRBeU1UQTYwYi9YSWJmc3ExeXdPeXk3VEtvMXExV2dLTG1aa0NBdnR6QkkzN2N3U04vQTM5L3dJQkFBSUFTUDVWQkRNRW9BQW5BQ3NBR0VBTEdSQitLQ1FrS2lvRkMzSUFLekl2TWhFelB6TXdNVUUzRGdJbkxnTTNOejRERng0Q0Z5TXVBaWNtRGdJSEJ3WWVBaGNXTmpZSEF5TVRBekcwR1pIWGdIT2pZaVFNRGc5YmtzVjZlN0pqQnJRRE1tVlFWNFplT1FzT0NRa3ZZbE5XZ1ZiZFdyUlpBWGdCZ0xKYUF3SmNtOEpvWm5ISm1GVURBMkd5ZVUxdE93TUNQM0dRVG1oRGlYUkpBd00yYnRIOS93SUJBUC8vQUhVQUFBUmxCSTRHQmdIakFBRC8vd0F1L2s4RlZ3U2ZCaVlDSndBQUFBY0NZUUtaLzdiLy93QWdBQUFFb2dYTEJpWUNEZ0FBQVFjQWNBQ3FBQ1lBQzdZRERnZ0JBYkJXQUNzMEFQLy9BRnIvNlFSVUJjc0dKZ0lSQUFBQkJnQndTeVlBQzdZQ0doY0JBYkJXQUNzMEFQLy9BRklBQUFUbEJJMEdCZ0lCQUFELy93QXIvKzBGY1FTTkJDWUI4d0FBQUFjQjhnSGFBQUQvLy8rYUFBQUdBQVlBQmlZQ2hBQUFBUWNBZFFLWEFBQUFDN1lHR1E4QkFVMVdBQ3MwQVAvLy8vVC94Z1NqQmg0R0pnS0dBQUFCQndCMUFZSUFIZ0FMdGdNd0VRRUJXMVlBS3pRQS8vOEFFdjM4QStzRW5nWW1BZWtBQUFBSEFjb0E0djZlLy84QWxBQUFCaWtHSGdZbUFlVUFBQUVIQUVRQnBRQWVBQXUyQkJnS0FRRnJWZ0FyTkFELy93Q1VBQUFHS1FZZUJpWUI1UUFBQVFjQWRRSXhBQjRBQzdZRUZnb0JBV3RXQUNzMEFQLy9BSlFBQUFZcEJlWUdKZ0hsQUFBQkJ3QnFBWEVBSGdBTnR3VUVId29CQVlSV0FDczBOQUQvL3dCMUFBQUVaUVllQmlZQjR3QUFBQWNBUkFDd0FCNy8vLyt2L2s0RWl3V3dCaVlBSlFBQUFRY0FwQUZtQUFBQUM3WUREZ1VCQVRsV0FDczBBUC8vQURIK1RnUEhCRkFHSmdCRkFBQUJCd0NrQUxRQUFBQUx0Z0k3TVFBQVRWWUFLelFBLy84QU8vNVlCTEVGc0FZbUFDa0FBQUVIQUtRQkp3QUtBQXUyQkJBQ0FBQkRWZ0FyTkFELy93QkYvazREMmdSUkJpWUFTUUFBQVFjQXBBRCtBQUFBQzdZQkxBQUFBRTFXQUNzMEFQLy8vNmIrVGdQakJJMEdKZ0pEQUFBQUJ3Q2tBUXNBQVAvL0FCNytWZ1B3QkkwR0pnSTRBQUFBQndDa0FOY0FDUC8vLy9EK3FnR2ZCRG9HSmdDTkFBQUJCd0N0QXpZQUNnQU90QUVIQWdFQnVQOS9zRllBS3pRQUFBQUFBQThBdWdBREFBRUVDUUFBQUY0QUFBQURBQUVFQ1FBQkFBd0FYZ0FEQUFFRUNRQUNBQXdBYWdBREFBRUVDUUFEQUJvQWRnQURBQUVFQ1FBRUFCb0FkZ0FEQUFFRUNRQUZBQ1lBa0FBREFBRUVDUUFHQUJvQXRnQURBQUVFQ1FBSEFFQUEwQUFEQUFFRUNRQUlBQXdCRUFBREFBRUVDUUFKQUNZQkhBQURBQUVFQ1FBTEFCUUJRZ0FEQUFFRUNRQU1BQlFCUWdBREFBRUVDUUFOQUZ3QlZnQURBQUVFQ1FBT0FGUUJzZ0FEQUFFRUNRQVpBQXdBWGdCREFHOEFjQUI1QUhJQWFRQm5BR2dBZEFBZ0FESUFNQUF4QURFQUlBQkhBRzhBYndCbkFHd0FaUUFnQUVrQWJnQmpBQzRBSUFCQkFHd0FiQUFnQUZJQWFRQm5BR2dBZEFCekFDQUFVZ0JsQUhNQVpRQnlBSFlBWlFCa0FDNEFVZ0J2QUdJQWJ3QjBBRzhBU1FCMEFHRUFiQUJwQUdNQVVnQnZBR0lBYndCMEFHOEFJQUJKQUhRQVlRQnNBR2tBWXdCV0FHVUFjZ0J6QUdrQWJ3QnVBQ0FBTXdBdUFEQUFNQUExQURzQUlBQXlBREFBTWdBeUFGSUFid0JpQUc4QWRBQnZBQzBBU1FCMEFHRUFiQUJwQUdNQVVnQnZBR0lBYndCMEFHOEFJQUJwQUhNQUlBQmhBQ0FBZEFCeUFHRUFaQUJsQUcwQVlRQnlBR3NBSUFCdkFHWUFJQUJIQUc4QWJ3Qm5BR3dBWlFBdUFFY0Fid0J2QUdjQWJBQmxBRU1BYUFCeUFHa0Fjd0IwQUdrQVlRQnVBQ0FBVWdCdkFHSUFaUUJ5QUhRQWN3QnZBRzRBUndCdkFHOEFad0JzQUdVQUxnQmpBRzhBYlFCTUFHa0FZd0JsQUc0QWN3QmxBR1FBSUFCMUFHNEFaQUJsQUhJQUlBQjBBR2dBWlFBZ0FFRUFjQUJoQUdNQWFBQmxBQ0FBVEFCcEFHTUFaUUJ1QUhNQVpRQXNBQ0FBVmdCbEFISUFjd0JwQUc4QWJnQWdBRElBTGdBd0FHZ0FkQUIwQUhBQU9nQXZBQzhBZHdCM0FIY0FMZ0JoQUhBQVlRQmpBR2dBWlFBdUFHOEFjZ0JuQUM4QWJBQnBBR01BWlFCdUFITUFaUUJ6QUM4QVRBQkpBRU1BUlFCT0FGTUFSUUF0QURJQUxnQXdBQU1BQVAvMEFBRC9hZ0JrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUNBQWdBQ1AvL0FBOEFBUUFDQUE0QUFBQUFBQUFDS0FBQ0FGa0FKUUErQUFFQVJBQmVBQUVBYWdCcUFBRUFjQUJ3QUFFQWRRQjFBQUVBZ1FDQkFBRUFnd0NEQUFFQWhnQ0dBQUVBaVFDSkFBRUFpd0NXQUFFQW1BQ2ZBQUVBb1FDakFBRUFwUUNtQUFFQXFBQ3RBQU1Bc1FDeEFBRUF1Z0M3QUFFQXZ3Qy9BQUVBd1FEQkFBRUF3d0RFQUFFQXh3REhBQUVBeXdETEFBRUF6UURPQUFFQTBBRFJBQUVBMHdEVEFBRUEyZ0RlQUFFQTRRRGhBQUVBNVFEbEFBRUE1d0RwQUFFQTZ3RDdBQUVBL1FEOUFBRUEvd0VCQUFFQkF3RURBQUVCQ0FFSkFBRUJGZ0VhQUFFQkhBRWNBQUVCSUFFaUFBRUJKQUVuQUFNQktnRXJBQUVCTXdFMEFBRUJOZ0UyQUFFQk93RThBQUVCUVFGRUFBRUJSd0ZJQUFFQlN3Rk5BQUVCVVFGUkFBRUJWQUZZQUFFQlhRRmVBQUVCWWdGaUFBRUJaQUZrQUFFQmFBRm9BQUVCYWdGc0FBRUJiZ0Z1QUFFQmNBRndBQUVCeXdIUkFBSUI0Z0gyQUFFQitnSDZBQUVDQXdJREFBRUNCUUlGQUFFQ0RBSU9BQUVDRUFJUkFBRUNFd0lUQUFFQ0Z3SVhBQUVDR1FJYkFBRUNJUUloQUFFQ0pnSW9BQUVDS2dJcUFBRUNPQUk0QUFFQ093STdBQUVDUFFJOUFBRUNRQUpEQUFFQ2J3SnpBQUVDZ3dLSUFBRUNpd0x6QUFFQzlnTzFBQUVEdHdPM0FBRUR1UVBEQUFFRHhRUE9BQUVEMEFQckFBRUQ3d1B2QUFFRDhRUDRBQUVEK2dQOEFBRUQvd1FEQUFFRUJRU1FBQUVFa3dTVUFBRUVsZ1NYQUFFRW1RU2NBQUVFcGdVQ0FBRUZCQVVPQUFFRkVRVWVBQUVBQVFBREFBQUFFQUFBQUJZQUFBQWdBQUVBQVFDdEFBSUFBUUNvQUt3QUFBQUNBQUlBcUFDc0FBQUJKQUVuQUFVQUFRQUFBQjRBRUFBS0FBSUFMZ0EyQUFKamNITndBRHByWlhKdUFFQUFCRVJHVEZRQU9HTjVjbXdBT0dkeVpXc0FPR3hoZEc0QU9BQUJBQUFBQVFBaUFBSUFDQUFDQUM0RUVBQUFBQUVBQUFBQUFBRUFBUUFPQUFBQUFROENBQVVBSkFCSUFBRC8vd0FDQUFBQUFRQUJTMWdBQkFBQUFld1RxQkVFRVFRWGdCRG1GeVlSU2hHSUVsb1JiRWU2RXBvU21oV1FFYXdTbWhLYUVsb1N2Q0JjR1J3ZmtoR2FFY0lXekJpcUVkZ1V1aEo0RWlJUk5pbXdFVlFtamhGVUVWUVRCQklpRVhvWVJCSThFZTRSQ2hJOEZRQVNJaEphR1pJZXpCY21FbG9YSmlXUUo1QWkxaDFrRU93U1BCRWlQa1FSVkRlK0pKNG9raElJRVBJUStFRXVFUDRVUWhQV0doUTVzQzF5TkE0c0pCS2FNTFk3NGhiTUlTb1NtaEthRlVZU21oS2FFcG95WUJxZUVwb1RmaDRHSEVBWDRpTzRITklSUUNJQUVRb1RWRFhrUkN3U0loUjhLdVliS0JMZUVpSWJzaE1xRm5ZVURCTGVGeVlUQkJHYUVqd1RWQklpSHN3UlFCYk1FUW9Wa0JXUUZaQVNtaGJNRVFvU21oS2FFbG9SUUJiTUVRb1JCQzhVRVFRUkJCRUVFUndWMmhZb0VSWVJMQkVRRVJZUkVCRmVFUkFSaUJKYUVsb1NXaEphSDVJWEpoY21GeVlYSmhjbUZ5WVhKaEdJRVd3UmJCRnNFV3dTbWhLYUVwb1NtaEthRWxvU1doSmFFbG9TV2hpcUVuZ1NlQko0RW5nU2VCSjRFbmdSTmhFMkVUWVJOaEZVRXdRVEJCTUVFd1FUQkJJOEVqd1hKaEo0RnlZU2VCY21FbmdSaUJHSUVZZ1JpQkphRVd3Uk5oRnNFVFlSYkJFMkVXd1JOaEZzRVRZU21oRlVFcG9TbWhLYUVwb1NtaFdRRWF3UnJCR3NFYXdTbWhGVUVwb1JWQkthRVZRUlZCSmFFd1FTV2hNRUVsb1RCQkY2RVhvUmVoK1NINUlma2hIQ0dLb1NQQmlxRWRnUjJCSFlFUllSRmhFY0VSQVJFQkVRRVJBUkVCRVFFUkFSRmhFV0VSWVJGaEVXRVJBUkVCRVFFUllSTEJFc0VTd1JMQkVXRVJZUkZoRWNGeVlSYkJLYUVwb1NXaGlxRnlZUlNoRnNFZGdTbWhLYUZaQVNtaEthRWxvU3ZCK1NHS29XekJLYUdLb1JWQk1FRWp3VEJCRnNIc3dTbWhLYUZaQVZrQlZHRnlZUlNoN01FV3dTbWhLYUVsb1N2QkdJSDVJV3pCSjRFVFlUQkJJaUVqd1JDaEUyRVVBU1BCSENFY0lSd2hpcUVqd1JCQkVFRVFRU21oRlVGeVlTZUJGc0VUWVJtaEk4RVlnWXFoSThFcG9XekJFS0Vwb1hKaEo0RnlZU2VCRnNFVFlSTmhFMkZzd1JDaEphRXdRVEJCSWlGVVlTUEJWR0Vqd1ZSaEk4RnlZU2VCY21FbmdYSmhKNEZ5WVNlQmNtRW5nWEpoSjRGeVlTZUJjbUVuZ1hKaEo0RnlZU2VCY21FbmdYSmhKNEVXd1JOaEZzRVRZUmJCRTJFV3dSTmhGc0VUWVJiQkUyRVd3Uk5oRnNFVFlTbWhLYUVsb1RCQkphRXdRU1doTUVFbG9UQkJKYUV3UVNXaE1FRWxvVEJCTUVHS29TUEJpcUVqd1lxaEk4SDVJZXpCRkFFVlFUZmg3TUZaQVlxaEthRVZRWEpoSjRFV3dTbWhKYUV3UVJlaEZLRWlJU1doSmFFcG9SVkJXUUZaQVJyQkthRVZRU21oRlVFbG9TdkJJaUVYb2ZraEdhRWp3Um1oSThFY0lSMkJKYUVSQVJGaEVRRVJ3UkVCRVdFUndBQWtzNkFBUUFBRTdhVjVZQUpnQWxBQUFBQUFBQUFBQUFFZ0FBQUFBQUFBQUFBQUFBQUFBQS8rVC80d0FBQUFBQUVRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCRUFBUC9rQUJILzVRQUFBQUFBQUFBQUFBQUFBUC9yQUFBQUFBQUFBQUFBQVAvdEFBRC8xZi9sQUFBQUFQL3FBQUFBQUFBQUFBQUFBQUFBLytuL212LzEvK29BQUFBQUFBRC80UUFBQUFBQUFBQUFBQUFBQUFBQUFBRC85UUFBQUFELzlRQUEvL1QvOWYvT0FBRC83LytpLzMvLzhmK0lBQUFBQVAvRUFBQUFBUC9ILzdzQUFBQUFBQUQvcVFBQUFBQUFEQUFSQUFEL3lRQVMvNDhBQVAvZEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8vRUFBQUFBQUFBQUFBQUEvNzBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC90QUFBQUFBQUFBQUFBQVAvdC8rLy81Z0FBQUFBQUFBQVVBQUFBQUFBQUFBRC84QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC83UUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC96QUFBQUFBQUFBQUFBQVAveUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLy9FQUFBQUFBQUFBQUFBQS8zZ0FBQUFBQUFELzZ3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL3dBQUFBQUFBQS8vQUFBQUFBQUFBQUFQL3pBQUFBQUFBQUFBRC84Zi94QUFBQUFBQUFBQUFBQUFBQUFBQUFEd0FBQUFBQUFBQUFBQUFBQUFBQUFBRC9sUUFBQUFBQUFBQUFBQUFBQUFBQUFBRC8xd0FBQUFBQUFBQUFBQUFBQUFBQS8rb0FBQUFBQUFBQUFBQUEvK3NBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLzVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvNmdBQUFBRC83Z0FBQUFBQUFQL3NBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzhnQUFBQUFBQUFBQUFBQUFBQUFBQUFELzdBQUFBQUFBQVArL0FBQUFBUC9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvWUFBRC92Ly9qLzlqL292L0wvN2Yvdi8vWi8rei9xLytnQUJJQUVRQUFBQUFBRGYvR0FBRC82Zi93Ly9NQUVRQUEveTMvN3dBUy84d0FBUC9pQUFBQUFBQUFBQUFBQVArZy8vTUFBUC9tLytILzZRQUEvK2NBQVAvbC8rbi8yQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC93QUFBQUFBQUFBQUFBQUFBQVArakFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC8xQUFBQUFBQUFBQUFBQVAvakFBQUFBQUFBLy9FQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzhRQUFBQUFBQVAveUFBQUFBQUFBQUFEL3hRQUEvK3ovaUFBQS84Ny93d0FBQUFBQUFBQUFBQUFBQUFBQS81VUFBUCt3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvakFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvK2IvNXdBQUFBRC81d0FBLyt2LzYvL2hBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUR2L1NBQUFBQUFBUkFBQUFBQUFSLzlFQUFBQUFBQUQvbmYvay81UC9zZis1LzQvL25mK2gvN2ovcndBQUFCQUFFQUFBQUFBQUFQK01BQUQvcy8vdy8vRUFEd0FBL3liLzdRQVEveGovdlAvRS84c0FBQUFBLzM3L2ZQOFEvL0VBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzlRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzZ3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC83QUFBQUFBQUFBQUFBQUQvN0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDlFLzczL00vOCtBQUQvTFA5RS8wdi9jZ0FBQUFBQUJ3QUhBQUFBQUFBQS95Y0FBUDlxLzlFQUFBQUZBQUQrZWdBQUFBZitZZ0FBLzRiL2tnQUFBQUQvRC84TUFBQUFBQUFBQUFEL3Z3QUFBQlAvOGdBQUFBRC8xUDk3QUJQL3l2OFIvdTMvMmdBQUFBQUFBUDgvQUFBQUFQODcvM0VBQUFBQUFBRC9VUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUCtSQUFELzRRQUFBQUQvMWYvbi85Ly80Zi90QUFEL3l3QUFBQUFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS80VUFBQUFBLzhRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL3IvK1lBQUFBTi8rd0FBUC9yLyszLzVRQU5BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDlXQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvN1FBQUFBQUFBQUFBLzlqLzdBQUFBQklBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLzRVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvVS8vTUFBUCsxLzluLzB2L1MvK1QvOWYrMEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEL0h3QUFBQUQvMndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL3ZBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL3NBQUFBQUFBQS83UUFBQUFBLzdzQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS85VUFBUC93QUFBQUFBQUFBQUFBQVAvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQK3QvdlVBQVAvQS8vQUFBQUFBLzhrQUFBQUFBQUFBQUFBQUFBRC95QUFBQUFBQUFQLzEvK3YvNXdBQUFBQUFBQUFBQUFEL3ZmL3AvNXIvcFFBQS81SC92UUFBQUFBQUFBQUFBQklBRWdBQUFBQUFBUC9TQUFBQUFBQUFBQUFBQUFBQS9tMEFBQUFBLzRrQUFBQUEvOG9BQUFBQS83di82UUFBQUFBQUFQL3NBQUFBQUFBQUFBQUFBUC9zQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC8yQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL2RBQUFBQUFBQUFBQUFBUDk1QUFBQUFBQUEvL1VBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLzlrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS84bi81UUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL29BQUFBQUFBQUFBRC84d0FBQUFBQUFBQUFBQUFBQVAvekFBQUFBUDkyQUFELzlmL3pBQUFBRC8vR0FBQUFBQUFBQUFBQUFQL2hBQUFBQUFBQUFBQUFBQUFBLytiK3ZBQUFBQUFBQUFBQUFBRC95UUFBQUFELzJRQUEvemdBQUFBQkFQb0FDQUFLQUJRQUZRQVdBQmNBR0FBWkFCb0FHd0FjQUIwQUpRQW1BQ2NBS0FBcEFDb0FLd0FzQUMwQUxnQXZBREFBTVFBeUFETUFOQUExQURZQU53QTRBRGtBT2dBN0FEd0FQUUErQUdVQVp3Q0JBSU1BaEFDTUFJOEFrUUNUQUxFQXNnQ3pBTFFBdFFDMkFMY0F1QUM1QUxvQTBnRFRBTlFBMVFEV0FOY0EyQURaQU5vQTJ3RGNBTjBBM2dEZkFPQUE0UURpQU9NQTVBRGxBT1lBNXdEb0FPa0JMd0V6QVRVQk53RTVBVHNCUVFGREFVVUJTUUZMQVV3QldBRlpBYWNCclFHeUFiVUNpd0tNQW80Q2tBS1JBcElDa3dLVUFwVUNsZ0tYQXBnQ21RS2FBcHNDbkFLZEFwNENud0tnQXFFQ29nS2pBcVFDcFFLbUFxY0NxQUtwQXFvQ3h3TEpBc3NDelFMUEF0RUMwd0xWQXRjQzJRTGJBdDBDM3dMaEF1TUM1UUxuQXVrQzZ3THRBdThDOFFMekF2UUM5Z0w0QXZvQy9BTCtBd0FEQWdNRUF3WURDUU1MQXcwRER3TVJBeE1ERlFNWEF4a0RHd01kQXg4RElRTWpBeVVESndNcEF5c0RMUU12QXpFRE13TTFBellET0FNNkF6d0RQZ09YQTVnRG1RT2FBNXNEbkFPZEE1OERvQU9oQTZJRG93T2tBNlVEcGdPbkE2Z0RxUU9xQTZzRHJBT3RBNjREdmdPL0E4QUR3UVBDQThNRHhBUEZBOFlEeHdQSUE4a0R5Z1BMQTh3RHpRUE9BODhEMEFQUkE5SUQwd1BrQStZRDZBUHFBLzhFQVFRREJCZ0VIZ1FrQkk0RWt3U1hCUmdGR2dBQkFCUC9JQUFCQU1RQURnQUJBUGIvMVFBQkFNb0FDd0FCQVBiLzJBQUJBRnNBQ3dBQkFSei84UUFCQWViL3h3QUJBZWIvOFFBQkFlWUFEUUFDQU1yLzdRRDIvOEFBQWdIbS83Y0I2Ly93QUFJQTl2LzFBWVgvc0FBQ0FPMy95UUVjLys0QUFnRVJBQXNCYlAvbUFBSUE5di9BQVlYL3NBQURBZVgvOVFIbS8rNERrZi8xQUFNQVN2L3VBRnYvNmdIbS8vQUFBd0JLQUE4QVdBQXlBRnNBRVFBRUFBMy81Z0JCLy9RQVlmL3ZBVTMvN1FBRUFBMEFGQUJCQUJFQVZ2L2lBR0VBRXdBRkFGdi9wQUhtLzFRQjYvL3hBZlgvOFFKQi8vTUFCUUFOQUE4QVFRQU1BRmIvNndCaEFBNENRZi9wQUFVQVcvL2xBTGoveXdETi8rUUI5Zi9yQWtILzdRQUdBQkQvaEFBUy80UUJoditFQVlyL2hBR08vNFFCai8rRUFBWUF5di9xQU8zLzdnRDIvNnNBL2dBQUFUci83QUZ0Lyt3QUJnREsvK29BN2YvdUFQYi9zQUQrQUFBQk92L3NBVzMvN0FBSEFFb0FEUUMrLy9VQXhnQUxBTWYvNmdES0FBd0E3Zi9JQVJ6LzhRQUhBSUgvM3dDMS8vTUF0Ly93QU1ULzZnRFovOThBNXYvZ0FXei80QUFJQVBiLzhBRCtBQUFCQ2YveEFTRC84d0U2Ly9FQlkvL3pBV1gvNlFGdC85TUFDQURaQUJVQTdRQVZBVW4vNUFGSy8rVUJUUC9rQVdMLzR3RmsvK0lCYlAva0FBZ0FXQUFPQUlIL253QysvL1VBeFAvZUFNZi81UURaLzZnQTdmL0tBVi8vNHdBSkFQYi91Z0QrQUFBQkNmL1BBU0QvMndFNi8xQUJTditkQVdQLzhBRmwvL0lCYmY5TUFBa0F5di9xQU8zL3VBRDIvK29CQ2Yvd0FTRC84UUU2LytzQlkvLzFBVzMvN0FHRi83QUFDZ0FHLzlZQUMvL1dBWVQvMWdHRi85WUJoLy9XQVlqLzFnR0ovOVlEN1AvV0ErMy8xZ1B3LzlZQUNnQUcvL1VBQy8vMUFZVC85UUdGLy9VQmgvLzFBWWovOVFHSi8vVUQ3UC8xQSszLzlRUHcvL1VBQ2dEbS84TUE5di9QQVA0QUFBRTYvODRCU2YvbkFVei8zd0ZpLzlFQlpQL3NBV3ovb0FGdC85RUFDd0E0LzlnQTB2L1lBTmIvMkFFNS85Z0JSZi9ZQXgvLzJBTWgvOWdESS8vWUE5TC8yQVNJLzlnRTBQL1lBQTBBWFAveUFGNy84Z0R1Ly9JQk5QL3lBVVQvOGdGZS8vSUROLy95QXpuLzhnTTcvL0lEMi8veUJBZi84Z1FWLy9JRTJ2L3lBQTBBOXYrNkFQbi8yUUQrQUFBQkNmL1BBU0QvMndFNi8xQUJTUC9aQVVyL25RRmovL0FCWmYveUFXMy9UQVFyLzlrRWkvL1pBQTRBWFAvdEFGNy83UUR1LyswQTl2K3FBVFQvN1FGRS8rMEJYdi90QXpmLzdRTTUvKzBETy8vdEE5di83UVFILyswRUZmL3RCTnIvN1FBUEFPMEFGQUR5QUJBQTl2L3dBUG4vOEFEK0FBQUJBUUFNQVFRQUVBRTYvL0FCU1Avd0FVci81Z0ZSQUJBQmJmL3dBWEFBRUFRci8vQUVpLy93QUJFQUx2L3VBRG4vN2dLbS8rNENwLy91QXFqLzdnS3AvKzRDOXYvdUF5WC83Z01uLys0REtmL3VBeXYvN2dNdC8rNERMLy91QThQLzdnUnovKzRFZGYvdUJOTC83Z0FSQUM3LzdBQTUvK3dDcHYvc0FxZi83QUtvLyt3Q3FmL3NBdmIvN0FNbC8rd0RKLy9zQXluLzdBTXIvK3dETGYvc0F5Ly83QVBELyt3RWMvL3NCSFgvN0FUUy8rd0FFZ0RaLzY0QTVnQVNBT3YvNEFEdC82MEE3Ly9XQVAzLzN3RUIvOUlCQi8vZ0FSei96Z0V1LzkwQk1QL2lBVGovNEFGQS8rQUJTdi9wQVUzLzJnRmYvNzBCYWYvZkFXd0FFUUFTQUZ2L3dRQzQvOFVBeXYrMEFPci8xd0QyLzdrQS92L3BBUW4vc2dFYy85SUJJUC9JQVRyL29BRksvOFVCV1Ava0FXUC96QUZsLzh3QmJmL0xBVzcvN3dIMS8rWUNRZi9vQUJNQjQvL3VBZVgvOVFIbS8vRUI2UC95QWdULzhnSUkvL0lDSVAveUFpTC83Z0lrLy9JRFhmL3VBNG4vOGdPUi8vVURrdi91QTVQLzdnVGgvKzRFNy8vdUJQTC83Z1VHLy9JRkMvL3VBQk1CNC8vbEFlWC84UUhtLytzQjZQL3BBZ1QvNlFJSS8ra0NJUC9wQWlMLzVRSWsvK2tEWGYvbEE0bi82UU9SLy9FRGt2L2xBNVAvNVFUaC8rVUU3Ly9sQlBMLzVRVUcvK2tGQy8vbEFCVUFYUC8xQU83LzlRRDIvN29BK2YvWkFQNEFBQUVKLzg4QklQL2JBVFQvOVFFNi8xQUJSUC8xQVVqLzJRRksvNTBCWHYvMUFXUC84QUZsLy9JQmJmOU1BOXYvOVFRSC8vVUVGZi8xQkN2LzJRU0wvOWtBRmdDNC85UUF2di93QU1MLzdRREVBQkVBeXYvZ0FNei81d0ROLytVQXp2L3VBTmtBRWdEcS8ra0E5di9YQVRyLzF3RksvOU1CVFAvV0FVMy94UUZZLytjQllnQU5BV1FBREFGdC85WUJidi95QWV2LzZRSkIvK2tBRmdBai84TUFXUC92QUZ2LzN3Q2EvKzRBdVAvbEFMbi8wUURFQUJFQXl2L0lBTmtBRXdEbS84VUE5di9LQVRyL253RkovMUVCU3Y5N0FVei95Z0ZOLzkwQldQL3lBV0wvZFFGay84b0JiUDlQQVczL2pBSG0vODBBR0FBNkFCUUFPd0FTQUQwQUZnRVpBQlFDcWdBV0F6RUFFZ016QUJZRE5RQVdBNXdBRmdPckFCWURyZ0FXQStRQUVnUG1BQklENkFBU0Erb0FGZ1A3QUJRRUF3QVdCSUVBRmdTREFCWUVoUUFXQkpjQUZnVFRBQlFFMVFBVUJOY0FFZ0FZQURqLzZ3QTkvL01BMHYvckFOYi82d0U1LytzQlJmL3JBcXIvOHdNZi8rc0RJZi9yQXlQLzZ3TXovL01ETmYvekE1ei84d09yLy9NRHJ2L3pBOUwvNndQcS8vTUVBLy96QklILzh3U0QvL01FaGYvekJJai82d1NYLy9NRTBQL3JBQmtBVS8vc0FSai83QUdGQUFBQ3ZQL3NBcjMvN0FLKy8rd0N2Ly9zQXNELzdBTUsvK3dERFAvc0F3Ny83QU8xLyt3RHUvL3NBOWYvN0FRZC8rd0VJZi9zQkZ6LzdBUmUvK3dFWVAvc0JHTC83QVJrLyt3RVp2L3NCR2ovN0FSdy8rd0VzZi9zQUJ3QUN2L2lBQTBBRkFBTy84OEFRUUFTQUVyLzZnQlcvOWdBV1AvcUFHRUFFd0J0LzY0QWZQL05BSUgvb0FDRy84RUFpZi9BQUxqLzBBQzgvK29BdnYvdUFMLy94Z0RBQUEwQXd2L3BBTVAvMWdERy8rZ0F4Lys2QU1yLzZRRE0vOHNBemYvYUFNNy94d0dOLzlNQ1FmL05BQjBBT1Ard0FEci83UUE5LzlBQTB2K3dBTmIvc0FFWi8rMEJPZit3QVVYL3NBS3EvOUFESC8rd0F5SC9zQU1qLzdBRE0vL1FBelgvMEFPYy85QURxLy9RQTY3LzBBUFMvN0FENnYvUUEvdi83UVFELzlBRWdmL1FCSVAvMEFTRi85QUVpUCt3QkpmLzBBVFEvN0FFMC8vdEJOWC83UUFnQUFiLzhnQUwvL0lBV3YvekFGMy84d0M5Ly9NQTl2LzFBUnIvOHdHRS8vSUJoZi95QVlmLzhnR0kvL0lCaWYveUFzWC84d0xHLy9NRE5QL3pBN2YvOHdQYS8vTUQ0Ly96QSt2Lzh3UHMvL0lEN2YveUEvRC84Z1A4Ly9NRUJQL3pCQ1gvOHdRbi8vTUVLZi96QklMLzh3U0UvL01FaHYvekJOVC84d1RXLy9NQUlnQmEvL1FBWFAveUFGMy85QUJlLy9NQXZmLzBBTzcvOGdFYS8vUUJOUC95QVVULzhnRmUvL0lDeGYvMEFzYi85QU0wLy9RRE4vL3pBem4vOHdNNy8vTUR0Ly8wQTlyLzlBUGIvL0lENC8vMEErdi85QVA4Ly9RRUJQLzBCQWYvOGdRVi8vSUVKZi8wQkNmLzlBUXAvL1FFZ3YvMEJJVC85QVNHLy9RRTFQLzBCTmIvOUFUYS8vTUFJZ0FHLzhBQUMvL0FBRHIveUFEZS8rc0E0Zi9uQU9iL3d3RDIvODhBL2dBQUFSbi95QUU2Lzg0QlIvL25BVW4vNXdGTS85OEJZdi9SQVdULzdBRnMvNkFCYmYvUkFZVC93QUdGLzhBQmgvL0FBWWovd0FHSi84QUR4di9yQSt6L3dBUHQvOEFEOFAvQUEvdi95QVFrLytzRUp2L3JCQ2ovNndRcS8rY0Vpdi9uQk5QL3lBVFYvOGdBSWdCYS85MEFYZi9kQUwzLzNRRDIvN29BK2YvWkFQNEFBQUVKLzg4Qkd2L2RBU0QvMndFNi8xQUJTUC9aQVVyL25RRmovL0FCWmYveUFXMy9UQUxGLzkwQ3h2L2RBelQvM1FPMy85MEQydi9kQStQLzNRUHIvOTBEL1AvZEJBVC8zUVFsLzkwRUovL2RCQ24vM1FRci85a0Vndi9kQklULzNRU0cvOTBFaS8vWkJOVC8zUVRXLzkwQUl3QmEvL1FBWFAvd0FGMy85QUM5Ly9RQTdmL3ZBTzcvOEFEeS8vTUEvZ0FBQVFULzh3RWEvL1FCTlAvd0FVVC84QUZSLy9NQlh2L3dBWEQvOHdMRi8vUUN4di8wQXpULzlBTzMvL1FEMnYvMEE5di84QVBqLy9RRDYvLzBBL3ovOUFRRS8vUUVCLy93QkJYLzhBUWwvL1FFSi8vMEJDbi85QVNDLy9RRWhQLzBCSWIvOUFUVS8vUUUxdi8wQUNRQU9QL2lBRHovNUFEUy8rSUExUC9rQU5iLzRnRFovK0VBMnYva0FOMy81QURlLytrQTdmL2tBUEwvNndFRS8rc0JNLy9rQVRuLzRnRkQvK1FCUmYvaUFWRC81QUZSLytzQlhmL2tBV2IvNUFGdi8rUUJjUC9yQXgvLzRnTWgvK0lESS8vaUE2ei81QVBHLytrRDB2L2lBOVAvNUFRRy8rUUVGUC9rQkNULzZRUW0vK2tFS1AvcEJJai80Z1RRLytJQUpBQUcvL0lBQy8veUFGci85UUJkLy9VQXZmLzFBUGIvOUFEK0FBQUJDZi8xQVJyLzlRRTYvL1VCYmYvMUFZVC84Z0dGLy9JQmgvL3lBWWovOGdHSi8vSUN4Zi8xQXNiLzlRTTAvL1VEdC8vMUE5ci85UVBqLy9VRDYvLzFBK3ovOGdQdC8vSUQ4UC95QS96LzlRUUUvL1VFSmYvMUJDZi85UVFwLy9VRWd2LzFCSVQvOVFTRy8vVUUxUC8xQk5iLzlRQW9BQkQvSGdBUy94NEFKZi9OQUxML3pRQzAvODBBeC8veUFRMy96UUdHL3g0Qml2OGVBWTcvSGdHUC94NENrUC9OQXBIL3pRS1MvODBDay8vTkFwVC96UUtWLzgwQ2x2L05Bc2YvelFMSi84MEN5Ly9OQTVmL3pRT2YvODBEeC8vTkEvUC96UVFKLzgwRUMvL05CQy8velFReC84MEVNLy9OQkRYL3pRUTMvODBFT2YvTkJEdi96UVE5LzgwRVAvL05CRUgvelFSRC84MEVSZi9OQktyL3pRQXhBRGovNHdBOC8rVUFQZi9rQU5MLzR3RFUvK1VBMXYvakFObi80Z0RhLytVQTNmL2xBTjcvNlFEeS8rb0JCUC9xQVRQLzVRRTUvK01CUS8vbEFVWC80d0ZRLytVQlVmL3FBVjMvNVFGbS8rVUJiUC9rQVcvLzVRRncvK29DcXYva0F4Ly80d01oLytNREkvL2pBelAvNUFNMS8rUURuUC9rQTZ2LzVBT3MvK1VEcnYva0E4Yi82UVBTLytNRDAvL2xBK3IvNUFRRC8rUUVCdi9sQkJULzVRUWsvK2tFSnYvcEJDai82UVNCLytRRWcvL2tCSVgvNUFTSS8rTUVsLy9rQk5ELzR3QXhBRmIvYlFCYi80d0FiZjIvQUh6K2ZRQ0IvcndBaHY4ckFJbi9Td0M0LzJFQXZ2K1BBTC8vRHdERC91Z0F4djhmQU1mKzVRREsvMFlBelA3dEFNMysvUURPL3RrQTJmOVNBT1lBQlFEcS83MEE2LzlKQU8zKy9nRHYveE1BOXY5b0FQMy9EZ0QrL3pNQS8vOFRBUUgvQndFQ0FBQUJCLzhPQVFuL0VRRWMvendCSVArc0FTNy9GUUV3L3p3Qk9QOE9BVHIvYWdGQS8wa0JTdjhNQVV6L1B3Rk4vdkVCV1AvQUFWLys3d0ZqL3pFQlpmOWZBV24vQ2dGc0FBVUJiZjh3QVc3LzFRQXlBQVQvMkFCVy83VUFXLy9IQUczK3VBQjgveWdBZ2Y5TkFJYi9qZ0NKLzZFQXVQK3VBTDcveVFDLy8zNEF3LzluQU1iL2h3REgvMlVBeXYrZUFNei9hZ0ROLzNNQXp2OWVBTm4vcFFEbUFBOEE2di9rQU92L29BRHQvM1FBNy8rQUFQYi9zZ0Q5LzMwQS92K1RBUC8vZ0FFQi8za0JBZ0FBQVFmL2ZRRUovMzhCSFArWUFTRC8yZ0V1LzRFQk1QK1lBVGovZlFFNi83TUJRUCtnQVVyL2ZBRk0vNW9CVGY5c0FWai81Z0ZmLzJzQlkvK1NBV1gvclFGcC8zc0JiQUFQQVczL2tRRnUvL0lBTXdBNC85VUFPdi9rQUR2LzdBQTkvOTBBMHYvVkFOYi8xUUVaLytRQk9mL1ZBVVgvMVFIN0FBNEIvUUFPQWtNQURnS3EvOTBESC8vVkF5SC8xUU1qLzlVRE1mL3NBelAvM1FNMS85MERRd0FPQTBRQURnTkZBQTREUmdBT0EwY0FEZ05JQUE0RFNRQU9BMTRBRGdOZkFBNERZQUFPQTV6LzNRT3IvOTBEcnYvZEE5TC8xUVBrLyt3RDV2L3NBK2ovN0FQcS85MEQrLy9rQkFQLzNRU0IvOTBFZy8vZEJJWC8zUVNJLzlVRWwvL2RCTkQvMVFUVC8rUUUxZi9rQk5mLzdBVGNBQTRFNHdBT0JQc0FEZ0ExQUJ2LzhnQTQvL0VBT3YvMEFEei85QUE5Ly9BQTB2L3hBTlQvOVFEVy8vRUEydi8wQU4zLzlRRGUvL01BNXYveEFSbi85QUV6Ly9RQk9mL3hBVVAvOUFGRi8vRUJVUC8xQVYzLzlBRmkvL0lCWlAveUFXYi85UUZzLy9JQmIvLzFBcXIvOEFNZi8vRURJZi94QXlQLzhRTXovL0FETmYvd0E1ei84QU9yLy9BRHJQLzBBNjcvOEFQRy8vTUQwdi94QTlQLzlBUHEvL0FEKy8vMEJBUC84QVFHLy9RRUZQLzBCQ1QvOHdRbS8vTUVLUC96QklILzhBU0QvL0FFaGYvd0JJai84UVNYLy9BRTBQL3hCTlAvOUFUVi8vUUFOUUJSQUFBQVVnQUFBRlFBQUFEQkFBQUE3QUFBQU8wQUZBRHdBQUFBOFFBQUFQTUFBQUQwQUFBQTlRQUFBUGIvN1FENEFBQUErZi90QVBvQUFBRDdBQUFBL1AvaUFQNEFBQUVBQUFBQkJRQUFBU3NBQUFFMkFBQUJPdi90QVR3QUFBRStBQUFCU1AvdEFVci83UUZUQUFBQlZRQUFBVmNBQUFGY0FBQUJiZi90QXJzQUFBTURBQUFEQlFBQUF3Y0FBQU1JQUFBRHNRQUFBOVlBQUFQWUFBQUQzUUFBQStJQUFBUHlBQUFEK0FBQUJCa0FBQVFiQUFBRUsvL3RCQzBBQUFTTC8rMEVqUUFBQktrQUFBVEdBQUFFeUFBQUFEZ0FKZi9rQUR6LzBnQTkvOU1Bc3Yva0FMVC81QURFLytJQTJ2L1NBUTMvNUFFei85SUJRLy9TQVYzLzBnS1EvK1FDa2Yva0FwTC81QUtULytRQ2xQL2tBcFgvNUFLVy8rUUNxdi9UQXNmLzVBTEovK1FDeS8va0F6UC8wd00xLzlNRGwvL2tBNXovMHdPZi8rUURxLy9UQTZ6LzBnT3UvOU1EeC8va0E5UC8wZ1BxLzlNRDgvL2tCQVAvMHdRRy85SUVDZi9rQkF2LzVBUVUvOUlFTC8va0JESC81QVF6LytRRU5mL2tCRGYvNUFRNS8rUUVPLy9rQkQzLzVBUS8vK1FFUWYva0JFUC81QVJGLytRRWdmL1RCSVAvMHdTRi85TUVsLy9UQktyLzVBQTVBRkgvN3dCUy8rOEFWUC92QUZ6LzhBREIvKzhBN1AvdkFPMy83Z0R1Ly9BQThQL3ZBUEgvN3dEei8rOEE5UC92QVBYLzd3RDIvKzRBK1AvdkFQci83d0Q3Lys4QS92L3ZBUUQvN3dFRi8rOEJDZi8wQVNELzhRRXIvKzhCTlAvd0FUYi83d0U2Lys4QlBQL3ZBVDcvN3dGRS8vQUJVLy92QVZYLzd3RlgvKzhCWFAvdkFWNy84QUZ0Lys4Q3UvL3ZBd1AvN3dNRi8rOERCLy92QXdqLzd3T3gvKzhEMXYvdkE5ai83d1BiLy9BRDNmL3ZBK0wvN3dQeS8rOEQrUC92QkFmLzhBUVYvL0FFR2YvdkJCdi83d1F0Lys4RWpmL3ZCS24vN3dURy8rOEV5UC92QUR3QUJ2K2dBQXYvb0FCSy8ra0FXZi94QUZyL3hRQmQvOFVBbS8veEFMMy94UURDLys0QXhBQVFBTWIvN0FESy95QUF5Ly94QVJyL3hRR0UvNkFCaGYrZ0FZZi9vQUdJLzZBQmlmK2dBc0gvOFFMQy8vRUN3Ly94QXNULzhRTEYvOFVDeHYvRkF5Yi84UU1vLy9FREt2L3hBeXovOFFNdS8vRURNUC94QXpUL3hRT3ovL0VEdC8vRkE3ci84UU84Ly9FRDJ2L0ZBK1AveFFQci84VUQ3UCtnQSszL29BUHcvNkFEL1AvRkJBVC94UVFsLzhVRUovL0ZCQ24veFFSMC8vRUVkdi94QkhqLzhRUjYvL0VFZlAveEJINy84UVNBLy9FRWd2L0ZCSVQveFFTRy84VUV0Zi94Qk5UL3hRVFcvOFVBUHdBbi8vTUFLLy96QURQLzh3QTEvL01BZy8vekFKUC84d0NZLy9NQXMvL3pBTVFBRFFEVC8vTUJDUC96QVJmLzh3RWIvL01CSGYvekFSLy84d0VoLy9NQlFmL3pBV3IvOHdKVi8vTUNWdi96QWxqLzh3SlovL01DbC8vekFxSC84d0tpLy9NQ28vL3pBcVQvOHdLbC8vTUN6Zi96QXMvLzh3TFIvL01DMC8vekF1SC84d0xqLy9NQzVmL3pBdWYvOHdNSi8vTURDLy96QXczLzh3TSsvL01EbS8vekE2ai84d1BPLy9NRDBmL3pBLzcvOHdRQi8vTUVIUC96QkI3Lzh3UWcvL01FVy8vekJGMy84d1JmLy9NRVlmL3pCR1AvOHdSbC8vTUVaLy96QkduLzh3UnIvL01FYmYvekJHLy84d1J4Ly9NRXNQL3pCTW4vOHdCQUFFZi83QUJJLyt3QVNmL3NBRXYvN0FCVi8rd0FsUC9zQUpuLzdBQzcvK3dBeVAvc0FNbi83QUQzLyt3QkEvL3NBUjcvN0FFaS8rd0JRdi9zQVdELzdBRmgvK3dCYS8vc0FyTC83QUt6Lyt3Q3RQL3NBclgvN0FLMi8rd0N6di9zQXRELzdBTFMvK3dDMVAvc0F0Yi83QUxZLyt3QzJ2L3NBdHovN0FMZS8rd0M0UC9zQXVMLzdBTGsvK3dDNXYvc0F1ai83QU92Lyt3RDFmL3NBOW4vN0FQYy8rd0Q5Ly9zQS8zLzdBUUMvK3dFRVAvc0JCTC83QVFULyt3RUgvL3NCQzcvN0FSSS8rd0VTdi9zQkV6LzdBUk8vK3dFVVAvc0JGTC83QVJVLyt3RVZ2L3NCR3IvN0FScy8rd0Vidi9zQkhMLzdBU3QvK3dFdXYvc0JMei83QUJBQUNmLzVnQXIvK1lBTS8vbUFEWC81Z0NELytZQWsvL21BSmovNWdDei8rWUF1UC9DQU1RQUVBRFQvK1lCQ1AvbUFSZi81Z0ViLytZQkhmL21BUi8vNWdFaC8rWUJRZi9tQVdyLzVnSlYvK1lDVnYvbUFsai81Z0paLytZQ2wvL21BcUgvNWdLaS8rWUNvLy9tQXFULzVnS2wvK1lDemYvbUFzLy81Z0xSLytZQzAvL21BdUgvNWdMai8rWUM1Zi9tQXVmLzVnTUovK1lEQy8vbUF3My81Z00rLytZRG0vL21BNmovNWdQTy8rWUQwZi9tQS83LzVnUUIvK1lFSFAvbUJCNy81Z1FnLytZRVcvL21CRjMvNWdSZi8rWUVZZi9tQkdQLzVnUmwvK1lFWi8vbUJHbi81Z1JyLytZRWJmL21CRy8vNWdSeC8rWUVzUC9tQk1uLzVnQkhBQkFBQUFBU0FBQUFSLy9uQUVqLzV3QkovK2NBUy8vbkFGWC81d0NVLytjQW1mL25BTHYvNXdERUFBOEF5UC9uQU1uLzV3RDMvK2NCQS8vbkFSNy81d0VpLytjQlF2L25BV0QvNXdGaC8rY0JhLy9uQVlZQUFBR0tBQUFCamdBQUFZOEFBQUt5LytjQ3MvL25BclQvNXdLMS8rY0N0di9uQXM3LzV3TFEvK2NDMHYvbkF0VC81d0xXLytjQzJQL25BdHIvNXdMYy8rY0Mzdi9uQXVELzV3TGkvK2NDNVAvbkF1Yi81d0xvLytjRHIvL25BOVgvNXdQWi8rY0QzUC9uQS9mLzV3UDkvK2NFQXYvbkJCRC81d1FTLytjRUUvL25CQi8vNXdRdS8rY0VTUC9uQkVyLzV3Uk0vK2NFVHYvbkJGRC81d1JTLytjRVZQL25CRmIvNXdScS8rY0ViUC9uQkc3LzV3UnkvK2NFcmYvbkJMci81d1M4LytjQVRRQUdBQkFBQ3dBUUFBMEFGQUJCQUJJQVIvL29BRWovNkFCSi8rZ0FTLy9vQUZYLzZBQmhBQk1BbFAvb0FKbi82QUM3LytnQXlQL29BTW4vNkFEMy8rZ0JBLy9vQVI3LzZBRWkvK2dCUXYvb0FXRC82QUZoLytnQmEvL29BWVFBRUFHRkFCQUJod0FRQVlnQUVBR0pBQkFDc3Yvb0FyUC82QUswLytnQ3RmL29BcmIvNkFMTy8rZ0MwUC9vQXRMLzZBTFUvK2dDMXYvb0F0ai82QUxhLytnQzNQL29BdDcvNkFMZy8rZ0M0di9vQXVULzZBTG0vK2dDNlAvb0E2Ly82QVBWLytnRDJmL29BOXovNkFQc0FCQUQ3UUFRQS9BQUVBUDMvK2dEL2Yvb0JBTC82QVFRLytnRUV2L29CQlAvNkFRZi8rZ0VMdi9vQkVqLzZBUksvK2dFVFAvb0JFNy82QVJRLytnRVV2L29CRlQvNkFSVy8rZ0Vhdi9vQkd6LzZBUnUvK2dFY3Yvb0JLMy82QVM2LytnRXZQL29BRThBUndBTUFFZ0FEQUJKQUF3QVN3QU1BRlVBREFDVUFBd0FtUUFNQUxzQURBRElBQXdBeVFBTUFPMEFPZ0R5QUJnQTl2L2pBUGNBREFENS8vY0EvQUFBQVA0QUFBRURBQXdCQkFBWUFSNEFEQUVpQUF3Qk92L2lBVUlBREFGSS8vY0JTdi9qQVZFQUdBRmdBQXdCWVFBTUFXc0FEQUZ0LytNQmNBQVlBcklBREFLekFBd0N0QUFNQXJVQURBSzJBQXdDemdBTUF0QUFEQUxTQUF3QzFBQU1BdFlBREFMWUFBd0MyZ0FNQXR3QURBTGVBQXdDNEFBTUF1SUFEQUxrQUF3QzVnQU1BdWdBREFPdkFBd0QxUUFNQTlrQURBUGNBQXdEOXdBTUEvMEFEQVFDQUF3RUVBQU1CQklBREFRVEFBd0VId0FNQkN2Lzl3UXVBQXdFU0FBTUJFb0FEQVJNQUF3RVRnQU1CRkFBREFSU0FBd0VWQUFNQkZZQURBUnFBQXdFYkFBTUJHNEFEQVJ5QUF3RWkvLzNCSzBBREFTNkFBd0V2QUFNQUZNQU9QKytBRkVBQUFCU0FBQUFWQUFBQUZyLzd3QmQvKzhBdmYvdkFNRUFBQURTLzc0QTF2KytBT2IveVFEc0FBQUE4QUFBQVBFQUFBRHpBQUFBOUFBQUFQVUFBQUQyLzk4QStBQUFBUG9BQUFEN0FBQUEvZ0FBQVFBQUFBRUZBQUFCQ2YvdEFSci83d0VnLytzQkt3QUFBVFlBQUFFNS83NEJPdi9mQVR3QUFBRStBQUFCUmYrK0FVei82UUZUQUFBQlZRQUFBVmNBQUFGY0FBQUJZLy8xQVczLzRBSzdBQUFDeGYvdkFzYi83d01EQUFBREJRQUFBd2NBQUFNSUFBQURILysrQXlIL3ZnTWovNzRETlAvdkE3RUFBQU8zLys4RDB2KytBOVlBQUFQWUFBQUQydi92QTkwQUFBUGlBQUFENC8vdkErdi83d1B5QUFBRCtBQUFBL3ovN3dRRS8rOEVHUUFBQkJzQUFBUWwvKzhFSi8vdkJDbi83d1F0QUFBRWd2L3ZCSVQvN3dTRy8rOEVpUCsrQkkwQUFBU3BBQUFFeGdBQUJNZ0FBQVRRLzc0RTFQL3ZCTmIvN3dCb0FEais5UUE2LzhnQVBQL3dBRDMvclFCUkFBQUFVZ0FBQUZRQUFBREJBQUFBMHY3MUFOVC85UURXL3ZVQTJ2L3dBTjMvOVFEZS8rc0E0Zi9uQU9iL3d3RHNBQUFBOEFBQUFQRUFBQUR6QUFBQTlBQUFBUFVBQUFEMi84OEErQUFBQVBvQUFBRDdBQUFBL2dBQUFRQUFBQUVGQUFBQkdmL0lBU3NBQUFFei8vQUJOZ0FBQVRuKzlRRTYvODRCUEFBQUFUNEFBQUZELy9BQlJmNzFBVWYvNXdGSi8rY0JUUC9mQVZELzlRRlRBQUFCVlFBQUFWY0FBQUZjQUFBQlhmL3dBV0wvMFFGay8rd0Jadi8xQVd6L29BRnQvOUVCYi8vMUFxci9yUUs3QUFBREF3QUFBd1VBQUFNSEFBQURDQUFBQXgvKzlRTWgvdlVESS83MUF6UC9yUU0xLzYwRG5QK3RBNnYvclFPcy8vQURydit0QTdFQUFBUEcvK3NEMHY3MUE5UC84QVBXQUFBRDJBQUFBOTBBQUFQaUFBQUQ2dit0QS9JQUFBUDRBQUFEKy8vSUJBUC9yUVFHLy9BRUZQL3dCQmtBQUFRYkFBQUVKUC9yQkNiLzZ3UW8vK3NFS3YvbkJDMEFBQVNCLzYwRWcvK3RCSVgvclFTSS92VUVpdi9uQkkwQUFBU1gvNjBFcVFBQUJNWUFBQVRJQUFBRTBQNzFCTlAveUFUVi84Z0FhQUJILzhVQVNQL0ZBRW4veFFCTC84VUFUQUFnQUU4QUlBQlFBQ0FBVS8rQUFGWC94UUJYLzVBQVd3QUxBSlQveFFDWi84VUF1Ly9GQU1qL3hRREovOFVBOS8vRkFRUC94UUVZLzRBQkh2L0ZBU0wveFFGQy84VUJZUC9GQVdIL3hRRnIvOFVCMGYrUUFyTC94UUt6LzhVQ3RQL0ZBclgveFFLMi84VUN2UCtBQXIzL2dBSysvNEFDdi8rQUFzRC9nQUxPLzhVQzBQL0ZBdEwveFFMVS84VUMxdi9GQXRqL3hRTGEvOFVDM1AvRkF0Ny94UUxnLzhVQzR2L0ZBdVQveFFMbS84VUM2UC9GQXdyL2dBTU0vNEFERHYrQUF4Yi9rQU1ZLzVBREd2K1FBeHova0FNZS81QURyLy9GQTdYL2dBTzcvNEFEMWYvRkE5Zi9nQVBaLzhVRDNQL0ZBOTcva0FQMy84VUQvZi9GQkFML3hRUVEvOFVFRXYvRkJCUC94UVFkLzRBRUgvL0ZCQ0gvZ0FRdS84VUVTUC9GQkVyL3hRUk0vOFVFVHYvRkJGRC94UVJTLzhVRVZQL0ZCRmIveFFSYy80QUVYditBQkdEL2dBUmkvNEFFWlArQUJHYi9nQVJvLzRBRWF2L0ZCR3oveFFSdS84VUVjUCtBQkhML3hRU3QvOFVFc2YrQUJMci94UVM4LzhVRXZnQWdCTUFBSUFUQ0FDQUV6LytRQUdvQU9QL21BRHIvNXdBOC8vSUFQZi9uQUZFQUFBQlNBQUFBVkFBQUFGei84UURCQUFBQTB2L21BTmIvNWdEYS8vSUEzdi91QU9ILzZBRG0vK1lBN0FBQUFPNy84UUR3QUFBQThRQUFBUE1BQUFEMEFBQUE5UUFBQVBiLzBBRDRBQUFBK2dBQUFQc0FBQUQrQUFBQkFBQUFBUVVBQUFFWi8rY0JLd0FBQVRQLzhnRTAvL0VCTmdBQUFUbi81Z0U2Lzg0QlBBQUFBVDRBQUFGRC8vSUJSUC94QVVYLzVnRkgvK2dCU2Yvb0FWTUFBQUZWQUFBQlZ3QUFBVndBQUFGZC8vSUJYdi94QVdMLzV3RmsvKzBCYlAvbUFXMy8wQUtxLytjQ3V3QUFBd01BQUFNRkFBQURCd0FBQXdnQUFBTWYvK1lESWYvbUF5UC81Z016LytjRE5mL25BNXovNXdPci8rY0RyUC95QTY3LzV3T3hBQUFEeHYvdUE5TC81Z1BULy9JRDFnQUFBOWdBQUFQYi8vRUQzUUFBQStJQUFBUHEvK2NEOGdBQUEvZ0FBQVA3LytjRUEvL25CQWIvOGdRSC8vRUVGUC95QkJYLzhRUVpBQUFFR3dBQUJDVC83Z1FtLys0RUtQL3VCQ3IvNkFRdEFBQUVnZi9uQklQLzV3U0YvK2NFaVAvbUJJci82QVNOQUFBRWwvL25CS2tBQUFUR0FBQUV5QUFBQk5ELzVnVFQvK2NFMWYvbkFHc0FKUUFQQURqLzVnQTYvK1lBUEFBT0FEMy81Z0N5QUE4QXRBQVBBTkwvNWdEVUFBNEExdi9tQU5rQUV3RGFBQTRBM1FBT0FONEFDd0RoLytVQTV2L21BT2YvOUFEdEFCSUE4Z0FQQVBiLzV3RDUvK2dBL2dBQUFRUUFEd0VOQUE4QkdmL21BVE1BRGdFNS8rWUJPdi9uQVVNQURnRkYvK1lCUi8vbEFVai82QUZKLytVQlN2L29BVXovNUFGUUFBNEJVUUFQQVYwQURnRmkvK1lCWlAvbUFXWUFEZ0ZzLytZQmJmL25BVzhBRGdGd0FBOENrQUFQQXBFQUR3S1NBQThDa3dBUEFwUUFEd0tWQUE4Q2xnQVBBcXIvNWdMSEFBOEN5UUFQQXNzQUR3TWYvK1lESWYvbUF5UC81Z016LytZRE5mL21BNWNBRHdPYy8rWURud0FQQTZ2LzVnT3NBQTREcnYvbUE4WUFDd1BIQUE4RDB2L21BOU1BRGdQcS8rWUQ4d0FQQS92LzVnUUQvK1lFQmdBT0JBa0FEd1FMQUE4RUZBQU9CQ1FBQ3dRbUFBc0VLQUFMQkNyLzVRUXIvK2dFTHdBUEJERUFEd1F6QUE4RU5RQVBCRGNBRHdRNUFBOEVPd0FQQkQwQUR3US9BQThFUVFBUEJFTUFEd1JGQUE4RWdmL21CSVAvNWdTRi8rWUVpUC9tQklyLzVRU0wvK2dFbC8vbUJLb0FEd1RRLytZRTAvL21CTlgvNWdCMUFBYi93QUFMLzhBQU9QNzFBRHIveUFBOC8vQUFQZit0QUZFQUFBQlNBQUFBVkFBQUFGei95UURCQUFBQTB2NzFBTmIrOVFEYS8vQUEzdi9yQU9ILzV3RG0vOE1BN0FBQUFPNy95UUR3QUFBQThRQUFBUE1BQUFEMEFBQUE5UUFBQVBiL3p3RDRBQUFBK2dBQUFQc0FBQUQrQUFBQkFBQUFBUVVBQUFFWi84Z0JLd0FBQVRQLzhBRTAvOGtCTmdBQUFUbis5UUU2Lzg0QlBBQUFBVDRBQUFGRC8vQUJSUC9KQVVYKzlRRkgvK2NCU2YvbkFVei8zd0ZUQUFBQlZRQUFBVmNBQUFGY0FBQUJYZi93QVY3L3lRRmkvOUVCWlAvc0FXei9vQUZ0LzlFQmhQL0FBWVgvd0FHSC84QUJpUC9BQVluL3dBS3EvNjBDdXdBQUF3TUFBQU1GQUFBREJ3QUFBd2dBQUFNZi92VURJZjcxQXlQKzlRTXovNjBETmYrdEE1ei9yUU9yLzYwRHJQL3dBNjcvclFPeEFBQUR4di9yQTlMKzlRUFQvL0FEMWdBQUE5Z0FBQVBiLzhrRDNRQUFBK0lBQUFQcS82MEQ3UC9BQSszL3dBUHcvOEFEOGdBQUEvZ0FBQVA3LzhnRUEvK3RCQWIvOEFRSC84a0VGUC93QkJYL3lRUVpBQUFFR3dBQUJDVC82d1FtLytzRUtQL3JCQ3IvNXdRdEFBQUVnZit0QklQL3JRU0YvNjBFaVA3MUJJci81d1NOQUFBRWwvK3RCS2tBQUFUR0FBQUV5QUFBQk5EKzlRVFQvOGdFMWYvSUFIWUFSLy93QUVqLzhBQkovL0FBUy8vd0FGUC82d0JWLy9BQWxQL3dBSm4vOEFDNy8vQUF5UC93QU1uLzhBRDMvL0FCQS8vd0FSai82d0VjLytzQkh2L3dBU0wvOEFGQy8vQUJZUC93QVdILzhBRnIvL0FCNi8vckFlMy82d0gxLytrQi9QL3JBZ1gvNndJaC8rc0NLdi9yQWtILzZ3S3kvL0FDcy8vd0FyVC84QUsxLy9BQ3R2L3dBcnovNndLOS8rc0N2di9yQXIvLzZ3TEEvK3NDenYvd0F0RC84QUxTLy9BQzFQL3dBdGIvOEFMWS8vQUMydi93QXR6LzhBTGUvL0FDNFAvd0F1TC84QUxrLy9BQzV2L3dBdWovOEFNSy8rc0REUC9yQXc3LzZ3TksvK3NEVlAvckExWC82d05XLytzRFYvL3JBMWovNndOaC8rc0RZdi9yQTJQLzZ3TmsvK3NEYS8vckEyei82d050LytzRGJ2L3JBMzcvNndOLy8rc0RnUC9yQTYvLzhBTzEvK3NEdS8vckE5WC84QVBYLytzRDJmL3dBOXovOEFQMy8vQUQvZi93QkFMLzhBUVEvL0FFRXYvd0JCUC84QVFkLytzRUgvL3dCQ0gvNndRdS8vQUVTUC93QkVyLzhBUk0vL0FFVHYvd0JGRC84QVJTLy9BRVZQL3dCRmIvOEFSYy8rc0VYdi9yQkdELzZ3UmkvK3NFWlAvckJHYi82d1JvLytzRWF2L3dCR3ovOEFSdS8vQUVjUC9yQkhMLzhBU3QvL0FFc2YvckJMci84QVM4Ly9BRTRQL3JCUUwvNndVRi8rc0ZDdi9yQUh3QUJ2L2FBQXYvMmdCSC8vQUFTUC93QUVuLzhBQkwvL0FBVmYvd0FGbi83d0JhLzl3QVhmL2NBSlQvOEFDWi8vQUFtLy92QUx2LzhBQzkvOXdBd3Yvc0FNUUFEd0RHLytvQXlQL3dBTW4vOEFESy84UUF5Ly92QU16LzV3RDMvL0FCQS8vd0FSci8zQUVlLy9BQkl2L3dBVUwvOEFGZy8vQUJZZi93QVd2LzhBR0UvOW9CaGYvYUFZZi8yZ0dJLzlvQmlmL2FBckwvOEFLei8vQUN0UC93QXJYLzhBSzIvL0FDd2YvdkFzTC83d0xELys4Q3hQL3ZBc1gvM0FMRy85d0N6di93QXRELzhBTFMvL0FDMVAvd0F0Yi84QUxZLy9BQzJ2L3dBdHovOEFMZS8vQUM0UC93QXVMLzhBTGsvL0FDNXYvd0F1ai84QU1tLys4REtQL3ZBeXIvN3dNcy8rOERMdi92QXpELzd3TTAvOXdEci8vd0E3UC83d08zLzl3RHV2L3ZBN3ovN3dQVi8vQUQyZi93QTlyLzNBUGMvL0FENC8vY0Erdi8zQVBzLzlvRDdmL2FBL0QvMmdQMy8vQUQvUC9jQS8zLzhBUUMvL0FFQlAvY0JCRC84QVFTLy9BRUUvL3dCQi8vOEFRbC85d0VKLy9jQkNuLzNBUXUvL0FFU1Avd0JFci84QVJNLy9BRVR2L3dCRkQvOEFSUy8vQUVWUC93QkZiLzhBUnEvL0FFYlAvd0JHNy84QVJ5Ly9BRWRQL3ZCSGIvN3dSNC8rOEVldi92Qkh6Lzd3UisvKzhFZ1AvdkJJTC8zQVNFLzl3RWh2L2NCSzMvOEFTMS8rOEV1di93Qkx6LzhBVFUvOXdFMXYvY0FJd0FCdi9LQUF2L3lnQTQvOUlBT3YvVUFEei85QUE5LzlNQVVmL1JBRkwvMFFCVS85RUFXdi9tQUZ6Lzd3QmQvK1lBdmYvbUFNSC8wUURTLzlJQTF2L1NBTnIvOUFEZS8rMEE0Zi9oQU9iLzFBRHMvOUVBN3YvdkFQRC8wUUR4LzlFQTgvL1JBUFQvMFFEMS85RUE5di9KQVBqLzBRRDYvOUVBKy8vUkFQNy8wUUVBLzlFQkJmL1JBUW4vNVFFWi85UUJHdi9tQVNELzR3RXIvOUVCTS8vMEFUVC83d0UyLzlFQk9mL1NBVHIveEFFOC85RUJQdi9SQVVQLzlBRkUvKzhCUmYvU0FVZi80UUZKLytFQlUvL1JBVlgvMFFGWC85RUJYUC9SQVYzLzlBRmUvKzhCWXYvVUFXUC85UUZrLytjQmJQL1NBVzMveVFHRS84b0JoZi9LQVlmL3lnR0kvOG9CaWYvS0Fxci8wd0s3LzlFQ3hmL21Bc2IvNWdNRC85RURCZi9SQXdmLzBRTUkvOUVESC8vU0F5SC8wZ01qLzlJRE0vL1RBelQvNWdNMS85TURuUC9UQTZ2LzB3T3MvL1FEcnYvVEE3SC8wUU8zLytZRHh2L3RBOUwvMGdQVC8vUUQxdi9SQTlqLzBRUGEvK1lEMi8vdkE5My8wUVBpLzlFRDQvL21BK3IvMHdQci8rWUQ3UC9LQSszL3lnUHcvOG9EOHYvUkEvai8wUVA3LzlRRC9QL21CQVAvMHdRRS8rWUVCdi8wQkFmLzd3UVUvL1FFRmYvdkJCbi8wUVFiLzlFRUpQL3RCQ1gvNWdRbS8rMEVKLy9tQkNqLzdRUXAvK1lFS3YvaEJDMy8wUVNCLzlNRWd2L21CSVAvMHdTRS8rWUVoZi9UQkliLzVnU0kvOUlFaXYvaEJJMy8wUVNYLzlNRXFmL1JCTWIvMFFUSS85RUUwUC9TQk5QLzFBVFUvK1lFMWYvVUJOYi81Z0NZQUNVQUVBQW4vK2dBSy8vb0FEUC82QUExLytnQU9QL2dBRHIvNEFBOS85OEFnLy9vQUpQLzZBQ1kvK2dBc2dBUUFMUC82QUMwQUJBQTB2L2dBTlAvNkFEVUFCQUExdi9nQU5rQUZBRGRBQkFBNGYvaEFPYi80QUR0QUJNQThnQVFBUG4vNEFFRUFCQUJDUC9vQVEwQUVBRVgvK2dCR2YvZ0FSdi82QUVkLytnQkgvL29BU0gvNkFFNS8rQUJRZi9vQVVYLzRBRkgvK0VCU1AvZ0FVbi80UUZLLytBQlRmL2hBVkFBRUFGUkFCQUJXUC9wQVdMLzN3RmsvOTRCWmdBUUFXci82QUZzLzk4QmJ2L3lBVzhBRUFGd0FCQUNWZi9vQWxiLzZBSlkvK2dDV2Yvb0FwQUFFQUtSQUJBQ2tnQVFBcE1BRUFLVUFCQUNsUUFRQXBZQUVBS1gvK2dDb2Yvb0FxTC82QUtqLytnQ3BQL29BcVgvNkFLcS85OEN4d0FRQXNrQUVBTExBQkFDemYvb0FzLy82QUxSLytnQzAvL29BdUgvNkFMai8rZ0M1Zi9vQXVmLzZBTUovK2dEQy8vb0F3My82QU1mLytBRElmL2dBeVAvNEFNei85OEROZi9mQXo3LzZBT1hBQkFEbS8vb0E1ei8zd09mQUJBRHFQL29BNnYvM3dPdS85OER4d0FRQTg3LzZBUFIvK2dEMHYvZ0Erci8zd1B6QUJBRCsvL2dBLzcvNkFRQi8rZ0VBLy9mQkFrQUVBUUxBQkFFSFAvb0JCNy82QVFnLytnRUt2L2hCQ3YvNEFRdkFCQUVNUUFRQkRNQUVBUTFBQkFFTndBUUJEa0FFQVE3QUJBRVBRQVFCRDhBRUFSQkFCQUVRd0FRQkVVQUVBUmIvK2dFWGYvb0JGLy82QVJoLytnRVkvL29CR1gvNkFSbi8rZ0VhZi9vQkd2LzZBUnQvK2dFYi8vb0JISC82QVNCLzk4RWcvL2ZCSVgvM3dTSS8rQUVpdi9oQkl2LzRBU1gvOThFcWdBUUJMRC82QVRKLytnRTBQL2dCTlAvNEFUVi8rQUF1Z0JILzl3QVNQL2NBRW4vM0FCTC85d0FVZi96QUZMLzh3QlQvOVlBVlAvekFGWC8zQUJaLzkwQVd2L2hBRjMvNFFDVS85d0FtZi9jQUp2LzNRQzcvOXdBdmYvaEFMNy83Z0MvLytZQXdmL3pBTUwvNndERC8ra0F4Zi93QU1iLzV3REkvOXdBeWYvY0FNci80d0RMLzkwQXpQL09BTTMvMUFETy85c0E3UC96QVBELzh3RHgvL01BOC8vekFQVC84d0QxLy9NQTkvL2NBUGovOHdENi8vTUErLy96QVA3Lzh3RUEvL01CQS8vY0FRWC84d0VZLzlZQkd2L2hBUjcvM0FFaS85d0JLLy96QVRiLzh3RTgvL01CUHYvekFVTC8zQUZULy9NQlZmL3pBVmYvOHdGYy8vTUJZUC9jQVdILzNBRnIvOXdDc3YvY0FyUC8zQUswLzl3Q3RmL2NBcmIvM0FLNy8vTUN2UC9XQXIzLzFnSysvOVlDdi8vV0FzRC8xZ0xCLzkwQ3d2L2RBc1AvM1FMRS85MEN4Zi9oQXNiLzRRTE8vOXdDMFAvY0F0TC8zQUxVLzl3QzF2L2NBdGovM0FMYS85d0MzUC9jQXQ3LzNBTGcvOXdDNHYvY0F1VC8zQUxtLzl3QzZQL2NBd1AvOHdNRi8vTURCLy96QXdqLzh3TUsvOVlERFAvV0F3Ny8xZ01tLzkwREtQL2RBeXIvM1FNcy85MERMdi9kQXpELzNRTTAvK0VEci8vY0E3SC84d096LzkwRHRmL1dBN2YvNFFPNi85MER1Ly9XQTd6LzNRUFYvOXdEMXYvekE5Zi8xZ1BZLy9NRDJmL2NBOXIvNFFQYy85d0QzZi96QStMLzh3UGovK0VENi8vaEEvTC84d1AzLzl3RCtQL3pBL3ovNFFQOS85d0VBdi9jQkFULzRRUVEvOXdFRXYvY0JCUC8zQVFaLy9NRUcvL3pCQjMvMWdRZi85d0VJZi9XQkNYLzRRUW4vK0VFS2YvaEJDMy84d1F1Lzl3RVNQL2NCRXIvM0FSTS85d0VUdi9jQkZELzNBUlMvOXdFVlAvY0JGYi8zQVJjLzlZRVh2L1dCR0QvMWdSaS85WUVaUC9XQkdiLzFnUm8vOVlFYXYvY0JHei8zQVJ1Lzl3RWNQL1dCSEwvM0FSMC85MEVkdi9kQkhqLzNRUjYvOTBFZlAvZEJINy8zUVNBLzkwRWd2L2hCSVQvNFFTRy8rRUVqZi96QktuLzh3U3QvOXdFc2YvV0JMWC8zUVM2Lzl3RXZQL2NCTWIvOHdUSS8vTUUxUC9oQk5iLzRRQy9BQVlBREFBTEFBd0FSLy9vQUVqLzZBQkovK2dBU2dBTUFFdi82QUJULytvQVZmL29BRm9BQ3dCZEFBc0FsUC9vQUpuLzZBQzcvK2dBdlFBTEFMNy83UURFQUFBQXhnQUxBTWovNkFESi8rZ0F5Z0FNQVBmLzZBRUQvK2dCR1AvcUFSb0FDd0VlLytnQkl2L29BVUwvNkFGZy8rZ0JZZi9vQVd2LzZBR0VBQXdCaFFBTUFZY0FEQUdJQUF3QmlRQU1BZU1BRFFIbUFBMEI2QUFPQWVuLzlRSHIvK3dCN2YvdEFmWC83QUg3Lzc4Qi9QL3RBZjMvdndJRUFBNENCZi90QWdnQURnSWdBQTRDSWYvdEFpSUFEUUlrQUE0Q0t2L3RBa0gvN2dKRC83OENzdi9vQXJQLzZBSzAvK2dDdGYvb0FyYi82QUs4LytvQ3ZmL3FBcjcvNmdLLy8rb0N3UC9xQXNVQUN3TEdBQXNDenYvb0F0RC82QUxTLytnQzFQL29BdGIvNkFMWS8rZ0Mydi9vQXR6LzZBTGUvK2dDNFAvb0F1TC82QUxrLytnQzV2L29BdWovNkFNSy8rb0REUC9xQXc3LzZnTTBBQXNEUS8rL0EwVC92d05GLzc4RFJ2Ky9BMGYvdndOSS83OERTZisvQTByLzdRTlUvKzBEVmYvdEExYi83UU5YLyswRFdQL3RBMTBBRFFOZS83OERYLysvQTJEL3Z3TmgvKzBEWXYvdEEyUC83UU5rLyswRGEvL3RBMnovN1FOdC8rMERidi90QTM3LzdRTi8vKzBEZ1AvdEE0VC85UU9GLy9VRGh2LzFBNGYvOVFPSkFBNERrZ0FOQTVNQURRT3YvK2dEdGYvcUE3Y0FDd083LytvRDFmL29BOWYvNmdQWi8rZ0QyZ0FMQTl6LzZBUGpBQXNENndBTEErd0FEQVB0QUF3RDhBQU1BL2YvNkFQOEFBc0QvZi9vQkFMLzZBUUVBQXNFRVAvb0JCTC82QVFULytnRUhmL3FCQi8vNkFRaC8rb0VKUUFMQkNjQUN3UXBBQXNFTHYvb0JFai82QVJLLytnRVRQL29CRTcvNkFSUS8rZ0VVdi9vQkZULzZBUlcvK2dFWFAvcUJGNy82Z1JnLytvRVl2L3FCR1QvNmdSbS8rb0VhUC9xQkdyLzZBUnMvK2dFYnYvb0JIRC82Z1J5LytnRWdnQUxCSVFBQ3dTR0FBc0VyZi9vQkxILzZnUzYvK2dFdlAvb0JOUUFDd1RXQUFzRTNQKy9CT0QvN1FUaEFBMEU0LysvQk84QURRVHlBQTBFKy8rL0JRTC83UVVGLyswRkJnQU9CUXIvN1FVTEFBMEE0d0FHQUEwQUN3QU5BRVgvOEFCSC83QUFTUCt3QUVuL3NBQktBQTBBUy8rd0FGUC8xZ0JWLzdBQVdnQUxBRjBBQ3dDVS83QUFtZit3QUx2L3NBQzlBQXNBdnYrd0FNZi9xd0RJLzhBQXlmK3dBTXovMVFEdC82b0E4dit2QVBmL3NBRUQvN0FCQlArdkFSai8xZ0VhQUFzQkhQL2lBUjcvc0FFZ0FBd0JJdit3QVVML3NBRlIvNjhCWVArd0FXSC9zQUZqQUFzQlpRQUxBV3Yvc0FGdy82OEJoQUFOQVlVQURRR0hBQTBCaUFBTkFZa0FEUUhqQUEwQjVnQU5BZWdBRGdIcC8vVUI2Ly9zQWUzLzdRSDEvK3dCKy8rL0Fmei83UUg5Lzc4Q0JBQU9BZ1gvN1FJSUFBNENJQUFPQWlILzdRSWlBQTBDSkFBT0Fpci83UUpCLys0Q1EvKy9BcXYvOEFLcy8vQUNyZi93QXE3LzhBS3YvL0FDc1Avd0FySC84QUt5LzdBQ3MvK3dBclQvc0FLMS83QUN0dit3QXJ6LzFnSzkvOVlDdnYvV0FyLy8xZ0xBLzlZQ3hRQUxBc1lBQ3dMSS8vQUN5di93QXN6LzhBTE8vN0FDMFArd0F0TC9zQUxVLzdBQzF2K3dBdGovc0FMYS83QUMzUCt3QXQ3L3NBTGcvN0FDNHYrd0F1VC9zQUxtLzdBQzZQK3dBd3IvMWdNTS85WUREdi9XQXpRQUN3TkQvNzhEUlArL0EwWC92d05HLzc4RFIvKy9BMGovdndOSi83OERTdi90QTFULzdRTlYvKzBEVnYvdEExZi83UU5ZLyswRFhRQU5BMTcvdndOZi83OERZUCsvQTJILzdRTmkvKzBEWS8vdEEyVC83UU5yLyswRGJQL3RBMjMvN1FOdS8rMERmdi90QTMvLzdRT0EvKzBEaFAvMUE0WC85UU9HLy9VRGgvLzFBNGtBRGdPU0FBMERrd0FOQTYvL3NBTzEvOVlEdHdBTEE3di8xZ1BVLy9BRDFmK3dBOWYvMWdQWi83QUQyZ0FMQTl6L3NBUGpBQXNENndBTEErd0FEUVB0QUEwRDhBQU5BL1QvOEFQMy83QUQvQUFMQS8zL3NBUUMvN0FFQkFBTEJBci84QVFNLy9BRUVQK3dCQkwvc0FRVC83QUVIZi9XQkIvL3NBUWgvOVlFSlFBTEJDY0FDd1FwQUFzRUx2K3dCREQvOEFReS8vQUVOUC93QkRiLzhBUTQvL0FFT3Yvd0JEei84QVErLy9BRVFQL3dCRUwvOEFSRS8vQUVSdi93QkVqL3NBUksvN0FFVFArd0JFNy9zQVJRLzdBRVV2K3dCRlQvc0FSVy83QUVYUC9XQkY3LzFnUmcvOVlFWXYvV0JHVC8xZ1JtLzlZRWFQL1dCR3Ivc0FScy83QUVidit3QkhELzFnUnkvN0FFZ2dBTEJJUUFDd1NHQUFzRXEvL3dCSzMvc0FTeC85WUV1dit3Qkx6L3NBVFVBQXNFMWdBTEJOei92d1RnLyswRTRRQU5CT1AvdndUdkFBMEU4Z0FOQlB2L3Z3VUMvKzBGQmYvdEJRWUFEZ1VLLyswRkN3QU5BT2NBRVA4V0FCTC9GZ0FsLzFZQUx2NzRBRGdBRkFCRi85NEFSLy9yQUVqLzZ3QkovK3NBUy8vckFGUC82d0JWLytzQVZ2L21BRm4vNmdCYS8rZ0FYZi9vQUpULzZ3Q1ovK3NBbS8vcUFMTC9WZ0MwLzFZQXUvL3JBTDMvNkFESS8rc0F5Zi9yQU12LzZnRFNBQlFBMWdBVUFQZi82d0VELytzQkRmOVdBUmovNndFYS8rZ0JIdi9yQVNMLzZ3RTVBQlFCUXYvckFVVUFGQUZnLytzQllmL3JBV3YvNndHRy94WUJpdjhXQVk3L0ZnR1AveFlCKy8vQUFmMy93QUpELzhBQ2tQOVdBcEgvVmdLUy8xWUNrLzlXQXBUL1ZnS1YvMVlDbHY5V0Fxdi8zZ0tzLzk0Q3JmL2VBcTcvM2dLdi85NENzUC9lQXJILzNnS3kvK3NDcy8vckFyVC82d0sxLytzQ3R2L3JBcnovNndLOS8rc0N2di9yQXIvLzZ3TEEvK3NDd2YvcUFzTC82Z0xELytvQ3hQL3FBc1gvNkFMRy8rZ0N4LzlXQXNqLzNnTEovMVlDeXYvZUFzdi9WZ0xNLzk0Q3p2L3JBdEQvNndMUy8rc0MxUC9yQXRiLzZ3TFkvK3NDMnYvckF0ei82d0xlLytzQzRQL3JBdUwvNndMay8rc0M1di9yQXVqLzZ3TDIvdmdEQ3YvckF3ei82d01PLytzREh3QVVBeUVBRkFNakFCUURKdi9xQXlqLzZnTXEvK29ETFAvcUF5Ny82Z013LytvRE5QL29BMFAvd0FORS84QURSZi9BQTBiL3dBTkgvOEFEU1AvQUEwbi93QU5lLzhBRFgvL0FBMkQvd0FPWC8xWURuLzlXQTYvLzZ3T3ovK29EdGYvckE3Zi82QU82LytvRHUvL3JBN3ovNmdQRC92Z0R4LzlXQTlJQUZBUFUvOTREMWYvckE5Zi82d1BaLytzRDJ2L29BOXovNndQai8rZ0Q2Ly9vQS9QL1ZnUDAvOTREOS8vckEvei82QVA5LytzRUF2L3JCQVQvNkFRSi8xWUVDdi9lQkF2L1ZnUU0vOTRFRVAvckJCTC82d1FULytzRUhmL3JCQi8vNndRaC8rc0VKZi9vQkNmLzZBUXAvK2dFTHYvckJDLy9WZ1F3Lzk0RU1mOVdCREwvM2dRei8xWUVOUC9lQkRYL1ZnUTIvOTRFTi85V0JEai8zZ1E1LzFZRU92L2VCRHYvVmdROC85NEVQZjlXQkQ3LzNnUS8vMVlFUVAvZUJFSC9WZ1JDLzk0RVEvOVdCRVQvM2dSRi8xWUVSdi9lQkVqLzZ3UksvK3NFVFAvckJFNy82d1JRLytzRVV2L3JCRlQvNndSVy8rc0VYUC9yQkY3LzZ3UmcvK3NFWXYvckJHVC82d1JtLytzRWFQL3JCR3IvNndScy8rc0Vidi9yQkhELzZ3UnkvK3NFZFAvcUJIYi82Z1I0LytvRWV2L3FCSHovNmdSKy8rb0VnUC9xQklMLzZBU0UvK2dFaHYvb0JJZ0FGQVNxLzFZRXEvL2VCSzMvNndTeC8rc0V0Zi9xQkxyLzZ3UzgvK3NFMEFBVUJOVC82QVRXLytnRTNQL0FCT1Avd0FUNy84QUFBZ0NnQUFRQUJBQUFBQVlBQmdBQkFBc0FEQUFDQUJNQUV3QUVBQ1VBS2dBRkFDd0FMUUFMQUM4QU5nQU5BRGdBT0FBVkFEb0FQd0FXQUVVQVJnQWNBRWtBU2dBZUFFd0FUQUFnQUU4QVR3QWhBRkVBVkFBaUFGWUFWZ0FtQUZnQVdBQW5BRm9BWFFBb0FGOEFYd0FzQUlvQWlnQXRBSllBbGdBdUFKMEFuUUF2QUxFQXRRQXdBTGNBdVFBMUFMc0F1d0E0QUwwQXZnQTVBTUFBd1FBN0FNTUF4UUE5QU1jQXpnQkFBTklBMGdCSUFOUUEzZ0JKQU9BQTd3QlVBUEVBOFFCa0FQWUErQUJsQVBzQS9BQm9BUDRCQUFCcUFRTUJCUUJ0QVFvQkNnQndBUTBCRFFCeEFSZ0JHZ0J5QVNJQklnQjFBUzRCTUFCMkFUTUJOUUI1QVRjQk53QjhBVGtCT1FCOUFUc0JPd0IrQVVNQlJBQi9BVlFCVkFDQkFWWUJWZ0NDQVZnQldBQ0RBVndCWGdDRUFZUUJoUUNIQVljQmlRQ0pBZWdCNkFDTUFlb0I2d0NOQWUwQjdRQ1BBZkFCOEFDUUFmc0IvUUNSQWtBQ1FBQ1VBa01DUXdDVkFsVUNWUUNXQWxjQ1dBQ1hBb3NDakFDWkFvNENqZ0NiQXBBQ3BRQ2NBcW9Dc1FDeUFyTUN0Z0M2QXJzQ3dBQytBc1VDelFERUFzOEN6d0ROQXRFQzBRRE9BdE1DMHdEUEF0VUMxUURRQXRjQzRBRFJBdWtDNndEYkF1MEM3UURlQXU4Qzd3RGZBdkVDOFFEZ0F2TUM4d0RoQXZnQytBRGlBdm9DK2dEakF2d0MvQURrQXY0Qy9nRGxBd0FEQUFEbUF3SUREZ0RuQXhBREVBRDBBeElERWdEMUF4UURGQUQyQXg4REh3RDNBeUVESVFENEF5TURJd0Q1QXpFRE1RRDZBek1ETmdEN0F6Z0RPQUQvQXpvRE9nRUFBMEFEU1FFQkExUURXQUVMQTE0RFlBRVFBMlVEWlFFVEEzY0RlZ0VVQTM0RGdBRVlBNGtEaVFFYkE1Y0RuQUVjQTU4RHJnRWlBN0VEc1FFeUE3VUR0UUV6QTdjRHR3RTBBN3NEdXdFMUE3NER2d0UyQThFRHdnRTRBOFFEeWdFNkE4d0R6Z0ZCQTlBRDFRRkVBOWNEMkFGS0E5b0QzUUZNQStNRDVBRlFBK1lENWdGU0ErZ0Q2QUZUQStvRDdRRlVBL0FEOVFGWUEvY0Q5d0ZlQS9zRC9BRmZCQUVFQVFGaEJBTUVEQUZpQkE4RUVBRnNCQklFRlFGdUJCd0VIUUZ5QkNFRUlRRjBCQ01FS1FGMUJDOEVWd0Y4QkZrRVdRR2xCRnNFYUFHbUJIQUVjQUcwQklFRWhnRzFCSWdFaUFHN0JJd0VqUUc4QkpBRWtBRytCSklFa3dHL0JKVUVsUUhCQkpjRWx3SENCS2dFckFIREJLNEVyZ0hJQkxBRXNRSEpCTE1Fc3dITEJMY0V1UUhNQkxzRXV3SFBCTDBFdndIUUJNRUV3UUhUQk1NRXd3SFVCTVVFeXdIVkJNMEV6UUhjQk5BRTBBSGRCTk1FMXdIZUJOa0UyUUhqQk5zRTNBSGtCT0FFNEFIbUJPTUU0d0huQk80RTdnSG9CUHNFK3dIcEJRSUZBZ0hxQlFZRkJnSHJBQUlBbWdBR0FBWUFBQUFMQUFzQUFRQVFBQkFBQWdBU0FCSUFBd0FsQUNrQUJBQXNBRFFBQ1FBNEFENEFFZ0JGQUVjQUdRQkpBRWtBSEFCTUFFd0FIUUJSQUZRQUhnQldBRllBSWdCYUFGb0FJd0JjQUY0QUpBQ0tBSW9BSndDV0FKWUFLQUN4QUxRQUtRQzlBTDBBTFFEQkFNRUFMZ0RIQU1jQUx3RFVBTlVBTUFEWEFOY0FNZ0RhQU5vQU13RGNBTjRBTkFEZ0FPWUFOd0RzQU93QVBnRHVBTzRBUHdEM0FQY0FRQUQ4QVB3QVFRRCtBUDhBUWdFRUFRVUFSQUVLQVFvQVJnRU5BUTBBUndFWUFSb0FTQUV1QVRBQVN3RXpBVFVBVGdFM0FUY0FVUUU1QVRrQVVnRTdBVHNBVXdGREFVUUFWQUZVQVZRQVZnRldBVllBVndGWUFWZ0FXQUZjQVY0QVdRR0VBWW9BWEFHT0FZOEFZd0hvQWVnQVpRSHRBZTBBWmdId0FmRUFad0g3QWYwQWFRSVBBZzhBYkFJZUFpQUFiUUpBQWtBQWNBSkRBa01BY1FKVkFsVUFjZ0pYQWxnQWN3S0xBb3dBZFFLT0FvNEFkd0tRQXJZQWVBSzdBc0FBbndMRkF0VUFwUUxYQXVBQXRnTHBBdXNBd0FMdEF1MEF3d0x2QXU4QXhBTHhBdkVBeFFMekF2TUF4Z0wyQXZZQXh3TDRBdmdBeUFMNkF2b0F5UUw4QXZ3QXlnTCtBdjRBeXdNQUF3QUF6QU1DQXc0QXpRTVFBeEFBMmdNU0F4SUEyd01VQXhRQTNBTWZBeDhBM1FNaEF5RUEzZ01qQXlNQTN3TWxBeVVBNEFNbkF5Y0E0UU1wQXlrQTRnTXJBeXNBNHdNdEF5MEE1QU12QXk4QTVRTXhBekVBNWdNekF6c0E1d05BQTBrQThBTlVBMWdBK2dOZUEyQUEvd05sQTJVQkFnTjJBM29CQXdOK0E0QUJDQU9KQTRrQkN3T1hBNXdCREFPZkE2NEJFZ094QTdFQklnTzFBN1VCSXdPM0E3Y0JKQU83QTdzQkpRTytBNzhCSmdQQkE4b0JLQVBNQTg0Qk1nUFFBOVVCTlFQWEE5MEJPd1BqQStRQlFnUG1BK1lCUkFQb0ErZ0JSUVBxQSswQlJnUHdBL1VCU2dQM0EvY0JVQVA3QS93QlVRUUJCQXdCVXdRUEJCQUJYd1FTQkJVQllRUWNCQjBCWlFRaEJDRUJad1FqQkNrQmFBUXZCRmNCYndSWkJGa0JtQVJiQkdnQm1RUndCSEFCcHdSekJITUJxQVIxQkhVQnFRU0JCSVlCcWdTSUJJZ0JzQVNNQkkwQnNRU1FCSkFCc3dTU0JKTUJ0QVNWQkpVQnRnU1hCSmNCdHdTb0JLd0J1QVN1Qks0QnZRU3dCTEVCdmdTekJMTUJ3QVMzQkxrQndRUzdCTHNCeEFTOUJMOEJ4UVRCQk1FQnlBVERCTU1CeVFURkJNc0J5Z1ROQk0wQjBRVFFCTkFCMGdUU0JOY0Iwd1RaQk53QjJRVGdCT0FCM1FUakJPTUIzZ1RwQk9rQjN3VHVCTzRCNEFUNUJQa0I0UVQ3QlBzQjRnVUNCUUlCNHdVR0JRWUI1QUFDQVhRQUJnQUdBQThBQ3dBTEFBOEFFQUFRQUJvQUVnQVNBQm9BSlFBbEFBSUFKZ0FtQUNRQUp3QW5BQkFBS0FBb0FBRUFLUUFwQUFRQUxnQXVBQWdBTHdBdkFBMEFNQUF3QUJjQU13QXpBQUVBTkFBMEFDVUFPQUE0QUJJQU9RQTVBQWdBT2dBNkFCd0FPd0E3QUJnQVBBQThBQkVBUFFBOUFBd0FQZ0ErQUJrQVJRQkZBQU1BUmdCR0FBNEFSd0JIQUJNQVNRQkpBQVVBVEFCTUFBa0FVUUJTQUFrQVV3QlRBQVlBVkFCVUFBNEFWZ0JXQUJzQVdnQmFBQWNBWEFCY0FCVUFYUUJkQUFjQVhnQmVBQjhBaWdDS0FBNEFsZ0NXQUFFQXNRQ3hBQllBc2dDeUFBSUFzd0N6QUFFQXRBQzBBQUlBdlFDOUFBY0F3UURCQUFrQXh3REhBQTRBMUFEVkFDQUEyZ0RhQUJFQTNnRGVBQ0VBNUFEa0FDQUE1Z0RtQUNBQTdBRHNBQ0lBN2dEdUFCVUE5d0QzQUE0QS9BRDhBQ01BL2dEK0FDTUEvd0QvQUE0QkJBRUZBQ01CQ2dFS0FDTUJEUUVOQUFJQkdBRVlBQVlCR1FFWkFCd0JHZ0VhQUFjQkxnRXVBQTRCTHdFdkFCWUJNQUV3QUNJQk13RXpBQkVCTkFFMEFCVUJOUUUxQUEwQk53RTNBQTBCT1FFNUFBMEJRd0ZEQUJFQlJBRkVBQlVCV0FGWUFBRUJYQUZjQUNJQlhRRmRBQkVCWGdGZUFCVUJoQUdGQUE4QmhnR0dBQm9CaHdHSkFBOEJpZ0dLQUJvQmpnR1BBQm9CNkFIb0FCMEI3UUh0QUFvQjhBSHdBQjRCOFFIeEFCUUIrd0g3QUFzQi9BSDhBQW9CL1FIOUFBc0NEd0lQQUJRQ0hnSWdBQlFDUUFKQUFBb0NRd0pEQUFzQ1ZRSlZBQkFDVndKWUFBRUNpd0tNQUFFQ2pnS09BQklDa0FLV0FBSUNsd0tYQUJBQ21BS2JBQVFDb1FLbEFBRUNwZ0twQUFnQ3FnS3FBQXdDcXdLeEFBTUNzZ0t5QUJNQ3N3SzJBQVVDdXdLN0FBa0N2QUxBQUFZQ3hRTEdBQWNDeHdMSEFBSUN5QUxJQUFNQ3lRTEpBQUlDeWdMS0FBTUN5d0xMQUFJQ3pBTE1BQU1DelFMTkFCQUN6Z0xPQUJNQ3p3TFBBQkFDMEFMUUFCTUMwUUxSQUJBQzBnTFNBQk1DMHdMVEFCQUMxQUxVQUJNQzFRTFZBQUVDMXdMWEFBUUMyQUxZQUFVQzJRTFpBQVFDMmdMYUFBVUMyd0xiQUFRQzNBTGNBQVVDM1FMZEFBUUMzZ0xlQUFVQzN3TGZBQVFDNEFMZ0FBVUM2Z0xxQUFrQzlnTDJBQWdDK0FMNEFBMEMrZ0w2QUJjQy9BTDhBQmNDL2dMK0FCY0RBQU1BQUJjREF3TURBQWtEQlFNRkFBa0RCd01JQUFrRENRTUpBQUVEQ2dNS0FBWURDd01MQUFFRERBTU1BQVlERFFNTkFBRUREZ01PQUFZREVBTVFBQnNERWdNU0FCc0RGQU1VQUJzREh3TWZBQklESVFNaEFCSURJd01qQUJJREpRTWxBQWdESndNbkFBZ0RLUU1wQUFnREt3TXJBQWdETFFNdEFBZ0RMd012QUFnRE1RTXhBQmdETXdNekFBd0ROQU0wQUFjRE5RTTFBQXdETmdNMkFCa0ROd00zQUI4RE9BTTRBQmtET1FNNUFCOERPZ002QUJrRE93TTdBQjhEUUFOQkFBb0RRZ05DQUIwRFF3TkpBQXNEVkFOWUFBb0RYZ05nQUFzRFpRTmxBQW9EZGdOMkFCUURkd042QUI0RGZnT0FBQW9EaVFPSkFCMERsd09YQUFJRG1BT1lBQVFEbXdPYkFBRURuQU9jQUF3RG53T2ZBQUlEb0FPZ0FDUURvUU9oQUFRRG9nT2lBQmtEcFFPbEFBMERxQU9vQUFFRHFRT3BBQ1VEcWdPcUFCSURxd09yQUF3RHJBT3NBQkVEcmdPdUFBd0RzUU94QUFrRHRRTzFBQVlEdHdPM0FBY0R1d083QUFZRHZnTytBQVFEdndPL0FCWUR3d1BEQUFnRHhBUEZBQTBEeGdQR0FDRUR4d1BIQUFJRHlBUElBQ1FEeVFQSkFCWUR5Z1BLQUFRRHpnUE9BQUVEMEFQUUFDVUQwUVBSQUJBRDBnUFNBQklEMHdQVEFCRUQxQVBVQUFNRDFRUFZBQVVEMXdQWEFBWUQyQVBZQUE0RDJRUFpBQk1EMmdQYUFBY0Qyd1BiQUJVRDNBUGNBQVVEM1FQZEFDSUQ0d1BqQUFjRDVBUGtBQmdENWdQbUFCZ0Q2QVBvQUJnRDZnUHFBQXdENndQckFBY0Q3QVB0QUE4RDhBUHdBQThEOGdQeUFBa0Q4d1B6QUFJRDlBUDBBQU1EOVFQMUFBUUQ5d1AzQUFVRCt3UDdBQndEL0FQOEFBY0VBUVFCQUJBRUFnUUNBQk1FQXdRREFBd0VCQVFFQUFjRUJnUUdBQkVFQndRSEFCVUVDUVFKQUFJRUNnUUtBQU1FQ3dRTEFBSUVEQVFNQUFNRUR3UVBBQVFFRUFRUUFBVUVFZ1FUQUFVRUZBUVVBQkVFRlFRVkFCVUVIQVFjQUFFRUhRUWRBQVlFSVFRaEFBWUVJd1FqQUE0RUpBUWtBQ0VFSlFRbEFBY0VKZ1FtQUNFRUp3UW5BQWNFS0FRb0FDRUVLUVFwQUFjRUx3UXZBQUlFTUFRd0FBTUVNUVF4QUFJRU1nUXlBQU1FTXdRekFBSUVOQVEwQUFNRU5RUTFBQUlFTmdRMkFBTUVOd1EzQUFJRU9BUTRBQU1FT1FRNUFBSUVPZ1E2QUFNRU93UTdBQUlFUEFROEFBTUVQUVE5QUFJRVBnUStBQU1FUHdRL0FBSUVRQVJBQUFNRVFRUkJBQUlFUWdSQ0FBTUVRd1JEQUFJRVJBUkVBQU1FUlFSRkFBSUVSZ1JHQUFNRVJ3UkhBQVFFU0FSSUFBVUVTUVJKQUFRRVNnUktBQVVFU3dSTEFBUUVUQVJNQUFVRVRRUk5BQVFFVGdST0FBVUVUd1JQQUFRRVVBUlFBQVVFVVFSUkFBUUVVZ1JTQUFVRVV3UlRBQVFFVkFSVUFBVUVWUVJWQUFRRVZnUldBQVVFV3dSYkFBRUVYQVJjQUFZRVhRUmRBQUVFWGdSZUFBWUVYd1JmQUFFRVlBUmdBQVlFWVFSaEFBRUVZZ1JpQUFZRVl3UmpBQUVFWkFSa0FBWUVaUVJsQUFFRVpnUm1BQVlFWndSbkFBRUVhQVJvQUFZRWNBUndBQVlFY3dSekFBZ0VkUVIxQUFnRWdRU0JBQXdFZ2dTQ0FBY0Vnd1NEQUF3RWhBU0VBQWNFaFFTRkFBd0VoZ1NHQUFjRWlBU0lBQklFakFTTUFCWUVqUVNOQUNJRWtBU1FBQWtFa2dTU0FDQUVrd1NUQUJZRWxRU1ZBQTBFbHdTWEFBd0VxUVNwQUFrRXFnU3FBQUlFcXdTckFBTUVyQVNzQUFRRXNBU3dBQUVFc1FTeEFBWUVzd1N6QUJzRXR3UzNBQ1FFdUFTNEFBNEV1UVM1QUFFRXV3UzdBQUVFdmdTK0FBa0V2d1MvQUEwRXdRVEJBQTBFd3dUREFCY0V4Z1RHQUFrRXlBVElBQWtFeVFUSkFBRUV5Z1RLQUNVRXl3VExBQTRFelFUTkFCc0UwQVRRQUJJRTBnVFNBQWdFMHdUVEFCd0UxQVRVQUFjRTFRVFZBQndFMWdUV0FBY0Uxd1RYQUJnRTJRVFpBQmtFMmdUYUFCOEUyd1RiQUFFRTNBVGNBQXNFNEFUZ0FBb0U0d1RqQUFzRTZRVHBBQlFFN2dUdUFCMEUrUVQ1QUJRRSt3VDdBQXNGQWdVQ0FBb0ZCZ1VHQUIwQUFRQUdCUVlBRHdBQUFBQUFBQUFBQUE4QUFBQUFBQUFBQUFBWUFCc0FHQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFnQUFBQUFBQUFBQ0FBQUFBQUFqQUFBQUFBQUFBQUFBQWdBQUFBSUFBQUFVQUEwQUN3QWFBQllBRUFBTUFCY0FBQUFBQUFBQUFBQUFBQUFBQmdBQUFBRUFBUUFCQUFBQUFRQUFBQUFBQUFBQUFBQUFBd0FEQUFjQUF3QUJBQUFBRVFBQUFBZ0FDUUFBQUJNQUNRQWRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnQUJBQUFBQUFBQUFBSUFBUUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBSUFCQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFDUUFBQUFBQUFBQURBQUFBQUFBQUFBQUFBQUFBQUFFQUFRQUFBQWdBQUFBQUFBQUFBQUFBQUFBQURRQUNBQjRBQUFBTkFBQUFBQUFBQUJBQUFBQUFBQjRBSHdBQUFBQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFBQVRBQUFBQXdBREFDRUFBd0FEQUFNQUFBQUJBQU1BSWdBREFBTUFBQUFBQUFNQUFBQURBQUFBQUFBQkFDRUFBd0FBQUFBQUFnQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FIQUJvQUNRQUNBQUFBQWdBQkFBSUFBQUFDQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUJNQUFBQURBQUFBQUFBTkFBQUFBQUFEQUFBQUF3QUFBQUFBQWdBQkFCQUFFd0FOQUFBQUlBQWlBQUFBQUFBQUFBQUFBQUFBQUFBQUhnQWhBQUFBQXdBQUFBTUFBQUFEQUFBQUFBQUFBQUFBQXdBUUFCTUFBQUFCQUFFQUFBQUFBQUFBQUFBZUFBQUFBQUFBQUFJQUFRQUFBQUFBQUFBZUFDRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkFCc0FBQUFQQUE4QUdBQVBBQThBRHdBWUFBQUFBQUFBQUJnQUdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRWdBWkFDUUFBQUFPQUJVQUhBQUFBQVVBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUNnQUZBQW9BQUFBQUFBQUFBQUFBQUFBQUZRQUZBQUFBQUFBVkFBQUFBQUFBQUJrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFaQUFBQUFBQVZBQVVBRWdBWkFCVUFBQUFBQUFBQUFBQUFBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFBQUNnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnQUNBQUFBQWdBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzQUFBQUFBQUFBQUFBQUFBUUFCQUFFQUFRQUJBQUVBQVFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUFBZ0FDQUFJQUN3QUxBQXNBQ3dBTUFBWUFCZ0FHQUFZQUJnQUdBQVlBQVFBQkFBRUFBUUFCQUFBQUFBQUFBQUFBQXdBSEFBY0FCd0FIQUFjQUNBQUlBQWdBQ0FBSkFBa0FCQUFHQUFRQUJnQUVBQVlBQWdBQkFBSUFBUUFDQUFFQUFnQUJBQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUVBQUFBQkFBSUFBUUFDQUFFQUFnQUJBQUlBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdBQUFBTUFBQUFEQUFNQUFnQUhBQUlBQndBQ0FBY0FBQUFBQUFBQUFBQUFBQUFBRkFBUkFCUUFFUUFVQUJFQUZBQVJBQlFBRVFBTkFBQUFEUUFBQUEwQUFBQUxBQWdBQ3dBSUFBc0FDQUFMQUFnQUN3QUlBQXNBQ0FBV0FBQUFEQUFKQUF3QUZ3QWRBQmNBSFFBWEFCMEFBQUFBQUFJQUFBQUFBQUFBQUFBS0FBb0FDZ0FLQUFvQUNnQUtBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUE0QURnQU9BQTRBRWdBS0FBb0FDZ0FGQUFVQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUZBQVVBQUFBQUFBQUFIQUFjQUJ3QUhBQUFBQlVBQUFBT0FBNEFEZ0FPQUE0QURnQWtBQklBRWdBQUFBQUFBQUFFQUFBQUFBQUFBQUlBREFBQUFBQUFCQUFBQUFBQUZ3QUFBQUFBQUFBQUFBQUFBZ0FBQUFBQURBQVFBQUFBREFBQkFBQUFBd0FBQUFnQUFBQUhBQUFBQ1FBQUFBQUFDQUFIQUFnQUFBQUFBQUFBQUFBQUFBQUFJd0FBQUFBQUh3QUVBQUFBQUFBQUFBQUFBQUFBQUFJQUFBQUFBQUlBRFFBUUFBWUFBUUFEQUFjQUF3QUJBQWtBRXdBQkFBTUFFUUFBQUFBQUFBQURBQWtBRmdBQUFCWUFBQUFXQUFBQURBQUpBQThBRHdBQUFBQUFEd0FBQUFNQUJBQUdBQUFBQUFBQkFBTUFBQUFBQUJvQUNRQUJBQUlBQUFBQUFBSUFBUUFNQUFrQUFBQVFBQk1BQUFBRUFBWUFCQUFHQUFBQUFBQUFBQUVBQUFBQkFBRUFFQUFUQUFBQUFBQUFBQU1BQUFBREFBSUFCd0FDQUFFQUFnQUhBQUFBQUFBZkFBa0FId0FKQUI4QUNRQWdBQ0lBQUFBREFBRUFCQUFHQUFRQUJnQUVBQVlBQkFBR0FBUUFCZ0FFQUFZQUJBQUdBQVFBQmdBRUFBWUFCQUFHQUFRQUJnQUVBQVlBQUFBQkFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUFBQUFBQUFBSUFCd0FDQUFjQUFnQUhBQUlBQndBQ0FBY0FBZ0FIQUFJQUJ3QUNBQUVBQWdBQkFBSUFBUUFDQUFjQUFnQUJBQXNBQ0FBTEFBZ0FBQUFJQUFBQUNBQUFBQWdBQUFBSUFBQUFDQUFNQUFrQURBQUpBQXdBQ1FBQUFBMEFBQUFnQUNJQUFBQURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUFBQUJzQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQkFBR0FBQUFBUUFBQUFBQUFnQUhBQUFBQUFBQUFBZ0FBQUFBQUFBQUFBQUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBREFBQUFBd0FDQUFBQUFBQUFBQUFBRkFBUkFBMEFBQUFMQUJvQUNRQWFBQWtBRmdBQUFCY0FIUUFBQUFvQUFBQUFBQUFBQlFBU0FBQUFDZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVnQVpBQUFBRWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ2dBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQUFBRkFCVUFHUUFBQUFBQUJRQVNBQUVBQUFBS0FHUUFKQUFFUkVaTVZBRCtZM2x5YkFEK1ozSmxhd0QrYkdGMGJnRUNBQjhCRmdFZUFTWUJMZ0UyQVQ0QlBnRkdBVTRCVmdGZUFXWUJiZ0YyQVg0QmhnR09BWllCbmdHbUFhNEJ0Z0crQWNZQnpnSFdBZDRCMWdIZUFlWUI3Z0FiWXpKell3RzJZMk50Y0FKQVpHeHBad0c4Wkc1dmJRSENabkpoWXdKUWJHbG5ZUUhJYkdsbllRSmFiR2xuWVFKSWJHNTFiUUhPYkc5amJBSFViRzlqYkFIYWJHOWpiQUhnYkc5amJBSG1iblZ0Y2dIc2IyNTFiUUh5Y0c1MWJRSDRjMjFqY0FIK2MzTXdNUUlFYzNNd01nSUtjM013TXdJUWMzTXdOQUlXYzNNd05RSWNjM013TmdJaWMzTXdOd0lvYzNWaWN3SXVjM1Z3Y3dJMGRHNTFiUUk2QWNJQUFBUEdBQWRCV2tVZ0EvWkRVbFFnQS9aR1VrRWdCQ1pOVDB3Z0JGaE9RVllnQklwU1QwMGdCTHhVVWtzZ0EvWUFBUUFBQUFFSERnQUJBQUFBQVFVcUFBWUFBQUFCQWtvQUFRQUFBQUVDREFBRUFBQUFBUVNnQUFFQUFBQUJBWllBQVFBQUFBRUNCZ0FCQUFBQUFRR01BQVFBQUFBQkFhZ0FCQUFBQUFFQnFBQUVBQUFBQVFHOEFBRUFBQUFCQVhJQUFRQUFBQUVCY0FBQkFBQUFBUUZ1QUFFQUFBQUJBWWdBQVFBQUFBRUJpZ0FCQUFBQUFRSkNBQUVBQUFBQkFaQUFBUUFBQUFFQ1VBQUJBQUFBQVFKMkFBRUFBQUFCQXB3QUFRQUFBQUVDd2dBQkFBQUFBUUVzQUFZQUFBQUJBWkFBQVFBQUFBRUJ0QUFCQUFBQUFRSEdBQUVBQUFBQkFkZ0FBUUFBQUFFQkNnQUFBQUVBQUFBQUFBRUFDd0FBQUFFQUd3QUFBQUVBQ2dBQUFBRUFGZ0FBQUFFQUNBQUFBQUVBQlFBQUFBRUFCd0FBQUFFQUJnQUFBQUVBSEFBQUFBRUFFd0FBQUFFQUZBQUFBQUVBQVFBQUFBRUFEQUFBQUFFQURRQUFBQUVBRGdBQUFBRUFEd0FBQUFFQUVBQUFBQUVBRVFBQUFBRUFFZ0FBQUFFQUhnQUFBQUVBSFFBQUFBRUFGUUFBQUFJQUFnQUVBQUFBQWdBSkFBb0FBQUFEQUJjQUdBQWFBQUFBQkFBSkFBb0FDUUFLQUFELy93QVVBQUFBQVFBQ0FBTUFCQUFJQUEwQURnQVBBQkFBRVFBU0FCTUFGQUFWQUJZQUZ3QVlBQmtBR2dBQkIyZ0FBZ0FCQjBRQUFRQUJCMFFCN2dBQkIwUUJmd0FCQjBRQ0JRQUJCMFFCZ1FBQkIyUUJpUUFCRGpvQUFRZEdBQUVPTWdBQkIwUUFBZ2RZQUFJQ1BBSTlBQUlIVGdBQ0FqNENQd0FCRGk0QUF3Y3VCeklITmdBQ0IwQUFBd0orQW44Q2Z3QUNCMVlBQmdKeEFtOENjZ0p6QW5BRkhnQUNCelFBQmdVWUJSa0ZHZ1ViQlJ3RkhRQURBQUVIUWdBQkJ2NEFBQUFCQUFBQUdRQUNCeUFIQ0FlQ0IwWUFCd0FBQnd3SERBY01Cd3dIREFjTUFBSUcwZ0FLQWRjQjFnSFZBaThDTUFJeEFqSUNNd0kwQWpVQUFnYTRBQW9DVGdCNkFITUFkQUpQQWxBQ1VRSlNBbE1DVkFBQ0JwNEFDZ0dWQUhvQWN3QjBBWllCbHdHWUFaa0JtZ0diQUFJRzdnQU1BbFVDVndKV0FsZ0NXUUozQW5nQ2VRSjZBbnNDZkFKOUFBSUhKQUFVQW1vQ2JnSm9BbVVDWndKbUFtc0NhUUp0QW13Q1h3SmFBbHNDWEFKZEFsNEFHZ0FjQW1NQ2RRQUNCcjRBRkFTbEFvRUVuZ1NmQktBRW9RU2lBbllFb3dTa0Fsd0NYZ0pkQWxzQ1h3SjFBQm9DWXdBY0Fsb0FBZ2NNQUJRQ2F3SnRBbTRDYUFKbEFtY0NaZ0pwQW13Q2FnQWJBQlVBRmdBWEFCZ0FHUUFhQUJ3QUhRQVVBQUlHdGdBVUJLSUVvd0tCQko0RW53U2dCS0VDZGdTa0FCY0FHUUFZQUJZQUd3QVVBQm9BSFFBY0FCVUVwUUFBLy84QUZRQUFBQUVBQWdBREFBUUFCd0FJQUEwQURnQVBBQkFBRVFBU0FCTUFGQUFWQUJZQUZ3QVlBQmtBR2dBQS8vOEFGUUFBQUFFQUFnQURBQVFBQlFBSUFBMEFEZ0FQQUJBQUVRQVNBQk1BRkFBVkFCWUFGd0FZQUJrQUdnQUEvLzhBRmdBQUFBRUFBZ0FEQUFRQUJnQUlBQWtBRFFBT0FBOEFFQUFSQUJJQUV3QVVBQlVBRmdBWEFCZ0FHUUFhQUFELy93QVdBQUFBQVFBQ0FBTUFCQUFHQUFnQUNnQU5BQTRBRHdBUUFCRUFFZ0FUQUJRQUZRQVdBQmNBR0FBWkFCb0FBUC8vQUJZQUFBQUJBQUlBQXdBRUFBWUFDQUFMQUEwQURnQVBBQkFBRVFBU0FCTUFGQUFWQUJZQUZ3QVlBQmtBR2dBQS8vOEFGZ0FBQUFFQUFnQURBQVFBQmdBSUFBd0FEUUFPQUE4QUVBQVJBQklBRXdBVUFCVUFGZ0FYQUJnQUdRQWFBQUVQa2dBMkJ2SUZ0QVc0QmZBSEFBWDJCYndIRGdZeUJqb0YvQWFHQjFRRndBWnlCa0lHQWdka0JnZ0dTZ2FTQmc0SEhBWEVCY2dHRkFjcUJjd0YwQVhVQmxJR1dnWWFCcDRIT0FYWUJud0dZZ1lnQjBZR0pnWnFCcW9HTEFYY0JlQUY1QVhvQnJZR3dnYk9CdG9HNWdYc0FBSUhBZ0RyQW9JQ1F3SkNBa0VDUUFJNEFmWUI5UUgwQWZNQjhnSHhBZkFCN3dIdUFlMEI3QUhyQWVvQjZRSG9BZWNCNWdIbEFlUUI0d0hpQW5RQ2hBTkJBb1lDaFFOQUFmTUNnd0tJQW1JRTR3VGtBZm9CK3dUbEJPWUU1d0g4Qk9nQi9RSCtBZjhFN1FJQUFnQUU3Z1R2QWdFQ0FnSURBZ29FL0FUOUFnc0NEQUlOQWc0Q0R3SVFCUUFGQVFVREJRWUZEd0lTQWhNQ0ZBSVZBaFlDRndJWUFoa0NHZ0liQWdRQ0JRSUdBZ2NDQ0FJSkFrc0NIUUllQWg4Q0lBVUpBaUVDSXdJa0FpVUNKd0lwQW9jRFFnTkRBMFFEUlFOR0EwY0RTQU5KQTBvRFN3Tk1BMDBEVGdOUEExQURVUU5TQTFNRFZBTlZBMVlEVndOWUExa0RXZ05iQTF3RFhRT1RBMTREWHdOZ0EyRURZZ05qQTJRRFpRTm1BMmNEYUFOcEEyb0Rhd05zQTIwRGJnTnZBM0FEY1FOeUEzTUZFQU4xQTNZRGR3TjRBM2tEZWdON0Ezd0RmUU4rQTM4RGdBT0JBNElEZ3dPRUE0VURoZ1VUQTRjRGlBT0tBNGtEaXdPTUE0MERqZ09QQTVBRGtRT1NBNVFEbFFPV0JSRUZFZ1RjQk4wRTNnVGZCT2tFN0FUcUJPc0U4QVR4QlBJRTRBVGhCT0lFK3dUK0JQOEZBZ1VFQlFVQ0VRVUhCUE1FOUFUMUJQWUU5d1Q0QlBrRStnVVVCUlVGRmdVWEJRZ0ZDZ1VMQWlnRkRRSXFCUTRGREFJbUFod0NJZ1VjQlIwQUFnY0FBUG9COXdLQ0FlRUI0QUhmQWQ0QjNRSGNBZHNCMmdIWkFkZ0NRd0pDQWtFQ1FBSTRBZllCOVFIMEFmTUI4Z0h4QWZBQjd3SHVBZTBCN0FIckFlb0I2UUhvQWVjQjVnSGxBZVFCNHdIaUFmZ0IrUUtFQW9ZQ2hRS0hBb01DaUFKaUFmb0Ird0g4QWYwQi9nSC9BZ0FDQVFJQ0FnTUNCQUlGQWdZQ0J3SUlBZ2tDQ2dJTEFnd0NEUUlPQWhBQ0VRVVBBaElDRXdJVUFoVUNGZ0lYQWhnQ0dRSWFBaHNDU3dJZEFoNENId0lnQlFrQ0lRSWpBaVFDSlFJbUFpY0NLQUlwQWlzQ0xBSXVBaTBEUUFOQkEwSURRd05FQTBVRFJnTkhBMGdEU1FOS0Ewc0RUQU5OQTA0RFR3TlFBMUVEVWdOVEExUURWUU5XQTFjRFdBTlpBMW9EV3dOY0ExMERYZ05mQTJBRFlRTmlBMk1EWkFObEEyWURad05vQTJrRGFnTnJBMndEYlFOdUEyOERjQU54QTNJRGN3TjBCUkFEZFFOMkEzY0RlQU41QTNvRGV3TjhBMzBEZmdOL0E0QURnUU9DQTRNRGhBT0ZBNFlGRXdPSEE0Z0RpZ09KQTRzRGpBT05BNDREandPUUE1RURrZ09UQTVRRGxRT1dCUkVGRWdUY0JOMEUzZ1RmQk9BRTRRVGlCT01FNUFUbEJPWUU1d1RvQk9rRTZnVHJCT3dFN1FUdUJPOEU4QVR4QlBJRTh3VDBCUFVFOWdUM0JQZ0NEd1Q1QlBvRSt3VDhCUDBFL2dUL0JRQUZBUVVDQlFNRkJBVUZCUVlGQndVVUJSVUZGZ1VYQlFnRkNnVUxCUTBDS2dVT0JRd0NIQUlpQlJ3RkhRQUJBQUVCZXdBQkFBRUFTd0FCQUFFQXV3QUJBQUVBTmdBQkFBRUFFd0FCQUFJREdRTWFBQUlHNUFiWUFBSUc1Z2JZQUFFRzdnQUJCdkFBQVFieUFBSUFBUUFVQUIwQUFBQUJBQUlBTHdCUEFBRUFBd0JKQUVzQ2VnQUNBQUFBQVFiZUFBRUFCZ0xMQXN3QzNRTGVBMkFEYVFBQkFBWUFUUUJPQXZJRDN3UGhCRm9BQWdBREFaUUJsQUFBQWRVQjF3QUJBaThDTlFBRUFBSUFBZ0NvQUt3QUFRRWtBU2NBQVFBQkFBd0FKd0FvQUNzQU13QTFBRVlBUndCSUFFc0FVd0JVQUZVQUFnQUNBQlFBSFFBQUFtVUNiZ0FLQUFJQUJnQk5BRTBBQmdCT0FFNEFCQUx5QXZJQUJRUGZBOThBQXdQaEErRUFBZ1JhQkZvQUFRQUNBQVFBRkFBZEFBQUNkZ0oyQUFvQ2dRS0JBQXNFbmdTbEFBd0FBZ0FHQUJvQUdnQUFBQndBSEFBQkFsb0NYd0FDQW1NQ1l3QUlBbVVDYmdBSkFuVUNkUUFUQUFFQUZBQWFBQndDV2dKYkFsd0NYUUplQWw4Q1l3SjFBbllDZ1FTZUJKOEVvQVNoQktJRW93U2tCS1VBQVFYZUFBRUY0QUFCQmVJQUFRWGtBQUVGNWdBQkJlZ0FBUVhxQUFFRjdBQUJCZTRBQVFYd0FBRUY4Z0FCQmZRQUFRWDJBQUVGK0FBQkJmb0FBZ1g4QmdJQUFnWUNCZ2dBQWdZSUJnNEFBZ1lPQmhRQUFnWVVCaG9BQWdZYUJpQUFBZ1lnQmlZQUFnWW1CaXdBQWdZc0JqSUFBZ1l5QmpnQUFnWTRCajRBQXdZK0JrUUdTZ0FEQmtnR1RnWlVBQU1HVWdaWUJsNEFBd1pjQm1JR2FBQURCbVlHYkFaeUFBTUdjQVoyQm53QUF3WjZCb0FHaGdBREJvUUdpZ2FRQUFRR2pnYVVCcG9Hb0FBRUJwd0dvZ2FvQnE0QUJRYXFCckFHdGdhOEJzSUFCUWE4QnNJR3lBYk9CdFFBQlFiT0J0UUcyZ2JnQnVZQUJRYmdCdVlHN0FieUJ2Z0FCUWJ5QnZnRy9nY0VCd29BQlFjRUJ3b0hFQWNXQnh3QUJRY1dCeHdISWdjb0J5NEFCUWNvQnk0SE5BYzZCMEFBQlFjNkIwQUhSZ2RNQjFJQUJnZE1CMUlIV0FkZUIyUUhhZ0FHQjJJSGFBZHVCM1FIZWdlQUFBWUhlQWQrQjRRSGlnZVFCNVlBQmdlT0I1UUhtZ2VnQjZZSHJBQUdCNlFIcWdld0I3WUh2QWZDQUFZSHVnZkFCOFlIekFmU0I5Z0FCZ2ZRQjlZSDNBZmlCK2dIN2dBSENDNEg1Z2ZzQi9JSCtBZitDQVFBQndnbUIvb0lBQWdHQ0F3SUVnZ1lBQUVBNndBS0FFVUFSZ0JIQUVnQVNRQktBRXNBVEFCTkFFNEFUd0JRQUZFQVVnQlRBRlFBVlFCV0FGY0FXQUJaQUZvQVd3QmNBRjBBWGdDRkFJWUFod0NKQUlvQWl3Q05BSkFBa2dDVUFMc0F2QUM5QUw0QXZ3REFBTUVBd2dEREFNUUF4UURHQU1jQXlBREpBTW9BeXdETUFNMEF6Z0RxQU9zQTdBRHRBTzRBN3dEd0FQRUE4Z0R6QVBRQTlRRDJBUGNBK0FENUFQb0Erd0Q4QVAwQS9nRC9BUUFCQVFFQ0FRTUJCQUVGQVFZQkJ3RXdBVFFCTmdFNEFUb0JQQUZDQVVRQlJnRktBVTBCV2dLTkFvOENxd0tzQXEwQ3JnS3ZBckFDc1FLeUFyTUN0QUsxQXJZQ3R3SzRBcmtDdWdLN0Fyd0N2UUsrQXI4Q3dBTEJBc0lDd3dMRUFzVUN4Z0xJQXNvQ3pBTE9BdEFDMGdMVUF0WUMyQUxhQXR3QzNnTGdBdUlDNUFMbUF1Z0M2Z0xzQXU0QzhBTHlBdlVDOXdMNUF2c0MvUUwvQXdFREF3TUZBd2NEQ2dNTUF3NERFQU1TQXhRREZnTVlBeG9ESEFNZUF5QURJZ01rQXlZREtBTXFBeXdETGdNd0F6SUROQU0zQXprRE93TTlBejhEcndPd0E3RURzZ08wQTdVRHRnTzNBN2dEdVFPNkE3c0R2QU85QTlRRDFRUFdBOWNEMkFQWkE5b0Qyd1BjQTkwRDNnUGZBK0FENFFQaUErTUQ1UVBuQStrRDZ3UUFCQUlFQkFRU0JCa0VId1FsQkk4RWtBU1VCSmdGR1FVYkFBRUErZ0FJQUFvQUZBQVZBQllBRndBWUFCa0FHZ0FiQUJ3QUhRQWxBQ1lBSndBb0FDa0FLZ0FyQUN3QUxRQXVBQzhBTUFBeEFESUFNd0EwQURVQU5nQTNBRGdBT1FBNkFEc0FQQUE5QUQ0QVpRQm5BSUVBZ3dDRUFJd0Fqd0NSQUpNQXNRQ3lBTE1BdEFDMUFMWUF0d0M0QUxrQXVnRFNBTk1BMUFEVkFOWUExd0RZQU5rQTJnRGJBTndBM1FEZUFOOEE0QURoQU9JQTR3RGtBT1VBNWdEbkFPZ0E2UUV2QVRNQk5RRTNBVGtCT3dGQkFVTUJSUUZKQVVzQlRBRllBVmtCcHdHdEFiSUJ0UUtMQW93Q2pnS1FBcEVDa2dLVEFwUUNsUUtXQXBjQ21BS1pBcG9DbXdLY0FwMENuZ0tmQXFBQ29RS2lBcU1DcEFLbEFxWUNwd0tvQXFrQ3FnTEhBc2tDeXdMTkFzOEMwUUxUQXRVQzF3TFpBdHNDM1FMZkF1RUM0d0xsQXVjQzZRTHJBdTBDN3dMeEF2TUM5QUwyQXZnQytnTDhBdjREQUFNQ0F3UURCZ01KQXdzRERRTVBBeEVERXdNVkF4Y0RHUU1iQXgwREh3TWhBeU1ESlFNbkF5a0RLd010QXk4RE1RTXpBelVETmdNNEF6b0RQQU0rQTVjRG1BT1pBNW9EbXdPY0E1MERud09nQTZFRG9nT2pBNlFEcFFPbUE2Y0RxQU9wQTZvRHF3T3NBNjBEcmdPK0E3OER3QVBCQThJRHd3UEVBOFVEeGdQSEE4Z0R5UVBLQThzRHpBUE5BODREendQUUE5RUQwZ1BUQStRRDVnUG9BK29EL3dRQkJBTUVHQVFlQkNRRWpnU1RCSmNGR0FVYUFjd0FBZ0JOQWMwQUFnQlFBYzRBQXdCS0FFMEJ6d0FEQUVvQVVBQUJBQUVBU2dITEFBSUFTZ0hSQUFJQVdBSFFBQUlBV0FBQkFBTUFTZ0JYQUpVQUFBQUJBQUVBQVFBQkFBQUFBd1MzQUFJQXJRTE5BQUlBcVFTOUFBSUFyUVRLQUFJQXFRUzRBQUlBclFMT0FBSUFxUVNuQUFJQXFRUytBQUlBclFSYUFBSUFyUVRMQUFJQXFRTThBQUlBcVFNK0FBSUFxUU05QUFJQXFRTS9BQUlBcVFTMkFBSUFxUVM3QUFJQnlnUzVBQUlBclFTbUFBSUFxUUxuQUFJQnlnUHhBQUlBcVFURkFBSUFyUU1mQUFJQnlnVFFBQUlBclFUVkFBSUFyUVRUQUFJQXFnTTJBQUlBcVFUWkFBSUFyUVM4QUFJQnlnUzZBQUlBclFQeUFBSUFxUVRHQUFJQXJRTWdBQUlCeWdUUkFBSUFyUVRXQUFJQXJRVFVBQUlBcWdNM0FBSUFxUVRhQUFJQXJRUy9BQUlBcVFMNEFBSUJ5Z1RCQUFJQXJRTDZBQUlBcVFMOEFBSUJ5Z1REQUFJQXJRTVZBQUlBcVFNYkFBSUJ5Z1RPQUFJQXJRUG1BQUlBcVFUWEFBSUFyUVBrQUFJQXFBVEFBQUlBcVFMNUFBSUJ5Z1RDQUFJQXJRTDdBQUlBcVFMOUFBSUJ5Z1RFQUFJQXJRTVdBQUlBcVFNY0FBSUJ5Z1RQQUFJQXJRUG5BQUlBcVFUWUFBSUFyUVBsQUFJQXFBTVBBQUlBcVFNUkFBSUJ5Z1RNQUFJQXJRU3lBQUlBckFNUUFBSUFxUU1TQUFJQnlnVE5BQUlBclFTekFBSUFyQU1DQUFJQXFRTUVBQUlCeWdUSEFBSUFyUVNvQUFJQXFBS2dBQUlBcWdLcUFBSUFxUVNCQUFJQXJRUHFBQUlBcUFTREFBSUFxd1NGQUFJQXFnTURBQUlBcVFNRkFBSUJ5Z1RJQUFJQXJRU3BBQUlBcUFLN0FBSUFxZ0xGQUFJQXFRU0NBQUlBclFQckFBSUFxQVNFQUFJQXF3U0dBQUlBcWdLNEFBSUFxUUszQUFJQXFBUllBQUlBcXdMc0FBSUFxZ1N2QUFJQXJBUnBBQUlBcVFSeEFBSUFyUVJyQUFJQXFBUnRBQUlBcXdSdkFBSUFxZ1JxQUFJQXFRUnlBQUlBclFSc0FBSUFxQVJ1QUFJQXF3UndBQUlBcWdSM0FBSUFxUVIvQUFJQXJRUjVBQUlBcUFSN0FBSUFxd1I5QUFJQXFnUjRBQUlBcVFTQUFBSUFyUVI2QUFJQXFBUjhBQUlBcXdSK0FBSUFxZ0tSQUFJQXFRUXZBQUlBclFLUUFBSUFxQVF4QUFJQXF3S1RBQUlBcWdTcUFBSUFyQUtaQUFJQXFRUkhBQUlBclFLWUFBSUFxQVJKQUFJQXF3UkxBQUlBcWdTc0FBSUFyQUtkQUFJQXFRUlpBQUlBclFLY0FBSUFxQVJYQUFJQXF3THJBQUlBcWdTdUFBSUFyQUtzQUFJQXFRUXdBQUlBclFLckFBSUFxQVF5QUFJQXF3S3VBQUlBcWdTckFBSUFyQUswQUFJQXFRUklBQUlBclFLekFBSUFxQVJLQUFJQXF3Uk1BQUlBcWdTdEFBSUFyQUs5QUFJQXFRUmNBQUlBclFLOEFBSUFxQVJlQUFJQXF3Sy9BQUlBcWdTeEFBSUFyQUxDQUFJQXFRUjBBQUlBclFMQkFBSUFxQVIyQUFJQXF3TW1BQUlBcWdTMUFBSUFyQUtpQUFJQXFRUmJBQUlBclFLaEFBSUFxQVJkQUFJQXF3S2tBQUlBcWdTd0FBSUFyQUtuQUFJQXFRUnpBQUlBclFLbUFBSUFxQVIxQUFJQXF3TWxBQUlBcWdTMEFBSUFyQVRKQUFNQXFnQ3BCTklBQXdDcUFLa0FBZ0FSQUNVQUtRQUFBQ3NBTFFBRkFDOEFOQUFJQURZQU93QU9BRDBBUGdBVUFFVUFTUUFXQUVzQVRRQWJBRThBVkFBZUFGWUFXd0FrQUYwQVhnQXFBSUVBZ1FBc0FJTUFnd0F0QUlZQWhnQXVBSWtBaVFBdkFJMEFqUUF3QUpnQW13QXhBTkFBMEFBMUFBQT1cIixcclxuICBcIlJvYm90by1NZWRpdW0udHRmXCI6IFwiQUFFQUFBQVJBUUFBQkFBUVIwUkZScVdMb2lBQUFiOUlBQUFDV0VkUVQxUGsxemNLQUFIQm9BQUFaaXhIVTFWQ2hSWU85QUFDSjh3QUFCWDJUMU12TXBmbnNZc0FBQUdZQUFBQVlHTnRZWERPeUZvNkFBQVdkQUFBQm9KamRuUWdPL2dtZlFBQUwxQUFBQUQrWm5CbmJhZ0ZoRElBQUJ6NEFBQVBobWRoYzNBQUNBQVpBQUcvUEFBQUFBeG5iSGxtb1ZwZUFnQUFPcEFBQVlHaWFHVmhaQWF0SFNrQUFBRWNBQUFBTm1ob1pXRUs5Z3JZQUFBQlZBQUFBQ1JvYlhSNEpwRlZ6Z0FBQWZnQUFCUjhiRzlqWVNwaWhvMEFBREJRQUFBS1FHMWhlSEFJenhER0FBQUJlQUFBQUNCdVlXMWxRbHgxUGdBQnZEUUFBQUxtY0c5emRQOXRBR1FBQWI4Y0FBQUFJSEJ5WlhCNVdNN1RBQUFzZ0FBQUFzNEFBUUFBQUFNQlNPbTlRSDlmRHp6MUFCa0lBQUFBQUFERThCRXVBQUFBQU44R3YyMzZKdjNWQ1dFSWN3QUFBQWtBQWdBQUFBQUFBQUFCQUFBSGJQNE1BQUFKYnZvbS9qNEpZUUFCQUFBQUFBQUFBQUFBQUFBQUFBQUZId0FCQUFBRkh3Q3BBQlVBZGdBSEFBSUFFQUF2QUpvQUFBTG1EM1VBQXdBQkFBUUVpUUgwQUFVQUFBV2FCVE1BQUFFZkJab0ZNd0FBQTlFQVpnSUFBQUFDQUFBQUFBQUFBQUFBNEFBQy8xQUFJRnNBQUFBZ0FBQUFBRWRQVDBjQVFBQUEvLzBHQVA0QUFHWUhtZ0lBSUFBQm53QUFBQUFFT2dXd0FBQUFJQUFEQTR3QVpBQUFBQUFBQUFBQUFmMEFBQUg5QUFBQ0hnQ01BbzRBWUFUVEFGWUVqQUJrQmVRQVpBVWhBRlVCVndCU0FzVUFnUUxNQUNjRGpBQWNCSEVBUWdIS0FDSUN1QUJRQWprQWhnTWZBQUVFakFCb0JJd0FxZ1NNQUZJRWpBQk9CSXdBTndTTUFIOEVqQUJ6Qkl3QVJBU01BR2NFakFCZEFod0Fmd0hyQURNRUVnQStCSUFBandRb0FINEQ1QUE3QnkwQVd3Vk9BQkVGRFFDVUJUa0FaZ1U1QUpRRWhRQ1VCR2dBbEFWekFHc0ZyUUNVQWtRQXBRUnlBQzhGRGdDVUJGSUFsQWIvQUpRRnJRQ1VCWU1BWlFVYkFKUUZnd0JnQlFrQWxBVFlBRXNFNEFBdEJUd0FnQVVxQUJFSEN3QXZCUTBBSmdUakFBZ0Uwd0JRQWl3QWhRTlZBQklDTEFBTEEyNEFOZ09WQUFJQ2tBQTRCRkFBVmdSL0FIMEVMUUJPQklJQVVBUkpBRkVDMHdBckJJa0FVZ1J5QUhvQ0NnQjhBZ0wvcXdRc0FIMENDZ0NNQnZnQWZBUjBBSG9FaWdCT0JIOEFmUVNIQUZBQzFBQjlCQjRBU1FLcUFBb0Vjd0IzQS9nQUZnWHdBQ01FQmdBZkErc0FEQVFHQUZFQ3F3QTRBZjBBcndLckFCd0ZUUUIxQWg4QWhRU0NBR2NFdFFCZkJaNEFYQVJBQUEwQitBQ0pCUGtBWEFPU0FHTUdTUUJhQTVBQWpnUGpBRmNFYXdCL0Jrb0FXUVBhQUowRER3Q0JCRW9BWEFMMUFEMEM5UUEzQXBRQWJ3VEJBSk1ENmdCSkFrUUFrQUlUQUd3QzlRQ0NBNmNBZVFQakFGNEZ5Z0JmQmlJQVV3WmNBR1lENVFCR0IzNy8vQVJDQUV3RmdRQnBCTThBbFFUckFJb0d3Z0JJQktRQWFBU1JBRU1FaGdCT0JKRUFnUVRzQUZBRnNBQWZBaGNBa0FTYUFJMEVaQUFnQWxJQUlBV1hBSkFFaGdCOUI3QUFaUWMrQUZrQ0J3Q0pCWTBBVlFMUS85NEZrUUJiQkowQVRRV2pBSUFFNWdCM0FpWC9yZ1E1QUZjRDNnQ1FBNm9BYmdQYUFKMERmZ0IxQWdvQWdRS3FBSGdDVEFBcEE4NEFkd01vQUVzQ2N3Q0pBQUQ4a3dBQS9XSUFBUHgwQUFEOU9nQUEvQWdBQVAwZUFtc0F6UVE3QUc0Q1JBQ1FCSFFBbVFYQ0FCb0ZlZ0JjQlRVQUlBU01BR29GcmdDWkJJd0FSd1g1QUV3RnNRQkdCVmtBYkFTRUFGWUV5QUNYQkEwQUhnU0dBRkVFWlFCaUJBOEFXUVNHQUgwRXB3QjJBcVVBb3dSb0FCVUVHZ0JuQlB3QU1BU0dBSUFFTXdCUUJJNEFVQVFxQUR3RVhRQi9CZEVBUmdYTUFGSUdsQUJsQkxRQWVBU0gvK0VHZVFBckJmMEFKQVZUQUdjSWdRQXRDSXdBbVFaUkFDMEZwUUNQQlFjQWtBWDlBQ1lIcVFBVkJOc0FTUVdtQUpJRnFBQXNCUXNBTWdaZkFFNEYrQUNPQllVQWtRZWFBSlVIK2dDVkJpRUFGUWJ3QUprRkFnQ1FCVWdBWXdkaUFLRUU2QUFYQklBQVdnU0xBSThEV3dDREJQSUFKd2FIQUNBRUZ3Qk9CSklBaEFSc0FJOEVsQUFnQmdJQWp3U1JBSVFFa2dDRUEvb0FJd1hVQUZNRXp3Q0VCR1VBWUFhTkFJUUc4UUI5QlNFQUlBWnZBSThFYVFDUEJEa0FVQWFDQUpJRWNBQXVCSEwvMXdRNUFGSUcxZ0FkQnVRQWhBU0cvK2dFa2dDRUIxZ0FpQVpxQUhJRWFQL2hCeWdBbUFZQ0FJWUZGZ0FhQkdNQUN3ZExBS3dHUFFDYUJ1VUFmZ1hkQUlFSktnQ2xCKzRBa0FRZ0FDZ0Q5UUF5QlhvQVlBU0lBRTBGR0FBUUJBMEFIZ1Y2QUdBRWhnQk9CMVFBaUFaV0FIVUhXQUNJQm1vQWNnVVFBR2NFUndCZEJQc0FjQUFBL0hBQUFQeDFBQUQ5Z1FBQS9hWUFBUG9tQUFENlVRWWdBSklGRXdDRUJHai80UVVRQUpRRWhnQjlCR3NBandPakFIMEU2Z0NaQkNRQWZRZ2pBQlVHNEFBZ0Jja0FtUVQ3QUk4RkxnQ1JCS3dBalFhVUFEUUZvQUE4QmlBQWxBVUhBSVFIM1FDVUJhMEFmUWhKQUpjRzd3QjlCamNBWndVRUFHQUZPUUFtQkVFQUh3Y29BQ2tGYndBbkJmSUFrUVRjQUdBRmNBQ0JCSFFBZFFXRkFJa0dHd0FLQk1UL3l3VWdBSkVFZUFDTkJoOEFMQVVVQUNBRnJRQ1pCSVlBZlFZcUFKUUZFUUNFQjNVQWxBWjBBSThGalFCVkJLTUFXd1NrQUYwRXd3QXNBNm9BSkFWcEFDWUVjUUFmQlBrQVR3YnpBR2dHMndCZkJsRUFQUVVvQUM4RWd3QktCRWdBY3dlOEFFSUdwQUEvQi9VQWxBYWVBSFFGQmdCY0JDOEFWUVdvQUNFRkhRQkVCVTRBZlFaR0FDd0ZPd0FnQXhzQVpBUVVBQUFJS1FBQUJCUUFBQWdwQUFBQ3VRQUFBZ29BQUFGY0FBQUVmd0FBQWpBQUFBR2lBQUFCQUFBQUFORUFBQUFBQUFBQ3R3QlFBcmNBVUFVakFKd0dLZ0I3QTVvQUNBRy9BR1VCdWdBM0FjNEFOUUdqQUVzREN3QnRBeE1BUXdNQUFEVUVXd0EvQkpvQVhRTE1BSW9EL1FDTkJhb0FqUUhQQUY0SHJnQlFBblFBYkFKcEFGVURtUUFyQXZVQVRBTDFBRFlDOVFCUUF2VUFUZ0wxQURjQzlRQkxBdlVBUndOY0FHY0M5UUJNQXZVQWdnTDFBRDBDOVFBM0F2VUFOZ0wxQUZBQzlRQk9BdlVBTndMMUFFc0M5UUJIQkxVQVlnWnVBQ01HdndDWkNKVUFsQVk3QUNNR213QjlCSXdBWEFYcUFDTUVMUUFxQkpzQUpBVmlBRThGZmdBckJlUUFiZ1BqQUVVSUtRQ1FCUWdBYndVVUFKWUdOd0JjQnQ0QVZnYlFBRjRHckFCY0JKTUFZUVdLQUtZRTNnQS9CSUFBbkFTZEFEc0lVZ0JoQWpML3B3U1JBR1VFZ0FDUEJCSUFQUVFvQUgwRURnQWxBbEVBbkFLT0FHUUI2UUJIQlJrQUt3U3RBQm9FdlFBckJ5Z0FLd2NvQUNzRkR3QXJCcmNBU1FBQUFBQUlNQUJaQ0RVQVhBTDFBRDBDOVFDQ0F2VUFUQVFkQUU4RUhRQlhCQjBBT0FRZEFGOEVIUUJtQkIwQU13UWRBRDBFSFFCREJCMEFtQVFkQUZnRUt3QkJCRDRBQmdSY0FCTUdDUUFuQkhrQUNBU0lBR2tFUHdBbEJEY0FQd1JrQUhVRXZRQk5CR3NBZGdTOUFFNEUzQUIyQmdVQWRnTzNBSFlFWGdCMkE5WUFKZ0grQUlZRTNRQjJCS2NBVmdQSUFIWUVOd0EvQkdnQU9nT2xBQW9EdkFCMkJIa0FDQVM5QUU0RWVRQUlBNTBBUmdUWkFIWUVIZ0JFQmFZQVR3VllBRThFNEFCZUJaSUFJd1NBQUU4SFZnQWtCMWdBZGdXWkFDVUUyQUIyQkhJQWRnVmVBQ2NHUlFBYkJFWUFRd1RpQUhZRVhRQjJCTXNBSkFSTUFCOEZZZ0IyQkkwQVF3YUVBSFlIRGdCMkJXRUFDUVlXQUhZRVp3QjJCSUFBUFFhUEFIWUVoQUJDQkNnQUN3YWpBQnNFb0FCMkJRMEFkZ1YwQUNFRitBQk9CRllBQmdURUFCTUdsd0FqQkkwQVF3U05BSFlHQUFBT0JNNEFUUVJIQUVNRXZRQk9CR2dBT2dQMEFFVUlMUUIyQlBRQUtBTDFBRGNDOVFBMkF2VUFVQUwxQUU0QzlRQTNBdlVBU3dMMUFFY0R0Z0NOQXE0QW1BUGdBSFlFT2dBTUJMWUFWZ1ZCQUprRktBQ1pCREFBZ1FVMUFKa0VLQUNCQkhvQWRnU0FBRThFWUFCMkJKb0FDQUgrQUpBRG9RQjFBQUQ4bmdQM0FIb0QrdjlSQkFzQWVRUDZBSGtEdkFCMkE1MEFkUU9kQUhVQzlRQk1BdlVBTmdMMUFGQUM5UUJPQXZVQU53TDFBRXNDOVFCSEJYTUFhUVdlQUdrRmZ3Q1pCZGtBYVFYYUFHa0VLQUNXQklJQWF3UllBQThFdXdBMEJHc0Fad1F1QUVJRG9RQjJBYm9BWWdhWUFFNEVyd0J1QWd6L3B3U01BRGdFakFCb0JJd0FMQVNNQUdJRWpBQmZCSXdBTkFTTUFHd0VqQUJaQkl3QVp3U01BT1lDSnYrdUFpWC9yZ0lYQUpBQ0YvLzZBaGNBa0FSZ0FIWUU1Z0JnQkRBQU9RU0lBSDBFUGdCUEJKVUFUZ1NSQUU0RW5RQkpCSklBZlFTYUFFNEVTUUJSQklrQVVBUlpBRFFEclFCaEJRd0FYd1BFQUFVR1J2L3NCQWNBZGdTOUFFNEZEZ0EwQk53QWRnSDlBQUFDdUFCUUJWY0FGd1ZYQUJjRWtQLzFCT0FBTFFLcS8rc0ZUZ0FSQlU0QUVRVk9BQkVGVGdBUkJVNEFFUVZPQUJFRlRnQVJCVGtBWmdTRkFKUUVoUUNVQklVQWxBU0ZBSlFDUlAvTEFrUUFwUUpFLzhvQ1JQKytCYTBBbEFXREFHVUZnd0JsQllNQVpRV0RBR1VGZ3dCbEJUd0FnQVU4QUlBRlBBQ0FCVHdBZ0FUakFBZ0VVQUJXQkZBQVZnUlFBRllFVUFCV0JGQUFWZ1JRQUZZRVVBQldCQzBBVGdSSkFGRUVTUUJSQkVrQVVRUkpBRkVDRi8rMUFoY0FrQUlYLzdNQ0YvK29CSFFBZWdTS0FFNEVpZ0JPQklvQVRnU0tBRTRFaWdCT0JITUFkd1J6QUhjRWN3QjNCSE1BZHdQckFBd0Q2d0FNQlU0QUVRUlFBRllGVGdBUkJGQUFWZ1ZPQUJFRVVBQldCVGtBWmdRdEFFNEZPUUJtQkMwQVRnVTVBR1lFTFFCT0JUa0FaZ1F0QUU0Rk9RQ1VCUmdBVUFTRkFKUUVTUUJSQklVQWxBUkpBRkVFaFFDVUJFa0FVUVNGQUpRRVNRQlJCSVVBbEFSSkFGRUZjd0JyQklrQVVnVnpBR3NFaVFCU0JYTUFhd1NKQUZJRmN3QnJCSWtBVWdXdEFKUUVjZ0I2QWtUL3RBSVgvNTBDUlAvUkFoZi91d0pFLzkwQ0YvL0dBa1FBR0FJSy8vOENSQUNmQnJVQXBRUUxBSHdFY2dBdkFpWC9yZ1VPQUpRRUxBQjlCRklBbEFJS0FJd0VVZ0NVQWdvQVdRUlNBSlFDb0FDTUJGSUFsQUxtQUl3RnJRQ1VCSFFBZWdXdEFKUUVkQUI2QmEwQWxBUjBBSG9FZFArakJZTUFaUVNLQUU0Rmd3QmxCSW9BVGdXREFHVUVpZ0JPQlFrQWxBTFVBSDBGQ1FDVUF0UUFVZ1VKQUpRQzFBQTNCTmdBU3dRZUFFa0UyQUJMQkI0QVNRVFlBRXNFSGdCSkJOZ0FTd1FlQUVrRTJBQkxCQjRBU1FUZ0FDMENxZ0FLQk9BQUxRS3FBQW9FNEFBdEF0SUFDZ1U4QUlBRWN3QjNCVHdBZ0FSekFIY0ZQQUNBQkhNQWR3VThBSUFFY3dCM0JUd0FnQVJ6QUhjRlBBQ0FCSE1BZHdjTEFDOEY4QUFqQk9NQUNBUHJBQXdFNHdBSUJOTUFVQVFHQUZFRTB3QlFCQVlBVVFUVEFGQUVCZ0JSQjM3Ly9BYkNBRWdGZ1FCcEJJWUFUZ1I2LzZVRWV2K2xCRDhBSlFTYUFBZ0VtZ0FJQkpvQUNBU2FBQWdFbWdBSUJKb0FDQVNhQUFnRWdBQlBBK0FBZGdQZ0FIWUQ0QUIyQStBQWRnSCsvNmtCL2dDR0FmNy9wd0grLzV3RTNBQjJCTDBBVGdTOUFFNEV2UUJPQkwwQVRnUzlBRTRFaUFCcEJJZ0FhUVNJQUdrRWlBQnBCRDRBQmdTYUFBZ0VtZ0FJQkpvQUNBU0FBRThFZ0FCUEJJQUFUd1NBQUU4RWVnQmhBK0FBZGdQZ0FIWUQ0QUIyQStBQWRnUGdBSFlFcHdCV0JLY0FWZ1NuQUZZRXB3QldCTjBBZGdIKy81RUIvdit2QWY3L3VnSCtBQmNCL2dCOUE5WUFKZ1JlQUhZRHR3QjJBN2NBZGdPM0FIWUR0d0IyQk53QWRnVGNBSFlFM0FCMkJMMEFUZ1M5QUU0RXZRQk9CR1FBZFFSa0FIVUVaQUIxQkRjQVB3UTNBRDhFTndBL0JEY0FQd1EvQUNVRVB3QWxCRDhBSlFTSUFHa0VpQUJwQklnQWFRU0lBR2tFaUFCcEJJZ0FhUVlKQUNjRVBnQUdCRDRBQmdRckFFRUVLd0JCQkNzQVFRVk9BQkVFNmY5Q0JoSC9TZ0tvLzA0RmwvKzBCVWYvUVFWdC84SUNwZitGQlU0QUVRVU5BSlFFaFFDVUJOTUFVQVd0QUpRQ1JBQ2xCUTRBbEFiL0FKUUZyUUNVQllNQVpRVWJBSlFFNEFBdEJPTUFDQVVOQUNZQ1JQKytCT01BQ0FTRUFGWUVaUUJpQklZQWZRS2xBS01FWFFCL0JKb0FqUVNLQUU0RXdRQ1RBL2dBRmdSWkFEUUNwZi9EQkYwQWZ3U0tBRTRFWFFCL0JwUUFaUVNGQUpRRWRBQ1pCTmdBU3dKRUFLVUNSUCsrQkhJQUx3VW9BSmtGRGdDVUJRc0FNZ1ZPQUJFRkRRQ1VCSFFBbVFTRkFKUUZwZ0NTQnY4QWxBV3RBSlFGZ3dCbEJhNEFtUVViQUpRRk9RQm1CT0FBTFFVTkFDWUVVQUJXQkVrQVVRU1NBSVFFaWdCT0JIOEFmUVF0QUU0RDZ3QU1CQVlBSHdSSkFGRURXd0NEQkI0QVNRSUtBSHdDRi8rb0FnTC9xd1JzQUk4RDZ3QU1Cd3NBTHdYd0FDTUhDd0F2QmZBQUl3Y0xBQzhGOEFBakJPTUFDQVByQUF3QlZ3QlNBbzRBWUFROEFJd0NKZitxQWJvQU53Yi9BSlFHK0FCOEJVNEFFUVJRQUZZRWhRQ1VCYVlBa2dSSkFGRUVrZ0NFQmJFQVJnWE1BRklGR0FBUUJBMy84d2gxQUU0SmJnQmxCTnNBU1FRWEFFNEZPUUJtQkMwQVRnVGpBQWdFRFFBZUFrUUFwUWVwQUJVR2h3QWdBa1FBcFFWT0FCRUVVQUJXQlU0QUVRUlFBRllIZnYvOEJzSUFTQVNGQUpRRVNRQlJCWTBBVlFRNUFGY0VPUUJYQjZrQUZRYUhBQ0FFMndCSkJCY0FUZ1dtQUpJRWtnQ0VCYVlBa2dTU0FJUUZnd0JsQklvQVRnVjZBR0FFaUFCTkJYb0FZQVNJQUUwRlNBQmpCRGtBVUFVTEFESUQ2d0FNQlFzQU1nUHJBQXdGQ3dBeUErc0FEQVdGQUpFRVpRQmdCdkFBbVFadkFJOEVnZ0JRQlU0QUVRUlFBRllGVGdBUkJGQUFWZ1ZPQUJFRVVBQldCVTRBRVFSUS81OEZUZ0FSQkZBQVZnVk9BQkVFVUFCV0JVNEFFUVJRQUZZRlRnQVJCRkFBVmdWT0FCRUVVQUJXQlU0QUVRUlFBRllGVGdBUkJGQUFWZ1ZPQUJFRVVBQldCSVVBbEFSSkFGRUVoUUNVQkVrQVVRU0ZBSlFFU1FCUkJJVUFsQVJKQUZFRWhmL2ZCRW4vbEFTRkFKUUVTUUJSQklVQWxBUkpBRkVFaFFDVUJFa0FVUUpFQUtVQ0Z3Q1FBa1FBbFFJS0FIZ0Znd0JsQklvQVRnV0RBR1VFaWdCT0JZTUFaUVNLQUU0Rmd3QXNCSXIvcWdXREFHVUVpZ0JPQllNQVpRU0tBRTRGZ3dCbEJJb0FUZ1dSQUZzRW5RQk5CWkVBV3dTZEFFMEZrUUJiQkowQVRRV1JBRnNFblFCTkJaRUFXd1NkQUUwRlBBQ0FCSE1BZHdVOEFJQUVjd0IzQmFNQWdBVG1BSGNGb3dDQUJPWUFkd1dqQUlBRTVnQjNCYU1BZ0FUbUFIY0Zvd0NBQk9ZQWR3VGpBQWdENndBTUJPTUFDQVByQUF3RTR3QUlBK3NBREFTZ0FGQUU0QUF0QS9vQUl3V0ZBSkVFWlFCZ0JIUUFtUU5iQUlNR0d3QUtCTVQveXdSeUFIb0ZBdi9YQlFMLzF3UjAvL1FEVy8vZkJUei84d1JFLzhrRTR3QUlCQTBBSGdVTkFDWUVCZ0FmQkdVQVlnUm9BQUVHS2dCN0JJd0FVZ1NNQUU0RWpBQTNCSXdBZndTZ0FJY0V0QUI3QktBQVhRUzBBSHdGY3dCckJJa0FVZ1d0QUpRRWRBQjZCVTRBRVFSUUFBNEVoUUJPQkVrQUF3SkUvdnNDRi83bEJZTUFaUVNLQUJrRkNRQTFBdFQvY3dVOEFIY0Vjd0FVQk92L0N3VU5BSlFFZndCOUJUa0FsQVNDQUZBRk9RQ1VCSUlBVUFXdEFKUUVjZ0I2QlE0QWxBUXNBSDBGRGdDVUJDd0FmUVJTQUpRQ0NnQjRCdjhBbEFiNEFId0ZyUUNVQkhRQWVnV0RBR1VGR3dDVUJIOEFmUVVKQUpRQzFBQnhCTmdBU3dRZUFFa0U0QUF0QXFvQUNnVThBSUFGS2dBUkEvZ0FGZ1VxQUJFRCtBQVdCd3NBTHdYd0FDTUUwd0JRQkFZQVVRWEovbXdFbWdBSUJCei9ZZ1VaLzJzQ092OXVCTWYvbUFSNi95QUU2dityQkpvQUNBUmdBSFlENEFCMkJDc0FRUVRkQUhZQi9nQ0dCRjRBZGdZRkFIWUUzQUIyQkwwQVRnUnJBSFlFUHdBbEJENEFCZ1JjQUJNQi92K2NCRDRBQmdQZ0FIWUR2QUIyQkRjQVB3SCtBSVlCL3YrY0E5WUFKZ1JlQUhZRVRBQWZCSm9BQ0FSZ0FIWUR2QUIyQStBQWRnVGlBSFlHQlFCMkJOMEFkZ1M5QUU0RTJRQjJCR3NBZGdTQUFFOEVQd0FsQkZ3QUV3UkdBRU1FM1FCMkJJQUFUd1ErQUFZR0FBQU9CT0lBZGdSTUFCOEZwZ0JQQmRRQWhnWkcvK3dFdlFCT0JEY0FQd1lKQUNjR0NRQW5CZ2tBSndRK0FBWUZUZ0FSQkZBQVZnU0ZBSlFFU1FCUkJKb0FDQVBnQUhZQ0Z3QjRBQUFBQWdBQUFBTUFBQUFVQUFNQUFRQUFBQlFBQkFadUFBQUE5QUNBQUFZQWRBQUFBQUlBRFFCK0FLQUFyQUN0QUw4QXhnRFBBT1lBN3dEK0FROEJFUUVsQVNjQk1BRlRBVjhCWndGK0FYOEJqd0dTQWFFQnNBSHdBZjhDR3dJM0Fsa0N2QUxIQXNrQzNRTHpBd0VEQXdNSkF3OERJd09LQTR3RGtnT2hBN0FEdVFQSkE4NEQwZ1BXQkNVRUx3UkZCRThFWWdSdkJIa0VoZ1NmQktrRXNRUzZCTTRFMXdUaEJQVUZBUVVRQlJNZUFSNC9Ib1VlOFI3ekh2a2ZUU0FKSUFzZ0VTQVZJQjRnSWlBbklEQWdNeUE2SUR3Z1JDQjBJSDhncENDcUlLd2dzU0M2SUwwaEJTRVRJUlloSWlFbUlTNGhYaUlDSWdZaUR5SVNJaG9pSGlJcklrZ2lZQ0psSmNydUF2YkQrd1QrLy8vOS8vOEFBQUFBQUFJQURRQWdBS0FBb1FDdEFLNEF3QURIQU5BQTV3RHdBUDhCRUFFU0FTWUJLQUV4QVZRQllBRm9BWDhCandHU0FhQUJyd0h3QWZvQ0dBSTNBbGtDdkFMR0Fza0MyQUx6QXdBREF3TUpBdzhESXdPRUE0d0RqZ09UQTZNRHNRTzZBOG9EMFFQV0JBQUVKZ1F3QkVZRVVBUmpCSEFFZWdTSUJLQUVxZ1N5QkxzRXp3VFlCT0lFOWdVQ0JSRWVBQjQrSG9BZW9CN3lIdlFmVFNBQUlBb2dFQ0FUSUJjZ0lDQWxJREFnTWlBNUlEd2dSQ0IwSUg4Z295Q21JS3Nnc1NDNUlMd2hCU0VUSVJZaElpRW1JUzRoV3lJQ0lnWWlEeUlSSWhvaUhpSXJJa2dpWUNKa0pjcnVBZmJEK3dIKy8vLzgvLzhBQVFBQS8vYi81QUhwLzhJQjNmL0JBQUFCMEFBQUFjc0FBQUhIQUFBQnhRQUFBY01BQUFHN0FBQUJ2ZjhXL3dmL0JmNzQvdXNCL3dBQUFBRCtaZjVFQVRUOTJQM1gvY245dFAyby9hZjlvdjJkL1lvQUFBQVBBQTRBQUFBQS9Rb0FBUC92L1A3OCt3QUEvTG9BQVB5eUFBRDhwd0FBL0tFQUFQeVpBQUQ4a1FBQS96a0FBUDgyQUFEOFhnQUE1ZlBscytWazVZL2srT1dONVk3aGN1Rno0VzhBQU9GczRXdmhhZUZoNDdyaFdlT3k0VkRoSXVFZEFBRGhBZ0FBNFAzZzl1RDE0Szdnb2VDZjRKVGZsT0NKNEYzZnV0NnMzNjdmcmQrbTM2UGZsOTk3MzJUZllkdjlFOGNMQndiTEF0TUIxd0FCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURrQUFBQTdnQUFBUmdBQUFFeUFBQUJNZ0FBQVRJQUFBRjBBQUFBQUFBQUFBQUFBQUFBQUFBQmRBRitBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFXd0FBQUFBQVhRQmtBQUFBYWdBQUFBQUFBQUJ3QUFBQWdnQUFBSXdBQUFDVWdBQUFtSUFBQUtPQUFBQ21nQUFBcjRBQUFMT0FBQUM0Z0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXRJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTENBQUFDd2dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLUUFwRUNrZ0tUQXBRQ2xRQ0JBb3dDb0FLaEFxSUNvd0trQXFVQWdnQ0RBcVlDcHdLb0Fxa0NxZ0NFQUlVQ3F3S3NBcTBDcmdLdkFyQUFoZ0NIQXJzQ3ZBSzlBcjRDdndMQUFJZ0FpUUxCQXNJQ3d3TEVBc1VBaWdLTEFJc0FqQUtOQUkwQzlBTDFBdllDOXdMNEF2a0FqZ0w2QXZzQy9BTDlBdjRDL3dNQUF3RUFqd0NRQXdJREF3TUVBd1VEQmdNSEF3Z0FrUUNTQXdrRENnTUxBd3dERFFNT0FKTUFsQU1kQXg0RElRTWlBeU1ESkFLT0FvOENsZ0t4QXp3RFBRTStBejhER3dNY0F4OERJQUN1QUs4RGx3Q3dBNWdEbVFPYUFMRUFzZ09oQTZJRG93Q3pBNlFEcFFDMEE2WURwd0MxQTZnQXRnT3BBTGNEcWdPckFMZ0RyQUM1QUxvRHJRT3VBNjhEc0FPeEE3SURzd08wQU1RRHRnTzNBTVVEdFFER0FNY0F5QURKQU1vQXl3RE1BN2dBelFET0EvVUR2Z0RTQTc4QTB3UEFBOEVEd2dQREFOUUExUURXQThVRDlnUEdBTmNEeHdEWUE4Z0R5UURaQThvQTJnRGJBTndEeXdQRUFOMER6QVBOQTg0RHp3UFFBOUVEMGdEZUFOOEQwd1BVQU9vQTZ3RHNBTzBEMVFEdUFPOEE4QVBXQVBFQThnRHpBUFFEMXdEMUE5Z0QyUUQyQTlvQTl3UGJBL2NEM0FFQ0E5MEJBd1BlQTk4RDRBUGhBUVFCQlFFR0ErSUQrQVBqQVFjQkNBRUpCSklEK1FQNkFSY0JHQUVaQVJvRCt3UDhBLzREL1FFb0FTa0JLZ0VyQkpFQkxBRXRBUzRCTHdFd0JKTUVsQUV4QVRJQk13RTBBLzhFQUFFMUFUWUJOd0U0QkpVRWxnUUJCQUlFaUFTSkJBTUVCQVNYQkpnRWtBRk1BVTBFamdTUEJBVUVCZ1FIQVU0QlR3RlFBVkVCVWdGVEFWUUJWUVNLQklzQlZnRlhBVmdFRWdRUkJCTUVGQVFWQkJZRUZ3RlpBVm9FakFTTkJDd0VMUUZiQVZ3QlhRRmVCSmtFbWdGZkJDNEVtd0Z2QVhBQmdRR0NCSjBFbkFHbkJJY0JyUUFBUUVxWm1KZVdoNGFGaElPQ2dZQi9mbjE4ZTNwNWVIZDJkWFJ6Y25Gd2IyNXRiR3RxYVdoblptVmtZMkpoWUY5ZVhWeGJXbGxZVjFaVlZGTlJVRTlPVFV4TFNrbElSMFlvSHhBS0NTd0JzUXNLUXlORFpRb3RMQUN4Q2d0REkwTUxMU3dCc0FaRHNBZERaUW90TExCUEt5Q3dRRkZZSVV0U1dFVkVHeUVoV1JzakliQkFzQVFsUmJBRUpVVmhaSXBqVWxoRlJCc2hJVmxaTFN3QXNBZERzQVpEQ3kwc1MxTWpTMUZhV0NCRmltQkVHeUVoV1Mwc1MxUllJRVdLWUVRYklTRlpMU3hMVXlOTFVWcFlPQnNoSVZrdExFdFVXRGdiSVNGWkxTeXdBa05VV0xCR0t4c2hJU0VoV1Mwc3NBSkRWRml3UnlzYklTRWhXUzBzc0FKRFZGaXdTQ3NiSVNFaElWa3RMTEFDUTFSWXNFa3JHeUVoSVZrdExDTWdzQUJRaW9wa3NRQURKVlJZc0VBYnNRRURKVlJZc0FWRGkxbXdUeXRaSTdCaUt5TWhJMWhsV1Mwc3NRZ0FEQ0ZVWUVNdExMRU1BQXdoVkdCRExTd0JJRWV3QWtNZ3VCQUFZcmdRQUdOWEk3Z0JBR0s0RUFCalYxcFlzQ0JnWmxsSUxTeXhBQUlsc0FJbHNBSWxVN2dBTlNONHNBSWxzQUlsWUxBZ1l5QWdzQVlsSTJKUVdJb2hzQUZnSXhzZ0lMQUdKU05pVWxnakliQUJZUnVLSVNNaElGbFp1UC9CSEdDd0lHTWpJUzBzc1FJQVFyRWpBWWhSc1VBQmlGTmFXTGdRQUxBZ2lGUllzZ0lCQWtOZ1FsbXhKQUdJVVZpNElBQ3dRSWhVV0xJQ0FnSkRZRUt4SkFHSVZGaXlBaUFDUTJCQ0FFc0JTMUpZc2dJSUFrTmdRbGtidUVBQXNJQ0lWRml5QWdRQ1EyQkNXYmhBQUxDQVk3Z0JBSWhVV0xJQ0NBSkRZRUpadVVBQUFRQmp1QUlBaUZSWXNnSVFBa05nUWxteEpnR0lVVmk1UUFBQ0FHTzRCQUNJVkZpeUFrQUNRMkJDV2JsQUFBUUFZN2dJQUloVVdMSUNnQUpEWUVKWnNTZ0JpRkZZdVVBQUNBQmp1QkFBaUZSWXVRQUNBUUN3QWtOZ1FsbFpXVmxaV1ZteEFBSkRWRmhBQ2dWQUNFQUpRQXdDRFFJYnNRRUNRMVJZc2dWQUNMb0JBQUFKQVFDekRBRU5BUnV4Z0FKRFVsaXlCVUFJdUFHQXNRbEFHN2dCQUxBQ1ExSllzZ1ZBQ0xvQmdBQUpBVUFidUFHQXNBSkRVbGl5QlVBSXVBSUFzUWxBRzdJRlFBaTZBUUFBQ1FFQVdWbFp1RUFBc0lDSVZibEFBQUlBWTdnRUFJaFZXbGl6REFBTkFSdXpEQUFOQVZsWldVSkNRa0pDTFN4RnNRSk9LeU93VHlzZ3NFQlJXQ0ZMVVZpd0FpVkZzUUZPSzJCWkd5TkxVVml3QXlWRklHU0tZN0JBVTFpeEFrNHJZQnNoV1JzaFdWbEVMU3dnc0FCUUlGZ2paUnNqV2JFVUZJcHdSYkJQS3lPeFlRWW1ZQ3VLV0xBRlE0dFpJMWhsV1NNUU9pMHNzQU1sU1dNalJtQ3dUeXNqc0FRbHNBUWxTYkFESldOV0lHQ3dZbUFyc0FNbElCQkdpa1pnc0NCallUb3RMTEFBRnJFQ0F5V3hBUVFsQVQ0QVByRUJBZ1lNc0FvalpVS3dDeU5Dc1FJREpiRUJCQ1VCUHdBL3NRRUNCZ3l3QmlObFFyQUhJMEt3QVJheEFBSkRWRmhGSTBVZ0dHbUtZeU5pSUNDd1FGQllaeHRtV1dHd0lHT3dRQ05oc0FRalFodXhCQUJDSVNGWkdBRXRMQ0JGc1FCT0swUXRMRXRSc1VCUEsxQmJXQ0JGc1FGT0t5Q0tpa1Fnc1VBRUptRmpZYkVCVGl0RUlSc2pJWXBGc1FGT0t5Q0tJMFJFV1Mwc1MxR3hRRThyVUZ0WVJTQ0tzRUJoWTJBYkl5RkZXYkVCVGl0RUxTd2pSU0NLUlNOaElHU3dRRkd3QkNVZ3NBQlRJN0JBVVZwYXNVQlBLMVJhV0lvTVpDTmtJMU5Zc1VCQWltRWdZMkViSUdOWkc0cFpZN0VDVGl0Z1JDMHNBUzBzQUMwc0JiRUxDa01qUTJVS0xTeXhDZ3RESTBNTEFpMHNzQUlsWTJhd0FpVzRJQUJpWUNOaUxTeXdBaVZqc0NCZ1pyQUNKYmdnQUdKZ0kySXRMTEFDSldObnNBSWx1Q0FBWW1BallpMHNzQUlsWTJhd0lHQ3dBaVc0SUFCaVlDTmlMU3dqU3JFQ1Rpc3RMQ05Lc1FGT0t5MHNJNHBLSTBWa3NBSWxaTEFDSldGa3NBTkRVbGdoSUdSWnNRSk9LeU93QUZCWVpWa3RMQ09LU2lORlpMQUNKV1N3QWlWaFpMQURRMUpZSVNCa1diRUJUaXNqc0FCUVdHVlpMU3dnc0FNbFNyRUNUaXVLRURzdExDQ3dBeVZLc1FGT0s0b1FPeTBzc0FNbHNBTWxpckJuSzRvUU95MHNzQU1sc0FNbGlyQm9LNG9RT3kwc3NBTWxSckFESlVaZ3NBUWxMckFFSmJBRUpiQUVKaUN3QUZCWUliQnFHN0JzV1N1d0F5VkdzQU1sUm1CaHNJQmlJSW9nRUNNNkl5QVFJem90TExBREpVZXdBeVZIWUxBRkpVZXdnR05oc0FJbHNBWWxTV01qc0FVbFNyQ0FZeUJZWWhzaFdiQUVKa1pnaWthS1JtQ3dJR05oTFN5d0JDYXdCQ1d3QkNXd0JDYXdiaXNnaWlBUUl6b2pJQkFqT2kwc0l5Q3dBVlJZSWJBQ0piRUNUaXV3Z0ZBZ1lGa2dZR0Fnc0FGUldDRWhHeUN3QlZGWUlTQm1ZYkJBSTJHeEFBTWxVTEFESmJBREpWQmFXQ0N3QXlWaGlsTllJYkFBV1JzaFdSdXdCMVJZSUdaaFpTTWhHeUVoc0FCWldWbXhBazRyTFN5d0FpV3dCQ1ZLc0FCVFdMQUFHNHFLSTRxd0FWbXdCQ1ZHSUdaaElMQUZKckFHSmttd0JTYXdCU2F3Y0NzallXV3dJR0FnWm1Hd0lHRmxMU3l3QWlWR0lJb2dzQUJRV0NHeEFrNHJHMFVqSVZsaFpiQUNKUkE3TFN5d0JDWWd1QUlBWWlDNEFnQmppaU5oSUxCZFlDdXdCU1VSaWhLS0lEbUtXTGtBWFJBQXNBUW1ZMVpnS3lNaElCQWdSaUN4QWs0ckkyRWJJeUVnaWlBUVNiRUNUaXRaT3kwc3VRQmRFQUN3Q1NWalZtQXJzQVVsc0FVbHNBVW1zRzByc1YwSEpXQXJzQVVsc0FVbHNBVWxzQVVsc0c4cnVRQmRFQUN3Q0NaalZtQXJJTEFBVWxpd1VDdXdCU1d3QlNXd0J5V3dCeVd3QlNXd2NTdXdBaGM0c0FCU3NBSWxzQUZTV2xpd0JDV3dCaVZKc0FNbHNBVWxTV0Fnc0VCU1dDRWJzQUJTV0NDd0FsUllzQVFsc0FRbHNBY2xzQWNsU2JBQ0Z6Z2JzQVFsc0FRbHNBUWxzQVlsU2JBQ0Z6aFpXVmxaV1NFaElTRWhMU3k1QUYwUUFMQUxKV05XWUN1d0J5V3dCeVd3QmlXd0JpV3dEQ1d3RENXd0NTV3dDQ1d3Yml1d0JCYzRzQWNsc0FjbHNBY21zRzByc0FRbHNBUWxzQVFtc0cwcnNGQXJzQVlsc0FZbHNBTWxzSEVyc0FVbHNBVWxzQU1sc0FJWE9DQ3dCaVd3QmlXd0JTV3djU3Rnc0FZbHNBWWxzQVFsWmJBQ0Z6aXdBaVd3QWlWZ0lMQkFVMWdoc0VCaEk3QkFZU01idVAvQVVGaXdRR0Fqc0VCZ0kxbFpzQWdsc0FnbHNBUW1zQUlYT0xBRkpiQUZKWXF3QWhjNElMQUFVbGl3QmlXd0NDVkpzQU1sc0FVbFNXQWdzRUJTV0NFYnNBQlNXTEFHSmJBR0piQUdKYkFHSmJBTEpiQUxKVW13QkJjNHNBWWxzQVlsc0FZbHNBWWxzQW9sc0FvbHNBY2xzSEVyc0FRWE9MQUVKYkFFSmJBRkpiQUhKYkFGSmJCeEs3QUNGemdic0FRbHNBUWx1UC9Bc0FJWE9GbFpXU0VoSVNFaElTRWhMU3l3QkNXd0F5V0hzQU1sc0FNbGlpQ3dBRkJZSWJCbEc3Qm9XU3Rrc0FRbHNBUWxCckFFSmJBRUpVa2dJR093QXlVZ1kxR3hBQU1sVkZ0WUlTRWpJUWNiSUdPd0FpVWdZMkVnc0ZNcmltT3dCU1d3QlNXSHNBUWxzQVFtU3JBQVVGaGxXYkFFSmlBQlJpTUFSckFGSmlBQlJpTUFSckFBRmdDd0FDTklBYkFBSTBnQUlMQUJJMGl3QWlOSUFTQ3dBU05Jc0FJalNDT3lBZ0FCQ0NNNHNnSUFBUWtqT0xFQ0FRZXdBUlpaTFN3akVBME1pbU1qaW1OZ1pMbEFBQVFBWTFCWXNBQTRHenhaTFN5d0JpV3dDU1d3Q1NXd0J5YXdkaXNqc0FCVVdBVWJCRm13QkNXd0JpYXdkeXV3QlNXd0JTYXdCU1d3QlNhd2RpdXdBRlJZQlJzRVdiQjNLeTBzc0FjbHNBb2xzQW9sc0FnbXNIWXJpckFBVkZnRkd3UlpzQVVsc0FjbXNIY3JzQVlsc0FZbXNBWWxzQVltc0hZckNMQjNLeTBzc0FjbHNBb2xzQW9sc0FnbXNIWXJpb29Jc0FRbHNBWW1zSGNyc0FVbHNBVW1zQVVsc0FVbXNIWXJzQUJVV0FVYkJGbXdkeXN0TExBSUpiQUxKYkFMSmJBSkpyQjJLN0FFSnJBRUpnaXdCU1d3Qnlhd2R5dXdCaVd3Qmlhd0JpV3dCaWF3ZGlzSXNIY3JMU3dEc0FNbHNBTWxTckFFSmJBREpVb0NzQVVsc0FVbVNyQUZKckFGSmtxd0JDWmppb3BqWVMwc3NWME9KV0Fyc0F3bUViQUZKaEt3Q2lVNXNBY2xPYkFLSmJBS0piQUpKYkI4SzdBQVVMQUxKYkFJSmJBS0piQjhLN0FBVUZSWXNBY2xzQXNsaDdBRUpiQUVKUXV3Q2lVUXNBa2x3YkFDSmJBQ0pRdXdCeVVRc0FZbHdSdXdCeVd3Q3lXd0N5VzQvLyt3ZGl1d0JDV3dCQ1VMc0FjbHNBb2xzSGNyc0FvbHNBZ2xzQWdsdVAvL3NIWXJzQUlsc0FJbEM3QUtKYkFISmJCM0sxbXdDaVZHc0FvbFJtQ3dDQ1ZHc0FnbFJtQ3dCaVd3QmlVTHNBd2xzQXdsc0F3bUlMQUFVRmdoc0dvYnNHeFpLN0FFSmJBRUpRdXdDU1d3Q1NXd0NTWWdzQUJRV0NHd2FodXdiRmtySTdBS0pVYXdDaVZHWUdHd0lHTWpzQWdsUnJBSUpVWmdZYkFnWTdFQkRDVlVXQVFiQlZtd0NpWWdFTEFESlRxd0JpYXdCaVlMc0FjbUlCQ0tPckVCQnlaVVdBUWJCVm13QlNZZ0VMQUNKVHFLaWdzaklCQWpPaTBzSTdBQlZGaTVBQUJBQUJ1NFFBQ3dBRm1Lc0FGVVdMa0FBRUFBRzdoQUFMQUFXYkI5S3kwc2lvb0lEWXF3QVZSWXVRQUFRQUFidUVBQXNBQlpzSDByTFN3SXNBRlVXTGtBQUVBQUc3aEFBTEFBV1Eyd2ZTc3RMTEFFSnJBRUpnZ05zQVFtc0FRbUNBMndmU3N0TENBQlJpTUFSckFLUTdBTFE0cGpJMkpoTFN5d0NTdXdCaVV1c0FVbGZjV3dCaVd3QlNXd0JDVWdzQUJRV0NHd2FodXdiRmtyc0FVbHNBUWxzQU1sSUxBQVVGZ2hzR29ic0d4Wkt4aXdDQ1d3QnlXd0JpV3dDaVd3Ynl1d0JpV3dCU1d3QkNZZ3NBQlFXQ0d3Wmh1d2FGa3JzQVVsc0FRbHNBUW1JTEFBVUZnaHNHWWJzR2haSzFSWWZiQUVKUkN3QXlYRnNBSWxFTEFCSmNXd0JTWWhzQVVtSVJ1d0JpYXdCQ1d3QXlXd0NDYXdieXRac1FBQ1ExUllmYkFDSmJDQ0s3QUZKYkNDS3lBZ2FXR3dCRU1CSTJHd1lHQWdhV0d3SUdFZ3NBZ21zQWdtaXJBQ0Z6aUtpbUVnYVdGaHNBSVhPQnNoSVNFaFdSZ3RMRXRTc1FFQ1ExTmFXQ01RSUFFOEFEd2JJU0ZaTFN3anNBSWxzQUlsVTFnZ3NBUWxXRHdiT1Ztd0FXQzQvK2tjV1NFaElTMHNzQUlsUjdBQ0pVZFVpaUFnRUJHd0FXQ0tJQkt3QVdHd2hTc3RMTEFFSlVld0FpVkhWQ01nRXJBQllTTWdzQVltSUNBUUViQUJZTEFHSnJDRks0cUtzSVVyTFN5d0FrTlVXQXdDaWt0VHNBUW1TMUZhV0FvNEd3b2hJVmtiSVNFaElWa3RMTENZSzFnTUFvcExVN0FFSmt0UldsZ0tPQnNLSVNGWkd5RWhJU0ZaTFN3Z3NBSkRWTEFCSTdnQWFDTjRJYkVBQWtPNEFGNGplU0d3QWtNanNDQWdYRmdoSVNHd0FMZ0FUUnhaaW9vZ2lpQ0tJN2dRQUdOV1dMZ1FBR05XV0NFaEliQUJ1QUF3SEZrYklWbXdnR0lnWEZnaElTR3dBTGdBSFJ4Wkk3Q0FZaUJjV0NFaEliQUF1QUFNSEZtS3NBRmh1UCtySENNaExTd2dzQUpEVkxBQkk3Z0FnU040SWJFQUFrTzRBSGNqZVNHeEFBSkRpckFnSUZ4WUlTRWh1QUJuSEZtS2lpQ0tJSW9qdUJBQVkxWll1QkFBWTFaWXNBUW1zQUZic0FRbXNBUW1zQVFtR3lFaElTRzRBRGl3QUNNY1dSc2hXYkFFSmlPd2dHSWdYRmlLWElwYUl5RWpJYmdBSGh4WmlyQ0FZaUJjV0NFaEl5RzRBQTRjV2JBRUpyQUJZYmova3h3aklTMEFBRUQvZmpSOVZYdysveDk3Ty84ZmVqMy9IM2s3UUI5NFBQOGZkenc5SDNZMUJ4OTFPdjhmZERwbkgzTTVUeDl5T2Y4ZmNUYi9IM0E0elI5dk9QOGZiamRlSDIwM3pSOXNOLzhmYXpjdEgybzNHQjlwTlA4ZmFETC9IMmN5elI5bU0vOGZaVEgvSDJRdy94OWpNS3NmWWpCbkgyRXUveDlnTG9BZlh5Ly9IMTR2a3g5ZExmOGZYQ3ovSDFzci94OWFLczBmV1NyL0gxZ3FEUjlYS2Y4ZlZpai9IMVVuSkI5VUp5MGZVeVZlSDFJbC94OVJKYXNmVUNiL0gwOG1nQjlPSlA4ZlRTTXJIMHdqcXg5TEkvOGZTaU5XSDBrakt4OUlJdjhmUnlEL0gwWWdjaDlGSWY4ZlJDRnlIME1mL3g5Q0hwTWZRUjcvSDBBZC94OC9IUDhmUFR1VFFPb2ZQRHMwSHpvMURoODVObklmT0RaUEh6YzJJaDgyTlpNZk16SkFIekV3Y2g4dkxrb2ZLeXBBSHljWkJCOG1KU2dmSlRNYkdWd2tHaElmSXdVYUdWd2lHZjhmSVNBOUh5QTRHQlpjSHhndEh4NFgveDhkRnY4ZkhCWUhIeHN6R1J4YkdEUVdIRnNhTXhrY1d4YzBGaHhiRlJrK0ZxWmFFekVTVlJFeEVGVVNXUkJaRFRRTVZRVTBCRlVNV1FSWkh3UmZCQUlQQkg4RTd3UUREMTRPVlFzMENsVUhOQVpWQVRFQVZRNVpDbGtHV1g4R0FTOEdUd1p2QmdNL0JsOEdmd1lEQUZrdkFBRXZBRzhBN3dBRENUUUlWUU0wQWxVSVdRSlpId0pmQWdJUEFuOEM3d0lEQTBCQUJRRzRBWkN3VkN0THVBZi9Va3V3Q1ZCYnNBR0lzQ1ZUc0FHSXNFQlJXckFHaUxBQVZWcGJXTEVCQVk1WmhZMk5BQjFDUzdDUVUxaXlBd0FBSFVKWnNRSUNRMUZZc1FRRGpsbHpkQUFyQUNzckszTjBBQ3R6ZEhVQUt3QXJBQ3NyS3lzcmMzUUFLd0FyS3lzQUt3QXJLeXNCS3dFckFTc0JLd0VyQVNzckFDc3JBU3NyQVNzQUt3QXJBU3NyS3lzckFTc3JBQ3NyS3lzckt5c0JLeXNBS3lzckt5c3JLd0VyQUNzckt5c3JLeXNyS3lzckt5c0JLeXNBS3lzckt5c3JLeXNyS3dFckt5c3JLeXNyQUNzckt5c3JLeXNyS3lzckt5c3JLeXNyS3lzckt4Z0FBQVlBQUJVRnNBQVVCYkFBRkFRNkFCUUFBUC9zQUFELzdBQUEvK3orWVAvMUJiQUFGUUFBLytzQUFBQzlBTUFBblFDZEFMb0Fsd0NYQUNjQXdBQ2RBSVlBdkFDckFMb0FtZ0RUQUxNQW1RSGdBSllBdWdDYUFLa0JDd0NDQUs0QW9BQ01BSlVBdVFDcEFCY0Frd0NhQUhzQWl3Q2hBTjRBb0FDTUFKMEF0Z0FuQU1BQW5RQ2tBSVlBb2dDckFMWUF2d0M2QUlJQWpnQ2FBS0lBc2dEVEFKRUFtUUN0QUxNQXZnSEpBZjBBbGdDNkFFY0FtQUNkQUtrQkN3Q0NBSmtBbndDcEFMQUFnUUNGQUlzQWxBQ3BBTFVBdWdBWEFGQUFZd0I0QUgwQWd3Q0xBSkFBbUFDaUFLNEExQURlQVNZQWV3Q0pBSk1BblFDbEFMUUVqUUFRQUFBQUFBQXlBRElBTWdBeUFESUFXZ0I1QUs4QkpBR2xBaGtDTGdKZUFvNEN1d0xZQXZJREF3TWVBeklEZndPWUE5Y0VQZ1JxQkxjRkVRVXVCWjBGOXdZREJnOEdOQVpQQm5RR3hRZHZCNmNJQmdoS0NJZ0l1QWpoQ1RBSldBbHNDWmNKeWdub0Noc0tQZ3FLQ3IwTEZRdGFDN2tMMXd3RkRDME1id3llRE1NTThBMEpEUjBOTmcxYkRXc05mdzNuRGpvT2dBN1REeUFQVHcrM0QrOFFGUkJPRUlFUWxSRHhFU3NSY1JIRUVoZ1NUQktqRXRNVENoTXdFM0lUbnhQYkZBY1VUUlJmRktZVTVSVUpGV01WcmhZUEZsWVdjQmNDRnk4WHB4ZjlHQWtZSmhpL0dOQVpBeGtvR1Y4WnZSblJHaEVhTUJwS0duUWFpeHJKR3RVYTVocjNHd2diV0J1bEc4TWNIQnhWSExJZFVCMnhIZWdlUEI2UUh1d2ZIUjh4SDJNZmpCK3JIK2NnTkNDZklTZ2hUaUdhSWVraVNpS2hJdUFqS3lOUkk1c2p1eVBhSStJa0JDUWZKRThrZWlTMkpOUWxBQ1VVSlNrbE1pVmRKWG9sbENXbkplSWw2aVlCSmpFbWlTYXhKdGdtOVNjcEozd251U2dZS0lJbzVDa1JLWHNwNFNveUttd3F4eXJ0SzBBcnNDdnBMRGNzZ2l6VkxRVXRQUzJRTGRFdU9DNlhMdTB2WGkrbkwvY3dVekNiTU5vdy9qRkJNWk14NERKSE1tb3lvakxnTXpJeld6T1JNN1l6NXpRa05HTTBtRFRvTlVvMWlUWDRObHcyY3phNE53YzNhemVPTjhBMytEZ25PRTg0ZFRpUk9TVTVUVG1CT2FZNTF6b1ZPbE02aURyV096UTdkRHZQUEIwOGVEekJQUUU5SmoxN1BkRStFRDVwUHNNKy96ODNQNG8vMlVBOFFKMUJFMEdLUWdoQ2hFTHJRejFEYzBPclJCQkVia1VTUmJOR0cwYUVSc2hIQ1VjNVIxZEhna2VYUjYxSVJVaVdTTEpJemtrSlNVeEpzRW5TU2ZSS0wwcHFTbjFLa0VxY1NxOUs3a3NzUzJaTG9FdXpTOFpMOTB3b1RHZE1zRTBhVFlKTmxVMm9UZHBPREU0ZlRqSk9kazY0VHU1UFRrK3NUL1ZRTzFCT1VHRlFtRkRSVU9SUTkxRUtVUjFSYTFHMlVnRlNFRklnVWl4U09GSnFVc0JUTlZPcVZCOVVqRlQzVlZOVnNsWCtWazFXbVZialZ5UlhaVmZOVjlsWDVWZ05XQTFZRFZnTldBMVlEVmdOV0ExWURWZ05XQTFZRFZnTldBMVlGVmdkV0M1WVAxaGFXSFJZajFpcVdNUlkwRmpjV1FsWktGbFNXVzVaZWxtS1dhUmFXRnA3V3B0YXNscTdXc1JhelZyV1d0OWE2RnJ4V3laYkwxczRXMEZiU2x0VFcxeGJaVnR1VzNkYmdGdlNYQWxjWVZ4dFhNVmRDMTFkWGFkZCtGNDNYbk5lcmw4c1gzZGYyV0FTWUZwZ2NHQ0JZSmRncldFU1lTeGhYMkZ3WVp0aUtXSmpZc0ZpN21NZlkxRmpoV09TWTY1anlHUFVaQXRrUjJTalpRWmxZV1lIWmdkbS9XZERaM2hubkdmWmFDdG9uR2kyYVFacFNXbHhhZE5xREdva2FtcHFsbXJIYXZKck1tdFZhNEZybld2NWJEbHNqbXpBYlFadEptMVdiWEZ0b1czSmJkdHVBbTVLYm5OdTVXOHliMjl2aW0rNWNBbHdMSEJTY0hWd3EzRDNjVGR4bG5IZGNpbHlmbkxDY3Y1ekxYTm5jNjF6L25SaWRJMTB2M1QyZFRGMVluV1VkY0oxLzNZM2RrTjJjM2JBZHh0M1kzZUxkK1o0STNoaGVKdDVBM2tQZVVoNWdYbkFlZkY2UjNxUWV0cDdPWHVRZStGOFJIeUFmTlI4KzMwNGZZTjluSDRDZmsxK1huNllmc2QvWm4vQWdCYUFTWUI3Z0t1QTM0RWFnVnlCdklIdGdnbUNOSUp3Z3BTQ3VvTDNnenlEWllPUWc5MkQ1b1B2Zy9pRUFZUUtoQk9FSElSamhMT0U4WVU5aFppRnRZWHpoalNHWElhbGhzQ0hFSWNoaDVHSDdJZ1FpQmlJSUlnb2lEQ0lPSWhBaUVpSVVJaFlpR0NJYUlod2lIaUlpb2lTaVBPSk9JbFZpYWlKN29wQmlxbUs3NHRDaTVhTDM0eEdqSldNblkwSmpUT05nSTJ6amdpT040NTJqbmFPZm83SGp4Q1BVSTkxajdHUHhJL1hqK3FQL1pBUmtDV1FPNUJPa0dHUWRKQ0hrSnVRcnBEQmtOU1E2SkQ3a1E2UklaRTBrVWVSVzVGdWtZR1JsSkdva2J1UnpwSGhrZk9TQlpJWWtpeVNRcEpWa21pU2U1S05rcUNTczVMRmt0aVM3Skwra3hHVEpKTTJrMGlUVzVOdWs0R1RrNU9tazdtVHpKUGZrL0dVQkpRV2xHMlU5WlVJbFJ1VkxwVkFsVk9WWnBWNWxZdVZucFd4bGNTVjFwWHBsZnVXRHBZaGxuYVc1SmIzbHdtWEhKY3VsMEdYVTVkbWwzbVhqWmVnbDdPWHhwZlpsK3lYLzVnU21DV1lPSmhLbUZ5WWI1aDdtSWVZbXBpdG1NR1kxWmpvbVB1WkQ1a2ptVGFaU1psVm1XR1pkSm1IbVp1WnI1bkNtZFNaNTVuNm1neWFINW95bWthYVdwcHRtb0NhbEpxb21ydWF6WnJnbXZPYkJwc1lteXViUHB0U20yYWJlWnVMbTUrYnM1dkdtOW1iN0p3QW5CT2NKWnc0bkVxY1haeHduSVNjbUp5c25NQ2RFSjFyblg2ZGtaMmtuYmFkeXAzZG5mQ2VBNTRXbmltZU81NU9ubUdlZEo2SG5wT2VuNTZxbnIyZTBKN2ludlNmQ0o4Y255aWZOSjlIbjFxZmJKOS9uNUtmcEorM244dWYzcC94b0FTZ0ZxQW9vRHlnVDZCaW9IU2doNkNhb0t5Z3Y2RVJvU1NoTnFGSm9WdWhiYUYvb1pHaHBLSDJvZ2lpR3FJdG9rQ2lWS0ptb25taWpLS2ZvcXFpdktMUG90dWk3YU1Cb3cyakdhTXNvemlqUzZOZG8zQ2poS09YbzZPanRhUElvOXFqNXFQNHBBeWtIcVFxcER5a1RxUmhwSFdraWFUWXBPdWsvYVVRcFNPbE5xVklwVnVsYjZWN3BZK2xvNlcycGNxbDM2WG5wZStsOTZYL3BnZW1ENllYcGgrbUo2WXZwamVtUDZaSHBrK21ZNlozcG9xbW5hYXdwc0ttMXFiZXB1YW03cWIycHY2bkVxY2xwemluUzZkZXAzS25oYWZpcCtxbi9xZ0dxQTZvSWFnMHFEeW9SS2hNcUZTb1o2aHZxSGVvZjZpSHFJK29sNmlmcUtlb3I2aTNxTXFvMHFqYXFSMnBKYWt0cVVDcFU2bGJxV09wZDZsL3FaS3BwS20zcWNxcDNhbndxZ1NxR0tvcnFqMnFSYXBOcWxtcWJLcDBxb2VxbXFxdnFzU3ExNnJxcXYyckVLc1lxeUNyTkt0SXExU3JZS3R6cTRhcm1hdXNxN1Nydkt2RXE5ZXI2cXZ5ckFXc0Y2d3JyRDZzUnF4T3JHR3NjNnlIckkrc29xeTJyTXFzM3F6eHJRU3RGcTBxclQ2dFVxMWxyVzJ0ZGEySnJaeXRzSzNEcmRhdDZLMzhyZyt1STY0M3JrdXVYcTV5cm9hdWpxNmlycmF1eWE3Y3J2Q3ZBNjhYcnlxdlBxOVJyMld2ZUsrVnI3R3Z4YS9Zcit5di83QVRzQ2F3T3JCTnNHcXdockNhc0s2d3diRFVzT2V3K2JFTnNTQ3hOTEZIc1Z1eGJyR0NzWld4c3JIT3NlR3g5TElJc2h5eU1MSkVzbGV5YXJKK3NwR3lwYks0c3N5eTM3THpzd2F6STdNL3MxS3paYk40czR1em5yT3hzOFN6MXJQcXMvNjBFclFtdERtMFRMUmZ0SEswaGJTWXRLdTB2clRSdE9PMDk3VUx0UisxTTdWR3RWbTFiTFYrdFp1MXJyWEJ0ZFMxNTdYNnRnMjJJTFl6dGp1MmVMYTB0dGEyK0xjM3QzaTNwN2ZhdUJLNFNMaFF1R1M0YkxoMHVIeTRoTGlNdUpTNG5MaWt1S3k0djdqU3VPVzQrTGtNdVNDNU5MbEl1Vnk1Y0xtRXVaaTVyTG5BdWRTNTZMbjB1Z2k2SExvd3VrUzZXTHBzdW9DNmxMcW51cnE2enJyaXV2YTdDcnNldXpLN1JydGF1MjY3Z2J1VXU2aTd2THZRdStTNytMd012Q0M4TTd4RnZGbThiYnlCdkpXOHFieTl2Tkc4M2J6cHZQVzlBYjBOdlJtOUpiMHR2VFc5UGIxRnZVMjlWYjFkdldXOWJiMTF2WDI5aGIyTnZaVzlxYjI4dmMrOTRyM3F2ZksrQnI0T3ZpRytNNzQ3dmtPK1M3NVR2bWErYnI1MnZuNitocjZPdnBhK25yNm12eGUvU0wrVXY1eS9xTCs3djgyLzFiL2h2L1RBQjhBVHdDYkFPY0JOd0ZuQWJNQi93SkxBcGNDeHdMM0EwUUFHQUdRQUFBTW9CYkFBQXdBSEFBc0FEd0FUQUJjQUFFRVZJVFV6RVNNUklSRWpFUk1WSVRVQkFTTUJFUUV6QVFNSi9YWWJOZ0xFTmhmOWRnS0svYTg2QWxIOXJ6b0NVUVd3TmpiNlVBV3crbEFGc1BxR05qWUZYUHFNQlhUNmpBVjArb3dBQWdDTS8vSUJvQVd3QUFNQUR3QVRRQWtDQWdjTkMzSUFBbklBS3l2ZHppOHdNVUVESXdNRE5EWXpNaFlWRkFZaklpWUJraGpPR1FkSlFVQktTa0JCU1FXdysvMEVBL3JDTjB0TE56VkxTd0FDQUdBRCtBSTZCZ0FBQlFBTEFBeXpDUU1MQlFBdk04MHlNREZCRlFNakVUVWhGUU1qRVRVQkRpT0xBZG9qaXdZQWlmNkJBWFNVaWY2QkFYeU1BQVFBVmdBQUJMSUZzQUFEQUFjQUN3QVBBQ05BRVFRQUJRME9EZ0FLQ1FrQUFnSnlBQkp5QUNzckVUa3ZNeEU1THpNeUVUTXdNWE1CTXdFekFUTUJBU0UxSVFNaE5TSDBBUXlrL3ZUaUFReWsvdlFCbFB2d0JCQkwrKzhFRVFXdytsQUZzUHBRQTNXYi9ZcWJBQU1BWlA4c0JDY0dtUUFEQUFjQVBRQTJRQndFQnpvNkNDc1FJd1FVTHpVMUJpOE5jZ0VDSHg4VUdob0RGQVZ5QUN2Tk15OFJNeEk1T1N2Tk15OFJFaGM1TXhJNU9UQXhRUkVqRVJNUkl4RUJOQ1ltSnk0Q05UUTJOak15SGdJVkl6UXVBaU1pQmdZVkZCWVdGeDRDRlJRR0JpTWlMZ0kxTXhRZUFqTXlOallDc1pxSG1RRXdMMnBaZ0w5cGNjcUhhS2QyUC9BZE9FOHlSMXdyTEd0ZWdiMW5kOVdOV2ErT1ZQSXFTRmt0UzJjMUJwbisxUUVyK1ovKzlBRU1BVU02VjBjZkxYR25mWHUwWWo1NHIzRkFaVWNtTlZ3N09WWkZJeTV4cFgyQnRGMHZiTE9DVG1nOEdqTmRBQVVBWlAvckJZb0Z4UUFSQUNNQU5RQkhBRXNBSTBBUlNUSkxCVHRFS1RJWERpQUZCWEl5RFhJQUt5c3l4RElReERJekVUTVJNekF4VXpVME5qWXpNaFlXRlJVVUJnWWpJaVltTnhVVUZoWXpNalkyTlRVMEppWWpJZ1lHQVRVME5qWXpNaFlXRlJVVUJnWWpJaVltTnhVVUZoWXpNalkyTlRVMEppWWpJZ1lHRXdFbkFXUklpbUZraVVoSGlXTmlpMGluSDBBdk1EMGVIejR3TGo4ZkFoZEppbUZraVVkSGlHTmlpMG1vSVVBdE16NGJIejh3THo0ZnlQMDVld0xIQkV0TlU0aFNVb2hUVFZHSVVsS0luazBvU0N3c1NDaE5LVWtzTEVuOFZrNVNpRkpTaUZKT1VvaFNVb2lnVGloSUxTMUhLVTRwU0N3c1NBTlMrNDVIQkhJQUFBRUFWZi9zQlJBRnhBQkNBQ1JBRkNNU0FBOGlBUVlhTURBckVSRTdFM0lIR2dOeUFDc3lLekl2TWpJdkVSYzVNREZCTnpZMk5UUW1JeUlHQmhVVUZoWVhBU0VCTGdJMU5EWTJNeklXRmhVVUJnWUhCUTRDRlJRV0ZqTXlQZ0kxTXhRR0JnY0dCZ2NHQmlNaUppWTFORFkyQVhYN1B6WlFTVE5HSXk1UU1nS3cvdW45emtsd1BsNnNjMitoVnpKWU92N1BOVE1RTjJ0TlU1eDhTZEFwV1VnSEVRaFcxWGlSMUhOS2dRTVlxU3BSUFRSWUwwMHZMVjluTy96VUFwVllrNHRLY3FSWldaSlhSWEplS3Q0clQwSVpRR2c5UzRyQWRXcStva0FIRlFkUFRXcTZlRm1IZFFBQkFGSUQvZ0VKQmdBQUJRQUlzUU1GQUMvR01ERkJGUU1qRXpVQkNScWRBUVlBZ2Y1L0FYR1JBQUFCQUlIK01RS2VCbDBBRndBSXNRWVRBQzh2TURGVE5UUVNFalkzRnc0Q0FoVVZGQklXRmhjSEppWUNBb0ZkbHF0UE1EcHpYems1WDNNNk1FK3JsbDBDUHhIV0FWMEJCNjBtaWl1WTNmN1p1aFc2L3RuZW15NkVKNjBCQndGZEFBQUJBQ2YrTVFKTkJsMEFGd0FJc1JNR0FDOHZNREZCRlJRQ0FnWUhKejRDRWpVMU5BSW1KaWMzRmhZU0VnSk5YNWV2VURFNmMxODVPMkp5TmpGUXI1ZGZBbEFSMC82ay92aXdKNFFzbWVFQktMb1Z1Z0VwMzVvcmhDYXcvdmYrcEFBQkFCd0NVQU41QmJFQURnQVVRQW9OQVFjRUJBNE1CZ0p5QUN2RU1oYzVNREZURXlVM0JRTXpBeVVYQlJNSEF3T0EwdjdLTlFFMERxNFFBUzgxL3NUTmpibTJBcnNCRTFxa2RnRmIvcDUycDF2KzgyWUJJdjdtQUFBQ0FFSUFrZ1FvQkxZQUF3QUhBQkMxQndjREF3WUNBQy9HTXhER0x6QXhRUlVoTlFFUkl4RUVLUHdhQW1qcEF4N1oyUUdZKzl3RUpBQUFBUUFpL3JnQlhnRG9BQW9BQ0xFRUFBQXZ6VEF4WlFjVUJnY25QZ0kxTlFGZUFXWlVnUnd1SE9pc1p0aEdTeTFjYUQrMUFBRUFVQUlPQW1FQ3pnQURBQWl4QXdJQUx6TXdNVUVWSVRVQ1lmM3ZBczdBd0FBQkFJYi85QUdnQVAwQUN3QUtzd01KQzNJQUt6SXdNWGMwTmpNeUZoVVVCaU1pSm9aTVFVSkxTMEpCVEhnNFRVMDRPRXhNQUFBQkFBSC9nd0wxQmJBQUF3QUpzZ0FDQVFBdlB6QXhRUUVqQVFMMS9jbTlBamdGc1BuVEJpMEFBZ0JvLyt3RUl3WEVBQmNBTHdBVFFBa3JCaDhTQlhJR0RYSUFLeXN5RVRNd01VRVZGQTRDSXlJdUF6VTFORDRDTXpJZUF3TVJOQzRESXlJT0FoVVJGQjRETXpJK0FnUWpRMzZ2YkZhVGRsTXRSSDZ2YkZlVGRWTXM4UlFuT2tvdU9GZzhIeFFvT1VzdE9WZzhIZ05TN3F2eGxrWXNYcFhRaWU2czdaVkVLMXlUei81bkFUUlhoVjA3R3l0ZW1XMyt6RmlHWHowY0xHR2NBQUVBcWdBQUF3QUZ0UUFHQUF5MUJnUnlBUXh5QUNzck1ERkJFU01SQlRVbEF3RHgvcHNDT1FXMStrc0VsM25IMEFBQUFRQlNBQUFFUGdYRUFCOEFHVUFNRUJBTUZRVnlBeDhmQWd4eUFDc3lFVE1yTWpJdk1ERmxGU0UxQVQ0Q05UUW1KaU1pQmdZVkl6UTJOak15RmhZVkZBNENCd0VFUHZ3d0FkcE9XaVV6WWtaUmJqanhkTnlia3N4ckxGRnVRdjdGd01DbEFnVllnR2N4UldrOVJudFBmOU45WXJSN1JJYUZoVVQrcFFBQUFnQk8vK3dFR2dYRUFCd0FPd0FxUUJZYkhCNGZCQUFBSFIwU015OHZLUTF5RFEwSkVnVnlBQ3N5TWk4ck1pOHlFVGt2TXhJWE9UQXhRVE15TmpZMU5DWW1JeUlHQmhVak5EWTJNeklXRmhVVURnSWpJeFUxTXpJZUFoVVVEZ0lqSWk0Q05UTVVGaFl6TWpZMk5UUW1KaU1CaVpCVWJ6WXhZMHhBWnp6eWV0T0VqZE4yT25LcWNMVzFnTFZ5TlVtR3MybGVySWhQOFQxdlNFeHVPMEo2VXdORk9tWkNSV00yTTExQWRMUm5YYmlJUG9CcFFUYUVQR21HUzJhZmJqZzBaNXRtUVdNNE5tcExWV296QUFBQ0FEY0FBQVJaQmJBQUJ3QUxBQjFBRGdNSEJ3WUNBZ1VKREhJTEJRUnlBQ3N5S3hJNUx6a3pFamt3TVVFVklTY0JNd01CQVJFakVRUlorK1lJQW5UQjBmNlhBbkh4QWdmQWtRUFkvcHI5dlFPcCtsQUZzQUFBQVFCLy8rd0VPUVd3QUNrQUhVQU9Kd2tKQWgwWkdSTU5jZ1VDQkhJQUt6SXJNaTh5RVRrdk16QXhRU2NUSVJVaEF6WTJNekllQWhVVURnSWpJaTRDSnpNZUFqTXlQZ0kxTkM0Q0l5SUdBV3ZBVHdNUi9iY29JbmhOWjZOeVBEdDJzM3BicDRSUUJ1d0pQV1pEUFZnN0hTRkJZa0JXV3dLbEx3TGN6UDZiRkNkRGY3VnhaYkNHU3pWcG0yVkhZelFyVVc1RFFHcE9LeklBQUFFQWMvL3NCRGtGdVFBMkFCdEFEUTRzR0NJaUxBTUFCSElzRFhJQUt5c3lFVGt2TXhFek1ERkJNeFVqSWc0Q0ZSVVVIZ0l6TWo0Q05UUXVBaU1pQmdZSEp6NERNekllQWhVVURnSWpJaTRDTlRVMEVqWWtBMFllRVlHN2VEc21SVm8wTmxnK0lCODhXVHBJZFVjRFhBaERicEZYYXB4bk0wQjdyMjkxdDM5Q1ZLOEJFZ1c1eFZDTXUybmxWNFZaTGkxUWJrRStiVk12UkcwOUhsMlVhRGRRaWE5ZmFiV0lURnFlem5Oa3BnRW40b0VBQUFFQVJBQUFCRFVGc0FBR0FCTkFDUUVGQlFZRWNnTU1jZ0FyS3pJUk16QXhRUlVCSXdFaE5RUTEvYnIrQWtYOURnV3doUHJVQlBEQUFBQUVBR2YvN0FRbUJjUUFFQUFnQURBQVFBQWhRQkFOUFQwbExSVVZCRFV0QlhJZEJBMXlBQ3N5S3pJU09TOFNPVE1TT1RBeFFSUUdCaU1pSmlZMU5ENENNeklXRmdjMEppWWpJZ1lHRlJRV0ZqTXlOallURkFZR0l5SW1KalUwTmpZek1oWVdCelFtSmlNaUJnWVZGQllXTXpJMk5nUW1mdG1JaU5wK1JvR3ZhSXJhZmZJOGJFZElhanM2YkVsSmFqclJjOHFCZ3N0emM4cUNnc3B6OFROY1B6OWNNakpkUHo5Y01nR05pTHBmWDdxSVdwTnJPbWEwYkVsdVBEeHVTVXByT0RockF1SnRxbUZocW0yQ3MxNWVzNHBCWXpnMllrUkRZemc0WXdBQkFGMy85d1FWQmNRQU9BQWJRQTBBT0JZaElUZ01Ld1Z5T0F4eUFDc3JNaEU1THpNUk16QXhaVE15UGdJMU5UUXVBaU1pRGdJVkZCNENNekkrQWpjWEZBNENJeUl1QWpVMFBnSXpNaDRDRlJVVURnTWpJd0V3RklxNWJqQWxRMWN5TjFjN0h4MDZXRHM0WGtZb0Fsdy9iNU5XYUo5cE5FQjZyMjkyc25vK0xtZW44YUlXdmttQ3NHZjdXWWRiTGpGVmNVQThiMVl5SzBwY01CeE1rM2xJVDRpd1lXbTRqVTljb3RaN1ZZSHZ5NWxWQVAvL0FILy85QUdhQkZFRUpnQVMrUUFBQndBUy8vb0RWUC8vQURQK3VBR0hCRkVFSndBUy8rY0RWQUFHQUJBUkFBQUNBRDRBcHdPSkJFd0FCQUFKQUJaQURBRURCd1lBQkFnRkNBSUpBZ0F2THhJWE9UQXhVd1VWQVRVbEFRYzFBZlFDbGZ5MUEwdjlhN1lEU3dLUi9lMEJkSjJvL3Y4am5RRnpBQUlBandGa0EvTUQwZ0FEQUFjQURyVUdCeElEQWhBQVB6TS9NekF4UVJVaE5RRVZJVFVEOC95Y0EyVDhuQVBTeHNiK1dNYkdBQUlBZmdDb0E5NEVUUUFFQUFrQUZVQUxCUWdFQUFZREFRY0NDUUlBTHk4U0Z6a3dNVUVsTlFFVkJRRTNGUUVESC8xZkEyRDhvQUtqdmZ5Z0Ftbjc2ZjZObnFzQkFDaWQvb3dBQWdBNy8vUURsd1hFQUNBQUxBQWJRQTBCQVNRa0tndHlFUkVORmdOeUFDc3lNaThyTWhFekx6QXhRU00rQWpjK0FqVTBKaVlqSWdZR0J5TStBak15RmhZVkZBWUdCd1lHQXpRMk16SVdGUlFHSXlJbUFqL2ZBUjVIT3k1S0xDcFJQREpZTmdMeEFuVEVlWWErWlVad1FUZ285RXBBUUVwS1FFQktBYTFkZjJnNkxFOVpPajlZTGlkUlFuNnNWbHV0ZWxpUGV6MHpkLzU4Tmt0TE5qWkxTd0FBQWdCYi9qc0cxZ1dQQUVFQWFBQW5RQklTQlFWSFVoTnlZV1JrQzExZEhSMDhLVEFBTHpNdk14RXpMek16RVRNck1qSVJNekF4UVE0REl5SXVBamNUTXdNR0hnSXpNajRDTnpZdUF5TWlEZ01IQmg0RE16STJOeGNHQmlNaUpDWW1BamMyRWpZMkpETXlIZ0lTQVFZZUFqTXlQZ0kzRnc0REl5SXVBamMrQkRNeUZoY0hKaVlqSWc0Q0JzOEVNbVdlYjBOb1JSNEhNNjh5QmhFa0xoYzJWajBqQXdjb1g1ZlNoM3pTcG5kREJnY3RacHZOZlZpMVBpWkcwbDJiL3YvRmdqNEhCMWFYMFFFR21wejh2MzQ2L0FBSERTVThLQms1T0RJUlRCZEdXR1kzU1hGSUhna0tPVlZzZlVKeGdEbGVIVjFBT1YxR0x3SUlZY0NlWGk5WWZVMENOLzNKUFU0cUVEMXRrRlNNN2JxQlJFeVB4L2VObFBTOGdVSW9JWVV0TEZDYjRBRWlyNlFCSWV5clhGS2MzdjdwL3YxRWFrZ21HVGhkUlZkT2QwOHBRSFdqWldld2ltRXpRQ3Q0R3pBMGFab0FBQU1BRVFBQUJUOEZzQUFFQUFrQURRQXBRQlFFQndjS0RRMEdBQXNNREFJSUF3SnlCUUlJY2dBck1pc3lFVGt2TXprNU14RXpNaEV6TURGQkFTRUJNd0VCSnpNQkFSVWhOUUxML2szKytRSWtxQUZhL2t3VHFRSW0vdVA4NkFUdSt4SUZzUHBRQk83QytsQUNITWZIQUFBQ0FKUUFBQVNsQmJBQUdRQXdBQ2xBRkJrcEpnSW5Kd0VtSmc0TUR3SnlIQnNiRGdoeUFDc3lFVE1yTWhFNUx6TXpFVE1TT1Rrd01VRWhKeUV5TmpZMU5DWW1JeU1SSXhFaE1oNENGUlFHQmdjRElUY2hNalkyTlRRbUppTWhOeUVYSGdJVkZBWUdBcmIralFJQlJGSnpQRGh6V2ZQN0FlNTR2WVZGVnFoOVcvNUpjUUZHVlhJNU1teFgvdVlDQVc4NWVKdE1lZUlDa3JjeFhVSkpYQ3I3R0FXd0xtR1VabHFWWGduOUw4YzVaVVJIYVRtM1JRUmluRnFMdkdFQUFRQm0vK3dFNndYRUFDY0FGVUFLR1JVUUEzSWtBQVVKY2dBcnpETXJ6RE13TVVFekRnSWpJaTRDTlRVMFBnSXpNaFlXRnlNdUFpTWlEZ0lWRlJRZUFqTXlOallEOFBvTWlQYXdoOWlhVVZPYzI0bXU4SVVQK2dwRGdtbFdnRllySjFGK1dHdUZSUUhhajkrQVliUCtuWG1kL3JWZ2dPS1NYb1pIUUh5MWRIdHVzNEJHUklNQUFBSUFsQUFBQk5JRnNBQWFBQjRBRzBBTkFnRUJIUTRQRHg0Q2NoMEljZ0FyS3pJUk14RXpFVE13TVdFaE55RXlOalkxTlRRdUFpTWhOU0V5SGdJVkZSUU9BZ0VSSXhFQ08vN0pBZ0UxaDdkZE5XZVZZZjY2QVVhUjhLOWVYckR6L3I3N3gzYmNtRTkydG54QXlHRzIvcDFObmY2MVlRV3crbEFGc0FBRUFKUUFBQVJOQmJBQUF3QUhBQXNBRHdBZFFBNExDZ29HRHc0SEFuSURBZ1lJY2dBck1qSXJNaklST1M4ek1ERmxGU0UxRXhFakVRRVZJVFVCRlNFMUJFMzgrMGY3QTFUOVlBTUEvUURIeDhjRTZmcFFCYkQ5b01URUFtREl5QUFEQUpRQUFBUTBCYkFBQXdBSEFBc0FHMEFOQndZR0Fnb0xDd01DY2dJSWNnQXJLeklSTXhFNUx6TXdNVUVSSXhFQkZTRTFBUlVoTlFHUCt3Tk4vVzRDNWYwYkJiRDZVQVd3L1lQSHh3Sjl5TWdBQVFCci8rd0U4Z1hFQUNzQUcwQU5LeW9xQlJrVkVBTnlKQVVKY2dBck1pdk1NeEk1THpNd01VRVJEZ0lqSWlZbUFqVTFOQkkyTmpNeUZoWVhJeTRDSXlJT0FoVVZGQjRDTXpJMk5qY1JJVFVFOGgrRDJLR0o1S1ZhVTV6ZGpMUHJnQkgyREVWL1pWZUVWeXd6WVl4WVZtNUJFdjdSQXVqOTFDbGhSbDIwQVFPbVphVUJBN1JkZDlLSFRIaEZRb0M0ZG1kNHVvQkJIU2tUQVNHN0FBQURBSlFBQUFVWEJiQUFBd0FIQUFzQUcwQU5DUVlJQXdJQ0JnY0NjZ1lJY2dBckt4RTVMek15RVRNd01VRVZJVFVURVNNUklSRWpFUVJXL1BzKyt3U0QrZ05ReDhjQ1lQcFFCYkQ2VUFXd0FBRUFwUUFBQWFBRnNBQURBQXkxQUFKeUFRaHlBQ3NyTURGQkVTTVJBYUQ3QmJENlVBV3dBQUFCQUMvLzdBUGxCYkFBRXdBVFFBa1FEQXdIQ1hJQ0FuSUFLeXN5THpJd01VRVJNeEVVQmdZaklpWW1OVE1VRmhZek1qWTJBdXY2Zk5hSWk5ZDYvRGRsUkVGbE9nRzFBL3Y4QlpITWJGN0NsVlpwTHp0ekFBTUFsQUFBQlJZRnNBQURBQWtBRFFBY1FCQUdCd3NGREFnR0FnUURBbklLQWdoeUFDc3lLeklTRnprd01VRVJJeEVoQVFFbkV3RVRBVGNCQVkvN0JHYjlzdjZ3TFBBQnFDVCtJYTBDWEFXdytsQUZzUDFEL3B6NUFTZ0NBUHBRQXJLci9LTUFBQUlBbEFBQUJDUUZzQUFEQUFjQUZVQUtBd0lDQmdjQ2NnWUljZ0FyS3hFekVUTXdNV1VWSVRVVEVTTVJCQ1Q5SlViN3g4ZkhCT242VUFXd0FBTUFsQUFBQm1vRnNBQUdBQXNBRUFBYlFBMENCdzRGQ3doeURBUUFCd0p5QUNzeU1qSXJNaklST1RBeFV6TUJBVE1CSXdFekV4RWpBVE1SSXhINjRBR2xBYVRnL2RTeS9XL1ZKZm9GQU5iN0JiRDduUVJqK2xBRnNQdzAvaHdGc1BwUUFlUUFBQUVBbEFBQUJSY0ZzQUFKQUJkQUN3TUlCUWtIQW5JQ0JRaHlBQ3N5S3pJU09Ua3dNVUVSSXdFUkl4RXpBUkVGRi92OWMvdjdBbzhGc1BwUUJCUDc3UVd3KytzRUZRQUNBR1gvN0FVZEJjUUFGUUFyQUJOQUNTY0dIQkVEY2dZSmNnQXJLeklSTXpBeFFSVVVBZ1lHSXlJbUpnSTFOVFFTTmpZek1oWVdFZ2MxTkM0Q0l5SU9BaFVWRkI0Q016SStBZ1VkVnAvZWg0YmRvbGxZb2QyR2g5NmdWL3N2VzRSVFU0SmJNREJkZ2xOVWdsb3ZBd0JRcGY3NnVHRmh1QUVHcFZDbEFRVzVZV0c1L3Z2MVVucTdmMEZCZjd0NlVucThnVUZCZ2J3QUFBRUFsQUFBQk04RnNBQVhBQmRBQ3dJQkFRNE1Ed0p5RGdoeUFDc3JNaEU1THpNd01VRWhOU0V5TmpZMU5DWW1JeUVSSXhFaE1oWVdGUlFHQmdLOS9vVUJlMk42T1RsNlkvN1Mrd0lwcWUxOGZPMENIOGRBY1VsRmVVcjdHQVd3ZDlHR2pjcHNBQU1BWVA4REJSa0Z4QUFEQUJrQUx3QVpRQXdnRlFOeUFDc3JBd29KY2dJQUx5c3lNaEV6S3pJd01XVUJCd0VCRlJRQ0JnWWpJaVltQWpVMU5CSTJOak15RmhZU0J6VTBMZ0lqSWc0Q0ZSVVVIZ0l6TWo0Q0E1Y0JmNlAraUFJZVZxRGVoNGJkb2xsWW9kMkdoOStnVi93dlc0TlVVb0pjTURCZGcxSlVnbG92d3Y3UWp3RXRBdEJRcGY3NnVHRmh1QUVHcFZDbEFRVzVZV0c1L3Z2MVVucTdmMEZCZjd0NlVucThnVUZCZ2J3QUFnQ1VBQUFFM3dXd0FCZ0FIUUFqUUJJYkdna0REQXdMQ3dBY0dSZ0ljaFlBQW5JQUt6SXJNaklTT1M4ekVoYzVNREZUSVRJV0ZoVVVCZ1lIQnlFbklUSTJOalUwSmlZaklSRWpJUUVsQVJXVUFnT202bjFRa21WTS9qRUNBVnRhZUQwN2VsNysrUHNEUC82cUFRY0JXd1d3Wk1PUGJhWnhIeVhIUUc5R1RIRTkreGdDamdIOWZnMEFBUUJMLyt3RWpnWEVBRGtBSDBBUENpWVBOakV4S3dseUdCUVVEd055QUNzeUx6SXJNaTh5RVRrNU1ERkJOQzRDSnk0RE5UUStBak15RmhZVkl6UW1KaU1pQmdZVkZCNENGeDRERlJRT0FpTWlMZ0kxTXhRZUFqTXlOallEa2h0RWUxOW9yNEpJUzR1K2M2THJmL2s5ZTE1WmRqb21UblpRZWJSNFBFcUp2M1ZweTZaaSt6RllkVU5ZZHp3QmR5MUdPamNkSUU5cGlWcFprbXM3ZU1wNlNHOUFObHc2S1VNNU1oY2tWMjZMV0Z5VFp6YzRjNjEwUjJRL0hqSmFBQUlBTFFBQUJMUUZzQUFEQUFjQUZVQUtBQU1EQmdjQ2NnRUljZ0FyS3pJeUVUTXdNVUVSSXhFaEZTRTFBdXY1QXNMN2VRV3crbEFGc01qSUFBRUFnUC9zQkw4RnNBQVZBQk5BQ1FFUkJnc0NjZ1lKY2dBckt4RXpNakF4UVRNUkZBWUdJeUltSmpVUk14RVVGaFl6TWpZMk5RUEYrcEQzbUozMmpmcEloRnBhZzBnRnNQd3pwdUJ4Y2VDbUE4MzhNMm1IUUVDSGFRQUFBZ0FSQUFBRkd3V3dBQVFBQ1FBWFFBc0FCZ2dCQ1FKeUF3Z0ljZ0FyTWlzeUVqazVNREZCQVNFQkl3RUJFeU1CQW9jQmZ3RVYvZmE3L3M4QmZEUzgvZmdCQ2dTbStsQUZzUHRhL3ZZRnNBQUVBQzhBQUFibUJiQUFCUUFLQUE4QUZRQWJRQTBRREFFS0FuSVRFZzRFQ1FoeUFDc3lNakl5S3pJeU1qQXhRUUV6QXdFakF4TVRJd0VCRXpNQkl3TUJFeU1CQXdJQkFTS1lFZjdLbnE3ckZhaityd1RWNlByK3I2ajNBUjhxbnY3UEVBRkhCR24rM2Z0ekJiRDdvUDZ3QmJEN293UmQrbEFGc1B1VS9yd0VqUUVqQUFBQkFDWUFBQVRwQmJBQUN3QWFRQTRIQkFvQkJBa0RDd0p5QmdrSWNnQXJNaXN5RWhjNU1ERkJBUUVoQVFFaEFRRWhBUUVCVXdFMUFUVUJJZjVJQWNQKzNQN0Qvc1ArMndIRS9rY0ZzUDN0QWhQOUwvMGhBaDM5NHdMZkF0RUFBUUFJQUFBRTJRV3dBQWdBRjBBTUJBY0JBd1lEQ0FKeUJnaHlBQ3NyTWhJWE9UQXhRUUVCSVFFUkl4RUJBUjhCVWdGU0FSYitGdjMrRmdXdy9Va0N0L3hvL2VnQ0dBT1lBQUFEQUZBQUFBU09CYkFBQXdBSkFBMEFIMEFQQkF3TUNRMENjZ2NEQXdJQ0JnaHlBQ3N5RVRNUk15c3lNaEV6TURGbEZTRTFBUUVqTlFFekl4VWhOUVNPL0EwRDNQeUJxQU9DcFYzOFBNZkh4d1JPK3V1ZkJSSEl5QUFCQUlYK3VnSWFCbzhBQndBT3RBTUdBZ2NHQUM4dk14RXpNREZCRlNNUk14VWhFUUlhcEtUK2F3YVB1dm1ndXdmVkFBRUFFditEQTJNRnNBQURBQW15QVFJQUFDOC9NREZGQVRNQkFuTDlvUEVDWUgwR0xmblRBQUFCQUF2K3VnR2lCbzhBQndBT3RBVUVBQUVFQUM4dk14RXpNREZUTlNFUklUVXpFUXNCbC81cHBnWFZ1dmdydXdaZ0FBSUFOZ0xaQXpnRnNBQUVBQWtBRmtBSkNBY0hCZ0FGQWdNQ0FEL05Nams1TXhFek1ERkJBeU1CTXhNREp6TUJBY0hCeWdFcmpJSEJMSTBCS2dUTC9nNEMxLzBwQWZMbC9Ta0FBUUFDLzBRRGtnQUFBQU1BQ0xFQ0F3QXZNekF4WVJVaE5RT1MvSEM4dkFBQkFEZ0Uwd0lNQmdBQUF3QUtzZ09BQWdBdkdzMHdNVUVUSXdFQlNjUEovdlVHQVA3VEFTMEFBZ0JXLyt3RCtRUk9BQnNBT2dBcFFCVXJMQjRuSGpvNkR5Y3hDM0lZR1FweUNRVVBCM0lBS3pJeUt6SXJNaEk1THpNUkVqazVNREZsRVRRbUppTWlCZ1lWSXpRK0FqTXlGaFlWRVJRV0Z4VWpKaVlURnlNaURnSVZGQllXTXpJMk5qY1hEZ01qSWlZbU5UUStBak1DM2lwVlFEdFdNUEErZHFSbWVyMXRGUlQzRVJNakFxMURaa1FpS0UwM1NtOUFBazRNT2wyQlZHcW1Ya0YvdUhiWkFnUTZWQzRvUkN0QWVGNDJVcVY4L2g5S2RTc1FKM2tCOHBVWk1FUXJLMGNvUFZrb2F5bGVWVFpWa1Z4V2hWb3ZBQU1BZmYvc0JEQUdBQUFFQUJvQUx3QVpRQTRoRmdkeUt3c0xjZ1FLY2dBQWNnQXJLeXN5S3pJd01WTXpFUWNqQVJVVURnSWpJaTRDSnpVK0F6TXlIZ0lITlRRdUFpTWlEZ0lIRlI0Q016SStBbjN4RjlvRHN6VnJuV2RsbG1VK0RRMCtaWlZrYUo5cU5mRVlOMTFGUUZ3K0l3WUpPMnhWUTF3M0dRWUErdWZuQWljVmVNbVVVVXlNd25WRGRzR05URkNUeW84VlNZRmlPU3hNWkRxMVMzMUxObUdDQUFBQkFFNy83QVB4QkU0QUp3QVpRQXdkR1JrVUIzSUVCQUFKQzNJQUt6SXlMeXN5THpJd01XVXlOalkzTXc0Q0l5SXVBalUxTkQ0Q016SVdGaGNqTGdJaklnNENGUlVVSGdJQ05qdGZPd1BqQW5qR2VIeTRlajA5ZXJoN2dzUnhBdU1ETlY5Q1NXQTJGeFkzWUt3dlZEZHByR1ZWbHNSd0kzREZsbFZudDNrOFlUbzdaWDFESTBOK1l6c0FBQU1BVVAvc0JBSUdBQUFFQUJvQUx3QVpRQTBoQkFRV0MzSXJDd2R5QVFCeUFDc3JNaXN5THpJd01XVVJNeEVqQVRVMFBnSXpNaDRDRnhVT0F5TWlMZ0kzRlJRZUFqTXlOalkzTlM0REl5SU9BZ01ROHR2OUtUcHVubU5pbEdnK0RRMCthSlZqWXAxdU92RWJPbDFCVW1vOUN3WWxQbHMrUWx3N0hPQUZJUG9BQWhFVmU4dVRUMHlOdzNkRGRNQ01URktVeVlzVlNvQmhOMGg3VExVN1prMHJPR0tDQUFBQkFGSC83QVFLQkU0QUt3QWZRQkJuRXdFR0V4SVNBQmtMQjNJa0FBdHlBQ3N5S3pJUk9TOHpYMTB3TVVVaUxnSTFOVFErQWpNeUhnSVZGU0UxSVRVdUFpTWlEZ0lWRlJRZUFqTXlOamNYRGdJQ1dYakJoMGhLaExScGRLNXpPZnk4QWxZQ0wyQlFQRjArSVNkTWJFVlhpREovSTNDaEZFK093RzhvZjg2VFRrNk53blZuclJOQmNrWXpZSWRVS0VkNVdqTkdRSHN6WFRvQUFnQXJBQUFDMVFZVkFCRUFGUUFWUUFzVUZRWnlEUVlCY2dFS2NnQXJLeklyTWpBeFlTTVJORFkyTXpJV0Z3Y21KaU1pQmdZVkZ4VWhOUUhDOFZ1cWRDUkdJUVlVTHhzM1R5bmYvWW9Fb25tbFZRa0p1Z1VFS1U0NWFMQ3dBQU1BVXY1VkJBd0VUZ0FUQUNrQVBnQWJRQTh3SlF0eU9ob0hjZzRHRDNJQUJuSUFLeXN5S3pJck1qQXhRVE1SRkFZR0l5SW1KaWMzRmhZek1qWTJOUkVCTlRRK0FqTXlIZ0lYRlE0REl5SXVBamNWRkI0Q016STJOamMxTGdNaklnNENBekhiZk42U1BwZU5MM0U2akUxVGRVRDlOenh3b0dWcGxXUTVEZzArWnBWbFk1OXhQUEVkUFY5QlZXMDdEQVlsUGw1QVFXQTlIZ1E2KytTU3pHc2tUMENPUlVBOWRsVURMUDdNRlh2TGswOU1qY04zUTNUQWpFeFNsTW1MRlVxQVlUZEllMHkxTzJaTkt6aGlnZ0FDQUhvQUFBUDZCZ0FBQXdBYUFCZEFEQkVDRmdvSGNnTUFjZ0lLY2dBckt5c3lFVE13TVVFUkl4RVRKejRETXpJZUFoVVJJeEUwSmlZaklnNENBV3J3eGs0QlBXK2NYMUNCWGpIeUxWWStRV05DSVFZQStnQUdBUHhGQVhDK2pVMHNZWnR2L1VrQ3VVNWNLVFJhZGdBQUFnQjhBQUFCa0FYV0FBTUFEd0FRdHdjTkF3WnlBZ3B5QUNzcnpqSXdNVUVSSXhFRE5EWXpNaFlWRkFZaklpWUJmdklRU1VGQVNrcEFRVWtFT3Z2R0JEb0JIRGRKU1RjMlNFZ0FBQUwvcS81TEFZY0YxZ0FSQUIwQUUwQUpEUVlQY2hVYkFBWnlBQ3ZPTWlzeU1ERlRNeEVVQmdZaklpWW5OeFlXTXpJMk5qVURORFl6TWhZVkZBWWpJaWFJOGt5VWF5QkZId0VWTHhVck9oNFZTa0JCU1VsQlFFb0VPdnRvYjVsUENRaThCQVVlUURVRnREZEpTVGMyU0VnQUFBTUFmUUFBQkRjR0FBQURBQWtBRFFBZFFCRUdCd3NGREFnR0Fna0dBd0J5Q2dJS2NnQXJNaXMvRWhjNU1ERkJFU01SQ1FJbk53RVRBVGNCQVcveUE1TCtLZjcrUDhNQk1qVCtvWmdCM2dZQStnQUdBUDQ2L2ZiKytNenhBVlg3eGdIOHFmMWJBQUVBakFBQUFYNEdBQUFEQUF5MUF3QnlBZ3B5QUNzck1ERkJFU01SQVg3eUJnRDZBQVlBQUFBREFId0FBQVo4QkU0QUJBQWJBRElBSVVBUktSSUNMaUlpRndzREJuSUxCM0lDQ25JQUt5c3JFVE16RVRNUk16TXdNVUVSSXhFekF5YzBQZ0l6TWg0Q0ZSRWpFVFFtSmlNaURnSUZCelErQWpNeUhnSVZFU01STkNZbUl5SU9BZ0Z0OGVNWlVqaHNvV3BLZTFzeDhTOVhQRVJmUEJ3Q24zRTNhNTVtVTROY01QSXZWanc0VlRvZEExNzhvZ1E2L2dzQmNMNk5UU3Rja0diOUx3SzhUMW9uTkZwMkF4bGlyNFZNTFdDWmJQMUVBcjFTV2lNcFNWNEFBZ0I2QUFBRCtnUk9BQVFBR3dBWlFBMFNBaGNMQXdaeUN3ZHlBZ3B5QUNzckt4RXpFVE13TVVFUkl4RXpBeWMrQXpNeUhnSVZFU01STkNZbUl5SU9BZ0ZyOGVNZFRnRS9jWjVoVG45Yk1QSXRWVDgrWWtNa0ExUDhyUVE2L2dzQmM4Q0tTeXRnbVcvOVJRSzhUbHNuTkZwMkFBQUNBRTcvN0FROEJFNEFGUUFyQUJDM0hCRUxjaWNHQjNJQUt6SXJNakF4VXpVMFBnSXpNaDRDRlJVVURnSWpJaTRDTnhVVUhnSXpNajRDTlRVMExnSWpJZzRDVGtTQnUzWjN1NEpFUklLNmRuZTdna1R4SGtCa1JVTmpRQjhmUVdORVJHTkFIZ0lSRjNYSmxWTlRsY2wxRjNYSWxWTlRsY2lNRjBtQ1lqZzRZb0pKRjBpQlpEazVaSUVBQUFNQWZmNWdCQzhFVGdBRUFCb0FMd0FaUUE0aEZnZHlLd3NMY2dNR2NnSU9jZ0FyS3lzeUt6SXdNVUVSSXhFekFSVVVEZ0lqSWk0Q0p6VStBek15SGdJSE5UUXVBaU1pRGdJSEZSNENNekkrQWdGdThkNEMxRGRybkdabGwyZy9EUTAvYUpaa1pwNXNOdkVjUEYxQlFGdytJZ2NNT210VVFWdzdIQU5xK3ZZRjJ2M3RGWGJKbFZKTGlydHdVWGZDakV4UGtjdVJGVXVCWWpjclRHVTd3a2g0UnpoamdnQURBRkQrWUFRQ0JFNEFCQUFhQUM4QUdVQU9JUllMY2lzTEIzSUVEbklEQm5JQUt5c3JNaXN5TURGQkVUY3pFUUUxTkQ0Q016SWVBaGNWRGdNaklpNENOeFVVSGdJek1qWTJOelV1QXlNaURnSUREeHpYL0U0NGJwNW5aSlZuUGc0TlBtaVdaV1dlYlRueEd6eGNRVlZ0T3d3SEpEOWRRRUZlT3h6K1lBVUQxL29tQTdJVmU4dVNUMHlOd25kRGRNQ01UVktWeVlzVlNvRmpPRXA5VExVN1owMHJPR09DQUFBQ0FIMEFBQUs1QkU0QUJBQVdBQmxBRFFZSkNRVVVCM0lEQm5JQ0NuSUFLeXNyTWpJUk16QXhRUkVqRVRNbEJ5WW1JeUlPQWdjSE5ENENNeklXQVc3eDVnRldBaFl6R1Q1ZVB5SUROeWhSZTFFV013TnMvSlFFT2dmZ0JBUWpRVnc1QkdhdWhFb0lBQUVBU2Yvc0E4Y0VUZ0ExQUJkQUN4c0FEaklwQzNJWERnZHlBQ3N5S3pJUk9Ua3dNVUUwSmlZbkxnTTFORDRDTXpJV0ZoVWpOQ1ltSXlJR0JoVVVIZ0lYSGdJVkZBNENJeUltSmpVekhnSXpNalkyQXRza1pXSldqMlk0T215YllJakRhUEVyVmtFK1VTY1ZNbGRDZkxOZ1BYU2haSlBNYWVrRVEyVTJRVmd1QVNVa096QVVFelZNYUVSQ2RsbzBXNXRoSzBzdkp6NGxHeXNqSGc0YVVYOWhTSGRYTUdtbFdVTlBJeU05QUFJQUN2L3NBblVGUXdBREFCVUFFMEFKQ2hFTGNnUUNBd1p5QUNzeUx5c3lNREZCRlNFMUV6TVJGQllXTXpJMk54Y0dCaU1pSmlZMUFtejluckR4SFRRakdTNE9BUjVQTTFPQVNBUTZzTEFCQ2Z2b01qVVNCZ080Q1E0N2htOEFBQUlBZC8vc0Eva0VPZ0FFQUJzQUZVQUtBUkVHY2hnREF3c0xjZ0FyTWk4eUt6SXdNV1VSTXhFakV6Y1VEZ0lqSWk0Q05SRXpFUlFlQWpNeU5qWURCL0xrRkZFd1pKeHRUNFJmTlBFY01FQWtaM2N6L3dNNys4WUI0QUp0dDRkTExtQ2Fhd0s3L1VNN1R6QVVVWW9BQWdBV0FBQUQzd1E2QUFRQUNRQVhRQXNBQmdnQkNRWnlBd2dLY2dBck1pc3lFams1TURGbEFUTUJJd01CRnlNQkFkd0JDZnIraUp5NkFRNE5uUDZHdndONys4WUVPdnlCdXdRNkFBUUFJd0FBQmNnRU9nQUZBQW9BRHdBVkFDUkFGQWNMQUJFREZBWUpFQXdCQ2daeUVnNEVDUXB5QUNzeU1qSXJNakl5RWhjNU1ERmxFek1IQXlNREV4Y2pBUUVUTXdFakF4TVhJd01uQWFMNm1pcjhpbmZERUpyKzJ3UDl2ZXYrM0pxNjl4K0sveXJ3QTByOC9NSUVPdnl5N0FRNi9Md0RSUHZHQkRyOHdQb0RQL3NBQUFFQUh3QUFBK29FT2dBTEFCcEFEZ2NFQ2dFRUNRTUxCbklHQ1FweUFDc3lLeklTRnprd01VRVRFeUVCQVNFREF5RUJBUUUwenRJQkNmNjRBVlgrOTl6Yy92WUJWUDY1QkRyK21RRm4vZTM5MlFGMi9vb0NKd0lUQUFJQURQNUxBOTRFT2dBVEFCZ0FHVUFORnhZVkF3Z0NHQVp5RHdnUGNnQXJNaXN5RWhjNU1ERmxBU0VCRGdNaklpWW5KeFlXTXpJMk5qY0RBUmNIQVFHMkFTWUJBdjVPRHpCTmNsRWdPeG9CQ2gwSlBGQXpFbGdCQVN1bi9uZDJBOFQ3SVNoZVZUVUxCcmdCQWgxQU5nU1cvTmIrS3dSVEFBTUFVUUFBQThFRU9nQURBQWtBRFFBY1FBMEVEQXdKRFFaeUJ3TURCZ0lTQUQ4ek14RXpLekl5RVRNd01XVVZJVFVCQVNNMUFUTWpGU0UxQThIODJnTVEvVUtjQXJxZ1hmMFB3TURBQXVUOFhKc0RuOERBQUFBQ0FEaitsQUtPQmowQUVRQWxBQmxBQ2gwSkNnb2NIQklUQVFBQUx6SXZNemt2TXhJNU9UQXhRUmNHQmhVVkZBWUdJelV5TmpVMU5EWTJFd2N1QWpVMU5DWW1JelV5RmhZVkZSUVdGZ0plTUdkTlZiaVZaMXBCbkxnd2lKeEJLRlZFbGJoVklVOEdQWWtqc25QT1pLUmdpbmhtem1tM2kva0hpaWVMdDJuTVJXTTNpMkdqWnN4TmcyQUFBQUVBci83eUFWQUZzQUFEQUFteUFBSUJBQzgvTURGQkVTTVJBVkNoQmJENVFnYStBQUlBSFA2VUFuTUdQUUFUQUNZQUcwQUxIZ3NLQ2g4ZkFSVVVBQUVBTHpNdk14STVMek1TT1Rrd01WTTNIZ0lWRlJRV0ZqTVZJaVltTlRVMEppWURKejRDTlRVME5qWXpGU0lHRlJVVUJnWWNNSW1jUUNoV1JKUzZWU0JQRlRCRlRpRlZ1cFJtWEVDY0JiU0pKb3UzYWM1RFpEZUVYYUZremsyRVlQajNpaGhnZzAzTVpxQmRoSGxtekdtM2l3QUJBSFVCaGdUWEF5OEFId0FiUUFzTUFBQVdCb0FjQmhBUUJnQXZNeThSTXhvUXpUSXZNakF4UVRjVURnSWpJaVluSmlZaklnWUdGU00wUGdJek1oWVhGaFl6TWpZMkJCNjVNRmQ1U0ZTQlNpNVFMaTFBSkw0d1YzaElWSWRHTUU0c0xVUW1BeEVCVnBGcU8wTkVMQzh2VmpsWGoyYzRSa0V1TGpOYUFBQUNBSVgra3dHWkJFMEFBd0FQQUF5ekFRY05BQUF2TDkzT01ERlRFek1URXhRR0l5SW1OVFEyTXpJV2tobk9HUWRKUVVCS1NrQkJTZjZUQkFQNy9RVTZOa3RMTmpaS1NnQURBR2YvQ3dRTEJTWUFBd0FIQUM4QUpVQVNBZ0VsSlNFREhBZHlCd1FJQ0F3R0VRMXlBQ3ZOekRNU09Ua3J6Y3d6RWprNU1ERkJFU01SRXhFakVUY3lOalkzTXc0Q0l5SXVBalUxTkQ0Q016SVdGaGNqTGdJaklnNENGUlVVSGdJQ3JiKy92MkU3WURvRDVBTjV4WGg4dVhvOFBIdTRlNExFY1FQa0F6VmZRa2xnTmhjV04yQUZKdjdmQVNIN0JmN2dBU0NCTDFRM2FheGxWWmJFY0NOd3haWlZaN2Q1UEdFNk8yVjlReU5EZm1NN0FBQURBRjhBQUFSNkJjUUFBd0FIQUNJQUlVQVFCZ1VGQVI4V0JYSU1EUTBDQWdFTWNnQXJNaEV6RVRNck1oRTVMek13TVdFaE5TRUJJVFVoSlJNV0JnY25QZ0kxQXpRMk5qTXlGaFlWSXpRbUppTWlCZ1lFZXZ2cEJCYit1LzByQXRYK3ZCY0JSMUcySVNNTkZYUEtnNHZDWnZJNFd6VTJWekxIQVpIRDlQMlVZSmNyUmdoRlhTa0NkWXJEYUdhMWVFdFpLRFpxQUFBR0FGei81UVZPQlBFQUV3QW5BQ3NBTHdBekFEY0FEclVQR1FVakRYSUFLekl2TXpBeFFSUWVBak15UGdJMU5DNENJeUlPQWdjMFBnSXpNaDRDRlJRT0FpTWlMZ0lCQnljM0FRY25Od0VuTnhjQkp6Y1hBVEJCYzVkWFY1ZHpRRUJ6bDFkWGwzTkJzVjJqMkh0NzJLUmNYS1RZZTN2WW8xMEV6OHFJeXZ6bXlvYktBNkRLaU1yNzJNcUd5Z0pnWGFSNlJVVjZwRjFlb25wRlJYcWlYb1hrcWw5ZnF1U0ZoZVNyWUdDcjVBS0t6b3pPKzhQT2k4MytwODZMelFNbXpvdk9BQVVBRFFBQUJESUZzQUFEQUFjQURBQVJBQlVBTFVBV0N4QVFCZ2NTRlJVSURnTURBZ0lSRkF4eUNSRUVjZ0FyTWlzU09TOHpFams1TWhFenpqSXpFVE13TVVFVklUVUJGU0UxSlFFaEFTTURBUWNqQVFFUkl4RUR5L3ljQTJUOG5BRjVBVWdCQ3Y1ZWt1UUJTeUtTL2x3Q2pQb0M0NVdWL3QyVWxQRUMvL3lVQTJ6OCtXVURiUDFPL1FJQy9nQUNBSW4rOGdGcUJiQUFBd0FIQUEyMEFRSUdCd0lBUDkzZXpUQXhRU01STXhFUkl4RUJhdUhoNGY3eUF4a0RwZjBLQXZZQUFnQmMvaVlFakFYRkFDOEFZUUFlUUJOVFB3QUJCU3RkTlRFd0R5RU1UMFFkRkJGeUFDc3lMek1YT1RBeFpUVXlOalkxTkM0Q0p5NEROVFErQWpNeUZoWVZJelFtSmlNaUJnWVZGQjRDRng0REZSUU9BZ01WSWdZR0ZSUWVBaGNlQXhVVURnSWpJaTRDTlRjVUhnSXpNalkyTlRRdUFpY3VBelUwUGdJQ3IweHFPQ0JLZlYxdnJuby9SNFc1ZEozamV2RTlkVmRjZERnY1JIeGdjckI2UUVSOXNQQkxZUzRiUm41aGNiQjRQMGVGdUhOanZwcGI4VFJWYURSVWRUMGZTSHRjYjdCNlFVRjRxbnlDTUZVMUtqODFNaDBlUjJDSFhsV0tZalZrdjRwQ2EwQXhVVElyUHpFdEdoNUlYNFpjVUh4VUxBTHZoREJUTlMxQk5DOGNIMGRmaDE1WWlsOHhLMkdrZUFKRVd6UVhMazh6S0R3ek1Cc2VSMkNHWEU1N1ZTNEFBQUlBWXdUbEF5d0Z6UUFMQUJjQURyUURDUWtQRlFBdk16TXZNekF4VXpRMk16SVdGUlFHSXlJbUpUUTJNeklXRlJRR0l5SW1ZMFE0T1VSRU9UaEVBYzlFT1RoRlJUZzVSQVZaTVVORE1UQkRReTh4UTBNeE1FTkRBQU1BV3YvckJlVUZ4QUFmQURNQVJ3QWZRQTRkQkFRbEpVTVVEUTB2THprRGNnQXJNaEV6RVRNdk14RXpFVE13TVVFekZBWWpJaVltTlRVME5qWXpNaFlWSXpRbUl5SUdCaFVWRkJZV016STJKUlFlQWpNeVBnSTFOQzRDSXlJT0FnYzBFallrTXpJRUZoSVZGQUlHQkNNaUpDWUNBOG1XczVwcm0xVlZtMnVhdEpaZFcwRlpMUzFaUVZ0Yy9RWmNvOWQ3ZXRlaVhGeWoxbnA3MTZOY2RXN0VBUUdUa3dFQncyNXV3LzcvazVQKy84UnVBbFdkbldLdWMzVnpybUtkbldKVlFYUktka3QwUVZUbmhlV3JYMStyNW9TRjVLcGZYNnJraFo4QkVNdHhjY3YrOEorZi92RE5jbkxOQVJBQUFBSUFqZ0swQXc0RnhRQVhBREVBR3JVeEdob05GaXE0QVFDeUNBMERBRDh6R3R6RUVqa3ZNekF4UVJFMEppWWpJZ1lWSnpRMk5qTXlGaFlWRVJRV0Z5TW1FeGNqSWdZR0ZSUVdNekkyTmpVWERnSWpJaVkxTkRZMk13Sk1HallwUTAybFRZdGRWNEZKREE2cUdDa0JrenROSlRzL0tsVTZFZzgrWTBSNGdVdVhjZ05lQVZRcU94NDBNdzVFYVR3K2Vseit4akZZTEVrQmNuRWZOQjhxTVNZNEdIRWdSQ3g3WjBwbk52Ly9BRmNBaVFPRkE2Y0VKZ0dTNi80QUJ3R1NBVlgvL2dBQ0FIOEJkd08vQXlJQUF3QUhBQksyQmdjREJnSUNBd0F2TXhFekVqa3ZNREZCRlNFMUJSRWpFUU8vL01BRFFMNERJcVdsUy82Z0FXQUFCQUJaLytzRjVRWEVBQjRBTHdCREFGY0FOVUFiSHhzWUlBUUNBZ0VCRHlrTkRUVTFVd3dQRDBsVEUzSS9TUU55QUNzeUt4STVMek1STXhFekx6TVNPWDB2TXhJWE9UQXhRU01uTXo0Q05UUW1KaU1qRVNNUklUSVdGaFVVQmdZSElnWWpEZ0lqTnpJV0ZSVVVGaGNWSXlZbU5UVTBKaVVVSGdJek1qNENOVFF1QWlNaURnSUhOQkkySkRNeUJCWVNGUlFDQmdRaklpUW1BZ000MkFMQkxFd3VJVTlEaFpFQkZtT1JUekpoUmdNSEF4RUpDUjRWbkhJSENwVUtBMEw5VVZ1azEzcDcxcUpjWEtMV2UzclhwRnQyYnNRQkFaT1RBUUhEYjIvRC92K1RrLzcveEc0Q2pvSUJHelVuTVRvWi9URURVRGx6VmpaVVBSTU9DZ2tDWTRkb05pVkRGeEFhWUJZMFNVUkxoZVdyWDErcjVvU0Y1S3BmWDZya2haOEJFTXR4Y2N2KzhKK2YvdkROY25MTkFSQUFBUUNkQlJBRFJBV3FBQU1BQ0xFREFnQXZNekF4UVJVaE5RTkUvVmtGcXBxYUFBSUFnUU94QW80RnhRQVBBQnNBRDdVVERNQVpCQU1BUHpNYXpESXdNVk0wTmpZek1oWVdGUlFHQmlNaUppWTNGQll6TWpZMU5DWWpJZ2FCU0hsSFNIWkhSM1pJUjNsSWgwdzFOVWhJTlRWTUJMbEpla2xKZWtsSmVVWkdlVWsyU1VnM09FcEtBQU1BWEFBQkEvQUUvUUFEQUFjQUN3QVN0d3NDQXdNRUNoSnlBQ3N2T1M4ek1qQXhRUlVoTlFFUkl4RUJGU0UxQS9EOGJBSTgxUUlML0swRGc4VEVBWHI4UEFQRSs4WEJ3UUFBQVFBOUFwc0NzQVc3QUJ3QUU3RWNBcmdCQUxNTEV3TnlBQ3N5R3N3eU1ERkJGU0UxQVQ0Q05UUW1JeUlHRlNNME5qWXpNaFlXRlJRR0JnY0hBckQ5bndFZktURVhPRFZBUDdaSmgxNWZoVWN3VzBPTkF5eVJlZ0VKSlQ4MEVpczNSek5KZWtnNmJFdzNYVnczZGdBQ0FEY0NrQUtwQmJzQUdRQXpBQ3hBREJ3WUFBQWFHaEFzS1Nra0VMZ0JBTFVMQ3dnUUEzSUFLekl5THhvUXpESXZNaEU1THpNU09Ua3dNVUV6TWpZMk5UUW1JeUlHRlNNME5qWXpNaFlXRlJRR0JpTWpGVFV6TWhZV0ZSUUdCaU1pSmlZMU14UVdNekkyTlRRbUppTUJEbGNyT0IwM1FERkR0bENHVDF1S1RVZDlWSFYxWFlSRlZKRmFTNDFidDBnOVFUOGpRQ3NFYkJrc0hpUTNLU1ZIWkRRelpFbzVXREVwVWl0WVJrcG9OakZxVmljNE9Tc21MaFVBQUFFQWJ3VFRBa0lHQUFBREFBcXlBWUFBQUM4YXpUQXhVeE1oQVcvREFSRCs4QVRUQVMzKzB3QURBSlArWUFRa0JEb0FCQUFhQUI0QUdVQU1IUVVBRmdzVGNnTVNjaHdBQUM4eUt5c3lFVGt2TURGQk14RWpKemMzRkE0Q0l5SW1KaWNETXhRZUFqTXlQZ0lCTXhFakF6THkzeE1qWHl0WmlGMUtkbFljSDRrZU5ra3JUMmM3R2YwKzhQQUVPdnZHK3YwQ2NzQ09UaXRjU2dFUlduSTlHREZaZVFLTCtpWUFBQUVBU1FBQUExUUZzQUFNQUE2MkF3c0NjZ0FTY2dBcks4MHdNV0VqRVNNaUppWTFORFkyTXlFRFZNbFduOXR5Y3R1ZkFSOENDSG5VaDRiVWVnQUFBUUNRQWtZQnFnTk9BQXNBQ0xFRENRQXZNekF4VXpRMk16SVdGUlFHSXlJbWtFdENRa3RMUWtKTEFzazRUVTA0T0V0TEFBRUFiUDQvQWNvQUJBQVRBQkcyQ3dxQUV3SUFFZ0EvTWpJYXpESXdNWGN6QnhZV0ZSUU9BaU1uTWpZMk5UUW1KaWVMc3d3NVh5cFRlMUVISno0bElFTTFCRGdLVFZZelVqc2dpQk1vSUI4aUVnUUFBQUVBZ2dLYkFnRUZyd0FHQUFxekJnSnlBUUF2S3pBeFFSRWpFUWMxSlFJQnRjb0JiQVd2L093Q1FER1BkZ0FDQUhrQ3N3TW9CY1VBRVFBakFCQzJGdzRnQlFOeURnQXZLeklSTXpBeFV6VTBOall6TWhZV0ZSVVVCZ1lqSWlZbU54VVVGaFl6TWpZMk5UVTBKaVlqSWdZR2VWV1phbXFhVTFPWmFXdWFWYWdtVUR3N1RTY29UVHc3VHlZRUUxQm5vRnRib0dkUVo1OWFXcCszVUR4Z056ZGdQRkE3WURjNFhnRC8vd0JlQUlzRGx3T29CQ1lCa3drQUFBY0Jrd0Y5QUFELy93QmZBQUFGZlFXc0JDY0Ixdi9kQXBnQUp3R1VBUndBQ0FBSEFqQUN2Z0FBLy84QVV3QUFCY1VGcndRbkFaUUE4UUFJQUNjQjF2L1JBcHNBQndIVkF4VUFBUC8vQUdZQUFBWUFCYnNFSndHVUFhOEFDQUFuQWpBRFFRQUFBQWNDTHdBdkFwc0FBZ0JHL240RHB3Uk9BQ0VBTFFBWVFBb0FBQ1VsS3hBUkVRMFdBQzh6TXk4L015OHpMekF4UVRNVUJnWUhEZ0lWRkJZV016STJOamN6RGdJaklpWW1OVFEyTmpjK0FoTVVCaU1pSmpVME5qTXlGZ0dZM3gxRFBDeEtMU3hUT3pSWU53SHhBWFREZW9qQlpraHhQeVVuRHZkSlFFRktTa0ZBU1FLV1hYMWxQQ3hRWFQ0L1Zpc3BWRUIrclZoYnJIdGFrbjQ3STBoVUFXbzJTMHMyTmtwS0FBYi8vQUFBQjA0RnNBQUVBQWdBREFBUUFCUUFHQUF4UUJnQUZ4Y0lCeFFUQnhNSEV3SU5BeGdDY2d3TEN3NENDSElBS3pJeUVUTXJNaklST1Rrdkx4RXpFVE15RVRNd01VRUJJUUV6RXhVaE5RRVZJVFVURXlNREFSVWhOUUVWSVRVRDJQMUQvdUVEUEptQS9SVUY2UDBqR0QzeFBRTW4vWW9DeC8wa0JSajY2QVd3L0hyUzB2Nlh3Y0VFNy9wUUJiRDlvY0hCQWwvQndRQUNBRXdBeXdQckJIY0FBd0FIQUF5ekJBWUNBQUF2THpNeU1ERjNKd0VYQXdFM0FkNlNBd3VTa1B6MWtnTUx5NUVERzVMODVnTWFrdnpsQUFBREFHbi9vZ1VpQmUwQUF3QWJBRE1BRjBBTEFRQXZDaU1XQTNJS0NYSUFLeXN5RVRNeU16QXhRUUVqQVJNVkZBSUdCaU1pTGdNMU5UUVNOall6TWg0REJ6VTBMZ01qSWc0Q0ZSVVVIZ016TWo0Q0JSRDhNcWNEMExkV29ONkhhN21XYXpsWW9kMkdiTHFWYVRuOEhqdFdiME5UZ2xzd0h6eFhia0pVZ2xvdkJlMzV0UVpML1JOUXBmNzZ1R0UvZDYzZGhGQ2xBUVc1WVQ5NHJOM1VVbUdmZVZJcVFYKzdlbEppbjNwVEtrR0J2QUFBQWdDVkFBQUVnUVd3QUFNQUdRQWRRQTRQRGc0REdRUUVBd0FDY2dNSWNnQXJLeEU1THpNUk9TOHpNREZUTXhFakV5RXlGaFlWRkFZR0l5RTFJVEkyTmpVMEppWWpJNVh4OFdBQmlxZmtkM2ZrcC83ZUFTSmlkemMzZDJMNkJiRDZVQVNZY2NaL2ZzWnh2MFp3UGtCeFNBQUFBUUNLLyt3RW5nWVZBRGtBR1VBTkl4czJDQUlLY2dnQmNoc0xjZ0FyS3lzUk14RXpNREZCRVNNUk5ENENNeklXRmhVVURnSVZGQjRERlJRR0JpTWlKaVluTnhZV016STJOalUwTGdNMU5ENENOVFFtSmlNaUJnWUJldkErYzZCa2NiVnJJeTRqUVdCZ1FXYThnVFJ5WHhzeElYeEhRRlFxUVdCaFFTVXdKUzFPTWp0VkxnUlIrNjhFVTNDb2NEcE9uSGROWWtsTE56QlJUMXR6VEhTZlVSSWRFYjhVTENsSExqVlNURmR5VDBCWlMxTTZPRThxTlhNQUF3QkkvK3NHaGdSUEFCUUFNZ0JlQURkQUhGY3pNeklYUmtVVUpRQURLUmRGRjBVUEh5a0xja3crUGdVUEIzSUFLekl5RVRNck1oSTVPUzh2RWhjNUVUTVJNeklSTXpBeFpSRTBKaVlqSWdZR0ZTYzBQZ0l6TWhZV0ZSRURGeU1pQmdZVkZCWVdNekkrQWpjWERnSWpJaVltTlRRK0FqTUJJaTRDTlRVMFBnSVhNaDRDRlJVaE5TRTFOQ1ltSXlJT0FoVVZGQjRDTXpJMk54Y09BZ0xoS2xNN1FGNHk4VUYycG1aK3VtakFBZWROYVRVb1VqOHdZMVF6QVhVYWM3UjllNnBZUFhpeGRRTERmTDZEUWtKK3NXNXJwM003L004Q1FpcGNTMEJkUFI0aVIzRlBiNG8zUngxdG03Y0NFajVZTHlwSUt4SkllRm94VjY2Qy9oTUJxYVF3VGk0cVF5WWtPRDhjbFRCa1ExS1daRTk3VlMzOWFFNk93WE01ZDhXUVR3RkRnTFJ3aktjZFJHdy9OVjUrU1RsSGVWdzBQUitoRnprckFBSUFhUC9zQkVJR0xBQTBBRGdBR1VBTE5pQVdGZ0VxREF0eU9BRUFMek1yTWhJNUx6TXpNREZUTnhZRUZoSVZGUlFPQWlNaUxnSTFORDRDTXpJV0ZoY25OQzRDSXlJT0FoVVVIZ0l6TWo0Q05UVTBMZ0lsQVNjQjlVdXJBUnJPYjBxRnRXeHR0SU5HUDNlbFpuRzJiUVJYSVVKa1EwQmlReUlpUVY0OFBGMUFJV0twMkFKdi9kbExBaWdGYmI4bG92SCt5YnhWZjlTYVUwdUdzV1p5dVlWSVo2bGtBaDFCT0NNc1UzWktPV3BVTVRoa2gwOWxwL3UwZFREK2xXc0JhZ0FBQXdCREFKWUVPZ1RKQUFNQUR3QWJBQk8zR1JNQ0J3MERBaElBUDkzR01oREdNakF4UVJVaE5RRTBOak15RmhVVUJpTWlKaEUwTmpNeUZoVVVCaU1pSmdRNi9Ba0Jja3RDUWt0TFFrSkxTMEpDUzB0Q1Frc0RHTTdPQVM0NFMwczRPRXBLL1FvNFMwczROMHRMQUFBREFFNy9kUVE4QkwwQUF3QVpBQzhBR1VBTUlBRUJGUXR5S3dBQUNnZHlBQ3N5THpJck1pOHlNREZCQVNNQkFUVTBQZ0l6TWg0Q0ZSVVVEZ0lqSWk0Q054VVVIZ0l6TWo0Q05UVTBMZ0lqSWc0Q0E5ejlhWThDbC8wQlJJRzdkbmU3Z2tSRWdycDJkN3VDUlBFZVFHUkZRMk5BSHg5QlkwUkVZMEFlQkwzNnVBVkkvVlFYZGNtVlUxT1Z5WFVYZGNpVlUxT1Z5SXdYU1lKaU9EaGlna2tYU0lGa09UbGtnUUFEQUlIK1lBUTBCZ0FBQXdBWkFDOEFHMEFQS3dvZ0ZRZHlDZ3R5QXdCeUFnNXlBQ3NyS3lzeUVUTXdNVUVSSXhFQkZSUU9BaU1pTGdJbk5UNERNekllQWdjMU5DNENJeUlPQWdjVkhnTXpNajRDQVhQeUE3TTNhNXhtWlpkb1B3ME5QMmlWWkdlZWF6ZnhIRHhkUVVCY1BpTUdDQ1U5VzBCQlhEc2NCZ0Q0WUFlZy9DY1Zkc21WVWt1S3UzQlJkOEtNVEUrUnk1RVZTNEZpTnl0TVpUdkNOMTlJS1RoamdnQUVBRkQvN0FTdEJnQUFCQUFhQUM4QU13QWRRQThoQkFRV0MzSXpNaXNMQjNJQkFISUFLeXN5empJck1pOHlNREZsRVRNUkl3RTFORDRDTXpJZUFoY1ZEZ01qSWk0Q054VVVIZ0l6TWpZMk56VXVBeU1pRGdJQkZTRTFBeER5Mi8wcE9tNmVZMktVYUQ0TkRUNW9sV05pblc0NjhSczZYVUZTYWowTEJpVStXejVDWERzY0EyejlZT0FGSVBvQUFoRVZlOHVUVDB5TnczZERkTUNNVEZLVXlZc1ZTb0JoTjBoN1RMVTdaazByT0dLQ0F3R25wd0FBQkFBZkFBQUZuQVd3QUFNQUJ3QUxBQThBSDBBUEF3S0FCd1lHQ2d3TEFuSU5DZ2h5QUNzeUt6SVJPUzh6R3N3eU1ERkJGU0UxQVJVaE5STVJJeEVoRVNNUkJaejZnd1E4L1BzKytnU0Qrd1NybnA3K3BjZkhBbUQ2VUFXdytsQUZzQUFCQUpBQUFBR0JCRG9BQXdBTXRRTUdjZ0lLY2dBckt6QXhRUkVqRVFHQjhRUTYrOFlFT2dBQUF3Q05BQUFFYlFRNkFBTUFDUUFOQUI5QUR3d0hCd3NHQmdJSkF3WnlDZ0lLY2dBck1pc3lFVGt2TXpNUk16QXhRUkVqRVNFQklTY3pBUk1CTndFQmZ2RUR4djMvL3ZRZnN3Rk5FLzZadndIYkJEcjd4Z1E2L1hYYUFiSDd4Z0hZaWYyZkFBTUFJQUFBQkRZRnNBQURBQWNBQ3dBYlFBMENDZ0FIQmdZS0N3SnlDZ2h5QUNzckVUTVJNeklSTXpBeFFSVUZOUUVWSVRVVEVTTVJBbzc5a2dRVy9TVkYrZ091a0x1US9kVEh4d1RwK2xBRnNBQUNBQ0FBQUFJeUJnQUFBd0FIQUJOQUNRSUdBQWNBY2dZS2NnQXJLeklSTXpBeFFSVUZOUUVSSXhFQ012M3VBWHp4QTdDUXU1QURDL29BQmdBQUFBTUFrUDVMQlF3RnNBQURBQWNBR1FBZFFBNFZEZ1lIQndNSWNna0ZCQUFDY2dBck1qSXlLeklSTXk4ek1ERlRNeEVqRXpjQkJ4RXpFUlFHQmlNaUppYzNGaFl6TWpZMk5aRDcrMHV3QXpleCsxZWhjU00rSkE0Vk54Y3FPaDRGc1BwUUJUdDErc1YxQmJENkdIdXFXQWNLd3dZR0tsRTZBQUlBZmY1TEJBWUVUZ0FFQUNvQUdVQU9IQlVQY2lZTEIzSURCbklDQ25JQUt5c3JNaXN5TURGQkVTTVJNd01ITkQ0Q016SWVBaFVSRkFZR0l5SW1KemNXRmpNeU5qWTFFVFF1QWlNaURnSUJidkhlSnlrNWFwWmVVWU5kTTFhZWJ5TStJZzRUT3hZcU9SOGFNMGt2U1d0RklnTlQvSzBFT3Y0SEFuTEJqazR3WjZWei9TTjVxRllIQ3NFR0JpaFBPZ0xiUTEwMkdUUmFlQUFGQUdYLzZ3YzBCY1VBSXdBbkFDc0FMd0F6QUROQUdpOHVMaVl5S0RNQ2Npa25KZ2h5RlJJU0Zoa0pCQWNIQXdBREFEOHlNaEV6UHpNekVUTXJNaklyTWpJUk9TOHpNREZCTWhZWEZTWW1JeUlPQWhVUkZCNENNekkyTnhVR0JpTWlMZ0kxRVRRK0FnRVZJVFVURVNNUkFSVWhOUUVWSVRVQ3FrMlZRMEtVVDA1K1dpOHdXbjlPVHBSQlE1Tk5ndGFjVTFPYjFRVU0vUHRIK3dOVS9XQURBUDBBQmNVTkNNWU1Eek5tbG1UK3ptU1haalFQRE1ZSERsZWYyNFFCTUlUYm4xZjdBc2ZIQk9uNlVBV3cvYURFeEFKZ3lNZ0FBd0JaLytzRzlnUlBBQ29BUUFCV0FDZEFFeVFBQUVjOEV4SVNQRklaQ3dzeEIzSThDM0lBS3lzeUVUTXlFVGt2TXhFek14RXpNREZGSWk0Q05UVTBQZ0lYTWg0Q0ZSVWhOU0UxTkNZbUl5SU9BaFVWRkI0Q016STJOeGNHQmdFMU5ENENNekllQWhVVkZBNENJeUl1QWpjVkZCNENNekkrQWpVMU5DNENJeUlPQWdWTmRMbURSMGVBcm1kd3FYRTYvTlVDUFMxZVN6aFlQQjRpUm1oR2JZdzRURGZIK254RGdMaDJlTG1BUWtKL3VYZDN1WUJEOGgwK1lVVkVZVDRkSFQ1aVJVUmhQUjBWVVpERGN5cDN4NVJSQVVhQnNXMk9yUnBDYXo4M1lvQkpLa1o4WHpZMko1c3dVZ0ltRjNYSmxWTlRsY2wxRjNYSmxWTlRsY21NRjBtQ1l6ZzRZNEpKRjBpQlpEazVaSUVBQUFFQWlRQUFBcFFHRlFBUkFBNjJEUVlCY2dFS2NnQXJLekl3TVdFakVUUTJOak15RmhjSEppWWpJZ1lHRlFGNjhWbW1jeWhLSnhnVExSODFTQ1lFb25tbFZRd0p0UVVGS2xBNUFBQUJBRlgvN0FVakJjUUFMQUFiUUEwUEFBWUpDUUFhSWdOeUFBbHlBQ3NyTWhFNUx6TVJNekF4UlNJdUFqVTFJUlVoRlJRZUFqTXlQZ0kxTlRRdUFpTWlCZ2NuUGdJek1oNENGUlVVRGdJQ3ZaZm5tMDhFSVB6YUoxYU1aVmlJWFM4d1pxVjNoTHc3TUJoNXRHK2svS3RZWDZmZkZGMngrWnFQd3lGUGltYzdTb090WW50anJZTkxNaGpDRFN3aFpiZjlsM3VYL0xkakFBSC8zdjVMQXRRR0ZRQW5BQ2xBRlJRQ0FoVW5CbklmSWlJZUd3RnlDdzRPQ2djUGNnQXJNaklSTXlzeU1oRXpLekl5RVRNd01VRVZJeEVVQmdZaklpWW5OeFlXTXpJMk5qVVJJelV6TlRRMk5qTXlGaGNISmlZaklnWUdGUlVDaWM5VG0yd2tQQ0lQRHo4UUt6Z2JwcVpacG5RblN5WVhGREVmTkVja0JEcXcvREYzcEZVSENyc0ZCeWxQT0FQUHNHaDVwVlVNQ2JnRkJTaFBPV2dBQXdCYi8rd0Zyd1lyQUFrQUlRQTVBQjFBRGdVR0Jpa3BBQUFjQTNJMUVBbHlBQ3N5S3pJdk1oRTVFVE13TVVFekZBWUdJelV5TmpZVEZSUUNCZ1lqSWk0RE5UVTBFalkyTXpJZUF3YzFOQzRESXlJT0FoVVZGQjRETXpJK0FnVDZ0VkduZ0V0Vkl4cFdvTjZIYXJxV2F6bFlvZDZGYkx1VWFqajhIanRXYjBOU2dsd3dIenhYYjBGVWcxb3VCaXVIdm1PUlEzMzlMRkNsL3ZxNFlUOTNyZDJFVUtVQkJibGhQM2lzM2RSU1laOTVVaXBCZjd0NlVtS2ZlbE1xUVlHOEFBQURBRTMvN0FTM0JLZ0FDUUFmQURVQUZVQUtKaHNMY2pFQUFCQUhjZ0FyTWk4eUt6SXdNVUV6RkFZR0l6VXlOallCTlRRK0FqTXlIZ0lWRlJRT0FpTWlMZ0kzRlJRZUFqTXlQZ0kxTlRRdUFpTWlEZ0lFRnFGRGxYdExUQnY4TjBTQnUzWjN2SUZFUklHNmQzZTdna1R4SGtGalJVUmlQeUFmUUdORlJHSkJIZ1NvYzZaWWR6NXcvYlVYZGNtVlUxT1Z5WFVYZGNpVlUxT1Z5SXdYU1lKaU9EaGlna2tYU0lGa09UbGtnUUFDQUlELzdBWTZCZ0lBQ1FBZkFCbEFEQVVLQ2dBQUZRSnlHeEFKY2dBck1pc3lMeklSTXpBeFFUTVVCZ1lqTlRJMk5pVXpFUlFHQmlNaUppWTFFVE1SRkJZV016STJOalVGaTY5UHVKNXBhaVArT3ZxUTk1aWQ5bzM2U0lSYVdvTklCZ0tSeUdpU1JvZ1AvRE9tNEhGeDRLWUR6Znd6YVlkQVFJZHBBQUFEQUhmLzdBVWtCSlVBQ1FBT0FDVUFIVUFPQlFzTEFBQWJCbklpRGc0VkMzSUFLekl2TWlzeUx6SVJNekF4UVRNVUJnWWpOekkyTmdFUk14RWpFemNVRGdJaklpNENOUkV6RVJRZUFqTXlOallFaHA1Qm5Zc0JYbFVYL29IeTVCUlJNR1NjYlUrRVh6VHhIREJBSkdkM013U1ZkSjVRZlRGbC9Ma0RPL3ZHQWVBQ2JiZUhTeTVnbW1zQ3UvMURPMDh3RkZHS0FBQUIvNjcrU3dHU0JEb0FFUUFPdGcwR0QzSUJCbklBS3lzeU1ERlRNeEVVQmdZaklpWW5OeFlXTXpJMk5qV2g4VldmYmlROElnNFRPaFVxT2g4RU92dUllYWhXQndxN0JnWXJVam9BQVFCWC8rd0Q5Z1JRQUNvQUdVQU1FUlFVQUJrTEMzSWtBQWR5QUNzeUt6SVNPUzh6TURGQk1oNENGUlVVRGdJbklpNENOVFVoRlNFVkZCWVdNekkrQWpVMU5DNENJeUlHQnljMk5nSUFkTG1EUmthQXJtZHdxWEU2QXl2OXd5MWZTamhYUEI4alJXaEdiSXc1VERqSEJGQlJrTU56S25iSWxGRUJSb0d4Ylk2dUdVRnNRRGhoZ1VrcVJueGZOallubXpCU0FBRUFrQVRoQTBRR0FBQUlBQlMzQndVRkJBRURnQWdBTHhyTk1qa3lFVE13TVVFQkZTTW5CeU0xQVFJdkFSWERtWm0vQVJFR0FQN3NDNTJkRFFFU0FBQUJBRzRFNEFNMUJnQUFDQUFTdGdFR2dBY0VBZ0FBTHpJeU1ock5PVEF4UVJjM014VUJJd0UxQVR1V2xjLys2SmorNlFZQW5aMEwvdXNCRmdvQS8vOEFuUVVRQTBRRnFnWUdBSEFBQUFBQkFIVUV6UUwvQmVjQURnQVF0UUVCQ1lBTUJRQXZNeHJNTWk4d01VRXpGQVlHSXlJbU5UTVVGak15TmdKTXMwK1JaSmV2czBOUVQwSUY1MU4vU0oxOU9GVlZBQUVBZ1FUa0FZWUYxUUFMQUFteUF3a1FBRDh6TURGVE5EWXpNaFlWRkFZaklpYUJSVDA5UmtZOVBVVUZYRE5HUmpNMFJFUUFBQUlBZUFTTkFpMEdKUUFOQUJrQURyUVhCSUFSQ3dBdk14ck1NakF4VXpRMk5qTXlGaFVVQmdZaklpWTNGQll6TWpZMU5DWWpJZ1o0T21JL1hYMDVZejVlZldzK01qSTlQVEl5UGdWWE9WMDRlVlU1WERWMFZpeERRaTB1UTBNQUFBRUFLZjVVQVo4QU9nQVZBQTYwQ0ErQUFRQUFMeklhekRJd01XVVhEZ0lWRkJZek1qWTNGd1lHSXlJbU5UUTJOZ0VXY3k1S0tTQW5IaXdQRnhsT1BGaDdMbWc2T2g0OVJTZ2VKeEVIaXc4ZFptSTBaVjBBQVFCM0JONERVd1h6QUJrQUowQVRBQUFCQVFvU1FBOGFTQklGZ0EwTkRnNFhCUUF2TXpNdk15OGFFTTByTWpJdk15OHdNVUVYRkFZR0l5SXVBaU1pQmhVbk5EWTJNekllQWpNeU5nTEFrenBrUHpGRU9Ec29KaldVT21RL0tVTTlRQ2NtTmdYekMwbHpRaHdrR3pndkNFaDBSQnNrSERvQUFnQkxCTkVEV0FYL0FBTUFCd0FPdEFFRmdBQUVBQzh6R3MweU1ERkJFek1CSVJNekF3R0w1T24rOWYzK3RPVGhCTkVCTHY3U0FTNyswZ0FBQWdDSi9tNEI4UCs5QUFzQUZ3QU90QThKZ0JVREFDOHpHc3d5TURGWE5EWXpNaFlWRkFZaklpWTNGQll6TWpZMU5DWWpJZ2FKYTB0SmFHaEpTMnRsTHlJZ0xDd2dJaS9zU1dCZ1NVcGNYVWtoTGkwaUl5NHVBQUg4a3dUVC9tY0dBQUFEQUFxeUE0QUNBQzhhelRBeFFSTWpBZjJqeE1uKzlRWUEvdE1CTFFBQi9XSUUwLzgxQmdBQUF3QUtzZ0dBQUFBdkdzMHdNVUVUSVFIOVlzTUJFUDd3Qk5NQkxmN1RBUC8vL0hRRTN2OVFCZk1FQndDbCsvMEFBQUFCL1RvRTV2NmJCbjBBRkFBUXRSUUNBSUFMREFBdk14ck1Nakl3TVVFakp6NENOVFF1QWlNM01oNENGUlFHQi80Q3N3a3pQaDBYS2pnaEIxV0JWeTFnT1FUbWp3TVBIUmdVSEJFSGVSc3lSaXhJUkFnQUFBTDhDQVRrL3pBRjdnQURBQWNBRHJRSEE0QUVBQUF2TWhyTk1qQXhRU01CSVFFakF6UCtBTS8rMXdFQUFpakQ5dllFNUFFSy92WUJDZ0FCL1I3K2wvNHgvNG9BQ3dBSXNRTUpBQzh6TURGRk5EWXpNaFlWRkFZaklpYjlIa2xBUUVwS1FFQko4RFJHUmpRelJrWUFBUUROQk93QjdBWkFBQU1BQ3JJQWdBRUFMeHJOTURGVEV6TUR6VUhlandUc0FWVCtyQUFEQUc0RTVRTzNCckFBQXdBUEFCc0FHVUFLRXhrWkRRR0FBQUFIRFFBdk16TXZHczBSTXhFek1ERkJFek1EQlRRMk16SVdGUlFHSXlJbUpUUTJNeklXRlJRR0l5SW1BY01zNDRMK0hrTTVPRVZGT0RsREFrOUVPVGxFUkRrNVJBV0hBU24rMXk0eFEwTXhNRU5ETHpGRFF6RXdRMFAvL3dDUUFrWUJxZ05PQmdZQWVBQUFBQUVBbVFBQUJEY0ZzQUFGQUE2MkFnVUNjZ1FJY2dBckt6SXdNVUVWSVJFakVRUTMvVno2QmJESSt4Z0ZzQUFEQUJvQUFBV21CYkFBQkFBSkFBMEFHMEFOQmdJSEF3SnlEUXdNQlFJU2NnQXJNaklSTXlzeUVqa3dNVUVCSVFFekFRRTNNd0VuRlNFMUF5ajkrUDc2QWxPUkFhTCtCeXlTQWtIZi9Cb0ZML3JSQmJENlVBVTNlZnBReDhmSEFBQURBRnovN0FVVkJjUUFBd0FiQURNQUcwQU5Md29EQWdJS0l4WURjZ29KY2dBckt6SVJPUzh6RVRNd01VRVZJVFVGRlJRQ0JnWWpJaTRETlRVMEVqWTJNekllQXdjMU5DNERJeUlPQWhVVkZCNERNekkrQWdPZi9rWURNRmFnM29kcnVaWnJPVmloM1lac3VwVnFPUHdlUEZWdlExS0NYREFmUEZkdVFsU0NXaThET2IrL09WQ2wvdnE0WVQ5M3JkMkVVS1VCQmJsaFAzaXMzZFJTWVo5NVVpcEJmN3Q2VW1LZmVsTXFRWUc4QUFJQUlBQUFCUThGc0FBRUFBa0FGMEFMQmdBQ0J3TUNjZ1VDQ0hJQUt6SXJNaEk1T1RBeFFRRWhBVE1CQVNjekFRTEEvbTcrOGdIN3NBRTMvbXdLc0FIN0JNLzdNUVd3K2xBRTA5MzZVQUFBQXdCcUFBQUVMZ1d3QUFNQUJ3QUxBQnRBRFFFQUJRUUVBQWdKQW5JQUNISUFLeXN5RVRrdk14RXpNREZ6TlNFVkFUVWhGUUUxSVJWcUE4VDhvd0x4L0xjRGxNZkhBb2ZDd2dKaHlNZ0FBUUNaQUFBRkZBV3dBQWNBRTBBSkFnWUVCd0p5QmdoeUFDc3JNaEV6TURGQkVTTVJJUkVqRVFVVSt2MTUrZ1d3K2xBRTZQc1lCYkFBQUFNQVJ3QUFCRXNGc0FBREFBY0FFQUFoUUJBT0JnWUhCdzhDY2d3REF3SUNDd2h5QUNzeUVUTVJNeXN5RVRNUk16QXhaUlVoTlFFVklUVUJGUUVqTlFFQk5UTUVTL3hjQTRIOGdnSngvZUcxQWN2K05iWEh4OGNFNmNqSS9UY1UvUzJTQWtzQ1FaSUFBd0JNQUFBRnRnV3dBQk1BSndBckFDRkFFQlFWRlFFQUtRaHlIeDRlQ2dzb0FuSUFLODB5TWhFeks4MHlNaEV6TURGbEl5SXVBalUwTmlRek16SWVBaFVVQmdRbE16STJOalUwTGdJakl5SUdCaFVVSGdJQkVTTVJBMmJLaGRtZFZaVUJDYS9QZzltZFZaVCs5djZFekhDWVR5MVhmMUxSYlpsUkxWaUNBVGY3cTA2UnkzdW4vWXhQbGN4K3BmaUswVkdaYkZPQldpOVRuVzlRZjFndEJEVDZVQVd3QUFJQVJnQUFCV1FGc0FBWkFCMEFHVUFNRkFjSERSd0ljaDBCRFFKeUFDc3lNaXNST1JFek1ERkJNeEVVQWdRakl5SXVBalVSTXhFVUhnSXpNekkyTmpVQkVTTVJCR2o4blA3cHRsYUczNkZaK3pOZ2hsTlZjcUJVL3VyNkJiRCtFcjMrK1lsT2x0eU5BZTcrRW1DU1lqSlpyWUFCN3ZwUUJiQUFBd0JzQUFBRTJ3WEVBQzBBTVFBMUFDVkFFaWdTRWk4cEtUUVJFVE11TWhKeUJoMERjZ0FyTWlzeU1qSVJNek1STXpJUk16QXhRVFUwTGdJaklnNENGUlVVSGdJWEZTNEROVFUwUGdJek1oNENGUlVVRGdJSE5UNERBelVoRlNFMUlSVUR6U2xPYjBWRWJVMHBJMEJhTldhNGoxUlNsODkrZjlHWFVsS090bVEwVno0ajdBSHUrNmdCOWdMdlptaWVhelkyYTU1b1puNitobEVQancxM3ZlMkRaSXJscDF0YnArV0taSUx0dlhjT2p4QlJocjc5anNqSXlNZ0FBQU1BVnYvckJIc0VUZ0FXQUN3QVFRQWFRQTB1QmpRN094MFNDM0lvQmdkeUFDc3lLekl5RVRNL01ERlROVFErQWpNeUhnTVhGUTRESXlJdUFqY1ZGQjRDTXpJK0FqYzFMZ01qSWc0Q0FUTVJGQjRDTXpJMk54Y0dCaU1pTGdJbkVWWTNhNTVuU25kYVB5a0tERGxnakY1bG5XdzM4aG80WEVGQVdqMG1Dd2trUGx3L1FWdzZHZ0hrendzVkhCRUlEZ1VZSURzaE5WYy9KUVVCK3hWKzBwcFVNbCtFcFdBK2RMK01URTZPd1lnVlIzcGNNekpZZFVKSFJuNWdOenhwaXdIYy9Ra3JOaUVOQkFHeEVnc2pTM1pTQWpBQUFnQ1gvblVFYmdYRUFCd0FPZ0FlUUE0MUFDWW5KeHdjTUIwREV3a0xjZ0FyTWo4ek9TOHpFams1THpBeFFUTXlGaFlWRkFZR0l5SXVBalUzRkJZV016STJOalUwSmlZakl4TXlGaFlWRkFZR0l5TTFNekkyTmpVMEppWWpJZ1lHRlJFakVUUTJOZ0lialpES2JIREtpRTZmaFZCYlQ0NWVVSEU3Tm1sTmRVNkp5bTlyd1lGalNrMWRLeTVjUno5bk8vR0Ewd010WkxGMWpNUm5MbCtXYUJvL2FUNUJjRWRJZEVZREgyQ3dlV09pWUlRMVlrRTNYenc2YVVUNldBV29lNzl0QUFNQUh2NWZBL1VFT2dBREFBZ0FEUUFaUUE0SURBTUVDZ1VCQlEwR2NnRU9jZ0FyS3pJU0Z6a3dNV1VSSXhFM0V6TUJJd01CRnlNQkFvSHhiL3Y3L29HaXZBRUVKS0wrZ0czOThnSU9sUU00KzhZRU92ekUvZ1E2QUFJQVVmL3NCRG9HSVFBc0FFSUFHVUFORkNnK0F3UXpIZ3R5Q3dRQmNnQXJNaXN5RWhjNU1ERlRORFkyTXpJV0Z3Y21KaU1pQmdZVkZCNENGeDRDRlJVVURnSWpJaTRDTlRVME5qWTNKeTRDRXhVVUhnSXpNajRDTlRVMExnSW5JZzRDeldDeGUwOTJSZ0VxaDB3MlRpc1FLVXM4bHNobFJJRzVkWGU3Z1VOWmxGVUNQRmt2ZFI5QVlrUkNZVDhmSkVSZU9rSmpRU0FFN0dDS1N4a2F2UTRuSERVakVpZ3BLeFEwbjltS0ZYUERrbEZRajhGeEZuUytnQlVGSEU5bS9YRVdTSDloT0RoaGYwZ1dPbkZpUXd3NFlYNEFBZ0JpLyt3RUVnUk5BQjhBUHdBZlFBOEFJVDQrQXdNV05Tc0hjZ3dXQzNJQUt6SXJNaEk1THpNU09Ua3dNVUV6RlNNaUJnWVZGQjRDTXpJMk5qVXpGQTRDSXlJdUFqVTBQZ0lGSXlJdUFqVTBQZ0l6TWg0Q0ZTTTBKaVlqSWdZR0ZSUWVBak16QWczcXdrZG1OUjA3VmpoSmFEandVSWFsVldldmdrZzZicDRCVCtwYmwydzZRbnFxWjF1aGZFZnhPV0U5U1Y0c0dUSlBOY0lDUzNjZlF6WWVOeXNaTEVncFdJRlRLQ3hVZVV4RWFVZ2xSaXBMWWpkTmRVOHBMRlY0VENwQUpDcEJKQjR6SlJRQUFnQlovbjBEeFFXd0FDZ0FMQUFWUUFrVkFpd3NLU2tBQW5JQUt6SXZNeEV6THpBeFFUTVZBUTRDRlJRZUFoY1hIZ0lWRkFZR0J5YytBalUwSmlZbkp5NEROVFEyTmpjQklSVWhBejJJL3BwSFlUSVZLRDRwWlZGOFJrSmVMM3dnS2hVWk9qQlJXWDVRSlR0NlhmNnlBd3Y4OVFXd2pmNVNWSk9hWGk5RE1COE1IeFl4VjFJM2Vtc2hZaUk5TnhrWEpoNE1GaGRCV0haTVhjSE9id0hZdmdBQUFnQjkvbUVFQmdST0FBUUFIQUFYUUF3WUN3TUdjZ0lLY2dzSGNoRUFMeXNyS3hFek1ERkJFU01STXdNSE5ENENNekllQWhVUkl4RTBMZ0lqSWc0Q0FXN3gzaHhHTzIrZFlsR0RYVFB5R2pOSkwwWm5ReUFEVS95dEJEcitCd0p5d1k1T0tsK2RjL3VzQkZJOVZETVhORng0QUFBREFIYi83QVF3QmNRQUdRQW5BRFlBSFVBUURTaHFNQ0JxTURBTkFCcHFBQTBMY2dBckx5c1NPUzhyS3pBeFFUSWVBeFVWRkE0REl5SXVBelUxTkQ0REZ5SU9BaFVWSVRVMExnTURNajRETlRVaEZSUWVBd0pTVjVOMlV5c3JVbldUVjFhVGRWUXNMRk4wazFZNFdEd2ZBZGdVSmpwTExDNUxPQ2NUL2lnVUtEbExCY1F3WkpmUGhOZUR6NXBsTWpKbG1zK0QxNFRQbDJRd3Z6Tm5tbWMwTkZLRVkwRWgrNmNpUTJXRlV5NHVVNFZsUXlJQUFBRUFvLy8wQWw0RU9nQVJBQTYyQmcwTGNnQUdjZ0FyS3pJd01WTXpBeFFXRmpNeU5qY1ZCZ1lqSWlZbU5hUHlBUjAwSXhrdUR4NVBNMU9BU0FRNi9Qb3pOUk1IQTdjS0RqeUZjQUFDQUJYLzdnUk5CZndBQkFBbUFCNUFFQUFiQkFNRUFpQUZBSElQRmhZQ0NuSUFLekl2TXlzeUVoYzVNREZCQVNFQkZ3RXlIZ0lYQVI0Q016STJNeGNHQmlNaUppWW5BUU11QWlNaUJnY25OallDSWY3Ny92a0JuS2IrdlRkVlB5d1BBYVFOSFNVWkNSTUlBeEV3SFVsblJ4Mys0SE1PSXk4ZkN4ME9CQmxQQXZEOUVBUlNDQUd5R0MxQktQdktIeTBZQWIwRUJpbGVUd01HQVJFa0toTUJBYklIQ1FBQUFnQm4vbllEMmdYRUFCNEFSZ0FaUUFzZkVROFBJU0V6QlJzRGNnQXJNaTg1THpNU09Ua3dNVUVITGdJaklnWUdGUlFlQWpNekZTTWlMZ0kxTkQ0Q016SVdGZ016RlNNaUJnWVZGQllXRnhjZUFnY1VCZ1lISno0Q05UUW1KaWNuTGdNMU5ENENBNjRqTGtsR0tGbHlOaDlCYUVtU2xuTzdoMGxEZjdCdU9tSlgwWktPY1o1VFNYZEhabGQ3UXdGQ1h5MkNIeTBZR3prdlBXaW9ka0JVbTlrRmw3a0xFUWdzU3k0b1JERWJqQzFVZFVwV2hsNHhDeFQ5eFlnL2YyRlBhMEFSR1JVMFdVczRlV29oWXlFNU9COFlJeHdNRVJ0Q1lKVndhSjlzTndBREFERC85QVRZQkRvQUF3QUhBQmtBR1VBTkRoVUxjZ1lLY2drSEFnTUdjZ0FyTWpJeUt5c3lNREZCRlNFMUlSRWpFU0V6RVJRV0ZqTXlOamNYQmdZaklpWW1OUVN6KzMwQm4vRUNQdklkTkNNWkxnNEJIazh6VTRCSkJEcTZ1dnZHQkRyOCtqTTFFd2NEdHdvT1BJVndBQUFCQUlEK1lBUXdCRTRBTHdBWFFBd2VLUVlSQzNJR0IzSUFEbklBS3lzckVUTXlNREZURVRRK0FqTXlIZ0lWRlJRT0FpTWlMZ0luSGdJekhnSXpNajRDTlRVMExnSWpJZzRDRlJHQVJYNnRhSFd3ZHp3MmE1dGxaSlJtUGcwRUxTMEJDenh0VkVGY09ob1pPVnRCUEZRMkdmNWdBK042d1loSVZKclNmaFZ6d1k1TlNZZTZjQUVjSEVoMVJUTmNla2NWVG90cFBEdGtmRDc4S3dBQkFGRCtpZ1BwQkU0QUxRQU90UnNKQlFBSGNnQXJ6RE12TURGQk1oWVdGU00wSmlZaklnNENGUlVVRmhZWEhnSVhGQVlHQnljK0FpYzBKaVluTGdJMU5UUStBZ0k0ZnNSdjVDMWJSVVJlT2hwQ2htUlpnVWNDUUY0dWZ5QXFGUUViT0N5WjBXdEFmTFlFVG1DMmdUeGlPVHRsZlVNaldvRlhIUmd6V1ZNM2Vta2hZaUk1Tmg4Y0pob0tKb2JPanlOd3haWlZBQUFEQUZELzdBUjlCRG9BR0FBdUFESUFFMEFKS2dZeUJuSWZGQXR5QUNzeUt6SXlNREZUTlRRK0FqTWVBaGNlQWhVVkZBNENJeUl1QWpjVkZCNENNekkrQWpVMU5DNENJeUlPQWdFVklUVlFRb0M0ZGhvdlFUZFZoMDlCZnJaMWRycUFRdkVkUG1KRVFsNDhIQnc4WDBKRVlqMGRBeno5d3dJUkYzSEJrRkFITWpjUUpJU3NaUlpvdVkxUlU1VEpqQmRKZ21JNU9XS0NTUmREZWw4Mk5sOTZBYy9Bd0FBQUFnQTgvK3dEN2dRNkFBTUFGUUFWUUFvRkNoRUNBd1p5RVF0eUFDc3JNaEV6TWpBeFFSVWhOU0V6RVJRV0ZqTXlOamNYQmdZaklpWW1OUVB1L0U0QlZQRVpMUjBmTEJVaUwxWXlXb0JGQkRxK3Z2enlNVGNWRFFpdUdoQkVrSElBQVFCLy8rc0VCQVE2QUI0QUUwQUpFQWNaQUFaeUdRdHlBQ3NyRVRNeU1ERlRNeEVVSGdJek1qNENOU1lDSnpNZUFoVVVEZ0lqSWk0Q05YL3lHQ3c3SWo5Z1FTRUNQaS91SGpRZ09uaTRmMTZZYkRvRU92MXFSR0U2R2tSeWpFYUhBUVY3UHB5OWIzZlVvbHcwYktoekFBRUFSdjRpQllVRVFnQXZBQmxBRENzRkJSa1lCbklpRHd0eUFBQXZLeklyTWpJUk16QXhRUkUwTmpZek1oNENGUlFHQmdRaklpUW1KalUwTmpZM0Z3NENCeFFlQWpNeU5qWTFOQzRDSXlJR0ZSRUNhRXArVUhtL2hrZEluZjcvdTdyKy81eEhPbXhKbVRKQ0lRSXJZNlY2bzd0UkkwQmZQaUVaL2lJRkhFNTBRbGVYd21wdnphTmVZcW5ZZG02K216YU9NWHFFUUZDVGMwTnVyMkJHZldBM0p4YjYzUUFDQUZMK0pRVi9CRG9BSGdBaUFCVkFDaUVIR1F0eUlCQUFCbklBS3pJeUt6SXZNREZUTXhFVUhnSXpNajRDTlNZbUp6TWVBaFVVQmdZRUl5SXVBalVCTXhFalV2RS9iNVJXZXFoa0xRSkNNZW9oT0NORm0vOEF1NVh6cmx3Q0VmRHdCRHIrRkhXaVlTdERkSlJRZ3Z0M081ZTJiSGZacVdKSGxlbWhBZW41NndBQUFnQmwvK3NHTUFRNkFCNEFQd0FaUUF3QkZ3b0tLVFlmQm5JMkMzSUFLeXNSTXpNUk16SXdNVUV6SGdJVkZBNENJeUl1QWpVUk14RVVIZ0l6TWo0Q05TWUNKVE1HQWdjVUhnTXpNajRDTlJFekVSUU9BaU1pTGdNMU5EWTJCTFB0SjBFb0xHR2hkRmVLWWpPd0hEUkVLRFJITEJRRVRQd0Y3anROQXd3YUxENHBLVVV6SExBellvcFhYWXRpUEJ3b1FnUTZQcDI4Y0hmVG9seEVoTUI5QVRmK3UxWjJTaUZBYlkxT2h3RUVmSHorL0ljK2RHSkxLU0ZLZGxZQlJmN0pmY0NFUkR4c2s2NWZjTHlkQUFBQkFIai82d1NlQmNZQU9BQWRRQTBkSGhjMkJBUU5JeGNMY2kwTkFDOHpLeklST1M4ekVNd3lNREZCRndZR0l5SWtKalUxTkRZMk16SWVBaFVSRkFZR0l5SXVBalVSTnhFVUZoWXpNalkyTlJFMExnSWpJZ1lHRlJVVUZoWXpNallFbEFveGdEeXkvdTZiWGFOcFVvTmRNWFRSakdxc2ZFUHBPMjFNUWwweUR4MHJIU0kySDFXbWV6eDJBeC9ERUJtSDdaWVRkcWRaTldhVVh2MkdrdEp3UkgycmFBRWhBZjdlVVhsQ1BIaFlBb2t0UWl3VUlFWTVGbGlTVnhNQUEvL2hBQUFFcXdYRUFBTUFGZ0FwQUI1QURoQUpDUjhtQTNJYUdCWURBd0lTQUQ4ekVUTXpNeXN5TWhFek1ERkJFU01STnhNK0FqTXlGaGNISmlZaklnWUdCd0VuQXhNWEJ3RXVBaU1pQmdjbk5qWXpNaFlXQXNMN2N0WWhVR00vSjBNZkpRUW1EaGNtSHd6K3o2U1QyQ09tL3RJTUlTWVdEaVlFSXg1Q0p6eGtWQUszL1VrQ3R5b0NDbEZlS2c0TXZnSUVEeUliL1ZBQkF2bjk2dU1CQXJBY0lROEVBcjBORGlSY0FBTUFLLy9yQm1BRU9nQURBQ1FBUlFBaFFCQW1CUU1jRHk4OEMzSThEd0lEQm5JUEFDOHJNaEU1S3pJUk14RXpNekF4UVJVaE5TRXpIZ0lWRkE0REl5SXVBalUxTXhVVUhnSXpNajRETlNZQ0pUTUdBZ2NVSGdNek1qNENOVFV6RlJRT0FpTWlMZ00xTkRZMkJtRDV5d1J2N2laQktCczVYSVJaV0kxak5hOGVOa2NxSlRjbUdBc0VUUHdoN2p0T0F3c1lKamNrS2tnMUhyQTFZNDVaV0lOZE9Sc29RZ1E2c3JJK25ieHdYNjZUYkR4RWhNQjkxT0pXZGtvaEtVcGpkRDZIQVFSOGZQNzhoejUwWWtzcElVcDJWdUxVZmNDRVJEeHNrNjVmY0x5ZEFBQURBQ1QvOFFXN0JiQUFHd0FmQUNNQUlVQVJIeU1ZQlFVT0lpTWVDSElqQW5JT0NYSUFLeXNyRVRNU09TOHpFVE13TVVFMVBnSXpNaFlXRlJRT0FpTW5NajRDTnpRbUppTWlCZ1lURVNNUklSVWhOUUk0Tm9DRE9LSHVnengreVk4QlZtNDlGd0ZEZ0Y1RGVISXQrZ0xyKzVNQ2Jzb1RIeE5teTVaZXBIeEh2U3BJWERGU2RENFBIZ01zK2xBRnNNaklBQUlBWi8vc0JPNEZ4QUFEQUN3QUhVQU9Bd0lDQ1IwWkZBTnlLUVFKQ1hJQUs4d3pLOHd6RWprdk16QXhRUlVoTlFFekRnSWpJaTRDTlRVMFBnSXpNaFlXRnlNdUFpTWlEZ0lWRlJRZUF6TXlOallEV2YydUF1cjhESW4yc0lmWm1WSlRuTnlKcisrR0Qvc0tRNEZxVllGWExCb3pVRzFHYTRWRkEwREh4LzZhaitCL1lMVCtuWGlkL3JWaGdPS1RYNGRIUVgyMWRIcFpsbmxWTEVTRUFBQURBQzBBQUFnNEJiQUFFUUFWQUM0QUowQVRKQ0VoQ1M0V0ZnQUtDUWh5RkJVVkl3QUNjZ0FyTWpJUk15c3lFamt2TXhFekVUTXdNVUV6QXc0RUl5TTFOejRFTndFVklUVUJJVElXRmhVVURnSWpJUkV6RVNFeU5qWTFOQ1ltSXlFQlpQb2pDQ2RGYUpGaFFDYzFUVGNqRlFVREFQMU1BeVlCYnFicmZVZUh3MzM5NWZzQklGOTdPanA3WC82U0JiRDlMWi95ckcwenh3TUVLMVdJeElNQ2s4akkvZTU0MG9Wa3FYMUZCYkQ3RjB4NVJVTjRTd0FBQXdDWkFBQUlRZ1d3QUFNQUJ3QWdBQ05BRVFnZ0lBTUNBZ1lWQndKeUZoTVRCZ2h5QUNzeUVUTXJNaEU1THpNekx6TXdNVUVWSVRVVEVTTVJBU0V5RmhZVkZBNENJeUVSTXhFaE1qWTJOVFFtSmlNaEJGVDlBVDc2QkM0QmJhYnJmVWVJd24zOTVmb0JJVjk3T2pwN1gvNlRBMEhHeGdKditsQUZzUDNVZE1pRFk2VjZRd1d3K3h0SGMwSkJjRVVBQXdBdEFBQUZ3d1d3QUJVQUdRQWRBQjFBRGhrQkdBWVJFUmdjSFFKeUdBaHlBQ3NyTWhFNUx6TVJNekl3TVdFakVUUW1KaU1pRGdJSE5UNERNeklXRmhVQkVTTVJJUlVoTlFYRCtqOS9YeTVtYUdBb0tGeGxhRE9sOElMODIvc0M2dnVnQWNSbmREQUlEeFVOeUF3VkR3aGZ6YVlEN1BwUUJiREl5QUFBQWdDUC9wa0ZDd1d3QUFjQUN3QVhRQXNKQmdFQ2Nnc0RBd0FJY2dBck1oSTVLekl2TURGekVUTVJJUkV6RVNVUkl4R1Ard0tHKy81Syt3V3creGNFNmZwUXUvM2VBaUlBQWdDUUFBQUV1Z1d3QUFVQUhnQWhRQkFHSGg0RUFoTVRCUUp5RkJFUkJBaHlBQ3N5RVRNck1oRXpFVGt2TXpBeFFSVWhFU01SRXlFeUZoWVZGQTRDSXlFUk14RWhNalkyTlRRbUppTWhCQy85Vy9xdUFXNm03SHhHaU1OOS9lVDhBU0JmZWpzN2VsLytrZ1d3eVBzWUJiRDkwVy9JaFdTbWVVSUZzUHNYUjNSRlEyNUNBQUFHQUNiK21nWFVCYkFBQXdBSEFBc0FEd0FUQUNVQUowQVRDeEVSSUFNREJ4NEljZzRQRHhBVUFuSUpCUUF2TXlzeU1oRXpLekl5RVRNeUVUTXdNV1VWSVRVekVTTURJUU1qRVFNVklUVWhFU01SSVRNRERnVUhJelV6UGdNM0JSTDd6ejd3Q1FXdUQreDMvV0FEWVByOWFQc2pDQ283U2xSWEtvWkJHMEkvTUFuSHg4Zjkwd0l0L2RRQ0xBVHB5TWo2VUFXdy9iS000TEdIWWtVWHh4bGZtK2FpQUFVQUZRQUFCNklGc0FBRkFBa0FEUUFUQUJjQUowQVRGaEVKQXdNQUFBOFBGQXdJQ0hJT0NnRUNjZ0FyTWpJck1qSXlMek1STXhFek16TXdNVUVCSVFFaEJ5Y0JJUUVCRVNNUklRRWhKeUVCRXdFM0FRSk8vZVVCTVFGakFRWWozLzZDL3NnQit3Sk8rZ1FoL2VuK3FTTUJBUUZlRi82SXZBSDBBbllET3YyZjJTRDlhZ05BQW5ENlVBV3cvTWJaQW1INlVBS1dxdnpBQUFBQ0FFbi83QVNDQmNRQUhnQStBQ05BRVFBZ0FnSStQaFUwTUNvSmNnOExGUU55QUNzeXpDdk1NeEk1THpNU09Ua3dNVUVqTlRNeU5qWTFOQ1ltSXlJR0JoVWpORDRDTXpJZUFoVVVEZ0lsTXpJZUFoVVVEZ0lqSWk0Q05UTVVGaFl6TWpZMk5UUXVBaU1qQW9mS3JsMTBOVHQ2WUVoMlJmdFJqYmxuZU1LTVNrV0FzLzdKeW5tOGdrUlJsTWw0WWIyWlhQeEhmVk5maFVjbFNHcEZyZ0s2anpkalFqdGlPelJlUUYrWGFqazFhSnRtUzRSa09WY3lZSTFiWnA5dU9ERm5vSEErWnowOGFFRStXemtjQUFFQWtnQUFCUTBGc0FBSkFCZEFDd1VBQmdJSUFuSUVCZ2h5QUNzeUt6SVNPVGt3TVVFQk14RWpFUUVqRVRNQmpBS0crL3Y5ZXZyNkFaa0VGL3BRQkJqNzZBV3dBQUFEQUN3QUFBVVBCYkFBQXdBSEFCa0FHVUFNRWdVUkNISUNBd01FQ0FKeUFDc3lNaEV6S3pJeU1ERkJGU0UxSVJFakVTRXpBdzRFSXlNMU56NEVOd1JQL1VZRGV2djlUL2tqQnloRWFKRmhRQ2MxVFRZa0ZRVUZzTWpJK2xBRnNQMHRuL0tzYlRQSEF3UXJWWWpFZ3dBQUFnQXkvK3NFNFFXd0FCTUFHQUFhUUE0WEZnQVZCQWdDR0FKeUR3Z0pjZ0FyTWlzeUVoYzVNREZCQVNFQkRnTWpJaVluTnhZV016STJOamNEQVJNSEFRSmFBWElCRmY0R0dEMVdlbGNYUVE4Q0REa05Pa1FwRU1zQmJrakQvZnNCK3dPMSsxZzNaMUF2QkFMRkFnSW5ReWdFYlB6YS92b0hCRE1BQUFNQVR2L0VCaGdGN0FBVkFDa0FMUUFiUUF3ZkRBd3JGZ0FBS3lvRGNpc0FMeXNST1M4ekVUa3ZNekF4UVNFeUhnSVZGQTRDSXlFaUxnSTFORDRDRnlJR0JoVVVIZ0l6SVRJMk5qVTBMZ0lqQXhFakVRS2tBUjZCMmFKYVdxTFpnZjdpZ05xaldWbWoyb0J3b2xjeVhvWlRBU0J2b0ZjeFhZUlVHUEVGSjFhZDI0YUUycDFVVkp6WmhJYmJuMWJJWDdKOVhKQmtObCt3ZVYyVFpqWUJqZm5ZQmlnQUFnQ08vcUVGdlFXd0FBVUFEUUFaUUF3TUJ3SnlCUVFFQ1FZSWNnRUFMeXN5TWhFekt6SXdNV1VESXhFak5RVVJNeEVoRVRNUkJiMFQ1NEw4VGZ3Q2hmekovZGdCWDhuSkJiRDdGd1RwK2xBQUFBSUFrUUFBQk8wRnNBQVZBQmtBRjBBTEZ3WVJFUmdBQW5JWUNISUFLeXNST1M4ek1qQXhVek1SRkJZV016SStBamNWRGdNaklpWW1OUUV6RVNPUit6NS9YeTVtWjJBb0oxMWthRE9sOElJRFlmdjdCYkQrUFdkMU1BZ1BGUTNIREJZUENGL09wZ0hEK2xBQUFBRUFsUUFBQndVRnNBQUxBQmxBREFVSkJnSUNDd0FDY2dzSWNnQXJLeEV6RVRNeU1qQXhVek1SSVJFekVTRVJNeEVobGZ3Qnd2b0J2dnI1a0FXdyt4Y0U2ZnNYQk9uNlVBQUFBZ0NWL3FFSHNRV3dBQVVBRVFBZFFBNE1CUWdJQkJFSWNnOExCZ0p5QVFBdkt6SXlLekl5RVRNek1ERmxBeU1SSXpVQk14RWhFVE1SSVJFekVTRUhzUlBkZ3ZwVy9BSEMrZ0crK3ZtUXYvM2lBVisvQlBIN0Z3VHAreGNFNmZwUUFBQUNBQlVBQUFYV0JiQUFBd0FjQUIxQURoRVNEd1FjSEE4QUFRSnlEd2h5QUNzck1oRTVMek1STXpJd01WTTFJUlVUSVRJV0ZoVVVEZ0lqSVJFekVTRXlOalkxTkNZbUl5RVZBZXhZQVc2bTYzNUlpTU44L2VYN0FTQmZlanM3ZWwvK2tnVHd3TUQra1cvSWhXU21lVUlGc1BzWFIzUkZRMjVDQUFJQW1RQUFCbFFGc0FBWUFCd0FIVUFPR2hrT0N3QVlHQXNNQW5JTENISUFLeXNST1M4ekVUTXlNekF4UVNFeUZoWVZGQTRDSXlFUk14RWhNalkyTlRRbUppTWhBUkVqRVFGR0FXK202MzFIaU1OOC9lVDdBU0ZmZWpzN2VsLytrUVVPK3dPQmI4aUZaS1o1UWdXdyt4ZEhkRVZEYmtJQzl2cFFCYkFBQUFFQWtBQUFCTG9Gc0FBWUFCbEFEQTRMQUJnWUN3d0NjZ3NJY2dBckt4RTVMek1STXpBeFFTRXlGaFlWRkE0Q0l5RVJNeEVoTWpZMk5UUW1KaU1oQVQ0QmJxYnNmRWFJdzMzOTVQd0JJRjk2T3p0NlgvNlNBNEZ2eUlWa3BubENCYkQ3RjBkMFJVTnVRZ0FDQUdQLzdBVG9CY1FBQXdBc0FCMUFEZ01DQWg0SkJTa0pjaGtWSGdOeUFDc3l6Q3ZNTXhJNUx6TXdNVUVWSVRVQk14NENNekkrQWpVMU5DNERJeUlHQmdjalBnSXpNaDRDRlJVVURnSWpJaVltQkZEOW4vNTErZ3RGaFd4WGYxSW9IRGxUYmtScGdrSUwrZytHNzY2SjI1eFRVWnJZaHJIMWlBTTd5TWorbjJDRVJFYUJzMjk2WFpsMlVTcEhoMStUNG9CaHRmNmRlSjMrdEdCLzRBQUFCQUNoLyt3SERBWEVBQU1BQndBZEFETUFJMEFUTHdjR0JnNGtHUU1DY2dJSWNoa0RjZzRKY2dBckt5c3JFVE1TT1M4ek1qQXhRUkVqRVFFVklUVUZGUlFDQmdZaklpWW1BalUxTkJJMk5qTXlGaFlTQnpVMExnSWpJZzRDRlJVVUhnSXpNajRDQVp6N0FpditpZ1cyVnFEZGlJWGVvbGhZb042RmlONmdWL3N3V29SVVVvSmJNREJkZ2xKVmdsb3ZCYkQ2VUFXdy9YSEF3Q0ZRcGY3NnVHRmh1QUVHcFZDbEFRVzVZV0c1L3Z2MVVucTdmMEZCZjd0NlVucThnVUZCZ2J3QUFBSUFGd0FBQkZnRnNBQVdBQm9BSDBBUEZ4WVdBQUFKREF3WkNISU9DUUp5QUNzeUt6SVJFamt2TXhJNU1ERkJJU2NtSmpVME5qWXpJUkVqRVNNaUJoVVVGaFl6SVFVQklRRURxZjV2WTZXd2dPMmlBZW44N1l5SVBYbGFBVDcrenY2dS92SUJWZ0lpS1RUVW9aREdadnBRQk9pSWVGSjFQMUQ5YmdLU0FBTUFXdi9yQkQ4R0ZBQVdBQzhBUkFBWlFBdzZJakFYRnlJQUFYSWlDM0lBS3lzUk9TOHpFVE13TVVFekZBNENCdzRERnhVSE5UUVNOalkzUGdJRE1oNENGUlVVRGdJaklpNENOVFVtTmpZM1BnSVhJZ1lHRlJVVUhnSXpNajRDTlRVMExnSURJOE14WDR0YlZJZGJLQWkvUm9HemJrdGtNYWxzcUhROVFvQzVkM2E2Z0VJQkdTUU9Nb2l2UFZweE5SNDlZMFJGWVQwZEhUNWlCaFJaYzBrc0VoSk5pZGFhUkJGRXZ3RWN3M1FXRUNFMS9oZExoclpyRm5DK2pVOVNrOFoxRmhVb0xoNWxtRmEvVll4U0ZrTjRXelEwVzNoREZqNXVWVElBQUFJQWp3QUFCRGdFT2dBYkFETUFMVUFXQWdFYkt5a3BLQUVvQVNnUERSQUdjaDRkSFE4S2NnQXJNaEV6S3pJUk9Ua3ZMeEV6RWprNUVUTXdNVUVoSnlFeU5qWTFOQzRDSXlNUkl4RWhNaDRDRlJRT0FnY0RJVGNoTWpZMk5UUW1KaU1oTnlFWEhnSVZGQTRDQW9yK3BnSUJIRVpiTEJvMVR6VEY4UUcyYUtkMlB5dFVlazgzL21CZ0FVQkFWQ2tvVTBMKzdRSUJSMFZuaUVRNWI2QUJ6Nm9jT1NraU15RVAvSVFFT2lSS2NVd3lXRVFyQmYzdnZpQTlLaXMrSWFwQ0IwcHdRa3gwVFNjQUFRQ0RBQUFEVEFRNkFBVUFEcllDQlFaeUJBcHlBQ3NyTWpBeFFSVWhFU01SQTB6K0tQRUVPc0Q4aGdRNkFBTUFKLzYrQk1JRU9nQVBBQlVBSFFBaFFCQWRHQWtXRmhzVENBcHlGUkFRQUFaeUFDc3lFVE1yTWpJeUVUTXZNekF4UVRNRERnTUhJelUzUGdNM0V5RVJJeEVoQVNFUkl4RWhFU01CUVBFTUJVSnFoVWxISWlzL0xCa0VUQUt1OFA1Qy9xZ0Vtdkg5Uy9VRU92NkRwdTZqYUI2K0FpNWRjWmhwQVgzN3hnTnUvVkw5L2dGQy9yNEFBQVVBSUFBQUJtc0VPZ0FGQUFrQURRQVRBQmNBTUVBWEZSQVFBQllSRVFrREF3WUFBQlFIREJJVERRMENCbklBS3pJUk16OHpNemt2TXpNUk16TVJNeEV6RVRNd01VRUJJUk16QnljQklRRUJFU01SSVFFaEp6TVRFd0UzQVFIai9sQUJLUHpUSDY3KzYvN1lBWWdDRS9BRGkvNVEvdGNnMVB3VC91cTdBWVlCdFFLRi9sYmJJLzRvQW1FQjJmdkdCRHI5ZTlzQnF2dkdBZGlKL1o4QUFnQk8vK3dEeHdSTkFCMEFPd0FqUUJFQUh3SUNPenNVTWk0cEMzSVBDeFFIY2dBck1zd3J6RE1TT1M4ekVqazVNREZCSXpVek1qWTJOVFFtSmlNaUJnWVZJelEyTmpNeUhnSVZGQTRDSlRNeUhnSVZGQTRDSXlJbUpqVXpGQllXTXpJMk5qVTBKaVlqSXdJODBLaEFUU0VoVGtNM1Z6THhjOEowWTU1dk96UmlpLzdhMEdDVVpETkJkNlJqYk11RDhUSmVRa1JXS2lwV1FhZ0NCWG9pUFNra1FTb2tRQ3Bsa2s0cFQzVk5OMkpMS2tZbFNHbEVUSGxVTEVpWGRTbElMU3RIS0RaQ0h3QUJBSVFBQUFRUEJEb0FDUUFYUUFzRkFBWUNDQVp5QkFZS2NnQXJNaXN5RWprNU1ERkJBVE1SSXhFQkl4RXpBWFVCcWZIeC9sZng4UUZnQXRyN3hnTGIvU1VFT2dBQUF3Q1BBQUFFWlFRNkFBTUFDUUFOQUI5QUR3d0hCd3NHQmdJSkF3WnlDZ0lLY2dBck1pc3lFVGt2TXpNUk16QXhRUkVqRVNFQklTY3pBUk1CTndFQmdQRURzLzRaL3UwZ3lRRWtFLzY2dmdIRkJEcjd4Z1E2L1hYYUFiSDd4Z0hZaWYyZkFBTUFJQUFBQkJBRU9nQURBQWNBR1FBWlFBd1NCUkVLY2dJREF3UUlCbklBS3pJeUVUTXJNakl3TVVFVklUVWhFU01SSVRNRERnUWpJeWMzUGdRM0ExUDk4QUxOOGYzcDdoMEdJenBVY0VaTEFTWWxOaWNaRHdRRU9zREErOFlFT3YzcGQ3V0JVQ2JHQXdNaFBtS0dXUUFEQUk4QUFBVndCRG9BQmdBS0FBNEFHMEFOQUFrTUJnRUtCbklMQXdrS2NnQXJNaklyTWpJeUVqa3dNVUVCTXdFakFUTWpFU01SQVJFekVRTC9BVUxSL2oray9rRFJQdkVENy9JQkpBTVcrOFlFT3Z2R0JEcjd4Z1E2KzhZQUF3Q0VBQUFFRFFRNkFBTUFCd0FMQUJ0QURRa0dDQU1DQWdZSEJuSUdDbklBS3lzUk9TOHpNaEV6TURGQkZTRTFFeEVqRVNFUkl4RURYLzNRUnZFRGlmRUNkcjYrQWNUN3hnUTYrOFlFT2dBREFJUUFBQVFQQkRvQUF3QUhBQXNBR1VBTUNRWUlBZ01EQndaeUJncHlBQ3NyTWhFek1oRXpNREZCRlNFMU14RWpFU0VSSXhFRFV2M3FPZkVEaS9JRU9zREErOFlFT3Z2R0JEb0FBZ0FqQUFBRDFRUTZBQU1BQndBUXR3TUdCd1p5QWdweUFDc3JNakl3TVVFUkl4RWhGU0UxQW5MeUFsWDhUZ1E2KzhZRU9yNitBQUFGQUZQK1lBV0JCZ0FBRmdBckFFSUFWZ0JhQUNkQUZTY0dCa2tlRVJGU016NExjak1IY2xnQWNsY09jZ0FyS3lzckVUTXpFVE15TWhFek1ERkJGUlFPQWlNaUxnSW5FVDRETXpJZUF3YzFOQzRESXlJR0JnY1JIZ0l6TWo0Q0pUVTBQZ016TWg0Q0Z4RU9BeU1pTGdJM0ZSUWVBak15TmpZM0VTNENJeUlPQWdFUk14RUZnVE5razJGVmZsWTBEQXd6VjN4VlRuNWdRQ0h4RUNFMFNUQkJWU3NHQnkxVVFUeFROUmo3d3lCQllINU9WSHBWTXd3TE5GUjhWV0NVWkRQeEZ6SlNQRUpVTFFjR0xGUkNQRk16RndFbzhnSVFGWFBCams0NmFZOVdBVGxjbVhBOU4yV05zSG9WUDNKZlJ5Y3JUVEwrVmlwQUpUTmNla2NWWmJDTlpUYzljSmxjL3ROWWxHdzhUbzdCaUJWSGVsczBLRVl0QVo0eVRTczhhWXY4QWdlZytHQUFBQUlBaFA2L0JLSUVPZ0FIQUEwQUcwQU5CZ0VERFF3TUFBcHlBUVp5Q1FBdkt5c3lFVE15RVRNd01YTVJNeEVoRVRNUk53TWpFU00xaFBFQnFQS1RFOTJDQkRyOGhnTjYrOGEvL2dBQlFiOEFBZ0JnQUFBRDRRUTdBQU1BRndBWFFBc1BGQWtKQVFBR2NnRUtjZ0FyS3hFNUx6TXlNREZCRVNNUkV4VU9BaU1pSmlZMUVUTVJGQllXTXpJMk5nUGg4WXNzYlhnOWo4OXY4REZpU2o1dWJBUTYrOFlFT3Y0aHZ4TWZFMWkzalFGSS9yaFJZQ29SSGdBQkFJUUFBQVlHQkRvQUN3QVpRQXdGQ1FZQ0Fnc0FCbklMQ25JQUt5c1JNeEV6TWpJd01WTXpFU0VSTXhFaEVUTVJJWVR4QVZmekFWYngrbjRFT3Z5R0EzcjhoZ042KzhZQUFBSUFmZjYvQnJzRU9nQUZBQkVBSFVBT0RBVUlDQVFSQ25JUEN3WUdjZ0VBTHlzeU1pc3lNaEV6TXpBeFpRTWpFU00xQVRNUklSRXpFU0VSTXhFaEJyc1QzWUw3TlBFQldQSUJWL0g2ZmIvK0FBRkJ2d043L0lZRGV2eUdBM3I3eGdBQUFnQWdBQUFFOFFRNkFBTUFIQUFkUUE0UkVnOGNCQVFQQWdNR2NnOEtjZ0FyS3pJUk9TOHpFVE15TURGQkZTRTFBU0V5RmhZVkZBNENJeUVSTXhFek1qWTJOVFFtSmlNaEFpcjk5Z0hjQVQ2TncyYzZjS1JwL2lIeTdVaFdKeWRXU1A3Q0JEckF3UDZvWHFkclQ0ZGtPQVE2L0lVeVVDMHVValFBQUFJQWp3QUFCYzhFT2dBWUFCd0FIVUFPR2hrT0N4Z0FBQXNNQm5JTENuSUFLeXNST1M4ekVUTXlNekF4UVNFeUZoWVZGQTRDSXlFUk14RXpNalkyTlRRbUppTWhBUkVqRVFFdkFUK014R2M2Y2FOcC9pSHk3VWhXSnlkV1NQN0JCS0R4QXVKZXAydFBoMlE0QkRyOGhUSlFMUzVTTkFJWSs4WUVPZ0FCQUk4QUFBUWxCRG9BR0FBWlFBd09DeGdBQUFzTUJuSUxDbklBS3lzUk9TOHpFVE13TVVFaE1oWVdGUlFPQWlNaEVUTVJNekkyTmpVMEppWWpJUUV2QVQrTXhHYzZjYU5wL2lIeTdVaFdKeWRXU1A3QkF1SmVwMnRQaDJRNEJEcjhoVEpRTFM1U05BQUFBZ0JRLytzRDZBUk9BQ2NBS3dBZFFBNHJLaW9KSFJrVUMzSUVBQWtIY2dBck1zd3J6RE1TT1M4ek1ERkJJZ1lHRlNNME5qWXpNaDRDRlJVVURnSWpJaVltTlRNVUZoWXpNajRDTlRVMExnSUJGU0UxQWdBNFhUZmtkOFIxZDdaOFAwQjh0WForeEcva05GdzlRMTQ2R2hvNVh3RU8va2tEamk5VE9HcXJaVldXeFhBamNNU1hWV2kzZVQxaU9UeGtmMEVqUTM1a08vN29vNk1BQkFDUy8rd0dOZ1JPQUFNQUJ3QWRBRE1BSTBBVEpBTUNBaGt2RGdjR2NnWUtjZzRIY2hrTGNnQXJLeXNyRVRNU09TOHpNakF4UVJVaE5STVJJeEVCTlRRK0FqTXlIZ0lWRlJRT0FpTWlMZ0kzRlJRZUFqTXlQZ0kxTlRRdUFpTWlEZ0lDK2YyOHp2RUJ0VVNDdW5aNHU0SkVSSUc3ZDNlNmcwVHlIa0JrUkVSalFCOGZRR1JGUTJOQUhnS0Z3TUFCdGZ2R0JEcjkxeGQxeVpWVFU1WEpkUmQxeUpWVFU1WElqQmRKZ21JNE9HS0NTUmRJZ1dRNU9XU0JBQUFDQUM0QUFBUGdCRG9BQXdBZEFCMUFEZ0VTRWhNVEF3a0VCbklIQXdweUFDc3lLeklTT1M4ekVqa3dNVUV6QVNNQklSRWpFU01pQmdZVkZCWVdNeUVWSVNJdUFqVTBQZ0lCWVByK3pma0I0Z0hROE9CRVdDb25VejhCUHY3Q1pKNXVPanh4b3dJUi9lOEVPdnZHQTN3dlN5Y25TQzZ3TTF0N1NVdCtYak1BQUFULzEvNUxBL29HQUFBUkFCVUFMQUF3QUIxQUVEQXZLQndIY2hVQWNoUUtjZzBHRDNJQUt6SXJLeXN5ekRJd01VRXpFUlFHQmlNaUppYzNGaFl6TWpZMk5RRVJJeEVUSno0RE16SWVBaFVSSXhFMEppWWpJZzRDQVJVaE5RTUk4bFdlYnlNK0lnNFRPeFlwT2g3K1l2REdUZ0U5YjV4ZlVJRmVNZkl0Vmo1QlkwSWhBVGY5WUFITy9mUjVxRllIQ3JzR0JpdFNPZ1krK2dBR0FQeEZBWEMralUwc1ladHYvVWtDdVU1Y0tUUmFkZ0xPcHFZQUFnQlMvK3dEOVFST0FBTUFLd0FiUUEwRURRTUNBZzBoR0FkeURRdHlBQ3NyTWhFNUx6TVJNekF4UVJVaE5RRXlOalkzTXc0Q0l5SXVBalUxTkQ0Q016SVdGaGNqTGdJaklnNENGUlVVSGdJQ3BmNG9BVzA3WHpzRDR3TjR4WGg4dVhvOFBIdTRlNEhGY0FQakF6VmZRa2xoTmhZV04yQUNhS09qL2tRdlZEZHByR1ZWbHNSd0kzREZsbFZudDNrOFlUbzdaWDFESTBOK1l6c0FBd0FkQUFBR253UTZBQkVBRlFBdUFDVkFFaFl1TGdBa0lTRUtDUXB5RkJVVkl3QUdjZ0FyTWpJUk15c3lNaEV6RVRrdk16QXhRVE1ERGdRakl5YzNQZ1EzQVJVaE5RRWhNaFlXRlJRT0FpTWhFVE1STXpJMk5qVTBKaVlqSVFFRjdoMEdJanRVYjBkTEFTY2tOaVlhRUFNQ1RmMy9BbTBCUG8zRVpqcHdvMnIrSXZIdFNWWW5KMVpKL3NJRU92M3BkN1dCVUNiR0F3TWhQbUtHV1FIT3dNRCtoMXFlWmt5Q1lEVUVPdnlFTVV3cUtVZ3NBQUFEQUlRQUFBYXlCRG9BQXdBSEFDQUFKVUFTRlJZVEV3WUlBeUFEQWdJR0J3WnlCZ3B5QUNzckVUa3ZNek1STXhFekVUTXlNREZCRlNFMUV4RWpFUUVoTWhZV0ZSUU9BaU1oRVRNUk16STJOalUwSmlZaklRTmYvZEJHOFFNM0FUK054R2M2Y2FScC9pTHg3VWhYSnlkWFNQN0JBcHkrdmdHZSs4WUVPdjZIV3A1bVRJSmdOUVE2L0lReFRDb3BTQ3dBQUFQLzZBQUFBL29HQUFBREFCb0FIZ0FaUUEwZUhSWUtCM0lEQUhJUkFncHlBQ3N5S3lzeXpESXdNVUVSSXhFVEp6NERNekllQWhVUkl4RTBKaVlqSWc0Q0FSVWhOUUZxOE1aT0FUMXZuRjlRZ1Y0eDhpMVdQa0ZqUWlFQlNQMWdCZ0Q2QUFZQS9FVUJjTDZOVFN4aG0yLzlTUUs1VGx3cE5GcDJBdGVucHdBQUFnQ0UvcHNFRHdRNkFBTUFDd0FYUUFzQUJnWUxDbklKQkFaeUFnQXZLeklyTWhJNU1ERmxNeEVqQVRNUklSRXpFU0VCMHZMeS9yTHhBYWp5L0hYQS9kc0ZuL3lHQTNyN3hnQUNBSWovNndiUEJiQUFHQUF3QUJ0QURpd2ZDWElVQndseUpob09BQUp5QUNzeU1qSXJNaXN5TURGQk14RVVEZ0lqSWk0Q05SRXpFUlFlQWpNeU5qWTFBVE1SRkFZR0l5SXVBalVSTXhFVUhnSXpNalkyTlFNdHl6OXptbDFpcG50RSt4NDJTeTFEWXpnQ3AvdDUwSVpabVhBL3pCODVUaTgvWURVRnNQd0FjS3B5T1RseXFuQUVBUHdBUVdBL0hqZHdWd1FBL0FDVnltWTVjcXB3QkFEOEFFRmdQeDQzY0ZjQUFBSUFjdi9yQmdNRU9nQVlBREVBRzBBT0xCOExjaFFIQzNJbUdnNEFCbklBS3pJeU1pc3lLekl3TVVFekVSUU9BaU1pTGdJMUVUTVJGQjRDTXpJMk5qVUJNeEVVQmdZaklpNENOUkV6RVJRZUFqTXlQZ0kxQXNURU9XZU9WRmlVYkR6eUZ5czdKVGxWTUFKTzhXcTdkMU9KWXpiRUdDNUNLU1pBTFJnRU92MVhhWjVxTlRWcW5ta0NxZjFYTzFjNEhERm1Ud0twL1ZlTXUxODFhcDVwQXFuOVZ6dFhPQndjT0ZjN0FBQUMvK0VBQUFRakJoY0FGd0FiQUNGQUVBMEtBQmNYQ2hvYkd3b0xBWElLQ25JQUt5c1JPUzh6RVRrdk14RXpNREZCSVRJV0ZoVVVCZ1lqSVJFekVUTXlOalkxTkNZbUl5RUJGU0UxQVM0QlBvM0VabWJFamY0aTh1eElWeWNuVjBqK3dnRnYvVVFEQUdPcmIyK3ZaUVlYK3FnMldESXdXVGtDb0tlbkFBQURBSmovN1FiVEJjVUFBd0FzQURBQUlFQVJBd0lDTHpBQ2NpOElIUlFEY2lrSkNYSUFLeklyTWo4ckVqa3ZNekF4UVJVaE5RRXpEZ0lqSWk0Q05UVTBQZ0l6TWhZV0Z5TXVBaU1pRGdJVkZSUWVBek15TmpZQkVTTVJCU2o4RXdTZCtneUo5YkdIMkpsU1U1emNpSzd4aGc3N0NVT0NhbFNCVmlzWk0wNXRSbXVGUnZ2Ryt3Tk93TUQralkvZmdHR3ovcDE1bmY2MVlJRGlrbDZHUjBCOHRYUjdXSmQzVkMxRWd3UTArbEFGc0FBQUF3Q0cvK3dGdWdST0FBTUFLd0F2QUNSQUV3TUNBaTR2Qm5JdUNpRWRHQWR5Q0FRTkMzSUFLekxNSzh3elB5c1NPUzh6TURGQkZTRTFBVEkyTmpjekRnSWpJaTRDTlRVMFBnSXpNaFlXRnlNdUFpTWlEZ0lWRlJRZUFnRVJJeEVFZ3Z5V0F1YzdZRG9ENHdONHhYaDh1WG84UEh1M2ZJTEVjQVBqQXpWZlFrbGdOaGNXTjJEOXd2RUNjYWVuL2pzdlZEZHByR1ZWbHNSd0kzREZsbFZudDNrOFlUbzdaWDFESTBOK1l6c0RqdnZHQkRvQUJBQWFBQUFGR3dXd0FBUUFDUUFOQUJFQUpFQVJFUTBNREFJQUJnWUhBd0p5RHdVRkFnZ0FQek1STXlzeU1oRXpFVGt2TXpNd01VRUJJUUV6QVFFM013RUJGU0UxQlJFakVRTGIva1QrK3dJR2t3Rmova1lza2dJQi91bjlGZ0hxM1FVait0MEZzUHBRQlN1RitsQUNacmk0U3Yza0Fod0FCQUFMQUFBRVJ3UTZBQVFBQ1FBTkFCRUFIa0FPRVEwTURBRUhBd1p5RUFVRkFRb0FQek1STXlzeUVqa3ZNek13TVVFQkl3RXpFd0VETXdFREZTRTFCUkVqRVFJTC92ZjNBYW0xNlA3eVc3WUJxY3o5WkFHbHVRTE4vVE1FT3Z2R0FzMEJiZnZHQWNXcHFVRCtld0dGQUFZQXJBQUFCelVGc0FBREFBZ0FEUUFSQUJVQUdRQTBRQm9KRkJRR0JoZ1ZFUkVRRUFNQ0FoZ0lGZ0p5QkFvS0N3Y0NjZ0FyTWpJUk15cy9PUzh6TXhFekVUTVJNeEV6RVRNd01VRVZJVFVCQVNFQk13RUJOek1CQVJVaE5RVVJJeEVCRVNNUkE0Zjl2d092L2tUKyt3SUhrZ0ZqL2tZc2tnSUIvdW45RmdIcDNQMW0rd0ptdDdjQ3ZmcmRCYkQ2VUFVcmhmcFFBbWE0dUVyOTVBSWNBNVQ2VUFXd0FBQUdBSm9BQUFZZEJEb0FBd0FJQUEwQUVRQVZBQmtBTGtBWEZSRVJFQkFEQWdJWUdRWnlDUlFVQmdZWUNnc0hCbklBS3pJL014RXpFVE1yRWprdk16TVJNeEV6TURGQkZTRTFBUUVqQVRNVEFRTXpBUU1WSVRVRkVTTVJBUkVqRVFNay9jTUMrdjczOXdHcHRlais4bHExQWFuTC9XTUJwYm45Ni9JQnhhaW9BUWo5TXdRNis4WUN6UUZ0KzhZQnhhbXBRUDU3QVlVQ3RmdkdCRG9BQUFVQWZnQUFCbWNGc0FBV0FCb0FId0FrQUNnQU5FQVpHUm9hSkJzZkh5TWpFeWdHQmhNVEFSd2tBbklOSnljQkNBQS9NeEV6S3pJU09TOHpFVE1STXhFekVUTVJNeEV6TURGaEl4RTBOall6SVRJV0ZoVVJJeEUwSmlZaklTSUdGUUVWSVRVQkFTRUJJd0VCQnlNQkFSRWpFUUY1KzN2bW9nSGpvdWQ2K2pwMVd2NGRoWU1Eay96dkFVSUJuUUVXL2dDVC9za0JvQ1NTL2Y4QzZ2b0JZYWJHV0ZqR3B2NmZBV0ZpYlMxcGt3UlB5Y245Q2dMMi9KY0RhZjBEYkFOcC9WSDgvd01CQUFVQWdRQUFCVjBFT3dBWEFCc0FJQUFsQUNrQU1FQVhHaHNiSlNBa0pCTXBCZ1lURXdFZEpRWnlEU2dvQVFvQVB6TVJNeXN5RWprdk14RXpFVE1STXhFekVUTXdNV0VqTlRRMk5qTWhNaFlXRlJVak5UUW1KaU1oSWdZR0ZRRVZJVFVCQVNFQkl3TUJCeU1CQVJFakVRRnk4VzdRa1FFK2tNOXc4akJpUy83Q1MyTXdBdno5THdFZ0FTd0JDUDV2aDljQk1CK0gvbTRDY2ZHdW43OVZWYitmcnE1aGJTd3NiV0VEamF1ci9ib0NSZjFhQXFiOXRWc0NwdjNzL2RvQ0pnQUFCd0NsQUFBSXJBV3dBQU1BQndBZUFDSUFKd0FzQURBQVBFQWVJU0lpSkN3Q2NpY3JLeHN3RGc0Ykd3TUNBZ1VIQW5JVkx5OEpDUVVJQUQ4ekVUTVJNeXNTT1M4ek14RXpFVE1STXhFekt6SXlFVE13TVVFVklUVVRFU01SQVNNUk5EWTJNeUV5RmhZVkVTTVJOQ1ltSXlFaUJoVUJGU0UxQVFFaEFTTUJBUWNqQVFFUkl4RUZBdnhSVGZzREdmcDY1NkVCNUtMbWV2bzZkVm4rSElXREE1VDg3Z0ZDQVo0QkZ2MytrZjdJQWFFbGtmMy9BdW42QXlmQXdBS0orbEFGc1BwUUFXR214bGhZeDZYK253RmhZbTB0YVpNRVQ4bkovUW9DOXZ5WEEybjlBMndEYWYxUi9QOERBUUFIQUpBQUFBZHVCRHNBQXdBSEFCOEFJd0FvQUMwQU1RQStRQjRsSWlNakxTMEhLQ3dzR3pFT0Roc2JBd0lDQmdjR2NoVXdNQWtKQmdvQVB6TVJNeEV6S3hJNUx6TXpFVE1STXhFekVUTVJNeEV6RVRNek1ERkJGU0UxRXhFakVRRWpOVFEyTmpNaE1oWVdGUlVqTlRRbUppTWhJZ1lHRlFFVklUVUJBU0VCSXdNQkJ5TUJBUkVqRVFUUC9DR1I4UUx6OFc3UWtRRStrTTl3OGpCaVMvN0NTMk13QXZ6OUx3RWdBU3dCQ1A1dmg5WUJNQ0NIL200Q2NmRUNZYlcxQWRuN3hnUTYrOGF1bjc5VlZiK2ZycTVoYkMwdGJHRURqYXVyL2JvQ1JmMWFBcWI5dFZzQ3B2M3MvZG9DSmdBQUF3QW8va1FEc1FlSEFCY0FRQUJKQUN0QUZCZ05ERUJBQUNzc0NVVkRRMEpJUVlCSEZ3QUNBRDh5M2hyTk1qa3lFVE0vTXhJNUx6TXpNekF4VXlFeUhnSVZGQTRDSXlNMU16STJOalUwSmlZaklSTXpNaDRDRlJRT0FpTWpJZ1lWRkJZV0Z3Y3VBaWMwTmpZek16SStBalUwTGdJakl4TVhOek1WQVNNQk5YOEJHWEM0aFVsSWhMbHhsNUpmZERZM2Mxcis1NEtTZ2NtTVNFbUV0VzA1UlQwMVNCeE9Wb1ZPQVZXYWFqZzlZa1FqS0V4eVNvNXRsWmJQL3VlWC91Z0ZzREZoa1Y5VmgxOHpqRGRoUGpwY05mNGtNbUNOVzJhZmJUazZMakZES2cyVkdHQ0tWMTU1T3lJOVZERTlYRDRmQlA2ZG5Rdis2d0VXQ2dBQUF3QXkva3dEaVFZYkFCZ0FRUUJLQUNaQUVRMFpERUZCQUMxRFNVWkVRb0JJR0FBR0FEOHkzaHJOTWpJeU9TOFNPUzh6TXpNd01WTWhNaDRDRlJRT0FpTWpOVE15TmpZMU5DNENJeUVUTXpJZUFoVVVEZ0lqSXlJR0ZSUVdGaGNITGdJbk5EWTJNek15UGdJMU5DNENJeU1URnpjekZRRWpBVFY5QVJab3EzMUVRbm1wYUorYlVHSXNHemRXT3Y3cWY1dDN1WUJDUVhtbll6Rk1QekpFR2sxSmYxRUJVWk5rTWpkWVBTQWlRMkUvbDBLVmxzLys2SmorNkFRNkprMXlTa0ZvU2lkOUpVSXJIVEVqRlA2OUpFWm1Ra3g0VkN3NkxqRkRLZzJOR2w2R1UxbHlPQlluTmlBbU9DWVRCRkdkblF2KzZ3RVdDZ0FEQUdELzdBVVpCY1FBRndBb0FEa0FIMEFTRENscU1pQnFNaklNQUJocUFBTnlEQWx5QUNzckt4STVMeXNyTURGQk1oNERGUlVVQWdZR0l5SXVBelUxTkJJMk5oY2lEZ0lIQmdZVklTWW1KeTREQXpJK0FqYzJOalVoRmhZWEhnTUN2R3k3bEdvNFZxRGRpR3E2bFd3NVdLSGVoVWg1V1RrSkFRSUN3QUVCQWdrM1dYbEpUSHBZTmdnQkFmMUJBUUlCQ2poYWVRWEVQM2lzM1lSUXBmNzZ1R0UvZDYzZGhGQ2xBUVc1WWMwMFpaWmlEaDhRRHg4T1k1Vm1OUHZCTldxYVpBc1hDdzhjRFdLV1pqUUFBQU1BVGYvc0JEc0VUZ0FWQUNBQUt3QWZRQklMSVdvbkcyb25Kd3NBRm1vQUIzSUxDM0lBS3lzckVqa3ZLeXN3TVVFeUhnSVZGUlFPQWlNaUxnSTFOVFErQWhjaURnSUhJUzREQXpJK0FqY2hIZ01DUTNlOGdVUkVnYnAzZDd1Q1JFU0J1M1k3V3o4bEJ3SUVCaVpBV3pvN1d6OG1CdjM4QmlWQVhBUk9VNVhKZFJkMXlKVlRVNVhJZFJkMXlaVlR3Q3hPYURzN2FFNHMvUjRyVDJnOVBXaFBLd0FBQWdBUUFBQUU5UVhEQUE0QUV3QVpRQTBPRWdnRkV3SnlCUU55RWdoeUFDc3JLeEV6RVRNd01VRVRQZ0l6RndjaklnWUdCd0VqQVFFVEl3RUNrK2NpV241WUtRRVdIekVtRHY2Y3ZQN2lBVVJhdlA0U0FYd0RCV3lQUndIU0hUa3MrNUlGc1B2Ty9vSUZzQUFBQWdBZUFBQUVHZ1JPQUJJQUZ3QVZRQXNYQm5JU0ZncHlEQVVIY2dBck1pc3lLekF4UVJNK0FqTXlGaGNISmlZaklnWUdCd0VqQXhNVEl3RUNDbnNlVm5KR0hUUVlGd1FlRGhjcklRcisrcUtteGt5aS9wWUJiQUhDWW44L0J3NjhBZ1FaTEIzODN3UTYvVEwrbEFRNkFBUUFZUDkyQlJrR0xnQURBQWNBSHdBM0FDUkFFQUlDSnljREdnTnlCd2N6TXdZT0NYSUFLODB6RVROOEx5c1l6VE1STTMwdk1ERkJFU01SRXhFakVRRVZGQUlHQmlNaUxnTTFOVFFTTmpZek1oNERCelUwTGdNaklnNENGUlVVSGdNek1qNENBeHU4dmJ3Q3VWYWczWWhxdXBWc09WaWgzb1ZzdTVScU9Qd2VPMVZ2UkZLQ1d6RWdQRlp2UVZXQ1dpNEdMdjVaQWFmNitQNVFBYkFCMmxDbC92cTRZVDkzcmQyRVVLVUJCYmxoUDNpczNkUlNZWjk1VWlwQmY3dDZVbUtmZWxNcVFZRzhBQUFFQUU3L2hnUThCTFVBQXdBSEFCMEFNd0FrUUJBSEJ5UWtCaGtMY2dJQ0x5OEREZ2R5QUN2Tk14RXpmUzhyR00wekVUTjhMekF4UVJFakVSTVJJeEVsTlRRK0FqTXlIZ0lWRlJRT0FpTWlMZ0kzRlJRZUFqTXlQZ0kxTlRRdUFpTWlEZ0lDbTZ5cHJQNWlSSUc3ZG5lN2drUkVncnAyZDd1Q1JQRWVRR1JGUTJOQUh4OUJZMFJFWTBBZUJMWCthQUdZL0hEK1lRR2Y3QmQxeVpWVFU1WEpkUmQxeUpWVFU1WElqQmRKZ21JNE9HS0NTUmRJZ1dRNU9XU0JBQVFBaVAvckJzSUhPd0FWQUNBQVFRQmxBRE5BR1Z0T0NYSlVNVEVzT0FseVFrTkRFUWdJR3hzV0ZpSWhBbklBS3pJeWZDOHpHQzh6RVRNeUVUTXJNakl2TXlzeU1ERkJNeFVqSWk0Q0l5SUdGUlVqTlRRMk16SWVBZ0VuTmpZMU5UTVZGQVlHSlJVaUJnWVZFUlFlQWpNeU5qWTFFVE1SRkE0Q0l5SXVBalVSTkRZMkJUVXlIZ0lWRVJRT0FpTWlMZ0kxRVRNUkZCNENNekkrQWpVUk5DNENCVXNjSFZhTGNtQXNNVHlCZlc0NmJXOS8vb0JPSVNPaU1VYitzVHhiTlI0MlN5MURZempMUDNPYVhXS21lMFIzemdNdVlxZDZSRVI2cDJKYm0zTS95eUE2VWpFdFN6WWZIelpMQnIrQ0pqQW1ORFlTSkc5ckpUSWwvbGM0S0VnbVgyWW1UMENJeUR0NVh2M3VSbWhESVRkd1Z3R0cvbnB3cW5JNVBIZXhkUUlTbmRKcnlNZzhkN0oxL2U1MXNYYzhPWEtxY0FHRy9ucEJZRDhlSVVOb1JnSVNSbWhESVFBRUFIWC82d1hnQmVJQUZRQWdBRUlBWmdBelFCbGNUd3R5VlRJeUxEa0xja05FUkJFSUNCc2JGaFlpSVFaeUFDc3lNbnd2TXhndk14RXpNaEV6S3pJeUx6TXJNakF4UVRNVkl5SXVBaU1pQmhVVkl6VTBOak15SGdJQkp6WTJOVFV6RlJRR0JpVVZJZ1lHRlJVVUhnSXpNajRDTlRVekZSUU9BaU1pTGdJMU5UUTJOZ1UxTWg0Q0ZSVVVEZ0lqSWk0Q05UVXpGUlFlQWpNeVBnSTFOVFF1QWdUZkhpQldpM0ZnTERBOWdYMXVPMnR2Zi82RVRTRWpvVEZGL3Q4elR5d1hLamtqS0VFdkdyczJZb1ZRVnBKclBHeThBcU5hbUhBK08yeVNWMDZGWXphN0dpOUJKeU03S2hjWkwwQUZab0VsTVNVek54SWtiMnNsTWlYK1ZUZ29TU1ZmWmlaT1FYdS9OVzFWOFQ5ZFBSMGNPRmM3eGNWcG5tbzFOMjZsYlBHUncySy92emR1cEczeGJLVnVOelZxbm1uRnhUdFhPQndkUFYwLzhVQmRQQjRBQXdDSS8rc0d6d2NRQUFjQUlBQTRBQ3RBRlRRbkNYSUZBZ0VCQndjdElRZ0lGUUp5SEE4SmNnQXJNaXN5RVRNek0zd3ZNeGd2TXpNck1qQXhRU0UxSVJjaEZTTUhNeEVVRGdJaklpNENOUkV6RVJRZUFqTXlOalkxQVRNUkZBWUdJeUl1QWpVUk14RVVIZ0l6TWpZMk5RTlAvcmNEVVFMK282MGl5ejl6bWwxaXBudEUreDQyU3kxRFl6Z0NwL3Q1MElaWm1YQS96Qjg1VGk4L1lEVUdtSGg0Zm1yOEFIQ3Fjams1Y3Fwd0JBRDhBRUZnUHg0M2NGY0VBUHdBbGNwbU9YS3FjQVFBL0FCQllEOGVOM0JYQUFNQWN2L3JCZ01Gc1FBSEFDQUFPUUFyUUJVMEp3dHlCUUlCQVFjSExTRUlDQlVHY2h3UEMzSUFLeklyTWhFek16TjhMek1ZTHpNekt6SXdNVUVoTlNFWElSVWpCek1SRkE0Q0l5SXVBalVSTXhFVUhnSXpNalkyTlFFekVSUUdCaU1pTGdJMUVUTVJGQjRDTXpJK0FqVUMzLzdIQXpBRi9yR3RHOFE1WjQ1VVdKUnNQUElYS3pzbE9WVXdBazd4YXJ0M1U0bGpOc1FZTGtJcEprQXRHQVU1ZUhoL2dQMVhhWjVxTlRWcW5ta0NxZjFYTzFjNEhERm1Ud0twL1ZlTXUxODFhcDVwQXFuOVZ6dFhPQndjT0ZjN0FBSUFaLzZPQkxJRnhRQWhBQ1VBR1VBTUZoSU5BM0lsQUFBa0FRbHlBQ3ZOTXhFeks4d3pNREZsRlNJdUF6VVJORDRDTXpJV0ZoY2pMZ0lqSWc0Q0ZSRVVIZ016RVNNUkFwVmxyWWxnTTArVXpuNm84WUlCK2dFL2YyTktkRTRwR2pOS1l0cjZzc2M2YlppN2F3RVFodUNsV25UZW4yS0VRejV3bGxmKzdrWitaMHNvL2R3Q0pBQUNBRjMraXdQMEJFNEFId0FqQUJsQURCVVJEQWR5SUFBQUlnRUxjZ0FyelRNUk15dk1NekF4WlJVaUxnSTFOVFErQWpNeUZoWVZJelFtSmlNaURnSVZGUlFlQWpNUkl4RUNSWGUyZkQ4L2ZMWjJmc1J1NHpOY1BrUmVPUnNiT0dEWjhhdkFWWmJGY0NOd3haWlZaN2Q1UEdJNU8yVjlReU5EZm1RNy9lQUNJQUFBQVFCd0FBQUVrQVUrQUJNQUNMRVBCUUF2THpBeFFRTUZCeVVESXhNbE53VVRKVGNGRXpNREJRY0RKczRCSVViKzNiV3I0ZjdmUlFFbHpQN2VSd0VqdTZqbUFTVktBeXIrbHF4K3F2N0FBWTZyZmFzQmE2dC9xd0ZKL21xcmZRQUFBZnh3QktYL053WDhBQWNBRmJjR0JnUUVBUUlDQVFBdk15OFJNeEV6ZkM4d01VTWhGU2MzSVNjWHlmM2pxZ0VDSGdHcEJTTitBZXBzQVFBQUFmeDFCUmYvYXdZVkFCVUFFcllCRkJRUEJvQUxBQzhhekRJekVUTXdNVUV6TWo0Q016SVdGUlVqTlRRbUl5SU9BaU1qL0hVZVVJRnhiVHR2ZjRNOE15eGhjNDFYSUFXWkpUSWxhMjhrRWpjekpURWxBQUFCL1lFRkdmNXpCbUlBQlFBS3NnQ0FBZ0F2R3Mwd01VRW5OVE1IRi80a283Z0JPd1VadzRhWGNBQUIvYVlGR2Y2WEJtSUFCUUFLc2dHQUJBQXZHczB3TVVFSEp6Y25NLzZYbzA0NkFiZ0YzTU5DY0pjQUFBajZKdjdFQWNJRnJ3QU5BQnNBS1FBM0FFVUFVd0JoQUc4QUFFRWpORFl6TWhZVkl6UW1JeUlHQVNNME5qTXlGaFVqTkNZaklnWVRJelEyTXpJV0ZTTTBKaU1pQmdNak5EWXpNaFlWSXpRbUl5SUdBU00wTmpNeUZoVWpOQ1lqSWdZQkl6UTJNeklXRlNNMEppTWlCZ01qTkRZek1oWVZJelFtSXlJR0V5TTBOak15RmhVak5DWWpJZ2I5aEhGeFlXSnhjQzAyTlN3Q1VISnhZV0p5Y1N3M05DeTZjWEZoWW5Gd0xEYzBMY1Z4Y1dGaWNYQXNOelF0L2NCeGNXRmljWEF0TmpRdC9iOXljbUZpY1hBdE5qVXNzWEZ4WVdKeGNDdzNOQzJuY25GaFluSnhMRGMwTEFUelUybHBVeWc5UGY3RFUybHBVeWc5UGYzaFUybHBVeWc5UGYzUlUybHBVeWc5UGY2OFUybHBVeWc5UFFUeVUybHBVeWc5UGYzaFUybHBVeWc5UGYzUlUybHBVeWc5UFFBSStsSCtZd0dTQmNZQUJBQUpBQTRBRXdBWUFCMEFJZ0FuQUFCRk14Y0RJeE1qSnhNekFUVTNCUlVsRlFjbE5RRW5OeVVYQVJjSEJTY0JCeWNETndFM0Z4TUgvY3VKQzNwZ2xJZ01lbUFCMlEwQlRmb1pEZjZ6QlZkaEFnRkNSUHRyWVFMK3dFVUJYV0lSbEVFRHhXSVJsVUk4RHY2dEJnTU9BVkw4Sm9zTWZHS1hpd3g4WWdFRVl4Q1pSUHdwWXhHWlJRUU9ZZ0lCUmtYN1ZXTUMvcnRIQVAvL0FKTCtnQVhYQnlVRUpnRGNBQUFBSndDaEFSa0JQZ0VIQUJBRWVmL0lBQlZBRGdJakJBQUFtRllCRHdFQkFWNVdBQ3MwS3pRQS8vOEFoUDZBQk5vRjJnUW1BUEFBQUFBbkFLRUFrdi96QVFjQUVBTjgvOGdBRlVBT0FpTUVBUUNZVmdFUEFRRUJmVllBS3pRck5BQUFBdi9oQUFBRUl3WmdBQmNBR3dBYVFBd2FDeHNDY2dBWEZ3ME5DaElBUHpNUk15OHpLODR6TURGQklUSVdGaFVVQmdZaklSRXpFVE15TmpZMU5DWW1JeUVCRlNFMUFTNEJQbzNFWm1iRWpmNGk4dXhJVnljblYwait3Z0Z2L1VRREFHT3JiMit2WlFaZytsODJXREl3V1RrRGI2YW1BQUlBbEFBQUJNOEZzQUFEQUJzQUkwQVJBUUlGQUFNR0JnVUZFaEFUQW5JU0NISUFLeXN5RVRrdk14RXpNeEV6TXpBeFFRRUhBUU1oTlNFeU5qWTFOQ1ltSXlFUkl4RWhNaFlXRlJRR0JnTTNBWlpwL213VC9vVUJlMk42T1RsNlkvN1IrZ0lwcWV4OWZPMEQzdjVCWHdHKy9xSEhRSEZKUlhsSyt4Z0ZzSGZSaG8zS2JBQUFCQUI5L21BRUx3Uk9BQU1BQ0FBZUFEUUFKVUFVQUFNd0FRSXdKUm9QQzNJSEJuSWFCM0lHRG5JQUt5c3JLeEV6TWpJeUVUTXpNREZCQVFjQkF4RWpFVE1CRlJRT0FpTWlMZ0luTlQ0RE16SWVBZ2MxTkM0Q0l5SU9BZ2NWSGdNek1qNENBcjhCWjJuK21PZngzZ0xVTjJ1Y1ptV1hhRDhORFQ5b2xtUm1ubXcyOFJ3OFhVRkFYRDRpQndra1BWdEFRVnc3SEFHcS9sNWZBYUlDSC9yMkJkcjk3UlYyeVpWU1M0cTdjRkYzd294TVQ1SExrUlZMZ1dJM0sweGxPOEkzWDBncE9HT0NBQUFDQUk4QUFBUTNCeE1BQXdBSkFCVkFDZ0lHQmdNSkFuSUlDSElBS3l2T014RXpNREZCRVNNUkV4VWhFU01SQkRmeDZmMWIrd2NUL2Q0Q0l2NmR5UHNZQmJBQUFBSUFmUUFBQTJBRmR3QURBQWtBRlVBS0FnWUdBd2tHY2dnS2NnQXJLODR6RVRNd01VRVJJeEVURlNFUkl4RURZUExaL2lmeEJYZitBd0g5L3NQQS9JWUVPZ0FBQWdDWi9zVUVtZ1d3QUFVQUhRQVpRQXdHQndjVEVnSUZBbklFQ0hJQUt5c3lMek01THpNd01VRVZJUkVqRVJNMU16SWVBaFVVRGdJak5USStBalV1QXlNRU4vMWMrcXYraXQyZFZEcDd3NGxUYWpzWUFTNWFobGdGc01qN0dBV3cvTTNHUzVUWmpuZk9uRmUzUDJ5SFIyS1NZekVBQUFJQWZmN2pBOTBFT2dBVUFCb0FHMEFOQUFFQkN4Y2FCbklaQ25JTUN3QXZNeXNyTWhFNUx6TXdNVk0xTXpJV0ZoVVVEZ0lISno0Q0p6WW1KaU1CRlNFUkl4SE44cDcxaXlsYmoyWlpUMk12QVFGTWhsc0JpUDRuOFFIS3htL1Zuam1KaFdrYnFSdFRjRVJlZmtBQ2NNRDhoZ1E2QVAvL0FCWCttZ2dNQmJBRUpnRGFBQUFCQndKaEJya0FBQUFMdGdVYkRBQUFtbFlBS3pRQS8vOEFJUDZhQnNRRU9nUW1BTzRBQUFFSEFtRUZjUUFBQUF1MkJSc01BQUNhVmdBck5BRC8vd0NaL3BnRmZ3V3dCQ1lDUEFBQUFBY0NZUVFzLy83Ly93Q1AvcG9Fd1FRNkJDWUE4UUFBQVFjQ1lRTnVBQUFBQzdZREVRSUJBSnBXQUNzMEFBQUVBSkVBQUFVNEJiQUFBd0FIQUEwQUVRQXZRQmNQRGc0TERBUUVEQXdMQndjTEN3QVFBd2h5Q0FBQ2NnQXJNaXN5RWprdk15OFJNeEV6THhFU09SRXpNREZUTXhFakFUTVJJd0VoQVNFbklRYzNBU0dSKy9zQlY1NmVBZk1CTS80ZS9oZ2lBWnNJdHdITS9zSUZzUHBRQkV2OU9BUXQvTURaczZyOHdBQUVBSTBBQUFTc0JEb0FBd0FIQUEwQUVRQXRRQllQRGc0TEJBUU1EQXNIQndzTEFCQURDbklKQUFaeUFDc3lLeklTT1M4ekx4RXpFVE12RVRNUk16QXhVek1SSXdFekVTTUJJUUVoSnlFSE53RWhqZkh4QVV5VWxBR01BU3orYy81Q0h3RjBFTFlCYS83TEJEcjd4Z05UL2FVRFF2MTEyckdKL1o4QUJBQTBBQUFHb2dXd0FBTUFCd0FOQUJFQUkwQVJFQThQQ3dvS0F3NEdDSElOQndJREFuSUFLekl5TWlzeUVqa3ZNek1STXpBeFFSVWhOU0VSSXhFaEFTRW5Nd0VUQVRjQkFtRDkxQUxWK2dSbi9hLytuU0w2QWFnei9paWlBbU1Gc01EQStsQUZzUHpDMmdKaytsQUNtTUg4cHdBRUFEd0FBQVdrQkRvQUF3QUhBQTBBRVFBalFCRVFEdzhMQ2dvRERnWUtjZzBIQWdNR2NnQXJNakl5S3pJU09TOHpNeEV6TURGQkZTRTFJUkVqRVNFQklTY3pBUk1CTndFQ1VQM3NBb1B4QTdQK0dmN3RJTWtCSkJQK3U3MEJ4UVE2d01EN3hnUTYvWFhhQWJIN3hnSFlpZjJmLy84QWxQNmFCZFlGc0FRbUFDd0FBQUVIQW1FRWd3QUFBQXUyQXc4S0FBQ2FWZ0FyTkFELy93Q0UvcG9FelFRNkJDWUE5QUFBQVFjQ1lRTjZBQUFBQzdZRER3b0FBSnBXQUNzMEFBQUVBSlFBQUFlUEJiQUFBd0FIQUFzQUR3QWZRQThIQmdZS0FnTUREQXNDY2cwS0NISUFLeklyTWpJUk14RTVMek13TVVFVklTY1JGU0UxRXhFakVTRVJJeEVIai8yQXV2ejhQdnNFZy9zRnNNREEvYURIeHdKZytsQUZzUHBRQmJBQUFBUUFmUUFBQldzRU9nQURBQWNBQ3dBUEFCOUFEd2NHQmdvQ0F3TU1Dd1p5RFFvS2NnQXJNaXN5TWhFekVUa3ZNekF4UVJVaE53TVZJVFVURVNNUklSRWpFUVZyL2tNQ1YvM1BSdkVEaXZJRU9zREEvankrdmdIRSs4WUVPdnZHQkRvQUFnQ1gvc1FIOVFXd0FBY0FId0FaUUF3SUNRa1VCQWNDY2dZSWNnSUFMeXNyTWk4NUx6TXdNVUVSSXhFaEVTTVJBVFV6TWg0Q0ZSUU9BaU1uTWo0Q05UUXVBaU1GRS92OWV2c0VDUDZLM1o1VE9udkRpQUZUYWpzWUwxcUdXQVd3K2xBRTZQc1lCYkQ4ek1aTGxObU9kODZjVjdjL2JJZEhZcEpqTVFBQUJBQjkvdWNHdGdRNkFCUUFHQUFjQUNBQUkwQVJIaGNZR0FBQkFRc2RIQVp5R3dweURBc0FMek1yS3pJUk9TOHpNaEV6THpBeFFUVWhNaFlXRlJRT0FnY25QZ0kxTmlZbUl3RVZJVFV6RVNNUklSRWpFUU5sQVNDay9aQXBXcEZsV1U5aUx3RlJqMkQreC8zcE9mRURqUElCemNadTFwMDVpb1JwRzZnYlZIQkVYWDVBQW0zQXdQdkdCRHI3eGdRNkFBQUJBR2YvNndYZ0JjVUFRd0FkUUE0NURBd2pJZ055QUFFQkxoY0pjZ0FyTWpJUk15c3lNaEV6TURGbEZTSWtKZ0kxTlRRK0FqTXlIZ0lWRlJRQ0JnUWpJaTRDTlRVMFBnSXpGU0lPQWhVVkZCNENNekkrQWpVMU5DNENJeUlPQWhVVkZCNENCZURFL3NEbmZEeHVtMTVqb1hVL1o4RCs5cUtXOXE5ZlI0TzNialpYUENBM2FaVmZiNjk2UUJreFJpMHFRaTRaVTZIcnI4UnJ4UUVPbzlOMXg1VlRWSnJUZnM2WS92ekNiV204K3BIQmcrR25YczgrYnBWWHcyZXdna2xPaXJsczRsaUNXQ3N0VjM1UzEzYkZrVThBQUFFQVlQL3JCTXdFVHdCREFCMUFEamtNRENNaUIzSUFBUUV1Rnd0eUFDc3lNaTh6S3pJeUVUTXdNV1VWSWlRbUpqVTFORDRDTXpJZUFoVVZGQTRDSXlJdUFqVTFORDRDTXhVT0F4VVZGQjRDTXpJK0FqVTFOQzRDSXlJT0FoVVZGQjRDQk15cS92cXlYQzlXZTB0TmZsa3ZVWmJQZjNqRWprMDVhWkJaSVRVbUZTZEtha0pMZUZRc0R4NHFHeHdySFE5RGdidU5vRmFjMEhtQlc1cHlQMFY4cG1CL2M4V1VVbGViejNsT1pxMkFTTVlDS1Vsa08xQlBoMlUzTlY2QVM0RTBXVVFtSWoxVU1ZVlhsR3c4QVAvL0FDYittZ1VpQmJBRUpnQThBQUFCQndKaEE4OEFBQUFMdGdFUEJnQUFtbFlBS3pRQS8vOEFILzZhQkNVRU9nUW1BRndBQUFFSEFtRUMwZ0FBQUF1MkFROEdBQUNhVmdBck5BQUFBd0FwL3FFR3VBV3dBQU1BQ1FBUkFCMUFEZ2tORFFnS0NISUZFQXdDQXdKeUFDc3lNakl2S3pJeUVUTXdNVUVWSVRVQkF5TVJJelVGRVRNUklSRXpFUVBuL0VJR2p4UG5ndnhOL0FLRyt3V3d3TUQ3R2YzWUFWL0p5UVd3K3hjRTZmcFFBQU1BSi82L0JUb0VPd0FEQUFzQUVRQWZRQThDQXdNTkNnVUdjZ2dIQnhBRUNuSUFLekl5RVRNck1pODVMek13TVVFVklUVVRFVE1SSVJFekVUY0RJeEVqTlFMcS9UMzE4UUdwOFpNUzNvSUVPOERBKzhVRU92eUdBM3I3eHIvK0FBRkJ2Ly8vQUpIK21nV3BCYkFFSmdEaEFBQUJCd0poQkZZQUFBQUx0Z0lkR1FBQW1sWUFLelFBLy84QVlQNmFCS0lFT3dRbUFQa0FBQUVIQW1FRFR3QUFBQXUyQWhzQ0FBQ2FWZ0FyTkFBQUF3Q0JBQUFFM2dXd0FBTUFHUUFkQUNOQUVRTURDZ29WQWdJVkZRUWNDSEliQkFKeUFDc3lLeEU1THpNdkVUTVJNeTh3TVVFUkl4RUJNeEVVRmhZek1qNENOeFVPQXlNaUppWTFBVE1SSXdNTm5mNFIrejkrWHk1bVoyQW9KMXhsYURPbDhJSURZdnY3QkJEOUpBTGNBYUQrUFdkMU1BZ1BGUTNIREJZUENGL09wZ0hEK2xBQUFBTUFkUUFBQS9jRU93QURBQWNBR3dBalFCQUFBQmdZRFFFQkRRMEZDbklTQkFaeUFDc3lLekl2TTMwdkVUTVJNeGd2TURGQkVTTVJBUkVqRVJNVkRnSWpJaVltTlJFekVSUVdGak15TmpZQ2paMENCL0dLSzIxNFBZL1BjUEV3WWtzOWNHb0RMUDJnQW1BQkR2dkdCRHIrSWI4VEh4Tll0NDBCU1A2NFVXQXFFUjRBQUFJQWlRQUFCT1lGc0FBVkFCa0FHVUFNQVJjR0VSRVhHQUp5RndoeUFDc3JFVGt2TXhFek1ERmhJeEUwSmlZaklnNENCelUrQXpNeUZoWVZBU01STXdUbSt6OStZQzFtWjJFbkpsMWxhREttNzRQOG52djdBY05vZERBSUR4VU54d3dXRHdoZnpxYitQUVd3QUFJQUN2L3BCYlFGeEFBSkFEWUFKVUFTQlIwQkFSMGRCaHdjQ2lRVkEzSXZDZ2x5QUNzeUt6SVJPUzh6TXhFekx4RXpNREZUTXhRV0ZqTVZJaVltQVNJdUFqVTFORDRDRnpJZUFoVVZJVFVoTlRRdUFpTWlEZ0lWRlJRZUFqTXlOamNYRGdJS3NqRmtUb08xWFFQRm52R2pVbGljMEhtSjBJMUcvRU1Dd3lGSWRWUk9lVklxSzEyWGEzNnlOekFYYXFVRU9VZHBPcTlrdWZ3c1hLam1pZitJNHFWYUFWNngrcHFKdmlCUGltZzZQM0NTVlA5V21ISkJNUm5DRGlvaUFBTC95Ly9zQkpBRVRnQUlBRFVBSlVBU0JCd0JBUndjQlJzYkNTTVVCM0l1Q1F0eUFDc3lLeklTT1M4ek14RXpMeEV6TURGRE14UVdNeFVpSmlZQklpNENOVFUwUGdJek1oNENGUlVoTlNFMUxnTWpJZzRDRlJVVUhnSXpNalkzRnc0Q05hWm9iWHFwV0FNVGVNQ0lSMG1GczJsMXJYUTUvTHNDVndJYk5WUThQRjAvSUNkTWJFVlloektBSTNHaEExeGtkcUZjcXYwRlQ0N0FieWgvenBOT1RvM0NkV2V0RXpCYVJ5Z3pZSWRVS0VkNVdqTkdRSHN6WFRvQUF3Q1IvcndFN3dXd0FBTUFDUUFoQUNGQUVBb0dCZ3NJQndjWEZna0RBbklDQ0hJQUt5c3lMek01THpNek14RXpNREZCRVNNUklRRWhKek1CQVRVaE1oNENGUlFPQWlNbk1qNENOVFF1QWlNQmpQc0VTLzJTL3RZaTNnR3EvZWNCQm9qZW5sUTZmTWFMQVZOcU9oWXRXWU5VQmJENlVBV3cvTVBmQWw3OHdzMUtsTnFRYzg2Zlc3NUJiSVJEWVpGaU1BQURBSTMrNXdSQkJEb0FBd0FKQUI0QUlVQVFGaFVKQm5JR0Nnb0hDd3NCQXdaeUFRQXZLeEk1THpNekVUTXJMek13TVVFUkl4RWhBU01uTXdFQk5TRXlGaFlWRkE0Q0J5YytBalUwSmlZakFYN3hBN1QrQS80ZnN3RTYvZElCSTZQOWtDcFprR1paVDJJd1VJOWdCRHI3eGdRNi9YWGFBYkg5ZHNWbHpaMDVoWUJuR3FnYVVXcENYWFU0Ly84QUxQNkFCZFlGc0FRbUFOMEFBQUVIQUJBRWVQL0lBQXUyQXlRR0FBQ1lWZ0FyTkFELy93QWcvb0FFMndRNkJDWUE4Z0FBQVFjQUVBTjkvOGdBQzdZREpBWUJBSmhXQUNzMEFBQUJBSm4rU3dVVEJiQUFHUUFaUUF3WkNISVhBZ0lSQ2dVQUFuSUFLekl2TXprdk15c3dNVk16RVNFUk14RVVCZ1lqSWlZbk54WVdNekkyTmpVUklSRWptZm9DaGZ0WG9YQWtQU1FPRkRnWEtUb2UvWHY2QmJEOWdnSisraGg3cWxnSENzTUdCaXBST2dLai9aVUFBQUVBZmY1TEJBY0VPZ0FaQUIxQUR4a0tjaGNDQWdBUkNnOXlCUUFHY2dBck1pc3lFamt2TXlzd01WTXpFU0VSTXhFVUJnWWpJaVluTnhZV016STJOalVSSVJFamZmRUJwL0pWbjI4aVBTSU9FenNVS2pvZS9sbnhCRHIrUEFIRSs0aDVxRllIQ3JzR0JpdFNPZ0gyL2tnQS8vOEFsUDZBQmVFRnNBUW1BQ3dBQUFFSEFCQUVnLy9JQUF1MkF4WUtBUUNZVmdBck5BRC8vd0NFL29BRTJRUTZCQ1lBOUFBQUFRY0FFQU43LzhnQUM3WURGZ29CQUpoV0FDczBBUC8vQUpUK2dBY3NCYkFFSmdBeEFBQUJCd0FRQmM3L3lBQUx0Z01iRHdBQW1GWUFLelFBLy84QWovNkFCanNFT2dRbUFQTUFBQUVIQUJBRTNmL0lBQXUyQXhrTEFRQ1lWZ0FyTkFBQUFRQlYvK3NGSXdYRUFDd0FHMEFOR2dzUkZCUUxKUUFEY2dzSmNnQXJLeklST1M4ekVUTXdNVUV5QkJZV0ZSVVVEZ0luSWk0Q05UVWhGU0VWRkI0Q016SStBalUxTkM0Q0l5SUdCeWMrQWdKM3FBRUFyRmhmcDkrQmwrZWJUd1FnL05vblZveGxXSWhkTHpCbXBYZUV2RHN3R0hDdUJjUmx0LzJYZTVmOXQyTUJYYkg1bW8vRElVK0taenRLZzYxaWUyT3RnMHN5R01JTkxDRUFBZ0JiLytzRVN3V3dBQWNBSlFBZlFBOEZDQWdFSlNVQUhCSUpjZ2NBQW5JQUt6SXJNaEU1RVRNekVUTXdNVk1oRndFak5RRWhBVGN5RmhZVkZBNENJeUl1QWpVekZCWVdNekkyTmpVMEppWWpJNUVEbHdIK0hLY0JhZjJLQVEybHBlaDdUSXU4Y0Z1dmoxVDdQR3hLVkhZL1JJWmdpUVd3b2YzWGR3R0wvbklKYTgyVVpxQnRPVEZub1hBK1p6MDhhRUZsZmpzQUFnQmQvblVFUndRNkFBY0FKUUFmUUE0SUJRVUVKU1VBSEJnU0J3QUdjZ0FyTWkvTU14STVMek16RVRNd01WTWhGd0VqTlFFaEFUY3lGaFlWRkE0Q0l5SXVBalV6RkJZV016STJOalUwSmlZakk0NERrd0wrSTZrQll2MlBBUStocGVsN1RJbThiMXF2alZUeVBYQkxWbmhBUlloaWlRUTZtdjNPZHdHVi9tWUlhc3VUWnA5dE9URm5vVzlBYVQ4OWEwTm1menIvL3dBcy9rc0VoUVd3QkNZQXNVNEFBQ1lDTnA4b0FBY0NaQUV3QUFELy93QWova2NEbWdRNkJDWUE3RTRBQUNjQ052K1cvM1lBQndKa0FRTC8vUC8vQUNiK1N3VlRCYkFFSmdBOEFBQUFCd0prQThnQUFQLy9BQi8rU3dSV0JEb0VKZ0JjQUFBQUJ3SmtBc3NBQUFBQkFFOEFBQVI1QmJBQUdBQVN0d01BQUFzUURRSnlBQ3N2TXprdk16QXhRU0VWSVNJR0JoVVVGaFl6SVJFekVTRWlKaVkxTkQ0Q0FsNEJiZjZUWUhvNk9ucGdBU0Q3L2VXbTdIMUhpTU1EbWNkSmRVTkZlVXdFNmZwUWVOR0daS2Q4UXdBQUFnQm9BQUFHclFXd0FCZ0FMUUFmUUE0YkN3c1FKU1VEQUFBYUVBMENjZ0FyTHpNNUx6TXpMeEV6RVRNd01VRWhGU0VpQmdZVkZCWVdNeUVSTXhFaElpWW1OVFErQWdFak5UYytBamMyTGdJbk14NENCdzRDQW5jQmJmNlRZSGs2T25sZ0FTSDYvZVdtN0gxSGlNTUM1NHlNU1ZvcUFnRUlEeGNQOUJJZkZBSUNjTXdEbWNkSmRVTkZlVXdFNmZwUWVOR0daS2Q4US94bnhnRUJUSHBGSjE5bVh5Y3poSVUyajlKeUFBTUFYLy9wQm5zR0dBQVdBQ3NBUndBZFFCQXpSQXR5T3kwQmNoMFNDM0luQmdkeUFDc3lLeklyTHlzeU1ERlROVFErQWpNeUhnTVhGUTRESXlJdUFqY1ZGQjRDTXpJMk5qYzFMZ01qSWc0Q0JSRXpFUVlXRmpNK0F6YzJKaWN6RmhZSERnTWpCaVltWHpkcm5tZExlRnhES2dvTVBHT09YMldkYkRmeUdqbGJRVkp0UHdzSEpqOWRQa0ZjT1JzQnZ2SUJJMEVzUEZvL0lRSUNJUjdyR3lvQ0FrK0lybUp6cUY4Qit4ViswcHBVTWw2RW8yQkRkTCtMUzA2T3dZZ1ZSM2xiTWtkNVRMVTdhRTB0TzJtSzlnU3crMUEzVlRBQk1sMkRVbVRMWkdITFo0dlBpRVFDVGFvQUFBSUFQZi9wQmVRRnNBQWdBRVlBSVVBUUtDY25BZ0VCRGpKRENYSTZEUTRDY2dBck1pOHJNaEU1THpNekVUTXdNVUVqTlRNeU5qWTFOQzRDSXlFMUlUSWVBaFVVRGdNSElnWUdCd1lHRXpVMU5DWW1JemN5SGdJVkZSUVdGak0rQXpjMkppY3pGaFlIRGdNakJpWW1BYi9kcUdoK09oNUJhRW4rb3dGZGY4T0VSQ0ErWEhoTEFnY0hBeWdZekRabFJoS0VzR2t0R2pJaU5GTTRId0VDSWg3MUdpc0NBaytHckdCcG1sWUNaOGt6Wmt3d1RUZ2R5VFZwbVdZNFlWTkJNUkFXRlFFSkJQN05Ba0JIYVR4M05GK0JUVVFuUENNQk1WMkFUMlRMWkdITFo0clBpVVFDUTVVQUFBSUFMLy9rQlFFRU9nQWRBRUlBSlVBU1BqMDlHd0lCQVEwcUtpSXpDM0lNRFFaeUFDc3lLekl5THhFNUx6TXpNeEV6TURGQklTY3pNalkyTlRRbUppTWhKeUV5RmhZVkZBNENCdzRDQndZR0JUVUdGak0rQXpjMkppY3pGaFlIRGdNakJpNENKelUwSmlZak56SVdGaFVCaS83N0FycEZWQ2dvVjBYKytnWUJESXpFWmlORlpVRUNCUVVESWc4QlhRRWpNQ3hGTUJvQkFpRWY2eG9zQWdKRmRaWlRVSGhTTFFRa1JqTWxpNTFCQWFHNElqNHFLMFVvdjB5UlpUSlNRREFSQVI4Z0FnZ0R1Z0VvTmdFblIyVkFUYVZOVGFKUWNLaHZOd0VhT2wxQlRDZzVIb1JCY1VrQUFBTUFTdjYyQkQ0RnNBQWZBRFFBUHdBZlFBNDZPVDhzREEwQ2NpRWdJQUVCQWdBdk14RXpFVE1yTWk4ekx6TXdNVUVoTlRNeU5qWTFOQ1ltSXlFbklUSVdGaFVVRGdNSERnSUhEZ0lITnpJV0ZoVVZGQllXRnhVakxnSTFOVFFtSmdFVkZBWUhKejRDTlRVQnFmN3V6bVY3T2poNFh2N2NBd0Vub3VWNEhUbFdjRVVDQ0FZREdoVVFNU3lxd2xBTkhoejRIaHdHT200Q1kyWlVnUnd1SEFKZHdEWm5TVWhxTzhCaXZJZzVZRkpDTVJFQkV4SUJCZ2tGQTRGZ3FHeDRJbFJNR1JjYllXQVlkRXh1Ty82S3JXYlhSMHd0VzJnL3RnQUFBd0J6L3FnRUhBUTZBQjRBTXdBK0FCNUFEamdnSHg4Q0FRRStLd29NRFFaeUFDc3lQek01THpNekVUTXZNREZCSVRVek1qWTJOVFFtSmlNaEp5RXlIZ0lWRkE0Q0J3WUdCdzRDQnpjeUZoWVZGUlFXRmhjVkl5NENOVFUwSmlZRkZSUUdCeWMrQWpVMUFkeisxZXRIV3l3c1cwZisyd1FCS1dtbWRUMG1URzlKQkFnRUZ3NE1SVHFUcFVVSUZCTDVFeEFETFZnQ0xtWlVnUnd1SEFHZHJ5UkNMQzFJS2I0dVYzdE9ObGRHTkJFQklBSUVDQWNCZTBxQlUxWVJPemdRRUJCRVF3NVVORW9teEsxbTEwZE1MVnRvUDdZQUFBTUFRdi9yQjMwRnNBQVJBQlVBTWdBZFFBNG1KaDR2Q1hJWEZBQVZBbklMQ0FBdk15c3lNaklyTWpJdk1ERkJNd01PQkNNak5UYytCRGNCRlNFMUFSRXpFUlFlQWpNeVBnSTNOaVluTXhZV0J3NERJeUltSmdGNStpTUhLRVJwa0dGQktEUk5OeU1WQlFMby9ZVUNQdnNUSlRNaE9WYzlJUUVDSVI3MUdpc0NBbENJcjJGMnIySUZzUDB0bi9Lc2JUUEhBd1FyVllqRWd3S1R5Y243dXdSRis3c3BSREVhTWx1QlVHVExaR0hMWjR2UGlFUk5xZ0FEQUQvLzZ3WllCRG9BRVFBVkFETUFIMEFRSnljZUx3dHlGeFFBRlFaeUN3Z0tjZ0FyTWlzeU1qSXJNakl2TURGQk13TU9CQ01qSnpjK0JEY0JGU0UxQVJFekVSUWVBak15UGdJM05pWW5OeFlXQnc0REl5SXVBZ0VuN2gwR0lqdFVjRVpMQVNZbE5pWWFEd1FDUnY0VkFhbnhGU2czSXk5SU1oc0JBaUVkNmhvc0FnSkllWjFYV0pCb09BUTYvZWwzdFlGUUpzWURBeUUrWW9aWkFjN0N3djB1QXRMOUxpbEdNaHNzVW5OSVg4QmVBVjNBWVgrL2ZqNHJYSkFBQXdDVS8ra0hmQVd3QUFNQUJ3QWpBQ0JBRVJZV0RoOEpjZ2dDY2dBREF3WUlCQUp5QUNzL09TOHpLeXN5TWk4d01VRWhGU0VETXhFakFUTVJGQllXTXo0RE56WW1Kek1XRmdjT0F5TUdKaVluQVZFQzl2MEt2ZnY3QTNiN0lUNHNPVmM5SVFJQ0loNzBHeXNDQWxDSXIyRjFxbUFIQXpMSEEwWDZVQVd3KzdzMlV5OEJNVnVCVUdUTFpHSExaNHZQaUVRQ1RxdUpBQUFEQUhULzZnWlhCRG9BQXdBSEFDVUFJa0FTR1JrUUlRdHlDUVp5QXdJQ0JRY0djZ1VLQUQ4ckVqa3ZNeXNyTWpJdk1ERkJGU0UxRXhFakVRRVJNeEVVSGdJelBnTTNOaVluTnhZV0J3NERJd1l1QWdOQi9lTkM4Z0toOGhRb09DTXZTREliQVFJaEhlb2FMQUlDUjNxZFYxbU1aVGtDZkwrL0FiNzd4Z1E2L1M0QzB2MHVLVVl5R3dFc1VYTklYOEJlQVYzQVlYKy9majRCS2x5U0FBRUFYUC9yQkw4RnhRQXJBQlZBQ2hJTEEzSWxKUjBBQ1hJQUt6SXlMeXN5TURGRklpNENOUkUwUGdJek1oWVhCeVltSXlJT0FoVVJGQjRDTXo0Q056WW1Kek1XRmdjT0FnSzdoOStpVjFlaTM0ZDBya004UVpGWFU0UmRNREJkaEZOVWREMENBaDBYOUJRbkFnS1E2QlZkcCtHRkFRYUY0YWRkTEN5MUlTTkJjcGRWL3ZoV21ITkJBVDV5VGxlelZsYXhXWnJLWXdBQUFRQlYvK3NENndST0FDc0FGVUFLSVJvSGNnY0hBQThMY2dBck1qSXZLekl3TVdVK0FqVTBKaWN6RmhZSERnSWpJaTRDTlRVMFBnSXpNaFlYQnlZbUl5SU9BaFVWRkI0Q0FsczhReDRKQ3VvTEVRRUNhYk54Zk1LRVJFSi91WGhnalN3dExuaEdSV0UrSEI5Q2Fxd0JKRDhzTlhNMU5uQTNjcFpKVjVmRGJDcHN3NVpYSWgrNkhCNDlaWHMrS2o1OFpUMEFBQUlBSWYvcEJWY0ZzQUFEQUNBQUYwQUxGQlFNSFFseUJRSURBbklBS3pJeUt6SXlMekF4UVJVaE5RRVJNeEVVSGdJelBnTTNOaVluTXhZV0J3NERJd1ltSmdTaCs0QUJ4UG9USkRRZ09sYzlJQUlDSWgzMEd5c0RBaytJcjJKMXFtQUZzTW5KKzdzRVJmdTdLVU14R3dFeFc0RlFaTXRrWWN0bmk4K0lSQUpPcXdBQ0FFVC82Z1RMQkRvQUF3QWdBQmRBQ3hNVEN4d0xjZ1VDQXdaeUFDc3lNaXN5TWk4d01VRVZJVFVCRVRNUkZCWVdNejRETnpZbUp6TVdGZ2NPQXlNR0xnSUR6L3gxQVVYd0pVVXZMMGd6R3dFQ0lSN3FHaXdDQWtoNW5WZFlqV1U2QkRxL3YvMHVBdEw5TGpkVk1BRWpRbDA3UzU1TFM1dE9jS2x2TndFcVhKSUFBZ0I5LytzRSt3WEZBQ0FBUHdBalFCRUFJajgvQWdJWE5URXNBM0lSRFJjSmNnQXJNc3dyekRNU09TOHpFams1TURGQk14VWpJZzRDRlJRZUFqTXlOalkxTXhRT0FpTWlMZ0kxTkQ0Q0JTTWlMZ0kxTkQ0Q016SVdGaFVqTkNZbUl5SUdCaFVVSGdJek13S2czTUJQZVZJcUxWZCtVVnlNVHZwaG9jZG5nZGVmVjBtTXpBRmUzSGJCaTB0UWx0R0JrdmFVKzAyRFVXMk1ReUpKY2xEQUF4R01IRGxiUGpGVFB5STlaejV3b1djeE9XMmdabHVOWURKWE9XU0VTMmFiYVRWanQ0QkFYalE3WWpzeVVEc2YvLzhBTFA1TEJmMEZzQVFtQU4wQUFBQUhBbVFFY2dBQS8vOEFJUDVMQlFJRU9nUW1BUElBQUFBSEFtUURkd0FBQUFJQVpBUndBc1lGMXdBRkFBOEFFcllGQlEwSEFnSUhBQzh6THhETk1pOHdNVUUxRXpNVkF5VTFNeFVVRmhjSEppWUJpM0xKNHY2QXFDWXFUVTljQklRVUFUOFYvc0w1V2xSQ1lpZElLSTMvL3dCUUFnNENZUUxPQkFZQUVRQUEvLzhBVUFJT0FtRUN6Z1FHQUJFQUFBQUJBSndDY0FTYUF6RUFBd0FJc1FNQ0FDOHpNREZCRlNFMUJKcjhBZ014d2NFQUFRQjdBbkFGekFNeEFBTUFDTEVEQWdBdk16QXhRUlVoTlFYTStxOERNY0hCQUFJQUNQNW1BNWNBQUFBREFBY0FEclFDQTRBR0J3QXZNeHJPTWpBeFFSVWhOUUVWSVRVRGwveHhBNC84Y2Y3K21KZ0JBcGlZQUFFQVpRUW1BWThHR3dBS0FBaXhCUUFBTDgwd01WTTFORFkyTnhjR0JoVVZaUzFSTkhnb013UW1pRCtIZXl4TFA0dFhpUUFCQURjRUJRRmhCZ0FBQ2dBSXNRVUFBQy9OTURGQkZSUUdCZ2NuTmpZMU5RRmhMVkEwZVNrekJnQ05QNGQ3TFV3K2kxZVBBQUFCQURYKzJ3RmhBTThBQ2dBSXNRVUFBQy9OTURGbEJ4UUdCZ2NuTmpZMU5RRmhBUzFRTkhvcUxzK0dQNGQ3TFVzL2kxZUlBQUFCQUVzRUJRRjJCZ0FBQ2dBSXNRWUFBQy9OTURGVE14VVVGaGNITGdJMVM4OHpLWGt6VVM0R0FJOVhpejVNTFh1SFB3RC8vd0J0QkNZQzN3WWJCQ1lCaEFnQUFBY0JoQUZRQUFELy93QkVCQVVDdFFZQUJDWUJoUTBBQUFjQmhRRlVBQUFBQWdBMS9zZ0NvUUQrQUFvQUZRQU1zeEFGQ3dBQUx6TE5NakF4WlFjVUJnWUhKelkyTlRVaEJ4UUdCZ2NuTmpZMU5RRmhBU3RPTkg0cUxnSVVBUzFRTkg0cU12NjFRbytDTGt0RWxGeTN0VUtQZ2k1TFJKUmN0d0FBQWdBL0FBQUVIUVd3QUFNQUJ3QVZRQW9HQndjQ0F3SnlBaEp5QUNzckVUa3ZNekF4UVJFakVRRVZJVFVDcFBFQ2F2d2lCYkQ2VUFXdy9vckV4QUFEQUYzK1lBUTZCYkFBQXdBSEFBc0FIVUFPQ3dvR0J3Y0JBd29TY2dNQ2NnRUFMeXNyRVJJNUx6TVJNekF4UVJFakVRRVZJVFVCRlNFMUFzSHlBbXY4SXdQZC9DTUZzUGl3QjFEK2lzREEvSWJBd0FBQkFJb0NCZ0pHQTljQURRQUlzUVFMQUMvTk1ERlROVFEyTXpJV0ZSVVVCaU1pSm9wM1ptZDRkMmRtZUFMYUoxNTRlRjRuWFhkMy8vOEFqZi8wQTI4QS9RUW1BQklIQUFBSEFCSUJ6d0FBLy84QWpmLzBCU2dBL1FRbUFCSUhBQUFuQUJJQnp3QUFBQWNBRWdPSUFBQUFBUUJlQWZBQmNnTHZBQXNBQ0xFRENRQXZ6VEF4VXpRMk16SVdGUlFHSXlJbVhrbEFRVXBLUVVCSkFtODNTVWszTjBoSUFBY0FVUC9yQjJNRnhRQVJBQ01BTlFCSEFGa0Fhd0J2QUNsQUUxOVdWakpvVFUxRUtTazdNZzBYRGc0Z0JRVUFQek16THpNL016TXZNek12TXhFekx6TXdNVk0xTkRZMk16SVdGaFVWRkFZR0l5SW1KamNWRkJZV016STJOalUxTkNZbUl5SUdCZ0UxTkRZMk16SVdGaFVWRkFZR0l5SW1KamNWRkJZV016STJOalUxTkNZbUl5SUdCZ1UxTkRZMk16SVdGaFVWRkFZR0l5SW1KamNWRkJZV016STJOalUxTkNZbUl5SUdCZ0VCSndGUVNJZGNZb3BKU1lsaFhZZEpueDlBTHpBK0hoOC9NQzgrSHdKRFM0cGZXMzlEUTM5WllJdExxQ0ZBTFRNOUd4OCtNQzgvSGdFNVJIOVpZWXBKU1lsZ1dvQkVrQ0UvTGpNOUd4OCtNQzgvSHY3cC9UbDhBc2NFUzAxVGlGSlNpRk5OVVloU1VvaWVUU2hJTEN4SUtFMHBTQzB0U1B4V1RsS0lVbEtJVWs1U2lGSlNpS0JPS0VndExVY3BUaWxJTEN4SWQwNVNpRkpTaUZKT1VvaFNVb2lnVGloSUxTMUhLVTRwU0N3c1NBTlMrNDVIQkhJQUFBSUFiQUNMQWpBRHFRQUVBQWtBRWtBSkFRVURDUUlJQmdZQUFDOHZGemt3TVVFREp6VUJBeE1qQVRVQ01QdkpBUjlXKzZYKzRRT3AvbTBCRFFHRi9uYitiQUdHRFFBQ0FGVUFpd0lhQTZnQUJBQUpBQTYwQWdnSUJRQUFMeTg1THpNd01YY1RGeFVCQXpNQkZRZFYrOHIrNGFhbUFSL0tpd0dUQVEzK2V3TWQvbnNOQVFBQUFRQXJBRzREYmdVbkFBTUFEck1BQXdJQkFId3ZNeGd2TXpBeFFRRW5BUU51L1RsOEFzY0U0UHVPUndSeS8vOEFUQUtRQXFrRnV3WUhBZGNBQUFLYi8vOEFOZ0tiQXI4RnNBWUhBakFBQUFLYi8vOEFVQUtRQXEwRnNBWUhBakVBQUFLYi8vOEFUZ0tRQXJnRnZRWUhBaklBQUFLYi8vOEFOd0tiQXEwRnNBWUhBak1BQUFLYi8vOEFTd0tRQXFvRnV3WUhBalFBQUFLYi8vOEFSd0tSQXFNRnV3WUhBalVBQUFLYkFBSUFad0tNQXdBRnVnQUVBQmtBRTdjV0N3UUVDd0lSQWdBdk16OHpMeEV6TURGQkVTTVJNeE1ITkQ0Q016SVdGaFVSSXhFMEppWWpJZ1lHQVNhL2xSTXZKa2xvUWxGMlFNQWhQU3M4U2lJRkFmMkxBeUgraVFGVWptazZQNGhzL2dVQnkwaFVKVDFsQVAvL0FFeitpQUtwQWJNR0J3SFhBQUQray8vL0FJTCtsQUlCQWFnR0J3SFdBQUQrbFAvL0FEMytsQUt3QWJRR0J3SFZBQUQrbFAvL0FEZitpUUtwQWJRR0J3SXZBQUQrbFAvL0FEYitsQUsvQWFrR0J3SXdBQUQrbFAvL0FGRCtpUUt0QWFrR0J3SXhBQUQrbFAvL0FFNytpUUs0QWJZR0J3SXlBQUQrbFAvL0FEZitsQUt0QWFrR0J3SXpBQUQrbFAvL0FFditpUUtxQWJRR0J3STBBQUQrbFAvL0FFZitpZ0tqQWJRR0J3STFBQUQrbEFBRUFHSUFBQVI2QmNRQUF3QWVBQ0lBSmdBaVFCQWlJU1VtSmdFYkZ4SUZjZ2tDQWdFTUFEOHpFVE1yekRNU09TOHp6akl3TVdFaE5TRUJFeFlHQnljK0FqVURORFkyTXpJV0ZoVWpOQ1ltSXlJR0JnVVZJVFVCRlNFMUJIcjc2UVFXL1hjWEFVZFJ0aUVqRFJWenlvT0x3bWJ5T0ZzMU5sY3lBVUw5TUFMUS9UREhBMGo5bEdDWEswWUlSVjBwQW5XS3cyaG10WGhMV1NnMmF2R05qZjczam80QUFBTUFJd0FBQmtzRnNBQURBQWNBRVFBaVFCQURBZ1lMRGhBSEJ3MFJEZ1J5Q2cwTUFEOHpLeklTT1M4NUVqa3p6akl3TVVFVklUVUJGU0UxQVJFakFSRWpFVE1CRVFaTCtkZ0dLUG5ZQlZMNi9YUDcrd0tQQThTYm0vN0ptNXNESS9wUUJCUDc3UVd3KytzRUZRQUFBd0NaLyt3R1FRV3dBQmNBR3dBdEFDTkFFaUlwRFJ3WkdBWnlBZ0VCRGd3UEJISU9EQUEvS3pJU09TOHpLekxNUHpNd01VRWpOVE15TmpZMU5DWW1JeU1SSXhFaE1oWVdGUlFHQmdFVklUVVRNeEVVRmhZek1qWTNGd1lHSXlJbUpqVUNJOXZiWTIwcUttMWprUG9CaXF2ZGJHemRBMnI5bjYveEhUUWlHUzhPQVI1UE0xT0FTQUlkeVVwM1FrRjBTZnNaQmJCMnpZS0YwWGdDSGJDd0FRbjc2REkxRWdZRHVBa09PNFp2QVAvL0FKVC83QWc5QmJBRUpnQTJBQUFBQndCWEJIWUFBQUFHQUNNQUFBWVlCYkFBQXdBSEFBMEFFZ0FYQUIwQUtrQVVIUlVLQ2hJR0J3TUNBaEVTQkhJVEd4c0lFUXdBUHpNekVUTXJFamt2TTg0eUVUTVJNek13TVVFVklUVUJGU0UxQVJNVE13TURBUk1USXdFQkV4TXpBUUVURXlNREF3WVkrZ3NGOWZvTEFjRVlzcE1KdlA3YXRSZWYvdGtEdXhpeCt2N1ovdG0wRlp1N0JBUXRtcHIrd3BxYS9SRUJXd1JWL3F2N3BRV3crNnIrcGdXdytsQUJYUVJUK2xBRnNQdXEvcVlFWHdGUkFBSUFmUUFBQmg4RU9nQVJBQ0lBSUVBUEZoTVRFUlFJRkFnUkNod1BBQVp5QUNzeU1qODVPUzh2RVRNUk16QXhVeUV5SGdJVkVTTVJOQzRDSXlFUkl5RWhFVE1SSVRJMk5qVVJNeEVVRGdKOUFwZGRpbG9zOGhzMFNpLytwL0VEeXYzVThRRmFQbGt4OFV5RXFnUTZMbUthYmY3Q0FUOC9WREFUL0lZQzEvM3BKRjFWQXFUOVhXeWJZaTRBQXdCYy8rd0VNd1hFQUNNQUp3QXJBQjFBRGlvckp5WW1CeGtTQlhJQUJ3MXlBQ3N5S3pJU09TOHp6akl3TVdVeU5qY1hCZ1lqSWk0Q05SRTBQZ0l6TWhZWEJ5WW1JeUlPQWhVUkZCNENFeFVoTlFFVklUVURURFptTGgwNmZrRjd6WlpUVTVuUmZ6NTFPeDBzWnpSTmUxWXRMMVo1YVB6eUF3Nzg4cklRRU1nT0VFaVAxWTRCVTVMYmxFb1JEc2tQRWk1ZGttWCtxMlNOV1NvQzlZbUovdlNKaVFBREFDTUFBQVhJQmJBQUF3QUhBQjhBS1VBVEJnY0RBZ0lVQ2hRWENRb0tGaGNFY2hZTWNnQXJLeEk1ZlM4ekVUTVJFamtZTHpQT01qQXhRUlVoTlFVVklUVUJJVFVoTWpZMk5UUW1KaU1oRVNNUklUSVdGaFVVQmdZRnlQcGJCYVg2V3dMZi9vVUJlMko3T1RsN1l2N1Mrd0lwcU81OWZlNEVwcHViNnB1Yi9tUEhRSEZKUlhsSyt4Z0ZzSGZSaG8zS2JBQUFBd0FxQUFBRUJBV3dBQU1BSEFBZ0FDMUFGUjhnSUJFREFnVUdCaG9DR2dJYUJCQVJCSElFREFBL0t6SVNPVGw5THk4Uk14RXpFVE1STXhFek1ERkJCeUUzQVFFbk16STJOalUwSmlZaklUY3pNaFlXRlJRR0JnY0JGUk1ISVRjRUF6SDhXREVCNC80SkFlOWRlVHc0ZW1UKytqYlFzZXAxVnNDZkFjeXNNdjBETVFSSHNiSDd1UUpSbFVOelIwMTJRc2hxeW85OXYzVU8vZDhOQmJDeHNRQUFCQUFrLyswRVNRV3dBQU1BRkFBWUFCd0FGVUFKQkFRRER3RUxEUU1FQUQ4L016TVNPUzh3TVVFUkl4RUJNeFVVQWdZR0l5SW1KemN5UGdJMUF4VUJOUVVWQVRVQjhQb0NXUHRYb2Q2SVJYbzI5VmVFV2k2RC9Wa0NwLzFaQmJENlVBV3cvVTlQcFA3NnVHRUxDTGxCZnIxN0FudkMvdlhDUU1MKzljRUFBZ0JQQUFBRkVnUTZBQnNBSHdBWVFBc0lGUlVlSHdaeURnRWVDZ0EvTXpNckVqa3ZNekF4WVNNMU5DNERJeUlPQWhVVkl6VTBFalkyTXpJZUF4VUJFU01SQlJMeElFQmFja1ZUaDJFMDhsdWozb1ZzdTVac09mNFg4ck5qb1hwVEtrS0F2WHl6c2FVQkJyaGhQM2lzM1lRRGlmdkdCRG9BQWdBckFBQUZNZ1d3QUJjQUd3QWFRQXdaR0FNQUFBNE1Ed1J5RGd3QVB5c3lFamt2TTg0eU1ERkJJVFVoTWpZMk5UUW1KaU1oRVNNUklUSVdGaFVVQmdZSEZTRTFBeUQ5Q3dMd1pYdzZPbnBpL3RMN0FpbW83SDUvN1k3ODh3SWZ4ejl5VEVSMlMvc1lCYkIyejRhUHkyeHJ4OGNBQUFRQWJ2L3JCWW9GeFFBaEFETUFSUUJKQUNWQUVrSW5NRWRIT1RBTmNoOEZEa2xKRmc0RmNnQXJNakl2RU13eUt6SXlMeERNTWpBeFFUTVVCZ1lqSWlZbU5UVTBOall6TWhZV0ZTTTBKaU1pQmdZVkZSUVdGak15TmdFMU5EWTJNeklXRmhVVkZBWUdJeUltSmpjVkZCWVdNekkyTmpVMU5DWW1JeUlHQmhNQkp3RUNCNmhDZ0Z4Y2drVkVnbHRkZ0VPb096MHBOaG9iTnlrOU9RRWJTWXBoWklsSFI0aGpZb3RKcUNGQUxUTStHeDgvTUM4K0g4RDlPWHdDeHdRalJYWklVb2hSVFZPSVVraDNSaTFKTEVrcFRTaElMRXo5SEU1U2lGSlNpRkpPVW9oU1VvaWdUaWhJTFMxSEtVNHBTQ3dzU0FOUys0NUhCSElBQUFFQVJmL3JBNDhGOWdBdUFCUzNHUmdZQVNRTUFBRUFMek12TXhJNUx6TXdNV1VWSWk0Q05SRTBQZ0l6TWg0Q0ZSVVVEZ0lFSXpVeVBnSTFOVFF1QWlNaURnSVZFUlFlQWdMYmRxOXpPUzVZZlU1RGNGTXVTSXpNL3ZlaG91cVZSd3NXSEJFV0loY01GVEpUd3RkQWQ2ZG1BcVppbTJ3NExWZDZUU2xleXIyWldiUm5wcjVXS3lBeUlSRVlNVWd5L1dFL1lrWWtBQVFBa0FBQUI3d0Z3QUFEQUJVQUp3QXhBQ1ZBRVNzd0xpb0NBeHNTSkFrSk1TNEVLaTBNQUQ4elB6TXpMelBjTXM0eUVSSTVPVEF4UVJVaE5RTTFORFkyTXpJV0ZoVVZGQVlHSXlJbUpqY1ZGQllXTXpJMk5qVTFOQ1ltSXlJR0JnRVJJUUVSSXhFaEFSRUhrdjJqS1ZXYWFXdVpWRk9aYW1xYlZhZ21VRHc3VGlZblRqdzdUeWIrelA3My9ndnlBUWtCOWdJdmo0OEIzbE5ubjFwYW4yZFRaNTVhV3A2NlV6MWVOalplUFZNOFhqYzNYZ0VVK2xBRUUvdnRCYkQ3NndRVkFBQUNBRzhEbFFSZEJiQUFEQUFVQUNSQUVRa0VBUU1HQ2djSEV4UUNBQU1EQmdZUkFDOHpFVE1STXo4ek14RXpFaGM1TURGQkVRTWpBeEVqRVRNVEV6TVJBUlVqRVNNUkl6VUQ3bnRBZkcrSmdvYUUvYUNKZUkwRGxRRjEvb3NCZHY2S0FoditnUUYvL2VVQ0cxNytSQUc4WGdBQ0FKYi83QVNSQkU0QUhRQW1BQmRBQ2lJWEZ3UWVEZ2NiQkFzQVB6TS9NeEk1THpNd01XVVhCZ1lqSWk0Q05UUStBak15SGdJVkZCUVZJUkVXRmpNeU5nRWlCZ2NSSVJFbUpnUVNBbFM4WW0yK2tGRlpscnRpWjdPSVRmMEFONHhPWGJ2KzZFdU5PUUljTklyR2FEUStXSnJNYzNUTG1saFJrc1YxQXhJYS9yZ3pPenNEYVVJNC91c0JIalE5QVAvL0FGdi85UVhNQlpvRUp3SFcvOWtDaGdBbkFaUUEvd0FBQVFjQ05BTWlBQUFBQjdFR0JBQS9NREVBLy84QVZ2LzFCbW9GdEFRbkFpOEFId0tVQUNjQmxBR29BQUFBQndJMEE4QUFBUC8vQUY3LzlRWmJCYWdFSndJeEFBNENrd0FuQVpRQmpnQUFBUWNDTkFPeEFBQUFCN0VDQkFBL01ERUEvLzhBWFAvMUJoc0ZwQVFuQWpNQUpRS1BBQ2NCbEFFM0FBQUJCd0kwQTNFQUFBQUhzUVlFQUQ4d01RQUFBZ0JoLytzRVJnWDNBQ2tBUHdBWlFBd3FBQUFTTlI4TGNna1NBSElBS3pJck1oRTVMek13TVVFeUZoY3VCQ01pQmdZSEp6NENNekllQWhJVkZSUU9BeU1pTGdJMU5UUStBaGNpRGdJVkZSUWVBak15UGdJMU5TNERBamxXbVRzS0xVRlRZamMxVTA4dUlDUlhjazFzc29oY01DcFVlWjFmZDdtQVFqNTZyNDFGWWo0ZEhUMWlSRVZpUGg0SkpqMVpCQVZDUUUrSGFrb21EQmtTc2hFaUZraUx5djcrbkR0d3lLUjVRVkNQd1hJVmE3ZUhTcjh6V0hFL0ZrTjRXelEvYnBOVVdoZzhOU1FBQUFFQXB2OFdCT2dGc0FBSEFBNjFCQWNDY2dJR0FDOHpLekl3TVVFUkl4RWhFU01SQk9qeS9hUHpCYkQ1WmdYZCtpTUdtZ0FEQUQvKzh3VERCYkFBQXdBSEFCQUFIMEFPRGdZR0J3Y1BBbklNQXdNS0Fnc0FMek16TXhFekt6SVJNeEV6TURGRkZTRTFBUlVoTlFFVkFTTTFBUUUxTXdURCs5Z0Q4L3dLQXZEOVc2UUNTdjIycEU2L3Z3WCt2Ny84c1IzOHI1RUN6d0xMa2dBQkFKd0NjQVB2QXpFQUF3QUlzUU1DQUM4ek1ERkJGU0UxQSsvOHJRTXh3Y0VBQXdBNy8vOEVmQVd3QUFRQUNRQU5BQlpBQ2drTEN3b0VDQWdCQW5JQUt6OHpMek1STXpBeFpRRXpBU01ERXhjakFRYzFJUlVDS3dGLzB2NG9uV3V6SUpMKzVJWUJVK2tFeC9wUEF3UDk0ZVFEQThMQ3dnQUVBR0gvNndmcUJFNEFGd0F2QUVjQVh3QWRRQTViTmpZZUV3dHlUa05ES3dZSGNnQXJNaklSTXlzeU1oRXpNREZUTlRRK0FqTXlIZ01YRlE0RUl5SXVBamNWRkI0Q016SStBemMxTGdRaklnNENCUlVVRGdJaklpNERKelUrQkRNeUhnSUhOVFF1QWlNaURnTUhGUjRFTXpJK0FtRkhnN2h5YXFWNlZEWU9EalpVZXFScGM3bURSKzBqUm1aQ1FXWk5OQjRFQkI0elRXaENRV1pGSXdhY1I0UzVjbXFrZWxRMkRnNDJWWHFrYTNHNWhFYnRKRVZsUVVOblRUUWVCQVFlTkUxbVFrRm1SaVFDRVJkd3g1bFdUMzZTaXpJak1veVZnVkJYbU1lSEYwcUFZalk2VzJKVUZTTVVVbUJhT1RoaWdVZ1hjTWVZVjFDQmxZd3lJektMa241UFZwbkhoeGRJZ1dJNE9WcGdVaFFqRlZSaVd6bzJZb0FBQUFIL3AvNUxBcWdHRlFBZkFCQzNHeFFCY2dzRUQzSUFLeklyTWpBeFJSUUdCaU1pSmljM0ZoWXpNalkyTlJFME5qWXpNaFlYQnlZbUl5SUdCaFVCamxXZWJ5TkFJaEVTTEJZdlFDRmFwblFtU3ljWUV5d2ZOVW9sVFhtZ1R3Z0t1Z1FJSTBzNkJQRjRwVlFNQ2JVRkJpcFBPUUFBQWdCbEFRWUVHQVA1QUJrQU13QWJRQXNYQklBS0VVQXhIb0FrS3dBdk14cmRNaHJlTWhyTk1qQXhVelUyTmpNMkZoY1dGak15TmpjWEJnWWpJaVluSmlZSElnWURKelkyTXpZV0Z4WVdNekkyTnhVR0JpTWlKaWNtSmdjaUJtWXZoVUZRWXo4N1hrcEJkeThCTDNSQlNsMDdQMlJRUVlrdkFTK0JRVkJqUHp0ZVNrRjhMeTkzUVVwZU96OWtVRUdFQXJmVU16a0NLeUFlSjBNODB6TTVKeDRnS3dKRS9pTFVNam9DS3lBZUowTTgxREk2Sng0Z0xBSkVBQUFEQUk4QWZ3UHpCTDhBQXdBSEFBc0FIMEFOQWdFQkNnb0xBQU1EQndjR0N3QXZ6aklSTXhFekVUTVJNeEV6TURGQkFTY0JGeFVoTlFFVklUVURrdjNDYkFJK3pmeWNBMlQ4bkFTRCsvdzhCQVR0eHNiK1dNYkdBQUFEQUQwQUFRT1FCRXNBQkFBSkFBMEFJa0FRQXdjR0FBUUlCZ1VKQ1FFQ0FnME5EQUF2TTN3UXppOHlNaGd2TXhjNU1ERlRCUlVCTlNVRkJ6VUJFeFVoTmZRQ2xmeTFBMHY5YTdZRFN3ZjhyUUxLM3N3QlJJZVU0UjJHQVVUOGJyaTRBQU1BZlFBQUE5NEVXQUFFQUFrQURRQWlRQkFEQndZQUJBZ0dBUUlDQlFrSkRRME1BQzh6ZkJET0x6SXlHQzh6Rnprd01VRWxOUUVWQlNVM0ZRRUZGU0UxQXgvOVh3TmcvS0FDbzczOG9BTlMvSzBDczkzSS9yeUhtT0VpaC82N2M3bTVBQUFDQUNVQUFBUHJCYkFBQndBUEFCMUFEZ1VJQ0E0SEVuSURDZ29MQVFKeUFDc3lNaEV6S3pJeUVUTXdNVk1CTXdjQkFSY2pOd0VCSnpNQkFTTWxBWCt1S1A3dUFSY2RwajhCRS83ckhxWUJnUDZDcGdMWEF0bTEvZHo5MjdLeEFpWUNKTFg5Si8wcC8vOEFuQUNxQWJZRkJnUW5BQklBRmdDMkFBY0FFZ0FXQkFrQUFnQmtBb1FDTWdRNkFBTUFCd0FRdGdZQ0FnY0RCbklBS3pJeUVUTXdNVk1SSXhFaEVTTVIrNWNCenBjRU92NUtBYmIrU2dHMkFBQUJBRWYvWkFGVUFRQUFDUUFLc2dTQUNRQXZHczB3TVVFVkZBWUhKelkyTlRVQlZFMURmU1FuQVFCTFY3dytTemg0VFZULy93QXJBQUFGR3dZVkJDWUFTZ0FBQUFjQVNnSkdBQUFBQXdBYUFBQUVIUVlWQUJBQUZBQVlBQnRBRHhnR0Z3cHlFeFFHY2cwR0FYSUJDZ0EvS3pJck1pcy9NREZoSXhFME5qWXpNaFlYQnlZbUl5SUdGUmNWSVRVaEVTTVJBYkx5YWNXSVVKVlFKVE44VVcxbjJmMlBCQVB4QklDRHRGNGlHc1FSSDJOaVJyQ3crOFlFT2dBREFDc0FBQVF1QmhVQUVnQVdBQm9BRzBBUEdSb0djaFFBY2c0R0FYSVRBUXB5QUNzeUt6SXJLekl3TVdFakVUUTJOak15RmhZWEJ5WW1JeUlHQmhVQkVUTVJBUlVoTlFIQzhXRzRnalNkcWtkb1hhQkJRRmd1QVh2eC9uUDlpZ1NiZTZoWERoVUx1UkVUSzFFNysyVUY1L29aQkRxd3NBQUZBQ3NBQUFhYUJoVUFFUUFWQUNZQUtnQXVBQ1ZBRkNNY0FYSXVLaFFWQm5JTkJnRnlMUmNYQVFweUFDc3lFVE1yTWlzeU1qSXJNakF4WVNNUk5EWTJNeklXRndjbUppTWlCZ1lWRnhVaE5RRWpFVFEyTmpNeUZoY0hKaVlqSWdZVkZ4VWhOU0VSSXhFQnd2RmJxblFrUmlFR0ZDOGJOMDhwNWYyRUJBUHhhTVdJVUpaUEpUSjlVRzFvMnYyUEJBUHlCS0o1cFZVSkNib0ZCQ2xPT1dpd3NQdkdCSUNEdEY0aUdzUVJIMk5pUnJDdys4WUVPZ0FBQlFBckFBQUdtZ1lWQUJFQUZRQW9BQ3dBTUFBcFFCY3JBSElrSEFGeUxoUVVMUlVHY2cwR0FYSXBGd0VLY2dBck1qSXJNaXN5TWhFekt6SXJNREZoSXhFME5qWXpNaFlYQnlZbUl5SUdCaFVYRlNFMUFTTVJORFkyTXpJV0ZoY0hKaVlqSWdZR0ZRRVJNeEVCRlNFMUFjTHhXNnAwSkVZaEJoUXZHemRQS2ViOWd3UUQ4V0czZ3pTZHFrZHBYS0JCUUZrdEFYcnkvblA5aWdTaWVhVlZDUW02QlFRcFRqbG9zTEQ3eGdTYmU2aFhEaFVMdVJFVEsxRTcrMlVGNS9vWkJEcXdzQUFBQkFBci8rd0Uwd1lWQUFNQUZ3QWJBQzBBSlVBVUlpa0xjaE1LY2drY0hBME5CQUZ5R0FJREJuSUFLekl5S3pJUk14RXpLeXN5TURGQkZTRTFBVElXRnhVak5TWW1JeUlHQmhVUkl4RTBOallCRlNFMUV6TVJGQllXTXpJMk54VUdCaU1pSmlZMUFZeitud0laZHZCZjhSbG1NelZKSnZGWnBnTDYvWit2OFIwMEl4a3VEeDVQTWxSL1NRUTZzTEFCMnowcTBGY05FeXBRT2Z0ZUJLSjVwVlgrSmJDd0FRbjc2REkxRWdZRHVBa09PNFp2QUFBRUFFbi83QWFDQmhRQUd3QWZBREVBWndBeFFCczdNa0JrWUZzTGNnRkZTVUFIY2lZdEMzSWVFQjhHY2hRS0FYSUFLeklyTWpJck1pc3l6RElyekRNU09Ua3dNVUVqTGdJMU5ENENNekllQWhVak5DWW1JeUlHRlJRZUFpVVZJVFUzTXhFVUZoWXpNalkzRlFZR0l5SW1KalVGTkNZbUp5NEROVFErQWpNeUZoWVZJelFtSmlNaUJnWVZGQjRDRng0Q0ZSUU9BaU1pSmlZMU14NENNekkyTmdQQmVDWllQalJsa0Z4N3BGOG84aXhTT2xkUUhDTWJBcmo5cEtueUhUUWlHUzhQSGs4elU0QkovaFVrWldKV2oyWTRPbXliWUlqRGFQRXJWa0UrVVNjVk1sZENmTE5nUFhTaFpKUE1hZWtFUTJVMlFWZ3VBdmRycXBkTlBXcFFMVVJ4aVVWRFd5OWNQenhtWm5mMnNMQlovS3MzUFJnR0E3Z0pEa1NVZVJna096QVVFelZNYUVSQ2RsbzBXNXRoSzBzdkp6NGxHeXNqSGc0YVVYOWhTSGRYTUdtbFdVTlBJeU05QUJVQVdmNXlCK3dGcmdBRkFBc0FFUUFYQUJzQUh3QWpBQ2NBS3dBdkFETUFOd0E3QUQ4QVF3QkhBRmNBY3dDTUFKb0FxQUFBVXlNUklSVWpJU00xSVJFakFTRVJNeFV6QlNFMU16VXpBU0UxSVFVaE5TRVJJVFVoQVJVak5STVZJelVCSVRVaEFSVWpOUUVoTlNFRklUVWhBUlVqTlJNVkl6VUJGU00xQnhFekVSUUdJeUltTlRNVUZqTXlOaVVqSnpNeU5qVTBKaU1qRVNNUk16SVdGaFVVQmdZSElnWUhCaFFISXpjek1qWTFOQ1lqSXpjek1oUVhGQll4SGdJVkZBWUJGUlFHSXlJbU5UVTBOak15RmdjMU5DWWpJZ1lWRlJRV016STJ5bkVCTmNRR3M4Y0JObS82RWY3TGNjUUdYdjdLeDIvK1VmN3FBUmI4NFA3c0FSVCs3QUVVQk05dmIyLzlNUDdyQVJYOEhYRUVWUDdyQVJVQmtQN3FBUmI2alhGeGNRZVRiK2hjYTFCWWJWMDRNQ2syL2NLV0FYWTdPenM3WFYrOFFsOHpJa0V2QVFRQ0RBNjVNSWswTXpNMGR3R1hEZ3dIS3pvZWFmNkVmMlpuZ1lCbVo0QmNTa0ZBU2t0QlFFa0VrUUVkZEhUKzQvbmhBVHZLY1hISy9zVnhjWEVHVjNUN2RQbjVBdkw2K3ZwZWNRSS8rZmtFR0hSMGRQenUvUHdCZVByNi9vajgvUE1CZXY2R1QxeFJVeTR0TjNKR0tTY3BIdjR2QWlVZ1FqUWlPQ1FFRXdFRUFmUkxMQ2NuTDBZQkJRRVRCQ1k1SWt4UEFVaHdZWHA2WVhCaGVuclJjRVJQVDBSd1JVNU9BQVVBWFAzVkI5Y0ljd0FEQUI0QUlnQW1BQ29BQUZNSkFnTXpORFkzTmpZMU5DWWpJZ1lITXpZMk16SVdGUlFHQnc0Q0V6VWpGUk0xTXhVRE5UTVZYQU84QTcvOFFYZktHU2xFWXFlVmY3RUN5d0krSnpnNU5TZ3ZQUjNKeW44RUJnUUNnd1BQL0RIOE1RTGVNejRiSllGU2dKZDlqVGN3UURRMFRSb2hPazcrdTZxcS9VZ0VCQXFhQkFRQUFRQTlBQUFDc0FNZ0FCd0FFTFVESEJ3TEV3SUFMOHd5TXhFek1ERmxGU0UxQVQ0Q05UUW1JeUlHRlNNME5qWXpNaFlXRlJRR0JnY0hBckQ5bndFZktURVhPRFZBUDdaSmgxNWZoVWN3VzBPTmtaRjZBUWtsUHpRU0t6ZEhNMGw2U0Rwc1REZGRYRGQyQUFFQWdnQUFBZ0VERkFBR0FDTkFGUVFGQlFNREx3Qi9BQUlQQUY4QXJ3RC9BQVFBQVFBdnpWMXhNaEV6RVRNd01VRVJJeEVITlNVQ0FiWEtBV3dERlB6c0FrQXhqM1lBQUFJQVRQLzFBcWtESUFBUkFDTUFETE1YRGlBRkFDOHp4REl3TVVFVkZBWUdJeUltSmpVMU5EWTJNeklXRmdNMU5DWW1JeUlHQmhVVkZCWVdNekkyTmdLcFRJaFpXNGhOVEloYVdvaE50aDAySmlZMUhSMDNKaVkxSEFIV21IQ1NSMGVTY0pod2traElrdjd1clQxTUpDUk1QYTArVENNalRBQUFBUUJQLy9RRHVBU2RBRElBRjBBS0ZCNGVKZ0V4Q2d3bWZnQS9Nejh6RWprdk16QXhaVE15UGdJMU5UUXVBaU1pQmdZVkZCWVdNekkrQWpjWERnSWpJaVltTlRRMk5qTXlIZ0lWRlJRT0FpTWpBUmtUYkp0a01SNDJTQ285V0M0c1dFTXdUVGNmQVVjQ1dKZGpmS3BZYXNTRlpxRnpQRkNoOUtVVnRDdFloVnJZUFZrOEhUeGxQVHBnT0I0eE9oMUVRNEJUWTdCemNydHhRWHV3Y0VtYjc2VlZBQUFFQUZmLzhBUEdCSjBBRWdBaUFEUUFSQUFkUUEwb0Z4ZEJEZzRGT1RGK0h3VUxBRDh6UHpNU09TOHpNeEV6TURGQkZBNENJeUltSmpVMFBnSXpNaDRDQnpRbUppTWlCZ1lWRkJZV016STJOaE1VRGdJaklpNENOVFEyTmpNeUZoWUhOQ1ltSXlJR0JoVVVGaFl6TWpZMkE4WkRkcUJlZmNkMFFYZWZYMStoZDBMeU1sbzdPMWt4TVZvOE8xa3gxVDF1bFZwYWxtNDlhYnAyZUxscjhTcE1OVFJMS1NsTk5EVkxLUUUvVTMxVUswdVdia3gzVlMwdFZYYzVNMGduSjBnek0wa25KMGtDT0VSdlVTc3JVVzlFYXBGTFM1RjJMRU1rSkVFdUxVUW1Ka1FBQVFBNEFBQUR6Z1NOQUFZQURyVUZBUVo5QXdvQVB6OHpNekF4UVJVQkl3RWhOUVBPL2YvK0FnSDlhQVNOaGZ2NEE4M0FBQUVBWC8vd0E5Z0Vtd0F4QUJWQUNSWWZIdzRuQ3dNQWZnQS9Najh6T1M4ek1ERkJNeFVqSWc0Q0ZSVVVIZ0l6TWpZMk5UUW1KaU1pQmdZSEp6NENNeklXRmhVVUJnWWpJaTRDTlRVMFBnSUM5Q0lRYTZOdk9SODRUUzA5V2pFdldVQkFaVHNDUVFOWW5teDlwVk5xd29ab3FIZEFWNm4yQkp2RUwyQ1NZcXMrWGo4Zk4xODZQRm96TVV3cVIwQ0RXMml4YkhLMWFrRjVxMnRRbWZHcFdBQUJBR2IvOEFQUUJJMEFJd0FYUUFvaENRa0NHUkVMQlFKOUFEOHpQek1TT1M4ek1ERkJKeE1oRlNFSE5qWXpNaFlXRlJRR0JpTWlKaVluTXhZV016STJOalUwSmlZaklnWUJSY0JLQXNiK0FpTWJiMFI5c2w5ZXdaVnZ4SDBHN2doc1ZFWldKekppUmxCUkFnNHVBbEhEK2d3Z1c2dDVhYlZ2VHBac1MwWTNYenc4WFRRcEFBSUFNd0FBQSswRWpRQUhBQXNBRlVBSkFBRUJDZ1FMZlFvU0FEOC9NeEk1THpNd01VRVZJU2NCTXdNQkFSRWpFUVB0L0ZBS0FpcTkwUDdiQWkzeEFidkFsd0w3L3EzK2dRTFMrM01FalFBQUFnQTkvL0FEd0FTZEFCMEFQUUFkUUEwZkFBQWRIaDRTTkNvTENSSitBRDh6UHpNU09TOHpNeEV6TURGQk16STJOalUwSmlZaklnWUdGU00wTmpZek1oNENGUlFPQWlNakZUVXpNaDRDRlJRT0FpTWlMZ0kxTXhRV0ZqTXlOalkxTkM0Q0l3RnJma2RjTFNkVFF6WlZNdkp6d1haaG9IVStObXFZWUtpb2JhSnFORVI5cG1GVW5YOUw4alJlUUVOY0xpQTdWVFVDcHlsSUx5dEVLQ0E4S21XUlR5cFVmRkU3WjFBdE4zTW9URzlHVW45WUxTaFZnbG9zUmlncFNURXRRU2tUQUFFQVF3QUFBOVlFblFBZUFCSzNDeFIrQXg0ZUFoSUFQek1STXo4ek1ERmxGU0UxQVQ0Q05UUW1JeUlHQmhVak5EWTJNeklXRmhVVURnSUhCd1BXL0ljQnFVSk5JbHhXUjEwczhtckhpNGEvWkNkS2FrUDR2NytqQVk0OVlVOGdSbG96V0RocXNHaFVuV3M3YW1Sb085WUFBQUVBbUFBQUFzVUVqUUFHQUFxekJuMENDZ0EvUHpBeFFSRWpFUVUxSlFMRjhmN0VBaElFamZ0ekEzVlR2cTBBQUFJQVdQL3dBOFFFblFBVkFDc0FEclVjRVg0bkJnc0FQek0vTXpBeFFSVVVEZ0lqSWk0Q05UVTBQZ0l6TWg0Q0F6VTBMZ0lqSWc0Q0ZSVVVIZ0l6TWo0Q0E4US9jNkZpWXFGMFFEOTBvR0ppb25RLzhob3lTVEF1U1RJYUdqTktMaTlKTWhrQ3JjMS91M284UEhxN2Y4MS91bnM4UEh1Ni9xSDFTV3RHSVNGR2EwbjFTbXhHSWlKR2JBQUFBd0JCQUFBRDlRU05BQU1BQ1FBTkFCeEFEQVFNREEwTkNIMEhBd01HQWdBdk16TVJNejh6THpNUk16QXhaUlVoTlFFQkl6VUJNeU1WSVRVRDlmeU5BMlA5QktnREFxSlUvTEsvdjc4RFNQdjVpZ1FEd01BQUFBTUFCZ0FBQkRnRWpRQUVBQWtBRFFBYlFCQUlCd01FQmdBS0RRZ0JEQXB5QlFGOUFEOHpLeEVYT1RBeFFRRWhBU01EQVFjakFRRVJJeEVCNUFGTUFRaitVWWp6QVU0aGh2NVJBbzd4QWdFQ2pQejNBd245Ym5jRENmMlYvZDRDSWdBQUFRQVRBQUFFU1FTTkFBc0FGVUFLQndvRUFRUUpCUU1BZlFBL01pOHpGemt3TVVFVEV5RUJBU0VCQXlFQkFRRTA4ZlFCR3Y2SkFZMys0ZjcvL1A3bUFZTCtpQVNOL21vQmx2MisvYlVCbnY1aUFrc0NRZ0FFQUNjQUFBWGxCSTBBQlFBS0FBOEFGUUFnUUE0U0JCQUJEZ1FNQVFnRUJnRjlCQUF2UHpNUk14RXpFVE1STXhFek1ERmxFek1YQXlNREV4Y2pBUUVUTXdFakF4TVhJd00zQWF2eWl3VCtrSXpGQTVqKzVRUVF4T3IrNXBmQzhndVAvZ1hJQThYRS9EY0VqZnhHMHdTTi9FY0R1ZnR6QkkzOE9jWUR5Y1FBQUFJQUNBQUFCSEVFalFBRUFBa0FEN1VIQXdVQmZRTUFMejh6RVRNd01VRUJNd0VqQXdFVEl3RUNUUUVsLy81SXMvNEJJa20wL2trQkxnTmYrM01FamZ5ai90QUVqUUFCQUduLzhBUWdCSTBBRlFBUHRRd1JCZ0I5QmdBdlB4RXpNakF4UVRNUkZBWUdJeUltSmpVUk14RVVGaFl6TWpZMk5RTXU4bnpXaVl2WGV2QTVha2xKYURnRWpmMEFocmxlWHJtR0F3RDlBRTFqTGk1alRRQUFBZ0FsQUFBRUdRU05BQU1BQndBUnRnWUhCd0VBZlFFQUx6OFJPUzh6TURGQkVTTVJJUlVoTlFLVjhRSjEvQXdFamZ0ekJJM0F3QUFCQUQvLzhBUHdCSjBBT1FBWVFBb0tKZzgyTVNzWUZBOStBRC9NTXkvTU14STVPVEF4UVRRdUFpY3VBelUwUGdJek1oWVdGU00wSmlZaklnWUdGUlFlQWhjZUF4VVVEZ0lqSWk0Q05UTVVIZ0l6TWpZMkF3WVhOMTlJYUo5c04wQjJvbUdOMEhQeE0ySktSMXd0R3p4Z1JXZWVhalZBZDZabVdyR09WZklsUldBNlNWMHJBVEVoTkNzbUVSay9WSEpNU1hsWk1GeWhhakpRTUNsQkpoNHdLQ1FSR0VKWmQweE5lVlF0TEZ5UFlUUkxMeFluUUFBQUFnQjFBQUFFT3dTTkFCa0FIZ0FZUUFvYkRRME1EQm9ZRndCOUFEOHlMek01THpNU09UQXhVeUV5SGdJVkZBWUdCd2NoSnlFeU5qWTFOQ1ltSXlNUkl5RUJOd0VWZFFITGE2cDNQMFI4VkUzK2F3SUJNRWhlTUM5aFNkbnlBc0wrNFA4QkpRU05MbG1EVmwrSFdCc3F3Q3hQTkRkUkxQd3pBZ1FDL2dVTEFBQURBRTMvTHdSc0JKMEFBd0FaQUM4QUhFQU1BQU1ES3lzS0NnSWdGWDRDQUM4L014STVMek1TT1JFek1ERmxCUWNsQVJVVURnSWpJaTRDTlRVMFBnSXpNaDRDQnpVMExnSWpJZzRDRlJVVUhnSXpNajRDQXhjQlQ1dit1QUhwUzR6QmQzVENqa3hNak1KMWRzR05UUEFuU210RVJHcEtKeWRMYTBORWEwb21yL3lFK3dJNE9JWFNsVTVPbGRLRk9JWFNsazVPbHRLOU9sdU1ZREl5WUl4Yk9scU5ZVE16WVkwQUFBRUFkZ0FBQkNnRWpRQVlBQk8zQWdFQkRRd1BmUTBBTHo4ekVqa3ZNekF4UVNFMUlUSTJOalUwSmlZakl4RWpFU0V5RmhZVkZBNENBbGordmdGQ1RtTXZMMk5POGZFQjRwUFFiVDU0ckFHYndDNVBNalJZTi93ekJJMWtyWEJVaUdFMEFBQUNBRTcvOEFSdUJKMEFGUUFyQUJDMkp3WWNFWDRHQ3dBL1B6TVJNekF4UVJVVURnSWpJaTRDTlRVMFBnSXpNaDRDQnpVMExnSWpJZzRDRlJVVUhnSXpNajRDQkc1TWk4SjFkY0tPVFUyTXduVjJ3WTFNOFNaTGFrUkRhMGtuSjB0clEwUnBTaVlDWWppRjBwVk9UcFhTaFRpRjBwWk9UcGJTdlRwYmpHQXlNbUNNV3pwYWpXRXpNMkdOQUFFQWRnQUFCR2NFalFBSkFCRzJBd2dGQVFjQWZRQS9NaTh6T1Rrd01VRVJJd0VSSXhFekFSRUVaL0w5OHZIeEFnNEVqZnR6QXlQODNRU04vTjBESXdBREFIWUFBQVdQQkkwQUJnQUxBQkFBRmtBSkFnNEtCUXdIQkFCOUFEOHlNakl2TXpNNU1ERlRNd0VCTXdFakFUTVRFU01CTXhFakVlSFFBVkVCVU5EK01xWDl4OHdsOFFSTXpmRUVqZnl2QTFIN2N3U04vTFArd0FTTiszTUJRQUFDQUhZQUFBT1NCSTBBQXdBSEFBKzFCZ01DQkgwQ0FDOC9FVE16TURGbEZTRTFFeEVqRVFPUy9ZbE04YisvdndQTyszTUVqUUFEQUhZQUFBUm5CSTBBQXdBSkFBMEFGMEFNQmdjTEJRd0lCZ29CQkFCOUFEOHlMek1YT1RBeFFSRWpFU0VCQVNjM0FSTUJOd0VCWi9FRDNQNFEvdWc0eGdGT0lmNS9zQUh4QkkzN2N3U04vYjcrNytMeUFYLzdjd0labGYxU0FBQUJBQ2IvOEFObEJJMEFFd0FOdEJBTUJ3RjlBRDh2ekRNd01VRVJNeEVVQmdZaklpWW1OVE1VRmhZek1qWTJBblB5YkxkeWZjQnQ4aXhUT1ROSkp3RnZBeDc4NG5tclcwK2pmajVQSkN4VkFBRUFoZ0FBQVhnRWpRQURBQW15QUgwQkFDOC9NREZCRVNNUkFYanlCSTM3Y3dTTkFBTUFkZ0FBQkdjRWpRQURBQWNBQ3dBWVFBb0NBd01FQ1FVSUJIMEZBQzgvTXhFekVqa3ZNekF4UVJVaE5STVJJeEVoRVNNUkE3ZjliRVR4QS9IeEFwM0F3QUh3KzNNRWpmdHpCSTBBQUFFQVZ2L3dCRXNFblFBcUFCWkFDU2txS2dVWkVINGtCUUF2TXo4ekVqa3ZNekF4UVJFT0FpTWlMZ0kxTlRRK0FqTXlGaFlYSXk0Q0l5SU9BaFVWRkI0Q016STJOelVqTlFSTEhYYStpbmpGa0UxS2ljQjJvTTl1RHVzS09HZFJSR3RKSlNsUGMwcGpaQlg4QW1MK01DRk1OVXVRMFlaSmh0R1FTMk91Y1R4WE1DOWVpVnRMVzR0ZUx5a1N5NjBBQUFNQWRnQUFBNkVFalFBREFBY0FDd0FhUUFzSEJnWUJDZ3NMQVFCOUFRQXZQeEU1THpNUk9TOHpNREZCRVNNUkFSVWhOUUVWSVRVQlovRUM2djNHQW52OWhRU04rM01FamY0UndNQUI3OERBQUFBREFELy9Fd1B3QlhNQUF3QUhBRUVBS1VBVEJ6NCtKQWdYTXdZR013c0NJQ0FYQUFBWGZnQS9NeThSTXhFelB6TXZFUkk1T1RNUk16QXhRUkVqRVJNUkl4RWxOQzRDSnk0RE5UUStBak15RmhZVkl6UW1KaU1pQmdZVkZCNENGeDRERlJRT0FpTWlMZ0kxTXhRZUFqTXlOallDZTVtWm1RRWtGemRmU0dpZmJEZEFkcUpoamRCejhUTmlTa2RjTFJzOFlFVm5ubW8xUUhlbVpscXhqbFh5SlVWZ09rbGRLd1Z6L3N3Qk5QclUvc3dCTk9vaE5Dc21FUmsvVkhKTVNYbFpNRnloYWpKUU1DbEJKaDR3S0NRUkdFSlpkMHhOZVZRdExGeVBZVFJMTHhZblFBQURBRG9BQUFRYkJKMEFBd0FIQUNZQUhVQU5CQVVGQVNJWmZnNENBZzBCQ2dBL016TVJNejh6RWprdk16QXhZU0UxSVFNVklUVWxGeFlHQmdjblBnTW5BeVkrQWpNeUZoWVZJelFtSmlNaURnSUVHL3hpQTU3Uy9QRUJqQW9FSmxWQ2tCd2pFd1lCQ1FNMWFwZGRpclphOFN4TUx5ZytLUlRBQWJtUWtHajZVNU56SkZZSFBGVmVLZ0VCYXFSeVBHUzFlRTFiS1NGQVhRQUFCUUFLQUFBRG1nU05BQU1BQndBTUFCRUFGUUFiUUFzR0J3TUNBaEVVQ2drUmZRQS9NejhTT1h3dk14ak9NakF4UVJVaE5RVVZJVFVsRXpNQkl3TUJCeU1CQVJFakVRTlcvUEVERC96eEFWZi8vZjZqaWFzQkFSdUgvcUlDUGZBQ1JKR1IySStQbFFLTS9QY0RDZjF1ZHdNSi9aWDkzZ0lpQUFBQ0FIWUFBQU9aQkkwQUF3QUhBQTYxQndZRGZRSUtBRDgvTXpNd01VRVJJeEVoRlNFMUFXZnhBeVA5aWdTTiszTUVqY0RBQUFBREFBZ0FBQVJ4QkkwQUF3QUlBQTBBRzBBTUNBeDlBQVVGQ1FJREF3a0tBRDh6RVRNUk14RXpQek13TVdFMUlSVUJBVE1CSXdNQkV5TUJBN0Q5R3dHQ0FTWC8va2l6L2dFaVNiVCtTY0RBQTEvOG9RU04rM01EWFFFdyszTUFBd0JPLy9BRWJnU2RBQU1BR1FBdkFCZEFDZ01DQWdvZ0ZYNHJDZ3NBUHpNL014STVMek13TVVFVklUVUZGUlFPQWlNaUxnSTFOVFErQWpNeUhnSUhOVFF1QWlNaURnSVZGUlFlQWpNeVBnSUROLzViQXR4TWk4SjFkY0tPVFUyTXduVjJ3WTFNOFNaTGFrUkRhMGtuSjB0clEwUnBTaVlDb2NEQVB6aUYwcFZPVHBYU2hUaUYwcFpPVHBiU3ZUcGJqR0F5TW1DTVd6cGFqV0V6TTJHTkFBSUFDQUFBQkhFRWpRQUVBQWtBRHJVQkNRb0VDSDBBUHpNL016QXhRUUV6QVNNREFSTWpBUUpOQVNYLy9raXovZ0VpU2JUK1NRTmYvS0VFamZ0ekExMEJNUHR6QUFBREFFWUFBQU5YQkkwQUF3QUhBQXNBRjBBS0J3WUdBZ29MZlFNQ0NnQS9Nejh6RWprdk16QXhaUlVoTlFFVklUVUJGU0UxQTFmODd3TEcvWVFDeC96dndNREFBZjdCd1FIUHdNQUFBd0IyQUFBRVl3U05BQU1BQndBTEFCTzNDZ1VMQndJQUEzMEFQek16TXpNdk16QXhRUlVoTlRNUkl4RWhFU01SQTdUOWJVYnhBKzN5QkkzQXdQdHpCSTM3Y3dTTkFBTUFSQUFCQStvRWpRQURBQWNBRUFBbFFCSU5DQWtEQ2dZUUVBNEhmUW9DREFNREFnb0FQek1STXhFelB6TXpFVE1TRnprd01XVVZJVFVCRlNFMUFSVUJJelVCQVRVekErcjh1QU1qL05rQjhQNWRwd0ZDL3I2bndMKy9BODNBd1AzT0ZmMjdrZ0c5QWF1U0FBTUFUd0FBQlZjRWpRQVZBQ2NBS3dBVlFBa1dBQUFyZlI0TUtnb0FQODB5UHpNdk16QXhRVE15SGdJVkZBNENJeU1pTGdJMU5ENENGeUlHQmdjVUZoWXpNekkyTmpVMEppWWpFeEVqRVFLVWZYelZuVmhZbmRWOGZYelVuVmhZbmRSMFo1UlFBVStXWjQ5bmxWQlFsV2N5OGdRWk9uV3VkSGF6ZHowOGQ3SjJkTEIwTzdzNWZHTm1menM4Z0daamVqa0JML3R6QkkwQUFnQlBBQUFGQ1FTTkFCa0FIUUFmUUE0VkZCUUdCd2NOSEE0QUhSME5mUUEvTXhFelB4STVFVE16RVRNd01VRXpFUlFDQkNNaklpNENOUkV6RVJRZUFqTXpNalkyTlFNUkl4RUVHUEdIL3dDMVRJYlFrRXp5SlU5N1YweDNqa0R6OFFTTi90SzgvdnFJVFpiYWpRRXUvdEpoazJReldyQ0JBUzc3Y3dTTkFBQURBRjRBQUFTQkJKMEFMQUF3QURRQUowQVRMVFFLTGpNS0tCSVNLUkVSTWpJeENnWWRmZ0EvTXo4ekVUTVJNek1STXo4elB6TXdNVUUxTkM0Q0l5SU9BaFVWRkI0Q0Z4VXVBelUxTkQ0Q016SWVBaFVWRkE0Q0J6VStBZ00xSVJVaE5TRVZBNDhoUjJ4TlMyeEdJUjA4VmpobnJYOUdSNGZGZlg3RmlVZEdmYXRtVG1RdzRnSE4rL0lCeXdKa0trcDZXakV4V25wS0tsbUtaa01TZFF4WWtjRjBJbW01alZGUmpiaHBJM1RBa1ZnTmRSbG5wLzRUd2NIQndRQUFBd0FqLyt3RlZBU05BQU1BQndBakFCeEFEUmNXQ3lBTkRRTUVDZ1VDQTMwQVB6TXpQeEk1THpNL016QXhRUlVoTlFFUk14RUROVDRDTXpJV0ZoVVVEZ0lqTlRJK0FqVTBKaVlqSWdZR0E5WDhUZ0ZjODFvc2RJZEhpODkwUVh5dGJUWlZPeDgxYWxFOWRuRUVqY0RBKzNNRWpmdHpBZnUrRXlBVFdiU0xaSkJjSzdrVUxFbzFUV0F1RVI4QUFBSUFULy93QkVNRW5RQURBQ3NBRjBBS0FBRUJDUjBVZmlnSkN3QS9Nejh6RWprdk16QXhRUlVoTlFFekRnSWpJaTRDTlRVMFBnSXpNaFlXRnlNdUFpTWlEZ0lWRlJRZUFqTXlOallDdy80M0FsYnlDWG5ZbVhlOWhVZElpTDEybTlSMkRQRUdObXhZUkdaRkl4OUNaMGRWYkRvQ3A4REEvdDEzdG1kT2tjK0JUb0hQazAxcHVuaEJZemd2WG9sYVQxaUpYakV2WUFBQUF3QWtBQUFIRndTTkFCRUFLUUF0QUNCQUR5Z3BLUndzSFFFdGZSOGNDZ3NJQ2dBL016OHpQek16TXhJNUx6TXdNVUV6QXc0RUl5TTFOejRFTnlVeUZoWVZGQTRDSXlFUk14RXpNalkxTkNZbUl5RTFBeFVoTlFFYjhoUUZIenRmaUYweUppbzlLaG9RQkFRL2tOQnZQM2lzYlA0Yzh2SnhiVEJpVFA2OGJQM0RCSTM5OTRmUm1tSXd5QU1ESUVGb21XaGdYNmx4Vkl4bk9BU04vRE4xVERKU004QUJsY0RBQUFBREFIWUFBQWNhQkkwQUZ3QWJBQjhBSVVBUEZ4WVdHeG9hSGdzZmZRMEtDaDRLQUQ4ekVUTS9NeEk1THpNekx6TXdNVUV5RmhZVkZBNENJeUVSTXhFek1qWTFOQ1ltSXlFMUJ4VWhOUk1SSXhFRlM1RFBjRUI0cTJ6K0cvTHpjV3d3WVV6K3UxLzlmRVR4QXZoZnFYRlVqR2M0QkkzOE0zVk1NbEl6d0Z2QXdBSHcrM01FalFBQUF3QWxBQUFGVlFTTkFBTUFCd0FiQUJsQUN4Z05EUU1UQkFvRkFnTjlBRDh6TXo4ekVqa3ZNekF4UVJVaE5RRVJNeEVETlQ0Q016SVdGaFVSSXhFMEppWWpJZ1lHQTliOFR3RmM4VmtzYzRkRmpORjA4alZyVUQxMmNBU053TUQ3Y3dTTiszTUIrNzRUSUJOVnU1bitxZ0ZXVm1ZdEVSOEFCQUIyL3FFRVlnU05BQU1BQndBTEFBOEFHMEFNRHd0OUF3Y0hEZ29DQWdvS0FEOHpMeEV6TXhFelB6TXdNV1VSSXhFbEZTRTFFeEVqRVNFUkl4RUM3UElCdXYxdFJ2RUQ3UEd6L2U0Q0VnM0F3QVBOKzNNRWpmdHpCSTBBQUFJQWRnQUFCQ2tFalFBWEFCc0FHMEFNQWdFQkRRc09DaHNhR2cxOUFEOHpFVE0vTXhJNUx6TXdNVUVoRlNFeUZoWVZGQVlqSXhFakVTRXlQZ0kxTkNZbU56VWhGUUphL3J3QlJFeGlNRzF4OC9FQjVHeXJlRUJ3ejhuOWNRTHB3QzVPTTFCcUE4MzdjelZqaWxaenBWbm12cjRBQXdBbi9xOEZGQVNOQUJBQUZnQWVBQ05BRUJvZEhRa1hDZ29jRkFrS0ZoRVJBSDBBUHpJUk16OHpNek1STXhFekx6TXdNVUV6QXc0RUJ5TTFNejRETnhNaEVTTVJJUUVoRVNNUklSRWpBVUx2Q2dRclNtQnVPa2NqS2tFdUdRTkpBdjd4L2ZQK3FBVHM4ZnoyOGdTTi9tS1Q0S1Z6VEJpL0xtQjZybjRCbXZ0ekE4Mzg4LzN2QVZIK3NBQUZBQnNBQUFZcUJJMEFBd0FKQUEwQUV3QVhBRFZBR1JRWEZ4RU1Dd3NIQnhFUkJnNE9Ed29DQWhVS0NRTUREMzBBUHpNUk16OHpFVE1TT1M4ek14RXpFVE1STXhFekVUTXdNVUVSSXhFaEFTRW5NeE1UQVRjSkFpRVRNd2NuQVNFQkE1dnhBMS8rZGY3VUViVDRFLzdvd0FHQys1Zitld0VkOTdRUmx2N3AvdFVCaGdTTiszTUVqZjFMMVFIZyszTUNBWmo5WndIWUFyWCtJTlVwL2Y4Q21RQUNBRVAvOEFQcUJKMEFIZ0ErQUIxQURSOENBZ0UrUGhVMEtnc0xGWDRBUHpNL014STVMek16RVRNd01VRWpOVE15TmpZMU5DWW1JeUlHQmhVak5ENENNekllQWhVVURnSWxNekllQWhVVURnSWpJaTRDTlRNZUFqTXlOalkxTkM0Q0l5TUNPYm1SVFY0cUxXQlBOVmszOFVONG4xMXBxWGhDUDNDWC91KzViS0p0TmtlQ3JtaFJvWVZSOFFRNllEdFJhREllTzFnNmpRSXNmU2RGTHlwRktoMDhMazU1VkN3b1QzZFBRM0ZUTFVZdFVtOUJWSDlWS3lSUWhGODFReUFxU1RBc1FTb1ZBQU1BZGdBQUJHMEVqUUFEQUFjQUN3QWJRQXdBQXdvSEN3b0JBZ1VGQ0gwQVB6TVJNek0vTXpNek16QXhkd0VYQVFFekVTTUJNeEVqdGdMRnNQMDhBaFR5OHZ6NzhmRmVCQzllKzlFRWpmdHpCSTM3Y3dBQUF3QjJBQUFFUVFTTkFBTUFDUUFOQUI5QURnd0xDd2NIQmdZQ0NRTjlDZ0lLQUQ4elB6TVNPUzh6RVRNUk16QXhRUkVqRVNFQklTY3pBUk1CTndFQmFQSURxZjRrL3UwZ3dnRXpFUDZucWdIYkJJMzdjd1NOL1V2VkFlRDdjd0lCbWYxbUFBTUFKQUFBQkZZRWpRQURBQWNBR1FBWVFBc1RFQW9IQWdNRENIMEdDZ0EvUHpNUk16TS9NekF4UVJVaE5TRVJJeEVoTXdNT0JDTWpOVGMrQkRjRG1QM0RBdnZ5L2JmeUZRWWZQRjZJV3pJbUtqd3FHaEFFQkkzQXdQdHpCSTM5OTRmUm1tSXd5QVFGSUVCb2wyZ0FBZ0FmLyt3RVFRU05BQklBRndBWFFBb0JGMzBWRmhZT0RnY0xBRDh6RVRNUk16OHpNREZCQVNFQkRnSWpJaVluTnhZV016STJOamNEQVJNSEFRSXNBUTRCQi81cUkxU0ViUmhCRFFJTE93NDBQeWtTdHdFSlhLMytQUUhZQXJYOGVVMkJUQU1DdmdJQ0tFSW5BMUg5c3Y3dVNBT29BQVFBZHY2dkJTVUVqUUFGQUFrQURRQVJBQjFBRFJFTmZRVUpDUkFMQ0FJQ0NBb0FQek12RVRNek14RXpQek13TVdVREl4RWpOVE1WSVRVVEVTTVJJUkVqRVFVbEU5NkVCUDF0UnZFRDdmTEEvZThCVWNEQXdBUE4rM01FamZ0ekJJMEFBZ0JEQUFBRUdBU05BQU1BRndBVHR4UUpDUUlERG4wQ0FDOC9NeEk1THpNd01VRVJJeEVURlE0Q0l5SW1KalVSTXhFVUZoWXpNalkyQkJqeVdTdHpmejJVMlhYeU5XdFFQblZ4QkkzN2N3U04vZisrRXg4VVZieVlBVnorcEZabExoSWVBQVFBZGdBQUJnOEVqUUFEQUFjQUN3QVBBQmxBQ3dzSEJ3OFFDZ1lHQXc1OUFEOHpNeEV6UHpNUk16QXhaUlVoTlFFUkl4RWhFU01SSVJFakVRVmcrNlVDdHZJRFJ2TDhTdkhBd01BRHpmdHpCSTM3Y3dTTiszTUVqUUFBQlFCMi9xOEcwQVNOQUFVQUNRQU5BQkVBRlFBblFCSVJEUTBWZlFRUUFnSVFFQXdNRXhNSkNBb0FQek16RVRNUk14RXpMeEV6UHpNUk16QXhaUU1qRVNNMU14VWhOUUVSSXhFaEVTTVJJUkVqRVFiUUV0MkVBL3VsQXJieUEwYnkvRXJ4d1AzdkFWSEF3TUFEemZ0ekJJMzdjd1NOKzNNRWpRQUNBQWtBQUFVa0JJMEFBd0FhQUJkQUNnWUZCUThTQ2hFQkFIMEFQekl5UHpNNUx6TXdNVk1WSVRVQklSVWhNaFlXRlJRR0l5TVJJeEVoTWpZMk5UUW1KZ2tCeXdHQS9yd0JSRXhqTUcxeTgvRUI1SkRRY0hEUUJJM0F3UDVyd0ROU01reDFBODM3YzJLdGNIR3BYd0QvL3dCMkFBQUZvZ1NOQkNZQ0dBQUFBQWNCOHdRcUFBQUFBUUIyQUFBRUtRU05BQllBRlVBSkZSWVdDZ3dKQ2dwOUFEOC9NeEk1THpNd01VRXlGaFlWRkFZR0l5RVJNeEV6TWpZMU5DWW1JeUUxQWxxUXozQnd6NUQrSFBIemNXMHdZa3ordkFMNFg2bHhjSzFpQkkzOE0zVk1NbEl6d0FBQUFnQTkvL0FFTVFTZEFBTUFLd0FYUUFvQ0FRRWNDQ2NMRXh4K0FEOHpQek1TT1M4ek1ERkJJVFVoQVI0Q016SStBalUxTkM0Q0l5SUdCZ2NqUGdJek1oNENGUlVVRGdJaklpWW1Kd09HL2pnQnlQMnFCemx0VlVkbVFoOGpSV1pFVjJ3MkJ2SU5kZFdhZHI2SFNFZUV2WGVaMkhrS0FlZkEvdDFHWUM4eFhvbFlUMXFKWGk4NFkwRjR1bWxOazgrQlRvSFBrVTVudG5jQUFBUUFkdi93QmtBRW5RQURBQWNBSFFBekFCMUFEaVFaZmk4T0N3TUNBZ1lIZlFZS0FEOC9Famt2TXo4elB6TXdNVUVWSVRVVEVTTVJBUlVVRGdJaklpNENOVFUwUGdJek1oNENCelUwTGdJaklnNENGUlVVSGdJek1qNENBcHIraWtQeEJjcE1qTUYyZGNLTlRVeU13blYyd294TjhTZEthMFJFYWtvbkoweHFSRVJxU1NjQ3BNREFBZW43Y3dTTi9kVTRoZEtWVGs2VjBvVTRoZEtXVGs2VzByMDZXNHhnTWpKZ2pGczZXbzFoTXpOaGpRQUFBZ0JDQUFBRUR3U05BQU1BSXdBWlFBc2pBQVFFR1JzV2ZSa0JDZ0EvTXo4ekVqa3ZNek13TVVFQklRRUZJUzRDSnk0Q0p5NENOVFErQWpNaEVTTVJJeUlHRlJRV0ZqTWhBblgrMFA3OUFUVUIrUDZSRmcwTUZnTUtDZ05oZno4OWRhVnBBYzN5M0d0aksxeEhBVEFDUy8yMUFrdU5BUWNLQkFFUUVBRVlXMzFNVVlGYUwvdHpBODFnU2pKTEtRQUFBd0FMQUFBRUJRU05BQU1BQndBTEFCdEFEQXNLQ2dNQ0JnY0hBMzBDQ2dBL1B6TVJNeEVTT1M4ek1ERkJFU01SSVJVaE5RRVZJVFVCMC9JREpQMktBUnY5WVFTTiszTUVqY0RBL2dHbXBnQUdBQnYrcndaNEJJMEFBd0FIQUEwQUVRQVhBQnNBTzBBY0FnNEJBUTRPQmhzWUdCVVNFaEFQREFrSkV3WUdHUW9OQndjVGZRQS9NeEV6UHpNUkVqa3ZNek16TXhFek14RXpFVE1STXk4Uk16QXhRU01STXdFUkl4RWhBU0VuTXhNVEFUY0pBaUVUTXdjbkFTRUJCbmpPenYwajhRTmYvblgrMUJHMCtCUCs2TUFCZ3Z1WC9uc0JIZmUwRVpiKzZmN1ZBWWIrcndJUUE4Nzdjd1NOL1V2VkFlRDdjd0lCbVAxbkFkZ0N0ZjRnMVNuOS93S1pBQVFBZHY2dkJINEVqUUFEQUFjQURRQVJBQ2RBRWhBUER3c0tDZ1lOQjMwQ0RnRUJEZzRHQ2dBL014RXpMeEV6UHpNU09TOHpNeEV6TURGQkl4RXpBUkVqRVNFQklTY3pBUk1CTndFRWZzek0vT3J5QTZuK0pQN3RJTUlCTXhEK3A2b0IyLzZ2QWhBRHp2dHpCSTM5UzlVQjRQdHpBZ0daL1dZQUJBQjJBQUFFOFFTTkFBTUFCd0FOQUJFQUtVQVRFQThQQ2dBTEN3b0RBd29LQmcwSGZRNEdDZ0EvTXo4ekVqa3ZNeThSTXhFekVUTVJNekF4UVRNUkl3TVJJeEVoQVNFbklRRVRBVGNCQWE2ZW5rYnlCRm4rSlA0OUlBRnlBVFFQL3FlcUFkc0RqZjErQTRMN2N3U04vVXZWQWVEN2N3SUJtZjFtQUFRQUlRQUFCVk1FalFBREFBY0FEUUFSQUNGQUR4QVBEd3NLQ2c0R0NnMEhCd01BZlFBL01qSVJNejh6T1M4ek14RXpNREZUSVJVaEpSRWpFU0VCSVNjekFSTUJOd0VoQWN2K05RSlo4UU9wL2lUKzdCL0NBVE1RL3FpcEFkb0VqY0RBKzNNRWpmMUwxUUhnKzNNQ0FabjlaZ0FBQVFCTy8rc0ZvQVNtQUVRQUcwQU1BQUVCTHhnTEpDTWpPZzErQUQ4ek14RXpQek16THpNd01XVVZJaVF1QWpVMU5ENENNekllQWhVVkZBNENJeUl1QWpVMU5ENENNeFVpRGdJVkZSUWVBak15UGdJMU5UUXVBaU1pRGdJVkZSUWVBZ1dnbS83MjA1UlBPbTJaWG1LY2J6cG51LzZZbE82b1drYUNzMjQ2WEVBaE5XYVhZR1NsZWtNV0xFTXRMRVV2R0ZLZTZhNi9ObXlmMDRJb2Q3cUNSRUdBdW5oR2plcXJYbEdkNDVJdWdNMlJUTWN2WElaWUpXV2JhalE2Y3FodU5GSjFTaVFtVFhCTExYNnpielVBLy84QUJnQUFCRGdFalFRbUFlTUFBQUFIQWpZQVB2N1RBQUlBRS82dkJJWUVqUUFEQUE4QUlrQVJDdzRJQlFRS0JnOTlBZ29CQVFvS0RRb0FQek1STXk4Uk16OHpFaGM1TURGQkl4RXpBUk1USVFFQklRRURJUUVCQkliTnpmeXU4ZlFCR3Y2SkFZMys0ZjcvL1A3bUFZTCtpUDZ2QWhBRHp2NXFBWmI5dnYyMUFaNytZZ0pMQWtJQUFBVUFJLzZ2QmpFRWpRQUZBQWtBRFFBUkFCVUFJa0FRRVEwTkZCVjlFQklNQ1FRSUFnSUlFZ0EvTXk4Uk16TXpQejh6TXhFek1ERmxBeU1SSXpVekZTRTFFeEVqRVNFUkl4RWpGU0UxQmpFVDNZUUQvV3hIOGdQdDhiVDhXc0Q5N3dGUndNREFBODM3Y3dTTiszTUVqY0RBQUFNQVF3QUFCQmdFalFBREFBY0FHd0FmUUE0QUdCZ05Bd01ORFFZSEVuMEdDZ0EvUHpNU09TOHpMeEV6RVRNd01VRXpFU01CRVNNUkV4VU9BaU1pSmlZMUVUTVJGQllXTXpJMk5nSGpuWjBDTmZKWkszTi9QWlRaZGZJMWExQStkWEVEUXYxK0E4Mzdjd1NOL2YrK0V4OFVWYnlZQVZ6K3BGWmxMaEllQUFJQWRnQUFCRW9FalFBREFCY0FGRUFKRHhJVUNRa0JmUUFTQUQ4L09TOHpQekF4Y3hFekVRTTFQZ0l6TWhZV0ZSRWpFVFFtSmlNaUJnWjI4VmtzY244OWxkaDE4VFpxVVQxMmNBU04rM01DQXI0VElCTlZ1cG4rb2dGZFZtWXRFUjRBQVFBTy8vQUZyQVNrQURRQUcwQU1HQmdkSFJFUklndCtMUUFMQUQ4eVB6TTVMek1STXk4d01VVWlMZ0kxTlRRK0FqTXlIZ0lWRlNFaUxnSTFNeFFXRmpNaE5UUW1KaU1pRGdJVkZSUWVBak15TmpjWERnSUR6b25jbkZOVWxNTnhmc2VKU1B2Mlo1aGtNYjh2WGtnREdVU0JYMFp2VGlnblU0ZGhhcFV4UUJkbGxoQk1qOGwrZEh6SGoweEhpc3FEbUR4dm1sMUZaamdYV29CRk1WdCtUb1JMZTFveEt4UzJEU1VkQUFFQVRmL3dCSDhFcEFBckFCVkFDUkVVRkJrTEN5UUFmZ0EvTWo4ek9TOHpNREZCTWg0Q0ZSVVVEZ0lqSWk0Q05UVWhGU0VWRkJZV016SStBalUxTkM0Q0l5SUdCeWMrQWdJMWh0bVpVbE9WeEhCL3hvbElBMzc5ZEVLRFhrWnZUU2tuVklkZ2FwVXdRQmRubVFTa1RJL0pmblI3eUk5TVNJcktncG5BRjFtQlJEQmJmMDZDUzN4YU1Tb1Z0ZzBtSEFBQUFnQkQvK3dENmdTTkFBY0FKZ0FiUUF3SUJRVUVKaVlkRXdzSEFIMEFQekkvTXprdk16TVJNekF4VXlFWEFTTTFBU0VCTXpJZUFoVVVEZ0lqSWk0Q05UTWVBak15TmpZMU5DWW1JeU5zQTFRQi9tU2RBUTc5MWdFY3NXeWpiRFpIZ3E1b1VhR0ZVZkVET21KQVRXWXlOV2xOaFFTTm12NWNkQUVLL3VnNVpINUdXb2RhTFNWUmhXQTFSaUlyVHpjNVR5b0FBQU1BVHYvd0JHNEVuUUFWQUNRQU5BQWJRQTRMSldvdEhXb3RMUXNBRm1vQUN3QXZMeXNTT1M4ckt6QXhRVEllQWhVVkZBNENJeUl1QWpVMU5ENENGeUlHQmdjR0JnY2hKaVluTGdJRE1qWTJOelkyTnlFV0ZoY2VBd0plZHNHTlRFeUx3blYxd281TlRZekNkVTEwU2d3QkFRSUNOZ0VDQVF4S2MweE9jMGdNQWdFQi9jc0JBZ0VKTDBoZUJKMU9sdEtGT0lYU2xVNU9sZEtGT0lYU2xrN0FRWDFhQ0E4SkNSSUlXWHRCL05KQmZsa0lEd2dJRVFoQ2FVWWxBQUFFQURvQUFBUWJCSjBBQXdBSEFBc0FLZ0FoUUE4R0J3TUNBZ2ttSFg0U0Nnb1JDUklBUHpNekVUTS9NeEk1THpQT01qQXhRUlVoTlFVVklUVUJJVFVoQVJjV0JnWUhKejRESndNbVBnSXpNaFlXRlNNMEppWWpJZzRDQTBuODhRTVAvUEVENGZ4aUE1Nzlxd29FSmxWQ2tCd2pFd1lCQ1FNMWFwZGRpclphOFN4TUx5ZytLUlFDdkpHUjY0K1AvaS9BQWlINlU1TnpKRllIUEZWZUtnRUJhcVJ5UEdLdmRVbFhKaUZBWFFBREFFWC84QU91Qko0QUl3QW5BQ3NBSFVBTkp5WW1LaXNyQnhrU2ZnQUhDd0EvTXo4ekVqa3ZNek12TXpBeFpUSTJOeGNHQmlNaUxnSTFOVFErQWpNeUZoY0hKaVlqSWc0Q0ZSVVVIZ0lURlNFMUJSVWhOUUxNTzFzekdUaHNQblc1Z1VSRGdMbDFQMms4RlRSZ08wTmdQeDRmUDJIRS9QZ0RDUHo0cnc4TnZBOFFRbis1ZDhCNXZvTkRFQkM3RUF3cFVIWk53a3h5VFNjQ1ZKR1I3cENRQUFBRUFIWUFBQWZDQko0QUF3QVZBQ2NBTVFBcFFCSXJNQzR0SkFrSk1TNTlLaTBLR3hJU0FnTUFMek16ZkM4ekdEOHpQek16THpNUkVqazVNREZCRlNFMUF6VTBOall6TWhZV0ZSVVVCZ1lqSWlZbU54VVVGaFl6TWpZMk5UVTBKaVlqSWdZR0FSRWpBUkVqRVRNQkVRZUcvY1k2VlpscWFwcFVVNXBwYTVwVnFDWlFQRHROSnlkT1BEdFBKdjZ0OHYzeThmRUNEZ0Zoa0pBQnBVbGlsMVpXbDJKSllaZFdWcGVxU1RkWU1qSllOMGszVnpNelZ3RUgrM01ESS96ZEJJMzgzUU1qQUFBQ0FDZ0FBQVN2QkkwQUdBQWNBQnRBQ3hzY0FnRUJEZ3dQZlE0S0FEOC9NeEk1ZkM4ekdNNHlNREZCSVRVaE1qWTJOVFFtSmlNakVTTVJJVElXRmhVVURnSUhGU0UxQXVqOVFBTEFTVjh1TGw5SisvRUI3STdNYlQ1MnFWSDlKd0dlc2pkWE1UTldOZnd6QkkxaHFtMVVpV1EyVHJLeUFBQUNBRGYvOVFLcEF5QUFHUUF6QUJsQUNoc0FBQmthR2dnUUxDUUFMelBNTWprdk16TVJNekF4UVRNeU5qWTFOQ1lqSWdZVkl6UTJOak15RmhZVkZBWUdJeU1WTlRNeUZoWVZGQVlHSXlJbUpqVXpGQll6TWpZMU5DWW1Jd0VPVnlzNEhUZEFNVU8yVUlaUFc0cE5SMzFVZFhWZGhFVlVrVnBMalZ1M1NEMUJQeU5BS3dIUkdTd2VKRGNwSlVka05ETmtTamxZTVNsU0sxaEdTbWcyTVdwV0p6ZzVLeVl1RlFBQ0FEWUFBQUsvQXhVQUJ3QUxBQmRBQ1FNSEJ3RUJCZ1VJQ2dBdnpESXlPUzh6RVRNd01VRVZJU2NCTXdjSEFSRWpFUUsvL1lFS0FXK1BuYkFCZHJZQk9aUjJBZnI2NGdIYy9Pc0RGUUFCQUZELzlRS3RBeFVBSVFBU3RoOEpDUVFER1JFQUx6UE1Namt2TXpBeFV5Y1RJUlVoQnpZMk16SVdGaFVVQmdZaklpWW1Kek1XRmpNeU5qVTBKaU1pQnZTUk5BSHMvcWtXRVVzc1YzaEFRb1ZuVElsWEE3WUNRelJFTkVWQ05UWUJYU1FCbEpHYUJoWTljbEZIZkU0M2FFZ3RLRXMxT1VZY0FBRUFUdi8xQXJnRElnQXRBQk8yRXh3Y0F3QU1KQUF2TTh3eU9YMHZNekF4UVRNVkl5SUdCaFVWRkJZV016STJOalUwSmlNaUJnWUhKejRDTXpJV0ZoVVVCZ1lqSWlZbU5UVTBQZ0lDRmgwTFdJUklJRHNvSlRjZ1Fqd3BQeVFCTUFFNWJreFRjRGxMaDF0ZGoxRkRlNllESXBRdmIyRjJNVUlnSXpra09UNGVMQllqTFY5QlJIZE5UWHhIU1kxb05YQ21iallBQUFFQU53QUFBcTBERlFBR0FBeXpCUUVHQWdBdnpESXlNREZCRlFFakFTRTFBcTMrcThBQlZmNUtBeFZtL1ZFQ2c1SUFCQUJMLy9VQ3FnTWdBQThBSHdBdkFEMEFGMEFLRENRN0F4UVVOQ3djQkFBdk04d3lPUzhYTXpBeFpSUUdCaU1pSmlZMU5EWTJNeklXRmdjMEppWWpJZ1lHRlJRV0ZqTXlOallURkFZR0l5SW1KalUwTmpZek1oWVdCelFtSmlNaUJoVVVGaFl6TWpZQ3FrK0pWMWFLVUZDSlZsZUpVTFVnTnlRa05oNGVOeVFrTngraVNYOVVVNEZKU1lGU1U0Rkp0eGN1SVRBMkdDOGdNVFRaVEdVek0yVk1SbUkyTm1JMkh5c1hGeXNmSGkwWEZ5MEJkejlkTXpOZFAwbGlNek5pVlJ3bkZpOHFHaWtYTWdBQUFRQkgvL1lDb3dNZ0FDNEFFN1lTR3hzS0l3RXRBQzh6ekRJNWZDOHpNREYzTXpJMk5qVTFOQ1ltSXlJR0JoVVVGaFl6TWpZMk5SY1VCZ1lqSWlZbU5UUTJOak15RmhZVkZSUU9BaU1qMVExWmRqd2ZOU1VsTmgwY09Ta3BPUjQzUG1nL1VuWTlTNGhhV1loT1BuU2xhQStIS1dOV21ERStIaVkvSmlVNUlCNHJFeDh5V2prL2RsSk9nVTFIa0d3MWM2UnBNZ0FBQVFDTkFvc0RMUU14QUFNQUNMRURBZ0F2TXpBeFFSVWhOUU10L1dBRE1hYW1BQU1BbUFSTkFxWUdtZ0FEQUE4QUd3QVpRQWtURFEwSEFRTURHUWNBTHpNemZDOFl6UkV6RVRNd01VRTNNd2NGTkRZek1oWVZGQVlqSWlZM0ZCWXpNalkxTkNZaklnWUJHYXJqOS83cGJrNU5hMnROVG01ak5DVWtNVEVrSlRRRjE4UEQzVTFrWkUxTVlXRk1KVEV4SlNjek13QUFCQUIyQUFBRHRnU05BQU1BQndBTEFBOEFHMEFNQ3dvS0JnOE9CMzBEQWdZS0FEOHpNejh6TXhJNUx6TXdNV1VWSVRVVEVTTVJBUlVoTlFFVklUVUR0djFsVFBFQzZ2MjdBcG45WjcrL3Z3UE8rM01FamY0dHY3OEIwOERBQUFRQURQNUtCQmdFVGdBU0FDUUFXd0JmQUROQUdsMWZCbklsSmhnWUQwQkJRUzVUVXc4UEJVbzNEM0loQlFkeUFDc3lLeklST1M4NUVUTXpFVE1STXhJNU9Tc3lNREZUTlRRMk5qTXlGaFlWRlJRT0FpTWlKaVkzRlJRV0ZqTXlOalkxTlRRbUppTWlCZ1lURndZR0ZSUVdGak16TWhZV0ZSUU9BaU1pTGdJMU5EWTJOeGNPQWhVVUhnSXpNajRDTlRRbUppTWpJaVltTlRRMk5nRVhJU2RHY3N1R2lNdHdRSGVsWllmTWN2QTBYMEpBWGpNMFgwQkFYelFjV2h0QUlqb2pzMzZ4WGtpTnlvTjF0SHMrWDR4Rk9TSTdKQjQrWFVGTmMwd21JVTlGeUVsNlN6OVlBdW9DL29BTEFzNFdhcVJjWEtScUZrdUVaRGhpcEhzV0xsSXpNMUl1RmpGUU1URlEvclF5RGpZeEh5SU9Rb1ZqTzN4b1FDeE9aRGRXZWtrTlZnVXNRaWtkTlNnWUhqQTRHeU0zSUNkVVEwTmNQUUtFbFpVQUFBUUFWdi9yQkZvRVRnQVZBQ3NBTHdBekFCZEFEREFLTFFZY0VRdHlKd1lIY2dBck1pc3lQejh3TVZNMU5ENENNekllQWhjVkRnTWpJaTRDTnhVVUhnSXpNajRDTnpVdUF5TWlEZ0lGRXpNTEFqTVRWamh0b1dsbWxXYytEUTA5YUpablo2QnVPUElhT0Z4Qk9sUTZJZ2dHSVRwVk9rRmNPaG9CNDAzYmEybFV2WElCK3hWKzBwcFVUNC9HZURoMXdJMU5UbzdCaUJWSGVsd3pOMTk0UWpSRWZXUTZQR21MUWdJZS9lTDk1QUljL2VRQUFBSUFtUUFBQlBBRnNBQVpBQzRBSDBBUEpnZ2JHaG9DQVFFT0RBOENjZzRJQUQ4ck1oSTVMek16RVRNL01ERkJJU2NoTWpZMk5UUW1KaU1oRVNNUklUSVdGaFVVQmdZUEFqY2VBaFVWRkJZV0Z4VWhMZ0kxTlRRbUpnTGkvbVFCQVdOaGVUazJjMXorM2ZvQ0tLUGdjbGlrY1Jaek1hdS9UZ3dmSFA3L0hoc0hObXNDV01ZMVpFaEdham43R0FXd1lydUlZWkJnSEM4WGhRRmhwMjEwSVZOTUdCc2FZbUVZY0V4dE9nQURBSmtBQUFVc0JiQUFBd0FKQUEwQUlFQVFDZ2dKQWd3TEN3Y0dCZ0lEQW5JQ0NBQS9LeEk1THpNekVUTS9QekF4UVJFakVTRUJJU2N6QVJNQk53RUJrL29FWnYydy9wMGkrZ0dvTS80cG9nSmlCYkQ2VUFXdy9NTGFBbVQ2VUFLWXdmeW5BQUFEQUlFQUFBUXpCZ0FBQXdBSkFBMEFIRUFPQ3djR0JnSUpCbklEQUhJS0Fnb0FQek1yS3hJNUx6TXpNREZCRVNNUkFRRWhKek1CRXdFM0FRRng4QU9IL2tiKzNFWHhBUmd0L3E2ZEFjMEdBUG9BQmdEK092Mmh2d0dnKzhZQitxcjlYQUFBQXdDWkFBQUZDd1d3QUFNQUNRQU5BQnBBRGdZTEJ3Z01CUUlKQXdKeUNnSUlBRDh6S3pJU0Z6a3dNVUVSSXhFaEFTRW5Nd0VUQVRjQkFaUDZCRS85ZmY3T0NtOENHQ1A5anVJQ3lBV3crbEFGc1AwR2RnS0UrbEFDMkdiOHdnQUFBd0NCQUFBRUh3WVlBQU1BQ1FBTkFDQkFFQXdMQ3djR0JnSUpCbklEQVhJS0Fnb0FQek1yS3hJNUx6TXpFVE13TVVFUkl4RUJBU0VuTXdFVEFUY0JBWEh3QTNQK0V2NzdISTBCWFMzK1ViWUNIQVlZK2VnR0dQNGkvY0dlQWFIN3hnSVhnUDFwQUFBQ0FIWUFBQVFyQkkwQUdRQWRBQlpBQ1JzYUR3SUJEZzk5QVFBdlB6TVJNeEV6TWpBeFlTRTNJVEkyTmpVMU5DNENJeUUxSVRJZUFoVVZGQVlFQVJFakVRSHYvdkFDQVE1emtrVW5VSHRVL3VjQkdYM1JsMU9SL3YvK3p2Ry9WYUowT2xlSFhDL0FVSlBNZkRpbCtvc0VqZnR6QkkwQUFRQlAvL0FFUXdTZEFDY0FFYllaRlJCK0pBQUZBQy9NTXovTU16QXhRVE1PQWlNaUxnSTFOVFErQWpNeUZoWVhJeTRDSXlJT0FoVVZGQjRDTXpJMk5nTlE4Z2w1MkpsM3ZZVkhTSWk5ZHB2VWRnenhCalpzV0VSbVJTTWZRbWRIVld3NkFZUjN0bWRPa2MrQlRvSFBrMDFwdW5oQll6Z3ZYb2xhVDFpSlhqRXZZQUFBQWdCMkFBQUVEQVNOQUJrQU1RQW9RQk1jR3lrWkFnSUJHeVlCQVNZYkF3ME1EMzBOQUM4L014SVhPUzh2THhFekVqazVFVE13TVVFaEp5RXlOalkxTkNZbUl5TVJJeEVoTWg0Q0ZSUUdCZ2NESVRjaE1qWTJOVFFtSmlNak55RVhOaFlXRlJRT0FnSlkvcjRDQVI5QldpOHVYRVRJOFFHc2JLbDRQMGVTZEZUK2hXSUJHVVpiTENkV1JmWUJBVGczYjRwQlBIS21BZjJtSWtFdk5VUWYvRE1FalNkT2VWSkhla3dFL2NTL0tFVXRNa2twcGtFQ1VZQkZWWDFUS1FBQUF3QUlBQUFFa1FTTkFBUUFDUUFOQUJ4QURBMEFCZ01NREFFSEEzMEZBUUF2TXo4ekVqa3ZFams1TXpBeFFRRWpBVE1CQVNjekFRRVZJVFVDV3Y2aTlBSFZvZ0VlL3FBbHBRSFUvdjM5WmdPZS9HSUVqZnR6QTZEdCszTUJzTFcxQUFBQkFKQUViUUdlQmlrQUNnQUtzZ1dBQUFBdkdzMHdNVk0xTkRZMk54Y0dCaFVIa0NoQkpJRWNKQUVFYllWQWVXSWNVRFYxU0hvQUFBSUFkUVRVQXdNR2ZBQVBBQk1BRXJVU0V3b0FEUVVBTHpOODNETFdHTTB3TVVFekZBWUdJeUltSmpVekZCWXpNalluSnpNWEFsYXRUNU5rWlpOUXJFWldVMGJKcXJOM0JiRkJZems1WTBFdFJVVTN3Y0VBQXZ5ZUJMeisyQWFKQUJjQUd3QWRRQXdBRlJVRkdSc2JDUkVSREFVQUx6TXpFVE16THpNUk14RXpNREZCRnhRR0JpTWlKaVlqSWdZVkp6UTJOak15RmhZek1qWWxOek1IL25Gbktrb3dOa1UrS3g4cmFDcEtNQzFJUmlrZUxmNzNnYjYwQlowZE1GSXlKQ1F5Smh3d1VqTWtJekkvMHRJQUFnQjZCT2NFZXdhS0FBWUFDZ0FVdHdnSEJ3VUJnQVFHQUM4ekdzMDVNeS9OTURGVEpUTUZJeWNISlJNekEzb0JIcDBCSDgyaG9BSEVtdGZYQk9mMjlvNk9td0VJL3ZnQUF2OVJCTnNEVXdaL0FBWUFDZ0FYUUFrSFFBZ0lBd2FBQWdRQUx6TWF6VGt6THhyTk1ERkJCU01uQnlNbEpSTWpBd0kwQVIvTm9LRE5BUjcra1pxWjJBWFI5bytQOXE3KytBRUlBQUlBZVFUb0JBWUd5QUFHQUJvQUgwQU5FUklJUUJvSkNBZ0RCb0FDQkFBdk14ck5PVE1STXpNYUVNd3lNREZCQlNNbkJ5TWxCU01uUGdJMU5DWW1JemN5SGdJVkZBWUhBajRCRmI2dnNMMEJGQUgyaUFnck5Sa2pPeVVIUkdkSEpGSXhCZC8zb0tEM2Nub0REQmdUR1JzTVp4Y3JPeVkrT2djQUFnQjVCT2dEVXdiTkFBWUFIZ0FsUUJBSUJ3Y1FHQXhBRkJNVEhBd01Cb0FFQUM4YXpUSVJNek1STXhvUXpUSXlFVE13TVVFRkl5Y0hJeVUzRnhRR0JpTWlKaVlqSWdZVkp6UTJOak15RmhZek1qWUNMZ0VsdnErd3ZRRWw4Vm9sUWlvd1FEb25HeWRhSlVJcUtFSkNKUm9vQmRMcWo0L3EreDRuU0MwaUlpd2RHQ2hJTHlJaExnQUFBd0IyQUFBRG1RWEVBQU1BQndBTEFCdEFEQUlLQ2dzTEJ3TURCMzBHQ2dBL1B6TXZFVE1STXhFek1ERkJFU01SQVJFakVTRVZJVFVEbWZIK3YvRURJLzJLQmNUK0NRSDMvc243Y3dTTndNQUFBQUlBZFFUVEF3TUdmQUFQQUJNQUVyVVJFd0FLRFFVQUx6TjgzRElZMXMwd01VRXpGQVlHSXlJbUpqVXpGQll6TWpZbk56TUhBbGF0VDVOa1paTlFyRVpXVTBiZ2VMT3FCYkJCWkRnNFpFRXRSVVU0d2NFQUFnQjFCTlVDL1FjSEFBOEFKUUFvUUJFYkhCd1JKUklTRVJFSkRRVUFDUWtGRUFBL00zd3ZNeEV6RVRNWUx6TVJNeEV6THpNd01VRXpGQVlHSXlJbUpqVXpGQll6TWpZbkl5YytBalUwTGdJak56SWVBaFVVQmdZSEFsS3JUNUJsWTVOT3FrZFRVa2RLbkFreFBCMFhLVGNnQjA5NFVDa3JReVlGc0VGak56ZGpRUzFDUWtWekFnd1dFaEFXRFFWZUZTWTNJaVV3R0FVQS8vOEFUQUtOQXFrRnVBWUhBZGNBQUFLWS8vOEFOZ0tZQXI4RnJRWUhBakFBQUFLWS8vOEFVQUtOQXEwRnJRWUhBakVBQUFLWS8vOEFUZ0tOQXJnRnVnWUhBaklBQUFLWS8vOEFOd0tZQXEwRnJRWUhBak1BQUFLWS8vOEFTd0tOQXFvRnVBWUhBalFBQUFLWS8vOEFSd0tPQXFNRnVBWUhBalVBQUFLWUFBRUFhZi9yQlNFRnhRQXBBQlZBQ2hvV0VRTnlKZ0FGQ1hJQUs4d3pLOHd6TURGQk13NENJeUl1QXpVMU5CSTJOak15RmhZWEl5NENJeUlPQWhVVkZCNERNekkyTmdRbCt3K005YTl2d1p4d1BGeW81b212K0k4UCt3NUtpR3BXaW1RMUkwSmVkVVpvaFVvQjJwWGVmRUY5c09DRE42UUJDcjlsZmVLV1hvZElTWW0vZHpsZm9vQmFMMGFHQUFBQkFHbi82d1VpQmNVQUxRQWJRQTB0TEN3RkdoWVJBM0ltQlFseUFDc3lLOHd6RWprdk16QXhRUkVPQWlNaUxnTTFOVFFTTmpZek1oWVdGeU11QWlNaURnSVZGUlFlQXpNeU5qWTNFU0UxQlNJZGlObVlkTTJuZWtGZHF1ZUp0L09HRXZjTVM0ZG9WbzFuT0NoTGFJTkxVSE5JRVA3Y0F1SDkyaWhpUmtKOHN1S0ZKNmdCRDhCbGVOS0hUSGhGU296RWVDbGhvNEpiTHhzb0VnRWZ1d0FBQWdDWkFBQUZGQVd3QUJzQUh3QVN0eHdQRUFKeUFoMEFBQzh5TWlzeU1qQXhZU0UzSVRJK0FqVTFOQzRDSXlFMUlUSUVGaElWRlJRQ0JnUUJFU01SQWt6K3ZBSUJPSFd3ZGp3OGRhMXcvcmNCVTVvQkFiMW5aNzMrK3Y2cCtzZEtpYmx2TFhLNmhVaklacnorL0owcm5mNzh1MllGc1BwUUJiQUFBQUlBYWYvckJXNEZ4UUFaQURFQUVMY2hGQU55TFFjSmNnQXJNaXN5TURGQkZSUU9BeU1pTGdNMU5UUStBek15SGdNSE5UUXVBeU1pRGdJVkZSUWVBek15UGdJRmJqNXhuOFJ3YnNPZ2RENCtjNkRDYm5ERm4zSSsrU1ZFWVhwSFZwQm9PaVpGWW5oRldwQm5PQUx1TEgzZXRJSkdSb0swM24wc2ZkMjFna1pHZ3JYZHFTNWFuNEpkTWs2TnZuRXVXNkNDWGpKT2pjQUFBd0JwL3dRRmJnWEZBQU1BSFFBMUFCdEFEU1VZQTNJQUF3TXhDd2x5QVFJQUx6TXJNaklSTXlzeU1ERmxBUWNCQVJVVURnTWpJaTRETlRVMFBnTXpNaDREQnpVMExnTWpJZzRDRlJVVUhnTXpNajRDQTlFQmRLUCtsQUk0UG5HZnhIQnV3NkIwUGo1em9NSnVjTVdmY2o3NUpVUmhla2RXa0dnNkprVmllRVZha0djNHd2N1Jqd0V0QXJjaWdPQzFnVVZGZ2JYZ2dDS0I0TFdDUlVXQ3RlQ2pKRjZpZzF3eFRJekNkaVJlb29OZE1VMk13d0FCQUpZQUFBTHFCSTBBQmdBVlFBa0RCQVFGQlFaOUFnb0FQejh6THpNUk16QXhRUkVqRVFVMUpRTHE4ZjZkQWpVRWpmdHpBM0I4eU5FQUFRQnJBQUFFTHdTZkFDQUFGMEFLRUJBTUZYNERJQ0FDRWdBL014RXpQek16THpBeFpSVWhOUUUrQWpVMEppWWpJZ1lHRlNNME5qWXpNaDRDRlJRT0FnY0ZCQy84V2dIcVBVRVlKMWRKUkdjNzhYalVpMnlrYnpnalEyQS8vdTIvdjV3QnFEVlJTaWNxU3pBMVlrUjB1VzB5VzN4S09XWmZZRFQ3QUFFQUQvNmpBL2NFalFBZkFCcEFDd1lBSGg0REZnOEZBZ045QUQ4ek15OHpFamt2TXpNd01VRUJJVFVoRndFZUFoVVVEZ0lqSWlZbk54WVdNekkyTmpVMEppWWpJd0ZOQVZEOXV3TjBBZjZiYnJWc1dhRGFnV2pFYURaS3FsbHlvMWRObm5wTUFsUUJlY0NOL24wUGRiNkFnY2lKUmpNMHN5Z3dWcGhnWllSQUFBQUNBRFQreEFTSUJJMEFCd0FMQUJaQUNRWUVDMzBLQXdjSEFnQXZNeEV6THo4ek16QXhaUlVoSndFekF3RUJFU01SQklqN3N3Y0NxTDNQL21vQ29mRy93SklEL1A2Uy9hQUR6dm8zQmNrQUFBRUFaLzZnQkNFRWpBQW5BQlpBQ1NRSkNRSWFFd1VDZlFBL015OHpFamt2TXpBeFFTY1RJUlVoQXpZMk56WWVBaFVVRGdJaklpWW5OeFlXTXpJK0FqVTBMZ0lqSWdZR0FWTElWZ01wL1pvdUtYZFNhS1J6TzBTSHpJaHUwRjFLT3FSaVQzaFFLQ0pDWWtFK1VqUUJhUkVERXN6K29CZ2ZBUUZEZ0xaeGE3NlRVem83cmkwMk5GeDRSVUJ0VWkwYk13QUFBUUJDL3NRRUZnU05BQVlBRDdVQkJRVUdmUU1BTHo4ekVUTXdNVUVWQVNNQklUVUVGdjI1OHdJOC9Tb0VqWVg2dkFVSndBQUFBZ0IyQk00Qy9BYmFBQThBSndBcFFCRVJFQkFaSVNFVkhSd2NKUlVWQUFrTkJRQXZNODB5TW53dk16TVJNeEV6R0M4ek14RXpNREZCTXhRR0JpTWlKaVkxTXhRV016STJFeGNVQmdZaklpWW1JeUlHRlNjME5qWXpNaFlXTXpJMkFsQ3NUNUJrWTVGUHEwUlVVMFFpYUN0Sk1UVkZQaXdmSzJjcFNqRXNTRVVySGl3RnIwSm1PVGxtUWkxRVJBRllIakJTTWlRa01pVWJNRk16SkNNeUFBRUFZdjZhQVZNQXN3QURBQWl4QVFBQUw4MHdNV1VSSXhFQlUvR3ovZWNDR1FBRkFFNy84QVp1QkowQUtRQXRBREVBTlFBNUFERkFHRGc1T1RGOUZpMHRGekFLTlRRMEpoc0JCZ1ltZmhFYkN3QS9Nejh6RVRNUkVqa3ZNejh6TXhFelB6TVJNekF4UVFjaUxnSWpJZzRDRlJVVUhnSXpNajRDTXhjaUJnWWpJaTRDTlRVMFBnSXpNaFlXQVJVaE5STVJJeEVCRlNFMUFSVWhOUVBuR1NCcWNsOFZRMnRKSnlkTGEwTVhZSFJuSFJwT2xIMHFkY0tPVFUyTXduVXFmNVVDMHYxbVMvRUM2djI4QXBuOVp3U053QVFIQlRKZ2pGczZXbzFoTXdVRkJiNElDRTZWMG9VNGhkS1dUZ2dJL0RLL3Z3UE8rM01FamY0dHY3OEIwOERBQUFFQWJ2NjBCRkFFb1FBN0FCUzNBQlVmSHpVTEtUVUFMeTh6RWprdk16SXdNVVV5UGdJMU5UUXVBaU1pRGdJVkZCNENNekkrQWpVM0ZBWUdJeUl1QWpVMFBnSXpNaDRDRlJVVURnTWpJaVluTnhZV0FlcFZpV0kwSlVWaFBUWmFRaVFnUVZ3OFMzQktKV1YzeUhscHBuVStTSUd0WjNHOGkwMDZhcEt4WlVpV1JpOHhhWTFDaHN1SjlWZURXQ3d1Vm5sS1FYTllNaXRIVXljS2pNQmlTSVc1Y0hhK2lFcElqOVdOejVUdHNuYzdIaDZ5RWgwQUFmK24va3NCaXdET0FCRUFDcklOQmdBQUw4d3lNREYzTXhFVUJnWWpJaVluTnhZV016STJOaldaOGxhZWJpUThJZzRUT2hZcE9oN08vdlI1cUZZSENzRUdCaWhQT2dELy93QTQvcU1FSUFTTkJBWUNYQ2tBLy84QWFQNmdCQ0lFakFRR0FsNEJBUC8vQUN6K3hBU0FCSTBFQmdKZCtBRC8vd0JpQUFBRUpnU2ZCQVlDVy9jQS8vOEFYLzdFQkRNRWpRUUdBbDhkQVAvL0FEVC82d1JYQktBRUJnSjExQUQvL3dCcy8rd0VNZ1c1QkFZQUd2a0EvLzhBV2Y2MEJEc0VvUVFHQW1QckFQLy9BR2YvN0FRbUJjUUdCZ0FjQUFELy93RGxBQUFET1FTTkJBWUNXazhBLy8vL3J2NUxBWklFT2dRR0FKd0FBUC8vLzY3K1N3R1NCRG9HQmdDY0FBRC8vd0NRQUFBQmdRUTZCZ1lBalFBQS8vLy8rdjVlQVlFRU9nWW1BSTBBQUFFR0FLVFJDZ0FMdGdFRUFnQUFRMVlBS3pRQS8vOEFrQUFBQVlFRU9nWUdBSTBBQUFBREFIYi82d1FaQkowQUF3QVdBREVBS1VBVUR5WW1EU01qQ1JzdkMzSUVBQUFDRXdsK0Fnb0FQejh6RWprdk15c3lFVGt2TXpNUk16QXhRUkVqRVJjak5EWTJNeklXRndFbk5STW1KaU1pQmdZVE54WVdNekkyTmpVMEppWWpJelUzTWg0Q0ZSUUdCaU1pSmdGaTdPenNYYm1MaWM1Vy9xaUd6QjFNTlQ1UEpVWkZHVW92TmswcE5tMVFVbTlwcDNZK1o3SnZRM1FDN2YwVEF1MENrTUZoZEYvK1pBTnhBUUlZSlQ1di9PNjJFU0F2VkRjN1J5R2RCeXBTZWs5NnFGWWRBQUlBWVAvckJJTUVvQUFWQUNzQURyVWNFWDRuQmdzQVB6TS9NekF4UVJVVURnSWpJaTRDTlRVMFBnSXpNaDRDQnpVMExnSWpJZzRDRlJVVUhnSXpNajRDQklOUWo4RndjTUtRVVZDUXdYQnd3WkJSOFN4T2FqMCthRThyTEU5cFBqNXBUU3NDVGhHVTM1UkxTNVRmbEJHVTM1VktTcFhmdERGamtWOHZMMStSWXpGamttQXVMbUNTQUFFQU9RQUFBK29Gc0FBR0FCTkFDUUVGQlFZRWNnTU1jZ0FyS3pJUk16QXhRUlVCSXdFaE5RUHEvZFB5QWkzOVFRV3doUHJVQlBEQUFBQURBSDMvN0FSRUJnQUFCQUFhQUM4QUdVQU9JUllIY2lzTEMzSUVDbklBQUhJQUt5c3JNaXN5TURGVE14RUhJd0VWRkE0Q0l5SXVBaWMxUGdNek1oNENCelUwTGdJaklnNENCeFVlQWpNeVBnSjk4U0RSQThjN2M2Tm5aWlpsUGcwTlBtV1ZaR2lsY2p2eEgwQmlSRUJlUHlRR0NUMXVWVU5pUHg4R0FQcm41d0luRlhiSmxWSk5pOEIwUTNmRGpVeFBrc3VRRlV5Q1lUWXJUR2M3dFVsOFN6aGlnQUFBQVFCUC8rd0VBQVJPQUNjQUdVQU1IUmtaRkFkeUJBUUFDUXR5QUNzeU1pOHJNaTh5TURGbE1qWTJOek1PQWlNaUxnSTFOVFErQWpNeUZoWVhJeTRDSXlJT0FoVVZGQjRDQWtFN1lUMEQ0d1I2eG5oOHZINC9RSDY2ZklMRmNnVGpBemRnUTBsak94a1pPMk9yTUZRM2FheGxWWmJFY0NOd3haWlZaN2Q1UEdFNk8yVjlReU5EZm1RN0FBQURBRTcvN0FRVkJnQUFCQUFhQUM4QUdVQU5JUVFFRmd0eUt3c0hjZ0VBY2dBckt6SXJNaTh5TURGbEVUTVJJd0UxTkQ0Q016SWVBaGNWRGdNaklpNENOeFVVSGdJek1qWTJOelV1QXlNaURnSURJL0xTL1F0QmRxTmtZcFJuUGc0TlAyaVVZMktqZGtIeUlVSmlRVkp0UHdzR0prQmRQa0ZqUXlIZ0JTRDZBQUlSRlh6TGtrOU1qY0ozUkhQQmkwMVNsTW1MRlVtQllUZElmRXUyTzJaTUt6WmhnZ0FBQXdCTy9sVUVGUVJPQUJNQUtRQStBQnRBRHpBbEMzSTZHZ2R5RGdZUGNnQUdjZ0FyS3pJck1pc3lNREZCTXhFVURnSWpJaVluTnhZV016STJOalVSQVRVMFBnSXpNaDRDRnhVT0F5TWlMZ0kzRlJRZUFqTXlOalkzTlM0REl5SU9BZ05GMEVPQnVuWkx1VXd4UElkS1gzbzcvU3MvZHFObGFaWmpPZzRPUFdhV1pXT2pkai95SVVKaVFWVnNQQXdISlQ1ZFFFSmpRaUVFT3Z3VmVieUNReXN2cXlFb1I0dG9BdnIrelJWN3k1SlBUSTNDZDBOMHdJeE5VcFhKaXhWS2dHSTNTWHRNdFR0bVRDczJZWUlBQUFJQVNmL3NCRk1FVGdBVkFDc0FFTGNjRVF0eUp3WUhjZ0FyTWlzeU1ERlROVFErQWpNeUhnSVZGUlFPQWlNaUxnSTNGUlFlQWpNeVBnSTFOVFF1QWlNaURnSkpTWWkrZFhlL2lFaEloNzkyZHIrSVNmRWtSV2hFUTJkR0lpTkZhRVJFWmtVa0FoRVhkY21WVTFPVnlYVVhkY2lWVTFPVnlJd1hTWUpqT0Roamdra1hTSUZrT1Rsa2dRQUFBd0I5L21BRVF3Uk9BQVFBR2dBdkFCbEFEaUVXQjNJckN3dHlBd1p5QWc1eUFDc3JLeklyTWpBeFFSRWpFVE1CRlJRT0FpTWlMZ0luTlQ0RE16SWVBZ2MxTkM0Q0l5SU9BZ2NWSGdJek1qNENBVzd4MkFMdVBYT2labVdYYUQ4TkRUOW9sbVJtcEhRODhTSkVZMEZBWFVBa0JndzhiVlJCWWtNaUEycjY5Z1hhL2UwVmRzbVZVa3VKdTNCUmQ4S05URStTeTVBVlRJSmhOaXRNWmp2Q1NIaEhPR1NCQUFNQVR2NWdCQlFFVGdBRUFCb0FMd0FaUUE0aEZndHlLd3NIY2dRT2NnTUdjZ0FyS3lzeUt6SXdNVUVSTnpNUkFUVTBQZ0l6TWg0Q0Z4VU9BeU1pTGdJM0ZSUWVBak15TmpZM05TNERJeUlPQWdNaUlkSDhPajkxcFdabGxXYytEZzArYUpabVpLVjFQL0loUTJOQlZXODlDd1lsUUY5QVFXUkRJdjVnQlFQWCtpWURzUlY3eTVOUFRJM0NkMFJ6d1l0TlVwVEppeFZLZ1dNNFNuNUx0anRtVGlzM1lvTUFBQUVBVWYvc0JBb0VUZ0FxQUJsQURCTVNFZ0FaQ3dkeUpBQUxjZ0FyTWlzeUVUa3ZNekF4UlNJdUFqVTFORDRDTXpJZUFoVVZJVFVoTlRRbUppTWlEZ0lWRlJRZUFqTXlOamNYQmdZQ2NuM0lrRXhLaExScGRLNXpPZnk4QWxZdFlsRThYVDhoS2xKN1VsT1ZORGN5dHhSUWtNTnpLbjNKajAxSmg3cHdmNjBhUW01Q01seURVU3BKZlYwME1DR2pKa2NBQXdCUS9sVUVBd1JPQUJJQUtBQTlBQnRBRHk4a0MzSTVHUWR5RFFZUGNnQUdjZ0FyS3pJck1pc3lNREZCTXhFVUJnWWpJaVluTnhZV016STJOalVSQVRVMFBnSXpNaDRDRnhVT0F5TWlMZ0kzRlJRZUFqTXlOalkzTlM0REl5SU9BZ016MEhmZm5VYXZSekkzZTBWZ2VUdjlQenB0bm1WcGxXUTVEZzQ5WnBWbFpKMXRPdklhT2x4QlZXczZDd1lqUFYxQVFWMDZHd1E2L0FxZTNYUWxLYXdkSVVTSFl3TUcvc3dWZk11U1QweU53bmREZE1DTVRWS1V5WXNWU245aU4wbDdUTFU3Wmt3ck4yR0NBQUFDQURUK1RRUmJCRW9BQXdBbEFCbEFEQTRWQVFFVkh3UUhjZ01HY2dBckt6SXZNeThSTXpBeFFRRWpBU1V5SGdJWEFSNENGeFkyTndjR0JpY3VBeWNCTGdJaklnWUhKelkyQkN6OUl2VUMzLzJDVUdsRkxCSUJsaEFtTHgwT01RNGlGRHNaUEZwQ05CZitmUkF6UWlzTUtnMEVIVVVFT3ZvbUJkb1FObFJkSi94bkpqc21Bd0VCQWNBSEJnSURORlJwT0FOMkswTW5CQUcyQ0FzQS8vOEFZUUFBQXJjRnRRUUdBQlczQUFBQkFGLy83Z1M5QkowQVFRQVhRQXM0T0JBaWZoa0tNd0FMY2dBck1qOC9Nemt2TURGRklpNENOVFEyTmpjbE5qWTFOQ1lqSWdZVkZCWVdGd0VoQVM0Q05UUTJOak15RmhZVkZBWUdCd1VPQWhVVUZoWXpNajRDTlRNVUJnY0dCZ2NHQmdJQlladHNPakJaUFFFSE15ZEJPenM4SlQ4bUFxRCs5djNMT1ZnelVwaG9hWmhVSzBrdC91QWhKQXdyVXoxaGwybzMwbGhMRGhnUlVORVNMbEp3UUVSblZTbXpJajRoS2o1REtpQStRQ2Y5VHdKRU9tSm9RMDE4U1VwL1VEVmRUaC9HR0M0ckZDbEFJenh0bFZxQ3prNE9Hd3cvUmdBREFBVUFBQU9lQkkwQUF3QUhBQXNBSFVBTkNBa0pDd29LQmdkOUF3SUdDZ0EvTXpNL0Vqa3ZNek12TXpBeFpSVWhOUk1SSXhFQkZRVTFBNTc5aWt2eEFmTDlrYisvdndQTyszTUVqZjZoa2J1UkFBQUcvK3dBQUFZRUJJMEFBd0FIQUFzQUVBQVVBQmdBTTBBWUNnc0xHQmdQQndZVUV3WVRCaE1ORDMwREFnSVhGdzBLQUQ4ekVUTVJNejhTT1Rrdkx4RXpFVE1STXhFekVUTXdNV1VWSVRVQkZTRTFBUlVoTlFjQklRRXpFeFVoTlFFVEl3TUdCUDJFQWhMOTBRSnUvWVJmL2ZQKyt3SnRvSzc5aHdLUUt1OHJ2cjYrQWdDK3ZnSFB2cjV5KytVRWpmMDN2THdDeWZ0ekJJMEFBZ0IyQUFBRDBRU05BQU1BR1FBWFFBb1BFQkFCZlFVRUJBQUtBRDh5THpNL015OHpNREZ6RVRNUkp6VXpNalkyTlRRbUppTWpOVE15RmhZVkZBWUdJM2J4VWV0T1lpOHZZazdxNnBMUWJtN1FrZ1NOKzNQa3dTNVROREpWTmNCaXFtNXlxVjBBQXdCTy84Y0ViZ1M3QUJVQUt3QXZBQnRBQ3k4dkhCRitMUzBuQmd0eUFDc3lNbnd2R0Q4ek0zd3ZNREZCRlJRT0FpTWlMZ0kxTlRRK0FqTXlIZ0lITlRRdUFpTWlEZ0lWRlJRZUFqTXlQZ0lUQVNNQkJHNU1pOEoxZGNLT1RVMk13blYyd1kxTThTWkxha1JEYTBrbkowdHJRMFJwU2licy9JNmZBM1FDWWppRjBwVk9UcFhTaFRpRjBwWk9UcGJTdlRwYmpHQXlNbUNNV3pwYWpXRXpNMkdOQXV2N0RBVDBBQUFFQURRQUFBVGFCSTBBQXdBSEFBc0FEd0FiUUF3Q0E0QU9EdzhMQjMwS0Jnb0FQek0vTXpNdk14ck1NakF4UVJVaE5STVJJeEVoRVNNUkJSVWhOUVBRL1d4RThRUHg4UUZMKzFvQ25jREFBZkQ3Y3dTTiszTUVqWmFucHdBQUFnQjIva3NFWndTTkFBa0FHd0FmUUE4WEVBOXlDUU1HZlFnS0NnSUNCUW9BUHpNUk14RXpQek16S3pJd01VRVJJd0VSSXhFekFSRVJNeFVVQmdZaklpWW5OeFlXTXpJMk5qVUVaL0w5OHZIeEFnN3lWWjl2SXp3aURoTTZGU281SHdTTiszTURJL3pkQkkzODNRTWorN2lEZWFoV0J3ckJCZ1lvVHpyLy93QlFBZzRDWVFMT0JnWUFFUUFBQUFNQUZ3QUFCUEFGc0FBYUFCNEFJZ0FqUUJFQ0FRRWRJaUVoSFE0UER4NENjaDBJY2dBckt6SVJNeEU1THpNUk14RXpNREZoSVRjaE1qWTJOVFUwTGdJaklUVWhNaDRDRlJVVURnSUJFU01SQVJVaE5RSlovc2tDQVRXSHQxMDFaNVZoL3JvQlJwSHdyMTVlc1BQK3Z2c0NCZjFneDNiY21FOTJ0bnhBeUdHMi9wMU5uZjYxWVFXdytsQUZzUDJFcHFZQUF3QVhBQUFFOEFXd0FCb0FIZ0FpQUNOQUVRSUJBUjBpSVNFZERnOFBIZ0p5SFFoeUFDc3JNaEV6RVRrdk14RXpFVE13TVdFaE55RXlOalkxTlRRdUFpTWhOU0V5SGdJVkZSUU9BZ0VSSXhFQkZTRTFBbG4reVFJQk5ZZTNYVFZubFdIK3VnRkdrZkN2WGw2dzgvNisrd0lGL1dESGR0eVlUM2EyZkVESVliYituVTJkL3JWaEJiRDZVQVd3L1lTbXBnQUQvL1VBQUFRWUJnQUFBd0FhQUI0QUdVQU5IaDBXQ2dkeUF3QnlFUUlLY2dBck1pc3JNc1F5TURGQkVTTVJFeWMrQXpNeUhnSVZFU01STkNZbUl5SU9BZ0VWSVRVQmlQREdUZ0U5YjV4ZlVJRmVNZkl0Vmo1QlkwSWhBVGY5WUFZQStnQUdBUHhGQVhDK2pVMHNZWnR2L1VrQ3VVNWNLVFJhZGdMbnBxWUFBQU1BTFFBQUJMUUZzQUFEQUFjQUN3QVZRQW9EQ2dzR0J3SnlBUWh5QUNzck1pOHpNakF4UVJFakVTRVZJVFVCRlNFMUF1djVBc0w3ZVFPTS9XQUZzUHBRQmJESXlQNElwcVlBQS8vci8rd0Npd1ZEQUFNQUZRQVpBQjFBRGdvUkMzSVlHUmtDQWdRRUF3WnlBQ3N5THpJUk15OHpLekl3TVVFVklUVVRNeEVVRmhZek1qWTNGd1lHSXlJbUpqVUJGU0UxQW16OW5yRHhIVFFqR1M0T0FSNVBNMU9BU0FIUi9XQUVPckN3QVFuNzZESTFFZ1lEdUFrT080WnZBY0dtcGdELy93QVJBQUFGUHdjM0JpWUFKUUFBQVFjQVJBRWJBVGNBQzdZREVBY0JBV0ZXQUNzMEFQLy9BQkVBQUFVL0J6Y0dKZ0FsQUFBQkJ3QjFBY0lCTndBTHRnTU9Bd0VCWVZZQUt6UUEvLzhBRVFBQUJUOEhOd1ltQUNVQUFBRUhBSjRBd2dFM0FBdTJBeEVIQVFGc1ZnQXJOQUQvL3dBUkFBQUZQd2NxQmlZQUpRQUFBUWNBcFFERkFUY0FDN1lESEFNQkFXdFdBQ3MwQVAvL0FCRUFBQVUvQndRR0pnQWxBQUFCQndCcUFPUUJOd0FOdHdRREl3Y0JBWGhXQUNzME5BRC8vd0FSQUFBRlB3ZVJCaVlBSlFBQUFRY0Fvd0ZZQVd3QURiY0VBeGtIQVFGSFZnQXJORFFBLy84QUVRQUFCVDhIc1FZbUFDVUFBQUVIQWpjQldBRVhBQksyQlFRREd3Y0JBTGovc3JCV0FDczBORFQvL3dCbS9qa0U2d1hFQmlZQUp3QUFBUWNBZVFITC8vb0FDN1lCS0FVQUFBcFdBQ3MwQVAvL0FKUUFBQVJOQno0R0pnQXBBQUFCQndCRUFPVUJQZ0FMdGdRU0J3RUJiRllBS3pRQS8vOEFsQUFBQkUwSFBnWW1BQ2tBQUFFSEFIVUJqQUUrQUF1MkJCQUhBUUZzVmdBck5BRC8vd0NVQUFBRVRRYytCaVlBS1FBQUFRY0FuZ0NOQVQ0QUM3WUVFd2NCQVhkV0FDczBBUC8vQUpRQUFBUk5Cd3NHSmdBcEFBQUJCd0JxQUs0QlBnQU50d1VFSlFjQkFZTldBQ3MwTkFELy8vL0xBQUFCb0FjK0JpWUFMUUFBQVFjQVJQK1RBVDRBQzdZQkJnTUJBV3hXQUNzMEFQLy9BS1VBQUFKOEJ6NEdKZ0F0QUFBQkJ3QjFBRG9CUGdBTHRnRUVBd0VCYkZZQUt6UUEvLy8veWdBQUFuNEhQZ1ltQUMwQUFBRUhBSjcvT2dFK0FBdTJBUWNEQVFGM1ZnQXJOQUQvLy8rK0FBQUNod2NMQmlZQUxRQUFBUWNBYXY5YkFUNEFEYmNDQVJrREFRR0RWZ0FyTkRRQS8vOEFsQUFBQlJjSEtnWW1BRElBQUFFSEFLVUE4UUUzQUF1MkFSZ0dBUUZyVmdBck5BRC8vd0JsLyt3RkhRYzRCaVlBTXdBQUFRY0FSQUV6QVRnQUM3WUNMaEVCQVU5V0FDczBBUC8vQUdYLzdBVWRCemdHSmdBekFBQUJCd0IxQWRvQk9BQUx0Z0lzRVFFQlQxWUFLelFBLy84QVpmL3NCUjBIT0FZbUFETUFBQUVIQUo0QTJnRTRBQXUyQWk4UkFRRmFWZ0FyTkFELy93QmwvK3dGSFFjc0JpWUFNd0FBQVFjQXBRRGRBVGtBQzdZQ09oRUJBVmxXQUNzMEFQLy9BR1gvN0FVZEJ3VUdKZ0F6QUFBQkJ3QnFBUHdCT0FBTnR3TUNRUkVCQVdaV0FDczBOQUQvL3dDQS8rd0V2d2MzQmlZQU9RQUFBUWNBUkFFUEFUY0FDN1lCR0FBQkFXRldBQ3MwQVAvL0FJRC83QVMvQnpjR0pnQTVBQUFCQndCMUFiWUJOd0FMdGdFV0N3RUJZVllBS3pRQS8vOEFnUC9zQkw4SE53WW1BRGtBQUFFSEFKNEF0Z0UzQUF1MkFSa0FBUUZzVmdBck5BRC8vd0NBLyt3RXZ3Y0VCaVlBT1FBQUFRY0FhZ0RYQVRjQURiY0NBU3NBQVFGNFZnQXJORFFBLy84QUNBQUFCTmtITmdZbUFEMEFBQUVIQUhVQmpBRTJBQXUyQVFrQ0FRRmdWZ0FyTkFELy93QlcvK3dEK1FZQUJpWUFSUUFBQVFjQVJBQ21BQUFBQzdZQ1BROEJBWXhXQUNzMEFQLy9BRmIvN0FQNUJnQUdKZ0JGQUFBQkJ3QjFBVTBBQUFBTHRnSTdEd0VCakZZQUt6UUEvLzhBVnYvc0Eva0dBQVltQUVVQUFBRUdBSjVOQUFBTHRnSStEd0VCbDFZQUt6UUEvLzhBVnYvc0Eva0Y5QVltQUVVQUFBRUdBS1ZRQVFBTHRnSkpEd0VCbGxZQUt6UUEvLzhBVnYvc0Eva0Z6UVltQUVVQUFBRUdBR3B2QUFBTnR3TUNVQThCQWFOV0FDczBOQUQvL3dCVy8rd0QrUVphQmlZQVJRQUFBUWNBb3dEakFEVUFEYmNEQWtZUEFRRnlWZ0FyTkRRQS8vOEFWdi9zQS9rR2VnWW1BRVVBQUFFSEFqY0E0di9nQUJLMkJBTUNTQThBQUxqLzNiQldBQ3MwTkRULy93Qk8vamtEOFFST0JpWUFSd0FBQVFjQWVRRkIvL29BQzdZQktBa0FBQXBXQUNzMEFQLy9BRkgvN0FRS0JnQUdKZ0JKQUFBQkJ3QkVBSnNBQUFBTHRnRXVDd0VCakZZQUt6UUEvLzhBVWYvc0JBb0dBQVltQUVrQUFBRUhBSFVCUWdBQUFBdTJBU3dMQVFHTVZnQXJOQUQvL3dCUi8rd0VDZ1lBQmlZQVNRQUFBUVlBbmtJQUFBdTJBUzhMQVFHWFZnQXJOQUQvL3dCUi8rd0VDZ1hOQmlZQVNRQUFBUVlBYW1NQUFBMjNBZ0ZCQ3dFQm8xWUFLelEwQVAvLy83UUFBQUdJQmZjR0pnQ05BQUFCQndCRS8zei85d0FMdGdFR0F3RUJubFlBS3pRQS8vOEFrQUFBQW1VRjl3WW1BSTBBQUFFR0FIVWo5d0FMdGdFRUF3RUJubFlBS3pRQS8vLy90QUFBQW1nRjl3WW1BSTBBQUFFSEFKNy9KUC8zQUF1MkFRY0RBUUdwVmdBck5BRC8vLytvQUFBQ2NRWEVCaVlBalFBQUFRY0FhdjlGLy9jQURiY0NBUmtEQVFHMVZnQXJORFFBLy84QWVnQUFBL29GOUFZbUFGSUFBQUVHQUtWYUFRQUx0Z0lxQXdFQnFsWUFLelFBLy84QVR2L3NCRHdHQUFZbUFGTUFBQUVIQUVRQXNRQUFBQXUyQWk0R0FRR01WZ0FyTkFELy93Qk8vK3dFUEFZQUJpWUFVd0FBQVFjQWRRRlhBQUFBQzdZQ0xBWUJBWXhXQUNzMEFQLy9BRTcvN0FROEJnQUdKZ0JUQUFBQkJnQ2VXQUFBQzdZQ0x3WUJBWmRXQUNzMEFQLy9BRTcvN0FROEJmUUdKZ0JUQUFBQkJnQ2xXd0VBQzdZQ09nWUJBWlpXQUNzMEFQLy9BRTcvN0FROEJjMEdKZ0JUQUFBQkJnQnFlUUFBRGJjREFrRUdBUUdqVmdBck5EUUEvLzhBZC8vc0Eva0dBQVltQUZrQUFBRUhBRVFBckFBQUFBdTJBaDRSQVFHZ1ZnQXJOQUQvL3dCMy8rd0QrUVlBQmlZQVdRQUFBUWNBZFFGU0FBQUFDN1lDSEJFQkFhQldBQ3MwQVAvL0FIZi83QVA1QmdBR0pnQlpBQUFCQmdDZVV3QUFDN1lDSHhFQkFhdFdBQ3MwQVAvL0FIZi83QVA1QmMwR0pnQlpBQUFCQmdCcWRBQUFEYmNEQWpFUkFRRzNWZ0FyTkRRQS8vOEFEUDVMQTk0R0FBWW1BRjBBQUFFSEFIVUJHd0FBQUF1MkFoa0JBUUdnVmdBck5BRC8vd0FNL2tzRDNnWE5CaVlBWFFBQUFRWUFhajBBQUEyM0F3SXVBUUVCdDFZQUt6UTBBUC8vQUJFQUFBVS9CdU1HSmdBbEFBQUJCd0J3QUwwQk9RQUx0Z01RQXdFQnBsWUFLelFBLy84QVZ2L3NBL2tGclFZbUFFVUFBQUVHQUhCSUF3QUx0Z0k5RHdFQjBWWUFLelFBLy84QUVRQUFCVDhISGdZbUFDVUFBQUVIQUtFQThBRTNBQXUyQXhNSEFRRlRWZ0FyTkFELy93QlcvK3dEK1FYbkJpWUFSUUFBQVFZQW9Yc0FBQXUyQWtBUEFRRitWZ0FyTkFBQUJBQVIvbFFGUHdXd0FBUUFDUUFOQUNNQUswQVZEUXdNQXhZZEJnQUNCd01DY2c0UER3VUZBZ2h5QUNzeUVUTVJNeXN5RWprNUx6TVNPUzh6TURGQkFTRUJNd0VCSnpNQkFSVWhOUUVYRGdJVkZCWXpNalkzRndZR0l5SW1OVFEyTmdMTC9rMysrUUlrcUFGYS9rd1RxUUltL3VQODZBT0NjeTVLS1NBbkhpd1BGeGxPUEZoN0xtZ0U3dnNTQmJENlVBVHV3dnBRQWh6SHgvNGVPaDQ5UlNnZUp4RUhpdzhkWm1JMFpWMEFBd0JXL2xRRCtRUk9BQnNBT2dCUUFDdEFGeDQ2T2c5RFNnOXlKekVMY2pzOFBCa0tjZ2tGRHdkeUFDc3lNaXN5RVRNck1pc3lFamt2TXpBeFpSRTBKaVlqSWdZR0ZTTTBQZ0l6TWhZV0ZSRVVGaGNWSXlZbUV4Y2pJZzRDRlJRV0ZqTXlOalkzRnc0REl5SW1KalUwUGdJekFSY09BaFVVRmpNeU5qY1hCZ1lqSWlZMU5EWTJBdDRxVlVBN1ZqRHdQbmFrWm5xOWJSVVU5eEVUSXdLdFEyWkVJaWhOTjBwdlFBSk9ERHBkZ1ZScXBsNUJmN2gyQVJsekwwa3FJQ2NmTEE0WEdVNDhXSG91YU5rQ0JEcFVMaWhFSzBCNFhqWlNwWHorSDBwMUt4QW5lUUh5bFJrd1JDc3JSeWc5V1NocktWNVZObFdSWEZhRldpLzlxRG9lUFVVb0hpY1JCNHNQSFdaaU5HVmRBUC8vQUdiLzdBVHJCMHNHSmdBbkFBQUJCd0IxQWNRQlN3QUx0Z0VvRUFFQmJWWUFLelFBLy84QVR2L3NBL0VHQUFZbUFFY0FBQUVIQUhVQkxnQUFBQXUyQVNnVUFRR01WZ0FyTkFELy93Qm0vK3dFNndkTEJpWUFKd0FBQVFjQW5nREZBVXNBQzdZQkt4QUJBWGhXQUNzMEFQLy9BRTcvN0FQeEJnQUdKZ0JIQUFBQkJnQ2VMd0FBQzdZQkt4UUJBWmRXQUNzMEFQLy9BR2IvN0FUckJ5Z0dKZ0FuQUFBQkJ3Q2lBYWtCVXdBTHRnRXhFQUVCZ2xZQUt6UUEvLzhBVHYvc0EvRUYzUVltQUVjQUFBRUhBS0lCRXdBSUFBdTJBVEVVQVFHaFZnQXJOQUQvL3dCbS8rd0U2d2RMQmlZQUp3QUFBUWNBbndEYkFVc0FDN1lCTGhBQkFYWldBQ3MwQVAvL0FFNy83QVB4QmdBR0pnQkhBQUFCQmdDZlJRQUFDN1lCTGhRQkFaVldBQ3MwQVAvL0FKUUFBQVRTQno0R0pnQW9BQUFCQndDZkFHRUJQZ0FMdGdJbEhnRUJkVllBS3pRQS8vOEFVUC9zQlZnR0FnUW1BRWdBQUFFSEFjb0VCQVVDQUF1MkF6a0JBUUFBVmdBck5BRC8vd0NVQUFBRVRRYnFCaVlBS1FBQUFRY0FjQUNIQVVBQUM3WUVFZ2NCQWJGV0FDczBBUC8vQUZILzdBUUtCYTBHSmdCSkFBQUJCZ0J3UEFNQUM3WUJMZ3NCQWRGV0FDczBBUC8vQUpRQUFBUk5CeVVHSmdBcEFBQUJCd0NoQUxvQlBnQUx0Z1FWQndFQlhsWUFLelFBLy84QVVmL3NCQW9GNXdZbUFFa0FBQUVHQUtGd0FBQUx0Z0V4Q3dFQmZsWUFLelFBLy84QWxBQUFCRTBIR3dZbUFDa0FBQUVIQUtJQmNRRkdBQXUyQkJrSEFRR0JWZ0FyTkFELy93QlIvK3dFQ2dYZUJpWUFTUUFBQVFjQW9nRW1BQWtBQzdZQk5Rc0JBYUZXQUNzMEFBQUZBSlQrVkFSTkJiQUFBd0FIQUFzQUR3QWxBQ2xBRkFvTEN4Z2ZEZzhQQndKeUVCRVJBd0lDQmdoeUFDc3lFVE15RVRNck1oRXpMek01THpNd01XVVZJVFVURVNNUkFSVWhOUUVWSVRVQkZ3NENGUlFXTXpJMk54Y0dCaU1pSmpVME5qWUVUZno3Ui9zRFZQMWdBd0Q5QUFJZGN5OUpLaUFvSGl3T0dCbFBPMWw2TG1qSHg4Y0U2ZnBRQmJEOW9NVEVBbURJeVBxS09oNDlSU2dlSnhFSGl3OGRabUkwWlYwQUFBSUFVZjV5QkFvRVRnQXJBRUVBSlVBVEVoTVRDelE3RG5JWkN3ZHlMQzBrSkFBTGNnQXJNaEU1T1NzeUt6SVNPUzh6TURGRklpNENOVFUwUGdJek1oNENGUlVoTlNFMUxnSWpJZzRDRlJVVUhnSXpNalkzRnc0Q054Y09BaFVVRmpNeU5qY1hCZ1lqSWlZMU5EWTJBbGw0d1lkSVNvUzBhWFN1Y3puOHZBSldBaTlnVUR4ZFBpRW5UR3hGVjRneWZ5TndvUTl6TGtvcElDY2VMQThYR1U0OFdIc3VhQlJQanNCdktIL09rMDVPamNKMVo2MFRRWEpHTTJDSFZDaEhlVm96UmtCN00xMDZhem9lUGtNb0h5WVFCNG9QSFdWaU5HVmVBUC8vQUpRQUFBUk5CejRHSmdBcEFBQUJCd0NmQUtNQlBnQUx0Z1FXQndFQmRWWUFLelFBLy84QVVmL3NCQW9HQUFZbUFFa0FBQUVHQUo5WUFBQUx0Z0V5Q3dFQmxWWUFLelFBLy84QWEvL3NCUElIU3dZbUFDc0FBQUVIQUo0QXhnRkxBQXUyQVM4UUFRRjRWZ0FyTkFELy93QlMvbFVFREFZQUJpWUFTd0FBQVFZQW5rUUFBQXUyQTBJYUFRR1hWZ0FyTkFELy93QnIvK3dFOGdjeUJpWUFLd0FBQVFjQW9RRDBBVXNBQzdZQk1SQUJBVjlXQUNzMEFQLy9BRkwrVlFRTUJlY0dKZ0JMQUFBQkJnQ2hjUUFBQzdZRFJCb0JBWDVXQUNzMEFQLy9BR3YvN0FUeUJ5Z0dKZ0FyQUFBQkJ3Q2lBYXNCVXdBTHRnRTFFQUVCZ2xZQUt6UUEvLzhBVXY1VkJBd0YzUVFtQUVzQUFBRUhBS0lCS0FBSUFBdTJBMGdhQVFHaFZnQXJOQUQvL3dCci9mWUU4Z1hFQmlZQUt3QUFBUWNCeWdIbS9wSUFEclFCTlFVQkFiai9tTEJXQUNzMC8vOEFVdjVWQkF3R3BRUW1BRXNBQUFFSEFrUUJNQUI4QUF1MkF6OGFBUUdZVmdBck5BRC8vd0NVQUFBRkZ3YytCaVlBTEFBQUFRY0FuZ0RtQVQ0QUM3WUREd3NCQVhkV0FDczBBUC8vQUhvQUFBUDZCMThHSmdCTUFBQUJCd0NlQUJvQlh3QUx0Z0llQXdFQkpsWUFLelFBLy8vL3RBQUFBcEFITVFZbUFDMEFBQUVIQUtYL1BRRStBQXUyQVJJREFRRjJWZ0FyTkFELy8vK2RBQUFDZVFYckJpWUFqUUFBQVFjQXBmOG0vL2dBQzdZQkVnTUJBYWhXQUNzMEFQLy8vOUVBQUFKNEJ1b0dKZ0F0QUFBQkJ3QncvelFCUUFBTHRnRUdBd0VCc1ZZQUt6UUEvLy8vdXdBQUFtSUZwQVltQUkwQUFBRUhBSEQvSHYvNkFBdTJBUVlEQVFIalZnQXJOQUQvLy8vZEFBQUNad2NsQmlZQUxRQUFBUWNBb2Y5b0FUNEFDN1lCQ1FNQkFWNVdBQ3MwQVAvLy84WUFBQUpRQmQ0R0pnQ05BQUFCQndDaC8xSC85d0FMdGdFSkF3RUJrRllBS3pRQS8vOEFHUDVhQWFBRnNBWW1BQzBBQUFFR0FLVHZCZ0FMdGdFRkFnQUFBRllBS3pRQS8vLy8vLzVVQVpBRjFnWW1BRTBBQUFFR0FLVFdBQUFMdGdJUkFnQUFBRllBS3pRQS8vOEFud0FBQWFRSEd3WW1BQzBBQUFFSEFLSUFIZ0ZHQUF1MkFRMERBUUdCVmdBck5BRC8vd0NsLyt3R0tRV3dCQ1lBTFFBQUFBY0FMZ0pFQUFELy93Qjgva3NEa1FYV0JDWUFUUUFBQUFjQVRnSUtBQUQvL3dBdi8rd0Vzd2MxQmlZQUxnQUFBUWNBbmdGdkFUVUFDN1lCRndFQkFXcFdBQ3MwQVAvLy82NytTd0pxQmQ0R0pnQ2NBQUFCQndDZS95Yi8zZ0FMdGdFVkFBRUJnbFlBS3pRQS8vOEFsUDVKQlJZRnNBUW1BQzhBQUFFSEFjb0JuUDdsQUE2MEF4Y0NBUUM0Lytld1ZnQXJOUC8vQUgzK05BUTNCZ0FHSmdCUEFBQUJCd0hLQVRMKzBBQU90QU1YQWdFQnVQL1VzRllBS3pULy93Q1VBQUFFSkFjekJpWUFNQUFBQVFjQWRRQXNBVE1BQzdZQ0NBY0JBVnhXQUNzMEFQLy9BSXdBQUFKZkI1QUdKZ0JRQUFBQkJ3QjFBQjBCa0FBTHRnRUVBd0VCY1ZZQUt6UUEvLzhBbFA0R0JDUUZzQVFtQURBQUFBRUhBY29CYi82aUFBNjBBaEVDQVFHNC81ZXdWZ0FyTlAvL0FGbitCZ0YrQmdBRUpnQlFBQUFCQndIS0FCTCtvZ0FPdEFFTkFnRUJ1UCtYc0ZZQUt6VC8vd0NVQUFBRUpBV3hCaVlBTUFBQUFRY0J5Z0lMQkxFQUM3WUNFUWNBQUFGV0FDczBBUC8vQUl3QUFBTGdCZ0lFSmdCUUFBQUJCd0hLQVl3RkFnQUx0Z0VOQXdBQUFsWUFLelFBLy84QWxBQUFCQ1FGc0FZbUFEQUFBQUFIQUtJQnpmM1EvLzhBakFBQUF1c0dBQVFtQUZBQUFBQUhBS0lCWmYydC8vOEFsQUFBQlJjSE53WW1BRElBQUFFSEFIVUI3Z0UzQUF1MkFRb0dBUUZoVmdBck5BRC8vd0I2QUFBRCtnWUFCaVlBVWdBQUFRY0FkUUZYQUFBQUM3WUNIQU1CQWFCV0FDczBBUC8vQUpUK0FnVVhCYkFFSmdBeUFBQUJCd0hLQWVEK25nQU90QUVUQlFFQnVQK1hzRllBS3pULy93QjYvZ1lEK2dST0JDWUFVZ0FBQVFjQnlnRkcvcUlBRHJRQ0pRSUJBYmovbDdCV0FDczAvLzhBbEFBQUJSY0hOd1ltQURJQUFBRUhBSjhCQlFFM0FBdTJBUkFKQVFGcVZnQXJOQUQvL3dCNkFBQUQrZ1lBQmlZQVVnQUFBUVlBbjIwQUFBdTJBaUlEQVFHcFZnQXJOQUQvLy8rakFBQUQrZ1lEQmlZQVVnQUFBUWNCeXY5Y0JRTUFDN1lDSUFNQkFUcFdBQ3MwQVAvL0FHWC83QVVkQnVVR0pnQXpBQUFCQndCd0FOVUJPd0FMdGdJdUVRRUJsRllBS3pRQS8vOEFUdi9zQkR3RnJRWW1BRk1BQUFFR0FIQlNBd0FMdGdJdUJnRUIwVllBS3pRQS8vOEFaZi9zQlIwSEh3WW1BRE1BQUFFSEFLRUJDQUU0QUF1MkFqRVJBUUZCVmdBck5BRC8vd0JPLyt3RVBBWG5CaVlBVXdBQUFRY0FvUUNHQUFBQUM3WUNNUVlCQVg1V0FDczBBUC8vQUdYLzdBVWRCemNHSmdBekFBQUJCd0NtQVdBQk9BQU50d01DTEJFQkFVVldBQ3MwTkFELy93Qk8vK3dFUEFYL0JpWUFVd0FBQVFjQXBnRGRBQUFBRGJjREFpd0dBUUdDVmdBck5EUUEvLzhBbEFBQUJOOEhOd1ltQURZQUFBRUhBSFVCY3dFM0FBdTJBaDRBQVFGaFZnQXJOQUQvL3dCOUFBQUM5QVlBQmlZQVZnQUFBUWNBZFFDeUFBQUFDN1lDRndNQkFhQldBQ3MwQVAvL0FKVCtCZ1RmQmJBRUpnQTJBQUFCQndIS0FYSCtvZ0FPdEFJbkdBRUJ1UCtYc0ZZQUt6VC8vd0JTL2djQ3VRUk9CQ1lBVmdBQUFRY0J5Z0FML3FNQURyUUNJQUlCQWJqL21MQldBQ3MwLy84QWxBQUFCTjhITndZbUFEWUFBQUVIQUo4QWlnRTNBQXUyQWlRQUFRRnFWZ0FyTkFELy93QTJBQUFDL1FZQUJpWUFWZ0FBQVFZQW44Z0FBQXUyQWgwREFRR3BWZ0FyTkFELy93QkwvK3dFamdjNEJpWUFOd0FBQVFjQWRRR1ZBVGdBQzdZQk9nOEJBVTlXQUNzMEFQLy9BRW4vN0FQSEJnQUdKZ0JYQUFBQkJ3QjFBVFlBQUFBTHRnRTJEZ0VCakZZQUt6UUEvLzhBUy8vc0JJNEhPQVltQURjQUFBRUhBSjRBbGdFNEFBdTJBVDBQQVFGYVZnQXJOQUQvL3dCSi8rd0R4d1lBQmlZQVZ3QUFBUVlBbmpjQUFBdTJBVGtPQVFHWFZnQXJOQUQvL3dCTC9qNEVqZ1hFQmlZQU53QUFBUWNBZVFHZy8vOEFDN1lCT2lzQUFCTldBQ3MwQVAvL0FFbitOUVBIQkU0R0pnQlhBQUFCQndCNUFUNy85Z0FMdGdFMktRQUFDbFlBS3pRQS8vOEFTLzM3Qkk0RnhBWW1BRGNBQUFFSEFjb0JqdjZYQUE2MEFVTXJBUUc0LzZDd1ZnQXJOUC8vQUVuOThnUEhCRTRHSmdCWEFBQUJCd0hLQVN2K2pnQU90QUUvS1FFQnVQK1hzRllBS3pULy93QkwvK3dFamdjNEJpWUFOd0FBQVFjQW53Q3NBVGdBQzdZQlFBOEJBVmhXQUNzMEFQLy9BRW4vN0FQSEJnQUdKZ0JYQUFBQkJnQ2ZUUUFBQzdZQlBBNEJBWlZXQUNzMEFQLy9BQzMrQUFTMEJiQUdKZ0E0QUFBQkJ3SEtBWHorbkFBT3RBSVJBZ0VCdVArTnNGWUFLelQvL3dBSy9md0NkUVZEQmlZQVdBQUFBUWNCeWdERy9wZ0FEclFDSHhFQkFiai9vYkJXQUNzMC8vOEFMZjVEQkxRRnNBWW1BRGdBQUFFSEFIa0JqZ0FFQUF1MkFnZ0NBUUFBVmdBck5BRC8vd0FLL2o4Q293VkRCaVlBV0FBQUFRY0FlUURaQUFBQUM3WUNGaEVBQUJSV0FDczBBUC8vQUMwQUFBUzBCellHSmdBNEFBQUJCd0NmQUp3Qk5nQUx0Z0lPQXdFQmFWWUFLelFBLy84QUN2L3NBeUlHZmdRbUFGZ0FBQUVIQWNvQnpnVitBQTYwQWhvRUFRQzQvNml3VmdBck5QLy9BSUQvN0FTL0J5b0dKZ0E1QUFBQkJ3Q2xBTGtCTndBTHRnRWtDd0VCYTFZQUt6UUEvLzhBZC8vc0Eva0Y5QVltQUZrQUFBRUdBS1ZWQVFBTHRnSXFFUUVCcWxZQUt6UUEvLzhBZ1Avc0JMOEc0d1ltQURrQUFBRUhBSEFBc0FFNUFBdTJBUmdMQVFHbVZnQXJOQUQvL3dCMy8rd0QrUVd0QmlZQVdRQUFBUVlBY0UwREFBdTJBaDRSQVFIbFZnQXJOQUQvL3dDQS8rd0V2d2NlQmlZQU9RQUFBUWNBb1FEa0FUY0FDN1lCR3dBQkFWTldBQ3MwQVAvL0FIZi83QVA1QmVjR0pnQlpBQUFCQndDaEFJQUFBQUFMdGdJaEVRRUJrbFlBS3pRQS8vOEFnUC9zQkw4SGtRWW1BRGtBQUFFSEFLTUJUQUZzQUEyM0FnRWhBQUVCUjFZQUt6UTBBUC8vQUhmLzdBUDVCbG9HSmdCWkFBQUJCd0NqQU9nQU5RQU50d01DSnhFQkFZWldBQ3MwTkFELy93Q0EvK3dFdndjMkJpWUFPUUFBQVFjQXBnRTdBVGNBRGJjQ0FSWUFBUUZYVmdBck5EUUEvLzhBZC8vc0JEQUYvd1ltQUZrQUFBRUhBS1lBMkFBQUFBMjNBd0ljRVFFQmxsWUFLelEwQUFBQ0FJRCtqQVMvQmJBQUZRQXJBQnRBRFI0bEFRc0NjaGNXRVJFR0NYSUFLeklTT1Rrck1pOHpNREZCTXhFVUJnWWpJaVltTlJFekVSUVdGak15TmpZMUF4Y09BaFVVRmpNeU5qY1hCZ1lqSWlZMU5EWTJBOFg2a1BlWW5mYU4ra2lFV2xxRFNHTnpMa2txSUNjZUxBOFhHVTQ4V0hzdWFBV3cvRE9tNEhGeDRLWUR6Znd6YVlkQVFJZHAvbzg2SGo1RUtCNG5FUWVMRHgxbFlqVmxYUUFBQXdCMy9sUUQrUVE2QUFRQUd3QXhBQ0ZBRVNRckQzSUJFUVp5SEIwZEJBUVlDd3R5QUNzeU1oRXpFVE1yTWlzeU1ERmxFVE1SSXhNM0ZBNENJeUl1QWpVUk14RVVIZ0l6TWpZMkV4Y09BaFVVRmpNeU5qY1hCZ1lqSWlZMU5EWTJBd2Z5NUJSUk1HU2NiVStFWHpUeEhEQkFKR2QzTTBkekwwa3FJQ2dlTEE0WUdVODdXWG91YVA4RE8vdkdBZUFDYmJlSFN5NWdtbXNDdS8xRE8wOHdGRkdLL3JBNkhqMUZLQjRuRVFlTER4MW1ZalJsWGYvL0FDOEFBQWJtQnpjR0pnQTdBQUFCQndDZUFha0JOd0FMdGdRWkZRRUJiRllBS3pRQS8vOEFJd0FBQmNnR0FBWW1BRnNBQUFFSEFKNEJEQUFBQUF1MkJCa1ZBUUdyVmdBck5BRC8vd0FJQUFBRTJRYzJCaVlBUFFBQUFRY0FuZ0NNQVRZQUM3WUJEQUlCQVd0V0FDczBBUC8vQUF6K1N3UGVCZ0FHSmdCZEFBQUJCZ0NlSEFBQUM3WUNIQUVCQWF0V0FDczBBUC8vQUFnQUFBVFpCd01HSmdBOUFBQUJCd0JxQUswQk5nQU50d0lCSGdJQkFYZFdBQ3MwTkFELy93QlFBQUFFamdjM0JpWUFQZ0FBQVFjQWRRR0hBVGNBQzdZRERnMEJBV0ZXQUNzMEFQLy9BRkVBQUFQQkJnQUdKZ0JlQUFBQkJ3QjFBUjhBQUFBTHRnTU9EUUVCb0ZZQUt6UUEvLzhBVUFBQUJJNEhGQVltQUQ0QUFBRUhBS0lCYkFFL0FBdTJBeGNJQVFGMlZnQXJOQUQvL3dCUkFBQUR3UVhkQmlZQVhnQUFBUWNBb2dFRUFBZ0FDN1lERndnQkFiVldBQ3MwQVAvL0FGQUFBQVNPQnpjR0pnQStBQUFCQndDZkFKNEJOd0FMdGdNVUNBRUJhbFlBS3pRQS8vOEFVUUFBQThFR0FBWW1BRjRBQUFFR0FKODJBQUFMdGdNVUNBRUJxVllBS3pRQS8vLy8vQUFBQjA0SFFnWW1BSUVBQUFFSEFIVUN3UUZDQUF1MkJoa0RBUUZzVmdBck5BRC8vd0JJLytzR2hnWUJCaVlBaGdBQUFRY0FkUUoxQUFFQUM3WURYdzhCQVkxV0FDczBBUC8vQUduL29nVWlCNEFHSmdDREFBQUJCd0IxQWVNQmdBQUx0Z00wRmdFQmxsWUFLelFBLy84QVR2OTFCRHdGL1FZbUFJa0FBQUVIQUhVQk12LzlBQXUyQXpBS0FRR0xWZ0FyTkFELy8vK2xBQUFFS3dTTkJpWUNRQUFBQUFjQ052OFkvMnYvLy8rbEFBQUVLd1NOQmlZQ1FBQUFBQWNDTnY4WS8ydi8vd0FsQUFBRUdRU05CaVlCNkFBQUFBWUNOak82Ly84QUNBQUFCSkVHSGdZbUFrTUFBQUVIQUVRQXdBQWVBQXUyQXhBSEFRRnJWZ0FyTkFELy93QUlBQUFFa1FZZUJpWUNRd0FBQVFjQWRRRm5BQjRBQzdZRERnTUJBV3RXQUNzMEFQLy9BQWdBQUFTUkJoNEdKZ0pEQUFBQkJnQ2VaeDRBQzdZREV3TUJBV3RXQUNzMEFQLy9BQWdBQUFTUkJoSUdKZ0pEQUFBQkJnQ2xhaDhBQzdZREd3TUJBV3RXQUNzMEFQLy9BQWdBQUFTUkJlc0dKZ0pEQUFBQkJ3QnFBSWdBSGdBTnR3UURGd01CQVd0V0FDczBOQUQvL3dBSUFBQUVrUVo0QmlZQ1F3QUFBUWNBb3dEOUFGTUFEYmNFQXhrREFRRlJWZ0FyTkRRQS8vOEFDQUFBQkpFR21BWW1Ba01BQUFBSEFqY0EvUC8rLy84QVQvNCtCRU1FblFZbUFrRUFBQUFIQUhrQmJmLy8vLzhBZGdBQUE3WUdIZ1ltQWpnQUFBRUhBRVFBa3dBZUFBdTJCQklIQVFGc1ZnQXJOQUQvL3dCMkFBQUR0Z1llQmlZQ09BQUFBUWNBZFFFNkFCNEFDN1lFRUFjQkFXeFdBQ3MwQVAvL0FIWUFBQU8yQmg0R0pnSTRBQUFCQmdDZU94NEFDN1lFRmdjQkFXeFdBQ3MwQVAvL0FIWUFBQU8yQmVzR0pnSTRBQUFCQmdCcVhCNEFEYmNGQkJrSEFRR0VWZ0FyTkRRQS8vLy9xQUFBQVh3R0hnWW1BZk1BQUFFSEFFVC9jQUFlQUF1MkFRWURBUUZyVmdBck5BRC8vd0NHQUFBQ1dRWWVCaVlCOHdBQUFRWUFkUmNlQUF1MkFRUURBUUZyVmdBck5BRC8vLytuQUFBQ1d3WWVCaVlCOHdBQUFRY0FudjhYQUI0QUM3WUJDUU1CQVhaV0FDczBBUC8vLzV3QUFBSmxCZXNHSmdIekFBQUJCd0JxL3prQUhnQU50d0lCRFFNQkFZUldBQ3MwTkFELy93QjJBQUFFWndZU0JpWUI3Z0FBQVFjQXBRQ0xBQjhBQzdZQkdBWUJBWFpXQUNzMEFQLy9BRTcvOEFSdUJoNEdKZ0h0QUFBQkJ3QkVBTTRBSGdBTHRnSXVFUUVCVzFZQUt6UUEvLzhBVHYvd0JHNEdIZ1ltQWUwQUFBRUhBSFVCZFFBZUFBdTJBaXdSQVFGYlZnQXJOQUQvL3dCTy8vQUViZ1llQmlZQjdRQUFBUVlBbm5VZUFBdTJBakVSQVFGYlZnQXJOQUQvL3dCTy8vQUViZ1lTQmlZQjdRQUFBUVlBcFhnZkFBdTJBakVSQVFGdlZnQXJOQUQvL3dCTy8vQUViZ1hyQmlZQjdRQUFBUWNBYWdDWEFCNEFEYmNEQWpVUkFRRjBWZ0FyTkRRQS8vOEFhZi93QkNBR0hnWW1BZWNBQUFFSEFFUUFzd0FlQUF1MkFSZ0xBUUZyVmdBck5BRC8vd0JwLy9BRUlBWWVCaVlCNXdBQUFRY0FkUUZhQUI0QUM3WUJGZ3NCQVd0V0FDczBBUC8vQUduLzhBUWdCaDRHSmdIbkFBQUJCZ0NlV3g0QUM3WUJHd3NCQVd0V0FDczBBUC8vQUduLzhBUWdCZXNHSmdIbkFBQUJCZ0JxZkI0QURiY0NBUjhMQVFHRVZnQXJORFFBLy84QUJnQUFCRGdHSGdZbUFlTUFBQUVIQUhVQk1RQWVBQXUyQXc0SkFRRnJWZ0FyTkFELy93QUlBQUFFa1FYTEJpWUNRd0FBQVFZQWNHRWhBQXUyQXhBREFRR3dWZ0FyTkFELy93QUlBQUFFa1FZRkJpWUNRd0FBQVFjQW9RQ1ZBQjRBQzdZREV3TUJBVjFXQUNzMEFBQUVBQWorVkFTUkJJMEFCQUFKQUEwQUl3QWhRQThOREF3REZoMElBMzBQRGdVRkFSSUFQek1STXpNL015OHpFamt2TXpBeFFRRWpBVE1CQVNjekFRRVZJVFVCRnc0Q0ZSUVdNekkyTnhjR0JpTWlKalUwTmpZQ1d2Nmk5QUhWb2dFZS9xQWxwUUhVL3YzOVpnTDFjeTVLS1NBbkhpd1BGeGxPUEZoN0xtZ0RudnhpQkkzN2N3T2c3ZnR6QWJDMXRmNktPaDQ5UlNnZUp4RUhpdzhkWm1JMFpWMEEvLzhBVC8vd0JFTUdIZ1ltQWtFQUFBRUhBSFVCWndBZUFBdTJBU2dRQVFGYlZnQXJOQUQvL3dCUC8vQUVRd1llQmlZQ1FRQUFBUVlBbm1nZUFBdTJBUzBRQVFGYlZnQXJOQUQvL3dCUC8vQUVRd1g3QmlZQ1FRQUFBUWNBb2dGTUFDWUFDN1lCTVJBQkFYQldBQ3MwQVAvL0FFLy84QVJEQmg0R0pnSkJBQUFCQmdDZmZoNEFDN1lCTGhBQkFXUldBQ3MwQVAvL0FHRUFBQVFyQmg0R0pnSkFBQUFCQmdDZjh4NEFDN1lDSkIwQkFYUldBQ3MwQVAvL0FIWUFBQU8yQmNzR0pnSTRBQUFCQmdCd05TRUFDN1lFRWdjQkFiQldBQ3MwQVAvL0FIWUFBQU8yQmdVR0pnSTRBQUFCQmdDaGFCNEFDN1lFRlFjQkFWNVdBQ3MwQVAvL0FIWUFBQU8yQmZzR0pnSTRBQUFCQndDaUFSOEFKZ0FMdGdRWkJ3RUJnRllBS3pRQUFBVUFkdjVVQTdZRWpRQURBQWNBQ3dBUEFDVUFJMEFRR0I4TENnb0dEdzRIZlJFUUVBVUdFZ0EvTXpNUk16OHpNeEk1THpNdk16QXhaUlVoTlJNUkl4RUJGU0UxQVJVaE5RRVhEZ0lWRkJZek1qWTNGd1lHSXlJbU5UUTJOZ08yL1dWTThRTHEvYnNDbWYxbkFjVnpMMGtxSUNnZUxBNFlHVTg3V1hvdWFMKy92d1BPKzNNRWpmNHR2NzhCMDhEQSs2MDZIajFGS0I0bkVRZUxEeDFtWWpSbFhRRC8vd0IyQUFBRHRnWWVCaVlDT0FBQUFRWUFuMUVlQUF1MkJCWUhBUUYwVmdBck5BRC8vd0JXLy9BRVN3WWVCaVlCOVFBQUFRWUFubThlQUF1MkFUQVFBUUZtVmdBck5BRC8vd0JXLy9BRVN3WUZCaVlCOVFBQUFRY0FvUUNkQUI0QUM3WUJNQkFCQVUxV0FDczBBUC8vQUZiLzhBUkxCZnNHSmdIMUFBQUJCd0NpQVZNQUpnQUx0Z0UwRUFFQmNGWUFLelFBLy84QVZ2MzdCRXNFblFZbUFmVUFBQUVIQWNvQmMvNlhBQTYwQVRRRkFRRzQvNW13VmdBck5QLy9BSFlBQUFSbkJoNEdKZ0gwQUFBQkJnQ2VmUjRBQzdZREVRY0JBWFpXQUNzMEFQLy8vNUVBQUFKdEJoSUdKZ0h6QUFBQkJ3Q2wveG9BSHdBTHRnRUpBd0VCZjFZQUt6UUEvLy8vcndBQUFsWUZ5d1ltQWZNQUFBRUhBSEQvRWdBaEFBdTJBUVlEQVFHd1ZnQXJOQUQvLy8rNkFBQUNSQVlGQmlZQjh3QUFBUWNBb2Y5RkFCNEFDN1lCQ1FNQkFWMVdBQ3MwQVAvL0FCZitWQUdOQkkwR0pnSHpBQUFBQmdDazdnRC8vd0I5QUFBQmdnWDdCaVlCOHdBQUFRWUFvdndtQUF1MkFRMERBUUdBVmdBck5BRC8vd0FtLy9BRVBnWWVCaVlCOGdBQUFRY0FuZ0Q2QUI0QUM3WUJHUUVCQVhaV0FDczBBUC8vQUhiK0F3Um5CSTBHSmdIeEFBQUFCd0hLQVJUK24vLy9BSFlBQUFPU0JoNEdKZ0h3QUFBQkJnQjFEUjRBQzdZQ0NBY0JBV3RXQUNzMEFQLy9BSGIrQkFPU0JJMEdKZ0h3QUFBQkJ3SEtBUkwrb0FBT3RBSVJCZ0VCdVArVnNGWUFLelQvL3dCMkFBQURrZ1NRQmlZQjhBQUFBQWNCeWdHU0E1RC8vd0IyQUFBRGtnU05CaVlCOEFBQUFBY0FvZ0YxL1VILy93QjJBQUFFWndZZUJpWUI3Z0FBQVFjQWRRR0lBQjRBQzdZQkNnWUJBV3RXQUNzMEFQLy9BSGI5L1FSbkJJMEdKZ0h1QUFBQUJ3SEtBWHorbWYvL0FIWUFBQVJuQmg0R0pnSHVBQUFCQndDZkFKOEFIZ0FMdGdFUUJnRUJkRllBS3pRQS8vOEFUdi93Qkc0Rnl3WW1BZTBBQUFFR0FIQndJUUFMdGdJdUVRRUJvRllBS3pRQS8vOEFUdi93Qkc0R0JRWW1BZTBBQUFFSEFLRUFvd0FlQUF1MkFqRVJBUUZOVmdBck5BRC8vd0JPLy9BRWJnWWRCaVlCN1FBQUFRY0FwZ0Q3QUI0QURiY0RBakFSQVFGUlZnQXJORFFBLy84QWRRQUFCRHNHSGdZbUFlb0FBQUVIQUhVQkdnQWVBQXUyQWg4QUFRRnJWZ0FyTkFELy93QjEvZ1FFT3dTTkJpWUI2Z0FBQUFjQnlnRWIvcUQvL3dCMUFBQUVPd1llQmlZQjZnQUFBUVlBbnpBZUFBdTJBaVVBQVFGMFZnQXJOQUQvL3dBLy8vQUQ4QVllQmlZQjZRQUFBUWNBZFFGSEFCNEFDN1lCT2c4QkFWdFdBQ3MwQVAvL0FELy84QVB3Qmg0R0pnSHBBQUFCQmdDZVJ4NEFDN1lCUHc4QkFXWldBQ3MwQVAvL0FELytQd1B3QkowR0pnSHBBQUFBQndCNUFWSUFBUC8vQUQvLzhBUHdCaDRHSmdIcEFBQUJCZ0NmWFI0QUM3WUJRQThCQVdaV0FDczBBUC8vQUNYK0F3UVpCSTBHSmdIb0FBQUJCd0hLQVNuK253QU90QUlSQWdFQnVQK1FzRllBS3pULy93QWxBQUFFR1FZZUJpWUI2QUFBQVFZQW4wb2VBQXUyQWc0SEFRRjBWZ0FyTkFELy93QWwva1lFR1FTTkJpWUI2QUFBQUFjQWVRRThBQWYvL3dCcC8vQUVJQVlTQmlZQjV3QUFBUVlBcFYwZkFBdTJBUnNMQVFGL1ZnQXJOQUQvL3dCcC8vQUVJQVhMQmlZQjV3QUFBUVlBY0ZVaEFBdTJBUmdMQVFHd1ZnQXJOQUQvL3dCcC8vQUVJQVlGQmlZQjV3QUFBUWNBb1FDSUFCNEFDN1lCR3dzQkFWMVdBQ3MwQVAvL0FHbi84QVFnQm5nR0pnSG5BQUFCQndDakFQQUFVd0FOdHdJQklRc0JBVkZXQUNzME5BRC8vd0JwLy9BRU9BWWRCaVlCNXdBQUFRY0FwZ0RnQUI0QURiY0NBUm9MQVFGaFZnQXJORFFBQUFJQWFmNkVCQ0FFalFBVkFDc0FHa0FNSGlVWEZoWVJCZ3R5REFCOUFEOHlLekl5RVRNdk16QXhRVE1SRkFZR0l5SW1KalVSTXhFVUZoWXpNalkyTlFNWERnSVZGQll6TWpZM0Z3WUdJeUltTlRRMk5nTXU4bnpXaVl2WGV2QTVha2xKYURoVGN5OUpLaUFuSHl3T0Z4bE9QRmg2TG1nRWpmMEFocmxlWHJtR0F3RDlBRTFqTGk1alRmN2RPaDQ5UlNnZUp4RUhpdzhkWm1JMFpWMy8vd0FuQUFBRjVRWWVCaVlCNVFBQUFRY0FuZ0VhQUI0QUM3WUVHd29CQVhaV0FDczBBUC8vQUFZQUFBUTRCaDRHSmdIakFBQUJCZ0NlTVI0QUM3WURFd2tCQVhaV0FDczBBUC8vQUFZQUFBUTRCZXNHSmdIakFBQUJCZ0JxVWg0QURiY0VBeGNKQVFHRVZnQXJORFFBLy84QVFRQUFBL1VHSGdZbUFlSUFBQUVIQUhVQk5BQWVBQXUyQXc0TkFRRnJWZ0FyTkFELy93QkJBQUFEOVFYN0JpWUI0Z0FBQVFjQW9nRVpBQ1lBQzdZREZ3MEJBWUJXQUNzMEFQLy9BRUVBQUFQMUJoNEdKZ0hpQUFBQkJnQ2ZTeDRBQzdZREZBMEJBWFJXQUNzMEFQLy9BQkVBQUFVL0JqOEdKZ0FsQUFBQkJnQ3VyZjhBRHJRRERnTUFBTGovUHJCV0FDczAvLy8vUWdBQUJMRUdRUVFtQUNsa0FBRUhBSzcrZFFBQkFBNjBCQkFIQUFDNC96K3dWZ0FyTlAvLy8wc0FBQVY3QmtBRUpnQXNaQUFBQndDdS9uNEFBUC8vLzA0QUFBSUVCa0lFSmdBdFpBQUJCd0N1L29FQUFnQU90QUVFQXdBQXVQOUJzRllBS3pULy8vKzEvK3dGTVFZL0JDWUFNeFFBQVFjQXJ2N28vLzhBRHJRQ0xCRUFBTGovS3JCV0FDczAvLy8vUVFBQUJUMEdQd1FtQUQxa0FBRUhBSzcrZFAvL0FBdTJBUW9JQUFDT1ZnQXJOQUQvLy8vQ0FBQUU3d1kvQkNZQXVoUUFBUWNBcnY3MS8vOEFEclFETmgwQUFMai9LckJXQUNzMC8vLy9oZi8wQXM0R213WW1BTU1BQUFFSEFLLy9GLy9yQUJCQUNRTUNBU3NBQVFHaVZnQXJORFEwLy84QUVRQUFCVDhGc0FZR0FDVUFBUC8vQUpRQUFBU2xCYkFHQmdBbUFBRC8vd0NVQUFBRVRRV3dCZ1lBS1FBQS8vOEFVQUFBQkk0RnNBWUdBRDRBQVAvL0FKUUFBQVVYQmJBR0JnQXNBQUQvL3dDbEFBQUJvQVd3QmdZQUxRQUEvLzhBbEFBQUJSWUZzQVlHQUM4QUFQLy9BSlFBQUFacUJiQUdCZ0F4QUFELy93Q1VBQUFGRndXd0JnWUFNZ0FBLy84QVpmL3NCUjBGeEFZR0FETUFBUC8vQUpRQUFBVFBCYkFHQmdBMEFBRC8vd0F0QUFBRXRBV3dCZ1lBT0FBQS8vOEFDQUFBQk5rRnNBWUdBRDBBQVAvL0FDWUFBQVRwQmJBR0JnQThBQUQvLy8rK0FBQUNod2NMQmlZQUxRQUFBUWNBYXY5YkFUNEFEYmNDQVJrREFRR0RWZ0FyTkRRQS8vOEFDQUFBQk5rSEF3WW1BRDBBQUFFSEFHb0FyUUUyQUEyM0FnRWVBZ0VCZDFZQUt6UTBBUC8vQUZiLzZ3UjdCandHSmdDN0FBQUJCd0N1QVVuLy9BQUx0Z05DQmdFQm1sWUFLelFBLy84QVl2L3NCQklHT3dZbUFMOEFBQUVIQUs0QkZmLzdBQXUyQWtBckFRR2FWZ0FyTkFELy93QjkvbUVFQmdZOEJpWUF3UUFBQVFjQXJnRWQvL3dBQzdZQ0hRTUJBYTVXQUNzMEFQLy9BS1AvOUFKZUJpWUdKZ0REQUFBQkJnQ3VBZVlBQzdZQkVnQUJBWmxXQUNzMEFQLy9BSC8vNndRRUJxTUdKZ0RMQUFBQkJnQ3ZIUE1BRUVBSkF3SUJPQThCQWFKV0FDczBORFQvL3dDTkFBQUViUVE2QmdZQWpnQUEvLzhBVHYvc0JEd0VUZ1lHQUZNQUFQLy9BSlArWUFRa0JEb0dCZ0IyQUFELy93QVdBQUFEM3dRNkJnWUFXZ0FBLy84QU5QNU5CRnNFU2dZR0FvQUFBUC8vLzhQLzlBS01CYmdHSmdEREFBQUJCd0JxLzJELzZ3QU50d0lCSndBQkFhSldBQ3MwTkFELy93Qi8vK3NFQkFYQUJpWUF5d0FBQVFZQWFtWHpBQTIzQWdFMER3RUJvbFlBS3pRMEFQLy9BRTcvN0FROEJqd0dKZ0JUQUFBQkJ3Q3VBUnYvL0FBTHRnSXNCZ0VCbWxZQUt6UUEvLzhBZi8vckJBUUdMZ1ltQU1zQUFBRUhBSzRCQnYvdUFBdTJBUjhQQVFHWlZnQXJOQUQvL3dCbC8rc0dNQVlzQmlZQXpnQUFBUWNBcmdJbi8rd0FDN1lDUUI4QkFaWldBQ3MwQVAvL0FKUUFBQVJOQndzR0pnQXBBQUFCQndCcUFLNEJQZ0FOdHdVRUpRY0JBWU5XQUNzME5BRC8vd0NaQUFBRU53YytCaVlBc1FBQUFRY0FkUUdFQVQ0QUM3WUJCZ1VCQVd4V0FDczBBQUFCQUV2LzdBU09CY1FBT1FBYlFBMEtKZzgyTVNzSmNoZ1VEd055QUN2TU15dk1NeEk1T1RBeFFUUXVBaWN1QXpVMFBnSXpNaFlXRlNNMEppWWpJZ1lHRlJRZUFoY2VBeFVVRGdJaklpNENOVE1VSGdJek1qWTJBNUliUkh0ZmFLK0NTRXVMdm5PaTYzLzVQWHRlV1hZNkprNTJVSG0wZUR4S2liOTFhY3VtWXZzeFdIVkRXSGM4QVhjdFJqbzNIU0JQYVlsYVdaSnJPM2pLZWtodlFEWmNPaWxET1RJWEpGZHVpMWhjazJjM09IT3RkRWRrUHg0eVd2Ly9BS1VBQUFHZ0JiQUdCZ0F0QUFELy8vKytBQUFDaHdjTEJpWUFMUUFBQVFjQWF2OWJBVDRBRGJjQ0FSa0RBUUdEVmdBck5EUUEvLzhBTC8vc0ErVUZzQVlHQUM0QUFQLy9BSmtBQUFVc0JiQUdCZ0k4QUFELy93Q1VBQUFGRmdjekJpWUFMd0FBQVFjQWRRRnhBVE1BQzdZRERnTUJBVnRXQUNzMEFQLy9BREwvNndUaEJ5VUdKZ0RlQUFBQkJ3Q2hBTmtCUGdBTHRnSWVBUUVCWGxZQUt6UUEvLzhBRVFBQUJUOEZzQVlHQUNVQUFQLy9BSlFBQUFTbEJiQUdCZ0FtQUFELy93Q1pBQUFFTndXd0JnWUFzUUFBLy84QWxBQUFCRTBGc0FZR0FDa0FBUC8vQUpJQUFBVU5CeVVHSmdEY0FBQUJCd0NoQVJrQlBnQUx0Z0VQQVFFQlhsWUFLelFBLy84QWxBQUFCbW9Gc0FZR0FERUFBUC8vQUpRQUFBVVhCYkFHQmdBc0FBRC8vd0JsLyt3RkhRWEVCZ1lBTXdBQS8vOEFtUUFBQlJRRnNBWUdBTFlBQVAvL0FKUUFBQVRQQmJBR0JnQTBBQUQvL3dCbS8rd0U2d1hFQmdZQUp3QUEvLzhBTFFBQUJMUUZzQVlHQURnQUFQLy9BQ1lBQUFUcEJiQUdCZ0E4QUFELy93QlcvK3dEK1FST0JnWUFSUUFBLy84QVVmL3NCQW9FVGdZR0FFa0FBUC8vQUlRQUFBUVBCZG9HSmdEd0FBQUJCd0NoQUpMLzh3QUx0Z0VQQVFFQmZWWUFLelFBLy84QVR2L3NCRHdFVGdZR0FGTUFBUC8vQUgzK1lBUXZCRTRHQmdCVUFBQUFBUUJPLyt3RDhRUk9BQ2NBRTBBSkFBa2RGQWR5Q1F0eUFDc3JNaEV6TURGbE1qWTJOek1PQWlNaUxnSTFOVFErQWpNeUZoWVhJeTRDSXlJT0FoVVZGQjRDQWpZN1h6c0Q0d0o0eG5oOHVIbzlQWHE0ZTRMRWNRTGpBelZmUWtsZ05oY1dOMkNzTDFRM2FheGxWWmJFY0NOd3haWlZaN2Q1UEdFNk8yVjlReU5EZm1NN0FQLy9BQXorU3dQZUJEb0dCZ0JkQUFELy93QWZBQUFENmdRNkJnWUFYQUFBLy84QVVmL3NCQW9GelFZbUFFa0FBQUVHQUdwakFBQU50d0lCUVFzQkFhTldBQ3MwTkFELy93Q0RBQUFEVEFYekJpWUE3QUFBQVFjQWRRREUvL01BQzdZQkJnVUJBWXRXQUNzMEFQLy9BRW4vN0FQSEJFNEdCZ0JYQUFELy93QjhBQUFCa0FYV0JnWUFUUUFBLy8vL3FBQUFBbkVGeEFZbUFJMEFBQUVIQUdyL1JmLzNBQTIzQWdFWkF3RUJ0VllBS3pRMEFQLy8vNnYrU3dHSEJkWUdCZ0JPQUFELy93Q1BBQUFFWlFYeUJpWUE4UUFBQVFjQWRRRkwvL0lBQzdZRERnTUJBWXBXQUNzMEFQLy9BQXorU3dQZUJlY0dKZ0JkQUFBQkJnQ2hTUUFBQzdZQ0hnRUJBWkpXQUNzMEFQLy9BQzhBQUFibUJ6Y0dKZ0E3QUFBQkJ3QkVBZ0lCTndBTHRnUVlGUUVCWVZZQUt6UUEvLzhBSXdBQUJjZ0dBQVltQUZzQUFBRUhBRVFCWlFBQUFBdTJCQmdWQVFHZ1ZnQXJOQUQvL3dBdkFBQUc1Z2MzQmlZQU93QUFBUWNBZFFLcEFUY0FDN1lFRmdFQkFXRldBQ3MwQVAvL0FDTUFBQVhJQmdBR0pnQmJBQUFCQndCMUFnd0FBQUFMdGdRV0FRRUJvRllBS3pRQS8vOEFMd0FBQnVZSEJBWW1BRHNBQUFFSEFHb0J5Z0UzQUEyM0JRUXJGUUVCZUZZQUt6UTBBUC8vQUNNQUFBWElCYzBHSmdCYkFBQUJCd0JxQVMwQUFBQU50d1VFS3hVQkFiZFdBQ3MwTkFELy93QUlBQUFFMlFjMkJpWUFQUUFBQVFjQVJBRGxBVFlBQzdZQkN3SUJBV0JXQUNzMEFQLy9BQXorU3dQZUJnQUdKZ0JkQUFBQkJnQkVkUUFBQzdZQ0d3RUJBYUJXQUNzMEFQLy9BRklEL2dFSkJnQUdCZ0FMQUFELy93QmdBL2dDT2dZQUJnWUFCZ0FBLy84QWpQL3lBNzRGc0FRbUFBVUFBQUFIQUFVQ0hnQUEvLy8vcXY1TEFuRUYzZ1ltQUp3QUFBRUhBSi8vUFAvZUFBdTJBUmdBQVFHQVZnQXJOQUQvL3dBM0JBVUJZUVlBQmdZQmhRQUEvLzhBbEFBQUJtb0hOd1ltQURFQUFBRUhBSFVDa3dFM0FBdTJBeEVBQVFGaFZnQXJOQUQvL3dCOEFBQUdmQVlBQmlZQVVRQUFBUWNBZFFLa0FBQUFDN1lETXdNQkFhQldBQ3MwQVAvL0FCSCtjZ1UvQmJBR0pnQWxBQUFCQndDbkFYUUFCQUFRdFFRREVRVUJBYmovdGJCV0FDczBOUC8vQUZiK2R3UDVCRTRHSmdCRkFBQUJCd0NuQUtjQUNRQVF0UU1DUGpFQkFiai95YkJXQUNzME5QLy9BSlFBQUFSTkJ6NEdKZ0FwQUFBQkJ3QkVBT1VCUGdBTHRnUVNCd0VCYkZZQUt6UUEvLzhBa2dBQUJRMEhQZ1ltQU53QUFBRUhBRVFCUkFFK0FBdTJBUXdCQVFGc1ZnQXJOQUQvL3dCUi8rd0VDZ1lBQmlZQVNRQUFBUWNBUkFDYkFBQUFDN1lCTGdzQkFZeFdBQ3MwQVAvL0FJUUFBQVFQQmZNR0pnRHdBQUFCQndCRUFMMy84d0FMdGdFTUFRRUJpMVlBS3pRQS8vOEFSZ0FBQldRRnNBWUdBTGtBQVAvL0FGTCtKUVYvQkRvR0JnRE5BQUQvL3dBUUFBQUU5UWI5QmlZQkdRQUFBUWNBckFST0FROEFEYmNEQWhVVEFRRXRWZ0FyTkRRQS8vLy84Z0FBQkJvRjBBWW1BUm9BQUFFSEFLd0Q2di9pQUEyM0F3SVpGd0VCZTFZQUt6UTBBUC8vQUU3K1N3aG9CRTRFSmdCVEFBQUFCd0JkQklvQUFQLy9BR1grU3dsaEJjUUVKZ0F6QUFBQUJ3QmRCWU1BQVAvL0FFbitOd1NDQmNRR0pnRGJBQUFCQndKaEFaRC9uUUFMdGdKQ0tnQUFaRllBS3pRQS8vOEFUdjQ0QThjRVRRWW1BTzhBQUFFSEFtRUJOUCtlQUF1MkFqOHBBQUJsVmdBck5BRC8vd0JtL2pvRTZ3WEVCaVlBSndBQUFRY0NZUUhSLzZBQUM3WUJLd1VBQUdSV0FDczBBUC8vQUU3K09nUHhCRTRHSmdCSEFBQUJCd0poQVVqL29BQUx0Z0VyQ1FBQVpGWUFLelFBLy84QUNBQUFCTmtGc0FZR0FEMEFBUC8vQUI3K1h3UDFCRG9HQmdDOUFBRC8vd0NsQUFBQm9BV3dCZ1lBTFFBQS8vOEFGUUFBQjZJSEpRWW1BTm9BQUFFSEFLRUNIZ0UrQUF1MkJSME5BUUZlVmdBck5BRC8vd0FnQUFBR2F3WGFCaVlBN2dBQUFRY0FvUUdPLy9NQUM3WUZIUTBCQVgxV0FDczBBUC8vQUtVQUFBR2dCYkFHQmdBdEFBRC8vd0FSQUFBRlB3Y2VCaVlBSlFBQUFRY0FvUUR3QVRjQUM3WURFd2NCQVZOV0FDczBBUC8vQUZiLzdBUDVCZWNHSmdCRkFBQUJCZ0NoZXdBQUM3WUNRQThCQVg1V0FDczBBUC8vQUJFQUFBVS9Cd1FHSmdBbEFBQUJCd0JxQU9RQk53QU50d1FESXdjQkFYaFdBQ3MwTkFELy93QlcvK3dEK1FYTkJpWUFSUUFBQVFZQWFtOEFBQTIzQXdKUUR3RUJvMVlBS3pRMEFQLy8vL3dBQUFkT0JiQUdCZ0NCQUFELy93QkkvK3NHaGdSUEJnWUFoZ0FBLy84QWxBQUFCRTBISlFZbUFDa0FBQUVIQUtFQXVnRStBQXUyQkJVSEFRRmVWZ0FyTkFELy93QlIvK3dFQ2dYbkJpWUFTUUFBQVFZQW9YQUFBQXUyQVRFTEFRRitWZ0FyTkFELy93QlYvK3NGSXdiY0JpWUJXQUFBQVFjQWFnRENBUThBRGJjQ0FVSUFBUUZCVmdBck5EUUEvLzhBVi8vc0EvWUVVQVlHQUowQUFQLy9BRmYvN0FQMkJjNEdKZ0NkQUFBQkJnQnFZZ0VBRGJjQ0FVQUFBUUdpVmdBck5EUUEvLzhBRlFBQUI2SUhDd1ltQU5vQUFBRUhBR29DRVFFK0FBMjNCZ1V0RFFFQmcxWUFLelEwQVAvL0FDQUFBQVpyQmNBR0pnRHVBQUFCQndCcUFZSC84d0FOdHdZRkxRMEJBYUpXQUNzME5BRC8vd0JKLyt3RWdnY1lCaVlBMndBQUFRY0FhZ0NmQVVzQURiY0RBbFFWQVFHRVZnQXJORFFBLy84QVR2L3NBOGNGekFZbUFPOEFBQUVHQUdwSS93QU50d01DVVJRQkFhTldBQ3MwTkFELy93Q1NBQUFGRFFicUJpWUEzQUFBQVFjQWNBRG1BVUFBQzdZQkRBZ0JBYkZXQUNzMEFQLy9BSVFBQUFRUEJhQUdKZ0R3QUFBQkJnQndYdllBQzdZQkRBZ0JBZEJXQUNzMEFQLy9BSklBQUFVTkJ3c0dKZ0RjQUFBQkJ3QnFBUXdCUGdBTnR3SUJId0VCQVlOV0FDczBOQUQvL3dDRUFBQUVEd1hBQmlZQThBQUFBUWNBYWdDRi8vTUFEYmNDQVI4QkFRR2lWZ0FyTkRRQS8vOEFaZi9zQlIwSEJRWW1BRE1BQUFFSEFHb0EvQUU0QUEyM0F3SkJFUUVCWmxZQUt6UTBBUC8vQUU3LzdBUThCYzBHSmdCVEFBQUJCZ0JxZVFBQURiY0RBa0VHQVFHalZnQXJORFFBLy84QVlQL3NCUmtGeEFZR0FSY0FBUC8vQUUzLzdBUTdCRTRHQmdFWUFBRC8vd0JnLyt3RkdRY0hCaVlCRndBQUFRY0FhZ0VNQVRvQURiY0VBMDhBQVFGcVZnQXJORFFBLy84QVRmL3NCRHNGemdZbUFSZ0FBQUVHQUdwdEFRQU50d1FEUVFBQkFhVldBQ3MwTkFELy93QmovK3dFNkFjWkJpWUE1d0FBQVFjQWFnRFpBVXdBRGJjREFrSWVBUUdGVmdBck5EUUEvLzhBVVAvckErZ0Z6UVltQVA4QUFBRUdBR3BRQUFBTnR3TUNRUWtCQWFOV0FDczBOQUQvL3dBeS8rc0U0UWJxQmlZQTNnQUFBUWNBY0FDbUFVQUFDN1lDR3hnQkFiRldBQ3MwQVAvL0FBeitTd1BlQmEwR0pnQmRBQUFCQmdCd0ZnTUFDN1lDR3hnQkFlVldBQ3MwQVAvL0FETC82d1RoQndzR0pnRGVBQUFCQndCcUFNMEJQZ0FOdHdNQ0xnRUJBWU5XQUNzME5BRC8vd0FNL2tzRDNnWE5CaVlBWFFBQUFRWUFhajBBQUEyM0F3SXVBUUVCdDFZQUt6UTBBUC8vQURMLzZ3VGhCejBHSmdEZUFBQUJCd0NtQVRFQlBnQU50d01DR1FFQkFXSldBQ3MwTkFELy93QU0va3NEK1FYL0JpWUFYUUFBQVFjQXBnQ2hBQUFBRGJjREFoa0JBUUdXVmdBck5EUUEvLzhBa1FBQUJPMEhDd1ltQU9FQUFBRUhBR29CRGdFK0FBMjNBd0l2RmdFQmcxWUFLelEwQVAvL0FHQUFBQVBoQmNBR0pnRDVBQUFCQmdCcVl2TUFEYmNEQWkwREFRR2lWZ0FyTkRRQS8vOEFtUUFBQmxRSEN3WW1BT1VBQUFFSEFHb0J1Z0UrQUEyM0F3SXlIQUVCZzFZQUt6UTBBUC8vQUk4QUFBWFBCY0FHSmdEOUFBQUJCd0JxQVhULzh3QU50d01DTWh3QkFhSldBQ3MwTkFELy93QlEvK3dFQWdZQUJnWUFTQUFBLy84QUVmNmFCVDhGc0FZbUFDVUFBQUVIQUswRkNnQURBQTYwQXhFRkFRRzQvM1d3VmdBck5QLy9BRmIrbndQNUJFNEdKZ0JGQUFBQkJ3Q3RCRDBBQ0FBT3RBSStNUUVCdVArSnNGWUFLelQvL3dBUkFBQUZQd2U2QmlZQUpRQUFBUWNBcXdVREFUMEFDN1lERHdjQkFYRldBQ3MwQVAvL0FGYi83QVA1Qm9RR0pnQkZBQUFCQndDckJJMEFCd0FMdGdJOER3RUJuRllBS3pRQS8vOEFFUUFBQlQ4SHF3WW1BQ1VBQUFFSEFrY0F3Z0VoQUEyM0JBTVNCd0VCWVZZQUt6UTBBUC8vQUZiLzdBVElCblFHSmdCRkFBQUJCZ0pIVGVvQURiY0RBa0VQQVFHTVZnQXJORFFBLy84QUVRQUFCVDhIcVFZbUFDVUFBQUVIQWtnQXd3RXFBQTIzQkFNUUJ3RUJYRllBS3pRMEFQLy8vNS8vN0FQNUJuSUdKZ0JGQUFBQkJnSklUdk1BRGJjREFqMFBBUUdIVmdBck5EUUEvLzhBRVFBQUJUOEgzUVltQUNVQUFBRUhBa2tBd2dFVkFBMjNCQU1UQXdFQlVGWUFLelEwQVAvL0FGYi83QVJUQnFZR0pnQkZBQUFCQmdKSlRkNEFEYmNEQWtBUEFRRjdWZ0FyTkRRQS8vOEFFUUFBQlQ4SDFBWW1BQ1VBQUFFSEFrb0F4QUVIQUEyM0JBTVFCd0VCT2xZQUt6UTBBUC8vQUZiLzdBUDVCcDBHSmdCRkFBQUJCZ0pLVDlBQURiY0RBajBQQVFGbFZnQXJORFFBLy84QUVmNmFCVDhITndZbUFDVUFBQUFuQUo0QXdnRTNBUWNBclFVS0FBTUFGN1FFR2dVQkFiai9kYmRXQXhFSEFRRnNWZ0FyTkNzMEFQLy9BRmIrbndQNUJnQUdKZ0JGQUFBQUpnQ2VUUUFCQndDdEJEMEFDQUFYdEFOSE1RRUJ1UCtKdDFZQ1BnOEJBWmRXQUNzMEt6UUEvLzhBRVFBQUJUOEhyZ1ltQUNVQUFBRUhBa3dBNmdFeUFBMjNCQU1UQndFQlhGWUFLelEwQVAvL0FGYi83QVA1Qm5nR0pnQkZBQUFCQmdKTWRmd0FEYmNEQWtBUEFRR0hWZ0FyTkRRQS8vOEFFUUFBQlQ4SHJnWW1BQ1VBQUFFSEFrVUE2Z0V5QUEyM0JBTVRCd0VCWEZZQUt6UTBBUC8vQUZiLzdBUDVCbmdHSmdCRkFBQUJCZ0pGZGZ3QURiY0RBa0FQQVFHSFZnQXJORFFBLy84QUVRQUFCVDhJUFFZbUFDVUFBQUVIQWswQTZBRTJBQTIzQkFNVEJ3RUJibFlBS3pRMEFQLy9BRmIvN0FQNUJ3WUdKZ0JGQUFBQkJnSk5jLzhBRGJjREFrQVBBUUdaVmdBck5EUUEvLzhBRVFBQUJUOElGZ1ltQUNVQUFBRUhBbUFBNndFOEFBMjNCQU1UQndFQmIxWUFLelEwQVAvL0FGYi83QVA1QnQ4R0pnQkZBQUFCQmdKZ2RnVUFEYmNEQWtBUEFRR2FWZ0FyTkRRQS8vOEFFZjZhQlQ4SEhnWW1BQ1VBQUFBbkFLRUE4QUUzQVFjQXJRVUtBQU1BRjdRRUlBVUJBYmovZGJkV0F4TUhBUUZUVmdBck5DczBBUC8vQUZiK253UDVCZWNHSmdCRkFBQUFKZ0NoZXdBQkJ3Q3RCRDBBQ0FBWHRBTk5NUUVCdVArSnQxWUNRQThCQVg1V0FDczBLelFBLy84QWxQNmhCRTBGc0FZbUFDa0FBQUVIQUswRXl3QUtBQTYwQkJNQ0FRRzQvMyt3VmdBck5QLy9BRkgrbHdRS0JFNEdKZ0JKQUFBQkJ3Q3RCSTRBQUFBT3RBRXZBQUVCdVArSnNGWUFLelQvL3dDVUFBQUVUUWZCQmlZQUtRQUFBUWNBcXdUTkFVUUFDN1lFRVFjQkFYeFdBQ3MwQVAvL0FGSC83QVFLQm9RR0pnQkpBQUFCQndDckJJSUFCd0FMdGdFdEN3RUJuRllBS3pRQS8vOEFsQUFBQkUwSE1RWW1BQ2tBQUFFSEFLVUFqd0UrQUF1MkJCNEhBUUYyVmdBck5BRC8vd0JSLyt3RUNnWDBCaVlBU1FBQUFRWUFwVVVCQUF1MkFUb0xBUUdXVmdBck5BRC8vd0NVQUFBRkJ3ZXlCaVlBS1FBQUFRY0NSd0NNQVNnQURiY0ZCQlFIQVFGc1ZnQXJORFFBLy84QVVmL3NCTDBHZFFZbUFFa0FBQUVHQWtkQzZ3QU50d0lCTUFzQkFZeFdBQ3MwTkFELy8vL2VBQUFFVFFld0JpWUFLUUFBQVFjQ1NBQ05BVEVBRGJjRkJCSUhBUUZuVmdBck5EUUEvLy8vbFAvc0JBb0djd1ltQUVrQUFBRUdBa2hEOUFBTnR3SUJMZ3NCQVlkV0FDczBOQUQvL3dDVUFBQUVrZ2ZrQmlZQUtRQUFBUWNDU1FDTUFSd0FEYmNGQkJVSEFRRmJWZ0FyTkRRQS8vOEFVZi9zQkVnR3B3WW1BRWtBQUFFR0FrbEMzd0FOdHdJQk1Rc0JBWHRXQUNzME5BRC8vd0NVQUFBRVRRZmJCaVlBS1FBQUFRY0NTZ0NPQVE0QURiY0ZCQklIQVFGRlZnQXJORFFBLy84QVVmL3NCQW9HbmdZbUFFa0FBQUVHQWtwRDBRQU50d0lCTGdzQkFXVldBQ3MwTkFELy93Q1UvcUVFVFFjK0JpWUFLUUFBQUNjQW5nQ05BVDRCQndDdEJNc0FDZ0FYdEFVY0FnRUJ1UDkvdDFZRUV3Y0JBWGRXQUNzMEt6UUEvLzhBVWY2WEJBb0dBQVltQUVrQUFBQW1BSjVDQUFFSEFLMEVqZ0FBQUJlMEFqZ0FBUUc0LzRtM1ZnRXZDd0VCbDFZQUt6UXJOQUQvL3dDbEFBQUNGUWZCQmlZQUxRQUFBUWNBcXdONkFVUUFDN1lCQlFNQkFYeFdBQ3MwQVAvL0FKQUFBQUgvQm5zR0pnQ05BQUFCQndDckEyVC8vZ0FMdGdFRkF3RUJybFlBS3pRQS8vOEFsdjZkQWFrRnNBWW1BQzBBQUFFSEFLMERlQUFHQUE2MEFRY0NBUUc0LzM2d1ZnQXJOUC8vQUhqK29RR1FCZFlHSmdCTkFBQUJCd0N0QTFvQUNnQU90QUlUQWdFQnVQOS9zRllBS3pULy93QmwvcGNGSFFYRUJpWUFNd0FBQVFjQXJRVWJBQUFBRHJRQ0x3WUJBYmovaWJCV0FDczAvLzhBVHY2VEJEd0VUZ1ltQUZNQUFBRUhBSzBFbXYvOEFBNjBBaThSQVFHNC80aXdWZ0FyTlAvL0FHWC83QVVkQjd3R0pnQXpBQUFCQndDckJSc0JQd0FMdGdJdEVRRUJYMVlBS3pRQS8vOEFUdi9zQkR3R2hBWW1BRk1BQUFFSEFLc0VtQUFIQUF1MkFpMEdBUUdjVmdBck5BRC8vd0JsLyt3RlZRZXNCaVlBTXdBQUFRY0NSd0RhQVNJQURiY0RBakFSQVFGUFZnQXJORFFBLy84QVR2L3NCTklHZEFZbUFGTUFBQUVHQWtkWDZnQU50d01DTUFZQkFZeFdBQ3MwTkFELy93QXMvK3dGSFFlcUJpWUFNd0FBQVFjQ1NBRGJBU3NBRGJjREFpNFJBUUZLVmdBck5EUUEvLy8vcXYvc0JEd0djZ1ltQUZNQUFBRUdBa2haOHdBTnR3TUNMZ1lCQVlkV0FDczBOQUQvL3dCbC8rd0ZIUWZlQmlZQU13QUFBUWNDU1FEYUFSWUFEYmNEQWpFUkFRRStWZ0FyTkRRQS8vOEFUdi9zQkY0R3BnWW1BRk1BQUFFR0FrbFkzZ0FOdHdNQ01RWUJBWHRXQUNzME5BRC8vd0JsLyt3RkhRZlZCaVlBTXdBQUFRY0NTZ0RjQVFnQURiY0RBaTRSQVFFb1ZnQXJORFFBLy84QVR2L3NCRHdHblFZbUFGTUFBQUVHQWtwWjBBQU50d01DTGdZQkFXVldBQ3MwTkFELy93QmwvcGNGSFFjNEJpWUFNd0FBQUNjQW5nRGFBVGdCQndDdEJSc0FBQUFYdEFNNEJnRUJ1UCtKdDFZQ0x4RUJBVnBXQUNzMEt6UUEvLzhBVHY2VEJEd0dBQVltQUZNQUFBQW1BSjVZQUFFSEFLMEVtdi84QUJlMEF6Z1JBUUc0LzRpM1ZnSXZCZ0VCbDFZQUt6UXJOQUQvL3dCYi8rd0Zyd2MxQmlZQW1BQUFBUWNBZFFIWkFUVUFDN1lET2h3QkFVZFdBQ3MwQVAvL0FFMy83QVMzQmdBR0pnQ1pBQUFCQndCMUFWc0FBQUFMdGdNMkVBRUJqRllBS3pRQS8vOEFXLy9zQmE4SE5RWW1BSmdBQUFFSEFFUUJNZ0UxQUF1MkF6d2NBUUZIVmdBck5BRC8vd0JOLyt3RXR3WUFCaVlBbVFBQUFRY0FSQUMxQUFBQUM3WURPQkFCQVl4V0FDczBBUC8vQUZ2LzdBV3ZCN2tHSmdDWUFBQUJCd0NyQlJvQlBBQUx0Z003SEFFQlYxWUFLelFBLy84QVRmL3NCTGNHaEFZbUFKa0FBQUVIQUtzRW5BQUhBQXUyQXpjUUFRR2NWZ0FyTkFELy93QmIvK3dGcndjcEJpWUFtQUFBQVFjQXBRRGNBVFlBQzdZRFNCd0JBVkZXQUNzMEFQLy9BRTMvN0FTM0JmUUdKZ0NaQUFBQkJnQ2xYd0VBQzdZRFJCQUJBWlpXQUNzMEFQLy9BRnYrbHdXdkJpc0dKZ0NZQUFBQkJ3Q3RCUVVBQUFBT3RBTTlFQUVCdVArSnNGWUFLelQvL3dCTi9vMEV0d1NvQmlZQW1RQUFBUWNBclFTWi8vWUFEclFET1JzQkFiai9mN0JXQUNzMC8vOEFnUDZYQkw4RnNBWW1BRGtBQUFFSEFLMEU4d0FBQUE2MEFSa0dBUUc0LzRtd1ZnQXJOUC8vQUhmK2x3UDVCRG9HSmdCWkFBQUJCd0N0QkQ0QUFBQU90QUlmQ3dFQnVQK0pzRllBS3pULy93Q0EvK3dFdndlNkJpWUFPUUFBQVFjQXF3VDJBVDBBQzdZQkZ3QUJBWEZXQUNzMEFQLy9BSGYvN0FQNUJvUUdKZ0JaQUFBQkJ3Q3JCSk1BQndBTHRnSWRFUUVCc0ZZQUt6UUEvLzhBZ1Avc0Jqb0hRZ1ltQUpvQUFBRUhBSFVCMmdGQ0FBdTJBaUFLQVFGc1ZnQXJOQUQvL3dCMy8rd0ZKQVhyQmlZQW13QUFBUWNBZFFGYS8rc0FDN1lESmhzQkFZdFdBQ3MwQVAvL0FJRC83QVk2QjBJR0pnQ2FBQUFCQndCRUFUTUJRZ0FMdGdJaUNnRUJiRllBS3pRQS8vOEFkLy9zQlNRRjZ3WW1BSnNBQUFFSEFFUUFzLy9yQUF1MkF5Z2JBUUdMVmdBck5BRC8vd0NBLyt3R09nZkdCaVlBbWdBQUFRY0Fxd1VhQVVrQUM3WUNJUW9CQVh4V0FDczBBUC8vQUhmLzdBVWtCbThHSmdDYkFBQUJCd0NyQkpyLzhnQUx0Z01uR3dFQm0xWUFLelFBLy84QWdQL3NCam9ITmdZbUFKb0FBQUVIQUtVQTNRRkRBQXUyQWk0VkFRRjJWZ0FyTkFELy93QjMvK3dGSkFYZkJpWUFtd0FBQVFZQXBWM3NBQXUyQXpRYkFRR1ZWZ0FyTkFELy93Q0EvbzRHT2dZQ0JpWUFtZ0FBQVFjQXJRVVcvL2NBRHJRQ0l4QUJBYmovZ0xCV0FDczAvLzhBZC82WEJTUUVsUVltQUpzQUFBRUhBSzBFamdBQUFBNjBBeWtWQVFHNC80bXdWZ0FyTlAvL0FBaitxUVRaQmJBR0pnQTlBQUFCQndDdEJNWUFFZ0FPdEFFTUJnRUJ1UDkyc0ZZQUt6VC8vd0FNL2hFRDNnUTZCaVlBWFFBQUFRY0FyUVZOLzNvQURyUUNJZ2dBQUxqL3ViQldBQ3MwLy84QUNBQUFCTmtIdWdZbUFEMEFBQUVIQUtzRXpBRTlBQXUyQVFvQ0FRRndWZ0FyTkFELy93QU0va3NEM2dhRUJpWUFYUUFBQVFjQXF3UmNBQWNBQzdZQ0dnRUJBYkJXQUNzMEFQLy9BQWdBQUFUWkJ5b0dKZ0E5QUFBQkJ3Q2xBSThCTndBTHRnRVhDQUVCYWxZQUt6UUEvLzhBRFA1TEE5NEY5QVltQUYwQUFBRUdBS1VmQVFBTHRnSW5HQUVCcWxZQUt6UUEvLzhBVVA2d0JLMEdBQVFtQUVnQUFBQW5BallCZ0FJL0FRY0FRd0NaLzJ3QUY3UUVOeFlCQWJqL2Q3ZFdBeklMQVFHRFZnQXJOQ3MwQVAvL0FDMyttZ1MwQmJBR0pnQTRBQUFCQndKaEFrWUFBQUFMdGdJTEFnQUFtbFlBS3pRQS8vOEFJLzZhQTlVRU9nWW1BUFlBQUFFSEFtRUIzd0FBQUF1MkFnc0NBQUNhVmdBck5BRC8vd0NSL3BvRTdRV3dCaVlBNFFBQUFRY0NZUUxPQUFBQUM3WUNIUmtCQUpwV0FDczBBUC8vQUdEK21nUGhCRHNHSmdENUFBQUJCd0poQWNjQUFBQUx0Z0liQWdFQW1sWUFLelFBLy84QW1mNmFCRGNGc0FZbUFMRUFBQUVIQW1FQS9BQUFBQXUyQVFrRUFBQ2FWZ0FyTkFELy93Q0QvcG9EVEFRNkJpWUE3QUFBQVFjQ1lRRGhBQUFBQzdZQkNRUUFBSnBXQUNzMEFQLy9BQXIrUFFXMEJjUUdKZ0ZNQUFBQkJ3SmhBdC8vb3dBTHRnSTZDZ0FBYTFZQUt6UUEvLy8veS81RUJKQUVUZ1ltQVUwQUFBRUhBbUVCNy8rcUFBdTJBamtKQUFCclZnQXJOQUQvL3dCNkFBQUQrZ1lBQmdZQVRBQUFBQUwvMXdBQUJMb0ZzQUFZQUJ3QUdrQU1IQnNZQUFBTERBSnlEZ3NJQUQ4ekt4STVMelBNTWpBeFFTRXlGaFlWRkE0Q0l5RVJNeEVoTWpZMk5UUW1KaU1oQVJVaE5RRStBVzZtN0h4R2lNTjkvZVQ4QVNCZmVqczdlbC8ra2dFNC9XRURnVy9JaFdTbWVVSUZzUHNYUjNSRlEyNUNBalducHdBQUF2L1hBQUFFdWdXd0FCZ0FIQUFaUUFzY0d4Z0FBQXNNQWc0TENBQS9NejhTT1M4enpESXdNVUVoTWhZV0ZSUU9BaU1oRVRNUklUSTJOalUwSmlZaklRRVZJVFVCUGdGdXB1eDhSb2pEZmYzay9BRWdYM283TzNwZi9wSUJPUDFoQTRGdnlJVmtwbmxDQmJEN0YwZDBSVU51UWdJMXA2Y0FBdi8wQUFBRU53V3dBQVVBQ1FBV1FBb0dCd2NFQWdVQ2NnUUlBRDhyTWhJNUx6TXdNVUVWSVJFakVRRVZJVFVFTi8xYytnSDYvV0VGc01qN0dBV3cvWmVtcGdBQy85OEFBQU5NQkRvQUJRQUpBQlpBQ2drSUNBUUNCUVp5QkFvQVB5c3lFamt2TXpBeFFSVWhFU01SQVJVaE5RTk0vaWp4QWZ2OVlRUTZ3UHlHQkRyK1A2ZW5BQVQvOHdBQUJVQUZzQUFEQUFrQURRQVJBQ3RBRlF3TEN3Y0hCaEFSQmhFR0VRSUpBd0p5Q2dJSWNnQXJNaXN5RVRrNUx5OFJNeEV6RWprUk16QXhRUkVqRVNFQklTY3pBUk1CTndFQkZTRTFBYWY2QkdiOXNQNmRJdm9CcURQK0thSUNZdjFTL1dFRnNQcFFCYkQ4d3RvQ1pQcFFBcGpCL0tjRTU2ZW5BQVQveVFBQUJFY0dBQUFEQUFrQURRQVJBQzFBRndRR2Nnd0xDd2NIQmhBUkJoRUdFUUlEQUhJS0FncHlBQ3N5S3hFNU9TOHZFVE1STXhJNUVUTXJNREZCRVNNUkFRRWhKek1CRXdFM0FRRVZJVFVCaGZBRGgvNUcvdHhGOFFFWUxmNnVuUUhOL2lIOVlRWUErZ0FHQVA0Ni9hRy9BYUQ3eGdINnF2MWNCV09tcGdBQ0FBZ0FBQVRaQmJBQUNBQU1BQjFBRHd3QkJBY0RDd3NHQXdnQ2NnWUljZ0FyS3pJUk9TOFhPVE13TVVFQkFTRUJFU01SQVFFVklUVUJId0ZTQVZJQkZ2NFcvZjRXQTcvOVlBV3cvVWtDdC94by9lZ0NHQU9ZL1B5bnB3QUFCQUFlL2w4RDlRUTZBQU1BQ0FBTkFCRUFGMEFMRVJBUUFnVU5CbklDRG5JQUt5c3lFamt2TXpBeFpSRWpFVGNUTXdFakF3RVhJd0VCRlNFMUFvSHhiL3Y3L29HaXZBRUVKS0wrZ0FOQi9XRnQvZklDRHBVRE9QdkdCRHI4eFA0RU92eHNwcVlBQWdBbUFBQUU2UVd3QUFzQUR3QWZRQThQQndVQkJBb0REZzRKQlFNQUFuSUFLekl2TXprdkZ6a1NPVE13TVVFQkFTRUJBU0VCQVNFSkFoVWhOUUZUQVRVQk5RRWgva2dCdy83Yy9zUCt3LzdiQWNUK1J3T3EvV0FGc1AzdEFoUDlMLzBoQWgzOTR3TGZBdEg5amFlbkFBSUFId0FBQStvRU9nQUxBQThBSDBBUER3Y0ZBUW9FQXc0T0NRVURBQVp5QUNzeUx6TTVMeGM1RWprek1ERkJFeE1oQVFFaEF3TWhDUUlWSVRVQk5NN1NBUW4rdUFGVi92ZmMzUDcyQVZUK3VRTXQvV0VFT3Y2WkFXZjk3ZjNaQVhiK2lnSW5BaFArUmFhbS8vOEFZdi9zQkJJRVRRWUdBTDhBQVAvL0FBRUFBQVEwQmJBR0pnQXFBQUFCQndJMi8zVCtaUUFPdEFNT0FnSUF1QUVJc0ZZQUt6VC8vd0I3QW5BRnpBTXhCZ1lCZ2dBQS8vOEFVZ0FBQkQ0RnhBWUdBQllBQVAvL0FFNy83QVFhQmNRR0JnQVhBQUQvL3dBM0FBQUVXUVd3QmdZQUdBQUEvLzhBZi8vc0JEa0ZzQVlHQUJrQUFQLy9BSWYvN0FSTkJia0VCZ0FhRkFELy93QjcvK3dFT2dYRUJBWUFIQlFBLy84QVhmLzNCQlVGeEFRR0FCMEFBUC8vQUh6LzdBUTNCY1FFQmdBVUZBRC8vd0JyLyt3RThnZExCaVlBS3dBQUFRY0FkUUhHQVVzQUM3WUJMQkFCQVcxV0FDczBBUC8vQUZMK1ZRUU1CZ0FHSmdCTEFBQUJCd0IxQVVNQUFBQUx0Z00vR2dFQmpGWUFLelFBLy84QWxBQUFCUmNITndZbUFESUFBQUVIQUVRQlJ3RTNBQXUyQVF3SkFRRmhWZ0FyTkFELy93QjZBQUFEK2dZQUJpWUFVZ0FBQVFjQVJBQ3dBQUFBQzdZQ0hnTUJBYUJXQUNzMEFQLy9BQkVBQUFVL0J5RUdKZ0FsQUFBQkJ3Q3NCSHNCTXdBTnR3UUREZ01CQVdaV0FDczBOQUQvL3dBTy8rd0QrUVhyQmlZQVJRQUFBUWNBckFRRy8vMEFEYmNEQWp3UEFRR1JWZ0FyTkRRQS8vOEFUZ0FBQkUwSEtBWW1BQ2tBQUFFSEFLd0VSZ0U2QUEyM0JRUVJCd0VCY1ZZQUt6UTBBUC8vQUFQLzdBUUtCZXNHSmdCSkFBQUJCd0NzQS92Ly9RQU50d0lCTFFzQkFaRldBQ3MwTkFELy8vNzdBQUFDSXdjb0JpWUFMUUFBQVFjQXJBTHpBVG9BRGJjQ0FRVURBUUZ4VmdBck5EUUEvLy8rNUFBQUFnd0Y0Z1ltQUkwQUFBRUhBS3dDM1AvMEFBMjNBZ0VGQXdFQm8xWUFLelEwQVAvL0FHWC83QVVkQnlNR0pnQXpBQUFCQndDc0JKTUJOUUFOdHdNQ0xSRUJBVlJXQUNzME5BRC8vd0FaLyt3RVBBWHJCaVlBVXdBQUFRY0FyQVFSLy8wQURiY0RBaTBHQVFHUlZnQXJORFFBLy84QU5RQUFCTjhISVFZbUFEWUFBQUVIQUt3RUxRRXpBQTIzQXdJZkFBRUJabFlBS3pRMEFQLy8vM01BQUFLNUJlc0dKZ0JXQUFBQkJ3Q3NBMnYvL1FBTnR3TUNHQU1CQWFWV0FDczBOQUQvL3dCMy8rd0V2d2NoQmlZQU9RQUFBUWNBckFSdkFUTUFEYmNDQVJjTEFRRm1WZ0FyTkRRQS8vOEFGUC9zQS9rRjZ3WW1BRmtBQUFFSEFLd0VEUC85QUEyM0F3SWRFUUVCcFZZQUt6UTBBUC8vL3d3QUFBVVBCajhFSmdEUVpBQUFCd0N1L2ovLy8vLy9BSlQrb1FTbEJiQUdKZ0FtQUFBQkJ3Q3RCTE1BQ2dBT3RBSTBHd0VCdVA5L3NGWUFLelQvL3dCOS9vMEVNQVlBQmlZQVJnQUFBUWNBclFUTy8vWUFEclFETXdRQkFiai9hN0JXQUNzMC8vOEFsUDZoQk5JRnNBWW1BQ2dBQUFFSEFLMEVpZ0FLQUE2MEFpSWRBUUc0LzMrd1ZnQXJOUC8vQUZEK2x3UUNCZ0FHSmdCSUFBQUJCd0N0Qks4QUFBQU90QU16RmdFQnVQK0pzRllBS3pULy93Q1UvZ1lFMGdXd0JpWUFLQUFBQVFjQnlnRkMvcUlBRHJRQ0tCMEJBYmovbDdCV0FDczAvLzhBVVAzOEJBSUdBQVltQUVnQUFBRUhBY29CWnY2WUFBNjBBemtXQVFHNC82R3dWZ0FyTlAvL0FKVCtvUVVYQmJBR0pnQXNBQUFCQndDdEJTWUFDZ0FPdEFNUENnRUJ1UDkvc0ZZQUt6VC8vd0I2L3FFRCtnWUFCaVlBVEFBQUFRY0FyUVNmQUFvQURyUUNIZ0lCQWJqL2Y3QldBQ3MwLy84QWxBQUFCUllITXdZbUFDOEFBQUVIQUhVQmNRRXpBQXUyQXc0REFRRmJWZ0FyTkFELy93QjlBQUFFTndjOUJpWUFUd0FBQVFjQWRRRjNBVDBBQzdZRERnTUJBQnRXQUNzMEFQLy9BSlQrNHdVV0JiQUdKZ0F2QUFBQkJ3Q3RCT1VBVEFBT3RBTVJBZ0VCdVAvUHNGWUFLelQvL3dCOS9zOEVOd1lBQmlZQVR3QUFBUWNBclFSNkFEZ0FEclFERVFJQkFiai92TEJXQUNzMC8vOEFsUDZoQkNRRnNBWW1BREFBQUFFSEFLMEV0d0FLQUE2MEFnc0NBUUc0LzMrd1ZnQXJOUC8vQUhqK29RR0xCZ0FHSmdCUUFBQUJCd0N0QTFvQUNnQU90QUVIQWdFQnVQOS9zRllBS3pULy93Q1UvcUVHYWdXd0JpWUFNUUFBQVFjQXJRWFVBQW9BRHJRREZBWUJBYmovZjdCV0FDczAvLzhBZlA2aEJud0VUZ1ltQUZFQUFBRUhBSzBGMmdBS0FBNjBBellDQVFHNC8zK3dWZ0FyTlAvL0FKVCtuUVVYQmJBR0pnQXlBQUFCQndDdEJTZ0FCZ0FPdEFFTkFnRUJ1UDkvc0ZZQUt6VC8vd0I2L3FFRCtnUk9CaVlBVWdBQUFRY0FyUVNQQUFvQURyUUNId0lCQWJqL2Y3QldBQ3MwLy84QVpmL3NCUjBIM2dZbUFETUFBQUVIQWtZRkFBRlZBQTIzQXdJeEVRRUJXbFlBS3pRMEFQLy9BSlFBQUFUUEIwSUdKZ0EwQUFBQkJ3QjFBWElCUWdBTHRnRVlEd0VCYkZZQUt6UUEvLzhBZmY1Z0JDOEY5Z1ltQUZRQUFBRUhBSFVCb1AvMkFBdTJBekFEQVFHV1ZnQXJOQUQvL3dDVS9xRUUzd1d3QmlZQU5nQUFBUWNBclFTNUFBb0FEclFDSVJnQkFiai9mN0JXQUNzMC8vOEFjZjZpQXJrRVRnWW1BRllBQUFFSEFLMERVd0FMQUE2MEFob0NBUUc0LzRDd1ZnQXJOUC8vQUV2K2xnU09CY1FHSmdBM0FBQUJCd0N0Qk5iLy93QU90QUU5S3dFQnVQK0lzRllBS3pULy93QkovbzBEeHdST0JpWUFWd0FBQVFjQXJRUjAvL1lBRHJRQk9Ta0JBYmovZjdCV0FDczAvLzhBTGY2YkJMUUZzQVltQURnQUFBRUhBSzBFeEFBRUFBNjBBZ3NDQVFHNC8zV3dWZ0FyTlAvL0FBcitsd0oxQlVNR0pnQllBQUFCQndDdEJBOEFBQUFPdEFJWkVRRUJ1UCtKc0ZZQUt6VC8vd0NBLyt3RXZ3ZmNCaVlBT1FBQUFRY0NSZ1RiQVZNQURiY0NBUnNBQVFGc1ZnQXJORFFBLy84QUVRQUFCUnNITmdZbUFEb0FBQUVIQUtVQXNnRkRBQXUyQWhnSkFRRjJWZ0FyTkFELy93QVdBQUFEM3dYcUJpWUFXZ0FBQVFZQXBSMzNBQXUyQWhnSkFRR2dWZ0FyTkFELy93QVIvcUVGR3dXd0JpWUFPZ0FBQVFjQXJRVHNBQW9BRHJRQ0RRUUJBYmovZjdCV0FDczAvLzhBRnY2aEE5OEVPZ1ltQUZvQUFBRUhBSzBFVmdBS0FBNjBBZzBFQVFHNC8zK3dWZ0FyTlAvL0FDLytvUWJtQmJBR0pnQTdBQUFCQndDdEJlTUFDZ0FPdEFRWkV3RUJ1UDkvc0ZZQUt6VC8vd0FqL3FFRnlBUTZCaVlBV3dBQUFRY0FyUVZNQUFvQURyUUVHUk1CQWJqL2Y3QldBQ3MwLy84QVVQNmhCSTRGc0FZbUFENEFBQUVIQUswRXhBQUtBQTYwQXhFQ0FRRzQvMyt3VmdBck5QLy9BRkgrb1FQQkJEb0dKZ0JlQUFBQkJ3Q3RCR1FBQ2dBT3RBTVJBZ0VCdVA5L3NGWUFLelQvLy81cy8rd0ZZd1hXQkNZQU0wWUFBUWNCY2Y0SS8vOEFEYmNEQWk0UkFBQVNWZ0FyTkRRQS8vOEFDQUFBQkpFRkhBWW1Ba01BQUFBSEFLNy9YLzdjLy8vL1l3QUFBL0lGSHdRbUFqZzhBQUFIQUs3K2x2N2YvLy8vYXdBQUJLTUZHZ1FtQWZROEFBQUhBSzcrbnY3YS8vLy9iZ0FBQWJRRkh3UW1BZk04QUFBSEFLNytvZjdmLy8vL21mL3dCSGdGSEFRbUFlMEtBQUFIQUs3K3pQN2MvLy8vSUFBQUJIUUZIQVFtQWVNOEFBQUhBSzcrVS83Yy8vLy9xd0FBQklzRkhBUW1BZ01LQUFBSEFLNyszdjdjLy84QUNBQUFCSkVFalFZR0FrTUFBUC8vQUhZQUFBUU1CSTBHQmdKQ0FBRC8vd0IyQUFBRHRnU05CZ1lDT0FBQS8vOEFRUUFBQS9VRWpRWUdBZUlBQVAvL0FIWUFBQVJuQkkwR0JnSDBBQUQvL3dDR0FBQUJlQVNOQmdZQjh3QUEvLzhBZGdBQUJHY0VqUVlHQWZFQUFQLy9BSFlBQUFXUEJJMEdCZ0h2QUFELy93QjJBQUFFWndTTkJnWUI3Z0FBLy84QVR2L3dCRzRFblFZR0FlMEFBUC8vQUhZQUFBUW9CSTBHQmdIc0FBRC8vd0FsQUFBRUdRU05CZ1lCNkFBQS8vOEFCZ0FBQkRnRWpRWUdBZU1BQVAvL0FCTUFBQVJKQkkwR0JnSGtBQUQvLy8rY0FBQUNaUVhyQmlZQjh3QUFBUWNBYXY4NUFCNEFEYmNDQVEwREFRR0VWZ0FyTkRRQS8vOEFCZ0FBQkRnRjZ3WW1BZU1BQUFFR0FHcFNIZ0FOdHdRREZ3a0JBWU5XQUNzME5BRC8vd0IyQUFBRHRnWHJCaVlDT0FBQUFRWUFhbHdlQUEyM0JRUVpCd0VCZzFZQUt6UTBBUC8vQUhZQUFBT1pCaDRHSmdINkFBQUJCd0IxQVNNQUhnQUx0Z0lJQXdFQmcxWUFLelFBLy84QVAvL3dBL0FFblFZR0Fla0FBUC8vQUlZQUFBRjRCSTBHQmdIekFBRC8vLytjQUFBQ1pRWHJCaVlCOHdBQUFRY0Fhdjg1QUI0QURiY0NBUTBEQVFHRVZnQXJORFFBLy84QUp2L3dBMlVFalFZR0FmSUFBUC8vQUhZQUFBUm5CaDRHSmdIeEFBQUJCd0IxQVJvQUhnQUx0Z01PQXdFQmhGWUFLelFBLy84QUgvL3NCRUVHQlFZbUFoRUFBQUVHQUtGOUhnQUx0Z0lkRndFQmhGWUFLelFBLy84QUNBQUFCSkVFalFZR0FrTUFBUC8vQUhZQUFBUU1CSTBHQmdKQ0FBRC8vd0IyQUFBRG1RU05CZ1lCK2dBQS8vOEFkZ0FBQTdZRWpRWUdBamdBQVAvL0FIWUFBQVJ0QmdVR0pnSU9BQUFCQndDaEFMWUFIZ0FMdGdNUkNBRUJoRllBS3pRQS8vOEFkZ0FBQlk4RWpRWUdBZThBQVAvL0FIWUFBQVJuQkkwR0JnSDBBQUQvL3dCTy8vQUViZ1NkQmdZQjdRQUEvLzhBZGdBQUJHTUVqUVlHQWY4QUFQLy9BSFlBQUFRb0JJMEdCZ0hzQUFELy93QlAvL0FFUXdTZEJnWUNRUUFBLy84QUpRQUFCQmtFalFZR0FlZ0FBUC8vQUJNQUFBUkpCSTBHQmdIa0FBQUFBd0JEL2pjRDZnU2RBQjRBUGdCQ0FDaEFFeDhCQWdJK1BoVS9ORFJBTUNvTGNnOExGWDRBUHpQTUs4ek5NeEk1RWprdk14STVPVEF4UVNNMU16STJOalUwSmlZaklnWUdGU00wUGdJek1oNENGUlFPQWlVek1oNENGUlFPQWlNaUxnSTFNeDRDTXpJMk5qVTBMZ0lqSXdFUkl4RUNPYm1SVFY0cUxXQlBOVmszOFVONG4xMXBxWGhDUDNDWC91KzViS0p0TmtlQ3JtaFJvWVZSOFFRNllEdFJhREllTzFnNmpRRUM4UUlzZlNkRkx5cEZLaDA4TGs1NVZDd29UM2RQUTNGVExVWXRVbTlCVkg5Vkt5UlFoRjgxUXlBcVNUQXNRU29WL2xMOTV3SVpBQVFBZHY2YUJTZ0VqUUFEQUFjQUN3QVBBQjFBRFFNQ0FnWUxCMzBQRGdvS0JoSUFQek1RempNL014STVMek13TVVFVklUVVRFU01SSVJFakVRRVJJeEVEdC8xc1JQRUQ4ZkVCc3ZFQ25jREFBZkQ3Y3dTTiszTUVqZndtL2VjQ0dRQUFBZ0JQL2tBRVF3U2RBQ2NBS3dBWVFBc1pFSDRvSkNRcUtnVUxjZ0FyTWk4eUVUTS9NekF4UVRNT0FpTWlMZ0kxTlRRK0FqTXlGaFlYSXk0Q0l5SU9BaFVWRkI0Q016STJOZ2NSSXhFRFVQSUplZGlaZDcyRlIwaUl2WGFiMUhZTThRWTJiRmhFWmtVakgwSm5SMVZzT29UeEFZUjN0bWRPa2MrQlRvSFBrMDFwdW5oQll6Z3ZYb2xhVDFpSlhqRXZZT1g5NXdJWkFQLy9BQVlBQUFRNEJJMEdCZ0hqQUFELy93QU8vamNGckFTa0JpWUNKd0FBQUFjQ1lRTG0vNTMvL3dCMkFBQUViUVhMQmlZQ0RnQUFBUWNBY0FDQ0FDRUFDN1lERGdnQkFiQldBQ3MwQVAvL0FCLy83QVJCQmNzR0pnSVJBQUFCQmdCd1NpRUFDN1lDR2hjQkFiQldBQ3MwQVAvL0FFOEFBQVZYQkkwR0JnSUJBQUQvL3dDRy8vQUZZd1NOQkNZQjh3QUFBQWNCOGdIK0FBRC8vLy9zQUFBR0JBWUFCaVlDaEFBQUFRY0FkUUtCQUFBQUM3WUdHUThCQVUxV0FDczBBUC8vQUU3L3h3UnVCaDRHSmdLR0FBQUJCd0IxQVhVQUhnQUx0Z013RVFFQlcxWUFLelFBLy84QVAvMzhBL0FFblFZbUFla0FBQUFIQWNvQlAvNlkvLzhBSndBQUJlVUdIZ1ltQWVVQUFBRUhBRVFCY3dBZUFBdTJCQmdLQVFGclZnQXJOQUQvL3dBbkFBQUY1UVllQmlZQjVRQUFBUWNBZFFJWkFCNEFDN1lFRmdvQkFXdFdBQ3MwQVAvL0FDY0FBQVhsQmVzR0pnSGxBQUFCQndCcUFUc0FIZ0FOdHdVRUh3b0JBWVJXQUNzME5BRC8vd0FHQUFBRU9BWWVCaVlCNHdBQUFBY0FSQUNLQUI3Ly93QVIvbGNGUHdXd0JpWUFKUUFBQVFjQXBBR0FBQU1BQzdZRERnVUJBVGxXQUNzMEFQLy9BRmIrWEFQNUJFNEdKZ0JGQUFBQkJ3Q2tBTFFBQ0FBTHRnSTdNUUFBVFZZQUt6UUEvLzhBbFA1ZUJFMEZzQVltQUNrQUFBRUhBS1FCUWdBS0FBdTJCQkFDQUFCRFZnQXJOQUQvL3dCUi9sUUVDZ1JPQmlZQVNRQUFBUWNBcEFFRkFBQUFDN1lCTEFBQUFFMVdBQ3MwQVAvL0FBaitWQVNSQkkwR0pnSkRBQUFBQndDa0FTSUFBUC8vQUhiK1hBTzJCSTBHSmdJNEFBQUFCd0NrQVBFQUNQLy9BSGorb1FHTEJEb0dKZ0NOQUFBQkJ3Q3RBMW9BQ2dBT3RBRUhBZ0VCdVA5L3NGWUFLelFBQUFBQUFCRUEwZ0FEQUFFRUNRQUFBRjRBQUFBREFBRUVDUUFCQUJvQVhnQURBQUVFQ1FBQ0FBNEFlQUFEQUFFRUNRQURBQm9BWGdBREFBRUVDUUFFQUJvQVhnQURBQUVFQ1FBRkFDWUFoZ0FEQUFFRUNRQUdBQm9BckFBREFBRUVDUUFIQUVBQXhnQURBQUVFQ1FBSUFBd0JCZ0FEQUFFRUNRQUpBQ1lCRWdBREFBRUVDUUFMQUJRQk9BQURBQUVFQ1FBTUFCUUJPQUFEQUFFRUNRQU5BRndCVEFBREFBRUVDUUFPQUZRQnFBQURBQUVFQ1FBUUFBd0IvQUFEQUFFRUNRQVJBQXdDQ0FBREFBRUVDUUFaQUF3Qi9BQkRBRzhBY0FCNUFISUFhUUJuQUdnQWRBQWdBRElBTUFBeEFERUFJQUJIQUc4QWJ3Qm5BR3dBWlFBZ0FFa0FiZ0JqQUM0QUlBQkJBR3dBYkFBZ0FGSUFhUUJuQUdnQWRBQnpBQ0FBVWdCbEFITUFaUUJ5QUhZQVpRQmtBQzRBVWdCdkFHSUFid0IwQUc4QUlBQk5BR1VBWkFCcEFIVUFiUUJTQUdVQVp3QjFBR3dBWVFCeUFGWUFaUUJ5QUhNQWFRQnZBRzRBSUFBekFDNEFNQUF3QURVQU93QWdBRElBTUFBeUFESUFVZ0J2QUdJQWJ3QjBBRzhBTFFCTkFHVUFaQUJwQUhVQWJRQlNBRzhBWWdCdkFIUUFid0FnQUdrQWN3QWdBR0VBSUFCMEFISUFZUUJrQUdVQWJRQmhBSElBYXdBZ0FHOEFaZ0FnQUVjQWJ3QnZBR2NBYkFCbEFDNEFSd0J2QUc4QVp3QnNBR1VBUXdCb0FISUFhUUJ6QUhRQWFRQmhBRzRBSUFCU0FHOEFZZ0JsQUhJQWRBQnpBRzhBYmdCSEFHOEFid0JuQUd3QVpRQXVBR01BYndCdEFFd0FhUUJqQUdVQWJnQnpBR1VBWkFBZ0FIVUFiZ0JrQUdVQWNnQWdBSFFBYUFCbEFDQUFRUUJ3QUdFQVl3Qm9BR1VBSUFCTUFHa0FZd0JsQUc0QWN3QmxBQ3dBSUFCV0FHVUFjZ0J6QUdrQWJ3QnVBQ0FBTWdBdUFEQUFhQUIwQUhRQWNBQTZBQzhBTHdCM0FIY0Fkd0F1QUdFQWNBQmhBR01BYUFCbEFDNEFid0J5QUdjQUx3QnNBR2tBWXdCbEFHNEFjd0JsQUhNQUx3Qk1BRWtBUXdCRkFFNEFVd0JGQUMwQU1nQXVBREFBVWdCdkFHSUFid0IwQUc4QVRRQmxBR1FBYVFCMUFHMEFBQUFEQUFBQUFBQUEvMm9BWkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBZ0FJQUFqLy93QVBBQUVBQWdBT0FBQUFBQUFBQWlnQUFnQlpBQ1VBUGdBQkFFUUFYZ0FCQUdvQWFnQUJBSEFBY0FBQkFIVUFkUUFCQUlFQWdRQUJBSU1BZ3dBQkFJWUFoZ0FCQUlrQWlRQUJBSXNBbGdBQkFKZ0Fud0FCQUtFQW93QUJBS1VBcGdBQkFLZ0FyUUFEQUxFQXNRQUJBTG9BdXdBQkFMOEF2d0FCQU1FQXdRQUJBTU1BeEFBQkFNY0F4d0FCQU1zQXl3QUJBTTBBemdBQkFOQUEwUUFCQU5NQTB3QUJBTm9BM2dBQkFPRUE0UUFCQU9VQTVRQUJBT2NBNlFBQkFPc0Erd0FCQVAwQS9RQUJBUDhCQVFBQkFRTUJBd0FCQVFnQkNRQUJBUllCR2dBQkFSd0JIQUFCQVNBQklnQUJBU1FCSndBREFTb0JLd0FCQVRNQk5BQUJBVFlCTmdBQkFUc0JQQUFCQVVFQlJBQUJBVWNCU0FBQkFVc0JUUUFCQVZFQlVRQUJBVlFCV0FBQkFWMEJYZ0FCQVdJQllnQUJBV1FCWkFBQkFXZ0JhQUFCQVdvQmJBQUJBVzRCYmdBQkFYQUJjQUFCQWNzQjBRQUNBZUlCOWdBQkFmb0IrZ0FCQWdNQ0F3QUJBZ1VDQlFBQkFnd0NEZ0FCQWhBQ0VRQUJBaE1DRXdBQkFoY0NGd0FCQWhrQ0d3QUJBaUVDSVFBQkFpWUNLQUFCQWlvQ0tnQUJBamdDT0FBQkFqc0NPd0FCQWowQ1BRQUJBa0FDUXdBQkFtOENjd0FCQW9NQ2lBQUJBb3NDOHdBQkF2WUR0UUFCQTdjRHR3QUJBN2tEd3dBQkE4VUR6Z0FCQTlBRDZ3QUJBKzhEN3dBQkEvRUQrQUFCQS9vRC9BQUJBLzhFQXdBQkJBVUVrQUFCQkpNRWxBQUJCSllFbHdBQkJKa0VuQUFCQktZRkFnQUJCUVFGRGdBQkJSRUZIZ0FCQUFFQUF3QUFBQkFBQUFBV0FBQUFJQUFCQUFFQXJRQUNBQUVBcUFDc0FBQUFBZ0FDQUtnQXJBQUFBU1FCSndBRkFBRUFBQUFlQUJBQUNnQUNBQzRBTmdBQ1kzQnpjQUE2YTJWeWJnQkFBQVJFUmt4VUFEaGplWEpzQURobmNtVnJBRGhzWVhSdUFEZ0FBUUFBQUFFQUlnQUNBQWdBQWdBdUJCQUFBQUFCQUFBQUFBQUJBQUVBRGdBQUFBRVBBZ0FGQUNRQVNBQUEvLzhBQWdBQUFBRUFBVXVNQUFRQUFBSHNFOXdSQkJFRUY3UVE1aGRhRVZRUmtoSmtFWFpIN2hLa0VxUVZ4QkcyRXFRU3BCSmtFc1lna0JsUUg4WVJwQkhNRndBWTNoSGlGTzRTZ2hJc0VVQXA1QkVpSnNJUlhoRmVFdzRTTEJHRUdIZ1NSaEg0RVFvU1JoVTBFaXdTWkJuR0h3QVhXaEprRjFvbHhDZkVJd29kbUJEc0VrWVJMRDU0RVY0MzhpVFNLTVlTRWhEeUVQaEJZaEQrRkhZVUNocElPZVF0cGpSQ0xGZ1NwRERxUEJZWEFDRmVFcVFTcEJWNkVxUVNwQktrTXBRYTBoS2tFN0llT2h4MEdCWWo3QjBHRVVvaU5CRUtFelEyR0VSZ0Vpd1VzQ3NhRzF3UzZCSXNHK1lUWGhhcUZFQVM2QmRhRXc0UnBCSkdFNGdTTEI4QUVVb1hBQkVLRmNRVnhCWEVFcVFYQUJFS0VxUVNwQkprRVVvWEFCRUtFUVF2U0JFRUVRUVJCQkVjRmc0V1hCRVdFVFlSRUJFV0VSQVJhQkVRRVpJU1pCSmtFbVFTWkIvR0Yxb1hXaGRhRjFvWFdoZGFGMW9Sa2hGMkVYWVJkaEYyRXFRU3BCS2tFcVFTcEJKa0VtUVNaQkprRW1RWTNoS0NFb0lTZ2hLQ0VvSVNnaEtDRVVBUlFCRkFFVUFSWGhNT0V3NFREaE1PRXc0U1JoSkdGMW9TZ2hkYUVvSVhXaEtDRVpJUmtoR1NFWklTWkJGMkVVQVJkaEZBRVhZUlFCRjJFVUFSZGhGQUVxUVJYaEtrRXFRU3BCS2tFcVFWeEJHMkViWVJ0aEcyRXFRUlhoS2tFVjRTcEJGZUVWNFNaQk1PRW1RVERoSmtFdzRSaEJHRUVZUWZ4aC9HSDhZUnpCamVFa1lZM2hIaUVlSVI0aEVXRVJZUkhCRVFFUkFSRUJFUUVSQVJFQkVRRVJZUkZoRVdFUllSRmhFUUVSQVJFQkVXRVRZUk5oRTJFVFlSRmhFV0VSWVJIQmRhRVhZU3BCS2tFbVFZM2hkYUVWUVJkaEhpRXFRU3BCWEVFcVFTcEJKa0VzWWZ4aGplRndBU3BCamVFVjRURGhKR0V3NFJkaDhBRXFRU3BCWEVGY1FWZWhkYUVWUWZBQkYyRXFRU3BCSmtFc1lSa2gvR0Z3QVNnaEZBRXc0U0xCSkdFUW9SUUJGS0VrWVJ6QkhNRWN3WTNoSkdFUVFSQkJFRUVxUVJYaGRhRW9JUmRoRkFFYVFTUmhHU0dONFNSaEtrRndBUkNoS2tGMW9TZ2hkYUVvSVJkaEZBRVVBUlFCY0FFUW9TWkJNT0V3NFNMQlY2RWtZVmVoSkdGWG9TUmhkYUVvSVhXaEtDRjFvU2doZGFFb0lYV2hLQ0Yxb1NnaGRhRW9JWFdoS0NGMW9TZ2hkYUVvSVhXaEtDRjFvU2doRjJFVUFSZGhGQUVYWVJRQkYyRVVBUmRoRkFFWFlSUUJGMkVVQVJkaEZBRXFRU3BCSmtFdzRTWkJNT0VtUVREaEprRXc0U1pCTU9FbVFURGhKa0V3NFREaGplRWtZWTNoSkdHTjRTUmgvR0h3QVJTaEZlRTdJZkFCWEVHTjRTcEJGZUYxb1NnaEYyRXFRU1pCTU9FWVFSVkJJc0VtUVNaQktrRVY0VnhCWEVFYllTcEJGZUVxUVJYaEprRXNZU0xCR0VIOFlScEJKR0VhUVNSaEhNRWVJU1pCRVFFUllSRUJFY0VSQVJGaEVjQUFKTGJnQUVBQUJQRGxmS0FDWUFKUUFBQUFBQUFBQUFBQklBQUFBQUFBQUFBQUFBQUFBQUFQL2svK01BQUFBQUFCRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJBQUQvNUFBUi8rVUFBQUFBQUFBQUFBQUFBQUQvNndBQUFBQUFBQUFBQUFELzdRQUEvOVgvMEFBQUFBRC82Z0FBQUFBQUFBQUFBQUFBQVAvcC81UC85Zi9xQUFBQUFBQUEvK0VBQUFBQUFBQUFBQUFBQUFBQUFBQUEvL0gvN2dBQS8vVUFBUC8wLy9YL3pnQUEvKy8vamYrQy8vSC9pQUFBQUFEL3hBQUFBQUQveC8vR0FBQUFBQUFBLzYwQUFBQUFBQXdBRVFBQS84a0FFditzQUFELzNRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL3hBQUFBQUFBQUFBQUFBUC9QQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvN1FBQUFBQUFBQUFBQUFELzdmL3YvK1lBQUFBQUFBQUFGQUFBQUFBQUFBQUEvL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvKzBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvOHdBQUFBQUFBQUFBQUFELzhnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAveEFBQUFBQUFBQUFBQUFQK0tBQUFBQUFBQS8rc0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC84QUFBQUFBQUFQL3dBQUFBQUFBQUFBRC84d0FBQUFBQUFBQUEvL0gvOFFBQUFBQUFBQUFBQUFBQUFBQUFBQThBQUFBQUFBQUFBQUFBQUFBQUFBQUEvMzhBQUFBQUFBQUFBQUFBQUFBQUFBQUEvOWNBQUFBQUFBQUFBQUFBQUFBQUFQL3FBQUFBQUFBQUFBQUFBUC9yQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAraEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLytvQUFBQUEvKzRBQUFBQUFBRC83QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8vSUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8rd0FBQUFBQUFEL3Z3QUFBQUQvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzJBQUEvNy8vNC8vWS80My95Lys3LzcvLzJmL3MvNnYvb0FBU0FCRUFBQUFBQUEzL3hnQUEvK24vOFAvekFCRUFBUDhtLys4QUV2K25BQUQvNGdBQUFBQUFBQUFBQUFEL29QL3pBQUQvNXYvaC8vRUFBUC9uQUFELzVmL3AvOWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvNXNBQUFBQUFBQUFBQUFBQUFEL293QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvOVFBQUFBQUFBQUFBQUFELzR3QUFBQUFBQVAveEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8vRUFBQUFBQUFELzhnQUFBQUFBQUFBQS84VUFBUC9zLzRnQUFQL08vN2dBQUFBQUFBQUFBQUFBQUFBQUFQK3ZBQUQvckFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzR3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC9tLytjQUFBQUEvK2NBQVAvci8rdi80UUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNy9xZ0FBQUFBQUVRQUFBQUFBRWYvUkFBQUFBQUFBLzZILzVQK2EvNkwvdWY5Ny8zWC9yUCswLzY4QUFBQVFBQkFBQUFBQUFBRC9td0FBLzdQLzhQL3hBQThBQVA4WC8rMEFFUDhKLzd6L3hQL0xBQUFBQVA5Ky8zei9HZi94QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8vVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8rc0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvK3dBQUFBQUFBQUFBQUFBLytVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvU3YrOS96Ly9PZ0FBL3ovL1VQOWUvMndBQUFBQUFBY0FCd0FBQUFBQUFQOUFBQUQvYXYvUkFBQUFCUUFBL21FQUFBQUgva2tBQVArRy81SUFBQUFBL3cvL0RBQUFBQUFBQUFBQS83OEFBQUFULy9JQUFBQUEvOS8vZndBVC85WC9BdjhILytFQUFBQUFBQUQvYXdBQUFBRC9hLytEQUFBQUFBQUEvMFlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvcXdBQS8rRUFBQUFBLzlYLzUvL2YvK0gvN1FBQS84c0FBQUFBQUE0QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQOStBQUFBQVAvRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC82Ly9tQUFBQURmL3NBQUQvNi8vdC8rVUFEUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvTEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLyswQUFBQUFBQUFBQVAvYy8rWUFBQUFTQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQVA5ekFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzFQL3pBQUQvdGYvWi85TC8wdi9rLy9YL3RBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS95TUFBQUFBLzY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC83d0FBQUFBQUFBQUFBQUFBQUFBQUFBRC83QUFBQUFBQUFQKzBBQUFBQVArN0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL1ZBQUQvOEFBQUFBQUFBQUFBQUFELzhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC9yZjh6QUFEL3dQLzJBQUFBQVAvSkFBQUFBQUFBQUFBQUFBQUEvOGdBQUFBQUFBRC8rZi9yLytjQUFBQUFBQUFBQUFBQS83My82ZitoLzZVQUFQK2MvNzBBQUFBQUFBQUFBQUFTQUJJQUFBQUFBQUQvMGdBQUFBQUFBQUFBQUFBQUFQNXhBQUFBQVA5c0FBQUFBUC9LQUFBQUFQKzcvK2tBQUFBQUFBRC83QUFBQUFBQUFBQUFBQUQvN0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvOWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC96Z0FBQUFBQUFBQUFBQUQvZVFBQUFBQUFBUC94QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvZEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL0ovK1VBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC82QUFBQUFBQUFBQUEvL01BQUFBQUFBQUFBQUFBQUFELzh3QUFBQUQvWndBQS8vWC84d0FBQUEvL3JBQUFBQUFBQUFBQUFBRC8yZ0FBQUFBQUFBQUFBQUFBQVAvaS9wOEFBQUFBQUFBQUFBQUEvNmdBQUFBQS84Y0FBUDgrQUFBQUFRRDZBQWdBQ2dBVUFCVUFGZ0FYQUJnQUdRQWFBQnNBSEFBZEFDVUFKZ0FuQUNnQUtRQXFBQ3NBTEFBdEFDNEFMd0F3QURFQU1nQXpBRFFBTlFBMkFEY0FPQUE1QURvQU93QThBRDBBUGdCbEFHY0FnUUNEQUlRQWpBQ1BBSkVBa3dDeEFMSUFzd0MwQUxVQXRnQzNBTGdBdVFDNkFOSUEwd0RVQU5VQTFnRFhBTmdBMlFEYUFOc0EzQURkQU40QTN3RGdBT0VBNGdEakFPUUE1UURtQU9jQTZBRHBBUzhCTXdFMUFUY0JPUUU3QVVFQlF3RkZBVWtCU3dGTUFWZ0JXUUduQWEwQnNnRzFBb3NDakFLT0FwQUNrUUtTQXBNQ2xBS1ZBcFlDbHdLWUFwa0NtZ0tiQXB3Q25RS2VBcDhDb0FLaEFxSUNvd0trQXFVQ3BnS25BcWdDcVFLcUFzY0N5UUxMQXMwQ3p3TFJBdE1DMVFMWEF0a0Myd0xkQXQ4QzRRTGpBdVVDNXdMcEF1c0M3UUx2QXZFQzh3TDBBdllDK0FMNkF2d0MvZ01BQXdJREJBTUdBd2tEQ3dNTkF3OERFUU1UQXhVREZ3TVpBeHNESFFNZkF5RURJd01sQXljREtRTXJBeTBETHdNeEF6TUROUU0yQXpnRE9nTThBejREbHdPWUE1a0RtZ09iQTV3RG5RT2ZBNkFEb1FPaUE2TURwQU9sQTZZRHB3T29BNmtEcWdPckE2d0RyUU91QTc0RHZ3UEFBOEVEd2dQREE4UUR4UVBHQThjRHlBUEpBOG9EeXdQTUE4MER6Z1BQQTlBRDBRUFNBOU1ENUFQbUErZ0Q2Z1AvQkFFRUF3UVlCQjRFSkFTT0JKTUVsd1VZQlJvQUFRQVQveGNBQVFERUFBNEFBUUQyLzgwQUFRREtBQk1BQVFEMi85d0FBUUJiQUFzQUFRRWMvL0VBQVFIbS84Y0FBUUhtLy9FQUFRSG1BQTBBQWdEMi84Z0JoZituQUFJQXl2LzBBUGIvMkFBQ0FlYi90d0hyLy9BQUFnRDIvL1VCaGYrMkFBSUE3ZitsQVJ6LzdnQUNBUkVBQ3dGcy8rWUFBZ0QyLzhnQmhmK2hBQU1CNWYvMUFlYi83Z09SLy9VQUF3QksvKzRBVy8vcUFlYi84QUFEQUVvQUVRQllBRElBV3dBUkFBUUFEZi9tQUVILzlBQmgvKzhCVGYvdEFBUUFEUUFVQUVFQUVRQlcvK0lBWVFBVEFBVUFXLyt6QWViL2VRSHIvL0VCOWYveEFrSC84d0FGQUEwQUR3QkJBQXdBVnYvckFHRUFEZ0pCLytrQUJRQmIvK1VBdVAvTEFNMy81QUgxLytzQ1FmL3RBQVlBRVArRUFCTC9oQUdHLzRRQml2K0VBWTcvaEFHUC80UUFCZ0RLLytvQTdmL3VBUGIvdWdEKy8va0JPdi9zQVczLzdBQUdBTXIvNmdEdC8rNEE5disrQVA3LytRRTYvK3dCYmYvc0FBY0FTZ0FOQUw3LytRREdBQXNBeC8vcUFNb0FEQUR0LzhnQkhQL3hBQWNBZ2YvZkFMWC84d0MzLy9BQXhQL3FBTm4vM3dEbS8rQUJiUC9nQUFnQTl2L3dBUDcvK2dFSi8vRUJJUC96QVRyLzhRRmovL01CWmYvdEFXMy8zZ0FJQU5rQUZRRHRBQlVCU2Yva0FVci81UUZNLytRQll2L2pBV1QvNGdGcy8rUUFDQUJZQUE0QWdmOVdBTDcvK1FERS84UUF4Ly9hQU5uL2NRRHQvNTRCWC8vY0FBa0E5ditkQVA3LzZ3RUovOU1CSVAvYkFUci9QZ0ZLLzdvQlkvL3dBV1gvOGdGdC8xQUFDUURLLytvQTdmKzRBUGIvNXdFSi8vQUJJUC94QVRyLzZ3RmovL1VCYmYvc0FZWC9wQUFLQUFiLzlRQUwvL1VCaFAvMUFZWC85UUdILy9VQmlQLzFBWW4vOVFQcy8vVUQ3Zi8xQS9ELzlRQUtBQWIvMWdBTC85WUJoUC9XQVlYLzFnR0gvOVlCaVAvV0FZbi8xZ1BzLzlZRDdmL1dBL0QvMWdBS0FBYi82Z0FMLytvQmhQL3FBWVgvNmdHSC8rb0JpUC9xQVluLzZnUHMvK29EN2YvcUEvRC82Z0FLQU9iL3d3RDIvODhBL3Yvd0FUci96Z0ZKLytjQlRQL2ZBV0wvMFFGay8rd0JiUCtnQVczLzBRQUxBRGovMFFEUy85RUExdi9SQVRuLzBRRkYvOUVESC8vUkF5SC8wUU1qLzlFRDB2L1JCSWovMFFUUS85RUFEUUJjLy9JQVh2L3lBTzcvOGdFMC8vSUJSUC95QVY3LzhnTTMvL0lET2YveUF6di84Z1BiLy9JRUIvL3lCQlgvOGdUYS8vSUFEUUQyLzVvQStmL1dBUDcvOGdFSi85TUJJUC9iQVRyL1BnRkkvOVlCU3YrNkFXUC84QUZsLy9JQmJmOVFCQ3YvMWdTTC85WUFEZ0JjLyswQVh2L3RBTzcvN1FEMi83SUJOUC90QVVULzdRRmUvKzBETi8vdEF6bi83UU03LyswRDIvL3RCQWYvN1FRVi8rMEUydi90QUE4QTdRQVVBUElBRUFEMi8vQUErZi93QVA3LytnRUJBQkFCQkFBUUFUci83QUZJLy9BQlN2L2lBVkVBRUFGdC8vQUJjQUFRQkN2LzhBU0wvL0FBRVFBdS8rNEFPZi91QXFiLzdnS24vKzRDcVAvdUFxbi83Z0wyLys0REpmL3VBeWYvN2dNcC8rNERLLy91QXkzLzdnTXYvKzREdy8vdUJIUC83Z1IxLys0RTB2L3VBQkVBTHYvc0FEbi83QUttLyt3Q3AvL3NBcWovN0FLcC8rd0M5di9zQXlYLzdBTW4vK3dES2Yvc0F5di83QU10Lyt3REwvL3NBOFAvN0FSei8rd0VkZi9zQk5MLzdBQVNBTm4vcmdEbUFCSUE2Ly9nQU8zL3JRRHYvOVlBL2YvZkFRSC8wZ0VILytBQkhQL09BUzcvM1FFdy8rSUJPUC9nQVVELzRBRksvK2tCVGYvYUFWLy92UUZwLzk4QmJBQVJBQklBVy8vQkFMai94UURLLzdRQTZ2L1hBUGIvdVFEKy8ra0JDZit5QVJ6LzBnRWcvOGdCT3YrZ0FVci94UUZZLytRQlkvL01BV1gvekFGdC84c0Jidi92QWZYLzVnSkIvK2dBRXdIai8rNEI1Zi8xQWViLzhRSG8vL0lDQlAveUFnai84Z0lnLy9JQ0l2L3VBaVQvOGdOZC8rNERpZi95QTVILzlRT1MvKzREay8vdUJPSC83Z1R2Lys0RTh2L3VCUWIvOGdVTC8rNEFFd0hqLytVQjVmL3hBZWIvNndIby8ra0NCUC9wQWdqLzZRSWcvK2tDSXYvbEFpVC82UU5kLytVRGlmL3BBNUgvOFFPUy8rVURrLy9sQk9ILzVRVHYvK1VFOHYvbEJRYi82UVVMLytVQUZRQmMvKzBBN3YvdEFQYi9vUUQ1LzlFQS92L3ZBUW4vMHdFZy85c0JOUC90QVRyL1BnRkUvKzBCU1AvUkFVci91Z0ZlLyswQlkvL3dBV1gvOGdGdC8xQUQyLy90QkFmLzdRUVYvKzBFSy8vUkJJdi8wUUFXQUxqLzFBQysvL1lBd3YvdEFNUUFFUURLLytBQXpQL25BTTMvNVFETy8rNEEyUUFTQU9yLzZRRDIvOWNCT3YvWEFVci8wd0ZNLzlZQlRmL0ZBVmovNXdGaUFBMEJaQUFNQVczLzFnRnUvL0lCNi8vcEFrSC82UUFXQUNQL3ZBQlkvKzhBVy8vZkFKci83Z0M0LytVQXVmL1JBTVFBRVFESy84Z0EyUUFUQU9iL3hRRDIvOG9CT3YrVUFVbi9XQUZLLzM4QlRQK2xBVTMvM1FGWS8vSUJZditMQVdUL3lnRnMvM0FCYmYraUFlYi96UUFZQURvQUZBQTdBQmtBUFFBV0FSa0FGQUtxQUJZRE1RQVpBek1BRmdNMUFCWURuQUFXQTZzQUZnT3VBQllENUFBWkErWUFHUVBvQUJrRDZnQVdBL3NBRkFRREFCWUVnUUFXQklNQUZnU0ZBQllFbHdBV0JOTUFGQVRWQUJRRTF3QVpBQmdBT1AvckFEMy84d0RTLytzQTF2L3JBVG4vNndGRi8rc0Nxdi96QXgvLzZ3TWgvK3NESS8vckF6UC84d00xLy9NRG5QL3pBNnYvOHdPdS8vTUQwdi9yQStyLzh3UUQvL01FZ2YvekJJUC84d1NGLy9NRWlQL3JCSmYvOHdUUS8rc0FHUUJULytnQkdQL29BWVVBQ1FLOC8rZ0N2Zi9vQXI3LzZBSy8vK2dDd1Avb0F3ci82QU1NLytnRER2L29BN1gvNkFPNy8rZ0QxLy9vQkIzLzZBUWgvK2dFWFAvb0JGNy82QVJnLytnRVl2L29CR1QvNkFSbS8rZ0VhUC9vQkhELzZBU3gvK2dBSEFBSy8rSUFEUUFVQUE3L3p3QkJBQklBU3YvcUFGYi8yQUJZLytvQVlRQVRBRzMvcmdCOC84MEFnZitnQUliL3dRQ0ovOEFBdVAvUUFMei82Z0MrLy9VQXYvL0dBTUFBRFFEQy8ra0F3Ly9XQU1iLzZBREgvN29BeXYvcEFNei95d0ROLzlvQXp2L0hBWTMvMHdKQi84MEFIUUE0LzdzQU92L3RBRDMvMEFEUy83c0Exdis3QVJuLzdRRTUvN3NCUmYrN0Fxci8wQU1mLzdzRElmKzdBeVAvdXdNei85QUROZi9RQTV6LzBBT3IvOUFEcnYvUUE5TC91d1BxLzlBRCsvL3RCQVAvMEFTQi85QUVnLy9RQklYLzBBU0kvN3NFbC8vUUJORC91d1RULyswRTFmL3RBQ0FBQnYveUFBdi84Z0JhLy9NQVhmL3pBTDMvOHdEMi8vVUJHdi96QVlULzhnR0YvL0lCaC8veUFZai84Z0dKLy9JQ3hmL3pBc2IvOHdNMC8vTUR0Ly96QTlyLzh3UGovL01ENi8vekErei84Z1B0Ly9JRDhQL3lBL3ovOHdRRS8vTUVKZi96QkNmLzh3UXAvL01FZ3YvekJJVC84d1NHLy9NRTFQL3pCTmIvOHdBaUFGci85QUJjLy9JQVhmLzBBRjcvOHdDOS8vUUE3di95QVJyLzlBRTAvL0lCUlAveUFWNy84Z0xGLy9RQ3h2LzBBelQvOUFNMy8vTURPZi96QXp2Lzh3TzMvL1FEMnYvMEE5di84Z1BqLy9RRDYvLzBBL3ovOUFRRS8vUUVCLy95QkJYLzhnUWwvL1FFSi8vMEJDbi85QVNDLy9RRWhQLzBCSWIvOUFUVS8vUUUxdi8wQk5yLzh3QWlBQWIvd0FBTC84QUFPdi9JQU43LzZ3RGgvK2NBNXYvREFQYi96Z0QrLy9BQkdmL0lBVHIvelFGSC8rY0JTZi9uQVV6LzN3RmkvOUVCWlAvc0FXei9vQUZ0LzlBQmhQL0FBWVgvd0FHSC84QUJpUC9BQVluL3dBUEcvK3NEN1AvQUErMy93QVB3LzhBRCsvL0lCQ1QvNndRbS8rc0VLUC9yQkNyLzV3U0svK2NFMC8vSUJOWC95QUFpQUZyLzBnQmQvOUlBdmYvU0FQYi9wUUQ1LytFQS92LzZBUW4vMHdFYS85SUJJUC9iQVRyL1RRRkkvK0VCU3YrN0FXUC8rQUZsLy9NQmJmOWZBc1gvMGdMRy85SUROUC9TQTdmLzBnUGEvOUlENC8vU0Erdi8wZ1A4LzlJRUJQL1NCQ1gvMGdRbi85SUVLZi9TQkN2LzRRU0MvOUlFaFAvU0JJYi8wZ1NMLytFRTFQL1NCTmIvMGdBakFGci85QUJjLy9BQVhmLzBBTDMvOUFEdC8rOEE3di93QVBMLzh3RCsvL2tCQlAvekFSci85QUUwLy9BQlJQL3dBVkgvOHdGZS8vQUJjUC96QXNYLzlBTEcvL1FETlAvMEE3Zi85QVBhLy9RRDIvL3dBK1AvOUFQci8vUUQvUC8wQkFULzlBUUgvL0FFRmYvd0JDWC85QVFuLy9RRUtmLzBCSUwvOUFTRS8vUUVodi8wQk5ULzlBVFcvL1FBSkFBNC8rSUFQUC9rQU5MLzRnRFUvK1FBMXYvaUFObi80UURhLytRQTNmL2tBTjcvNlFEdC8rUUE4di9yQVFULzZ3RXovK1FCT2YvaUFVUC81QUZGLytJQlVQL2tBVkgvNndGZC8rUUJadi9rQVcvLzVBRncvK3NESC8vaUF5SC80Z01qLytJRHJQL2tBOGIvNlFQUy8rSUQwLy9rQkFiLzVBUVUvK1FFSlAvcEJDYi82UVFvLytrRWlQL2lCTkQvNGdBa0FBYi84Z0FMLy9JQVd2LzFBRjMvOVFDOS8vVUE5di8wQVA3Ly9BRUovL1VCR3YvMUFUci85UUZ0Ly9VQmhQL3lBWVgvOGdHSC8vSUJpUC95QVluLzhnTEYvL1VDeHYvMUF6VC85UU8zLy9VRDJ2LzFBK1AvOVFQci8vVUQ3UC95QSszLzhnUHcvL0lEL1AvMUJBVC85UVFsLy9VRUovLzFCQ24vOVFTQy8vVUVoUC8xQkliLzlRVFUvL1VFMXYvMUFDZ0FFUDh0QUJML0xRQWwvODBBc3YvTkFMVC96UURILy9JQkRmL05BWWIvTFFHSy95MEJqdjh0QVkvL0xRS1EvODBDa2YvTkFwTC96UUtULzgwQ2xQL05BcFgvelFLVy84MEN4Ly9OQXNuL3pRTEwvODBEbC8vTkE1Ly96UVBILzgwRDgvL05CQW4velFRTC84MEVMLy9OQkRIL3pRUXovODBFTmYvTkJEZi96UVE1LzgwRU8vL05CRDMvelFRLy84MEVRZi9OQkVQL3pRUkYvODBFcXYvTkFERUFPUC9qQUR6LzVRQTkvK1FBMHYvakFOVC81UURXLytNQTJmL2lBTnIvNVFEZC8rVUEzdi9wQVBMLzZnRUUvK29CTS8vbEFUbi80d0ZELytVQlJmL2pBVkQvNVFGUi8rb0JYZi9sQVdiLzVRRnMvK1FCYi8vbEFYRC82Z0txLytRREgvL2pBeUgvNHdNai8rTURNLy9rQXpYLzVBT2MvK1FEcS8va0E2ei81UU91LytRRHh2L3BBOUwvNHdQVC8rVUQ2di9rQkFQLzVBUUcvK1VFRlAvbEJDVC82UVFtLytrRUtQL3BCSUgvNUFTRC8rUUVoZi9rQklqLzR3U1gvK1FFMFAvakFERUFWdjl6QUZ2L2tnQnQvaThBZlA2cEFJSCt0Z0NHL3o0QWlmOUxBTGovWndDKy83a0F2LzhQQU1QKzlBREcveXNBeC83eEFNci9VZ0RNL3ZrQXpmOERBTTcrN0FEWi8xZ0E1Z0FGQU9yL3ZRRHIvMGtBN2Y3K0FPLy9Fd0QyLzJnQS9mOE9BUDcvUmdELy94TUJBZjhIQVFJQUVnRUgvdzRCQ2Y4UkFSei9IUUVnLzZ3Qkx2OFZBVEQvUEFFNC93NEJPdjlxQVVEL1NRRksvd3dCVFA4L0FVMys4UUZZLzhBQlgvN3ZBV1AvTVFGbC8xOEJhZjhLQVd3QUJRRnQvekFCYnYvVkFESUFCUC9SQUZiL3VRQmIvOHNBYmY3NkFIei9RZ0NCLzBrQWh2K1pBSW4vb1FDNC83SUF2di9kQUwvL2ZnREQvMjRBeHYrT0FNZi9iQURLLzZVQXpQOXhBTTMvZHdETy8ya0EyZitwQU9ZQUR3RHEvK1FBNi8rZ0FPMy9kQUR2LzRBQTl2K3lBUDMvZlFEKy81NEEvLytBQVFIL2VRRUNBQThCQi85OUFRbi9md0VjLzRZQklQL2FBUzcvZ1FFdy81Z0JPUDk5QVRyL3N3RkEvNkFCU3Y5OEFVei9tZ0ZOLzJ3QldQL21BVi8vYXdGai81SUJaZit0QVduL2V3RnNBQThCYmYrUkFXNy84Z0F6QURqLzJRQTYvK1FBTy8vc0FEMy8zUURTLzlrQTF2L1pBUm4vNUFFNS85a0JSZi9aQWZzQURnSDlBQTRDUXdBT0Fxci8zUU1mLzlrRElmL1pBeVAvMlFNeC8rd0RNLy9kQXpYLzNRTkRBQTREUkFBT0EwVUFEZ05HQUE0RFJ3QU9BMGdBRGdOSkFBNERYZ0FPQTE4QURnTmdBQTREblAvZEE2di8zUU91LzkwRDB2L1pBK1QvN0FQbS8rd0Q2UC9zQStyLzNRUDcvK1FFQS8vZEJJSC8zUVNELzkwRWhmL2RCSWovMlFTWC85MEUwUC9aQk5QLzVBVFYvK1FFMS8vc0JOd0FEZ1RqQUE0RSt3QU9BRFVBRy8veUFEai84UUE2Ly9RQVBQLzBBRDMvOEFEUy8vRUExUC8xQU5iLzhRRGEvL1FBM2YvMUFONy84d0RtLy9FQkdmLzBBVFAvOUFFNS8vRUJRLy8wQVVYLzhRRlEvL1VCWGYvMEFXTC84Z0ZrLy9JQlp2LzFBV3ovOGdGdi8vVUNxdi93QXgvLzhRTWgvL0VESS8veEF6UC84QU0xLy9BRG5QL3dBNnYvOEFPcy8vUURydi93QThiLzh3UFMvL0VEMC8vMEErci84QVA3Ly9RRUEvL3dCQWIvOUFRVS8vUUVKUC96QkNiLzh3UW8vL01FZ2Yvd0JJUC84QVNGLy9BRWlQL3hCSmYvOEFUUS8vRUUwLy8wQk5YLzlBQTFBRkgvK1FCUy8va0FWUC81QU1ILytRRHMvL2tBN1FBVUFQRC8rUUR4Ly9rQTgvLzVBUFQvK1FEMS8va0E5di90QVBqLytRRDUvKzBBK3YvNUFQdi8rUUQ4LzlzQS92LzVBUUQvK1FFRi8va0JLLy81QVRiLytRRTYvKzBCUFAvNUFUNy8rUUZJLyswQlN2L3RBVlAvK1FGVi8va0JWLy81QVZ6LytRRnQvKzBDdS8vNUF3UC8rUU1GLy9rREIvLzVBd2ovK1FPeC8va0Qxdi81QTlqLytRUGQvL2tENHYvNUEvTC8rUVA0Ly9rRUdmLzVCQnYvK1FRci8rMEVMZi81Qkl2LzdRU04vL2tFcWYvNUJNYi8rUVRJLy9rQU9BQWwvK1FBUFAvU0FEMy8wd0N5LytRQXRQL2tBTVQvNGdEYS85SUJEZi9rQVRQLzBnRkQvOUlCWGYvU0FwRC81QUtSLytRQ2t2L2tBcFAvNUFLVS8rUUNsZi9rQXBiLzVBS3EvOU1DeC8va0Fzbi81QUxMLytRRE0vL1RBelgvMHdPWC8rUURuUC9UQTUvLzVBT3IvOU1EclAvU0E2Ny8wd1BILytRRDAvL1NBK3IvMHdQei8rUUVBLy9UQkFiLzBnUUovK1FFQy8va0JCVC8wZ1F2LytRRU1mL2tCRFAvNUFRMS8rUUVOLy9rQkRuLzVBUTcvK1FFUGYva0JELy81QVJCLytRRVEvL2tCRVgvNUFTQi85TUVnLy9UQklYLzB3U1gvOU1FcXYva0FEa0FVZi92QUZMLzd3QlUvKzhBWFAvd0FNSC83d0RzLys4QTdmL3VBTzcvOEFEdy8rOEE4Zi92QVBQLzd3RDAvKzhBOWYvdkFQYi83Z0Q0Lys4QSt2L3ZBUHYvN3dEKy8rOEJBUC92QVFYLzd3RUovL1FCSVAveEFTdi83d0UwLy9BQk52L3ZBVHIvN3dFOC8rOEJQdi92QVVULzhBRlQvKzhCVmYvdkFWZi83d0ZjLys4Qlh2L3dBVzMvN3dLNy8rOERBLy92QXdYLzd3TUgvKzhEQ1AvdkE3SC83d1BXLys4RDJQL3ZBOXYvOEFQZC8rOEQ0di92QS9MLzd3UDQvKzhFQi8vd0JCWC84QVFaLys4RUcvL3ZCQzMvN3dTTi8rOEVxZi92Qk1iLzd3VEkvKzhBUEFBRy84TUFDLy9EQUVyLzhRQlovL2NBV3YvYkFGMy8yd0NiLy9jQXZmL2JBTUwvOVFERUFBb0F4di96QU1yL2NnREwvL2NCR3YvYkFZVC93d0dGLzhNQmgvL0RBWWovd3dHSi84TUN3Zi8zQXNMLzl3TEQvL2NDeFAvM0FzWC8yd0xHLzlzREp2LzNBeWovOXdNcS8vY0RMUC8zQXk3Lzl3TXcvL2NETlAvYkE3UC85d08zLzlzRHV2LzNBN3ovOXdQYS85c0Q0Ly9iQSt2LzJ3UHMvOE1EN2YvREEvRC93d1A4LzlzRUJQL2JCQ1gvMndRbi85c0VLZi9iQkhULzl3UjIvL2NFZVAvM0JIci85d1I4Ly9jRWZ2LzNCSUQvOXdTQy85c0VoUC9iQkliLzJ3UzEvL2NFMVAvYkJOYi8yd0EvQUNmLzh3QXIvL01BTS8vekFEWC84d0NELy9NQWsvL3pBSmovOHdDei8vTUF4QUFOQU5QLzh3RUkvL01CRi8vekFSdi84d0VkLy9NQkgvL3pBU0gvOHdGQi8vTUJhdi96QWxYLzh3SlcvL01DV1AvekFsbi84d0tYLy9NQ29mL3pBcUwvOHdLai8vTUNwUC96QXFYLzh3TE4vL01Dei8vekF0SC84d0xULy9NQzRmL3pBdVAvOHdMbC8vTUM1Ly96QXduLzh3TUwvL01ERGYvekF6Ny84d09iLy9NRHFQL3pBODcvOHdQUi8vTUQvdi96QkFILzh3UWMvL01FSHYvekJDRC84d1JiLy9NRVhmL3pCRi8vOHdSaC8vTUVZLy96QkdYLzh3Um4vL01FYWYvekJHdi84d1J0Ly9NRWIvL3pCSEgvOHdTdy8vTUV5Zi96QUVBQVIvL3NBRWovN0FCSi8rd0FTLy9zQUZYLzdBQ1UvK3dBbWYvc0FMdi83QURJLyt3QXlmL3NBUGYvN0FFRC8rd0JIdi9zQVNMLzdBRkMvK3dCWVAvc0FXSC83QUZyLyt3Q3N2L3NBclAvN0FLMC8rd0N0Zi9zQXJiLzdBTE8vK3dDMFAvc0F0TC83QUxVLyt3QzF2L3NBdGovN0FMYS8rd0MzUC9zQXQ3LzdBTGcvK3dDNHYvc0F1VC83QUxtLyt3QzZQL3NBNi8vN0FQVi8rd0QyZi9zQTl6LzdBUDMvK3dEL2Yvc0JBTC83QVFRLyt3RUV2L3NCQlAvN0FRZi8rd0VMdi9zQkVqLzdBUksvK3dFVFAvc0JFNy83QVJRLyt3RVV2L3NCRlQvN0FSVy8rd0Vhdi9zQkd6LzdBUnUvK3dFY3Yvc0JLMy83QVM2Lyt3RXZQL3NBRUFBSi8vbUFDdi81Z0F6LytZQU5mL21BSVAvNWdDVC8rWUFtUC9tQUxQLzVnQzQvOElBeEFBUUFOUC81Z0VJLytZQkYvL21BUnYvNWdFZC8rWUJILy9tQVNILzVnRkIvK1lCYXYvbUFsWC81Z0pXLytZQ1dQL21BbG4vNWdLWC8rWUNvZi9tQXFMLzVnS2ovK1lDcFAvbUFxWC81Z0xOLytZQ3ovL21BdEgvNWdMVC8rWUM0Zi9tQXVQLzVnTGwvK1lDNS8vbUF3bi81Z01MLytZRERmL21BejcvNWdPYi8rWURxUC9tQTg3LzVnUFIvK1lEL3YvbUJBSC81Z1FjLytZRUh2L21CQ0QvNWdSYi8rWUVYZi9tQkYvLzVnUmgvK1lFWS8vbUJHWC81Z1JuLytZRWFmL21CR3YvNWdSdC8rWUViLy9tQkhILzVnU3cvK1lFeWYvbUFFY0FFQUFFQUJJQUJBQkgvK2NBU1AvbkFFbi81d0JMLytjQVZmL25BSlQvNXdDWi8rY0F1Ly9uQU1RQUR3REkvK2NBeWYvbkFQZi81d0VELytjQkh2L25BU0wvNXdGQy8rY0JZUC9uQVdILzV3RnIvK2NCaGdBRUFZb0FCQUdPQUFRQmp3QUVBckwvNXdLei8rY0N0UC9uQXJYLzV3SzIvK2NDenYvbkF0RC81d0xTLytjQzFQL25BdGIvNXdMWS8rY0Mydi9uQXR6LzV3TGUvK2NDNFAvbkF1TC81d0xrLytjQzV2L25BdWovNXdPdi8rY0QxZi9uQTluLzV3UGMvK2NEOS8vbkEvMy81d1FDLytjRUVQL25CQkwvNXdRVC8rY0VILy9uQkM3LzV3UkkvK2NFU3YvbkJFei81d1JPLytjRVVQL25CRkwvNXdSVS8rY0VWdi9uQkdyLzV3UnMvK2NFYnYvbkJITC81d1N0LytjRXV2L25CTHovNXdCTkFBWUFFQUFMQUJBQURRQVVBRUVBRWdCSC8rZ0FTUC9vQUVuLzZBQkwvK2dBVmYvb0FHRUFFd0NVLytnQW1mL29BTHYvNkFESS8rZ0F5Zi9vQVBmLzZBRUQvK2dCSHYvb0FTTC82QUZDLytnQllQL29BV0gvNkFGci8rZ0JoQUFRQVlVQUVBR0hBQkFCaUFBUUFZa0FFQUt5LytnQ3MvL29BclQvNkFLMS8rZ0N0di9vQXM3LzZBTFEvK2dDMHYvb0F0VC82QUxXLytnQzJQL29BdHIvNkFMYy8rZ0Mzdi9vQXVELzZBTGkvK2dDNVAvb0F1Yi82QUxvLytnRHIvL29BOVgvNkFQWi8rZ0QzUC9vQSt3QUVBUHRBQkFEOEFBUUEvZi82QVA5LytnRUF2L29CQkQvNkFRUy8rZ0VFLy9vQkIvLzZBUXUvK2dFU1Avb0JFci82QVJNLytnRVR2L29CRkQvNkFSUy8rZ0VWUC9vQkZiLzZBUnEvK2dFYlAvb0JHNy82QVJ5LytnRXJmL29CTHIvNkFTOC8rZ0FUd0JIQUFFQVNBQUJBRWtBQVFCTEFBRUFWUUFCQUpRQUFRQ1pBQUVBdXdBQkFNZ0FBUURKQUFFQTdRQXJBUElBRkFEMi8rTUE5d0FCQVBuLzhBRDgvK1lBL3YvMUFRTUFBUUVFQUJRQkhnQUJBU0lBQVFFNi85TUJRZ0FCQVVqLzhBRksvOThCVVFBVUFXQUFBUUZoQUFFQmF3QUJBVzMvNHdGd0FCUUNzZ0FCQXJNQUFRSzBBQUVDdFFBQkFyWUFBUUxPQUFFQzBBQUJBdElBQVFMVUFBRUMxZ0FCQXRnQUFRTGFBQUVDM0FBQkF0NEFBUUxnQUFFQzRnQUJBdVFBQVFMbUFBRUM2QUFCQTY4QUFRUFZBQUVEMlFBQkE5d0FBUVAzQUFFRC9RQUJCQUlBQVFRUUFBRUVFZ0FCQkJNQUFRUWZBQUVFSy8vd0JDNEFBUVJJQUFFRVNnQUJCRXdBQVFST0FBRUVVQUFCQkZJQUFRUlVBQUVFVmdBQkJHb0FBUVJzQUFFRWJnQUJCSElBQVFTTC8vQUVyUUFCQkxvQUFRUzhBQUVBVXdBNC83NEFVZi8xQUZMLzlRQlUvL1VBV3YvdkFGMy83d0M5Lys4QXdmLzFBTkwvdmdEVy83NEE1di9KQU96LzlRRHcvL1VBOGYvMUFQUC85UUQwLy9VQTlmLzFBUGIvM3dENC8vVUErdi8xQVB2LzlRRCsvL1VCQVAvMUFRWC85UUVKLyswQkd2L3ZBU0QvNndFci8vVUJOdi8xQVRuL3ZnRTYvOThCUFAvMUFUNy85UUZGLzc0QlRQL3BBVlAvOVFGVi8vVUJWLy8xQVZ6LzlRRmovL1VCYmYvZ0Fydi85UUxGLys4Q3h2L3ZBd1AvOVFNRi8vVURCLy8xQXdqLzlRTWYvNzRESWYrK0F5UC92Z00wLys4RHNmLzFBN2YvN3dQUy83NEQxdi8xQTlqLzlRUGEvKzhEM2YvMUErTC85UVBqLys4RDYvL3ZBL0wvOVFQNC8vVUQvUC92QkFULzd3UVovL1VFRy8vMUJDWC83d1FuLys4RUtmL3ZCQzMvOVFTQy8rOEVoUC92QkliLzd3U0kvNzRFamYvMUJLbi85UVRHLy9VRXlQLzFCTkQvdmdUVS8rOEUxdi92QUdnQU9QOHpBRHIveUFBOC8vQUFQZitzQUZILzd3QlMvKzhBVlAvdkFNSC83d0RTL3pNQTFQLzFBTmIvTXdEYS8vQUEzZi8xQU43LzZ3RGgvK1lBNXYvQ0FPei83d0R3Lys4QThmL3ZBUFAvN3dEMC8rOEE5Zi92QVBiL3pnRDQvKzhBK3YvdkFQdi83d0QrLys4QkFQL3ZBUVgvN3dFWi84Z0JLLy92QVRQLzhBRTIvKzhCT2Y4ekFUci96UUU4Lys4QlB2L3ZBVVAvOEFGRi96TUJSLy9tQVVuLzVnRk0vOThCVVAvMUFWUC83d0ZWLys4QlYvL3ZBVnovN3dGZC8vQUJZdi9RQVdULzZ3Rm0vL1VCYlArZkFXMy8wQUZ2Ly9VQ3F2K3NBcnYvN3dNRC8rOERCZi92QXdmLzd3TUkvKzhESC84ekF5SC9Nd01qL3pNRE0vK3NBelgvckFPYy82d0RxLytzQTZ6LzhBT3UvNndEc2YvdkE4Yi82d1BTL3pNRDAvL3dBOWIvN3dQWS8rOEQzZi92QStMLzd3UHEvNndEOHYvdkEvai83d1A3LzhnRUEvK3NCQWIvOEFRVS8vQUVHZi92QkJ2Lzd3UWsvK3NFSnYvckJDai82d1FxLytZRUxmL3ZCSUgvckFTRC82d0VoZitzQklqL013U0svK1lFamYvdkJKZi9yQVNwLys4RXh2L3ZCTWovN3dUUS96TUUwLy9JQk5YL3lBQm9BRWYvdEFCSS83UUFTZiswQUV2L3RBQk1BQlFBVHdBVUFGQUFGQUJULzNvQVZmKzBBRmYvWkFCYkFBc0FsUCswQUpuL3RBQzcvN1FBeVArMEFNbi90QUQzLzdRQkEvKzBBUmovZWdFZS83UUJJdiswQVVML3RBRmcvN1FCWWYrMEFXdi90QUhSLzJRQ3N2KzBBclAvdEFLMC83UUN0ZiswQXJiL3RBSzgvM29DdmY5NkFyNy9lZ0svLzNvQ3dQOTZBczcvdEFMUS83UUMwdiswQXRUL3RBTFcvN1FDMlArMEF0ci90QUxjLzdRQzN2KzBBdUQvdEFMaS83UUM1UCswQXViL3RBTG8vN1FEQ3Y5NkF3ei9lZ01PLzNvREZ2OWtBeGovWkFNYS8yUURIUDlrQXg3L1pBT3YvN1FEdGY5NkE3di9lZ1BWLzdRRDEvOTZBOW4vdEFQYy83UUQzdjlrQS9mL3RBUDkvN1FFQXYrMEJCRC90QVFTLzdRRUUvKzBCQjMvZWdRZi83UUVJZjk2QkM3L3RBUkkvN1FFU3YrMEJFei90QVJPLzdRRVVQKzBCRkwvdEFSVS83UUVWdiswQkZ6L2VnUmUvM29FWVA5NkJHTC9lZ1JrLzNvRVp2OTZCR2ovZWdScS83UUViUCswQkc3L3RBUncvM29FY3YrMEJLMy90QVN4LzNvRXV2KzBCTHovdEFTK0FCUUV3QUFVQk1JQUZBVFAvMlFBYWdBNC8rWUFPdi9uQUR6LzhnQTkvK2NBVWYveEFGTC84UUJVLy9FQVhQL3hBTUgvOFFEUy8rWUExdi9tQU5yLzhnRGUvKzRBNGYvb0FPYi81Z0RzLy9FQTd2L3hBUEQvOFFEeC8vRUE4Ly94QVBULzhRRDEvL0VBOXYvUUFQai84UUQ2Ly9FQSsvL3hBUDcvOFFFQS8vRUJCZi94QVJuLzV3RXIvL0VCTS8veUFUVC84UUUyLy9FQk9mL21BVHIvemdFOC8vRUJQdi94QVVQLzhnRkUvL0VCUmYvbUFVZi82QUZKLytnQlUvL3hBVlgvOFFGWC8vRUJYUC94QVYzLzhnRmUvL0VCWXYvbkFXVC83UUZzLytZQmJmL1FBcXIvNXdLNy8vRURBLy94QXdYLzhRTUgvL0VEQ1AveEF4Ly81Z01oLytZREkvL21BelAvNXdNMS8rY0RuUC9uQTZ2LzV3T3MvL0lEcnYvbkE3SC84UVBHLys0RDB2L21BOVAvOGdQVy8vRUQyUC94QTl2LzhRUGQvL0VENHYveEErci81d1B5Ly9FRCtQL3hBL3YvNXdRRC8rY0VCdi95QkFmLzhRUVUvL0lFRmYveEJCbi84UVFiLy9FRUpQL3VCQ2IvN2dRby8rNEVLdi9vQkMzLzhRU0IvK2NFZy8vbkJJWC81d1NJLytZRWl2L29CSTMvOFFTWC8rY0VxZi94Qk1iLzhRVEkvL0VFMFAvbUJOUC81d1RWLytjQWF3QWxBQThBT1AvbUFEci81Z0E4QUE0QVBmL21BTElBRHdDMEFBOEEwdi9tQU5RQURnRFcvK1lBMlFBVEFOb0FEZ0RkQUE0QTNnQUxBT0gvNVFEbS8rWUE1Ly8wQU8wQUVnRHlBQThBOXYvbkFQbi82QUQrLy9jQkJBQVBBUTBBRHdFWi8rWUJNd0FPQVRuLzVnRTYvK2NCUXdBT0FVWC81Z0ZILytVQlNQL29BVW4vNVFGSy8rZ0JUUC9rQVZBQURnRlJBQThCWFFBT0FXTC81Z0ZrLytZQlpnQU9BV3ovNWdGdC8rY0Jid0FPQVhBQUR3S1FBQThDa1FBUEFwSUFEd0tUQUE4Q2xBQVBBcFVBRHdLV0FBOENxdi9tQXNjQUR3TEpBQThDeXdBUEF4Ly81Z01oLytZREkvL21BelAvNWdNMS8rWURsd0FQQTV6LzVnT2ZBQThEcS8vbUE2d0FEZ091LytZRHhnQUxBOGNBRHdQUy8rWUQwd0FPQStyLzVnUHpBQThEKy8vbUJBUC81Z1FHQUE0RUNRQVBCQXNBRHdRVUFBNEVKQUFMQkNZQUN3UW9BQXNFS3YvbEJDdi82QVF2QUE4RU1RQVBCRE1BRHdRMUFBOEVOd0FQQkRrQUR3UTdBQThFUFFBUEJEOEFEd1JCQUE4RVF3QVBCRVVBRHdTQi8rWUVnLy9tQklYLzVnU0kvK1lFaXYvbEJJdi82QVNYLytZRXFnQVBCTkQvNWdUVC8rWUUxZi9tQUhVQUJ2KzZBQXYvdWdBNC96TUFPdi9IQUR6LzhRQTkvNnNBVWYvdUFGTC83Z0JVLys0QVhQL1hBTUgvN2dEUy96TUExdjh6QU5yLzhRRGUvK3NBNGYvbEFPYi93d0RzLys0QTd2L1hBUEQvN2dEeC8rNEE4Ly91QVBULzdnRDEvKzRBOXYvTUFQai83Z0Q2Lys0QSsvL3VBUDcvN2dFQS8rNEJCZi91QVJuL3h3RXIvKzRCTS8veEFUVC8xd0UyLys0Qk9mOHpBVHIveVFFOC8rNEJQdi91QVVQLzhRRkUvOWNCUmY4ekFVZi81UUZKLytVQlRQL2ZBVlAvN2dGVi8rNEJWLy91QVZ6LzdnRmQvL0VCWHYvWEFXTC8wQUZrLytzQmJQK2dBVzMvelFHRS83b0JoZis2QVlmL3VnR0kvN29CaWYrNkFxci9xd0s3Lys0REEvL3VBd1gvN2dNSC8rNERDUC91QXgvL013TWgvek1ESS84ekF6UC9xd00xLzZzRG5QK3JBNnYvcXdPcy8vRURydityQTdILzdnUEcvK3NEMHY4ekE5UC84UVBXLys0RDJQL3VBOXYvMXdQZC8rNEQ0di91QStyL3F3UHMvN29EN2YrNkEvRC91Z1B5Lys0RCtQL3VBL3YveHdRRC82c0VCdi94QkFmLzF3UVUvL0VFRmYvWEJCbi83Z1FiLys0RUpQL3JCQ2IvNndRby8rc0VLdi9sQkMzLzdnU0IvNnNFZy8rckJJWC9xd1NJL3pNRWl2L2xCSTMvN2dTWC82c0VxZi91Qk1iLzdnVEkvKzRFMFA4ekJOUC94d1RWLzhjQWRnQkgvL0FBU1Avd0FFbi84QUJMLy9BQVUvL2VBRlgvOEFDVS8vQUFtZi93QUx2LzhBREkvL0FBeWYvd0FQZi84QUVELy9BQkdQL2VBUnovNndFZS8vQUJJdi93QVVMLzhBRmcvL0FCWWYvd0FXdi84QUhyLytzQjdmL3JBZlgvNlFIOC8rc0NCZi9yQWlILzZ3SXEvK3NDUWYvckFyTC84QUt6Ly9BQ3RQL3dBclgvOEFLMi8vQUN2UC9lQXIzLzNnSysvOTRDdi8vZUFzRC8zZ0xPLy9BQzBQL3dBdEwvOEFMVS8vQUMxdi93QXRqLzhBTGEvL0FDM1Avd0F0Ny84QUxnLy9BQzR2L3dBdVQvOEFMbS8vQUM2UC93QXdyLzNnTU0vOTRERHYvZUEwci82d05VLytzRFZmL3JBMWIvNndOWC8rc0RXUC9yQTJILzZ3TmkvK3NEWS8vckEyVC82d05yLytzRGJQL3JBMjMvNndOdS8rc0Rmdi9yQTMvLzZ3T0EvK3NEci8vd0E3WC8zZ083Lzk0RDFmL3dBOWYvM2dQWi8vQUQzUC93QS9mLzhBUDkvL0FFQXYvd0JCRC84QVFTLy9BRUUvL3dCQjMvM2dRZi8vQUVJZi9lQkM3LzhBUkkvL0FFU3Yvd0JFei84QVJPLy9BRVVQL3dCRkwvOEFSVS8vQUVWdi93QkZ6LzNnUmUvOTRFWVAvZUJHTC8zZ1JrLzk0RVp2L2VCR2ovM2dScS8vQUViUC93Qkc3LzhBUncvOTRFY3Yvd0JLMy84QVN4Lzk0RXV2L3dCTHovOEFUZy8rc0ZBdi9yQlFYLzZ3VUsvK3NBZkFBRy85b0FDLy9hQUVmLzhBQkkvL0FBU2Yvd0FFdi84QUJWLy9BQVdmL3ZBRnIvM0FCZC85d0FsUC93QUpuLzhBQ2IvKzhBdS8vd0FMMy8zQURDLyt3QXhBQVBBTWIvNmdESS8vQUF5Zi93QU1yL3lBREwvKzhBelAvbkFQZi84QUVELy9BQkd2L2NBUjcvOEFFaS8vQUJRdi93QVdELzhBRmgvL0FCYS8vd0FZVC8yZ0dGLzlvQmgvL2FBWWovMmdHSi85b0Nzdi93QXJQLzhBSzAvL0FDdGYvd0FyYi84QUxCLys4Q3d2L3ZBc1AvN3dMRS8rOEN4Zi9jQXNiLzNBTE8vL0FDMFAvd0F0TC84QUxVLy9BQzF2L3dBdGovOEFMYS8vQUMzUC93QXQ3LzhBTGcvL0FDNHYvd0F1VC84QUxtLy9BQzZQL3dBeWIvN3dNby8rOERLdi92QXl6Lzd3TXUvKzhETVAvdkF6VC8zQU92Ly9BRHMvL3ZBN2YvM0FPNi8rOER2UC92QTlYLzhBUFovL0FEMnYvY0E5ei84QVBqLzl3RDYvL2NBK3ovMmdQdC85b0Q4UC9hQS9mLzhBUDgvOXdEL2Yvd0JBTC84QVFFLzl3RUVQL3dCQkwvOEFRVC8vQUVILy93QkNYLzNBUW4vOXdFS2YvY0JDNy84QVJJLy9BRVN2L3dCRXovOEFSTy8vQUVVUC93QkZMLzhBUlUvL0FFVnYvd0JHci84QVJzLy9BRWJ2L3dCSEwvOEFSMC8rOEVkdi92QkhqLzd3UjYvKzhFZlAvdkJINy83d1NBLys4RWd2L2NCSVQvM0FTRy85d0VyZi93QkxYLzd3UzYvL0FFdlAvd0JOVC8zQVRXLzl3QWpBQUcvOG9BQy8vS0FEai8wZ0E2LzlRQVBQLzBBRDMvMHdCUi8rSUFVdi9pQUZULzRnQmEvK1lBWFAvdkFGMy81Z0M5LytZQXdmL2lBTkwvMGdEVy85SUEydi8wQU43LzdRRGgvK0VBNXYvVUFPei80Z0R1Lys4QThQL2lBUEgvNGdEei8rSUE5UC9pQVBYLzRnRDIvOGtBK1AvaUFQci80Z0Q3LytJQS92L1JBUUQvNGdFRi8rSUJDZi9sQVJuLzFBRWEvK1lCSVAvakFTdi80Z0V6Ly9RQk5QL3ZBVGIvNGdFNS85SUJPdi9FQVR6LzRnRSsvK0lCUS8vMEFVVC83d0ZGLzlJQlIvL2hBVW4vNFFGVC8rSUJWZi9pQVZmLzRnRmMvK0lCWGYvMEFWNy83d0ZpLzlRQlkvLzFBV1QvNXdGcy82b0JiZi9KQVlUL3lnR0YvOG9CaC8vS0FZai95Z0dKLzhvQ3F2L1RBcnYvNGdMRi8rWUN4di9tQXdQLzRnTUYvK0lEQi8vaUF3ai80Z01mLzlJRElmL1NBeVAvMGdNei85TUROUC9tQXpYLzB3T2MvOU1EcS8vVEE2ei85QU91LzlNRHNmL2lBN2YvNWdQRy8rMEQwdi9TQTlQLzlBUFcvK0lEMlAvaUE5ci81Z1BiLys4RDNmL2lBK0wvNGdQai8rWUQ2di9UQSt2LzVnUHMvOG9EN2YvS0EvRC95Z1B5LytJRCtQL2lBL3YvMUFQOC8rWUVBLy9UQkFULzVnUUcvL1FFQi8vdkJCVC85QVFWLys4RUdmL2lCQnYvNGdRay8rMEVKZi9tQkNiLzdRUW4vK1lFS1AvdEJDbi81Z1FxLytFRUxmL2lCSUgvMHdTQy8rWUVnLy9UQklULzVnU0YvOU1FaHYvbUJJai8wZ1NLLytFRWpmL2lCSmYvMHdTcC8rSUV4di9pQk1qLzRnVFEvOUlFMC8vVUJOVC81Z1RWLzlRRTF2L21BSmdBSlFBUUFDZi82QUFyLytnQU0vL29BRFgvNkFBNC8rQUFPdi9nQUQzLzN3Q0QvK2dBay8vb0FKai82QUN5QUJBQXMvL29BTFFBRUFEUy8rQUEwLy9vQU5RQUVBRFcvK0FBMlFBVUFOMEFFQURoLytFQTV2L2dBTzBBRXdEeUFCQUErZi9nQVFRQUVBRUkvK2dCRFFBUUFSZi82QUVaLytBQkcvL29BUjMvNkFFZi8rZ0JJZi9vQVRuLzRBRkIvK2dCUmYvZ0FVZi80UUZJLytBQlNmL2hBVXIvNEFGTi8rRUJVQUFRQVZFQUVBRlkvK2tCWXYvZkFXVC8zZ0ZtQUJBQmF2L29BV3ovM3dGdS8vSUJid0FRQVhBQUVBSlYvK2dDVnYvb0Fsai82QUpaLytnQ2tBQVFBcEVBRUFLU0FCQUNrd0FRQXBRQUVBS1ZBQkFDbGdBUUFwZi82QUtoLytnQ292L29BcVAvNkFLay8rZ0NwZi9vQXFyLzN3TEhBQkFDeVFBUUFzc0FFQUxOLytnQ3ovL29BdEgvNkFMVC8rZ0M0Zi9vQXVQLzZBTGwvK2dDNS8vb0F3bi82QU1MLytnRERmL29BeC8vNEFNaC8rQURJLy9nQXpQLzN3TTEvOThEUHYvb0E1Y0FFQU9iLytnRG5QL2ZBNThBRUFPby8rZ0RxLy9mQTY3LzN3UEhBQkFEenYvb0E5SC82QVBTLytBRDZ2L2ZBL01BRUFQNy8rQUQvdi9vQkFILzZBUUQvOThFQ1FBUUJBc0FFQVFjLytnRUh2L29CQ0QvNkFRcS8rRUVLLy9nQkM4QUVBUXhBQkFFTXdBUUJEVUFFQVEzQUJBRU9RQVFCRHNBRUFROUFCQUVQd0FRQkVFQUVBUkRBQkFFUlFBUUJGdi82QVJkLytnRVgvL29CR0gvNkFSai8rZ0VaZi9vQkdmLzZBUnAvK2dFYS8vb0JHMy82QVJ2LytnRWNmL29CSUgvM3dTRC85OEVoZi9mQklqLzRBU0svK0VFaS8vZ0JKZi8zd1NxQUJBRXNQL29CTW4vNkFUUS8rQUUwLy9nQk5YLzRBQzZBRWYvM0FCSS85d0FTZi9jQUV2LzNBQlIvK0VBVXYvaEFGUC8xZ0JVLytFQVZmL2NBRm4vM1FCYS8rRUFYZi9oQUpULzNBQ1ovOXdBbS8vZEFMdi8zQUM5LytFQXZ2LzFBTC8vNWdEQi8rRUF3di9yQU1QLzZRREYvL0FBeHYvbkFNai8zQURKLzl3QXl2L2pBTXYvM1FETS84NEF6Zi9VQU03LzJ3RHMvK0VBOFAvaEFQSC80UUR6LytFQTlQL2hBUFgvNFFEMy85d0ErUC9oQVByLzRRRDcvK0VBL3YvaEFRRC80UUVELzl3QkJmL2hBUmovMWdFYS8rRUJIdi9jQVNMLzNBRXIvK0VCTnYvaEFUei80UUUrLytFQlF2L2NBVlAvNFFGVi8rRUJWLy9oQVZ6LzRRRmcvOXdCWWYvY0FXdi8zQUt5Lzl3Q3MvL2NBclQvM0FLMS85d0N0di9jQXJ2LzRRSzgvOVlDdmYvV0FyNy8xZ0svLzlZQ3dQL1dBc0gvM1FMQy85MEN3Ly9kQXNULzNRTEYvK0VDeHYvaEFzNy8zQUxRLzl3QzB2L2NBdFQvM0FMVy85d0MyUC9jQXRyLzNBTGMvOXdDM3YvY0F1RC8zQUxpLzl3QzVQL2NBdWIvM0FMby85d0RBLy9oQXdYLzRRTUgvK0VEQ1AvaEF3ci8xZ01NLzlZRER2L1dBeWIvM1FNby85MERLdi9kQXl6LzNRTXUvOTBETVAvZEF6VC80UU92Lzl3RHNmL2hBN1AvM1FPMS85WUR0Ly9oQTdyLzNRTzcvOVlEdlAvZEE5WC8zQVBXLytFRDEvL1dBOWovNFFQWi85d0Qydi9oQTl6LzNBUGQvK0VENHYvaEErUC80UVByLytFRDh2L2hBL2YvM0FQNC8rRUQvUC9oQS8zLzNBUUMvOXdFQlAvaEJCRC8zQVFTLzl3RUUvL2NCQm4vNFFRYi8rRUVIZi9XQkIvLzNBUWgvOVlFSmYvaEJDZi80UVFwLytFRUxmL2hCQzcvM0FSSS85d0VTdi9jQkV6LzNBUk8vOXdFVVAvY0JGTC8zQVJVLzl3RVZ2L2NCRnovMWdSZS85WUVZUC9XQkdMLzFnUmsvOVlFWnYvV0JHai8xZ1JxLzl3RWJQL2NCRzcvM0FSdy85WUVjdi9jQkhULzNRUjIvOTBFZVAvZEJIci8zUVI4LzkwRWZ2L2RCSUQvM1FTQy8rRUVoUC9oQkliLzRRU04vK0VFcWYvaEJLMy8zQVN4LzlZRXRmL2RCTHIvM0FTOC85d0V4di9oQk1qLzRRVFUvK0VFMXYvaEFMOEFCZ0FNQUFzQURBQkgvK2dBU1Avb0FFbi82QUJLQUF3QVMvL29BRlAvNmdCVi8rZ0FXZ0FMQUYwQUN3Q1UvK2dBbWYvb0FMdi82QUM5QUFzQXZ2LzBBTVQvMXdER0FBc0F5UC9vQU1uLzZBREtBQXdBOS8vb0FRUC82QUVZLytvQkdnQUxBUjcvNkFFaS8rZ0JRdi9vQVdELzZBRmgvK2dCYS8vb0FZUUFEQUdGQUF3Qmh3QU1BWWdBREFHSkFBd0I0d0FOQWVZQURRSG9BQTRCNmYvMUFldi83QUh0LyswQjlmL3NBZnYvdndIOC8rMEIvZisvQWdRQURnSUYvKzBDQ0FBT0FpQUFEZ0loLyswQ0lnQU5BaVFBRGdJcS8rMENRZi91QWtQL3Z3S3kvK2dDcy8vb0FyVC82QUsxLytnQ3R2L29BcnovNmdLOS8rb0N2di9xQXIvLzZnTEEvK29DeFFBTEFzWUFDd0xPLytnQzBQL29BdEwvNkFMVS8rZ0Mxdi9vQXRqLzZBTGEvK2dDM1Avb0F0Ny82QUxnLytnQzR2L29BdVQvNkFMbS8rZ0M2UC9vQXdyLzZnTU0vK29ERHYvcUF6UUFDd05ELzc4RFJQKy9BMFgvdndORy83OERSLysvQTBqL3Z3TkovNzhEU3YvdEExVC83UU5WLyswRFZ2L3RBMWYvN1FOWS8rMERYUUFOQTE3L3Z3TmYvNzhEWVArL0EySC83UU5pLyswRFkvL3RBMlQvN1FOci8rMERiUC90QTIzLzdRTnUvKzBEZnYvdEEzLy83UU9BLyswRGhQLzFBNFgvOVFPRy8vVURoLy8xQTRrQURnT1NBQTBEa3dBTkE2Ly82QU8xLytvRHR3QUxBN3YvNmdQVi8rZ0QxLy9xQTluLzZBUGFBQXNEM1Avb0ErTUFDd1ByQUFzRDdBQU1BKzBBREFQd0FBd0Q5Ly9vQS93QUN3UDkvK2dFQXYvb0JBUUFDd1FRLytnRUV2L29CQlAvNkFRZC8rb0VILy9vQkNILzZnUWxBQXNFSndBTEJDa0FDd1F1LytnRVNQL29CRXIvNkFSTS8rZ0VUdi9vQkZELzZBUlMvK2dFVlAvb0JGYi82QVJjLytvRVh2L3FCR0QvNmdSaS8rb0VaUC9xQkdiLzZnUm8vK29FYXYvb0JHei82QVJ1LytnRWNQL3FCSEwvNkFTQ0FBc0VoQUFMQklZQUN3U3QvK2dFc2YvcUJMci82QVM4LytnRTFBQUxCTllBQ3dUYy83OEU0UC90Qk9FQURRVGovNzhFN3dBTkJQSUFEUVQ3Lzc4RkF2L3RCUVgvN1FVR0FBNEZDdi90QlFzQURRRGpBQVlBRFFBTEFBMEFSZi93QUVmL3RnQkkvN1lBU2YrMkFFb0FEUUJMLzdZQVUvL2FBRlgvdGdCYUFBc0FYUUFMQUpUL3RnQ1ovN1lBdS8rMkFMMEFDd0MrLzgwQXgvKzdBTWovd0FESi83WUF6UC9WQU8zL3RRRHkvNzRBOS8rMkFRUC90Z0VFLzc0QkdQL2FBUm9BQ3dFYy8rWUJIdisyQVNBQURBRWkvN1lCUXYrMkFWSC92Z0ZnLzdZQllmKzJBV01BQ3dGbEFBc0JhLysyQVhEL3ZnR0VBQTBCaFFBTkFZY0FEUUdJQUEwQmlRQU5BZU1BRFFIbUFBMEI2QUFPQWVuLzlRSHIvK3dCN2YvdEFmWC83QUg3Lzc4Qi9QL3RBZjMvdndJRUFBNENCZi90QWdnQURnSWdBQTRDSWYvdEFpSUFEUUlrQUE0Q0t2L3RBa0gvN2dKRC83OENxLy93QXF6LzhBS3QvL0FDcnYvd0FxLy84QUt3Ly9BQ3NmL3dBckwvdGdLei83WUN0UCsyQXJYL3RnSzIvN1lDdlAvYUFyMy8yZ0srLzlvQ3YvL2FBc0QvMmdMRkFBc0N4Z0FMQXNqLzhBTEsvL0FDelAvd0FzNy90Z0xRLzdZQzB2KzJBdFQvdGdMVy83WUMyUCsyQXRyL3RnTGMvN1lDM3YrMkF1RC90Z0xpLzdZQzVQKzJBdWIvdGdMby83WURDdi9hQXd6LzJnTU8vOW9ETkFBTEEwUC92d05FLzc4RFJmKy9BMGIvdndOSC83OERTUCsvQTBuL3Z3TksvKzBEVlAvdEExWC83UU5XLyswRFYvL3RBMWovN1FOZEFBMERYdisvQTEvL3Z3TmcvNzhEWWYvdEEyTC83UU5qLyswRFpQL3RBMnYvN1FOcy8rMERiZi90QTI3LzdRTisvKzBEZi8vdEE0RC83UU9FLy9VRGhmLzFBNGIvOVFPSC8vVURpUUFPQTVJQURRT1RBQTBEci8rMkE3WC8yZ08zQUFzRHUvL2FBOVQvOEFQVi83WUQxLy9hQTluL3RnUGFBQXNEM1ArMkErTUFDd1ByQUFzRDdBQU5BKzBBRFFQd0FBMEQ5UC93QS9mL3RnUDhBQXNEL2YrMkJBTC90Z1FFQUFzRUN2L3dCQXovOEFRUS83WUVFdisyQkJQL3RnUWQvOW9FSC8rMkJDSC8yZ1FsQUFzRUp3QUxCQ2tBQ3dRdS83WUVNUC93QkRMLzhBUTAvL0FFTnYvd0JEai84QVE2Ly9BRVBQL3dCRDcvOEFSQS8vQUVRdi93QkVULzhBUkcvL0FFU1ArMkJFci90Z1JNLzdZRVR2KzJCRkQvdGdSUy83WUVWUCsyQkZiL3RnUmMvOW9FWHYvYUJHRC8yZ1JpLzlvRVpQL2FCR2IvMmdSby85b0VhdisyQkd6L3RnUnUvN1lFY1AvYUJITC90Z1NDQUFzRWhBQUxCSVlBQ3dTci8vQUVyZisyQkxILzJnUzYvN1lFdlArMkJOUUFDd1RXQUFzRTNQKy9CT0QvN1FUaEFBMEU0LysvQk84QURRVHlBQTBFKy8rL0JRTC83UVVGLyswRkJnQU9CUXIvN1FVTEFBMEE1d0FRL3djQUV2OEhBQ1gvVGdBdS93MEFPQUFVQUVYLzNnQkgvK3NBU1AvckFFbi82d0JMLytzQVUvL3JBRlgvNndCVy8rWUFXZi9xQUZyLzZBQmQvK2dBbFAvckFKbi82d0NiLytvQXN2OU9BTFQvVGdDNy8rc0F2Zi9vQU1qLzZ3REovK3NBeS8vcUFOSUFGQURXQUJRQTkvL3JBUVAvNndFTi8wNEJHUC9yQVJyLzZBRWUvK3NCSXYvckFUa0FGQUZDLytzQlJRQVVBV0QvNndGaC8rc0JhLy9yQVliL0J3R0svd2NCanY4SEFZLy9Cd0g3LzhBQi9mL0FBa1Avd0FLUS8wNENrZjlPQXBML1RnS1QvMDRDbFA5T0FwWC9UZ0tXLzA0Q3EvL2VBcXovM2dLdC85NENydi9lQXEvLzNnS3cvOTRDc2YvZUFyTC82d0t6LytzQ3RQL3JBclgvNndLMi8rc0N2UC9yQXIzLzZ3SysvK3NDdi8vckFzRC82d0xCLytvQ3d2L3FBc1AvNmdMRS8rb0N4Zi9vQXNiLzZBTEgvMDRDeVAvZUFzbi9UZ0xLLzk0Q3kvOU9Bc3ovM2dMTy8rc0MwUC9yQXRMLzZ3TFUvK3NDMXYvckF0ai82d0xhLytzQzNQL3JBdDcvNndMZy8rc0M0di9yQXVULzZ3TG0vK3NDNlAvckF2Yi9EUU1LLytzRERQL3JBdzcvNndNZkFCUURJUUFVQXlNQUZBTW0vK29ES1AvcUF5ci82Z01zLytvREx2L3FBekQvNmdNMC8rZ0RRLy9BQTBUL3dBTkYvOEFEUnYvQUEwZi93QU5JLzhBRFNmL0FBMTcvd0FOZi84QURZUC9BQTVmL1RnT2YvMDREci8vckE3UC82Z08xLytzRHQvL29BN3IvNmdPNy8rc0R2UC9xQThQL0RRUEgvMDREMGdBVUE5VC8zZ1BWLytzRDEvL3JBOW4vNndQYS8rZ0QzUC9yQStQLzZBUHIvK2dEOC85T0EvVC8zZ1AzLytzRC9QL29BLzMvNndRQy8rc0VCUC9vQkFuL1RnUUsvOTRFQy85T0JBei8zZ1FRLytzRUV2L3JCQlAvNndRZC8rc0VILy9yQkNILzZ3UWwvK2dFSi8vb0JDbi82QVF1LytzRUwvOU9CREQvM2dReC8wNEVNdi9lQkRQL1RnUTAvOTRFTmY5T0JEYi8zZ1EzLzA0RU9QL2VCRG4vVGdRNi85NEVPLzlPQkR6LzNnUTkvMDRFUHYvZUJELy9UZ1JBLzk0RVFmOU9CRUwvM2dSRC8wNEVSUC9lQkVYL1RnUkcvOTRFU1AvckJFci82d1JNLytzRVR2L3JCRkQvNndSUy8rc0VWUC9yQkZiLzZ3UmMvK3NFWHYvckJHRC82d1JpLytzRVpQL3JCR2IvNndSby8rc0Vhdi9yQkd6LzZ3UnUvK3NFY1AvckJITC82d1IwLytvRWR2L3FCSGovNmdSNi8rb0VmUC9xQkg3LzZnU0EvK29FZ3Yvb0JJVC82QVNHLytnRWlBQVVCS3IvVGdTci85NEVyZi9yQkxILzZ3UzEvK29FdXYvckJMei82d1RRQUJRRTFQL29CTmIvNkFUYy84QUU0Ly9BQlB2L3dBQUNBS0FBQkFBRUFBQUFCZ0FHQUFFQUN3QU1BQUlBRXdBVEFBUUFKUUFxQUFVQUxBQXRBQXNBTHdBMkFBMEFPQUE0QUJVQU9nQS9BQllBUlFCR0FCd0FTUUJLQUI0QVRBQk1BQ0FBVHdCUEFDRUFVUUJVQUNJQVZnQldBQ1lBV0FCWUFDY0FXZ0JkQUNnQVh3QmZBQ3dBaWdDS0FDMEFsZ0NXQUM0QW5RQ2RBQzhBc1FDMUFEQUF0d0M1QURVQXV3QzdBRGdBdlFDK0FEa0F3QURCQURzQXd3REZBRDBBeHdET0FFQUEwZ0RTQUVnQTFBRGVBRWtBNEFEdkFGUUE4UUR4QUdRQTlnRDRBR1VBK3dEOEFHZ0EvZ0VBQUdvQkF3RUZBRzBCQ2dFS0FIQUJEUUVOQUhFQkdBRWFBSElCSWdFaUFIVUJMZ0V3QUhZQk13RTFBSGtCTndFM0FId0JPUUU1QUgwQk93RTdBSDRCUXdGRUFIOEJWQUZVQUlFQlZnRldBSUlCV0FGWUFJTUJYQUZlQUlRQmhBR0ZBSWNCaHdHSkFJa0I2QUhvQUl3QjZnSHJBSTBCN1FIdEFJOEI4QUh3QUpBQit3SDlBSkVDUUFKQUFKUUNRd0pEQUpVQ1ZRSlZBSllDVndKWUFKY0Npd0tNQUprQ2pnS09BSnNDa0FLbEFKd0NxZ0t4QUxJQ3N3SzJBTG9DdXdMQUFMNEN4UUxOQU1RQ3p3TFBBTTBDMFFMUkFNNEMwd0xUQU04QzFRTFZBTkFDMXdMZ0FORUM2UUxyQU5zQzdRTHRBTjRDN3dMdkFOOEM4UUx4QU9BQzh3THpBT0VDK0FMNEFPSUMrZ0w2QU9NQy9BTDhBT1FDL2dMK0FPVURBQU1BQU9ZREFnTU9BT2NERUFNUUFQUURFZ01TQVBVREZBTVVBUFlESHdNZkFQY0RJUU1oQVBnREl3TWpBUGtETVFNeEFQb0RNd00yQVBzRE9BTTRBUDhET2dNNkFRQURRQU5KQVFFRFZBTllBUXNEWGdOZ0FSQURaUU5sQVJNRGR3TjZBUlFEZmdPQUFSZ0RpUU9KQVJzRGx3T2NBUndEbndPdUFTSURzUU94QVRJRHRRTzFBVE1EdHdPM0FUUUR1d083QVRVRHZnTy9BVFlEd1FQQ0FUZ0R4QVBLQVRvRHpBUE9BVUVEMEFQVkFVUUQxd1BZQVVvRDJnUGRBVXdENHdQa0FWQUQ1Z1BtQVZJRDZBUG9BVk1ENmdQdEFWUUQ4QVAxQVZnRDl3UDNBVjREK3dQOEFWOEVBUVFCQVdFRUF3UU1BV0lFRHdRUUFXd0VFZ1FWQVc0RUhBUWRBWElFSVFRaEFYUUVJd1FwQVhVRUx3UlhBWHdFV1FSWkFhVUVXd1JvQWFZRWNBUndBYlFFZ1FTR0FiVUVpQVNJQWJzRWpBU05BYndFa0FTUUFiNEVrZ1NUQWI4RWxRU1ZBY0VFbHdTWEFjSUVxQVNzQWNNRXJnU3VBY2dFc0FTeEFja0Vzd1N6QWNzRXR3UzVBY3dFdXdTN0FjOEV2UVMvQWRBRXdRVEJBZE1Fd3dUREFkUUV4UVRMQWRVRXpRVE5BZHdFMEFUUUFkMEUwd1RYQWQ0RTJRVFpBZU1FMndUY0FlUUU0QVRnQWVZRTR3VGpBZWNFN2dUdUFlZ0Urd1Q3QWVrRkFnVUNBZW9GQmdVR0Flc0FBZ0NhQUFZQUJnQUFBQXNBQ3dBQkFCQUFFQUFDQUJJQUVnQURBQ1VBS1FBRUFDd0FOQUFKQURnQVBnQVNBRVVBUndBWkFFa0FTUUFjQUV3QVRBQWRBRkVBVkFBZUFGWUFWZ0FpQUZvQVdnQWpBRndBWGdBa0FJb0FpZ0FuQUpZQWxnQW9BTEVBdEFBcEFMMEF2UUF0QU1FQXdRQXVBTWNBeHdBdkFOUUExUUF3QU5jQTF3QXlBTm9BMmdBekFOd0EzZ0EwQU9BQTVnQTNBT3dBN0FBK0FPNEE3Z0EvQVBjQTl3QkFBUHdBL0FCQkFQNEEvd0JDQVFRQkJRQkVBUW9CQ2dCR0FRMEJEUUJIQVJnQkdnQklBUzRCTUFCTEFUTUJOUUJPQVRjQk53QlJBVGtCT1FCU0FUc0JPd0JUQVVNQlJBQlVBVlFCVkFCV0FWWUJWZ0JYQVZnQldBQllBVndCWGdCWkFZUUJpZ0JjQVk0Qmp3QmpBZWdCNkFCbEFlMEI3UUJtQWZBQjhRQm5BZnNCL1FCcEFnOENEd0JzQWg0Q0lBQnRBa0FDUUFCd0FrTUNRd0J4QWxVQ1ZRQnlBbGNDV0FCekFvc0NqQUIxQW80Q2pnQjNBcEFDdGdCNEFyc0N3QUNmQXNVQzFRQ2xBdGNDNEFDMkF1a0M2d0RBQXUwQzdRRERBdThDN3dERUF2RUM4UURGQXZNQzh3REdBdllDOWdESEF2Z0MrQURJQXZvQytnREpBdndDL0FES0F2NEMvZ0RMQXdBREFBRE1Bd0lERGdETkF4QURFQURhQXhJREVnRGJBeFFERkFEY0F4OERId0RkQXlFRElRRGVBeU1ESXdEZkF5VURKUURnQXljREp3RGhBeWtES1FEaUF5c0RLd0RqQXkwRExRRGtBeThETHdEbEF6RURNUURtQXpNRE93RG5BMEFEU1FEd0ExUURXQUQ2QTE0RFlBRC9BMlVEWlFFQ0EzWURlZ0VEQTM0RGdBRUlBNGtEaVFFTEE1Y0RuQUVNQTU4RHJnRVNBN0VEc1FFaUE3VUR0UUVqQTdjRHR3RWtBN3NEdXdFbEE3NER2d0VtQThFRHlnRW9BOHdEemdFeUE5QUQxUUUxQTljRDNRRTdBK01ENUFGQ0ErWUQ1Z0ZFQStnRDZBRkZBK29EN1FGR0EvQUQ5UUZLQS9jRDl3RlFBL3NEL0FGUkJBRUVEQUZUQkE4RUVBRmZCQklFRlFGaEJCd0VIUUZsQkNFRUlRRm5CQ01FS1FGb0JDOEVWd0Z2QkZrRVdRR1lCRnNFYUFHWkJIQUVjQUduQkhNRWN3R29CSFVFZFFHcEJJRUVoZ0dxQklnRWlBR3dCSXdFalFHeEJKQUVrQUd6QkpJRWt3RzBCSlVFbFFHMkJKY0Vsd0czQktnRXJBRzRCSzRFcmdHOUJMQUVzUUcrQkxNRXN3SEFCTGNFdVFIQkJMc0V1d0hFQkwwRXZ3SEZCTUVFd1FISUJNTUV3d0hKQk1VRXl3SEtCTTBFelFIUkJOQUUwQUhTQk5JRTF3SFRCTmtFM0FIWkJPQUU0QUhkQk9NRTR3SGVCT2tFNlFIZkJPNEU3Z0hnQlBrRStRSGhCUHNFK3dIaUJRSUZBZ0hqQlFZRkJnSGtBQUlCZEFBR0FBWUFEd0FMQUFzQUR3QVFBQkFBR2dBU0FCSUFHZ0FsQUNVQUFnQW1BQ1lBSkFBbkFDY0FFQUFvQUNnQUFRQXBBQ2tBQkFBdUFDNEFDQUF2QUM4QURRQXdBREFBRndBekFETUFBUUEwQURRQUpRQTRBRGdBRWdBNUFEa0FDQUE2QURvQUhBQTdBRHNBR0FBOEFEd0FFUUE5QUQwQURBQStBRDRBR1FCRkFFVUFBd0JHQUVZQURnQkhBRWNBRXdCSkFFa0FCUUJNQUV3QUNRQlJBRklBQ1FCVEFGTUFCZ0JVQUZRQURnQldBRllBR3dCYUFGb0FCd0JjQUZ3QUZRQmRBRjBBQndCZUFGNEFId0NLQUlvQURnQ1dBSllBQVFDeEFMRUFGZ0N5QUxJQUFnQ3pBTE1BQVFDMEFMUUFBZ0M5QUwwQUJ3REJBTUVBQ1FESEFNY0FEZ0RVQU5VQUlBRGFBTm9BRVFEZUFONEFJUURrQU9RQUlBRG1BT1lBSUFEc0FPd0FJZ0R1QU80QUZRRDNBUGNBRGdEOEFQd0FJd0QrQVA0QUl3RC9BUDhBRGdFRUFRVUFJd0VLQVFvQUl3RU5BUTBBQWdFWUFSZ0FCZ0VaQVJrQUhBRWFBUm9BQndFdUFTNEFEZ0V2QVM4QUZnRXdBVEFBSWdFekFUTUFFUUUwQVRRQUZRRTFBVFVBRFFFM0FUY0FEUUU1QVRrQURRRkRBVU1BRVFGRUFVUUFGUUZZQVZnQUFRRmNBVndBSWdGZEFWMEFFUUZlQVY0QUZRR0VBWVVBRHdHR0FZWUFHZ0dIQVlrQUR3R0tBWW9BR2dHT0FZOEFHZ0hvQWVnQUhRSHRBZTBBQ2dId0FmQUFIZ0h4QWZFQUZBSDdBZnNBQ3dIOEFmd0FDZ0g5QWYwQUN3SVBBZzhBRkFJZUFpQUFGQUpBQWtBQUNnSkRBa01BQ3dKVkFsVUFFQUpYQWxnQUFRS0xBb3dBQVFLT0FvNEFFZ0tRQXBZQUFnS1hBcGNBRUFLWUFwc0FCQUtoQXFVQUFRS21BcWtBQ0FLcUFxb0FEQUtyQXJFQUF3S3lBcklBRXdLekFyWUFCUUs3QXJzQUNRSzhBc0FBQmdMRkFzWUFCd0xIQXNjQUFnTElBc2dBQXdMSkFza0FBZ0xLQXNvQUF3TExBc3NBQWdMTUFzd0FBd0xOQXMwQUVBTE9BczRBRXdMUEFzOEFFQUxRQXRBQUV3TFJBdEVBRUFMU0F0SUFFd0xUQXRNQUVBTFVBdFFBRXdMVkF0VUFBUUxYQXRjQUJBTFlBdGdBQlFMWkF0a0FCQUxhQXRvQUJRTGJBdHNBQkFMY0F0d0FCUUxkQXQwQUJBTGVBdDRBQlFMZkF0OEFCQUxnQXVBQUJRTHFBdW9BQ1FMMkF2WUFDQUw0QXZnQURRTDZBdm9BRndMOEF2d0FGd0wrQXY0QUZ3TUFBd0FBRndNREF3TUFDUU1GQXdVQUNRTUhBd2dBQ1FNSkF3a0FBUU1LQXdvQUJnTUxBd3NBQVFNTUF3d0FCZ01OQXcwQUFRTU9BdzRBQmdNUUF4QUFHd01TQXhJQUd3TVVBeFFBR3dNZkF4OEFFZ01oQXlFQUVnTWpBeU1BRWdNbEF5VUFDQU1uQXljQUNBTXBBeWtBQ0FNckF5c0FDQU10QXkwQUNBTXZBeThBQ0FNeEF6RUFHQU16QXpNQURBTTBBelFBQndNMUF6VUFEQU0yQXpZQUdRTTNBemNBSHdNNEF6Z0FHUU01QXprQUh3TTZBem9BR1FNN0F6c0FId05BQTBFQUNnTkNBMElBSFFOREEwa0FDd05VQTFnQUNnTmVBMkFBQ3dObEEyVUFDZ04yQTNZQUZBTjNBM29BSGdOK0E0QUFDZ09KQTRrQUhRT1hBNWNBQWdPWUE1Z0FCQU9iQTVzQUFRT2NBNXdBREFPZkE1OEFBZ09nQTZBQUpBT2hBNkVBQkFPaUE2SUFHUU9sQTZVQURRT29BNmdBQVFPcEE2a0FKUU9xQTZvQUVnT3JBNnNBREFPc0E2d0FFUU91QTY0QURBT3hBN0VBQ1FPMUE3VUFCZ08zQTdjQUJ3TzdBN3NBQmdPK0E3NEFCQU8vQTc4QUZnUERBOE1BQ0FQRUE4VUFEUVBHQThZQUlRUEhBOGNBQWdQSUE4Z0FKQVBKQThrQUZnUEtBOG9BQkFQT0E4NEFBUVBRQTlBQUpRUFJBOUVBRUFQU0E5SUFFZ1BUQTlNQUVRUFVBOVFBQXdQVkE5VUFCUVBYQTljQUJnUFlBOWdBRGdQWkE5a0FFd1BhQTlvQUJ3UGJBOXNBRlFQY0E5d0FCUVBkQTkwQUlnUGpBK01BQndQa0ErUUFHQVBtQStZQUdBUG9BK2dBR0FQcUErb0FEQVByQStzQUJ3UHNBKzBBRHdQd0EvQUFEd1B5QS9JQUNRUHpBL01BQWdQMEEvUUFBd1AxQS9VQUJBUDNBL2NBQlFQN0Evc0FIQVA4QS93QUJ3UUJCQUVBRUFRQ0JBSUFFd1FEQkFNQURBUUVCQVFBQndRR0JBWUFFUVFIQkFjQUZRUUpCQWtBQWdRS0JBb0FBd1FMQkFzQUFnUU1CQXdBQXdRUEJBOEFCQVFRQkJBQUJRUVNCQk1BQlFRVUJCUUFFUVFWQkJVQUZRUWNCQndBQVFRZEJCMEFCZ1FoQkNFQUJnUWpCQ01BRGdRa0JDUUFJUVFsQkNVQUJ3UW1CQ1lBSVFRbkJDY0FCd1FvQkNnQUlRUXBCQ2tBQndRdkJDOEFBZ1F3QkRBQUF3UXhCREVBQWdReUJESUFBd1F6QkRNQUFnUTBCRFFBQXdRMUJEVUFBZ1EyQkRZQUF3UTNCRGNBQWdRNEJEZ0FBd1E1QkRrQUFnUTZCRG9BQXdRN0JEc0FBZ1E4QkR3QUF3UTlCRDBBQWdRK0JENEFBd1EvQkQ4QUFnUkFCRUFBQXdSQkJFRUFBZ1JDQkVJQUF3UkRCRU1BQWdSRUJFUUFBd1JGQkVVQUFnUkdCRVlBQXdSSEJFY0FCQVJJQkVnQUJRUkpCRWtBQkFSS0JFb0FCUVJMQkVzQUJBUk1CRXdBQlFSTkJFMEFCQVJPQkU0QUJRUlBCRThBQkFSUUJGQUFCUVJSQkZFQUJBUlNCRklBQlFSVEJGTUFCQVJVQkZRQUJRUlZCRlVBQkFSV0JGWUFCUVJiQkZzQUFRUmNCRndBQmdSZEJGMEFBUVJlQkY0QUJnUmZCRjhBQVFSZ0JHQUFCZ1JoQkdFQUFRUmlCR0lBQmdSakJHTUFBUVJrQkdRQUJnUmxCR1VBQVFSbUJHWUFCZ1JuQkdjQUFRUm9CR2dBQmdSd0JIQUFCZ1J6QkhNQUNBUjFCSFVBQ0FTQkJJRUFEQVNDQklJQUJ3U0RCSU1BREFTRUJJUUFCd1NGQklVQURBU0dCSVlBQndTSUJJZ0FFZ1NNQkl3QUZnU05CSTBBSWdTUUJKQUFDUVNTQkpJQUlBU1RCSk1BRmdTVkJKVUFEUVNYQkpjQURBU3BCS2tBQ1FTcUJLb0FBZ1NyQktzQUF3U3NCS3dBQkFTd0JMQUFBUVN4QkxFQUJnU3pCTE1BR3dTM0JMY0FKQVM0QkxnQURnUzVCTGtBQVFTN0JMc0FBUVMrQkw0QUNRUy9CTDhBRFFUQkJNRUFEUVREQk1NQUZ3VEdCTVlBQ1FUSUJNZ0FDUVRKQk1rQUFRVEtCTW9BSlFUTEJNc0FEZ1ROQk0wQUd3VFFCTkFBRWdUU0JOSUFDQVRUQk5NQUhBVFVCTlFBQndUVkJOVUFIQVRXQk5ZQUJ3VFhCTmNBR0FUWkJOa0FHUVRhQk5vQUh3VGJCTnNBQVFUY0JOd0FDd1RnQk9BQUNnVGpCT01BQ3dUcEJPa0FGQVR1Qk80QUhRVDVCUGtBRkFUN0JQc0FDd1VDQlFJQUNnVUdCUVlBSFFBQkFBWUZCZ0FQQUFBQUFBQUFBQUFBRHdBQUFBQUFBQUFBQUJnQUd3QVlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQ0FBQUFBQUFBQUFJQUFBQUFBQ01BQUFBQUFBQUFBQUFDQUFBQUFnQUFBQlFBRFFBTEFCb0FGZ0FRQUF3QUZ3QUFBQUFBQUFBQUFBQUFBQUFHQUFBQUFRQUJBQUVBQUFBQkFBQUFBQUFBQUFBQUFBQURBQU1BQndBREFBRUFBQUFSQUFBQUNBQUpBQUFBRXdBSkFCMEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBRUFBQUFBQUFBQUFnQUJBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFnQUVBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUpBQUFBQUFBQUFBTUFBQUFBQUFBQUFBQUFBQUFBQVFBQkFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBTkFBSUFIZ0FBQUEwQUFBQUFBQUFBRUFBQUFBQUFIZ0FmQUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdBQUFCTUFBQUFEQUFNQUlRQURBQU1BQXdBQUFBRUFBd0FpQUFNQUF3QUFBQUFBQXdBQUFBTUFBQUFBQUFFQUlRQURBQUFBQUFBQ0FBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBQWNBR2dBSkFBSUFBQUFDQUFFQUFnQUFBQUlBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUFBQUFBQUFBQkFBRXdBQUFBTUFBQUFBQUEwQUFBQUFBQU1BQUFBREFBQUFBQUFDQUFFQUVBQVRBQTBBQUFBZ0FDSUFBQUFBQUFBQUFBQUFBQUFBQUFBZUFDRUFBQUFEQUFBQUF3QUFBQU1BQUFBQUFBQUFBQUFEQUJBQUV3QUFBQUVBQVFBQUFBQUFBQUFBQUI0QUFBQUFBQUFBQWdBQkFBQUFBQUFBQUI0QUlRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzQUd3QUFBQThBRHdBWUFBOEFEd0FQQUJnQUFBQUFBQUFBR0FBWUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTQUJrQUpBQUFBQTRBRlFBY0FBQUFCUUFBQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQUFBS0FBVUFDZ0FBQUFBQUFBQUFBQUFBQUFBVkFBVUFBQUFBQUJVQUFBQUFBQUFBR1FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQmtBQUFBQUFCVUFCUUFTQUJrQUZRQUFBQUFBQUFBQUFBQUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQUFBS0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUFBQUFDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR3dBQUFBQUFBQUFBQUFBQUJBQUVBQVFBQkFBRUFBUUFCQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnQUNBQUlBQWdBTEFBc0FDd0FMQUF3QUJnQUdBQVlBQmdBR0FBWUFCZ0FCQUFFQUFRQUJBQUVBQUFBQUFBQUFBQUFEQUFjQUJ3QUhBQWNBQndBSUFBZ0FDQUFJQUFrQUNRQUVBQVlBQkFBR0FBUUFCZ0FDQUFFQUFnQUJBQUlBQVFBQ0FBRUFBQUFCQUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFFQUFnQUJBQUlBQVFBQ0FBRUFBZ0FCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQUFBQUF3QUFBQU1BQXdBQ0FBY0FBZ0FIQUFJQUJ3QUFBQUFBQUFBQUFBQUFBQUFVQUJFQUZBQVJBQlFBRVFBVUFCRUFGQUFSQUEwQUFBQU5BQUFBRFFBQUFBc0FDQUFMQUFnQUN3QUlBQXNBQ0FBTEFBZ0FDd0FJQUJZQUFBQU1BQWtBREFBWEFCMEFGd0FkQUJjQUhRQUFBQUFBQWdBQUFBQUFBQUFBQUFvQUNnQUtBQW9BQ2dBS0FBb0FCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUZBQVVBRGdBT0FBNEFEZ0FTQUFvQUNnQUtBQVVBQlFBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFBQUFBQUFBQWNBQndBSEFBY0FBQUFGUUFBQUE0QURnQU9BQTRBRGdBT0FDUUFFZ0FTQUFBQUFBQUFBQVFBQUFBQUFBQUFBZ0FNQUFBQUFBQUVBQUFBQUFBWEFBQUFBQUFBQUFBQUFBQUNBQUFBQUFBTUFCQUFBQUFNQUFFQUFBQURBQUFBQ0FBQUFBY0FBQUFKQUFBQUFBQUlBQWNBQ0FBQUFBQUFBQUFBQUFBQUFBQWpBQUFBQUFBZkFBUUFBQUFBQUFBQUFBQUFBQUFBQWdBQUFBQUFBZ0FOQUJBQUJnQUJBQU1BQndBREFBRUFDUUFUQUFFQUF3QVJBQUFBQUFBQUFBTUFDUUFXQUFBQUZnQUFBQllBQUFBTUFBa0FEd0FQQUFBQUFBQVBBQUFBQXdBRUFBWUFBQUFBQUFFQUF3QUFBQUFBR2dBSkFBRUFBZ0FBQUFBQUFnQUJBQXdBQ1FBQUFCQUFFd0FBQUFRQUJnQUVBQVlBQUFBQUFBQUFBUUFBQUFFQUFRQVFBQk1BQUFBQUFBQUFBd0FBQUFNQUFnQUhBQUlBQVFBQ0FBY0FBQUFBQUI4QUNRQWZBQWtBSHdBSkFDQUFJZ0FBQUFNQUFRQUVBQVlBQkFBR0FBUUFCZ0FFQUFZQUJBQUdBQVFBQmdBRUFBWUFCQUFHQUFRQUJnQUVBQVlBQkFBR0FBUUFCZ0FBQUFFQUFBQUJBQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUVBQUFBQkFBQUFBQUFBQUFBQUFnQUhBQUlBQndBQ0FBY0FBZ0FIQUFJQUJ3QUNBQWNBQWdBSEFBSUFBUUFDQUFFQUFnQUJBQUlBQndBQ0FBRUFDd0FJQUFzQUNBQUFBQWdBQUFBSUFBQUFDQUFBQUFnQUFBQUlBQXdBQ1FBTUFBa0FEQUFKQUFBQURRQUFBQ0FBSWdBQUFBTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQUFBQUFBQUFBQUFBQUFBR3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd0FFQUFZQUFBQUJBQUFBQUFBQ0FBY0FBQUFBQUFBQUNBQUFBQUFBQUFBQUFBRUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFBQURBQUlBQUFBQUFBQUFBQUFVQUJFQURRQUFBQXNBR2dBSkFCb0FDUUFXQUFBQUZ3QWRBQUFBQ2dBQUFBQUFBQUFGQUJJQUFBQUtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBU0FCa0FBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLQUFBQUFBQUFBQUFBQUFBQUFBVUFBQUFBQUFVQUZRQVpBQUFBQUFBRkFCSUFBUUFBQUFvQVpBQWtBQVJFUmt4VUFQNWplWEpzQVA1bmNtVnJBUDVzWVhSdUFRSUFId0VXQVI0QkpnRXVBVFlCUGdFK0FVWUJUZ0ZXQVY0QlpnRnVBWFlCZmdHR0FZNEJsZ0dlQWFZQnJnRzJBYjRCeGdIT0FkWUIzZ0hXQWQ0QjVnSHVBQnRqTW5OakFiWmpZMjF3QWtCa2JHbG5BYnhrYm05dEFjSm1jbUZqQWxCc2FXZGhBY2hzYVdkaEFscHNhV2RoQWtoc2JuVnRBYzVzYjJOc0FkUnNiMk5zQWRwc2IyTnNBZUJzYjJOc0FlWnVkVzF5QWV4dmJuVnRBZkp3Ym5WdEFmaHpiV053QWY1emN6QXhBZ1J6Y3pBeUFncHpjekF6QWhCemN6QTBBaFp6Y3pBMUFoeHpjekEyQWlKemN6QTNBaWh6ZFdKekFpNXpkWEJ6QWpSMGJuVnRBam9Cd2dBQUE4WUFCMEZhUlNBRDlrTlNWQ0FEOWtaU1FTQUVKazFQVENBRVdFNUJWaUFFaWxKUFRTQUV2RlJTU3lBRDlnQUJBQUFBQVFjT0FBRUFBQUFCQlNvQUJnQUFBQUVDU2dBQkFBQUFBUUlNQUFRQUFBQUJCS0FBQVFBQUFBRUJsZ0FCQUFBQUFRSUdBQUVBQUFBQkFZd0FCQUFBQUFFQnFBQUVBQUFBQVFHb0FBUUFBQUFCQWJ3QUFRQUFBQUVCY2dBQkFBQUFBUUZ3QUFFQUFBQUJBVzRBQVFBQUFBRUJpQUFCQUFBQUFRR0tBQUVBQUFBQkFrSUFBUUFBQUFFQmtBQUJBQUFBQVFKUUFBRUFBQUFCQW5ZQUFRQUFBQUVDbkFBQkFBQUFBUUxDQUFFQUFBQUJBU3dBQmdBQUFBRUJrQUFCQUFBQUFRRzBBQUVBQUFBQkFjWUFBUUFBQUFFQjJBQUJBQUFBQVFFS0FBQUFBUUFBQUFBQUFRQUxBQUFBQVFBYkFBQUFBUUFLQUFBQUFRQVdBQUFBQVFBSUFBQUFBUUFGQUFBQUFRQUhBQUFBQVFBR0FBQUFBUUFjQUFBQUFRQVRBQUFBQVFBVUFBQUFBUUFCQUFBQUFRQU1BQUFBQVFBTkFBQUFBUUFPQUFBQUFRQVBBQUFBQVFBUUFBQUFBUUFSQUFBQUFRQVNBQUFBQVFBZUFBQUFBUUFkQUFBQUFRQVZBQUFBQWdBQ0FBUUFBQUFDQUFrQUNnQUFBQU1BRndBWUFCb0FBQUFFQUFrQUNnQUpBQW9BQVAvL0FCUUFBQUFCQUFJQUF3QUVBQWdBRFFBT0FBOEFFQUFSQUJJQUV3QVVBQlVBRmdBWEFCZ0FHUUFhQUFFSGFBQUNBQUVIUkFBQkFBRUhSQUh1QUFFSFJBRi9BQUVIUkFJRkFBRUhSQUdCQUFFSFpBR0pBQUVPT2dBQkIwWUFBUTR5QUFFSFJBQUNCMWdBQWdJOEFqMEFBZ2RPQUFJQ1BnSS9BQUVPTGdBREJ5NEhNZ2MyQUFJSFFBQURBbjRDZndKL0FBSUhWZ0FHQW5FQ2J3SnlBbk1DY0FVZUFBSUhOQUFHQlJnRkdRVWFCUnNGSEFVZEFBTUFBUWRDQUFFRy9nQUFBQUVBQUFBWkFBSUhJQWNJQjRJSFJnQUhBQUFIREFjTUJ3d0hEQWNNQnd3QUFnYlNBQW9CMXdIV0FkVUNMd0l3QWpFQ01nSXpBalFDTlFBQ0JyZ0FDZ0pPQUhvQWN3QjBBazhDVUFKUkFsSUNVd0pVQUFJR25nQUtBWlVBZWdCekFIUUJsZ0dYQVpnQm1RR2FBWnNBQWdidUFBd0NWUUpYQWxZQ1dBSlpBbmNDZUFKNUFub0Nld0o4QW4wQUFnY2tBQlFDYWdKdUFtZ0NaUUpuQW1ZQ2F3SnBBbTBDYkFKZkFsb0NXd0pjQWwwQ1hnQWFBQndDWXdKMUFBSUd2Z0FVQktVQ2dRU2VCSjhFb0FTaEJLSUNkZ1NqQktRQ1hBSmVBbDBDV3dKZkFuVUFHZ0pqQUJ3Q1dnQUNCd3dBRkFKckFtMENiZ0pvQW1VQ1p3Sm1BbWtDYkFKcUFCc0FGUUFXQUJjQUdBQVpBQm9BSEFBZEFCUUFBZ2EyQUJRRW9nU2pBb0VFbmdTZkJLQUVvUUoyQktRQUZ3QVpBQmdBRmdBYkFCUUFHZ0FkQUJ3QUZRU2xBQUQvL3dBVkFBQUFBUUFDQUFNQUJBQUhBQWdBRFFBT0FBOEFFQUFSQUJJQUV3QVVBQlVBRmdBWEFCZ0FHUUFhQUFELy93QVZBQUFBQVFBQ0FBTUFCQUFGQUFnQURRQU9BQThBRUFBUkFCSUFFd0FVQUJVQUZnQVhBQmdBR1FBYUFBRC8vd0FXQUFBQUFRQUNBQU1BQkFBR0FBZ0FDUUFOQUE0QUR3QVFBQkVBRWdBVEFCUUFGUUFXQUJjQUdBQVpBQm9BQVAvL0FCWUFBQUFCQUFJQUF3QUVBQVlBQ0FBS0FBMEFEZ0FQQUJBQUVRQVNBQk1BRkFBVkFCWUFGd0FZQUJrQUdnQUEvLzhBRmdBQUFBRUFBZ0FEQUFRQUJnQUlBQXNBRFFBT0FBOEFFQUFSQUJJQUV3QVVBQlVBRmdBWEFCZ0FHUUFhQUFELy93QVdBQUFBQVFBQ0FBTUFCQUFHQUFnQURBQU5BQTRBRHdBUUFCRUFFZ0FUQUJRQUZRQVdBQmNBR0FBWkFCb0FBUStTQURZRzhnVzBCYmdGOEFjQUJmWUZ2QWNPQmpJR09nWDhCb1lIVkFYQUJuSUdRZ1lDQjJRR0NBWktCcElHRGdjY0JjUUZ5QVlVQnlvRnpBWFFCZFFHVWdaYUJob0duZ2M0QmRnR2ZBWmlCaUFIUmdZbUJtb0dxZ1lzQmR3RjRBWGtCZWdHdGdiQ0JzNEcyZ2JtQmV3QUFnY0NBT3NDZ2dKREFrSUNRUUpBQWpnQjlnSDFBZlFCOHdIeUFmRUI4QUh2QWU0QjdRSHNBZXNCNmdIcEFlZ0I1d0htQWVVQjVBSGpBZUlDZEFLRUEwRUNoZ0tGQTBBQjh3S0RBb2dDWWdUakJPUUIrZ0g3Qk9VRTVnVG5BZndFNkFIOUFmNEIvd1R0QWdBQ0FBVHVCTzhDQVFJQ0FnTUNDZ1Q4QlAwQ0N3SU1BZzBDRGdJUEFoQUZBQVVCQlFNRkJnVVBBaElDRXdJVUFoVUNGZ0lYQWhnQ0dRSWFBaHNDQkFJRkFnWUNCd0lJQWdrQ1N3SWRBaDRDSHdJZ0JRa0NJUUlqQWlRQ0pRSW5BaWtDaHdOQ0EwTURSQU5GQTBZRFJ3TklBMGtEU2dOTEEwd0RUUU5PQTA4RFVBTlJBMUlEVXdOVUExVURWZ05YQTFnRFdRTmFBMXNEWEFOZEE1TURYZ05mQTJBRFlRTmlBMk1EWkFObEEyWURad05vQTJrRGFnTnJBMndEYlFOdUEyOERjQU54QTNJRGN3VVFBM1VEZGdOM0EzZ0RlUU42QTNzRGZBTjlBMzREZndPQUE0RURnZ09EQTRRRGhRT0dCUk1EaHdPSUE0b0RpUU9MQTR3RGpRT09BNDhEa0FPUkE1SURsQU9WQTVZRkVRVVNCTndFM1FUZUJOOEU2UVRzQk9vRTZ3VHdCUEVFOGdUZ0JPRUU0Z1Q3QlA0RS93VUNCUVFGQlFJUkJRY0U4d1QwQlBVRTlnVDNCUGdFK1FUNkJSUUZGUVVXQlJjRkNBVUtCUXNDS0FVTkFpb0ZEZ1VNQWlZQ0hBSWlCUndGSFFBQ0J3QUErZ0gzQW9JQjRRSGdBZDhCM2dIZEFkd0Iyd0hhQWRrQjJBSkRBa0lDUVFKQUFqZ0I5Z0gxQWZRQjh3SHlBZkVCOEFIdkFlNEI3UUhzQWVzQjZnSHBBZWdCNXdIbUFlVUI1QUhqQWVJQitBSDVBb1FDaGdLRkFvY0Nnd0tJQW1JQitnSDdBZndCL1FIK0FmOENBQUlCQWdJQ0F3SUVBZ1VDQmdJSEFnZ0NDUUlLQWdzQ0RBSU5BZzRDRUFJUkJROENFZ0lUQWhRQ0ZRSVdBaGNDR0FJWkFob0NHd0pMQWgwQ0hnSWZBaUFGQ1FJaEFpTUNKQUlsQWlZQ0p3SW9BaWtDS3dJc0FpNENMUU5BQTBFRFFnTkRBMFFEUlFOR0EwY0RTQU5KQTBvRFN3Tk1BMDBEVGdOUEExQURVUU5TQTFNRFZBTlZBMVlEVndOWUExa0RXZ05iQTF3RFhRTmVBMThEWUFOaEEySURZd05rQTJVRFpnTm5BMmdEYVFOcUEyc0RiQU50QTI0RGJ3TndBM0VEY2dOekEzUUZFQU4xQTNZRGR3TjRBM2tEZWdON0Ezd0RmUU4rQTM4RGdBT0JBNElEZ3dPRUE0VURoZ1VUQTRjRGlBT0tBNGtEaXdPTUE0MERqZ09QQTVBRGtRT1NBNU1EbEFPVkE1WUZFUVVTQk53RTNRVGVCTjhFNEFUaEJPSUU0d1RrQk9VRTVnVG5CT2dFNlFUcUJPc0U3QVR0Qk80RTd3VHdCUEVFOGdUekJQUUU5UVQyQlBjRStBSVBCUGtFK2dUN0JQd0UvUVQrQlA4RkFBVUJCUUlGQXdVRUJRVUZCZ1VIQlJRRkZRVVdCUmNGQ0FVS0JRc0ZEUUlxQlE0RkRBSWNBaUlGSEFVZEFBRUFBUUY3QUFFQUFRQkxBQUVBQVFDN0FBRUFBUUEyQUFFQUFRQVRBQUVBQWdNWkF4b0FBZ2JrQnRnQUFnYm1CdGdBQVFidUFBRUc4QUFCQnZJQUFnQUJBQlFBSFFBQUFBRUFBZ0F2QUU4QUFRQURBRWtBU3dKNkFBSUFBQUFCQnQ0QUFRQUdBc3NDekFMZEF0NERZQU5wQUFFQUJnQk5BRTRDOGdQZkErRUVXZ0FDQUFNQmxBR1VBQUFCMVFIWEFBRUNMd0kxQUFRQUFnQUNBS2dBckFBQkFTUUJKd0FCQUFFQURBQW5BQ2dBS3dBekFEVUFSZ0JIQUVnQVN3QlRBRlFBVlFBQ0FBSUFGQUFkQUFBQ1pRSnVBQW9BQWdBR0FFMEFUUUFHQUU0QVRnQUVBdklDOGdBRkE5OEQzd0FEQStFRDRRQUNCRm9FV2dBQkFBSUFCQUFVQUIwQUFBSjJBbllBQ2dLQkFvRUFDd1NlQktVQURBQUNBQVlBR2dBYUFBQUFIQUFjQUFFQ1dnSmZBQUlDWXdKakFBZ0NaUUp1QUFrQ2RRSjFBQk1BQVFBVUFCb0FIQUphQWxzQ1hBSmRBbDRDWHdKakFuVUNkZ0tCQko0RW53U2dCS0VFb2dTakJLUUVwUUFCQmQ0QUFRWGdBQUVGNGdBQkJlUUFBUVhtQUFFRjZBQUJCZW9BQVFYc0FBRUY3Z0FCQmZBQUFRWHlBQUVGOUFBQkJmWUFBUVg0QUFFRitnQUNCZndHQWdBQ0JnSUdDQUFDQmdnR0RnQUNCZzRHRkFBQ0JoUUdHZ0FDQmhvR0lBQUNCaUFHSmdBQ0JpWUdMQUFDQml3R01nQUNCaklHT0FBQ0JqZ0dQZ0FEQmo0R1JBWktBQU1HU0FaT0JsUUFBd1pTQmxnR1hnQURCbHdHWWdab0FBTUdaZ1pzQm5JQUF3WndCbllHZkFBREJub0dnQWFHQUFNR2hBYUtCcEFBQkFhT0JwUUdtZ2FnQUFRR25BYWlCcWdHcmdBRkJxb0dzQWEyQnJ3R3dnQUZCcndHd2diSUJzNEcxQUFGQnM0RzFBYmFCdUFHNWdBRkJ1QUc1Z2JzQnZJRytBQUZCdklHK0FiK0J3UUhDZ0FGQndRSENnY1FCeFlISEFBRkJ4WUhIQWNpQnlnSExnQUZCeWdITGdjMEJ6b0hRQUFGQnpvSFFBZEdCMHdIVWdBR0Iwd0hVZ2RZQjE0SFpBZHFBQVlIWWdkb0IyNEhkQWQ2QjRBQUJnZDRCMzRIaEFlS0I1QUhsZ0FHQjQ0SGxBZWFCNkFIcGdlc0FBWUhwQWVxQjdBSHRnZThCOElBQmdlNkI4QUh4Z2ZNQjlJSDJBQUdCOUFIMWdmY0IrSUg2QWZ1QUFjSUxnZm1CK3dIOGdmNEIvNElCQUFIQ0NZSCtnZ0FDQVlJREFnU0NCZ0FBUURyQUFvQVJRQkdBRWNBU0FCSkFFb0FTd0JNQUUwQVRnQlBBRkFBVVFCU0FGTUFWQUJWQUZZQVZ3QllBRmtBV2dCYkFGd0FYUUJlQUlVQWhnQ0hBSWtBaWdDTEFJMEFrQUNTQUpRQXV3QzhBTDBBdmdDL0FNQUF3UURDQU1NQXhBREZBTVlBeHdESUFNa0F5Z0RMQU13QXpRRE9BT29BNndEc0FPMEE3Z0R2QVBBQThRRHlBUE1BOUFEMUFQWUE5d0Q0QVBrQStnRDdBUHdBL1FEK0FQOEJBQUVCQVFJQkF3RUVBUVVCQmdFSEFUQUJOQUUyQVRnQk9nRThBVUlCUkFGR0FVb0JUUUZhQW8wQ2p3S3JBcXdDclFLdUFxOENzQUt4QXJJQ3N3SzBBclVDdGdLM0FyZ0N1UUs2QXJzQ3ZBSzlBcjRDdndMQUFzRUN3Z0xEQXNRQ3hRTEdBc2dDeWdMTUFzNEMwQUxTQXRRQzFnTFlBdG9DM0FMZUF1QUM0Z0xrQXVZQzZBTHFBdXdDN2dMd0F2SUM5UUwzQXZrQyt3TDlBdjhEQVFNREF3VURCd01LQXd3RERnTVFBeElERkFNV0F4Z0RHZ01jQXg0RElBTWlBeVFESmdNb0F5b0RMQU11QXpBRE1nTTBBemNET1FNN0F6MERQd092QTdBRHNRT3lBN1FEdFFPMkE3Y0R1QU81QTdvRHV3TzhBNzBEMUFQVkE5WUQxd1BZQTlrRDJnUGJBOXdEM1FQZUE5OEQ0QVBoQStJRDR3UGxBK2NENlFQckJBQUVBZ1FFQkJJRUdRUWZCQ1VFandTUUJKUUVtQVVaQlJzQUFRRDZBQWdBQ2dBVUFCVUFGZ0FYQUJnQUdRQWFBQnNBSEFBZEFDVUFKZ0FuQUNnQUtRQXFBQ3NBTEFBdEFDNEFMd0F3QURFQU1nQXpBRFFBTlFBMkFEY0FPQUE1QURvQU93QThBRDBBUGdCbEFHY0FnUUNEQUlRQWpBQ1BBSkVBa3dDeEFMSUFzd0MwQUxVQXRnQzNBTGdBdVFDNkFOSUEwd0RVQU5VQTFnRFhBTmdBMlFEYUFOc0EzQURkQU40QTN3RGdBT0VBNGdEakFPUUE1UURtQU9jQTZBRHBBUzhCTXdFMUFUY0JPUUU3QVVFQlF3RkZBVWtCU3dGTUFWZ0JXUUduQWEwQnNnRzFBb3NDakFLT0FwQUNrUUtTQXBNQ2xBS1ZBcFlDbHdLWUFwa0NtZ0tiQXB3Q25RS2VBcDhDb0FLaEFxSUNvd0trQXFVQ3BnS25BcWdDcVFLcUFzY0N5UUxMQXMwQ3p3TFJBdE1DMVFMWEF0a0Myd0xkQXQ4QzRRTGpBdVVDNXdMcEF1c0M3UUx2QXZFQzh3TDBBdllDK0FMNkF2d0MvZ01BQXdJREJBTUdBd2tEQ3dNTkF3OERFUU1UQXhVREZ3TVpBeHNESFFNZkF5RURJd01sQXljREtRTXJBeTBETHdNeEF6TUROUU0yQXpnRE9nTThBejREbHdPWUE1a0RtZ09iQTV3RG5RT2ZBNkFEb1FPaUE2TURwQU9sQTZZRHB3T29BNmtEcWdPckE2d0RyUU91QTc0RHZ3UEFBOEVEd2dQREE4UUR4UVBHQThjRHlBUEpBOG9EeXdQTUE4MER6Z1BQQTlBRDBRUFNBOU1ENUFQbUErZ0Q2Z1AvQkFFRUF3UVlCQjRFSkFTT0JKTUVsd1VZQlJvQnpBQUNBRTBCelFBQ0FGQUJ6Z0FEQUVvQVRRSFBBQU1BU2dCUUFBRUFBUUJLQWNzQUFnQktBZEVBQWdCWUFkQUFBZ0JZQUFFQUF3QktBRmNBbFFBQUFBRUFBUUFCQUFFQUFBQURCTGNBQWdDdEFzMEFBZ0NwQkwwQUFnQ3RCTW9BQWdDcEJMZ0FBZ0N0QXM0QUFnQ3BCS2NBQWdDcEJMNEFBZ0N0QkZvQUFnQ3RCTXNBQWdDcEF6d0FBZ0NwQXo0QUFnQ3BBejBBQWdDcEF6OEFBZ0NwQkxZQUFnQ3BCTHNBQWdIS0JMa0FBZ0N0QktZQUFnQ3BBdWNBQWdIS0EvRUFBZ0NwQk1VQUFnQ3RBeDhBQWdIS0JOQUFBZ0N0Qk5VQUFnQ3RCTk1BQWdDcUF6WUFBZ0NwQk5rQUFnQ3RCTHdBQWdIS0JMb0FBZ0N0QS9JQUFnQ3BCTVlBQWdDdEF5QUFBZ0hLQk5FQUFnQ3RCTllBQWdDdEJOUUFBZ0NxQXpjQUFnQ3BCTm9BQWdDdEJMOEFBZ0NwQXZnQUFnSEtCTUVBQWdDdEF2b0FBZ0NwQXZ3QUFnSEtCTU1BQWdDdEF4VUFBZ0NwQXhzQUFnSEtCTTRBQWdDdEErWUFBZ0NwQk5jQUFnQ3RBK1FBQWdDb0JNQUFBZ0NwQXZrQUFnSEtCTUlBQWdDdEF2c0FBZ0NwQXYwQUFnSEtCTVFBQWdDdEF4WUFBZ0NwQXh3QUFnSEtCTThBQWdDdEErY0FBZ0NwQk5nQUFnQ3RBK1VBQWdDb0F3OEFBZ0NwQXhFQUFnSEtCTXdBQWdDdEJMSUFBZ0NzQXhBQUFnQ3BBeElBQWdIS0JNMEFBZ0N0QkxNQUFnQ3NBd0lBQWdDcEF3UUFBZ0hLQk1jQUFnQ3RCS2dBQWdDb0FxQUFBZ0NxQXFvQUFnQ3BCSUVBQWdDdEErb0FBZ0NvQklNQUFnQ3JCSVVBQWdDcUF3TUFBZ0NwQXdVQUFnSEtCTWdBQWdDdEJLa0FBZ0NvQXJzQUFnQ3FBc1VBQWdDcEJJSUFBZ0N0QStzQUFnQ29CSVFBQWdDckJJWUFBZ0NxQXJnQUFnQ3BBcmNBQWdDb0JGZ0FBZ0NyQXV3QUFnQ3FCSzhBQWdDc0JHa0FBZ0NwQkhFQUFnQ3RCR3NBQWdDb0JHMEFBZ0NyQkc4QUFnQ3FCR29BQWdDcEJISUFBZ0N0Qkd3QUFnQ29CRzRBQWdDckJIQUFBZ0NxQkhjQUFnQ3BCSDhBQWdDdEJIa0FBZ0NvQkhzQUFnQ3JCSDBBQWdDcUJIZ0FBZ0NwQklBQUFnQ3RCSG9BQWdDb0JId0FBZ0NyQkg0QUFnQ3FBcEVBQWdDcEJDOEFBZ0N0QXBBQUFnQ29CREVBQWdDckFwTUFBZ0NxQktvQUFnQ3NBcGtBQWdDcEJFY0FBZ0N0QXBnQUFnQ29CRWtBQWdDckJFc0FBZ0NxQkt3QUFnQ3NBcDBBQWdDcEJGa0FBZ0N0QXB3QUFnQ29CRmNBQWdDckF1c0FBZ0NxQks0QUFnQ3NBcXdBQWdDcEJEQUFBZ0N0QXFzQUFnQ29CRElBQWdDckFxNEFBZ0NxQktzQUFnQ3NBclFBQWdDcEJFZ0FBZ0N0QXJNQUFnQ29CRW9BQWdDckJFd0FBZ0NxQkswQUFnQ3NBcjBBQWdDcEJGd0FBZ0N0QXJ3QUFnQ29CRjRBQWdDckFyOEFBZ0NxQkxFQUFnQ3NBc0lBQWdDcEJIUUFBZ0N0QXNFQUFnQ29CSFlBQWdDckF5WUFBZ0NxQkxVQUFnQ3NBcUlBQWdDcEJGc0FBZ0N0QXFFQUFnQ29CRjBBQWdDckFxUUFBZ0NxQkxBQUFnQ3NBcWNBQWdDcEJITUFBZ0N0QXFZQUFnQ29CSFVBQWdDckF5VUFBZ0NxQkxRQUFnQ3NCTWtBQXdDcUFLa0UwZ0FEQUtvQXFRQUNBQkVBSlFBcEFBQUFLd0F0QUFVQUx3QTBBQWdBTmdBN0FBNEFQUUErQUJRQVJRQkpBQllBU3dCTkFCc0FUd0JVQUI0QVZnQmJBQ1FBWFFCZUFDb0FnUUNCQUN3QWd3Q0RBQzBBaGdDR0FDNEFpUUNKQUM4QWpRQ05BREFBbUFDYkFERUEwQURRQURVQUFBPT1cIixcclxuICBcIlJvYm90by1NZWRpdW1JdGFsaWMudHRmXCI6IFwiQUFFQUFBQVJBUUFBQkFBUVIwUkZScVdMb2lBQUFkV0FBQUFDV0VkUVQxUGsxemNLQUFIWDJBQUFaaXhIVTFWQ2hSWU85QUFDUGdRQUFCWDJUMU12TXBmbnNVd0FBQUdZQUFBQVlHTnRZWERPeUZvNkFBQVdkQUFBQm9KamRuUWdPL2dtZlFBQUwxQUFBQUQrWm5CbmJhZ0ZoRElBQUJ6NEFBQVBobWRoYzNBQUNBQVpBQUhWZEFBQUFBeG5iSGxtemdKTkJBQUFPcEFBQVplYWFHVmhaQWJkSFNrQUFBRWNBQUFBTm1ob1pXRU0xeEt3QUFBQlZBQUFBQ1JvYlhSNGVzbWF4UUFBQWZnQUFCUjhiRzlqWWNxdUsrY0FBREJRQUFBS1FHMWhlSEFJenhER0FBQUJlQUFBQUNCdVlXMWxTTkY5UlFBQjBpd0FBQU1tY0c5emRQOWhBR1FBQWRWVUFBQUFJSEJ5WlhCNVdNN1RBQUFzZ0FBQUFzNEFBUUFBQUFNQlNKWncwMUZmRHp6MUFCa0lBQUFBQUFERThCRXVBQUFBQU44R3YyMzZRLzNWQ1hJSWN3QUNBQWtBQWdBQUFBQUFBQUFCQUFBSGJQNE1BQUFKSnZwRC9sOEpjZ2dBQWJNQUFBQUFBQUFBQUFBQUFBQUZId0FCQUFBRkh3Q3BBQlVBZGdBSEFBSUFFQUF2QUpvQUFBTG1EM1VBQXdBQkFBUUVpUUgwQUFVQUFBV2FCVE1BQUFFZkJab0ZNd0FBQTlFQVpnSUFBQUFDQUFBQUFBQUFBQUFBNEFBQy8xQUFJRnNBQUFBZ0FBQUFBRWRQVDBjQUFRQUEvLzBHQVA0QUFHWUhtZ0lBSUFBQm53QUFBQUFFT2dXd0FBQUFJQUFEQTVZQVpBQUFBQUFBQUFBQUFmZ0FBQUg0QUFBQ0RnQXpBbm9BblFTdUFESUVhUUJCQmJZQXRRVDZBQ2tCVEFDUkFyQUFhQUszLzVRRGNRQm9CRThBUEFHOC80OENvd0JBQWlnQUxnTUgvMzRFYVFCZkJHa0E4UVJwQUEwRWFRQW1CR2tBRFFScEFGZ0VhUUJkQkdrQWhnUnBBRGNFYVFDTUFoWUFLQUhtLzU4RDh3QXpCRjBBWUFRSUFDMER4Z0NUQnZZQUxnVWwvNk1FNWdBbUJSRUFYd1VSQUNZRVl3QW1CRVlBSmdWSkFHWUZnUUFtQWpJQU53UlBBQVFFNXdBbUJERUFKZ2JKQUNZRmdRQW1CVmtBWWdUMEFDWUZXUUJlQk9JQUpnUzBBQ1lFdWdDZEJSUUFXQVVEQUpvRzFRQzFCT2Ivd0FTOUFLRUVydi9sQWh2LzhBTThBS3NDRy85NkExUUFSQU41LzNrQ2ZBRFBCQzhBSEFSZEFCQUVEUUEzQkY4QU9BUW9BRG9DdmdCZUJHYi8rUVJRQUEwQitnQWdBZkwvQWdRTUFCRUIrZ0FnQnNNQUR3UlNBQTBFWndBNEJGMy95QVJrQURjQ3ZnQVJBLzhBR3dLV0FEOEVVUUJLQTlvQVpBWENBSGtENlArNkE4My92QVBvLytZQ2xnQXRBZTBBSVFLVy81Z0ZKQUJjQWcvLzVnUmZBRTBFa2YvM0JYTUFCZ1FmQUM0QjZmL3VCTlAvNEFOM0FOY0dHUUJjQTNVQXZ3UFBBRVlFU1FDQUJob0FYQU84QVFRQytBRGxCQ2tBR1FMb0FGY0M2QUJvQW9FQXh3U2QvOTREekFCK0FqTUFud0lELzgwQzZBRGtBNHNBdmdQT0FBUUZxQURCQmYwQXRRWTFBSllEeC8vVUIwWC9qUVFoQUI4RlZ3QVdCS29BSndURkFCMEdqZ0FPQklFQVJnUnVBRDRFWXdBcUJHNy96UVRHQURjRmhRQXNBZ2NBSXdSM0FDRUVRd0FmQWtBQUlBVnNBQ01FWXdBUkIzVUFVQWNIQUQ4QitBQWNCV0lBU3dLNi8wUUZaZ0JjQkhvQU5BVjNBRmdFd0FCS0FoWC9CQVFaQURRRHdBRCtBNDRCQ1FQR0FRUURaQUQ5QWZvQkF3S1ZBUG9DT3Yrb0E3RUEzQU1RQUs0Q1lQLzBBQUQ5VmdBQS9kd0FBUHo0QUFEOTFRQUEvTHdBQVB5aEFsZ0JOZ1FiQU84Q1BRQ2ZCRklBS3dXVy82d0ZVQUJkQlEzL3NnUnAvLzRGZ2dBckJHbi8zQVhMQUZRRmhRQjJCVEFBQ2dSaEFEc0VwUC9tQSswQWRRUmpBRFVFUXdBb0EvQUFaZ1JqQUJFRWdnQnVBcEFBWmdSRy82Y0Qrd0JDQk5ZQVlRUmovOHNFRXdBMkJHc0FOd1FLQUd3RVBBQlhCYVFBTVFXZkFEOEdZUUJTQkpBQVVnUmtBRzRHUndCVUJjOEFsQVVxQUdFSVFQL0dDRW9BS3dZaEFKMEZlUUFpQk9vQUl3WFAvNGdIYnYra0JMWUFId1Y2QUNVRmZmL0ZCT1FBbVFZdUFGVUZ5Z0FoQlZvQXhBZGdBQ2dIdlFBb0JmSUFod2JGQUN3RTJ3QWtCU0FBU0FjekFETUV3dituQkYwQVFnUnBBQ01EUVFBV0JNei9oUVpWLzdBRCtBQVhCRzhBRndSS0FDSUVjUCs4QmRRQUl3UnZBQmNFYndBWEE5c0FWQVduQURrRXF3QVhCRU1BYlFaYUFCY0d2QUFSQlBrQVVRWklBQ01FUndBakJCa0FJQVpRQUNVRVRmKzlCRkFBRFFRWkFEa0dvZis0QnE4QUZ3UnRBQTBFYndBWEJ5QUFYd1k1QUVjRVJ3QWhCdkVBS3dYVUFCa0U3LytzQkVIL25RY1RBRDRHRGdBdEJyQUFFZ1d3QUJVSTVBQTNCN0VBSXdRQS82a0QxdiswQlZBQVlRUmxBRFFFOFFDb0ErNEFkUVZRQUdFRVl3QTFCeHNBWXdZbEFFd0hJQUJmQmprQVJ3VHBBRmdFSmdCRUJOVUFPd0FBL1BBQUFQMFFBQUQrTVFBQS9qMEFBUHBEQUFENmN3WDdBQ1VFOWdBWEJFY0FJUVRwQUNZRVkvL0lCRWtBSXdPSEFCRUV6d0FyQkFRQUVRZnYvNlFHdGYrd0JhY0FLd1RmQUNJRkJnQWtCSWdBSVFaaEFLUUZkQUJzQmZzQUpnVHJBQmNIb0FBbUJZSUFFUWdUQUNvR3VnQVJCZ2NBWHdUZUFFc0ZHLy9BQkNyL3VnYnhBSm9GUlFCWEJjOEF4QVRCQUcwRlJnQzBCRklBZ2dWYkFCd0Y3QUJWQktELzhnVDRBQ1FFVmdBaEJmci94UVQzLzd3RmdRQXJCR01BRVFZRkFDWUU5QUFYQjBZQUpnWk1BQ01GWWdCTEJJQUFMd1NCLy9FRXFBQW5BNWovK1FWSi84QUVXUCs2Qk5NQUtRYTlBRUlHcHdCRUJpRUFyQVVBQUdFRVlBQ1RCQ2NBaXdlQi85c0djZi9aQjdnQUp3WnJBQWNFM3dCTEJBOEFQUVY5QUpFRTlnQnpCU1VBVUFZZi84VUZIZis4QXdNQTZBUC9BQUFIOUFBQUEvOEFBQWYwQUFBQ3JnQUFBZ1FBQUFGY0FBQUVaZ0FBQWlrQUFBR2ZBQUFCQWdBQUFOVUFBQUFBQUFBQ3JBQkFBcXdBUUFVR0FKc0dCQUI4QTM3L1dBR3lBTElCclFDTkFjSC9wd0dXQU0wQy9nQzVBd1VBbWdMcS82UUVPUUJwQkhiLy9BSzJBSjhENkFBMUJZZ0FOUUhDQUY0SGN3Q2lBbUVBV2dKWC8vd0RmZi9nQXVnQWlRTG9BR1lDNkFCK0F1Z0FpUUxvQUpnQzZBQjRBdWdBcHdOQ0FHc0M2UC9YQXVnQU1RTG8vNllDNlArMkF1ai90UUxvLzh3QzZQL1lBdWovNWdMby84WUM2UC8xQkpILzl3WThBQThHaXdBc0NGMEFKZ1lNQUNBR2FRQVFCR2tBU3dXOUFFUUVEUUJFQkhnQUZRVTQvK1VGVS8vcUJiY0F3QVBGQUNzSDZ3QWpCT0VBOEFUdEFIMEdFUUM2QnJNQWhBYW1BSW9HZ3dDNkJIQUFSQVZmQUI0RXVmK21CRjRBbWdSNUFEUUlFZ0JKQWlIL0R3UnVBREVFWFFCZ0EvMy8xZ1FTQUJRRDd3QThBa2tBWXdKNkFHY0IyLy9SQlB3QVhnU0pBRTRFbUFCZUJ2SUFYZ2J5QUY0RTZBQmVCb01BRlFBQUFBQUg4ZitvQ0RVQVhBTGUvK1FDM2dCd0F0NEFGZ1ArQUdFRC9nQWVBLzRBV1FQOUFEd0QvZ0F3QS83Ly93UCtBQWdEL3YveUEvNEF0QVArQURrRUMvL1dCQjRBYkFRNy82SUYyZ0NMQkZjQWJnUm1BRGdFSGdCakJCWUFEd1JEQUFrRW1RQTZCRWtBQ1FTWkFEc0V0Z0FKQmRjQUNRT2JBQWtFUEFBSkE3bi84d0h2QUJvRXR3QUpCSU1BUHdPckFBa0VGZ0FQQkVZQUVRT0pBQUlEbndBSkJGYi9wQVNaQURzRVZ2K2tBNEgvMndTekFBa0QvLy9hQlhzQVFRVXdBRzBFdXdBQUJXY0FZZ1JlQURrSEhmL0JCeDhBQ1FWdUFHTUVzd0FKQkZBQUN3VTAvNE1HRmYrcUJDVUFEZ1M4QUFzRVBBQUtCS2Ivd1FRckFIWUZPUUFKQkdvQVd3WlJBQWtHMkFBSkJUZ0FTd1h4QUFzRVJnQUxCRjRBRkFaY0FBa0VZZi9SQkFqLzlnWncvNm9FZkFBS0JPWUFDZ1ZLQUdBRnlnQStCRDhBYkFTZi82SUdaUUJpQkdvQVd3UnFBQWtGMGdBN0JLa0FNZ1FtQUE0RW5BQTBCRVlBQndQV0FCNEg3d0FKQk03LzJnTGUvL1VDM3YvekF0NEFDd0xlQUJZQzNnQWxBdDRBQlFMZUFEUURtUUNSQXBvQkNBUENBQWtFR3YrSEJKSUFPd1VaQUNzRkFBQXJCQkFBRkFVTkFDc0VDUUFVQkZjQUNRUmVBRGtFUHdBSkJIYi9tZ0h2QU9nRGhRRUVBQUQ5SndQWkFOd0Qyd0FXQSt3QTNBUGNBTnNEbndBSkE0RUJCQU9CQVFVQzZBQ0pBdWdBWmdMb0FINEM2QUNKQXVnQW1BTG9BSGdDNkFDbkJVb0FiQVZ6QUdzRlZRQXJCYXdBYmdXdUFHMEVDUUNyQkY4QUhBUTMvNEVFbC8vUkJFbi8yQVFPQURFRGhRRUZBYTMvdUFabUFEc0Vpd0JGQWZ6L0FBUnovNmtFYy8vWkJIUC95UVJ6QUJNRWN3Qk1CSE1BSWdSekFGY0Vjd0F4QkhNQU53UnpBUGdDSC84RUFoLy9CQUlSQUNNQ0VmOThBaEVBSXdRL0FBa0V3UUJNQkJBQVZnUm1BQkFFSGdBMkJISUFOd1J1QUMwRWVnQXlCRy8veUFSM0FEWUVLQUE2QkdZQUxnUTQvNThEbXdDckJPWUFKQU9uLys4R0ZmOStBK2dBQ1FTWi85c0U1d0FpQkxZQUNRSDRBQUFDb3dCQUJTOEFJQVV2QUNBRWJnQXJCTG9BblFLVy8rVUZKZitqQlNYL293VWwvNk1GSmYrakJTWC9vd1VsLzZNRkpmK2pCUkVBWHdSakFDWUVZd0FtQkdNQUpnUmpBQ1lDTWdBM0FqSUFOd0l5QURjQ01nQTNCWUVBSmdWWkFHSUZXUUJpQlZrQVlnVlpBR0lGV1FCaUJSUUFXQVVVQUZnRkZBQllCUlFBV0FTOUFLRUVMd0FjQkM4QUhBUXZBQndFTHdBY0JDOEFIQVF2QUJ3RUx3QWNCQTBBTndRb0FEb0VLQUE2QkNnQU9nUW9BRG9DQndBakFnY0FJd0lIQUNNQ0J3QWpCRklBRFFSbkFEZ0Vad0E0QkdjQU9BUm5BRGdFWndBNEJGRUFTZ1JSQUVvRVVRQktCRkVBU2dQTi83d0R6Zis4QlNYL293UXZBQndGSmYrakJDOEFIQVVsLzZNRUx3QWNCUkVBWHdRTkFEY0ZFUUJmQkEwQU53VVJBRjhFRFFBM0JSRUFYd1FOQURjRkVRQW1CUFVBT0FSakFDWUVLQUE2QkdNQUpnUW9BRG9FWXdBbUJDZ0FPZ1JqQUNZRUtBQTZCR01BSmdRb0FEb0ZTUUJtQkdiLytRVkpBR1lFWnYvNUJVa0FaZ1JtLy9rRlNRQm1CR2IvK1FXQkFDWUVVQUFOQWpJQU53SUhBQk1DTWdBM0FnY0FJd0l5QURjQ0J3QWpBakwvamdINi8zVUNNZ0EzQm9JQU53UHNBQ0FFVHdBRUFoWC9CQVRuQUNZRURBQVJCREVBSmdINkFDQUVNUUFtQWZyL3BnUXhBQ1lDa0FBZ0JERUFKZ0xXQUNBRmdRQW1CRklBRFFXQkFDWUVVZ0FOQllFQUpnUlNBQTBFVWdBTkJWa0FZZ1JuQURnRldRQmlCR2NBT0FWWkFHSUVad0E0Qk9JQUpnSytBQkVFNGdBbUFyNy9ud1RpQUNZQ3ZnQVJCTFFBSmdQL0FCc0V0QUFtQS84QUd3UzBBQ1lEL3dBYkJMUUFKZ1AvQUJzRXRBQW1BLzhBR3dTNkFKMENsZ0EvQkxvQW5RS1dBRDhFdWdDZEFyNEFQd1VVQUZnRVVRQktCUlFBV0FSUkFFb0ZGQUJZQkZFQVNnVVVBRmdFVVFCS0JSUUFXQVJSQUVvRkZBQllCRkVBU2diVkFMVUZ3Z0I1QkwwQW9RUE4vN3dFdlFDaEJLNy81UVBvLytZRXJ2L2xBK2ovNWdTdS8rVUQ2UC9tQjBYL2pRYU9BQTRGVndBV0JHTUFLZ1JYLzVZRVYvK1dCQjRBWXdSMi81b0VkdithQkhiL21nUjIvNW9FZHYrYUJIYi9tZ1IyLzVvRVhnQTVBOElBQ1FQQ0FBa0R3Z0FKQThJQUNRSHZBQm9CN3dBYUFlOEFHZ0h2QUJvRXRnQUpCSmtBT3dTWkFEc0VtUUE3QkprQU93U1pBRHNFWmdBNEJHWUFPQVJtQURnRVpnQTRCQjRBYkFSMi81b0VkdithQkhiL21nUmVBRGtFWGdBNUJGNEFPUVJlQURrRVZ3QUpBOElBQ1FQQ0FBa0R3Z0FKQThJQUNRUENBQWtFZ3dBL0JJTUFQd1NEQUQ4RWd3QS9CTGNBQ1FIdkFBNEI3d0FhQWU4QUdnSDUvNWNCN3dBYUE3bi84d1E4QUFrRG13QUpBNXNBQ1FPYkFBa0Rtd0FKQkxZQUNRUzJBQWtFdGdBSkJKa0FPd1NaQURzRW1RQTdCRU1BQ1FSREFBa0VRd0FKQkJZQUR3UVdBQThFRmdBUEJCWUFEd1FlQUdNRUhnQmpCQjRBWXdSbUFEZ0VaZ0E0QkdZQU9BUm1BRGdFWmdBNEJHWUFPQVhhQUlzRUhnQnNCQjRBYkFRTC85WUVDLy9XQkF2LzFnVWwvNk1FeC8rNkJlWC93Z0tXLzhZRmJRQW1CU0gvdUFWRUFCNENrQUFKQlNYL293VG1BQ1lFWXdBbUJLNy81UVdCQUNZQ01nQTNCT2NBSmdiSkFDWUZnUUFtQlZrQVlnVDBBQ1lFdWdDZEJMMEFvUVRtLzhBQ01nQTNCTDBBb1FSaEFEc0VRd0FvQkdNQUVRS1FBR1lFUEFCWEJIY0FJUVJuQURnRW5mL2VBOW9BWkFRNC81OENrQUJFQkR3QVZ3Um5BRGdFUEFCWEJtRUFVZ1JqQUNZRVVnQXJCTFFBSmdJeUFEY0NNZ0EzQkU4QUJBVUFBQ3NFNXdBbUJPUUFtUVVsLzZNRTVnQW1CRklBS3dSakFDWUZlZ0FsQnNrQUpnV0JBQ1lGV1FCaUJZSUFLd1QwQUNZRkVRQmZCTG9BblFUbS84QUVMd0FjQkNnQU9nUnZBQmNFWndBNEJGMy95QVFOQURjRHpmKzhBK2ovdWdRb0FEb0RRUUFXQS84QUd3SDZBQ0FDQndBakFmTC9BZ1JLQUNJRHpmKzhCdFVBdFFYQ0FIa0cxUUMxQmNJQWVRYlZBTFVGd2dCNUJMMEFvUVBOLzd3QlRBQ1JBbm9BblFRYkFETUNGZjhFQWEwQWpRYkpBQ1lHd3dBUEJTWC9vd1F2QUJ3RVl3QW1CWG9BSlFRb0FEb0Vid0FYQllVQWRnV2ZBRDhFOFFDb0ErNEFkUWcwQURnSkpnQmlCTFlBSHdQNEFCY0ZFUUJmQkEwQU53UzlBS0VEN1FCMUFqSUFOd2R1LzZRR1ZmK3dBaklBTndVbC82TUVMd0FjQlNYL293UXZBQndIUmYrTkJvNEFEZ1JqQUNZRUtBQTZCV0lBU3dRWkFEUUVHUUEwQjI3L3BBWlYvN0FFdGdBZkEvZ0FGd1Y2QUNVRWJ3QVhCWG9BSlFSdkFCY0ZXUUJpQkdjQU9BVlFBR0VFWlFBMEJWQUFZUVJsQURRRklBQklCQmtBSUFUa0FKa0R6Zis4Qk9RQW1RUE4vN3dFNUFDWkE4My92QVZhQU1RRVF3QnRCc1VBTEFaSUFDTUVYd0E0QlNYL293UXZBQndGSmYrakJDOEFIQVVsLzZNRUx3QWNCU1gvb3dRdkFCd0ZKZitqQkM4QUhBVWwvNk1FTHdBY0JTWC9vd1F2QUJ3RkpmK2pCQzhBSEFVbC82TUVMd0FjQlNYL293UXZBQndGSmYrakJDOEFIQVVsLzZNRUx3QWNCR01BSmdRb0FEb0VZd0FtQkNnQU9nUmpBQ1lFS0FBNkJHTUFKZ1FvQURvRVl3QW1CQ2dBT2dSakFDWUVLQUE2QkdNQUpnUW9BRG9FWXdBbUJDZ0FPZ0l5QURjQ0J3QWpBakwvL3dINi8rTUZXUUJpQkdjQU9BVlpBR0lFWndBNEJWa0FZZ1JuQURnRldRQmlCR2NBT0FWWkFHSUVad0E0QlZrQVlnUm5BRGdGV1FCaUJHY0FPQVZtQUZ3RWVnQTBCV1lBWEFSNkFEUUZaZ0JjQkhvQU5BVm1BRndFZWdBMEJXWUFYQVI2QURRRkZBQllCRkVBU2dVVUFGZ0VVUUJLQlhjQVdBVEFBRW9GZHdCWUJNQUFTZ1YzQUZnRXdBQktCWGNBV0FUQUFFb0Zkd0JZQk1BQVNnUzlBS0VEemYrOEJMMEFvUVBOLzd3RXZRQ2hBODMvdkFSOS8vUUV1Z0NkQTlzQVZBVmFBTVFFUXdCdEJGSUFLd05CQUJZRjdBQlZCS0QvOGdSUUFBMEUyd0FrQk5zQUpBUlNBQUFEUWYvSEJSUUFQd1FrQUNnRXZRQ2hBKzBBVWdUbS84QUQ2UCs2QkVNQUtBUkcvOElHQkFCOEJHa0FEUVJwQUNZRWFRQU5CR2tBV0FSOUFIRUVrUUJMQkgwQWpBU1JBSE1GU1FCbUJHYi8rUVdCQUNZRVVnQU5CU1gvb3dRdkFCd0VZd0FtQkNnQU9nSXkvODhDQi8rQUJWa0FZZ1JuQURnRTRnQW1BcjRBREFVVUFGZ0VVUUJLQk1qL2hRVG1BQ1lFWFFBUUJSRUFKZ1JmQURnRkVRQW1CRjhBT0FXQkFDWUVVQUFOQk9jQUpnUU1BQkVFNXdBbUJBd0FFUVF4QUNZQit2L2pCc2tBSmdiREFBOEZnUUFtQkZJQURRVlpBR0lFOUFBbUJGMy95QVRpQUNZQ3Z2L2RCTFFBSmdQL0FCc0V1Z0NkQXBZQVB3VVVBRmdGQXdDYUE5b0FaQVVEQUpvRDJnQmtCdFVBdFFYQ0FIa0Vydi9sQStqLzVnV2Yvd0VFZHYrYUEvNy9wZ1R6LzY0Q0svK3hCS1AvMkFSYS8yVUV4Zi9xQkhiL21nUS9BQWtEd2dBSkJBdi8xZ1MzQUFrQjd3QWFCRHdBQ1FYWEFBa0V0Z0FKQkprQU93UkpBQWtFSGdCakJCNEFiQVE3LzZJQjd3QWFCQjRBYkFQQ0FBa0Rud0FKQkJZQUR3SHZBQm9CN3dBYUE3bi84d1E4QUFrRUt3QjJCSGIvbWdRL0FBa0Rud0FKQThJQUNRUzhBQXNGMXdBSkJMY0FDUVNaQURzRXN3QUpCRWtBQ1FSZUFEa0VIZ0JqQkR2L29nUWxBQTRFdHdBSkJGNEFPUVFlQUd3RjBnQTdCTHdBQ3dRckFIWUZld0JCQmFnQUdnWVYvMzRFbWYvYkJCWUFEd1hhQUlzRjJnQ0xCZG9BaXdRZUFHd0ZKZitqQkM4QUhBUmpBQ1lFS0FBNkJIYi9tZ1BDQUFrQ0IvL2pBQUFBQWdBQUFBTUFBQUFVQUFNQUFRQUFBQlFBQkFadUFBQUE5QUNBQUFZQWRBQUFBQUlBRFFCK0FLQUFyQUN0QUw4QXhnRFBBT1lBN3dEK0FROEJFUUVsQVNjQk1BRlRBVjhCWndGK0FYOEJqd0dTQWFFQnNBSHdBZjhDR3dJM0Fsa0N2QUxIQXNrQzNRTHpBd0VEQXdNSkF3OERJd09LQTR3RGtnT2hBN0FEdVFQSkE4NEQwZ1BXQkNVRUx3UkZCRThFWWdSdkJIa0VoZ1NmQktrRXNRUzZCTTRFMXdUaEJQVUZBUVVRQlJNZUFSNC9Ib1VlOFI3ekh2a2ZUU0FKSUFzZ0VTQVZJQjRnSWlBbklEQWdNeUE2SUR3Z1JDQjBJSDhncENDcUlLd2dzU0M2SUwwaEJTRVRJUlloSWlFbUlTNGhYaUlDSWdZaUR5SVNJaG9pSGlJcklrZ2lZQ0psSmNydUF2YkQrd1QrLy8vOS8vOEFBQUFBQUFJQURRQWdBS0FBb1FDdEFLNEF3QURIQU5BQTV3RHdBUDhCRUFFU0FTWUJLQUV4QVZRQllBRm9BWDhCandHU0FhQUJyd0h3QWZvQ0dBSTNBbGtDdkFMR0Fza0MyQUx6QXdBREF3TUpBdzhESXdPRUE0d0RqZ09UQTZNRHNRTzZBOG9EMFFQV0JBQUVKZ1F3QkVZRVVBUmpCSEFFZWdTSUJLQUVxZ1N5QkxzRXp3VFlCT0lFOWdVQ0JSRWVBQjQrSG9BZW9CN3lIdlFmVFNBQUlBb2dFQ0FUSUJjZ0lDQWxJREFnTWlBNUlEd2dSQ0IwSUg4Z295Q21JS3Nnc1NDNUlMd2hCU0VUSVJZaElpRW1JUzRoV3lJQ0lnWWlEeUlSSWhvaUhpSXJJa2dpWUNKa0pjcnVBZmJEK3dIKy8vLzgvLzhBQVFBQS8vYi81QUhwLzhJQjNmL0JBQUFCMEFBQUFjc0FBQUhIQUFBQnhRQUFBY01BQUFHN0FBQUJ2ZjhXL3dmL0JmNzQvdXNCL3dBQUFBRCtaZjVFQVRUOTJQM1gvY245dFAyby9hZjlvdjJkL1lvQUFBQVBBQTRBQUFBQS9Rb0FBUC92L1A3OCt3QUEvTG9BQVB5eUFBRDhwd0FBL0tFQUFQeVpBQUQ4a1FBQS96a0FBUDgyQUFEOFhnQUE1ZlBscytWazVZL2srT1dONVk3aGN1Rno0VzhBQU9GczRXdmhhZUZoNDdyaFdlT3k0VkRoSXVFZEFBRGhBZ0FBNFAzZzl1RDE0Szdnb2VDZjRKVGZsT0NKNEYzZnV0NnMzNjdmcmQrbTM2UGZsOTk3MzJUZllkdjlFOGNMQndiTEF0TUIxd0FCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURrQUFBQTdnQUFBUmdBQUFFeUFBQUJNZ0FBQVRJQUFBRjBBQUFBQUFBQUFBQUFBQUFBQUFBQmRBRitBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFXd0FBQUFBQVhRQmtBQUFBYWdBQUFBQUFBQUJ3QUFBQWdnQUFBSXdBQUFDVWdBQUFtSUFBQUtPQUFBQ21nQUFBcjRBQUFMT0FBQUM0Z0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXRJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTENBQUFDd2dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLUUFwRUNrZ0tUQXBRQ2xRQ0JBb3dDb0FLaEFxSUNvd0trQXFVQWdnQ0RBcVlDcHdLb0Fxa0NxZ0NFQUlVQ3F3S3NBcTBDcmdLdkFyQUFoZ0NIQXJzQ3ZBSzlBcjRDdndMQUFJZ0FpUUxCQXNJQ3d3TEVBc1VBaWdLTEFJc0FqQUtOQUkwQzlBTDFBdllDOXdMNEF2a0FqZ0w2QXZzQy9BTDlBdjRDL3dNQUF3RUFqd0NRQXdJREF3TUVBd1VEQmdNSEF3Z0FrUUNTQXdrRENnTUxBd3dERFFNT0FKTUFsQU1kQXg0RElRTWlBeU1ESkFLT0FvOENsZ0t4QXp3RFBRTStBejhER3dNY0F4OERJQUN1QUs4RGx3Q3dBNWdEbVFPYUFMRUFzZ09oQTZJRG93Q3pBNlFEcFFDMEE2WURwd0MxQTZnQXRnT3BBTGNEcWdPckFMZ0RyQUM1QUxvRHJRT3VBNjhEc0FPeEE3SURzd08wQU1RRHRnTzNBTVVEdFFER0FNY0F5QURKQU1vQXl3RE1BN2dBelFET0EvVUR2Z0RTQTc4QTB3UEFBOEVEd2dQREFOUUExUURXQThVRDlnUEdBTmNEeHdEWUE4Z0R5UURaQThvQTJnRGJBTndEeXdQRUFOMER6QVBOQTg0RHp3UFFBOUVEMGdEZUFOOEQwd1BVQU9vQTZ3RHNBTzBEMVFEdUFPOEE4QVBXQVBFQThnRHpBUFFEMXdEMUE5Z0QyUUQyQTlvQTl3UGJBL2NEM0FFQ0E5MEJBd1BlQTk4RDRBUGhBUVFCQlFFR0ErSUQrQVBqQVFjQkNBRUpCSklEK1FQNkFSY0JHQUVaQVJvRCt3UDhBLzREL1FFb0FTa0JLZ0VyQkpFQkxBRXRBUzRCTHdFd0JKTUVsQUV4QVRJQk13RTBBLzhFQUFFMUFUWUJOd0U0QkpVRWxnUUJCQUlFaUFTSkJBTUVCQVNYQkpnRWtBRk1BVTBFamdTUEJBVUVCZ1FIQVU0QlR3RlFBVkVCVWdGVEFWUUJWUVNLQklzQlZnRlhBVmdFRWdRUkJCTUVGQVFWQkJZRUZ3RlpBVm9FakFTTkJDd0VMUUZiQVZ3QlhRRmVCSmtFbWdGZkJDNEVtd0Z2QVhBQmdRR0NCSjBFbkFHbkJJY0JyUUFBUUVxWm1KZVdoNGFGaElPQ2dZQi9mbjE4ZTNwNWVIZDJkWFJ6Y25Gd2IyNXRiR3RxYVdoblptVmtZMkpoWUY5ZVhWeGJXbGxZVjFaVlZGTlJVRTlPVFV4TFNrbElSMFlvSHhBS0NTd0JzUXNLUXlORFpRb3RMQUN4Q2d0REkwTUxMU3dCc0FaRHNBZERaUW90TExCUEt5Q3dRRkZZSVV0U1dFVkVHeUVoV1JzakliQkFzQVFsUmJBRUpVVmhaSXBqVWxoRlJCc2hJVmxaTFN3QXNBZERzQVpEQ3kwc1MxTWpTMUZhV0NCRmltQkVHeUVoV1Mwc1MxUllJRVdLWUVRYklTRlpMU3hMVXlOTFVWcFlPQnNoSVZrdExFdFVXRGdiSVNGWkxTeXdBa05VV0xCR0t4c2hJU0VoV1Mwc3NBSkRWRml3UnlzYklTRWhXUzBzc0FKRFZGaXdTQ3NiSVNFaElWa3RMTEFDUTFSWXNFa3JHeUVoSVZrdExDTWdzQUJRaW9wa3NRQURKVlJZc0VBYnNRRURKVlJZc0FWRGkxbXdUeXRaSTdCaUt5TWhJMWhsV1Mwc3NRZ0FEQ0ZVWUVNdExMRU1BQXdoVkdCRExTd0JJRWV3QWtNZ3VCQUFZcmdRQUdOWEk3Z0JBR0s0RUFCalYxcFlzQ0JnWmxsSUxTeXhBQUlsc0FJbHNBSWxVN2dBTlNONHNBSWxzQUlsWUxBZ1l5QWdzQVlsSTJKUVdJb2hzQUZnSXhzZ0lMQUdKU05pVWxnakliQUJZUnVLSVNNaElGbFp1UC9CSEdDd0lHTWpJUzBzc1FJQVFyRWpBWWhSc1VBQmlGTmFXTGdRQUxBZ2lGUllzZ0lCQWtOZ1FsbXhKQUdJVVZpNElBQ3dRSWhVV0xJQ0FnSkRZRUt4SkFHSVZGaXlBaUFDUTJCQ0FFc0JTMUpZc2dJSUFrTmdRbGtidUVBQXNJQ0lWRml5QWdRQ1EyQkNXYmhBQUxDQVk3Z0JBSWhVV0xJQ0NBSkRZRUpadVVBQUFRQmp1QUlBaUZSWXNnSVFBa05nUWxteEpnR0lVVmk1UUFBQ0FHTzRCQUNJVkZpeUFrQUNRMkJDV2JsQUFBUUFZN2dJQUloVVdMSUNnQUpEWUVKWnNTZ0JpRkZZdVVBQUNBQmp1QkFBaUZSWXVRQUNBUUN3QWtOZ1FsbFpXVmxaV1ZteEFBSkRWRmhBQ2dWQUNFQUpRQXdDRFFJYnNRRUNRMVJZc2dWQUNMb0JBQUFKQVFDekRBRU5BUnV4Z0FKRFVsaXlCVUFJdUFHQXNRbEFHN2dCQUxBQ1ExSllzZ1ZBQ0xvQmdBQUpBVUFidUFHQXNBSkRVbGl5QlVBSXVBSUFzUWxBRzdJRlFBaTZBUUFBQ1FFQVdWbFp1RUFBc0lDSVZibEFBQUlBWTdnRUFJaFZXbGl6REFBTkFSdXpEQUFOQVZsWldVSkNRa0pDTFN4RnNRSk9LeU93VHlzZ3NFQlJXQ0ZMVVZpd0FpVkZzUUZPSzJCWkd5TkxVVml3QXlWRklHU0tZN0JBVTFpeEFrNHJZQnNoV1JzaFdWbEVMU3dnc0FCUUlGZ2paUnNqV2JFVUZJcHdSYkJQS3lPeFlRWW1ZQ3VLV0xBRlE0dFpJMWhsV1NNUU9pMHNzQU1sU1dNalJtQ3dUeXNqc0FRbHNBUWxTYkFESldOV0lHQ3dZbUFyc0FNbElCQkdpa1pnc0NCallUb3RMTEFBRnJFQ0F5V3hBUVFsQVQ0QVByRUJBZ1lNc0FvalpVS3dDeU5Dc1FJREpiRUJCQ1VCUHdBL3NRRUNCZ3l3QmlObFFyQUhJMEt3QVJheEFBSkRWRmhGSTBVZ0dHbUtZeU5pSUNDd1FGQllaeHRtV1dHd0lHT3dRQ05oc0FRalFodXhCQUJDSVNGWkdBRXRMQ0JGc1FCT0swUXRMRXRSc1VCUEsxQmJXQ0JGc1FGT0t5Q0tpa1Fnc1VBRUptRmpZYkVCVGl0RUlSc2pJWXBGc1FGT0t5Q0tJMFJFV1Mwc1MxR3hRRThyVUZ0WVJTQ0tzRUJoWTJBYkl5RkZXYkVCVGl0RUxTd2pSU0NLUlNOaElHU3dRRkd3QkNVZ3NBQlRJN0JBVVZwYXNVQlBLMVJhV0lvTVpDTmtJMU5Zc1VCQWltRWdZMkViSUdOWkc0cFpZN0VDVGl0Z1JDMHNBUzBzQUMwc0JiRUxDa01qUTJVS0xTeXhDZ3RESTBNTEFpMHNzQUlsWTJhd0FpVzRJQUJpWUNOaUxTeXdBaVZqc0NCZ1pyQUNKYmdnQUdKZ0kySXRMTEFDSldObnNBSWx1Q0FBWW1BallpMHNzQUlsWTJhd0lHQ3dBaVc0SUFCaVlDTmlMU3dqU3JFQ1Rpc3RMQ05Lc1FGT0t5MHNJNHBLSTBWa3NBSWxaTEFDSldGa3NBTkRVbGdoSUdSWnNRSk9LeU93QUZCWVpWa3RMQ09LU2lORlpMQUNKV1N3QWlWaFpMQURRMUpZSVNCa1diRUJUaXNqc0FCUVdHVlpMU3dnc0FNbFNyRUNUaXVLRURzdExDQ3dBeVZLc1FGT0s0b1FPeTBzc0FNbHNBTWxpckJuSzRvUU95MHNzQU1sc0FNbGlyQm9LNG9RT3kwc3NBTWxSckFESlVaZ3NBUWxMckFFSmJBRUpiQUVKaUN3QUZCWUliQnFHN0JzV1N1d0F5VkdzQU1sUm1CaHNJQmlJSW9nRUNNNkl5QVFJem90TExBREpVZXdBeVZIWUxBRkpVZXdnR05oc0FJbHNBWWxTV01qc0FVbFNyQ0FZeUJZWWhzaFdiQUVKa1pnaWthS1JtQ3dJR05oTFN5d0JDYXdCQ1d3QkNXd0JDYXdiaXNnaWlBUUl6b2pJQkFqT2kwc0l5Q3dBVlJZSWJBQ0piRUNUaXV3Z0ZBZ1lGa2dZR0Fnc0FGUldDRWhHeUN3QlZGWUlTQm1ZYkJBSTJHeEFBTWxVTEFESmJBREpWQmFXQ0N3QXlWaGlsTllJYkFBV1JzaFdSdXdCMVJZSUdaaFpTTWhHeUVoc0FCWldWbXhBazRyTFN5d0FpV3dCQ1ZLc0FCVFdMQUFHNHFLSTRxd0FWbXdCQ1ZHSUdaaElMQUZKckFHSmttd0JTYXdCU2F3Y0NzallXV3dJR0FnWm1Hd0lHRmxMU3l3QWlWR0lJb2dzQUJRV0NHeEFrNHJHMFVqSVZsaFpiQUNKUkE3TFN5d0JDWWd1QUlBWWlDNEFnQmppaU5oSUxCZFlDdXdCU1VSaWhLS0lEbUtXTGtBWFJBQXNBUW1ZMVpnS3lNaElCQWdSaUN4QWs0ckkyRWJJeUVnaWlBUVNiRUNUaXRaT3kwc3VRQmRFQUN3Q1NWalZtQXJzQVVsc0FVbHNBVW1zRzByc1YwSEpXQXJzQVVsc0FVbHNBVWxzQVVsc0c4cnVRQmRFQUN3Q0NaalZtQXJJTEFBVWxpd1VDdXdCU1d3QlNXd0J5V3dCeVd3QlNXd2NTdXdBaGM0c0FCU3NBSWxzQUZTV2xpd0JDV3dCaVZKc0FNbHNBVWxTV0Fnc0VCU1dDRWJzQUJTV0NDd0FsUllzQVFsc0FRbHNBY2xzQWNsU2JBQ0Z6Z2JzQVFsc0FRbHNBUWxzQVlsU2JBQ0Z6aFpXVmxaV1NFaElTRWhMU3k1QUYwUUFMQUxKV05XWUN1d0J5V3dCeVd3QmlXd0JpV3dEQ1d3RENXd0NTV3dDQ1d3Yml1d0JCYzRzQWNsc0FjbHNBY21zRzByc0FRbHNBUWxzQVFtc0cwcnNGQXJzQVlsc0FZbHNBTWxzSEVyc0FVbHNBVWxzQU1sc0FJWE9DQ3dCaVd3QmlXd0JTV3djU3Rnc0FZbHNBWWxzQVFsWmJBQ0Z6aXdBaVd3QWlWZ0lMQkFVMWdoc0VCaEk3QkFZU01idVAvQVVGaXdRR0Fqc0VCZ0kxbFpzQWdsc0FnbHNBUW1zQUlYT0xBRkpiQUZKWXF3QWhjNElMQUFVbGl3QmlXd0NDVkpzQU1sc0FVbFNXQWdzRUJTV0NFYnNBQlNXTEFHSmJBR0piQUdKYkFHSmJBTEpiQUxKVW13QkJjNHNBWWxzQVlsc0FZbHNBWWxzQW9sc0FvbHNBY2xzSEVyc0FRWE9MQUVKYkFFSmJBRkpiQUhKYkFGSmJCeEs3QUNGemdic0FRbHNBUWx1UC9Bc0FJWE9GbFpXU0VoSVNFaElTRWhMU3l3QkNXd0F5V0hzQU1sc0FNbGlpQ3dBRkJZSWJCbEc3Qm9XU3Rrc0FRbHNBUWxCckFFSmJBRUpVa2dJR093QXlVZ1kxR3hBQU1sVkZ0WUlTRWpJUWNiSUdPd0FpVWdZMkVnc0ZNcmltT3dCU1d3QlNXSHNBUWxzQVFtU3JBQVVGaGxXYkFFSmlBQlJpTUFSckFGSmlBQlJpTUFSckFBRmdDd0FDTklBYkFBSTBnQUlMQUJJMGl3QWlOSUFTQ3dBU05Jc0FJalNDT3lBZ0FCQ0NNNHNnSUFBUWtqT0xFQ0FRZXdBUlpaTFN3akVBME1pbU1qaW1OZ1pMbEFBQVFBWTFCWXNBQTRHenhaTFN5d0JpV3dDU1d3Q1NXd0J5YXdkaXNqc0FCVVdBVWJCRm13QkNXd0JpYXdkeXV3QlNXd0JTYXdCU1d3QlNhd2RpdXdBRlJZQlJzRVdiQjNLeTBzc0FjbHNBb2xzQW9sc0FnbXNIWXJpckFBVkZnRkd3UlpzQVVsc0FjbXNIY3JzQVlsc0FZbXNBWWxzQVltc0hZckNMQjNLeTBzc0FjbHNBb2xzQW9sc0FnbXNIWXJpb29Jc0FRbHNBWW1zSGNyc0FVbHNBVW1zQVVsc0FVbXNIWXJzQUJVV0FVYkJGbXdkeXN0TExBSUpiQUxKYkFMSmJBSkpyQjJLN0FFSnJBRUpnaXdCU1d3Qnlhd2R5dXdCaVd3Qmlhd0JpV3dCaWF3ZGlzSXNIY3JMU3dEc0FNbHNBTWxTckFFSmJBREpVb0NzQVVsc0FVbVNyQUZKckFGSmtxd0JDWmppb3BqWVMwc3NWME9KV0Fyc0F3bUViQUZKaEt3Q2lVNXNBY2xPYkFLSmJBS0piQUpKYkI4SzdBQVVMQUxKYkFJSmJBS0piQjhLN0FBVUZSWXNBY2xzQXNsaDdBRUpiQUVKUXV3Q2lVUXNBa2x3YkFDSmJBQ0pRdXdCeVVRc0FZbHdSdXdCeVd3Q3lXd0N5VzQvLyt3ZGl1d0JDV3dCQ1VMc0FjbHNBb2xzSGNyc0FvbHNBZ2xzQWdsdVAvL3NIWXJzQUlsc0FJbEM3QUtKYkFISmJCM0sxbXdDaVZHc0FvbFJtQ3dDQ1ZHc0FnbFJtQ3dCaVd3QmlVTHNBd2xzQXdsc0F3bUlMQUFVRmdoc0dvYnNHeFpLN0FFSmJBRUpRdXdDU1d3Q1NXd0NTWWdzQUJRV0NHd2FodXdiRmtySTdBS0pVYXdDaVZHWUdHd0lHTWpzQWdsUnJBSUpVWmdZYkFnWTdFQkRDVlVXQVFiQlZtd0NpWWdFTEFESlRxd0JpYXdCaVlMc0FjbUlCQ0tPckVCQnlaVVdBUWJCVm13QlNZZ0VMQUNKVHFLaWdzaklCQWpPaTBzSTdBQlZGaTVBQUJBQUJ1NFFBQ3dBRm1Lc0FGVVdMa0FBRUFBRzdoQUFMQUFXYkI5S3kwc2lvb0lEWXF3QVZSWXVRQUFRQUFidUVBQXNBQlpzSDByTFN3SXNBRlVXTGtBQUVBQUc3aEFBTEFBV1Eyd2ZTc3RMTEFFSnJBRUpnZ05zQVFtc0FRbUNBMndmU3N0TENBQlJpTUFSckFLUTdBTFE0cGpJMkpoTFN5d0NTdXdCaVV1c0FVbGZjV3dCaVd3QlNXd0JDVWdzQUJRV0NHd2FodXdiRmtyc0FVbHNBUWxzQU1sSUxBQVVGZ2hzR29ic0d4Wkt4aXdDQ1d3QnlXd0JpV3dDaVd3Ynl1d0JpV3dCU1d3QkNZZ3NBQlFXQ0d3Wmh1d2FGa3JzQVVsc0FRbHNBUW1JTEFBVUZnaHNHWWJzR2haSzFSWWZiQUVKUkN3QXlYRnNBSWxFTEFCSmNXd0JTWWhzQVVtSVJ1d0JpYXdCQ1d3QXlXd0NDYXdieXRac1FBQ1ExUllmYkFDSmJDQ0s3QUZKYkNDS3lBZ2FXR3dCRU1CSTJHd1lHQWdhV0d3SUdFZ3NBZ21zQWdtaXJBQ0Z6aUtpbUVnYVdGaHNBSVhPQnNoSVNFaFdSZ3RMRXRTc1FFQ1ExTmFXQ01RSUFFOEFEd2JJU0ZaTFN3anNBSWxzQUlsVTFnZ3NBUWxXRHdiT1Ztd0FXQzQvK2tjV1NFaElTMHNzQUlsUjdBQ0pVZFVpaUFnRUJHd0FXQ0tJQkt3QVdHd2hTc3RMTEFFSlVld0FpVkhWQ01nRXJBQllTTWdzQVltSUNBUUViQUJZTEFHSnJDRks0cUtzSVVyTFN5d0FrTlVXQXdDaWt0VHNBUW1TMUZhV0FvNEd3b2hJVmtiSVNFaElWa3RMTENZSzFnTUFvcExVN0FFSmt0UldsZ0tPQnNLSVNGWkd5RWhJU0ZaTFN3Z3NBSkRWTEFCSTdnQWFDTjRJYkVBQWtPNEFGNGplU0d3QWtNanNDQWdYRmdoSVNHd0FMZ0FUUnhaaW9vZ2lpQ0tJN2dRQUdOV1dMZ1FBR05XV0NFaEliQUJ1QUF3SEZrYklWbXdnR0lnWEZnaElTR3dBTGdBSFJ4Wkk3Q0FZaUJjV0NFaEliQUF1QUFNSEZtS3NBRmh1UCtySENNaExTd2dzQUpEVkxBQkk3Z0FnU040SWJFQUFrTzRBSGNqZVNHeEFBSkRpckFnSUZ4WUlTRWh1QUJuSEZtS2lpQ0tJSW9qdUJBQVkxWll1QkFBWTFaWXNBUW1zQUZic0FRbXNBUW1zQVFtR3lFaElTRzRBRGl3QUNNY1dSc2hXYkFFSmlPd2dHSWdYRmlLWElwYUl5RWpJYmdBSGh4WmlyQ0FZaUJjV0NFaEl5RzRBQTRjV2JBRUpyQUJZYmova3h3aklTMEFBRUQvZmpSOVZYdysveDk3Ty84ZmVqMy9IM2s3UUI5NFBQOGZkenc5SDNZMUJ4OTFPdjhmZERwbkgzTTVUeDl5T2Y4ZmNUYi9IM0E0elI5dk9QOGZiamRlSDIwM3pSOXNOLzhmYXpjdEgybzNHQjlwTlA4ZmFETC9IMmN5elI5bU0vOGZaVEgvSDJRdy94OWpNS3NmWWpCbkgyRXUveDlnTG9BZlh5Ly9IMTR2a3g5ZExmOGZYQ3ovSDFzci94OWFLczBmV1NyL0gxZ3FEUjlYS2Y4ZlZpai9IMVVuSkI5VUp5MGZVeVZlSDFJbC94OVJKYXNmVUNiL0gwOG1nQjlPSlA4ZlRTTXJIMHdqcXg5TEkvOGZTaU5XSDBrakt4OUlJdjhmUnlEL0gwWWdjaDlGSWY4ZlJDRnlIME1mL3g5Q0hwTWZRUjcvSDBBZC94OC9IUDhmUFR1VFFPb2ZQRHMwSHpvMURoODVObklmT0RaUEh6YzJJaDgyTlpNZk16SkFIekV3Y2g4dkxrb2ZLeXBBSHljWkJCOG1KU2dmSlRNYkdWd2tHaElmSXdVYUdWd2lHZjhmSVNBOUh5QTRHQlpjSHhndEh4NFgveDhkRnY4ZkhCWUhIeHN6R1J4YkdEUVdIRnNhTXhrY1d4YzBGaHhiRlJrK0ZxWmFFekVTVlJFeEVGVVNXUkJaRFRRTVZRVTBCRlVNV1FSWkh3UmZCQUlQQkg4RTd3UUREMTRPVlFzMENsVUhOQVpWQVRFQVZRNVpDbGtHV1g4R0FTOEdUd1p2QmdNL0JsOEdmd1lEQUZrdkFBRXZBRzhBN3dBRENUUUlWUU0wQWxVSVdRSlpId0pmQWdJUEFuOEM3d0lEQTBCQUJRRzRBWkN3VkN0THVBZi9Va3V3Q1ZCYnNBR0lzQ1ZUc0FHSXNFQlJXckFHaUxBQVZWcGJXTEVCQVk1WmhZMk5BQjFDUzdDUVUxaXlBd0FBSFVKWnNRSUNRMUZZc1FRRGpsbHpkQUFyQUNzckszTjBBQ3R6ZEhVQUt3QXJBQ3NyS3lzcmMzUUFLd0FyS3lzQUt3QXJLeXNCS3dFckFTc0JLd0VyQVNzckFDc3JBU3NyQVNzQUt3QXJBU3NyS3lzckFTc3JBQ3NyS3lzckt5c0JLeXNBS3lzckt5c3JLd0VyQUNzckt5c3JLeXNyS3lzckt5c0JLeXNBS3lzckt5c3JLeXNyS3dFckt5c3JLeXNyQUNzckt5c3JLeXNyS3lzckt5c3JLeXNyS3lzckt4Z0FBQVlBQUJVRnNBQVVCYkFBRkFRNkFCUUFBUC9zQUFELzdBQUEvK3orWVAvMUJiQUFGUUFBLytzQUFBQzlBTUFBblFDZEFMb0Fsd0NYQUNjQXdBQ2RBSVlBdkFDckFMb0FtZ0RUQUxNQW1RSGdBSllBdWdDYUFLa0JDd0NDQUs0QW9BQ01BSlVBdVFDcEFCY0Frd0NhQUhzQWl3Q2hBTjRBb0FDTUFKMEF0Z0FuQU1BQW5RQ2tBSVlBb2dDckFMWUF2d0M2QUlJQWpnQ2FBS0lBc2dEVEFKRUFtUUN0QUxNQXZnSEpBZjBBbGdDNkFFY0FtQUNkQUtrQkN3Q0NBSmtBbndDcEFMQUFnUUNGQUlzQWxBQ3BBTFVBdWdBWEFGQUFZd0I0QUgwQWd3Q0xBSkFBbUFDaUFLNEExQURlQVNZQWV3Q0pBSk1BblFDbEFMUUVqUUFRQUFBQUFBQXlBRElBTWdBeUFESUFYQUIrQUxVQk5BSERBajhDVlFLR0FyY0M1QU1EQXg4RE1RTlBBMk1EdVFQVEJCY0VpUVMyQlFjRmFRV0hCZ0VHWWdadUJub0dvUWErQnVVSFBRZnZDQ1lJalFqWUNSMEpVZ2wrQ2RJSi9Rb1NDa0VLZGdxWENzc0s4QXRDQzNzTDJnd2lESWtNcVF6YkRRSU5RdzF4RFpZTnhnM2lEZllPRWc0M0RrZ09YQTdORHljUGN3L05FQ0lRVlJER0VRTVJMUkZxRVo4UnRSSVpFbGNTcEJML0Uxb1RrQlB1RkNJVVhoU0RGTVlVOHhVdkZWMFZxaFcrRmcwV1VCWjJGdGdYSnhlTkY5Y1g4eGlRR01NWlNCbW1HYklaMFJwNUdvc2F3aHJxR3lZYmpCdWdHK1FjQlJ3aEhFMGNaaHlySExjY3lCelpIT29kUVIyU0hiQWVFaDVRSHJVZllSL0lJQVVnWUNDOElTQWhWU0ZxSVowaHlpSHNJaXdpZnlMMEk0c2pzeVFISkZza3h5VW5KV3dsdkNYa0pqWW1WeVozSm44bXBTYkNKdk1uSUNkZ0ozOG5yeWZESjlnbjRTZ1BLQ3dvU1NoZEtKMG9wU2krS080cFVTbDNLYUVwd0NuNEtsUXFtQ3NCSzNVcjRTd1BMSUlzOHkxSExZVXQ2QzRRTG1RdTNTOGFMM0F2d0RBYk1FOHdqVERsTVNveG16SUZNbDR5MnpNcU00SXo1VFEwTkhnMG56VG9OVDgxaXpYK05pSTJYVGFhTnZRM0lEZGFONEkzdGpmNU9ENDRlRGpRT1RvNWZqbjFPbUU2ZWpyQ094STdnVHVsTzlnOEV6eEVQRzg4bUR5MlBWYzlnajI3UGVJK0ZqNWFQcDQrMkQ4dVA1VS8yMEE5UUpKQTgwRkRRWWxCc0VJT1FtMUNza01WUTNkRHMwUHNSRUZFa2tUN1JXRkYzMFpkUnVaSGEwZllTQzVJWkVpY1NReEpjMG9xU3Q5TFVVdkVUQTlNVjB5RlRLTk0xRXpxVFA5TnRrNEtUaVpPUWs2RVRzeFBOMDliVDM5UHYwLzlVQkJRSTFBdlVFSlFnMURDVVA1Uk9sRk5VV0JSbFZIS1VnNVNYRkxUVTBaVFdWTnNVNkpUMkZQclUvNVVSMVNQVk1sVk0xV2JWZWhXTWxaRlZsaFdrMWJRVnVOVzlsY0pWeHhYY0ZmQldCSllJVmd4V0QxWVNWaUFXTjFaV2xuWVdsUmF5MXRBVzZGY0JGeFRYS1pjOTExSFhZeGQwVjVGWGxGZVhWNkpYb2xlaVY2SlhvbGVpVjZKWG9sZWlWNkpYb2xlaVY2SlhvbGVrVjZaWHF0ZXZWN2FYdlpmRWw4dVgwbGZWVjloWDVCZnNWL2ZYLzlnQzJBYllEaGhBR0VrWVVSaFcyRmtZVzFoZG1GL1lZaGhrV0dhWWROaDNHSGxZZTVoOTJJQVlnbGlFbUliWWlSaUxXS0ZZc0JqSVdNdFk0WmoxR1F1Wkg5azFHVWFaVnRsbkdZblpubG00MmNoWjI5bmhXZVdaNnhud21ndmFFeG9nMmlWYU1GcFcybVlhZmRxSm1wYWFvNXF3V3JPYXV4ckNHc1VhMUJya0d2emJGMXN3VzEzYlhkdWxHN2FieFJ2T1c5OGI5VndVSEJzY01WeERYRTJjYU54NFhINmNrZHlkWEttY3RKekUzTTJjMlp6aEhQbWRDbDBoblM5ZFFwMUxIVmVkWHQxckhYWWRldDJGWFprZHBCM0MzZGJkNXQzdUhmb2VFQjRZbmlMZUxGNDZuazllWVI1N1hvNmVvMTY2WHMwZTNaN3FYdnFmRFI4aG56MGZTQjlVMzJOZmNoOS9YNDBmbVorcUg3bmZ2Ti9LSDk3ZjkrQUxJQlhnTFNBOG9FeGdXeUI0SUhzZ2lhQ1pJS3BndCtEUDRPUWc5K0VRWVNkaFBXRllvV2xoZ0dHS29ac2hyNkcyWWRFaDVhSHFJZmxpQmlJeFlrbGlZT0p0NG5xaWh1S1VJcVJpdG1MUUl0d2k0Mkx1NHY2akIrTVJZeUZqTTZNK28wcGpYcU5nNDJNalpXTm5vMm5qYkNOdVk0SWpsK09vWTcxajFpUGQ0KzZrQUNRS3BCM2tKT1E2WkQ3a1hXUjJaSCtrZ2FTRHBJV2toNlNKcEl1a2phU1BwSkdrazZTVnBKZWttYVNlSktBa3VtVE5aTlRrNjJUK0pSU2xNT1ZFSlZybGNhV0Y1YUhsdGFXM3BkU2wzK1gwSmdKbUdXWW1KamNtTnlZNUprMW1ZYVp6Sm4wbWpXYVNKcGJtbTZhZ1pxVm1xbWF2NXJTbXVXYStKc0xteCtiTXB0Rm0xaWJiSnQvbTVLYnBadTRtOHViMzV2eW5BV2NHSndzbkQrY1VweGxuSGVjaVp5Y25MQ2N4cHpabk95Yy81MFJuU1NkTnAxSW5WdWRiNTJCblpTZHA1MjVuY3VkM3AzeG5nU2VGcDRwbmp5ZVQ1NWlublNlaDU2YW52T2ZoWitZbjZ1ZnZwL1FuK09mOXFBSm9CdWdMcUJCb0ZTZ1pxQjVvSXVnbnFDeG9ReWhoS0dYb2FtaHZLSE9vZUdoODZJR29obWlMYUpBb2xPaVpxSjVvb3lpbjZLeW9zV2kyS0xxb3Z5akQ2TWJveWVqT3FOTm8yR2pkYU9JbzV1anI2UERvOWFqNmFQMXBBR2tGS1FucER1a1Q2UmlwSFNraDZTYXBLeWt2NlRTcE9haytxVU5wU0NsTktWSXBWdWxiYVdBcFpPbHBxVzRwY3VsM3FYeXBnYW1HYVlycGorbVU2Wm1wbm1takthZ3ByT214YWJZcHVxbS9hY1FweVNuT0tkTXAyQ250NmdacUN5b1A2aFNxR1NvZUtpTHFKNm9zYWpFcU5lbzZhajhxUStwSXFrMXFVR3BUYWxZcVd1cGZxbVFxYUtwdHFuS3FkYXA0cW4xcWdpcUdxb3RxaitxVWFwa3FuaXFpNnFlcXJHcXc2cldxdXFxL2FzUXF5S3JOcXRKcTF1cmJxdkJxOVNyNXF2NXJBdXNIYXd2ckVHc1ZLeXJyTDJzejZ6aXJQV3RDYTBiclM2dFFhMVVyVit0Y2EyRXJaQ3RvcTIycmNLdHpxM2hyZTJ1QUs0U3JpV3VPYTVNcmxpdWFxNTlybyt1bTY2dHJzR3UwNjdmcnZHdkE2OFdyeXF2UHErVXI2ZXZ1YS9NcjkrdjhyQUVzQmV3SzdBM3NFdXdYN0J5c0lhd203Q2pzS3V3czdDN3NNT3d5N0RUc051dzQ3RHJzUE93KzdFRHNRdXhIN0V6c1VheFdiRnNzWDZ4a3JHYXNhS3hxckd5c2JxeHpySGhzZlN5QjdJYXNpNnlRYkttc3E2eXdyTEtzdEt5NWJMNHN3Q3pDTE1Rc3hpeks3TXpzenV6UTdOTHMxT3pXN05qczJ1emM3TjdzNDZ6bHJPZXMrZXo3N1AzdEFxMEhiUWx0QzIwUWJSSnRGeTBiclNCdEpTMHA3UzZ0TTYwNHJUMXRRZTFEN1VYdFNPMU5yVSt0VkcxWkxWNXRZNjFvYlcwdGNlMTJyWGl0ZXExL3JZU3RoNjJLclk5dGxDMlk3WjJ0bjYyaHJhT3RxRzJ0TGE4dHMrMjRyYjJ0d20zRWJjWnR5eTNQcmRTdDFxM2JiZUJ0NVczcWJlOHQ4KzM0YmYxdUFtNEhiZ3d1RGk0UUxoVXVHZTRlN2lPdUtHNHM3akh1TnE0N3JrQ3VSYTVLYms5dVZHNVdibHR1WUc1bExtbnVidTV6cm5pdWZXNkNib2N1akM2UTdwZ3VueTZrTHFqdXJlNnlycmV1dkc3QmJzWXV6VzdVcnRtdTNxN2pidWd1N083eGJ2WnUreThBTHdUdkNlOE9yeE92R0c4ZnJ5YXZLMjh3THpVdk9pOC9MMFF2U085TnIxS3ZWMjljYjJFdlppOXE3Mi92ZEs5Nzc0THZoNitNYjVFdmxlK2FyNTl2cEMrb3I2MnZzcSszcjd5dndXL0dMOHJ2ejYvVWI5a3YzZS9pcitkdjYrL3c3L1h2K3UvLzhBU3dDWEFPTUJLd0dmQWVzQ053S0RBczhER3dObkE3TUQvd1FmQlNzR013YkhCMXNJWHdsckNpc0svd3ZmRExzTTJ3MHJEVXNOYXcyTERhc055dzNyRGdzT0t3NUxEcGNPNHc4dkQzc1B5eEFiRUdzUXV4RUxFVnNScXhIN0Vrc1NteExyRXpzVGF4TzdGQXNVV3hTckZQc1ZTeFdiRmVzV054YURGdE1YSXhkekY4TVlFeGhqR0xNWkF4bFRHWjhaNnhvN0dvc2EyeHNyRzNzYnl4d2JIR2Njcnh6L0hVOGRueDN2SGo4ZWp4N2ZIdzhmUHg5dkg1OGZ6eC8vSUM4Z1R5QnZJSThncnlEUElPOGhEeUV2SVU4aGJ5R1BJYThoenlIdklqOGlpeUxYSXlNalF5TmpJN01qMHlRZkpHc2tpeVNySk1zazZ5VTNKVmNsZHlXWEpiY2wxeVgzSmhjbU55Z25LUGNxUXlwaktwTXEzeXNuSzBjcmR5dkRMQThzUHl5TExOY3RKeTFYTGFNdDd5NDdMb2N1dHk3bkx6UUFHQUdRQUFBTW9CYkFBQXdBSEFBc0FEd0FUQUJjQUFFRVZJVFV6RVNNUklSRWpFUk1WSVRVQkFTTUJFUUV6QVFNSi9YWWJOZ0xFTmhmOWRnS0svYTg2QWxIOXJ6b0NVUVd3TmpiNlVBV3crbEFGc1BxR05qWUZYUHFNQlhUNmpBVjArb3dBQWdBei8vQUNIQVd3QUFNQUR3QVRRQWtDQWdjTkMzSUFBbklBS3l2ZHppOHdNVUVESXhNRE5EWTNOaFlYRkFZakJpWUNITW5MbS9CT09UaE5BVTQ1T0UwRnNQdjlCQVA2dmp0TEFRRkhPVGxNQVVZQUFnQ2RBL2dDdkFZQUFBVUFDd0FNc3drREN3VUFMelBOTWpBeFFRY0RJeE0zSVFjREl4TTNBWmtYVzRvN0Z3SE5GMXlKUEJZR0FKWCtqUUYwbEpYK2pRRjhqQUFFQURJQUFBVGNCYkFBQXdBSEFBc0FEd0FqUUJFRUFBVU5EZzRBQ2drSkFBSUNjZ0FTY2dBckt4RTVMek1ST1M4ek1oRXpNREZ6QVRNQk13RXpBUUVoTnlFRElUY2hnZ0lBcHYzLzFRSUJwUDRBQWgvOERoc0Q4N2Y4RFJzRDh3V3crbEFGc1BwUUEzV2IvWXFiQUFNQVFmOHNCRWtHbVFBREFBY0FQUUEyUUJ3RUJ6bzZDQ3NRSXdRVUx6VTFCaThOY2dFQ0h4OFVHaG9ERkFWeUFDdk5NeThSTXhJNU9Tdk5NeThSRWhjNU14STVPVEF4UVFNakV3TURJeE1CTmlZbUp5NENOejRDRng0REJ5TTJMZ0luSmdZR0J3WVdGaGNlQWdjT0FpY3VBemN6Qmg0Q0Z4WTJOZ05JTUpjd2V5cVdLd0ZhQ0RGYk5XV25YUWdJaU5WOWFKWmZLUVhxQWdvaVJUaEJZejBIQ0RGZE5tU2xYUWdLa04rQmFhRnNOQVhzQXhFdFVEcERjRWtHbWY3VkFTdjVuLzcwQVF3QlNrRmFQeFlyY0tSN2dibGlBd0pLZ0twZ0xWOVJNd0VDTldBL1ExZzlHQ3R5cEhtSXVGd0NBa1I4cVdZMFlFc3JBUUV4WHdBQUJRQzEvK2dGT0FYSUFCRUFJd0ExQUVjQVN3QWpRQkZKTWtzRk8wUXBNaGNPSUFVRmNqSU5jZ0FyS3pMRU1oREVNak1STXhFek1ERlROejRDRng0Q0J3Y09BaWN1QWpjSEJoWVdGeFkyTmpjM05pWW1KeVlHQmdFM1BnSVhIZ0lIQnc0Q0p5NENOd2NHRmhZWEZqWTJOemMySmlZbkpnWUdBUUVuQWJvR0NWbU9XMWQ4UHdZR0NWaU9XbFo5UUxJSkF4TXlMQzFES0FjS0F4SXlMQzVFS1FGcEJnaGFqbHBYZkQ4RkJnbFhqMXBXZlVDeUNBSVNNaXN2UXlnR0NnSVNNaXd1UkNrQldQeVJkd053QkV0TVdJdE9BZ0pRaUZSTldJbE5BZ0pQaDZGUUpVWXVBUUVzU1NsT0prZ3ZBUUV0U2Z4VlRWaUtUZ0lDVUlkVVRsaUpUZ0lDVUllaVVTVkdMd0VDTEVvcVR5WklMZ0VCTEVrRFNmdVlUZ1JuQUFFQUtmL3FCSjRGeHdCQ0FDUkFGQ01TQUE4aUFRWWFNREFyRVJFN0UzSUhHZ055QUNzeUt6SXZNakl2RVJjNU1ERkJKVFkyTnpZbUp5SUdCZ2NHRmhZWEFTRUJMZ0kzUGdJWEhnSUhEZ0lIQlE0Q0J3WVdGaGNXUGdJM013NENCd1lHQndZR0p5NENOejRDQVh3QkVEWlVCd1pHT1ROTU1BWUhKajRjQWgzL0FQNUdMRlkzQmdodHMzSlprMVFGQkVGbE9mNnpKRUl1QmdncVdrQm9yWU5SRGNrS1BtNU9DUkVLVnVGMGRzQnNDQWRta3dNWnFTTlpRenBMQVROU0x6Wm9YeXI4MUFLVlFJMlpVbkNzWGdNQ1Q0eGRTbmRnSjk0YVJGQXVQMkk2QXdOYm03eGNhTHVqUlFnVENVeFFBZ05oczMxaGxYTUFBUUNSQS80QmxRWUFBQVVBQ0xFREJRQXZ4akF4UVFjREl4TTNBWlVYVXBzOUZBWUFpLzZKQVlHQkFBQUJBR2orTVFNWEJsOEFGd0FJc1FZVEFDOHZNREZUTnpZU0VqWTNGdzREQndjR0JoWVdGd2NtSmdJQ2VRTVZYNXJhanlScW0yeERFd01QRGhsWVdEZDhrMFFIQWpzUmtnRTRBU0RvUVkxUHpldjhmaFZtK3YzZlRJTk05QUVoQVNnQUFBSC9sUDR3QWtzR1hRQVhBQWl4RXdZQUx5OHdNVUVIQmdJQ0JnY25QZ00zTnpZMkppWW5OeFlXRWhJQ09nSVZZWnpka1NScG0yMURFd1FPRGh0WFZ6bDdsVWNKQWxVUmsvN0kvdDdtUVlkUXp1MytmaFprK2Y3Z1M0Tk04djdlL3RrQUFRQm9BazREcWdXeEFBNEFGRUFLRFFFSEJBUU9EQVlDY2dBcnhESVhPVEF4VXhNbE53VVRNd01sRndVVEJ3TURqUG4rNDA0Qkd5K3JUQUUwRi82OG01R0I0QUxGQVE1Wm5YZ0JZUDZsY3E5Yi91OWZBU1ArNlFBQUFnQThBSklFS3dTMkFBTUFCd0FRdFFjSEF3TUdBZ0F2eGpNUXhpOHdNVUVISVRjQkF5TVRCQ3NsL0RZbUFwNjQ1TGdESHRuWkFaajczQVFrQUFBQi80Lyt1QUVWQU9nQUNnQUlzUVFBQUMvTk1ERmxCd1lHQnljK0FqYzNBUlVkRW41ZGZDRThMUXNnNkt0MXlVZE5NRjVtT3JVQUFBRUFRQUlPQW1VQ3pnQURBQWl4QXdJQUx6TXdNVUVISVRjQ1pTTDkvU0VDenNEQUFBRUFMdi95QVVJQS93QUxBQXF6QXdrTGNnQXJNakF4ZHlZMk56WVdGUllHQndZbUx3RlFPanBQQVZBN09GQjBPMDRCQVVrNk8wMEJBVWdBQUFIL2Z2K0RBM2tGc0FBREFBbXlBQUlCQUM4L01ERkJBU01CQTNuOHg4SURPUVd3K2RNR0xRQUNBRi8vNkFRNEJjZ0FGd0F2QUJOQUNTc0dIeElGY2dZTmNnQXJLeklSTXpBeFFRY09BeWN1QkRjM1BnTVhIZ1FCRXpZMkxnSW5KZzRDQndNR0JoNENGeFkrQWdRdEpSSktnY1NMYW85WUtBUUxJeEpNZ2NTSmFwRlhLUVQrNFM0RkNRY2hSanRTYkVNakNpMEZDUVlnUmp4U2JVRWtBMUx0ZCtTM2F3UUNUSUNoc2xmdWQrSzFhQVFDU24yZ3NmNllBVFlxYUdoWk9RSUVTM3VPUVA3TEtXbHNXenNEQTB4K2tRQUFBUUR4QUFBRGVRVzFBQVlBRExVR0JISUJESElBS3lzd01VRURJeE1GTnlVRGVmZnJ6UDZPSlFKQkJiWDZTd1NTZWRITEFBRUFEUUFBQkR3Rnh3QWZBQmxBREJBUURCVUZjZ01mSHdJTWNnQXJNaEV6S3pJeUx6QXhaUWNoTndFK0FqYzJKaVluSmdZR0J3YytBaGNlQWdjT0F3Y0JBOThlL0V3YkFoSXpjVmNMQnlCUlFsRjFSUXJwQzVIbmluZThaZ3NIU0d0Nk9mNlZ3TUN1QWYweGRvWkxQR1pBQVFOS2Zrc0JpOU4wQWdKY3NIMVVsb2Q0TnY2bEFBQUNBQ2IvNmdRNEJjY0FIQUE3QUNwQUZoc2NIaDhFQUFBZEhSSXpMeThwRFhJTkRRa1NCWElBS3pJeUx5c3lMeklST1M4ekVoYzVNREZCRno0Q056WW1KaWNtQmdZSEJ6NENGeDRDQnc0REl5Y0hOeGNlQXdjT0F5Y3VBemN6QmhZV0Z4WTJOamMySmlZbkFhS0NTbnRRQ0Fja1ZFRkNhVVFMNndxUTJYbDZ3R2dKQmx1TnBsRytDQmFpVlp0M1B3WUhXNUszWTEyY2N6d0M2Z012WEVOS2VFc0lDVEJsU1FORkFnSTFhRXhBWURjQ0FUUmZQd0YrdFY4Q0FtQzFnRnlKWEM4Qk5vUUJBaXhYaVdCb3BIQTRBZ0k2YXBoZlFXSTRBZ0k4Ymt0TFpqWUNBQUFDQUEwQUFBUXJCYkFBQndBTEFCMUFEZ01IQndZQ0FnVUpESElMQlFSeUFDc3lLeEk1THprekVqa3dNVUVISVRjQk13a0NBeU1UQkNzaS9BUVVBd0xML3ZIK1FnTDcvT3Y4QWdmQW5RUE0vcEQ5eUFPbytsQUZzQUFCQUZqLzZBUnpCYkFBS1FBZFFBNG5DUWtDSFJrWkV3MXlCUUlFY2dBck1pc3lMeklST1M4ek1ERkJKeE1oQnlFRE5qWXpNaDRDQnc0REp5NERKek1lQWhjV1BnSTNOaTRDSnlZR0FYakF2Z0w5SVAzS1p6SnpPMmFUV2lNSUNWS0p1VzVjbDI0K0F1VUVLbFpEUW1KRkpnWUZFQzlTUEVCcEFxWXhBdG5NL3BvZUhWQ0hyRjFzdG9aSkF3RStiNWRiUG1ROEFnRTBXWEE2TldSUUx3SUJMQUFCQUYzLzZRUU9CYm9BTmdBYlFBME9MQmdpSWl3REFBUnlMQTF5QUNzck1oRTVMek1STXpBeFFUTUhJeVlPQWdjSEJoNENGeFkrQWpjMkxnSW5KZ1lHQnljK0F4Y2VBd2NPQXljdUF6YzNOaEkySkFPcEl4UU1kc0tUWGhFZkJnVWtUa00vWWtVb0JnVUxLVXM3UjNoVUVGY1BUSE9YVzJPS1ZTQUlDVk9JdDIxenBHUW1EQTBZZmMwQkd3VzZ4UUZLaXIxeDVqTjRiVWdDQWpWYmJqY3daMWczQWdGQmJrSWZWWk51UEFNQ1ZJcXBWMm00alU0REFtU2t5R2RrcVFFbjRYOEFBUUNHQUFBRW13V3dBQVlBRTBBSkFRVUZCZ1J5QXd4eUFDc3JNaEV6TURGQkJ3RWhBU0UzQkpzVy9RUCsvZ0w1L1NvZkJiQ1ErdUFFOE1BQUJBQTMvK2tFUWdYSEFCQUFJQUF3QUVBQUlVQVFEVDA5SlMwVkZRUTFMUVZ5SFFRTmNnQXJNaXN5RWprdkVqa3pFamt3TVVFT0FpY3VBamMrQXhjZUFnYzJKaVluSmdZR0J3WVdGaGNXTmpZQkRnSW5MZ0kzUGdJWEhnSUhOaVltSnlZR0JnY0dGaFlYRmpZMkErSUtrK1dEZWNKckNRZGNrckpkY3NOeDhRY25WME5LZFVvSUJ5ZFlSRXAwU1FGSkNJL1djMnEyYWdjSWg5WjlkYlJnOVFVZ1N6eENaandIQmg1TVBVSmxQZ0dWaXNCaUF3Smh0WUZqbTJrMUFnSmVyMjQvYVVJQkFrTjFSa0ZuUFFFQ1AzRUM0SHF1V3dNQ1dhTnlncnRoQXdKZ3NJRTNZRDBCQVQ1cVB6ZGhQUUVCUDJzQUFBRUFqUC8yQkN3Rnh3QTRBQnRBRFFBNEZpRWhPQXdyQlhJNERISUFLeXN5RVRrdk14RXpNREYzTXhZK0FqYzNOaTRDSnlZT0FnY0dIZ0lYRmo0Q054Y09BeWN1QXpjK0F4Y2VBd2NIRGdRSEkrRVBkN3lNV0JFakJnUWlTME0rWVVRbkJRVUtKMGs3T0dGTU5BdFdDVXAzbDFWa2pGVWhCd2xUaDdodWVLRmFIUXNMRWxXSHZQQ1VHNzBCUVh5MGMvd3dlM0JNQVFNNlgzSTJNR2RiT2dJQktVcGVNeHhSbDNaRkFnSlVpcXBZYUwyUlVRTUNhNnpPWmxlSjljbVNVQUgvL3dBbi8vSUIwQVJUQkNZQUV2a0FBQWNBRWdDT0ExVC8vLytmL3JnQnZRUlRCQ2NBRWdCN0ExUUFCZ0FRRUFBQUFnQXpBSzBEeHdSU0FBUUFDUUFXUUF3QkF3Y0dBQVFJQlFnQ0NRSUFMeThTRnprd01WTUJCd0UzSlFVSE53SHJBbUlvL1E0YUEwLzlYOFFjQTNRQ2tmNys0Z0YwbEtiOEpxWUJjd0FBQWdCZ0FXUUVHQVBTQUFNQUJ3QU90UVlIRWdNQ0VBQS9Nejh6TURGQkJ5RTNBUWNoTndRWUkveTBJd01ESlB5MUlnUFN4c2IrV01iR0FBSUFMUUNpQTljRVNBQUVBQWtBRlVBTEJRZ0VBQVlEQVFjQ0NRSUFMeThTRnprd01VRUJOd0VIQlNVM0J3RURGdjJUSndNSEcveWNBcTdOSHZ4NEFta0JBTi8rakpXcCt5dW0vb3dBQUFJQWsvL3lBOW9GeHdBZ0FDd0FHMEFOQVFFa0pDb0xjaEVSRFJZRGNnQXJNakl2S3pJUk15OHdNVUVIUGdJM1BnSTNOaVltSnlZR0JnY0hQZ0lYSGdJSERnSUhCZ1lCTkRZM05oWVZGZ1lIQmlZQ0Y5WUlMMVEvTFZwRENRWVdRVGc2V1RrTDZ3MkJ5bmx5cTFrS0IxMkdSRDVCL3N0Tk9UbE5BVTQ2TjAwQnJRSlRobkkySmxGaVB6SlZOQUlCTUZZM0FYeXVXUUlEVzZoMVg1VjdPREY0L25ZNlRBRUJSems2U2dFQlJnQUFBZ0F1L2pvR3FRV1JBRUVBYUFBblFCSVNCUVZIVWhOeVlXUmtDMTFkSFIwOEtUQUFMek12TXhFekx6TXpFVE1yTWpJUk16QXhRUTRESnk0RE54TXpBd1lHRmhZWEZqNENOelkwTGdJbkpnNERCd1lHSGdJWEZqWTNGd1lHSnk0REFqYzJFalkySkJjZUF4SUZCZ1lXRmhjV1BnSTNGdzRESnk0RE56NEVGeFlXRndjbUppY21EZ0lHa2hCSmQ2aHZSbDB6RFFxUHJvNEZCZ29tSmtscFJpb0tGRFJ5dVlhSDZiMlJZQmdWQVROeHVJVllxbEFjVU1OZG9PeWVWQTRZRzNheDZBRVpvSnptbWxNUisvOEdDd290TWk1Sk9Tb1BRaGRFV1hKR1ZXTXJBUXdPTzFsMmxWbFZpRU5sSTFZelVYWlFNUUlPWDhPallnTUNPMkYxUFFJNS9jY2JRajBwQWdOU2c0dzNjdHEva2xRQ0ExbWUwZTE2Yjl6RG1WZ0JBU1lqaHpNbEFRSmtyK2NCREkrVEFScjB1R1lDQW1LczQvNzc5aUZjV1Q4Q0FqRk9WU0pYT25KY05nSURWNFdXUVV1aWxuaEZBZ0U5TW5Va0tBSUNVWU9WQUFBRC82TUFBQVNyQmJBQUJBQUpBQTBBS1VBVUJBY0hDZzBOQmdBTERBd0NDQU1DY2dVQ0NISUFLeklyTWhFNUx6TTVPVE1STXpJUk16QXhRUUVoQVRNVEF6Y3pBUU1ISVRjREtQMkYvdllERUt0VXpnK2ZBUm15SS96K0l3VGgreDhGc1BwUUJQeTArbEFDSE1mSEFBSUFKdi8vQkxjRnNBQVpBREFBS1VBVUdTa21BaWNuQVNZbURnd1BBbkljR3hzT0NISUFLeklSTXlzeUVUa3ZNek1STXhJNU9UQXhRU0UzQlRJMk5qYzJKaVluSndNakV3VWVBd2NPQWdjRElUY0ZNalkyTnpZbUppY2xOd1VYSGdJSERnSUN0LzZNSGdFdFI0QllDd2t2WWtMNDJ2YjlBZEZkcG4xREJ3aDR1V2JUL2orUUFUaExnRlVMQ1NKWVJ2N2dJZ0ZhS2w2SFF3WUxuUElDa3JjQkxWOU5TRlluQVFIN0dBV3dBUUlyV3BGcGNKVlBDdjB3eHdFMGFVMUVZemNEQWJjQlJRbFprbCtXd0ZzQUFRQmYvK2dGQ2dYSEFDY0FGVUFLR1JVUUEzSWtBQVVKY2dBcnpETXJ6RE13TVVFM0JnWUVKeTRETnpjK0F4Y2VBaGNuTkNZbUp5WU9BZ2NIQmhRV0ZoY1dOallEdHZBWXJmNzhuSS9DYmlNUkVSUnFxK3lWbWRGd0JmTXZiRjVtbEdVNkRSSUtLV2xnWkk5ZEFka0RuT0YzQkFONHhmSjllWWI2eEc4REEzL2dsQUZXaGs0REExU1FyMVo4U0thVVlRTUVSb1lBQWdBbUFBQUUyUVd3QUJvQUhnQWJRQTBDQVFFZERnOFBIZ0p5SFFoeUFDc3JNaEV6RVRNUk16QXhZU0UzQlRJMk5qYzNOaTRDSnlVM0JSNERCd2NPQWdRREF5TVRBZEQrd3lVQkg1UFBleFVLQ3dzK2ZHZit0U01CTDVMVmhqTVFDaFY4eFA3L1VQMzIvY2NDaHVDSFVGV3BqVmNEQWNnQkEzRy85b2RPay8yNlp3V3crbEFGc0FBQUJBQW1BQUFFdkFXd0FBTUFCd0FMQUE4QUhVQU9Dd29LQmc4T0J3SnlBd0lHQ0hJQUt6SXlLekl5RVRrdk16QXhaUWNoTndFREl4TUJCeUUzQVFjaE53UG9JLzBSSWdFaC9mYjlBdE1pL1hJakExTWovUllreDhmSEJPbjZVQVd3L2FERXhBSmd5TWdBQUFNQUpnQUFCS2tGc0FBREFBY0FDd0FiUUEwSEJnWUNDZ3NMQXdKeUFnaHlBQ3NyTWhFekVUa3ZNekF4UVFNakV3RUhJVGNCQnlFM0Fobjk5djBDeHlQOWdTTURQaVA5TUNRRnNQcFFCYkQ5ZzhmSEFuM0l5QUFCQUdiLzZ3VVhCY2NBS3dBYlFBMHJLaW9GR1JVUUEzSWtCUWx5QUNzeUs4d3pFamt2TXpBeFFRTU9BaWN1QXpjM1BnTVhIZ0lYSXk0Q0p5WU9BZ2NIQmg0Q0Z4WTJOamNUSVRjRTVsayt1ZEJmbE14NEtSRVBFMm1yN3BxVDBIVUs3UWMzYkZOcGwyWThEUThLQmpWMVpEVm1YaW8xL3RvaEF1ajkwMUJiSlFFQ2Q4YjNoR1NML2NWd0F3Snh6cEJQZGtNREJGaVRzbGhvVDZ5V1hnSUJEeWNqQVNHN0FBQURBQ1lBQUFXRkJiQUFBd0FIQUFzQUcwQU5DUVlJQXdJQ0JnY0NjZ1lJY2dBckt4RTVMek15RVRNd01VRUhJVGNUQXlNVElRTWpFd1JoSS8wUUk2ajk5djBFWXYzei9BTlF4OGNDWVBwUUJiRDZVQVd3QUFFQU53QUFBaWtGc0FBREFBeTFBQUp5QVFoeUFDc3JNREZCQXlNVEFpbjk5ZjBGc1BwUUJiQUFBQUVBQlAvb0JGMEZzQUFUQUJOQUNSQU1EQWNKY2dJQ2NnQXJLekl2TWpBeFFSTXpBdzRDSnk0Q056TUdGaFlYRmpZMkFydXU5SzRUamVDTmhydGRCL1lGSFZCSlRHOURBYlFEL1B3Rml0QnpBZ05ydzRaQ2FrRUNBa2QzQUFBREFDWUFBQVZ5QmJBQUF3QUpBQTBBSEVBUUJnY0xCUXdJQmdJRUF3SnlDZ0lJY2dBck1pc3lFaGM1TURGQkF5TVRJUUVCRXdFQkF3RTNBUUlaL2ZiOUJFLzlSLzUzQVFFWUFlN0ovcUM5QWJZRnNQcFFCYkQ5UC82WkFRd0JJd0g1K2xBQ3ZLTDhvZ0FBQWdBbUFBQUR3QVd3QUFNQUJ3QVZRQW9EQWdJR0J3SnlCZ2h5QUNzckVUTVJNekF4WlFjaE53RURJeE1Ed0NQOU9TTUJJUDMyL2NmSHh3VHArbEFGc0FBQUF3QW1BQUFHemdXd0FBWUFDd0FRQUJ0QURRSUhEZ1VMQ0hJTUJBQUhBbklBS3pJeU1pc3lNaEU1TURGQk14TUJNd0VqQVRNREF5TUJNd01qRXdHTDBkVUNXdVQ4Nks3K2V0Q0ZVL1VGMXRMOTlWY0ZzUHVmQkdINlVBV3cvQ3YrSlFXdytsQUI4QUFCQUNZQUFBV0dCYkFBQ1FBWFFBc0RDQVVKQndKeUFnVUljZ0FyTWlzeUVqazVNREZCQXlNQkF5TVRNd0VUQlliOTd2NDN0dmI5N2dIS3R3V3crbEFFSGZ2akJiRDc0UVFmQUFJQVl2L3BCU0lGeHdBVkFDc0FFMEFKSndZY0VRTnlCZ2x5QUNzck1oRXpNREZCQndZQ0JnWW5MZ00zTnpZU05qWVhIZ01GTnpZdUFpY21EZ0lIQndZZUFoY1dQZ0lGRWdvVWE2M3dtWkxJY1NZUUN4UnNydkNZazhkeEpQN3dDd2tDTG0xa1o1bG9QUXdMQ2dNdWJtSnBtR2c5QXdKUGl2Ny95M1FEQTN6TStZQlBpUUVBeTNRREEzdk0rTkpUUzZ1WllnUUVXWmEwVjFOS3JKcGxBd1JhbHJRQUFRQW1BQUFFK2dXd0FCY0FGMEFMQWdFQkRnd1BBbklPQ0hJQUt5c3lFVGt2TXpBeFFTVTNCVEkyTmpjMkppWW5KUU1qRXdVZUFnY09BZ0tzL29JakFXTlRpMXNMQ3l4a1RQN1AydmI5QWd1SDFIRU1EYVgrQWg0Qnh3RTVjbGhLY1VFREFmc1lCYkFCQTIzSWpaM05ZZ0FBQXdCZS93TUZIZ1hIQUFNQUdRQXZBQmxBRENBVkEzSUFLeXNEQ2dseUFnQXZLekl5RVRNck1qQXhaUUVIQVFFSEJnSUdCaWN1QXpjM05oSTJOaGNlQXdVM05pNENKeVlPQWdjSEJoNENGeFkrQWdNcUFVcXIvcndDaVFzVGE2N3dtSlBJY1NVUUNoUnNydkdYazhkeUpQN3ZDd2tCTG01amFKaG9QZ3dMQ1FJdWJtTm9tV2M4d3Y3SGhnRTJBc2xQaXY3K3luUURBM3pNK1lCUWlBRUF5M1FEQTN2TCtkSlRTNnVaWWdRRVdaYTBWMU5LckpwbEF3UmFsclFBQUFJQUpnQUFCTlVGc0FBWUFCMEFJMEFTR3hvSkF3d01Dd3NBSEJrWUNISVdBQUp5QUNzeUt6SXlFamt2TXhJWE9UQXhRUVVlQWdjT0FnY0hJVGNGTWpZMk56WW1KaWNsQXlNaEF6Y1RGUUVqQWVlRjAzTU1DV1dqWjFIK01TRUJSRkNJV2dzS0xHUksvdlBhOWdNdDIvWHJCYkFCQTE2OGtIU2pjQ1VreHdFN2NWSk1hamtDQWZzWUFvNEIvWDhPQUFFQUp2L3FCTDBGeGdBNUFCOUFEd29tRHpZeE1Tc0pjaGdVRkE4RGNnQXJNaTh5S3pJdk1oRTVPVEF4UVRZdUFpY3VBemMrQXhjZUFnY2pOaVltSnlZR0JnY0dIZ0lYSGdNSERnTW5MZ00zRndZZUFqTVdOallEVUFrb1MxNHVUSlIzUWdZSVo2QytYb1hRZGdYMEJqRm9UVVdBV1FzSUxWQmNLRkdWZEQ0SENXYWV2bUZudDRwTEJQUUVJVVpsUDBTQld3RitPMUUzSmhFYlNtYUxYV21iWmpFQ0EyekdpRXh0UFFFQ0xWNUtORXcwSkE0Y1RXcVJZV3ViWWk0Q0FUNTNxbTBCUUdOQ0lnSXFXd0FBQWdDZEFBQUZKUVd3QUFNQUJ3QVZRQW9BQXdNR0J3SnlBUWh5QUNzck1qSVJNekF4UVFNakV5RUhJVGNEYXZ6MC9RS3VJL3ViSXdXdytsQUZzTWpJQUFFQVdQL29CVEVGc0FBVkFCTkFDUUVSQmdzQ2NnWUpjZ0FyS3hFek1qQXhRVE1ERGdJbkxnSTNFek1EQmhZV0Z4WTJOamNFUFBXbUY2WC9ucFhhYXhLbTlLVUtKbXBiWVk5WURnV3cvRFdkNW5vREEzM2hsd1BOL0RKVWgxSUNBMHVNWEFBQ0FKb0FBQVYvQmJBQUJBQUpBQmRBQ3dBR0NBRUpBbklEQ0FoeUFDc3lLeklTT1Rrd01VRUJJUUVqQXhNWEl3RUNRQUlwQVJiOUlyNUV1UWl5L3V3QkZRU2IrbEFGc1B0UC93V3dBQUFFQUxVQUFBYzZCYkFBQlFBS0FBOEFGUUFiUUEwUURBRUtBbklURWc0RUNRaHlBQ3N5TWpJeUt6SXlNakF4UVFFekF3RWpFeE1ESXdNQkFUTUJJd01UQXlNREV3SElBY1dXUGY0aG5UbzJIcU5rQkFFQmpQajkxcVlQWndlWWRCb0JVZ1JlL3RMN2ZnV3crNVQrdkFXdys2NEVVdnBRQmJEN2lQN0lCSmdCR0FBQUFmL0FBQUFGUmdXd0FBc0FHa0FPQndRS0FRUUpBd3NDY2dZSkNISUFLeklyTWhJWE9UQXhRUk1CSVFFQklRTUJJUUVCQWNuWUFYNEJKLzNiQVQvKzhONytlUDdXQWpMK3lRV3cvZThDRWYwai9TMENIUDNrQXVvQ3hnQUJBS0VBQUFWUUJiQUFDQUFYUUF3RUJ3RURCZ01JQW5JR0NISUFLeXN5RWhjNU1ERkJFd0VoQVFNakV3RUJwczRCd0FFYy9YeGI5MkQreHdXdy9Vc0N0ZnhjL2ZRQ0pRT0xBQVAvNVFBQUJPc0ZzQUFEQUFrQURRQWZRQThFREF3SkRRSnlCd01EQWdJR0NISUFLeklSTXhFekt6SXlFVE13TVdVSElUY0JBU00zQVRNakJ5RTNCQ2NqL0NvakJIMzd3NndlQkQ2cVd5UDhWeVBIeDhjRVEvcjJxd1VGeU1nQUFBSC84UDY2QXJRR2p3QUhBQTYwQXdZQ0J3WUFMeTh6RVRNd01VRUhJd016QnlFQkFyUWVuLytnSGY1MUFUa0dqN3I1b0xzSDFRQUFBUUNyLzRNQ3h3V3dBQU1BQ2JJQkFnQUFMejh3TVVVQk13RUI1djdGNFFFN2ZRWXQrZE1BQUFIL2V2NjZBa0FHandBSEFBNjBCUVFBQVFRQUx5OHpFVE13TVZNM0lRRWhOek1UbGg0QmpQN0gvbk1kb2Y0RjFicjRLN3NHWUFBQUFnQkVBdGtETVFXd0FBUUFDUUFXUUFrSUJ3Y0dBQVVDQXdJQVA4MHlPVGt6RVRNd01VRUJJd0V6RVFNbk14TUNJUDcwMEFHaGtXZ0NncU1Fdi80YUF0ZjlLUUgrMmYwcEFBQUIvM24vUkFNUkFBQUFBd0FJc1FJREFDOHpNREZoQnlFM0F4RWgvSWtodkx3QUFRRFBCTk1DV1FZQUFBTUFDcklEZ0FJQUx4ck5NREZCRXlNREFjdU90TllHQVA3VEFTd0FBQUlBSFAvcEE5RUVVQUFiQURvQUtVQVZLeXdlSng0Nk9nOG5NUXR5R0JrS2Nna0ZEd2R5QUNzeU1pc3lLeklTT1M4ekVSSTVPVEF4WlJNMkppWW5KZ1lHQndjK0F4Y2VBZ2NEQmdZWEJ3Y21OQk1ISnlJT0FnY0dGaFlYRmpZMk54Y09BeWN1QWpjK0F6TUNpRklHR2tVNE1sZzlDdXNHV1ltZlRHNnFXUXRQQ1FjVEF1a1BkUmljTUdWWVBBY0ZIMEFzTzNOVkVEOFdUMmg3UVZxVVZnVUZZWm0yV2RrQ0J6UlVNUUVCSTBReEFWVi9VeWNCQWxxa2RQNGVPWGMzRWdFMWJ3SHZsUUVTTEVzNExVRW1BUUV3V1Rwc1BXWktLQUVDVDQ1ZGFZMVRKQUFEQUJELzZBUVJCZ0FBQkFBYUFDOEFHVUFPSVJZSGNpc0xDM0lFQ25JQUFISUFLeXNyTWlzeU1ERkJNd01ISXdFSERnTW5MZ00zTno0REZ4NERCemMyTGdJbkpnNENCd2NHRmhZWEZqNENBUnZzNVR2WEEvY0NEVU4xcTNSbmlVNGNCQWdSUzNpbmEzQ01TUlA0QXdZQkhrdEdQbVJNTWcwY0F5aGNTMHRwUXlZR0FQcloyUUl0RldUSHBHRURBbUtjdDFoRVhiMmRYUU1EWmFDK2NCWXplR3hGQWdNdFQyWTN0ME44VVFJRFFteUNBQUFCQURmLzZnUG1CRkVBSndBWlFBd2RHUmtVQjNJRUJBQUpDM0lBS3pJeUx5c3lMekl3TVdVV05qWTNOdzRDSnk0RE56YytBeGNlQWdjbk5DWW1KeVlPQWdjSEJoNENBZUE3WWtFTjN3Mkp5M0Z6bzJRbkNnUU1VNHUrZDNpdVhBSGRKVTgvU21sRkp3Y0VCUU1pVDZzQkxsWTRBWFNzWFFJQ1dwakJhQ1J2eHBsV0F3SnF0M1VCT0dFOUFnSSthbjgrSXpWNWFrUUFBQU1BT1Avb0JJY0dBQUFFQUJvQUx3QVpRQTBoQkFRV0MzSXJDd2R5QVFCeUFDc3JNaXN5THpJd01XVVRNd0VqQVRjK0F4Y2VBd2NIRGdNbkxnTTNCd1llQWhjV05qWTNOell1QWljbURnSUN1ZUh0L3ZYVS9aa0NEVVYzclhWbWlFMGNCUWdRVEhtbmEydU1UQmI1QWdZQ0gwdEVUM3RTRVJ3REV6QlBPRXByUlNqdUJSTDZBQUlKRldUSXBtSURBMlNldDFkRVhMeWNYQU1FWmFHN2NCVTBkbXRHQXdOT2ZrZTNNbUpRTXdFRFFtNkNBQUVBT3YvckEvQUVVUUFyQUI5QUVHY1RBUVlURWhJQUdRc0hjaVFBQzNJQUt6SXJNaEU1THpOZlhUQXhSUzRETnpjK0F4Y2VBd2NISVRjRk56WW1KaWNtRGdJSEJ3WWVBaGNXTmpjWERnSUI5bStyY0RJSUJBdFVqY0IyY1p4Y0h3c08vTlFjQWowRUNSOVNSVXRyUmljSUJBWVNORnhFVllzNWRDNkhuUlFDVTQrN2FpbHR5NTljQXdKYWxieGxaNjBCRlQ5d1NBSUNRbkNEUGlnN2RGODdBZ0pMUEh0Rldpc0FBZ0JlQUFBRFd3WVpBQkVBRlFBVlFBc1VGUVp5RFFZQmNnRUtjZ0FyS3pJck1qQXhZU01UUGdJWEZoWVhCeVltSnlJR0JnY1hCeUUzQVU3c3lnNXNzSFlrU0NNWEZpMFhPVmMzQ2NnZy9ad2dCS0p5cVZ3QkFRb0l2QVVHQVN4UE9HaXdzQUFBQS8vNS9sRUVRZ1JSQUJNQUtRQStBQnRBRHpBbEMzSTZHZ2R5RGdZUGNnQUdjZ0FyS3pJck1pc3lNREZCTXdNT0FpY3VBaWMzRmhZWEZqWTJOeE1CTno0REZ4NERCd2NPQXljdUF6Y0hCaDRDRnhZMk5qYzNOaTRDSnlZT0FnTnEyTE1VaytpUVNJeDRLM3N1ZkUxVWdsTU5qUDBXQXd4SWVhOTFhb2xMR2dVSUVFeDVwMnhyams0WitBSUdCQ0pPUTFGOVV4RWNCQlF4VURsTGJVa3FCRHI3NVkvUWJ3UUJLMUE3akQ1SUFnSkJlRklET1A2NEZtVEpwV0FDQTJLY3VGcEVYYnliWEFNRFphQzhjQlUxZG1wRkFnUk1ma20zTTJOUU1RRURRbTZDQUFJQURRQUFBL0lHQUFBREFCb0FGMEFNRVFJV0NnZHlBd0J5QWdweUFDc3JLeklSTXpBeFFRRWpBUk1qUGdNWEhnTUhBeU1UTmlZbUp5WU9BZ0lEL3ZYckFRc2ZTZzFGZHFadFdYZEVGZ2wwN1hZR0ZFUkJSbXRMTGdZQStnQUdBUHhGWHJ1WldnTUNRbkdSVWYxSkFybzdYamtCQWpoZ2RnQUFBZ0FnQUFBQ0NnWFlBQU1BRHdBUXR3Y05Bd1p5QWdweUFDc3J6akl3TVVFREl4TVRKalkzTmhZVkZnWUhCaVlCeDd6cnZDRUJUamszVHdGUE9EZE9CRHI3eGdRNkFSZzZTZ0VCUlRrNlNBRUJRd0FBQXY4Qy9rWUNBUVhZQUJFQUhRQVRRQWtOQmc5eUZSc0FCbklBSzg0eUt6SXdNVk16QXc0Q0p5WW1KemNXRmpNeU5qWTNFeVkyTnpZV0ZSUUdCd1ltMSszSURWdWJiU05GSWhVV0t4WXZRaWdINXdGT09EaFBUamczVHdRNisyaG9uVmNDQVFvSXZBUUlKa1F0QmJBNlNnRUJSVGs2U0FFQlF3QURBQkVBQUFST0JnQUFBd0FKQUEwQUhVQVJCZ2NMQlF3SUJnSUpCZ01BY2dvQ0NuSUFLeklyUHhJWE9UQXhRUUVqQ1FNbk53RURBVGNCQWdqKzlld0JDd015L2VIK3pSemdBV0I1L3Y2b0FWMEdBUG9BQmdEK092MzYvdS9jNmdGUis4WUNCcUQ5V2dBQUFRQWdBQUFDRmdZQUFBTUFETFVEQUhJQ0NuSUFLeXN3TVVFQkl3RUNGdjcxNndFS0JnRDZBQVlBQUFBREFBOEFBQVpoQkZFQUJBQWJBRElBSVVBUktSSUNMaUlpRndzREJuSUxCM0lDQ25JQUt5c3JFVE16RVRNUk16TXdNVUVESXhNekF5TStBeGNlQXdjREl4TTJKaVluSmc0Q0pRYytBeGNlQXdjREl4TTJKaVluSmc0Q0FZNlQ3THplYkU0TVJYYXFjRk54UkJZSGVPeDJCeFpGUUVkb1JTc0NqWElMUjNla2FGaDRSUllKZGV4MkJ4VkVRVHBiUVNnRFVQeXdCRHIrQzJPOWxsWURBajVxaDB6OUx3SzlPbDA0QWdJNFlIY0VHVjZ2aVU4Q0FrRndqMUg5UkFLK08xMDJBUUlyUzJBQUFBSUFEUUFBQS9JRVVRQUVBQnNBR1VBTkVnSVhDd01HY2dzSGNnSUtjZ0FyS3lzUk14RXpNREZCQXlNVE13TUhQZ01YSGdNSEF5TVROaVltSnlZT0FnR0trZXk4M1c5SURFZDJxVzlZZFVFVUNYVHRkZ1lVUkVCR2Frd3ZBMFg4dXdRNi9nc0JZYjJYV0FNQ1FuQ1FULzFGQXI0NlhUY0JBamhoZGdBQ0FEai82UVFlQkZFQUZRQXJBQkMzSEJFTGNpY0dCM0lBS3pJck1qQXhVemMrQXhjZUF3Y0hEZ01uTGdNM0J3WWVBaGNXUGdJM056WXVBaWNtRGdKQkF3eFdqOE40ZEtkcEtnb0NEVmVQdzNkenAya3E5Z0lGQ0NoVVJrcHVTaXdIQWdZSUtGUkdTMjVLS3dJTEYzREtuVmdEQWx5Wncyb1hjTWliVndNQ1c1akJnQmMzZW1wRUFnSkFiSUUrRnpaN2JVVUNBa0Z1Z2dBQUEvL0kvbUFFRUFSUkFBUUFHZ0F2QUJsQURpRVdCM0lyQ3d0eUF3WnlBZzV5QUNzckt6SXJNakF4UVFNakFUTUJCdzRESnk0RE56YytBeGNlQXdjM05pNENKeVlPQWdjSEJoWVdGeFkrQWdHUzN1d0JCTmtDWVFJTVJYV3FjMldLVWlFRUNoQk5lcWh0YjR4SkUvZ0RCUU1nVFVRK1pFd3pDeDhESzExSVNtcEdLUU5jK3dRRjJ2M3pGV0xIcFdJREFsMldzMWhRWDc2ZFhBTURaS0MrY0JZemVHdEdBZ010VUdZM3hFSjNUQUlDUW0rREFBQURBRGYrWUFRNEJGRUFCQUFhQUM4QUdVQU9JUllMY2lzTEIzSUVEbklEQm5JQUt5c3JNaXN5TURGQkV6Y3pBUUUzUGdNWEhnTUhCdzRESnk0RE53Y0dIZ0lYRmpZMk56YzJMZ0luSmc0Q0FrZmhPOVgrKy8wT0F3eEZkNjUxYUloUEhBUUlFVTE2cUd0dGpFd1grZ01HQXlCTFJGRjhVaEljQXhReFR6bExha2NwL21BRkVjbjZKZ09yRldUSnBHQUNBMk9kdDFoRVhyeWJYQU1FWmFDOWJ4VXplR3hIQXdOT2dVaTNNMk5RTXdFQ1FtK0NBQUlBRVFBQUF2SUVVd0FFQUJZQUdVQU5CZ2tKQlJRSGNnTUdjZ0lLY2dBckt5c3lNaEV6TURGQkF5TVRNeVVISmlZakpnNENCd2MrQXhjeUZnR1NsdXU4M3dGR0doY3ZGejFpU2pJT09Bb3hXSWhoRnk0RFlQeWdCRG9KNFFRR0FTUkRYVGtFVDZxVFd3SUlBQUVBRy8vckE4RUVUd0ExQUJkQUN4c0FEaklwQzNJWERnZHlBQ3N5S3pJUk9Ua3dNVUUySmlZbkxnTTNQZ01YSGdJSEp6WW1KaWNtQmdZSEJoNENGeDRDQnc0REp5NENOUmNVRmhZWE1qWTJBcGNJUUdBb1BYbGtPZ01FVUgrWVMybXhhd0hxQWlkS05DMVhQZ2NHSWp4REcxV2thQVVEVm9hZlRXcTdjZU12VlRrdlgwVUJLemM5SUFvUEwwaHBTVlIrVkNnQkFrNlljQUV5U1NnQkFTQkFNU1l4SGhNR0YwZC9aMWgvVVNZQkFsU2Zjd0U2VUNrQkd6NEFBZ0EvLyswQ3JnVkRBQU1BRlFBVFFBa0tFUXR5QkFJREJuSUFLekl2S3pJd01VRUhJVGNUTXdNR0ZoWVhGalkzQndZR0p5NENOd0t1SC8yd0h0bnJzd1FKSlNjVkt4WVJKRXNtV200c0NBUTZzTEFCQ2Z2bUl6UWRBUUVHQTdvTENnRUJVWWhVQUFBQ0FFci82QVF2QkRvQUJBQWJBQlZBQ2dFUkJuSVlBd01MQzNJQUt6SXZNaXN5TURGQkV6TURJeE0zRGdNbkxnTTNFek1EQmg0Q0Z4WTJOZ0syamV5ODNtTk9ERUJ1cEc5WmVVWVhDSFhyZGdNR0hEY3RZSUZMQVFzREwvdkdBZUFEWXJlUVVnTURRWENRVUFLNy9VSW5TRG9qQWdOUmpnQUNBR1FBQUFRU0JEb0FCQUFKQUJkQUN3QUdDQUVKQm5JRENBcHlBQ3N5S3pJU09Ua3dNV1VCTXdFakF4TUhJd01CamdHSS9QM3BuUTE4RUpQR3lRTngrOFlFT3Z4MnNBUTZBQVFBZVFBQUJmUUVPZ0FGQUFvQUR3QVZBQ1JBRkFjTEFCRURGQVlKRUF3QkNnWnlFZzRFQ1FweUFDc3lNaklyTWpJeUVoYzVNREZsQVRNREFTTVRFd2NqQXdFQk13RWpFeE1ISXdNM0FWZ0JmNTVhL29LTlNTc1lrMkFEVEFGRDdQNHBuQWRnRFlGcEEvc0RQLzc1L00wRU92eWszZ1E2L01nRE9QdkdCRHI4c3V3RFMrOEFBZis2QUFBRUVnUTZBQXNBR2tBT0J3UUtBUVFKQXdzR2NnWUpDbklBS3pJck1oSVhPVEF4UVJNQklRRVRJd01CSVFFREFYR09BUVFCRC81bjcvV2IvdkgrOFFHbzVnUTYvcHNCWmYzaC9lVUJkZjZMQWpJQ0NBQUFBdis4L2tjRUdRUTZBQk1BR0FBWlFBMFhGaFVEQ0FJWUJuSVBDQTl5QUNzeUt6SVNGemt3TVdVQklRRU9BeU1tSmljM0ZoWXpGalkyTnhNVEJ3Y0RBVmNCdmdFRS9ZWWJSVmh0UkI4OUhoRUxGZ3M1VmtFWmQyNENwTDZDQTdqN0lEaGtUQ3NCQ3dlNUFRTUNJVVF4QkpmOHl2WXFCRllBQS8vbUFBQUQ1QVE2QUFNQUNRQU5BQnhBRFFRTURBa05CbklIQXdNR0FoSUFQek16RVRNck1qSVJNekF4WlFjaE53RUJJemNCTXlNSElUY0RYeUw4OFNJRGVQeS9vUjBEUEtWYUl2MGtJc0RBd0FMWi9HZW1BNVRBd0FBQ0FDMytsUU1EQmo4QUVRQWxBQmxBQ2gwSkNnb2NIQklUQVFBQUx6SXZNemt2TXhJNU9UQXhRUmNHQmdjSERnSUhOelkyTnpjK0FnTUhMZ0kzTnpZbUppYzNIZ0lIQndZV0ZnTGZKRzVuRHh3UGdNZDNDMmR2RHh3UWFhMXRNMnlLT1F3Y0J4UkZRZ3R0cUZvTEd3Z0dPUVkvaXlpeWJzNS9uVXNEaXdONllzNTh1SDM1QVlra2hiaHd6VDFnT3dXTEJGT2VkTTFCZ1dnQUFRQWgvdklCelFXd0FBTUFDYklBQWdFQUx6OHdNVUVCSXdFQnpmN3luZ0VPQmJENVFnYStBQUwvbVA2U0FtNEdQQUFUQUNZQUcwQUxIZ3NLQ2g4ZkFSVVVBQUVBTHpNdk14STVMek1TT1Rrd01WTTNIZ0lIQndZV0ZoY0hMZ0kzTnpZbUpnRW5QZ0kzTno0Q053Y0dCZ2NIRGdLZ05XdUpPZzBiQ0JSRlFncHJxbG9MR3dnSE9mN1pKRWxlTXdzYkVJREdkd3RuYmhBY0VHaXRCYldISTRhNGI4ODlYem9GaFFSUW1uUFBRWUZwK1BxTUcyS0NTY3lBbWtnRGhBUjZZOHg5dUgwQUFRQmNBWU1FeHdNeUFCOEFHMEFMREFBQUZnYUFIQVlRRUFZQUx6TXZFVE1hRU0weUx6SXdNVUUzRGdNbkppWW5KaVluSWdZR0J3YytBeGNXRmhjV0ZoY3lOallFR0s4R01sZUFVMUtCT0NCTE1UWkhKZ2kzQmpKWmYxTlNnellnU3pJM1NDb0RFUUpLajNSREFRSk9PU0k2QVRsWkxRRktqSEZCQVFKUE9TRTdBVHhjQUFBQy8rYitrd0hPQkU4QUF3QVBBQXl6QVFjTkFBQXZMOTNPTURGREV6TURFeFFHSXdZbUp6UTJNellXR3NySm1lNU5PVGhPQVU0Nk4wMytrd1FEKy8wRlBqcE1BVVk1T2tzQlJRQUFBd0JOL3dzRUFnVW1BQU1BQndBdkFDVkFFZ0lCSlNVaEF4d0hjZ2NFQ0FnTUJoRU5jZ0FyemN3ekVqazVLODNNTXhJNU9UQXhRUU1qRXdNREl4TTNGalkyTnpjT0FpY3VBemMzUGdNWEhnSUhJelltSmljbURnSUhCd1llQWdNWE5MczBJak83TTNJOFlrTU4zdzZLelhGMG9XRWxDd1FOVm8zQWQzaXNXd0xlQVNSTlAwcHJSeWdKQXdjQ0lFMEZKdjdmQVNIN0JmN2dBU0NBQWk5V09BRjFyRjBDQTFxWXdXY2tjTWVZVmdNRGFyWjFPV0UrQVFNL2FZQStJelI1YWtZQUFBUC85d0FBQktJRnh3QURBQWNBSWdBaFFCQUdCUVVCSHhZRmNnd05EUUlDQVF4eUFDc3lFVE1STXlzeUVUa3ZNekF4WVNFM0lRTWhOeUVsQXdZR0J5YytBamNUUGdJWEhnSUhKelltSmljbUJnWUQ4UHdISXdQNTkvMUFJZ0xCL3V0TUMxdFN0aWN1R0FWVkVJWFVobnFyVndUdEF4MUpQVVJoT2NjQmtjUDEvWlZnbFRGSUVFZFhKZ0owZzhkdUF3Tmx0SGdCT0Z3NEFnRkZid0FBQmdBRy8rVUZmd1R4QUJNQUp3QXJBQzhBTXdBM0FBNjFEeGtGSXcxeUFDc3lMek13TVVFR0hnSVhGajRDTnpZdUFpY21EZ0lIUGdNWEhnTUhEZ01uTGdNQkJ5YzNBUWNuTndFbk54Y0JKemNYQVNvTElGR0RWbCttZzFNTkN4OVNnVmRmcG9OVXV3NXh0T2VEZmNCL053ME5jYlRuZzMzQWZ6Y0ZEOTEwM3Z4SzNYUGRBMXlwa2FyOGphbVFxUUpYVDV0K1RRSURTb09tV1UrYWZVMERBMHVCcGxoKzVyTm1BZ05wc050MGZ1ZTBad01EYXJIYkFuZkVsc1Q3dWNTVncvNm4ySUhZQXpIWmdOZ0FCUUF1QUFBRXJnV3hBQU1BQndBTUFCRUFGUUF0UUJZTEVCQUdCeElWRlFnT0F3TUNBaEVVREhJSkVRUnlBQ3N5S3hJNUx6TVNPVGt5RVRQT01qTVJNekF4UVFjaE53RUhJVGNsQVNFQkl3TVRCd2NEQVFNakV3UEhHdnkwR2dNYUd2eXpHd0dhQWJ3QkQvM1JqMUhETG8vK0FmeUY5SVVDNDVXVi90MlVsUGdDK1B5VUEyMzg4VjBCQTJ6OVR2MENBdjRBQUFMLzd2N3lBZlVGc0FBREFBY0FEYlFCQWdZSEFnQS8zZDdOTURGVEl4TXpFd01qRThuYml0dWloTnlFL3ZJREdRT2wvUW9DOWdBQUF2L2cvaVFFcXdYSEFDOEFZUUFlUUJOVFB3QUJCU3RkTlRFd0R5RU1UMFFkRkJGeUFDc3lMek1YT1RBeFpUYytBamMyTGdJbkxnTTNQZ01YSGdJSEl6WW1KaWNtQmdZSEJoNENGeDREQnc0REF3Y09BZ2NHSGdJWEhnTUhEZ01uTGdNM053WWVBak1XTmpZM05pNENKeTRETno0REFrNExQWE5RQ3dndlUyQXBUcFJ6UFFjR1paeTRXb2JMYXdicUJEQmlTVDUrWEFzSkxGRmZLMCtWZFVBSEJtS1hzRjBMUG1sSENnZ3FVRjh0VDVWeVBnWUhZNXE0VzJXdGdVUUQ3Z1FnUUZ3NFBYNWNDd2t3VkY4bVRwUjFRQVlHWHBLcWVvTUNLVlpDTjBzeklnNGFRMTZIWUdlU1hDc0NBbU8raTBkcFBBRUJJbE5HT0VrdUh3MFpRVjZIWUdXRVN5QUM4WVVES1ZSQk9rd3hJQTRiUVY2SFlXbVJXU2tCQWpWb24yd0JPMWM1SGdFaVVVUTJTREFnRFJsQ1hvZGdZWU5PSVFBQ0FOY0U0d09OQmM4QUN3QVhBQTYwQXdrSkR4VUFMek16THpNd01WTTBOamMyRmhjVUJnY0dKaVVtTmpjMkZoVVdCZ2NHSnRkSE1qSklBVWN5TVVrQndRRkdNekpKQVVneU1VZ0ZWak5FQVFGQU16TkRBUUZBTVRORUFRRkFORE5DQVFFL0FBQURBRnovNkFYY0JjY0FId0F6QUVjQUgwQU9IUVFFSlNWREZBME5MeTg1QTNJQUt6SVJNeEV6THpNUk14RXpNREZCTndZR0p5NENOemMrQWhjV0ZnY25OaVluSmdZR0J3Y0dGaFlYRmpZbEJoNENGeFkrQWpjMkxnSW5KZzRDQnpZU05pUVhIZ0lTQndZQ0JnUW5MZ0lDQTZtUURMaVliSWM3Q0F3TFg2SnhrWndGa2dWRFdVbGhOd2tOQmhKRVJWMWcvVVVRTUhtN2ZZUG90M1VSRHk5NXUzeUU2TGQxaFJDRzFRRVJuSlhubWtNUEVZWFYvdStjbGVlYVF3SlZBWmFwQkFOdnIySjFhTEpzQWdPcGtBRlVZd0lCUzNkQWR6aHpVZ0lFWk5SejNMRnJBZ05tdGVkOGM5cXhhd0lEWnJQbWZaVUJFZFY2QXdKKzAvNzZqSlQrN3RaN0F3Si8xQUVIQUFJQXZ3S3lBMGNGeUFBWEFERUFHclV4R2hvTkZpcTRBUUN5Q0EwREFEOHpHdHpFRWprdk16QXhRUk0ySmlZbkpnWUhKejRDRng0Q0J3TUdCaGNqSmhNSEl3NENCd1lXRnpJMk5qY1hEZ0lqSmlZM1BnSXpBbW8xQXd3b0p6aFRENklIWG94TFUzUTVCakVIQXdpZkRtSVVnaWRYUVFZSVBTb21Va0lRQmhkTlhUUmtmd0lDY0tKUUExNEJWaUk2SkFFQ01qWU1VMmd5QWdGSGUxTCt4aTlhTGxBQmJYRUJGalV1THlZQkh6WWtjeTVCSVFGMVptRm9Kd0QvL3dCR0FJa0RyQU9uQkNZQmt1eitBQWNCa2dGTC8vNEFBZ0NBQVhjRHhnTWlBQU1BQndBU3RnWUhBd1lDQWdNQUx6TVJNeEk1THpBeFFRY2hOd1VESXhNRHhoejgxaDRER3oyNlBnTWlwYVZML3FBQllBQUVBRnovNkFYYkJjY0FIZ0F2QUVNQVZ3QTFRQnNmR3hnZ0JBSUNBUUVQS1EwTk5UVlREQThQU1ZNVGNqOUpBM0lBS3pJckVqa3ZNeEV6RVRNdk14STVmUzh6RWhjNU1ERkJJemNYUGdJM05pWW1KeU1ESXhNRkhnSUhEZ0lIQmdZSERnSUhOeFlXQndjR0ZoY0hKeVkyTnpjMkppVUdIZ0lYRmo0Q056WXVBaWNtRGdJSE5oSTJKQmNlQWhJSEJnSUdCQ2N1QWdJRE5kOFNzQ2xTUFFnSkpFVXRqWENPaFFFQlRvVlBCQUpKYVRVRUJ3UUtFQkloRjNGL0NBWURBd0lCamdVRUJBY0dOdjE1RHpCNHZIMkQ2TGQxRUE4dmVMeDhnK20zZFlVUmhkVUJFWnlWNTVwRER4Q0Yxdjd2bTVibm1rSUNqb0lCQWhvMkxUTTFGQUw5TVFOUUFRSTBibFpMVEM0ZEFna0RCd2dFQW1NRGRIWTNJVDBoRWdFa1NTVTFTRHhMYzl5eGF3TUNaclhuZkhQYnNHc0NBMmF6NW4yVkFSSFZlZ01DZnRQKytveVUvdTdXZXdJRGY5TUJDQUFCQVFRRkVBT3hCYW9BQXdBSXNRTUNBQzh6TURGQkJ5RTNBN0VZL1dzWkJhcWFtZ0FDQU9VRHJ3TGxCY2NBRHdBYkFBKzFFd3pBR1FRREFEOHpHc3d5TURGVFBnSVhIZ0lIRGdJbkxnSTNCaFl6TWpZM05pWW5JZ2JvQVUxOFMwVnBPZ0VEU1hwTFJtczloZ1k1TWpoUkJ3WTBNemhXQkxCSmdFNEJBVXQyUWtsK1RBRUJSM1ZGTUVsU05TOU1BVlFBQUFNQUdRQUJCQUlFL1FBREFBY0FDd0FTdHdzQ0F3TUVDaEp5QUNzdk9TOHpNakF4UVFjaE53RURJeE1CQnlFM0JBSWYvSVVnQW1lWDBaY0JWUi84eFI4RGc4VEVBWHI4UEFQRSs4WEJ3UUFBQVFCWEFwc0M3Z1crQUJ3QUU3RWNBcmdCQUxNTEV3TnlBQ3N5R3N3eU1ERkJCeUUzQVQ0Q056WW1KeUlHQndjK0FoY2VBZ2NPQWdjSEFzRWEvYkFYQVRnYVBpOEhCaXdxT2tVTXRBaFdpVk5KZkVvREEweHJNNThETEpHRUFRRVdPRUFsS1RFQlNEVUNWSHBCQVFFeloxQkdiVmdsZFFBQUFnQm9BbzRDK1FXK0FCa0FNd0FzUUF3Y0dBQUFHaG9RTENrcEpCQzRBUUMxQ3dzSUVBTnlBQ3N5TWk4YUVNd3lMeklST1M4ekVqazVNREZCTXo0Q056WW1KeUlHQnlNK0FoY2VBZ2NPQWdjakJ6Y1hIZ0lIRGdJbkxnSTFNeFlXRnpJMk56WW1KaWNCWVVraVFTOEdCam9vSzBNT3RnZFhoRWxFZ2xRQ0FsMkhQb0FJRDJKQmUxQUNBV2FYU2t4K1RLNEJRREV4V2dnR0hUWWdCR3NDRlM0bUxDZ0JKaWhOWlM4QkFTMWdUa3RZSmdFb1VnRUNJRkpOVm1veEFnRTJhMUF5TEFFME5pVXBFZ0VBQVFESEJOTUN6UVlBQUFNQUNySUJnQUFBTHhyTk1ERlRFeUVCeCswQkdmN0lCTk1CTGY3VEFBUC8zdjVnQkZrRU9nQUVBQm9BSGdBWlFBd2RCUUFXQ3hOeUF4SnlIQUFBTHpJckt6SVJPUzh3TVVFekF5TVROemNPQXljdUFpY1RNd1llQWhjV1BnSUJNd0VqQTIzc3ZOZ2FSbFFLTUZ1VWJEOTJWQXNPZ1FRQkdVQTdUbTVIS2YzRzYvNzc2Z1E2KzhZQkNQSUNXTHlmWWdNQ01GeERBUkl2WkZZM0FnSTBYbnNDaFBvbUFBQUJBSDRBQUFQUUJiRUFEQUFPdGdNTEFuSUFFbklBS3l2Tk1ERmhJeE1uTGdJM1BnSXpCUUxVeGx0RWg4RmZEUTZWN0pFQkpRSUlBUU4xekllVTFYUUJBQUFCQUo4Q1JBR3lBMUFBQ3dBSXNRTUpBQzh6TURGVE5EWTNOaFlYRkFZakJpYWdUanM2VGdGUU9qbFFBc1U3VGdFQlNUbzdUUUZIQUFIL3pmNDlBUzhBQkFBVEFCRzJDd3FBRXdJQUVnQS9NaklhekRJd01YYzNCeFlXQnc0REJ6YytBamMySmlZbkdhd1VQa0FCQVVScWVqZ0hJRUl4QmdZc1FoZ0RBVHdOVmo5R1dqSVZBb29DRWlrbEpSOEpBd0FCQU9RQ213S0FCYThBQmdBS3N3WUNjZ0VBTHlzd01VRURJeE1ITnlVQ2dJT3haTXdiQVdvRnIvenNBand4bDNJQUFBSUF2Z0t3QTNBRnlBQVJBQ01BRUxZWERpQUZBM0lPQUM4ck1oRXpNREZUTno0Q0Z4NENCd2NPQWljdUFqY0hCaFlXRnhZMk5qYzNOaVltSnlZR0JzVUhDbU9oYW1TSVFBZ0hDMkdnYW1TSlFMVUpCUkkrUEQxVk1nZ0pCUlE5T2o1V01nUVRUMlNrWGdJRFlaOWdVR1NpWFFJRFlKK3ZVakpmUUFFQ1BXSTNVVEZnUHdJQ1BHSUEvLzhBQlFDTEEzVURxQVFtQVpNSkFBQUhBWk1CY2dBQS8vOEF3UUFBQlNJRnJBUW5BZFlBVVFLWUFDY0JsQUVWQUFnQUJ3SXdBcWtBQVAvL0FMVUFBQVY0QmE4RUp3R1VBT3NBQ0FBbkFkWUFSUUtiQUFjQjFRTDlBQUQvL3dDV0FBQUZvUVcrQkNjQmxBR2pBQWdBSndJd0F5Z0FBQUFIQWk4QW9RS2JBQUwvMVA1N0F4OEVVQUFoQUMwQUdFQUtBQUFsSlNzUUVSRU5GZ0F2TXpNdlB6TXZNeTh3TVVFM0RnSUhEZ0lIQmhZV0Z4WTJOamMzRGdJbkxnSTNQZ0kzUGdJQkZBWWpCaVluTkRZM05oWUJrTlVITGxFK0xscENDUWNaUXpjOFdqa0w2d3lCeW5weXJsb0pCMTZHUlNnMUhnRTFUVGs0VGdGT09UaE9BcFlCVW9Od055aFVaVUEwVWpFQkFqSlhOd0o5cjFzREFsbW5kMkNZZmpnaFNWVUJianBNQVVZNU9rb0JBVVlBQUFiL2pRQUFCMjhGc0FBRUFBZ0FEQUFRQUJRQUdBQXhRQmdBRnhjSUJ4UVRCeE1IRXdJTkF4Z0NjZ3dMQ3c0Q0NISUFLekl5RVRNck1qSVJPVGt2THhFekVUTXlFVE13TVVFQklRRXpBd2NoTndFSElUY1RBeU1UQVFjaE53RUhJVGNFTS94Ly90c0VJSnNmSmYwcUpRVjlJdjA0SXZQQjY4SUNweUw5bXlJREhDTDlPU0lGQy9yMUJiRDhldExTL3BmQndRVHYrbEFGc1AyaHdjRUNYOEhCQUFJQUh3REtCQThFZHdBREFBY0FETE1FQmdJQUFDOHZNekl3TVhjbkFSY0JBVGNCblg0RGMzMys5ZjJOblFKeXk1d0RFSno4N3dNbWgvemJBQU1BRnYraUJaQUY3UUFEQUJzQU13QVhRQXNCQUM4S0l4WURjZ29KY2dBckt6SVJNekl6TURGQkFTTUJFd2NHQWdZR0p5NEVOemMyRWpZMkZ4NEVCVGMyTmk0Q0p5WU9BZ2NIQmdZZUFoY1dQZ0lGa1BzM3NRVExOUW9VYXE3d21YV3Zka0VTREFzVWJLN3dtSFd1ZGtJUi92TUxCd01WT0daT2FKbG5QZ3dMQ0FJVk9XVk9hWmhuUFFYdCtiVUdTLzBWVUluKy84dDBBd0pTakxQS1oxQ0lBUURMZEFNQ1VvdXp5cmhUUElpQ2FrTURBMW1XdEZkVFBJZURiRU1EQkZxV3RBQUNBQ2NBQUFTQkJiQUFBd0FaQUIxQURnOE9EZ01aQkFRREFBSnlBd2h5QUNzckVUa3ZNeEU1THpNd01VRXpBeU1CSVI0Q0J3NENJeVUzQlRJMk5qYzJKaVluSndFazdQM3NBVEFCYW9IT2NRc01vdmFNL3RnaEFRMVBpVnNNQ1MxalNQZ0ZzUHBRQkpjRFpMMkpsc1ppQWI4Qk9uRlNTR283QXdFQUFRQWQvK2tFVUFZWUFEa0FHVUFOSXhzMkNBSUtjZ2dCY2hzTGNnQXJLeXNSTXhFek1ERkJBeU1UUGdNWEhnSUhEZ01IQmg0REJ3NENKeTRDSnpjV0ZqTXlOalkzTmk0RE56NEROelltSmljbUJnWUJ3N3ZydlExTmU2aHBaNkZZQ0FZdU96SUpDU2xIU2pFREIzL0lkQzloWGlwQkxtNDROVjlBQ1Fnc1NVc3dCQVV2UFRNSEJobytNVXhlTWdSUys2NEVVMk9uZWtFREFsS1piRHRpV1Y0M05GcFdWMkk3ZTZWUUFRRU5IQmZBSGlNbFN6YzJXbFJWWXo0M1gxbGRPQzVNTGdJRFRud0FBQU1BRHYvcUJsOEVVUUFVQURJQVhnQTNRQnhYTXpNeUYwWkZGQ1VBQXlrWFJSZEZEeDhwQzNKTVBqNEZEd2R5QUNzeU1oRXpLeklTT1Rrdkx4SVhPUkV6RVRNeUVUTXdNV1VUTmlZbUp5WUdCZ2NuUGdNWEhnSUhBd01ISnlJR0JnY0dGaFl6Rmo0Q054Y09BaWN1QWpjK0F6TUJMZ00zTno0REZ4NERCd2NoTnlFM05pWW1KeVlPQWdjSEJoNENGeFkyTnhjT0FnS0NXQVVWUVRrMFhrUUs2UWRaaUtCUWRhWlFERkp2SE5VNWRWUUpCeWRITENoZldrSU1ZU3VXc1ZSaW1sUUZCbDZUcmxRQ1duT25hU3NLQncxVmliMTBhSmRiSUFzVi9PWWRBaW9HQ1JWTFJFZHJTU29JQ0FZTk1WMUlWWlpKT0RPRGpiVUNGek5YTndJQkkwYzFFbGgvVVNVQkEyS3RkdjRSQWF1a0FTVlBRVEErSGdFYU1VUXFsazFnS2dFQ1RKQm5aSU5OSVAxb0FsT1J2R3M2YThTWlZnTUNVSWV1WUl5bkh6eHJSUUlEUFdsOVBEay9kVjQ2QWdJMktLVXJOUmdBQWdCRy8rZ0VTQVl0QURRQU9BQVpRQXMySUJZV0FTb01DM0k0QVFBdk15c3lFamt2TXpNd01VRTNIZ0lTQndjT0F5Y3VBemMrQXhjZUFoVW5OaTRDSnlZT0FnY0dIZ0lYRmo0Q056YzJMZ0lsQVNjQkFYcFdwL2FZT1JVTUVGbVB3M3BrbjJ3ekNRbE5nYkZ1YUtCY1Z3TWxRbElwU0c1TkxnY0dFQzFQT1Vwc1NTd0pEaE1sYjd3Q1NmMjFQQUpMQlczQUtyTDYvdEduVlczUXBtRURBMDJEckdGbXU1RlNBd1JscG1ZQ0wwWXRGd0VDTlY1MlFUSmtWRFVDQWtSeWd6MW1oZTNFamkzK25YVUJZZ0FEQUQ0QWxBUThCTXNBQXdBUEFCc0FFN2NaRXdJSERRTUNFZ0EvM2NZeUVNWXlNREZCQnlFM0FUUTJOellXRlJZR0J3WW1BelkyTnpZV0ZSUUdCd1ltQkR3ay9DWWtBWnRRT1RsUUFWQTZPRkNPQVU0N09WQlFPamxRQXhqT3pnRXBQRXdCQVVjNlBFb0JBVWI5RER4TEFRRkhPanRMQVFGR0FBTUFLdjkxQkRBRXZRQURBQmtBTHdBWlFBd2dBUUVWQzNJckFBQUtCM0lBS3pJdk1pc3lMekl3TVVFQkl3RUJOejRERng0REJ3Y09BeWN1QXpjSEJoNENGeFkrQWpjM05pNENKeVlPQWdRdy9KT1pBMjc4cHdNT1daSEVlWE9tWmlnTEFnNWFrY1I0YzZWbktQa0RCUVVtVTBWTGIwd3RDUUlIQmlaVFJrdHZUQ3dFdmZxNEJVajlUUmR3eTUxWkF3TmNtc0pwR0hESm0xY0RBMXVYd1lBWE5ubHJSQUlDUDJ5Q1BoYzJlbTFHQWdKQWJvTUFBLy9OL21BRUZRWUFBQU1BR1FBdkFCdEFEeXNLSUJVSGNnb0xjZ01BY2dJT2NnQXJLeXNyTWhFek1ERkJBU01CQVFjT0F5Y3VBemMzUGdNWEhnTUhOell1QWljbURnSUhCd1llQWhjV1BnSUNEUDZ0N0FGVEF1c0NEVVIxcW5ObWlsSWhCUW9RVFhtcGJHK01TUlQ0QXdVRElFMUVQbVJOTWdzZkF4Z3lUemRLYWtZcEJnRDRZQWVnL0MwVlk4YWxZZ01DWFpheldGQmZ2cDFkQXdObG9iMXZGVFIzYTBZQ0F5MVFaamZFTWx4TExRRURSRzZEQUFRQU4vL29CUk1HQUFBRUFCb0FMd0F6QUIxQUR5RUVCQllMY2pNeUt3c0hjZ0VBY2dBckt6TE9NaXN5THpJd01XVVRNd0VqQVRjK0F4Y2VBd2NIRGdNbkxnTTNCd1llQWhjV05qWTNOell1QWljbURnSUJCeUUzQXJuaDdmNzExUDJaQWd4R2Q2MTBaNGhOSEFVSUVFeDVwMnRyakV3WCtnSUdBaDlMUkU5N1VoRWNBeE13VHpoS2EwVW9BOW9kL1hNZDdnVVMrZ0FDQ0JaanlhWmpBd1JrbnJkWFJGeThuRndEQkdXZ3UzRVZOSFpyUndJRFRYOUh0ekppVURNQkEwSnVnZ01VcDZjQUJBQXNBQUFGMmdXd0FBTUFCd0FMQUE4QUgwQVBBd0tBQndZR0Nnd0xBbklOQ2doeUFDc3lLeklST1M4ekdzd3lNREZCQnlFM0FRY2hOeE1ESXhNaEF5TVRCZG9jK3FzY0ErRWovUkFrcC8zMS9RUmkvZlQ4Qkt1ZW52Nmx4OGNDWVBwUUJiRDZVQVd3QUFFQUl3QUFBY29FT2dBREFBeTFBd1p5QWdweUFDc3JNREZCQXlNVEFjcTg2N3dFT3Z2R0JEb0FBQU1BSVFBQUJKQUVPZ0FEQUFrQURRQWZRQThNQndjTEJnWUNDUU1HY2dvQ0NuSUFLeklyTWhFNUx6TXpFVE13TVVFREl4TWhBU0UzTXdFREFUY0JBY2k4NjdzRHRQMmMvdlVIb3dHUG1mN3d4d0ZtQkRyN3hnUTYvWFhhQWJIN3hnSGhnZjJlQUFNQUh3QUFBOUlGc0FBREFBY0FDd0FiUUEwQ0NnQUhCZ1lLQ3dKeUNnaHlBQ3NyRVRNUk16SVJNekF4UVFjRk53RUhJVGNCQXlNVEFyZ2EvWUViQTVnay9Ub2pBUi85OWYwRHNwaThtdjNQeDhjRTZmcFFCYkFBQUFJQUlBQUFBbDhHQUFBREFBY0FFMEFKQWdZQUJ3QnlCZ3B5QUNzck1oRXpNREZCQndVM0FRRWpBUUpmRy8zY0d3SDQvdmJzQVFzRHRKaTdtQU1IK2dBR0FBQUFBd0FqL2tjRmV3V3pBQU1BQndBWkFCMUFEaFVPQmdjSEF3aHlDUVVFQUFKeUFDc3lNaklyTWhFekx6TXdNVUV6QXlNQk53RUhFek1CRGdJbklpWW5OeFlXTXpJMk5qY0JIL2I5OVFFMHRRSTd0ZlQxL3Y0UFpLcDNJMFVqSXhnd0dUUkRKZ2NGc1BwUUJVUnYrcmxzQmJENkdYQ3ZZd0lLQ2NJSENEZFZMUUFDQUJIK1NBUDVCRkVBQkFBcUFCbEFEaHdWRDNJbUN3ZHlBd1p5QWdweUFDc3JLeklyTWpBeFFRTWpFek1EQno0REZ4NERCd01PQWlNbUppYzNGaFl6RmpZMk54TTJMZ0luSmc0Q0FZMlI2N3pYZlNNTVFXK2libHg1UVJNSmRnOWlwM1VqUkNFaEdESVlOVU1sQ0hZR0JSMCtOVXB5VVRRRFJmeTdCRHIrQmdKZHZaeGRBZ0pLZTVoUi9TTnZxMkFCQ1FuQkJ3Z0JOVk11QXR3dFZFUW9BZ00yWDNrQUJRQlEvK3dIalFYR0FDTUFKd0FyQUM4QU13QXpRQm92TGk0bU1pZ3pBbklwSnlZSWNoVVNFaFlaQ1FRSEJ3TUFBd0EvTWpJUk16OHpNeEV6S3pJeUt6SXlFVGt2TXpBeFFUSVdGd2NtSmlNbURnSUhBd1llQWhjV05qY0hCZ1luTGdNM0V6NERBUWNoTndFREl4TUJCeUUzQVFjaE53TWRTWkpKRmtTTFJWdU9aVUVOTUFrTU5tdFZTWkZJRTBhTVJuMitmVE1RTHhOdHF0OEVJQ0w5RUNNQklQejIvUUxUSS8xekl3TlRJLzBXSXdYR0RnakdEaEFCUDNHVVUvN05TSTF6UndJQ0RnekhDQXNCQTJDazFIZ0JNSC9hbzFyN0FjZkhCT242VUFXdy9hREV4QUpneU1nQUF3QS8vK2dHemdSU0FDb0FRQUJXQUNkQUV5UUFBRWM4RXhJU1BGSVpDd3N4QjNJOEMzSUFLeXN5RVRNeUVUa3ZNeEV6TXhFek1ERkZMZ00zTno0REZ4NERCd2NoTndVM05pWW1KeVlPQWdjSEJoNENGeFkyTnhjR0JnRTNQZ01YSGdNSEJ3NERKeTRETndjR0hnSVhGajRDTnpjMkxnSW5KZzRDQk1wd28yWXFDZ1FNVll1N2MyaVhYU01NRnZ6c0hnSWxCUW9hVFVSRlprWW9DQVVHQ3l0VlJWV2FSejFQMXZzWkF3MVlqOE41YzZWa0pnb0REbGlRd25oenBHVW4rd0lHQkNSUVJrdHVTaXNKQWdZRkpWQkhTMjFLS2hRQ1dKYTlaaXRweHA1YkF3TlBoYTFpanEwQkhUeHFSQUlDUTI1K09TbzRkbVEvQWdNeUxKNUdPZ0lnRjNETG5WZ0RBbHlid21nWWNNbWJWd0lEWEpuQWZ4YzJlV3BGQWdOQWJJSS9Galo2YlVZQ0FrRnVnZ0FCQUJ3QUFBTWFCaGtBRVFBT3RnMEdBWElCQ25JQUt5c3lNREZoSXhNK0FoY1dGaGNISmlZaklnWUdCd0VINjhvT2FLMTJKMDBuSlJjdUdEaFNNZ2tFb25HcFhRRUJEUWU0QmdndlV6VUFBQUVBUy8vcEJTMEZ4QUFzQUJ0QURROEFCZ2tKQUJvaUEzSUFDWElBS3lzeUVUa3ZNeEV6TURGRkxnTTNOeUVISVFjR0hnSVhGajRDTnpjMkxnSW5KZ1lISno0Q0Z4NERCd2NPQXdKTmtzNTVLUklYQkFNai9Qa0lEUlZFZGxWaW1HNUREaElORTB1S2FXTytYQjQ2bHBwRWx0K01OaE1SRTNPMThCUUNiYnJ4aDQvREkwNklaanNEQWxPTXExVjhYS21GVHdJQ0tDUEZKU2NNQVFGcnZmaU9lNFQzeFhBQUFBSC9SUDVHQTB3R0dRQW5BQ2xBRlJRQ0FoVW5CbklmSWlJZUd3RnlDdzRPQ2djUGNnQXJNaklSTXlzeU1oRXpLekl5RVRNd01VRUhJd01PQWljaUppYzNGaFl6TWpZMk54TWpOek0zUGdJWE1oWVhCeVltSXlJR0JnY0hBc0lieVpVTlhhRnpJME1oSUJZdUdEUkFJZ2FXb1J1aERRNW5ySFVvVGlZbkdEQVlPRTh1Q1E0RU9yRDhNVzJvWUFJTENic0hDVFZTTFFQUHNHaHlxRjBDRGdpNEJnWXVVRFZvQUFNQVhQL3BCaUVHTFFBSkFDRUFPUUFkUUE0RkJnWXBLUUFBSEFOeU5SQUpjZ0FyTWlzeUx6SVJPUkV6TURGQk53NENCemMrQWdNSEJnSUdCaWN1QkRjM05oSTJOaGNlQkFVM05qWXVBaWNtRGdJSEJ3WUdIZ0lYRmo0Q0JYbW9DbUN6aHc1VFlEQmxDeE5ycnZDWWRxNTFReElOQ3hScnIvQ1lkYTUyUVJMKzhnc0lBeFk0WkZCb21HZzlEUXNJQWhZNFpVOXBtR2M5QmlzQ2c3NW9CSklDVUg3OUlFK0svdi9MZEFNQ1VveTB5bVpRaUFFQXluVURBbEtMczhxNFV6eUlnbXBDQXdSWmw3TllVanlIZzJ4RUFnUmFsclFBQUFNQU5QL3BCUEFFcWdBSkFCOEFOUUFWUUFvbUd3dHlNUUFBRUFkeUFDc3lMeklyTWpBeFFUY09BZ2MzUGdJQk56NERGeDREQndjT0F5Y3VBemNIQmg0Q0Z4WStBamMzTmk0Q0p5WU9BZ1JabHdsWG9Yb0xUVmdxKy9BQ0RsaVN4SGwwcFdZb0N3SU9XWkxFZUhLbVppbjVBZ1lGSmxOR1NtOU1MUWtDQndZbVVrWk1iMHdzQktnQ2Q2VldCSGtDUlhEOXBoZHd5NTFZQXdKY21zSnBHSERKbTFZQ0ExdVl3SUFYTjNoclJBSUNQMjJCUGhjMmVtMUdBZ0pBYm9NQUFBSUFXUC9wQnFRR0F3QUpBQjhBR1VBTUJRb0tBQUFWQW5JYkVBbHlBQ3N5S3pJdk1oRXpNREZCTnc0Q0J6YytBaVV6QXc0Q0p5NENOeE16QXdZV0ZoY1dOalkzQmYrbERHM0lsdzVsZHozK1NmV21HS1QrbjVYYWF4S205S1VLSm1wYllZOVlEZ1lDQVpUR1p3T1NBa3VIQy93MG5lVjVBd0o5NFpjRHpmd3lWSWhSQXdOTWpGd0FBQU1BU3Yvb0JWa0VsZ0FKQUE0QUpRQWRRQTRGQ3dzQUFCc0djaUlPRGhVTGNnQXJNaTh5S3pJdk1oRXpNREZCTnc0Q0J6YytBZ0VUTXdNakV6Y09BeWN1QXpjVE13TUdIZ0lYRmpZMkJNU1ZDbDZxZmd4VVh6RDkvbzNzdk41alRRdy9icVJ3V1hoRkdBaDE2M1lFQnh3M0xXQ0NTZ1NWQVg2YlNnSjlBakptL01NREwvdkdBZUFEWXJpUFVnTUNRbkNRVUFLNy9VSW5TRG9qQWdSU2pnQUIvd1QrUndIYkJEb0FFUUFPdGcwR0QzSUJCbklBS3lzeU1ERlRNd01PQWljbUppYzNGaFl6TWpZMk4rL3N3dzVpcDNValF5SWlHQzhaTkVRbUJ3UTYrNGx2ckdFQkFRb0p1d2NKTjFjdEFBRUFOUC9xQTlvRVVRQXFBQmxBREJFVUZBQVpDd3R5SkFBSGNnQXJNaXN5RWprdk16QXhRUjREQndjT0F5Y3VBemMzSVFjbEJ3WVdGaGNXUGdJM056WXVBaWNtQmdjbk5qWUNPSENqWmlrS0JBeFZpcnh5YVpoY0lnd1ZBeFVmL2R3RkN4cE5RMFptUmlnSUJRWUxLMVZFVlp0SFBVL1hCRThDV1pXOVppdHF4cDFhQXdKUGhhMWlqcTRCSER4cVJBSUNRMjUrT1NvNGRXUkFBZ015TEoxSE9nQUFBUUQrQk40RG9BWUFBQWdBRkxjSEJRVUVBUU9BQ0FBdkdzMHlPVElSTXpBeFFSTVZKeWNIQnljQkFyVHN1WGl3d0FFQkx3WUEvdThSQTV5YkF4SUJEd0FBQVFFSkJPQUR2UVlEQUFnQUVyWUJCb0FIQkFJQUFDOHlNaklhelRrd01VRVhOemNYQVNNREp3SE1kSzNQQWY3TGxPb0JCZ0NjbXdRUS91MEJFeEFBLy84QkJBVVFBN0VGcWdZR0FIQUFBQUFCQVAwRXl3TnlCZWdBRGdBUXRRRUJDWUFNQlFBdk14ck1NaTh3TVVFM0RnSW5KaVkxRndZV0Z4WTJBc1N1QjF5VFdZQ21yd000UTBSUUJlWUNXNEJDQWdLV2d3RStUd0VCVHdBQUFRRURCT0lDQUFYWEFBc0FDYklEQ1JBQVB6TXdNVUUwTmpjMkZoVVVCZ2NHSmdFRFNEVTFTMGcyTlVvRldEZEdBUUZDTmpaRkFRRkFBQUlBK2dTTUFxSUdKZ0FOQUJrQURyUVhCSUFSQ3dBdk14ck1NakF4VXpRMk5qTXlGaFVVQmdZaklpWTNCaFl6TWpZM05pWWpJZ2I2UFdVN1ZIYytaVHRUZDJnRk1Dd3dTZ1lHTUMwd1NnVlBQR0k1YzFVOFlEWnVWeW8vUmk4cVFVa0FBZitvL2xVQklBQTdBQlVBRHJRSUQ0QUJBQUF2TWhyTU1qQXhkeGNPQWdjR0ZoY3lOamNYQmdZaklpWTNQZ0tyZFNOU1BnWURHQjBZTEJVTklrNHBWV2tDQVU1Mk96MFpPa292SFNBQkRnbU5GUlJwVjBwd1VBQUFBUURjQk44RHhBWHpBQmtBSjBBVEFBQUJBUW9TUUE4YVNCSUZnQTBORGc0WEJRQXZNek12TXk4YUVNMHJNakl2TXk4d01VRVhEZ0luTGdNSEJnWUhKejRDRng0RE56WTJBemFPQlRka1NDWkFQRDRqTHpBTWtnWTRaRWtrUHp3L0pTNHlCZk1LUVhkTEFRRWVKaHdCQWo0b0IwQjRUQUVCSFNZY0FRRS9BQUFDQUs0RTBRUHJCZjhBQXdBSEFBNjBBUVdBQUFRQUx6TWF6VEl3TVVFQk13RWhFek1CQWVRQkV2WCt5UDM3NU83KzhRVFJBUzcrMGdFdS90SUFBQUwvOVA1c0FWSC92Z0FMQUJjQURyUVBDWUFWQXdBdk14ck1NakF4UnlZMk16SVdGUllHQndZbU53WVdNekkyTnpZbUl5SUdDd0ZyU2tSakFXaElSV2RpQkNJZUlUWUZCQjRmSWpqelMyWmVSa2xqQVFGYVNSMHROQ0FiTVRVQUFBSDlWZ1RUL3RzR0FBQURBQXF5QTRBQ0FDOGF6VEF4UVJNakEvNVJpclRSQmdEKzB3RXNBQUFCL2R3RTAvL29CZ0FBQXdBS3NnR0FBQUF2R3Mwd01VRVRCUUg5M1BJQkd2N0RCTk1CTFFIKzFQLy8vUGdFMy8vZ0JmTUVCd0NsL0J3QUFBQUIvZFVFNWY4OEJud0FGQUFRdFJRQ0FJQUxEQUF2TXhyTU1qSXdNVUVuTno0Q056WXVBaWMzSGdNSEJnWUgvb3kzQ3hwRk53VUVIQzR3RUJBcWEyTS9BUUpqUUFUbEFaQUJDaDRqR1JzTEFnRjRBUTRtU0RwSVNBc0FBQUw4dkFUay83QUY3Z0FEQUFjQURyUUhBNEFFQUFBdk1ock5NakF4UVNNRElRRWpBelAraWR2eUFRb0I2cy9BL3dUa0FRcis5Z0VLQUFBQi9LSCtsZjJ2LzR3QUN3QUlzUU1KQUM4ek1ERkZKalkzTmhZVkZnWUhCaWI4b2dGUU56VlJBVkUxTlZMME9VVUJBVUUzT1VRQkFVQUFBUUUyQk93Q2tRWkFBQU1BQ3JJQWdBRUFMeHJOTURGQkV6TURBVFo2NGNZRTdBRlUvcXdBQUFNQTd3VGpCQ0FHc0FBREFBOEFHd0FaUUFvVEdSa05BWUFBQUFjTkFDOHpNeThhelJFekVUTXdNVUVUTXdNRk5EWTNOaFlWRmdZSEJpWWxKalkzTmhZVkZBWUhCaVlDUUdEa3N2NGRSak14U1FGSE1qSklBajBCUmpNeVNVWXlNa2tGaHdFcC90Y3lORVFCQVVBeU5FTUJBVDh4TkVRQkFVQXpORUlCQVQ3Ly93Q2ZBa1FCc2dOUUJnWUFlQUFBQUFFQUt3QUFCS3dGc0FBRkFBNjJBZ1VDY2dRSWNnQXJLekl3TVVFSElRTWpFd1NzSS8xeDJ2WDlCYkRJK3hnRnNBQUFBLytzQUFBRkR3V3dBQVFBQ1FBTkFCdEFEUVlDQndNQ2NnME1EQVVDRW5JQUt6SXlFVE1yTWhJNU1ERkJBU0VCTXhNQk56TUJKd2NoTndPTi9Tais5d00ranFMKytqbU9BVFN4SS93Mkl3VWkrdDRGc1BwUUJVTnQrbERIeDhjQUF3QmQvK2tGRndYSEFBTUFHd0F6QUJ0QURTOEtBd0lDQ2lNV0EzSUtDWElBS3lzeUVUa3ZNeEV6TURGQkJ5RTNCUWNHQWdZR0p5NEVOemMyRWpZMkZ4NEVCVGMyTmk0Q0p5WU9BZ2NIQmdZZUFoY1dQZ0lEcXlIK1VTSUREUXNUYTY3d21IYXVka0lTRFFvVWJLL3dsM1d2ZFVJUy92SUxDQUlWT0dWUGFKaG9QUTBMQ0FJV09HVlBhSmxuUEFNNXY3ODNUNHYrLzhwMEF3SlNqTFRLWmxDSUFRRExkQU1DVVl5enlyaFRQSWlDYWtJREJGbVd0RmRUUEllRGJFUUNCRnFXdEFBQUF2K3lBQUFFZlFXd0FBUUFDUUFYUUFzR0FBSUhBd0p5QlFJSWNnQXJNaXN5RWprNU1ERkJBU0VCTXhNRE56TVRBeGY5cS83d0F1bXhNck1icU84RXcvczlCYkQ2VUFUaHovcFFBQVAvL2dBQUJJUUZzQUFEQUFjQUN3QWJRQTBCQUFVRUJBQUlDUUp5QUFoeUFDc3JNaEU1THpNUk16QXhZemNoQndFM0lRY0JOeUVIQWlNRHFTVDlMQ01DMnlMOU9DUURlaVRIeHdLSHdzSUNZY2pJQUFFQUt3QUFCWU1Gc0FBSEFCTkFDUUlHQkFjQ2NnWUljZ0FyS3pJUk16QXhRUU1qRXlFREl4TUZnLzMwMmYyUDJ2WDlCYkQ2VUFUbyt4Z0ZzQUFBQS8vY0FBQUVuUVd3QUFNQUJ3QVFBQ0ZBRUE0R0JnY0hEd0p5REFNREFnSUxDSElBS3pJUk14RXpLeklSTXhFek1ERmxCeUUzQVFjaE53RUhBU00zQVFFM013UG1JL3gySXdSQkkveWNJd0hqQXYxN3VSd0NJLzZtR0tuSHg4Y0U2Y2pJL1RnVi9TMmRBa3dDUVlZQUFBTUFWQUFBQmF3RnNBQVRBQ2NBS3dBaFFCQVVGUlVCQUNrSWNoOGVIZ29MS0FKeUFDdk5NaklSTXl2Tk1qSVJNekF4WlNjdUF6YzJFaVF6Rng0REJ3WUdCQ1VYTWpZMk56WXVBaWNuSmdZR0J3WWVBZ0VESXhNREVNUjJ3SVErREJHMkFSMnB5WGEvaEQwTUVibis0djZkeDI2c2F3OElGVDlwUzh4dnJXc05DUmRCYXdIeC9mWDlxZ0lDVDQvRmQ2d0JBSTBDQTFLVHgzYXQvSWZUQTFXZWJVZDZXelVEQWdGWm9tNUlkMWN6QkRINlVBV3dBQUFDQUhZQUFBWFJCYkFBR1FBZEFCbEFEQlFIQncwY0NISWRBUTBDY2dBck1qSXJFVGtSTXpBeFFUTURCZ0lFSnljdUF6Y1RNd01HSGdJWEZ4WTJOamNEQXlNVEJOdjJWQnU3L3Q2NFZZRElnemNQVS9SVENSTkFjVk5UZXJOdUVybjg5ZjBGc1A0U3RmNzJqd0VCQkZpYzFJQUI3djRSVElsclFBUUJBbU94ZEFIdStsQUZzQUFBQXdBS0FBQUU3d1hIQUMwQU1RQTFBQ1ZBRWlnU0VpOHBLVFFSRVRNdU1oSnlCaDBEY2dBck1pc3lNaklSTXpNUk16SVJNekF4UVRjMkxnSW5KZzRDQndjR0JoWVdGd2N1QXpjM1BnTVhIZ01IQnc0REJ6YytBd0UzSVFjaE55RUhBOG9PQ0FNblhWSllnRmN6Q2c4SURSRkRTUTF5bjE0Z0RRNFJhS1RkaUlDN2N5d1BEaEZqbmM5K0QxTnpTaXorb3lNQjRTUDd4eVFCNkNNQzcyZy9rSUJVQXdOTGY1aEpaejJqcFlBYmp4ZU55TjFuWkh6anNXUURBMnV4M1hWa2R1ZkNnaEtRSFhhWXFQMWh5TWpJeUFBQUF3QTcvK2NFTWdSU0FCWUFMQUJCQUJwQURTNEdORHM3SFJJTGNpZ0dCM0lBS3pJck1qSVJNejh3TVZNM1BnTVhIZ1FIQnc0REp5NEROd2NHSGdJWEZqNENOemMyTGdJbkpnNENBVE1EQmdZV0ZoY1dOamNYQmdZbkxnTTNFMFFEREVOMXJuZFJjVWdtREFRSEQwVnduMmxxakUwWCtRSUdBeUJMUWtKb1R6TU5DUU1NS1U4L1RXdEVKZ0lwellFQ0JRTVVHQVlPQndZYU9CODlVQzBQQWw0QjlCVmswSzFvQXdOR2M0cVNRajVZdTU1ZkF3TmVtYlp3RmpOeFpFQURBamxoZERsR00zVnJSZ0lEU25pSkFmUDlCdzh0TFI4Q0FRUUJ0QThNQVFFNVcyczBBajRBQUFMLzV2NTFCR2tGeHdBY0FEb0FIa0FPTlFBbUp5Y2NIREFkQXhNSkMzSUFLekkvTXprdk14STVPUzh3TVVFWEhnSUhEZ0luTGdNM053WVdGaGNXTmpZM05pWW1KeWNUSGdJSERnSWpJemN6TWpZMk56WW1KaWNtQmdZSEF5TVRQZ0lDTDN0enRXRUpDb0xYaUZlU2FUY0VYUVZLZkVaTmZsQUtDQjlSUlh6Q2M3VmxDUWlNejI1dkZFRkdhMElJQmlKTk9rUnVSd3Y0Ni9jU2s5d0RMUUVEV3FwNmg4eHdBd0k1YVpCWUcwMW1Nd0lCUW5WTFFHNUhBd0VESUFKY3EzaDVvbE9FTjJWR04xdzNBZ0pBYkQvNlZ3V29mc0ZyQUFNQWRmNWZCREFFT2dBREFBZ0FEUUFaUUE0SURBTUVDZ1VCQlEwR2NnRU9jZ0FyS3pJU0Z6a3dNV1VESXhNM0FUTUJJeE1UQnlNREFodGM3RnlHQVg3OS9kQ21CMjRKbWJodC9mSUNEcUVETFB2R0JEcjh0L0VFT2dBQUFnQTEvK2tFSEFZa0FDd0FRZ0FaUUEwVUtENERCRE1lQzNJTEJBRnlBQ3N5S3pJU0Z6a3dNVUUrQWhjV0ZoY0hKaVlISWdZR0J3WWVBaGNlQWdjSERnTW5MZ00zTno0Q056VXVBZ01IQmg0Q0Z4WStBamMzTmk0Q0p5WU9BZ0U2QlgyOVpVU0FRQk0zZHo0cFZUOEpCaGt4TnhkNnAwd09BZzVaa2NKMWNhUm9Ld2tEREdlb2NEQkRJZ2NEQlFZblVVVkliVXN0Q1FNRkRpeE1PVWh2VFM0RTVIQ09RZ0VCSFJhL0Z5QUJHRFl0SVRBbUd3bzFuOWVIRm5ERWwxTURBbGFUdTJnWGJyK0VGUTBiVFdEOWJoWTJkMmxEQWdJL2FvQStGVEZ2WmtrTEJrQnRnUUFDQUNqLzZnUUVCRThBSHdBL0FCOUFEd0FoUGo0REF4WTFLd2R5REJZTGNnQXJNaXN5RWprdk14STVPVEF4UVJjSEp5SUdCZ2NHSGdJWEZqWTJOemNPQXljdUF6YytBd1VuTGdNM1BnTVhIZ01WSnpZbUppY2lCZ1lIQmg0Q0Z4Y0I3Zk1XcnpodlVRa0ZJRHRHSVRWcVVBM3NDRnVOcFZOSW1ZRk5Bd1JXaHBvQkx0VTVnRzlFQWdOYmtLWk5TNDV6UStnQk5sVXRNR2ROQ0FZYU16OGV5d0pNQVhjQkcwVkJLRGdpRUFFQklFYzRBVnlEVWlVQ0FTTktlVmRYY1VBYVJ3RUNIVHhqUjExOVNpQUNBaWhRZVZNQk16NGNBUjFDTnlZeUhBMEJBUUFBQWdCbS9ud0VQZ1d3QUNnQUxBQVZRQWtWQWl3c0tTa0FBbklBS3pJdk14RXpMekF4UVRNSEFRNENCd1llQWhjWEhnSUhEZ0lISno0Q056WW1KaWNuTGdNM1BnSTNBeUVISVFPd2poditaVVYrV1E4RkJoZ3VJMXc5YjBNRUJVcHJOWFlZTWlZR0Jod3ZGMGhFYWtnZkJ3eHRuRkRvQXZZaC9Rb0ZzSmorWFVXVXFXVWxQVEFsRGg4Vk1GVk5SSHBsSkdnWk4wQWpIU1FXQnhZVlFGZDFTbmJid0ZFQjJMNEFBZ0FSL21FRCt3UlJBQVFBSEFBWFFBd1lDd01HY2dJS2Nnc0hjaEVBTHlzckt4RXpNREZCQXlNVE13TUhQZ01YSGdNSEF5TVROaTRDSnlZT0FnR09rdXU4MTNBK0MwTjFxRzliZVVNVUNMdnN1d1lJSUQ0eVNtNU9NQU5GL0xzRU92NEhCR0s5bTFvQ0FrTndrbFA3ckFSVUxVMDhJd0VETjJGNkFBTUFidi9wQkVJRnh3QVpBQ2NBTmdBZFFCQU5LR293SUdvd01BMEFHbW9BRFF0eUFDc3ZLeEk1THlzck1ERkJIZ1FIQnc0RUp5NEVOemMrQkJjbURnSUhCeUUzTmpZdUFnTVdQZ00zTnlFSEJnWWVBZ0xHYVk5WEtRUUxJQTQyVjN5cGJXbVBWeWtFQ3lBT05sZDlxR0JSYlVNbENnY0J5QWdGQ0FZaFJQeEJYa01zR2djSC9qY0dCZ2dISUVVRnhBTk9ncVN4VnRaY3U2ZUJTQU1EVDRXbHMxVFhYYnFsZjBiQkJGQ0JrVDQwTmlocGJWNDgrNllETlZ4eGRERXVMeWhxYjJFK0FBRUFadi8xQWdBRU9nQVJBQTYyQmcwTGNnQUdjZ0FyS3pJd01WTXpBd1lXRmhjeU5qY0hCZ1lqTGdJMzhleUVCQWttSmhVc0ZSRWtTeVphYml3SUJEcjgrQ00wSGdJR0Fya0xDZ0pSaVZRQUF2K24vL0FEMmdYN0FBUUFKZ0FlUUJBQUd3UURCQUlnQlFCeUR4WVdBZ3B5QUNzeUx6TXJNaElYT1RBeFFRRWhBUmNCTWg0Q0Z4TWVBaGNXTmpNSEJnWWpMZ0luQXdNdUFpY21CZ2MzTmpZQ0t2NkcvdmNDVDZqKy9peExQQ3NMNHdVUkhSb0pFd2tPRlNvV1JWODdFSmsrQ0JnbkhnNGNEZzBlUGdMay9Sd0VVZ2dCc0JZc1FDdjd5aGNxSFFJQkFjQUVBd0UxWGtFREVnRUZHeWtZQVFFQkFiUUhDQUFBQWdCQy9uWUVIZ1hHQUI0QVJnQVpRQXNmRVE4UElTRXpCUnNEY2dBck1pODVMek1TT1Rrd01VRUhMZ0lqSWdZR0J3WWVBaGNYQnljdUF6YytBeGN5RmhZQkZ3Y25JZ1lHQndZV0ZoY1hIZ0lIRGdJSEp6NENOelltSmljbkxnTTNQZ01FSGpZaVIwZ2xPbjVlQ2dnaVExUXJuQnFEU0orTVZBUUdYSk93V0RGZFcvN1RuQmg5WXE5MkRBa3VYajVlUEhCRkJRUkxhek43R0RZb0JnVWRMeFkzVjVGbU1nY0tkN2ZZQlppNkNoSUtIMHRFTTBRbkVRRUJqQUVCSGtaM1cyU09XaWtCQ3hUOXhRR0lBVHVEYWtWblJSSVpFVEpZU1VSNVpDUm1HamcvSmh3aUZBZ1JHMGRra1dON3AyUXRBQUFEQUdILzlRVGxCRG9BQXdBSEFCa0FHVUFORGhVTGNnWUtjZ2tIQWdNR2NnQXJNakl5S3lzeU1ERkJCeUUzSVFNakV5RXpBd1lXRmhjeU5qY0hCZ1lqTGdJM0JPVWgrNTBoQVpTODdMd0NMdXlFQkFvbEpSWXFGUTRsU3lWYmJpd0hCRHE2dXZ2R0JEcjgrQ00wSGdFRkE3b0xDZ0pSaVZRQUFBSC95LzVnQkE4RVVRQXZBQmRBREI0cEJoRUxjZ1lIY2dBT2NnQXJLeXNSTXpJd01VTVRQZ01YSGdNSEJ3NERKeTRESng0Q0Z4NENGeFkrQWpjM05qWW1KaWNtRGdJSEF6V3FFRlNHdUhSM25GWWJDd0lNUlhXb2NHaUdTeUVCRFJ3Y0R3TXBXazFIYUVZb0NRSUZBaHRMUmtOaFFTY0lxUDVnQStKcHdKTlRBd05scGNsbUZXSyttMW9EQTEyVnNWY0tGQlFKUTNWSUF3STdaSG84RlRLQmVGQURBa0pzZWpiOExBQUJBRGIraVFQakJGRUFMUUFPdFJzSkJRQUhjZ0FyekRNdk1ERkJIZ0lISXpZbUppY21EZ0lIQndZV0ZoY2VBZ2NPQWdjblBnSTNOaVltSnk0Q056YytBd0pyZWFwVkJONEVIMHBBU0dsSUtnZ0VDaTFvVUQ1MFNnUURTMm96ZUJnekpnVUVHUzBYZ0xCVURRUU1WbzYrQkU0Q2FiWjNPbUE5QWdOQWJINDhJMVdCV3hzV01WaFFRbnBsSkdnWU9EOG1IQ1FVQ0NxSXlJMGpiY2VhVndBQUF3QTMvK2tFcndSQ0FCZ0FMZ0F5QUJOQUNTb0dNZ1p5SHhRTGNnQXJNaXN5TWpBeFV6YytBeGNlQWhjZUFnY0hEZ01uTGdNM0J3WWVBaGNXUGdJM056WXVBaWNtRGdJQkJ5RTNRUU1OV1pIQ2R4MHpOU0ZSYVM4SEF3dGFqNzF2YzZSbEp2Z0RCUVVrVVVkSmEwZ3BDQUlHQmlOUFEwaHNTeXdEZUNMOTB5SUNDaGRzeDVwVUJnOHhNdzhuamF4V0YydThqMDRDQWx1YXdIOFhObmxxUlFNQ1FteUJQUmMwYzJaQ0FnSTdaM3dCMjhEQUFBQUNBR3ovN0FRa0JEb0FBd0FWQUJWQUNnVUtFUUlEQm5JUkMzSUFLeXN5RVRNeU1ERkJCeUUzSVRNREJoWVdGeFkyTnhjR0JpY3VBamNFSkNIOGFTRUJTdXVFQXdRZUloa3VGeElvVlM5ZmJTa0lCRHErdnZ6d0hUWWtBUUVOQjdJVkVnRUNXcEpYQUFFQVYvL25BKzRFUEFBZUFCTkFDUkFIR1FBR2Noa0xjZ0FyS3hFek1qQXhVek1EQmdZV0ZoY1dQZ0kzTmdJbkZ4WVdCZ2NPQXljdUF6ZlA2MjBFQVJJeUwwbHZUUzRJRXdvZzRCb1ZBd3NQVW9yRWZtT0pVaDRKQkRyOVp5SlRUVFFCQkU5K2pEcUFBUVo5QWxHc3IxVngxcXBoQXdKR2VwOWJBQUFCQURIK0lnVmVCRVVBTHdBWlFBd3JCUVVaR0FaeUlnOExjZ0FBTHlzeUt6SXlFVE13TVVFVFBnSVhIZ01IRGdNbkxnTTNQZ0kzRnc0Q0J3WWVBaGNXTmpZM05pNENKd1lHQndNQm10MEpVNEpRYmFseU1Rc1FnY3I3aW9uZG1VTVFEVTUrVjR3MVZEb01EeUJYaTF0NzFJMFBCZ2dvVUQ0ZUlRamovaUlGSEU5MlFnRUNXWmErWjVEYmtra0NBbEdaMjR4cXZxQStrakoyaFVoYWsyazZBZ0pacjM4MWMyUkRCUWtXSC9yZEFBSUFQLzRsQlY4RVBBQWVBQ0lBRlVBS0lRY1pDM0lnRUFBR2NnQXJNaklyTWk4d01WTXpBd1llQWhjV1BnSTNOaVluRng0Q0J3NERKeTRETndFekFTT2k3RklNR0VxQ1gyT3JoRllRRXhNajJ4OGJBZ29UZmNUOWtvM2JrRHNSQWxUci92THNCRHIrRWxpWGNVQUNBamh0bldKNy9uY0NUcWFvVTVQbG5FOENBbFdmNG84QjZmbnJBQUlBVXYvbkJnUUVQUUFlQUQ4QUdVQU1BUmNLQ2lrMkh3WnlOZ3R5QUNzckVUTXpFVE15TURGQkZ4NENCdzRESnk0RE54TXpBd1lHRmhZWEZqNENOellDSlJjR0FnY0dCaDRDRnhZK0FqY1RNd01PQXljdUJEYytBZ1RlM1NNaUJBc01RSEd0ZTJkOVBRd0tNNncwQlFNVU9qbEVXalVjQnhFWC9DcndRNElXQlFrQkZ6WXdQbFUySGdZMXF6TU5PMldhYkYxL1RTTURDUXc3V1FROUExR3JyMVpuMDdCb0F3TmptN05TQVRmK3VpZG9ZME1DQTFhQ2lER0NBUWQ1QVgzKy80NGVYMmxkUGdJRU8yRnZNQUZHL3NsYXVacGNBd0pKZUpXZ1MyRzFxUUFCQUZMLzZBU09CY29BT0FBZFFBMGRIaGMyQkFRTkl4Y0xjaTBOQUM4ekt6SVJPUzh6RU13eU1ERkJCd1lHSnk0Q056YytBaGNlQXdjRERnSW5MZ00zRXpjREJoWVdGeFkyTmpjVE5qWW1KaWNpQmdZSEJ3WVdGaGN5TmdTT0J6aDFPNWp5aFF3QkMyZXFjRlYzU0JvSVp4T0kyNUJpbTJjc0N5N2tMZ2tnVjB4T2FEb0xad01CRGlRaUxqc2dCZ0VJUm90aU9YUURJTVlTRlFFQmdlZWVGR3VzWkFNQ1EyK05UZjJHaWRaNEF3SkxmNmhnQVNFQi90MUVlRTRDQTA1OVJBS0xHenMwSXdJdlNpa1dZWTFOQWhJQUFBTUFiZ0FBQlJjRnlBQURBQllBS1FBZVFBNFFDUWtmSmdOeUdoZ1dBd01DRWdBL014RXpNek1yTWpJUk16QXhRUU1qRXpjQlBnSVhNaFlYQnlZbUl5SUdCZ2NCSndNVEJ3Y0RMZ0luSmdZSEp6WTJNeDRDQXI1NTlIaDRBUjRmVW01TEpVWWpPQTBiRFJ3cUl3NytZNmdRZXdXYnJ3WVdJQllQSEE4UUhqOGhRMTgrQXJmOVNRSzNOUUlCUG1RNUFoQU51d0lGRlNRVi9VOEJBdmo5MzljQkFyRVVJQk1CQVFRRHdRd01BVGRlQUFBREFGVC81d2FGQkQwQUF3QWtBRVVBSVVBUUpnVURIQTh2UEF0eVBBOENBd1p5RHdBdkt6SVJPU3N5RVRNUk16TXdNVUVISVRjbEZ4NENCdzRFSnk0RE56Y3pCd1lHRmhZWEZqNEROellDSlJjR0FnY09BaFlXRnhZK0FqYzNNd2NPQXljdUJEYytBZ2FGSVBuNUh3UkozQ1FpQXdvS0tVWm5rV0JuZ0Q4T0NpS3NJd1VDRnowNk5Fa3dIeEFGRVJqOFJmQkRneFlEQ3dJU0x5dy9WemdmQ0NLc0lnMDhhSjFzWEhsR0h3RUlEVHRaQkRxeXNnTURVS3l2Vmsrbm0zdEdBd0ppbTdOVTFPTXBhV05DQVFFNlgyMW1KSUlCQjNrQmZmNy9qaHBkYVdCQUF3WTdZbkF3NDlSY3VacGFBZ05NZXBlZFIyRzFxUUFBQXdDVS8rNEZnQVd3QUJzQUh3QWpBQ0ZBRVI4akdBVUZEaUlqSGdoeUl3SnlEZ2x5QUNzckt4RXpFamt2TXhFek1ERkJOejRDRng0Q0J3NERCemMrQXpjMkppWW5KZ1lHRXdNakV5RUhJVGNDTWhBNWVuMDlpdFp4REF0bG9NcHZFVUZ1VkRZSUNUQnFUajk2ZUxYOTlQd0MxaVA3dENNQ2Jzd1VIeEFCQW1iR2tubXRiamdDdndFaFFXTkNUMjQ4QVFJUkhnTXUrbEFGc01qSUFBQUNBR0gvNlFVTkJjY0FBd0FzQUIxQURnTUNBZ2tkR1JRRGNpa0VDUWx5QUN2TU15dk1NeEk1THpNd01VRUhJVGNCTndZR0JDY3VBemMzUGdNWEhnSVhJeTRDSnlZT0FnY0hCZ1llQWhjV05qWURhU1A5dmlNQ2tQSVpyZjc4bTVEQ2JpTVFFaFJwck91V21kSndCZk1DTG10ZVo1VmtQQTBSQ0FRVE5HRk5aSkJkQTBESHgvNlpBcHZoZGdNRGQ4WHpmWGVJK2NWdkF3T0E0Sk5YaGs4REJGYVJyMVo3T29OL2FVSUNBMGFJQUFQL3h2Ly9CKzRGc0FBUkFCVUFMZ0FuUUJNa0lTRUpMaFlXQUFvSkNISVVGUlVqQUFKeUFDc3lNaEV6S3pJU09TOHpFVE1STXpBeFFUTUREZ1FuSXpjM1BnUTNBUWNoTndFRkhnSUhEZ01uSVJNekF3VStBamMySmlZbkpRSHU5SjhVTTB4M3JueEpHaU5UY1Vnc0hBc0RYU1Q5WUNNQ3NnRlVodEp5REFwa29NZHMvZWI5OWRzQkMxT01Xd3NLTFdOSy9vOEZzUDB0WTlDOWxsZ0J4Z0lHVm9TY21qOENrOGpJL2U0QkEyN0pqSE93ZUQwQkJiRDdGd0lCUTN4VlNIQkJBd0VBQUFNQUsvLy9CL1FGc0FBREFBY0FJQUFqUUJFSUlDQURBZ0lHRlFjQ2NoWVRFd1lJY2dBck1oRXpLeklST1M4ek15OHpNREZCQnlFM0V3TWpFd0VGSGdJSERnTW5JUk16QXdVK0FqYzJKaVluSlFSZEkvMFdJNnI5OWYwRHJnRlVndFIwQ3dsbG44ZHEvZWI4OWRrQkNWR0xYUXNLTVdWSC9wQURRY2JHQW0vNlVBV3cvZFFCQkdiQmkzS3VkRG9CQmJEN0d3RUJQWFZUUjJnNkF3RUFBd0NkQUFBRml3V3dBQlVBR1FBZEFCMUFEaGtCR0FZUkVSZ2NIUUp5R0FoeUFDc3JNaEU1THpNUk16SXdNV0VqRXpZbUppY21EZ0lITno0REZ4NENCd0VESXhNaEJ5RTNCUy8wVEFva1oxZ3lZV05nTHhRdFhsOWhNSkhYYXhIOXB2MzIvUUxWSS92Qkl3SEdWblE4QWdFSURoWU95ZzRXREFZQkFtZk5tZ1BzK2xBRnNNaklBQUlBSXY2WkJYb0ZzQUFIQUFzQUYwQUxDUVlCQW5JTEF3TUFDSElBS3pJU09Tc3lMekF4Y3hNekF5RVRNd01sQXlNVEl2MzEyZ0p3Mi9YOS9uaGY5VjhGc1BzWEJPbjZVTHY5M2dJaUFBSUFJLy8vQktRRnNBQUZBQjRBSVVBUUJoNGVCQUlURXdVQ2NoUVJFUVFJY2dBck1oRXpLeklSTXhFNUx6TXdNVUVISVFNakV4TUZIZ0lIRGdNbklSTXpBd1V5TmpZM05pWW1KeVVFcENQOWNOcjAvRWdCVllQVWRRd0paS0RHYS8zbS9QYmJBUXBTaTFzTUNUQmxSLzZPQmJESSt4Z0ZzUDNSQVFOa3dJeHpyWFE2QVFXdyt4Y0JQblpWU1djM0F3RUFCditJL3BvRmtBV3dBQU1BQndBTEFBOEFFd0FsQUNkQUV3c1JFU0FEQXdjZUNISU9EdzhRRkFKeUNRVUFMek1yTWpJUk15c3lNaEV6TWhFek1ERmxCeUUzTXdNakV5RURJeE1UQnlFM0lRTWpFeUV6QXc0RkJ5TTNGejRETndTbkkvdnVJejFoNlZZRmhtL29ZV2dqL1hNakEwZjg5UDM5ZXZpS0VTOUFVbWlDVHBFZFBreHRURE1UeDhmSC9kTUNMZjNVQWl3RTZjakkrbEFGc1AyelRLbXVwSkJ0SDhjQ081dXd1MXdBQmYra0FBQUg2QVd3QUFVQUNRQU5BQk1BRndBblFCTVdFUWtEQXdBQUR3OFVEQWdJY2c0S0FRSnlBQ3N5TWlzeU1qSXZNeEV6RVRNek16QXhRUUVoRXlFSEp3RWhBUUVESXhNaEFTRTNNd0VEQXpjQkFrbitnZ0VkN2dFSVNOWCtJdjdCQW53Q3NmejAvUVFLL1dyK3JBVHhBYjNaL3NzQlZ3SjJBenI5bjlrVi9YVURQd0p4K2xBRnNQekcyUUpoK2xBQ29LTDh2Z0FDQUIvLzZnU2tCY1lBSGdBK0FDTkFFUUFnQWdJK1BoVTBNQ29KY2c4TEZRTnlBQ3N5ekN2TU14STVMek1TT1Rrd01VRW5OeGN5TmpZM05pWW1KeVlHQmdjSFBnTVhIZ01IRGdNbEZ4NERCdzRESnk0RE54Y0dGaFlYRmpZMk56WXVBaWNuQXBQVEdaeExnMWNLQ1R0dFFVUjRWUTMwQ1dPYXVWOWZxNFJHQ0Fkam1iSCs2TFpXcEg5RkJ3ZHNxY3RtWWFxQVJnUHpBenhwUkV5UmFBc0hHVHhZTjdjQ3VRR1BBVEJsVUVkY0xnRUJNRjlGQVdlYlpqTUJBakZqbUdwaGpGc3NXQUVDS1ZlTFpIS21heklDQWpocW5tY0JSbU0yQXdFemFsRTdWVGNjQWdFQUFBRUFKUUFBQlh3RnNBQUpBQmRBQ3dVQUJnSUlBbklFQmdoeUFDc3lLeklTT1Rrd01VRUJNd01qRXdFakV6TUJZZ01lL1AzMXRQemovUDMwQWFnRUNQcFFCQW43OXdXd0FBUC94Zi8rQlg0RnNBQURBQWNBR1FBWlFBd1NCUkVJY2dJREF3UUlBbklBS3pJeUVUTXJNakl3TVVFSElUY2hBeU1USVRNRERnUW5JemMzUGdRM0JNTWovVm9qQTJIOTlmMzlZL1dmRlRKTmRxOTdTUm9qVkhGSUt4c05CYkRJeVBwUUJiRDlMV0xRdjVoV0FzY0NCbFdFbTVwQUFBQUNBSm4vNkFWV0JiQUFFd0FZQUJwQURoY1dBQlVFQ0FJWUFuSVBDQWx5QUNzeUt6SVNGemt3TVVFQklRRU9BeU1pSmljM0ZoWXpNalkyTndNVEZ3Y0JBamdDQmdFWS9Vb2pVR0Y1VFJzM0d4WVNLQlEwU3pnWEFkb1l0LzdHQWdVRHEvdFhQMmxPS1FRRHh3TUVKa01yQkczOHovc0lCRFFBQUFNQVZmL0VCZ3dGN0FBVkFDa0FMUUFiUUF3ZkRBd3JGZ0FBS3lvRGNpc0FMeXNST1M4ekVUa3ZNekF4UVFVZUF3Y09BeU1sTGdNM1BnTVhKZ1lHQndZZUFoY0ZNalkyTnpZdUFpY1RBU01CQXY4QkZYdkJnam9ORFhHMTVvUCs2M3pCZ2pvTkRYRzA1M3g1dDI4UENSUkFiMUVCR0hpMWNBNEtFejl0VXlIKzcrd0JFUVVvQWdOZW9OTjNnOXlnV1FJQ1c1L1FlSVRkcEZySUFXdTRka21HYWtBREFtaTJjMHFJYkVJREFZNzUyQVlvQUFJQUlmNmhCWGtGc0FBRkFBMEFHVUFNREFjQ2NnVUVCQWtHQ0hJQkFDOHJNaklSTXlzeU1ERmxBeU1USXpjRkV6TURJUk16QXdWT2N1TStmeVA4UnYzMTJnSngydlg4eWYzWUFWL0p5UVd3K3hjRTZmcFFBQUFDQU1RQUFBVmRCYkFBRlFBWkFCZEFDeGNHRVJFWUFBSnlHQWh5QUNzckVUa3ZNekl3TVVFekF3WVdGaGNXUGdJM0J3NERKeTRDTndFekF5TUJJZlJLQ2lSbVdERmlZV0F2RXk1ZFlXQXdrdGRxRVFPVDlmMzFCYkQrUEZkMFBBSUJCdzhXRGNrUEZnMEdBUUpvenBvQncvcFFBQUVBS0FBQUIyVUZzQUFMQUJsQURBVUpCZ0lDQ3dBQ2Nnc0ljZ0FyS3hFekVUTXlNakF4UVRNRElSTXpBeUVUTXdNaEFTWDEyZ0d6MnZYYkFhL2E5ZjM1d0FXdyt4Y0U2ZnNYQk9uNlVBQUFBZ0FvL3FFSFpRV3dBQVVBRVFBZFFBNE1CUWdJQkJFSWNnOExCZ0p5QVFBdkt6SXlLekl5RVRNek1ERmxBeU1USXpjQk13TWhFek1ESVJNekF5RUhNWERaUFg4aCsxNzEyZ0d6MnZYYkFhL2E5ZjM1d0wvOTRnRmZ2d1R4K3hjRTZmc1hCT242VUFBQ0FJZi8vd1diQmJBQUF3QWNBQjFBRGhFU0R3UWNIQThBQVFKeUR3aHlBQ3NyTWhFNUx6TVJNekl3TVZNM0lRY1RCUjRDQnc0REp5RVRNd01GUGdJM05pWW1KeVdISWdIZUlSUUJWSVBWZFF3SlpLREdiUDNtL2ZYYkFRcFRpbHNNQ1M5bVJ2Nk9CUERBd1A2UkFRTmt3SXh6clhRNkFRV3creGNDQVQ5MlZFbG5Od01CQUFJQUxQLy9CcmtGc0FBWUFCd0FIVUFPR2hrT0N3QVlHQXNNQW5JTENISUFLeXNST1M4ekVUTXlNekF4UVFVZUFnY09BeWNoRXpNREJUSTJOamMySmlZbkpRRURJeE1CY0FGVmc5UjBDd3Brbjhacy9lYjg5dG9CQ1ZPS1hBc0tNR1pIL284RmJQMzAvQU9CQVFOa3dJeHpyWFE2QVFXdyt4Y0JQblpWU1djM0F3RUM5dnBRQmJBQUFBRUFKUC8vQklnRnNBQVlBQmxBREE0TEFCZ1lDd3dDY2dzSWNnQXJLeEU1THpNUk16QXhRUVVlQWdjT0F5Y2hFek1EQlRJMk5qYzJKaVluSlFGbkFWV0QxSFVNQ1dTZ3htdjk1dnoyMndFS1VvdGJEQWt3WlVmK2pnT0JBUU5rd0l4enJYUTZBUVd3K3hjQlBuWlZTV2MzQXdFQUFnQkkvK2tFOGdYSEFBTUFMQUFkUUE0REFnSWVDUVVwQ1hJWkZSNERjZ0FyTXN3cnpETVNPUzh6TURGQkJ5RTNBVE1lQWhjV1BnSTNOelkyTGdJbkpnWUdCd2MyTmlRWEhnTUhCdzRESnk0Q0JGY2ovYkFqL2tIeUF6SnZYMmFTWWprTkVRZ0RGVGRrVFdTT1doYnpHNm9CQUp5UXhISWtFQklUYUtqcGs1allkZ003eU1qK29GbURTd01EVjVLdlZYczZoSDlvUUFNRFM0cGNBWnJrZWdNQ2VNYnpmbmlHK01Sd0F3TjYzUUFFQURQLzZRY0NCY2NBQXdBSEFCMEFNd0FqUUJNdkJ3WUdEaVFaQXdKeUFnaHlHUU55RGdseUFDc3JLeXNSTXhJNUx6TXlNREZCQXlNVEFRY2hOd1VIQmdJR0JpY3VBemMzTmhJMk5oY2VBd1UzTmk0Q0p5WU9BZ2NIQmg0Q0Z4WStBZ0lsL2ZYOUFhUVkvcFVYQllvTEUydXQ4Sm1UeDNFbUVBc1ViSzd3bUpQSGNTVCs4QXNKQWk1dFkyaVphRDBNQ3dvQ0xtNWphWmhuUFFXdytsQUZzUDF4d01BZlQ0cisvOHQwQXdOOHpQbUFUNGtCQU10MEF3Tjd6UGpTVTB1cm1XSUVCRm1XdEZkVFNxeWFaUU1FV3BhMEFBTC9wd0FBQk13RnNRQVdBQm9BSDBBUEZ4WVdBQUFKREF3WkNISU9DUUp5QUNzeUt6SVJFamt2TXhJNU1ERkJJU2NtSmpjK0FqTUZBeU1USndZR0J3WVdGaGNGQlFFaEFRT0Yvb1pZaVpFTkRLVDhrUUhwL1BiYTJZQ3pFQWtuWVV3QlJQN1Ava1grN0FHL0FpSXFPc3Vibk1oaEFmcFFCT2dDQVlXRFNuQkJBd0ZRL1c0Q2tnQURBRUwvNkFSV0JoVUFGZ0F2QUVRQUdVQU1PaUl3RnhjaUFBRnlJZ3R5QUNzckVUa3ZNeEV6TURGQk53NERCdzRERHdJM05oSTJOamMrQWdNZUF3Y0hEZ01uTGdNM056NENOejRDRnlZR0JnY0hCaDRDRnhZK0FqYzNOaTRDQTVxOEJrQnJpMUYybldJekN3bTlDUkJPaWRHU01XbFI5Mm1XWGlZSUFneFhqNzl6ZEtWbktnZ0NCQ0VvRFRlUnR6cGFmVWdLQWdZTEtGTkVSMnBKS3djQ0JRMHNVd1lVQVZ4MlNDb1BGbkNoeFcxRUVVU0hBUWZoblJ3S0dEaitJd05UaTY5Z0ZtN0FrVkFEQWxxWndHa1dHaTh0Rmx1Y1hjQUNXSkJRRmpkeVlUNEJBamxoZUQwV05teFhOd0FBQWdBai8vOEVEd1E2QUJzQU13QXRRQllDQVJzcktTa29BU2dCS0E4TkVBWnlIaDBkRHdweUFDc3lFVE1yTWhFNU9TOHZFVE1TT1RrUk16QXhRU0UzQlQ0Q056WXVBaU1uQXlNVEJSNERCdzREQndNaE53VStBamMySmlZbkpUY0ZGeDRDQnc0REFtaitwaHdCQ0M5bFRBa0dHek5BSDh5YjZyc0JtMGFSZUVjRUJFSm9lVHFOL2xoK0FUQXhYa01KQnlaSktmN21JQUUwTlVaNlNnSUVVb1dlQWMrcUFRSVRPVGduTVJvTEFmeUVCRG9CQVJ4QWNGWkZYendoQmYzd3ZnRUJHVDQzTVRnWUFRR3FBVUlKT21sT1hIdEhId0FBQVFBV0FBQURpQVE2QUFVQURyWUNCUVp5QkFweUFDc3JNakF4UVFjaEF5TVRBNGdpL2phYjY3d0VPc0Q4aGdRNkFBQUQvNFgrdmdSakJEb0FEd0FWQUIwQUlVQVFIUmdKRmhZYkV3Z0tjaFVRRUFBR2NnQXJNaEV6S3pJeU1oRXpMek13TVVFekF3NERCeU0zTno0RE54TWhBeU1USVFFaEF5TVRJUU1qQVlyc1RoUkhjYVJ5VUJvZk9sbEFMQStLQXB5ODY1bitULzQ4QkhoYTZ6ajlZVGp2QkRyK2hHM2F3cElqdlFFM2NudUxVQUY5KzhZRGJ2MVMvZjRCUXY2K0FBQUYvN0FBQUFhQkJEb0FCUUFKQUEwQUV3QVhBREJBRnhVUUVBQVdFUkVKQXdNR0FBQVVCd3dTRXcwTkFnWnlBQ3N5RVRNL016TTVMek16RVRNekVUTVJNeEV6TURGQkFTRVRNd2NuQVNFQkFRTWpFeUVCSVRjekFRTUROd0VCdi83TUFST3Ixa1NsL3FmKzB3SGxBbCs4Njd3RGVQM3UvdGtId3dGQW5NRERBUlFCdFFLRi9sYmJHdjR4QWw4QjIvdkdCRHI5ZTlzQnF2dkdBZUdCL1o0QUFnQVgvK29EdlFSUUFCMEFPd0FqUUJFQUh3SUNPenNVTWk0cEMzSVBDeFFIY2dBck1zd3J6RE1TT1M4ekVqazVNREZCSnpjWFBnSTNOaVltSnlZR0JnY0hQZ0lYSGdNSERnTWxGeDREQnc0REp5NENOeGNHRmhZWE1qWTJOelltSmljbkFpcllGcFl4Vnp3SEJpUkZLakJYUHd2c0NZakZhRWVMYno4RUJFeDFpZjcwdTBKL1pUb0RCVmVLbzA1cHMyMEM2QUV2VVRJellFTUlCeU5LTDdFQ0JBRjZBUUVjUGpVdlBCNEJBU0JBTUFGeGtVWUNBU05KZEZOTGFrSWZSd0VCSFQ1b1RWdUFVQ1FDQWsyV2NBRTBSU01CSWtnMk5UNGJBUUVBQVFBWEFBQUVSUVE2QUFrQUYwQUxCUUFHQWdnR2NnUUdDbklBS3pJck1oSTVPVEF4UVFFekF5TVRBU01UTXdGQ0FoRHp2T3g5L2UveXZPc0Jid0xMKzhZQ3kvMDFCRG9BQXdBaUFBQUVmZ1E2QUFNQUNRQU5BQjlBRHd3SEJ3c0dCZ0lKQXdaeUNnSUtjZ0FyTWlzeUVUa3ZNek1STXpBeFFRTWpFeUVCSVRjekFRTUROd0VCeUx2cnZBT2cvYmIrN2dlNkFXYWE4TVlCVVFRNis4WUVPdjExMmdHeCs4WUI0WUg5bmdBQUEvKzgvLzhFUlFRNkFBTUFCd0FaQUJsQURCSUZFUXB5QWdNREJBZ0djZ0FyTWpJUk15c3lNakF4UVFjaE55RURJeE1oTXdNT0JDY2pOemMrQkRjRGp5TDkvaUlDdUx6cnZQMzQ2M2NQS1Q1ZWgxNVJGeU03VVRRaEV3Z0VPc0RBKzhZRU92M3FUWjJPYno0QnhRSUVQVnh0YlMwQUFBTUFJd0FBQlpzRU9nQUdBQW9BRGdBYlFBMEFDUXdHQVFvR2Nnc0RDUXB5QUNzeU1pc3lNaklTT1RBeFFRRXpBU01ETXlNREl4TUJFek1EQXEwQnd0YjlrYUgzd2plODZyc0RGYnpzdkFFbUF4VDd4Z1E2KzhZRU92dkdCRHI3eGdBQUF3QVhBQUFFUXdRNkFBTUFCd0FMQUJ0QURRa0dDQU1DQWdZSEJuSUdDbklBS3lzUk9TOHpNaEV6TURGQkJ5RTNFd01qRXlFREl4TURUQ0g5M2lLVHZPdThBM0M4N0x3Q2RyNitBY1Q3eGdRNis4WUVPZ0FEQUJjQUFBUkZCRG9BQXdBSEFBc0FHVUFNQ1FZSUFnTURCd1p5QmdweUFDc3JNaEV6TWhFek1ERkJCeUUzTXdNakV5RURJeE1EalNIOStDSTR2T3U4QTNLODdid0VPc0RBKzhZRU92dkdCRG9BQWdCVUFBQUVEQVE2QUFNQUJ3QVF0d01HQndaeUFncHlBQ3NyTWpJd01VRURJeE1oQnlFM0FyUzg3THdDUkNIOGFTRUVPdnZHQkRxK3ZnQUFCUUE1L21BRlVnWUFBQllBS3dCQ0FGWUFXZ0FuUUJVbkJnWkpIaEVSVWpNK0MzSXpCM0pZQUhKWERuSUFLeXNyS3hFek14RXpNaklSTXpBeFFRY09BeWN1QXpjVFBnTVhIZ1FITnpZMkxnSW5KZ1lHQndNZUFqTVdQZ0lsTno0RUZ4NERCd01PQXljdUF6Y0hCZ1lXRmhjV05qWTNFeTRDSnlZT0FoTUJNd0VGU2dJTVBtMmhiMDl6U3lJRE1BMUFaWWxYV1hkSElBVDBBZ1FGQ0I4L05qcFhQUkZLQnlwSE1VVmhRQ1Q3NndJS0traG9qMXhSY2tVZEFpNE5RR1NIVm1tRFJCSDRBZ1VDR0VFL09GWStFMGNGSkVRMlNtTStJSEVCVSt6K3JRSVdGVjYvbmw4REEwTndpVWdCTzAyWGVrY0NBa3A2bEpwYUZpUmdaVlkzQWdNc1VESCtWQzQrSXdKQVoza3NGVXlrbVhsR0F3Sk1lcEZJL3ROTWszVkZBd05pbTdWckZpeHdaMFFDQWlWSE1BR2dNRXd1QVFGTWVvajhIUWVnK0dBQUFBSUFGLzYvQkVVRU9nQUhBQTBBRzBBTkJnRUREUXdNQUFweUFRWnlDUUF2S3lzeUVUTXlFVE13TVhNVE13TWhFek1ETndNakV5TTNGN3pybWdHYW11MjhzR3pZT0g0aEJEcjhoZ042KzhhLy9nQUJRYjhBQWdCdEFBQUVHQVE3QUFNQUZ3QVhRQXNQRkFrSkFRQUdjZ0VLY2dBckt4RTVMek15TURGQkF5TVRFd2NPQWljdUFqY1RNd01HRmhZWEZqWTJCQmk3N0x3dUVqSnVjVGgrdWxzT05lczFDUnROUmpweGJnUTYrOFlFT3Y0aHdSY2REZ0VCWUxhREFVait0MEpmTlFJQkVTQUFBUUFYQUFBR0xRUTZBQXNBR1VBTUJRa0dBZ0lMQUFaeUN3cHlBQ3NyRVRNUk16SXlNREZUTXdNaEV6TURJUk16QXlIVDY1b0JUSnJzbWdGTG0rdTgrcVlFT3Z5R0EzcjhoZ042KzhZQUFnQVIvcjhHUWdRNkFBVUFFUUFkUUE0TUJRZ0lCQkVLY2c4TEJnWnlBUUF2S3pJeUt6SXlFVE16TURGbEF5TVRJemNCTXdNaEV6TURJUk16QXlFR1FtdlpPSDRoKy9Ucm13Rk1tK3lhQVV1YTdMejZwci8rQUFGQnZ3TjcvSVlEZXZ5R0Ezcjd4Z0FDQUZILy93U3JCRG9BQXdBY0FCMUFEaEVTRHh3RUJBOENBd1p5RHdweUFDc3JNaEU1THpNUk16SXdNVUVISVRjQkJSNENCdzRESnlFVE13TVhQZ0kzTmlZbUp5VUNiaUwrQlNJQmtRRW5hN0ZrQ0FaVGhxVlgvaUM4N1p2WU9tTkVDUWNnUnpMK3ZBUTZ3TUQrcUFFRVVwMTBZSTVmTGdFRU92eUZBUUVwVVQwMFN5b0NBUUFBQWdBai8vOEYrQVE2QUJnQUhBQWRRQTRhR1E0TEdBQUFDd3dHY2dzS2NnQXJLeEU1THpNUk16SXpNREZCQlI0Q0J3NERKeUVUTXdNWFBnSTNOaVltSnlVQkF5TVRBVDBCSjJ5eFpBZ0dVNGFsVi80aHUrdWEyVHBqUkFrSEgwZ3kvcndFM0x6c3ZBTGlBUU5UblhSZmoxOHVBUVE2L0lVQkFTbFJQVFJMS2dJQkFoajd4Z1E2QUFFQUkvLy9BK1VFT2dBWUFCbEFEQTRMR0FBQUN3d0djZ3NLY2dBckt4RTVMek1STXpBeFFRVWVBZ2NPQXljaEV6TURGejRDTnpZbUppY2xBVDBCSjJ5eFpBZ0dVNGFsVi80aHUrdWEyVHBqUkFrSEgwZ3kvcndDNGdFRFU1MTBYNDlmTGdFRU92eUZBUUVwVVQwMFN5b0NBUUFBQWdBZy8rZ0R6QVJSQUNjQUt3QWRRQTRyS2lvSkhSa1VDM0lFQUFrSGNnQXJNc3dyekRNU09TOHpNREZCSmdZR0J3YytBaGNlQXdjSERnTW5MZ0kzRndZV0ZoY1dQZ0kzTnpZdUFoTUhJVGNDS0RwZVB3dmVDb2ZNY0hHZ1lTVUtCQTVWamI5MmRhdFpCZDhFSVVzOFNHcElLUWdFQmdNaFRkTWQvbFVkQTQ4Q01GVTRBWFNzWGdNQ1hKcS9aaVJ0eDVsWUF3SnN0M1FCTjJFK0F3SkFhMzg3SXpSM2JFZis2S09qQUFRQUpmL29CZ2tFVWdBREFBY0FIUUF6QUNOQUV5UURBZ0laTHc0SEJuSUdDbklPQjNJWkMzSUFLeXNyS3hFekVqa3ZNekl3TVVFSElUY0JBeU1UQVRjK0F4Y2VBd2NIRGdNbkxnTTNCd1llQWhjV1BnSTNOell1QWljbURnSUM3Q0w5ekNFQkZienJ2QUZKQXc1WWtjUjVkS1ptS0FzRERWcVN4SGh5cFdjbytRSUdCU1pTUmtwd1RDMEpBd1lHSjFKSFMyNU1MQUtGd01BQnRmdkdCRHI5MEJkd3k1MVpBd05jbXNKcEdIREptMWNEQTF1WXdJQVhObmxxUlFJQ1AyeUJQeGMyZTJ4R0FnSkFib01BQXYrOUFBQUVHQVE3QUFNQUhRQWRRQTRCRWhJVEV3TUpCQVp5QndNS2NnQXJNaXN5RWprdk14STVNREZCSVFFaEFRVURJeE1uRGdJSEJoWVdGd1VISlM0RE56NERBVUlCQXY1Ni92OENpUUhTdk91YnpEVmpSd2tISWtRckFVTWYvdGxKaVdrNkJRVlZoNlFDRWYzdkJEc0IrOFlEZkFFQkprczRMMEFqQWdHd0FRRXJVWHRSWFlaWEtRQUVBQTMrUndQeEJnQUFFUUFWQUN3QU1BQWRRQkF3THlnY0IzSVZBSElVQ25JTkJnOXlBQ3N5S3lzck1zd3lNREZCTXdNT0FpY2lKaWMzRmhZek1qWTJOd01CSXdFVEl6NERGeDREQndNakV6WW1KaWNtRGdJQkJ5RTNBdGp0Vnc1aHAzWWpReUlnR0RNWk5VTWtCMzcrOWVzQkN4OUtEVVYycG14YWQwUVZDSFR0ZFFjVVEwRkhhMHN1QWFrZC9YTWRBYzc5OVc2c1lnRUtDYndJQ1RoWExRWSsrZ0FHQVB4RlhydVpXZ01DUW5HUlVmMUpBcm83WGprQ0FUZGdkd0xWcHFZQUFnQTUvK2tEN0FSUkFBTUFLd0FiUUEwRURRTUNBZzBoR0FkeURRdHlBQ3NyTWhFNUx6TVJNekF4UVFjaE53RVdOalkzTnc0Q0p5NEROemMrQXhjZUFnY2pOQ1ltSnlZT0FnY0hCaDRDQXBRYy9qVWNBUlE3WWtNTzNReUt6bkZ6b21Fa0NnUU9WWTNBZDNtcldnSGRJMDgrU210SEtBa0RCZ0VnVGdKb282UCtRd0l2VmpnQmRLMWRBZ05hbU1GbkpIREdtVllEQW11MmRUbGhQUUlEUDJtQVBpTTBlV3BHQUFBRC83ai8vd1pKQkRvQUVRQVZBQzRBSlVBU0ZpNHVBQ1FoSVFvSkNuSVVGUlVqQUFaeUFDc3lNaEV6S3pJeUVUTVJPUzh6TURGQk13TU9CQ2NqTnpjK0JEY0JCeUUzQVFVZUFnY09BeWNoRXpNREZ6NENOelltSmljbEFWRHFkdzhvUGw2SFhsTVpJanRSTkNFVUNBS0tJdjROSWdJWkFTWm5zMmtIQlZXR3BGWCtJYnpzbTlnM1pFUUpDQ1pLTHY2OUJEcjk2azJkam04K0FjVUNCRHhkYlcwdEFjL0F3UDZIQVFOTGxYSmVpbGtyQVFRNi9JUUJBU2ROT3pKQkh3SUJBQU1BRi8vL0Jsb0VPZ0FEQUFjQUlBQWxRQklWRmhNVEJnZ0RJQU1DQWdZSEJuSUdDbklBS3lzUk9TOHpNeEV6RVRNUk16SXdNVUVISVRjVEF5TVRBUVVlQWdjT0F5Y2hFek1ERno0Q056WW1KaWNsQTFNaS9kOGhqYnpydkFMZUFTZG5zbWtIQmxTR3BGVCtJTHpzbTlnNFkwVUlDQ1pKTC82OUFweSt2Z0dlKzhZRU92NkhBUU5LbFhOZGlsb3JBUVE2L0lRQkFTZE5PekpCSHdJQkFBQURBQTBBQUFQeUJnQUFBd0FhQUI0QUdVQU5IaDBXQ2dkeUF3QnlFUUlLY2dBck1pc3JNc3d5TURGQkFTTUJFeU0rQXhjZUF3Y0RJeE0ySmlZbkpnNENBUWNoTndJRC92WHJBUXNmU2cxRmRxWnRXWGRFRmdsMDdYWUdGRVJCUm10TExnRzdIdjF6SGdZQStnQUdBUHhGWHJ1WldnTUNRbkdSVWYxSkFybzdYamtCQWpoZ2RnTGVwNmNBQUFJQUYvNmJCRVVFT2dBREFBc0FGMEFMQUFZR0N3cHlDUVFHY2dJQUx5c3lLeklTT1RBeFpUTURJd016QXlFVE13TWhBWDNzWU90TDY1b0JtcHJ0dlB5T3dQM2JCWi84aGdONis4WUFBQUlBWC8vbUJ6QUZzQUFZQURBQUcwQU9MQjhKY2hRSENYSW1HZzRBQW5JQUt6SXlNaXN5S3pJd01VRXpBdzRESnk0RE54TXpBd1llQWhjV05qWTNBVE1ERGdJbkxnTTNFek1EQmg0Q0Z4WTJOamNEcU1pdkRVcDNwV2hpbUdNcUM2NzFyUVVHSUQ4MVRXMUFDd05COWE0VGh0bU5ZWXRXSUFxdXg2MEdDU05FTlV4b1BRb0ZzUHdCWWFkK1JBSUNSbnVrWUFRQSsvOHNWMG91QWdORmRrWUVBUHdCaU5CekF3TkxmcUZhQkFENy95MVpTQzBDQTBaM1JBQUFBZ0JILytjR0tnUTZBQmdBTVFBYlFBNHNId3R5RkFjTGNpWWFEZ0FHY2dBck1qSXlLeklyTWpBeFFUTUREZ01uTGdNM0V6TURCaDRDRnhZMk5qY0JNd01PQWljdUF6Y1RNd01HSGdJWEZqNENOd01Cd0hJTVFteVZZVnVHVlNJSmN1eHlCQUlXTWkxRVhUWUpBcS9zY3hCMXdZTmFmVWtiQ1hMQWNRUURHemd2TWtneEhRWUVPdjFZV1p0MlFBSURRM09YVndLcC9WWWlUMFV1QXdOQ2JEd0NxdjFZZk1KdEJBSkhkNVZSQXFuOVZpWlFSQ3NDQWloRVV5b0FBQUlBSWYvK0ErY0dGd0FYQUJzQUlVQVFEUW9BRnhjS0doc2JDZ3NCY2dvS2NnQXJLeEU1THpNUk9TOHpFVE13TVVFRkhnSUhEZ0luSVFFekF4YytBamMySmlZbkpRRUhJVGNCUWdFbmJyQmdDQXFJMDNuK0lBRVA3TzdZUG1aQkNBZ2RSVGIrdlFIYUhmMVlIUU1BQVFSWW8zV0JzVnNDQmhmNnFBRUJNRmsvTlZFd0F3RUNvS2VuQUFNQUsvL3FCdVFGeVFBREFDd0FNQUFnUUJFREFnSXZNQUp5THdnZEZBTnlLUWtKY2dBck1pc3lQeXNTT1M4ek1ERkJCeUUzQVRjR0JnUW5MZ00zTno0REZ4NENGeWN1QWljbURnSUhCd1lHSGdJWEZqWTJBUU1qRXdVc0lmd3ZJZ1F6OEJpdC92eWRqc0p1SXhBU0ZHcXI3SldZMG5BRzlBRXRiRjVtbFdRN0RCSUhCUkkwWVV4a2tGMzhwUDMwL1FOT3dNRCtqQUtjNEhZREEzakU4MzE1aHZyRWNBTURnZCtVQVZhR1R3TURWWkN2Vm53NWczNXBRUUlFUjRVRU0vcFFCYkFBQUFNQUdmL3BCYVFFVVFBREFDc0FMd0FrUUJNREFnSXVMd1p5TGdvaEhSZ0hjZ2dFRFF0eUFDc3l6Q3ZNTXo4ckVqa3ZNekF4UVFjaE53RVdOalkzTnc0Q0p5NEROemMrQXhjZUFnY2pOQ1ltSnlZT0FnY0hCaDRDQVFNakV3UmtIZnl3SFFLQU8ySkREdDBNaXM1d2RLSmhKQXNERFZlTXdYZDRyRm9DM0NOUFBrcHJSeWtJQkFZQ0lFMytjN3pzdkFKeHA2ZitPZ0l2VmpnQmRheGRBZ05hbWNCbkpIREdtVllEQTJxMmRUbGhQZ0VEUDJtQVBpTTBlV3BHQTQ3N3hnUTZBQUFFLzZ3QUFBU0pCYkFBQkFBSkFBMEFFUUFrUUJFUkRRd01BZ0FHQmdjREFuSVBCUVVDQ0FBL014RXpLekl5RVRNUk9TOHpNekF4UVFFaEFUTVRBemN6RXdNSElUY0ZBeU1UQTBIOWMvNzRBdlNQWk1vNmtQYWdJUDBySUFIUVh0aGVCUmI2NmdXdytsQUZPSGo2VUFKbXVMaEsvZVFDSEFBRS81MEFBQU82QkRvQUJBQUpBQTBBRVFBZVFBNFJEUXdNQVFjREJuSVFCUVVCQ2dBL014RXpLeklTT1M4ek16QXhRUUVqQVRNVEF3TXpFd01ISVRjRkF5TVRBZy8raWZzQ1dMb2xqQmlxNEhFZS9YVWVBWTlFdFVRQ3d2MCtCRHI3eGdMWUFXTDd4Z0hGcWFsQS9uc0JoUUFHQUQ0QUFBYVRCYkFBQXdBSUFBMEFFUUFWQUJrQU5FQWFDUlFVQmdZWUZSRVJFQkFEQWdJWUNCWUNjZ1FLQ2dzSEFuSUFLekl5RVRNclB6a3ZNek1STXhFekVUTVJNeEV6TURGQkJ5RTNBUUVoQVRNVEF6Y3pFd01ISVRjRkF5TVRBUU1qRXdOd0lmM1BJQVFOL1hQKzl3TDFqMlBKT3BEMm9DSDlLeUVCejE3WVh2NGIvZlg5QW1hM3R3S3grdWtGc1BwUUJUaDQrbEFDWnJpNFN2M2tBaHdEbFBwUUJiQUFBQVlBTFFBQUJZSUVPZ0FEQUFnQURRQVJBQlVBR1FBdVFCY1ZFUkVRRUFNQ0FoZ1pCbklKRkJRR0JoZ0tDd2NHY2dBck1qOHpFVE1STXlzU09TOHpNeEV6RVRNd01VRUhJVGNsQVNNQk14TURBek1UQXdjaE53VURJeE1CQXlNVEF2UWUvZEllQXhMK2lQc0NXTG9sakJpcTRIRWUvWFllQVk1RHRVUCtkYnpzdkFIRnFLajkvVDRFT3Z2R0F0a0JZZnZHQWNXcHFVRCtld0dGQXJYN3hnUTZBQVVBRWdBQUJsOEZzUUFXQUJvQUh3QWtBQ2dBTkVBWkdSb2FKQnNmSHlNakV5Z0dCaE1UQVJ3a0FuSU5KeWNCQ0FBL014RXpLeklTT1M4ekVUTVJNeEV6RVRNUk14RXpNREZoSXhNK0FqTUZIZ0lIQXlNVE5pWW1KeVVpQmdjQkJ5RTNFd0VoQVNNREFRY2pBUUVESXhNQkIvVTZGcGJ3bXdIV2tNMWpFRHIxT2dvZVhWTCtLNGVmRlFRNkkvMEZJN2NDQ3dFZC9YZVNvZ0VZTW96K3BRSlhoZlNHQVdHZ3gxMEJBbVBHbVA2ZkFXSlJiVGtDQkhXSkJFL0p5ZjBYQXVuOGx3TnEvUHRsQTJuOVVmei9Bd0VBQUFVQUZRQUFCU2NFT3dBWEFCc0FJQUFsQUNrQU1FQVhHaHNiSlNBa0pCTXBCZ1lURXdFZEpRWnlEU2dvQVFvQVB6TVJNeXN5RWprdk14RXpFVE1STXhFekVUTXdNV0VqTno0Q013VWVBZ2NISXpjMkppWW5KU0lHQmdjQkJ5RTNFd0VoQVNNREV3Y2pBUUVESXhNQkFPc2FGSVBZa3dFMWlMWlNEeHJzR3dnT1NFeit5bFZ3UUF3RGhoNzlSQjIwQVlBQkQvNEZpR1hKSzRIKzd3SCtYK3hnclpQRFh3SURaY0NLcnE5RWJVTURCRHB4VVFPTnE2djl4d0k0L1ZvQ3AvMnZWZ0ttL2V6OTJnSW1BQWNBTndBQUNKTUZzUUFEQUFjQUhnQWlBQ2NBTEFBd0FEeEFIaUVpSWlRc0FuSW5LeXNiTUE0T0d4c0RBZ0lGQndKeUZTOHZDUWtGQ0FBL014RXpFVE1yRWprdk16TVJNeEV6RVRNUk15c3lNaEV6TURGQkJ5RTNFd01qRXdFakV6NENNd1VlQWdjREl4TTJKaVluSlNJR0J3RUhJVGNUQVNFQkl3TUJCeU1CQVFNakV3VUJJdnhySXIzOTlmMENCL1U1RkpmeW13SFZrYzVpRVRuMU9nb2VYRlArS29hZkZRUTZJLzBGSTdjQ0RBRWMvWGFSb2dFWU1veitwUUpZaGZhR0F5ZkF3QUtKK2xBRnNQcFFBV0NoeUZ3QkFtTEdtZjZmQVdKUmJUa0NCSFdKQkUvSnlmMFhBdW44bHdOcS9QeG1BMm45VWZ6L0F3RUFBQWNBSXdBQUJ5Z0VPd0FEQUFjQUh3QWpBQ2dBTFFBeEFENUFIaVVpSXlNdExRY29MQ3diTVE0T0d4c0RBZ0lHQndaeUZUQXdDUWtHQ2dBL014RXpFVE1yRWprdk16TVJNeEV6RVRNUk14RXpFVE1STXpNd01VRUhJVGNUQXlNVEFTTTNQZ0l6QlI0Q0J3Y2pOelltSmljbElnWUdCd0VISVRjVEFTRUJJd01UQnlNQkFRTWpFd1N0SVB3OUlPQzg2N3dDSXV3YkZJUFlrd0UxaWJaUkR4cnRIQWdPUjAzK3lsVndRQXdEaGg3OVF4NjBBWUFCRC80R2lHYkpLb0grN2dIL1lPdGZBbUcxdFFIWis4WUVPdnZHclpUQ1h3SURaY0NLcnE5RWJVTURCRHB4VVFPTnE2djl4d0k0L1ZvQ3AvMnRWQUttL2V6OTJnSW1BQVAvcWY1RkJESUhpZ0FYQUVBQVNRQXJRQlFZRFF4QVFBQXJMQWxGUTBOQ1NFR0FSeGNBQWdBL010NGF6VEk1TWhFelB6TVNPUzh6TXpNd01VRUZIZ01IRGdNakp6Y1hNalkyTnpZbUppY2xFeGNlQXdjT0F5TW5CZ1lIQmhZV0Z3Y3VBamMrQWpNWFBnTTNOaTRDSnljQkZ6YzNGd0VqQXpVQkR3RURXS0Y5UXdZSFpaeTRXYUVZZ2ttRVdRc0pOR0k5L3VFdGYxZXVqRTRIQ0YyVnVtWTROMTRJQnlFN0lWWktjVDRFQldxbFhUZzJaMVE0Q1FnZFFsODVtQUUvZGEzUEFmN0trK3NGc0FFQ0xGdU9ZbWlQV0NnQmpBRXVZazlEVkNrQ0FmNGtBUUVuVkkxb2JhUnROZ0VCTXp3clBTd1FreHRmZzFObmZEZ0NBUjQ4V0RvK1dEa2RBUUVFL3B5YkJCRCs3UUVURUFBRC83VCtUUVBFQmg0QUdBQkJBRW9BSmtBUkRSa01RVUVBTFVOSlJrUkNnRWdZQUFZQVB6TGVHczB5TWpJNUx4STVMek16TXpBeFV4Y2VBd2NPQXlNbk54YytBamMyTGdJakpSTVhIZ01IRGdNakp3WUdCd1lXRmhjSExnSTNQZ0l6TXpJK0FqYzJMZ0luSnhNWE56Y1ZBU01ESjgzL1JaU0FUQVFEWXBTalJxa1dpVFJ2VVFrR0lEcERIdjdqUkloQW5JNWFBd1JhanFSUE1UaGtDZ1lkT0NCVlFtczhBd1JsbmxZeUpsZFBOd2dJSjBWUUlhSDRkYXpRL3N1VTZ3RUVPZ0VCSFVKeFZsaHlQeGtCZlFFQkdVTTlKekViQ2dIK3ZRRUJFemRwVlYyQVRTTUJBakErS2p3dEVvb2RZSDVNWW5ZMER5SThMaTQ0SFFvQkFRUlJuSnNFRWY3dUFSTVFBQU1BWWYvcEJSc0Z4d0FYQUNnQU9RQWZRQklNS1dveUlHb3lNZ3dBR0dvQUEzSU1DWElBS3lzckVqa3ZLeXN3TVVFZUJBY0hCZ0lHQmljdUJEYzNOaEkyTmhjbURnSUhCZ1lISVRZMk5UWXVBZ0VXUGdJM05qWTNJUVlVQndZZUFnTXZkYTUyUWhFTkN4TnJydStaZGE1M1FoSU5DeFJyci9DTFhwQm1RaEFCQXdJQ3BnRUJCd3cwYS83aVg0OWxRUkVDQWdIOVdRRUJCUTAxYXdYRUFsS0xzOGxuVDRyKy84dDBBd0pTaTdUSloxQ0pBUURMZE04RFNYK2ZVUWNNQndZTEJrcVlnVkw3d2dOSWY1OVJCZ3dGQlFzR1NKYUNVZ0FBQXdBMC8rZ0VIUVJTQUJVQUlBQXJBQjlBRWdzaGFpY2JhaWNuQ3dBV2FnQUhjZ3NMY2dBckt5c1NPUzhyS3pBeFFSNERCd2NPQXljdUF6YzNQZ01YSmc0Q0J5RTJMZ0lERmo0Q055RUdIZ0lDZDNPbVpTZ0xBZzVaa3NSNGNxWm1LUXNDRGxpU3hHeEFZMGt5RHdIdkFSQXNUTHMvWlVveUR2NFBBaEFyVGdSUEExeWF3bWtZY01tYVdBTURXNWpBYVJkd3k1MVp3d0l2VW1nM01tUlROUDBjQWk5VGFqY3laVlEwQUFJQXFBQUFCV0VGeGdBT0FCTUFHVUFORGhJSUJSTUNjZ1VEY2hJSWNnQXJLeXNSTXhFek1ERkJBVDRDRnhjSEp3NENCd0VqQXhNVEl3TUNXZ0ZkSkdLUFppOFpFeWc3S3hEOTViOFlnaFN3NHdHR0F2eFZsVm9CQWRJQkFTWThJdnVTQmJEN3hQNk1CYkFBQUFJQWRRQUFCRW9FVWdBU0FCY0FGVUFMRndaeUVoWUtjZ3dGQjNJQUt6SXJNaXN3TVVFVFBnSVhNaFlYQnlZbUl3NENCd0VqR3dJakF3SFB2aDFhZjFjZk5oc3FDeGNNSGpFbURQNTVwUnhFQzVla0FXNEJ3VXFGVkFFTURMb0RCUUVlTHhqODN3UTYvU2YrbndRNkFBQUVBR0gvZGdVYkJpNEFBd0FIQUI4QU53QWtRQkFDQWljbkF4b0RjZ2NITXpNR0RnbHlBQ3ZOTXhFemZDOHJHTTB6RVROOUx6QXhRUU1qRXdNREl4TUJCd1lDQmdZbkxnUTNOellTTmpZWEhnUUZOelkyTGdJbkpnNENCd2NHQmg0Q0Z4WStBZ092U3JoSkpVdTRTd0wxQ3hOcXJ2R1lkYTUzUWhJTkN4TnNyL0NZZGE1MlFSTCs4Z3NJQXhZM1pVOW9tR2c5RFF3SEFoVTVaRTlwbUdjOUJpNytXUUduK3ZqK1VBR3dBZHhRaWY3K3luUURBMUdMdE1sbVVZa0JBTXQwQXdKU2k3UEt1Rk04aDRKclF3TURXWmV6V0ZJOGg0TnNRd01FV3BlMEFBUUFOZitHQkI0RXRRQURBQWNBSFFBekFDUkFFQWNISkNRR0dRdHlBZ0l2THdNT0IzSUFLODB6RVROOUx5c1l6VE1STTN3dk1ERkJBeU1URXdNakV5VTNQZ01YSGdNSEJ3NERKeTRETndjR0hnSVhGajRDTnpjMkxnSW5KZzRDQXZGSHFVY0lTS2xJL3BrQ0RsbVJ4SGx6cG1Zb0N3SU9XcEhFZUhPbFppbjVBd1VGSmxKR1MyOU1MUWtDQndZbVUwWkxiMHdzQkxYK2FBR1kvSEQrWVFHZjVSZHd5NTFaQXdOY21zSnBHSERKbTFjREExdVh3WUFYTm5sclJBSUNQMnlDUGhjMmVtMUdBZ0pBYm9NQUJBQmovK2NHMlFkQUFCVUFJQUJCQUdVQU0wQVpXMDRKY2xReE1TdzRDWEpDUTBNUkNBZ2JHeFlXSWlFQ2NnQXJNako4THpNWUx6TVJNeklSTXlzeU1pOHpLekl3TVVFekJ5Y3VBeU1pQmdjSEp6YzJOaGNlQXdFbk5qWTNOeGNIRGdJbEJ3NENCd01HSGdJWEZqWTJOeE16QXc0REp5NEROeE0rQWdVM0hnTUhBdzRESnk0RE54TXpBd1llQWhjV1BnSTNFell1QWdYY0lBZ1pQSEJ2YmpnelJBb0NmZ0lKZ21zOWNHNXkvazVSSFRNS0VwNE5CelZLL3JvV1QyZzdERlFGQXgwL09FMXRQd3RCeGtBTlNubWtaMldZWUNZS1ZSU0gzQU1TRUdTVlh5WUxWUTlRZ3E5c1lveFlJZ3BCeGo4R0NpWkdOanRXUENNSVZRWURHMEFHd0lRQkF5Y3dKVG96RXdFbWFuTUNBU1l4SmY1VFBTRkdMRjhCWlMxTU80bklBVTk5Ui8zdExGMVNOUUlFUm5kR0FZYitlbUNuZlVVREFreUNxbUFDRXBIVWRNbkxCVTJBcVdEOTdtYXVna2NEQWtwK29Wc0JodjU1TDFwSUxBSUNMbEpqTXdJVEwxeE9NZ0FBQkFCTS8rY0Z3d1huQUJVQUlBQkNBR1lBTTBBWlhFOExjbFV5TWl3NUMzSkRSRVFSQ0FnYkd4WVdJaUVHY2dBck1qSjhMek1ZTHpNUk16SVJNeXN5TWk4ekt6SXdNVUUzQnljdUF5TWlCZ2NISnpjMk5oY2VBd0VuTmpZM054Y0hEZ0lsQnc0Q0J3Y0dCaFlXRnhZK0FqYzNNd2NPQXljdUF6YzNQZ0lGTng0REJ3Y09BeWN1QXpjM013Y0dIZ0lYRmo0Q056YzJOQ1ltQlRjaUNCMDdjV3h1T0RSRkNBSi9BZ2lFYXoxd2JYTCtUMDRkTXdrU253NEhOMHIrNXhWR1dqSUtJZ1FCRkRBdU1VazBId2NldGg0TFBXV1FYVjJGVVNBSkloSjZ5Z0tMRUZ5SVZTSUpJZ3hFY1p0aldIbElHUWdmdGgwRkJ4dzNMVEpHTFJvRkl3UVdOZ1ZuQVlVQkFpY3hKVG96RWdFbGEzSUNBU1l4SmY1U1BTQkhMRjRCWlM1S08zdkFBVWh4UHZJaFUwMDBBZ01vUkZRcXhzVlVtbmxEQXdKSmVweFc4WWJEYk1EQkJFaDNtbG54VzZGNlJBTURTWGlWVHNYR0pVOUdMQUVETDB0WUtQUW9Va1l2QUFBREFGLy81Z2N3QnhBQUJ3QWdBRGdBSzBBVk5DY0pjZ1VDQVFFSEJ5MGhDQWdWQW5JY0R3bHlBQ3N5S3pJUk16TXpmQzh6R0M4ek15c3lNREZCSVRjaEJ5RUhJd2N6QXc0REp5NEROeE16QXdZZUFoY1dOalkzQVRNRERnSW5MZ00zRXpNREJoNENGeFkyTmpjRDh2N0FGUU02RlA2dkY2azB5SzhOU25lbFoyT1lZeW9McnZXdEJRWWdRRFJOYlVBTEEwSDFyaE9HMlkxaGkxWWdDcTdIclFZSkkwUTFUR2c5Q2dhWWVIaCthdndCWWFkK1JBSUJSM3VrWUFRQSsvOHNXRWt1QWdORmRrWUVBUHdCaU5CekF3SkxmcUphQkFENy95MVpTQzBDQTBkMlJBQURBRWYvNXdZcUJiRUFCd0FnQURrQUswQVZOQ2NMY2dVQ0FRRUhCeTBoQ0FnVkJuSWNEd3R5QUNzeUt6SVJNek16ZkM4ekdDOHpNeXN5TURGQklUY2hCeUVISXdjekF3NERKeTRETnhNekF3WWVBaGNXTmpZM0FUTUREZ0luTGdNM0V6TURCaDRDRnhZK0FqY0RTZjdRRlFNWUVmNjlGNmt4d0hJTVFXeVdZRnlIVlNFSWMreHlCQUlXTWkxRVhUWUpBcS9zY3hCMXdZTmFmVW9hQ1hMQWNRUURHemN3TVVreEhRWUZPWGg0ZjREOVdGbWNkVUVEQWtSemwxY0NxZjFXSWs5RkxnSURRV3c4QXFyOVdIekNiUU1DUjNlV1VRS3AvVlltVUVNckFnSW5RMVFxQUFJQVdQNk9CTndGeUFBaEFDVUFHVUFNRmhJTkEzSWxBQUFrQVFseUFDdk5NeEV6Szh3ek1ERmxCeTRFTnhNK0F4Y2VBZ2NqTmlZbUp5WU9BZ2NEQmg0REZ3TWpFd0kwRUdXY2NVTVhEQ29UWjZMYWhaalVad2owQmlkb1hGV0NYRGtMTEFnQkZ6Ulg0Ri8wWUxQSkJVWjJtTEJkQVJCNzM2eGlBd0o3M1pkVWhWQUNBa2g2bEVuKzdUVnhhRlUxQmYzY0FpUUFBQUlBUlA2TEErOEVVUUFmQUNNQUdVQU1GUkVNQjNJZ0FBQWlBUXR5QUN2Tk14RXpLOHd6TURGbEJ5NEROemMrQXhjZUFnY25OaVltSnlZT0FnY0hCaDRDRndNakV3SGxFbStlWHlNTEF3MVdqYjkxZDZwWUJkMERJRXM4U0dwSUt3Z0ZCZ0lnVHRwZjdHQ3R3d2RkbUwxbUkyM0htbGNEQTJ1M2N3RTJZVDhDQTBCcmZ6d2pOM1ptUkFmOTRBSWdBQUVBT3dBQUJMZ0ZQZ0FUQUFpeER3VUFMeTh3TVVFQkZ3Y25BeU1CSnpjWEFTYzNGeE16QVJjSEF6eis4ZnhUL2VtMUFTYjdVdjRCRGYxVS9QQ3kvdFgvVmdNcy9vdXNjcW4rdmdHV3EzS3FBWFdyZEtvQlMvNWhxM0VBQWZ6d0JLWC80QVg4QUFjQUZiY0dCZ1FFQVFJQ0FRQXZNeThSTXhFemZDOHdNVU1oQnljM0lUY1hSdjN6RjZZcUFnNFNwZ1VqZmdIcWJBRUFBZjBRQlJiLzhnWVVBQlVBRXJZQkZCUVBCb0FMQUM4YXpESXpFVE13TVVFWEZqNENGeFlXQndjbk56WW1KeVlPQWdjai9Sb1pRWHAxZUVCa2N3VURmUUlESmpFOWQzaDdQeVVGbWdFQkpqRWxBUUZ2WmljQkZDNDJBZ0lqTVNjQkFBQUIvakVGR1A4Q0JtSUFCUUFLc2dDQUFnQXZHczB3TVVFbk56TUhGLzYyaFJhMEh5WUZHTTk3cEcwQUFBSCtQUVVhLzFjR1lnQUZBQXF5QVlBRUFDOGF6VEF4UXdjbk56Y3p3N1ZMVGhpMEJkRzNUSEdMQUFqNlEvN0NBYUVGc1FBTkFCc0FLUUEzQUVVQVV3QmhBRzhBQUVFSE5qWVhGaFlYSnpZbUl5WUdBUWMyTmhjV0ZoY25OaVlqSmdZVEJ6WTJGeFlXRnljMkppTWlCZ0VITmpZWEZoWVhKelltSXlJR0FRYzJOaGNXRmhjbk5pWWpKZ1lCQnpZMkZ4WVdGeWMySmlNbUJnRUhOallYRmhZWEp6WW1JeUlHRXdjMk5oY1dGaGNuTmlZaklnYitEM0FJY1ZwWWF3RnNBeDR3TURRQ0FuRUljbGxZYkFGc0FoMHhMelJSYmdod1dsaHFBV3NDSFRBd05mN2JiZ2h3V2xkckFXc0NIVEF3TmYyVmNRbHhXbGRyQVdzQ0hUQXdOZjZuY1FoeVdsaHJBV3dESFRFd05QN3hiZ2h3V2xkckFXc0NIVEV2TlR4dkNIQmFWMndCYkFJZE1EQTBCUFFCV0dZQkFXZFhBU284QVR2K3dRRllaZ0VCWjFjQktqd0JQUDNnQVZkbUFRRm1Wd0VxUER2OTBBRlhaZ0VCWmxjQktqdzcvcnNCV0dZQkFXZFhBU284QVRzRThBRllaZ0VCWjFjQktqd0JPLzNmQVZkbUFRRm1Wd0VxUER2OTBBRlhaZ0VCWmxjQktqdzdBQWo2Yy81akFYZ0Z4Z0FFQUFrQURnQVRBQmdBSFFBaUFDY0FBRVUzRndNakFRY25Fek1CTnpjRkJ5VUhCeVUzQVNjM0pSY0JGd2NGSndFSEp3TTNBVGNYRXdmOVk0VU9xMllCcFlRT3FtWUJJQTBMQVRnUStsc09DZjdIRVFWb1d3TUJURDc2MmxvQy9yWkFBZ1puRVY5Q0F0OW5FMTVEUFFNVC9yQUdCQU1SQVZIOEpvd0tnRnFVakFxQVdnRUlZaEtZVHZ3eFloT1lUd1FDWHdJQlVUdjdWMkFDL3E4OC8vOEFKZjZBQlh3SEpnUW1BTndBQUFBbkFLRUJSd0UrQVFjQUVBUk4vOGdBRlVBT0FpTUVBQUNZVmdFUEFRRUJYbFlBS3pRck5BRC8vd0FYL29BRWJRWGJCQ1lBOEFBQUFDY0FvUUNMLy9NQkJ3QVFBMWoveUFBVlFBNENJd1FCQUpoV0FROEJBUUY5VmdBck5DczBBQUFDQUNILy9nUG5CbUFBRndBYkFCcEFEQm9MR3dKeUFCY1hEUTBLRWdBL014RXpMek1yempNd01VRUZIZ0lIRGdJbklRRXpBeGMrQWpjMkppWW5KUUVISVRjQlFnRW5ickJnQ0FxSTAzbitJQUViN1ByWVBtWkJDQWdkUlRiK3ZRSC9IdjFYSGdNQUFRUllvM1dDc1ZvQ0JtRDZYd0VCTUZvK05WRXdBd0VEYjZhbUFBQUNBQ1lBQUFUNkJiQUFBd0FiQUNOQUVRRUNCUUFEQmdZRkJSSVFFd0p5RWdoeUFDc3JNaEU1THpNUk16TVJNek13TVVFQkJ3RURKVGNGTWpZMk56WW1KaWNsQXlNVEJSNENCdzRDQTFrQlJHdit2VVArZ2lNQlkxT0xXd3NMTEdSTS9zN2E5ZjBDQzRmVGNnd05wZjREMy80MlZnSEovcFlCeHdFNWMxZEtjVUVEQWZzWUJiQUJBMjNKakozTllnQUUvOGorWUFRUUJGSUFBd0FJQUI0QU5BQWxRQlFBQXpBQkFqQWxHZzhMY2djR2Nob0hjZ1lPY2dBckt5c3JFVE15TWpJUk16TXdNVUVCQndFREF5TUJNd0VIRGdNbkxnTTNOejRERng0REJ6YzJMZ0luSmc0Q0J3Y0dIZ0lYRmo0Q0FvSUJIR3orNVlYZTdBRUUyUUpoQWd4RmRhcHpab2xUSUFRS0VFMTZxRzF2akVrVDl3SUZBeUJOUkQ1a1RETUxId0lYTTA4MlNtcEhLQUdyL2xOV0FhNENCdnNFQmRyOTh4Vml4NlZpQXdKZGxyTllVRisrblYwRUEyU2h2WEFXTTNoclJnSURMVkJtTjhReVhFc3NBZ0pDYjRNQUFnQWpBQUFFNmdjVEFBTUFDUUFWUUFvQ0JnWURDUUp5Q0FoeUFDc3J6ak1STXpBeFFRTWpFeE1ISVFNakV3VHFYK3hmcGlQOWNOcjAvQWNUL2Q0Q0l2NmR5UHNZQmJBQUFnQVJBQUFEMGdWM0FBTUFDUUFWUUFvQ0JnWURDUVp5Q0FweUFDc3J6ak1STXpBeFFRTWpFeE1ISVFNakV3UFNXZXhablNMK05wdnJ2QVYzL2dNQi9mN0R3UHlHQkRvQUFnQXIvc01FckFXd0FBVUFIUUFaUUF3R0J3Y1RFZ0lGQW5JRUNISUFLeXN5THpNNUx6TXdNVUVISVFNakV4TTNGeDREQnc0REJ6YytBemMyTGdJbkJLd2ovWEhhOWYwWUkraUJ4WUUyRGcxYWxjK0NFMU4yVHl3SkNSRThiMVVGc01qN0dBV3cvTTNHQVFKVmw5Ri9mOUdhVlFLM0FrRnRpVXBNaVdrL0FnQUNBQkgrNEFPRkJEb0FGQUFhQUJ0QURRQUJBUXNYR2daeUdRcHlEQXNBTHpNckt6SVJPUzh6TURGVE54Y2VBZ2NPQXdjblBnSTNOaVltSndFSElRTWpFNjRqM1l6WmNnNElUSGVXVVVoR2Nrb0tDeTlzVWdIY0l2NDJtK3U4QWNyR0FRTnkwcE5ZbUhoV0Y2MFpVWE5OVVhsRkF3Snh3UHlHQkRyLy8vK2svcG9INkFXd0JDWUEyZ0FBQVFjQ1lRYUZBQUFBQzdZRkd3d0FBSnBXQUNzMEFQLy8vN0QrbWdhQkJEb0VKZ0R1QUFBQkJ3SmhCVWdBQUFBTHRnVWJEQUFBbWxZQUt6UUEvLzhBSy82WUJYWUZzQVFtQWp3QUFBQUhBbUVFRFAvKy8vOEFJdjZhQkg0RU9nUW1BUEVBQUFFSEFtRURWQUFBQUF1MkF4RUNBUUNhVmdBck5BQUFCQUFrQUFBRmd3V3dBQU1BQndBTkFCRUFMMEFYRHc0T0N3d0VCQXdNQ3djSEN3c0FFQU1JY2dnQUFuSUFLeklyTWhJNUx6TXZFVE1STXk4UkVqa1JNekF4UVRNREl3RXpBeU1CSVFFaE55RUhOd0VoQVNEMi9mVUNESnQ4bXdLWUFUZjluUDRoQmdHRkhzWUJNZjdWQmJENlVBUkwvVGdFTGZ6QTJhbWkvTDRBQUFRQUlRQUFCTW9FT2dBREFBY0FEUUFSQUMxQUZnOE9EZ3NFQkF3TUN3Y0hDd3NBRUFNS2Nna0FCbklBS3pJck1oSTVMek12RVRNUk15OFJNeEV6TURGVE13TWpBVE1ESXdFaEFTRTNJUWMzRXlIYzdMenJBZFdTYXBJQ0RBRXkvZzcrU1FjQllTVy85LzdnQkRyN3hnTlQvYVVEUXYxMTJxZUEvWjRBQUFRQXBBQUFCdUVGc0FBREFBY0FEUUFSQUNOQUVSQVBEd3NLQ2dNT0JnaHlEUWNDQXdKeUFDc3lNaklyTWhJNUx6TXpFVE13TVVFSElUY2hBeU1USVFFaE56TUJBd0UzQVFMaklmM2lJZ0xCL1BYOUJFNzlNZjZoQmVnQ0JyeitwTFlCdmdXd3dNRDZVQVd3L01MYUFtVDZVQUtrdC95bEFBUUFiQUFBQmJRRU9nQURBQWNBRFFBUkFDTkFFUkFQRHdzS0NnTU9CZ3B5RFFjQ0F3WnlBQ3N5TWpJck1oSTVMek16RVRNd01VRUhJVGNoQXlNVElRRWhOek1CQXdNM0FRS1RJdjM3SWdKeHZPeThBNkg5dHY3dUI3a0JaNXJ2eGdGUEJEckF3UHZHQkRyOWRkb0JzZnZHQWVHQi9aNEEvLzhBSnY2YUJZVUZzQVFtQUN3QUFBRUhBbUVFWUFBQUFBdTJBdzhLQUFDYVZnQXJOQUQvL3dBWC9wb0VZUVE2QkNZQTlBQUFBUWNDWVFOZ0FBQUFDN1lERHdvQUFKcFdBQ3MwQUFBRUFDWUFBQWZxQmJBQUF3QUhBQXNBRHdBZlFBOEhCZ1lLQWdNRERBc0NjZzBLQ0hJQUt6SXJNaklSTXhFNUx6TXdNVUVISlNjREJ5RTNFd01qRXlFREl4TUg2aUg5bTVadUkvMFJJNmo5OXYwRVl2MzAvQVd3d0FHKy9hSEh4d0pnK2xBRnNQcFFCYkFBQkFBUkFBQUZsZ1E2QUFNQUJ3QUxBQThBSDBBUEJ3WUdDZ0lEQXd3TEJuSU5DZ3B5QUNzeUt6SXlFVE1ST1M4ek1ERkJCeUUzQXdjaE54TURJeE1oQXlNVEJaWWkvbEFqb0NMOTNpR1V2T3U4QTNDODdMd0VPc0RBL2p5K3ZnSEUrOFlFT3Z2R0JEb0FBQUlBS3Y3Q0I0a0ZzQUFIQUI4QUdVQU1DQWtKRkFRSEFuSUdDSElDQUM4ckt6SXZPUzh6TURGQkF5TVRJUU1qRXdFM0Z4NERCdzREQnpjK0F6YzJMZ0luQllIOTg5bjlqOXIxL1FOYUkrbUJ4SUUyRGcxWmxzNkRFMU4yVHl3SkNoSThiMVVGc1BwUUJPajdHQVd3L016R0FRSlZsOUYvZjlHYVZRSzNBa0Z0aVVwTWlHby9BZ0FFQUJIKzR3WkhCRG9BRkFBWUFCd0FJQUFqUUJFZUZ4Z1lBQUVCQ3gwY0JuSWJDbklNQ3dBdk15c3JNaEU1THpNeUVUTXZNREZCTndVZUFnY09Bd2NuUGdJM05pWW1Kd01ISVRjekF5TVRJUU1qRXdNeUl3RUtqdUY1RFFkTGQ1UlJTMFp5U2dvTE4zWlQwU0w5K0NJNXZPdThBM0s4N0x3QnpjWUJBMjdSbDFtWGVWWVhyaGxRZEUxVmVVRUNBbTdBd1B2R0JEcjd4Z1E2QUFBQkFGLy82QVhtQmNjQVF3QWRRQTQ1REF3aklnTnlBQUVCTGhjSmNnQXJNaklSTXlzeU1oRXpNREZsQnlZa0pnSTNOejRERng0REJ3Y0dBZ1lFSnk0RE56YytBemNIRGdNSEJ3WWVBaGNXUGdJM056WTJKaVluSmc0Q0J3Y0dIZ0lGWkJHZy91WFFaQmdnRGtkNHFHOXhrVTBYRENBWGpOais3WjJQMm8wNkVoMFNXcExLZ1JoTWFrZ29DaDRMRVVOK1luQzdrRjRSSWdVSEVEbzdQbFF6SEFZaEVqMk95N0RHQldhN0FRNnUwMTdEcEdNRUEyMnR4MXZPbVA3NnhXc0RBM0hCOVliQmR0dXZhQVBQQWxKOWl6N0VVYWlOV0FNRFQ0KzZhT01uYzNKUEF3TkhiWGN1MklMR2lFY0FBUUJMLytnRWxnUlRBRU1BSFVBT09Rd01JeUlIY2dBQkFTNFhDM0lBS3pJeUx6TXJNaklSTXpBeFpRY3VBemMzUGdNWEhnTUhCdzRESnk0RE56YytBemNIRGdNSEJ3WWVBaGNXUGdJM056WTJKaVluSWc0Q0J3Y0dIZ0lFVXdwKzVLcFZFQkVLTmx5RVYxZHdQUklIRVJCdHFkVjVkSzV3TFFzS0RFZDFvV1VYTVVVc0dnY0tCd2tzV0VkTmdXTS9DaElDQlFvaUpDYzBJQklERWc0NGRhQ09vd1ZMajlLTWdVcVlmVXNEQTFpS25FZC9kc2lVVHdNRFlLREtiRTVmcTRSTkE4WUZPVk5kS1U4NmZtOUlBd00zWTRGSGdoaE9VenNFTUVwT0hZZGxsV014QVAvLy84RCttZ1ZHQmJBRUpnQThBQUFCQndKaEE3SUFBQUFMdGdFUEJnQUFtbFlBS3pRQS8vLy91djZhQkJJRU9nUW1BRndBQUFFSEFtRUN2UUFBQUF1MkFROEdBQUNhVmdBck5BQUFBd0NhL3FFR2JRV3dBQU1BQ1FBUkFCMUFEZ2tORFFnS0NISUZFQXdDQXdKeUFDc3lNakl2S3pJeUVUTXdNVUVISVRjQkF5TVRJemNGRXpNRElSTXpBd1JlSXZ4ZUlnV0ZjdUk5ZnlUOFJ2ejIyd0p5MnZYOUJiREF3UHNaL2RnQlg4bkpCYkQ3RndUcCtsQUFBd0JYL3I4RTJRUTdBQU1BQ3dBUkFCOUFEd0lEQXcwS0JRWnlDQWNIRUFRS2NnQXJNaklSTXlzeUx6a3ZNekF4UVFjaE54TVRNd01oRXpNRE53TWpFeU0zQXlraS9WQWlNYnpzbXdHYm11MjhzR3ZhT0g0aUJEdkF3UHZGQkRyOGhnTjYrOGEvL2dBQlFiLy8vd0RFL3BvRlhRV3dCQ1lBNFFBQUFRY0NZUVEwQUFBQUM3WUNIUmtBQUpwV0FDczBBUC8vQUczK21nUTNCRHNFSmdENUFBQUJCd0poQXpZQUFBQUx0Z0liQWdBQW1sWUFLelFBQUFNQXRBQUFCVTRGc0FBREFCa0FIUUFqUUJFREF3b0tGUUlDRlJVRUhBaHlHd1FDY2dBck1pc1JPUzh6THhFekVUTXZNREZCQXlNVEFUTURCaFlXRnhZK0FqY0hEZ01uTGdJM0FUTURJd05EZjVwLy9tajFTZ29rWlZreFltRmdMaEl1WG1CaEw1TFlhaElEay9YOTlRUVEvU1FDM0FHZy9qeFhkRHdDQVFjUEZnM0pEeFlOQmdFQ2FNNmFBY1A2VUFBQUF3Q0NBQUFFTGdRN0FBTUFCd0FiQUNOQUVBQUFHQmdOQVFFTkRRVUtjaElFQm5JQUt6SXJNaTh6ZlM4Uk14RXpHQzh3TVVFREl4TUJBeU1URXdjT0FpY3VBamNUTXdNR0ZoWVhGalkyQXFCcW1tb0NLTHpzdkMwUk1tNXhOMys1WEE0MTZ6VUlHazFHT25GdUF5ejlvQUpnQVE3N3hnUTYvaUhDRmg0TkFRRmd0b01CU1A2M1FsODFBZ0VSSUFBQUFnQWNBQUFFdFFXd0FCVUFHUUFaUUF3QkZ3WVJFUmNZQW5JWENISUFLeXNST1M4ekVUTXdNV0VqRXpZbUppY21EZ0lITno0REZ4NENCd0VqRXpNRVdmVktDaU5sV1RGaVlXRXZGQzFlWDJBd2t0aHFFZnh1OXYzMUFjVldkVHNDQVFjUEZRN0pEeFVOQmdFQ1o4NmEvajBGc0FBQ0FGWC82UVc3QmNZQUNRQTJBQ1ZBRWdVZEFRRWRIUVljSEFva0ZRTnlMd29KY2dBck1pc3lFVGt2TXpNUk15OFJNekF4VXhjR0ZoWVhCeTRDQVM0RE56YytBeGNlQXdjSElUY2hOell1QWljbURnSUhBd1llQWhjV05qY1hEZ0pickFZZlVVY1BlSmhFQXdHSzFZczZFaWNUYTZyY2hZMjZaUnNSRmZ4ZElnS25CZ3dJTDJKUVZZVmhQQTBwQ3hSR2ZWNWV0RmNkTll1U0JEb0JSR1U3QmE4RmJiWDhJZ0ZlcWVTRy8zcmhybUlEQTNiQzdYdUp2aUpDaEc1RUFnTkZkNUpML3dCVGxITkNBZ0lvSXNNbUp3d0FBQUwvOHYvcUJITUVVUUFJQURVQUpVQVNCQndCQVJ3Y0JSc2JDU01VQjNJdUNRdHlBQ3N5S3pJU09TOHpNeEV6THhFek1ERkRGd1lXRndjdUFnRXVBemMzUGdNWEhnTUhCeUUzQlRjMkxnSW5KZzRDQndjR0hnSVhGalkzRnc0Q0NLQUlTMlVPY0k5QkFueHZxRzh2Q1FVTVY0N0NkbkdhV2g0TUVQelRIZ0krQlFjTUtVZzBTMnhKS1FnRkJoQXlXa1JXakRwekw0ZWVBMTBCWW5BR29nVmtwL3o2QWxPUXVtb3BiY3lmV3dNRFdaYTdaV2V0QVJZdVdFWXFBd0pDY0lRK0tEdHpZRHNDQWtzOGZFUmFMQUFEQUNUK3VRVlVCYkFBQXdBSkFDRUFJVUFRQ2dZR0N3Z0hCeGNXQ1FNQ2NnSUljZ0FyS3pJdk16a3ZNek16RVRNd01VRURJeE1oQVNFM013RUJOeGNlQXdjT0F3YzNQZ00zTmk0Q0p3SVcvZlg4QkRUOUZmN1lCczRDQnYxdEpQR0F4b0EzRGcxYm1OQ0NFbEYyVFMwSkNSQTZiRlFGc1BwUUJiRDh3OThDWHZ6Q3pRRUNWWm5RZ0gvU20xWUR3QUZCYTRkSlNvWnBRQUlBQXdBaC91UUVmZ1E2QUFNQUNRQWVBQ0ZBRUJZVkNRWnlCZ29LQndzTEFRTUdjZ0VBTHlzU09TOHpNeEV6S3k4ek1ERkJBeU1USVFFak56TUJBVGNGSGdJSERnTUhKejRDTnpZbUppY0J5THpydXdPaS9hSCtCNk1CZmYxNUl3RU1pK1I5RFFoTWVaUlFSMFJ4VEFrTU8zaFFCRHI3eGdRNi9YWGFBYkg5ZHNVQkEyWEhtRmlVZEZNV3JSaE1iMHRXYnprQy8vLy94ZjZBQlg0RnNBUW1BTjBBQUFFSEFCQUVUUC9JQUF1MkF5UUdBQUNZVmdBck5BRC8vLys4L29BRWJRUTZCQ1lBOGdBQUFRY0FFQU5ZLzhnQUM3WURKQVlCQUpoV0FDczBBQUFCQUN2K1NBV0NCYkFBR1FBWlFBd1pDSElYQWdJUkNnVUFBbklBS3pJdk16a3ZNeXN3TVVFekF5RVRNd0VPQWljaUppYzNGaFl6TWpZMk54TWhBeU1CS1BWdkFuQnY5ZjcrRDJTcGVDTkZJaU1YTVJnMVF5VUljZjJSYlBVRnNQMkNBbjc2R0hDdllRRUxDTUlIQ0RkVkxRS2ovWlVBQVFBUi9rZ0VQUVE2QUJrQUhVQVBHUXB5RndJQ0FCRUtEM0lGQUFaeUFDc3lLeklTT1M4ekt6QXhVek1ESVJNekF3NENKeUltSnpjV0ZqTVdOalkzRXlFREk4M3JUd0daVCt6RERtS21kU05ESWlJWE1CazBSQ1VIVlA1blRPc0VPdjQ4QWNUN2lHK3JZQUVKQ2J3SENRRTRWaTRCOXY1SUFQLy9BQ2IrZ0FXRkJiQUVKZ0FzQUFBQkJ3QVFCRmIveUFBTHRnTVdDZ0VBbUZZQUt6UUEvLzhBRi82QUJHc0VPZ1FtQVBRQUFBRUhBQkFEVnYvSUFBdTJBeFlLQVFDWVZnQXJOQUQvL3dBbS9vQUd6Z1d3QkNZQU1RQUFBUWNBRUFXWS84Z0FDN1lER3c4QUFKaFdBQ3MwQVAvL0FDUCtnQVhEQkRvRUpnRHpBQUFCQndBUUJLNy95QUFMdGdNWkN3RUFtRllBS3pRQUFBRUFTLy9wQlMwRnhBQXNBQnRBRFJvTEVSUVVDeVVBQTNJTENYSUFLeXN5RVRrdk14RXpNREZCSGdNSEJ3NERKeTRETnpjaEJ5RUhCaDRDRnhZK0FqYzNOaTRDSnlZR0J5YytBZ0x0bCtLUU54TVJFM08xOEpHU3pua3BFaGNFQXlQOCtRZ05GVVIyVldLWWJrTU9FZzBUUzRwcFk3NWNIanFSbHdYREFXcTgrSkI3aFBqRWNBTURiTHJ4aDQvREkwNklaanNEQWxPTXExVjhYS21GVHdJQ0tDUEZKU2NNQUFJQUwvL29CSjRGc0FBSEFDVUFIMEFQQlFnSUJDVWxBQndTQ1hJSEFBSnlBQ3N5S3pJUk9SRXpNeEV6TURGQklRY0JJemNCSVJNM05oWVdCdzRESnk0RE56TUdGaFlYRmpZMk56WW1KaWNuQVNFRGZSNzkxNjRYQVpyOXBNQ1VpczlyQ3dsam5jQm1ZSjl5UEFYekJDdGJRa21DV0FvTExHMVdrd1d3clAzaWdRR0Ivbk1IQVd6S2ptNmxiallDQWp4dm5HRS9aRHdDQXpsclMxWjZRZ01CQUFMLzhmNXpCRllFT2dBSEFDVUFIMEFPQ0FVRkJDVWxBQndZRWdjQUJuSUFLekl2ekRNU09TOHpNeEV6TURGVElRY0JJemNCSlJNM01oWVdCdzRESnk0RE56TUdGaFlYRmpZMk56WW1KaWNuM1FONUcvM2FyaGNCbGYyb3dZK0owR3dMQ1dHY3YyVmdubkk2Qk9vRUxWeEVTNFJhQ2dzdGIxaVRCRHFrL2RpQ0FZa0IvbWNHYWNlT2JhVnVOZ0lDUEc2Y1lFQm9QUUlET201TlYzcENBd0VBLy84QUovNUhCUGdGc0FRbUFMRk1BQUFtQWphcEtBQUhBbVFCSndBQS8vLy8rdjVEQTlRRU9nUW1BT3hNQUFBbkFqYi9ndjkyQUFjQ1pBRDYvL3ovLy8vQS9rY0ZSZ1d3QkNZQVBBQUFBQWNDWkFPckFBRC8vLys2L2tjRUVnUTZCQ1lBWEFBQUFBY0NaQUsyQUFBQUFRQXBBQUFFN0FXd0FCZ0FFcmNEQUFBTEVBMENjZ0FyTHpNNUx6TXdNVUVGQnlVT0FnY0dGaFlYQlJNekF5VXVBamMrQXdKMUFYSWovcXBTaWx3S0N5dGpTZ0VrMnZYOC9nS0cwbkVNQ21TZ3hnT2FBY2NCQVQ5MlZFaHlSQU1CQk9uNlVBRUViY2VPYzY1MlBBQUNBRUwvL3dadEJiQUFHQUF0QUI5QURoc0xDeEFsSlFNQUFCb1FEUUp5QUNzdk16a3ZNek12RVRNUk16QXhRUVVISlE0Q0J3WVdGaGNGRXpNREpTNENOejREQVNNM0Z6NENOelkyTkNZbkZ4WVdCZ2NPQWdLT0FYSWsvcXBTaWx3TENpdGpTZ0VsMnZYOS9nS0cwbkFMQ21XZnh3SS9saVI3VG0xQURRZ0tDZ3ZtREF3QkNCU0YyUU9hQWNjQkFUOTJWRWh5UkFNQkJPbjZVQUVFYk1pT2M2NTJQUHhteGdFQlQzeElMRnhlWFN3Q08zdDdQSXZYZUFBREFFVC81d1pLQmhnQUZnQXJBRWNBSFVBUU0wUUxjanN0QVhJZEVndHlKd1lIY2dBck1pc3lLeThyTWpBeFV6YytBeGNlQkFjSERnTW5MZ00zQndZZUFoY1dOalkzTnpZdUFpY21EZ0lGRXpNREJoWVdGeFkrQWpjMk5pY1hGaFlIRGdNbkxnSk9BZzFDZGE1M1VYTktLUTRFQ0E5SWRLRm9hNHRNR1BrQ0JnTWdTa05PZlZVUUhBUVVNbEE0VFdwRkp3R1B5K3pNQlEwdk1raHFSeW9LRUFRUjNnNEhEaEJVaTc5NWM1VkRBZlFWWk0rdWFBTURSWEdKa2tORFdydWNYUU1EWHBtMmNCWXpjR05BQWdOTWZFaTNNMkpUTXdJQ1NYYUk0QVN3KzA4b1ZEd0RCRU53Z1Rwa3lXTUJaTWRqYjhxYldnSUJZYXNBQWdDcy8ra0Z0d1d3QUNBQVJnQWhRQkFvSnljQ0FRRU9Na01KY2pvTkRnSnlBQ3N5THlzeUVUa3ZNek1STXpBeFFTTTNGekkyTmpjMkxnSW5KVGNGSGdNSERnUUhEZ0lIQmdZVEp6YzJKaVluTng0REJ3Y0dGaFlYRmo0Q056WTJKeGNXRmdjT0F5Y3VBZ0hDNVNPWFVvNWZDd2NjTzFNeC9wOGpBVVZncW45Q0NBWTRWMnR5TlFjR0JnY01PSXNCQ0FjZ1VFUWFWWlZ0T0FrSEFnMG5Ja1ZoUUNZSkVBUVM2QTBIRGc5VGliMTRiWUk3QW1mSkFTeG9XalpMTUJZQ0Fja0JBaTlobUdwVWFFQXNMU0lGRVJFRkNBaiswUUpEUVdVOEJYZ0NLRk9FWGtjZ09TZ0RBa1Z0ZlRaanltTUJaTWRqYmNtZVdnRUNVcFlBQWdCaC8rTUV4UVE2QUIwQVFnQWxRQkkrUFQwYkFnRUJEU29xSWpNTGNnd05CbklBS3pJck1qSXZFVGt2TXpNekVUTXdNVUVsTnhjK0FqYzJKaVluSlRjWEhnSUhEZ01IRGdJSEJnWUZOd1lXRnhZK0FqYzJKaWNYRmhZSERnTW5JaTRDTnpjMkppWW5OeDRDQndGdC92UWZxREZoUlFnSUowb3Mvdk1jOW1LMWNBWUVQVnBrTEFrRUJBZ0pNd0V4QkFNVExUaFNOeUlIREFZVTNnOFNDZ3RLZDZKa1BHeFVMZ01KQXlBK0tDOVRsMWtKQWFBQnVBRUJHajQ1TWo0ZUFnRy9BUUkraDNKT1R5Y2xKUWNhR3dZSENMMFRLallIQWpOVlpDOU9vRTBCVHAxT1g2VjlSZ0laT0YxRFRpMDBHQU9EQVN4dFlnQURBSlArdHdQZkJiQUFId0EwQUQ4QUgwQU9PamsvTEF3TkFuSWhJQ0FCQVFJQUx6TVJNeEV6S3pJdk15OHpNREZCSVRjWE1qWTJOelltSmljbE53VWVBZ2NPQkFjT0FnY09BZ2MzSGdJSEJ3WUdGaGNISXlZbU5qYzNOaVltQVFjR0JnY25QZ0kzTndHcS91a2h2RkdOWFFzS0wyTkgvdGNmQVErQnpuSUtCekpRWW13MUJnY0hCZ2tmSHpNeGQ3UmREeEVHQWhFWkErZ2FFUVVGRVFvbFhBSVRIQktBWEh3aFBDNEtJUUpkd0FFdmFWZEpaVFFDQWNBQkExcTJpMUJtUVRBdklRVVBEZ1VHQ1FZQmdBSlFvbjk1SlUxSUhoa2hVMWtuZGtsb1BmNlBySFRKUjB3d1gyWTV0Z0FBQXdDTC9xZ0R2QVE2QUI0QU13QStBQjVBRGpnZ0h4OENBUUUrS3dvTURRWnlBQ3N5UHpNNUx6TXpFVE12TURGQklUY1hQZ0kzTmlZbUp5VTNCUjREQnc0REJ3WUdCdzRDSXpjZUFnY0hCZ1lXRndjSEppWTJOemMySmlZRkJ3WUdCeWMrQWpjM0FidiswQjdZTkdkS0NnY3JUaTcrMWgwQkVreVBjMEFGQkVGaGJqTUlCZ2NJR2h0RlBWMmdXZ29MQkFFTkVBTHNEd3NEQkFzR0pVd0NCaHdUZlZ0L0lUd3RDeUFCbmE4QkFSeENQRFJCSHdFQnZnRUNKVTE3VmxGWEx5Z2lCaGNHQmdjRmVRRTJmR3BXR3pJdkZoSUJHRGc2SFZVNVJTREFySFRKU0Uwd1htWTZ0Z0FBQS8vYi8rWUhRd1d3QUJFQUZRQXlBQjFBRGlZbUhpOEpjaGNVQUJVQ2Nnc0lBQzh6S3pJeU1pc3lNaTh3TVVFekF3NEVJeU0zTno0RU53RUhJVGNCRXpNREJoNENGeFkrQWpjMk5pY1hGaFlIRGdNbkxnSUNBdlNmRkRKTmRxNThTUm9qVTNCSkxCc01BMFVqL1pZakFYUzU5YmtEQlJVckpVWm5SQ2tKRUFRUzZRMEdEUkJWakw5NmRacERCYkQ5TFdUUHZaWlh4d0lGVm9XYm1qOENrOG5KKzdzRVJmdTZIVDQzSXdJRVFtNS9PR1BLWXdGanlHTnZ5NTFhQXdOZ3F3QUQvOW4vNWdZZkJEb0FFUUFWQURNQUgwQVFKeWNlTHd0eUZ4UUFGUVp5Q3dnS2NnQXJNaXN5TWpJck1qSXZNREZCTXdNT0JDY2pOemMrQkRjQkJ5RTNBUk16QXdZZUFoY1dQZ0kzTmpZbk14WVdCdzRESnk0REFYRHJlQThvUGw2SFhsSVpJenRRTkNFVUNBS0RJdjRpSXdFamVldDVBd1laTHlZOVZ6Z2hDQTRDRWQwT0NnME5TM3VzYmxlRVZpUUVPdjNxVEoyUGJ6NEJ4UUlFUEYxdGJTMEJ6OExDL1M0QzB2MHRJRUEzSXdFQ1BXUndMMTYvWFY2OVhtSzdrMVVEQWpka2l3QURBQ2YvNXdkQ0JiQUFBd0FIQUNNQUlFQVJGaFlPSHdseUNBSnlBQU1EQmdnRUFuSUFLejg1THpNckt6SXlMekF4UVNFSElRTXpBeU1CTXdNR0ZoWVhGajRDTnpZMkp4Y1dGZ2NPQXljdUFqY0JiQUxpSS8wZUpmWDk5UVJZOUxjRURDNHZSbWRGS1FrUUF4THBEQWNORUZhS3dIcHpsMFFKQXpMSEEwWDZVQVd3KzdrblV6b0RBMEp2ZmpoanltTUJZOGhqY01tZVdRSUNZcXh5QUFNQUIvL29CaDRFT2dBREFBY0FKUUFpUUJJWkdSQWhDM0lKQm5JREFnSUZCd1p5QlFvQVB5c1NPUzh6S3lzeU1pOHdNVUVISVRjVEF5TVRBUk16QXdZZUFoY1dQZ0kzTmpZbk14WVdCdzRESnk0REF6QWkvZkloajd6dHZBSVZlZXg1QXdZWU1DWTlWemtnQ0E4QkVkME9DZzBOUzN1c2IxYUNWU1FDZkwrL0FiNzd4Z1E2L1M0QzB2MHRJRUEzSWdJQ1BXUndMMTYvWFY2OVhtTzZrbFFCQVRobGpBQUJBRXYvNkFTTEJjZ0FLd0FWUUFvU0N3TnlKU1VkQUFseUFDc3lNaThyTWpBeFJTNEROeE0rQXhjeUZoY0hKaVluSmc0Q0J3TUdIZ0lYRmpZMk56WW1KeGNXRmdjT0FnSk1nY2VETmhBcEZIU3k1NGxiclU1S1FJeEpXWkpzUncwcUNoSStjRlJSZ2xRT0R3SU02Z2tJQ3hPZjhoVURZNnpkZXdFR2d1S3FYd0lwTDdZa0lnRUJSSGVXVXY3M1I1SjdUQUlDUW5aUFZyRldBVmV1VnBMUmJRQUJBRDMvNkFPbkJGRUFLd0FWUUFvaEdnZHlCd2NBRHd0eUFDc3lNaThyTWpBeFpSWTJOamMyTmljekZoWUhEZ0luTGdNM056NERGeFlXRndjbUppTW1EZ0lIQndZZUFnSUNNVTR4Q0FrQkJkNEZCUVlOZXJ0dWNxbHNMUW9GRFZxVHdYUkpqVDlBTVhRNlIyNU9Md2tGQncwdFdLd0JJVUl4Tm04Mk5tMDJjNXBNQWdOWWxzQnFLMjdHbDFZQkFSMG51Q0FkQVQ1b2ZUNHFPWGhvUVFBQUFnQ1IvK1lGTFFXd0FBTUFJQUFYUUFzVUZBd2RDWElGQWdNQ2NnQXJNaklyTWpJdk1ERkJCeUUzRXhNekF3WWVBaGNXUGdJM05qWW5GeFlXQnc0REp5NENCUk1qKzZFai9ibjB1UUlFRlNza1IyWkZLUW9RQXhIbkRnWU9EMVdMdjNwMGwwVUZzTW5KKzdzRVJmdTZIVDgySkFJRFFtOStPR1BLWXdGa3gyTnZ5NTFhQXdKaXJBQUFBZ0J6LytnRWtnUTZBQU1BSUFBWFFBc1RFd3NjQzNJRkFnTUdjZ0FyTWpJck1qSXZNREZCQnlFM0V4TXpBd1lXRmhjV1BnSTNOaVluRnhZV0J3NERKeTREQkFZaC9JNGl3bm5yZVFRUE5USTJVanNqQ0EwSkZOd1FGQW9NVFg2blpsZURWQ1VFT3IrLy9TNEMwdjB0S2xRNkFnSXNUVjR1VFpsS0FVcVlUR0duZkVVQkFUZGxqQUFBQWdCUS8ra0ZHUVhIQUNBQVB3QWpRQkVBSWo4L0FnSVhOVEVzQTNJUkRSY0pjZ0FyTXN3cnpETVNPUzh6RWprNU1ERkJGd2NuSWc0Q0J3WWVBaGNXTmpZM053NERKeTRETno0REJTY3VBemMrQXhjZUFnY25OaVltSnlZR0JnY0dIZ0lYRndLZTVSaXZRSHBuUkFnSUwxVm9NMHFSYWcvekNXNnF5MlpndlpsVkJ3aHVxOFlCTmNoTnBZdFRCZ2R3cjg5bmU5dUdBL0lDUTNGQlNabHdDd2tpUmwwenlnTVNBWXdCR0RkZ1NEMVZOQmdCQVRCbVRnRnhvbWd3QWdFeFpKNXdjcFZYSlZnQkFpbFZoVjUxcEdRc0FnTmN0WWNCUjF3dEFnSXJZMU03VVRBWEFRRUEvLy8veGY1SEJZc0ZzQVFtQU4wQUFBQUhBbVFFVUFBQS8vLy92UDVIQkpjRU9nUW1BUElBQUFBSEFtUURYQUFBQUFJQTZBUnlBMGtGMkFBRkFBOEFFcllGQlEwSEFnSUhBQzh6THhETk1pOHdNVUUzRXpjSEFTVTNNd2NHRmhjSEppWUI1QUdneEFIKzlQNjBES1VQQ2hBblRFZEVCSU1XQVQ0QkYvN0QrVnBWTzJRdVF5dU5BUC8vQUVBQ0RnSmxBczRFQmdBUkFBRC8vd0JBQWc0Q1pRTE9CQVlBRVFBQUFBRUFtd0p3QktVRE1RQURBQWl4QXdJQUx6TXdNVUVISVRjRXBTbjhIeWtETWNIQkFBRUFmQUp3QmQ0RE1RQURBQWl4QXdJQUx6TXdNVUVISVRjRjNqYjYxRGNETWNIQkFBTC9XUDVtQXhVQUFBQURBQWNBRHJRQ0E0QUdCd0F2TXhyT01qQXhRUWNoTndFSElUY0M2QnY4aXhzRG9odjhpeHYrL3BpWUFRS1ltQUFCQUxJRUpnSWNCaHdBQ2dBSXNRVUFBQy9OTURGVE56NENOeGNHQmdjSHNoUUxQMXc1ZHpCS0R4Z0VKb2RKaFhNdVRrS0xVb2tBQUFFQWpRUUVBZm9HQUFBS0FBaXhCUUFBTDgwd01VRUhEZ0lISnpZMk56Y0IraFlMUGx3NGVqRktEeGtHQUl4S2hYTXVUMEtMVVk4QUFmK24vdG9CRXdEUEFBb0FDTEVGQUFBdnpUQXhaUWNPQWdjbk5qWTNOd0VURlF3K1d6bDVNVVVQR00rRlNvVnpMazVDakZHSUFBQUJBTTBFQmdIR0JnQUFDZ0FJc1FZQUFDL05NREZUTXdjR0ZoY0hMZ0kzNjhzWkRCSWpkaTA5R1FjR0FKQk5rRVpITDNpRVF2Ly9BTG9FSmdOaEJod0VKZ0dFQ0FBQUJ3R0VBVVVBQVAvL0FKb0VCQU5FQmdBRUpnR0ZEUUFBQndHRkFVb0FBQUFDLzZUK3lBSlNBUDRBQ2dBVkFBeXpFQVVMQUFBdk1zMHlNREZsQnc0Q0J5YzJOamMzSVFjT0FnY25OalkzTndFYkhndzlYRHQ1TWtjUElBSUdIZ3cvWHpwNU1rb1FJUDYwVEl0Nk1VMUhsVmEzdEUyTGVURk5SNVZXdHdBQUFnQnBBQUFFU2dXd0FBTUFCd0FWUUFvR0J3Y0NBd0p5QWhKeUFDc3JFVGt2TXpBeFFRTWpFd0VISVRjREYrVHM1QUlmSVB3L0h3V3crbEFGc1A2S3hNUUFBLy84L21BRVpnV3dBQU1BQndBTEFCMUFEZ3NLQmdjSEFRTUtFbklEQW5JQkFDOHJLeEVTT1M4ekVUTXdNVUVCSXdFQkJ5RTNBUWNoTndNei90dnNBU1VDSHg3OFB4NEROaDc4UHg0RnNQaXdCMUQraXNEQS9JYkF3QUFCQUo4Q0F3SlBBOWdBRFFBSXNRUUxBQy9OTURGVE56WTJNeFlXQndjR0JpY21KcDhDQlh0alhtMEJBUVo4WWx0dUF0SW9ZWDBCZDF3cFlIZ0JBWEwvL3dBMS8vSURBd0QvQkNZQUVnY0FBQWNBRWdIQkFBRC8vd0ExLy9JRXJ3RC9CQ1lBRWdjQUFDY0FFZ0hCQUFBQUJ3QVNBMjBBQUFBQkFGNEI3Z0ZyQXZFQUN3QUlzUU1KQUMvTk1ERlRKalkzTmhZVkZBWUhCaVpmQVU0NU4wOU9PRGRQQW1zNlNnRUJSVGs3U0FFQlJBQUFCd0NpLytnSEF3WEhBQkVBSXdBMUFFY0FXUUJyQUc4QUtVQVRYMVpXTW1oTlRVUXBLVHN5RFJjT0RpQUZCUUEvTXpNdk16OHpNeTh6TXk4ekVUTXZNekF4VXpjK0FoY2VBZ2NIRGdJbkxnSTNCd1lXRmhjV05qWTNOelltSmljbUJnWUJOejRDRng0Q0J3Y09BaWN1QWpjSEJoWVdGeFkyTmpjM05pWW1KeVlHQmdVM1BnSVhIZ0lIQnc0Q0p5NENOd2NHRmhZWEZqWTJOemMySmlZbkpnWUdBd0VuQWFjR0NWYUxXVlY5UUFZR0NWbVBXRlY1UGFvSkF4SXlMQzVES1FZSkJCSXlMUzFFS1FHVEJnaGFqMWxVY2pZRkJnbFBnMWRXZlVHekNnSVRNaXN2UkNjR0NRUVRNaXd1UkNnQkhnWUlVSVJZVm54QUJRY0lXSTlZVlhJM213a0RFek1yTDBNb0Jnb0RFeklzTGtNcWVQeVJkd053QkV0TVZZdFFBZ0pSaDFOTlY0bE9BZ0pTaDU1UEprWXVBUUVzU0NwT0prZ3ZBUUV0U2Z4VlRWZUtUd0lDVllkUFRsS0xVZ0lDVVllaFVDVkhMZ0lDTEVvcVR5WklMZ0VCTEVsNFRsT0pVd0lDVVlkVFRsYUtUd0lDVlllZFVDVkhMZ0lDTFVrcVR5WklMZ0VCTEVrRFNmdVlUZ1JuQUFJQVdnQ0xBbUVEcVFBRUFBa0FFa0FKQVFVRENRSUlCZ1lBQUM4dkZ6a3dNVUVCQnpVQkF4TUhBelVDWWY3SHh3RlFsSzZVM1FPby9tOERFZ0dEL25iK2JRRUJoQklBQUFMLy9BQ0xBZ01EcUFBRUFBa0FEclFDQ0FnRkFBQXZMemt2TXpBeFp3RTNGd0VETXhNVkp3UUJPY2NCL3E4Wms5M0NqQUdSQXhMK2ZRTWQvbjBTQWdBQi8rQUFjQVBHQlNVQUF3QU9zd0FEQWdFQWZDOHpHQzh6TURGQkFTY0JBOGI4a0hZRGNBVFkrNWhPQkdmLy93Q0pBb3dDOUFXL0JnY0Ixd0J6QXB2Ly93Qm1BcHNDN0FXd0JnY0NNQUJ6QXB2Ly93QitBbzREQlFXd0JnY0NNUUJ6QXB2Ly93Q0pBbzRDM3dXL0JnY0NNZ0J6QXB2Ly93Q1lBcHNETFFXd0JnY0NNd0J6QXB2Ly93QjRBbzRDOVFXOUJnY0NOQUJ6QXB2Ly93Q25BbzhDN3dXOUJnY0NOUUJ6QXBzQUFnQnJBb3dEVEFXOUFBUUFHUUFUdHhZTEJBUUxBaEVDQUM4elB6TXZFVE13TVVFREl4TXpBd2MrQXhjZUFnY0RJeE0ySmlZbkpnWUdBWkpxdll5UExpa0lLVWh3VDFwbUpRZFN1MG9GQmlzMVFWRXNCUFA5bVFNaC9va0JRWXAyUndJQ1Y0dFEvZ1VCekNsWlBnSUJSV3YvLy8vWC9vUUNRZ0czQmdjQjEvL0IvcFAvL3dBeC9wUUJ6UUdvQmdjQjF2L0IvcFQvLy8rbC9wUUNQQUczQmdjQjFmL0IvcFQvLy8rMi9vY0NSZ0czQmdjQ0wvL0IvcFQvLy8rMC9wUUNPZ0dwQmdjQ01QL0IvcFQvLy8vTS9vY0NVd0dwQmdjQ01mL0IvcFQvLy8vWC9vY0NMUUc0QmdjQ012L0IvcFQvLy8vbS9wUUNld0dwQmdjQ00vL0IvcFQvLy8vRy9vY0NRd0cyQmdjQ05QL0IvcFQvLy8vMS9vZ0NQUUcyQmdjQ05mL0IvcFFBQlAvM0FBQUVvZ1hIQUFNQUhnQWlBQ1lBSWtBUUlpRWxKaVlCR3hjU0JYSUpBZ0lCREFBL014RXpLOHd6RWprdk04NHlNREZoSVRjaEFRTUdCZ2NuUGdJM0V6NENGeDRDQnljMkppWW5KZ1lHQlFjaE53RUhJVGNEOFB3SEl3UDUvaGRNQzF0U3RpY3VHQVZWRUlYVWhucXJWd1R0QXgxSlBrUmdPUUVYR1AxREdnS09HdjFFR2NjRFNmMldZSll4U1E5SFZ5WUNkSVBIYmdNRFpiTjVBVGhjT0FJQlJXL2dqWTMrOTQ2T0FBQURBQThBQUFaYkJiQUFBd0FIQUJFQUlrQVFBd0lHQ3c0UUJ3Y05FUTRFY2dvTkRBQS9NeXN5RWprdk9SSTVNODR5TURGQkJ5RTNBUWNoTndFREl3RURJeE16QVJNR1d4djZCUnNGeFJ2NkJSd0Z0dnp0L2plMzlmM3RBY3EzQThTYm0vN0ptNXNESS9wUUJCMzc0d1d3KytFRUh3QUFBd0FzLyswR1hRV3dBQmNBR3dBdEFDTkFFaUlwRFJ3WkdBWnlBZ0VCRGd3UEJISU9EQUEvS3pJU09TOHpLekxNUHpNd01VRW5OeGN5TmpZM05pWW1KeWNESXhNRkhnSUhEZ0lCQnlFM0V6TURCaFlXRnhZMk53Y0dCaWN1QWpjQ0YrUWt5RlYrVEFzS0hsaE1sZDN6L1FGdmg4WmtEQTZXN3dPekgvMndIOWpxc2dRSkpTWVZLeFVRSkVzbFdtNHNDQUljQWNrQlFYZFRSMjFBQXdIN0dBV3dBUVJyeElxWTBtMENIN0N3QVFuNzVpTTBIUUVCQmdPNkN3b0JBVkdKVS8vL0FDYi82d2dWQmJBRUpnQTJBQUFBQndCWEJGUUFBQUFHQUNBQUFBWkZCYkFBQXdBSEFBMEFFZ0FYQUIwQUtrQVVIUlVLQ2hJR0J3TUNBaEVTQkhJVEd4c0lFUXdBUHpNekVUTXJFamt2TTg0eUVUTVJNek13TVVFSElUY0JCeUUzQVJNQk13TUJDd0lqQXdFVEFUTUJDd0lqRXhNR1BSejZOaHdGa2h2Nk5od0JNMUlCYW85Qi9vc2xFU09hSVFLZlZnRm4rZjNtSnhFbGx3MHdCQzJhbXY3Q21wcjlFUUZtQkVyK29mdXZCYkQ3bmY2ekJiRDZVQUZwQkVmNlVBV3crNTMrc3dSZUFWSUFBZ0FRLy80R1JRUTZBQkVBSWdBZ1FBOFdFeE1SRkFnVUNCRUtIQThBQm5JQUt6SXlQems1THk4Uk14RXpNREZUQlI0REJ3TWpFell1QWljbEF5TWhJUk16QXdVV05qWTNFek1ERGdQTUFuUmRlMFVVQ1RQdE5RVUZIVDB4L3FXYjdBTzgvZFovNjEwQlFVcGxQQXh5N0hFTlhJMndCRG9DQWo5c2tsYit3Z0ZBTFV3NUlBSUIvSVlDMS8zcEFnRXhZRWdDcFAxZFpKcG5OQUFBQXdCTC8rMEVud1hHQUNNQUp3QXJBQjFBRGlvckp5WW1CeGtTQlhJQUJ3MXlBQ3N5S3pJU09TOHp6akl3TVdVV05qY1hCZ1luTGdNM0V6NERGeFlXRndjbUppY21EZ0lIQXdZZUFoTUhJVGNCQnlFM0F1QTBaaklKTzNnOGZMbDFMdzQxRkdlazNJZzhkVHN2TGw0d1dZbGpQUXcyQ1EwMFovd1ovUWdaQXNrWS9RY2F0QUVSRDhvT0RnRUNWNXZNZUFGVGdkbWVWUUVCRWd6S0VCTUJBVHByamxQK3FrZURaejRDOFltSi92U0ppUUFBQXdCRUFBQUdBd1d3QUFNQUJ3QWZBQ2xBRXdZSEF3SUNGQW9VRndrS0NoWVhCSElXREhJQUt5c1NPWDB2TXhFekVSSTVHQzh6empJd01VRUhJVGNGQnlFM0FTVTNCVEkyTmpjMkppWW5KUU1qRXdVZUFnY09BZ1lESFBxRkhBVlRIUHFGR3dLUS9vRWtBV05UaTFzTUNTdGtUUDdPMnZUOEFndUcxSE1NRGFiOUJLYWJtK3FibS81aUFjY0JPWEpZU25GQkF3SDdHQVd3QVFOdHlJNmR6R01BQXdCRUFBQUVmZ1d3QUFNQUhBQWdBQzFBRlI4Z0lCRURBZ1VHQmhvQ0dnSWFCQkFSQkhJRURBQS9LeklTT1RsOUx5OFJNeEV6RVRNUk14RXpNREZCQnlFM0FRRTNGekkyTmpjMkppWW5KVGNYSGdJSERnSUhBUWNCQnlFM0JEOVAvR3RQQVNQK2R4bmJVb2xjQ3dvcVpVMys3MWZBak5OdERBMkYySW9CWWdFQm8wLzlFRkFFUjdHeCs3a0NXNHNCUG5WVVRXNCtBZ0hJQVFOaXc1T1R2MmNQL2VNUEJiQ3hzUUFFQUJYLzV3UStCYkFBQXdBVUFCZ0FIQUFWUUFrRUJBTVBBUXNOQXdRQVB6OHpNeEk1THpBeFFRTWpFd0UzQndZQ0JnWW5KaVluSlQ0RE53TUhBVGNGQndFM0FuZjk5UDBCeWZJSkQyeXc4cGMvZkQ0QkFHdWNhajBNRENYOVBpTUNpaVQ5UFNRRnNQcFFCYkQ5VHdGT2kvNy95blVDQVJBR3R3TlZqN05mQW9ETS92WE1RTXorOWNzQUFBTC81UUFBQks0RU9nQWJBQjhBR0VBTENCVVZIaDhHY2c0Qkhnb0FQek16S3hJNUx6TXdNV0VqTnpZMkxnSW5KZzRDQndjak56NERGeDRFQndFREl4TUVoT3dlQ1FFWVBXbFJhWjF0UWc0ZDdCMFZicS93bVhXdmQwUVNEdjdHdk95OHRUK0pnMnRDQWdSYWxyWmFzN0dKLzh0MEF3SlNpN1RLWndPSis4WUVPZ0FDLytvQUFBVmFCYkFBRndBYkFCcEFEQmtZQXdBQURnd1BCSElPREFBL0t6SVNPUzh6empJd01VRWxOd1V5TmpZM05pWW1KeVVESXhNRkhnSUhEZ0lIQnlFM0F3ejlFeU1DelZhTld3c0tMV1JLL3M3WjlmMENDb2JUY3dzT3BQNmJJLzBKSXdJZUFjY0JPWFJaU1hCQUF3SDdHQVd3QVFOcnhvNmR6bVJxeDhjQUJBREEvK2dGT0FYSkFDRUFNd0JGQUVrQUpVQVNRaWN3UjBjNU1BMXlId1VPU1VrV0RnVnlBQ3N5TWk4UXpESXJNakl2RU13eU1ERkJOdzRDSnk0Q056YytBaGNlQWhVbk5pWW5KZ1lHQndjR0ZoWVhNallUTno0Q0Z4NENCd2NPQWljdUFqY0hCaFlXRnhZMk5qYzNOaVltSnlZR0JnRUJKd0VDUXFJR1RvRlFWSE00QlFZSVVZZFlUM1ZBb3dJc09DdzhKQVVLQXdvcEtEWkJvQVlJV285WlYzdy9CUVlKV0k1YVZuNC9zZ2dERXpJckwwTW9CZ2tERWpJc0xrUXBBVkQ4a1hjRGNBUWlBbEIzUUFJQ1U0aFBUVlNMVWdJQ1EzWk9BVEZIQVFFeFNpWk9JRWd6QVVYOUpFMVppVTREQVZDSFZFNVlpVTRDQWxDSG9sRWxSeTBDQWl4S0trOG1TQzhCQVMxSkEwbjdtRTRFWndBQkFDdi82Z1BhQmZvQUxnQVV0eGtZR0FFa0RBQUJBQzh6THpNU09TOHpNREZsQnk0RE54TStBeGNlQXdjSERnUUhOejRETnpjMk5DWW1KeUlPQWdjREJoNENBbnNUWTVsbUtndHZDalpjaGxwRVowRWNCQVVOZTcvcS9YZ1NkdWpGaEJFR0FRa1lHQ0lyR2cwRGJBY0RIMFhFMmdWRGQ2TmpBcVpQbG5wR0F3STNXM1ZBS29YZ3NuNUVBYlFDVFkvS2ZTb1JMQ2djQXlrL1FocjlYelJjU1N3QUFBUUFJd0FBQitBRnd3QURBQlVBSndBeEFDVkFFU3N3TGlvQ0F4c1NKQWtKTVM0RUtpME1BRDh6UHpNekx6UGNNczR5RVJJNU9UQXhRUWNoTnhNM1BnSVhIZ0lIQnc0Q0p5NENOd2NHRmhZWEZqWTJOemMySmlZbkpnWUdBd01qQVFNakV6TUJFd2RTR3YyMEdpNEhDMktpYW1TSFFRZ0lDbUtoYVdTSVFiVUpCQk0rT3o1Vk1RZ0pCUlErT2o1V012YjkvUDdOdU96OC9nRXp1QUl2ajQ4QjIxUmtvMTRDQTJHZFlGTmxvVjBEQTE2ZHMxVXlYVDRCQWp4aU4xUXhYejhCQWp4akFSdjZVQVFjKytRRnNQdmlCQjRBQWdEd0E1UUUwUVd3QUF3QUZBQWtRQkVKQkFFREJnb0hCeE1VQWdBREF3WUdFUUF2TXhFekVUTS9Nek1STXhJWE9UQXhRUk1EQndNREl4TXpFeE16QXdFSEl3TWpFeU0zQkFZL3IwQTVRMjVlZ3pyRWhsNytFUkdGVG5WTmlCQURsUUZqL3AwQkFYLytnZ0liL29NQmZmM2xBaHRlL2tRQnZGNEFBQUlBZmYvckJHNEVVUUFkQUNZQUYwQUtJaGNYQkI0T0J4c0VDd0EvTXo4ekVqa3ZNekF4WlFjR0JpY3VBemMrQXhjZUF3Y0dCZ2NoQXhZV0Z4WTJBeVlHQndNaEV5WW1BNmtCVTc5amJhaHdNUW9LWmFITGNXK2ZZaXNFQVFJQi9SRThMbmxGYWNCeVU1SStOQUlLTlN4M3hXZzFQUUlDWUo3Q1pXdk5wbDhEQTE2YnYySU1Gd3ordGpJM0FnTklBMTRDU1RMKzZnRWZORHNBLy84QXV2L3pCWXdGbWdRbkFkWUFTZ0tHQUNjQmxBRDRBQUFCQndJMEF3b0FBQUFIc1FZRUFEOHdNUUQvL3dDRi8vTUdKZ1czQkNjQ0x3Q1FBcFFBSndHVUFac0FBQUFIQWpRRHBBQUEvLzhBaS8vekJoWUZxQVFuQWpFQWdBS1RBQ2NCbEFHQ0FBQUJCd0kwQTVRQUFBQUhzUUlFQUQ4d01RRC8vd0M2Ly9NRjJBV2tCQ2NDTXdDVkFvOEFKd0dVQVMwQUFBRUhBalFEVmdBQUFBZXhCZ1FBUHpBeEFBQUNBRVQvNkFSR0JmY0FLUUEvQUJsQURDb0FBQkkxSHd0eUNSSUFjZ0FyTWlzeUVUa3ZNekF4UVJZV0Z6WXVBeWNtQmdZSEp6NENGeDREQmdjSERnUW5MZ00zTno0REZ5WU9BZ2NIQmg0Q0Z4WStBamMzTGdNQ1lWR09OQVFKSUR0YlFDOVlWaXdQTDJacE5vS3FYeVlDRFFnTlBWK0ZyV3h3cEdjcENnTU1WWW0zZlVWclRDOElBd1VISjFCRFVYTktMQW9QQkNnK1NRUUdBa00vTkhSdlhUZ0RBUTBhRDdNWUlROEJBbXl5MmQ5aU8xeTlyWVpOQXdKWGtyeG9GbXE0aTB2QkFqUmJkRDBXTm5KaVBRTUNTM3lRUVZ3b1Bpd1lBQUVBSHY4V0JVa0ZzQUFIQUE2MUJBY0NjZ0lHQUM4ekt6SXdNVUVCSXhNaEF5TUJCVW4rK08zci9iZnI3UUVJQmJENVpnWGQraU1HbWdBRC82Yis4d1VCQmJBQUF3QUhBQkFBSDBBT0RnWUdCd2NQQW5JTUF3TUtBZ3NBTHpNek14RXpLeklSTXhFek1ERkZCeUUzQVFjaE53RUhBU00zQVFFM013UXFJdnYzSWdUZ0l2d25JZ0pHQS96a3FSc0N0ZjVER0poT3Y3OEYvcisvL0xJZi9MQ2JBdEFDeklZQUFBRUFtZ0p3QS9nRE1RQURBQWl4QXdJQUx6TXdNVUVISVRjRCtDTDh4Q0lETWNIQkFBTUFOUC8vQlBNRnNBQUVBQWtBRFFBV1FBb0pDd3NLQkFnSUFRSnlBQ3MvTXk4ekVUTXdNV1VCTXdFakV4TUhJd01ITnlFSEFkd0NRdFg5T2FBZFVnaUlqYW9qQVVvaTlRUzcrazhEQS8zVTF3TUR3c0xDQUFBRUFFbi82QWV1QkZFQUZ3QXZBRWNBWHdBZFFBNWJOalllRXd0eVRrTkRLd1lIY2dBck1qSVJNeXN5TWhFek1ERlROejRERng0RUZ3Y09CQ2N1QXpjSEJoNENGeFkrQXpjM05pNERKeVlPQWdVSERnTW5MZ1FuTno0RUZ4NERCemMyTGdJbkpnNERCd2NHSGdNWEZqNENVd01OV3BMQ2RsZUlaa2N1Q3dVVFVYU09vRlJ3b21ncTlBTUZDU3BWUlRWa1dVazJEZ1lFRnk1RFVpOUpjbEV4Qmw4RERWcVN4SFpYaUdWSExRb0VFMUoxanFCVWI2Tm5LZlFEQlFrcVUwVTFaRmhLTmc4SEF4VXVRbEl1UzNKUk1RSUtGMjNLbjFvREEwQnJpSmRMSkUrZmptOCtBUUplbThCN0Z6ZDRhVU1CQVN0S1htUXZJeXhlV0VZc0FnSS9iSUl4RjIzS24xb0RBMEp0aTVoTEpFK2RqR3crQWdKZW5MOTdGelo0YVVRQ0FTcElXMk13SWl0Z1dra3RBZ00vYklFQUFBSC9ELzVHQXg0R0dRQWZBQkMzR3hRQmNnc0VEM0lBS3pJck1qQXhSUTRDSnlZbUp6Y1dGak1XTmpZM0V6NENGeklXRndjbUppTWlCZ1lIQVIwTllLUnpKRVFpSXhNcEZUVklLQWkvRG1hc2RTaE1KaVFYTFJjNFVURUlUVytrV2dJQkN3bTZCd2dDTGs4d0JQRnhxRndCRFFpM0JnY3VVelFBQWdBeEFRUUVPQVA1QUJrQU13QWJRQXNYQklBS0VVQXhIb0FrS3dBdk14cmRNaHJlTWhyTk1qQXhVemMyTmpNMkZoY1dGak15TmpjSEJnWWpJaVluSmlZakJnWUROelkyTXpZV0Z4WVdNekkyTndjR0JpY2lKaWNtSmlNR0Jub1RNb0ZJUVdzM01tTThTMzAwRmk5MFJEeG1NamRwUUUrSGdCTXlmVWRCYXpneVpEdE1melVXTUhkRlBHVXpObWxBVG9RQ3VkTXlPZ0VySUJ3cVRUSFRNRHdwSGg4ckFVditLOU14T3dFc0h4MHBURExUTUQwQktSMGZMQUZMQUFNQVlBQ0JCQmdFdlFBREFBY0FDd0FmUUEwQ0FRRUtDZ3NBQXdNSEJ3WUxBQy9PTWhFekVUTVJNeEV6RVRNd01VRUJKd0VYQnlFM0FRY2hOd1BaL1NocEF0bW5JL3kwSXdNREpQeTFJZ1I2L0FkQ0EvcnJ4c2IrV01iR0FBQUQvOVlBQVFQZkJGRUFCQUFKQUEwQUlrQVFBd2NHQUFRSUJnVUpDUUVDQWcwTkRBQXZNM3dRemk4eU1oZ3ZNeGM1TURGQkJRY0JOeVVGQnpjQkF3Y2hOd0VEQW1Jby9RMGJBMDc5WU1VZUEzT3NJdnpGSWdMSzQ4TUJSbjZUM1IrTkFVWDhhTGk0QUFNQUZBQUFBL0VFVkFBRUFBa0FEUUFpUUJBREJ3WUFCQWdHQVFJQ0JRa0pEUTBNQUM4emZCRE9Mekl5R0M4ekZ6a3dNVUVsTndFSEJTVTNCd0VGQnlFM0F6SDlraWNEQnhyOG5BS3R6UjM4ZUFNcEl2ekZJZ0t6NGNEK3UzK1gzU1NPL3J4dnVia0FBZ0E4QUFBRDR3V3dBQWNBRHdBZFFBNEZDQWdPQnhKeUF3b0tDd0VDY2dBck1qSVJNeXN5TWhFek1ERlRBVE1IQVJNSEl6Y0JBemN6RXdFalBBSHB0RXIrbGJFRW1WWUJiSzhEbWZ6K0Zxc0M1QUxNdi8zWi9keW12QUlvQWlTby9ScjlOZ0QvL3dCakFLZ0NDZ1VJQkNjQUVnQTFBTFlBQndBU0FNZ0VDUUFDQUdjQ2hBSjJCRG9BQXdBSEFCQzJCZ0lDQndNR2NnQXJNaklSTXpBeFFRTWpFeUVESXhNQlNFeVZUUUhDVFpSTkJEcitTZ0cyL2tvQnRnQUIvOUgvWkFFTUFRQUFDUUFLc2dTQUNRQXZHczB3TVVFSEJnWUhKelkyTnpjQkRBb05Za3QzS1R3TkR3RUFTbU91UVUwN2VVZFUvLzhBWGdBQUJaQUdHUVFtQUVvQUFBQUhBRW9DTlFBQUFBTUFUZ0FBQkZNR0dRQVFBQlFBR0FBYlFBOFlCaGNLY2hNVUJuSU5CZ0Z5QVFvQVB5c3lLeklyUHpBeFlTTVRQZ0lYRmhZWEJ5WW1JeVlHQnhjSElUY2hBeU1UQVQzc3hSR0F6WU5PbGtvM09uaytab1FReWlEOW9SOEQ1cnpzdkFSL2c3ZGdBZ0lsRnNVWEhBSmxaVWF3c1B2R0JEb0FBQU1BWGdBQUJLMEdHUUFTQUJZQUdnQWJRQThaR2daeUZBQnlEZ1lCY2hNQkNuSUFLeklyTWlzck1qQXhZU01UUGdJWEhnSVhCeVltSXlJR0JnY1RBVE1CQXdjaE53Rk83TWdRZU1COFNwYVRTWGhMbWswOVlVQUtvd0VINi83NnhTRDluQ0FFbVh5c1dBSUJEeGNMdGc0WksxTTgrMlFGNS9vWkJEcXdzQUFBQlFCZUFBQUd2QVlhQUJFQUZRQW1BQ29BTGdBbFFCUWpIQUZ5TGlvVUZRWnlEUVlCY2kwWEZ3RUtjZ0FyTWhFekt6SXJNakl5S3pJd01XRWpFejRDRnhZV0Z3Y21KaU1pQmdZSEZ3Y2hOd0VqRXo0Q0Z4WVdGd2NtSmlNbUJnY1hCeUUzSVFNakV3Rk83TW9PYkxCM0pFY2pGeFl0RnpsWE53bk9ILzJWSUFNcDdNUVJnTTJEVHBWS05qcDVQMlNFRWNvZi9hQWZBK2E4N0x3RW9uS3FYQUVCQ3dpOEJnWXJVRGhvc0xEN3hnUitoTFpnQVFFbEY4VVdIQUZqWlVhd3NQdkdCRG9BQlFCZUFBQUhCZ1lhQUJFQUZRQW9BQ3dBTUFBcFFCY3JBSElrSEFGeUxoUVVMUlVHY2cwR0FYSXBGd0VLY2dBck1qSXJNaXN5TWhFekt6SXJNREZoSXhNK0FoY1dGaGNISmlZaklnWUdCeGNISVRjQkl4TStBaGNlQWhjSEppWWpKZ1lHQnhNQk13RURCeUUzQVU3c3lnNXNzWFlrUnlNWEZpNFhPRmMzQ2M4Zy9aVWdBeW5zeVJCNHYzdEtscFZJZDB5YVREMWlRQXFqQVFicy92ckZILzJiSHdTaWNxcGNBUUVMQ0x3R0JpdFFPR2l3c1B2R0JKcDhxbGdCQVJBV0M3WU5HQUVxVXp6N1pBWG4raGtFT3JDd0FBQUVBRjcvN1FUN0Joa0FBd0FYQUJzQUxRQWxRQlFpS1F0eUV3cHlDUndjRFEwRUFYSVlBZ01HY2dBck1qSXJNaEV6RVRNckt6SXdNVUVISVRjQkZoWVhCeWMzSmlZaklnWUdCd01qRXo0Q0FRY2hOeE16QXdZV0ZoY1dOamNIQmdZbkxnSTNBZFVmL3FnZ0FraHkybWdmNXhBbVdDazRVakVLeSt2S0RtbXVBcW9nL2E4ZjJldXpCQW9sSmhVckZCQWtTU1phYlM0SUJEcXdzQUhlQWo0cnp3RllFdzh2VWpYN1hRU2ljcWxjL2lHd3NBRUorK1lpTkIwQkFRVUR1Z3NLQVFGUmlGUUFBQVFBRmYvcUJwc0dGZ0FiQUI4QU1RQm5BREZBR3pzeVFHUmdXd3R5QVVWSlFBZHlKaTBMY2g0UUh3WnlGQW9CY2dBck1pc3lNaXN5S3pMTU1pdk1NeEk1T1RBeFFTTXVBamMrQXhjZUF3Y2pOaVltSnlZR0J3WWVBZ0VISVRjM013TUdGaFlYRmpZM0J3WUdKeTRDTndVMkppWW5MZ00zUGdNWEhnSUhKelltSmljaUJnWUhCaDRDRng0Q0J3NERKeTRDTnhjVUZoWVhNalkyQThWeUVEb29Cd2ROZFkxR1c0eGZMUVRzQXhkQ1BrcHREQWdHRUF3QzBSNzl0UjYwN0pFRUJ5UW5GU3NVRUNSTEptQnFKUW4rSEFrK1h5ZzhlV001QkFSUmdKbE1hTEZwQXVvQ0pVb3lMMWRBQndjaE8wSWNWYUpsQmdSV2g2Qk5hN2x2QWVNdFZEb3ZYMGNDOWxDbnFWTk9ja29qQVFJM1pJNVpOVjA2QVFGWFNqaHljbklCQ3JDd1dmeW9JVDBuQWdFR0E3b0xDZ0VDWVpoVUVUWTlJQW9QTDBoblNsUi9WQ2dCQWsrWGNRRXpTU2dCSDBFd0pqRWVFd2NXUjM5bVdYOVNKZ0lDVko5ekFUcFFLUUViUGdBVi82aitjZ2hFQmE0QUJRQUxBQkVBRndBYkFCOEFJd0FuQUNzQUx3QXpBRGNBT3dBL0FFTUFSd0JYQUhNQWpBQ2FBS2dBQUVFakV5RUhJeUVqTnlFREl3RWhFek1ITXdVaE56TTNNd0VoTnlFRklUY2hBU0UzSVFFSEl6Y1RCeU0zQVNFM0lRRUhJemNCSVRjaEJTRTNJUUVISXpjVEJ5TTNBUWNqTndVVE13TUdCaU1pSmljWEJoWTNNallsSXpjWE5qWTNOaVluSndNakV4Y2VBZ2NPQWdjR0JnY0dJZ2NuTnpNMk5qYzJKaWNuTnpjeUZoY1dCaGNlQWhVR0JnRUhCZ1luSmlZM056WTJGeFlXQnpjMkppY21CZ2NIQmhZWEZqWUJKMjh5QVMwVXZnWit3aFVCTGpKdCtUSCswamh2Skw4R0dmN1NGTUFrYmY0bi92RVVBUS84NVA3eUZRRU5BUmorOHhVQkRRUGhMRzR0OEMxdExQeE4vdkVWQVE3OG55MXZMUVRvL3ZJVkFRNEJiLzd4RlFFUCtpOHRieTJ3TEc4c0J4a3NiaTMrOWpwak93bG9VRkZwQWxrQ0pUQXNPdjN6bWdSc0xGWUpDVUFpWmxGZVlLZ3VXVG9CQWpKR0h3UUNCQVFQTHI0MGZ5dEtDUVlzSkh3R2l3VVRCQU1EQkJnMUl3R0Evc01IQ1laa1lITURDQXFGWTE5MGFnNEZNRUJEVVFvUEJqRkJSRkFFa1FFZGRIVCs0L25oQVR2S2NYSEsvc1Z4Y1hFR1YzVDdkUG41QXZMNit2cGVjUUkvK2ZrRUdIUjBkUHp1L1B3QmVQcjYvb2o4L1BRQmUvNkZUbHhTVlFJck13RTZjRVlCQWlJeUxCUUJBZjR2QWlVQkFSaytOemduRVJnRER3TUU5UU5JQXlndktTTURBVVlCQWdVRER3TVlFaUl5VjBrQlIzQmhmZ0lDZkY5d1lud0NBbnpPY2pwWEFnRllQWEk3VndJQldBQUZBRno5MVFmWENITUFBd0FlQUNJQUpnQXFBQUJUQ1FJRE16UTJOelkyTlRRbUl5SUdCek0yTmpNeUZoVVVCZ2NPQWhNMUl4VVROVE1WQXpVekZWd0R2QU8vL0VGM3loa3BSR0tubFgreEFzc0NQaWM0T1RVb0x6MGR5Y3AvQkFZRUFvTUR6L3d4L0RFQzNqTStHeVdCVW9DWGZZMDNNRUEwTkUwYUlUcE8vcnVxcXYxSUJBUUttZ1FFQUFILzVBQUFBbnNESXdBY0FCQzFBeHdjQ3hNQ0FDL01Nak1STXpBeFpRY2hOd0UrQWpjMkppY2lCZ2NIUGdJWEhnSUhEZ0lIQndKT0d2MndGd0U0R2o0dkJ3WXNLanBGRExRSFY0bFRTSDFLQXdOTWJET2VrWkdFQVFFV09FQWxLVEVCU0RVQ1ZIcEJBUUV6WjFCR2JWZ2xkUUFBQVFCd0FBQUNEQU1VQUFZQUkwQVZCQVVGQXdNdkFIOEFBZzhBWHdDdkFQOEFCQUFCQUMvTlhYRXlFVE1STXpBeFFRTWpFd2MzSlFJTWdyRmp6QnNCYXdNVS9Pd0NQREdYY2dBQ0FCYi84UUtCQXlRQUVRQWpBQXl6Rnc0Z0JRQXZNOFF5TURGQkJ3NENKeTRDTnpjK0FoY2VBZ2MzTmlZbUp5WUdCZ2NIQmhZV0Z4WTJOZ0o2RUFwUWpHVmdkak1IRVF0UGpHWmZkekhORkFRRkp5NHhPeDRGRlFRR0p5OHhPeDBCMXBoZG1GZ0RBMXFUV3BoZW1GZ0RBMXVWKzdFalR6a0JBalpTS0xBa1R6a0JBalZUQUFFQVlmL3pBN1FFb0FBeUFCZEFDaFFlSGlZQk1Rb01KbjRBUHpNL014STVMek13TVhjekZqNENOemMyTGdJbkpnWUdCd1lXRmhjV1BnSTNGdzRDSnk0Q056NENGeDREQndjT0F3Y2p3UTlkbjN4UkR5QUVCeUErTVVGZ09nZ0ZIRWM3SjBzL0xnby9EbXVaVTNHV1J3Z0toZEI4WnBKWUlBa0pFM1M4L0p3YnN3SW5Wb2hnMlNsVVJTc0JBVUpxUERWYk9RRUJGeTArSmtSVmZrVUJBbWFzYTN6QmJBSUNUb09xWGt1YThLVlZBUUFFQUI3LzdnTy9CS0FBRWdBaUFEUUFSQUFkUUEwb0Z4ZEJEZzRGT1RGK0h3VUxBRDh6UHpNU09TOHpNeEV6TURGQkRnTW5MZ0kzUGdNWEhnTUhOaVltSnlZR0JnY0dGaFlYRmpZMkFRNERKeTRETno0Q0Z4NENCelltSmlNbUJnWUhCaFlXRnpJMk5nTjRCVk9Hb2xGanRuQUZCVmFJbjA1SGpITkQ3QWNyVGk0MVlVRUhCaWxPTURWZ1FnRXdCRkIrbFVoQ2hHcytBZ1dBeEdoaHFXYnpCaU5DS2pCUk5nWUZJVUVyTUZJM0FVZGJoRk1uQWdGR2ozRlpmMUVtQWdFbVRYWkFNa1VqQVFFblREa3pSU01CQVNoTkFqMVNkMHdrQVFJa1NHNU1kSlZJQWdKR2kza3NQeUVCSlVZd0xVRWlBU1pKQUFBQkFGa0FBQVFVQkkwQUJnQU90UVVCQm4wRENnQS9Qek16TURGQkJ3RWhBU1UzQkJRWi9XUCsrd0tlL1lBaEJJMlIvQVFEekFIQUFBRUFQUC9zQTU0RW5BQXhBQlZBQ1JZZkh3NG5Dd01BZmdBL01qOHpPUzh6TURGQk13Y2pKZzRDQndjR0hnSVhGalkyTnpZbUppY21CZ1lISno0Q0Z4NENCdzRDSnk0RE56YytBaVFETmljVkRHS3BoVmdQR1FVSklrRTBQMkkrQndZZlNUbzFaa3dQT0E1eW9WZHRra1FJQ1lYUGVtU1dZU2dLQ1JSNXdBRUFCSnpFQWkxaGsyV3NLMWRKTFFFQk8yUTZOMWMwQVFFcFREVklWNEpHQVFKcHJHZDh1MllEQTBoK3BtQlJtZkdwV2dBQkFERC82d1BkQkkwQUl3QVhRQW9oQ1FrQ0dSRUxCUUo5QUQ4elB6TVNPUzh6TURGQkp4TWhCeUVITmpZWE5oWVdCdzRDSnk0Q0p6TVdGaGN5TmpZM05pWW1KeVlHQVR6QnJnSzBJdjRUVnkxbE0zQ2NUUWdKZzlGOFphOXRBK1lFWEVwQ1lUb0dCaVJQT3paZEFnOHhBazNEL0JjV0FRRmdxRzUrdVdNREFsQ1dhMHhGQVRoalB6bFlNZ0VCSUFBQy8vOEFBQU8xQkkwQUJ3QUxBQlZBQ1FBQkFRb0VDMzBLRWdBL1B6TVNPUzh6TURGQkJ5RTNBVE1KQWdNakV3TzFJdnhzRWdLVHlmNzMvcU1DbE1ycnlnRzd3S01DNy82by9vY0MwZnR6QkkwQUFnQUkvKzREd0FTZ0FCMEFQUUFkUUEwZkFBQWRIaDRTTkNvTENSSitBRDh6UHpNU09TOHpNeEV6TURGQkZ6NENOelltSmlNbUJnWUhCejRDRng0REJ3NERJeWNITnhjZUF3Y09BeWN1QXpjWEJoWVdGeFkyTmpjMkxnSW5BVzF3Tm1oSkNBY25TUzB2VlQwTDdnbUh4MmRMalhBK0JBUlRncE5Gc2dvVmxFZUtjRDhGQkZtTnBsSlFqMncrQXVrQk1GRXhOMlJGQ0FZWk0wWW9BcWNCQVNGTFBERkFId0VjUEM4QmNwRkZBZ0VtVDNwVlVuRkZId0UzY3dFQkhFQnZWRjJHVmljQ0FTeFhnRllCTTBRaEFRSWxUVG90UFNVUkFRQUIvL0lBQUFPOEJLQUFIZ0FTdHdzVWZnTWVIZ0lTQUQ4ekVUTS9NekF4WlFjaE53RStBamMySmljbUJnWUhCejRDRng0Q0J3NERCd1VEZENMOG9CNEIxU2xoVEFrS1QwVS9ZRDRKN0FxSTBYWm5yMlVJQlVOa2NqWCs1YisvckFHR0kxVmxPVVpTQVFFd1dqd0JlNjliQWdGTmxuQkpmV3RjS2RRQUFRQzBBQUFEREFTTkFBWUFDck1HZlFJS0FEOC9NREZCQXlNVEJUY2xBd3pEN0puK3ZpUUNGUVNOKzNNRGNWTEdxQUFDQURuLzdRTzlCS0FBRlFBckFBNjFIQkYrSndZTEFEOHpQek13TVVFSERnTW5MZ00zTno0REZ4NERBVGMyTkNZbUp5WU9BZ2NIQmhRV0ZoY1dQZ0lEc2h3T1NYcXRjR3FUVlIwTEhRNUplcTF3YTVKVkhQN3JJZ1VaUHpnOFZqY2ZDQ0lGR1Q0NVBWVTNJQUt0ekdlMmkwd0RBbE9Lc0dITlo3V0xUQU1DVTRxdy9yNzRLMkZWT0FJQ01WVm1NL1lzWWxZNUFnSXlWbWNBQS8vV0FBQUVLZ1NOQUFNQUNRQU5BQnhBREFRTURBME5DSDBIQXdNR0FnQXZNek1STXo4ekx6TVJNekF4WlFjaE53RUJJemNCTXlNSElUY0RrU0w4cGlJRDJmeDByaG9EazZkU0lmektJcisvdndNOS9BU1VBL25Bd0FBREFHd0FBQVNDQkk0QUJBQUpBQTBBRzBBUUNBY0RCQVlBQ2cwSUFRd0tjZ1VCZlFBL015c1JGemt3TVVFQklRRWpBeE1ISXdFQkF5TVRBY2dCcXdFUC9kZUpjTm94Z1A3akFneGY2MThDRGdKLy9QY0RDdjFvY2dNSi9aWDkzZ0lpQUFIL29nQUFCSDBFalFBTEFCVkFDZ2NLQkFFRUNRVURBSDBBUHpJdk14YzVNREZCRXdFaEFRRWhBd0VoQVFFQmg2TUJNZ0VoL2lZQkYvNzNzdjdFL3Q4QjV2NzdCSTMrYXdHVi9iSDl3Z0djL21RQ1Z3STJBQUFFQUlzQUFBWWVCSTBBQlFBS0FBOEFGUUFnUUE0U0JCQUJEZ1FNQVFnRUJnRjlCQUF2UHpNUk14RXpFVE1STXhFek1ERmxBVE1IQVNNVEV3Y2pBd0VCTXdFakV4TUhJd00zQVZvQmpZa2QvbWFNT2lBZmxVZ0RTUUZmNi80a2t3VktGWTFPSXRNRHV0RDhRd1NOL0QvTUJJMzhVd090KzNNRWpmd3p3QVBWdUFBQUFnQnVBQUFFdHdTTkFBUUFDUUFQdFFjREJRRjlBd0F2UHpNUk16QXhRUUVoQVNNREV4TWpBd0lKQWF3QkF2Mkx0eXlGRXFqZ0FUb0RVL3R6QkkzOGwvN2NCSTBBQUFFQU9QL3NCR1FFalFBVkFBKzFEQkVHQUgwR0FDOC9FVE15TURGQk13TU9BaWN1QWpjVE13TUdGaFlYRmpZMk53TjM3WUlTa3Q2RmU4Sm1Eb0hyZ2dna1dFVkpjRWdMQkkzOUFJYThYd01DWXJpQ0F3RDgvME5pTndJQ05HUklBQUlBWXdBQUJGNEVqUUFEQUFjQUViWUdCd2NCQUgwQkFDOC9FVGt2TXpBeFFRTWpFeUVISVRjQzVNcnN5d0psSS93b0l3U04rM01FamNEQUFBRUFELy91QS80RW5nQTVBQmhBQ2dvbUR6WXhLeGdVRDM0QVA4d3pMOHd6RWprNU1ERkJOaTRDSnk0RE56NERGeDRDQnljMkppWWpJZ1lHQndZZUFoY2VBd2NPQXljdUF6Y1hCaDRDTXpJMk5nSzlDQ0k5U2lGRWhXczhCUVZYaDZGT2I3eHhBdW9ETGxZNE1XUktDQWNuUWtvZFJvUm9PUVVHV1lxa1VGZWVlMFVDNndNZE8xSXhNbVZKQVRnc095Y1lDaFEyVUhWVFdJSlVKZ0VDVUo5M0FUcE9LQjFDTmlrM0pSY0pGRGxVZVZSY2dGQWtBZ0V3WFkxZUFUUktMaGNjUUFBQ0FBa0FBQVFXQkkwQUdRQWVBQmhBQ2hzTkRRd01HaGdYQUgwQVB6SXZNemt2TXhJNU1ERlRCUjREQnc0Q0J3Y2hOd1V5TmpZM05pWW1KeWNESXlFRE54TVYwd0d2VUpSeVBnWUdWWWxWVXY1cElBRWJPMnRMQ1Fjb1VEWGZxZXdDczcvdHpnU05BUUlvVVlGYVpZUlhJeW5BQVNkUlFUaExKUUlCL0RNQ0JBTCtCdzBBQUFNQU92OHZCRllFb0FBREFCa0FMd0FjUUF3QUF3TXJLd29LQWlBVmZnSUFMejh6RWprdk14STVFVE13TVdVQkJ3RUJCdzRESnk0RE56YytBeGNlQXdjM05pNENKeVlPQWdjSEJoNENGeFkrQWdLckFTU2kvdU1DT3dZUFhwbk9mbm1zYXlrTEJnNWZtYzk5ZWExcUtmd0hCZ2dxV2t4UmVWUXlDUWdHQnlwYVRWRjdVekt1L3Z4N0FRVUNNVGgzMHA5WUF3SmVuc3B1T25mUm9GZ0RBbCtmeXFJNlBZQnVSUU1EUUcrSlJqczlnWEZJQXdOQ2Nvc0FBQUVBQ1FBQUJEQUVqUUFZQUJPM0FnRUJEUXdQZlEwQUx6OHpFamt2TXpBeFFTVTNCVDRDTnpZbUppY25BeU1UQlI0Q0J3NERBalQrdUNJQkxEeHdUZ29JS0ZNMjk2bnN5d0hHY0x0ckNBZFpqcXdCbWdIQUFRRWxVRUk1VWl3REFmd3pCSTBCQTFhbWVXU1FXeXNBQWdBNy8rMEVXQVNnQUJVQUt3QVF0aWNHSEJGK0Jnc0FQejh6RVRNd01VRUhEZ01uTGdNM056NERGeDREQnpjMkxnSW5KZzRDQndjR0hnSVhGajRDQkV3R0RsNll6MzU1cldzcEN3Y09YNW5PZm5pdGFpcjlCd1lJS2xsTVVYbFVNZ2tIQndjcldreFNlVlF3QW1rNWR0U2dXUU1DWHA3S2JqcDMwYUJZQXdKZG5zbW1PajJBYlVZREEwQnZpVVk3UFlGeFNBTURRM0dMQUFFQUNRQUFCS2dFalFBSkFCRzJBd2dGQVFjQWZRQS9NaTh6T1Rrd01VRURJd0VESXhNekFSTUVxTXJrL29tTzdNdmpBWGlOQkkzN2N3TXQvTk1FamZ6VEF5MEFBd0FKQUFBRnlBU05BQVlBQ3dBUUFCWkFDUUlPQ2dVTUJ3UUFmUUEvTWpJeUx6TXpPVEF4UVRNVEFUTUJJd0V6QXdNakFUTURJeE1CUU1LekFkalcvWGFpL3AzSGNEYnNCUFhLeSt3NkJJMzhzUU5QKzNNRWpmeW8vc3NFamZ0ekFVb0FBQUlBQ1FBQUF6RUVqUUFEQUFjQUQ3VUdBd0lFZlFJQUx6OFJNek13TVdVSElUY1RBeU1UQXpFaS9ac2k4OHJzeTcrL3Z3UE8rM01FalFBREFBa0FBQVNkQkkwQUF3QUpBQTBBRjBBTUJnY0xCUXdJQmdvQkJBQjlBRDh5THpNWE9UQXhRUU1qRXlFQkFTYzNBUU1CTndFQnY4cnN5d1BKL2JYK3Z4SGpBWVNaL3VHOEFXMEVqZnR6QkkzOXVmN3U4K2tCZmZ0ekFpT04vVkFBQUFILzgvL3RBNjhFalFBVEFBMjBFQXdIQVgwQVB5L01NekF4UVJNekF3NENKeTRDTnhjR0ZoWVhGalkyQWp5RzdZY1FlYjUyYzZ0YUJlc0RIVVE1T1ZFdkFXNERIL3ppZEs1Z0FnTldvbmNCTlZBdEFRSTNXQUFCQUJvQUFBSFBCSTBBQXdBSnNnQjlBUUF2UHpBeFFRTWpFd0hQeXV2S0JJMzdjd1NOQUFNQUNRQUFCS2tFalFBREFBY0FDd0FZUUFvQ0F3TUVDUVVJQkgwRkFDOC9NeEV6RWprdk16QXhRUWNoTnhNREl4TWhBeU1UQTZjaC9YNGltY3JzeXdQVnkrcktBcDNBd0FIdyszTUVqZnR6QkkwQUFBRUFQLy92QkU0RW9BQXFBQlpBQ1NrcUtnVVpFSDRrQlFBdk16OHpFamt2TXpBeFFRTU9BaWN1QXpjM1BnTVhIZ0lYSnk0Q0p5WU9BZ2NIQmg0Q0Z4WTJOemNqTndRc1J6aWt0VkI2c0c4c0RRa1BYSmJMZjMyNmJRcmlCakpaUVZGNFZERUtDZ2dLTUdCT1BYTXpLUFVmQW1MK0wwRkdHd0lCV3B2SmNrbDN6cHRWQXdKWXEzOEJRRllzQXdJOWFvVklURUdDYTBFQ0FSa2h6SzBBQXdBSkFBQUQ2QVNOQUFNQUJ3QUxBQnBBQ3djR0JnRUtDd3NCQUgwQkFDOC9FVGt2TXhFNUx6TXdNVUVESXhNQkJ5RTNBUWNoTndHL3l1ekxBbjhpL2RjaUFyNGkvWmNpQkkzN2N3U04vaEhBd0FIdndNQUFBQU1BRC84VEEvNEZjd0FEQUFjQVFRQXBRQk1IUGo0a0NCY3pCZ1l6Q3dJZ0lCY0FBQmQrQUQ4ekx4RXpFVE0vTXk4UkVqazVNeEV6TURGQkF5TVRBd01qRXlVMkxnSW5MZ00zUGdNWEhnSUhKelltSmlNbUJnWUhCaDRDRng0REJ3NERKeTRETnhjR0hnSXpQZ0lDOHpXV05sQTJsallCUlFnaVBVa2lSSVZyUEFVRlZvaWdUMis4Y1FMcUF5NVdPREZrU1FrSEowSktIVWFFYURrRkJsbUtwRkJYbm50RkF1c0RIVHRTTWpGbFNnVnovc3dCTlByVS9zd0JOUEVzT3ljWUNoUTFVSFpTV1lKVEp3RUNVSjkzQVRwT0tBRWVRellvTnlVWENSUTVWSGxUWElGUUpBRUNMMTZOWGdFMFNpNFhBUnRBQUFNQUVRQUFCQWdFb0FBREFBY0FKZ0FkUUEwRUJRVUJJaGwrRGdJQ0RRRUtBRDh6TXhFelB6TVNPUzh6TURGaElUY2hBd2NoTnlVSERnSUhKejRETnhNK0F4Y2VBZ2NuTmlZbUp5WU9BZ09VL0gwaEE0Ui9HZjBHR1FHUUhBZzZZMFdLSmpBZER3VWZDa054bm1WNW9Fc0U3Z1FRT2p3elNTMFp3QUc1a0pCcCtWT1BkQ3RaRGtKV1Z5SUJBVjZqZWtRREFtZXpkZ0V4WUVBQ0FTMU1Xd0FGQUFJQUFBUG5CSTRBQXdBSEFBd0FFUUFWQUJ0QUN3WUhBd0lDRVJRS0NSRjlBRDh6UHhJNWZDOHpHTTR5TURGQkJ5RTNCUWNoTnlVQklRRWpBeE1ISXdNQkF5TVRBenNhL1FjWkF0UWEvUWNaQVdrQllnRUIvaWFKSjQwc2djd0J2V0RyWUFKRWtaSFlqNCtpQW4vODl3TUsvV2h5QXduOWxmM2VBaUlBQUFJQUNRQUFBK0FFalFBREFBY0FEclVIQmdOOUFnb0FQejh6TXpBeFFRTWpFeUVISVRjQnY4cnN5d01NSXYyY0lnU04rM01FamNEQUFBQUQvNlFBQUFQckJJMEFBd0FJQUEwQUcwQU1DQXg5QUFVRkNRSURBd2tLQUQ4ekVUTVJNeEV6UHpNd01XRTNJUWNCRXpNREl3RUJFeU1CQXlzaS9UTWlBZ3FFLytHei9qd0J0WGVtL1l2QXdBTlIvSzhFamZ0ekEyb0JJL3R6QUFBREFEdi83UVJZQktBQUF3QVpBQzhBRjBBS0F3SUNDaUFWZmlzS0N3QS9Nejh6RWprdk16QXhRUWNoTndVSERnTW5MZ00zTno0REZ4NERCemMyTGdJbkpnNENCd2NHSGdJWEZqNENBeTBpL21ZaEFyb0dEbDZZejM1NXJXc3BDd2NPWDVuT2ZuaXRhaXI5QndZSUtsbE1VWGxVTWdrSEJ3Y3JXa3hTZWxNeEFxSEF3RGc1ZDlPZ1dRTUNYcDdLYmpwMzBhQllBZ05kbnNtbU96eUFia1VEQTBCdmlVWTdQWUZ4U0FNQ1FuR0xBQUwvcEFBQUErc0VqUUFFQUFrQURyVUJDUW9FQ0gwQVB6TS9NekF4UVJNekF5TUJBUk1qQVFKb2hQL2hzLzQ4QWJWM3B2MkxBMUg4cndTTiszTURhZ0VqKzNNQUEvL2JBQUFEb1FTTkFBTUFCd0FMQUJkQUNnY0dCZ0lLQzMwREFnb0FQek0vTXhJNUx6TXdNV1VISVRjQkJ5RTNBUWNoTndMNEl2MEZJUU1NSS8yWElRTUVJZjBESXNEQXdBSCt3Y0VCejhEQUFBTUFDUUFBQktRRWpRQURBQWNBQ3dBVHR3b0ZDd2NDQUFOOUFEOHpNek16THpNd01VRUhJVGN6QXlNVElRTWpFd1A3SXYxL0lrWEs3TXNEME1ydHl3U053TUQ3Y3dTTiszTUVqUUFELzlvQUFRUU1CSTBBQXdBSEFCQUFKVUFTRFFnSkF3b0dFQkFPQjMwS0Fnd0RBd0lLQUQ4ekVUTVJNejh6TXhFekVoYzVNREZsQnlFM0FRY2hOd0VIQVNNM0FRTTNNd09ISXZ6UElnTzJJdnp3SWdGL0F2NE1xeHNCaHU4WW1zQy92d1BOd01EOTBCZjl1NTBCdmdHcmhnQURBRUVBQUFVMEJJMEFGUUFuQUNzQUZVQUpGZ0FBSzMwZURDb0tBRC9OTWo4ekx6TXdNVUVYSGdNSERnTWpKeTRETno0REZ5WUdCZ2NHRmhZWEZ4WTJOamMySmlZbkV3TWpFd0xCZUdpN2prb0pDbkd5MlhONGFydU1TQWtLY2JMWlpHR2tiQTRNT1h0WmkyU2thd3dMT254WFdjdnN5d1FaQVFJNWNLcHpmYmQ0T2dJQ08zU3RjM3kxZERpN0FUdUFaMTE1UHdNQkFUK0VhVngxT2dNQkwvdHpCSTBBQWdCdEFBQUZSUVNOQUJrQUhRQWZRQTRWRkJRR0J3Y05IQTRBSFIwTmZRQS9NeEV6UHhJNUVUTXpFVE13TVVFekF3WUNCQ2NuTGdNM0V6TURCaDRDRnhjV05qWTNBd01qRXdSYTZ6SWFwZjd5dUVtQnVuSXJFRExyTWdrSE1HWlZTbjJqV3hLNHkrdktCSTMrMDdIKytKTUJBUU5ibnRKN0FTNyswVW1LYmtRRUFRTm50SE1CTHZ0ekJJMEFBQU1BQUFBQUJIRUVvQUFzQURBQU5BQW5RQk10TkFvdU13b29FaElwRVJFeU1qRUtCaDErQUQ4elB6TVJNeEV6TXhFelB6TS9NekF4UVRjMkxnSW5KZzRDQndjR0JoWVdGd2N1QXpjM1BnTVhIZ01IQnc0REJ6YytBZ0UzSVFjaE55RUhBM01GQnd3dlcwZE1kbFUwQ1FVSEFocEdRQXBubEZ3bENRUU1aSjNKY20yc2REVUpBdzFaanJ4eEMyQjRQLzdKSXdIQUl2d1FJZ0hBSXdKckt6NXpYVGdDQWpSZWZFVXJPbjF6V1JoMUVtYVh0V0lqY3IyTFN3TUNUb3UzYWlSd3dKSmREM1VnZjZqOTljSEJ3Y0VBQUFNQVl2L3JCUXNFalFBREFBY0FJd0FjUUEwWEZnc2dEUTBEQkFvRkFnTjlBRDh6TXo4U09TOHpQek13TVVFSElUY1RFek1ERXpjK0FoY2VBZ2NPQXdjM01qNENOelltSmljbUJnWUVHeUw4YVNLSHl1M0xCdzgxZkg0N2ZMaGdDUWRhajdSZ0V6SlpSaXdJQ0NaWlF6eDJkQVNOd01EN2N3U04rM01CKzc4YUhnd0JBVjJ4Z0cyVVdTZ0J1aGN2VERWRld6QUJBaE1mQUFBQ0FEbi83UVJFQktBQUF3QXJBQmRBQ2dBQkFRa2RGSDRvQ1FzQVB6TS9NeEk1THpNd01VRUhJVGNCTnc0Q0p5NEROemMrQXhjZUFoY2pMZ0luSmc0Q0J3Y0dIZ0lYRmpZMkFyMGkva1FoQWd6cUZKampnbmlwWmlVTUNnNWNsY2w3Z2Ixc0NPb0NMVjFIVUhaUE1Ba0tCd01sVlV4TGNrd0NwOERBL3R3QmhiZGJBd0pjbk1kdFQzUE9uRllEQW1PNGYwWmhOQU1DUFd1SFJGRTdmMjFHQWdNdllRQUFBLy9CLy84R3d3U05BQkVBS1FBdEFDQkFEeWdwS1J3c0hRRXRmUjhjQ2dzSUNnQS9Nejh6UHpNek14STVMek13TVVFekF3NEVKeU0zTno0RU55VWVBZ2NPQXljaEV6TURGelkyTnpZbUppY2xOd01ISVRjQmMrOXVFaXhFYko1eE5oWWlRMW81SWhVSUJDQnV1MndJQjFpT3JWditHOHJ0cWQxZW1RNElLbE0wL3JZaUlDTDkwaUlFamYzNFhMcW1nVWtCeUFFRVFXVjRlVFJmQTFPaGVXU1RZaThCQkkzOE13RUJaMk00U3lnQ0FjQUJsY0RBQUFNQUNmLy9Cc1lFalFBWEFCc0FId0FoUUE4WEZoWWJHaG9lQ3g5OURRb0tIZ29BUHpNUk16OHpFamt2TXpNdk16QXhRUjRDQnc0REp5RVRNd01YTmpZM05pWW1KeVUzQndjaE54TURJeE1GTDI2OGJRZ0dXbzJ1V3Y0YXkrdXAzMTZZRGdncVVqWCt0eUpySWYyTklwbks3TXNDOXdOVG9YbGpsR0l2QVFTTi9ETUJBV2RpT1Vzb0FnSEFXOERBQWZEN2N3U05BQU1BWXdBQUJRb0VqUUFEQUFjQUd3QVpRQXNZRFEwREV3UUtCUUlEZlFBL016TS9NeEk1THpNd01VRUhJVGNURXpNREV6YytBaGNlQWdjREl4TTJKaVluSmdZR0JCd2kvR2tqaDhyc3l3Y05ObnQrTzRPNVdBNDM3RGdKSGxWTE8zWnpCSTNBd1B0ekJJMzdjd0g3dnhvZURBRUJaTHVIL3FvQlYwaGxOd0lDRXg4QUFBUUFDZjZoQktNRWpRQURBQWNBQ3dBUEFCdEFEQThMZlFNSEJ3NEtBZ0lLQ2dBL015OFJNek1STXo4ek1ERmxBeU1USlFjaE54TURJeE1oQXlNVEFvNWM3RndCc0NMOWZ5THV5dXpMQTgvSzdNdXovZTRDRWczQXdBUE4rM01FamZ0ekJJMEFBQUlBQy8vOEEvZ0VqUUFYQUJzQUcwQU1BZ0VCRFFzT0Noc2FHZzE5QUQ4ekVUTS9NeEk1THpNd01VRWhCd1VlQWdjR0JnY25FeU1EQlJZK0FqYzJKaVkzTnlFSEFtLyt1U0lCTERSY053RUNqVnI3cXVuS0FjaGNzSk5pRFJCZnRmb2gvWWNpQXVuQUFRRWlTVHhqWFFFQkE4Mzdjd0lDTDJDVFlubWVUK20rdmdBRC80UCtyd1MvQkkwQUVBQVdBQjRBSTBBUUdoMGRDUmNLQ2h3VUNRb1dFUkVBZlFBL01oRXpQek16TXhFekVUTXZNekF4UVRNRERnUUhJemNYUGdNM0V5RURJeE1oQVNFREl4TWhBeU1CbXV0VEVESk1iSkpnVUJvZ1FGNUJMQStNQXVuSzY2bitBZjRzQk1oYzdEdjlEenZzQkkzK1kxcTdzcGh6SHI4QlBIK0ttVmNCbXZ0ekE4Mzg4LzN2QVZIK3NBQUFCZitxQUFBR1JRU05BQU1BQ1FBTkFCTUFGd0ExUUJrVUZ4Y1JEQXNMQndjUkVRWU9EZzhLQWdJVkNna0RBdzk5QUQ4ekVUTS9NeEV6RWprdk16TVJNeEV6RVRNUk14RXpNREZCQXlNVElRRWhOek1CQXdNM0NRSWhFek1ISndFaEFRUGp5dXpLQTA3K0IvN1hGYWNCUTZxN3pBRUUvQmYrL2dFSm5iWTFqZjZmL3M4QjdRU04rM01FamYxTDFRSGcrM01DQzVEOVpRSFlBclgrSU5VZi9na0Nsd0FDQUE3LzdnUHJCSjhBSGdBK0FCMUFEUjhDQWdFK1BoVTBLZ3NMRlg0QVB6TS9NeEk1THpNekVUTXdNVUVuTnhjK0FqYzJKaVlqSmdZR0J3YytBeGNlQXdjT0F5Y1hIZ01IRGdNbkxnTTNGeDRDRnhZMk5qYzJMZ0luSndJdXdoYUJOMnBLQ0FnMFdDNHhWMEVNN1FkVmhKMVFTWk42UmdRRFZJS1gvcVZFaW5GQ0JBVmZrNjFWVUpOeFFBTG9BVEZTTkRseVVna0dHalpKS0pjQ0t3RjlBUUVkUno4MlFSc0JHend4QVZoK1R5UUJBU0ZHZDFkVWVFd2xSd0VCSUVSdlVtR0dVaVFDQVNwVWdWa0JOME1kQVFFZ1NrQXZQeVFSQVFFQUF3QUxBQUFFclFTT0FBTUFCd0FMQUJ0QURBQURDZ2NMQ2dFQ0JRVUlmUUEvTXhFek16OHpNek16TURGM0FSY0JBVE1ESXdFekF5TmFBM0tQL0pBQzJlbks2ZjNiNmNycFZnUTRWL3ZKQkkzN2N3U04rM01BQUFNQUNnQUFCR29FalFBREFBa0FEUUFmUUE0TUN3c0hCd1lHQWdrRGZRb0NDZ0EvTXo4ekVqa3ZNeEV6RVRNd01VRURJeE1oQVNFM013RURBemNCQWNESzdNc0RsZjI2L3U0R3RBRjlyZnEyQVZzRWpmdHpCSTM5UzlVQjRQdHpBZ3VRL1dVQUFBUC93Zi8rQkpnRWpRQURBQWNBR1FBWVFBc1RFQW9IQWdNRENIMEdDZ0EvUHpNUk16TS9NekF4UVFjaE55RURJeE1oTXdNT0JDY2pOemMrQkRjRDRDTDkwaUlDNXN2c3l2M0k3bThTTFVWcW5YQTJGeUpDV1RraUZRa0VqY0RBKzNNRWpmMzNXN2luZ2tvQ3lBSUhRV04yZURRQUFnQjIvK2dFaVFTTkFCSUFGd0FYUUFvQkYzMFZGaFlPRGdjTEFEOHpFVE1STXo4ek1ERkJBU0VCRGdJSElpWW5OeFlXTXpJMk5qY0RFeE1IQVFJSUFYVUJEUDNjTFdpTFl4dzJHaEVVS1JReVJ6WVhJSjhvclA3ckFlY0Nwdng0VUlGTEFRTUN3UU1FS1VNb0ExTDlwLzd6UlFPckFBUUFDZjZ2QkxnRWpRQUZBQWtBRFFBUkFCMUFEUkVOZlFVSkNSQUxDQUlDQ0FvQVB6TXZFVE16TXhFelB6TXdNV1VESXhNak56TUhJVGNUQXlNVElRTWpFd1M0YnRrNmdDSUZJdjEvSXU3SzdNc0QwTXJ0eThEOTd3RlJ3TURBQTgzN2N3U04rM01FalFBQ0FGc0FBQVJiQkkwQUF3QVhBQk8zRkFrSkFnTU9mUUlBTHo4ekVqa3ZNekF4UVFNakV3TUhEZ0luTGdJM0V6TURCaFlXRnhZMk5nUmJ5dXpLQ0E0MWRIWTZoY0ZmRHpuc09nZ2RWa3M3ZG5NRWpmdHpCSTM5Lzc4WUh3NENBVis3akFGYy9xTklaRGNEQVJJZkFBUUFDUUFBQmtNRWpRQURBQWNBQ3dBUEFCbEFDd3NIQnc4UUNnWUdBdzU5QUQ4ek14RXpQek1STXpBeFpRY2hOd0VESXhNaEF5TVRJUU1qRXdUeEl2dkdJZ05LeXV6S0F5N0s3TXI4YU1yc3k4REF3QVBOKzNNRWpmdHpCSTM3Y3dTTkFBQUZBQW4rcndaWEJJMEFCUUFKQUEwQUVRQVZBQ2RBRWhFTkRSVjlCQkFDQWhBUURBd1RFd2tJQ2dBL016TVJNeEV6RVRNdkVUTS9NeEV6TURGbEF5TVRJemN6QnlFM0FRTWpFeUVESXhNaEF5TVRCbGR1MkRxQUlnUWkrOFlpQTBySzdNb0RMOHZzeXZ4b3l1ekx3UDN2QVZIQXdNQUR6ZnR6QkkzN2N3U04rM01FalFBQ0FFdi8vQVRsQkkwQUF3QWFBQmRBQ2dZRkJROFNDaEVCQUgwQVB6SXlQek01THpNd01WTUhJVGNCSlFjRkhnSUhCZ1lISnhNakF3VVdOalkzTmlZbWJDRUJ1eUlCUGY2NUlnRXFObHMzQVFLUFd2dXE2Y29CeUh2a25oSVFYN01FamNEQS9tb0J3QUVDSmt3N1ltWUJBUVBOKzNNQ0FsbXhnWGlpVS8vL0FBdi8vQVhaQkkwRUpnSVlBQUFBQndIekJBb0FBQUFCQUF2Ly9BUHpCSTBBRmdBVlFBa1ZGaFlLREFrS0NuMEFQejh6RWprdk16QXhRUjRDQnc0Q0p5VVRNd01YTmpZM05DWW1KeVUzQW5GdnMyQVJFcDdsZXY0NHl1bXErMXVOQXpaYk5mN1ZJUUwzQTFPaWVJR3hXUU1CQkkzOE13RUJabUk3VENZQ0FjQUFBZ0FVLyswRUh3U2dBQU1BS3dBWFFBb0NBUUVjQ0NjTEV4eCtBRDh6UHpNU09TOHpNREZCSVRjaEFSNENGeFkrQWpjM05pNENKeVlHQmdjSFBnSVhIZ01IQnc0REp5NENKd05ZL2tVaEFiejloQUl2WGtoUmRFNHRDZ29IQlNaWFNrdHpUQkRzRnBqZ2hIZXFaeWNNQ2c5YWs4ZDlmc0Z3QmdIbndQN2VSMTR3QWdNK2E0WkZVVHArYmtZREFqTmtSd0dGdWw4REFseWR4bTVQZE0yYlZnTURYN09BQUFRQUNmL3RCaG9Fb0FBREFBY0FIUUF6QUIxQURpUVpmaThPQ3dNQ0FnWUhmUVlLQUQ4L0Vqa3ZNejh6UHpNd01VRUhJVGNUQXlNVEFRY09BeWN1QXpjM1BnTVhIZ01ITnpZdUFpY21EZ0lIQndZZUFoY1dQZ0lDbFNMK2t5S1h5dXpMQlR3SERsMlp6bjU1cm1zcERBWVBYcHJPZlhpdGFpbjhCd1lIS2xwTFVYcFZNZ2tIQndncldreFJlbE14QXFUQXdBSHArM01FamYzY09YZlRvRmtEQWwrZXkyODRkdEdnV0FJRFhaN0pxanM5Z1c1SEF3TkFiNHBHT2oyQ2NFZ0RBMEZ4aWdBQUF2L1JBQUFFVWdTT0FBTUFJd0FaUUFzakFBUUVHUnNXZlJrQkNnQS9Nejh6RWprdk16TXdNVUVCSVFFRkpTSW1KaWN1QWljdUFqYytBek1GQXlNVEp3WUdCd1lXRmhjRkFtZitkUDcyQVpJQjN2NmpEUlVWQ2dRR0JnTkliVHNGQlZhS3BWWUJ6Y3JzcWNkWGpRNEhKa3d5QVRVQ1MvMjFBa3VOQVFjSkJRVU5EQVlkVG5OVVlJaFZKd0g3Y3dQTkFRRlVYRGRFSWdJQkFBUC85Z0FBQkVrRWpRQURBQWNBQ3dBYlFBd0xDZ29EQWdZSEJ3TjlBZ29BUHo4ekVUTVJFamt2TXpBeFFRTWpFeUVISVRjVEJ5RTNBaWpLN01vRERTSDlteUs3SGYxekhnU04rM01FamNEQS9nR21wZ0FBQnYrcS9xOEdSUVNOQUFNQUJ3QU5BQkVBRndBYkFEdEFIQUlPQVFFT0RnWWJHQmdWRWhJUUR3d0pDUk1HQmhrS0RRY0hFMzBBUHpNUk16OHpFUkk1THpNek16TVJNek1STXhFekVUTXZFVE13TVVFakV6TUJBeU1USVFFaE56TUJBd00zQ1FJaEV6TUhKd0VoQVFXbHlWekovZUxLN01vRFR2NEgvdGNWcHdGRHFydk1BUVQ4Ri83K0FRbWR0aldOL3AvK3p3SHQvcThDRUFQTyszTUVqZjFMMVFIZyszTUNDNUg5WkFIWUFyWCtJTlVmL2drQ2x3QUFCQUFLL3E4RWFnU05BQU1BQndBTkFCRUFKMEFTRUE4UEN3b0tCZzBIZlFJT0FRRU9EZ1lLQUQ4ekVUTXZFVE0vTXhJNUx6TXpFVE13TVVFakV6TUJBeU1USVFFaE56TUJBd00zQVFPN3lWekkvYXJLN01zRGxmMjYvdTRHdEFGOXJmcTJBVnYrcndJUUE4Nzdjd1NOL1V2VkFlRDdjd0lMa1AxbEFBUUFDZ0FBQlJVRWpRQURBQWNBRFFBUkFDbEFFeEFQRHdvQUN3c0tBd01LQ2dZTkIzME9CZ29BUHpNL014STVMek12RVRNUk14RXpFVE13TVVFekF5TVRBeU1USVFFaE55RUJBd00zQVFIWG1uQ2FXY3JzeXdSQS9icitRd1lCWGdGK3JQeTNBVnNEamYxK0E0TDdjd1NOL1V2VkFlRDdjd0lMa1AxbEFBUUFZQUFBQlhRRWpRQURBQWNBRFFBUkFDRkFEeEFQRHdzS0NnNEdDZzBIQndNQWZRQS9NaklSTXo4ek9TOHpNeEV6TURGVElRY2hKUU1qRXlFQklUY3pBUU1ETndHQ0FiOGkva0VDYXNyc3l3T1YvYnIrN2dhMEFYMnMrclVCWEFTTndNRDdjd1NOL1V2VkFlRDdjd0lMa1AxbEFBQUJBRDcvNkFWM0JLZ0FSQUFiUUF3QUFRRXZHQXNrSXlNNkRYNEFQek16RVRNL016TXZNekF4WlFjdUJEYzNQZ01YSGdNSEJ3NENCQ2N1QXpjM1BnTTNCdzREQndjR0hnSVhGajRDTnpjMk5pWW1KeVlPQWdjSEJoNENCU1lRZk9TL2gwQU5CUXRFZEtac2FveFFHZ2tKRTRuVC92dVBpZE9MUFE0RkRsaVJ4SG9XUzIxSkt3a0ZDUmxKZ0Z4b3M0eFpEUVlGQlJBNE9EMVVNeHdHQlE1RWtNcXZ3UU0wWkpyVmlpbGh0NUZUQWdOV2pxOWRScER1cWx3REFsbWczb1l3ZGNxWFZRUElBVUJxZ0VFbFZwUndRQUlEUDNxblpqVW5aMkpDQXdJNlhtd3dMWVd5YXk3Ly93QnNBQUFFZ2dTT0JDWUI0d0FBQUFjQ05nQUovdE1BQXYraS9xOEVmUVNOQUFNQUR3QWlRQkVMRGdnRkJBb0dEMzBDQ2dFQkNnb05DZ0EvTXhFekx4RXpQek1TRnprd01VRWpFek1CRXdFaEFRRWhBd0VoQVFFRHdzaGN5UDFwb3dFeUFTSCtKZ0VYL3ZleS9zVCszd0htL3Z2K3J3SVFBODcrYXdHVi9iSDl3Z0djL21RQ1Z3STJBQUFGQUdMK3J3VzhCSTBBQlFBSkFBMEFFUUFWQUNKQUVCRU5EUlFWZlJBU0RBa0VDQUlDQ0JJQVB6TXZFVE16TXo4L016TVJNekF4WlFNakV5TTNNd2NoTnhNREl4TWhBeU1USXdjaE53VzhidGs3Z0NFRklmMStJdTdLN01vRDBjdnJ5cTBpL0hVaXdQM3ZBVkhBd01BRHpmdHpCSTM3Y3dTTndNQUFBd0JiQUFBRVd3U05BQU1BQndBYkFCOUFEZ0FZR0EwREF3ME5CZ2NTZlFZS0FEOC9NeEk1THpNdkVUTVJNekF4UVRNREl3RURJeE1EQnc0Q0p5NENOeE16QXdZV0ZoY1dOallCL1psdm1nTE95dXpLQ0E0MWRIYzVoY0plRHpuc09Ra2VWVXM3ZG5NRFF2MStBODM3Y3dTTi9mKy9HQjRQQWdGZnU0d0JYUDZqU0dVMkF3RVNId0FBQWdBSkFBQUVDUVNOQUFNQUZ3QVVRQWtQRWhRSkNRRjlBQklBUHo4NUx6TS9NREZ6RXpNREV6YytBaGNlQWdjREl4TTJKaVluSmdZR0NjdnJ5Z2tQTTNSM09JYkNYZzQ1NnprSkhsVkxQSFZ6QkkzN2N3SUN2eGdmRGdFQ1g3dUwvcUlCWGtobE53SUNFaUFBQVFBNy8vQUZsQVNuQURRQUcwQU1HQmdkSFJFUklndCtMUUFMQUQ4eVB6TTVMek1STXk4d01VVXVBemMzUGdNWEhnTUhCeVV1QXpjWEJoWVdGd1UzTmlZbUp5WU9BZ2NIQmg0Q0Z4WTJOeGNPQWdOV2VjT0dQUTRQRDJhZ3ozZDRzbkFyRGhmOEkxMkZVaU1GdWdRWlIwRURCd1VPSzIxVlRIcFpPUXNUQ2hoRGNVNVFtRWt4Tkh1QkR3Rk9rTWQ3ZEhQSWxGSUNBMU9TdzNTWUFRTkJjWlZZQVR0a1B3UURHMUovU3dJQ05tSjlSb1ZMZWxjeEFRSWpITGNnSWd3QUFRQXkvKzBFYndTa0FDc0FGVUFKRVJRVUdRc0xKQUIrQUQ4eVB6TTVMek13TVVFZUF3Y0hEZ01uTGdNM055RUhKUWNHRmhZWEZqNENOemMyTGdJbkpnWUhKejRDQW50NHdJSTZEUkFQWjUvT2VIaXlieXdPR0FObUl2Mk5CUTRzYkZWTWVsbzRDeE1KRjBOeFRsR1hTVEExZm9RRW93RlFrY2Q0ZEhQSGxWSURBbEtTeEhTWndBRWFVWUJLQXdJM1lYMUhnMHQ3V0RFQkFTSWR1QjhpREFBQUFnQU8vK2dFQmdTTkFBY0FKZ0FiUUF3SUJRVUVKaVlkRXdzSEFIMEFQekkvTXprdk16TVJNekF4VXlFSEFTTTNBU0VURng0REJ3NERKeTRETnhjVUZoWVhNalkyTnpZbUppY255Z004Ry80eXBCY0JLLzN0NUoxTWkybzZCUVpka2JCWlVaTnhQd0xvTTFVMVBIQk5DQWd3V2phUUJJMmovbVY5QVFIKzZBSUNMVlYvVkdPUFdTa0NBaXRXZ2xvQk9FVWZBU1JSUWo1SklRSUJBQUFEQURULzdRUlFCS0VBRlFBa0FEUUFHMEFPQ3lWcUxSMXFMUzBMQUJacUFBc0FMeThyRWprdkt5c3dNVUVlQXdjSERnTW5MZ00zTno0REZ5WUdCZ2NHQmdjaE5qUW5OaVltQXhZMk5qYzJOamNoRkFZWEJoNENBcGQ1ckdvcUN3WU9YcG5OZjNtdGF5a0xCdzVmbWM1d1dvTlVGUUVEQWdJZ0FRRUNKRjNrV29KVUZBSURBZjNoQVFFQkV6QlVCSjREWFo3SmJqbDIxS0JaQXdKZW5zcHVPbmZSb0ZuREJGR0dUd1lMQmdZTEJrZUNWdnpUQWsrR1R3WUtCZ1VKQkRablV6UUFCQUFIQUFBRUNnU2dBQU1BQndBTEFDb0FJVUFQQmdjREFnSUpKaDErRWdvS0VRa1NBRDh6TXhFelB6TVNPUzh6empJd01VRUhJVGNGQnlFM0FTRTNJUUVIRGdJSEp6NEROeE0rQXhjZUFnY25OaVltSnlZT0FnTkRHZjBHR1FMUkdmMEdHZ056L0gwaEE0VCtGeHdJT21ORWl5WXdIUThGSHdwRGNaNWxkNkZPQmV3REVqbzdORWd1R1FLOGtaSHJqNC8rTDhBQ0l2bFRqM1FyV1E1Q1ZsY2lBUUZlbzNwRUF3SmpyWFVCTWxvNkFnRXRURnNBQUFNQUh2L3hBKzRFb1FBakFDY0FLd0FkUUEwbkppWXFLeXNIR1JKK0FBY0xBRDh6UHpNU09TOHpNeTh6TURGbEZqWTNGd1lHSnk0RE56YytBeGNXRmhjSEppWW5JZzRDQndjR0hnSUJCeUUzQlFjaE53SmxNMlF5QmpWc04yNmxhU3NNR3hCWWpzQjNPbkk1S1RCaU0wbHRTeTRKSEFjR0oxQUJNQm45RFJvQ3lSbjlEaG14QVJBTXZnNFBBUUpMaExOcndISzhpVWtCQVJRTnV4QVBBVEZZZEVQRE9XcFdOQUpRa1pIdWtKQUFCQUFKQUFBSHRnU2hBQU1BRlFBbkFERUFLVUFTS3pBdUxTUUpDVEV1ZlNvdENoc1NFZ0lEQUM4ek0zd3ZNeGcvTXo4ek15OHpFUkk1T1RBeFFRY2hOeE0zUGdJWEhnSUhCdzRDSnk0Q053Y0dGaFlYRmpZMk56YzJKaVluSmdZR0FRTWpBUU1qRXpNQkV3Y2pHdjNXR2hNR0NtU2laV0dKUlFjSENtT2haV0NKUnJJSUJCYy9PRHRWTkFjSUJCZy9OenBXTS83b3l1VCtpWTdzeStNQmVJMEJZWkNRQWFKSlpKdFdBZ0pabGw5Slk1bFZBZ0pYbGFwTE1sWTNBUUkxV2paS01WWTNBZ0kxV1FFSSszTURMZnpUQkkzODB3TXRBQUFDLzlvQUFBUzBCSTBBR0FBY0FCdEFDeHNjQWdFQkRnd1BmUTRLQUQ4L014STVmQzh6R000eU1ERkJKVGNGUGdJM05pWW1KeVVESXhNRkhnSUhEZ01IQnlFM0FyLzlSeDhDbmo1dFNnZ0lKVTQxL3dDcDY4b0J6MjI0YWdnR1dJdXFXeC85T3g4Qm5RR3lBUUV2V0VBNFR5d0NBZnd6QkkwQkExU2lkbUtSWHk1TnNySUFBQUwvOWYvekFvVURJd0FaQURNQUdVQUtHd0FBR1JvYUNCQXNKQUF2TTh3eU9TOHpNeEV6TURGVE16NENOelltSnlJR0J5TStBaGNlQWdjT0FnY2pCemNYSGdJSERnSW5MZ0kxTXhZV0Z6STJOelltSmlmdVNTSkJMZ1lIT2lrcVF3KzJCMWlFU0VXQlZBRUNYWWMrZ1FjUFlrRjdUd0VDWnBaTFMzNU1yUUZCTVRGWkNRWWROeDhCMEFJVkxpWXNLQUVtS0UxbEx3RUJMV0JPUzFnbUFTaFNBUUlnVWsxV2FqRUNBVFpyVURJc0FUUTJKU2tTQVFBQy8vTUFBQUo1QXhVQUJ3QUxBQmRBQ1FNSEJ3RUJCZ1VJQ2dBdnpESXlPUzh6RVRNd01VRUhJVGNCTXdNSEFRTWpFd0o1R3YyVURBR3luTW5PQWJhSnNvb0JPWlNDQWU3Ky85b0IyL3pyQXhVQUFRQUwvL01Da2dNVkFDRUFFcllmQ1FrRUF4a1JBQzh6ekRJNUx6TXdNVk1uRXlFSElRYzJOak0yRmhZSERnSW5MZ0luRnhZV056STJOelltSnlJR3o1WjRBZUVhL3JZNkhrQWdTMnc0QXdOWWpWVkhmRkFEclFRMUx6MUtDQVkyTnlJN0FWNG5BWkNSbkEwUEFUNXdTbGQvUkFJQk5tZExBaTRuQVV3N05VRUJGUUFBQVFBVy8vTUNiQU1rQUMwQUU3WVRIQndEQUF3a0FDOHp6REk1ZlM4ek1ERkJNd2NuSmdZR0J3Y0dGaFkzUGdJM05pWUhJZ1lHQnljK0FqTXlGaFlIRGdJbkxnSTNOejREQWg0aURnZFpqbDRPRHdNT0xpc2xQU2NFQnpVeklUMHdEUzRJU1dzOVNtY3lBd05ZamxOZGZqd0dCQXhTaDdBREpKWUJBelIwVzNja1F5b0JBU1U4SkRNK0FSY3JIeU0rWFRSR2RVZFZmMFlCQWxTUFdqVnJwSEk2QUFBQkFDVUFBQUs2QXhVQUJnQU1zd1VCQmdJQUw4d3lNakF4UVFjQkl3RWxOd0s2RlA1SHlBRzgvbHNhQXhWeS9WMENnZ0dTQUFBRUFBWC84d0tDQXlJQUR3QWZBQzhBUFFBWFFBb01KRHNERkJRMExCd0VBQzh6ekRJNUx4Y3pNREZsRGdJbkxnSTNQZ0lYSGdJSE5pWW1JeUlHQmdjR0ZoWXpNalkyRXc0Q0l5NENOVFEyTmhjZUFnYzJKaVlqSWdZSEJoWVdNekkyQWxNQ1hZNUtSSUZTQVFKZ2prZENnRlN0QkJveEd5QTdLUVVFR2k4Y0lEc3E0QUpaaFVJOWVWQldoa1pEZUV5MkJCUW5HaXBFQndRVUtCa3JST0ZWYVRBQkFTMWlUVkptTUFFQkxWNDlIeWdVRnk0aUh5a1VGekFCZTB4ZkxBRXFXRVpQWnpFQkFTNWZWeG9tRXpJc0d5WVVOQUFBQVFBMC8vUUNmQU1pQUM0QUU3WVNHeHNLSXdFdEFDOHp6REk1ZkM4ek1ERjNGeFkyTmpjM05pWW1JeUlHQmdjR0ZoWXpNalkyTnhjT0FpTXVBamMrQWhjZUFnY0hEZ01ISjNnS1VvRlZEUlFERENrcEp6c2xCQU1UTFNNZ09Dc0tOd2xEWkRwTmFUVURBMWlQVkYxMk5BWUZDazZCcm1vV2hnRUNLMlZXbWlGQUtTdERKQ0UzSHhZcUhTRTVXVE1CUTNSSlZvVkxBUUpZa1ZjMmJhTnROd0VCQUFBQkFKRUNpd004QXpFQUF3QUlzUU1DQUM4ek1ERkJCeUUzQXp3ZS9YTWRBekdtcGdBREFRZ0VUQU5hQnBvQUF3QVBBQnNBR1VBSkV3ME5Cd0VEQXhrSEFDOHpNM3d2R00wUk14RXpNREZCTnhjRkJTWTJOeklXRlJRR0l5SW1OeFFXTXpJMk56WW1KeUlHQWFMSDhmN3Yvc0FCYjAxSFoyeE1TR3BnSUNRbE9nVUdJaU1wTlFYWXdnSEI1RTFxQVdKSlRHbGVTeUF4TnlVZ013RTZBQVFBQ1FBQUEvc0VqUUFEQUFjQUN3QVBBQnRBREFzS0NnWVBEZ2Q5QXdJR0NnQS9Nek0vTXpNU09TOHpNREZsQnlFM0V3TWpFd0VISVRjQkJ5RTNBMVFpL1hnaTg4cnN5d0tFSXYzTElnTFlJdjE1SXIrL3Z3UE8rM01FamY0dHY3OEIwOERBQUFUL2gvNUpCRXNFVVFBU0FDUUFXd0JmQUROQUdsMWZCbklsSmhnWUQwQkJRUzVUVXc4UEJVbzNEM0loQlFkeUFDc3lLeklST1M4NUVUTXpFVE1STXhJNU9Tc3lNREZUTno0Q0Z4NENCd2NPQXljdUFqY0hCaFlXRnhZMk5qYzNOaVltSnlJR0JnTVhCZ1lIQmhZV0Z4Y2VBZ2NPQXljdUF6YytBamNYRGdJSEJoNENNeFkrQWpjMkppWW5KeTRDTno0Q0FRY2hOMW9DQ3BEVmMydTNiQVlCQ0ZtSnBGTm91Ry94QXdNc1VUSTNaVWNKQXdRclVEUTRaa1l0WENRL0J3VWNMeGl0VzZWaUJnVjNzOEZPUEplTFdBTURacGRPTXlVL0tnY0dKME5NSUNocFowb0pDQ2xISnNFNWNFa0JBajVlQTF3Wi9vd1FBc1lXZTZkVEF3SlRublFYV290ZExnSUNWSnlJRmpWTktnRUJMVk00RmpWT0xBRXNWUDYxT0JNNkxCNGVDZ0VCQWpsOWFtS0tWU1lCQVJnN2FGQmFmRXNSV3dvdVFpZ3JOaDBNQVE4bVFUTXVNQklDQWdFaVRrTkFYVU1DaVpXVkFBQUVBRHYvNXdTSkJGSUFGUUFyQUM4QU13QVhRQXd3Q2kwR0hCRUxjaWNHQjNJQUt6SXJNajgvTURGVE56NERGeDREQndjT0F5Y3VBemNIQmg0Q0Z4WStBamMzTmk0Q0p5WU9BZ1VUTXdNREV6TVRSQU1NUlhpeGVHbUpUUnNFQnhGTWVxaHRhNDVQR2ZrQ0JRTWZTME5CWTBndEN3Y0VDQ0pJUFV4clJDWUJ5cW5heHNVTXRCQUI5QlZtMEsxbUF3TmxvYnRZT0YrK20xd0RBMTJYdDNJV01uSmxRUUVDUUdsM05qUXVkVzlKQXdOSmVZa3JBaDc5NHYza0Foejk1QUFDQUNzQUFBVHFCYkFBR1FBdUFCOUFEeVlJR3hvYUFnRUJEZ3dQQW5JT0NBQS9LeklTT1M4ek14RXpQekF4UVNFM0JUSTJOamMySmlZbkpRTWpFd1VlQWdjT0FnOENOeDRDQndjR0JoWVhCeU1tSmpZM056WW1KZ0xhL21JaEFVeFBpbHNMQ1N0Z1JmN1oydlg5QWdxQXkyMEtDWGkxWXlCN09YYXpXZzhSQlFNUkdnUHhHeEFFQmhBSklsY0NXTVlCTDJkVlIySTBBZ0g3R0FXd0FRTmF0WXB4bEZrWU1SU0VBbEtpZjNVa1RVY2VIQ0ZVV1NkeVNHZzdBQU1BS3dBQUJYWUZzQUFEQUFrQURRQWdRQkFLQ0FrQ0RBc0xCd1lHQWdNQ2NnSUlBRDhyRWprdk16TVJNejgvTURGQkF5TVRJUUVoTnpNQkF3RTNBUUlkL2ZYOUJFNzlNdjZnQmVrQ0JyeitwTFlCdlFXdytsQUZzUHpDMmdKaytsQUNwTGY4cFFBQUF3QVVBQUFFUmdZQUFBTUFDUUFOQUJ4QURnc0hCZ1lDQ1FaeUF3QnlDZ0lLQUQ4ekt5c1NPUzh6TXpBeFFRRWpDUUloSnpNQkF3TTNBUUlLL3ZYckFRc0RKLzNwL3VBajN3RllnZmF1QVV3R0FQb0FCZ0QrT3YyaHZ3R2crOFlDQmFEOVd3QUFBd0FyQUFBRllBV3dBQU1BQ1FBTkFCcEFEZ1lMQndnTUJRSUpBd0p5Q2dJSUFEOHpLeklTRnprd01VRURJeE1oQVNFM013RURBVGNCQWgzOTlmMEVPUDBOL3M0S1l3SjN5UDRaNFFJbUJiRDZVQVd3L1FaMkFvVDZVQUxmWVB6QkFBQURBQlFBQUFRekJoZ0FBd0FKQUEwQUlFQVFEQXNMQndZR0Fna0djZ01CY2dvQ0NnQS9NeXNyRWprdk16TVJNekF4UVFFakNRSWhOVE1CQXdFM0FRSU8vdkhyQVE4REVQMjgvdngrQVp0Ky9yUzhBWnNHR1Bub0JoaitJdjNCbmdHaCs4WUNIM245YUFBQUFnQUovLzhFRmdTTkFCa0FIUUFXUUFrYkdnOENBUTRQZlFFQUx6OHpFVE1STXpJd01XRWhOeGNXTmpZM056WXVBaWNsTndVZUF3Y0hCZ1lFQXdNakV3R0cvdW9qK25TbFpBOElDQTAwWlZIKzRTSUJBbmUzZXpZTUJoU3cvdTV2eXV6THZ3RUJXNlJ2T2tkL1l6c0RBY0FCQTFhVnhuTTVwL3VMQkk3N2N3U05BQUVBT2YvdEJFUUVvQUFuQUJHMkdSVVFmaVFBQlFBdnpETS96RE13TVVFM0RnSW5MZ00zTno0REZ4NENGeU11QWljbURnSUhCd1llQWhjV05qWURET29VbU9PQ2Q2cG1KUXdLRGx5VnlYeUF2V3dJNmdJdFhVZFFkazh3Q1FvSEF5VlZURXR5VEFHREFZVzNXd01DWEp6SGJVOXp6cHhXQXdKanVIOUdZVFFEQWoxc2hVVlJPMzl0UmdJREwyRUFBQUlBQ2YvL0JBQUVqUUFaQURFQUtFQVRIQnNwR1FJQ0FSc21BUUVtR3dNTkRBOTlEUUF2UHpNU0Z6a3ZMeThSTXhJNU9SRXpNREZCSVRjRlBnSTNOaVltSnljREl4TUZIZ01IRGdJSEF5RTNCVDRDTnpZbUppY25Od1VYSGdJSERnTUNRdjY3SEFFSk5HVklDQWdwVGkvUHFlekxBWkpMbEhkRUJRVnFvVmF6L25xQkFRdzFaa2tLQ0NKSU1mMGZBU1FwVG54RkJBVlZpS1VCL2FZQkFSeERPamM5R3dFQi9ETUVqUUVDSDBaM1dXSjRPd1g5eGI4QkFoOUdPelZESWdJQnBnRkJCRUIwVTJLRVR5SUFBLythQUFBRUFRU05BQVFBQ1FBTkFCeEFEQTBBQmdNTURBRUhBMzBGQVFBdk16OHpFamt2RWprNU16QXhRUUVqQVRNVEF6Y3pFd01ISVRjQ2dQNFQrUUtTcGt5M0JKdjdxeUQ5ZVNBRGsveHRCSTM3Y3dPcjR2dHpBYkMxdFFBQUFRRG9CRzBDTEFZcUFBb0FDcklGZ0FBQUx4ck5NREZUTno0Q054Y0dCZ2NINkJRSUxra3lmeU0yREJjRWJZUTljMk1tVWpwMFEzb0FBQUlCQkFUU0EzMEdmQUFQQUJNQUVyVVNFd29BRFFVQUx6TjgzRExXR00wd01VRTNEZ0luTGdJbkZ3WVdGekkySnljekZ3TFRxZ2RtbEVwSGlWc0RwZ0pJT3oxZHBJZWlVUVd3QWxSaktRSUJMR0ZSQWowMUFUWkh3Y0VBQXYwbkJMNy9kZ2FKQUJjQUd3QWRRQXdBRlJVRkdSc2JDUkVSREFVQUx6TXpFVE16THpNUk14RXpNREZERnc0Q0J3WW1KZ2NHQmdjblBnSXpNaFlXTnpZMkp6Y1hCL3BpQmlkSE15cEVSQ2NtS2d0bUJTcElOQ2xFUmljbUtmT2t5dFVGbmh3dVV6WUJBU2duQXdJMUlCb3VWVFVuSndNQ056clJBZEFBQWdEY0JPY0ZIUWFLQUFZQUNnQVV0d2dIQndVQmdBUUdBQzh6R3MwNU15L05NREZUSlJjWEJ5Y0hKUk16QWR3QlFaanZ0WUswQWIvRDR2OEFCT2YyQWZRQmpZMmJBUWorK0FBQ0FCWUUyd09oQm44QUJnQUtBQmRBQ1FkQUNBZ0RCb0FDQkFBdk14ck5PVE12R3Mwd01VRVhJeWNISXlVbEV5TURBclB1dFlLejNnRkIvcjlxaWFRRjBmYU9qdmF1L3ZnQkJ3QUFBZ0RjQk9nRWp3YkhBQVlBR2dBZlFBMFJFZ2hBR2drSUNBTUdnQUlFQUM4ekdzMDVNeEV6TXhvUXpESXdNVUVYQnljSEJ5VUZKemMrQWpjMkppWWpOeDREQndZR0J3Sy81S1dQeGM0Qk53SG1qUW9XT2k4RkJDczZFaEFqVms0eEFnSlROZ1hlOVFHZm5nSDNkQUY3QWdnWkhSMFhCV2NCRFNJOE1ENDdDd0FDQU5zRTZBT2pCc3dBQmdBZUFDVkFFQWdIQnhBWURFQVVFeE1jREF3R2dBUUFMeHJOTWhFek14RXpHaEROTWpJUk16QXhRUmNISndjSEpTVVhEZ0lIQmlZbUJ3WUdCeWMrQWpNeUZoWTNOallDcmZhbGtzTFBBVVVCR2xrR0pEOHNKVUE5SlI4bUMxc0dKRDh0SkVBL0pDQW1CZExwQVk2TkFlcjZIQ2hJTGdFQkppVURBaTBhR0NkSk1DWWpBd010QUFNQUNRQUFCQllGeEFBREFBY0FDd0FiUUF3Q0Nnb0xDd2NEQXdkOUJnb0FQejh6THhFekVUTVJNekF4UVFNakV3RURJeE1oQnlFM0JCWlk2MWorbE1yc3l3TU1JdjJjSWdYRS9na0I5LzdKKzNNRWpjREFBQUFDQVFRRTBRTjhCbndBRHdBVEFCSzFFUk1BQ2cwRkFDOHpmTnd5R05iTk1ERkJOdzRDSnk0Q0p4Y0dGaGN5TmljM0Z3Y0MwNmtHWnBSS1I0cGJBcVVCU0RzOVhjeVd3TWdGcndKVllpa0NBU3hoVVFJOU5RRTJTY0FCdndBQUFnRUZCTk1EZFFjSEFBOEFKUUFvUUJFYkhCd1JKUklTRVJFSkRRVUFDUWtGRUFBL00zd3ZNeEV6RVRNWUx6TVJNeEV6THpNd01VRTNEZ0luTGdJbkZ3WVdGekkySnlNM1BnSTNOaVltSWlNM0hnTVZEZ0lIQXMrbUJtV1JTa2VJV2dHakFrZzZPMTBsb2djVlF6Z0VCQ0F3TGdzTklHSmhRQUV4U0NJRnJ3SlRZaWtDQVN0Z1VRSThNd0UwVTNVQkJSY2RGUlVJWHdFSUhEZ3hLakVYQmdELy93Q0pBb2tDOUFXOEJnY0Ixd0J6QXBqLy93Qm1BcGdDN0FXdEJnY0NNQUJ6QXBqLy93QitBb3NEQlFXdEJnY0NNUUJ6QXBqLy93Q0pBb3NDM3dXOEJnY0NNZ0J6QXBqLy93Q1lBcGdETFFXdEJnY0NNd0J6QXBqLy93QjRBb3NDOVFXNkJnY0NOQUJ6QXBqLy93Q25Bb3dDN3dXNkJnY0NOUUJ6QXBnQUFRQnMvK2dGUHdYSUFDa0FGVUFLR2hZUkEzSW1BQVVKY2dBcnpETXJ6RE13TVVFM0JnWUVKeTRFTnpjMkVqWTJGeDRDRnljdUFpY21EZ0lIQndZZUF4Y1dOallENmZJYnJ2NzduWGV6ZlVjV0RRY1Njcmo0bVp2YWR3YjBCRFp4WG1xaGNVVU5Cd2dCRzBCcVVXT1JZQUhaQXAzZ2RnTUNVbzYyeldrNGpRRUZ6bmNEQTMzZ2x3RlhoazhEQTEyY3UxazVQbzJJYjBZQ0EwbUlBQUFCQUd2LzZnVkdCY2dBTFFBYlFBMHRMQ3dGR2hZUkEzSW1CUWx5QUNzeUs4d3pFamt2TXpBeFFRTU9BaWN1QkRjM05oSTJOaGNlQWhjakxnSW5KZzRDQndjR0hnTVhGalkyTnhNaE53VVRWenU3MEYxNXZvaFNIUTRGRTNLNSs1dVUySDBMN2djL2MxUnJwWFJHRFFZSkJTVkpkVlEwYVdJcE52N2pJUUxoL2RwUVd5WUJBbENMdDlKdUtJNEJDTko1QXdOdXo1SlJka0VEQTErZ3ZWd29SWktIYlVFQ0FRNGxJZ0VmdXdBQ0FDc0FBQVVWQmJBQUd3QWZBQkszSEE4UUFuSUNIUUFBTHpJeUt6SXlNREZoSVRjRk1qNENOemMyTGdJbkpUY0ZIZ01IQndZQ0JnUURBeU1UQWVEK3R5VUJJbk8ra2xzUUJnMFlVSkZ0L3JJakFUdVc1SlErRUFVVWlOYis3MkQ5OWYzSEFVdUt1bkFzWUxPTVZBTUJ5QUVEY01MOGppMmIvdjIrWndXdytsQUZzQUFDQUc3LzZBVnBCY2dBR1FBeEFCQzNJUlFEY2kwSENYSUFLeklyTWpBeFFRY09CQ2N1QkRjM1BnUVhIZ1FGTnpZdUF5Y21EZ0lIQndZZUF4Y1dQZ0lGWFFVUFVZS3QwM3QydEg1TUdRd0ZEMU9EcmRKNGRyVi9TeG4rK3dZSUJCOUNiVkZvcG5sSkRRWUlCQjlDYlZGcnBuZElBdlV0Y05lOWpVOERBbFdRdU01bkxXL1d1NDFQQXdKVWpyZk9reTQvaklWdVF3TURYcDI4V1M0K2pZaHdSZ0lFWHFDL0FBQURBRzMvQkFWcEJjZ0FBd0FkQURVQUcwQU5KUmdEY2dBREF6RUxDWElCQWdBdk15c3lNaEV6S3pJd01XVUJCd0VCQnc0RUp5NEVOemMrQkJjZUJBVTNOaTRESnlZT0FnY0hCaDRERnhZK0FnTmpBVDZzL3NrQ25nUVBVb0NzMVh0M3RYOUtHUTBFRDFPQnJkTjZkN1YvU3hqKy9BVUlBeDVDYlZKcXAzZEpEZ1FJQXg5QmJsRnRwblpJd3Y3SWhnRTJBclVqY2RtOWprOERBbFdSdU5CcEluSFl2STVQQXdKVmpyblFpaVJBallkdlJBTURYNSs5WENNL2pvbHhSZ0lFWDZIQUFBQUJBS3NBQUFNd0JJMEFCZ0FWUUFrREJBUUZCUVo5QWdvQVB6OHpMek1STXpBeFFRTWpFd1UzSlFNd3hPcVgvcElsQWowRWpmdHpBMnA2ME0wQUFBRUFIQUFBQkFrRW9nQWdBQmRBQ2hBUURCVitBeUFnQWhJQVB6TVJNejh6TXk4d01XVUhJVGNCUGdJM05pWW1KeVlHQmdjSFBnSVhIZ01IRGdNSEJRUEpJZngwSFFJYUtsSThDQWNuVERGRmEwVU02UXVTM254TWptODlCd1E3V21reS9zYS92NlVCbnlKTVdqazBSU1FCQWpsbFFRR0J1bUlDQWloUWZWWkZkV0pXS1BrQUFmK0IvcUVFRWdTTkFCOEFHa0FMQmdBZUhnTVdEd1VDQTMwQVB6TXpMek1TT1M4ek16QXhRUUVoTnlFSEFSNENCdzRESnlZbUp6Y1dGaGNXTmpZM05pWW1KeWNCUkFGLy9kSWlBMXNhL21OcGtFUUlDM0d6NDMxbXYxdEdSWnhTYWJSNERnMUFpRjVUQWw4QmJzQ1gvb0lUZ2Job2dzdU5TUUlCT2l5ekt5OEJBbFdjYW1SK1BRRUJBQUFDLzlIK3hBUWZCSTBBQndBTEFCWkFDUVlFQzMwS0F3Y0hBZ0F2TXhFekx6OHpNekF4WlFjaE53RXpDUU1qQVFRZkl2dlVGQU03eVA3eC9oRURNUDcvNndFQnY4Q2VBL0QraVAyckE4MzZOd1hKQUFBQi85aituUVJOQkl3QUp3QVdRQWtrQ1FrQ0doTUZBbjBBUHpNdk14STVMek13TVVFbkV5RUhJUU0yTmhjeUhnSUhEZ01uSmlZbk54WVdGeFkrQWpjMkxnSW5KZ1lHQVN2TzNBTVVKUDJ2ZERaNFBXZVNXQ0lKQzJXajBIaHF3MWxZUEp0UVRJQmpQUW9HRGk1UlBUQlNRd0ZxRWdNUXpQNmZIeGtCVDRlc1huakZrRXdCQWowM3J6UXhBUUUwWG4xS05XZFROQUVCRmpJQUFRQXgvc1FFV2dTTkFBWUFEN1VCQlFVR2ZRTUFMejh6RVRNd01VRUhBU01CSlRjRVdobjg2UGdERFAxRElnU05rZnJJQlFnQndBQUNBUVVFekFPREJ0a0FEd0FuQUNsQUVSRVFFQmtoSVJVZEhCd2xGUlVBQ1EwRkFDOHp6VEl5ZkM4ek14RXpFVE1ZTHpNekVUTXdNVUUzRGdJbkxnSW5Gd1lXRnpJMkV4Y09BaU1HSmlZSEJnWUhKejRDTXpJV0ZqYzJOZ0xOcHdaa2trdEhoMWdDcFFORk96eGNZMkVFS1VnMEtVUkZKeVlwQzJjR0tVazBLRVZHSnlZckJhNENWV01zQWdFdVkxRUNQRFVCTlFGbkd5OVVOUUVvSndJRE5TRWNMbFEyS0NZQ0F6VUFBZis0L3BvQkFRQ3pBQU1BQ0xFQkFBQXZ6VEF4WlFNakV3RUJYZXhlcy8zbkFoa0FCUUE3Ly9BR253U2ZBQ2tBTFFBeEFEVUFPUUF4UUJnNE9Ua3hmUll0TFJjd0NqVTBOQ1liQVFZR0puNFJHd3NBUHpNL014RXpFUkk1THpNL016TVJNejh6RVRNd01VRUhMZ01uSmc0Q0J3Y0dIZ0lYRmo0Q054Y09BaWN1QXpjM1BnTXpIZ0lCQnlFM0V3TWpFd0VISVRjQkJ5RTNCQ1luTEZwYVdpMVNlMVl6Q2djSEJpaFlTeTFhVzFrdUJUNStmVDU1ckdrcEN3Y1BYcHJPZmtHQ2dnSVNJZjE0SWZUSzdNc0NoQ0w5eXlJQzJDTDllU0lFamNNQ0JnZ0dBUUZBYllwSU96eUFiMGNFQWdNRkJnRy9Bd2NHQWdOZG5jbHVPbmpRbjFnQkNBbjhNcisvQTg3N2N3U04vaTIvdndIVHdNQUFBQUVBUmY2eEJEMEVwQUE3QUJTM0FCVWZIelVMS1RVQUx5OHpFamt2TXpJd01VVVdQZ0kzTnpZdUFpY21EZ0lIQmg0Q0Z4WStBamMzRGdJbkxnTTNQZ01YSGdNSEJ3NEVKeVltSnpjV0ZnRlJjYU51UVE4a0J3UW1WRVpFYVVrcUJ3VUpLVXc4T1d0YlB3eGtEb0ROaEdpVVdpTUlDbFdNdTNCNXJHY2xEaDhRU0hDZHluMUxrRVJBTVdXUUFtQ2h3Vi8yT0hocFFnTUJPMlI0T3pGclhEd0NBaDgrV1RrS2dNVnRBd05UaTY5ZmFzQ1RWQUlEWHAvTGI4OXUxNytTVWdJQklSMndGUndBQWY4QS9rY0JPd0RPQUJFQUNySU5CZ0FBTDh3eU1ERjNNd01PQWljaUppYzNGaFl6TWpZMk4wL3NLUTlocG5ValF5RWdGekVaTkVJbUI4Nys5VzZzWWdFS0NNSUdDVFJVTGYvLy82bitvUVE2QkkwRUJnSmNLQUQvLy8vYS9wMEVUd1NNQkFZQ1hnSUEvLy8veWY3RUJCY0VqUVFHQWwzNEFQLy9BQk1BQUFRQUJLSUVCZ0piOXdELy93Qk4vc1FFZGdTTkJBWUNYeHdBLy84QUl2L29CRDhFb3dRR0FuWFdBUC8vQUZiLzZRUUhCYm9FQmdBYStRRC8vd0F4L3JFRUtRU2tCQVlDWSt3QS8vOEFOLy9wQkVJRnh3WUdBQndBQVAvL0FQZ0FBQU45QkkwRUJnSmFUUUQvLy84RS9rY0Iyd1E2QkFZQW5BQUEvLy8vQlA1SEFkc0VPZ1lHQUp3QUFQLy9BQ01BQUFIS0JEb0dCZ0NOQUFELy8vOTgvbDhCeWdRNkJpWUFqUUFBQVFZQXBOUUtBQXUyQVFRQ0FBQkRWZ0FyTkFELy93QWpBQUFCeWdRNkJnWUFqUUFBQUFNQUNmL21BK2NFb1FBREFCWUFNUUFwUUJRUEppWU5JeU1KR3k4TGNnUUFBQUlUQ1g0Q0NnQS9Qek1TT1M4ekt6SVJPUzh6TXhFek1ERkJBeU1URndjK0FoY1dGaGNCSnpjM0ppWW5KZ1lHQXpjV0ZqTXlOalkzTmlZbUp5YzNOelllQWdjT0FpY21KZ0Z6ZytlQzYrQUtiY0tMZnI5US9uU0xGZkVjUlNoSFdDOUNWUjVFSmpsWE5nY0lObDQxWGh4ZlM1QnpRQVFJY2J4elBuTUM3ZjBUQXUwQ0FvWEhiQU1EZUZ2K1pnTjcvQndnQVFGTGRQejh0aGdjTmxnMlAwSVlBUUdlQlFJalRIcFZkYTloQWdFZUFBSUFUUC9vQkdrRW93QVZBQ3NBRHJVY0VYNG5CZ3NBUHpNL016QXhRUWNPQXljdUF6YzNQZ01YSGdNSE56WXVBaWNtRGdJSEJ3WWVBaGNXUGdJRVhnSVBXNWZSaEg2dWFDWU1BZzlkbU5HRGZhNW5KZm9HQmdncFdVeFJlMVl6Q1FVR0J5cFpUVko3VlRFQ1ZSRjYyNmxlQXdOanA5RnhFM25acDEwREFtT2wwSkV5UElKeFNRTURRM09NUmpFOGhIUkxBd05FZFk0QUFRQldBQUFFWVFXd0FBWUFFMEFKQVFVRkJnUnlBd3h5QUNzck1oRXpNREZCQndFakFTRTNCR0VaL1FiNEF2cjlXaUVGc0pINjRRVHd3QUFBQXdBUS8rZ0VKUVlBQUFRQUdnQXZBQmxBRGlFV0IzSXJDd3R5QkFweUFBQnlBQ3NyS3pJck1qQXhRVE1EQnlNQkJ3NERKeTRETnpjK0F4Y2VBd2MzTmk0Q0p5WU9BZ2NIQmhZV0Z4WStBZ0ViN09WRXpnUUxBd3hLZmJCMFo0bE9IUVVJRUV0NHFHdHhrbEFaK0FJR0JpVlJSejFtVGpRTEhRUXJYa3BMYjBzc0JnRDYyZGtDTFJaa3lLTmdBd05obXJaWVJGMi9uVjREQTJPZnYzSVdOM2hwUkFJQ0xGQm5PTGREZTA4Q0EwQnRnUUFBQVFBMi8ra0Q5Z1JSQUNjQUdVQU1IUmtaRkFkeUJBUUFDUXR5QUNzeU1pOHJNaTh5TURGbEZqWTJOemNPQWljdUF6YzNQZ01YSGdJSEl6UW1KaWNtRGdJSEJ3WWVBZ0hqUEdKR0Q5ME9qTTV4YzZWa0tBc0ZEVmlRdzNoNHJGd0IyeVpRUDBwdFN5d0lCQVlFSTFDcUFpOVdPQUoxckYwQ0ExcVh3V2drY01pWVZRTURhcloxT1dFOUFnTSthWUEvSXpaNWFrUUFBd0EzLytnRW1RWUFBQVFBR2dBdkFCbEFEU0VFQkJZTGNpc0xCM0lCQUhJQUt5c3lLekl2TWpBeFpSTXpBU01CTno0REZ4NERCd2NPQXljdUF6Y0hCaDRDRnhZMk5qYzNOaTRDSnlZT0FnTE00ZXorOWNyOWZBTU1TMyt6YzJpSFRSd0VDQkJOZWFkcmJKRlRIUGtEQmdjblVVUlBmbFFSSEFNVU1WQTRTM0JOTHU0RkV2b0FBZ2tXWmNxa1lBTURaSjIzVjBSZHZKeGNBd1Jqb0x4eUZUWjNha1FEQTAxL1NMY3lZbEF5QVFOQWJZSUFBd0F0L2xJRVNnUlJBQk1BS1FBK0FCdEFEekFsQzNJNkdnZHlEZ1lQY2dBR2NnQXJLeklyTWlzeU1ERkJNd01PQXljbUppYzNGaFlYRmpZMk54TUJOejRERng0REJ3Y09BeWN1QXpjSEJoNENGeFkyTmpjM05pNENKeVlPQWdOOXphc1JXSTdBZUZXa1NrQTRmMEpraVZFT2hQMExBZ3hMZmJOMWFvbExHd1VJRVV4NXFHdHNrVkljK1FNR0J5ZFJSRkY4VkJBZEF4TXlVRGxMYjAwdUJEcjhGbks4aUVnQ0FUQXByQ0lvQVFOU2oxNERDUDYzRm1iSm9tQURBbUtidUZwRFhyMmJYQU1EWmFDOGNSWTFkMnBFQWdSTmZrbTNNMk5QTVFJQ1FHMkNBQUlBTXYvcEJEUUVVUUFWQUNzQUVMY2NFUXR5SndZSGNnQXJNaXN5TURGVE56NERGeDREQndjT0F5Y3VBemNIQmg0Q0Z4WStBamMzTmk0Q0p5WU9BandERFYyV3lIbHpxV3dzQ2dNT1hwZkllSEdwYkN6NEF3WUtLbGRHU25OU01Ra0RCUWdzVmtaTGMxRXhBZ29YY2N5Y1Z3TUNXNXJDYWhoeHlwbFdBd0phbU1HQUZ6aDZhVU1DQXo5cmdrRVdPSHRyUlFJQ1FHMkRBQUFELzhqK1lBUWtCRklBQkFBYUFDOEFHVUFPSVJZSGNpc0xDM0lEQm5JQ0RuSUFLeXNyTWlzeU1ERkJBeU1CTXdFSERnTW5MZ00zTno0REZ4NERCemMyTGdJbkpnNENCd2NHRmhZWEZqNENBWkxlN0FFRTBnSjhBd3hLZmJGelpZbFRJQVFLRUUxNnFXeHZrbEFhK1FNR0NDZFRSVDFuVFRRTUh3TXRYa2hLY0U0dUExejdCQVhhL2ZNVlpNaWpZUU1EWFpXeVdGRmV2cDVkQXdOam9MNXhGVFo0YWtRQ0F5MVFaampFUW5kTEF3SkNib0lBQUFNQU52NWdCRW9FVWdBRUFCb0FMd0FaUUE0aEZndHlLd3NIY2dRT2NnTUdjZ0FyS3lzeUt6SXdNVUVUTnpNQkFUYytBeGNlQXdjSERnTW5MZ00zQndZZUFoY1dOalkzTnpZdUFpY21EZ0lDV2VGQnovNzgvUG9EREVwL3RIVm9pVTRjQkFnUVRYdW9hMjJTVkJ6NkF3WUhKMUpGVUg5VUVSMERGREpST1V0eFRpNytZQVVSeWZvbUE2a1dac3FqWUFNRFk1MjRWMFJldlp0YkF3TmpuNzF5RlRaNGFrWURBazJBU3JjelkxRXhBZ0pCYm9NQUFRQTYvK3dEOVFSUkFDb0FHVUFNRXhJU0FCa0xCM0lrQUF0eUFDc3lLeklST1M4ek1ERkZMZ00zTno0REZ4NERCd2NoTndVM05pWW1KeVlPQWdjSEJoNENGeFkyTnhjR0JnSUVjckIxTXdrRURWZVB3SFZ0bTEwaERCVDgxQjhDUFFVTEhGRkdTbXhKS2dnRkNCVThaa3BNa2tJcFNzTVRBVk9Sd0cwcmJjZWJXQU1DVTR5MFpYK3RBUjFBYkVNREFqOXJnRDRxUW5sZk9BSUJMQ2FuT3k4QUF3QXUvbElFT1FSUkFCSUFLQUE5QUJ0QUR5OGtDM0k1R1FkeURRWVBjZ0FHY2dBckt6SXJNaXN5TURGQk13TU9BaWNtSmljM0ZoWVhGalkyTnhNQk56NERGeDREQndjT0F5Y3VBemNIQmg0Q0Z4WTJOamMzTmk0Q0p5WU9BZ05yenEwV2tPcWRUNXhHUURWMVBXR0pVZzZHL1IwRERFVjJyWFJyaVVzYUJRZ1FUSG1uYTJ5TVN4YjRBZ1lDSDB0RFVYdFFFUjBERXk5UE9VdHFSaWNFT3Z3TGwrSjZBZ0VwSkswZUlRRUNUSXBjQXhUK3RoWmt5S1ZoQWdOaG5MaGFSRjI4bkZ3REJHV2h2RzRWTTNaclJnSUVUWDlJdHpOaVVERUNBa0p1Z1FBQy81LytUd1JuQkVnQUF3QWxBQmxBREE0VkFRRVZId1FIY2dNR2NnQXJLekl2TXk4Uk16QXhRUUVqQVNVZUF4Y1RIZ0lYRmpZM0J3WUdKeTRESndNdUFpY21CZ2MzTmpZRVovd3ord1BOL1l3L1dENHJFTzRIRnlVZkV5Z1ROQmd2R0RwUk5pTU80UW9pTnlrUUloQU1IajBFT3ZvbUJkb05BU3hLWURUOFpobzZMQVlEQVFIQkJnVUNBanBaWnk4RGRTTkNLd0VCQXdHNUJ3a0EvLzhBcXdBQUF6TUZ0UVFHQUJXNkFBQUJBQ1QvN1FSSkJKOEFRUUFYUUFzNE9CQWlmaGtLTXdBTGNnQXJNajgvTXprdk1ERkZMZ00zUGdJM0pUWTJOelltQnlJR0J3WVdGaGNCSXdFdUFqYytBaGNlQWdjT0FnY0ZEZ0lIQmhZV0Z4WStBamMzQmdZSEJnWUhCZ1lCbUVLRmJqOEVCRUpsT2dFZkkwZ0hCVHNyTTFBSUJpQXpGQUlYOHY1QkprVXJCQVpwb0ZaUGpWVUZBelZTTC83R0dTMGdCUWNwU0NsZG4zcE9EY3NOYTFrT0hoQlc0QkVCSTBkdVRVcHVWeVN6R0VJdkxUUUJReklsUXp3YS9VOENSREJpYkVGZGYwQUJBajk1V0R0Z1RoN0hFU2t6SUM4NkdnRUVQWENYV1FGK3pGY09IQXRHUGdBQUEvL3ZBQUFEUFFTTkFBTUFCd0FMQUIxQURRZ0pDUXNLQ2dZSGZRTUNCZ29BUHpNelB4STVMek16THpNd01XVUhJVGNUQXlNVEFRY0ZOd005SXYyYkl2UEs2OG9CcUJ2OWdodS92NzhEenZ0ekJJMytwWm02bUFBQUJ2OStBQUFHRHdTTkFBTUFCd0FMQUJBQUZBQVlBRE5BR0FvTEN4Z1lEd2NHRkJNR0V3WVREUTk5QXdJQ0Z4Y05DZ0EvTXhFekVUTS9Fams1THk4Uk14RXpFVE1STXhFek1ERmxCeUUzQVFjaE53RUhJVGNIQVNFQk14TUhJVGNCQXlNVEJaQWkvWlloQWwwaC9lQWlBcXdoL1pVaWNmMVYvdlVESktNdUl2MmFJUUw0b2VtaHZyNitBZ0MrdmdIUHZyNS8rL0lFamYwM3ZMd0N5ZnR6QkkwQUFnQUpBQUFEdkFTTkFBTUFHUUFYUUFvUEVCQUJmUVVFQkFBS0FEOHlMek0vTXk4ek1ERnpFek1ESnpjWE1qWTJOelltSmljbk54Y2VBZ2NPQWlNSnkrdktLU0xaUFhCTkNRZ3FVelh5STlSdnUyMElDWlBlZXdTTiszUGt3UUVvVTBNNlRpa0NBY0FCQTFPaWVZYXJVQUFBQS8vYi84Y0V1d1M3QUJVQUt3QXZBQnRBQ3k4dkhCRitMUzBuQmd0eUFDc3lNbnd2R0Q4ek0zd3ZNREZCQnc0REp5NEROemMrQXhjZUF3YzNOaTRDSnlZT0FnY0hCaDRDRnhZK0FnRUJJd0VFVEFZT1hwalBmbm10YXlrTEJ3NWZtYzUrZUsxcUt2MEhCZ2NyV1V4UmVWUXlDUWNIQnl0YVRGSjZWREFCYWZ2THF3UTFBbWs1ZDlPZ1dRTUNYcDdLYmpwMzBhQllBZ05kbjhpbU96MkFiVVVEQTBCdmlVWTdQWUZ4U0FNQ1FuR0xBdEg3REFUMEFBUUFJZ0FBQlA0RWpRQURBQWNBQ3dBUEFCdEFEQUlEZ0E0UER3c0hmUW9HQ2dBL016OHpNeTh6R3N3eU1ERkJCeUUzRXdNakV5RURJeE1GQnlFM0E4QWkvWDRpbXNyc3l3UFV5K3JLQVNnZSszMGVBcDNBd0FIdyszTUVqZnR6QkkyV3A2Y0FBQUlBQ2Y1SEJLZ0VqUUFKQUJzQUgwQVBGeEFQY2drREJuMElDZ29DQWdVS0FEOHpFVE1STXo4ek15c3lNREZCQXlNQkF5TVRNd0VUQXpNSERnSW5KaVluTnhZV016STJOamNFcU1yay9vbU83TXZqQVhpTnZlc1NEbU9tZGlORElpTVlNQmcwUXlZSUJJMzdjd010L05NRWpmelRBeTM3dUlGd3JHRUJBUW9Kd0FZSk5GTXVBUC8vQUVBQ0RnSmxBczRHQmdBUkFBQUFBd0FnQUFBRTl3V3dBQm9BSGdBaUFDTkFFUUlCQVIwaUlTRWREZzhQSGdKeUhRaHlBQ3NyTWhFekVUa3ZNeEV6RVRNd01XRWhOd1V5TmpZM056WXVBaWNsTndVZUF3Y0hEZ0lFQXdNakV3RUhJVGNCN3Y3REpRRWZrODk3RlFvTEN6NThaLzYxSXdFdmt0V0dNeEFLRlh6RS92OVEvZmI5QVlvZS9YTWR4d0tHNElkUVZhbU5Wd01CeUFFRGNiLzJoMDZUL2JwbkJiRDZVQVd3L1lTbXBnQUFBd0FnQUFBRTl3V3dBQm9BSGdBaUFDTkFFUUlCQVIwaUlTRWREZzhQSGdKeUhRaHlBQ3NyTWhFekVUa3ZNeEV6RVRNd01XRWhOd1V5TmpZM056WXVBaWNsTndVZUF3Y0hEZ0lFQXdNakV3RUhJVGNCN3Y3REpRRWZrODk3RlFvTEN6NThaLzYxSXdFdmt0V0dNeEFLRlh6RS92OVEvZmI5QVlvZS9YTWR4d0tHNElkUVZhbU5Wd01CeUFFRGNiLzJoMDZUL2JwbkJiRDZVQVd3L1lTbXBnQUFBd0FyQUFBRUVBWUFBQU1BR2dBZUFCbEFEUjRkRmdvSGNnTUFjaEVDQ25JQUt6SXJLekxFTWpBeFFRRWpBUk1qUGdNWEhnTUhBeU1UTmlZbUp5WU9BZ0VISVRjQ0lmNzE2d0VMSDBvTlJYYW1iVmwzUkJZSmRPMTJCaFJFUVVaclN5NEJyUjM5Y3gwR0FQb0FCZ0Q4UlY2N21Wb0RBa0p4a1ZIOVNRSzZPMTQ1QVFJNFlIWUM3cWFtQUFBREFKMEFBQVVsQmJBQUF3QUhBQXNBRlVBS0F3b0xCZ2NDY2dFSWNnQXJLekl2TXpJd01VRURJeE1oQnlFM0FRY2hOd05xL1BUOUFxNGorNXNqQXhzZS9YTWVCYkQ2VUFXd3lNaitDS2FtQUFQLzVmL3RBcTRGUXdBREFCVUFHUUFkUUE0S0VRdHlHQmtaQWdJRUJBTUdjZ0FyTWk4eUVUTXZNeXN5TURGQkJ5RTNFek1EQmhZV0Z4WTJOd2NHQmljdUFqY0JCeUUzQXE0Zi9iQWUyZXV6QkFrbEp4VXJGaEVrU3laYWJpd0lBZzBlL1hNZUJEcXdzQUVKKytZak5CMEJBUVlEdWdzS0FRRlJpRlFCd2FhbUFQLy8vNk1BQUFTckJ6Y0dKZ0FsQUFBQkJ3QkVBVlFCTndBTHRnTVFCd0VCWVZZQUt6UUEvLy8vb3dBQUJNTUhOd1ltQUNVQUFBRUhBSFVCOWdFM0FBdTJBdzREQVFGaFZnQXJOQUQvLy8rakFBQUVxd2MzQmlZQUpRQUFBUWNBbmdEeUFUY0FDN1lERVFjQkFXeFdBQ3MwQVAvLy82TUFBQVRGQnlvR0pnQWxBQUFCQndDbEFRRUJOd0FMdGdNY0F3RUJhMVlBS3pRQS8vLy9vd0FBQktzSEJnWW1BQ1VBQUFFSEFHb0JIZ0UzQUEyM0JBTWpCd0VCZUZZQUt6UTBBUC8vLzZNQUFBU3JCNUlHSmdBbEFBQUJCd0NqQVkwQmJBQU50d1FER1FjQkFVZFdBQ3MwTkFELy8vK2pBQUFFMkFleEJpWUFKUUFBQVFjQ053RitBUmNBRXJZRkJBTWJCd0VBdVAreXNGWUFLelEwTlAvL0FGLytOd1VLQmNjR0pnQW5BQUFCQndCNUFiei8rZ0FMdGdFb0JRQUFDbFlBS3pRQS8vOEFKZ0FBQkx3SFBnWW1BQ2tBQUFFSEFFUUJJUUUrQUF1MkJCSUhBUUZzVmdBck5BRC8vd0FtQUFBRXZBYytCaVlBS1FBQUFRY0FkUUhEQVQ0QUM3WUVFQWNCQVd4V0FDczBBUC8vQUNZQUFBUzhCejRHSmdBcEFBQUJCd0NlQUw4QlBnQUx0Z1FUQndFQmQxWUFLelFBLy84QUpnQUFCTHdIRFFZbUFDa0FBQUVIQUdvQTZ3RStBQTIzQlFRbEJ3RUJnMVlBS3pRMEFQLy9BRGNBQUFJeUJ6NEdKZ0F0QUFBQkJ3QkUvOWtCUGdBTHRnRUdBd0VCYkZZQUt6UUEvLzhBTndBQUEwZ0hQZ1ltQUMwQUFBRUhBSFVBZXdFK0FBdTJBUVFEQVFGc1ZnQXJOQUQvL3dBM0FBQURGd2MrQmlZQUxRQUFBUWNBbnY5M0FUNEFDN1lCQndNQkFYZFdBQ3MwQVAvL0FEY0FBQU13QncwR0pnQXRBQUFCQndCcS82TUJQZ0FOdHdJQkdRTUJBWU5XQUNzME5BRC8vd0FtQUFBRmhnY3FCaVlBTWdBQUFRY0FwUUVzQVRjQUM3WUJHQVlCQVd0V0FDczBBUC8vQUdMLzZRVWlCemdHSmdBekFBQUJCd0JFQVd3Qk9BQUx0Z0l1RVFFQlQxWUFLelFBLy84QVl2L3BCU0lIT0FZbUFETUFBQUVIQUhVQ0RRRTRBQXUyQWl3UkFRRlBWZ0FyTkFELy93QmkvK2tGSWdjNEJpWUFNd0FBQVFjQW5nRUtBVGdBQzdZQ0x4RUJBVnBXQUNzMEFQLy9BR0wvNlFVaUJ5d0dKZ0F6QUFBQkJ3Q2xBUmdCT1FBTHRnSTZFUUVCV1ZZQUt6UUEvLzhBWXYvcEJTSUhCd1ltQURNQUFBRUhBR29CTlFFNEFBMjNBd0pCRVFFQlpsWUFLelEwQVAvL0FGai82QVV4QnpjR0pnQTVBQUFCQndCRUFVa0JOd0FMdGdFWUFBRUJZVllBS3pRQS8vOEFXUC9vQlRFSE53WW1BRGtBQUFFSEFIVUI2Z0UzQUF1MkFSWUxBUUZoVmdBck5BRC8vd0JZLytnRk1RYzNCaVlBT1FBQUFRY0FuZ0RtQVRjQUM3WUJHUUFCQVd4V0FDczBBUC8vQUZqLzZBVXhCd1lHSmdBNUFBQUJCd0JxQVJJQk53QU50d0lCS3dBQkFYaFdBQ3MwTkFELy93Q2hBQUFGVUFjMkJpWUFQUUFBQVFjQWRRSEJBVFlBQzdZQkNRSUJBV0JXQUNzMEFQLy9BQnovNlFQUkJnQUdKZ0JGQUFBQkJ3QkVBS3dBQUFBTHRnSTlEd0VCakZZQUt6UUEvLzhBSFAvcEJCc0dBQVltQUVVQUFBRUhBSFVCVGdBQUFBdTJBanNQQVFHTVZnQXJOQUQvL3dBYy8ra0Q2d1lBQmlZQVJRQUFBUVlBbmtzQUFBdTJBajRQQVFHWFZnQXJOQUQvL3dBYy8ra0VIUVgwQmlZQVJRQUFBUVlBcFZrQkFBdTJBa2tQQVFHV1ZnQXJOQUQvL3dBYy8ra0VCQVhQQmlZQVJRQUFBUVlBYW5jQUFBMjNBd0pRRHdFQm8xWUFLelEwQVAvL0FCei82UVBSQmxzR0pnQkZBQUFCQndDakFPWUFOUUFOdHdNQ1JnOEJBWEpXQUNzME5BRC8vd0FjLytrRU1BWjZCaVlBUlFBQUFRY0NOd0RXLytBQUVyWUVBd0pJRHdBQXVQL2RzRllBS3pRME5QLy9BRGYrTndQbUJGRUdKZ0JIQUFBQkJ3QjVBVUgvK2dBTHRnRW9DUUFBQ2xZQUt6UUEvLzhBT3YvckEvQUdBQVltQUVrQUFBRUhBRVFBbGdBQUFBdTJBUzRMQVFHTVZnQXJOQUQvL3dBNi8rc0VCUVlBQmlZQVNRQUFBUWNBZFFFNEFBQUFDN1lCTEFzQkFZeFdBQ3MwQVAvL0FEci82d1B3QmdBR0pnQkpBQUFCQmdDZU5BQUFDN1lCTHdzQkFaZFdBQ3MwQVAvL0FEci82d1B3QmM4R0pnQkpBQUFCQmdCcVlBQUFEYmNDQVVFTEFRR2pWZ0FyTkRRQS8vOEFJd0FBQWVRRjl3WW1BSTBBQUFFR0FFU0w5d0FMdGdFR0F3RUJubFlBS3pRQS8vOEFJd0FBQXZvRjl3WW1BSTBBQUFFR0FIVXQ5d0FMdGdFRUF3RUJubFlBS3pRQS8vOEFJd0FBQXNnRjl3WW1BSTBBQUFFSEFKNy9LUC8zQUF1MkFRY0RBUUdwVmdBck5BRC8vd0FqQUFBQzRnWEdCaVlBalFBQUFRY0FhdjlWLy9jQURiY0NBUmtEQVFHMVZnQXJORFFBLy84QURRQUFCQ2NGOUFZbUFGSUFBQUVHQUtWakFRQUx0Z0lxQXdFQnFsWUFLelFBLy84QU9QL3BCQjRHQUFZbUFGTUFBQUVIQUVRQXF3QUFBQXUyQWk0R0FRR01WZ0FyTkFELy93QTQvK2tFSGdZQUJpWUFVd0FBQVFjQWRRRk5BQUFBQzdZQ0xBWUJBWXhXQUNzMEFQLy9BRGovNlFRZUJnQUdKZ0JUQUFBQkJnQ2VTUUFBQzdZQ0x3WUJBWmRXQUNzMEFQLy9BRGovNlFRZUJmUUdKZ0JUQUFBQkJnQ2xXQUVBQzdZQ09nWUJBWlpXQUNzMEFQLy9BRGovNlFRZUJjOEdKZ0JUQUFBQkJnQnFkUUFBRGJjREFrRUdBUUdqVmdBck5EUUEvLzhBU3Yvb0JDOEdBQVltQUZrQUFBRUhBRVFBc2dBQUFBdTJBaDRSQVFHZ1ZnQXJOQUQvL3dCSy8rZ0VMd1lBQmlZQVdRQUFBUWNBZFFGVUFBQUFDN1lDSEJFQkFhQldBQ3MwQVAvL0FFci82QVF2QmdBR0pnQlpBQUFCQmdDZVVBQUFDN1lDSHhFQkFhdFdBQ3MwQVAvL0FFci82QVF2QmM4R0pnQlpBQUFCQmdCcWZBQUFEYmNEQWpFUkFRRzNWZ0FyTkRRQS8vLy92UDVIQkJrR0FBWW1BRjBBQUFFSEFIVUJIZ0FBQUF1MkFoa0JBUUdnVmdBck5BRC8vLys4L2tjRUdRWFBCaVlBWFFBQUFRWUFha2NBQUEyM0F3SXVBUUVCdDFZQUt6UTBBUC8vLzZNQUFBU3JCdU1HSmdBbEFBQUJCd0J3QVBrQk9RQUx0Z01RQXdFQnBsWUFLelFBLy84QUhQL3BCQU1GclFZbUFFVUFBQUVHQUhCU0F3QUx0Z0k5RHdFQjBWWUFLelFBLy8vL293QUFCS3NISHdZbUFDVUFBQUVIQUtFQktnRTNBQXUyQXhNSEFRRlRWZ0FyTkFELy93QWMvK2tEOVFYb0JpWUFSUUFBQVFjQW9RQ0RBQUFBQzdZQ1FBOEJBWDVXQUNzMEFBQUUvNlArVlFTckJiQUFCQUFKQUEwQUl3QXJRQlVOREF3REZoMEdBQUlIQXdKeURnOFBCUVVDQ0hJQUt6SVJNeEV6S3pJU09Ua3ZNeEk1THpNd01VRUJJUUV6RXdNM013RURCeUUzQVJjT0FnY0dGaGN5TmpjWEJnWWpJaVkzUGdJREtQMkYvdllERUt0VXpnK2ZBUm15SS96K0l3TUZkU05TUGdZREdCNFhMUlVNSWs0b1Zta0NBVTUyQk9IN0h3V3crbEFFL0xUNlVBSWN4OGYrSHowWk9rb3ZIU0FCRGdtTkZSUnBWMHB3VUFBQUF3QWMvbFVEMFFSUUFCc0FPZ0JRQUN0QUZ4NDZPZzlEU2c5eUp6RUxjanM4UEJrS2Nna0ZEd2R5QUNzeU1pc3lFVE1yTWlzeUVqa3ZNekF4WlJNMkppWW5KZ1lHQndjK0F4Y2VBZ2NEQmdZWEJ3Y21OQk1ISnlJT0FnY0dGaFlYRmpZMk54Y09BeWN1QWpjK0F6TVRGdzRDQndZV0Z6STJOeGNHQmlNaUpqYytBZ0tJVWdZYVJUZ3lXRDBLNndaWmlaOU1icXBaQzA4SkJ4TUM2UTkxR0p3d1pWZzhCd1VmUUN3N2MxVVFQeFpQYUh0QldwUldCUVZobWJaWnAzVWpVajRHQXhnZUZ5MFVEU0pPS1ZWcEFRSk9kZGtDQnpSVU1RRUJJMFF4QVZWL1V5Y0JBbHFrZFA0ZU9YYzNFZ0UxYndIdmxRRVNMRXM0TFVFbUFRRXdXVHBzUFdaS0tBRUNUNDVkYVkxVEpQMm9QUms2U2k4ZElBRU9DWTBWRkdsWFNuQlEvLzhBWC8vb0JRb0hTd1ltQUNjQUFBRUhBSFVCL0FGTEFBdTJBU2dRQVFGdFZnQXJOQUQvL3dBMy8rb0Q4Z1lBQmlZQVJ3QUFBUWNBZFFFbEFBQUFDN1lCS0JRQkFZeFdBQ3MwQVAvL0FGLy82QVVLQjBzR0pnQW5BQUFCQndDZUFQZ0JTd0FMdGdFckVBRUJlRllBS3pRQS8vOEFOLy9xQStZR0FBWW1BRWNBQUFFR0FKNGlBQUFMdGdFckZBRUJsMVlBS3pRQS8vOEFYLy9vQlFvSEtnWW1BQ2NBQUFFSEFLSUIxd0ZUQUF1MkFURVFBUUdDVmdBck5BRC8vd0EzLytvRDVnWGZCaVlBUndBQUFRY0FvZ0VBQUFnQUM3WUJNUlFCQWFGV0FDczBBUC8vQUYvLzZBVUtCMDRHSmdBbkFBQUJCd0NmQVE0QlN3QUx0Z0V1RUFFQmRsWUFLelFBLy84QU4vL3FBL1FHQXdZbUFFY0FBQUVHQUo4M0FBQUx0Z0V1RkFFQmxWWUFLelFBLy84QUpnQUFCTmtIUVFZbUFDZ0FBQUVIQUo4QWxRRStBQXUyQWlVZUFRRjFWZ0FyTkFELy93QTQvK2dGendZQ0JDWUFTQUFBQVFjQnlnVERCUUlBQzdZRE9RRUJBQUJXQUNzMEFQLy9BQ1lBQUFTOEJ1b0dKZ0FwQUFBQkJ3QndBTVlCUUFBTHRnUVNCd0VCc1ZZQUt6UUEvLzhBT3YvckEvQUZyUVltQUVrQUFBRUdBSEE3QXdBTHRnRXVDd0VCMFZZQUt6UUEvLzhBSmdBQUJMd0hKZ1ltQUNrQUFBRUhBS0VBK0FFK0FBdTJCQlVIQVFGZVZnQXJOQUQvL3dBNi8rc0Q4QVhvQmlZQVNRQUFBUVlBb1d3QUFBdTJBVEVMQVFGK1ZnQXJOQUQvL3dBbUFBQUV2QWNkQmlZQUtRQUFBUWNBb2dHZUFVWUFDN1lFR1FjQkFZRldBQ3MwQVAvL0FEci82d1B3QmVBR0pnQkpBQUFCQndDaUFSTUFDUUFMdGdFMUN3RUJvVllBS3pRQUFBVUFKdjVWQkx3RnNBQURBQWNBQ3dBUEFDVUFLVUFVQ2dzTEdCOE9EdzhIQW5JUUVSRURBZ0lHQ0hJQUt6SVJNeklSTXlzeUVUTXZNemt2TXpBeFpRY2hOd0VESXhNQkJ5RTNBUWNoTndFWERnSUhCaFlYTWpZM0Z3WUdJeUltTno0Q0ErZ2ovUkVpQVNIOTl2MEMweUw5Y2lNRFV5UDlGaVFCQzNVa1VUNEdBeGdlRnkwVURDSk5LRlpwQWdGT2RjZkh4d1RwK2xBRnNQMmd4TVFDWU1qSStvczlHVHBLTHgwZ0FRNEpqUlVVYVZkS2NGQUFBZ0E2L25JRDhBUlJBQ3NBUVFBbFFCTVNFeE1MTkRzT2Noa0xCM0lzTFNRa0FBdHlBQ3N5RVRrNUt6SXJNaEk1THpNd01VVXVBemMzUGdNWEhnTUhCeUUzQlRjMkppWW5KZzRDQndjR0hnSVhGalkzRnc0Q054Y09BZ2NHRmhjeU5qY1hCZ1lqSmlZM1BnSUI5bStyY0RJSUJBdFVqY0IyY1p4Y0h3c08vTlFjQWowRUNSOVNSVXRyUmljSUJBWVNORnhFVllzNWRDNkhuUmgwSTFJK0JnTVlIaGN0RlF3aVRpaFdhUUlCVG5ZVUFsT1B1Mm9wYmN1ZlhBTUNXcFc4WldldEFSVS9jRWdDQWtKd2d6NG9PM1JmT3dJQ1N6eDdSVm9yYlQwWU9rb3dIU0FCRHdpTUZoUUJhVlpLY0ZELy93QW1BQUFFdkFkQkJpWUFLUUFBQVFjQW53RFZBVDRBQzdZRUZnY0JBWFZXQUNzMEFQLy9BRHIvNndRSEJnTUdKZ0JKQUFBQkJnQ2ZTZ0FBQzdZQk1nc0JBWlZXQUNzMEFQLy9BR2IvNndVWEIwc0dKZ0FyQUFBQkJ3Q2VBUG9CU3dBTHRnRXZFQUVCZUZZQUt6UUEvLy8vK2Y1UkJFSUdBQVltQUVzQUFBRUdBSjVCQUFBTHRnTkNHZ0VCbDFZQUt6UUEvLzhBWnYvckJSY0hNd1ltQUNzQUFBRUhBS0VCTWdGTEFBdTJBVEVRQVFGZlZnQXJOQUQvLy8vNS9sRUVRZ1hvQmlZQVN3QUFBUVlBb1hvQUFBdTJBMFFhQVFGK1ZnQXJOQUQvL3dCbS8rc0ZGd2NxQmlZQUt3QUFBUWNBb2dIWUFWTUFDN1lCTlJBQkFZSldBQ3MwQVAvLy8vbitVUVJDQmQ4RUpnQkxBQUFCQndDaUFTRUFDQUFMdGdOSUdnRUJvVllBS3pRQS8vOEFadjMyQlJjRnh3WW1BQ3NBQUFFSEFjb0JtUDZTQUE2MEFUVUZBUUc0LzVpd1ZnQXJOUC8vLy9uK1VRUkNCcVlFSmdCTEFBQUJCd0pFQVR3QWZBQUx0Z00vR2dFQm1GWUFLelFBLy84QUpnQUFCWVVIUGdZbUFDd0FBQUVIQUo0QkZnRStBQXUyQXc4TEFRRjNWZ0FyTkFELy93QU5BQUFEOWdkZkJpWUFUQUFBQVFjQW5nQldBVjhBQzdZQ0hnTUJBU1pXQUNzMEFQLy9BRGNBQUFOSkJ6RUdKZ0F0QUFBQkJ3Q2wvNFVCUGdBTHRnRVNBd0VCZGxZQUt6UUEvLzhBRXdBQUF2c0Y2d1ltQUkwQUFBRUhBS1gvTi8vNEFBdTJBUklEQVFHb1ZnQXJOQUQvL3dBM0FBQURMZ2JxQmlZQUxRQUFBUWNBY1A5OUFVQUFDN1lCQmdNQkFiRldBQ3MwQVAvL0FDTUFBQUxnQmFRR0pnQ05BQUFCQndCdy95Ly8rZ0FMdGdFR0F3RUI0MVlBS3pRQS8vOEFOd0FBQXlFSEpnWW1BQzBBQUFFSEFLSC9yd0UrQUF1MkFRa0RBUUZlVmdBck5BRC8vd0FqQUFBQzB3WGZCaVlBalFBQUFRY0FvZjloLy9jQUM3WUJDUU1CQVpCV0FDczBBUC8vLzQ3K1d3SXBCYkFHSmdBdEFBQUJCZ0NrNWdZQUM3WUJCUUlBQUFCV0FDczBBUC8vLzNYK1ZRSUtCZGdHSmdCTkFBQUJCZ0NrelFBQUM3WUNFUUlBQUFCV0FDczBBUC8vQURjQUFBSldCeDBHSmdBdEFBQUJCd0NpQUZZQlJnQUx0Z0VOQXdFQmdWWUFLelFBLy84QU4vL29CbzhGc0FRbUFDMEFBQUFIQUM0Q01nQUEvLzhBSVA1R0Evc0YyQVFtQUUwQUFBQUhBRTRCK2dBQS8vOEFCUC9vQlRvSE5RWW1BQzRBQUFFSEFKNEJtZ0UxQUF1MkFSY0JBUUZxVmdBck5BRC8vLzhFL2tjQ3h3WGVCaVlBbkFBQUFRY0FudjhuLzk0QUM3WUJGUUFCQVlKV0FDczBBUC8vQUNiK1NRVnlCYkFFSmdBdkFBQUJCd0hLQVY3KzVRQU90QU1YQWdFQXVQL25zRllBS3pULy93QVIvalFFVGdZQUJpWUFUd0FBQVFjQnlnRDAvdEFBRHJRREZ3SUJBYmovMUxCV0FDczAvLzhBSmdBQUE4QUhNd1ltQURBQUFBRUhBSFVBYkFFekFBdTJBZ2dIQVFGY1ZnQXJOQUQvL3dBZ0FBQURPUWVRQmlZQVVBQUFBUWNBZFFCc0FaQUFDN1lCQkFNQkFYRldBQ3MwQVAvL0FDYitCZ1BBQmJBRUpnQXdBQUFCQndIS0FTaitvZ0FPdEFJUkFnRUJ1UCtYc0ZZQUt6VC8vLyttL2dZQ0ZnWUFCQ1lBVUFBQUFRY0J5di9WL3FJQURyUUJEUUlCQWJqL2w3QldBQ3MwLy84QUpnQUFBOWNGc1FZbUFEQUFBQUVIQWNvQ3l3U3hBQXUyQWhFSEFBQUJWZ0FyTkFELy93QWdBQUFEYWdZQ0JDWUFVQUFBQVFjQnlnSmVCUUlBQzdZQkRRTUFBQUpXQUNzMEFQLy9BQ1lBQUFQQUJiQUdKZ0F3QUFBQUJ3Q2lBVjc5MFAvL0FDQUFBQUwwQmdBRUpnQlFBQUFBQndDaUFQVDlyZi8vQUNZQUFBV0dCemNHSmdBeUFBQUJCd0IxQWlBQk53QUx0Z0VLQmdFQllWWUFLelFBLy84QURRQUFCQ1VHQUFZbUFGSUFBQUVIQUhVQldBQUFBQXUyQWh3REFRR2dWZ0FyTkFELy93QW0vZ0lGaGdXd0JDWUFNZ0FBQVFjQnlnR1YvcDRBRHJRQkV3VUJBYmovbDdCV0FDczAvLzhBRGY0R0EvSUVVUVFtQUZJQUFBRUhBY29CQVA2aUFBNjBBaVVDQVFHNC81ZXdWZ0FyTlAvL0FDWUFBQVdHQnpvR0pnQXlBQUFCQndDZkFUSUJOd0FMdGdFUUNRRUJhbFlBS3pRQS8vOEFEUUFBQkNjR0F3WW1BRklBQUFFR0FKOXFBQUFMdGdJaUF3RUJxVllBS3pRQS8vOEFEUUFBQS9JR0F3WW1BRklBQUFFSEFjb0FQd1VEQUF1MkFpQURBUUU2VmdBck5BRC8vd0JpLytrRklnYmxCaVlBTXdBQUFRY0FjQUVRQVRzQUM3WUNMaEVCQVpSV0FDczBBUC8vQURqLzZRUWVCYTBHSmdCVEFBQUJCZ0J3VUFNQUM3WUNMZ1lCQWRGV0FDczBBUC8vQUdMLzZRVWlCeUFHSmdBekFBQUJCd0NoQVVFQk9BQUx0Z0l4RVFFQlFWWUFLelFBLy84QU9QL3BCQjRGNkFZbUFGTUFBQUVIQUtFQWdnQUFBQXUyQWpFR0FRRitWZ0FyTkFELy93QmkvK2tGZGdjM0JpWUFNd0FBQVFjQXBnR0xBVGdBRGJjREFpd1JBUUZGVmdBck5EUUEvLzhBT1AvcEJMVUYvd1ltQUZNQUFBRUhBS1lBeWdBQUFBMjNBd0lzQmdFQmdsWUFLelEwQVAvL0FDWUFBQVRWQnpjR0pnQTJBQUFCQndCMUFhb0JOd0FMdGdJZUFBRUJZVllBS3pRQS8vOEFFUUFBQTRVR0FBWW1BRllBQUFFSEFIVUF1QUFBQUF1MkFoY0RBUUdnVmdBck5BRC8vd0FtL2dZRTFRV3dCQ1lBTmdBQUFRY0J5Z0VwL3FJQURyUUNKeGdCQWJqL2w3QldBQ3MwLy8vL24vNEhBdklFVXdRbUFGWUFBQUVIQWNyL3p2NmpBQTYwQWlBQ0FRRzQvNWl3VmdBck5QLy9BQ1lBQUFUVkJ6b0dKZ0EyQUFBQkJ3Q2ZBTHdCTndBTHRnSWtBQUVCYWxZQUt6UUEvLzhBRVFBQUE0Y0dBd1ltQUZZQUFBRUdBSi9LQUFBTHRnSWRBd0VCcVZZQUt6UUEvLzhBSnYvcUJMMEhPQVltQURjQUFBRUhBSFVCeXdFNEFBdTJBVG9QQVFGUFZnQXJOQUQvL3dBYi8rc0QrZ1lBQmlZQVZ3QUFBUWNBZFFFdEFBQUFDN1lCTmc0QkFZeFdBQ3MwQVAvL0FDYi82Z1M5QnpnR0pnQTNBQUFCQndDZUFNY0JPQUFMdGdFOUR3RUJXbFlBS3pRQS8vOEFHLy9yQThvR0FBWW1BRmNBQUFFR0FKNHFBQUFMdGdFNURnRUJsMVlBS3pRQS8vOEFKdjQ4QkwwRnhnWW1BRGNBQUFFSEFIa0JrLy8vQUF1MkFUb3JBQUFUVmdBck5BRC8vd0FiL2pNRHdRUlBCaVlBVndBQUFRY0FlUUU5Ly9ZQUM3WUJOaWtBQUFwV0FDczBBUC8vQUNiOSt3UzlCY1lHSmdBM0FBQUJCd0hLQVVUK2x3QU90QUZES3dFQnVQK2dzRllBS3pULy93QWIvZklEd1FSUEJpWUFWd0FBQVFjQnlnRHQvbzRBRHJRQlB5a0JBYmovbDdCV0FDczAvLzhBSnYvcUJMMEhPd1ltQURjQUFBRUhBSjhBM0FFNEFBdTJBVUFQQVFGWVZnQXJOQUQvL3dBYi8rc0QvQVlEQmlZQVZ3QUFBUVlBbno4QUFBdTJBVHdPQVFHVlZnQXJOQUQvL3dDZC9nQUZKUVd3QmlZQU9BQUFBUWNCeWdFei9wd0FEclFDRVFJQkFiai9qYkJXQUNzMC8vOEFQLzM4QXE0RlF3WW1BRmdBQUFFSEFjb0FndjZZQUE2MEFoOFJBUUc0LzZHd1ZnQXJOUC8vQUozK1FRVWxCYkFHSmdBNEFBQUJCd0I1QVlNQUJBQUx0Z0lJQWdFQUFGWUFLelFBLy84QVAvNDlBcTRGUXdZbUFGZ0FBQUVIQUhrQTB3QUFBQXUyQWhZUkFBQVVWZ0FyTkFELy93Q2RBQUFGSlFjNUJpWUFPQUFBQVFjQW53RE5BVFlBQzdZQ0RnTUJBV2xXQUNzMEFQLy9BRC8vN1FPL0JuNEVKZ0JZQUFBQkJ3SEtBck1GZmdBT3RBSWFCQUVBdVArb3NGWUFLelQvL3dCWS8rZ0ZNUWNxQmlZQU9RQUFBUWNBcFFEMEFUY0FDN1lCSkFzQkFXdFdBQ3MwQVAvL0FFci82QVF2QmZRR0pnQlpBQUFCQmdDbFh3RUFDN1lDS2hFQkFhcFdBQ3MwQVAvL0FGai82QVV4QnVNR0pnQTVBQUFCQndCd0FPMEJPUUFMdGdFWUN3RUJwbFlBS3pRQS8vOEFTdi9vQkM4RnJRWW1BRmtBQUFFR0FIQlhBd0FMdGdJZUVRRUI1VllBS3pRQS8vOEFXUC9vQlRFSEh3WW1BRGtBQUFFSEFLRUJIZ0UzQUF1MkFSc0FBUUZUVmdBck5BRC8vd0JLLytnRUx3WG9CaVlBV1FBQUFRY0FvUUNJQUFBQUM3WUNJUkVCQVpKV0FDczBBUC8vQUZqLzZBVXhCNUlHSmdBNUFBQUJCd0NqQVlFQmJBQU50d0lCSVFBQkFVZFdBQ3MwTkFELy93QksvK2dFTHdaYkJpWUFXUUFBQVFjQW93RHJBRFVBRGJjREFpY1JBUUdHVmdBck5EUUEvLzhBV1Avb0JWTUhOZ1ltQURrQUFBRUhBS1lCYUFFM0FBMjNBZ0VXQUFFQlYxWUFLelEwQVAvL0FFci82QVM4QmY4R0pnQlpBQUFCQndDbUFORUFBQUFOdHdNQ0hCRUJBWlpXQUNzME5BQUFBZ0JZL293Rk1RV3dBQlVBS3dBYlFBMGVKUUVMQW5JWEZoRVJCZ2x5QUNzeUVqazVLekl2TXpBeFFUTUREZ0luTGdJM0V6TURCaFlXRnhZMk5qY0RGdzRDQndZV0Z6STJOeGNHQmlNbUpqYytBZ1E4OWFZWHBmK2VsZHByRXFiMHBRb21hbHRoajFnT3NYVWpVejBGQkJnZUZ5d1ZEU05OS0ZacEFnRk9kUVd3L0RXZDVub0RBMzNobHdQTi9ESlVoMUlDQTB1TVhQNlFQUms2U2k4ZElBRU9DWTBWRlFGcFZrdHZVUUFBQXdCSy9sVUVMd1E2QUFRQUd3QXhBQ0ZBRVNRckQzSUJFUVp5SEIwZEJBUVlDd3R5QUNzeU1oRXpFVE1yTWlzeU1ERkJFek1ESXhNM0RnTW5MZ00zRXpNREJoNENGeFkyTmdNWERnSUhCaFlYTWpZM0Z3WUdJeUltTno0Q0FyYU43THplWTA0TVFHNmtiMWw1UmhjSWRldDJBd1ljTnkxZ2dVc0NkU05TUHdVRUdSMFhMUlVOSTAwcFZtZ0JBVTkxQVFzREwvdkdBZUFEWXJlUVVnTURRWENRVUFLNy9VSW5TRG9qQWdOUmp2NnhQUms2U2k4ZElBRU9DWTBWRkdsWFNuQlEvLzhBdFFBQUJ6b0hOd1ltQURzQUFBRUhBSjRCd1FFM0FBdTJCQmtWQVFGc1ZnQXJOQUQvL3dCNUFBQUY5QVlBQmlZQVd3QUFBUWNBbmdFRUFBQUFDN1lFR1JVQkFhdFdBQ3MwQVAvL0FLRUFBQVZRQnpZR0pnQTlBQUFCQndDZUFMMEJOZ0FMdGdFTUFnRUJhMVlBS3pRQS8vLy92UDVIQkJrR0FBWW1BRjBBQUFFR0FKNGJBQUFMdGdJY0FRRUJxMVlBS3pRQS8vOEFvUUFBQlZBSEJRWW1BRDBBQUFFSEFHb0E2UUUyQUEyM0FnRWVBZ0VCZDFZQUt6UTBBUC8vLytVQUFBVHJCemNHSmdBK0FBQUJCd0IxQWIwQk53QUx0Z01PRFFFQllWWUFLelFBLy8vLzVnQUFBKzhHQUFZbUFGNEFBQUVIQUhVQklnQUFBQXUyQXc0TkFRR2dWZ0FyTkFELy8vL2xBQUFFNndjV0JpWUFQZ0FBQVFjQW9nR1lBVDhBQzdZREZ3Z0JBWFpXQUNzMEFQLy8vK1lBQUFQa0JkOEdKZ0JlQUFBQkJ3Q2lBUDBBQ0FBTHRnTVhDQUVCdFZZQUt6UUEvLy8vNVFBQUJPc0hPZ1ltQUQ0QUFBRUhBSjhBendFM0FBdTJBeFFJQVFGcVZnQXJOQUQvLy8vbUFBQUQ4UVlEQmlZQVhnQUFBUVlBbnpRQUFBdTJBeFFJQVFHcFZnQXJOQUQvLy8rTkFBQUhid2RDQmlZQWdRQUFBUWNBZFFMd0FVSUFDN1lHR1FNQkFXeFdBQ3MwQVAvL0FBNy82Z1pmQmdFR0pnQ0dBQUFCQndCMUFtNEFBUUFMdGdOZkR3RUJqVllBS3pRQS8vOEFGditpQlpBSGdBWW1BSU1BQUFFSEFIVUNJd0dBQUF1MkF6UVdBUUdXVmdBck5BRC8vd0FxLzNVRU1BWDlCaVlBaVFBQUFRY0FkUUUwLy8wQUM3WURNQW9CQVl0V0FDczBBUC8vLzViLy93UVdCSTBHSmdKQUFBQUFCd0kyL3dYL2EvLy8vNWIvL3dRV0JJMEdKZ0pBQUFBQUJ3STIvd1gvYS8vL0FHTUFBQVJlQkkwR0pnSG9BQUFBQmdJMkpici8vLythQUFBRUFRWWVCaVlDUXdBQUFRY0FSQURMQUI0QUM3WURFQWNCQVd0V0FDczBBUC8vLzVvQUFBUTZCaDRHSmdKREFBQUJCd0IxQVcwQUhnQUx0Z01PQXdFQmExWUFLelFBLy8vL21nQUFCQWtHSGdZbUFrTUFBQUVHQUo1cEhnQUx0Z01UQXdFQmExWUFLelFBLy8vL21nQUFCRHNHRWdZbUFrTUFBQUVHQUtWM0h3QUx0Z01iQXdFQmExWUFLelFBLy8vL21nQUFCQ0lGN1FZbUFrTUFBQUVIQUdvQWxRQWVBQTIzQkFNWEF3RUJhMVlBS3pRMEFQLy8vNW9BQUFRQkJua0dKZ0pEQUFBQkJ3Q2pBUVFBVXdBTnR3UURHUU1CQVZGV0FDczBOQUQvLy8rYUFBQUVUZ2FZQmlZQ1F3QUFBQWNDTndEMC8vNy8vd0E1L2p3RVJBU2dCaVlDUVFBQUFBY0FlUUZpLy8vLy93QUpBQUFEK3dZZUJpWUNPQUFBQVFjQVJBQ2dBQjRBQzdZRUVnY0JBV3hXQUNzMEFQLy9BQWtBQUFRUEJoNEdKZ0k0QUFBQkJ3QjFBVUlBSGdBTHRnUVFCd0VCYkZZQUt6UUEvLzhBQ1FBQUEvc0dIZ1ltQWpnQUFBRUdBSjQrSGdBTHRnUVdCd0VCYkZZQUt6UUEvLzhBQ1FBQUEvc0Y3UVltQWpnQUFBRUdBR3BxSGdBTnR3VUVHUWNCQVlSV0FDczBOQUQvL3dBYUFBQUIzd1llQmlZQjh3QUFBUVlBUklZZUFBdTJBUVlEQVFGclZnQXJOQUQvL3dBYUFBQUM5QVllQmlZQjh3QUFBUVlBZFNjZUFBdTJBUVFEQVFGclZnQXJOQUQvL3dBYUFBQUN3d1llQmlZQjh3QUFBUWNBbnY4akFCNEFDN1lCQ1FNQkFYWldBQ3MwQVAvL0FCb0FBQUxkQmUwR0pnSHpBQUFCQndCcS8xQUFIZ0FOdHdJQkRRTUJBWVJXQUNzME5BRC8vd0FKQUFBRXFBWVNCaVlCN2dBQUFRY0FwUUNZQUI4QUM3WUJHQVlCQVhaV0FDczBBUC8vQUR2LzdRUllCaDRHSmdIdEFBQUJCd0JFQU5rQUhnQUx0Z0l1RVFFQlcxWUFLelFBLy84QU8vL3RCRmdHSGdZbUFlMEFBQUVIQUhVQmVnQWVBQXUyQWl3UkFRRmJWZ0FyTkFELy93QTcvKzBFV0FZZUJpWUI3UUFBQVFZQW5uY2VBQXUyQWpFUkFRRmJWZ0FyTkFELy93QTcvKzBFV0FZU0JpWUI3UUFBQVFjQXBRQ0dBQjhBQzdZQ01SRUJBVzlXQUNzMEFQLy9BRHYvN1FSWUJlMEdKZ0h0QUFBQkJ3QnFBS01BSGdBTnR3TUNOUkVCQVhSV0FDczBOQUQvL3dBNC8rd0VaQVllQmlZQjV3QUFBUWNBUkFDL0FCNEFDN1lCR0FzQkFXdFdBQ3MwQVAvL0FEai83QVJrQmg0R0pnSG5BQUFCQndCMUFXRUFIZ0FMdGdFV0N3RUJhMVlBS3pRQS8vOEFPUC9zQkdRR0hnWW1BZWNBQUFFR0FKNWRIZ0FMdGdFYkN3RUJhMVlBS3pRQS8vOEFPUC9zQkdRRjdRWW1BZWNBQUFFSEFHb0FpUUFlQUEyM0FnRWZDd0VCaEZZQUt6UTBBUC8vQUd3QUFBU0NCaDRHSmdIakFBQUJCd0IxQVRrQUhnQUx0Z01PQ1FFQmExWUFLelFBLy8vL21nQUFCQ0VGeXdZbUFrTUFBQUVHQUhCd0lRQUx0Z01RQXdFQnNGWUFLelFBLy8vL21nQUFCQk1HQmdZbUFrTUFBQUVIQUtFQW9RQWVBQXUyQXhNREFRRmRWZ0FyTkFBQUJQK2EvbFVFQVFTTkFBUUFDUUFOQUNNQUlVQVBEUXdNQXhZZENBTjlEdzRGQlFFU0FEOHpFVE16UHpNdk14STVMek13TVVFQkl3RXpFd00zTXhNREJ5RTNBUmNPQWdjR0ZoY3lOamNYQmdZaklpWTNQZ0lDZ1A0VCtRS1Nwa3kzQkp2N3F5RDllU0FDajNZa1VqNEdBeGtkRnkwVURTSk9LRlpwQVFKT2RnT1QvRzBFamZ0ekE2dmkrM01Cc0xXMS9vczlHVHBLTHgwZ0FRNEpqUlVVYVZkS2NGQUEvLzhBT2YvdEJFUUdIZ1ltQWtFQUFBRUhBSFVCYlFBZUFBdTJBU2dRQVFGYlZnQXJOQUQvL3dBNS8rMEVSQVllQmlZQ1FRQUFBUVlBbm1vZUFBdTJBUzBRQVFGYlZnQXJOQUQvL3dBNS8rMEVSQVg5QmlZQ1FRQUFBUWNBb2dGSUFDWUFDN1lCTVJBQkFYQldBQ3MwQVAvL0FEbi83UVJFQmlFR0pnSkJBQUFCQmdDZmZ4NEFDN1lCTGhBQkFXUldBQ3MwQVAvL0FBbi8vd1FXQmlFR0pnSkFBQUFCQmdDZitSNEFDN1lDSkIwQkFYUldBQ3MwQVAvL0FBa0FBQVA3QmNzR0pnSTRBQUFCQmdCd1JTRUFDN1lFRWdjQkFiQldBQ3MwQVAvL0FBa0FBQVA3QmdZR0pnSTRBQUFCQmdDaGRoNEFDN1lFRlFjQkFWNVdBQ3MwQVAvL0FBa0FBQVA3QmYwR0pnSTRBQUFCQndDaUFSMEFKZ0FMdGdRWkJ3RUJnRllBS3pRQUFBVUFDZjVWQS9zRWpRQURBQWNBQ3dBUEFDVUFJMEFRR0I4TENnb0dEdzRIZlJFUUVBVUdFZ0EvTXpNUk16OHpNeEk1THpNdk16QXhaUWNoTnhNREl4TUJCeUUzQVFjaE54TVhEZ0lIQmhZWE1qWTNGd1lHSXlJbU56NENBMVFpL1hnaTg4cnN5d0tFSXYzTElnTFlJdjE1SXVsMUkxSS9CUU1ZSGhjc0Znd2pUU2xWYVFJQlRuYS92NzhEenZ0ekJJMytMYisvQWRQQXdQdXVQUms2U2k4ZElBRU9DWTBWRkdsWFNuQlEvLzhBQ1FBQUJCRUdJUVltQWpnQUFBRUdBSjlVSGdBTHRnUVdCd0VCZEZZQUt6UUEvLzhBUC8vdkJFNEdIZ1ltQWZVQUFBRUdBSjV4SGdBTHRnRXdFQUVCWmxZQUt6UUEvLzhBUC8vdkJFNEdCZ1ltQWZVQUFBRUhBS0VBcVFBZUFBdTJBVEFRQVFGTlZnQXJOQUQvL3dBLy8rOEVUZ1g5QmlZQjlRQUFBUWNBb2dGUUFDWUFDN1lCTkJBQkFYQldBQ3MwQVAvL0FELzkrd1JPQktBR0pnSDFBQUFCQndIS0FTbitsd0FPdEFFMEJRRUJ1UCtac0ZZQUt6VC8vd0FKQUFBRXFRWWVCaVlCOUFBQUFRWUFubjhlQUF1MkF4RUhBUUYyVmdBck5BRC8vd0FPQUFBQzlnWVNCaVlCOHdBQUFRY0FwZjh5QUI4QUM3WUJDUU1CQVg5V0FDczBBUC8vQUJvQUFBTGJCY3NHSmdIekFBQUJCd0J3L3lvQUlRQUx0Z0VHQXdFQnNGWUFLelFBLy84QUdnQUFBczRHQmdZbUFmTUFBQUVIQUtIL1hBQWVBQXUyQVFrREFRRmRWZ0FyTkFELy8vK1cvbFVCendTTkJpWUI4d0FBQUFZQXBPNEEvLzhBR2dBQUFnSUYvUVltQWZNQUFBRUdBS0lDSmdBTHRnRU5Bd0VCZ0ZZQUt6UUEvLy8vOC8vdEJKZ0dIZ1ltQWZJQUFBRUhBSjRBK0FBZUFBdTJBUmtCQVFGMlZnQXJOQUQvL3dBSi9nTUVuUVNOQmlZQjhRQUFBQWNCeWdEUC9wLy8vd0FKQUFBRE1RWWVCaVlCOEFBQUFRWUFkUjBlQUF1MkFnZ0hBUUZyVmdBck5BRC8vd0FKL2dRRE1RU05CaVlCOEFBQUFRY0J5Z0ROL3FBQURyUUNFUVlCQWJqL2xiQldBQ3MwLy84QUNRQUFBekVFa0FZbUFmQUFBQUFIQWNvQ0pBT1EvLzhBQ1FBQUF6RUVqUVltQWZBQUFBQUhBS0lBOFAxQi8vOEFDUUFBQktnR0hnWW1BZTRBQUFFSEFIVUJqUUFlQUF1MkFRb0dBUUZyVmdBck5BRC8vd0FKL2YwRXFBU05CaVlCN2dBQUFBY0J5Z0V5L3BuLy93QUpBQUFFcUFZaEJpWUI3Z0FBQVFjQW53Q2ZBQjRBQzdZQkVBWUJBWFJXQUNzMEFQLy9BRHYvN1FSWUJjc0dKZ0h0QUFBQkJnQndmaUVBQzdZQ0xoRUJBYUJXQUNzMEFQLy9BRHYvN1FSWUJnWUdKZ0h0QUFBQkJ3Q2hBSzhBSGdBTHRnSXhFUUVCVFZZQUt6UUEvLzhBTy8vdEJPTUdIUVltQWUwQUFBRUhBS1lBK0FBZUFBMjNBd0l3RVFFQlVWWUFLelEwQVAvL0FBa0FBQVFXQmg0R0pnSHFBQUFCQndCMUFTSUFIZ0FMdGdJZkFBRUJhMVlBS3pRQS8vOEFDZjRFQkJZRWpRWW1BZW9BQUFBSEFjb0ExZjZnLy84QUNRQUFCQllHSVFZbUFlb0FBQUVHQUo4MEhnQUx0Z0lsQUFFQmRGWUFLelFBLy84QUQvL3VCQnNHSGdZbUFla0FBQUVIQUhVQlRnQWVBQXUyQVRvUEFRRmJWZ0FyTkFELy93QVAvKzREL2dZZUJpWUI2UUFBQVFZQW5rb2VBQXUyQVQ4UEFRRm1WZ0FyTkFELy93QVAvajBEL2dTZUJpWUI2UUFBQUFjQWVRRklBQUQvL3dBUC8rNEVIQVloQmlZQjZRQUFBUVlBbjE4ZUFBdTJBVUFQQVFGbVZnQXJOQUQvL3dCai9nTUVYZ1NOQmlZQjZBQUFBUWNCeWdEai9wOEFEclFDRVFJQkFiai9rTEJXQUNzMC8vOEFZd0FBQkY0R0lRWW1BZWdBQUFFR0FKOU5IZ0FMdGdJT0J3RUJkRllBS3pRQS8vOEFZLzVFQkY0RWpRWW1BZWdBQUFBSEFIa0JOQUFILy84QU9QL3NCR1FHRWdZbUFlY0FBQUVHQUtWc0h3QUx0Z0ViQ3dFQmYxWUFLelFBLy84QU9QL3NCR1FGeXdZbUFlY0FBQUVHQUhCa0lRQUx0Z0VZQ3dFQnNGWUFLelFBLy84QU9QL3NCR1FHQmdZbUFlY0FBQUVIQUtFQWxRQWVBQXUyQVJzTEFRRmRWZ0FyTkFELy93QTQvK3dFWkFaNUJpWUI1d0FBQVFjQW93RDRBRk1BRGJjQ0FTRUxBUUZSVmdBck5EUUEvLzhBT1Avc0JNa0dIUVltQWVjQUFBRUhBS1lBM2dBZUFBMjNBZ0VhQ3dFQllWWUFLelEwQUFBQ0FEaitoUVJrQkkwQUZRQXJBQnBBREI0bEZ4WVdFUVlMY2d3QWZRQS9NaXN5TWhFekx6TXdNVUV6QXc0Q0p5NENOeE16QXdZV0ZoY1dOalkzQXhjT0FnY0dGaGN5TmpjWEJnWWpJaVkzUGdJRGQrMkNFcExlaFh2Q1pnNkI2NElJSkZoRlNYQklDNVYxSTFJK0JnTVlIaGN0RkEwaVRpaFdhUUlCVG5VRWpmMEFocnhmQXdKaXVJSURBUHovUTJJM0FnSTBaRWorM3owWk9rb3ZIU0FCRGdtTkZSUnBWMHB3VUFELy93Q0xBQUFHSGdZZUJpWUI1UUFBQVFjQW5nRVhBQjRBQzdZRUd3b0JBWFpXQUNzMEFQLy9BR3dBQUFTQ0JoNEdKZ0hqQUFBQkJnQ2VOUjRBQzdZREV3a0JBWFpXQUNzMEFQLy9BR3dBQUFTQ0JlMEdKZ0hqQUFBQkJnQnFZUjRBRGJjRUF4Y0pBUUdFVmdBck5EUUEvLy8vMWdBQUJDb0dIZ1ltQWVJQUFBRUhBSFVCUEFBZUFBdTJBdzROQVFGclZnQXJOQUQvLy8vV0FBQUVLZ1g5QmlZQjRnQUFBUWNBb2dFWEFDWUFDN1lERncwQkFZQldBQ3MwQVAvLy85WUFBQVFxQmlFR0pnSGlBQUFCQmdDZlRoNEFDN1lERkEwQkFYUldBQ3MwQVAvLy82TUFBQVNyQmo4R0pnQWxBQUFCQmdDdXNQOEFEclFERGdNQUFMai9QckJXQUNzMC8vLy91Z0FBQlNBR1FRUW1BQ2xrQUFFSEFLNytoQUFCQUE2MEJCQUhBQUM0L3ord1ZnQXJOUC8vLzhJQUFBWHBCa0FFSmdBc1pBQUFCd0N1L293QUFQLy8vOFlBQUFLTkJrSUVKZ0F0WkFBQkJ3Q3UvcEFBQWdBT3RBRUVBd0FBdVA5QnNGWUFLelQvL3dBbi8ra0ZOZ1kvQkNZQU14UUFBUWNBcnY3eC8vOEFEclFDTEJFQUFMai9LckJXQUNzMC8vLy91UUFBQmJRR1B3UW1BRDFrQUFFSEFLNytnLy8vQUF1MkFRb0lBQUNPVmdBck5BRC8vd0FlQUFBRkF3WS9CQ1lBdWhRQUFRY0FydjcrLy84QURyUUROaDBBQUxqL0tyQldBQ3MwLy84QUNmLzFBem9HbXdZbUFNTUFBQUVIQUsvL0d2L3JBQkJBQ1FNQ0FTc0FBUUdpVmdBck5EUTAvLy8vb3dBQUJLc0ZzQVlHQUNVQUFQLy9BQ2IvL3dTM0JiQUdCZ0FtQUFELy93QW1BQUFFdkFXd0JnWUFLUUFBLy8vLzVRQUFCT3NGc0FZR0FENEFBUC8vQUNZQUFBV0ZCYkFHQmdBc0FBRC8vd0EzQUFBQ0tRV3dCZ1lBTFFBQS8vOEFKZ0FBQlhJRnNBWUdBQzhBQVAvL0FDWUFBQWJPQmJBR0JnQXhBQUQvL3dBbUFBQUZoZ1d3QmdZQU1nQUEvLzhBWXYvcEJTSUZ4d1lHQURNQUFQLy9BQ1lBQUFUNkJiQUdCZ0EwQUFELy93Q2RBQUFGSlFXd0JnWUFPQUFBLy84QW9RQUFCVkFGc0FZR0FEMEFBUC8vLzhBQUFBVkdCYkFHQmdBOEFBRC8vd0EzQUFBRE1BY05CaVlBTFFBQUFRY0FhditqQVQ0QURiY0NBUmtEQVFHRFZnQXJORFFBLy84QW9RQUFCVkFIQlFZbUFEMEFBQUVIQUdvQTZRRTJBQTIzQWdFZUFnRUJkMVlBS3pRMEFQLy9BRHYvNXdReUJqd0dKZ0M3QUFBQkJ3Q3VBVC8vL0FBTHRnTkNCZ0VCbWxZQUt6UUEvLzhBS1AvcUJBUUdPd1ltQUw4QUFBRUhBSzRCRFAvN0FBdTJBa0FyQVFHYVZnQXJOQUQvL3dBUi9tRUQrd1k4QmlZQXdRQUFBUWNBcmdFVS8vd0FDN1lDSFFNQkFhNVdBQ3MwQVAvL0FHYi85UUtPQmlZR0pnRERBQUFCQmdDdS9lWUFDN1lCRWdBQkFabFdBQ3MwQVAvL0FGZi81d1E0QnFNR0pnRExBQUFCQmdDdkdQTUFFRUFKQXdJQk9BOEJBYUpXQUNzME5EVC8vd0FoQUFBRWtBUTZCZ1lBamdBQS8vOEFPUC9wQkI0RVVRWUdBRk1BQVAvLy85NytZQVJaQkRvR0JnQjJBQUQvL3dCa0FBQUVFZ1E2QmdZQVdnQUEvLy8vbi81UEJHY0VTQVlHQW9BQUFQLy9BRVQvOVFMNkJib0dKZ0REQUFBQkJ3QnEvMjMvNndBTnR3SUJKd0FCQWFKV0FDczBOQUQvL3dCWC8rY0QrQVhDQmlZQXl3QUFBUVlBYW12ekFBMjNBZ0UwRHdFQm9sWUFLelEwQVAvL0FEai82UVFlQmp3R0pnQlRBQUFCQndDdUFRWC8vQUFMdGdJc0JnRUJtbFlBS3pRQS8vOEFWLy9uQSs0R0xnWW1BTXNBQUFFSEFLNEErLy91QUF1MkFSOFBBUUdaVmdBck5BRC8vd0JTLytjR0JBWXNCaVlBemdBQUFRY0FyZ0lULyt3QUM3WUNRQjhCQVpaV0FDczBBUC8vQUNZQUFBUzhCdzBHSmdBcEFBQUJCd0JxQU9zQlBnQU50d1VFSlFjQkFZTldBQ3MwTkFELy93QXJBQUFFckFjK0JpWUFzUUFBQVFjQWRRRzZBVDRBQzdZQkJnVUJBV3hXQUNzMEFBQUJBQ2IvNmdTOUJjWUFPUUFiUUEwS0pnODJNU3NKY2hnVUR3TnlBQ3ZNTXl2TU14STVPVEF4UVRZdUFpY3VBemMrQXhjZUFnY2pOaVltSnlZR0JnY0dIZ0lYSGdNSERnTW5MZ00zRndZZUFqTVdOallEVUFrb1MxNHVUSlIzUWdZSVo2QytYb1hRZGdYMEJqRm9UVVdBV1FzSUxWQmNLRkdWZEQ0SENXYWV2bUZudDRwTEJQUUVJVVpsUDBTQld3RitPMUUzSmhFYlNtYUxYV21iWmpFQ0EyekdpRXh0UFFFQ0xWNUtORXcwSkE0Y1RXcVJZV3ViWWk0Q0FUNTNxbTBCUUdOQ0lnSXFXd0QvL3dBM0FBQUNLUVd3QmdZQUxRQUEvLzhBTndBQUF6QUhEUVltQUMwQUFBRUhBR3Ivb3dFK0FBMjNBZ0VaQXdFQmcxWUFLelEwQVAvL0FBVC82QVJkQmJBR0JnQXVBQUQvL3dBckFBQUZkZ1d3QmdZQ1BBQUEvLzhBSmdBQUJYSUhNd1ltQUM4QUFBRUhBSFVCcGdFekFBdTJBdzREQVFGYlZnQXJOQUQvL3dDWi8rZ0ZWZ2NtQmlZQTNnQUFBUWNBb1FFVkFUNEFDN1lDSGdFQkFWNVdBQ3MwQVAvLy82TUFBQVNyQmJBR0JnQWxBQUQvL3dBbS8vOEV0d1d3QmdZQUpnQUEvLzhBS3dBQUJLd0ZzQVlHQUxFQUFQLy9BQ1lBQUFTOEJiQUdCZ0FwQUFELy93QWxBQUFGZkFjbUJpWUEzQUFBQVFjQW9RRlRBVDRBQzdZQkR3RUJBVjVXQUNzMEFQLy9BQ1lBQUFiT0JiQUdCZ0F4QUFELy93QW1BQUFGaFFXd0JnWUFMQUFBLy84QVl2L3BCU0lGeHdZR0FETUFBUC8vQUNzQUFBV0RCYkFHQmdDMkFBRC8vd0FtQUFBRStnV3dCZ1lBTkFBQS8vOEFYLy9vQlFvRnh3WUdBQ2NBQVAvL0FKMEFBQVVsQmJBR0JnQTRBQUQvLy8vQUFBQUZSZ1d3QmdZQVBBQUEvLzhBSFAvcEE5RUVVQVlHQUVVQUFQLy9BRHIvNndQd0JGRUdCZ0JKQUFELy93QVhBQUFFUlFYYkJpWUE4QUFBQVFjQW9RQ1cvL01BQzdZQkR3RUJBWDFXQUNzMEFQLy9BRGovNlFRZUJGRUdCZ0JUQUFELy8vL0kvbUFFRUFSUkJnWUFWQUFBQUFFQU4vL3FBK1lFVVFBbkFCTkFDUUFKSFJRSGNna0xjZ0FyS3pJUk16QXhaUlkyTmpjM0RnSW5MZ00zTno0REZ4NENCeWMwSmlZbkpnNENCd2NHSGdJQjREdGlRUTNmRFluTGNYT2paQ2NLQkF4VGk3NTNlSzVjQWQwbFR6OUthVVVuQndRRkF5SlBxd0V1VmpnQmRLeGRBZ0phbU1Gb0pHL0dtVllEQW1xM2RRRTRZVDBDQWo1cWZ6NGpOWGxxUkFELy8vKzgva2NFR1FRNkJnWUFYUUFBLy8vL3VnQUFCQklFT2dZR0FGd0FBUC8vQURyLzZ3UHdCYzhHSmdCSkFBQUJCZ0JxWUFBQURiY0NBVUVMQVFHalZnQXJORFFBLy84QUZnQUFBNVVGOHdZbUFPd0FBQUVIQUhVQXlQL3pBQXUyQVFZRkFRR0xWZ0FyTkFELy93QWIvK3NEd1FSUEJnWUFWd0FBLy84QUlBQUFBZ29GMkFZR0FFMEFBUC8vQUNNQUFBTGlCY1lHSmdDTkFBQUJCd0JxLzFYLzl3QU50d0lCR1FNQkFiVldBQ3MwTkFELy8vOEMva1lDQVFYWUJnWUFUZ0FBLy84QUlnQUFCSDRGOGdZbUFQRUFBQUVIQUhVQlN2L3lBQXUyQXc0REFRR0tWZ0FyTkFELy8vKzgva2NFR1FYb0JpWUFYUUFBQVFZQW9WTUFBQXUyQWg0QkFRR1NWZ0FyTkFELy93QzFBQUFIT2djM0JpWUFPd0FBQVFjQVJBSWpBVGNBQzdZRUdCVUJBV0ZXQUNzMEFQLy9BSGtBQUFYMEJnQUdKZ0JiQUFBQkJ3QkVBV1lBQUFBTHRnUVlGUUVCb0ZZQUt6UUEvLzhBdFFBQUJ6b0hOd1ltQURzQUFBRUhBSFVDeEFFM0FBdTJCQllCQVFGaFZnQXJOQUQvL3dCNUFBQUY5QVlBQmlZQVd3QUFBUWNBZFFJSUFBQUFDN1lFRmdFQkFhQldBQ3MwQVAvL0FMVUFBQWM2QndZR0pnQTdBQUFCQndCcUFlMEJOd0FOdHdVRUt4VUJBWGhXQUNzME5BRC8vd0I1QUFBRjlBWFBCaVlBV3dBQUFRY0FhZ0V4QUFBQURiY0ZCQ3NWQVFHM1ZnQXJORFFBLy84QW9RQUFCVkFITmdZbUFEMEFBQUVIQUVRQkh3RTJBQXUyQVFzQ0FRRmdWZ0FyTkFELy8vKzgva2NFR1FZQUJpWUFYUUFBQVFZQVJIMEFBQXUyQWhzQkFRR2dWZ0FyTkFELy93Q1JBLzRCbFFZQUJnWUFDd0FBLy84QW5RUDRBcndHQUFZR0FBWUFBUC8vQURQLzhBUXFCYkFFSmdBRkFBQUFCd0FGQWc0QUFQLy8vd1QrUndMNUJlRUdKZ0NjQUFBQkJ3Q2YvenovM2dBTHRnRVlBQUVCZ0ZZQUt6UUEvLzhBalFRRUFmb0dBQVlHQVlVQUFQLy9BQ1lBQUFiT0J6Y0dKZ0F4QUFBQkJ3QjFBc0VCTndBTHRnTVJBQUVCWVZZQUt6UUEvLzhBRHdBQUJtRUdBQVltQUZFQUFBRUhBSFVDbXdBQUFBdTJBek1EQVFHZ1ZnQXJOQUQvLy8rai9uQUVxd1d3QmlZQUpRQUFBUWNBcHdGcEFBUUFFTFVFQXhFRkFRRzQvN1d3VmdBck5EVC8vd0FjL25VRDBRUlFCaVlBUlFBQUFRY0Fwd0NrQUFrQUVMVURBajR4QVFHNC84bXdWZ0FyTkRULy93QW1BQUFFdkFjK0JpWUFLUUFBQVFjQVJBRWhBVDRBQzdZRUVnY0JBV3hXQUNzMEFQLy9BQ1VBQUFWOEJ6NEdKZ0RjQUFBQkJ3QkVBWDBCUGdBTHRnRU1BUUVCYkZZQUt6UUEvLzhBT3YvckEvQUdBQVltQUVrQUFBRUhBRVFBbGdBQUFBdTJBUzRMQVFHTVZnQXJOQUQvL3dBWEFBQUVSUVh6QmlZQThBQUFBUWNBUkFEQS8vTUFDN1lCREFFQkFZdFdBQ3MwQVAvL0FIWUFBQVhSQmJBR0JnQzVBQUQvL3dBLy9pVUZYd1E4QmdZQXpRQUEvLzhBcUFBQUJXRUcvUVltQVJrQUFBRUhBS3dFWEFFUEFBMjNBd0lWRXdFQkxWWUFLelEwQVAvL0FIVUFBQVJLQmRBR0pnRWFBQUFCQndDc0E4Zi80Z0FOdHdNQ0dSY0JBWHRXQUNzME5BRC8vd0E0L2tjSWdBUlJCQ1lBVXdBQUFBY0FYUVJuQUFELy93Qmkva2NKY2dYSEJDWUFNd0FBQUFjQVhRVlpBQUQvL3dBZi9qY0VwQVhHQmlZQTJ3QUFBUWNDWVFGei81MEFDN1lDUWlvQUFHUldBQ3MwQVAvL0FCZitPQU85QkZBR0pnRHZBQUFCQndKaEFSci9uZ0FMdGdJL0tRQUFaVllBS3pRQS8vOEFYLzQ2QlFvRnh3WW1BQ2NBQUFFSEFtRUJzLytnQUF1MkFTc0ZBQUJrVmdBck5BRC8vd0EzL2pvRDVnUlJCaVlBUndBQUFRY0NZUUUzLzZBQUM3WUJLd2tBQUdSV0FDczBBUC8vQUtFQUFBVlFCYkFHQmdBOUFBRC8vd0IxL2w4RU1BUTZCZ1lBdlFBQS8vOEFOd0FBQWlrRnNBWUdBQzBBQVAvLy82UUFBQWZvQnlZR0pnRGFBQUFCQndDaEFsQUJQZ0FMdGdVZERRRUJYbFlBS3pRQS8vLy9zQUFBQm9FRjJ3WW1BTzRBQUFFSEFLRUJpLy96QUF1MkJSME5BUUY5VmdBck5BRC8vd0EzQUFBQ0tRV3dCZ1lBTFFBQS8vLy9vd0FBQktzSEh3WW1BQ1VBQUFFSEFLRUJLZ0UzQUF1MkF4TUhBUUZUVmdBck5BRC8vd0FjLytrRDlRWG9CaVlBUlFBQUFRY0FvUUNEQUFBQUM3WUNRQThCQVg1V0FDczBBUC8vLzZNQUFBU3JCd1lHSmdBbEFBQUJCd0JxQVI0Qk53QU50d1FESXdjQkFYaFdBQ3MwTkFELy93QWMvK2tFQkFYUEJpWUFSUUFBQVFZQWFuY0FBQTIzQXdKUUR3RUJvMVlBS3pRMEFQLy8vNDBBQUFkdkJiQUdCZ0NCQUFELy93QU8vK29HWHdSUkJnWUFoZ0FBLy84QUpnQUFCTHdISmdZbUFDa0FBQUVIQUtFQStBRStBQXUyQkJVSEFRRmVWZ0FyTkFELy93QTYvK3NEOEFYb0JpWUFTUUFBQVFZQW9Xd0FBQXUyQVRFTEFRRitWZ0FyTkFELy93QkwvK2tGTFFiZUJpWUJXQUFBQVFjQWFnRDNBUThBRGJjQ0FVSUFBUUZCVmdBck5EUUEvLzhBTlAvcUE5b0VVUVlHQUowQUFQLy9BRFQvNmdQNEJkQUdKZ0NkQUFBQkJnQnFhd0VBRGJjQ0FVQUFBUUdpVmdBck5EUUEvLy8vcEFBQUIrZ0hEUVltQU5vQUFBRUhBR29DUkFFK0FBMjNCZ1V0RFFFQmcxWUFLelEwQVAvLy83QUFBQWFCQmNJR0pnRHVBQUFCQndCcUFYLy84d0FOdHdZRkxRMEJBYUpXQUNzME5BRC8vd0FmLytvRXBBY2FCaVlBMndBQUFRY0FhZ0RmQVVzQURiY0RBbFFWQVFHRVZnQXJORFFBLy84QUYvL3FBOThGemdZbUFPOEFBQUVHQUdwUy93QU50d01DVVJRQkFhTldBQ3MwTkFELy93QWxBQUFGZkFicUJpWUEzQUFBQVFjQWNBRWlBVUFBQzdZQkRBZ0JBYkZXQUNzMEFQLy9BQmNBQUFSRkJhQUdKZ0R3QUFBQkJnQndaZllBQzdZQkRBZ0JBZEJXQUNzMEFQLy9BQ1VBQUFWOEJ3MEdKZ0RjQUFBQkJ3QnFBVWNCUGdBTnR3SUJId0VCQVlOV0FDczBOQUQvL3dBWEFBQUVSUVhDQmlZQThBQUFBUWNBYWdDSy8vTUFEYmNDQVI4QkFRR2lWZ0FyTkRRQS8vOEFZdi9wQlNJSEJ3WW1BRE1BQUFFSEFHb0JOUUU0QUEyM0F3SkJFUUVCWmxZQUt6UTBBUC8vQURqLzZRUWVCYzhHSmdCVEFBQUJCZ0JxZFFBQURiY0RBa0VHQVFHalZnQXJORFFBLy84QVlmL3BCUnNGeHdZR0FSY0FBUC8vQURULzZBUWRCRklHQmdFWUFBRC8vd0JoLytrRkd3Y0pCaVlCRndBQUFRY0FhZ0ZHQVRvQURiY0VBMDhBQVFGcVZnQXJORFFBLy84QU5QL29CQjBGMEFZbUFSZ0FBQUVHQUdwMkFRQU50d1FEUVFBQkFhVldBQ3MwTkFELy93QkkvK2tFOGdjYkJpWUE1d0FBQVFjQWFnRVhBVXdBRGJjREFrSWVBUUdGVmdBck5EUUEvLzhBSVAvb0ErWUZ6d1ltQVA4QUFBRUdBR3BaQUFBTnR3TUNRUWtCQWFOV0FDczBOQUQvL3dDWi8rZ0ZWZ2JxQmlZQTNnQUFBUWNBY0FEa0FVQUFDN1lDR3hnQkFiRldBQ3MwQVAvLy83eitSd1FaQmEwR0pnQmRBQUFCQmdCd0lnTUFDN1lDR3hnQkFlVldBQ3MwQVAvL0FKbi82QVZXQncwR0pnRGVBQUFCQndCcUFRa0JQZ0FOdHdNQ0xnRUJBWU5XQUNzME5BRC8vLys4L2tjRUdRWFBCaVlBWFFBQUFRWUFha2NBQUEyM0F3SXVBUUVCdDFZQUt6UTBBUC8vQUpuLzZBVldCejBHSmdEZUFBQUJCd0NtQVY0QlBnQU50d01DR1FFQkFXSldBQ3MwTkFELy8vKzgva2NFaHdYL0JpWUFYUUFBQVFjQXBnQ2NBQUFBRGJjREFoa0JBUUdXVmdBck5EUUEvLzhBeEFBQUJWMEhEUVltQU9FQUFBRUhBR29CU0FFK0FBMjNBd0l2RmdFQmcxWUFLelEwQVAvL0FHMEFBQVFZQmNJR0pnRDVBQUFCQmdCcWFmTUFEYmNEQWkwREFRR2lWZ0FyTkRRQS8vOEFMUC8vQnJrSERRWW1BT1VBQUFFSEFHb0I3d0UrQUEyM0F3SXlIQUVCZzFZQUt6UTBBUC8vQUNQLy93WDRCY0lHSmdEOUFBQUJCd0JxQVhMLzh3QU50d01DTWh3QkFhSldBQ3MwTkFELy93QTQvK2dFaHdZQUJnWUFTQUFBLy8vL28vNllCS3NGc0FZbUFDVUFBQUVIQUswRTVBQURBQTYwQXhFRkFRRzQvM1d3VmdBck5QLy9BQnorblFQUkJGQUdKZ0JGQUFBQkJ3Q3RCQjRBQ0FBT3RBSStNUUVCdVArSnNGWUFLelQvLy8rakFBQUVxd2U1QmlZQUpRQUFBUWNBcXdVVEFUMEFDN1lERHdjQkFYRldBQ3MwQVAvL0FCei82UVBSQm9NR0pnQkZBQUFCQndDckJHd0FCd0FMdGdJOER3RUJuRllBS3pRQS8vLy9vd0FBQmdzSHF3WW1BQ1VBQUFFSEFrY0E3Z0VoQUEyM0JBTVNCd0VCWVZZQUt6UTBBUC8vQUJ6LzZRVmpCblFHSmdCRkFBQUJCZ0pIUnVvQURiY0RBa0VQQVFHTVZnQXJORFFBLy8vL293QUFCS3NIcVFZbUFDVUFBQUVIQWtnQThRRXFBQTIzQkFNUUJ3RUJYRllBS3pRMEFQLy9BQnovNlFQcUJuSUdKZ0JGQUFBQkJnSklTZk1BRGJjREFqMFBBUUdIVmdBck5EUUEvLy8vb3dBQUJYc0gzQVltQUNVQUFBRUhBa2tBN0FFVkFBMjNCQU1UQXdFQlVGWUFLelEwQVAvL0FCei82UVRVQnFVR0pnQkZBQUFCQmdKSlJkNEFEYmNEQWtBUEFRRjdWZ0FyTkRRQS8vLy9vd0FBQktzSDB3WW1BQ1VBQUFFSEFrb0E2d0VIQUEyM0JBTVFCd0VCT2xZQUt6UTBBUC8vQUJ6LzZRUG5CcHdHSmdCRkFBQUJCZ0pLUk5BQURiY0RBajBQQVFGbFZnQXJORFFBLy8vL28vNllCS3NITndZbUFDVUFBQUFuQUo0QThnRTNBUWNBclFUa0FBTUFGN1FFR2dVQkFiai9kYmRXQXhFSEFRRnNWZ0FyTkNzMEFQLy9BQnorblFQckJnQUdKZ0JGQUFBQUpnQ2VTd0FCQndDdEJCNEFDQUFYdEFOSE1RRUJ1UCtKdDFZQ1BnOEJBWmRXQUNzMEt6UUEvLy8vb3dBQUJLc0hyZ1ltQUNVQUFBRUhBa3dCR0FFeUFBMjNCQU1UQndFQlhGWUFLelEwQVAvL0FCei82UVB0Qm5nR0pnQkZBQUFCQmdKTWNmd0FEYmNEQWtBUEFRR0hWZ0FyTkRRQS8vLy9vd0FBQktzSHJnWW1BQ1VBQUFFSEFrVUJHQUV5QUEyM0JBTVRCd0VCWEZZQUt6UTBBUC8vQUJ6LzZRUHVCbmdHSmdCRkFBQUJCZ0pGY2Z3QURiY0RBa0FQQVFHSFZnQXJORFFBLy8vL293QUFCS3NJUFFZbUFDVUFBQUVIQWswQkZ3RTJBQTIzQkFNVEJ3RUJibFlBS3pRMEFQLy9BQnovNlFQbEJ3WUdKZ0JGQUFBQkJnSk5jUDhBRGJjREFrQVBBUUdaVmdBck5EUUEvLy8vb3dBQUJLc0lGUVltQUNVQUFBRUhBbUFCR3dFOEFBMjNCQU1UQndFQmIxWUFLelEwQVAvL0FCei82UVAzQnQ0R0pnQkZBQUFCQmdKZ2RBVUFEYmNEQWtBUEFRR2FWZ0FyTkRRQS8vLy9vLzZZQktzSEh3WW1BQ1VBQUFBbkFLRUJLZ0UzQVFjQXJRVGtBQU1BRjdRRUlBVUJBYmovZGJkV0F4TUhBUUZUVmdBck5DczBBUC8vQUJ6K25RUDFCZWdHSmdCRkFBQUFKd0NoQUlNQUFBRUhBSzBFSGdBSUFCZTBBMDB4QVFHNC80bTNWZ0pBRHdFQmZsWUFLelFyTkFELy93QW0vcDhFdkFXd0JpWUFLUUFBQVFjQXJRU29BQW9BRHJRRUV3SUJBYmovZjdCV0FDczAvLzhBT3Y2VkEvQUVVUVltQUVrQUFBRUhBSzBFZFFBQUFBNjBBUzhBQVFHNC80bXdWZ0FyTlAvL0FDWUFBQVM4QjhBR0pnQXBBQUFCQndDckJPQUJSQUFMdGdRUkJ3RUJmRllBS3pRQS8vOEFPdi9yQS9BR2d3WW1BRWtBQUFFSEFLc0VWUUFIQUF1MkFTMExBUUdjVmdBck5BRC8vd0FtQUFBRXZBY3hCaVlBS1FBQUFRY0FwUURPQVQ0QUM3WUVIZ2NCQVhaV0FDczBBUC8vQURyLzZ3UUhCZlFHSmdCSkFBQUJCZ0NsUXdFQUM3WUJPZ3NCQVpaV0FDczBBUC8vQUNZQUFBWFlCN0lHSmdBcEFBQUJCd0pIQUxzQktBQU50d1VFRkFjQkFXeFdBQ3MwTkFELy93QTYvK3NGVFFaMUJpWUFTUUFBQVFZQ1J6RHJBQTIzQWdFd0N3RUJqRllBS3pRMEFQLy9BQ1lBQUFTOEI3QUdKZ0FwQUFBQkJ3SklBTDRCTVFBTnR3VUVFZ2NCQVdkV0FDczBOQUQvL3dBNi8rc0Q4QVp6QmlZQVNRQUFBUVlDU0RQMEFBMjNBZ0V1Q3dFQmgxWUFLelEwQVAvL0FDWUFBQVZKQitNR0pnQXBBQUFCQndKSkFMb0JIQUFOdHdVRUZRY0JBVnRXQUNzME5BRC8vd0E2LytzRXZnYW1CaVlBU1FBQUFRWUNTUy9mQUEyM0FnRXhDd0VCZTFZQUt6UTBBUC8vQUNZQUFBUzhCOW9HSmdBcEFBQUJCd0pLQUxrQkRnQU50d1VFRWdjQkFVVldBQ3MwTkFELy93QTYvK3NEOEFhZEJpWUFTUUFBQVFZQ1NpM1JBQTIzQWdFdUN3RUJaVllBS3pRMEFQLy9BQ2IrbndTOEJ6NEdKZ0FwQUFBQUp3Q2VBTDhCUGdFSEFLMEVxQUFLQUJlMEJSd0NBUUc0LzMrM1ZnUVRCd0VCZDFZQUt6UXJOQUQvL3dBNi9wVUQ4QVlBQmlZQVNRQUFBQ1lBbmpRQUFRY0FyUVIxQUFBQUY3UUNPQUFCQWJqL2liZFdBUzhMQVFHWFZnQXJOQ3MwQVAvL0FEY0FBQUxUQjhBR0pnQXRBQUFCQndDckE1Y0JSQUFMdGdFRkF3RUJmRllBS3pRQS8vOEFJd0FBQW9VR2VnWW1BSTBBQUFFSEFLc0RTZi8rQUF1MkFRVURBUUd1VmdBck5BRC8vLy8vL3BzQ0tRV3dCaVlBTFFBQUFRY0FyUU5lQUFZQURyUUJCd0lCQWJqL2ZyQldBQ3MwLy8vLzQvNmZBZ29GMkFZbUFFMEFBQUVIQUswRFFnQUtBQTYwQWhNQ0FRRzQvMyt3VmdBck5QLy9BR0wrbFFVaUJjY0dKZ0F6QUFBQkJ3Q3RCUFFBQUFBT3RBSXZCZ0VCdVArSnNGWUFLelQvL3dBNC9wRUVIZ1JSQmlZQVV3QUFBUWNBclFTQi8vd0FEclFDTHhFQkFiai9pTEJXQUNzMC8vOEFZdi9wQlNJSHV3WW1BRE1BQUFFSEFLc0ZLZ0UvQUF1MkFpMFJBUUZmVmdBck5BRC8vd0E0LytrRUhnYURCaVlBVXdBQUFRY0Fxd1JxQUFjQUM3WUNMUVlCQVp4V0FDczBBUC8vQUdMLzZRWWpCNndHSmdBekFBQUJCd0pIQVFZQklnQU50d01DTUJFQkFVOVdBQ3MwTkFELy93QTQvK2tGWWdaMEJpWUFVd0FBQVFZQ1IwWHFBQTIzQXdJd0JnRUJqRllBS3pRMEFQLy9BR0wvNlFVaUI2b0dKZ0F6QUFBQkJ3SklBUWdCS3dBTnR3TUNMaEVCQVVwV0FDczBOQUQvL3dBNC8ra0VIZ1p5QmlZQVV3QUFBUVlDU0VqekFBMjNBd0l1QmdFQmgxWUFLelEwQVAvL0FHTC82UVdTQjkwR0pnQXpBQUFCQndKSkFRTUJGZ0FOdHdNQ01SRUJBVDVXQUNzME5BRC8vd0E0LytrRTB3YWxCaVlBVXdBQUFRWUNTVVRlQUEyM0F3SXhCZ0VCZTFZQUt6UTBBUC8vQUdMLzZRVWlCOVFHSmdBekFBQUJCd0pLQVFNQkNBQU50d01DTGhFQkFTaFdBQ3MwTkFELy93QTQvK2tFSGdhY0JpWUFVd0FBQVFZQ1NrUFFBQTIzQXdJdUJnRUJaVllBS3pRMEFQLy9BR0wrbFFVaUJ6Z0dKZ0F6QUFBQUp3Q2VBUW9CT0FFSEFLMEU5QUFBQUJlMEF6Z0dBUUc0LzRtM1ZnSXZFUUVCV2xZQUt6UXJOQUQvL3dBNC9wRUVIZ1lBQmlZQVV3QUFBQ1lBbmtrQUFRY0FyUVNCLy93QUY3UURPQkVCQWJqL2lMZFdBaThHQVFHWFZnQXJOQ3MwQVAvL0FGei82UVloQnpVR0pnQ1lBQUFCQndCMUFnd0JOUUFMdGdNNkhBRUJSMVlBS3pRQS8vOEFOUC9wQlBBR0FBWW1BSmtBQUFFSEFIVUJYUUFBQUF1MkF6WVFBUUdNVmdBck5BRC8vd0JjLytrR0lRYzFCaVlBbUFBQUFRY0FSQUZxQVRVQUM3WURQQndCQVVkV0FDczBBUC8vQURULzZRVHdCZ0FHSmdDWkFBQUJCd0JFQUxzQUFBQUx0Z000RUFFQmpGWUFLelFBLy84QVhQL3BCaUVIdUFZbUFKZ0FBQUVIQUtzRktRRThBQXUyQXpzY0FRRlhWZ0FyTkFELy93QTAvK2tFOEFhREJpWUFtUUFBQVFjQXF3UjZBQWNBQzdZRE54QUJBWnhXQUNzMEFQLy9BRnovNlFZaEJ5a0dKZ0NZQUFBQkJ3Q2xBUmNCTmdBTHRnTklIQUVCVVZZQUt6UUEvLzhBTlAvcEJQQUY5QVltQUprQUFBRUdBS1ZvQVFBTHRnTkVFQUVCbGxZQUt6UUEvLzhBWFA2VkJpRUdMUVltQUpnQUFBRUhBSzBFM2dBQUFBNjBBejBRQVFHNC80bXdWZ0FyTlAvL0FEVCtpd1R3QktvR0pnQ1pBQUFCQndDdEJIVC85Z0FPdEFNNUd3RUJ1UDkvc0ZZQUt6VC8vd0JZL3BVRk1RV3dCaVlBT1FBQUFRY0FyUVROQUFBQURyUUJHUVlCQWJqL2liQldBQ3MwLy84QVN2NlZCQzhFT2dZbUFGa0FBQUVIQUswRUhnQUFBQTYwQWg4TEFRRzQvNG13VmdBck5QLy9BRmovNkFVeEI3a0dKZ0E1QUFBQkJ3Q3JCUWNCUFFBTHRnRVhBQUVCY1ZZQUt6UUEvLzhBU3Yvb0JDOEdnd1ltQUZrQUFBRUhBS3NFY1FBSEFBdTJBaDBSQVFHd1ZnQXJOQUQvL3dCWS8ra0dwQWRDQmlZQW1nQUFBUWNBZFFJUEFVSUFDN1lDSUFvQkFXeFdBQ3MwQVAvL0FFci82QVZaQmVzR0pnQ2JBQUFCQndCMUFWZi82d0FMdGdNbUd3RUJpMVlBS3pRQS8vOEFXUC9wQnFRSFFnWW1BSm9BQUFFSEFFUUJiUUZDQUF1MkFpSUtBUUZzVmdBck5BRC8vd0JLLytnRldRWHJCaVlBbXdBQUFRY0FSQUMyLytzQUM3WURLQnNCQVl0V0FDczBBUC8vQUZqLzZRYWtCOFVHSmdDYUFBQUJCd0NyQlN3QlNRQUx0Z0loQ2dFQmZGWUFLelFBLy84QVN2L29CVmtHYmdZbUFKc0FBQUVIQUtzRWRmL3lBQXUyQXljYkFRR2JWZ0FyTkFELy93QlkvK2tHcEFjMkJpWUFtZ0FBQVFjQXBRRWFBVU1BQzdZQ0xoVUJBWFpXQUNzMEFQLy9BRXIvNkFWWkJkOEdKZ0NiQUFBQkJnQ2xZK3dBQzdZRE5Cc0JBWlZXQUNzMEFQLy9BRmorakFha0JnTUdKZ0NhQUFBQkJ3Q3RCTzcvOXdBT3RBSWpFQUVCdVArQXNGWUFLelQvL3dCSy9wVUZXUVNXQmlZQW13QUFBUWNBclFSckFBQUFEclFES1JVQkFiai9pYkJXQUNzMC8vOEFvZjZuQlZBRnNBWW1BRDBBQUFFSEFLMEVwUUFTQUE2MEFRd0dBUUc0LzNhd1ZnQXJOUC8vLzd6K0R3UVpCRG9HSmdCZEFBQUJCd0N0QlEzL2VnQU90QUlpQ0FBQXVQKzVzRllBS3pULy93Q2hBQUFGVUFlNUJpWUFQUUFBQVFjQXF3VGVBVDBBQzdZQkNnSUJBWEJXQUNzMEFQLy8vN3orUndRWkJvTUdKZ0JkQUFBQkJ3Q3JCRHdBQndBTHRnSWFBUUVCc0ZZQUt6UUEvLzhBb1FBQUJWQUhLZ1ltQUQwQUFBRUhBS1VBekFFM0FBdTJBUmNJQVFGcVZnQXJOQUQvLy8rOC9rY0VHUVgwQmlZQVhRQUFBUVlBcFNrQkFBdTJBaWNZQVFHcVZnQXJOQUQvLy8vMC9yQUZGQVlBQkNZQVNBQUFBQ2NDTmdIWUFqOEJCd0JEQUh2L2JBQVh0QVEzRmdFQnVQOTN0MVlETWdzQkFZTldBQ3MwS3pRQS8vOEFuZjZhQlNVRnNBWW1BRGdBQUFFSEFtRUNOQUFBQUF1MkFnc0NBQUNhVmdBck5BRC8vd0JVL3BvRURBUTZCaVlBOWdBQUFRY0NZUUhSQUFBQUM3WUNDd0lBQUpwV0FDczBBUC8vQU1UK21nVmRCYkFHSmdEaEFBQUJCd0poQXJnQUFBQUx0Z0lkR1FFQW1sWUFLelFBLy84QWJmNmFCQmdFT3dZbUFQa0FBQUVIQW1FQnVRQUFBQXUyQWhzQ0FRQ2FWZ0FyTkFELy93QXIvcG9FckFXd0JpWUFzUUFBQVFjQ1lRRDFBQUFBQzdZQkNRUUFBSnBXQUNzMEFQLy9BQmIrbWdPSUJEb0dKZ0RzQUFBQkJ3SmhBTnNBQUFBTHRnRUpCQUFBbWxZQUt6UUEvLzhBVmY0OUJic0Z4Z1ltQVV3QUFBRUhBbUVDdWYrakFBdTJBam9LQUFCclZnQXJOQUQvLy8veS9rUUVjd1JSQmlZQlRRQUFBUWNDWVFIUi82b0FDN1lDT1FrQUFHdFdBQ3MwQVAvL0FBMEFBQVB5QmdBR0JnQk1BQUFBQWdBay8vOEVpQVd3QUJnQUhBQWFRQXdjR3hnQUFBc01BbklPQ3dnQVB6TXJFamt2TTh3eU1ERkJCUjRDQnc0REp5RVRNd01GTWpZMk56WW1KaWNsQVFjaE53Rm5BVldEMUhVTUNXU2d4bXY5NXZ6MjJ3RUtVb3RiREFrd1pVZitqZ0dVSHYxekhnT0JBUU5rd0l4enJYUTZBUVd3K3hjQlBuWlZTV2MzQXdFQ05hZW5BQUFDQUNULy93U0lCYkFBR0FBY0FCbEFDeHdiR0FBQUN3d0NEZ3NJQUQ4elB4STVMelBNTWpBeFFRVWVBZ2NPQXljaEV6TURCVEkyTmpjMkppWW5KUUVISVRjQlp3RlZnOVIxREFsa29NWnIvZWI4OXRzQkNsS0xXd3dKTUdWSC9vNEJsQjc5Y3g0RGdRRURaTUNNYzYxME9nRUZzUHNYQVQ1MlZVbG5Od01CQWpXbnB3QUNBQUFBQUFTc0JiQUFCUUFKQUJaQUNnWUhCd1FDQlFKeUJBZ0FQeXN5RWprdk16QXhRUWNoQXlNVEFRY2hOd1NzSS8xeDJ2WDlBWU1lL1hNZUJiREkreGdGc1AyWHBxWUFBQUwveHdBQUE0Z0VPZ0FGQUFrQUZrQUtDUWdJQkFJRkJuSUVDZ0EvS3pJU09TOHpNREZCQnlFREl4TUJCeUUzQTRnaS9qYWI2N3dCb0IzOWNoNEVPc0Q4aGdRNi9qK25wd0FBQkFBL0FBQUZpZ1d3QUFNQUNRQU5BQkVBSzBBVkRBc0xCd2NHRUJFR0VRWVJBZ2tEQW5JS0FnaHlBQ3N5S3pJUk9Ua3ZMeEV6RVRNU09SRXpNREZCQXlNVElRRWhOek1CQXdFM0FRRUhJVGNDTWYzMS9RUk8vVEwrb0FYcEFnYTgvcVMyQWIzK1J4NzljeDRGc1BwUUJiRDh3dG9DWlBwUUFxUzMvS1VFNTZlbkFBUUFLQUFBQkZvR0FBQURBQWtBRFFBUkFDMUFGd1FHY2d3TEN3Y0hCaEFSQmhFR0VRSURBSElLQWdweUFDc3lLeEU1T1M4dkVUTVJNeEk1RVRNck1ERkJBU01KQWlFbk13RURBemNCQXdjaE53SWUvdlhyQVFzREovM3AvdUFqM3dGWWdmYXVBVXpiSHYxekhnWUErZ0FHQVA0Ni9hRy9BYUQ3eGdJRm9QMWJCV09tcGdBQUFnQ2hBQUFGVUFXd0FBZ0FEQUFkUUE4TUFRUUhBd3NMQmdNSUFuSUdDSElBS3lzeUVUa3ZGemt6TURGQkV3RWhBUU1qRXdFQkJ5RTNBYWJPQWNBQkhQMThXL2RnL3NjREdSNzlkQjBGc1AxTEFyWDhYUDMwQWlVRGkvejhwNmNBQkFCUy9sOEVNQVE2QUFNQUNBQU5BQkVBRjBBTEVSQVFBZ1VOQm5JQ0RuSUFLeXN5RWprdk16QXhaUU1qRXpjQk13RWpFeE1ISXdNQkJ5RTNBaHRjN0Z5R0FYNzkvZENtQjI0Sm1iZ0NpQjc5Y3gxdC9mSUNEcUVETFB2R0JEcjh0L0VFT3Z4c3BxWUFBQUwvd0FBQUJVWUZzQUFMQUE4QUgwQVBEd2NGQVFRS0F3NE9DUVVEQUFKeUFDc3lMek01THhjNUVqa3pNREZCRXdFaEFRRWhBd0VoQ1FJSElUY0J5ZGdCZmdFbi9kc0JQLzd3M3Y1NC90WUNNdjdKQXlrZS9YTWVCYkQ5N3dJUi9TUDlMUUljL2VRQzZnTEcvWTJucHdBQy83b0FBQVFTQkRvQUN3QVBBQjlBRHc4SEJRRUtCQU1PRGdrRkF3QUdjZ0FyTWk4ek9TOFhPUkk1TXpBeFFSTUJJUUVUSXdNQklRRURBUWNoTndGeGpnRUVBUS8rWisvMW0vN3gvdkVCcU9ZQ3pSNzljeDRFT3Y2YkFXWDk0ZjNsQVhYK2l3SXlBZ2orUmFhbS8vOEFLUC9xQkFRRVR3WUdBTDhBQVAvLy84SUFBQVNwQmJBR0pnQXFBQUFCQndJMi96SCtaUUFPdEFNT0FnSUF1QUVJc0ZZQUt6VC8vd0I4QW5BRjNnTXhCZ1lCZ2dBQS8vOEFEUUFBQkR3Rnh3WUdBQllBQVAvL0FDYi82Z1E0QmNjR0JnQVhBQUQvL3dBTkFBQUVLd1d3QmdZQUdBQUEvLzhBV1Avb0JITUZzQVlHQUJrQUFQLy9BSEgvNlFRaUJib0VCZ0FhRkFELy93QkwvK2tFVmdYSEJBWUFIQlFBLy84QWpQLzJCQ3dGeHdRR0FCMEFBUC8vQUhQLzZBUk1CY2dFQmdBVUZBRC8vd0JtLytzRkZ3ZExCaVlBS3dBQUFRY0FkUUg5QVVzQUM3WUJMQkFCQVcxV0FDczBBUC8vLy9uK1VRUkNCZ0FHSmdCTEFBQUJCd0IxQVVVQUFBQUx0Z00vR2dFQmpGWUFLelFBLy84QUpnQUFCWVlITndZbUFESUFBQUVIQUVRQmZ3RTNBQXUyQVF3SkFRRmhWZ0FyTkFELy93QU5BQUFEOGdZQUJpWUFVZ0FBQVFjQVJBQzNBQUFBQzdZQ0hnTUJBYUJXQUNzMEFQLy8vNk1BQUFTckJ5RUdKZ0FsQUFBQkJ3Q3NCSTRCTXdBTnR3UUREZ01CQVdaV0FDczBOQUQvL3dBYy8ra0QwUVhyQmlZQVJRQUFBUWNBckFQbi8vMEFEYmNEQWp3UEFRR1JWZ0FyTkRRQS8vOEFKZ0FBQkx3SEtBWW1BQ2tBQUFFSEFLd0VXd0U2QUEyM0JRUVJCd0VCY1ZZQUt6UTBBUC8vQURyLzZ3UHdCZXNHSmdCSkFBQUJCd0NzQTlELy9RQU50d0lCTFFzQkFaRldBQ3MwTkFELy8vL1BBQUFDd3djb0JpWUFMUUFBQVFjQXJBTVRBVG9BRGJjQ0FRVURBUUZ4VmdBck5EUUEvLy8vZ0FBQUFuUUY0Z1ltQUkwQUFBRUhBS3dDeFAvMEFBMjNBZ0VGQXdFQm8xWUFLelEwQVAvL0FHTC82UVVpQnlNR0pnQXpBQUFCQndDc0JLVUJOUUFOdHdNQ0xSRUJBVlJXQUNzME5BRC8vd0E0LytrRUhnWHJCaVlBVXdBQUFRY0FyQVBsLy8wQURiY0RBaTBHQVFHUlZnQXJORFFBLy84QUpnQUFCTlVISVFZbUFEWUFBQUVIQUt3RVFnRXpBQTIzQXdJZkFBRUJabFlBS3pRMEFQLy9BQXdBQUFNQUJlc0dKZ0JXQUFBQkJ3Q3NBMUQvL1FBTnR3TUNHQU1CQWFWV0FDczBOQUQvL3dCWS8rZ0ZNUWNoQmlZQU9RQUFBUWNBckFTQ0FUTUFEYmNDQVJjTEFRRm1WZ0FyTkRRQS8vOEFTdi9vQkM4RjZ3WW1BRmtBQUFFSEFLd0Q3UC85QUEyM0F3SWRFUUVCcFZZQUt6UTBBUC8vLzRVQUFBVjdCajhFSmdEUVpBQUFCd0N1L2svLy8vLy9BQ2IrbndTM0JiQUdKZ0FtQUFBQkJ3Q3RCSkFBQ2dBT3RBSTBHd0VCdVA5L3NGWUFLelQvL3dBUS9vc0VFUVlBQmlZQVJnQUFBUWNBclFTbi8vWUFEclFETXdRQkFiai9hN0JXQUNzMC8vOEFKdjZmQk5rRnNBWW1BQ2dBQUFFSEFLMEVhUUFLQUE2MEFpSWRBUUc0LzMrd1ZnQXJOUC8vQURqK2xRU0hCZ0FHSmdCSUFBQUJCd0N0QklzQUFBQU90QU16RmdFQnVQK0pzRllBS3pULy93QW0vZ1lFMlFXd0JpWUFLQUFBQVFjQnlnRDgvcUlBRHJRQ0tCMEJBYmovbDdCV0FDczAvLzhBT1AzOEJJY0dBQVltQUVnQUFBRUhBY29CSGY2WUFBNjBBemtXQVFHNC82R3dWZ0FyTlAvL0FDYitud1dGQmJBR0pnQXNBQUFCQndDdEJRQUFDZ0FPdEFNUENnRUJ1UDkvc0ZZQUt6VC8vd0FOL3A4RDhnWUFCaVlBVEFBQUFRY0FyUVI5QUFvQURyUUNIZ0lCQWJqL2Y3QldBQ3MwLy84QUpnQUFCWElITXdZbUFDOEFBQUVIQUhVQnBnRXpBQXUyQXc0REFRRmJWZ0FyTkFELy93QVJBQUFFZWdjOUJpWUFUd0FBQVFjQWRRR3RBVDBBQzdZRERnTUJBQnRXQUNzMEFQLy9BQ2IrNFFWeUJiQUdKZ0F2QUFBQkJ3Q3RCTXdBVEFBT3RBTVJBZ0VCdVAvUHNGWUFLelQvL3dBUi9zMEVUZ1lBQmlZQVR3QUFBUWNBclFSaEFEZ0FEclFERVFJQkFiai92TEJXQUNzMC8vOEFKdjZmQThBRnNBWW1BREFBQUFFSEFLMEVsUUFLQUE2MEFnc0NBUUc0LzMrd1ZnQXJOUC8vLytQK253SVdCZ0FHSmdCUUFBQUJCd0N0QTBJQUNnQU90QUVIQWdFQnVQOS9zRllBS3pULy93QW0vcDhHemdXd0JpWUFNUUFBQVFjQXJRV3BBQW9BRHJRREZBWUJBYmovZjdCV0FDczAvLzhBRC82ZkJtRUVVUVltQUZFQUFBRUhBSzBGcndBS0FBNjBBellDQVFHNC8zK3dWZ0FyTlAvL0FDYittd1dHQmJBR0pnQXlBQUFCQndDdEJRSUFCZ0FPdEFFTkFnRUJ1UDkvc0ZZQUt6VC8vd0FOL3A4RDhnUlJCaVlBVWdBQUFRY0FyUVJ0QUFvQURyUUNId0lCQWJqL2Y3QldBQ3MwLy84QVl2L3BCU0lIM2dZbUFETUFBQUVIQWtZRkZBRlZBQTIzQXdJeEVRRUJXbFlBS3pRMEFQLy9BQ1lBQUFUNkIwSUdKZ0EwQUFBQkJ3QjFBYW9CUWdBTHRnRVlEd0VCYkZZQUt6UUEvLy8veVA1Z0JHb0Y5Z1ltQUZRQUFBRUhBSFVCbmYvMkFBdTJBekFEQVFHV1ZnQXJOQUQvL3dBbS9wOEUxUVd3QmlZQU5nQUFBUWNBclFTV0FBb0FEclFDSVJnQkFiai9mN0JXQUNzMC8vLy8zZjZnQXZJRVV3WW1BRllBQUFFSEFLMERQQUFMQUE2MEFob0NBUUc0LzRDd1ZnQXJOUC8vQUNiK2xBUzlCY1lHSmdBM0FBQUJCd0N0QkxILy93QU90QUU5S3dFQnVQK0lzRllBS3pULy93QWIvb3NEd1FSUEJpWUFWd0FBQVFjQXJRUmEvL1lBRHJRQk9Ta0JBYmovZjdCV0FDczAvLzhBbmY2WkJTVUZzQVltQURnQUFBRUhBSzBFb1FBRUFBNjBBZ3NDQVFHNC8zV3dWZ0FyTlAvL0FELytsUUt1QlVNR0pnQllBQUFCQndDdEEvQUFBQUFPdEFJWkVRRUJ1UCtKc0ZZQUt6VC8vd0JZLytnRk1RZmNCaVlBT1FBQUFRY0NSZ1R4QVZNQURiY0NBUnNBQVFGc1ZnQXJORFFBLy84QW1nQUFCWDhITmdZbUFEb0FBQUVIQUtVQTNnRkRBQXUyQWhnSkFRRjJWZ0FyTkFELy93QmtBQUFFRWdYcUJpWUFXZ0FBQVFZQXBSdjNBQXUyQWhnSkFRR2dWZ0FyTkFELy93Q2EvcDhGZndXd0JpWUFPZ0FBQVFjQXJRVFNBQW9BRHJRQ0RRUUJBYmovZjdCV0FDczAvLzhBWlA2ZkJCSUVPZ1ltQUZvQUFBRUhBSzBFUVFBS0FBNjBBZzBFQVFHNC8zK3dWZ0FyTlAvL0FMWCtud2M2QmJBR0pnQTdBQUFCQndDdEJjRUFDZ0FPdEFRWkV3RUJ1UDkvc0ZZQUt6VC8vd0I1L3A4RjlBUTZCaVlBV3dBQUFRY0FyUVVsQUFvQURyUUVHUk1CQWJqL2Y3QldBQ3MwLy8vLzVmNmZCT3NGc0FZbUFENEFBQUVIQUswRW9RQUtBQTYwQXhFQ0FRRzQvMyt3VmdBck5QLy8vK2IrbndQa0JEb0dKZ0JlQUFBQkJ3Q3RCRVFBQ2dBT3RBTVJBZ0VCdVA5L3NGWUFLelQvLy84Qi8ra0ZhQVhYQkNZQU0wWUFBUWNCY2Y0Wi8vOEFEYmNEQWk0UkFBQVNWZ0FyTkRRQS8vLy9tZ0FBQkFFRkhBWW1Ba01BQUFBSEFLNy9NdjdjLy8vL3BnQUFCRGNGSHdRbUFqZzhBQUFIQUs3K2NQN2YvLy8vcmdBQUJPVUZHZ1FtQWZROEFBQUhBSzcrZVA3YS8vLy9zUUFBQWdzRkh3UW1BZk04QUFBSEFLNytlLzdmLy8vLzJQL3RCR0lGSEFRbUFlMEtBQUFIQUs3K292N2MvLy8vWlFBQUJMNEZIQVFtQWVNOEFBQUhBSzcrTC83Yy8vLy82Z0FBQkhzRkhBUW1BZ01LQUFBSEFLNyt0UDdjLy8vL21nQUFCQUVFalFZR0FrTUFBUC8vQUFuLy93UUFCSTBHQmdKQ0FBRC8vd0FKQUFBRCt3U05CZ1lDT0FBQS8vLy8xZ0FBQkNvRWpRWUdBZUlBQVAvL0FBa0FBQVNwQkkwR0JnSDBBQUQvL3dBYUFBQUJ6d1NOQmdZQjh3QUEvLzhBQ1FBQUJKMEVqUVlHQWZFQUFQLy9BQWtBQUFYSUJJMEdCZ0h2QUFELy93QUpBQUFFcUFTTkJnWUI3Z0FBLy84QU8vL3RCRmdFb0FZR0FlMEFBUC8vQUFrQUFBUXdCSTBHQmdIc0FBRC8vd0JqQUFBRVhnU05CZ1lCNkFBQS8vOEFiQUFBQklJRWpnWUdBZU1BQVAvLy82SUFBQVI5QkkwR0JnSGtBQUQvL3dBYUFBQUMzUVh0QmlZQjh3QUFBUWNBYXY5UUFCNEFEYmNDQVEwREFRR0VWZ0FyTkRRQS8vOEFiQUFBQklJRjdRWW1BZU1BQUFFR0FHcGhIZ0FOdHdRREZ3a0JBWU5XQUNzME5BRC8vd0FKQUFBRCt3WHRCaVlDT0FBQUFRWUFhbW9lQUEyM0JRUVpCd0VCZzFZQUt6UTBBUC8vQUFrQUFBUDRCaDRHSmdINkFBQUJCd0IxQVNzQUhnQUx0Z0lJQXdFQmcxWUFLelFBLy84QUQvL3VBLzRFbmdZR0Fla0FBUC8vQUJvQUFBSFBCSTBHQmdIekFBRC8vd0FhQUFBQzNRWHRCaVlCOHdBQUFRY0FhdjlRQUI0QURiY0NBUTBEQVFHRVZnQXJORFFBLy8vLzgvL3RBNjhFalFZR0FmSUFBUC8vQUFrQUFBU2RCaDRHSmdIeEFBQUJCd0IxQVNJQUhnQUx0Z01PQXdFQmhGWUFLelFBLy84QWR2L29CSWtHQmdZbUFoRUFBQUVIQUtFQWl3QWVBQXUyQWgwWEFRR0VWZ0FyTkFELy8vK2FBQUFFQVFTTkJnWUNRd0FBLy84QUNmLy9CQUFFalFZR0FrSUFBUC8vQUFrQUFBUGdCSTBHQmdINkFBRC8vd0FKQUFBRCt3U05CZ1lDT0FBQS8vOEFDd0FBQkswR0JnWW1BZzRBQUFFSEFLRUF3UUFlQUF1MkF4RUlBUUdFVmdBck5BRC8vd0FKQUFBRnlBU05CZ1lCN3dBQS8vOEFDUUFBQktrRWpRWUdBZlFBQVAvL0FEdi83UVJZQktBR0JnSHRBQUQvL3dBSkFBQUVwQVNOQmdZQi93QUEvLzhBQ1FBQUJEQUVqUVlHQWV3QUFQLy9BRG4vN1FSRUJLQUdCZ0pCQUFELy93QmpBQUFFWGdTTkJnWUI2QUFBLy8vL29nQUFCSDBFalFZR0FlUUFBQUFEQUE3K053UHJCSjhBSGdBK0FFSUFLRUFUSHdFQ0FqNCtGVDgwTkVBd0tndHlEd3NWZmdBL004d3J6TTB6RWprU09TOHpFams1TURGQkp6Y1hQZ0kzTmlZbUl5WUdCZ2NIUGdNWEhnTUhEZ01uRng0REJ3NERKeTRETnhjZUFoY1dOalkzTmk0Q0p5Y1RBeU1UQWk3Q0ZvRTNha29JQ0RSWUxqRlhRUXp0QjFXRW5WQkprM3BHQkFOVWdwZitwVVNLY1VJRUJWK1RyVlZRazNGQUF1Z0JNVkkwT1hKU0NRWWFOa2tvbDdKZDdGNENLd0Y5QVFFZFJ6ODJRUnNCR3p3eEFWaCtUeVFCQVNGR2QxZFVlRXdsUndFQklFUnZVbUdHVWlRQ0FTcFVnVmtCTjBNZEFRRWdTa0F2UHlRUkFRSCtVdjNuQWhrQUFBUUFDZjZhQkxrRWpRQURBQWNBQ3dBUEFCMUFEUU1DQWdZTEIzMFBEZ29LQmhJQVB6TVF6ak0vTXhJNUx6TXdNVUVISVRjVEF5TVRJUU1qRXhNREl4TURweUg5ZmlLWnl1ekxBOVhMNnNyN1h1eGVBcDNBd0FIdyszTUVqZnR6QkkzOEp2M25BaGtBQWdBNS9rQUVSQVNnQUNjQUt3QVlRQXNaRUg0b0pDUXFLZ1VMY2dBck1pOHlFVE0vTXpBeFFUY09BaWN1QXpjM1BnTVhIZ0lYSXk0Q0p5WU9BZ2NIQmg0Q0Z4WTJOZ2NESXhNRERPb1VtT09DZDZwbUpRd0tEbHlWeVh5QXZXd0k2Z0l0WFVkUWRrOHdDUW9IQXlWVlRFdHlUS0JlNjEwQmd3R0Z0MXNEQWx5Y3gyMVBjODZjVmdNQ1k3aC9SbUUwQXdJOWJJVkZVVHQvYlVZQ0F5OWg0djNuQWhrQS8vOEFiQUFBQklJRWpnWUdBZU1BQVAvL0FEditOd1dVQktjR0pnSW5BQUFBQndKaEFyLy9uZi8vQUFzQUFBU3RCY3NHSmdJT0FBQUJCd0J3QUk4QUlRQUx0Z01PQ0FFQnNGWUFLelFBLy84QWR2L29CSWtGeXdZbUFoRUFBQUVHQUhCWklRQUx0Z0lhRndFQnNGWUFLelFBLy84QVFRQUFCVFFFalFZR0FnRUFBUC8vQUJyLzdRV2VCSTBFSmdIekFBQUFCd0h5QWU4QUFQLy8vMzRBQUFZUEJnQUdKZ0tFQUFBQkJ3QjFBbmtBQUFBTHRnWVpEd0VCVFZZQUt6UUEvLy8vMi8vSEJMc0dIZ1ltQW9ZQUFBRUhBSFVCZWdBZUFBdTJBekFSQVFGYlZnQXJOQUQvL3dBUC9md0QvZ1NlQmlZQjZRQUFBQWNCeWdEMy9wai8vd0NMQUFBR0hnWWVCaVlCNVFBQUFRY0FSQUY0QUI0QUM3WUVHQW9CQVd0V0FDczBBUC8vQUlzQUFBWWVCaDRHSmdIbEFBQUJCd0IxQWhvQUhnQUx0Z1FXQ2dFQmExWUFLelFBLy84QWl3QUFCaDRGN1FZbUFlVUFBQUVIQUdvQlF3QWVBQTIzQlFRZkNnRUJoRllBS3pRMEFQLy9BR3dBQUFTQ0JoNEdKZ0hqQUFBQUJ3QkVBSmNBSHYvLy82UCtXQVNyQmJBR0pnQWxBQUFCQndDa0FXc0FBd0FMdGdNT0JRRUJPVllBS3pRQS8vOEFIUDVkQTlFRVVBWW1BRVVBQUFFSEFLUUFwZ0FJQUF1MkFqc3hBQUJOVmdBck5BRC8vd0FtL2w4RXZBV3dCaVlBS1FBQUFRY0FwQUV3QUFvQUM3WUVFQUlBQUVOV0FDczBBUC8vQURyK1ZRUHdCRkVHSmdCSkFBQUJCd0NrQVAwQUFBQUx0Z0VzQUFBQVRWWUFLelFBLy8vL212NVZCQUVFalFZbUFrTUFBQUFIQUtRQkR3QUEvLzhBQ2Y1ZEEvc0VqUVltQWpnQUFBQUhBS1FBNEFBSS8vLy80LzZmQWNvRU9nWW1BSTBBQUFFSEFLMERRZ0FLQUE2MEFRY0NBUUc0LzMrd1ZnQXJOQUFBQUFBQUVRRFNBQU1BQVFRSkFBQUFYZ0FBQUFNQUFRUUpBQUVBR2dCZUFBTUFBUVFKQUFJQURBQjRBQU1BQVFRSkFBTUFLQUNFQUFNQUFRUUpBQVFBS0FDRUFBTUFBUVFKQUFVQUpnQ3NBQU1BQVFRSkFBWUFKZ0RTQUFNQUFRUUpBQWNBUUFENEFBTUFBUVFKQUFnQURBRTRBQU1BQVFRSkFBa0FKZ0ZFQUFNQUFRUUpBQXNBRkFGcUFBTUFBUVFKQUF3QUZBRnFBQU1BQVFRSkFBMEFYQUYrQUFNQUFRUUpBQTRBVkFIYUFBTUFBUVFKQUJBQURBSXVBQU1BQVFRSkFCRUFHZ0k2QUFNQUFRUUpBQmtBREFJdUFFTUFid0J3QUhrQWNnQnBBR2NBYUFCMEFDQUFNZ0F3QURFQU1RQWdBRWNBYndCdkFHY0FiQUJsQUNBQVNRQnVBR01BTGdBZ0FFRUFiQUJzQUNBQVVnQnBBR2NBYUFCMEFITUFJQUJTQUdVQWN3QmxBSElBZGdCbEFHUUFMZ0JTQUc4QVlnQnZBSFFBYndBZ0FFMEFaUUJrQUdrQWRRQnRBRWtBZEFCaEFHd0FhUUJqQUZJQWJ3QmlBRzhBZEFCdkFDQUFUUUJsQUdRQWFRQjFBRzBBSUFCSkFIUUFZUUJzQUdrQVl3QldBR1VBY2dCekFHa0Fid0J1QUNBQU13QXVBREFBTUFBMUFEc0FJQUF5QURBQU1nQXlBRklBYndCaUFHOEFkQUJ2QUMwQVRRQmxBR1FBYVFCMUFHMEFTUUIwQUdFQWJBQnBBR01BVWdCdkFHSUFid0IwQUc4QUlBQnBBSE1BSUFCaEFDQUFkQUJ5QUdFQVpBQmxBRzBBWVFCeUFHc0FJQUJ2QUdZQUlBQkhBRzhBYndCbkFHd0FaUUF1QUVjQWJ3QnZBR2NBYkFCbEFFTUFhQUJ5QUdrQWN3QjBBR2tBWVFCdUFDQUFVZ0J2QUdJQVpRQnlBSFFBY3dCdkFHNEFSd0J2QUc4QVp3QnNBR1VBTGdCakFHOEFiUUJNQUdrQVl3QmxBRzRBY3dCbEFHUUFJQUIxQUc0QVpBQmxBSElBSUFCMEFHZ0FaUUFnQUVFQWNBQmhBR01BYUFCbEFDQUFUQUJwQUdNQVpRQnVBSE1BWlFBc0FDQUFWZ0JsQUhJQWN3QnBBRzhBYmdBZ0FESUFMZ0F3QUdnQWRBQjBBSEFBT2dBdkFDOEFkd0IzQUhjQUxnQmhBSEFBWVFCakFHZ0FaUUF1QUc4QWNnQm5BQzhBYkFCcEFHTUFaUUJ1QUhNQVpRQnpBQzhBVEFCSkFFTUFSUUJPQUZNQVJRQXRBRElBTGdBd0FGSUFid0JpQUc4QWRBQnZBRTBBWlFCa0FHa0FkUUJ0QUNBQVNRQjBBR0VBYkFCcEFHTUFBQUFEQUFELzlBQUEvMm9BWkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBZ0FJQUFqLy93QVBBQUVBQWdBT0FBQUFBQUFBQWlnQUFnQlpBQ1VBUGdBQkFFUUFYZ0FCQUdvQWFnQUJBSEFBY0FBQkFIVUFkUUFCQUlFQWdRQUJBSU1BZ3dBQkFJWUFoZ0FCQUlrQWlRQUJBSXNBbGdBQkFKZ0Fud0FCQUtFQW93QUJBS1VBcGdBQkFLZ0FyUUFEQUxFQXNRQUJBTG9BdXdBQkFMOEF2d0FCQU1FQXdRQUJBTU1BeEFBQkFNY0F4d0FCQU1zQXl3QUJBTTBBemdBQkFOQUEwUUFCQU5NQTB3QUJBTm9BM2dBQkFPRUE0UUFCQU9VQTVRQUJBT2NBNlFBQkFPc0Erd0FCQVAwQS9RQUJBUDhCQVFBQkFRTUJBd0FCQVFnQkNRQUJBUllCR2dBQkFSd0JIQUFCQVNBQklnQUJBU1FCSndBREFTb0JLd0FCQVRNQk5BQUJBVFlCTmdBQkFUc0JQQUFCQVVFQlJBQUJBVWNCU0FBQkFVc0JUUUFCQVZFQlVRQUJBVlFCV0FBQkFWMEJYZ0FCQVdJQllnQUJBV1FCWkFBQkFXZ0JhQUFCQVdvQmJBQUJBVzRCYmdBQkFYQUJjQUFCQWNzQjBRQUNBZUlCOWdBQkFmb0IrZ0FCQWdNQ0F3QUJBZ1VDQlFBQkFnd0NEZ0FCQWhBQ0VRQUJBaE1DRXdBQkFoY0NGd0FCQWhrQ0d3QUJBaUVDSVFBQkFpWUNLQUFCQWlvQ0tnQUJBamdDT0FBQkFqc0NPd0FCQWowQ1BRQUJBa0FDUXdBQkFtOENjd0FCQW9NQ2lBQUJBb3NDOHdBQkF2WUR0UUFCQTdjRHR3QUJBN2tEd3dBQkE4VUR6Z0FCQTlBRDZ3QUJBKzhEN3dBQkEvRUQrQUFCQS9vRC9BQUJBLzhFQXdBQkJBVUVrQUFCQkpNRWxBQUJCSllFbHdBQkJKa0VuQUFCQktZRkFnQUJCUVFGRGdBQkJSRUZIZ0FCQUFFQUF3QUFBQkFBQUFBV0FBQUFJQUFCQUFFQXJRQUNBQUVBcUFDc0FBQUFBZ0FDQUtnQXJBQUFBU1FCSndBRkFBRUFBQUFlQUJBQUNnQUNBQzRBTmdBQ1kzQnpjQUE2YTJWeWJnQkFBQVJFUmt4VUFEaGplWEpzQURobmNtVnJBRGhzWVhSdUFEZ0FBUUFBQUFFQUlnQUNBQWdBQWdBdUJCQUFBQUFCQUFBQUFBQUJBQUVBRGdBQUFBRVBBZ0FGQUNRQVNBQUEvLzhBQWdBQUFBRUFBVXVNQUFRQUFBSHNFOXdSQkJFRUY3UVE1aGRhRVZRUmtoSmtFWFpIN2hLa0VxUVZ4QkcyRXFRU3BCSmtFc1lna0JsUUg4WVJwQkhNRndBWTNoSGlGTzRTZ2hJc0VVQXA1QkVpSnNJUlhoRmVFdzRTTEJHRUdIZ1NSaEg0RVFvU1JoVTBFaXdTWkJuR0h3QVhXaEprRjFvbHhDZkVJd29kbUJEc0VrWVJMRDU0RVY0MzhpVFNLTVlTRWhEeUVQaEJZaEQrRkhZVUNocElPZVF0cGpSQ0xGZ1NwRERxUEJZWEFDRmVFcVFTcEJWNkVxUVNwQktrTXBRYTBoS2tFN0llT2h4MEdCWWo3QjBHRVVvaU5CRUtFelEyR0VSZ0Vpd1VzQ3NhRzF3UzZCSXNHK1lUWGhhcUZFQVM2QmRhRXc0UnBCSkdFNGdTTEI4QUVVb1hBQkVLRmNRVnhCWEVFcVFYQUJFS0VxUVNwQkprRVVvWEFCRUtFUVF2U0JFRUVRUVJCQkVjRmc0V1hCRVdFVFlSRUJFV0VSQVJhQkVRRVpJU1pCSmtFbVFTWkIvR0Yxb1hXaGRhRjFvWFdoZGFGMW9Sa2hGMkVYWVJkaEYyRXFRU3BCS2tFcVFTcEJKa0VtUVNaQkprRW1RWTNoS0NFb0lTZ2hLQ0VvSVNnaEtDRVVBUlFCRkFFVUFSWGhNT0V3NFREaE1PRXc0U1JoSkdGMW9TZ2hkYUVvSVhXaEtDRVpJUmtoR1NFWklTWkJGMkVVQVJkaEZBRVhZUlFCRjJFVUFSZGhGQUVxUVJYaEtrRXFRU3BCS2tFcVFWeEJHMkViWVJ0aEcyRXFRUlhoS2tFVjRTcEJGZUVWNFNaQk1PRW1RVERoSmtFdzRSaEJHRUVZUWZ4aC9HSDhZUnpCamVFa1lZM2hIaUVlSVI0aEVXRVJZUkhCRVFFUkFSRUJFUUVSQVJFQkVRRVJZUkZoRVdFUllSRmhFUUVSQVJFQkVXRVRZUk5oRTJFVFlSRmhFV0VSWVJIQmRhRVhZU3BCS2tFbVFZM2hkYUVWUVJkaEhpRXFRU3BCWEVFcVFTcEJKa0VzWWZ4aGplRndBU3BCamVFVjRURGhKR0V3NFJkaDhBRXFRU3BCWEVGY1FWZWhkYUVWUWZBQkYyRXFRU3BCSmtFc1lSa2gvR0Z3QVNnaEZBRXc0U0xCSkdFUW9SUUJGS0VrWVJ6QkhNRWN3WTNoSkdFUVFSQkJFRUVxUVJYaGRhRW9JUmRoRkFFYVFTUmhHU0dONFNSaEtrRndBUkNoS2tGMW9TZ2hkYUVvSVJkaEZBRVVBUlFCY0FFUW9TWkJNT0V3NFNMQlY2RWtZVmVoSkdGWG9TUmhkYUVvSVhXaEtDRjFvU2doZGFFb0lYV2hLQ0Yxb1NnaGRhRW9JWFdoS0NGMW9TZ2hkYUVvSVhXaEtDRjFvU2doRjJFVUFSZGhGQUVYWVJRQkYyRVVBUmRoRkFFWFlSUUJGMkVVQVJkaEZBRXFRU3BCSmtFdzRTWkJNT0VtUVREaEprRXc0U1pCTU9FbVFURGhKa0V3NFREaGplRWtZWTNoSkdHTjRTUmgvR0h3QVJTaEZlRTdJZkFCWEVHTjRTcEJGZUYxb1NnaEYyRXFRU1pCTU9FWVFSVkJJc0VtUVNaQktrRVY0VnhCWEVFYllTcEJGZUVxUVJYaEprRXNZU0xCR0VIOFlScEJKR0VhUVNSaEhNRWVJU1pCRVFFUllSRUJFY0VSQVJGaEVjQUFKTGJnQUVBQUJQRGxmS0FDWUFKUUFBQUFBQUFBQUFBQklBQUFBQUFBQUFBQUFBQUFBQUFQL2svK01BQUFBQUFCRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJBQUQvNUFBUi8rVUFBQUFBQUFBQUFBQUFBQUQvNndBQUFBQUFBQUFBQUFELzdRQUEvOVgvMEFBQUFBRC82Z0FBQUFBQUFBQUFBQUFBQVAvcC81UC85Zi9xQUFBQUFBQUEvK0VBQUFBQUFBQUFBQUFBQUFBQUFBQUEvL0gvN2dBQS8vVUFBUC8wLy9YL3pnQUEvKy8vamYrQy8vSC9pQUFBQUFEL3hBQUFBQUQveC8vR0FBQUFBQUFBLzYwQUFBQUFBQXdBRVFBQS84a0FFditzQUFELzNRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL3hBQUFBQUFBQUFBQUFBUC9QQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvN1FBQUFBQUFBQUFBQUFELzdmL3YvK1lBQUFBQUFBQUFGQUFBQUFBQUFBQUEvL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvKzBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvOHdBQUFBQUFBQUFBQUFELzhnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAveEFBQUFBQUFBQUFBQUFQK0tBQUFBQUFBQS8rc0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC84QUFBQUFBQUFQL3dBQUFBQUFBQUFBRC84d0FBQUFBQUFBQUEvL0gvOFFBQUFBQUFBQUFBQUFBQUFBQUFBQThBQUFBQUFBQUFBQUFBQUFBQUFBQUEvMzhBQUFBQUFBQUFBQUFBQUFBQUFBQUEvOWNBQUFBQUFBQUFBQUFBQUFBQUFQL3FBQUFBQUFBQUFBQUFBUC9yQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAraEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLytvQUFBQUEvKzRBQUFBQUFBRC83QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8vSUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8rd0FBQUFBQUFEL3Z3QUFBQUQvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzJBQUEvNy8vNC8vWS80My95Lys3LzcvLzJmL3MvNnYvb0FBU0FCRUFBQUFBQUEzL3hnQUEvK24vOFAvekFCRUFBUDhtLys4QUV2K25BQUQvNGdBQUFBQUFBQUFBQUFEL29QL3pBQUQvNXYvaC8vRUFBUC9uQUFELzVmL3AvOWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvNXNBQUFBQUFBQUFBQUFBQUFEL293QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvOVFBQUFBQUFBQUFBQUFELzR3QUFBQUFBQVAveEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8vRUFBQUFBQUFELzhnQUFBQUFBQUFBQS84VUFBUC9zLzRnQUFQL08vN2dBQUFBQUFBQUFBQUFBQUFBQUFQK3ZBQUQvckFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzR3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC9tLytjQUFBQUEvK2NBQVAvci8rdi80UUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNy9xZ0FBQUFBQUVRQUFBQUFBRWYvUkFBQUFBQUFBLzZILzVQK2EvNkwvdWY5Ny8zWC9yUCswLzY4QUFBQVFBQkFBQUFBQUFBRC9td0FBLzdQLzhQL3hBQThBQVA4WC8rMEFFUDhKLzd6L3hQL0xBQUFBQVA5Ky8zei9HZi94QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8vVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8rc0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvK3dBQUFBQUFBQUFBQUFBLytVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvU3YrOS96Ly9PZ0FBL3ovL1VQOWUvMndBQUFBQUFBY0FCd0FBQUFBQUFQOUFBQUQvYXYvUkFBQUFCUUFBL21FQUFBQUgva2tBQVArRy81SUFBQUFBL3cvL0RBQUFBQUFBQUFBQS83OEFBQUFULy9JQUFBQUEvOS8vZndBVC85WC9BdjhILytFQUFBQUFBQUQvYXdBQUFBRC9hLytEQUFBQUFBQUEvMFlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvcXdBQS8rRUFBQUFBLzlYLzUvL2YvK0gvN1FBQS84c0FBQUFBQUE0QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQOStBQUFBQVAvRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC82Ly9tQUFBQURmL3NBQUQvNi8vdC8rVUFEUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvTEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLyswQUFBQUFBQUFBQVAvYy8rWUFBQUFTQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQVA5ekFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzFQL3pBQUQvdGYvWi85TC8wdi9rLy9YL3RBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS95TUFBQUFBLzY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC83d0FBQUFBQUFBQUFBQUFBQUFBQUFBRC83QUFBQUFBQUFQKzBBQUFBQVArN0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL1ZBQUQvOEFBQUFBQUFBQUFBQUFELzhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC9yZjh6QUFEL3dQLzJBQUFBQVAvSkFBQUFBQUFBQUFBQUFBQUEvOGdBQUFBQUFBRC8rZi9yLytjQUFBQUFBQUFBQUFBQS83My82ZitoLzZVQUFQK2MvNzBBQUFBQUFBQUFBQUFTQUJJQUFBQUFBQUQvMGdBQUFBQUFBQUFBQUFBQUFQNXhBQUFBQVA5c0FBQUFBUC9LQUFBQUFQKzcvK2tBQUFBQUFBRC83QUFBQUFBQUFBQUFBQUQvN0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvOWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC96Z0FBQUFBQUFBQUFBQUQvZVFBQUFBQUFBUC94QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvZEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL0ovK1VBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC82QUFBQUFBQUFBQUEvL01BQUFBQUFBQUFBQUFBQUFELzh3QUFBQUQvWndBQS8vWC84d0FBQUEvL3JBQUFBQUFBQUFBQUFBRC8yZ0FBQUFBQUFBQUFBQUFBQVAvaS9wOEFBQUFBQUFBQUFBQUEvNmdBQUFBQS84Y0FBUDgrQUFBQUFRRDZBQWdBQ2dBVUFCVUFGZ0FYQUJnQUdRQWFBQnNBSEFBZEFDVUFKZ0FuQUNnQUtRQXFBQ3NBTEFBdEFDNEFMd0F3QURFQU1nQXpBRFFBTlFBMkFEY0FPQUE1QURvQU93QThBRDBBUGdCbEFHY0FnUUNEQUlRQWpBQ1BBSkVBa3dDeEFMSUFzd0MwQUxVQXRnQzNBTGdBdVFDNkFOSUEwd0RVQU5VQTFnRFhBTmdBMlFEYUFOc0EzQURkQU40QTN3RGdBT0VBNGdEakFPUUE1UURtQU9jQTZBRHBBUzhCTXdFMUFUY0JPUUU3QVVFQlF3RkZBVWtCU3dGTUFWZ0JXUUduQWEwQnNnRzFBb3NDakFLT0FwQUNrUUtTQXBNQ2xBS1ZBcFlDbHdLWUFwa0NtZ0tiQXB3Q25RS2VBcDhDb0FLaEFxSUNvd0trQXFVQ3BnS25BcWdDcVFLcUFzY0N5UUxMQXMwQ3p3TFJBdE1DMVFMWEF0a0Myd0xkQXQ4QzRRTGpBdVVDNXdMcEF1c0M3UUx2QXZFQzh3TDBBdllDK0FMNkF2d0MvZ01BQXdJREJBTUdBd2tEQ3dNTkF3OERFUU1UQXhVREZ3TVpBeHNESFFNZkF5RURJd01sQXljREtRTXJBeTBETHdNeEF6TUROUU0yQXpnRE9nTThBejREbHdPWUE1a0RtZ09iQTV3RG5RT2ZBNkFEb1FPaUE2TURwQU9sQTZZRHB3T29BNmtEcWdPckE2d0RyUU91QTc0RHZ3UEFBOEVEd2dQREE4UUR4UVBHQThjRHlBUEpBOG9EeXdQTUE4MER6Z1BQQTlBRDBRUFNBOU1ENUFQbUErZ0Q2Z1AvQkFFRUF3UVlCQjRFSkFTT0JKTUVsd1VZQlJvQUFRQVQveGNBQVFERUFBNEFBUUQyLzgwQUFRREtBQk1BQVFEMi85d0FBUUJiQUFzQUFRRWMvL0VBQVFIbS84Y0FBUUhtLy9FQUFRSG1BQTBBQWdEMi84Z0JoZituQUFJQXl2LzBBUGIvMkFBQ0FlYi90d0hyLy9BQUFnRDIvL1VCaGYrMkFBSUE3ZitsQVJ6LzdnQUNBUkVBQ3dGcy8rWUFBZ0QyLzhnQmhmK2hBQU1CNWYvMUFlYi83Z09SLy9VQUF3QksvKzRBVy8vcUFlYi84QUFEQUVvQUVRQllBRElBV3dBUkFBUUFEZi9tQUVILzlBQmgvKzhCVGYvdEFBUUFEUUFVQUVFQUVRQlcvK0lBWVFBVEFBVUFXLyt6QWViL2VRSHIvL0VCOWYveEFrSC84d0FGQUEwQUR3QkJBQXdBVnYvckFHRUFEZ0pCLytrQUJRQmIvK1VBdVAvTEFNMy81QUgxLytzQ1FmL3RBQVlBRVArRUFCTC9oQUdHLzRRQml2K0VBWTcvaEFHUC80UUFCZ0RLLytvQTdmL3VBUGIvdWdEKy8va0JPdi9zQVczLzdBQUdBTXIvNmdEdC8rNEE5disrQVA3LytRRTYvK3dCYmYvc0FBY0FTZ0FOQUw3LytRREdBQXNBeC8vcUFNb0FEQUR0LzhnQkhQL3hBQWNBZ2YvZkFMWC84d0MzLy9BQXhQL3FBTm4vM3dEbS8rQUJiUC9nQUFnQTl2L3dBUDcvK2dFSi8vRUJJUC96QVRyLzhRRmovL01CWmYvdEFXMy8zZ0FJQU5rQUZRRHRBQlVCU2Yva0FVci81UUZNLytRQll2L2pBV1QvNGdGcy8rUUFDQUJZQUE0QWdmOVdBTDcvK1FERS84UUF4Ly9hQU5uL2NRRHQvNTRCWC8vY0FBa0E5ditkQVA3LzZ3RUovOU1CSVAvYkFUci9QZ0ZLLzdvQlkvL3dBV1gvOGdGdC8xQUFDUURLLytvQTdmKzRBUGIvNXdFSi8vQUJJUC94QVRyLzZ3RmovL1VCYmYvc0FZWC9wQUFLQUFiLzlRQUwvL1VCaFAvMUFZWC85UUdILy9VQmlQLzFBWW4vOVFQcy8vVUQ3Zi8xQS9ELzlRQUtBQWIvMWdBTC85WUJoUC9XQVlYLzFnR0gvOVlCaVAvV0FZbi8xZ1BzLzlZRDdmL1dBL0QvMWdBS0FBYi82Z0FMLytvQmhQL3FBWVgvNmdHSC8rb0JpUC9xQVluLzZnUHMvK29EN2YvcUEvRC82Z0FLQU9iL3d3RDIvODhBL3Yvd0FUci96Z0ZKLytjQlRQL2ZBV0wvMFFGay8rd0JiUCtnQVczLzBRQUxBRGovMFFEUy85RUExdi9SQVRuLzBRRkYvOUVESC8vUkF5SC8wUU1qLzlFRDB2L1JCSWovMFFUUS85RUFEUUJjLy9JQVh2L3lBTzcvOGdFMC8vSUJSUC95QVY3LzhnTTMvL0lET2YveUF6di84Z1BiLy9JRUIvL3lCQlgvOGdUYS8vSUFEUUQyLzVvQStmL1dBUDcvOGdFSi85TUJJUC9iQVRyL1BnRkkvOVlCU3YrNkFXUC84QUZsLy9JQmJmOVFCQ3YvMWdTTC85WUFEZ0JjLyswQVh2L3RBTzcvN1FEMi83SUJOUC90QVVULzdRRmUvKzBETi8vdEF6bi83UU03LyswRDIvL3RCQWYvN1FRVi8rMEUydi90QUE4QTdRQVVBUElBRUFEMi8vQUErZi93QVA3LytnRUJBQkFCQkFBUUFUci83QUZJLy9BQlN2L2lBVkVBRUFGdC8vQUJjQUFRQkN2LzhBU0wvL0FBRVFBdS8rNEFPZi91QXFiLzdnS24vKzRDcVAvdUFxbi83Z0wyLys0REpmL3VBeWYvN2dNcC8rNERLLy91QXkzLzdnTXYvKzREdy8vdUJIUC83Z1IxLys0RTB2L3VBQkVBTHYvc0FEbi83QUttLyt3Q3AvL3NBcWovN0FLcC8rd0M5di9zQXlYLzdBTW4vK3dES2Yvc0F5di83QU10Lyt3REwvL3NBOFAvN0FSei8rd0VkZi9zQk5MLzdBQVNBTm4vcmdEbUFCSUE2Ly9nQU8zL3JRRHYvOVlBL2YvZkFRSC8wZ0VILytBQkhQL09BUzcvM1FFdy8rSUJPUC9nQVVELzRBRksvK2tCVGYvYUFWLy92UUZwLzk4QmJBQVJBQklBVy8vQkFMai94UURLLzdRQTZ2L1hBUGIvdVFEKy8ra0JDZit5QVJ6LzBnRWcvOGdCT3YrZ0FVci94UUZZLytRQlkvL01BV1gvekFGdC84c0Jidi92QWZYLzVnSkIvK2dBRXdIai8rNEI1Zi8xQWViLzhRSG8vL0lDQlAveUFnai84Z0lnLy9JQ0l2L3VBaVQvOGdOZC8rNERpZi95QTVILzlRT1MvKzREay8vdUJPSC83Z1R2Lys0RTh2L3VCUWIvOGdVTC8rNEFFd0hqLytVQjVmL3hBZWIvNndIby8ra0NCUC9wQWdqLzZRSWcvK2tDSXYvbEFpVC82UU5kLytVRGlmL3BBNUgvOFFPUy8rVURrLy9sQk9ILzVRVHYvK1VFOHYvbEJRYi82UVVMLytVQUZRQmMvKzBBN3YvdEFQYi9vUUQ1LzlFQS92L3ZBUW4vMHdFZy85c0JOUC90QVRyL1BnRkUvKzBCU1AvUkFVci91Z0ZlLyswQlkvL3dBV1gvOGdGdC8xQUQyLy90QkFmLzdRUVYvKzBFSy8vUkJJdi8wUUFXQUxqLzFBQysvL1lBd3YvdEFNUUFFUURLLytBQXpQL25BTTMvNVFETy8rNEEyUUFTQU9yLzZRRDIvOWNCT3YvWEFVci8wd0ZNLzlZQlRmL0ZBVmovNXdGaUFBMEJaQUFNQVczLzFnRnUvL0lCNi8vcEFrSC82UUFXQUNQL3ZBQlkvKzhBVy8vZkFKci83Z0M0LytVQXVmL1JBTVFBRVFESy84Z0EyUUFUQU9iL3hRRDIvOG9CT3YrVUFVbi9XQUZLLzM4QlRQK2xBVTMvM1FGWS8vSUJZditMQVdUL3lnRnMvM0FCYmYraUFlYi96UUFZQURvQUZBQTdBQmtBUFFBV0FSa0FGQUtxQUJZRE1RQVpBek1BRmdNMUFCWURuQUFXQTZzQUZnT3VBQllENUFBWkErWUFHUVBvQUJrRDZnQVdBL3NBRkFRREFCWUVnUUFXQklNQUZnU0ZBQllFbHdBV0JOTUFGQVRWQUJRRTF3QVpBQmdBT1AvckFEMy84d0RTLytzQTF2L3JBVG4vNndGRi8rc0Nxdi96QXgvLzZ3TWgvK3NESS8vckF6UC84d00xLy9NRG5QL3pBNnYvOHdPdS8vTUQwdi9yQStyLzh3UUQvL01FZ2YvekJJUC84d1NGLy9NRWlQL3JCSmYvOHdUUS8rc0FHUUJULytnQkdQL29BWVVBQ1FLOC8rZ0N2Zi9vQXI3LzZBSy8vK2dDd1Avb0F3ci82QU1NLytnRER2L29BN1gvNkFPNy8rZ0QxLy9vQkIzLzZBUWgvK2dFWFAvb0JGNy82QVJnLytnRVl2L29CR1QvNkFSbS8rZ0VhUC9vQkhELzZBU3gvK2dBSEFBSy8rSUFEUUFVQUE3L3p3QkJBQklBU3YvcUFGYi8yQUJZLytvQVlRQVRBRzMvcmdCOC84MEFnZitnQUliL3dRQ0ovOEFBdVAvUUFMei82Z0MrLy9VQXYvL0dBTUFBRFFEQy8ra0F3Ly9XQU1iLzZBREgvN29BeXYvcEFNei95d0ROLzlvQXp2L0hBWTMvMHdKQi84MEFIUUE0LzdzQU92L3RBRDMvMEFEUy83c0Exdis3QVJuLzdRRTUvN3NCUmYrN0Fxci8wQU1mLzdzRElmKzdBeVAvdXdNei85QUROZi9RQTV6LzBBT3IvOUFEcnYvUUE5TC91d1BxLzlBRCsvL3RCQVAvMEFTQi85QUVnLy9RQklYLzBBU0kvN3NFbC8vUUJORC91d1RULyswRTFmL3RBQ0FBQnYveUFBdi84Z0JhLy9NQVhmL3pBTDMvOHdEMi8vVUJHdi96QVlULzhnR0YvL0lCaC8veUFZai84Z0dKLy9JQ3hmL3pBc2IvOHdNMC8vTUR0Ly96QTlyLzh3UGovL01ENi8vekErei84Z1B0Ly9JRDhQL3lBL3ovOHdRRS8vTUVKZi96QkNmLzh3UXAvL01FZ3YvekJJVC84d1NHLy9NRTFQL3pCTmIvOHdBaUFGci85QUJjLy9JQVhmLzBBRjcvOHdDOS8vUUE3di95QVJyLzlBRTAvL0lCUlAveUFWNy84Z0xGLy9RQ3h2LzBBelQvOUFNMy8vTURPZi96QXp2Lzh3TzMvL1FEMnYvMEE5di84Z1BqLy9RRDYvLzBBL3ovOUFRRS8vUUVCLy95QkJYLzhnUWwvL1FFSi8vMEJDbi85QVNDLy9RRWhQLzBCSWIvOUFUVS8vUUUxdi8wQk5yLzh3QWlBQWIvd0FBTC84QUFPdi9JQU43LzZ3RGgvK2NBNXYvREFQYi96Z0QrLy9BQkdmL0lBVHIvelFGSC8rY0JTZi9uQVV6LzN3RmkvOUVCWlAvc0FXei9vQUZ0LzlBQmhQL0FBWVgvd0FHSC84QUJpUC9BQVluL3dBUEcvK3NEN1AvQUErMy93QVB3LzhBRCsvL0lCQ1QvNndRbS8rc0VLUC9yQkNyLzV3U0svK2NFMC8vSUJOWC95QUFpQUZyLzBnQmQvOUlBdmYvU0FQYi9wUUQ1LytFQS92LzZBUW4vMHdFYS85SUJJUC9iQVRyL1RRRkkvK0VCU3YrN0FXUC8rQUZsLy9NQmJmOWZBc1gvMGdMRy85SUROUC9TQTdmLzBnUGEvOUlENC8vU0Erdi8wZ1A4LzlJRUJQL1NCQ1gvMGdRbi85SUVLZi9TQkN2LzRRU0MvOUlFaFAvU0JJYi8wZ1NMLytFRTFQL1NCTmIvMGdBakFGci85QUJjLy9BQVhmLzBBTDMvOUFEdC8rOEE3di93QVBMLzh3RCsvL2tCQlAvekFSci85QUUwLy9BQlJQL3dBVkgvOHdGZS8vQUJjUC96QXNYLzlBTEcvL1FETlAvMEE3Zi85QVBhLy9RRDIvL3dBK1AvOUFQci8vUUQvUC8wQkFULzlBUUgvL0FFRmYvd0JDWC85QVFuLy9RRUtmLzBCSUwvOUFTRS8vUUVodi8wQk5ULzlBVFcvL1FBSkFBNC8rSUFQUC9rQU5MLzRnRFUvK1FBMXYvaUFObi80UURhLytRQTNmL2tBTjcvNlFEdC8rUUE4di9yQVFULzZ3RXovK1FCT2YvaUFVUC81QUZGLytJQlVQL2tBVkgvNndGZC8rUUJadi9rQVcvLzVBRncvK3NESC8vaUF5SC80Z01qLytJRHJQL2tBOGIvNlFQUy8rSUQwLy9rQkFiLzVBUVUvK1FFSlAvcEJDYi82UVFvLytrRWlQL2lCTkQvNGdBa0FBYi84Z0FMLy9JQVd2LzFBRjMvOVFDOS8vVUE5di8wQVA3Ly9BRUovL1VCR3YvMUFUci85UUZ0Ly9VQmhQL3lBWVgvOGdHSC8vSUJpUC95QVluLzhnTEYvL1VDeHYvMUF6VC85UU8zLy9VRDJ2LzFBK1AvOVFQci8vVUQ3UC95QSszLzhnUHcvL0lEL1AvMUJBVC85UVFsLy9VRUovLzFCQ24vOVFTQy8vVUVoUC8xQkliLzlRVFUvL1VFMXYvMUFDZ0FFUDh0QUJML0xRQWwvODBBc3YvTkFMVC96UURILy9JQkRmL05BWWIvTFFHSy95MEJqdjh0QVkvL0xRS1EvODBDa2YvTkFwTC96UUtULzgwQ2xQL05BcFgvelFLVy84MEN4Ly9OQXNuL3pRTEwvODBEbC8vTkE1Ly96UVBILzgwRDgvL05CQW4velFRTC84MEVMLy9OQkRIL3pRUXovODBFTmYvTkJEZi96UVE1LzgwRU8vL05CRDMvelFRLy84MEVRZi9OQkVQL3pRUkYvODBFcXYvTkFERUFPUC9qQUR6LzVRQTkvK1FBMHYvakFOVC81UURXLytNQTJmL2lBTnIvNVFEZC8rVUEzdi9wQVBMLzZnRUUvK29CTS8vbEFUbi80d0ZELytVQlJmL2pBVkQvNVFGUi8rb0JYZi9sQVdiLzVRRnMvK1FCYi8vbEFYRC82Z0txLytRREgvL2pBeUgvNHdNai8rTURNLy9rQXpYLzVBT2MvK1FEcS8va0E2ei81UU91LytRRHh2L3BBOUwvNHdQVC8rVUQ2di9rQkFQLzVBUUcvK1VFRlAvbEJDVC82UVFtLytrRUtQL3BCSUgvNUFTRC8rUUVoZi9rQklqLzR3U1gvK1FFMFAvakFERUFWdjl6QUZ2L2tnQnQvaThBZlA2cEFJSCt0Z0NHL3o0QWlmOUxBTGovWndDKy83a0F2LzhQQU1QKzlBREcveXNBeC83eEFNci9VZ0RNL3ZrQXpmOERBTTcrN0FEWi8xZ0E1Z0FGQU9yL3ZRRHIvMGtBN2Y3K0FPLy9Fd0QyLzJnQS9mOE9BUDcvUmdELy94TUJBZjhIQVFJQUVnRUgvdzRCQ2Y4UkFSei9IUUVnLzZ3Qkx2OFZBVEQvUEFFNC93NEJPdjlxQVVEL1NRRksvd3dCVFA4L0FVMys4UUZZLzhBQlgvN3ZBV1AvTVFGbC8xOEJhZjhLQVd3QUJRRnQvekFCYnYvVkFESUFCUC9SQUZiL3VRQmIvOHNBYmY3NkFIei9RZ0NCLzBrQWh2K1pBSW4vb1FDNC83SUF2di9kQUwvL2ZnREQvMjRBeHYrT0FNZi9iQURLLzZVQXpQOXhBTTMvZHdETy8ya0EyZitwQU9ZQUR3RHEvK1FBNi8rZ0FPMy9kQUR2LzRBQTl2K3lBUDMvZlFEKy81NEEvLytBQVFIL2VRRUNBQThCQi85OUFRbi9md0VjLzRZQklQL2FBUzcvZ1FFdy81Z0JPUDk5QVRyL3N3RkEvNkFCU3Y5OEFVei9tZ0ZOLzJ3QldQL21BVi8vYXdGai81SUJaZit0QVduL2V3RnNBQThCYmYrUkFXNy84Z0F6QURqLzJRQTYvK1FBTy8vc0FEMy8zUURTLzlrQTF2L1pBUm4vNUFFNS85a0JSZi9aQWZzQURnSDlBQTRDUXdBT0Fxci8zUU1mLzlrRElmL1pBeVAvMlFNeC8rd0RNLy9kQXpYLzNRTkRBQTREUkFBT0EwVUFEZ05HQUE0RFJ3QU9BMGdBRGdOSkFBNERYZ0FPQTE4QURnTmdBQTREblAvZEE2di8zUU91LzkwRDB2L1pBK1QvN0FQbS8rd0Q2UC9zQStyLzNRUDcvK1FFQS8vZEJJSC8zUVNELzkwRWhmL2RCSWovMlFTWC85MEUwUC9aQk5QLzVBVFYvK1FFMS8vc0JOd0FEZ1RqQUE0RSt3QU9BRFVBRy8veUFEai84UUE2Ly9RQVBQLzBBRDMvOEFEUy8vRUExUC8xQU5iLzhRRGEvL1FBM2YvMUFONy84d0RtLy9FQkdmLzBBVFAvOUFFNS8vRUJRLy8wQVVYLzhRRlEvL1VCWGYvMEFXTC84Z0ZrLy9JQlp2LzFBV3ovOGdGdi8vVUNxdi93QXgvLzhRTWgvL0VESS8veEF6UC84QU0xLy9BRG5QL3dBNnYvOEFPcy8vUURydi93QThiLzh3UFMvL0VEMC8vMEErci84QVA3Ly9RRUEvL3dCQWIvOUFRVS8vUUVKUC96QkNiLzh3UW8vL01FZ2Yvd0JJUC84QVNGLy9BRWlQL3hCSmYvOEFUUS8vRUUwLy8wQk5YLzlBQTFBRkgvK1FCUy8va0FWUC81QU1ILytRRHMvL2tBN1FBVUFQRC8rUUR4Ly9rQTgvLzVBUFQvK1FEMS8va0E5di90QVBqLytRRDUvKzBBK3YvNUFQdi8rUUQ4LzlzQS92LzVBUUQvK1FFRi8va0JLLy81QVRiLytRRTYvKzBCUFAvNUFUNy8rUUZJLyswQlN2L3RBVlAvK1FGVi8va0JWLy81QVZ6LytRRnQvKzBDdS8vNUF3UC8rUU1GLy9rREIvLzVBd2ovK1FPeC8va0Qxdi81QTlqLytRUGQvL2tENHYvNUEvTC8rUVA0Ly9rRUdmLzVCQnYvK1FRci8rMEVMZi81Qkl2LzdRU04vL2tFcWYvNUJNYi8rUVRJLy9rQU9BQWwvK1FBUFAvU0FEMy8wd0N5LytRQXRQL2tBTVQvNGdEYS85SUJEZi9rQVRQLzBnRkQvOUlCWGYvU0FwRC81QUtSLytRQ2t2L2tBcFAvNUFLVS8rUUNsZi9rQXBiLzVBS3EvOU1DeC8va0Fzbi81QUxMLytRRE0vL1RBelgvMHdPWC8rUURuUC9UQTUvLzVBT3IvOU1EclAvU0E2Ny8wd1BILytRRDAvL1NBK3IvMHdQei8rUUVBLy9UQkFiLzBnUUovK1FFQy8va0JCVC8wZ1F2LytRRU1mL2tCRFAvNUFRMS8rUUVOLy9rQkRuLzVBUTcvK1FFUGYva0JELy81QVJCLytRRVEvL2tCRVgvNUFTQi85TUVnLy9UQklYLzB3U1gvOU1FcXYva0FEa0FVZi92QUZMLzd3QlUvKzhBWFAvd0FNSC83d0RzLys4QTdmL3VBTzcvOEFEdy8rOEE4Zi92QVBQLzd3RDAvKzhBOWYvdkFQYi83Z0Q0Lys4QSt2L3ZBUHYvN3dEKy8rOEJBUC92QVFYLzd3RUovL1FCSVAveEFTdi83d0UwLy9BQk52L3ZBVHIvN3dFOC8rOEJQdi92QVVULzhBRlQvKzhCVmYvdkFWZi83d0ZjLys4Qlh2L3dBVzMvN3dLNy8rOERBLy92QXdYLzd3TUgvKzhEQ1AvdkE3SC83d1BXLys4RDJQL3ZBOXYvOEFQZC8rOEQ0di92QS9MLzd3UDQvKzhFQi8vd0JCWC84QVFaLys4RUcvL3ZCQzMvN3dTTi8rOEVxZi92Qk1iLzd3VEkvKzhBUEFBRy84TUFDLy9EQUVyLzhRQlovL2NBV3YvYkFGMy8yd0NiLy9jQXZmL2JBTUwvOVFERUFBb0F4di96QU1yL2NnREwvL2NCR3YvYkFZVC93d0dGLzhNQmgvL0RBWWovd3dHSi84TUN3Zi8zQXNMLzl3TEQvL2NDeFAvM0FzWC8yd0xHLzlzREp2LzNBeWovOXdNcS8vY0RMUC8zQXk3Lzl3TXcvL2NETlAvYkE3UC85d08zLzlzRHV2LzNBN3ovOXdQYS85c0Q0Ly9iQSt2LzJ3UHMvOE1EN2YvREEvRC93d1A4LzlzRUJQL2JCQ1gvMndRbi85c0VLZi9iQkhULzl3UjIvL2NFZVAvM0JIci85d1I4Ly9jRWZ2LzNCSUQvOXdTQy85c0VoUC9iQkliLzJ3UzEvL2NFMVAvYkJOYi8yd0EvQUNmLzh3QXIvL01BTS8vekFEWC84d0NELy9NQWsvL3pBSmovOHdDei8vTUF4QUFOQU5QLzh3RUkvL01CRi8vekFSdi84d0VkLy9NQkgvL3pBU0gvOHdGQi8vTUJhdi96QWxYLzh3SlcvL01DV1AvekFsbi84d0tYLy9NQ29mL3pBcUwvOHdLai8vTUNwUC96QXFYLzh3TE4vL01Dei8vekF0SC84d0xULy9NQzRmL3pBdVAvOHdMbC8vTUM1Ly96QXduLzh3TUwvL01ERGYvekF6Ny84d09iLy9NRHFQL3pBODcvOHdQUi8vTUQvdi96QkFILzh3UWMvL01FSHYvekJDRC84d1JiLy9NRVhmL3pCRi8vOHdSaC8vTUVZLy96QkdYLzh3Um4vL01FYWYvekJHdi84d1J0Ly9NRWIvL3pCSEgvOHdTdy8vTUV5Zi96QUVBQVIvL3NBRWovN0FCSi8rd0FTLy9zQUZYLzdBQ1UvK3dBbWYvc0FMdi83QURJLyt3QXlmL3NBUGYvN0FFRC8rd0JIdi9zQVNMLzdBRkMvK3dCWVAvc0FXSC83QUZyLyt3Q3N2L3NBclAvN0FLMC8rd0N0Zi9zQXJiLzdBTE8vK3dDMFAvc0F0TC83QUxVLyt3QzF2L3NBdGovN0FMYS8rd0MzUC9zQXQ3LzdBTGcvK3dDNHYvc0F1VC83QUxtLyt3QzZQL3NBNi8vN0FQVi8rd0QyZi9zQTl6LzdBUDMvK3dEL2Yvc0JBTC83QVFRLyt3RUV2L3NCQlAvN0FRZi8rd0VMdi9zQkVqLzdBUksvK3dFVFAvc0JFNy83QVJRLyt3RVV2L3NCRlQvN0FSVy8rd0Vhdi9zQkd6LzdBUnUvK3dFY3Yvc0JLMy83QVM2Lyt3RXZQL3NBRUFBSi8vbUFDdi81Z0F6LytZQU5mL21BSVAvNWdDVC8rWUFtUC9tQUxQLzVnQzQvOElBeEFBUUFOUC81Z0VJLytZQkYvL21BUnYvNWdFZC8rWUJILy9tQVNILzVnRkIvK1lCYXYvbUFsWC81Z0pXLytZQ1dQL21BbG4vNWdLWC8rWUNvZi9tQXFMLzVnS2ovK1lDcFAvbUFxWC81Z0xOLytZQ3ovL21BdEgvNWdMVC8rWUM0Zi9tQXVQLzVnTGwvK1lDNS8vbUF3bi81Z01MLytZRERmL21BejcvNWdPYi8rWURxUC9tQTg3LzVnUFIvK1lEL3YvbUJBSC81Z1FjLytZRUh2L21CQ0QvNWdSYi8rWUVYZi9tQkYvLzVnUmgvK1lFWS8vbUJHWC81Z1JuLytZRWFmL21CR3YvNWdSdC8rWUViLy9tQkhILzVnU3cvK1lFeWYvbUFFY0FFQUFFQUJJQUJBQkgvK2NBU1AvbkFFbi81d0JMLytjQVZmL25BSlQvNXdDWi8rY0F1Ly9uQU1RQUR3REkvK2NBeWYvbkFQZi81d0VELytjQkh2L25BU0wvNXdGQy8rY0JZUC9uQVdILzV3RnIvK2NCaGdBRUFZb0FCQUdPQUFRQmp3QUVBckwvNXdLei8rY0N0UC9uQXJYLzV3SzIvK2NDenYvbkF0RC81d0xTLytjQzFQL25BdGIvNXdMWS8rY0Mydi9uQXR6LzV3TGUvK2NDNFAvbkF1TC81d0xrLytjQzV2L25BdWovNXdPdi8rY0QxZi9uQTluLzV3UGMvK2NEOS8vbkEvMy81d1FDLytjRUVQL25CQkwvNXdRVC8rY0VILy9uQkM3LzV3UkkvK2NFU3YvbkJFei81d1JPLytjRVVQL25CRkwvNXdSVS8rY0VWdi9uQkdyLzV3UnMvK2NFYnYvbkJITC81d1N0LytjRXV2L25CTHovNXdCTkFBWUFFQUFMQUJBQURRQVVBRUVBRWdCSC8rZ0FTUC9vQUVuLzZBQkwvK2dBVmYvb0FHRUFFd0NVLytnQW1mL29BTHYvNkFESS8rZ0F5Zi9vQVBmLzZBRUQvK2dCSHYvb0FTTC82QUZDLytnQllQL29BV0gvNkFGci8rZ0JoQUFRQVlVQUVBR0hBQkFCaUFBUUFZa0FFQUt5LytnQ3MvL29BclQvNkFLMS8rZ0N0di9vQXM3LzZBTFEvK2dDMHYvb0F0VC82QUxXLytnQzJQL29BdHIvNkFMYy8rZ0Mzdi9vQXVELzZBTGkvK2dDNVAvb0F1Yi82QUxvLytnRHIvL29BOVgvNkFQWi8rZ0QzUC9vQSt3QUVBUHRBQkFEOEFBUUEvZi82QVA5LytnRUF2L29CQkQvNkFRUy8rZ0VFLy9vQkIvLzZBUXUvK2dFU1Avb0JFci82QVJNLytnRVR2L29CRkQvNkFSUy8rZ0VWUC9vQkZiLzZBUnEvK2dFYlAvb0JHNy82QVJ5LytnRXJmL29CTHIvNkFTOC8rZ0FUd0JIQUFFQVNBQUJBRWtBQVFCTEFBRUFWUUFCQUpRQUFRQ1pBQUVBdXdBQkFNZ0FBUURKQUFFQTdRQXJBUElBRkFEMi8rTUE5d0FCQVBuLzhBRDgvK1lBL3YvMUFRTUFBUUVFQUJRQkhnQUJBU0lBQVFFNi85TUJRZ0FCQVVqLzhBRksvOThCVVFBVUFXQUFBUUZoQUFFQmF3QUJBVzMvNHdGd0FCUUNzZ0FCQXJNQUFRSzBBQUVDdFFBQkFyWUFBUUxPQUFFQzBBQUJBdElBQVFMVUFBRUMxZ0FCQXRnQUFRTGFBQUVDM0FBQkF0NEFBUUxnQUFFQzRnQUJBdVFBQVFMbUFBRUM2QUFCQTY4QUFRUFZBQUVEMlFBQkE5d0FBUVAzQUFFRC9RQUJCQUlBQVFRUUFBRUVFZ0FCQkJNQUFRUWZBQUVFSy8vd0JDNEFBUVJJQUFFRVNnQUJCRXdBQVFST0FBRUVVQUFCQkZJQUFRUlVBQUVFVmdBQkJHb0FBUVJzQUFFRWJnQUJCSElBQVFTTC8vQUVyUUFCQkxvQUFRUzhBQUVBVXdBNC83NEFVZi8xQUZMLzlRQlUvL1VBV3YvdkFGMy83d0M5Lys4QXdmLzFBTkwvdmdEVy83NEE1di9KQU96LzlRRHcvL1VBOGYvMUFQUC85UUQwLy9VQTlmLzFBUGIvM3dENC8vVUErdi8xQVB2LzlRRCsvL1VCQVAvMUFRWC85UUVKLyswQkd2L3ZBU0QvNndFci8vVUJOdi8xQVRuL3ZnRTYvOThCUFAvMUFUNy85UUZGLzc0QlRQL3BBVlAvOVFGVi8vVUJWLy8xQVZ6LzlRRmovL1VCYmYvZ0Fydi85UUxGLys4Q3h2L3ZBd1AvOVFNRi8vVURCLy8xQXdqLzlRTWYvNzRESWYrK0F5UC92Z00wLys4RHNmLzFBN2YvN3dQUy83NEQxdi8xQTlqLzlRUGEvKzhEM2YvMUErTC85UVBqLys4RDYvL3ZBL0wvOVFQNC8vVUQvUC92QkFULzd3UVovL1VFRy8vMUJDWC83d1FuLys4RUtmL3ZCQzMvOVFTQy8rOEVoUC92QkliLzd3U0kvNzRFamYvMUJLbi85UVRHLy9VRXlQLzFCTkQvdmdUVS8rOEUxdi92QUdnQU9QOHpBRHIveUFBOC8vQUFQZitzQUZILzd3QlMvKzhBVlAvdkFNSC83d0RTL3pNQTFQLzFBTmIvTXdEYS8vQUEzZi8xQU43LzZ3RGgvK1lBNXYvQ0FPei83d0R3Lys4QThmL3ZBUFAvN3dEMC8rOEE5Zi92QVBiL3pnRDQvKzhBK3YvdkFQdi83d0QrLys4QkFQL3ZBUVgvN3dFWi84Z0JLLy92QVRQLzhBRTIvKzhCT2Y4ekFUci96UUU4Lys4QlB2L3ZBVVAvOEFGRi96TUJSLy9tQVVuLzVnRk0vOThCVVAvMUFWUC83d0ZWLys4QlYvL3ZBVnovN3dGZC8vQUJZdi9RQVdULzZ3Rm0vL1VCYlArZkFXMy8wQUZ2Ly9VQ3F2K3NBcnYvN3dNRC8rOERCZi92QXdmLzd3TUkvKzhESC84ekF5SC9Nd01qL3pNRE0vK3NBelgvckFPYy82d0RxLytzQTZ6LzhBT3UvNndEc2YvdkE4Yi82d1BTL3pNRDAvL3dBOWIvN3dQWS8rOEQzZi92QStMLzd3UHEvNndEOHYvdkEvai83d1A3LzhnRUEvK3NCQWIvOEFRVS8vQUVHZi92QkJ2Lzd3UWsvK3NFSnYvckJDai82d1FxLytZRUxmL3ZCSUgvckFTRC82d0VoZitzQklqL013U0svK1lFamYvdkJKZi9yQVNwLys4RXh2L3ZCTWovN3dUUS96TUUwLy9JQk5YL3lBQm9BRWYvdEFCSS83UUFTZiswQUV2L3RBQk1BQlFBVHdBVUFGQUFGQUJULzNvQVZmKzBBRmYvWkFCYkFBc0FsUCswQUpuL3RBQzcvN1FBeVArMEFNbi90QUQzLzdRQkEvKzBBUmovZWdFZS83UUJJdiswQVVML3RBRmcvN1FCWWYrMEFXdi90QUhSLzJRQ3N2KzBBclAvdEFLMC83UUN0ZiswQXJiL3RBSzgvM29DdmY5NkFyNy9lZ0svLzNvQ3dQOTZBczcvdEFMUS83UUMwdiswQXRUL3RBTFcvN1FDMlArMEF0ci90QUxjLzdRQzN2KzBBdUQvdEFMaS83UUM1UCswQXViL3RBTG8vN1FEQ3Y5NkF3ei9lZ01PLzNvREZ2OWtBeGovWkFNYS8yUURIUDlrQXg3L1pBT3YvN1FEdGY5NkE3di9lZ1BWLzdRRDEvOTZBOW4vdEFQYy83UUQzdjlrQS9mL3RBUDkvN1FFQXYrMEJCRC90QVFTLzdRRUUvKzBCQjMvZWdRZi83UUVJZjk2QkM3L3RBUkkvN1FFU3YrMEJFei90QVJPLzdRRVVQKzBCRkwvdEFSVS83UUVWdiswQkZ6L2VnUmUvM29FWVA5NkJHTC9lZ1JrLzNvRVp2OTZCR2ovZWdScS83UUViUCswQkc3L3RBUncvM29FY3YrMEJLMy90QVN4LzNvRXV2KzBCTHovdEFTK0FCUUV3QUFVQk1JQUZBVFAvMlFBYWdBNC8rWUFPdi9uQUR6LzhnQTkvK2NBVWYveEFGTC84UUJVLy9FQVhQL3hBTUgvOFFEUy8rWUExdi9tQU5yLzhnRGUvKzRBNGYvb0FPYi81Z0RzLy9FQTd2L3hBUEQvOFFEeC8vRUE4Ly94QVBULzhRRDEvL0VBOXYvUUFQai84UUQ2Ly9FQSsvL3hBUDcvOFFFQS8vRUJCZi94QVJuLzV3RXIvL0VCTS8veUFUVC84UUUyLy9FQk9mL21BVHIvemdFOC8vRUJQdi94QVVQLzhnRkUvL0VCUmYvbUFVZi82QUZKLytnQlUvL3hBVlgvOFFGWC8vRUJYUC94QVYzLzhnRmUvL0VCWXYvbkFXVC83UUZzLytZQmJmL1FBcXIvNXdLNy8vRURBLy94QXdYLzhRTUgvL0VEQ1AveEF4Ly81Z01oLytZREkvL21BelAvNXdNMS8rY0RuUC9uQTZ2LzV3T3MvL0lEcnYvbkE3SC84UVBHLys0RDB2L21BOVAvOGdQVy8vRUQyUC94QTl2LzhRUGQvL0VENHYveEErci81d1B5Ly9FRCtQL3hBL3YvNXdRRC8rY0VCdi95QkFmLzhRUVUvL0lFRmYveEJCbi84UVFiLy9FRUpQL3VCQ2IvN2dRby8rNEVLdi9vQkMzLzhRU0IvK2NFZy8vbkJJWC81d1NJLytZRWl2L29CSTMvOFFTWC8rY0VxZi94Qk1iLzhRVEkvL0VFMFAvbUJOUC81d1RWLytjQWF3QWxBQThBT1AvbUFEci81Z0E4QUE0QVBmL21BTElBRHdDMEFBOEEwdi9tQU5RQURnRFcvK1lBMlFBVEFOb0FEZ0RkQUE0QTNnQUxBT0gvNVFEbS8rWUE1Ly8wQU8wQUVnRHlBQThBOXYvbkFQbi82QUQrLy9jQkJBQVBBUTBBRHdFWi8rWUJNd0FPQVRuLzVnRTYvK2NCUXdBT0FVWC81Z0ZILytVQlNQL29BVW4vNVFGSy8rZ0JUUC9rQVZBQURnRlJBQThCWFFBT0FXTC81Z0ZrLytZQlpnQU9BV3ovNWdGdC8rY0Jid0FPQVhBQUR3S1FBQThDa1FBUEFwSUFEd0tUQUE4Q2xBQVBBcFVBRHdLV0FBOENxdi9tQXNjQUR3TEpBQThDeXdBUEF4Ly81Z01oLytZREkvL21BelAvNWdNMS8rWURsd0FQQTV6LzVnT2ZBQThEcS8vbUE2d0FEZ091LytZRHhnQUxBOGNBRHdQUy8rWUQwd0FPQStyLzVnUHpBQThEKy8vbUJBUC81Z1FHQUE0RUNRQVBCQXNBRHdRVUFBNEVKQUFMQkNZQUN3UW9BQXNFS3YvbEJDdi82QVF2QUE4RU1RQVBCRE1BRHdRMUFBOEVOd0FQQkRrQUR3UTdBQThFUFFBUEJEOEFEd1JCQUE4RVF3QVBCRVVBRHdTQi8rWUVnLy9tQklYLzVnU0kvK1lFaXYvbEJJdi82QVNYLytZRXFnQVBCTkQvNWdUVC8rWUUxZi9tQUhVQUJ2KzZBQXYvdWdBNC96TUFPdi9IQUR6LzhRQTkvNnNBVWYvdUFGTC83Z0JVLys0QVhQL1hBTUgvN2dEUy96TUExdjh6QU5yLzhRRGUvK3NBNGYvbEFPYi93d0RzLys0QTd2L1hBUEQvN2dEeC8rNEE4Ly91QVBULzdnRDEvKzRBOXYvTUFQai83Z0Q2Lys0QSsvL3VBUDcvN2dFQS8rNEJCZi91QVJuL3h3RXIvKzRCTS8veEFUVC8xd0UyLys0Qk9mOHpBVHIveVFFOC8rNEJQdi91QVVQLzhRRkUvOWNCUmY4ekFVZi81UUZKLytVQlRQL2ZBVlAvN2dGVi8rNEJWLy91QVZ6LzdnRmQvL0VCWHYvWEFXTC8wQUZrLytzQmJQK2dBVzMvelFHRS83b0JoZis2QVlmL3VnR0kvN29CaWYrNkFxci9xd0s3Lys0REEvL3VBd1gvN2dNSC8rNERDUC91QXgvL013TWgvek1ESS84ekF6UC9xd00xLzZzRG5QK3JBNnYvcXdPcy8vRURydityQTdILzdnUEcvK3NEMHY4ekE5UC84UVBXLys0RDJQL3VBOXYvMXdQZC8rNEQ0di91QStyL3F3UHMvN29EN2YrNkEvRC91Z1B5Lys0RCtQL3VBL3YveHdRRC82c0VCdi94QkFmLzF3UVUvL0VFRmYvWEJCbi83Z1FiLys0RUpQL3JCQ2IvNndRby8rc0VLdi9sQkMzLzdnU0IvNnNFZy8rckJJWC9xd1NJL3pNRWl2L2xCSTMvN2dTWC82c0VxZi91Qk1iLzdnVEkvKzRFMFA4ekJOUC94d1RWLzhjQWRnQkgvL0FBU1Avd0FFbi84QUJMLy9BQVUvL2VBRlgvOEFDVS8vQUFtZi93QUx2LzhBREkvL0FBeWYvd0FQZi84QUVELy9BQkdQL2VBUnovNndFZS8vQUJJdi93QVVMLzhBRmcvL0FCWWYvd0FXdi84QUhyLytzQjdmL3JBZlgvNlFIOC8rc0NCZi9yQWlILzZ3SXEvK3NDUWYvckFyTC84QUt6Ly9BQ3RQL3dBclgvOEFLMi8vQUN2UC9lQXIzLzNnSysvOTRDdi8vZUFzRC8zZ0xPLy9BQzBQL3dBdEwvOEFMVS8vQUMxdi93QXRqLzhBTGEvL0FDM1Avd0F0Ny84QUxnLy9BQzR2L3dBdVQvOEFMbS8vQUM2UC93QXdyLzNnTU0vOTRERHYvZUEwci82d05VLytzRFZmL3JBMWIvNndOWC8rc0RXUC9yQTJILzZ3TmkvK3NEWS8vckEyVC82d05yLytzRGJQL3JBMjMvNndOdS8rc0Rmdi9yQTMvLzZ3T0EvK3NEci8vd0E3WC8zZ083Lzk0RDFmL3dBOWYvM2dQWi8vQUQzUC93QS9mLzhBUDkvL0FFQXYvd0JCRC84QVFTLy9BRUUvL3dCQjMvM2dRZi8vQUVJZi9lQkM3LzhBUkkvL0FFU3Yvd0JFei84QVJPLy9BRVVQL3dCRkwvOEFSVS8vQUVWdi93QkZ6LzNnUmUvOTRFWVAvZUJHTC8zZ1JrLzk0RVp2L2VCR2ovM2dScS8vQUViUC93Qkc3LzhBUncvOTRFY3Yvd0JLMy84QVN4Lzk0RXV2L3dCTHovOEFUZy8rc0ZBdi9yQlFYLzZ3VUsvK3NBZkFBRy85b0FDLy9hQUVmLzhBQkkvL0FBU2Yvd0FFdi84QUJWLy9BQVdmL3ZBRnIvM0FCZC85d0FsUC93QUpuLzhBQ2IvKzhBdS8vd0FMMy8zQURDLyt3QXhBQVBBTWIvNmdESS8vQUF5Zi93QU1yL3lBREwvKzhBelAvbkFQZi84QUVELy9BQkd2L2NBUjcvOEFFaS8vQUJRdi93QVdELzhBRmgvL0FCYS8vd0FZVC8yZ0dGLzlvQmgvL2FBWWovMmdHSi85b0Nzdi93QXJQLzhBSzAvL0FDdGYvd0FyYi84QUxCLys4Q3d2L3ZBc1AvN3dMRS8rOEN4Zi9jQXNiLzNBTE8vL0FDMFAvd0F0TC84QUxVLy9BQzF2L3dBdGovOEFMYS8vQUMzUC93QXQ3LzhBTGcvL0FDNHYvd0F1VC84QUxtLy9BQzZQL3dBeWIvN3dNby8rOERLdi92QXl6Lzd3TXUvKzhETVAvdkF6VC8zQU92Ly9BRHMvL3ZBN2YvM0FPNi8rOER2UC92QTlYLzhBUFovL0FEMnYvY0E5ei84QVBqLzl3RDYvL2NBK3ovMmdQdC85b0Q4UC9hQS9mLzhBUDgvOXdEL2Yvd0JBTC84QVFFLzl3RUVQL3dCQkwvOEFRVC8vQUVILy93QkNYLzNBUW4vOXdFS2YvY0JDNy84QVJJLy9BRVN2L3dCRXovOEFSTy8vQUVVUC93QkZMLzhBUlUvL0FFVnYvd0JHci84QVJzLy9BRWJ2L3dCSEwvOEFSMC8rOEVkdi92QkhqLzd3UjYvKzhFZlAvdkJINy83d1NBLys4RWd2L2NCSVQvM0FTRy85d0VyZi93QkxYLzd3UzYvL0FFdlAvd0JOVC8zQVRXLzl3QWpBQUcvOG9BQy8vS0FEai8wZ0E2LzlRQVBQLzBBRDMvMHdCUi8rSUFVdi9pQUZULzRnQmEvK1lBWFAvdkFGMy81Z0M5LytZQXdmL2lBTkwvMGdEVy85SUEydi8wQU43LzdRRGgvK0VBNXYvVUFPei80Z0R1Lys4QThQL2lBUEgvNGdEei8rSUE5UC9pQVBYLzRnRDIvOGtBK1AvaUFQci80Z0Q3LytJQS92L1JBUUQvNGdFRi8rSUJDZi9sQVJuLzFBRWEvK1lCSVAvakFTdi80Z0V6Ly9RQk5QL3ZBVGIvNGdFNS85SUJPdi9FQVR6LzRnRSsvK0lCUS8vMEFVVC83d0ZGLzlJQlIvL2hBVW4vNFFGVC8rSUJWZi9pQVZmLzRnRmMvK0lCWGYvMEFWNy83d0ZpLzlRQlkvLzFBV1QvNXdGcy82b0JiZi9KQVlUL3lnR0YvOG9CaC8vS0FZai95Z0dKLzhvQ3F2L1RBcnYvNGdMRi8rWUN4di9tQXdQLzRnTUYvK0lEQi8vaUF3ai80Z01mLzlJRElmL1NBeVAvMGdNei85TUROUC9tQXpYLzB3T2MvOU1EcS8vVEE2ei85QU91LzlNRHNmL2lBN2YvNWdQRy8rMEQwdi9TQTlQLzlBUFcvK0lEMlAvaUE5ci81Z1BiLys4RDNmL2lBK0wvNGdQai8rWUQ2di9UQSt2LzVnUHMvOG9EN2YvS0EvRC95Z1B5LytJRCtQL2lBL3YvMUFQOC8rWUVBLy9UQkFULzVnUUcvL1FFQi8vdkJCVC85QVFWLys4RUdmL2lCQnYvNGdRay8rMEVKZi9tQkNiLzdRUW4vK1lFS1AvdEJDbi81Z1FxLytFRUxmL2lCSUgvMHdTQy8rWUVnLy9UQklULzVnU0YvOU1FaHYvbUJJai8wZ1NLLytFRWpmL2lCSmYvMHdTcC8rSUV4di9pQk1qLzRnVFEvOUlFMC8vVUJOVC81Z1RWLzlRRTF2L21BSmdBSlFBUUFDZi82QUFyLytnQU0vL29BRFgvNkFBNC8rQUFPdi9nQUQzLzN3Q0QvK2dBay8vb0FKai82QUN5QUJBQXMvL29BTFFBRUFEUy8rQUEwLy9vQU5RQUVBRFcvK0FBMlFBVUFOMEFFQURoLytFQTV2L2dBTzBBRXdEeUFCQUErZi9nQVFRQUVBRUkvK2dCRFFBUUFSZi82QUVaLytBQkcvL29BUjMvNkFFZi8rZ0JJZi9vQVRuLzRBRkIvK2dCUmYvZ0FVZi80UUZJLytBQlNmL2hBVXIvNEFGTi8rRUJVQUFRQVZFQUVBRlkvK2tCWXYvZkFXVC8zZ0ZtQUJBQmF2L29BV3ovM3dGdS8vSUJid0FRQVhBQUVBSlYvK2dDVnYvb0Fsai82QUpaLytnQ2tBQVFBcEVBRUFLU0FCQUNrd0FRQXBRQUVBS1ZBQkFDbGdBUUFwZi82QUtoLytnQ292L29BcVAvNkFLay8rZ0NwZi9vQXFyLzN3TEhBQkFDeVFBUUFzc0FFQUxOLytnQ3ovL29BdEgvNkFMVC8rZ0M0Zi9vQXVQLzZBTGwvK2dDNS8vb0F3bi82QU1MLytnRERmL29BeC8vNEFNaC8rQURJLy9nQXpQLzN3TTEvOThEUHYvb0E1Y0FFQU9iLytnRG5QL2ZBNThBRUFPby8rZ0RxLy9mQTY3LzN3UEhBQkFEenYvb0E5SC82QVBTLytBRDZ2L2ZBL01BRUFQNy8rQUQvdi9vQkFILzZBUUQvOThFQ1FBUUJBc0FFQVFjLytnRUh2L29CQ0QvNkFRcS8rRUVLLy9nQkM4QUVBUXhBQkFFTXdBUUJEVUFFQVEzQUJBRU9RQVFCRHNBRUFROUFCQUVQd0FRQkVFQUVBUkRBQkFFUlFBUUJGdi82QVJkLytnRVgvL29CR0gvNkFSai8rZ0VaZi9vQkdmLzZBUnAvK2dFYS8vb0JHMy82QVJ2LytnRWNmL29CSUgvM3dTRC85OEVoZi9mQklqLzRBU0svK0VFaS8vZ0JKZi8zd1NxQUJBRXNQL29CTW4vNkFUUS8rQUUwLy9nQk5YLzRBQzZBRWYvM0FCSS85d0FTZi9jQUV2LzNBQlIvK0VBVXYvaEFGUC8xZ0JVLytFQVZmL2NBRm4vM1FCYS8rRUFYZi9oQUpULzNBQ1ovOXdBbS8vZEFMdi8zQUM5LytFQXZ2LzFBTC8vNWdEQi8rRUF3di9yQU1QLzZRREYvL0FBeHYvbkFNai8zQURKLzl3QXl2L2pBTXYvM1FETS84NEF6Zi9VQU03LzJ3RHMvK0VBOFAvaEFQSC80UUR6LytFQTlQL2hBUFgvNFFEMy85d0ErUC9oQVByLzRRRDcvK0VBL3YvaEFRRC80UUVELzl3QkJmL2hBUmovMWdFYS8rRUJIdi9jQVNMLzNBRXIvK0VCTnYvaEFUei80UUUrLytFQlF2L2NBVlAvNFFGVi8rRUJWLy9oQVZ6LzRRRmcvOXdCWWYvY0FXdi8zQUt5Lzl3Q3MvL2NBclQvM0FLMS85d0N0di9jQXJ2LzRRSzgvOVlDdmYvV0FyNy8xZ0svLzlZQ3dQL1dBc0gvM1FMQy85MEN3Ly9kQXNULzNRTEYvK0VDeHYvaEFzNy8zQUxRLzl3QzB2L2NBdFQvM0FMVy85d0MyUC9jQXRyLzNBTGMvOXdDM3YvY0F1RC8zQUxpLzl3QzVQL2NBdWIvM0FMby85d0RBLy9oQXdYLzRRTUgvK0VEQ1AvaEF3ci8xZ01NLzlZRER2L1dBeWIvM1FNby85MERLdi9kQXl6LzNRTXUvOTBETVAvZEF6VC80UU92Lzl3RHNmL2hBN1AvM1FPMS85WUR0Ly9oQTdyLzNRTzcvOVlEdlAvZEE5WC8zQVBXLytFRDEvL1dBOWovNFFQWi85d0Qydi9oQTl6LzNBUGQvK0VENHYvaEErUC80UVByLytFRDh2L2hBL2YvM0FQNC8rRUQvUC9oQS8zLzNBUUMvOXdFQlAvaEJCRC8zQVFTLzl3RUUvL2NCQm4vNFFRYi8rRUVIZi9XQkIvLzNBUWgvOVlFSmYvaEJDZi80UVFwLytFRUxmL2hCQzcvM0FSSS85d0VTdi9jQkV6LzNBUk8vOXdFVVAvY0JGTC8zQVJVLzl3RVZ2L2NCRnovMWdSZS85WUVZUC9XQkdMLzFnUmsvOVlFWnYvV0JHai8xZ1JxLzl3RWJQL2NCRzcvM0FSdy85WUVjdi9jQkhULzNRUjIvOTBFZVAvZEJIci8zUVI4LzkwRWZ2L2RCSUQvM1FTQy8rRUVoUC9oQkliLzRRU04vK0VFcWYvaEJLMy8zQVN4LzlZRXRmL2RCTHIvM0FTOC85d0V4di9oQk1qLzRRVFUvK0VFMXYvaEFMOEFCZ0FNQUFzQURBQkgvK2dBU1Avb0FFbi82QUJLQUF3QVMvL29BRlAvNmdCVi8rZ0FXZ0FMQUYwQUN3Q1UvK2dBbWYvb0FMdi82QUM5QUFzQXZ2LzBBTVQvMXdER0FBc0F5UC9vQU1uLzZBREtBQXdBOS8vb0FRUC82QUVZLytvQkdnQUxBUjcvNkFFaS8rZ0JRdi9vQVdELzZBRmgvK2dCYS8vb0FZUUFEQUdGQUF3Qmh3QU1BWWdBREFHSkFBd0I0d0FOQWVZQURRSG9BQTRCNmYvMUFldi83QUh0LyswQjlmL3NBZnYvdndIOC8rMEIvZisvQWdRQURnSUYvKzBDQ0FBT0FpQUFEZ0loLyswQ0lnQU5BaVFBRGdJcS8rMENRZi91QWtQL3Z3S3kvK2dDcy8vb0FyVC82QUsxLytnQ3R2L29BcnovNmdLOS8rb0N2di9xQXIvLzZnTEEvK29DeFFBTEFzWUFDd0xPLytnQzBQL29BdEwvNkFMVS8rZ0Mxdi9vQXRqLzZBTGEvK2dDM1Avb0F0Ny82QUxnLytnQzR2L29BdVQvNkFMbS8rZ0M2UC9vQXdyLzZnTU0vK29ERHYvcUF6UUFDd05ELzc4RFJQKy9BMFgvdndORy83OERSLysvQTBqL3Z3TkovNzhEU3YvdEExVC83UU5WLyswRFZ2L3RBMWYvN1FOWS8rMERYUUFOQTE3L3Z3TmYvNzhEWVArL0EySC83UU5pLyswRFkvL3RBMlQvN1FOci8rMERiUC90QTIzLzdRTnUvKzBEZnYvdEEzLy83UU9BLyswRGhQLzFBNFgvOVFPRy8vVURoLy8xQTRrQURnT1NBQTBEa3dBTkE2Ly82QU8xLytvRHR3QUxBN3YvNmdQVi8rZ0QxLy9xQTluLzZBUGFBQXNEM1Avb0ErTUFDd1ByQUFzRDdBQU1BKzBBREFQd0FBd0Q5Ly9vQS93QUN3UDkvK2dFQXYvb0JBUUFDd1FRLytnRUV2L29CQlAvNkFRZC8rb0VILy9vQkNILzZnUWxBQXNFSndBTEJDa0FDd1F1LytnRVNQL29CRXIvNkFSTS8rZ0VUdi9vQkZELzZBUlMvK2dFVlAvb0JGYi82QVJjLytvRVh2L3FCR0QvNmdSaS8rb0VaUC9xQkdiLzZnUm8vK29FYXYvb0JHei82QVJ1LytnRWNQL3FCSEwvNkFTQ0FBc0VoQUFMQklZQUN3U3QvK2dFc2YvcUJMci82QVM4LytnRTFBQUxCTllBQ3dUYy83OEU0UC90Qk9FQURRVGovNzhFN3dBTkJQSUFEUVQ3Lzc4RkF2L3RCUVgvN1FVR0FBNEZDdi90QlFzQURRRGpBQVlBRFFBTEFBMEFSZi93QUVmL3RnQkkvN1lBU2YrMkFFb0FEUUJMLzdZQVUvL2FBRlgvdGdCYUFBc0FYUUFMQUpUL3RnQ1ovN1lBdS8rMkFMMEFDd0MrLzgwQXgvKzdBTWovd0FESi83WUF6UC9WQU8zL3RRRHkvNzRBOS8rMkFRUC90Z0VFLzc0QkdQL2FBUm9BQ3dFYy8rWUJIdisyQVNBQURBRWkvN1lCUXYrMkFWSC92Z0ZnLzdZQllmKzJBV01BQ3dGbEFBc0JhLysyQVhEL3ZnR0VBQTBCaFFBTkFZY0FEUUdJQUEwQmlRQU5BZU1BRFFIbUFBMEI2QUFPQWVuLzlRSHIvK3dCN2YvdEFmWC83QUg3Lzc4Qi9QL3RBZjMvdndJRUFBNENCZi90QWdnQURnSWdBQTRDSWYvdEFpSUFEUUlrQUE0Q0t2L3RBa0gvN2dKRC83OENxLy93QXF6LzhBS3QvL0FDcnYvd0FxLy84QUt3Ly9BQ3NmL3dBckwvdGdLei83WUN0UCsyQXJYL3RnSzIvN1lDdlAvYUFyMy8yZ0srLzlvQ3YvL2FBc0QvMmdMRkFBc0N4Z0FMQXNqLzhBTEsvL0FDelAvd0FzNy90Z0xRLzdZQzB2KzJBdFQvdGdMVy83WUMyUCsyQXRyL3RnTGMvN1lDM3YrMkF1RC90Z0xpLzdZQzVQKzJBdWIvdGdMby83WURDdi9hQXd6LzJnTU8vOW9ETkFBTEEwUC92d05FLzc4RFJmKy9BMGIvdndOSC83OERTUCsvQTBuL3Z3TksvKzBEVlAvdEExWC83UU5XLyswRFYvL3RBMWovN1FOZEFBMERYdisvQTEvL3Z3TmcvNzhEWWYvdEEyTC83UU5qLyswRFpQL3RBMnYvN1FOcy8rMERiZi90QTI3LzdRTisvKzBEZi8vdEE0RC83UU9FLy9VRGhmLzFBNGIvOVFPSC8vVURpUUFPQTVJQURRT1RBQTBEci8rMkE3WC8yZ08zQUFzRHUvL2FBOVQvOEFQVi83WUQxLy9hQTluL3RnUGFBQXNEM1ArMkErTUFDd1ByQUFzRDdBQU5BKzBBRFFQd0FBMEQ5UC93QS9mL3RnUDhBQXNEL2YrMkJBTC90Z1FFQUFzRUN2L3dCQXovOEFRUS83WUVFdisyQkJQL3RnUWQvOW9FSC8rMkJDSC8yZ1FsQUFzRUp3QUxCQ2tBQ3dRdS83WUVNUC93QkRMLzhBUTAvL0FFTnYvd0JEai84QVE2Ly9BRVBQL3dCRDcvOEFSQS8vQUVRdi93QkVULzhBUkcvL0FFU1ArMkJFci90Z1JNLzdZRVR2KzJCRkQvdGdSUy83WUVWUCsyQkZiL3RnUmMvOW9FWHYvYUJHRC8yZ1JpLzlvRVpQL2FCR2IvMmdSby85b0VhdisyQkd6L3RnUnUvN1lFY1AvYUJITC90Z1NDQUFzRWhBQUxCSVlBQ3dTci8vQUVyZisyQkxILzJnUzYvN1lFdlArMkJOUUFDd1RXQUFzRTNQKy9CT0QvN1FUaEFBMEU0LysvQk84QURRVHlBQTBFKy8rL0JRTC83UVVGLyswRkJnQU9CUXIvN1FVTEFBMEE1d0FRL3djQUV2OEhBQ1gvVGdBdS93MEFPQUFVQUVYLzNnQkgvK3NBU1AvckFFbi82d0JMLytzQVUvL3JBRlgvNndCVy8rWUFXZi9xQUZyLzZBQmQvK2dBbFAvckFKbi82d0NiLytvQXN2OU9BTFQvVGdDNy8rc0F2Zi9vQU1qLzZ3REovK3NBeS8vcUFOSUFGQURXQUJRQTkvL3JBUVAvNndFTi8wNEJHUC9yQVJyLzZBRWUvK3NCSXYvckFUa0FGQUZDLytzQlJRQVVBV0QvNndGaC8rc0JhLy9yQVliL0J3R0svd2NCanY4SEFZLy9Cd0g3LzhBQi9mL0FBa1Avd0FLUS8wNENrZjlPQXBML1RnS1QvMDRDbFA5T0FwWC9UZ0tXLzA0Q3EvL2VBcXovM2dLdC85NENydi9lQXEvLzNnS3cvOTRDc2YvZUFyTC82d0t6LytzQ3RQL3JBclgvNndLMi8rc0N2UC9yQXIzLzZ3SysvK3NDdi8vckFzRC82d0xCLytvQ3d2L3FBc1AvNmdMRS8rb0N4Zi9vQXNiLzZBTEgvMDRDeVAvZUFzbi9UZ0xLLzk0Q3kvOU9Bc3ovM2dMTy8rc0MwUC9yQXRMLzZ3TFUvK3NDMXYvckF0ai82d0xhLytzQzNQL3JBdDcvNndMZy8rc0M0di9yQXVULzZ3TG0vK3NDNlAvckF2Yi9EUU1LLytzRERQL3JBdzcvNndNZkFCUURJUUFVQXlNQUZBTW0vK29ES1AvcUF5ci82Z01zLytvREx2L3FBekQvNmdNMC8rZ0RRLy9BQTBUL3dBTkYvOEFEUnYvQUEwZi93QU5JLzhBRFNmL0FBMTcvd0FOZi84QURZUC9BQTVmL1RnT2YvMDREci8vckE3UC82Z08xLytzRHQvL29BN3IvNmdPNy8rc0R2UC9xQThQL0RRUEgvMDREMGdBVUE5VC8zZ1BWLytzRDEvL3JBOW4vNndQYS8rZ0QzUC9yQStQLzZBUHIvK2dEOC85T0EvVC8zZ1AzLytzRC9QL29BLzMvNndRQy8rc0VCUC9vQkFuL1RnUUsvOTRFQy85T0JBei8zZ1FRLytzRUV2L3JCQlAvNndRZC8rc0VILy9yQkNILzZ3UWwvK2dFSi8vb0JDbi82QVF1LytzRUwvOU9CREQvM2dReC8wNEVNdi9lQkRQL1RnUTAvOTRFTmY5T0JEYi8zZ1EzLzA0RU9QL2VCRG4vVGdRNi85NEVPLzlPQkR6LzNnUTkvMDRFUHYvZUJELy9UZ1JBLzk0RVFmOU9CRUwvM2dSRC8wNEVSUC9lQkVYL1RnUkcvOTRFU1AvckJFci82d1JNLytzRVR2L3JCRkQvNndSUy8rc0VWUC9yQkZiLzZ3UmMvK3NFWHYvckJHRC82d1JpLytzRVpQL3JCR2IvNndSby8rc0Vhdi9yQkd6LzZ3UnUvK3NFY1AvckJITC82d1IwLytvRWR2L3FCSGovNmdSNi8rb0VmUC9xQkg3LzZnU0EvK29FZ3Yvb0JJVC82QVNHLytnRWlBQVVCS3IvVGdTci85NEVyZi9yQkxILzZ3UzEvK29FdXYvckJMei82d1RRQUJRRTFQL29CTmIvNkFUYy84QUU0Ly9BQlB2L3dBQUNBS0FBQkFBRUFBQUFCZ0FHQUFFQUN3QU1BQUlBRXdBVEFBUUFKUUFxQUFVQUxBQXRBQXNBTHdBMkFBMEFPQUE0QUJVQU9nQS9BQllBUlFCR0FCd0FTUUJLQUI0QVRBQk1BQ0FBVHdCUEFDRUFVUUJVQUNJQVZnQldBQ1lBV0FCWUFDY0FXZ0JkQUNnQVh3QmZBQ3dBaWdDS0FDMEFsZ0NXQUM0QW5RQ2RBQzhBc1FDMUFEQUF0d0M1QURVQXV3QzdBRGdBdlFDK0FEa0F3QURCQURzQXd3REZBRDBBeHdET0FFQUEwZ0RTQUVnQTFBRGVBRWtBNEFEdkFGUUE4UUR4QUdRQTlnRDRBR1VBK3dEOEFHZ0EvZ0VBQUdvQkF3RUZBRzBCQ2dFS0FIQUJEUUVOQUhFQkdBRWFBSElCSWdFaUFIVUJMZ0V3QUhZQk13RTFBSGtCTndFM0FId0JPUUU1QUgwQk93RTdBSDRCUXdGRUFIOEJWQUZVQUlFQlZnRldBSUlCV0FGWUFJTUJYQUZlQUlRQmhBR0ZBSWNCaHdHSkFJa0I2QUhvQUl3QjZnSHJBSTBCN1FIdEFJOEI4QUh3QUpBQit3SDlBSkVDUUFKQUFKUUNRd0pEQUpVQ1ZRSlZBSllDVndKWUFKY0Npd0tNQUprQ2pnS09BSnNDa0FLbEFKd0NxZ0t4QUxJQ3N3SzJBTG9DdXdMQUFMNEN4UUxOQU1RQ3p3TFBBTTBDMFFMUkFNNEMwd0xUQU04QzFRTFZBTkFDMXdMZ0FORUM2UUxyQU5zQzdRTHRBTjRDN3dMdkFOOEM4UUx4QU9BQzh3THpBT0VDK0FMNEFPSUMrZ0w2QU9NQy9BTDhBT1FDL2dMK0FPVURBQU1BQU9ZREFnTU9BT2NERUFNUUFQUURFZ01TQVBVREZBTVVBUFlESHdNZkFQY0RJUU1oQVBnREl3TWpBUGtETVFNeEFQb0RNd00yQVBzRE9BTTRBUDhET2dNNkFRQURRQU5KQVFFRFZBTllBUXNEWGdOZ0FSQURaUU5sQVJNRGR3TjZBUlFEZmdPQUFSZ0RpUU9KQVJzRGx3T2NBUndEbndPdUFTSURzUU94QVRJRHRRTzFBVE1EdHdPM0FUUUR1d083QVRVRHZnTy9BVFlEd1FQQ0FUZ0R4QVBLQVRvRHpBUE9BVUVEMEFQVkFVUUQxd1BZQVVvRDJnUGRBVXdENHdQa0FWQUQ1Z1BtQVZJRDZBUG9BVk1ENmdQdEFWUUQ4QVAxQVZnRDl3UDNBVjREK3dQOEFWOEVBUVFCQVdFRUF3UU1BV0lFRHdRUUFXd0VFZ1FWQVc0RUhBUWRBWElFSVFRaEFYUUVJd1FwQVhVRUx3UlhBWHdFV1FSWkFhVUVXd1JvQWFZRWNBUndBYlFFZ1FTR0FiVUVpQVNJQWJzRWpBU05BYndFa0FTUUFiNEVrZ1NUQWI4RWxRU1ZBY0VFbHdTWEFjSUVxQVNzQWNNRXJnU3VBY2dFc0FTeEFja0Vzd1N6QWNzRXR3UzVBY3dFdXdTN0FjOEV2UVMvQWRBRXdRVEJBZE1Fd3dUREFkUUV4UVRMQWRVRXpRVE5BZHdFMEFUUUFkMEUwd1RYQWQ0RTJRVFpBZU1FMndUY0FlUUU0QVRnQWVZRTR3VGpBZWNFN2dUdUFlZ0Urd1Q3QWVrRkFnVUNBZW9GQmdVR0Flc0FBZ0NhQUFZQUJnQUFBQXNBQ3dBQkFCQUFFQUFDQUJJQUVnQURBQ1VBS1FBRUFDd0FOQUFKQURnQVBnQVNBRVVBUndBWkFFa0FTUUFjQUV3QVRBQWRBRkVBVkFBZUFGWUFWZ0FpQUZvQVdnQWpBRndBWGdBa0FJb0FpZ0FuQUpZQWxnQW9BTEVBdEFBcEFMMEF2UUF0QU1FQXdRQXVBTWNBeHdBdkFOUUExUUF3QU5jQTF3QXlBTm9BMmdBekFOd0EzZ0EwQU9BQTVnQTNBT3dBN0FBK0FPNEE3Z0EvQVBjQTl3QkFBUHdBL0FCQkFQNEEvd0JDQVFRQkJRQkVBUW9CQ2dCR0FRMEJEUUJIQVJnQkdnQklBUzRCTUFCTEFUTUJOUUJPQVRjQk53QlJBVGtCT1FCU0FUc0JPd0JUQVVNQlJBQlVBVlFCVkFCV0FWWUJWZ0JYQVZnQldBQllBVndCWGdCWkFZUUJpZ0JjQVk0Qmp3QmpBZWdCNkFCbEFlMEI3UUJtQWZBQjhRQm5BZnNCL1FCcEFnOENEd0JzQWg0Q0lBQnRBa0FDUUFCd0FrTUNRd0J4QWxVQ1ZRQnlBbGNDV0FCekFvc0NqQUIxQW80Q2pnQjNBcEFDdGdCNEFyc0N3QUNmQXNVQzFRQ2xBdGNDNEFDMkF1a0M2d0RBQXUwQzdRRERBdThDN3dERUF2RUM4UURGQXZNQzh3REdBdllDOWdESEF2Z0MrQURJQXZvQytnREpBdndDL0FES0F2NEMvZ0RMQXdBREFBRE1Bd0lERGdETkF4QURFQURhQXhJREVnRGJBeFFERkFEY0F4OERId0RkQXlFRElRRGVBeU1ESXdEZkF5VURKUURnQXljREp3RGhBeWtES1FEaUF5c0RLd0RqQXkwRExRRGtBeThETHdEbEF6RURNUURtQXpNRE93RG5BMEFEU1FEd0ExUURXQUQ2QTE0RFlBRC9BMlVEWlFFQ0EzWURlZ0VEQTM0RGdBRUlBNGtEaVFFTEE1Y0RuQUVNQTU4RHJnRVNBN0VEc1FFaUE3VUR0UUVqQTdjRHR3RWtBN3NEdXdFbEE3NER2d0VtQThFRHlnRW9BOHdEemdFeUE5QUQxUUUxQTljRDNRRTdBK01ENUFGQ0ErWUQ1Z0ZFQStnRDZBRkZBK29EN1FGR0EvQUQ5UUZLQS9jRDl3RlFBL3NEL0FGUkJBRUVEQUZUQkE4RUVBRmZCQklFRlFGaEJCd0VIUUZsQkNFRUlRRm5CQ01FS1FGb0JDOEVWd0Z2QkZrRVdRR1lCRnNFYUFHWkJIQUVjQUduQkhNRWN3R29CSFVFZFFHcEJJRUVoZ0dxQklnRWlBR3dCSXdFalFHeEJKQUVrQUd6QkpJRWt3RzBCSlVFbFFHMkJKY0Vsd0czQktnRXJBRzRCSzRFcmdHOUJMQUVzUUcrQkxNRXN3SEFCTGNFdVFIQkJMc0V1d0hFQkwwRXZ3SEZCTUVFd1FISUJNTUV3d0hKQk1VRXl3SEtCTTBFelFIUkJOQUUwQUhTQk5JRTF3SFRCTmtFM0FIWkJPQUU0QUhkQk9NRTR3SGVCT2tFNlFIZkJPNEU3Z0hnQlBrRStRSGhCUHNFK3dIaUJRSUZBZ0hqQlFZRkJnSGtBQUlCZEFBR0FBWUFEd0FMQUFzQUR3QVFBQkFBR2dBU0FCSUFHZ0FsQUNVQUFnQW1BQ1lBSkFBbkFDY0FFQUFvQUNnQUFRQXBBQ2tBQkFBdUFDNEFDQUF2QUM4QURRQXdBREFBRndBekFETUFBUUEwQURRQUpRQTRBRGdBRWdBNUFEa0FDQUE2QURvQUhBQTdBRHNBR0FBOEFEd0FFUUE5QUQwQURBQStBRDRBR1FCRkFFVUFBd0JHQUVZQURnQkhBRWNBRXdCSkFFa0FCUUJNQUV3QUNRQlJBRklBQ1FCVEFGTUFCZ0JVQUZRQURnQldBRllBR3dCYUFGb0FCd0JjQUZ3QUZRQmRBRjBBQndCZUFGNEFId0NLQUlvQURnQ1dBSllBQVFDeEFMRUFGZ0N5QUxJQUFnQ3pBTE1BQVFDMEFMUUFBZ0M5QUwwQUJ3REJBTUVBQ1FESEFNY0FEZ0RVQU5VQUlBRGFBTm9BRVFEZUFONEFJUURrQU9RQUlBRG1BT1lBSUFEc0FPd0FJZ0R1QU80QUZRRDNBUGNBRGdEOEFQd0FJd0QrQVA0QUl3RC9BUDhBRGdFRUFRVUFJd0VLQVFvQUl3RU5BUTBBQWdFWUFSZ0FCZ0VaQVJrQUhBRWFBUm9BQndFdUFTNEFEZ0V2QVM4QUZnRXdBVEFBSWdFekFUTUFFUUUwQVRRQUZRRTFBVFVBRFFFM0FUY0FEUUU1QVRrQURRRkRBVU1BRVFGRUFVUUFGUUZZQVZnQUFRRmNBVndBSWdGZEFWMEFFUUZlQVY0QUZRR0VBWVVBRHdHR0FZWUFHZ0dIQVlrQUR3R0tBWW9BR2dHT0FZOEFHZ0hvQWVnQUhRSHRBZTBBQ2dId0FmQUFIZ0h4QWZFQUZBSDdBZnNBQ3dIOEFmd0FDZ0g5QWYwQUN3SVBBZzhBRkFJZUFpQUFGQUpBQWtBQUNnSkRBa01BQ3dKVkFsVUFFQUpYQWxnQUFRS0xBb3dBQVFLT0FvNEFFZ0tRQXBZQUFnS1hBcGNBRUFLWUFwc0FCQUtoQXFVQUFRS21BcWtBQ0FLcUFxb0FEQUtyQXJFQUF3S3lBcklBRXdLekFyWUFCUUs3QXJzQUNRSzhBc0FBQmdMRkFzWUFCd0xIQXNjQUFnTElBc2dBQXdMSkFza0FBZ0xLQXNvQUF3TExBc3NBQWdMTUFzd0FBd0xOQXMwQUVBTE9BczRBRXdMUEFzOEFFQUxRQXRBQUV3TFJBdEVBRUFMU0F0SUFFd0xUQXRNQUVBTFVBdFFBRXdMVkF0VUFBUUxYQXRjQUJBTFlBdGdBQlFMWkF0a0FCQUxhQXRvQUJRTGJBdHNBQkFMY0F0d0FCUUxkQXQwQUJBTGVBdDRBQlFMZkF0OEFCQUxnQXVBQUJRTHFBdW9BQ1FMMkF2WUFDQUw0QXZnQURRTDZBdm9BRndMOEF2d0FGd0wrQXY0QUZ3TUFBd0FBRndNREF3TUFDUU1GQXdVQUNRTUhBd2dBQ1FNSkF3a0FBUU1LQXdvQUJnTUxBd3NBQVFNTUF3d0FCZ01OQXcwQUFRTU9BdzRBQmdNUUF4QUFHd01TQXhJQUd3TVVBeFFBR3dNZkF4OEFFZ01oQXlFQUVnTWpBeU1BRWdNbEF5VUFDQU1uQXljQUNBTXBBeWtBQ0FNckF5c0FDQU10QXkwQUNBTXZBeThBQ0FNeEF6RUFHQU16QXpNQURBTTBBelFBQndNMUF6VUFEQU0yQXpZQUdRTTNBemNBSHdNNEF6Z0FHUU01QXprQUh3TTZBem9BR1FNN0F6c0FId05BQTBFQUNnTkNBMElBSFFOREEwa0FDd05VQTFnQUNnTmVBMkFBQ3dObEEyVUFDZ04yQTNZQUZBTjNBM29BSGdOK0E0QUFDZ09KQTRrQUhRT1hBNWNBQWdPWUE1Z0FCQU9iQTVzQUFRT2NBNXdBREFPZkE1OEFBZ09nQTZBQUpBT2hBNkVBQkFPaUE2SUFHUU9sQTZVQURRT29BNmdBQVFPcEE2a0FKUU9xQTZvQUVnT3JBNnNBREFPc0E2d0FFUU91QTY0QURBT3hBN0VBQ1FPMUE3VUFCZ08zQTdjQUJ3TzdBN3NBQmdPK0E3NEFCQU8vQTc4QUZnUERBOE1BQ0FQRUE4VUFEUVBHQThZQUlRUEhBOGNBQWdQSUE4Z0FKQVBKQThrQUZnUEtBOG9BQkFQT0E4NEFBUVBRQTlBQUpRUFJBOUVBRUFQU0E5SUFFZ1BUQTlNQUVRUFVBOVFBQXdQVkE5VUFCUVBYQTljQUJnUFlBOWdBRGdQWkE5a0FFd1BhQTlvQUJ3UGJBOXNBRlFQY0E5d0FCUVBkQTkwQUlnUGpBK01BQndQa0ErUUFHQVBtQStZQUdBUG9BK2dBR0FQcUErb0FEQVByQStzQUJ3UHNBKzBBRHdQd0EvQUFEd1B5QS9JQUNRUHpBL01BQWdQMEEvUUFBd1AxQS9VQUJBUDNBL2NBQlFQN0Evc0FIQVA4QS93QUJ3UUJCQUVBRUFRQ0JBSUFFd1FEQkFNQURBUUVCQVFBQndRR0JBWUFFUVFIQkFjQUZRUUpCQWtBQWdRS0JBb0FBd1FMQkFzQUFnUU1CQXdBQXdRUEJBOEFCQVFRQkJBQUJRUVNCQk1BQlFRVUJCUUFFUVFWQkJVQUZRUWNCQndBQVFRZEJCMEFCZ1FoQkNFQUJnUWpCQ01BRGdRa0JDUUFJUVFsQkNVQUJ3UW1CQ1lBSVFRbkJDY0FCd1FvQkNnQUlRUXBCQ2tBQndRdkJDOEFBZ1F3QkRBQUF3UXhCREVBQWdReUJESUFBd1F6QkRNQUFnUTBCRFFBQXdRMUJEVUFBZ1EyQkRZQUF3UTNCRGNBQWdRNEJEZ0FBd1E1QkRrQUFnUTZCRG9BQXdRN0JEc0FBZ1E4QkR3QUF3UTlCRDBBQWdRK0JENEFBd1EvQkQ4QUFnUkFCRUFBQXdSQkJFRUFBZ1JDQkVJQUF3UkRCRU1BQWdSRUJFUUFBd1JGQkVVQUFnUkdCRVlBQXdSSEJFY0FCQVJJQkVnQUJRUkpCRWtBQkFSS0JFb0FCUVJMQkVzQUJBUk1CRXdBQlFSTkJFMEFCQVJPQkU0QUJRUlBCRThBQkFSUUJGQUFCUVJSQkZFQUJBUlNCRklBQlFSVEJGTUFCQVJVQkZRQUJRUlZCRlVBQkFSV0JGWUFCUVJiQkZzQUFRUmNCRndBQmdSZEJGMEFBUVJlQkY0QUJnUmZCRjhBQVFSZ0JHQUFCZ1JoQkdFQUFRUmlCR0lBQmdSakJHTUFBUVJrQkdRQUJnUmxCR1VBQVFSbUJHWUFCZ1JuQkdjQUFRUm9CR2dBQmdSd0JIQUFCZ1J6QkhNQUNBUjFCSFVBQ0FTQkJJRUFEQVNDQklJQUJ3U0RCSU1BREFTRUJJUUFCd1NGQklVQURBU0dCSVlBQndTSUJJZ0FFZ1NNQkl3QUZnU05CSTBBSWdTUUJKQUFDUVNTQkpJQUlBU1RCSk1BRmdTVkJKVUFEUVNYQkpjQURBU3BCS2tBQ1FTcUJLb0FBZ1NyQktzQUF3U3NCS3dBQkFTd0JMQUFBUVN4QkxFQUJnU3pCTE1BR3dTM0JMY0FKQVM0QkxnQURnUzVCTGtBQVFTN0JMc0FBUVMrQkw0QUNRUy9CTDhBRFFUQkJNRUFEUVREQk1NQUZ3VEdCTVlBQ1FUSUJNZ0FDUVRKQk1rQUFRVEtCTW9BSlFUTEJNc0FEZ1ROQk0wQUd3VFFCTkFBRWdUU0JOSUFDQVRUQk5NQUhBVFVCTlFBQndUVkJOVUFIQVRXQk5ZQUJ3VFhCTmNBR0FUWkJOa0FHUVRhQk5vQUh3VGJCTnNBQVFUY0JOd0FDd1RnQk9BQUNnVGpCT01BQ3dUcEJPa0FGQVR1Qk80QUhRVDVCUGtBRkFUN0JQc0FDd1VDQlFJQUNnVUdCUVlBSFFBQkFBWUZCZ0FQQUFBQUFBQUFBQUFBRHdBQUFBQUFBQUFBQUJnQUd3QVlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQ0FBQUFBQUFBQUFJQUFBQUFBQ01BQUFBQUFBQUFBQUFDQUFBQUFnQUFBQlFBRFFBTEFCb0FGZ0FRQUF3QUZ3QUFBQUFBQUFBQUFBQUFBQUFHQUFBQUFRQUJBQUVBQUFBQkFBQUFBQUFBQUFBQUFBQURBQU1BQndBREFBRUFBQUFSQUFBQUNBQUpBQUFBRXdBSkFCMEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBRUFBQUFBQUFBQUFnQUJBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFnQUVBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUpBQUFBQUFBQUFBTUFBQUFBQUFBQUFBQUFBQUFBQVFBQkFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBTkFBSUFIZ0FBQUEwQUFBQUFBQUFBRUFBQUFBQUFIZ0FmQUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdBQUFCTUFBQUFEQUFNQUlRQURBQU1BQXdBQUFBRUFBd0FpQUFNQUF3QUFBQUFBQXdBQUFBTUFBQUFBQUFFQUlRQURBQUFBQUFBQ0FBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBQWNBR2dBSkFBSUFBQUFDQUFFQUFnQUFBQUlBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUFBQUFBQUFBQkFBRXdBQUFBTUFBQUFBQUEwQUFBQUFBQU1BQUFBREFBQUFBQUFDQUFFQUVBQVRBQTBBQUFBZ0FDSUFBQUFBQUFBQUFBQUFBQUFBQUFBZUFDRUFBQUFEQUFBQUF3QUFBQU1BQUFBQUFBQUFBQUFEQUJBQUV3QUFBQUVBQVFBQUFBQUFBQUFBQUI0QUFBQUFBQUFBQWdBQkFBQUFBQUFBQUI0QUlRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzQUd3QUFBQThBRHdBWUFBOEFEd0FQQUJnQUFBQUFBQUFBR0FBWUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTQUJrQUpBQUFBQTRBRlFBY0FBQUFCUUFBQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQUFBS0FBVUFDZ0FBQUFBQUFBQUFBQUFBQUFBVkFBVUFBQUFBQUJVQUFBQUFBQUFBR1FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQmtBQUFBQUFCVUFCUUFTQUJrQUZRQUFBQUFBQUFBQUFBQUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQUFBS0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUFBQUFDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR3dBQUFBQUFBQUFBQUFBQUJBQUVBQVFBQkFBRUFBUUFCQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnQUNBQUlBQWdBTEFBc0FDd0FMQUF3QUJnQUdBQVlBQmdBR0FBWUFCZ0FCQUFFQUFRQUJBQUVBQUFBQUFBQUFBQUFEQUFjQUJ3QUhBQWNBQndBSUFBZ0FDQUFJQUFrQUNRQUVBQVlBQkFBR0FBUUFCZ0FDQUFFQUFnQUJBQUlBQVFBQ0FBRUFBQUFCQUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFFQUFnQUJBQUlBQVFBQ0FBRUFBZ0FCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQUFBQUF3QUFBQU1BQXdBQ0FBY0FBZ0FIQUFJQUJ3QUFBQUFBQUFBQUFBQUFBQUFVQUJFQUZBQVJBQlFBRVFBVUFCRUFGQUFSQUEwQUFBQU5BQUFBRFFBQUFBc0FDQUFMQUFnQUN3QUlBQXNBQ0FBTEFBZ0FDd0FJQUJZQUFBQU1BQWtBREFBWEFCMEFGd0FkQUJjQUhRQUFBQUFBQWdBQUFBQUFBQUFBQUFvQUNnQUtBQW9BQ2dBS0FBb0FCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUZBQVVBRGdBT0FBNEFEZ0FTQUFvQUNnQUtBQVVBQlFBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFBQUFBQUFBQWNBQndBSEFBY0FBQUFGUUFBQUE0QURnQU9BQTRBRGdBT0FDUUFFZ0FTQUFBQUFBQUFBQVFBQUFBQUFBQUFBZ0FNQUFBQUFBQUVBQUFBQUFBWEFBQUFBQUFBQUFBQUFBQUNBQUFBQUFBTUFCQUFBQUFNQUFFQUFBQURBQUFBQ0FBQUFBY0FBQUFKQUFBQUFBQUlBQWNBQ0FBQUFBQUFBQUFBQUFBQUFBQWpBQUFBQUFBZkFBUUFBQUFBQUFBQUFBQUFBQUFBQWdBQUFBQUFBZ0FOQUJBQUJnQUJBQU1BQndBREFBRUFDUUFUQUFFQUF3QVJBQUFBQUFBQUFBTUFDUUFXQUFBQUZnQUFBQllBQUFBTUFBa0FEd0FQQUFBQUFBQVBBQUFBQXdBRUFBWUFBQUFBQUFFQUF3QUFBQUFBR2dBSkFBRUFBZ0FBQUFBQUFnQUJBQXdBQ1FBQUFCQUFFd0FBQUFRQUJnQUVBQVlBQUFBQUFBQUFBUUFBQUFFQUFRQVFBQk1BQUFBQUFBQUFBd0FBQUFNQUFnQUhBQUlBQVFBQ0FBY0FBQUFBQUI4QUNRQWZBQWtBSHdBSkFDQUFJZ0FBQUFNQUFRQUVBQVlBQkFBR0FBUUFCZ0FFQUFZQUJBQUdBQVFBQmdBRUFBWUFCQUFHQUFRQUJnQUVBQVlBQkFBR0FBUUFCZ0FBQUFFQUFBQUJBQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUVBQUFBQkFBQUFBQUFBQUFBQUFnQUhBQUlBQndBQ0FBY0FBZ0FIQUFJQUJ3QUNBQWNBQWdBSEFBSUFBUUFDQUFFQUFnQUJBQUlBQndBQ0FBRUFDd0FJQUFzQUNBQUFBQWdBQUFBSUFBQUFDQUFBQUFnQUFBQUlBQXdBQ1FBTUFBa0FEQUFKQUFBQURRQUFBQ0FBSWdBQUFBTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQUFBQUFBQUFBQUFBQUFBR3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd0FFQUFZQUFBQUJBQUFBQUFBQ0FBY0FBQUFBQUFBQUNBQUFBQUFBQUFBQUFBRUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFBQURBQUlBQUFBQUFBQUFBQUFVQUJFQURRQUFBQXNBR2dBSkFCb0FDUUFXQUFBQUZ3QWRBQUFBQ2dBQUFBQUFBQUFGQUJJQUFBQUtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBU0FCa0FBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLQUFBQUFBQUFBQUFBQUFBQUFBVUFBQUFBQUFVQUZRQVpBQUFBQUFBRkFCSUFBUUFBQUFvQVpBQWtBQVJFUmt4VUFQNWplWEpzQVA1bmNtVnJBUDVzWVhSdUFRSUFId0VXQVI0QkpnRXVBVFlCUGdFK0FVWUJUZ0ZXQVY0QlpnRnVBWFlCZmdHR0FZNEJsZ0dlQWFZQnJnRzJBYjRCeGdIT0FkWUIzZ0hXQWQ0QjVnSHVBQnRqTW5OakFiWmpZMjF3QWtCa2JHbG5BYnhrYm05dEFjSm1jbUZqQWxCc2FXZGhBY2hzYVdkaEFscHNhV2RoQWtoc2JuVnRBYzVzYjJOc0FkUnNiMk5zQWRwc2IyTnNBZUJzYjJOc0FlWnVkVzF5QWV4dmJuVnRBZkp3Ym5WdEFmaHpiV053QWY1emN6QXhBZ1J6Y3pBeUFncHpjekF6QWhCemN6QTBBaFp6Y3pBMUFoeHpjekEyQWlKemN6QTNBaWh6ZFdKekFpNXpkWEJ6QWpSMGJuVnRBam9Cd2dBQUE4WUFCMEZhUlNBRDlrTlNWQ0FEOWtaU1FTQUVKazFQVENBRVdFNUJWaUFFaWxKUFRTQUV2RlJTU3lBRDlnQUJBQUFBQVFjT0FBRUFBQUFCQlNvQUJnQUFBQUVDU2dBQkFBQUFBUUlNQUFRQUFBQUJCS0FBQVFBQUFBRUJsZ0FCQUFBQUFRSUdBQUVBQUFBQkFZd0FCQUFBQUFFQnFBQUVBQUFBQVFHb0FBUUFBQUFCQWJ3QUFRQUFBQUVCY2dBQkFBQUFBUUZ3QUFFQUFBQUJBVzRBQVFBQUFBRUJpQUFCQUFBQUFRR0tBQUVBQUFBQkFrSUFBUUFBQUFFQmtBQUJBQUFBQVFKUUFBRUFBQUFCQW5ZQUFRQUFBQUVDbkFBQkFBQUFBUUxDQUFFQUFBQUJBU3dBQmdBQUFBRUJrQUFCQUFBQUFRRzBBQUVBQUFBQkFjWUFBUUFBQUFFQjJBQUJBQUFBQVFFS0FBQUFBUUFBQUFBQUFRQUxBQUFBQVFBYkFBQUFBUUFLQUFBQUFRQVdBQUFBQVFBSUFBQUFBUUFGQUFBQUFRQUhBQUFBQVFBR0FBQUFBUUFjQUFBQUFRQVRBQUFBQVFBVUFBQUFBUUFCQUFBQUFRQU1BQUFBQVFBTkFBQUFBUUFPQUFBQUFRQVBBQUFBQVFBUUFBQUFBUUFSQUFBQUFRQVNBQUFBQVFBZUFBQUFBUUFkQUFBQUFRQVZBQUFBQWdBQ0FBUUFBQUFDQUFrQUNnQUFBQU1BRndBWUFCb0FBQUFFQUFrQUNnQUpBQW9BQVAvL0FCUUFBQUFCQUFJQUF3QUVBQWdBRFFBT0FBOEFFQUFSQUJJQUV3QVVBQlVBRmdBWEFCZ0FHUUFhQUFFSGFBQUNBQUVIUkFBQkFBRUhSQUh1QUFFSFJBRi9BQUVIUkFJRkFBRUhSQUdCQUFFSFpBR0pBQUVPT2dBQkIwWUFBUTR5QUFFSFJBQUNCMWdBQWdJOEFqMEFBZ2RPQUFJQ1BnSS9BQUVPTGdBREJ5NEhNZ2MyQUFJSFFBQURBbjRDZndKL0FBSUhWZ0FHQW5FQ2J3SnlBbk1DY0FVZUFBSUhOQUFHQlJnRkdRVWFCUnNGSEFVZEFBTUFBUWRDQUFFRy9nQUFBQUVBQUFBWkFBSUhJQWNJQjRJSFJnQUhBQUFIREFjTUJ3d0hEQWNNQnd3QUFnYlNBQW9CMXdIV0FkVUNMd0l3QWpFQ01nSXpBalFDTlFBQ0JyZ0FDZ0pPQUhvQWN3QjBBazhDVUFKUkFsSUNVd0pVQUFJR25nQUtBWlVBZWdCekFIUUJsZ0dYQVpnQm1RR2FBWnNBQWdidUFBd0NWUUpYQWxZQ1dBSlpBbmNDZUFKNUFub0Nld0o4QW4wQUFnY2tBQlFDYWdKdUFtZ0NaUUpuQW1ZQ2F3SnBBbTBDYkFKZkFsb0NXd0pjQWwwQ1hnQWFBQndDWXdKMUFBSUd2Z0FVQktVQ2dRU2VCSjhFb0FTaEJLSUNkZ1NqQktRQ1hBSmVBbDBDV3dKZkFuVUFHZ0pqQUJ3Q1dnQUNCd3dBRkFKckFtMENiZ0pvQW1VQ1p3Sm1BbWtDYkFKcUFCc0FGUUFXQUJjQUdBQVpBQm9BSEFBZEFCUUFBZ2EyQUJRRW9nU2pBb0VFbmdTZkJLQUVvUUoyQktRQUZ3QVpBQmdBRmdBYkFCUUFHZ0FkQUJ3QUZRU2xBQUQvL3dBVkFBQUFBUUFDQUFNQUJBQUhBQWdBRFFBT0FBOEFFQUFSQUJJQUV3QVVBQlVBRmdBWEFCZ0FHUUFhQUFELy93QVZBQUFBQVFBQ0FBTUFCQUFGQUFnQURRQU9BQThBRUFBUkFCSUFFd0FVQUJVQUZnQVhBQmdBR1FBYUFBRC8vd0FXQUFBQUFRQUNBQU1BQkFBR0FBZ0FDUUFOQUE0QUR3QVFBQkVBRWdBVEFCUUFGUUFXQUJjQUdBQVpBQm9BQVAvL0FCWUFBQUFCQUFJQUF3QUVBQVlBQ0FBS0FBMEFEZ0FQQUJBQUVRQVNBQk1BRkFBVkFCWUFGd0FZQUJrQUdnQUEvLzhBRmdBQUFBRUFBZ0FEQUFRQUJnQUlBQXNBRFFBT0FBOEFFQUFSQUJJQUV3QVVBQlVBRmdBWEFCZ0FHUUFhQUFELy93QVdBQUFBQVFBQ0FBTUFCQUFHQUFnQURBQU5BQTRBRHdBUUFCRUFFZ0FUQUJRQUZRQVdBQmNBR0FBWkFCb0FBUStTQURZRzhnVzBCYmdGOEFjQUJmWUZ2QWNPQmpJR09nWDhCb1lIVkFYQUJuSUdRZ1lDQjJRR0NBWktCcElHRGdjY0JjUUZ5QVlVQnlvRnpBWFFCZFFHVWdaYUJob0duZ2M0QmRnR2ZBWmlCaUFIUmdZbUJtb0dxZ1lzQmR3RjRBWGtCZWdHdGdiQ0JzNEcyZ2JtQmV3QUFnY0NBT3NDZ2dKREFrSUNRUUpBQWpnQjlnSDFBZlFCOHdIeUFmRUI4QUh2QWU0QjdRSHNBZXNCNmdIcEFlZ0I1d0htQWVVQjVBSGpBZUlDZEFLRUEwRUNoZ0tGQTBBQjh3S0RBb2dDWWdUakJPUUIrZ0g3Qk9VRTVnVG5BZndFNkFIOUFmNEIvd1R0QWdBQ0FBVHVCTzhDQVFJQ0FnTUNDZ1Q4QlAwQ0N3SU1BZzBDRGdJUEFoQUZBQVVCQlFNRkJnVVBBaElDRXdJVUFoVUNGZ0lYQWhnQ0dRSWFBaHNDQkFJRkFnWUNCd0lJQWdrQ1N3SWRBaDRDSHdJZ0JRa0NJUUlqQWlRQ0pRSW5BaWtDaHdOQ0EwTURSQU5GQTBZRFJ3TklBMGtEU2dOTEEwd0RUUU5PQTA4RFVBTlJBMUlEVXdOVUExVURWZ05YQTFnRFdRTmFBMXNEWEFOZEE1TURYZ05mQTJBRFlRTmlBMk1EWkFObEEyWURad05vQTJrRGFnTnJBMndEYlFOdUEyOERjQU54QTNJRGN3VVFBM1VEZGdOM0EzZ0RlUU42QTNzRGZBTjlBMzREZndPQUE0RURnZ09EQTRRRGhRT0dCUk1EaHdPSUE0b0RpUU9MQTR3RGpRT09BNDhEa0FPUkE1SURsQU9WQTVZRkVRVVNCTndFM1FUZUJOOEU2UVRzQk9vRTZ3VHdCUEVFOGdUZ0JPRUU0Z1Q3QlA0RS93VUNCUVFGQlFJUkJRY0U4d1QwQlBVRTlnVDNCUGdFK1FUNkJSUUZGUVVXQlJjRkNBVUtCUXNDS0FVTkFpb0ZEZ1VNQWlZQ0hBSWlCUndGSFFBQ0J3QUErZ0gzQW9JQjRRSGdBZDhCM2dIZEFkd0Iyd0hhQWRrQjJBSkRBa0lDUVFKQUFqZ0I5Z0gxQWZRQjh3SHlBZkVCOEFIdkFlNEI3UUhzQWVzQjZnSHBBZWdCNXdIbUFlVUI1QUhqQWVJQitBSDVBb1FDaGdLRkFvY0Nnd0tJQW1JQitnSDdBZndCL1FIK0FmOENBQUlCQWdJQ0F3SUVBZ1VDQmdJSEFnZ0NDUUlLQWdzQ0RBSU5BZzRDRUFJUkJROENFZ0lUQWhRQ0ZRSVdBaGNDR0FJWkFob0NHd0pMQWgwQ0hnSWZBaUFGQ1FJaEFpTUNKQUlsQWlZQ0p3SW9BaWtDS3dJc0FpNENMUU5BQTBFRFFnTkRBMFFEUlFOR0EwY0RTQU5KQTBvRFN3Tk1BMDBEVGdOUEExQURVUU5TQTFNRFZBTlZBMVlEVndOWUExa0RXZ05iQTF3RFhRTmVBMThEWUFOaEEySURZd05rQTJVRFpnTm5BMmdEYVFOcUEyc0RiQU50QTI0RGJ3TndBM0VEY2dOekEzUUZFQU4xQTNZRGR3TjRBM2tEZWdON0Ezd0RmUU4rQTM4RGdBT0JBNElEZ3dPRUE0VURoZ1VUQTRjRGlBT0tBNGtEaXdPTUE0MERqZ09QQTVBRGtRT1NBNU1EbEFPVkE1WUZFUVVTQk53RTNRVGVCTjhFNEFUaEJPSUU0d1RrQk9VRTVnVG5CT2dFNlFUcUJPc0U3QVR0Qk80RTd3VHdCUEVFOGdUekJQUUU5UVQyQlBjRStBSVBCUGtFK2dUN0JQd0UvUVQrQlA4RkFBVUJCUUlGQXdVRUJRVUZCZ1VIQlJRRkZRVVdCUmNGQ0FVS0JRc0ZEUUlxQlE0RkRBSWNBaUlGSEFVZEFBRUFBUUY3QUFFQUFRQkxBQUVBQVFDN0FBRUFBUUEyQUFFQUFRQVRBQUVBQWdNWkF4b0FBZ2JrQnRnQUFnYm1CdGdBQVFidUFBRUc4QUFCQnZJQUFnQUJBQlFBSFFBQUFBRUFBZ0F2QUU4QUFRQURBRWtBU3dKNkFBSUFBQUFCQnQ0QUFRQUdBc3NDekFMZEF0NERZQU5wQUFFQUJnQk5BRTRDOGdQZkErRUVXZ0FDQUFNQmxBR1VBQUFCMVFIWEFBRUNMd0kxQUFRQUFnQUNBS2dBckFBQkFTUUJKd0FCQUFFQURBQW5BQ2dBS3dBekFEVUFSZ0JIQUVnQVN3QlRBRlFBVlFBQ0FBSUFGQUFkQUFBQ1pRSnVBQW9BQWdBR0FFMEFUUUFHQUU0QVRnQUVBdklDOGdBRkE5OEQzd0FEQStFRDRRQUNCRm9FV2dBQkFBSUFCQUFVQUIwQUFBSjJBbllBQ2dLQkFvRUFDd1NlQktVQURBQUNBQVlBR2dBYUFBQUFIQUFjQUFFQ1dnSmZBQUlDWXdKakFBZ0NaUUp1QUFrQ2RRSjFBQk1BQVFBVUFCb0FIQUphQWxzQ1hBSmRBbDRDWHdKakFuVUNkZ0tCQko0RW53U2dCS0VFb2dTakJLUUVwUUFCQmQ0QUFRWGdBQUVGNGdBQkJlUUFBUVhtQUFFRjZBQUJCZW9BQVFYc0FBRUY3Z0FCQmZBQUFRWHlBQUVGOUFBQkJmWUFBUVg0QUFFRitnQUNCZndHQWdBQ0JnSUdDQUFDQmdnR0RnQUNCZzRHRkFBQ0JoUUdHZ0FDQmhvR0lBQUNCaUFHSmdBQ0JpWUdMQUFDQml3R01nQUNCaklHT0FBQ0JqZ0dQZ0FEQmo0R1JBWktBQU1HU0FaT0JsUUFBd1pTQmxnR1hnQURCbHdHWWdab0FBTUdaZ1pzQm5JQUF3WndCbllHZkFBREJub0dnQWFHQUFNR2hBYUtCcEFBQkFhT0JwUUdtZ2FnQUFRR25BYWlCcWdHcmdBRkJxb0dzQWEyQnJ3R3dnQUZCcndHd2diSUJzNEcxQUFGQnM0RzFBYmFCdUFHNWdBRkJ1QUc1Z2JzQnZJRytBQUZCdklHK0FiK0J3UUhDZ0FGQndRSENnY1FCeFlISEFBRkJ4WUhIQWNpQnlnSExnQUZCeWdITGdjMEJ6b0hRQUFGQnpvSFFBZEdCMHdIVWdBR0Iwd0hVZ2RZQjE0SFpBZHFBQVlIWWdkb0IyNEhkQWQ2QjRBQUJnZDRCMzRIaEFlS0I1QUhsZ0FHQjQ0SGxBZWFCNkFIcGdlc0FBWUhwQWVxQjdBSHRnZThCOElBQmdlNkI4QUh4Z2ZNQjlJSDJBQUdCOUFIMWdmY0IrSUg2QWZ1QUFjSUxnZm1CK3dIOGdmNEIvNElCQUFIQ0NZSCtnZ0FDQVlJREFnU0NCZ0FBUURyQUFvQVJRQkdBRWNBU0FCSkFFb0FTd0JNQUUwQVRnQlBBRkFBVVFCU0FGTUFWQUJWQUZZQVZ3QllBRmtBV2dCYkFGd0FYUUJlQUlVQWhnQ0hBSWtBaWdDTEFJMEFrQUNTQUpRQXV3QzhBTDBBdmdDL0FNQUF3UURDQU1NQXhBREZBTVlBeHdESUFNa0F5Z0RMQU13QXpRRE9BT29BNndEc0FPMEE3Z0R2QVBBQThRRHlBUE1BOUFEMUFQWUE5d0Q0QVBrQStnRDdBUHdBL1FEK0FQOEJBQUVCQVFJQkF3RUVBUVVCQmdFSEFUQUJOQUUyQVRnQk9nRThBVUlCUkFGR0FVb0JUUUZhQW8wQ2p3S3JBcXdDclFLdUFxOENzQUt4QXJJQ3N3SzBBclVDdGdLM0FyZ0N1UUs2QXJzQ3ZBSzlBcjRDdndMQUFzRUN3Z0xEQXNRQ3hRTEdBc2dDeWdMTUFzNEMwQUxTQXRRQzFnTFlBdG9DM0FMZUF1QUM0Z0xrQXVZQzZBTHFBdXdDN2dMd0F2SUM5UUwzQXZrQyt3TDlBdjhEQVFNREF3VURCd01LQXd3RERnTVFBeElERkFNV0F4Z0RHZ01jQXg0RElBTWlBeVFESmdNb0F5b0RMQU11QXpBRE1nTTBBemNET1FNN0F6MERQd092QTdBRHNRT3lBN1FEdFFPMkE3Y0R1QU81QTdvRHV3TzhBNzBEMUFQVkE5WUQxd1BZQTlrRDJnUGJBOXdEM1FQZUE5OEQ0QVBoQStJRDR3UGxBK2NENlFQckJBQUVBZ1FFQkJJRUdRUWZCQ1VFandTUUJKUUVtQVVaQlJzQUFRRDZBQWdBQ2dBVUFCVUFGZ0FYQUJnQUdRQWFBQnNBSEFBZEFDVUFKZ0FuQUNnQUtRQXFBQ3NBTEFBdEFDNEFMd0F3QURFQU1nQXpBRFFBTlFBMkFEY0FPQUE1QURvQU93QThBRDBBUGdCbEFHY0FnUUNEQUlRQWpBQ1BBSkVBa3dDeEFMSUFzd0MwQUxVQXRnQzNBTGdBdVFDNkFOSUEwd0RVQU5VQTFnRFhBTmdBMlFEYUFOc0EzQURkQU40QTN3RGdBT0VBNGdEakFPUUE1UURtQU9jQTZBRHBBUzhCTXdFMUFUY0JPUUU3QVVFQlF3RkZBVWtCU3dGTUFWZ0JXUUduQWEwQnNnRzFBb3NDakFLT0FwQUNrUUtTQXBNQ2xBS1ZBcFlDbHdLWUFwa0NtZ0tiQXB3Q25RS2VBcDhDb0FLaEFxSUNvd0trQXFVQ3BnS25BcWdDcVFLcUFzY0N5UUxMQXMwQ3p3TFJBdE1DMVFMWEF0a0Myd0xkQXQ4QzRRTGpBdVVDNXdMcEF1c0M3UUx2QXZFQzh3TDBBdllDK0FMNkF2d0MvZ01BQXdJREJBTUdBd2tEQ3dNTkF3OERFUU1UQXhVREZ3TVpBeHNESFFNZkF5RURJd01sQXljREtRTXJBeTBETHdNeEF6TUROUU0yQXpnRE9nTThBejREbHdPWUE1a0RtZ09iQTV3RG5RT2ZBNkFEb1FPaUE2TURwQU9sQTZZRHB3T29BNmtEcWdPckE2d0RyUU91QTc0RHZ3UEFBOEVEd2dQREE4UUR4UVBHQThjRHlBUEpBOG9EeXdQTUE4MER6Z1BQQTlBRDBRUFNBOU1ENUFQbUErZ0Q2Z1AvQkFFRUF3UVlCQjRFSkFTT0JKTUVsd1VZQlJvQnpBQUNBRTBCelFBQ0FGQUJ6Z0FEQUVvQVRRSFBBQU1BU2dCUUFBRUFBUUJLQWNzQUFnQktBZEVBQWdCWUFkQUFBZ0JZQUFFQUF3QktBRmNBbFFBQUFBRUFBUUFCQUFFQUFBQURCTGNBQWdDdEFzMEFBZ0NwQkwwQUFnQ3RCTW9BQWdDcEJMZ0FBZ0N0QXM0QUFnQ3BCS2NBQWdDcEJMNEFBZ0N0QkZvQUFnQ3RCTXNBQWdDcEF6d0FBZ0NwQXo0QUFnQ3BBejBBQWdDcEF6OEFBZ0NwQkxZQUFnQ3BCTHNBQWdIS0JMa0FBZ0N0QktZQUFnQ3BBdWNBQWdIS0EvRUFBZ0NwQk1VQUFnQ3RBeDhBQWdIS0JOQUFBZ0N0Qk5VQUFnQ3RCTk1BQWdDcUF6WUFBZ0NwQk5rQUFnQ3RCTHdBQWdIS0JMb0FBZ0N0QS9JQUFnQ3BCTVlBQWdDdEF5QUFBZ0hLQk5FQUFnQ3RCTllBQWdDdEJOUUFBZ0NxQXpjQUFnQ3BCTm9BQWdDdEJMOEFBZ0NwQXZnQUFnSEtCTUVBQWdDdEF2b0FBZ0NwQXZ3QUFnSEtCTU1BQWdDdEF4VUFBZ0NwQXhzQUFnSEtCTTRBQWdDdEErWUFBZ0NwQk5jQUFnQ3RBK1FBQWdDb0JNQUFBZ0NwQXZrQUFnSEtCTUlBQWdDdEF2c0FBZ0NwQXYwQUFnSEtCTVFBQWdDdEF4WUFBZ0NwQXh3QUFnSEtCTThBQWdDdEErY0FBZ0NwQk5nQUFnQ3RBK1VBQWdDb0F3OEFBZ0NwQXhFQUFnSEtCTXdBQWdDdEJMSUFBZ0NzQXhBQUFnQ3BBeElBQWdIS0JNMEFBZ0N0QkxNQUFnQ3NBd0lBQWdDcEF3UUFBZ0hLQk1jQUFnQ3RCS2dBQWdDb0FxQUFBZ0NxQXFvQUFnQ3BCSUVBQWdDdEErb0FBZ0NvQklNQUFnQ3JCSVVBQWdDcUF3TUFBZ0NwQXdVQUFnSEtCTWdBQWdDdEJLa0FBZ0NvQXJzQUFnQ3FBc1VBQWdDcEJJSUFBZ0N0QStzQUFnQ29CSVFBQWdDckJJWUFBZ0NxQXJnQUFnQ3BBcmNBQWdDb0JGZ0FBZ0NyQXV3QUFnQ3FCSzhBQWdDc0JHa0FBZ0NwQkhFQUFnQ3RCR3NBQWdDb0JHMEFBZ0NyQkc4QUFnQ3FCR29BQWdDcEJISUFBZ0N0Qkd3QUFnQ29CRzRBQWdDckJIQUFBZ0NxQkhjQUFnQ3BCSDhBQWdDdEJIa0FBZ0NvQkhzQUFnQ3JCSDBBQWdDcUJIZ0FBZ0NwQklBQUFnQ3RCSG9BQWdDb0JId0FBZ0NyQkg0QUFnQ3FBcEVBQWdDcEJDOEFBZ0N0QXBBQUFnQ29CREVBQWdDckFwTUFBZ0NxQktvQUFnQ3NBcGtBQWdDcEJFY0FBZ0N0QXBnQUFnQ29CRWtBQWdDckJFc0FBZ0NxQkt3QUFnQ3NBcDBBQWdDcEJGa0FBZ0N0QXB3QUFnQ29CRmNBQWdDckF1c0FBZ0NxQks0QUFnQ3NBcXdBQWdDcEJEQUFBZ0N0QXFzQUFnQ29CRElBQWdDckFxNEFBZ0NxQktzQUFnQ3NBclFBQWdDcEJFZ0FBZ0N0QXJNQUFnQ29CRW9BQWdDckJFd0FBZ0NxQkswQUFnQ3NBcjBBQWdDcEJGd0FBZ0N0QXJ3QUFnQ29CRjRBQWdDckFyOEFBZ0NxQkxFQUFnQ3NBc0lBQWdDcEJIUUFBZ0N0QXNFQUFnQ29CSFlBQWdDckF5WUFBZ0NxQkxVQUFnQ3NBcUlBQWdDcEJGc0FBZ0N0QXFFQUFnQ29CRjBBQWdDckFxUUFBZ0NxQkxBQUFnQ3NBcWNBQWdDcEJITUFBZ0N0QXFZQUFnQ29CSFVBQWdDckF5VUFBZ0NxQkxRQUFnQ3NCTWtBQXdDcUFLa0UwZ0FEQUtvQXFRQUNBQkVBSlFBcEFBQUFLd0F0QUFVQUx3QTBBQWdBTmdBN0FBNEFQUUErQUJRQVJRQkpBQllBU3dCTkFCc0FUd0JVQUI0QVZnQmJBQ1FBWFFCZUFDb0FnUUNCQUN3QWd3Q0RBQzBBaGdDR0FDNEFpUUNKQUM4QWpRQ05BREFBbUFDYkFERUEwQURRQURVQUFBPT1cIixcclxuICBcIlJvYm90by1SZWd1bGFyLnR0ZlwiOiBcIkFBRUFBQUFSQVFBQUJBQVFSMFJGUnFXTG9pQUFBYjhJQUFBQ1dFZFFUMVBJbkNLekFBSEJZQUFBWmZoSFUxVkNoUllPOUFBQ0oxZ0FBQlgyVDFNdk1wZURzWXNBQUFHWUFBQUFZR050WVhET3lGbzZBQUFXZEFBQUJvSmpkblFnTy9nbWZRQUFMMUFBQUFEK1puQm5iYWdGaERJQUFCejRBQUFQaG1kaGMzQUFDQUFaQUFHKy9BQUFBQXhuYkhsbW5MckpTd0FBT3BBQUFZR2dhR1ZoWkFaekhTb0FBQUVjQUFBQU5taG9aV0VLdWdyQUFBQUJWQUFBQUNSb2JYUjQ1ZVdiS2dBQUFmZ0FBQlI4Ykc5allRK3BhOWdBQURCUUFBQUtRRzFoZUhBSXp4REdBQUFCZUFBQUFDQnVZVzFsT0VKcHZRQUJ2REFBQUFLcWNHOXpkUDl0QUdRQUFiN2NBQUFBSUhCeVpYQjVXTTdUQUFBc2dBQUFBczRBQVFBQUFBTUJTUGdrVm1kZkR6ejFBQnNJQUFBQUFBREU4QkV1QUFBQUFOOEd2Mjc2R3YzVkNURUljd0FBQUFrQUFnQUFBQUFBQUFBQkFBQUhiUDRNQUFBSlN2b2Eva29KTVFBQkFBQUFBQUFBQUFBQUFBQUFBQUFGSHdBQkFBQUZId0NwQUJVQWRnQUhBQUlBRUFBdkFKb0FBQUxtRDNVQUF3QUJBQVFFaVFHUUFBVUFBQVdhQlRNQUFBRWZCWm9GTXdBQUE5RUFaZ0lBQUFBQ0FBQUFBQUFBQUFBQTRBQUMvMUFBSUZzQUFBQWdBQUFBQUVkUFQwY0FRQUFBLy8wR0FQNEFBR1lIbWdJQUlBQUJud0FBQUFBRU9nV3dBQUFBSUFBREE0d0FaQUFBQUFBQUFBQUFBZndBQUFIOEFBQUNFQUNoQXBBQWlRVHRBSGNFZndCdUJkd0FhUVQ2QUdZQlpnQm9BcjBBaGdMSkFDY0RjZ0FjQklvQVRnR1RBQjBDTmdBbUFod0FrQU5OQUJNRWZ3QnpCSDhBcXdSL0FGNEVmd0JmQkg4QU5RUi9BSm9FZndDRkJIOEFUZ1IvQUhFRWZ3QmtBZkFBaFFHeEFDa0VFUUJJQkdRQW1BUXZBSWNEeUFCTEJ5OEFiUVU0QUIwRS9BQ3BCVFVBZUFWQUFLa0VqQUNwQkd3QXFRVnpBSG9GdFFDcEFpMEF0d1JxQURVRkJRQ3BCRThBcVFiOEFLa0Z0UUNwQllFQWR3VU1BS2tGZ1FCdUJPNEFxUVRBQUZFRXhnQXlCVEFBakFVWUFCMEhHUUE5QlFRQU9nVE9BQThFeXdCWEFoOEFrd05KQUNrQ0h3QUtBMWdBUUFPY0FBUUNlUUE1QkZvQWJRUitBSXdFTUFCZEJJTUFYd1ErQUYwQ3lBQTlCSDRBWVFSb0FJMEI4Z0NPQWVyL3ZnUU9BSTBCOGdDY0J3UUFpd1JyQUkwRWtBQmNCSDRBakFTTUFGOEN0Z0NOQkNFQVh3S2VBQWtFYVFDSkErQUFJUVlEQUNzRCtBQXFBOGtBRmdQNEFGa0N0UUJBQWZRQXNBSzFBQlFGY1FDREFmUUFpd1JoQUdrRXB3QmJCYlVBYVFRMEFBOEI3QUNVQk9nQVd3TlpBR1VHU1FCY0E1UUFrd1BCQUdVRWJnQi9Ca29BV3dPckFJOEMvUUNEQkVjQVlRTHZBRUlDN3dBL0FvSUFld1NKQUpzRDZnQkVBaGNBbEFIOEFIUUM3d0I3QTZRQWV3UEFBR2NGM0FCVkJqVUFVQVk1QUhBRHlnQkVCM3IvOFFSRkFGa0ZnUUIzQkxvQXB3VENBSXdHd2dCUEJMRUFmZ1NTQUVjRWlRQmNCSndBbFFUSUFGOEZtd0FlQWZzQW5BUjBBSnNFVHdBakFpb0FJd1dMQUtJRWlRQ1NCNkVBYVFkRUFHRUIvQUNoQlljQVhnSzYvK01GZndCbUJKTUFYQVdRQUl3RTh3Q0pBZ1QvdEFRNEFHTUR4QUNxQTQ0QWpnT3JBSThEYXdDQ0FmSUFqZ0t1QUhrQ0t3QXlBOFlBZXdMOEFGOENXZ0IvQUFEOHB3QUEvVzRBQVB5S0FBRDlYUUFBL0NjQUFQMDRBZzRBdUFRTUFISUNGd0NVQkhNQXNnV2tBQ0FGY2dCbkJUOEFNZ1NTQUhnRnRRQ3lCSklBUmdXN0FFNEZpUUJhQlZJQWNnU0dBR1FFdlFDaEJBTUFMd1NKQUdFRVVRQmtCQ1VBYlFTSkFKSUVqd0I3QXBnQXd3UnZBQ1lEN0FCbUJNVUFLUVNKQUpJRVRnQmxCSWdBWVFRc0FGRUVYZ0NRQmFNQVdBV2FBR0FHbHdCNkJLSUFlZ1JELzlvR1NBQkxCZ0FBS3dWbEFIc0lrZ0F5Q0tVQXNnYURBRDRGdEFDd0JRc0Fvd1lFQURNSFF3QWJCTUFBVUFXMUFMSUZxZ0F3QlFnQVRRWXRBRlFGMmdDdkJYb0Fsd2VIQUxBSHdBQ3dCaElBRVFickFMSUZCUUNqQldVQWxBY25BTGNGR0FCYUJHMEFZZ1NUQUo0RFhBQ2JCTlFBTGdZaEFCWUVFQUJZQko0QW5RUlRBSjBFb0FBc0JlOEFuZ1NkQUowRW5nQ2RBOWtBS0FYT0FHUUV2Z0NkQkZvQWFBWjVBSjBHbndDU0JQY0FIZ1kyQUo0RVdBQ2VCRTRBWkFhSUFKNEVaQUF2QkdqLzV3Uk9BR2NHeVFBbkJ1UUFuUVNKLy8wRW5nQ2RCd2tBbkFZc0FJRUVWLy9iQnl3QXVBWDVBSm9FMHdBb0JFY0FEd2NNQU1vR0RBQzlCdElBa3dYaUFKY0pCUUMzQjlFQW5BUWtBRkFEMndCTUJYSUFad1NNQUZ3RkN3QVdCQVFBTHdWeUFHY0VpUUJjQndFQW5BWWtBSDRIQ1FDY0Jpd0FnUVV5QUhZRVNBQmtCUDRBZEFBQS9HWUFBUHh3QUFEOVpRQUEvYVFBQVBvYUFBRDZLd1lKQUxJRTdRQ2RCRmYvMndVYkFLa0VpZ0NNQkdRQW9nT1JBSklFMndDeUJBWUFrZ2VpQUJzR1lRQVdCWm9Bc2dTNEFKMEZDZ0NrQkg0QW13YU1BRVVGaEFBL0JmOEFxUVRaQUowSHp3Q3BCYlFBa2dneEFMQUc5QUNTQmU4QWNRVFVBRzRGR0FBNkJDb0FLZ2N0QURRRlhRQWZCYndBbHdTV0FHZ0ZjQUNYQkdzQWhBVndBSWtHTUFBL0JMNy8zUVVLQUtRRVdnQ2JCZjRBTUFUdkFDd0Zzd0N5QklrQWtnWVNBS2tFN0FDZEIwOEFxUVkrQUo0Rmh3QmVCS2dBYUFTb0FHb0V1QUE1QTZzQU9nVXVBRG9FUUFBcUJQY0FWd2FWQUZvRzVRQmtCbGNBTmdVc0FERUVTZ0JUQkFnQWVRZkNBRVVHZGdBL0Ivc0FxZ2FpQUpBRTl3QjJCQjRBWmdXdUFDUUZJUUJHQldVQWx3WUNBREFFOHdBc0F5RUFjQVFVQUFBSUtRQUFCQlFBQUFncEFBQUN1UUFBQWdvQUFBRmNBQUFFZndBQUFqQUFBQUdpQUFBQkFBQUFBTkVBQUFBQUFBQUNOQUFtQWpRQUpnVkFBS0lHUHdDUUE2WUFEUUdhQUdFQm1nQXdBWmdBSkFHYUFFOEMxQUJwQXR3QVBBTENBQ1FFYWdCR0JKQUFWd0t6QUlzRHhBQ1VCVm9BbEFGL0FGSUhxZ0JFQW1jQWJBSm5BRm9Eb3dBOEF1OEFVUUx2QURZQzd3QmNBdThBVmdMdkFEc0M3d0JQQXU4QVNnTmhBSG9DN3dCUkF1OEFld0x2QUVJQzd3QS9BdThBTmdMdkFGd0M3d0JXQXU4QU93THZBRThDN3dCS0JLY0FXd1pXQUI4R2tRQ25DSFlBcVFYckFCOEdLd0NNQkg4QVh3WGFBQjhFSXdBckJIUUFJUVZJQUYwRlR3QWZCZWdBZXdQT0FHZ0lPZ0NpQlFFQWFBVVlBSmdHSmdCVUJ0Y0FaUWJQQUdRR2FnQmFCSkFBYWdXUEFLa0Vyd0JHQkpNQXFBVEZBRDhJT2dCakFnMy9yd1NDQUdVRVpBQ1lCQkVBUFFRdkFJUUVDQUFzQWt3QXRRS1FBRzhDQkFCZEJQTUFQUVJ2QUNBRWl3QTlCdFFBUFFiVUFEMEU3Z0E5QnBzQVh3QUFBQUFJTkFCYkNEVUFYQUx2QUVJQzd3QjdBdThBVVFRUUFGWUVFQUJoQkJBQVFnUVBBSElFRUFDQkJCQUFNUVFRQUU4RUVBQlBCQkFBbVFRUUFHTUVJd0JJQkNzQURnUlVBQ2NHRlFBeEJHZ0FGQVI5QUhVRUp3QXBCQ0FBUkFSS0FJb0V2QUJhQkYwQWl3UzhBR0FFNHdDTEJnSUFpd08xQUlzRVZRQ0xBODhBTEFIcEFKZ0U1QUNMQkt3QVpBUE1BSXNFSUFCRUJEUUFNUU9oQUE0RHJ3Q0xCR2dBRkFTOEFHQUVhQUFVQTRrQVBnVFBBSXNEOEFCQUJXY0FZUVVYQUdFRTh3QjJCWE1BSndSOEFHRUhRZ0FvQjFBQWl3VjBBQ2tFemdDTEJGb0Fpd1VsQUM0R0N3QWZCRUFBU0FUc0FJc0VUZ0NNQk1FQUtBUWdBQ01GS1FDTEJHb0FQUVpSQUlzR3JBQ0xCUjBBQ1FYeEFJc0VUd0NMQkh3QVN3WjNBSXNFaHdCUUJCSUFDd1pJQUI4RWVRQ01CUW9BakFVM0FDUUZ3d0JnQkY4QURnU29BQ2NHWWdBbkJHb0FQUVJxQUlzRnhBQUNCTXNBWGdSQUFFZ0V2QUJnQkRRQU1RUGtBRU1JSWdDTEJLc0FLQUx2QUQ4Qzd3QTJBdThBWEFMdkFGWUM3d0E3QXU4QVR3THZBRW9EbHdDUEFyVUFud1BtQUlzRU9nQWZCTVFBWkFWTUFMSUZKQUN5QkJRQWt3VTlBTElFRHdDVEJJQUFpd1I4QUdFRVVRQ0xCSVlBRkFIK0FKOERwUUNDQUFEOG93UHdBRzhEOVA5ZEJBOEFhUVAxQUdrRHJ3Q0xBNkFBZ2dPZkFJSUM3d0JSQXU4QU5nTHZBRndDN3dCV0F1OEFPd0x2QUU4Qzd3QktCWUlBZmdXdkFINEZrd0N5QmVBQWZnWGpBSDREMVFDZ0JJSUFnd1JZQUE4RXp3QStCR3NBWlFRdUFFb0RwUUNFQVpJQWFBYWtBR0FFdWdDQ0Fmei90Z1IvQURzRWZ3QnpCSDhBSWdSL0FIWUVmd0IyQkg4QU5nUi9BSDRFZndCZUJIOEFjUVIvQVBRQ0J2KzBBZ1QvdEFIN0FKd0IrLy81QWZzQW5BUlJBSXNGQUFCNEJDRUFPd1IrQUl3RU13QmRCSk1BV3dTTUFGc0Vud0JhQkk0QWpBU2NBRnNFUGdCZEJINEFZUVJ3QUZvRGVRQlhCTllBYUFPMUFBRUdPZ0FKQS9rQWl3UzhBR0FFNHdBd0JPTUFpd0g4QUFBQ05nQW1CVjRBSlFWZUFDVUVoZ0FCQk1ZQU1nS2UvL1FGT0FBZEJUZ0FIUVU0QUIwRk9BQWRCVGdBSFFVNEFCMEZPQUFkQlRVQWVBU01BS2tFakFDcEJJd0FxUVNNQUtrQ0xmL2ZBaTBBc1FJdC8rb0NMZi9WQmJVQXFRV0JBSGNGZ1FCM0JZRUFkd1dCQUhjRmdRQjNCVEFBakFVd0FJd0ZNQUNNQlRBQWpBVE9BQThFV2dCdEJGb0FiUVJhQUcwRVdnQnRCRm9BYlFSYUFHMEVXZ0J0QkRBQVhRUStBRjBFUGdCZEJENEFYUVErQUYwQisvL0VBZnNBbGdINy84OEIrLys2QkdzQWpRU1FBRndFa0FCY0JKQUFYQVNRQUZ3RWtBQmNCR2tBaVFScEFJa0VhUUNKQkdrQWlRUEpBQllEeVFBV0JUZ0FIUVJhQUcwRk9BQWRCRm9BYlFVNEFCMEVXZ0J0QlRVQWVBUXdBRjBGTlFCNEJEQUFYUVUxQUhnRU1BQmRCVFVBZUFRd0FGMEZRQUNwQlJrQVh3U01BS2tFUGdCZEJJd0FxUVErQUYwRWpBQ3BCRDRBWFFTTUFLa0VQZ0JkQkl3QXFRUStBRjBGY3dCNkJINEFZUVZ6QUhvRWZnQmhCWE1BZWdSK0FHRUZjd0I2Qkg0QVlRVzFBS2tFYUFDTkFpMy90Z0g3LzVzQ0xmL05BZnYvc2dJdC8rd0IrLy9SQWkwQUZ3SHkvL29DTFFDcUJwY0F0d1BjQUk0RWFnQTFBZ1QvdEFVRkFLa0VEZ0NOQkU4QW9nSHlBSk1FVHdDcEFmSUFWZ1JQQUtrQ2lBQ2NCRThBcVFMT0FKd0Z0UUNwQkdzQWpRVzFBS2tFYXdDTkJiVUFxUVJyQUkwRWEvKzdCWUVBZHdTUUFGd0ZnUUIzQkpBQVhBV0JBSGNFa0FCY0JPNEFxUUsyQUkwRTdnQ3BBcllBVXdUdUFLa0N0Z0JrQk1BQVVRUWhBRjhFd0FCUkJDRUFYd1RBQUZFRUlRQmZCTUFBVVFRaEFGOEV3QUJSQkNFQVh3VEdBRElDbmdBSkJNWUFNZ0tlQUFrRXhnQXlBc1lBQ1FVd0FJd0VhUUNKQlRBQWpBUnBBSWtGTUFDTUJHa0FpUVV3QUl3RWFRQ0pCVEFBakFScEFJa0ZNQUNNQkdrQWlRY1pBRDBHQXdBckJNNEFEd1BKQUJZRXpnQVBCTXNBVndQNEFGa0V5d0JYQS9nQVdRVExBRmNEK0FCWkIzci84UWJDQUU4RmdRQjNCSWtBWEFTQS83MEVnUCs5QkNjQUtRU0dBQlFFaGdBVUJJWUFGQVNHQUJRRWhnQVVCSVlBRkFTR0FCUUVmQUJoQStZQWl3UG1BSXNENWdDTEErWUFpd0hwLzd3QjZRQ09BZW4veHdIcC83SUU0d0NMQkx3QVlBUzhBR0FFdkFCZ0JMd0FZQVM4QUdBRWZRQjFCSDBBZFFSOUFIVUVmUUIxQkNzQURnU0dBQlFFaGdBVUJJWUFGQVI4QUdFRWZBQmhCSHdBWVFSOEFHRUVnQUNMQStZQWl3UG1BSXNENWdDTEErWUFpd1BtQUlzRXJBQmtCS3dBWkFTc0FHUUVyQUJrQk9RQWl3SHAvNU1CNmYrcUFlbi95UUhwQUFVQjZRQ0hBODhBTEFSVkFJc0R0UUNEQTdVQWl3TzFBSXNEdFFDTEJPTUFpd1RqQUlzRTR3Q0xCTHdBWUFTOEFHQUV2QUJnQkVvQWlnUktBSW9FU2dDS0JDQUFSQVFnQUVRRUlBQkVCQ0FBUkFRbkFDa0VKd0FwQkNjQUtRUjlBSFVFZlFCMUJIMEFkUVI5QUhVRWZRQjFCSDBBZFFZVkFERUVLd0FPQkNzQURnUWpBRWdFSXdCSUJDTUFTQVU0QUIwRThQK01CaG4vbWdLUi82QUZsZi82QlRML2RnVm0vL3dDbVArYkJUZ0FIUVQ4QUtrRWpBQ3BCTXNBVndXMUFLa0NMUUMzQlFVQXFRYjhBS2tGdFFDcEJZRUFkd1VNQUtrRXhnQXlCTTRBRHdVRUFEb0NMZi9WQk00QUR3U0dBR1FFVVFCa0JJa0FrZ0tZQU1NRVhnQ1FCSFFBbXdTUUFGd0VpUUNiQStBQUlRUndBRm9DbVAva0JGNEFrQVNRQUZ3RVhnQ1FCcGNBZWdTTUFLa0Vjd0N5Qk1BQVVRSXRBTGNDTGYvVkJHb0FOUVVrQUxJRkJRQ3BCUWdBVFFVNEFCMEUvQUNwQkhNQXNnU01BS2tGdFFDeUJ2d0FxUVcxQUtrRmdRQjNCYlVBc2dVTUFLa0ZOUUI0Qk1ZQU1nVUVBRG9FV2dCdEJENEFYUVNlQUowRWtBQmNCSDRBakFRd0FGMER5UUFXQS9nQUtnUStBRjBEWEFDYkJDRUFYd0h5QUk0QisvKzZBZXIvdmdSVEFKMER5UUFXQnhrQVBRWURBQ3NIR1FBOUJnTUFLd2NaQUQwR0F3QXJCTTRBRHdQSkFCWUJaZ0JvQXBBQWlRUWdBS0VDQlArMEFab0FNQWI4QUtrSEJBQ0xCVGdBSFFSYUFHMEVqQUNwQmJVQXNnUStBRjBFbmdDZEJZa0FXZ1dhQUdBRkN3QVdCQVQvK3doWkFGd0pTZ0IzQk1BQVVBUVFBRmdGTlFCNEJEQUFYUVRPQUE4RUF3QXZBaTBBdHdkREFCc0dJUUFXQWkwQXR3VTRBQjBFV2dCdEJUZ0FIUVJhQUcwSGV2L3hCc0lBVHdTTUFLa0VQZ0JkQlljQVhnUTRBR01FT0FCakIwTUFHd1loQUJZRXdBQlFCQkFBV0FXMUFMSUVuZ0NkQmJVQXNnU2VBSjBGZ1FCM0JKQUFYQVZ5QUdjRWpBQmNCWElBWndTTUFGd0ZaUUNVQkU0QVpBVUlBRTBEeVFBV0JRZ0FUUVBKQUJZRkNBQk5BOGtBRmdWNkFKY0VXZ0JvQnVzQXNnWTJBSjRFZ3dCZkJUZ0FIUVJhQUcwRk9BQWRCRm9BYlFVNEFCMEVXZ0J0QlRnQUhRUmEvOGtGT0FBZEJGb0FiUVU0QUIwRVdnQnRCVGdBSFFSYUFHMEZPQUFkQkZvQWJRVTRBQjBFV2dCdEJUZ0FIUVJhQUcwRk9BQWRCRm9BYlFVNEFCMEVXZ0J0Qkl3QXFRUStBRjBFakFDcEJENEFYUVNNQUtrRVBnQmRCSXdBcVFRK0FGMEVqUC91QkQ3L3VBU01BS2tFUGdCZEJJd0FxUVErQUYwRWpBQ3BCRDRBWFFJdEFMY0Ird0NjQWkwQXBBSHlBSVlGZ1FCM0JKQUFYQVdCQUhjRWtBQmNCWUVBZHdTUUFGd0ZnUUJHQkpEL3dnV0JBSGNFa0FCY0JZRUFkd1NRQUZ3RmdRQjNCSkFBWEFWL0FHWUVrd0JjQlg4QVpnU1RBRndGZndCbUJKTUFYQVYvQUdZRWt3QmNCWDhBWmdTVEFGd0ZNQUNNQkdrQWlRVXdBSXdFYVFDSkJaQUFqQVR6QUlrRmtBQ01CUE1BaVFXUUFJd0U4d0NKQlpBQWpBVHpBSWtGa0FDTUJQTUFpUVRPQUE4RHlRQVdCTTRBRHdQSkFCWUV6Z0FQQThrQUZnU2hBRjhFeGdBeUE5a0FLQVY2QUpjRVdnQm9CSE1Bc2dOY0FKc0dNQUEvQkw3LzNRUm9BSTBGQmYvVUJRWC8xQVJ6QUFNRFhQLzlCVGdBQ3dRby85TUV6Z0FQQkFNQUx3VUVBRG9EK0FBcUJGRUFaQVJzQUJJR1B3Q1FCSDhBWGdSL0FGOEVmd0ExQkg4QW1nU1RBSmtFcHdDRkJKTUFaQVNuQUljRmN3QjZCSDRBWVFXMUFLa0Vhd0NOQlRnQUhRUmFBRG9FakFCZkJENEFLUUl0L3dzQisvN3dCWUVBZHdTUUFETUU3Z0JXQXJiL2pBVXdBSXdFYVFBckJLZi9PQVQ4QUtrRWZnQ01CVUFBcVFTREFGOEZRQUNwQklNQVh3VzFBS2tFYUFDTkJRVUFxUVFPQUkwRkJRQ3BCQTRBalFSUEFLa0I4Z0NHQnZ3QXFRY0VBSXNGdFFDcEJHc0FqUVdCQUhjRkRBQ3BCSDRBakFUdUFLa0N0Z0NEQk1BQVVRUWhBRjhFeGdBeUFwNEFDUVV3QUl3RkdBQWRBK0FBSVFVWUFCMEQ0QUFoQnhrQVBRWURBQ3NFeXdCWEEvZ0FXUVhIL25nRWhnQVVCQ0wvbndVZy83c0NKZi9BQk1iLzN3Um4vMVVFL2YvM0JJWUFGQVJSQUlzRDVnQ0xCQ01BU0FUa0FJc0I2UUNZQkZVQWl3WUNBSXNFNHdDTEJMd0FZQVJkQUlzRUp3QXBCQ3NBRGdSVUFDY0I2Zit5QkNzQURnUG1BSXNEcndDTEJDQUFSQUhwQUpnQjZmK3lBODhBTEFSVkFJc0VJQUFqQklZQUZBUlJBSXNEcndDTEErWUFpd1RzQUlzR0FnQ0xCT1FBaXdTOEFHQUV6d0NMQkYwQWl3UjhBR0VFSndBcEJGUUFKd1JBQUVnRTVBQ0xCSHdBWVFRckFBNEZ4QUFDQk93QWl3UWdBQ01GWndCaEJiZ0FtQVk2QUFrRXZBQmdCQ0FBUkFZVkFERUdGUUF4QmhVQU1RUXJBQTRGT0FBZEJGb0FiUVNNQUtrRVBnQmRCSVlBRkFQbUFJc0Ird0NHQUFBQUFnQUFBQU1BQUFBVUFBTUFBUUFBQUJRQUJBWnVBQUFBOUFDQUFBWUFkQUFBQUFJQURRQitBS0FBckFDdEFMOEF4Z0RQQU9ZQTd3RCtBUThCRVFFbEFTY0JNQUZUQVY4Qlp3RitBWDhCandHU0FhRUJzQUh3QWY4Q0d3STNBbGtDdkFMSEFza0MzUUx6QXdFREF3TUpBdzhESXdPS0E0d0RrZ09oQTdBRHVRUEpBODREMGdQV0JDVUVMd1JGQkU4RVlnUnZCSGtFaGdTZkJLa0VzUVM2Qk00RTF3VGhCUFVGQVFVUUJSTWVBUjQvSG9VZThSN3pIdmtmVFNBSklBc2dFU0FWSUI0Z0lpQW5JREFnTXlBNklEd2dSQ0IwSUg4Z3BDQ3FJS3dnc1NDNklMMGhCU0VUSVJZaElpRW1JUzRoWGlJQ0lnWWlEeUlTSWhvaUhpSXJJa2dpWUNKbEpjcnVBdmJEK3dUKy8vLzkvLzhBQUFBQUFBSUFEUUFnQUtBQW9RQ3RBSzRBd0FESEFOQUE1d0R3QVA4QkVBRVNBU1lCS0FFeEFWUUJZQUZvQVg4Qmp3R1NBYUFCcndId0Fmb0NHQUkzQWxrQ3ZBTEdBc2tDMkFMekF3QURBd01KQXc4REl3T0VBNHdEamdPVEE2TURzUU82QThvRDBRUFdCQUFFSmdRd0JFWUVVQVJqQkhBRWVnU0lCS0FFcWdTeUJMc0V6d1RZQk9JRTlnVUNCUkVlQUI0K0hvQWVvQjd5SHZRZlRTQUFJQW9nRUNBVElCY2dJQ0FsSURBZ01pQTVJRHdnUkNCMElIOGdveUNtSUtzZ3NTQzVJTHdoQlNFVElSWWhJaUVtSVM0aFd5SUNJZ1lpRHlJUklob2lIaUlySWtnaVlDSmtKY3J1QWZiRCt3SCsvLy84Ly84QUFRQUEvL2IvNUFIcC84SUIzZi9CQUFBQjBBQUFBY3NBQUFISEFBQUJ4UUFBQWNNQUFBRzdBQUFCdmY4Vy93Zi9CZjc0L3VzQi93QUFBQUQrWmY1RUFUVDkyUDNYL2NuOXRQMm8vYWY5b3YyZC9Zb0FBQUFQQUE0QUFBQUEvUW9BQVAvdi9QNzgrd0FBL0xvQUFQeXlBQUQ4cHdBQS9LRUFBUHlaQUFEOGtRQUEvemtBQVA4MkFBRDhYZ0FBNWZQbHMrVms1WS9rK09XTjVZN2hjdUZ6NFc4QUFPRnM0V3ZoYWVGaDQ3cmhXZU95NFZEaEl1RWRBQURoQWdBQTRQM2c5dUQxNEs3Z29lQ2Y0SlRmbE9DSjRGM2Z1dDZzMzY3ZnJkK20zNlBmbDk5NzMyVGZZZHY5RThjTEJ3YkxBdE1CMXdBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEa0FBQUE3Z0FBQVJnQUFBRXlBQUFCTWdBQUFUSUFBQUYwQUFBQUFBQUFBQUFBQUFBQUFBQUJkQUYrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBV3dBQUFBQUFYUUJrQUFBQWFnQUFBQUFBQUFCd0FBQUFnZ0FBQUl3QUFBQ1VnQUFBbUlBQUFLT0FBQUNtZ0FBQXI0QUFBTE9BQUFDNGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF0SUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUxDQUFBQ3dnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS1FBcEVDa2dLVEFwUUNsUUNCQW93Q29BS2hBcUlDb3dLa0FxVUFnZ0NEQXFZQ3B3S29BcWtDcWdDRUFJVUNxd0tzQXEwQ3JnS3ZBckFBaGdDSEFyc0N2QUs5QXI0Q3Z3TEFBSWdBaVFMQkFzSUN3d0xFQXNVQWlnS0xBSXNBakFLTkFJMEM5QUwxQXZZQzl3TDRBdmtBamdMNkF2c0MvQUw5QXY0Qy93TUFBd0VBandDUUF3SURBd01FQXdVREJnTUhBd2dBa1FDU0F3a0RDZ01MQXd3RERRTU9BSk1BbEFNZEF4NERJUU1pQXlNREpBS09BbzhDbGdLeEF6d0RQUU0rQXo4REd3TWNBeDhESUFDdUFLOERsd0N3QTVnRG1RT2FBTEVBc2dPaEE2SURvd0N6QTZRRHBRQzBBNllEcHdDMUE2Z0F0Z09wQUxjRHFnT3JBTGdEckFDNUFMb0RyUU91QTY4RHNBT3hBN0lEc3dPMEFNUUR0Z08zQU1VRHRRREdBTWNBeUFESkFNb0F5d0RNQTdnQXpRRE9BL1VEdmdEU0E3OEEwd1BBQThFRHdnUERBTlFBMVFEV0E4VUQ5Z1BHQU5jRHh3RFlBOGdEeVFEWkE4b0EyZ0RiQU53RHl3UEVBTjBEekFQTkE4NER6d1BRQTlFRDBnRGVBTjhEMHdQVUFPb0E2d0RzQU8wRDFRRHVBTzhBOEFQV0FQRUE4Z0R6QVBRRDF3RDFBOWdEMlFEMkE5b0E5d1BiQS9jRDNBRUNBOTBCQXdQZUE5OEQ0QVBoQVFRQkJRRUdBK0lEK0FQakFRY0JDQUVKQkpJRCtRUDZBUmNCR0FFWkFSb0Qrd1A4QS80RC9RRW9BU2tCS2dFckJKRUJMQUV0QVM0Qkx3RXdCSk1FbEFFeEFUSUJNd0UwQS84RUFBRTFBVFlCTndFNEJKVUVsZ1FCQkFJRWlBU0pCQU1FQkFTWEJKZ0VrQUZNQVUwRWpnU1BCQVVFQmdRSEFVNEJUd0ZRQVZFQlVnRlRBVlFCVlFTS0JJc0JWZ0ZYQVZnRUVnUVJCQk1FRkFRVkJCWUVGd0ZaQVZvRWpBU05CQ3dFTFFGYkFWd0JYUUZlQkprRW1nRmZCQzRFbXdGdkFYQUJnUUdDQkowRW5BR25CSWNCclFBQVFFcVptSmVXaDRhRmhJT0NnWUIvZm4xOGUzcDVlSGQyZFhSemNuRndiMjV0Ykd0cWFXaG5abVZrWTJKaFlGOWVYVnhiV2xsWVYxWlZWRk5SVUU5T1RVeExTa2xJUjBZb0h4QUtDU3dCc1FzS1F5TkRaUW90TEFDeENndERJME1MTFN3QnNBWkRzQWREWlFvdExMQlBLeUN3UUZGWUlVdFNXRVZFR3lFaFdSc2pJYkJBc0FRbFJiQUVKVVZoWklwalVsaEZSQnNoSVZsWkxTd0FzQWREc0FaREN5MHNTMU1qUzFGYVdDQkZpbUJFR3lFaFdTMHNTMVJZSUVXS1lFUWJJU0ZaTFN4TFV5TkxVVnBZT0JzaElWa3RMRXRVV0RnYklTRlpMU3l3QWtOVVdMQkdLeHNoSVNFaFdTMHNzQUpEVkZpd1J5c2JJU0VoV1Mwc3NBSkRWRml3U0NzYklTRWhJVmt0TExBQ1ExUllzRWtyR3lFaElWa3RMQ01nc0FCUWlvcGtzUUFESlZSWXNFQWJzUUVESlZSWXNBVkRpMW13VHl0Wkk3QmlLeU1oSTFobFdTMHNzUWdBRENGVVlFTXRMTEVNQUF3aFZHQkRMU3dCSUVld0FrTWd1QkFBWXJnUUFHTlhJN2dCQUdLNEVBQmpWMXBZc0NCZ1psbElMU3l4QUFJbHNBSWxzQUlsVTdnQU5TTjRzQUlsc0FJbFlMQWdZeUFnc0FZbEkySlFXSW9oc0FGZ0l4c2dJTEFHSlNOaVVsZ2pJYkFCWVJ1S0lTTWhJRmxadVAvQkhHQ3dJR01qSVMwc3NRSUFRckVqQVloUnNVQUJpRk5hV0xnUUFMQWdpRlJZc2dJQkFrTmdRbG14SkFHSVVWaTRJQUN3UUloVVdMSUNBZ0pEWUVLeEpBR0lWRml5QWlBQ1EyQkNBRXNCUzFKWXNnSUlBa05nUWxrYnVFQUFzSUNJVkZpeUFnUUNRMkJDV2JoQUFMQ0FZN2dCQUloVVdMSUNDQUpEWUVKWnVVQUFBUUJqdUFJQWlGUllzZ0lRQWtOZ1FsbXhKZ0dJVVZpNVFBQUNBR080QkFDSVZGaXlBa0FDUTJCQ1dibEFBQVFBWTdnSUFJaFVXTElDZ0FKRFlFSlpzU2dCaUZGWXVVQUFDQUJqdUJBQWlGUll1UUFDQVFDd0FrTmdRbGxaV1ZsWldWbXhBQUpEVkZoQUNnVkFDRUFKUUF3Q0RRSWJzUUVDUTFSWXNnVkFDTG9CQUFBSkFRQ3pEQUVOQVJ1eGdBSkRVbGl5QlVBSXVBR0FzUWxBRzdnQkFMQUNRMUpZc2dWQUNMb0JnQUFKQVVBYnVBR0FzQUpEVWxpeUJVQUl1QUlBc1FsQUc3SUZRQWk2QVFBQUNRRUFXVmxadUVBQXNJQ0lWYmxBQUFJQVk3Z0VBSWhWV2xpekRBQU5BUnV6REFBTkFWbFpXVUpDUWtKQ0xTeEZzUUpPS3lPd1R5c2dzRUJSV0NGTFVWaXdBaVZGc1FGT0syQlpHeU5MVVZpd0F5VkZJR1NLWTdCQVUxaXhBazRyWUJzaFdSc2hXVmxFTFN3Z3NBQlFJRmdqWlJzaldiRVVGSXB3UmJCUEt5T3hZUVltWUN1S1dMQUZRNHRaSTFobFdTTVFPaTBzc0FNbFNXTWpSbUN3VHlzanNBUWxzQVFsU2JBREpXTldJR0N3WW1BcnNBTWxJQkJHaWtaZ3NDQmpZVG90TExBQUZyRUNBeVd4QVFRbEFUNEFQckVCQWdZTXNBb2paVUt3Q3lOQ3NRSURKYkVCQkNVQlB3QS9zUUVDQmd5d0JpTmxRckFISTBLd0FSYXhBQUpEVkZoRkkwVWdHR21LWXlOaUlDQ3dRRkJZWnh0bVdXR3dJR093UUNOaHNBUWpRaHV4QkFCQ0lTRlpHQUV0TENCRnNRQk9LMFF0TEV0UnNVQlBLMUJiV0NCRnNRRk9LeUNLaWtRZ3NVQUVKbUZqWWJFQlRpdEVJUnNqSVlwRnNRRk9LeUNLSTBSRVdTMHNTMUd4UUU4clVGdFlSU0NLc0VCaFkyQWJJeUZGV2JFQlRpdEVMU3dqUlNDS1JTTmhJR1N3UUZHd0JDVWdzQUJUSTdCQVVWcGFzVUJQSzFSYVdJb01aQ05rSTFOWXNVQkFpbUVnWTJFYklHTlpHNHBaWTdFQ1RpdGdSQzBzQVMwc0FDMHNCYkVMQ2tNalEyVUtMU3l4Q2d0REkwTUxBaTBzc0FJbFkyYXdBaVc0SUFCaVlDTmlMU3l3QWlWanNDQmdackFDSmJnZ0FHSmdJMkl0TExBQ0pXTm5zQUlsdUNBQVltQWpZaTBzc0FJbFkyYXdJR0N3QWlXNElBQmlZQ05pTFN3alNyRUNUaXN0TENOS3NRRk9LeTBzSTRwS0kwVmtzQUlsWkxBQ0pXRmtzQU5EVWxnaElHUlpzUUpPS3lPd0FGQllaVmt0TENPS1NpTkZaTEFDSldTd0FpVmhaTEFEUTFKWUlTQmtXYkVCVGlzanNBQlFXR1ZaTFN3Z3NBTWxTckVDVGl1S0VEc3RMQ0N3QXlWS3NRRk9LNG9RT3kwc3NBTWxzQU1saXJCbks0b1FPeTBzc0FNbHNBTWxpckJvSzRvUU95MHNzQU1sUnJBREpVWmdzQVFsTHJBRUpiQUVKYkFFSmlDd0FGQllJYkJxRzdCc1dTdXdBeVZHc0FNbFJtQmhzSUJpSUlvZ0VDTTZJeUFRSXpvdExMQURKVWV3QXlWSFlMQUZKVWV3Z0dOaHNBSWxzQVlsU1dNanNBVWxTckNBWXlCWVloc2hXYkFFSmtaZ2lrYUtSbUN3SUdOaExTeXdCQ2F3QkNXd0JDV3dCQ2F3YmlzZ2lpQVFJem9qSUJBak9pMHNJeUN3QVZSWUliQUNKYkVDVGl1d2dGQWdZRmtnWUdBZ3NBRlJXQ0VoR3lDd0JWRllJU0JtWWJCQUkyR3hBQU1sVUxBREpiQURKVkJhV0NDd0F5VmhpbE5ZSWJBQVdSc2hXUnV3QjFSWUlHWmhaU01oR3lFaHNBQlpXVm14QWs0ckxTeXdBaVd3QkNWS3NBQlRXTEFBRzRxS0k0cXdBVm13QkNWR0lHWmhJTEFGSnJBR0prbXdCU2F3QlNhd2NDc2pZV1d3SUdBZ1ptR3dJR0ZsTFN5d0FpVkdJSW9nc0FCUVdDR3hBazRyRzBVaklWbGhaYkFDSlJBN0xTeXdCQ1lndUFJQVlpQzRBZ0JqaWlOaElMQmRZQ3V3QlNVUmloS0tJRG1LV0xrQVhSQUFzQVFtWTFaZ0t5TWhJQkFnUmlDeEFrNHJJMkViSXlFZ2lpQVFTYkVDVGl0Wk95MHN1UUJkRUFDd0NTVmpWbUFyc0FVbHNBVWxzQVVtc0cwcnNWMEhKV0Fyc0FVbHNBVWxzQVVsc0FVbHNHOHJ1UUJkRUFDd0NDWmpWbUFySUxBQVVsaXdVQ3V3QlNXd0JTV3dCeVd3QnlXd0JTV3djU3V3QWhjNHNBQlNzQUlsc0FGU1dsaXdCQ1d3QmlWSnNBTWxzQVVsU1dBZ3NFQlNXQ0Vic0FCU1dDQ3dBbFJZc0FRbHNBUWxzQWNsc0FjbFNiQUNGemdic0FRbHNBUWxzQVFsc0FZbFNiQUNGemhaV1ZsWldTRWhJU0VoTFN5NUFGMFFBTEFMSldOV1lDdXdCeVd3QnlXd0JpV3dCaVd3RENXd0RDV3dDU1d3Q0NXd2JpdXdCQmM0c0FjbHNBY2xzQWNtc0cwcnNBUWxzQVFsc0FRbXNHMHJzRkFyc0FZbHNBWWxzQU1sc0hFcnNBVWxzQVVsc0FNbHNBSVhPQ0N3QmlXd0JpV3dCU1d3Y1N0Z3NBWWxzQVlsc0FRbFpiQUNGeml3QWlXd0FpVmdJTEJBVTFnaHNFQmhJN0JBWVNNYnVQL0FVRml3UUdBanNFQmdJMWxac0FnbHNBZ2xzQVFtc0FJWE9MQUZKYkFGSllxd0FoYzRJTEFBVWxpd0JpV3dDQ1ZKc0FNbHNBVWxTV0Fnc0VCU1dDRWJzQUJTV0xBR0piQUdKYkFHSmJBR0piQUxKYkFMSlVtd0JCYzRzQVlsc0FZbHNBWWxzQVlsc0FvbHNBb2xzQWNsc0hFcnNBUVhPTEFFSmJBRUpiQUZKYkFISmJBRkpiQnhLN0FDRnpnYnNBUWxzQVFsdVAvQXNBSVhPRmxaV1NFaElTRWhJU0VoTFN5d0JDV3dBeVdIc0FNbHNBTWxpaUN3QUZCWUliQmxHN0JvV1N0a3NBUWxzQVFsQnJBRUpiQUVKVWtnSUdPd0F5VWdZMUd4QUFNbFZGdFlJU0VqSVFjYklHT3dBaVVnWTJFZ3NGTXJpbU93QlNXd0JTV0hzQVFsc0FRbVNyQUFVRmhsV2JBRUppQUJSaU1BUnJBRkppQUJSaU1BUnJBQUZnQ3dBQ05JQWJBQUkwZ0FJTEFCSTBpd0FpTklBU0N3QVNOSXNBSWpTQ095QWdBQkNDTTRzZ0lBQVFrak9MRUNBUWV3QVJaWkxTd2pFQTBNaW1NamltTmdaTGxBQUFRQVkxQllzQUE0R3p4WkxTeXdCaVd3Q1NXd0NTV3dCeWF3ZGlzanNBQlVXQVViQkZtd0JDV3dCaWF3ZHl1d0JTV3dCU2F3QlNXd0JTYXdkaXV3QUZSWUJSc0VXYkIzS3kwc3NBY2xzQW9sc0FvbHNBZ21zSFlyaXJBQVZGZ0ZHd1Jac0FVbHNBY21zSGNyc0FZbHNBWW1zQVlsc0FZbXNIWXJDTEIzS3kwc3NBY2xzQW9sc0FvbHNBZ21zSFlyaW9vSXNBUWxzQVltc0hjcnNBVWxzQVVtc0FVbHNBVW1zSFlyc0FCVVdBVWJCRm13ZHlzdExMQUlKYkFMSmJBTEpiQUpKckIySzdBRUpyQUVKZ2l3QlNXd0J5YXdkeXV3QmlXd0JpYXdCaVd3Qmlhd2Rpc0lzSGNyTFN3RHNBTWxzQU1sU3JBRUpiQURKVW9Dc0FVbHNBVW1TckFGSnJBRkprcXdCQ1pqaW9wallTMHNzVjBPSldBcnNBd21FYkFGSmhLd0NpVTVzQWNsT2JBS0piQUtKYkFKSmJCOEs3QUFVTEFMSmJBSUpiQUtKYkI4SzdBQVVGUllzQWNsc0FzbGg3QUVKYkFFSlF1d0NpVVFzQWtsd2JBQ0piQUNKUXV3QnlVUXNBWWx3UnV3QnlXd0N5V3dDeVc0Ly8rd2RpdXdCQ1d3QkNVTHNBY2xzQW9sc0hjcnNBb2xzQWdsc0FnbHVQLy9zSFlyc0FJbHNBSWxDN0FLSmJBSEpiQjNLMW13Q2lWR3NBb2xSbUN3Q0NWR3NBZ2xSbUN3QmlXd0JpVUxzQXdsc0F3bHNBd21JTEFBVUZnaHNHb2JzR3haSzdBRUpiQUVKUXV3Q1NXd0NTV3dDU1lnc0FCUVdDR3dhaHV3YkZrckk3QUtKVWF3Q2lWR1lHR3dJR01qc0FnbFJyQUlKVVpnWWJBZ1k3RUJEQ1ZVV0FRYkJWbXdDaVlnRUxBREpUcXdCaWF3QmlZTHNBY21JQkNLT3JFQkJ5WlVXQVFiQlZtd0JTWWdFTEFDSlRxS2lnc2pJQkFqT2kwc0k3QUJWRmk1QUFCQUFCdTRRQUN3QUZtS3NBRlVXTGtBQUVBQUc3aEFBTEFBV2JCOUt5MHNpb29JRFlxd0FWUll1UUFBUUFBYnVFQUFzQUJac0gwckxTd0lzQUZVV0xrQUFFQUFHN2hBQUxBQVdRMndmU3N0TExBRUpyQUVKZ2dOc0FRbXNBUW1DQTJ3ZlNzdExDQUJSaU1BUnJBS1E3QUxRNHBqSTJKaExTeXdDU3V3QmlVdXNBVWxmY1d3QmlXd0JTV3dCQ1Vnc0FCUVdDR3dhaHV3YkZrcnNBVWxzQVFsc0FNbElMQUFVRmdoc0dvYnNHeFpLeGl3Q0NXd0J5V3dCaVd3Q2lXd2J5dXdCaVd3QlNXd0JDWWdzQUJRV0NHd1podXdhRmtyc0FVbHNBUWxzQVFtSUxBQVVGZ2hzR1lic0doWksxUllmYkFFSlJDd0F5WEZzQUlsRUxBQkpjV3dCU1loc0FVbUlSdXdCaWF3QkNXd0F5V3dDQ2F3Ynl0WnNRQUNRMVJZZmJBQ0piQ0NLN0FGSmJDQ0t5QWdhV0d3QkVNQkkyR3dZR0FnYVdHd0lHRWdzQWdtc0FnbWlyQUNGemlLaW1FZ2FXRmhzQUlYT0JzaElTRWhXUmd0TEV0U3NRRUNRMU5hV0NNUUlBRThBRHdiSVNGWkxTd2pzQUlsc0FJbFUxZ2dzQVFsV0R3Yk9WbXdBV0M0LytrY1dTRWhJUzBzc0FJbFI3QUNKVWRVaWlBZ0VCR3dBV0NLSUJLd0FXR3doU3N0TExBRUpVZXdBaVZIVkNNZ0VyQUJZU01nc0FZbUlDQVFFYkFCWUxBR0pyQ0ZLNHFLc0lVckxTeXdBa05VV0F3Q2lrdFRzQVFtUzFGYVdBbzRHd29oSVZrYklTRWhJVmt0TExDWUsxZ01Bb3BMVTdBRUprdFJXbGdLT0JzS0lTRlpHeUVoSVNGWkxTd2dzQUpEVkxBQkk3Z0FhQ040SWJFQUFrTzRBRjRqZVNHd0FrTWpzQ0FnWEZnaElTR3dBTGdBVFJ4Wmlvb2dpaUNLSTdnUUFHTldXTGdRQUdOV1dDRWhJYkFCdUFBd0hGa2JJVm13Z0dJZ1hGZ2hJU0d3QUxnQUhSeFpJN0NBWWlCY1dDRWhJYkFBdUFBTUhGbUtzQUZodVArckhDTWhMU3dnc0FKRFZMQUJJN2dBZ1NONEliRUFBa080QUhjamVTR3hBQUpEaXJBZ0lGeFlJU0VodUFCbkhGbUtpaUNLSUlvanVCQUFZMVpZdUJBQVkxWllzQVFtc0FGYnNBUW1zQVFtc0FRbUd5RWhJU0c0QURpd0FDTWNXUnNoV2JBRUppT3dnR0lnWEZpS1hJcGFJeUVqSWJnQUhoeFppckNBWWlCY1dDRWhJeUc0QUE0Y1diQUVKckFCWWJqL2t4d2pJUzBBQUVEL2ZqUjlWWHcrL3g5N08vOGZlajMvSDNrN1FCOTRQUDhmZHp3OUgzWTFCeDkxT3Y4ZmREcG5IM001VHg5eU9mOGZjVGIvSDNBNHpSOXZPUDhmYmpkZUgyMDN6UjlzTi84ZmF6Y3RIMm8zR0I5cE5QOGZhREwvSDJjeXpSOW1NLzhmWlRIL0gyUXcveDlqTUtzZllqQm5IMkV1L3g5Z0xvQWZYeS8vSDE0dmt4OWRMZjhmWEN6L0gxc3IveDlhS3MwZldTci9IMWdxRFI5WEtmOGZWaWovSDFVbkpCOVVKeTBmVXlWZUgxSWwveDlSSmFzZlVDYi9IMDhtZ0I5T0pQOGZUU01ySDB3anF4OUxJLzhmU2lOV0gwa2pLeDlJSXY4ZlJ5RC9IMFlnY2g5RklmOGZSQ0Z5SDBNZi94OUNIcE1mUVI3L0gwQWQveDgvSFA4ZlBUdVRRT29mUERzMEh6bzFEaDg1Tm5JZk9EWlBIemMySWg4Mk5aTWZNekpBSHpFd2NoOHZMa29mS3lwQUh5Y1pCQjhtSlNnZkpUTWJHVndrR2hJZkl3VWFHVndpR2Y4ZklTQTlIeUE0R0JaY0h4Z3RIeDRYL3g4ZEZ2OGZIQllISHhzekdSeGJHRFFXSEZzYU14a2NXeGMwRmh4YkZSaytGcVphRXpFU1ZSRXhFRlVTV1JCWkRUUU1WUVUwQkZVTVdRUlpId1JmQkFJUEJIOEU3d1FERDE0T1ZRczBDbFVITkFaVkFURUFWUTVaQ2xrR1dYOEdBUzhHVHdadkJnTS9CbDhHZndZREFGa3ZBQUV2QUc4QTd3QURDVFFJVlFNMEFsVUlXUUpaSHdKZkFnSVBBbjhDN3dJREEwQkFCUUc0QVpDd1ZDdEx1QWYvVWt1d0NWQmJzQUdJc0NWVHNBR0lzRUJSV3JBR2lMQUFWVnBiV0xFQkFZNVpoWTJOQUIxQ1M3Q1FVMWl5QXdBQUhVSlpzUUlDUTFGWXNRUURqbGx6ZEFBckFDc3JLM04wQUN0emRIVUFLd0FyQUNzckt5c3JjM1FBS3dBckt5c0FLd0FyS3lzQkt3RXJBU3NCS3dFckFTc3JBQ3NyQVNzckFTc0FLd0FyQVNzckt5c3JBU3NyQUNzckt5c3JLeXNCS3lzQUt5c3JLeXNyS3dFckFDc3JLeXNyS3lzckt5c3JLeXNCS3lzQUt5c3JLeXNyS3lzckt3RXJLeXNyS3lzckFDc3JLeXNyS3lzckt5c3JLeXNyS3lzckt5c3JLeGdBQUFZQUFCVUZzQUFVQmJBQUZBUTZBQlFBQVAvc0FBRC83QUFBLyt6K1lQLzFCYkFBRlFBQS8rc0FBQUM5QU1BQW5RQ2RBTG9BbHdDWEFDY0F3QUNkQUlZQXZBQ3JBTG9BbWdEVEFMTUFtUUhnQUpZQXVnQ2FBS2tCQ3dDQ0FLNEFvQUNNQUpVQXVRQ3BBQmNBa3dDYUFIc0Fpd0NoQU40QW9BQ01BSjBBdGdBbkFNQUFuUUNrQUlZQW9nQ3JBTFlBdndDNkFJSUFqZ0NhQUtJQXNnRFRBSkVBbVFDdEFMTUF2Z0hKQWYwQWxnQzZBRWNBbUFDZEFLa0JDd0NDQUprQW53Q3BBTEFBZ1FDRkFJc0FsQUNwQUxVQXVnQVhBRkFBWXdCNEFIMEFnd0NMQUpBQW1BQ2lBSzRBMUFEZUFTWUFld0NKQUpNQW5RQ2xBTFFFalFBUUFBQUFBQUF5QURJQU1nQXlBRElBV2dCNUFMQUJKUUdtQWhvQ0xnSmVBbzRDdXdMWUF2SURBd01lQXpJRGZ3T1lBOWNFUGdScEJMWUZFQVV0Qlp3RjlRWUJCZzBHTXdaT0JuUUd4UWR0QjZRSUJBaElDSVlJdGdqZkNTNEpWZ2xxQ1pVSnlBbm1DaGtLUEFxSUNyc0xGQXRaQzdnTDFnd0VEQ3NNYlF5YkRMOE03QTBGRFJrTk1nMVhEV2NOZXczakRqWU9mQTdQRHh3UFN3K3pEK3NRRVJCS0VIMFFrUkR0RVNjUmJSSEJFaFVTU1JLZ0V0QVRCeE10RTNFVG5SUFpGQVVVU3hSZEZLUVU0eFVIRldFVnJCWU5GbFFXYmhjQUZ5MFhwUmY3R0FjWUpCaTlHTTRaQVJrbUdWMFp1eG5QR2c4YUxocElHbkVhaUJyR0d0SWE0eHIwR3dVYlZSdWlHOEFjR1J4U0hLOGRUUjJ1SGVVZU9SNk9IdW9mR3g4dkgyRWZpaCtwSCtVZ01pQ2RJU1loVENHYUlla2lTaUtoSXVBaktpTlFJNW9qdVNQWEk5OGtBU1FjSkV3a2R5U3pKTkVrL1NVUkpTVWxMaVZaSlhZbGtDV2pKZDRsNWlYOUppd21oQ2FySnRJbTd5Y2pKM1luc3lnU0tId28zaWtNS1hZcDNDb3RLbWNxd2lyb0t6c3JxeXZrTERJc2ZDelBMUDh0TnkySUxjZ3VMeTZPTHVRdlZTK2VMKzR3U2pDU01ORXc5VEU0TVlveDFqSTlNbUF5bURMVk15WXpUek9GTTZvejJ6UVlORmMwakRUY05UNDFmVFhyTms4MlpqYXJOdm8zWGplQk43TTM2emdhT0VJNGFEaUVPUmc1UURsME9aazV5am9JT2tjNmZEcktPeWc3YUR2RFBCRThiRHkxUFBVOUdqMXZQY1UrQkQ1ZFByYys4ajhyUDMwL3pFQXZRSTlCQlVGN1FmaENjMExaUXl0RFlVT1pRLzVFWFVVQlJhUkdERVoxUnJoRytVY3BSMGRIY2tlSFI1MUlOVWlHU0tKSXZrajZTVDFKb2tuRVNlWktJVXBjU205S2drcU9TcUZLMzBzY1MxZExrVXVrUzdkTDZFd1pURmhNb0UwSlRYQk5nMDJXVGNoTiswNE9UaUZPWlU2blR0MVBQVStiVCtSUUsxQStVRkZRaUZEQlVOUlE1MUQ2VVExUlhGR25VZkpTQVZJUVVoeFNLRkphVXJCVEpWT2FWQTVVZWxUbFZVRlZvRlhzVmp0V2gxYlJWeEpYVTFlN1Y4ZFgwMWY3Vi90WCsxZjdWL3RYKzFmN1YvdFgrMWY3Vi90WCsxZjdWL3RZQTFnTFdCeFlMVmhIV0dGWWZGaVdXTEJZdkZqSVdQUlpFMWs5V1ZsWlpWbDFXWTlhUTFwbldvZGFubHFuV3JCYXVWckNXc3RhMUZyZFd4SmJHMXNrV3kxYk5scy9XMGhiVVZ0YVcyTmJiRnUrVy9WY1RWeFpYTEZjOTExSlhaTmQ0MTRpWGw1ZW1WOFhYMkZmd2wvN1lFTmdXV0JxWUlCZ2xtRDdZUlZoU0dGWllZUmlFbUpNWXF0aTJHTUtZenhqY0dOOVk1bGpzMk8vWS9aa01tU09aUEZsVEdYelpmTm02V2N2WjJSbmlHZkZhQmRvaUdpaWFQSnBObWxlYWNCcCttb1NhbGhxaEdxMWF1QnJJbXRHYTNKcmptdnFiQ3BzZjJ5eGJQZHRGMjFIYldKdGttMjZiY3h0ODI0N2JtUnUxbThqYjJCdmUyK3JiL3R3SG5CRWNHZHduWERwY1NoeGgzSE9jaHB5Y0hLMGN2QnpIM05hYzZGejhuUldkSUYwczNUcmRTVjFWbldJZGJaMTgzWXJkamQyWjNhMGR3OTNWM2QvZDlwNEYzaFZlSTU0OVhrQmVUbDVjbm14ZWVKNk9IcUJlc3Q3S1h1QmU5SjhOWHh4Zk1WODdYMHFmWFY5am4zMGZqOStVSDZKZnJoL1YzK3hnQWVBT29Cc2dKeUF6NEVLZ1V5QnE0SGJnZmFDSVlKZGdvS0NxWUxuZ3l5RFZZT0FnODJEMW9QZmcraUQ4WVA2aEFPRURJUlRoS09FNElVc2hZZUZwSVhqaGlPR1NvYVRocTZHL29jUGgzK0gyNGYraUFhSURvZ1dpQjZJSm9ndWlEYUlQb2hHaUU2SVZvaGVpR2FJZUlpQWlPQ0pKWWxDaVpXSjI0b3VpcGFLM0lzd2k0U0x6WXcwaklHTWlZejFqUitOYkkyZmpmU09JNDVpam1LT2FvNnpqdnlQUEk5aGo1MlBzSS9EajlhUDZZLzlrQkdRSjVBNmtFMlFZSkJ6a0llUW1wQ3RrTUNRMUpEbmtQcVJEWkVna1RPUlI1RmFrVzJSZ0pHVWthZVJ1cEhOa2QrUjhaSUZraG1TTDVKQ2tsV1NhSko2a282U29KS3lrc1dTMlpMcmt2NlRFWk1qa3pXVFNaTmNrMitUZ1pPVms2aVR1NVBPaytDVDg1UUdsRnlVNUpUM2xRcVZIWlV2bFVLVlZaVm9sWHFWalpXZ2xiT1Z4WlhZbGV1Vi9wWVJsbWFXMUpibmx2bVhESmNlbHpHWFE1ZFdsMm1YZlplUWw2T1h0cGZKbDl5WDc1Z0NtQldZS0pnNm1FeVlYNWhybUhlWWlwaWRtTEdZeFpqWW1PdVkvNWtUbVNhWk9abEZtVkdaWkpsM21ZdVpuNW15bWNTWjE1bnFtZnlhRDVvaW1qYWFTcHBkbW5DYWhKcVltcXVhdlpyUW11T2E5cHNJbXh1YkxwdENtMWFiYVp0N200K2JvNXUybThtYjNKdnduQU9jRlp3b25EcWNUWnhnbkhTY2lKeWNuTENkQUoxYm5XNmRnWjJVbmFhZHVwM05uZUNkODU0R25obWVLNTQrbmxHZVpKNTNub09lajU2YW5xMmV3SjdTbnVTZStKOE1ueGlmSko4M24wcWZYSjl2bjRHZms1K21uN3FmelovZ24vT2dCcUFab0MyZ1FLQlRvR1dnZWFDTW9KNmdzYUVDb1JXaEo2RTZvVTJoWDZGeG9ZT2hscUhvb2ZxaURLSWZvaktpUnFKWm9teWlmNktTb3AyaXI2TENvczZpNEtMMG93Q2pES01mb3l1alBxTlJvMlNqZUtPTG81ZWpxYU84bzg2ajJxUHNwQUNrRXFRZXBEQ2tRcVJWcEdta2ZhVE1wTitrOGFVRXBSZWxLcVU4cFUrbFk2VnZwWU9sbDZXcXBiNmwwNlhicGVPbDY2WHpwZnVtQTZZTHBoT21HNllqcGl1bU02WTdwa09tVjZacnBuNm1rYWFrcHJhbXlxYlNwdHFtNHFicXB2S25CcWNacHl5blA2ZFNwMmFuZWFmV3A5Nm44cWY2cUFLb0ZhZ29xRENvT0toQXFFaW9XNmhqcUd1b2M2aDdxSU9vaTZpVHFKdW9vNmlycUw2b3hxak9xUkdwR2FraHFUV3BTS2xRcVZpcGJLbDBxWWVwbWFtc3FiK3AwcW5scWZtcURhb2dxak9xTzZwRHFrK3FZcXBxcW4ycWtLcWxxcnFxemFyZ3F2T3JCcXNPcXhhcktxcytxMHFyVnF0cHEzeXJqNnVpcTZxcnNxdTZxODJyNEt2b3EvdXNEcXdpckRhc1BxeEdyRm1zYkt5QXJJaXNuS3l3ck1TczJLenJyUDZ0RUswa3JUaXRUSzFncldpdGNLMkVyWml0cksyL3JkS3Q1SzM0cmd1dUg2NHpya2V1V3E1dXJvS3VpcTZlcnJLdXhhN1lydXl1LzY4VHJ5YXZPcTlOcjJHdmRLK1JyNjJ2d2EvVnIrbXYvYkFSc0NXd09iQk5zR3F3aDdDYnNLK3d3ckRWc09pdytyRU9zU0d4TmJGSXNWeXhiN0dEc1pheHM3SFBzZUt4OWJJSnNoMnlNYkpGc2xpeWE3Si9zcEt5cHJLNXNzMnk0TEwwc3dlekpMTkFzMU96WnJONXM0eXpuN095czhXejE3UHJzLyswRTdRbnREcTBUYlJndEhPMGhyU1p0S3kwdjdUU3RPUzArTFVNdFNDMU5MVkh0VnExYmJWL3RaeTFyN1hDdGRXMTZMWDd0ZzYySWJZMHRqeTJlYmExdHRlMitiYzV0M3EzcUxmY3VCTzRTTGhRdUdTNGJMaDB1SHk0aExpTXVKUzRuTGlrdUt5NHY3alN1T1c0K0xrTXVTQzVOTGxJdVZ5NWNMbUV1Wmk1ckxuQXVkUzU2TG4wdWdpNkhMb3d1a1M2V0xwc3VvQzZsTHFudXJxNnpycml1dmE3Q3JzZXV6SzdScnRhdTI2N2didVV1Nmk3dkx2UXUrUzcrTHdNdkNDOE03eEZ2Rm04YmJ5QnZKVzhxYnk5dk5HODNienB2UFc5QWIwTnZSbTlKYjB0dlRXOVBiMUZ2VTI5VmIxZHZXVzliYjExdlgyOWhiMk52Wlc5cWIyOHZjKzk0cjNxdmZLK0JyNE92aUcrTTc0N3ZrTytTNzVUdm1hK2JyNTJ2bjYraHI2T3ZwYStucjZtdnhhL1I3K1R2NXUvcDcrNnY4eS8xTC9ndi9QQUJzQVN3Q1hBT01CTXdGakFhOEIrd0pIQXBNQ3d3THpBMEFBR0FHUUFBQU1vQmJBQUF3QUhBQXNBRHdBVEFCY0FBRUVWSVRVekVTTVJJUkVqRVJNVklUVUJBU01CRVFFekFRTUovWFliTmdMRU5oZjlkZ0tLL2E4NkFsSDlyem9DVVFXd05qYjZVQVd3K2xBRnNQcUdOallGWFBxTUJYVDZqQVYwK293QUFnQ2gvL1FCZkFXd0FBTUFEd0FUUUFrQ0FnY05DM0lBQW5JQUt5dmR6aTh3TVVFREl3TURORFl6TWhZVkZBWWpJaVlCYVEybkRnWTNOalU1T1RVMk53V3crK3NFRmZxdExUNCtMU3MrUGdBQ0FJa0VFd0lrQmdBQUJRQUxBQXl6Q1FNTEJRQXZNODB5TURGQkZRTWpFVFVoRlFNakVUVUJGaDV2QVpzZWJ3WUFpUDZiQVZ5UmlQNmJBV09LQUFRQWR3QUFCTk1Gc0FBREFBY0FDd0FQQUNOQUVRUUFCUTBPRGdBS0NRa0FBZ0p5QUJKeUFDc3JFVGt2TXhFNUx6TXlFVE13TVdFQk13RWhBVE1CQVNFMUlRTWhOU0VCRndFYmtQN2tBUWdCSEkvKzVBR1crL0FFRUV2Nzd3UVJCYkQ2VUFXdytsQURoWXY5aW9vQUF3QnUvekFFRWdhY0FBTUFCd0E5QURaQUhBUUhPam9JS3hBakJCUXZOVFVHTHcxeUFRSWZIeFFhR2dNVUJYSUFLODB6THhFekVqazVLODB6THhFU0Z6a3pFams1TURGQkVTTVJFeEVqRVFFMEppWW5MZ0kxTkRZMk16SWVBaFVqTkM0Q0l5SUdCaFVVRmhZWEhnSVZGQVlHSXlJdUFqVXpGQjRDTXpJMk5nS2lsb1NWQVYwMmZHaCt0Mk5xd29ObW9HODd1Q0JBWER4VWJUUTBmVzZCdEY1MDBvMVZwb1pRdWpGU1l6RmFmVUlHblA3UEFUSDVuLzcxQVFzQlBEeGdVQ0luY0taMmU3SmdQWGl1Y2tOd1V5MDZhVVZBWUUwbEtXK2hkNEd4WEM1cHJYNVZiMEViT1dvQUJRQnAvK3NGZ3dYRkFCRUFJd0ExQUVjQVN3QWpRQkZKTWtzRk8wUXBNaGNPSUFVRmNqSU5jZ0FyS3pMRU1oREVNak1STXhFek1ERlROVFEyTmpNeUZoWVZGUlFHQmlNaUppWTNGUlFXRmpNeU5qWTFOVFFtSmlNaUJnWUJOVFEyTmpNeUZoWVZGUlFHQmlNaUppWTNGUlFXRmpNeU5qWTFOVFFtSmlNaUJnWVRBU2NCYVVpR1hGNkZTRWVGWFYySFNJc2pTRFkyUmlJalJ6WTFSeU1DT2tpR1hGNkZTRWVGWFYyR1NZc2pTRFkyUnlJalJ6YzFSeVBOL1Rsb0FzY0VTMDFUaUZKU2lGTk5VWWhTVW9pZVRTNVNNek5TTGswdlV6TXpVL3hRVGxLSVVsS0lVazVTaUZKU2lLQk9MbE16TTFJdlRpOVNNek5TQTAzN2prSUVjZ0FBQVFCbS8rd0U4d1hFQUVJQUpFQVVJeElBRHlJQkJob3dNQ3NSRVRzVGNnY2FBM0lBS3pJck1pOHlNaThSRnprd01VRTNOalkxTkNZaklnWUdGUlFXRmhjQkl3RXVBalUwTmpZek1oWVdGUlFHQmdjRkRnSVZGQllXTXpJK0FqVXpGQVlHQndZR0J3WUdJeUltSmpVME5qWUJtdG8vUlZ4VU9sQW9MRTR5QXJIZS9jdExka05icEc1cm0xUXlXVHYrMzBoQ0V6NS9ZRlNmZmt1bUprODlDUW9KUzl0dWtkTnlUNHNES0pzclYwdzdZVFpaTlMxZ2FEcjh4Z0trV0pPS1NuS2RVbFdMVTBadlhDelhOV0JLRmtkMlIwMlB4M2xqc0pjK0NSZ0pVVkZxdW5oY2pIb0FBQUVBYUFRaUFQNEdBQUFGQUFpeEF3VUFMOFl3TVZNVkF5TVROZjRWZ1FFR0FHNytrQUZmZndBQkFJYitLZ0tXQm1zQUZ3QUlzUVlUQUM4dk1ERlROVFFTRWpZM0Z3NENBaFVWRkJJV0ZoY0hKaVlDQW9aaW1LaEhKenQ1WlQ0K1pYazdKMGVvbUdJQ1JncmFBV0VCQ3E4bmVpMmU1djdRdmc2Ky9zL29vekJ3SjY4QkNRRmlBQUFCQUNmK0tnSTNCbXNBRndBSXNSTUdBQzh2TURGQkZSUUNBZ1lISno0Q0VqVTFOQUltSmljM0ZoWVNFZ0kzWXBpb1J5YzdlR1krUW1sM05TZEhxSmhpQWxBSzIvNmUvdmV2SjNBdG9lc0JNNzRPdmdFejZxRXNjU2V2L3ZiK253QUJBQndDWWdOV0JiRUFEZ0FVUUFvTkFRY0VCQTRNQmdKeUFDdkVNaGM1TURGVEV5VTNCUU16QXlVWEJSTUhBd09CeWY3U0x3RXVDWmdLQVNvdS9zM0ZmTG0xQXNRQkZGcVdid0ZZL3FKdm1Wdis4VjBCSVA3bkFBQUNBRTRBa2dRMEJMWUFBd0FIQUJDMUJ3Y0RBd1lDQUMvR014REdMekF4UVJVaE5RRVJJeEVFTlB3YUFsQzVBdzJ1cmdHcCs5d0VKQUFBQVFBZC90MEJOUURjQUFvQUNMRUVBQUF2elRBeFpSVVVCZ2NuUGdJMU5RRTFYRk5wSUN3WDNKVmJ5MFJKTEZ0aE5wZ0FBQUVBSmdJZkFnNEN0d0FEQUFpeEF3SUFMek13TVVFVklUVUNEdjRZQXJlWW1BQUJBSkQvOUFGMkFOSUFDd0FLc3dNSkMzSUFLekl3TVhjME5qTXlGaFVVQmlNaUpwQTdPRGc3T3pnNE8ySXZRVUV2TGtCQUFBQUJBQlAvZ3dNUkJiQUFBd0FKc2dBQ0FRQXZQekF4UVFFakFRTVIvYUdmQW1BRnNQblRCaTBBQWdCei8rd0VDd1hFQUJjQUx3QVRRQWtyQmg4U0JYSUdEWElBS3lzeUVUTXdNVUVWRkE0Q0l5SXVBelUxTkQ0Q016SWVBd01STkM0REl5SU9BaFVSRkI0RE16SStBZ1FMUUhpcGFsU09jVkFxUVhpcGFWV1BjRThxdWhjc1ExYzJRbVpGSkJjdVFsYzFSR1pGSWdOTTNyUDJsa01xWFpiV2o5Nno4cE5BS1ZtVDFQNTFBUnRpbFdwQ0h6RnFySHYrNVdLV2JVWWhORyt2QUFFQXF3QUFBdGtGdUFBR0FBeTFCZ1J5QVF4eUFDc3JNREZCRVNNUkJUVWxBdG01L29zQ0VRVzQra2dFMFlpbnlBQUFBUUJlQUFBRU13WEVBQjhBR1VBTUVCQU1GUVZ5QXg4ZkFneHlBQ3N5RVRNck1qSXZNREZsRlNFMUFUNENOVFFtSmlNaUJnWVZJelEyTmpNeUZoWVZGQTRDQndFRU0veEhBZDFZWVNjN2NsRmhnVUM1Yk5TYmlzUnBLMHRqT1A1Nm1KaUZBaE5paVcwNVNIVkdTNFpYZTh4NVlhOTFRSU9DZmozK1dRQUFBZ0JmLyt3RCtnWEVBQndBT3dBcVFCWWJIQjRmQkFBQUhSMFNNeTh2S1ExeURRMEpFZ1Z5QUNzeU1pOHJNaTh5RVRrdk14SVhPVEF4UVRNeU5qWTFOQ1ltSXlJR0JoVWpORFkyTXpJV0ZoVVVEZ0lqSXhVMU16SWVBaFVVRGdJaklpNENOVE1VRmhZek1qWTJOVFFtSmlNQmg0Umhmejg0Y0ZaT2QwTzVjTXVHaE1adU0ydXFkNTZlaTdacEswVjlxR05mcDRCSXVVTjlWVlY3UTB5TFhnTXpRWEZIVkhJNlBYQk1iN1pzWGJlSU4zMXNSU2h2UW02RFFXYWViamcyWjVkaFRISS9PM2hiVzNVNUFBQUNBRFVBQUFSUkJiQUFCd0FMQUIxQURnTUhCd1lDQWdVSkRISUxCUVJ5QUNzeUt4STVMemt6RWprd01VRVZJVFVCTXdNQkFSRWpFUVJSKytRQ2pKZWkvbEVDZjdrQjZwaHRBL0grM1AxZUE4YjZVQVd3QUFFQW12L3NCQzRGc0FBcEFCMUFEaWNKQ1FJZEdSa1REWElGQWdSeUFDc3lLekl2TWhFNUx6TXdNVUVuRXlFVklRTTJOak15SGdJVkZBNENJeUl1QWljekhnSXpNajRDTlRRdUFpTWlCZ0ZqbEVrQzYvMnlMQ2g3VUdXZ2NUdzVjcTExV0oxN1RRcXdERWgxVGtKbVJpVW1TMnhHWFY4Q3RTWUMxYXYrZEJjb1JZQzBiMm13ZzBneFpaZG1VbkE1TGxaNlRFVjJXREV5QUFBQkFJWC83QVFkQmJJQU5nQWJRQTBPTEJnaUlpd0RBQVJ5TEExeUFDc3JNaEU1THpNUk16QXhRVE1WSXlJT0FoVVZGQjRDTXpJK0FqVTBMZ0lqSWdZR0J5YytBek15SGdJVkZBNENJeUl1QWpVMU5CSTJKQU0vRUJDVHhuUXpMbEJsTjBCa1JTUWdRbU5FVFlWVkJtSU9UWE9QVUcyZVpqRTZjNmh2ZHJCME9qNlpBUkFGc3AxZm44Wm0xbUdWWmpReFdYcEpRWGxmTjB0NVJ3RnduMlV2VW9tcldtZTBpRXhob3NabVY1b0JLUENPQUFBQkFFNEFBQVFtQmJBQUJnQVRRQWtCQlFVR0JISURESElBS3lzeUVUTXdNVUVWQVNNQklUVUVKdjJsd3dKYS9Pd0ZzR2o2dUFVWW1BQUFCQUJ4Lyt3RUR3WEVBQkFBSUFBd0FFQUFJVUFRRFQwOUpTMFZGUVExTFFWeUhRUU5jZ0FyTWlzeUVqa3ZFamt6RWprd01VRVVCZ1lqSWlZbU5UUStBak15RmhZSE5DWW1JeUlHQmhVVUZoWXpNalkyRXhRR0JpTWlKaVkxTkRZMk16SVdGZ2MwSmlZaklnWUdGUlFXRmpNeU5qWUVEM3ZSZzRQU2VrTjdxV2FHMG5tNlJuNVRWWHRFUTMxV1ZueERtSERDZTMzRGJtL0NmSDNDYjdrK2JrbEpiVDA5YmtsSmJUNEJpb1c1WUdDNWhWZVJiRHRudEhCUmZVWkdmVkZVZHo4L2R3TDdhcXBpWXFwcWY3SmVYcktDU1hCQlBYQk5TM0ErUG5BQUFRQmsvLzREK0FYRUFEZ0FHMEFOQURnV0lTRTREQ3NGY2pnTWNnQXJLeklST1M4ekVUTXdNV1V6TWo0Q05UVTBMZ0lqSWc0Q0ZSUWVBak15UGdJM014UU9BaU1pTGdJMU5ENENNekllQWhVVkZBNERJeU1CTVJPZ3lHd29MVTlrT0VCbFJTUWdRbU5EUG0xVk13UllRWFNjWEd5ZVpURTZjcWx2ZmJCdk5CMVJtdmUxRTV0YW1MOWwzMk9hYURZelhIeEpRWHBpT1RGVmJEdFRvWVJQVkl5dFdXaTJpMDVrcU5KdlEzSHAxS2RoLy84QWhmLzBBV3dFUlFRbUFCTDFBQUFIQUJMLzlnTnovLzhBS2Y3ZEFWUUVSUVFuQUJMLzNnTnpBQVlBRUF3QUFBSUFTQURFQTNvRVNnQUVBQWtBRmtBTUFRTUhCZ0FFQ0FVSUFna0NBQzh2RWhjNU1ERlRBUlVCTlNVQkJ6VUJ4d0t6L000RE12MU9nQU15QXFEKzZNUUJlM1BVL3VRT2RBRjZBQUFDQUpnQmp3UGFBODhBQXdBSEFBNjFCZ2NTQXdJUUFEOHpQek13TVVFVklUVUJGU0UxQTlyOHZnTkMvTDREejZHaC9tR2hvUUFDQUljQXhRUGRCRXdBQkFBSkFCVkFDd1VJQkFBR0F3RUhBZ2tDQUM4dkVoYzVNREZCQVRVQkZRVUJOeFVCQTA3OU9RTlcvS29DeVkzOHFnSjRBUlcvL29aMTJRRWJGWFQraFFBQUFnQkwvL1FEZHdYRUFDQUFMQUFiUUEwQkFTUWtLZ3R5RVJFTkZnTnlBQ3N5TWk4ck1oRXpMekF4UVNNK0FqYytBalUwSmlZaklnWUdCeU0rQWpNeUZoWVZGQVlHQndZR0F6UTJNeklXRlJRR0l5SW1BaCs2QVNGTVB5NU5NREZmUmpwb1FBRzVBbTI2YzMrelhrbHlRRGNtd2pnMU5qZzROalU0QVpwZ2UyWkJMMU5oUkVWa05pcFhSbkdpVmx5cmRWcVhoRHd6Z1A1NUxUNCtMU3MrUGdBQUFnQnQvanNHendXWEFFRUFhQUFuUUJJU0JRVkhVaE55WVdSa0MxMWRIUjA4S1RBQUx6TXZNeEV6THpNekVUTXJNaklSTXpBeFFRNERJeUl1QWpjVE13TUdIZ0l6TWo0Q056WXVBeU1pRGdNSEJoNERNekkyTnhjR0JpTWlMZ0lDTnpZU05qWWtNekllQWhJRkJoNENNekkrQWpjWERnTWpJaTRDTno0RU16SVdGd2NtSmlNaURnSUd5QVF3WUpsc1JXZEJHUWd6a3pNR0V5Z3pHRHhlUVNRRUJ5bGhuTmlMZnRXcGVVVUdCeTVubnRDQVdMVTlKa2JSWFpqN3dZQThCd2RWbE0wQkFaZWErcjE4T2Z2MkJ3NG9RU3dkUUQ0MkVrSVhTVnBsTkVsdVJCc0pDVGhUYVhZK2JIdzRWUjFlUURkZ1RUUUI5MXk1bWwweFhJSlFBaXI5MWtsY01SSS9iNU5VbGZyQ2hrWk5rTXI5a3BiN3hZbEhLaVJ5TFN4VG4rTUJJcXlrQVNMc3ExeFVudVQrNFA5R2Jrd25IVDVrUmtoU2ZGUXJQM1NoWTJteWpHSXpQeXRqSERBNGNLVUFBd0FkQUFBRkhnV3dBQVFBQ1FBTkFDbEFGQVFIQndvTkRRWUFDd3dNQWdnREFuSUZBZ2h5QUNzeUt6SVJPUzh6T1RrekVUTXlFVE13TVVFQkl3RXpBUUVuTXdFREZTRTFBc1QrSHNVQ0szOEJrZjRkQTM4Q0xkLzh6Z1V2K3RFRnNQcFFCUytCK2xBQ0c1NmVBQUFDQUtrQUFBU0lCYkFBR1FBd0FDbEFGQmtwSmdJbkp3RW1KZzRNRHdKeUhCc2JEZ2h5QUNzeUVUTXJNaEU1THpNekVUTVNPVGt3TVVFaEp5RXlOalkxTkNZbUl5RVJJeEVoTWg0Q0ZSUUdCZ2NESVRjaE1qWTJOVFFtSmlNaE55RVhIZ0lWRkFZR0FyRCtqd0lCVDFOOFJUMTlZUDdrd1FIZGNMQjdRRnlqYlU3K1RHMEJSMXlCUkRwOFl2N3RBZ0Y0S1dtU1RYZllBcW1iT0dsSlVHVXYrdTRGc0MxZmttWmFrVndOL1NpZFFIVlFVWFpBbXpnSlpaeGVpTHRoQUFBQkFIai83QVRZQmNRQUp3QVZRQW9aRlJBRGNpUUFCUWx5QUN2TU15dk1NekF4UVRNT0FpTWlMZ0kxTlRRK0FqTXlGaFlYSXk0Q0l5SU9BaFVWRkI0Q016STJOZ1FZd0ErQTZxK0EwWlpSVVpuWWg2WGtmdy9BRGt5TWNXR1RZekl0WEk1aGU1SkxBYytLMm45Z3NmbVprWm41c21CODI1Qm1rMUJLaUw1MGsydThqbEZPa2dBQUFnQ3BBQUFFeHdXd0FCb0FIZ0FiUUEwQ0FRRWREZzhQSGdKeUhRaHlBQ3NyTWhFekVUTVJNekF4WVNFM0lUSTJOalUxTkM0Q0l5RTFJVEllQWhVVkZBNENBUkVqRVFJei90QUNBUzZjMEdrOGRLZHMvcmdCU0kvc3ExeGNyZlArbjhHZGcrMmZXWDNEaDBhZVg3UDlubGVlL2JKZkJiRDZVQVd3QUFRQXFRQUFCRVlGc0FBREFBY0FDd0FQQUIxQURnc0tDZ1lQRGdjQ2NnTUNCZ2h5QUNzeU1pc3lNaEU1THpNd01XVVZJVFVURVNNUkFSVWhOUUVWSVRVRVJ2ejlKOEVETi8xakF2bjlCNTJkblFVVCtsQUZzUDJPblowQ2NwNmVBQU1BcVFBQUJDOEZzQUFEQUFjQUN3QWJRQTBIQmdZQ0Nnc0xBd0p5QWdoeUFDc3JNaEV6RVRrdk16QXhRUkVqRVFFVklUVUJGU0UxQVdyQkF5UDlkQUx2L1JFRnNQcFFCYkQ5Y1o2ZUFvK2VuZ0FCQUhyLzdBVGRCY1FBS3dBYlFBMHJLaW9GR1JVUUEzSWtCUWx5QUNzeUs4d3pFamt2TXpBeFFSRU9BaU1pSmlZQ05UVTBFalkyTXpJV0ZoY2pMZ0lqSWc0Q0ZSVVVIZ0l6TWpZMk54RWhOUVRkRzNiUG80WGZvMWxObHRxTnArRi9Fc0VOVFk1d1paUmdMenR1bVYxbmdFZ1QvcThDMWYzcktHTkpYYk1CQWFOeG93RUFzMTF6eW9GUGdrOUtpc1I3YzM3R2kwZ2pNUllCUnB3QUFBTUFxUUFBQlFnRnNBQURBQWNBQ3dBYlFBMEpCZ2dEQWdJR0J3SnlCZ2h5QUNzckVUa3ZNeklSTXpBeFFSVWhOUk1SSXhFaEVTTVJCR0Q4N0I3QkJGL0FBejZkblFKeStsQUZzUHBRQmJBQUFRQzNBQUFCZUFXd0FBTUFETFVBQW5JQkNISUFLeXN3TVVFUkl4RUJlTUVGc1BwUUJiQUFBQUVBTmYvc0E4d0ZzQUFUQUJOQUNSQU1EQWNKY2dJQ2NnQXJLekl2TWpBeFFSRXpFUlFHQmlNaUppWTFNeFFXRmpNeU5qWURETUIyejRhRzBIYkJSSGxPVEhsR0Fha0VCL3Y1a01ablhMeVBYSFk0UVlFQUF3Q3BBQUFGQlFXd0FBTUFDUUFOQUJ4QUVBWUhDd1VNQ0FZQ0JBTUNjZ29DQ0hJQUt6SXJNaElYT1RBeFFSRWpFU0VCQVNjQkFSTUJOd0VCYXNFRU1QMmovcXdnQVFBQjZTNzk1WE1DamdXdytsQUZzUDFaL3AvT0FSb0NJUHBRQXNhWi9LRUFBZ0NwQUFBRUhBV3dBQU1BQndBVlFBb0RBZ0lHQndKeUJnaHlBQ3NyRVRNUk16QXhaUlVoTlJNUkl4RUVIUDBvSnNHZG5aMEZFL3BRQmJBQUF3Q3BBQUFHVWdXd0FBWUFDd0FRQUJ0QURRSUhEZ1VMQ0hJTUJBQUhBbklBS3pJeU1pc3lNaEU1TURGVE13RUJNd0VqQVRNVEVTTUJNeEVqRWVhN0FkMEIzTHo5c0pMOWRhVWJ3QVVFcGNBRnNQdGRCS1A2VUFXdy9Jajl5QVd3K2xBQ09BQUFBUUNwQUFBRkNRV3dBQWtBRjBBTEF3Z0ZDUWNDY2dJRkNISUFLeklyTWhJNU9UQXhRUkVqQVJFakVUTUJFUVVKd3YwandjRUM0QVd3K2xBRVkvdWRCYkQ3bWdSbUFBSUFkLy9zQlFvRnhBQVZBQ3NBRTBBSkp3WWNFUU55QmdseUFDc3JNaEV6TURGQkZSUUNCZ1lqSWlZbUFqVTFOQkkyTmpNeUZoWVNBelUwTGdJaklnNENGUlVVSGdJek1qNENCUXBTbXRlRmdkZWRWbFdjMTRHRjE1dFR2elZtazExYWtXYzRPR21SV2w2U1pUUURCbHlrL3Z5MllHQzJBUVNrWEtRQkE3ZGdZTGYrL2Y4QVhvTElpRVpHaU1pQ1hvUEppVVpHaWNrQUFRQ3BBQUFFd1FXd0FCY0FGMEFMQWdFQkRnd1BBbklPQ0hJQUt5c3lFVGt2TXpBeFFTRTFJVEkyTmpVMEppWWpJUkVqRVNFeUZoWVZGQVlHQXNMK2V3R0ZjWXhCUVl4eC9xakJBaG1sNUhaMjVBSTduVWlBVWt1RVVmcnVCYkJ5eVlHTXhtY0FBd0J1L3dvRkJnWEVBQU1BR1FBdkFCbEFEQ0FWQTNJQUt5c0RDZ2x5QWdBdkt6SXlFVE1yTWpBeFpRRUhBUUVWRkFJR0JpTWlKaVlDTlRVMEVqWTJNeklXRmhJRE5UUXVBaU1pRGdJVkZSUWVBak15UGdJRGxBRnlndjZVQWVsU210ZUZnZGVkVmxXYzE0R0YySnBUdnpWbWtsNVprV2c0T0dtU1dWNlNaVFNuL3R0NEFTRUMyMXlrL3Z5MllHQzJBUVNrWEtRQkE3ZGdZTGYrL2Y4QVhvTElpRVpHaU1pQ1hvUEppVVpHaWNrQUFBSUFxUUFBQk1vRnNBQVlBQjBBSTBBU0d4b0pBd3dNQ3dzQUhCa1lDSElXQUFKeUFDc3lLekl5RWprdk14SVhPVEF4VXlFeUZoWVZGQVlHQndjaEp5RXlOalkxTkNZbUl5RVJJeUVCTndFVnFRSGlwT04zVVpkcE52NDdBZ0ZXYUlwR1FvMXYvdC9CQTFQK25za0Jad1d3Wk1PT1pLVnpIQldkU1h4TFZINUYrdTRDbEFIOWR3d0FBQUVBVWYvc0JITUZ4QUE1QUI5QUR3b21Eell4TVNzSmNoZ1VGQThEY2dBck1pOHlLekl2TWhFNU9UQXhRVFF1QWljdUF6VTBQZ0l6TWhZV0ZTTTBKaVlqSWdZR0ZSUWVBaGNlQXhVVURnSWpJaTRDTlRNVUhnSXpNalkyQTdFZlRZZG5iSzU4UWthRHRuQ2s1WGpBUm81dFo0WkJKMU9CV255MGRUbElocnR6WmNPZlg4QTZaWUZHWll4SkFYQXpUMEE2SGlCUFpvUlZWWkJyUEgzSmNsSi9TVDVxUkM1TFFEWVpJMVpyaDFWWmtHWTNPSENsYlV0clJpRTRhQUFDQURJQUFBU1hCYkFBQXdBSEFCVkFDZ0FEQXdZSEFuSUJDSElBS3lzeU1oRXpNREZCRVNNUklSVWhOUUxEdmdLUys1c0ZzUHBRQmJDZW5nQUJBSXovN0FTcUJiQUFGUUFUUUFrQkVRWUxBbklHQ1hJQUt5c1JNekl3TVVFekVSUUdCaU1pSmlZMUVUTVJGQllXTXpJMk5qVUQ2c0NTOFkyVTc0dS9WSmRrWlpkVUJiRDhKNlRhYlczYXBBUFovQ2R5bEVoSWxISUFBQUlBSFFBQUJQMEZzQUFFQUFrQUYwQUxBQVlJQVFrQ2NnTUlDSElBS3pJck1oSTVPVEF4WlFFekFTTUJBUmNqQVFKL0FhM1IvZVdWL3FFQnFUV1YvZWJkQk5QNlVBV3creTNkQmJBQUFBUUFQUUFBQnUwRnNBQUZBQW9BRHdBVkFCdEFEUkFNQVFvQ2NoTVNEZ1FKQ0hJQUt6SXlNaklyTWpJeU1ERkJBVE1EQVNNREV4TWpBUUVUTXdFakFRRVRJd0VEQWlnQklZeFIvc21MeGVaRml2NmZCUTdod2Y2Z2l2N25BUmxtaS83VVVnRzRBL2orZGZ2YkJiRDhIUDQwQmJEOEhRUGorbEFGc1B3SS9rZ0VKUUdMQUFFQU9nQUFCTTRGc0FBTEFCcEFEZ2NFQ2dFRUNRTUxBbklHQ1FoeUFDc3lLeklTRnprd01VRUJBVE1CQVNNQkFTTUJBUUVtQVY0Qlh1SCtOQUhYNC82Wi9wbmpBZGYrTkFXdy9kSUNMdjB2L1NFQ09mM0hBdDhDMFFBQUFRQVBBQUFFdkFXd0FBZ0FGMEFNQkFjQkF3WURDQUp5QmdoeUFDc3JNaElYT1RBeFV3RUJNd0VSSXhFQjdBRjZBWHZiL2dyQi9nb0ZzUDBsQXR2OGNQM2dBaUFEa0FBQUF3QlhBQUFFZWdXd0FBTUFDUUFOQUI5QUR3UU1EQWtOQW5JSEF3TUNBZ1lJY2dBck1oRXpFVE1yTWpJUk16QXhaUlVoTlFFQkl6VUJNeU1WSVRVRWV2d21BN3I4ZEhjRGkzaFMvRnlkblowRWgvcmNrQVVnbnA0QUFRQ1Qvc2dDQ3dhQUFBY0FEclFEQmdJSEJnQXZMek1STXpBeFFSVWpFVE1WSVJFQ0M3Ky8vb2dHZ0pqNWVKZ0h1QUFCQUNuL2d3TTVCYkFBQXdBSnNnRUNBQUF2UHpBeFJRRXpBUUtKL2FDd0FtQjlCaTM1MHdBQUFRQUsvc2dCaEFhQUFBY0FEclFGQkFBQkJBQXZMek1STXpBeFV6VWhFU0UxTXhFS0FYcitoc0FGNkpqNFNKZ0dpQUFDQUVBQzJRTVZCYkFBQkFBSkFCWkFDUWdIQndZQUJRSURBZ0EvelRJNU9UTVJNekF4UVFNakFUTVRBeWN6QVFHM3k2d0JLM0NPeWlWeEFTb0UydjMvQXRmOUtRSUIxdjBwQUFFQUJQOW9BNWtBQUFBREFBaXhBZ01BTHpNd01XRVZJVFVEbWZ4cm1KZ0FBUUE1Qk5vQjJnWUFBQU1BQ3JJRGdBSUFMeHJOTURGQkV5TUJBUm5Cbi83K0JnRCsyZ0VtQUFJQWJmL3NBK29FVGdBYkFEb0FLVUFWS3l3ZUp4NDZPZzhuTVF0eUdCa0tjZ2tGRHdkeUFDc3lNaXN5S3pJU09TOHpFUkk1T1RBeFpSRTBKaVlqSWdZR0ZTTTBQZ0l6TWhZV0ZSRVVGaGNWSXlZbUV4Y2pJZzRDRlJRV0ZqTXlOalkzRnc0REl5SW1KalUwUGdJekF3c3paa3RHYVR1NVBIR2ZZbmExWnhNVHdRNFFJQUs3VDN4VUxDNWRSRldDVFFOUEJ6NW5qVmh1cFZ0RWdMUnZ1UUl0UUY4ME1FNHRPbkpkTjFDaGVmNElObm9zRUNCckFnV0NHVEpMTWpOVU1VaG9NVmtxWmwwOVZwRmFWNFZaTGdBREFJei83QVFoQmdBQUJBQWFBQzhBR1VBT0lSWUhjaXNMQzNJRUNuSUFBSElBS3lzck1pc3lNREZUTXhFSEl3RVZGQTRDSXlJdUFpYzFQZ016TWg0Q0J6VTBMZ0lqSWc0Q0J4VWVBak15UGdLTXVoQ3FBNVU0Ykp4bFo1dHFQd3dNUDJxYVptYWVhemk2SGtKc1QwWm5TQzBMRUVsN1cwdHJReUFHQVByUzBnSW1GWGJKbEZKSGhyNTNYSGkraDBkUGtzdVJGVkdQYlQ4d1VXYzM4VWFCVWoxc2pnQUFBUUJkLyt3RDdRUk9BQ2NBR1VBTUhSa1pGQWR5QkFRQUNRdHlBQ3N5TWk4ck1pOHlNREZsTWpZMk56TU9BaU1pTGdJMU5UUStBak15RmhZWEl5NENJeUlPQWhVVkZCNENBajVDY0VnRnNBVjN3SE42dFhjN08zZTFlbisrYlFXd0JVRnZTbFZ6UXgwY1EzT0VObDg5WUtWbFZwYkRiU3B0dzVaV1o3RndRMnhCUTNHSlJ5cEhpbkJEQUFBREFGLy83QVB4QmdBQUJBQWFBQzhBR1VBTklRUUVGZ3R5S3dzSGNnRUFjZ0FyS3pJck1pOHlNREZsRVRNUkl3RTFORDRDTXpJZUFoY1ZEZ01qSWk0Q054VVVIZ0l6TWpZMk56VXVBeU1pRGdJRE43cXEvUmc5Y1oxaFpwbHJQZ3dMUDJ1YVoxK2RjVDI2SVVac1MxeDNTQlFNTFVkblJreHRSaUhTQlM3NkFBSVJGWHpMa2s5SGg3NTRYSGUraGtkU2xNbUxGVkdPYkQxT2dFdnhOMmRSTUQ5dGp3QUFBUUJkLyt3RDh3Uk9BQ3NBSDBBUVp4TUJCaE1TRWdBWkN3ZHlKQUFMY2dBck1pc3lFVGt2TTE5ZE1ERkZJaTRDTlRVMFBnSXpNaDRDRlJVaE5TRTFMZ0lqSWc0Q0ZSVVVIZ0l6TWpZM0Z3NENBazV4dDROR1RvYXFXM1NwYkRUODJBSnZCRE51WHo5cVRDb3JVM2RNWW9nemNDTnNuUlJOak1CeUtvVFBrRXBRajhGeVU1Y09TSWhZTldpV1lpcE5oMlk2VUVOWk5XQThBQUlBUFFBQUFzc0dGUUFSQUJVQUZVQUxGQlVHY2cwR0FYSUJDbklBS3lzeUt6SXdNV0VqRVRRMk5qTXlGaGNISmlZaklnWUdGUmNWSVRVQm9ibFZvRzRnUVI4S0ZUVWFPMVVzNXYyMkJLeDFvVk1JQ0pjRkJDOWFRbktPamdBREFHSCtWUVB5QkU0QUV3QXBBRDRBRzBBUE1DVUxjam9hQjNJT0JnOXlBQVp5QUNzck1pc3lLekl3TVVFekVSUUdCaU1pSmlZbk54WVdNekkyTmpVUkFUVTBQZ0l6TWg0Q0Z4VU9BeU1pTGdJM0ZSUWVBak15TmpZM05TNERJeUlPQWdOS3FIVFBoemlYa1RGaFJKVkpXSUJIL1NnN2I1NWpacGxyUGd3TFAydWFaMkdkY0R1NUlVVnNTMXg0UnhRTExVZG9Sa3h0UlNFRU92dmRqOHBwSTFOR2JsSkFRb0ZlQXo3K3hSVjh5NUpQUjRlK2VGeDN2b1pIVXBUSml4VlJqbXc5VG9CTDhUZG5VVEEvYlk4QUFnQ05BQUFENEFZQUFBTUFHZ0FYUUF3UkFoWUtCM0lEQUhJQ0NuSUFLeXNyTWhFek1ERkJFU01SRXljK0F6TXlIZ0lWRVNNUk5DWW1JeUlPQWdGR3VZMU5BVUIwb1dKUWdGc3d1akpnUmtWeFVTMEdBUG9BQmdEOFJnTnZ2WXhOSzE2VmEvMDdBc2RWWnk4NlpvTUFBQUlBamdBQUFXa0Z4QUFEQUE4QUVMY0hEUU1HY2dJS2NnQXJLODR5TURGQkVTTVJBelEyTXpJV0ZSUUdJeUltQVZhNkRqYzJOVGs1TlRZM0JEcjd4Z1E2QVI4dFBqNHRLejA5QUFBQy83NytTd0ZhQmNRQUVRQWRBQk5BQ1EwR0QzSVZHd0FHY2dBcnpqSXJNakF4VXpNUkZBWUdJeUltSnpjV0ZqTXlOalkxQXpRMk16SVdGUlFHSXlJbWtyby9mVjhaUXhjQkV6QVNLVGdkRXpnMU5qZzROalU0QkRyN1JXT0tSd29IbFFRRkhrSTNCZG90UGo0dEt6MDlBQUFEQUkwQUFBUU5CZ0FBQXdBSkFBMEFIVUFSQmdjTEJRd0lCZ0lKQmdNQWNnb0NDbklBS3pJclB4SVhPVEF4UVJFakVRa0NKemNCRXdFM0FRRkh1Z05QL2lqKytBKzlBVkE1L241Z0Fmd0dBUG9BQmdEK092NEgvdTdGNGdGays4WUNCS1g5VndBQkFKd0FBQUZXQmdBQUF3QU10UU1BY2dJS2NnQXJLekF4UVJFakVRRld1Z1lBK2dBR0FBQUFBd0NMQUFBR2VRUk9BQVFBR3dBeUFDRkFFU2tTQWk0aUloY0xBd1p5Q3dkeUFncHlBQ3NyS3hFek14RXpFVE16TURGQkVTTVJNd01uUGdNek1oNENGUkVqRVRRbUppTWlEZ0lsQno0RE16SWVBaFVSSXhFMEppWWpJZzRDQVVXNnNCeFdBVGh1cEd4TWdGNDB1VGxvUmxKdVFoMEN2WHdCT1cyZ1oxZUhYVEM2T1dkSFBWNUFJUU5qL0owRU92NE1BMis5akUwclhKQm0vUzhDeUZWbUx6cG1neDBtV2FTQVN5NWZsR2I5T1FMSlcyVXBLa2xlQUFJQWpRQUFBK0FFVGdBRUFCc0FHVUFORWdJWEN3TUdjZ3NIY2dJS2NnQXJLeXNSTXhFek1ERkJFU01STXdNblBnTXpNaDRDRlJFakVUUW1KaU1pRGdJQlJybXZJazBCUUhTaFlsQ0FXekM2TW1CR1JYRlJMUU5UL0swRU92NE1BMis5akUwclhwVnIvVHNDeDFWbkx6cG1nd0FBQWdCYy8rd0VOUVJPQUJVQUt3QVF0eHdSQzNJbkJnZHlBQ3N5S3pJd01WTTFORDRDTXpJZUFoVVZGQTRDSXlJdUFqY1ZGQjRDTXpJK0FqVTFOQzRDSXlJT0FseEVnTFp4Y3JlQlJFU0J0WEp5dG9GRXVTWk5kRTFNYzB3bkowMXpUVXh6VFNZQ0VSZDF5WlZUVTVYSmRSZDF5SlZUVTVYSWpCZFJqMjQvUDI2UFVSZFFqMjlBUUcrUEFBQURBSXorWUFRZkJFNEFCQUFhQUM4QUdVQU9JUllIY2lzTEMzSURCbklDRG5JQUt5c3JNaXN5TURGQkVTTVJNd0VWRkE0Q0l5SXVBaWMxUGdNek1oNENCelUwTGdJaklnNENCeEVlQWpNeVBnSUJScnFxQXVrNGE1eGxaNTV1UVF3TVFtMmNabWFlYkRlNklrZHVURVpuU0MwTEZFaDRXMHR0UnlJRGF2cjJCZHI5N0JWMnlaUlNSSUsyY25CNHZvZEhUNUxMa1JWUmoyMC9NRkZuTi83OVJudExQMjZQQUFBREFGLytZQVB3QkU0QUJBQWFBQzhBR1VBT0lSWUxjaXNMQjNJRURuSURCbklBS3lzck1pc3lNREZCRVRjekVRRTFORDRDTXpJZUFoY1ZEZ01qSWk0Q054VVVIZ0l6TWpZMk56VXVBeU1pRGdJRE5oQ3EvRzg2Y0o5bVpwdHRRQXdMUUcyZFoyU2ZienU2SWtkdFMxeDdTaFFMTDBwcFJreHVSeUwrWUFVSzBQb21BN0VWZk11U1QwZUh2bmhjZDc2R1IxS1V5WXNWVVk5dVAxQ0RTL0UzYUZNeFFHK1FBQUFDQUkwQUFBS1lCRTRBQkFBV0FCbEFEUVlKQ1FVVUIzSURCbklDQ25JQUt5c3JNaklSTXpBeFFSRWpFVE1sQnlZbUl5SU9BZ2NITkQ0Q016SVdBVWE1dEFGWEFSY3BHa0JpUkNjR05DZFNmMWdVTkFPUS9IQUVPZ2FzQlFNb1NHTTdIbUtzaFVzSkFBRUFYLy9zQTd3RVRnQTFBQmRBQ3hzQURqSXBDM0lYRGdkeUFDc3lLeklST1Rrd01VRTBKaVluTGdNMU5ENENNeklXRmhVak5DWW1JeUlHQmhVVUhnSVhIZ0lWRkE0Q0l5SW1KalV6SGdJek1qWTJBd01qYTJ0YWtXVTJPV21VVzRLNFlyazFaVWxOWHlzVk5tSk1oYXhVTzIrWlg0L0dacm9FVUhRNVRHYzJBUjhvUlRrVkV6UktaRU5BY2xneVhKbGRMVlU0TDBnb0hpOG5JaEVlVkhwWFIzWlZMMmFpV2t4WkpTaEdBQUlBQ2Yvc0FsY0ZRUUFEQUJVQUUwQUpDaEVMY2dRQ0F3WnlBQ3N5THlzeU1ERkJGU0UxRXpNUkZCWVdNekkyTnhjR0JpTWlKaVkxQWxMOXQ4YTVJallmRnpNTkFSWkhNa1J5UXdRNmpvNEJCL3ZMTnpnU0NRT1hCdzAyZjJ3QUFBSUFpZi9zQTkwRU9nQUVBQnNBRlVBS0FSRUdjaGdEQXdzTGNnQXJNaTh5S3pJd01XVVJNeEVqRXpjVURnSWpJaTRDTlJFekVSUWVBak15TmpZREk3cXhHazB0WktKMFQ0TmVNN2toT1VjbWRvbzkrZ05BKzhZQjNnSnN0NFpMTG1DYWJBSzYvVVJKWHpjV1c1c0FBZ0FoQUFBRHV3UTZBQVFBQ1FBWFFBc0FCZ2dCQ1FaeUF3Z0tjZ0FyTWlzeUVqazVNREZsQVRNQkl3TUJGeU1CQWRZQktMMytlM3piQVRFVmZQNTRwd09UKzhZRU92eG9vZ1E2QUFRQUt3QUFCZE1FT2dBRkFBb0FEd0FWQUNSQUZBY0xBQkVERkFZSkVBd0JDZ1p5RWc0RUNRcHlBQ3N5TWpJck1qSXlFaGM1TURGbEFUTUhBU01ERXhjakFRRVRNd0VqQXdFWEl3RW5BWjhCRm5vWS91VjNvZTBSZmY3R0JBN2l1UDdHZk5NQkVCOTIvdDBZd0FONnNmeDNCRHI4ZkxZRU92eURBMzM3eGdRNi9KWFBBNHV2QUFBQkFDb0FBQVBMQkRvQUN3QWFRQTRIQkFvQkJBa0RDd1p5QmdrS2NnQXJNaXN5RWhjNU1ERkJFeE16QVFFakF3TWpBUUVCQ3UzdzJmNmVBVzNXK3ZyWEFXeitud1E2L25ZQml2M3EvZHdCbHY1cUFpUUNGZ0FBQWdBVy9rc0RzQVE2QUJNQUdBQVpRQTBYRmhVRENBSVlCbklQQ0E5eUFDc3lLeklTRnprd01XVUJNd0VPQXlNaUppY25GaFl6TWpZMk53TUJGd2NCQWIwQkxjYitUZzh4VEd0S0ZrUU9BUWdqQno5WVBSYVFBUmt3aGY1eWNBUEsreDhvWFZRMURBU1dBUU1oVFVNRW5QeTR3MFFFVHdBQUF3QlpBQUFEc3dRNkFBTUFDUUFOQUJ4QURRUU1EQWtOQm5JSEF3TUdBaElBUHpNekVUTXJNaklSTXpBeFpSVWhOUUVCSXpVQk15TVZJVFVEcy96dEF2YjlOSEVDeDNaUy9SMlltSmdESC94SmlBT3ltWmtBQUFJQVFQNlNBcDhHUFFBUkFDVUFHVUFLSFFrS0Nod2NFaE1CQUFBdk1pOHpPUzh6RWprNU1ERkJGd1lHRlJVVUJnWWpOVEkyTlRVME5qWVRCeTRDTlRVMEppWWpOVElXRmhVVkZCWVdBbmduZDFwUnI0NXhZMEdicnllSW0wRXNYVXVPcjFFbld3WTljaVcvZTg5a28yQjZnRzNQYWJlTCtPNXpKNHEzYWM1SmFqdDZZS05semxLTVp3QUFBUUN3L3ZJQlJRV3dBQU1BQ2JJQUFnRUFMejh3TVVFUkl4RUJSWlVGc1BsQ0JyNEFBZ0FVL3BJQ2N3WTlBQk1BSmdBYlFBc2VDd29LSHg4QkZSUUFBUUF2TXk4ekVqa3ZNeEk1T1RBeFV6Y2VBaFVWRkJZV014VWlKaVkxTlRRbUpnTW5QZ0kxTlRRMk5qTVZJZ1lWRlJRR0JoUW5pWnRBTEYxTGpiQlJKbHNwSjA5YkoxR3dqWEJrUUpzRnkzSW1pN2RwejBock9uRmJuMlRQVW8xbitPQnpHV2VNVXM1bG5sdHdnVzNPYWJlS0FBRUFnd0dUQk84REl3QWZBQnRBQ3d3QUFCWUdnQndHRUJBR0FDOHpMeEV6R2hETk1pOHlNREZCTnhRT0FpTWlKaWNtSmlNaUJnWVZCelErQWpNeUZoY1dGak15TmpZRVY1Z3ZWM2RIVjRWT00xWXlNMGdub1M5V2QwZFlpVWszVXpFMFRTc0RDUUZOaUdjN1JrUXZOREZhUHdKT2htUTNTa0V5TVRaZ0FBSUFpLzZYQVdZRVRRQURBQThBRExNQkJ3MEFBQzh2M2M0d01WTVRNeE1URkFZaklpWTFORFl6TWhhZERxY09CamMyTlRrNU5UWTMvcGNFRmZ2ckJVMHNQajRzTEQwOUFBTUFhZjhMQS9vRkpnQURBQWNBTHdBbFFCSUNBU1VsSVFNY0IzSUhCQWdJREFZUkRYSUFLODNNTXhJNU9Tdk56RE1TT1Rrd01VRVJJeEVURVNNUk56STJOamN6RGdJaklpNENOVFUwUGdJek1oWVdGeU11QWlNaURnSVZGUlFlQWdLZXVycTZaMEp3U0FXd0JYaS9jM3EyZHpzN2VMVjZmNzV0QmJBRlFXOUtWWE5ESFJ4RGN3VW0vdUFCSVBzRS91RUJIMW8yWHoxZ3BXVldsc050S20zRGxsWm5zWEJEYkVGRGNZbEhLa2VLY0VNQUFBTUFXd0FBQkdnRnhBQURBQWNBSWdBaFFCQUdCUVVCSHhZRmNnd05EUUlDQVF4eUFDc3lFVE1STXlzeUVUa3ZNekF4WVNFMUlRRWhOU0VCRXhZR0J5YytBalVETkRZMk16SVdGaFVqTkNZbUl5SUdCZ1JvKy9jRUNmNlQvV0FDb1A2NEZnRTRPSzRqS1JFV2RNbC9nN2hpd0VOc1BrSnJQNTBCMHAwQkEvMkRYcU1wTlFsVGJDd0Nmb3JEYUdLdmRGUm1Ma0Y5QUFZQWFmL2xCVnNFOFFBVEFDY0FLd0F2QURNQU53QU90UThaQlNNTmNnQXJNaTh6TURGQkZCNENNekkrQWpVMExnSWpJZzRDQnpRK0FqTXlIZ0lWRkE0Q0l5SXVBZ0VISnpjQkJ5YzNBU2MzRndFbk54Y0JPRUowbVZoWW1YUkJRWFNaV0ZpWmRFS3NYYVBZZTN2WXBGeGNwTmg3ZTlpalhRVFB5b1RLL04vS2c4b0RwTXFFeXZ2WXlvUEtBbUJlcG4xSFIzMm1YbCtrZlVaR2ZhUmZoZVNxWDErcTVJV0Y1S3RnWUt2a0FvM09pYzc3dzg2SXpmNnF6b2pOQXl6T2lNNEFCUUFQQUFBRUpBV3dBQU1BQndBTUFCRUFGUUF0UUJZTEVCQUdCeElWRlFnT0F3TUNBaEVVREhJSkVRUnlBQ3N5S3hJNUx6TVNPVGt5RVRQT01qTVJNekF4UVJVaE5RRVZJVFVsQVRNQkl3RUJCeU1CQVJFakVRTzcvTDBEUS95OUFXZ0JiOVgrVDN2KzhBRnhIWHIrVFFKbndBTGhmWDMrM1h4ODNBTVcvS3dEVlB6ak53TlUvVmI4K2dNR0FBSUFsUDd5QVUwRnNBQURBQWNBRGJRQkFnWUhBZ0EvM2Q3Tk1ERkJJeEV6RVJFakVRRk51Ym01L3ZJREdBT20vUW9DOWdBQ0FGditFUVI1QmNVQUx3QmhBQjVBRTFNL0FBRUZLMTAxTVRBUElReFBSQjBVRVhJQUt6SXZNeGM1TURGbE5USTJOalUwTGdJbkxnTTFORDRDTXpJV0ZoVWpOQ1ltSXlJR0JoVVVIZ0lYSGdNVkZBNENBUlVpQmdZVkZCNENGeDRERlJRT0FpTWlMZ0kxTnhRZUFqTXlOalkxTkM0Q0p5NEROVFErQWdLN1UzUStJMUtLWm0ycmR6NUZnTFJ3bWR4MnVVZUlZMm1HUVI5TWlXbHdybmcvUDNXbC91MVRiRFFmVG90cmI2eDJQa1dBczI5Z3VwZFp1VHhqZHp0Z2gwY2lVSWhsYmE1NFFEeHdubXgyTkZ3NkwwYzdOeDhlUlYrRlhWT0hZRFJrd0l0TmYwczZZRG95U0RnekhSOUhYNFpkVEhoVExBTCtlVFJhT2pKSk9qUWVIMFpkaEYxWGlGNHhMR1NtZVFKUGJVQWRPR0E4TDBVNU5oNGVSMkNIWFVwM1ZDNEFBZ0JsQlBFQzd3WEdBQXNBRndBT3RBTUpDUThWQUM4ek15OHpNREZUTkRZek1oWVZGQVlqSWlZbE5EWXpNaFlWRkFZaklpWmxPRFUyT0RnMk5UZ0JyemMyTlRrNU5UWTNCVnN0UGo0dEt6MDlLUzArUGkwclBUMEFBd0JjLytzRjV3WEVBQjhBTXdCSEFCOUFEaDBFQkNVbFF4UU5EUzh2T1FOeUFDc3lFVE1STXk4ekVUTVJNekF4UVRNVUJpTWlKaVkxTlRRMk5qTXlGaFVqTkNZaklnWUdGUlVVRmhZek1qWWxGQjRDTXpJK0FqVTBMZ0lqSWc0Q0J6UVNOaVF6TWdRV0VoVVVBZ1lFSXlJa0pnSUR6cEt6bVdxYlZWV2JhcG0wa2w5Y1Fsb3VMbHBDWEY3OUFWeWsySHQ3MTZOY1hLUFhlM3ZZcEZ4emJzUUJBWk9UQVFIRGJtN0QvditUay83L3hHNENWcDJkWXE1emMzT3VZcHlkWTFaQ2RVdDBUSFZDVnVlRjVxeGdZS3ptaFlia3ExOWZxK1NHbndFUXkzRnh5Lzd3bjUvKzhNMXljczBCRUFBQUFnQ1RBclFERUFYRkFCY0FNUUFhdFRFYUdnMFdLcmdCQUxJSURRTUFQek1hM01RU09TOHpNREZCRVRRbUppTWlCaFVuTkRZMk16SVdGaFVSRkJZWEl5WVRGeU1pQmdZVkZCWXpNalkyTlJjT0FpTWlKalUwTmpZekFsTWJOeXBGVDZGTmkxMVdnVWdNRHFVWUtBR1ZQRThtUFVBclZ6b1NEejlqUkhpQlM1ZHhBMTRCVkNzOEh6VTBEVVJwUEQ1NlhQN0dNVmdzU3dGd2J5QTBJQ3N5SnpnWmNDQkVMWHRuU21jMi8vOEFaUUNXQTJVRHNnUW1BWkw1L1FBSEFaSUJSUC85QUFJQWZ3RjRBNzRESVFBREFBY0FFcllHQndNR0FnSURBQzh6RVRNU09TOHdNVUVWSVRVRkVTTVJBNzc4d1FNL3VRTWhvcUpML3FJQlhnQUVBRnYvNndYbUJjUUFIZ0F2QUVNQVZ3QTFRQnNmR3hnZ0JBSUNBUUVQS1EwTk5UVlREQThQU1ZNVGNqOUpBM0lBS3pJckVqa3ZNeEV6RVRNdk14STVmUzh6RWhjNU1ERkJJeWN6UGdJMU5DWW1JeU1SSXhFaE1oWVdGUlFHQmdjaUJpTU9BaU0zTWhZVkZSUVdGeFVqSmlZMU5UUW1KUlFlQWpNeVBnSTFOQzRDSXlJT0FnYzBFallrTXpJRUZoSVZGQUlHQkNNaUpDWUNBenZhQXNzcVNTMGlUMFNJalFFVlk1Qk9NbUJGQXdjREVRa0pIaFNiY1FnSmtRb0RRLzFOWEtUWWUzdlhvMXhjbzlkN2U5aWtYSE51eEFFQms1TUJBY051YnNQKy81T1Qvdi9FYmdLUGdBRWNOU2N5T2hyOUx3TlFPSEZXTmxZK0V3MEtDUUphZzJRMkpVTVhFQnBnRmpSSlJVcUY1cXhnWUt6bWhZYmtxMTlmcStTR253RVF5M0Z4eS83d241Lys4TTF5Y3MwQkVBQUJBSThGRndNdUJhVUFBd0FJc1FNQ0FDOHpNREZCRlNFMUF5NzlZUVdsam80QUFnQ0RBOEFDZlFYRkFBOEFHd0FQdFJNTXdCa0VBd0EvTXhyTU1qQXhVelEyTmpNeUZoWVZGQVlHSXlJbUpqY1VGak15TmpVMEppTWlCb05HZEVWRmNrUkVja1ZGZEVaOFRUWTJTVWsyTmswRXdVZDJSMGQyUjBkMVJVVjFSemRLU2pjNFRFd0FBd0JoQUFFRDlRVHpBQU1BQndBTEFCSzNDd0lEQXdRS0VuSUFLeTg1THpNeU1ERkJGU0UxQVJFakVRRVZJVFVEOWZ4c0FpbW5BZWo4dlFOWG1KZ0JuUHd1QTlMN3BaZVhBQUFCQUVJQ213S3JCYnNBSEFBVHNSd0N1QUVBc3dzVEEzSUFLeklhekRJd01VRVZJVFVCUGdJMU5DWWpJZ1lWSXpRMk5qTXlGaFlWRkFZR0J3Y0NxLzJxQVNBdE5CZEFPMHRIbmtpR1hscUFSQzlXTzY4REc0QnNBUThxUWpVV01ENU1PVWgyUnpwcFNUVmNYRFdTQUFJQVB3S1FBcHNGdXdBWkFETUFMRUFNSEJnQUFCb2FFQ3dwS1NRUXVBRUF0UXNMQ0JBRGNnQXJNakl2R2hETU1pOHlFVGt2TXhJNU9UQXhRVE15TmpZMU5DWWpJZ1lWSXpRMk5qTXlGaFlWRkFZR0l5TVZOVE15RmhZVkZBWUdJeUltSmpVekZCWXpNalkxTkNZbUl3RUtWREZBSVVCRk9VdWRUSUpRVjRSS1FYdFliMjlrZ0Q1UWkxZExpVmFkVUVKR1NTZEhNUVJtSERFZ0xEd3lLMFJqTmpOa1NUVlpOU1ZPTUZwQVNXZzJNV2hSTFQwK01Tb3pGd0FBQVFCN0JOb0NIQVlBQUFNQUNySUJnQUFBTHhyTk1ERlRFek1CZThMZi92UUUyZ0VtL3RvQUFBTUFtLzVnQSs0RU9nQUVBQm9BSGdBWlFBd2RCUUFXQ3hOeUF4SnlIQUFBTHpJckt6SVJPUzh3TVVFekVTTW5OemNVRGdJaklpWW1Kd016RkI0Q016SStBZ0V6RVNNRE5ibW5FaUZGS1ZhR1hreDNWUndsZENJOVVDNVpjMEFhL1VXNHVBUTYrOGI2L1FKeXdJNU9KMVZFQVNGbmdrWWFOMlNJQXBUNkpnQUFBUUJFQUFBRFFRV3dBQXdBRHJZREN3SnlBQkp5QUNzcnpUQXhZU01SSXlJbUpqVTBOall6SVFOQnVsZWYzSEZ4M0o4QkVRSUllZFNIaHRSNkFBQUJBSlFDYkFGNUEwa0FDd0FJc1FNSkFDOHpNREZUTkRZek1oWVZGQVlqSWlhVU9qZzRPenM0T0RvQzJTOUJRUzh1UHo4QUFRQjAvazBCcWdBQUFCTUFFYllMQ29BVEFnQVNBRDh5TWhyTU1qQXhjek1IRmhZVkZBNENJeWN5TmpZMU5DWW1KNWlGRERwZkoweHhTd2N1U3kwaVJ6ZzFDa3hYTDAwM0htc1VMQ01oSmhNRUFBRUFld0tiQWU4RnNBQUdBQXF6QmdKeUFRQXZLekF4UVJFakVRYzFKUUh2bk5nQllnV3cvT3NDV1RtQmRBQUNBSHNDc3dNbkJjVUFFUUFqQUJDMkZ3NGdCUU55RGdBdkt6SVJNekF4VXpVME5qWXpNaFlXRlJVVUJnWWpJaVltTnhVVUZoWXpNalkyTlRVMEppWWpJZ1lHZTFTWmFXcVpVMU9ZYVdxYVZLTW5VVDA4VHljb1R6MDhVQ2NFRTFGbm4xdGJuMmRSWjU5YVdwKzRVVDFnT0RoZ1BWRThZRGc0WUFELy93Qm5BSmtEZVFPMUJDWUJrdzBBQUFjQmt3RnFBQUQvL3dCVkFBQUZrZ1d0QkNjQjF2L2FBcGdBSndHVUFSZ0FDQUFIQWpBQzFnQUEvLzhBVUFBQUJja0ZyUVFuQVpRQTdBQUlBQ2NCMXYvVkFwZ0FCd0hWQXg0QUFQLy9BSEFBQUFYdUJic0VKd0dVQVpjQUNBQW5BakFETWdBQUFBY0NMd0F4QXBzQUFnQkUvbjREZVFST0FDRUFMUUFZUUFvQUFDVWxLeEFSRVEwV0FDOHpNeTgvTXk4ekx6QXhRVE1PQWdjT0FoVVVGaFl6TWpZMk5UTU9BaU1pSmlZMU5EWTJOejRDRXhRR0l5SW1OVFEyTXpJV0FaTzZBU0ZKUGlwTU1EUmtTRHRtUWJrQmJibDBncmRoU1hBOEpDY1B3amcxTmpnNE5qVTRBcWhnZDJSRExWUmtSVWxrTXl4YlJYR2xXRnFxZUZ1YmhUb2pUVmdCYml3K1Bpd3NQVDBBQUFiLzhRQUFCMWdGc0FBRUFBZ0FEQUFRQUJRQUdBQXhRQmdBRnhjSUJ4UVRCeE1IRXdJTkF4Z0NjZ3dMQ3c0Q0NISUFLekl5RVRNck1qSVJPVGt2THhFekVUTXlFVE13TVVFQkl3RXpFeFVoTlFFVklUVURFeU1EQVJVaE5RRVZJVFVEeXYwSzR3TnhkNEw5R1FYay9TTWFQYm85QXlMOWlnTEgvU1FGRy9ybEJiRDhZSyt2L29pWW1BVVkrbEFGc1AyU21KZ0NicGlZQUFBQ0FGa0F6Z1BlQkdRQUF3QUhBQXl6QkFZQ0FBQXZMek15TURGM0p3RVhBd0UzQWRCM0F3dDNkUHoxZHdNTHpuc0RHM3o4NWdNYWZQemxBQUFEQUhmL293VWRCZXdBQXdBYkFETUFGMEFMQVFBdkNpTVdBM0lLQ1hJQUt5c3lFVE15TXpBeFFRRWpBUk1WRkFJR0JpTWlMZ00xTlRRU05qWXpNaDREQnpVMExnTWpJZzRDRlJVVUhnTXpNajRDQlIzOEZvOEQ3WGxTbXRlRlo3U1JhRGRWbk5lQmFyV1FaVGEvSWtKZ2ZFdGFrV2M0SkVWaGVraGVrbVUwQmV6NXR3WkovUnBjcFA3OHRtQStkNnZiZzF5a0FRTzNZRDUzcTl2ZlhtaXBnbGd0Um9qSWdsNXBxb05ZTFVhSnlRQUFBZ0NuQUFBRVhRV3dBQU1BR1FBZFFBNFBEZzRER1FRRUF3QUNjZ01JY2dBckt4RTVMek1ST1M4ek1ERlRNeEVqRXlFeUZoWVZGQVlHSXlFMUlUSTJOalUwSmlZaklhZTV1VjBCY3A3WmNIRFpudjdCQVQ5c2hUMDloV3orNkFXdytsQUVpMjdBZTNyQWJwZFBmRVJHZmxBQUFRQ00vK3dFYWdZU0FEa0FHVUFOSXhzMkNBSUtjZ2dCY2hzTGNnQXJLeXNSTXhFek1ERkJFU01STkQ0Q016SVdGaFVVRGdJVkZCNERGUlFHQmlNaUppWW5OeFlXTXpJMk5qVTBMZ00xTkQ0Q05UUW1KaU1pQmdZQlJMZzVhSkJZYmFsaUp6SW5SbWhwUm1PdWNEWjRZeG9xSTRWR1RtRXNSbWhwUmlvMktqSldOMFZpTkFSWSs2Z0VXRzZsYnpoSWxYUlFhMUZPTXpkWFVGcHlUWEtXU1JVaEVwc1dOakJRTVRsWFVWcDJVVHhjVVZrNVExa3VQb0VBQXdCUC8rc0dmUVJQQUJRQU1nQmVBRGRBSEZjek16SVhSa1VVSlFBREtSZEZGMFVQSHlrTGNrdytQZ1VQQjNJQUt6SXlFVE1yTWhJNU9TOHZFaGM1RVRNUk16SVJNekF4WlJFMEppWWpJZ1lHRlNjMFBnSXpNaFlXRlJFREZTRWlCZ1lWRkJZV016SStBamNYRGdJaklpWW1OVFErQWpNQklpNENOVFUwUGdJWE1oNENGUlVoTlNFMU5DWW1JeUlPQWhVVkZCNENNekkyTnhjT0FnTHRNV0JGU200OHVENXhuV0Iyc1dPTC92dFhkand0VzBZMmNWODdBV0FiZGJkL2NwOVNPWEdvYmdMZ2U3eUFRa1Y5cUdOc3BYQTUvTndDYWpKd1hrVnFTU1ltVUgxWGQ1SXlRUlpobXJjQ0dVaG5OelJXTkJKR2RsZ3dWcXFBL2d3Qm9vdzNXVFF3VFMwcFFVZ2ZrREZrUTFDVFlrOTdWUzM5YjFDUnhuWXNkOFdRVHdGRGY3UndkbzRmVEg1TlBHcU1VQ3hSaldzOFNTS0lFVHN2QUFJQWZ2L3NCQzRHTFFBMEFEZ0FHVUFMTmlBV0ZnRXFEQXR5T0FFQUx6TXJNaEk1THpNek1ERlROeFlFRmhJVkZSUU9BaU1pTGdJMU5ENENNeklXRmhVbk5DNENJeUlPQWhVVUhnSXpNajRDTlRVMEFpWW1KUUVuQWY4NXFRRVd5bTFGZnF0bWFhOS9SVU41bzJGeHRXcEZKRWRzU0VseVRpa25TMjFIUVdaSkptT3Y0d0pkL2VkSkFoa0ZqYUFtcFBQK3hyMWllOHlVVUV1R3NXWjB1NGRJYTZkYkFTRktRU2d5WFlSVFBuZGhPajF0azFaa3NBRUl2bnNkL3BKa0FXMEFBd0JIQUt3RUxRUzZBQU1BRHdBYkFCTzNHUk1DQncwREFoSUFQOTNHTWhER01qQXhRUlVoTlFFME5qTXlGaFVVQmlNaUpoRTBOak15RmhVVUJpTWlKZ1F0L0JvQmh6bzRPRHM3T0RnNk9qZzRPenM0T0RvREVMaTRBVG93UUVBd0xqOC8vUDR2UVVFdkxrQkFBQUFEQUZ6L2VRUTBCTGtBQXdBWkFDOEFHVUFNSUFFQkZRdHlLd0FBQ2dkeUFDc3lMeklyTWk4eU1ERkJBU01CQVRVMFBnSXpNaDRDRlJVVURnSWpJaTRDTnhVVUhnSXpNajRDTlRVMExnSWpJZzRDQTlmOWFYc0NsLzBBUklDMmNYSzNnRVJFZ0xWeWNyYUJSTGttVFhSTlRITk1KeWROYzAxTWMwMG1CTG42d0FWQS9WZ1hkY21WVTFPVnlYVVhkY2lWVTFPVnlJd1hVWTl1UHo5dWoxRVhVSTl2UUVCdmp3QURBSlgrWUFRb0JnQUFBd0FaQUM4QUcwQVBLd29nRlFkeUNndHlBd0J5QWc1eUFDc3JLeXN5RVRNd01VRVJJeEVCRlJRT0FpTWlMZ0luTlQ0RE16SWVBZ2MxTkM0Q0l5SU9BZ2NSSGdNek1qNENBVSs2QTVNNGE1eGxaNTV1UVF3TVFtMmNabWFlYkRlNklrZHVURVpuU0MwTER5OUhaVVZMYlVjaUJnRDRZQWVnL0NZVmRzbVVVa1NDdG5Kd2VMNkhSMCtTeTVFVlVZOXRQekJSWnpmKy9UVmdTeXcvYm84QUFBUUFYLy9zQkswR0FBQUVBQm9BTHdBekFCMUFEeUVFQkJZTGNqTXlLd3NIY2dFQWNnQXJLekxPTWlzeUx6SXdNV1VSTXhFakFUVTBQZ0l6TWg0Q0Z4VU9BeU1pTGdJM0ZSUWVBak15TmpZM05TNERJeUlPQWdFVklUVURON3FxL1JnOWNaMWhacGxyUGd3TFAydWFaMStkY1QyNklVWnNTMXgzU0JRTUxVZG5Sa3h0UmlFRGxQMkQwZ1V1K2dBQ0VSVjh5NUpQUjRlK2VGeDN2b1pIVXBUSml4VlJqbXc5VG9CTDhUZG5VVEEvYlk4QzhwaVlBQUFFQUI0QUFBV0pCYkFBQXdBSEFBc0FEd0FmUUE4REFvQUhCZ1lLREFzQ2NnMEtDSElBS3pJck1oRTVMek1hekRJd01VRVZJVFVCRlNFMUV4RWpFU0VSSXhFRmlmcVZCRHo4N0I3QUJGL0JCSStQai82dm5aMENjdnBRQmJENlVBV3dBQUVBbkFBQUFWVUVPZ0FEQUF5MUF3WnlBZ3B5QUNzck1ERkJFU01SQVZXNUJEcjd4Z1E2QUFBREFKc0FBQVJBQkRvQUF3QUpBQTBBSDBBUERBY0hDd1lHQWdrREJuSUtBZ3B5QUNzeUt6SVJPUzh6TXhFek1ERkJFU01SSVFFakp6TUJFd0UzQVFGVXVRT0IvZW52SExZQmpCcitVWGNDSWdRNis4WUVPdjJVb2dISys4WUI2b2I5a0FBQUF3QWpBQUFFSEFXd0FBTUFCd0FMQUJ0QURRSUtBQWNHQmdvTEFuSUtDSElBS3lzUk14RXpNaEV6TURGQkZRVTFBUlVoTlJNUkl4RUNjUDJ6QS9uOUp5YkFBNkI5dTMzOXVKMmRCUlA2VUFXd0FBSUFJd0FBQWdzR0FBQURBQWNBRTBBSkFnWUFCd0J5QmdweUFDc3JNaEV6TURGQkZRVTFBUkVqRVFJTC9oZ0JTYmtEb25xN2VnTVorZ0FHQUFBQUF3Q2kva3NFOFFXd0FBTUFCd0FaQUIxQURoVU9CZ2NIQXdoeUNRVUVBQUp5QUNzeU1qSXJNaEV6THpNd01WTXpFU01UTndFSEVUTVJGQVlHSXlJbUp6Y1dGak15TmpZMW9zSEJPb2NEVklmQlQ1Sm1IelllRGhGQ0R5dzlJQVd3K2xBRlBuTDZ3bklGc1BuOGNwMVNCd3FhQmdjdlZ6MEFBZ0NTL2tzRDhRUk9BQVFBS2dBWlFBNGNGUTl5SmdzSGNnTUdjZ0lLY2dBckt5c3lLekl3TVVFUkl4RXpBd2MwUGdJek1oNENGUkVVQmdZaklpWW5OeFlXTXpJMk5qVVJOQzRDSXlJT0FnRkx1YVltS2pocW1XQlVpRjh6VFpGbEh6VWVEaEJHRGl3OUlSODlWemxUZDB3a0ExUDhyUVE2L2dZQ2M4R09UakJsb0cvOC9YQ2NVQWNLblFZR0tsTTlBd0JMWnowY09tYUdBQVVBYWYvckJ3a0Z4UUFqQUNjQUt3QXZBRE1BTTBBYUx5NHVKaklvTXdKeUtTY21DSElWRWhJV0dRa0VCd2NEQUFNQVB6SXlFVE0vTXpNUk15c3lNaXN5TWhFNUx6TXdNVUV5RmhjVkppWWpJZzRDRlJFVUhnSXpNalkzRlFZR0l5SXVBalVSTkQ0Q0FSVWhOUk1SSXhFQkZTRTFBUlVoTlFLVVRaWkRRcFZQVllsaE16UmlpVlZPbFVGRGxFMTh6WlJRVUpQTUJQSDgvU2ZCQXpmOVl3TDUvUWNGeFEwSW5nd1BPWENsYmY3T2JhWnhPUThNbmdjT1Y1L2JoQUV3aE51ZlYvclluWjBGRS9wUUJiRDlqcDJkQW5LZW5nQURBR0gvNndjQUJFOEFLZ0JBQUZZQUowQVRKQUFBUnp3VEVoSThVaGtMQ3pFSGNqd0xjZ0FyS3pJUk16SVJPUzh6RVRNekVUTXdNVVVpTGdJMU5UUStBaGN5SGdJVkZTRTFJVFUwSmlZaklnNENGUlVVSGdJek1qWTNGd1lHQVRVMFBnSXpNaDRDRlJVVURnSWpJaTRDTnhVVUhnSXpNajRDTlRVMExnSWpJZzRDQldOd3RZQkZTNEduVzNDbWJUYjg1d0pnTm5GWlBXVktLQ1pOY2t0dWxUSkpNYnI2YTBKOXNuRnp0SDFCUVgyemNuS3pmVUs2SkVsd1RVMXdTU1FrU25GTlRIQkpJeFZRa2NaMkxIZkZrRThCUjRHd2FucVhHa2w5VFR4cWpGQXNVWTFyUEQ4dGZqQldBaVlYZGNtVlUxT1Z5WFVYZGNtVlUxT1Z5WXdYVVk5dlB6OXZqMUVYVUk5dlFFQnZqd0FBQVFDaEFBQUNnd1lWQUJFQURyWU5CZ0Z5QVFweUFDc3JNakF4WVNNUk5EWTJNeklXRndjbUppTWlCZ1lWQVZxNVVwZHBKVVlsR0JFdEhUdFJLZ1NzZGFGVERBbU9CUVl5WFVJQUFBRUFYdi9zQlJJRnhBQXNBQnRBRFE4QUJna0pBQm9pQTNJQUNYSUFLeXN5RVRrdk14RXpNREZGSWk0Q05UVWhGU0VWRkI0Q016SStBalUxTkM0Q0l5SUdCeWMrQWpNeUZoWVNGUlVVQWdZR0FybVU0cGhOQkQ3OGd5dGduWEppbUdrMk5YQ3dmSUt3T3k4WWFxZHpuL1duVmwybDJoUmNydldZZkpVaVhhSjVSVlNWeEhCZWNjU1ZWRGdjanhBd0pXZTcvditiWHB2Ky83dGxBQUgvNC81TEFyMEdGUUFuQUNsQUZSUUNBaFVuQm5JZklpSWVHd0Z5Q3c0T0NnY1BjZ0FyTWpJUk15c3lNaEV6S3pJeUVUTXdNVUVWSXhFVUJnWWpJaVluTnhZV016STJOalVSSXpVek5UUTJOak15RmhjSEppWWpJZ1lHRlJVQ1lNdE5rR1VmTkIwT0QwVU9LejBocTZ0Um1Ha2tSeVFXRXpNZE8wNG1CRHFPKy90d25GQUhDcFFHQnk5WVBRUUZqbkoxb1ZNTUNaSUZCUzliUW5JQUF3Qm0vK3dGblFZNEFBa0FJUUE1QUIxQURnVUdCaWtwQUFBY0EzSTFFQWx5QUNzeUt6SXZNaEU1RVRNd01VRXpGQVlHSXpVeU5qWVRGUlFDQmdZaklpNEROVFUwRWpZMk16SWVBd2MxTkM0REl5SU9BaFVWRkI0RE16SStBZ1QycDFTcGYwOWRLUU5TbXRlRlo3U1JhRGRWbk5lQmFyYVBaalcvSWtKZ2ZFdFprV2c0SkVWaGUwZGVrbVUwQmppQnRsK0hRSHI5STF5ay92eTJZRDUzcTl1RFhLUUJBN2RnUG5lcjI5OWVhS21DV0MxR2lNaUNYbW1xZzFndFJvbkpBQUFEQUZ6LzdBUzZCTEVBQ1FBZkFEVUFGVUFLSmhzTGNqRUFBQkFIY2dBck1pOHlLekl3TVVFekZBWUdJelV5TmpZQk5UUStBak15SGdJVkZSUU9BaU1pTGdJM0ZSUWVBak15UGdJMU5UUXVBaU1pRGdJRUpaVThqSGhMU1JmOE4wU0F0bkZ5dDRCRVJJQzFjbksyZ1VTNUprMTBUVXh6VENjblRYTk5USE5OSmdTeGJwOVdkRHhzL2FjWGRjbVZVMU9WeVhVWGRjaVZVMU9WeUl3WFVZOXVQejl1ajFFWFVJOXZRRUJ2andBQ0FJei83QVlkQmdJQUNRQWZBQmxBREFVS0NnQUFGUUp5R3hBSmNnQXJNaXN5THpJUk16QXhRVE1VQmdZak5USTJOaVV6RVJRR0JpTWlKaVkxRVRNUkZCWVdNekkyTmpVRmY1NVR0NWRtY1N6K2E4Q1M4WTJVNzR1L1ZKZGtaWmRVQmdLTndHS0hRNFFQL0NlazJtMXQycVFEMmZ3bmNwUklTSlJ5QUFBREFJbi83QVVRQkpFQUNRQU9BQ1VBSFVBT0JRc0xBQUFiQm5JaURnNFZDM0lBS3pJdk1pc3lMeklSTXpBeFFUTVVCZ1lqTlRJMk5nRVJNeEVqRXpjVURnSWpJaTRDTlJFekVSUWVBak15TmpZRWdvNDVqb0ZhVGhMK29icXhHazB0WktKMFQ0TmVNN2toT1VjbWRvbzlCSkZ0bEVweUxXRDh0UU5BKzhZQjNnSnN0NFpMTG1DYWJBSzYvVVJKWHpjV1c1c0FBZiswL2tzQlpnUTZBQkVBRHJZTkJnOXlBUVp5QUNzck1qQXhVek1SRkFZR0l5SW1KemNXRmpNeU5qWTFyYmxOa0dVZk5CME9EMFVPS3owaEJEcjdiWENjVUFjS2xBWUhMMWc5QUFFQVkvL3NBK29FVUFBcUFCbEFEQkVVRkFBWkN3dHlKQUFIY2dBck1pc3lFamt2TXpBeFFUSWVBaFVWRkE0Q0p5SXVBalUxSVJVaEZSUVdGak15UGdJMU5UUXVBaU1pQmdjbk5qWUNBSEMxZ0VWTGdxWmJjS1p0TmdNWi9hQTJjbGc4WlVvcEoweHlTMjJXTWtreXVRUlFVSkhHZGl4MnhwQlBBVWVCc0dwNm1CbElmazQ4YW8xUUxGQ05hejAvTFg0d1ZnQUJBS29FNVFNSEJnQUFDQUFVdHdjRkJRUUJBNEFJQUM4YXpUSTVNaEV6TURGQkV4VWpKd2NqTlJNQ0QvaWFscFdZOVFZQS91OEtxYWtMQVJBQUFBRUFqZ1RqQXZnRi93QUlBQksyQVFhQUJ3UUNBQUF2TWpJeUdzMDVNREZCRnpjekZRTWpBelVCS3BlWG9QNXkrZ1gvcXFvSy91NEJFZ29BLy84QWp3VVhBeTRGcFFZR0FIQUFBQUFCQUlJRXpBTFlCZGNBRGdBUXRRRUJDWUFNQlFBdk14ck1NaTh3TVVFekZBWUdJeUltTlRNVUZqTXlOZ0pDbGtpR1hJdWhsa1JTVUVRRjEwNTVSSlYyTzFwYUFBRUFqZ1R2QVdrRndnQUxBQW15QXdrUUFEOHpNREZUTkRZek1oWVZGQVlqSWlhT056WTFPVGsxTmpjRldDdytQaXdzUFQwQUFBSUFlUVMxQWljR1VRQU5BQmtBRHJRWEJJQVJDd0F2TXhyTU1qQXhVelEyTmpNeUZoVVVCZ1lqSWlZM0ZCWXpNalkxTkNZaklnWjVPV0U5VzN3NVlUMWJmR05CTXpOQlFUTXpRUVdCT2w0NGVsWTZYVFYwV0N4SFJTNHZSMGNBQUFFQU12NU9BWk1BT1FBVkFBNjBDQStBQVFBQUx6SWF6REl3TVdVWERnSVZGQll6TWpZM0Z3WUdJeUltTlRRMk5nRTBTaXRPTWlNcklUUVBEaGxOTzFGdk5YSTVPU0JGVFN3aEtCTUllZzhkWVY0MmFtSUFBUUI3Qk5vRFB3WG9BQmtBSjBBVEFBQUJBUW9TUUE4YVNCSUZnQTBORGc0WEJRQXZNek12TXk4YUVNMHJNakl2TXk4d01VRVhGQVlHSXlJdUFpTWlCaFVuTkRZMk16SWVBak15TmdMQ2ZUcGhQVE5DTkRrcUtqbDlPV0k4SzBFNlBpZ3FPZ1hvQzBsdVBCMGxIVUF2QmtsdlB4MGxIVUVBQWdCZkJOQURMQVgvQUFNQUJ3QU90QUVGZ0FBRUFDOHpHczB5TURGQkV6TUJJUk16QXdGMzVzLys5UDQvcXNiYUJOQUJMLzdSQVMvKzBRQUFBZ0IvL21vQjF2KzBBQXNBRndBT3RBOEpnQlVEQUM4ekdzd3lNREZYTkRZek1oWVZGQVlqSWlZM0ZCWXpNalkxTkNZaklnWi9aMGRGWkdSRlIyZFhNeVFpTVRFaUpEUHpTVjVlU1VsYVdra2lNVEFqSlRJeUFBSDhwd1RhL2tjR0FBQURBQXF5QTRBQ0FDOGF6VEF4UVJNakFmMkd3WjcrL2dZQS90b0JKZ0FCL1c0RTJ2OFBCZ0FBQXdBS3NnR0FBQUF2R3Mwd01VRVRNd0g5YnNMZi92UUUyZ0VtL3RyLy8veUtCTnIvVGdYb0JBY0FwZndQQUFBQUFmMWRCTnIra3daMEFCUUFFTFVVQWdDQUN3d0FMek1hekRJeU1ERkJJeWMrQWpVMExnSWpOekllQWhVVUJnZjkrSVVCTTBBZUdpNDhJZ2RLY1UwbllEb0UycGdERHg4YUZSMFRDR29hTWtVcVRFVUlBQUFDL0NjRTVQOEdCZTRBQXdBSEFBNjBCd09BQkFBQUx6SWF6VEl3TVVFakFUTUJJd016L2dHcC9zL2hBZjZXOXM4RTVBRUsvdllCQ2dBQUFmMDQvcUwrRS85MUFBc0FDTEVEQ1FBdk16QXhSVFEyTXpJV0ZSUUdJeUltL1RnM05qVTVPVFUyTi9ZdFBqNHRLejA5QUFFQXVBVHZBWndHUHdBREFBcXlBSUFCQUM4YXpUQXhVeE16QTdnMnJuUUU3d0ZRL3JBQUF3QnlCUEVEZ3dhSkFBTUFEd0FiQUJsQUNoTVpHUTBCZ0FBQUJ3MEFMek16THhyTkVUTVJNekF4UVJNekF3VTBOak15RmhVVUJpTWlKaVUwTmpNeUZoVVVCaU1pSmdHeE1MeGsvamszTmpVNU9UVTJOd0kyT0RVMk9EZzJOVGdGZ1FFSS92Z21MVDQrTFNzOVBTa3RQajR0S3owOS8vOEFsQUpzQVhrRFNRWUdBSGdBQUFBQkFMSUFBQVF3QmJBQUJRQU90Z0lGQW5JRUNISUFLeXN5TURGQkZTRVJJeEVFTVAxQ3dBV3dudnJ1QmJBQUF3QWdBQUFGZEFXd0FBUUFDUUFOQUJ0QURRWUNCd01DY2cwTURBVUNFbklBS3pJeUVUTXJNaEk1TURGQkFTTUJNd0VCTnpNQkp4VWhOUU1DL2VUR0FtWjVBYS8rQWdaNkFrU1krOVlGS1ByWUJiRDZVQVV3Z1BwUW5aMmRBQU1BWi8vc0JQb0Z4QUFEQUJzQU13QWJRQTB2Q2dNQ0Fnb2pGZ055Q2dseUFDc3JNaEU1THpNUk16QXhRUlVoTlFVVkZBSUdCaU1pTGdNMU5UUVNOall6TWg0REJ6VTBMZ01qSWc0Q0ZSVVVIZ016TWo0Q0E4RDkvQU0rVXByWGhXZTBrV2czVlp6WGdXcTJqMlkxdnlKQ1lIeExXWkZvT0NSRllYdEhYcEpsTkFNcmw1Y2xYS1QrL0xaZ1BuZXIyNE5jcEFFRHQyQStkNnZiMzE1b3FZSllMVWFJeUlKZWFhcURXQzFHaWNrQUFnQXlBQUFGQXdXd0FBUUFDUUFYUUFzR0FBSUhBd0p5QlFJSWNnQXJNaXN5RWprNU1ERkJBU01CTXdFQk56TUJBc3IrTjg4Q0UzNEJjdjR6Q244Q0VnVVIrdThGc1BwUUJSZVorbEFBQXdCNEFBQUVJZ1d3QUFNQUJ3QUxBQnRBRFFFQUJRUUVBQWdKQW5JQUNISUFLeXN5RVRrdk14RXpNREZ6TlNFVkFUVWhGUUUxSVJWNEE2cjhyUUx5L0xzRGxaMmRBcUtkblFKd25wNEFBUUN5QUFBRkFRV3dBQWNBRTBBSkFnWUVCd0p5QmdoeUFDc3JNaEV6TURGQkVTTVJJUkVqRVFVQndQMHl3UVd3K2xBRkV2cnVCYkFBQUFNQVJnQUFCRVFGc0FBREFBY0FFQUFoUUJBT0JnWUhCdzhDY2d3REF3SUNDd2h5QUNzeUVUTVJNeXN5RVRNUk16QXhaUlVoTlFFVklUVUJGUUVqTlFFQk5UTUVSUHhOQTRQOFlBSi8vY2QwQWVIK0gzU2VucDRGRXA2ZS9UWVkvVEtQQWtzQ1I0OEFBd0JPQUFBRmRBV3dBQk1BSndBckFDRkFFQlFWRlFFQUtRaHlIeDRlQ2dzb0FuSUFLODB5TWhFeks4MHlNaEV6TURGbEl5SXVBalUwTmlRek16SWVBaFVVQmdRbE16STJOalUwTGdJakl5SUdCaFVVSGdJQkVTTVJBektqZ3RTWlVwSUJBYW1zZjlLWlZKRCsvUDZ2cFlPcVZEQmZqMSt1ZjZwVkwyQ1NBUlhCc0UrUnlYbWkrSXhQazhoNm92ZUxuMkN2ZGxtUFpqZGhyM2RZajJZMkJHSDZVQVd3QUFJQVdnQUFCU0lGc0FBWkFCMEFHVUFNRkFjSERSd0ljaDBCRFFKeUFDc3lNaXNST1JFek1ERkJNeEVVQmdRakl5SXVBalVSTXhFVUhnSXpNekkyTmpVQkVTTVJCR0RDbmY3dXJ4MS8ySjVZd0R0cWtsY2RlN2xuL3JmQkJiRDk4cmYvaFV1UzFZa0NEdjN5WTVwcU5tQzVoQUlPK2xBRnNBQUFBd0J5QUFBRXpBWEVBQzBBTVFBMUFDVkFFaWdTRWk4cEtUUVJFVE11TWhKeUJoMERjZ0FyTWlzeU1qSVJNek1STXpJUk16QXhRVFUwTGdJaklnNENGUlVVSGdJWEZTNEROVFUwUGdJek1oNENGUlVVRGdJSE5UNERBVFVoRlNFMUlSVUVDVEpnaGxSVGhWNHlLMUJ2UTJ5MWhVcFFsTXQ4ZmMyVVVVbUVzMnBDYlU0cS90a0I0L3V4QWV3QzFuUjFzbms5UFhteWRYU0F4bzFURFkwTmY4WHdmM0tPNmFsY1hLbnBqbkorOE1WL0RvME9VNDNHL2FtZG5aMmRBQU1BWlAvckJIZ0VUZ0FXQUN3QVFRQWFRQTB1QmpRN094MFNDM0lvQmdkeUFDc3lLekl5RVRNL01ERlROVFErQWpNeUhnTVhGUTRESXlJdUFqY1ZGQjRDTXpJK0FqYzFMZ01qSWc0Q0FUTVJGQjRDTXpJMk54Y0dCaU1pTGdJMUVXUTRhNTVtVG4xZ1JDb0pDenhtbEdOa25XdzR1aUJEYTB0SmFFY3ZFQXd0U1dwSlRHdEVJQUkwblF3WEhSQUtFUWNYSHp3Z0wwbzBHd0gxRllEVW0xVXVXWCtpWVZONHY0aElUWXkvaHhWTmhtWTVQR2VFUjBKSmltOUJSSGFiQWRuODdTNDZJUTBFQW9vV0RDTkxlVlVDS0FBQUFnQ2gvb0FFVGdYRUFCd0FPZ0FlUUE0MUFDWW5KeHdjTUIwREV3a0xjZ0FyTWo4ek9TOHpFams1THpBeFFUTXlGaFlWRkFZR0l5SXVBalUzRkJZV016STJOalUwSmlZakl4TXlGaFlWRkFZR0l5TTFNekkyTmpVMEppWWpJZ1lHRlJFakVUUTJOZ0lGazR2RGFIWE5oRTZaZmt0SlZwbGxYSUJETzNKVGoxbUN3R2xxd0lGWlZWaHNNalpyVVVsMlJibDZ5Z000YWJSeWpzZG9MRnVRWXlsSmVrbExnMVJHZzFRREFtU3hjMStkWG5nN2FFTThiRVJCY2tqNlR3V3hiN2R0QUFNQUwvNWZBK0FFT2dBREFBZ0FEUUFaUUE0SURBTUVDZ1VCQlEwR2NnRU9jZ0FyS3pJU0Z6a3dNV1VSSXhFM0FUTUJJd01CRnlNQkFtUzVWd0VndnY1dmUrZ0JLQ2w3L20yRS9kc0NKWGNEUC92R0JEcjh3UG9FT2dBQUFnQmgvK3dFS0FZZEFDd0FRZ0FaUUEwVUtENERCRE1lQzNJTEJBRnlBQ3N5S3pJU0Z6a3dNVk0wTmpZek1oWVhCeVltSXlJR0JoVVVIZ0lYSGdJVkZSUU9BaU1pTGdJMU5UUTJOamNuTGdJVEZSUWVBak15UGdJMU5UUXVBaWNpRGdMZFhLbDJUMzVEQVM2VFVqbFVMaFF5V2tlUHZGMUJmYk54YzdSOVFWeVhXQUZCWFRBK0pFbHhUVXh2U1NNcVRtdENUSEpLSlFUMVc0VklHeDJmRVNvaFBTa1VMakF4R0RHZDE0Y1djY0dQVUZDUHdYRVdkOEtDRlFVYVVHajlXUlpOaUdrOFBHbUlUUlpBZkdwSkRUMXFpUUFDQUdULzdBUHNCRTBBSHdBL0FCOUFEd0FoUGo0REF4WTFLd2R5REJZTGNnQXJNaXN5RWprdk14STVPVEF4UVRNVkl5SUdCaFVVSGdJek1qWTJOVE1VRGdJaklpNENOVFErQWdVaklpNENOVFErQWpNeUhnSVZJelFtSmlNaUJnWVZGQjRDTXpNQ0Rkek5VM0U2STBWalAxRjRRN2hPZ3FGVFlxVjZRemx0bmdGQjNGeVdhems5Y3FCaVdaeDVSTGhEY1VaVmJqVWJPRm8velFKTGJDVk5QU00vTUJ3MlZ6RllnVk1vTEZSNVRFUnBTQ1ZHS2t0aU4wMTFUeWtzVkhaS01FMHRMMHNxSXpzckdBQUNBRzMrZ0FQRUJiQUFLQUFzQUJWQUNSVUNMQ3dwS1FBQ2NnQXJNaTh6RVRNdk1ERkJNeFVCRGdJVkZCNENGeGNlQWhVVUJnWUhKejRDTlRRbUppY25MZ00xTkRZMk53RWhGU0VEY0ZUK29VMXJOeEltUFNxQ1NuVkRPMUVrWWg4ckZ5QkRObHBYZDBvaE9IdGsvcG9ESGZ6akJiQjQvbFpjb3FobU1FWXpJZ3dtRlNkUFVqVnpZeDFWSXp3NUhoY21JQTRZRno1V2RVOUt3TjUzQWRTWEFBQUNBSkwrWVFQeEJFNEFCQUFjQUJkQURCZ0xBd1p5QWdweUN3ZHlFUUF2S3lzckVUTXdNVUVSSXhFekF3YzBQZ0l6TWg0Q0ZSRWpFVFF1QWlNaURnSUJTN21tRTA0NmI1OWtWSWhmTTdrZlBWYzVUM0JISVFOVC9LMEVPdjRHQW5QQmprNG9YcDExKzZzRVVrcGtPeG83YUljQUFBTUFlLy9zQkJJRnhBQVpBQ2NBTmdBZFFCQU5LR293SUdvd01BMEFHbW9BRFF0eUFDc3ZLeEk1THlzck1ERkJNaDRERlJVVURnTWpJaTRETlRVMFBnTVhJZzRDRlJVaE5UUXVBd015UGdNMU5TRVZGQjREQWtaVmpuRlBLU2xPY0k1VlZJNXhVQ29xVDNDT1ZFSm5SU1FDSlJjc1ExYzBObGRDTEJiOTJ4Y3VRMWNGeERGbG05T0h1WWZVbm1nek0yaWUxSWU1aDlPYlpUR1hQbml1Y1RjM1dwUnlUU2o3VnlwUWRaWmFKeWRhbG5WUUtnQUFBUURELy9NQ1RBUTZBQkVBRHJZR0RRdHlBQVp5QUNzck1qQXhVek1SRkJZV016STJOeGNHQmlNaUppWTF3N29pTmg4WE13MEJGa2N5UkhKRUJEcjgyamM0RXdrRGxnY09OMzlzQUFJQUp2L3ZCRHNGN2dBRUFDWUFIa0FRQUJzRUF3UUNJQVVBY2c4V0ZnSUtjZ0FyTWk4ekt6SVNGemt3TVVFQkl3RVhBVEllQWhjQkhnSXpNalkzRndZR0l5SW1KaWNCQXk0Q0l5SUdCeWMyTmdJYi90ak5BYVdDL3JrNFVqc29EZ0dyRGh3aUdBa1ZCd1lMS3hjOVYwSWgvczUyRHlFckhnZ2VDUUVQUEFNbi9Oa0VUZ3dCckJndVFDajdxaUVuRVFFQm1BUUlIVmRYQXhnQkh5WXNFd0VCamdVSEFBQUNBR2IrZGdPcUJjUUFIZ0JHQUJsQUN4OFJEdzhoSVRNRkd3TnlBQ3N5THprdk14STVPVEF4UVFjdUFpTWlCZ1lWRkI0Q016TVZJeUl1QWpVMFBnSXpNaFlXQXpNVkl5SUdCaFVVRmhZWEZ4NENGUTRDQnljK0FqVTBKaVluSnk0RE5UUStBZ09OR2lWTFRTaHBoajhsVG54WGpaRnp1b1pJUklDeWJ5OWVWY3lSalh5dlhGQ0FTVzlTY3o0Qk8xRWpheDR3SEI5RE9EcGpwSGRCVkpuUkJaMlVDaEFLTlZVeU1WRTZIM1F6V25oR1VuOVlMZ29TL2Nad1JZOXVXWHBKRWhvVUxsQkhOWEZpSFZVak5qb25HaU1iRFE0WFFtV2FjR3FnYlRjQUFBTUFLZi96QktVRU9nQURBQWNBR1FBWlFBME9GUXR5QmdweUNRY0NBd1p5QUNzeU1qSXJLekl3TVVFVklUVWhFU01SSVRNUkZCWVdNekkyTnhjR0JpTWlKaVkxQkhIN3VBRmp1Z0pLdWlJMkh4Y3pEUUVXUnpKRWNrUUVPcG1aKzhZRU92emFOemdUQ1FPV0J3NDNmMndBQUFFQWt2NWdCQ0FFVGdBdkFCZEFEQjRwQmhFTGNnWUhjZ0FPY2dBckt5c1JNekl3TVZNUk5ENENNekllQWhVVkZBNENJeUl1QWljZUFqRWVBak15UGdJMU5UUXVBaU1pRGdJVkE1SkdmS0ZiZEsxMU9qWnFtMlJvbm01QkN3SXNMQlJIZUZ0TGJFVWhIa0pxVEVaalBoMEIvbUFENDRIRGhFTlZtOVNBRlhLL2pFeEVnYlp6QVNVa1JudExPV1dHVFJWWG0zWkVSWENEUGZ3ZkFBRUFaZjZLQStJRVRnQXRBQTYxR3drRkFBZHlBQ3ZNTXk4d01VRXlGaFlWSXpRbUppTWlEZ0lWRlJRV0ZoY2VBaFVPQWdjblBnSTFOQ1ltSnk0Q05UVTBQZ0lDUG5tK2JiQTJiVkZNYlVVaFQ1NTJUMzFKQVRwUkkySWZLaFlnUkRlZDJIQS9lYkFFVGx5dmZVTnRRRU54aVVjcVdvOW9JQlV0VlZJMGNtRWRWQ00yT0NjZUpob01JNG5RakNwdHc1WldBQUFEQUdILzdBUjhCRG9BR0FBdUFESUFFMEFKS2dZeUJuSWZGQXR5QUNzeUt6SXlNREZUTlRRK0FqTWVBaGNlQWhVVkZBNENJeUl1QWpjVkZCNENNekkrQWpVMU5DNENJeUlPQWdFVklUVmhRWDJ6Y1I4eVB6TmNna1JCZmJOeWNyTitRYmtrU1hGTlRYQklKQ1JKY1UxTWNVZ2tBMkw5eGdJUkYzSEJrRkFESlMwT0s0dTBheFprdUpCVVU1WElqQmRSajI0L1AyNlBVUmRMaUdvOFBHcUlBY2VabVFBQUFnQlIvK3dEMmdRNkFBTUFGUUFWUUFvRkNoRUNBd1p5RVF0eUFDc3JNaEV6TWpBeFFSVWhOU0V6RVJRV0ZqTXlOamNYQmdZaklpWW1OUVBhL0hjQlhMa2RNQndjTUJFcExsZ3ZURzA2QkRxV2x2elVOam9WRUFxRElSTThoR3dBQVFDUS8rc0Q5d1E2QUI0QUUwQUpFQWNaQUFaeUdRdHlBQ3NyRVRNeU1ERlRNeEVVSGdJek1qNENOU1lDSnpNZUFoVVVEZ0lqSWk0Q05aQzVIamRLSzBwdlN5WUNSalBESGpRZ09YYXllbHVUWnpjRU92MXdVSEZHSUV0K21VMklBUVY3UHB5OWNIUFRvMTgxYmFwMUFBRUFXUDRpQlV3RU9nQXZBQmxBRENzRkJSa1lCbklpRHd0eUFBQXZLeklyTWpJUk16QXhRUkUwTmpZek1oNENGUlFPQWlNaUxnSTFORFkyTnhjT0FnY1VIZ0l6TWpZMk5TNERJeUlHRlJFQ2JUOXhTMk92aGt4R21mV3ZxKzZVUkRweVZHUTdTaU1ETG1hcGU2bklXUUVvUzI1SklDTCtJZ1UxUm1VNFVKSEZkRy9MbjF4ZnBOTnpjTUNkT1lRMGdJcEVUcGwrVEgyK1lrbUtia0VxR3ZyRUFBSUFZUDRuQlVNRU9nQWVBQ0lBRlVBS0lRY1pDM0lnRUFBR2NnQXJNaklyTWk4d01WTXpFUlFlQWpNeVBnSTFKZ0luTXg0Q0ZSUU9BaU1pTGdJMUFUTVJJMkM1UUhPYVdvQ3dhakFEUnpYREh6VWhRNVR6c0kza29sWUNCTG01QkRyK0dIK3hiVEpNZ0p0T2hnRUNlajJidTI5MTFLVmZTSmJxb1FIbStlMEFBZ0I2LytzR0dnUTZBQjRBUHdBWlFBd0JGd29LS1RZZkJuSTJDM0lBS3lzUk16TVJNekl3TVVFekhnSVZGQTRDSXlJdUFqVVJNeEVVSGdJek1qNENOU1lDSlRNR0FnY1VIZ016TWo0Q05SRXpFUlFPQWlNaUxnTTFORFkyQk5EQ0pENG1LMTJZYkZhR1hUQ0NJVHhSTHp4VU5CZ0RVZnYyd2p4UkF3OGdNMGt3TUZFOElZSXdYWVpXVjROZE9oc21QZ1E2UDV5OWNYUFNvMTVCZnJoM0FTbisxVjJCVVNWRWQ1dFlpQUVGZkh6Kys0aEdnR3RSTENWUmdWMEJLLzdYZDdoK1FUMXVrNnhjY2IyY0FBQUJBSHIvNndSNkJjY0FPQUFkUUEwZEhoYzJCQVFOSXhjTGNpME5BQzh6S3pJUk9TOHpFTXd5TURGQkZ3WUdJeUlrSmpVMU5EWTJNekllQWhVUkZBWUdJeUl1QWpVUk54RVVGaFl6TWpZMk5SRTBMZ0lqSWdZR0ZSVVVGaFl6TWpZRWNnZ3JiVFc1L3U2V1Y1WmdUbjFZTG16QmdtV2xkMEM1UUhaU1RtNDdFeWM1SmlwREoyRzlpak5uQXdtVkVCU0s3cFFRYnB0U01XQ0xXZjFpbE14cFFIaW9hUUZOQXY2eFhvWkhRSVZtQXA0NFVUVVpKVk5GRW1HbVpSQUFBLy9hQUFBRWJ3VzlBQU1BRmdBcEFCNUFEaEFKQ1I4bUEzSWFHQllEQXdJU0FEOHpFVE16TXlzeU1oRXpNREZCRVNNUk54TStBak15RmhjSEppWWpJZ1lHQndFbkF4TVhCd0V1QWlNaUJnY25Oall6TWhZV0FvVEFXK1loUlZNMEl6c2ZKUVFmRUJVbUlBLyt5WWFwNWl1Ry9zb09JaVVWRUNBRkl4ODdJakpVU2dLdi9WRUNyMG9DQ0VwUklRd1BtQVFGRGlNZS9Wb0NBdUw5OE5JQ0FxWWVJdzRGQkpjUERSNVJBQU1BUy8vckJoc0VPZ0FEQUNRQVJRQWhRQkFtQlFNY0R5ODhDM0k4RHdJREJuSVBBQzhyTWhFNUt6SVJNeEV6TXpBeFFSVWhOU0V6SGdJVkZBNERJeUl1QWpVMU14VVVIZ0l6TWo0RE5TWUNKVE1HQWdjVUhnTXpNajRDTlRVekZSUU9BaU1pTGdNMU5EWTJCaHY2TUFRK3d5UTlKaGswVlhaUFZvWmNNSUloUEZBd0tEd3JHdzBFVWZ4Qnd6eFNBdzBiS3p3b01GQThJWUl3WFlaV1RuZFVOUmttUHdRNm1KZy9uTDF4WEt5VGJqMUJmcmgzK2Z0ZGdWRWxMRkJzZ0VhSUFRVjhmUDc3aUVhQWExRXNKVkdCWGZ2NWQ3aCtRVDF1azZ4Y2NiMmNBQUFEQUN2LzlBV3lCYkFBR3dBZkFDTUFJVUFSSHlNWUJRVU9JaU1lQ0hJakFuSU9DWElBS3lzckVUTVNPUzh6RVRNd01VRTFQZ0l6TWhZV0ZSUU9BaU1uTWo0Q05UUW1KaU1pQmdZVEVTTVJJUlVoTlFJOU5vU0NNcUxvZlQ5OHUzd0NWblpISUVxUmJEOStlUmJBQXN2N2xnS0tweFVpRkd2TmsyaWxjejJYS2s1c1FWK0NSQkloQXc3NlVBV3ducDRBQUFJQWUvL3NCTjBGeEFBREFDd0FIVUFPQXdJQ0NSMFpGQU55S1FRSkNYSUFLOHd6Szh3ekVqa3ZNekF4UVJVaE5RRXpEZ0lqSWk0Q05UVTBQZ0l6TWhZV0Z5TXVBaU1pRGdJVkZSUWVBek15TmpZRGR2MnJBdnJDRDRIcXJvSFNsbEZSbWRtSXBlT0FEOEVPVEl4d1laTmpNaDA2V25sT2VwSkxBeTZkbmY2aGl0cC9ZTEg1bVpDWitySmdmTnVRWnBOUVNvbStkSkpXbTRKZk5FMlNBQUFEQURJQUFBZzdCYkFBRVFBVkFDNEFKMEFUSkNFaENTNFdGZ0FLQ1FoeUZCVVZJd0FDY2dBck1qSVJNeXN5RWprdk14RXpFVE13TVVFekF3NEVJeU0xTno0RU53RVZJVFVCSVRJV0ZoVVVEZ0lqSVJFekVTRXlOalkxTkNZbUl5RUJkOEFoQnlFOFlJdGhOQ2c0VVRra0ZRWUM3djF3QXdnQmphRGJja0IrdDNqOTRNRUJYMnVGUGo2RmEvNXpCYkQ5TjVyeHNYTTRuUU1FSzFpTXk0Z0NxcDZlL2N4MHlvRmdvbmxDQmJENjdWU0ZTVW1EVXdBQUF3Q3lBQUFJVFFXd0FBTUFCd0FnQUNOQUVRZ2dJQU1DQWdZVkJ3SnlGaE1UQmdoeUFDc3lFVE1yTWhFNUx6TXpMek13TVVFVklUVVRFU01SQVNFeUZoWVZGQTRDSXlFUk14RWhNalkyTlRRbUppTWhCRnY4K1IvQkJDRUJqYURiY2tCK3Qzajk0TUVCWDJ1RlBqNkZhLzV6QXptZG5RSjMrbEFGc1AyZmE3eDhYWnh6UUFXdyt2WktlVVZGZGtrQUF3QStBQUFGMUFXd0FCVUFHUUFkQUIxQURoa0JHQVlSRVJnY0hRSnlHQWh5QUNzck1oRTVMek1STXpJd01XRWpFVFFtSmlNaURnSUhOVDRETXpJV0ZoVUJFU01SSVJVaE5RWFV3RU9HWlR4eGJHa3pNbUJuZGthYjNYYjh3OEVDMGZ1WEFjaHhmelFLRWhrUW53OFpFZ3BaeGFRRDZQcFFCYkNlbmdBQUFnQ3cvcGtGQUFXd0FBY0FDd0FYUUFzSkJnRUNjZ3NEQXdBSWNnQXJNaEk1S3pJdk1ERnpFVE1SSVJFekVTVVJJeEd3d2dMTndmNC93QVd3K3UwRkUvcFFpdjRQQWZFQUFnQ2pBQUFFc1FXd0FBVUFIZ0FoUUJBR0hoNEVBaE1UQlFKeUZCRVJCQWh5QUNzeUVUTXJNaEV6RVRrdk16QXhRUlVoRVNNUkV5RXlGaFlWRkE0Q0l5RVJNeEVoTWpZMk5UUW1KaU1oQkNIOVFzQ1RBWTJnM0hKQWZyaDQvZURCQVY5cmhUNCtoV3YrY3dXd252cnVCYkQ5cjJ2QWdXQ2ZkVDhGc1BydFQ0QkpTWHBKQUFBR0FEUCttZ1hLQmJBQUF3QUhBQXNBRHdBVEFDVUFKMEFUQ3hFUklBTURCeDRJY2c0UER4QVVBbklKQlFBdk15c3lNaEV6S3pJeUVUTXlFVE13TVdVVklUVXpFU01ESVFNakVRTVZJVFVoRVNNUklUTUREZ1VISXpVelBnTTNCU0w3c2grL0FRV1hBcitrL1lJREpNRDlXc0VlQmlZNFNGSlpMVmcrR2tORE13bWRuWjM5L1FJRC9mNENBZ1VUbnA3NlVBV3cvYmFFMzdpUmFVTU9uUnhxcWZTbUFBVUFHd0FBQnpZRnNBQUZBQWtBRFFBVEFCY0FKMEFURmhFSkF3TUFBQThQRkF3SUNISU9DZ0VDY2dBck1qSXJNakl5THpNUk14RXpNek13TVVFQk13RWhCeWNCSXdFQkVTTVJJUUVoSnlFQkV3RTNBUUpLL2ZqaUFZTUJFaC9vL2xud0FoMEIxTDhEdy8zMi9yb2VBUWdCZ3huK1duc0NHd0taQXhmOWlhQVAvVmdEVGdKaStsQUZzUHpwb0FKMytsQUNxS2I4c2dBQUFnQlEvK3dFYXdYRUFCNEFQZ0FqUUJFQUlBSUNQajRWTkRBcUNYSVBDeFVEY2dBck1zd3J6RE1TT1M4ekVqazVNREZCSXpVek1qWTJOVFFtSmlNaUJnWVZJelErQWpNeUhnSVZGQTRDSlRNeUhnSVZGQTRDSXlJdUFqVXpGQllXTXpJMk5qVTBMZ0lqSXdKbnJhWnVpRDVFam5CVWlGREJUb2l6WkhXK2lFaEdncmIrNDYxN3dJUkZUNURGZFY2M2xGbkJVWkJnYnBsUksxTjdVYVlDdTNzK2JraEZjMFUvYjBoZGxXazROV2lhWmt1RVpEbFZNbUNOVzJhZWJqZ3haNkJ3U1hwSlJYbE1RMk5BSHdBQkFMSUFBQVVBQmJBQUNRQVhRQXNGQUFZQ0NBSnlCQVlJY2dBck1pc3lFams1TURGQkFUTVJJeEVCSXhFekFYSUN6Y0hCL1RQQXdBRk9CR0w2VUFSais1MEZzQUFBQXdBd0FBQUU5d1d3QUFNQUJ3QVpBQmxBREJJRkVRaHlBZ01EQkFnQ2NnQXJNaklSTXlzeU1qQXhRUlVoTlNFUkl4RWhNd01PQkNNak5UYytCRGNFVWYxbUEwREIvVC9BSVFjaFBHQ0xZVFFvT0ZFNUpCVUdCYkNlbnZwUUJiRDlONXJ4c1hNNG5RTUVLMWlNeTRnQUFBSUFUZi9yQk1zRnNBQVRBQmdBR2tBT0Z4WUFGUVFJQWhnQ2NnOElDWElBS3pJck1oSVhPVEF4UVFFekFRNERJeUltSnpjV0ZqTXlOalkzQXdFWEJ3RUNiQUdCM3YzOUZqWk9jMVVZUWdvR0MwQVBPVUlwRWZJQmxUQ2kvZ1VCNHdQTiswTXpYMG9zQlFPYUFnTXVSeVVFanZ4MXN3d0VTZ0FBQXdCVS84UUY0d1hzQUJVQUtRQXRBQnRBREI4TURDc1dBQUFyS2dOeUt3QXZLeEU1THpNUk9TOHpNREZCTXpJZUFoVVVEZ0lqSXlJdUFqVTBQZ0lYSWdZR0ZSUWVBak16TWpZMk5UUXVBaU1ERVNNUkFxTHhmdGVoV2xxaDEzN3hmdGFoV1ZtaDFuNkR0bDQxYUpoaTg0SzFYelpubDJJZHVRVWZWWnpYZ29MWW5WVlZuTmVDZ3RlZFZwaHR4SU5qb0hJK2JjV0RZcUJ5UGdGbCtkZ0dLQUFBQWdDdi9xRUZtQVd3QUFVQURRQVpRQXdNQndKeUJRUUVDUVlJY2dFQUx5c3lNaEV6S3pJd01XVURJeEVqTlFVUk14RWhFVE1SQlpnU3JZLzhaY0lDemNHaS9mOEJYNktpQmJENjdRVVQrbEFBQUFJQWx3QUFCTWtGc0FBVkFCa0FGMEFMRndZUkVSZ0FBbklZQ0hJQUt5c1JPUzh6TWpBeFV6TVJGQllXTXpJK0FqY1ZEZ01qSWlZbU5RRXpFU09Yd1VLR1pEeHhiR2t6TVdGbmRVZWEzWFlEY2NIQkJiRCtPWEdBTkFvU0dnK2VEeG9TQ2xuR3BBSEgrbEFBQUFFQXNBQUFCdGdGc0FBTEFCbEFEQVVKQmdJQ0N3QUNjZ3NJY2dBckt4RXpFVE15TWpBeFV6TVJJUkV6RVNFUk14RWhzTUlCOU1BQjhjSDUyQVd3K3UwRkUvcnRCUlA2VUFBQUFnQ3cvcUVIYXdXd0FBVUFFUUFkUUE0TUJRZ0lCQkVJY2c4TEJnSnlBUUF2S3pJeUt6SXlFVE16TURGbEF5TVJJelVCTXhFaEVUTVJJUkV6RVNFSGF4S21qZnFLd2dIMHdBSHh3Zm5ZbVA0SkFWK1lCUmo2N1FVVCt1MEZFL3BRQUFBQ0FCRUFBQVc1QmJBQUF3QWNBQjFBRGhFU0R3UWNIQThBQVFKeUR3aHlBQ3NyTWhFNUx6TVJNekl3TVZNMUlSVVRJVElXRmhVVURnSWpJUkV6RVNFeU5qWTFOQ1ltSXlFUkFjbGtBWXlnM0hOQmZyaDQvZUhBQVY5cmhUNCtoV3YrZEFVWW1KaitSMnZBZ1dDZmRUOEZzUHJ0VDRCSlNYcEpBQUlBc2dBQUJqRUZzQUFZQUJ3QUhVQU9HaGtPQ3dBWUdBc01BbklMQ0hJQUt5c1JPUzh6RVRNeU16QXhRU0V5RmhZVkZBNENJeUVSTXhFaE1qWTJOVFFtSmlNaEFSRWpFUUZGQVkyZzNISkFmcmg0L2VEQkFWOXJoVDQraFd2K2N3VHN3UU5mYThDQllKOTFQd1d3K3UxUGdFbEpla2tDNy9wUUJiQUFBQUVBb3dBQUJMRUZzQUFZQUJsQURBNExBQmdZQ3d3Q2Nnc0ljZ0FyS3hFNUx6TVJNekF4UVNFeUZoWVZGQTRDSXlFUk14RWhNalkyTlRRbUppTWhBVFlCamFEY2NrQit1SGo5NE1FQlgydUZQajZGYS81ekExOXJ3SUZnbjNVL0JiRDY3VStBU1VsNlNRQUNBSlQvN0FUMEJjUUFBd0FzQUIxQURnTUNBaDRKQlNrSmNoa1ZIZ055QUNzeXpDdk1NeEk1THpNd01VRVZJVFVCTXg0Q016SStBalUxTkM0REl5SUdCZ2NqUGdJek1oNENGUlVVRGdJaklpWW1CRXo5cS82ZHdCQkxrbnRoamx3dElFQmZmVTF3alVzUHdBK0E0NldIMkpsUlVaYlJnSy9xZndNbG5wNytxbWVTVFZHT3ZHdVNYWjkvV2pCUWsyYVEyM3hnc3ZxWmtKbjVzV0IvMmdBQUJBQzMvK3dHMndYRUFBTUFCd0FkQURNQUkwQVRMd2NHQmc0a0dRTUNjZ0lJY2hrRGNnNEpjZ0FyS3lzckVUTVNPUzh6TWpBeFFSRWpFUUVWSVRVRkZSUUNCZ1lqSWlZbUFqVTFOQkkyTmpNeUZoWVNBelUwTGdJaklnNENGUlVVSGdJek1qNENBWGpCQWcvK3BnVnZVcHJYaFlIWG5WWlZuTmVCaGRlYlU3ODFacE5kV3BGbk9EaHBrVnBla21VMEJiRDZVQVd3L1dXWW1BOWNwUDc4dG1CZ3RnRUVwRnlrQVFPM1lHQzMvdjMvQUY2Q3lJaEdSb2pJZ2w2RHlZbEdSb25KQUFJQVdnQUFCR1VGc0FBV0FCb0FIMEFQRnhZV0FBQUpEQXdaQ0hJT0NRSnlBQ3N5S3pJUkVqa3ZNeEk1TURGQklTY21KalUwTmpZeklSRWpFU0VpQmhVVUZoWXpJUVVCSXdFRDBmNW5YNTZxZmVlZUFkTEIvdStnb1VlTWFBRkYvcmYrbnMwQmJBSTNKekxQbW8zRVp2cFFCUktZZ1ZTRVREcjlaUUtiQUFNQVl2L3JCQ2tHRVFBV0FDOEFSQUFaUUF3NklqQVhGeUlBQVhJaUMzSUFLeXNST1M4ekVUTXdNVUV6RkE0Q0J3NERGeFVqTlRRU05qWTNQZ0lETWg0Q0ZSVVVEZ0lqSWk0Q05UVTBOalkzUGdJWElnWUdGUlVVSGdJek1qNENOVFUwTGdJRFE1ZzhaNEZGVnBOcE1RdVlSNEt6YkU1d085dHFwblE5UVgyemNuS3pma0VTR3dzbGdiVlBab05BSkVseFRVMXdTQ1FrU1hFR0VXSnpQaUFQRWsyTTRLVmNYTGtCRkw1d0ZROGpQUDRmU29TemFSWnh3WTlRVUkvQmNSWVpNREljV3BwZmwxNmJXaFpNaUdrOFBHbUlUQlpFZWw0M0FBQUNBSjRBQUFRcEJEb0FHd0F6QUMxQUZnSUJHeXNwS1NnQktBRW9EdzBRQm5JZUhSMFBDbklBS3pJUk15c3lFVGs1THk4Uk14STVPUkV6TURGQklTY2hNalkyTlRRdUFpTWpFU01SSVRJZUFoVVVEZ0lIQXlFM0lUSTJOalUwSmlZaklUY2hGeDRDRlJRT0FnS0ovcDBDQVNKV2N6b2hRbUZCN2JrQnBtZWxkVDRvVG5KS1NQNWFYQUZLVFdZek0yWk4vdWNDQVY5RFdYeEFPV3lhQWR5VUlrUXlKenNuRS94Y0JEb2tTWEJNTVZoRUt3Yjk3WlluU1RNelNTZVVPQWRLY1VKTWRFMG5BQUVBbXdBQUEwZ0VPZ0FGQUE2MkFnVUdjZ1FLY2dBckt6SXdNVUVWSVJFakVRTkkvZ3k1QkRxWi9GOEVPZ0FEQUM3K3dRU1VCRG9BRHdBVkFCMEFJVUFRSFJnSkZoWWJFd2dLY2hVUUVBQUdjZ0FyTWhFekt6SXlNaEV6THpNd01VRXpBdzREQnlNM056NEROeE1oRVNNUklRRWhFU01SSVJFakFWQzVFQVk2V204N1hBVW1JVDQwSXdVL0FvdTUvaTcrc1FSbHVmME51Z1E2L211YTRKMXFKSmNCSjFOenAza0JsZnZHQTQvOUNmNHBBVC8rd1FBRkFCWUFBQVlFQkRvQUJRQUpBQTBBRXdBWEFEQkFGeFVRRUFBV0VSRUpBd01HQUFBVUJ3d1NFdzBOQWdaeUFDc3lFVE0vTXpNNUx6TXpFVE16RVRNUk14RXpNREZCQVRNQk13Y25BU01CQVJFakVTRUJJU2N6QVJNQk53RUIxZjVtM3dFWTJCdTEvc2JxQWE4QnBMa0RNUDVtL3VZZDJRRVlHdjdGZHdHdUFkY0NZLzVBb3hQK0ZnSndBY3I3eGdRNi9aMmpBY0Q3eGdIcWh2MlFBQUlBV1Avc0E2MEVUUUFkQURzQUkwQVJBQjhDQWpzN0ZESXVLUXR5RHdzVUIzSUFLekxNSzh3ekVqa3ZNeEk1T1RBeFFTTTFNekkyTmpVMEppWWpJZ1lHRlNNME5qWXpNaDRDRlJRT0FpVXpNaDRDRlJRT0FpTWlKaVkxTXhRV0ZqTXlOalkxTkNZbUl5TUNJY2U0VFZvbUsxNVBRR2c5dVhHOWNGNlZhRGMwWW92KzRzZGhsR1F6UFhDYlhtbkdnTGsrYjBsT2FEVXdZMDI0QWdWeUowWXZLa3N2TFUwd1k0OU9LVTkxVFRkaVN5cEdKVWhwUkV4NVZDeElsM1V4V0RZd1VDODlTaU1BQVFDZEFBQUVBZ1E2QUFrQUYwQUxCUUFHQWdnR2NnUUdDbklBS3pJck1oSTVPVEF4UVFFekVTTVJBU01STXdGVkFmTzZ1djROdUxnQkpRTVYrOFlERmZ6ckJEb0FBQU1BblFBQUJFQUVPZ0FEQUFrQURRQWZRQThNQndjTEJnWUNDUU1HY2dvQ0NuSUFLeklyTWhFNUx6TXpFVE13TVVFUkl4RWhBU0VuTXdFVEFUY0JBVmE1QTMvOS8vNzlITlFCYXhyK2NuY0NBZ1E2KzhZRU92MlVvZ0hLKzhZQjZvYjlrQUFEQUN3QUFBUURCRG9BQXdBSEFCa0FHVUFNRWdVUkNuSUNBd01FQ0FaeUFDc3lNaEV6S3pJeU1ERkJGU0UxSVJFakVTRXpBdzRFSXlNMU56NEVOd05nL2ZVQ3Jybjkzcm9jQng4MVQyNUlPaWdyUFNvYkR3UUVPcG1aKzhZRU92MzJlYm1FVXllakF3TWlRMnFTWVFBQUF3Q2VBQUFGVXdRNkFBWUFDZ0FPQUJ0QURRQUpEQVlCQ2daeUN3TUpDbklBS3pJeUt6SXlNaEk1TURGbEFUTUJJd0V6SXhFakVRRVJNeEVDK3dGd3N2NGVnUDRnc2phNUEvdTY5Z05FKzhZRU92dkdCRHI3eGdRNis4WUFBQU1BblFBQUJBRUVPZ0FEQUFjQUN3QWJRQTBKQmdnREFnSUdCd1p5QmdweUFDc3JFVGt2TXpJUk16QXhRUlVoTlJNUkl4RWhFU01SQTJ2OXhDZTVBMlM2QW1XV2xnSFYrOFlFT3Z2R0JEb0FBd0NkQUFBRUFnUTZBQU1BQndBTEFCbEFEQWtHQ0FJREF3Y0djZ1lLY2dBckt6SVJNeklSTXpBeFFSVWhOVE1SSXhFaEVTTVJBMTc5M1J1NUEyVzZCRHFabWZ2R0JEcjd4Z1E2QUFJQUtBQUFBN0VFT2dBREFBY0FFTGNEQmdjR2NnSUtjZ0FyS3pJeU1ERkJFU01SSVJVaE5RSkd1Z0lsL0hjRU92dkdCRHFXbGdBQUJRQmsvbUFGYVFZQUFCWUFLd0JDQUZZQVdnQW5RQlVuQmdaSkhoRVJVak0rQzNJekIzSllBSEpYRG5JQUt5c3JLeEV6TXhFek1qSVJNekF4UVJVVURnSWpJaTRDSnhFK0F6TXlIZ01ITlRRdUF5TWlCZ1lIRVI0Q016SStBaVUxTkQ0RE16SWVBaGNSRGdNaklpNENOeFVVSGdJek1qWTJOeEV1QWlNaURnSUJFVE1SQldreVk1SmdUM2hUTVFrSk1WTjJUMDU5WHo4Z3VSTW5QbGM0UEU4c0Nnd3VUanRHWXo4ZCs3UWdRRjk5VGsxelVEQUtDVEJRZFU1Z2ttTXp1aHM3WUVZOFRpNE1DaTFPUFVaaU94c0JaTG9DQ2hWeXY0eE5LMUp6U0FIZ1RYcFdMamRtajdKN0ZVWi9hMUFzSGpFYi9ZMFdKeGs1Wm9aTkZXYXlqMlkzTGxaNlRmNHpUSHBYTGsyTXY0Y1ZUWVptT1I0d0dnSmhHekVlUkhhYisvOEhvUGhnQUFBQ0FKMyt2d1NDQkRvQUJ3QU5BQnRBRFFZQkF3ME1EQUFLY2dFR2Nna0FMeXNyTWhFek1oRXpNREZ6RVRNUklSRXpFVGNESXhFak5aMjVBZks2Z0JLbGpRUTYvRjREb3Z2R21QNG5BVUdZQUFJQWFBQUFBNzBFUEFBREFCY0FGMEFMRHhRSkNRRUFCbklCQ25JQUt5c1JPUzh6TWpBeFFSRWpFUk1WRGdJaklpWW1OUkV6RVJRV0ZqTXlOallEdmJsNk9ITi9Tb0M4WnJrMmFFdElmM1VFT3Z2R0JEcitENWdWSVJOWnRZb0JQUDdFV25BMUV5QUFBUUNkQUFBRjRBUTZBQXNBR1VBTUJRa0dBZ0lMQUFaeUN3cHlBQ3NyRVRNUk16SXlNREZUTXhFaEVUTVJJUkV6RVNHZHVRR011Z0dMdWZxOUJEcjhYZ09pL0Y0RG92dkdBQUFDQUpMK3Z3WnRCRG9BQlFBUkFCMUFEZ3dGQ0FnRUVRcHlEd3NHQm5JQkFDOHJNaklyTWpJUk16TXdNV1VESXhFak5RRXpFU0VSTXhFaEVUTVJJUVp0RXFXTisybTVBWXk2QVl1NStyMlkvaWNCUVpnRG92eGVBNkw4WGdPaSs4WUFBQUlBSGdBQUJNQUVPZ0FEQUJ3QUhVQU9FUklQSEFRRUR3SURCbklQQ25JQUt5c3lFVGt2TXhFek1qQXhRUlVoTlFFaE1oWVdGUlFPQWlNaEVUTVJJVEkyTmpVMEppWWpJUUg1L2lVQnlRRkZnN1JkTkdlWFl2NHp1Z0VUVUY4cUtsOVEvcnNFT3BpWS9veGJuMlZMZzJJM0JEcjhYanBjTWpGZVB3QUNBSjRBQUFWL0JEb0FHQUFjQUIxQURob1pEZ3NZQUFBTERBWnlDd3B5QUNzckVUa3ZNeEV6TWpNd01VRWhNaFlXRlJRT0FpTWhFVE1SSVRJMk5qVTBKaVlqSVFFUkl4RUJKUUZGZzdSZE5HZVhZdjQwdVFFVFVHQXFLbUJRL3JzRVdya0N4bHVmWlV1RFlqY0VPdnhlT2x3eU1WNC9BZ3o3eGdRNkFBQUJBSjRBQUFQK0JEb0FHQUFaUUF3T0N4Z0FBQXNNQm5JTENuSUFLeXNST1M4ekVUTXdNVUVoTWhZV0ZSUU9BaU1oRVRNUklUSTJOalUwSmlZaklRRWxBVVdEdEYwMFo1ZGkvalM1QVJOUVlDb3FZRkQrdXdMR1c1OWxTNE5pTndRNi9GNDZYREl4WGo4QUFnQmsvK3NENFFST0FDY0FLd0FkUUE0cktpb0pIUmtVQzNJRUFBa0hjZ0FyTXN3cnpETVNPUzh6TURGQklnWUdGU00wTmpZek1oNENGUlVVRGdJaklpWW1OVE1VRmhZek1qNENOVFUwTGdJQkZTRTFBZ2c5YjBleGVNQnNjckI1UGo5NXIzRjV2MjJ4UVc1RlMyMUdJU0ZGYlFFdC9nMER0alpmUG1HbFpWYVd3MjBxYmNPWFZtaXhiME50UUVSd2kwWXFSNHB3US82OWw1Y0FCQUNlLyt3R01BUk9BQU1BQndBZEFETUFJMEFUSkFNQ0Foa3ZEZ2NHY2dZS2NnNEhjaGtMY2dBckt5c3JFVE1TT1M4ek1qQXhRUlVoTlJNUkl4RUJOVFErQWpNeUhnSVZGUlFPQWlNaUxnSTNGUlFlQWpNeVBnSTFOVFF1QWlNaURnSUM5ZjNCb2JrQnVVU0J0WEZ6dG9GRVJJQzJjbksyZ1VTNkprMXpUVTF6VENjblRYUk5USEpOSmdKdmw1Y0J5L3ZHQkRyOTF4ZDF5WlZUVTVYSmRSZDF5SlZUVTVYSWpCZFJqMjQvUDI2UFVSZFFqMjlBUUcrUEFBQUNBQzhBQUFQSEJEb0FBd0FkQUIxQURnRVNFaE1UQXdrRUJuSUhBd3B5QUNzeUt6SVNPUzh6RWprd01VRXpBU01CSVJFakVTRWlCZ1lWRkJZV015RVZJU0l1QWpVMFBnSUJhTWoreDhnQjFBSEV1ZjcxVDJRdUtscEhBVlArclYyUVpEUTNhWmtDQlAzOEJEcjd4Z09rTlZRdExGRTBtREpaZVVkSGVGb3hBQVQvNS81TEErQUdBQUFSQUJVQUxBQXdBQjFBRURBdktCd0hjaFVBY2hRS2NnMEdEM0lBS3pJckt5c3l6REl3TVVFekVSUUdCaU1pSmljM0ZoWXpNalkyTlFFUkl4RVRKejRETXpJZUFoVVJJeEUwSmlZaklnNENBUlVoTlFNbXVrMlFaUjgySGc4UFJnOHJQU0QrSUxtTlRRRkFkS0ZpVUlCYk1Mb3lZRVpGY1ZFdEFVcjlnd0hHL2VGd25GQUhDcFFHQnk5WVBRWlorZ0FHQVB4R0EyKzlqRTByWHBWci9Uc0N4MVZuTHpwbWd3TENtSmdBQWdCbi8rd0Q5d1JPQUFNQUt3QWJRQTBFRFFNQ0FnMGhHQWR5RFF0eUFDc3JNaEU1THpNUk16QXhRUlVoTlFFeU5qWTNNdzRDSXlJdUFqVTFORDRDTXpJV0ZoY2pMZ0lqSWc0Q0ZSVVVIZ0lDdC8zV0FieENjRWdGcndWM3YzTjZ0bmM3TzNpMWVYKytiUVd2QlVGdlMxVnpReDBkUTNNQ2FKaVkvaHcyWHoxZ3BXVldsc050S20zRGxsWm5zWEJEYkVGRGNZbEhLa2VLY0VNQUF3QW5BQUFHaGdRNkFCRUFGUUF1QUNWQUVoWXVMZ0FrSVNFS0NRcHlGQlVWSXdBR2NnQXJNaklSTXlzeU1oRXpFVGt2TXpBeFFUTUREZ1FqSXpVM1BnUTNBUlVoTlFFaE1oWVdGUlFPQWlNaEVUTVJJVEkyTmpVMEppWWpJUUVrdVJ3SEhqVlFiVWc3S1NvOUtoc1FCQUlzL2c4Q1lnRkZoTFJjTkdlV1kvNDB1UUVUVVY4cUtsOVIvcnNFT3YzMmVibUVVeWVqQXdNaVEycVNZUUhQbVpuK1pGYVdYMGQ3WFRRRU92eGNPbGd0TEZJMEFBQURBSjBBQUFhb0JEb0FBd0FIQUNBQUpVQVNGUllURXdZSUF5QURBZ0lHQndaeUJncHlBQ3NyRVRrdk16TVJNeEV6RVRNeU1ERkJGU0UxRXhFakVRRWhNaFlXRlJRT0FpTWhFVE1SSVRJMk5qVTBKaVlqSVFOci9jUW51UU14QVVhRHRGMDBaNWRpL2pPNkFSTlFYeW9xWDFEK3VnS2hscFlCbWZ2R0JEcitaRmFXWDBkN1hUUUVPdnhjT2xndExGSTBBQVAvL1FBQUErQUdBQUFEQUJvQUhnQVpRQTBlSFJZS0IzSURBSElSQWdweUFDc3lLeXN5ekRJd01VRVJJeEVUSno0RE16SWVBaFVSSXhFMEppWWpJZzRDQVJVaE5RRkd1WTFOQVVCMG9XSlFnRnN3dWpKZ1JrVnhVUzBCWVAyREJnRDZBQVlBL0VZRGI3Mk1UU3RlbFd2OU93TEhWV2N2T21hREFzZVltQUFBQWdDZC9wd0VBZ1E2QUFNQUN3QVhRQXNBQmdZTENuSUpCQVp5QWdBdkt6SXJNaEk1TURGbE14RWpBVE1SSVJFekVTRUI5YnE2L3FpNUFmSzYvSnVZL2dRRm52eGVBNkw3eGdBQ0FKei82d1oyQmJBQUdBQXdBQnRBRGl3ZkNYSVVCd2x5SmhvT0FBSnlBQ3N5TWpJck1pc3lNREZCTXhFVURnSWpJaTRDTlJFekVSUWVBak15TmpZMUFUTVJGQVlHSXlJdUFqVVJNeEVVSGdJek1qWTJOUU1tbkR4c2tsZFhsRzA5d2g4NVRTNUhiejhDajhGdXZubFNqV2M2bkNJOVZERkNaenNGc1B2ZWFaNW9ORFJvbm1rRUl2dmVRbUpDSURwMFdBUWkrOTZNdTF3MGFKNXBCQ0w3M2tKaVFpQTZkRmdBQUFJQWdmL3JCYTRFT2dBWUFERUFHMEFPTEI4TGNoUUhDM0ltR2c0QUJuSUFLekl5TWlzeUt6SXdNVUV6RVJRT0FpTWlMZ0kxRVRNUkZCNENNekkyTmpVQk14RVVCZ1lqSWk0Q05SRXpFUlFlQWpNeVBnSTFBcnFXTldHRFRrNkRZVGE2R2k4L0pqeGVOd0k3dVdLcmJFcDlYRE9XSERSR0tpbEdOQjBFT3Ywb1hvMWVMaTVlalY0QzJQMG9PRlEzSERGalN3TFkvU2grcGxNdVhvMWVBdGo5S0RoVU54d2NOMVE0QUFBQy85c0FBQVA4QmhZQUZ3QWJBQ0ZBRUEwS0FCY1hDaG9iR3dvTEFYSUtDbklBS3lzUk9TOHpFVGt2TXhFek1ERkJJVElXRmhVVUJnWWpJUkV6RVNFeU5qWTFOQ1ltSXlFQkZTRTFBU01CUllTMFhGeTBoUDQwdVFFVFVHQXFLbUJRL3JzQmRQMUVBdXBncG10cHEyVUdGdnFDUDJRM05XZEZBbitZbUFBREFMai83UWFoQmNVQUF3QXNBREFBSUVBUkF3SUNMekFDY2k4SUhSUURjaWtKQ1hJQUt6SXJNajhyRWprdk16QXhRUlVoTlFFekRnSWpJaTRDTlRVMFBnSXpNaFlXRnlNdUFpTWlEZ0lWRlJRZUF6TXlOallCRVNNUkJSNzhFUVN4d1ErQjZxK0EwWlpSVVpuWWg2WGtnQS9CRGt5TWNXQ1RZeklkT2xsNlRYdVNTL3Vwd1FOQm1KaitqNHJhZjJDeCtabVJtZm15WUh6YmtHYVRVRXFJdm5TVFZwdUNYelJPa2dSRytsQUZzQUFBQXdDYS8rd0ZvUVJPQUFNQUt3QXZBQ1JBRXdNQ0FpNHZCbkl1Q2lFZEdBZHlDQVFOQzNJQUt6TE1LOHd6UHlzU09TOHpNREZCRlNFMUFUSTJOamN6RGdJaklpNENOVFUwUGdJek1oWVdGeU11QWlNaURnSVZGUlFlQWdFUkl4RUVndnlQQXVKQ2NFZ0Zyd1YzdjNONnRuYzdPM2kxZW4rOWJRV3ZCVUZ2U2xaeVF4MGNRM1A5dHJrQ2FKaVkvaHcyWHoxZ3BXVldsc050S20zRGxsWm5zWEJEYkVGRGNZbEhLa2VLY0VNRHR2dkdCRG9BQkFBb0FBQUU1UVd3QUFRQUNRQU5BQkVBSkVBUkVRME1EQUlBQmdZSEF3SnlEd1VGQWdnQVB6TVJNeXN5TWhFekVUa3ZNek13TVVFQkl3RXpBUUUzTXdFREZTRTFCUkVqRVFLeS9qekdBZzE3QVcvK1F3VjZBZ1QvL1Q0QnZMMEZGUHJzQmJENlVBVWNsUHBRQWxxam96UDkyUUluQUFRQUR3QUFCQ1VFT2dBRUFBa0FEUUFSQUI1QURoRU5EQXdCQndNR2NoQUZCUUVLQUQ4ekVUTXJNaEk1THpNek1ERkJBU01CTXdFQkF6TUJBeFVoTlFVUkl4RUIvLzdPdmdHN2pRRVIvc2RVamdHODNQMnRBWUs0QXYzOUF3UTYrOFlDL1FFOSs4WUJ3WmlZSnY1bEFac0FBQVlBeWdBQUJ2WUZzQUFEQUFnQURRQVJBQlVBR1FBMFFCb0pGQlFHQmhnVkVSRVFFQU1DQWhnSUZnSnlCQW9LQ3djQ2NnQXJNaklSTXlzL09TOHpNeEV6RVRNUk14RXpFVE13TVVFVklUVUJBU01CTXdFQk56TUJBeFVoTlFVUkl4RUJFU01SQTF2OTNRT0wvanpHQWcxN0FXLytRd1Y2QWdULy9UNEJ2TDM5VjhFQ1dxR2hBcnI2N0FXdytsQUZISlQ2VUFKYW82TXovZGtDSndPSitsQUZzQUFBQmdDOUFBQUY1QVE2QUFNQUNBQU5BQkVBRlFBWkFDNUFGeFVSRVJBUUF3SUNHQmtHY2drVUZBWUdHQW9MQndaeUFDc3lQek1STXhFekt4STVMek16RVRNUk16QXhRUlVoTlFFQkl3RXpBUUVETXdFREZTRTFCUkVqRVFFUkl4RUM1LzRzQXF2K3pyNEJ1NDBCRWY3SFZJNEJ2Tno5clFHQ3VQMzN1UUhCbUpnQlBQMERCRHI3eGdMOUFUMzd4Z0hCbUpnbS9tVUJtd0tmKzhZRU9nQUZBSk1BQUFaQUJiQUFGZ0FhQUI4QUpBQW9BRFJBR1JrYUdpUWJIeDhqSXhNb0JnWVRFd0VjSkFKeURTY25BUWdBUHpNUk15c3lFamt2TXhFekVUTVJNeEV6RVRNUk16QXhZU01STkRZMk15RXlGaFlWRVNNUk5DWW1JeUVpQmhVQkZTRTFBUUV6QVNNQkFRY2pBUUVSSXhFQlZNRjAyWmdCNHBuWmRNRkFnbVArSHBPUkE3SDg0QUZNQWI3Yi9mOTYvcVFCd1NKNS9mNEN0c0FCY3FIQ1ZsYkNvZjZPQVhKdWV6SjJwUVErbnA3OUFBTUEvTElEVHZ6NVJ3Tk8vVjM4OHdNTkFBQUZBSmNBQUFWTEJEc0FGd0FiQUNBQUpRQXBBREJBRnhvYkd5VWdKQ1FUS1FZR0V4TUJIU1VHY2cwb0tBRUtBRDh6RVRNck1oSTVMek1STXhFekVUTVJNeEV6TURGaEl6VTBOall6SVRJV0ZoVVZJelUwSmlZaklTSUdCaFVCRlNFMUFRRXpBU01EQVFjakFRRVJJeEVCVUxscXlJc0JPb3ZIYTdrNWMxait4bGh6T1FNUS9VNEJFd0ZGMFA1MWNQTUJTUjF3L25RQ09ibWtvY0ZXVnNHaHBLUnhmVE16ZlhFRGw1bVovYmtDUnYxdEFwUDl0VWdDay80TC9ic0NSUUFIQUxjQUFBaHlCYkFBQXdBSEFCNEFJZ0FuQUN3QU1BQThRQjRoSWlJa0xBSnlKeXNyR3pBT0Roc2JBd0lDQlFjQ2NoVXZMd2tKQlFnQVB6TVJNeEV6S3hJNUx6TXpFVE1STXhFekVUTXJNaklSTXpBeFFSVWhOUk1SSXhFQkl4RTBOall6SVRJV0ZoVVJJeEUwSmlZaklTSUdGUUVWSVRVQkFUTUJJd0VCQnlNQkFSRWpFUVR3L0c4WndRTFF3WFRabHdIam1kbHp3RUNDWS80ZGtwRURzZnpnQVV3QnZ0djkvbm4rcEFIQklubjkvZ0syd1FNc2w1Y0NoUHBRQmJENlVBRnlvY0pXVnNLaC9vNEJjbTU3TW5hbEJENmVudjBBQXdEOHNnTk8vUGxIQTA3OVhmenpBdzBBQUFjQW5BQUFCenNFT3dBREFBY0FId0FqQUNnQUxRQXhBRDVBSGlVaUl5TXRMUWNvTEN3Yk1RNE9HeHNEQWdJR0J3WnlGVEF3Q1FrR0NnQS9NeEV6RVRNckVqa3ZNek1STXhFekVUTVJNeEV6RVRNUk16TXdNVUVWSVRVVEVTTVJBU00xTkRZMk15RXlGaFlWRlNNMU5DWW1JeUVpQmdZVkFSVWhOUUVCTXdFakF3RUhJd0VCRVNNUkJOLzhIbGk1QXFTNWFzaUxBVHFMeDJ1NU9YTlkvc1pZY3prREVQMU9BUk1CUmREK2RYRHpBVWtkY1A1MEFqbTVBbHlYbHdIZSs4WUVPdnZHcEtIQlZsYkJvYVNrY1gwek0zMXhBNWVabWYyNUFrYjliUUtUL2JWSUFwUCtDLzI3QWtVQUF3QlEva1lEcWdlR0FCY0FRQUJKQUN0QUZCZ05ERUJBQUNzc0NVVkRRMEpJUVlCSEZ3QUNBRDh5M2hyTk1qa3lFVE0vTXhJNUx6TXpNekF4VXlFeUhnSVZGQTRDSXlNMU16STJOalUwSmlZaklSTXpNaDRDRlJRT0FpTWpJZ1lWRkJZV0Z3Y3VBaWMwTmpZek16SStBalUwTGdJakl4TVhOek1WQXlNRE5ZUUJNbWl2Z0VkR2dyWndrWTF2aWo4K2dXWCt6cEdSZThDRlJFaUJyMmcxVUVVNFRCNUxQWGhSQVZHVlp5MUZia3dvTEZWOVVZMTBsNWVnL25MN0JiQTFacEpjUzRGaE5uTStia2hCYkVEOStESmdqVnRtbm0wNFB6STFTUzRPZkJwWWZWQlljVFlvU1dNNlJHVkVJUVRtcXFvSy91NEJFZ29BQUFNQVRQNUdBM2NHTVFBWUFFRUFTZ0FtUUJFTkdReEJRUUF0UTBsR1JFS0FTQmdBQmdBL010NGF6VEl5TWprdkVqa3ZNek16TURGVElUSWVBaFVVRGdJakl6VXpNalkyTlRRdUFpTWhFek15SGdJVkZBNENJeU1pQmhVVUZoWVhCeTRDSnpRMk5qTXpNajRDTlRRdUFpTWpFeGMzTXhVREl3TTFnUUV0WHA5MVFVQjNwbWFSaldCM05oNDlYa0QrMDR5UmNiQjVQMEYyb0Y0eFVVUTRUQjVMUFhoUkFWR1daaWs3WFVFaUprcHNSNDBybDVlZy9uTDdCRG9xVUhOSU9tSktLWE1vU0RBZ055a1kvcUVrUm1aQ1RIaFVLejh5TlVrdURud2FXSDFRV0hFMkdTMDlKU28rS2hRRVg2cXFDLzd1QVJNS0FBTUFaLy9zQlBvRnhBQVhBQ2dBT1FBZlFCSU1LV295SUdveU1nd0FHR29BQTNJTUNYSUFLeXNyRWprdkt5c3dNVUV5SGdNVkZSUUNCZ1lqSWk0RE5UVTBFalkyRnlJT0FnY0dCaFVoTkNZbkxnTURNajRDTnpZMk5TRVdGaGNlQXdLd2FyYVBaalZTbXRlRlo3U1JhRGRWbk5lQlVZaGxRQWtCQWdNVkFRSUpQR1dKVTFhS1l6c0lBUUg4N1FFQ0FRcEFab2NGeEQ1M3E5dURYS1QrL0xaZ1BuZXIyNE5jcEFFRHQyQ2tPbktuYlJBakVoRWlFRzZuY3pyN2J6dDBxMjhMRlFzUUhnNXJwSEE1QUFNQVhQL3NCRFFFVGdBVkFDQUFLd0FmUUJJTElXb25HMm9uSndzQUZtb0FCM0lMQzNJQUt5c3JFamt2S3lzd01VRXlIZ0lWRlJRT0FpTWlMZ0kxTlRRK0FoY2lEZ0lISVM0REF6SStBamNoSGdNQ1IzSzNnRVJFZ0xWeWNyYUJSRVNBdG5GRWFrc3RDQUplQnk1TWEwSkZhMHd0QnYyZ0JpMU1iQVJPVTVYSmRSZDF5SlZUVTVYSWRSZDF5WlZUbUROYWQwUkVkMW96L000MFhYdEhSM3RkTkFBQUFnQVdBQUFFM1FYREFBNEFFd0FaUUEwT0VnZ0ZFd0p5QlFOeUVnaHlBQ3NyS3hFekVUTXdNVUVCUGdJekZ3Y2pJZ1lHQndFakFRRVRJd0VDaHdFQ0lWQnJTaTRCRENJektSVCtmSlgrd2dGY1lwWCtCZ0YyQXlsb2dUc0JxaHMrTi90NEJiRDd4LzZKQmJBQUFnQXZBQUFFREFST0FCSUFGd0FWUUFzWEJuSVNGZ3B5REFVSGNnQXJNaXN5S3pBeFFSTStBak15RmhjSEppWWpJZ1lHQndFakF4TVRJd0VDREowY1RWMHlIVFVaRlFVWER4UXBJZ3YrMW5yUzhFcDcvb1FCUEFJZldHb3hDQkdVQXdVV0tSMzhzd1E2L1FMK3hBUTZBQVFBWi85ekJQb0dOUUFEQUFjQUh3QTNBQ1JBRUFJQ0p5Y0RHZ055Qndjek13WU9DWElBSzgwekVUTjhMeXNZelRNUk0zMHZNREZCRVNNUkV4RWpFUUVWRkFJR0JpTWlMZ00xTlRRU05qWXpNaDREQnpVMExnTWpJZzRDRlJVVUhnTXpNajRDQXhhNXVia0NuVkthMTRWbnRKRm9OMVdjMTRGcXRvOW1OYjhpUW1COFMxbVJhRGdrUldGN1IxNlNaVFFHTmY1K0FZTDZ5ZjUxQVlzQ0NGeWsvdnkyWUQ1M3E5dURYS1FCQTdkZ1BuZXIyOTllYUttQ1dDMUdpTWlDWG1tcWcxZ3RSb25KQUFBRUFGei9pUVEwQkxZQUF3QUhBQjBBTXdBa1FCQUhCeVFrQmhrTGNnSUNMeThERGdkeUFDdk5NeEV6ZlM4ckdNMHpFVE44THpBeFFSRWpFUk1SSXhFQk5UUStBak15SGdJVkZSUU9BaU1pTGdJM0ZSUWVBak15UGdJMU5UUXVBaU1pRGdJQ29ycTZ1djUwUklDMmNYSzNnRVJFZ0xWeWNyYUJSTGttVFhSTlRITk1KeWROYzAxTWMwMG1CTGIra0FGdy9FTCtrUUZ2QVJrWGRjbVZVMU9WeVhVWGRjaVZVMU9WeUl3WFVZOXVQejl1ajFFWFVJOXZRRUJ2andBQUJBQ2MvK3NHYndkU0FCVUFJQUJCQUdVQU0wQVpXMDRKY2xReE1TdzRDWEpDUTBNUkNBZ2JHeFlXSWlFQ2NnQXJNako4THpNWUx6TVJNeklSTXlzeU1pOHpLekl3TVVFekZTTWlMZ0lqSWdZVkZTTTFORFl6TWg0Q0FTYzJOalUxTXhVVUJnWWxGU0lHQmhVUkZCNENNekkyTmpVUk14RVVEZ0lqSWk0Q05SRTBOallGTlRJZUFoVVJGQTRDSXlJdUFqVVJNeEVVSGdJek1qNENOUkUwTGdJRkd5Z3FWNGh0WGkwelBvQi9ianhxYTMzK21Fd2hJNTR3UnY2dFBWODNIemxOTGtkdlA1dzhiSkpYVjVSdFBXcTNBeDVYbEcwOFBHMlVWMWFTYkR5Y0pFSlpOUzVOT1NBZ09VMEcxSDhtTVNZMU54SWtibXdtTWliK1dEY29SeWRmWmlaT1FIS2VRWU5rL2NaTGIwb2tPblJZQWF6K1ZHbWVhRFE0Y2FweUFqcVl5V1dlbmpseHFuTDl4bktxY1RnMGFKNXBBYXorVkVKaVFpQWtTbTlMQWpwTGIwb2tBQVFBZnYvckJhb0Y4UUFWQUNBQVFnQm1BRE5BR1Z4UEMzSlZNaklzT1F0eVEwUkVFUWdJR3hzV0ZpSWhCbklBS3pJeWZDOHpHQzh6RVRNeUVUTXJNakl2TXlzeU1ERkJNeFVqSWk0Q0l5SUdGUlVqTlRRMk16SWVBZ0VuTmpZMU5UTVZGQVlHSlJVaUJnWVZFUlFlQWpNeVBnSTFOVE1WRkE0Q0l5SXVBalVSTkRZMkJUVXlIZ0lWRVJRT0FpTWlMZ0kxTlRNVkZCNENNekkrQWpVUk5DNENCTU1xTEZlSWJWMHRNeitBZjI4OGFXdDkvcGRMSVNPZE1FWCt1akpQTFJvdlB5WXRURGtnbFRWaGcwNU9nMkUyWGFNQ3hFNkVZVFUxWVlST1RZTmhOWlVnT0V3dEprQXZHaG92UUFWemZ5WXlKalU0RWlSdWJDWXlKdjVQTnloSUpsOW1KazVBY0pjNWMxaisza0ppUUNBY04xUTQ2dXBlalY0dU0yZWJad0VpaXJkYWw1Y3pacHBvL3Q1bm0yY3pMbDZOWHVycU9GUTNIQ0JBWWtJQklrSmlRQ0FBQXdDYy8rc0dkZ2NFQUFjQUlBQTRBQ3RBRlRRbkNYSUZBZ0VCQndjdElRZ0lGUUp5SEE4SmNnQXJNaXN5RVRNek0zd3ZNeGd2TXpNck1qQXhRU0UxSVJjaEZTTUhNeEVVRGdJaklpNENOUkV6RVJRZUFqTXlOalkxQVRNUkZBWUdJeUl1QWpVUk14RVVIZ0l6TWpZMk5RTXgvc2NES3dIK3RhZ0xuRHhza2xkWGxHMDl3aDg1VFM1SGJ6OENqOEZ1dm5sU2pXYzZuQ0k5VkRGQ1p6c0dtR3hzZld2NzNtbWVhRFEwYUo1cEJDTDcza0ppUWlBNmRGZ0VJdnZlakx0Y05HaWVhUVFpKzk1Q1lrSWdPblJZQUFNQWdmL3JCYTRGc1FBSEFDQUFPUUFyUUJVMEp3dHlCUUlCQVFjSExTRUlDQlVHY2h3UEMzSUFLeklyTWhFek16TjhMek1ZTHpNekt6SXdNVUVoTlNFWElSVWpCek1SRkE0Q0l5SXVBalVSTXhFVUhnSXpNalkyTlFFekVSUUdCaU1pTGdJMUVUTVJGQjRDTXpJK0FqVUN3ZjdIQXlzRC9yT29CNVkxWVlOT1RvTmhOcm9hTHo4bVBGNDNBanU1WXF0c1NuMWNNNVljTkVZcUtVWTBIUVZGYkd4L2pQMG9YbzFlTGk1ZWpWNEMyUDBvT0ZRM0hERmpTd0xZL1NoK3BsTXVYbzFlQXRqOUtEaFVOeHdjTjFRNEFBSUFkdjZFQkx3RnhRQWhBQ1VBR1VBTUZoSU5BM0lsQUFBa0FRbHlBQ3ZOTXhFeks4d3pNREZsRlNJdUF6VTFORDRDTXpJV0ZoY2pMZ0lqSWc0Q0ZSVVVIZ016RVNNUkFxSmpxNGxoTkZDVnpYeWs3NFFCd0FGUW1HOVZpRjR5SUQxWWNyZkFpSjA4Y0pxK2JQcUg0NmxkZHR1V1pwTlFTSCtvWWZ4T2pIVlZMLzM4QWdRQUFnQmsvb0lENFFST0FCOEFJd0FaUUF3VkVRd0hjaUFBQUNJQkMzSUFLODB6RVRNcnpETXdNV1VWSWk0Q05UVTBQZ0l6TWhZV0ZTTTBKaVlqSWc0Q0ZSVVVIZ0l6RVNNUkFqMXhzSGsvUDNtd2NYbStiYTlCYjBWTWJVVWhJVVJ1c3JtRG1GYVh3MjBxYmNPV1ZtZXhjRU50UUVOeGlVY3FSNHR3US8zL0FnRUFBQUVBZEFBQUJKRUZQZ0FUQUFpeER3VUFMeTh3TVVFREJRY2xBeU1USlRjRkV5VTNCUk16QXdVSEF5alBBU0ZGL3QyMnFPSCszMFFCSmMzKzNrWUJJN3lsNWdFbFNRTXIvcFNzZktyK3Z3R09xM3VyQVcycmZhc0JTLzVwcTNzQUFBSDhaZ1NtL3ljRi9BQUhBQlczQmdZRUJBRUNBZ0VBTHpNdkVUTVJNM3d2TURGRElSVW5OeUVuRjluOTVhWUJBaHdCcFFVa2ZnSHBiQUVBQUFIOGNBVVgvMlFHRlFBVkFCSzJBUlFVRHdhQUN3QXZHc3d5TXhFek1ERkJNekkrQWpNeUZoVVZJelUwSmlNaURnSWpJL3h3S2xCOGEyazhiMytBUGpRdFhXMklWeXdGbHlZeUpteHVKQkk0TkNZeEpnQUFBZjFsQlJmK1ZBWllBQVVBQ3JJQWdBSUFMeHJOTURGQkp6VXpCeGYrQnFHMEFUd0ZGOFY4akhRQUFmMmtCUmYra2daWUFBVUFDcklCZ0FRQUx4ck5NREZCQnljM0p6UCtrcUpNT2dHMUJkekZRWFNNQUFBSStocit4QUcyQmE4QURRQWJBQ2tBTndCRkFGTUFZUUJ2QUFCQkl6UTJNeklXRlNNMEppTWlCZ0VqTkRZek1oWVZJelFtSXlJR0V5TTBOak15RmhVak5DWWpJZ1lESXpRMk16SVdGU00wSmlNaUJnRWpORFl6TWhZVkl6UW1JeUlHQVNNME5qTXlGaFVqTkNZaklnWURJelEyTXpJV0ZTTTBKaU1pQmhNak5EWXpNaFlWSXpRbUl5SUcvWGh4Y1dGaWNYQXROalVzQWxCeWNXRmljbkVzTnpRc3VuRnhZV0p4Y0N3M05DM0ZjWEZoWW5Gd0xEYzBMZjNBY1hGaFluRndMVFkwTGYyL2NuSmhZbkZ3TFRZMUxMRnhjV0ZpY1hBc056UXRwM0p4WVdKeWNTdzNOQ3dFODFOcGFWTW9QVDMrdzFOcGFWTW9QVDM5NFZOcGFWTW9QVDM5MFZOcGFWTW9QVDMrdkZOcGFWTW9QVDBFOGxOcGFWTW9QVDM5NFZOcGFWTW9QVDM5MFZOcGFWTW9QVDBBQ1Bvci9tTUJhd1hHQUFRQUNRQU9BQk1BR0FBZEFDSUFKd0FBUlRNWEF5TVRJeWNUTXdFMU53VVZKUlVISlRVQkp6Y2xGd0VYQndVbkFRY25BemNCTnhjVEIvMmxpUXQ2WUpTSURIcGdBZGdOQVUzNkdnMytzd1ZYWVFJQlFVVDdiR0VDL3NCRkFWMWlFWlJCQThWaEVaVkNQQTcrclFZRERnRlMvQ2FMREh4aWw0c01mR0lCQkdNUW1VVDhLV01SbVVVRURtSUNBVVpGKzFWakF2NjdSd0QvL3dDeS9wa0Z0QWNaQkNZQTNBQUFBQ2NBb1FFeEFVSUJCd0FRQkgvL3ZBQVZRQTRDSXdRQUFKaFdBUThCQVFGZVZnQXJOQ3MwQVAvL0FKMyttUVMzQmNJRUpnRHdBQUFBSndDaEFLSC82d0VIQUJBRGd2KzhBQlZBRGdJakJBRUFtRllCRHdFQkFYMVdBQ3MwS3pRQUFBTC8yd0FBQS93R2NnQVhBQnNBR2tBTUdnc2JBbklBRnhjTkRRb1NBRDh6RVRNdk15dk9NekF4UVNFeUZoWVZGQVlHSXlFUk14RWhNalkyTlRRbUppTWhBUlVoTlFFakFVV0V0RnhjdElUK05Ma0JFMUJnS2lwZ1VQNjdBWFQ5UkFMcVlLWnJhYXRsQm5MNkpqOWtOelZuUlFOZG1KZ0FBQUlBcVFBQUJOZ0ZzQUFEQUJzQUkwQVJBUUlGQUFNR0JnVUZFaEFUQW5JU0NISUFLeXN5RVRrdk14RXpNeEV6TXpBeFFRRUhBUU1oTlNFeU5qWTFOQ1ltSXlFUkl4RWhNaFlXRlJRR0JnTm9BWEJ1L3BFNS9uc0JoWEdNUVVHTWNmNm53QUlacGVOMmRlUUQxUDVyWmdHVS9zNmRTSUJTUzRSUit1NEZzSExKZ1l6R1p3QUFCQUNNL21BRUl3Uk9BQU1BQ0FBZUFEUUFKVUFVQUFNd0FRSXdKUm9QQzNJSEJuSWFCM0lHRG5JQUt5c3JLeEV6TWpJeUVUTXpNREZCQVFjQkFSRWpFVE1CRlJRT0FpTWlMZ0luTlQ0RE16SWVBZ2MxTkM0Q0l5SU9BZ2NSSGdNek1qNENBdGtCU20zK3RmN2J1cW9DNlRocm5HVm5ubTVCREF4Q2JaeG1acDVzTjdvaVIyNU1SbWRJTFFzUEwwZGxSVXR0UnlJQmhmNktad0YyQWt6NjlnWGEvZXdWZHNtVVVrU0N0bkp3ZUw2SFIwK1N5NUVWVVk5dFB6QlJaemYrL1RWZ1N5dy9ibzhBQUFJQW9nQUFCQ1FIQUFBREFBa0FGVUFLQWdZR0F3a0NjZ2dJY2dBcks4NHpFVE13TVVFUkl4RVRGU0VSSXhFRUpMcTMvVUxCQndEK0dBSG8vckNlK3U0RnNBQUFBZ0NTQUFBRFF3VjNBQU1BQ1FBVlFBb0NCZ1lEQ1FaeUNBcHlBQ3NyempNUk16QXhRUkVqRVJNVklSRWpFUU5EdXJiK0RMa0ZkLzRxQWRiK3c1bjhYd1E2QUFBQ0FMTCszZ1I4QmJBQUJRQWRBQmxBREFZSEJ4TVNBZ1VDY2dRSWNnQXJLekl2TXprdk16QXhRUlVoRVNNUkV6VXpNaDRDRlJRT0FpTW5NajRDTlM0REl3UXcvVUxBbjlhTjNadFFQSGV4ZFFKUmIwUWVBVFJtbW1jRnNKNzY3Z1d3L1BDaFRwWFdpSUxMakVtVE9XbVRXbVdiYWpZQUFnQ1MvdVFEdndRNkFCUUFHZ0FiUUEwQUFRRUxGeG9HY2hrS2Nnd0xBQzh6S3lzeUVUa3ZNekF4VXpVaE1oWVdGUTREQnljK0FpYzBKaVlqQVJVaEVTTVJ0d0VJbE9lRkFTbGFrbXN4WG0wdUFWU1NZQUdBL2d5NUFlU2ljZFNYTjR5SVp4U1NHRnQ3Um1hTVNBSldtZnhmQkRvQS8vOEFHLzZaQjRJRnNBUW1BTm9BQUFFSEFtRUdZUUFBQUF1MkJSc01BQUNhVmdBck5BRC8vd0FXL3BrR1BRUTZCQ1lBN2dBQUFRY0NZUVVjQUFBQUM3WUZHd3dBQUpwV0FDczBBUC8vQUxMK2xnVkVCYkFFSmdJOEFBQUFCd0poQkNQLy9mLy9BSjMrbVFTQkJEb0VKZ0R4QUFBQkJ3SmhBMkFBQUFBTHRnTVJBZ0VBbWxZQUt6UUFBQVFBcEFBQUJQOEZzQUFEQUFjQURRQVJBQzlBRnc4T0Rnc01CQVFNREFzSEJ3c0xBQkFEQ0hJSUFBSnlBQ3N5S3pJU09TOHpMeEV6RVRNdkVSSTVFVE13TVZNekVTTUJNeEVqQVRNQklTY2hCemNCSTZUQXdBRW9sWlVDSk9QK0x2NFdIUUd6Q1hFQjZ2RUZzUHBRQkREOWF3UVYvTitnaDZiOHNnQUVBSnNBQUFTQUJEb0FBd0FIQUEwQUVRQXRRQllQRGc0TEJBUU1EQXNIQndzTEFCQURDbklKQUFaeUFDc3lLeklTT1M4ekx4RXpFVE12RVRNUk16QXhVek1SSXdFekVTTUJNd0VoSnlFSE53RWptN201QVI2VmxRSEM0UDVuL2xRY0FYNEtkd0diNndRNis4WURSZjNHQXkvOWxLS0dodjJRQUFRQVJRQUFCb3NGc0FBREFBY0FEUUFSQUNOQUVSQVBEd3NLQ2dNT0JnaHlEUWNDQXdKeUFDc3lNaklyTWhJNUx6TXpFVE13TVVFVklUVWhFU01SSVFFaEp5RUJFd0UzQVFKWi9ld0NtOEFFUXYySC9xb2RBUUFCL0MzOTNXd0Nvd1d3bUpqNlVBV3cvTitnQW9INlVBS29xZnl2QUFBRUFEOEFBQVY5QkRvQUF3QUhBQTBBRVFBalFCRVFEdzhMQ2dvRERnWUtjZzBIQWdNR2NnQXJNakl5S3pJU09TOHpNeEV6TURGQkZTRTFJUkVqRVNFQklTY3pBUk1CTndFQ092NEZBbFc2QTMvK0FQNzhITlFCYXhyK2MzWUNBZ1E2bUpqN3hnUTYvWlNpQWNyN3hnSHFodjJRLy84QXFmNlpCYWtGc0FRbUFDd0FBQUVIQW1FRWlBQUFBQXUyQXc4S0FBQ2FWZ0FyTkFELy93Q2QvcGtFb2dRNkJDWUE5QUFBQVFjQ1lRT0JBQUFBQzdZRER3b0FBSnBXQUNzMEFBQUVBS2tBQUFlRUJiQUFBd0FIQUFzQUR3QWZRQThIQmdZS0FnTUREQXNDY2cwS0NISUFLeklyTWpJUk14RTVMek13TVVFVklTY0RGU0UxRXhFakVTRVJJeEVIaFAxMmRpWDg3UjdCQkYvQkJiQ1ltUDJPblowQ2N2cFFCYkQ2VUFXd0FBUUFrZ0FBQldvRU9nQURBQWNBQ3dBUEFCOUFEd2NHQmdvQ0F3TU1Dd1p5RFFvS2NnQXJNaXN5TWhFekVUa3ZNekF4UVJVaE5RTVZJVFVURVNNUklSRWpFUVZxL2k0My9jTW51UU5rdWdRNm1abitLNWFXQWRYN3hnUTYrOFlFT2dBQUFnQ3cvdDRIelFXd0FBY0FId0FaUUF3SUNRa1VCQWNDY2dZSWNnSUFMeXNyTWk4NUx6TXdNVUVSSXhFaEVTTVJBVFV6TWg0Q0ZSUU9BaU1uTWo0Q05TNERJd1Qvd1AweXdRUHkxbzNkbTFBOGQ3RjFBbEZ2UkI0Qk5HYWFad1d3K2xBRkV2cnVCYkQ4OEtGT2xkYUlnc3VNU1pNNWFaTmFaWnRxTmdBQUJBQ1MvdVFHc0FRNkFCUUFHQUFjQUNBQUkwQVJIaGNZR0FBQkFRc2RIQVp5R3dweURBc0FMek1yS3pJUk9TOHpNaEV6THpBeFFUVWhNaFlXRlJRT0FnY25QZ0kxTkNZbUl3RVZJVFV6RVNNUklSRWpFUU9OQVJHYTc0a3BXcE5xTVY1c0xsbWJaZjYxL2QwYnVRTmx1Z0hrb25IVWx6ZU1pR2NVa2hoYmUwWm1qRWdDVnBtWis4WUVPdnZHQkRvQUFRQngvK1FGb3dYRkFFTUFIVUFPT1F3TUl5SURjZ0FCQVM0WENYSUFLekl5RVRNck1qSVJNekF4WlJVaUpDWUNOVFUwUGdJek1oNENGUlVVQmdZRUl5SXVBalUxTkQ0Q014VWlEZ0lWRlJRZUFqTXlQZ0kxTlRRdUFpTWlEZ0lWRlJRZUFnV2p1LzdOM25jN2JKZGNYWmR1TzJTNC93Q2RqT1drV0VKNnFXYytZa1VrTzIrZFkzaTdnVVFlT0ZJME0xRTRIbFNrOElXaGFzSUJDNkRqZGNlVlUxR1V5bm56bGYrK2FtcSsvWk9zaHVXcllLUkdmcWxqcm5MQ2tGRlNrc055K0ZhTVp6YzVhSXRTNkg3UWxWRUFBUUJ1LytzRW5RUlFBRU1BSFVBT09Rd01JeUlIY2dBQkFTNFhDM0lBS3pJeUx6TXJNaklSTXpBeFpSVWlMZ0kxTlRRK0FqTXlIZ0lWRlJRT0FpTWlMZ0kxTlRRK0FqTVZJZzRDRlJVVUhnSXpNajRDTlRVMExnSWpJZzRDRlJVVUhnSUVuWjM5c2w4c1VuWkpTWFpUTEV5T3duZHV0WUpITTEyQlR5WTlMQmdxVUhGSVVJQmFMeEVpTVNBZ01pRVJRNEM1a1oxWm45VjhaMTZjY3o5RWVxUmZhWG5RbkZaYW9kZDlPV2F0Z0VpZEwxVjBSRHRjbm5aQlAzQ1dXR3c4YVU4dEowaGpPMnRlblhFK0FQLy9BRHIrbVFUNEJiQUVKZ0E4QUFBQkJ3SmhBOWNBQUFBTHRnRVBCZ0FBbWxZQUt6UUEvLzhBS3Y2WkJBWUVPZ1FtQUZ3QUFBRUhBbUVDNVFBQUFBdTJBUThHQUFDYVZnQXJOQUFBQXdBMC9xRUdsQVd3QUFNQUNRQVJBQjFBRGdrTkRRZ0tDSElGRUF3Q0F3SnlBQ3N5TWpJdkt6SXlFVE13TVVFVklUVUJBeU1SSXpVRkVUTVJJUkV6RVFQdC9FY0dZQkt0ai94bHdnTE93QVd3bUpqNjh2My9BVitpb2dXdyt1MEZFL3BRQUFNQUgvNi9CUmNFT3dBREFBc0FFUUFmUUE4Q0F3TU5DZ1VHY2dnSEJ4QUVDbklBS3pJeUVUTXJNaTg1THpNd01VRVZJVFVCRVRNUklSRXpFVGNESXhFak5RTGovVHdCRXJvQjhybUJFcWFOQkR1WW1QdkZCRHI4WGdPaSs4YVkvaWNCUVpnQS8vOEFsLzZaQldjRnNBUW1BT0VBQUFFSEFtRUVSZ0FBQUF1MkFoMFpBQUNhVmdBck5BRC8vd0JvL3BrRVh3UThCQ1lBK1FBQUFRY0NZUU0rQUFBQUM3WUNHd0lBQUpwV0FDczBBQUFEQUpjQUFBVEpCYkFBQXdBWkFCMEFJMEFSQXdNS0NoVUNBaFVWQkJ3SWNoc0VBbklBS3pJckVUa3ZNeThSTXhFekx6QXhRUkVqRVFFekVSUVdGak15UGdJM0ZRNERJeUltSmpVQk14RWpBeGVWL2hYQlFvWmtQSEZzYVRNeFlXZDFSNXJkZGdOeHdjRUQrLzFEQXIwQnRmNDVjWUEwQ2hJYUQ1NFBHaElLV2Nha0FjZjZVQUFBQXdDRUFBQUQyUVE4QUFNQUJ3QWJBQ05BRUFBQUdCZ05BUUVORFFVS2NoSUVCbklBS3pJck1pOHpmUzhSTXhFekdDOHdNVUVSSXhFQkVTTVJFeFVPQWlNaUppWTFFVE1SRkJZV016STJOZ0tHbFFIb3VYbzRjMzlLZ0x4bXVUWm9TMGgvZFFNYi9jb0NOZ0VmKzhZRU92NFBtQlVoRTFtMWlnRTgvc1JhY0RVVElBQUFBZ0NKQUFBRXV3V3dBQlVBR1FBWlFBd0JGd1lSRVJjWUFuSVhDSElBS3lzUk9TOHpFVE13TVdFakVUUW1KaU1pRGdJSE5UNERNeklXRmhVQkl4RXpCTHZCUW9WbFBIRnNhVE14WVdkMlJwdmNkdnlQd2NFQngzSi9OQW9TR2crZUR4b1NDbG5HcFA0NUJiQUFBZ0EvLytrRnZnWEVBQWtBTmdBbFFCSUZIUUVCSFIwR0hCd0tKQlVEY2k4S0NYSUFLeklyTWhFNUx6TXpFVE12RVRNd01WTXpGQllXTXhVaUppWUJJaTRDTlRVMFBnSVhNaDRDRlJVaE5TRTFOQzRDSXlJT0FoVVZGQjRDTXpJMk54Y09BaitZTkc1V2c3TmFBNnFWNXA1UlZKWEZjb2JMaVVYOE5nTUpKVktHWVZTRFdpOHdaNkZ5ZktZM0x4ZGtuZ1E1U0cwK2pGNnQvQ1JjcU9XSitZbmxwMXNCWGE3Mm1IR0xJVjJpZWtWSWdLZGcrV0dwZ0VrNEhJOFFMeVVBQXYvZC8rd0VaQVJPQUFnQU5RQWxRQklFSEFFQkhCd0ZHeHNKSXhRSGNpNEpDM0lBS3pJck1oSTVMek16RVRNdkVUTXdNVU16RkJZekZTSW1KZ0VpTGdJMU5UUStBak15SGdJVkZTRTFJVFV1QXlNaURnSVZGUlFlQWpNeU5qY1hEZ0lqbFdOdGRaOVJBdUZ4dDROR1RvYXFXM1dvYlRUODF3SnZBeDQ3WVVjL2Frd3FLMU4zVEdLSU0zRWpiWjBEV1dGM2gxV2UvUDlOak1CeUtvVFBrRXBRajhGeVU1Y09ObWxXTXpWb2xtSXFUWWRtT2xCRFdUVmdQQUFEQUtUKzFnVE5CYkFBQXdBSkFDRUFJVUFRQ2dZR0N3Z0hCeGNXQ1FNQ2NnSUljZ0FyS3pJdk16a3ZNek16RVRNd01VRVJJeEVoQVNFbk13RUJOVE15SGdJVkZBNENJeWN5UGdJMUxnTWpBV1RBQkNuOWNQN2FIZkFDQWYydDNJemVtbEU4ZUxOM0FsRnVSQjBCTTJhWFpBV3crbEFGc1B6bHFnSngvT1duVFpYWGlYL0xqMHVZT21tUlYyV1phVFVBQUFNQW0vNzlCQm9FT2dBREFBa0FIZ0FoUUJBV0ZRa0djZ1lLQ2djTEN3RURCbklCQUM4ckVqa3ZNek1STXlzdk16QXhRUkVqRVNFQkl5Y3pBUUUxSVRJV0ZoVU9Bd2NuUGdJbk5DWW1Jd0ZVdVFOLy9lTG1ITFlCaWYyeUFSV1o3NGtCS1ZtVGFqRmViQzhCV1pwbEJEcjd4Z1E2L1pTaUFjcjlsS0ZpeDVZMWhvSmpFNUlYVlhKRFpuNDZBUC8vQUREK21RV3BCYkFFSmdEZEFBQUJCd0FRQkhUL3ZBQUx0Z01rQmdBQW1GWUFLelFBLy84QUxQNlpCTGdFT2dRbUFQSUFBQUVIQUJBRGcvKzhBQXUyQXlRR0FRQ1lWZ0FyTkFBQUFRQ3kva3NFL3dXd0FCa0FHVUFNR1FoeUZ3SUNFUW9GQUFKeUFDc3lMek01THpNck1ERlRNeEVoRVRNUkZBWUdJeUltSnpjV0ZqTXlOalkxRVNFUkk3TEJBc3ZCVDVKbUh6VWVEaEJERHlzOUlQMDF3UVd3L1c4Q2tmbjhjcDFTQndxYUJnY3ZWejBDMXYxK0FBQUJBSkwrU3dQMkJEb0FHUUFkUUE4WkNuSVhBZ0lBRVFvUGNnVUFCbklBS3pJck1oSTVMek1yTURGVE14RWhFVE1SRkFZR0l5SW1KemNXRmpNeU5qWTFFU0VSSTVLNUFmRzZUWkZsSGpVZER3OUZEU3c5SVA0UHVRUTYvaXNCMWZ0dGNKeFFCd3FVQmdjdldEMENLUDR4QVAvL0FLbittUVc5QmJBRUpnQXNBQUFCQndBUUJJai92QUFMdGdNV0NnRUFtRllBS3pRQS8vOEFuZjZaQkxZRU9nUW1BUFFBQUFFSEFCQURnZis4QUF1MkF4WUtBUUNZVmdBck5BRC8vd0NwL3BrRytnV3dCQ1lBTVFBQUFRY0FFQVhGLzd3QUM3WURHdzhBQUpoV0FDczBBUC8vQUo3K21RWUlCRG9FSmdEekFBQUJCd0FRQk5QL3ZBQUx0Z01aQ3dFQW1GWUFLelFBQUFFQVh2L3JCUklGeEFBc0FCdEFEUm9MRVJRVUN5VUFBM0lMQ1hJQUt5c3lFVGt2TXhFek1ERkJNaFlXRWhVVkZBSUdCaWNpTGdJMU5TRVZJUlVVSGdJek1qNENOVFUwTGdJaklnWUhKejRDQW9HZjlhZFdYYVhhZlpUaW1FMEVQdnlESzJDZGNtS1lhVFkxY0xCOGdyQTdMeGhxcHdYRVo3disvNXRlbS83K3VtWUJYSzcxbUh5VklsMmllVVZVbGNSd1huSEVsVlE0SEk4UU1DVUFBZ0JvLytzRUxBV3dBQWNBSlFBZlFBOEZDQWdFSlNVQUhCSUpjZ2NBQW5JQUt6SXJNaEU1RVRNekVUTXdNVk1oRndFak5RRWhBVGN5RmhZVkZBNENJeUl1QWpVekZCWVdNekkyTmpVMEppWWpJNVFEYXdIK0MzRUJnLzEzQVFhV29lTjRTWVMwYTFlbmlWSEJSbjFVWDRaSFNwRnBqZ1d3ZlAyc2RBRysva0VCYU1lUFpwOXRPVEZub1hCSmVrbEZlVXhwaFQ0QUFnQnEvblVFS1FRNkFBY0FKUUFmUUE0SUJRVUVKU1VBSEJnU0J3QUdjZ0FyTWkvTU14STVMek16RVRNd01WTWhGd0VqTlFFaEFUTXlGaFlWRkE0Q0l5SXVBalV6RkJZV016STJOalUwSmlZakk1UURaUUwrR253QmMvMklBUVdSb2VWNVNZT3phMWFuaDFHNVI0QlZZWWRJVEpOcWpRUTZkdjJsZEFIRS9qZG14WTVtbm0wNU1XZWhiMHA4U2taNlRtcUVQUUQvL3dBNS9rc0VkQVd3QkNZQXNVUUFBQ1lDTnFwQUFBY0NaQUR4QUFELy93QTYva3NEbHdRNkJDWUE3RThBQUNZQ05xdU5BQWNDWkFEaEFBRC8vd0E2L2tzRkR3V3dCQ1lBUEFBQUFBY0NaQU9uQUFELy93QXEva3NFSFFRNkJDWUFYQUFBQUFjQ1pBSzFBQUFBQVFCWEFBQUVaUVd3QUJnQUVyY0RBQUFMRUEwQ2NnQXJMek01THpNd01VRWhGU0VpQmdZVkZCWVdNeUVSTXhFaElpWW1OVFErQWdKRkFZeitkR3VGUFQyRmF3RmZ3ZjNnbjkxeVFINjRBM09lVG45SlNZVlVCUlA2VUhUSmdHR2dkVUFBQUFJQVdnQUFCbWNGc0FBWUFDMEFIMEFPR3dzTEVDVWxBd0FBR2hBTkFuSUFLeTh6T1M4ek15OFJNeEV6TURGQklSVWhJZ1lHRlJRV0ZqTWhFVE1SSVNJbUpqVTBQZ0lCSXpVM1BnSTNOaTRDSnpNZUFnY09BZ0pJQVkzK2MydUVQVDJFYXdGZ3dQM2dvTnh5UUg2NEF2R05qVXBqTkFJQkNBOFhEN29TSHhRQ0FuVzlBM09lVG45SlNZVlVCUlA2VUhUSmdHR2dkVUQ4alp3QkFVTjVVU2RUVmxNbk5HOXhObzYrWHdBREFHVC82UVp2QmhnQUZnQXJBRWNBSFVBUU0wUUxjanN0QVhJZEVndHlKd1lIY2dBck1pc3lLeThyTWpBeFV6VTBQZ0l6TWg0REZ4VU9BeU1pTGdJM0ZSUWVBak15TmpZM05TNERJeUlPQWdFUk14RUdGaFl6UGdNM05pWW5NeFlXQnc0REl3WW1KbVE0YTU1bVRuMWdSQ29KQ3p4bWxHTmtuV3c0dWlCRGEwdGNkMGdVREMxSFowWk1hMFFnQWcyNkFTcE5OVVpyU2ljQkFpRWV0QnNxQWdKTmhhcGZhNXhZQWZVVmdOU2JWUzVZZnFCZ1hIZStoMGROakwrSEZVMkZZemhQZ0V2eE4yZFJNRUoybWY3NEJMLzdRVUJnTmdFNGFKSmJaTXRrWWN0bmk4K0lSQUpLb3dBQ0FEYi82UVhVQmJBQUlBQkdBQ0ZBRUNnbkp3SUJBUTR5UXdseU9nME9BbklBS3pJdkt6SVJPUzh6TXhFek1ERkJJelV6TWpZMk5UUXVBaU1oTlNFeUhnSVZGQTREQnlJR0JnY0dCaE0xTlRRbUppTTNNaDRDRlJVVUZoWXpQZ00zTmlZbk14WVdCdzRESXdZbUpnSEN3NUJ5aTBBaVNYTlIvcGtCWjNpNWZVRWVPbFZ3UlFNSEJ3TW9HT2s5Y1U4U2U2VmlLaU5ETGp4ZVFDTUJBaUlldXhvckFnSkpmS0JaWlpWVEFubWVPWEpWT1Z4REk1NDFhSmxsT0dKVFFURVFEUXdCQ2dUK3N3SkJUblZDYlRaamgxQkZNVXdzQVRob2tGaGt5MlJoeTJlS3pvbEZBa0tSQUFBQ0FESC81QVRwQkRvQUhRQkNBQ1ZBRWo0OVBSc0NBUUVOS2lvaU13dHlEQTBHY2dBck1pc3lNaThST1M4ek16TVJNekF4UVNNbk16STJOalUwSmlZaklTY2hNaFlXRlJRT0FnY09BZ2NHQmdVMUJoWXpQZ00zTmlZbk14WVdCdzRESXdZdUFpYzFOQ1ltSXpjeUZoWVZBWFRzQXJ4VWFERXlhMVgrK2dZQkRJbS9aQ1ZJYTBVQ0JRVURJaEFCWEFFb056aFZPeUFCQWlFZ3RCb3NBZ0pGZFpSU1EyWkdKUU13WGtVamk1MUJBYnFXS0VveE0xQXZsVXlRWlRKU1FEQVJBUlFVQWdjRDZnRW5NZ0VwVEd4RVRhVk5UYUpRY0todk53RWFPbDFCVERCRUpHdERkRXNBQXdCVC90WUQ5Z1d3QUI4QU5BQS9BQjlBRGpvNVB5d01EUUp5SVNBZ0FRRUNBQzh6RVRNUk15c3lMek12TXpBeFFTTTFNekkyTmpVMEppWWpJVFVoTWhZV0ZSUU9Bd2NpQmdZSERnSUhOeklXRmhVVkZCWVdGeFVqTGdJMU5UUW1KZ0VWRkFZSEp6NENOVFVCak55aWQ0NUFQb1p0L3UwQkU1L2FjUjA1Vlc5RUF3Z0hBeG9aRVE0UnByeE9EUjRadmg0YkJrQjJBaGxjVTJrZ0xCY0NlWmc4ZEZOUWRFQ1lYcmlJT0dGU1FqRVFEQXNCQmdZREJHMWZxR3lJS1U1Q0dSa2NYRnNhaEU5M1F2NWNsVnZMUkVrc1cyRTJtQUFBQXdCNS9zWUQyUVE2QUI0QU13QStBQjVBRGpnZ0h4OENBUUUrS3dvTURRWnlBQ3N5UHpNNUx6TXpFVE12TURGQklUVXpNalkyTlRRbUppTWhOeUV5SGdJVkZBNENCd1lHQnc0Q0J6Y3lGaFlWRlJRV0ZoY1ZJeTRDTlRVMEppWUZGUlFHQnljK0FqVTFBY3orOXRSV2FqQXdhbGIrNHdFQkhHYWViamdsU0d0R0JBa0VGaE1OS0NXS25VRUtHaGUvR3hZRk1GNEI0VnRUYWlBc0Z3RzVsaWhLTWpSUUxaWXJVM2RNTTFKQk1CQUJKd0lFQmdRQ2EwaCtVV0VZT3pVUkV4SkdSUkJmTmswcTlKVmJ5MFJKTEZ0aE5wZ0FBQU1BUmYvckIzRUZzQUFSQUJVQU1nQWRRQTRtSmg0dkNYSVhGQUFWQW5JTENBQXZNeXN5TWpJck1qSXZNREZCTXdNT0JDTWpOVGMrQkRjQkZTRTFBUkV6RVJRZUFqTXlQZ0kzTmlZbk14WVdCdzRESXlJbUpnR0t3Q0VISVR4Z2kyRTBLRGhST1NRVkJnTGYvWUlDV2NFWExENG5SR2xJSndFQ0lSNjdHeW9DQWs2RXExOXRvbG9Gc1AwM212R3hjemlkQXdRcldJekxpQUtxbnA3N3F3UlYrNnN2VGpnZU9HZVFXbVRMWkdITFo0dlBpRVJLb2dBREFELy82d1k2QkRvQUVRQVZBRE1BSDBBUUp5Y2VMd3R5RnhRQUZRWnlDd2dLY2dBck1pc3lNaklyTWpJdk1ERkJNd01PQkNNak5UYytCRGNCRlNFMUFSRXpFUlFlQWpNeVBnSTNOaVluTnhZV0J3NERJeUl1QWdFOHVSd0hIalpQYmtnNktTbzlLaHNRQkFJcC9oUUJ6TG9YTFQ0bk9GWTdJQUVDSVIyekdpc0NBa1YwbGxOUWdsNHpCRHI5OW5tNWhGTW5vd01ESWtOcWttRUJ6NW1aL1I4QzRmMGZNRTg1SGpKY2dsRmZ3RjRCWGNCaGY3NStQaWxZaXdBQUF3Q3EvK2tIY1FXd0FBTUFCd0FqQUNCQUVSWVdEaDhKY2dnQ2NnQURBd1lJQkFKeUFDcy9PUzh6S3lzeU1pOHdNVUVoRlNFRE14RWpBVE1SRkJZV016NEROelltSnpNV0ZnY09BeU1HSmlZbkFVMEMrUDBJbzhEQUEzL0FLRXcwUkdsSkp3RUNJaDY2R3lzQ0FrNkVxMTlzbmxnR0F4K2VBeS82VUFXdys2cytZRFVCTjJlUVdtVExaR0hMWjR2UGlFUUNTcVNFQUFBREFKRC82Z1pOQkRvQUF3QUhBQ1VBSWtBU0dSa1FJUXR5Q1FaeUF3SUNCUWNHY2dVS0FEOHJFamt2TXlzck1qSXZNREZCRlNFMUV4RWpFUUVSTXhFVUhnSXpQZ00zTmlZbk54WVdCdzRESXdZdUFnTmQvY1VvdWdLenVoY3NQeWM0VnpzZ0FRSWlIYk1hTEFJQ1JIV1dWRkIvWERNQ1pKYVdBZGI3eGdRNi9SOEM0ZjBmTUU4NEh3RXhYSUpSWDhCZUFWM0FZWCsrZmo0QktGaU5BQUVBZHYvckJLSUZ4UUFyQUJWQUNoSUxBM0lsSlIwQUNYSUFLekl5THlzeU1ERkZJaTRDTlJFMFBnSXpNaFlYQnlZbUl5SU9BaFVSRkI0Q016NENOelltSnpNV0ZnY09BZ0s1Z2RXYVUxT2ExWUZ6cmtJN1FKRlhXNDlrTkRSa2oxdGVna1FDQWgwWHV4TW5BZ0tJM0JWZHArR0ZBUWFGNGFkZExDdUxJU05JZnFaZS92aGZwMzlJQVVlQldWbTNXRmkxVzVmR1lnQUFBUUJtLytzRHh3Uk9BQ3NBRlVBS0lSb0hjZ2NIQUE4TGNnQXJNakl2S3pJd01XVStBamMwSmljekZoWUhEZ0lqSWk0Q05UVTBQZ0l6TWhZWEJ5WW1JeUlPQWhVVkZCNENBbEZIVVNNQkNRdXlDeEVCQW1LbmFuYTNma0ErZUs5eFlJMHNMQzU1Umt4c1JTQWpTWFdEQVNwTE5EaDdPVHAzTzIyUFJsZVh3MndxYk1PV1Z5SWZrQnNlUkhHS1JTcEdpbkZFQUFJQUpQL3BCVWdGc0FBREFDQUFGMEFMRkJRTUhRbHlCUUlEQW5JQUt6SXlLekl5THpBeFFSVWhOUUVSTXhFVUhnSXpQZ00zTmlZbk14WVdCdzRESXdZbUpnU2srNEFCMjhFV0xENG5SV2xJSmdJQ0loNjdHeXNEQWsyRXEyQnNuVmtGc0o2ZSs2c0VWZnVyTDAwNEh3RTNaNUJhWk10a1ljdG5pOCtJUkFKS3BBQUNBRWIvNmdTNEJEb0FBd0FnQUJkQUN4TVRDeHdMY2dVQ0F3WnlBQ3N5TWlzeU1pOHdNVUVWSVRVQkVUTVJGQllXTXo0RE56WW1Kek1XRmdjT0F5TUdMZ0lEMGZ4MUFXZTVLVTQxT0ZZOElBRUNJaDJ5R2l3Q0FrVjBsbE5RZ0Z3MEJEcVdsdjBmQXVIOUgwQmdOZ0VwVFcxRVQ2ZFBUNlJTY2Fsdk53RW9XSTBBQWdDWC8rc0Uvd1hGQUNBQVB3QWpRQkVBSWo4L0FnSVhOVEVzQTNJUkRSY0pjZ0FyTXN3cnpETVNPUzh6RWprNU1ERkJNeFVqSWc0Q0ZSUWVBak15TmpZMU14UU9BaU1pTGdJMU5ENENCU01pTGdJMU5ENENNeklXRmhVak5DWW1JeUlHQmhVVUhnSXpNd0xEdjdsYWlsMHdNMktQVzJ5aVdzQmVuOFZtZnRLYlZVcU96d0ZFdjNuRWpVeE9rc3gra2ZLUndGdWFYMzJnVENkVWhGeTVBeEI1SDBCalF6bGhTQ2hKZWtsd29XY3hPVzJmWmx1TllESlZPV1NFUzJhYWFUVml0WDFJYno5RmMwVTJXVUlqLy84QU1QNUxCYTBGc0FRbUFOMEFBQUFIQW1RRVJRQUEvLzhBTFA1TEJMd0VPZ1FtQVBJQUFBQUhBbVFEVkFBQUFBSUFjQVJ4QXNrRjF3QUZBQThBRXJZRkJRMEhBZ0lIQUM4ekx4RE5NaTh3TVVFMUV6TVZBeVUxTXhVVUZoY0hKaVlCa25URDMvNkdweW9xU1ZaY0JJUVJBVUlWL3NMK1ZVOUlhQzA2TFkvLy93QW1BaDhDRGdLM0JBWUFFUUFBLy84QUpnSWZBZzRDdHdRR0FCRUFBQUFCQUtJQ2l3U01BeU1BQXdBSXNRTUNBQzh6TURGQkZTRTFCSXo4RmdNam1KZ0FBUUNRQW9zRnlBTWpBQU1BQ0xFREFnQXZNekF4UVJVaE5RWEkrc2dESTVpWUFBSUFEZjVxQTZFQUFBQURBQWNBRHJRQ0E0QUdCd0F2TXhyT01qQXhSUlVoTlNVVklUVURvZnhzQTVUOGJQNlltUDZZbUFBQkFHRUVNUUY0QmhRQUNnQUlzUVVBQUMvTk1ERlROVFEyTmpjWEJnWVZGV0VwVGpkcExqSUVNWGs5aFhzdFNVS0xVWHdBQVFBd0JCWUJTQVlBQUFvQUNMRUZBQUF2elRBeFFSVVVCZ1lISnpZMk5UVUJTQ2xPTjJvdk1RWUFnRHlGZXk1SlFvdFJnd0FBQVFBay91VUJQQUMyQUFvQUNMRUZBQUF2elRBeFpSVVVCZ1lISnpZMk5UVUJQQ2xPTjJvdk1MWm5QSVY3TGtoQ2pGRnFBQUVBVHdRV0FXY0dBQUFLQUFpeEJnQUFMODB3TVZNekZSUVdGd2N1QWpWUHVERXZhVGRQS1FZQWcxR0xRa2t1ZTRVOEFQLy9BR2tFTVFLN0JoUUVKZ0dFQ0FBQUJ3R0VBVU1BQVAvL0FEd0VGZ0tIQmdBRUpnR0ZEQUFBQndHRkFUOEFBQUFDQUNUKzBnSmtBUFlBQ2dBVkFBeXpFQVVMQUFBdk1zMHlNREZsRlJRR0JnY25OalkxTlNFVkZBWUdCeWMyTmpVMUFUd3BUamRxTHpBQjRTbE9OMm92TVBhblFJeUJNRWxIbEZhcXAwQ01nVEJKUjVSV3FnQUFBZ0JHQUFBRUpBV3dBQU1BQndBVlFBb0dCd2NDQXdKeUFoSnlBQ3NyRVRrdk16QXhRUkVqRVFFVklUVUNrTGtDVGZ3aUJiRDZVQVd3L29xWm1RQURBRmYrWUFRMEJiQUFBd0FIQUFzQUhVQU9Dd29HQndjQkF3b1NjZ01DY2dFQUx5c3JFUkk1THpNUk16QXhRUkVqRVFFVklUVUJGU0UxQXA2NUFrLzhJd1BkL0NNRnNQaXdCMUQraXBtWi9GNlltQUFCQUlzQ0dBSWpBOHNBRFFBSXNRUUxBQy9OTURGVE5UUTJNeklXRlJVVUJpTWlKb3R0WGw5dWJWOWViZ0xjS1Zad2NGWXBWVzl2Ly84QWxQLzBBeThBMGdRbUFCSUVBQUFIQUJJQnVRQUEvLzhBbFAvMEJNNEEwZ1FtQUJJRUFBQW5BQklCdVFBQUFBY0FFZ05ZQUFBQUFRQlNBZ0lCTFFMV0FBc0FDTEVEQ1FBdnpUQXhVelEyTXpJV0ZSUUdJeUltVWpnMU5qZzROalU0QW1zdFBqNHRMRDA5QUFjQVJQL3JCMWNGeFFBUkFDTUFOUUJIQUZrQWF3QnZBQ2xBRTE5V1ZqSm9UVTFFS1NrN01nMFhEZzRnQlFVQVB6TXpMek0vTXpNdk16TXZNeEV6THpNd01WTTFORFkyTXpJV0ZoVVZGQVlHSXlJbUpqY1ZGQllXTXpJMk5qVTFOQ1ltSXlJR0JnRTFORFkyTXpJV0ZoVVZGQVlHSXlJbUpqY1ZGQllXTXpJMk5qVTFOQ1ltSXlJR0JnVTFORFkyTXpJV0ZoVVZGQVlHSXlJbUpqY1ZGQllXTXpJMk5qVTFOQ1ltSXlJR0JnRUJKd0ZFU0laY1hvWkhSNFZkWFlaSml5TklOalpISWlOSE56VkhJd0pvU0laY1dIMURRM3hYWFlaSml5TklOalpISWlOSE56VkhJd0ZTUkg1V1hvVklSNFZkVjM5RWVDUkhOalpHSXlOSE56VkhJLzdwL1RscEFzY0VTMDFUaUZKU2lGTk5VWWhTVW9pZVRTNVNNek5TTGswdlV6TXpVL3hRVGxLSVVsS0lVazVTaUZKU2lLQk9MbE16TTFJdlRpOVNNek5TZlU1U2lGSlNpRkpPVW9oU1VvaWdUaTVUTXpOU0wwNHZVak16VWdOTis0NUNCSElBQUFJQWJBQ1pBaUVEdFFBRUFBa0FFa0FKQVFVRENRSUlCZ1lBQUM4dkZ6a3dNVUVCSnpVQkF3RWpBVFVDSWY3N3NBRW5kd0VGanY3WkE3WCtiZ0VOQVlUK2QvNXRBWVVOQUFJQVdnQ1pBZzhEdFFBRUFBa0FEclFDQ0FnRkFBQXZMemt2TXpBeGR3RVhGUUVETXdFVkIxb0JCYkQrMlk2T0FTZXdtUUdTQVEzK2ZBTWMvbnNOQVFBQkFEd0Fid05yQlNNQUF3QU9zd0FEQWdFQWZDOHpHQzh6TURGQkFTY0JBMnY5T1dnQ3h3VGgrNDVDQkhMLy93QlJBcEFDbmdXN0JnY0Ixd0FBQXB2Ly93QTJBcHNDdkFXd0JnY0NNQUFBQXB2Ly93QmNBcEFDcUFXd0JnY0NNUUFBQXB2Ly93QldBcEFDckFXNkJnY0NNZ0FBQXB2Ly93QTdBcHNDcGdXd0JnY0NNd0FBQXB2Ly93QlBBcEFDbndXN0JnY0NOQUFBQXB2Ly93QktBcFFDbFFXN0JnY0NOUUFBQXBzQUFnQjZBb3NDK1FXNkFBUUFHUUFUdHhZTEJBUUxBaEVDQUM4elB6TXZFVE13TVVFUkl4RXpFd2MwUGdJek1oWVdGUkVqRVRRbUppTWlCZ1lCSktxQkVpNG1TV2RBVDNWQXFpUkJMRDFQSlFVQS9Zc0RJUDZMQVZTT2FUby9pR3orQkFIY1NWVWxRVzRBLy84QVVmNkZBcDRCc0FZSEFkY0FBUDZRLy84QWUvNlJBZThCcGdZSEFkWUFBUDZSLy84QVF2NlJBcXNCc1FZSEFkVUFBUDZSLy84QVAvNkdBcHNCc1FZSEFpOEFBUDZSLy84QU52NlJBcndCcGdZSEFqQUFBUDZSLy84QVhQNkdBcWdCcGdZSEFqRUFBUDZSLy84QVZ2NkdBcXdCc0FZSEFqSUFBUDZSLy84QU8vNlJBcVlCcGdZSEFqTUFBUDZSLy84QVQvNkdBcDhCc1FZSEFqUUFBUDZSLy84QVN2NktBcFVCc1FZSEFqVUFBUDZSQUFRQVd3QUFCR2dGeEFBREFCNEFJZ0FtQUNKQUVDSWhKU1ltQVJzWEVnVnlDUUlDQVF3QVB6TVJNeXZNTXhJNUx6UE9NakF4WVNFMUlRRVRGZ1lISno0Q05RTTBOall6TWhZV0ZTTTBKaVlqSWdZR0FSVWhOUUVWSVRVRWFQdjNCQW45U3hZQk9EaXVJeWtSRm5USmY0TzRZc0JEYkQ1Q2F6OEJZLzFGQXJ2OVJaMERjdjJEWHFNcE5RbFRiQ3dDZm9yRGFHS3ZkRlJtTGtGOS92QjlmZjc2ZlgwQUF3QWZBQUFHTndXd0FBTUFCd0FSQUNKQUVBTUNCZ3NPRUFjSERSRU9CSElLRFF3QVB6TXJNaEk1THprU09UUE9NakF4UVJVaE5RRVZJVFVCRVNNQkVTTVJNd0VSQmpmNTZBWVkrZWdGT01IOUk4SEJBdUFEclppWS90U1ltQU12K2xBRVkvdWRCYkQ3bWdSbUFBQURBS2YvN0FZREJiQUFGd0FiQUMwQUkwQVNJaWtOSEJrWUJuSUNBUUVPREE4RWNnNE1BRDhyTWhJNUx6TXJNc3cvTXpBeFFTTTFNekkyTmpVMEppWWpJeEVqRVNFeUZoWVZGQVlHQVJVaE5STXpFUlFXRmpNeU5qY1hCZ1lqSWlZbU5RSWg2dXAwZHlvcWQzVEJ1UUY2cGN4ZVhzd0RPUDI0eGJraU5oOFhNdzBCRmtjeFJISkVBaldZVklaS1M0ZFYrdWdGc0hUSmdJREtkQUlGam80QkIvdkxOemdTQ1FPWEJ3MDJmMndBLy84QXFmL3NDQkVGc0FRbUFEWUFBQUFIQUZjRVZRQUFBQVlBSHdBQUJjd0ZzQUFEQUFjQURRQVNBQmNBSFFBcVFCUWRGUW9LRWdZSEF3SUNFUklFY2hNYkd3Z1JEQUEvTXpNUk15c1NPUzh6empJUk14RXpNekF4UVJVaE5RRVZJVFVCRXhNekF3TUJFeE1qQVFFVEV6TUJBUk1USXdNREJjejZVd1d0K2xNQmkwT3hnME8wL3RPN05Ydit5d1BETkxiQi9zciszYkZBaHE0L0E5U1hsLzZtbDVmOWhnSFlBOWorSi93cEJiRDhMUDRrQmJENlVBSGRBOVA2VUFXdy9DditKUVBiQWRVQUFnQ01BQUFGbndRNkFCRUFJZ0FnUUE4V0V4TVJGQWdVQ0JFS0hBOEFCbklBS3pJeVB6azVMeThSTXhFek1ERlRJVEllQWhVUkl4RTBMZ0lqSVJFaklTRVJNeEVoTWpZMk5SRXpFUlFPQW93Q0wxQ0FXekM2SERkUU5mN0N1Z080L2RLNUFUNUhZREs1TUZ1QUJEb3JYcHR3L3JjQlMwVmdPeHI4WGdMZS9ib3dibHdDcVAxYWNKdGVLd0FEQUYvLzdBUWRCY1FBSXdBbkFDc0FIVUFPS2lzbkppWUhHUklGY2dBSERYSUFLeklyTWhJNUx6UE9NakF4WlRJMk54Y0dCaU1pTGdJMUVUUStBak15RmhjSEppWWpJZzRDRlJFVUhnSVRGU0UxQVJVaE5RTXZPbTR5RkRoNlBuZkdrRTlPa01WNFAzVTlGREZ3T2xDQld6QXhYSUZ5L1EwQzgvME5pQklRb0E0UVNaSFprUUZOa3RxU1NSRU9vUkFUTkdpZ2JQNnhiS0JvTkFNWGZYMysrM3g4QUFNQUh3QUFCYndGc0FBREFBY0FId0FwUUJNR0J3TUNBaFFLRkJjSkNnb1dGd1J5Rmd4eUFDc3JFamw5THpNUk14RVNPUmd2TTg0eU1ERkJGU0UxQlJVaE5RRWhOU0V5TmpZMU5DWW1JeUVSSXhFaE1oWVdGUlFHQmdXOCttTUZuZnBqQXQvK2V3R0ZjWXhCUVl4eC9xakJBaG1sNUhaMjVBUzltSmoxbUpqK2M1MUlnRkpMaEZINjdnV3djc21Cak1abkFBQURBQ3NBQUFQNUJiQUFBd0FjQUNBQUxVQVZIeUFnRVFNQ0JRWUdHZ0lhQWhvRUVCRUVjZ1FNQUQ4ck1oSTVPWDB2THhFekVUTVJNeEV6RVRNd01VRUhJVGNCQVNjek1qWTJOVFFtSmlNaE56TXlGaFlWRkFZR0l3RVZFd2NoTndQNUx2eGdMZ0lBL2U4QjlHcUxSa0tOY3Y3NEw5bXU0M0JkMWJRQjdMMHUvUlF1QkV5ZW52dTBBbXA4UjNwTVZZRkpubW5Jam5yQmJ2M0VEQVd3bnA0QUJBQWgvKzBFR3dXd0FBTUFGQUFZQUJ3QUZVQUpCQVFERHdFTERRTUVBRDgvTXpNU09TOHdNVUVSSXhFQk14VVVBZ1lHSXlJbUp6Y3lQZ0kxQXhVQk5RVVZBVFVCMWNBQ1I3OVRtdGlGTDEwd3ZHQ1RaRFNNL1ZFQ3IvMVJCYkQ2VUFXdy9WTllvLzc4dDJBTENKRkZpTW1FQW5peS9zYXlFckgreHJFQUFnQmRBQUFFNndRNkFCc0FId0FZUUFzSUZSVWVId1p5RGdFZUNnQS9Nek1yRWprdk16QXhZU00xTkM0REl5SU9BaFVWSXpVMEVqWTJNekllQXhVQkVTTVJCT3U1SWtOaGZVeGFrbWc0dWxXYjFZRnF0WTlsTmY0VnVyeHBxNEZZTEVXSXlJUzh1cVFCQkxaZ1BuZXIyNE1EZ1B2R0JEb0FBZ0FmQUFBRkJBV3dBQmNBR3dBYVFBd1pHQU1BQUE0TUR3UnlEZ3dBUHlzeUVqa3ZNODR5TURGQklUVWhNalkyTlRRbUppTWhFU01SSVRJV0ZoVVVCZ1lIRlNFMUF3ajlGd0xwYll4RFA0dHkvcWJBQWhxbDRuVjE0ckg5SXdJN25VYUFWMGVDVlBydUJiQnh4NEdNeDJtSm5wNEFBQVFBZS8vckJZTUZ4UUFoQURNQVJRQkpBQ1ZBRWtJbk1FZEhPVEFOY2g4RkRrbEpGZzRGY2dBck1qSXZFTXd5S3pJeUx4RE1NakF4UVRNVUJnWWpJaVltTlRVME5qWXpNaFlXRlNNMEppTWlCZ1lWRlJRV0ZqTXlOZ0UxTkRZMk16SVdGaFVWRkFZR0l5SW1KamNWRkJZV016STJOalUxTkNZbUl5SUdCaE1CSndFQ0hvdENlMWRYZmtWRWZsWlhmRU9MUkVjdlB4OGdRQzlIUWdFUVNJWmNYb1ZJUjRWZFhZWkppeU5JTmpaSElpTkhOelZISTh6OU9XZ0N4d1FlUlhSRlVvaFJUVk9JVWtaMFJqVlRNMU12VFM1U00xZjlLRTVTaUZKU2lGSk9Vb2hTVW9pZ1RpNVRNek5TTDA0dlVqTXpVZ05OKzQ1Q0JISUFBQUVBYVAvckEyc0dFd0F1QUJTM0dSZ1lBU1FNQUFFQUx6TXZNeEk1THpNd01XVVZJaTRDTlJFMFBnSXpNaDRDRlJVVURnTWpOVEkrQWpVMU5DNENJeUlPQWhVUkZCNENBc3htbUdReUtFeHNSRHRpU2loQ2dMdnlsSnJlalVRTUZ4OFRHeWNiRFJZeVZJbWVRSGVuWmdMcFdZeGlOQ3RUZEVvcFo5bktvVit3ZGJuUVdpc3BQQ1lUR3poU09QMFhSV3hOS0FBRUFLSUFBQWZHQmNBQUF3QVZBQ2NBTVFBbFFCRXJNQzRxQWdNYkVpUUpDVEV1QkNvdERBQS9Nejh6TXk4ejNETE9NaEVTT1Rrd01VRVZJVFVETlRRMk5qTXlGaFlWRlJRR0JpTWlKaVkzRlJRV0ZqTXlOalkxTlRRbUppTWlCZ1lCRVNNQkVTTVJNd0VSQjZYOW1DTlVtV2xxbVZOU21XbHFtbFNqSjFFOVBFOG5LRTg5UEZBbi9yek0vYSs2ekFKVEFpdU9qZ0hhWTJlYlZsYWJaMk5ubWxaV21zcGpQVnd6TTF3OVl6eGNORFJjQVF6NlVBUnUrNUlGc1B1UEJIRUFBQUlBYUFPWEJEZ0ZzQUFNQUJRQUpFQVJDUVFCQXdZS0J3Y1RGQUlBQXdNR0JoRUFMek1STXhFelB6TXpFVE1TRnprd01VRVJBeU1ERVNNUk14TVRNeEVCRlNNUkl4RWpOUVBlaXpTTVduQ1FqM0Q5c3BSYmt3T1hBWXYrZFFHSy9uWUNHZjV5QVk3OTV3SVpVZjQ0QWNoUkFBSUFtUC9zQkpNRVRnQWRBQ1lBRjBBS0loY1hCQjRPQnhzRUN3QS9Nejh6RWprdk16QXhaUmNHQmlNaUxnSTFORDRDTXpJZUFoVVVGQlVoRVJZV016STJBU0lHQnhFaEVTWW1CQlFDVkx4aWJiNlFVVm1XdTJKbnM0aE4vUUEzakU1ZHUvN29TNDA1QWh3MGlzWm9ORDVZbXN4emRNdWFXRkdTeFhVREVocit1RE03T3dOcFFqais2d0VlTkQwQS8vOEFWUC8xQmJNRm13UW5BZGIvMlFLR0FDY0JsQURtQUFBQkJ3STBBeFFBQUFBSHNRWUVBRDh3TVFELy93QmwvL1VHVXdXMEJDY0NMd0FtQXBRQUp3R1VBYVVBQUFBSEFqUUR0QUFBLy84QVpQLzFCa2tGcEFRbkFqRUFDQUtQQUNjQmxBR0RBQUFCQndJMEE2b0FBQUFIc1FJRUFEOHdNUUQvL3dCYS8vVUYvUVdrQkNjQ013QWZBbzhBSndHVUFTQUFBQUVIQWpRRFhnQUFBQWV4QmdRQVB6QXhBQUFDQUdyLzZ3UXpCZXdBS1FBL0FCbEFEQ29BQUJJMUh3dHlDUklBY2dBck1pc3lFVGt2TXpBeFFUSVdGeTRFSXlJR0JnY25QZ0l6TWg0Q0VoVVZGQTRESXlJdUFqVTFORDRDRnlJT0FoVVZGQjRDTXpJK0FqVTFMZ01DUFZ5bU9nZ3dSMXRwT1RWZVd5OFFKVlp5VUc2d2hGZ3NLbEoybUZ4eXMzMUJQM210Z0UxeFNTUWtTSEZNVG5GS0pBVW1SbTBEL2sxRFdKUjFVU3NPR2hLV0VSOFZTNC9ML3dDV08yL0ZvWFpBVUkvQmNSWnB0SVZLbURkZmVrUVdUSWhwUEVkK3FHRkRHVWRFTGdBQUFRQ3AveXNFNWdXd0FBY0FEclVFQndKeUFnWUFMek1yTWpBeFFSRWpFU0VSSXhFRTVycjlON29Gc1BsN0JlMzZFd2FGQUFNQVJ2N3pCS3dGc0FBREFBY0FFQUFmUUE0T0JnWUhCdzhDY2d3REF3b0NDd0F2TXpNekVUTXJNaEV6RVRNd01VVVZJVFVCRlNFMUFSVUJJelVCQVRVekJLejc0d1BRL0E0Qy92MDlZZ0pnL2FCaWRwZVhCaWFYbC95cUdmeXlqZ0xOQXRPUEFBRUFxQUtMQStzREl3QURBQWl4QXdJQUx6TXdNVUVWSVRVRDYveTlBeU9ZbUFBREFELy8vd1NaQmJBQUJBQUpBQTBBRmtBS0NRc0xDZ1FJQ0FFQ2NnQXJQek12TXhFek1ERmxBVE1CSXdNVEZ5TUJCelVoRlFJakFiaSsvZUo3aHNVcGV2N1BmZ0V6OWdTNitrOERELzNvOXdNUG1abVpBQVFBWS8vckI4d0VUZ0FYQUM4QVJ3QmZBQjFBRGxzMk5oNFRDM0pPUTBNckJnZHlBQ3N5TWhFekt6SXlFVE13TVZNMU5ENENNekllQXhjVkRnUWpJaTRDTnhVVUhnSXpNajRETnpVdUJDTWlEZ0lGRlJRT0FpTWlMZ01uTlQ0RU16SWVBZ2MxTkM0Q0l5SU9Bd2NWSGdRek1qNENZMFdBc20xc28zZFFNUTBOTVZCMm8ydHVzNEJGdVNkTmNFbEhiMVE1SWdZR0lqbFVjVWRJY0V3bkJyQkdnTE50YTZOM1VERU1EVEZRZDZOc2JMS0JSYmtvVEc5SVNIQlVPaUlHQmlJNlUzQkhTSEJOS0FJUEcyM0ZtbGhWaHBXRkp5b25oWmFHVlZpYXhZZ2JVWTl1UGo5aWJGNGFLaGxkYkdNL1AyNlBVQnR0eFpwWVZZYVdoU2NxSjRXVmhsVlltc1dJRzFDUGJqOC9ZMnhkR1NvYVhteGlQejV1andBQUFmK3Yva3NDamdZVkFCOEFFTGNiRkFGeUN3UVBjZ0FyTWlzeU1ERkZGQVlHSXlJbUp6Y1dGak15TmpZMUVUUTJOak15RmhjSEppWWpJZ1lHRlFGbVRaQmxIemtkRXc0eUVERkVKVktZYVNSSEpCY1JMUjA3VWlscmNKTkhDUXFTQkFrbVR6MEZHWFdnVWd3SmpnVUdNVnhDQUFBQ0FHVUJHQVFNQS9VQUdRQXpBQnRBQ3hjRWdBb1JRREVlZ0NRckFDOHpHdDB5R3Q0eUdzMHlNREZUSnpZMk16WVdGeFlXTXpJMk54Y0dCaU1pSmljbUpnY2lCZ01uTmpZek5oWVhGaFl6TWpZM0Z3WUdJeUltSnlZbUJ5SUdad0V2aFVGUVd6ODdWVXBCZkM4QkwzeEJTbFU3UDF4UVFZUXdBUytGUVZCYlB6dFZTa0Y4THdFdmZFRktWVHMvWEZCQmhBTEl2VE03QWlzZ0hpaEVQTDB6T2ljZUlDc0NSUDRqdlRNNkFpc2dIaWRFUEw0ek9pY2VJQ3dDUkFBQUF3Q1lBSndEMmdUVkFBTUFCd0FMQUI5QURRSUJBUW9LQ3dBREF3Y0hCZ3NBTDg0eUVUTVJNeEV6RVRNUk16QXhRUUVuQVJNVklUVUJGU0UxQTQvOXExOENWYXI4dmdOQy9MNEVtdndDT3dQKy92cWhvZjVob2FFQUF3QTlBQUVEZ0FSR0FBUUFDUUFOQUNKQUVBTUhCZ0FFQ0FZRkNRa0JBZ0lORFF3QUx6TjhFTTR2TWpJWUx6TVhPVEF4VXdVVkFUVWxBUWMxQVJNVklUWEhBclA4emdNeS9VNkFBeklHL0wwQ3cvNnlBVmhwd1A3K0RHa0JWL3hUbUpnQUFBTUFoQUFBQTkwRVdnQUVBQWtBRFFBaVFCQURCd1lBQkFnR0FRSUNCUWtKRFEwTUFDOHpmQkRPTHpJeUdDOHpGemt3TVVFbE5RRVZCUUUzRlFFRkZTRTFBMDc5T1FOVy9Lb0N5WTM4cWdOQS9MMENzZnl0L3FscXhnRUJGR3IrcUk2WW1BQUNBQ3dBQUFQZEJiQUFCd0FQQUIxQURnVUlDQTRIRW5JRENnb0xBUUp5QUNzeU1oRXpLekl5RVRNd01WTUJNd2NCQVJjak53RUJKek1CQVNNc0FaQjdFZjdFQVVJT2VpSUJQUDYrRFhvQmxQNXdld0xYQXRtRi9hejlyWVNFQWxNQ1ZJWDlKLzBwLy84QXRRQ21BWnNFOWdRbkFCSUFKUUN5QUFjQUVnQWxCQ1FBQWdCdkFua0NNd1E2QUFNQUJ3QVF0Z1lDQWdjREJuSUFLekl5RVRNd01WTVJJeEVoRVNNUis0d0J4SXdFT3Y0L0FjSCtQd0hCQUFBQkFGMy9YZ0ZYQU84QUNRQUtzZ1NBQ1FBdkdzMHdNV1VWRkFZSEp6WTJOVFVCVjBkS2FTVWw3MDlQdGoxSk9YaEdVUUQvL3dBOUFBQUU5d1lWQkNZQVNnQUFBQWNBU2dJc0FBQUFBd0FnQUFBRHpRWVZBQkFBRkFBWUFCdEFEeGdHRndweUV4UUdjZzBHQVhJQkNnQS9LeklyTWlzL01ERmhJeEUwTmpZek1oWVhCeVltSXlJR0ZSY1ZJVFVoRVNNUkFZUzVZTEo2U0lwSkh5NTVTSGRwM2YyL0E2MjVCSmg3cWxnakdwd1NJV3RzWG82Tys4WUVPZ0FEQUQwQUFBUHFCaFVBRWdBV0FCb0FHMEFQR1JvR2NoUUFjZzRHQVhJVEFRcHlBQ3N5S3pJckt6SXdNV0VqRVRRMk5qTXlGaFlYQnlZbUl5SUdCaFVCRVRNUkFSVWhOUUdodVZlbGRpeUZsMGhXWDVnMVFWa3RBWkM1L3AzOXRnU3NkYUZURWh3UGhoSVRMMXBDKzFRRjJQb29CRHFPamdBRkFEMEFBQVl6QmhVQUVRQVZBQ1lBS2dBdUFDVkFGQ01jQVhJdUtoUVZCbklOQmdGeUxSY1hBUXB5QUNzeUVUTXJNaXN5TWpJck1qQXhZU01STkRZMk16SVdGd2NtSmlNaUJnWVZGeFVoTlFFakVUUTJOak15RmhjSEppWWpJZ1lWRnhVaE5TRVJJeEVCb2JsVm9HNGdRUjhLRlRVYU8xVXM4UDJzQTYyNVg3SjZTWXBKSUMxNlIzZHAzZjIvQTYyNUJLeDFvVk1JQ0pjRkJDOWFRbktPanZ2R0JKaDdxbGdqR3B3U0lXdHNYbzZPKzhZRU9nQUFCUUE5QUFBR013WVZBQkVBRlFBb0FDd0FNQUFwUUJjckFISWtIQUZ5TGhRVUxSVUdjZzBHQVhJcEZ3RUtjZ0FyTWpJck1pc3lNaEV6S3pJck1ERmhJeEUwTmpZek1oWVhCeVltSXlJR0JoVVhGU0UxQVNNUk5EWTJNeklXRmhjSEppWWpJZ1lHRlFFUk14RUJGU0UxQWFHNVZhQnVJRUVmQ2hVMUdqdFZMUEg5cXdPdHVWZWxkaXlGbDBoV1g1ZzFRVmt0QVpDNS9wMzl0Z1NzZGFGVENBaVhCUVF2V2tKeWpvNzd4Z1NzZGFGVEVod1BoaElUTDFwQysxUUYyUG9vQkRxT2pnQUFCQUE5Lyt3RW13WVZBQU1BRndBYkFDMEFKVUFVSWlrTGNoTUtjZ2tjSEEwTkJBRnlHQUlEQm5JQUt6SXlLeklSTXhFekt5c3lNREZCRlNFMUFUSVdGeFVqTlNZbUl5SUdCaFVSSXhFME5qWUJGU0UxRXpNUkZCWVdNekkyTnhjR0JpTWlKaVkxQVlMK3V3SDlXZDFjdVI1eExUdFJLcmxTbHdMRi9iZkd1U0kySHhjekRRRVdSekZGY1VRRU9vNk9BZHMyTHRGNUVCUXlYVUw3VkFTc2RhRlQvaVdPamdFSCs4czNPQklKQTVjSERUWi9iQUFFQUYvLzdBWlZCaElBR3dBZkFERUFad0F4UUJzN01rQmtZRnNMY2dGRlNVQUhjaVl0QzNJZUVCOEdjaFFLQVhJQUt6SXJNaklyTWlzeXpESXJ6RE1TT1Rrd01VRWpMZ0kxTkQ0Q016SWVBaFVqTkNZbUl5SUdGUlFlQWlVVklUVTNNeEVVRmhZek1qWTNGd1lHSXlJbUpqVUZOQ1ltSnk0RE5UUStBak15RmhZVkl6UW1KaU1pQmdZVkZCNENGeDRDRlJRT0FpTWlKaVkxTXg0Q016STJOZ095WmlCU096TmZnMUIzbDFNZ3VTaFlTRmhjSGlZZUFwMzl3Ynk1SWpjZUZ6UU5BUlpITWtSeVJQNDNJMnRyV3BGbE5qbHBsRnVDdUdLNU5XVkpUVjhyRlRaaVRJV3NWRHR2bVYrUHhtYTZCRkIwT1V4bk5nTDhZYXFkVFQxcFR5eEpkSWMrUkdnN1dFWThhV3Q5N282T1dQeVhQa1ViQ0FTWEJ3MC9qSE1MS0VVNUZSTTBTbVJEUUhKWU1seVpYUzFWT0M5SUtCNHZKeUlSSGxSNlYwZDJWUzltb2xwTVdTVW9SZ0FBRlFCYi9uSUg3Z1d1QUFVQUN3QVJBQmNBR3dBZkFDTUFKd0FyQUM4QU13QTNBRHNBUHdCREFFY0FWd0J6QUl3QW1nQ29BQUJUSXhFaEZTTWhJelVoRVNNQklSRXpGVE1GSVRVek5UTUJJVFVoQlNFMUlSRWhOU0VCRlNNMUV4VWpOUUVoTlNFQkZTTTFBU0UxSVFVaE5TRUJGU00xRXhVak5RRVZJelVIRVRNUkZBWWpJaVkxTXhRV016STJKU01uTXpJMk5UUW1JeU1SSXhFek1oWVdGUlFHQmdjaUJnY0dGQWNqTnpNeU5qVTBKaU1qTnpNeUZCY1VGakVlQWhVVUJnRVZGQVlqSWlZMU5UUTJNeklXQnpVMEppTWlCaFVWRkJZek1qYk1jUUUxeEFhenh3RTJiL29SL3N0eHhBWmUvc3JIYi81Ui91b0JGdnpnL3V3QkZQN3NBUlFFejI5dmIvMHcvdXNCRmZ3ZGNRUlUvdXNCRlFHUS91b0JGdnFOY1hGeEI1TnY2RnhyVUZodFhUZ3dLVGI5d3BZQmRqczdPenRkWDd4Q1h6TWlRUzhCQkFJTURya3dpVFF6TXpSM0FaY09EQWNyT2g1cC9vUi9abWVCZ0dabmdGeEtRVUJLUzBGQVNRU1JBUjEwZFA3aitlRUJPOHB4Y2NyK3hYRnhjUVpYZFB0MCtma0M4dnI2K2w1eEFqLzUrUVFZZEhSMC9PNzgvQUY0K3ZyK2lQejg4d0Y2L29aUFhGRlRMaTAzY2tZcEp5a2UvaThDSlNCQ05DSTRKQVFUQVFRQjlFc3NKeWN2UmdFRkFSTUVKamtpVEU4QlNIQmhlbnBoY0dGNmV0RndSRTlQUkhCRlRrNEFCUUJjL2RVSDF3aHpBQU1BSGdBaUFDWUFLZ0FBVXdrQ0F6TTBOamMyTmpVMEppTWlCZ2N6TmpZek1oWVZGQVlIRGdJVE5TTVZFelV6RlFNMU14VmNBN3dEdi94QmQ4b1pLVVJpcDVWL3NRTExBajRuT0RrMUtDODlIY25LZndRR0JBS0RBOC84TWZ3eEF0NHpQaHNsZ1ZLQWwzMk5OekJBTkRSTkdpRTZUdjY3cXFyOVNBUUVDcG9FQkFBQkFFSUFBQUtyQXlBQUhBQVF0UU1jSEFzVEFnQXZ6REl6RVRNd01XVVZJVFVCUGdJMU5DWWpJZ1lWSXpRMk5qTXlGaFlWRkFZR0J3Y0NxLzJxQVNBdE5CZEFPMHRIbmtpR1hscUFSQzlXTzYrQWdHd0JEeXBDTlJZd1BrdzVTSFpIT21sSk5WeGNOWklBQVFCN0FBQUI3d01WQUFZQUkwQVZCQVVGQXdNdkFIOEFBZzhBWHdDdkFQOEFCQUFCQUMvTlhYRXlFVE1STXpBeFFSRWpFUWMxSlFIdm5OZ0JZZ01WL09zQ1dUbUJkQUFBQWdCUi8vVUNuZ01nQUJFQUl3QU1zeGNPSUFVQUx6UEVNakF4UVJVVUJnWWpJaVltTlRVME5qWXpNaFlXQXpVMEppWWpJZ1lHRlJVVUZoWXpNalkyQXA1SmhGaFpoVXBKaFZoWmhFcWVJRDBzTEQwZ0lEOHNMRHdmQWRDTGNwVkpTWlZ5aTNLVlNVbVYvdmFtUTFVcEtWVkRwa05XS2lwV0FBQUJBRmIvK1FPYkJKMEFNZ0FYUUFvVUhoNG1BVEVLRENaK0FEOHpQek1TT1M4ek1ERmxNekkrQWpVMU5DNENJeUlHQmhVVUZoWXpNajRDTnhjT0FpTWlKaVkxTkRZMk16SWVBaFVWRkE0Q0l5TUJFaEovckdZdEprSlZNRWxvTnpKbVREWmNSU2tETkFaVGxHdUFxRkpndW9WdG4yZ3lPNDMxdWhPVE8ycU9VOHBIYkVrbFJYSkVRSEpHSXoxTUtXUTZlVkZ0czJod3VHOUpncXhqUklMcHRHY0FBQVFBWWYvd0E2NEVuUUFTQUNJQU5BQkVBQjFBRFNnWEYwRU9EZ1U1TVg0ZkJRc0FQek0vTXhJNUx6TXpFVE13TVVFVURnSWpJaVltTlRRK0FqTXlIZ0lITkNZbUl5SUdCaFVVRmhZek1qWTJFeFFPQWlNaUxnSTFORFkyTXpJV0ZnYzBKaVlqSWdZR0ZSUVdGak15TmpZRHJrRnptVmwzd0hBK2NacGNYSnB6UDdvOGEwZElham82YTBsSGFqdWNPbXFQVlZhUWFUcGxzWEZ4c21lNU5WNCtQbHd6TTE0K1BsMDBBVDFSZlZRclRKVnNTSFZXTGk1V2RUNDdWekV4VnpzOFZpNHVWZ0pRUW01UkxDeFJia0pua0V0TGtHNDBVQzByVHpjMlVDd3NVQUFCQUVJQUFBUEFCSTBBQmdBT3RRVUJCbjBEQ2dBL1B6TXpNREZCRlFFakFTRTFBOEQ5NmNRQ0YvMUdCSTFwKzl3RDlKa0FBUUJ5Ly9BRHV3U1VBREVBRlVBSkZoOGZEaWNMQXdCK0FEOHlQek01THpNd01VRXpGU01pRGdJVkZSUWVBak15TmpZMU5DWW1JeUlHQmdjblBnSXpNaFlXRlJRR0JpTWlMZ0kxTlRRK0FnTHRGQkI5cldzeEowTllNRWxvTnpOblRVUjBTQVEwQ0Z5WVk0R2xVR0MzaFdxZ2JEZEFrdlFFbEowK2NKVldxRXB4VENjL2JVVkRia0k1WGpsbE9uZFJiYkZuY0xScVNIMmtYVlNHNjdObUFBRUFnZi93QThVRWpRQWpBQmRBQ2lFSkNRSVpFUXNGQW4wQVB6TS9NeEk1THpNd01VRW5FeUVWSVFNMk5qTXlGaFlWRkFZR0l5SW1KaWN6RmhZek1qWTJOVFFtSmlNaUJnRTVsRVFDcVAzMUppRnVTSHF5WWxxNWoycTNkd3F5RFlGaVRtYzBQSE5SVkZZQ0hpVUNTcUwrM3hBaFg2NTViTEJwU3BKc1dWZytia2RFYWp3cEFBQUNBREVBQUFQbEJJMEFCd0FMQUJWQUNRQUJBUW9FQzMwS0VnQS9Qek1TT1M4ek1ERkJGU0VuQVRNREFRRVJJeEVENWZ4T0FnSkNrS0grbFFJK3VRR2VtSE1ERlA3ZC9qUUM3L3R6QkkwQUFBSUFULy93QTZBRW5RQWRBRDBBSFVBTkh3QUFIUjRlRWpRcUN3a1NmZ0EvTXo4ekVqa3ZNek1STXpBeFFUTXlOalkxTkNZbUl5SUdCaFVqTkRZMk16SWVBaFVVRGdJakl4VTFNekllQWhVVURnSWpJaTRDTlRNVUZoWXpNalkyTlRRdUFpTUJZSHRUYlRZd1lVcENaVHE2YWJsNFc1VnNPaTVobDJpZG5YbWlYeWxBZEp0YlZaaDJSTGs3YTBoTGF6a2xSbUk5QXB3dlVqVTNVQ3dwU3pOZGtGSXFWSHRSTTJaVU15eHBNRk5zUEZGL1dDMHBVM3hTTlZFdExWUThNMG92RndBQkFFOEFBQVBMQkowQUhnQVN0d3NVZmdNZUhnSVNBRDh6RVRNL016QXhaUlVoTlFFK0FqVTBKaU1pQmdZVkl6UTJOak15RmhZVkZBNENCd0VEeS95ZUFheE1WU053WTFod05icG54SXg3c2w4blJWdzEvcmlZbUlNQm5VWm9WQ2hRYXpkaVFtYXBaRlNYWXpkblpHWTQvdWtBQUFFQW1RQUFBcDRFa0FBR0FBcXpCbjBDQ2dBL1B6QXhRUkVqRVFVMUpRS2V1djYxQWVzRWtQdHdBNjlpbnFVQUFBSUFZLy93QTZzRW5RQVZBQ3NBRHJVY0VYNG5CZ3NBUHpNL016QXhRUlVVRGdJaklpNENOVFUwUGdJek1oNENBelUwTGdJaklnNENGUlVVSGdJek1qNENBNnM3Ylp0Z1g1dHZQRHR2bWw5Z25HNDd1aDQ3V0RvNFZ6c2ZIenhZT0RwWE94MENuNjZEd1g4K1BuL0JnNjZEd0g0OVBYN0EvclhrVTN4U0tTbFNmRlBrVTM1VUt5dFVmZ0FBQXdCSUFBQUQ0UVNOQUFNQUNRQU5BQnhBREFRTURBME5DSDBIQXdNR0FnQXZNek1STXo4ekx6TVJNekF4WlJVaE5RRUJJelVCTXlNVklUVUQ0ZnltQTBIOCtIZ0RDblpKL05LWW1KZ0RmZnZyZkFRUm1KZ0FBQU1BRGdBQUJCd0VqUUFFQUFrQURRQWJRQkFJQndNRUJnQUtEUWdCREFweUJRRjlBRDh6S3hFWE9UQXhRUUV6QVNNQkFRY2pBUUVSSXhFQjNRRnYwUDVOY2Y3bUFYRWViLzVNQW1DNEFlVUNxUDBBQXdEOVUxTURBUDJTL2VFQ0h3QUFBUUFuQUFBRU1nU05BQXNBRlVBS0J3b0VBUVFKQlFNQWZRQS9NaTh6Rnprd01VRUJBVE1CQVNNQkFTTUJBUUVMQVIwQkg5MytkUUdaM2Y3Vy90amNBWmIrY3dTTi9rMEJzLzIrL2JVQnUvNUZBa3NDUWdBRUFERUFBQVh4QkkwQUJRQUtBQThBRlFBZ1FBNFNCQkFCRGdRTUFRZ0VCZ0Y5QkFBdlB6TVJNeEV6RVRNUk14RXpNREZCRXpNSEFTTURFeE1qQVFFVE13RWpBeE1USXdFbkFjbjRnUzcrOUg2aHh5cC8vdFlFUThXNC90Wi80dlErZnY3OEx3RVdBM2YzL0dvRWpmeWEvdGtFamZ5Y0EyVDdjd1NOL0liKzdRT1c5d0FDQUJRQUFBUlVCSTBBQkFBSkFBKzFCd01GQVgwREFDOC9NeEV6TURGQkFUTUJJd0VCRXlNQkFrNEJRTWIrTjQ3KzN3RStVWTcrTndFakEycjdjd1NOL0pmKzNBU05BQUFCQUhYLzhBUUxCSTBBRlFBUHRRd1JCZ0I5QmdBdlB4RXpNakF4UVRNUkZBWUdJeUltSmpVUk14RVVGaFl6TWpZMk5RTlJ1bjNSZm9QUGVMZEZmRkpUZTBRRWpmejBoTE5hV3JPRUF3ejg5Rlp2TlRWdlZnQUFBZ0FwQUFBRC9RU05BQU1BQndBUnRnWUhCd0VBZlFFQUx6OFJPUzh6TURGQkVTTVJJUlVoTlFKdXVBSkgvQ3dFamZ0ekJJMlptUUFCQUVULzhBUGVCSjBBT1FBWVFBb0tKZzgyTVNzWUZBOStBRC9NTXkvTU14STVPVEF4UVRRdUFpY3VBelUwUGdJek1oWVdGU00wSmlZaklnWUdGUlFlQWhjZUF4VVVEZ0lqSWk0Q05UTVVIZ0l6TWpZMkF5TVpQR3BSWVp4dk96NXlvR0tNeDJxNk9YTlpVMjQySUVad1VHR1daelUvZGFOaldLdUxVcm91VW1vOFUzSTZBU29sT3pFcUV4Zy9WWEJKUm5WV0wyR2hZVHRjTlN4TU1DSTRMaW9VR0VKWWNraEpkVklzTFZ1SlhEcFNNeGdwU2dBQUFnQ0tBQUFFSmdTTkFCa0FIZ0FZUUFvYkRRME1EQm9ZRndCOUFEOHlMek01THpNU09UQXhVeUV5SGdJVkZBWUdCd2NoSnlFeU5qWTFOQ1ltSXlNUkl5RUJOd0VWaWdHcWFxWnlPMFdCV1RmK2RnSUJLbFZ3T1Raeld2QzZBdFgrMU1NQk1BU05MMXFFVmxhRld4Z2JtRFZiT1Q5ZU5md01BZ2NCL2dJS0FBQURBRnIvTmdSWUJKMEFBd0FaQUM4QUhFQU1BQU1ES3lzS0NnSWdGWDRDQUM4L014STVMek1TT1JFek1ERmxCUWNsQVJVVURnSWpJaTRDTlRVMFBnSXpNaDRDQnpVMExnSWpJZzRDRlJVVUhnSXpNajRDQXhRQlJIMyt4UUcyU0lhN2RIRzdpVXBLaDd0eGRMeUdTYmdzVkhwTlMzaFZMUzVXZUV0TmVWUXJsZkZ1OEFKQlFvVFJrMDFOazlHRVFvVFJsRTFObE5IR1JHT1lhRFkyYUpoalJHT1phVFkyYVprQUFBRUFpd0FBQkJzRWpRQVlBQk8zQWdFQkRRd1BmUTBBTHo4ekVqa3ZNekF4UVNFMUlUSTJOalUwSmlZaklSRWpFU0V5RmhZVkZBNENBbDcrdEFGTVhISTJObkpjL3VhNUFkT1B4MmM2Y3FZQnRwazFYRHc1WWozOERBU05YNlZyVklWZU1RQUNBR0QvOEFSYkJKMEFGUUFyQUJDMkp3WWNFWDRHQ3dBL1B6TVJNekF4UVJVVURnSWpJaTRDTlRVMFBnSXpNaDRDQnpVMExnSWpJZzRDRlJVVUhnSXpNajRDQkZ0SWhydHpjYnVKU2txSHUzRjB1NGRJdHl4VWVrMUtlRlV1TGxaNVNrNTRWQ3NDWjBLRTBaTk5UWlBSaEVLRTBaUk5UWlRSeGtSam1HZzJObWlZWTBSam1XazJObW1aQUFFQWl3QUFCRmtFalFBSkFCRzJBd2dGQVFjQWZRQS9NaTh6T1Rrd01VRVJJd0VSSXhFekFSRUVXYm45cExtNUFsd0VqZnR6QTJ6OGxBU04vSlFEYkFBREFJc0FBQVY0QkkwQUJnQUxBQkFBRmtBSkFnNEtCUXdIQkFCOUFEOHlNakl2TXpNNU1ERlRNd0VCTXdFakFUTVRFU01CTXhFakVjeXVBWWNCaHE3K0Q0Zjl6cDBidUFSUG5ya0VqZnh4QTQvN2N3U04vUVgrYmdTTiszTUJrZ0FDQUlzQUFBT0xCSTBBQXdBSEFBKzFCZ01DQkgwQ0FDOC9FVE16TURGbEZTRTFFeEVqRVFPTC9Zd3R1WmlZbUFQMSszTUVqUUFEQUlzQUFBUlhCSTBBQXdBSkFBMEFGMEFNQmdjTEJRd0lCZ29CQkFCOUFEOHlMek1YT1RBeFFSRWpFU0VCQVNjM0FSTUJOd0VCUkxrRHEvMzkvdUFrMXdHTUpQNUZld0loQkkzN2N3U04vZFArNnJ6c0Fadjdjd0lzaFAxUUFBQUJBQ3ovOEFOTkJJMEFFd0FOdEJBTUJ3RjlBRDh2ekRNd01VRVJNeEVVQmdZaklpWW1OVE1VRmhZek1qWTJBcE82WmE5d2RydHN1amhuUkR4Yk13RlRBenI4eG0rZlZVdWFka1ZYS0RGYkFBRUFtQUFBQVZFRWpRQURBQW15QUgwQkFDOC9NREZCRVNNUkFWRzVCSTM3Y3dTTkFBTUFpd0FBQkZrRWpRQURBQWNBQ3dBWVFBb0NBd01FQ1FVSUJIMEZBQzgvTXhFekVqa3ZNekF4UVJVaE5STVJJeEVoRVNNUkE4RDlYeVc1QTg2NUFvdVptUUlDKzNNRWpmdHpCSTBBQUFFQVpQL3dCRFlFblFBcUFCWkFDU2txS2dVWkVINGtCUUF2TXo4ekVqa3ZNekF4UVJFT0FpTWlMZ0kxTlRRK0FqTXlGaFlYSXk0Q0l5SU9BaFVWRkI0Q016STJOelVoTlFRMkdXbTFqSFRCalUxRWc3MTRsTVZ0RDdjTFFIVmNVbnBSSnpCYmYwOThjaGorNXdKUS9rWWdUamhMajgrRVZJUE9rRXRmcG1zOVlqazJhSlZmVm1HWGFEWTFGdTZRQUFNQWl3QUFBNXNFalFBREFBY0FDd0FhUUFzSEJnWUJDZ3NMQVFCOUFRQXZQeEU1THpNUk9TOHpNREZCRVNNUkFSVWhOUUVWSVRVQlJMa0N3ZjNNQW9QOWZRU04rM01FamYzL21KZ0NBWm1aQUFBREFFVC9Fd1BlQlhNQUF3QUhBRUVBS1VBVEJ6NCtKQWdYTXdZR013c0NJQ0FYQUFBWGZnQS9NeThSTXhFelB6TXZFUkk1T1RNUk16QXhRUkVqRVJNUkl4RWxOQzRDSnk0RE5UUStBak15RmhZVkl6UW1KaU1pQmdZVkZCNENGeDRERlJRT0FpTWlMZ0kxTXhRZUFqTXlOallDY1pXVmxRRkhHVHhxVVdHY2J6cytjcUJpak1kcXVqbHpXVk51TmlCR2NGQmhsbWMxUDNXalkxaXJpMUs2TGxKcVBGTnlPZ1Z6L3M4Qk1mclIvczhCTWVZbE96RXFFeGcvVlhCSlJuVldMMkdoWVR0Y05TeE1NQ0k0TGlvVUdFSllja2hKZFZJc0xWdUpYRHBTTXhncFNnQURBREVBQUFQdkJKMEFBd0FIQUNZQUhVQU5CQVVGQVNJWmZnNENBZzBCQ2dBL016TVJNejh6RWprdk16QXhZU0UxSVFNVklUVWxFeFlHQmdjblBnTW5BeVkrQWpNeUZoWVZJelFtSmlNaURnSUQ3L3lEQTMzUy9SUUJWUWdERWk0b3JSMGtGQWNDQ1FRelpJNVlnYXhWdVRkYk55NUpNaG1ZQWRaNWVYcis2bENWZHlSR0NFTmVaaXNCRm1paWNEdGhyblJWWmkwa1NHa0FCUUFPQUFBRGtnU05BQU1BQndBTUFCRUFGUUFiUUFzR0J3TUNBaEVVQ2drUmZRQS9NejhTT1h3dk14ak9NakF4UVJVaE5RVVZJVFVsQVRNQkl3TUJCeU1CQVJFakVRTTcvU01DM2YwakFVWUJLOFAra25IZkFTMFZiLzZSQWh1NEFocDZlc1I0ZUk4Q3FQMEFBd0Q5VTFNREFQMlMvZUVDSHdBQ0FJc0FBQU9GQkkwQUF3QUhBQTYxQndZRGZRSUtBRDgvTXpNd01VRVJJeEVoRlNFMUFVUzVBdnI5a3dTTiszTUVqWm1aQUFBREFCUUFBQVJVQkkwQUF3QUlBQTBBRzBBTUNBeDlBQVVGQ1FJREF3a0tBRDh6RVRNUk14RXpQek13TVdFMUlSVUJBVE1CSXdFQkV5TUJBN3o4N2dHa0FVREcvamVPL3Q4QlBsR08vamVZbUFOcS9KWUVqZnR6QTJrQkpQdHpBQUFEQUdELzhBUmJCSjBBQXdBWkFDOEFGMEFLQXdJQ0NpQVZmaXNLQ3dBL016OHpFamt2TXpBeFFSVWhOUVVWRkE0Q0l5SXVBalUxTkQ0Q016SWVBZ2MxTkM0Q0l5SU9BaFVWRkI0Q016SStBZ05WL2lBQzVraUd1M054dTRsS1NvZTdjWFM3aDBpM0xGUjZUVXA0VlM0dVZubEtUbmhVS3dLU21KZ3JRb1RSazAxTms5R0VRb1RSbEUxTmxOSEdSR09ZYURZMmFKaGpSR09aYVRZMmFaa0FBZ0FVQUFBRVZBU05BQVFBQ1FBT3RRRUpDZ1FJZlFBL016OHpNREZCQVRNQkl3RUJFeU1CQWs0QlFNYitONDcrM3dFK1VZNytOd05xL0pZRWpmdHpBMmtCSlB0ekFBTUFQZ0FBQTBzRWpRQURBQWNBQ3dBWFFBb0hCZ1lDQ2d0OUF3SUtBRDh6UHpNU09TOHpNREZsRlNFMUFSVWhOUUVWSVRVRFMvenpBc3I5ZHdMTS9QT1ltSmdDRkptWkFlR1ltQUFEQUlzQUFBUkVCSTBBQXdBSEFBc0FFN2NLQlFzSEFnQURmUUEvTXpNek15OHpNREZCRlNFMU14RWpFU0VSSXhFRHJ2MXZKN2tEdWJvRWpaaVkrM01FamZ0ekJJMEFBd0JBQUFFRHlRU05BQU1BQndBUUFDVkFFZzBJQ1FNS0JoQVFEZ2Q5Q2dJTUF3TUNDZ0EvTXhFekVUTS9Nek1STXhJWE9UQXhaUlVoTlFFVklUVUJGUUVqTlFFQk5UTUR5ZnpCQXczODBBSUovanhzQVZEK3NHeVptSmdEOUppWS9jY1ovY2FQQWJjQnQ0OEFBd0JoQUFBRkJnU05BQlVBSndBckFCVkFDUllBQUN0OUhnd3FDZ0EvelRJL015OHpNREZCTXpJZUFoVVVEZ0lqSXlJdUFqVTBQZ0lYSWdZR0ZSUVdGak16TWpZMk5UUW1KaU1URVNNUkFvWlpkY21WVkZTVnlYVlpkY2lWVTFPVnlIVjFvMVZWbzNWYmRhTldWcU4xTUxvRUdEeDNybkp5c0hnK1BYZXdjbkt2ZHoyYlFZdHVib3hCUW8xdWJvbEJBUkQ3Y3dTTkFBQUNBR0VBQUFTMkJJMEFHUUFkQUI5QURoVVVGQVlIQncwY0RnQWRIUTE5QUQ4ekVUTS9FamtSTXpNUk16QXhRVE1SRkFZR0l5TWlMZ0kxRVRNUkZCNENNek15TmpZMUFSRWpFUVA5dVlQM3JoVi94NHBJdVN4WWcxZ1ZmS0pSL3V1NUJJMyt5TGIraEV1UjFJZ0JPUDdJWkp0ck4yRzdoUUU0KzNNRWpRQURBSFlBQUFSK0JKMEFMQUF3QURRQUowQVRMVFFLTGpNS0tCSVNLUkVSTWpJeENnWWRmZ0EvTXo4ekVUTVJNek1STXo4elB6TXdNVUUxTkM0Q0l5SU9BaFVWRkI0Q0Z4VXVBelUxTkQ0Q016SWVBaFVWRkE0Q0J6VStBZ0UxSVJVaE5TRVZBOEluVVh4V1ZYeFJKeVJHWXo5dHFIUThSSVBBZTN2QWhFUTdjcVpzVzNNNC92b0J3dnY4QWNFQ2FDWlNpR1EyTm1TSVVpWm1uWEZIRUhvTlhaaktlU1J3d0pCUlVaREFjQ1I1eVpoZERub1djTDMrSUppWW1KZ0FBd0FuLyt3RkxRU05BQU1BQndBakFCeEFEUmNXQ3lBTkRRTUVDZ1VDQTMwQVB6TXpQeEk1THpNL016QXhRUlVoTlFFUk14RUROVDRDTXpJV0ZoVVVEZ0lqTlRJK0FqVTBKaVlqSWdZR0E3RDhkd0ZqdWtJNGNvQkxpY1JwUkh1bFlrSmxReUk0YjFWSWdIUUVqWmlZKzNNRWpmdHpBaHlaRlNFU1dyT0lhcEpaSjVnWU5WZy9XRzgxRWlFQUFBSUFZZi93QkRFRW5RQURBQ3NBRjBBS0FBRUJDUjBVZmlnSkN3QS9Nejh6RWprdk16QXhRUlVoTlFFekRnSWpJaTRDTlRVMFBnSXpNaFlXRnlNdUFpTWlEZ0lWRlJRZUFqTXlOallDMmYzMkFxaTZESEhObDNHMmdrWkdoTHQwa3NoeERMb0tQblpmVDNoUktTVk1kbEJrZUQ4Q2xKbVovdVZ4c21aTmo4cDlabjNLa0UxbHRIVk5ianMxWjVKZFoxaVJhams0YlFBQUF3QW9BQUFHK3dTTkFCRUFLUUF0QUNCQUR5Z3BLUndzSFFFdGZSOGNDZ3NJQ2dBL016OHpQek16TXhJNUx6TXdNVUV6QXc0RUl5TTNOejRFTnlVeUZoWVZGQTRDSXlFUk14RWhNalkxTkNZbUl5RTFBeFVoTlFFb3VoUUVHek5UZUZNMkF5a3JQaW9iRHdRRU40bkJaVGx2b0dmK01ib0JGWUYxTTIxVy9yaHgvY01FamYzbWZjbVhaREtsQVFFaVJHeVhZMlZib214UmhtSTJCSTM4QzRSVk4xMDZtUUcxbUpnQUFBTUFpd0FBQndvRWpRQVhBQnNBSHdBaFFBOFhGaFliR2hvZUN4OTlEUW9LSGdvQVB6TVJNejh6RWprdk16TXZNekF4UVRJV0ZoVVVEZ0lqSVJFekVTRXlOalUwSmlZaklUVUhGU0UxRXhFakVRVmFpY0ZtT20rZ1ovNHh1Z0VWZ25RemJGZit1R2I5Y3lXNUF0aGJvbXhSaG1JMkJJMzhDNFJWTjEwNm1VMlptUUlDKzNNRWpRQURBQ2tBQUFVdUJJMEFBd0FIQUJzQUdVQUxHQTBOQXhNRUNnVUNBMzBBUHpNelB6TVNPUzh6TURGQkZTRTFBUkV6RVFNMVBnSXpNaFlXRlJFakVUUW1KaU1pQmdZRHNmeDRBV081UVRoeGdFdUp4R201T0hCVlNIOTBCSTJabWZ0ekJJMzdjd0ljbVJVaEVsbTBpLzZiQVdWYWNUUVNJUUFFQUl2K21nUkRCSTBBQXdBSEFBc0FEd0FiUUF3UEMzMERCd2NPQ2dJQ0Nnb0FQek12RVRNekVUTS9NekF4WlJFakVTVVZJVFVURVNNUklSRWpFUUxGdWdHai9XOG51UU80dVlUK0ZnSHFGSmlZQS9YN2N3U04rM01FalFBQUFnQ0xBQUFFQ1FTTkFCY0FHd0FiUUF3Q0FRRU5DdzRLR3hvYURYMEFQek1STXo4ekVqa3ZNekF4UVNFVklUSVdGaFVVQmlNaEVTTVJJVEkrQWpVMEppWVROU0VWQWxuK3VRRkhWMnd6ZElMKzY3a0J6bWVnYnpwbXdiUDlnd0xZbVRwZE4xV0VBL1g3Y3paaWhsRnNvbHNCSDVhV0FBTUFMdjZzQk9nRWpRQVFBQllBSGdBalFCQWFIUjBKRndvS0hCUUpDaFlSRVFCOUFEOHlFVE0vTXpNekVUTVJNeTh6TURGQk13TU9CQWNqTnpNK0F6Y1RJUkVqRVNFQklSRWpFU0VSSXdGU3R4QUZKejlQV3k5Y0JTZ2dQelVqQlR3QzI3bjkzdjZ4QkxtNi9MdTdCSTMrU29yVG5YRlBIWmdtVm55OGpRRzArM01EOWZ5ai9oUUJWUDZ0QUFBRkFCOEFBQVhzQkkwQUF3QUpBQTBBRXdBWEFEVkFHUlFYRnhFTUN3c0hCeEVSQmc0T0R3b0NBaFVLQ1FNREQzMEFQek1STXo4ekVUTVNPUzh6TXhFekVUTVJNeEV6RVRNd01VRVJJeEVoQVNFbk13RVRBVGNKQWpNQk13Y25BU01CQTJLNUF4LytYZjdpSE5FQkxCcitzb2NCc2Z2ei9tVGhBU3ZSSEs3K3RPc0J0UVNOKzNNRWpmMXFtUUg5KzNNQ0U0Yjlad0gzQXBiK0E1a2MvZTBDbVFBQ0FFai84QVBWQkowQUhnQStBQjFBRFI4Q0FnRStQaFUwS2dzTEZYNEFQek0vTXhJNUx6TXpFVE13TVVFak5UTXlOalkxTkNZbUl5SUdCaFVqTkQ0Q016SWVBaFVVRGdJbk16SWVBaFVVRGdJaklpNENOVE1lQWpNeU5qWTFOQzRDSXlNQ0VKS09XbkF6T0hSY1FteEJ1VUZ6bWxwZm8zcEZRM2VlN0pKMXEyODJTb09vWDBpYWhWSzVCVVp4UkZwK1FpTkZaVUtPQWl4MEswODJNMUF2SkVvNlMzZFVMU1ZOZVZORmNWRXNSUzlUYmo5WGdGTW9JRTJDWVVKUUpDeFRPVE5MTVJnQUFBTUFpd0FBQkdJRWpRQURBQWNBQ3dBYlFBd0FBd29IQ3dvQkFnVUZDSDBBUHpNUk16TS9Nek16TXpBeGR3RVhBUUV6RVNNQk14RWp3QUxvZy8wWkFtUzZ1dnpqdWJsY0JERmMrODhFamZ0ekJJMzdjd0FBQXdDTUFBQUVMQVNOQUFNQUNRQU5BQjlBRGd3TEN3Y0hCZ1lDQ1FOOUNnSUtBRDh6UHpNU09TOHpFVE1STXpBeFFSRWpFU0VCSXljekFSTUJOd0VCUmJrRGdmM3E4QnkrQVlRUS9sdHVBaVlFamZ0ekJJMzlhcGtCL2Z0ekFoT0cvV2NBQUFNQUtBQUFCRGNFalFBREFBY0FHUUFZUUFzVEVBb0hBZ01EQ0gwR0NnQS9Qek1STXpNL016QXhRUlVoTlNFUkl4RWhNd01PQkNNak56YytCRGNEay8zREF1RzYvYXU2RmdVY05GTjJVRFlES1NzOUtob1BCQVNObUpqN2N3U04vZVo5eVpka01xVURBeUpFYXBWakFBQUNBQ1AvN0FRTUJJMEFFZ0FYQUJkQUNnRVhmUlVXRmc0T0J3c0FQek1STXhFelB6TXdNVUVCTXdFT0FpTWlKaWMzRmhZek1qWTJOd01URXdjQkFpSUJGZFgrYkNGTGZHc1pRZ2tHQzBFUU1rRXJFdHY5Y0ovK1hRRzRBdFg4WlVwM1JRUURsQUVETFVVa0EzVDlwUDdhTHdPeEFBUUFpLzZzQlBJRWpRQUZBQWtBRFFBUkFCMUFEUkVOZlFVSkNSQUxDQUlDQ0FvQVB6TXZFVE16TXhFelB6TXdNV1VESXhFak5UTVZJVFVURVNNUklSRWpFUVR5RXFhUUJQMXZKN2tEdWJxWS9oUUJWSmlZbUFQMSszTUVqZnR6QkkwQUFnQTlBQUFENEFTTkFBTUFGd0FUdHhRSkNRSUREbjBDQUM4L014STVMek13TVVFUkl4RVRGUTRDSXlJbUpqVVJNeEVVRmhZek1qWTJBK0M2UWpoeWYweUl4V202T0hCVVNYOTFCSTM3Y3dTTi9lYVpGU0FUV2JXS0FXUCtuVnB3TlJNZ0FBUUFpd0FBQmNjRWpRQURBQWNBQ3dBUEFCbEFDd3NIQnc4UUNnWUdBdzU5QUQ4ek14RXpQek1STXpBeFpSVWhOUUVSSXhFaEVTTVJJUkVqRVFVeCs4WUNqcmtDKzdyOE43bVltSmdEOWZ0ekJJMzdjd1NOKzNNRWpRQUFCUUNML3F3R2RRU05BQVVBQ1FBTkFCRUFGUUFuUUJJUkRRMFZmUVFRQWdJUUVBd01FeE1KQ0FvQVB6TXpFVE1STXhFekx4RXpQek1STXpBeFpRTWpFU00xTXhVaE5RRVJJeEVoRVNNUklSRWpFUVoxRXFXUUEvdkdBbzY1QXZ5Ny9EZTVtUDRVQVZTWW1KZ0Q5ZnR6QkkzN2N3U04rM01FalFBQ0FBa0FBQVRYQkkwQUF3QWFBQmRBQ2dZRkJROFNDaEVCQUgwQVB6SXlQek01THpNd01WTVZJVFVCSVJVaE1oWVdGUlFHSXlFUkl4RWhNalkyTlRRbUpna0J0UUZwL3JrQlIxZHRNM1dDL3V1NUFjNkp3V1ptd1FTTm1KaitTNWs2WFRkVmhBUDErM05lcG10c29sdi8vd0NMQUFBRlp3U05CQ1lDR0FBQUFBY0I4d1FXQUFBQUFRQ0xBQUFFQ1FTTkFCWUFGVUFKRlJZV0Nnd0pDZ3A5QUQ4L014STVMek13TVVFeUZoWVZGQVlHSXlFUk14RWhNalkxTkNZbUl5RTFBbG1Kd1dabXdZbitNcmtCRllKME0yeFgvcmtDMkZ1aWJHdW1YZ1NOL0F1RVZUZGRPcGtBQWdCTC8vQUVHd1NkQUFNQUt3QVhRQW9DQVFFY0NDY0xFeHgrQUQ4elB6TVNPUzh6TURGQklUVWhBUjRDTXpJK0FqVTFOQzRDSXlJR0JnY2pQZ0l6TWg0Q0ZSVVVEZ0lqSWlZbUp3T3QvZmNDQ2YxWUREOTVaRkIxVENVcFVYaFBYblkrQzdvTmNNbVJkTHVFUmthQnRuR1h6WEVOQWZ1Wi91Vk5iVGc1YXBGWVoxMlNaelU3YmsxMXRHVk5rTXA5Wm4zS2owMW1zbkVBQUFRQWkvL3dCaFlFblFBREFBY0FIUUF6QUIxQURpUVpmaThPQ3dNQ0FnWUhmUVlLQUQ4L0Vqa3ZNejh6UHpNd01VRVZJVFVURVNNUkFSVVVEZ0lqSWk0Q05UVTBQZ0l6TWg0Q0J6VTBMZ0lqSWc0Q0ZSVVVIZ0l6TWo0Q0FvWCtiMUM1Qll0SWhydHpjYnVKU2txSHUzRjB1NGRJdUN4VWVVMUxlRlV1TGxkNFMwMTVVeXNDbDVtWkFmYjdjd1NOL2RwQ2hOR1RUVTJUMFlSQ2hOR1VUVTJVMGNaRVk1aG9OalpvbUdORVk1bHBOalpwbVFBQUFnQlFBQUFEL1FTTkFBTUFJd0FaUUFzakFBUUVHUnNXZlJrQkNnQS9Nejh6RWprdk16TXdNVUVCSXdFRklTNENKeTRDSnk0Q05UUStBak1oRVNNUklTSUdGUlFXRmpNaEFrdit5c1VCUVFIbC9vTVBEaEVVQXc0T0ExMTNPVGh1bm1ZQnk3cis3NEZ2TUdwV0FVWUNSdjI2QWtabUFnWUhCQUVJQ0FFWFdYcEpVWDlYTHZ0ekEvVnNXRGhVTFFBQUF3QUxBQUFENkFTTkFBTUFCd0FMQUJ0QURBc0tDZ01DQmdjSEEzMENDZ0EvUHpNUk14RVNPUzh6TURGQkVTTVJJUlVoTlFFVklUVUJwcmtDKy8yU0FRNzlnd1NOKzNNRWpabVovZ2lZbUFBR0FCLytyQVlqQkkwQUF3QUhBQTBBRVFBWEFCc0FPMEFjQWc0QkFRNE9CaHNZR0JVU0VoQVBEQWtKRXdZR0dRb05Cd2NUZlFBL014RXpQek1SRWprdk16TXpNeEV6TXhFekVUTVJNeThSTXpBeFFTTVJNd0VSSXhFaEFTRW5Nd0VUQVRjSkFqTUJNd2NuQVNNQkJpT29xUDAvdVFNZi9sMys0aHpSQVN3YS9yS0hBYkg3OC81azRRRXIwUnl1L3JUckFiWCtyQUhyQS9iN2N3U04vV3FaQWYzN2N3SVRodjFuQWZjQ2x2NERtUno5N1FLWkFBUUFqUDZzQkU0RWpRQURBQWNBRFFBUkFDZEFFaEFQRHdzS0NnWU5CMzBDRGdFQkRnNEdDZ0EvTXhFekx4RXpQek1TT1M4ek14RXpNREZCSXhFekFSRWpFU0VCSXljekFSTUJOd0VFVHFlbi9QZTVBNEg5NnZBY3ZnR0VFUDViYmdJbS9xd0I2d1AyKzNNRWpmMXFtUUg5KzNNQ0U0Yjlad0FBQkFDTUFBQUU2QVNOQUFNQUJ3QU5BQkVBS1VBVEVBOFBDZ0FMQ3dvREF3b0tCZzBIZlE0R0NnQS9Nejh6RWprdk15OFJNeEV6RVRNUk16QXhRVE1SSXdNUkl4RWhBU0VuSVFFVEFUY0JBWlNWbFUrNUJEMzk2djVVSEFGNUFZVVEvbHR1QWlZRGRmMjBBMlQ3Y3dTTi9XcVpBZjM3Y3dJVGh2MW5BQVFBSkFBQUJSVUVqUUFEQUFjQURRQVJBQ0ZBRHhBUER3c0tDZzRHQ2cwSEJ3TUFmUUEvTWpJUk16OHpPUzh6TXhFek1ERlRJUlVoSlJFakVTRUJJeWN6QVJNQk53RWtBYlgrU3dJS3VRT0IvZXJ3SEw0QmhCRCtYRzBDSmdTTm1Kajdjd1NOL1dxWkFmMzdjd0lUaHYxbkFBRUFZUC9yQlZ3RW9BQkVBQnRBREFBQkFTOFlDeVFqSXpvTmZnQS9Nek1STXo4ek15OHpNREZsRlNJdUF6VTFORDRDTXpJZUFoVVZGQTRDSXlJdUFqVTFORDRDTXhVaURnSVZGUlFlQWpNeVBnSTFOVFF1QWlNaURnSVZGUlFlQWdWY2xmekZpa2cwWkpGY1hKQmxORit1NzVHTDNKbFJRWG1uWmo5a1JpVTFaNWxqY0sxNFBoZ3hUVFUwVFRJWVRwdnBpcDQ0YjZIVGdTWjF0NEJEUUg2NWVEcVQ3NnRjVXAvbWt4K0d6NDVKbmpCamxHVWhjNjF6T1VTQXRuRTlWWDVUS1N0VmZWSXJnTDkrUHdELy93QU9BQUFFSEFTTkJDWUI0d0FBQUFjQ05nQkUvdDBBQWdBbi9xd0VjUVNOQUFNQUR3QWlRQkVMRGdnRkJBb0dEMzBDQ2dFQkNnb05DZ0EvTXhFekx4RXpQek1TRnprd01VRWpFVE1KQWpNQkFTTUJBU01CQVFSeHA2ZjhtZ0VkQVIvZC9uVUJtZDMrMXY3WTNBR1cvblArckFIckEvYitUUUd6L2I3OXRRRzcva1VDU3dKQ0FBVUFKLzZzQmZNRWpRQUZBQWtBRFFBUkFCVUFJa0FRRVEwTkZCVjlFQklNQ1FRSUFnSUlFZ0EvTXk4Uk16TXpQejh6TXhFek1ERmxBeU1SSXpVekZTRTFFeEVqRVNFUkl4RWpGU0UxQmZNU3BwQUUvVzRvdWdPNXVkdjhkNWorRkFGVW1KaVlBL1g3Y3dTTiszTUVqWmlZQUFNQVBRQUFBK0FFalFBREFBY0FHd0FmUUE0QUdCZ05Bd01ORFFZSEVuMEdDZ0EvUHpNU09TOHpMeEV6RVRNd01VRXpFU01CRVNNUkV4VU9BaU1pSmlZMUVUTVJGQllXTXpJMk5nSEdsSlFDR3JwQ09ISi9USWpGYWJvNGNGUkpmM1VESFAyMEE3Mzdjd1NOL2VhWkZTQVRXYldLQVdQK25WcHdOUk1nQUFJQWl3QUFCQzBFalFBREFCY0FGRUFKRHhJVUNRa0JmUUFTQUQ4L09TOHpQekF4Y3hFekVRTTFQZ0l6TWhZV0ZSRWpFVFFtSmlNaUJnYUx1VUU0Y1lCTGljUnB1VGh3VlVpQWRBU04rM01DSEprVklSSlp0SXYrbXdGbFduRTBFaUVBQVFBQy8vQUZiQVNkQURRQUcwQU1HQmdkSFJFUklndCtMUUFMQUQ4eVB6TTVMek1STXk4d01VVWlMZ0kxTlRRK0FqTXlIZ0lWRlNFaUxnSTFNeFFXRmpNaE5UUW1KaU1pRGdJVkZSUWVBak15TmpjWERnSURrb1BRa2sxT2k3eHZnTU9EUXZ3bVk1WmtNNWsxYlZVRElVcVVjVXA2Vnk4cldvOWthSXN3T1JsZGloQk5qc0oyZzNmRWowMUtpc1I3aGpWampGWkZaamdiWnBWUk5tU01Wb05SaDJNMk1SYVNEeWtmQUFFQVh2L3dCR29FblFBckFCVkFDUkVVRkJrTEN5UUFmZ0EvTWo4ek9TOHpNREZCTWg0Q0ZSVVVEZ0lqSWk0Q05UVWhGU0VWRkJZV016SStBalUxTkM0Q0l5SUdCeWMrQWdKSWY4cU9TMDJNdkc2Qnc0TkNBNDc5TEVtVmNVcDVWeThyV285a2FJc3ZPUnBna0FTZFRZN0Rkb0ozeEk5TlNvckVlNGFZR21hVlVUWmtqRmFDVVlkak56RVhraEFwSHdBQUFnQkkvK3dEMVFTTkFBY0FKZ0FiUUF3SUJRVUVKaVlkRXdzSEFIMEFQekkvTXprdk16TVJNekF4VXlFWEFTTTFBU0VCTXpJZUFoVVVEZ0lqSWk0Q05UTWVBak15TmpZMU5DWW1JeU53QXpnQi9rcG9BU245dkFFYmhYV3JielpLZzZoZlNKcUZVcmtGUm5GRVduNUNQbmxZZ1FTTmR2NDVkQUV4L3NBOVozMUJYb2hYS2lKTmhHRkNVeWN2WFVWQVdUQUFBQU1BWVAvd0JGc0VuUUFWQUNRQU5BQWJRQTRMSldvdEhXb3RMUXNBRm1vQUN3QXZMeXNTT1M4ckt6QXhRVEllQWhVVkZBNENJeUl1QWpVMU5ENENGeUlHQmdjR0JnY2hKaVluTGdJRE1qWTJOelkwTnlFV0ZoY2VBd0pkZEx1SFNFaUd1M054dTRsS1NvZTdjVm1JVlFzQkFRRUNpZ0VCQVF0VGlGdGVpVkVLQVFIOWRnRUJBUWcxVkc4RW5VMlUwWVJDaE5HVFRVMlQwWVJDaE5HVVRadE5sV3dJRVFrSkV3aHJsRTM4aUU2WWJRZ1BCd2dSQ0ZGK1ZTd0FCQUF4QUFBRDd3U2RBQU1BQndBTEFDb0FJVUFQQmdjREFnSUpKaDErRWdvS0VRa1NBRDh6TXhFelB6TVNPUzh6empJd01VRVZJVFVGRlNFMUFTRTFJUUVURmdZR0J5YytBeWNESmo0Q016SVdGaFVqTkNZbUl5SU9BZ01kL1JRQzdQMFVBNzc4Z3dOOS9aY0lBeEl1S0swZEpCUUhBZ2tFTTJTT1dJR3NWYmszV3pjdVNUSVpBcWw2ZXVkNWVmNCttQUpRL3VwUWxYY2tSZ2hEWG1ZckFSWm9vbkE3WWE1MFZXWXRKRWhwQUFBREFFUC84QU9mQkowQUl3QW5BQ3NBSFVBTkp5WW1LaXNyQnhrU2ZnQUhDd0EvTXo4ekVqa3ZNek12TXpBeFpUSTJOeGNHQmlNaUxnSTFOVFErQWpNeUZoY0hKaVlqSWc0Q0ZSVVVIZ0lURlNFMUJSVWhOUUs2TzFzMEd6ZHdQbkd5ZkVGQWU3SnhQMnM5RlROa08wdHVTU01rU1cvQi9STUM3ZjBUaHc4T2xROFFRSCs4ZTd4N3ZvQkNFUTZVRUFzdFdZUlh2bGVEV1N3Q2JubDU1bmw1QUFBRUFJc0FBQWV0QkowQUF3QVZBQ2NBTVFBcFFCSXJNQzR0SkFrSk1TNTlLaTBLR3hJU0FnTUFMek16ZkM4ekdEOHpQek16THpNUkVqazVNREZCRlNFMUF6VTBOall6TWhZV0ZSVVVCZ1lqSWlZbU54VVVGaFl6TWpZMk5UVTBKaVlqSWdZR0FSRWpBUkVqRVRNQkVRZHYvZE5CVkpscGFwbFRVcGxwYXBwVW95ZFJQVHhQSnloUFBUeFFKLzYxdWYya3Via0NYQUZMam80QnNGTmlsMVpXbDJKVFlaZFdWcGUwVXpoWk16TlpPRk0zV0RRMFdBRUkrM01EYlB5VUJJMzhsQU5zQUFBQ0FDZ0FBQVJuQkkwQUdBQWNBQnRBQ3hzY0FnRUJEZ3dQZlE0S0FEOC9NeEk1ZkM4ekdNNHlNREZCSVRVaE1qWTJOVFFtSmlNaEVTTVJJVElXRmhVVURnSUhGU0UxQXJmOWNRS1BWMnd6TTJ4WC91dTVBYzZKd1dZNmI2QjUvWU1CcFpoQVpEWTVaVUQ4Q3dTTllhaHJVWWhrTjFtWGx3QUNBRC8vOVFLYkF5QUFHUUF6QUJsQUNoc0FBQmthR2dnUUxDUUFMelBNTWprdk16TVJNekF4UVRNeU5qWTFOQ1lqSWdZVkl6UTJOak15RmhZVkZBWUdJeU1WTlRNeUZoWVZGQVlHSXlJbUpqVXpGQll6TWpZMU5DWW1Jd0VLVkRGQUlVQkZPVXVkVElKUVY0UktRWHRZYjI5a2dENVFpMWRMaVZhZFVFSkdTU2RITVFITEhERWdMRHd5SzBSak5qTmtTVFZaTlNWT01GcEFTV2cyTVdoUkxUMCtNU296RndBQ0FEWUFBQUs4QXhVQUJ3QUxBQmRBQ1FNSEJ3RUJCZ1VJQ2dBdnpESXlPUzh6RVRNd01VRVZJU2NCTXdjREFSRWpFUUs4L1lFSEFYcDhpYzhCZkowQkxJSm1BZ1hsL3Z3QjZmenJBeFVBQUFFQVhQLzFBcWdERlFBaEFCSzJId2tKQkFNWkVRQXZNOHd5T1M4ek1ERlRKeE1oRlNFSE5qWXpNaFlXRlJRR0JpTWlKaVluTXhZV016STJOVFFtSXlJRzduMHhBZC8rb3hjVFN5NVZlVUZBZ21SS2hGUUVtd1ZNT2trL1RrazNPQUZrSUFHUmc2c0lGajUwVVVkN1N6Vm1TRE13VWowK1Rod0FBUUJXLy9VQ3JBTWZBQzBBRTdZVEhCd0RBQXdrQUM4enpESTVmUzh6TURGQk14VWpJZ1lHRlJVVUZoWXpNalkyTlRRbUl5SUdCZ2NuUGdJek1oWVdGUlFHQmlNaUppWTFOVFErQWdJVEZndGloa01tUWlvcVBpSkhSQ3RHS2dJcUF6dHJTRlZ4T0VlRFdsNkpTemx4cGdNZmd6bDJXblE0VENZbVFDZytTeUUwSEM4cldUNUdlRXBOZTBkTmpXQTNhS055UEFBQUFRQTdBQUFDcGdNVkFBWUFETE1GQVFZQ0FDL01Nakl3TVVFVkFTTUJJVFVDcHY2aXBnRmUvanNERlZyOVJRS1VnUUFFQUUvLzlRS2ZBeUFBRHdBZkFDOEFQUUFYUUFvTUpEc0RGQlEwTEJ3RUFDOHp6REk1THhjek1ERmxGQVlHSXlJbUpqVTBOall6TWhZV0J6UW1KaU1pQmdZVkZCWVdNekkyTmhNVUJnWWpJaVltTlRRMk5qTXlGaFlITkNZbUl5SUdGUlFXRmpNeU5nS2ZUWVpVVklaUFRZWlZWWVpObkNRL0tTbytJaUkvS2lrL0k0bEhmRkZSZlVkSGZWQlFmVWllSFRVbE4wQWROaVUzUDloTFpUTXpaVXRFWWpZMllqZ2pNUnNiTVNNaU1oc2JNZ0dDUGwwek0xMCtSMkl6TTJKUkh5MGFOakFlTGhvNEFBQUJBRXIvK1FLVkF5QUFMZ0FUdGhJYkd3b2pBUzBBTHpQTU1qbDhMek13TVhjek1qWTJOVFUwSmlZaklnWUdGUlFXRmpNeU5qWTNGdzRDSXlJbUpqVTBOall6TWhZV0ZSVVVEZ0lqSTlFT1pIdzZKVDRvS2owaEh6NHRMVUlsQVM4Q1BHWkRWSFE3UjROYVhZUkdOR3lrY1E5NE5HeFNramRJSkNwRktTaEFKaUkwR2kwdVZ6aERkMDVOZjAxTmtHVXphYUZ2T1FBQkFJOENpd01NQXlNQUF3QUlzUU1DQUM4ek1ERkJGU0UxQXd6OWd3TWptSmdBQXdDZkJFQUNid1p5QUFNQUR3QWJBQmxBQ1JNTkRRY0JBd01aQndBdk16TjhMeGpORVRNUk16QXhRVGN6QndjME5qTXlGaFVVQmlNaUpqY1VGak15TmpVMEppTWlCZ0Vna3IzYzlHVkdSV05qUlVabFZEUWpJekV4SXlNMEJidTN0OWhLWFYxS1NGdGJTQ014TVNNbU1qSUFCQUNMQUFBRHJ3U05BQU1BQndBTEFBOEFHMEFNQ3dvS0JnOE9CMzBEQWdZS0FEOHpNejh6TXhJNUx6TXdNV1VWSVRVVEVTTVJBUlVoTlFFVklUVURyLzFvTGJrQ3pmMi9BcEw5YnBpWW1BUDErM01FamY0Wmw1Y0I1NW1aQUFRQUgvNUtCQkVFVGdBU0FDUUFXd0JmQUROQUdsMWZCbklsSmhnWUQwQkJRUzVUVXc4UEJVbzNEM0loQlFkeUFDc3lLeklST1M4NUVUTXpFVE1STXhJNU9Tc3lNREZUTlRRMk5qTXlGaFlWRlJRT0FpTWlKaVkzRlJRV0ZqTXlOalkxTlRRbUppTWlCZ1lURndZR0ZSUVdGak16TWhZV0ZSUU9BaU1pTGdJMU5EWTJOeGNPQWhVVUhnSXpNajRDTlRRbUppTWpJaVltTlRRMk5nRVhJU2RkYmNGK2dNRnNQbkdkWDMvQ2Jiazlia3BKYlR3OWJrbEliajBuWGh0QUlqb2pySUszWWtlS3g0QnhyWFU4V29WQ055cElMU0ZGYUVoVmcxa3VLV05XMEVWMVNEZE5BdklDL29NTEF0SVdhS0pjWEtKb0ZrbUNZemhobzNnV05GODhQRjgwRmpoZE9UbGQvcTR5RUQwNEh5VVBQNEpsT1hobFBpeE9aRGRaZlVzTlRRYzFUekVoT3kwYUl6bENIeTFBSWlaUFBrTmNQQUova3BJQUFBUUFaUC9yQkZrRVRnQVZBQ3NBTHdBekFCZEFEREFLTFFZY0VRdHlKd1lIY2dBck1pc3lQejh3TVZNMU5ENENNekllQWhjVkRnTWpJaTRDTnhVVUhnSXpNajRDTnpVdUF5TWlEZ0lGRXpNTEFqTVRaRGhybm1abW1HbytEQXMrYTVsblpKMXNPTG9nUTJ0TFAxNURMQTRMS2tOZ1FFeHJSQ0FDTlU2eGFrQlZsWEVCOVJXQTFKdFZTWW5CZVV0NHdZcEpUWXkvaHhWTmhtWTVRRzZNVENWS2kzRkNSSGFiUlFJZS9lTDk1QUljL2VRQUFBSUFzZ0FBQk9RRnNBQVpBQzRBSDBBUEpnZ2JHaG9DQVFFT0RBOENjZzRJQUQ4ck1oSTVMek16RVRNL01ERkJJU2NoTWpZMk5UUW1KaU1oRVNNUklUSVdGaFVVQmdZUEFqY3lGaFlWRlJRV0ZoY1ZJeTRDTlRVMEppWUMzLzVtQWdGb2RJdy9Qb1JyL3JiQkFnMmcyM0ZVb0hJWVZCYW52RTRNSGhyR0hob0dQM1lDZFowN2NsSk9kRC82N2dXd1g3aUlYWkpsR2hzVGIxK29iSVVvVDBNWkdSdGRYQnFCVDNaQkFBQURBTElBQUFVZUJiQUFBd0FKQUEwQUlFQVFDZ2dKQWd3TEN3Y0dCZ0lEQW5JQ0NBQS9LeEk1THpNekVUTS9QekF4UVJFakVTRUJJU2NoQVJNQk53RUJjOEVFUXYySS9xb2VBUUVCL0MzOTNXd0Nvd1d3K2xBRnNQemZvQUtCK2xBQ3FLbjhyd0FEQUpNQUFBUVZCZ0FBQXdBSkFBMEFIRUFPQ3djR0JnSUpCbklEQUhJS0Fnb0FQek1yS3hJNUx6TXpNREZCRVNNUkFRRWhKek1CRXdFM0FRRk11UU5PL2tQKzVoYldBVHMwL294aUFlNEdBUG9BQmdEK092MjdtZ0dyKzhZQ0FxWDlXUUFBQXdDeUFBQUUrd1d3QUFNQUNRQU5BQnBBRGdZTEJ3Z01CUUlKQXdKeUNnSUlBRDh6S3pJU0Z6a3dNVUVSSXhFaEFTRW5Nd0VUQVRjQkFYUEJCQ0Q5VWY3dUMzZ0NaQ3Y5TmFFREdBV3crbEFGc1AwZld3S0crbEFDNkdYOHN3QUFBd0NUQUFBRDhnWVlBQU1BQ1FBTkFDQkFFQXdMQ3djR0JnSUpCbklEQVhJS0Fnb0FQek1yS3hJNUx6TXpFVE13TVVFUkl4RUJBU01uTXdFVEFUY0JBVXk1QXpYOTNKb1dXUUdLTnY0NWF3SkJCaGo1NkFZWS9pTDl1cGtCcmZ2R0FnQ1QvVzBBQWdDTEFBQUVJQVNOQUJrQUhRQVdRQWtiR2c4Q0FRNFBmUUVBTHo4ekVUTVJNekl3TVdFaE55RXlOalkxTlRRdUFpTWhOU0V5SGdJVkZSUUdCZ0VSSXhFQjUvNzRBUUVIZ2F0VU1GNkxXLzdtQVJwOHpaUlFqZi8rc0xtWVlMTjdRbCtVWlRTWlRaSExma0NuK0ljRWpmdHpCSTBBQUFFQVlmL3dCREVFblFBbkFCRzJHUlVRZmlRQUJRQXZ6RE0vekRNd01VRXpEZ0lqSWk0Q05UVTBQZ0l6TWhZV0Z5TXVBaU1pRGdJVkZSUWVBak15TmpZRGQ3b01jYzJYY2JhQ1JrYUV1M1NTeUhFTXVnbytkbDlQZUZFcEpVeDJVR1I0UHdGNWNiSm1UWS9LZldaOXlwQk5aYlIxVFc0N05XZVNYV2RZa1dvNU9HMEFBQUlBaXdBQUEvQUVqUUFaQURFQUtFQVRIQnNwR1FJQ0FSc21BUUVtR3dNTkRBOTlEUUF2UHpNU0Z6a3ZMeThSTXhJNU9SRXpNREZCSVNjaE1qWTJOVFFtSmlNakVTTVJJVEllQWhVVUJnWUhBeUUzSVRJMk5qVTBKaVlqSXpjaEZ4NENGUlFPQWdKUy9zRUNBUjFJYURnNGJWRGR1UUdXWTU1eFBFeU9aVWYraUY4QkdVMXBOeTlsVU84QkFVRW9ZSUZDTzIrY0FoT01KMHMyUEUway9Bd0VqU1pPZUZKSGRVa0gvYjJZTEZJNU8xZ3hqRFVEVVg5SlUzMVVLZ0FEQUJRQUFBUnhCSTBBQkFBSkFBMEFIRUFNRFFBR0F3d01BUWNEZlFVQkFDOHpQek1TT1M4U09Ua3pNREZCQVNNQk13RUJKek1CQXhVaE5RSmUvbk85QWQ5NUFVbitkZzE2QWRuWC9Vd0Q2dndXQkkzN2N3UHVuL3R6QWErWW1BQUJBSjhFandHV0Jqd0FDZ0FLc2dXQUFBQXZHczB3TVZNMU5EWTJOeGNHQmhVVm55eEJIMnNpR3dTUGdUdDFZQnhUUEdnK2VBQUNBSUlFM3dMZ0Jvc0FEd0FUQUJLMUVoTUtBQTBGQUM4emZOd3kxaGpOTURGQk14UUdCaU1pSmlZMU14UVdNekkySnljekZ3SkhtVW1JWFY2SVNwaEVWRkJGdGFTWmNRV3dQVjQyTmw0OUxrVkZRc2ZIQUFMOG93Uzkvc3dHbEFBWEFCc0FIVUFNQUJVVkJSa2JHd2tSRVF3RkFDOHpNeEV6TXk4ekVUTVJNekF4UVJjVUJnWWpJaVltSXlJR0ZTYzBOall6TWhZV016STJKVGN6Qi81NVV5dEtNVFpCT2l3aU1GUXFTekV0UkVJcUlUTCs4SU9ydGdXVkdEQlNNU1ltTXlZVk1GTXpKaVV6UXVMaUFBSUFid1RpQkZnR2xRQUdBQW9BRkxjSUJ3Y0ZBWUFFQmdBdk14ck5PVE12elRBeFV3RXpBU01uQnlVVE13TnZBU09ZQVNQRnFxb0J6NDNJeVFUaUFRYisrcDZlc1FFQy92NEFBdjlkQk04RFJ3YURBQVlBQ2dBWFFBa0hRQWdJQXdhQUFnUUFMek1helRrekx4ck5NREZCQVNNbkJ5TUJKUk1qQXdJakFTVEdxcW5GQVNMK21vNk55UVhXL3ZtZm53RUhyZjcrQVFJQUFnQnBCT1FEN1FiUUFBWUFHZ0FmUUEwUkVnaEFHZ2tJQ0FNR2dBSUVBQzh6R3MwNU14RXpNeG9RekRJd01VRUJJeWNISXdFRkl5YytBalUwSmlZak56SWVBaFVVQmdjQ05RRVNxOFhFcWdFUUFlMXpBU3cyR2laQUp3WkFZVU1pVXpNRjYvNzV1cm9CQjMyRUF3d1pGaGtkRFYwWEt6c2xRVHNIQUFJQWFRVGtBMGNHMUFBR0FCNEFKVUFRQ0FjSEVCZ01RQlFURXh3TURBYUFCQUF2R3MweUVUTXpFVE1hRU0weU1oRXpNREZCQlNNbkJ5TWxOeGNVQmdZaklpWW1JeUlHRlNjME5qWXpNaFlXTXpJMkFoa0JMcXZGeEtvQkxmbE5LMGd0TWp3MUtSODBUU3RKTENvK1BTY2ZOQVhZOUo2ZTlQd1dLRWd0SkNRdkhCTW9TUzhqSXkwQUFBTUFpd0FBQTRVRnhBQURBQWNBQ3dBYlFBd0NDZ29MQ3djREF3ZDlCZ29BUHo4ekx4RXpFVE1STXpBeFFSRWpFUUVSSXhFaEZTRTFBNFc1L25pNUF2cjlrd1hFL2pBQjBQN0orM01FalptWkFBQUNBSUlFM3dMZ0Jvc0FEd0FUQUJLMUVSTUFDZzBGQUM4emZOd3lHTmJOTURGQk14UUdCaU1pSmlZMU14UVdNekkySnpjekJ3SkhtVW1JWFY2SVNwaEVWRkJGMEhHWnBBV3dQVjQyTmw0OUxrVkZRc2ZIQUFJQWdnVGdBc3NIQkFBUEFDVUFLRUFSR3h3Y0VTVVNFaEVSQ1EwRkFBa0pCUkFBUHpOOEx6TVJNeEV6R0M4ekVUTVJNeTh6TURGQk14UUdCaU1pSmlZMU14UVdNekkySnlNblBnSTFOQzRDSXpjeUhnSVZGQVlHQndJNGswZUNXMXFFUjVKRVQwNURTWUFCTVQwZUdTdzdJUWRJYmtrbUswUW1CYkE5WGpVMVhqMHVSVVUvZlFJTUZ4UVFGdzRHVWhVbU5TQW5NQmdGQVAvL0FGRUNqUUtlQmJnR0J3SFhBQUFDbVAvL0FEWUNtQUs4QmEwR0J3SXdBQUFDbVAvL0FGd0NqUUtvQmEwR0J3SXhBQUFDbVAvL0FGWUNqUUtzQmJjR0J3SXlBQUFDbVAvL0FEc0NtQUttQmEwR0J3SXpBQUFDbVAvL0FFOENqUUtmQmJnR0J3STBBQUFDbVAvL0FFb0NrUUtWQmJnR0J3STFBQUFDbUFBQkFINy82d1VlQmNVQUtRQVZRQW9hRmhFRGNpWUFCUWx5QUN2TU15dk1NekF4UVRNT0FpTWlMZ00xTlRRU05qWXpNaFlXRnlNdUFpTWlEZ0lWRlJRZUF6TXlOallFWE1FUGh1eXFhNzZjY1Q1YXB1T0lwZktQRDhJUFdacHhZcDF3T3lwTmJJUk1kWlJSQWMrSzIzOUNmYkRlZ1QyaUFRaS9abnpja0dXVVVWR1Z6WHcvWkt5S1lqVk9rd0FBQVFCKy8rc0ZId1hGQUMwQUcwQU5MU3dzQlJvV0VRTnlKZ1VKY2dBck1pdk1NeEk1THpNd01VRVJEZ0lqSWk0RE5UVTBFalkyTXpJV0ZoY2pMZ0lqSWc0Q0ZSVVVIZ016TWpZMk54RWhOUVVmR29MWG5XL0dwSGRCWEtqaWhyTHNneFRCRDFHWWZGNmNjajh0VkhPTlQyR0pWQkwrc0FMVC9ld25aRWxCZkxQbWlSdXNBUkcvWkhUS2dVK0RUMUdYMVlNZGJMU05Zak1qTWhZQlJac0FBQUlBc2dBQUJSRUZzQUFiQUI4QUVyY2NEeEFDY2dJZEFBQXZNaklyTWpJd01XRWhOeUV5UGdJMU5UUXVBaU1oTlNFeUZoWVNGUlVVQWdZRUFSRWpFUUpUL3JnQ0FVVjN2WVJGUm9LMWIvNmlBVitTK2Jwb1o3MysvLzZId1oxT2tzcDdMWUhMalVxZVk3bisrNklyb3Y3N3VXSUZzUHBRQmJBQUFnQisvK3NGWHdYRkFCa0FNUUFRdHlFVUEzSXRCd2x5QUNzeUt6SXdNVUVWRkE0REl5SXVBelUxTkQ0RE16SWVBd2MxTkM0REl5SU9BaFVWRkI0RE16SStBZ1ZmUFcrYnZXdG91NTF6UHo5eW5MdG9hNzZiY0QyK0trNXJoVXRhblhkRExGQnRna2hmbm5SQUF1NHNnTit6Z0VWRmdMUGZnQ3lBM3JTQVJVV0F0TjZzTG1TdGltSTBVWlhPZlM1bHJvcGpORkdWMEFBREFINy9CQVZmQmNVQUF3QWRBRFVBRzBBTkpSZ0RjZ0FEQXpFTENYSUJBZ0F2TXlzeU1oRXpLekl3TVdVQkJ3RUJGUlFPQXlNaUxnTTFOVFErQXpNeUhnTUhOVFF1QXlNaURnSVZGUlFlQXpNeVBnSURxUUYwZy82VEFqSTliNXU5YTJpN25YTS9QM0tjdTJocnZwdHdQYjRxVG11RlMxcWRkME1zVUcyQ1NGK2VkRUNnL3R4NEFTRUN4eXFBMzdPQVJVV0FzOStBS29EZnRJRkZSWUcwMzZvc1phMkxZalJSbGM5K0xHV3VpMkkwVVpYUEFBRUFvQUFBQXNrRWpRQUdBQlZBQ1FNRUJBVUZCbjBDQ2dBL1B6TXZNeEV6TURGQkVTTVJCVFVsQXNtNS9wQUNDZ1NOKzNNRHA0dW55Z0FCQUlNQUFBUWdCS0FBSUFBWFFBb1FFQXdWZmdNZ0lBSVNBRDh6RVRNL016TXZNREZsRlNFMUFUNENOVFFtSmlNaUJnWVZJelEyTmpNeUhnSVZGQTRDQndFRUlQeUhBZXBMUWhBeVpFMVBla2E1ZHM2RVpabHBOUnMxVERIK2o1aVloQUc0UVZ0S0pqSlhOejUwVVhHNmNEUmNla1l3WFZwWUxQNnpBQUFCQUEvK293UGVCSTBBSHdBYVFBc0dBQjRlQXhZUEJRSURmUUEvTXpNdk14STVMek16TURGQkFTRTFJUlVCSGdJVkZBNENJeUltSnpjV0ZqTXlOalkxTkNZbUl5TUJid0YyL1hNRGMvNS9jTGR0VkpqTmVtcklhalZNcjF0OHNWNVRwNEE4QW1NQmtwaDEvbXdQZGI2QWc4cUxSek0waXlnd1g2WnFjcFZKQUFJQVB2NjJCS0FFalFBSEFBc0FGa0FKQmdRTGZRb0RCd2NDQUM4ekVUTXZQek16TURGbEZTRTFBVE1EQVFFUkl4RUVvUHVlQXRlUW4vNFNBc081bDVodUJDRCswUDA2QS9iNktRWFhBQUVBWmY2Z0JBWUVqQUFuQUJaQUNTUUpDUUlhRXdVQ2ZRQS9NeTh6RWprdk16QXhRU2NUSVJVaEF6WTJOelllQWhVVURnSWpJaVluTnhZV016SStBalUwTGdJaklnWUdBU0NhWmdNVS9YODNMSUJZWnFOMFBVU0Z4b05xeVZ3NlE2NWtUMzliTUNsT2IwZFdZelVCWXhFREdLditkUm9tQVFGRWdyVnZicitRVVRjN2lqUXdPR1NJVUVSMldUSWpRQUFBQVFCSy9yWUQ4Z1NOQUFZQUQ3VUJCUVVHZlFNQUx6OHpFVE13TVVFVkFTTUJJVFVEOHYyaHV3SlgvUnNFalduNmtnVS9tQUFBQWdDRUJOa0Mwd2JRQUE4QUp3QXBRQkVSRUJBWklTRVZIUndjSlJVVkFBa05CUUF2TTgweU1ud3ZNek1STXhFekdDOHpNeEV6TURGQk14UUdCaU1pSmlZMU14UVdNekkyRXhjVUJnWWpJaVltSXlJR0ZTYzBOall6TWhZV016STJBajJXU0lSY1c0UklsVUpRVUVJNVZDdEtNVFpCT2l3aU1GUXFTekV0UkVFcklURUZyajVoTmpaaFBpNUlTQUZRR0RCU01TWW1NeVlWTUZNekppVXpBQUVBYVA2WkFTRUFtZ0FEQUFpeEFRQUFMODB3TVdVUkl4RUJJYm1hL2Y4Q0FRQUZBR0QvOEFadEJKMEFLUUF0QURFQU5RQTVBREZBR0RnNU9URjlGaTB0RnpBS05UUTBKaHNCQmdZbWZoRWJDd0EvTXo4ekVUTVJFamt2TXo4ek14RXpQek1STXpBeFFRY2lMZ0lqSWc0Q0ZSVVVIZ0l6TWo0Q014Y2lCZ1lqSWk0Q05UVTBQZ0l6TWhZV0FSVWhOUk1SSXhFQkZTRTFBUlVoTlFQeUtoNWtiMkFhU25oVkxpNVdlVW9iWG01a0h5MVJsb0F3Y2J1SlNrcUh1M0V3Z1pZQ3lmMW9MYmtDemYyL0FwTDliZ1NObVFRR0JEWm9tR05FWTVscE5nTUZCSllJQ0UyVDBZUkNoTkdVVFFnSS9BdVltQVAxKzNNRWpmNFpsNWNCNTVtWkFBRUFndjZwQkVBRW9RQTdBQlMzQUJVZkh6VUxLVFVBTHk4ekVqa3ZNekl3TVVVeVBnSTFFVFF1QWlNaURnSVZGQjRDTXpJK0FqVTNGQVlHSXlJdUFqVTBQZ0l6TWg0Q0ZSVVVEZ01qSWlZbk54WVdBZUJkbW5FK0tVOXlTVHRsVENzblRHdERVbmROSm1sMHczZHNySHBBUjMrbVlHKzJoVWc2YXBPeVpVS1VRQ1l5Yk1CSGo5V05BUWhpazJNeUxseUpXMFYvWWpreFVGMHNBb2k3WUVxR3VHNTl3SVJFUll6VmovS081YTUxT3h3ZmpoTWZBQUFCLzdiK1N3Rm9BSmtBRVFBS3NnMEdBQUF2ekRJd01YY3pGUlFHQmlNaUppYzNGaFl6TWpZMk5hNjZUWkJsSHpRZERnOUZEaXM5SUpueWNKeFFCd3FkQmdZcVV6My8vd0E3L3FNRUNnU05CQVlDWEN3QS8vOEFjLzZnQkJRRWpBUUdBbDRPQVAvL0FDTCt0Z1NFQkkwRUJnSmQ1QUQvL3dCMkFBQUVFd1NnQkFZQ1cvTUEvLzhBZHY2MkJCNEVqUVFHQWw4c0FQLy9BRGIvNndSSEJLRUVCZ0oxdmdELy93QisvK3dFRmdXeUJBWUFHdmtBLy84QVh2NnBCQndFb1FRR0FtUGNBUC8vQUhILzdBUVBCY1FHQmdBY0FBRC8vd0QwQUFBREhRU05CQVlDV2xRQS8vLy90UDVMQVdZRU9nUUdBSndBQVAvLy83VCtTd0ZtQkRvR0JnQ2NBQUQvL3dDY0FBQUJWUVE2QmdZQWpRQUEvLy8vK2Y1WUFWb0VPZ1ltQUkwQUFBRUdBS1RIQ2dBTHRnRUVBZ0FBUTFZQUt6UUEvLzhBbkFBQUFWVUVPZ1lHQUkwQUFBQURBSXYvNndQNkJKMEFBd0FXQURFQUtVQVVEeVltRFNNakNSc3ZDM0lFQUFBQ0V3bCtBZ29BUHo4ekVqa3ZNeXN5RVRrdk16TVJNekF4UVJFakVSY2pORFkyTXpJV0Z3RWpOUk1tSmlNaUJnWVROeFlXTXpJMk5qVTBKaVlqSXpVek1oNENGUlFHQmlNaUpnRkR1TGk0VjdHSGc4QlAvcHBwN2g1VVAxTmVKa3cxSDFRM1ExMHlQSGxhVkhWaG5XODdaYk4wT0hBQzhmMFBBdkVDajc5Z2EweitVR3NCSnhjblRYNzg0NWdUSURsa1FVRlFKWW9wVUhkTmVLaFpHQUFDQUhqLzZ3U0pCS0VBRlFBckFBNjFIQkYrSndZTEFEOHpQek13TVVFVkZBNENJeUl1QWpVMU5ENENNekllQWdjMU5DNENJeUlPQWhVVkZCNENNekkrQWdTSlRJdStjbkMvalU1T2pMNXdjcjZNVGJrd1dYeExTbnRaTURGYWUwcE1lMWd2QWxBVWt0NlZURXlWM3BJVWt0NlZURXlWM3JJdWFhQnJOemRyb0drdWFhQnROemR0b0FBQkFEc0FBQVBUQmJBQUJnQVRRQWtCQlFVR0JISURESElBS3lzeUVUTXdNVUVWQVNNQklUVUQwLzIrdXdKQS9TVUZzR2o2dUFVWW1BQUFBd0NNLyt3RU5RWUFBQVFBR2dBdkFCbEFEaUVXQjNJckN3dHlCQXB5QUFCeUFDc3JLeklyTWpBeFV6TVJCeU1CRlJRT0FpTWlMZ0luTlQ0RE16SWVBZ2MxTkM0Q0l5SU9BZ2NWSGdJek1qNENqTG9ab1FPcFBuU2laV2ViYWo4TUREOXFtbVptcEhNK3VpWk1jVXhHWjBndEN4QkplMXRMY1VzbUJnRDYwdElDSnhWMnlaVlNSNGErZDF4NHZvZEhUNUxLa1JWVWoydzhNRkZuTi9GR2dWSStiSTRBQUFFQVhmL3NBKzhFVGdBbkFCbEFEQjBaR1JRSGNnUUVBQWtMY2dBck1qSXZLekl2TWpBeFpUSTJOamN6RGdJaklpNENOVFUwUGdJek1oWVdGeU11QWlNaURnSVZGUlFlQWdKQVEzQklCYThGZDhCemVyWjRPeng0dFhwL3ZtMEZyd1ZCYjB0VmMwVWRIVVJ6Z3pkZlBXQ2xaVmFXdzIwcWJjT1dWbWV4Y0VOc1FVTnhpVWNxUjR0d1F3QUFBd0JiLyt3RUFRWUFBQVFBR2dBdkFCbEFEU0VFQkJZTGNpc0xCM0lCQUhJQUt5c3lLekl2TWpBeFpSRXpFU01CTlRRK0FqTXlIZ0lYRlE0REl5SXVBamNWRkI0Q016STJOamMxTGdNaklnNENBMGU2b2Z6N1EzbWpZV2FaYXo0TUN6OXJtbWRmbzNsRHVpZE9ja3RjZDBnVURDMUhaMFpNYzA0bjBnVXUrZ0FDRVJWOHk1SlBSNGUrZUZ4M3ZvWkhVcFRKaXhWUmptdzlUb0JMOFRkblVUQThiSkFBQUFNQVcvNVZCQUVFVGdBVEFDa0FQZ0FiUUE4d0pRdHlPaG9IY2c0R0QzSUFCbklBS3lzeUt6SXJNakF4UVRNUkZBNENJeUltSnpjV0ZqTXlOalkxRVFFMU5ENENNekllQWhjVkRnTWpJaTRDTnhVVUhnSXpNalkyTnpVdUF5TWlEZ0lEWkowK2VhOXhUOGhQT0Q2Z1RtUitQZjBVUVhpalkyYVphejhNREQ5cW0yZGhvM2hCdWlkTmNrdGNkMGdVREMxSFowWk1jMDBuQkRyOEZIbThnVU16Tm9vcU1VK1pjQU1IL3NVVmZNdVNUMGVIdm5oY2Q3NkdSMUtVeVlzVlVZNXNQVTZBUy9FM1oxRXdQR3lRQUFBQ0FGci83QVJGQkU0QUZRQXJBQkMzSEJFTGNpY0dCM0lBS3pJck1qQXhVelUwUGdJek1oNENGUlVVRGdJaklpNENOeFVVSGdJek1qNENOVFUwTGdJaklnNENXa2VGdUhCeXVZVkhSNFM1Y1hHNWhVZTVLbEIzVEV4MVVTa3FVSFpOVEhWUUtnSVJGM1hKbFZOVGxjbDFGM1hJbFZOVGxjaU1GMUdQYno4L2I0OVJGMUNQYjBCQWI0OEFBQU1BalA1Z0JETUVUZ0FFQUJvQUx3QVpRQTRoRmdkeUt3c0xjZ01HY2dJT2NnQXJLeXN5S3pJd01VRVJJeEV6QVJVVURnSWpJaTRDSnpVK0F6TXlIZ0lITlRRdUFpTWlEZ0lIRVI0Q016SStBZ0ZHdXA4RENENXpvbVZubm01QkRBeENiWnhtWnFSMFBib29UM1JNUm1kSUxRc1VTSGhiUzNOUEtBTnErdllGMnYzc0ZYYkpsRkpFZ3JaeWNIaStoMGRQa3N1UkZWU1FiRHd3VVdjMy92MUdlMHcvYjQ4QUFBTUFXLzVnQkFBRVRnQUVBQm9BTHdBWlFBNGhGZ3R5S3dzSGNnUU9jZ01HY2dBckt5c3lLekl3TVVFUk56TVJBVFUwUGdJek1oNENGeFVPQXlNaUxnSTNGUlFlQWpNeU5qWTNOUzRESXlJT0FnTkdHYUg4VzBCM3BtWm1tMjFBREF0QWJaMW5aS1YzUWJvb1QzTkxYSHRLRkFzdlNtbEdUSFJQS1A1Z0JRclEraVlEc0JWOHk1TlBSNGUrZUZ4M3ZvWkhVcFBKaXhWUmoyNC9VWU5MOFRkb1V6RSticEVBQUFFQVhmL3NBL01FVGdBcUFCbEFEQk1TRWdBWkN3ZHlKQUFMY2dBck1pc3lFVGt2TXpBeFJTSXVBalUxTkQ0Q016SWVBaFVWSVRVaE5UUW1KaU1pRGdJVkZSUWVBak15TmpjWEJnWUNjbm5FalV0T2hxcGJkS2xzTlB6WUFtOHpjbDgvYWt3cU1GdUVWVnlNTURnc3FCUlBrY1oyTElESWlraEpoYlJxZVpjYVNZRlNNMktRWFN4UmpXczhOaVIvSjBzQUF3QmgvbFVEOGdST0FCSUFLQUE5QUJ0QUR5OGtDM0k1R1FkeURRWVBjZ0FHY2dBckt6SXJNaXN5TURGQk14RVVCZ1lqSWlZbk54WVdNekkyTmpVUkFUVTBQZ0l6TWg0Q0Z4VU9BeU1pTGdJM0ZSUWVBak15TmpZM05TNERJeUlPQWdOV25HN1JsMGExUnpnM2pFVmtmajM5S0R0dm5tTm1tV3MrREFzL2E1cG5ZWjF3TzdraFJXeExYSGhIRkFzdFIyaEdURzFGSVFRNi9BS2IybklySzRzaUowcVNhZ01aL3NRVmZNdVRUMGVIdm5oY2Q3NkdSMUtUeVlzVlVZMXNQVTZBUy9FM1oxRXdQV3lRQUFBQ0FGcitUQVIxQkVrQUF3QWxBQmxBREE0VkFRRVZId1FIY2dNR2NnQXJLekl2TXk4Uk16QXhRUUVqQVNVeUhnSVhBUjRDTXpJMk53Y0dCaU1pTGdJbkFTNENJeUlHQnljMk5nUVgvU2JGQXVUOVowaGlRU3dSQVo0VUtqSWZFRDBRTUFvbURUcFZRRGNkL200VE1VSXVEQ3NOQVJFL0JEcjZKZ1hhRHpWVFhDZjhUQ3RFSndJRG53Y0hJMFJsUWdPYU1GTTBCQUdWQlFuLy93QlhBQUFDaFFXNEJBWUFGYXdBQUFFQWFQL3dCSklFblFCQkFCZEFDemc0RUNKK0dRb3pBQXR5QUNzeVB6OHpPUzh3TVVVaUxnSTFORFkyTnlVMk5qVTBKaU1pQmhVVUZoWVhBU01CTGdJMU5EWTJNeklXRmhVVUJnWUhCUTRDRlJRV0ZqTXlQZ0kxTXhRR0J3WUdCd1lHQWVoWmptUTFMVk01QVFzcEswaENRRUVwUXljQ2l0UDl4emRhTlUrUFgyQ01UQ1pCS1A3Vkp5Z05NR0ZKWTUxdk9xaE5Sd29SQzB6VkVDMVFhejVFWjFVcXZ4NUlKRFJHVFN3bFJFVXAvVTBDVmpwZ1prRk9ka0pKZDBZeVdrd2QyQncyTXhZd1N5cEVlNmxtZDlOVUN4d0tSMUlBQUFNQUFRQUFBNHNFalFBREFBY0FDd0FkUUEwSUNRa0xDZ29HQjMwREFnWUtBRDh6TXo4U09TOHpNeTh6TURGbEZTRTFFeEVqRVFFVkJUVURpLzJNTGJrQncvMnptSmlZQS9YN2N3U04vb0o5dTMwQUFBWUFDUUFBQmZJRWpRQURBQWNBQ3dBUUFCUUFHQUF6UUJnS0N3c1lHQThIQmhRVEJoTUdFdzBQZlFNQ0FoY1hEUW9BUHpNUk14RXpQeEk1T1M4dkVUTVJNeEV6RVRNUk16QXhaUlVoTlFFVklUVUJGU0UxQndFakFUTVRGU0UxQVJNakF3WHkvY1FCMC80U0FpNzl4SVA5eHNjQ2wzV00vYVVDWWlpNEtaYVdsZ0lWbFpVQjRwYVdjUHZqQkkzOU41YVdBc243Y3dTTkFBQUNBSXNBQUFPM0JJMEFBd0FaQUJkQUNnOFFFQUY5QlFRRUFBb0FQekl2TXo4ekx6TXdNWE1STXhFbk5UTXlOalkxTkNZbUl5TTFNeklXRmhVVUJnWWppN2t5NkZ4eU5qWnlYT2Jtajhkblo4ZVBCSTM3Yyt5Wk5GMDhPV0k5bVYrbGEzQ2lWZ0FEQUdEL3hnUmJCTGNBRlFBckFDOEFHMEFMTHk4Y0VYNHRMU2NHQzNJQUt6SXlmQzhZUHpNemZDOHdNVUVWRkE0Q0l5SXVBalUxTkQ0Q016SWVBZ2MxTkM0Q0l5SU9BaFVWRkI0Q016SStBaE1CSXdFRVcwaUd1M054dTRsS1NvZTdjWFM3aDBpM0xGUjZUVXA0VlM0dVZubEtUbmhVSzYvOHM1WURUZ0puUW9UUmswMU5rOUdFUW9UUmxFMU5sTkhHUkdPWWFEWTJhSmhqUkdPWmFUWTJhWmtDOWZzUEJQRUFBQVFBTUFBQUJMTUVqUUFEQUFjQUN3QVBBQnRBREFJRGdBNFBEd3NIZlFvR0NnQS9Nejh6TXk4ekdzd3lNREZCRlNFMUV4RWpFU0VSSXhFRkZTRTFBOEQ5WHlXNUE4NjVBUlA3ZlFLTG1aa0NBdnR6QkkzN2N3U05wcGlZQUFBQ0FJditTd1JaQkkwQUNRQWJBQjlBRHhjUUQzSUpBd1o5Q0FvS0FnSUZDZ0EvTXhFekVUTS9Nek1yTWpBeFFSRWpBUkVqRVRNQkVSRXpGUlFHQmlNaUppYzNGaFl6TWpZMk5RUlp1ZjJrdWJrQ1hMbE5rR1VmTkIwT0QwVU9LejBoQkkzN2N3TnMvSlFFamZ5VUEyejdxSTV3bkZBSENwMEdCaXBUUGYvL0FDWUNId0lPQXJjR0JnQVJBQUFBQXdBbEFBQUU1UVd3QUJvQUhnQWlBQ05BRVFJQkFSMGlJU0VkRGc4UEhnSnlIUWh5QUNzck1oRXpFVGt2TXhFekVUTXdNV0VoTnlFeU5qWTFOVFF1QWlNaE5TRXlIZ0lWRlJRT0FnRVJJeEVCRlNFMUFsSCswQUlCTHB6UWFUeDBwMnordUFGSWoreXJYRnl0OC82ZndRSGIvWU9kZysyZldYM0RoMGFlWDdQOW5sZWUvYkpmQmJENlVBV3cvWUdZbUFBREFDVUFBQVRsQmJBQUdnQWVBQ0lBSTBBUkFnRUJIU0loSVIwT0R3OGVBbklkQ0hJQUt5c3lFVE1ST1M4ekVUTVJNekF4WVNFM0lUSTJOalUxTkM0Q0l5RTFJVEllQWhVVkZBNENBUkVqRVFFVklUVUNVZjdRQWdFdW5OQnBQSFNuYlA2NEFVaVA3S3RjWEszei9wL0JBZHY5ZzUyRDdaOVpmY09IUnA1ZnMvMmVWNTc5c2w4RnNQcFFCYkQ5Z1ppWUFBTUFBUUFBQS80R0FBQURBQm9BSGdBWlFBMGVIUllLQjNJREFISVJBZ3B5QUNzeUt5c3l4REl3TVVFUkl4RVRKejRETXpJZUFoVVJJeEUwSmlZaklnNENBUlVoTlFGa3VZMU5BVUIwb1dKUWdGc3d1akpnUmtWeFVTMEJSdjJEQmdENkFBWUEvRVlEYjcyTVRTdGVsV3Y5T3dMSFZXY3ZPbWFEQXRxWW1BQUFBd0F5QUFBRWx3V3dBQU1BQndBTEFCVkFDZ01LQ3dZSEFuSUJDSElBS3lzeUx6TXlNREZCRVNNUklSVWhOUUVWSVRVQ3c3NENrdnViQTNuOWd3V3crbEFGc0o2ZS9oNlltQUFELy9ULzdBSnhCVUVBQXdBVkFCa0FIVUFPQ2hFTGNoZ1pHUUlDQkFRREJuSUFLekl2TWhFekx6TXJNakF4UVJVaE5STXpFUlFXRmpNeU5qY1hCZ1lqSWlZbU5RRVZJVFVDVXYyM3hya2lOaDhYTXcwQkZrY3lSSEpEQWFMOWd3UTZqbzRCQi92TE56Z1NDUU9YQncwMmYyd0I1WmlZQVAvL0FCMEFBQVVlQnpjR0pnQWxBQUFCQndCRUFTOEJOd0FMdGdNUUJ3RUJZVllBS3pRQS8vOEFIUUFBQlI0SE53WW1BQ1VBQUFFSEFIVUJ2d0UzQUF1MkF3NERBUUZoVmdBck5BRC8vd0FkQUFBRkhnYzNCaVlBSlFBQUFRY0FuZ0RKQVRjQUM3WURFUWNCQVd4V0FDczBBUC8vQUIwQUFBVWVCeU1HSmdBbEFBQUJCd0NsQU1RQk93QUx0Z01jQXdFQmExWUFLelFBLy84QUhRQUFCUjRHL1FZbUFDVUFBQUVIQUdvQStRRTNBQTIzQkFNakJ3RUJlRllBS3pRMEFQLy9BQjBBQUFVZUI1TUdKZ0FsQUFBQkJ3Q2pBVkFCUWdBTnR3UURHUWNCQVVkV0FDczBOQUQvL3dBZEFBQUZIZ2VVQmlZQUpRQUFBUWNDTndGWkFTSUFFcllGQkFNYkJ3RUF1UCt5c0ZZQUt6UTBOUC8vQUhqK1F3VFlCY1FHSmdBbkFBQUJCd0I1QWRQLzlnQUx0Z0VvQlFBQUNsWUFLelFBLy84QXFRQUFCRVlIUWdZbUFDa0FBQUVIQUVRQStnRkNBQXUyQkJJSEFRRnNWZ0FyTkFELy93Q3BBQUFFUmdkQ0JpWUFLUUFBQVFjQWRRR0tBVUlBQzdZRUVBY0JBV3hXQUNzMEFQLy9BS2tBQUFSR0IwSUdKZ0FwQUFBQkJ3Q2VBSlFCUWdBTHRnUVRCd0VCZDFZQUt6UUEvLzhBcVFBQUJFWUhDQVltQUNrQUFBRUhBR29BeEFGQ0FBMjNCUVFsQndFQmcxWUFLelEwQVAvLy85OEFBQUdBQjBJR0pnQXRBQUFCQndCRS82WUJRZ0FMdGdFR0F3RUJiRllBS3pRQS8vOEFzUUFBQWxJSFFnWW1BQzBBQUFFSEFIVUFOZ0ZDQUF1MkFRUURBUUZzVmdBck5BRC8vLy9xQUFBQ1J3ZENCaVlBTFFBQUFRY0FudjlBQVVJQUM3WUJCd01CQVhkV0FDczBBUC8vLzlVQUFBSmZCd2dHSmdBdEFBQUJCd0JxLzNBQlFnQU50d0lCR1FNQkFZTldBQ3MwTkFELy93Q3BBQUFGQ1FjakJpWUFNZ0FBQVFjQXBRRDZBVHNBQzdZQkdBWUJBV3RXQUNzMEFQLy9BSGYvN0FVS0J6a0dKZ0F6QUFBQkJ3QkVBVklCT1FBTHRnSXVFUUVCVDFZQUt6UUEvLzhBZC8vc0JRb0hPUVltQURNQUFBRUhBSFVCNGdFNUFBdTJBaXdSQVFGUFZnQXJOQUQvL3dCMy8rd0ZDZ2M1QmlZQU13QUFBUWNBbmdEc0FUa0FDN1lDTHhFQkFWcFdBQ3MwQVAvL0FIZi83QVVLQnlVR0pnQXpBQUFCQndDbEFPY0JQUUFMdGdJNkVRRUJXVllBS3pRQS8vOEFkLy9zQlFvRy93WW1BRE1BQUFFSEFHb0JIQUU1QUEyM0F3SkJFUUVCWmxZQUt6UTBBUC8vQUl6LzdBU3FCemNHSmdBNUFBQUJCd0JFQVNvQk53QUx0Z0VZQUFFQllWWUFLelFBLy84QWpQL3NCS29ITndZbUFEa0FBQUVIQUhVQnVnRTNBQXUyQVJZTEFRRmhWZ0FyTkFELy93Q00vK3dFcWdjM0JpWUFPUUFBQVFjQW5nREVBVGNBQzdZQkdRQUJBV3hXQUNzMEFQLy9BSXovN0FTcUJ2MEdKZ0E1QUFBQkJ3QnFBUFFCTndBTnR3SUJLd0FCQVhoV0FDczBOQUQvL3dBUEFBQUV2QWMyQmlZQVBRQUFBUWNBZFFHSkFUWUFDN1lCQ1FJQkFXQldBQ3MwQVAvL0FHMy83QVBxQmdBR0pnQkZBQUFCQndCRUFOVUFBQUFMdGdJOUR3RUJqRllBS3pRQS8vOEFiZi9zQStvR0FBWW1BRVVBQUFFSEFIVUJaUUFBQUF1MkFqc1BBUUdNVmdBck5BRC8vd0J0Lyt3RDZnWUFCaVlBUlFBQUFRWUFubThBQUF1MkFqNFBBUUdYVmdBck5BRC8vd0J0Lyt3RDZnWHNCaVlBUlFBQUFRWUFwV29FQUF1MkFra1BBUUdXVmdBck5BRC8vd0J0Lyt3RDZnWEdCaVlBUlFBQUFRY0FhZ0NmQUFBQURiY0RBbEFQQVFHalZnQXJORFFBLy84QWJmL3NBK29HWEFZbUFFVUFBQUVIQUtNQTlnQUxBQTIzQXdKR0R3RUJjbFlBS3pRMEFQLy9BRzMvN0FQcUJsMEdKZ0JGQUFBQkJ3STNBUC8vNndBU3RnUURBa2dQQUFDNC85MndWZ0FyTkRRMC8vOEFYZjVEQSswRVRnWW1BRWNBQUFFSEFIa0JRUC8yQUF1MkFTZ0pBQUFLVmdBck5BRC8vd0JkLyt3RDh3WUFCaVlBU1FBQUFRY0FSQURFQUFBQUM3WUJMZ3NCQVl4V0FDczBBUC8vQUYzLzdBUHpCZ0FHSmdCSkFBQUJCd0IxQVZRQUFBQUx0Z0VzQ3dFQmpGWUFLelFBLy84QVhmL3NBL01HQUFZbUFFa0FBQUVHQUo1ZUFBQUx0Z0V2Q3dFQmwxWUFLelFBLy84QVhmL3NBL01GeGdZbUFFa0FBQUVIQUdvQWpnQUFBQTIzQWdGQkN3RUJvMVlBS3pRMEFQLy8vOFFBQUFGbEJmNEdKZ0NOQUFBQkJnQkVpLzRBQzdZQkJnTUJBWjVXQUNzMEFQLy9BSllBQUFJM0JmNEdKZ0NOQUFBQkJnQjFHLzRBQzdZQkJBTUJBWjVXQUNzMEFQLy8vODhBQUFJc0JmNEdKZ0NOQUFBQkJ3Q2UveVgvL2dBTHRnRUhBd0VCcVZZQUt6UUEvLy8vdWdBQUFrUUZ4QVltQUkwQUFBRUhBR3IvVmYvK0FBMjNBZ0VaQXdFQnRWWUFLelEwQVAvL0FJMEFBQVBnQmV3R0pnQlNBQUFCQmdDbFlRUUFDN1lDS2dNQkFhcFdBQ3MwQVAvL0FGei83QVExQmdBR0pnQlRBQUFCQndCRUFNNEFBQUFMdGdJdUJnRUJqRllBS3pRQS8vOEFYUC9zQkRVR0FBWW1BRk1BQUFFSEFIVUJYZ0FBQUF1MkFpd0dBUUdNVmdBck5BRC8vd0JjLyt3RU5RWUFCaVlBVXdBQUFRWUFubWdBQUF1MkFpOEdBUUdYVmdBck5BRC8vd0JjLyt3RU5RWHNCaVlBVXdBQUFRWUFwV01FQUF1MkFqb0dBUUdXVmdBck5BRC8vd0JjLyt3RU5RWEdCaVlBVXdBQUFRY0FhZ0NZQUFBQURiY0RBa0VHQVFHalZnQXJORFFBLy84QWlmL3NBOTBHQUFZbUFGa0FBQUVIQUVRQXhnQUFBQXUyQWg0UkFRR2dWZ0FyTkFELy93Q0ovK3dEM1FZQUJpWUFXUUFBQVFjQWRRRldBQUFBQzdZQ0hCRUJBYUJXQUNzMEFQLy9BSW4vN0FQZEJnQUdKZ0JaQUFBQkJnQ2VZQUFBQzdZQ0h4RUJBYXRXQUNzMEFQLy9BSW4vN0FQZEJjWUdKZ0JaQUFBQkJ3QnFBSkFBQUFBTnR3TUNNUkVCQWJkV0FDczBOQUQvL3dBVy9rc0RzQVlBQmlZQVhRQUFBUWNBZFFFYkFBQUFDN1lDR1FFQkFhQldBQ3MwQVAvL0FCYitTd093QmNZR0pnQmRBQUFCQmdCcVZRQUFEYmNEQWk0QkFRRzNWZ0FyTkRRQS8vOEFIUUFBQlI0RzVBWW1BQ1VBQUFFSEFIQUF4d0UvQUF1MkF4QURBUUdtVmdBck5BRC8vd0J0Lyt3RDZnV3RCaVlBUlFBQUFRWUFjRzBJQUF1MkFqMFBBUUhSVmdBck5BRC8vd0FkQUFBRkhnY09CaVlBSlFBQUFRY0FvUUR6QVRjQUM3WURFd2NCQVZOV0FDczBBUC8vQUczLzdBUHFCZGNHSmdCRkFBQUJCd0NoQUprQUFBQUx0Z0pBRHdFQmZsWUFLelFBQUFRQUhmNU9CUjRGc0FBRUFBa0FEUUFqQUN0QUZRME1EQU1XSFFZQUFnY0RBbklPRHc4RkJRSUljZ0FyTWhFekVUTXJNaEk1T1M4ekVqa3ZNekF4UVFFakFUTUJBU2N6QVFNVklUVUJGdzRDRlJRV016STJOeGNHQmlNaUpqVTBOallDeFA0ZXhRSXJmd0dSL2gwRGZ3SXQzL3pPQTZGS0swNHlJeXNoTkE4T0dVMDdVVzgxY2dVdit0RUZzUHBRQlMrQitsQUNHNTZlL2g0NUlFVk5MQ0VvRXdoNkR4MWhYalpxWWdBREFHMytUZ1BxQkU0QUd3QTZBRkFBSzBBWEhqbzZEME5LRDNJbk1RdHlPenc4R1FweUNRVVBCM0lBS3pJeUt6SVJNeXN5S3pJU09TOHpNREZsRVRRbUppTWlCZ1lWSXpRK0FqTXlGaFlWRVJRV0Z4VWpKaVlURnlNaURnSVZGQllXTXpJMk5qY1hEZ01qSWlZbU5UUStBak1CRnc0Q0ZSUVdNekkyTnhjR0JpTWlKalUwTmpZREN6Tm1TMFpwTzdrOGNaOWlkclZuRXhQQkRoQWdBcnRQZkZRc0xsMUVWWUpOQTA4SFBtZU5XRzZsVzBTQXRHOEJMRW9yVGpJakt5RTBEdzRaVFR0UmJ6Vnl1UUl0UUY4ME1FNHRPbkpkTjFDaGVmNElObm9zRUNCckFnV0NHVEpMTWpOVU1VaG9NVmtxWmwwOVZwRmFWNFZaTHYycE9TQkZUU3doS0JNSWVnOGRZVjQyYW1JQS8vOEFlUC9zQk5nSFZ3WW1BQ2NBQUFFSEFIVUJ4d0ZYQUF1MkFTZ1FBUUZ0VmdBck5BRC8vd0JkLyt3RDdRWUFCaVlBUndBQUFRY0FkUUUwQUFBQUM3WUJLQlFCQVl4V0FDczBBUC8vQUhqLzdBVFlCMWNHSmdBbkFBQUJCd0NlQU5FQlZ3QUx0Z0VyRUFFQmVGWUFLelFBLy84QVhmL3NBKzBHQUFZbUFFY0FBQUVHQUo0K0FBQUx0Z0VyRkFFQmwxWUFLelFBLy84QWVQL3NCTmdIR1FZbUFDY0FBQUVIQUtJQnJRRlhBQXUyQVRFUUFRR0NWZ0FyTkFELy93QmQvK3dEN1FYQ0JpWUFSd0FBQVFjQW9nRWFBQUFBQzdZQk1SUUJBYUZXQUNzMEFQLy9BSGovN0FUWUIxWUdKZ0FuQUFBQkJ3Q2ZBT1lCVndBTHRnRXVFQUVCZGxZQUt6UUEvLzhBWGYvc0ErMEYvd1ltQUVjQUFBRUdBSjlUQUFBTHRnRXVGQUVCbFZZQUt6UUEvLzhBcVFBQUJNY0hRUVltQUNnQUFBRUhBSjhBbndGQ0FBdTJBaVVlQVFGMVZnQXJOQUQvL3dCZi8rd0ZMQVlDQkNZQVNBQUFBUWNCeWdQVkJSTUFDN1lET1FFQkFBQldBQ3MwQVAvL0FLa0FBQVJHQnU4R0pnQXBBQUFCQndCd0FKSUJTZ0FMdGdRU0J3RUJzVllBS3pRQS8vOEFYZi9zQS9NRnJRWW1BRWtBQUFFR0FIQmNDQUFMdGdFdUN3RUIwVllBS3pRQS8vOEFxUUFBQkVZSEdRWW1BQ2tBQUFFSEFLRUF2Z0ZDQUF1MkJCVUhBUUZlVmdBck5BRC8vd0JkLyt3RDh3WFhCaVlBU1FBQUFRY0FvUUNJQUFBQUM3WUJNUXNCQVg1V0FDczBBUC8vQUtrQUFBUkdCd1FHSmdBcEFBQUJCd0NpQVhBQlFnQUx0Z1FaQndFQmdWWUFLelFBLy84QVhmL3NBL01Gd2dZbUFFa0FBQUVIQUtJQk9nQUFBQXUyQVRVTEFRR2hWZ0FyTkFBQUJRQ3AvazRFUmdXd0FBTUFCd0FMQUE4QUpRQXBRQlFLQ3dzWUh3NFBEd2NDY2hBUkVRTUNBZ1lJY2dBck1oRXpNaEV6S3pJUk15OHpPUzh6TURGbEZTRTFFeEVqRVFFVklUVUJGU0UxQVJjT0FoVVVGak15TmpjWEJnWWpJaVkxTkRZMkJFYjgvU2ZCQXpmOVl3TDUvUWNDY1VvclRqSWpLeUUwRHc0WlRUdFJielZ5bloyZEJSUDZVQVd3L1k2ZG5RSnlucDc2aVRrZ1JVMHNJU2dUQ0hvUEhXRmVObXBpQUFBQ0FGMythQVB6QkU0QUt3QkJBQ1ZBRXhJVEV3czBPdzV5R1FzSGNpd3RKQ1FBQzNJQUt6SVJPVGtyTWlzeUVqa3ZNekF4UlNJdUFqVTFORDRDTXpJZUFoVVZJVFVoTlM0Q0l5SU9BaFVWRkI0Q016STJOeGNPQWpjWERnSVZGQll6TWpZM0Z3WUdJeUltTlRRMk5nSk9jYmVEUms2R3FsdDBxV3cwL05nQ2J3UXpibDgvYWt3cUsxTjNUR0tJTTNBamJKMHBTaXRPTWlNcklUUVBEaGxOTzFGdk5YSVVUWXpBY2lxRXo1QktVSS9CY2xPWERraUlXRFZvbG1JcVRZZG1PbEJEV1RWZ1BHYzVJRVZOTENFb0V3aDZEeDFoWGpacVlnRC8vd0NwQUFBRVJnZEJCaVlBS1FBQUFRY0Fud0NwQVVJQUM3WUVGZ2NCQVhWV0FDczBBUC8vQUYzLzdBUHpCZjhHSmdCSkFBQUJCZ0NmY3dBQUM3WUJNZ3NCQVpWV0FDczBBUC8vQUhyLzdBVGRCMWNHSmdBckFBQUJCd0NlQU1rQlZ3QUx0Z0V2RUFFQmVGWUFLelFBLy84QVlmNVZBL0lHQUFZbUFFc0FBQUVHQUo1VkFBQUx0Z05DR2dFQmwxWUFLelFBLy84QWV2L3NCTjBITGdZbUFDc0FBQUVIQUtFQTh3RlhBQXUyQVRFUUFRRmZWZ0FyTkFELy93QmgvbFVEOGdYWEJpWUFTd0FBQVFZQW9YOEFBQXUyQTBRYUFRRitWZ0FyTkFELy93QjYvK3dFM1FjWkJpWUFLd0FBQVFjQW9nR2xBVmNBQzdZQk5SQUJBWUpXQUNzMEFQLy9BR0grVlFQeUJjSUVKZ0JMQUFBQkJ3Q2lBVEVBQUFBTHRnTklHZ0VCb1ZZQUt6UUEvLzhBZXYzekJOMEZ4QVltQUNzQUFBRUhBY29CMnY2VkFBNjBBVFVGQVFHNC81aXdWZ0FyTlAvL0FHSCtWUVB5QnBNRUpnQkxBQUFCQndKRUFTc0FWd0FMdGdNL0dnRUJtRllBS3pRQS8vOEFxUUFBQlFnSFFnWW1BQ3dBQUFFSEFKNEE4UUZDQUF1MkF3OExBUUYzVmdBck5BRC8vd0NOQUFBRDRBZEJCaVlBVEFBQUFRY0FuZ0FlQVVFQUM3WUNIZ01CQVNaV0FDczBBUC8vLzdZQUFBSjZCeTRHSmdBdEFBQUJCd0NsL3pzQlJnQUx0Z0VTQXdFQmRsWUFLelFBLy8vL213QUFBbDhGNmdZbUFJMEFBQUVIQUtYL0lBQUNBQXUyQVJJREFRR29WZ0FyTkFELy8vL05BQUFDYkFidkJpWUFMUUFBQVFjQWNQOCtBVW9BQzdZQkJnTUJBYkZXQUNzMEFQLy8vN0lBQUFKUkJhc0dKZ0NOQUFBQkJ3QncveU1BQmdBTHRnRUdBd0VCNDFZQUt6UUEvLy8vN0FBQUFrSUhHUVltQUMwQUFBRUhBS0gvYWdGQ0FBdTJBUWtEQVFGZVZnQXJOQUQvLy8vUkFBQUNKd1hWQmlZQWpRQUFBUWNBb2Y5UC8vNEFDN1lCQ1FNQkFaQldBQ3MwQVAvL0FCZitWd0Y0QmJBR0pnQXRBQUFCQmdDazVRa0FDN1lCQlFJQUFBQldBQ3MwQVAvLy8vcitUZ0ZwQmNRR0pnQk5BQUFCQmdDa3lBQUFDN1lDRVFJQUFBQldBQ3MwQVAvL0FLb0FBQUdGQndRR0pnQXRBQUFCQndDaUFCd0JRZ0FMdGdFTkF3RUJnVllBS3pRQS8vOEF0Ly9zQmZrRnNBUW1BQzBBQUFBSEFDNENMUUFBLy84QWp2NUxBMHdGeEFRbUFFMEFBQUFIQUU0QjhnQUEvLzhBTmYvc0JJUUhOUVltQUM0QUFBRUhBSjRCZlFFMUFBdTJBUmNCQVFGcVZnQXJOQUQvLy8rMC9rc0NPZ1hYQmlZQW5BQUFBUWNBbnY4ei85Y0FDN1lCRlFBQkFZSldBQ3MwQVAvL0FLbitWZ1VGQmJBRUpnQXZBQUFCQndIS0FaVCsrQUFPdEFNWEFnRUF1UC9uc0ZZQUt6VC8vd0NOL2tNRURRWUFCaVlBVHdBQUFRY0J5Z0VSL3VVQURyUURGd0lCQWJqLzFMQldBQ3MwLy84QW9nQUFCQndITWdZbUFEQUFBQUVIQUhVQUp3RXlBQXUyQWdnSEFRRmNWZ0FyTkFELy93Q1RBQUFDTkFlWEJpWUFVQUFBQVFjQWRRQVlBWmNBQzdZQkJBTUJBWEZXQUNzMEFQLy9BS24rQmdRY0JiQUVKZ0F3QUFBQkJ3SEtBV3orcUFBT3RBSVJBZ0VCdVArWHNGWUFLelQvL3dCVy9nWUJWZ1lBQkNZQVVBQUFBUWNCeXYvNS9xZ0FEclFCRFFJQkFiai9sN0JXQUNzMC8vOEFxUUFBQkJ3RnNRWW1BREFBQUFFSEFjb0IxZ1RDQUF1MkFoRUhBQUFCVmdBck5BRC8vd0NjQUFBQ3JRWUNCQ1lBVUFBQUFRY0J5Z0ZXQlJNQUM3WUJEUU1BQUFKV0FDczBBUC8vQUtrQUFBUWNCYkFHSmdBd0FBQUFCd0NpQWJ6OXhQLy9BSndBQUFLaUJnQUVKZ0JRQUFBQUJ3Q2lBVG45dGYvL0FLa0FBQVVKQnpjR0pnQXlBQUFCQndCMUFmVUJOd0FMdGdFS0JnRUJZVllBS3pRQS8vOEFqUUFBQStBR0FBWW1BRklBQUFFSEFIVUJYQUFBQUF1MkFod0RBUUdnVmdBck5BRC8vd0NwL2dZRkNRV3dCQ1lBTWdBQUFRY0J5Z0hRL3FnQURyUUJFd1VCQWJqL2w3QldBQ3MwLy84QWpmNEdBK0FFVGdRbUFGSUFBQUVIQWNvQk0vNm9BQTYwQWlVQ0FRRzQvNWV3VmdBck5QLy9BS2tBQUFVSkJ6WUdKZ0F5QUFBQkJ3Q2ZBUlFCTndBTHRnRVFDUUVCYWxZQUt6UUEvLzhBalFBQUErQUYvd1ltQUZJQUFBRUdBSjk3QUFBTHRnSWlBd0VCcVZZQUt6UUEvLy8vdXdBQUErQUdCUVltQUZJQUFBRUhBY3IvWGdVV0FBdTJBaUFEQVFFNlZnQXJOQUQvL3dCMy8rd0ZDZ2JtQmlZQU13QUFBUWNBY0FEcUFVRUFDN1lDTGhFQkFaUldBQ3MwQVAvL0FGei83QVExQmEwR0pnQlRBQUFCQmdCd1pnZ0FDN1lDTGdZQkFkRldBQ3MwQVAvL0FIZi83QVVLQnhBR0pnQXpBQUFCQndDaEFSWUJPUUFMdGdJeEVRRUJRVllBS3pRQS8vOEFYUC9zQkRVRjF3WW1BRk1BQUFFSEFLRUFrZ0FBQUF1MkFqRUdBUUYrVmdBck5BRC8vd0IzLyt3RkNnYzRCaVlBTXdBQUFRY0FwZ0ZyQVRrQURiY0RBaXdSQVFGRlZnQXJORFFBLy84QVhQL3NCRFVGL3dZbUFGTUFBQUVIQUtZQTV3QUFBQTIzQXdJc0JnRUJnbFlBS3pRMEFQLy9BS2tBQUFUS0J6Y0dKZ0EyQUFBQkJ3QjFBWUVCTndBTHRnSWVBQUVCWVZZQUt6UUEvLzhBalFBQUF0TUdBQVltQUZZQUFBRUhBSFVBdHdBQUFBdTJBaGNEQVFHZ1ZnQXJOQUQvL3dDcC9nWUV5Z1d3QkNZQU5nQUFBUWNCeWdGai9xZ0FEclFDSnhnQkFiai9sN0JXQUNzMC8vOEFVLzRIQXBnRVRnUW1BRllBQUFFSEFjci85djZwQUE2MEFpQUNBUUc0LzVpd1ZnQXJOUC8vQUtrQUFBVEtCellHSmdBMkFBQUJCd0NmQUtBQk53QUx0Z0lrQUFFQmFsWUFLelFBLy84QVpBQUFBczRGL3dZbUFGWUFBQUVHQUovV0FBQUx0Z0lkQXdFQnFWWUFLelFBLy84QVVmL3NCSE1IT1FZbUFEY0FBQUVIQUhVQmpRRTVBQXUyQVRvUEFRRlBWZ0FyTkFELy93QmYvK3dEdkFZQUJpWUFWd0FBQVFjQWRRRlJBQUFBQzdZQk5nNEJBWXhXQUNzMEFQLy9BRkgvN0FSekJ6a0dKZ0EzQUFBQkJ3Q2VBSmNCT1FBTHRnRTlEd0VCV2xZQUt6UUEvLzhBWC8vc0E3d0dBQVltQUZjQUFBRUdBSjViQUFBTHRnRTVEZ0VCbDFZQUt6UUEvLzhBVWY1TUJITUZ4QVltQURjQUFBRUhBSGtCbi8vL0FBdTJBVG9yQUFBVFZnQXJOQUQvL3dCZi9rTUR2QVJPQmlZQVZ3QUFBUWNBZVFGZC8vWUFDN1lCTmlrQUFBcFdBQ3MwQVAvL0FGSDkrd1J6QmNRR0pnQTNBQUFCQndIS0FYVCtuUUFPdEFGREt3RUJ1UCtnc0ZZQUt6VC8vd0JmL2ZJRHZBUk9CaVlBVndBQUFRY0J5Z0V5L3BRQURyUUJQeWtCQWJqL2w3QldBQ3MwLy84QVVmL3NCSE1IT0FZbUFEY0FBQUVIQUo4QXJBRTVBQXUyQVVBUEFRRllWZ0FyTkFELy93QmYvK3dEdkFYL0JpWUFWd0FBQVFZQW4zQUFBQXUyQVR3T0FRR1ZWZ0FyTkFELy93QXkvZndFbHdXd0JpWUFPQUFBQVFjQnlnRm0vcDRBRHJRQ0VRSUJBYmovamJCV0FDczAvLzhBQ2YzOEFsY0ZRUVltQUZnQUFBRUhBY29BeGY2ZUFBNjBBaDhSQVFHNC82R3dWZ0FyTlAvL0FETCtUUVNYQmJBR0pnQTRBQUFCQndCNUFaRUFBQUFMdGdJSUFnRUFBRllBS3pRQS8vOEFDZjVOQXBvRlFRWW1BRmdBQUFFSEFIa0E4QUFBQUF1MkFoWVJBQUFVVmdBck5BRC8vd0F5QUFBRWx3YzFCaVlBT0FBQUFRY0Fud0NpQVRZQUM3WUNEZ01CQVdsV0FDczBBUC8vQUFuLzdBTHNCbm9FSmdCWUFBQUJCd0hLQVpVRml3QU90QUlhQkFFQXVQK29zRllBS3pULy93Q00vK3dFcWdjakJpWUFPUUFBQVFjQXBRQy9BVHNBQzdZQkpBc0JBV3RXQUNzMEFQLy9BSW4vN0FQZEJld0dKZ0JaQUFBQkJnQ2xXd1FBQzdZQ0toRUJBYXBXQUNzMEFQLy9BSXovN0FTcUJ1UUdKZ0E1QUFBQkJ3QndBTUlCUHdBTHRnRVlDd0VCcGxZQUt6UUEvLzhBaWYvc0E5MEZyUVltQUZrQUFBRUdBSEJlQ0FBTHRnSWVFUUVCNVZZQUt6UUEvLzhBalAvc0JLb0hEZ1ltQURrQUFBRUhBS0VBN2dFM0FBdTJBUnNBQVFGVFZnQXJOQUQvL3dDSi8rd0QzUVhYQmlZQVdRQUFBUWNBb1FDS0FBQUFDN1lDSVJFQkFaSldBQ3MwQVAvL0FJei83QVNxQjVNR0pnQTVBQUFCQndDakFVc0JRZ0FOdHdJQklRQUJBVWRXQUNzME5BRC8vd0NKLyt3RDNRWmNCaVlBV1FBQUFRY0Fvd0RuQUFzQURiY0RBaWNSQVFHR1ZnQXJORFFBLy84QWpQL3NCS29ITmdZbUFEa0FBQUVIQUtZQlF3RTNBQTIzQWdFV0FBRUJWMVlBS3pRMEFQLy9BSW4vN0FRTEJmOEdKZ0JaQUFBQkJ3Q21BTjhBQUFBTnR3TUNIQkVCQVpaV0FDczBOQUFBQWdDTS9ub0VxZ1d3QUJVQUt3QWJRQTBlSlFFTEFuSVhGaEVSQmdseUFDc3lFams1S3pJdk16QXhRVE1SRkFZR0l5SW1KalVSTXhFVUZoWXpNalkyTlFNWERnSVZGQll6TWpZM0Z3WUdJeUltTlRRMk5nUHF3Skx4alpUdmk3OVVsMlJsbDFTSFNpdE9NaU1ySVRRUERobE5PMUZ2TlhJRnNQd25wTnB0YmRxa0E5bjhKM0tVU0VpVWN2Nk9PU0JGVFN3aEtCTUllZzhkWVY0MmFtSUFBQU1BaWY1T0ErZ0VPZ0FFQUJzQU1RQWhRQkVrS3c5eUFSRUdjaHdkSFFRRUdBc0xjZ0FyTWpJUk14RXpLeklyTWpBeFpSRXpFU01UTnhRT0FpTWlMZ0kxRVRNUkZCNENNekkyTmhNWERnSVZGQll6TWpZM0Z3WUdJeUltTlRRMk5nTWp1ckVhVFMxa29uUlBnMTR6dVNFNVJ5WjJpajFEU2l0T01pTXJJVFFQRGhsTk8xRnZOWEw2QTBEN3hnSGVBbXkzaGtzdVlKcHNBcnI5UkVsZk54WmJtLzY2T1NCRlRTd2hLQk1JZWc4ZFlWNDJhbUwvL3dBOUFBQUc3UWMzQmlZQU93QUFBUWNBbmdIRkFUY0FDN1lFR1JVQkFXeFdBQ3MwQVAvL0FDc0FBQVhUQmdBR0pnQmJBQUFCQndDZUFTUUFBQUFMdGdRWkZRRUJxMVlBS3pRQS8vOEFEd0FBQkx3SE5nWW1BRDBBQUFFSEFKNEFrd0UyQUF1MkFRd0NBUUZyVmdBck5BRC8vd0FXL2tzRHNBWUFCaVlBWFFBQUFRWUFuaVVBQUF1MkFod0JBUUdyVmdBck5BRC8vd0FQQUFBRXZBYjhCaVlBUFFBQUFRY0FhZ0REQVRZQURiY0NBUjRDQVFGM1ZnQXJORFFBLy84QVZ3QUFCSG9ITndZbUFENEFBQUVIQUhVQmh3RTNBQXUyQXc0TkFRRmhWZ0FyTkFELy93QlpBQUFEc3dZQUJpWUFYZ0FBQVFjQWRRRWlBQUFBQzdZRERnMEJBYUJXQUNzMEFQLy9BRmNBQUFSNkJ2a0dKZ0ErQUFBQkJ3Q2lBVzBCTndBTHRnTVhDQUVCZGxZQUt6UUEvLzhBV1FBQUE3TUZ3Z1ltQUY0QUFBRUhBS0lCQ0FBQUFBdTJBeGNJQVFHMVZnQXJOQUQvL3dCWEFBQUVlZ2MyQmlZQVBnQUFBUWNBbndDbUFUY0FDN1lERkFnQkFXcFdBQ3MwQVAvL0FGa0FBQU96QmY4R0pnQmVBQUFCQmdDZlFRQUFDN1lERkFnQkFhbFdBQ3MwQVAvLy8vRUFBQWRZQjBJR0pnQ0JBQUFCQndCMUFzb0JRZ0FMdGdZWkF3RUJiRllBS3pRQS8vOEFULy9yQm4wR0FRWW1BSVlBQUFFSEFIVUNlZ0FCQUF1MkExOFBBUUdOVmdBck5BRC8vd0IzLzZNRkhRZUFCaVlBZ3dBQUFRY0FkUUhxQVlBQUM3WUROQllCQVpaV0FDczBBUC8vQUZ6L2VRUTBCZjhHSmdDSkFBQUJCd0IxQVRqLy93QUx0Z013Q2dFQmkxWUFLelFBLy8vL3ZRQUFCQ0FFalFZbUFrQUFBQUFIQWpiL0x2OTIvLy8vdlFBQUJDQUVqUVltQWtBQUFBQUhBamIvTHY5Mi8vOEFLUUFBQS8wRWpRWW1BZWdBQUFBR0FqWkczLy8vQUJRQUFBUnhCaDRHSmdKREFBQUJCd0JFQU5RQUhnQUx0Z01RQndFQmExWUFLelFBLy84QUZBQUFCSEVHSGdZbUFrTUFBQUVIQUhVQlpBQWVBQXUyQXc0REFRRnJWZ0FyTkFELy93QVVBQUFFY1FZZUJpWUNRd0FBQVFZQW5tNGVBQXUyQXhNREFRRnJWZ0FyTkFELy93QVVBQUFFY1FZS0JpWUNRd0FBQVFZQXBXa2lBQXUyQXhzREFRRnJWZ0FyTkFELy93QVVBQUFFY1FYa0JpWUNRd0FBQVFjQWFnQ2VBQjRBRGJjRUF4Y0RBUUZyVmdBck5EUUEvLzhBRkFBQUJIRUdlZ1ltQWtNQUFBRUhBS01BOVFBcEFBMjNCQU1aQXdFQlVWWUFLelEwQVAvL0FCUUFBQVJ4Qm5zR0pnSkRBQUFBQndJM0FQNEFDZi8vQUdIK1NRUXhCSjBHSmdKQkFBQUFCd0I1QVhYLy9QLy9BSXNBQUFPdkJoNEdKZ0k0QUFBQkJ3QkVBS2dBSGdBTHRnUVNCd0VCYkZZQUt6UUEvLzhBaXdBQUE2OEdIZ1ltQWpnQUFBRUhBSFVCT0FBZUFBdTJCQkFIQVFGc1ZnQXJOQUQvL3dDTEFBQURyd1llQmlZQ09BQUFBUVlBbmtJZUFBdTJCQllIQVFGc1ZnQXJOQUQvL3dDTEFBQURyd1hrQmlZQ09BQUFBUVlBYW5JZUFBMjNCUVFaQndFQmhGWUFLelEwQVAvLy83d0FBQUZkQmg0R0pnSHpBQUFCQmdCRWd4NEFDN1lCQmdNQkFXdFdBQ3MwQVAvL0FJNEFBQUl2Qmg0R0pnSHpBQUFCQmdCMUV4NEFDN1lCQkFNQkFXdFdBQ3MwQVAvLy84Y0FBQUlrQmg0R0pnSHpBQUFCQndDZS94MEFIZ0FMdGdFSkF3RUJkbFlBS3pRQS8vLy9zZ0FBQWp3RjVBWW1BZk1BQUFFSEFHci9UUUFlQUEyM0FnRU5Bd0VCaEZZQUt6UTBBUC8vQUlzQUFBUlpCZ29HSmdIdUFBQUJCd0NsQUpRQUlnQUx0Z0VZQmdFQmRsWUFLelFBLy84QVlQL3dCRnNHSGdZbUFlMEFBQUVIQUVRQTdRQWVBQXUyQWk0UkFRRmJWZ0FyTkFELy93QmcvL0FFV3dZZUJpWUI3UUFBQVFjQWRRRjlBQjRBQzdZQ0xCRUJBVnRXQUNzMEFQLy9BR0QvOEFSYkJoNEdKZ0h0QUFBQkJ3Q2VBSWNBSGdBTHRnSXhFUUVCVzFZQUt6UUEvLzhBWVAvd0JGc0dDZ1ltQWUwQUFBRUhBS1VBZ2dBaUFBdTJBakVSQVFGdlZnQXJOQUQvL3dCZy8vQUVXd1hrQmlZQjdRQUFBUWNBYWdDM0FCNEFEYmNEQWpVUkFRRjBWZ0FyTkRRQS8vOEFkZi93QkFzR0hnWW1BZWNBQUFFSEFFUUF6d0FlQUF1MkFSZ0xBUUZyVmdBck5BRC8vd0IxLy9BRUN3WWVCaVlCNXdBQUFRY0FkUUZmQUI0QUM3WUJGZ3NCQVd0V0FDczBBUC8vQUhYLzhBUUxCaDRHSmdIbkFBQUJCZ0NlYVI0QUM3WUJHd3NCQVd0V0FDczBBUC8vQUhYLzhBUUxCZVFHSmdIbkFBQUJCd0JxQUprQUhnQU50d0lCSHdzQkFZUldBQ3MwTkFELy93QU9BQUFFSEFZZUJpWUI0d0FBQVFjQWRRRTBBQjRBQzdZRERna0JBV3RXQUNzMEFQLy9BQlFBQUFSeEJjc0dKZ0pEQUFBQkJnQndiQ1lBQzdZREVBTUJBYkJXQUNzMEFQLy9BQlFBQUFSeEJmVUdKZ0pEQUFBQkJ3Q2hBSmdBSGdBTHRnTVRBd0VCWFZZQUt6UUFBQVFBRlA1T0JIRUVqUUFFQUFrQURRQWpBQ0ZBRHcwTURBTVdIUWdEZlE4T0JRVUJFZ0EvTXhFek16OHpMek1TT1M4ek1ERkJBU01CTXdFQkp6TUJBeFVoTlFFWERnSVZGQll6TWpZM0Z3WUdJeUltTlRRMk5nSmUvbk85QWQ5NUFVbitkZzE2QWRuWC9Vd0RHa29yVGpJakt5RTBEdzRaVFR0UmJ6VnlBK3I4RmdTTiszTUQ3cC83Y3dHdm1KaitpamtnUlUwc0lTZ1RDSG9QSFdGZU5tcGkvLzhBWWYvd0JERUdIZ1ltQWtFQUFBRUhBSFVCYWdBZUFBdTJBU2dRQVFGYlZnQXJOQUQvL3dCaC8vQUVNUVllQmlZQ1FRQUFBUVlBbm5RZUFBdTJBUzBRQVFGYlZnQXJOQUQvL3dCaC8vQUVNUVhnQmlZQ1FRQUFBUWNBb2dGUUFCNEFDN1lCTVJBQkFYQldBQ3MwQVAvL0FHSC84QVF4QmgwR0pnSkJBQUFCQndDZkFJa0FIZ0FMdGdFdUVBRUJaRllBS3pRQS8vOEFpd0FBQkNBR0hRWW1Ba0FBQUFFR0FKOHlIZ0FMdGdJa0hRRUJkRllBS3pRQS8vOEFpd0FBQTY4Rnl3WW1BamdBQUFFR0FIQkFKZ0FMdGdRU0J3RUJzRllBS3pRQS8vOEFpd0FBQTY4RjlRWW1BamdBQUFFR0FLRnNIZ0FMdGdRVkJ3RUJYbFlBS3pRQS8vOEFpd0FBQTY4RjRBWW1BamdBQUFFSEFLSUJIZ0FlQUF1MkJCa0hBUUdBVmdBck5BQUFCUUNML2s0RHJ3U05BQU1BQndBTEFBOEFKUUFqUUJBWUh3c0tDZ1lQRGdkOUVSQVFCUVlTQUQ4ek14RXpQek16RWprdk15OHpNREZsRlNFMUV4RWpFUUVWSVRVQkZTRTFBUmNPQWhVVUZqTXlOamNYQmdZaklpWTFORFkyQTYvOWFDMjVBczM5dndLUy9XNENFVW9yVGpJakt5RTBEdzRaVFR0UmJ6VnltSmlZQS9YN2N3U04vaG1YbHdIbm1abjdyRGtnUlUwc0lTZ1RDSG9QSFdGZU5tcGlBUC8vQUlzQUFBT3ZCaDBHSmdJNEFBQUJCZ0NmVng0QUM3WUVGZ2NCQVhSV0FDczBBUC8vQUdULzhBUTJCaDRHSmdIMUFBQUJCZ0NlY1I0QUM3WUJNQkFCQVdaV0FDczBBUC8vQUdULzhBUTJCZlVHSmdIMUFBQUJCd0NoQUpzQUhnQUx0Z0V3RUFFQlRWWUFLelFBLy84QVpQL3dCRFlGNEFZbUFmVUFBQUVIQUtJQlRRQWVBQXUyQVRRUUFRRndWZ0FyTkFELy93QmsvZmdFTmdTZEJpWUI5UUFBQVFjQnlnRlAvcG9BRHJRQk5BVUJBYmovbWJCV0FDczAvLzhBaXdBQUJGa0dIZ1ltQWZRQUFBRUhBSjRBa0FBZUFBdTJBeEVIQVFGMlZnQXJOQUQvLy8rVEFBQUNWd1lLQmlZQjh3QUFBUWNBcGY4WUFDSUFDN1lCQ1FNQkFYOVdBQ3MwQVAvLy82b0FBQUpKQmNzR0pnSHpBQUFCQndCdy94c0FKZ0FMdGdFR0F3RUJzRllBS3pRQS8vLy95UUFBQWg4RjlRWW1BZk1BQUFFSEFLSC9Sd0FlQUF1MkFRa0RBUUZkVmdBck5BRC8vd0FGL2s0QlpnU05CaVlCOHdBQUFBWUFwTk1BLy84QWh3QUFBV0lGNEFZbUFmTUFBQUVHQUtMNUhnQUx0Z0VOQXdFQmdGWUFLelFBLy84QUxQL3dCQTRHSGdZbUFmSUFBQUVIQUo0QkJ3QWVBQXUyQVJrQkFRRjJWZ0FyTkFELy93Q0wvZ0lFVndTTkJpWUI4UUFBQUFjQnlnRVUvcVQvL3dDREFBQURpd1llQmlZQjhBQUFBUVlBZFFnZUFBdTJBZ2dIQVFGclZnQXJOQUQvL3dDTC9nUURpd1NOQmlZQjhBQUFBUWNCeWdFUC9xWUFEclFDRVFZQkFiai9sYkJXQUNzMC8vOEFpd0FBQTRzRWp3WW1BZkFBQUFBSEFjb0JmZ09nLy84QWl3QUFBNHNFalFZbUFmQUFBQUFIQUtJQlp2MDEvLzhBaXdBQUJGa0dIZ1ltQWU0QUFBRUhBSFVCandBZUFBdTJBUW9HQVFGclZnQXJOQUQvL3dDTC9nQUVXUVNOQmlZQjdnQUFBQWNCeWdGci9xTC8vd0NMQUFBRVdRWWRCaVlCN2dBQUFRY0Fud0N1QUI0QUM3WUJFQVlCQVhSV0FDczBBUC8vQUdELzhBUmJCY3NHSmdIdEFBQUJCd0J3QUlVQUpnQUx0Z0l1RVFFQm9GWUFLelFBLy84QVlQL3dCRnNGOVFZbUFlMEFBQUVIQUtFQXNRQWVBQXUyQWpFUkFRRk5WZ0FyTkFELy93QmcvL0FFV3dZZEJpWUI3UUFBQVFjQXBnRUdBQjRBRGJjREFqQVJBUUZSVmdBck5EUUEvLzhBaWdBQUJDWUdIZ1ltQWVvQUFBRUhBSFVCSndBZUFBdTJBaDhBQVFGclZnQXJOQUQvL3dDSy9nUUVKZ1NOQmlZQjZnQUFBQWNCeWdFTi9xYi8vd0NLQUFBRUpnWWRCaVlCNmdBQUFRWUFuMFllQUF1MkFpVUFBUUYwVmdBck5BRC8vd0JFLy9BRDNnWWVCaVlCNlFBQUFRY0FkUUUrQUI0QUM3WUJPZzhCQVZ0V0FDczBBUC8vQUVULzhBUGVCaDRHSmdIcEFBQUJCZ0NlU0I0QUM3WUJQdzhCQVdaV0FDczBBUC8vQUVUK1RRUGVCSjBHSmdIcEFBQUFCd0I1QVZNQUFQLy9BRVQvOEFQZUJoMEdKZ0hwQUFBQkJnQ2ZYUjRBQzdZQlFBOEJBV1pXQUNzMEFQLy9BQ245L3dQOUJJMEdKZ0hvQUFBQkJ3SEtBUlArb1FBT3RBSVJBZ0VCdVArUXNGWUFLelQvL3dBcEFBQUQvUVlkQmlZQjZBQUFBUVlBbjFBZUFBdTJBZzRIQVFGMFZnQXJOQUQvL3dBcC9sQUQvUVNOQmlZQjZBQUFBQWNBZVFFK0FBUC8vd0IxLy9BRUN3WUtCaVlCNXdBQUFRWUFwV1FpQUF1MkFSc0xBUUYvVmdBck5BRC8vd0IxLy9BRUN3WExCaVlCNXdBQUFRWUFjR2NtQUF1MkFSZ0xBUUd3VmdBck5BRC8vd0IxLy9BRUN3WDFCaVlCNXdBQUFRY0FvUUNUQUI0QUM3WUJHd3NCQVYxV0FDczBBUC8vQUhYLzhBUUxCbm9HSmdIbkFBQUJCd0NqQVBBQUtRQU50d0lCSVFzQkFWRldBQ3MwTkFELy93QjEvL0FFRkFZZEJpWUI1d0FBQVFjQXBnRG9BQjRBRGJjQ0FSb0xBUUZoVmdBck5EUUFBQUlBZGY1ekJBc0VqUUFWQUNzQUdrQU1IaVVYRmhZUkJndHlEQUI5QUQ4eUt6SXlFVE12TXpBeFFUTVJGQVlHSXlJbUpqVVJNeEVVRmhZek1qWTJOUU1YRGdJVkZCWXpNalkzRndZR0l5SW1OVFEyTmdOUnVuM1Jmb1BQZUxkRmZGSlRlMFJyU2l0T01pTXJJVFFQRGhsTk8xRnZOWElFamZ6MGhMTmFXck9FQXd6ODlGWnZOVFZ2VnY3ZE9TQkZUU3doS0JNSWVnOGRZVjQyYW1MLy93QXhBQUFGOFFZZUJpWUI1UUFBQVFjQW5nRTdBQjRBQzdZRUd3b0JBWFpXQUNzMEFQLy9BQTRBQUFRY0JoNEdKZ0hqQUFBQkJnQ2VQaDRBQzdZREV3a0JBWFpXQUNzMEFQLy9BQTRBQUFRY0JlUUdKZ0hqQUFBQkJnQnFiaDRBRGJjRUF4Y0pBUUdFVmdBck5EUUEvLzhBU0FBQUErRUdIZ1ltQWVJQUFBRUhBSFVCTkFBZUFBdTJBdzROQVFGclZnQXJOQUQvL3dCSUFBQUQ0UVhnQmlZQjRnQUFBUWNBb2dFYUFCNEFDN1lERncwQkFZQldBQ3MwQVAvL0FFZ0FBQVBoQmgwR0pnSGlBQUFCQmdDZlV4NEFDN1lERkEwQkFYUldBQ3MwQVAvL0FCMEFBQVVlQmo0R0pnQWxBQUFCQmdDdUEvOEFEclFERGdNQUFMai9QckJXQUNzMC8vLy9qQUFBQktvR1B3UW1BQ2xrQUFFSEFLNysxQUFBQUE2MEJCQUhBQUM0L3ord1ZnQXJOUC8vLzVvQUFBVnNCa0VFSmdBc1pBQUFCd0N1L3VJQUF2Ly8vNkFBQUFIY0JrRUVKZ0F0WkFBQkJ3Q3UvdWdBQWdBT3RBRUVBd0FBdVA5QnNGWUFLelQvLy8vNi8rd0ZIZ1krQkNZQU14UUFBUWNBcnY5Qy8vOEFEclFDTEJFQUFMai9LckJXQUNzMC8vLy9kZ0FBQlNBR1BnUW1BRDFrQUFFSEFLNyt2di8vQUF1MkFRb0lBQUNPVmdBck5BRC8vLy84QUFBRTRBWStCQ1lBdWhRQUFRY0FydjlFLy84QURyUUROaDBBQUxqL0tyQldBQ3MwLy8vL20vL3pBcXdHZEFZbUFNTUFBQUVIQUsvL0tmL3JBQkJBQ1FNQ0FTc0FBUUdpVmdBck5EUTAvLzhBSFFBQUJSNEZzQVlHQUNVQUFQLy9BS2tBQUFTSUJiQUdCZ0FtQUFELy93Q3BBQUFFUmdXd0JnWUFLUUFBLy84QVZ3QUFCSG9Gc0FZR0FENEFBUC8vQUtrQUFBVUlCYkFHQmdBc0FBRC8vd0MzQUFBQmVBV3dCZ1lBTFFBQS8vOEFxUUFBQlFVRnNBWUdBQzhBQVAvL0FLa0FBQVpTQmJBR0JnQXhBQUQvL3dDcEFBQUZDUVd3QmdZQU1nQUEvLzhBZC8vc0JRb0Z4QVlHQURNQUFQLy9BS2tBQUFUQkJiQUdCZ0EwQUFELy93QXlBQUFFbHdXd0JnWUFPQUFBLy84QUR3QUFCTHdGc0FZR0FEMEFBUC8vQURvQUFBVE9CYkFHQmdBOEFBRC8vLy9WQUFBQ1h3Y0lCaVlBTFFBQUFRY0Fhdjl3QVVJQURiY0NBUmtEQVFHRFZnQXJORFFBLy84QUR3QUFCTHdHL0FZbUFEMEFBQUVIQUdvQXd3RTJBQTIzQWdFZUFnRUJkMVlBS3pRMEFQLy9BR1QvNndSNEJqZ0dKZ0M3QUFBQkJ3Q3VBWFgvK1FBTHRnTkNCZ0VCbWxZQUt6UUEvLzhBWlAvc0Erd0dOd1ltQUw4QUFBRUhBSzRCSy8vNEFBdTJBa0FyQVFHYVZnQXJOQUQvL3dDUy9tRUQ4UVk0QmlZQXdRQUFBUWNBcmdGRy8va0FDN1lDSFFNQkFhNVdBQ3MwQVAvL0FNUC84d0pNQmlNR0pnRERBQUFCQmdDdUt1UUFDN1lCRWdBQkFabFdBQ3MwQVAvL0FKRC82d1AzQm5RR0pnRExBQUFCQmdDdkl1c0FFRUFKQXdJQk9BOEJBYUpXQUNzME5EVC8vd0NiQUFBRVFBUTZCZ1lBamdBQS8vOEFYUC9zQkRVRVRnWUdBRk1BQVAvL0FKditZQVB1QkRvR0JnQjJBQUQvL3dBaEFBQUR1d1E2QmdZQVdnQUEvLzhBV3Y1TUJIVUVTUVlHQW9BQUFQLy8vK1QvOHdKdUJiRUdKZ0REQUFBQkJ3QnEvMy8vNndBTnR3SUJKd0FCQWFKV0FDczBOQUQvL3dDUS8rc0Q5d1d4QmlZQXl3QUFBUVlBYW5qckFBMjNBZ0UwRHdFQm9sWUFLelEwQVAvL0FGei83QVExQmpnR0pnQlRBQUFCQndDdUFVUC8rUUFMdGdJc0JnRUJtbFlBS3pRQS8vOEFrUC9yQS9jR0l3WW1BTXNBQUFFSEFLNEJJLy9rQUF1MkFSOFBBUUdaVmdBck5BRC8vd0I2LytzR0dnWWdCaVlBemdBQUFRY0FyZ0pVLytFQUM3WUNRQjhCQVpaV0FDczBBUC8vQUtrQUFBUkdCd2dHSmdBcEFBQUJCd0JxQU1RQlFnQU50d1VFSlFjQkFZTldBQ3MwTkFELy93Q3lBQUFFTUFkQ0JpWUFzUUFBQVFjQWRRR1FBVUlBQzdZQkJnVUJBV3hXQUNzMEFBQUJBRkgvN0FSekJjUUFPUUFiUUEwS0pnODJNU3NKY2hnVUR3TnlBQ3ZNTXl2TU14STVPVEF4UVRRdUFpY3VBelUwUGdJek1oWVdGU00wSmlZaklnWUdGUlFlQWhjZUF4VVVEZ0lqSWk0Q05UTVVIZ0l6TWpZMkE3RWZUWWRuYks1OFFrYUR0bkNrNVhqQVJvNXRaNFpCSjFPQldueTBkVGxJaHJ0elpjT2ZYOEE2WllGR1pZeEpBWEF6VDBBNkhpQlBab1JWVlpCclBIM0pjbEovU1Q1cVJDNUxRRFlaSTFacmgxVlprR1kzT0hDbGJVdHJSaUU0YVAvL0FMY0FBQUY0QmJBR0JnQXRBQUQvLy8vVkFBQUNYd2NJQmlZQUxRQUFBUWNBYXY5d0FVSUFEYmNDQVJrREFRR0RWZ0FyTkRRQS8vOEFOZi9zQTh3RnNBWUdBQzRBQVAvL0FMSUFBQVVlQmJBR0JnSThBQUQvL3dDcEFBQUZCUWN4QmlZQUx3QUFBUWNBZFFGOEFURUFDN1lERGdNQkFWdFdBQ3MwQVAvL0FFMy82d1RMQnhrR0pnRGVBQUFCQndDaEFOa0JRZ0FMdGdJZUFRRUJYbFlBS3pRQS8vOEFIUUFBQlI0RnNBWUdBQ1VBQVAvL0FLa0FBQVNJQmJBR0JnQW1BQUQvL3dDeUFBQUVNQVd3QmdZQXNRQUEvLzhBcVFBQUJFWUZzQVlHQUNrQUFQLy9BTElBQUFVQUJ4a0dKZ0RjQUFBQkJ3Q2hBVEFCUWdBTHRnRVBBUUVCWGxZQUt6UUEvLzhBcVFBQUJsSUZzQVlHQURFQUFQLy9BS2tBQUFVSUJiQUdCZ0FzQUFELy93QjMvK3dGQ2dYRUJnWUFNd0FBLy84QXNnQUFCUUVGc0FZR0FMWUFBUC8vQUtrQUFBVEJCYkFHQmdBMEFBRC8vd0I0Lyt3RTJBWEVCZ1lBSndBQS8vOEFNZ0FBQkpjRnNBWUdBRGdBQVAvL0FEb0FBQVRPQmJBR0JnQThBQUQvL3dCdC8rd0Q2Z1JPQmdZQVJRQUEvLzhBWGYvc0EvTUVUZ1lHQUVrQUFQLy9BSjBBQUFRQ0JjSUdKZ0R3QUFBQkJ3Q2hBS0gvNndBTHRnRVBBUUVCZlZZQUt6UUEvLzhBWFAvc0JEVUVUZ1lHQUZNQUFQLy9BSXorWUFRZkJFNEdCZ0JVQUFBQUFRQmQvK3dEN1FST0FDY0FFMEFKQUFrZEZBZHlDUXR5QUNzck1oRXpNREZsTWpZMk56TU9BaU1pTGdJMU5UUStBak15RmhZWEl5NENJeUlPQWhVVkZCNENBajVDY0VnRnNBVjN3SE42dFhjN08zZTFlbisrYlFXd0JVRnZTbFZ6UXgwY1EzT0VObDg5WUtWbFZwYkRiU3B0dzVaV1o3RndRMnhCUTNHSlJ5cEhpbkJEQVAvL0FCYitTd093QkRvR0JnQmRBQUQvL3dBcUFBQUR5d1E2QmdZQVhBQUEvLzhBWGYvc0EvTUZ4Z1ltQUVrQUFBRUhBR29BamdBQUFBMjNBZ0ZCQ3dFQm8xWUFLelEwQVAvL0FKc0FBQU5JQmVzR0pnRHNBQUFCQndCMUFNNy82d0FMdGdFR0JRRUJpMVlBS3pRQS8vOEFYLy9zQTd3RVRnWUdBRmNBQVAvL0FJNEFBQUZwQmNRR0JnQk5BQUQvLy8rNkFBQUNSQVhFQmlZQWpRQUFBUWNBYXY5Vi8vNEFEYmNDQVJrREFRRzFWZ0FyTkRRQS8vLy92djVMQVZvRnhBWUdBRTRBQVAvL0FKMEFBQVJBQmVvR0pnRHhBQUFCQndCMUFUei82Z0FMdGdNT0F3RUJpbFlBS3pRQS8vOEFGdjVMQTdBRjF3WW1BRjBBQUFFR0FLRlBBQUFMdGdJZUFRRUJrbFlBS3pRQS8vOEFQUUFBQnUwSE53WW1BRHNBQUFFSEFFUUNLd0UzQUF1MkJCZ1ZBUUZoVmdBck5BRC8vd0FyQUFBRjB3WUFCaVlBV3dBQUFRY0FSQUdLQUFBQUM3WUVHQlVCQWFCV0FDczBBUC8vQUQwQUFBYnRCemNHSmdBN0FBQUJCd0IxQXJzQk53QUx0Z1FXQVFFQllWWUFLelFBLy84QUt3QUFCZE1HQUFZbUFGc0FBQUVIQUhVQ0dnQUFBQXUyQkJZQkFRR2dWZ0FyTkFELy93QTlBQUFHN1FiOUJpWUFPd0FBQVFjQWFnSDFBVGNBRGJjRkJDc1ZBUUY0VmdBck5EUUEvLzhBS3dBQUJkTUZ4Z1ltQUZzQUFBRUhBR29CVkFBQUFBMjNCUVFyRlFFQnQxWUFLelEwQVAvL0FBOEFBQVM4QnpZR0pnQTlBQUFCQndCRUFQa0JOZ0FMdGdFTEFnRUJZRllBS3pRQS8vOEFGdjVMQTdBR0FBWW1BRjBBQUFFSEFFUUFpd0FBQUF1MkFoc0JBUUdnVmdBck5BRC8vd0JvQkNJQS9nWUFCZ1lBQ3dBQS8vOEFpUVFUQWlRR0FBWUdBQVlBQVAvL0FLSC85QU9NQmJBRUpnQUZBQUFBQndBRkFoQUFBUC8vLzdUK1N3SkFCZFlHSmdDY0FBQUJCd0NmLzBqLzF3QUx0Z0VZQUFFQmdGWUFLelFBLy84QU1BUVdBVWdHQUFZR0FZVUFBUC8vQUtrQUFBWlNCemNHSmdBeEFBQUJCd0IxQXBrQk53QUx0Z01SQUFFQllWWUFLelFBLy84QWl3QUFCbmtHQUFZbUFGRUFBQUVIQUhVQ3JnQUFBQXUyQXpNREFRR2dWZ0FyTkFELy93QWQvbXNGSGdXd0JpWUFKUUFBQVFjQXB3R0FBQUVBRUxVRUF4RUZBUUc0LzdXd1ZnQXJORFQvL3dCdC9tc0Q2Z1JPQmlZQVJRQUFBUWNBcHdESUFBRUFFTFVEQWo0eEFRRzQvOG13VmdBck5EVC8vd0NwQUFBRVJnZENCaVlBS1FBQUFRY0FSQUQ2QVVJQUM3WUVFZ2NCQVd4V0FDczBBUC8vQUxJQUFBVUFCMElHSmdEY0FBQUJCd0JFQVd3QlFnQUx0Z0VNQVFFQmJGWUFLelFBLy84QVhmL3NBL01HQUFZbUFFa0FBQUVIQUVRQXhBQUFBQXUyQVM0TEFRR01WZ0FyTkFELy93Q2RBQUFFQWdYckJpWUE4QUFBQVFjQVJBRGQvK3NBQzdZQkRBRUJBWXRXQUNzMEFQLy9BRm9BQUFVaUJiQUdCZ0M1QUFELy93QmcvaWNGUXdRNkJnWUF6UUFBLy84QUZnQUFCTjBHNXdZbUFSa0FBQUVIQUt3RU9nRDVBQTIzQXdJVkV3RUJMVllBS3pRMEFQLy8vL3NBQUFRTUJiOEdKZ0VhQUFBQkJ3Q3NBOVQvMFFBTnR3TUNHUmNCQVh0V0FDczBOQUQvL3dCYy9rc0lRQVJPQkNZQVV3QUFBQWNBWFFTUUFBRC8vd0IzL2tzSk1RWEVCQ1lBTXdBQUFBY0FYUVdCQUFELy93QlEvazhFYXdYRUJpWUEyd0FBQVFjQ1lRR2IvN1lBQzdZQ1Fpb0FBR1JXQUNzMEFQLy9BRmorVUFPdEJFMEdKZ0R2QUFBQkJ3SmhBVVAvdHdBTHRnSS9LUUFBWlZZQUt6UUEvLzhBZVA1UEJOZ0Z4QVltQUNjQUFBRUhBbUVCNWYrMkFBdTJBU3NGQUFCa1ZnQXJOQUQvL3dCZC9rOEQ3UVJPQmlZQVJ3QUFBUWNDWVFGUy83WUFDN1lCS3drQUFHUldBQ3MwQVAvL0FBOEFBQVM4QmJBR0JnQTlBQUQvL3dBdi9sOEQ0QVE2QmdZQXZRQUEvLzhBdHdBQUFYZ0ZzQVlHQUMwQUFQLy9BQnNBQUFjMkJ4a0dKZ0RhQUFBQkJ3Q2hBZmdCUWdBTHRnVWREUUVCWGxZQUt6UUEvLzhBRmdBQUJnUUZ3Z1ltQU80QUFBRUhBS0VCWC8vckFBdTJCUjBOQVFGOVZnQXJOQUQvL3dDM0FBQUJlQVd3QmdZQUxRQUEvLzhBSFFBQUJSNEhEZ1ltQUNVQUFBRUhBS0VBOHdFM0FBdTJBeE1IQVFGVFZnQXJOQUQvL3dCdC8rd0Q2Z1hYQmlZQVJRQUFBUWNBb1FDWkFBQUFDN1lDUUE4QkFYNVdBQ3MwQVAvL0FCMEFBQVVlQnYwR0pnQWxBQUFCQndCcUFQa0JOd0FOdHdRREl3Y0JBWGhXQUNzME5BRC8vd0J0Lyt3RDZnWEdCaVlBUlFBQUFRY0FhZ0NmQUFBQURiY0RBbEFQQVFHalZnQXJORFFBLy8vLzhRQUFCMWdGc0FZR0FJRUFBUC8vQUUvLzZ3WjlCRThHQmdDR0FBRC8vd0NwQUFBRVJnY1pCaVlBS1FBQUFRY0FvUUMrQVVJQUM3WUVGUWNCQVY1V0FDczBBUC8vQUYzLzdBUHpCZGNHSmdCSkFBQUJCd0NoQUlnQUFBQUx0Z0V4Q3dFQmZsWUFLelFBLy84QVh2L3JCUklHMmdZbUFWZ0FBQUVIQUdvQTFBRVVBQTIzQWdGQ0FBRUJRVllBS3pRMEFQLy9BR1AvN0FQcUJGQUdCZ0NkQUFELy93QmovK3dENmdYSEJpWUFuUUFBQVFjQWFnQ0lBQUVBRGJjQ0FVQUFBUUdpVmdBck5EUUEvLzhBR3dBQUJ6WUhDQVltQU5vQUFBRUhBR29CL2dGQ0FBMjNCZ1V0RFFFQmcxWUFLelEwQVAvL0FCWUFBQVlFQmJFR0pnRHVBQUFCQndCcUFXWC82d0FOdHdZRkxRMEJBYUpXQUNzME5BRC8vd0JRLyt3RWF3Y2RCaVlBMndBQUFRY0FhZ0MzQVZjQURiY0RBbFFWQVFHRVZnQXJORFFBLy84QVdQL3NBNjBGeFFZbUFPOEFBQUVHQUdwZi93QU50d01DVVJRQkFhTldBQ3MwTkFELy93Q3lBQUFGQUFidkJpWUEzQUFBQVFjQWNBRUVBVW9BQzdZQkRBZ0JBYkZXQUNzMEFQLy9BSjBBQUFRQ0JaZ0dKZ0R3QUFBQkJnQndkZk1BQzdZQkRBZ0JBZEJXQUNzMEFQLy9BTElBQUFVQUJ3Z0dKZ0RjQUFBQkJ3QnFBVFlCUWdBTnR3SUJId0VCQVlOV0FDczBOQUQvL3dDZEFBQUVBZ1d4QmlZQThBQUFBUWNBYWdDbi8rc0FEYmNDQVI4QkFRR2lWZ0FyTkRRQS8vOEFkLy9zQlFvRy93WW1BRE1BQUFFSEFHb0JIQUU1QUEyM0F3SkJFUUVCWmxZQUt6UTBBUC8vQUZ6LzdBUTFCY1lHSmdCVEFBQUJCd0JxQUpnQUFBQU50d01DUVFZQkFhTldBQ3MwTkFELy93Qm4vK3dFK2dYRUJnWUJGd0FBLy84QVhQL3NCRFFFVGdZR0FSZ0FBUC8vQUdmLzdBVDZCd01HSmdFWEFBQUJCd0JxQVNnQlBRQU50d1FEVHdBQkFXcFdBQ3MwTkFELy93QmMvK3dFTkFYSUJpWUJHQUFBQVFjQWFnQ0lBQUlBRGJjRUEwRUFBUUdsVmdBck5EUUEvLzhBbFAvc0JQUUhIZ1ltQU9jQUFBRUhBR29CRFFGWUFBMjNBd0pDSGdFQmhWWUFLelEwQVAvL0FHVC82d1BoQmNZR0pnRC9BQUFCQmdCcWZBQUFEYmNEQWtFSkFRR2pWZ0FyTkRRQS8vOEFUZi9yQk1zRzd3WW1BTjRBQUFFSEFIQUFyUUZLQUF1MkFoc1lBUUd4VmdBck5BRC8vd0FXL2tzRHNBV3RCaVlBWFFBQUFRWUFjQ01JQUF1MkFoc1lBUUhsVmdBck5BRC8vd0JOLytzRXl3Y0lCaVlBM2dBQUFRY0FhZ0RmQVVJQURiY0RBaTRCQVFHRFZnQXJORFFBLy84QUZ2NUxBN0FGeGdZbUFGMEFBQUVHQUdwVkFBQU50d01DTGdFQkFiZFdBQ3MwTkFELy93Qk4vK3NFeXdkQkJpWUEzZ0FBQVFjQXBnRXVBVUlBRGJjREFoa0JBUUZpVmdBck5EUUEvLzhBRnY1TEE5QUYvd1ltQUYwQUFBRUhBS1lBcEFBQUFBMjNBd0laQVFFQmxsWUFLelEwQVAvL0FKY0FBQVRKQndnR0pnRGhBQUFCQndCcUFRa0JRZ0FOdHdNQ0x4WUJBWU5XQUNzME5BRC8vd0JvQUFBRHZRV3hCaVlBK1FBQUFRWUFhbVhyQUEyM0F3SXRBd0VCb2xZQUt6UTBBUC8vQUxJQUFBWXhCd2dHSmdEbEFBQUJCd0JxQWRNQlFnQU50d01DTWh3QkFZTldBQ3MwTkFELy93Q2VBQUFGZndXeEJpWUEvUUFBQVFjQWFnRnQvK3NBRGJjREFqSWNBUUdpVmdBck5EUUEvLzhBWC8vc0EvRUdBQVlHQUVnQUFQLy9BQjMrb2dVZUJiQUdKZ0FsQUFBQkJ3Q3RCUU1BQUFBT3RBTVJCUUVCdVA5MXNGWUFLelQvL3dCdC9xSUQ2Z1JPQmlZQVJRQUFBUWNBclFSTEFBQUFEclFDUGpFQkFiai9pYkJXQUNzMC8vOEFIUUFBQlI0SHV3WW1BQ1VBQUFFSEFLc0U3Z0ZIQUF1MkF3OEhBUUZ4VmdBck5BRC8vd0J0Lyt3RDZnYUVCaVlBUlFBQUFRY0Fxd1NVQUJBQUM3WUNQQThCQVp4V0FDczBBUC8vQUIwQUFBVWVCOFFHSmdBbEFBQUJCd0pIQU1JQkx3QU50d1FERWdjQkFXRldBQ3MwTkFELy93QnQvK3dFd0FhTkJpWUFSUUFBQVFZQ1IyajRBQTIzQXdKQkR3RUJqRllBS3pRMEFQLy9BQjBBQUFVZUI4QUdKZ0FsQUFBQkJ3SklBTVlCUFFBTnR3UURFQWNCQVZ4V0FDczBOQUQvLy8vSi8rd0Q2Z2FKQmlZQVJRQUFBUVlDU0d3R0FBMjNBd0k5RHdFQmgxWUFLelEwQVAvL0FCMEFBQVVlQit3R0pnQWxBQUFCQndKSkFNY0JIQUFOdHdRREV3TUJBVkJXQUNzME5BRC8vd0J0Lyt3RVdnYTFCaVlBUlFBQUFRWUNTVzNsQUEyM0F3SkFEd0VCZTFZQUt6UTBBUC8vQUIwQUFBVWVCOW9HSmdBbEFBQUJCd0pLQU1jQkJnQU50d1FERUFjQkFUcFdBQ3MwTkFELy93QnQvK3dENmdhakJpWUFSUUFBQVFZQ1NtM1BBQTIzQXdJOUR3RUJaVllBS3pRMEFQLy9BQjMrb2dVZUJ6Y0dKZ0FsQUFBQUp3Q2VBTWtCTndFSEFLMEZBd0FBQUJlMEJCb0ZBUUc0LzNXM1ZnTVJCd0VCYkZZQUt6UXJOQUQvL3dCdC9xSUQ2Z1lBQmlZQVJRQUFBQ1lBbm04QUFRY0FyUVJMQUFBQUY3UURSekVCQWJqL2liZFdBajRQQVFHWFZnQXJOQ3MwQVAvL0FCMEFBQVVlQjdnR0pnQWxBQUFCQndKTUFPb0JMUUFOdHdRREV3Y0JBVnhXQUNzME5BRC8vd0J0Lyt3RDZnYUJCaVlBUlFBQUFRY0NUQUNRLy9ZQURiY0RBa0FQQVFHSFZnQXJORFFBLy84QUhRQUFCUjRIdUFZbUFDVUFBQUVIQWtVQTZnRXRBQTIzQkFNVEJ3RUJYRllBS3pRMEFQLy9BRzMvN0FQcUJvRUdKZ0JGQUFBQkJ3SkZBSkQvOWdBTnR3TUNRQThCQVlkV0FDczBOQUQvL3dBZEFBQUZIZ2hDQmlZQUpRQUFBUWNDVFFEdUFUNEFEYmNFQXhNSEFRRnVWZ0FyTkRRQS8vOEFiZi9zQStvSEN3WW1BRVVBQUFFSEFrMEFsQUFIQUEyM0F3SkFEd0VCbVZZQUt6UTBBUC8vQUIwQUFBVWVDQllHSmdBbEFBQUJCd0pnQU80QlJnQU50d1FERXdjQkFXOVdBQ3MwTkFELy93QnQvK3dENmdiZkJpWUFSUUFBQVFjQ1lBQ1VBQThBRGJjREFrQVBBUUdhVmdBck5EUUEvLzhBSGY2aUJSNEhEZ1ltQUNVQUFBQW5BS0VBOHdFM0FRY0FyUVVEQUFBQUY3UUVJQVVCQWJqL2RiZFdBeE1IQVFGVFZnQXJOQ3MwQVAvL0FHMytvZ1BxQmRjR0pnQkZBQUFBSndDaEFKa0FBQUVIQUswRVN3QUFBQmUwQTAweEFRRzQvNG0zVmdKQUR3RUJmbFlBS3pRck5BRC8vd0NwL3F3RVJnV3dCaVlBS1FBQUFRY0FyUVRBQUFvQURyUUVFd0lCQWJqL2Y3QldBQ3MwLy84QVhmNmlBL01FVGdZbUFFa0FBQUVIQUswRWpRQUFBQTYwQVM4QUFRRzQvNG13VmdBck5QLy9BS2tBQUFSR0I4WUdKZ0FwQUFBQkJ3Q3JCTGtCVWdBTHRnUVJCd0VCZkZZQUt6UUEvLzhBWGYvc0EvTUdoQVltQUVrQUFBRUhBS3NFZ3dBUUFBdTJBUzBMQVFHY1ZnQXJOQUQvL3dDcEFBQUVSZ2N1QmlZQUtRQUFBUWNBcFFDUEFVWUFDN1lFSGdjQkFYWldBQ3MwQVAvL0FGMy83QVB6QmV3R0pnQkpBQUFCQmdDbFdRUUFDN1lCT2dzQkFaWldBQ3MwQVAvL0FLa0FBQVRsQjg4R0pnQXBBQUFCQndKSEFJMEJPZ0FOdHdVRUZBY0JBV3hXQUNzME5BRC8vd0JkLyt3RXJ3YU5CaVlBU1FBQUFRWUNSMWY0QUEyM0FnRXdDd0VCakZZQUt6UTBBUC8vLys0QUFBUkdCOHNHSmdBcEFBQUJCd0pJQUpFQlNBQU50d1VFRWdjQkFXZFdBQ3MwTkFELy8vKzQvK3dEOHdhSkJpWUFTUUFBQVFZQ1NGc0dBQTIzQWdFdUN3RUJoMVlBS3pRMEFQLy9BS2tBQUFSL0IvY0dKZ0FwQUFBQkJ3SkpBSklCSndBTnR3VUVGUWNCQVZ0V0FDczBOQUQvL3dCZC8rd0VTUWExQmlZQVNRQUFBUVlDU1Z6bEFBMjNBZ0V4Q3dFQmUxWUFLelEwQVAvL0FLa0FBQVJHQitVR0pnQXBBQUFCQndKS0FKSUJFUUFOdHdVRUVnY0JBVVZXQUNzME5BRC8vd0JkLyt3RDh3YWpCaVlBU1FBQUFRWUNTbHpQQUEyM0FnRXVDd0VCWlZZQUt6UTBBUC8vQUtuK3JBUkdCMElHSmdBcEFBQUFKd0NlQUpRQlFnRUhBSzBFd0FBS0FCZTBCUndDQVFHNC8zKzNWZ1FUQndFQmQxWUFLelFyTkFELy93QmQvcUlEOHdZQUJpWUFTUUFBQUNZQW5sNEFBUWNBclFTTkFBQUFGN1FDT0FBQkFiai9pYmRXQVM4TEFRR1hWZ0FyTkNzMEFQLy9BTGNBQUFINEI4WUdKZ0F0QUFBQkJ3Q3JBMlVCVWdBTHRnRUZBd0VCZkZZQUt6UUEvLzhBbkFBQUFkMEdnZ1ltQUkwQUFBRUhBS3NEU2dBT0FBdTJBUVVEQVFHdVZnQXJOQUQvL3dDay9xc0Jmd1d3QmlZQUxRQUFBUWNBclFOc0FBa0FEclFCQndJQkFiai9mckJXQUNzMC8vOEFodjZzQVdrRnhBWW1BRTBBQUFFSEFLMERUZ0FLQUE2MEFoTUNBUUc0LzMrd1ZnQXJOUC8vQUhmK29nVUtCY1FHSmdBekFBQUJCd0N0QlJnQUFBQU90QUl2QmdFQnVQK0pzRllBS3pULy93QmMvcUVFTlFST0JpWUFVd0FBQVFjQXJRU2QvLzhBRHJRQ0x4RUJBYmovaUxCV0FDczAvLzhBZC8vc0JRb0h2UVltQURNQUFBRUhBS3NGRVFGSkFBdTJBaTBSQVFGZlZnQXJOQUQvL3dCYy8rd0VOUWFFQmlZQVV3QUFBUWNBcXdTTkFCQUFDN1lDTFFZQkFaeFdBQ3MwQVAvL0FIZi83QVU5QjhZR0pnQXpBQUFCQndKSEFPVUJNUUFOdHdNQ01CRUJBVTlXQUNzME5BRC8vd0JjLyt3RXVRYU5CaVlBVXdBQUFRWUNSMkg0QUEyM0F3SXdCZ0VCakZZQUt6UTBBUC8vQUViLzdBVUtCOElHSmdBekFBQUJCd0pJQU9rQlB3QU50d01DTGhFQkFVcFdBQ3MwTkFELy8vL0MvK3dFTlFhSkJpWUFVd0FBQVFZQ1NHVUdBQTIzQXdJdUJnRUJoMVlBS3pRMEFQLy9BSGYvN0FVS0IrNEdKZ0F6QUFBQkJ3SkpBT29CSGdBTnR3TUNNUkVCQVQ1V0FDczBOQUQvL3dCYy8rd0VVd2ExQmlZQVV3QUFBUVlDU1dibEFBMjNBd0l4QmdFQmUxWUFLelEwQVAvL0FIZi83QVVLQjl3R0pnQXpBQUFCQndKS0FPb0JDQUFOdHdNQ0xoRUJBU2hXQUNzME5BRC8vd0JjLyt3RU5RYWpCaVlBVXdBQUFRWUNTbWJQQUEyM0F3SXVCZ0VCWlZZQUt6UTBBUC8vQUhmK29nVUtCemtHSmdBekFBQUFKd0NlQU93Qk9RRUhBSzBGR0FBQUFCZTBBemdHQVFHNC80bTNWZ0l2RVFFQldsWUFLelFyTkFELy93QmMvcUVFTlFZQUJpWUFVd0FBQUNZQW5tZ0FBUWNBclFTZC8vOEFGN1FET0JFQkFiai9pTGRXQWk4R0FRR1hWZ0FyTkNzMEFQLy9BR2IvN0FXZEJ6RUdKZ0NZQUFBQkJ3QjFBZDRCTVFBTHRnTTZIQUVCUjFZQUt6UUEvLzhBWFAvc0JMb0dBQVltQUprQUFBRUhBSFVCWlFBQUFBdTJBellRQVFHTVZnQXJOQUQvL3dCbS8rd0ZuUWN4QmlZQW1BQUFBUWNBUkFGT0FURUFDN1lEUEJ3QkFVZFdBQ3MwQVAvL0FGei83QVM2QmdBR0pnQ1pBQUFCQndCRUFOVUFBQUFMdGdNNEVBRUJqRllBS3pRQS8vOEFadi9zQlowSHRRWW1BSmdBQUFFSEFLc0ZEUUZCQUF1MkF6c2NBUUZYVmdBck5BRC8vd0JjLyt3RXVnYUVCaVlBbVFBQUFRY0Fxd1NVQUJBQUM3WUROeEFCQVp4V0FDczBBUC8vQUdiLzdBV2RCeDBHSmdDWUFBQUJCd0NsQU9NQk5RQUx0Z05JSEFFQlVWWUFLelFBLy84QVhQL3NCTG9GN0FZbUFKa0FBQUVHQUtWcUJBQUx0Z05FRUFFQmxsWUFLelFBLy84QVp2NmlCWjBHT0FZbUFKZ0FBQUVIQUswRkNRQUFBQTYwQXowUUFRRzQvNG13VmdBck5QLy9BRnorbUFTNkJMRUdKZ0NaQUFBQkJ3Q3RCSnYvOWdBT3RBTTVHd0VCdVA5L3NGWUFLelQvL3dDTS9xSUVxZ1d3QmlZQU9RQUFBUWNBclFUdkFBQUFEclFCR1FZQkFiai9pYkJXQUNzMC8vOEFpZjZpQTkwRU9nWW1BRmtBQUFFSEFLMEVVZ0FBQUE2MEFoOExBUUc0LzRtd1ZnQXJOUC8vQUl6LzdBU3FCN3NHSmdBNUFBQUJCd0NyQk9rQlJ3QUx0Z0VYQUFFQmNWWUFLelFBLy84QWlmL3NBOTBHaEFZbUFGa0FBQUVIQUtzRWhRQVFBQXUyQWgwUkFRR3dWZ0FyTkFELy93Q00vK3dHSFFkQ0JpWUFtZ0FBQVFjQWRRSFZBVUlBQzdZQ0lBb0JBV3hXQUNzMEFQLy9BSW4vN0FVUUJlc0dKZ0NiQUFBQkJ3QjFBV1AvNndBTHRnTW1Hd0VCaTFZQUt6UUEvLzhBalAvc0JoMEhRZ1ltQUpvQUFBRUhBRVFCUlFGQ0FBdTJBaUlLQVFGc1ZnQXJOQUQvL3dDSi8rd0ZFQVhyQmlZQW13QUFBUWNBUkFEVC8rc0FDN1lES0JzQkFZdFdBQ3MwQVAvL0FJei83QVlkQjhZR0pnQ2FBQUFCQndDckJRUUJVZ0FMdGdJaENnRUJmRllBS3pRQS8vOEFpZi9zQlJBR2J3WW1BSnNBQUFFSEFLc0Vrdi83QUF1MkF5Y2JBUUdiVmdBck5BRC8vd0NNLyt3R0hRY3VCaVlBbWdBQUFRY0FwUURhQVVZQUM3WUNMaFVCQVhaV0FDczBBUC8vQUluLzdBVVFCZGNHSmdDYkFBQUJCZ0NsYU84QUM3WUROQnNCQVpWV0FDczBBUC8vQUl6K21RWWRCZ0lHSmdDYUFBQUJCd0N0QlFuLzl3QU90QUlqRUFFQnVQK0FzRllBS3pULy93Q0ovcUlGRUFTUkJpWUFtd0FBQVFjQXJRU0lBQUFBRHJRREtSVUJBYmovaWJCV0FDczAvLzhBRC82akJMd0ZzQVltQUQwQUFBRUhBSzBFdkFBQkFBNjBBUXdHQVFHNC8zYXdWZ0FyTlAvL0FCYitCQU93QkRvR0pnQmRBQUFCQndDdEJSMy9ZZ0FPdEFJaUNBQUF1UCs1c0ZZQUt6VC8vd0FQQUFBRXZBZTZCaVlBUFFBQUFRY0Fxd1M0QVVZQUM3WUJDZ0lCQVhCV0FDczBBUC8vQUJiK1N3T3dCb1FHSmdCZEFBQUJCd0NyQkVvQUVBQUx0Z0lhQVFFQnNGWUFLelFBLy84QUR3QUFCTHdISWdZbUFEMEFBQUVIQUtVQWpnRTZBQXUyQVJjSUFRRnFWZ0FyTkFELy93QVcva3NEc0FYc0JpWUFYUUFBQVFZQXBTQUVBQXUyQWljWUFRR3FWZ0FyTkFELy93QmYvc3NFclFZQUJDWUFTQUFBQUNjQ05nR2hBa1lCQndCREFKLy9Zd0FYdEFRM0ZnRUJ1UDkzdDFZRE1nc0JBWU5XQUNzMEt6UUEvLzhBTXY2WkJKY0ZzQVltQURnQUFBRUhBbUVDUUFBQUFBdTJBZ3NDQUFDYVZnQXJOQUQvL3dBby9wa0RzUVE2QmlZQTlnQUFBUWNDWVFISEFBQUFDN1lDQ3dJQUFKcFdBQ3MwQVAvL0FKZittUVRKQmJBR0pnRGhBQUFCQndKaEF2NEFBQUFMdGdJZEdRRUFtbFlBS3pRQS8vOEFhUDZaQTcwRVBBWW1BUGtBQUFFSEFtRUI5Z0FBQUF1MkFoc0NBUUNhVmdBck5BRC8vd0N5L3BrRU1BV3dCaVlBc1FBQUFRY0NZUUR3QUFBQUM3WUJDUVFBQUpwV0FDczBBUC8vQUp2K21RTklCRG9HSmdEc0FBQUJCd0poQU5VQUFBQUx0Z0VKQkFBQW1sWUFLelFBLy84QVAvNVRCYjRGeEFZbUFVd0FBQUVIQW1FREJ2KzZBQXUyQWpvS0FBQnJWZ0FyTkFELy8vL2QvbFlFWkFST0JpWUJUUUFBQVFjQ1lRSUEvNzBBQzdZQ09Ra0FBR3RXQUNzMEFQLy9BSTBBQUFQZ0JnQUdCZ0JNQUFBQUF2L1VBQUFFc1FXd0FCZ0FIQUFhUUF3Y0d4Z0FBQXNNQW5JT0N3Z0FQek1yRWprdk04d3lNREZCSVRJV0ZoVVVEZ0lqSVJFekVTRXlOalkxTkNZbUl5RUJGU0UxQVRZQmphRGNja0IrdUhqOTRNRUJYMnVGUGo2RmEvNXpBUnY5Z3dOZmE4Q0JZSjkxUHdXdyt1MVBnRWxKZWtrQ0pwaVlBQUFDLzlRQUFBU3hCYkFBR0FBY0FCbEFDeHdiR0FBQUN3d0NEZ3NJQUQ4elB4STVMelBNTWpBeFFTRXlGaFlWRkE0Q0l5RVJNeEVoTWpZMk5UUW1KaU1oQVJVaE5RRTJBWTJnM0hKQWZyaDQvZURCQVY5cmhUNCtoV3YrY3dFYi9ZTURYMnZBZ1dDZmRUOEZzUHJ0VDRCSlNYcEpBaWFZbUFBQ0FBTUFBQVF3QmJBQUJRQUpBQlpBQ2dZSEJ3UUNCUUp5QkFnQVB5c3lFamt2TXpBeFFSVWhFU01SQVJVaE5RUXcvVUxBQWM3OWd3V3dudnJ1QmJEOWs1aVlBQUwvL1FBQUEwZ0VPZ0FGQUFrQUZrQUtDUWdJQkFJRkJuSUVDZ0EvS3pJU09TOHpNREZCRlNFUkl4RUJGU0UxQTBqK0RMa0IzLzJEQkRxWi9GOEVPdjQ4bUpnQUJBQUxBQUFGTWdXd0FBTUFDUUFOQUJFQUswQVZEQXNMQndjR0VCRUdFUVlSQWdrREFuSUtBZ2h5QUNzeUt6SVJPVGt2THhFekVUTVNPUkV6TURGQkVTTVJJUUVoSnlFQkV3RTNBUUVWSVRVQmg4RUVRdjJJL3FvZUFRRUIvQzM5M1d3Q28vMVcvWU1Gc1BwUUJiRDgzNkFDZ2ZwUUFxaXAvSzhFenBpWUFBQUUvOU1BQUFRcEJnQUFBd0FKQUEwQUVRQXRRQmNFQm5JTUN3c0hCd1lRRVFZUkJoRUNBd0J5Q2dJS2NnQXJNaXNST1Rrdkx4RXpFVE1TT1JFekt6QXhRUkVqRVFFQklTY3pBUk1CTndFQkZTRTFBV0M1QTA3K1EvN21GdFlCT3pUK2pHSUI3djRuL1lNR0FQb0FCZ0QrT3YyN21nR3IrOFlDQXFYOVdRVlltSmdBQWdBUEFBQUV2QVd3QUFnQURBQWRRQThNQVFRSEF3c0xCZ01JQW5JR0NISUFLeXN5RVRrdkZ6a3pNREZUQVFFekFSRWpFUUVCRlNFMTdBRjZBWHZiL2dyQi9nb0RtZjJEQmJEOUpRTGIvSEQ5NEFJZ0E1RDg4SmlZQUFBRUFDLytYd1BnQkRvQUF3QUlBQTBBRVFBWFFBc1JFQkFDQlEwR2NnSU9jZ0FyS3pJU09TOHpNREZsRVNNUk53RXpBU01EQVJjakFRRVZJVFVDWkxsWEFTQysvbTk3NkFFb0tYditiUU1kL1lPRS9kc0NKWGNEUC92R0JEcjh3UG9FT3Z4U21KZ0FBQUlBT2dBQUJNNEZzQUFMQUE4QUgwQVBEd2NGQVFRS0F3NE9DUVVEQUFKeUFDc3lMek01THhjNUVqa3pNREZCQVFFekFRRWpBUUVqQ1FJVklUVUJKZ0ZlQVY3aC9qUUIxK1ArbWY2WjR3SFgvalFEZ2YyREJiRDkwZ0l1L1MvOUlRSTUvY2NDM3dMUi9ZV1ltQUFBQWdBcUFBQUR5d1E2QUFzQUR3QWZRQThQQndVQkNnUUREZzRKQlFNQUJuSUFLekl2TXprdkZ6a1NPVE13TVVFVEV6TUJBU01EQXlNSkFoVWhOUUVLN2ZEWi9wNEJiZGI2K3RjQmJQNmZBd2o5Z3dRNi9uWUJpdjNxL2R3Qmx2NXFBaVFDRnY0K21KZ0EvLzhBWlAvc0Erd0VUUVlHQUw4QUFQLy9BQklBQUFRdkJiQUdKZ0FxQUFBQkJ3STIvNFArZlFBT3RBTU9BZ0lBdUFFSXNGWUFLelQvL3dDUUFvc0Z5QU1qQmdZQmdnQUEvLzhBWGdBQUJETUZ4QVlHQUJZQUFQLy9BRi8vN0FQNkJjUUdCZ0FYQUFELy93QTFBQUFFVVFXd0JnWUFHQUFBLy84QW12L3NCQzRGc0FZR0FCa0FBUC8vQUpuLzdBUXhCYklFQmdBYUZBRC8vd0NGLyt3RUl3WEVCQVlBSEJRQS8vOEFaUC8rQS9nRnhBUUdBQjBBQVAvL0FJZi83QVFmQmNRRUJnQVVGQUQvL3dCNi8rd0UzUWRYQmlZQUt3QUFBUWNBZFFHL0FWY0FDN1lCTEJBQkFXMVdBQ3MwQVAvL0FHSCtWUVB5QmdBR0pnQkxBQUFCQndCMUFVc0FBQUFMdGdNL0dnRUJqRllBS3pRQS8vOEFxUUFBQlFrSE53WW1BRElBQUFFSEFFUUJaUUUzQUF1MkFRd0pBUUZoVmdBck5BRC8vd0NOQUFBRDRBWUFCaVlBVWdBQUFRY0FSQURNQUFBQUM3WUNIZ01CQWFCV0FDczBBUC8vQUIwQUFBVWVCeUFHSmdBbEFBQUJCd0NzQkcwQk1nQU50d1FERGdNQkFXWldBQ3MwTkFELy93QTYvK3dENmdYcEJpWUFSUUFBQVFjQXJBUVQvL3NBRGJjREFqd1BBUUdSVmdBck5EUUEvLzhBWHdBQUJFWUhLd1ltQUNrQUFBRUhBS3dFT0FFOUFBMjNCUVFSQndFQmNWWUFLelEwQVAvL0FDbi83QVB6QmVrR0pnQkpBQUFCQndDc0JBTC8rd0FOdHdJQkxRc0JBWkZXQUNzME5BRC8vLzhMQUFBQjZnY3JCaVlBTFFBQUFRY0FyQUxrQVQwQURiY0NBUVVEQVFGeFZnQXJORFFBLy8vKzhBQUFBYzhGNXdZbUFJMEFBQUVIQUt3Q3lmLzVBQTIzQWdFRkF3RUJvMVlBS3pRMEFQLy9BSGYvN0FVS0J5SUdKZ0F6QUFBQkJ3Q3NCSkFCTkFBTnR3TUNMUkVCQVZSV0FDczBOQUQvL3dBei8rd0VOUVhwQmlZQVV3QUFBUWNBckFRTS8vc0FEYmNEQWkwR0FRR1JWZ0FyTkRRQS8vOEFWZ0FBQk1vSElBWW1BRFlBQUFFSEFLd0VMd0V5QUEyM0F3SWZBQUVCWmxZQUt6UTBBUC8vLzR3QUFBS1lCZWtHSmdCV0FBQUJCd0NzQTJYLyt3QU50d01DR0FNQkFhVldBQ3MwTkFELy93Q00vK3dFcWdjZ0JpWUFPUUFBQVFjQXJBUm9BVElBRGJjQ0FSY0xBUUZtVmdBck5EUUEvLzhBSy8vc0E5MEY2UVltQUZrQUFBRUhBS3dFQlAvN0FBMjNBd0lkRVFFQnBWWUFLelEwQVAvLy96Z0FBQVRUQmo0RUpnRFFaQUFBQndDdS9vRC8vLy8vQUtuK3JBU0lCYkFHSmdBbUFBQUJCd0N0QkxvQUNnQU90QUkwR3dFQnVQOS9zRllBS3pULy93Q00vcGdFSVFZQUJpWUFSZ0FBQVFjQXJRU3IvL1lBRHJRRE13UUJBYmovYTdCV0FDczAvLzhBcWY2c0JNY0ZzQVltQUNnQUFBRUhBSzBFdWdBS0FBNjBBaUlkQVFHNC8zK3dWZ0FyTlAvL0FGLytvZ1B4QmdBR0pnQklBQUFCQndDdEJMNEFBQUFPdEFNekZnRUJ1UCtKc0ZZQUt6VC8vd0NwL2dZRXh3V3dCaVlBS0FBQUFRY0J5Z0ZsL3FnQURyUUNLQjBCQWJqL2w3QldBQ3MwLy84QVgvMzhBL0VHQUFZbUFFZ0FBQUVIQWNvQmFmNmVBQTYwQXprV0FRRzQvNkd3VmdBck5QLy9BS24rckFVSUJiQUdKZ0FzQUFBQkJ3Q3RCUjhBQ2dBT3RBTVBDZ0VCdVA5L3NGWUFLelQvL3dDTi9xd0Q0QVlBQmlZQVRBQUFBUWNBclFTaEFBb0FEclFDSGdJQkFiai9mN0JXQUNzMC8vOEFxUUFBQlFVSE1RWW1BQzhBQUFFSEFIVUJmQUV4QUF1MkF3NERBUUZiVmdBck5BRC8vd0NOQUFBRURRZEJCaVlBVHdBQUFRY0FkUUZFQVVFQUM3WUREZ01CQUJ0V0FDczBBUC8vQUtuKy9BVUZCYkFHSmdBdkFBQUJCd0N0Qk9rQVdnQU90QU1SQWdFQnVQL1BzRllBS3pULy93Q04vdWtFRFFZQUJpWUFUd0FBQVFjQXJRUm1BRWNBRHJRREVRSUJBYmovdkxCV0FDczAvLzhBcWY2c0JCd0ZzQVltQURBQUFBRUhBSzBFd1FBS0FBNjBBZ3NDQVFHNC8zK3dWZ0FyTlAvL0FJYityQUZoQmdBR0pnQlFBQUFCQndDdEEwNEFDZ0FPdEFFSEFnRUJ1UDkvc0ZZQUt6VC8vd0NwL3F3R1VnV3dCaVlBTVFBQUFRY0FyUVhTQUFvQURyUURGQVlCQWJqL2Y3QldBQ3MwLy84QWkvNnNCbmtFVGdZbUFGRUFBQUVIQUswRjFnQUtBQTYwQXpZQ0FRRzQvMyt3VmdBck5QLy9BS24rckFVSkJiQUdKZ0F5QUFBQkJ3Q3RCU1VBQ2dBT3RBRU5BZ0VCdVA5L3NGWUFLelQvL3dDTi9xd0Q0QVJPQmlZQVVnQUFBUWNBclFTSUFBb0FEclFDSHdJQkFiai9mN0JXQUNzMC8vOEFkLy9zQlFvSDZBWW1BRE1BQUFFSEFrWUZEQUZVQUEyM0F3SXhFUUVCV2xZQUt6UTBBUC8vQUtrQUFBVEJCMElHSmdBMEFBQUJCd0IxQVgwQlFnQUx0Z0VZRHdFQmJGWUFLelFBLy84QWpQNWdCQjhGOWdZbUFGUUFBQUVIQUhVQmxQLzJBQXUyQXpBREFRR1dWZ0FyTkFELy93Q3AvcXdFeWdXd0JpWUFOZ0FBQVFjQXJRUzRBQW9BRHJRQ0lSZ0JBYmovZjdCV0FDczAvLzhBZy82dEFwZ0VUZ1ltQUZZQUFBRUhBSzBEU3dBTEFBNjBBaG9DQVFHNC80Q3dWZ0FyTlAvL0FGSCtvUVJ6QmNRR0pnQTNBQUFCQndDdEJNbi8vd0FPdEFFOUt3RUJ1UCtJc0ZZQUt6VC8vd0JmL3BnRHZBUk9CaVlBVndBQUFRY0FyUVNILy9ZQURyUUJPU2tCQWJqL2Y3QldBQ3MwLy84QU12NmlCSmNGc0FZbUFEZ0FBQUVIQUswRXV3QUFBQTYwQWdzQ0FRRzQvM1d3VmdBck5QLy9BQW4rb2dKWEJVRUdKZ0JZQUFBQkJ3Q3RCQm9BQUFBT3RBSVpFUUVCdVArSnNGWUFLelQvL3dDTS8rd0VxZ2ZtQmlZQU9RQUFBUWNDUmdUa0FWSUFEYmNDQVJzQUFRRnNWZ0FyTkRRQS8vOEFIUUFBQlAwSExnWW1BRG9BQUFFSEFLVUFzd0ZHQUF1MkFoZ0pBUUYyVmdBck5BRC8vd0FoQUFBRHV3WGlCaVlBV2dBQUFRWUFwUjM2QUF1MkFoZ0pBUUdnVmdBck5BRC8vd0FkL3F3RS9RV3dCaVlBT2dBQUFRY0FyUVRrQUFvQURyUUNEUVFCQWJqL2Y3QldBQ3MwLy84QUlmNnNBN3NFT2dZbUFGb0FBQUVIQUswRVRRQUtBQTYwQWcwRUFRRzQvMyt3VmdBck5QLy9BRDMrckFidEJiQUdKZ0E3QUFBQkJ3Q3RCZThBQ2dBT3RBUVpFd0VCdVA5L3NGWUFLelQvL3dBci9xd0Ywd1E2QmlZQVd3QUFBUWNBclFWVEFBb0FEclFFR1JNQkFiai9mN0JXQUNzMC8vOEFWLzZzQkhvRnNBWW1BRDRBQUFFSEFLMEV1Z0FLQUE2MEF4RUNBUUc0LzMrd1ZnQXJOUC8vQUZuK3JBT3pCRG9HSmdCZUFBQUJCd0N0QkdNQUNnQU90QU1SQWdFQnVQOS9zRllBS3pULy8vNTQvK3dGVUFYV0JDWUFNMFlBQVFjQmNmNEkvLzhBRGJjREFpNFJBQUFTVmdBck5EUUEvLzhBRkFBQUJIRUZHd1ltQWtNQUFBQUhBSzcvMi83Yy8vLy9ud0FBQStzRkhnUW1Bamc4QUFBSEFLNys1LzdmLy8vL3V3QUFCSlVGR3dRbUFmUThBQUFIQUs3L0EvN2MvLy8vd0FBQUFZMEZIZ1FtQWZNOEFBQUhBSzcvQ1A3Zi8vLy8zLy93QkdVRkd3UW1BZTBLQUFBSEFLNy9KLzdjLy8vL1ZRQUFCRmdGR3dRbUFlTThBQUFIQUs3K25mN2MvLy8vOXdBQUJJZ0ZHZ1FtQWdNS0FBQUhBSzcvUC83Yi8vOEFGQUFBQkhFRWpRWUdBa01BQVAvL0FJc0FBQVB3QkkwR0JnSkNBQUQvL3dDTEFBQURyd1NOQmdZQ09BQUEvLzhBU0FBQUErRUVqUVlHQWVJQUFQLy9BSXNBQUFSWkJJMEdCZ0gwQUFELy93Q1lBQUFCVVFTTkJnWUI4d0FBLy84QWl3QUFCRmNFalFZR0FmRUFBUC8vQUlzQUFBVjRCSTBHQmdIdkFBRC8vd0NMQUFBRVdRU05CZ1lCN2dBQS8vOEFZUC93QkZzRW5RWUdBZTBBQVAvL0FJc0FBQVFiQkkwR0JnSHNBQUQvL3dBcEFBQUQvUVNOQmdZQjZBQUEvLzhBRGdBQUJCd0VqUVlHQWVNQUFQLy9BQ2NBQUFReUJJMEdCZ0hrQUFELy8vK3lBQUFDUEFYa0JpWUI4d0FBQVFjQWF2OU5BQjRBRGJjQ0FRMERBUUdFVmdBck5EUUEvLzhBRGdBQUJCd0Y1QVltQWVNQUFBRUdBR3B1SGdBTnR3UURGd2tCQVlOV0FDczBOQUQvL3dDTEFBQURyd1hrQmlZQ09BQUFBUVlBYW5JZUFBMjNCUVFaQndFQmcxWUFLelEwQVAvL0FJc0FBQU9GQmg0R0pnSDZBQUFCQndCMUFUVUFIZ0FMdGdJSUF3RUJnMVlBS3pRQS8vOEFSUC93QTk0RW5RWUdBZWtBQVAvL0FKZ0FBQUZSQkkwR0JnSHpBQUQvLy8reUFBQUNQQVhrQmlZQjh3QUFBUWNBYXY5TkFCNEFEYmNDQVEwREFRR0VWZ0FyTkRRQS8vOEFMUC93QTAwRWpRWUdBZklBQVAvL0FJc0FBQVJYQmg0R0pnSHhBQUFCQndCMUFTVUFIZ0FMdGdNT0F3RUJoRllBS3pRQS8vOEFJLy9zQkF3RjlRWW1BaEVBQUFFR0FLRm5IZ0FMdGdJZEZ3RUJoRllBS3pRQS8vOEFGQUFBQkhFRWpRWUdBa01BQVAvL0FJc0FBQVB3QkkwR0JnSkNBQUQvL3dDTEFBQURoUVNOQmdZQitnQUEvLzhBaXdBQUE2OEVqUVlHQWpnQUFQLy9BSXNBQUFSaUJmVUdKZ0lPQUFBQkJ3Q2hBTWtBSGdBTHRnTVJDQUVCaEZZQUt6UUEvLzhBaXdBQUJYZ0VqUVlHQWU4QUFQLy9BSXNBQUFSWkJJMEdCZ0gwQUFELy93QmcvL0FFV3dTZEJnWUI3UUFBLy84QWl3QUFCRVFFalFZR0FmOEFBUC8vQUlzQUFBUWJCSTBHQmdIc0FBRC8vd0JoLy9BRU1RU2RCZ1lDUVFBQS8vOEFLUUFBQS8wRWpRWUdBZWdBQVAvL0FDY0FBQVF5QkkwR0JnSGtBQUFBQXdCSS9rOEQxUVNkQUI0QVBnQkNBQ2hBRXg4QkFnSStQaFUvTkRSQU1Db0xjZzhMRlg0QVB6UE1LOHpOTXhJNUVqa3ZNeEk1T1RBeFFTTTFNekkyTmpVMEppWWpJZ1lHRlNNMFBnSXpNaDRDRlJRT0FpY3pNaDRDRlJRT0FpTWlMZ0kxTXg0Q016STJOalUwTGdJakl4TVJJeEVDRUpLT1duQXpPSFJjUW14QnVVRnptbHBmbzNwRlEzZWU3SkoxcTI4MlNvT29YMGlhaFZLNUJVWnhSRnArUWlORlpVS08zTGtDTEhRclR6WXpVQzhrU2pwTGQxUXRKVTE1VTBWeFVTeEZMMU51UDFlQVV5Z2dUWUpoUWxBa0xGTTVNMHN4R1A1SC9mOENBUUFFQUl2K21RVDdCSTBBQXdBSEFBc0FEd0FkUUEwREFnSUdDd2Q5RHc0S0NnWVNBRDh6RU00elB6TVNPUzh6TURGQkZTRTFFeEVqRVNFUkl4RUJFU01SQThEOVh5VzVBODY1QVZ1NUFvdVptUUlDKzNNRWpmdHpCSTM4RGYzL0FnRUFBQUlBWWY1VkJERUVuUUFuQUNzQUdFQUxHUkIrS0NRa0tpb0ZDM0lBS3pJdk1oRXpQek13TVVFekRnSWpJaTRDTlRVMFBnSXpNaFlXRnlNdUFpTWlEZ0lWRlJRZUFqTXlOallIRVNNUkEzZTZESEhObDNHMmdrWkdoTHQwa3NoeERMb0tQblpmVDNoUktTVk1kbEJrZUQvRHVRRjVjYkptVFkvS2ZXWjl5cEJOWmJSMVRXNDdOV2VTWFdkWWtXbzVPRzNXL2Y4Q0FRRC8vd0FPQUFBRUhBU05CZ1lCNHdBQS8vOEFBdjVQQld3RW5RWW1BaWNBQUFBSEFtRUN1LysyLy84QWl3QUFCR0lGeXdZbUFnNEFBQUVIQUhBQW5RQW1BQXUyQXc0SUFRR3dWZ0FyTkFELy93QWovK3dFREFYTEJpWUNFUUFBQVFZQWNEc21BQXUyQWhvWEFRR3dWZ0FyTkFELy93QmhBQUFGQmdTTkJnWUNBUUFBLy84QW1QL3dCVFlFalFRbUFmTUFBQUFIQWZJQjZRQUEvLzhBQ1FBQUJmSUdBQVltQW9RQUFBRUhBSFVDbndBQUFBdTJCaGtQQVFGTlZnQXJOQUQvL3dCZy84WUVXd1llQmlZQ2hnQUFBUWNBZFFGOUFCNEFDN1lETUJFQkFWdFdBQ3MwQVAvL0FFVDkvQVBlQkowR0pnSHBBQUFBQndIS0FTaitudi8vQURFQUFBWHhCaDRHSmdIbEFBQUJCd0JFQWFFQUhnQUx0Z1FZQ2dFQmExWUFLelFBLy84QU1RQUFCZkVHSGdZbUFlVUFBQUVIQUhVQ01RQWVBQXUyQkJZS0FRRnJWZ0FyTkFELy93QXhBQUFGOFFYa0JpWUI1UUFBQVFjQWFnRnJBQjRBRGJjRkJCOEtBUUdFVmdBck5EUUEvLzhBRGdBQUJCd0dIZ1ltQWVNQUFBQUhBRVFBcEFBZS8vOEFIZjVPQlI0RnNBWW1BQ1VBQUFFSEFLUUJmQUFBQUF1MkF3NEZBUUU1VmdBck5BRC8vd0J0L2s0RDZnUk9CaVlBUlFBQUFRY0FwQURFQUFBQUM3WUNPekVBQUUxV0FDczBBUC8vQUtuK1dBUkdCYkFHSmdBcEFBQUJCd0NrQVRrQUNnQUx0Z1FRQWdBQVExWUFLelFBLy84QVhmNU9BL01FVGdZbUFFa0FBQUVIQUtRQkJnQUFBQXUyQVN3QUFBQk5WZ0FyTkFELy93QVUvazRFY1FTTkJpWUNRd0FBQUFjQXBBRWVBQUQvL3dDTC9sWURyd1NOQmlZQ09BQUFBQWNBcEFEbkFBai8vd0NHL3F3QllRUTZCaVlBalFBQUFRY0FyUU5PQUFvQURyUUJCd0lCQWJqL2Y3QldBQ3MwQUFBQUR3QzZBQU1BQVFRSkFBQUFYZ0FBQUFNQUFRUUpBQUVBREFCZUFBTUFBUVFKQUFJQURnQnFBQU1BQVFRSkFBTUFEQUJlQUFNQUFRUUpBQVFBREFCZUFBTUFBUVFKQUFVQUpnQjRBQU1BQVFRSkFBWUFIQUNlQUFNQUFRUUpBQWNBUUFDNkFBTUFBUVFKQUFnQURBRDZBQU1BQVFRSkFBa0FKZ0VHQUFNQUFRUUpBQXNBRkFFc0FBTUFBUVFKQUF3QUZBRXNBQU1BQVFRSkFBMEFYQUZBQUFNQUFRUUpBQTRBVkFHY0FBTUFBUVFKQUJrQURBQmVBRU1BYndCd0FIa0FjZ0JwQUdjQWFBQjBBQ0FBTWdBd0FERUFNUUFnQUVjQWJ3QnZBR2NBYkFCbEFDQUFTUUJ1QUdNQUxnQWdBRUVBYkFCc0FDQUFVZ0JwQUdjQWFBQjBBSE1BSUFCU0FHVUFjd0JsQUhJQWRnQmxBR1FBTGdCU0FHOEFZZ0J2QUhRQWJ3QlNBR1VBWndCMUFHd0FZUUJ5QUZZQVpRQnlBSE1BYVFCdkFHNEFJQUF6QUM0QU1BQXdBRFVBT3dBZ0FESUFNQUF5QURJQVVnQnZBR0lBYndCMEFHOEFMUUJTQUdVQVp3QjFBR3dBWVFCeUFGSUFid0JpQUc4QWRBQnZBQ0FBYVFCekFDQUFZUUFnQUhRQWNnQmhBR1FBWlFCdEFHRUFjZ0JyQUNBQWJ3Qm1BQ0FBUndCdkFHOEFad0JzQUdVQUxnQkhBRzhBYndCbkFHd0FaUUJEQUdnQWNnQnBBSE1BZEFCcEFHRUFiZ0FnQUZJQWJ3QmlBR1VBY2dCMEFITUFid0J1QUVjQWJ3QnZBR2NBYkFCbEFDNEFZd0J2QUcwQVRBQnBBR01BWlFCdUFITUFaUUJrQUNBQWRRQnVBR1FBWlFCeUFDQUFkQUJvQUdVQUlBQkJBSEFBWVFCakFHZ0FaUUFnQUV3QWFRQmpBR1VBYmdCekFHVUFMQUFnQUZZQVpRQnlBSE1BYVFCdkFHNEFJQUF5QUM0QU1BQm9BSFFBZEFCd0FEb0FMd0F2QUhjQWR3QjNBQzRBWVFCd0FHRUFZd0JvQUdVQUxnQnZBSElBWndBdkFHd0FhUUJqQUdVQWJnQnpBR1VBY3dBdkFFd0FTUUJEQUVVQVRnQlRBRVVBTFFBeUFDNEFNQUFBQUFNQUFBQUFBQUQvYWdCa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFDQUFnQUNQLy9BQThBQVFBQ0FBNEFBQUFBQUFBQ0tBQUNBRmtBSlFBK0FBRUFSQUJlQUFFQWFnQnFBQUVBY0FCd0FBRUFkUUIxQUFFQWdRQ0JBQUVBZ3dDREFBRUFoZ0NHQUFFQWlRQ0pBQUVBaXdDV0FBRUFtQUNmQUFFQW9RQ2pBQUVBcFFDbUFBRUFxQUN0QUFNQXNRQ3hBQUVBdWdDN0FBRUF2d0MvQUFFQXdRREJBQUVBd3dERUFBRUF4d0RIQUFFQXl3RExBQUVBelFET0FBRUEwQURSQUFFQTB3RFRBQUVBMmdEZUFBRUE0UURoQUFFQTVRRGxBQUVBNXdEcEFBRUE2d0Q3QUFFQS9RRDlBQUVBL3dFQkFBRUJBd0VEQUFFQkNBRUpBQUVCRmdFYUFBRUJIQUVjQUFFQklBRWlBQUVCSkFFbkFBTUJLZ0VyQUFFQk13RTBBQUVCTmdFMkFBRUJPd0U4QUFFQlFRRkVBQUVCUndGSUFBRUJTd0ZOQUFFQlVRRlJBQUVCVkFGWUFBRUJYUUZlQUFFQllnRmlBQUVCWkFGa0FBRUJhQUZvQUFFQmFnRnNBQUVCYmdGdUFBRUJjQUZ3QUFFQnl3SFJBQUlCNGdIMkFBRUIrZ0g2QUFFQ0F3SURBQUVDQlFJRkFBRUNEQUlPQUFFQ0VBSVJBQUVDRXdJVEFBRUNGd0lYQUFFQ0dRSWJBQUVDSVFJaEFBRUNKZ0lvQUFFQ0tnSXFBQUVDT0FJNEFBRUNPd0k3QUFFQ1BRSTlBQUVDUUFKREFBRUNid0p6QUFFQ2d3S0lBQUVDaXdMekFBRUM5Z08xQUFFRHR3TzNBQUVEdVFQREFBRUR4UVBPQUFFRDBBUHJBQUVEN3dQdkFBRUQ4UVA0QUFFRCtnUDhBQUVEL3dRREFBRUVCUVNRQUFFRWt3U1VBQUVFbGdTWEFBRUVtUVNjQUFFRXBnVUNBQUVGQkFVT0FBRUZFUVVlQUFFQUFRQURBQUFBRUFBQUFCWUFBQUFnQUFFQUFRQ3RBQUlBQVFDb0FLd0FBQUFDQUFJQXFBQ3NBQUFCSkFFbkFBVUFBUUFBQUI0QUVBQUtBQUlBTGdBMkFBSmpjSE53QURwclpYSnVBRUFBQkVSR1RGUUFPR041Y213QU9HZHlaV3NBT0d4aGRHNEFPQUFCQUFBQUFRQWlBQUlBQ0FBQ0FDNEVFQUFBQUFFQUFBQUFBQUVBQVFBT0FBQUFBUThDQUFVQUpBQklBQUQvL3dBQ0FBQUFBUUFCUzFnQUJBQUFBZXdUcUJFRUVRUVhnQkRtRnlZUlNoR0lFbG9SYkVlNkVwb1NtaFdRRWF3U21oS2FFbG9TdkNCY0dSd2ZraEdhRWNJV3pCaXFFZGdVdWhKNEVpSVJOaW13RVZRbWpoRlVFVlFUQkJJaUVYb1lSQkk4RWU0UkNoSThGUUFTSWhKYUdaSWV6QmNtRWxvWEppV1FKNUFpMWgxa0VPd1NQQkVpUGtRUlZEZStKSjRva2hJSUVQSVErRUV1RVA0VVFoUFdHaFE1c0MxeU5BNHNKQkthTUxZNzRoYk1JU29TbWhLYUZVWVNtaEthRXBveVlCcWVFcG9UZmg0R0hFQVg0aU80SE5JUlFDSUFFUW9UVkRYa1JDd1NJaFI4S3VZYktCTGVFaUlic2hNcUZuWVVEQkxlRnlZVEJCR2FFandUVkJJaUhzd1JRQmJNRVFvVmtCV1FGWkFTbWhiTUVRb1NtaEthRWxvUlFCYk1FUW9SQkM4VUVRUVJCQkVFRVJ3VjJoWW9FUllSTEJFUUVSWVJFQkZlRVJBUmlCSmFFbG9TV2hKYUg1SVhKaGNtRnlZWEpoY21GeVlYSmhHSUVXd1JiQkZzRVd3U21oS2FFcG9TbWhLYUVsb1NXaEphRWxvU1doaXFFbmdTZUJKNEVuZ1NlQko0RW5nUk5oRTJFVFlSTmhGVUV3UVRCQk1FRXdRVEJCSThFandYSmhKNEZ5WVNlQmNtRW5nUmlCR0lFWWdSaUJKYUVXd1JOaEZzRVRZUmJCRTJFV3dSTmhGc0VUWVNtaEZVRXBvU21oS2FFcG9TbWhXUUVhd1JyQkdzRWF3U21oRlVFcG9SVkJLYUVWUVJWQkphRXdRU1doTUVFbG9UQkJGNkVYb1JlaCtTSDVJZmtoSENHS29TUEJpcUVkZ1IyQkhZRVJZUkZoRWNFUkFSRUJFUUVSQVJFQkVRRVJBUkZoRVdFUllSRmhFV0VSQVJFQkVRRVJZUkxCRXNFU3dSTEJFV0VSWVJGaEVjRnlZUmJCS2FFcG9TV2hpcUZ5WVJTaEZzRWRnU21oS2FGWkFTbWhLYUVsb1N2QitTR0tvV3pCS2FHS29SVkJNRUVqd1RCQkZzSHN3U21oS2FGWkFWa0JWR0Z5WVJTaDdNRVd3U21oS2FFbG9TdkJHSUg1SVd6Qko0RVRZVEJCSWlFandSQ2hFMkVVQVNQQkhDRWNJUndoaXFFandSQkJFRUVRUVNtaEZVRnlZU2VCRnNFVFlSbWhJOEVZZ1lxaEk4RXBvV3pCRUtFcG9YSmhKNEZ5WVNlQkZzRVRZUk5oRTJGc3dSQ2hKYUV3UVRCQklpRlVZU1BCVkdFandWUmhJOEZ5WVNlQmNtRW5nWEpoSjRGeVlTZUJjbUVuZ1hKaEo0RnlZU2VCY21FbmdYSmhKNEZ5WVNlQmNtRW5nWEpoSjRFV3dSTmhGc0VUWVJiQkUyRVd3Uk5oRnNFVFlSYkJFMkVXd1JOaEZzRVRZU21oS2FFbG9UQkJKYUV3UVNXaE1FRWxvVEJCSmFFd1FTV2hNRUVsb1RCQk1FR0tvU1BCaXFFandZcWhJOEg1SWV6QkZBRVZRVGZoN01GWkFZcWhLYUVWUVhKaEo0RVd3U21oSmFFd1FSZWhGS0VpSVNXaEphRXBvUlZCV1FGWkFSckJLYUVWUVNtaEZVRWxvU3ZCSWlFWG9ma2hHYUVqd1JtaEk4RWNJUjJCSmFFUkFSRmhFUUVSd1JFQkVXRVJ3QUFrczZBQVFBQUU3YVY1WUFKZ0FsQUFBQUFBQUFBQUFBRWdBQUFBQUFBQUFBQUFBQUFBQUEvK1QvNHdBQUFBQUFFUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkVBQVAva0FCSC81UUFBQUFBQUFBQUFBQUFBQVAvckFBQUFBQUFBQUFBQUFQL3RBQUQvMWYvbEFBQUFBUC9xQUFBQUFBQUFBQUFBQUFBQS8rbi9tdi8xLytvQUFBQUFBQUQvNFFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvOVFBQUFBRC85UUFBLy9ULzlmL09BQUQvNy8raS8zLy84ZitJQUFBQUFQL0VBQUFBQVAvSC83c0FBQUFBQUFEL3FRQUFBQUFBREFBUkFBRC95UUFTLzQ4QUFQL2RBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvL0VBQUFBQUFBQUFBQUFBLzcwQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvdEFBQUFBQUFBQUFBQUFQL3QvKy8vNWdBQUFBQUFBQUFVQUFBQUFBQUFBQUQvOEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvN1FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvekFBQUFBQUFBQUFBQUFQL3lBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS8vRUFBQUFBQUFBQUFBQUEvM2dBQUFBQUFBRC82d0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC93QUFBQUFBQUEvL0FBQUFBQUFBQUFBUC96QUFBQUFBQUFBQUQvOGYveEFBQUFBQUFBQUFBQUFBQUFBQUFBRHdBQUFBQUFBQUFBQUFBQUFBQUFBQUQvbFFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvMXdBQUFBQUFBQUFBQUFBQUFBQUEvK29BQUFBQUFBQUFBQUFBLytzQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS81Z0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzZnQUFBQUQvN2dBQUFBQUFBUC9zQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC84Z0FBQUFBQUFBQUFBQUFBQUFBQUFBRC83QUFBQUFBQUFQKy9BQUFBQVAvQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL1lBQUQvdi8vai85ai9vdi9MLzdmL3YvL1ovK3ovcS8rZ0FCSUFFUUFBQUFBQURmL0dBQUQvNmYvdy8vTUFFUUFBL3kzLzd3QVMvOHdBQVAvaUFBQUFBQUFBQUFBQUFQK2cvL01BQVAvbS8rSC82UUFBLytjQUFQL2wvK24vMkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvd0FBQUFBQUFBQUFBQUFBQUFQK2pBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvMUFBQUFBQUFBQUFBQUFQL2pBQUFBQUFBQS8vRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC84UUFBQUFBQUFQL3lBQUFBQUFBQUFBRC94UUFBLyt6L2lBQUEvODcvd3dBQUFBQUFBQUFBQUFBQUFBQUEvNVVBQVArd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL2pBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLytiLzV3QUFBQUQvNXdBQS8rdi82Ly9oQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEdi9TQUFBQUFBQVJBQUFBQUFBUi85RUFBQUFBQUFEL25mL2svNVAvc2YrNS80Ly9uZitoLzdqL3J3QUFBQkFBRUFBQUFBQUFBUCtNQUFEL3MvL3cvL0VBRHdBQS95Yi83UUFRL3hqL3ZQL0UvOHNBQUFBQS8zNy9mUDhRLy9FQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC85UUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC82d0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvN0FBQUFBQUFBQUFBQUFELzdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVA5RS83My9NLzgrQUFEL0xQOUUvMHYvY2dBQUFBQUFCd0FIQUFBQUFBQUEveWNBQVA5cS85RUFBQUFGQUFEK2VnQUFBQWYrWWdBQS80Yi9rZ0FBQUFEL0QvOE1BQUFBQUFBQUFBRC92d0FBQUJQLzhnQUFBQUQvMVA5N0FCUC95djhSL3UzLzJnQUFBQUFBQVA4L0FBQUFBUDg3LzNFQUFBQUFBQUQvVVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVArUkFBRC80UUFBQUFELzFmL24vOS8vNGYvdEFBRC95d0FBQUFBQURnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvNFVBQUFBQS84UUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC9yLytZQUFBQU4vK3dBQVAvci8rMy81UUFOQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVA5V0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFELzdRQUFBQUFBQUFBQS85ai83QUFBQUJJQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS80VUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL1UvL01BQVArMS85bi8wdi9TLytULzlmKzBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC9Id0FBQUFELzJ3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU5BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC92QUFBQUFBQUFBQUFBQUFBQUFBQUFBUC9zQUFBQUFBQUEvN1FBQUFBQS83c0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvOVVBQVAvd0FBQUFBQUFBQUFBQUFQL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUCt0L3ZVQUFQL0EvL0FBQUFBQS84a0FBQUFBQUFBQUFBQUFBQUQveUFBQUFBQUFBUC8xLyt2LzV3QUFBQUFBQUFBQUFBRC92Zi9wLzVyL3BRQUEvNUgvdlFBQUFBQUFBQUFBQUJJQUVnQUFBQUFBQVAvU0FBQUFBQUFBQUFBQUFBQUEvbTBBQUFBQS80a0FBQUFBLzhvQUFBQUEvN3YvNlFBQUFBQUFBUC9zQUFBQUFBQUFBQUFBQVAvc0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvMkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC9kQUFBQUFBQUFBQUFBQVA5NUFBQUFBQUFBLy9VQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQS85a0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvOG4vNVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC9vQUFBQUFBQUFBQUQvOHdBQUFBQUFBQUFBQUFBQUFQL3pBQUFBQVA5MkFBRC85Zi96QUFBQUQvL0dBQUFBQUFBQUFBQUFBUC9oQUFBQUFBQUFBQUFBQUFBQS8rYit2QUFBQUFBQUFBQUFBQUQveVFBQUFBRC8yUUFBL3pnQUFBQUJBUG9BQ0FBS0FCUUFGUUFXQUJjQUdBQVpBQm9BR3dBY0FCMEFKUUFtQUNjQUtBQXBBQ29BS3dBc0FDMEFMZ0F2QURBQU1RQXlBRE1BTkFBMUFEWUFOd0E0QURrQU9nQTdBRHdBUFFBK0FHVUFad0NCQUlNQWhBQ01BSThBa1FDVEFMRUFzZ0N6QUxRQXRRQzJBTGNBdUFDNUFMb0EwZ0RUQU5RQTFRRFdBTmNBMkFEWkFOb0Eyd0RjQU4wQTNnRGZBT0FBNFFEaUFPTUE1QURsQU9ZQTV3RG9BT2tCTHdFekFUVUJOd0U1QVRzQlFRRkRBVVVCU1FGTEFVd0JXQUZaQWFjQnJRR3lBYlVDaXdLTUFvNENrQUtSQXBJQ2t3S1VBcFVDbGdLWEFwZ0NtUUthQXBzQ25BS2RBcDRDbndLZ0FxRUNvZ0tqQXFRQ3BRS21BcWNDcUFLcEFxb0N4d0xKQXNzQ3pRTFBBdEVDMHdMVkF0Y0MyUUxiQXQwQzN3TGhBdU1DNVFMbkF1a0M2d0x0QXU4QzhRTHpBdlFDOWdMNEF2b0MvQUwrQXdBREFnTUVBd1lEQ1FNTEF3MEREd01SQXhNREZRTVhBeGtER3dNZEF4OERJUU1qQXlVREp3TXBBeXNETFFNdkF6RURNd00xQXpZRE9BTTZBendEUGdPWEE1Z0RtUU9hQTVzRG5BT2RBNThEb0FPaEE2SURvd09rQTZVRHBnT25BNmdEcVFPcUE2c0RyQU90QTY0RHZnTy9BOEFEd1FQQ0E4TUR4QVBGQThZRHh3UElBOGtEeWdQTEE4d0R6UVBPQTg4RDBBUFJBOUlEMHdQa0ErWUQ2QVBxQS84RUFRUURCQmdFSGdRa0JJNEVrd1NYQlJnRkdnQUJBQlAvSUFBQkFNUUFEZ0FCQVBiLzFRQUJBTW9BQ3dBQkFQYi8yQUFCQUZzQUN3QUJBUnovOFFBQkFlYi94d0FCQWViLzhRQUJBZVlBRFFBQ0FNci83UUQyLzhBQUFnSG0vN2NCNi8vd0FBSUE5di8xQVlYL3NBQUNBTzMveVFFYy8rNEFBZ0VSQUFzQmJQL21BQUlBOXYvQUFZWC9zQUFEQWVYLzlRSG0vKzREa2YvMUFBTUFTdi91QUZ2LzZnSG0vL0FBQXdCS0FBOEFXQUF5QUZzQUVRQUVBQTMvNWdCQi8vUUFZZi92QVUzLzdRQUVBQTBBRkFCQkFCRUFWdi9pQUdFQUV3QUZBRnYvcEFIbS8xUUI2Ly94QWZYLzhRSkIvL01BQlFBTkFBOEFRUUFNQUZiLzZ3QmhBQTRDUWYvcEFBVUFXLy9sQUxqL3l3RE4vK1FCOWYvckFrSC83UUFHQUJEL2hBQVMvNFFCaHYrRUFZci9oQUdPLzRRQmovK0VBQVlBeXYvcUFPMy83Z0QyLzZzQS9nQUFBVHIvN0FGdC8rd0FCZ0RLLytvQTdmL3VBUGIvc0FEK0FBQUJPdi9zQVczLzdBQUhBRW9BRFFDKy8vVUF4Z0FMQU1mLzZnREtBQXdBN2YvSUFSei84UUFIQUlILzN3QzEvL01BdC8vd0FNVC82Z0RaLzk4QTV2L2dBV3ovNEFBSUFQYi84QUQrQUFBQkNmL3hBU0QvOHdFNi8vRUJZLy96QVdYLzZRRnQvOU1BQ0FEWkFCVUE3UUFWQVVuLzVBRksvK1VCVFAva0FXTC80d0ZrLytJQmJQL2tBQWdBV0FBT0FJSC9ud0MrLy9VQXhQL2VBTWYvNVFEWi82Z0E3Zi9LQVYvLzR3QUpBUGIvdWdEK0FBQUJDZi9QQVNELzJ3RTYvMUFCU3YrZEFXUC84QUZsLy9JQmJmOU1BQWtBeXYvcUFPMy91QUQyLytvQkNmL3dBU0QvOFFFNi8rc0JZLy8xQVczLzdBR0YvN0FBQ2dBRy85WUFDLy9XQVlULzFnR0YvOVlCaC8vV0FZai8xZ0dKLzlZRDdQL1dBKzMvMWdQdy85WUFDZ0FHLy9VQUMvLzFBWVQvOVFHRi8vVUJoLy8xQVlqLzlRR0ovL1VEN1AvMUErMy85UVB3Ly9VQUNnRG0vOE1BOXYvUEFQNEFBQUU2Lzg0QlNmL25BVXovM3dGaS85RUJaUC9zQVd6L29BRnQvOUVBQ3dBNC85Z0Ewdi9ZQU5iLzJBRTUvOWdCUmYvWUF4Ly8yQU1oLzlnREkvL1lBOUwvMkFTSS85Z0UwUC9ZQUEwQVhQL3lBRjcvOGdEdS8vSUJOUC95QVVULzhnRmUvL0lETi8veUF6bi84Z003Ly9JRDIvL3lCQWYvOGdRVi8vSUUydi95QUEwQTl2KzZBUG4vMlFEK0FBQUJDZi9QQVNELzJ3RTYvMUFCU1AvWkFVci9uUUZqLy9BQlpmL3lBVzMvVEFRci85a0VpLy9aQUE0QVhQL3RBRjcvN1FEdS8rMEE5ditxQVRULzdRRkUvKzBCWHYvdEF6Zi83UU01LyswRE8vL3RBOXYvN1FRSC8rMEVGZi90Qk5yLzdRQVBBTzBBRkFEeUFCQUE5di93QVBuLzhBRCtBQUFCQVFBTUFRUUFFQUU2Ly9BQlNQL3dBVXIvNWdGUkFCQUJiZi93QVhBQUVBUXIvL0FFaS8vd0FCRUFMdi91QURuLzdnS20vKzRDcC8vdUFxai83Z0twLys0Qzl2L3VBeVgvN2dNbi8rNERLZi91QXl2LzdnTXQvKzRETC8vdUE4UC83Z1J6Lys0RWRmL3VCTkwvN2dBUkFDNy83QUE1Lyt3Q3B2L3NBcWYvN0FLby8rd0NxZi9zQXZiLzdBTWwvK3dESi8vc0F5bi83QU1yLyt3RExmL3NBeS8vN0FQRC8rd0VjLy9zQkhYLzdBVFMvK3dBRWdEWi82NEE1Z0FTQU92LzRBRHQvNjBBNy8vV0FQMy8zd0VCLzlJQkIvL2dBUnovemdFdS85MEJNUC9pQVRqLzRBRkEvK0FCU3YvcEFVMy8yZ0ZmLzcwQmFmL2ZBV3dBRVFBU0FGdi93UUM0LzhVQXl2KzBBT3IvMXdEMi83a0Evdi9wQVFuL3NnRWMvOUlCSVAvSUFUci9vQUZLLzhVQldQL2tBV1AvekFGbC84d0JiZi9MQVc3Lzd3SDEvK1lDUWYvb0FCTUI0Ly91QWVYLzlRSG0vL0VCNlAveUFnVC84Z0lJLy9JQ0lQL3lBaUwvN2dJay8vSURYZi91QTRuLzhnT1IvL1VEa3YvdUE1UC83Z1RoLys0RTcvL3VCUEwvN2dVRy8vSUZDLy91QUJNQjQvL2xBZVgvOFFIbS8rc0I2UC9wQWdULzZRSUkvK2tDSVAvcEFpTC81UUlrLytrRFhmL2xBNG4vNlFPUi8vRURrdi9sQTVQLzVRVGgvK1VFNy8vbEJQTC81UVVHLytrRkMvL2xBQlVBWFAvMUFPNy85UUQyLzdvQStmL1pBUDRBQUFFSi84OEJJUC9iQVRULzlRRTYvMUFCUlAvMUFVai8yUUZLLzUwQlh2LzFBV1AvOEFGbC8vSUJiZjlNQTl2LzlRUUgvL1VFRmYvMUJDdi8yUVNMLzlrQUZnQzQvOVFBdnYvd0FNTC83UURFQUJFQXl2L2dBTXovNXdETi8rVUF6di91QU5rQUVnRHEvK2tBOXYvWEFUci8xd0ZLLzlNQlRQL1dBVTMveFFGWS8rY0JZZ0FOQVdRQURBRnQvOVlCYnYveUFldi82UUpCLytrQUZnQWovOE1BV1AvdkFGdi8zd0NhLys0QXVQL2xBTG4vMFFERUFCRUF5di9JQU5rQUV3RG0vOFVBOXYvS0FUci9ud0ZKLzFFQlN2OTdBVXoveWdGTi85MEJXUC95QVdML2RRRmsvOG9CYlA5UEFXMy9qQUhtLzgwQUdBQTZBQlFBT3dBU0FEMEFGZ0VaQUJRQ3FnQVdBekVBRWdNekFCWUROUUFXQTV3QUZnT3JBQllEcmdBV0ErUUFFZ1BtQUJJRDZBQVNBK29BRmdQN0FCUUVBd0FXQklFQUZnU0RBQllFaFFBV0JKY0FGZ1RUQUJRRTFRQVVCTmNBRWdBWUFEai82d0E5Ly9NQTB2L3JBTmIvNndFNS8rc0JSZi9yQXFyLzh3TWYvK3NESWYvckF5UC82d016Ly9NRE5mL3pBNXovOHdPci8vTURydi96QTlMLzZ3UHEvL01FQS8vekJJSC84d1NELy9NRWhmL3pCSWovNndTWC8vTUUwUC9yQUJrQVUvL3NBUmovN0FHRkFBQUN2UC9zQXIzLzdBSysvK3dDdi8vc0FzRC83QU1LLyt3RERQL3NBdzcvN0FPMS8rd0R1Ly9zQTlmLzdBUWQvK3dFSWYvc0JGei83QVJlLyt3RVlQL3NCR0wvN0FSay8rd0Vadi9zQkdqLzdBUncvK3dFc2Yvc0FCd0FDdi9pQUEwQUZBQU8vODhBUVFBU0FFci82Z0JXLzlnQVdQL3FBR0VBRXdCdC82NEFmUC9OQUlIL29BQ0cvOEVBaWYvQUFMai8wQUM4LytvQXZ2L3VBTC8veGdEQUFBMEF3di9wQU1QLzFnREcvK2dBeC8rNkFNci82UURNLzhzQXpmL2FBTTcveHdHTi85TUNRZi9OQUIwQU9QK3dBRHIvN1FBOS85QUEwdit3QU5iL3NBRVovKzBCT2Yrd0FVWC9zQUtxLzlBREgvK3dBeUgvc0FNai83QURNLy9RQXpYLzBBT2MvOUFEcS8vUUE2Ny8wQVBTLzdBRDZ2L1FBL3YvN1FRRC85QUVnZi9RQklQLzBBU0YvOUFFaVArd0JKZi8wQVRRLzdBRTAvL3RCTlgvN1FBZ0FBYi84Z0FMLy9JQVd2L3pBRjMvOHdDOS8vTUE5di8xQVJyLzh3R0UvL0lCaGYveUFZZi84Z0dJLy9JQmlmL3lBc1gvOHdMRy8vTUROUC96QTdmLzh3UGEvL01ENC8vekErdi84d1BzLy9JRDdmL3lBL0QvOGdQOC8vTUVCUC96QkNYLzh3UW4vL01FS2YvekJJTC84d1NFLy9NRWh2L3pCTlQvOHdUVy8vTUFJZ0JhLy9RQVhQL3lBRjMvOUFCZS8vTUF2Zi8wQU83LzhnRWEvL1FCTlAveUFVVC84Z0ZlLy9JQ3hmLzBBc2IvOUFNMC8vUUROLy96QXpuLzh3TTcvL01EdC8vMEE5ci85QVBiLy9JRDQvLzBBK3YvOUFQOC8vUUVCUC8wQkFmLzhnUVYvL0lFSmYvMEJDZi85QVFwLy9RRWd2LzBCSVQvOUFTRy8vUUUxUC8wQk5iLzlBVGEvL01BSWdBRy84QUFDLy9BQURyL3lBRGUvK3NBNGYvbkFPYi93d0QyLzg4QS9nQUFBUm4veUFFNi84NEJSLy9uQVVuLzV3Rk0vOThCWXYvUkFXVC83QUZzLzZBQmJmL1JBWVQvd0FHRi84QUJoLy9BQVlqL3dBR0ovOEFEeHYvckErei93QVB0LzhBRDhQL0FBL3YveUFRay8rc0VKdi9yQkNqLzZ3UXEvK2NFaXYvbkJOUC95QVRWLzhnQUlnQmEvOTBBWGYvZEFMMy8zUUQyLzdvQStmL1pBUDRBQUFFSi84OEJHdi9kQVNELzJ3RTYvMUFCU1AvWkFVci9uUUZqLy9BQlpmL3lBVzMvVEFMRi85MEN4di9kQXpULzNRTzMvOTBEMnYvZEErUC8zUVByLzkwRC9QL2RCQVQvM1FRbC85MEVKLy9kQkNuLzNRUXIvOWtFZ3YvZEJJVC8zUVNHLzkwRWkvL1pCTlQvM1FUVy85MEFJd0JhLy9RQVhQL3dBRjMvOUFDOS8vUUE3Zi92QU83LzhBRHkvL01BL2dBQUFRVC84d0VhLy9RQk5QL3dBVVQvOEFGUi8vTUJYdi93QVhELzh3TEYvL1FDeHYvMEF6VC85QU8zLy9RRDJ2LzBBOXYvOEFQai8vUUQ2Ly8wQS96LzlBUUUvL1FFQi8vd0JCWC84QVFsLy9RRUovLzBCQ24vOUFTQy8vUUVoUC8wQkliLzlBVFUvL1FFMXYvMEFDUUFPUC9pQUR6LzVBRFMvK0lBMVAva0FOYi80Z0RaLytFQTJ2L2tBTjMvNUFEZS8ra0E3Zi9rQVBMLzZ3RUUvK3NCTS8va0FUbi80Z0ZELytRQlJmL2lBVkQvNUFGUi8rc0JYZi9rQVdiLzVBRnYvK1FCY1AvckF4Ly80Z01oLytJREkvL2lBNnovNUFQRy8ra0Qwdi9pQTlQLzVBUUcvK1FFRlAva0JDVC82UVFtLytrRUtQL3BCSWovNGdUUS8rSUFKQUFHLy9JQUMvL3lBRnIvOVFCZC8vVUF2Zi8xQVBiLzlBRCtBQUFCQ2YvMUFSci85UUU2Ly9VQmJmLzFBWVQvOGdHRi8vSUJoLy95QVlqLzhnR0ovL0lDeGYvMUFzYi85UU0wLy9VRHQvLzFBOXIvOVFQai8vVUQ2Ly8xQSt6LzhnUHQvL0lEOFAveUEvei85UVFFLy9VRUpmLzFCQ2YvOVFRcC8vVUVndi8xQklULzlRU0cvL1VFMVAvMUJOYi85UUFvQUJEL0hnQVMveDRBSmYvTkFMTC96UUMwLzgwQXgvL3lBUTMvelFHRy94NEJpdjhlQVk3L0hnR1AveDRDa1AvTkFwSC96UUtTLzgwQ2svL05BcFQvelFLVi84MENsdi9OQXNmL3pRTEovODBDeS8vTkE1Zi96UU9mLzgwRHgvL05BL1AvelFRSi84MEVDLy9OQkMvL3pRUXgvODBFTS8vTkJEWC96UVEzLzgwRU9mL05CRHYvelFROS84MEVQLy9OQkVIL3pRUkQvODBFUmYvTkJLci96UUF4QURqLzR3QTgvK1VBUGYva0FOTC80d0RVLytVQTF2L2pBTm4vNGdEYS8rVUEzZi9sQU43LzZRRHkvK29CQlAvcUFUUC81UUU1LytNQlEvL2xBVVgvNHdGUS8rVUJVZi9xQVYzLzVRRm0vK1VCYlAva0FXLy81UUZ3LytvQ3F2L2tBeC8vNHdNaC8rTURJLy9qQXpQLzVBTTEvK1FEblAva0E2di81QU9zLytVRHJ2L2tBOGIvNlFQUy8rTUQwLy9sQStyLzVBUUQvK1FFQnYvbEJCVC81UVFrLytrRUp2L3BCQ2ovNlFTQi8rUUVnLy9rQklYLzVBU0kvK01FbC8va0JORC80d0F4QUZiL2JRQmIvNHdBYmYyL0FIeitmUUNCL3J3QWh2OHJBSW4vU3dDNC8yRUF2ditQQUwvL0R3REQvdWdBeHY4ZkFNZis1UURLLzBZQXpQN3RBTTMrL1FETy90a0EyZjlTQU9ZQUJRRHEvNzBBNi85SkFPMysvZ0R2L3hNQTl2OW9BUDMvRGdEKy96TUEvLzhUQVFIL0J3RUNBQUFCQi84T0FRbi9FUUVjL3p3QklQK3NBUzcvRlFFdy96d0JPUDhPQVRyL2FnRkEvMGtCU3Y4TUFVei9Qd0ZOL3ZFQldQL0FBVi8rN3dGai96RUJaZjlmQVduL0NnRnNBQVVCYmY4d0FXNy8xUUF5QUFULzJBQlcvN1VBVy8vSEFHMyt1QUI4L3lnQWdmOU5BSWIvamdDSi82RUF1UCt1QUw3L3lRQy8vMzRBdy85bkFNYi9od0RILzJVQXl2K2VBTXovYWdETi8zTUF6djllQU5uL3BRRG1BQThBNnYva0FPdi9vQUR0LzNRQTcvK0FBUGIvc2dEOS8zMEEvditUQVAvL2dBRUIvM2tCQWdBQUFRZi9mUUVKLzM4QkhQK1lBU0QvMmdFdS80RUJNUCtZQVRqL2ZRRTYvN01CUVArZ0FVci9mQUZNLzVvQlRmOXNBVmovNWdGZi8yc0JZLytTQVdYL3JRRnAvM3NCYkFBUEFXMy9rUUZ1Ly9JQU13QTQvOVVBT3Yva0FEdi83QUE5LzkwQTB2L1ZBTmIvMVFFWi8rUUJPZi9WQVVYLzFRSDdBQTRCL1FBT0FrTUFEZ0txLzkwREgvL1ZBeUgvMVFNai85VURNZi9zQXpQLzNRTTEvOTBEUXdBT0EwUUFEZ05GQUE0RFJnQU9BMGNBRGdOSUFBNERTUUFPQTE0QURnTmZBQTREWUFBT0E1ei8zUU9yLzkwRHJ2L2RBOUwvMVFQay8rd0Q1di9zQStqLzdBUHEvOTBEKy8va0JBUC8zUVNCLzkwRWcvL2RCSVgvM1FTSS85VUVsLy9kQk5ELzFRVFQvK1FFMWYva0JOZi83QVRjQUE0RTR3QU9CUHNBRGdBMUFCdi84Z0E0Ly9FQU92LzBBRHovOUFBOS8vQUEwdi94QU5ULzlRRFcvL0VBMnYvMEFOMy85UURlLy9NQTV2L3hBUm4vOUFFei8vUUJPZi94QVVQLzlBRkYvL0VCVVAvMUFWMy85QUZpLy9JQlpQL3lBV2IvOVFGcy8vSUJiLy8xQXFyLzhBTWYvL0VESWYveEF5UC84UU16Ly9BRE5mL3dBNXovOEFPci8vQURyUC8wQTY3LzhBUEcvL01EMHYveEE5UC85QVBxLy9BRCsvLzBCQVAvOEFRRy8vUUVGUC8wQkNULzh3UW0vL01FS1AvekJJSC84QVNELy9BRWhmL3dCSWovOFFTWC8vQUUwUC94Qk5QLzlBVFYvL1FBTlFCUkFBQUFVZ0FBQUZRQUFBREJBQUFBN0FBQUFPMEFGQUR3QUFBQThRQUFBUE1BQUFEMEFBQUE5UUFBQVBiLzdRRDRBQUFBK2YvdEFQb0FBQUQ3QUFBQS9QL2lBUDRBQUFFQUFBQUJCUUFBQVNzQUFBRTJBQUFCT3YvdEFUd0FBQUUrQUFBQlNQL3RBVXIvN1FGVEFBQUJWUUFBQVZjQUFBRmNBQUFCYmYvdEFyc0FBQU1EQUFBREJRQUFBd2NBQUFNSUFBQURzUUFBQTlZQUFBUFlBQUFEM1FBQUErSUFBQVB5QUFBRCtBQUFCQmtBQUFRYkFBQUVLLy90QkMwQUFBU0wvKzBFalFBQUJLa0FBQVRHQUFBRXlBQUFBRGdBSmYva0FEei8wZ0E5LzlNQXN2L2tBTFQvNUFERS8rSUEydi9TQVEzLzVBRXovOUlCUS8vU0FWMy8wZ0tRLytRQ2tmL2tBcEwvNUFLVC8rUUNsUC9rQXBYLzVBS1cvK1FDcXYvVEFzZi81QUxKLytRQ3kvL2tBelAvMHdNMS85TURsLy9rQTV6LzB3T2YvK1FEcS8vVEE2ei8wZ091LzlNRHgvL2tBOVAvMGdQcS85TUQ4Ly9rQkFQLzB3UUcvOUlFQ2Yva0JBdi81QVFVLzlJRUwvL2tCREgvNUFRei8rUUVOZi9rQkRmLzVBUTUvK1FFTy8va0JEMy81QVEvLytRRVFmL2tCRVAvNUFSRi8rUUVnZi9UQklQLzB3U0YvOU1FbC8vVEJLci81QUE1QUZILzd3QlMvKzhBVlAvdkFGei84QURCLys4QTdQL3ZBTzMvN2dEdS8vQUE4UC92QVBILzd3RHovKzhBOVAvdkFQWC83d0QyLys0QStQL3ZBUHIvN3dENy8rOEEvdi92QVFELzd3RUYvKzhCQ2YvMEFTRC84UUVyLys4Qk5QL3dBVGIvN3dFNi8rOEJQUC92QVQ3Lzd3RkUvL0FCVS8vdkFWWC83d0ZYLys4QlhQL3ZBVjcvOEFGdC8rOEN1Ly92QXdQLzd3TUYvKzhEQi8vdkF3ai83d094Lys4RDF2L3ZBOWovN3dQYi8vQUQzZi92QStMLzd3UHkvKzhEK1AvdkJBZi84QVFWLy9BRUdmL3ZCQnYvN3dRdC8rOEVqZi92QktuLzd3VEcvKzhFeVAvdkFEd0FCditnQUF2L29BQksvK2tBV2YveEFGci94UUJkLzhVQW0vL3hBTDMveFFEQy8rNEF4QUFRQU1iLzdBREsveUFBeS8veEFSci94UUdFLzZBQmhmK2dBWWYvb0FHSS82QUJpZitnQXNILzhRTEMvL0VDdy8veEFzVC84UUxGLzhVQ3h2L0ZBeWIvOFFNby8vRURLdi94QXl6LzhRTXUvL0VETVAveEF6VC94UU96Ly9FRHQvL0ZBN3IvOFFPOC8vRUQydi9GQStQL3hRUHIvOFVEN1ArZ0ErMy9vQVB3LzZBRC9QL0ZCQVQveFFRbC84VUVKLy9GQkNuL3hRUjAvL0VFZHYveEJIai84UVI2Ly9FRWZQL3hCSDcvOFFTQS8vRUVndi9GQklUL3hRU0cvOFVFdGYveEJOVC94UVRXLzhVQVB3QW4vL01BSy8vekFEUC84d0ExLy9NQWcvL3pBSlAvOHdDWS8vTUFzLy96QU1RQURRRFQvL01CQ1AvekFSZi84d0ViLy9NQkhmL3pBUi8vOHdFaC8vTUJRZi96QVdyLzh3SlYvL01DVnYvekFsai84d0paLy9NQ2wvL3pBcUgvOHdLaS8vTUNvLy96QXFULzh3S2wvL01DemYvekFzLy84d0xSLy9NQzAvL3pBdUgvOHdMai8vTUM1Zi96QXVmLzh3TUovL01EQy8vekF3My84d00rLy9NRG0vL3pBNmovOHdQTy8vTUQwZi96QS83Lzh3UUIvL01FSFAvekJCNy84d1FnLy9NRVcvL3pCRjMvOHdSZi8vTUVZZi96QkdQLzh3UmwvL01FWi8vekJHbi84d1JyLy9NRWJmL3pCRy8vOHdSeC8vTUVzUC96Qk1uLzh3QkFBRWYvN0FCSS8rd0FTZi9zQUV2LzdBQlYvK3dBbFAvc0FKbi83QUM3Lyt3QXlQL3NBTW4vN0FEMy8rd0JBLy9zQVI3LzdBRWkvK3dCUXYvc0FXRC83QUZoLyt3QmEvL3NBckwvN0FLei8rd0N0UC9zQXJYLzdBSzIvK3dDenYvc0F0RC83QUxTLyt3QzFQL3NBdGIvN0FMWS8rd0Mydi9zQXR6LzdBTGUvK3dDNFAvc0F1TC83QUxrLyt3QzV2L3NBdWovN0FPdi8rd0QxZi9zQTluLzdBUGMvK3dEOS8vc0EvMy83QVFDLyt3RUVQL3NCQkwvN0FRVC8rd0VILy9zQkM3LzdBUkkvK3dFU3Yvc0JFei83QVJPLyt3RVVQL3NCRkwvN0FSVS8rd0VWdi9zQkdyLzdBUnMvK3dFYnYvc0JITC83QVN0Lyt3RXV2L3NCTHovN0FCQUFDZi81Z0FyLytZQU0vL21BRFgvNWdDRC8rWUFrLy9tQUpqLzVnQ3ovK1lBdVAvQ0FNUUFFQURULytZQkNQL21BUmYvNWdFYi8rWUJIZi9tQVIvLzVnRWgvK1lCUWYvbUFXci81Z0pWLytZQ1Z2L21BbGovNWdKWi8rWUNsLy9tQXFILzVnS2kvK1lDby8vbUFxVC81Z0tsLytZQ3pmL21Bcy8vNWdMUi8rWUMwLy9tQXVILzVnTGovK1lDNWYvbUF1Zi81Z01KLytZREMvL21BdzMvNWdNKy8rWURtLy9tQTZqLzVnUE8vK1lEMGYvbUEvNy81Z1FCLytZRUhQL21CQjcvNWdRZy8rWUVXLy9tQkYzLzVnUmYvK1lFWWYvbUJHUC81Z1JsLytZRVovL21CR24vNWdSci8rWUViZi9tQkcvLzVnUngvK1lFc1AvbUJNbi81Z0JIQUJBQUFBQVNBQUFBUi8vbkFFai81d0JKLytjQVMvL25BRlgvNXdDVS8rY0FtZi9uQUx2LzV3REVBQThBeVAvbkFNbi81d0QzLytjQkEvL25BUjcvNXdFaS8rY0JRdi9uQVdELzV3RmgvK2NCYS8vbkFZWUFBQUdLQUFBQmpnQUFBWThBQUFLeS8rY0NzLy9uQXJULzV3SzEvK2NDdHYvbkFzNy81d0xRLytjQzB2L25BdFQvNXdMVy8rY0MyUC9uQXRyLzV3TGMvK2NDM3YvbkF1RC81d0xpLytjQzVQL25BdWIvNXdMby8rY0RyLy9uQTlYLzV3UFovK2NEM1AvbkEvZi81d1A5LytjRUF2L25CQkQvNXdRUy8rY0VFLy9uQkIvLzV3UXUvK2NFU1AvbkJFci81d1JNLytjRVR2L25CRkQvNXdSUy8rY0VWUC9uQkZiLzV3UnEvK2NFYlAvbkJHNy81d1J5LytjRXJmL25CTHIvNXdTOC8rY0FUUUFHQUJBQUN3QVFBQTBBRkFCQkFCSUFSLy9vQUVqLzZBQkovK2dBUy8vb0FGWC82QUJoQUJNQWxQL29BSm4vNkFDNy8rZ0F5UC9vQU1uLzZBRDMvK2dCQS8vb0FSNy82QUVpLytnQlF2L29BV0QvNkFGaC8rZ0JhLy9vQVlRQUVBR0ZBQkFCaHdBUUFZZ0FFQUdKQUJBQ3N2L29BclAvNkFLMC8rZ0N0Zi9vQXJiLzZBTE8vK2dDMFAvb0F0TC82QUxVLytnQzF2L29BdGovNkFMYS8rZ0MzUC9vQXQ3LzZBTGcvK2dDNHYvb0F1VC82QUxtLytnQzZQL29BNi8vNkFQVi8rZ0QyZi9vQTl6LzZBUHNBQkFEN1FBUUEvQUFFQVAzLytnRC9mL29CQUwvNkFRUS8rZ0VFdi9vQkJQLzZBUWYvK2dFTHYvb0JFai82QVJLLytnRVRQL29CRTcvNkFSUS8rZ0VVdi9vQkZULzZBUlcvK2dFYXYvb0JHei82QVJ1LytnRWN2L29CSzMvNkFTNi8rZ0V2UC9vQUU4QVJ3QU1BRWdBREFCSkFBd0FTd0FNQUZVQURBQ1VBQXdBbVFBTUFMc0FEQURJQUF3QXlRQU1BTzBBT2dEeUFCZ0E5di9qQVBjQURBRDUvL2NBL0FBQUFQNEFBQUVEQUF3QkJBQVlBUjRBREFFaUFBd0JPdi9pQVVJQURBRkkvL2NCU3YvakFWRUFHQUZnQUF3QllRQU1BV3NBREFGdC8rTUJjQUFZQXJJQURBS3pBQXdDdEFBTUFyVUFEQUsyQUF3Q3pnQU1BdEFBREFMU0FBd0MxQUFNQXRZQURBTFlBQXdDMmdBTUF0d0FEQUxlQUF3QzRBQU1BdUlBREFMa0FBd0M1Z0FNQXVnQURBT3ZBQXdEMVFBTUE5a0FEQVBjQUF3RDl3QU1BLzBBREFRQ0FBd0VFQUFNQkJJQURBUVRBQXdFSHdBTUJDdi85d1F1QUF3RVNBQU1CRW9BREFSTUFBd0VUZ0FNQkZBQURBUlNBQXdFVkFBTUJGWUFEQVJxQUF3RWJBQU1CRzRBREFSeUFBd0VpLy8zQkswQURBUzZBQXdFdkFBTUFGTUFPUCsrQUZFQUFBQlNBQUFBVkFBQUFGci83d0JkLys4QXZmL3ZBTUVBQUFEUy83NEExdisrQU9iL3lRRHNBQUFBOEFBQUFQRUFBQUR6QUFBQTlBQUFBUFVBQUFEMi85OEErQUFBQVBvQUFBRDdBQUFBL2dBQUFRQUFBQUVGQUFBQkNmL3RBUnIvN3dFZy8rc0JLd0FBQVRZQUFBRTUvNzRCT3YvZkFUd0FBQUUrQUFBQlJmKytBVXovNlFGVEFBQUJWUUFBQVZjQUFBRmNBQUFCWS8vMUFXMy80QUs3QUFBQ3hmL3ZBc2IvN3dNREFBQURCUUFBQXdjQUFBTUlBQUFESC8rK0F5SC92Z01qLzc0RE5QL3ZBN0VBQUFPMy8rOEQwdisrQTlZQUFBUFlBQUFEMnYvdkE5MEFBQVBpQUFBRDQvL3ZBK3YvN3dQeUFBQUQrQUFBQS96Lzd3UUUvKzhFR1FBQUJCc0FBQVFsLys4RUovL3ZCQ24vN3dRdEFBQUVndi92QklULzd3U0cvKzhFaVArK0JJMEFBQVNwQUFBRXhnQUFCTWdBQUFUUS83NEUxUC92Qk5iLzd3Qm9BRGorOVFBNi84Z0FQUC93QUQzL3JRQlJBQUFBVWdBQUFGUUFBQURCQUFBQTB2NzFBTlQvOVFEVy92VUEydi93QU4zLzlRRGUvK3NBNGYvbkFPYi93d0RzQUFBQThBQUFBUEVBQUFEekFBQUE5QUFBQVBVQUFBRDIvODhBK0FBQUFQb0FBQUQ3QUFBQS9nQUFBUUFBQUFFRkFBQUJHZi9JQVNzQUFBRXovL0FCTmdBQUFUbis5UUU2Lzg0QlBBQUFBVDRBQUFGRC8vQUJSZjcxQVVmLzV3RkovK2NCVFAvZkFWRC85UUZUQUFBQlZRQUFBVmNBQUFGY0FBQUJYZi93QVdMLzBRRmsvK3dCWnYvMUFXei9vQUZ0LzlFQmIvLzFBcXIvclFLN0FBQURBd0FBQXdVQUFBTUhBQUFEQ0FBQUF4Lys5UU1oL3ZVREkvNzFBelAvclFNMS82MERuUCt0QTZ2L3JRT3MvL0FEcnYrdEE3RUFBQVBHLytzRDB2NzFBOVAvOEFQV0FBQUQyQUFBQTkwQUFBUGlBQUFENnYrdEEvSUFBQVA0QUFBRCsvL0lCQVAvclFRRy8vQUVGUC93QkJrQUFBUWJBQUFFSlAvckJDYi82d1FvLytzRUt2L25CQzBBQUFTQi82MEVnLyt0QklYL3JRU0kvdlVFaXYvbkJJMEFBQVNYLzYwRXFRQUFCTVlBQUFUSUFBQUUwUDcxQk5QL3lBVFYvOGdBYUFCSC84VUFTUC9GQUVuL3hRQkwvOFVBVEFBZ0FFOEFJQUJRQUNBQVUvK0FBRlgveFFCWC81QUFXd0FMQUpUL3hRQ1ovOFVBdS8vRkFNai94UURKLzhVQTkvL0ZBUVAveFFFWS80QUJIdi9GQVNML3hRRkMvOFVCWVAvRkFXSC94UUZyLzhVQjBmK1FBckwveFFLei84VUN0UC9GQXJYL3hRSzIvOFVDdlArQUFyMy9nQUsrLzRBQ3YvK0FBc0QvZ0FMTy84VUMwUC9GQXRML3hRTFUvOFVDMXYvRkF0ai94UUxhLzhVQzNQL0ZBdDcveFFMZy84VUM0di9GQXVUL3hRTG0vOFVDNlAvRkF3ci9nQU1NLzRBRER2K0FBeGIva0FNWS81QURHditRQXh6L2tBTWUvNUFEci8vRkE3WC9nQU83LzRBRDFmL0ZBOWYvZ0FQWi84VUQzUC9GQTk3L2tBUDMvOFVEL2YvRkJBTC94UVFRLzhVRUV2L0ZCQlAveFFRZC80QUVILy9GQkNIL2dBUXUvOFVFU1AvRkJFci94UVJNLzhVRVR2L0ZCRkQveFFSUy84VUVWUC9GQkZiL3hRUmMvNEFFWHYrQUJHRC9nQVJpLzRBRVpQK0FCR2IvZ0FSby80QUVhdi9GQkd6L3hRUnUvOFVFY1ArQUJITC94UVN0LzhVRXNmK0FCTHIveFFTOC84VUV2Z0FnQk1BQUlBVENBQ0FFei8rUUFHb0FPUC9tQURyLzV3QTgvL0lBUGYvbkFGRUFBQUJTQUFBQVZBQUFBRnovOFFEQkFBQUEwdi9tQU5iLzVnRGEvL0lBM3YvdUFPSC82QURtLytZQTdBQUFBTzcvOFFEd0FBQUE4UUFBQVBNQUFBRDBBQUFBOVFBQUFQYi8wQUQ0QUFBQStnQUFBUHNBQUFEK0FBQUJBQUFBQVFVQUFBRVovK2NCS3dBQUFUUC84Z0UwLy9FQk5nQUFBVG4vNWdFNi84NEJQQUFBQVQ0QUFBRkQvL0lCUlAveEFVWC81Z0ZILytnQlNmL29BVk1BQUFGVkFBQUJWd0FBQVZ3QUFBRmQvL0lCWHYveEFXTC81d0ZrLyswQmJQL21BVzMvMEFLcS8rY0N1d0FBQXdNQUFBTUZBQUFEQndBQUF3Z0FBQU1mLytZRElmL21BeVAvNWdNei8rY0ROZi9uQTV6LzV3T3IvK2NEclAveUE2Ny81d094QUFBRHh2L3VBOUwvNWdQVC8vSUQxZ0FBQTlnQUFBUGIvL0VEM1FBQUErSUFBQVBxLytjRDhnQUFBL2dBQUFQNy8rY0VBLy9uQkFiLzhnUUgvL0VFRlAveUJCWC84UVFaQUFBRUd3QUFCQ1QvN2dRbS8rNEVLUC91QkNyLzZBUXRBQUFFZ2YvbkJJUC81d1NGLytjRWlQL21CSXIvNkFTTkFBQUVsLy9uQktrQUFBVEdBQUFFeUFBQUJORC81Z1RULytjRTFmL25BR3NBSlFBUEFEai81Z0E2LytZQVBBQU9BRDMvNWdDeUFBOEF0QUFQQU5MLzVnRFVBQTRBMXYvbUFOa0FFd0RhQUE0QTNRQU9BTjRBQ3dEaC8rVUE1di9tQU9mLzlBRHRBQklBOGdBUEFQYi81d0Q1LytnQS9nQUFBUVFBRHdFTkFBOEJHZi9tQVRNQURnRTUvK1lCT3YvbkFVTUFEZ0ZGLytZQlIvL2xBVWovNkFGSi8rVUJTdi9vQVV6LzVBRlFBQTRCVVFBUEFWMEFEZ0ZpLytZQlpQL21BV1lBRGdGcy8rWUJiZi9uQVc4QURnRndBQThDa0FBUEFwRUFEd0tTQUE4Q2t3QVBBcFFBRHdLVkFBOENsZ0FQQXFyLzVnTEhBQThDeVFBUEFzc0FEd01mLytZRElmL21BeVAvNWdNei8rWUROZi9tQTVjQUR3T2MvK1lEbndBUEE2di81Z09zQUE0RHJ2L21BOFlBQ3dQSEFBOEQwdi9tQTlNQURnUHEvK1lEOHdBUEEvdi81Z1FELytZRUJnQU9CQWtBRHdRTEFBOEVGQUFPQkNRQUN3UW1BQXNFS0FBTEJDci81UVFyLytnRUx3QVBCREVBRHdRekFBOEVOUUFQQkRjQUR3UTVBQThFT3dBUEJEMEFEd1EvQUE4RVFRQVBCRU1BRHdSRkFBOEVnZi9tQklQLzVnU0YvK1lFaVAvbUJJci81UVNMLytnRWwvL21CS29BRHdUUS8rWUUwLy9tQk5YLzVnQjFBQWIvd0FBTC84QUFPUDcxQURyL3lBQTgvL0FBUGYrdEFGRUFBQUJTQUFBQVZBQUFBRnoveVFEQkFBQUEwdjcxQU5iKzlRRGEvL0FBM3YvckFPSC81d0RtLzhNQTdBQUFBTzcveVFEd0FBQUE4UUFBQVBNQUFBRDBBQUFBOVFBQUFQYi96d0Q0QUFBQStnQUFBUHNBQUFEK0FBQUJBQUFBQVFVQUFBRVovOGdCS3dBQUFUUC84QUUwLzhrQk5nQUFBVG4rOVFFNi84NEJQQUFBQVQ0QUFBRkQvL0FCUlAvSkFVWCs5UUZILytjQlNmL25BVXovM3dGVEFBQUJWUUFBQVZjQUFBRmNBQUFCWGYvd0FWNy95UUZpLzlFQlpQL3NBV3ovb0FGdC85RUJoUC9BQVlYL3dBR0gvOEFCaVAvQUFZbi93QUtxLzYwQ3V3QUFBd01BQUFNRkFBQURCd0FBQXdnQUFBTWYvdlVESWY3MUF5UCs5UU16LzYwRE5mK3RBNXovclFPci82MERyUC93QTY3L3JRT3hBQUFEeHYvckE5TCs5UVBULy9BRDFnQUFBOWdBQUFQYi84a0QzUUFBQStJQUFBUHEvNjBEN1AvQUErMy93QVB3LzhBRDhnQUFBL2dBQUFQNy84Z0VBLyt0QkFiLzhBUUgvOGtFRlAvd0JCWC95UVFaQUFBRUd3QUFCQ1QvNndRbS8rc0VLUC9yQkNyLzV3UXRBQUFFZ2YrdEJJUC9yUVNGLzYwRWlQNzFCSXIvNXdTTkFBQUVsLyt0QktrQUFBVEdBQUFFeUFBQUJORCs5UVRULzhnRTFmL0lBSFlBUi8vd0FFai84QUJKLy9BQVMvL3dBRlAvNndCVi8vQUFsUC93QUpuLzhBQzcvL0FBeVAvd0FNbi84QUQzLy9BQkEvL3dBUmovNndFYy8rc0JIdi93QVNMLzhBRkMvL0FCWVAvd0FXSC84QUZyLy9BQjYvL3JBZTMvNndIMS8ra0IvUC9yQWdYLzZ3SWgvK3NDS3YvckFrSC82d0t5Ly9BQ3MvL3dBclQvOEFLMS8vQUN0di93QXJ6LzZ3SzkvK3NDdnYvckFyLy82d0xBLytzQ3p2L3dBdEQvOEFMUy8vQUMxUC93QXRiLzhBTFkvL0FDMnYvd0F0ei84QUxlLy9BQzRQL3dBdUwvOEFMay8vQUM1di93QXVqLzhBTUsvK3NERFAvckF3Ny82d05LLytzRFZQL3JBMVgvNndOVy8rc0RWLy9yQTFqLzZ3TmgvK3NEWXYvckEyUC82d05rLytzRGEvL3JBMnovNndOdC8rc0Ridi9yQTM3LzZ3Ti8vK3NEZ1AvckE2Ly84QU8xLytzRHUvL3JBOVgvOEFQWC8rc0QyZi93QTl6LzhBUDMvL0FEL2Yvd0JBTC84QVFRLy9BRUV2L3dCQlAvOEFRZC8rc0VILy93QkNILzZ3UXUvL0FFU1Avd0JFci84QVJNLy9BRVR2L3dCRkQvOEFSUy8vQUVWUC93QkZiLzhBUmMvK3NFWHYvckJHRC82d1JpLytzRVpQL3JCR2IvNndSby8rc0Vhdi93Qkd6LzhBUnUvL0FFY1AvckJITC84QVN0Ly9BRXNmL3JCTHIvOEFTOC8vQUU0UC9yQlFMLzZ3VUYvK3NGQ3YvckFId0FCdi9hQUF2LzJnQkgvL0FBU1Avd0FFbi84QUJMLy9BQVZmL3dBRm4vN3dCYS85d0FYZi9jQUpULzhBQ1ovL0FBbS8vdkFMdi84QUM5Lzl3QXd2L3NBTVFBRHdERy8rb0F5UC93QU1uLzhBREsvOFFBeS8vdkFNei81d0QzLy9BQkEvL3dBUnIvM0FFZS8vQUJJdi93QVVMLzhBRmcvL0FCWWYvd0FXdi84QUdFLzlvQmhmL2FBWWYvMmdHSS85b0JpZi9hQXJMLzhBS3ovL0FDdFAvd0FyWC84QUsyLy9BQ3dmL3ZBc0wvN3dMRC8rOEN4UC92QXNYLzNBTEcvOXdDenYvd0F0RC84QUxTLy9BQzFQL3dBdGIvOEFMWS8vQUMydi93QXR6LzhBTGUvL0FDNFAvd0F1TC84QUxrLy9BQzV2L3dBdWovOEFNbS8rOERLUC92QXlyLzd3TXMvKzhETHYvdkF6RC83d00wLzl3RHIvL3dBN1AvN3dPMy85d0R1di92QTd6Lzd3UFYvL0FEMmYvd0E5ci8zQVBjLy9BRDQvL2NBK3YvM0FQcy85b0Q3Zi9hQS9ELzJnUDMvL0FEL1AvY0EvMy84QVFDLy9BRUJQL2NCQkQvOEFRUy8vQUVFLy93QkIvLzhBUWwvOXdFSi8vY0JDbi8zQVF1Ly9BRVNQL3dCRXIvOEFSTS8vQUVUdi93QkZELzhBUlMvL0FFVlAvd0JGYi84QVJxLy9BRWJQL3dCRzcvOEFSeS8vQUVkUC92QkhiLzd3UjQvKzhFZXYvdkJIei83d1IrLys4RWdQL3ZCSUwvM0FTRS85d0Vodi9jQkszLzhBUzEvKzhFdXYvd0JMei84QVRVLzl3RTF2L2NBSXdBQnYvS0FBdi95Z0E0LzlJQU92L1VBRHovOUFBOS85TUFVZi9SQUZMLzBRQlUvOUVBV3YvbUFGei83d0JkLytZQXZmL21BTUgvMFFEUy85SUExdi9TQU5yLzlBRGUvKzBBNGYvaEFPYi8xQURzLzlFQTd2L3ZBUEQvMFFEeC85RUE4Ly9SQVBULzBRRDEvOUVBOXYvSkFQai8wUUQ2LzlFQSsvL1JBUDcvMFFFQS85RUJCZi9SQVFuLzVRRVovOVFCR3YvbUFTRC80d0VyLzlFQk0vLzBBVFQvN3dFMi85RUJPZi9TQVRyL3hBRTgvOUVCUHYvUkFVUC85QUZFLys4QlJmL1NBVWYvNFFGSi8rRUJVLy9SQVZYLzBRRlgvOUVCWFAvUkFWMy85QUZlLys4Qll2L1VBV1AvOVFGay8rY0JiUC9TQVczL3lRR0UvOG9CaGYvS0FZZi95Z0dJLzhvQmlmL0tBcXIvMHdLNy85RUN4Zi9tQXNiLzVnTUQvOUVEQmYvUkF3Zi8wUU1JLzlFREgvL1NBeUgvMGdNai85SURNLy9UQXpULzVnTTEvOU1EblAvVEE2di8wd09zLy9RRHJ2L1RBN0gvMFFPMy8rWUR4di90QTlMLzBnUFQvL1FEMXYvUkE5ai8wUVBhLytZRDIvL3ZBOTMvMFFQaS85RUQ0Ly9tQStyLzB3UHIvK1lEN1AvS0ErMy95Z1B3LzhvRDh2L1JBL2ovMFFQNy85UUQvUC9tQkFQLzB3UUUvK1lFQnYvMEJBZi83d1FVLy9RRUZmL3ZCQm4vMFFRYi85RUVKUC90QkNYLzVnUW0vKzBFSi8vbUJDai83UVFwLytZRUt2L2hCQzMvMFFTQi85TUVndi9tQklQLzB3U0UvK1lFaGYvVEJJYi81Z1NJLzlJRWl2L2hCSTMvMFFTWC85TUVxZi9SQk1iLzBRVEkvOUVFMFAvU0JOUC8xQVRVLytZRTFmL1VCTmIvNWdDWUFDVUFFQUFuLytnQUsvL29BRFAvNkFBMS8rZ0FPUC9nQURyLzRBQTkvOThBZy8vb0FKUC82QUNZLytnQXNnQVFBTFAvNkFDMEFCQUEwdi9nQU5QLzZBRFVBQkFBMXYvZ0FOa0FGQURkQUJBQTRmL2hBT2IvNEFEdEFCTUE4Z0FRQVBuLzRBRUVBQkFCQ1Avb0FRMEFFQUVYLytnQkdmL2dBUnYvNkFFZC8rZ0JILy9vQVNILzZBRTUvK0FCUWYvb0FVWC80QUZILytFQlNQL2dBVW4vNFFGSy8rQUJUZi9oQVZBQUVBRlJBQkFCV1AvcEFXTC8zd0ZrLzk0QlpnQVFBV3IvNkFGcy85OEJidi95QVc4QUVBRndBQkFDVmYvb0FsYi82QUpZLytnQ1dmL29BcEFBRUFLUkFCQUNrZ0FRQXBNQUVBS1VBQkFDbFFBUUFwWUFFQUtYLytnQ29mL29BcUwvNkFLai8rZ0NwUC9vQXFYLzZBS3EvOThDeHdBUUFza0FFQUxMQUJBQ3pmL29Bcy8vNkFMUi8rZ0MwLy9vQXVILzZBTGovK2dDNWYvb0F1Zi82QU1KLytnREMvL29BdzMvNkFNZi8rQURJZi9nQXlQLzRBTXovOThETmYvZkF6Ny82QU9YQUJBRG0vL29BNXovM3dPZkFCQURxUC9vQTZ2LzN3T3UvOThEeHdBUUE4Ny82QVBSLytnRDB2L2dBK3IvM3dQekFCQUQrLy9nQS83LzZBUUIvK2dFQS8vZkJBa0FFQVFMQUJBRUhQL29CQjcvNkFRZy8rZ0VLdi9oQkN2LzRBUXZBQkFFTVFBUUJETUFFQVExQUJBRU53QVFCRGtBRUFRN0FCQUVQUUFRQkQ4QUVBUkJBQkFFUXdBUUJFVUFFQVJiLytnRVhmL29CRi8vNkFSaC8rZ0VZLy9vQkdYLzZBUm4vK2dFYWYvb0JHdi82QVJ0LytnRWIvL29CSEgvNkFTQi85OEVnLy9mQklYLzN3U0kvK0FFaXYvaEJJdi80QVNYLzk4RXFnQVFCTEQvNkFUSi8rZ0UwUC9nQk5QLzRBVFYvK0FBdWdCSC85d0FTUC9jQUVuLzNBQkwvOXdBVWYvekFGTC84d0JULzlZQVZQL3pBRlgvM0FCWi85MEFXdi9oQUYzLzRRQ1UvOXdBbWYvY0FKdi8zUUM3Lzl3QXZmL2hBTDcvN2dDLy8rWUF3Zi96QU1MLzZ3REQvK2tBeGYvd0FNYi81d0RJLzl3QXlmL2NBTXIvNHdETC85MEF6UC9PQU0zLzFBRE8vOXNBN1AvekFQRC84d0R4Ly9NQTgvL3pBUFQvOHdEMS8vTUE5Ly9jQVBqLzh3RDYvL01BKy8vekFQNy84d0VBLy9NQkEvL2NBUVgvOHdFWS85WUJHdi9oQVI3LzNBRWkvOXdCSy8vekFUYi84d0U4Ly9NQlB2L3pBVUwvM0FGVC8vTUJWZi96QVZmLzh3RmMvL01CWVAvY0FXSC8zQUZyLzl3Q3N2L2NBclAvM0FLMC85d0N0Zi9jQXJiLzNBSzcvL01DdlAvV0FyMy8xZ0srLzlZQ3YvL1dBc0QvMWdMQi85MEN3di9kQXNQLzNRTEUvOTBDeGYvaEFzYi80UUxPLzl3QzBQL2NBdEwvM0FMVS85d0Mxdi9jQXRqLzNBTGEvOXdDM1AvY0F0Ny8zQUxnLzl3QzR2L2NBdVQvM0FMbS85d0M2UC9jQXdQLzh3TUYvL01EQi8vekF3ai84d01LLzlZRERQL1dBdzcvMWdNbS85MERLUC9kQXlyLzNRTXMvOTBETHYvZEF6RC8zUU0wLytFRHIvL2NBN0gvOHdPei85MER0Zi9XQTdmLzRRTzYvOTBEdS8vV0E3ei8zUVBWLzl3RDF2L3pBOWYvMWdQWS8vTUQyZi9jQTlyLzRRUGMvOXdEM2YvekErTC84d1BqLytFRDYvL2hBL0wvOHdQMy85d0QrUC96QS96LzRRUDkvOXdFQXYvY0JBVC80UVFRLzl3RUV2L2NCQlAvM0FRWi8vTUVHLy96QkIzLzFnUWYvOXdFSWYvV0JDWC80UVFuLytFRUtmL2hCQzMvOHdRdS85d0VTUC9jQkVyLzNBUk0vOXdFVHYvY0JGRC8zQVJTLzl3RVZQL2NCRmIvM0FSYy85WUVYdi9XQkdELzFnUmkvOVlFWlAvV0JHYi8xZ1JvLzlZRWF2L2NCR3ovM0FSdS85d0VjUC9XQkhMLzNBUjAvOTBFZHYvZEJIai8zUVI2LzkwRWZQL2RCSDcvM1FTQS85MEVndi9oQklULzRRU0cvK0VFamYvekJLbi84d1N0Lzl3RXNmL1dCTFgvM1FTNi85d0V2UC9jQk1iLzh3VEkvL01FMVAvaEJOYi80UUMvQUFZQURBQUxBQXdBUi8vb0FFai82QUJKLytnQVNnQU1BRXYvNkFCVC8rb0FWZi9vQUZvQUN3QmRBQXNBbFAvb0FKbi82QUM3LytnQXZRQUxBTDcvN1FERUFBQUF4Z0FMQU1qLzZBREovK2dBeWdBTUFQZi82QUVELytnQkdQL3FBUm9BQ3dFZS8rZ0JJdi9vQVVMLzZBRmcvK2dCWWYvb0FXdi82QUdFQUF3QmhRQU1BWWNBREFHSUFBd0JpUUFNQWVNQURRSG1BQTBCNkFBT0Flbi85UUhyLyt3QjdmL3RBZlgvN0FINy83OEIvUC90QWYzL3Z3SUVBQTRDQmYvdEFnZ0FEZ0lnQUE0Q0lmL3RBaUlBRFFJa0FBNENLdi90QWtILzdnSkQvNzhDc3Yvb0FyUC82QUswLytnQ3RmL29BcmIvNkFLOC8rb0N2Zi9xQXI3LzZnSy8vK29Dd1AvcUFzVUFDd0xHQUFzQ3p2L29BdEQvNkFMUy8rZ0MxUC9vQXRiLzZBTFkvK2dDMnYvb0F0ei82QUxlLytnQzRQL29BdUwvNkFMay8rZ0M1di9vQXVqLzZBTUsvK29ERFAvcUF3Ny82Z00wQUFzRFEvKy9BMFQvdndORi83OERSdisvQTBmL3Z3TkkvNzhEU2YrL0Ewci83UU5VLyswRFZmL3RBMWIvN1FOWC8rMERXUC90QTEwQURRTmUvNzhEWC8rL0EyRC92d05oLyswRFl2L3RBMlAvN1FOay8rMERhLy90QTJ6LzdRTnQvKzBEYnYvdEEzNy83UU4vLyswRGdQL3RBNFQvOVFPRi8vVURodi8xQTRmLzlRT0pBQTREa2dBTkE1TUFEUU92LytnRHRmL3FBN2NBQ3dPNy8rb0QxZi9vQTlmLzZnUFovK2dEMmdBTEE5ei82QVBqQUFzRDZ3QUxBK3dBREFQdEFBd0Q4QUFNQS9mLzZBUDhBQXNEL2Yvb0JBTC82QVFFQUFzRUVQL29CQkwvNkFRVC8rZ0VIZi9xQkIvLzZBUWgvK29FSlFBTEJDY0FDd1FwQUFzRUx2L29CRWovNkFSSy8rZ0VUUC9vQkU3LzZBUlEvK2dFVXYvb0JGVC82QVJXLytnRVhQL3FCRjcvNmdSZy8rb0VZdi9xQkdULzZnUm0vK29FYVAvcUJHci82QVJzLytnRWJ2L29CSEQvNmdSeS8rZ0VnZ0FMQklRQUN3U0dBQXNFcmYvb0JMSC82Z1M2LytnRXZQL29CTlFBQ3dUV0FBc0UzUCsvQk9ELzdRVGhBQTBFNC8rL0JPOEFEUVR5QUEwRSsvKy9CUUwvN1FVRi8rMEZCZ0FPQlFyLzdRVUxBQTBBNHdBR0FBMEFDd0FOQUVYLzhBQkgvN0FBU1Ard0FFbi9zQUJLQUEwQVMvK3dBRlAvMWdCVi83QUFXZ0FMQUYwQUN3Q1UvN0FBbWYrd0FMdi9zQUM5QUFzQXZ2K3dBTWYvcXdESS84QUF5Zit3QU16LzFRRHQvNm9BOHYrdkFQZi9zQUVELzdBQkJQK3ZBUmovMWdFYUFBc0JIUC9pQVI3L3NBRWdBQXdCSXYrd0FVTC9zQUZSLzY4QllQK3dBV0gvc0FGakFBc0JaUUFMQVd2L3NBRncvNjhCaEFBTkFZVUFEUUdIQUEwQmlBQU5BWWtBRFFIakFBMEI1Z0FOQWVnQURnSHAvL1VCNi8vc0FlMy83UUgxLyt3QisvKy9BZnovN1FIOS83OENCQUFPQWdYLzdRSUlBQTRDSUFBT0FpSC83UUlpQUEwQ0pBQU9BaXIvN1FKQi8rNENRLysvQXF2LzhBS3MvL0FDcmYvd0FxNy84QUt2Ly9BQ3NQL3dBckgvOEFLeS83QUNzLyt3QXJUL3NBSzEvN0FDdHYrd0Fyei8xZ0s5LzlZQ3Z2L1dBci8vMWdMQS85WUN4UUFMQXNZQUN3TEkvL0FDeXYvd0Fzei84QUxPLzdBQzBQK3dBdEwvc0FMVS83QUMxdit3QXRqL3NBTGEvN0FDM1Ard0F0Ny9zQUxnLzdBQzR2K3dBdVQvc0FMbS83QUM2UCt3QXdyLzFnTU0vOVlERHYvV0F6UUFDd05ELzc4RFJQKy9BMFgvdndORy83OERSLysvQTBqL3Z3TkovNzhEU3YvdEExVC83UU5WLyswRFZ2L3RBMWYvN1FOWS8rMERYUUFOQTE3L3Z3TmYvNzhEWVArL0EySC83UU5pLyswRFkvL3RBMlQvN1FOci8rMERiUC90QTIzLzdRTnUvKzBEZnYvdEEzLy83UU9BLyswRGhQLzFBNFgvOVFPRy8vVURoLy8xQTRrQURnT1NBQTBEa3dBTkE2Ly9zQU8xLzlZRHR3QUxBN3YvMWdQVS8vQUQxZit3QTlmLzFnUFovN0FEMmdBTEE5ei9zQVBqQUFzRDZ3QUxBK3dBRFFQdEFBMEQ4QUFOQS9ULzhBUDMvN0FEL0FBTEEvMy9zQVFDLzdBRUJBQUxCQXIvOEFRTS8vQUVFUCt3QkJML3NBUVQvN0FFSGYvV0JCLy9zQVFoLzlZRUpRQUxCQ2NBQ3dRcEFBc0VMdit3QkRELzhBUXkvL0FFTlAvd0JEYi84QVE0Ly9BRU92L3dCRHovOEFRKy8vQUVRUC93QkVMLzhBUkUvL0FFUnYvd0JFai9zQVJLLzdBRVRQK3dCRTcvc0FSUS83QUVVdit3QkZUL3NBUlcvN0FFWFAvV0JGNy8xZ1JnLzlZRVl2L1dCR1QvMWdSbS85WUVhUC9XQkdyL3NBUnMvN0FFYnYrd0JIRC8xZ1J5LzdBRWdnQUxCSVFBQ3dTR0FBc0VxLy93QkszL3NBU3gvOVlFdXYrd0JMei9zQVRVQUFzRTFnQUxCTnovdndUZy8rMEU0UUFOQk9QL3Z3VHZBQTBFOGdBTkJQdi92d1VDLyswRkJmL3RCUVlBRGdVSy8rMEZDd0FOQU9jQUVQOFdBQkwvRmdBbC8xWUFMdjc0QURnQUZBQkYvOTRBUi8vckFFai82d0JKLytzQVMvL3JBRlAvNndCVi8rc0FWdi9tQUZuLzZnQmEvK2dBWGYvb0FKVC82d0NaLytzQW0vL3FBTEwvVmdDMC8xWUF1Ly9yQUwzLzZBREkvK3NBeWYvckFNdi82Z0RTQUJRQTFnQVVBUGYvNndFRC8rc0JEZjlXQVJqLzZ3RWEvK2dCSHYvckFTTC82d0U1QUJRQlF2L3JBVVVBRkFGZy8rc0JZZi9yQVd2LzZ3R0cveFlCaXY4V0FZNy9GZ0dQL3hZQisvL0FBZjMvd0FKRC84QUNrUDlXQXBIL1ZnS1MvMVlDay85V0FwVC9WZ0tWLzFZQ2x2OVdBcXYvM2dLcy85NENyZi9lQXE3LzNnS3YvOTRDc1AvZUFySC8zZ0t5LytzQ3MvL3JBclQvNndLMS8rc0N0di9yQXJ6LzZ3SzkvK3NDdnYvckFyLy82d0xBLytzQ3dmL3FBc0wvNmdMRC8rb0N4UC9xQXNYLzZBTEcvK2dDeC85V0Fzai8zZ0xKLzFZQ3l2L2VBc3YvVmdMTS85NEN6di9yQXRELzZ3TFMvK3NDMVAvckF0Yi82d0xZLytzQzJ2L3JBdHovNndMZS8rc0M0UC9yQXVMLzZ3TGsvK3NDNXYvckF1ai82d0wyL3ZnREN2L3JBd3ovNndNTy8rc0RId0FVQXlFQUZBTWpBQlFESnYvcUF5ai82Z01xLytvRExQL3FBeTcvNmdNdy8rb0ROUC9vQTBQL3dBTkUvOEFEUmYvQUEwYi93QU5ILzhBRFNQL0FBMG4vd0FOZS84QURYLy9BQTJEL3dBT1gvMVlEbi85V0E2Ly82d096LytvRHRmL3JBN2YvNkFPNi8rb0R1Ly9yQTd6LzZnUEQvdmdEeC85V0E5SUFGQVBVLzk0RDFmL3JBOWYvNndQWi8rc0Qydi9vQTl6LzZ3UGovK2dENi8vb0EvUC9WZ1AwLzk0RDkvL3JBL3ovNkFQOS8rc0VBdi9yQkFULzZBUUovMVlFQ3YvZUJBdi9WZ1FNLzk0RUVQL3JCQkwvNndRVC8rc0VIZi9yQkIvLzZ3UWgvK3NFSmYvb0JDZi82QVFwLytnRUx2L3JCQy8vVmdRdy85NEVNZjlXQkRMLzNnUXovMVlFTlAvZUJEWC9WZ1EyLzk0RU4vOVdCRGovM2dRNS8xWUVPdi9lQkR2L1ZnUTgvOTRFUGY5V0JENy8zZ1EvLzFZRVFQL2VCRUgvVmdSQy85NEVRLzlXQkVULzNnUkYvMVlFUnYvZUJFai82d1JLLytzRVRQL3JCRTcvNndSUS8rc0VVdi9yQkZULzZ3UlcvK3NFWFAvckJGNy82d1JnLytzRVl2L3JCR1QvNndSbS8rc0VhUC9yQkdyLzZ3UnMvK3NFYnYvckJIRC82d1J5LytzRWRQL3FCSGIvNmdSNC8rb0Vldi9xQkh6LzZnUisvK29FZ1AvcUJJTC82QVNFLytnRWh2L29CSWdBRkFTcS8xWUVxLy9lQkszLzZ3U3gvK3NFdGYvcUJMci82d1M4LytzRTBBQVVCTlQvNkFUVy8rZ0UzUC9BQk9QL3dBVDcvOEFBQWdDZ0FBUUFCQUFBQUFZQUJnQUJBQXNBREFBQ0FCTUFFd0FFQUNVQUtnQUZBQ3dBTFFBTEFDOEFOZ0FOQURnQU9BQVZBRG9BUHdBV0FFVUFSZ0FjQUVrQVNnQWVBRXdBVEFBZ0FFOEFUd0FoQUZFQVZBQWlBRllBVmdBbUFGZ0FXQUFuQUZvQVhRQW9BRjhBWHdBc0FJb0FpZ0F0QUpZQWxnQXVBSjBBblFBdkFMRUF0UUF3QUxjQXVRQTFBTHNBdXdBNEFMMEF2Z0E1QU1BQXdRQTdBTU1BeFFBOUFNY0F6Z0JBQU5JQTBnQklBTlFBM2dCSkFPQUE3d0JVQVBFQThRQmtBUFlBK0FCbEFQc0EvQUJvQVA0QkFBQnFBUU1CQlFCdEFRb0JDZ0J3QVEwQkRRQnhBUmdCR2dCeUFTSUJJZ0IxQVM0Qk1BQjJBVE1CTlFCNUFUY0JOd0I4QVRrQk9RQjlBVHNCT3dCK0FVTUJSQUIvQVZRQlZBQ0JBVllCVmdDQ0FWZ0JXQUNEQVZ3QlhnQ0VBWVFCaFFDSEFZY0JpUUNKQWVnQjZBQ01BZW9CNndDTkFlMEI3UUNQQWZBQjhBQ1FBZnNCL1FDUkFrQUNRQUNVQWtNQ1F3Q1ZBbFVDVlFDV0FsY0NXQUNYQW9zQ2pBQ1pBbzRDamdDYkFwQUNwUUNjQXFvQ3NRQ3lBck1DdGdDNkFyc0N3QUMrQXNVQ3pRREVBczhDendETkF0RUMwUURPQXRNQzB3RFBBdFVDMVFEUUF0Y0M0QURSQXVrQzZ3RGJBdTBDN1FEZUF1OEM3d0RmQXZFQzhRRGdBdk1DOHdEaEF2Z0MrQURpQXZvQytnRGpBdndDL0FEa0F2NEMvZ0RsQXdBREFBRG1Bd0lERGdEbkF4QURFQUQwQXhJREVnRDFBeFFERkFEMkF4OERId0QzQXlFRElRRDRBeU1ESXdENUF6RURNUUQ2QXpNRE5nRDdBemdET0FEL0F6b0RPZ0VBQTBBRFNRRUJBMVFEV0FFTEExNERZQUVRQTJVRFpRRVRBM2NEZWdFVUEzNERnQUVZQTRrRGlRRWJBNWNEbkFFY0E1OERyZ0VpQTdFRHNRRXlBN1VEdFFFekE3Y0R0d0UwQTdzRHV3RTFBNzREdndFMkE4RUR3Z0U0QThRRHlnRTZBOHdEemdGQkE5QUQxUUZFQTljRDJBRktBOW9EM1FGTUErTUQ1QUZRQStZRDVnRlNBK2dENkFGVEErb0Q3UUZVQS9BRDlRRllBL2NEOXdGZUEvc0QvQUZmQkFFRUFRRmhCQU1FREFGaUJBOEVFQUZzQkJJRUZRRnVCQndFSFFGeUJDRUVJUUYwQkNNRUtRRjFCQzhFVndGOEJGa0VXUUdsQkZzRWFBR21CSEFFY0FHMEJJRUVoZ0cxQklnRWlBRzdCSXdFalFHOEJKQUVrQUcrQkpJRWt3Ry9CSlVFbFFIQkJKY0Vsd0hDQktnRXJBSERCSzRFcmdISUJMQUVzUUhKQkxNRXN3SExCTGNFdVFITUJMc0V1d0hQQkwwRXZ3SFFCTUVFd1FIVEJNTUV3d0hVQk1VRXl3SFZCTTBFelFIY0JOQUUwQUhkQk5NRTF3SGVCTmtFMlFIakJOc0UzQUhrQk9BRTRBSG1CT01FNHdIbkJPNEU3Z0hvQlBzRSt3SHBCUUlGQWdIcUJRWUZCZ0hyQUFJQW1nQUdBQVlBQUFBTEFBc0FBUUFRQUJBQUFnQVNBQklBQXdBbEFDa0FCQUFzQURRQUNRQTRBRDRBRWdCRkFFY0FHUUJKQUVrQUhBQk1BRXdBSFFCUkFGUUFIZ0JXQUZZQUlnQmFBRm9BSXdCY0FGNEFKQUNLQUlvQUp3Q1dBSllBS0FDeEFMUUFLUUM5QUwwQUxRREJBTUVBTGdESEFNY0FMd0RVQU5VQU1BRFhBTmNBTWdEYUFOb0FNd0RjQU40QU5BRGdBT1lBTndEc0FPd0FQZ0R1QU80QVB3RDNBUGNBUUFEOEFQd0FRUUQrQVA4QVFnRUVBUVVBUkFFS0FRb0FSZ0VOQVEwQVJ3RVlBUm9BU0FFdUFUQUFTd0V6QVRVQVRnRTNBVGNBVVFFNUFUa0FVZ0U3QVRzQVV3RkRBVVFBVkFGVUFWUUFWZ0ZXQVZZQVZ3RllBVmdBV0FGY0FWNEFXUUdFQVlvQVhBR09BWThBWXdIb0FlZ0FaUUh0QWUwQVpnSHdBZkVBWndIN0FmMEFhUUlQQWc4QWJBSWVBaUFBYlFKQUFrQUFjQUpEQWtNQWNRSlZBbFVBY2dKWEFsZ0Fjd0tMQW93QWRRS09BbzRBZHdLUUFyWUFlQUs3QXNBQW53TEZBdFVBcFFMWEF1QUF0Z0xwQXVzQXdBTHRBdTBBd3dMdkF1OEF4QUx4QXZFQXhRTHpBdk1BeGdMMkF2WUF4d0w0QXZnQXlBTDZBdm9BeVFMOEF2d0F5Z0wrQXY0QXl3TUFBd0FBekFNQ0F3NEF6UU1RQXhBQTJnTVNBeElBMndNVUF4UUEzQU1mQXg4QTNRTWhBeUVBM2dNakF5TUEzd01sQXlVQTRBTW5BeWNBNFFNcEF5a0E0Z01yQXlzQTR3TXRBeTBBNUFNdkF5OEE1UU14QXpFQTVnTXpBenNBNXdOQUEwa0E4QU5VQTFnQStnTmVBMkFBL3dObEEyVUJBZ04yQTNvQkF3TitBNEFCQ0FPSkE0a0JDd09YQTV3QkRBT2ZBNjRCRWdPeEE3RUJJZ08xQTdVQkl3TzNBN2NCSkFPN0E3c0JKUU8rQTc4QkpnUEJBOG9CS0FQTUE4NEJNZ1BRQTlVQk5RUFhBOTBCT3dQakErUUJRZ1BtQStZQlJBUG9BK2dCUlFQcUErMEJSZ1B3QS9VQlNnUDNBL2NCVUFQN0Evd0JVUVFCQkF3QlV3UVBCQkFCWHdRU0JCVUJZUVFjQkIwQlpRUWhCQ0VCWndRakJDa0JhQVF2QkZjQmJ3UlpCRmtCbUFSYkJHZ0JtUVJ3QkhBQnB3UnpCSE1CcUFSMUJIVUJxUVNCQklZQnFnU0lCSWdCc0FTTUJJMEJzUVNRQkpBQnN3U1NCSk1CdEFTVkJKVUJ0Z1NYQkpjQnR3U29CS3dCdUFTdUJLNEJ2UVN3QkxFQnZnU3pCTE1Cd0FTM0JMa0J3UVM3QkxzQnhBUzlCTDhCeFFUQkJNRUJ5QVREQk1NQnlRVEZCTXNCeWdUTkJNMEIwUVRRQk5BQjBnVFNCTmNCMHdUWkJOd0IyUVRnQk9BQjNRVGpCT01CM2dUcEJPa0Izd1R1Qk80QjRBVDVCUGtCNFFUN0JQc0I0Z1VDQlFJQjR3VUdCUVlCNUFBQ0FYUUFCZ0FHQUE4QUN3QUxBQThBRUFBUUFCb0FFZ0FTQUJvQUpRQWxBQUlBSmdBbUFDUUFKd0FuQUJBQUtBQW9BQUVBS1FBcEFBUUFMZ0F1QUFnQUx3QXZBQTBBTUFBd0FCY0FNd0F6QUFFQU5BQTBBQ1VBT0FBNEFCSUFPUUE1QUFnQU9nQTZBQndBT3dBN0FCZ0FQQUE4QUJFQVBRQTlBQXdBUGdBK0FCa0FSUUJGQUFNQVJnQkdBQTRBUndCSEFCTUFTUUJKQUFVQVRBQk1BQWtBVVFCU0FBa0FVd0JUQUFZQVZBQlVBQTRBVmdCV0FCc0FXZ0JhQUFjQVhBQmNBQlVBWFFCZEFBY0FYZ0JlQUI4QWlnQ0tBQTRBbGdDV0FBRUFzUUN4QUJZQXNnQ3lBQUlBc3dDekFBRUF0QUMwQUFJQXZRQzlBQWNBd1FEQkFBa0F4d0RIQUE0QTFBRFZBQ0FBMmdEYUFCRUEzZ0RlQUNFQTVBRGtBQ0FBNWdEbUFDQUE3QURzQUNJQTdnRHVBQlVBOXdEM0FBNEEvQUQ4QUNNQS9nRCtBQ01BL3dEL0FBNEJCQUVGQUNNQkNnRUtBQ01CRFFFTkFBSUJHQUVZQUFZQkdRRVpBQndCR2dFYUFBY0JMZ0V1QUE0Qkx3RXZBQllCTUFFd0FDSUJNd0V6QUJFQk5BRTBBQlVCTlFFMUFBMEJOd0UzQUEwQk9RRTVBQTBCUXdGREFCRUJSQUZFQUJVQldBRllBQUVCWEFGY0FDSUJYUUZkQUJFQlhnRmVBQlVCaEFHRkFBOEJoZ0dHQUJvQmh3R0pBQThCaWdHS0FCb0JqZ0dQQUJvQjZBSG9BQjBCN1FIdEFBb0I4QUh3QUI0QjhRSHhBQlFCK3dIN0FBc0IvQUg4QUFvQi9RSDlBQXNDRHdJUEFCUUNIZ0lnQUJRQ1FBSkFBQW9DUXdKREFBc0NWUUpWQUJBQ1Z3SllBQUVDaXdLTUFBRUNqZ0tPQUJJQ2tBS1dBQUlDbHdLWEFCQUNtQUtiQUFRQ29RS2xBQUVDcGdLcEFBZ0NxZ0txQUF3Q3F3S3hBQU1Dc2dLeUFCTUNzd0syQUFVQ3V3SzdBQWtDdkFMQUFBWUN4UUxHQUFjQ3h3TEhBQUlDeUFMSUFBTUN5UUxKQUFJQ3lnTEtBQU1DeXdMTEFBSUN6QUxNQUFNQ3pRTE5BQkFDemdMT0FCTUN6d0xQQUJBQzBBTFFBQk1DMFFMUkFCQUMwZ0xTQUJNQzB3TFRBQkFDMUFMVUFCTUMxUUxWQUFFQzF3TFhBQVFDMkFMWUFBVUMyUUxaQUFRQzJnTGFBQVVDMndMYkFBUUMzQUxjQUFVQzNRTGRBQVFDM2dMZUFBVUMzd0xmQUFRQzRBTGdBQVVDNmdMcUFBa0M5Z0wyQUFnQytBTDRBQTBDK2dMNkFCY0MvQUw4QUJjQy9nTCtBQmNEQUFNQUFCY0RBd01EQUFrREJRTUZBQWtEQndNSUFBa0RDUU1KQUFFRENnTUtBQVlEQ3dNTEFBRUREQU1NQUFZRERRTU5BQUVERGdNT0FBWURFQU1RQUJzREVnTVNBQnNERkFNVUFCc0RId01mQUJJRElRTWhBQklESXdNakFCSURKUU1sQUFnREp3TW5BQWdES1FNcEFBZ0RLd01yQUFnRExRTXRBQWdETHdNdkFBZ0RNUU14QUJnRE13TXpBQXdETkFNMEFBY0ROUU0xQUF3RE5nTTJBQmtETndNM0FCOERPQU00QUJrRE9RTTVBQjhET2dNNkFCa0RPd003QUI4RFFBTkJBQW9EUWdOQ0FCMERRd05KQUFzRFZBTllBQW9EWGdOZ0FBc0RaUU5sQUFvRGRnTjJBQlFEZHdONkFCNERmZ09BQUFvRGlRT0pBQjBEbHdPWEFBSURtQU9ZQUFRRG13T2JBQUVEbkFPY0FBd0Rud09mQUFJRG9BT2dBQ1FEb1FPaEFBUURvZ09pQUJrRHBRT2xBQTBEcUFPb0FBRURxUU9wQUNVRHFnT3FBQklEcXdPckFBd0RyQU9zQUJFRHJnT3VBQXdEc1FPeEFBa0R0UU8xQUFZRHR3TzNBQWNEdXdPN0FBWUR2Z08rQUFRRHZ3Ty9BQllEd3dQREFBZ0R4QVBGQUEwRHhnUEdBQ0VEeHdQSEFBSUR5QVBJQUNRRHlRUEpBQllEeWdQS0FBUUR6Z1BPQUFFRDBBUFFBQ1VEMFFQUkFCQUQwZ1BTQUJJRDB3UFRBQkVEMUFQVUFBTUQxUVBWQUFVRDF3UFhBQVlEMkFQWUFBNEQyUVBaQUJNRDJnUGFBQWNEMndQYkFCVUQzQVBjQUFVRDNRUGRBQ0lENHdQakFBY0Q1QVBrQUJnRDVnUG1BQmdENkFQb0FCZ0Q2Z1BxQUF3RDZ3UHJBQWNEN0FQdEFBOEQ4QVB3QUE4RDhnUHlBQWtEOHdQekFBSUQ5QVAwQUFNRDlRUDFBQVFEOXdQM0FBVUQrd1A3QUJ3RC9BUDhBQWNFQVFRQkFCQUVBZ1FDQUJNRUF3UURBQXdFQkFRRUFBY0VCZ1FHQUJFRUJ3UUhBQlVFQ1FRSkFBSUVDZ1FLQUFNRUN3UUxBQUlFREFRTUFBTUVEd1FQQUFRRUVBUVFBQVVFRWdRVEFBVUVGQVFVQUJFRUZRUVZBQlVFSEFRY0FBRUVIUVFkQUFZRUlRUWhBQVlFSXdRakFBNEVKQVFrQUNFRUpRUWxBQWNFSmdRbUFDRUVKd1FuQUFjRUtBUW9BQ0VFS1FRcEFBY0VMd1F2QUFJRU1BUXdBQU1FTVFReEFBSUVNZ1F5QUFNRU13UXpBQUlFTkFRMEFBTUVOUVExQUFJRU5nUTJBQU1FTndRM0FBSUVPQVE0QUFNRU9RUTVBQUlFT2dRNkFBTUVPd1E3QUFJRVBBUThBQU1FUFFROUFBSUVQZ1ErQUFNRVB3US9BQUlFUUFSQUFBTUVRUVJCQUFJRVFnUkNBQU1FUXdSREFBSUVSQVJFQUFNRVJRUkZBQUlFUmdSR0FBTUVSd1JIQUFRRVNBUklBQVVFU1FSSkFBUUVTZ1JLQUFVRVN3UkxBQVFFVEFSTUFBVUVUUVJOQUFRRVRnUk9BQVVFVHdSUEFBUUVVQVJRQUFVRVVRUlJBQVFFVWdSU0FBVUVVd1JUQUFRRVZBUlVBQVVFVlFSVkFBUUVWZ1JXQUFVRVd3UmJBQUVFWEFSY0FBWUVYUVJkQUFFRVhnUmVBQVlFWHdSZkFBRUVZQVJnQUFZRVlRUmhBQUVFWWdSaUFBWUVZd1JqQUFFRVpBUmtBQVlFWlFSbEFBRUVaZ1JtQUFZRVp3Um5BQUVFYUFSb0FBWUVjQVJ3QUFZRWN3UnpBQWdFZFFSMUFBZ0VnUVNCQUF3RWdnU0NBQWNFZ3dTREFBd0VoQVNFQUFjRWhRU0ZBQXdFaGdTR0FBY0VpQVNJQUJJRWpBU01BQllFalFTTkFDSUVrQVNRQUFrRWtnU1NBQ0FFa3dTVEFCWUVsUVNWQUEwRWx3U1hBQXdFcVFTcEFBa0VxZ1NxQUFJRXF3U3JBQU1FckFTc0FBUUVzQVN3QUFFRXNRU3hBQVlFc3dTekFCc0V0d1MzQUNRRXVBUzRBQTRFdVFTNUFBRUV1d1M3QUFFRXZnUytBQWtFdndTL0FBMEV3UVRCQUEwRXd3VERBQmNFeGdUR0FBa0V5QVRJQUFrRXlRVEpBQUVFeWdUS0FDVUV5d1RMQUE0RXpRVE5BQnNFMEFUUUFCSUUwZ1RTQUFnRTB3VFRBQndFMUFUVUFBY0UxUVRWQUJ3RTFnVFdBQWNFMXdUWEFCZ0UyUVRaQUJrRTJnVGFBQjhFMndUYkFBRUUzQVRjQUFzRTRBVGdBQW9FNHdUakFBc0U2UVRwQUJRRTdnVHVBQjBFK1FUNUFCUUUrd1Q3QUFzRkFnVUNBQW9GQmdVR0FCMEFBUUFHQlFZQUR3QUFBQUFBQUFBQUFBOEFBQUFBQUFBQUFBQVlBQnNBR0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBZ0FBQUFBQUFBQUNBQUFBQUFBakFBQUFBQUFBQUFBQUFnQUFBQUlBQUFBVUFBMEFDd0FhQUJZQUVBQU1BQmNBQUFBQUFBQUFBQUFBQUFBQUJnQUFBQUVBQVFBQkFBQUFBUUFBQUFBQUFBQUFBQUFBQXdBREFBY0FBd0FCQUFBQUVRQUFBQWdBQ1FBQUFCTUFDUUFkQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FCQUFBQUFBQUFBQUlBQVFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUlBQkFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQ1FBQUFBQUFBQUFEQUFBQUFBQUFBQUFBQUFBQUFBRUFBUUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFEUUFDQUI0QUFBQU5BQUFBQUFBQUFCQUFBQUFBQUI0QUh3QUFBQUFBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBQUFUQUFBQUF3QURBQ0VBQXdBREFBTUFBQUFCQUFNQUlnQURBQU1BQUFBQUFBTUFBQUFEQUFBQUFBQUJBQ0VBQXdBQUFBQUFBZ0FBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBSEFCb0FDUUFDQUFBQUFnQUJBQUlBQUFBQ0FBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFCTUFBQUFEQUFBQUFBQU5BQUFBQUFBREFBQUFBd0FBQUFBQUFnQUJBQkFBRXdBTkFBQUFJQUFpQUFBQUFBQUFBQUFBQUFBQUFBQUFIZ0FoQUFBQUF3QUFBQU1BQUFBREFBQUFBQUFBQUFBQUF3QVFBQk1BQUFBQkFBRUFBQUFBQUFBQUFBQWVBQUFBQUFBQUFBSUFBUUFBQUFBQUFBQWVBQ0VBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWJBQnNBQUFBUEFBOEFHQUFQQUE4QUR3QVlBQUFBQUFBQUFCZ0FHQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVnQVpBQ1FBQUFBT0FCVUFIQUFBQUFVQUFBQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFDZ0FGQUFvQUFBQUFBQUFBQUFBQUFBQUFGUUFGQUFBQUFBQVZBQUFBQUFBQUFCa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBWkFBQUFBQUFWQUFVQUVnQVpBQlVBQUFBQUFBQUFBQUFBQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFDZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FDQUFBQUFnQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCc0FBQUFBQUFBQUFBQUFBQVFBQkFBRUFBUUFCQUFFQUFRQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBQUlBQWdBQ0FBSUFDd0FMQUFzQUN3QU1BQVlBQmdBR0FBWUFCZ0FHQUFZQUFRQUJBQUVBQVFBQkFBQUFBQUFBQUFBQUF3QUhBQWNBQndBSEFBY0FDQUFJQUFnQUNBQUpBQWtBQkFBR0FBUUFCZ0FFQUFZQUFnQUJBQUlBQVFBQ0FBRUFBZ0FCQUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFFQUFBQUJBQUlBQVFBQ0FBRUFBZ0FCQUFJQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3QUFBQU1BQUFBREFBTUFBZ0FIQUFJQUJ3QUNBQWNBQUFBQUFBQUFBQUFBQUFBQUZBQVJBQlFBRVFBVUFCRUFGQUFSQUJRQUVRQU5BQUFBRFFBQUFBMEFBQUFMQUFnQUN3QUlBQXNBQ0FBTEFBZ0FDd0FJQUFzQUNBQVdBQUFBREFBSkFBd0FGd0FkQUJjQUhRQVhBQjBBQUFBQUFBSUFBQUFBQUFBQUFBQUtBQW9BQ2dBS0FBb0FDZ0FLQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUZBQVVBQlFBRkFBNEFEZ0FPQUE0QUVnQUtBQW9BQ2dBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFGQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUFBQUFBQUFBSEFBY0FCd0FIQUFBQUJVQUFBQU9BQTRBRGdBT0FBNEFEZ0FrQUJJQUVnQUFBQUFBQUFBRUFBQUFBQUFBQUFJQURBQUFBQUFBQkFBQUFBQUFGd0FBQUFBQUFBQUFBQUFBQWdBQUFBQUFEQUFRQUFBQURBQUJBQUFBQXdBQUFBZ0FBQUFIQUFBQUNRQUFBQUFBQ0FBSEFBZ0FBQUFBQUFBQUFBQUFBQUFBSXdBQUFBQUFId0FFQUFBQUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFJQURRQVFBQVlBQVFBREFBY0FBd0FCQUFrQUV3QUJBQU1BRVFBQUFBQUFBQUFEQUFrQUZnQUFBQllBQUFBV0FBQUFEQUFKQUE4QUR3QUFBQUFBRHdBQUFBTUFCQUFHQUFBQUFBQUJBQU1BQUFBQUFCb0FDUUFCQUFJQUFBQUFBQUlBQVFBTUFBa0FBQUFRQUJNQUFBQUVBQVlBQkFBR0FBQUFBQUFBQUFFQUFBQUJBQUVBRUFBVEFBQUFBQUFBQUFNQUFBQURBQUlBQndBQ0FBRUFBZ0FIQUFBQUFBQWZBQWtBSHdBSkFCOEFDUUFnQUNJQUFBQURBQUVBQkFBR0FBUUFCZ0FFQUFZQUJBQUdBQVFBQmdBRUFBWUFCQUFHQUFRQUJnQUVBQVlBQkFBR0FBUUFCZ0FFQUFZQUFBQUJBQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFBQUFBQUFBQUlBQndBQ0FBY0FBZ0FIQUFJQUJ3QUNBQWNBQWdBSEFBSUFCd0FDQUFFQUFnQUJBQUlBQVFBQ0FBY0FBZ0FCQUFzQUNBQUxBQWdBQUFBSUFBQUFDQUFBQUFnQUFBQUlBQUFBQ0FBTUFBa0FEQUFKQUF3QUNRQUFBQTBBQUFBZ0FDSUFBQUFEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3QUFBQUFBQUFBQUFBQUFCc0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUJBQUdBQUFBQVFBQUFBQUFBZ0FIQUFBQUFBQUFBQWdBQUFBQUFBQUFBQUFCQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURBQUFBQXdBQ0FBQUFBQUFBQUFBQUZBQVJBQTBBQUFBTEFCb0FDUUFhQUFrQUZnQUFBQmNBSFFBQUFBb0FBQUFBQUFBQUJRQVNBQUFBQ2dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFZ0FaQUFBQUVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNnQUFBQUFBQUFBQUFBQUFBQUFGQUFBQUFBQUZBQlVBR1FBQUFBQUFCUUFTQUFFQUFBQUtBR1FBSkFBRVJFWk1WQUQrWTNseWJBRCtaM0psYXdEK2JHRjBiZ0VDQUI4QkZnRWVBU1lCTGdFMkFUNEJQZ0ZHQVU0QlZnRmVBV1lCYmdGMkFYNEJoZ0dPQVpZQm5nR21BYTRCdGdHK0FjWUJ6Z0hXQWQ0QjFnSGVBZVlCN2dBYll6SnpZd0cyWTJOdGNBSkFaR3hwWndHOFpHNXZiUUhDWm5KaFl3SlFiR2xuWVFISWJHbG5ZUUphYkdsbllRSkliRzUxYlFIT2JHOWpiQUhVYkc5amJBSGFiRzlqYkFIZ2JHOWpiQUhtYm5WdGNnSHNiMjUxYlFIeWNHNTFiUUg0YzIxamNBSCtjM013TVFJRWMzTXdNZ0lLYzNNd013SVFjM013TkFJV2MzTXdOUUljYzNNd05nSWljM013TndJb2MzVmljd0l1YzNWd2N3STBkRzUxYlFJNkFjSUFBQVBHQUFkQldrVWdBL1pEVWxRZ0EvWkdVa0VnQkNaTlQwd2dCRmhPUVZZZ0JJcFNUMDBnQkx4VVVrc2dBL1lBQVFBQUFBRUhEZ0FCQUFBQUFRVXFBQVlBQUFBQkFrb0FBUUFBQUFFQ0RBQUVBQUFBQVFTZ0FBRUFBQUFCQVpZQUFRQUFBQUVDQmdBQkFBQUFBUUdNQUFRQUFBQUJBYWdBQkFBQUFBRUJxQUFFQUFBQUFRRzhBQUVBQUFBQkFYSUFBUUFBQUFFQmNBQUJBQUFBQVFGdUFBRUFBQUFCQVlnQUFRQUFBQUVCaWdBQkFBQUFBUUpDQUFFQUFBQUJBWkFBQVFBQUFBRUNVQUFCQUFBQUFRSjJBQUVBQUFBQkFwd0FBUUFBQUFFQ3dnQUJBQUFBQVFFc0FBWUFBQUFCQVpBQUFRQUFBQUVCdEFBQkFBQUFBUUhHQUFFQUFBQUJBZGdBQVFBQUFBRUJDZ0FBQUFFQUFBQUFBQUVBQ3dBQUFBRUFHd0FBQUFFQUNnQUFBQUVBRmdBQUFBRUFDQUFBQUFFQUJRQUFBQUVBQndBQUFBRUFCZ0FBQUFFQUhBQUFBQUVBRXdBQUFBRUFGQUFBQUFFQUFRQUFBQUVBREFBQUFBRUFEUUFBQUFFQURnQUFBQUVBRHdBQUFBRUFFQUFBQUFFQUVRQUFBQUVBRWdBQUFBRUFIZ0FBQUFFQUhRQUFBQUVBRlFBQUFBSUFBZ0FFQUFBQUFnQUpBQW9BQUFBREFCY0FHQUFhQUFBQUJBQUpBQW9BQ1FBS0FBRC8vd0FVQUFBQUFRQUNBQU1BQkFBSUFBMEFEZ0FQQUJBQUVRQVNBQk1BRkFBVkFCWUFGd0FZQUJrQUdnQUJCMmdBQWdBQkIwUUFBUUFCQjBRQjdnQUJCMFFCZndBQkIwUUNCUUFCQjBRQmdRQUJCMlFCaVFBQkRqb0FBUWRHQUFFT01nQUJCMFFBQWdkWUFBSUNQQUk5QUFJSFRnQUNBajRDUHdBQkRpNEFBd2N1QnpJSE5nQUNCMEFBQXdKK0FuOENmd0FDQjFZQUJnSnhBbThDY2dKekFuQUZIZ0FDQnpRQUJnVVlCUmtGR2dVYkJSd0ZIUUFEQUFFSFFnQUJCdjRBQUFBQkFBQUFHUUFDQnlBSENBZUNCMFlBQndBQUJ3d0hEQWNNQnd3SERBY01BQUlHMGdBS0FkY0IxZ0hWQWk4Q01BSXhBaklDTXdJMEFqVUFBZ2E0QUFvQ1RnQjZBSE1BZEFKUEFsQUNVUUpTQWxNQ1ZBQUNCcDRBQ2dHVkFIb0Fjd0IwQVpZQmx3R1lBWmtCbWdHYkFBSUc3Z0FNQWxVQ1Z3SldBbGdDV1FKM0FuZ0NlUUo2QW5zQ2ZBSjlBQUlISkFBVUFtb0NiZ0pvQW1VQ1p3Sm1BbXNDYVFKdEFtd0NYd0phQWxzQ1hBSmRBbDRBR2dBY0FtTUNkUUFDQnI0QUZBU2xBb0VFbmdTZkJLQUVvUVNpQW5ZRW93U2tBbHdDWGdKZEFsc0NYd0oxQUJvQ1l3QWNBbG9BQWdjTUFCUUNhd0p0QW00Q2FBSmxBbWNDWmdKcEFtd0NhZ0FiQUJVQUZnQVhBQmdBR1FBYUFCd0FIUUFVQUFJR3RnQVVCS0lFb3dLQkJKNEVud1NnQktFQ2RnU2tBQmNBR1FBWUFCWUFHd0FVQUJvQUhRQWNBQlVFcFFBQS8vOEFGUUFBQUFFQUFnQURBQVFBQndBSUFBMEFEZ0FQQUJBQUVRQVNBQk1BRkFBVkFCWUFGd0FZQUJrQUdnQUEvLzhBRlFBQUFBRUFBZ0FEQUFRQUJRQUlBQTBBRGdBUEFCQUFFUUFTQUJNQUZBQVZBQllBRndBWUFCa0FHZ0FBLy84QUZnQUFBQUVBQWdBREFBUUFCZ0FJQUFrQURRQU9BQThBRUFBUkFCSUFFd0FVQUJVQUZnQVhBQmdBR1FBYUFBRC8vd0FXQUFBQUFRQUNBQU1BQkFBR0FBZ0FDZ0FOQUE0QUR3QVFBQkVBRWdBVEFCUUFGUUFXQUJjQUdBQVpBQm9BQVAvL0FCWUFBQUFCQUFJQUF3QUVBQVlBQ0FBTEFBMEFEZ0FQQUJBQUVRQVNBQk1BRkFBVkFCWUFGd0FZQUJrQUdnQUEvLzhBRmdBQUFBRUFBZ0FEQUFRQUJnQUlBQXdBRFFBT0FBOEFFQUFSQUJJQUV3QVVBQlVBRmdBWEFCZ0FHUUFhQUFFUGtnQTJCdklGdEFXNEJmQUhBQVgyQmJ3SERnWXlCam9GL0FhR0IxUUZ3QVp5QmtJR0FnZGtCZ2dHU2dhU0JnNEhIQVhFQmNnR0ZBY3FCY3dGMEFYVUJsSUdXZ1lhQnA0SE9BWFlCbndHWWdZZ0IwWUdKZ1pxQnFvR0xBWGNCZUFGNUFYb0JyWUd3Z2JPQnRvRzVnWHNBQUlIQWdEckFvSUNRd0pDQWtFQ1FBSTRBZllCOVFIMEFmTUI4Z0h4QWZBQjd3SHVBZTBCN0FIckFlb0I2UUhvQWVjQjVnSGxBZVFCNHdIaUFuUUNoQU5CQW9ZQ2hRTkFBZk1DZ3dLSUFtSUU0d1RrQWZvQit3VGxCT1lFNXdIOEJPZ0IvUUgrQWY4RTdRSUFBZ0FFN2dUdkFnRUNBZ0lEQWdvRS9BVDlBZ3NDREFJTkFnNENEd0lRQlFBRkFRVURCUVlGRHdJU0FoTUNGQUlWQWhZQ0Z3SVlBaGtDR2dJYkFnUUNCUUlHQWdjQ0NBSUpBa3NDSFFJZUFoOENJQVVKQWlFQ0l3SWtBaVVDSndJcEFvY0RRZ05EQTBRRFJRTkdBMGNEU0FOSkEwb0RTd05NQTAwRFRnTlBBMUFEVVFOU0ExTURWQU5WQTFZRFZ3TllBMWtEV2dOYkExd0RYUU9UQTE0RFh3TmdBMkVEWWdOakEyUURaUU5tQTJjRGFBTnBBMm9EYXdOc0EyMERiZ052QTNBRGNRTnlBM01GRUFOMUEzWURkd040QTNrRGVnTjdBM3dEZlFOK0EzOERnQU9CQTRJRGd3T0VBNFVEaGdVVEE0Y0RpQU9LQTRrRGl3T01BNDBEamdPUEE1QURrUU9TQTVRRGxRT1dCUkVGRWdUY0JOMEUzZ1RmQk9rRTdBVHFCT3NFOEFUeEJQSUU0QVRoQk9JRSt3VCtCUDhGQWdVRUJRVUNFUVVIQlBNRTlBVDFCUFlFOXdUNEJQa0UrZ1VVQlJVRkZnVVhCUWdGQ2dVTEFpZ0ZEUUlxQlE0RkRBSW1BaHdDSWdVY0JSMEFBZ2NBQVBvQjl3S0NBZUVCNEFIZkFkNEIzUUhjQWRzQjJnSFpBZGdDUXdKQ0FrRUNRQUk0QWZZQjlRSDBBZk1COGdIeEFmQUI3d0h1QWUwQjdBSHJBZW9CNlFIb0FlY0I1Z0hsQWVRQjR3SGlBZmdCK1FLRUFvWUNoUUtIQW9NQ2lBSmlBZm9CK3dIOEFmMEIvZ0gvQWdBQ0FRSUNBZ01DQkFJRkFnWUNCd0lJQWdrQ0NnSUxBZ3dDRFFJT0FoQUNFUVVQQWhJQ0V3SVVBaFVDRmdJWEFoZ0NHUUlhQWhzQ1N3SWRBaDRDSHdJZ0JRa0NJUUlqQWlRQ0pRSW1BaWNDS0FJcEFpc0NMQUl1QWkwRFFBTkJBMElEUXdORUEwVURSZ05IQTBnRFNRTktBMHNEVEFOTkEwNERUd05RQTFFRFVnTlRBMVFEVlFOV0ExY0RXQU5aQTFvRFd3TmNBMTBEWGdOZkEyQURZUU5pQTJNRFpBTmxBMllEWndOb0Eya0RhZ05yQTJ3RGJRTnVBMjhEY0FOeEEzSURjd04wQlJBRGRRTjJBM2NEZUFONUEzb0Rld044QTMwRGZnTi9BNEFEZ1FPQ0E0TURoQU9GQTRZRkV3T0hBNGdEaWdPSkE0c0RqQU9OQTQ0RGp3T1FBNUVEa2dPVEE1UURsUU9XQlJFRkVnVGNCTjBFM2dUZkJPQUU0UVRpQk9NRTVBVGxCT1lFNXdUb0JPa0U2Z1RyQk93RTdRVHVCTzhFOEFUeEJQSUU4d1QwQlBVRTlnVDNCUGdDRHdUNUJQb0Urd1Q4QlAwRS9nVC9CUUFGQVFVQ0JRTUZCQVVGQlFZRkJ3VVVCUlVGRmdVWEJRZ0ZDZ1VMQlEwQ0tnVU9CUXdDSEFJaUJSd0ZIUUFCQUFFQmV3QUJBQUVBU3dBQkFBRUF1d0FCQUFFQU5nQUJBQUVBRXdBQkFBSURHUU1hQUFJRzVBYllBQUlHNWdiWUFBRUc3Z0FCQnZBQUFRYnlBQUlBQVFBVUFCMEFBQUFCQUFJQUx3QlBBQUVBQXdCSkFFc0NlZ0FDQUFBQUFRYmVBQUVBQmdMTEFzd0MzUUxlQTJBRGFRQUJBQVlBVFFCT0F2SUQzd1BoQkZvQUFnQURBWlFCbEFBQUFkVUIxd0FCQWk4Q05RQUVBQUlBQWdDb0FLd0FBUUVrQVNjQUFRQUJBQXdBSndBb0FDc0FNd0ExQUVZQVJ3QklBRXNBVXdCVUFGVUFBZ0FDQUJRQUhRQUFBbVVDYmdBS0FBSUFCZ0JOQUUwQUJnQk9BRTRBQkFMeUF2SUFCUVBmQTk4QUF3UGhBK0VBQWdSYUJGb0FBUUFDQUFRQUZBQWRBQUFDZGdKMkFBb0NnUUtCQUFzRW5nU2xBQXdBQWdBR0FCb0FHZ0FBQUJ3QUhBQUJBbG9DWHdBQ0FtTUNZd0FJQW1VQ2JnQUpBblVDZFFBVEFBRUFGQUFhQUJ3Q1dnSmJBbHdDWFFKZUFsOENZd0oxQW5ZQ2dRU2VCSjhFb0FTaEJLSUVvd1NrQktVQUFRWGVBQUVGNEFBQkJlSUFBUVhrQUFFRjVnQUJCZWdBQVFYcUFBRUY3QUFCQmU0QUFRWHdBQUVGOGdBQkJmUUFBUVgyQUFFRitBQUJCZm9BQWdYOEJnSUFBZ1lDQmdnQUFnWUlCZzRBQWdZT0JoUUFBZ1lVQmhvQUFnWWFCaUFBQWdZZ0JpWUFBZ1ltQml3QUFnWXNCaklBQWdZeUJqZ0FBZ1k0Qmo0QUF3WStCa1FHU2dBREJrZ0dUZ1pVQUFNR1VnWllCbDRBQXdaY0JtSUdhQUFEQm1ZR2JBWnlBQU1HY0FaMkJud0FBd1o2Qm9BR2hnQURCb1FHaWdhUUFBUUdqZ2FVQnBvR29BQUVCcHdHb2dhb0JxNEFCUWFxQnJBR3RnYThCc0lBQlFhOEJzSUd5QWJPQnRRQUJRYk9CdFFHMmdiZ0J1WUFCUWJnQnVZRzdBYnlCdmdBQlFieUJ2Z0cvZ2NFQndvQUJRY0VCd29IRUFjV0J4d0FCUWNXQnh3SElnY29CeTRBQlFjb0J5NEhOQWM2QjBBQUJRYzZCMEFIUmdkTUIxSUFCZ2RNQjFJSFdBZGVCMlFIYWdBR0IySUhhQWR1QjNRSGVnZUFBQVlIZUFkK0I0UUhpZ2VRQjVZQUJnZU9CNVFIbWdlZ0I2WUhyQUFHQjZRSHFnZXdCN1lIdkFmQ0FBWUh1Z2ZBQjhZSHpBZlNCOWdBQmdmUUI5WUgzQWZpQitnSDdnQUhDQzRINWdmc0IvSUgrQWYrQ0FRQUJ3Z21CL29JQUFnR0NBd0lFZ2dZQUFFQTZ3QUtBRVVBUmdCSEFFZ0FTUUJLQUVzQVRBQk5BRTRBVHdCUUFGRUFVZ0JUQUZRQVZRQldBRmNBV0FCWkFGb0FXd0JjQUYwQVhnQ0ZBSVlBaHdDSkFJb0Fpd0NOQUpBQWtnQ1VBTHNBdkFDOUFMNEF2d0RBQU1FQXdnRERBTVFBeFFER0FNY0F5QURKQU1vQXl3RE1BTTBBemdEcUFPc0E3QUR0QU80QTd3RHdBUEVBOGdEekFQUUE5UUQyQVBjQStBRDVBUG9BK3dEOEFQMEEvZ0QvQVFBQkFRRUNBUU1CQkFFRkFRWUJCd0V3QVRRQk5nRTRBVG9CUEFGQ0FVUUJSZ0ZLQVUwQldnS05BbzhDcXdLc0FxMENyZ0t2QXJBQ3NRS3lBck1DdEFLMUFyWUN0d0s0QXJrQ3VnSzdBcndDdlFLK0FyOEN3QUxCQXNJQ3d3TEVBc1VDeGdMSUFzb0N6QUxPQXRBQzBnTFVBdFlDMkFMYUF0d0MzZ0xnQXVJQzVBTG1BdWdDNmdMc0F1NEM4QUx5QXZVQzl3TDVBdnNDL1FML0F3RURBd01GQXdjRENnTU1BdzRERUFNU0F4UURGZ01ZQXhvREhBTWVBeUFESWdNa0F5WURLQU1xQXl3RExnTXdBeklETkFNM0F6a0RPd005QXo4RHJ3T3dBN0VEc2dPMEE3VUR0Z08zQTdnRHVRTzZBN3NEdkFPOUE5UUQxUVBXQTljRDJBUFpBOW9EMndQY0E5MEQzZ1BmQStBRDRRUGlBK01ENVFQbkEra0Q2d1FBQkFJRUJBUVNCQmtFSHdRbEJJOEVrQVNVQkpnRkdRVWJBQUVBK2dBSUFBb0FGQUFWQUJZQUZ3QVlBQmtBR2dBYkFCd0FIUUFsQUNZQUp3QW9BQ2tBS2dBckFDd0FMUUF1QUM4QU1BQXhBRElBTXdBMEFEVUFOZ0EzQURnQU9RQTZBRHNBUEFBOUFENEFaUUJuQUlFQWd3Q0VBSXdBandDUkFKTUFzUUN5QUxNQXRBQzFBTFlBdHdDNEFMa0F1Z0RTQU5NQTFBRFZBTllBMXdEWUFOa0EyZ0RiQU53QTNRRGVBTjhBNEFEaEFPSUE0d0RrQU9VQTVnRG5BT2dBNlFFdkFUTUJOUUUzQVRrQk93RkJBVU1CUlFGSkFVc0JUQUZZQVZrQnB3R3RBYklCdFFLTEFvd0NqZ0tRQXBFQ2tnS1RBcFFDbFFLV0FwY0NtQUtaQXBvQ213S2NBcDBDbmdLZkFxQUNvUUtpQXFNQ3BBS2xBcVlDcHdLb0Fxa0NxZ0xIQXNrQ3l3TE5BczhDMFFMVEF0VUMxd0xaQXRzQzNRTGZBdUVDNHdMbEF1Y0M2UUxyQXUwQzd3THhBdk1DOUFMMkF2Z0MrZ0w4QXY0REFBTUNBd1FEQmdNSkF3c0REUU1QQXhFREV3TVZBeGNER1FNYkF4MERId01oQXlNREpRTW5BeWtES3dNdEF5OERNUU16QXpVRE5nTTRBem9EUEFNK0E1Y0RtQU9aQTVvRG13T2NBNTBEbndPZ0E2RURvZ09qQTZRRHBRT21BNmNEcUFPcEE2b0Rxd09zQTYwRHJnTytBNzhEd0FQQkE4SUR3d1BFQThVRHhnUEhBOGdEeVFQS0E4c0R6QVBOQTg0RHp3UFFBOUVEMGdQVEErUUQ1Z1BvQStvRC93UUJCQU1FR0FRZUJDUUVqZ1NUQkpjRkdBVWFBY3dBQWdCTkFjMEFBZ0JRQWM0QUF3QktBRTBCendBREFFb0FVQUFCQUFFQVNnSExBQUlBU2dIUkFBSUFXQUhRQUFJQVdBQUJBQU1BU2dCWEFKVUFBQUFCQUFFQUFRQUJBQUFBQXdTM0FBSUFyUUxOQUFJQXFRUzlBQUlBclFUS0FBSUFxUVM0QUFJQXJRTE9BQUlBcVFTbkFBSUFxUVMrQUFJQXJRUmFBQUlBclFUTEFBSUFxUU04QUFJQXFRTStBQUlBcVFNOUFBSUFxUU0vQUFJQXFRUzJBQUlBcVFTN0FBSUJ5Z1M1QUFJQXJRU21BQUlBcVFMbkFBSUJ5Z1B4QUFJQXFRVEZBQUlBclFNZkFBSUJ5Z1RRQUFJQXJRVFZBQUlBclFUVEFBSUFxZ00yQUFJQXFRVFpBQUlBclFTOEFBSUJ5Z1M2QUFJQXJRUHlBQUlBcVFUR0FBSUFyUU1nQUFJQnlnVFJBQUlBclFUV0FBSUFyUVRVQUFJQXFnTTNBQUlBcVFUYUFBSUFyUVMvQUFJQXFRTDRBQUlCeWdUQkFBSUFyUUw2QUFJQXFRTDhBQUlCeWdUREFBSUFyUU1WQUFJQXFRTWJBQUlCeWdUT0FBSUFyUVBtQUFJQXFRVFhBQUlBclFQa0FBSUFxQVRBQUFJQXFRTDVBQUlCeWdUQ0FBSUFyUUw3QUFJQXFRTDlBQUlCeWdURUFBSUFyUU1XQUFJQXFRTWNBQUlCeWdUUEFBSUFyUVBuQUFJQXFRVFlBQUlBclFQbEFBSUFxQU1QQUFJQXFRTVJBQUlCeWdUTUFBSUFyUVN5QUFJQXJBTVFBQUlBcVFNU0FBSUJ5Z1ROQUFJQXJRU3pBQUlBckFNQ0FBSUFxUU1FQUFJQnlnVEhBQUlBclFTb0FBSUFxQUtnQUFJQXFnS3FBQUlBcVFTQkFBSUFyUVBxQUFJQXFBU0RBQUlBcXdTRkFBSUFxZ01EQUFJQXFRTUZBQUlCeWdUSUFBSUFyUVNwQUFJQXFBSzdBQUlBcWdMRkFBSUFxUVNDQUFJQXJRUHJBQUlBcUFTRUFBSUFxd1NHQUFJQXFnSzRBQUlBcVFLM0FBSUFxQVJZQUFJQXF3THNBQUlBcWdTdkFBSUFyQVJwQUFJQXFRUnhBQUlBclFSckFBSUFxQVJ0QUFJQXF3UnZBQUlBcWdScUFBSUFxUVJ5QUFJQXJRUnNBQUlBcUFSdUFBSUFxd1J3QUFJQXFnUjNBQUlBcVFSL0FBSUFyUVI1QUFJQXFBUjdBQUlBcXdSOUFBSUFxZ1I0QUFJQXFRU0FBQUlBclFSNkFBSUFxQVI4QUFJQXF3UitBQUlBcWdLUkFBSUFxUVF2QUFJQXJRS1FBQUlBcUFReEFBSUFxd0tUQUFJQXFnU3FBQUlBckFLWkFBSUFxUVJIQUFJQXJRS1lBQUlBcUFSSkFBSUFxd1JMQUFJQXFnU3NBQUlBckFLZEFBSUFxUVJaQUFJQXJRS2NBQUlBcUFSWEFBSUFxd0xyQUFJQXFnU3VBQUlBckFLc0FBSUFxUVF3QUFJQXJRS3JBQUlBcUFReUFBSUFxd0t1QUFJQXFnU3JBQUlBckFLMEFBSUFxUVJJQUFJQXJRS3pBQUlBcUFSS0FBSUFxd1JNQUFJQXFnU3RBQUlBckFLOUFBSUFxUVJjQUFJQXJRSzhBQUlBcUFSZUFBSUFxd0svQUFJQXFnU3hBQUlBckFMQ0FBSUFxUVIwQUFJQXJRTEJBQUlBcUFSMkFBSUFxd01tQUFJQXFnUzFBQUlBckFLaUFBSUFxUVJiQUFJQXJRS2hBQUlBcUFSZEFBSUFxd0trQUFJQXFnU3dBQUlBckFLbkFBSUFxUVJ6QUFJQXJRS21BQUlBcUFSMUFBSUFxd01sQUFJQXFnUzBBQUlBckFUSkFBTUFxZ0NwQk5JQUF3Q3FBS2tBQWdBUkFDVUFLUUFBQUNzQUxRQUZBQzhBTkFBSUFEWUFPd0FPQUQwQVBnQVVBRVVBU1FBV0FFc0FUUUFiQUU4QVZBQWVBRllBV3dBa0FGMEFYZ0FxQUlFQWdRQXNBSU1BZ3dBdEFJWUFoZ0F1QUlrQWlRQXZBSTBBalFBd0FKZ0Ftd0F4QU5BQTBBQTFBQUE9XCJcclxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/pdfmake/build/vfs_fonts.js\n"); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ !function() { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function() { return module['default']; } : /******/ function() { return module; }; /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module can't be inlined because the eval-source-map devtool is used. /******/ var __webpack_exports__ = __webpack_require__("./libs/pdfmake/pdfmake.js"); /******/ var __webpack_export_target__ = window; /******/ for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; /******/ if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); /******/ /******/ })() ;
SIMPAN PERUBAHAN